Name: series-workflow5259b Phase: Failed StartedAt: 2026-09-11 13:32:56 +0000 UTC FinishedAt: 2026-09-11 13:55:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5259b[0] Phase: Succeeded StartedAt: 2026-09-11 13:32:56 +0000 UTC FinishedAt: 2026-09-11 13:55:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5259b[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 13:32:56 +0000 UTC FinishedAt: 2026-09-11 13:55:22 +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+CgkJCTx0ZD4yMDI2LzA5LzExIDEzOjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uc2lzdHMgc29sZWx5IG9mIGlkZW50aWZpZXIgcmVuYW1lcyAocmVuYW1pbmcgYGluc2VydF9leHRlbnRgIHRvIGB1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50YCBhbmQgYHNvcnRfaWRtYXBzYCB0byBgdWlkX2dpZF9tYXBfc29ydGApIGFuZCB1cGRhdGluZyB0aGUgY29ycmVzcG9uZGluZyBLVW5pdCB0ZXN0IHJlZmVyZW5jZXMgYW5kIGhlYWRlciBkZWNsYXJhdGlvbnMuIEl0IGludHJvZHVjZXMgbm8gZnVuY3Rpb25hbCwgbG9naWNhbCwgY29udHJvbC1mbG93LCBkYXRhIHN0cnVjdHVyZSwgb3IgYXNzZXJ0aW9uIGNoYW5nZXMuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3Qgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMzo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGUzYjE2ZGU3NTBlMjIzYTRkMTIyY2VmODM0Njc0ZTkyMjc4OTdlNjlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAxMzo1NDo0MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzZXJfbmFtZXNwYWNlLmggYi9pbmNsdWRlL2xpbnV4L3VzZXJfbmFtZXNwYWNlLmhcbmluZGV4IDYzMzE1Nzc4MWVkY2IuLjkxMjMyMDUzNzc1ZDggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3VzZXJfbmFtZXNwYWNlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaFxuQEAgLTIwOCwxMCAmIzQzOzIwOCwxMSBAQCBleHRlcm4gYm9vbCBpbl91c2VybnMoY29uc3Qgc3RydWN0IHVzZXJfbmFtZXNwYWNlICphbmNlc3RvcixcbiBleHRlcm4gYm9vbCBjdXJyZW50X2luX3VzZXJucyhjb25zdCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnRhcmdldF9ucyk7XG4gc3RydWN0IG5zX2NvbW1vbiAqbnNfZ2V0X293bmVyKHN0cnVjdCBuc19jb21tb24gKm5zKTtcbiBcbi0jaWYgSVNfRU5BQkxFRChDT05GSUdfVVNFUl9OU19NQVBfS1VOSVRfVEVTVClcbi1leHRlcm4gaW50IGluc2VydF9leHRlbnQoc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZXh0ZW50KTtcbi1leHRlcm4gaW50IHNvcnRfaWRtYXBzKHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwKTtcbi0jZW5kaWYgLyogQ09ORklHX1VTRVJfTlNfTUFQX0tVTklUX1RFU1QgKi9cbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0tVTklUKVxuJiM0MztleHRlcm4gaW50IHVpZF9naWRfbWFwX2luc2VydF9leHRlbnQoc3RydWN0IHVpZF9naWRfbWFwICptYXAsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKmV4dGVudCk7XG4mIzQzO2V4dGVybiBpbnQgdWlkX2dpZF9tYXBfc29ydChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCk7XG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfS1VOSVQgKi9cbiBcbiAjZWxzZVxuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC90ZXN0cy91c2VyX25zX21hcF9rdW5pdC5jIGIva2VybmVsL3Rlc3RzL3VzZXJfbnNfbWFwX2t1bml0LmNcbmluZGV4IDI0YzIxZTQzYTM2YzkuLjAzM2RjY2M2YTUzNWIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvdGVzdHMvdXNlcl9uc19tYXBfa3VuaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3Rlc3RzL3VzZXJfbnNfbWFwX2t1bml0LmNcbkBAIC0yNCw3ICYjNDM7MjQsNyBAQCBzdGF0aWMgdm9pZCB1c2VyX25zX21hcF9pbnNlcnQoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRleHRlbnQubG93ZXJfZmlyc3QgPSBpICogMTAwO1xuIFx0XHRleHRlbnQuY291bnQgPSA1O1xuIFxuLVx0XHRyZXQgPSBpbnNlcnRfZXh0ZW50KFx1MDAyNm1hcCwgXHUwMDI2ZXh0ZW50KTtcbiYjNDM7XHRcdHJldCA9IHVpZF9naWRfbWFwX2luc2VydF9leHRlbnQoXHUwMDI2bWFwLCBcdTAwMjZleHRlbnQpO1xuIFx0XHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmV0LCAwKTtcbiBcdH1cbiBcbkBAIC01NCwxNCAmIzQzOzU0LDE0IEBAIHN0YXRpYyB2b2lkIHVzZXJfbnNfbWFwX2luc2VydF9leHRlbmRlZChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRcdGV4dGVudC5sb3dlcl9maXJzdCA9IHZhbHVlICogMTAwO1xuIFx0XHRleHRlbnQuY291bnQgPSA1O1xuIFxuLVx0XHRyZXQgPSBpbnNlcnRfZXh0ZW50KFx1MDAyNm1hcCwgXHUwMDI2ZXh0ZW50KTtcbiYjNDM7XHRcdHJldCA9IHVpZF9naWRfbWFwX2luc2VydF9leHRlbnQoXHUwMDI2bWFwLCBcdTAwMjZleHRlbnQpO1xuIFx0XHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmV0LCAwKTtcbiBcdH1cbiBcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBtYXAubnJfZXh0ZW50cywgTlJfRVhURU5UUyk7XG4gXG4gXHQvKiBOb3cgc29ydCB0aGUgbWFwIHRvIHNldCB1cCByZXZlcnNlIG1hcHBpbmcgKi9cbi1cdHJldCA9IHNvcnRfaWRtYXBzKFx1MDAyNm1hcCk7XG4mIzQzO1x0cmV0ID0gdWlkX2dpZF9tYXBfc29ydChcdTAwMjZtYXApO1xuIFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJldCwgMCk7XG4gXHRLVU5JVF9BU1NFUlRfTk9UX0VSUl9PUl9OVUxMKHRlc3QsIG1hcC5yZXZlcnNlKTtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jXG5pbmRleCBmOWNiYjRiOTJiNDg3Li45OGIwMjc5YjZjYzZlIDEwMDY0NFxuLS0tIGEva2VybmVsL3VzZXJfbmFtZXNwYWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jXG5AQCAtNzgwLDEyICYjNDM7NzgwLDEzIEBAIHN0YXRpYyBib29sIG1hcHBpbmdzX292ZXJsYXAoc3RydWN0IHVpZF9naWRfbWFwICpuZXdfbWFwLFxuIH1cbiBcbiAvKlxuLSAqIGluc2VydF9leHRlbnQgLSBTYWZlbHkgaW5zZXJ0IGEgbmV3IGlkbWFwIGV4dGVudCBpbnRvIHN0cnVjdCB1aWRfZ2lkX21hcC5cbiYjNDM7ICogdWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudCAtIFNhZmVseSBpbnNlcnQgYSBuZXcgaWRtYXAgZXh0ZW50IGludG9cbiYjNDM7ICogc3RydWN0IHVpZF9naWRfbWFwLlxuICAqIFRha2VzIGNhcmUgdG8gYWxsb2NhdGUgYSA0SyBibG9jayBvZiBtZW1vcnkgaWYgdGhlIG51bWJlciBvZiBtYXBwaW5ncyBleGNlZWRzXG4gICogVUlEX0dJRF9NQVBfTUFYX0JBU0VfRVhURU5UUy5cbiAgKi9cbi1WSVNJQkxFX0lGX0tVTklUIGludCBpbnNlcnRfZXh0ZW50KHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLFxuLVx0XHRcdFx0ICAgc3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQpXG4mIzQzO1ZJU0lCTEVfSUZfS1VOSVQgaW50IHVpZF9naWRfbWFwX2luc2VydF9leHRlbnQoc3RydWN0IHVpZF9naWRfbWFwICptYXAsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgc3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQpXG4ge1xuIFx0c3RydWN0IHVpZF9naWRfZXh0ZW50ICpkZXN0O1xuIFxuQEAgLTgyMSw3ICYjNDM7ODIyLDcgQEAgVklTSUJMRV9JRl9LVU5JVCBpbnQgaW5zZXJ0X2V4dGVudChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCxcbiBcdCpkZXN0ID0gKmV4dGVudDtcbiBcdHJldHVybiAwO1xuIH1cbi1FWFBPUlRfU1lNQk9MX0lGX0tVTklUKGluc2VydF9leHRlbnQpO1xuJiM0MztFWFBPUlRfU1lNQk9MX0lGX0tVTklUKHVpZF9naWRfbWFwX2luc2VydF9leHRlbnQpO1xuIFxuIC8qIGNtcCBmdW5jdGlvbiB0byBzb3J0KCkgZm9yd2FyZCBtYXBwaW5ncyAqL1xuIHN0YXRpYyBpbnQgY21wX2V4dGVudHNfZm9yd2FyZChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKVxuQEAgLTg1NCwxMCAmIzQzOzg1NSwxMCBAQCBzdGF0aWMgaW50IGNtcF9leHRlbnRzX3JldmVyc2UoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYilcbiB9XG4gXG4gLypcbi0gKiBzb3J0X2lkbWFwcyAtIFNvcnRzIGFuIGFycmF5IG9mIGlkbWFwIGVudHJpZXMuXG4mIzQzOyAqIHVpZF9naWRfbWFwX3NvcnQgLSBTb3J0cyBhbiBhcnJheSBvZiBpZG1hcCBlbnRyaWVzLlxuICAqIENhbiBvbmx5IGJlIGNhbGxlZCBpZiBudW1iZXIgb2YgbWFwcGluZ3MgZXhjZWVkcyBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTLlxuICAqL1xuLVZJU0lCTEVfSUZfS1VOSVQgaW50IHNvcnRfaWRtYXBzKHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwKVxuJiM0MztWSVNJQkxFX0lGX0tVTklUIGludCB1aWRfZ2lkX21hcF9zb3J0KHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwKVxuIHtcbiBcdGlmIChtYXAtXHUwMDNlbnJfZXh0ZW50cyBcdTAwM2M9IFVJRF9HSURfTUFQX01BWF9CQVNFX0VYVEVOVFMpXG4gXHRcdHJldHVybiAwO1xuQEAgLTg3OCw3ICYjNDM7ODc5LDcgQEAgVklTSUJMRV9JRl9LVU5JVCBpbnQgc29ydF9pZG1hcHMoc3RydWN0IHVpZF9naWRfbWFwICptYXApXG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4tRVhQT1JUX1NZTUJPTF9JRl9LVU5JVChzb3J0X2lkbWFwcyk7XG4mIzQzO0VYUE9SVF9TWU1CT0xfSUZfS1VOSVQodWlkX2dpZF9tYXBfc29ydCk7XG4gXG4gLyoqXG4gICogdmVyaWZ5X3Jvb3RfbWFwKCkgLSBjaGVjayB0aGUgdWlkIDAgbWFwcGluZ1xuQEAgLTEwNDcsNyAmIzQzOzEwNDgsNyBAQCBzdGF0aWMgc3NpemVfdCBtYXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXG4gXHRcdCAgICAobmV4dF9saW5lICE9IE5VTEwpKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFxuLVx0XHRyZXQgPSBpbnNlcnRfZXh0ZW50KFx1MDAyNm5ld19tYXAsIFx1MDAyNmV4dGVudCk7XG4mIzQzO1x0XHRyZXQgPSB1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50KFx1MDAyNm5ld19tYXAsIFx1MDAyNmV4dGVudCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdHJldCA9IC1FSU5WQUw7XG5AQCAtMTA5MSw3ICYjNDM7MTA5Miw3IEBAIHN0YXRpYyBzc2l6ZV90IG1hcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdCAqIElmIHdlIHdhbnQgdG8gdXNlIGJpbmFyeSBzZWFyY2ggZm9yIGxvb2t1cCwgdGhpcyBjbG9uZXMgdGhlIGV4dGVudFxuIFx0ICogYXJyYXkgYW5kIHNvcnRzIGJvdGggY29waWVzLlxuIFx0ICovXG4tXHRyZXQgPSBzb3J0X2lkbWFwcyhcdTAwMjZuZXdfbWFwKTtcbiYjNDM7XHRyZXQgPSB1aWRfZ2lkX21hcF9zb3J0KFx1MDAyNm5ld19tYXApO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBvdXQ7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTM6NTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uc2lzdHMgc29sZWx5IG9mIGlkZW50aWZpZXIgcmVuYW1lcyAocmVuYW1pbmcgYGluc2VydF9leHRlbnRgIHRvIGB1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50YCBhbmQgYHNvcnRfaWRtYXBzYCB0byBgdWlkX2dpZF9tYXBfc29ydGApIGFuZCB1cGRhdGluZyB0aGUgY29ycmVzcG9uZGluZyBLVW5pdCB0ZXN0IHJlZmVyZW5jZXMgYW5kIGhlYWRlciBkZWNsYXJhdGlvbnMuIEl0IGludHJvZHVjZXMgbm8gZnVuY3Rpb25hbCwgbG9naWNhbCwgY29udHJvbC1mbG93LCBkYXRhIHN0cnVjdHVyZSwgb3IgYXNzZXJ0aW9uIGNoYW5nZXMuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3Qgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGUzYjE2ZGU3NTBlMjIzYTRkMTIyY2VmODM0Njc0ZTkyMjc4OTdlNjkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCAxMSAxMzo1NDo0MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaCBiL2luY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaAppbmRleCA2MzMxNTc3ODFlZGNiLi45MTIzMjA1Mzc3NWQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzZXJfbmFtZXNwYWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC91c2VyX25hbWVzcGFjZS5oCkBAIC0yMDgsMTAgJiM0MzsyMDgsMTEgQEAgZXh0ZXJuIGJvb2wgaW5fdXNlcm5zKGNvbnN0IHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqYW5jZXN0b3IsCiBleHRlcm4gYm9vbCBjdXJyZW50X2luX3VzZXJucyhjb25zdCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnRhcmdldF9ucyk7CiBzdHJ1Y3QgbnNfY29tbW9uICpuc19nZXRfb3duZXIoc3RydWN0IG5zX2NvbW1vbiAqbnMpOwogCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfVVNFUl9OU19NQVBfS1VOSVRfVEVTVCkKLWV4dGVybiBpbnQgaW5zZXJ0X2V4dGVudChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgc3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQpOwotZXh0ZXJuIGludCBzb3J0X2lkbWFwcyhzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCk7Ci0jZW5kaWYgLyogQ09ORklHX1VTRVJfTlNfTUFQX0tVTklUX1RFU1QgKi8KJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfS1VOSVQpCiYjNDM7ZXh0ZXJuIGludCB1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50KHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLAomIzQzOwkJCQkgICAgIHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZXh0ZW50KTsKJiM0MztleHRlcm4gaW50IHVpZF9naWRfbWFwX3NvcnQoc3RydWN0IHVpZF9naWRfbWFwICptYXApOwomIzQzOyNlbmRpZiAvKiBDT05GSUdfS1VOSVQgKi8KIAogI2Vsc2UKIApkaWZmIC0tZ2l0IGEva2VybmVsL3Rlc3RzL3VzZXJfbnNfbWFwX2t1bml0LmMgYi9rZXJuZWwvdGVzdHMvdXNlcl9uc19tYXBfa3VuaXQuYwppbmRleCAyNGMyMWU0M2EzNmM5Li4wMzNkY2NjNmE1MzViIDEwMDY0NAotLS0gYS9rZXJuZWwvdGVzdHMvdXNlcl9uc19tYXBfa3VuaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdGVzdHMvdXNlcl9uc19tYXBfa3VuaXQuYwpAQCAtMjQsNyAmIzQzOzI0LDcgQEAgc3RhdGljIHZvaWQgdXNlcl9uc19tYXBfaW5zZXJ0KHN0cnVjdCBrdW5pdCAqdGVzdCkKIAkJZXh0ZW50Lmxvd2VyX2ZpcnN0ID0gaSAqIDEwMDsKIAkJZXh0ZW50LmNvdW50ID0gNTsKIAotCQlyZXQgPSBpbnNlcnRfZXh0ZW50KCZhbXA7bWFwLCAmYW1wO2V4dGVudCk7CiYjNDM7CQlyZXQgPSB1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50KCZhbXA7bWFwLCAmYW1wO2V4dGVudCk7CiAJCUtVTklUX0FTU0VSVF9FUSh0ZXN0LCByZXQsIDApOwogCX0KIApAQCAtNTQsMTQgJiM0Mzs1NCwxNCBAQCBzdGF0aWMgdm9pZCB1c2VyX25zX21hcF9pbnNlcnRfZXh0ZW5kZWQoc3RydWN0IGt1bml0ICp0ZXN0KQogCQlleHRlbnQubG93ZXJfZmlyc3QgPSB2YWx1ZSAqIDEwMDsKIAkJZXh0ZW50LmNvdW50ID0gNTsKIAotCQlyZXQgPSBpbnNlcnRfZXh0ZW50KCZhbXA7bWFwLCAmYW1wO2V4dGVudCk7CiYjNDM7CQlyZXQgPSB1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50KCZhbXA7bWFwLCAmYW1wO2V4dGVudCk7CiAJCUtVTklUX0FTU0VSVF9FUSh0ZXN0LCByZXQsIDApOwogCX0KIAogCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBtYXAubnJfZXh0ZW50cywgTlJfRVhURU5UUyk7CiAKIAkvKiBOb3cgc29ydCB0aGUgbWFwIHRvIHNldCB1cCByZXZlcnNlIG1hcHBpbmcgKi8KLQlyZXQgPSBzb3J0X2lkbWFwcygmYW1wO21hcCk7CiYjNDM7CXJldCA9IHVpZF9naWRfbWFwX3NvcnQoJmFtcDttYXApOwogCUtVTklUX0FTU0VSVF9FUSh0ZXN0LCByZXQsIDApOwogCUtVTklUX0FTU0VSVF9OT1RfRVJSX09SX05VTEwodGVzdCwgbWFwLnJldmVyc2UpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jCmluZGV4IGY5Y2JiNGI5MmI0ODcuLjk4YjAyNzliNmNjNmUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jCkBAIC03ODAsMTIgJiM0Mzs3ODAsMTMgQEAgc3RhdGljIGJvb2wgbWFwcGluZ3Nfb3ZlcmxhcChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm5ld19tYXAsCiB9CiAKIC8qCi0gKiBpbnNlcnRfZXh0ZW50IC0gU2FmZWx5IGluc2VydCBhIG5ldyBpZG1hcCBleHRlbnQgaW50byBzdHJ1Y3QgdWlkX2dpZF9tYXAuCiYjNDM7ICogdWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudCAtIFNhZmVseSBpbnNlcnQgYSBuZXcgaWRtYXAgZXh0ZW50IGludG8KJiM0MzsgKiBzdHJ1Y3QgdWlkX2dpZF9tYXAuCiAgKiBUYWtlcyBjYXJlIHRvIGFsbG9jYXRlIGEgNEsgYmxvY2sgb2YgbWVtb3J5IGlmIHRoZSBudW1iZXIgb2YgbWFwcGluZ3MgZXhjZWVkcwogICogVUlEX0dJRF9NQVBfTUFYX0JBU0VfRVhURU5UUy4KICAqLwotVklTSUJMRV9JRl9LVU5JVCBpbnQgaW5zZXJ0X2V4dGVudChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwKLQkJCQkgICBzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKmV4dGVudCkKJiM0MztWSVNJQkxFX0lGX0tVTklUIGludCB1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50KHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLAomIzQzOwkJCQkJICAgICAgIHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZXh0ZW50KQogewogCXN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZGVzdDsKIApAQCAtODIxLDcgJiM0Mzs4MjIsNyBAQCBWSVNJQkxFX0lGX0tVTklUIGludCBpbnNlcnRfZXh0ZW50KHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLAogCSpkZXN0ID0gKmV4dGVudDsKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0xfSUZfS1VOSVQoaW5zZXJ0X2V4dGVudCk7CiYjNDM7RVhQT1JUX1NZTUJPTF9JRl9LVU5JVCh1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50KTsKIAogLyogY21wIGZ1bmN0aW9uIHRvIHNvcnQoKSBmb3J3YXJkIG1hcHBpbmdzICovCiBzdGF0aWMgaW50IGNtcF9leHRlbnRzX2ZvcndhcmQoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKQEAgLTg1NCwxMCAmIzQzOzg1NSwxMCBAQCBzdGF0aWMgaW50IGNtcF9leHRlbnRzX3JldmVyc2UoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKIH0KIAogLyoKLSAqIHNvcnRfaWRtYXBzIC0gU29ydHMgYW4gYXJyYXkgb2YgaWRtYXAgZW50cmllcy4KJiM0MzsgKiB1aWRfZ2lkX21hcF9zb3J0IC0gU29ydHMgYW4gYXJyYXkgb2YgaWRtYXAgZW50cmllcy4KICAqIENhbiBvbmx5IGJlIGNhbGxlZCBpZiBudW1iZXIgb2YgbWFwcGluZ3MgZXhjZWVkcyBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTLgogICovCi1WSVNJQkxFX0lGX0tVTklUIGludCBzb3J0X2lkbWFwcyhzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCkKJiM0MztWSVNJQkxFX0lGX0tVTklUIGludCB1aWRfZ2lkX21hcF9zb3J0KHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwKQogewogCWlmIChtYXAtJmd0O25yX2V4dGVudHMgJmx0Oz0gVUlEX0dJRF9NQVBfTUFYX0JBU0VfRVhURU5UUykKIAkJcmV0dXJuIDA7CkBAIC04NzgsNyAmIzQzOzg3OSw3IEBAIFZJU0lCTEVfSUZfS1VOSVQgaW50IHNvcnRfaWRtYXBzKHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwKQogCiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MX0lGX0tVTklUKHNvcnRfaWRtYXBzKTsKJiM0MztFWFBPUlRfU1lNQk9MX0lGX0tVTklUKHVpZF9naWRfbWFwX3NvcnQpOwogCiAvKioKICAqIHZlcmlmeV9yb290X21hcCgpIC0gY2hlY2sgdGhlIHVpZCAwIG1hcHBpbmcKQEAgLTEwNDcsNyAmIzQzOzEwNDgsNyBAQCBzdGF0aWMgc3NpemVfdCBtYXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJCSAgICAobmV4dF9saW5lICE9IE5VTEwpKQogCQkJZ290byBvdXQ7CiAKLQkJcmV0ID0gaW5zZXJ0X2V4dGVudCgmYW1wO25ld19tYXAsICZhbXA7ZXh0ZW50KTsKJiM0MzsJCXJldCA9IHVpZF9naWRfbWFwX2luc2VydF9leHRlbnQoJmFtcDtuZXdfbWFwLCAmYW1wO2V4dGVudCk7CiAJCWlmIChyZXQgJmx0OyAwKQogCQkJZ290byBvdXQ7CiAJCXJldCA9IC1FSU5WQUw7CkBAIC0xMDkxLDcgJiM0MzsxMDkyLDcgQEAgc3RhdGljIHNzaXplX3QgbWFwX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCSAqIElmIHdlIHdhbnQgdG8gdXNlIGJpbmFyeSBzZWFyY2ggZm9yIGxvb2t1cCwgdGhpcyBjbG9uZXMgdGhlIGV4dGVudAogCSAqIGFycmF5IGFuZCBzb3J0cyBib3RoIGNvcGllcy4KIAkgKi8KLQlyZXQgPSBzb3J0X2lkbWFwcygmYW1wO25ld19tYXApOwomIzQzOwlyZXQgPSB1aWRfZ2lkX21hcF9zb3J0KCZhbXA7bmV3X21hcCk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCWdvdG8gb3V0OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzOTIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3NDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ29kZSBQYXRjaCBmb3IgUG90ZW50aWFsIEltcGFjdCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBkaWZmIHRoYXQgcHJpbWFyaWx5IGltcGFjdHMgZmlsZXMgcmVsYXRlZCB0byB0aGUgYHVzZXJfbmFtZXNwYWNlYC4gSSBzZWUgbW9kaWZpY2F0aW9ucyBpbiBgaW5jbHVkZS9saW51eC91c2VyX25hbWVzcGFjZS5oYCwgYGtlcm5lbC90ZXN0cy91c2VyX25zX21hcF9rdW5pdC5jYCwgYW5kIGBrZXJuZWwvdXNlcl9uYW1lc3BhY2UuY2AuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgc3ltYm9sIHJlbmFtaW5nOiBgaW5zZXJ0X2V4dGVudGAgaXMgbm93IGB1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50YCwgYW5kIGBzb3J0X2lkbWFwc2AgaGFzIGJlY29tZSBgdWlkX2dpZF9tYXBfc29ydGAuIEFsc28sIGAjaWYgSVNfRU5BQkxFRChDT05GSUdfVVNFUl9OU19NQVBfS1VOSVRfVEVTVClgIGhhcyBjaGFuZ2VkIHRvIGAjaWYgSVNfRU5BQkxFRChDT05GSUdfS1VOSVQpYC4KCk15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgKm1pZ2h0KiBiZSBhIHN0cmFpZ2h0Zm9yd2FyZCByZWZhY3RvcmluZy4gSG93ZXZlciwgSSBrbm93IGJldHRlciB0aGFuIHRvIGFzc3VtZSwgZXNwZWNpYWxseSBnaXZlbiB0aGUga2VybmVsJiMzOTtzIGNvbXBsZXhpdGllcy4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZXJlIGFyZSAqbm8qIGxvZ2ljIGNoYW5nZXMsICpvbmx5KiBzeW1ib2wgcmVuYW1pbmcuIFRoZSBydWxlcyBhcmUgcHJldHR5IGNsZWFyOiByZWZhY3RvcmluZyBjYW4gaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMuIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGRpZmZzIHRob3JvdWdobHkgZm9yIGFueSBzaWducyBvZiByZWFycmFuZ2VtZW50LCBoZWxwZXIgZnVuY3Rpb25zLCBvciBzdGF0ZSBtYW5hZ2VtZW50IGFsdGVyYXRpb25zIHdpdGhpbiB0aGUgbW9kaWZpZWQgZmlsZXMsIGVzcGVjaWFsbHkgYGtlcm5lbC91c2VyX25hbWVzcGFjZS5jYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGlzIGlzIHB1cmVseSBhIHN5bWJvbCByZW5hbWUuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIHRvb2xzIGxpa2UgYGdpdCBkaWZmYCBvciBgcmVhZC1maWxlYCBhbmQgYGdyZXBwZXJgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50fGluc2VydF9leHRlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90ZXN0cy91c2VyX25zX21hcF9rdW5pdC5jPTEzPXN0YXRpYyB2b2lkIHVzZXJfbnNfbWFwX2luc2VydChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxua2VybmVsL3Rlc3RzL3VzZXJfbnNfbWFwX2t1bml0LmMtMjYtXG5rZXJuZWwvdGVzdHMvdXNlcl9uc19tYXBfa3VuaXQuYzoyNzpcdFx0cmV0ID0gdWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudChcdTAwMjZtYXAsIFx1MDAyNmV4dGVudCk7XG5rZXJuZWwvdGVzdHMvdXNlcl9uc19tYXBfa3VuaXQuYy0yOC1cdFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJldCwgMCk7XG4tLVxua2VybmVsL3Rlc3RzL3VzZXJfbnNfbWFwX2t1bml0LmM9NDE9c3RhdGljIHZvaWQgdXNlcl9uc19tYXBfaW5zZXJ0X2V4dGVuZGVkKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5rZXJuZWwvdGVzdHMvdXNlcl9uc19tYXBfa3VuaXQuYy01Ni1cbmtlcm5lbC90ZXN0cy91c2VyX25zX21hcF9rdW5pdC5jOjU3Olx0XHRyZXQgPSB1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50KFx1MDAyNm1hcCwgXHUwMDI2ZXh0ZW50KTtcbmtlcm5lbC90ZXN0cy91c2VyX25zX21hcF9rdW5pdC5jLTU4LVx0XHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmV0LCAwKTtcbi0tXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYz03NDM9c3RhdGljIGJvb2wgbWFwcGluZ3Nfb3ZlcmxhcChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm5ld19tYXAsXG4tLVxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtNzgyLS8qXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzo3ODM6ICogdWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudCAtIFNhZmVseSBpbnNlcnQgYSBuZXcgaWRtYXAgZXh0ZW50IGludG9cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTc4NC0gKiBzdHJ1Y3QgdWlkX2dpZF9tYXAuXG4tLVxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtNzg3LSAqL1xua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM6Nzg4OlZJU0lCTEVfSUZfS1VOSVQgaW50IHVpZF9naWRfbWFwX2luc2VydF9leHRlbnQoc3RydWN0IHVpZF9naWRfbWFwICptYXAsXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy03ODktXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKmV4dGVudClcbi0tXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy04MjQtfVxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM6ODI1OkVYUE9SVF9TWU1CT0xfSUZfS1VOSVQodWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudCk7XG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy04MjYtXG4tLVxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM9OTM4PXN0YXRpYyBzc2l6ZV90IG1hcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Zixcbi0tXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy0xMDUwLVxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM6MTA1MTpcdFx0cmV0ID0gdWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudChcdTAwMjZuZXdfbWFwLCBcdTAwMjZleHRlbnQpO1xua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMTA1Mi1cdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTE1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUga2VybmVsIGFuYWx5c2lzLCBwcmVzZW50ZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gVXNlciBOYW1lc3BhY2VzOiBBIEZvY3VzZWQgSW5zcGVjdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byB6ZXJvIGluIG9uIGBrZXJuZWwvdXNlcl9uYW1lc3BhY2UuY2AuIEZyb20gbWVtb3J5LCB0aGUgY29yZSBvZiB1c2VyIG5hbWVzcGFjZSBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGhvdyBjcmVkZW50aWFscyBhbmQgcGVybWlzc2lvbnMgYXJlIG1hbmFnZWQgd2l0aGluIGEgbmFtZXNwYWNlLCBpcyBwcm9iYWJseSBhcm91bmQgdGhlIDc4MC04OTAgbGluZSByYW5nZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdXNlciBJRHMgYW5kIGdyb3VwIElEcyBhcmUgbWFwcGVkLCBob3cgY2FwYWJpbGl0eSBib3VuZGluZyBzZXRzIGFyZSBhZGp1c3RlZCwgYW5kIHdoZXJlIHRoZSBjcnVjaWFsIGNoZWNrcyByZWxhdGVkIHRvIHJvb3QgcHJpdmlsZWdlcyBhcmUgaW1wbGVtZW50ZWQuIEkgc3VzcGVjdCB0aGlzIHNlY3Rpb24gY29udGFpbnMgdGhlIGNyaXRpY2FsIGxvZ2ljIGZvciBob3cgYSBwcm9jZXNzIGdhaW5zIChvciBsb3NlcykgaXRzIHNwZWNpYWwgcG93ZXJzIHdpdGhpbiBhIHVzZXIgbmFtZXNwYWNlLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGJ1Z3Mgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgbHVya2luZyB0aGVyZS4uLiBJdCYjMzk7cyBhbGwgYWJvdXQgaG93IHRoZXNlIGJvdW5kYXJpZXMgYXJlIHNldCBhbmQgdXBoZWxkLCBhbmQgdGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBmdW4gYmVnaW5zLCByaWdodD8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgYnkgZm9sbG93aW5nIGFueSBmdW5jdGlvbiBjYWxscyBmcm9tIHRoYXQgYXJlYSBhbmQgc2VlIHdoZXJlIHRoZXkgbGVhZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC91c2VyX25hbWVzcGFjZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzgwOlx0fVxuIDc4MTpcdFxuIDc4MjpcdC8qXG4gNzgzOlx0ICogdWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudCAtIFNhZmVseSBpbnNlcnQgYSBuZXcgaWRtYXAgZXh0ZW50IGludG9cbiA3ODQ6XHQgKiBzdHJ1Y3QgdWlkX2dpZF9tYXAuXG4gNzg1Olx0ICogVGFrZXMgY2FyZSB0byBhbGxvY2F0ZSBhIDRLIGJsb2NrIG9mIG1lbW9yeSBpZiB0aGUgbnVtYmVyIG9mIG1hcHBpbmdzIGV4Y2VlZHNcbiA3ODY6XHQgKiBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTLlxuIDc4NzpcdCAqL1xuIDc4ODpcdFZJU0lCTEVfSUZfS1VOSVQgaW50IHVpZF9naWRfbWFwX2luc2VydF9leHRlbnQoc3RydWN0IHVpZF9naWRfbWFwICptYXAsXG4gNzg5Olx0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKmV4dGVudClcbiA3OTA6XHR7XG4gNzkxOlx0XHRzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKmRlc3Q7XG4gNzkyOlx0XG4gNzkzOlx0XHRpZiAobWFwLVx1MDAzZW5yX2V4dGVudHMgPT0gVUlEX0dJRF9NQVBfTUFYX0JBU0VfRVhURU5UUykge1xuIDc5NDpcdFx0XHRzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKmZvcndhcmQ7XG4gNzk1Olx0XG4gNzk2Olx0XHRcdC8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgMzQwIG1hcHBpbmdzLiAqL1xuIDc5NzpcdFx0XHRmb3J3YXJkID0ga21hbGxvY19vYmpzKHN0cnVjdCB1aWRfZ2lkX2V4dGVudCxcbiA3OTg6XHRcdFx0XHRcdCAgICAgICBVSURfR0lEX01BUF9NQVhfRVhURU5UUyk7XG4gNzk5Olx0XHRcdGlmICghZm9yd2FyZClcbiA4MDA6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA4MDE6XHRcbiA4MDI6XHRcdFx0LyogQ29weSBvdmVyIG1lbW9yeS4gT25seSBzZXQgdXAgbWVtb3J5IGZvciB0aGUgZm9yd2FyZCBwb2ludGVyLlxuIDgwMzpcdFx0XHQgKiBEZWZlciB0aGUgbWVtb3J5IHNldHVwIGZvciB0aGUgcmV2ZXJzZSBwb2ludGVyLlxuIDgwNDpcdFx0XHQgKi9cbiA4MDU6XHRcdFx0bWVtY3B5KGZvcndhcmQsIG1hcC1cdTAwM2VleHRlbnQsXG4gODA2Olx0XHRcdCAgICAgICBtYXAtXHUwMDNlbnJfZXh0ZW50cyAqIHNpemVvZihtYXAtXHUwMDNlZXh0ZW50WzBdKSk7XG4gODA3Olx0XG4gODA4Olx0XHRcdG1hcC1cdTAwM2Vmb3J3YXJkID0gZm9yd2FyZDtcbiA4MDk6XHRcdFx0bWFwLVx1MDAzZXJldmVyc2UgPSBOVUxMO1xuIDgxMDpcdFx0fVxuIDgxMTpcdFxuIDgxMjpcdFx0LypcbiA4MTM6XHRcdCAqIG5yX2V4dGVudHMgbXVzdCBiZSB1cGRhdGVkIGJlZm9yZSB0aGUgZXh0ZW50IGFuZCBmb3J3YXJkIGFycmF5cyBhcmVcbiA4MTQ6XHRcdCAqIGFjY2Vzc2VkLCBvdGhlcndpc2UgS1NBTiB3aWxsIGFzc2VydCBhbiBvdXQtb2YtYm91bmRzIGVycm9yLlxuIDgxNTpcdFx0ICovXG4gODE2Olx0XHRtYXAtXHUwMDNlbnJfZXh0ZW50cyYjNDM7JiM0Mzs7XG4gODE3Olx0XHRpZiAobWFwLVx1MDAzZW5yX2V4dGVudHMgXHUwMDNjPSBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTKVxuIDgxODpcdFx0XHRkZXN0ID0gXHUwMDI2bWFwLVx1MDAzZWV4dGVudFttYXAtXHUwMDNlbnJfZXh0ZW50cyAtIDFdO1xuIDgxOTpcdFx0ZWxzZVxuIDgyMDpcdFx0XHRkZXN0ID0gXHUwMDI2bWFwLVx1MDAzZWZvcndhcmRbbWFwLVx1MDAzZW5yX2V4dGVudHMgLSAxXTtcbiA4MjE6XHRcbiA4MjI6XHRcdCpkZXN0ID0gKmV4dGVudDtcbiA4MjM6XHRcdHJldHVybiAwO1xuIDgyNDpcdH1cbiA4MjU6XHRFWFBPUlRfU1lNQk9MX0lGX0tVTklUKHVpZF9naWRfbWFwX2luc2VydF9leHRlbnQpO1xuIDgyNjpcdFxuIDgyNzpcdC8qIGNtcCBmdW5jdGlvbiB0byBzb3J0KCkgZm9yd2FyZCBtYXBwaW5ncyAqL1xuIDgyODpcdHN0YXRpYyBpbnQgY21wX2V4dGVudHNfZm9yd2FyZChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKVxuIDgyOTpcdHtcbiA4MzA6XHRcdGNvbnN0IHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZTEgPSBhO1xuIDgzMTpcdFx0Y29uc3Qgc3RydWN0IHVpZF9naWRfZXh0ZW50ICplMiA9IGI7XG4gODMyOlx0XG4gODMzOlx0XHRpZiAoZTEtXHUwMDNlZmlyc3QgXHUwMDNjIGUyLVx1MDAzZWZpcnN0KVxuIDgzNDpcdFx0XHRyZXR1cm4gLTE7XG4gODM1Olx0XG4gODM2Olx0XHRpZiAoZTEtXHUwMDNlZmlyc3QgXHUwMDNlIGUyLVx1MDAzZWZpcnN0KVxuIDgzNzpcdFx0XHRyZXR1cm4gMTtcbiA4Mzg6XHRcbiA4Mzk6XHRcdHJldHVybiAwO1xuIDg0MDpcdH1cbiA4NDE6XHRcbiA4NDI6XHQvKiBjbXAgZnVuY3Rpb24gdG8gc29ydCgpIHJldmVyc2UgbWFwcGluZ3MgKi9cbiA4NDM6XHRzdGF0aWMgaW50IGNtcF9leHRlbnRzX3JldmVyc2UoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYilcbiA4NDQ6XHR7XG4gODQ1Olx0XHRjb25zdCBzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKmUxID0gYTtcbiA4NDY6XHRcdGNvbnN0IHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZTIgPSBiO1xuIDg0NzpcdFxuIDg0ODpcdFx0aWYgKGUxLVx1MDAzZWxvd2VyX2ZpcnN0IFx1MDAzYyBlMi1cdTAwM2Vsb3dlcl9maXJzdClcbiA4NDk6XHRcdFx0cmV0dXJuIC0xO1xuIDg1MDpcdFxuIDg1MTpcdFx0aWYgKGUxLVx1MDAzZWxvd2VyX2ZpcnN0IFx1MDAzZSBlMi1cdTAwM2Vsb3dlcl9maXJzdClcbiA4NTI6XHRcdFx0cmV0dXJuIDE7XG4gODUzOlx0XG4gODU0Olx0XHRyZXR1cm4gMDtcbiA4NTU6XHR9XG4gODU2Olx0XG4gODU3Olx0LypcbiA4NTg6XHQgKiB1aWRfZ2lkX21hcF9zb3J0IC0gU29ydHMgYW4gYXJyYXkgb2YgaWRtYXAgZW50cmllcy5cbiA4NTk6XHQgKiBDYW4gb25seSBiZSBjYWxsZWQgaWYgbnVtYmVyIG9mIG1hcHBpbmdzIGV4Y2VlZHMgVUlEX0dJRF9NQVBfTUFYX0JBU0VfRVhURU5UUy5cbiA4NjA6XHQgKi9cbiA4NjE6XHRWSVNJQkxFX0lGX0tVTklUIGludCB1aWRfZ2lkX21hcF9zb3J0KHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwKVxuIDg2MjpcdHtcbiA4NjM6XHRcdGlmIChtYXAtXHUwMDNlbnJfZXh0ZW50cyBcdTAwM2M9IFVJRF9HSURfTUFQX01BWF9CQVNFX0VYVEVOVFMpXG4gODY0Olx0XHRcdHJldHVybiAwO1xuIDg2NTpcdFxuIDg2NjpcdFx0LyogU29ydCBmb3J3YXJkIGFycmF5LiAqL1xuIDg2NzpcdFx0c29ydChtYXAtXHUwMDNlZm9yd2FyZCwgbWFwLVx1MDAzZW5yX2V4dGVudHMsIHNpemVvZihzdHJ1Y3QgdWlkX2dpZF9leHRlbnQpLFxuIDg2ODpcdFx0ICAgICBjbXBfZXh0ZW50c19mb3J3YXJkLCBOVUxMKTtcbiA4Njk6XHRcbiA4NzA6XHRcdC8qIE9ubHkgY29weSB0aGUgbWVtb3J5IGZyb20gZm9yd2FyZCB3ZSBhY3R1YWxseSBuZWVkLiAqL1xuIDg3MTpcdFx0bWFwLVx1MDAzZXJldmVyc2UgPSBrbWVtZHVwX2FycmF5KG1hcC1cdTAwM2Vmb3J3YXJkLCBtYXAtXHUwMDNlbnJfZXh0ZW50cyxcbiA4NzI6XHRcdFx0XHRcdCAgICAgc2l6ZW9mKHN0cnVjdCB1aWRfZ2lkX2V4dGVudCksIEdGUF9LRVJORUwpO1xuIDg3MzpcdFx0aWYgKCFtYXAtXHUwMDNlcmV2ZXJzZSlcbiA4NzQ6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gODc1Olx0XG4gODc2Olx0XHQvKiBTb3J0IHJldmVyc2UgYXJyYXkuICovXG4gODc3Olx0XHRzb3J0KG1hcC1cdTAwM2VyZXZlcnNlLCBtYXAtXHUwMDNlbnJfZXh0ZW50cywgc2l6ZW9mKHN0cnVjdCB1aWRfZ2lkX2V4dGVudCksXG4gODc4Olx0XHQgICAgIGNtcF9leHRlbnRzX3JldmVyc2UsIE5VTEwpO1xuIDg3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5MDEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIFVzZXIgTmFtZXNwYWNlcyoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHVzZXIgbmFtZXNwYWNlcyBhbmQgaG93IHRoZXkmIzM5O3JlIHN0cnVjdHVyZWQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGhlYWRlciBmaWxlLCBzcGVjaWZpY2FsbHkgYGluY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaGAuIEkmIzM5O20gZ3Vlc3NpbmcgdGhlIGNvcmUgZGVmaW5pdGlvbnMgYW5kIHN0cnVjdHVyZXMgSSYjMzk7bSBsb29raW5nIGZvciB3aWxsIGJlIGNvbmNlbnRyYXRlZCBhcm91bmQgbGluZXMgMjA1IHRvIDIyMC4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgb3IgcmVsYXRlZCBmdW5jdGlvbiBwcm90b3R5cGVzIHJlc2lkZS4gTGV0JiMzOTtzIHNlZSB3aGF0IGdvb2RpZXMgdGhpcyBzZWN0aW9uIGhvbGRzLi4uIGhvcGVmdWxseSwgdGhpcyB3aWxsIHByb3ZpZGUgdGhlIGNvbnRleHQgSSBuZWVkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC91c2VyX25hbWVzcGFjZS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMDA6XHRleHRlcm4gc3NpemVfdCBwcm9jX3VpZF9tYXBfd3JpdGUoc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7XG4gMjAxOlx0ZXh0ZXJuIHNzaXplX3QgcHJvY19naWRfbWFwX3dyaXRlKHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90ICopO1xuIDIwMjpcdGV4dGVybiBzc2l6ZV90IHByb2NfcHJvamlkX21hcF93cml0ZShzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzaXplX3QsIGxvZmZfdCAqKTtcbiAyMDM6XHRleHRlcm4gc3NpemVfdCBwcm9jX3NldGdyb3Vwc193cml0ZShzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzaXplX3QsIGxvZmZfdCAqKTtcbiAyMDQ6XHRleHRlcm4gaW50IHByb2Nfc2V0Z3JvdXBzX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KTtcbiAyMDU6XHRleHRlcm4gYm9vbCB1c2VybnNfbWF5X3NldGdyb3Vwcyhjb25zdCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zKTtcbiAyMDY6XHRleHRlcm4gYm9vbCBpbl91c2VybnMoY29uc3Qgc3RydWN0IHVzZXJfbmFtZXNwYWNlICphbmNlc3RvcixcbiAyMDc6XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqY2hpbGQpO1xuIDIwODpcdGV4dGVybiBib29sIGN1cnJlbnRfaW5fdXNlcm5zKGNvbnN0IHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdGFyZ2V0X25zKTtcbiAyMDk6XHRzdHJ1Y3QgbnNfY29tbW9uICpuc19nZXRfb3duZXIoc3RydWN0IG5zX2NvbW1vbiAqbnMpO1xuIDIxMDpcdFxuIDIxMTpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19LVU5JVClcbiAyMTI6XHRleHRlcm4gaW50IHVpZF9naWRfbWFwX2luc2VydF9leHRlbnQoc3RydWN0IHVpZF9naWRfbWFwICptYXAsXG4gMjEzOlx0XHRcdFx0XHQgICAgIHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZXh0ZW50KTtcbiAyMTQ6XHRleHRlcm4gaW50IHVpZF9naWRfbWFwX3NvcnQoc3RydWN0IHVpZF9naWRfbWFwICptYXApO1xuIDIxNTpcdCNlbmRpZiAvKiBDT05GSUdfS1VOSVQgKi9cbiAyMTY6XHRcbiAyMTc6XHQjZWxzZVxuIDIxODpcdFxuIDIxOTpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHVzZXJfbmFtZXNwYWNlICpnZXRfdXNlcl9ucyhzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zKVxuIDIyMDpcdHtcbiAyMjE6XHRcdHJldHVybiBcdTAwMjZpbml0X3VzZXJfbnM7XG4gMjIyOlx0fVxuIDIyMzpcdFxuIDIyNDpcdHN0YXRpYyBpbmxpbmUgaW50IGNyZWF0ZV91c2VyX25zKHN0cnVjdCBjcmVkICpuZXcpXG4gMjI1Olx0e1xuIDIyNjpcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMjI3Olx0fVxuIDIyODpcdFxuIDIyOTpcdHN0YXRpYyBpbmxpbmUgaW50IHVuc2hhcmVfdXNlcm5zKHVuc2lnbmVkIGxvbmcgdW5zaGFyZV9mbGFncyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjgxCgkJCQkJCQlvdXRwdXQ6IDExNQoJCQkJCQkJdGhvdWdodHM6IDI5MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgZnV6emluZy4gVGhlIGluaXRpYWwgbG9vayBpbmRpY2F0ZXMgaXQmIzM5O3MgYSByZW5hbWluZyBvcGVyYXRpb24sIHdoaWNoICpzZWVtcyogbGlrZSBhIHNpbXBsZSByZWZhY3RvciwgYnV0IHdlIG5lZWQgdG8gYmUgcmlnb3JvdXMuIEZpcnN0LCBJIG5vdGUgdGhhdCB0aGUgcGF0Y2ggcmVuYW1lcyB0d28gZnVuY3Rpb25zOiBgaW5zZXJ0X2V4dGVudGAgdG8gYHVpZF9naWRfbWFwX2luc2VydF9leHRlbnRgIGFuZCBgc29ydF9pZG1hcHNgIHRvIGB1aWRfZ2lkX21hcF9zb3J0YC4gSXQgYWxzbyBtb2RpZmllcyBhIGhlYWRlciBmaWxlLCBjaGFuZ2luZyB0aGUgYENPTkZJR19VU0VSX05TX01BUF9LVU5JVF9URVNUYCBndWFyZCB0byBgQ09ORklHX0tVTklUYC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uOiAqaXMgdGhpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlPyogTG9va2luZyBhdCB0aGUgZGlmZiwgbm8uIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIHRoZSB1bmRlcmx5aW5nIGxvZ2ljLCBubyBhbHRlcmF0aW9ucyB0byBkYXRhIHN0cnVjdHVyZXMsIGFuZCBubyBuZXcgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkLiBJdCYjMzk7cyAqcHVyZWx5KiBhIHJlbmFtaW5nL3ByZWZpeGluZyBvcGVyYXRpb24sIHNwZWNpZmljYWxseSBmb3IgS1VuaXQgdGVzdCBzeW1ib2xzLgoKTm93LCBsZXQmIzM5O3MgY29uc3VsdCB0aGUgZ3VpZGVsaW5lcy4gVGhlIGNvcmUgcHJpbmNpcGxlIGVtcGhhc2l6ZXMgdGhhdCB3ZSAqbXVzdCogZnV6eiByZWFjaGFibGUsIGV4ZWN1dGFibGUgY29kZS4gVGhlIGd1aWRlbGluZXMgZXhwbGljaXRseSBzdGF0ZSB0aGF0IHdlICpzaG91bGQgbm90KiBibGluZGx5IHRydXN0IGNsYWltcyBvZiAmIzM0O25vIGZ1bmN0aW9uYWwgY2hhbmdlJiMzNDsgb3IgJiMzNDtyZWZhY3RvcmluZy4mIzM0OyBIb3dldmVyLCB0aGV5IGFsc28gZGVmaW5lIHNwZWNpZmljIHNjZW5hcmlvcyB3aGVyZSB3ZSAqc2hvdWxkIG5vdCogZnV6ei4gVGhlc2UgaW5jbHVkZTogbm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlcywgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLCBhbmQgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzLiBSZW5hbWluZyBmdW5jdGlvbiBzeW1ib2xzIHdpdGhvdXQgbW9kaWZ5aW5nIGNvZGUgbG9naWMgc291bmRzIGxpa2Ugb25lIG9mIHRob3NlICpub24tZXhlY3V0YWJsZSBjaGFuZ2VzKiwgcmlnaHQ/CgpJIHJlLXJlYWQgU2VjdGlvbiAyLCBzcGVjaWZpY2FsbHkgdGhlIHNlY3Rpb24gZm9yIGRldGVybWluaW5nIHdoZW4gYFdvcnRoRnV6emluZz1mYWxzZWAuIEl0IGxpc3RzICYjMzQ7Tm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlcywmIzM0OyB3aGljaCBpbmNsdWRlcyBtb2RpZmljYXRpb25zIHRvICYjMzQ7QnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLiYjMzQ7IFRoaXMgc2VlbXMgbGlrZSB0aGUgcmVsZXZhbnQgY2F0ZWdvcnksIGJ1dCBJIGFtIHN0aWxsIG5vdCAxMDAlIHN1cmUuIElzICpwdXJlKiByZW5hbWluZyBhIG5vbi1leGVjdXRhYmxlIGNoYW5nZT8KClRoZW4gSSB0aGluazogZG9lcyB0aGlzIG1hdHRlcj8gSWYgSSB3ZXJlIHRvIGZlZWQgdGhpcyBwYXRjaCB0byBzeXprYWxsZXIsIHdoYXQgd291bGQgaXQgZnV6ej8gU2luY2UgdGhlcmUgYXJlIG5vIGxvZ2ljIGNoYW5nZXMsIG5vIHJlc3RydWN0dXJpbmcgb2YgYWxnb3JpdGhtcywgbm8gbmV3IGFzc2VydGlvbnMsIG5vIGNoYW5nZXMgdG8gZGF0YSBzdHJ1Y3R1cmVzLCBubyBtb2RpZmljYXRpb25zIHRvIGNvbnRyb2wgZmxvdy4uLiBJdCB3b3VsZCBiZSBmdXp6aW5nLi4uIHRoZSByZW5hbWVzPyBUaGF0JiMzOTtzIG5vdCB1c2VmdWwuIEEgcHVyZSBzeW1ib2wgcmVuYW1lLCBvbmNlIGNvbXBpbGVkLCBkb2VzIG5vdCBjaGFuZ2UgdGhlIGdlbmVyYXRlZCBjb2RlLCBsb2dpYywgZGF0YSBzdHJ1Y3R1cmVzIG9yIGV4ZWN1dGlvbiBpbiBhbnkgd2F5LiBUaGUgYmluYXJ5IG91dHB1dCBpcyAxMDAlIGlkZW50aWNhbC4KCkFscmlnaHQsIHJlLXJlYWRpbmcgU2VjdGlvbiAyIGFnYWluLCAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXMmIzM0Oy4gSXQgZ29lcyBvbiB0byBzcGVjaWZ5IGluIFNlY3Rpb24gMywgd2UgbXVzdCByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYCB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIHdoaWNoIGluY2x1ZGVzICYjMzQ7YW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4uLi4mIzM0OywgJiMzNDtBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuJiMzNDssIGFuZCAmIzM0O0FueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zLi4uJiMzNDsuIFRoaXMgcGF0Y2ggaGFzIG5vbmUgb2YgdGhhdC4KClRvIGJlIGV4dHJhIGNlcnRhaW4sIEkgbmVlZCB0byBjaGVjayB0aGUgd2lkZXIgY29udGV4dC4gV2h5IHRoZSByZW5hbWU/IExvb2tpbmcgYXQgdGhlIGBrZXJuZWwvdXNlcl9uYW1lc3BhY2UuY2AgZmlsZSwgd2hlcmUgYFZJU0lCTEVfSUZfS1VOSVRgIGFuZCBgRVhQT1JUX1NZTUJPTF9JRl9LVU5JVGAgYXJlIHVzZWQsIHJldmVhbHMgdGhlIGludGVudDogdGhlc2Ugc3ltYm9scyBhcmUgYmVpbmcgZXhwb3J0ZWQgZm9yIEtVbml0IHRlc3RpbmcuIFRvIGF2b2lkIHBvdGVudGlhbCBjb2xsaXNpb25zIG9yIG5hbWVzcGFjZSBpc3N1ZXMsIGVzcGVjaWFsbHkgd2hlbiBleHBvcnRlZCwgdGhlIHJlbmFtZSBwcm92aWRlcyBhIGNsZWFyIHByZWZpeC4KClRoZSBnb2FsIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLCBhbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMuIEEgcHVyZSByZW5hbWUgd29uJiMzOTt0IHRyaWdnZXIgdGhlc2UuIElmIHRoZXJlIHdlcmUgYSBtaXNtYXRjaCwgdGhlIGNvbXBpbGVyIG9yIGxpbmtlciB3b3VsZCBmYWlsLgoKVG8gYmUgMTAwJSBjZXJ0YWluLCBsZXQmIzM5O3Mgd2FsayB0aHJvdWdoIHRoZSBodW5rczoKCjEuICBIZWFkZXIgRmlsZTogQ2hhbmdpbmcgdGhlIG1hY3JvIGZyb20gYENPTkZJR19VU0VSX05TX01BUF9LVU5JVF9URVNUYCB0byBgQ09ORklHX0tVTklUYCBhbmQgcmVuYW1pbmcgdGhlIHByb3RvdHlwZXMuIFRoaXMgaXMgYSBub24tZnVuY3Rpb25hbCBjaGFuZ2UuCjIuICBLVW5pdCBUZXN0IEZpbGU6IFJlbmFtaW5nIHRoZSBmdW5jdGlvbiBjYWxscyB3aXRoaW4gdGhlIHRlc3QgY2FzZXMuIFRoaXMgZG9lc24mIzM5O3QgY2hhbmdlIHdoYXQgdGhlIHRlc3RzICpkbyosIG9ubHkgdGhlIG5hbWVzIHRoZXkgY2FsbC4KMy4gIFNvdXJjZSBGaWxlIChga2VybmVsL3VzZXJfbmFtZXNwYWNlLmNgKTogUmVuYW1pbmcgZnVuY3Rpb24gZGVmaW5pdGlvbnMgYW5kIGNhbGwgc2l0ZXMsIGFuZCBleHBvcnRpbmcgdGhlIHN5bWJvbHMgd2l0aCB0aGUgbmV3IG5hbWVzLiBBZ2FpbiwgdGhpcyBpcyBhIHN5bWJvbCByZW5hbWluZyB3aXRob3V0IGNoYW5naW5nIGFueSBsb2dpYywgZmxvdyBvciBkYXRhLgoKU28sICpXb3J0aEZ1enppbmcgaXMgZmFsc2UuKiBJdCBpcyBhIG5vbi1leGVjdXRhYmxlLCBwdXJlbHkgY29zbWV0aWMgY2hhbmdlIGFuZCBpcyBhIHJlbmFtaW5nIGV4ZXJjaXNlIHdpdGggbm8gZnVuY3Rpb25hbCBpbXBhY3QuCgpUaGVyZWZvcmUsIGZvciB0aGUgYHNldC1yZXN1bHRzYCBjYWxsLCB0aGUgcGFyYW1ldGVycyBzaG91bGQgYmU6CgoqICAgKipXb3J0aEZ1enppbmc6IGZhbHNlKioKKiAgICoqRm9jdXNTeW1ib2xzOiBcWyBdKioKKiAgICoqRW5hYmxlQ29uZmlnczogXFsgXSoqCiogICAqKlJlYXNvbmluZzoqKiAmIzM0O1RoZSBwYXRjaCBvbmx5IHJlbmFtZXMgZnVuY3Rpb25zIChgaW5zZXJ0X2V4dGVudGAgdG8gYHVpZF9naWRfbWFwX2luc2VydF9leHRlbnRgIGFuZCBgc29ydF9pZG1hcHNgIHRvIGB1aWRfZ2lkX21hcF9zb3J0YCkgdG8gYWRkIHN1YnN5c3RlbSBwcmVmaXhlcyBmb3IgS1VuaXQgc3ltYm9sIGV4cG9ydHMgYW5kIHVwZGF0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgaGVhZGVyIHByb3RvdHlwZXMgYW5kIEtVbml0IHRlc3QKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnNpc3RzIHNvbGVseSBvZiBpZGVudGlmaWVyIHJlbmFtZXMgKHJlbmFtaW5nIGBpbnNlcnRfZXh0ZW50YCB0byBgdWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudGAgYW5kIGBzb3J0X2lkbWFwc2AgdG8gYHVpZF9naWRfbWFwX3NvcnRgKSBhbmQgdXBkYXRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgS1VuaXQgdGVzdCByZWZlcmVuY2VzIGFuZCBoZWFkZXIgZGVjbGFyYXRpb25zLiBJdCBpbnRyb2R1Y2VzIG5vIGZ1bmN0aW9uYWwsIGxvZ2ljYWwsIGNvbnRyb2wtZmxvdywgZGF0YSBzdHJ1Y3R1cmUsIG9yIGFzc2VydGlvbiBjaGFuZ2VzLiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnNpc3RzIHNvbGVseSBvZiBpZGVudGlmaWVyIHJlbmFtZXMgKHJlbmFtaW5nIGBpbnNlcnRfZXh0ZW50YCB0byBgdWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudGAgYW5kIGBzb3J0X2lkbWFwc2AgdG8gYHVpZF9naWRfbWFwX3NvcnRgKSBhbmQgdXBkYXRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgS1VuaXQgdGVzdCByZWZlcmVuY2VzIGFuZCBoZWFkZXIgZGVjbGFyYXRpb25zLiBJdCBpbnRyb2R1Y2VzIG5vIGZ1bmN0aW9uYWwsIGxvZ2ljYWwsIGNvbnRyb2wtZmxvdywgZGF0YSBzdHJ1Y3R1cmUsIG9yIGFzc2VydGlvbiBjaGFuZ2VzLiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEzOjU1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMzo1NDo0MS4yMjYzMjI0OTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTEwNjM1NTE1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnNpc3RzIHNvbGVseSBvZiBpZGVudGlmaWVyIHJlbmFtZXMgKHJlbmFtaW5nIGBpbnNlcnRfZXh0ZW50YCB0byBgdWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudGAgYW5kIGBzb3J0X2lkbWFwc2AgdG8gYHVpZF9naWRfbWFwX3NvcnRgKSBhbmQgdXBkYXRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgS1VuaXQgdGVzdCByZWZlcmVuY2VzIGFuZCBoZWFkZXIgZGVjbGFyYXRpb25zLiBJdCBpbnRyb2R1Y2VzIG5vIGZ1bmN0aW9uYWwsIGxvZ2ljYWwsIGNvbnRyb2wtZmxvdywgZGF0YSBzdHJ1Y3R1cmUsIG9yIGFzc2VydGlvbiBjaGFuZ2VzLiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEzOjU0OjQxLjIyNjMyNzMzNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAxNTYwMzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTNiMTZkZTc1MGUyMjNhNGQxMjJjZWY4MzQ2NzRlOTIyNzg5N2U2OVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCAxMSAxMzo1NDo0MCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzZXJfbmFtZXNwYWNlLmggYi9pbmNsdWRlL2xpbnV4L3VzZXJfbmFtZXNwYWNlLmhcXG5pbmRleCA2MzMxNTc3ODFlZGNiLi45MTIzMjA1Mzc3NWQ4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaFxcbkBAIC0yMDgsMTAgKzIwOCwxMSBAQCBleHRlcm4gYm9vbCBpbl91c2VybnMoY29uc3Qgc3RydWN0IHVzZXJfbmFtZXNwYWNlICphbmNlc3RvcixcXG4gZXh0ZXJuIGJvb2wgY3VycmVudF9pbl91c2VybnMoY29uc3Qgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp0YXJnZXRfbnMpO1xcbiBzdHJ1Y3QgbnNfY29tbW9uICpuc19nZXRfb3duZXIoc3RydWN0IG5zX2NvbW1vbiAqbnMpO1xcbiBcXG4tI2lmIElTX0VOQUJMRUQoQ09ORklHX1VTRVJfTlNfTUFQX0tVTklUX1RFU1QpXFxuLWV4dGVybiBpbnQgaW5zZXJ0X2V4dGVudChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgc3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQpO1xcbi1leHRlcm4gaW50IHNvcnRfaWRtYXBzKHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwKTtcXG4tI2VuZGlmIC8qIENPTkZJR19VU0VSX05TX01BUF9LVU5JVF9URVNUICovXFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19LVU5JVClcXG4rZXh0ZXJuIGludCB1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50KHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZXh0ZW50KTtcXG4rZXh0ZXJuIGludCB1aWRfZ2lkX21hcF9zb3J0KHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwKTtcXG4rI2VuZGlmIC8qIENPTkZJR19LVU5JVCAqL1xcbiBcXG4gI2Vsc2VcXG4gXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC90ZXN0cy91c2VyX25zX21hcF9rdW5pdC5jIGIva2VybmVsL3Rlc3RzL3VzZXJfbnNfbWFwX2t1bml0LmNcXG5pbmRleCAyNGMyMWU0M2EzNmM5Li4wMzNkY2NjNmE1MzViIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC90ZXN0cy91c2VyX25zX21hcF9rdW5pdC5jXFxuKysrIGIva2VybmVsL3Rlc3RzL3VzZXJfbnNfbWFwX2t1bml0LmNcXG5AQCAtMjQsNyArMjQsNyBAQCBzdGF0aWMgdm9pZCB1c2VyX25zX21hcF9pbnNlcnQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRcXHRleHRlbnQubG93ZXJfZmlyc3QgPSBpICogMTAwO1xcbiBcXHRcXHRleHRlbnQuY291bnQgPSA1O1xcbiBcXG4tXFx0XFx0cmV0ID0gaW5zZXJ0X2V4dGVudChcXHUwMDI2bWFwLCBcXHUwMDI2ZXh0ZW50KTtcXG4rXFx0XFx0cmV0ID0gdWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudChcXHUwMDI2bWFwLCBcXHUwMDI2ZXh0ZW50KTtcXG4gXFx0XFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJldCwgMCk7XFxuIFxcdH1cXG4gXFxuQEAgLTU0LDE0ICs1NCwxNCBAQCBzdGF0aWMgdm9pZCB1c2VyX25zX21hcF9pbnNlcnRfZXh0ZW5kZWQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRcXHRleHRlbnQubG93ZXJfZmlyc3QgPSB2YWx1ZSAqIDEwMDtcXG4gXFx0XFx0ZXh0ZW50LmNvdW50ID0gNTtcXG4gXFxuLVxcdFxcdHJldCA9IGluc2VydF9leHRlbnQoXFx1MDAyNm1hcCwgXFx1MDAyNmV4dGVudCk7XFxuK1xcdFxcdHJldCA9IHVpZF9naWRfbWFwX2luc2VydF9leHRlbnQoXFx1MDAyNm1hcCwgXFx1MDAyNmV4dGVudCk7XFxuIFxcdFxcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByZXQsIDApO1xcbiBcXHR9XFxuIFxcbiBcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgbWFwLm5yX2V4dGVudHMsIE5SX0VYVEVOVFMpO1xcbiBcXG4gXFx0LyogTm93IHNvcnQgdGhlIG1hcCB0byBzZXQgdXAgcmV2ZXJzZSBtYXBwaW5nICovXFxuLVxcdHJldCA9IHNvcnRfaWRtYXBzKFxcdTAwMjZtYXApO1xcbitcXHRyZXQgPSB1aWRfZ2lkX21hcF9zb3J0KFxcdTAwMjZtYXApO1xcbiBcXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmV0LCAwKTtcXG4gXFx0S1VOSVRfQVNTRVJUX05PVF9FUlJfT1JfTlVMTCh0ZXN0LCBtYXAucmV2ZXJzZSk7XFxuIFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jXFxuaW5kZXggZjljYmI0YjkyYjQ4Ny4uOThiMDI3OWI2Y2M2ZSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuY1xcbisrKyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jXFxuQEAgLTc4MCwxMiArNzgwLDEzIEBAIHN0YXRpYyBib29sIG1hcHBpbmdzX292ZXJsYXAoc3RydWN0IHVpZF9naWRfbWFwICpuZXdfbWFwLFxcbiB9XFxuIFxcbiAvKlxcbi0gKiBpbnNlcnRfZXh0ZW50IC0gU2FmZWx5IGluc2VydCBhIG5ldyBpZG1hcCBleHRlbnQgaW50byBzdHJ1Y3QgdWlkX2dpZF9tYXAuXFxuKyAqIHVpZF9naWRfbWFwX2luc2VydF9leHRlbnQgLSBTYWZlbHkgaW5zZXJ0IGEgbmV3IGlkbWFwIGV4dGVudCBpbnRvXFxuKyAqIHN0cnVjdCB1aWRfZ2lkX21hcC5cXG4gICogVGFrZXMgY2FyZSB0byBhbGxvY2F0ZSBhIDRLIGJsb2NrIG9mIG1lbW9yeSBpZiB0aGUgbnVtYmVyIG9mIG1hcHBpbmdzIGV4Y2VlZHNcXG4gICogVUlEX0dJRF9NQVBfTUFYX0JBU0VfRVhURU5UUy5cXG4gICovXFxuLVZJU0lCTEVfSUZfS1VOSVQgaW50IGluc2VydF9leHRlbnQoc3RydWN0IHVpZF9naWRfbWFwICptYXAsXFxuLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZXh0ZW50KVxcbitWSVNJQkxFX0lGX0tVTklUIGludCB1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50KHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQpXFxuIHtcXG4gXFx0c3RydWN0IHVpZF9naWRfZXh0ZW50ICpkZXN0O1xcbiBcXG5AQCAtODIxLDcgKzgyMiw3IEBAIFZJU0lCTEVfSUZfS1VOSVQgaW50IGluc2VydF9leHRlbnQoc3RydWN0IHVpZF9naWRfbWFwICptYXAsXFxuIFxcdCpkZXN0ID0gKmV4dGVudDtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4tRVhQT1JUX1NZTUJPTF9JRl9LVU5JVChpbnNlcnRfZXh0ZW50KTtcXG4rRVhQT1JUX1NZTUJPTF9JRl9LVU5JVCh1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50KTtcXG4gXFxuIC8qIGNtcCBmdW5jdGlvbiB0byBzb3J0KCkgZm9yd2FyZCBtYXBwaW5ncyAqL1xcbiBzdGF0aWMgaW50IGNtcF9leHRlbnRzX2ZvcndhcmQoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYilcXG5AQCAtODU0LDEwICs4NTUsMTAgQEAgc3RhdGljIGludCBjbXBfZXh0ZW50c19yZXZlcnNlKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpXFxuIH1cXG4gXFxuIC8qXFxuLSAqIHNvcnRfaWRtYXBzIC0gU29ydHMgYW4gYXJyYXkgb2YgaWRtYXAgZW50cmllcy5cXG4rICogdWlkX2dpZF9tYXBfc29ydCAtIFNvcnRzIGFuIGFycmF5IG9mIGlkbWFwIGVudHJpZXMuXFxuICAqIENhbiBvbmx5IGJlIGNhbGxlZCBpZiBudW1iZXIgb2YgbWFwcGluZ3MgZXhjZWVkcyBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTLlxcbiAgKi9cXG4tVklTSUJMRV9JRl9LVU5JVCBpbnQgc29ydF9pZG1hcHMoc3RydWN0IHVpZF9naWRfbWFwICptYXApXFxuK1ZJU0lCTEVfSUZfS1VOSVQgaW50IHVpZF9naWRfbWFwX3NvcnQoc3RydWN0IHVpZF9naWRfbWFwICptYXApXFxuIHtcXG4gXFx0aWYgKG1hcC1cXHUwMDNlbnJfZXh0ZW50cyBcXHUwMDNjPSBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG5AQCAtODc4LDcgKzg3OSw3IEBAIFZJU0lCTEVfSUZfS1VOSVQgaW50IHNvcnRfaWRtYXBzKHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwKVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4tRVhQT1JUX1NZTUJPTF9JRl9LVU5JVChzb3J0X2lkbWFwcyk7XFxuK0VYUE9SVF9TWU1CT0xfSUZfS1VOSVQodWlkX2dpZF9tYXBfc29ydCk7XFxuIFxcbiAvKipcXG4gICogdmVyaWZ5X3Jvb3RfbWFwKCkgLSBjaGVjayB0aGUgdWlkIDAgbWFwcGluZ1xcbkBAIC0xMDQ3LDcgKzEwNDgsNyBAQCBzdGF0aWMgc3NpemVfdCBtYXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXFxuIFxcdFxcdCAgICAobmV4dF9saW5lICE9IE5VTEwpKVxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFxuLVxcdFxcdHJldCA9IGluc2VydF9leHRlbnQoXFx1MDAyNm5ld19tYXAsIFxcdTAwMjZleHRlbnQpO1xcbitcXHRcXHRyZXQgPSB1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50KFxcdTAwMjZuZXdfbWFwLCBcXHUwMDI2ZXh0ZW50KTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbkBAIC0xMDkxLDcgKzEwOTIsNyBAQCBzdGF0aWMgc3NpemVfdCBtYXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXFxuIFxcdCAqIElmIHdlIHdhbnQgdG8gdXNlIGJpbmFyeSBzZWFyY2ggZm9yIGxvb2t1cCwgdGhpcyBjbG9uZXMgdGhlIGV4dGVudFxcbiBcXHQgKiBhcnJheSBhbmQgc29ydHMgYm90aCBjb3BpZXMuXFxuIFxcdCAqL1xcbi1cXHRyZXQgPSBzb3J0X2lkbWFwcyhcXHUwMDI2bmV3X21hcCk7XFxuK1xcdHJldCA9IHVpZF9naWRfbWFwX3NvcnQoXFx1MDAyNm5ld19tYXApO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMzo1NDo0MS43Mjg2NDAzOTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI4NjA0MDIwNzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25zaXN0cyBzb2xlbHkgb2YgaWRlbnRpZmllciByZW5hbWVzIChyZW5hbWluZyBgaW5zZXJ0X2V4dGVudGAgdG8gYHVpZF9naWRfbWFwX2luc2VydF9leHRlbnRgIGFuZCBgc29ydF9pZG1hcHNgIHRvIGB1aWRfZ2lkX21hcF9zb3J0YCkgYW5kIHVwZGF0aW5nIHRoZSBjb3JyZXNwb25kaW5nIEtVbml0IHRlc3QgcmVmZXJlbmNlcyBhbmQgaGVhZGVyIGRlY2xhcmF0aW9ucy4gSXQgaW50cm9kdWNlcyBubyBmdW5jdGlvbmFsLCBsb2dpY2FsLCBjb250cm9sLWZsb3csIGRhdGEgc3RydWN0dXJlLCBvciBhc3NlcnRpb24gY2hhbmdlcy4gVGhlcmVmb3JlLCBpdCBkb2VzIG5vdCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGUzYjE2ZGU3NTBlMjIzYTRkMTIyY2VmODM0Njc0ZTkyMjc4OTdlNjlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAxMzo1NDo0MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaCBiL2luY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaFxuaW5kZXggNjMzMTU3NzgxZWRjYi4uOTEyMzIwNTM3NzVkOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaFxuKysrIGIvaW5jbHVkZS9saW51eC91c2VyX25hbWVzcGFjZS5oXG5AQCAtMjA4LDEwICsyMDgsMTEgQEAgZXh0ZXJuIGJvb2wgaW5fdXNlcm5zKGNvbnN0IHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqYW5jZXN0b3IsXG4gZXh0ZXJuIGJvb2wgY3VycmVudF9pbl91c2VybnMoY29uc3Qgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp0YXJnZXRfbnMpO1xuIHN0cnVjdCBuc19jb21tb24gKm5zX2dldF9vd25lcihzdHJ1Y3QgbnNfY29tbW9uICpucyk7XG4gXG4tI2lmIElTX0VOQUJMRUQoQ09ORklHX1VTRVJfTlNfTUFQX0tVTklUX1RFU1QpXG4tZXh0ZXJuIGludCBpbnNlcnRfZXh0ZW50KHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCBzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKmV4dGVudCk7XG4tZXh0ZXJuIGludCBzb3J0X2lkbWFwcyhzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCk7XG4tI2VuZGlmIC8qIENPTkZJR19VU0VSX05TX01BUF9LVU5JVF9URVNUICovXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0tVTklUKVxuK2V4dGVybiBpbnQgdWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCxcbitcdFx0XHRcdCAgICAgc3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQpO1xuK2V4dGVybiBpbnQgdWlkX2dpZF9tYXBfc29ydChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCk7XG4rI2VuZGlmIC8qIENPTkZJR19LVU5JVCAqL1xuIFxuICNlbHNlXG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL3Rlc3RzL3VzZXJfbnNfbWFwX2t1bml0LmMgYi9rZXJuZWwvdGVzdHMvdXNlcl9uc19tYXBfa3VuaXQuY1xuaW5kZXggMjRjMjFlNDNhMzZjOS4uMDMzZGNjYzZhNTM1YiAxMDA2NDRcbi0tLSBhL2tlcm5lbC90ZXN0cy91c2VyX25zX21hcF9rdW5pdC5jXG4rKysgYi9rZXJuZWwvdGVzdHMvdXNlcl9uc19tYXBfa3VuaXQuY1xuQEAgLTI0LDcgKzI0LDcgQEAgc3RhdGljIHZvaWQgdXNlcl9uc19tYXBfaW5zZXJ0KHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdFx0ZXh0ZW50Lmxvd2VyX2ZpcnN0ID0gaSAqIDEwMDtcbiBcdFx0ZXh0ZW50LmNvdW50ID0gNTtcbiBcbi1cdFx0cmV0ID0gaW5zZXJ0X2V4dGVudChcdTAwMjZtYXAsIFx1MDAyNmV4dGVudCk7XG4rXHRcdHJldCA9IHVpZF9naWRfbWFwX2luc2VydF9leHRlbnQoXHUwMDI2bWFwLCBcdTAwMjZleHRlbnQpO1xuIFx0XHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmV0LCAwKTtcbiBcdH1cbiBcbkBAIC01NCwxNCArNTQsMTQgQEAgc3RhdGljIHZvaWQgdXNlcl9uc19tYXBfaW5zZXJ0X2V4dGVuZGVkKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdFx0ZXh0ZW50Lmxvd2VyX2ZpcnN0ID0gdmFsdWUgKiAxMDA7XG4gXHRcdGV4dGVudC5jb3VudCA9IDU7XG4gXG4tXHRcdHJldCA9IGluc2VydF9leHRlbnQoXHUwMDI2bWFwLCBcdTAwMjZleHRlbnQpO1xuK1x0XHRyZXQgPSB1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50KFx1MDAyNm1hcCwgXHUwMDI2ZXh0ZW50KTtcbiBcdFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJldCwgMCk7XG4gXHR9XG4gXG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgbWFwLm5yX2V4dGVudHMsIE5SX0VYVEVOVFMpO1xuIFxuIFx0LyogTm93IHNvcnQgdGhlIG1hcCB0byBzZXQgdXAgcmV2ZXJzZSBtYXBwaW5nICovXG4tXHRyZXQgPSBzb3J0X2lkbWFwcyhcdTAwMjZtYXApO1xuK1x0cmV0ID0gdWlkX2dpZF9tYXBfc29ydChcdTAwMjZtYXApO1xuIFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJldCwgMCk7XG4gXHRLVU5JVF9BU1NFUlRfTk9UX0VSUl9PUl9OVUxMKHRlc3QsIG1hcC5yZXZlcnNlKTtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jXG5pbmRleCBmOWNiYjRiOTJiNDg3Li45OGIwMjc5YjZjYzZlIDEwMDY0NFxuLS0tIGEva2VybmVsL3VzZXJfbmFtZXNwYWNlLmNcbisrKyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jXG5AQCAtNzgwLDEyICs3ODAsMTMgQEAgc3RhdGljIGJvb2wgbWFwcGluZ3Nfb3ZlcmxhcChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm5ld19tYXAsXG4gfVxuIFxuIC8qXG4tICogaW5zZXJ0X2V4dGVudCAtIFNhZmVseSBpbnNlcnQgYSBuZXcgaWRtYXAgZXh0ZW50IGludG8gc3RydWN0IHVpZF9naWRfbWFwLlxuKyAqIHVpZF9naWRfbWFwX2luc2VydF9leHRlbnQgLSBTYWZlbHkgaW5zZXJ0IGEgbmV3IGlkbWFwIGV4dGVudCBpbnRvXG4rICogc3RydWN0IHVpZF9naWRfbWFwLlxuICAqIFRha2VzIGNhcmUgdG8gYWxsb2NhdGUgYSA0SyBibG9jayBvZiBtZW1vcnkgaWYgdGhlIG51bWJlciBvZiBtYXBwaW5ncyBleGNlZWRzXG4gICogVUlEX0dJRF9NQVBfTUFYX0JBU0VfRVhURU5UUy5cbiAgKi9cbi1WSVNJQkxFX0lGX0tVTklUIGludCBpbnNlcnRfZXh0ZW50KHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLFxuLVx0XHRcdFx0ICAgc3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQpXG4rVklTSUJMRV9JRl9LVU5JVCBpbnQgdWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCxcbitcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZXh0ZW50KVxuIHtcbiBcdHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZGVzdDtcbiBcbkBAIC04MjEsNyArODIyLDcgQEAgVklTSUJMRV9JRl9LVU5JVCBpbnQgaW5zZXJ0X2V4dGVudChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCxcbiBcdCpkZXN0ID0gKmV4dGVudDtcbiBcdHJldHVybiAwO1xuIH1cbi1FWFBPUlRfU1lNQk9MX0lGX0tVTklUKGluc2VydF9leHRlbnQpO1xuK0VYUE9SVF9TWU1CT0xfSUZfS1VOSVQodWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudCk7XG4gXG4gLyogY21wIGZ1bmN0aW9uIHRvIHNvcnQoKSBmb3J3YXJkIG1hcHBpbmdzICovXG4gc3RhdGljIGludCBjbXBfZXh0ZW50c19mb3J3YXJkKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpXG5AQCAtODU0LDEwICs4NTUsMTAgQEAgc3RhdGljIGludCBjbXBfZXh0ZW50c19yZXZlcnNlKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpXG4gfVxuIFxuIC8qXG4tICogc29ydF9pZG1hcHMgLSBTb3J0cyBhbiBhcnJheSBvZiBpZG1hcCBlbnRyaWVzLlxuKyAqIHVpZF9naWRfbWFwX3NvcnQgLSBTb3J0cyBhbiBhcnJheSBvZiBpZG1hcCBlbnRyaWVzLlxuICAqIENhbiBvbmx5IGJlIGNhbGxlZCBpZiBudW1iZXIgb2YgbWFwcGluZ3MgZXhjZWVkcyBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTLlxuICAqL1xuLVZJU0lCTEVfSUZfS1VOSVQgaW50IHNvcnRfaWRtYXBzKHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwKVxuK1ZJU0lCTEVfSUZfS1VOSVQgaW50IHVpZF9naWRfbWFwX3NvcnQoc3RydWN0IHVpZF9naWRfbWFwICptYXApXG4ge1xuIFx0aWYgKG1hcC1cdTAwM2Vucl9leHRlbnRzIFx1MDAzYz0gVUlEX0dJRF9NQVBfTUFYX0JBU0VfRVhURU5UUylcbiBcdFx0cmV0dXJuIDA7XG5AQCAtODc4LDcgKzg3OSw3IEBAIFZJU0lCTEVfSUZfS1VOSVQgaW50IHNvcnRfaWRtYXBzKHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwKVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuLUVYUE9SVF9TWU1CT0xfSUZfS1VOSVQoc29ydF9pZG1hcHMpO1xuK0VYUE9SVF9TWU1CT0xfSUZfS1VOSVQodWlkX2dpZF9tYXBfc29ydCk7XG4gXG4gLyoqXG4gICogdmVyaWZ5X3Jvb3RfbWFwKCkgLSBjaGVjayB0aGUgdWlkIDAgbWFwcGluZ1xuQEAgLTEwNDcsNyArMTA0OCw3IEBAIHN0YXRpYyBzc2l6ZV90IG1hcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdFx0ICAgIChuZXh0X2xpbmUgIT0gTlVMTCkpXG4gXHRcdFx0Z290byBvdXQ7XG4gXG4tXHRcdHJldCA9IGluc2VydF9leHRlbnQoXHUwMDI2bmV3X21hcCwgXHUwMDI2ZXh0ZW50KTtcbitcdFx0cmV0ID0gdWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudChcdTAwMjZuZXdfbWFwLCBcdTAwMjZleHRlbnQpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHRyZXQgPSAtRUlOVkFMO1xuQEAgLTEwOTEsNyArMTA5Miw3IEBAIHN0YXRpYyBzc2l6ZV90IG1hcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdCAqIElmIHdlIHdhbnQgdG8gdXNlIGJpbmFyeSBzZWFyY2ggZm9yIGxvb2t1cCwgdGhpcyBjbG9uZXMgdGhlIGV4dGVudFxuIFx0ICogYXJyYXkgYW5kIHNvcnRzIGJvdGggY29waWVzLlxuIFx0ICovXG4tXHRyZXQgPSBzb3J0X2lkbWFwcyhcdTAwMjZuZXdfbWFwKTtcbitcdHJldCA9IHVpZF9naWRfbWFwX3NvcnQoXHUwMDI2bmV3X21hcCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dDtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEzOjU0OjQxLjcyODY0MTc2M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgyMjkyOTMxNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQ29kZSBQYXRjaCBmb3IgUG90ZW50aWFsIEltcGFjdCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS4gSXQgbG9va3MgbGlrZSB3ZSdyZSBkZWFsaW5nIHdpdGggYSBkaWZmIHRoYXQgcHJpbWFyaWx5IGltcGFjdHMgZmlsZXMgcmVsYXRlZCB0byB0aGUgYHVzZXJfbmFtZXNwYWNlYC4gSSBzZWUgbW9kaWZpY2F0aW9ucyBpbiBgaW5jbHVkZS9saW51eC91c2VyX25hbWVzcGFjZS5oYCwgYGtlcm5lbC90ZXN0cy91c2VyX25zX21hcF9rdW5pdC5jYCwgYW5kIGBrZXJuZWwvdXNlcl9uYW1lc3BhY2UuY2AuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgc3ltYm9sIHJlbmFtaW5nOiBgaW5zZXJ0X2V4dGVudGAgaXMgbm93IGB1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50YCwgYW5kIGBzb3J0X2lkbWFwc2AgaGFzIGJlY29tZSBgdWlkX2dpZF9tYXBfc29ydGAuIEFsc28sIGAjaWYgSVNfRU5BQkxFRChDT05GSUdfVVNFUl9OU19NQVBfS1VOSVRfVEVTVClgIGhhcyBjaGFuZ2VkIHRvIGAjaWYgSVNfRU5BQkxFRChDT05GSUdfS1VOSVQpYC5cblxuTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyAqbWlnaHQqIGJlIGEgc3RyYWlnaHRmb3J3YXJkIHJlZmFjdG9yaW5nLiBIb3dldmVyLCBJIGtub3cgYmV0dGVyIHRoYW4gdG8gYXNzdW1lLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBrZXJuZWwncyBjb21wbGV4aXRpZXMuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGVyZSBhcmUgKm5vKiBsb2dpYyBjaGFuZ2VzLCAqb25seSogc3ltYm9sIHJlbmFtaW5nLiBUaGUgcnVsZXMgYXJlIHByZXR0eSBjbGVhcjogcmVmYWN0b3JpbmcgY2FuIGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzLiBTbywgSSBuZWVkIHRvIGNoZWNrIHRoZSBkaWZmcyB0aG9yb3VnaGx5IGZvciBhbnkgc2lnbnMgb2YgcmVhcnJhbmdlbWVudCwgaGVscGVyIGZ1bmN0aW9ucywgb3Igc3RhdGUgbWFuYWdlbWVudCBhbHRlcmF0aW9ucyB3aXRoaW4gdGhlIG1vZGlmaWVkIGZpbGVzLCBlc3BlY2lhbGx5IGBrZXJuZWwvdXNlcl9uYW1lc3BhY2UuY2AuIEkgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyBwdXJlbHkgYSBzeW1ib2wgcmVuYW1lLiBJJ2xsIG5lZWQgdG8gdXNlIHRvb2xzIGxpa2UgYGdpdCBkaWZmYCBvciBgcmVhZC1maWxlYCBhbmQgYGdyZXBwZXJgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM5MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEzOjU0OjQ5Ljk1NzkzNzU4NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTU3NTExOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50fGluc2VydF9leHRlbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdGVzdHMvdXNlcl9uc19tYXBfa3VuaXQuYz0xMz1zdGF0aWMgdm9pZCB1c2VyX25zX21hcF9pbnNlcnQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxua2VybmVsL3Rlc3RzL3VzZXJfbnNfbWFwX2t1bml0LmMtMjYtXFxua2VybmVsL3Rlc3RzL3VzZXJfbnNfbWFwX2t1bml0LmM6Mjc6XFx0XFx0cmV0ID0gdWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudChcXHUwMDI2bWFwLCBcXHUwMDI2ZXh0ZW50KTtcXG5rZXJuZWwvdGVzdHMvdXNlcl9uc19tYXBfa3VuaXQuYy0yOC1cXHRcXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmV0LCAwKTtcXG4tLVxcbmtlcm5lbC90ZXN0cy91c2VyX25zX21hcF9rdW5pdC5jPTQxPXN0YXRpYyB2b2lkIHVzZXJfbnNfbWFwX2luc2VydF9leHRlbmRlZChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5rZXJuZWwvdGVzdHMvdXNlcl9uc19tYXBfa3VuaXQuYy01Ni1cXG5rZXJuZWwvdGVzdHMvdXNlcl9uc19tYXBfa3VuaXQuYzo1NzpcXHRcXHRyZXQgPSB1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50KFxcdTAwMjZtYXAsIFxcdTAwMjZleHRlbnQpO1xcbmtlcm5lbC90ZXN0cy91c2VyX25zX21hcF9rdW5pdC5jLTU4LVxcdFxcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByZXQsIDApO1xcbi0tXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM9NzQzPXN0YXRpYyBib29sIG1hcHBpbmdzX292ZXJsYXAoc3RydWN0IHVpZF9naWRfbWFwICpuZXdfbWFwLFxcbi0tXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtNzgyLS8qXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM6NzgzOiAqIHVpZF9naWRfbWFwX2luc2VydF9leHRlbnQgLSBTYWZlbHkgaW5zZXJ0IGEgbmV3IGlkbWFwIGV4dGVudCBpbnRvXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtNzg0LSAqIHN0cnVjdCB1aWRfZ2lkX21hcC5cXG4tLVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTc4Ny0gKi9cXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzo3ODg6VklTSUJMRV9JRl9LVU5JVCBpbnQgdWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCxcXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy03ODktXFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZXh0ZW50KVxcbi0tXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtODI0LX1cXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzo4MjU6RVhQT1JUX1NZTUJPTF9JRl9LVU5JVCh1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50KTtcXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy04MjYtXFxuLS1cXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYz05Mzg9c3RhdGljIHNzaXplX3QgbWFwX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxcbi0tXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMTA1MC1cXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzoxMDUxOlxcdFxcdHJldCA9IHVpZF9naWRfbWFwX2luc2VydF9leHRlbnQoXFx1MDAyNm5ld19tYXAsIFxcdTAwMjZleHRlbnQpO1xcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTEwNTItXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEzOjU0OjUwLjAxOTUxOTk5NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MTIzMjU3NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBrZXJuZWwgYW5hbHlzaXMsIHByZXNlbnRlZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIFVzZXIgTmFtZXNwYWNlczogQSBGb2N1c2VkIEluc3BlY3Rpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIHplcm8gaW4gb24gYGtlcm5lbC91c2VyX25hbWVzcGFjZS5jYC4gRnJvbSBtZW1vcnksIHRoZSBjb3JlIG9mIHVzZXIgbmFtZXNwYWNlIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgaG93IGNyZWRlbnRpYWxzIGFuZCBwZXJtaXNzaW9ucyBhcmUgbWFuYWdlZCB3aXRoaW4gYSBuYW1lc3BhY2UsIGlzIHByb2JhYmx5IGFyb3VuZCB0aGUgNzgwLTg5MCBsaW5lIHJhbmdlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB1c2VyIElEcyBhbmQgZ3JvdXAgSURzIGFyZSBtYXBwZWQsIGhvdyBjYXBhYmlsaXR5IGJvdW5kaW5nIHNldHMgYXJlIGFkanVzdGVkLCBhbmQgd2hlcmUgdGhlIGNydWNpYWwgY2hlY2tzIHJlbGF0ZWQgdG8gcm9vdCBwcml2aWxlZ2VzIGFyZSBpbXBsZW1lbnRlZC4gSSBzdXNwZWN0IHRoaXMgc2VjdGlvbiBjb250YWlucyB0aGUgY3JpdGljYWwgbG9naWMgZm9yIGhvdyBhIHByb2Nlc3MgZ2FpbnMgKG9yIGxvc2VzKSBpdHMgc3BlY2lhbCBwb3dlcnMgd2l0aGluIGEgdXNlciBuYW1lc3BhY2UuIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBidWdzIG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIGx1cmtpbmcgdGhlcmUuLi4gSXQncyBhbGwgYWJvdXQgaG93IHRoZXNlIGJvdW5kYXJpZXMgYXJlIHNldCBhbmQgdXBoZWxkLCBhbmQgdGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIGZ1biBiZWdpbnMsIHJpZ2h0PyBJJ2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGZvbGxvd2luZyBhbnkgZnVuY3Rpb24gY2FsbHMgZnJvbSB0aGF0IGFyZWEgYW5kIHNlZSB3aGVyZSB0aGV5IGxlYWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMTUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMzo1NDo1Mi42MzE4NDg0NDFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDYyNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3VzZXJfbmFtZXNwYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzgwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc4MDpcXHR9XFxuIDc4MTpcXHRcXG4gNzgyOlxcdC8qXFxuIDc4MzpcXHQgKiB1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50IC0gU2FmZWx5IGluc2VydCBhIG5ldyBpZG1hcCBleHRlbnQgaW50b1xcbiA3ODQ6XFx0ICogc3RydWN0IHVpZF9naWRfbWFwLlxcbiA3ODU6XFx0ICogVGFrZXMgY2FyZSB0byBhbGxvY2F0ZSBhIDRLIGJsb2NrIG9mIG1lbW9yeSBpZiB0aGUgbnVtYmVyIG9mIG1hcHBpbmdzIGV4Y2VlZHNcXG4gNzg2OlxcdCAqIFVJRF9HSURfTUFQX01BWF9CQVNFX0VYVEVOVFMuXFxuIDc4NzpcXHQgKi9cXG4gNzg4OlxcdFZJU0lCTEVfSUZfS1VOSVQgaW50IHVpZF9naWRfbWFwX2luc2VydF9leHRlbnQoc3RydWN0IHVpZF9naWRfbWFwICptYXAsXFxuIDc4OTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQpXFxuIDc5MDpcXHR7XFxuIDc5MTpcXHRcXHRzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKmRlc3Q7XFxuIDc5MjpcXHRcXG4gNzkzOlxcdFxcdGlmIChtYXAtXFx1MDAzZW5yX2V4dGVudHMgPT0gVUlEX0dJRF9NQVBfTUFYX0JBU0VfRVhURU5UUykge1xcbiA3OTQ6XFx0XFx0XFx0c3RydWN0IHVpZF9naWRfZXh0ZW50ICpmb3J3YXJkO1xcbiA3OTU6XFx0XFxuIDc5NjpcXHRcXHRcXHQvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIDM0MCBtYXBwaW5ncy4gKi9cXG4gNzk3OlxcdFxcdFxcdGZvcndhcmQgPSBrbWFsbG9jX29ianMoc3RydWN0IHVpZF9naWRfZXh0ZW50LFxcbiA3OTg6XFx0XFx0XFx0XFx0XFx0ICAgICAgIFVJRF9HSURfTUFQX01BWF9FWFRFTlRTKTtcXG4gNzk5OlxcdFxcdFxcdGlmICghZm9yd2FyZClcXG4gODAwOlxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA4MDE6XFx0XFxuIDgwMjpcXHRcXHRcXHQvKiBDb3B5IG92ZXIgbWVtb3J5LiBPbmx5IHNldCB1cCBtZW1vcnkgZm9yIHRoZSBmb3J3YXJkIHBvaW50ZXIuXFxuIDgwMzpcXHRcXHRcXHQgKiBEZWZlciB0aGUgbWVtb3J5IHNldHVwIGZvciB0aGUgcmV2ZXJzZSBwb2ludGVyLlxcbiA4MDQ6XFx0XFx0XFx0ICovXFxuIDgwNTpcXHRcXHRcXHRtZW1jcHkoZm9yd2FyZCwgbWFwLVxcdTAwM2VleHRlbnQsXFxuIDgwNjpcXHRcXHRcXHQgICAgICAgbWFwLVxcdTAwM2Vucl9leHRlbnRzICogc2l6ZW9mKG1hcC1cXHUwMDNlZXh0ZW50WzBdKSk7XFxuIDgwNzpcXHRcXG4gODA4OlxcdFxcdFxcdG1hcC1cXHUwMDNlZm9yd2FyZCA9IGZvcndhcmQ7XFxuIDgwOTpcXHRcXHRcXHRtYXAtXFx1MDAzZXJldmVyc2UgPSBOVUxMO1xcbiA4MTA6XFx0XFx0fVxcbiA4MTE6XFx0XFxuIDgxMjpcXHRcXHQvKlxcbiA4MTM6XFx0XFx0ICogbnJfZXh0ZW50cyBtdXN0IGJlIHVwZGF0ZWQgYmVmb3JlIHRoZSBleHRlbnQgYW5kIGZvcndhcmQgYXJyYXlzIGFyZVxcbiA4MTQ6XFx0XFx0ICogYWNjZXNzZWQsIG90aGVyd2lzZSBLU0FOIHdpbGwgYXNzZXJ0IGFuIG91dC1vZi1ib3VuZHMgZXJyb3IuXFxuIDgxNTpcXHRcXHQgKi9cXG4gODE2OlxcdFxcdG1hcC1cXHUwMDNlbnJfZXh0ZW50cysrO1xcbiA4MTc6XFx0XFx0aWYgKG1hcC1cXHUwMDNlbnJfZXh0ZW50cyBcXHUwMDNjPSBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTKVxcbiA4MTg6XFx0XFx0XFx0ZGVzdCA9IFxcdTAwMjZtYXAtXFx1MDAzZWV4dGVudFttYXAtXFx1MDAzZW5yX2V4dGVudHMgLSAxXTtcXG4gODE5OlxcdFxcdGVsc2VcXG4gODIwOlxcdFxcdFxcdGRlc3QgPSBcXHUwMDI2bWFwLVxcdTAwM2Vmb3J3YXJkW21hcC1cXHUwMDNlbnJfZXh0ZW50cyAtIDFdO1xcbiA4MjE6XFx0XFxuIDgyMjpcXHRcXHQqZGVzdCA9ICpleHRlbnQ7XFxuIDgyMzpcXHRcXHRyZXR1cm4gMDtcXG4gODI0OlxcdH1cXG4gODI1OlxcdEVYUE9SVF9TWU1CT0xfSUZfS1VOSVQodWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudCk7XFxuIDgyNjpcXHRcXG4gODI3OlxcdC8qIGNtcCBmdW5jdGlvbiB0byBzb3J0KCkgZm9yd2FyZCBtYXBwaW5ncyAqL1xcbiA4Mjg6XFx0c3RhdGljIGludCBjbXBfZXh0ZW50c19mb3J3YXJkKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpXFxuIDgyOTpcXHR7XFxuIDgzMDpcXHRcXHRjb25zdCBzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKmUxID0gYTtcXG4gODMxOlxcdFxcdGNvbnN0IHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZTIgPSBiO1xcbiA4MzI6XFx0XFxuIDgzMzpcXHRcXHRpZiAoZTEtXFx1MDAzZWZpcnN0IFxcdTAwM2MgZTItXFx1MDAzZWZpcnN0KVxcbiA4MzQ6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiA4MzU6XFx0XFxuIDgzNjpcXHRcXHRpZiAoZTEtXFx1MDAzZWZpcnN0IFxcdTAwM2UgZTItXFx1MDAzZWZpcnN0KVxcbiA4Mzc6XFx0XFx0XFx0cmV0dXJuIDE7XFxuIDgzODpcXHRcXG4gODM5OlxcdFxcdHJldHVybiAwO1xcbiA4NDA6XFx0fVxcbiA4NDE6XFx0XFxuIDg0MjpcXHQvKiBjbXAgZnVuY3Rpb24gdG8gc29ydCgpIHJldmVyc2UgbWFwcGluZ3MgKi9cXG4gODQzOlxcdHN0YXRpYyBpbnQgY21wX2V4dGVudHNfcmV2ZXJzZShjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKVxcbiA4NDQ6XFx0e1xcbiA4NDU6XFx0XFx0Y29uc3Qgc3RydWN0IHVpZF9naWRfZXh0ZW50ICplMSA9IGE7XFxuIDg0NjpcXHRcXHRjb25zdCBzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKmUyID0gYjtcXG4gODQ3OlxcdFxcbiA4NDg6XFx0XFx0aWYgKGUxLVxcdTAwM2Vsb3dlcl9maXJzdCBcXHUwMDNjIGUyLVxcdTAwM2Vsb3dlcl9maXJzdClcXG4gODQ5OlxcdFxcdFxcdHJldHVybiAtMTtcXG4gODUwOlxcdFxcbiA4NTE6XFx0XFx0aWYgKGUxLVxcdTAwM2Vsb3dlcl9maXJzdCBcXHUwMDNlIGUyLVxcdTAwM2Vsb3dlcl9maXJzdClcXG4gODUyOlxcdFxcdFxcdHJldHVybiAxO1xcbiA4NTM6XFx0XFxuIDg1NDpcXHRcXHRyZXR1cm4gMDtcXG4gODU1OlxcdH1cXG4gODU2OlxcdFxcbiA4NTc6XFx0LypcXG4gODU4OlxcdCAqIHVpZF9naWRfbWFwX3NvcnQgLSBTb3J0cyBhbiBhcnJheSBvZiBpZG1hcCBlbnRyaWVzLlxcbiA4NTk6XFx0ICogQ2FuIG9ubHkgYmUgY2FsbGVkIGlmIG51bWJlciBvZiBtYXBwaW5ncyBleGNlZWRzIFVJRF9HSURfTUFQX01BWF9CQVNFX0VYVEVOVFMuXFxuIDg2MDpcXHQgKi9cXG4gODYxOlxcdFZJU0lCTEVfSUZfS1VOSVQgaW50IHVpZF9naWRfbWFwX3NvcnQoc3RydWN0IHVpZF9naWRfbWFwICptYXApXFxuIDg2MjpcXHR7XFxuIDg2MzpcXHRcXHRpZiAobWFwLVxcdTAwM2Vucl9leHRlbnRzIFxcdTAwM2M9IFVJRF9HSURfTUFQX01BWF9CQVNFX0VYVEVOVFMpXFxuIDg2NDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gODY1OlxcdFxcbiA4NjY6XFx0XFx0LyogU29ydCBmb3J3YXJkIGFycmF5LiAqL1xcbiA4Njc6XFx0XFx0c29ydChtYXAtXFx1MDAzZWZvcndhcmQsIG1hcC1cXHUwMDNlbnJfZXh0ZW50cywgc2l6ZW9mKHN0cnVjdCB1aWRfZ2lkX2V4dGVudCksXFxuIDg2ODpcXHRcXHQgICAgIGNtcF9leHRlbnRzX2ZvcndhcmQsIE5VTEwpO1xcbiA4Njk6XFx0XFxuIDg3MDpcXHRcXHQvKiBPbmx5IGNvcHkgdGhlIG1lbW9yeSBmcm9tIGZvcndhcmQgd2UgYWN0dWFsbHkgbmVlZC4gKi9cXG4gODcxOlxcdFxcdG1hcC1cXHUwMDNlcmV2ZXJzZSA9IGttZW1kdXBfYXJyYXkobWFwLVxcdTAwM2Vmb3J3YXJkLCBtYXAtXFx1MDAzZW5yX2V4dGVudHMsXFxuIDg3MjpcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZihzdHJ1Y3QgdWlkX2dpZF9leHRlbnQpLCBHRlBfS0VSTkVMKTtcXG4gODczOlxcdFxcdGlmICghbWFwLVxcdTAwM2VyZXZlcnNlKVxcbiA4NzQ6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDg3NTpcXHRcXG4gODc2OlxcdFxcdC8qIFNvcnQgcmV2ZXJzZSBhcnJheS4gKi9cXG4gODc3OlxcdFxcdHNvcnQobWFwLVxcdTAwM2VyZXZlcnNlLCBtYXAtXFx1MDAzZW5yX2V4dGVudHMsIHNpemVvZihzdHJ1Y3QgdWlkX2dpZF9leHRlbnQpLFxcbiA4Nzg6XFx0XFx0ICAgICBjbXBfZXh0ZW50c19yZXZlcnNlLCBOVUxMKTtcXG4gODc5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMzo1NDo1Mi42MzE5NTY4NjJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTA5OTQwOTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIFVzZXIgTmFtZXNwYWNlcyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdXNlciBuYW1lc3BhY2VzIGFuZCBob3cgdGhleSdyZSBzdHJ1Y3R1cmVkLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBoZWFkZXIgZmlsZSwgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL2xpbnV4L3VzZXJfbmFtZXNwYWNlLmhgLiBJJ20gZ3Vlc3NpbmcgdGhlIGNvcmUgZGVmaW5pdGlvbnMgYW5kIHN0cnVjdHVyZXMgSSdtIGxvb2tpbmcgZm9yIHdpbGwgYmUgY29uY2VudHJhdGVkIGFyb3VuZCBsaW5lcyAyMDUgdG8gMjIwLiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgc3RydWN0dXJlIGRlZmluaXRpb25zIG9yIHJlbGF0ZWQgZnVuY3Rpb24gcHJvdG90eXBlcyByZXNpZGUuIExldCdzIHNlZSB3aGF0IGdvb2RpZXMgdGhpcyBzZWN0aW9uIGhvbGRzLi4uIGhvcGVmdWxseSwgdGhpcyB3aWxsIHByb3ZpZGUgdGhlIGNvbnRleHQgSSBuZWVkIVxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTAxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMzo1NDo1NS41NDE5MDA5NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyMDAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMDA6XFx0ZXh0ZXJuIHNzaXplX3QgcHJvY191aWRfbWFwX3dyaXRlKHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90ICopO1xcbiAyMDE6XFx0ZXh0ZXJuIHNzaXplX3QgcHJvY19naWRfbWFwX3dyaXRlKHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90ICopO1xcbiAyMDI6XFx0ZXh0ZXJuIHNzaXplX3QgcHJvY19wcm9qaWRfbWFwX3dyaXRlKHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90ICopO1xcbiAyMDM6XFx0ZXh0ZXJuIHNzaXplX3QgcHJvY19zZXRncm91cHNfd3JpdGUoc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7XFxuIDIwNDpcXHRleHRlcm4gaW50IHByb2Nfc2V0Z3JvdXBzX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KTtcXG4gMjA1OlxcdGV4dGVybiBib29sIHVzZXJuc19tYXlfc2V0Z3JvdXBzKGNvbnN0IHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnMpO1xcbiAyMDY6XFx0ZXh0ZXJuIGJvb2wgaW5fdXNlcm5zKGNvbnN0IHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqYW5jZXN0b3IsXFxuIDIwNzpcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHVzZXJfbmFtZXNwYWNlICpjaGlsZCk7XFxuIDIwODpcXHRleHRlcm4gYm9vbCBjdXJyZW50X2luX3VzZXJucyhjb25zdCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnRhcmdldF9ucyk7XFxuIDIwOTpcXHRzdHJ1Y3QgbnNfY29tbW9uICpuc19nZXRfb3duZXIoc3RydWN0IG5zX2NvbW1vbiAqbnMpO1xcbiAyMTA6XFx0XFxuIDIxMTpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfS1VOSVQpXFxuIDIxMjpcXHRleHRlcm4gaW50IHVpZF9naWRfbWFwX2luc2VydF9leHRlbnQoc3RydWN0IHVpZF9naWRfbWFwICptYXAsXFxuIDIxMzpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZXh0ZW50KTtcXG4gMjE0OlxcdGV4dGVybiBpbnQgdWlkX2dpZF9tYXBfc29ydChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCk7XFxuIDIxNTpcXHQjZW5kaWYgLyogQ09ORklHX0tVTklUICovXFxuIDIxNjpcXHRcXG4gMjE3OlxcdCNlbHNlXFxuIDIxODpcXHRcXG4gMjE5OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHVzZXJfbmFtZXNwYWNlICpnZXRfdXNlcl9ucyhzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zKVxcbiAyMjA6XFx0e1xcbiAyMjE6XFx0XFx0cmV0dXJuIFxcdTAwMjZpbml0X3VzZXJfbnM7XFxuIDIyMjpcXHR9XFxuIDIyMzpcXHRcXG4gMjI0OlxcdHN0YXRpYyBpbmxpbmUgaW50IGNyZWF0ZV91c2VyX25zKHN0cnVjdCBjcmVkICpuZXcpXFxuIDIyNTpcXHR7XFxuIDIyNjpcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjI3OlxcdH1cXG4gMjI4OlxcdFxcbiAyMjk6XFx0c3RhdGljIGlubGluZSBpbnQgdW5zaGFyZV91c2VybnModW5zaWduZWQgbG9uZyB1bnNoYXJlX2ZsYWdzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMzo1NDo1NS41NDE5NzM1NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0NzkwNjU5NzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHRhc2sgYXQgaGFuZCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCB3YXJyYW50cyBmdXp6aW5nLiBUaGUgaW5pdGlhbCBsb29rIGluZGljYXRlcyBpdCdzIGEgcmVuYW1pbmcgb3BlcmF0aW9uLCB3aGljaCAqc2VlbXMqIGxpa2UgYSBzaW1wbGUgcmVmYWN0b3IsIGJ1dCB3ZSBuZWVkIHRvIGJlIHJpZ29yb3VzLiBGaXJzdCwgSSBub3RlIHRoYXQgdGhlIHBhdGNoIHJlbmFtZXMgdHdvIGZ1bmN0aW9uczogYGluc2VydF9leHRlbnRgIHRvIGB1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50YCBhbmQgYHNvcnRfaWRtYXBzYCB0byBgdWlkX2dpZF9tYXBfc29ydGAuIEl0IGFsc28gbW9kaWZpZXMgYSBoZWFkZXIgZmlsZSwgY2hhbmdpbmcgdGhlIGBDT05GSUdfVVNFUl9OU19NQVBfS1VOSVRfVEVTVGAgZ3VhcmQgdG8gYENPTkZJR19LVU5JVGAuIE15IGltbWVkaWF0ZSBxdWVzdGlvbjogKmlzIHRoaXMgYSBmdW5jdGlvbmFsIGNoYW5nZT8qIExvb2tpbmcgYXQgdGhlIGRpZmYsIG5vLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byB0aGUgdW5kZXJseWluZyBsb2dpYywgbm8gYWx0ZXJhdGlvbnMgdG8gZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgbm8gbmV3IGFzc2VydGlvbnMgaW50cm9kdWNlZC4gSXQncyAqcHVyZWx5KiBhIHJlbmFtaW5nL3ByZWZpeGluZyBvcGVyYXRpb24sIHNwZWNpZmljYWxseSBmb3IgS1VuaXQgdGVzdCBzeW1ib2xzLlxuXG5Ob3csIGxldCdzIGNvbnN1bHQgdGhlIGd1aWRlbGluZXMuIFRoZSBjb3JlIHByaW5jaXBsZSBlbXBoYXNpemVzIHRoYXQgd2UgKm11c3QqIGZ1enogcmVhY2hhYmxlLCBleGVjdXRhYmxlIGNvZGUuIFRoZSBndWlkZWxpbmVzIGV4cGxpY2l0bHkgc3RhdGUgdGhhdCB3ZSAqc2hvdWxkIG5vdCogYmxpbmRseSB0cnVzdCBjbGFpbXMgb2YgXCJubyBmdW5jdGlvbmFsIGNoYW5nZVwiIG9yIFwicmVmYWN0b3JpbmcuXCIgSG93ZXZlciwgdGhleSBhbHNvIGRlZmluZSBzcGVjaWZpYyBzY2VuYXJpb3Mgd2hlcmUgd2UgKnNob3VsZCBub3QqIGZ1enouIFRoZXNlIGluY2x1ZGU6IG5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXMsIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSwgYW5kIHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocy4gUmVuYW1pbmcgZnVuY3Rpb24gc3ltYm9scyB3aXRob3V0IG1vZGlmeWluZyBjb2RlIGxvZ2ljIHNvdW5kcyBsaWtlIG9uZSBvZiB0aG9zZSAqbm9uLWV4ZWN1dGFibGUgY2hhbmdlcyosIHJpZ2h0P1xuXG5JIHJlLXJlYWQgU2VjdGlvbiAyLCBzcGVjaWZpY2FsbHkgdGhlIHNlY3Rpb24gZm9yIGRldGVybWluaW5nIHdoZW4gYFdvcnRoRnV6emluZz1mYWxzZWAuIEl0IGxpc3RzIFwiTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlcyxcIiB3aGljaCBpbmNsdWRlcyBtb2RpZmljYXRpb25zIHRvIFwiQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlwiIFRoaXMgc2VlbXMgbGlrZSB0aGUgcmVsZXZhbnQgY2F0ZWdvcnksIGJ1dCBJIGFtIHN0aWxsIG5vdCAxMDAlIHN1cmUuIElzICpwdXJlKiByZW5hbWluZyBhIG5vbi1leGVjdXRhYmxlIGNoYW5nZT9cblxuVGhlbiBJIHRoaW5rOiBkb2VzIHRoaXMgbWF0dGVyPyBJZiBJIHdlcmUgdG8gZmVlZCB0aGlzIHBhdGNoIHRvIHN5emthbGxlciwgd2hhdCB3b3VsZCBpdCBmdXp6PyBTaW5jZSB0aGVyZSBhcmUgbm8gbG9naWMgY2hhbmdlcywgbm8gcmVzdHJ1Y3R1cmluZyBvZiBhbGdvcml0aG1zLCBubyBuZXcgYXNzZXJ0aW9ucywgbm8gY2hhbmdlcyB0byBkYXRhIHN0cnVjdHVyZXMsIG5vIG1vZGlmaWNhdGlvbnMgdG8gY29udHJvbCBmbG93Li4uIEl0IHdvdWxkIGJlIGZ1enppbmcuLi4gdGhlIHJlbmFtZXM/IFRoYXQncyBub3QgdXNlZnVsLiBBIHB1cmUgc3ltYm9sIHJlbmFtZSwgb25jZSBjb21waWxlZCwgZG9lcyBub3QgY2hhbmdlIHRoZSBnZW5lcmF0ZWQgY29kZSwgbG9naWMsIGRhdGEgc3RydWN0dXJlcyBvciBleGVjdXRpb24gaW4gYW55IHdheS4gVGhlIGJpbmFyeSBvdXRwdXQgaXMgMTAwJSBpZGVudGljYWwuXG5cbkFscmlnaHQsIHJlLXJlYWRpbmcgU2VjdGlvbiAyIGFnYWluLCBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXNcIi4gSXQgZ29lcyBvbiB0byBzcGVjaWZ5IGluIFNlY3Rpb24gMywgd2UgbXVzdCByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYCB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIHdoaWNoIGluY2x1ZGVzIFwiYW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4uLi5cIiwgXCJBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXCIsIGFuZCBcIkFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zLi4uXCIuIFRoaXMgcGF0Y2ggaGFzIG5vbmUgb2YgdGhhdC5cblxuVG8gYmUgZXh0cmEgY2VydGFpbiwgSSBuZWVkIHRvIGNoZWNrIHRoZSB3aWRlciBjb250ZXh0LiBXaHkgdGhlIHJlbmFtZT8gTG9va2luZyBhdCB0aGUgYGtlcm5lbC91c2VyX25hbWVzcGFjZS5jYCBmaWxlLCB3aGVyZSBgVklTSUJMRV9JRl9LVU5JVGAgYW5kIGBFWFBPUlRfU1lNQk9MX0lGX0tVTklUYCBhcmUgdXNlZCwgcmV2ZWFscyB0aGUgaW50ZW50OiB0aGVzZSBzeW1ib2xzIGFyZSBiZWluZyBleHBvcnRlZCBmb3IgS1VuaXQgdGVzdGluZy4gVG8gYXZvaWQgcG90ZW50aWFsIGNvbGxpc2lvbnMgb3IgbmFtZXNwYWNlIGlzc3VlcywgZXNwZWNpYWxseSB3aGVuIGV4cG9ydGVkLCB0aGUgcmVuYW1lIHByb3ZpZGVzIGEgY2xlYXIgcHJlZml4LlxuXG5UaGUgZ29hbCBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywgYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zLiBBIHB1cmUgcmVuYW1lIHdvbid0IHRyaWdnZXIgdGhlc2UuIElmIHRoZXJlIHdlcmUgYSBtaXNtYXRjaCwgdGhlIGNvbXBpbGVyIG9yIGxpbmtlciB3b3VsZCBmYWlsLlxuXG5UbyBiZSAxMDAlIGNlcnRhaW4sIGxldCdzIHdhbGsgdGhyb3VnaCB0aGUgaHVua3M6XG5cbjEuICBIZWFkZXIgRmlsZTogQ2hhbmdpbmcgdGhlIG1hY3JvIGZyb20gYENPTkZJR19VU0VSX05TX01BUF9LVU5JVF9URVNUYCB0byBgQ09ORklHX0tVTklUYCBhbmQgcmVuYW1pbmcgdGhlIHByb3RvdHlwZXMuIFRoaXMgaXMgYSBub24tZnVuY3Rpb25hbCBjaGFuZ2UuXG4yLiAgS1VuaXQgVGVzdCBGaWxlOiBSZW5hbWluZyB0aGUgZnVuY3Rpb24gY2FsbHMgd2l0aGluIHRoZSB0ZXN0IGNhc2VzLiBUaGlzIGRvZXNuJ3QgY2hhbmdlIHdoYXQgdGhlIHRlc3RzICpkbyosIG9ubHkgdGhlIG5hbWVzIHRoZXkgY2FsbC5cbjMuICBTb3VyY2UgRmlsZSAoYGtlcm5lbC91c2VyX25hbWVzcGFjZS5jYCk6IFJlbmFtaW5nIGZ1bmN0aW9uIGRlZmluaXRpb25zIGFuZCBjYWxsIHNpdGVzLCBhbmQgZXhwb3J0aW5nIHRoZSBzeW1ib2xzIHdpdGggdGhlIG5ldyBuYW1lcy4gQWdhaW4sIHRoaXMgaXMgYSBzeW1ib2wgcmVuYW1pbmcgd2l0aG91dCBjaGFuZ2luZyBhbnkgbG9naWMsIGZsb3cgb3IgZGF0YS5cblxuU28sICpXb3J0aEZ1enppbmcgaXMgZmFsc2UuKiBJdCBpcyBhIG5vbi1leGVjdXRhYmxlLCBwdXJlbHkgY29zbWV0aWMgY2hhbmdlIGFuZCBpcyBhIHJlbmFtaW5nIGV4ZXJjaXNlIHdpdGggbm8gZnVuY3Rpb25hbCBpbXBhY3QuXG5cblRoZXJlZm9yZSwgZm9yIHRoZSBgc2V0LXJlc3VsdHNgIGNhbGwsIHRoZSBwYXJhbWV0ZXJzIHNob3VsZCBiZTpcblxuKiAgICoqV29ydGhGdXp6aW5nOiBmYWxzZSoqXG4qICAgKipGb2N1c1N5bWJvbHM6IFxcWyBdKipcbiogICAqKkVuYWJsZUNvbmZpZ3M6IFxcWyBdKipcbiogICAqKlJlYXNvbmluZzoqKiBcIlRoZSBwYXRjaCBvbmx5IHJlbmFtZXMgZnVuY3Rpb25zIChgaW5zZXJ0X2V4dGVudGAgdG8gYHVpZF9naWRfbWFwX2luc2VydF9leHRlbnRgIGFuZCBgc29ydF9pZG1hcHNgIHRvIGB1aWRfZ2lkX21hcF9zb3J0YCkgdG8gYWRkIHN1YnN5c3RlbSBwcmVmaXhlcyBmb3IgS1VuaXQgc3ltYm9sIGV4cG9ydHMgYW5kIHVwZGF0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgaGVhZGVyIHByb3RvdHlwZXMgYW5kIEtVbml0IHRlc3RcblxuIiwiSW5wdXRUb2tlbnMiOjg2ODEsIk91dHB1dFRva2VucyI6MTE1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEzOjU1OjEwLjMzMjYzNjE4NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnNpc3RzIHNvbGVseSBvZiBpZGVudGlmaWVyIHJlbmFtZXMgKHJlbmFtaW5nIGBpbnNlcnRfZXh0ZW50YCB0byBgdWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudGAgYW5kIGBzb3J0X2lkbWFwc2AgdG8gYHVpZF9naWRfbWFwX3NvcnRgKSBhbmQgdXBkYXRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgS1VuaXQgdGVzdCByZWZlcmVuY2VzIGFuZCBoZWFkZXIgZGVjbGFyYXRpb25zLiBJdCBpbnRyb2R1Y2VzIG5vIGZ1bmN0aW9uYWwsIGxvZ2ljYWwsIGNvbnRyb2wtZmxvdywgZGF0YSBzdHJ1Y3R1cmUsIG9yIGFzc2VydGlvbiBjaGFuZ2VzLiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnNpc3RzIHNvbGVseSBvZiBpZGVudGlmaWVyIHJlbmFtZXMgKHJlbmFtaW5nIGBpbnNlcnRfZXh0ZW50YCB0byBgdWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudGAgYW5kIGBzb3J0X2lkbWFwc2AgdG8gYHVpZF9naWRfbWFwX3NvcnRgKSBhbmQgdXBkYXRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgS1VuaXQgdGVzdCByZWZlcmVuY2VzIGFuZCBoZWFkZXIgZGVjbGFyYXRpb25zLiBJdCBpbnRyb2R1Y2VzIG5vIGZ1bmN0aW9uYWwsIGxvZ2ljYWwsIGNvbnRyb2wtZmxvdywgZGF0YSBzdHJ1Y3R1cmUsIG9yIGFzc2VydGlvbiBjaGFuZ2VzLiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEzOjU1OjEwLjMzMjY2Mjg4NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5259b[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 13:32:56 +0000 UTC FinishedAt: 2026-09-11 13:55:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEzOjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uc2lzdHMgc29sZWx5IG9mIGlkZW50aWZpZXIgcmVuYW1lcyAocmVuYW1pbmcgYGluc2VydF9leHRlbnRgIHRvIGB1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50YCBhbmQgYHNvcnRfaWRtYXBzYCB0byBgdWlkX2dpZF9tYXBfc29ydGApIGFuZCB1cGRhdGluZyB0aGUgY29ycmVzcG9uZGluZyBLVW5pdCB0ZXN0IHJlZmVyZW5jZXMgYW5kIGhlYWRlciBkZWNsYXJhdGlvbnMuIEl0IGludHJvZHVjZXMgbm8gZnVuY3Rpb25hbCwgbG9naWNhbCwgY29udHJvbC1mbG93LCBkYXRhIHN0cnVjdHVyZSwgb3IgYXNzZXJ0aW9uIGNoYW5nZXMuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3Qgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMzo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGUzYjE2ZGU3NTBlMjIzYTRkMTIyY2VmODM0Njc0ZTkyMjc4OTdlNjlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAxMzo1NDo0MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzZXJfbmFtZXNwYWNlLmggYi9pbmNsdWRlL2xpbnV4L3VzZXJfbmFtZXNwYWNlLmhcbmluZGV4IDYzMzE1Nzc4MWVkY2IuLjkxMjMyMDUzNzc1ZDggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3VzZXJfbmFtZXNwYWNlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaFxuQEAgLTIwOCwxMCAmIzQzOzIwOCwxMSBAQCBleHRlcm4gYm9vbCBpbl91c2VybnMoY29uc3Qgc3RydWN0IHVzZXJfbmFtZXNwYWNlICphbmNlc3RvcixcbiBleHRlcm4gYm9vbCBjdXJyZW50X2luX3VzZXJucyhjb25zdCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnRhcmdldF9ucyk7XG4gc3RydWN0IG5zX2NvbW1vbiAqbnNfZ2V0X293bmVyKHN0cnVjdCBuc19jb21tb24gKm5zKTtcbiBcbi0jaWYgSVNfRU5BQkxFRChDT05GSUdfVVNFUl9OU19NQVBfS1VOSVRfVEVTVClcbi1leHRlcm4gaW50IGluc2VydF9leHRlbnQoc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZXh0ZW50KTtcbi1leHRlcm4gaW50IHNvcnRfaWRtYXBzKHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwKTtcbi0jZW5kaWYgLyogQ09ORklHX1VTRVJfTlNfTUFQX0tVTklUX1RFU1QgKi9cbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0tVTklUKVxuJiM0MztleHRlcm4gaW50IHVpZF9naWRfbWFwX2luc2VydF9leHRlbnQoc3RydWN0IHVpZF9naWRfbWFwICptYXAsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKmV4dGVudCk7XG4mIzQzO2V4dGVybiBpbnQgdWlkX2dpZF9tYXBfc29ydChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCk7XG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfS1VOSVQgKi9cbiBcbiAjZWxzZVxuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC90ZXN0cy91c2VyX25zX21hcF9rdW5pdC5jIGIva2VybmVsL3Rlc3RzL3VzZXJfbnNfbWFwX2t1bml0LmNcbmluZGV4IDI0YzIxZTQzYTM2YzkuLjAzM2RjY2M2YTUzNWIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvdGVzdHMvdXNlcl9uc19tYXBfa3VuaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3Rlc3RzL3VzZXJfbnNfbWFwX2t1bml0LmNcbkBAIC0yNCw3ICYjNDM7MjQsNyBAQCBzdGF0aWMgdm9pZCB1c2VyX25zX21hcF9pbnNlcnQoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRleHRlbnQubG93ZXJfZmlyc3QgPSBpICogMTAwO1xuIFx0XHRleHRlbnQuY291bnQgPSA1O1xuIFxuLVx0XHRyZXQgPSBpbnNlcnRfZXh0ZW50KFx1MDAyNm1hcCwgXHUwMDI2ZXh0ZW50KTtcbiYjNDM7XHRcdHJldCA9IHVpZF9naWRfbWFwX2luc2VydF9leHRlbnQoXHUwMDI2bWFwLCBcdTAwMjZleHRlbnQpO1xuIFx0XHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmV0LCAwKTtcbiBcdH1cbiBcbkBAIC01NCwxNCAmIzQzOzU0LDE0IEBAIHN0YXRpYyB2b2lkIHVzZXJfbnNfbWFwX2luc2VydF9leHRlbmRlZChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRcdGV4dGVudC5sb3dlcl9maXJzdCA9IHZhbHVlICogMTAwO1xuIFx0XHRleHRlbnQuY291bnQgPSA1O1xuIFxuLVx0XHRyZXQgPSBpbnNlcnRfZXh0ZW50KFx1MDAyNm1hcCwgXHUwMDI2ZXh0ZW50KTtcbiYjNDM7XHRcdHJldCA9IHVpZF9naWRfbWFwX2luc2VydF9leHRlbnQoXHUwMDI2bWFwLCBcdTAwMjZleHRlbnQpO1xuIFx0XHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmV0LCAwKTtcbiBcdH1cbiBcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBtYXAubnJfZXh0ZW50cywgTlJfRVhURU5UUyk7XG4gXG4gXHQvKiBOb3cgc29ydCB0aGUgbWFwIHRvIHNldCB1cCByZXZlcnNlIG1hcHBpbmcgKi9cbi1cdHJldCA9IHNvcnRfaWRtYXBzKFx1MDAyNm1hcCk7XG4mIzQzO1x0cmV0ID0gdWlkX2dpZF9tYXBfc29ydChcdTAwMjZtYXApO1xuIFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJldCwgMCk7XG4gXHRLVU5JVF9BU1NFUlRfTk9UX0VSUl9PUl9OVUxMKHRlc3QsIG1hcC5yZXZlcnNlKTtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jXG5pbmRleCBmOWNiYjRiOTJiNDg3Li45OGIwMjc5YjZjYzZlIDEwMDY0NFxuLS0tIGEva2VybmVsL3VzZXJfbmFtZXNwYWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jXG5AQCAtNzgwLDEyICYjNDM7NzgwLDEzIEBAIHN0YXRpYyBib29sIG1hcHBpbmdzX292ZXJsYXAoc3RydWN0IHVpZF9naWRfbWFwICpuZXdfbWFwLFxuIH1cbiBcbiAvKlxuLSAqIGluc2VydF9leHRlbnQgLSBTYWZlbHkgaW5zZXJ0IGEgbmV3IGlkbWFwIGV4dGVudCBpbnRvIHN0cnVjdCB1aWRfZ2lkX21hcC5cbiYjNDM7ICogdWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudCAtIFNhZmVseSBpbnNlcnQgYSBuZXcgaWRtYXAgZXh0ZW50IGludG9cbiYjNDM7ICogc3RydWN0IHVpZF9naWRfbWFwLlxuICAqIFRha2VzIGNhcmUgdG8gYWxsb2NhdGUgYSA0SyBibG9jayBvZiBtZW1vcnkgaWYgdGhlIG51bWJlciBvZiBtYXBwaW5ncyBleGNlZWRzXG4gICogVUlEX0dJRF9NQVBfTUFYX0JBU0VfRVhURU5UUy5cbiAgKi9cbi1WSVNJQkxFX0lGX0tVTklUIGludCBpbnNlcnRfZXh0ZW50KHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLFxuLVx0XHRcdFx0ICAgc3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQpXG4mIzQzO1ZJU0lCTEVfSUZfS1VOSVQgaW50IHVpZF9naWRfbWFwX2luc2VydF9leHRlbnQoc3RydWN0IHVpZF9naWRfbWFwICptYXAsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgc3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQpXG4ge1xuIFx0c3RydWN0IHVpZF9naWRfZXh0ZW50ICpkZXN0O1xuIFxuQEAgLTgyMSw3ICYjNDM7ODIyLDcgQEAgVklTSUJMRV9JRl9LVU5JVCBpbnQgaW5zZXJ0X2V4dGVudChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCxcbiBcdCpkZXN0ID0gKmV4dGVudDtcbiBcdHJldHVybiAwO1xuIH1cbi1FWFBPUlRfU1lNQk9MX0lGX0tVTklUKGluc2VydF9leHRlbnQpO1xuJiM0MztFWFBPUlRfU1lNQk9MX0lGX0tVTklUKHVpZF9naWRfbWFwX2luc2VydF9leHRlbnQpO1xuIFxuIC8qIGNtcCBmdW5jdGlvbiB0byBzb3J0KCkgZm9yd2FyZCBtYXBwaW5ncyAqL1xuIHN0YXRpYyBpbnQgY21wX2V4dGVudHNfZm9yd2FyZChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKVxuQEAgLTg1NCwxMCAmIzQzOzg1NSwxMCBAQCBzdGF0aWMgaW50IGNtcF9leHRlbnRzX3JldmVyc2UoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYilcbiB9XG4gXG4gLypcbi0gKiBzb3J0X2lkbWFwcyAtIFNvcnRzIGFuIGFycmF5IG9mIGlkbWFwIGVudHJpZXMuXG4mIzQzOyAqIHVpZF9naWRfbWFwX3NvcnQgLSBTb3J0cyBhbiBhcnJheSBvZiBpZG1hcCBlbnRyaWVzLlxuICAqIENhbiBvbmx5IGJlIGNhbGxlZCBpZiBudW1iZXIgb2YgbWFwcGluZ3MgZXhjZWVkcyBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTLlxuICAqL1xuLVZJU0lCTEVfSUZfS1VOSVQgaW50IHNvcnRfaWRtYXBzKHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwKVxuJiM0MztWSVNJQkxFX0lGX0tVTklUIGludCB1aWRfZ2lkX21hcF9zb3J0KHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwKVxuIHtcbiBcdGlmIChtYXAtXHUwMDNlbnJfZXh0ZW50cyBcdTAwM2M9IFVJRF9HSURfTUFQX01BWF9CQVNFX0VYVEVOVFMpXG4gXHRcdHJldHVybiAwO1xuQEAgLTg3OCw3ICYjNDM7ODc5LDcgQEAgVklTSUJMRV9JRl9LVU5JVCBpbnQgc29ydF9pZG1hcHMoc3RydWN0IHVpZF9naWRfbWFwICptYXApXG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4tRVhQT1JUX1NZTUJPTF9JRl9LVU5JVChzb3J0X2lkbWFwcyk7XG4mIzQzO0VYUE9SVF9TWU1CT0xfSUZfS1VOSVQodWlkX2dpZF9tYXBfc29ydCk7XG4gXG4gLyoqXG4gICogdmVyaWZ5X3Jvb3RfbWFwKCkgLSBjaGVjayB0aGUgdWlkIDAgbWFwcGluZ1xuQEAgLTEwNDcsNyAmIzQzOzEwNDgsNyBAQCBzdGF0aWMgc3NpemVfdCBtYXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXG4gXHRcdCAgICAobmV4dF9saW5lICE9IE5VTEwpKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFxuLVx0XHRyZXQgPSBpbnNlcnRfZXh0ZW50KFx1MDAyNm5ld19tYXAsIFx1MDAyNmV4dGVudCk7XG4mIzQzO1x0XHRyZXQgPSB1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50KFx1MDAyNm5ld19tYXAsIFx1MDAyNmV4dGVudCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdHJldCA9IC1FSU5WQUw7XG5AQCAtMTA5MSw3ICYjNDM7MTA5Miw3IEBAIHN0YXRpYyBzc2l6ZV90IG1hcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdCAqIElmIHdlIHdhbnQgdG8gdXNlIGJpbmFyeSBzZWFyY2ggZm9yIGxvb2t1cCwgdGhpcyBjbG9uZXMgdGhlIGV4dGVudFxuIFx0ICogYXJyYXkgYW5kIHNvcnRzIGJvdGggY29waWVzLlxuIFx0ICovXG4tXHRyZXQgPSBzb3J0X2lkbWFwcyhcdTAwMjZuZXdfbWFwKTtcbiYjNDM7XHRyZXQgPSB1aWRfZ2lkX21hcF9zb3J0KFx1MDAyNm5ld19tYXApO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBvdXQ7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTM6NTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uc2lzdHMgc29sZWx5IG9mIGlkZW50aWZpZXIgcmVuYW1lcyAocmVuYW1pbmcgYGluc2VydF9leHRlbnRgIHRvIGB1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50YCBhbmQgYHNvcnRfaWRtYXBzYCB0byBgdWlkX2dpZF9tYXBfc29ydGApIGFuZCB1cGRhdGluZyB0aGUgY29ycmVzcG9uZGluZyBLVW5pdCB0ZXN0IHJlZmVyZW5jZXMgYW5kIGhlYWRlciBkZWNsYXJhdGlvbnMuIEl0IGludHJvZHVjZXMgbm8gZnVuY3Rpb25hbCwgbG9naWNhbCwgY29udHJvbC1mbG93LCBkYXRhIHN0cnVjdHVyZSwgb3IgYXNzZXJ0aW9uIGNoYW5nZXMuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3Qgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGUzYjE2ZGU3NTBlMjIzYTRkMTIyY2VmODM0Njc0ZTkyMjc4OTdlNjkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCAxMSAxMzo1NDo0MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaCBiL2luY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaAppbmRleCA2MzMxNTc3ODFlZGNiLi45MTIzMjA1Mzc3NWQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzZXJfbmFtZXNwYWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC91c2VyX25hbWVzcGFjZS5oCkBAIC0yMDgsMTAgJiM0MzsyMDgsMTEgQEAgZXh0ZXJuIGJvb2wgaW5fdXNlcm5zKGNvbnN0IHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqYW5jZXN0b3IsCiBleHRlcm4gYm9vbCBjdXJyZW50X2luX3VzZXJucyhjb25zdCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnRhcmdldF9ucyk7CiBzdHJ1Y3QgbnNfY29tbW9uICpuc19nZXRfb3duZXIoc3RydWN0IG5zX2NvbW1vbiAqbnMpOwogCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfVVNFUl9OU19NQVBfS1VOSVRfVEVTVCkKLWV4dGVybiBpbnQgaW5zZXJ0X2V4dGVudChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgc3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQpOwotZXh0ZXJuIGludCBzb3J0X2lkbWFwcyhzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCk7Ci0jZW5kaWYgLyogQ09ORklHX1VTRVJfTlNfTUFQX0tVTklUX1RFU1QgKi8KJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfS1VOSVQpCiYjNDM7ZXh0ZXJuIGludCB1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50KHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLAomIzQzOwkJCQkgICAgIHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZXh0ZW50KTsKJiM0MztleHRlcm4gaW50IHVpZF9naWRfbWFwX3NvcnQoc3RydWN0IHVpZF9naWRfbWFwICptYXApOwomIzQzOyNlbmRpZiAvKiBDT05GSUdfS1VOSVQgKi8KIAogI2Vsc2UKIApkaWZmIC0tZ2l0IGEva2VybmVsL3Rlc3RzL3VzZXJfbnNfbWFwX2t1bml0LmMgYi9rZXJuZWwvdGVzdHMvdXNlcl9uc19tYXBfa3VuaXQuYwppbmRleCAyNGMyMWU0M2EzNmM5Li4wMzNkY2NjNmE1MzViIDEwMDY0NAotLS0gYS9rZXJuZWwvdGVzdHMvdXNlcl9uc19tYXBfa3VuaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdGVzdHMvdXNlcl9uc19tYXBfa3VuaXQuYwpAQCAtMjQsNyAmIzQzOzI0LDcgQEAgc3RhdGljIHZvaWQgdXNlcl9uc19tYXBfaW5zZXJ0KHN0cnVjdCBrdW5pdCAqdGVzdCkKIAkJZXh0ZW50Lmxvd2VyX2ZpcnN0ID0gaSAqIDEwMDsKIAkJZXh0ZW50LmNvdW50ID0gNTsKIAotCQlyZXQgPSBpbnNlcnRfZXh0ZW50KCZhbXA7bWFwLCAmYW1wO2V4dGVudCk7CiYjNDM7CQlyZXQgPSB1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50KCZhbXA7bWFwLCAmYW1wO2V4dGVudCk7CiAJCUtVTklUX0FTU0VSVF9FUSh0ZXN0LCByZXQsIDApOwogCX0KIApAQCAtNTQsMTQgJiM0Mzs1NCwxNCBAQCBzdGF0aWMgdm9pZCB1c2VyX25zX21hcF9pbnNlcnRfZXh0ZW5kZWQoc3RydWN0IGt1bml0ICp0ZXN0KQogCQlleHRlbnQubG93ZXJfZmlyc3QgPSB2YWx1ZSAqIDEwMDsKIAkJZXh0ZW50LmNvdW50ID0gNTsKIAotCQlyZXQgPSBpbnNlcnRfZXh0ZW50KCZhbXA7bWFwLCAmYW1wO2V4dGVudCk7CiYjNDM7CQlyZXQgPSB1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50KCZhbXA7bWFwLCAmYW1wO2V4dGVudCk7CiAJCUtVTklUX0FTU0VSVF9FUSh0ZXN0LCByZXQsIDApOwogCX0KIAogCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBtYXAubnJfZXh0ZW50cywgTlJfRVhURU5UUyk7CiAKIAkvKiBOb3cgc29ydCB0aGUgbWFwIHRvIHNldCB1cCByZXZlcnNlIG1hcHBpbmcgKi8KLQlyZXQgPSBzb3J0X2lkbWFwcygmYW1wO21hcCk7CiYjNDM7CXJldCA9IHVpZF9naWRfbWFwX3NvcnQoJmFtcDttYXApOwogCUtVTklUX0FTU0VSVF9FUSh0ZXN0LCByZXQsIDApOwogCUtVTklUX0FTU0VSVF9OT1RfRVJSX09SX05VTEwodGVzdCwgbWFwLnJldmVyc2UpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jCmluZGV4IGY5Y2JiNGI5MmI0ODcuLjk4YjAyNzliNmNjNmUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jCkBAIC03ODAsMTIgJiM0Mzs3ODAsMTMgQEAgc3RhdGljIGJvb2wgbWFwcGluZ3Nfb3ZlcmxhcChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm5ld19tYXAsCiB9CiAKIC8qCi0gKiBpbnNlcnRfZXh0ZW50IC0gU2FmZWx5IGluc2VydCBhIG5ldyBpZG1hcCBleHRlbnQgaW50byBzdHJ1Y3QgdWlkX2dpZF9tYXAuCiYjNDM7ICogdWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudCAtIFNhZmVseSBpbnNlcnQgYSBuZXcgaWRtYXAgZXh0ZW50IGludG8KJiM0MzsgKiBzdHJ1Y3QgdWlkX2dpZF9tYXAuCiAgKiBUYWtlcyBjYXJlIHRvIGFsbG9jYXRlIGEgNEsgYmxvY2sgb2YgbWVtb3J5IGlmIHRoZSBudW1iZXIgb2YgbWFwcGluZ3MgZXhjZWVkcwogICogVUlEX0dJRF9NQVBfTUFYX0JBU0VfRVhURU5UUy4KICAqLwotVklTSUJMRV9JRl9LVU5JVCBpbnQgaW5zZXJ0X2V4dGVudChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwKLQkJCQkgICBzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKmV4dGVudCkKJiM0MztWSVNJQkxFX0lGX0tVTklUIGludCB1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50KHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLAomIzQzOwkJCQkJICAgICAgIHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZXh0ZW50KQogewogCXN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZGVzdDsKIApAQCAtODIxLDcgJiM0Mzs4MjIsNyBAQCBWSVNJQkxFX0lGX0tVTklUIGludCBpbnNlcnRfZXh0ZW50KHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLAogCSpkZXN0ID0gKmV4dGVudDsKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0xfSUZfS1VOSVQoaW5zZXJ0X2V4dGVudCk7CiYjNDM7RVhQT1JUX1NZTUJPTF9JRl9LVU5JVCh1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50KTsKIAogLyogY21wIGZ1bmN0aW9uIHRvIHNvcnQoKSBmb3J3YXJkIG1hcHBpbmdzICovCiBzdGF0aWMgaW50IGNtcF9leHRlbnRzX2ZvcndhcmQoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKQEAgLTg1NCwxMCAmIzQzOzg1NSwxMCBAQCBzdGF0aWMgaW50IGNtcF9leHRlbnRzX3JldmVyc2UoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKIH0KIAogLyoKLSAqIHNvcnRfaWRtYXBzIC0gU29ydHMgYW4gYXJyYXkgb2YgaWRtYXAgZW50cmllcy4KJiM0MzsgKiB1aWRfZ2lkX21hcF9zb3J0IC0gU29ydHMgYW4gYXJyYXkgb2YgaWRtYXAgZW50cmllcy4KICAqIENhbiBvbmx5IGJlIGNhbGxlZCBpZiBudW1iZXIgb2YgbWFwcGluZ3MgZXhjZWVkcyBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTLgogICovCi1WSVNJQkxFX0lGX0tVTklUIGludCBzb3J0X2lkbWFwcyhzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCkKJiM0MztWSVNJQkxFX0lGX0tVTklUIGludCB1aWRfZ2lkX21hcF9zb3J0KHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwKQogewogCWlmIChtYXAtJmd0O25yX2V4dGVudHMgJmx0Oz0gVUlEX0dJRF9NQVBfTUFYX0JBU0VfRVhURU5UUykKIAkJcmV0dXJuIDA7CkBAIC04NzgsNyAmIzQzOzg3OSw3IEBAIFZJU0lCTEVfSUZfS1VOSVQgaW50IHNvcnRfaWRtYXBzKHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwKQogCiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MX0lGX0tVTklUKHNvcnRfaWRtYXBzKTsKJiM0MztFWFBPUlRfU1lNQk9MX0lGX0tVTklUKHVpZF9naWRfbWFwX3NvcnQpOwogCiAvKioKICAqIHZlcmlmeV9yb290X21hcCgpIC0gY2hlY2sgdGhlIHVpZCAwIG1hcHBpbmcKQEAgLTEwNDcsNyAmIzQzOzEwNDgsNyBAQCBzdGF0aWMgc3NpemVfdCBtYXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJCSAgICAobmV4dF9saW5lICE9IE5VTEwpKQogCQkJZ290byBvdXQ7CiAKLQkJcmV0ID0gaW5zZXJ0X2V4dGVudCgmYW1wO25ld19tYXAsICZhbXA7ZXh0ZW50KTsKJiM0MzsJCXJldCA9IHVpZF9naWRfbWFwX2luc2VydF9leHRlbnQoJmFtcDtuZXdfbWFwLCAmYW1wO2V4dGVudCk7CiAJCWlmIChyZXQgJmx0OyAwKQogCQkJZ290byBvdXQ7CiAJCXJldCA9IC1FSU5WQUw7CkBAIC0xMDkxLDcgJiM0MzsxMDkyLDcgQEAgc3RhdGljIHNzaXplX3QgbWFwX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCSAqIElmIHdlIHdhbnQgdG8gdXNlIGJpbmFyeSBzZWFyY2ggZm9yIGxvb2t1cCwgdGhpcyBjbG9uZXMgdGhlIGV4dGVudAogCSAqIGFycmF5IGFuZCBzb3J0cyBib3RoIGNvcGllcy4KIAkgKi8KLQlyZXQgPSBzb3J0X2lkbWFwcygmYW1wO25ld19tYXApOwomIzQzOwlyZXQgPSB1aWRfZ2lkX21hcF9zb3J0KCZhbXA7bmV3X21hcCk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCWdvdG8gb3V0OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzOTIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3NDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ29kZSBQYXRjaCBmb3IgUG90ZW50aWFsIEltcGFjdCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBkaWZmIHRoYXQgcHJpbWFyaWx5IGltcGFjdHMgZmlsZXMgcmVsYXRlZCB0byB0aGUgYHVzZXJfbmFtZXNwYWNlYC4gSSBzZWUgbW9kaWZpY2F0aW9ucyBpbiBgaW5jbHVkZS9saW51eC91c2VyX25hbWVzcGFjZS5oYCwgYGtlcm5lbC90ZXN0cy91c2VyX25zX21hcF9rdW5pdC5jYCwgYW5kIGBrZXJuZWwvdXNlcl9uYW1lc3BhY2UuY2AuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgc3ltYm9sIHJlbmFtaW5nOiBgaW5zZXJ0X2V4dGVudGAgaXMgbm93IGB1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50YCwgYW5kIGBzb3J0X2lkbWFwc2AgaGFzIGJlY29tZSBgdWlkX2dpZF9tYXBfc29ydGAuIEFsc28sIGAjaWYgSVNfRU5BQkxFRChDT05GSUdfVVNFUl9OU19NQVBfS1VOSVRfVEVTVClgIGhhcyBjaGFuZ2VkIHRvIGAjaWYgSVNfRU5BQkxFRChDT05GSUdfS1VOSVQpYC4KCk15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgKm1pZ2h0KiBiZSBhIHN0cmFpZ2h0Zm9yd2FyZCByZWZhY3RvcmluZy4gSG93ZXZlciwgSSBrbm93IGJldHRlciB0aGFuIHRvIGFzc3VtZSwgZXNwZWNpYWxseSBnaXZlbiB0aGUga2VybmVsJiMzOTtzIGNvbXBsZXhpdGllcy4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZXJlIGFyZSAqbm8qIGxvZ2ljIGNoYW5nZXMsICpvbmx5KiBzeW1ib2wgcmVuYW1pbmcuIFRoZSBydWxlcyBhcmUgcHJldHR5IGNsZWFyOiByZWZhY3RvcmluZyBjYW4gaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMuIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGRpZmZzIHRob3JvdWdobHkgZm9yIGFueSBzaWducyBvZiByZWFycmFuZ2VtZW50LCBoZWxwZXIgZnVuY3Rpb25zLCBvciBzdGF0ZSBtYW5hZ2VtZW50IGFsdGVyYXRpb25zIHdpdGhpbiB0aGUgbW9kaWZpZWQgZmlsZXMsIGVzcGVjaWFsbHkgYGtlcm5lbC91c2VyX25hbWVzcGFjZS5jYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGlzIGlzIHB1cmVseSBhIHN5bWJvbCByZW5hbWUuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIHRvb2xzIGxpa2UgYGdpdCBkaWZmYCBvciBgcmVhZC1maWxlYCBhbmQgYGdyZXBwZXJgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50fGluc2VydF9leHRlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90ZXN0cy91c2VyX25zX21hcF9rdW5pdC5jPTEzPXN0YXRpYyB2b2lkIHVzZXJfbnNfbWFwX2luc2VydChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxua2VybmVsL3Rlc3RzL3VzZXJfbnNfbWFwX2t1bml0LmMtMjYtXG5rZXJuZWwvdGVzdHMvdXNlcl9uc19tYXBfa3VuaXQuYzoyNzpcdFx0cmV0ID0gdWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudChcdTAwMjZtYXAsIFx1MDAyNmV4dGVudCk7XG5rZXJuZWwvdGVzdHMvdXNlcl9uc19tYXBfa3VuaXQuYy0yOC1cdFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJldCwgMCk7XG4tLVxua2VybmVsL3Rlc3RzL3VzZXJfbnNfbWFwX2t1bml0LmM9NDE9c3RhdGljIHZvaWQgdXNlcl9uc19tYXBfaW5zZXJ0X2V4dGVuZGVkKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5rZXJuZWwvdGVzdHMvdXNlcl9uc19tYXBfa3VuaXQuYy01Ni1cbmtlcm5lbC90ZXN0cy91c2VyX25zX21hcF9rdW5pdC5jOjU3Olx0XHRyZXQgPSB1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50KFx1MDAyNm1hcCwgXHUwMDI2ZXh0ZW50KTtcbmtlcm5lbC90ZXN0cy91c2VyX25zX21hcF9rdW5pdC5jLTU4LVx0XHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmV0LCAwKTtcbi0tXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYz03NDM9c3RhdGljIGJvb2wgbWFwcGluZ3Nfb3ZlcmxhcChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm5ld19tYXAsXG4tLVxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtNzgyLS8qXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzo3ODM6ICogdWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudCAtIFNhZmVseSBpbnNlcnQgYSBuZXcgaWRtYXAgZXh0ZW50IGludG9cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTc4NC0gKiBzdHJ1Y3QgdWlkX2dpZF9tYXAuXG4tLVxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtNzg3LSAqL1xua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM6Nzg4OlZJU0lCTEVfSUZfS1VOSVQgaW50IHVpZF9naWRfbWFwX2luc2VydF9leHRlbnQoc3RydWN0IHVpZF9naWRfbWFwICptYXAsXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy03ODktXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKmV4dGVudClcbi0tXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy04MjQtfVxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM6ODI1OkVYUE9SVF9TWU1CT0xfSUZfS1VOSVQodWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudCk7XG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy04MjYtXG4tLVxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM9OTM4PXN0YXRpYyBzc2l6ZV90IG1hcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Zixcbi0tXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy0xMDUwLVxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM6MTA1MTpcdFx0cmV0ID0gdWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudChcdTAwMjZuZXdfbWFwLCBcdTAwMjZleHRlbnQpO1xua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMTA1Mi1cdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTE1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUga2VybmVsIGFuYWx5c2lzLCBwcmVzZW50ZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gVXNlciBOYW1lc3BhY2VzOiBBIEZvY3VzZWQgSW5zcGVjdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byB6ZXJvIGluIG9uIGBrZXJuZWwvdXNlcl9uYW1lc3BhY2UuY2AuIEZyb20gbWVtb3J5LCB0aGUgY29yZSBvZiB1c2VyIG5hbWVzcGFjZSBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGhvdyBjcmVkZW50aWFscyBhbmQgcGVybWlzc2lvbnMgYXJlIG1hbmFnZWQgd2l0aGluIGEgbmFtZXNwYWNlLCBpcyBwcm9iYWJseSBhcm91bmQgdGhlIDc4MC04OTAgbGluZSByYW5nZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdXNlciBJRHMgYW5kIGdyb3VwIElEcyBhcmUgbWFwcGVkLCBob3cgY2FwYWJpbGl0eSBib3VuZGluZyBzZXRzIGFyZSBhZGp1c3RlZCwgYW5kIHdoZXJlIHRoZSBjcnVjaWFsIGNoZWNrcyByZWxhdGVkIHRvIHJvb3QgcHJpdmlsZWdlcyBhcmUgaW1wbGVtZW50ZWQuIEkgc3VzcGVjdCB0aGlzIHNlY3Rpb24gY29udGFpbnMgdGhlIGNyaXRpY2FsIGxvZ2ljIGZvciBob3cgYSBwcm9jZXNzIGdhaW5zIChvciBsb3NlcykgaXRzIHNwZWNpYWwgcG93ZXJzIHdpdGhpbiBhIHVzZXIgbmFtZXNwYWNlLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGJ1Z3Mgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgbHVya2luZyB0aGVyZS4uLiBJdCYjMzk7cyBhbGwgYWJvdXQgaG93IHRoZXNlIGJvdW5kYXJpZXMgYXJlIHNldCBhbmQgdXBoZWxkLCBhbmQgdGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBmdW4gYmVnaW5zLCByaWdodD8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgYnkgZm9sbG93aW5nIGFueSBmdW5jdGlvbiBjYWxscyBmcm9tIHRoYXQgYXJlYSBhbmQgc2VlIHdoZXJlIHRoZXkgbGVhZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC91c2VyX25hbWVzcGFjZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzgwOlx0fVxuIDc4MTpcdFxuIDc4MjpcdC8qXG4gNzgzOlx0ICogdWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudCAtIFNhZmVseSBpbnNlcnQgYSBuZXcgaWRtYXAgZXh0ZW50IGludG9cbiA3ODQ6XHQgKiBzdHJ1Y3QgdWlkX2dpZF9tYXAuXG4gNzg1Olx0ICogVGFrZXMgY2FyZSB0byBhbGxvY2F0ZSBhIDRLIGJsb2NrIG9mIG1lbW9yeSBpZiB0aGUgbnVtYmVyIG9mIG1hcHBpbmdzIGV4Y2VlZHNcbiA3ODY6XHQgKiBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTLlxuIDc4NzpcdCAqL1xuIDc4ODpcdFZJU0lCTEVfSUZfS1VOSVQgaW50IHVpZF9naWRfbWFwX2luc2VydF9leHRlbnQoc3RydWN0IHVpZF9naWRfbWFwICptYXAsXG4gNzg5Olx0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKmV4dGVudClcbiA3OTA6XHR7XG4gNzkxOlx0XHRzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKmRlc3Q7XG4gNzkyOlx0XG4gNzkzOlx0XHRpZiAobWFwLVx1MDAzZW5yX2V4dGVudHMgPT0gVUlEX0dJRF9NQVBfTUFYX0JBU0VfRVhURU5UUykge1xuIDc5NDpcdFx0XHRzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKmZvcndhcmQ7XG4gNzk1Olx0XG4gNzk2Olx0XHRcdC8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgMzQwIG1hcHBpbmdzLiAqL1xuIDc5NzpcdFx0XHRmb3J3YXJkID0ga21hbGxvY19vYmpzKHN0cnVjdCB1aWRfZ2lkX2V4dGVudCxcbiA3OTg6XHRcdFx0XHRcdCAgICAgICBVSURfR0lEX01BUF9NQVhfRVhURU5UUyk7XG4gNzk5Olx0XHRcdGlmICghZm9yd2FyZClcbiA4MDA6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA4MDE6XHRcbiA4MDI6XHRcdFx0LyogQ29weSBvdmVyIG1lbW9yeS4gT25seSBzZXQgdXAgbWVtb3J5IGZvciB0aGUgZm9yd2FyZCBwb2ludGVyLlxuIDgwMzpcdFx0XHQgKiBEZWZlciB0aGUgbWVtb3J5IHNldHVwIGZvciB0aGUgcmV2ZXJzZSBwb2ludGVyLlxuIDgwNDpcdFx0XHQgKi9cbiA4MDU6XHRcdFx0bWVtY3B5KGZvcndhcmQsIG1hcC1cdTAwM2VleHRlbnQsXG4gODA2Olx0XHRcdCAgICAgICBtYXAtXHUwMDNlbnJfZXh0ZW50cyAqIHNpemVvZihtYXAtXHUwMDNlZXh0ZW50WzBdKSk7XG4gODA3Olx0XG4gODA4Olx0XHRcdG1hcC1cdTAwM2Vmb3J3YXJkID0gZm9yd2FyZDtcbiA4MDk6XHRcdFx0bWFwLVx1MDAzZXJldmVyc2UgPSBOVUxMO1xuIDgxMDpcdFx0fVxuIDgxMTpcdFxuIDgxMjpcdFx0LypcbiA4MTM6XHRcdCAqIG5yX2V4dGVudHMgbXVzdCBiZSB1cGRhdGVkIGJlZm9yZSB0aGUgZXh0ZW50IGFuZCBmb3J3YXJkIGFycmF5cyBhcmVcbiA4MTQ6XHRcdCAqIGFjY2Vzc2VkLCBvdGhlcndpc2UgS1NBTiB3aWxsIGFzc2VydCBhbiBvdXQtb2YtYm91bmRzIGVycm9yLlxuIDgxNTpcdFx0ICovXG4gODE2Olx0XHRtYXAtXHUwMDNlbnJfZXh0ZW50cyYjNDM7JiM0Mzs7XG4gODE3Olx0XHRpZiAobWFwLVx1MDAzZW5yX2V4dGVudHMgXHUwMDNjPSBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTKVxuIDgxODpcdFx0XHRkZXN0ID0gXHUwMDI2bWFwLVx1MDAzZWV4dGVudFttYXAtXHUwMDNlbnJfZXh0ZW50cyAtIDFdO1xuIDgxOTpcdFx0ZWxzZVxuIDgyMDpcdFx0XHRkZXN0ID0gXHUwMDI2bWFwLVx1MDAzZWZvcndhcmRbbWFwLVx1MDAzZW5yX2V4dGVudHMgLSAxXTtcbiA4MjE6XHRcbiA4MjI6XHRcdCpkZXN0ID0gKmV4dGVudDtcbiA4MjM6XHRcdHJldHVybiAwO1xuIDgyNDpcdH1cbiA4MjU6XHRFWFBPUlRfU1lNQk9MX0lGX0tVTklUKHVpZF9naWRfbWFwX2luc2VydF9leHRlbnQpO1xuIDgyNjpcdFxuIDgyNzpcdC8qIGNtcCBmdW5jdGlvbiB0byBzb3J0KCkgZm9yd2FyZCBtYXBwaW5ncyAqL1xuIDgyODpcdHN0YXRpYyBpbnQgY21wX2V4dGVudHNfZm9yd2FyZChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKVxuIDgyOTpcdHtcbiA4MzA6XHRcdGNvbnN0IHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZTEgPSBhO1xuIDgzMTpcdFx0Y29uc3Qgc3RydWN0IHVpZF9naWRfZXh0ZW50ICplMiA9IGI7XG4gODMyOlx0XG4gODMzOlx0XHRpZiAoZTEtXHUwMDNlZmlyc3QgXHUwMDNjIGUyLVx1MDAzZWZpcnN0KVxuIDgzNDpcdFx0XHRyZXR1cm4gLTE7XG4gODM1Olx0XG4gODM2Olx0XHRpZiAoZTEtXHUwMDNlZmlyc3QgXHUwMDNlIGUyLVx1MDAzZWZpcnN0KVxuIDgzNzpcdFx0XHRyZXR1cm4gMTtcbiA4Mzg6XHRcbiA4Mzk6XHRcdHJldHVybiAwO1xuIDg0MDpcdH1cbiA4NDE6XHRcbiA4NDI6XHQvKiBjbXAgZnVuY3Rpb24gdG8gc29ydCgpIHJldmVyc2UgbWFwcGluZ3MgKi9cbiA4NDM6XHRzdGF0aWMgaW50IGNtcF9leHRlbnRzX3JldmVyc2UoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYilcbiA4NDQ6XHR7XG4gODQ1Olx0XHRjb25zdCBzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKmUxID0gYTtcbiA4NDY6XHRcdGNvbnN0IHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZTIgPSBiO1xuIDg0NzpcdFxuIDg0ODpcdFx0aWYgKGUxLVx1MDAzZWxvd2VyX2ZpcnN0IFx1MDAzYyBlMi1cdTAwM2Vsb3dlcl9maXJzdClcbiA4NDk6XHRcdFx0cmV0dXJuIC0xO1xuIDg1MDpcdFxuIDg1MTpcdFx0aWYgKGUxLVx1MDAzZWxvd2VyX2ZpcnN0IFx1MDAzZSBlMi1cdTAwM2Vsb3dlcl9maXJzdClcbiA4NTI6XHRcdFx0cmV0dXJuIDE7XG4gODUzOlx0XG4gODU0Olx0XHRyZXR1cm4gMDtcbiA4NTU6XHR9XG4gODU2Olx0XG4gODU3Olx0LypcbiA4NTg6XHQgKiB1aWRfZ2lkX21hcF9zb3J0IC0gU29ydHMgYW4gYXJyYXkgb2YgaWRtYXAgZW50cmllcy5cbiA4NTk6XHQgKiBDYW4gb25seSBiZSBjYWxsZWQgaWYgbnVtYmVyIG9mIG1hcHBpbmdzIGV4Y2VlZHMgVUlEX0dJRF9NQVBfTUFYX0JBU0VfRVhURU5UUy5cbiA4NjA6XHQgKi9cbiA4NjE6XHRWSVNJQkxFX0lGX0tVTklUIGludCB1aWRfZ2lkX21hcF9zb3J0KHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwKVxuIDg2MjpcdHtcbiA4NjM6XHRcdGlmIChtYXAtXHUwMDNlbnJfZXh0ZW50cyBcdTAwM2M9IFVJRF9HSURfTUFQX01BWF9CQVNFX0VYVEVOVFMpXG4gODY0Olx0XHRcdHJldHVybiAwO1xuIDg2NTpcdFxuIDg2NjpcdFx0LyogU29ydCBmb3J3YXJkIGFycmF5LiAqL1xuIDg2NzpcdFx0c29ydChtYXAtXHUwMDNlZm9yd2FyZCwgbWFwLVx1MDAzZW5yX2V4dGVudHMsIHNpemVvZihzdHJ1Y3QgdWlkX2dpZF9leHRlbnQpLFxuIDg2ODpcdFx0ICAgICBjbXBfZXh0ZW50c19mb3J3YXJkLCBOVUxMKTtcbiA4Njk6XHRcbiA4NzA6XHRcdC8qIE9ubHkgY29weSB0aGUgbWVtb3J5IGZyb20gZm9yd2FyZCB3ZSBhY3R1YWxseSBuZWVkLiAqL1xuIDg3MTpcdFx0bWFwLVx1MDAzZXJldmVyc2UgPSBrbWVtZHVwX2FycmF5KG1hcC1cdTAwM2Vmb3J3YXJkLCBtYXAtXHUwMDNlbnJfZXh0ZW50cyxcbiA4NzI6XHRcdFx0XHRcdCAgICAgc2l6ZW9mKHN0cnVjdCB1aWRfZ2lkX2V4dGVudCksIEdGUF9LRVJORUwpO1xuIDg3MzpcdFx0aWYgKCFtYXAtXHUwMDNlcmV2ZXJzZSlcbiA4NzQ6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gODc1Olx0XG4gODc2Olx0XHQvKiBTb3J0IHJldmVyc2UgYXJyYXkuICovXG4gODc3Olx0XHRzb3J0KG1hcC1cdTAwM2VyZXZlcnNlLCBtYXAtXHUwMDNlbnJfZXh0ZW50cywgc2l6ZW9mKHN0cnVjdCB1aWRfZ2lkX2V4dGVudCksXG4gODc4Olx0XHQgICAgIGNtcF9leHRlbnRzX3JldmVyc2UsIE5VTEwpO1xuIDg3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5MDEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIFVzZXIgTmFtZXNwYWNlcyoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHVzZXIgbmFtZXNwYWNlcyBhbmQgaG93IHRoZXkmIzM5O3JlIHN0cnVjdHVyZWQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGhlYWRlciBmaWxlLCBzcGVjaWZpY2FsbHkgYGluY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaGAuIEkmIzM5O20gZ3Vlc3NpbmcgdGhlIGNvcmUgZGVmaW5pdGlvbnMgYW5kIHN0cnVjdHVyZXMgSSYjMzk7bSBsb29raW5nIGZvciB3aWxsIGJlIGNvbmNlbnRyYXRlZCBhcm91bmQgbGluZXMgMjA1IHRvIDIyMC4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgb3IgcmVsYXRlZCBmdW5jdGlvbiBwcm90b3R5cGVzIHJlc2lkZS4gTGV0JiMzOTtzIHNlZSB3aGF0IGdvb2RpZXMgdGhpcyBzZWN0aW9uIGhvbGRzLi4uIGhvcGVmdWxseSwgdGhpcyB3aWxsIHByb3ZpZGUgdGhlIGNvbnRleHQgSSBuZWVkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC91c2VyX25hbWVzcGFjZS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMDA6XHRleHRlcm4gc3NpemVfdCBwcm9jX3VpZF9tYXBfd3JpdGUoc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7XG4gMjAxOlx0ZXh0ZXJuIHNzaXplX3QgcHJvY19naWRfbWFwX3dyaXRlKHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90ICopO1xuIDIwMjpcdGV4dGVybiBzc2l6ZV90IHByb2NfcHJvamlkX21hcF93cml0ZShzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzaXplX3QsIGxvZmZfdCAqKTtcbiAyMDM6XHRleHRlcm4gc3NpemVfdCBwcm9jX3NldGdyb3Vwc193cml0ZShzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzaXplX3QsIGxvZmZfdCAqKTtcbiAyMDQ6XHRleHRlcm4gaW50IHByb2Nfc2V0Z3JvdXBzX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KTtcbiAyMDU6XHRleHRlcm4gYm9vbCB1c2VybnNfbWF5X3NldGdyb3Vwcyhjb25zdCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zKTtcbiAyMDY6XHRleHRlcm4gYm9vbCBpbl91c2VybnMoY29uc3Qgc3RydWN0IHVzZXJfbmFtZXNwYWNlICphbmNlc3RvcixcbiAyMDc6XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqY2hpbGQpO1xuIDIwODpcdGV4dGVybiBib29sIGN1cnJlbnRfaW5fdXNlcm5zKGNvbnN0IHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdGFyZ2V0X25zKTtcbiAyMDk6XHRzdHJ1Y3QgbnNfY29tbW9uICpuc19nZXRfb3duZXIoc3RydWN0IG5zX2NvbW1vbiAqbnMpO1xuIDIxMDpcdFxuIDIxMTpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19LVU5JVClcbiAyMTI6XHRleHRlcm4gaW50IHVpZF9naWRfbWFwX2luc2VydF9leHRlbnQoc3RydWN0IHVpZF9naWRfbWFwICptYXAsXG4gMjEzOlx0XHRcdFx0XHQgICAgIHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZXh0ZW50KTtcbiAyMTQ6XHRleHRlcm4gaW50IHVpZF9naWRfbWFwX3NvcnQoc3RydWN0IHVpZF9naWRfbWFwICptYXApO1xuIDIxNTpcdCNlbmRpZiAvKiBDT05GSUdfS1VOSVQgKi9cbiAyMTY6XHRcbiAyMTc6XHQjZWxzZVxuIDIxODpcdFxuIDIxOTpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHVzZXJfbmFtZXNwYWNlICpnZXRfdXNlcl9ucyhzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zKVxuIDIyMDpcdHtcbiAyMjE6XHRcdHJldHVybiBcdTAwMjZpbml0X3VzZXJfbnM7XG4gMjIyOlx0fVxuIDIyMzpcdFxuIDIyNDpcdHN0YXRpYyBpbmxpbmUgaW50IGNyZWF0ZV91c2VyX25zKHN0cnVjdCBjcmVkICpuZXcpXG4gMjI1Olx0e1xuIDIyNjpcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMjI3Olx0fVxuIDIyODpcdFxuIDIyOTpcdHN0YXRpYyBpbmxpbmUgaW50IHVuc2hhcmVfdXNlcm5zKHVuc2lnbmVkIGxvbmcgdW5zaGFyZV9mbGFncyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjgxCgkJCQkJCQlvdXRwdXQ6IDExNQoJCQkJCQkJdGhvdWdodHM6IDI5MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgZnV6emluZy4gVGhlIGluaXRpYWwgbG9vayBpbmRpY2F0ZXMgaXQmIzM5O3MgYSByZW5hbWluZyBvcGVyYXRpb24sIHdoaWNoICpzZWVtcyogbGlrZSBhIHNpbXBsZSByZWZhY3RvciwgYnV0IHdlIG5lZWQgdG8gYmUgcmlnb3JvdXMuIEZpcnN0LCBJIG5vdGUgdGhhdCB0aGUgcGF0Y2ggcmVuYW1lcyB0d28gZnVuY3Rpb25zOiBgaW5zZXJ0X2V4dGVudGAgdG8gYHVpZF9naWRfbWFwX2luc2VydF9leHRlbnRgIGFuZCBgc29ydF9pZG1hcHNgIHRvIGB1aWRfZ2lkX21hcF9zb3J0YC4gSXQgYWxzbyBtb2RpZmllcyBhIGhlYWRlciBmaWxlLCBjaGFuZ2luZyB0aGUgYENPTkZJR19VU0VSX05TX01BUF9LVU5JVF9URVNUYCBndWFyZCB0byBgQ09ORklHX0tVTklUYC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uOiAqaXMgdGhpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlPyogTG9va2luZyBhdCB0aGUgZGlmZiwgbm8uIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIHRoZSB1bmRlcmx5aW5nIGxvZ2ljLCBubyBhbHRlcmF0aW9ucyB0byBkYXRhIHN0cnVjdHVyZXMsIGFuZCBubyBuZXcgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkLiBJdCYjMzk7cyAqcHVyZWx5KiBhIHJlbmFtaW5nL3ByZWZpeGluZyBvcGVyYXRpb24sIHNwZWNpZmljYWxseSBmb3IgS1VuaXQgdGVzdCBzeW1ib2xzLgoKTm93LCBsZXQmIzM5O3MgY29uc3VsdCB0aGUgZ3VpZGVsaW5lcy4gVGhlIGNvcmUgcHJpbmNpcGxlIGVtcGhhc2l6ZXMgdGhhdCB3ZSAqbXVzdCogZnV6eiByZWFjaGFibGUsIGV4ZWN1dGFibGUgY29kZS4gVGhlIGd1aWRlbGluZXMgZXhwbGljaXRseSBzdGF0ZSB0aGF0IHdlICpzaG91bGQgbm90KiBibGluZGx5IHRydXN0IGNsYWltcyBvZiAmIzM0O25vIGZ1bmN0aW9uYWwgY2hhbmdlJiMzNDsgb3IgJiMzNDtyZWZhY3RvcmluZy4mIzM0OyBIb3dldmVyLCB0aGV5IGFsc28gZGVmaW5lIHNwZWNpZmljIHNjZW5hcmlvcyB3aGVyZSB3ZSAqc2hvdWxkIG5vdCogZnV6ei4gVGhlc2UgaW5jbHVkZTogbm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlcywgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLCBhbmQgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzLiBSZW5hbWluZyBmdW5jdGlvbiBzeW1ib2xzIHdpdGhvdXQgbW9kaWZ5aW5nIGNvZGUgbG9naWMgc291bmRzIGxpa2Ugb25lIG9mIHRob3NlICpub24tZXhlY3V0YWJsZSBjaGFuZ2VzKiwgcmlnaHQ/CgpJIHJlLXJlYWQgU2VjdGlvbiAyLCBzcGVjaWZpY2FsbHkgdGhlIHNlY3Rpb24gZm9yIGRldGVybWluaW5nIHdoZW4gYFdvcnRoRnV6emluZz1mYWxzZWAuIEl0IGxpc3RzICYjMzQ7Tm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlcywmIzM0OyB3aGljaCBpbmNsdWRlcyBtb2RpZmljYXRpb25zIHRvICYjMzQ7QnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLiYjMzQ7IFRoaXMgc2VlbXMgbGlrZSB0aGUgcmVsZXZhbnQgY2F0ZWdvcnksIGJ1dCBJIGFtIHN0aWxsIG5vdCAxMDAlIHN1cmUuIElzICpwdXJlKiByZW5hbWluZyBhIG5vbi1leGVjdXRhYmxlIGNoYW5nZT8KClRoZW4gSSB0aGluazogZG9lcyB0aGlzIG1hdHRlcj8gSWYgSSB3ZXJlIHRvIGZlZWQgdGhpcyBwYXRjaCB0byBzeXprYWxsZXIsIHdoYXQgd291bGQgaXQgZnV6ej8gU2luY2UgdGhlcmUgYXJlIG5vIGxvZ2ljIGNoYW5nZXMsIG5vIHJlc3RydWN0dXJpbmcgb2YgYWxnb3JpdGhtcywgbm8gbmV3IGFzc2VydGlvbnMsIG5vIGNoYW5nZXMgdG8gZGF0YSBzdHJ1Y3R1cmVzLCBubyBtb2RpZmljYXRpb25zIHRvIGNvbnRyb2wgZmxvdy4uLiBJdCB3b3VsZCBiZSBmdXp6aW5nLi4uIHRoZSByZW5hbWVzPyBUaGF0JiMzOTtzIG5vdCB1c2VmdWwuIEEgcHVyZSBzeW1ib2wgcmVuYW1lLCBvbmNlIGNvbXBpbGVkLCBkb2VzIG5vdCBjaGFuZ2UgdGhlIGdlbmVyYXRlZCBjb2RlLCBsb2dpYywgZGF0YSBzdHJ1Y3R1cmVzIG9yIGV4ZWN1dGlvbiBpbiBhbnkgd2F5LiBUaGUgYmluYXJ5IG91dHB1dCBpcyAxMDAlIGlkZW50aWNhbC4KCkFscmlnaHQsIHJlLXJlYWRpbmcgU2VjdGlvbiAyIGFnYWluLCAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXMmIzM0Oy4gSXQgZ29lcyBvbiB0byBzcGVjaWZ5IGluIFNlY3Rpb24gMywgd2UgbXVzdCByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYCB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIHdoaWNoIGluY2x1ZGVzICYjMzQ7YW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4uLi4mIzM0OywgJiMzNDtBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuJiMzNDssIGFuZCAmIzM0O0FueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zLi4uJiMzNDsuIFRoaXMgcGF0Y2ggaGFzIG5vbmUgb2YgdGhhdC4KClRvIGJlIGV4dHJhIGNlcnRhaW4sIEkgbmVlZCB0byBjaGVjayB0aGUgd2lkZXIgY29udGV4dC4gV2h5IHRoZSByZW5hbWU/IExvb2tpbmcgYXQgdGhlIGBrZXJuZWwvdXNlcl9uYW1lc3BhY2UuY2AgZmlsZSwgd2hlcmUgYFZJU0lCTEVfSUZfS1VOSVRgIGFuZCBgRVhQT1JUX1NZTUJPTF9JRl9LVU5JVGAgYXJlIHVzZWQsIHJldmVhbHMgdGhlIGludGVudDogdGhlc2Ugc3ltYm9scyBhcmUgYmVpbmcgZXhwb3J0ZWQgZm9yIEtVbml0IHRlc3RpbmcuIFRvIGF2b2lkIHBvdGVudGlhbCBjb2xsaXNpb25zIG9yIG5hbWVzcGFjZSBpc3N1ZXMsIGVzcGVjaWFsbHkgd2hlbiBleHBvcnRlZCwgdGhlIHJlbmFtZSBwcm92aWRlcyBhIGNsZWFyIHByZWZpeC4KClRoZSBnb2FsIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLCBhbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMuIEEgcHVyZSByZW5hbWUgd29uJiMzOTt0IHRyaWdnZXIgdGhlc2UuIElmIHRoZXJlIHdlcmUgYSBtaXNtYXRjaCwgdGhlIGNvbXBpbGVyIG9yIGxpbmtlciB3b3VsZCBmYWlsLgoKVG8gYmUgMTAwJSBjZXJ0YWluLCBsZXQmIzM5O3Mgd2FsayB0aHJvdWdoIHRoZSBodW5rczoKCjEuICBIZWFkZXIgRmlsZTogQ2hhbmdpbmcgdGhlIG1hY3JvIGZyb20gYENPTkZJR19VU0VSX05TX01BUF9LVU5JVF9URVNUYCB0byBgQ09ORklHX0tVTklUYCBhbmQgcmVuYW1pbmcgdGhlIHByb3RvdHlwZXMuIFRoaXMgaXMgYSBub24tZnVuY3Rpb25hbCBjaGFuZ2UuCjIuICBLVW5pdCBUZXN0IEZpbGU6IFJlbmFtaW5nIHRoZSBmdW5jdGlvbiBjYWxscyB3aXRoaW4gdGhlIHRlc3QgY2FzZXMuIFRoaXMgZG9lc24mIzM5O3QgY2hhbmdlIHdoYXQgdGhlIHRlc3RzICpkbyosIG9ubHkgdGhlIG5hbWVzIHRoZXkgY2FsbC4KMy4gIFNvdXJjZSBGaWxlIChga2VybmVsL3VzZXJfbmFtZXNwYWNlLmNgKTogUmVuYW1pbmcgZnVuY3Rpb24gZGVmaW5pdGlvbnMgYW5kIGNhbGwgc2l0ZXMsIGFuZCBleHBvcnRpbmcgdGhlIHN5bWJvbHMgd2l0aCB0aGUgbmV3IG5hbWVzLiBBZ2FpbiwgdGhpcyBpcyBhIHN5bWJvbCByZW5hbWluZyB3aXRob3V0IGNoYW5naW5nIGFueSBsb2dpYywgZmxvdyBvciBkYXRhLgoKU28sICpXb3J0aEZ1enppbmcgaXMgZmFsc2UuKiBJdCBpcyBhIG5vbi1leGVjdXRhYmxlLCBwdXJlbHkgY29zbWV0aWMgY2hhbmdlIGFuZCBpcyBhIHJlbmFtaW5nIGV4ZXJjaXNlIHdpdGggbm8gZnVuY3Rpb25hbCBpbXBhY3QuCgpUaGVyZWZvcmUsIGZvciB0aGUgYHNldC1yZXN1bHRzYCBjYWxsLCB0aGUgcGFyYW1ldGVycyBzaG91bGQgYmU6CgoqICAgKipXb3J0aEZ1enppbmc6IGZhbHNlKioKKiAgICoqRm9jdXNTeW1ib2xzOiBcWyBdKioKKiAgICoqRW5hYmxlQ29uZmlnczogXFsgXSoqCiogICAqKlJlYXNvbmluZzoqKiAmIzM0O1RoZSBwYXRjaCBvbmx5IHJlbmFtZXMgZnVuY3Rpb25zIChgaW5zZXJ0X2V4dGVudGAgdG8gYHVpZF9naWRfbWFwX2luc2VydF9leHRlbnRgIGFuZCBgc29ydF9pZG1hcHNgIHRvIGB1aWRfZ2lkX21hcF9zb3J0YCkgdG8gYWRkIHN1YnN5c3RlbSBwcmVmaXhlcyBmb3IgS1VuaXQgc3ltYm9sIGV4cG9ydHMgYW5kIHVwZGF0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgaGVhZGVyIHByb3RvdHlwZXMgYW5kIEtVbml0IHRlc3QKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnNpc3RzIHNvbGVseSBvZiBpZGVudGlmaWVyIHJlbmFtZXMgKHJlbmFtaW5nIGBpbnNlcnRfZXh0ZW50YCB0byBgdWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudGAgYW5kIGBzb3J0X2lkbWFwc2AgdG8gYHVpZF9naWRfbWFwX3NvcnRgKSBhbmQgdXBkYXRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgS1VuaXQgdGVzdCByZWZlcmVuY2VzIGFuZCBoZWFkZXIgZGVjbGFyYXRpb25zLiBJdCBpbnRyb2R1Y2VzIG5vIGZ1bmN0aW9uYWwsIGxvZ2ljYWwsIGNvbnRyb2wtZmxvdywgZGF0YSBzdHJ1Y3R1cmUsIG9yIGFzc2VydGlvbiBjaGFuZ2VzLiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnNpc3RzIHNvbGVseSBvZiBpZGVudGlmaWVyIHJlbmFtZXMgKHJlbmFtaW5nIGBpbnNlcnRfZXh0ZW50YCB0byBgdWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudGAgYW5kIGBzb3J0X2lkbWFwc2AgdG8gYHVpZF9naWRfbWFwX3NvcnRgKSBhbmQgdXBkYXRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgS1VuaXQgdGVzdCByZWZlcmVuY2VzIGFuZCBoZWFkZXIgZGVjbGFyYXRpb25zLiBJdCBpbnRyb2R1Y2VzIG5vIGZ1bmN0aW9uYWwsIGxvZ2ljYWwsIGNvbnRyb2wtZmxvdywgZGF0YSBzdHJ1Y3R1cmUsIG9yIGFzc2VydGlvbiBjaGFuZ2VzLiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEzOjU1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMzo1NDo0MS4yMjYzMjI0OTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTEwNjM1NTE1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnNpc3RzIHNvbGVseSBvZiBpZGVudGlmaWVyIHJlbmFtZXMgKHJlbmFtaW5nIGBpbnNlcnRfZXh0ZW50YCB0byBgdWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudGAgYW5kIGBzb3J0X2lkbWFwc2AgdG8gYHVpZF9naWRfbWFwX3NvcnRgKSBhbmQgdXBkYXRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgS1VuaXQgdGVzdCByZWZlcmVuY2VzIGFuZCBoZWFkZXIgZGVjbGFyYXRpb25zLiBJdCBpbnRyb2R1Y2VzIG5vIGZ1bmN0aW9uYWwsIGxvZ2ljYWwsIGNvbnRyb2wtZmxvdywgZGF0YSBzdHJ1Y3R1cmUsIG9yIGFzc2VydGlvbiBjaGFuZ2VzLiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEzOjU0OjQxLjIyNjMyNzMzNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAxNTYwMzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTNiMTZkZTc1MGUyMjNhNGQxMjJjZWY4MzQ2NzRlOTIyNzg5N2U2OVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCAxMSAxMzo1NDo0MCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzZXJfbmFtZXNwYWNlLmggYi9pbmNsdWRlL2xpbnV4L3VzZXJfbmFtZXNwYWNlLmhcXG5pbmRleCA2MzMxNTc3ODFlZGNiLi45MTIzMjA1Mzc3NWQ4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaFxcbkBAIC0yMDgsMTAgKzIwOCwxMSBAQCBleHRlcm4gYm9vbCBpbl91c2VybnMoY29uc3Qgc3RydWN0IHVzZXJfbmFtZXNwYWNlICphbmNlc3RvcixcXG4gZXh0ZXJuIGJvb2wgY3VycmVudF9pbl91c2VybnMoY29uc3Qgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp0YXJnZXRfbnMpO1xcbiBzdHJ1Y3QgbnNfY29tbW9uICpuc19nZXRfb3duZXIoc3RydWN0IG5zX2NvbW1vbiAqbnMpO1xcbiBcXG4tI2lmIElTX0VOQUJMRUQoQ09ORklHX1VTRVJfTlNfTUFQX0tVTklUX1RFU1QpXFxuLWV4dGVybiBpbnQgaW5zZXJ0X2V4dGVudChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgc3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQpO1xcbi1leHRlcm4gaW50IHNvcnRfaWRtYXBzKHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwKTtcXG4tI2VuZGlmIC8qIENPTkZJR19VU0VSX05TX01BUF9LVU5JVF9URVNUICovXFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19LVU5JVClcXG4rZXh0ZXJuIGludCB1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50KHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZXh0ZW50KTtcXG4rZXh0ZXJuIGludCB1aWRfZ2lkX21hcF9zb3J0KHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwKTtcXG4rI2VuZGlmIC8qIENPTkZJR19LVU5JVCAqL1xcbiBcXG4gI2Vsc2VcXG4gXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC90ZXN0cy91c2VyX25zX21hcF9rdW5pdC5jIGIva2VybmVsL3Rlc3RzL3VzZXJfbnNfbWFwX2t1bml0LmNcXG5pbmRleCAyNGMyMWU0M2EzNmM5Li4wMzNkY2NjNmE1MzViIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC90ZXN0cy91c2VyX25zX21hcF9rdW5pdC5jXFxuKysrIGIva2VybmVsL3Rlc3RzL3VzZXJfbnNfbWFwX2t1bml0LmNcXG5AQCAtMjQsNyArMjQsNyBAQCBzdGF0aWMgdm9pZCB1c2VyX25zX21hcF9pbnNlcnQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRcXHRleHRlbnQubG93ZXJfZmlyc3QgPSBpICogMTAwO1xcbiBcXHRcXHRleHRlbnQuY291bnQgPSA1O1xcbiBcXG4tXFx0XFx0cmV0ID0gaW5zZXJ0X2V4dGVudChcXHUwMDI2bWFwLCBcXHUwMDI2ZXh0ZW50KTtcXG4rXFx0XFx0cmV0ID0gdWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudChcXHUwMDI2bWFwLCBcXHUwMDI2ZXh0ZW50KTtcXG4gXFx0XFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJldCwgMCk7XFxuIFxcdH1cXG4gXFxuQEAgLTU0LDE0ICs1NCwxNCBAQCBzdGF0aWMgdm9pZCB1c2VyX25zX21hcF9pbnNlcnRfZXh0ZW5kZWQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRcXHRleHRlbnQubG93ZXJfZmlyc3QgPSB2YWx1ZSAqIDEwMDtcXG4gXFx0XFx0ZXh0ZW50LmNvdW50ID0gNTtcXG4gXFxuLVxcdFxcdHJldCA9IGluc2VydF9leHRlbnQoXFx1MDAyNm1hcCwgXFx1MDAyNmV4dGVudCk7XFxuK1xcdFxcdHJldCA9IHVpZF9naWRfbWFwX2luc2VydF9leHRlbnQoXFx1MDAyNm1hcCwgXFx1MDAyNmV4dGVudCk7XFxuIFxcdFxcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByZXQsIDApO1xcbiBcXHR9XFxuIFxcbiBcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgbWFwLm5yX2V4dGVudHMsIE5SX0VYVEVOVFMpO1xcbiBcXG4gXFx0LyogTm93IHNvcnQgdGhlIG1hcCB0byBzZXQgdXAgcmV2ZXJzZSBtYXBwaW5nICovXFxuLVxcdHJldCA9IHNvcnRfaWRtYXBzKFxcdTAwMjZtYXApO1xcbitcXHRyZXQgPSB1aWRfZ2lkX21hcF9zb3J0KFxcdTAwMjZtYXApO1xcbiBcXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmV0LCAwKTtcXG4gXFx0S1VOSVRfQVNTRVJUX05PVF9FUlJfT1JfTlVMTCh0ZXN0LCBtYXAucmV2ZXJzZSk7XFxuIFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jXFxuaW5kZXggZjljYmI0YjkyYjQ4Ny4uOThiMDI3OWI2Y2M2ZSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuY1xcbisrKyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jXFxuQEAgLTc4MCwxMiArNzgwLDEzIEBAIHN0YXRpYyBib29sIG1hcHBpbmdzX292ZXJsYXAoc3RydWN0IHVpZF9naWRfbWFwICpuZXdfbWFwLFxcbiB9XFxuIFxcbiAvKlxcbi0gKiBpbnNlcnRfZXh0ZW50IC0gU2FmZWx5IGluc2VydCBhIG5ldyBpZG1hcCBleHRlbnQgaW50byBzdHJ1Y3QgdWlkX2dpZF9tYXAuXFxuKyAqIHVpZF9naWRfbWFwX2luc2VydF9leHRlbnQgLSBTYWZlbHkgaW5zZXJ0IGEgbmV3IGlkbWFwIGV4dGVudCBpbnRvXFxuKyAqIHN0cnVjdCB1aWRfZ2lkX21hcC5cXG4gICogVGFrZXMgY2FyZSB0byBhbGxvY2F0ZSBhIDRLIGJsb2NrIG9mIG1lbW9yeSBpZiB0aGUgbnVtYmVyIG9mIG1hcHBpbmdzIGV4Y2VlZHNcXG4gICogVUlEX0dJRF9NQVBfTUFYX0JBU0VfRVhURU5UUy5cXG4gICovXFxuLVZJU0lCTEVfSUZfS1VOSVQgaW50IGluc2VydF9leHRlbnQoc3RydWN0IHVpZF9naWRfbWFwICptYXAsXFxuLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZXh0ZW50KVxcbitWSVNJQkxFX0lGX0tVTklUIGludCB1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50KHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQpXFxuIHtcXG4gXFx0c3RydWN0IHVpZF9naWRfZXh0ZW50ICpkZXN0O1xcbiBcXG5AQCAtODIxLDcgKzgyMiw3IEBAIFZJU0lCTEVfSUZfS1VOSVQgaW50IGluc2VydF9leHRlbnQoc3RydWN0IHVpZF9naWRfbWFwICptYXAsXFxuIFxcdCpkZXN0ID0gKmV4dGVudDtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4tRVhQT1JUX1NZTUJPTF9JRl9LVU5JVChpbnNlcnRfZXh0ZW50KTtcXG4rRVhQT1JUX1NZTUJPTF9JRl9LVU5JVCh1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50KTtcXG4gXFxuIC8qIGNtcCBmdW5jdGlvbiB0byBzb3J0KCkgZm9yd2FyZCBtYXBwaW5ncyAqL1xcbiBzdGF0aWMgaW50IGNtcF9leHRlbnRzX2ZvcndhcmQoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYilcXG5AQCAtODU0LDEwICs4NTUsMTAgQEAgc3RhdGljIGludCBjbXBfZXh0ZW50c19yZXZlcnNlKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpXFxuIH1cXG4gXFxuIC8qXFxuLSAqIHNvcnRfaWRtYXBzIC0gU29ydHMgYW4gYXJyYXkgb2YgaWRtYXAgZW50cmllcy5cXG4rICogdWlkX2dpZF9tYXBfc29ydCAtIFNvcnRzIGFuIGFycmF5IG9mIGlkbWFwIGVudHJpZXMuXFxuICAqIENhbiBvbmx5IGJlIGNhbGxlZCBpZiBudW1iZXIgb2YgbWFwcGluZ3MgZXhjZWVkcyBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTLlxcbiAgKi9cXG4tVklTSUJMRV9JRl9LVU5JVCBpbnQgc29ydF9pZG1hcHMoc3RydWN0IHVpZF9naWRfbWFwICptYXApXFxuK1ZJU0lCTEVfSUZfS1VOSVQgaW50IHVpZF9naWRfbWFwX3NvcnQoc3RydWN0IHVpZF9naWRfbWFwICptYXApXFxuIHtcXG4gXFx0aWYgKG1hcC1cXHUwMDNlbnJfZXh0ZW50cyBcXHUwMDNjPSBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG5AQCAtODc4LDcgKzg3OSw3IEBAIFZJU0lCTEVfSUZfS1VOSVQgaW50IHNvcnRfaWRtYXBzKHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwKVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4tRVhQT1JUX1NZTUJPTF9JRl9LVU5JVChzb3J0X2lkbWFwcyk7XFxuK0VYUE9SVF9TWU1CT0xfSUZfS1VOSVQodWlkX2dpZF9tYXBfc29ydCk7XFxuIFxcbiAvKipcXG4gICogdmVyaWZ5X3Jvb3RfbWFwKCkgLSBjaGVjayB0aGUgdWlkIDAgbWFwcGluZ1xcbkBAIC0xMDQ3LDcgKzEwNDgsNyBAQCBzdGF0aWMgc3NpemVfdCBtYXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXFxuIFxcdFxcdCAgICAobmV4dF9saW5lICE9IE5VTEwpKVxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFxuLVxcdFxcdHJldCA9IGluc2VydF9leHRlbnQoXFx1MDAyNm5ld19tYXAsIFxcdTAwMjZleHRlbnQpO1xcbitcXHRcXHRyZXQgPSB1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50KFxcdTAwMjZuZXdfbWFwLCBcXHUwMDI2ZXh0ZW50KTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbkBAIC0xMDkxLDcgKzEwOTIsNyBAQCBzdGF0aWMgc3NpemVfdCBtYXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXFxuIFxcdCAqIElmIHdlIHdhbnQgdG8gdXNlIGJpbmFyeSBzZWFyY2ggZm9yIGxvb2t1cCwgdGhpcyBjbG9uZXMgdGhlIGV4dGVudFxcbiBcXHQgKiBhcnJheSBhbmQgc29ydHMgYm90aCBjb3BpZXMuXFxuIFxcdCAqL1xcbi1cXHRyZXQgPSBzb3J0X2lkbWFwcyhcXHUwMDI2bmV3X21hcCk7XFxuK1xcdHJldCA9IHVpZF9naWRfbWFwX3NvcnQoXFx1MDAyNm5ld19tYXApO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMzo1NDo0MS43Mjg2NDAzOTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI4NjA0MDIwNzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25zaXN0cyBzb2xlbHkgb2YgaWRlbnRpZmllciByZW5hbWVzIChyZW5hbWluZyBgaW5zZXJ0X2V4dGVudGAgdG8gYHVpZF9naWRfbWFwX2luc2VydF9leHRlbnRgIGFuZCBgc29ydF9pZG1hcHNgIHRvIGB1aWRfZ2lkX21hcF9zb3J0YCkgYW5kIHVwZGF0aW5nIHRoZSBjb3JyZXNwb25kaW5nIEtVbml0IHRlc3QgcmVmZXJlbmNlcyBhbmQgaGVhZGVyIGRlY2xhcmF0aW9ucy4gSXQgaW50cm9kdWNlcyBubyBmdW5jdGlvbmFsLCBsb2dpY2FsLCBjb250cm9sLWZsb3csIGRhdGEgc3RydWN0dXJlLCBvciBhc3NlcnRpb24gY2hhbmdlcy4gVGhlcmVmb3JlLCBpdCBkb2VzIG5vdCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGUzYjE2ZGU3NTBlMjIzYTRkMTIyY2VmODM0Njc0ZTkyMjc4OTdlNjlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAxMzo1NDo0MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaCBiL2luY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaFxuaW5kZXggNjMzMTU3NzgxZWRjYi4uOTEyMzIwNTM3NzVkOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaFxuKysrIGIvaW5jbHVkZS9saW51eC91c2VyX25hbWVzcGFjZS5oXG5AQCAtMjA4LDEwICsyMDgsMTEgQEAgZXh0ZXJuIGJvb2wgaW5fdXNlcm5zKGNvbnN0IHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqYW5jZXN0b3IsXG4gZXh0ZXJuIGJvb2wgY3VycmVudF9pbl91c2VybnMoY29uc3Qgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp0YXJnZXRfbnMpO1xuIHN0cnVjdCBuc19jb21tb24gKm5zX2dldF9vd25lcihzdHJ1Y3QgbnNfY29tbW9uICpucyk7XG4gXG4tI2lmIElTX0VOQUJMRUQoQ09ORklHX1VTRVJfTlNfTUFQX0tVTklUX1RFU1QpXG4tZXh0ZXJuIGludCBpbnNlcnRfZXh0ZW50KHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCBzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKmV4dGVudCk7XG4tZXh0ZXJuIGludCBzb3J0X2lkbWFwcyhzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCk7XG4tI2VuZGlmIC8qIENPTkZJR19VU0VSX05TX01BUF9LVU5JVF9URVNUICovXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0tVTklUKVxuK2V4dGVybiBpbnQgdWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCxcbitcdFx0XHRcdCAgICAgc3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQpO1xuK2V4dGVybiBpbnQgdWlkX2dpZF9tYXBfc29ydChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCk7XG4rI2VuZGlmIC8qIENPTkZJR19LVU5JVCAqL1xuIFxuICNlbHNlXG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL3Rlc3RzL3VzZXJfbnNfbWFwX2t1bml0LmMgYi9rZXJuZWwvdGVzdHMvdXNlcl9uc19tYXBfa3VuaXQuY1xuaW5kZXggMjRjMjFlNDNhMzZjOS4uMDMzZGNjYzZhNTM1YiAxMDA2NDRcbi0tLSBhL2tlcm5lbC90ZXN0cy91c2VyX25zX21hcF9rdW5pdC5jXG4rKysgYi9rZXJuZWwvdGVzdHMvdXNlcl9uc19tYXBfa3VuaXQuY1xuQEAgLTI0LDcgKzI0LDcgQEAgc3RhdGljIHZvaWQgdXNlcl9uc19tYXBfaW5zZXJ0KHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdFx0ZXh0ZW50Lmxvd2VyX2ZpcnN0ID0gaSAqIDEwMDtcbiBcdFx0ZXh0ZW50LmNvdW50ID0gNTtcbiBcbi1cdFx0cmV0ID0gaW5zZXJ0X2V4dGVudChcdTAwMjZtYXAsIFx1MDAyNmV4dGVudCk7XG4rXHRcdHJldCA9IHVpZF9naWRfbWFwX2luc2VydF9leHRlbnQoXHUwMDI2bWFwLCBcdTAwMjZleHRlbnQpO1xuIFx0XHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmV0LCAwKTtcbiBcdH1cbiBcbkBAIC01NCwxNCArNTQsMTQgQEAgc3RhdGljIHZvaWQgdXNlcl9uc19tYXBfaW5zZXJ0X2V4dGVuZGVkKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdFx0ZXh0ZW50Lmxvd2VyX2ZpcnN0ID0gdmFsdWUgKiAxMDA7XG4gXHRcdGV4dGVudC5jb3VudCA9IDU7XG4gXG4tXHRcdHJldCA9IGluc2VydF9leHRlbnQoXHUwMDI2bWFwLCBcdTAwMjZleHRlbnQpO1xuK1x0XHRyZXQgPSB1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50KFx1MDAyNm1hcCwgXHUwMDI2ZXh0ZW50KTtcbiBcdFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJldCwgMCk7XG4gXHR9XG4gXG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgbWFwLm5yX2V4dGVudHMsIE5SX0VYVEVOVFMpO1xuIFxuIFx0LyogTm93IHNvcnQgdGhlIG1hcCB0byBzZXQgdXAgcmV2ZXJzZSBtYXBwaW5nICovXG4tXHRyZXQgPSBzb3J0X2lkbWFwcyhcdTAwMjZtYXApO1xuK1x0cmV0ID0gdWlkX2dpZF9tYXBfc29ydChcdTAwMjZtYXApO1xuIFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJldCwgMCk7XG4gXHRLVU5JVF9BU1NFUlRfTk9UX0VSUl9PUl9OVUxMKHRlc3QsIG1hcC5yZXZlcnNlKTtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jXG5pbmRleCBmOWNiYjRiOTJiNDg3Li45OGIwMjc5YjZjYzZlIDEwMDY0NFxuLS0tIGEva2VybmVsL3VzZXJfbmFtZXNwYWNlLmNcbisrKyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jXG5AQCAtNzgwLDEyICs3ODAsMTMgQEAgc3RhdGljIGJvb2wgbWFwcGluZ3Nfb3ZlcmxhcChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm5ld19tYXAsXG4gfVxuIFxuIC8qXG4tICogaW5zZXJ0X2V4dGVudCAtIFNhZmVseSBpbnNlcnQgYSBuZXcgaWRtYXAgZXh0ZW50IGludG8gc3RydWN0IHVpZF9naWRfbWFwLlxuKyAqIHVpZF9naWRfbWFwX2luc2VydF9leHRlbnQgLSBTYWZlbHkgaW5zZXJ0IGEgbmV3IGlkbWFwIGV4dGVudCBpbnRvXG4rICogc3RydWN0IHVpZF9naWRfbWFwLlxuICAqIFRha2VzIGNhcmUgdG8gYWxsb2NhdGUgYSA0SyBibG9jayBvZiBtZW1vcnkgaWYgdGhlIG51bWJlciBvZiBtYXBwaW5ncyBleGNlZWRzXG4gICogVUlEX0dJRF9NQVBfTUFYX0JBU0VfRVhURU5UUy5cbiAgKi9cbi1WSVNJQkxFX0lGX0tVTklUIGludCBpbnNlcnRfZXh0ZW50KHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLFxuLVx0XHRcdFx0ICAgc3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQpXG4rVklTSUJMRV9JRl9LVU5JVCBpbnQgdWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCxcbitcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZXh0ZW50KVxuIHtcbiBcdHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZGVzdDtcbiBcbkBAIC04MjEsNyArODIyLDcgQEAgVklTSUJMRV9JRl9LVU5JVCBpbnQgaW5zZXJ0X2V4dGVudChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCxcbiBcdCpkZXN0ID0gKmV4dGVudDtcbiBcdHJldHVybiAwO1xuIH1cbi1FWFBPUlRfU1lNQk9MX0lGX0tVTklUKGluc2VydF9leHRlbnQpO1xuK0VYUE9SVF9TWU1CT0xfSUZfS1VOSVQodWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudCk7XG4gXG4gLyogY21wIGZ1bmN0aW9uIHRvIHNvcnQoKSBmb3J3YXJkIG1hcHBpbmdzICovXG4gc3RhdGljIGludCBjbXBfZXh0ZW50c19mb3J3YXJkKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpXG5AQCAtODU0LDEwICs4NTUsMTAgQEAgc3RhdGljIGludCBjbXBfZXh0ZW50c19yZXZlcnNlKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpXG4gfVxuIFxuIC8qXG4tICogc29ydF9pZG1hcHMgLSBTb3J0cyBhbiBhcnJheSBvZiBpZG1hcCBlbnRyaWVzLlxuKyAqIHVpZF9naWRfbWFwX3NvcnQgLSBTb3J0cyBhbiBhcnJheSBvZiBpZG1hcCBlbnRyaWVzLlxuICAqIENhbiBvbmx5IGJlIGNhbGxlZCBpZiBudW1iZXIgb2YgbWFwcGluZ3MgZXhjZWVkcyBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTLlxuICAqL1xuLVZJU0lCTEVfSUZfS1VOSVQgaW50IHNvcnRfaWRtYXBzKHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwKVxuK1ZJU0lCTEVfSUZfS1VOSVQgaW50IHVpZF9naWRfbWFwX3NvcnQoc3RydWN0IHVpZF9naWRfbWFwICptYXApXG4ge1xuIFx0aWYgKG1hcC1cdTAwM2Vucl9leHRlbnRzIFx1MDAzYz0gVUlEX0dJRF9NQVBfTUFYX0JBU0VfRVhURU5UUylcbiBcdFx0cmV0dXJuIDA7XG5AQCAtODc4LDcgKzg3OSw3IEBAIFZJU0lCTEVfSUZfS1VOSVQgaW50IHNvcnRfaWRtYXBzKHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwKVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuLUVYUE9SVF9TWU1CT0xfSUZfS1VOSVQoc29ydF9pZG1hcHMpO1xuK0VYUE9SVF9TWU1CT0xfSUZfS1VOSVQodWlkX2dpZF9tYXBfc29ydCk7XG4gXG4gLyoqXG4gICogdmVyaWZ5X3Jvb3RfbWFwKCkgLSBjaGVjayB0aGUgdWlkIDAgbWFwcGluZ1xuQEAgLTEwNDcsNyArMTA0OCw3IEBAIHN0YXRpYyBzc2l6ZV90IG1hcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdFx0ICAgIChuZXh0X2xpbmUgIT0gTlVMTCkpXG4gXHRcdFx0Z290byBvdXQ7XG4gXG4tXHRcdHJldCA9IGluc2VydF9leHRlbnQoXHUwMDI2bmV3X21hcCwgXHUwMDI2ZXh0ZW50KTtcbitcdFx0cmV0ID0gdWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudChcdTAwMjZuZXdfbWFwLCBcdTAwMjZleHRlbnQpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHRyZXQgPSAtRUlOVkFMO1xuQEAgLTEwOTEsNyArMTA5Miw3IEBAIHN0YXRpYyBzc2l6ZV90IG1hcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdCAqIElmIHdlIHdhbnQgdG8gdXNlIGJpbmFyeSBzZWFyY2ggZm9yIGxvb2t1cCwgdGhpcyBjbG9uZXMgdGhlIGV4dGVudFxuIFx0ICogYXJyYXkgYW5kIHNvcnRzIGJvdGggY29waWVzLlxuIFx0ICovXG4tXHRyZXQgPSBzb3J0X2lkbWFwcyhcdTAwMjZuZXdfbWFwKTtcbitcdHJldCA9IHVpZF9naWRfbWFwX3NvcnQoXHUwMDI2bmV3X21hcCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dDtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEzOjU0OjQxLjcyODY0MTc2M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgyMjkyOTMxNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQ29kZSBQYXRjaCBmb3IgUG90ZW50aWFsIEltcGFjdCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS4gSXQgbG9va3MgbGlrZSB3ZSdyZSBkZWFsaW5nIHdpdGggYSBkaWZmIHRoYXQgcHJpbWFyaWx5IGltcGFjdHMgZmlsZXMgcmVsYXRlZCB0byB0aGUgYHVzZXJfbmFtZXNwYWNlYC4gSSBzZWUgbW9kaWZpY2F0aW9ucyBpbiBgaW5jbHVkZS9saW51eC91c2VyX25hbWVzcGFjZS5oYCwgYGtlcm5lbC90ZXN0cy91c2VyX25zX21hcF9rdW5pdC5jYCwgYW5kIGBrZXJuZWwvdXNlcl9uYW1lc3BhY2UuY2AuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgc3ltYm9sIHJlbmFtaW5nOiBgaW5zZXJ0X2V4dGVudGAgaXMgbm93IGB1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50YCwgYW5kIGBzb3J0X2lkbWFwc2AgaGFzIGJlY29tZSBgdWlkX2dpZF9tYXBfc29ydGAuIEFsc28sIGAjaWYgSVNfRU5BQkxFRChDT05GSUdfVVNFUl9OU19NQVBfS1VOSVRfVEVTVClgIGhhcyBjaGFuZ2VkIHRvIGAjaWYgSVNfRU5BQkxFRChDT05GSUdfS1VOSVQpYC5cblxuTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyAqbWlnaHQqIGJlIGEgc3RyYWlnaHRmb3J3YXJkIHJlZmFjdG9yaW5nLiBIb3dldmVyLCBJIGtub3cgYmV0dGVyIHRoYW4gdG8gYXNzdW1lLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBrZXJuZWwncyBjb21wbGV4aXRpZXMuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGVyZSBhcmUgKm5vKiBsb2dpYyBjaGFuZ2VzLCAqb25seSogc3ltYm9sIHJlbmFtaW5nLiBUaGUgcnVsZXMgYXJlIHByZXR0eSBjbGVhcjogcmVmYWN0b3JpbmcgY2FuIGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzLiBTbywgSSBuZWVkIHRvIGNoZWNrIHRoZSBkaWZmcyB0aG9yb3VnaGx5IGZvciBhbnkgc2lnbnMgb2YgcmVhcnJhbmdlbWVudCwgaGVscGVyIGZ1bmN0aW9ucywgb3Igc3RhdGUgbWFuYWdlbWVudCBhbHRlcmF0aW9ucyB3aXRoaW4gdGhlIG1vZGlmaWVkIGZpbGVzLCBlc3BlY2lhbGx5IGBrZXJuZWwvdXNlcl9uYW1lc3BhY2UuY2AuIEkgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyBwdXJlbHkgYSBzeW1ib2wgcmVuYW1lLiBJJ2xsIG5lZWQgdG8gdXNlIHRvb2xzIGxpa2UgYGdpdCBkaWZmYCBvciBgcmVhZC1maWxlYCBhbmQgYGdyZXBwZXJgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM5MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEzOjU0OjQ5Ljk1NzkzNzU4NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTU3NTExOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50fGluc2VydF9leHRlbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdGVzdHMvdXNlcl9uc19tYXBfa3VuaXQuYz0xMz1zdGF0aWMgdm9pZCB1c2VyX25zX21hcF9pbnNlcnQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxua2VybmVsL3Rlc3RzL3VzZXJfbnNfbWFwX2t1bml0LmMtMjYtXFxua2VybmVsL3Rlc3RzL3VzZXJfbnNfbWFwX2t1bml0LmM6Mjc6XFx0XFx0cmV0ID0gdWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudChcXHUwMDI2bWFwLCBcXHUwMDI2ZXh0ZW50KTtcXG5rZXJuZWwvdGVzdHMvdXNlcl9uc19tYXBfa3VuaXQuYy0yOC1cXHRcXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmV0LCAwKTtcXG4tLVxcbmtlcm5lbC90ZXN0cy91c2VyX25zX21hcF9rdW5pdC5jPTQxPXN0YXRpYyB2b2lkIHVzZXJfbnNfbWFwX2luc2VydF9leHRlbmRlZChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5rZXJuZWwvdGVzdHMvdXNlcl9uc19tYXBfa3VuaXQuYy01Ni1cXG5rZXJuZWwvdGVzdHMvdXNlcl9uc19tYXBfa3VuaXQuYzo1NzpcXHRcXHRyZXQgPSB1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50KFxcdTAwMjZtYXAsIFxcdTAwMjZleHRlbnQpO1xcbmtlcm5lbC90ZXN0cy91c2VyX25zX21hcF9rdW5pdC5jLTU4LVxcdFxcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByZXQsIDApO1xcbi0tXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM9NzQzPXN0YXRpYyBib29sIG1hcHBpbmdzX292ZXJsYXAoc3RydWN0IHVpZF9naWRfbWFwICpuZXdfbWFwLFxcbi0tXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtNzgyLS8qXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM6NzgzOiAqIHVpZF9naWRfbWFwX2luc2VydF9leHRlbnQgLSBTYWZlbHkgaW5zZXJ0IGEgbmV3IGlkbWFwIGV4dGVudCBpbnRvXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtNzg0LSAqIHN0cnVjdCB1aWRfZ2lkX21hcC5cXG4tLVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTc4Ny0gKi9cXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzo3ODg6VklTSUJMRV9JRl9LVU5JVCBpbnQgdWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCxcXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy03ODktXFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZXh0ZW50KVxcbi0tXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtODI0LX1cXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzo4MjU6RVhQT1JUX1NZTUJPTF9JRl9LVU5JVCh1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50KTtcXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy04MjYtXFxuLS1cXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYz05Mzg9c3RhdGljIHNzaXplX3QgbWFwX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxcbi0tXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMTA1MC1cXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzoxMDUxOlxcdFxcdHJldCA9IHVpZF9naWRfbWFwX2luc2VydF9leHRlbnQoXFx1MDAyNm5ld19tYXAsIFxcdTAwMjZleHRlbnQpO1xcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTEwNTItXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEzOjU0OjUwLjAxOTUxOTk5NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MTIzMjU3NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBrZXJuZWwgYW5hbHlzaXMsIHByZXNlbnRlZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIFVzZXIgTmFtZXNwYWNlczogQSBGb2N1c2VkIEluc3BlY3Rpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIHplcm8gaW4gb24gYGtlcm5lbC91c2VyX25hbWVzcGFjZS5jYC4gRnJvbSBtZW1vcnksIHRoZSBjb3JlIG9mIHVzZXIgbmFtZXNwYWNlIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgaG93IGNyZWRlbnRpYWxzIGFuZCBwZXJtaXNzaW9ucyBhcmUgbWFuYWdlZCB3aXRoaW4gYSBuYW1lc3BhY2UsIGlzIHByb2JhYmx5IGFyb3VuZCB0aGUgNzgwLTg5MCBsaW5lIHJhbmdlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB1c2VyIElEcyBhbmQgZ3JvdXAgSURzIGFyZSBtYXBwZWQsIGhvdyBjYXBhYmlsaXR5IGJvdW5kaW5nIHNldHMgYXJlIGFkanVzdGVkLCBhbmQgd2hlcmUgdGhlIGNydWNpYWwgY2hlY2tzIHJlbGF0ZWQgdG8gcm9vdCBwcml2aWxlZ2VzIGFyZSBpbXBsZW1lbnRlZC4gSSBzdXNwZWN0IHRoaXMgc2VjdGlvbiBjb250YWlucyB0aGUgY3JpdGljYWwgbG9naWMgZm9yIGhvdyBhIHByb2Nlc3MgZ2FpbnMgKG9yIGxvc2VzKSBpdHMgc3BlY2lhbCBwb3dlcnMgd2l0aGluIGEgdXNlciBuYW1lc3BhY2UuIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBidWdzIG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIGx1cmtpbmcgdGhlcmUuLi4gSXQncyBhbGwgYWJvdXQgaG93IHRoZXNlIGJvdW5kYXJpZXMgYXJlIHNldCBhbmQgdXBoZWxkLCBhbmQgdGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIGZ1biBiZWdpbnMsIHJpZ2h0PyBJJ2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGZvbGxvd2luZyBhbnkgZnVuY3Rpb24gY2FsbHMgZnJvbSB0aGF0IGFyZWEgYW5kIHNlZSB3aGVyZSB0aGV5IGxlYWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMTUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMzo1NDo1Mi42MzE4NDg0NDFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDYyNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3VzZXJfbmFtZXNwYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzgwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc4MDpcXHR9XFxuIDc4MTpcXHRcXG4gNzgyOlxcdC8qXFxuIDc4MzpcXHQgKiB1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50IC0gU2FmZWx5IGluc2VydCBhIG5ldyBpZG1hcCBleHRlbnQgaW50b1xcbiA3ODQ6XFx0ICogc3RydWN0IHVpZF9naWRfbWFwLlxcbiA3ODU6XFx0ICogVGFrZXMgY2FyZSB0byBhbGxvY2F0ZSBhIDRLIGJsb2NrIG9mIG1lbW9yeSBpZiB0aGUgbnVtYmVyIG9mIG1hcHBpbmdzIGV4Y2VlZHNcXG4gNzg2OlxcdCAqIFVJRF9HSURfTUFQX01BWF9CQVNFX0VYVEVOVFMuXFxuIDc4NzpcXHQgKi9cXG4gNzg4OlxcdFZJU0lCTEVfSUZfS1VOSVQgaW50IHVpZF9naWRfbWFwX2luc2VydF9leHRlbnQoc3RydWN0IHVpZF9naWRfbWFwICptYXAsXFxuIDc4OTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQpXFxuIDc5MDpcXHR7XFxuIDc5MTpcXHRcXHRzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKmRlc3Q7XFxuIDc5MjpcXHRcXG4gNzkzOlxcdFxcdGlmIChtYXAtXFx1MDAzZW5yX2V4dGVudHMgPT0gVUlEX0dJRF9NQVBfTUFYX0JBU0VfRVhURU5UUykge1xcbiA3OTQ6XFx0XFx0XFx0c3RydWN0IHVpZF9naWRfZXh0ZW50ICpmb3J3YXJkO1xcbiA3OTU6XFx0XFxuIDc5NjpcXHRcXHRcXHQvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIDM0MCBtYXBwaW5ncy4gKi9cXG4gNzk3OlxcdFxcdFxcdGZvcndhcmQgPSBrbWFsbG9jX29ianMoc3RydWN0IHVpZF9naWRfZXh0ZW50LFxcbiA3OTg6XFx0XFx0XFx0XFx0XFx0ICAgICAgIFVJRF9HSURfTUFQX01BWF9FWFRFTlRTKTtcXG4gNzk5OlxcdFxcdFxcdGlmICghZm9yd2FyZClcXG4gODAwOlxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA4MDE6XFx0XFxuIDgwMjpcXHRcXHRcXHQvKiBDb3B5IG92ZXIgbWVtb3J5LiBPbmx5IHNldCB1cCBtZW1vcnkgZm9yIHRoZSBmb3J3YXJkIHBvaW50ZXIuXFxuIDgwMzpcXHRcXHRcXHQgKiBEZWZlciB0aGUgbWVtb3J5IHNldHVwIGZvciB0aGUgcmV2ZXJzZSBwb2ludGVyLlxcbiA4MDQ6XFx0XFx0XFx0ICovXFxuIDgwNTpcXHRcXHRcXHRtZW1jcHkoZm9yd2FyZCwgbWFwLVxcdTAwM2VleHRlbnQsXFxuIDgwNjpcXHRcXHRcXHQgICAgICAgbWFwLVxcdTAwM2Vucl9leHRlbnRzICogc2l6ZW9mKG1hcC1cXHUwMDNlZXh0ZW50WzBdKSk7XFxuIDgwNzpcXHRcXG4gODA4OlxcdFxcdFxcdG1hcC1cXHUwMDNlZm9yd2FyZCA9IGZvcndhcmQ7XFxuIDgwOTpcXHRcXHRcXHRtYXAtXFx1MDAzZXJldmVyc2UgPSBOVUxMO1xcbiA4MTA6XFx0XFx0fVxcbiA4MTE6XFx0XFxuIDgxMjpcXHRcXHQvKlxcbiA4MTM6XFx0XFx0ICogbnJfZXh0ZW50cyBtdXN0IGJlIHVwZGF0ZWQgYmVmb3JlIHRoZSBleHRlbnQgYW5kIGZvcndhcmQgYXJyYXlzIGFyZVxcbiA4MTQ6XFx0XFx0ICogYWNjZXNzZWQsIG90aGVyd2lzZSBLU0FOIHdpbGwgYXNzZXJ0IGFuIG91dC1vZi1ib3VuZHMgZXJyb3IuXFxuIDgxNTpcXHRcXHQgKi9cXG4gODE2OlxcdFxcdG1hcC1cXHUwMDNlbnJfZXh0ZW50cysrO1xcbiA4MTc6XFx0XFx0aWYgKG1hcC1cXHUwMDNlbnJfZXh0ZW50cyBcXHUwMDNjPSBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTKVxcbiA4MTg6XFx0XFx0XFx0ZGVzdCA9IFxcdTAwMjZtYXAtXFx1MDAzZWV4dGVudFttYXAtXFx1MDAzZW5yX2V4dGVudHMgLSAxXTtcXG4gODE5OlxcdFxcdGVsc2VcXG4gODIwOlxcdFxcdFxcdGRlc3QgPSBcXHUwMDI2bWFwLVxcdTAwM2Vmb3J3YXJkW21hcC1cXHUwMDNlbnJfZXh0ZW50cyAtIDFdO1xcbiA4MjE6XFx0XFxuIDgyMjpcXHRcXHQqZGVzdCA9ICpleHRlbnQ7XFxuIDgyMzpcXHRcXHRyZXR1cm4gMDtcXG4gODI0OlxcdH1cXG4gODI1OlxcdEVYUE9SVF9TWU1CT0xfSUZfS1VOSVQodWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudCk7XFxuIDgyNjpcXHRcXG4gODI3OlxcdC8qIGNtcCBmdW5jdGlvbiB0byBzb3J0KCkgZm9yd2FyZCBtYXBwaW5ncyAqL1xcbiA4Mjg6XFx0c3RhdGljIGludCBjbXBfZXh0ZW50c19mb3J3YXJkKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpXFxuIDgyOTpcXHR7XFxuIDgzMDpcXHRcXHRjb25zdCBzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKmUxID0gYTtcXG4gODMxOlxcdFxcdGNvbnN0IHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZTIgPSBiO1xcbiA4MzI6XFx0XFxuIDgzMzpcXHRcXHRpZiAoZTEtXFx1MDAzZWZpcnN0IFxcdTAwM2MgZTItXFx1MDAzZWZpcnN0KVxcbiA4MzQ6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiA4MzU6XFx0XFxuIDgzNjpcXHRcXHRpZiAoZTEtXFx1MDAzZWZpcnN0IFxcdTAwM2UgZTItXFx1MDAzZWZpcnN0KVxcbiA4Mzc6XFx0XFx0XFx0cmV0dXJuIDE7XFxuIDgzODpcXHRcXG4gODM5OlxcdFxcdHJldHVybiAwO1xcbiA4NDA6XFx0fVxcbiA4NDE6XFx0XFxuIDg0MjpcXHQvKiBjbXAgZnVuY3Rpb24gdG8gc29ydCgpIHJldmVyc2UgbWFwcGluZ3MgKi9cXG4gODQzOlxcdHN0YXRpYyBpbnQgY21wX2V4dGVudHNfcmV2ZXJzZShjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKVxcbiA4NDQ6XFx0e1xcbiA4NDU6XFx0XFx0Y29uc3Qgc3RydWN0IHVpZF9naWRfZXh0ZW50ICplMSA9IGE7XFxuIDg0NjpcXHRcXHRjb25zdCBzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKmUyID0gYjtcXG4gODQ3OlxcdFxcbiA4NDg6XFx0XFx0aWYgKGUxLVxcdTAwM2Vsb3dlcl9maXJzdCBcXHUwMDNjIGUyLVxcdTAwM2Vsb3dlcl9maXJzdClcXG4gODQ5OlxcdFxcdFxcdHJldHVybiAtMTtcXG4gODUwOlxcdFxcbiA4NTE6XFx0XFx0aWYgKGUxLVxcdTAwM2Vsb3dlcl9maXJzdCBcXHUwMDNlIGUyLVxcdTAwM2Vsb3dlcl9maXJzdClcXG4gODUyOlxcdFxcdFxcdHJldHVybiAxO1xcbiA4NTM6XFx0XFxuIDg1NDpcXHRcXHRyZXR1cm4gMDtcXG4gODU1OlxcdH1cXG4gODU2OlxcdFxcbiA4NTc6XFx0LypcXG4gODU4OlxcdCAqIHVpZF9naWRfbWFwX3NvcnQgLSBTb3J0cyBhbiBhcnJheSBvZiBpZG1hcCBlbnRyaWVzLlxcbiA4NTk6XFx0ICogQ2FuIG9ubHkgYmUgY2FsbGVkIGlmIG51bWJlciBvZiBtYXBwaW5ncyBleGNlZWRzIFVJRF9HSURfTUFQX01BWF9CQVNFX0VYVEVOVFMuXFxuIDg2MDpcXHQgKi9cXG4gODYxOlxcdFZJU0lCTEVfSUZfS1VOSVQgaW50IHVpZF9naWRfbWFwX3NvcnQoc3RydWN0IHVpZF9naWRfbWFwICptYXApXFxuIDg2MjpcXHR7XFxuIDg2MzpcXHRcXHRpZiAobWFwLVxcdTAwM2Vucl9leHRlbnRzIFxcdTAwM2M9IFVJRF9HSURfTUFQX01BWF9CQVNFX0VYVEVOVFMpXFxuIDg2NDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gODY1OlxcdFxcbiA4NjY6XFx0XFx0LyogU29ydCBmb3J3YXJkIGFycmF5LiAqL1xcbiA4Njc6XFx0XFx0c29ydChtYXAtXFx1MDAzZWZvcndhcmQsIG1hcC1cXHUwMDNlbnJfZXh0ZW50cywgc2l6ZW9mKHN0cnVjdCB1aWRfZ2lkX2V4dGVudCksXFxuIDg2ODpcXHRcXHQgICAgIGNtcF9leHRlbnRzX2ZvcndhcmQsIE5VTEwpO1xcbiA4Njk6XFx0XFxuIDg3MDpcXHRcXHQvKiBPbmx5IGNvcHkgdGhlIG1lbW9yeSBmcm9tIGZvcndhcmQgd2UgYWN0dWFsbHkgbmVlZC4gKi9cXG4gODcxOlxcdFxcdG1hcC1cXHUwMDNlcmV2ZXJzZSA9IGttZW1kdXBfYXJyYXkobWFwLVxcdTAwM2Vmb3J3YXJkLCBtYXAtXFx1MDAzZW5yX2V4dGVudHMsXFxuIDg3MjpcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZihzdHJ1Y3QgdWlkX2dpZF9leHRlbnQpLCBHRlBfS0VSTkVMKTtcXG4gODczOlxcdFxcdGlmICghbWFwLVxcdTAwM2VyZXZlcnNlKVxcbiA4NzQ6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDg3NTpcXHRcXG4gODc2OlxcdFxcdC8qIFNvcnQgcmV2ZXJzZSBhcnJheS4gKi9cXG4gODc3OlxcdFxcdHNvcnQobWFwLVxcdTAwM2VyZXZlcnNlLCBtYXAtXFx1MDAzZW5yX2V4dGVudHMsIHNpemVvZihzdHJ1Y3QgdWlkX2dpZF9leHRlbnQpLFxcbiA4Nzg6XFx0XFx0ICAgICBjbXBfZXh0ZW50c19yZXZlcnNlLCBOVUxMKTtcXG4gODc5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMzo1NDo1Mi42MzE5NTY4NjJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTA5OTQwOTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIFVzZXIgTmFtZXNwYWNlcyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdXNlciBuYW1lc3BhY2VzIGFuZCBob3cgdGhleSdyZSBzdHJ1Y3R1cmVkLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBoZWFkZXIgZmlsZSwgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL2xpbnV4L3VzZXJfbmFtZXNwYWNlLmhgLiBJJ20gZ3Vlc3NpbmcgdGhlIGNvcmUgZGVmaW5pdGlvbnMgYW5kIHN0cnVjdHVyZXMgSSdtIGxvb2tpbmcgZm9yIHdpbGwgYmUgY29uY2VudHJhdGVkIGFyb3VuZCBsaW5lcyAyMDUgdG8gMjIwLiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgc3RydWN0dXJlIGRlZmluaXRpb25zIG9yIHJlbGF0ZWQgZnVuY3Rpb24gcHJvdG90eXBlcyByZXNpZGUuIExldCdzIHNlZSB3aGF0IGdvb2RpZXMgdGhpcyBzZWN0aW9uIGhvbGRzLi4uIGhvcGVmdWxseSwgdGhpcyB3aWxsIHByb3ZpZGUgdGhlIGNvbnRleHQgSSBuZWVkIVxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTAxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMzo1NDo1NS41NDE5MDA5NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyMDAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMDA6XFx0ZXh0ZXJuIHNzaXplX3QgcHJvY191aWRfbWFwX3dyaXRlKHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90ICopO1xcbiAyMDE6XFx0ZXh0ZXJuIHNzaXplX3QgcHJvY19naWRfbWFwX3dyaXRlKHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90ICopO1xcbiAyMDI6XFx0ZXh0ZXJuIHNzaXplX3QgcHJvY19wcm9qaWRfbWFwX3dyaXRlKHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90ICopO1xcbiAyMDM6XFx0ZXh0ZXJuIHNzaXplX3QgcHJvY19zZXRncm91cHNfd3JpdGUoc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7XFxuIDIwNDpcXHRleHRlcm4gaW50IHByb2Nfc2V0Z3JvdXBzX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KTtcXG4gMjA1OlxcdGV4dGVybiBib29sIHVzZXJuc19tYXlfc2V0Z3JvdXBzKGNvbnN0IHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnMpO1xcbiAyMDY6XFx0ZXh0ZXJuIGJvb2wgaW5fdXNlcm5zKGNvbnN0IHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqYW5jZXN0b3IsXFxuIDIwNzpcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHVzZXJfbmFtZXNwYWNlICpjaGlsZCk7XFxuIDIwODpcXHRleHRlcm4gYm9vbCBjdXJyZW50X2luX3VzZXJucyhjb25zdCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnRhcmdldF9ucyk7XFxuIDIwOTpcXHRzdHJ1Y3QgbnNfY29tbW9uICpuc19nZXRfb3duZXIoc3RydWN0IG5zX2NvbW1vbiAqbnMpO1xcbiAyMTA6XFx0XFxuIDIxMTpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfS1VOSVQpXFxuIDIxMjpcXHRleHRlcm4gaW50IHVpZF9naWRfbWFwX2luc2VydF9leHRlbnQoc3RydWN0IHVpZF9naWRfbWFwICptYXAsXFxuIDIxMzpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZXh0ZW50KTtcXG4gMjE0OlxcdGV4dGVybiBpbnQgdWlkX2dpZF9tYXBfc29ydChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCk7XFxuIDIxNTpcXHQjZW5kaWYgLyogQ09ORklHX0tVTklUICovXFxuIDIxNjpcXHRcXG4gMjE3OlxcdCNlbHNlXFxuIDIxODpcXHRcXG4gMjE5OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHVzZXJfbmFtZXNwYWNlICpnZXRfdXNlcl9ucyhzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zKVxcbiAyMjA6XFx0e1xcbiAyMjE6XFx0XFx0cmV0dXJuIFxcdTAwMjZpbml0X3VzZXJfbnM7XFxuIDIyMjpcXHR9XFxuIDIyMzpcXHRcXG4gMjI0OlxcdHN0YXRpYyBpbmxpbmUgaW50IGNyZWF0ZV91c2VyX25zKHN0cnVjdCBjcmVkICpuZXcpXFxuIDIyNTpcXHR7XFxuIDIyNjpcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjI3OlxcdH1cXG4gMjI4OlxcdFxcbiAyMjk6XFx0c3RhdGljIGlubGluZSBpbnQgdW5zaGFyZV91c2VybnModW5zaWduZWQgbG9uZyB1bnNoYXJlX2ZsYWdzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMzo1NDo1NS41NDE5NzM1NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0NzkwNjU5NzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHRhc2sgYXQgaGFuZCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCB3YXJyYW50cyBmdXp6aW5nLiBUaGUgaW5pdGlhbCBsb29rIGluZGljYXRlcyBpdCdzIGEgcmVuYW1pbmcgb3BlcmF0aW9uLCB3aGljaCAqc2VlbXMqIGxpa2UgYSBzaW1wbGUgcmVmYWN0b3IsIGJ1dCB3ZSBuZWVkIHRvIGJlIHJpZ29yb3VzLiBGaXJzdCwgSSBub3RlIHRoYXQgdGhlIHBhdGNoIHJlbmFtZXMgdHdvIGZ1bmN0aW9uczogYGluc2VydF9leHRlbnRgIHRvIGB1aWRfZ2lkX21hcF9pbnNlcnRfZXh0ZW50YCBhbmQgYHNvcnRfaWRtYXBzYCB0byBgdWlkX2dpZF9tYXBfc29ydGAuIEl0IGFsc28gbW9kaWZpZXMgYSBoZWFkZXIgZmlsZSwgY2hhbmdpbmcgdGhlIGBDT05GSUdfVVNFUl9OU19NQVBfS1VOSVRfVEVTVGAgZ3VhcmQgdG8gYENPTkZJR19LVU5JVGAuIE15IGltbWVkaWF0ZSBxdWVzdGlvbjogKmlzIHRoaXMgYSBmdW5jdGlvbmFsIGNoYW5nZT8qIExvb2tpbmcgYXQgdGhlIGRpZmYsIG5vLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byB0aGUgdW5kZXJseWluZyBsb2dpYywgbm8gYWx0ZXJhdGlvbnMgdG8gZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgbm8gbmV3IGFzc2VydGlvbnMgaW50cm9kdWNlZC4gSXQncyAqcHVyZWx5KiBhIHJlbmFtaW5nL3ByZWZpeGluZyBvcGVyYXRpb24sIHNwZWNpZmljYWxseSBmb3IgS1VuaXQgdGVzdCBzeW1ib2xzLlxuXG5Ob3csIGxldCdzIGNvbnN1bHQgdGhlIGd1aWRlbGluZXMuIFRoZSBjb3JlIHByaW5jaXBsZSBlbXBoYXNpemVzIHRoYXQgd2UgKm11c3QqIGZ1enogcmVhY2hhYmxlLCBleGVjdXRhYmxlIGNvZGUuIFRoZSBndWlkZWxpbmVzIGV4cGxpY2l0bHkgc3RhdGUgdGhhdCB3ZSAqc2hvdWxkIG5vdCogYmxpbmRseSB0cnVzdCBjbGFpbXMgb2YgXCJubyBmdW5jdGlvbmFsIGNoYW5nZVwiIG9yIFwicmVmYWN0b3JpbmcuXCIgSG93ZXZlciwgdGhleSBhbHNvIGRlZmluZSBzcGVjaWZpYyBzY2VuYXJpb3Mgd2hlcmUgd2UgKnNob3VsZCBub3QqIGZ1enouIFRoZXNlIGluY2x1ZGU6IG5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXMsIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSwgYW5kIHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocy4gUmVuYW1pbmcgZnVuY3Rpb24gc3ltYm9scyB3aXRob3V0IG1vZGlmeWluZyBjb2RlIGxvZ2ljIHNvdW5kcyBsaWtlIG9uZSBvZiB0aG9zZSAqbm9uLWV4ZWN1dGFibGUgY2hhbmdlcyosIHJpZ2h0P1xuXG5JIHJlLXJlYWQgU2VjdGlvbiAyLCBzcGVjaWZpY2FsbHkgdGhlIHNlY3Rpb24gZm9yIGRldGVybWluaW5nIHdoZW4gYFdvcnRoRnV6emluZz1mYWxzZWAuIEl0IGxpc3RzIFwiTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlcyxcIiB3aGljaCBpbmNsdWRlcyBtb2RpZmljYXRpb25zIHRvIFwiQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlwiIFRoaXMgc2VlbXMgbGlrZSB0aGUgcmVsZXZhbnQgY2F0ZWdvcnksIGJ1dCBJIGFtIHN0aWxsIG5vdCAxMDAlIHN1cmUuIElzICpwdXJlKiByZW5hbWluZyBhIG5vbi1leGVjdXRhYmxlIGNoYW5nZT9cblxuVGhlbiBJIHRoaW5rOiBkb2VzIHRoaXMgbWF0dGVyPyBJZiBJIHdlcmUgdG8gZmVlZCB0aGlzIHBhdGNoIHRvIHN5emthbGxlciwgd2hhdCB3b3VsZCBpdCBmdXp6PyBTaW5jZSB0aGVyZSBhcmUgbm8gbG9naWMgY2hhbmdlcywgbm8gcmVzdHJ1Y3R1cmluZyBvZiBhbGdvcml0aG1zLCBubyBuZXcgYXNzZXJ0aW9ucywgbm8gY2hhbmdlcyB0byBkYXRhIHN0cnVjdHVyZXMsIG5vIG1vZGlmaWNhdGlvbnMgdG8gY29udHJvbCBmbG93Li4uIEl0IHdvdWxkIGJlIGZ1enppbmcuLi4gdGhlIHJlbmFtZXM/IFRoYXQncyBub3QgdXNlZnVsLiBBIHB1cmUgc3ltYm9sIHJlbmFtZSwgb25jZSBjb21waWxlZCwgZG9lcyBub3QgY2hhbmdlIHRoZSBnZW5lcmF0ZWQgY29kZSwgbG9naWMsIGRhdGEgc3RydWN0dXJlcyBvciBleGVjdXRpb24gaW4gYW55IHdheS4gVGhlIGJpbmFyeSBvdXRwdXQgaXMgMTAwJSBpZGVudGljYWwuXG5cbkFscmlnaHQsIHJlLXJlYWRpbmcgU2VjdGlvbiAyIGFnYWluLCBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXNcIi4gSXQgZ29lcyBvbiB0byBzcGVjaWZ5IGluIFNlY3Rpb24gMywgd2UgbXVzdCByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYCB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIHdoaWNoIGluY2x1ZGVzIFwiYW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4uLi5cIiwgXCJBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXCIsIGFuZCBcIkFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zLi4uXCIuIFRoaXMgcGF0Y2ggaGFzIG5vbmUgb2YgdGhhdC5cblxuVG8gYmUgZXh0cmEgY2VydGFpbiwgSSBuZWVkIHRvIGNoZWNrIHRoZSB3aWRlciBjb250ZXh0LiBXaHkgdGhlIHJlbmFtZT8gTG9va2luZyBhdCB0aGUgYGtlcm5lbC91c2VyX25hbWVzcGFjZS5jYCBmaWxlLCB3aGVyZSBgVklTSUJMRV9JRl9LVU5JVGAgYW5kIGBFWFBPUlRfU1lNQk9MX0lGX0tVTklUYCBhcmUgdXNlZCwgcmV2ZWFscyB0aGUgaW50ZW50OiB0aGVzZSBzeW1ib2xzIGFyZSBiZWluZyBleHBvcnRlZCBmb3IgS1VuaXQgdGVzdGluZy4gVG8gYXZvaWQgcG90ZW50aWFsIGNvbGxpc2lvbnMgb3IgbmFtZXNwYWNlIGlzc3VlcywgZXNwZWNpYWxseSB3aGVuIGV4cG9ydGVkLCB0aGUgcmVuYW1lIHByb3ZpZGVzIGEgY2xlYXIgcHJlZml4LlxuXG5UaGUgZ29hbCBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywgYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zLiBBIHB1cmUgcmVuYW1lIHdvbid0IHRyaWdnZXIgdGhlc2UuIElmIHRoZXJlIHdlcmUgYSBtaXNtYXRjaCwgdGhlIGNvbXBpbGVyIG9yIGxpbmtlciB3b3VsZCBmYWlsLlxuXG5UbyBiZSAxMDAlIGNlcnRhaW4sIGxldCdzIHdhbGsgdGhyb3VnaCB0aGUgaHVua3M6XG5cbjEuICBIZWFkZXIgRmlsZTogQ2hhbmdpbmcgdGhlIG1hY3JvIGZyb20gYENPTkZJR19VU0VSX05TX01BUF9LVU5JVF9URVNUYCB0byBgQ09ORklHX0tVTklUYCBhbmQgcmVuYW1pbmcgdGhlIHByb3RvdHlwZXMuIFRoaXMgaXMgYSBub24tZnVuY3Rpb25hbCBjaGFuZ2UuXG4yLiAgS1VuaXQgVGVzdCBGaWxlOiBSZW5hbWluZyB0aGUgZnVuY3Rpb24gY2FsbHMgd2l0aGluIHRoZSB0ZXN0IGNhc2VzLiBUaGlzIGRvZXNuJ3QgY2hhbmdlIHdoYXQgdGhlIHRlc3RzICpkbyosIG9ubHkgdGhlIG5hbWVzIHRoZXkgY2FsbC5cbjMuICBTb3VyY2UgRmlsZSAoYGtlcm5lbC91c2VyX25hbWVzcGFjZS5jYCk6IFJlbmFtaW5nIGZ1bmN0aW9uIGRlZmluaXRpb25zIGFuZCBjYWxsIHNpdGVzLCBhbmQgZXhwb3J0aW5nIHRoZSBzeW1ib2xzIHdpdGggdGhlIG5ldyBuYW1lcy4gQWdhaW4sIHRoaXMgaXMgYSBzeW1ib2wgcmVuYW1pbmcgd2l0aG91dCBjaGFuZ2luZyBhbnkgbG9naWMsIGZsb3cgb3IgZGF0YS5cblxuU28sICpXb3J0aEZ1enppbmcgaXMgZmFsc2UuKiBJdCBpcyBhIG5vbi1leGVjdXRhYmxlLCBwdXJlbHkgY29zbWV0aWMgY2hhbmdlIGFuZCBpcyBhIHJlbmFtaW5nIGV4ZXJjaXNlIHdpdGggbm8gZnVuY3Rpb25hbCBpbXBhY3QuXG5cblRoZXJlZm9yZSwgZm9yIHRoZSBgc2V0LXJlc3VsdHNgIGNhbGwsIHRoZSBwYXJhbWV0ZXJzIHNob3VsZCBiZTpcblxuKiAgICoqV29ydGhGdXp6aW5nOiBmYWxzZSoqXG4qICAgKipGb2N1c1N5bWJvbHM6IFxcWyBdKipcbiogICAqKkVuYWJsZUNvbmZpZ3M6IFxcWyBdKipcbiogICAqKlJlYXNvbmluZzoqKiBcIlRoZSBwYXRjaCBvbmx5IHJlbmFtZXMgZnVuY3Rpb25zIChgaW5zZXJ0X2V4dGVudGAgdG8gYHVpZF9naWRfbWFwX2luc2VydF9leHRlbnRgIGFuZCBgc29ydF9pZG1hcHNgIHRvIGB1aWRfZ2lkX21hcF9zb3J0YCkgdG8gYWRkIHN1YnN5c3RlbSBwcmVmaXhlcyBmb3IgS1VuaXQgc3ltYm9sIGV4cG9ydHMgYW5kIHVwZGF0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgaGVhZGVyIHByb3RvdHlwZXMgYW5kIEtVbml0IHRlc3RcblxuIiwiSW5wdXRUb2tlbnMiOjg2ODEsIk91dHB1dFRva2VucyI6MTE1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEzOjU1OjEwLjMzMjYzNjE4NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnNpc3RzIHNvbGVseSBvZiBpZGVudGlmaWVyIHJlbmFtZXMgKHJlbmFtaW5nIGBpbnNlcnRfZXh0ZW50YCB0byBgdWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudGAgYW5kIGBzb3J0X2lkbWFwc2AgdG8gYHVpZF9naWRfbWFwX3NvcnRgKSBhbmQgdXBkYXRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgS1VuaXQgdGVzdCByZWZlcmVuY2VzIGFuZCBoZWFkZXIgZGVjbGFyYXRpb25zLiBJdCBpbnRyb2R1Y2VzIG5vIGZ1bmN0aW9uYWwsIGxvZ2ljYWwsIGNvbnRyb2wtZmxvdywgZGF0YSBzdHJ1Y3R1cmUsIG9yIGFzc2VydGlvbiBjaGFuZ2VzLiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnNpc3RzIHNvbGVseSBvZiBpZGVudGlmaWVyIHJlbmFtZXMgKHJlbmFtaW5nIGBpbnNlcnRfZXh0ZW50YCB0byBgdWlkX2dpZF9tYXBfaW5zZXJ0X2V4dGVudGAgYW5kIGBzb3J0X2lkbWFwc2AgdG8gYHVpZF9naWRfbWFwX3NvcnRgKSBhbmQgdXBkYXRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgS1VuaXQgdGVzdCByZWZlcmVuY2VzIGFuZCBoZWFkZXIgZGVjbGFyYXRpb25zLiBJdCBpbnRyb2R1Y2VzIG5vIGZ1bmN0aW9uYWwsIGxvZ2ljYWwsIGNvbnRyb2wtZmxvdywgZGF0YSBzdHJ1Y3R1cmUsIG9yIGFzc2VydGlvbiBjaGFuZ2VzLiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEzOjU1OjEwLjMzMjY2Mjg4NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5259b[1] Phase: Running StartedAt: 2026-09-11 13:55:22 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5259b[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-11 13:55:22 +0000 UTC FinishedAt: 2026-09-11 13:55:27 +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,}