Name: series-workflow6mzf8 Phase: Failed StartedAt: 2026-07-23 01:31:50 +0000 UTC FinishedAt: 2026-07-23 01:51:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mzf8[0] Phase: Succeeded StartedAt: 2026-07-23 01:31:50 +0000 UTC FinishedAt: 2026-07-23 01:51:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mzf8[0].run-triage Phase: Succeeded StartedAt: 2026-07-23 01:31:50 +0000 UTC FinishedAt: 2026-07-23 01:51:17 +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+CgkJCTx0ZD4yMDI2LzA3LzIzIDAxOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBuZXRsaW5rIGV4dGVuZGVkIEFDSyAoZXh0YWNrKSBlcnJvciBtZXNzYWdlcyBmb3IgYmV0dGVyIGVycm9yIHJlcG9ydGluZyB0byB1c2Vyc3BhY2Ugd2hlbiBhIEJTUyBpcyBub3QgZm91bmQgb3IgY2Fubm90IGJlIHVzZWQuIFRoZSBjb3JlIGxvZ2ljIG9mIEJTUyBzZWxlY3Rpb24gcmVtYWlucyBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIHBhdGNoIGNvbnNpc3RzIG9mIGEgS1VuaXQgdGVzdC4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGV4ZWN1dGlvbiBmbG93IHRoYXQgcmVxdWlyZSBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMTo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDI5YmFmNWMwODczMjAzY2Q5YTQ2ZmQwNDZhZTE2OGFhZDE4YTJkZWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyMyAwMTo1MDoxNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oIGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuaW5kZXggYjhlOWZiYjg5ZTY5MTYuLjE1YzA4YjI0NTAyZmQzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuQEAgLTg0MjQsNiAmIzQzOzg0MjQsOCBAQCBjZmc4MDIxMV9pbmZvcm1fYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gICogQGJzc190eXBlOiB0eXBlIG9mIEJTUywgc2VlIFx1MDAyNmVudW0gaWVlZTgwMjExX2Jzc190eXBlXG4gICogQHByaXZhY3k6IHByaXZhY3kgZmlsdGVyLCBzZWUgXHUwMDI2ZW51bSBpZWVlODAyMTFfcHJpdmFjeVxuICAqIEB1c2VfZm9yOiBpbmRpY2F0ZXMgd2hpY2ggdXNlIGlzIGludGVuZGVkXG4mIzQzOyAqIEBleHRhY2s6IChvcHRpb25hbCkgZXh0YWNrIHRoYXQgaXMgZmlsbGVkIHdpdGggdGhlIHJlYXNvbiB3aGVuIG5vXG4mIzQzOyAqXHR1c2FibGUgZW50cnkgd2FzIGZvdW5kOyBtYXkgYmUgJU5VTExcbiAgKlxuICAqIFJldHVybjogUmVmZXJlbmNlLWNvdW50ZWQgQlNTIG9uIHN1Y2Nlc3MuICVOVUxMIG9uIGVycm9yLlxuICAqL1xuQEAgLTg0MzMsNyAmIzQzOzg0MzUsOCBAQCBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpfX2NmZzgwMjExX2dldF9ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSxcbiBcdFx0XHRcdFx0Y29uc3QgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbixcbiBcdFx0XHRcdFx0ZW51bSBpZWVlODAyMTFfYnNzX3R5cGUgYnNzX3R5cGUsXG4gXHRcdFx0XHRcdGVudW0gaWVlZTgwMjExX3ByaXZhY3kgcHJpdmFjeSxcbi1cdFx0XHRcdFx0dTMyIHVzZV9mb3IpO1xuJiM0MztcdFx0XHRcdFx0dTMyIHVzZV9mb3IsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIFxuIC8qKlxuICAqIGNmZzgwMjExX2dldF9ic3MgLSBnZXQgYSBCU1MgcmVmZXJlbmNlXG5AQCAtODQ1Nyw3ICYjNDM7ODQ2MCw3IEBAIGNmZzgwMjExX2dldF9ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLFxuIHtcbiBcdHJldHVybiBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIGNoYW5uZWwsIGJzc2lkLCBzc2lkLCBzc2lkX2xlbixcbiBcdFx0XHRcdCAgYnNzX3R5cGUsIHByaXZhY3ksXG4tXHRcdFx0XHQgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMKTtcbiYjNDM7XHRcdFx0XHQgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBOVUxMKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuaW5kZXggZDk2MmI1OTQ0NTMzOWEuLmFjMGMwZGE0NTI0MTkxIDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuQEAgLTEyODkwLDkgJiM0MzsxMjg5MCwxMSBAQCBzdGF0aWMgaW50IG5sODAyMTFfYXV0aGVudGljYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4tXHRyZXEuYnNzID0gY2ZnODAyMTFfZ2V0X2JzcyhcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCBjaGFuLCBic3NpZCwgc3NpZCwgc3NpZF9sZW4sXG4tXHRcdFx0XHQgICBJRUVFODAyMTFfQlNTX1RZUEVfRVNTLFxuLVx0XHRcdFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZKTtcbiYjNDM7XHRyZXEuYnNzID0gX19jZmc4MDIxMV9nZXRfYnNzKFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIGNoYW4sIGJzc2lkLCBzc2lkLCBzc2lkX2xlbixcbiYjNDM7XHRcdFx0XHQgICAgIElFRUU4MDIxMV9CU1NfVFlQRV9FU1MsXG4mIzQzO1x0XHRcdFx0ICAgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksXG4mIzQzO1x0XHRcdFx0ICAgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCxcbiYjNDM7XHRcdFx0XHQgICAgIGluZm8tXHUwMDNlZXh0YWNrKTtcbiBcdGlmICghcmVxLmJzcylcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG5AQCAtMTMwMzcsNiAmIzQzOzEzMDM5LDcgQEAgc3RhdGljIGludCBubDgwMjExX2NyeXB0b19zZXR0aW5ncyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpubDgwMjExX2Fzc29jX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuIFx0XHRcdFx0XHQgICAgICBjb25zdCB1OCAqc3NpZCwgaW50IHNzaWRfbGVuLFxuIFx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXG4gXHRcdFx0XHRcdCAgICAgIGludCBhc3NvY19saW5rX2lkLCBpbnQgbGlua19pZClcbkBAIC0xMzA0Niw4ICYjNDM7MTMwNDksMTAgQEAgc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9ic3MgKm5sODAyMTFfYXNzb2NfYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZVxuIFx0Y29uc3QgdTggKmJzc2lkO1xuIFx0dTMyIGZyZXEsIHVzZV9mb3IgPSAwO1xuIFxuLVx0aWYgKCFhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSB8fCAhYXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKVxuJiM0MztcdGlmICghYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10gfHwgIWF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9GUkVRXSkge1xuJiM0MztcdFx0R0VOTF9TRVRfRVJSX01TRyhpbmZvLCBcJiMzNDtCU1NJRCBvciBmcmVxdWVuY3kgbWlzc2luZ1wmIzM0Oyk7XG4gXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuJiM0MztcdH1cbiBcbiBcdGJzc2lkID0gbmxhX2RhdGEoYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pO1xuIFxuQEAgLTEzMDU2LDggJiM0MzsxMzA2MSwxMCBAQCBzdGF0aWMgc3RydWN0IGNmZzgwMjExX2JzcyAqbmw4MDIxMV9hc3NvY19ic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlXG4gXHRcdGZyZXEgJiM0Mzs9IG5sYV9nZXRfdTMyKGF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9GUkVRX09GRlNFVF0pO1xuIFxuIFx0Y2hhbiA9IG5sODAyMTFfZ2V0X3ZhbGlkX2NoYW4oXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgZnJlcSk7XG4tXHRpZiAoIWNoYW4pXG4mIzQzO1x0aWYgKCFjaGFuKSB7XG4mIzQzO1x0XHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFwmIzM0O2ludmFsaWQgb3IgZGlzYWJsZWQgY2hhbm5lbFwmIzM0Oyk7XG4gXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuJiM0MztcdH1cbiBcbiBcdGlmIChhc3NvY19saW5rX2lkIFx1MDAzZT0gMClcbiBcdFx0dXNlX2ZvciA9IE5MODAyMTFfQlNTX1VTRV9GT1JfTUxEX0xJTks7XG5AQCAtMTMwNjgsNyAmIzQzOzEzMDc1LDcgQEAgc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9ic3MgKm5sODAyMTFfYXNzb2NfYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZVxuIFx0XHRcdFx0IHNzaWQsIHNzaWRfbGVuLFxuIFx0XHRcdFx0IElFRUU4MDIxMV9CU1NfVFlQRV9FU1MsXG4gXHRcdFx0XHQgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxuLVx0XHRcdFx0IHVzZV9mb3IpO1xuJiM0MztcdFx0XHRcdCB1c2VfZm9yLCBpbmZvLVx1MDAzZWV4dGFjayk7XG4gXHRpZiAoIWJzcylcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XG4gXG5AQCAtMTMxMDcsMTMgJiM0MzsxMzExNCwxMyBAQCBzdGF0aWMgaW50IG5sODAyMTFfcHJvY2Vzc19saW5rcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiBcdFx0bGlua3NbbGlua19pZF0uYnNzID1cbi1cdFx0XHRubDgwMjExX2Fzc29jX2JzcyhyZGV2LCBzc2lkLCBzc2lkX2xlbiwgYXR0cnMsXG4mIzQzO1x0XHRcdG5sODAyMTFfYXNzb2NfYnNzKHJkZXYsIGluZm8sIHNzaWQsIHNzaWRfbGVuLCBhdHRycyxcbiBcdFx0XHRcdFx0ICBhc3NvY19saW5rX2lkLCBsaW5rX2lkKTtcbiBcdFx0aWYgKElTX0VSUihsaW5rc1tsaW5rX2lkXS5ic3MpKSB7XG4gXHRcdFx0ZXJyID0gUFRSX0VSUihsaW5rc1tsaW5rX2lkXS5ic3MpO1xuIFx0XHRcdGxpbmtzW2xpbmtfaWRdLmJzcyA9IE5VTEw7XG4tXHRcdFx0TkxfU0VUX0VSUl9NU0dfQVRUUihpbmZvLVx1MDAzZWV4dGFjaywgbGluayxcbi1cdFx0XHRcdFx0ICAgIFwmIzM0O0Vycm9yIGZldGNoaW5nIEJTUyBmb3IgbGlua1wmIzM0Oyk7XG4mIzQzO1x0XHRcdC8qIHRoZSBCU1MgbG9va3VwIHNldCB0aGUgc3BlY2lmaWMgbWVzc2FnZSBhbHJlYWR5ICovXG4mIzQzO1x0XHRcdE5MX1NFVF9CQURfQVRUUihpbmZvLVx1MDAzZWV4dGFjaywgbGluayk7XG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuIFxuQEAgLTEzMzI5LDcgJiM0MzsxMzMzNiw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9hc3NvY2lhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0aWYgKHJlcS5saW5rX2lkIFx1MDAzZT0gMClcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdFx0cmVxLmJzcyA9IG5sODAyMTFfYXNzb2NfYnNzKHJkZXYsIHNzaWQsIHNzaWRfbGVuLCBpbmZvLVx1MDAzZWF0dHJzLFxuJiM0MztcdFx0cmVxLmJzcyA9IG5sODAyMTFfYXNzb2NfYnNzKHJkZXYsIGluZm8sIHNzaWQsIHNzaWRfbGVuLCBpbmZvLVx1MDAzZWF0dHJzLFxuIFx0XHRcdFx0XHQgICAgLTEsIC0xKTtcbiBcdFx0aWYgKElTX0VSUihyZXEuYnNzKSlcbiBcdFx0XHRyZXR1cm4gUFRSX0VSUihyZXEuYnNzKTtcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvc2Nhbi5jIGIvbmV0L3dpcmVsZXNzL3NjYW4uY1xuaW5kZXggZTYyYjdkZDJiN2MyZDguLjkwYTRmMjg1NjU0Zjk0IDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL3NjYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3NjYW4uY1xuQEAgLTE2MDksMTAgJiM0MzsxNjA5LDEyIEBAIHN0cnVjdCBjZmc4MDIxMV9ic3MgKl9fY2ZnODAyMTFfZ2V0X2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuIFx0XHRcdFx0XHRjb25zdCB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuLFxuIFx0XHRcdFx0XHRlbnVtIGllZWU4MDIxMV9ic3NfdHlwZSBic3NfdHlwZSxcbiBcdFx0XHRcdFx0ZW51bSBpZWVlODAyMTFfcHJpdmFjeSBwcml2YWN5LFxuLVx0XHRcdFx0XHR1MzIgdXNlX2ZvcilcbiYjNDM7XHRcdFx0XHRcdHUzMiB1c2VfZm9yLFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2lwaHkpO1xuIFx0c3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzLCAqcmVzID0gTlVMTDtcbiYjNDM7XHRib29sIGV4cGlyZWQgPSBmYWxzZSwgdW51c2FibGUgPSBmYWxzZTtcbiBcdHVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllcztcbiBcdGludCBic3NfcHJpdmFjeTtcbiBcbkBAIC0xNjM0LDIyICYjNDM7MTYzNiw0OCBAQCBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpfX2NmZzgwMjExX2dldF9ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSxcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGJzcy1cdTAwM2VwdWIuYnNzaWQpKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRpZiAoKGJzcy1cdTAwM2VwdWIudXNlX2ZvciBcdTAwMjYgdXNlX2ZvcikgIT0gdXNlX2ZvcilcbiYjNDM7XHRcdGlmICghaXNfYnNzKFx1MDAyNmJzcy1cdTAwM2VwdWIsIGJzc2lkLCBzc2lkLCBzc2lkX2xlbikpXG4gXHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRoZSBpZGVudGl0eSBjaGVja3MgYWJvdmUgbXVzdCBhbGwgY29tZSBmaXJzdCBzbyB0aGF0XG4mIzQzO1x0XHQgKiB0aGUgZXhwaXJlZC91bnVzYWJsZSBjbGFzc2lmaWNhdGlvbiBiZWxvdyBvbmx5IGV2ZXJcbiYjNDM7XHRcdCAqIGFwcGxpZXMgdG8gZW50cmllcyB0aGF0IGFjdHVhbGx5IG1hdGNoIHRoZSByZXF1ZXN0LlxuJiM0MztcdFx0ICovXG4mIzQzO1xuIFx0XHQvKiBEb24mIzM5O3QgZ2V0IGV4cGlyZWQgQlNTIHN0cnVjdHMgKi9cbiBcdFx0aWYgKHRpbWVfYWZ0ZXIobm93LCBic3MtXHUwMDNldHMgJiM0MzsgSUVFRTgwMjExX1NDQU5fUkVTVUxUX0VYUElSRSkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAhYXRvbWljX3JlYWQoXHUwMDI2YnNzLVx1MDAzZWhvbGQpKVxuJiM0MztcdFx0ICAgICFhdG9taWNfcmVhZChcdTAwMjZic3MtXHUwMDNlaG9sZCkpIHtcbiYjNDM7XHRcdFx0ZXhwaXJlZCA9IHRydWU7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmICgoYnNzLVx1MDAzZXB1Yi51c2VfZm9yIFx1MDAyNiB1c2VfZm9yKSAhPSB1c2VfZm9yKSB7XG4mIzQzO1x0XHRcdHVudXNhYmxlID0gdHJ1ZTtcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0aWYgKGlzX2JzcyhcdTAwMjZic3MtXHUwMDNlcHViLCBic3NpZCwgc3NpZCwgc3NpZF9sZW4pKSB7XG4tXHRcdFx0cmVzID0gYnNzO1xuLVx0XHRcdGJzc19yZWZfZ2V0KHJkZXYsIHJlcyk7XG4tXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRyZXMgPSBic3M7XG4mIzQzO1x0XHRic3NfcmVmX2dldChyZGV2LCByZXMpO1xuJiM0MztcdFx0YnJlYWs7XG4gXHR9XG4gXG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZyZGV2LVx1MDAzZWJzc19sb2NrKTtcbi1cdGlmICghcmVzKVxuJiM0MztcdGlmICghcmVzKSB7XG4mIzQzO1x0XHRpZiAoZXhwaXJlZCBcdTAwMjZcdTAwMjYgdW51c2FibGUpXG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7QlNTIGVudHJpZXMgYXJlIGV4cGlyZWQgb3IgY2Fubm90IGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uXCYjMzQ7KTtcbiYjNDM7XHRcdGVsc2UgaWYgKHVudXNhYmxlKVxuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgICAgIFwmIzM0O0JTUyBjYW5ub3QgYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RlZCBvcGVyYXRpb25cJiMzNDspO1xuJiM0MztcdFx0ZWxzZSBpZiAoZXhwaXJlZClcbiYjNDM7XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgICAgICBcJiMzNDtCU1MgZW50cnkgaW4gc2NhbiByZXN1bHRzIGlzIGV4cGlyZWRcJiMzNDspO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgICAgIFwmIzM0O0JTUyBub3QgZm91bmQgaW4gc2NhbiByZXN1bHRzXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuIFx0dHJhY2VfY2ZnODAyMTFfcmV0dXJuX2JzcyhcdTAwMjZyZXMtXHUwMDNlcHViKTtcbiBcdHJldHVybiBcdTAwMjZyZXMtXHUwMDNlcHViO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvdGVzdHMvc2Nhbi5jIGIvbmV0L3dpcmVsZXNzL3Rlc3RzL3NjYW4uY1xuaW5kZXggYjFhOWMxNDY2ZDZjYmQuLjhjMjAyNzhiNWQzYTQ0IDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL3Rlc3RzL3NjYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3Rlc3RzL3NjYW4uY1xuQEAgLTQwMiw2ICYjNDM7NDAyLDEyNCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2luZm9ybV9ic3Nfc3NpZF9vbmx5KHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdGNmZzgwMjExX3B1dF9ic3Mod2lwaHksIGJzcyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2dldF9ic3NfbWlzc19yZWFzb24oc3RydWN0IGt1bml0ICp0ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGluZm9ybV9ic3MgY3R4ID0ge1xuJiM0MztcdFx0LnRlc3QgPSB0ZXN0LFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IHdpcGh5ICp3aXBoeSA9IFRfV0lQSFkodGVzdCwgY3R4KTtcbiYjNDM7XHRzdHJ1Y3QgY2ZnODAyMTFfaW5mb3JtX2JzcyBpbmZvcm1fYnNzID0ge1xuJiM0MztcdFx0LnNpZ25hbCA9IDUwLFxuJiM0MztcdFx0LmRydl9kYXRhID0gXHUwMDI2Y3R4LFxuJiM0MztcdH07XG4mIzQzO1x0Y29uc3QgdTggYnNzaWRbRVRIX0FMRU5dID0geyAweDEwLCAweDIyLCAweDMzLCAweDQ0LCAweDU1LCAweDY2IH07XG4mIzQzO1x0Y29uc3QgdTggb3RoZXJfYnNzaWRbRVRIX0FMRU5dID0geyAweDY2LCAweDU1LCAweDQ0LCAweDMzLCAweDIyLCAweDExIH07XG4mIzQzO1x0c3RhdGljIGNvbnN0IHU4IGllc1tdID0ge1xuJiM0MztcdFx0WzBdID0gV0xBTl9FSURfU1NJRCxcbiYjNDM7XHRcdFsxXSA9IDQsXG4mIzQzO1x0XHRbMl0gPSAmIzM5O1QmIzM5OywgJiMzOTtFJiMzOTssICYjMzk7UyYjMzk7LCAmIzM5O1QmIzM5O1xuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqaWJzcztcbiYjNDM7XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrIGV4dGFjayA9IHt9O1xuJiM0MztcdHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcywgKmJzczIsICpmb3VuZDtcbiYjNDM7XG4mIzQzO1x0aW5mb3JtX2Jzcy5jaGFuID0gaWVlZTgwMjExX2dldF9jaGFubmVsX2toeih3aXBoeSwgTUhaX1RPX0tIWigyNDEyKSk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGluZm9ybV9ic3MuY2hhbik7XG4mIzQzO1xuJiM0MztcdGJzcyA9IGNmZzgwMjExX2luZm9ybV9ic3NfZGF0YSh3aXBoeSwgXHUwMDI2aW5mb3JtX2JzcyxcbiYjNDM7XHRcdFx0XHQgICAgICAgQ0ZHODAyMTFfQlNTX0ZUWVBFX1BSRVNQLCBic3NpZCwgMCxcbiYjNDM7XHRcdFx0XHQgICAgICAgMHgxMjM0LCAxMDAsIGllcywgc2l6ZW9mKGllcyksXG4mIzQzO1x0XHRcdFx0ICAgICAgIEdGUF9LRVJORUwpO1xuJiM0MztcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBic3MpO1xuJiM0MztcdGlic3MgPSBjb250YWluZXJfb2YoYnNzLCBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzLCBwdWIpO1xuJiM0MztcbiYjNDM7XHQvKiBGcmVzaCB1c2FibGUgZW50cnk6IGZvdW5kLCBubyBtZXNzYWdlIGlzIHNldCAqL1xuJiM0MztcdGZvdW5kID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBic3NpZCwgTlVMTCwgMCxcbiYjNDM7XHRcdFx0XHQgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxuJiM0MztcdFx0XHRcdCAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcbiYjNDM7XHRcdFx0XHQgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgXHUwMDI2ZXh0YWNrKTtcbiYjNDM7XHRLVU5JVF9BU1NFUlRfUFRSX0VRKHRlc3QsIGZvdW5kLCBic3MpO1xuJiM0MztcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGV4dGFjay5fbXNnKTtcbiYjNDM7XHRjZmc4MDIxMV9wdXRfYnNzKHdpcGh5LCBmb3VuZCk7XG4mIzQzO1xuJiM0MztcdC8qIE5vIGVudHJ5IGF0IGFsbCBmb3IgdGhpcyBCU1NJRCAqL1xuJiM0MztcdGZvdW5kID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBvdGhlcl9ic3NpZCwgTlVMTCwgMCxcbiYjNDM7XHRcdFx0XHQgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxuJiM0MztcdFx0XHRcdCAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcbiYjNDM7XHRcdFx0XHQgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgXHUwMDI2ZXh0YWNrKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCBmb3VuZCk7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLCBcJiMzNDtCU1Mgbm90IGZvdW5kIGluIHNjYW4gcmVzdWx0c1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIEZyZXNoIGVudHJ5IHRoYXQgaXMgbm90IHVzYWJsZSBmb3IgdGhlIHJlcXVlc3RlZCB1c2UgKi9cbiYjNDM7XHRleHRhY2suX21zZyA9IE5VTEw7XG4mIzQzO1x0YnNzLVx1MDAzZXVzZV9mb3IgPSAwO1xuJiM0MztcdGZvdW5kID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBic3NpZCwgTlVMTCwgMCxcbiYjNDM7XHRcdFx0XHQgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxuJiM0MztcdFx0XHRcdCAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcbiYjNDM7XHRcdFx0XHQgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgXHUwMDI2ZXh0YWNrKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCBmb3VuZCk7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLFxuJiM0MztcdFx0XHQgICBcJiMzNDtCU1MgY2Fubm90IGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uXCYjMzQ7KTtcbiYjNDM7XHRic3MtXHUwMDNldXNlX2ZvciA9IE5MODAyMTFfQlNTX1VTRV9GT1JfQUxMO1xuJiM0MztcbiYjNDM7XHQvKiBFeHBpcmVkIGVudHJ5LCBcdTAwM2UgSUVFRTgwMjExX1NDQU5fUkVTVUxUX0VYUElSRSAoMzBzKSBvbGQgKi9cbiYjNDM7XHRleHRhY2suX21zZyA9IE5VTEw7XG4mIzQzO1x0aWJzcy1cdTAwM2V0cyA9IGppZmZpZXMgLSA2MCAqIEhaO1xuJiM0MztcdGZvdW5kID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBic3NpZCwgTlVMTCwgMCxcbiYjNDM7XHRcdFx0XHQgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxuJiM0MztcdFx0XHRcdCAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcbiYjNDM7XHRcdFx0XHQgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgXHUwMDI2ZXh0YWNrKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCBmb3VuZCk7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLFxuJiM0MztcdFx0XHQgICBcJiMzNDtCU1MgZW50cnkgaW4gc2NhbiByZXN1bHRzIGlzIGV4cGlyZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBBbiBlbnRyeSBib3RoIGV4cGlyZWQgYW5kIHVudXNhYmxlIHJlcG9ydHMgZXhwaXJlZCAqL1xuJiM0MztcdGV4dGFjay5fbXNnID0gTlVMTDtcbiYjNDM7XHRic3MtXHUwMDNldXNlX2ZvciA9IDA7XG4mIzQzO1x0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIGJzc2lkLCBOVUxMLCAwLFxuJiM0MztcdFx0XHRcdCAgIElFRUU4MDIxMV9CU1NfVFlQRV9BTlksXG4mIzQzO1x0XHRcdFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxuJiM0MztcdFx0XHRcdCAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBcdTAwMjZleHRhY2spO1xuJiM0MztcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGZvdW5kKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfU1RSRVEodGVzdCwgZXh0YWNrLl9tc2csXG4mIzQzO1x0XHRcdCAgIFwmIzM0O0JTUyBlbnRyeSBpbiBzY2FuIHJlc3VsdHMgaXMgZXhwaXJlZFwmIzM0Oyk7XG4mIzQzO1x0YnNzLVx1MDAzZXVzZV9mb3IgPSBOTDgwMjExX0JTU19VU0VfRk9SX0FMTDtcbiYjNDM7XG4mIzQzO1x0LyogRXhwaXJlZCBidXQgaGVsZCBlbnRyaWVzIGFyZSBzdGlsbCB1c2FibGUsIG5vIG1lc3NhZ2UgaXMgc2V0ICovXG4mIzQzO1x0ZXh0YWNrLl9tc2cgPSBOVUxMO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2aWJzcy1cdTAwM2Vob2xkLCAxKTtcbiYjNDM7XHRmb3VuZCA9IF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgTlVMTCwgYnNzaWQsIE5VTEwsIDAsXG4mIzQzO1x0XHRcdFx0ICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSxcbiYjNDM7XHRcdFx0XHQgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksXG4mIzQzO1x0XHRcdFx0ICAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwsIFx1MDAyNmV4dGFjayk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX1BUUl9FUSh0ZXN0LCBmb3VuZCwgYnNzKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCBleHRhY2suX21zZyk7XG4mIzQzO1x0Y2ZnODAyMTFfcHV0X2Jzcyh3aXBoeSwgZm91bmQpO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2aWJzcy1cdTAwM2Vob2xkLCAwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBXaXRoIG9uZSBtYXRjaGluZyBlbnRyeSBleHBpcmVkIGFuZCBhbm90aGVyIGN1cnJlbnQgYnV0XG4mIzQzO1x0ICogdW51c2FibGUsIGJvdGggcmVhc29ucyBhcmUgcmVwb3J0ZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0YnNzMiA9IGNmZzgwMjExX2luZm9ybV9ic3NfZGF0YSh3aXBoeSwgXHUwMDI2aW5mb3JtX2JzcyxcbiYjNDM7XHRcdFx0XHRcdENGRzgwMjExX0JTU19GVFlQRV9QUkVTUCwgb3RoZXJfYnNzaWQsXG4mIzQzO1x0XHRcdFx0XHQwLCAweDEyMzQsIDEwMCwgaWVzLCBzaXplb2YoaWVzKSxcbiYjNDM7XHRcdFx0XHRcdEdGUF9LRVJORUwpO1xuJiM0MztcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBic3MyKTtcbiYjNDM7XHRic3MyLVx1MDAzZXVzZV9mb3IgPSAwO1xuJiM0MztcdGV4dGFjay5fbXNnID0gTlVMTDtcbiYjNDM7XHRmb3VuZCA9IF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgTlVMTCwgTlVMTCwgXCYjMzQ7VEVTVFwmIzM0OywgNCxcbiYjNDM7XHRcdFx0XHQgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxuJiM0MztcdFx0XHRcdCAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcbiYjNDM7XHRcdFx0XHQgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgXHUwMDI2ZXh0YWNrKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCBmb3VuZCk7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLFxuJiM0MztcdFx0XHQgICBcJiMzNDtCU1MgZW50cmllcyBhcmUgZXhwaXJlZCBvciBjYW5ub3QgYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RlZCBvcGVyYXRpb25cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRjZmc4MDIxMV9wdXRfYnNzKHdpcGh5LCBic3MyKTtcbiYjNDM7XHRjZmc4MDIxMV9wdXRfYnNzKHdpcGh5LCBic3MpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgaW5mb3JtX2Jzc19tbF9zdGFfY2FzZSB7XG4gXHRjb25zdCBjaGFyICpkZXNjO1xuIFx0aW50IG1sZF9pZDtcbkBAIC02MTcsNyAmIzQzOzczNSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW5mb3JtX2Jzc19tbF9zdGEoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0bGlua19ic3MgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIHN0YV9wcm9mLmJzc2lkLCBOVUxMLCAwLFxuIFx0XHRcdFx0ICAgICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSxcbiBcdFx0XHRcdCAgICAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcbi1cdFx0XHRcdCAgICAgIDApO1xuJiM0MztcdFx0XHRcdCAgICAgIDAsIE5VTEwpO1xuIFx0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGxpbmtfYnNzKTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBsaW5rX2Jzcy1cdTAwM2VzaWduYWwsIDApO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGxpbmtfYnNzLVx1MDAzZWJlYWNvbl9pbnRlcnZhbCxcbkBAIC04NTUsNiAmIzQzOzk3Myw3IEBAIGt1bml0X3Rlc3Rfc3VpdGUoZ2VuX25ld19pZSk7XG4gXG4gc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGluZm9ybV9ic3NfdGVzdF9jYXNlc1tdID0ge1xuIFx0S1VOSVRfQ0FTRSh0ZXN0X2luZm9ybV9ic3Nfc3NpZF9vbmx5KSxcbiYjNDM7XHRLVU5JVF9DQVNFKHRlc3RfZ2V0X2Jzc19taXNzX3JlYXNvbiksXG4gXHRLVU5JVF9DQVNFX1BBUkFNKHRlc3RfaW5mb3JtX2Jzc19tbF9zdGEsIGluZm9ybV9ic3NfbWxfc3RhX2dlbl9wYXJhbXMpLFxuIFx0e31cbiB9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAxOjUwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgbmV0bGluayBleHRlbmRlZCBBQ0sgKGV4dGFjaykgZXJyb3IgbWVzc2FnZXMgZm9yIGJldHRlciBlcnJvciByZXBvcnRpbmcgdG8gdXNlcnNwYWNlIHdoZW4gYSBCU1MgaXMgbm90IGZvdW5kIG9yIGNhbm5vdCBiZSB1c2VkLiBUaGUgY29yZSBsb2dpYyBvZiBCU1Mgc2VsZWN0aW9uIHJlbWFpbnMgZnVuY3Rpb25hbGx5IGlkZW50aWNhbCwgYW5kIHRoZSByZXN0IG9mIHRoZSBwYXRjaCBjb25zaXN0cyBvZiBhIEtVbml0IHRlc3QuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBleGVjdXRpb24gZmxvdyB0aGF0IHJlcXVpcmUgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI5YmFmNWMwODczMjAzY2Q5YTQ2ZmQwNDZhZTE2OGFhZDE4YTJkZWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAyMyAwMTo1MDoxNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NmZzgwMjExLmggYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCmluZGV4IGI4ZTlmYmI4OWU2OTE2Li4xNWMwOGIyNDUwMmZkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCkBAIC04NDI0LDYgJiM0Mzs4NDI0LDggQEAgY2ZnODAyMTFfaW5mb3JtX2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogICogQGJzc190eXBlOiB0eXBlIG9mIEJTUywgc2VlICZhbXA7ZW51bSBpZWVlODAyMTFfYnNzX3R5cGUKICAqIEBwcml2YWN5OiBwcml2YWN5IGZpbHRlciwgc2VlICZhbXA7ZW51bSBpZWVlODAyMTFfcHJpdmFjeQogICogQHVzZV9mb3I6IGluZGljYXRlcyB3aGljaCB1c2UgaXMgaW50ZW5kZWQKJiM0MzsgKiBAZXh0YWNrOiAob3B0aW9uYWwpIGV4dGFjayB0aGF0IGlzIGZpbGxlZCB3aXRoIHRoZSByZWFzb24gd2hlbiBubwomIzQzOyAqCXVzYWJsZSBlbnRyeSB3YXMgZm91bmQ7IG1heSBiZSAlTlVMTAogICoKICAqIFJldHVybjogUmVmZXJlbmNlLWNvdW50ZWQgQlNTIG9uIHN1Y2Nlc3MuICVOVUxMIG9uIGVycm9yLgogICovCkBAIC04NDMzLDcgJiM0Mzs4NDM1LDggQEAgc3RydWN0IGNmZzgwMjExX2JzcyAqX19jZmc4MDIxMV9nZXRfYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksCiAJCQkJCWNvbnN0IHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4sCiAJCQkJCWVudW0gaWVlZTgwMjExX2Jzc190eXBlIGJzc190eXBlLAogCQkJCQllbnVtIGllZWU4MDIxMV9wcml2YWN5IHByaXZhY3ksCi0JCQkJCXUzMiB1c2VfZm9yKTsKJiM0MzsJCQkJCXUzMiB1c2VfZm9yLAomIzQzOwkJCQkJc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKIAogLyoqCiAgKiBjZmc4MDIxMV9nZXRfYnNzIC0gZ2V0IGEgQlNTIHJlZmVyZW5jZQpAQCAtODQ1Nyw3ICYjNDM7ODQ2MCw3IEBAIGNmZzgwMjExX2dldF9ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAogewogCXJldHVybiBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIGNoYW5uZWwsIGJzc2lkLCBzc2lkLCBzc2lkX2xlbiwKIAkJCQkgIGJzc190eXBlLCBwcml2YWN5LAotCQkJCSAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwpOwomIzQzOwkJCQkgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBOVUxMKTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgY2ZnODAyMTFfYnNzICoKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCmluZGV4IGQ5NjJiNTk0NDUzMzlhLi5hYzBjMGRhNDUyNDE5MSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCkBAIC0xMjg5MCw5ICYjNDM7MTI4OTAsMTEgQEAgc3RhdGljIGludCBubDgwMjExX2F1dGhlbnRpY2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcmVxLmJzcyA9IGNmZzgwMjExX2dldF9ic3MoJmFtcDtyZGV2LSZndDt3aXBoeSwgY2hhbiwgYnNzaWQsIHNzaWQsIHNzaWRfbGVuLAotCQkJCSAgIElFRUU4MDIxMV9CU1NfVFlQRV9FU1MsCi0JCQkJICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZKTsKJiM0MzsJcmVxLmJzcyA9IF9fY2ZnODAyMTFfZ2V0X2JzcygmYW1wO3JkZXYtJmd0O3dpcGh5LCBjaGFuLCBic3NpZCwgc3NpZCwgc3NpZF9sZW4sCiYjNDM7CQkJCSAgICAgSUVFRTgwMjExX0JTU19UWVBFX0VTUywKJiM0MzsJCQkJICAgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksCiYjNDM7CQkJCSAgICAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwsCiYjNDM7CQkJCSAgICAgaW5mby0mZ3Q7ZXh0YWNrKTsKIAlpZiAoIXJlcS5ic3MpCiAJCXJldHVybiAtRU5PRU5UOwogCkBAIC0xMzAzNyw2ICYjNDM7MTMwMzksNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfY3J5cHRvX3NldHRpbmdzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIH0KIAogc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9ic3MgKm5sODAyMTFfYXNzb2NfYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKJiM0MzsJCQkJCSAgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sCiAJCQkJCSAgICAgIGNvbnN0IHU4ICpzc2lkLCBpbnQgc3NpZF9sZW4sCiAJCQkJCSAgICAgIHN0cnVjdCBubGF0dHIgKiphdHRycywKIAkJCQkJICAgICAgaW50IGFzc29jX2xpbmtfaWQsIGludCBsaW5rX2lkKQpAQCAtMTMwNDYsOCAmIzQzOzEzMDQ5LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpubDgwMjExX2Fzc29jX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UKIAljb25zdCB1OCAqYnNzaWQ7CiAJdTMyIGZyZXEsIHVzZV9mb3IgPSAwOwogCi0JaWYgKCFhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSB8fCAhYXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKQomIzQzOwlpZiAoIWF0dHJzW05MODAyMTFfQVRUUl9NQUNdIHx8ICFhdHRyc1tOTDgwMjExX0FUVFJfV0lQSFlfRlJFUV0pIHsKJiM0MzsJCUdFTkxfU0VUX0VSUl9NU0coaW5mbywgJiMzNDtCU1NJRCBvciBmcmVxdWVuY3kgbWlzc2luZyYjMzQ7KTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiYjNDM7CX0KIAogCWJzc2lkID0gbmxhX2RhdGEoYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pOwogCkBAIC0xMzA1Niw4ICYjNDM7MTMwNjEsMTAgQEAgc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9ic3MgKm5sODAyMTFfYXNzb2NfYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZQogCQlmcmVxICYjNDM7PSBubGFfZ2V0X3UzMihhdHRyc1tOTDgwMjExX0FUVFJfV0lQSFlfRlJFUV9PRkZTRVRdKTsKIAogCWNoYW4gPSBubDgwMjExX2dldF92YWxpZF9jaGFuKCZhbXA7cmRldi0mZ3Q7d2lwaHksIGZyZXEpOwotCWlmICghY2hhbikKJiM0MzsJaWYgKCFjaGFuKSB7CiYjNDM7CQlHRU5MX1NFVF9FUlJfTVNHKGluZm8sICYjMzQ7aW52YWxpZCBvciBkaXNhYmxlZCBjaGFubmVsJiMzNDspOwogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKJiM0MzsJfQogCiAJaWYgKGFzc29jX2xpbmtfaWQgJmd0Oz0gMCkKIAkJdXNlX2ZvciA9IE5MODAyMTFfQlNTX1VTRV9GT1JfTUxEX0xJTks7CkBAIC0xMzA2OCw3ICYjNDM7MTMwNzUsNyBAQCBzdGF0aWMgc3RydWN0IGNmZzgwMjExX2JzcyAqbmw4MDIxMV9hc3NvY19ic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlCiAJCQkJIHNzaWQsIHNzaWRfbGVuLAogCQkJCSBJRUVFODAyMTFfQlNTX1RZUEVfRVNTLAogCQkJCSBJRUVFODAyMTFfUFJJVkFDWV9BTlksCi0JCQkJIHVzZV9mb3IpOwomIzQzOwkJCQkgdXNlX2ZvciwgaW5mby0mZ3Q7ZXh0YWNrKTsKIAlpZiAoIWJzcykKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CiAKQEAgLTEzMTA3LDEzICYjNDM7MTMxMTQsMTMgQEAgc3RhdGljIGludCBubDgwMjExX3Byb2Nlc3NfbGlua3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJbGlua3NbbGlua19pZF0uYnNzID0KLQkJCW5sODAyMTFfYXNzb2NfYnNzKHJkZXYsIHNzaWQsIHNzaWRfbGVuLCBhdHRycywKJiM0MzsJCQlubDgwMjExX2Fzc29jX2JzcyhyZGV2LCBpbmZvLCBzc2lkLCBzc2lkX2xlbiwgYXR0cnMsCiAJCQkJCSAgYXNzb2NfbGlua19pZCwgbGlua19pZCk7CiAJCWlmIChJU19FUlIobGlua3NbbGlua19pZF0uYnNzKSkgewogCQkJZXJyID0gUFRSX0VSUihsaW5rc1tsaW5rX2lkXS5ic3MpOwogCQkJbGlua3NbbGlua19pZF0uYnNzID0gTlVMTDsKLQkJCU5MX1NFVF9FUlJfTVNHX0FUVFIoaW5mby0mZ3Q7ZXh0YWNrLCBsaW5rLAotCQkJCQkgICAgJiMzNDtFcnJvciBmZXRjaGluZyBCU1MgZm9yIGxpbmsmIzM0Oyk7CiYjNDM7CQkJLyogdGhlIEJTUyBsb29rdXAgc2V0IHRoZSBzcGVjaWZpYyBtZXNzYWdlIGFscmVhZHkgKi8KJiM0MzsJCQlOTF9TRVRfQkFEX0FUVFIoaW5mby0mZ3Q7ZXh0YWNrLCBsaW5rKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIApAQCAtMTMzMjksNyAmIzQzOzEzMzM2LDcgQEAgc3RhdGljIGludCBubDgwMjExX2Fzc29jaWF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQlpZiAocmVxLmxpbmtfaWQgJmd0Oz0gMCkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCXJlcS5ic3MgPSBubDgwMjExX2Fzc29jX2JzcyhyZGV2LCBzc2lkLCBzc2lkX2xlbiwgaW5mby0mZ3Q7YXR0cnMsCiYjNDM7CQlyZXEuYnNzID0gbmw4MDIxMV9hc3NvY19ic3MocmRldiwgaW5mbywgc3NpZCwgc3NpZF9sZW4sIGluZm8tJmd0O2F0dHJzLAogCQkJCQkgICAgLTEsIC0xKTsKIAkJaWYgKElTX0VSUihyZXEuYnNzKSkKIAkJCXJldHVybiBQVFJfRVJSKHJlcS5ic3MpOwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3NjYW4uYyBiL25ldC93aXJlbGVzcy9zY2FuLmMKaW5kZXggZTYyYjdkZDJiN2MyZDguLjkwYTRmMjg1NjU0Zjk0IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9zY2FuLmMKQEAgLTE2MDksMTAgJiM0MzsxNjA5LDEyIEBAIHN0cnVjdCBjZmc4MDIxMV9ic3MgKl9fY2ZnODAyMTFfZ2V0X2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogCQkJCQljb25zdCB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuLAogCQkJCQllbnVtIGllZWU4MDIxMV9ic3NfdHlwZSBic3NfdHlwZSwKIAkJCQkJZW51bSBpZWVlODAyMTFfcHJpdmFjeSBwcml2YWN5LAotCQkJCQl1MzIgdXNlX2ZvcikKJiM0MzsJCQkJCXUzMiB1c2VfZm9yLAomIzQzOwkJCQkJc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2lwaHkpOwogCXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmJzcywgKnJlcyA9IE5VTEw7CiYjNDM7CWJvb2wgZXhwaXJlZCA9IGZhbHNlLCB1bnVzYWJsZSA9IGZhbHNlOwogCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllczsKIAlpbnQgYnNzX3ByaXZhY3k7CiAKQEAgLTE2MzQsMjIgJiM0MzsxNjM2LDQ4IEBAIHN0cnVjdCBjZmc4MDIxMV9ic3MgKl9fY2ZnODAyMTFfZ2V0X2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogCQkJY29udGludWU7CiAJCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihic3MtJmd0O3B1Yi5ic3NpZCkpCiAJCQljb250aW51ZTsKLQkJaWYgKChic3MtJmd0O3B1Yi51c2VfZm9yICZhbXA7IHVzZV9mb3IpICE9IHVzZV9mb3IpCiYjNDM7CQlpZiAoIWlzX2JzcygmYW1wO2Jzcy0mZ3Q7cHViLCBic3NpZCwgc3NpZCwgc3NpZF9sZW4pKQogCQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIGlkZW50aXR5IGNoZWNrcyBhYm92ZSBtdXN0IGFsbCBjb21lIGZpcnN0IHNvIHRoYXQKJiM0MzsJCSAqIHRoZSBleHBpcmVkL3VudXNhYmxlIGNsYXNzaWZpY2F0aW9uIGJlbG93IG9ubHkgZXZlcgomIzQzOwkJICogYXBwbGllcyB0byBlbnRyaWVzIHRoYXQgYWN0dWFsbHkgbWF0Y2ggdGhlIHJlcXVlc3QuCiYjNDM7CQkgKi8KJiM0MzsKIAkJLyogRG9uJiMzOTt0IGdldCBleHBpcmVkIEJTUyBzdHJ1Y3RzICovCiAJCWlmICh0aW1lX2FmdGVyKG5vdywgYnNzLSZndDt0cyAmIzQzOyBJRUVFODAyMTFfU0NBTl9SRVNVTFRfRVhQSVJFKSAmYW1wOyZhbXA7Ci0JCSAgICAhYXRvbWljX3JlYWQoJmFtcDtic3MtJmd0O2hvbGQpKQomIzQzOwkJICAgICFhdG9taWNfcmVhZCgmYW1wO2Jzcy0mZ3Q7aG9sZCkpIHsKJiM0MzsJCQlleHBpcmVkID0gdHJ1ZTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICgoYnNzLSZndDtwdWIudXNlX2ZvciAmYW1wOyB1c2VfZm9yKSAhPSB1c2VfZm9yKSB7CiYjNDM7CQkJdW51c2FibGUgPSB0cnVlOwogCQkJY29udGludWU7Ci0JCWlmIChpc19ic3MoJmFtcDtic3MtJmd0O3B1YiwgYnNzaWQsIHNzaWQsIHNzaWRfbGVuKSkgewotCQkJcmVzID0gYnNzOwotCQkJYnNzX3JlZl9nZXQocmRldiwgcmVzKTsKLQkJCWJyZWFrOwogCQl9CiYjNDM7CiYjNDM7CQlyZXMgPSBic3M7CiYjNDM7CQlic3NfcmVmX2dldChyZGV2LCByZXMpOwomIzQzOwkJYnJlYWs7CiAJfQogCiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtyZGV2LSZndDtic3NfbG9jayk7Ci0JaWYgKCFyZXMpCiYjNDM7CWlmICghcmVzKSB7CiYjNDM7CQlpZiAoZXhwaXJlZCAmYW1wOyZhbXA7IHVudXNhYmxlKQomIzQzOwkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKJiM0MzsJCQkJICAgICAgICYjMzQ7QlNTIGVudHJpZXMgYXJlIGV4cGlyZWQgb3IgY2Fubm90IGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uJiMzNDspOwomIzQzOwkJZWxzZSBpZiAodW51c2FibGUpCiYjNDM7CQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLAomIzQzOwkJCQkgICAgICAgJiMzNDtCU1MgY2Fubm90IGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uJiMzNDspOwomIzQzOwkJZWxzZSBpZiAoZXhwaXJlZCkKJiM0MzsJCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJCSAgICAgICAmIzM0O0JTUyBlbnRyeSBpbiBzY2FuIHJlc3VsdHMgaXMgZXhwaXJlZCYjMzQ7KTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJCSAgICAgICAmIzM0O0JTUyBub3QgZm91bmQgaW4gc2NhbiByZXN1bHRzJiMzNDspOwogCQlyZXR1cm4gTlVMTDsKJiM0MzsJfQogCXRyYWNlX2NmZzgwMjExX3JldHVybl9ic3MoJmFtcDtyZXMtJmd0O3B1Yik7CiAJcmV0dXJuICZhbXA7cmVzLSZndDtwdWI7CiB9CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvdGVzdHMvc2Nhbi5jIGIvbmV0L3dpcmVsZXNzL3Rlc3RzL3NjYW4uYwppbmRleCBiMWE5YzE0NjZkNmNiZC4uOGMyMDI3OGI1ZDNhNDQgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy90ZXN0cy9zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3Rlc3RzL3NjYW4uYwpAQCAtNDAyLDYgJiM0Mzs0MDIsMTI0IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW5mb3JtX2Jzc19zc2lkX29ubHkoc3RydWN0IGt1bml0ICp0ZXN0KQogCWNmZzgwMjExX3B1dF9ic3Mod2lwaHksIGJzcyk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2dldF9ic3NfbWlzc19yZWFzb24oc3RydWN0IGt1bml0ICp0ZXN0KQomIzQzO3sKJiM0MzsJc3RydWN0IGluZm9ybV9ic3MgY3R4ID0gewomIzQzOwkJLnRlc3QgPSB0ZXN0LAomIzQzOwl9OwomIzQzOwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gVF9XSVBIWSh0ZXN0LCBjdHgpOwomIzQzOwlzdHJ1Y3QgY2ZnODAyMTFfaW5mb3JtX2JzcyBpbmZvcm1fYnNzID0gewomIzQzOwkJLnNpZ25hbCA9IDUwLAomIzQzOwkJLmRydl9kYXRhID0gJmFtcDtjdHgsCiYjNDM7CX07CiYjNDM7CWNvbnN0IHU4IGJzc2lkW0VUSF9BTEVOXSA9IHsgMHgxMCwgMHgyMiwgMHgzMywgMHg0NCwgMHg1NSwgMHg2NiB9OwomIzQzOwljb25zdCB1OCBvdGhlcl9ic3NpZFtFVEhfQUxFTl0gPSB7IDB4NjYsIDB4NTUsIDB4NDQsIDB4MzMsIDB4MjIsIDB4MTEgfTsKJiM0MzsJc3RhdGljIGNvbnN0IHU4IGllc1tdID0gewomIzQzOwkJWzBdID0gV0xBTl9FSURfU1NJRCwKJiM0MzsJCVsxXSA9IDQsCiYjNDM7CQlbMl0gPSAmIzM5O1QmIzM5OywgJiMzOTtFJiMzOTssICYjMzk7UyYjMzk7LCAmIzM5O1QmIzM5OwomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICppYnNzOwomIzQzOwlzdHJ1Y3QgbmV0bGlua19leHRfYWNrIGV4dGFjayA9IHt9OwomIzQzOwlzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MsICpic3MyLCAqZm91bmQ7CiYjNDM7CiYjNDM7CWluZm9ybV9ic3MuY2hhbiA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbF9raHood2lwaHksIE1IWl9UT19LSFooMjQxMikpOwomIzQzOwlLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgaW5mb3JtX2Jzcy5jaGFuKTsKJiM0MzsKJiM0MzsJYnNzID0gY2ZnODAyMTFfaW5mb3JtX2Jzc19kYXRhKHdpcGh5LCAmYW1wO2luZm9ybV9ic3MsCiYjNDM7CQkJCSAgICAgICBDRkc4MDIxMV9CU1NfRlRZUEVfUFJFU1AsIGJzc2lkLCAwLAomIzQzOwkJCQkgICAgICAgMHgxMjM0LCAxMDAsIGllcywgc2l6ZW9mKGllcyksCiYjNDM7CQkJCSAgICAgICBHRlBfS0VSTkVMKTsKJiM0MzsJS1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGJzcyk7CiYjNDM7CWlic3MgPSBjb250YWluZXJfb2YoYnNzLCBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzLCBwdWIpOwomIzQzOwomIzQzOwkvKiBGcmVzaCB1c2FibGUgZW50cnk6IGZvdW5kLCBubyBtZXNzYWdlIGlzIHNldCAqLwomIzQzOwlmb3VuZCA9IF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgTlVMTCwgYnNzaWQsIE5VTEwsIDAsCiYjNDM7CQkJCSAgIElFRUU4MDIxMV9CU1NfVFlQRV9BTlksCiYjNDM7CQkJCSAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSwKJiM0MzsJCQkJICAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwsICZhbXA7ZXh0YWNrKTsKJiM0MzsJS1VOSVRfQVNTRVJUX1BUUl9FUSh0ZXN0LCBmb3VuZCwgYnNzKTsKJiM0MzsJS1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZXh0YWNrLl9tc2cpOwomIzQzOwljZmc4MDIxMV9wdXRfYnNzKHdpcGh5LCBmb3VuZCk7CiYjNDM7CiYjNDM7CS8qIE5vIGVudHJ5IGF0IGFsbCBmb3IgdGhpcyBCU1NJRCAqLwomIzQzOwlmb3VuZCA9IF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgTlVMTCwgb3RoZXJfYnNzaWQsIE5VTEwsIDAsCiYjNDM7CQkJCSAgIElFRUU4MDIxMV9CU1NfVFlQRV9BTlksCiYjNDM7CQkJCSAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSwKJiM0MzsJCQkJICAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwsICZhbXA7ZXh0YWNrKTsKJiM0MzsJS1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZm91bmQpOwomIzQzOwlLVU5JVF9FWFBFQ1RfU1RSRVEodGVzdCwgZXh0YWNrLl9tc2csICYjMzQ7QlNTIG5vdCBmb3VuZCBpbiBzY2FuIHJlc3VsdHMmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIEZyZXNoIGVudHJ5IHRoYXQgaXMgbm90IHVzYWJsZSBmb3IgdGhlIHJlcXVlc3RlZCB1c2UgKi8KJiM0MzsJZXh0YWNrLl9tc2cgPSBOVUxMOwomIzQzOwlic3MtJmd0O3VzZV9mb3IgPSAwOwomIzQzOwlmb3VuZCA9IF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgTlVMTCwgYnNzaWQsIE5VTEwsIDAsCiYjNDM7CQkJCSAgIElFRUU4MDIxMV9CU1NfVFlQRV9BTlksCiYjNDM7CQkJCSAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSwKJiM0MzsJCQkJICAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwsICZhbXA7ZXh0YWNrKTsKJiM0MzsJS1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZm91bmQpOwomIzQzOwlLVU5JVF9FWFBFQ1RfU1RSRVEodGVzdCwgZXh0YWNrLl9tc2csCiYjNDM7CQkJICAgJiMzNDtCU1MgY2Fubm90IGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uJiMzNDspOwomIzQzOwlic3MtJmd0O3VzZV9mb3IgPSBOTDgwMjExX0JTU19VU0VfRk9SX0FMTDsKJiM0MzsKJiM0MzsJLyogRXhwaXJlZCBlbnRyeSwgJmd0OyBJRUVFODAyMTFfU0NBTl9SRVNVTFRfRVhQSVJFICgzMHMpIG9sZCAqLwomIzQzOwlleHRhY2suX21zZyA9IE5VTEw7CiYjNDM7CWlic3MtJmd0O3RzID0gamlmZmllcyAtIDYwICogSFo7CiYjNDM7CWZvdW5kID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBic3NpZCwgTlVMTCwgMCwKJiM0MzsJCQkJICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSwKJiM0MzsJCQkJICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLAomIzQzOwkJCQkgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgJmFtcDtleHRhY2spOwomIzQzOwlLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCBmb3VuZCk7CiYjNDM7CUtVTklUX0VYUEVDVF9TVFJFUSh0ZXN0LCBleHRhY2suX21zZywKJiM0MzsJCQkgICAmIzM0O0JTUyBlbnRyeSBpbiBzY2FuIHJlc3VsdHMgaXMgZXhwaXJlZCYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogQW4gZW50cnkgYm90aCBleHBpcmVkIGFuZCB1bnVzYWJsZSByZXBvcnRzIGV4cGlyZWQgKi8KJiM0MzsJZXh0YWNrLl9tc2cgPSBOVUxMOwomIzQzOwlic3MtJmd0O3VzZV9mb3IgPSAwOwomIzQzOwlmb3VuZCA9IF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgTlVMTCwgYnNzaWQsIE5VTEwsIDAsCiYjNDM7CQkJCSAgIElFRUU4MDIxMV9CU1NfVFlQRV9BTlksCiYjNDM7CQkJCSAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSwKJiM0MzsJCQkJICAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwsICZhbXA7ZXh0YWNrKTsKJiM0MzsJS1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZm91bmQpOwomIzQzOwlLVU5JVF9FWFBFQ1RfU1RSRVEodGVzdCwgZXh0YWNrLl9tc2csCiYjNDM7CQkJICAgJiMzNDtCU1MgZW50cnkgaW4gc2NhbiByZXN1bHRzIGlzIGV4cGlyZWQmIzM0Oyk7CiYjNDM7CWJzcy0mZ3Q7dXNlX2ZvciA9IE5MODAyMTFfQlNTX1VTRV9GT1JfQUxMOwomIzQzOwomIzQzOwkvKiBFeHBpcmVkIGJ1dCBoZWxkIGVudHJpZXMgYXJlIHN0aWxsIHVzYWJsZSwgbm8gbWVzc2FnZSBpcyBzZXQgKi8KJiM0MzsJZXh0YWNrLl9tc2cgPSBOVUxMOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7aWJzcy0mZ3Q7aG9sZCwgMSk7CiYjNDM7CWZvdW5kID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBic3NpZCwgTlVMTCwgMCwKJiM0MzsJCQkJICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSwKJiM0MzsJCQkJICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLAomIzQzOwkJCQkgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgJmFtcDtleHRhY2spOwomIzQzOwlLVU5JVF9BU1NFUlRfUFRSX0VRKHRlc3QsIGZvdW5kLCBic3MpOwomIzQzOwlLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCBleHRhY2suX21zZyk7CiYjNDM7CWNmZzgwMjExX3B1dF9ic3Mod2lwaHksIGZvdW5kKTsKJiM0MzsJYXRvbWljX3NldCgmYW1wO2lic3MtJmd0O2hvbGQsIDApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBXaXRoIG9uZSBtYXRjaGluZyBlbnRyeSBleHBpcmVkIGFuZCBhbm90aGVyIGN1cnJlbnQgYnV0CiYjNDM7CSAqIHVudXNhYmxlLCBib3RoIHJlYXNvbnMgYXJlIHJlcG9ydGVkLgomIzQzOwkgKi8KJiM0MzsJYnNzMiA9IGNmZzgwMjExX2luZm9ybV9ic3NfZGF0YSh3aXBoeSwgJmFtcDtpbmZvcm1fYnNzLAomIzQzOwkJCQkJQ0ZHODAyMTFfQlNTX0ZUWVBFX1BSRVNQLCBvdGhlcl9ic3NpZCwKJiM0MzsJCQkJCTAsIDB4MTIzNCwgMTAwLCBpZXMsIHNpemVvZihpZXMpLAomIzQzOwkJCQkJR0ZQX0tFUk5FTCk7CiYjNDM7CUtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBic3MyKTsKJiM0MzsJYnNzMi0mZ3Q7dXNlX2ZvciA9IDA7CiYjNDM7CWV4dGFjay5fbXNnID0gTlVMTDsKJiM0MzsJZm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIE5VTEwsICYjMzQ7VEVTVCYjMzQ7LCA0LAomIzQzOwkJCQkgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLAomIzQzOwkJCQkgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksCiYjNDM7CQkJCSAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCAmYW1wO2V4dGFjayk7CiYjNDM7CUtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGZvdW5kKTsKJiM0MzsJS1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLAomIzQzOwkJCSAgICYjMzQ7QlNTIGVudHJpZXMgYXJlIGV4cGlyZWQgb3IgY2Fubm90IGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uJiMzNDspOwomIzQzOwomIzQzOwljZmc4MDIxMV9wdXRfYnNzKHdpcGh5LCBic3MyKTsKJiM0MzsJY2ZnODAyMTFfcHV0X2Jzcyh3aXBoeSwgYnNzKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IGluZm9ybV9ic3NfbWxfc3RhX2Nhc2UgewogCWNvbnN0IGNoYXIgKmRlc2M7CiAJaW50IG1sZF9pZDsKQEAgLTYxNyw3ICYjNDM7NzM1LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9pbmZvcm1fYnNzX21sX3N0YShzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJbGlua19ic3MgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIHN0YV9wcm9mLmJzc2lkLCBOVUxMLCAwLAogCQkJCSAgICAgIElFRUU4MDIxMV9CU1NfVFlQRV9BTlksCiAJCQkJICAgICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLAotCQkJCSAgICAgIDApOwomIzQzOwkJCQkgICAgICAwLCBOVUxMKTsKIAlLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgbGlua19ic3MpOwogCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBsaW5rX2Jzcy0mZ3Q7c2lnbmFsLCAwKTsKIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgbGlua19ic3MtJmd0O2JlYWNvbl9pbnRlcnZhbCwKQEAgLTg1NSw2ICYjNDM7OTczLDcgQEAga3VuaXRfdGVzdF9zdWl0ZShnZW5fbmV3X2llKTsKIAogc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGluZm9ybV9ic3NfdGVzdF9jYXNlc1tdID0gewogCUtVTklUX0NBU0UodGVzdF9pbmZvcm1fYnNzX3NzaWRfb25seSksCiYjNDM7CUtVTklUX0NBU0UodGVzdF9nZXRfYnNzX21pc3NfcmVhc29uKSwKIAlLVU5JVF9DQVNFX1BBUkFNKHRlc3RfaW5mb3JtX2Jzc19tbF9zdGEsIGluZm9ybV9ic3NfbWxfc3RhX2dlbl9wYXJhbXMpLAogCXt9CiB9Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDY1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTc5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEFuYWx5c2lzIG9mIFdpcmVsZXNzIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBlc3NlbnRpYWxseSBhYm91dCBpbXByb3ZpbmcgZXJyb3IgcmVwb3J0aW5nIGluIHRoZSB3aXJlbGVzcyBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB3aGVuIGEgQlNTIChCYXNpYyBTZXJ2aWNlIFNldCkgaXNuJiMzOTt0IGZvdW5kIG9yIGNhbiYjMzk7dCBiZSB1c2VkLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIGNoYW5nZXMgcmV2b2x2ZSBhcm91bmQgbGV2ZXJhZ2luZyB0aGUgYGV4dGFja2AgcGFyYW1ldGVyIHRvIHByb3ZpZGUgbW9yZSBkZXRhaWxlZCBlcnJvciBtZXNzYWdlcyBiYWNrIHRvIHVzZXJzcGFjZSB2aWEgTmV0bGluay4gV2UmIzM5O3JlIG1vZGlmeWluZyBgX19jZmc4MDIxMV9nZXRfYnNzYCwgYG5sODAyMTFfYXNzb2NfYnNzYCwgYW5kIGFkZGluZyBhIGt1bml0IHRlc3QgZm9yIHRoaXMgbmV3IGVycm9yIHBhdGguCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgKmZ1bmN0aW9uYWwqIGNoYW5nZXMgdGhhdCBjb3VsZCBpbXBhY3QgdGhlIGtlcm5lbCYjMzk7cyBleGVjdXRpb24gZmxvdyBhbmQgdGh1cyByZXF1aXJlIGZ1enppbmcuIFRoZSBidWxrIG9mIGl0IGlzIGZvY3VzZWQgb24gdGhlc2UgYGV4dGFja2AgbWVzc2FnZXMsIHdoaWNoIGFyZSBmb3IgaW1wcm92ZWQgZXJyb3IgcmVwb3J0aW5nLCBhbmQgSSYjMzk7bSB0cmVhdGluZyB0aGlzIGxpa2UgaW5mb3JtYXRpdmUgbG9nZ2luZyBmb3IgZnV6emluZyBwdXJwb3Nlcy4KCkkgc2VlIHRoZXJlJiMzOTtzIGEgc2xpZ2h0IHJlb3JkZXJpbmcgb2YgY2hlY2tzIGluIGBfX2NmZzgwMjExX2dldF9ic3NgOiB0aGUgb3JkZXIgb2YgdGhlIGNvbmRpdGlvbnMgaW4gdGhlIGxvb3AgaGFzIGJlZW4gY2hhbmdlZC4gIEJlZm9yZSwgd2UgZmlsdGVyZWQgYnkgYHVzZV9mb3JgLCB0aGVuIGV4cGlyYXRpb24sIGFuZCBmaW5hbGx5IGNoZWNrZWQgZm9yIHRoZSBtYXRjaGluZyBCU1NJRC9TU0lELiBOb3csIHdlIGNoZWNrIGZvciBCU1NJRC9TU0lEIGZpcnN0LCB0aGVuIGV4cGlyYXRpb24gYW5kIGB1c2VfZm9yYC4gVGhpcyBtYWRlIG1lIHBhdXNlLiBEb2VzIHRoaXMgKmFjdHVhbGx5KiBjaGFuZ2Ugd2hpY2ggQlNTIGlzIHNlbGVjdGVkIGlmIG11bHRpcGxlIGV4aXN0PyBBZnRlciBhIGNsb3NlciBsb29rLCB0aGUgbG9naWMgcmVtYWlucyB0aGUgc2FtZS4gIElmIGEgQlNTIGRvZXNuJiMzOTt0IG1lZXQgdGhlIGluaXRpYWwgY3JpdGVyaWEsIHdlIHNraXAgaXQgYW5kIGNvbnRpbnVlIHRvIHRoZSBuZXh0IG9uZS4gVGhlIGtleSBpcyB0aGF0IGV2ZW4gdGhvdWdoIHRoZSBvcmRlciBvZiBjaGVja3MgaGFzIGNoYW5nZWQsIHRoZSBvdXRjb21lIC0gdGhlIEJTUyBzZWxlY3RlZCAtIHJlbWFpbnMgaWRlbnRpY2FsLiBQcmV2aW91c2x5LCB0aGUgY29uZGl0aW9uIHdhcyBgKGJzcy0mZ3Q7cHViLnVzZV9mb3IgJmFtcDsgdXNlX2ZvcikgIT0gdXNlX2ZvcmAgZm9yIHNraXBwaW5nIGJ1dCB0aGUgbmV3IGNvbmRpdGlvbiBpcyBgIWlzX2JzcygpYC4KVGhlIG1haW4gZGlmZmVyZW5jZSBpcyB0aGUgY29uZGl0aW9uYWwgc2V0dGluZyBvZiB0aGUgYGV4cGlyZWRgIGFuZCBgdW51c2FibGVgIHZhcmlhYmxlcyBpbnNpZGUgdGhlIGxvb3AsIGFsbG93aW5nIHVzIHRvIHJldHVybiBhIG1vcmUgcHJlY2lzZSBlcnJvciBjb2RlIHRvIHRoZSB1c2VyLgoKTG9va2luZyBhdCBgbmw4MDIxMV9wcm9jZXNzX2xpbmtzYCBhbmQgYG5sODAyMTFfYXNzb2NfYnNzYCwgdGhlc2UgY2hhbmdlcyBhbHNvIGludm9sdmUgYWRqdXN0bWVudHMgdG8gZXJyb3IgbWVzc2FnZXMgdXNpbmcgYE5MX1NFVF9CQURfQVRUUmAgYW5kIGBHRU5MX1NFVF9FUlJfTVNHYC4gIEl0IGxvb2tzIGxpa2UgdGhlc2UgYXJlIGp1c3QgZGlmZmVyZW50IHN0cmluZyBtZXNzYWdlcyB0byBjb252ZXkgd2hhdCBpcyBoYXBwZW5pbmcuCgpUaGUgY29kZSBmbG93LCB0aGUgc2VsZWN0aW9uIG9mIHRoZSBjb3JyZWN0IEJTUywgaXMgdGhlIHNhbWUuICBUaGUgY2hhbmdlcyBzZWVtIHNvbGVseSBmb2N1c2VkIG9uICp3aGF0KiBlcnJvciBpbmZvcm1hdGlvbiBpcyBiZWluZyBzZW50IGJhY2sgdGhyb3VnaCBOZXRsaW5rLiBUaGlzIGlzIGxhcmdlbHkgYSB1c2VyLXNwYWNlLWZhY2luZyBpbXByb3ZlbWVudC4gVGhpcyBkb2VzIG5vdCBpbnRyb2R1Y2UgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHJlcXVpcmVzIGZ1enppbmcuIFRoZSBrdW5pdCB0ZXN0IGlzIHB1cmVseSBhIHVuaXQgdGVzdCBhbmQgZG9lc24mIzM5O3Qgd2FycmFudCBmdXp6aW5nLgoKTXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcga2VybmVsIGJlaGF2aW9yIHRoYXQgZGlyZWN0bHkgYWx0ZXJzIHByb2dyYW0gZmxvdyBvciB3b3VsZCBjcmVhdGUgbmV3IHZ1bG5lcmFiaWxpdHkgc3VyZmFjZSBmcm9tIGEga2VybmVsIHBlcnNwZWN0aXZlIGFuZCB0aGVyZWZvcmUgZG9lcyBub3Qgd2FycmFudCBhbnkgZnV6emluZy4gIFRoZSBgZXh0YWNrYCBwYXJhbWV0ZXIgaXMgdXNlZCBmb3IgbW9yZSBkZXNjcmlwdGl2ZSBlcnJvciByZXBvcnRpbmcgdG8gdXNlcnNwYWNlLCBidXQgdGhlIGtlcm5lbCYjMzk7cyBjb3JlIGxvZ2ljIHJlbWFpbnMgdW5jaGFuZ2VkLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZG91YmxlIGNoZWNrIHRoZSBgaXNfYnNzYCBmdW5jdGlvbiBqdXN0IHRvIGJlIHN1cmUuLi4gYW5kIHRoYXQgaXMgc2lkZSBlZmZlY3QgZnJlZS4gSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcyBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0YXRpYyBpbmxpbmUgYm9vbCBpc19ic3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3Mvc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTg2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBMb2NhdGlvbiBvZiBgaXNfYnNzYCoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB3aGVyZSBgaXNfYnNzYCBpcyBkZWZpbmVkLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHRoYXQgaXQmIzM5O3MgcHJvYmFibHkgd2l0aGluIHRoZSBgbmV0L3dpcmVsZXNzL3NjYW4uY2AgZmlsZS4gSXQmIzM5O3MgbGlrZWx5IGludm9sdmVkIGluIHRoZSB3aXJlbGVzcyBzY2FubmluZyBwcm9jZXNzLCBhbmQgdGhhdCYjMzk7cyBhIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuIEhvd2V2ZXIsIEkmIzM5O20gYWxzbyBiZXR0aW5nIGl0IG1pZ2h0ICpub3QqIGJlIGEgc2ltcGxlIGlubGluZSBmdW5jdGlvbiBkaXJlY3RseSB3aXRoaW4gdGhhdCBgLmNgIGZpbGUuIEdpdmVuIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGtlcm5lbCwgaXQmIzM5O3MganVzdCBhcyBsaWtlbHkgdGhhdCBpdCYjMzk7cyBkZWZpbmVkIGluIGEgaGVhZGVyIGZpbGUgaW5jbHVkZWQgYnkgYHNjYW4uY2AsIG1heWJlIHNvbWV0aGluZyByZWxhdGVkIHRvIEJTUyBzdHJ1Y3R1cmVzIG9yIHdpcmVsZXNzIGRldmljZSBjaGFyYWN0ZXJpc3RpY3MuIEkgbmVlZCB0byBiZSByZWFkeSB0byBjaGVjayBhIGhlYWRlciBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jvb2wgaXNfYnNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3Mvc2Nhbi5jPTQwND1FWFBPUlRfU1lNQk9MX0lGX0NGRzgwMjExX0tVTklUKGNmZzgwMjExX2dlbl9uZXdfaWUpO1xubmV0L3dpcmVsZXNzL3NjYW4uYy00MDUtXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjQwNjpzdGF0aWMgYm9vbCBpc19ic3Moc3RydWN0IGNmZzgwMjExX2JzcyAqYSwgY29uc3QgdTggKmJzc2lkLFxubmV0L3dpcmVsZXNzL3NjYW4uYy00MDctXHRcdCAgIGNvbnN0IHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk1OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gJiMzOTtpc19ic3MmIzM5OyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGlzX2Jzc2AgZnVuY3Rpb24uIEkgc2VlIHRoaXMgcXVpdGUgYSBiaXQgd2hlbiBJJiMzOTttIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbGlua2VyIHNjcmlwdHMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCBjb250ZXh0IGl0JiMzOTtzIGJlaW5nIHVzZWQgaW4uIElzIGl0IGEgZnVuY3Rpb24gY2FsbCwgYSBtYWNybywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyBpdCYjMzk7cyBsaWtlbHkgY2hlY2tpbmcgaWYgYSBnaXZlbiBzZWN0aW9uIG9yIGFkZHJlc3MgZmFsbHMgd2l0aGluIHRoZSBCU1MgKEJsb2NrIFN0YXJ0ZWQgYnkgU3ltYm9sKSByZWdpb24gb2YgbWVtb3J5LiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBiZWNhdXNlIHRoZSBCU1MgaXMgd2hlcmUgd2UgcGxhY2UgdW5pbml0aWFsaXplZCBnbG9iYWwgYW5kIHN0YXRpYyB2YXJpYWJsZXMuCgpNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggcG9zc2libGUgdXNlIGNhc2VzLiBJcyB0aGlzIGJlaW5nIHVzZWQgZHVyaW5nIGEgbGlua2VyIHNjcmlwdCBzdGFnZSB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgc2VjdGlvbnMgZm9yIHBsYWNlbWVudD8gT3IgbWF5YmUgaXQmIzM5O3Mgd2l0aGluIGEgcnVudGltZSBlbnZpcm9ubWVudCwgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBwb2ludGVyIHJlZmVycyB0byBhIEJTUyB2YXJpYWJsZSBiZWZvcmUgaW5pdGlhbGl6aW5nIGl0LCBvciBwZXJmb3JtaW5nIHNvbWUgb3RoZXIgbWVtb3J5IG9wZXJhdGlvbj8gQ29udGV4dCB3aWxsIGJlIGtleSBoZXJlLgoKSSYjMzk7ZCBleHBlY3QgdGhlIGltcGxlbWVudGF0aW9uIHRvIGludm9sdmUgc29tZSBraW5kIG9mIHJhbmdlIGNoZWNrLiBJdCB3b3VsZCBsaWtlbHkgY29tcGFyZSB0aGUgcHJvdmlkZWQgYWRkcmVzcyBvciBzZWN0aW9uIGFnYWluc3QgdGhlIHN0YXJ0IGFuZCBlbmQgYWRkcmVzc2VzIG9mIHRoZSBCU1Mgc2VnbWVudC4gSSYjMzk7ZCBiZSBjdXJpb3VzIHRvIHNlZSBob3cgdGhvc2Ugc3RhcnQgYW5kIGVuZCBhZGRyZXNzZXMgYXJlIGJlaW5nIGRldGVybWluZWQsIHByb2JhYmx5IHRocm91Z2ggbGlua2VyLWRlZmluZWQgc3ltYm9scyBsaWtlIGBfYnNzX3N0YXJ0YCBhbmQgYF9ic3NfZW5kYC4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSB0eXBlcyBpdCYjMzk7cyB1c2luZyBmb3IgdGhlc2UgYWRkcmVzc2VzIOKAkyBpcyBpdCB1c2luZyBgdWludHB0cl90YCwgcmF3IHBvaW50ZXJzLCBvciBzb21ldGhpbmcgZWxzZT8gVW5kZXJzdGFuZGluZyB0aGUgZGF0YSB0eXBlcyB1c2VkIGlzIGFsd2F5cyBjcml0aWNhbCBmb3IgYXZvaWRpbmcgc3VidGxlIGludGVnZXIgb3ZlcmZsb3dzIG9yIGluY29ycmVjdCBjb21wYXJpc29ucy4KCkFkZGl0aW9uYWxseSwgSSYjMzk7ZCBhbHNvIGJlIGN1cmlvdXMgYWJvdXQgd2hhdCBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyBtaWdodCBoYXZlIGJlZW4gdXNlZCB3aXRoaW4gdGhlIGZ1bmN0aW9uLiBJcyBpdCByZWx5aW5nIG9uIGNvbXBpbGVyIGludHJpbnNpY3MgdG8gbWFrZSB0aGUgcmFuZ2UgY2hlY2sgZmFzdGVyLCBvciBpcyBpdCB1c2luZyBhIHNpbXBsZSBjb21wYXJpc29uPyBJZiBpdCYjMzk7cyBhIGNyaXRpY2FsIHNlY3Rpb24gb2YgY29kZSwgb3IgYmVpbmcgaGVhdmlseSB1c2VkLCBJIHdvdWxkIGV4cGVjdCBpdCB0byBiZSB3ZWxsLW9wdGltaXplZC4gSSYjMzk7bSBrZWVuIHRvIGV4YW1pbmUgdGhlIGltcGxlbWVudGF0aW9uIHRvIHNlZSBpZiBpdCBoYW5kbGVzIHBvdGVudGlhbCBlZGdlIGNhc2VzIHByb3Blcmx5LCBzdWNoIGFzIHdoZW4gdGhlIHN0YXJ0IGFuZCBlbmQgb2YgQlNTIGFyZSB0aGUgc2FtZSwgb3Igd2hlbiB0aGUgdmFsdWUgYmVpbmcgY2hlY2tlZCBpcyByaWdodCBhdCBlaXRoZXIgYm91bmRhcnkuIEFsbCBvZiB0aG9zZSBkZXRhaWxzIGFyZSBnb2luZyB0byBiZSBuZWNlc3NhcnkgdG8gdW5kZXJzdGFuZCBpdHMgdHJ1ZSBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQwNjpcdHN0YXRpYyBib29sIGlzX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfYnNzICphLCBjb25zdCB1OCAqYnNzaWQsXG4gNDA3Olx0XHRcdCAgIGNvbnN0IHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4pXG4gNDA4Olx0e1xuIDQwOTpcdFx0Y29uc3Qgc3RydWN0IGNmZzgwMjExX2Jzc19pZXMgKmllcztcbiA0MTA6XHRcdGNvbnN0IHN0cnVjdCBlbGVtZW50ICpzc2lkX2VsZW07XG4gNDExOlx0XG4gNDEyOlx0XHRpZiAoYnNzaWQgXHUwMDI2XHUwMDI2ICFldGhlcl9hZGRyX2VxdWFsKGEtXHUwMDNlYnNzaWQsIGJzc2lkKSlcbiA0MTM6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDQxNDpcdFxuIDQxNTpcdFx0aWYgKCFzc2lkKVxuIDQxNjpcdFx0XHRyZXR1cm4gdHJ1ZTtcbiA0MTc6XHRcbiA0MTg6XHRcdGllcyA9IHJjdV9hY2Nlc3NfcG9pbnRlcihhLVx1MDAzZWllcyk7XG4gNDE5Olx0XHRpZiAoIWllcylcbiA0MjA6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDQyMTpcdFx0c3NpZF9lbGVtID0gY2ZnODAyMTFfZmluZF9lbGVtKFdMQU5fRUlEX1NTSUQsIGllcy1cdTAwM2VkYXRhLCBpZXMtXHUwMDNlbGVuKTtcbiA0MjI6XHRcdGlmICghc3NpZF9lbGVtKVxuIDQyMzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNDI0Olx0XHRpZiAoc3NpZF9lbGVtLVx1MDAzZWRhdGFsZW4gIT0gc3NpZF9sZW4pXG4gNDI1Olx0XHRcdHJldHVybiBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc5NgoJCQkJCQkJb3V0cHV0OiAxMDMKCQkJCQkJCXRob3VnaHRzOiAxNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgRnV6emluZyBXb3J0aGluZXNzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGZ1bmN0aW9uLCBgaXNfYnNzYCwgcmVtYWlucyBjb21wbGV0ZWx5IHNpZGUtZWZmZWN0IGZyZWUuIEl0IHNpbXBseSBwZXJmb3JtcyBhIGNvbXBhcmlzb24gb2YgdGhlIEJTUyBkYXRhIGFnYWluc3QgdGhlIEJTU0lEIGFuZCBTU0lEIHByb3ZpZGVkLiBTbywgdGhlIG1vZGlmaWNhdGlvbnMgd2l0aGluIGBfX2NmZzgwMjExX2dldF9ic3NgIGFyZSBmb2N1c2VkICpzb2xlbHkqIG9uIGVucmljaGluZyB0aGUgZXJyb3IgcmVwb3J0aW5nIHZpYSBgZXh0YWNrYCBtZXNzYWdlcy4gVGhlIHVuZGVybHlpbmcgc2VsZWN0aW9uIGxvZ2ljIGZvciB3aGljaCBCU1MgaXMgdWx0aW1hdGVseSBjaG9zZW4gaGFzbiYjMzk7dCBiZWVuIHRvdWNoZWQuCgpGdXJ0aGVybW9yZSwgdGhlIG90aGVyIGNoYW5nZXMgd2l0aGluIHRoZSBwYXRjaCBhcmUgc2ltaWxhcmx5IGNvbmZpbmVkIHRvIHNldHRpbmcgdGhlc2UgYGV4dGFja2AgbWVzc2FnZXMgYW5kIHRoZSBhZGRpdGlvbiBvZiBhIEtVbml0IHRlc3QuIFRoaXMgbWVhbnMgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGZ1bmN0aW9uYWwgYXNwZWN0cyB0byB0aGUga2VybmVsIHRoYXQgd291bGQgYmVuZWZpdCBmcm9tIGZ1enppbmcuIEl04oCZcyBlc3NlbnRpYWxseSBjb3NtZXRpYzogcHJvdmlkaW5nIGJldHRlciBlcnJvciBjb250ZXh0IGFuZCBhZGRpbmcgYSB1bml0IHRlc3QuIFRoZXJlZm9yZSwgYmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSYjMzk7bSBjb25maWRlbnQgaW4gY29uY2x1ZGluZyB0aGF0IHRoaXMgcGF0Y2ggaXNuJiMzOTt0IHdvcnRoIGZ1enppbmcuIEkgd2lsbCBjb25maWRlbnRseSByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIG5ldGxpbmsgZXh0ZW5kZWQgQUNLIChleHRhY2spIGVycm9yIG1lc3NhZ2VzIGZvciBiZXR0ZXIgZXJyb3IgcmVwb3J0aW5nIHRvIHVzZXJzcGFjZSB3aGVuIGEgQlNTIGlzIG5vdCBmb3VuZCBvciBjYW5ub3QgYmUgdXNlZC4gVGhlIGNvcmUgbG9naWMgb2YgQlNTIHNlbGVjdGlvbiByZW1haW5zIGZ1bmN0aW9uYWxseSBpZGVudGljYWwsIGFuZCB0aGUgcmVzdCBvZiB0aGUgcGF0Y2ggY29uc2lzdHMgb2YgYSBLVW5pdCB0ZXN0LiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgZXhlY3V0aW9uIGZsb3cgdGhhdCByZXF1aXJlIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgbmV0bGluayBleHRlbmRlZCBBQ0sgKGV4dGFjaykgZXJyb3IgbWVzc2FnZXMgZm9yIGJldHRlciBlcnJvciByZXBvcnRpbmcgdG8gdXNlcnNwYWNlIHdoZW4gYSBCU1MgaXMgbm90IGZvdW5kIG9yIGNhbm5vdCBiZSB1c2VkLiBUaGUgY29yZSBsb2dpYyBvZiBCU1Mgc2VsZWN0aW9uIHJlbWFpbnMgZnVuY3Rpb25hbGx5IGlkZW50aWNhbCwgYW5kIHRoZSByZXN0IG9mIHRoZSBwYXRjaCBjb25zaXN0cyBvZiBhIEtVbml0IHRlc3QuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBleGVjdXRpb24gZmxvdyB0aGF0IHJlcXVpcmUgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMTo1MDoxNS42Nzk3NDMxODNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTY3Mzk1MjA3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIG5ldGxpbmsgZXh0ZW5kZWQgQUNLIChleHRhY2spIGVycm9yIG1lc3NhZ2VzIGZvciBiZXR0ZXIgZXJyb3IgcmVwb3J0aW5nIHRvIHVzZXJzcGFjZSB3aGVuIGEgQlNTIGlzIG5vdCBmb3VuZCBvciBjYW5ub3QgYmUgdXNlZC4gVGhlIGNvcmUgbG9naWMgb2YgQlNTIHNlbGVjdGlvbiByZW1haW5zIGZ1bmN0aW9uYWxseSBpZGVudGljYWwsIGFuZCB0aGUgcmVzdCBvZiB0aGUgcGF0Y2ggY29uc2lzdHMgb2YgYSBLVW5pdCB0ZXN0LiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgZXhlY3V0aW9uIGZsb3cgdGhhdCByZXF1aXJlIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMTo1MDoxNS42Nzk3NDg2NDNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0Njg4MjU3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDI5YmFmNWMwODczMjAzY2Q5YTQ2ZmQwNDZhZTE2OGFhZDE4YTJkZWJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMjMgMDE6NTA6MTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmhcXG5pbmRleCBiOGU5ZmJiODllNjkxNi4uMTVjMDhiMjQ1MDJmZDMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmhcXG5AQCAtODQyNCw2ICs4NDI0LDggQEAgY2ZnODAyMTFfaW5mb3JtX2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbiAgKiBAYnNzX3R5cGU6IHR5cGUgb2YgQlNTLCBzZWUgXFx1MDAyNmVudW0gaWVlZTgwMjExX2Jzc190eXBlXFxuICAqIEBwcml2YWN5OiBwcml2YWN5IGZpbHRlciwgc2VlIFxcdTAwMjZlbnVtIGllZWU4MDIxMV9wcml2YWN5XFxuICAqIEB1c2VfZm9yOiBpbmRpY2F0ZXMgd2hpY2ggdXNlIGlzIGludGVuZGVkXFxuKyAqIEBleHRhY2s6IChvcHRpb25hbCkgZXh0YWNrIHRoYXQgaXMgZmlsbGVkIHdpdGggdGhlIHJlYXNvbiB3aGVuIG5vXFxuKyAqXFx0dXNhYmxlIGVudHJ5IHdhcyBmb3VuZDsgbWF5IGJlICVOVUxMXFxuICAqXFxuICAqIFJldHVybjogUmVmZXJlbmNlLWNvdW50ZWQgQlNTIG9uIHN1Y2Nlc3MuICVOVUxMIG9uIGVycm9yLlxcbiAgKi9cXG5AQCAtODQzMyw3ICs4NDM1LDggQEAgc3RydWN0IGNmZzgwMjExX2JzcyAqX19jZmc4MDIxMV9nZXRfYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxuIFxcdFxcdFxcdFxcdFxcdGNvbnN0IHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4sXFxuIFxcdFxcdFxcdFxcdFxcdGVudW0gaWVlZTgwMjExX2Jzc190eXBlIGJzc190eXBlLFxcbiBcXHRcXHRcXHRcXHRcXHRlbnVtIGllZWU4MDIxMV9wcml2YWN5IHByaXZhY3ksXFxuLVxcdFxcdFxcdFxcdFxcdHUzMiB1c2VfZm9yKTtcXG4rXFx0XFx0XFx0XFx0XFx0dTMyIHVzZV9mb3IsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuIFxcbiAvKipcXG4gICogY2ZnODAyMTFfZ2V0X2JzcyAtIGdldCBhIEJTUyByZWZlcmVuY2VcXG5AQCAtODQ1Nyw3ICs4NDYwLDcgQEAgY2ZnODAyMTFfZ2V0X2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsXFxuIHtcXG4gXFx0cmV0dXJuIF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgY2hhbm5lbCwgYnNzaWQsIHNzaWQsIHNzaWRfbGVuLFxcbiBcXHRcXHRcXHRcXHQgIGJzc190eXBlLCBwcml2YWN5LFxcbi1cXHRcXHRcXHRcXHQgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMKTtcXG4rXFx0XFx0XFx0XFx0ICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgTlVMTCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNmZzgwMjExX2JzcyAqXFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXFxuaW5kZXggZDk2MmI1OTQ0NTMzOWEuLmFjMGMwZGE0NTI0MTkxIDEwMDY0NFxcbi0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmNcXG4rKysgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXFxuQEAgLTEyODkwLDkgKzEyODkwLDExIEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9hdXRoZW50aWNhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuLVxcdHJlcS5ic3MgPSBjZmc4MDIxMV9nZXRfYnNzKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgY2hhbiwgYnNzaWQsIHNzaWQsIHNzaWRfbGVuLFxcbi1cXHRcXHRcXHRcXHQgICBJRUVFODAyMTFfQlNTX1RZUEVfRVNTLFxcbi1cXHRcXHRcXHRcXHQgICBJRUVFODAyMTFfUFJJVkFDWV9BTlkpO1xcbitcXHRyZXEuYnNzID0gX19jZmc4MDIxMV9nZXRfYnNzKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgY2hhbiwgYnNzaWQsIHNzaWQsIHNzaWRfbGVuLFxcbitcXHRcXHRcXHRcXHQgICAgIElFRUU4MDIxMV9CU1NfVFlQRV9FU1MsXFxuK1xcdFxcdFxcdFxcdCAgICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxcbitcXHRcXHRcXHRcXHQgICAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLFxcbitcXHRcXHRcXHRcXHQgICAgIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuIFxcdGlmICghcmVxLmJzcylcXG4gXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIFxcbkBAIC0xMzAzNyw2ICsxMzAzOSw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9jcnlwdG9fc2V0dGluZ3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbiB9XFxuIFxcbiBzdGF0aWMgc3RydWN0IGNmZzgwMjExX2JzcyAqbmw4MDIxMV9hc3NvY19ic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBjb25zdCB1OCAqc3NpZCwgaW50IHNzaWRfbGVuLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIGludCBhc3NvY19saW5rX2lkLCBpbnQgbGlua19pZClcXG5AQCAtMTMwNDYsOCArMTMwNDksMTAgQEAgc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9ic3MgKm5sODAyMTFfYXNzb2NfYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZVxcbiBcXHRjb25zdCB1OCAqYnNzaWQ7XFxuIFxcdHUzMiBmcmVxLCB1c2VfZm9yID0gMDtcXG4gXFxuLVxcdGlmICghYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10gfHwgIWF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9GUkVRXSlcXG4rXFx0aWYgKCFhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSB8fCAhYXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKSB7XFxuK1xcdFxcdEdFTkxfU0VUX0VSUl9NU0coaW5mbywgXFxcIkJTU0lEIG9yIGZyZXF1ZW5jeSBtaXNzaW5nXFxcIik7XFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbitcXHR9XFxuIFxcbiBcXHRic3NpZCA9IG5sYV9kYXRhKGF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTtcXG4gXFxuQEAgLTEzMDU2LDggKzEzMDYxLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpubDgwMjExX2Fzc29jX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2VcXG4gXFx0XFx0ZnJlcSArPSBubGFfZ2V0X3UzMihhdHRyc1tOTDgwMjExX0FUVFJfV0lQSFlfRlJFUV9PRkZTRVRdKTtcXG4gXFxuIFxcdGNoYW4gPSBubDgwMjExX2dldF92YWxpZF9jaGFuKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgZnJlcSk7XFxuLVxcdGlmICghY2hhbilcXG4rXFx0aWYgKCFjaGFuKSB7XFxuK1xcdFxcdEdFTkxfU0VUX0VSUl9NU0coaW5mbywgXFxcImludmFsaWQgb3IgZGlzYWJsZWQgY2hhbm5lbFxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKGFzc29jX2xpbmtfaWQgXFx1MDAzZT0gMClcXG4gXFx0XFx0dXNlX2ZvciA9IE5MODAyMTFfQlNTX1VTRV9GT1JfTUxEX0xJTks7XFxuQEAgLTEzMDY4LDcgKzEzMDc1LDcgQEAgc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9ic3MgKm5sODAyMTFfYXNzb2NfYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZVxcbiBcXHRcXHRcXHRcXHQgc3NpZCwgc3NpZF9sZW4sXFxuIFxcdFxcdFxcdFxcdCBJRUVFODAyMTFfQlNTX1RZUEVfRVNTLFxcbiBcXHRcXHRcXHRcXHQgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxcbi1cXHRcXHRcXHRcXHQgdXNlX2Zvcik7XFxuK1xcdFxcdFxcdFxcdCB1c2VfZm9yLCBpbmZvLVxcdTAwM2VleHRhY2spO1xcbiBcXHRpZiAoIWJzcylcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XFxuIFxcbkBAIC0xMzEwNywxMyArMTMxMTQsMTMgQEAgc3RhdGljIGludCBubDgwMjExX3Byb2Nlc3NfbGlua3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0fVxcbiBcXHRcXHRsaW5rc1tsaW5rX2lkXS5ic3MgPVxcbi1cXHRcXHRcXHRubDgwMjExX2Fzc29jX2JzcyhyZGV2LCBzc2lkLCBzc2lkX2xlbiwgYXR0cnMsXFxuK1xcdFxcdFxcdG5sODAyMTFfYXNzb2NfYnNzKHJkZXYsIGluZm8sIHNzaWQsIHNzaWRfbGVuLCBhdHRycyxcXG4gXFx0XFx0XFx0XFx0XFx0ICBhc3NvY19saW5rX2lkLCBsaW5rX2lkKTtcXG4gXFx0XFx0aWYgKElTX0VSUihsaW5rc1tsaW5rX2lkXS5ic3MpKSB7XFxuIFxcdFxcdFxcdGVyciA9IFBUUl9FUlIobGlua3NbbGlua19pZF0uYnNzKTtcXG4gXFx0XFx0XFx0bGlua3NbbGlua19pZF0uYnNzID0gTlVMTDtcXG4tXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfQVRUUihpbmZvLVxcdTAwM2VleHRhY2ssIGxpbmssXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBcXFwiRXJyb3IgZmV0Y2hpbmcgQlNTIGZvciBsaW5rXFxcIik7XFxuK1xcdFxcdFxcdC8qIHRoZSBCU1MgbG9va3VwIHNldCB0aGUgc3BlY2lmaWMgbWVzc2FnZSBhbHJlYWR5ICovXFxuK1xcdFxcdFxcdE5MX1NFVF9CQURfQVRUUihpbmZvLVxcdTAwM2VleHRhY2ssIGxpbmspO1xcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC0xMzMyOSw3ICsxMzMzNiw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9hc3NvY2lhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0XFx0aWYgKHJlcS5saW5rX2lkIFxcdTAwM2U9IDApXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0XFx0cmVxLmJzcyA9IG5sODAyMTFfYXNzb2NfYnNzKHJkZXYsIHNzaWQsIHNzaWRfbGVuLCBpbmZvLVxcdTAwM2VhdHRycyxcXG4rXFx0XFx0cmVxLmJzcyA9IG5sODAyMTFfYXNzb2NfYnNzKHJkZXYsIGluZm8sIHNzaWQsIHNzaWRfbGVuLCBpbmZvLVxcdTAwM2VhdHRycyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIC0xLCAtMSk7XFxuIFxcdFxcdGlmIChJU19FUlIocmVxLmJzcykpXFxuIFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHJlcS5ic3MpO1xcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvc2Nhbi5jIGIvbmV0L3dpcmVsZXNzL3NjYW4uY1xcbmluZGV4IGU2MmI3ZGQyYjdjMmQ4Li45MGE0ZjI4NTY1NGY5NCAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3Mvc2Nhbi5jXFxuKysrIGIvbmV0L3dpcmVsZXNzL3NjYW4uY1xcbkBAIC0xNjA5LDEwICsxNjA5LDEyIEBAIHN0cnVjdCBjZmc4MDIxMV9ic3MgKl9fY2ZnODAyMTFfZ2V0X2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbiBcXHRcXHRcXHRcXHRcXHRjb25zdCB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuLFxcbiBcXHRcXHRcXHRcXHRcXHRlbnVtIGllZWU4MDIxMV9ic3NfdHlwZSBic3NfdHlwZSxcXG4gXFx0XFx0XFx0XFx0XFx0ZW51bSBpZWVlODAyMTFfcHJpdmFjeSBwcml2YWN5LFxcbi1cXHRcXHRcXHRcXHRcXHR1MzIgdXNlX2ZvcilcXG4rXFx0XFx0XFx0XFx0XFx0dTMyIHVzZV9mb3IsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4ge1xcbiBcXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19yZGV2KHdpcGh5KTtcXG4gXFx0c3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzLCAqcmVzID0gTlVMTDtcXG4rXFx0Ym9vbCBleHBpcmVkID0gZmFsc2UsIHVudXNhYmxlID0gZmFsc2U7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllcztcXG4gXFx0aW50IGJzc19wcml2YWN5O1xcbiBcXG5AQCAtMTYzNCwyMiArMTYzNiw0OCBAQCBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpfX2NmZzgwMjExX2dldF9ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSxcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihic3MtXFx1MDAzZXB1Yi5ic3NpZCkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRpZiAoKGJzcy1cXHUwMDNlcHViLnVzZV9mb3IgXFx1MDAyNiB1c2VfZm9yKSAhPSB1c2VfZm9yKVxcbitcXHRcXHRpZiAoIWlzX2JzcyhcXHUwMDI2YnNzLVxcdTAwM2VwdWIsIGJzc2lkLCBzc2lkLCBzc2lkX2xlbikpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogVGhlIGlkZW50aXR5IGNoZWNrcyBhYm92ZSBtdXN0IGFsbCBjb21lIGZpcnN0IHNvIHRoYXRcXG4rXFx0XFx0ICogdGhlIGV4cGlyZWQvdW51c2FibGUgY2xhc3NpZmljYXRpb24gYmVsb3cgb25seSBldmVyXFxuK1xcdFxcdCAqIGFwcGxpZXMgdG8gZW50cmllcyB0aGF0IGFjdHVhbGx5IG1hdGNoIHRoZSByZXF1ZXN0LlxcbitcXHRcXHQgKi9cXG4rXFxuIFxcdFxcdC8qIERvbid0IGdldCBleHBpcmVkIEJTUyBzdHJ1Y3RzICovXFxuIFxcdFxcdGlmICh0aW1lX2FmdGVyKG5vdywgYnNzLVxcdTAwM2V0cyArIElFRUU4MDIxMV9TQ0FOX1JFU1VMVF9FWFBJUkUpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAhYXRvbWljX3JlYWQoXFx1MDAyNmJzcy1cXHUwMDNlaG9sZCkpXFxuK1xcdFxcdCAgICAhYXRvbWljX3JlYWQoXFx1MDAyNmJzcy1cXHUwMDNlaG9sZCkpIHtcXG4rXFx0XFx0XFx0ZXhwaXJlZCA9IHRydWU7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoKGJzcy1cXHUwMDNlcHViLnVzZV9mb3IgXFx1MDAyNiB1c2VfZm9yKSAhPSB1c2VfZm9yKSB7XFxuK1xcdFxcdFxcdHVudXNhYmxlID0gdHJ1ZTtcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdGlmIChpc19ic3MoXFx1MDAyNmJzcy1cXHUwMDNlcHViLCBic3NpZCwgc3NpZCwgc3NpZF9sZW4pKSB7XFxuLVxcdFxcdFxcdHJlcyA9IGJzcztcXG4tXFx0XFx0XFx0YnNzX3JlZl9nZXQocmRldiwgcmVzKTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4rXFxuK1xcdFxcdHJlcyA9IGJzcztcXG4rXFx0XFx0YnNzX3JlZl9nZXQocmRldiwgcmVzKTtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZyZGV2LVxcdTAwM2Vic3NfbG9jayk7XFxuLVxcdGlmICghcmVzKVxcbitcXHRpZiAoIXJlcykge1xcbitcXHRcXHRpZiAoZXhwaXJlZCBcXHUwMDI2XFx1MDAyNiB1bnVzYWJsZSlcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIkJTUyBlbnRyaWVzIGFyZSBleHBpcmVkIG9yIGNhbm5vdCBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdGVkIG9wZXJhdGlvblxcXCIpO1xcbitcXHRcXHRlbHNlIGlmICh1bnVzYWJsZSlcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIkJTUyBjYW5ub3QgYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RlZCBvcGVyYXRpb25cXFwiKTtcXG4rXFx0XFx0ZWxzZSBpZiAoZXhwaXJlZClcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIkJTUyBlbnRyeSBpbiBzY2FuIHJlc3VsdHMgaXMgZXhwaXJlZFxcXCIpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcXCJCU1Mgbm90IGZvdW5kIGluIHNjYW4gcmVzdWx0c1xcXCIpO1xcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbiBcXHR0cmFjZV9jZmc4MDIxMV9yZXR1cm5fYnNzKFxcdTAwMjZyZXMtXFx1MDAzZXB1Yik7XFxuIFxcdHJldHVybiBcXHUwMDI2cmVzLVxcdTAwM2VwdWI7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3Rlc3RzL3NjYW4uYyBiL25ldC93aXJlbGVzcy90ZXN0cy9zY2FuLmNcXG5pbmRleCBiMWE5YzE0NjZkNmNiZC4uOGMyMDI3OGI1ZDNhNDQgMTAwNjQ0XFxuLS0tIGEvbmV0L3dpcmVsZXNzL3Rlc3RzL3NjYW4uY1xcbisrKyBiL25ldC93aXJlbGVzcy90ZXN0cy9zY2FuLmNcXG5AQCAtNDAyLDYgKzQwMiwxMjQgQEAgc3RhdGljIHZvaWQgdGVzdF9pbmZvcm1fYnNzX3NzaWRfb25seShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIFxcdGNmZzgwMjExX3B1dF9ic3Mod2lwaHksIGJzcyk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHRlc3RfZ2V0X2Jzc19taXNzX3JlYXNvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuK3tcXG4rXFx0c3RydWN0IGluZm9ybV9ic3MgY3R4ID0ge1xcbitcXHRcXHQudGVzdCA9IHRlc3QsXFxuK1xcdH07XFxuK1xcdHN0cnVjdCB3aXBoeSAqd2lwaHkgPSBUX1dJUEhZKHRlc3QsIGN0eCk7XFxuK1xcdHN0cnVjdCBjZmc4MDIxMV9pbmZvcm1fYnNzIGluZm9ybV9ic3MgPSB7XFxuK1xcdFxcdC5zaWduYWwgPSA1MCxcXG4rXFx0XFx0LmRydl9kYXRhID0gXFx1MDAyNmN0eCxcXG4rXFx0fTtcXG4rXFx0Y29uc3QgdTggYnNzaWRbRVRIX0FMRU5dID0geyAweDEwLCAweDIyLCAweDMzLCAweDQ0LCAweDU1LCAweDY2IH07XFxuK1xcdGNvbnN0IHU4IG90aGVyX2Jzc2lkW0VUSF9BTEVOXSA9IHsgMHg2NiwgMHg1NSwgMHg0NCwgMHgzMywgMHgyMiwgMHgxMSB9O1xcbitcXHRzdGF0aWMgY29uc3QgdTggaWVzW10gPSB7XFxuK1xcdFxcdFswXSA9IFdMQU5fRUlEX1NTSUQsXFxuK1xcdFxcdFsxXSA9IDQsXFxuK1xcdFxcdFsyXSA9ICdUJywgJ0UnLCAnUycsICdUJ1xcbitcXHR9O1xcbitcXHRzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICppYnNzO1xcbitcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrIGV4dGFjayA9IHt9O1xcbitcXHRzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MsICpic3MyLCAqZm91bmQ7XFxuK1xcbitcXHRpbmZvcm1fYnNzLmNoYW4gPSBpZWVlODAyMTFfZ2V0X2NoYW5uZWxfa2h6KHdpcGh5LCBNSFpfVE9fS0haKDI0MTIpKTtcXG4rXFx0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGluZm9ybV9ic3MuY2hhbik7XFxuK1xcbitcXHRic3MgPSBjZmc4MDIxMV9pbmZvcm1fYnNzX2RhdGEod2lwaHksIFxcdTAwMjZpbmZvcm1fYnNzLFxcbitcXHRcXHRcXHRcXHQgICAgICAgQ0ZHODAyMTFfQlNTX0ZUWVBFX1BSRVNQLCBic3NpZCwgMCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIDB4MTIzNCwgMTAwLCBpZXMsIHNpemVvZihpZXMpLFxcbitcXHRcXHRcXHRcXHQgICAgICAgR0ZQX0tFUk5FTCk7XFxuK1xcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBic3MpO1xcbitcXHRpYnNzID0gY29udGFpbmVyX29mKGJzcywgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcywgcHViKTtcXG4rXFxuK1xcdC8qIEZyZXNoIHVzYWJsZSBlbnRyeTogZm91bmQsIG5vIG1lc3NhZ2UgaXMgc2V0ICovXFxuK1xcdGZvdW5kID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBic3NpZCwgTlVMTCwgMCxcXG4rXFx0XFx0XFx0XFx0ICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSxcXG4rXFx0XFx0XFx0XFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxcbitcXHRcXHRcXHRcXHQgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgXFx1MDAyNmV4dGFjayk7XFxuK1xcdEtVTklUX0FTU0VSVF9QVFJfRVEodGVzdCwgZm91bmQsIGJzcyk7XFxuK1xcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGV4dGFjay5fbXNnKTtcXG4rXFx0Y2ZnODAyMTFfcHV0X2Jzcyh3aXBoeSwgZm91bmQpO1xcbitcXG4rXFx0LyogTm8gZW50cnkgYXQgYWxsIGZvciB0aGlzIEJTU0lEICovXFxuK1xcdGZvdW5kID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBvdGhlcl9ic3NpZCwgTlVMTCwgMCxcXG4rXFx0XFx0XFx0XFx0ICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSxcXG4rXFx0XFx0XFx0XFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxcbitcXHRcXHRcXHRcXHQgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgXFx1MDAyNmV4dGFjayk7XFxuK1xcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGZvdW5kKTtcXG4rXFx0S1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLCBcXFwiQlNTIG5vdCBmb3VuZCBpbiBzY2FuIHJlc3VsdHNcXFwiKTtcXG4rXFxuK1xcdC8qIEZyZXNoIGVudHJ5IHRoYXQgaXMgbm90IHVzYWJsZSBmb3IgdGhlIHJlcXVlc3RlZCB1c2UgKi9cXG4rXFx0ZXh0YWNrLl9tc2cgPSBOVUxMO1xcbitcXHRic3MtXFx1MDAzZXVzZV9mb3IgPSAwO1xcbitcXHRmb3VuZCA9IF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgTlVMTCwgYnNzaWQsIE5VTEwsIDAsXFxuK1xcdFxcdFxcdFxcdCAgIElFRUU4MDIxMV9CU1NfVFlQRV9BTlksXFxuK1xcdFxcdFxcdFxcdCAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcXG4rXFx0XFx0XFx0XFx0ICAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwsIFxcdTAwMjZleHRhY2spO1xcbitcXHRLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCBmb3VuZCk7XFxuK1xcdEtVTklUX0VYUEVDVF9TVFJFUSh0ZXN0LCBleHRhY2suX21zZyxcXG4rXFx0XFx0XFx0ICAgXFxcIkJTUyBjYW5ub3QgYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RlZCBvcGVyYXRpb25cXFwiKTtcXG4rXFx0YnNzLVxcdTAwM2V1c2VfZm9yID0gTkw4MDIxMV9CU1NfVVNFX0ZPUl9BTEw7XFxuK1xcbitcXHQvKiBFeHBpcmVkIGVudHJ5LCBcXHUwMDNlIElFRUU4MDIxMV9TQ0FOX1JFU1VMVF9FWFBJUkUgKDMwcykgb2xkICovXFxuK1xcdGV4dGFjay5fbXNnID0gTlVMTDtcXG4rXFx0aWJzcy1cXHUwMDNldHMgPSBqaWZmaWVzIC0gNjAgKiBIWjtcXG4rXFx0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIGJzc2lkLCBOVUxMLCAwLFxcbitcXHRcXHRcXHRcXHQgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxcbitcXHRcXHRcXHRcXHQgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksXFxuK1xcdFxcdFxcdFxcdCAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBcXHUwMDI2ZXh0YWNrKTtcXG4rXFx0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZm91bmQpO1xcbitcXHRLVU5JVF9FWFBFQ1RfU1RSRVEodGVzdCwgZXh0YWNrLl9tc2csXFxuK1xcdFxcdFxcdCAgIFxcXCJCU1MgZW50cnkgaW4gc2NhbiByZXN1bHRzIGlzIGV4cGlyZWRcXFwiKTtcXG4rXFxuK1xcdC8qIEFuIGVudHJ5IGJvdGggZXhwaXJlZCBhbmQgdW51c2FibGUgcmVwb3J0cyBleHBpcmVkICovXFxuK1xcdGV4dGFjay5fbXNnID0gTlVMTDtcXG4rXFx0YnNzLVxcdTAwM2V1c2VfZm9yID0gMDtcXG4rXFx0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIGJzc2lkLCBOVUxMLCAwLFxcbitcXHRcXHRcXHRcXHQgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxcbitcXHRcXHRcXHRcXHQgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksXFxuK1xcdFxcdFxcdFxcdCAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBcXHUwMDI2ZXh0YWNrKTtcXG4rXFx0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZm91bmQpO1xcbitcXHRLVU5JVF9FWFBFQ1RfU1RSRVEodGVzdCwgZXh0YWNrLl9tc2csXFxuK1xcdFxcdFxcdCAgIFxcXCJCU1MgZW50cnkgaW4gc2NhbiByZXN1bHRzIGlzIGV4cGlyZWRcXFwiKTtcXG4rXFx0YnNzLVxcdTAwM2V1c2VfZm9yID0gTkw4MDIxMV9CU1NfVVNFX0ZPUl9BTEw7XFxuK1xcbitcXHQvKiBFeHBpcmVkIGJ1dCBoZWxkIGVudHJpZXMgYXJlIHN0aWxsIHVzYWJsZSwgbm8gbWVzc2FnZSBpcyBzZXQgKi9cXG4rXFx0ZXh0YWNrLl9tc2cgPSBOVUxMO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZpYnNzLVxcdTAwM2Vob2xkLCAxKTtcXG4rXFx0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIGJzc2lkLCBOVUxMLCAwLFxcbitcXHRcXHRcXHRcXHQgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxcbitcXHRcXHRcXHRcXHQgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksXFxuK1xcdFxcdFxcdFxcdCAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBcXHUwMDI2ZXh0YWNrKTtcXG4rXFx0S1VOSVRfQVNTRVJUX1BUUl9FUSh0ZXN0LCBmb3VuZCwgYnNzKTtcXG4rXFx0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZXh0YWNrLl9tc2cpO1xcbitcXHRjZmc4MDIxMV9wdXRfYnNzKHdpcGh5LCBmb3VuZCk7XFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNmlic3MtXFx1MDAzZWhvbGQsIDApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogV2l0aCBvbmUgbWF0Y2hpbmcgZW50cnkgZXhwaXJlZCBhbmQgYW5vdGhlciBjdXJyZW50IGJ1dFxcbitcXHQgKiB1bnVzYWJsZSwgYm90aCByZWFzb25zIGFyZSByZXBvcnRlZC5cXG4rXFx0ICovXFxuK1xcdGJzczIgPSBjZmc4MDIxMV9pbmZvcm1fYnNzX2RhdGEod2lwaHksIFxcdTAwMjZpbmZvcm1fYnNzLFxcbitcXHRcXHRcXHRcXHRcXHRDRkc4MDIxMV9CU1NfRlRZUEVfUFJFU1AsIG90aGVyX2Jzc2lkLFxcbitcXHRcXHRcXHRcXHRcXHQwLCAweDEyMzQsIDEwMCwgaWVzLCBzaXplb2YoaWVzKSxcXG4rXFx0XFx0XFx0XFx0XFx0R0ZQX0tFUk5FTCk7XFxuK1xcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBic3MyKTtcXG4rXFx0YnNzMi1cXHUwMDNldXNlX2ZvciA9IDA7XFxuK1xcdGV4dGFjay5fbXNnID0gTlVMTDtcXG4rXFx0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIE5VTEwsIFxcXCJURVNUXFxcIiwgNCxcXG4rXFx0XFx0XFx0XFx0ICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSxcXG4rXFx0XFx0XFx0XFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxcbitcXHRcXHRcXHRcXHQgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgXFx1MDAyNmV4dGFjayk7XFxuK1xcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGZvdW5kKTtcXG4rXFx0S1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLFxcbitcXHRcXHRcXHQgICBcXFwiQlNTIGVudHJpZXMgYXJlIGV4cGlyZWQgb3IgY2Fubm90IGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uXFxcIik7XFxuK1xcbitcXHRjZmc4MDIxMV9wdXRfYnNzKHdpcGh5LCBic3MyKTtcXG4rXFx0Y2ZnODAyMTFfcHV0X2Jzcyh3aXBoeSwgYnNzKTtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBpbmZvcm1fYnNzX21sX3N0YV9jYXNlIHtcXG4gXFx0Y29uc3QgY2hhciAqZGVzYztcXG4gXFx0aW50IG1sZF9pZDtcXG5AQCAtNjE3LDcgKzczNSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW5mb3JtX2Jzc19tbF9zdGEoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRsaW5rX2JzcyA9IF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgTlVMTCwgc3RhX3Byb2YuYnNzaWQsIE5VTEwsIDAsXFxuIFxcdFxcdFxcdFxcdCAgICAgIElFRUU4MDIxMV9CU1NfVFlQRV9BTlksXFxuIFxcdFxcdFxcdFxcdCAgICAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgMCk7XFxuK1xcdFxcdFxcdFxcdCAgICAgIDAsIE5VTEwpO1xcbiBcXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgbGlua19ic3MpO1xcbiBcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgbGlua19ic3MtXFx1MDAzZXNpZ25hbCwgMCk7XFxuIFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBsaW5rX2Jzcy1cXHUwMDNlYmVhY29uX2ludGVydmFsLFxcbkBAIC04NTUsNiArOTczLDcgQEAga3VuaXRfdGVzdF9zdWl0ZShnZW5fbmV3X2llKTtcXG4gXFxuIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBpbmZvcm1fYnNzX3Rlc3RfY2FzZXNbXSA9IHtcXG4gXFx0S1VOSVRfQ0FTRSh0ZXN0X2luZm9ybV9ic3Nfc3NpZF9vbmx5KSxcXG4rXFx0S1VOSVRfQ0FTRSh0ZXN0X2dldF9ic3NfbWlzc19yZWFzb24pLFxcbiBcXHRLVU5JVF9DQVNFX1BBUkFNKHRlc3RfaW5mb3JtX2Jzc19tbF9zdGEsIGluZm9ybV9ic3NfbWxfc3RhX2dlbl9wYXJhbXMpLFxcbiBcXHR7fVxcbiB9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMTo1MDoxNi4yMjc2MjMxNjNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyOTEyNjA2Mzg1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIG5ldGxpbmsgZXh0ZW5kZWQgQUNLIChleHRhY2spIGVycm9yIG1lc3NhZ2VzIGZvciBiZXR0ZXIgZXJyb3IgcmVwb3J0aW5nIHRvIHVzZXJzcGFjZSB3aGVuIGEgQlNTIGlzIG5vdCBmb3VuZCBvciBjYW5ub3QgYmUgdXNlZC4gVGhlIGNvcmUgbG9naWMgb2YgQlNTIHNlbGVjdGlvbiByZW1haW5zIGZ1bmN0aW9uYWxseSBpZGVudGljYWwsIGFuZCB0aGUgcmVzdCBvZiB0aGUgcGF0Y2ggY29uc2lzdHMgb2YgYSBLVW5pdCB0ZXN0LiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgZXhlY3V0aW9uIGZsb3cgdGhhdCByZXF1aXJlIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI5YmFmNWMwODczMjAzY2Q5YTQ2ZmQwNDZhZTE2OGFhZDE4YTJkZWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyMyAwMTo1MDoxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NmZzgwMjExLmggYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXG5pbmRleCBiOGU5ZmJiODllNjkxNi4uMTVjMDhiMjQ1MDJmZDMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXG4rKysgYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXG5AQCAtODQyNCw2ICs4NDI0LDggQEAgY2ZnODAyMTFfaW5mb3JtX2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuICAqIEBic3NfdHlwZTogdHlwZSBvZiBCU1MsIHNlZSBcdTAwMjZlbnVtIGllZWU4MDIxMV9ic3NfdHlwZVxuICAqIEBwcml2YWN5OiBwcml2YWN5IGZpbHRlciwgc2VlIFx1MDAyNmVudW0gaWVlZTgwMjExX3ByaXZhY3lcbiAgKiBAdXNlX2ZvcjogaW5kaWNhdGVzIHdoaWNoIHVzZSBpcyBpbnRlbmRlZFxuKyAqIEBleHRhY2s6IChvcHRpb25hbCkgZXh0YWNrIHRoYXQgaXMgZmlsbGVkIHdpdGggdGhlIHJlYXNvbiB3aGVuIG5vXG4rICpcdHVzYWJsZSBlbnRyeSB3YXMgZm91bmQ7IG1heSBiZSAlTlVMTFxuICAqXG4gICogUmV0dXJuOiBSZWZlcmVuY2UtY291bnRlZCBCU1Mgb24gc3VjY2Vzcy4gJU5VTEwgb24gZXJyb3IuXG4gICovXG5AQCAtODQzMyw3ICs4NDM1LDggQEAgc3RydWN0IGNmZzgwMjExX2JzcyAqX19jZmc4MDIxMV9nZXRfYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gXHRcdFx0XHRcdGNvbnN0IHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4sXG4gXHRcdFx0XHRcdGVudW0gaWVlZTgwMjExX2Jzc190eXBlIGJzc190eXBlLFxuIFx0XHRcdFx0XHRlbnVtIGllZWU4MDIxMV9wcml2YWN5IHByaXZhY3ksXG4tXHRcdFx0XHRcdHUzMiB1c2VfZm9yKTtcbitcdFx0XHRcdFx0dTMyIHVzZV9mb3IsXG4rXHRcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4gXG4gLyoqXG4gICogY2ZnODAyMTFfZ2V0X2JzcyAtIGdldCBhIEJTUyByZWZlcmVuY2VcbkBAIC04NDU3LDcgKzg0NjAsNyBAQCBjZmc4MDIxMV9nZXRfYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCxcbiB7XG4gXHRyZXR1cm4gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBjaGFubmVsLCBic3NpZCwgc3NpZCwgc3NpZF9sZW4sXG4gXHRcdFx0XHQgIGJzc190eXBlLCBwcml2YWN5LFxuLVx0XHRcdFx0ICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCk7XG4rXHRcdFx0XHQgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBOVUxMKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuaW5kZXggZDk2MmI1OTQ0NTMzOWEuLmFjMGMwZGE0NTI0MTkxIDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuKysrIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuQEAgLTEyODkwLDkgKzEyODkwLDExIEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9hdXRoZW50aWNhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbi1cdHJlcS5ic3MgPSBjZmc4MDIxMV9nZXRfYnNzKFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIGNoYW4sIGJzc2lkLCBzc2lkLCBzc2lkX2xlbixcbi1cdFx0XHRcdCAgIElFRUU4MDIxMV9CU1NfVFlQRV9FU1MsXG4tXHRcdFx0XHQgICBJRUVFODAyMTFfUFJJVkFDWV9BTlkpO1xuK1x0cmVxLmJzcyA9IF9fY2ZnODAyMTFfZ2V0X2JzcyhcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCBjaGFuLCBic3NpZCwgc3NpZCwgc3NpZF9sZW4sXG4rXHRcdFx0XHQgICAgIElFRUU4MDIxMV9CU1NfVFlQRV9FU1MsXG4rXHRcdFx0XHQgICAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcbitcdFx0XHRcdCAgICAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwsXG4rXHRcdFx0XHQgICAgIGluZm8tXHUwMDNlZXh0YWNrKTtcbiBcdGlmICghcmVxLmJzcylcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG5AQCAtMTMwMzcsNiArMTMwMzksNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfY3J5cHRvX3NldHRpbmdzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9ic3MgKm5sODAyMTFfYXNzb2NfYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbitcdFx0XHRcdFx0ICAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbiBcdFx0XHRcdFx0ICAgICAgY29uc3QgdTggKnNzaWQsIGludCBzc2lkX2xlbixcbiBcdFx0XHRcdFx0ICAgICAgc3RydWN0IG5sYXR0ciAqKmF0dHJzLFxuIFx0XHRcdFx0XHQgICAgICBpbnQgYXNzb2NfbGlua19pZCwgaW50IGxpbmtfaWQpXG5AQCAtMTMwNDYsOCArMTMwNDksMTAgQEAgc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9ic3MgKm5sODAyMTFfYXNzb2NfYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZVxuIFx0Y29uc3QgdTggKmJzc2lkO1xuIFx0dTMyIGZyZXEsIHVzZV9mb3IgPSAwO1xuIFxuLVx0aWYgKCFhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSB8fCAhYXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKVxuK1x0aWYgKCFhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSB8fCAhYXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKSB7XG4rXHRcdEdFTkxfU0VUX0VSUl9NU0coaW5mbywgXCJCU1NJRCBvciBmcmVxdWVuY3kgbWlzc2luZ1wiKTtcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4rXHR9XG4gXG4gXHRic3NpZCA9IG5sYV9kYXRhKGF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTtcbiBcbkBAIC0xMzA1Niw4ICsxMzA2MSwxMCBAQCBzdGF0aWMgc3RydWN0IGNmZzgwMjExX2JzcyAqbmw4MDIxMV9hc3NvY19ic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlXG4gXHRcdGZyZXEgKz0gbmxhX2dldF91MzIoYXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFfT0ZGU0VUXSk7XG4gXG4gXHRjaGFuID0gbmw4MDIxMV9nZXRfdmFsaWRfY2hhbihcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCBmcmVxKTtcbi1cdGlmICghY2hhbilcbitcdGlmICghY2hhbikge1xuK1x0XHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFwiaW52YWxpZCBvciBkaXNhYmxlZCBjaGFubmVsXCIpO1xuIFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbitcdH1cbiBcbiBcdGlmIChhc3NvY19saW5rX2lkIFx1MDAzZT0gMClcbiBcdFx0dXNlX2ZvciA9IE5MODAyMTFfQlNTX1VTRV9GT1JfTUxEX0xJTks7XG5AQCAtMTMwNjgsNyArMTMwNzUsNyBAQCBzdGF0aWMgc3RydWN0IGNmZzgwMjExX2JzcyAqbmw4MDIxMV9hc3NvY19ic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlXG4gXHRcdFx0XHQgc3NpZCwgc3NpZF9sZW4sXG4gXHRcdFx0XHQgSUVFRTgwMjExX0JTU19UWVBFX0VTUyxcbiBcdFx0XHRcdCBJRUVFODAyMTFfUFJJVkFDWV9BTlksXG4tXHRcdFx0XHQgdXNlX2Zvcik7XG4rXHRcdFx0XHQgdXNlX2ZvciwgaW5mby1cdTAwM2VleHRhY2spO1xuIFx0aWYgKCFic3MpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuIFxuQEAgLTEzMTA3LDEzICsxMzExNCwxMyBAQCBzdGF0aWMgaW50IG5sODAyMTFfcHJvY2Vzc19saW5rcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiBcdFx0bGlua3NbbGlua19pZF0uYnNzID1cbi1cdFx0XHRubDgwMjExX2Fzc29jX2JzcyhyZGV2LCBzc2lkLCBzc2lkX2xlbiwgYXR0cnMsXG4rXHRcdFx0bmw4MDIxMV9hc3NvY19ic3MocmRldiwgaW5mbywgc3NpZCwgc3NpZF9sZW4sIGF0dHJzLFxuIFx0XHRcdFx0XHQgIGFzc29jX2xpbmtfaWQsIGxpbmtfaWQpO1xuIFx0XHRpZiAoSVNfRVJSKGxpbmtzW2xpbmtfaWRdLmJzcykpIHtcbiBcdFx0XHRlcnIgPSBQVFJfRVJSKGxpbmtzW2xpbmtfaWRdLmJzcyk7XG4gXHRcdFx0bGlua3NbbGlua19pZF0uYnNzID0gTlVMTDtcbi1cdFx0XHROTF9TRVRfRVJSX01TR19BVFRSKGluZm8tXHUwMDNlZXh0YWNrLCBsaW5rLFxuLVx0XHRcdFx0XHQgICAgXCJFcnJvciBmZXRjaGluZyBCU1MgZm9yIGxpbmtcIik7XG4rXHRcdFx0LyogdGhlIEJTUyBsb29rdXAgc2V0IHRoZSBzcGVjaWZpYyBtZXNzYWdlIGFscmVhZHkgKi9cbitcdFx0XHROTF9TRVRfQkFEX0FUVFIoaW5mby1cdTAwM2VleHRhY2ssIGxpbmspO1xuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbiBcbkBAIC0xMzMyOSw3ICsxMzMzNiw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9hc3NvY2lhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0aWYgKHJlcS5saW5rX2lkIFx1MDAzZT0gMClcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdFx0cmVxLmJzcyA9IG5sODAyMTFfYXNzb2NfYnNzKHJkZXYsIHNzaWQsIHNzaWRfbGVuLCBpbmZvLVx1MDAzZWF0dHJzLFxuK1x0XHRyZXEuYnNzID0gbmw4MDIxMV9hc3NvY19ic3MocmRldiwgaW5mbywgc3NpZCwgc3NpZF9sZW4sIGluZm8tXHUwMDNlYXR0cnMsXG4gXHRcdFx0XHRcdCAgICAtMSwgLTEpO1xuIFx0XHRpZiAoSVNfRVJSKHJlcS5ic3MpKVxuIFx0XHRcdHJldHVybiBQVFJfRVJSKHJlcS5ic3MpO1xuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9zY2FuLmMgYi9uZXQvd2lyZWxlc3Mvc2Nhbi5jXG5pbmRleCBlNjJiN2RkMmI3YzJkOC4uOTBhNGYyODU2NTRmOTQgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3Mvc2Nhbi5jXG4rKysgYi9uZXQvd2lyZWxlc3Mvc2Nhbi5jXG5AQCAtMTYwOSwxMCArMTYwOSwxMiBAQCBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpfX2NmZzgwMjExX2dldF9ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSxcbiBcdFx0XHRcdFx0Y29uc3QgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbixcbiBcdFx0XHRcdFx0ZW51bSBpZWVlODAyMTFfYnNzX3R5cGUgYnNzX3R5cGUsXG4gXHRcdFx0XHRcdGVudW0gaWVlZTgwMjExX3ByaXZhY3kgcHJpdmFjeSxcbi1cdFx0XHRcdFx0dTMyIHVzZV9mb3IpXG4rXHRcdFx0XHRcdHUzMiB1c2VfZm9yLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fcmRldih3aXBoeSk7XG4gXHRzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpic3MsICpyZXMgPSBOVUxMO1xuK1x0Ym9vbCBleHBpcmVkID0gZmFsc2UsIHVudXNhYmxlID0gZmFsc2U7XG4gXHR1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7XG4gXHRpbnQgYnNzX3ByaXZhY3k7XG4gXG5AQCAtMTYzNCwyMiArMTYzNiw0OCBAQCBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpfX2NmZzgwMjExX2dldF9ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSxcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGJzcy1cdTAwM2VwdWIuYnNzaWQpKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRpZiAoKGJzcy1cdTAwM2VwdWIudXNlX2ZvciBcdTAwMjYgdXNlX2ZvcikgIT0gdXNlX2ZvcilcbitcdFx0aWYgKCFpc19ic3MoXHUwMDI2YnNzLVx1MDAzZXB1YiwgYnNzaWQsIHNzaWQsIHNzaWRfbGVuKSlcbiBcdFx0XHRjb250aW51ZTtcbitcbitcdFx0LypcbitcdFx0ICogVGhlIGlkZW50aXR5IGNoZWNrcyBhYm92ZSBtdXN0IGFsbCBjb21lIGZpcnN0IHNvIHRoYXRcbitcdFx0ICogdGhlIGV4cGlyZWQvdW51c2FibGUgY2xhc3NpZmljYXRpb24gYmVsb3cgb25seSBldmVyXG4rXHRcdCAqIGFwcGxpZXMgdG8gZW50cmllcyB0aGF0IGFjdHVhbGx5IG1hdGNoIHRoZSByZXF1ZXN0LlxuK1x0XHQgKi9cbitcbiBcdFx0LyogRG9uJ3QgZ2V0IGV4cGlyZWQgQlNTIHN0cnVjdHMgKi9cbiBcdFx0aWYgKHRpbWVfYWZ0ZXIobm93LCBic3MtXHUwMDNldHMgKyBJRUVFODAyMTFfU0NBTl9SRVNVTFRfRVhQSVJFKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICFhdG9taWNfcmVhZChcdTAwMjZic3MtXHUwMDNlaG9sZCkpXG4rXHRcdCAgICAhYXRvbWljX3JlYWQoXHUwMDI2YnNzLVx1MDAzZWhvbGQpKSB7XG4rXHRcdFx0ZXhwaXJlZCA9IHRydWU7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbitcdFx0aWYgKChic3MtXHUwMDNlcHViLnVzZV9mb3IgXHUwMDI2IHVzZV9mb3IpICE9IHVzZV9mb3IpIHtcbitcdFx0XHR1bnVzYWJsZSA9IHRydWU7XG4gXHRcdFx0Y29udGludWU7XG4tXHRcdGlmIChpc19ic3MoXHUwMDI2YnNzLVx1MDAzZXB1YiwgYnNzaWQsIHNzaWQsIHNzaWRfbGVuKSkge1xuLVx0XHRcdHJlcyA9IGJzcztcbi1cdFx0XHRic3NfcmVmX2dldChyZGV2LCByZXMpO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHR9XG4rXG4rXHRcdHJlcyA9IGJzcztcbitcdFx0YnNzX3JlZl9nZXQocmRldiwgcmVzKTtcbitcdFx0YnJlYWs7XG4gXHR9XG4gXG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZyZGV2LVx1MDAzZWJzc19sb2NrKTtcbi1cdGlmICghcmVzKVxuK1x0aWYgKCFyZXMpIHtcbitcdFx0aWYgKGV4cGlyZWQgXHUwMDI2XHUwMDI2IHVudXNhYmxlKVxuK1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbitcdFx0XHRcdCAgICAgICBcIkJTUyBlbnRyaWVzIGFyZSBleHBpcmVkIG9yIGNhbm5vdCBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdGVkIG9wZXJhdGlvblwiKTtcbitcdFx0ZWxzZSBpZiAodW51c2FibGUpXG4rXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHRcdFx0ICAgICAgIFwiQlNTIGNhbm5vdCBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdGVkIG9wZXJhdGlvblwiKTtcbitcdFx0ZWxzZSBpZiAoZXhwaXJlZClcbitcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4rXHRcdFx0XHQgICAgICAgXCJCU1MgZW50cnkgaW4gc2NhbiByZXN1bHRzIGlzIGV4cGlyZWRcIik7XG4rXHRcdGVsc2VcbitcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4rXHRcdFx0XHQgICAgICAgXCJCU1Mgbm90IGZvdW5kIGluIHNjYW4gcmVzdWx0c1wiKTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4gXHR0cmFjZV9jZmc4MDIxMV9yZXR1cm5fYnNzKFx1MDAyNnJlcy1cdTAwM2VwdWIpO1xuIFx0cmV0dXJuIFx1MDAyNnJlcy1cdTAwM2VwdWI7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy90ZXN0cy9zY2FuLmMgYi9uZXQvd2lyZWxlc3MvdGVzdHMvc2Nhbi5jXG5pbmRleCBiMWE5YzE0NjZkNmNiZC4uOGMyMDI3OGI1ZDNhNDQgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvdGVzdHMvc2Nhbi5jXG4rKysgYi9uZXQvd2lyZWxlc3MvdGVzdHMvc2Nhbi5jXG5AQCAtNDAyLDYgKzQwMiwxMjQgQEAgc3RhdGljIHZvaWQgdGVzdF9pbmZvcm1fYnNzX3NzaWRfb25seShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRjZmc4MDIxMV9wdXRfYnNzKHdpcGh5LCBic3MpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB0ZXN0X2dldF9ic3NfbWlzc19yZWFzb24oc3RydWN0IGt1bml0ICp0ZXN0KVxuK3tcbitcdHN0cnVjdCBpbmZvcm1fYnNzIGN0eCA9IHtcbitcdFx0LnRlc3QgPSB0ZXN0LFxuK1x0fTtcbitcdHN0cnVjdCB3aXBoeSAqd2lwaHkgPSBUX1dJUEhZKHRlc3QsIGN0eCk7XG4rXHRzdHJ1Y3QgY2ZnODAyMTFfaW5mb3JtX2JzcyBpbmZvcm1fYnNzID0ge1xuK1x0XHQuc2lnbmFsID0gNTAsXG4rXHRcdC5kcnZfZGF0YSA9IFx1MDAyNmN0eCxcbitcdH07XG4rXHRjb25zdCB1OCBic3NpZFtFVEhfQUxFTl0gPSB7IDB4MTAsIDB4MjIsIDB4MzMsIDB4NDQsIDB4NTUsIDB4NjYgfTtcbitcdGNvbnN0IHU4IG90aGVyX2Jzc2lkW0VUSF9BTEVOXSA9IHsgMHg2NiwgMHg1NSwgMHg0NCwgMHgzMywgMHgyMiwgMHgxMSB9O1xuK1x0c3RhdGljIGNvbnN0IHU4IGllc1tdID0ge1xuK1x0XHRbMF0gPSBXTEFOX0VJRF9TU0lELFxuK1x0XHRbMV0gPSA0LFxuK1x0XHRbMl0gPSAnVCcsICdFJywgJ1MnLCAnVCdcbitcdH07XG4rXHRzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICppYnNzO1xuK1x0c3RydWN0IG5ldGxpbmtfZXh0X2FjayBleHRhY2sgPSB7fTtcbitcdHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcywgKmJzczIsICpmb3VuZDtcbitcbitcdGluZm9ybV9ic3MuY2hhbiA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbF9raHood2lwaHksIE1IWl9UT19LSFooMjQxMikpO1xuK1x0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGluZm9ybV9ic3MuY2hhbik7XG4rXG4rXHRic3MgPSBjZmc4MDIxMV9pbmZvcm1fYnNzX2RhdGEod2lwaHksIFx1MDAyNmluZm9ybV9ic3MsXG4rXHRcdFx0XHQgICAgICAgQ0ZHODAyMTFfQlNTX0ZUWVBFX1BSRVNQLCBic3NpZCwgMCxcbitcdFx0XHRcdCAgICAgICAweDEyMzQsIDEwMCwgaWVzLCBzaXplb2YoaWVzKSxcbitcdFx0XHRcdCAgICAgICBHRlBfS0VSTkVMKTtcbitcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBic3MpO1xuK1x0aWJzcyA9IGNvbnRhaW5lcl9vZihic3MsIHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MsIHB1Yik7XG4rXG4rXHQvKiBGcmVzaCB1c2FibGUgZW50cnk6IGZvdW5kLCBubyBtZXNzYWdlIGlzIHNldCAqL1xuK1x0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIGJzc2lkLCBOVUxMLCAwLFxuK1x0XHRcdFx0ICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSxcbitcdFx0XHRcdCAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcbitcdFx0XHRcdCAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBcdTAwMjZleHRhY2spO1xuK1x0S1VOSVRfQVNTRVJUX1BUUl9FUSh0ZXN0LCBmb3VuZCwgYnNzKTtcbitcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGV4dGFjay5fbXNnKTtcbitcdGNmZzgwMjExX3B1dF9ic3Mod2lwaHksIGZvdW5kKTtcbitcbitcdC8qIE5vIGVudHJ5IGF0IGFsbCBmb3IgdGhpcyBCU1NJRCAqL1xuK1x0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIG90aGVyX2Jzc2lkLCBOVUxMLCAwLFxuK1x0XHRcdFx0ICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSxcbitcdFx0XHRcdCAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcbitcdFx0XHRcdCAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBcdTAwMjZleHRhY2spO1xuK1x0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZm91bmQpO1xuK1x0S1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLCBcIkJTUyBub3QgZm91bmQgaW4gc2NhbiByZXN1bHRzXCIpO1xuK1xuK1x0LyogRnJlc2ggZW50cnkgdGhhdCBpcyBub3QgdXNhYmxlIGZvciB0aGUgcmVxdWVzdGVkIHVzZSAqL1xuK1x0ZXh0YWNrLl9tc2cgPSBOVUxMO1xuK1x0YnNzLVx1MDAzZXVzZV9mb3IgPSAwO1xuK1x0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIGJzc2lkLCBOVUxMLCAwLFxuK1x0XHRcdFx0ICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSxcbitcdFx0XHRcdCAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcbitcdFx0XHRcdCAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBcdTAwMjZleHRhY2spO1xuK1x0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZm91bmQpO1xuK1x0S1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLFxuK1x0XHRcdCAgIFwiQlNTIGNhbm5vdCBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdGVkIG9wZXJhdGlvblwiKTtcbitcdGJzcy1cdTAwM2V1c2VfZm9yID0gTkw4MDIxMV9CU1NfVVNFX0ZPUl9BTEw7XG4rXG4rXHQvKiBFeHBpcmVkIGVudHJ5LCBcdTAwM2UgSUVFRTgwMjExX1NDQU5fUkVTVUxUX0VYUElSRSAoMzBzKSBvbGQgKi9cbitcdGV4dGFjay5fbXNnID0gTlVMTDtcbitcdGlic3MtXHUwMDNldHMgPSBqaWZmaWVzIC0gNjAgKiBIWjtcbitcdGZvdW5kID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBic3NpZCwgTlVMTCwgMCxcbitcdFx0XHRcdCAgIElFRUU4MDIxMV9CU1NfVFlQRV9BTlksXG4rXHRcdFx0XHQgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksXG4rXHRcdFx0XHQgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgXHUwMDI2ZXh0YWNrKTtcbitcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGZvdW5kKTtcbitcdEtVTklUX0VYUEVDVF9TVFJFUSh0ZXN0LCBleHRhY2suX21zZyxcbitcdFx0XHQgICBcIkJTUyBlbnRyeSBpbiBzY2FuIHJlc3VsdHMgaXMgZXhwaXJlZFwiKTtcbitcbitcdC8qIEFuIGVudHJ5IGJvdGggZXhwaXJlZCBhbmQgdW51c2FibGUgcmVwb3J0cyBleHBpcmVkICovXG4rXHRleHRhY2suX21zZyA9IE5VTEw7XG4rXHRic3MtXHUwMDNldXNlX2ZvciA9IDA7XG4rXHRmb3VuZCA9IF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgTlVMTCwgYnNzaWQsIE5VTEwsIDAsXG4rXHRcdFx0XHQgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxuK1x0XHRcdFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxuK1x0XHRcdFx0ICAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwsIFx1MDAyNmV4dGFjayk7XG4rXHRLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCBmb3VuZCk7XG4rXHRLVU5JVF9FWFBFQ1RfU1RSRVEodGVzdCwgZXh0YWNrLl9tc2csXG4rXHRcdFx0ICAgXCJCU1MgZW50cnkgaW4gc2NhbiByZXN1bHRzIGlzIGV4cGlyZWRcIik7XG4rXHRic3MtXHUwMDNldXNlX2ZvciA9IE5MODAyMTFfQlNTX1VTRV9GT1JfQUxMO1xuK1xuK1x0LyogRXhwaXJlZCBidXQgaGVsZCBlbnRyaWVzIGFyZSBzdGlsbCB1c2FibGUsIG5vIG1lc3NhZ2UgaXMgc2V0ICovXG4rXHRleHRhY2suX21zZyA9IE5VTEw7XG4rXHRhdG9taWNfc2V0KFx1MDAyNmlic3MtXHUwMDNlaG9sZCwgMSk7XG4rXHRmb3VuZCA9IF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgTlVMTCwgYnNzaWQsIE5VTEwsIDAsXG4rXHRcdFx0XHQgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxuK1x0XHRcdFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxuK1x0XHRcdFx0ICAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwsIFx1MDAyNmV4dGFjayk7XG4rXHRLVU5JVF9BU1NFUlRfUFRSX0VRKHRlc3QsIGZvdW5kLCBic3MpO1xuK1x0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZXh0YWNrLl9tc2cpO1xuK1x0Y2ZnODAyMTFfcHV0X2Jzcyh3aXBoeSwgZm91bmQpO1xuK1x0YXRvbWljX3NldChcdTAwMjZpYnNzLVx1MDAzZWhvbGQsIDApO1xuK1xuK1x0LypcbitcdCAqIFdpdGggb25lIG1hdGNoaW5nIGVudHJ5IGV4cGlyZWQgYW5kIGFub3RoZXIgY3VycmVudCBidXRcbitcdCAqIHVudXNhYmxlLCBib3RoIHJlYXNvbnMgYXJlIHJlcG9ydGVkLlxuK1x0ICovXG4rXHRic3MyID0gY2ZnODAyMTFfaW5mb3JtX2Jzc19kYXRhKHdpcGh5LCBcdTAwMjZpbmZvcm1fYnNzLFxuK1x0XHRcdFx0XHRDRkc4MDIxMV9CU1NfRlRZUEVfUFJFU1AsIG90aGVyX2Jzc2lkLFxuK1x0XHRcdFx0XHQwLCAweDEyMzQsIDEwMCwgaWVzLCBzaXplb2YoaWVzKSxcbitcdFx0XHRcdFx0R0ZQX0tFUk5FTCk7XG4rXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgYnNzMik7XG4rXHRic3MyLVx1MDAzZXVzZV9mb3IgPSAwO1xuK1x0ZXh0YWNrLl9tc2cgPSBOVUxMO1xuK1x0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIE5VTEwsIFwiVEVTVFwiLCA0LFxuK1x0XHRcdFx0ICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSxcbitcdFx0XHRcdCAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcbitcdFx0XHRcdCAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBcdTAwMjZleHRhY2spO1xuK1x0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZm91bmQpO1xuK1x0S1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLFxuK1x0XHRcdCAgIFwiQlNTIGVudHJpZXMgYXJlIGV4cGlyZWQgb3IgY2Fubm90IGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uXCIpO1xuK1xuK1x0Y2ZnODAyMTFfcHV0X2Jzcyh3aXBoeSwgYnNzMik7XG4rXHRjZmc4MDIxMV9wdXRfYnNzKHdpcGh5LCBic3MpO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IGluZm9ybV9ic3NfbWxfc3RhX2Nhc2Uge1xuIFx0Y29uc3QgY2hhciAqZGVzYztcbiBcdGludCBtbGRfaWQ7XG5AQCAtNjE3LDcgKzczNSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW5mb3JtX2Jzc19tbF9zdGEoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0bGlua19ic3MgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIHN0YV9wcm9mLmJzc2lkLCBOVUxMLCAwLFxuIFx0XHRcdFx0ICAgICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSxcbiBcdFx0XHRcdCAgICAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcbi1cdFx0XHRcdCAgICAgIDApO1xuK1x0XHRcdFx0ICAgICAgMCwgTlVMTCk7XG4gXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgbGlua19ic3MpO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGxpbmtfYnNzLVx1MDAzZXNpZ25hbCwgMCk7XG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgbGlua19ic3MtXHUwMDNlYmVhY29uX2ludGVydmFsLFxuQEAgLTg1NSw2ICs5NzMsNyBAQCBrdW5pdF90ZXN0X3N1aXRlKGdlbl9uZXdfaWUpO1xuIFxuIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBpbmZvcm1fYnNzX3Rlc3RfY2FzZXNbXSA9IHtcbiBcdEtVTklUX0NBU0UodGVzdF9pbmZvcm1fYnNzX3NzaWRfb25seSksXG4rXHRLVU5JVF9DQVNFKHRlc3RfZ2V0X2Jzc19taXNzX3JlYXNvbiksXG4gXHRLVU5JVF9DQVNFX1BBUkFNKHRlc3RfaW5mb3JtX2Jzc19tbF9zdGEsIGluZm9ybV9ic3NfbWxfc3RhX2dlbl9wYXJhbXMpLFxuIFx0e31cbiB9O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDE6NTA6MTYuMjI3NjI1MjIzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY2MzI5NTE2MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBBbmFseXNpcyBvZiBXaXJlbGVzcyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgZXNzZW50aWFsbHkgYWJvdXQgaW1wcm92aW5nIGVycm9yIHJlcG9ydGluZyBpbiB0aGUgd2lyZWxlc3Mgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgd2hlbiBhIEJTUyAoQmFzaWMgU2VydmljZSBTZXQpIGlzbid0IGZvdW5kIG9yIGNhbid0IGJlIHVzZWQuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gY2hhbmdlcyByZXZvbHZlIGFyb3VuZCBsZXZlcmFnaW5nIHRoZSBgZXh0YWNrYCBwYXJhbWV0ZXIgdG8gcHJvdmlkZSBtb3JlIGRldGFpbGVkIGVycm9yIG1lc3NhZ2VzIGJhY2sgdG8gdXNlcnNwYWNlIHZpYSBOZXRsaW5rLiBXZSdyZSBtb2RpZnlpbmcgYF9fY2ZnODAyMTFfZ2V0X2Jzc2AsIGBubDgwMjExX2Fzc29jX2Jzc2AsIGFuZCBhZGRpbmcgYSBrdW5pdCB0ZXN0IGZvciB0aGlzIG5ldyBlcnJvciBwYXRoLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgKmZ1bmN0aW9uYWwqIGNoYW5nZXMgdGhhdCBjb3VsZCBpbXBhY3QgdGhlIGtlcm5lbCdzIGV4ZWN1dGlvbiBmbG93IGFuZCB0aHVzIHJlcXVpcmUgZnV6emluZy4gVGhlIGJ1bGsgb2YgaXQgaXMgZm9jdXNlZCBvbiB0aGVzZSBgZXh0YWNrYCBtZXNzYWdlcywgd2hpY2ggYXJlIGZvciBpbXByb3ZlZCBlcnJvciByZXBvcnRpbmcsIGFuZCBJJ20gdHJlYXRpbmcgdGhpcyBsaWtlIGluZm9ybWF0aXZlIGxvZ2dpbmcgZm9yIGZ1enppbmcgcHVycG9zZXMuXG5cbkkgc2VlIHRoZXJlJ3MgYSBzbGlnaHQgcmVvcmRlcmluZyBvZiBjaGVja3MgaW4gYF9fY2ZnODAyMTFfZ2V0X2Jzc2A6IHRoZSBvcmRlciBvZiB0aGUgY29uZGl0aW9ucyBpbiB0aGUgbG9vcCBoYXMgYmVlbiBjaGFuZ2VkLiAgQmVmb3JlLCB3ZSBmaWx0ZXJlZCBieSBgdXNlX2ZvcmAsIHRoZW4gZXhwaXJhdGlvbiwgYW5kIGZpbmFsbHkgY2hlY2tlZCBmb3IgdGhlIG1hdGNoaW5nIEJTU0lEL1NTSUQuIE5vdywgd2UgY2hlY2sgZm9yIEJTU0lEL1NTSUQgZmlyc3QsIHRoZW4gZXhwaXJhdGlvbiBhbmQgYHVzZV9mb3JgLiBUaGlzIG1hZGUgbWUgcGF1c2UuIERvZXMgdGhpcyAqYWN0dWFsbHkqIGNoYW5nZSB3aGljaCBCU1MgaXMgc2VsZWN0ZWQgaWYgbXVsdGlwbGUgZXhpc3Q/IEFmdGVyIGEgY2xvc2VyIGxvb2ssIHRoZSBsb2dpYyByZW1haW5zIHRoZSBzYW1lLiAgSWYgYSBCU1MgZG9lc24ndCBtZWV0IHRoZSBpbml0aWFsIGNyaXRlcmlhLCB3ZSBza2lwIGl0IGFuZCBjb250aW51ZSB0byB0aGUgbmV4dCBvbmUuIFRoZSBrZXkgaXMgdGhhdCBldmVuIHRob3VnaCB0aGUgb3JkZXIgb2YgY2hlY2tzIGhhcyBjaGFuZ2VkLCB0aGUgb3V0Y29tZSAtIHRoZSBCU1Mgc2VsZWN0ZWQgLSByZW1haW5zIGlkZW50aWNhbC4gUHJldmlvdXNseSwgdGhlIGNvbmRpdGlvbiB3YXMgYChic3MtXHUwMDNlcHViLnVzZV9mb3IgXHUwMDI2IHVzZV9mb3IpICE9IHVzZV9mb3JgIGZvciBza2lwcGluZyBidXQgdGhlIG5ldyBjb25kaXRpb24gaXMgYCFpc19ic3MoKWAuXG5UaGUgbWFpbiBkaWZmZXJlbmNlIGlzIHRoZSBjb25kaXRpb25hbCBzZXR0aW5nIG9mIHRoZSBgZXhwaXJlZGAgYW5kIGB1bnVzYWJsZWAgdmFyaWFibGVzIGluc2lkZSB0aGUgbG9vcCwgYWxsb3dpbmcgdXMgdG8gcmV0dXJuIGEgbW9yZSBwcmVjaXNlIGVycm9yIGNvZGUgdG8gdGhlIHVzZXIuXG5cbkxvb2tpbmcgYXQgYG5sODAyMTFfcHJvY2Vzc19saW5rc2AgYW5kIGBubDgwMjExX2Fzc29jX2Jzc2AsIHRoZXNlIGNoYW5nZXMgYWxzbyBpbnZvbHZlIGFkanVzdG1lbnRzIHRvIGVycm9yIG1lc3NhZ2VzIHVzaW5nIGBOTF9TRVRfQkFEX0FUVFJgIGFuZCBgR0VOTF9TRVRfRVJSX01TR2AuICBJdCBsb29rcyBsaWtlIHRoZXNlIGFyZSBqdXN0IGRpZmZlcmVudCBzdHJpbmcgbWVzc2FnZXMgdG8gY29udmV5IHdoYXQgaXMgaGFwcGVuaW5nLlxuXG5UaGUgY29kZSBmbG93LCB0aGUgc2VsZWN0aW9uIG9mIHRoZSBjb3JyZWN0IEJTUywgaXMgdGhlIHNhbWUuICBUaGUgY2hhbmdlcyBzZWVtIHNvbGVseSBmb2N1c2VkIG9uICp3aGF0KiBlcnJvciBpbmZvcm1hdGlvbiBpcyBiZWluZyBzZW50IGJhY2sgdGhyb3VnaCBOZXRsaW5rLiBUaGlzIGlzIGxhcmdlbHkgYSB1c2VyLXNwYWNlLWZhY2luZyBpbXByb3ZlbWVudC4gVGhpcyBkb2VzIG5vdCBpbnRyb2R1Y2UgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHJlcXVpcmVzIGZ1enppbmcuIFRoZSBrdW5pdCB0ZXN0IGlzIHB1cmVseSBhIHVuaXQgdGVzdCBhbmQgZG9lc24ndCB3YXJyYW50IGZ1enppbmcuXG5cbk15IGNvbmNsdXNpb24gaXMgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcga2VybmVsIGJlaGF2aW9yIHRoYXQgZGlyZWN0bHkgYWx0ZXJzIHByb2dyYW0gZmxvdyBvciB3b3VsZCBjcmVhdGUgbmV3IHZ1bG5lcmFiaWxpdHkgc3VyZmFjZSBmcm9tIGEga2VybmVsIHBlcnNwZWN0aXZlIGFuZCB0aGVyZWZvcmUgZG9lcyBub3Qgd2FycmFudCBhbnkgZnV6emluZy4gIFRoZSBgZXh0YWNrYCBwYXJhbWV0ZXIgaXMgdXNlZCBmb3IgbW9yZSBkZXNjcmlwdGl2ZSBlcnJvciByZXBvcnRpbmcgdG8gdXNlcnNwYWNlLCBidXQgdGhlIGtlcm5lbCdzIGNvcmUgbG9naWMgcmVtYWlucyB1bmNoYW5nZWQuIEknbSBnb2luZyB0byBxdWlja2x5IGRvdWJsZSBjaGVjayB0aGUgYGlzX2Jzc2AgZnVuY3Rpb24ganVzdCB0byBiZSBzdXJlLi4uIGFuZCB0aGF0IGlzIHNpZGUgZWZmZWN0IGZyZWUuIEknbSBjb25maWRlbnQgaW4gdGhpcyBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDY1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc5MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAxOjUwOjMyLjg2MDU3OTczWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjg1NzI0MiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0YXRpYyBpbmxpbmUgYm9vbCBpc19ic3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzL3NjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDE6NTA6MzIuOTc3NDQyOTUyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwNDM0MjcyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIExvY2F0aW9uIG9mIGBpc19ic3NgKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB3aGVyZSBgaXNfYnNzYCBpcyBkZWZpbmVkLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHRoYXQgaXQncyBwcm9iYWJseSB3aXRoaW4gdGhlIGBuZXQvd2lyZWxlc3Mvc2Nhbi5jYCBmaWxlLiBJdCdzIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgd2lyZWxlc3Mgc2Nhbm5pbmcgcHJvY2VzcywgYW5kIHRoYXQncyBhIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuIEhvd2V2ZXIsIEknbSBhbHNvIGJldHRpbmcgaXQgbWlnaHQgKm5vdCogYmUgYSBzaW1wbGUgaW5saW5lIGZ1bmN0aW9uIGRpcmVjdGx5IHdpdGhpbiB0aGF0IGAuY2AgZmlsZS4gR2l2ZW4gdGhlIHN0cnVjdHVyZSBvZiB0aGUga2VybmVsLCBpdCdzIGp1c3QgYXMgbGlrZWx5IHRoYXQgaXQncyBkZWZpbmVkIGluIGEgaGVhZGVyIGZpbGUgaW5jbHVkZWQgYnkgYHNjYW4uY2AsIG1heWJlIHNvbWV0aGluZyByZWxhdGVkIHRvIEJTUyBzdHJ1Y3R1cmVzIG9yIHdpcmVsZXNzIGRldmljZSBjaGFyYWN0ZXJpc3RpY3MuIEkgbmVlZCB0byBiZSByZWFkeSB0byBjaGVjayBhIGhlYWRlciBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTg2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDE6NTA6MzYuMTgxNzg3Mzc2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDk2NjcwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJib29sIGlzX2Jzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9zY2FuLmM9NDA0PUVYUE9SVF9TWU1CT0xfSUZfQ0ZHODAyMTFfS1VOSVQoY2ZnODAyMTFfZ2VuX25ld19pZSk7XFxubmV0L3dpcmVsZXNzL3NjYW4uYy00MDUtXFxubmV0L3dpcmVsZXNzL3NjYW4uYzo0MDY6c3RhdGljIGJvb2wgaXNfYnNzKHN0cnVjdCBjZmc4MDIxMV9ic3MgKmEsIGNvbnN0IHU4ICpic3NpZCxcXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTQwNy1cXHRcXHQgICBjb25zdCB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMTo1MDozNi4yODI3NjEzNjlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTkyODc1MjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiAnaXNfYnNzJyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBpc19ic3NgIGZ1bmN0aW9uLiBJIHNlZSB0aGlzIHF1aXRlIGEgYml0IHdoZW4gSSdtIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbGlua2VyIHNjcmlwdHMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCBjb250ZXh0IGl0J3MgYmVpbmcgdXNlZCBpbi4gSXMgaXQgYSBmdW5jdGlvbiBjYWxsLCBhIG1hY3JvLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIGl0J3MgbGlrZWx5IGNoZWNraW5nIGlmIGEgZ2l2ZW4gc2VjdGlvbiBvciBhZGRyZXNzIGZhbGxzIHdpdGhpbiB0aGUgQlNTIChCbG9jayBTdGFydGVkIGJ5IFN5bWJvbCkgcmVnaW9uIG9mIG1lbW9yeS4gVGhhdCdzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBiZWNhdXNlIHRoZSBCU1MgaXMgd2hlcmUgd2UgcGxhY2UgdW5pbml0aWFsaXplZCBnbG9iYWwgYW5kIHN0YXRpYyB2YXJpYWJsZXMuXG5cbk15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHJ1bm5pbmcgdGhyb3VnaCBwb3NzaWJsZSB1c2UgY2FzZXMuIElzIHRoaXMgYmVpbmcgdXNlZCBkdXJpbmcgYSBsaW5rZXIgc2NyaXB0IHN0YWdlIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBzZWN0aW9ucyBmb3IgcGxhY2VtZW50PyBPciBtYXliZSBpdCdzIHdpdGhpbiBhIHJ1bnRpbWUgZW52aXJvbm1lbnQsIHRvIGRldGVybWluZSB3aGV0aGVyIGEgcG9pbnRlciByZWZlcnMgdG8gYSBCU1MgdmFyaWFibGUgYmVmb3JlIGluaXRpYWxpemluZyBpdCwgb3IgcGVyZm9ybWluZyBzb21lIG90aGVyIG1lbW9yeSBvcGVyYXRpb24/IENvbnRleHQgd2lsbCBiZSBrZXkgaGVyZS5cblxuSSdkIGV4cGVjdCB0aGUgaW1wbGVtZW50YXRpb24gdG8gaW52b2x2ZSBzb21lIGtpbmQgb2YgcmFuZ2UgY2hlY2suIEl0IHdvdWxkIGxpa2VseSBjb21wYXJlIHRoZSBwcm92aWRlZCBhZGRyZXNzIG9yIHNlY3Rpb24gYWdhaW5zdCB0aGUgc3RhcnQgYW5kIGVuZCBhZGRyZXNzZXMgb2YgdGhlIEJTUyBzZWdtZW50LiBJJ2QgYmUgY3VyaW91cyB0byBzZWUgaG93IHRob3NlIHN0YXJ0IGFuZCBlbmQgYWRkcmVzc2VzIGFyZSBiZWluZyBkZXRlcm1pbmVkLCBwcm9iYWJseSB0aHJvdWdoIGxpbmtlci1kZWZpbmVkIHN5bWJvbHMgbGlrZSBgX2Jzc19zdGFydGAgYW5kIGBfYnNzX2VuZGAuIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSB0eXBlcyBpdCdzIHVzaW5nIGZvciB0aGVzZSBhZGRyZXNzZXMg4oCTIGlzIGl0IHVzaW5nIGB1aW50cHRyX3RgLCByYXcgcG9pbnRlcnMsIG9yIHNvbWV0aGluZyBlbHNlPyBVbmRlcnN0YW5kaW5nIHRoZSBkYXRhIHR5cGVzIHVzZWQgaXMgYWx3YXlzIGNyaXRpY2FsIGZvciBhdm9pZGluZyBzdWJ0bGUgaW50ZWdlciBvdmVyZmxvd3Mgb3IgaW5jb3JyZWN0IGNvbXBhcmlzb25zLlxuXG5BZGRpdGlvbmFsbHksIEknZCBhbHNvIGJlIGN1cmlvdXMgYWJvdXQgd2hhdCBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyBtaWdodCBoYXZlIGJlZW4gdXNlZCB3aXRoaW4gdGhlIGZ1bmN0aW9uLiBJcyBpdCByZWx5aW5nIG9uIGNvbXBpbGVyIGludHJpbnNpY3MgdG8gbWFrZSB0aGUgcmFuZ2UgY2hlY2sgZmFzdGVyLCBvciBpcyBpdCB1c2luZyBhIHNpbXBsZSBjb21wYXJpc29uPyBJZiBpdCdzIGEgY3JpdGljYWwgc2VjdGlvbiBvZiBjb2RlLCBvciBiZWluZyBoZWF2aWx5IHVzZWQsIEkgd291bGQgZXhwZWN0IGl0IHRvIGJlIHdlbGwtb3B0aW1pemVkLiBJJ20ga2VlbiB0byBleGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiB0byBzZWUgaWYgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZWRnZSBjYXNlcyBwcm9wZXJseSwgc3VjaCBhcyB3aGVuIHRoZSBzdGFydCBhbmQgZW5kIG9mIEJTUyBhcmUgdGhlIHNhbWUsIG9yIHdoZW4gdGhlIHZhbHVlIGJlaW5nIGNoZWNrZWQgaXMgcmlnaHQgYXQgZWl0aGVyIGJvdW5kYXJ5LiBBbGwgb2YgdGhvc2UgZGV0YWlscyBhcmUgZ29pbmcgdG8gYmUgbmVjZXNzYXJ5IHRvIHVuZGVyc3RhbmQgaXRzIHRydWUgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NTksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAxOjUwOjQwLjg3NTYzOTk5MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3Mvc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwNixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQwNjpcXHRzdGF0aWMgYm9vbCBpc19ic3Moc3RydWN0IGNmZzgwMjExX2JzcyAqYSwgY29uc3QgdTggKmJzc2lkLFxcbiA0MDc6XFx0XFx0XFx0ICAgY29uc3QgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbilcXG4gNDA4OlxcdHtcXG4gNDA5OlxcdFxcdGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9ic3NfaWVzICppZXM7XFxuIDQxMDpcXHRcXHRjb25zdCBzdHJ1Y3QgZWxlbWVudCAqc3NpZF9lbGVtO1xcbiA0MTE6XFx0XFxuIDQxMjpcXHRcXHRpZiAoYnNzaWQgXFx1MDAyNlxcdTAwMjYgIWV0aGVyX2FkZHJfZXF1YWwoYS1cXHUwMDNlYnNzaWQsIGJzc2lkKSlcXG4gNDEzOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNDE0OlxcdFxcbiA0MTU6XFx0XFx0aWYgKCFzc2lkKVxcbiA0MTY6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDQxNzpcXHRcXG4gNDE4OlxcdFxcdGllcyA9IHJjdV9hY2Nlc3NfcG9pbnRlcihhLVxcdTAwM2VpZXMpO1xcbiA0MTk6XFx0XFx0aWYgKCFpZXMpXFxuIDQyMDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDQyMTpcXHRcXHRzc2lkX2VsZW0gPSBjZmc4MDIxMV9maW5kX2VsZW0oV0xBTl9FSURfU1NJRCwgaWVzLVxcdTAwM2VkYXRhLCBpZXMtXFx1MDAzZWxlbik7XFxuIDQyMjpcXHRcXHRpZiAoIXNzaWRfZWxlbSlcXG4gNDIzOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNDI0OlxcdFxcdGlmIChzc2lkX2VsZW0tXFx1MDAzZWRhdGFsZW4gIT0gc3NpZF9sZW4pXFxuIDQyNTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAxOjUwOjQwLjg3NTg5MjcyMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0Nzc3NTExMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBGdXp6aW5nIFdvcnRoaW5lc3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGZ1bmN0aW9uLCBgaXNfYnNzYCwgcmVtYWlucyBjb21wbGV0ZWx5IHNpZGUtZWZmZWN0IGZyZWUuIEl0IHNpbXBseSBwZXJmb3JtcyBhIGNvbXBhcmlzb24gb2YgdGhlIEJTUyBkYXRhIGFnYWluc3QgdGhlIEJTU0lEIGFuZCBTU0lEIHByb3ZpZGVkLiBTbywgdGhlIG1vZGlmaWNhdGlvbnMgd2l0aGluIGBfX2NmZzgwMjExX2dldF9ic3NgIGFyZSBmb2N1c2VkICpzb2xlbHkqIG9uIGVucmljaGluZyB0aGUgZXJyb3IgcmVwb3J0aW5nIHZpYSBgZXh0YWNrYCBtZXNzYWdlcy4gVGhlIHVuZGVybHlpbmcgc2VsZWN0aW9uIGxvZ2ljIGZvciB3aGljaCBCU1MgaXMgdWx0aW1hdGVseSBjaG9zZW4gaGFzbid0IGJlZW4gdG91Y2hlZC5cblxuRnVydGhlcm1vcmUsIHRoZSBvdGhlciBjaGFuZ2VzIHdpdGhpbiB0aGUgcGF0Y2ggYXJlIHNpbWlsYXJseSBjb25maW5lZCB0byBzZXR0aW5nIHRoZXNlIGBleHRhY2tgIG1lc3NhZ2VzIGFuZCB0aGUgYWRkaXRpb24gb2YgYSBLVW5pdCB0ZXN0LiBUaGlzIG1lYW5zIHRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGZ1bmN0aW9uYWwgYXNwZWN0cyB0byB0aGUga2VybmVsIHRoYXQgd291bGQgYmVuZWZpdCBmcm9tIGZ1enppbmcuIEl04oCZcyBlc3NlbnRpYWxseSBjb3NtZXRpYzogcHJvdmlkaW5nIGJldHRlciBlcnJvciBjb250ZXh0IGFuZCBhZGRpbmcgYSB1bml0IHRlc3QuIFRoZXJlZm9yZSwgYmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSdtIGNvbmZpZGVudCBpbiBjb25jbHVkaW5nIHRoYXQgdGhpcyBwYXRjaCBpc24ndCB3b3J0aCBmdXp6aW5nLiBJIHdpbGwgY29uZmlkZW50bHkgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc5NiwiT3V0cHV0VG9rZW5zIjoxMDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMTo1MDo0NS4zNTM2NDk4OTJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgbmV0bGluayBleHRlbmRlZCBBQ0sgKGV4dGFjaykgZXJyb3IgbWVzc2FnZXMgZm9yIGJldHRlciBlcnJvciByZXBvcnRpbmcgdG8gdXNlcnNwYWNlIHdoZW4gYSBCU1MgaXMgbm90IGZvdW5kIG9yIGNhbm5vdCBiZSB1c2VkLiBUaGUgY29yZSBsb2dpYyBvZiBCU1Mgc2VsZWN0aW9uIHJlbWFpbnMgZnVuY3Rpb25hbGx5IGlkZW50aWNhbCwgYW5kIHRoZSByZXN0IG9mIHRoZSBwYXRjaCBjb25zaXN0cyBvZiBhIEtVbml0IHRlc3QuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBleGVjdXRpb24gZmxvdyB0aGF0IHJlcXVpcmUgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBuZXRsaW5rIGV4dGVuZGVkIEFDSyAoZXh0YWNrKSBlcnJvciBtZXNzYWdlcyBmb3IgYmV0dGVyIGVycm9yIHJlcG9ydGluZyB0byB1c2Vyc3BhY2Ugd2hlbiBhIEJTUyBpcyBub3QgZm91bmQgb3IgY2Fubm90IGJlIHVzZWQuIFRoZSBjb3JlIGxvZ2ljIG9mIEJTUyBzZWxlY3Rpb24gcmVtYWlucyBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIHBhdGNoIGNvbnNpc3RzIG9mIGEgS1VuaXQgdGVzdC4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGV4ZWN1dGlvbiBmbG93IHRoYXQgcmVxdWlyZSBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow6mzf8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-23 01:31:50 +0000 UTC FinishedAt: 2026-07-23 01:50:47 +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+CgkJCTx0ZD4yMDI2LzA3LzIzIDAxOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBuZXRsaW5rIGV4dGVuZGVkIEFDSyAoZXh0YWNrKSBlcnJvciBtZXNzYWdlcyBmb3IgYmV0dGVyIGVycm9yIHJlcG9ydGluZyB0byB1c2Vyc3BhY2Ugd2hlbiBhIEJTUyBpcyBub3QgZm91bmQgb3IgY2Fubm90IGJlIHVzZWQuIFRoZSBjb3JlIGxvZ2ljIG9mIEJTUyBzZWxlY3Rpb24gcmVtYWlucyBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIHBhdGNoIGNvbnNpc3RzIG9mIGEgS1VuaXQgdGVzdC4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGV4ZWN1dGlvbiBmbG93IHRoYXQgcmVxdWlyZSBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMTo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDI5YmFmNWMwODczMjAzY2Q5YTQ2ZmQwNDZhZTE2OGFhZDE4YTJkZWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyMyAwMTo1MDoxNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oIGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuaW5kZXggYjhlOWZiYjg5ZTY5MTYuLjE1YzA4YjI0NTAyZmQzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuQEAgLTg0MjQsNiAmIzQzOzg0MjQsOCBAQCBjZmc4MDIxMV9pbmZvcm1fYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gICogQGJzc190eXBlOiB0eXBlIG9mIEJTUywgc2VlIFx1MDAyNmVudW0gaWVlZTgwMjExX2Jzc190eXBlXG4gICogQHByaXZhY3k6IHByaXZhY3kgZmlsdGVyLCBzZWUgXHUwMDI2ZW51bSBpZWVlODAyMTFfcHJpdmFjeVxuICAqIEB1c2VfZm9yOiBpbmRpY2F0ZXMgd2hpY2ggdXNlIGlzIGludGVuZGVkXG4mIzQzOyAqIEBleHRhY2s6IChvcHRpb25hbCkgZXh0YWNrIHRoYXQgaXMgZmlsbGVkIHdpdGggdGhlIHJlYXNvbiB3aGVuIG5vXG4mIzQzOyAqXHR1c2FibGUgZW50cnkgd2FzIGZvdW5kOyBtYXkgYmUgJU5VTExcbiAgKlxuICAqIFJldHVybjogUmVmZXJlbmNlLWNvdW50ZWQgQlNTIG9uIHN1Y2Nlc3MuICVOVUxMIG9uIGVycm9yLlxuICAqL1xuQEAgLTg0MzMsNyAmIzQzOzg0MzUsOCBAQCBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpfX2NmZzgwMjExX2dldF9ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSxcbiBcdFx0XHRcdFx0Y29uc3QgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbixcbiBcdFx0XHRcdFx0ZW51bSBpZWVlODAyMTFfYnNzX3R5cGUgYnNzX3R5cGUsXG4gXHRcdFx0XHRcdGVudW0gaWVlZTgwMjExX3ByaXZhY3kgcHJpdmFjeSxcbi1cdFx0XHRcdFx0dTMyIHVzZV9mb3IpO1xuJiM0MztcdFx0XHRcdFx0dTMyIHVzZV9mb3IsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIFxuIC8qKlxuICAqIGNmZzgwMjExX2dldF9ic3MgLSBnZXQgYSBCU1MgcmVmZXJlbmNlXG5AQCAtODQ1Nyw3ICYjNDM7ODQ2MCw3IEBAIGNmZzgwMjExX2dldF9ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLFxuIHtcbiBcdHJldHVybiBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIGNoYW5uZWwsIGJzc2lkLCBzc2lkLCBzc2lkX2xlbixcbiBcdFx0XHRcdCAgYnNzX3R5cGUsIHByaXZhY3ksXG4tXHRcdFx0XHQgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMKTtcbiYjNDM7XHRcdFx0XHQgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBOVUxMKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuaW5kZXggZDk2MmI1OTQ0NTMzOWEuLmFjMGMwZGE0NTI0MTkxIDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuQEAgLTEyODkwLDkgJiM0MzsxMjg5MCwxMSBAQCBzdGF0aWMgaW50IG5sODAyMTFfYXV0aGVudGljYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4tXHRyZXEuYnNzID0gY2ZnODAyMTFfZ2V0X2JzcyhcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCBjaGFuLCBic3NpZCwgc3NpZCwgc3NpZF9sZW4sXG4tXHRcdFx0XHQgICBJRUVFODAyMTFfQlNTX1RZUEVfRVNTLFxuLVx0XHRcdFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZKTtcbiYjNDM7XHRyZXEuYnNzID0gX19jZmc4MDIxMV9nZXRfYnNzKFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIGNoYW4sIGJzc2lkLCBzc2lkLCBzc2lkX2xlbixcbiYjNDM7XHRcdFx0XHQgICAgIElFRUU4MDIxMV9CU1NfVFlQRV9FU1MsXG4mIzQzO1x0XHRcdFx0ICAgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksXG4mIzQzO1x0XHRcdFx0ICAgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCxcbiYjNDM7XHRcdFx0XHQgICAgIGluZm8tXHUwMDNlZXh0YWNrKTtcbiBcdGlmICghcmVxLmJzcylcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG5AQCAtMTMwMzcsNiAmIzQzOzEzMDM5LDcgQEAgc3RhdGljIGludCBubDgwMjExX2NyeXB0b19zZXR0aW5ncyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpubDgwMjExX2Fzc29jX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuIFx0XHRcdFx0XHQgICAgICBjb25zdCB1OCAqc3NpZCwgaW50IHNzaWRfbGVuLFxuIFx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXG4gXHRcdFx0XHRcdCAgICAgIGludCBhc3NvY19saW5rX2lkLCBpbnQgbGlua19pZClcbkBAIC0xMzA0Niw4ICYjNDM7MTMwNDksMTAgQEAgc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9ic3MgKm5sODAyMTFfYXNzb2NfYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZVxuIFx0Y29uc3QgdTggKmJzc2lkO1xuIFx0dTMyIGZyZXEsIHVzZV9mb3IgPSAwO1xuIFxuLVx0aWYgKCFhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSB8fCAhYXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKVxuJiM0MztcdGlmICghYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10gfHwgIWF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9GUkVRXSkge1xuJiM0MztcdFx0R0VOTF9TRVRfRVJSX01TRyhpbmZvLCBcJiMzNDtCU1NJRCBvciBmcmVxdWVuY3kgbWlzc2luZ1wmIzM0Oyk7XG4gXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuJiM0MztcdH1cbiBcbiBcdGJzc2lkID0gbmxhX2RhdGEoYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pO1xuIFxuQEAgLTEzMDU2LDggJiM0MzsxMzA2MSwxMCBAQCBzdGF0aWMgc3RydWN0IGNmZzgwMjExX2JzcyAqbmw4MDIxMV9hc3NvY19ic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlXG4gXHRcdGZyZXEgJiM0Mzs9IG5sYV9nZXRfdTMyKGF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9GUkVRX09GRlNFVF0pO1xuIFxuIFx0Y2hhbiA9IG5sODAyMTFfZ2V0X3ZhbGlkX2NoYW4oXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgZnJlcSk7XG4tXHRpZiAoIWNoYW4pXG4mIzQzO1x0aWYgKCFjaGFuKSB7XG4mIzQzO1x0XHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFwmIzM0O2ludmFsaWQgb3IgZGlzYWJsZWQgY2hhbm5lbFwmIzM0Oyk7XG4gXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuJiM0MztcdH1cbiBcbiBcdGlmIChhc3NvY19saW5rX2lkIFx1MDAzZT0gMClcbiBcdFx0dXNlX2ZvciA9IE5MODAyMTFfQlNTX1VTRV9GT1JfTUxEX0xJTks7XG5AQCAtMTMwNjgsNyAmIzQzOzEzMDc1LDcgQEAgc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9ic3MgKm5sODAyMTFfYXNzb2NfYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZVxuIFx0XHRcdFx0IHNzaWQsIHNzaWRfbGVuLFxuIFx0XHRcdFx0IElFRUU4MDIxMV9CU1NfVFlQRV9FU1MsXG4gXHRcdFx0XHQgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxuLVx0XHRcdFx0IHVzZV9mb3IpO1xuJiM0MztcdFx0XHRcdCB1c2VfZm9yLCBpbmZvLVx1MDAzZWV4dGFjayk7XG4gXHRpZiAoIWJzcylcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XG4gXG5AQCAtMTMxMDcsMTMgJiM0MzsxMzExNCwxMyBAQCBzdGF0aWMgaW50IG5sODAyMTFfcHJvY2Vzc19saW5rcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiBcdFx0bGlua3NbbGlua19pZF0uYnNzID1cbi1cdFx0XHRubDgwMjExX2Fzc29jX2JzcyhyZGV2LCBzc2lkLCBzc2lkX2xlbiwgYXR0cnMsXG4mIzQzO1x0XHRcdG5sODAyMTFfYXNzb2NfYnNzKHJkZXYsIGluZm8sIHNzaWQsIHNzaWRfbGVuLCBhdHRycyxcbiBcdFx0XHRcdFx0ICBhc3NvY19saW5rX2lkLCBsaW5rX2lkKTtcbiBcdFx0aWYgKElTX0VSUihsaW5rc1tsaW5rX2lkXS5ic3MpKSB7XG4gXHRcdFx0ZXJyID0gUFRSX0VSUihsaW5rc1tsaW5rX2lkXS5ic3MpO1xuIFx0XHRcdGxpbmtzW2xpbmtfaWRdLmJzcyA9IE5VTEw7XG4tXHRcdFx0TkxfU0VUX0VSUl9NU0dfQVRUUihpbmZvLVx1MDAzZWV4dGFjaywgbGluayxcbi1cdFx0XHRcdFx0ICAgIFwmIzM0O0Vycm9yIGZldGNoaW5nIEJTUyBmb3IgbGlua1wmIzM0Oyk7XG4mIzQzO1x0XHRcdC8qIHRoZSBCU1MgbG9va3VwIHNldCB0aGUgc3BlY2lmaWMgbWVzc2FnZSBhbHJlYWR5ICovXG4mIzQzO1x0XHRcdE5MX1NFVF9CQURfQVRUUihpbmZvLVx1MDAzZWV4dGFjaywgbGluayk7XG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuIFxuQEAgLTEzMzI5LDcgJiM0MzsxMzMzNiw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9hc3NvY2lhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0aWYgKHJlcS5saW5rX2lkIFx1MDAzZT0gMClcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdFx0cmVxLmJzcyA9IG5sODAyMTFfYXNzb2NfYnNzKHJkZXYsIHNzaWQsIHNzaWRfbGVuLCBpbmZvLVx1MDAzZWF0dHJzLFxuJiM0MztcdFx0cmVxLmJzcyA9IG5sODAyMTFfYXNzb2NfYnNzKHJkZXYsIGluZm8sIHNzaWQsIHNzaWRfbGVuLCBpbmZvLVx1MDAzZWF0dHJzLFxuIFx0XHRcdFx0XHQgICAgLTEsIC0xKTtcbiBcdFx0aWYgKElTX0VSUihyZXEuYnNzKSlcbiBcdFx0XHRyZXR1cm4gUFRSX0VSUihyZXEuYnNzKTtcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvc2Nhbi5jIGIvbmV0L3dpcmVsZXNzL3NjYW4uY1xuaW5kZXggZTYyYjdkZDJiN2MyZDguLjkwYTRmMjg1NjU0Zjk0IDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL3NjYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3NjYW4uY1xuQEAgLTE2MDksMTAgJiM0MzsxNjA5LDEyIEBAIHN0cnVjdCBjZmc4MDIxMV9ic3MgKl9fY2ZnODAyMTFfZ2V0X2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuIFx0XHRcdFx0XHRjb25zdCB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuLFxuIFx0XHRcdFx0XHRlbnVtIGllZWU4MDIxMV9ic3NfdHlwZSBic3NfdHlwZSxcbiBcdFx0XHRcdFx0ZW51bSBpZWVlODAyMTFfcHJpdmFjeSBwcml2YWN5LFxuLVx0XHRcdFx0XHR1MzIgdXNlX2ZvcilcbiYjNDM7XHRcdFx0XHRcdHUzMiB1c2VfZm9yLFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2lwaHkpO1xuIFx0c3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzLCAqcmVzID0gTlVMTDtcbiYjNDM7XHRib29sIGV4cGlyZWQgPSBmYWxzZSwgdW51c2FibGUgPSBmYWxzZTtcbiBcdHVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllcztcbiBcdGludCBic3NfcHJpdmFjeTtcbiBcbkBAIC0xNjM0LDIyICYjNDM7MTYzNiw0OCBAQCBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpfX2NmZzgwMjExX2dldF9ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSxcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGJzcy1cdTAwM2VwdWIuYnNzaWQpKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRpZiAoKGJzcy1cdTAwM2VwdWIudXNlX2ZvciBcdTAwMjYgdXNlX2ZvcikgIT0gdXNlX2ZvcilcbiYjNDM7XHRcdGlmICghaXNfYnNzKFx1MDAyNmJzcy1cdTAwM2VwdWIsIGJzc2lkLCBzc2lkLCBzc2lkX2xlbikpXG4gXHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRoZSBpZGVudGl0eSBjaGVja3MgYWJvdmUgbXVzdCBhbGwgY29tZSBmaXJzdCBzbyB0aGF0XG4mIzQzO1x0XHQgKiB0aGUgZXhwaXJlZC91bnVzYWJsZSBjbGFzc2lmaWNhdGlvbiBiZWxvdyBvbmx5IGV2ZXJcbiYjNDM7XHRcdCAqIGFwcGxpZXMgdG8gZW50cmllcyB0aGF0IGFjdHVhbGx5IG1hdGNoIHRoZSByZXF1ZXN0LlxuJiM0MztcdFx0ICovXG4mIzQzO1xuIFx0XHQvKiBEb24mIzM5O3QgZ2V0IGV4cGlyZWQgQlNTIHN0cnVjdHMgKi9cbiBcdFx0aWYgKHRpbWVfYWZ0ZXIobm93LCBic3MtXHUwMDNldHMgJiM0MzsgSUVFRTgwMjExX1NDQU5fUkVTVUxUX0VYUElSRSkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAhYXRvbWljX3JlYWQoXHUwMDI2YnNzLVx1MDAzZWhvbGQpKVxuJiM0MztcdFx0ICAgICFhdG9taWNfcmVhZChcdTAwMjZic3MtXHUwMDNlaG9sZCkpIHtcbiYjNDM7XHRcdFx0ZXhwaXJlZCA9IHRydWU7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmICgoYnNzLVx1MDAzZXB1Yi51c2VfZm9yIFx1MDAyNiB1c2VfZm9yKSAhPSB1c2VfZm9yKSB7XG4mIzQzO1x0XHRcdHVudXNhYmxlID0gdHJ1ZTtcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0aWYgKGlzX2JzcyhcdTAwMjZic3MtXHUwMDNlcHViLCBic3NpZCwgc3NpZCwgc3NpZF9sZW4pKSB7XG4tXHRcdFx0cmVzID0gYnNzO1xuLVx0XHRcdGJzc19yZWZfZ2V0KHJkZXYsIHJlcyk7XG4tXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRyZXMgPSBic3M7XG4mIzQzO1x0XHRic3NfcmVmX2dldChyZGV2LCByZXMpO1xuJiM0MztcdFx0YnJlYWs7XG4gXHR9XG4gXG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZyZGV2LVx1MDAzZWJzc19sb2NrKTtcbi1cdGlmICghcmVzKVxuJiM0MztcdGlmICghcmVzKSB7XG4mIzQzO1x0XHRpZiAoZXhwaXJlZCBcdTAwMjZcdTAwMjYgdW51c2FibGUpXG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7QlNTIGVudHJpZXMgYXJlIGV4cGlyZWQgb3IgY2Fubm90IGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uXCYjMzQ7KTtcbiYjNDM7XHRcdGVsc2UgaWYgKHVudXNhYmxlKVxuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgICAgIFwmIzM0O0JTUyBjYW5ub3QgYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RlZCBvcGVyYXRpb25cJiMzNDspO1xuJiM0MztcdFx0ZWxzZSBpZiAoZXhwaXJlZClcbiYjNDM7XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgICAgICBcJiMzNDtCU1MgZW50cnkgaW4gc2NhbiByZXN1bHRzIGlzIGV4cGlyZWRcJiMzNDspO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgICAgIFwmIzM0O0JTUyBub3QgZm91bmQgaW4gc2NhbiByZXN1bHRzXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuIFx0dHJhY2VfY2ZnODAyMTFfcmV0dXJuX2JzcyhcdTAwMjZyZXMtXHUwMDNlcHViKTtcbiBcdHJldHVybiBcdTAwMjZyZXMtXHUwMDNlcHViO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvdGVzdHMvc2Nhbi5jIGIvbmV0L3dpcmVsZXNzL3Rlc3RzL3NjYW4uY1xuaW5kZXggYjFhOWMxNDY2ZDZjYmQuLjhjMjAyNzhiNWQzYTQ0IDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL3Rlc3RzL3NjYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3Rlc3RzL3NjYW4uY1xuQEAgLTQwMiw2ICYjNDM7NDAyLDEyNCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2luZm9ybV9ic3Nfc3NpZF9vbmx5KHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdGNmZzgwMjExX3B1dF9ic3Mod2lwaHksIGJzcyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2dldF9ic3NfbWlzc19yZWFzb24oc3RydWN0IGt1bml0ICp0ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGluZm9ybV9ic3MgY3R4ID0ge1xuJiM0MztcdFx0LnRlc3QgPSB0ZXN0LFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IHdpcGh5ICp3aXBoeSA9IFRfV0lQSFkodGVzdCwgY3R4KTtcbiYjNDM7XHRzdHJ1Y3QgY2ZnODAyMTFfaW5mb3JtX2JzcyBpbmZvcm1fYnNzID0ge1xuJiM0MztcdFx0LnNpZ25hbCA9IDUwLFxuJiM0MztcdFx0LmRydl9kYXRhID0gXHUwMDI2Y3R4LFxuJiM0MztcdH07XG4mIzQzO1x0Y29uc3QgdTggYnNzaWRbRVRIX0FMRU5dID0geyAweDEwLCAweDIyLCAweDMzLCAweDQ0LCAweDU1LCAweDY2IH07XG4mIzQzO1x0Y29uc3QgdTggb3RoZXJfYnNzaWRbRVRIX0FMRU5dID0geyAweDY2LCAweDU1LCAweDQ0LCAweDMzLCAweDIyLCAweDExIH07XG4mIzQzO1x0c3RhdGljIGNvbnN0IHU4IGllc1tdID0ge1xuJiM0MztcdFx0WzBdID0gV0xBTl9FSURfU1NJRCxcbiYjNDM7XHRcdFsxXSA9IDQsXG4mIzQzO1x0XHRbMl0gPSAmIzM5O1QmIzM5OywgJiMzOTtFJiMzOTssICYjMzk7UyYjMzk7LCAmIzM5O1QmIzM5O1xuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqaWJzcztcbiYjNDM7XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrIGV4dGFjayA9IHt9O1xuJiM0MztcdHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcywgKmJzczIsICpmb3VuZDtcbiYjNDM7XG4mIzQzO1x0aW5mb3JtX2Jzcy5jaGFuID0gaWVlZTgwMjExX2dldF9jaGFubmVsX2toeih3aXBoeSwgTUhaX1RPX0tIWigyNDEyKSk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGluZm9ybV9ic3MuY2hhbik7XG4mIzQzO1xuJiM0MztcdGJzcyA9IGNmZzgwMjExX2luZm9ybV9ic3NfZGF0YSh3aXBoeSwgXHUwMDI2aW5mb3JtX2JzcyxcbiYjNDM7XHRcdFx0XHQgICAgICAgQ0ZHODAyMTFfQlNTX0ZUWVBFX1BSRVNQLCBic3NpZCwgMCxcbiYjNDM7XHRcdFx0XHQgICAgICAgMHgxMjM0LCAxMDAsIGllcywgc2l6ZW9mKGllcyksXG4mIzQzO1x0XHRcdFx0ICAgICAgIEdGUF9LRVJORUwpO1xuJiM0MztcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBic3MpO1xuJiM0MztcdGlic3MgPSBjb250YWluZXJfb2YoYnNzLCBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzLCBwdWIpO1xuJiM0MztcbiYjNDM7XHQvKiBGcmVzaCB1c2FibGUgZW50cnk6IGZvdW5kLCBubyBtZXNzYWdlIGlzIHNldCAqL1xuJiM0MztcdGZvdW5kID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBic3NpZCwgTlVMTCwgMCxcbiYjNDM7XHRcdFx0XHQgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxuJiM0MztcdFx0XHRcdCAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcbiYjNDM7XHRcdFx0XHQgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgXHUwMDI2ZXh0YWNrKTtcbiYjNDM7XHRLVU5JVF9BU1NFUlRfUFRSX0VRKHRlc3QsIGZvdW5kLCBic3MpO1xuJiM0MztcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGV4dGFjay5fbXNnKTtcbiYjNDM7XHRjZmc4MDIxMV9wdXRfYnNzKHdpcGh5LCBmb3VuZCk7XG4mIzQzO1xuJiM0MztcdC8qIE5vIGVudHJ5IGF0IGFsbCBmb3IgdGhpcyBCU1NJRCAqL1xuJiM0MztcdGZvdW5kID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBvdGhlcl9ic3NpZCwgTlVMTCwgMCxcbiYjNDM7XHRcdFx0XHQgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxuJiM0MztcdFx0XHRcdCAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcbiYjNDM7XHRcdFx0XHQgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgXHUwMDI2ZXh0YWNrKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCBmb3VuZCk7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLCBcJiMzNDtCU1Mgbm90IGZvdW5kIGluIHNjYW4gcmVzdWx0c1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIEZyZXNoIGVudHJ5IHRoYXQgaXMgbm90IHVzYWJsZSBmb3IgdGhlIHJlcXVlc3RlZCB1c2UgKi9cbiYjNDM7XHRleHRhY2suX21zZyA9IE5VTEw7XG4mIzQzO1x0YnNzLVx1MDAzZXVzZV9mb3IgPSAwO1xuJiM0MztcdGZvdW5kID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBic3NpZCwgTlVMTCwgMCxcbiYjNDM7XHRcdFx0XHQgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxuJiM0MztcdFx0XHRcdCAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcbiYjNDM7XHRcdFx0XHQgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgXHUwMDI2ZXh0YWNrKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCBmb3VuZCk7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLFxuJiM0MztcdFx0XHQgICBcJiMzNDtCU1MgY2Fubm90IGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uXCYjMzQ7KTtcbiYjNDM7XHRic3MtXHUwMDNldXNlX2ZvciA9IE5MODAyMTFfQlNTX1VTRV9GT1JfQUxMO1xuJiM0MztcbiYjNDM7XHQvKiBFeHBpcmVkIGVudHJ5LCBcdTAwM2UgSUVFRTgwMjExX1NDQU5fUkVTVUxUX0VYUElSRSAoMzBzKSBvbGQgKi9cbiYjNDM7XHRleHRhY2suX21zZyA9IE5VTEw7XG4mIzQzO1x0aWJzcy1cdTAwM2V0cyA9IGppZmZpZXMgLSA2MCAqIEhaO1xuJiM0MztcdGZvdW5kID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBic3NpZCwgTlVMTCwgMCxcbiYjNDM7XHRcdFx0XHQgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxuJiM0MztcdFx0XHRcdCAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcbiYjNDM7XHRcdFx0XHQgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgXHUwMDI2ZXh0YWNrKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCBmb3VuZCk7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLFxuJiM0MztcdFx0XHQgICBcJiMzNDtCU1MgZW50cnkgaW4gc2NhbiByZXN1bHRzIGlzIGV4cGlyZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBBbiBlbnRyeSBib3RoIGV4cGlyZWQgYW5kIHVudXNhYmxlIHJlcG9ydHMgZXhwaXJlZCAqL1xuJiM0MztcdGV4dGFjay5fbXNnID0gTlVMTDtcbiYjNDM7XHRic3MtXHUwMDNldXNlX2ZvciA9IDA7XG4mIzQzO1x0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIGJzc2lkLCBOVUxMLCAwLFxuJiM0MztcdFx0XHRcdCAgIElFRUU4MDIxMV9CU1NfVFlQRV9BTlksXG4mIzQzO1x0XHRcdFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxuJiM0MztcdFx0XHRcdCAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBcdTAwMjZleHRhY2spO1xuJiM0MztcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGZvdW5kKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfU1RSRVEodGVzdCwgZXh0YWNrLl9tc2csXG4mIzQzO1x0XHRcdCAgIFwmIzM0O0JTUyBlbnRyeSBpbiBzY2FuIHJlc3VsdHMgaXMgZXhwaXJlZFwmIzM0Oyk7XG4mIzQzO1x0YnNzLVx1MDAzZXVzZV9mb3IgPSBOTDgwMjExX0JTU19VU0VfRk9SX0FMTDtcbiYjNDM7XG4mIzQzO1x0LyogRXhwaXJlZCBidXQgaGVsZCBlbnRyaWVzIGFyZSBzdGlsbCB1c2FibGUsIG5vIG1lc3NhZ2UgaXMgc2V0ICovXG4mIzQzO1x0ZXh0YWNrLl9tc2cgPSBOVUxMO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2aWJzcy1cdTAwM2Vob2xkLCAxKTtcbiYjNDM7XHRmb3VuZCA9IF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgTlVMTCwgYnNzaWQsIE5VTEwsIDAsXG4mIzQzO1x0XHRcdFx0ICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSxcbiYjNDM7XHRcdFx0XHQgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksXG4mIzQzO1x0XHRcdFx0ICAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwsIFx1MDAyNmV4dGFjayk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX1BUUl9FUSh0ZXN0LCBmb3VuZCwgYnNzKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCBleHRhY2suX21zZyk7XG4mIzQzO1x0Y2ZnODAyMTFfcHV0X2Jzcyh3aXBoeSwgZm91bmQpO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2aWJzcy1cdTAwM2Vob2xkLCAwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBXaXRoIG9uZSBtYXRjaGluZyBlbnRyeSBleHBpcmVkIGFuZCBhbm90aGVyIGN1cnJlbnQgYnV0XG4mIzQzO1x0ICogdW51c2FibGUsIGJvdGggcmVhc29ucyBhcmUgcmVwb3J0ZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0YnNzMiA9IGNmZzgwMjExX2luZm9ybV9ic3NfZGF0YSh3aXBoeSwgXHUwMDI2aW5mb3JtX2JzcyxcbiYjNDM7XHRcdFx0XHRcdENGRzgwMjExX0JTU19GVFlQRV9QUkVTUCwgb3RoZXJfYnNzaWQsXG4mIzQzO1x0XHRcdFx0XHQwLCAweDEyMzQsIDEwMCwgaWVzLCBzaXplb2YoaWVzKSxcbiYjNDM7XHRcdFx0XHRcdEdGUF9LRVJORUwpO1xuJiM0MztcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBic3MyKTtcbiYjNDM7XHRic3MyLVx1MDAzZXVzZV9mb3IgPSAwO1xuJiM0MztcdGV4dGFjay5fbXNnID0gTlVMTDtcbiYjNDM7XHRmb3VuZCA9IF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgTlVMTCwgTlVMTCwgXCYjMzQ7VEVTVFwmIzM0OywgNCxcbiYjNDM7XHRcdFx0XHQgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxuJiM0MztcdFx0XHRcdCAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcbiYjNDM7XHRcdFx0XHQgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgXHUwMDI2ZXh0YWNrKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCBmb3VuZCk7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLFxuJiM0MztcdFx0XHQgICBcJiMzNDtCU1MgZW50cmllcyBhcmUgZXhwaXJlZCBvciBjYW5ub3QgYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RlZCBvcGVyYXRpb25cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRjZmc4MDIxMV9wdXRfYnNzKHdpcGh5LCBic3MyKTtcbiYjNDM7XHRjZmc4MDIxMV9wdXRfYnNzKHdpcGh5LCBic3MpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgaW5mb3JtX2Jzc19tbF9zdGFfY2FzZSB7XG4gXHRjb25zdCBjaGFyICpkZXNjO1xuIFx0aW50IG1sZF9pZDtcbkBAIC02MTcsNyAmIzQzOzczNSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW5mb3JtX2Jzc19tbF9zdGEoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0bGlua19ic3MgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIHN0YV9wcm9mLmJzc2lkLCBOVUxMLCAwLFxuIFx0XHRcdFx0ICAgICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSxcbiBcdFx0XHRcdCAgICAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcbi1cdFx0XHRcdCAgICAgIDApO1xuJiM0MztcdFx0XHRcdCAgICAgIDAsIE5VTEwpO1xuIFx0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGxpbmtfYnNzKTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBsaW5rX2Jzcy1cdTAwM2VzaWduYWwsIDApO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGxpbmtfYnNzLVx1MDAzZWJlYWNvbl9pbnRlcnZhbCxcbkBAIC04NTUsNiAmIzQzOzk3Myw3IEBAIGt1bml0X3Rlc3Rfc3VpdGUoZ2VuX25ld19pZSk7XG4gXG4gc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGluZm9ybV9ic3NfdGVzdF9jYXNlc1tdID0ge1xuIFx0S1VOSVRfQ0FTRSh0ZXN0X2luZm9ybV9ic3Nfc3NpZF9vbmx5KSxcbiYjNDM7XHRLVU5JVF9DQVNFKHRlc3RfZ2V0X2Jzc19taXNzX3JlYXNvbiksXG4gXHRLVU5JVF9DQVNFX1BBUkFNKHRlc3RfaW5mb3JtX2Jzc19tbF9zdGEsIGluZm9ybV9ic3NfbWxfc3RhX2dlbl9wYXJhbXMpLFxuIFx0e31cbiB9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAxOjUwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgbmV0bGluayBleHRlbmRlZCBBQ0sgKGV4dGFjaykgZXJyb3IgbWVzc2FnZXMgZm9yIGJldHRlciBlcnJvciByZXBvcnRpbmcgdG8gdXNlcnNwYWNlIHdoZW4gYSBCU1MgaXMgbm90IGZvdW5kIG9yIGNhbm5vdCBiZSB1c2VkLiBUaGUgY29yZSBsb2dpYyBvZiBCU1Mgc2VsZWN0aW9uIHJlbWFpbnMgZnVuY3Rpb25hbGx5IGlkZW50aWNhbCwgYW5kIHRoZSByZXN0IG9mIHRoZSBwYXRjaCBjb25zaXN0cyBvZiBhIEtVbml0IHRlc3QuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBleGVjdXRpb24gZmxvdyB0aGF0IHJlcXVpcmUgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI5YmFmNWMwODczMjAzY2Q5YTQ2ZmQwNDZhZTE2OGFhZDE4YTJkZWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAyMyAwMTo1MDoxNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NmZzgwMjExLmggYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCmluZGV4IGI4ZTlmYmI4OWU2OTE2Li4xNWMwOGIyNDUwMmZkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCkBAIC04NDI0LDYgJiM0Mzs4NDI0LDggQEAgY2ZnODAyMTFfaW5mb3JtX2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogICogQGJzc190eXBlOiB0eXBlIG9mIEJTUywgc2VlICZhbXA7ZW51bSBpZWVlODAyMTFfYnNzX3R5cGUKICAqIEBwcml2YWN5OiBwcml2YWN5IGZpbHRlciwgc2VlICZhbXA7ZW51bSBpZWVlODAyMTFfcHJpdmFjeQogICogQHVzZV9mb3I6IGluZGljYXRlcyB3aGljaCB1c2UgaXMgaW50ZW5kZWQKJiM0MzsgKiBAZXh0YWNrOiAob3B0aW9uYWwpIGV4dGFjayB0aGF0IGlzIGZpbGxlZCB3aXRoIHRoZSByZWFzb24gd2hlbiBubwomIzQzOyAqCXVzYWJsZSBlbnRyeSB3YXMgZm91bmQ7IG1heSBiZSAlTlVMTAogICoKICAqIFJldHVybjogUmVmZXJlbmNlLWNvdW50ZWQgQlNTIG9uIHN1Y2Nlc3MuICVOVUxMIG9uIGVycm9yLgogICovCkBAIC04NDMzLDcgJiM0Mzs4NDM1LDggQEAgc3RydWN0IGNmZzgwMjExX2JzcyAqX19jZmc4MDIxMV9nZXRfYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksCiAJCQkJCWNvbnN0IHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4sCiAJCQkJCWVudW0gaWVlZTgwMjExX2Jzc190eXBlIGJzc190eXBlLAogCQkJCQllbnVtIGllZWU4MDIxMV9wcml2YWN5IHByaXZhY3ksCi0JCQkJCXUzMiB1c2VfZm9yKTsKJiM0MzsJCQkJCXUzMiB1c2VfZm9yLAomIzQzOwkJCQkJc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKIAogLyoqCiAgKiBjZmc4MDIxMV9nZXRfYnNzIC0gZ2V0IGEgQlNTIHJlZmVyZW5jZQpAQCAtODQ1Nyw3ICYjNDM7ODQ2MCw3IEBAIGNmZzgwMjExX2dldF9ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAogewogCXJldHVybiBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIGNoYW5uZWwsIGJzc2lkLCBzc2lkLCBzc2lkX2xlbiwKIAkJCQkgIGJzc190eXBlLCBwcml2YWN5LAotCQkJCSAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwpOwomIzQzOwkJCQkgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBOVUxMKTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgY2ZnODAyMTFfYnNzICoKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCmluZGV4IGQ5NjJiNTk0NDUzMzlhLi5hYzBjMGRhNDUyNDE5MSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCkBAIC0xMjg5MCw5ICYjNDM7MTI4OTAsMTEgQEAgc3RhdGljIGludCBubDgwMjExX2F1dGhlbnRpY2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcmVxLmJzcyA9IGNmZzgwMjExX2dldF9ic3MoJmFtcDtyZGV2LSZndDt3aXBoeSwgY2hhbiwgYnNzaWQsIHNzaWQsIHNzaWRfbGVuLAotCQkJCSAgIElFRUU4MDIxMV9CU1NfVFlQRV9FU1MsCi0JCQkJICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZKTsKJiM0MzsJcmVxLmJzcyA9IF9fY2ZnODAyMTFfZ2V0X2JzcygmYW1wO3JkZXYtJmd0O3dpcGh5LCBjaGFuLCBic3NpZCwgc3NpZCwgc3NpZF9sZW4sCiYjNDM7CQkJCSAgICAgSUVFRTgwMjExX0JTU19UWVBFX0VTUywKJiM0MzsJCQkJICAgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksCiYjNDM7CQkJCSAgICAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwsCiYjNDM7CQkJCSAgICAgaW5mby0mZ3Q7ZXh0YWNrKTsKIAlpZiAoIXJlcS5ic3MpCiAJCXJldHVybiAtRU5PRU5UOwogCkBAIC0xMzAzNyw2ICYjNDM7MTMwMzksNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfY3J5cHRvX3NldHRpbmdzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIH0KIAogc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9ic3MgKm5sODAyMTFfYXNzb2NfYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKJiM0MzsJCQkJCSAgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sCiAJCQkJCSAgICAgIGNvbnN0IHU4ICpzc2lkLCBpbnQgc3NpZF9sZW4sCiAJCQkJCSAgICAgIHN0cnVjdCBubGF0dHIgKiphdHRycywKIAkJCQkJICAgICAgaW50IGFzc29jX2xpbmtfaWQsIGludCBsaW5rX2lkKQpAQCAtMTMwNDYsOCAmIzQzOzEzMDQ5LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpubDgwMjExX2Fzc29jX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UKIAljb25zdCB1OCAqYnNzaWQ7CiAJdTMyIGZyZXEsIHVzZV9mb3IgPSAwOwogCi0JaWYgKCFhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSB8fCAhYXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKQomIzQzOwlpZiAoIWF0dHJzW05MODAyMTFfQVRUUl9NQUNdIHx8ICFhdHRyc1tOTDgwMjExX0FUVFJfV0lQSFlfRlJFUV0pIHsKJiM0MzsJCUdFTkxfU0VUX0VSUl9NU0coaW5mbywgJiMzNDtCU1NJRCBvciBmcmVxdWVuY3kgbWlzc2luZyYjMzQ7KTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiYjNDM7CX0KIAogCWJzc2lkID0gbmxhX2RhdGEoYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pOwogCkBAIC0xMzA1Niw4ICYjNDM7MTMwNjEsMTAgQEAgc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9ic3MgKm5sODAyMTFfYXNzb2NfYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZQogCQlmcmVxICYjNDM7PSBubGFfZ2V0X3UzMihhdHRyc1tOTDgwMjExX0FUVFJfV0lQSFlfRlJFUV9PRkZTRVRdKTsKIAogCWNoYW4gPSBubDgwMjExX2dldF92YWxpZF9jaGFuKCZhbXA7cmRldi0mZ3Q7d2lwaHksIGZyZXEpOwotCWlmICghY2hhbikKJiM0MzsJaWYgKCFjaGFuKSB7CiYjNDM7CQlHRU5MX1NFVF9FUlJfTVNHKGluZm8sICYjMzQ7aW52YWxpZCBvciBkaXNhYmxlZCBjaGFubmVsJiMzNDspOwogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKJiM0MzsJfQogCiAJaWYgKGFzc29jX2xpbmtfaWQgJmd0Oz0gMCkKIAkJdXNlX2ZvciA9IE5MODAyMTFfQlNTX1VTRV9GT1JfTUxEX0xJTks7CkBAIC0xMzA2OCw3ICYjNDM7MTMwNzUsNyBAQCBzdGF0aWMgc3RydWN0IGNmZzgwMjExX2JzcyAqbmw4MDIxMV9hc3NvY19ic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlCiAJCQkJIHNzaWQsIHNzaWRfbGVuLAogCQkJCSBJRUVFODAyMTFfQlNTX1RZUEVfRVNTLAogCQkJCSBJRUVFODAyMTFfUFJJVkFDWV9BTlksCi0JCQkJIHVzZV9mb3IpOwomIzQzOwkJCQkgdXNlX2ZvciwgaW5mby0mZ3Q7ZXh0YWNrKTsKIAlpZiAoIWJzcykKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CiAKQEAgLTEzMTA3LDEzICYjNDM7MTMxMTQsMTMgQEAgc3RhdGljIGludCBubDgwMjExX3Byb2Nlc3NfbGlua3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJbGlua3NbbGlua19pZF0uYnNzID0KLQkJCW5sODAyMTFfYXNzb2NfYnNzKHJkZXYsIHNzaWQsIHNzaWRfbGVuLCBhdHRycywKJiM0MzsJCQlubDgwMjExX2Fzc29jX2JzcyhyZGV2LCBpbmZvLCBzc2lkLCBzc2lkX2xlbiwgYXR0cnMsCiAJCQkJCSAgYXNzb2NfbGlua19pZCwgbGlua19pZCk7CiAJCWlmIChJU19FUlIobGlua3NbbGlua19pZF0uYnNzKSkgewogCQkJZXJyID0gUFRSX0VSUihsaW5rc1tsaW5rX2lkXS5ic3MpOwogCQkJbGlua3NbbGlua19pZF0uYnNzID0gTlVMTDsKLQkJCU5MX1NFVF9FUlJfTVNHX0FUVFIoaW5mby0mZ3Q7ZXh0YWNrLCBsaW5rLAotCQkJCQkgICAgJiMzNDtFcnJvciBmZXRjaGluZyBCU1MgZm9yIGxpbmsmIzM0Oyk7CiYjNDM7CQkJLyogdGhlIEJTUyBsb29rdXAgc2V0IHRoZSBzcGVjaWZpYyBtZXNzYWdlIGFscmVhZHkgKi8KJiM0MzsJCQlOTF9TRVRfQkFEX0FUVFIoaW5mby0mZ3Q7ZXh0YWNrLCBsaW5rKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIApAQCAtMTMzMjksNyAmIzQzOzEzMzM2LDcgQEAgc3RhdGljIGludCBubDgwMjExX2Fzc29jaWF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQlpZiAocmVxLmxpbmtfaWQgJmd0Oz0gMCkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCXJlcS5ic3MgPSBubDgwMjExX2Fzc29jX2JzcyhyZGV2LCBzc2lkLCBzc2lkX2xlbiwgaW5mby0mZ3Q7YXR0cnMsCiYjNDM7CQlyZXEuYnNzID0gbmw4MDIxMV9hc3NvY19ic3MocmRldiwgaW5mbywgc3NpZCwgc3NpZF9sZW4sIGluZm8tJmd0O2F0dHJzLAogCQkJCQkgICAgLTEsIC0xKTsKIAkJaWYgKElTX0VSUihyZXEuYnNzKSkKIAkJCXJldHVybiBQVFJfRVJSKHJlcS5ic3MpOwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3NjYW4uYyBiL25ldC93aXJlbGVzcy9zY2FuLmMKaW5kZXggZTYyYjdkZDJiN2MyZDguLjkwYTRmMjg1NjU0Zjk0IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9zY2FuLmMKQEAgLTE2MDksMTAgJiM0MzsxNjA5LDEyIEBAIHN0cnVjdCBjZmc4MDIxMV9ic3MgKl9fY2ZnODAyMTFfZ2V0X2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogCQkJCQljb25zdCB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuLAogCQkJCQllbnVtIGllZWU4MDIxMV9ic3NfdHlwZSBic3NfdHlwZSwKIAkJCQkJZW51bSBpZWVlODAyMTFfcHJpdmFjeSBwcml2YWN5LAotCQkJCQl1MzIgdXNlX2ZvcikKJiM0MzsJCQkJCXUzMiB1c2VfZm9yLAomIzQzOwkJCQkJc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2lwaHkpOwogCXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmJzcywgKnJlcyA9IE5VTEw7CiYjNDM7CWJvb2wgZXhwaXJlZCA9IGZhbHNlLCB1bnVzYWJsZSA9IGZhbHNlOwogCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllczsKIAlpbnQgYnNzX3ByaXZhY3k7CiAKQEAgLTE2MzQsMjIgJiM0MzsxNjM2LDQ4IEBAIHN0cnVjdCBjZmc4MDIxMV9ic3MgKl9fY2ZnODAyMTFfZ2V0X2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogCQkJY29udGludWU7CiAJCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihic3MtJmd0O3B1Yi5ic3NpZCkpCiAJCQljb250aW51ZTsKLQkJaWYgKChic3MtJmd0O3B1Yi51c2VfZm9yICZhbXA7IHVzZV9mb3IpICE9IHVzZV9mb3IpCiYjNDM7CQlpZiAoIWlzX2JzcygmYW1wO2Jzcy0mZ3Q7cHViLCBic3NpZCwgc3NpZCwgc3NpZF9sZW4pKQogCQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIGlkZW50aXR5IGNoZWNrcyBhYm92ZSBtdXN0IGFsbCBjb21lIGZpcnN0IHNvIHRoYXQKJiM0MzsJCSAqIHRoZSBleHBpcmVkL3VudXNhYmxlIGNsYXNzaWZpY2F0aW9uIGJlbG93IG9ubHkgZXZlcgomIzQzOwkJICogYXBwbGllcyB0byBlbnRyaWVzIHRoYXQgYWN0dWFsbHkgbWF0Y2ggdGhlIHJlcXVlc3QuCiYjNDM7CQkgKi8KJiM0MzsKIAkJLyogRG9uJiMzOTt0IGdldCBleHBpcmVkIEJTUyBzdHJ1Y3RzICovCiAJCWlmICh0aW1lX2FmdGVyKG5vdywgYnNzLSZndDt0cyAmIzQzOyBJRUVFODAyMTFfU0NBTl9SRVNVTFRfRVhQSVJFKSAmYW1wOyZhbXA7Ci0JCSAgICAhYXRvbWljX3JlYWQoJmFtcDtic3MtJmd0O2hvbGQpKQomIzQzOwkJICAgICFhdG9taWNfcmVhZCgmYW1wO2Jzcy0mZ3Q7aG9sZCkpIHsKJiM0MzsJCQlleHBpcmVkID0gdHJ1ZTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICgoYnNzLSZndDtwdWIudXNlX2ZvciAmYW1wOyB1c2VfZm9yKSAhPSB1c2VfZm9yKSB7CiYjNDM7CQkJdW51c2FibGUgPSB0cnVlOwogCQkJY29udGludWU7Ci0JCWlmIChpc19ic3MoJmFtcDtic3MtJmd0O3B1YiwgYnNzaWQsIHNzaWQsIHNzaWRfbGVuKSkgewotCQkJcmVzID0gYnNzOwotCQkJYnNzX3JlZl9nZXQocmRldiwgcmVzKTsKLQkJCWJyZWFrOwogCQl9CiYjNDM7CiYjNDM7CQlyZXMgPSBic3M7CiYjNDM7CQlic3NfcmVmX2dldChyZGV2LCByZXMpOwomIzQzOwkJYnJlYWs7CiAJfQogCiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtyZGV2LSZndDtic3NfbG9jayk7Ci0JaWYgKCFyZXMpCiYjNDM7CWlmICghcmVzKSB7CiYjNDM7CQlpZiAoZXhwaXJlZCAmYW1wOyZhbXA7IHVudXNhYmxlKQomIzQzOwkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKJiM0MzsJCQkJICAgICAgICYjMzQ7QlNTIGVudHJpZXMgYXJlIGV4cGlyZWQgb3IgY2Fubm90IGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uJiMzNDspOwomIzQzOwkJZWxzZSBpZiAodW51c2FibGUpCiYjNDM7CQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLAomIzQzOwkJCQkgICAgICAgJiMzNDtCU1MgY2Fubm90IGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uJiMzNDspOwomIzQzOwkJZWxzZSBpZiAoZXhwaXJlZCkKJiM0MzsJCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJCSAgICAgICAmIzM0O0JTUyBlbnRyeSBpbiBzY2FuIHJlc3VsdHMgaXMgZXhwaXJlZCYjMzQ7KTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJCSAgICAgICAmIzM0O0JTUyBub3QgZm91bmQgaW4gc2NhbiByZXN1bHRzJiMzNDspOwogCQlyZXR1cm4gTlVMTDsKJiM0MzsJfQogCXRyYWNlX2NmZzgwMjExX3JldHVybl9ic3MoJmFtcDtyZXMtJmd0O3B1Yik7CiAJcmV0dXJuICZhbXA7cmVzLSZndDtwdWI7CiB9CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvdGVzdHMvc2Nhbi5jIGIvbmV0L3dpcmVsZXNzL3Rlc3RzL3NjYW4uYwppbmRleCBiMWE5YzE0NjZkNmNiZC4uOGMyMDI3OGI1ZDNhNDQgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy90ZXN0cy9zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3Rlc3RzL3NjYW4uYwpAQCAtNDAyLDYgJiM0Mzs0MDIsMTI0IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW5mb3JtX2Jzc19zc2lkX29ubHkoc3RydWN0IGt1bml0ICp0ZXN0KQogCWNmZzgwMjExX3B1dF9ic3Mod2lwaHksIGJzcyk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2dldF9ic3NfbWlzc19yZWFzb24oc3RydWN0IGt1bml0ICp0ZXN0KQomIzQzO3sKJiM0MzsJc3RydWN0IGluZm9ybV9ic3MgY3R4ID0gewomIzQzOwkJLnRlc3QgPSB0ZXN0LAomIzQzOwl9OwomIzQzOwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gVF9XSVBIWSh0ZXN0LCBjdHgpOwomIzQzOwlzdHJ1Y3QgY2ZnODAyMTFfaW5mb3JtX2JzcyBpbmZvcm1fYnNzID0gewomIzQzOwkJLnNpZ25hbCA9IDUwLAomIzQzOwkJLmRydl9kYXRhID0gJmFtcDtjdHgsCiYjNDM7CX07CiYjNDM7CWNvbnN0IHU4IGJzc2lkW0VUSF9BTEVOXSA9IHsgMHgxMCwgMHgyMiwgMHgzMywgMHg0NCwgMHg1NSwgMHg2NiB9OwomIzQzOwljb25zdCB1OCBvdGhlcl9ic3NpZFtFVEhfQUxFTl0gPSB7IDB4NjYsIDB4NTUsIDB4NDQsIDB4MzMsIDB4MjIsIDB4MTEgfTsKJiM0MzsJc3RhdGljIGNvbnN0IHU4IGllc1tdID0gewomIzQzOwkJWzBdID0gV0xBTl9FSURfU1NJRCwKJiM0MzsJCVsxXSA9IDQsCiYjNDM7CQlbMl0gPSAmIzM5O1QmIzM5OywgJiMzOTtFJiMzOTssICYjMzk7UyYjMzk7LCAmIzM5O1QmIzM5OwomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICppYnNzOwomIzQzOwlzdHJ1Y3QgbmV0bGlua19leHRfYWNrIGV4dGFjayA9IHt9OwomIzQzOwlzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MsICpic3MyLCAqZm91bmQ7CiYjNDM7CiYjNDM7CWluZm9ybV9ic3MuY2hhbiA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbF9raHood2lwaHksIE1IWl9UT19LSFooMjQxMikpOwomIzQzOwlLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgaW5mb3JtX2Jzcy5jaGFuKTsKJiM0MzsKJiM0MzsJYnNzID0gY2ZnODAyMTFfaW5mb3JtX2Jzc19kYXRhKHdpcGh5LCAmYW1wO2luZm9ybV9ic3MsCiYjNDM7CQkJCSAgICAgICBDRkc4MDIxMV9CU1NfRlRZUEVfUFJFU1AsIGJzc2lkLCAwLAomIzQzOwkJCQkgICAgICAgMHgxMjM0LCAxMDAsIGllcywgc2l6ZW9mKGllcyksCiYjNDM7CQkJCSAgICAgICBHRlBfS0VSTkVMKTsKJiM0MzsJS1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGJzcyk7CiYjNDM7CWlic3MgPSBjb250YWluZXJfb2YoYnNzLCBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzLCBwdWIpOwomIzQzOwomIzQzOwkvKiBGcmVzaCB1c2FibGUgZW50cnk6IGZvdW5kLCBubyBtZXNzYWdlIGlzIHNldCAqLwomIzQzOwlmb3VuZCA9IF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgTlVMTCwgYnNzaWQsIE5VTEwsIDAsCiYjNDM7CQkJCSAgIElFRUU4MDIxMV9CU1NfVFlQRV9BTlksCiYjNDM7CQkJCSAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSwKJiM0MzsJCQkJICAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwsICZhbXA7ZXh0YWNrKTsKJiM0MzsJS1VOSVRfQVNTRVJUX1BUUl9FUSh0ZXN0LCBmb3VuZCwgYnNzKTsKJiM0MzsJS1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZXh0YWNrLl9tc2cpOwomIzQzOwljZmc4MDIxMV9wdXRfYnNzKHdpcGh5LCBmb3VuZCk7CiYjNDM7CiYjNDM7CS8qIE5vIGVudHJ5IGF0IGFsbCBmb3IgdGhpcyBCU1NJRCAqLwomIzQzOwlmb3VuZCA9IF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgTlVMTCwgb3RoZXJfYnNzaWQsIE5VTEwsIDAsCiYjNDM7CQkJCSAgIElFRUU4MDIxMV9CU1NfVFlQRV9BTlksCiYjNDM7CQkJCSAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSwKJiM0MzsJCQkJICAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwsICZhbXA7ZXh0YWNrKTsKJiM0MzsJS1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZm91bmQpOwomIzQzOwlLVU5JVF9FWFBFQ1RfU1RSRVEodGVzdCwgZXh0YWNrLl9tc2csICYjMzQ7QlNTIG5vdCBmb3VuZCBpbiBzY2FuIHJlc3VsdHMmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIEZyZXNoIGVudHJ5IHRoYXQgaXMgbm90IHVzYWJsZSBmb3IgdGhlIHJlcXVlc3RlZCB1c2UgKi8KJiM0MzsJZXh0YWNrLl9tc2cgPSBOVUxMOwomIzQzOwlic3MtJmd0O3VzZV9mb3IgPSAwOwomIzQzOwlmb3VuZCA9IF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgTlVMTCwgYnNzaWQsIE5VTEwsIDAsCiYjNDM7CQkJCSAgIElFRUU4MDIxMV9CU1NfVFlQRV9BTlksCiYjNDM7CQkJCSAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSwKJiM0MzsJCQkJICAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwsICZhbXA7ZXh0YWNrKTsKJiM0MzsJS1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZm91bmQpOwomIzQzOwlLVU5JVF9FWFBFQ1RfU1RSRVEodGVzdCwgZXh0YWNrLl9tc2csCiYjNDM7CQkJICAgJiMzNDtCU1MgY2Fubm90IGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uJiMzNDspOwomIzQzOwlic3MtJmd0O3VzZV9mb3IgPSBOTDgwMjExX0JTU19VU0VfRk9SX0FMTDsKJiM0MzsKJiM0MzsJLyogRXhwaXJlZCBlbnRyeSwgJmd0OyBJRUVFODAyMTFfU0NBTl9SRVNVTFRfRVhQSVJFICgzMHMpIG9sZCAqLwomIzQzOwlleHRhY2suX21zZyA9IE5VTEw7CiYjNDM7CWlic3MtJmd0O3RzID0gamlmZmllcyAtIDYwICogSFo7CiYjNDM7CWZvdW5kID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBic3NpZCwgTlVMTCwgMCwKJiM0MzsJCQkJICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSwKJiM0MzsJCQkJICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLAomIzQzOwkJCQkgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgJmFtcDtleHRhY2spOwomIzQzOwlLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCBmb3VuZCk7CiYjNDM7CUtVTklUX0VYUEVDVF9TVFJFUSh0ZXN0LCBleHRhY2suX21zZywKJiM0MzsJCQkgICAmIzM0O0JTUyBlbnRyeSBpbiBzY2FuIHJlc3VsdHMgaXMgZXhwaXJlZCYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogQW4gZW50cnkgYm90aCBleHBpcmVkIGFuZCB1bnVzYWJsZSByZXBvcnRzIGV4cGlyZWQgKi8KJiM0MzsJZXh0YWNrLl9tc2cgPSBOVUxMOwomIzQzOwlic3MtJmd0O3VzZV9mb3IgPSAwOwomIzQzOwlmb3VuZCA9IF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgTlVMTCwgYnNzaWQsIE5VTEwsIDAsCiYjNDM7CQkJCSAgIElFRUU4MDIxMV9CU1NfVFlQRV9BTlksCiYjNDM7CQkJCSAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSwKJiM0MzsJCQkJICAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwsICZhbXA7ZXh0YWNrKTsKJiM0MzsJS1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZm91bmQpOwomIzQzOwlLVU5JVF9FWFBFQ1RfU1RSRVEodGVzdCwgZXh0YWNrLl9tc2csCiYjNDM7CQkJICAgJiMzNDtCU1MgZW50cnkgaW4gc2NhbiByZXN1bHRzIGlzIGV4cGlyZWQmIzM0Oyk7CiYjNDM7CWJzcy0mZ3Q7dXNlX2ZvciA9IE5MODAyMTFfQlNTX1VTRV9GT1JfQUxMOwomIzQzOwomIzQzOwkvKiBFeHBpcmVkIGJ1dCBoZWxkIGVudHJpZXMgYXJlIHN0aWxsIHVzYWJsZSwgbm8gbWVzc2FnZSBpcyBzZXQgKi8KJiM0MzsJZXh0YWNrLl9tc2cgPSBOVUxMOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7aWJzcy0mZ3Q7aG9sZCwgMSk7CiYjNDM7CWZvdW5kID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBic3NpZCwgTlVMTCwgMCwKJiM0MzsJCQkJICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSwKJiM0MzsJCQkJICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLAomIzQzOwkJCQkgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgJmFtcDtleHRhY2spOwomIzQzOwlLVU5JVF9BU1NFUlRfUFRSX0VRKHRlc3QsIGZvdW5kLCBic3MpOwomIzQzOwlLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCBleHRhY2suX21zZyk7CiYjNDM7CWNmZzgwMjExX3B1dF9ic3Mod2lwaHksIGZvdW5kKTsKJiM0MzsJYXRvbWljX3NldCgmYW1wO2lic3MtJmd0O2hvbGQsIDApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBXaXRoIG9uZSBtYXRjaGluZyBlbnRyeSBleHBpcmVkIGFuZCBhbm90aGVyIGN1cnJlbnQgYnV0CiYjNDM7CSAqIHVudXNhYmxlLCBib3RoIHJlYXNvbnMgYXJlIHJlcG9ydGVkLgomIzQzOwkgKi8KJiM0MzsJYnNzMiA9IGNmZzgwMjExX2luZm9ybV9ic3NfZGF0YSh3aXBoeSwgJmFtcDtpbmZvcm1fYnNzLAomIzQzOwkJCQkJQ0ZHODAyMTFfQlNTX0ZUWVBFX1BSRVNQLCBvdGhlcl9ic3NpZCwKJiM0MzsJCQkJCTAsIDB4MTIzNCwgMTAwLCBpZXMsIHNpemVvZihpZXMpLAomIzQzOwkJCQkJR0ZQX0tFUk5FTCk7CiYjNDM7CUtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBic3MyKTsKJiM0MzsJYnNzMi0mZ3Q7dXNlX2ZvciA9IDA7CiYjNDM7CWV4dGFjay5fbXNnID0gTlVMTDsKJiM0MzsJZm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIE5VTEwsICYjMzQ7VEVTVCYjMzQ7LCA0LAomIzQzOwkJCQkgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLAomIzQzOwkJCQkgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksCiYjNDM7CQkJCSAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCAmYW1wO2V4dGFjayk7CiYjNDM7CUtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGZvdW5kKTsKJiM0MzsJS1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLAomIzQzOwkJCSAgICYjMzQ7QlNTIGVudHJpZXMgYXJlIGV4cGlyZWQgb3IgY2Fubm90IGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uJiMzNDspOwomIzQzOwomIzQzOwljZmc4MDIxMV9wdXRfYnNzKHdpcGh5LCBic3MyKTsKJiM0MzsJY2ZnODAyMTFfcHV0X2Jzcyh3aXBoeSwgYnNzKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IGluZm9ybV9ic3NfbWxfc3RhX2Nhc2UgewogCWNvbnN0IGNoYXIgKmRlc2M7CiAJaW50IG1sZF9pZDsKQEAgLTYxNyw3ICYjNDM7NzM1LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9pbmZvcm1fYnNzX21sX3N0YShzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJbGlua19ic3MgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIHN0YV9wcm9mLmJzc2lkLCBOVUxMLCAwLAogCQkJCSAgICAgIElFRUU4MDIxMV9CU1NfVFlQRV9BTlksCiAJCQkJICAgICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLAotCQkJCSAgICAgIDApOwomIzQzOwkJCQkgICAgICAwLCBOVUxMKTsKIAlLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgbGlua19ic3MpOwogCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBsaW5rX2Jzcy0mZ3Q7c2lnbmFsLCAwKTsKIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgbGlua19ic3MtJmd0O2JlYWNvbl9pbnRlcnZhbCwKQEAgLTg1NSw2ICYjNDM7OTczLDcgQEAga3VuaXRfdGVzdF9zdWl0ZShnZW5fbmV3X2llKTsKIAogc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGluZm9ybV9ic3NfdGVzdF9jYXNlc1tdID0gewogCUtVTklUX0NBU0UodGVzdF9pbmZvcm1fYnNzX3NzaWRfb25seSksCiYjNDM7CUtVTklUX0NBU0UodGVzdF9nZXRfYnNzX21pc3NfcmVhc29uKSwKIAlLVU5JVF9DQVNFX1BBUkFNKHRlc3RfaW5mb3JtX2Jzc19tbF9zdGEsIGluZm9ybV9ic3NfbWxfc3RhX2dlbl9wYXJhbXMpLAogCXt9CiB9Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDY1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTc5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEFuYWx5c2lzIG9mIFdpcmVsZXNzIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBlc3NlbnRpYWxseSBhYm91dCBpbXByb3ZpbmcgZXJyb3IgcmVwb3J0aW5nIGluIHRoZSB3aXJlbGVzcyBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB3aGVuIGEgQlNTIChCYXNpYyBTZXJ2aWNlIFNldCkgaXNuJiMzOTt0IGZvdW5kIG9yIGNhbiYjMzk7dCBiZSB1c2VkLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIGNoYW5nZXMgcmV2b2x2ZSBhcm91bmQgbGV2ZXJhZ2luZyB0aGUgYGV4dGFja2AgcGFyYW1ldGVyIHRvIHByb3ZpZGUgbW9yZSBkZXRhaWxlZCBlcnJvciBtZXNzYWdlcyBiYWNrIHRvIHVzZXJzcGFjZSB2aWEgTmV0bGluay4gV2UmIzM5O3JlIG1vZGlmeWluZyBgX19jZmc4MDIxMV9nZXRfYnNzYCwgYG5sODAyMTFfYXNzb2NfYnNzYCwgYW5kIGFkZGluZyBhIGt1bml0IHRlc3QgZm9yIHRoaXMgbmV3IGVycm9yIHBhdGguCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgKmZ1bmN0aW9uYWwqIGNoYW5nZXMgdGhhdCBjb3VsZCBpbXBhY3QgdGhlIGtlcm5lbCYjMzk7cyBleGVjdXRpb24gZmxvdyBhbmQgdGh1cyByZXF1aXJlIGZ1enppbmcuIFRoZSBidWxrIG9mIGl0IGlzIGZvY3VzZWQgb24gdGhlc2UgYGV4dGFja2AgbWVzc2FnZXMsIHdoaWNoIGFyZSBmb3IgaW1wcm92ZWQgZXJyb3IgcmVwb3J0aW5nLCBhbmQgSSYjMzk7bSB0cmVhdGluZyB0aGlzIGxpa2UgaW5mb3JtYXRpdmUgbG9nZ2luZyBmb3IgZnV6emluZyBwdXJwb3Nlcy4KCkkgc2VlIHRoZXJlJiMzOTtzIGEgc2xpZ2h0IHJlb3JkZXJpbmcgb2YgY2hlY2tzIGluIGBfX2NmZzgwMjExX2dldF9ic3NgOiB0aGUgb3JkZXIgb2YgdGhlIGNvbmRpdGlvbnMgaW4gdGhlIGxvb3AgaGFzIGJlZW4gY2hhbmdlZC4gIEJlZm9yZSwgd2UgZmlsdGVyZWQgYnkgYHVzZV9mb3JgLCB0aGVuIGV4cGlyYXRpb24sIGFuZCBmaW5hbGx5IGNoZWNrZWQgZm9yIHRoZSBtYXRjaGluZyBCU1NJRC9TU0lELiBOb3csIHdlIGNoZWNrIGZvciBCU1NJRC9TU0lEIGZpcnN0LCB0aGVuIGV4cGlyYXRpb24gYW5kIGB1c2VfZm9yYC4gVGhpcyBtYWRlIG1lIHBhdXNlLiBEb2VzIHRoaXMgKmFjdHVhbGx5KiBjaGFuZ2Ugd2hpY2ggQlNTIGlzIHNlbGVjdGVkIGlmIG11bHRpcGxlIGV4aXN0PyBBZnRlciBhIGNsb3NlciBsb29rLCB0aGUgbG9naWMgcmVtYWlucyB0aGUgc2FtZS4gIElmIGEgQlNTIGRvZXNuJiMzOTt0IG1lZXQgdGhlIGluaXRpYWwgY3JpdGVyaWEsIHdlIHNraXAgaXQgYW5kIGNvbnRpbnVlIHRvIHRoZSBuZXh0IG9uZS4gVGhlIGtleSBpcyB0aGF0IGV2ZW4gdGhvdWdoIHRoZSBvcmRlciBvZiBjaGVja3MgaGFzIGNoYW5nZWQsIHRoZSBvdXRjb21lIC0gdGhlIEJTUyBzZWxlY3RlZCAtIHJlbWFpbnMgaWRlbnRpY2FsLiBQcmV2aW91c2x5LCB0aGUgY29uZGl0aW9uIHdhcyBgKGJzcy0mZ3Q7cHViLnVzZV9mb3IgJmFtcDsgdXNlX2ZvcikgIT0gdXNlX2ZvcmAgZm9yIHNraXBwaW5nIGJ1dCB0aGUgbmV3IGNvbmRpdGlvbiBpcyBgIWlzX2JzcygpYC4KVGhlIG1haW4gZGlmZmVyZW5jZSBpcyB0aGUgY29uZGl0aW9uYWwgc2V0dGluZyBvZiB0aGUgYGV4cGlyZWRgIGFuZCBgdW51c2FibGVgIHZhcmlhYmxlcyBpbnNpZGUgdGhlIGxvb3AsIGFsbG93aW5nIHVzIHRvIHJldHVybiBhIG1vcmUgcHJlY2lzZSBlcnJvciBjb2RlIHRvIHRoZSB1c2VyLgoKTG9va2luZyBhdCBgbmw4MDIxMV9wcm9jZXNzX2xpbmtzYCBhbmQgYG5sODAyMTFfYXNzb2NfYnNzYCwgdGhlc2UgY2hhbmdlcyBhbHNvIGludm9sdmUgYWRqdXN0bWVudHMgdG8gZXJyb3IgbWVzc2FnZXMgdXNpbmcgYE5MX1NFVF9CQURfQVRUUmAgYW5kIGBHRU5MX1NFVF9FUlJfTVNHYC4gIEl0IGxvb2tzIGxpa2UgdGhlc2UgYXJlIGp1c3QgZGlmZmVyZW50IHN0cmluZyBtZXNzYWdlcyB0byBjb252ZXkgd2hhdCBpcyBoYXBwZW5pbmcuCgpUaGUgY29kZSBmbG93LCB0aGUgc2VsZWN0aW9uIG9mIHRoZSBjb3JyZWN0IEJTUywgaXMgdGhlIHNhbWUuICBUaGUgY2hhbmdlcyBzZWVtIHNvbGVseSBmb2N1c2VkIG9uICp3aGF0KiBlcnJvciBpbmZvcm1hdGlvbiBpcyBiZWluZyBzZW50IGJhY2sgdGhyb3VnaCBOZXRsaW5rLiBUaGlzIGlzIGxhcmdlbHkgYSB1c2VyLXNwYWNlLWZhY2luZyBpbXByb3ZlbWVudC4gVGhpcyBkb2VzIG5vdCBpbnRyb2R1Y2UgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHJlcXVpcmVzIGZ1enppbmcuIFRoZSBrdW5pdCB0ZXN0IGlzIHB1cmVseSBhIHVuaXQgdGVzdCBhbmQgZG9lc24mIzM5O3Qgd2FycmFudCBmdXp6aW5nLgoKTXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcga2VybmVsIGJlaGF2aW9yIHRoYXQgZGlyZWN0bHkgYWx0ZXJzIHByb2dyYW0gZmxvdyBvciB3b3VsZCBjcmVhdGUgbmV3IHZ1bG5lcmFiaWxpdHkgc3VyZmFjZSBmcm9tIGEga2VybmVsIHBlcnNwZWN0aXZlIGFuZCB0aGVyZWZvcmUgZG9lcyBub3Qgd2FycmFudCBhbnkgZnV6emluZy4gIFRoZSBgZXh0YWNrYCBwYXJhbWV0ZXIgaXMgdXNlZCBmb3IgbW9yZSBkZXNjcmlwdGl2ZSBlcnJvciByZXBvcnRpbmcgdG8gdXNlcnNwYWNlLCBidXQgdGhlIGtlcm5lbCYjMzk7cyBjb3JlIGxvZ2ljIHJlbWFpbnMgdW5jaGFuZ2VkLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZG91YmxlIGNoZWNrIHRoZSBgaXNfYnNzYCBmdW5jdGlvbiBqdXN0IHRvIGJlIHN1cmUuLi4gYW5kIHRoYXQgaXMgc2lkZSBlZmZlY3QgZnJlZS4gSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcyBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0YXRpYyBpbmxpbmUgYm9vbCBpc19ic3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3Mvc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTg2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBMb2NhdGlvbiBvZiBgaXNfYnNzYCoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB3aGVyZSBgaXNfYnNzYCBpcyBkZWZpbmVkLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHRoYXQgaXQmIzM5O3MgcHJvYmFibHkgd2l0aGluIHRoZSBgbmV0L3dpcmVsZXNzL3NjYW4uY2AgZmlsZS4gSXQmIzM5O3MgbGlrZWx5IGludm9sdmVkIGluIHRoZSB3aXJlbGVzcyBzY2FubmluZyBwcm9jZXNzLCBhbmQgdGhhdCYjMzk7cyBhIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuIEhvd2V2ZXIsIEkmIzM5O20gYWxzbyBiZXR0aW5nIGl0IG1pZ2h0ICpub3QqIGJlIGEgc2ltcGxlIGlubGluZSBmdW5jdGlvbiBkaXJlY3RseSB3aXRoaW4gdGhhdCBgLmNgIGZpbGUuIEdpdmVuIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGtlcm5lbCwgaXQmIzM5O3MganVzdCBhcyBsaWtlbHkgdGhhdCBpdCYjMzk7cyBkZWZpbmVkIGluIGEgaGVhZGVyIGZpbGUgaW5jbHVkZWQgYnkgYHNjYW4uY2AsIG1heWJlIHNvbWV0aGluZyByZWxhdGVkIHRvIEJTUyBzdHJ1Y3R1cmVzIG9yIHdpcmVsZXNzIGRldmljZSBjaGFyYWN0ZXJpc3RpY3MuIEkgbmVlZCB0byBiZSByZWFkeSB0byBjaGVjayBhIGhlYWRlciBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jvb2wgaXNfYnNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3Mvc2Nhbi5jPTQwND1FWFBPUlRfU1lNQk9MX0lGX0NGRzgwMjExX0tVTklUKGNmZzgwMjExX2dlbl9uZXdfaWUpO1xubmV0L3dpcmVsZXNzL3NjYW4uYy00MDUtXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjQwNjpzdGF0aWMgYm9vbCBpc19ic3Moc3RydWN0IGNmZzgwMjExX2JzcyAqYSwgY29uc3QgdTggKmJzc2lkLFxubmV0L3dpcmVsZXNzL3NjYW4uYy00MDctXHRcdCAgIGNvbnN0IHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk1OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gJiMzOTtpc19ic3MmIzM5OyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGlzX2Jzc2AgZnVuY3Rpb24uIEkgc2VlIHRoaXMgcXVpdGUgYSBiaXQgd2hlbiBJJiMzOTttIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbGlua2VyIHNjcmlwdHMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCBjb250ZXh0IGl0JiMzOTtzIGJlaW5nIHVzZWQgaW4uIElzIGl0IGEgZnVuY3Rpb24gY2FsbCwgYSBtYWNybywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyBpdCYjMzk7cyBsaWtlbHkgY2hlY2tpbmcgaWYgYSBnaXZlbiBzZWN0aW9uIG9yIGFkZHJlc3MgZmFsbHMgd2l0aGluIHRoZSBCU1MgKEJsb2NrIFN0YXJ0ZWQgYnkgU3ltYm9sKSByZWdpb24gb2YgbWVtb3J5LiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBiZWNhdXNlIHRoZSBCU1MgaXMgd2hlcmUgd2UgcGxhY2UgdW5pbml0aWFsaXplZCBnbG9iYWwgYW5kIHN0YXRpYyB2YXJpYWJsZXMuCgpNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggcG9zc2libGUgdXNlIGNhc2VzLiBJcyB0aGlzIGJlaW5nIHVzZWQgZHVyaW5nIGEgbGlua2VyIHNjcmlwdCBzdGFnZSB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgc2VjdGlvbnMgZm9yIHBsYWNlbWVudD8gT3IgbWF5YmUgaXQmIzM5O3Mgd2l0aGluIGEgcnVudGltZSBlbnZpcm9ubWVudCwgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBwb2ludGVyIHJlZmVycyB0byBhIEJTUyB2YXJpYWJsZSBiZWZvcmUgaW5pdGlhbGl6aW5nIGl0LCBvciBwZXJmb3JtaW5nIHNvbWUgb3RoZXIgbWVtb3J5IG9wZXJhdGlvbj8gQ29udGV4dCB3aWxsIGJlIGtleSBoZXJlLgoKSSYjMzk7ZCBleHBlY3QgdGhlIGltcGxlbWVudGF0aW9uIHRvIGludm9sdmUgc29tZSBraW5kIG9mIHJhbmdlIGNoZWNrLiBJdCB3b3VsZCBsaWtlbHkgY29tcGFyZSB0aGUgcHJvdmlkZWQgYWRkcmVzcyBvciBzZWN0aW9uIGFnYWluc3QgdGhlIHN0YXJ0IGFuZCBlbmQgYWRkcmVzc2VzIG9mIHRoZSBCU1Mgc2VnbWVudC4gSSYjMzk7ZCBiZSBjdXJpb3VzIHRvIHNlZSBob3cgdGhvc2Ugc3RhcnQgYW5kIGVuZCBhZGRyZXNzZXMgYXJlIGJlaW5nIGRldGVybWluZWQsIHByb2JhYmx5IHRocm91Z2ggbGlua2VyLWRlZmluZWQgc3ltYm9scyBsaWtlIGBfYnNzX3N0YXJ0YCBhbmQgYF9ic3NfZW5kYC4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSB0eXBlcyBpdCYjMzk7cyB1c2luZyBmb3IgdGhlc2UgYWRkcmVzc2VzIOKAkyBpcyBpdCB1c2luZyBgdWludHB0cl90YCwgcmF3IHBvaW50ZXJzLCBvciBzb21ldGhpbmcgZWxzZT8gVW5kZXJzdGFuZGluZyB0aGUgZGF0YSB0eXBlcyB1c2VkIGlzIGFsd2F5cyBjcml0aWNhbCBmb3IgYXZvaWRpbmcgc3VidGxlIGludGVnZXIgb3ZlcmZsb3dzIG9yIGluY29ycmVjdCBjb21wYXJpc29ucy4KCkFkZGl0aW9uYWxseSwgSSYjMzk7ZCBhbHNvIGJlIGN1cmlvdXMgYWJvdXQgd2hhdCBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyBtaWdodCBoYXZlIGJlZW4gdXNlZCB3aXRoaW4gdGhlIGZ1bmN0aW9uLiBJcyBpdCByZWx5aW5nIG9uIGNvbXBpbGVyIGludHJpbnNpY3MgdG8gbWFrZSB0aGUgcmFuZ2UgY2hlY2sgZmFzdGVyLCBvciBpcyBpdCB1c2luZyBhIHNpbXBsZSBjb21wYXJpc29uPyBJZiBpdCYjMzk7cyBhIGNyaXRpY2FsIHNlY3Rpb24gb2YgY29kZSwgb3IgYmVpbmcgaGVhdmlseSB1c2VkLCBJIHdvdWxkIGV4cGVjdCBpdCB0byBiZSB3ZWxsLW9wdGltaXplZC4gSSYjMzk7bSBrZWVuIHRvIGV4YW1pbmUgdGhlIGltcGxlbWVudGF0aW9uIHRvIHNlZSBpZiBpdCBoYW5kbGVzIHBvdGVudGlhbCBlZGdlIGNhc2VzIHByb3Blcmx5LCBzdWNoIGFzIHdoZW4gdGhlIHN0YXJ0IGFuZCBlbmQgb2YgQlNTIGFyZSB0aGUgc2FtZSwgb3Igd2hlbiB0aGUgdmFsdWUgYmVpbmcgY2hlY2tlZCBpcyByaWdodCBhdCBlaXRoZXIgYm91bmRhcnkuIEFsbCBvZiB0aG9zZSBkZXRhaWxzIGFyZSBnb2luZyB0byBiZSBuZWNlc3NhcnkgdG8gdW5kZXJzdGFuZCBpdHMgdHJ1ZSBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQwNjpcdHN0YXRpYyBib29sIGlzX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfYnNzICphLCBjb25zdCB1OCAqYnNzaWQsXG4gNDA3Olx0XHRcdCAgIGNvbnN0IHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4pXG4gNDA4Olx0e1xuIDQwOTpcdFx0Y29uc3Qgc3RydWN0IGNmZzgwMjExX2Jzc19pZXMgKmllcztcbiA0MTA6XHRcdGNvbnN0IHN0cnVjdCBlbGVtZW50ICpzc2lkX2VsZW07XG4gNDExOlx0XG4gNDEyOlx0XHRpZiAoYnNzaWQgXHUwMDI2XHUwMDI2ICFldGhlcl9hZGRyX2VxdWFsKGEtXHUwMDNlYnNzaWQsIGJzc2lkKSlcbiA0MTM6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDQxNDpcdFxuIDQxNTpcdFx0aWYgKCFzc2lkKVxuIDQxNjpcdFx0XHRyZXR1cm4gdHJ1ZTtcbiA0MTc6XHRcbiA0MTg6XHRcdGllcyA9IHJjdV9hY2Nlc3NfcG9pbnRlcihhLVx1MDAzZWllcyk7XG4gNDE5Olx0XHRpZiAoIWllcylcbiA0MjA6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDQyMTpcdFx0c3NpZF9lbGVtID0gY2ZnODAyMTFfZmluZF9lbGVtKFdMQU5fRUlEX1NTSUQsIGllcy1cdTAwM2VkYXRhLCBpZXMtXHUwMDNlbGVuKTtcbiA0MjI6XHRcdGlmICghc3NpZF9lbGVtKVxuIDQyMzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNDI0Olx0XHRpZiAoc3NpZF9lbGVtLVx1MDAzZWRhdGFsZW4gIT0gc3NpZF9sZW4pXG4gNDI1Olx0XHRcdHJldHVybiBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc5NgoJCQkJCQkJb3V0cHV0OiAxMDMKCQkJCQkJCXRob3VnaHRzOiAxNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgRnV6emluZyBXb3J0aGluZXNzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGZ1bmN0aW9uLCBgaXNfYnNzYCwgcmVtYWlucyBjb21wbGV0ZWx5IHNpZGUtZWZmZWN0IGZyZWUuIEl0IHNpbXBseSBwZXJmb3JtcyBhIGNvbXBhcmlzb24gb2YgdGhlIEJTUyBkYXRhIGFnYWluc3QgdGhlIEJTU0lEIGFuZCBTU0lEIHByb3ZpZGVkLiBTbywgdGhlIG1vZGlmaWNhdGlvbnMgd2l0aGluIGBfX2NmZzgwMjExX2dldF9ic3NgIGFyZSBmb2N1c2VkICpzb2xlbHkqIG9uIGVucmljaGluZyB0aGUgZXJyb3IgcmVwb3J0aW5nIHZpYSBgZXh0YWNrYCBtZXNzYWdlcy4gVGhlIHVuZGVybHlpbmcgc2VsZWN0aW9uIGxvZ2ljIGZvciB3aGljaCBCU1MgaXMgdWx0aW1hdGVseSBjaG9zZW4gaGFzbiYjMzk7dCBiZWVuIHRvdWNoZWQuCgpGdXJ0aGVybW9yZSwgdGhlIG90aGVyIGNoYW5nZXMgd2l0aGluIHRoZSBwYXRjaCBhcmUgc2ltaWxhcmx5IGNvbmZpbmVkIHRvIHNldHRpbmcgdGhlc2UgYGV4dGFja2AgbWVzc2FnZXMgYW5kIHRoZSBhZGRpdGlvbiBvZiBhIEtVbml0IHRlc3QuIFRoaXMgbWVhbnMgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGZ1bmN0aW9uYWwgYXNwZWN0cyB0byB0aGUga2VybmVsIHRoYXQgd291bGQgYmVuZWZpdCBmcm9tIGZ1enppbmcuIEl04oCZcyBlc3NlbnRpYWxseSBjb3NtZXRpYzogcHJvdmlkaW5nIGJldHRlciBlcnJvciBjb250ZXh0IGFuZCBhZGRpbmcgYSB1bml0IHRlc3QuIFRoZXJlZm9yZSwgYmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSYjMzk7bSBjb25maWRlbnQgaW4gY29uY2x1ZGluZyB0aGF0IHRoaXMgcGF0Y2ggaXNuJiMzOTt0IHdvcnRoIGZ1enppbmcuIEkgd2lsbCBjb25maWRlbnRseSByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIG5ldGxpbmsgZXh0ZW5kZWQgQUNLIChleHRhY2spIGVycm9yIG1lc3NhZ2VzIGZvciBiZXR0ZXIgZXJyb3IgcmVwb3J0aW5nIHRvIHVzZXJzcGFjZSB3aGVuIGEgQlNTIGlzIG5vdCBmb3VuZCBvciBjYW5ub3QgYmUgdXNlZC4gVGhlIGNvcmUgbG9naWMgb2YgQlNTIHNlbGVjdGlvbiByZW1haW5zIGZ1bmN0aW9uYWxseSBpZGVudGljYWwsIGFuZCB0aGUgcmVzdCBvZiB0aGUgcGF0Y2ggY29uc2lzdHMgb2YgYSBLVW5pdCB0ZXN0LiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgZXhlY3V0aW9uIGZsb3cgdGhhdCByZXF1aXJlIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgbmV0bGluayBleHRlbmRlZCBBQ0sgKGV4dGFjaykgZXJyb3IgbWVzc2FnZXMgZm9yIGJldHRlciBlcnJvciByZXBvcnRpbmcgdG8gdXNlcnNwYWNlIHdoZW4gYSBCU1MgaXMgbm90IGZvdW5kIG9yIGNhbm5vdCBiZSB1c2VkLiBUaGUgY29yZSBsb2dpYyBvZiBCU1Mgc2VsZWN0aW9uIHJlbWFpbnMgZnVuY3Rpb25hbGx5IGlkZW50aWNhbCwgYW5kIHRoZSByZXN0IG9mIHRoZSBwYXRjaCBjb25zaXN0cyBvZiBhIEtVbml0IHRlc3QuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBleGVjdXRpb24gZmxvdyB0aGF0IHJlcXVpcmUgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMTo1MDoxNS42Nzk3NDMxODNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTY3Mzk1MjA3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIG5ldGxpbmsgZXh0ZW5kZWQgQUNLIChleHRhY2spIGVycm9yIG1lc3NhZ2VzIGZvciBiZXR0ZXIgZXJyb3IgcmVwb3J0aW5nIHRvIHVzZXJzcGFjZSB3aGVuIGEgQlNTIGlzIG5vdCBmb3VuZCBvciBjYW5ub3QgYmUgdXNlZC4gVGhlIGNvcmUgbG9naWMgb2YgQlNTIHNlbGVjdGlvbiByZW1haW5zIGZ1bmN0aW9uYWxseSBpZGVudGljYWwsIGFuZCB0aGUgcmVzdCBvZiB0aGUgcGF0Y2ggY29uc2lzdHMgb2YgYSBLVW5pdCB0ZXN0LiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgZXhlY3V0aW9uIGZsb3cgdGhhdCByZXF1aXJlIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMTo1MDoxNS42Nzk3NDg2NDNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0Njg4MjU3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDI5YmFmNWMwODczMjAzY2Q5YTQ2ZmQwNDZhZTE2OGFhZDE4YTJkZWJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMjMgMDE6NTA6MTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmhcXG5pbmRleCBiOGU5ZmJiODllNjkxNi4uMTVjMDhiMjQ1MDJmZDMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmhcXG5AQCAtODQyNCw2ICs4NDI0LDggQEAgY2ZnODAyMTFfaW5mb3JtX2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbiAgKiBAYnNzX3R5cGU6IHR5cGUgb2YgQlNTLCBzZWUgXFx1MDAyNmVudW0gaWVlZTgwMjExX2Jzc190eXBlXFxuICAqIEBwcml2YWN5OiBwcml2YWN5IGZpbHRlciwgc2VlIFxcdTAwMjZlbnVtIGllZWU4MDIxMV9wcml2YWN5XFxuICAqIEB1c2VfZm9yOiBpbmRpY2F0ZXMgd2hpY2ggdXNlIGlzIGludGVuZGVkXFxuKyAqIEBleHRhY2s6IChvcHRpb25hbCkgZXh0YWNrIHRoYXQgaXMgZmlsbGVkIHdpdGggdGhlIHJlYXNvbiB3aGVuIG5vXFxuKyAqXFx0dXNhYmxlIGVudHJ5IHdhcyBmb3VuZDsgbWF5IGJlICVOVUxMXFxuICAqXFxuICAqIFJldHVybjogUmVmZXJlbmNlLWNvdW50ZWQgQlNTIG9uIHN1Y2Nlc3MuICVOVUxMIG9uIGVycm9yLlxcbiAgKi9cXG5AQCAtODQzMyw3ICs4NDM1LDggQEAgc3RydWN0IGNmZzgwMjExX2JzcyAqX19jZmc4MDIxMV9nZXRfYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxuIFxcdFxcdFxcdFxcdFxcdGNvbnN0IHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4sXFxuIFxcdFxcdFxcdFxcdFxcdGVudW0gaWVlZTgwMjExX2Jzc190eXBlIGJzc190eXBlLFxcbiBcXHRcXHRcXHRcXHRcXHRlbnVtIGllZWU4MDIxMV9wcml2YWN5IHByaXZhY3ksXFxuLVxcdFxcdFxcdFxcdFxcdHUzMiB1c2VfZm9yKTtcXG4rXFx0XFx0XFx0XFx0XFx0dTMyIHVzZV9mb3IsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuIFxcbiAvKipcXG4gICogY2ZnODAyMTFfZ2V0X2JzcyAtIGdldCBhIEJTUyByZWZlcmVuY2VcXG5AQCAtODQ1Nyw3ICs4NDYwLDcgQEAgY2ZnODAyMTFfZ2V0X2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsXFxuIHtcXG4gXFx0cmV0dXJuIF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgY2hhbm5lbCwgYnNzaWQsIHNzaWQsIHNzaWRfbGVuLFxcbiBcXHRcXHRcXHRcXHQgIGJzc190eXBlLCBwcml2YWN5LFxcbi1cXHRcXHRcXHRcXHQgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMKTtcXG4rXFx0XFx0XFx0XFx0ICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgTlVMTCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNmZzgwMjExX2JzcyAqXFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXFxuaW5kZXggZDk2MmI1OTQ0NTMzOWEuLmFjMGMwZGE0NTI0MTkxIDEwMDY0NFxcbi0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmNcXG4rKysgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXFxuQEAgLTEyODkwLDkgKzEyODkwLDExIEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9hdXRoZW50aWNhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuLVxcdHJlcS5ic3MgPSBjZmc4MDIxMV9nZXRfYnNzKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgY2hhbiwgYnNzaWQsIHNzaWQsIHNzaWRfbGVuLFxcbi1cXHRcXHRcXHRcXHQgICBJRUVFODAyMTFfQlNTX1RZUEVfRVNTLFxcbi1cXHRcXHRcXHRcXHQgICBJRUVFODAyMTFfUFJJVkFDWV9BTlkpO1xcbitcXHRyZXEuYnNzID0gX19jZmc4MDIxMV9nZXRfYnNzKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgY2hhbiwgYnNzaWQsIHNzaWQsIHNzaWRfbGVuLFxcbitcXHRcXHRcXHRcXHQgICAgIElFRUU4MDIxMV9CU1NfVFlQRV9FU1MsXFxuK1xcdFxcdFxcdFxcdCAgICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxcbitcXHRcXHRcXHRcXHQgICAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLFxcbitcXHRcXHRcXHRcXHQgICAgIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuIFxcdGlmICghcmVxLmJzcylcXG4gXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIFxcbkBAIC0xMzAzNyw2ICsxMzAzOSw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9jcnlwdG9fc2V0dGluZ3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbiB9XFxuIFxcbiBzdGF0aWMgc3RydWN0IGNmZzgwMjExX2JzcyAqbmw4MDIxMV9hc3NvY19ic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBjb25zdCB1OCAqc3NpZCwgaW50IHNzaWRfbGVuLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIGludCBhc3NvY19saW5rX2lkLCBpbnQgbGlua19pZClcXG5AQCAtMTMwNDYsOCArMTMwNDksMTAgQEAgc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9ic3MgKm5sODAyMTFfYXNzb2NfYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZVxcbiBcXHRjb25zdCB1OCAqYnNzaWQ7XFxuIFxcdHUzMiBmcmVxLCB1c2VfZm9yID0gMDtcXG4gXFxuLVxcdGlmICghYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10gfHwgIWF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9GUkVRXSlcXG4rXFx0aWYgKCFhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSB8fCAhYXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKSB7XFxuK1xcdFxcdEdFTkxfU0VUX0VSUl9NU0coaW5mbywgXFxcIkJTU0lEIG9yIGZyZXF1ZW5jeSBtaXNzaW5nXFxcIik7XFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbitcXHR9XFxuIFxcbiBcXHRic3NpZCA9IG5sYV9kYXRhKGF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTtcXG4gXFxuQEAgLTEzMDU2LDggKzEzMDYxLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpubDgwMjExX2Fzc29jX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2VcXG4gXFx0XFx0ZnJlcSArPSBubGFfZ2V0X3UzMihhdHRyc1tOTDgwMjExX0FUVFJfV0lQSFlfRlJFUV9PRkZTRVRdKTtcXG4gXFxuIFxcdGNoYW4gPSBubDgwMjExX2dldF92YWxpZF9jaGFuKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgZnJlcSk7XFxuLVxcdGlmICghY2hhbilcXG4rXFx0aWYgKCFjaGFuKSB7XFxuK1xcdFxcdEdFTkxfU0VUX0VSUl9NU0coaW5mbywgXFxcImludmFsaWQgb3IgZGlzYWJsZWQgY2hhbm5lbFxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKGFzc29jX2xpbmtfaWQgXFx1MDAzZT0gMClcXG4gXFx0XFx0dXNlX2ZvciA9IE5MODAyMTFfQlNTX1VTRV9GT1JfTUxEX0xJTks7XFxuQEAgLTEzMDY4LDcgKzEzMDc1LDcgQEAgc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9ic3MgKm5sODAyMTFfYXNzb2NfYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZVxcbiBcXHRcXHRcXHRcXHQgc3NpZCwgc3NpZF9sZW4sXFxuIFxcdFxcdFxcdFxcdCBJRUVFODAyMTFfQlNTX1RZUEVfRVNTLFxcbiBcXHRcXHRcXHRcXHQgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxcbi1cXHRcXHRcXHRcXHQgdXNlX2Zvcik7XFxuK1xcdFxcdFxcdFxcdCB1c2VfZm9yLCBpbmZvLVxcdTAwM2VleHRhY2spO1xcbiBcXHRpZiAoIWJzcylcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XFxuIFxcbkBAIC0xMzEwNywxMyArMTMxMTQsMTMgQEAgc3RhdGljIGludCBubDgwMjExX3Byb2Nlc3NfbGlua3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0fVxcbiBcXHRcXHRsaW5rc1tsaW5rX2lkXS5ic3MgPVxcbi1cXHRcXHRcXHRubDgwMjExX2Fzc29jX2JzcyhyZGV2LCBzc2lkLCBzc2lkX2xlbiwgYXR0cnMsXFxuK1xcdFxcdFxcdG5sODAyMTFfYXNzb2NfYnNzKHJkZXYsIGluZm8sIHNzaWQsIHNzaWRfbGVuLCBhdHRycyxcXG4gXFx0XFx0XFx0XFx0XFx0ICBhc3NvY19saW5rX2lkLCBsaW5rX2lkKTtcXG4gXFx0XFx0aWYgKElTX0VSUihsaW5rc1tsaW5rX2lkXS5ic3MpKSB7XFxuIFxcdFxcdFxcdGVyciA9IFBUUl9FUlIobGlua3NbbGlua19pZF0uYnNzKTtcXG4gXFx0XFx0XFx0bGlua3NbbGlua19pZF0uYnNzID0gTlVMTDtcXG4tXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfQVRUUihpbmZvLVxcdTAwM2VleHRhY2ssIGxpbmssXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBcXFwiRXJyb3IgZmV0Y2hpbmcgQlNTIGZvciBsaW5rXFxcIik7XFxuK1xcdFxcdFxcdC8qIHRoZSBCU1MgbG9va3VwIHNldCB0aGUgc3BlY2lmaWMgbWVzc2FnZSBhbHJlYWR5ICovXFxuK1xcdFxcdFxcdE5MX1NFVF9CQURfQVRUUihpbmZvLVxcdTAwM2VleHRhY2ssIGxpbmspO1xcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC0xMzMyOSw3ICsxMzMzNiw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9hc3NvY2lhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0XFx0aWYgKHJlcS5saW5rX2lkIFxcdTAwM2U9IDApXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0XFx0cmVxLmJzcyA9IG5sODAyMTFfYXNzb2NfYnNzKHJkZXYsIHNzaWQsIHNzaWRfbGVuLCBpbmZvLVxcdTAwM2VhdHRycyxcXG4rXFx0XFx0cmVxLmJzcyA9IG5sODAyMTFfYXNzb2NfYnNzKHJkZXYsIGluZm8sIHNzaWQsIHNzaWRfbGVuLCBpbmZvLVxcdTAwM2VhdHRycyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIC0xLCAtMSk7XFxuIFxcdFxcdGlmIChJU19FUlIocmVxLmJzcykpXFxuIFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHJlcS5ic3MpO1xcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvc2Nhbi5jIGIvbmV0L3dpcmVsZXNzL3NjYW4uY1xcbmluZGV4IGU2MmI3ZGQyYjdjMmQ4Li45MGE0ZjI4NTY1NGY5NCAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3Mvc2Nhbi5jXFxuKysrIGIvbmV0L3dpcmVsZXNzL3NjYW4uY1xcbkBAIC0xNjA5LDEwICsxNjA5LDEyIEBAIHN0cnVjdCBjZmc4MDIxMV9ic3MgKl9fY2ZnODAyMTFfZ2V0X2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbiBcXHRcXHRcXHRcXHRcXHRjb25zdCB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuLFxcbiBcXHRcXHRcXHRcXHRcXHRlbnVtIGllZWU4MDIxMV9ic3NfdHlwZSBic3NfdHlwZSxcXG4gXFx0XFx0XFx0XFx0XFx0ZW51bSBpZWVlODAyMTFfcHJpdmFjeSBwcml2YWN5LFxcbi1cXHRcXHRcXHRcXHRcXHR1MzIgdXNlX2ZvcilcXG4rXFx0XFx0XFx0XFx0XFx0dTMyIHVzZV9mb3IsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4ge1xcbiBcXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19yZGV2KHdpcGh5KTtcXG4gXFx0c3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzLCAqcmVzID0gTlVMTDtcXG4rXFx0Ym9vbCBleHBpcmVkID0gZmFsc2UsIHVudXNhYmxlID0gZmFsc2U7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllcztcXG4gXFx0aW50IGJzc19wcml2YWN5O1xcbiBcXG5AQCAtMTYzNCwyMiArMTYzNiw0OCBAQCBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpfX2NmZzgwMjExX2dldF9ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSxcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihic3MtXFx1MDAzZXB1Yi5ic3NpZCkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRpZiAoKGJzcy1cXHUwMDNlcHViLnVzZV9mb3IgXFx1MDAyNiB1c2VfZm9yKSAhPSB1c2VfZm9yKVxcbitcXHRcXHRpZiAoIWlzX2JzcyhcXHUwMDI2YnNzLVxcdTAwM2VwdWIsIGJzc2lkLCBzc2lkLCBzc2lkX2xlbikpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogVGhlIGlkZW50aXR5IGNoZWNrcyBhYm92ZSBtdXN0IGFsbCBjb21lIGZpcnN0IHNvIHRoYXRcXG4rXFx0XFx0ICogdGhlIGV4cGlyZWQvdW51c2FibGUgY2xhc3NpZmljYXRpb24gYmVsb3cgb25seSBldmVyXFxuK1xcdFxcdCAqIGFwcGxpZXMgdG8gZW50cmllcyB0aGF0IGFjdHVhbGx5IG1hdGNoIHRoZSByZXF1ZXN0LlxcbitcXHRcXHQgKi9cXG4rXFxuIFxcdFxcdC8qIERvbid0IGdldCBleHBpcmVkIEJTUyBzdHJ1Y3RzICovXFxuIFxcdFxcdGlmICh0aW1lX2FmdGVyKG5vdywgYnNzLVxcdTAwM2V0cyArIElFRUU4MDIxMV9TQ0FOX1JFU1VMVF9FWFBJUkUpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAhYXRvbWljX3JlYWQoXFx1MDAyNmJzcy1cXHUwMDNlaG9sZCkpXFxuK1xcdFxcdCAgICAhYXRvbWljX3JlYWQoXFx1MDAyNmJzcy1cXHUwMDNlaG9sZCkpIHtcXG4rXFx0XFx0XFx0ZXhwaXJlZCA9IHRydWU7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoKGJzcy1cXHUwMDNlcHViLnVzZV9mb3IgXFx1MDAyNiB1c2VfZm9yKSAhPSB1c2VfZm9yKSB7XFxuK1xcdFxcdFxcdHVudXNhYmxlID0gdHJ1ZTtcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdGlmIChpc19ic3MoXFx1MDAyNmJzcy1cXHUwMDNlcHViLCBic3NpZCwgc3NpZCwgc3NpZF9sZW4pKSB7XFxuLVxcdFxcdFxcdHJlcyA9IGJzcztcXG4tXFx0XFx0XFx0YnNzX3JlZl9nZXQocmRldiwgcmVzKTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4rXFxuK1xcdFxcdHJlcyA9IGJzcztcXG4rXFx0XFx0YnNzX3JlZl9nZXQocmRldiwgcmVzKTtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZyZGV2LVxcdTAwM2Vic3NfbG9jayk7XFxuLVxcdGlmICghcmVzKVxcbitcXHRpZiAoIXJlcykge1xcbitcXHRcXHRpZiAoZXhwaXJlZCBcXHUwMDI2XFx1MDAyNiB1bnVzYWJsZSlcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIkJTUyBlbnRyaWVzIGFyZSBleHBpcmVkIG9yIGNhbm5vdCBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdGVkIG9wZXJhdGlvblxcXCIpO1xcbitcXHRcXHRlbHNlIGlmICh1bnVzYWJsZSlcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIkJTUyBjYW5ub3QgYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RlZCBvcGVyYXRpb25cXFwiKTtcXG4rXFx0XFx0ZWxzZSBpZiAoZXhwaXJlZClcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIkJTUyBlbnRyeSBpbiBzY2FuIHJlc3VsdHMgaXMgZXhwaXJlZFxcXCIpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcXCJCU1Mgbm90IGZvdW5kIGluIHNjYW4gcmVzdWx0c1xcXCIpO1xcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbiBcXHR0cmFjZV9jZmc4MDIxMV9yZXR1cm5fYnNzKFxcdTAwMjZyZXMtXFx1MDAzZXB1Yik7XFxuIFxcdHJldHVybiBcXHUwMDI2cmVzLVxcdTAwM2VwdWI7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3Rlc3RzL3NjYW4uYyBiL25ldC93aXJlbGVzcy90ZXN0cy9zY2FuLmNcXG5pbmRleCBiMWE5YzE0NjZkNmNiZC4uOGMyMDI3OGI1ZDNhNDQgMTAwNjQ0XFxuLS0tIGEvbmV0L3dpcmVsZXNzL3Rlc3RzL3NjYW4uY1xcbisrKyBiL25ldC93aXJlbGVzcy90ZXN0cy9zY2FuLmNcXG5AQCAtNDAyLDYgKzQwMiwxMjQgQEAgc3RhdGljIHZvaWQgdGVzdF9pbmZvcm1fYnNzX3NzaWRfb25seShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIFxcdGNmZzgwMjExX3B1dF9ic3Mod2lwaHksIGJzcyk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHRlc3RfZ2V0X2Jzc19taXNzX3JlYXNvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuK3tcXG4rXFx0c3RydWN0IGluZm9ybV9ic3MgY3R4ID0ge1xcbitcXHRcXHQudGVzdCA9IHRlc3QsXFxuK1xcdH07XFxuK1xcdHN0cnVjdCB3aXBoeSAqd2lwaHkgPSBUX1dJUEhZKHRlc3QsIGN0eCk7XFxuK1xcdHN0cnVjdCBjZmc4MDIxMV9pbmZvcm1fYnNzIGluZm9ybV9ic3MgPSB7XFxuK1xcdFxcdC5zaWduYWwgPSA1MCxcXG4rXFx0XFx0LmRydl9kYXRhID0gXFx1MDAyNmN0eCxcXG4rXFx0fTtcXG4rXFx0Y29uc3QgdTggYnNzaWRbRVRIX0FMRU5dID0geyAweDEwLCAweDIyLCAweDMzLCAweDQ0LCAweDU1LCAweDY2IH07XFxuK1xcdGNvbnN0IHU4IG90aGVyX2Jzc2lkW0VUSF9BTEVOXSA9IHsgMHg2NiwgMHg1NSwgMHg0NCwgMHgzMywgMHgyMiwgMHgxMSB9O1xcbitcXHRzdGF0aWMgY29uc3QgdTggaWVzW10gPSB7XFxuK1xcdFxcdFswXSA9IFdMQU5fRUlEX1NTSUQsXFxuK1xcdFxcdFsxXSA9IDQsXFxuK1xcdFxcdFsyXSA9ICdUJywgJ0UnLCAnUycsICdUJ1xcbitcXHR9O1xcbitcXHRzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICppYnNzO1xcbitcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrIGV4dGFjayA9IHt9O1xcbitcXHRzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MsICpic3MyLCAqZm91bmQ7XFxuK1xcbitcXHRpbmZvcm1fYnNzLmNoYW4gPSBpZWVlODAyMTFfZ2V0X2NoYW5uZWxfa2h6KHdpcGh5LCBNSFpfVE9fS0haKDI0MTIpKTtcXG4rXFx0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGluZm9ybV9ic3MuY2hhbik7XFxuK1xcbitcXHRic3MgPSBjZmc4MDIxMV9pbmZvcm1fYnNzX2RhdGEod2lwaHksIFxcdTAwMjZpbmZvcm1fYnNzLFxcbitcXHRcXHRcXHRcXHQgICAgICAgQ0ZHODAyMTFfQlNTX0ZUWVBFX1BSRVNQLCBic3NpZCwgMCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIDB4MTIzNCwgMTAwLCBpZXMsIHNpemVvZihpZXMpLFxcbitcXHRcXHRcXHRcXHQgICAgICAgR0ZQX0tFUk5FTCk7XFxuK1xcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBic3MpO1xcbitcXHRpYnNzID0gY29udGFpbmVyX29mKGJzcywgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcywgcHViKTtcXG4rXFxuK1xcdC8qIEZyZXNoIHVzYWJsZSBlbnRyeTogZm91bmQsIG5vIG1lc3NhZ2UgaXMgc2V0ICovXFxuK1xcdGZvdW5kID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBic3NpZCwgTlVMTCwgMCxcXG4rXFx0XFx0XFx0XFx0ICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSxcXG4rXFx0XFx0XFx0XFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxcbitcXHRcXHRcXHRcXHQgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgXFx1MDAyNmV4dGFjayk7XFxuK1xcdEtVTklUX0FTU0VSVF9QVFJfRVEodGVzdCwgZm91bmQsIGJzcyk7XFxuK1xcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGV4dGFjay5fbXNnKTtcXG4rXFx0Y2ZnODAyMTFfcHV0X2Jzcyh3aXBoeSwgZm91bmQpO1xcbitcXG4rXFx0LyogTm8gZW50cnkgYXQgYWxsIGZvciB0aGlzIEJTU0lEICovXFxuK1xcdGZvdW5kID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBvdGhlcl9ic3NpZCwgTlVMTCwgMCxcXG4rXFx0XFx0XFx0XFx0ICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSxcXG4rXFx0XFx0XFx0XFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxcbitcXHRcXHRcXHRcXHQgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgXFx1MDAyNmV4dGFjayk7XFxuK1xcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGZvdW5kKTtcXG4rXFx0S1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLCBcXFwiQlNTIG5vdCBmb3VuZCBpbiBzY2FuIHJlc3VsdHNcXFwiKTtcXG4rXFxuK1xcdC8qIEZyZXNoIGVudHJ5IHRoYXQgaXMgbm90IHVzYWJsZSBmb3IgdGhlIHJlcXVlc3RlZCB1c2UgKi9cXG4rXFx0ZXh0YWNrLl9tc2cgPSBOVUxMO1xcbitcXHRic3MtXFx1MDAzZXVzZV9mb3IgPSAwO1xcbitcXHRmb3VuZCA9IF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgTlVMTCwgYnNzaWQsIE5VTEwsIDAsXFxuK1xcdFxcdFxcdFxcdCAgIElFRUU4MDIxMV9CU1NfVFlQRV9BTlksXFxuK1xcdFxcdFxcdFxcdCAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcXG4rXFx0XFx0XFx0XFx0ICAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwsIFxcdTAwMjZleHRhY2spO1xcbitcXHRLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCBmb3VuZCk7XFxuK1xcdEtVTklUX0VYUEVDVF9TVFJFUSh0ZXN0LCBleHRhY2suX21zZyxcXG4rXFx0XFx0XFx0ICAgXFxcIkJTUyBjYW5ub3QgYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RlZCBvcGVyYXRpb25cXFwiKTtcXG4rXFx0YnNzLVxcdTAwM2V1c2VfZm9yID0gTkw4MDIxMV9CU1NfVVNFX0ZPUl9BTEw7XFxuK1xcbitcXHQvKiBFeHBpcmVkIGVudHJ5LCBcXHUwMDNlIElFRUU4MDIxMV9TQ0FOX1JFU1VMVF9FWFBJUkUgKDMwcykgb2xkICovXFxuK1xcdGV4dGFjay5fbXNnID0gTlVMTDtcXG4rXFx0aWJzcy1cXHUwMDNldHMgPSBqaWZmaWVzIC0gNjAgKiBIWjtcXG4rXFx0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIGJzc2lkLCBOVUxMLCAwLFxcbitcXHRcXHRcXHRcXHQgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxcbitcXHRcXHRcXHRcXHQgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksXFxuK1xcdFxcdFxcdFxcdCAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBcXHUwMDI2ZXh0YWNrKTtcXG4rXFx0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZm91bmQpO1xcbitcXHRLVU5JVF9FWFBFQ1RfU1RSRVEodGVzdCwgZXh0YWNrLl9tc2csXFxuK1xcdFxcdFxcdCAgIFxcXCJCU1MgZW50cnkgaW4gc2NhbiByZXN1bHRzIGlzIGV4cGlyZWRcXFwiKTtcXG4rXFxuK1xcdC8qIEFuIGVudHJ5IGJvdGggZXhwaXJlZCBhbmQgdW51c2FibGUgcmVwb3J0cyBleHBpcmVkICovXFxuK1xcdGV4dGFjay5fbXNnID0gTlVMTDtcXG4rXFx0YnNzLVxcdTAwM2V1c2VfZm9yID0gMDtcXG4rXFx0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIGJzc2lkLCBOVUxMLCAwLFxcbitcXHRcXHRcXHRcXHQgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxcbitcXHRcXHRcXHRcXHQgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksXFxuK1xcdFxcdFxcdFxcdCAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBcXHUwMDI2ZXh0YWNrKTtcXG4rXFx0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZm91bmQpO1xcbitcXHRLVU5JVF9FWFBFQ1RfU1RSRVEodGVzdCwgZXh0YWNrLl9tc2csXFxuK1xcdFxcdFxcdCAgIFxcXCJCU1MgZW50cnkgaW4gc2NhbiByZXN1bHRzIGlzIGV4cGlyZWRcXFwiKTtcXG4rXFx0YnNzLVxcdTAwM2V1c2VfZm9yID0gTkw4MDIxMV9CU1NfVVNFX0ZPUl9BTEw7XFxuK1xcbitcXHQvKiBFeHBpcmVkIGJ1dCBoZWxkIGVudHJpZXMgYXJlIHN0aWxsIHVzYWJsZSwgbm8gbWVzc2FnZSBpcyBzZXQgKi9cXG4rXFx0ZXh0YWNrLl9tc2cgPSBOVUxMO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZpYnNzLVxcdTAwM2Vob2xkLCAxKTtcXG4rXFx0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIGJzc2lkLCBOVUxMLCAwLFxcbitcXHRcXHRcXHRcXHQgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxcbitcXHRcXHRcXHRcXHQgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksXFxuK1xcdFxcdFxcdFxcdCAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBcXHUwMDI2ZXh0YWNrKTtcXG4rXFx0S1VOSVRfQVNTRVJUX1BUUl9FUSh0ZXN0LCBmb3VuZCwgYnNzKTtcXG4rXFx0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZXh0YWNrLl9tc2cpO1xcbitcXHRjZmc4MDIxMV9wdXRfYnNzKHdpcGh5LCBmb3VuZCk7XFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNmlic3MtXFx1MDAzZWhvbGQsIDApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogV2l0aCBvbmUgbWF0Y2hpbmcgZW50cnkgZXhwaXJlZCBhbmQgYW5vdGhlciBjdXJyZW50IGJ1dFxcbitcXHQgKiB1bnVzYWJsZSwgYm90aCByZWFzb25zIGFyZSByZXBvcnRlZC5cXG4rXFx0ICovXFxuK1xcdGJzczIgPSBjZmc4MDIxMV9pbmZvcm1fYnNzX2RhdGEod2lwaHksIFxcdTAwMjZpbmZvcm1fYnNzLFxcbitcXHRcXHRcXHRcXHRcXHRDRkc4MDIxMV9CU1NfRlRZUEVfUFJFU1AsIG90aGVyX2Jzc2lkLFxcbitcXHRcXHRcXHRcXHRcXHQwLCAweDEyMzQsIDEwMCwgaWVzLCBzaXplb2YoaWVzKSxcXG4rXFx0XFx0XFx0XFx0XFx0R0ZQX0tFUk5FTCk7XFxuK1xcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBic3MyKTtcXG4rXFx0YnNzMi1cXHUwMDNldXNlX2ZvciA9IDA7XFxuK1xcdGV4dGFjay5fbXNnID0gTlVMTDtcXG4rXFx0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIE5VTEwsIFxcXCJURVNUXFxcIiwgNCxcXG4rXFx0XFx0XFx0XFx0ICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSxcXG4rXFx0XFx0XFx0XFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxcbitcXHRcXHRcXHRcXHQgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgXFx1MDAyNmV4dGFjayk7XFxuK1xcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGZvdW5kKTtcXG4rXFx0S1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLFxcbitcXHRcXHRcXHQgICBcXFwiQlNTIGVudHJpZXMgYXJlIGV4cGlyZWQgb3IgY2Fubm90IGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uXFxcIik7XFxuK1xcbitcXHRjZmc4MDIxMV9wdXRfYnNzKHdpcGh5LCBic3MyKTtcXG4rXFx0Y2ZnODAyMTFfcHV0X2Jzcyh3aXBoeSwgYnNzKTtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBpbmZvcm1fYnNzX21sX3N0YV9jYXNlIHtcXG4gXFx0Y29uc3QgY2hhciAqZGVzYztcXG4gXFx0aW50IG1sZF9pZDtcXG5AQCAtNjE3LDcgKzczNSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW5mb3JtX2Jzc19tbF9zdGEoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRsaW5rX2JzcyA9IF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgTlVMTCwgc3RhX3Byb2YuYnNzaWQsIE5VTEwsIDAsXFxuIFxcdFxcdFxcdFxcdCAgICAgIElFRUU4MDIxMV9CU1NfVFlQRV9BTlksXFxuIFxcdFxcdFxcdFxcdCAgICAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgMCk7XFxuK1xcdFxcdFxcdFxcdCAgICAgIDAsIE5VTEwpO1xcbiBcXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgbGlua19ic3MpO1xcbiBcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgbGlua19ic3MtXFx1MDAzZXNpZ25hbCwgMCk7XFxuIFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBsaW5rX2Jzcy1cXHUwMDNlYmVhY29uX2ludGVydmFsLFxcbkBAIC04NTUsNiArOTczLDcgQEAga3VuaXRfdGVzdF9zdWl0ZShnZW5fbmV3X2llKTtcXG4gXFxuIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBpbmZvcm1fYnNzX3Rlc3RfY2FzZXNbXSA9IHtcXG4gXFx0S1VOSVRfQ0FTRSh0ZXN0X2luZm9ybV9ic3Nfc3NpZF9vbmx5KSxcXG4rXFx0S1VOSVRfQ0FTRSh0ZXN0X2dldF9ic3NfbWlzc19yZWFzb24pLFxcbiBcXHRLVU5JVF9DQVNFX1BBUkFNKHRlc3RfaW5mb3JtX2Jzc19tbF9zdGEsIGluZm9ybV9ic3NfbWxfc3RhX2dlbl9wYXJhbXMpLFxcbiBcXHR7fVxcbiB9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMTo1MDoxNi4yMjc2MjMxNjNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyOTEyNjA2Mzg1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIG5ldGxpbmsgZXh0ZW5kZWQgQUNLIChleHRhY2spIGVycm9yIG1lc3NhZ2VzIGZvciBiZXR0ZXIgZXJyb3IgcmVwb3J0aW5nIHRvIHVzZXJzcGFjZSB3aGVuIGEgQlNTIGlzIG5vdCBmb3VuZCBvciBjYW5ub3QgYmUgdXNlZC4gVGhlIGNvcmUgbG9naWMgb2YgQlNTIHNlbGVjdGlvbiByZW1haW5zIGZ1bmN0aW9uYWxseSBpZGVudGljYWwsIGFuZCB0aGUgcmVzdCBvZiB0aGUgcGF0Y2ggY29uc2lzdHMgb2YgYSBLVW5pdCB0ZXN0LiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgZXhlY3V0aW9uIGZsb3cgdGhhdCByZXF1aXJlIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI5YmFmNWMwODczMjAzY2Q5YTQ2ZmQwNDZhZTE2OGFhZDE4YTJkZWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyMyAwMTo1MDoxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NmZzgwMjExLmggYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXG5pbmRleCBiOGU5ZmJiODllNjkxNi4uMTVjMDhiMjQ1MDJmZDMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXG4rKysgYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXG5AQCAtODQyNCw2ICs4NDI0LDggQEAgY2ZnODAyMTFfaW5mb3JtX2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuICAqIEBic3NfdHlwZTogdHlwZSBvZiBCU1MsIHNlZSBcdTAwMjZlbnVtIGllZWU4MDIxMV9ic3NfdHlwZVxuICAqIEBwcml2YWN5OiBwcml2YWN5IGZpbHRlciwgc2VlIFx1MDAyNmVudW0gaWVlZTgwMjExX3ByaXZhY3lcbiAgKiBAdXNlX2ZvcjogaW5kaWNhdGVzIHdoaWNoIHVzZSBpcyBpbnRlbmRlZFxuKyAqIEBleHRhY2s6IChvcHRpb25hbCkgZXh0YWNrIHRoYXQgaXMgZmlsbGVkIHdpdGggdGhlIHJlYXNvbiB3aGVuIG5vXG4rICpcdHVzYWJsZSBlbnRyeSB3YXMgZm91bmQ7IG1heSBiZSAlTlVMTFxuICAqXG4gICogUmV0dXJuOiBSZWZlcmVuY2UtY291bnRlZCBCU1Mgb24gc3VjY2Vzcy4gJU5VTEwgb24gZXJyb3IuXG4gICovXG5AQCAtODQzMyw3ICs4NDM1LDggQEAgc3RydWN0IGNmZzgwMjExX2JzcyAqX19jZmc4MDIxMV9nZXRfYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gXHRcdFx0XHRcdGNvbnN0IHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4sXG4gXHRcdFx0XHRcdGVudW0gaWVlZTgwMjExX2Jzc190eXBlIGJzc190eXBlLFxuIFx0XHRcdFx0XHRlbnVtIGllZWU4MDIxMV9wcml2YWN5IHByaXZhY3ksXG4tXHRcdFx0XHRcdHUzMiB1c2VfZm9yKTtcbitcdFx0XHRcdFx0dTMyIHVzZV9mb3IsXG4rXHRcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4gXG4gLyoqXG4gICogY2ZnODAyMTFfZ2V0X2JzcyAtIGdldCBhIEJTUyByZWZlcmVuY2VcbkBAIC04NDU3LDcgKzg0NjAsNyBAQCBjZmc4MDIxMV9nZXRfYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCxcbiB7XG4gXHRyZXR1cm4gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBjaGFubmVsLCBic3NpZCwgc3NpZCwgc3NpZF9sZW4sXG4gXHRcdFx0XHQgIGJzc190eXBlLCBwcml2YWN5LFxuLVx0XHRcdFx0ICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCk7XG4rXHRcdFx0XHQgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBOVUxMKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuaW5kZXggZDk2MmI1OTQ0NTMzOWEuLmFjMGMwZGE0NTI0MTkxIDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuKysrIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuQEAgLTEyODkwLDkgKzEyODkwLDExIEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9hdXRoZW50aWNhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbi1cdHJlcS5ic3MgPSBjZmc4MDIxMV9nZXRfYnNzKFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIGNoYW4sIGJzc2lkLCBzc2lkLCBzc2lkX2xlbixcbi1cdFx0XHRcdCAgIElFRUU4MDIxMV9CU1NfVFlQRV9FU1MsXG4tXHRcdFx0XHQgICBJRUVFODAyMTFfUFJJVkFDWV9BTlkpO1xuK1x0cmVxLmJzcyA9IF9fY2ZnODAyMTFfZ2V0X2JzcyhcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCBjaGFuLCBic3NpZCwgc3NpZCwgc3NpZF9sZW4sXG4rXHRcdFx0XHQgICAgIElFRUU4MDIxMV9CU1NfVFlQRV9FU1MsXG4rXHRcdFx0XHQgICAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcbitcdFx0XHRcdCAgICAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwsXG4rXHRcdFx0XHQgICAgIGluZm8tXHUwMDNlZXh0YWNrKTtcbiBcdGlmICghcmVxLmJzcylcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG5AQCAtMTMwMzcsNiArMTMwMzksNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfY3J5cHRvX3NldHRpbmdzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9ic3MgKm5sODAyMTFfYXNzb2NfYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbitcdFx0XHRcdFx0ICAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbiBcdFx0XHRcdFx0ICAgICAgY29uc3QgdTggKnNzaWQsIGludCBzc2lkX2xlbixcbiBcdFx0XHRcdFx0ICAgICAgc3RydWN0IG5sYXR0ciAqKmF0dHJzLFxuIFx0XHRcdFx0XHQgICAgICBpbnQgYXNzb2NfbGlua19pZCwgaW50IGxpbmtfaWQpXG5AQCAtMTMwNDYsOCArMTMwNDksMTAgQEAgc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9ic3MgKm5sODAyMTFfYXNzb2NfYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZVxuIFx0Y29uc3QgdTggKmJzc2lkO1xuIFx0dTMyIGZyZXEsIHVzZV9mb3IgPSAwO1xuIFxuLVx0aWYgKCFhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSB8fCAhYXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKVxuK1x0aWYgKCFhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSB8fCAhYXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKSB7XG4rXHRcdEdFTkxfU0VUX0VSUl9NU0coaW5mbywgXCJCU1NJRCBvciBmcmVxdWVuY3kgbWlzc2luZ1wiKTtcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4rXHR9XG4gXG4gXHRic3NpZCA9IG5sYV9kYXRhKGF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTtcbiBcbkBAIC0xMzA1Niw4ICsxMzA2MSwxMCBAQCBzdGF0aWMgc3RydWN0IGNmZzgwMjExX2JzcyAqbmw4MDIxMV9hc3NvY19ic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlXG4gXHRcdGZyZXEgKz0gbmxhX2dldF91MzIoYXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFfT0ZGU0VUXSk7XG4gXG4gXHRjaGFuID0gbmw4MDIxMV9nZXRfdmFsaWRfY2hhbihcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCBmcmVxKTtcbi1cdGlmICghY2hhbilcbitcdGlmICghY2hhbikge1xuK1x0XHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFwiaW52YWxpZCBvciBkaXNhYmxlZCBjaGFubmVsXCIpO1xuIFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbitcdH1cbiBcbiBcdGlmIChhc3NvY19saW5rX2lkIFx1MDAzZT0gMClcbiBcdFx0dXNlX2ZvciA9IE5MODAyMTFfQlNTX1VTRV9GT1JfTUxEX0xJTks7XG5AQCAtMTMwNjgsNyArMTMwNzUsNyBAQCBzdGF0aWMgc3RydWN0IGNmZzgwMjExX2JzcyAqbmw4MDIxMV9hc3NvY19ic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlXG4gXHRcdFx0XHQgc3NpZCwgc3NpZF9sZW4sXG4gXHRcdFx0XHQgSUVFRTgwMjExX0JTU19UWVBFX0VTUyxcbiBcdFx0XHRcdCBJRUVFODAyMTFfUFJJVkFDWV9BTlksXG4tXHRcdFx0XHQgdXNlX2Zvcik7XG4rXHRcdFx0XHQgdXNlX2ZvciwgaW5mby1cdTAwM2VleHRhY2spO1xuIFx0aWYgKCFic3MpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuIFxuQEAgLTEzMTA3LDEzICsxMzExNCwxMyBAQCBzdGF0aWMgaW50IG5sODAyMTFfcHJvY2Vzc19saW5rcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiBcdFx0bGlua3NbbGlua19pZF0uYnNzID1cbi1cdFx0XHRubDgwMjExX2Fzc29jX2JzcyhyZGV2LCBzc2lkLCBzc2lkX2xlbiwgYXR0cnMsXG4rXHRcdFx0bmw4MDIxMV9hc3NvY19ic3MocmRldiwgaW5mbywgc3NpZCwgc3NpZF9sZW4sIGF0dHJzLFxuIFx0XHRcdFx0XHQgIGFzc29jX2xpbmtfaWQsIGxpbmtfaWQpO1xuIFx0XHRpZiAoSVNfRVJSKGxpbmtzW2xpbmtfaWRdLmJzcykpIHtcbiBcdFx0XHRlcnIgPSBQVFJfRVJSKGxpbmtzW2xpbmtfaWRdLmJzcyk7XG4gXHRcdFx0bGlua3NbbGlua19pZF0uYnNzID0gTlVMTDtcbi1cdFx0XHROTF9TRVRfRVJSX01TR19BVFRSKGluZm8tXHUwMDNlZXh0YWNrLCBsaW5rLFxuLVx0XHRcdFx0XHQgICAgXCJFcnJvciBmZXRjaGluZyBCU1MgZm9yIGxpbmtcIik7XG4rXHRcdFx0LyogdGhlIEJTUyBsb29rdXAgc2V0IHRoZSBzcGVjaWZpYyBtZXNzYWdlIGFscmVhZHkgKi9cbitcdFx0XHROTF9TRVRfQkFEX0FUVFIoaW5mby1cdTAwM2VleHRhY2ssIGxpbmspO1xuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbiBcbkBAIC0xMzMyOSw3ICsxMzMzNiw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9hc3NvY2lhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0aWYgKHJlcS5saW5rX2lkIFx1MDAzZT0gMClcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdFx0cmVxLmJzcyA9IG5sODAyMTFfYXNzb2NfYnNzKHJkZXYsIHNzaWQsIHNzaWRfbGVuLCBpbmZvLVx1MDAzZWF0dHJzLFxuK1x0XHRyZXEuYnNzID0gbmw4MDIxMV9hc3NvY19ic3MocmRldiwgaW5mbywgc3NpZCwgc3NpZF9sZW4sIGluZm8tXHUwMDNlYXR0cnMsXG4gXHRcdFx0XHRcdCAgICAtMSwgLTEpO1xuIFx0XHRpZiAoSVNfRVJSKHJlcS5ic3MpKVxuIFx0XHRcdHJldHVybiBQVFJfRVJSKHJlcS5ic3MpO1xuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9zY2FuLmMgYi9uZXQvd2lyZWxlc3Mvc2Nhbi5jXG5pbmRleCBlNjJiN2RkMmI3YzJkOC4uOTBhNGYyODU2NTRmOTQgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3Mvc2Nhbi5jXG4rKysgYi9uZXQvd2lyZWxlc3Mvc2Nhbi5jXG5AQCAtMTYwOSwxMCArMTYwOSwxMiBAQCBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpfX2NmZzgwMjExX2dldF9ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSxcbiBcdFx0XHRcdFx0Y29uc3QgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbixcbiBcdFx0XHRcdFx0ZW51bSBpZWVlODAyMTFfYnNzX3R5cGUgYnNzX3R5cGUsXG4gXHRcdFx0XHRcdGVudW0gaWVlZTgwMjExX3ByaXZhY3kgcHJpdmFjeSxcbi1cdFx0XHRcdFx0dTMyIHVzZV9mb3IpXG4rXHRcdFx0XHRcdHUzMiB1c2VfZm9yLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fcmRldih3aXBoeSk7XG4gXHRzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpic3MsICpyZXMgPSBOVUxMO1xuK1x0Ym9vbCBleHBpcmVkID0gZmFsc2UsIHVudXNhYmxlID0gZmFsc2U7XG4gXHR1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7XG4gXHRpbnQgYnNzX3ByaXZhY3k7XG4gXG5AQCAtMTYzNCwyMiArMTYzNiw0OCBAQCBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpfX2NmZzgwMjExX2dldF9ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSxcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGJzcy1cdTAwM2VwdWIuYnNzaWQpKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRpZiAoKGJzcy1cdTAwM2VwdWIudXNlX2ZvciBcdTAwMjYgdXNlX2ZvcikgIT0gdXNlX2ZvcilcbitcdFx0aWYgKCFpc19ic3MoXHUwMDI2YnNzLVx1MDAzZXB1YiwgYnNzaWQsIHNzaWQsIHNzaWRfbGVuKSlcbiBcdFx0XHRjb250aW51ZTtcbitcbitcdFx0LypcbitcdFx0ICogVGhlIGlkZW50aXR5IGNoZWNrcyBhYm92ZSBtdXN0IGFsbCBjb21lIGZpcnN0IHNvIHRoYXRcbitcdFx0ICogdGhlIGV4cGlyZWQvdW51c2FibGUgY2xhc3NpZmljYXRpb24gYmVsb3cgb25seSBldmVyXG4rXHRcdCAqIGFwcGxpZXMgdG8gZW50cmllcyB0aGF0IGFjdHVhbGx5IG1hdGNoIHRoZSByZXF1ZXN0LlxuK1x0XHQgKi9cbitcbiBcdFx0LyogRG9uJ3QgZ2V0IGV4cGlyZWQgQlNTIHN0cnVjdHMgKi9cbiBcdFx0aWYgKHRpbWVfYWZ0ZXIobm93LCBic3MtXHUwMDNldHMgKyBJRUVFODAyMTFfU0NBTl9SRVNVTFRfRVhQSVJFKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICFhdG9taWNfcmVhZChcdTAwMjZic3MtXHUwMDNlaG9sZCkpXG4rXHRcdCAgICAhYXRvbWljX3JlYWQoXHUwMDI2YnNzLVx1MDAzZWhvbGQpKSB7XG4rXHRcdFx0ZXhwaXJlZCA9IHRydWU7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbitcdFx0aWYgKChic3MtXHUwMDNlcHViLnVzZV9mb3IgXHUwMDI2IHVzZV9mb3IpICE9IHVzZV9mb3IpIHtcbitcdFx0XHR1bnVzYWJsZSA9IHRydWU7XG4gXHRcdFx0Y29udGludWU7XG4tXHRcdGlmIChpc19ic3MoXHUwMDI2YnNzLVx1MDAzZXB1YiwgYnNzaWQsIHNzaWQsIHNzaWRfbGVuKSkge1xuLVx0XHRcdHJlcyA9IGJzcztcbi1cdFx0XHRic3NfcmVmX2dldChyZGV2LCByZXMpO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHR9XG4rXG4rXHRcdHJlcyA9IGJzcztcbitcdFx0YnNzX3JlZl9nZXQocmRldiwgcmVzKTtcbitcdFx0YnJlYWs7XG4gXHR9XG4gXG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZyZGV2LVx1MDAzZWJzc19sb2NrKTtcbi1cdGlmICghcmVzKVxuK1x0aWYgKCFyZXMpIHtcbitcdFx0aWYgKGV4cGlyZWQgXHUwMDI2XHUwMDI2IHVudXNhYmxlKVxuK1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbitcdFx0XHRcdCAgICAgICBcIkJTUyBlbnRyaWVzIGFyZSBleHBpcmVkIG9yIGNhbm5vdCBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdGVkIG9wZXJhdGlvblwiKTtcbitcdFx0ZWxzZSBpZiAodW51c2FibGUpXG4rXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHRcdFx0ICAgICAgIFwiQlNTIGNhbm5vdCBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdGVkIG9wZXJhdGlvblwiKTtcbitcdFx0ZWxzZSBpZiAoZXhwaXJlZClcbitcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4rXHRcdFx0XHQgICAgICAgXCJCU1MgZW50cnkgaW4gc2NhbiByZXN1bHRzIGlzIGV4cGlyZWRcIik7XG4rXHRcdGVsc2VcbitcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4rXHRcdFx0XHQgICAgICAgXCJCU1Mgbm90IGZvdW5kIGluIHNjYW4gcmVzdWx0c1wiKTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4gXHR0cmFjZV9jZmc4MDIxMV9yZXR1cm5fYnNzKFx1MDAyNnJlcy1cdTAwM2VwdWIpO1xuIFx0cmV0dXJuIFx1MDAyNnJlcy1cdTAwM2VwdWI7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy90ZXN0cy9zY2FuLmMgYi9uZXQvd2lyZWxlc3MvdGVzdHMvc2Nhbi5jXG5pbmRleCBiMWE5YzE0NjZkNmNiZC4uOGMyMDI3OGI1ZDNhNDQgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvdGVzdHMvc2Nhbi5jXG4rKysgYi9uZXQvd2lyZWxlc3MvdGVzdHMvc2Nhbi5jXG5AQCAtNDAyLDYgKzQwMiwxMjQgQEAgc3RhdGljIHZvaWQgdGVzdF9pbmZvcm1fYnNzX3NzaWRfb25seShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRjZmc4MDIxMV9wdXRfYnNzKHdpcGh5LCBic3MpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB0ZXN0X2dldF9ic3NfbWlzc19yZWFzb24oc3RydWN0IGt1bml0ICp0ZXN0KVxuK3tcbitcdHN0cnVjdCBpbmZvcm1fYnNzIGN0eCA9IHtcbitcdFx0LnRlc3QgPSB0ZXN0LFxuK1x0fTtcbitcdHN0cnVjdCB3aXBoeSAqd2lwaHkgPSBUX1dJUEhZKHRlc3QsIGN0eCk7XG4rXHRzdHJ1Y3QgY2ZnODAyMTFfaW5mb3JtX2JzcyBpbmZvcm1fYnNzID0ge1xuK1x0XHQuc2lnbmFsID0gNTAsXG4rXHRcdC5kcnZfZGF0YSA9IFx1MDAyNmN0eCxcbitcdH07XG4rXHRjb25zdCB1OCBic3NpZFtFVEhfQUxFTl0gPSB7IDB4MTAsIDB4MjIsIDB4MzMsIDB4NDQsIDB4NTUsIDB4NjYgfTtcbitcdGNvbnN0IHU4IG90aGVyX2Jzc2lkW0VUSF9BTEVOXSA9IHsgMHg2NiwgMHg1NSwgMHg0NCwgMHgzMywgMHgyMiwgMHgxMSB9O1xuK1x0c3RhdGljIGNvbnN0IHU4IGllc1tdID0ge1xuK1x0XHRbMF0gPSBXTEFOX0VJRF9TU0lELFxuK1x0XHRbMV0gPSA0LFxuK1x0XHRbMl0gPSAnVCcsICdFJywgJ1MnLCAnVCdcbitcdH07XG4rXHRzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICppYnNzO1xuK1x0c3RydWN0IG5ldGxpbmtfZXh0X2FjayBleHRhY2sgPSB7fTtcbitcdHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcywgKmJzczIsICpmb3VuZDtcbitcbitcdGluZm9ybV9ic3MuY2hhbiA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbF9raHood2lwaHksIE1IWl9UT19LSFooMjQxMikpO1xuK1x0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGluZm9ybV9ic3MuY2hhbik7XG4rXG4rXHRic3MgPSBjZmc4MDIxMV9pbmZvcm1fYnNzX2RhdGEod2lwaHksIFx1MDAyNmluZm9ybV9ic3MsXG4rXHRcdFx0XHQgICAgICAgQ0ZHODAyMTFfQlNTX0ZUWVBFX1BSRVNQLCBic3NpZCwgMCxcbitcdFx0XHRcdCAgICAgICAweDEyMzQsIDEwMCwgaWVzLCBzaXplb2YoaWVzKSxcbitcdFx0XHRcdCAgICAgICBHRlBfS0VSTkVMKTtcbitcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBic3MpO1xuK1x0aWJzcyA9IGNvbnRhaW5lcl9vZihic3MsIHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MsIHB1Yik7XG4rXG4rXHQvKiBGcmVzaCB1c2FibGUgZW50cnk6IGZvdW5kLCBubyBtZXNzYWdlIGlzIHNldCAqL1xuK1x0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIGJzc2lkLCBOVUxMLCAwLFxuK1x0XHRcdFx0ICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSxcbitcdFx0XHRcdCAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcbitcdFx0XHRcdCAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBcdTAwMjZleHRhY2spO1xuK1x0S1VOSVRfQVNTRVJUX1BUUl9FUSh0ZXN0LCBmb3VuZCwgYnNzKTtcbitcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGV4dGFjay5fbXNnKTtcbitcdGNmZzgwMjExX3B1dF9ic3Mod2lwaHksIGZvdW5kKTtcbitcbitcdC8qIE5vIGVudHJ5IGF0IGFsbCBmb3IgdGhpcyBCU1NJRCAqL1xuK1x0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIG90aGVyX2Jzc2lkLCBOVUxMLCAwLFxuK1x0XHRcdFx0ICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSxcbitcdFx0XHRcdCAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcbitcdFx0XHRcdCAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBcdTAwMjZleHRhY2spO1xuK1x0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZm91bmQpO1xuK1x0S1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLCBcIkJTUyBub3QgZm91bmQgaW4gc2NhbiByZXN1bHRzXCIpO1xuK1xuK1x0LyogRnJlc2ggZW50cnkgdGhhdCBpcyBub3QgdXNhYmxlIGZvciB0aGUgcmVxdWVzdGVkIHVzZSAqL1xuK1x0ZXh0YWNrLl9tc2cgPSBOVUxMO1xuK1x0YnNzLVx1MDAzZXVzZV9mb3IgPSAwO1xuK1x0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIGJzc2lkLCBOVUxMLCAwLFxuK1x0XHRcdFx0ICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSxcbitcdFx0XHRcdCAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcbitcdFx0XHRcdCAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBcdTAwMjZleHRhY2spO1xuK1x0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZm91bmQpO1xuK1x0S1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLFxuK1x0XHRcdCAgIFwiQlNTIGNhbm5vdCBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdGVkIG9wZXJhdGlvblwiKTtcbitcdGJzcy1cdTAwM2V1c2VfZm9yID0gTkw4MDIxMV9CU1NfVVNFX0ZPUl9BTEw7XG4rXG4rXHQvKiBFeHBpcmVkIGVudHJ5LCBcdTAwM2UgSUVFRTgwMjExX1NDQU5fUkVTVUxUX0VYUElSRSAoMzBzKSBvbGQgKi9cbitcdGV4dGFjay5fbXNnID0gTlVMTDtcbitcdGlic3MtXHUwMDNldHMgPSBqaWZmaWVzIC0gNjAgKiBIWjtcbitcdGZvdW5kID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBic3NpZCwgTlVMTCwgMCxcbitcdFx0XHRcdCAgIElFRUU4MDIxMV9CU1NfVFlQRV9BTlksXG4rXHRcdFx0XHQgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksXG4rXHRcdFx0XHQgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgXHUwMDI2ZXh0YWNrKTtcbitcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGZvdW5kKTtcbitcdEtVTklUX0VYUEVDVF9TVFJFUSh0ZXN0LCBleHRhY2suX21zZyxcbitcdFx0XHQgICBcIkJTUyBlbnRyeSBpbiBzY2FuIHJlc3VsdHMgaXMgZXhwaXJlZFwiKTtcbitcbitcdC8qIEFuIGVudHJ5IGJvdGggZXhwaXJlZCBhbmQgdW51c2FibGUgcmVwb3J0cyBleHBpcmVkICovXG4rXHRleHRhY2suX21zZyA9IE5VTEw7XG4rXHRic3MtXHUwMDNldXNlX2ZvciA9IDA7XG4rXHRmb3VuZCA9IF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgTlVMTCwgYnNzaWQsIE5VTEwsIDAsXG4rXHRcdFx0XHQgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxuK1x0XHRcdFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxuK1x0XHRcdFx0ICAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwsIFx1MDAyNmV4dGFjayk7XG4rXHRLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCBmb3VuZCk7XG4rXHRLVU5JVF9FWFBFQ1RfU1RSRVEodGVzdCwgZXh0YWNrLl9tc2csXG4rXHRcdFx0ICAgXCJCU1MgZW50cnkgaW4gc2NhbiByZXN1bHRzIGlzIGV4cGlyZWRcIik7XG4rXHRic3MtXHUwMDNldXNlX2ZvciA9IE5MODAyMTFfQlNTX1VTRV9GT1JfQUxMO1xuK1xuK1x0LyogRXhwaXJlZCBidXQgaGVsZCBlbnRyaWVzIGFyZSBzdGlsbCB1c2FibGUsIG5vIG1lc3NhZ2UgaXMgc2V0ICovXG4rXHRleHRhY2suX21zZyA9IE5VTEw7XG4rXHRhdG9taWNfc2V0KFx1MDAyNmlic3MtXHUwMDNlaG9sZCwgMSk7XG4rXHRmb3VuZCA9IF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgTlVMTCwgYnNzaWQsIE5VTEwsIDAsXG4rXHRcdFx0XHQgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxuK1x0XHRcdFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxuK1x0XHRcdFx0ICAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwsIFx1MDAyNmV4dGFjayk7XG4rXHRLVU5JVF9BU1NFUlRfUFRSX0VRKHRlc3QsIGZvdW5kLCBic3MpO1xuK1x0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZXh0YWNrLl9tc2cpO1xuK1x0Y2ZnODAyMTFfcHV0X2Jzcyh3aXBoeSwgZm91bmQpO1xuK1x0YXRvbWljX3NldChcdTAwMjZpYnNzLVx1MDAzZWhvbGQsIDApO1xuK1xuK1x0LypcbitcdCAqIFdpdGggb25lIG1hdGNoaW5nIGVudHJ5IGV4cGlyZWQgYW5kIGFub3RoZXIgY3VycmVudCBidXRcbitcdCAqIHVudXNhYmxlLCBib3RoIHJlYXNvbnMgYXJlIHJlcG9ydGVkLlxuK1x0ICovXG4rXHRic3MyID0gY2ZnODAyMTFfaW5mb3JtX2Jzc19kYXRhKHdpcGh5LCBcdTAwMjZpbmZvcm1fYnNzLFxuK1x0XHRcdFx0XHRDRkc4MDIxMV9CU1NfRlRZUEVfUFJFU1AsIG90aGVyX2Jzc2lkLFxuK1x0XHRcdFx0XHQwLCAweDEyMzQsIDEwMCwgaWVzLCBzaXplb2YoaWVzKSxcbitcdFx0XHRcdFx0R0ZQX0tFUk5FTCk7XG4rXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgYnNzMik7XG4rXHRic3MyLVx1MDAzZXVzZV9mb3IgPSAwO1xuK1x0ZXh0YWNrLl9tc2cgPSBOVUxMO1xuK1x0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIE5VTEwsIFwiVEVTVFwiLCA0LFxuK1x0XHRcdFx0ICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSxcbitcdFx0XHRcdCAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcbitcdFx0XHRcdCAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBcdTAwMjZleHRhY2spO1xuK1x0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZm91bmQpO1xuK1x0S1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLFxuK1x0XHRcdCAgIFwiQlNTIGVudHJpZXMgYXJlIGV4cGlyZWQgb3IgY2Fubm90IGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uXCIpO1xuK1xuK1x0Y2ZnODAyMTFfcHV0X2Jzcyh3aXBoeSwgYnNzMik7XG4rXHRjZmc4MDIxMV9wdXRfYnNzKHdpcGh5LCBic3MpO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IGluZm9ybV9ic3NfbWxfc3RhX2Nhc2Uge1xuIFx0Y29uc3QgY2hhciAqZGVzYztcbiBcdGludCBtbGRfaWQ7XG5AQCAtNjE3LDcgKzczNSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW5mb3JtX2Jzc19tbF9zdGEoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0bGlua19ic3MgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIHN0YV9wcm9mLmJzc2lkLCBOVUxMLCAwLFxuIFx0XHRcdFx0ICAgICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSxcbiBcdFx0XHRcdCAgICAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcbi1cdFx0XHRcdCAgICAgIDApO1xuK1x0XHRcdFx0ICAgICAgMCwgTlVMTCk7XG4gXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgbGlua19ic3MpO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGxpbmtfYnNzLVx1MDAzZXNpZ25hbCwgMCk7XG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgbGlua19ic3MtXHUwMDNlYmVhY29uX2ludGVydmFsLFxuQEAgLTg1NSw2ICs5NzMsNyBAQCBrdW5pdF90ZXN0X3N1aXRlKGdlbl9uZXdfaWUpO1xuIFxuIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBpbmZvcm1fYnNzX3Rlc3RfY2FzZXNbXSA9IHtcbiBcdEtVTklUX0NBU0UodGVzdF9pbmZvcm1fYnNzX3NzaWRfb25seSksXG4rXHRLVU5JVF9DQVNFKHRlc3RfZ2V0X2Jzc19taXNzX3JlYXNvbiksXG4gXHRLVU5JVF9DQVNFX1BBUkFNKHRlc3RfaW5mb3JtX2Jzc19tbF9zdGEsIGluZm9ybV9ic3NfbWxfc3RhX2dlbl9wYXJhbXMpLFxuIFx0e31cbiB9O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDE6NTA6MTYuMjI3NjI1MjIzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY2MzI5NTE2MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBBbmFseXNpcyBvZiBXaXJlbGVzcyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgZXNzZW50aWFsbHkgYWJvdXQgaW1wcm92aW5nIGVycm9yIHJlcG9ydGluZyBpbiB0aGUgd2lyZWxlc3Mgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgd2hlbiBhIEJTUyAoQmFzaWMgU2VydmljZSBTZXQpIGlzbid0IGZvdW5kIG9yIGNhbid0IGJlIHVzZWQuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gY2hhbmdlcyByZXZvbHZlIGFyb3VuZCBsZXZlcmFnaW5nIHRoZSBgZXh0YWNrYCBwYXJhbWV0ZXIgdG8gcHJvdmlkZSBtb3JlIGRldGFpbGVkIGVycm9yIG1lc3NhZ2VzIGJhY2sgdG8gdXNlcnNwYWNlIHZpYSBOZXRsaW5rLiBXZSdyZSBtb2RpZnlpbmcgYF9fY2ZnODAyMTFfZ2V0X2Jzc2AsIGBubDgwMjExX2Fzc29jX2Jzc2AsIGFuZCBhZGRpbmcgYSBrdW5pdCB0ZXN0IGZvciB0aGlzIG5ldyBlcnJvciBwYXRoLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgKmZ1bmN0aW9uYWwqIGNoYW5nZXMgdGhhdCBjb3VsZCBpbXBhY3QgdGhlIGtlcm5lbCdzIGV4ZWN1dGlvbiBmbG93IGFuZCB0aHVzIHJlcXVpcmUgZnV6emluZy4gVGhlIGJ1bGsgb2YgaXQgaXMgZm9jdXNlZCBvbiB0aGVzZSBgZXh0YWNrYCBtZXNzYWdlcywgd2hpY2ggYXJlIGZvciBpbXByb3ZlZCBlcnJvciByZXBvcnRpbmcsIGFuZCBJJ20gdHJlYXRpbmcgdGhpcyBsaWtlIGluZm9ybWF0aXZlIGxvZ2dpbmcgZm9yIGZ1enppbmcgcHVycG9zZXMuXG5cbkkgc2VlIHRoZXJlJ3MgYSBzbGlnaHQgcmVvcmRlcmluZyBvZiBjaGVja3MgaW4gYF9fY2ZnODAyMTFfZ2V0X2Jzc2A6IHRoZSBvcmRlciBvZiB0aGUgY29uZGl0aW9ucyBpbiB0aGUgbG9vcCBoYXMgYmVlbiBjaGFuZ2VkLiAgQmVmb3JlLCB3ZSBmaWx0ZXJlZCBieSBgdXNlX2ZvcmAsIHRoZW4gZXhwaXJhdGlvbiwgYW5kIGZpbmFsbHkgY2hlY2tlZCBmb3IgdGhlIG1hdGNoaW5nIEJTU0lEL1NTSUQuIE5vdywgd2UgY2hlY2sgZm9yIEJTU0lEL1NTSUQgZmlyc3QsIHRoZW4gZXhwaXJhdGlvbiBhbmQgYHVzZV9mb3JgLiBUaGlzIG1hZGUgbWUgcGF1c2UuIERvZXMgdGhpcyAqYWN0dWFsbHkqIGNoYW5nZSB3aGljaCBCU1MgaXMgc2VsZWN0ZWQgaWYgbXVsdGlwbGUgZXhpc3Q/IEFmdGVyIGEgY2xvc2VyIGxvb2ssIHRoZSBsb2dpYyByZW1haW5zIHRoZSBzYW1lLiAgSWYgYSBCU1MgZG9lc24ndCBtZWV0IHRoZSBpbml0aWFsIGNyaXRlcmlhLCB3ZSBza2lwIGl0IGFuZCBjb250aW51ZSB0byB0aGUgbmV4dCBvbmUuIFRoZSBrZXkgaXMgdGhhdCBldmVuIHRob3VnaCB0aGUgb3JkZXIgb2YgY2hlY2tzIGhhcyBjaGFuZ2VkLCB0aGUgb3V0Y29tZSAtIHRoZSBCU1Mgc2VsZWN0ZWQgLSByZW1haW5zIGlkZW50aWNhbC4gUHJldmlvdXNseSwgdGhlIGNvbmRpdGlvbiB3YXMgYChic3MtXHUwMDNlcHViLnVzZV9mb3IgXHUwMDI2IHVzZV9mb3IpICE9IHVzZV9mb3JgIGZvciBza2lwcGluZyBidXQgdGhlIG5ldyBjb25kaXRpb24gaXMgYCFpc19ic3MoKWAuXG5UaGUgbWFpbiBkaWZmZXJlbmNlIGlzIHRoZSBjb25kaXRpb25hbCBzZXR0aW5nIG9mIHRoZSBgZXhwaXJlZGAgYW5kIGB1bnVzYWJsZWAgdmFyaWFibGVzIGluc2lkZSB0aGUgbG9vcCwgYWxsb3dpbmcgdXMgdG8gcmV0dXJuIGEgbW9yZSBwcmVjaXNlIGVycm9yIGNvZGUgdG8gdGhlIHVzZXIuXG5cbkxvb2tpbmcgYXQgYG5sODAyMTFfcHJvY2Vzc19saW5rc2AgYW5kIGBubDgwMjExX2Fzc29jX2Jzc2AsIHRoZXNlIGNoYW5nZXMgYWxzbyBpbnZvbHZlIGFkanVzdG1lbnRzIHRvIGVycm9yIG1lc3NhZ2VzIHVzaW5nIGBOTF9TRVRfQkFEX0FUVFJgIGFuZCBgR0VOTF9TRVRfRVJSX01TR2AuICBJdCBsb29rcyBsaWtlIHRoZXNlIGFyZSBqdXN0IGRpZmZlcmVudCBzdHJpbmcgbWVzc2FnZXMgdG8gY29udmV5IHdoYXQgaXMgaGFwcGVuaW5nLlxuXG5UaGUgY29kZSBmbG93LCB0aGUgc2VsZWN0aW9uIG9mIHRoZSBjb3JyZWN0IEJTUywgaXMgdGhlIHNhbWUuICBUaGUgY2hhbmdlcyBzZWVtIHNvbGVseSBmb2N1c2VkIG9uICp3aGF0KiBlcnJvciBpbmZvcm1hdGlvbiBpcyBiZWluZyBzZW50IGJhY2sgdGhyb3VnaCBOZXRsaW5rLiBUaGlzIGlzIGxhcmdlbHkgYSB1c2VyLXNwYWNlLWZhY2luZyBpbXByb3ZlbWVudC4gVGhpcyBkb2VzIG5vdCBpbnRyb2R1Y2UgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHJlcXVpcmVzIGZ1enppbmcuIFRoZSBrdW5pdCB0ZXN0IGlzIHB1cmVseSBhIHVuaXQgdGVzdCBhbmQgZG9lc24ndCB3YXJyYW50IGZ1enppbmcuXG5cbk15IGNvbmNsdXNpb24gaXMgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcga2VybmVsIGJlaGF2aW9yIHRoYXQgZGlyZWN0bHkgYWx0ZXJzIHByb2dyYW0gZmxvdyBvciB3b3VsZCBjcmVhdGUgbmV3IHZ1bG5lcmFiaWxpdHkgc3VyZmFjZSBmcm9tIGEga2VybmVsIHBlcnNwZWN0aXZlIGFuZCB0aGVyZWZvcmUgZG9lcyBub3Qgd2FycmFudCBhbnkgZnV6emluZy4gIFRoZSBgZXh0YWNrYCBwYXJhbWV0ZXIgaXMgdXNlZCBmb3IgbW9yZSBkZXNjcmlwdGl2ZSBlcnJvciByZXBvcnRpbmcgdG8gdXNlcnNwYWNlLCBidXQgdGhlIGtlcm5lbCdzIGNvcmUgbG9naWMgcmVtYWlucyB1bmNoYW5nZWQuIEknbSBnb2luZyB0byBxdWlja2x5IGRvdWJsZSBjaGVjayB0aGUgYGlzX2Jzc2AgZnVuY3Rpb24ganVzdCB0byBiZSBzdXJlLi4uIGFuZCB0aGF0IGlzIHNpZGUgZWZmZWN0IGZyZWUuIEknbSBjb25maWRlbnQgaW4gdGhpcyBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDY1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc5MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAxOjUwOjMyLjg2MDU3OTczWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjg1NzI0MiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0YXRpYyBpbmxpbmUgYm9vbCBpc19ic3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzL3NjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDE6NTA6MzIuOTc3NDQyOTUyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwNDM0MjcyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIExvY2F0aW9uIG9mIGBpc19ic3NgKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB3aGVyZSBgaXNfYnNzYCBpcyBkZWZpbmVkLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHRoYXQgaXQncyBwcm9iYWJseSB3aXRoaW4gdGhlIGBuZXQvd2lyZWxlc3Mvc2Nhbi5jYCBmaWxlLiBJdCdzIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgd2lyZWxlc3Mgc2Nhbm5pbmcgcHJvY2VzcywgYW5kIHRoYXQncyBhIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuIEhvd2V2ZXIsIEknbSBhbHNvIGJldHRpbmcgaXQgbWlnaHQgKm5vdCogYmUgYSBzaW1wbGUgaW5saW5lIGZ1bmN0aW9uIGRpcmVjdGx5IHdpdGhpbiB0aGF0IGAuY2AgZmlsZS4gR2l2ZW4gdGhlIHN0cnVjdHVyZSBvZiB0aGUga2VybmVsLCBpdCdzIGp1c3QgYXMgbGlrZWx5IHRoYXQgaXQncyBkZWZpbmVkIGluIGEgaGVhZGVyIGZpbGUgaW5jbHVkZWQgYnkgYHNjYW4uY2AsIG1heWJlIHNvbWV0aGluZyByZWxhdGVkIHRvIEJTUyBzdHJ1Y3R1cmVzIG9yIHdpcmVsZXNzIGRldmljZSBjaGFyYWN0ZXJpc3RpY3MuIEkgbmVlZCB0byBiZSByZWFkeSB0byBjaGVjayBhIGhlYWRlciBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTg2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDE6NTA6MzYuMTgxNzg3Mzc2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDk2NjcwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJib29sIGlzX2Jzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9zY2FuLmM9NDA0PUVYUE9SVF9TWU1CT0xfSUZfQ0ZHODAyMTFfS1VOSVQoY2ZnODAyMTFfZ2VuX25ld19pZSk7XFxubmV0L3dpcmVsZXNzL3NjYW4uYy00MDUtXFxubmV0L3dpcmVsZXNzL3NjYW4uYzo0MDY6c3RhdGljIGJvb2wgaXNfYnNzKHN0cnVjdCBjZmc4MDIxMV9ic3MgKmEsIGNvbnN0IHU4ICpic3NpZCxcXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTQwNy1cXHRcXHQgICBjb25zdCB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMTo1MDozNi4yODI3NjEzNjlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTkyODc1MjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiAnaXNfYnNzJyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBpc19ic3NgIGZ1bmN0aW9uLiBJIHNlZSB0aGlzIHF1aXRlIGEgYml0IHdoZW4gSSdtIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbGlua2VyIHNjcmlwdHMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCBjb250ZXh0IGl0J3MgYmVpbmcgdXNlZCBpbi4gSXMgaXQgYSBmdW5jdGlvbiBjYWxsLCBhIG1hY3JvLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIGl0J3MgbGlrZWx5IGNoZWNraW5nIGlmIGEgZ2l2ZW4gc2VjdGlvbiBvciBhZGRyZXNzIGZhbGxzIHdpdGhpbiB0aGUgQlNTIChCbG9jayBTdGFydGVkIGJ5IFN5bWJvbCkgcmVnaW9uIG9mIG1lbW9yeS4gVGhhdCdzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBiZWNhdXNlIHRoZSBCU1MgaXMgd2hlcmUgd2UgcGxhY2UgdW5pbml0aWFsaXplZCBnbG9iYWwgYW5kIHN0YXRpYyB2YXJpYWJsZXMuXG5cbk15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHJ1bm5pbmcgdGhyb3VnaCBwb3NzaWJsZSB1c2UgY2FzZXMuIElzIHRoaXMgYmVpbmcgdXNlZCBkdXJpbmcgYSBsaW5rZXIgc2NyaXB0IHN0YWdlIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBzZWN0aW9ucyBmb3IgcGxhY2VtZW50PyBPciBtYXliZSBpdCdzIHdpdGhpbiBhIHJ1bnRpbWUgZW52aXJvbm1lbnQsIHRvIGRldGVybWluZSB3aGV0aGVyIGEgcG9pbnRlciByZWZlcnMgdG8gYSBCU1MgdmFyaWFibGUgYmVmb3JlIGluaXRpYWxpemluZyBpdCwgb3IgcGVyZm9ybWluZyBzb21lIG90aGVyIG1lbW9yeSBvcGVyYXRpb24/IENvbnRleHQgd2lsbCBiZSBrZXkgaGVyZS5cblxuSSdkIGV4cGVjdCB0aGUgaW1wbGVtZW50YXRpb24gdG8gaW52b2x2ZSBzb21lIGtpbmQgb2YgcmFuZ2UgY2hlY2suIEl0IHdvdWxkIGxpa2VseSBjb21wYXJlIHRoZSBwcm92aWRlZCBhZGRyZXNzIG9yIHNlY3Rpb24gYWdhaW5zdCB0aGUgc3RhcnQgYW5kIGVuZCBhZGRyZXNzZXMgb2YgdGhlIEJTUyBzZWdtZW50LiBJJ2QgYmUgY3VyaW91cyB0byBzZWUgaG93IHRob3NlIHN0YXJ0IGFuZCBlbmQgYWRkcmVzc2VzIGFyZSBiZWluZyBkZXRlcm1pbmVkLCBwcm9iYWJseSB0aHJvdWdoIGxpbmtlci1kZWZpbmVkIHN5bWJvbHMgbGlrZSBgX2Jzc19zdGFydGAgYW5kIGBfYnNzX2VuZGAuIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSB0eXBlcyBpdCdzIHVzaW5nIGZvciB0aGVzZSBhZGRyZXNzZXMg4oCTIGlzIGl0IHVzaW5nIGB1aW50cHRyX3RgLCByYXcgcG9pbnRlcnMsIG9yIHNvbWV0aGluZyBlbHNlPyBVbmRlcnN0YW5kaW5nIHRoZSBkYXRhIHR5cGVzIHVzZWQgaXMgYWx3YXlzIGNyaXRpY2FsIGZvciBhdm9pZGluZyBzdWJ0bGUgaW50ZWdlciBvdmVyZmxvd3Mgb3IgaW5jb3JyZWN0IGNvbXBhcmlzb25zLlxuXG5BZGRpdGlvbmFsbHksIEknZCBhbHNvIGJlIGN1cmlvdXMgYWJvdXQgd2hhdCBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyBtaWdodCBoYXZlIGJlZW4gdXNlZCB3aXRoaW4gdGhlIGZ1bmN0aW9uLiBJcyBpdCByZWx5aW5nIG9uIGNvbXBpbGVyIGludHJpbnNpY3MgdG8gbWFrZSB0aGUgcmFuZ2UgY2hlY2sgZmFzdGVyLCBvciBpcyBpdCB1c2luZyBhIHNpbXBsZSBjb21wYXJpc29uPyBJZiBpdCdzIGEgY3JpdGljYWwgc2VjdGlvbiBvZiBjb2RlLCBvciBiZWluZyBoZWF2aWx5IHVzZWQsIEkgd291bGQgZXhwZWN0IGl0IHRvIGJlIHdlbGwtb3B0aW1pemVkLiBJJ20ga2VlbiB0byBleGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiB0byBzZWUgaWYgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZWRnZSBjYXNlcyBwcm9wZXJseSwgc3VjaCBhcyB3aGVuIHRoZSBzdGFydCBhbmQgZW5kIG9mIEJTUyBhcmUgdGhlIHNhbWUsIG9yIHdoZW4gdGhlIHZhbHVlIGJlaW5nIGNoZWNrZWQgaXMgcmlnaHQgYXQgZWl0aGVyIGJvdW5kYXJ5LiBBbGwgb2YgdGhvc2UgZGV0YWlscyBhcmUgZ29pbmcgdG8gYmUgbmVjZXNzYXJ5IHRvIHVuZGVyc3RhbmQgaXRzIHRydWUgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NTksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAxOjUwOjQwLjg3NTYzOTk5MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3Mvc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwNixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQwNjpcXHRzdGF0aWMgYm9vbCBpc19ic3Moc3RydWN0IGNmZzgwMjExX2JzcyAqYSwgY29uc3QgdTggKmJzc2lkLFxcbiA0MDc6XFx0XFx0XFx0ICAgY29uc3QgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbilcXG4gNDA4OlxcdHtcXG4gNDA5OlxcdFxcdGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9ic3NfaWVzICppZXM7XFxuIDQxMDpcXHRcXHRjb25zdCBzdHJ1Y3QgZWxlbWVudCAqc3NpZF9lbGVtO1xcbiA0MTE6XFx0XFxuIDQxMjpcXHRcXHRpZiAoYnNzaWQgXFx1MDAyNlxcdTAwMjYgIWV0aGVyX2FkZHJfZXF1YWwoYS1cXHUwMDNlYnNzaWQsIGJzc2lkKSlcXG4gNDEzOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNDE0OlxcdFxcbiA0MTU6XFx0XFx0aWYgKCFzc2lkKVxcbiA0MTY6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDQxNzpcXHRcXG4gNDE4OlxcdFxcdGllcyA9IHJjdV9hY2Nlc3NfcG9pbnRlcihhLVxcdTAwM2VpZXMpO1xcbiA0MTk6XFx0XFx0aWYgKCFpZXMpXFxuIDQyMDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDQyMTpcXHRcXHRzc2lkX2VsZW0gPSBjZmc4MDIxMV9maW5kX2VsZW0oV0xBTl9FSURfU1NJRCwgaWVzLVxcdTAwM2VkYXRhLCBpZXMtXFx1MDAzZWxlbik7XFxuIDQyMjpcXHRcXHRpZiAoIXNzaWRfZWxlbSlcXG4gNDIzOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNDI0OlxcdFxcdGlmIChzc2lkX2VsZW0tXFx1MDAzZWRhdGFsZW4gIT0gc3NpZF9sZW4pXFxuIDQyNTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAxOjUwOjQwLjg3NTg5MjcyMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0Nzc3NTExMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBGdXp6aW5nIFdvcnRoaW5lc3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGZ1bmN0aW9uLCBgaXNfYnNzYCwgcmVtYWlucyBjb21wbGV0ZWx5IHNpZGUtZWZmZWN0IGZyZWUuIEl0IHNpbXBseSBwZXJmb3JtcyBhIGNvbXBhcmlzb24gb2YgdGhlIEJTUyBkYXRhIGFnYWluc3QgdGhlIEJTU0lEIGFuZCBTU0lEIHByb3ZpZGVkLiBTbywgdGhlIG1vZGlmaWNhdGlvbnMgd2l0aGluIGBfX2NmZzgwMjExX2dldF9ic3NgIGFyZSBmb2N1c2VkICpzb2xlbHkqIG9uIGVucmljaGluZyB0aGUgZXJyb3IgcmVwb3J0aW5nIHZpYSBgZXh0YWNrYCBtZXNzYWdlcy4gVGhlIHVuZGVybHlpbmcgc2VsZWN0aW9uIGxvZ2ljIGZvciB3aGljaCBCU1MgaXMgdWx0aW1hdGVseSBjaG9zZW4gaGFzbid0IGJlZW4gdG91Y2hlZC5cblxuRnVydGhlcm1vcmUsIHRoZSBvdGhlciBjaGFuZ2VzIHdpdGhpbiB0aGUgcGF0Y2ggYXJlIHNpbWlsYXJseSBjb25maW5lZCB0byBzZXR0aW5nIHRoZXNlIGBleHRhY2tgIG1lc3NhZ2VzIGFuZCB0aGUgYWRkaXRpb24gb2YgYSBLVW5pdCB0ZXN0LiBUaGlzIG1lYW5zIHRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGZ1bmN0aW9uYWwgYXNwZWN0cyB0byB0aGUga2VybmVsIHRoYXQgd291bGQgYmVuZWZpdCBmcm9tIGZ1enppbmcuIEl04oCZcyBlc3NlbnRpYWxseSBjb3NtZXRpYzogcHJvdmlkaW5nIGJldHRlciBlcnJvciBjb250ZXh0IGFuZCBhZGRpbmcgYSB1bml0IHRlc3QuIFRoZXJlZm9yZSwgYmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSdtIGNvbmZpZGVudCBpbiBjb25jbHVkaW5nIHRoYXQgdGhpcyBwYXRjaCBpc24ndCB3b3J0aCBmdXp6aW5nLiBJIHdpbGwgY29uZmlkZW50bHkgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc5NiwiT3V0cHV0VG9rZW5zIjoxMDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMTo1MDo0NS4zNTM2NDk4OTJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgbmV0bGluayBleHRlbmRlZCBBQ0sgKGV4dGFjaykgZXJyb3IgbWVzc2FnZXMgZm9yIGJldHRlciBlcnJvciByZXBvcnRpbmcgdG8gdXNlcnNwYWNlIHdoZW4gYSBCU1MgaXMgbm90IGZvdW5kIG9yIGNhbm5vdCBiZSB1c2VkLiBUaGUgY29yZSBsb2dpYyBvZiBCU1Mgc2VsZWN0aW9uIHJlbWFpbnMgZnVuY3Rpb25hbGx5IGlkZW50aWNhbCwgYW5kIHRoZSByZXN0IG9mIHRoZSBwYXRjaCBjb25zaXN0cyBvZiBhIEtVbml0IHRlc3QuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBleGVjdXRpb24gZmxvdyB0aGF0IHJlcXVpcmUgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBuZXRsaW5rIGV4dGVuZGVkIEFDSyAoZXh0YWNrKSBlcnJvciBtZXNzYWdlcyBmb3IgYmV0dGVyIGVycm9yIHJlcG9ydGluZyB0byB1c2Vyc3BhY2Ugd2hlbiBhIEJTUyBpcyBub3QgZm91bmQgb3IgY2Fubm90IGJlIHVzZWQuIFRoZSBjb3JlIGxvZ2ljIG9mIEJTUyBzZWxlY3Rpb24gcmVtYWlucyBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIHBhdGNoIGNvbnNpc3RzIG9mIGEgS1VuaXQgdGVzdC4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGV4ZWN1dGlvbiBmbG93IHRoYXQgcmVxdWlyZSBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow6mzf8[1] Phase: Running StartedAt: 2026-07-23 01:51:17 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mzf8[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-23 01:51:17 +0000 UTC FinishedAt: 2026-07-23 01:51:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}