Name: series-workflow8jrxg Phase: Failed StartedAt: 2026-08-06 19:32:15 +0000 UTC FinishedAt: 2026-08-06 19:34:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8jrxg[0] Phase: Succeeded StartedAt: 2026-08-06 19:32:15 +0000 UTC FinishedAt: 2026-08-06 19:34:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8jrxg[0].run-triage Phase: Succeeded StartedAt: 2026-08-06 19:32:15 +0000 UTC FinishedAt: 2026-08-06 19:34:16 +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+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBFODAwIHNlcmllcyBFdGhlcm5ldCBkcml2ZXIgKGljZSksIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgbmV0d29yayBjYXJkIGRyaXZlci4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4gQWRkaXRpb25hbGx5LCB0aGUgY2hhbmdlcyBwcmltYXJpbHkgYWZmZWN0IGxpbmsgc3RhdHVzIGxvZ2dpbmcgYW5kIGhhcmR3YXJlLWRlcGVuZGVudCBsaW5rIGV2ZW50IGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxOTozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ1MDAyNDJiNWE2NGY3MTJjNjI4NWZmM2ZmMjRiYWE5ZmJmYzI4MjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDE5OjMzOjIxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxuaW5kZXggZmM5MWI2NjY1ZjkwNS4uOWRhZDE2MWJkOTdjNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXG5AQCAtMTAwOSw3ICYjNDM7MTAwOSw3IEBAIGludCBpY2VfZ2V0X3Jzc19rZXkoc3RydWN0IGljZV92c2kgKnZzaSwgdTggKnNlZWQpO1xuIGludCBpY2Vfc2V0X3Jzc19oZnVuYyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1OCBoZnVuYyk7XG4gdm9pZCBpY2VfZmlsbF9yc3NfbHV0KHU4ICpsdXQsIHUxNiByc3NfdGFibGVfc2l6ZSwgdTE2IHJzc19zaXplKTtcbiBpbnQgaWNlX3NjaGVkdWxlX3Jlc2V0KHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9yZXNldF9yZXEgcmVzZXQpO1xuLXZvaWQgaWNlX3ByaW50X2xpbmtfbXNnKHN0cnVjdCBpY2VfdnNpICp2c2ksIGJvb2wgaXN1cCk7XG4mIzQzO3ZvaWQgaWNlX3ByaW50X2xpbmtfbXNnKHN0cnVjdCBpY2VfdnNpICp2c2ksIGJvb2wgaXN1cCwgdTE2IGxpbmtfc3BlZWQpO1xuIGludCBpY2VfcGx1Z19hdXhfZGV2KHN0cnVjdCBpY2VfcGYgKnBmKTtcbiB2b2lkIGljZV91bnBsdWdfYXV4X2RldihzdHJ1Y3QgaWNlX3BmICpwZik7XG4gdm9pZCBpY2VfcmRtYV9maW5hbGl6ZV9zZXR1cChzdHJ1Y3QgaWNlX3BmICpwZik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuY1xuaW5kZXggN2ViMzgwYmU3ZWQyNy4uOTRhYjIxZjMyY2ZkOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuY1xuQEAgLTI3ODUsNyAmIzQzOzI3ODUsNyBAQCBpY2Vfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdC8qIFRlbGwgdGhlIE9TIGxpbmsgaXMgZ29pbmcgZG93biwgdGhlIGxpbmsgd2lsbCBnb1xuIFx0XHQgKiBiYWNrIHVwIHdoZW4gZncgc2F5cyBpdCBpcyByZWFkeSBhc3luY2hyb25vdXNseVxuIFx0XHQgKi9cbi1cdFx0aWNlX3ByaW50X2xpbmtfbXNnKG5wLVx1MDAzZXZzaSwgZmFsc2UpO1xuJiM0MztcdFx0aWNlX3ByaW50X2xpbmtfbXNnKG5wLVx1MDAzZXZzaSwgZmFsc2UsIDApO1xuIFx0XHRuZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpO1xuIFx0XHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5pbmRleCBkODg4MzU0ODJkM2FhLi45NzRmMjdmZmViMzk4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5AQCAtNzcyLDggJiM0Mzs3NzIsOSBAQCBzdGF0aWMgdm9pZCBpY2VfcHJpbnRfdG9wb19jb25mbGljdChzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxuICAqIGljZV9wcmludF9saW5rX21zZyAtIHByaW50IGxpbmsgdXAgb3IgZG93biBtZXNzYWdlXG4gICogQHZzaTogdGhlIFZTSSB3aG9zZSBsaW5rIHN0YXR1cyBpcyBiZWluZyBxdWVyaWVkXG4gICogQGlzdXA6IGJvb2xlYW4gZm9yIGlmIHRoZSBsaW5rIGlzIG5vdyB1cCBvciBkb3duXG4mIzQzOyAqIEBsaW5rX3NwZWVkOiBjdXJyZW50IGxpbmsgc3BlZWQgdmFsdWUgdG8gZGlzcGxheVxuICAqL1xuLXZvaWQgaWNlX3ByaW50X2xpbmtfbXNnKHN0cnVjdCBpY2VfdnNpICp2c2ksIGJvb2wgaXN1cClcbiYjNDM7dm9pZCBpY2VfcHJpbnRfbGlua19tc2coc3RydWN0IGljZV92c2kgKnZzaSwgYm9vbCBpc3VwLCB1MTYgbGlua19zcGVlZClcbiB7XG4gXHRzdHJ1Y3QgaWNlX2FxY19nZXRfcGh5X2NhcHNfZGF0YSAqY2FwcztcbiBcdGNvbnN0IGNoYXIgKmFuX2FkdmVydGlzZWQ7XG5AQCAtNzk3LDcgJiM0Mzs3OTgsNyBAQCB2b2lkIGljZV9wcmludF9saW5rX21zZyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCBib29sIGlzdXApXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdHN3aXRjaCAodnNpLVx1MDAzZXBvcnRfaW5mby1cdTAwM2VwaHkubGlua19pbmZvLmxpbmtfc3BlZWQpIHtcbiYjNDM7XHRzd2l0Y2ggKGxpbmtfc3BlZWQpIHtcbiBcdGNhc2UgSUNFX0FRX0xJTktfU1BFRURfMjAwR0I6XG4gXHRcdHNwZWVkID0gXCYjMzQ7MjAwIEdcJiMzNDs7XG4gXHRcdGJyZWFrO1xuQEAgLTExMjcsMTEgJiM0MzsxMTI4LDggQEAgaWNlX2xpbmtfZXZlbnQoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcG9ydF9pbmZvICpwaSwgYm9vbCBsaW5rX3VwLFxuIFxuIFx0aWNlX2NoZWNrX2xpbmtfY2ZnX2VycihwZiwgcGktXHUwMDNlcGh5LmxpbmtfaW5mby5saW5rX2NmZ19lcnIpO1xuIFxuLVx0LyogQ2hlY2sgaWYgdGhlIGxpbmsgc3RhdGUgaXMgdXAgYWZ0ZXIgdXBkYXRpbmcgbGluayBpbmZvLCBhbmQgdHJlYXRcbi1cdCAqIHRoaXMgZXZlbnQgYXMgYW4gVVAgZXZlbnQgc2luY2UgdGhlIGxpbmsgaXMgYWN0dWFsbHkgVVAgbm93LlxuLVx0ICovXG4tXHRpZiAocGh5X2luZm8tXHUwMDNlbGlua19pbmZvLmxpbmtfaW5mbyBcdTAwMjYgSUNFX0FRX0xJTktfVVApXG4tXHRcdGxpbmtfdXAgPSB0cnVlO1xuJiM0MztcdGxpbmtfdXAgPSBwaHlfaW5mby1cdTAwM2VsaW5rX2luZm8ubGlua19pbmZvIFx1MDAyNiBJQ0VfQVFfTElOS19VUDtcbiYjNDM7XHRsaW5rX3NwZWVkID0gcGh5X2luZm8tXHUwMDNlbGlua19pbmZvLmxpbmtfc3BlZWQ7XG4gXG4gXHR2c2kgPSBpY2VfZ2V0X21haW5fdnNpKHBmKTtcbiBcdGlmICghdnNpIHx8ICF2c2ktXHUwMDNlcG9ydF9pbmZvKVxuQEAgLTExNjEsNyAmIzQzOzExNTksNyBAQCBpY2VfbGlua19ldmVudChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wb3J0X2luZm8gKnBpLCBib29sIGxpbmtfdXAsXG4gXHRcdFx0aWNlX3NldF9kZmx0X21pYihwZik7XG4gXHR9XG4gXHRpY2VfdnNpX2xpbmtfZXZlbnQodnNpLCBsaW5rX3VwKTtcbi1cdGljZV9wcmludF9saW5rX21zZyh2c2ksIGxpbmtfdXApO1xuJiM0MztcdGljZV9wcmludF9saW5rX21zZyh2c2ksIGxpbmtfdXAsIGxpbmtfc3BlZWQpO1xuIFxuIFx0aWNlX3ZjX25vdGlmeV9saW5rX3N0YXRlKHBmKTtcbiBcbkBAIC02NzQyLDcgJiM0Mzs2NzQwLDggQEAgc3RhdGljIGludCBpY2VfdXBfY29tcGxldGUoc3RydWN0IGljZV92c2kgKnZzaSlcbiBcdCAgICAodnNpLVx1MDAzZXBvcnRfaW5mby1cdTAwM2VwaHkubGlua19pbmZvLmxpbmtfaW5mbyBcdTAwMjYgSUNFX0FRX0xJTktfVVApIFx1MDAyNlx1MDAyNlxuIFx0ICAgICgodnNpLVx1MDAzZW5ldGRldiBcdTAwMjZcdTAwMjYgKHZzaS1cdTAwM2V0eXBlID09IElDRV9WU0lfUEYgfHxcbiBcdFx0XHQgICAgICB2c2ktXHUwMDNldHlwZSA9PSBJQ0VfVlNJX1NGKSkpKSB7XG4tXHRcdGljZV9wcmludF9saW5rX21zZyh2c2ksIHRydWUpO1xuJiM0MztcdFx0aWNlX3ByaW50X2xpbmtfbXNnKHZzaSwgdHJ1ZSxcbiYjNDM7XHRcdFx0XHQgICB2c2ktXHUwMDNlcG9ydF9pbmZvLVx1MDAzZXBoeS5saW5rX2luZm8ubGlua19zcGVlZCk7XG4gXHRcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXModnNpLVx1MDAzZW5ldGRldik7XG4gXHRcdG5ldGlmX2NhcnJpZXJfb24odnNpLVx1MDAzZW5ldGRldik7XG4gXHRcdGljZV9wdHBfbGlua19jaGFuZ2UocGYsIHRydWUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgRTgwMCBzZXJpZXMgRXRoZXJuZXQgZHJpdmVyIChpY2UpLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgY2FyZCBkcml2ZXIuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuIEFkZGl0aW9uYWxseSwgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFmZmVjdCBsaW5rIHN0YXR1cyBsb2dnaW5nIGFuZCBoYXJkd2FyZS1kZXBlbmRlbnQgbGluayBldmVudCBoYW5kbGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NTAwMjQyYjVhNjRmNzEyYzYyODVmZjNmZjI0YmFhOWZiZmMyODI2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgNiAxOTozMzoyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaAppbmRleCBmYzkxYjY2NjVmOTA1Li45ZGFkMTYxYmQ5N2M0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oCkBAIC0xMDA5LDcgJiM0MzsxMDA5LDcgQEAgaW50IGljZV9nZXRfcnNzX2tleShzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1OCAqc2VlZCk7CiBpbnQgaWNlX3NldF9yc3NfaGZ1bmMoc3RydWN0IGljZV92c2kgKnZzaSwgdTggaGZ1bmMpOwogdm9pZCBpY2VfZmlsbF9yc3NfbHV0KHU4ICpsdXQsIHUxNiByc3NfdGFibGVfc2l6ZSwgdTE2IHJzc19zaXplKTsKIGludCBpY2Vfc2NoZWR1bGVfcmVzZXQoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX3Jlc2V0X3JlcSByZXNldCk7Ci12b2lkIGljZV9wcmludF9saW5rX21zZyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCBib29sIGlzdXApOwomIzQzO3ZvaWQgaWNlX3ByaW50X2xpbmtfbXNnKHN0cnVjdCBpY2VfdnNpICp2c2ksIGJvb2wgaXN1cCwgdTE2IGxpbmtfc3BlZWQpOwogaW50IGljZV9wbHVnX2F1eF9kZXYoc3RydWN0IGljZV9wZiAqcGYpOwogdm9pZCBpY2VfdW5wbHVnX2F1eF9kZXYoc3RydWN0IGljZV9wZiAqcGYpOwogdm9pZCBpY2VfcmRtYV9maW5hbGl6ZV9zZXR1cChzdHJ1Y3QgaWNlX3BmICpwZik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jCmluZGV4IDdlYjM4MGJlN2VkMjcuLjk0YWIyMWYzMmNmZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jCkBAIC0yNzg1LDcgJiM0MzsyNzg1LDcgQEAgaWNlX3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkvKiBUZWxsIHRoZSBPUyBsaW5rIGlzIGdvaW5nIGRvd24sIHRoZSBsaW5rIHdpbGwgZ28KIAkJICogYmFjayB1cCB3aGVuIGZ3IHNheXMgaXQgaXMgcmVhZHkgYXN5bmNocm9ub3VzbHkKIAkJICovCi0JCWljZV9wcmludF9saW5rX21zZyhucC0mZ3Q7dnNpLCBmYWxzZSk7CiYjNDM7CQlpY2VfcHJpbnRfbGlua19tc2cobnAtJmd0O3ZzaSwgZmFsc2UsIDApOwogCQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwogCQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jCmluZGV4IGQ4ODgzNTQ4MmQzYWEuLjk3NGYyN2ZmZWIzOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jCkBAIC03NzIsOCAmIzQzOzc3Miw5IEBAIHN0YXRpYyB2b2lkIGljZV9wcmludF90b3BvX2NvbmZsaWN0KHN0cnVjdCBpY2VfdnNpICp2c2kpCiAgKiBpY2VfcHJpbnRfbGlua19tc2cgLSBwcmludCBsaW5rIHVwIG9yIGRvd24gbWVzc2FnZQogICogQHZzaTogdGhlIFZTSSB3aG9zZSBsaW5rIHN0YXR1cyBpcyBiZWluZyBxdWVyaWVkCiAgKiBAaXN1cDogYm9vbGVhbiBmb3IgaWYgdGhlIGxpbmsgaXMgbm93IHVwIG9yIGRvd24KJiM0MzsgKiBAbGlua19zcGVlZDogY3VycmVudCBsaW5rIHNwZWVkIHZhbHVlIHRvIGRpc3BsYXkKICAqLwotdm9pZCBpY2VfcHJpbnRfbGlua19tc2coc3RydWN0IGljZV92c2kgKnZzaSwgYm9vbCBpc3VwKQomIzQzO3ZvaWQgaWNlX3ByaW50X2xpbmtfbXNnKHN0cnVjdCBpY2VfdnNpICp2c2ksIGJvb2wgaXN1cCwgdTE2IGxpbmtfc3BlZWQpCiB7CiAJc3RydWN0IGljZV9hcWNfZ2V0X3BoeV9jYXBzX2RhdGEgKmNhcHM7CiAJY29uc3QgY2hhciAqYW5fYWR2ZXJ0aXNlZDsKQEAgLTc5Nyw3ICYjNDM7Nzk4LDcgQEAgdm9pZCBpY2VfcHJpbnRfbGlua19tc2coc3RydWN0IGljZV92c2kgKnZzaSwgYm9vbCBpc3VwKQogCQlyZXR1cm47CiAJfQogCi0Jc3dpdGNoICh2c2ktJmd0O3BvcnRfaW5mby0mZ3Q7cGh5LmxpbmtfaW5mby5saW5rX3NwZWVkKSB7CiYjNDM7CXN3aXRjaCAobGlua19zcGVlZCkgewogCWNhc2UgSUNFX0FRX0xJTktfU1BFRURfMjAwR0I6CiAJCXNwZWVkID0gJiMzNDsyMDAgRyYjMzQ7OwogCQlicmVhazsKQEAgLTExMjcsMTEgJiM0MzsxMTI4LDggQEAgaWNlX2xpbmtfZXZlbnQoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcG9ydF9pbmZvICpwaSwgYm9vbCBsaW5rX3VwLAogCiAJaWNlX2NoZWNrX2xpbmtfY2ZnX2VycihwZiwgcGktJmd0O3BoeS5saW5rX2luZm8ubGlua19jZmdfZXJyKTsKIAotCS8qIENoZWNrIGlmIHRoZSBsaW5rIHN0YXRlIGlzIHVwIGFmdGVyIHVwZGF0aW5nIGxpbmsgaW5mbywgYW5kIHRyZWF0Ci0JICogdGhpcyBldmVudCBhcyBhbiBVUCBldmVudCBzaW5jZSB0aGUgbGluayBpcyBhY3R1YWxseSBVUCBub3cuCi0JICovCi0JaWYgKHBoeV9pbmZvLSZndDtsaW5rX2luZm8ubGlua19pbmZvICZhbXA7IElDRV9BUV9MSU5LX1VQKQotCQlsaW5rX3VwID0gdHJ1ZTsKJiM0MzsJbGlua191cCA9IHBoeV9pbmZvLSZndDtsaW5rX2luZm8ubGlua19pbmZvICZhbXA7IElDRV9BUV9MSU5LX1VQOwomIzQzOwlsaW5rX3NwZWVkID0gcGh5X2luZm8tJmd0O2xpbmtfaW5mby5saW5rX3NwZWVkOwogCiAJdnNpID0gaWNlX2dldF9tYWluX3ZzaShwZik7CiAJaWYgKCF2c2kgfHwgIXZzaS0mZ3Q7cG9ydF9pbmZvKQpAQCAtMTE2MSw3ICYjNDM7MTE1OSw3IEBAIGljZV9saW5rX2V2ZW50KHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3BvcnRfaW5mbyAqcGksIGJvb2wgbGlua191cCwKIAkJCWljZV9zZXRfZGZsdF9taWIocGYpOwogCX0KIAlpY2VfdnNpX2xpbmtfZXZlbnQodnNpLCBsaW5rX3VwKTsKLQlpY2VfcHJpbnRfbGlua19tc2codnNpLCBsaW5rX3VwKTsKJiM0MzsJaWNlX3ByaW50X2xpbmtfbXNnKHZzaSwgbGlua191cCwgbGlua19zcGVlZCk7CiAKIAlpY2VfdmNfbm90aWZ5X2xpbmtfc3RhdGUocGYpOwogCkBAIC02NzQyLDcgJiM0Mzs2NzQwLDggQEAgc3RhdGljIGludCBpY2VfdXBfY29tcGxldGUoc3RydWN0IGljZV92c2kgKnZzaSkKIAkgICAgKHZzaS0mZ3Q7cG9ydF9pbmZvLSZndDtwaHkubGlua19pbmZvLmxpbmtfaW5mbyAmYW1wOyBJQ0VfQVFfTElOS19VUCkgJmFtcDsmYW1wOwogCSAgICAoKHZzaS0mZ3Q7bmV0ZGV2ICZhbXA7JmFtcDsgKHZzaS0mZ3Q7dHlwZSA9PSBJQ0VfVlNJX1BGIHx8CiAJCQkgICAgICB2c2ktJmd0O3R5cGUgPT0gSUNFX1ZTSV9TRikpKSkgewotCQlpY2VfcHJpbnRfbGlua19tc2codnNpLCB0cnVlKTsKJiM0MzsJCWljZV9wcmludF9saW5rX21zZyh2c2ksIHRydWUsCiYjNDM7CQkJCSAgIHZzaS0mZ3Q7cG9ydF9pbmZvLSZndDtwaHkubGlua19pbmZvLmxpbmtfc3BlZWQpOwogCQluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKHZzaS0mZ3Q7bmV0ZGV2KTsKIAkJbmV0aWZfY2Fycmllcl9vbih2c2ktJmd0O25ldGRldik7CiAJCWljZV9wdHBfbGlua19jaGFuZ2UocGYsIHRydWUpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxOTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDM2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNTYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSUNFIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHRvdWNoZXMgYGljZV9wcmludF9saW5rX21zZ2AgaW4gYGljZV9tYWluLmNgIGFuZCBgaWNlX2V0aHRvb2wuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW50cm9kdWNpbmcgYSBgbGlua19zcGVlZGAgcGFyYW1ldGVyIHRvIGBpY2VfcHJpbnRfbGlua19tc2dgIGFuZCB0aGVuIHRocmVhZGluZyBpdCB0aHJvdWdoIHRoZSB2YXJpb3VzIGNhbGxlcnM6IGBpY2Vfc2V0X2xpbmtfa3NldHRpbmdzYCwgYGljZV9saW5rX2V2ZW50YCwgYW5kIGBpY2VfdXBfY29tcGxldGVgLiAgTmF0dXJhbGx5LCB0aGUgZnVuY3Rpb24gbmFtZSBzdWdnZXN0cyBpdCYjMzk7cyBwcmltYXJpbHkgZm9yIHByaW50aW5nIG1lc3NhZ2VzLCBidXQgSSBhbHdheXMgd2FudCB0byBiZSBzdXJlLCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXQmIzM5O3MgKm9ubHkqIHByaW50aW5nIGEgbWVzc2FnZS4gWWVwLCBqdXN0IGEgbG9nZ2luZyBmdW5jdGlvbi4gRmluZS4KCk5vdywgaG9sZCBvbi4uLiBoZXJlJiMzOTtzIHNvbWV0aGluZyBlbHNlLiAgYGljZV9saW5rX2V2ZW50YCBoYXMgYSBtb3JlIHN1YnN0YW50aWFsIG1vZGlmaWNhdGlvbi4gIFRoZXkmIzM5O3ZlIGNoYW5nZWQgaG93IGBsaW5rX3VwYCBpcyBkZXRlcm1pbmVkLiAgUHJldmlvdXNseSwgaXQgbG9va2VkIGxpa2UgdGhpczoKCmBgYGMKCWlmIChwaHlfaW5mby0mZ3Q7bGlua19pbmZvLmxpbmtfaW5mbyAmYW1wOyBJQ0VfQVFfTElOS19VUCkKCQlsaW5rX3VwID0gdHJ1ZTsKYGBgCgpOb3csIGl0JiMzOTtzIGp1c3Q6CgpgYGBjCglsaW5rX3VwID0gcGh5X2luZm8tJmd0O2xpbmtfaW5mby5saW5rX2luZm8gJmFtcDsgSUNFX0FRX0xJTktfVVA7CmBgYAoKUmlnaHQsIHRoZSBrZXkgZGlmZmVyZW5jZS4gVGhlIG9yaWdpbmFsIGNvZGUgb25seSBzZXQgYGxpbmtfdXBgIHRvIGB0cnVlYCBpZiB0aGUgY29uZGl0aW9uIHdhcyBtZXQ7IG90aGVyd2lzZSwgaXQgd291bGQga2VlcCBpdHMgb3JpZ2luYWwgdmFsdWUuIE5vdywgYGxpbmtfdXBgIGlzICphbHdheXMqIGFzc2lnbmVkIHRoZSByZXN1bHQgb2YgdGhhdCBiaXR3aXNlIEFORCBvcGVyYXRpb24uICBTbywgaWYgYElDRV9BUV9MSU5LX1VQYCBpc24mIzM5O3Qgc2V0LCBgbGlua191cGAgd2lsbCBiZSBleHBsaWNpdGx5IHNldCB0byBgZmFsc2VgLiBUaGF0IGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBhbmQgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnMgaGVyZS4gSSBzaG91bGQgcHJvYmFibHkgZGlnIGludG8gdGhlIGxvZ2ljIGFuZCB0ZXN0IHRoaXMuCgpMZXQmIzM5O3MgZ28gYmFjayBhbmQgZXhhbWluZSBgaWNlX2xpbmtfZXZlbnRgIGluIGBpY2VfbWFpbi5jYCBtb3JlIGNsb3NlbHkgYW5kIHRoaW5rIGFib3V0IHRoZSBwb3NzaWJsZSBjb25zZXF1ZW5jZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWNlX2xpbmtfZXZlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz0xMDg4PXN0YXRpYyB2b2lkIGljZV9jaGVja19saW5rX2NmZ19lcnIoc3RydWN0IGljZV9wZiAqcGYsIHU4IGxpbmtfY2ZnX2Vycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy0xMDk0LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6MTA5NTogKiBpY2VfbGlua19ldmVudCAtIHByb2Nlc3MgdGhlIGxpbmsgZXZlbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTEwOTYtICogQHBmOiBQRiB0aGF0IHRoZSBsaW5rIGV2ZW50IGlzIGFzc29jaWF0ZWQgd2l0aFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTExMDM9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6MTEwNDppY2VfbGlua19ldmVudChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wb3J0X2luZm8gKnBpLCBib29sIGxpbmtfdXAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy0xMTA1LVx0ICAgICAgIHUxNiBsaW5rX3NwZWVkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTEyMzM9aWNlX2hhbmRsZV9saW5rX2V2ZW50KHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3JxX2V2ZW50X2luZm8gKmV2ZW50KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTEyNDMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzoxMjQ0Olx0c3RhdHVzID0gaWNlX2xpbmtfZXZlbnQocGYsIHBvcnRfaW5mbyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTEyNDUtXHRcdFx0XHQhIShsaW5rX2RhdGEtXHUwMDNlbGlua19pbmZvIFx1MDAyNiBJQ0VfQVFfTElOS19VUCksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg4NgoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIGBpY2VfbGlua19ldmVudGAgUmFiYml0IEhvbGUqKgoKQWxyaWdodCwgaGFuZyBvbiBhIHNlY29uZC4gSSYjMzk7dmUgZ290IHRvIHJlZnJlc2ggbXkgbWVtb3J5LiBUaGF0IGBpY2VfbGlua19ldmVudGAgZnVuY3Rpb27igKYgdGhhdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgZGVmaW5lZCByaWdodCBpbiBgaWNlX21haW4uY2AsIGlzbiYjMzk7dCBpdD8gT2theSwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgaG93IHRoaXMgdGhpbmcgaXMgYWN0dWFsbHkgd29ya2luZywgZXNwZWNpYWxseSBob3cgaXQgaGFuZGxlcyBgbGlua191cGAuIFJpZ2h0LCB0aGUgYmVzdCB3YXkgdG8gZG8gdGhpcyBpcyBqdXN0IGRpdmUgcmlnaHQgaW4gYW5kIHJlYWQgdGhlIGNvZGUgZm9yIGBpY2VfbGlua19ldmVudGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgaGVyZSwgYmVjYXVzZSBrbm93aW5nIGhvdyBgbGlua191cGAgaXMgdXNlZCB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgYmVoYXZpb3IgSSYjMzk7bSBleHBlY3RpbmcuIFRpbWUgdG8gZ2V0IHRvIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTAzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTAzOlx0c3RhdGljIGludFxuMTEwNDpcdGljZV9saW5rX2V2ZW50KHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3BvcnRfaW5mbyAqcGksIGJvb2wgbGlua191cCxcbjExMDU6XHRcdCAgICAgICB1MTYgbGlua19zcGVlZClcbjExMDY6XHR7XG4xMTA3Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpY2VfcGZfdG9fZGV2KHBmKTtcbjExMDg6XHRcdHN0cnVjdCBpY2VfcGh5X2luZm8gKnBoeV9pbmZvO1xuMTEwOTpcdFx0c3RydWN0IGljZV92c2kgKnZzaTtcbjExMTA6XHRcdHUxNiBvbGRfbGlua19zcGVlZDtcbjExMTE6XHRcdGJvb2wgb2xkX2xpbms7XG4xMTEyOlx0XHRpbnQgc3RhdHVzO1xuMTExMzpcdFxuMTExNDpcdFx0cGh5X2luZm8gPSBcdTAwMjZwaS1cdTAwM2VwaHk7XG4xMTE1Olx0XHRwaHlfaW5mby1cdTAwM2VsaW5rX2luZm9fb2xkID0gcGh5X2luZm8tXHUwMDNlbGlua19pbmZvO1xuMTExNjpcdFxuMTExNzpcdFx0b2xkX2xpbmsgPSAhIShwaHlfaW5mby1cdTAwM2VsaW5rX2luZm9fb2xkLmxpbmtfaW5mbyBcdTAwMjYgSUNFX0FRX0xJTktfVVApO1xuMTExODpcdFx0b2xkX2xpbmtfc3BlZWQgPSBwaHlfaW5mby1cdTAwM2VsaW5rX2luZm9fb2xkLmxpbmtfc3BlZWQ7XG4xMTE5Olx0XG4xMTIwOlx0XHQvKiB1cGRhdGUgdGhlIGxpbmsgaW5mbyBzdHJ1Y3R1cmVzIGFuZCByZS1lbmFibGUgbGluayBldmVudHMsXG4xMTIxOlx0XHQgKiBkb24mIzM5O3QgYmFpbCBvbiBmYWlsdXJlIGR1ZSB0byBvdGhlciBib29rIGtlZXBpbmcgbmVlZGVkXG4xMTIyOlx0XHQgKi9cbjExMjM6XHRcdHN0YXR1cyA9IGljZV91cGRhdGVfbGlua19pbmZvKHBpKTtcbjExMjQ6XHRcdGlmIChzdGF0dXMpXG4xMTI1Olx0XHRcdGRldl9kYmcoZGV2LCBcJiMzNDtGYWlsZWQgdG8gdXBkYXRlIGxpbmsgc3RhdHVzIG9uIHBvcnQgJWQsIGVyciAlZCBhcV9lcnIgJXNcXG5cJiMzNDssXG4xMTI2Olx0XHRcdFx0cGktXHUwMDNlbHBvcnQsIHN0YXR1cyxcbjExMjc6XHRcdFx0XHRsaWJpZV9hcV9zdHIocGktXHUwMDNlaHctXHUwMDNlYWRtaW5xLnNxX2xhc3Rfc3RhdHVzKSk7XG4xMTI4Olx0XG4xMTI5Olx0XHRpY2VfY2hlY2tfbGlua19jZmdfZXJyKHBmLCBwaS1cdTAwM2VwaHkubGlua19pbmZvLmxpbmtfY2ZnX2Vycik7XG4xMTMwOlx0XG4xMTMxOlx0XHRsaW5rX3VwID0gcGh5X2luZm8tXHUwMDNlbGlua19pbmZvLmxpbmtfaW5mbyBcdTAwMjYgSUNFX0FRX0xJTktfVVA7XG4xMTMyOlx0XHRsaW5rX3NwZWVkID0gcGh5X2luZm8tXHUwMDNlbGlua19pbmZvLmxpbmtfc3BlZWQ7XG4xMTMzOlx0XG4xMTM0Olx0XHR2c2kgPSBpY2VfZ2V0X21haW5fdnNpKHBmKTtcbjExMzU6XHRcdGlmICghdnNpIHx8ICF2c2ktXHUwMDNlcG9ydF9pbmZvKVxuMTEzNjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjExMzc6XHRcbjExMzg6XHRcdC8qIHR1cm4gb2ZmIFBIWSBpZiBtZWRpYSB3YXMgcmVtb3ZlZCAqL1xuMTEzOTpcdFx0aWYgKCF0ZXN0X2JpdChJQ0VfRkxBR19OT19NRURJQSwgcGYtXHUwMDNlZmxhZ3MpIFx1MDAyNlx1MDAyNlxuMTE0MDpcdFx0ICAgICEocGktXHUwMDNlcGh5LmxpbmtfaW5mby5saW5rX2luZm8gXHUwMDI2IElDRV9BUV9NRURJQV9BVkFJTEFCTEUpKSB7XG4xMTQxOlx0XHRcdHNldF9iaXQoSUNFX0ZMQUdfTk9fTUVESUEsIHBmLVx1MDAzZWZsYWdzKTtcbjExNDI6XHRcdFx0aWNlX3NldF9saW5rKHZzaSwgZmFsc2UpO1xuMTE0MzpcdFx0fVxuMTE0NDpcdFxuMTE0NTpcdFx0LyogaWYgdGhlIG9sZCBsaW5rIHVwL2Rvd24gYW5kIHNwZWVkIGlzIHRoZSBzYW1lIGFzIHRoZSBuZXcgKi9cbjExNDY6XHRcdGlmIChsaW5rX3VwID09IG9sZF9saW5rIFx1MDAyNlx1MDAyNiBsaW5rX3NwZWVkID09IG9sZF9saW5rX3NwZWVkKVxuMTE0NzpcdFx0XHRyZXR1cm4gMDtcbjExNDg6XHRcbjExNDk6XHRcdGlmICghbGlua191cCBcdTAwMjZcdTAwMjYgb2xkX2xpbmspXG4xMTUwOlx0XHRcdHBmLVx1MDAzZWxpbmtfZG93bl9ldmVudHMmIzQzOyYjNDM7O1xuMTE1MTpcdFxuMTE1MjpcdFx0aWNlX3B0cF9saW5rX2NoYW5nZShwZiwgbGlua191cCk7XG4xMTUzOlx0XG4xMTU0Olx0XHRpZiAoaWNlX2lzX2RjYl9hY3RpdmUocGYpKSB7XG4xMTU1Olx0XHRcdGlmICh0ZXN0X2JpdChJQ0VfRkxBR19EQ0JfRU5BLCBwZi1cdTAwM2VmbGFncykpXG4xMTU2Olx0XHRcdFx0aWNlX2RjYl9yZWJ1aWxkKHBmKTtcbjExNTc6XHRcdH0gZWxzZSB7XG4xMTU4Olx0XHRcdGlmIChsaW5rX3VwKVxuMTE1OTpcdFx0XHRcdGljZV9zZXRfZGZsdF9taWIocGYpO1xuMTE2MDpcdFx0fVxuMTE2MTpcdFx0aWNlX3ZzaV9saW5rX2V2ZW50KHZzaSwgbGlua191cCk7XG4xMTYyOlx0XHRpY2VfcHJpbnRfbGlua19tc2codnNpLCBsaW5rX3VwLCBsaW5rX3NwZWVkKTtcbjExNjM6XHRcbjExNjQ6XHRcdGljZV92Y19ub3RpZnlfbGlua19zdGF0ZShwZik7XG4xMTY1Olx0XG4xMTY2Olx0XHRyZXR1cm4gMDtcbjExNjc6XHR9XG4xMTY4Olx0XG4xMTY5Olx0LyoqXG4xMTcwOlx0ICogaWNlX3dhdGNoZG9nX3N1YnRhc2sgLSBwZXJpb2RpYyB0YXNrcyBub3QgdXNpbmcgZXZlbnQgZHJpdmVuIHNjaGVkdWxpbmdcbjExNzE6XHQgKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG4xMTcyOlx0ICovXG4xMTczOlx0c3RhdGljIHZvaWQgaWNlX3dhdGNoZG9nX3N1YnRhc2soc3RydWN0IGljZV9wZiAqcGYpXG4xMTc0Olx0e1xuMTE3NTpcdFx0aW50IGk7XG4xMTc2Olx0XG4xMTc3Olx0XHQvKiBpZiBpbnRlcmZhY2UgaXMgZG93biBkbyBub3RoaW5nICovXG4xMTc4Olx0XHRpZiAodGVzdF9iaXQoSUNFX0RPV04sIHBmLVx1MDAzZXN0YXRlKSB8fFxuMTE3OTpcdFx0ICAgIHRlc3RfYml0KElDRV9DRkdfQlVTWSwgcGYtXHUwMDNlc3RhdGUpKVxuMTE4MDpcdFx0XHRyZXR1cm47XG4xMTgxOlx0XG4xMTgyOlx0XHQvKiBtYWtlIHN1cmUgd2UgZG9uJiMzOTt0IGRvIHRoZXNlIHRoaW5ncyB0b28gb2Z0ZW4gKi9cbjExODM6XHRcdGlmICh0aW1lX2JlZm9yZShqaWZmaWVzLFxuMTE4NDpcdFx0XHRcdHBmLVx1MDAzZXNlcnZfdG1yX3ByZXYgJiM0MzsgcGYtXHUwMDNlc2Vydl90bXJfcGVyaW9kKSlcbjExODU6XHRcdFx0cmV0dXJuO1xuMTE4NjpcdFxuMTE4NzpcdFx0cGYtXHUwMDNlc2Vydl90bXJfcHJldiA9IGppZmZpZXM7XG4xMTg4Olx0XG4xMTg5Olx0XHQvKiBVcGRhdGUgdGhlIHN0YXRzIGZvciBhY3RpdmUgbmV0ZGV2cyBzbyB0aGUgbmV0d29yayBzdGFja1xuMTE5MDpcdFx0ICogY2FuIGxvb2sgYXQgdXBkYXRlZCBudW1iZXJzIHdoZW5ldmVyIGl0IGNhcmVzIHRvXG4xMTkxOlx0XHQgKi9cbjExOTI6XHRcdGljZV91cGRhdGVfcGZfc3RhdHMocGYpO1xuMTE5MzpcdFx0aWNlX2Zvcl9lYWNoX3ZzaShwZiwgaSlcbjExOTQ6XHRcdFx0aWYgKHBmLVx1MDAzZXZzaVtpXSBcdTAwMjZcdTAwMjYgcGYtXHUwMDNldnNpW2ldLVx1MDAzZW5ldGRldilcbjExOTU6XHRcdFx0XHRpY2VfdXBkYXRlX3ZzaV9zdGF0cyhwZi1cdTAwM2V2c2lbaV0pO1xuMTE5NjpcdH1cbjExOTc6XHRcbjExOTg6XHQvKipcbjExOTk6XHQgKiBpY2VfaW5pdF9saW5rX2V2ZW50cyAtIGVuYWJsZS9pbml0aWFsaXplIGxpbmsgZXZlbnRzXG4xMjAwOlx0ICogQHBpOiBwb2ludGVyIHRvIHRoZSBwb3J0X2luZm8gaW5zdGFuY2VcbjEyMDE6XHQgKlxuMTIwMjpcdCAqIFJldHVybnMgLUVJTyBvbiBmYWlsdXJlLCAwIG9uIHN1Y2Nlc3NcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxOTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzU5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTGluayBTdGF0ZSBDaGFuZ2UgaW4gdGhlIGBpY2VgIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIGBpY2VfbGlua19ldmVudGAgZnVuY3Rpb24sIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgY2hhbmdlLiBCZWZvcmUsIHRoZSBjb2RlIHNlZW1lZCB0byBjb25kaXRpb25hbGx5IHNldCBgbGlua191cGAgYmFzZWQgb24gYHBoeV9pbmZvLSZndDtsaW5rX2luZm8ubGlua19pbmZvICZhbXA7IElDRV9BUV9MSU5LX1VQYC4gU3BlY2lmaWNhbGx5LCBgbGlua191cGAgd2FzIHBhc3NlZCBpbiwgYW5kIHRoZW4gcG90ZW50aWFsbHkgbW9kaWZpZWQuIE5vdywgaXQgc2VlbXMgdGhhdCBgbGlua191cGAgaXMgdW5jb25kaXRpb25hbGx5IGFzc2lnbmVkIHRoZSByZXN1bHQgb2YgdGhhdCBjaGVjaywgYWxvbmcgd2l0aCB0aGUgYGxpbmtfc3BlZWRgLiBJIG5lZWQgdG8gdGhpbmsgdGhpcyB0aHJvdWdoIGNhcmVmdWxseSBiZWNhdXNlIGNoYW5nZXMgdG8gbGluayBzdGF0ZSBoYW5kbGluZyBhcmUgYWx3YXlzIGNyaXRpY2FsLgoKSSBuZWVkIHRvIHF1aWNrbHkgcmVtZW1iZXIgd2hlcmUgdGhhdCBpbml0aWFsIGBsaW5rX3VwYCBjb21lcyBmcm9tLiBBaCwgcmlnaHQsIGluIGBpY2VfaGFuZGxlX2xpbmtfZXZlbnRgLCBpdCYjMzk7cyBkZXJpdmVkIGZyb20gYGxpbmtfZGF0YS0mZ3Q7bGlua19pbmZvICZhbXA7IElDRV9BUV9MSU5LX1VQYC4gU28sIHdlIHVwZGF0ZSBgcGktJmd0O3BoeS5saW5rX2luZm9gIHZpYSBgaWNlX3VwZGF0ZV9saW5rX2luZm8ocGkpYC4gVGhlIHByZS1wYXRjaCBsb2dpYyB3YXMgZXNzZW50aWFsbHkgYSByYWNlLiBJZiB0aGUgbGluayB3ZW50IGRvd24gYmV0d2VlbiB0aGUgaW5pdGlhbCBldmVudCAoYGxpbmtfZGF0YWApIGFuZCB0aGUgdXBkYXRlIG9mIGBwaHlfaW5mb2AgdmlhIGBpY2VfdXBkYXRlX2xpbmtfaW5mb2AsIHRoZW4gd2UgY291bGQgc3RpbGwgcmVwb3J0IHRoZSBsaW5rIGFzIHVwLiBBZnRlciB0aGUgcGF0Y2gsIHRoYXQgd2luZG93IGlzIGNsb3NlZCwgYXMgdGhlIGNoZWNrIHdpbGwgcmVmbGVjdCB0aGUgY3VycmVudCBzdGF0ZSBhcyB1cGRhdGVkIGJ5IGBpY2VfdXBkYXRlX2xpbmtfaW5mb2AuCgpUaGlzIGlzIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBpbXBhY3RmdWwgZnVuY3Rpb25hbCBjaGFuZ2UuIE5vdywgYSB0cmFuc2llbnQgbGluayBkb3duIHdpbGwgYmUgY29ycmVjdGx5IHJlZmxlY3RlZC4gUHJldmlvdXNseSBpdCBtaWdodCBoYXZlIGJlZW4gaW5jb3JyZWN0bHkgcmVwb3J0ZWQgYXMgdXAuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IGlzIHRoaXMgd29ydGggZnV6emluZz8gVGhlIGBpY2VgIGRyaXZlciwgd2hpY2ggaXMgZm9yIEludGVsJiMzOTtzIEU4MDAgc2VyaWVzIEV0aGVybmV0IENvbm5lY3Rpb24sIGlzIGEgcGh5c2ljYWwgUENJZSBuZXR3b3JrIGNhcmQgZHJpdmVyLiBNeSBwcmltYXJ5IHdvcnJ5IGlzIHRoYXQgdGhpcyBpc24mIzM5O3QgZW11bGF0ZWQgYnkgUUVNVS4gSG93ZXZlciwgdGhpcyBkcml2ZXIgaXMgZm9yIGEgdmVuZG9yLXNwZWNpZmljIE5JQywgYW5kIGl0IHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFNvLCBiYXNlZCBvbiB0aGF0LCB0aGlzIGNoYW5nZSBpcyBub3Qgd29ydGggZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxOTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2lfcmVnaXN0ZXJfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01ODY2PXN0YXRpYyBpbnQgX19pbml0IGljZV9tb2R1bGVfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTU4ODgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1ODg5Olx0c3RhdHVzID0gcGNpX3JlZ2lzdGVyX2RyaXZlcihcdTAwMjZpY2VfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTU4OTAtXHRpZiAoc3RhdHVzKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODIzNgoJCQkJCQkJb3V0cHV0OiAxMDAKCQkJCQkJCXRob3VnaHRzOiAyNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUENJIERyaXZlciBDb2RlKioKCk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIGRyaXZlciBmb3IgYSBQQ0kgZGV2aWNlIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBJbnRlbCBFODAwIHNlcmllcywgb3IgYGljZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25zaWRlciB3aGV0aGVyIGl0JiMzOTtzIGVtdWxhdGVkIGluIGEgdHlwaWNhbCB2aXJ0dWFsaXphdGlvbiBlbnZpcm9ubWVudCBsaWtlIFFFTVUuIE5vcGUuIFFFTVUgZG9lc24mIzM5O3Qgc3VwcG9ydCB0aGUgYGljZWAgaGFyZHdhcmUuIEl0JiMzOTtzIGdvdCB0aGUgdXN1YWwgc3VzcGVjdHMgbGlrZSBgZTEwMDBgLCBgZTEwMDBlYCwgYW5kIGEgZmV3IG90aGVycywgYnV0IG5vIGBpY2VgLgoKVGhlcmVmb3JlLCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIFFFTVUmIzM5O3MgZW11bGF0aW9uIGNhcGFiaWxpdGllcywgdGhpcyBzcGVjaWZpYyBjb2RlIHBhdGggaW4gdGhlIGBpY2VgIGRyaXZlciBpcyB1bnJlYWNoYWJsZSB3aXRoaW4gdmlydHVhbGl6ZWQgc2V0dXBzIHN1Y2ggYXMgR29vZ2xlIENvbXB1dGUgRW5naW5lIG9yIHVzaW5nIFFFTVUuCgpMZXQgbWUganVzdCBzb2xpZGlmeSB0aGF0IHJlYXNvbmluZy4gVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgdGhlIGBpY2VgIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGNhcmQgZHJpdmVyLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGludGVyZmFjZSB3aXRoIHBoeXNpY2FsIGhhcmR3YXJlLiBRRU1VIGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhlIGBpY2VgIGNoaXAuIENvbnNlcXVlbnRseSwgYW55IGNvZGUgY2hhbmdlcyByZWxhdGluZyB0byB0aGlzIGRldmljZSBhcmUgbm90IHJlYWNoYWJsZSB3aXRoaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50LiBGdXJ0aGVybW9yZSwgbG9va2luZyBhdCB0aGUgY29kZSBjaGFuZ2VzLCBpdOKAmXMgbW9zdGx5IGFib3V0IHByaW50aW5nIHRoZSBsaW5rIHNwZWVkIGluZm9ybWF0aW9uIGluIGBpY2VfcHJpbnRfbGlua19tc2dgIGFuZCBhIG1pbm9yIGxvZ2ljIGNoYW5nZSBpbiBgaWNlX2xpbmtfZXZlbnRgIGFuZCBib3RoIG9mIHRoZXNlIGFyZSBoYXJkd2FyZS1kZXBlbmRlbnQgZmVhdHVyZXMuCgpTbywgZ2l2ZW4gdGhpcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAgZm9yIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEU4MDAgc2VyaWVzIEV0aGVybmV0IGRyaXZlciAoaWNlKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGNhcmQgZHJpdmVyLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiBBZGRpdGlvbmFsbHksIHRoZSBjaGFuZ2VzIHByaW1hcmlseSBhZmZlY3QgbGluayBzdGF0dXMgbG9nZ2luZyBhbmQgaGFyZHdhcmUtZGVwZW5kZW50IGxpbmsgZXZlbnQgaGFuZGxpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgRTgwMCBzZXJpZXMgRXRoZXJuZXQgZHJpdmVyIChpY2UpLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgY2FyZCBkcml2ZXIuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuIEFkZGl0aW9uYWxseSwgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFmZmVjdCBsaW5rIHN0YXR1cyBsb2dnaW5nIGFuZCBoYXJkd2FyZS1kZXBlbmRlbnQgbGluayBldmVudCBoYW5kbGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxOTozMzoyMS45ODYyMTYzMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyODg1Mzk1OTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgRTgwMCBzZXJpZXMgRXRoZXJuZXQgZHJpdmVyIChpY2UpLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgY2FyZCBkcml2ZXIuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuIEFkZGl0aW9uYWxseSwgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFmZmVjdCBsaW5rIHN0YXR1cyBsb2dnaW5nIGFuZCBoYXJkd2FyZS1kZXBlbmRlbnQgbGluayBldmVudCBoYW5kbGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjMzOjIxLjk4NjIyMjQ0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjgyODMzNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0NTAwMjQyYjVhNjRmNzEyYzYyODVmZjNmZjI0YmFhOWZiZmMyODI2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDYgMTk6MzM6MjEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXFxuaW5kZXggZmM5MWI2NjY1ZjkwNS4uOWRhZDE2MWJkOTdjNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmhcXG5AQCAtMTAwOSw3ICsxMDA5LDcgQEAgaW50IGljZV9nZXRfcnNzX2tleShzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1OCAqc2VlZCk7XFxuIGludCBpY2Vfc2V0X3Jzc19oZnVuYyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1OCBoZnVuYyk7XFxuIHZvaWQgaWNlX2ZpbGxfcnNzX2x1dCh1OCAqbHV0LCB1MTYgcnNzX3RhYmxlX3NpemUsIHUxNiByc3Nfc2l6ZSk7XFxuIGludCBpY2Vfc2NoZWR1bGVfcmVzZXQoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX3Jlc2V0X3JlcSByZXNldCk7XFxuLXZvaWQgaWNlX3ByaW50X2xpbmtfbXNnKHN0cnVjdCBpY2VfdnNpICp2c2ksIGJvb2wgaXN1cCk7XFxuK3ZvaWQgaWNlX3ByaW50X2xpbmtfbXNnKHN0cnVjdCBpY2VfdnNpICp2c2ksIGJvb2wgaXN1cCwgdTE2IGxpbmtfc3BlZWQpO1xcbiBpbnQgaWNlX3BsdWdfYXV4X2RldihzdHJ1Y3QgaWNlX3BmICpwZik7XFxuIHZvaWQgaWNlX3VucGx1Z19hdXhfZGV2KHN0cnVjdCBpY2VfcGYgKnBmKTtcXG4gdm9pZCBpY2VfcmRtYV9maW5hbGl6ZV9zZXR1cChzdHJ1Y3QgaWNlX3BmICpwZik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmNcXG5pbmRleCA3ZWIzODBiZTdlZDI3Li45NGFiMjFmMzJjZmQ5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmNcXG5AQCAtMjc4NSw3ICsyNzg1LDcgQEAgaWNlX3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRcXHQvKiBUZWxsIHRoZSBPUyBsaW5rIGlzIGdvaW5nIGRvd24sIHRoZSBsaW5rIHdpbGwgZ29cXG4gXFx0XFx0ICogYmFjayB1cCB3aGVuIGZ3IHNheXMgaXQgaXMgcmVhZHkgYXN5bmNocm9ub3VzbHlcXG4gXFx0XFx0ICovXFxuLVxcdFxcdGljZV9wcmludF9saW5rX21zZyhucC1cXHUwMDNldnNpLCBmYWxzZSk7XFxuK1xcdFxcdGljZV9wcmludF9saW5rX21zZyhucC1cXHUwMDNldnNpLCBmYWxzZSwgMCk7XFxuIFxcdFxcdG5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7XFxuIFxcdFxcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcXG5pbmRleCBkODg4MzU0ODJkM2FhLi45NzRmMjdmZmViMzk4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcXG5AQCAtNzcyLDggKzc3Miw5IEBAIHN0YXRpYyB2b2lkIGljZV9wcmludF90b3BvX2NvbmZsaWN0KHN0cnVjdCBpY2VfdnNpICp2c2kpXFxuICAqIGljZV9wcmludF9saW5rX21zZyAtIHByaW50IGxpbmsgdXAgb3IgZG93biBtZXNzYWdlXFxuICAqIEB2c2k6IHRoZSBWU0kgd2hvc2UgbGluayBzdGF0dXMgaXMgYmVpbmcgcXVlcmllZFxcbiAgKiBAaXN1cDogYm9vbGVhbiBmb3IgaWYgdGhlIGxpbmsgaXMgbm93IHVwIG9yIGRvd25cXG4rICogQGxpbmtfc3BlZWQ6IGN1cnJlbnQgbGluayBzcGVlZCB2YWx1ZSB0byBkaXNwbGF5XFxuICAqL1xcbi12b2lkIGljZV9wcmludF9saW5rX21zZyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCBib29sIGlzdXApXFxuK3ZvaWQgaWNlX3ByaW50X2xpbmtfbXNnKHN0cnVjdCBpY2VfdnNpICp2c2ksIGJvb2wgaXN1cCwgdTE2IGxpbmtfc3BlZWQpXFxuIHtcXG4gXFx0c3RydWN0IGljZV9hcWNfZ2V0X3BoeV9jYXBzX2RhdGEgKmNhcHM7XFxuIFxcdGNvbnN0IGNoYXIgKmFuX2FkdmVydGlzZWQ7XFxuQEAgLTc5Nyw3ICs3OTgsNyBAQCB2b2lkIGljZV9wcmludF9saW5rX21zZyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCBib29sIGlzdXApXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4tXFx0c3dpdGNoICh2c2ktXFx1MDAzZXBvcnRfaW5mby1cXHUwMDNlcGh5LmxpbmtfaW5mby5saW5rX3NwZWVkKSB7XFxuK1xcdHN3aXRjaCAobGlua19zcGVlZCkge1xcbiBcXHRjYXNlIElDRV9BUV9MSU5LX1NQRUVEXzIwMEdCOlxcbiBcXHRcXHRzcGVlZCA9IFxcXCIyMDAgR1xcXCI7XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC0xMTI3LDExICsxMTI4LDggQEAgaWNlX2xpbmtfZXZlbnQoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcG9ydF9pbmZvICpwaSwgYm9vbCBsaW5rX3VwLFxcbiBcXG4gXFx0aWNlX2NoZWNrX2xpbmtfY2ZnX2VycihwZiwgcGktXFx1MDAzZXBoeS5saW5rX2luZm8ubGlua19jZmdfZXJyKTtcXG4gXFxuLVxcdC8qIENoZWNrIGlmIHRoZSBsaW5rIHN0YXRlIGlzIHVwIGFmdGVyIHVwZGF0aW5nIGxpbmsgaW5mbywgYW5kIHRyZWF0XFxuLVxcdCAqIHRoaXMgZXZlbnQgYXMgYW4gVVAgZXZlbnQgc2luY2UgdGhlIGxpbmsgaXMgYWN0dWFsbHkgVVAgbm93Llxcbi1cXHQgKi9cXG4tXFx0aWYgKHBoeV9pbmZvLVxcdTAwM2VsaW5rX2luZm8ubGlua19pbmZvIFxcdTAwMjYgSUNFX0FRX0xJTktfVVApXFxuLVxcdFxcdGxpbmtfdXAgPSB0cnVlO1xcbitcXHRsaW5rX3VwID0gcGh5X2luZm8tXFx1MDAzZWxpbmtfaW5mby5saW5rX2luZm8gXFx1MDAyNiBJQ0VfQVFfTElOS19VUDtcXG4rXFx0bGlua19zcGVlZCA9IHBoeV9pbmZvLVxcdTAwM2VsaW5rX2luZm8ubGlua19zcGVlZDtcXG4gXFxuIFxcdHZzaSA9IGljZV9nZXRfbWFpbl92c2kocGYpO1xcbiBcXHRpZiAoIXZzaSB8fCAhdnNpLVxcdTAwM2Vwb3J0X2luZm8pXFxuQEAgLTExNjEsNyArMTE1OSw3IEBAIGljZV9saW5rX2V2ZW50KHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3BvcnRfaW5mbyAqcGksIGJvb2wgbGlua191cCxcXG4gXFx0XFx0XFx0aWNlX3NldF9kZmx0X21pYihwZik7XFxuIFxcdH1cXG4gXFx0aWNlX3ZzaV9saW5rX2V2ZW50KHZzaSwgbGlua191cCk7XFxuLVxcdGljZV9wcmludF9saW5rX21zZyh2c2ksIGxpbmtfdXApO1xcbitcXHRpY2VfcHJpbnRfbGlua19tc2codnNpLCBsaW5rX3VwLCBsaW5rX3NwZWVkKTtcXG4gXFxuIFxcdGljZV92Y19ub3RpZnlfbGlua19zdGF0ZShwZik7XFxuIFxcbkBAIC02NzQyLDcgKzY3NDAsOCBAQCBzdGF0aWMgaW50IGljZV91cF9jb21wbGV0ZShzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxcbiBcXHQgICAgKHZzaS1cXHUwMDNlcG9ydF9pbmZvLVxcdTAwM2VwaHkubGlua19pbmZvLmxpbmtfaW5mbyBcXHUwMDI2IElDRV9BUV9MSU5LX1VQKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgKCh2c2ktXFx1MDAzZW5ldGRldiBcXHUwMDI2XFx1MDAyNiAodnNpLVxcdTAwM2V0eXBlID09IElDRV9WU0lfUEYgfHxcXG4gXFx0XFx0XFx0ICAgICAgdnNpLVxcdTAwM2V0eXBlID09IElDRV9WU0lfU0YpKSkpIHtcXG4tXFx0XFx0aWNlX3ByaW50X2xpbmtfbXNnKHZzaSwgdHJ1ZSk7XFxuK1xcdFxcdGljZV9wcmludF9saW5rX21zZyh2c2ksIHRydWUsXFxuK1xcdFxcdFxcdFxcdCAgIHZzaS1cXHUwMDNlcG9ydF9pbmZvLVxcdTAwM2VwaHkubGlua19pbmZvLmxpbmtfc3BlZWQpO1xcbiBcXHRcXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKHZzaS1cXHUwMDNlbmV0ZGV2KTtcXG4gXFx0XFx0bmV0aWZfY2Fycmllcl9vbih2c2ktXFx1MDAzZW5ldGRldik7XFxuIFxcdFxcdGljZV9wdHBfbGlua19jaGFuZ2UocGYsIHRydWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxOTozMzoyMi40MTUyMzMyMThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0MjQ1NjM3NDAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEU4MDAgc2VyaWVzIEV0aGVybmV0IGRyaXZlciAoaWNlKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGNhcmQgZHJpdmVyLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiBBZGRpdGlvbmFsbHksIHRoZSBjaGFuZ2VzIHByaW1hcmlseSBhZmZlY3QgbGluayBzdGF0dXMgbG9nZ2luZyBhbmQgaGFyZHdhcmUtZGVwZW5kZW50IGxpbmsgZXZlbnQgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NTAwMjQyYjVhNjRmNzEyYzYyODVmZjNmZjI0YmFhOWZiZmMyODI2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAxOTozMzoyMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxuaW5kZXggZmM5MWI2NjY1ZjkwNS4uOWRhZDE2MWJkOTdjNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXG5AQCAtMTAwOSw3ICsxMDA5LDcgQEAgaW50IGljZV9nZXRfcnNzX2tleShzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1OCAqc2VlZCk7XG4gaW50IGljZV9zZXRfcnNzX2hmdW5jKHN0cnVjdCBpY2VfdnNpICp2c2ksIHU4IGhmdW5jKTtcbiB2b2lkIGljZV9maWxsX3Jzc19sdXQodTggKmx1dCwgdTE2IHJzc190YWJsZV9zaXplLCB1MTYgcnNzX3NpemUpO1xuIGludCBpY2Vfc2NoZWR1bGVfcmVzZXQoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX3Jlc2V0X3JlcSByZXNldCk7XG4tdm9pZCBpY2VfcHJpbnRfbGlua19tc2coc3RydWN0IGljZV92c2kgKnZzaSwgYm9vbCBpc3VwKTtcbit2b2lkIGljZV9wcmludF9saW5rX21zZyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCBib29sIGlzdXAsIHUxNiBsaW5rX3NwZWVkKTtcbiBpbnQgaWNlX3BsdWdfYXV4X2RldihzdHJ1Y3QgaWNlX3BmICpwZik7XG4gdm9pZCBpY2VfdW5wbHVnX2F1eF9kZXYoc3RydWN0IGljZV9wZiAqcGYpO1xuIHZvaWQgaWNlX3JkbWFfZmluYWxpemVfc2V0dXAoc3RydWN0IGljZV9wZiAqcGYpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmNcbmluZGV4IDdlYjM4MGJlN2VkMjcuLjk0YWIyMWYzMmNmZDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmNcbkBAIC0yNzg1LDcgKzI3ODUsNyBAQCBpY2Vfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdC8qIFRlbGwgdGhlIE9TIGxpbmsgaXMgZ29pbmcgZG93biwgdGhlIGxpbmsgd2lsbCBnb1xuIFx0XHQgKiBiYWNrIHVwIHdoZW4gZncgc2F5cyBpdCBpcyByZWFkeSBhc3luY2hyb25vdXNseVxuIFx0XHQgKi9cbi1cdFx0aWNlX3ByaW50X2xpbmtfbXNnKG5wLVx1MDAzZXZzaSwgZmFsc2UpO1xuK1x0XHRpY2VfcHJpbnRfbGlua19tc2cobnAtXHUwMDNldnNpLCBmYWxzZSwgMCk7XG4gXHRcdG5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7XG4gXHRcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbmluZGV4IGQ4ODgzNTQ4MmQzYWEuLjk3NGYyN2ZmZWIzOTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbkBAIC03NzIsOCArNzcyLDkgQEAgc3RhdGljIHZvaWQgaWNlX3ByaW50X3RvcG9fY29uZmxpY3Qoc3RydWN0IGljZV92c2kgKnZzaSlcbiAgKiBpY2VfcHJpbnRfbGlua19tc2cgLSBwcmludCBsaW5rIHVwIG9yIGRvd24gbWVzc2FnZVxuICAqIEB2c2k6IHRoZSBWU0kgd2hvc2UgbGluayBzdGF0dXMgaXMgYmVpbmcgcXVlcmllZFxuICAqIEBpc3VwOiBib29sZWFuIGZvciBpZiB0aGUgbGluayBpcyBub3cgdXAgb3IgZG93blxuKyAqIEBsaW5rX3NwZWVkOiBjdXJyZW50IGxpbmsgc3BlZWQgdmFsdWUgdG8gZGlzcGxheVxuICAqL1xuLXZvaWQgaWNlX3ByaW50X2xpbmtfbXNnKHN0cnVjdCBpY2VfdnNpICp2c2ksIGJvb2wgaXN1cClcbit2b2lkIGljZV9wcmludF9saW5rX21zZyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCBib29sIGlzdXAsIHUxNiBsaW5rX3NwZWVkKVxuIHtcbiBcdHN0cnVjdCBpY2VfYXFjX2dldF9waHlfY2Fwc19kYXRhICpjYXBzO1xuIFx0Y29uc3QgY2hhciAqYW5fYWR2ZXJ0aXNlZDtcbkBAIC03OTcsNyArNzk4LDcgQEAgdm9pZCBpY2VfcHJpbnRfbGlua19tc2coc3RydWN0IGljZV92c2kgKnZzaSwgYm9vbCBpc3VwKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRzd2l0Y2ggKHZzaS1cdTAwM2Vwb3J0X2luZm8tXHUwMDNlcGh5LmxpbmtfaW5mby5saW5rX3NwZWVkKSB7XG4rXHRzd2l0Y2ggKGxpbmtfc3BlZWQpIHtcbiBcdGNhc2UgSUNFX0FRX0xJTktfU1BFRURfMjAwR0I6XG4gXHRcdHNwZWVkID0gXCIyMDAgR1wiO1xuIFx0XHRicmVhaztcbkBAIC0xMTI3LDExICsxMTI4LDggQEAgaWNlX2xpbmtfZXZlbnQoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcG9ydF9pbmZvICpwaSwgYm9vbCBsaW5rX3VwLFxuIFxuIFx0aWNlX2NoZWNrX2xpbmtfY2ZnX2VycihwZiwgcGktXHUwMDNlcGh5LmxpbmtfaW5mby5saW5rX2NmZ19lcnIpO1xuIFxuLVx0LyogQ2hlY2sgaWYgdGhlIGxpbmsgc3RhdGUgaXMgdXAgYWZ0ZXIgdXBkYXRpbmcgbGluayBpbmZvLCBhbmQgdHJlYXRcbi1cdCAqIHRoaXMgZXZlbnQgYXMgYW4gVVAgZXZlbnQgc2luY2UgdGhlIGxpbmsgaXMgYWN0dWFsbHkgVVAgbm93LlxuLVx0ICovXG4tXHRpZiAocGh5X2luZm8tXHUwMDNlbGlua19pbmZvLmxpbmtfaW5mbyBcdTAwMjYgSUNFX0FRX0xJTktfVVApXG4tXHRcdGxpbmtfdXAgPSB0cnVlO1xuK1x0bGlua191cCA9IHBoeV9pbmZvLVx1MDAzZWxpbmtfaW5mby5saW5rX2luZm8gXHUwMDI2IElDRV9BUV9MSU5LX1VQO1xuK1x0bGlua19zcGVlZCA9IHBoeV9pbmZvLVx1MDAzZWxpbmtfaW5mby5saW5rX3NwZWVkO1xuIFxuIFx0dnNpID0gaWNlX2dldF9tYWluX3ZzaShwZik7XG4gXHRpZiAoIXZzaSB8fCAhdnNpLVx1MDAzZXBvcnRfaW5mbylcbkBAIC0xMTYxLDcgKzExNTksNyBAQCBpY2VfbGlua19ldmVudChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wb3J0X2luZm8gKnBpLCBib29sIGxpbmtfdXAsXG4gXHRcdFx0aWNlX3NldF9kZmx0X21pYihwZik7XG4gXHR9XG4gXHRpY2VfdnNpX2xpbmtfZXZlbnQodnNpLCBsaW5rX3VwKTtcbi1cdGljZV9wcmludF9saW5rX21zZyh2c2ksIGxpbmtfdXApO1xuK1x0aWNlX3ByaW50X2xpbmtfbXNnKHZzaSwgbGlua191cCwgbGlua19zcGVlZCk7XG4gXG4gXHRpY2VfdmNfbm90aWZ5X2xpbmtfc3RhdGUocGYpO1xuIFxuQEAgLTY3NDIsNyArNjc0MCw4IEBAIHN0YXRpYyBpbnQgaWNlX3VwX2NvbXBsZXRlKHN0cnVjdCBpY2VfdnNpICp2c2kpXG4gXHQgICAgKHZzaS1cdTAwM2Vwb3J0X2luZm8tXHUwMDNlcGh5LmxpbmtfaW5mby5saW5rX2luZm8gXHUwMDI2IElDRV9BUV9MSU5LX1VQKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAoKHZzaS1cdTAwM2VuZXRkZXYgXHUwMDI2XHUwMDI2ICh2c2ktXHUwMDNldHlwZSA9PSBJQ0VfVlNJX1BGIHx8XG4gXHRcdFx0ICAgICAgdnNpLVx1MDAzZXR5cGUgPT0gSUNFX1ZTSV9TRikpKSkge1xuLVx0XHRpY2VfcHJpbnRfbGlua19tc2codnNpLCB0cnVlKTtcbitcdFx0aWNlX3ByaW50X2xpbmtfbXNnKHZzaSwgdHJ1ZSxcbitcdFx0XHRcdCAgIHZzaS1cdTAwM2Vwb3J0X2luZm8tXHUwMDNlcGh5LmxpbmtfaW5mby5saW5rX3NwZWVkKTtcbiBcdFx0bmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyh2c2ktXHUwMDNlbmV0ZGV2KTtcbiBcdFx0bmV0aWZfY2Fycmllcl9vbih2c2ktXHUwMDNlbmV0ZGV2KTtcbiBcdFx0aWNlX3B0cF9saW5rX2NoYW5nZShwZiwgdHJ1ZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxOTozMzoyMi40MTUyMzQ4NzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTcwODk4NzY2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElDRSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBgaWNlX3ByaW50X2xpbmtfbXNnYCBpbiBgaWNlX21haW4uY2AgYW5kIGBpY2VfZXRodG9vbC5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBhIGBsaW5rX3NwZWVkYCBwYXJhbWV0ZXIgdG8gYGljZV9wcmludF9saW5rX21zZ2AgYW5kIHRoZW4gdGhyZWFkaW5nIGl0IHRocm91Z2ggdGhlIHZhcmlvdXMgY2FsbGVyczogYGljZV9zZXRfbGlua19rc2V0dGluZ3NgLCBgaWNlX2xpbmtfZXZlbnRgLCBhbmQgYGljZV91cF9jb21wbGV0ZWAuICBOYXR1cmFsbHksIHRoZSBmdW5jdGlvbiBuYW1lIHN1Z2dlc3RzIGl0J3MgcHJpbWFyaWx5IGZvciBwcmludGluZyBtZXNzYWdlcywgYnV0IEkgYWx3YXlzIHdhbnQgdG8gYmUgc3VyZSwgc28gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0J3MgKm9ubHkqIHByaW50aW5nIGEgbWVzc2FnZS4gWWVwLCBqdXN0IGEgbG9nZ2luZyBmdW5jdGlvbi4gRmluZS5cblxuTm93LCBob2xkIG9uLi4uIGhlcmUncyBzb21ldGhpbmcgZWxzZS4gIGBpY2VfbGlua19ldmVudGAgaGFzIGEgbW9yZSBzdWJzdGFudGlhbCBtb2RpZmljYXRpb24uICBUaGV5J3ZlIGNoYW5nZWQgaG93IGBsaW5rX3VwYCBpcyBkZXRlcm1pbmVkLiAgUHJldmlvdXNseSwgaXQgbG9va2VkIGxpa2UgdGhpczpcblxuYGBgY1xuXHRpZiAocGh5X2luZm8tXHUwMDNlbGlua19pbmZvLmxpbmtfaW5mbyBcdTAwMjYgSUNFX0FRX0xJTktfVVApXG5cdFx0bGlua191cCA9IHRydWU7XG5gYGBcblxuTm93LCBpdCdzIGp1c3Q6XG5cbmBgYGNcblx0bGlua191cCA9IHBoeV9pbmZvLVx1MDAzZWxpbmtfaW5mby5saW5rX2luZm8gXHUwMDI2IElDRV9BUV9MSU5LX1VQO1xuYGBgXG5cblJpZ2h0LCB0aGUga2V5IGRpZmZlcmVuY2UuIFRoZSBvcmlnaW5hbCBjb2RlIG9ubHkgc2V0IGBsaW5rX3VwYCB0byBgdHJ1ZWAgaWYgdGhlIGNvbmRpdGlvbiB3YXMgbWV0OyBvdGhlcndpc2UsIGl0IHdvdWxkIGtlZXAgaXRzIG9yaWdpbmFsIHZhbHVlLiBOb3csIGBsaW5rX3VwYCBpcyAqYWx3YXlzKiBhc3NpZ25lZCB0aGUgcmVzdWx0IG9mIHRoYXQgYml0d2lzZSBBTkQgb3BlcmF0aW9uLiAgU28sIGlmIGBJQ0VfQVFfTElOS19VUGAgaXNuJ3Qgc2V0LCBgbGlua191cGAgd2lsbCBiZSBleHBsaWNpdGx5IHNldCB0byBgZmFsc2VgLiBUaGF0IGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBhbmQgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnMgaGVyZS4gSSBzaG91bGQgcHJvYmFibHkgZGlnIGludG8gdGhlIGxvZ2ljIGFuZCB0ZXN0IHRoaXMuXG5cbkxldCdzIGdvIGJhY2sgYW5kIGV4YW1pbmUgYGljZV9saW5rX2V2ZW50YCBpbiBgaWNlX21haW4uY2AgbW9yZSBjbG9zZWx5IGFuZCB0aGluayBhYm91dCB0aGUgcG9zc2libGUgY29uc2VxdWVuY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDM2LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6MzM6MzQuMTI0MjI1Njc5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzODU0Njc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImljZV9saW5rX2V2ZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTEwODg9c3RhdGljIHZvaWQgaWNlX2NoZWNrX2xpbmtfY2ZnX2VycihzdHJ1Y3QgaWNlX3BmICpwZiwgdTggbGlua19jZmdfZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtMTA5NC0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzoxMDk1OiAqIGljZV9saW5rX2V2ZW50IC0gcHJvY2VzcyB0aGUgbGluayBldmVudFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTEwOTYtICogQHBmOiBQRiB0aGF0IHRoZSBsaW5rIGV2ZW50IGlzIGFzc29jaWF0ZWQgd2l0aFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9MTEwMz1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6MTEwNDppY2VfbGlua19ldmVudChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wb3J0X2luZm8gKnBpLCBib29sIGxpbmtfdXAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtMTEwNS1cXHQgICAgICAgdTE2IGxpbmtfc3BlZWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz0xMjMzPWljZV9oYW5kbGVfbGlua19ldmVudChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9ycV9ldmVudF9pbmZvICpldmVudClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTEyNDMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6MTI0NDpcXHRzdGF0dXMgPSBpY2VfbGlua19ldmVudChwZiwgcG9ydF9pbmZvLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTEyNDUtXFx0XFx0XFx0XFx0ISEobGlua19kYXRhLVxcdTAwM2VsaW5rX2luZm8gXFx1MDAyNiBJQ0VfQVFfTElOS19VUCksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjMzOjM0LjE2ODA4NDgxOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3MDAxNDY5MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgYGljZV9saW5rX2V2ZW50YCBSYWJiaXQgSG9sZSoqXG5cbkFscmlnaHQsIGhhbmcgb24gYSBzZWNvbmQuIEkndmUgZ290IHRvIHJlZnJlc2ggbXkgbWVtb3J5LiBUaGF0IGBpY2VfbGlua19ldmVudGAgZnVuY3Rpb27igKYgdGhhdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCBkZWZpbmVkIHJpZ2h0IGluIGBpY2VfbWFpbi5jYCwgaXNuJ3QgaXQ/IE9rYXksIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIGhvdyB0aGlzIHRoaW5nIGlzIGFjdHVhbGx5IHdvcmtpbmcsIGVzcGVjaWFsbHkgaG93IGl0IGhhbmRsZXMgYGxpbmtfdXBgLiBSaWdodCwgdGhlIGJlc3Qgd2F5IHRvIGRvIHRoaXMgaXMganVzdCBkaXZlIHJpZ2h0IGluIGFuZCByZWFkIHRoZSBjb2RlIGZvciBgaWNlX2xpbmtfZXZlbnRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGhlcmUsIGJlY2F1c2Uga25vd2luZyBob3cgYGxpbmtfdXBgIGlzIHVzZWQgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIGJlaGF2aW9yIEknbSBleHBlY3RpbmcuIFRpbWUgdG8gZ2V0IHRvIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODg2LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6MzM6NDEuODY4MjM0NjY4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA4MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMDMsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTAzOlxcdHN0YXRpYyBpbnRcXG4xMTA0OlxcdGljZV9saW5rX2V2ZW50KHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3BvcnRfaW5mbyAqcGksIGJvb2wgbGlua191cCxcXG4xMTA1OlxcdFxcdCAgICAgICB1MTYgbGlua19zcGVlZClcXG4xMTA2OlxcdHtcXG4xMTA3OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGljZV9wZl90b19kZXYocGYpO1xcbjExMDg6XFx0XFx0c3RydWN0IGljZV9waHlfaW5mbyAqcGh5X2luZm87XFxuMTEwOTpcXHRcXHRzdHJ1Y3QgaWNlX3ZzaSAqdnNpO1xcbjExMTA6XFx0XFx0dTE2IG9sZF9saW5rX3NwZWVkO1xcbjExMTE6XFx0XFx0Ym9vbCBvbGRfbGluaztcXG4xMTEyOlxcdFxcdGludCBzdGF0dXM7XFxuMTExMzpcXHRcXG4xMTE0OlxcdFxcdHBoeV9pbmZvID0gXFx1MDAyNnBpLVxcdTAwM2VwaHk7XFxuMTExNTpcXHRcXHRwaHlfaW5mby1cXHUwMDNlbGlua19pbmZvX29sZCA9IHBoeV9pbmZvLVxcdTAwM2VsaW5rX2luZm87XFxuMTExNjpcXHRcXG4xMTE3OlxcdFxcdG9sZF9saW5rID0gISEocGh5X2luZm8tXFx1MDAzZWxpbmtfaW5mb19vbGQubGlua19pbmZvIFxcdTAwMjYgSUNFX0FRX0xJTktfVVApO1xcbjExMTg6XFx0XFx0b2xkX2xpbmtfc3BlZWQgPSBwaHlfaW5mby1cXHUwMDNlbGlua19pbmZvX29sZC5saW5rX3NwZWVkO1xcbjExMTk6XFx0XFxuMTEyMDpcXHRcXHQvKiB1cGRhdGUgdGhlIGxpbmsgaW5mbyBzdHJ1Y3R1cmVzIGFuZCByZS1lbmFibGUgbGluayBldmVudHMsXFxuMTEyMTpcXHRcXHQgKiBkb24ndCBiYWlsIG9uIGZhaWx1cmUgZHVlIHRvIG90aGVyIGJvb2sga2VlcGluZyBuZWVkZWRcXG4xMTIyOlxcdFxcdCAqL1xcbjExMjM6XFx0XFx0c3RhdHVzID0gaWNlX3VwZGF0ZV9saW5rX2luZm8ocGkpO1xcbjExMjQ6XFx0XFx0aWYgKHN0YXR1cylcXG4xMTI1OlxcdFxcdFxcdGRldl9kYmcoZGV2LCBcXFwiRmFpbGVkIHRvIHVwZGF0ZSBsaW5rIHN0YXR1cyBvbiBwb3J0ICVkLCBlcnIgJWQgYXFfZXJyICVzXFxcXG5cXFwiLFxcbjExMjY6XFx0XFx0XFx0XFx0cGktXFx1MDAzZWxwb3J0LCBzdGF0dXMsXFxuMTEyNzpcXHRcXHRcXHRcXHRsaWJpZV9hcV9zdHIocGktXFx1MDAzZWh3LVxcdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpKTtcXG4xMTI4OlxcdFxcbjExMjk6XFx0XFx0aWNlX2NoZWNrX2xpbmtfY2ZnX2VycihwZiwgcGktXFx1MDAzZXBoeS5saW5rX2luZm8ubGlua19jZmdfZXJyKTtcXG4xMTMwOlxcdFxcbjExMzE6XFx0XFx0bGlua191cCA9IHBoeV9pbmZvLVxcdTAwM2VsaW5rX2luZm8ubGlua19pbmZvIFxcdTAwMjYgSUNFX0FRX0xJTktfVVA7XFxuMTEzMjpcXHRcXHRsaW5rX3NwZWVkID0gcGh5X2luZm8tXFx1MDAzZWxpbmtfaW5mby5saW5rX3NwZWVkO1xcbjExMzM6XFx0XFxuMTEzNDpcXHRcXHR2c2kgPSBpY2VfZ2V0X21haW5fdnNpKHBmKTtcXG4xMTM1OlxcdFxcdGlmICghdnNpIHx8ICF2c2ktXFx1MDAzZXBvcnRfaW5mbylcXG4xMTM2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjExMzc6XFx0XFxuMTEzODpcXHRcXHQvKiB0dXJuIG9mZiBQSFkgaWYgbWVkaWEgd2FzIHJlbW92ZWQgKi9cXG4xMTM5OlxcdFxcdGlmICghdGVzdF9iaXQoSUNFX0ZMQUdfTk9fTUVESUEsIHBmLVxcdTAwM2VmbGFncykgXFx1MDAyNlxcdTAwMjZcXG4xMTQwOlxcdFxcdCAgICAhKHBpLVxcdTAwM2VwaHkubGlua19pbmZvLmxpbmtfaW5mbyBcXHUwMDI2IElDRV9BUV9NRURJQV9BVkFJTEFCTEUpKSB7XFxuMTE0MTpcXHRcXHRcXHRzZXRfYml0KElDRV9GTEFHX05PX01FRElBLCBwZi1cXHUwMDNlZmxhZ3MpO1xcbjExNDI6XFx0XFx0XFx0aWNlX3NldF9saW5rKHZzaSwgZmFsc2UpO1xcbjExNDM6XFx0XFx0fVxcbjExNDQ6XFx0XFxuMTE0NTpcXHRcXHQvKiBpZiB0aGUgb2xkIGxpbmsgdXAvZG93biBhbmQgc3BlZWQgaXMgdGhlIHNhbWUgYXMgdGhlIG5ldyAqL1xcbjExNDY6XFx0XFx0aWYgKGxpbmtfdXAgPT0gb2xkX2xpbmsgXFx1MDAyNlxcdTAwMjYgbGlua19zcGVlZCA9PSBvbGRfbGlua19zcGVlZClcXG4xMTQ3OlxcdFxcdFxcdHJldHVybiAwO1xcbjExNDg6XFx0XFxuMTE0OTpcXHRcXHRpZiAoIWxpbmtfdXAgXFx1MDAyNlxcdTAwMjYgb2xkX2xpbmspXFxuMTE1MDpcXHRcXHRcXHRwZi1cXHUwMDNlbGlua19kb3duX2V2ZW50cysrO1xcbjExNTE6XFx0XFxuMTE1MjpcXHRcXHRpY2VfcHRwX2xpbmtfY2hhbmdlKHBmLCBsaW5rX3VwKTtcXG4xMTUzOlxcdFxcbjExNTQ6XFx0XFx0aWYgKGljZV9pc19kY2JfYWN0aXZlKHBmKSkge1xcbjExNTU6XFx0XFx0XFx0aWYgKHRlc3RfYml0KElDRV9GTEFHX0RDQl9FTkEsIHBmLVxcdTAwM2VmbGFncykpXFxuMTE1NjpcXHRcXHRcXHRcXHRpY2VfZGNiX3JlYnVpbGQocGYpO1xcbjExNTc6XFx0XFx0fSBlbHNlIHtcXG4xMTU4OlxcdFxcdFxcdGlmIChsaW5rX3VwKVxcbjExNTk6XFx0XFx0XFx0XFx0aWNlX3NldF9kZmx0X21pYihwZik7XFxuMTE2MDpcXHRcXHR9XFxuMTE2MTpcXHRcXHRpY2VfdnNpX2xpbmtfZXZlbnQodnNpLCBsaW5rX3VwKTtcXG4xMTYyOlxcdFxcdGljZV9wcmludF9saW5rX21zZyh2c2ksIGxpbmtfdXAsIGxpbmtfc3BlZWQpO1xcbjExNjM6XFx0XFxuMTE2NDpcXHRcXHRpY2VfdmNfbm90aWZ5X2xpbmtfc3RhdGUocGYpO1xcbjExNjU6XFx0XFxuMTE2NjpcXHRcXHRyZXR1cm4gMDtcXG4xMTY3OlxcdH1cXG4xMTY4OlxcdFxcbjExNjk6XFx0LyoqXFxuMTE3MDpcXHQgKiBpY2Vfd2F0Y2hkb2dfc3VidGFzayAtIHBlcmlvZGljIHRhc2tzIG5vdCB1c2luZyBldmVudCBkcml2ZW4gc2NoZWR1bGluZ1xcbjExNzE6XFx0ICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxcbjExNzI6XFx0ICovXFxuMTE3MzpcXHRzdGF0aWMgdm9pZCBpY2Vfd2F0Y2hkb2dfc3VidGFzayhzdHJ1Y3QgaWNlX3BmICpwZilcXG4xMTc0OlxcdHtcXG4xMTc1OlxcdFxcdGludCBpO1xcbjExNzY6XFx0XFxuMTE3NzpcXHRcXHQvKiBpZiBpbnRlcmZhY2UgaXMgZG93biBkbyBub3RoaW5nICovXFxuMTE3ODpcXHRcXHRpZiAodGVzdF9iaXQoSUNFX0RPV04sIHBmLVxcdTAwM2VzdGF0ZSkgfHxcXG4xMTc5OlxcdFxcdCAgICB0ZXN0X2JpdChJQ0VfQ0ZHX0JVU1ksIHBmLVxcdTAwM2VzdGF0ZSkpXFxuMTE4MDpcXHRcXHRcXHRyZXR1cm47XFxuMTE4MTpcXHRcXG4xMTgyOlxcdFxcdC8qIG1ha2Ugc3VyZSB3ZSBkb24ndCBkbyB0aGVzZSB0aGluZ3MgdG9vIG9mdGVuICovXFxuMTE4MzpcXHRcXHRpZiAodGltZV9iZWZvcmUoamlmZmllcyxcXG4xMTg0OlxcdFxcdFxcdFxcdHBmLVxcdTAwM2VzZXJ2X3Rtcl9wcmV2ICsgcGYtXFx1MDAzZXNlcnZfdG1yX3BlcmlvZCkpXFxuMTE4NTpcXHRcXHRcXHRyZXR1cm47XFxuMTE4NjpcXHRcXG4xMTg3OlxcdFxcdHBmLVxcdTAwM2VzZXJ2X3Rtcl9wcmV2ID0gamlmZmllcztcXG4xMTg4OlxcdFxcbjExODk6XFx0XFx0LyogVXBkYXRlIHRoZSBzdGF0cyBmb3IgYWN0aXZlIG5ldGRldnMgc28gdGhlIG5ldHdvcmsgc3RhY2tcXG4xMTkwOlxcdFxcdCAqIGNhbiBsb29rIGF0IHVwZGF0ZWQgbnVtYmVycyB3aGVuZXZlciBpdCBjYXJlcyB0b1xcbjExOTE6XFx0XFx0ICovXFxuMTE5MjpcXHRcXHRpY2VfdXBkYXRlX3BmX3N0YXRzKHBmKTtcXG4xMTkzOlxcdFxcdGljZV9mb3JfZWFjaF92c2kocGYsIGkpXFxuMTE5NDpcXHRcXHRcXHRpZiAocGYtXFx1MDAzZXZzaVtpXSBcXHUwMDI2XFx1MDAyNiBwZi1cXHUwMDNldnNpW2ldLVxcdTAwM2VuZXRkZXYpXFxuMTE5NTpcXHRcXHRcXHRcXHRpY2VfdXBkYXRlX3ZzaV9zdGF0cyhwZi1cXHUwMDNldnNpW2ldKTtcXG4xMTk2OlxcdH1cXG4xMTk3OlxcdFxcbjExOTg6XFx0LyoqXFxuMTE5OTpcXHQgKiBpY2VfaW5pdF9saW5rX2V2ZW50cyAtIGVuYWJsZS9pbml0aWFsaXplIGxpbmsgZXZlbnRzXFxuMTIwMDpcXHQgKiBAcGk6IHBvaW50ZXIgdG8gdGhlIHBvcnRfaW5mbyBpbnN0YW5jZVxcbjEyMDE6XFx0ICpcXG4xMjAyOlxcdCAqIFJldHVybnMgLUVJTyBvbiBmYWlsdXJlLCAwIG9uIHN1Y2Nlc3NcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6MzM6NDEuODY4NTQ1MTc5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTExOTM4MDMxMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMaW5rIFN0YXRlIENoYW5nZSBpbiB0aGUgYGljZWAgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIGBpY2VfbGlua19ldmVudGAgZnVuY3Rpb24sIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2UuIEJlZm9yZSwgdGhlIGNvZGUgc2VlbWVkIHRvIGNvbmRpdGlvbmFsbHkgc2V0IGBsaW5rX3VwYCBiYXNlZCBvbiBgcGh5X2luZm8tXHUwMDNlbGlua19pbmZvLmxpbmtfaW5mbyBcdTAwMjYgSUNFX0FRX0xJTktfVVBgLiBTcGVjaWZpY2FsbHksIGBsaW5rX3VwYCB3YXMgcGFzc2VkIGluLCBhbmQgdGhlbiBwb3RlbnRpYWxseSBtb2RpZmllZC4gTm93LCBpdCBzZWVtcyB0aGF0IGBsaW5rX3VwYCBpcyB1bmNvbmRpdGlvbmFsbHkgYXNzaWduZWQgdGhlIHJlc3VsdCBvZiB0aGF0IGNoZWNrLCBhbG9uZyB3aXRoIHRoZSBgbGlua19zcGVlZGAuIEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2ggY2FyZWZ1bGx5IGJlY2F1c2UgY2hhbmdlcyB0byBsaW5rIHN0YXRlIGhhbmRsaW5nIGFyZSBhbHdheXMgY3JpdGljYWwuXG5cbkkgbmVlZCB0byBxdWlja2x5IHJlbWVtYmVyIHdoZXJlIHRoYXQgaW5pdGlhbCBgbGlua191cGAgY29tZXMgZnJvbS4gQWgsIHJpZ2h0LCBpbiBgaWNlX2hhbmRsZV9saW5rX2V2ZW50YCwgaXQncyBkZXJpdmVkIGZyb20gYGxpbmtfZGF0YS1cdTAwM2VsaW5rX2luZm8gXHUwMDI2IElDRV9BUV9MSU5LX1VQYC4gU28sIHdlIHVwZGF0ZSBgcGktXHUwMDNlcGh5LmxpbmtfaW5mb2AgdmlhIGBpY2VfdXBkYXRlX2xpbmtfaW5mbyhwaSlgLiBUaGUgcHJlLXBhdGNoIGxvZ2ljIHdhcyBlc3NlbnRpYWxseSBhIHJhY2UuIElmIHRoZSBsaW5rIHdlbnQgZG93biBiZXR3ZWVuIHRoZSBpbml0aWFsIGV2ZW50IChgbGlua19kYXRhYCkgYW5kIHRoZSB1cGRhdGUgb2YgYHBoeV9pbmZvYCB2aWEgYGljZV91cGRhdGVfbGlua19pbmZvYCwgdGhlbiB3ZSBjb3VsZCBzdGlsbCByZXBvcnQgdGhlIGxpbmsgYXMgdXAuIEFmdGVyIHRoZSBwYXRjaCwgdGhhdCB3aW5kb3cgaXMgY2xvc2VkLCBhcyB0aGUgY2hlY2sgd2lsbCByZWZsZWN0IHRoZSBjdXJyZW50IHN0YXRlIGFzIHVwZGF0ZWQgYnkgYGljZV91cGRhdGVfbGlua19pbmZvYC5cblxuVGhpcyBpcyBhIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgaW1wYWN0ZnVsIGZ1bmN0aW9uYWwgY2hhbmdlLiBOb3csIGEgdHJhbnNpZW50IGxpbmsgZG93biB3aWxsIGJlIGNvcnJlY3RseSByZWZsZWN0ZWQuIFByZXZpb3VzbHkgaXQgbWlnaHQgaGF2ZSBiZWVuIGluY29ycmVjdGx5IHJlcG9ydGVkIGFzIHVwLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IGlzIHRoaXMgd29ydGggZnV6emluZz8gVGhlIGBpY2VgIGRyaXZlciwgd2hpY2ggaXMgZm9yIEludGVsJ3MgRTgwMCBzZXJpZXMgRXRoZXJuZXQgQ29ubmVjdGlvbiwgaXMgYSBwaHlzaWNhbCBQQ0llIG5ldHdvcmsgY2FyZCBkcml2ZXIuIE15IHByaW1hcnkgd29ycnkgaXMgdGhhdCB0aGlzIGlzbid0IGVtdWxhdGVkIGJ5IFFFTVUuIEhvd2V2ZXIsIHRoaXMgZHJpdmVyIGlzIGZvciBhIHZlbmRvci1zcGVjaWZpYyBOSUMsIGFuZCBpdCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBTbywgYmFzZWQgb24gdGhhdCwgdGhpcyBjaGFuZ2UgaXMgbm90IHdvcnRoIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NTksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxOTozMzo1My4wNjIzNTA0NjVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3MjE3MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGNpX3JlZ2lzdGVyX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTU4NjY9c3RhdGljIGludCBfX2luaXQgaWNlX21vZHVsZV9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01ODg4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjU4ODk6XFx0c3RhdHVzID0gcGNpX3JlZ2lzdGVyX2RyaXZlcihcXHUwMDI2aWNlX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTg5MC1cXHRpZiAoc3RhdHVzKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjMzOjUzLjExMDEwMjAyNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNzYxNDc2MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBDSSBEcml2ZXIgQ29kZSoqXG5cbk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIGRyaXZlciBmb3IgYSBQQ0kgZGV2aWNlIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBJbnRlbCBFODAwIHNlcmllcywgb3IgYGljZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25zaWRlciB3aGV0aGVyIGl0J3MgZW11bGF0ZWQgaW4gYSB0eXBpY2FsIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50IGxpa2UgUUVNVS4gTm9wZS4gUUVNVSBkb2Vzbid0IHN1cHBvcnQgdGhlIGBpY2VgIGhhcmR3YXJlLiBJdCdzIGdvdCB0aGUgdXN1YWwgc3VzcGVjdHMgbGlrZSBgZTEwMDBgLCBgZTEwMDBlYCwgYW5kIGEgZmV3IG90aGVycywgYnV0IG5vIGBpY2VgLlxuXG5UaGVyZWZvcmUsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgUUVNVSdzIGVtdWxhdGlvbiBjYXBhYmlsaXRpZXMsIHRoaXMgc3BlY2lmaWMgY29kZSBwYXRoIGluIHRoZSBgaWNlYCBkcml2ZXIgaXMgdW5yZWFjaGFibGUgd2l0aGluIHZpcnR1YWxpemVkIHNldHVwcyBzdWNoIGFzIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBvciB1c2luZyBRRU1VLlxuXG5MZXQgbWUganVzdCBzb2xpZGlmeSB0aGF0IHJlYXNvbmluZy4gVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgdGhlIGBpY2VgIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGNhcmQgZHJpdmVyLiBUaGF0IG1lYW5zIGl0J3MgZGVzaWduZWQgdG8gaW50ZXJmYWNlIHdpdGggcGh5c2ljYWwgaGFyZHdhcmUuIFFFTVUgZG9lc24ndCBlbXVsYXRlIHRoZSBgaWNlYCBjaGlwLiBDb25zZXF1ZW50bHksIGFueSBjb2RlIGNoYW5nZXMgcmVsYXRpbmcgdG8gdGhpcyBkZXZpY2UgYXJlIG5vdCByZWFjaGFibGUgd2l0aGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudC4gRnVydGhlcm1vcmUsIGxvb2tpbmcgYXQgdGhlIGNvZGUgY2hhbmdlcywgaXTigJlzIG1vc3RseSBhYm91dCBwcmludGluZyB0aGUgbGluayBzcGVlZCBpbmZvcm1hdGlvbiBpbiBgaWNlX3ByaW50X2xpbmtfbXNnYCBhbmQgYSBtaW5vciBsb2dpYyBjaGFuZ2UgaW4gYGljZV9saW5rX2V2ZW50YCBhbmQgYm90aCBvZiB0aGVzZSBhcmUgaGFyZHdhcmUtZGVwZW5kZW50IGZlYXR1cmVzLlxuXG5TbywgZ2l2ZW4gdGhpcywgSSdtIGNvbmZpZGVudCB0aGF0IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYCBmb3IgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIzNiwiT3V0cHV0VG9rZW5zIjoxMDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6MzQ6MDQuODcxNTgxMDQ0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEU4MDAgc2VyaWVzIEV0aGVybmV0IGRyaXZlciAoaWNlKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGNhcmQgZHJpdmVyLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiBBZGRpdGlvbmFsbHksIHRoZSBjaGFuZ2VzIHByaW1hcmlseSBhZmZlY3QgbGluayBzdGF0dXMgbG9nZ2luZyBhbmQgaGFyZHdhcmUtZGVwZW5kZW50IGxpbmsgZXZlbnQgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgRTgwMCBzZXJpZXMgRXRoZXJuZXQgZHJpdmVyIChpY2UpLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgY2FyZCBkcml2ZXIuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuIEFkZGl0aW9uYWxseSwgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFmZmVjdCBsaW5rIHN0YXR1cyBsb2dnaW5nIGFuZCBoYXJkd2FyZS1kZXBlbmRlbnQgbGluayBldmVudCBoYW5kbGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow8jrxg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-06 19:32:15 +0000 UTC FinishedAt: 2026-08-06 19:34:06 +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+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBFODAwIHNlcmllcyBFdGhlcm5ldCBkcml2ZXIgKGljZSksIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgbmV0d29yayBjYXJkIGRyaXZlci4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4gQWRkaXRpb25hbGx5LCB0aGUgY2hhbmdlcyBwcmltYXJpbHkgYWZmZWN0IGxpbmsgc3RhdHVzIGxvZ2dpbmcgYW5kIGhhcmR3YXJlLWRlcGVuZGVudCBsaW5rIGV2ZW50IGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxOTozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ1MDAyNDJiNWE2NGY3MTJjNjI4NWZmM2ZmMjRiYWE5ZmJmYzI4MjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDE5OjMzOjIxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxuaW5kZXggZmM5MWI2NjY1ZjkwNS4uOWRhZDE2MWJkOTdjNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXG5AQCAtMTAwOSw3ICYjNDM7MTAwOSw3IEBAIGludCBpY2VfZ2V0X3Jzc19rZXkoc3RydWN0IGljZV92c2kgKnZzaSwgdTggKnNlZWQpO1xuIGludCBpY2Vfc2V0X3Jzc19oZnVuYyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1OCBoZnVuYyk7XG4gdm9pZCBpY2VfZmlsbF9yc3NfbHV0KHU4ICpsdXQsIHUxNiByc3NfdGFibGVfc2l6ZSwgdTE2IHJzc19zaXplKTtcbiBpbnQgaWNlX3NjaGVkdWxlX3Jlc2V0KHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9yZXNldF9yZXEgcmVzZXQpO1xuLXZvaWQgaWNlX3ByaW50X2xpbmtfbXNnKHN0cnVjdCBpY2VfdnNpICp2c2ksIGJvb2wgaXN1cCk7XG4mIzQzO3ZvaWQgaWNlX3ByaW50X2xpbmtfbXNnKHN0cnVjdCBpY2VfdnNpICp2c2ksIGJvb2wgaXN1cCwgdTE2IGxpbmtfc3BlZWQpO1xuIGludCBpY2VfcGx1Z19hdXhfZGV2KHN0cnVjdCBpY2VfcGYgKnBmKTtcbiB2b2lkIGljZV91bnBsdWdfYXV4X2RldihzdHJ1Y3QgaWNlX3BmICpwZik7XG4gdm9pZCBpY2VfcmRtYV9maW5hbGl6ZV9zZXR1cChzdHJ1Y3QgaWNlX3BmICpwZik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuY1xuaW5kZXggN2ViMzgwYmU3ZWQyNy4uOTRhYjIxZjMyY2ZkOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuY1xuQEAgLTI3ODUsNyAmIzQzOzI3ODUsNyBAQCBpY2Vfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdC8qIFRlbGwgdGhlIE9TIGxpbmsgaXMgZ29pbmcgZG93biwgdGhlIGxpbmsgd2lsbCBnb1xuIFx0XHQgKiBiYWNrIHVwIHdoZW4gZncgc2F5cyBpdCBpcyByZWFkeSBhc3luY2hyb25vdXNseVxuIFx0XHQgKi9cbi1cdFx0aWNlX3ByaW50X2xpbmtfbXNnKG5wLVx1MDAzZXZzaSwgZmFsc2UpO1xuJiM0MztcdFx0aWNlX3ByaW50X2xpbmtfbXNnKG5wLVx1MDAzZXZzaSwgZmFsc2UsIDApO1xuIFx0XHRuZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpO1xuIFx0XHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5pbmRleCBkODg4MzU0ODJkM2FhLi45NzRmMjdmZmViMzk4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5AQCAtNzcyLDggJiM0Mzs3NzIsOSBAQCBzdGF0aWMgdm9pZCBpY2VfcHJpbnRfdG9wb19jb25mbGljdChzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxuICAqIGljZV9wcmludF9saW5rX21zZyAtIHByaW50IGxpbmsgdXAgb3IgZG93biBtZXNzYWdlXG4gICogQHZzaTogdGhlIFZTSSB3aG9zZSBsaW5rIHN0YXR1cyBpcyBiZWluZyBxdWVyaWVkXG4gICogQGlzdXA6IGJvb2xlYW4gZm9yIGlmIHRoZSBsaW5rIGlzIG5vdyB1cCBvciBkb3duXG4mIzQzOyAqIEBsaW5rX3NwZWVkOiBjdXJyZW50IGxpbmsgc3BlZWQgdmFsdWUgdG8gZGlzcGxheVxuICAqL1xuLXZvaWQgaWNlX3ByaW50X2xpbmtfbXNnKHN0cnVjdCBpY2VfdnNpICp2c2ksIGJvb2wgaXN1cClcbiYjNDM7dm9pZCBpY2VfcHJpbnRfbGlua19tc2coc3RydWN0IGljZV92c2kgKnZzaSwgYm9vbCBpc3VwLCB1MTYgbGlua19zcGVlZClcbiB7XG4gXHRzdHJ1Y3QgaWNlX2FxY19nZXRfcGh5X2NhcHNfZGF0YSAqY2FwcztcbiBcdGNvbnN0IGNoYXIgKmFuX2FkdmVydGlzZWQ7XG5AQCAtNzk3LDcgJiM0Mzs3OTgsNyBAQCB2b2lkIGljZV9wcmludF9saW5rX21zZyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCBib29sIGlzdXApXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdHN3aXRjaCAodnNpLVx1MDAzZXBvcnRfaW5mby1cdTAwM2VwaHkubGlua19pbmZvLmxpbmtfc3BlZWQpIHtcbiYjNDM7XHRzd2l0Y2ggKGxpbmtfc3BlZWQpIHtcbiBcdGNhc2UgSUNFX0FRX0xJTktfU1BFRURfMjAwR0I6XG4gXHRcdHNwZWVkID0gXCYjMzQ7MjAwIEdcJiMzNDs7XG4gXHRcdGJyZWFrO1xuQEAgLTExMjcsMTEgJiM0MzsxMTI4LDggQEAgaWNlX2xpbmtfZXZlbnQoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcG9ydF9pbmZvICpwaSwgYm9vbCBsaW5rX3VwLFxuIFxuIFx0aWNlX2NoZWNrX2xpbmtfY2ZnX2VycihwZiwgcGktXHUwMDNlcGh5LmxpbmtfaW5mby5saW5rX2NmZ19lcnIpO1xuIFxuLVx0LyogQ2hlY2sgaWYgdGhlIGxpbmsgc3RhdGUgaXMgdXAgYWZ0ZXIgdXBkYXRpbmcgbGluayBpbmZvLCBhbmQgdHJlYXRcbi1cdCAqIHRoaXMgZXZlbnQgYXMgYW4gVVAgZXZlbnQgc2luY2UgdGhlIGxpbmsgaXMgYWN0dWFsbHkgVVAgbm93LlxuLVx0ICovXG4tXHRpZiAocGh5X2luZm8tXHUwMDNlbGlua19pbmZvLmxpbmtfaW5mbyBcdTAwMjYgSUNFX0FRX0xJTktfVVApXG4tXHRcdGxpbmtfdXAgPSB0cnVlO1xuJiM0MztcdGxpbmtfdXAgPSBwaHlfaW5mby1cdTAwM2VsaW5rX2luZm8ubGlua19pbmZvIFx1MDAyNiBJQ0VfQVFfTElOS19VUDtcbiYjNDM7XHRsaW5rX3NwZWVkID0gcGh5X2luZm8tXHUwMDNlbGlua19pbmZvLmxpbmtfc3BlZWQ7XG4gXG4gXHR2c2kgPSBpY2VfZ2V0X21haW5fdnNpKHBmKTtcbiBcdGlmICghdnNpIHx8ICF2c2ktXHUwMDNlcG9ydF9pbmZvKVxuQEAgLTExNjEsNyAmIzQzOzExNTksNyBAQCBpY2VfbGlua19ldmVudChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wb3J0X2luZm8gKnBpLCBib29sIGxpbmtfdXAsXG4gXHRcdFx0aWNlX3NldF9kZmx0X21pYihwZik7XG4gXHR9XG4gXHRpY2VfdnNpX2xpbmtfZXZlbnQodnNpLCBsaW5rX3VwKTtcbi1cdGljZV9wcmludF9saW5rX21zZyh2c2ksIGxpbmtfdXApO1xuJiM0MztcdGljZV9wcmludF9saW5rX21zZyh2c2ksIGxpbmtfdXAsIGxpbmtfc3BlZWQpO1xuIFxuIFx0aWNlX3ZjX25vdGlmeV9saW5rX3N0YXRlKHBmKTtcbiBcbkBAIC02NzQyLDcgJiM0Mzs2NzQwLDggQEAgc3RhdGljIGludCBpY2VfdXBfY29tcGxldGUoc3RydWN0IGljZV92c2kgKnZzaSlcbiBcdCAgICAodnNpLVx1MDAzZXBvcnRfaW5mby1cdTAwM2VwaHkubGlua19pbmZvLmxpbmtfaW5mbyBcdTAwMjYgSUNFX0FRX0xJTktfVVApIFx1MDAyNlx1MDAyNlxuIFx0ICAgICgodnNpLVx1MDAzZW5ldGRldiBcdTAwMjZcdTAwMjYgKHZzaS1cdTAwM2V0eXBlID09IElDRV9WU0lfUEYgfHxcbiBcdFx0XHQgICAgICB2c2ktXHUwMDNldHlwZSA9PSBJQ0VfVlNJX1NGKSkpKSB7XG4tXHRcdGljZV9wcmludF9saW5rX21zZyh2c2ksIHRydWUpO1xuJiM0MztcdFx0aWNlX3ByaW50X2xpbmtfbXNnKHZzaSwgdHJ1ZSxcbiYjNDM7XHRcdFx0XHQgICB2c2ktXHUwMDNlcG9ydF9pbmZvLVx1MDAzZXBoeS5saW5rX2luZm8ubGlua19zcGVlZCk7XG4gXHRcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXModnNpLVx1MDAzZW5ldGRldik7XG4gXHRcdG5ldGlmX2NhcnJpZXJfb24odnNpLVx1MDAzZW5ldGRldik7XG4gXHRcdGljZV9wdHBfbGlua19jaGFuZ2UocGYsIHRydWUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgRTgwMCBzZXJpZXMgRXRoZXJuZXQgZHJpdmVyIChpY2UpLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgY2FyZCBkcml2ZXIuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuIEFkZGl0aW9uYWxseSwgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFmZmVjdCBsaW5rIHN0YXR1cyBsb2dnaW5nIGFuZCBoYXJkd2FyZS1kZXBlbmRlbnQgbGluayBldmVudCBoYW5kbGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NTAwMjQyYjVhNjRmNzEyYzYyODVmZjNmZjI0YmFhOWZiZmMyODI2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgNiAxOTozMzoyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaAppbmRleCBmYzkxYjY2NjVmOTA1Li45ZGFkMTYxYmQ5N2M0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oCkBAIC0xMDA5LDcgJiM0MzsxMDA5LDcgQEAgaW50IGljZV9nZXRfcnNzX2tleShzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1OCAqc2VlZCk7CiBpbnQgaWNlX3NldF9yc3NfaGZ1bmMoc3RydWN0IGljZV92c2kgKnZzaSwgdTggaGZ1bmMpOwogdm9pZCBpY2VfZmlsbF9yc3NfbHV0KHU4ICpsdXQsIHUxNiByc3NfdGFibGVfc2l6ZSwgdTE2IHJzc19zaXplKTsKIGludCBpY2Vfc2NoZWR1bGVfcmVzZXQoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX3Jlc2V0X3JlcSByZXNldCk7Ci12b2lkIGljZV9wcmludF9saW5rX21zZyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCBib29sIGlzdXApOwomIzQzO3ZvaWQgaWNlX3ByaW50X2xpbmtfbXNnKHN0cnVjdCBpY2VfdnNpICp2c2ksIGJvb2wgaXN1cCwgdTE2IGxpbmtfc3BlZWQpOwogaW50IGljZV9wbHVnX2F1eF9kZXYoc3RydWN0IGljZV9wZiAqcGYpOwogdm9pZCBpY2VfdW5wbHVnX2F1eF9kZXYoc3RydWN0IGljZV9wZiAqcGYpOwogdm9pZCBpY2VfcmRtYV9maW5hbGl6ZV9zZXR1cChzdHJ1Y3QgaWNlX3BmICpwZik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jCmluZGV4IDdlYjM4MGJlN2VkMjcuLjk0YWIyMWYzMmNmZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jCkBAIC0yNzg1LDcgJiM0MzsyNzg1LDcgQEAgaWNlX3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkvKiBUZWxsIHRoZSBPUyBsaW5rIGlzIGdvaW5nIGRvd24sIHRoZSBsaW5rIHdpbGwgZ28KIAkJICogYmFjayB1cCB3aGVuIGZ3IHNheXMgaXQgaXMgcmVhZHkgYXN5bmNocm9ub3VzbHkKIAkJICovCi0JCWljZV9wcmludF9saW5rX21zZyhucC0mZ3Q7dnNpLCBmYWxzZSk7CiYjNDM7CQlpY2VfcHJpbnRfbGlua19tc2cobnAtJmd0O3ZzaSwgZmFsc2UsIDApOwogCQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwogCQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jCmluZGV4IGQ4ODgzNTQ4MmQzYWEuLjk3NGYyN2ZmZWIzOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jCkBAIC03NzIsOCAmIzQzOzc3Miw5IEBAIHN0YXRpYyB2b2lkIGljZV9wcmludF90b3BvX2NvbmZsaWN0KHN0cnVjdCBpY2VfdnNpICp2c2kpCiAgKiBpY2VfcHJpbnRfbGlua19tc2cgLSBwcmludCBsaW5rIHVwIG9yIGRvd24gbWVzc2FnZQogICogQHZzaTogdGhlIFZTSSB3aG9zZSBsaW5rIHN0YXR1cyBpcyBiZWluZyBxdWVyaWVkCiAgKiBAaXN1cDogYm9vbGVhbiBmb3IgaWYgdGhlIGxpbmsgaXMgbm93IHVwIG9yIGRvd24KJiM0MzsgKiBAbGlua19zcGVlZDogY3VycmVudCBsaW5rIHNwZWVkIHZhbHVlIHRvIGRpc3BsYXkKICAqLwotdm9pZCBpY2VfcHJpbnRfbGlua19tc2coc3RydWN0IGljZV92c2kgKnZzaSwgYm9vbCBpc3VwKQomIzQzO3ZvaWQgaWNlX3ByaW50X2xpbmtfbXNnKHN0cnVjdCBpY2VfdnNpICp2c2ksIGJvb2wgaXN1cCwgdTE2IGxpbmtfc3BlZWQpCiB7CiAJc3RydWN0IGljZV9hcWNfZ2V0X3BoeV9jYXBzX2RhdGEgKmNhcHM7CiAJY29uc3QgY2hhciAqYW5fYWR2ZXJ0aXNlZDsKQEAgLTc5Nyw3ICYjNDM7Nzk4LDcgQEAgdm9pZCBpY2VfcHJpbnRfbGlua19tc2coc3RydWN0IGljZV92c2kgKnZzaSwgYm9vbCBpc3VwKQogCQlyZXR1cm47CiAJfQogCi0Jc3dpdGNoICh2c2ktJmd0O3BvcnRfaW5mby0mZ3Q7cGh5LmxpbmtfaW5mby5saW5rX3NwZWVkKSB7CiYjNDM7CXN3aXRjaCAobGlua19zcGVlZCkgewogCWNhc2UgSUNFX0FRX0xJTktfU1BFRURfMjAwR0I6CiAJCXNwZWVkID0gJiMzNDsyMDAgRyYjMzQ7OwogCQlicmVhazsKQEAgLTExMjcsMTEgJiM0MzsxMTI4LDggQEAgaWNlX2xpbmtfZXZlbnQoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcG9ydF9pbmZvICpwaSwgYm9vbCBsaW5rX3VwLAogCiAJaWNlX2NoZWNrX2xpbmtfY2ZnX2VycihwZiwgcGktJmd0O3BoeS5saW5rX2luZm8ubGlua19jZmdfZXJyKTsKIAotCS8qIENoZWNrIGlmIHRoZSBsaW5rIHN0YXRlIGlzIHVwIGFmdGVyIHVwZGF0aW5nIGxpbmsgaW5mbywgYW5kIHRyZWF0Ci0JICogdGhpcyBldmVudCBhcyBhbiBVUCBldmVudCBzaW5jZSB0aGUgbGluayBpcyBhY3R1YWxseSBVUCBub3cuCi0JICovCi0JaWYgKHBoeV9pbmZvLSZndDtsaW5rX2luZm8ubGlua19pbmZvICZhbXA7IElDRV9BUV9MSU5LX1VQKQotCQlsaW5rX3VwID0gdHJ1ZTsKJiM0MzsJbGlua191cCA9IHBoeV9pbmZvLSZndDtsaW5rX2luZm8ubGlua19pbmZvICZhbXA7IElDRV9BUV9MSU5LX1VQOwomIzQzOwlsaW5rX3NwZWVkID0gcGh5X2luZm8tJmd0O2xpbmtfaW5mby5saW5rX3NwZWVkOwogCiAJdnNpID0gaWNlX2dldF9tYWluX3ZzaShwZik7CiAJaWYgKCF2c2kgfHwgIXZzaS0mZ3Q7cG9ydF9pbmZvKQpAQCAtMTE2MSw3ICYjNDM7MTE1OSw3IEBAIGljZV9saW5rX2V2ZW50KHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3BvcnRfaW5mbyAqcGksIGJvb2wgbGlua191cCwKIAkJCWljZV9zZXRfZGZsdF9taWIocGYpOwogCX0KIAlpY2VfdnNpX2xpbmtfZXZlbnQodnNpLCBsaW5rX3VwKTsKLQlpY2VfcHJpbnRfbGlua19tc2codnNpLCBsaW5rX3VwKTsKJiM0MzsJaWNlX3ByaW50X2xpbmtfbXNnKHZzaSwgbGlua191cCwgbGlua19zcGVlZCk7CiAKIAlpY2VfdmNfbm90aWZ5X2xpbmtfc3RhdGUocGYpOwogCkBAIC02NzQyLDcgJiM0Mzs2NzQwLDggQEAgc3RhdGljIGludCBpY2VfdXBfY29tcGxldGUoc3RydWN0IGljZV92c2kgKnZzaSkKIAkgICAgKHZzaS0mZ3Q7cG9ydF9pbmZvLSZndDtwaHkubGlua19pbmZvLmxpbmtfaW5mbyAmYW1wOyBJQ0VfQVFfTElOS19VUCkgJmFtcDsmYW1wOwogCSAgICAoKHZzaS0mZ3Q7bmV0ZGV2ICZhbXA7JmFtcDsgKHZzaS0mZ3Q7dHlwZSA9PSBJQ0VfVlNJX1BGIHx8CiAJCQkgICAgICB2c2ktJmd0O3R5cGUgPT0gSUNFX1ZTSV9TRikpKSkgewotCQlpY2VfcHJpbnRfbGlua19tc2codnNpLCB0cnVlKTsKJiM0MzsJCWljZV9wcmludF9saW5rX21zZyh2c2ksIHRydWUsCiYjNDM7CQkJCSAgIHZzaS0mZ3Q7cG9ydF9pbmZvLSZndDtwaHkubGlua19pbmZvLmxpbmtfc3BlZWQpOwogCQluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKHZzaS0mZ3Q7bmV0ZGV2KTsKIAkJbmV0aWZfY2Fycmllcl9vbih2c2ktJmd0O25ldGRldik7CiAJCWljZV9wdHBfbGlua19jaGFuZ2UocGYsIHRydWUpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxOTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDM2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNTYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSUNFIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHRvdWNoZXMgYGljZV9wcmludF9saW5rX21zZ2AgaW4gYGljZV9tYWluLmNgIGFuZCBgaWNlX2V0aHRvb2wuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW50cm9kdWNpbmcgYSBgbGlua19zcGVlZGAgcGFyYW1ldGVyIHRvIGBpY2VfcHJpbnRfbGlua19tc2dgIGFuZCB0aGVuIHRocmVhZGluZyBpdCB0aHJvdWdoIHRoZSB2YXJpb3VzIGNhbGxlcnM6IGBpY2Vfc2V0X2xpbmtfa3NldHRpbmdzYCwgYGljZV9saW5rX2V2ZW50YCwgYW5kIGBpY2VfdXBfY29tcGxldGVgLiAgTmF0dXJhbGx5LCB0aGUgZnVuY3Rpb24gbmFtZSBzdWdnZXN0cyBpdCYjMzk7cyBwcmltYXJpbHkgZm9yIHByaW50aW5nIG1lc3NhZ2VzLCBidXQgSSBhbHdheXMgd2FudCB0byBiZSBzdXJlLCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXQmIzM5O3MgKm9ubHkqIHByaW50aW5nIGEgbWVzc2FnZS4gWWVwLCBqdXN0IGEgbG9nZ2luZyBmdW5jdGlvbi4gRmluZS4KCk5vdywgaG9sZCBvbi4uLiBoZXJlJiMzOTtzIHNvbWV0aGluZyBlbHNlLiAgYGljZV9saW5rX2V2ZW50YCBoYXMgYSBtb3JlIHN1YnN0YW50aWFsIG1vZGlmaWNhdGlvbi4gIFRoZXkmIzM5O3ZlIGNoYW5nZWQgaG93IGBsaW5rX3VwYCBpcyBkZXRlcm1pbmVkLiAgUHJldmlvdXNseSwgaXQgbG9va2VkIGxpa2UgdGhpczoKCmBgYGMKCWlmIChwaHlfaW5mby0mZ3Q7bGlua19pbmZvLmxpbmtfaW5mbyAmYW1wOyBJQ0VfQVFfTElOS19VUCkKCQlsaW5rX3VwID0gdHJ1ZTsKYGBgCgpOb3csIGl0JiMzOTtzIGp1c3Q6CgpgYGBjCglsaW5rX3VwID0gcGh5X2luZm8tJmd0O2xpbmtfaW5mby5saW5rX2luZm8gJmFtcDsgSUNFX0FRX0xJTktfVVA7CmBgYAoKUmlnaHQsIHRoZSBrZXkgZGlmZmVyZW5jZS4gVGhlIG9yaWdpbmFsIGNvZGUgb25seSBzZXQgYGxpbmtfdXBgIHRvIGB0cnVlYCBpZiB0aGUgY29uZGl0aW9uIHdhcyBtZXQ7IG90aGVyd2lzZSwgaXQgd291bGQga2VlcCBpdHMgb3JpZ2luYWwgdmFsdWUuIE5vdywgYGxpbmtfdXBgIGlzICphbHdheXMqIGFzc2lnbmVkIHRoZSByZXN1bHQgb2YgdGhhdCBiaXR3aXNlIEFORCBvcGVyYXRpb24uICBTbywgaWYgYElDRV9BUV9MSU5LX1VQYCBpc24mIzM5O3Qgc2V0LCBgbGlua191cGAgd2lsbCBiZSBleHBsaWNpdGx5IHNldCB0byBgZmFsc2VgLiBUaGF0IGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBhbmQgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnMgaGVyZS4gSSBzaG91bGQgcHJvYmFibHkgZGlnIGludG8gdGhlIGxvZ2ljIGFuZCB0ZXN0IHRoaXMuCgpMZXQmIzM5O3MgZ28gYmFjayBhbmQgZXhhbWluZSBgaWNlX2xpbmtfZXZlbnRgIGluIGBpY2VfbWFpbi5jYCBtb3JlIGNsb3NlbHkgYW5kIHRoaW5rIGFib3V0IHRoZSBwb3NzaWJsZSBjb25zZXF1ZW5jZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWNlX2xpbmtfZXZlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz0xMDg4PXN0YXRpYyB2b2lkIGljZV9jaGVja19saW5rX2NmZ19lcnIoc3RydWN0IGljZV9wZiAqcGYsIHU4IGxpbmtfY2ZnX2Vycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy0xMDk0LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6MTA5NTogKiBpY2VfbGlua19ldmVudCAtIHByb2Nlc3MgdGhlIGxpbmsgZXZlbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTEwOTYtICogQHBmOiBQRiB0aGF0IHRoZSBsaW5rIGV2ZW50IGlzIGFzc29jaWF0ZWQgd2l0aFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTExMDM9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6MTEwNDppY2VfbGlua19ldmVudChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wb3J0X2luZm8gKnBpLCBib29sIGxpbmtfdXAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy0xMTA1LVx0ICAgICAgIHUxNiBsaW5rX3NwZWVkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTEyMzM9aWNlX2hhbmRsZV9saW5rX2V2ZW50KHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3JxX2V2ZW50X2luZm8gKmV2ZW50KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTEyNDMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzoxMjQ0Olx0c3RhdHVzID0gaWNlX2xpbmtfZXZlbnQocGYsIHBvcnRfaW5mbyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTEyNDUtXHRcdFx0XHQhIShsaW5rX2RhdGEtXHUwMDNlbGlua19pbmZvIFx1MDAyNiBJQ0VfQVFfTElOS19VUCksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg4NgoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIGBpY2VfbGlua19ldmVudGAgUmFiYml0IEhvbGUqKgoKQWxyaWdodCwgaGFuZyBvbiBhIHNlY29uZC4gSSYjMzk7dmUgZ290IHRvIHJlZnJlc2ggbXkgbWVtb3J5LiBUaGF0IGBpY2VfbGlua19ldmVudGAgZnVuY3Rpb27igKYgdGhhdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgZGVmaW5lZCByaWdodCBpbiBgaWNlX21haW4uY2AsIGlzbiYjMzk7dCBpdD8gT2theSwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgaG93IHRoaXMgdGhpbmcgaXMgYWN0dWFsbHkgd29ya2luZywgZXNwZWNpYWxseSBob3cgaXQgaGFuZGxlcyBgbGlua191cGAuIFJpZ2h0LCB0aGUgYmVzdCB3YXkgdG8gZG8gdGhpcyBpcyBqdXN0IGRpdmUgcmlnaHQgaW4gYW5kIHJlYWQgdGhlIGNvZGUgZm9yIGBpY2VfbGlua19ldmVudGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgaGVyZSwgYmVjYXVzZSBrbm93aW5nIGhvdyBgbGlua191cGAgaXMgdXNlZCB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgYmVoYXZpb3IgSSYjMzk7bSBleHBlY3RpbmcuIFRpbWUgdG8gZ2V0IHRvIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTAzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTAzOlx0c3RhdGljIGludFxuMTEwNDpcdGljZV9saW5rX2V2ZW50KHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3BvcnRfaW5mbyAqcGksIGJvb2wgbGlua191cCxcbjExMDU6XHRcdCAgICAgICB1MTYgbGlua19zcGVlZClcbjExMDY6XHR7XG4xMTA3Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpY2VfcGZfdG9fZGV2KHBmKTtcbjExMDg6XHRcdHN0cnVjdCBpY2VfcGh5X2luZm8gKnBoeV9pbmZvO1xuMTEwOTpcdFx0c3RydWN0IGljZV92c2kgKnZzaTtcbjExMTA6XHRcdHUxNiBvbGRfbGlua19zcGVlZDtcbjExMTE6XHRcdGJvb2wgb2xkX2xpbms7XG4xMTEyOlx0XHRpbnQgc3RhdHVzO1xuMTExMzpcdFxuMTExNDpcdFx0cGh5X2luZm8gPSBcdTAwMjZwaS1cdTAwM2VwaHk7XG4xMTE1Olx0XHRwaHlfaW5mby1cdTAwM2VsaW5rX2luZm9fb2xkID0gcGh5X2luZm8tXHUwMDNlbGlua19pbmZvO1xuMTExNjpcdFxuMTExNzpcdFx0b2xkX2xpbmsgPSAhIShwaHlfaW5mby1cdTAwM2VsaW5rX2luZm9fb2xkLmxpbmtfaW5mbyBcdTAwMjYgSUNFX0FRX0xJTktfVVApO1xuMTExODpcdFx0b2xkX2xpbmtfc3BlZWQgPSBwaHlfaW5mby1cdTAwM2VsaW5rX2luZm9fb2xkLmxpbmtfc3BlZWQ7XG4xMTE5Olx0XG4xMTIwOlx0XHQvKiB1cGRhdGUgdGhlIGxpbmsgaW5mbyBzdHJ1Y3R1cmVzIGFuZCByZS1lbmFibGUgbGluayBldmVudHMsXG4xMTIxOlx0XHQgKiBkb24mIzM5O3QgYmFpbCBvbiBmYWlsdXJlIGR1ZSB0byBvdGhlciBib29rIGtlZXBpbmcgbmVlZGVkXG4xMTIyOlx0XHQgKi9cbjExMjM6XHRcdHN0YXR1cyA9IGljZV91cGRhdGVfbGlua19pbmZvKHBpKTtcbjExMjQ6XHRcdGlmIChzdGF0dXMpXG4xMTI1Olx0XHRcdGRldl9kYmcoZGV2LCBcJiMzNDtGYWlsZWQgdG8gdXBkYXRlIGxpbmsgc3RhdHVzIG9uIHBvcnQgJWQsIGVyciAlZCBhcV9lcnIgJXNcXG5cJiMzNDssXG4xMTI2Olx0XHRcdFx0cGktXHUwMDNlbHBvcnQsIHN0YXR1cyxcbjExMjc6XHRcdFx0XHRsaWJpZV9hcV9zdHIocGktXHUwMDNlaHctXHUwMDNlYWRtaW5xLnNxX2xhc3Rfc3RhdHVzKSk7XG4xMTI4Olx0XG4xMTI5Olx0XHRpY2VfY2hlY2tfbGlua19jZmdfZXJyKHBmLCBwaS1cdTAwM2VwaHkubGlua19pbmZvLmxpbmtfY2ZnX2Vycik7XG4xMTMwOlx0XG4xMTMxOlx0XHRsaW5rX3VwID0gcGh5X2luZm8tXHUwMDNlbGlua19pbmZvLmxpbmtfaW5mbyBcdTAwMjYgSUNFX0FRX0xJTktfVVA7XG4xMTMyOlx0XHRsaW5rX3NwZWVkID0gcGh5X2luZm8tXHUwMDNlbGlua19pbmZvLmxpbmtfc3BlZWQ7XG4xMTMzOlx0XG4xMTM0Olx0XHR2c2kgPSBpY2VfZ2V0X21haW5fdnNpKHBmKTtcbjExMzU6XHRcdGlmICghdnNpIHx8ICF2c2ktXHUwMDNlcG9ydF9pbmZvKVxuMTEzNjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjExMzc6XHRcbjExMzg6XHRcdC8qIHR1cm4gb2ZmIFBIWSBpZiBtZWRpYSB3YXMgcmVtb3ZlZCAqL1xuMTEzOTpcdFx0aWYgKCF0ZXN0X2JpdChJQ0VfRkxBR19OT19NRURJQSwgcGYtXHUwMDNlZmxhZ3MpIFx1MDAyNlx1MDAyNlxuMTE0MDpcdFx0ICAgICEocGktXHUwMDNlcGh5LmxpbmtfaW5mby5saW5rX2luZm8gXHUwMDI2IElDRV9BUV9NRURJQV9BVkFJTEFCTEUpKSB7XG4xMTQxOlx0XHRcdHNldF9iaXQoSUNFX0ZMQUdfTk9fTUVESUEsIHBmLVx1MDAzZWZsYWdzKTtcbjExNDI6XHRcdFx0aWNlX3NldF9saW5rKHZzaSwgZmFsc2UpO1xuMTE0MzpcdFx0fVxuMTE0NDpcdFxuMTE0NTpcdFx0LyogaWYgdGhlIG9sZCBsaW5rIHVwL2Rvd24gYW5kIHNwZWVkIGlzIHRoZSBzYW1lIGFzIHRoZSBuZXcgKi9cbjExNDY6XHRcdGlmIChsaW5rX3VwID09IG9sZF9saW5rIFx1MDAyNlx1MDAyNiBsaW5rX3NwZWVkID09IG9sZF9saW5rX3NwZWVkKVxuMTE0NzpcdFx0XHRyZXR1cm4gMDtcbjExNDg6XHRcbjExNDk6XHRcdGlmICghbGlua191cCBcdTAwMjZcdTAwMjYgb2xkX2xpbmspXG4xMTUwOlx0XHRcdHBmLVx1MDAzZWxpbmtfZG93bl9ldmVudHMmIzQzOyYjNDM7O1xuMTE1MTpcdFxuMTE1MjpcdFx0aWNlX3B0cF9saW5rX2NoYW5nZShwZiwgbGlua191cCk7XG4xMTUzOlx0XG4xMTU0Olx0XHRpZiAoaWNlX2lzX2RjYl9hY3RpdmUocGYpKSB7XG4xMTU1Olx0XHRcdGlmICh0ZXN0X2JpdChJQ0VfRkxBR19EQ0JfRU5BLCBwZi1cdTAwM2VmbGFncykpXG4xMTU2Olx0XHRcdFx0aWNlX2RjYl9yZWJ1aWxkKHBmKTtcbjExNTc6XHRcdH0gZWxzZSB7XG4xMTU4Olx0XHRcdGlmIChsaW5rX3VwKVxuMTE1OTpcdFx0XHRcdGljZV9zZXRfZGZsdF9taWIocGYpO1xuMTE2MDpcdFx0fVxuMTE2MTpcdFx0aWNlX3ZzaV9saW5rX2V2ZW50KHZzaSwgbGlua191cCk7XG4xMTYyOlx0XHRpY2VfcHJpbnRfbGlua19tc2codnNpLCBsaW5rX3VwLCBsaW5rX3NwZWVkKTtcbjExNjM6XHRcbjExNjQ6XHRcdGljZV92Y19ub3RpZnlfbGlua19zdGF0ZShwZik7XG4xMTY1Olx0XG4xMTY2Olx0XHRyZXR1cm4gMDtcbjExNjc6XHR9XG4xMTY4Olx0XG4xMTY5Olx0LyoqXG4xMTcwOlx0ICogaWNlX3dhdGNoZG9nX3N1YnRhc2sgLSBwZXJpb2RpYyB0YXNrcyBub3QgdXNpbmcgZXZlbnQgZHJpdmVuIHNjaGVkdWxpbmdcbjExNzE6XHQgKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG4xMTcyOlx0ICovXG4xMTczOlx0c3RhdGljIHZvaWQgaWNlX3dhdGNoZG9nX3N1YnRhc2soc3RydWN0IGljZV9wZiAqcGYpXG4xMTc0Olx0e1xuMTE3NTpcdFx0aW50IGk7XG4xMTc2Olx0XG4xMTc3Olx0XHQvKiBpZiBpbnRlcmZhY2UgaXMgZG93biBkbyBub3RoaW5nICovXG4xMTc4Olx0XHRpZiAodGVzdF9iaXQoSUNFX0RPV04sIHBmLVx1MDAzZXN0YXRlKSB8fFxuMTE3OTpcdFx0ICAgIHRlc3RfYml0KElDRV9DRkdfQlVTWSwgcGYtXHUwMDNlc3RhdGUpKVxuMTE4MDpcdFx0XHRyZXR1cm47XG4xMTgxOlx0XG4xMTgyOlx0XHQvKiBtYWtlIHN1cmUgd2UgZG9uJiMzOTt0IGRvIHRoZXNlIHRoaW5ncyB0b28gb2Z0ZW4gKi9cbjExODM6XHRcdGlmICh0aW1lX2JlZm9yZShqaWZmaWVzLFxuMTE4NDpcdFx0XHRcdHBmLVx1MDAzZXNlcnZfdG1yX3ByZXYgJiM0MzsgcGYtXHUwMDNlc2Vydl90bXJfcGVyaW9kKSlcbjExODU6XHRcdFx0cmV0dXJuO1xuMTE4NjpcdFxuMTE4NzpcdFx0cGYtXHUwMDNlc2Vydl90bXJfcHJldiA9IGppZmZpZXM7XG4xMTg4Olx0XG4xMTg5Olx0XHQvKiBVcGRhdGUgdGhlIHN0YXRzIGZvciBhY3RpdmUgbmV0ZGV2cyBzbyB0aGUgbmV0d29yayBzdGFja1xuMTE5MDpcdFx0ICogY2FuIGxvb2sgYXQgdXBkYXRlZCBudW1iZXJzIHdoZW5ldmVyIGl0IGNhcmVzIHRvXG4xMTkxOlx0XHQgKi9cbjExOTI6XHRcdGljZV91cGRhdGVfcGZfc3RhdHMocGYpO1xuMTE5MzpcdFx0aWNlX2Zvcl9lYWNoX3ZzaShwZiwgaSlcbjExOTQ6XHRcdFx0aWYgKHBmLVx1MDAzZXZzaVtpXSBcdTAwMjZcdTAwMjYgcGYtXHUwMDNldnNpW2ldLVx1MDAzZW5ldGRldilcbjExOTU6XHRcdFx0XHRpY2VfdXBkYXRlX3ZzaV9zdGF0cyhwZi1cdTAwM2V2c2lbaV0pO1xuMTE5NjpcdH1cbjExOTc6XHRcbjExOTg6XHQvKipcbjExOTk6XHQgKiBpY2VfaW5pdF9saW5rX2V2ZW50cyAtIGVuYWJsZS9pbml0aWFsaXplIGxpbmsgZXZlbnRzXG4xMjAwOlx0ICogQHBpOiBwb2ludGVyIHRvIHRoZSBwb3J0X2luZm8gaW5zdGFuY2VcbjEyMDE6XHQgKlxuMTIwMjpcdCAqIFJldHVybnMgLUVJTyBvbiBmYWlsdXJlLCAwIG9uIHN1Y2Nlc3NcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxOTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzU5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTGluayBTdGF0ZSBDaGFuZ2UgaW4gdGhlIGBpY2VgIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIGBpY2VfbGlua19ldmVudGAgZnVuY3Rpb24sIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgY2hhbmdlLiBCZWZvcmUsIHRoZSBjb2RlIHNlZW1lZCB0byBjb25kaXRpb25hbGx5IHNldCBgbGlua191cGAgYmFzZWQgb24gYHBoeV9pbmZvLSZndDtsaW5rX2luZm8ubGlua19pbmZvICZhbXA7IElDRV9BUV9MSU5LX1VQYC4gU3BlY2lmaWNhbGx5LCBgbGlua191cGAgd2FzIHBhc3NlZCBpbiwgYW5kIHRoZW4gcG90ZW50aWFsbHkgbW9kaWZpZWQuIE5vdywgaXQgc2VlbXMgdGhhdCBgbGlua191cGAgaXMgdW5jb25kaXRpb25hbGx5IGFzc2lnbmVkIHRoZSByZXN1bHQgb2YgdGhhdCBjaGVjaywgYWxvbmcgd2l0aCB0aGUgYGxpbmtfc3BlZWRgLiBJIG5lZWQgdG8gdGhpbmsgdGhpcyB0aHJvdWdoIGNhcmVmdWxseSBiZWNhdXNlIGNoYW5nZXMgdG8gbGluayBzdGF0ZSBoYW5kbGluZyBhcmUgYWx3YXlzIGNyaXRpY2FsLgoKSSBuZWVkIHRvIHF1aWNrbHkgcmVtZW1iZXIgd2hlcmUgdGhhdCBpbml0aWFsIGBsaW5rX3VwYCBjb21lcyBmcm9tLiBBaCwgcmlnaHQsIGluIGBpY2VfaGFuZGxlX2xpbmtfZXZlbnRgLCBpdCYjMzk7cyBkZXJpdmVkIGZyb20gYGxpbmtfZGF0YS0mZ3Q7bGlua19pbmZvICZhbXA7IElDRV9BUV9MSU5LX1VQYC4gU28sIHdlIHVwZGF0ZSBgcGktJmd0O3BoeS5saW5rX2luZm9gIHZpYSBgaWNlX3VwZGF0ZV9saW5rX2luZm8ocGkpYC4gVGhlIHByZS1wYXRjaCBsb2dpYyB3YXMgZXNzZW50aWFsbHkgYSByYWNlLiBJZiB0aGUgbGluayB3ZW50IGRvd24gYmV0d2VlbiB0aGUgaW5pdGlhbCBldmVudCAoYGxpbmtfZGF0YWApIGFuZCB0aGUgdXBkYXRlIG9mIGBwaHlfaW5mb2AgdmlhIGBpY2VfdXBkYXRlX2xpbmtfaW5mb2AsIHRoZW4gd2UgY291bGQgc3RpbGwgcmVwb3J0IHRoZSBsaW5rIGFzIHVwLiBBZnRlciB0aGUgcGF0Y2gsIHRoYXQgd2luZG93IGlzIGNsb3NlZCwgYXMgdGhlIGNoZWNrIHdpbGwgcmVmbGVjdCB0aGUgY3VycmVudCBzdGF0ZSBhcyB1cGRhdGVkIGJ5IGBpY2VfdXBkYXRlX2xpbmtfaW5mb2AuCgpUaGlzIGlzIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBpbXBhY3RmdWwgZnVuY3Rpb25hbCBjaGFuZ2UuIE5vdywgYSB0cmFuc2llbnQgbGluayBkb3duIHdpbGwgYmUgY29ycmVjdGx5IHJlZmxlY3RlZC4gUHJldmlvdXNseSBpdCBtaWdodCBoYXZlIGJlZW4gaW5jb3JyZWN0bHkgcmVwb3J0ZWQgYXMgdXAuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IGlzIHRoaXMgd29ydGggZnV6emluZz8gVGhlIGBpY2VgIGRyaXZlciwgd2hpY2ggaXMgZm9yIEludGVsJiMzOTtzIEU4MDAgc2VyaWVzIEV0aGVybmV0IENvbm5lY3Rpb24sIGlzIGEgcGh5c2ljYWwgUENJZSBuZXR3b3JrIGNhcmQgZHJpdmVyLiBNeSBwcmltYXJ5IHdvcnJ5IGlzIHRoYXQgdGhpcyBpc24mIzM5O3QgZW11bGF0ZWQgYnkgUUVNVS4gSG93ZXZlciwgdGhpcyBkcml2ZXIgaXMgZm9yIGEgdmVuZG9yLXNwZWNpZmljIE5JQywgYW5kIGl0IHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFNvLCBiYXNlZCBvbiB0aGF0LCB0aGlzIGNoYW5nZSBpcyBub3Qgd29ydGggZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxOTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2lfcmVnaXN0ZXJfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01ODY2PXN0YXRpYyBpbnQgX19pbml0IGljZV9tb2R1bGVfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTU4ODgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1ODg5Olx0c3RhdHVzID0gcGNpX3JlZ2lzdGVyX2RyaXZlcihcdTAwMjZpY2VfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTU4OTAtXHRpZiAoc3RhdHVzKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODIzNgoJCQkJCQkJb3V0cHV0OiAxMDAKCQkJCQkJCXRob3VnaHRzOiAyNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUENJIERyaXZlciBDb2RlKioKCk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIGRyaXZlciBmb3IgYSBQQ0kgZGV2aWNlIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBJbnRlbCBFODAwIHNlcmllcywgb3IgYGljZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25zaWRlciB3aGV0aGVyIGl0JiMzOTtzIGVtdWxhdGVkIGluIGEgdHlwaWNhbCB2aXJ0dWFsaXphdGlvbiBlbnZpcm9ubWVudCBsaWtlIFFFTVUuIE5vcGUuIFFFTVUgZG9lc24mIzM5O3Qgc3VwcG9ydCB0aGUgYGljZWAgaGFyZHdhcmUuIEl0JiMzOTtzIGdvdCB0aGUgdXN1YWwgc3VzcGVjdHMgbGlrZSBgZTEwMDBgLCBgZTEwMDBlYCwgYW5kIGEgZmV3IG90aGVycywgYnV0IG5vIGBpY2VgLgoKVGhlcmVmb3JlLCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIFFFTVUmIzM5O3MgZW11bGF0aW9uIGNhcGFiaWxpdGllcywgdGhpcyBzcGVjaWZpYyBjb2RlIHBhdGggaW4gdGhlIGBpY2VgIGRyaXZlciBpcyB1bnJlYWNoYWJsZSB3aXRoaW4gdmlydHVhbGl6ZWQgc2V0dXBzIHN1Y2ggYXMgR29vZ2xlIENvbXB1dGUgRW5naW5lIG9yIHVzaW5nIFFFTVUuCgpMZXQgbWUganVzdCBzb2xpZGlmeSB0aGF0IHJlYXNvbmluZy4gVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgdGhlIGBpY2VgIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGNhcmQgZHJpdmVyLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGludGVyZmFjZSB3aXRoIHBoeXNpY2FsIGhhcmR3YXJlLiBRRU1VIGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhlIGBpY2VgIGNoaXAuIENvbnNlcXVlbnRseSwgYW55IGNvZGUgY2hhbmdlcyByZWxhdGluZyB0byB0aGlzIGRldmljZSBhcmUgbm90IHJlYWNoYWJsZSB3aXRoaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50LiBGdXJ0aGVybW9yZSwgbG9va2luZyBhdCB0aGUgY29kZSBjaGFuZ2VzLCBpdOKAmXMgbW9zdGx5IGFib3V0IHByaW50aW5nIHRoZSBsaW5rIHNwZWVkIGluZm9ybWF0aW9uIGluIGBpY2VfcHJpbnRfbGlua19tc2dgIGFuZCBhIG1pbm9yIGxvZ2ljIGNoYW5nZSBpbiBgaWNlX2xpbmtfZXZlbnRgIGFuZCBib3RoIG9mIHRoZXNlIGFyZSBoYXJkd2FyZS1kZXBlbmRlbnQgZmVhdHVyZXMuCgpTbywgZ2l2ZW4gdGhpcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAgZm9yIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEU4MDAgc2VyaWVzIEV0aGVybmV0IGRyaXZlciAoaWNlKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGNhcmQgZHJpdmVyLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiBBZGRpdGlvbmFsbHksIHRoZSBjaGFuZ2VzIHByaW1hcmlseSBhZmZlY3QgbGluayBzdGF0dXMgbG9nZ2luZyBhbmQgaGFyZHdhcmUtZGVwZW5kZW50IGxpbmsgZXZlbnQgaGFuZGxpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgRTgwMCBzZXJpZXMgRXRoZXJuZXQgZHJpdmVyIChpY2UpLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgY2FyZCBkcml2ZXIuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuIEFkZGl0aW9uYWxseSwgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFmZmVjdCBsaW5rIHN0YXR1cyBsb2dnaW5nIGFuZCBoYXJkd2FyZS1kZXBlbmRlbnQgbGluayBldmVudCBoYW5kbGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxOTozMzoyMS45ODYyMTYzMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyODg1Mzk1OTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgRTgwMCBzZXJpZXMgRXRoZXJuZXQgZHJpdmVyIChpY2UpLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgY2FyZCBkcml2ZXIuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuIEFkZGl0aW9uYWxseSwgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFmZmVjdCBsaW5rIHN0YXR1cyBsb2dnaW5nIGFuZCBoYXJkd2FyZS1kZXBlbmRlbnQgbGluayBldmVudCBoYW5kbGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjMzOjIxLjk4NjIyMjQ0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjgyODMzNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0NTAwMjQyYjVhNjRmNzEyYzYyODVmZjNmZjI0YmFhOWZiZmMyODI2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDYgMTk6MzM6MjEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXFxuaW5kZXggZmM5MWI2NjY1ZjkwNS4uOWRhZDE2MWJkOTdjNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmhcXG5AQCAtMTAwOSw3ICsxMDA5LDcgQEAgaW50IGljZV9nZXRfcnNzX2tleShzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1OCAqc2VlZCk7XFxuIGludCBpY2Vfc2V0X3Jzc19oZnVuYyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1OCBoZnVuYyk7XFxuIHZvaWQgaWNlX2ZpbGxfcnNzX2x1dCh1OCAqbHV0LCB1MTYgcnNzX3RhYmxlX3NpemUsIHUxNiByc3Nfc2l6ZSk7XFxuIGludCBpY2Vfc2NoZWR1bGVfcmVzZXQoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX3Jlc2V0X3JlcSByZXNldCk7XFxuLXZvaWQgaWNlX3ByaW50X2xpbmtfbXNnKHN0cnVjdCBpY2VfdnNpICp2c2ksIGJvb2wgaXN1cCk7XFxuK3ZvaWQgaWNlX3ByaW50X2xpbmtfbXNnKHN0cnVjdCBpY2VfdnNpICp2c2ksIGJvb2wgaXN1cCwgdTE2IGxpbmtfc3BlZWQpO1xcbiBpbnQgaWNlX3BsdWdfYXV4X2RldihzdHJ1Y3QgaWNlX3BmICpwZik7XFxuIHZvaWQgaWNlX3VucGx1Z19hdXhfZGV2KHN0cnVjdCBpY2VfcGYgKnBmKTtcXG4gdm9pZCBpY2VfcmRtYV9maW5hbGl6ZV9zZXR1cChzdHJ1Y3QgaWNlX3BmICpwZik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmNcXG5pbmRleCA3ZWIzODBiZTdlZDI3Li45NGFiMjFmMzJjZmQ5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmNcXG5AQCAtMjc4NSw3ICsyNzg1LDcgQEAgaWNlX3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRcXHQvKiBUZWxsIHRoZSBPUyBsaW5rIGlzIGdvaW5nIGRvd24sIHRoZSBsaW5rIHdpbGwgZ29cXG4gXFx0XFx0ICogYmFjayB1cCB3aGVuIGZ3IHNheXMgaXQgaXMgcmVhZHkgYXN5bmNocm9ub3VzbHlcXG4gXFx0XFx0ICovXFxuLVxcdFxcdGljZV9wcmludF9saW5rX21zZyhucC1cXHUwMDNldnNpLCBmYWxzZSk7XFxuK1xcdFxcdGljZV9wcmludF9saW5rX21zZyhucC1cXHUwMDNldnNpLCBmYWxzZSwgMCk7XFxuIFxcdFxcdG5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7XFxuIFxcdFxcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcXG5pbmRleCBkODg4MzU0ODJkM2FhLi45NzRmMjdmZmViMzk4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcXG5AQCAtNzcyLDggKzc3Miw5IEBAIHN0YXRpYyB2b2lkIGljZV9wcmludF90b3BvX2NvbmZsaWN0KHN0cnVjdCBpY2VfdnNpICp2c2kpXFxuICAqIGljZV9wcmludF9saW5rX21zZyAtIHByaW50IGxpbmsgdXAgb3IgZG93biBtZXNzYWdlXFxuICAqIEB2c2k6IHRoZSBWU0kgd2hvc2UgbGluayBzdGF0dXMgaXMgYmVpbmcgcXVlcmllZFxcbiAgKiBAaXN1cDogYm9vbGVhbiBmb3IgaWYgdGhlIGxpbmsgaXMgbm93IHVwIG9yIGRvd25cXG4rICogQGxpbmtfc3BlZWQ6IGN1cnJlbnQgbGluayBzcGVlZCB2YWx1ZSB0byBkaXNwbGF5XFxuICAqL1xcbi12b2lkIGljZV9wcmludF9saW5rX21zZyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCBib29sIGlzdXApXFxuK3ZvaWQgaWNlX3ByaW50X2xpbmtfbXNnKHN0cnVjdCBpY2VfdnNpICp2c2ksIGJvb2wgaXN1cCwgdTE2IGxpbmtfc3BlZWQpXFxuIHtcXG4gXFx0c3RydWN0IGljZV9hcWNfZ2V0X3BoeV9jYXBzX2RhdGEgKmNhcHM7XFxuIFxcdGNvbnN0IGNoYXIgKmFuX2FkdmVydGlzZWQ7XFxuQEAgLTc5Nyw3ICs3OTgsNyBAQCB2b2lkIGljZV9wcmludF9saW5rX21zZyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCBib29sIGlzdXApXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4tXFx0c3dpdGNoICh2c2ktXFx1MDAzZXBvcnRfaW5mby1cXHUwMDNlcGh5LmxpbmtfaW5mby5saW5rX3NwZWVkKSB7XFxuK1xcdHN3aXRjaCAobGlua19zcGVlZCkge1xcbiBcXHRjYXNlIElDRV9BUV9MSU5LX1NQRUVEXzIwMEdCOlxcbiBcXHRcXHRzcGVlZCA9IFxcXCIyMDAgR1xcXCI7XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC0xMTI3LDExICsxMTI4LDggQEAgaWNlX2xpbmtfZXZlbnQoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcG9ydF9pbmZvICpwaSwgYm9vbCBsaW5rX3VwLFxcbiBcXG4gXFx0aWNlX2NoZWNrX2xpbmtfY2ZnX2VycihwZiwgcGktXFx1MDAzZXBoeS5saW5rX2luZm8ubGlua19jZmdfZXJyKTtcXG4gXFxuLVxcdC8qIENoZWNrIGlmIHRoZSBsaW5rIHN0YXRlIGlzIHVwIGFmdGVyIHVwZGF0aW5nIGxpbmsgaW5mbywgYW5kIHRyZWF0XFxuLVxcdCAqIHRoaXMgZXZlbnQgYXMgYW4gVVAgZXZlbnQgc2luY2UgdGhlIGxpbmsgaXMgYWN0dWFsbHkgVVAgbm93Llxcbi1cXHQgKi9cXG4tXFx0aWYgKHBoeV9pbmZvLVxcdTAwM2VsaW5rX2luZm8ubGlua19pbmZvIFxcdTAwMjYgSUNFX0FRX0xJTktfVVApXFxuLVxcdFxcdGxpbmtfdXAgPSB0cnVlO1xcbitcXHRsaW5rX3VwID0gcGh5X2luZm8tXFx1MDAzZWxpbmtfaW5mby5saW5rX2luZm8gXFx1MDAyNiBJQ0VfQVFfTElOS19VUDtcXG4rXFx0bGlua19zcGVlZCA9IHBoeV9pbmZvLVxcdTAwM2VsaW5rX2luZm8ubGlua19zcGVlZDtcXG4gXFxuIFxcdHZzaSA9IGljZV9nZXRfbWFpbl92c2kocGYpO1xcbiBcXHRpZiAoIXZzaSB8fCAhdnNpLVxcdTAwM2Vwb3J0X2luZm8pXFxuQEAgLTExNjEsNyArMTE1OSw3IEBAIGljZV9saW5rX2V2ZW50KHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3BvcnRfaW5mbyAqcGksIGJvb2wgbGlua191cCxcXG4gXFx0XFx0XFx0aWNlX3NldF9kZmx0X21pYihwZik7XFxuIFxcdH1cXG4gXFx0aWNlX3ZzaV9saW5rX2V2ZW50KHZzaSwgbGlua191cCk7XFxuLVxcdGljZV9wcmludF9saW5rX21zZyh2c2ksIGxpbmtfdXApO1xcbitcXHRpY2VfcHJpbnRfbGlua19tc2codnNpLCBsaW5rX3VwLCBsaW5rX3NwZWVkKTtcXG4gXFxuIFxcdGljZV92Y19ub3RpZnlfbGlua19zdGF0ZShwZik7XFxuIFxcbkBAIC02NzQyLDcgKzY3NDAsOCBAQCBzdGF0aWMgaW50IGljZV91cF9jb21wbGV0ZShzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxcbiBcXHQgICAgKHZzaS1cXHUwMDNlcG9ydF9pbmZvLVxcdTAwM2VwaHkubGlua19pbmZvLmxpbmtfaW5mbyBcXHUwMDI2IElDRV9BUV9MSU5LX1VQKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgKCh2c2ktXFx1MDAzZW5ldGRldiBcXHUwMDI2XFx1MDAyNiAodnNpLVxcdTAwM2V0eXBlID09IElDRV9WU0lfUEYgfHxcXG4gXFx0XFx0XFx0ICAgICAgdnNpLVxcdTAwM2V0eXBlID09IElDRV9WU0lfU0YpKSkpIHtcXG4tXFx0XFx0aWNlX3ByaW50X2xpbmtfbXNnKHZzaSwgdHJ1ZSk7XFxuK1xcdFxcdGljZV9wcmludF9saW5rX21zZyh2c2ksIHRydWUsXFxuK1xcdFxcdFxcdFxcdCAgIHZzaS1cXHUwMDNlcG9ydF9pbmZvLVxcdTAwM2VwaHkubGlua19pbmZvLmxpbmtfc3BlZWQpO1xcbiBcXHRcXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKHZzaS1cXHUwMDNlbmV0ZGV2KTtcXG4gXFx0XFx0bmV0aWZfY2Fycmllcl9vbih2c2ktXFx1MDAzZW5ldGRldik7XFxuIFxcdFxcdGljZV9wdHBfbGlua19jaGFuZ2UocGYsIHRydWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxOTozMzoyMi40MTUyMzMyMThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0MjQ1NjM3NDAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEU4MDAgc2VyaWVzIEV0aGVybmV0IGRyaXZlciAoaWNlKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGNhcmQgZHJpdmVyLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiBBZGRpdGlvbmFsbHksIHRoZSBjaGFuZ2VzIHByaW1hcmlseSBhZmZlY3QgbGluayBzdGF0dXMgbG9nZ2luZyBhbmQgaGFyZHdhcmUtZGVwZW5kZW50IGxpbmsgZXZlbnQgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NTAwMjQyYjVhNjRmNzEyYzYyODVmZjNmZjI0YmFhOWZiZmMyODI2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAxOTozMzoyMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxuaW5kZXggZmM5MWI2NjY1ZjkwNS4uOWRhZDE2MWJkOTdjNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXG5AQCAtMTAwOSw3ICsxMDA5LDcgQEAgaW50IGljZV9nZXRfcnNzX2tleShzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1OCAqc2VlZCk7XG4gaW50IGljZV9zZXRfcnNzX2hmdW5jKHN0cnVjdCBpY2VfdnNpICp2c2ksIHU4IGhmdW5jKTtcbiB2b2lkIGljZV9maWxsX3Jzc19sdXQodTggKmx1dCwgdTE2IHJzc190YWJsZV9zaXplLCB1MTYgcnNzX3NpemUpO1xuIGludCBpY2Vfc2NoZWR1bGVfcmVzZXQoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX3Jlc2V0X3JlcSByZXNldCk7XG4tdm9pZCBpY2VfcHJpbnRfbGlua19tc2coc3RydWN0IGljZV92c2kgKnZzaSwgYm9vbCBpc3VwKTtcbit2b2lkIGljZV9wcmludF9saW5rX21zZyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCBib29sIGlzdXAsIHUxNiBsaW5rX3NwZWVkKTtcbiBpbnQgaWNlX3BsdWdfYXV4X2RldihzdHJ1Y3QgaWNlX3BmICpwZik7XG4gdm9pZCBpY2VfdW5wbHVnX2F1eF9kZXYoc3RydWN0IGljZV9wZiAqcGYpO1xuIHZvaWQgaWNlX3JkbWFfZmluYWxpemVfc2V0dXAoc3RydWN0IGljZV9wZiAqcGYpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmNcbmluZGV4IDdlYjM4MGJlN2VkMjcuLjk0YWIyMWYzMmNmZDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmNcbkBAIC0yNzg1LDcgKzI3ODUsNyBAQCBpY2Vfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdC8qIFRlbGwgdGhlIE9TIGxpbmsgaXMgZ29pbmcgZG93biwgdGhlIGxpbmsgd2lsbCBnb1xuIFx0XHQgKiBiYWNrIHVwIHdoZW4gZncgc2F5cyBpdCBpcyByZWFkeSBhc3luY2hyb25vdXNseVxuIFx0XHQgKi9cbi1cdFx0aWNlX3ByaW50X2xpbmtfbXNnKG5wLVx1MDAzZXZzaSwgZmFsc2UpO1xuK1x0XHRpY2VfcHJpbnRfbGlua19tc2cobnAtXHUwMDNldnNpLCBmYWxzZSwgMCk7XG4gXHRcdG5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7XG4gXHRcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbmluZGV4IGQ4ODgzNTQ4MmQzYWEuLjk3NGYyN2ZmZWIzOTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbkBAIC03NzIsOCArNzcyLDkgQEAgc3RhdGljIHZvaWQgaWNlX3ByaW50X3RvcG9fY29uZmxpY3Qoc3RydWN0IGljZV92c2kgKnZzaSlcbiAgKiBpY2VfcHJpbnRfbGlua19tc2cgLSBwcmludCBsaW5rIHVwIG9yIGRvd24gbWVzc2FnZVxuICAqIEB2c2k6IHRoZSBWU0kgd2hvc2UgbGluayBzdGF0dXMgaXMgYmVpbmcgcXVlcmllZFxuICAqIEBpc3VwOiBib29sZWFuIGZvciBpZiB0aGUgbGluayBpcyBub3cgdXAgb3IgZG93blxuKyAqIEBsaW5rX3NwZWVkOiBjdXJyZW50IGxpbmsgc3BlZWQgdmFsdWUgdG8gZGlzcGxheVxuICAqL1xuLXZvaWQgaWNlX3ByaW50X2xpbmtfbXNnKHN0cnVjdCBpY2VfdnNpICp2c2ksIGJvb2wgaXN1cClcbit2b2lkIGljZV9wcmludF9saW5rX21zZyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCBib29sIGlzdXAsIHUxNiBsaW5rX3NwZWVkKVxuIHtcbiBcdHN0cnVjdCBpY2VfYXFjX2dldF9waHlfY2Fwc19kYXRhICpjYXBzO1xuIFx0Y29uc3QgY2hhciAqYW5fYWR2ZXJ0aXNlZDtcbkBAIC03OTcsNyArNzk4LDcgQEAgdm9pZCBpY2VfcHJpbnRfbGlua19tc2coc3RydWN0IGljZV92c2kgKnZzaSwgYm9vbCBpc3VwKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRzd2l0Y2ggKHZzaS1cdTAwM2Vwb3J0X2luZm8tXHUwMDNlcGh5LmxpbmtfaW5mby5saW5rX3NwZWVkKSB7XG4rXHRzd2l0Y2ggKGxpbmtfc3BlZWQpIHtcbiBcdGNhc2UgSUNFX0FRX0xJTktfU1BFRURfMjAwR0I6XG4gXHRcdHNwZWVkID0gXCIyMDAgR1wiO1xuIFx0XHRicmVhaztcbkBAIC0xMTI3LDExICsxMTI4LDggQEAgaWNlX2xpbmtfZXZlbnQoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcG9ydF9pbmZvICpwaSwgYm9vbCBsaW5rX3VwLFxuIFxuIFx0aWNlX2NoZWNrX2xpbmtfY2ZnX2VycihwZiwgcGktXHUwMDNlcGh5LmxpbmtfaW5mby5saW5rX2NmZ19lcnIpO1xuIFxuLVx0LyogQ2hlY2sgaWYgdGhlIGxpbmsgc3RhdGUgaXMgdXAgYWZ0ZXIgdXBkYXRpbmcgbGluayBpbmZvLCBhbmQgdHJlYXRcbi1cdCAqIHRoaXMgZXZlbnQgYXMgYW4gVVAgZXZlbnQgc2luY2UgdGhlIGxpbmsgaXMgYWN0dWFsbHkgVVAgbm93LlxuLVx0ICovXG4tXHRpZiAocGh5X2luZm8tXHUwMDNlbGlua19pbmZvLmxpbmtfaW5mbyBcdTAwMjYgSUNFX0FRX0xJTktfVVApXG4tXHRcdGxpbmtfdXAgPSB0cnVlO1xuK1x0bGlua191cCA9IHBoeV9pbmZvLVx1MDAzZWxpbmtfaW5mby5saW5rX2luZm8gXHUwMDI2IElDRV9BUV9MSU5LX1VQO1xuK1x0bGlua19zcGVlZCA9IHBoeV9pbmZvLVx1MDAzZWxpbmtfaW5mby5saW5rX3NwZWVkO1xuIFxuIFx0dnNpID0gaWNlX2dldF9tYWluX3ZzaShwZik7XG4gXHRpZiAoIXZzaSB8fCAhdnNpLVx1MDAzZXBvcnRfaW5mbylcbkBAIC0xMTYxLDcgKzExNTksNyBAQCBpY2VfbGlua19ldmVudChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wb3J0X2luZm8gKnBpLCBib29sIGxpbmtfdXAsXG4gXHRcdFx0aWNlX3NldF9kZmx0X21pYihwZik7XG4gXHR9XG4gXHRpY2VfdnNpX2xpbmtfZXZlbnQodnNpLCBsaW5rX3VwKTtcbi1cdGljZV9wcmludF9saW5rX21zZyh2c2ksIGxpbmtfdXApO1xuK1x0aWNlX3ByaW50X2xpbmtfbXNnKHZzaSwgbGlua191cCwgbGlua19zcGVlZCk7XG4gXG4gXHRpY2VfdmNfbm90aWZ5X2xpbmtfc3RhdGUocGYpO1xuIFxuQEAgLTY3NDIsNyArNjc0MCw4IEBAIHN0YXRpYyBpbnQgaWNlX3VwX2NvbXBsZXRlKHN0cnVjdCBpY2VfdnNpICp2c2kpXG4gXHQgICAgKHZzaS1cdTAwM2Vwb3J0X2luZm8tXHUwMDNlcGh5LmxpbmtfaW5mby5saW5rX2luZm8gXHUwMDI2IElDRV9BUV9MSU5LX1VQKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAoKHZzaS1cdTAwM2VuZXRkZXYgXHUwMDI2XHUwMDI2ICh2c2ktXHUwMDNldHlwZSA9PSBJQ0VfVlNJX1BGIHx8XG4gXHRcdFx0ICAgICAgdnNpLVx1MDAzZXR5cGUgPT0gSUNFX1ZTSV9TRikpKSkge1xuLVx0XHRpY2VfcHJpbnRfbGlua19tc2codnNpLCB0cnVlKTtcbitcdFx0aWNlX3ByaW50X2xpbmtfbXNnKHZzaSwgdHJ1ZSxcbitcdFx0XHRcdCAgIHZzaS1cdTAwM2Vwb3J0X2luZm8tXHUwMDNlcGh5LmxpbmtfaW5mby5saW5rX3NwZWVkKTtcbiBcdFx0bmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyh2c2ktXHUwMDNlbmV0ZGV2KTtcbiBcdFx0bmV0aWZfY2Fycmllcl9vbih2c2ktXHUwMDNlbmV0ZGV2KTtcbiBcdFx0aWNlX3B0cF9saW5rX2NoYW5nZShwZiwgdHJ1ZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxOTozMzoyMi40MTUyMzQ4NzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTcwODk4NzY2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElDRSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBgaWNlX3ByaW50X2xpbmtfbXNnYCBpbiBgaWNlX21haW4uY2AgYW5kIGBpY2VfZXRodG9vbC5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBhIGBsaW5rX3NwZWVkYCBwYXJhbWV0ZXIgdG8gYGljZV9wcmludF9saW5rX21zZ2AgYW5kIHRoZW4gdGhyZWFkaW5nIGl0IHRocm91Z2ggdGhlIHZhcmlvdXMgY2FsbGVyczogYGljZV9zZXRfbGlua19rc2V0dGluZ3NgLCBgaWNlX2xpbmtfZXZlbnRgLCBhbmQgYGljZV91cF9jb21wbGV0ZWAuICBOYXR1cmFsbHksIHRoZSBmdW5jdGlvbiBuYW1lIHN1Z2dlc3RzIGl0J3MgcHJpbWFyaWx5IGZvciBwcmludGluZyBtZXNzYWdlcywgYnV0IEkgYWx3YXlzIHdhbnQgdG8gYmUgc3VyZSwgc28gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0J3MgKm9ubHkqIHByaW50aW5nIGEgbWVzc2FnZS4gWWVwLCBqdXN0IGEgbG9nZ2luZyBmdW5jdGlvbi4gRmluZS5cblxuTm93LCBob2xkIG9uLi4uIGhlcmUncyBzb21ldGhpbmcgZWxzZS4gIGBpY2VfbGlua19ldmVudGAgaGFzIGEgbW9yZSBzdWJzdGFudGlhbCBtb2RpZmljYXRpb24uICBUaGV5J3ZlIGNoYW5nZWQgaG93IGBsaW5rX3VwYCBpcyBkZXRlcm1pbmVkLiAgUHJldmlvdXNseSwgaXQgbG9va2VkIGxpa2UgdGhpczpcblxuYGBgY1xuXHRpZiAocGh5X2luZm8tXHUwMDNlbGlua19pbmZvLmxpbmtfaW5mbyBcdTAwMjYgSUNFX0FRX0xJTktfVVApXG5cdFx0bGlua191cCA9IHRydWU7XG5gYGBcblxuTm93LCBpdCdzIGp1c3Q6XG5cbmBgYGNcblx0bGlua191cCA9IHBoeV9pbmZvLVx1MDAzZWxpbmtfaW5mby5saW5rX2luZm8gXHUwMDI2IElDRV9BUV9MSU5LX1VQO1xuYGBgXG5cblJpZ2h0LCB0aGUga2V5IGRpZmZlcmVuY2UuIFRoZSBvcmlnaW5hbCBjb2RlIG9ubHkgc2V0IGBsaW5rX3VwYCB0byBgdHJ1ZWAgaWYgdGhlIGNvbmRpdGlvbiB3YXMgbWV0OyBvdGhlcndpc2UsIGl0IHdvdWxkIGtlZXAgaXRzIG9yaWdpbmFsIHZhbHVlLiBOb3csIGBsaW5rX3VwYCBpcyAqYWx3YXlzKiBhc3NpZ25lZCB0aGUgcmVzdWx0IG9mIHRoYXQgYml0d2lzZSBBTkQgb3BlcmF0aW9uLiAgU28sIGlmIGBJQ0VfQVFfTElOS19VUGAgaXNuJ3Qgc2V0LCBgbGlua191cGAgd2lsbCBiZSBleHBsaWNpdGx5IHNldCB0byBgZmFsc2VgLiBUaGF0IGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBhbmQgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnMgaGVyZS4gSSBzaG91bGQgcHJvYmFibHkgZGlnIGludG8gdGhlIGxvZ2ljIGFuZCB0ZXN0IHRoaXMuXG5cbkxldCdzIGdvIGJhY2sgYW5kIGV4YW1pbmUgYGljZV9saW5rX2V2ZW50YCBpbiBgaWNlX21haW4uY2AgbW9yZSBjbG9zZWx5IGFuZCB0aGluayBhYm91dCB0aGUgcG9zc2libGUgY29uc2VxdWVuY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDM2LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6MzM6MzQuMTI0MjI1Njc5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzODU0Njc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImljZV9saW5rX2V2ZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTEwODg9c3RhdGljIHZvaWQgaWNlX2NoZWNrX2xpbmtfY2ZnX2VycihzdHJ1Y3QgaWNlX3BmICpwZiwgdTggbGlua19jZmdfZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtMTA5NC0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzoxMDk1OiAqIGljZV9saW5rX2V2ZW50IC0gcHJvY2VzcyB0aGUgbGluayBldmVudFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTEwOTYtICogQHBmOiBQRiB0aGF0IHRoZSBsaW5rIGV2ZW50IGlzIGFzc29jaWF0ZWQgd2l0aFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9MTEwMz1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6MTEwNDppY2VfbGlua19ldmVudChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wb3J0X2luZm8gKnBpLCBib29sIGxpbmtfdXAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtMTEwNS1cXHQgICAgICAgdTE2IGxpbmtfc3BlZWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz0xMjMzPWljZV9oYW5kbGVfbGlua19ldmVudChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9ycV9ldmVudF9pbmZvICpldmVudClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTEyNDMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6MTI0NDpcXHRzdGF0dXMgPSBpY2VfbGlua19ldmVudChwZiwgcG9ydF9pbmZvLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTEyNDUtXFx0XFx0XFx0XFx0ISEobGlua19kYXRhLVxcdTAwM2VsaW5rX2luZm8gXFx1MDAyNiBJQ0VfQVFfTElOS19VUCksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjMzOjM0LjE2ODA4NDgxOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3MDAxNDY5MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgYGljZV9saW5rX2V2ZW50YCBSYWJiaXQgSG9sZSoqXG5cbkFscmlnaHQsIGhhbmcgb24gYSBzZWNvbmQuIEkndmUgZ290IHRvIHJlZnJlc2ggbXkgbWVtb3J5LiBUaGF0IGBpY2VfbGlua19ldmVudGAgZnVuY3Rpb27igKYgdGhhdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCBkZWZpbmVkIHJpZ2h0IGluIGBpY2VfbWFpbi5jYCwgaXNuJ3QgaXQ/IE9rYXksIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIGhvdyB0aGlzIHRoaW5nIGlzIGFjdHVhbGx5IHdvcmtpbmcsIGVzcGVjaWFsbHkgaG93IGl0IGhhbmRsZXMgYGxpbmtfdXBgLiBSaWdodCwgdGhlIGJlc3Qgd2F5IHRvIGRvIHRoaXMgaXMganVzdCBkaXZlIHJpZ2h0IGluIGFuZCByZWFkIHRoZSBjb2RlIGZvciBgaWNlX2xpbmtfZXZlbnRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGhlcmUsIGJlY2F1c2Uga25vd2luZyBob3cgYGxpbmtfdXBgIGlzIHVzZWQgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIGJlaGF2aW9yIEknbSBleHBlY3RpbmcuIFRpbWUgdG8gZ2V0IHRvIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODg2LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6MzM6NDEuODY4MjM0NjY4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA4MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMDMsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTAzOlxcdHN0YXRpYyBpbnRcXG4xMTA0OlxcdGljZV9saW5rX2V2ZW50KHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3BvcnRfaW5mbyAqcGksIGJvb2wgbGlua191cCxcXG4xMTA1OlxcdFxcdCAgICAgICB1MTYgbGlua19zcGVlZClcXG4xMTA2OlxcdHtcXG4xMTA3OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGljZV9wZl90b19kZXYocGYpO1xcbjExMDg6XFx0XFx0c3RydWN0IGljZV9waHlfaW5mbyAqcGh5X2luZm87XFxuMTEwOTpcXHRcXHRzdHJ1Y3QgaWNlX3ZzaSAqdnNpO1xcbjExMTA6XFx0XFx0dTE2IG9sZF9saW5rX3NwZWVkO1xcbjExMTE6XFx0XFx0Ym9vbCBvbGRfbGluaztcXG4xMTEyOlxcdFxcdGludCBzdGF0dXM7XFxuMTExMzpcXHRcXG4xMTE0OlxcdFxcdHBoeV9pbmZvID0gXFx1MDAyNnBpLVxcdTAwM2VwaHk7XFxuMTExNTpcXHRcXHRwaHlfaW5mby1cXHUwMDNlbGlua19pbmZvX29sZCA9IHBoeV9pbmZvLVxcdTAwM2VsaW5rX2luZm87XFxuMTExNjpcXHRcXG4xMTE3OlxcdFxcdG9sZF9saW5rID0gISEocGh5X2luZm8tXFx1MDAzZWxpbmtfaW5mb19vbGQubGlua19pbmZvIFxcdTAwMjYgSUNFX0FRX0xJTktfVVApO1xcbjExMTg6XFx0XFx0b2xkX2xpbmtfc3BlZWQgPSBwaHlfaW5mby1cXHUwMDNlbGlua19pbmZvX29sZC5saW5rX3NwZWVkO1xcbjExMTk6XFx0XFxuMTEyMDpcXHRcXHQvKiB1cGRhdGUgdGhlIGxpbmsgaW5mbyBzdHJ1Y3R1cmVzIGFuZCByZS1lbmFibGUgbGluayBldmVudHMsXFxuMTEyMTpcXHRcXHQgKiBkb24ndCBiYWlsIG9uIGZhaWx1cmUgZHVlIHRvIG90aGVyIGJvb2sga2VlcGluZyBuZWVkZWRcXG4xMTIyOlxcdFxcdCAqL1xcbjExMjM6XFx0XFx0c3RhdHVzID0gaWNlX3VwZGF0ZV9saW5rX2luZm8ocGkpO1xcbjExMjQ6XFx0XFx0aWYgKHN0YXR1cylcXG4xMTI1OlxcdFxcdFxcdGRldl9kYmcoZGV2LCBcXFwiRmFpbGVkIHRvIHVwZGF0ZSBsaW5rIHN0YXR1cyBvbiBwb3J0ICVkLCBlcnIgJWQgYXFfZXJyICVzXFxcXG5cXFwiLFxcbjExMjY6XFx0XFx0XFx0XFx0cGktXFx1MDAzZWxwb3J0LCBzdGF0dXMsXFxuMTEyNzpcXHRcXHRcXHRcXHRsaWJpZV9hcV9zdHIocGktXFx1MDAzZWh3LVxcdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpKTtcXG4xMTI4OlxcdFxcbjExMjk6XFx0XFx0aWNlX2NoZWNrX2xpbmtfY2ZnX2VycihwZiwgcGktXFx1MDAzZXBoeS5saW5rX2luZm8ubGlua19jZmdfZXJyKTtcXG4xMTMwOlxcdFxcbjExMzE6XFx0XFx0bGlua191cCA9IHBoeV9pbmZvLVxcdTAwM2VsaW5rX2luZm8ubGlua19pbmZvIFxcdTAwMjYgSUNFX0FRX0xJTktfVVA7XFxuMTEzMjpcXHRcXHRsaW5rX3NwZWVkID0gcGh5X2luZm8tXFx1MDAzZWxpbmtfaW5mby5saW5rX3NwZWVkO1xcbjExMzM6XFx0XFxuMTEzNDpcXHRcXHR2c2kgPSBpY2VfZ2V0X21haW5fdnNpKHBmKTtcXG4xMTM1OlxcdFxcdGlmICghdnNpIHx8ICF2c2ktXFx1MDAzZXBvcnRfaW5mbylcXG4xMTM2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjExMzc6XFx0XFxuMTEzODpcXHRcXHQvKiB0dXJuIG9mZiBQSFkgaWYgbWVkaWEgd2FzIHJlbW92ZWQgKi9cXG4xMTM5OlxcdFxcdGlmICghdGVzdF9iaXQoSUNFX0ZMQUdfTk9fTUVESUEsIHBmLVxcdTAwM2VmbGFncykgXFx1MDAyNlxcdTAwMjZcXG4xMTQwOlxcdFxcdCAgICAhKHBpLVxcdTAwM2VwaHkubGlua19pbmZvLmxpbmtfaW5mbyBcXHUwMDI2IElDRV9BUV9NRURJQV9BVkFJTEFCTEUpKSB7XFxuMTE0MTpcXHRcXHRcXHRzZXRfYml0KElDRV9GTEFHX05PX01FRElBLCBwZi1cXHUwMDNlZmxhZ3MpO1xcbjExNDI6XFx0XFx0XFx0aWNlX3NldF9saW5rKHZzaSwgZmFsc2UpO1xcbjExNDM6XFx0XFx0fVxcbjExNDQ6XFx0XFxuMTE0NTpcXHRcXHQvKiBpZiB0aGUgb2xkIGxpbmsgdXAvZG93biBhbmQgc3BlZWQgaXMgdGhlIHNhbWUgYXMgdGhlIG5ldyAqL1xcbjExNDY6XFx0XFx0aWYgKGxpbmtfdXAgPT0gb2xkX2xpbmsgXFx1MDAyNlxcdTAwMjYgbGlua19zcGVlZCA9PSBvbGRfbGlua19zcGVlZClcXG4xMTQ3OlxcdFxcdFxcdHJldHVybiAwO1xcbjExNDg6XFx0XFxuMTE0OTpcXHRcXHRpZiAoIWxpbmtfdXAgXFx1MDAyNlxcdTAwMjYgb2xkX2xpbmspXFxuMTE1MDpcXHRcXHRcXHRwZi1cXHUwMDNlbGlua19kb3duX2V2ZW50cysrO1xcbjExNTE6XFx0XFxuMTE1MjpcXHRcXHRpY2VfcHRwX2xpbmtfY2hhbmdlKHBmLCBsaW5rX3VwKTtcXG4xMTUzOlxcdFxcbjExNTQ6XFx0XFx0aWYgKGljZV9pc19kY2JfYWN0aXZlKHBmKSkge1xcbjExNTU6XFx0XFx0XFx0aWYgKHRlc3RfYml0KElDRV9GTEFHX0RDQl9FTkEsIHBmLVxcdTAwM2VmbGFncykpXFxuMTE1NjpcXHRcXHRcXHRcXHRpY2VfZGNiX3JlYnVpbGQocGYpO1xcbjExNTc6XFx0XFx0fSBlbHNlIHtcXG4xMTU4OlxcdFxcdFxcdGlmIChsaW5rX3VwKVxcbjExNTk6XFx0XFx0XFx0XFx0aWNlX3NldF9kZmx0X21pYihwZik7XFxuMTE2MDpcXHRcXHR9XFxuMTE2MTpcXHRcXHRpY2VfdnNpX2xpbmtfZXZlbnQodnNpLCBsaW5rX3VwKTtcXG4xMTYyOlxcdFxcdGljZV9wcmludF9saW5rX21zZyh2c2ksIGxpbmtfdXAsIGxpbmtfc3BlZWQpO1xcbjExNjM6XFx0XFxuMTE2NDpcXHRcXHRpY2VfdmNfbm90aWZ5X2xpbmtfc3RhdGUocGYpO1xcbjExNjU6XFx0XFxuMTE2NjpcXHRcXHRyZXR1cm4gMDtcXG4xMTY3OlxcdH1cXG4xMTY4OlxcdFxcbjExNjk6XFx0LyoqXFxuMTE3MDpcXHQgKiBpY2Vfd2F0Y2hkb2dfc3VidGFzayAtIHBlcmlvZGljIHRhc2tzIG5vdCB1c2luZyBldmVudCBkcml2ZW4gc2NoZWR1bGluZ1xcbjExNzE6XFx0ICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxcbjExNzI6XFx0ICovXFxuMTE3MzpcXHRzdGF0aWMgdm9pZCBpY2Vfd2F0Y2hkb2dfc3VidGFzayhzdHJ1Y3QgaWNlX3BmICpwZilcXG4xMTc0OlxcdHtcXG4xMTc1OlxcdFxcdGludCBpO1xcbjExNzY6XFx0XFxuMTE3NzpcXHRcXHQvKiBpZiBpbnRlcmZhY2UgaXMgZG93biBkbyBub3RoaW5nICovXFxuMTE3ODpcXHRcXHRpZiAodGVzdF9iaXQoSUNFX0RPV04sIHBmLVxcdTAwM2VzdGF0ZSkgfHxcXG4xMTc5OlxcdFxcdCAgICB0ZXN0X2JpdChJQ0VfQ0ZHX0JVU1ksIHBmLVxcdTAwM2VzdGF0ZSkpXFxuMTE4MDpcXHRcXHRcXHRyZXR1cm47XFxuMTE4MTpcXHRcXG4xMTgyOlxcdFxcdC8qIG1ha2Ugc3VyZSB3ZSBkb24ndCBkbyB0aGVzZSB0aGluZ3MgdG9vIG9mdGVuICovXFxuMTE4MzpcXHRcXHRpZiAodGltZV9iZWZvcmUoamlmZmllcyxcXG4xMTg0OlxcdFxcdFxcdFxcdHBmLVxcdTAwM2VzZXJ2X3Rtcl9wcmV2ICsgcGYtXFx1MDAzZXNlcnZfdG1yX3BlcmlvZCkpXFxuMTE4NTpcXHRcXHRcXHRyZXR1cm47XFxuMTE4NjpcXHRcXG4xMTg3OlxcdFxcdHBmLVxcdTAwM2VzZXJ2X3Rtcl9wcmV2ID0gamlmZmllcztcXG4xMTg4OlxcdFxcbjExODk6XFx0XFx0LyogVXBkYXRlIHRoZSBzdGF0cyBmb3IgYWN0aXZlIG5ldGRldnMgc28gdGhlIG5ldHdvcmsgc3RhY2tcXG4xMTkwOlxcdFxcdCAqIGNhbiBsb29rIGF0IHVwZGF0ZWQgbnVtYmVycyB3aGVuZXZlciBpdCBjYXJlcyB0b1xcbjExOTE6XFx0XFx0ICovXFxuMTE5MjpcXHRcXHRpY2VfdXBkYXRlX3BmX3N0YXRzKHBmKTtcXG4xMTkzOlxcdFxcdGljZV9mb3JfZWFjaF92c2kocGYsIGkpXFxuMTE5NDpcXHRcXHRcXHRpZiAocGYtXFx1MDAzZXZzaVtpXSBcXHUwMDI2XFx1MDAyNiBwZi1cXHUwMDNldnNpW2ldLVxcdTAwM2VuZXRkZXYpXFxuMTE5NTpcXHRcXHRcXHRcXHRpY2VfdXBkYXRlX3ZzaV9zdGF0cyhwZi1cXHUwMDNldnNpW2ldKTtcXG4xMTk2OlxcdH1cXG4xMTk3OlxcdFxcbjExOTg6XFx0LyoqXFxuMTE5OTpcXHQgKiBpY2VfaW5pdF9saW5rX2V2ZW50cyAtIGVuYWJsZS9pbml0aWFsaXplIGxpbmsgZXZlbnRzXFxuMTIwMDpcXHQgKiBAcGk6IHBvaW50ZXIgdG8gdGhlIHBvcnRfaW5mbyBpbnN0YW5jZVxcbjEyMDE6XFx0ICpcXG4xMjAyOlxcdCAqIFJldHVybnMgLUVJTyBvbiBmYWlsdXJlLCAwIG9uIHN1Y2Nlc3NcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6MzM6NDEuODY4NTQ1MTc5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTExOTM4MDMxMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMaW5rIFN0YXRlIENoYW5nZSBpbiB0aGUgYGljZWAgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIGBpY2VfbGlua19ldmVudGAgZnVuY3Rpb24sIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2UuIEJlZm9yZSwgdGhlIGNvZGUgc2VlbWVkIHRvIGNvbmRpdGlvbmFsbHkgc2V0IGBsaW5rX3VwYCBiYXNlZCBvbiBgcGh5X2luZm8tXHUwMDNlbGlua19pbmZvLmxpbmtfaW5mbyBcdTAwMjYgSUNFX0FRX0xJTktfVVBgLiBTcGVjaWZpY2FsbHksIGBsaW5rX3VwYCB3YXMgcGFzc2VkIGluLCBhbmQgdGhlbiBwb3RlbnRpYWxseSBtb2RpZmllZC4gTm93LCBpdCBzZWVtcyB0aGF0IGBsaW5rX3VwYCBpcyB1bmNvbmRpdGlvbmFsbHkgYXNzaWduZWQgdGhlIHJlc3VsdCBvZiB0aGF0IGNoZWNrLCBhbG9uZyB3aXRoIHRoZSBgbGlua19zcGVlZGAuIEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2ggY2FyZWZ1bGx5IGJlY2F1c2UgY2hhbmdlcyB0byBsaW5rIHN0YXRlIGhhbmRsaW5nIGFyZSBhbHdheXMgY3JpdGljYWwuXG5cbkkgbmVlZCB0byBxdWlja2x5IHJlbWVtYmVyIHdoZXJlIHRoYXQgaW5pdGlhbCBgbGlua191cGAgY29tZXMgZnJvbS4gQWgsIHJpZ2h0LCBpbiBgaWNlX2hhbmRsZV9saW5rX2V2ZW50YCwgaXQncyBkZXJpdmVkIGZyb20gYGxpbmtfZGF0YS1cdTAwM2VsaW5rX2luZm8gXHUwMDI2IElDRV9BUV9MSU5LX1VQYC4gU28sIHdlIHVwZGF0ZSBgcGktXHUwMDNlcGh5LmxpbmtfaW5mb2AgdmlhIGBpY2VfdXBkYXRlX2xpbmtfaW5mbyhwaSlgLiBUaGUgcHJlLXBhdGNoIGxvZ2ljIHdhcyBlc3NlbnRpYWxseSBhIHJhY2UuIElmIHRoZSBsaW5rIHdlbnQgZG93biBiZXR3ZWVuIHRoZSBpbml0aWFsIGV2ZW50IChgbGlua19kYXRhYCkgYW5kIHRoZSB1cGRhdGUgb2YgYHBoeV9pbmZvYCB2aWEgYGljZV91cGRhdGVfbGlua19pbmZvYCwgdGhlbiB3ZSBjb3VsZCBzdGlsbCByZXBvcnQgdGhlIGxpbmsgYXMgdXAuIEFmdGVyIHRoZSBwYXRjaCwgdGhhdCB3aW5kb3cgaXMgY2xvc2VkLCBhcyB0aGUgY2hlY2sgd2lsbCByZWZsZWN0IHRoZSBjdXJyZW50IHN0YXRlIGFzIHVwZGF0ZWQgYnkgYGljZV91cGRhdGVfbGlua19pbmZvYC5cblxuVGhpcyBpcyBhIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgaW1wYWN0ZnVsIGZ1bmN0aW9uYWwgY2hhbmdlLiBOb3csIGEgdHJhbnNpZW50IGxpbmsgZG93biB3aWxsIGJlIGNvcnJlY3RseSByZWZsZWN0ZWQuIFByZXZpb3VzbHkgaXQgbWlnaHQgaGF2ZSBiZWVuIGluY29ycmVjdGx5IHJlcG9ydGVkIGFzIHVwLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IGlzIHRoaXMgd29ydGggZnV6emluZz8gVGhlIGBpY2VgIGRyaXZlciwgd2hpY2ggaXMgZm9yIEludGVsJ3MgRTgwMCBzZXJpZXMgRXRoZXJuZXQgQ29ubmVjdGlvbiwgaXMgYSBwaHlzaWNhbCBQQ0llIG5ldHdvcmsgY2FyZCBkcml2ZXIuIE15IHByaW1hcnkgd29ycnkgaXMgdGhhdCB0aGlzIGlzbid0IGVtdWxhdGVkIGJ5IFFFTVUuIEhvd2V2ZXIsIHRoaXMgZHJpdmVyIGlzIGZvciBhIHZlbmRvci1zcGVjaWZpYyBOSUMsIGFuZCBpdCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBTbywgYmFzZWQgb24gdGhhdCwgdGhpcyBjaGFuZ2UgaXMgbm90IHdvcnRoIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NTksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxOTozMzo1My4wNjIzNTA0NjVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3MjE3MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGNpX3JlZ2lzdGVyX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTU4NjY9c3RhdGljIGludCBfX2luaXQgaWNlX21vZHVsZV9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01ODg4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjU4ODk6XFx0c3RhdHVzID0gcGNpX3JlZ2lzdGVyX2RyaXZlcihcXHUwMDI2aWNlX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTg5MC1cXHRpZiAoc3RhdHVzKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjMzOjUzLjExMDEwMjAyNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNzYxNDc2MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBDSSBEcml2ZXIgQ29kZSoqXG5cbk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIGRyaXZlciBmb3IgYSBQQ0kgZGV2aWNlIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBJbnRlbCBFODAwIHNlcmllcywgb3IgYGljZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25zaWRlciB3aGV0aGVyIGl0J3MgZW11bGF0ZWQgaW4gYSB0eXBpY2FsIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50IGxpa2UgUUVNVS4gTm9wZS4gUUVNVSBkb2Vzbid0IHN1cHBvcnQgdGhlIGBpY2VgIGhhcmR3YXJlLiBJdCdzIGdvdCB0aGUgdXN1YWwgc3VzcGVjdHMgbGlrZSBgZTEwMDBgLCBgZTEwMDBlYCwgYW5kIGEgZmV3IG90aGVycywgYnV0IG5vIGBpY2VgLlxuXG5UaGVyZWZvcmUsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgUUVNVSdzIGVtdWxhdGlvbiBjYXBhYmlsaXRpZXMsIHRoaXMgc3BlY2lmaWMgY29kZSBwYXRoIGluIHRoZSBgaWNlYCBkcml2ZXIgaXMgdW5yZWFjaGFibGUgd2l0aGluIHZpcnR1YWxpemVkIHNldHVwcyBzdWNoIGFzIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBvciB1c2luZyBRRU1VLlxuXG5MZXQgbWUganVzdCBzb2xpZGlmeSB0aGF0IHJlYXNvbmluZy4gVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgdGhlIGBpY2VgIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGNhcmQgZHJpdmVyLiBUaGF0IG1lYW5zIGl0J3MgZGVzaWduZWQgdG8gaW50ZXJmYWNlIHdpdGggcGh5c2ljYWwgaGFyZHdhcmUuIFFFTVUgZG9lc24ndCBlbXVsYXRlIHRoZSBgaWNlYCBjaGlwLiBDb25zZXF1ZW50bHksIGFueSBjb2RlIGNoYW5nZXMgcmVsYXRpbmcgdG8gdGhpcyBkZXZpY2UgYXJlIG5vdCByZWFjaGFibGUgd2l0aGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudC4gRnVydGhlcm1vcmUsIGxvb2tpbmcgYXQgdGhlIGNvZGUgY2hhbmdlcywgaXTigJlzIG1vc3RseSBhYm91dCBwcmludGluZyB0aGUgbGluayBzcGVlZCBpbmZvcm1hdGlvbiBpbiBgaWNlX3ByaW50X2xpbmtfbXNnYCBhbmQgYSBtaW5vciBsb2dpYyBjaGFuZ2UgaW4gYGljZV9saW5rX2V2ZW50YCBhbmQgYm90aCBvZiB0aGVzZSBhcmUgaGFyZHdhcmUtZGVwZW5kZW50IGZlYXR1cmVzLlxuXG5TbywgZ2l2ZW4gdGhpcywgSSdtIGNvbmZpZGVudCB0aGF0IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYCBmb3IgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIzNiwiT3V0cHV0VG9rZW5zIjoxMDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6MzQ6MDQuODcxNTgxMDQ0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEU4MDAgc2VyaWVzIEV0aGVybmV0IGRyaXZlciAoaWNlKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGNhcmQgZHJpdmVyLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiBBZGRpdGlvbmFsbHksIHRoZSBjaGFuZ2VzIHByaW1hcmlseSBhZmZlY3QgbGluayBzdGF0dXMgbG9nZ2luZyBhbmQgaGFyZHdhcmUtZGVwZW5kZW50IGxpbmsgZXZlbnQgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgRTgwMCBzZXJpZXMgRXRoZXJuZXQgZHJpdmVyIChpY2UpLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgY2FyZCBkcml2ZXIuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuIEFkZGl0aW9uYWxseSwgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFmZmVjdCBsaW5rIHN0YXR1cyBsb2dnaW5nIGFuZCBoYXJkd2FyZS1kZXBlbmRlbnQgbGluayBldmVudCBoYW5kbGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow8jrxg[1] Phase: Running StartedAt: 2026-08-06 19:34:16 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8jrxg[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-06 19:34:16 +0000 UTC FinishedAt: 2026-08-06 19:34:26 +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,}