Name: series-workflowqxp7h Phase: Failed StartedAt: 2026-08-12 08:33:28 +0000 UTC FinishedAt: 2026-08-12 08:36:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxp7h[0] Phase: Succeeded StartedAt: 2026-08-12 08:33:28 +0000 UTC FinishedAt: 2026-08-12 08:36:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxp7h[0].run-triage Phase: Succeeded StartedAt: 2026-08-12 08:33:28 +0000 UTC FinishedAt: 2026-08-12 08:36:30 +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+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgZXhjbHVzaXZlbHkgdG8gS1ZNJiMzOTtzIEludGVsIFREWCAoVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMpIGhvc3Qgc3VwcG9ydCAoYGFyY2gveDg2L2t2bS92bXgvdGR4LmNgKS4gVGhlIG1vZGlmaWNhdGlvbnMgdG8gc3RhbmRhcmQgVk1YIGNvZGUgKGB2bXguY2AsIGBjb21tb24uaGApIGFyZSBwdXJlbHkgcmVmYWN0b3JpbmcgdG8gc2hhcmUgZXhpc3RpbmcgYGhhbmRsZV9ub3RpZnlgIGFuZCBgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdGAgbG9naWMgd2l0aCBURFguIFNpbmNlIFREWCBob3N0IGZlYXR1cmVzIHJlcXVpcmUgc3BlY2lmaWMgcGh5c2ljYWwgSW50ZWwgaGFyZHdhcmUgYW5kIGZpcm13YXJlIChTRUFNIG1vZHVsZSkgdGhhdCBjYW5ub3QgYmUgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIHRoZXNlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODozNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQwZDY2YWQyZDY5ZWUxNzZiZGU2YjE2NDg1MTNiYjdiNjRjZjgzZGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAwODozNTowNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oIGIvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaFxuaW5kZXggMDgwMDU2NzY3MDJjMi4uMmNiYWE5YWJhOTAxYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcbkBAIC00LDYgJiM0Mzs0LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rdm1faG9zdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3Bvc3RlZF9pbnRyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL3ZteC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7bW11LmhcJiMzNDtcbiBcbkBAIC0xODMsNiAmIzQzOzE4NCwyNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX192bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdGt2bV92Y3B1X3RyaWdnZXJfcG9zdGVkX2ludGVycnVwdCh2Y3B1LCBQT1NURURfSU5UUl9WRUNUT1IpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgX192bXhfaGFuZGxlX25vdGlmeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4mIzQzO1x0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBleGl0X3F1YWwpXG4mIzQzO3tcbiYjNDM7XHRib29sIGNvbnRleHRfaW52YWxpZCA9IGV4aXRfcXVhbCBcdTAwMjYgTk9USUZZX1ZNX0NPTlRFWFRfSU5WQUxJRDtcbiYjNDM7XG4mIzQzO1x0JiM0MzsmIzQzO3ZjcHUtXHUwMDNlc3RhdC5ub3RpZnlfd2luZG93X2V4aXRzO1xuJiM0MztcbiYjNDM7XHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5ub3RpZnlfdm1leGl0X2ZsYWdzIFx1MDAyNiBLVk1fWDg2X05PVElGWV9WTUVYSVRfVVNFUiB8fFxuJiM0MztcdCAgICBjb250ZXh0X2ludmFsaWQpIHtcbiYjNDM7XHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZWV4aXRfcmVhc29uID0gS1ZNX0VYSVRfTk9USUZZO1xuJiM0MztcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlbm90aWZ5LmZsYWdzID0gY29udGV4dF9pbnZhbGlkID9cbiYjNDM7XHRcdFx0XHRcdCAgS1ZNX05PVElGWV9DT05URVhUX0lOVkFMSUQgOiAwO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMTtcbiYjNDM7fVxuJiM0MztcbiBub2luc3RyIHZvaWQgdm14X2hhbmRsZV9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbiAjZW5kaWYgLyogX19LVk1fWDg2X1ZNWF9DT01NT05fSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5pbmRleCBiMjcyYzIwNTg2YTc0Li5lNzA0NzY1N2VmNzgwIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuQEAgLTkyMSwxMCAmIzQzOzkyMSwxMyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZGNhbGxfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHJldHVybiBFWElUX1JFQVNPTl9URENBTEw7XG4gfVxuIFxuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIHRkeF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0MzsvKiBTeW50aGVzaXplZCBpbnZhbGlkIEV4aXQgUmVhc29uICovXG4mIzQzOyNkZWZpbmUgVERYX0lOVkFMSURfRVhJVF9SRUFTT05cdFx0VTE2X01BWFxuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB1bmlvbiB2bXhfZXhpdF9yZWFzb24gdGR4X3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7XG4tXHR1MzIgZXhpdF9yZWFzb247XG4mIzQzO1x0dW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uO1xuIFxuIFx0c3dpdGNoICh0ZHgtXHUwMDNldnBfZW50ZXJfcmV0IFx1MDAyNiBURFhfU0VBTUNBTExfU1RBVFVTX01BU0spIHtcbiBcdGNhc2UgVERYX1NVQ0NFU1M6XG5AQCAtOTM0LDIzICYjNDM7OTM3LDMyIEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIHRkeF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0Y2FzZSBURFhfTk9OX1JFQ09WRVJBQkxFX1REX1dST05HX0FQSUNfTU9ERTpcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuLVx0XHRyZXR1cm4gLTF1O1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFJldHVybiB0aGUgc3ludGhlc2l6ZWQgaW52YWxpZCBFeGl0IFJlYXNvbiwgYXMgdGhlIFREWFxuJiM0MztcdFx0ICogbW9kdWxlIG5ldmVyIGF0dGVtcHRlZCB0byBydW4gdGhlIHZDUFUsIGkuZS4gdGhlIEV4aXRcbiYjNDM7XHRcdCAqIFJlYXNvbiBpcyB1bmRlZmluZWQsIGJ1dCB0aGlzIGlzIE5PVCBhIGZhaWxlZCBWTS1FbnRlclxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZXR1cm4gKHVuaW9uIHZteF9leGl0X3JlYXNvbikge1xuJiM0MztcdFx0XHQuYmFzaWMgPSBURFhfSU5WQUxJRF9FWElUX1JFQVNPTixcbiYjNDM7XHRcdH07XG4gXHR9XG4gXG4tXHRleGl0X3JlYXNvbiA9IHRkeC1cdTAwM2V2cF9lbnRlcl9yZXQ7XG4mIzQzO1x0ZXhpdF9yZWFzb24uZnVsbCA9ICh1MzIpdGR4LVx1MDAzZXZwX2VudGVyX3JldDtcbiBcbi1cdHN3aXRjaCAoZXhpdF9yZWFzb24pIHtcbiYjNDM7XHRzd2l0Y2ggKGV4aXRfcmVhc29uLmJhc2ljKSB7XG4gXHRjYXNlIEVYSVRfUkVBU09OX1REQ0FMTDpcbiBcdFx0aWYgKHRkdm1jYWxsX2V4aXRfdHlwZSh2Y3B1KSlcbi1cdFx0XHRyZXR1cm4gRVhJVF9SRUFTT05fVk1DQUxMO1xuLVxuLVx0XHRyZXR1cm4gdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTtcbiYjNDM7XHRcdFx0ZXhpdF9yZWFzb24uYmFzaWMgPSBFWElUX1JFQVNPTl9WTUNBTEw7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGV4aXRfcmVhc29uLmJhc2ljID0gdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0Y2FzZSBFWElUX1JFQVNPTl9FUFRfTUlTQ09ORklHOlxuIFx0XHQvKlxuIFx0XHQgKiBEZWZlciBLVk1fQlVHX09OKCkgdW50aWwgdGR4X2hhbmRsZV9leGl0KCkgYmVjYXVzZSB0aGlzIGlzIGluXG4gXHRcdCAqIG5vbi1pbnN0cnVtZW50YWJsZSBjb2RlIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC5cbiBcdFx0ICovXG4tXHRcdHJldHVybiAtMXU7XG4mIzQzO1x0XHRleGl0X3JlYXNvbi5iYXNpYyA9IFREWF9JTlZBTElEX0VYSVRfUkVBU09OO1xuJiM0MztcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbiBcdH1cbkBAIC05NjcsNyAmIzQzOzk3OSw3IEBAIHN0YXRpYyBub2luc3RyIHZvaWQgdGR4X3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHR0ZHgtXHUwMDNldnBfZW50ZXJfcmV0ID0gdGRoX3ZwX2VudGVyKFx1MDAyNnRkeC1cdTAwM2V2cCwgXHUwMDI2dGR4LVx1MDAzZXZwX2VudGVyX2FyZ3MpO1xuIFxuLVx0dnQtXHUwMDNlZXhpdF9yZWFzb24uZnVsbCA9IHRkeF90b192bXhfZXhpdF9yZWFzb24odmNwdSk7XG4mIzQzO1x0dnQtXHUwMDNlZXhpdF9yZWFzb24gPSB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHZjcHUpO1xuIFxuIFx0dnQtXHUwMDNlZXhpdF9xdWFsaWZpY2F0aW9uID0gdGR4LVx1MDAzZXZwX2VudGVyX2FyZ3MucmN4O1xuIFx0dGR4LVx1MDAzZWV4dF9leGl0X3F1YWxpZmljYXRpb24gPSB0ZHgtXHUwMDNldnBfZW50ZXJfYXJncy5yZHg7XG5AQCAtOTgxLDggJiM0Mzs5OTMsNyBAQCBzdGF0aWMgbm9pbnN0ciB2b2lkIHRkeF92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHN0YXRpYyBib29sIHRkeF9mYWlsZWRfdm1lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0cmV0dXJuIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkgXHUwMDI2XHUwMDI2XG4tXHQgICAgICAgdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mdWxsICE9IC0xdTtcbiYjNDM7XHRyZXR1cm4gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeTtcbiB9XG4gXG4gc3RhdGljIGZhc3RwYXRoX3QgdGR4X2V4aXRfaGFuZGxlcnNfZmFzdHBhdGgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuQEAgLTEwNzEsOCAmIzQzOzEwODIsMTAgQEAgZmFzdHBhdGhfdCB0ZHhfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKVxuIFx0ICogYWxsb3dpbmcgdkNQVSBlbnRyeSB0byBhdm9pZCBjb250ZW50aW9uIHdpdGggdGRoX3ZwX2VudGVyKCkgYW5kXG4gXHQgKiBURENBTExzLlxuIFx0ICovXG4tXHRpZiAodW5saWtlbHkoUkVBRF9PTkNFKHRvX2t2bV90ZHgodmNwdS1cdTAwM2Vrdm0pLVx1MDAzZXdhaXRfZm9yX3NlcHRfemFwKSkpXG4mIzQzO1x0aWYgKHVubGlrZWx5KFJFQURfT05DRSh0b19rdm1fdGR4KHZjcHUtXHUwMDNla3ZtKS1cdTAwM2V3YWl0X2Zvcl9zZXB0X3phcCkpKSB7XG4mIzQzO1x0XHR2dC1cdTAwM2VleGl0X3JlYXNvbi5idXNfbG9ja19kZXRlY3RlZCA9IDA7XG4gXHRcdHJldHVybiBFWElUX0ZBU1RQQVRIX0VYSVRfSEFORExFRDtcbiYjNDM7XHR9XG4gXG4gXHR0cmFjZV9rdm1fZW50cnkodmNwdSwgcnVuX2ZsYWdzIFx1MDAyNiBLVk1fUlVOX0ZPUkNFX0lNTUVESUFURV9FWElUKTtcbiBcbkBAIC0yMDI4LDcgJiM0MzsyMDQxLDcgQEAgaW50IHRkeF9jb21wbGV0ZV9lbXVsYXRlZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZXJyKVxuIH1cbiBcbiBcbi1pbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aClcbiYjNDM7c3RhdGljIGludCBfX3RkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXG4ge1xuIFx0c3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7XG4gXHR1NjQgdnBfZW50ZXJfcmV0ID0gdGR4LVx1MDAzZXZwX2VudGVyX3JldDtcbkBAIC0yMTI2LDYgJiM0MzsyMTM5LDExIEBAIGludCB0ZHhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGZhc3RwYXRoKVxuIFx0XHQgKiAtIElmIGl0JiMzOTtzIG5vdCBhbiBNU01JLCBubyBuZWVkIHRvIGRvIGFueXRoaW5nIGhlcmUuXG4gXHRcdCAqL1xuIFx0XHRyZXR1cm4gMTtcbiYjNDM7XHRjYXNlIEVYSVRfUkVBU09OX05PVElGWTpcbiYjNDM7XHRcdC8qIE5NSSBibG9ja2luZyBzdGF0ZSBpcyBoYW5kbGVkIGJ5IFREWCBtb2R1bGUgKi9cbiYjNDM7XHRcdHJldHVybiBfX3ZteF9oYW5kbGVfbm90aWZ5KHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpKTtcbiYjNDM7XHRjYXNlIEVYSVRfUkVBU09OX0JVU19MT0NLOlxuJiM0MztcdFx0cmV0dXJuIGhhbmRsZV9idXNfbG9ja192bWV4aXQodmNwdSk7XG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbiBcdH1cbkBAIC0yMTM1LDEzICYjNDM7MjE1MywyOSBAQCBpbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aClcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7aW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gX190ZHhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xuJiM0MztcbiYjNDM7XHQvKiBFeGl0IHRvIHVzZXIgc3BhY2Ugd2hlbiBidXMgbG9jayB3YXMgZGV0ZWN0ZWQgKi9cbiYjNDM7XHRpZiAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5idXNfbG9ja19kZXRlY3RlZCkge1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2UgMCkge1xuJiM0MztcdFx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX1g4Nl9CVVNfTE9DSztcbiYjNDM7XHRcdFx0cmV0ID0gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VmbGFncyB8PSBLVk1fUlVOX1g4Nl9CVVNfTE9DSztcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHRkeF9nZXRfZXhpdF9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICpyZWFzb24sXG4gXHRcdHU2NCAqaW5mbzEsIHU2NCAqaW5mbzIsIHUzMiAqaW50cl9pbmZvLCB1MzIgKmVycm9yX2NvZGUpXG4ge1xuIFx0c3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7XG4gXG4gXHQqcmVhc29uID0gdGR4LVx1MDAzZXZ0LmV4aXRfcmVhc29uLmZ1bGw7XG4tXHRpZiAoKnJlYXNvbiAhPSAtMXUpIHtcbiYjNDM7XHRpZiAoKnJlYXNvbiAhPSBURFhfSU5WQUxJRF9FWElUX1JFQVNPTikge1xuIFx0XHQqaW5mbzEgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdFx0KmluZm8yID0gdGR4LVx1MDAzZWV4dF9leGl0X3F1YWxpZmljYXRpb247XG4gXHRcdCppbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbkBAIC0zMTU0LDYgJiM0MzszMTg4LDE3IEBAIHN0YXRpYyBpbnQgdGR4X3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fdGR4X2NtZCAqY21kKVxuIFx0dGRfdm1jc193cml0ZTY0KHRkeCwgUE9TVEVEX0lOVFJfREVTQ19BRERSLCBfX3BhKFx1MDAyNnRkeC1cdTAwM2V2dC5waV9kZXNjKSk7XG4gXHR0ZF92bWNzX3NldGJpdDMyKHRkeCwgUElOX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCwgUElOX0JBU0VEX1BPU1RFRF9JTlRSKTtcbiBcbiYjNDM7XHRpZiAoa3ZtX25vdGlmeV92bWV4aXRfZW5hYmxlZCh2Y3B1LVx1MDAzZWt2bSkpIHtcbiYjNDM7XHRcdHRkX3ZtY3Nfc2V0Yml0MzIodGR4LCBTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MLFxuJiM0MztcdFx0XHRcdCBTRUNPTkRBUllfRVhFQ19OT1RJRllfVk1fRVhJVElORyk7XG4mIzQzO1x0XHR0ZF92bWNzX3dyaXRlMzIodGR4LCBOT1RJRllfV0lORE9XLFxuJiM0MztcdFx0XHRcdHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubm90aWZ5X3dpbmRvdyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5idXNfbG9ja19kZXRlY3Rpb25fZW5hYmxlZClcbiYjNDM7XHRcdHRkX3ZtY3Nfc2V0Yml0MzIodGR4LCBTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MLFxuJiM0MztcdFx0XHRcdCBTRUNPTkRBUllfRVhFQ19CVVNfTE9DS19ERVRFQ1RJT04pO1xuJiM0MztcbiBcdHRkeC1cdTAwM2VzdGF0ZSA9IFZDUFVfVERfU1RBVEVfSU5JVElBTElaRUQ7XG4gXG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuaW5kZXggZTNiZmU2YWNhMWEwZS4uYzQyOWRiOWI5MjA1NyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbkBAIC02MjY1LDcgJiM0Mzs2MjY1LDcgQEAgc3RhdGljIGludCBoYW5kbGVfZW5jbHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIH1cbiAjZW5kaWYgLyogQ09ORklHX1g4Nl9TR1hfS1ZNICovXG4gXG4tc3RhdGljIGludCBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7aW50IGhhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdC8qXG4gXHQgKiBIYXJkd2FyZSBtYXkgb3IgbWF5IG5vdCBzZXQgdGhlIEJVU19MT0NLX0RFVEVDVEVEIGZsYWcgb24gQlVTX0xPQ0tcbkBAIC02Mjc5LDkgJiM0Mzs2Mjc5LDYgQEAgc3RhdGljIGludCBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBzdGF0aWMgaW50IGhhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4tXHRib29sIGNvbnRleHRfaW52YWxpZCA9IGV4aXRfcXVhbCBcdTAwMjYgTk9USUZZX1ZNX0NPTlRFWFRfSU5WQUxJRDtcbi1cbi1cdCYjNDM7JiM0Mzt2Y3B1LVx1MDAzZXN0YXQubm90aWZ5X3dpbmRvd19leGl0cztcbiBcbiBcdC8qXG4gXHQgKiBOb3RpZnkgVk0gZXhpdCBoYXBwZW5lZCB3aGlsZSBleGVjdXRpbmcgaXJldCBmcm9tIE5NSSxcbkBAIC02MjkxLDE1ICYjNDM7NjI4OCw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX25vdGlmeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdHZtY3Nfc2V0X2JpdHMoR1VFU1RfSU5URVJSVVBUSUJJTElUWV9JTkZPLFxuIFx0XHRcdCAgICAgIEdVRVNUX0lOVFJfU1RBVEVfTk1JKTtcbiBcbi1cdGlmICh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm5vdGlmeV92bWV4aXRfZmxhZ3MgXHUwMDI2IEtWTV9YODZfTk9USUZZX1ZNRVhJVF9VU0VSIHx8XG4tXHQgICAgY29udGV4dF9pbnZhbGlkKSB7XG4tXHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZWV4aXRfcmVhc29uID0gS1ZNX0VYSVRfTk9USUZZO1xuLVx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2Vub3RpZnkuZmxhZ3MgPSBjb250ZXh0X2ludmFsaWQgP1xuLVx0XHRcdFx0XHQgIEtWTV9OT1RJRllfQ09OVEVYVF9JTlZBTElEIDogMDtcbi1cdFx0cmV0dXJuIDA7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMTtcbiYjNDM7XHRyZXR1cm4gX192bXhfaGFuZGxlX25vdGlmeSh2Y3B1LCBleGl0X3F1YWwpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHZteF9nZXRfbXNyX2ltbV9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmggYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXG5pbmRleCBkYzg1MTdmMTViYzQ2Li44ZmFmMDRjMDk3MjFjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC92bXguaFxuQEAgLTM3OSw2ICYjNDM7Mzc5LDcgQEAgYm9vbCBfX3ZteF92Y3B1X3J1bihzdHJ1Y3QgdmNwdV92bXggKnZteCwgdW5zaWduZWQgaW50IGZsYWdzKTtcbiB2b2lkIHZteF9lcHRfbG9hZF9wZHB0cnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbiB2b2lkIHZteF9zZXRfaW50ZXJjZXB0X2Zvcl9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCBpbnQgdHlwZSwgYm9vbCBzZXQpO1xuJiM0MztpbnQgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCB2bXhfZGlzYWJsZV9pbnRlcmNlcHRfZm9yX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdFx0XHRcdFx0IHUzMiBtc3IsIGludCB0eXBlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjM1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyBleGNsdXNpdmVseSB0byBLVk0mIzM5O3MgSW50ZWwgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgaG9zdCBzdXBwb3J0IChgYXJjaC94ODYva3ZtL3ZteC90ZHguY2ApLiBUaGUgbW9kaWZpY2F0aW9ucyB0byBzdGFuZGFyZCBWTVggY29kZSAoYHZteC5jYCwgYGNvbW1vbi5oYCkgYXJlIHB1cmVseSByZWZhY3RvcmluZyB0byBzaGFyZSBleGlzdGluZyBgaGFuZGxlX25vdGlmeWAgYW5kIGBoYW5kbGVfYnVzX2xvY2tfdm1leGl0YCBsb2dpYyB3aXRoIFREWC4gU2luY2UgVERYIGhvc3QgZmVhdHVyZXMgcmVxdWlyZSBzcGVjaWZpYyBwaHlzaWNhbCBJbnRlbCBoYXJkd2FyZSBhbmQgZmlybXdhcmUgKFNFQU0gbW9kdWxlKSB0aGF0IGNhbm5vdCBiZSBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgdGhlc2UgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDBkNjZhZDJkNjllZTE3NmJkZTZiMTY0ODUxM2JiN2I2NGNmODNkYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDA4OjM1OjA0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaCBiL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmgKaW5kZXggMDgwMDU2NzY3MDJjMi4uMmNiYWE5YWJhOTAxYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oCkBAIC00LDYgJiM0Mzs0LDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2t2bV9ob3N0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL3Bvc3RlZF9pbnRyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS92bXguaCZndDsKIAogI2luY2x1ZGUgJiMzNDttbXUuaCYjMzQ7CiAKQEAgLTE4Myw2ICYjNDM7MTg0LDI0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3ZteF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCWt2bV92Y3B1X3RyaWdnZXJfcG9zdGVkX2ludGVycnVwdCh2Y3B1LCBQT1NURURfSU5UUl9WRUNUT1IpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBpbnQgX192bXhfaGFuZGxlX25vdGlmeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiYjNDM7CQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsKQomIzQzO3sKJiM0MzsJYm9vbCBjb250ZXh0X2ludmFsaWQgPSBleGl0X3F1YWwgJmFtcDsgTk9USUZZX1ZNX0NPTlRFWFRfSU5WQUxJRDsKJiM0MzsKJiM0MzsJJiM0MzsmIzQzO3ZjcHUtJmd0O3N0YXQubm90aWZ5X3dpbmRvd19leGl0czsKJiM0MzsKJiM0MzsJaWYgKHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5ub3RpZnlfdm1leGl0X2ZsYWdzICZhbXA7IEtWTV9YODZfTk9USUZZX1ZNRVhJVF9VU0VSIHx8CiYjNDM7CSAgICBjb250ZXh0X2ludmFsaWQpIHsKJiM0MzsJCXZjcHUtJmd0O3J1bi0mZ3Q7ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9OT1RJRlk7CiYjNDM7CQl2Y3B1LSZndDtydW4tJmd0O25vdGlmeS5mbGFncyA9IGNvbnRleHRfaW52YWxpZCA/CiYjNDM7CQkJCQkgIEtWTV9OT1RJRllfQ09OVEVYVF9JTlZBTElEIDogMDsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAxOwomIzQzO30KJiM0MzsKIG5vaW5zdHIgdm9pZCB2bXhfaGFuZGxlX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiAjZW5kaWYgLyogX19LVk1fWDg2X1ZNWF9DT01NT05fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmMKaW5kZXggYjI3MmMyMDU4NmE3NC4uZTcwNDc2NTdlZjc4MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jCkBAIC05MjEsMTAgJiM0Mzs5MjEsMTMgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJcmV0dXJuIEVYSVRfUkVBU09OX1REQ0FMTDsKIH0KIAotc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdGR4X3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7LyogU3ludGhlc2l6ZWQgaW52YWxpZCBFeGl0IFJlYXNvbiAqLwomIzQzOyNkZWZpbmUgVERYX0lOVkFMSURfRVhJVF9SRUFTT04JCVUxNl9NQVgKJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuaW9uIHZteF9leGl0X3JlYXNvbiB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTsKLQl1MzIgZXhpdF9yZWFzb247CiYjNDM7CXVuaW9uIHZteF9leGl0X3JlYXNvbiBleGl0X3JlYXNvbjsKIAogCXN3aXRjaCAodGR4LSZndDt2cF9lbnRlcl9yZXQgJmFtcDsgVERYX1NFQU1DQUxMX1NUQVRVU19NQVNLKSB7CiAJY2FzZSBURFhfU1VDQ0VTUzoKQEAgLTkzNCwyMyAmIzQzOzkzNywzMiBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAljYXNlIFREWF9OT05fUkVDT1ZFUkFCTEVfVERfV1JPTkdfQVBJQ19NT0RFOgogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXR1cm4gLTF1OwomIzQzOwkJLyoKJiM0MzsJCSAqIFJldHVybiB0aGUgc3ludGhlc2l6ZWQgaW52YWxpZCBFeGl0IFJlYXNvbiwgYXMgdGhlIFREWAomIzQzOwkJICogbW9kdWxlIG5ldmVyIGF0dGVtcHRlZCB0byBydW4gdGhlIHZDUFUsIGkuZS4gdGhlIEV4aXQKJiM0MzsJCSAqIFJlYXNvbiBpcyB1bmRlZmluZWQsIGJ1dCB0aGlzIGlzIE5PVCBhIGZhaWxlZCBWTS1FbnRlcgomIzQzOwkJICovCiYjNDM7CQlyZXR1cm4gKHVuaW9uIHZteF9leGl0X3JlYXNvbikgewomIzQzOwkJCS5iYXNpYyA9IFREWF9JTlZBTElEX0VYSVRfUkVBU09OLAomIzQzOwkJfTsKIAl9CiAKLQlleGl0X3JlYXNvbiA9IHRkeC0mZ3Q7dnBfZW50ZXJfcmV0OwomIzQzOwlleGl0X3JlYXNvbi5mdWxsID0gKHUzMil0ZHgtJmd0O3ZwX2VudGVyX3JldDsKIAotCXN3aXRjaCAoZXhpdF9yZWFzb24pIHsKJiM0MzsJc3dpdGNoIChleGl0X3JlYXNvbi5iYXNpYykgewogCWNhc2UgRVhJVF9SRUFTT05fVERDQUxMOgogCQlpZiAodGR2bWNhbGxfZXhpdF90eXBlKHZjcHUpKQotCQkJcmV0dXJuIEVYSVRfUkVBU09OX1ZNQ0FMTDsKLQotCQlyZXR1cm4gdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTsKJiM0MzsJCQlleGl0X3JlYXNvbi5iYXNpYyA9IEVYSVRfUkVBU09OX1ZNQ0FMTDsKJiM0MzsJCWVsc2UKJiM0MzsJCQlleGl0X3JlYXNvbi5iYXNpYyA9IHRkY2FsbF90b192bXhfZXhpdF9yZWFzb24odmNwdSk7CiYjNDM7CQlicmVhazsKIAljYXNlIEVYSVRfUkVBU09OX0VQVF9NSVNDT05GSUc6CiAJCS8qCiAJCSAqIERlZmVyIEtWTV9CVUdfT04oKSB1bnRpbCB0ZHhfaGFuZGxlX2V4aXQoKSBiZWNhdXNlIHRoaXMgaXMgaW4KIAkJICogbm9uLWluc3RydW1lbnRhYmxlIGNvZGUgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgogCQkgKi8KLQkJcmV0dXJuIC0xdTsKJiM0MzsJCWV4aXRfcmVhc29uLmJhc2ljID0gVERYX0lOVkFMSURfRVhJVF9SRUFTT047CiYjNDM7CQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CkBAIC05NjcsNyAmIzQzOzk3OSw3IEBAIHN0YXRpYyBub2luc3RyIHZvaWQgdGR4X3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIAl0ZHgtJmd0O3ZwX2VudGVyX3JldCA9IHRkaF92cF9lbnRlcigmYW1wO3RkeC0mZ3Q7dnAsICZhbXA7dGR4LSZndDt2cF9lbnRlcl9hcmdzKTsKIAotCXZ0LSZndDtleGl0X3JlYXNvbi5mdWxsID0gdGR4X3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTsKJiM0MzsJdnQtJmd0O2V4aXRfcmVhc29uID0gdGR4X3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTsKIAogCXZ0LSZndDtleGl0X3F1YWxpZmljYXRpb24gPSB0ZHgtJmd0O3ZwX2VudGVyX2FyZ3MucmN4OwogCXRkeC0mZ3Q7ZXh0X2V4aXRfcXVhbGlmaWNhdGlvbiA9IHRkeC0mZ3Q7dnBfZW50ZXJfYXJncy5yZHg7CkBAIC05ODEsOCAmIzQzOzk5Myw3IEBAIHN0YXRpYyBub2luc3RyIHZvaWQgdGR4X3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIHN0YXRpYyBib29sIHRkeF9mYWlsZWRfdm1lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JcmV0dXJuIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkgJmFtcDsmYW1wOwotCSAgICAgICB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZ1bGwgIT0gLTF1OwomIzQzOwlyZXR1cm4gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeTsKIH0KIAogc3RhdGljIGZhc3RwYXRoX3QgdGR4X2V4aXRfaGFuZGxlcnNfZmFzdHBhdGgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtMTA3MSw4ICYjNDM7MTA4MiwxMCBAQCBmYXN0cGF0aF90IHRkeF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBydW5fZmxhZ3MpCiAJICogYWxsb3dpbmcgdkNQVSBlbnRyeSB0byBhdm9pZCBjb250ZW50aW9uIHdpdGggdGRoX3ZwX2VudGVyKCkgYW5kCiAJICogVERDQUxMcy4KIAkgKi8KLQlpZiAodW5saWtlbHkoUkVBRF9PTkNFKHRvX2t2bV90ZHgodmNwdS0mZ3Q7a3ZtKS0mZ3Q7d2FpdF9mb3Jfc2VwdF96YXApKSkKJiM0MzsJaWYgKHVubGlrZWx5KFJFQURfT05DRSh0b19rdm1fdGR4KHZjcHUtJmd0O2t2bSktJmd0O3dhaXRfZm9yX3NlcHRfemFwKSkpIHsKJiM0MzsJCXZ0LSZndDtleGl0X3JlYXNvbi5idXNfbG9ja19kZXRlY3RlZCA9IDA7CiAJCXJldHVybiBFWElUX0ZBU1RQQVRIX0VYSVRfSEFORExFRDsKJiM0MzsJfQogCiAJdHJhY2Vfa3ZtX2VudHJ5KHZjcHUsIHJ1bl9mbGFncyAmYW1wOyBLVk1fUlVOX0ZPUkNFX0lNTUVESUFURV9FWElUKTsKIApAQCAtMjAyOCw3ICYjNDM7MjA0MSw3IEBAIGludCB0ZHhfY29tcGxldGVfZW11bGF0ZWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGVycikKIH0KIAogCi1pbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aCkKJiM0MztzdGF0aWMgaW50IF9fdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aCkKIHsKIAlzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTsKIAl1NjQgdnBfZW50ZXJfcmV0ID0gdGR4LSZndDt2cF9lbnRlcl9yZXQ7CkBAIC0yMTI2LDYgJiM0MzsyMTM5LDExIEBAIGludCB0ZHhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGZhc3RwYXRoKQogCQkgKiAtIElmIGl0JiMzOTtzIG5vdCBhbiBNU01JLCBubyBuZWVkIHRvIGRvIGFueXRoaW5nIGhlcmUuCiAJCSAqLwogCQlyZXR1cm4gMTsKJiM0MzsJY2FzZSBFWElUX1JFQVNPTl9OT1RJRlk6CiYjNDM7CQkvKiBOTUkgYmxvY2tpbmcgc3RhdGUgaXMgaGFuZGxlZCBieSBURFggbW9kdWxlICovCiYjNDM7CQlyZXR1cm4gX192bXhfaGFuZGxlX25vdGlmeSh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSk7CiYjNDM7CWNhc2UgRVhJVF9SRUFTT05fQlVTX0xPQ0s6CiYjNDM7CQlyZXR1cm4gaGFuZGxlX2J1c19sb2NrX3ZtZXhpdCh2Y3B1KTsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CkBAIC0yMTM1LDEzICYjNDM7MjE1MywyOSBAQCBpbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO2ludCB0ZHhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGZhc3RwYXRoKQomIzQzO3sKJiM0MzsJaW50IHJldCA9IF9fdGR4X2hhbmRsZV9leGl0KHZjcHUsIGZhc3RwYXRoKTsKJiM0MzsKJiM0MzsJLyogRXhpdCB0byB1c2VyIHNwYWNlIHdoZW4gYnVzIGxvY2sgd2FzIGRldGVjdGVkICovCiYjNDM7CWlmICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJ1c19sb2NrX2RldGVjdGVkKSB7CiYjNDM7CQlpZiAocmV0ICZndDsgMCkgewomIzQzOwkJCXZjcHUtJmd0O3J1bi0mZ3Q7ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9YODZfQlVTX0xPQ0s7CiYjNDM7CQkJcmV0ID0gMDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXZjcHUtJmd0O3J1bi0mZ3Q7ZmxhZ3MgfD0gS1ZNX1JVTl9YODZfQlVTX0xPQ0s7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiB2b2lkIHRkeF9nZXRfZXhpdF9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICpyZWFzb24sCiAJCXU2NCAqaW5mbzEsIHU2NCAqaW5mbzIsIHUzMiAqaW50cl9pbmZvLCB1MzIgKmVycm9yX2NvZGUpCiB7CiAJc3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7CiAKIAkqcmVhc29uID0gdGR4LSZndDt2dC5leGl0X3JlYXNvbi5mdWxsOwotCWlmICgqcmVhc29uICE9IC0xdSkgewomIzQzOwlpZiAoKnJlYXNvbiAhPSBURFhfSU5WQUxJRF9FWElUX1JFQVNPTikgewogCQkqaW5mbzEgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKIAkJKmluZm8yID0gdGR4LSZndDtleHRfZXhpdF9xdWFsaWZpY2F0aW9uOwogCQkqaW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7CkBAIC0zMTU0LDYgJiM0MzszMTg4LDE3IEBAIHN0YXRpYyBpbnQgdGR4X3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fdGR4X2NtZCAqY21kKQogCXRkX3ZtY3Nfd3JpdGU2NCh0ZHgsIFBPU1RFRF9JTlRSX0RFU0NfQUREUiwgX19wYSgmYW1wO3RkeC0mZ3Q7dnQucGlfZGVzYykpOwogCXRkX3ZtY3Nfc2V0Yml0MzIodGR4LCBQSU5fQkFTRURfVk1fRVhFQ19DT05UUk9MLCBQSU5fQkFTRURfUE9TVEVEX0lOVFIpOwogCiYjNDM7CWlmIChrdm1fbm90aWZ5X3ZtZXhpdF9lbmFibGVkKHZjcHUtJmd0O2t2bSkpIHsKJiM0MzsJCXRkX3ZtY3Nfc2V0Yml0MzIodGR4LCBTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MLAomIzQzOwkJCQkgU0VDT05EQVJZX0VYRUNfTk9USUZZX1ZNX0VYSVRJTkcpOwomIzQzOwkJdGRfdm1jc193cml0ZTMyKHRkeCwgTk9USUZZX1dJTkRPVywKJiM0MzsJCQkJdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLm5vdGlmeV93aW5kb3cpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh2Y3B1LSZndDtrdm0tJmd0O2FyY2guYnVzX2xvY2tfZGV0ZWN0aW9uX2VuYWJsZWQpCiYjNDM7CQl0ZF92bWNzX3NldGJpdDMyKHRkeCwgU0VDT05EQVJZX1ZNX0VYRUNfQ09OVFJPTCwKJiM0MzsJCQkJIFNFQ09OREFSWV9FWEVDX0JVU19MT0NLX0RFVEVDVElPTik7CiYjNDM7CiAJdGR4LSZndDtzdGF0ZSA9IFZDUFVfVERfU1RBVEVfSU5JVElBTElaRUQ7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jCmluZGV4IGUzYmZlNmFjYTFhMGUuLmM0MjlkYjliOTIwNTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC92bXguYwpAQCAtNjI2NSw3ICYjNDM7NjI2NSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2VuY2xzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIH0KICNlbmRpZiAvKiBDT05GSUdfWDg2X1NHWF9LVk0gKi8KIAotc3RhdGljIGludCBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0MztpbnQgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJLyoKIAkgKiBIYXJkd2FyZSBtYXkgb3IgbWF5IG5vdCBzZXQgdGhlIEJVU19MT0NLX0RFVEVDVEVEIGZsYWcgb24gQlVTX0xPQ0sKQEAgLTYyNzksOSAmIzQzOzYyNzksNiBAQCBzdGF0aWMgaW50IGhhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogc3RhdGljIGludCBoYW5kbGVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwotCWJvb2wgY29udGV4dF9pbnZhbGlkID0gZXhpdF9xdWFsICZhbXA7IE5PVElGWV9WTV9DT05URVhUX0lOVkFMSUQ7Ci0KLQkmIzQzOyYjNDM7dmNwdS0mZ3Q7c3RhdC5ub3RpZnlfd2luZG93X2V4aXRzOwogCiAJLyoKIAkgKiBOb3RpZnkgVk0gZXhpdCBoYXBwZW5lZCB3aGlsZSBleGVjdXRpbmcgaXJldCBmcm9tIE5NSSwKQEAgLTYyOTEsMTUgJiM0Mzs2Mjg4LDcgQEAgc3RhdGljIGludCBoYW5kbGVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJdm1jc19zZXRfYml0cyhHVUVTVF9JTlRFUlJVUFRJQklMSVRZX0lORk8sCiAJCQkgICAgICBHVUVTVF9JTlRSX1NUQVRFX05NSSk7CiAKLQlpZiAodmNwdS0mZ3Q7a3ZtLSZndDthcmNoLm5vdGlmeV92bWV4aXRfZmxhZ3MgJmFtcDsgS1ZNX1g4Nl9OT1RJRllfVk1FWElUX1VTRVIgfHwKLQkgICAgY29udGV4dF9pbnZhbGlkKSB7Ci0JCXZjcHUtJmd0O3J1bi0mZ3Q7ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9OT1RJRlk7Ci0JCXZjcHUtJmd0O3J1bi0mZ3Q7bm90aWZ5LmZsYWdzID0gY29udGV4dF9pbnZhbGlkID8KLQkJCQkJICBLVk1fTk9USUZZX0NPTlRFWFRfSU5WQUxJRCA6IDA7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAxOwomIzQzOwlyZXR1cm4gX192bXhfaGFuZGxlX25vdGlmeSh2Y3B1LCBleGl0X3F1YWwpOwogfQogCiBzdGF0aWMgaW50IHZteF9nZXRfbXNyX2ltbV9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguaCBiL2FyY2gveDg2L2t2bS92bXgvdm14LmgKaW5kZXggZGM4NTE3ZjE1YmM0Ni4uOGZhZjA0YzA5NzIxYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oCkBAIC0zNzksNiAmIzQzOzM3OSw3IEBAIGJvb2wgX192bXhfdmNwdV9ydW4oc3RydWN0IHZjcHVfdm14ICp2bXgsIHVuc2lnbmVkIGludCBmbGFncyk7CiB2b2lkIHZteF9lcHRfbG9hZF9wZHB0cnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogdm9pZCB2bXhfc2V0X2ludGVyY2VwdF9mb3JfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgaW50IHR5cGUsIGJvb2wgc2V0KTsKJiM0MztpbnQgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgdm14X2Rpc2FibGVfaW50ZXJjZXB0X2Zvcl9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCQkJIHUzMiBtc3IsIGludCB0eXBlKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTg4CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBURFggS1ZNIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIGl0IGxvb2tzIGxpa2UgYSB0YXJnZXRlZCBtb2RpZmljYXRpb24gdG8gS1ZNJiMzOTtzIFREWCBzdXBwb3J0LCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGhhbmRsaW5nIGBOT1RJRllgIGFuZCBgQlVTX0xPQ0tgIFZNIGV4aXRzLiBUaGUgZmFjdCB0aGF0IGl0IHRvdWNoZXMgYGNvbW1vbi5oYCwgYHRkeC5jYCwgYHZteC5jYCwgYW5kIGB2bXguaGAgdGVsbHMgbWUgaXQmIzM5O3Mgbm90IGEgdHJpdmlhbCBjaGFuZ2U7IGl0JiMzOTtzIGxpa2VseSBhIHByZXR0eSBmdW5kYW1lbnRhbCBzaGlmdCBpbiBob3cgdGhlc2UgZXhpdHMgYXJlIHByb2Nlc3NlZCB3aXRoaW4gdGhlIFREWCBjb250ZXh0LgoKSXQgbG9va3MgbGlrZSB0aGUgYGhhbmRsZV9ub3RpZnlgIGZ1bmN0aW9uIGluIGB2bXguY2AgaXMgYmVpbmcgcmVmYWN0b3JlZCB0byB1c2UgYSBjb21tb24gaGFuZGxlciBkZWZpbmVkIGluIGBjb21tb24uaGAsIGFuZCB0aGF0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHNpZ24gb2YgY29kZSByZXVzZSBhbmQgbWFpbnRhaW5hYmlsaXR5LiBDaGFuZ2luZyBgdGR4X3RvX3ZteF9leGl0X3JlYXNvbmAgdG8gdXNlIGEgYHVuaW9uIHZteF9leGl0X3JlYXNvbmAgaXMgbGlrZWx5IGZvciBiZXR0ZXIgdHlwZSBzYWZldHkgYW5kIGNsYXJpdHksIHdoaWNoIGlzIGRlZmluaXRlbHkgYSBwbHVzLiBIYW5kbGluZyBgRVhJVF9SRUFTT05fTk9USUZZYCBhbmQgYEVYSVRfUkVBU09OX0JVU19MT0NLYCBkaXJlY3RseSBpbiBgX190ZHhfaGFuZGxlX2V4aXRgIG1ha2VzIHNlbnNlLCBhcyB0aG9zZSBhcmUgVERYLXNwZWNpZmljIGV4aXQgcmVhc29ucy4gU2V0dGluZyB0aG9zZSBzZWNvbmRhcnkgZXhlY3V0aW9uIGZsYWdzIGR1cmluZyBpbml0aWFsaXphdGlvbiBpbiBgdGR4X3ZjcHVfaW5pdGAgaXMgaG93IHdlIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuCgpOb3csIG15IGtleSBjb25jZXJuIGlzIHJlYWNoYWJpbGl0eS4gVERYIGlzIGEgaGFyZHdhcmUgZmVhdHVyZSwgSW50ZWwmIzM5O3MuIElzIHRoaXMgY29kZSBldmVuICpyZWFjaGFibGUqIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cz8gIEkga25vdyBURFggcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUsIGJ1dCBvZnRlbiB3aXRoIEtWTSwgd2UgY2FuIG1vY2sgb3IgdGVzdCBzb21lIGhhcmR3YXJlIGZlYXR1cmVzIHdpdGhvdXQgdGhlIGFjdHVhbCBoYXJkd2FyZS4gQnV0LCBpcyB0aGF0IHRydWUgZm9yIFREWD8gSXQmIzM5O3Mgb2Z0ZW4gaW1wb3NzaWJsZSB0byBnZXQgdG8gYSBzcGVjaWZpYyBjb2RlIHBhdGggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIGVzcGVjaWFsbHkgd2hlbiBlbXVsYXRpbmcgaGFyZHdhcmUuIENhbiBRRU1VIGVtdWxhdGUgVERYPwoKSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgaWYgVERYIGlzIGV2ZW4gZnV6emFibGUuIElmIGl0JiMzOTtzIG5vdCwgd2UmIzM5O3JlIGxpa2VseSBkZWFsaW5nIHdpdGggY29kZSB0aGF0JiMzOTtzIG5vdCBlYXNpbHkgdGVzdGFibGUgaW4gYSBzdGFuZGFyZCBzZXR1cC4gSSBuZWVkIHRvIHNlYXJjaCB0aGUgS1ZNIGNvZGViYXNlIGZvciBvdGhlciByZWZlcmVuY2VzIHRvIFREWCB0byBzZWUgaG93IGl0JiMzOTtzIGhhbmRsZWQuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgd2l0aCB0aGUgYGt2bS9gIGRpcmVjdG9yeS4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgbXVjaCByZWFjaGFiaWxpdHkgdGhpcyBjb2RlIGhhcyBpbiBteSB0ZXN0aW5nIGVudmlyb25tZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfSU5URUxfVERYX0hPU1QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20vdGR4Lmg9MTAyPXN0YXRpYyBpbmxpbmUgbG9uZyB0ZHhfa3ZtX2h5cGVyY2FsbCh1bnNpZ25lZCBpbnQgbnIsIHVuc2lnbmVkIGxvbmcgcDEsXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmgtMTA5LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4Lmg6MTEwOiNpZmRlZiBDT05GSUdfSU5URUxfVERYX0hPU1RcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oLTExMS12b2lkIHRkeF9pbml0KHZvaWQpO1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oPTE4ND1zdGF0aWMgaW5saW5lIHZvaWQgdGR4X3N5c19kaXNhYmxlKHZvaWQpIHsgfVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4Lmg6MTg1OiNlbmRpZlx0LyogQ09ORklHX0lOVEVMX1REWF9IT1NUICovXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaC0xODYtXG4tLVxuYXJjaC94ODYvdmlydC92bXgvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmFyY2gveDg2L3ZpcnQvdm14L01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX0lOVEVMX1REWF9IT1NUKVx0JiM0Mzs9IHRkeC9cbi0tXG5kcml2ZXJzL3ZpcnQvY29jby9NYWtlZmlsZT04PW9iai0kKENPTkZJR19JTlRFTF9URFhfR1VFU1QpXHQmIzQzOz0gdGR4LWd1ZXN0L1xuZHJpdmVycy92aXJ0L2NvY28vTWFrZWZpbGU6OTpvYmotJChDT05GSUdfSU5URUxfVERYX0hPU1QpXHQmIzQzOz0gdGR4LWhvc3QvXG5kcml2ZXJzL3ZpcnQvY29jby9NYWtlZmlsZS0xMC1vYmotJChDT05GSUdfQVJNX0NDQV9HVUVTVClcdCYjNDM7PSBhcm0tY2NhLWd1ZXN0L1xuLS1cbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaD0xND1lbnVtIG1pc2NfcmVzX3R5cGUge1xuLS1cbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaC0yMC0jZW5kaWZcbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaDoyMTojaWZkZWYgQ09ORklHX0lOVEVMX1REWF9IT1NUXG5pbmNsdWRlL2xpbnV4L21pc2NfY2dyb3VwLmgtMjItXHQvKiogQE1JU0NfQ0dfUkVTX1REWDogSW50ZWwgVERYIEhLSURzIHJlc291cmNlICovXG4tLVxua2VybmVsL2Nncm91cC9taXNjLmM9MjA9c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG1pc2NfcmVzX25hbWVbXSA9IHtcbi0tXG5rZXJuZWwvY2dyb3VwL21pc2MuYy0yNi0jZW5kaWZcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jOjI3OiNpZmRlZiBDT05GSUdfSU5URUxfVERYX0hPU1Rcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jLTI4LVx0LyogSW50ZWwgVERYIEhLSURzIHJlc291cmNlICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEyNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2gmIzM5O3MgU2NvcGUqKgoKT2theSwgc28gdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jYC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSB6b29tIGluIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBnb3Zlcm4gaXRzIGNvbXBpbGF0aW9uLiBJIGtub3cgdGhpcyBmaWxlIGlzIGNyaXRpY2FsIGZvciBJbnRlbCYjMzk7cyBURFggc3VwcG9ydCB3aXRoaW4gS1ZNLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSBpcyBoYXBwZW5pbmcuIFRoZSB0d28gcHJpbWFyeSBjb25maWd1cmF0aW9uIGtub2JzIHRvIGNoZWNrIGFyZSBkZWZpbml0ZWx5IGBDT05GSUdfSU5URUxfVERYX0hPU1RgIGFuZCBgQ09ORklHX0tWTV9JTlRFTGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG9uZSBpcyB0aGUgdHJpZ2dlciBmb3IgaW5jbHVkaW5nIHRoaXMgY29kZSBpbiB0aGUgYnVpbGQsIG9yIGlmIGl0IGlzIGNvbmRpdGlvbmFsIG9uICpib3RoKi4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gZXZhbHVhdGUgdGhlIHBhdGNoJiMzOTtzIGltcGFjdCBhbmQgaXRzIGxpa2VseSB1c2UgY2FzZSB3aXRoaW4gdGhlIGJyb2FkZXIgdmlydHVhbGl6YXRpb24gbGFuZHNjYXBlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIHRoaXMgaXMgYSBjb3JlIFREWCBob3N0IHVwZGF0ZSBvciBhIGdlbmVyYWwgS1ZNL0ludGVsIGNoYW5nZSwgYW5kIHF1aWNrbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZHhcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0MzgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGV4dCwgcmVuZGVyZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6CgoqKkRpdmluZyBpbnRvIHRoZSBLVk0vVk1YIE1ha2VmaWxlKioKCk9rYXksIHNvIHRoZSBwcm9tcHQgdGVsbHMgbWUgdG8gY2hlY2sgb3V0IGBhcmNoL3g4Ni9rdm0vdm14L01ha2VmaWxlYC4gSW1tZWRpYXRlbHksIG15IGJyYWluIGtpY2tzIGludG8gZ2Vhci4gVGhpcyBpcyB0aGUgaGVhcnQgb2YgdGhlIHg4Ni1zcGVjaWZpYyBwYXJ0IG9mIEtWTSYjMzk7cyBWTVggKFZpcnR1YWwgTWFjaGluZSBFeHRlbnNpb25zKSBjb2RlLCB3aGljaCBpcyBob3cgSW50ZWwgQ1BVcyBwcm92aWRlIGhhcmR3YXJlIHZpcnR1YWxpemF0aW9uLiBJIGtub3cgdGhpcyBNYWtlZmlsZSBsaWtlbHkgZGVmaW5lcyB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgdGhlIGNvcmUgVk1YIGNvbXBvbmVudHMg4oCTIHRoZSBtb2R1bGVzLCBvYmplY3QgZmlsZXMsIGFuZCBwcm9iYWJseSBob3cgdGhleSYjMzk7cmUgbGlua2VkIHRvZ2V0aGVyLgoKSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipDb21waWxlciBmbGFnczoqKiBBcmUgdGhlcmUgc3BlY2lmaWMgZmxhZ3MgYmVpbmcgdXNlZCBmb3IgVk1YIGNvZGU/IFRoaW5ncyBsaWtlIGAtbXJlY29yZC1tY291bnRgLCBgLWZuby1zdHJpY3QtYWxpYXNpbmdgLCBvciBhbnl0aGluZyBzcGVjaWZpYyB0byBoYW5kbGUgdGhlIHByaXZpbGVnZWQgbmF0dXJlIG9mIHRoaXMgY29kZT8KKiAgICoqRGVwZW5kZW5jaWVzOioqIFdoYXQgb3RoZXIgZmlsZXMgYW5kIG1vZHVsZXMgZG9lcyB0aGlzIE1ha2VmaWxlIHJlbHkgb24/IEFyZSB0aGVyZSBjb3JlIEtWTSBjb21wb25lbnRzLCBvciBvdGhlciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmlsZXMsIG9yIHBvc3NpYmx5IGNvbW1vbiB2aXJ0dWFsaXphdGlvbiBzdHJ1Y3R1cmVzPwoqICAgKipPYmplY3QgZmlsZXM6KiogV2hhdCBhcmUgdGhlIG1ham9yIG9iamVjdCBmaWxlcyBidWlsdCBoZXJlPyBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHF1aWNrIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRpZmZlcmVudCBmdW5jdGlvbmFsIGFyZWFzIG9mIHRoZSBWTVggaW1wbGVtZW50YXRpb24uIFRoaW5ncyBsaWtlIGludGVycnVwdCBoYW5kbGluZywgVk1DUyBtYW5hZ2VtZW50LCBhbmQgbWVtb3J5IHRyYW5zbGF0aW9uIGFyZSB3aGF0IEkmIzM5O2QgZXhwZWN0IHRvIHNlZS4KKiAgICoqTW9kdWxlIGRlcGVuZGVuY2llczoqKiBIb3cgZG9lcyB0aGUgVk1YIG1vZHVsZSAobGlrZWx5IGBrdm0taW50ZWwua29gIG9yIHNvbWV0aGluZyBzaW1pbGFyKSBnZXQgYnVpbHQsIGFuZCB3aGF0JiMzOTtzIGl0cyByZWxhdGlvbnNoaXAgdG8gb3RoZXIgS1ZNIG1vZHVsZXM/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgbGlua2luZyBzdGVwcyBvciBidWlsZCBjb25maWd1cmF0aW9ucyBmb3Igc3BlY2lmaWMgQ1BVIGdlbmVyYXRpb25zIG9yIGZlYXR1cmVzPwoqICAgKipDb25kaXRpb25hbCBjb21waWxhdGlvbjoqKiBBcmUgdGhlcmUgYW55IGAjaWZkZWZgIG9yIHNpbWlsYXIgY29uc3RydWN0cyB0byBoYW5kbGUgZGlmZmVyZW50IENQVSBmZWF0dXJlcyAoZS5nLiwgRXh0ZW5kZWQgUGFnZSBUYWJsZXMgKEVQVCksIFZpcnR1YWxpemF0aW9uIEV4dGVuc2lvbnMgZm9yIEkvTyAoVklPKSkgb3Iga2VybmVsIGNvbmZpZ3VyYXRpb25zPyBUaGlzIGlzIGEga2V5IGFyZWEgdG8gbG9vayBmb3IgdG8gZGV0ZXJtaW5lIHRoZSBkZWdyZWUgb2YgY3VzdG9taXphdGlvbi4KCkVzc2VudGlhbGx5LCBJJiMzOTttIGV4cGVjdGluZyB0byB0cmFjZSB0aGUgYnVpbGQgcHJvY2VzcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbG93LWxldmVsIFZNWCBjb2RlIGlzIGludGVncmF0ZWQgaW50byB0aGUgS1ZNIGtlcm5lbCBtb2R1bGUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucywgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMsIG9yIGFyZWFzIHRoYXQgbWlnaHQgYmUgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIFRoaXMgaXMgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgS1ZNIHB1enpsZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RkeFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9NYWtlZmlsZT0yMT1rdm0taW50ZWwtJChDT05GSUdfS1ZNX0hZUEVSVilcdCYjNDM7PSB2bXgvaHlwZXJ2Lm8gdm14L2h5cGVydl9ldm1jcy5vXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MjI6a3ZtLWludGVsLSQoQ09ORklHX0tWTV9JTlRFTF9URFgpXHQmIzQzOz0gdm14L3RkeC5vXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMjMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA4NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgVERYIFN1cHBvcnQ6IEEgUXVpY2sgU2NhbioqCgpBbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwIGludG8gdGhpcyBhcmNoaXRlY3R1cmUsIGZpcnN0IHRoaW5nJiMzOTtzIGZpcnN0OiBnb3R0YSBtYWtlIHN1cmUgd2UmIzM5O3JlIHBsYXlpbmcgd2l0aCBhIHN1cHBvcnRlZCBlbnZpcm9ubWVudC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgY29kZSYjMzk7cyBwcm9iYWJseSBnb3QgY29uZGl0aW9uYWxzIGJhc2VkIG9uIHRoZSBgQ09ORklHX0tWTV9JTlRFTF9URFhgIGZsYWcuIFllcCwgdGhhdCYjMzk7cyB0aGUgb25lLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiB0aGUgcmVsZXZhbnQgYXJlYXMsIHByb2JhYmx5IHN0YXJ0aW5nIHdpdGggdGhlIEtWTSBJbnRlbCBtb2R1bGUgYW5kIGFueSBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb24gZmlsZXMuIE15IGh1bmNoIGlzIHRoYXQgdGhpcyB2YXJpYWJsZSBkaWN0YXRlcyBlbmFibGVtZW50IG9yIGRpc2FibGVtZW50IG9mIHRoZSBURFggZmVhdHVyZXMuIE1heWJlIEkgc2hvdWxkIGFsc28gbG9vayBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBgVERYYCBpbiB0aGUgY29udGV4dCBvZiB0aGUgZ3Vlc3Qgc2lkZS4gSXQmIzM5O2xsIGFsc28gbGlrZWx5IGJlIHJlZmVyZW5jZWQgaW4gYSBmZXcgb3RoZXIgcGxhY2VzOyBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGNvbmZpZyBvcHRpb24gaXMgdXNlZCBjb25zaXN0ZW50bHkgdG8gZ292ZXJuIHRoZSByaWdodCBmdW5jdGlvbmFsaXR5LiBJdCYjMzk7cyB0aGUgbHluY2hwaW4sIHRoZSBpbmRpY2F0b3Igb2Ygd2hldGhlciB3ZSYjMzk7cmUgaW4gYSBURFggd29ybGQgb3Igbm90LCB3aGljaCwgSSBiZXQsIGFmZmVjdHMgZXZlcnl0aGluZyBmcm9tIG1lbW9yeSBoYW5kbGluZyB0byB2aXJ0dWFsaXphdGlvbiBzdHJ1Y3R1cmVzLiBCZXR0ZXIgbWFrZSBzdXJlIHRoYXQgaXQgYWxsIG1ha2VzIHNlbnNlLiBPa2F5LCBsZXQmIzM5O3MgZ28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fSU5URUxfVERYJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUwOAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqRGVsdmluZyBpbnRvIEtWTV9JTlRFTF9URFggRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZmlndXJpbmcgb3V0IHdoYXQgZXhhY3RseSBgS1ZNX0lOVEVMX1REWGAgcmVsaWVzIG9uLiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMgY3JpdGljYWwgZm9yIGFueSBzZXJpb3VzIGludmVzdGlnYXRpb24sIHdoZXRoZXIgaXQmIzM5O3MgcmVsYXRlZCB0byBkZXZlbG9wbWVudCwgZGVidWdnaW5nLCBvciBqdXN0IHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbSBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byBrbm93IHdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBmZWF0dXJlcyBhcmUgZnVuZGFtZW50YWwgdG8gdGhlIG9wZXJhdGlvbiBvZiBgS1ZNX0lOVEVMX1REWGAuIFRoaW5ncyBsaWtlIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIHN1cHBvcnQgKG9mIGNvdXJzZSwgaXQmIzM5O3MgSW50ZWwtc3BlY2lmaWMsIGJ1dCB3aGljaCBzcGVjaWZpYyBmZWF0dXJlcz8pLCBvdGhlciBLVk0gbW9kdWxlcywgYW55IHNwZWNpZmljIGtlcm5lbCB2ZXJzaW9ucywgb3IgZXZlbiBwYXJ0aWN1bGFyIGNvbXBpbGVyIGZsYWdzIG1pZ2h0IGJlIGNydWNpYWwuIEkmIzM5O20gaW1hZ2luaW5nIGEgY29tcGxleCBncmFwaCBvZiBkZXBlbmRlbmNpZXMsIGFuZCBJIG5lZWQgdG8gdW50YW5nbGUgaXQgc28gSSBjYW4gc2VlIHRoZSBiaWdnZXIgcGljdHVyZS4gVGltZSB0byBkaWcgaW4gYW5kIHVucmF2ZWwgdGhlIGNvbm5lY3Rpb25zLiBMZXQmIzM5O3MgZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0tWTV9JTlRFTF9URFgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg3OAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gS1ZNIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWUgS1ZNIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gU3BlY2lmaWNhbGx5LCBJIHJlY2FsbCB0aGVyZSYjMzk7cyBzb21lIGludGVyZXN0aW5nIHN0dWZmIGFyb3VuZCBsaW5lIDEzNCBpbiB0aGUgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGl0LiBUaGlzIGZpbGUgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsIGNvbmZpZ3VyZXMgS1ZNIG9uIHg4Niwgc28gdW5kZXJzdGFuZGluZyBpdCB0aG9yb3VnaGx5IGlzIGVzc2VudGlhbC4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiB0aGVyZS4gSSYjMzk7bSBhbnRpY2lwYXRpbmcgc29tZSBpbnRlcmVzdGluZyBvcHRpb25zIHJlbGF0ZWQgdG8gQ1BVIGZlYXR1cmVzLCBNTVUgY29uZmlndXJhdGlvbiwgb3IgcGVyaGFwcyBldmVuIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMuIExldCYjMzk7cyBkaWcgaW4gYW5kIGZpbmQgb3V0IHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTI1Olx0XHRoZWxwXG4gMTI2Olx0XG4gMTI3Olx0XHQgIEVuYWJsZXMgS1ZNIGd1ZXN0cyB0byBjcmVhdGUgU0dYIGVuY2xhdmVzLlxuIDEyODpcdFxuIDEyOTpcdFx0ICBUaGlzIGluY2x1ZGVzIHN1cHBvcnQgdG8gZXhwb3NlIFwmIzM0O3Jhd1wmIzM0OyB1bnJlY2xhaW1hYmxlIGVuY2xhdmUgbWVtb3J5IHRvXG4gMTMwOlx0XHQgIGd1ZXN0cyB2aWEgYSBkZXZpY2Ugbm9kZSwgZS5nLiAvZGV2L3NneF92ZXBjLlxuIDEzMTpcdFxuIDEzMjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDEzMzpcdFxuIDEzNDpcdGNvbmZpZyBLVk1fSU5URUxfVERYXG4gMTM1Olx0XHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbiAxMzY6XHRcdGRlZmF1bHQgeVxuIDEzNzpcdFx0ZGVwZW5kcyBvbiBJTlRFTF9URFhfSE9TVFxuIDEzODpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG4gMTM5Olx0XHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BPUFVMQVRFXG4gMTQwOlx0XHRoZWxwXG4gMTQxOlx0XHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIGxhdW5jaGluZyBJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKVxuIDE0MjpcdFx0ICBjb25maWRlbnRpYWwgVk1zIG9uIEludGVsIHByb2Nlc3NvcnMuXG4gMTQzOlx0XG4gMTQ0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzOTUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSB3ZWxsLXZlcnNlZCBpbiB2aXJ0dWFsaXphdGlvbiBhbmQga2VybmVsIGNvbmZpZ3VyYXRpb246CgoqKkFuYWx5emluZyB0aGUgS1ZNL1REWCBEZXBlbmRlbmN5KioKCkFscmlnaHQsIHNvIGBLVk1fSU5URUxfVERYYCBpcyBmbGFnZ2VkIGFzIGRlcGVuZGVudCBvbiBgSU5URUxfVERYX0hPU1RgLiBUaGF0JiMzOTtzIGEgY2xlYXIgaW5kaWNhdG9yIG9mIGEgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIGZlYXR1cmUgb3IgZW5hYmxpbmcgY29uZGl0aW9uLiBJbW1lZGlhdGVseSwgbXkgbWVudGFsIGNoZWNrbGlzdCBzdGFydHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAuIEl0JiMzOTtzIHR5cGljYWwgdGhhdCBlbmFibGluZyB0aGUgS1ZNIFREWCBndWVzdCBzdXBwb3J0IHJlcXVpcmVzIHRoZSB1bmRlcmx5aW5nIGhvc3QgaW5mcmFzdHJ1Y3R1cmUgKHRoZSAmIzM0O2hvc3QmIzM0OyBzdXBwb3J0KSB0byBhbHNvIGJlIGFjdGl2YXRlZC4KClRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBkZWVwZXIgaW50byBgSU5URUxfVERYX0hPU1RgLiBJIG5lZWQgdG8gdmVyaWZ5IHdoYXQgdGhpcyBwYXJ0aWN1bGFyIG9wdGlvbiBkb2VzLiBUaGlzIHdpbGwgaW52b2x2ZSBjaGVja2luZyB0aGUga2VybmVsIGRvY3VtZW50YXRpb24sIHRoZSBLY29uZmlnIGZpbGUgZm9yIGBJTlRFTF9URFhfSE9TVGAsIGFuZCBpZGVhbGx5LCB0aGUgcmVsZXZhbnQgSW50ZWwgZG9jdW1lbnRhdGlvbiBvbiBURFguIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGl0IHJlbGF0ZXMgdG86IHRoZSBDUFUmIzM5O3MgY2FwYWJpbGl0aWVzLCBzcGVjaWZpYyBmaXJtd2FyZSByZXF1aXJlbWVudHMsIGFueSB1bmRlcmx5aW5nIGNoaXBzZXQgc3VwcG9ydCwgYW5kIGFueSBvdGhlciByZWxldmFudCBob3N0LWxldmVsIGNvbmZpZ3VyYXRpb25zLgoKSSYjMzk7bSBlc3NlbnRpYWxseSBhc3Nlc3Npbmcgd2hldGhlciBJJiMzOTt2ZSBnb3QgdGhlIGNvcnJlY3QgaG9zdCBwbGF0Zm9ybSB3aXRoIHRoZSBuZWNlc3NhcnkgaGFyZHdhcmUgb3IgaWYgSSYjMzk7bSBtaXNzaW5nIHNvbWUgb3RoZXIgY29uZmlndXJhdGlvbiBpdGVtIHRoYXQgd2lsbCBhbGxvdyBgS1ZNX0lOVEVMX1REWGAgdG8gd29yay4gSSBuZWVkIHRvIHJ1bGUgb3V0IGhhcmR3YXJlIG9yIHN5c3RlbS1sZXZlbCBpbmNvbXBhdGliaWxpdGllcy4gSWYgYElOVEVMX1REWF9IT1NUYCBpc24mIzM5O3QgZW5hYmxlZCwgSSB3b24mIzM5O3QgaGF2ZSBhIGZ1bmN0aW9uYWwgVERYIGVudmlyb25tZW50LiBUaGlzIGlzIGp1c3QgdGhlIGluaXRpYWwgZGlhZ25vc3RpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElOVEVMX1REWF9IT1NUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9MTg0ND1jb25maWcgWDg2X1VTRVJfU0hBRE9XX1NUQUNLXG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xODYzLVxuYXJjaC94ODYvS2NvbmZpZzoxODY0OmNvbmZpZyBJTlRFTF9URFhfSE9TVFxuYXJjaC94ODYvS2NvbmZpZy0xODY1LVx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBob3N0IHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg2OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgeDg2IEFyY2hpdGVjdHVyZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBhcmNoL3g4Ni9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gTGV0JiMzOTtzIHN0YXJ0IGFyb3VuZCBsaW5lIDE4NjQg4oCTIHRoYXQmIzM5O3Mgb2Z0ZW4gYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBleHBsb3Jpbmcgc3BlY2lmaWMgZmVhdHVyZSBzZXRzIG9yIHJlbGF0ZWQgc2V0dGluZ3MuIEhvcGVmdWxseSwgdGhpcyBzZWN0aW9uIHdpbGwgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBhc3BlY3RzIEkmIzM5O20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIGRldGFpbHMgYWJvdXQgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGVyZSwgbGlrZWx5IHJlbGF0ZWQgdG8gW2luc2VydCB5b3VyIGZpZWxkJiMzOTtzIGV4cGVjdGF0aW9uIGZyb20gbG9va2luZyBhdCBgYXJjaC94ODYvS2NvbmZpZ2BdLiBUaGlzIHNob3VsZCBiZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODYwOlx0XHQgIFNlZSBEb2N1bWVudGF0aW9uL2FyY2gveDg2L3Noc3RrLnJzdCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbjE4NjE6XHRcbjE4NjI6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjE4NjM6XHRcbjE4NjQ6XHRjb25maWcgSU5URUxfVERYX0hPU1RcbjE4NjU6XHRcdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgaG9zdCBzdXBwb3J0XCYjMzQ7XG4xODY2Olx0XHRkZXBlbmRzIG9uIENQVV9TVVBfSU5URUxcbjE4Njc6XHRcdGRlcGVuZHMgb24gWDg2XzY0XG4xODY4Olx0XHRkZXBlbmRzIG9uIEtWTV9JTlRFTFxuMTg2OTpcdFx0ZGVwZW5kcyBvbiBYODZfWDJBUElDXG4xODcwOlx0XHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXG4xODcxOlx0XHRkZXBlbmRzIG9uIENPTlRJR19BTExPQ1xuMTg3MjpcdFx0ZGVwZW5kcyBvbiBYODZfTUNFXG4xODczOlx0XHRoZWxwXG4xODc0Olx0XHQgIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHByb3RlY3RzIGd1ZXN0IFZNcyBmcm9tIG1hbGljaW91c1xuMTg3NTpcdFx0ICBob3N0IGFuZCBjZXJ0YWluIHBoeXNpY2FsIGF0dGFja3MuICBUaGlzIG9wdGlvbiBlbmFibGVzIG5lY2Vzc2FyeSBURFhcbjE4NzY6XHRcdCAgc3VwcG9ydCBpbiB0aGUgaG9zdCBrZXJuZWwgdG8gcnVuIGNvbmZpZGVudGlhbCBWTXMuXG4xODc3Olx0XG4xODc4Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4xODc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzk5CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVERYOiBJbml0aWFsIEFzc2Vzc21lbnQqKgoKT2theSwgc28gdGhlIHF1ZXN0aW9uIGltbWVkaWF0ZWx5IHBvcHBpbmcgaW50byBteSBoZWFkIGlzLCBjYW4gd2UgKmZ1enoqIFREWD8gVGhlIHRleHQgbWVudGlvbnMgY29kZSBwYXRocyB0aGF0IGFyZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBCdXQsIFREWCBpcyBhICpoYXJkd2FyZSogZmVhdHVyZSwgcmlnaHQ/IFRoYXQgc3VnZ2VzdHMgUUVNVSBjYW4mIzM5O3QgZW11bGF0ZSBpdC4KClJpZ2h0LCBjb25maXJtZWQuIFFFTVUgbmVlZHMgdGhlIHVuZGVybHlpbmcgSW50ZWwgU0dYL1REWCBoYXJkd2FyZSBhbmQgdGhlIFNFQU0gbW9kdWxlLiBObyBlbXVsYXRpb24gcG9zc2libGUgaGVyZS4KCkhtbSwgdGhpcyBwYXRjaCwgdGhvdWdoLi4uIGl0JiMzOTtzIGFsc28gdG91Y2hpbmcgYGFyY2gveDg2L2t2bS92bXgvdm14LmNgIGFuZCBgYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaGAuIFRoYXQmIzM5O3MgaW50cmlndWluZy4gTGV0JiMzOTtzIGRpZyBpbnRvIHdoYXQgdGhvc2UgY2hhbmdlcyBpbiBgdm14LmNgIGFyZSBhbGwgYWJvdXQuIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgYmVpbmcgbW9kaWZpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC92bXguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYyNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjI2NTpcdH1cbjYyNjY6XHQjZW5kaWYgLyogQ09ORklHX1g4Nl9TR1hfS1ZNICovXG42MjY3Olx0XG42MjY4Olx0aW50IGhhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuNjI2OTpcdHtcbjYyNzA6XHRcdC8qXG42MjcxOlx0XHQgKiBIYXJkd2FyZSBtYXkgb3IgbWF5IG5vdCBzZXQgdGhlIEJVU19MT0NLX0RFVEVDVEVEIGZsYWcgb24gQlVTX0xPQ0tcbjYyNzI6XHRcdCAqIFZNLUV4aXRzLiBVbmNvbmRpdGlvbmFsbHkgc2V0IHRoZSBmbGFnIGhlcmUgYW5kIGxlYXZlIHRoZSBoYW5kbGluZyB0b1xuNjI3MzpcdFx0ICogdm14X2hhbmRsZV9leGl0KCkuXG42Mjc0Olx0XHQgKi9cbjYyNzU6XHRcdHRvX3Z0KHZjcHUpLVx1MDAzZWV4aXRfcmVhc29uLmJ1c19sb2NrX2RldGVjdGVkID0gdHJ1ZTtcbjYyNzY6XHRcdHJldHVybiAxO1xuNjI3NzpcdH1cbjYyNzg6XHRcbjYyNzk6XHRzdGF0aWMgaW50IGhhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuNjI4MDpcdHtcbjYyODE6XHRcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG42MjgyOlx0XG42MjgzOlx0XHQvKlxuNjI4NDpcdFx0ICogTm90aWZ5IFZNIGV4aXQgaGFwcGVuZWQgd2hpbGUgZXhlY3V0aW5nIGlyZXQgZnJvbSBOTUksXG42Mjg1Olx0XHQgKiBcJiMzNDtibG9ja2VkIGJ5IE5NSVwmIzM0OyBiaXQgaGFzIHRvIGJlIHNldCBiZWZvcmUgbmV4dCBWTSBlbnRyeS5cbjYyODY6XHRcdCAqL1xuNjI4NzpcdFx0aWYgKGVuYWJsZV92bm1pIFx1MDAyNlx1MDAyNiAoZXhpdF9xdWFsIFx1MDAyNiBJTlRSX0lORk9fVU5CTE9DS19OTUkpKVxuNjI4ODpcdFx0XHR2bWNzX3NldF9iaXRzKEdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTyxcbjYyODk6XHRcdFx0XHQgICAgICBHVUVTVF9JTlRSX1NUQVRFX05NSSk7XG42MjkwOlx0XG42MjkxOlx0XHRyZXR1cm4gX192bXhfaGFuZGxlX25vdGlmeSh2Y3B1LCBleGl0X3F1YWwpO1xuNjI5MjpcdH1cbjYyOTM6XHRcbjYyOTQ6XHRzdGF0aWMgaW50IHZteF9nZXRfbXNyX2ltbV9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuNjI5NTpcdHtcbjYyOTY6XHRcdHJldHVybiB2bXhfZ2V0X2luc3RyX2luZm9fcmVnKHZtY3NfcmVhZDMyKFZNWF9JTlNUUlVDVElPTl9JTkZPKSk7XG42Mjk3Olx0fVxuNjI5ODpcdFxuNjI5OTpcdHN0YXRpYyBpbnQgaGFuZGxlX3JkbXNyX2ltbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG42MzAwOlx0e1xuNjMwMTpcdFx0cmV0dXJuIGt2bV9lbXVsYXRlX3JkbXNyX2ltbSh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcbjYzMDI6XHRcdFx0XHRcdCAgICAgdm14X2dldF9tc3JfaW1tX3JlZyh2Y3B1KSk7XG42MzAzOlx0fVxuNjMwNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQzOAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDM3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9ucyBvZiB0aGUgQ29kZSBDaGFuZ2UqKgoKT2theSwgc28gdGhlIGB2bXguY2AgY2hhbmdlIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGBoYW5kbGVfYnVzX2xvY2tfdm1leGl0YCBpcyBubyBsb25nZXIgYHN0YXRpY2AgYW5kIGBoYW5kbGVfbm90aWZ5YCBpcyBiZWluZyByZWZhY3RvcmVkIHRvIHVzZSBhIG5ldyBpbnRlcm5hbCBmdW5jdGlvbiwgYF9fdm14X2hhbmRsZV9ub3RpZnlgIGRlZmluZWQgaW4gYGNvbW1vbi5oYC4gVGhlIGNvcmUgbG9naWMgb2YgYGhhbmRsZV9ub3RpZnlgIGlzIGVzc2VudGlhbGx5IG1vdmVkLCBlbmFibGluZyByZXVzZSwgcHJlc3VtYWJseSBmb3IgVERYLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGlzIGBoYW5kbGVfbm90aWZ5YCBzdGlsbCByZWxldmFudCBvdXRzaWRlIGEgVERYIGNvbnRleHQ/IE9mIGNvdXJzZSBpdCBpcy4gSXQmIzM5O3MgYSBzdGFuZGFyZCBWTVggZXhpdCBoYW5kbGVyLiBJJiMzOTttIGRlYWxpbmcgd2l0aCBgRVhJVF9SRUFTT05fTk9USUZZYC4gQW5kIHRoYXQmIzM5O3MgcmVhY2hhYmxlIGluIGVudmlyb25tZW50cyBsaWtlIFFFTVUgd2l0aCBWTVggZW11bGF0aW9uLCBvciBpbiBuZXN0ZWQgS1ZNIHNjZW5hcmlvcy4KCk5vdywgd2FpdCBhIG1pbnV0ZSwgc3l6a2FsbGVyIGlzIHRoZSBmdXp6ZXIgdGhhdCYjMzk7cyByZWxldmFudCBoZXJlIGFuZCBpdCBpbnRlcmFjdHMgd2l0aCBLVk0gdmlhIGBLVk1fUlVOYCBpb2N0bHMuIFNvLCBpZiB0aGUgaG9zdCBDUFUgc3VwcG9ydHMgbm90aWZ5IFZNIGV4aXRzLCBvciBpZiB0aG9zZSBleGl0cyBhcmUgZW11bGF0ZWQsIHRoZW4gdGhhdCBwYXJ0IG9mIHRoZSBjb2RlIGlzIHJlYWNoYWJsZS4gVGhlIGFjdHVhbCBjaGFuZ2UgaW4gYHZteC5jYCBpcyBqdXN0IGNvZGUgbW92ZW1lbnQgdGhvdWdoLCBtb3N0bHkgbW92aW5nIHRoZSBsb2dpYyBpbnRvIGEgc2hhcmVkIGlubGluZSBmdW5jdGlvbi4gVGhlIG1haW4gZnVuY3Rpb25hbCBjaGFuZ2UgaXMgbGlrZWx5IGhhcHBlbmluZyB3aXRoaW4gYHRkeC5jYC4KClRoZSByZWFsIHF1ZXN0aW9uIGlzIGFib3V0IFREWC4gQ2FuIHN5emthbGxlciByZWFjaCB0aGlzIFREWCBmdW5jdGlvbmFsaXR5PyBJdCBydW5zIGluIEdDRSBWTXMuIEFuZCBHQ0UgVk1zIGRvbiYjMzk7dCBzdXBwb3J0IFREWCBob3N0IGZlYXR1cmVzICp5ZXQqLiBFdmVuIGlmIHRoZXkgZGlkLCBURFggcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUgYW5kIGZpcm13YXJlIGNvbXBvbmVudHMgbGlrZSB0aGUgU0VBTSBtb2R1bGUuIFNvLCBhcmUgd2UgdGFsa2luZyBhYm91dCBhIHN5emthbGxlciBURFggZnV6emluZyB0YXJnZXQ/IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHN5emthbGxlciBkZXNjcmlwdGlvbnMgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S1ZNX0lOVEVMX1REWCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU9MjE9a3ZtLWludGVsLSQoQ09ORklHX0tWTV9IWVBFUlYpXHQmIzQzOz0gdm14L2h5cGVydi5vIHZteC9oeXBlcnZfZXZtY3Mub1xuYXJjaC94ODYva3ZtL01ha2VmaWxlOjIyOmt2bS1pbnRlbC0kKENPTkZJR19LVk1fSU5URUxfVERYKVx0JiM0Mzs9IHZteC90ZHgub1xuYXJjaC94ODYva3ZtL01ha2VmaWxlLTIzLVxuLS1cbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmg9MzQ9c3RydWN0IHZjcHVfdnQge1xuLS1cbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtNTgtXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oOjU5OiNpZmRlZiBDT05GSUdfS1ZNX0lOVEVMX1REWFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaC02MC1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMi1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEzOiNpZmRlZiBDT05GSUdfS1ZNX0lOVEVMX1REWFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTQtc3RhdGljX2Fzc2VydChvZmZzZXRvZihzdHJ1Y3QgdmNwdV92bXgsIHZ0KSA9PSBvZmZzZXRvZihzdHJ1Y3QgdmNwdV90ZHgsIHZ0KSk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODYzPXN0YXRpYyBpbnQgdnRfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODczLSNkZWZpbmUgdnRfb3BfdGR4X29ubHkobmFtZSkgdnRfIyNuYW1lXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4NzQ6I2Vsc2UgLyogQ09ORklHX0tWTV9JTlRFTF9URFggKi9cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTg3NS0jZGVmaW5lIHZ0X29wKG5hbWUpIHZteF8jI25hbWVcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTg3Ni0jZGVmaW5lIHZ0X29wX3RkeF9vbmx5KG5hbWUpIE5VTExcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjg3NzojZW5kaWYgLyogQ09ORklHX0tWTV9JTlRFTF9URFggKi9cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTg3OC1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTYtXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oOjc6I2lmZGVmIENPTkZJR19LVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTgtI2luY2x1ZGUgXCYjMzQ7Y29tbW9uLmhcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaD0xMjc9dm9pZCB2bXhfc2V0dXBfbWNlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaC0xMjgtXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaDoxMjk6I2lmZGVmIENPTkZJR19LVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaC0xMzAtdm9pZCB0ZHhfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDkyCgkJCQkJCQlvdXRwdXQ6IDE2MAoJCQkJCQkJdGhvdWdodHM6IDE2NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IFdvcnRoRnV6emluZz1mYWxzZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHRvdWNoZXMgYHRkeC5jYCBhbmQgYWxzbyBtYWtlcyBzb21lIGNoYW5nZXMgdG8gYHZteC5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgYW55IG9mIHRoZSBjb2RlIGlzIHJlYWNoYWJsZSBpbiBhIHR5cGljYWwgZnV6emluZyBzZXR1cC4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBgdGR4LmNgIG1vZGlmaWNhdGlvbnMgYXJlIGV2ZW4gcmVsZXZhbnQuIEJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgVERYLCBpdCBhYnNvbHV0ZWx5IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIHN1cHBvcnQuIFlvdSBjYW4mIzM5O3QganVzdCBzcGluIHVwIGEgUUVNVSBpbnN0YW5jZSBhbmQgbWFnaWNhbGx5IGhhdmUgVERYLiBUaGUgVERYIG1vZHVsZSAoU0VBTSkgbmVlZHMgdG8gYmUgbG9hZGVkIGJ5IHRoZSBCSU9TL2Zpcm13YXJlLCBhbmQgeW91IG5lZWQgYSBwaHlzaWNhbCBJbnRlbCBDUFUgdGhhdCBzdXBwb3J0cyBURFguIFNvLCBJIG5lZWQgdG8gY29uZmlybTogY2FuIFFFTVUgZW11bGF0ZSBURFggYXMgYSBob3N0PyBOb3BlLCBub3QgZXZlbiBhIGd1ZXN0LCBubyB3YXkuIFNvLCB0aGUgY29kZSBwYXRocyBpbiBgdGR4LmNgLCBpbiB0aGUgY29udGV4dCBvZiBLVk0sIGFyZSBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiBUaGF0JiMzOTtzIGEgaHVnZSBjbHVlLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCBgdm14LmNgLiAgSSBzZWUgYSBjaGFuZ2UgdG8gYGhhbmRsZV9idXNfbG9ja192bWV4aXRgLCBtYWtpbmcgaXQgbm9uLXN0YXRpYy4gIE9rYXksIHRoYXQmIzM5O3MganVzdCBhIHZpc2liaWxpdHkgY2hhbmdlLCBub3QgZnVuY3Rpb25hbC4gSSYjMzk7bSBhbHNvIGxvb2tpbmcgYXQgdGhlIHJlZmFjdG9yaW5nIG9mIGBoYW5kbGVfbm90aWZ5YC4gRXNzZW50aWFsbHksIHRoZSBjb2RlIHRoYXQgd2FzIGluIGBoYW5kbGVfbm90aWZ5YCBpcyBub3cgaW4gYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uIGNhbGxlZCBgX192bXhfaGFuZGxlX25vdGlmeWAgZGVmaW5lZCBpbiBgY29tbW9uLmhgLiBUaGUgbG9naWMgaXMgKmV4YWN0bHkqIHRoZSBzYW1lLiBKdXN0IG1vdmluZyBjb2RlIGFyb3VuZC4gTm8gYWN0dWFsIGNoYW5nZXMgaW4gZnVuY3Rpb25hbGl0eSBmb3IgVk1YLiBJIGRvdWJsZSBjaGVja2VkIHRoZSBsb2dpYyBhbmQgaXQmIzM5O3MgYml0LWZvci1iaXQgaWRlbnRpY2FsLgoKT2theSwgc28gSSBoYXZlIGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24uCgpUbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIGdvIHRocm91Z2ggdGhlIHJlbGV2YW50IGZpbGVzLiBUaGVyZSYjMzk7cyBhIGNoYW5nZSB0byBgdm14LmNgOiBjaGFuZ2luZyB0aGUgc3RhdGljIHZpc2liaWxpdHkgb2YgYGhhbmRsZV9idXNfbG9ja192bWV4aXRgLiAgSXQgaGFzIGEgcHJvdG90eXBlIGluIGB2bXguaGAgYWRkZWQuIE5vIGNoYW5nZXMgdG8gb3RoZXIgbG9naWMuICBBbmQgYSBuZXcgaW5saW5lIGZ1bmN0aW9uLCBgX192bXhfaGFuZGxlX25vdGlmeWAsIGluIGBjb21tb24uaGAuIFRoZSBjb3JlIG9mIHRoZSBmdW5jdGlvbmFsaXR5IHN0aWxsIGxpZXMgd2l0aCBURFggaW4gYHRkeC5jYCwgd2hpY2gsIGFzIHdlIGVzdGFibGlzaGVkLCBpcyB1bnJlYWNoYWJsZS4gSSYjMzk7bSBzZWVpbmcgYSBsb3Qgb2YgVERYLXNwZWNpZmljIGNoYW5nZXMgaW4gYHRkeF90b192bXhfZXhpdF9yZWFzb25gLCBgdGR4X3ZjcHVfZW50ZXJfZXhpdGAsIGB0ZHhfZmFpbGVkX3ZtZW50cnlgLCBgdGR4X3ZjcHVfcnVuYCwgYHRkeF9oYW5kbGVfZXhpdGAsIGB0ZHhfZ2V0X2V4aXRfaW5mb2AsIGB0ZHhfdmNwdV9pbml0YC4gVGhlc2UgYXJlIGFsbCBURFggcmVsYXRlZCBjb2RlIGFuZCBub3QgcmVhY2hhYmxlIHdpdGggUUVNVS4KCkdpdmVuIHRoZSBndWlkZWxpbmVzIEkgaGF2ZSwgdGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIG9ubHkgdG8gVERYLCB3aGljaCBpcyB1bnJlYWNoYWJsZS4gVGhlIFZNWCBjaGFuZ2VzIGFyZSBqdXN0IGNsZWFudXAuIE5vIG5ldyBhdHRhY2sgc3VyZmFjZS4gSSYjMzk7bSBwcmV0dHkgY29uZmlkZW50IGluIHJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJlZmFjdG9yaW5nIG9mIFZNWCBjb2RlIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGZ1bmN0aW9uYWxpdHkgb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyB0aGF0IGEgZnV6emVyIGNvdWxkIHRhcmdldCBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgbmV3IGNvZGUgaXMgcmVsYXRlZCB0byBURFggYW5kIHRoYXQgd2lsbCBuZXZlciBiZSByZWFjaGVkIGR1cmluZyBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIGV4Y2x1c2l2ZWx5IHRvIEtWTSYjMzk7cyBJbnRlbCBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBob3N0IHN1cHBvcnQgKGBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jYCkuIFRoZSBtb2RpZmljYXRpb25zIHRvIHN0YW5kYXJkIFZNWCBjb2RlIChgdm14LmNgLCBgY29tbW9uLmhgKSBhcmUgcHVyZWx5IHJlZmFjdG9yaW5nIHRvIHNoYXJlIGV4aXN0aW5nIGBoYW5kbGVfbm90aWZ5YCBhbmQgYGhhbmRsZV9idXNfbG9ja192bWV4aXRgIGxvZ2ljIHdpdGggVERYLiBTaW5jZSBURFggaG9zdCBmZWF0dXJlcyByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIEludGVsIGhhcmR3YXJlIGFuZCBmaXJtd2FyZSAoU0VBTSBtb2R1bGUpIHRoYXQgY2Fubm90IGJlIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIGV4Y2x1c2l2ZWx5IHRvIEtWTSYjMzk7cyBJbnRlbCBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBob3N0IHN1cHBvcnQgKGBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jYCkuIFRoZSBtb2RpZmljYXRpb25zIHRvIHN0YW5kYXJkIFZNWCBjb2RlIChgdm14LmNgLCBgY29tbW9uLmhgKSBhcmUgcHVyZWx5IHJlZmFjdG9yaW5nIHRvIHNoYXJlIGV4aXN0aW5nIGBoYW5kbGVfbm90aWZ5YCBhbmQgYGhhbmRsZV9idXNfbG9ja192bWV4aXRgIGxvZ2ljIHdpdGggVERYLiBTaW5jZSBURFggaG9zdCBmZWF0dXJlcyByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIEludGVsIGhhcmR3YXJlIGFuZCBmaXJtd2FyZSAoU0VBTSBtb2R1bGUpIHRoYXQgY2Fubm90IGJlIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODozNTowNS44ODkyMjgxNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNDU2NDY1ODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgZXhjbHVzaXZlbHkgdG8gS1ZNJ3MgSW50ZWwgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgaG9zdCBzdXBwb3J0IChgYXJjaC94ODYva3ZtL3ZteC90ZHguY2ApLiBUaGUgbW9kaWZpY2F0aW9ucyB0byBzdGFuZGFyZCBWTVggY29kZSAoYHZteC5jYCwgYGNvbW1vbi5oYCkgYXJlIHB1cmVseSByZWZhY3RvcmluZyB0byBzaGFyZSBleGlzdGluZyBgaGFuZGxlX25vdGlmeWAgYW5kIGBoYW5kbGVfYnVzX2xvY2tfdm1leGl0YCBsb2dpYyB3aXRoIFREWC4gU2luY2UgVERYIGhvc3QgZmVhdHVyZXMgcmVxdWlyZSBzcGVjaWZpYyBwaHlzaWNhbCBJbnRlbCBoYXJkd2FyZSBhbmQgZmlybXdhcmUgKFNFQU0gbW9kdWxlKSB0aGF0IGNhbm5vdCBiZSBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgdGhlc2UgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODozNTowNS44ODkyMzI4MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk4ODM3NjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDBkNjZhZDJkNjllZTE3NmJkZTZiMTY0ODUxM2JiN2I2NGNmODNkYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxMiAwODozNTowNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oIGIvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaFxcbmluZGV4IDA4MDA1Njc2NzAyYzIuLjJjYmFhOWFiYTkwMWMgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaFxcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcXG5AQCAtNCw2ICs0LDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdm1faG9zdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3Bvc3RlZF9pbnRyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20vdm14LmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwibW11LmhcXFwiXFxuIFxcbkBAIC0xODMsNiArMTg0LDI0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3ZteF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRrdm1fdmNwdV90cmlnZ2VyX3Bvc3RlZF9pbnRlcnJ1cHQodmNwdSwgUE9TVEVEX0lOVFJfVkVDVE9SKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBpbnQgX192bXhfaGFuZGxlX25vdGlmeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsKVxcbit7XFxuK1xcdGJvb2wgY29udGV4dF9pbnZhbGlkID0gZXhpdF9xdWFsIFxcdTAwMjYgTk9USUZZX1ZNX0NPTlRFWFRfSU5WQUxJRDtcXG4rXFxuK1xcdCsrdmNwdS1cXHUwMDNlc3RhdC5ub3RpZnlfd2luZG93X2V4aXRzO1xcbitcXG4rXFx0aWYgKHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5ub3RpZnlfdm1leGl0X2ZsYWdzIFxcdTAwMjYgS1ZNX1g4Nl9OT1RJRllfVk1FWElUX1VTRVIgfHxcXG4rXFx0ICAgIGNvbnRleHRfaW52YWxpZCkge1xcbitcXHRcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZWV4aXRfcmVhc29uID0gS1ZNX0VYSVRfTk9USUZZO1xcbitcXHRcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZW5vdGlmeS5mbGFncyA9IGNvbnRleHRfaW52YWxpZCA/XFxuK1xcdFxcdFxcdFxcdFxcdCAgS1ZNX05PVElGWV9DT05URVhUX0lOVkFMSUQgOiAwO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDE7XFxuK31cXG4rXFxuIG5vaW5zdHIgdm9pZCB2bXhfaGFuZGxlX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiBcXG4gI2VuZGlmIC8qIF9fS1ZNX1g4Nl9WTVhfQ09NTU9OX0ggKi9cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcXG5pbmRleCBiMjcyYzIwNTg2YTc0Li5lNzA0NzY1N2VmNzgwIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXFxuQEAgLTkyMSwxMCArOTIxLDEzIEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIHRkY2FsbF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRyZXR1cm4gRVhJVF9SRUFTT05fVERDQUxMO1xcbiB9XFxuIFxcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4rLyogU3ludGhlc2l6ZWQgaW52YWxpZCBFeGl0IFJlYXNvbiAqL1xcbisjZGVmaW5lIFREWF9JTlZBTElEX0VYSVRfUkVBU09OXFx0XFx0VTE2X01BWFxcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bmlvbiB2bXhfZXhpdF9yZWFzb24gdGR4X3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0c3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7XFxuLVxcdHUzMiBleGl0X3JlYXNvbjtcXG4rXFx0dW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uO1xcbiBcXG4gXFx0c3dpdGNoICh0ZHgtXFx1MDAzZXZwX2VudGVyX3JldCBcXHUwMDI2IFREWF9TRUFNQ0FMTF9TVEFUVVNfTUFTSykge1xcbiBcXHRjYXNlIFREWF9TVUNDRVNTOlxcbkBAIC05MzQsMjMgKzkzNywzMiBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0Y2FzZSBURFhfTk9OX1JFQ09WRVJBQkxFX1REX1dST05HX0FQSUNfTU9ERTpcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuLVxcdFxcdHJldHVybiAtMXU7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFJldHVybiB0aGUgc3ludGhlc2l6ZWQgaW52YWxpZCBFeGl0IFJlYXNvbiwgYXMgdGhlIFREWFxcbitcXHRcXHQgKiBtb2R1bGUgbmV2ZXIgYXR0ZW1wdGVkIHRvIHJ1biB0aGUgdkNQVSwgaS5lLiB0aGUgRXhpdFxcbitcXHRcXHQgKiBSZWFzb24gaXMgdW5kZWZpbmVkLCBidXQgdGhpcyBpcyBOT1QgYSBmYWlsZWQgVk0tRW50ZXJcXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJldHVybiAodW5pb24gdm14X2V4aXRfcmVhc29uKSB7XFxuK1xcdFxcdFxcdC5iYXNpYyA9IFREWF9JTlZBTElEX0VYSVRfUkVBU09OLFxcbitcXHRcXHR9O1xcbiBcXHR9XFxuIFxcbi1cXHRleGl0X3JlYXNvbiA9IHRkeC1cXHUwMDNldnBfZW50ZXJfcmV0O1xcbitcXHRleGl0X3JlYXNvbi5mdWxsID0gKHUzMil0ZHgtXFx1MDAzZXZwX2VudGVyX3JldDtcXG4gXFxuLVxcdHN3aXRjaCAoZXhpdF9yZWFzb24pIHtcXG4rXFx0c3dpdGNoIChleGl0X3JlYXNvbi5iYXNpYykge1xcbiBcXHRjYXNlIEVYSVRfUkVBU09OX1REQ0FMTDpcXG4gXFx0XFx0aWYgKHRkdm1jYWxsX2V4aXRfdHlwZSh2Y3B1KSlcXG4tXFx0XFx0XFx0cmV0dXJuIEVYSVRfUkVBU09OX1ZNQ0FMTDtcXG4tXFxuLVxcdFxcdHJldHVybiB0ZGNhbGxfdG9fdm14X2V4aXRfcmVhc29uKHZjcHUpO1xcbitcXHRcXHRcXHRleGl0X3JlYXNvbi5iYXNpYyA9IEVYSVRfUkVBU09OX1ZNQ0FMTDtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRleGl0X3JlYXNvbi5iYXNpYyA9IHRkY2FsbF90b192bXhfZXhpdF9yZWFzb24odmNwdSk7XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIEVYSVRfUkVBU09OX0VQVF9NSVNDT05GSUc6XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIERlZmVyIEtWTV9CVUdfT04oKSB1bnRpbCB0ZHhfaGFuZGxlX2V4aXQoKSBiZWNhdXNlIHRoaXMgaXMgaW5cXG4gXFx0XFx0ICogbm9uLWluc3RydW1lbnRhYmxlIGNvZGUgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0cmV0dXJuIC0xdTtcXG4rXFx0XFx0ZXhpdF9yZWFzb24uYmFzaWMgPSBURFhfSU5WQUxJRF9FWElUX1JFQVNPTjtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuQEAgLTk2Nyw3ICs5NzksNyBAQCBzdGF0aWMgbm9pbnN0ciB2b2lkIHRkeF92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gXFx0dGR4LVxcdTAwM2V2cF9lbnRlcl9yZXQgPSB0ZGhfdnBfZW50ZXIoXFx1MDAyNnRkeC1cXHUwMDNldnAsIFxcdTAwMjZ0ZHgtXFx1MDAzZXZwX2VudGVyX2FyZ3MpO1xcbiBcXG4tXFx0dnQtXFx1MDAzZWV4aXRfcmVhc29uLmZ1bGwgPSB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHZjcHUpO1xcbitcXHR2dC1cXHUwMDNlZXhpdF9yZWFzb24gPSB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHZjcHUpO1xcbiBcXG4gXFx0dnQtXFx1MDAzZWV4aXRfcXVhbGlmaWNhdGlvbiA9IHRkeC1cXHUwMDNldnBfZW50ZXJfYXJncy5yY3g7XFxuIFxcdHRkeC1cXHUwMDNlZXh0X2V4aXRfcXVhbGlmaWNhdGlvbiA9IHRkeC1cXHUwMDNldnBfZW50ZXJfYXJncy5yZHg7XFxuQEAgLTk4MSw4ICs5OTMsNyBAQCBzdGF0aWMgbm9pbnN0ciB2b2lkIHRkeF92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gc3RhdGljIGJvb2wgdGR4X2ZhaWxlZF92bWVudHJ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbi1cXHRyZXR1cm4gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgICAgdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mdWxsICE9IC0xdTtcXG4rXFx0cmV0dXJuIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnk7XFxuIH1cXG4gXFxuIHN0YXRpYyBmYXN0cGF0aF90IHRkeF9leGl0X2hhbmRsZXJzX2Zhc3RwYXRoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5AQCAtMTA3MSw4ICsxMDgyLDEwIEBAIGZhc3RwYXRoX3QgdGR4X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncylcXG4gXFx0ICogYWxsb3dpbmcgdkNQVSBlbnRyeSB0byBhdm9pZCBjb250ZW50aW9uIHdpdGggdGRoX3ZwX2VudGVyKCkgYW5kXFxuIFxcdCAqIFREQ0FMTHMuXFxuIFxcdCAqL1xcbi1cXHRpZiAodW5saWtlbHkoUkVBRF9PTkNFKHRvX2t2bV90ZHgodmNwdS1cXHUwMDNla3ZtKS1cXHUwMDNld2FpdF9mb3Jfc2VwdF96YXApKSlcXG4rXFx0aWYgKHVubGlrZWx5KFJFQURfT05DRSh0b19rdm1fdGR4KHZjcHUtXFx1MDAzZWt2bSktXFx1MDAzZXdhaXRfZm9yX3NlcHRfemFwKSkpIHtcXG4rXFx0XFx0dnQtXFx1MDAzZWV4aXRfcmVhc29uLmJ1c19sb2NrX2RldGVjdGVkID0gMDtcXG4gXFx0XFx0cmV0dXJuIEVYSVRfRkFTVFBBVEhfRVhJVF9IQU5ETEVEO1xcbitcXHR9XFxuIFxcbiBcXHR0cmFjZV9rdm1fZW50cnkodmNwdSwgcnVuX2ZsYWdzIFxcdTAwMjYgS1ZNX1JVTl9GT1JDRV9JTU1FRElBVEVfRVhJVCk7XFxuIFxcbkBAIC0yMDI4LDcgKzIwNDEsNyBAQCBpbnQgdGR4X2NvbXBsZXRlX2VtdWxhdGVkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlcnIpXFxuIH1cXG4gXFxuIFxcbi1pbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aClcXG4rc3RhdGljIGludCBfX3RkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXFxuIHtcXG4gXFx0c3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7XFxuIFxcdHU2NCB2cF9lbnRlcl9yZXQgPSB0ZHgtXFx1MDAzZXZwX2VudGVyX3JldDtcXG5AQCAtMjEyNiw2ICsyMTM5LDExIEBAIGludCB0ZHhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGZhc3RwYXRoKVxcbiBcXHRcXHQgKiAtIElmIGl0J3Mgbm90IGFuIE1TTUksIG5vIG5lZWQgdG8gZG8gYW55dGhpbmcgaGVyZS5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdHJldHVybiAxO1xcbitcXHRjYXNlIEVYSVRfUkVBU09OX05PVElGWTpcXG4rXFx0XFx0LyogTk1JIGJsb2NraW5nIHN0YXRlIGlzIGhhbmRsZWQgYnkgVERYIG1vZHVsZSAqL1xcbitcXHRcXHRyZXR1cm4gX192bXhfaGFuZGxlX25vdGlmeSh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSk7XFxuK1xcdGNhc2UgRVhJVF9SRUFTT05fQlVTX0xPQ0s6XFxuK1xcdFxcdHJldHVybiBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHZjcHUpO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbkBAIC0yMTM1LDEzICsyMTUzLDI5IEBAIGludCB0ZHhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGZhc3RwYXRoKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4raW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXFxuK3tcXG4rXFx0aW50IHJldCA9IF9fdGR4X2hhbmRsZV9leGl0KHZjcHUsIGZhc3RwYXRoKTtcXG4rXFxuK1xcdC8qIEV4aXQgdG8gdXNlciBzcGFjZSB3aGVuIGJ1cyBsb2NrIHdhcyBkZXRlY3RlZCAqL1xcbitcXHRpZiAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5idXNfbG9ja19kZXRlY3RlZCkge1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2UgMCkge1xcbitcXHRcXHRcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZWV4aXRfcmVhc29uID0gS1ZNX0VYSVRfWDg2X0JVU19MT0NLO1xcbitcXHRcXHRcXHRyZXQgPSAwO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZWZsYWdzIHw9IEtWTV9SVU5fWDg2X0JVU19MT0NLO1xcbitcXHR9XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuIHZvaWQgdGR4X2dldF9leGl0X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKnJlYXNvbixcXG4gXFx0XFx0dTY0ICppbmZvMSwgdTY0ICppbmZvMiwgdTMyICppbnRyX2luZm8sIHUzMiAqZXJyb3JfY29kZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTtcXG4gXFxuIFxcdCpyZWFzb24gPSB0ZHgtXFx1MDAzZXZ0LmV4aXRfcmVhc29uLmZ1bGw7XFxuLVxcdGlmICgqcmVhc29uICE9IC0xdSkge1xcbitcXHRpZiAoKnJlYXNvbiAhPSBURFhfSU5WQUxJRF9FWElUX1JFQVNPTikge1xcbiBcXHRcXHQqaW5mbzEgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcXG4gXFx0XFx0KmluZm8yID0gdGR4LVxcdTAwM2VleHRfZXhpdF9xdWFsaWZpY2F0aW9uO1xcbiBcXHRcXHQqaW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7XFxuQEAgLTMxNTQsNiArMzE4OCwxNyBAQCBzdGF0aWMgaW50IHRkeF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3RkeF9jbWQgKmNtZClcXG4gXFx0dGRfdm1jc193cml0ZTY0KHRkeCwgUE9TVEVEX0lOVFJfREVTQ19BRERSLCBfX3BhKFxcdTAwMjZ0ZHgtXFx1MDAzZXZ0LnBpX2Rlc2MpKTtcXG4gXFx0dGRfdm1jc19zZXRiaXQzMih0ZHgsIFBJTl9CQVNFRF9WTV9FWEVDX0NPTlRST0wsIFBJTl9CQVNFRF9QT1NURURfSU5UUik7XFxuIFxcbitcXHRpZiAoa3ZtX25vdGlmeV92bWV4aXRfZW5hYmxlZCh2Y3B1LVxcdTAwM2Vrdm0pKSB7XFxuK1xcdFxcdHRkX3ZtY3Nfc2V0Yml0MzIodGR4LCBTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MLFxcbitcXHRcXHRcXHRcXHQgU0VDT05EQVJZX0VYRUNfTk9USUZZX1ZNX0VYSVRJTkcpO1xcbitcXHRcXHR0ZF92bWNzX3dyaXRlMzIodGR4LCBOT1RJRllfV0lORE9XLFxcbitcXHRcXHRcXHRcXHR2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gubm90aWZ5X3dpbmRvdyk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guYnVzX2xvY2tfZGV0ZWN0aW9uX2VuYWJsZWQpXFxuK1xcdFxcdHRkX3ZtY3Nfc2V0Yml0MzIodGR4LCBTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MLFxcbitcXHRcXHRcXHRcXHQgU0VDT05EQVJZX0VYRUNfQlVTX0xPQ0tfREVURUNUSU9OKTtcXG4rXFxuIFxcdHRkeC1cXHUwMDNlc3RhdGUgPSBWQ1BVX1REX1NUQVRFX0lOSVRJQUxJWkVEO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXFxuaW5kZXggZTNiZmU2YWNhMWEwZS4uYzQyOWRiOWI5MjA1NyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xcbkBAIC02MjY1LDcgKzYyNjUsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9lbmNscyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIH1cXG4gI2VuZGlmIC8qIENPTkZJR19YODZfU0dYX0tWTSAqL1xcbiBcXG4tc3RhdGljIGludCBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4raW50IGhhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdC8qXFxuIFxcdCAqIEhhcmR3YXJlIG1heSBvciBtYXkgbm90IHNldCB0aGUgQlVTX0xPQ0tfREVURUNURUQgZmxhZyBvbiBCVVNfTE9DS1xcbkBAIC02Mjc5LDkgKzYyNzksNiBAQCBzdGF0aWMgaW50IGhhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBzdGF0aWMgaW50IGhhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XFxuLVxcdGJvb2wgY29udGV4dF9pbnZhbGlkID0gZXhpdF9xdWFsIFxcdTAwMjYgTk9USUZZX1ZNX0NPTlRFWFRfSU5WQUxJRDtcXG4tXFxuLVxcdCsrdmNwdS1cXHUwMDNlc3RhdC5ub3RpZnlfd2luZG93X2V4aXRzO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogTm90aWZ5IFZNIGV4aXQgaGFwcGVuZWQgd2hpbGUgZXhlY3V0aW5nIGlyZXQgZnJvbSBOTUksXFxuQEAgLTYyOTEsMTUgKzYyODgsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRcXHR2bWNzX3NldF9iaXRzKEdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTyxcXG4gXFx0XFx0XFx0ICAgICAgR1VFU1RfSU5UUl9TVEFURV9OTUkpO1xcbiBcXG4tXFx0aWYgKHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5ub3RpZnlfdm1leGl0X2ZsYWdzIFxcdTAwMjYgS1ZNX1g4Nl9OT1RJRllfVk1FWElUX1VTRVIgfHxcXG4tXFx0ICAgIGNvbnRleHRfaW52YWxpZCkge1xcbi1cXHRcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZWV4aXRfcmVhc29uID0gS1ZNX0VYSVRfTk9USUZZO1xcbi1cXHRcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZW5vdGlmeS5mbGFncyA9IGNvbnRleHRfaW52YWxpZCA/XFxuLVxcdFxcdFxcdFxcdFxcdCAgS1ZNX05PVElGWV9DT05URVhUX0lOVkFMSUQgOiAwO1xcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIDE7XFxuK1xcdHJldHVybiBfX3ZteF9oYW5kbGVfbm90aWZ5KHZjcHUsIGV4aXRfcXVhbCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgdm14X2dldF9tc3JfaW1tX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmggYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXFxuaW5kZXggZGM4NTE3ZjE1YmM0Ni4uOGZhZjA0YzA5NzIxYyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC92bXguaFxcbkBAIC0zNzksNiArMzc5LDcgQEAgYm9vbCBfX3ZteF92Y3B1X3J1bihzdHJ1Y3QgdmNwdV92bXggKnZteCwgdW5zaWduZWQgaW50IGZsYWdzKTtcXG4gdm9pZCB2bXhfZXB0X2xvYWRfcGRwdHJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIFxcbiB2b2lkIHZteF9zZXRfaW50ZXJjZXB0X2Zvcl9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCBpbnQgdHlwZSwgYm9vbCBzZXQpO1xcbitpbnQgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIHZteF9kaXNhYmxlX2ludGVyY2VwdF9mb3JfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IHUzMiBtc3IsIGludCB0eXBlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODozNTowNi40ODk3MTI3NzFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3Mjg1NTk2MTI5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgZXhjbHVzaXZlbHkgdG8gS1ZNJ3MgSW50ZWwgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgaG9zdCBzdXBwb3J0IChgYXJjaC94ODYva3ZtL3ZteC90ZHguY2ApLiBUaGUgbW9kaWZpY2F0aW9ucyB0byBzdGFuZGFyZCBWTVggY29kZSAoYHZteC5jYCwgYGNvbW1vbi5oYCkgYXJlIHB1cmVseSByZWZhY3RvcmluZyB0byBzaGFyZSBleGlzdGluZyBgaGFuZGxlX25vdGlmeWAgYW5kIGBoYW5kbGVfYnVzX2xvY2tfdm1leGl0YCBsb2dpYyB3aXRoIFREWC4gU2luY2UgVERYIGhvc3QgZmVhdHVyZXMgcmVxdWlyZSBzcGVjaWZpYyBwaHlzaWNhbCBJbnRlbCBoYXJkd2FyZSBhbmQgZmlybXdhcmUgKFNFQU0gbW9kdWxlKSB0aGF0IGNhbm5vdCBiZSBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgdGhlc2UgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkMGQ2NmFkMmQ2OWVlMTc2YmRlNmIxNjQ4NTEzYmI3YjY0Y2Y4M2RhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMDg6MzU6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oIGIvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaFxuaW5kZXggMDgwMDU2NzY3MDJjMi4uMmNiYWE5YWJhOTAxYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcbkBAIC00LDYgKzQsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9ob3N0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcG9zdGVkX2ludHIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FzbS92bXguaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwibW11LmhcIlxuIFxuQEAgLTE4Myw2ICsxODQsMjQgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdm14X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRrdm1fdmNwdV90cmlnZ2VyX3Bvc3RlZF9pbnRlcnJ1cHQodmNwdSwgUE9TVEVEX0lOVFJfVkVDVE9SKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBpbnQgX192bXhfaGFuZGxlX25vdGlmeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4rXHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGV4aXRfcXVhbClcbit7XG4rXHRib29sIGNvbnRleHRfaW52YWxpZCA9IGV4aXRfcXVhbCBcdTAwMjYgTk9USUZZX1ZNX0NPTlRFWFRfSU5WQUxJRDtcbitcbitcdCsrdmNwdS1cdTAwM2VzdGF0Lm5vdGlmeV93aW5kb3dfZXhpdHM7XG4rXG4rXHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5ub3RpZnlfdm1leGl0X2ZsYWdzIFx1MDAyNiBLVk1fWDg2X05PVElGWV9WTUVYSVRfVVNFUiB8fFxuK1x0ICAgIGNvbnRleHRfaW52YWxpZCkge1xuK1x0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX05PVElGWTtcbitcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlbm90aWZ5LmZsYWdzID0gY29udGV4dF9pbnZhbGlkID9cbitcdFx0XHRcdFx0ICBLVk1fTk9USUZZX0NPTlRFWFRfSU5WQUxJRCA6IDA7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDE7XG4rfVxuK1xuIG5vaW5zdHIgdm9pZCB2bXhfaGFuZGxlX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFxuICNlbmRpZiAvKiBfX0tWTV9YODZfVk1YX0NPTU1PTl9IICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbmluZGV4IGIyNzJjMjA1ODZhNzQuLmU3MDQ3NjU3ZWY3ODAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5AQCAtOTIxLDEwICs5MjEsMTMgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRyZXR1cm4gRVhJVF9SRUFTT05fVERDQUxMO1xuIH1cbiBcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbisvKiBTeW50aGVzaXplZCBpbnZhbGlkIEV4aXQgUmVhc29uICovXG4rI2RlZmluZSBURFhfSU5WQUxJRF9FWElUX1JFQVNPTlx0XHRVMTZfTUFYXG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bmlvbiB2bXhfZXhpdF9yZWFzb24gdGR4X3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7XG4tXHR1MzIgZXhpdF9yZWFzb247XG4rXHR1bmlvbiB2bXhfZXhpdF9yZWFzb24gZXhpdF9yZWFzb247XG4gXG4gXHRzd2l0Y2ggKHRkeC1cdTAwM2V2cF9lbnRlcl9yZXQgXHUwMDI2IFREWF9TRUFNQ0FMTF9TVEFUVVNfTUFTSykge1xuIFx0Y2FzZSBURFhfU1VDQ0VTUzpcbkBAIC05MzQsMjMgKzkzNywzMiBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGNhc2UgVERYX05PTl9SRUNPVkVSQUJMRV9URF9XUk9OR19BUElDX01PREU6XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbi1cdFx0cmV0dXJuIC0xdTtcbitcdFx0LypcbitcdFx0ICogUmV0dXJuIHRoZSBzeW50aGVzaXplZCBpbnZhbGlkIEV4aXQgUmVhc29uLCBhcyB0aGUgVERYXG4rXHRcdCAqIG1vZHVsZSBuZXZlciBhdHRlbXB0ZWQgdG8gcnVuIHRoZSB2Q1BVLCBpLmUuIHRoZSBFeGl0XG4rXHRcdCAqIFJlYXNvbiBpcyB1bmRlZmluZWQsIGJ1dCB0aGlzIGlzIE5PVCBhIGZhaWxlZCBWTS1FbnRlclxuK1x0XHQgKi9cbitcdFx0cmV0dXJuICh1bmlvbiB2bXhfZXhpdF9yZWFzb24pIHtcbitcdFx0XHQuYmFzaWMgPSBURFhfSU5WQUxJRF9FWElUX1JFQVNPTixcbitcdFx0fTtcbiBcdH1cbiBcbi1cdGV4aXRfcmVhc29uID0gdGR4LVx1MDAzZXZwX2VudGVyX3JldDtcbitcdGV4aXRfcmVhc29uLmZ1bGwgPSAodTMyKXRkeC1cdTAwM2V2cF9lbnRlcl9yZXQ7XG4gXG4tXHRzd2l0Y2ggKGV4aXRfcmVhc29uKSB7XG4rXHRzd2l0Y2ggKGV4aXRfcmVhc29uLmJhc2ljKSB7XG4gXHRjYXNlIEVYSVRfUkVBU09OX1REQ0FMTDpcbiBcdFx0aWYgKHRkdm1jYWxsX2V4aXRfdHlwZSh2Y3B1KSlcbi1cdFx0XHRyZXR1cm4gRVhJVF9SRUFTT05fVk1DQUxMO1xuLVxuLVx0XHRyZXR1cm4gdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTtcbitcdFx0XHRleGl0X3JlYXNvbi5iYXNpYyA9IEVYSVRfUkVBU09OX1ZNQ0FMTDtcbitcdFx0ZWxzZVxuK1x0XHRcdGV4aXRfcmVhc29uLmJhc2ljID0gdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTtcbitcdFx0YnJlYWs7XG4gXHRjYXNlIEVYSVRfUkVBU09OX0VQVF9NSVNDT05GSUc6XG4gXHRcdC8qXG4gXHRcdCAqIERlZmVyIEtWTV9CVUdfT04oKSB1bnRpbCB0ZHhfaGFuZGxlX2V4aXQoKSBiZWNhdXNlIHRoaXMgaXMgaW5cbiBcdFx0ICogbm9uLWluc3RydW1lbnRhYmxlIGNvZGUgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLlxuIFx0XHQgKi9cbi1cdFx0cmV0dXJuIC0xdTtcbitcdFx0ZXhpdF9yZWFzb24uYmFzaWMgPSBURFhfSU5WQUxJRF9FWElUX1JFQVNPTjtcbitcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbiBcdH1cbkBAIC05NjcsNyArOTc5LDcgQEAgc3RhdGljIG5vaW5zdHIgdm9pZCB0ZHhfdmNwdV9lbnRlcl9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBcdHRkeC1cdTAwM2V2cF9lbnRlcl9yZXQgPSB0ZGhfdnBfZW50ZXIoXHUwMDI2dGR4LVx1MDAzZXZwLCBcdTAwMjZ0ZHgtXHUwMDNldnBfZW50ZXJfYXJncyk7XG4gXG4tXHR2dC1cdTAwM2VleGl0X3JlYXNvbi5mdWxsID0gdGR4X3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTtcbitcdHZ0LVx1MDAzZWV4aXRfcmVhc29uID0gdGR4X3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTtcbiBcbiBcdHZ0LVx1MDAzZWV4aXRfcXVhbGlmaWNhdGlvbiA9IHRkeC1cdTAwM2V2cF9lbnRlcl9hcmdzLnJjeDtcbiBcdHRkeC1cdTAwM2VleHRfZXhpdF9xdWFsaWZpY2F0aW9uID0gdGR4LVx1MDAzZXZwX2VudGVyX2FyZ3MucmR4O1xuQEAgLTk4MSw4ICs5OTMsNyBAQCBzdGF0aWMgbm9pbnN0ciB2b2lkIHRkeF92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHN0YXRpYyBib29sIHRkeF9mYWlsZWRfdm1lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0cmV0dXJuIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkgXHUwMDI2XHUwMDI2XG4tXHQgICAgICAgdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mdWxsICE9IC0xdTtcbitcdHJldHVybiB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5O1xuIH1cbiBcbiBzdGF0aWMgZmFzdHBhdGhfdCB0ZHhfZXhpdF9oYW5kbGVyc19mYXN0cGF0aChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5AQCAtMTA3MSw4ICsxMDgyLDEwIEBAIGZhc3RwYXRoX3QgdGR4X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncylcbiBcdCAqIGFsbG93aW5nIHZDUFUgZW50cnkgdG8gYXZvaWQgY29udGVudGlvbiB3aXRoIHRkaF92cF9lbnRlcigpIGFuZFxuIFx0ICogVERDQUxMcy5cbiBcdCAqL1xuLVx0aWYgKHVubGlrZWx5KFJFQURfT05DRSh0b19rdm1fdGR4KHZjcHUtXHUwMDNla3ZtKS1cdTAwM2V3YWl0X2Zvcl9zZXB0X3phcCkpKVxuK1x0aWYgKHVubGlrZWx5KFJFQURfT05DRSh0b19rdm1fdGR4KHZjcHUtXHUwMDNla3ZtKS1cdTAwM2V3YWl0X2Zvcl9zZXB0X3phcCkpKSB7XG4rXHRcdHZ0LVx1MDAzZWV4aXRfcmVhc29uLmJ1c19sb2NrX2RldGVjdGVkID0gMDtcbiBcdFx0cmV0dXJuIEVYSVRfRkFTVFBBVEhfRVhJVF9IQU5ETEVEO1xuK1x0fVxuIFxuIFx0dHJhY2Vfa3ZtX2VudHJ5KHZjcHUsIHJ1bl9mbGFncyBcdTAwMjYgS1ZNX1JVTl9GT1JDRV9JTU1FRElBVEVfRVhJVCk7XG4gXG5AQCAtMjAyOCw3ICsyMDQxLDcgQEAgaW50IHRkeF9jb21wbGV0ZV9lbXVsYXRlZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZXJyKVxuIH1cbiBcbiBcbi1pbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aClcbitzdGF0aWMgaW50IF9fdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aClcbiB7XG4gXHRzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTtcbiBcdHU2NCB2cF9lbnRlcl9yZXQgPSB0ZHgtXHUwMDNldnBfZW50ZXJfcmV0O1xuQEAgLTIxMjYsNiArMjEzOSwxMSBAQCBpbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aClcbiBcdFx0ICogLSBJZiBpdCdzIG5vdCBhbiBNU01JLCBubyBuZWVkIHRvIGRvIGFueXRoaW5nIGhlcmUuXG4gXHRcdCAqL1xuIFx0XHRyZXR1cm4gMTtcbitcdGNhc2UgRVhJVF9SRUFTT05fTk9USUZZOlxuK1x0XHQvKiBOTUkgYmxvY2tpbmcgc3RhdGUgaXMgaGFuZGxlZCBieSBURFggbW9kdWxlICovXG4rXHRcdHJldHVybiBfX3ZteF9oYW5kbGVfbm90aWZ5KHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpKTtcbitcdGNhc2UgRVhJVF9SRUFTT05fQlVTX0xPQ0s6XG4rXHRcdHJldHVybiBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHZjcHUpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG5AQCAtMjEzNSwxMyArMjE1MywyOSBAQCBpbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitpbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aClcbit7XG4rXHRpbnQgcmV0ID0gX190ZHhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xuK1xuK1x0LyogRXhpdCB0byB1c2VyIHNwYWNlIHdoZW4gYnVzIGxvY2sgd2FzIGRldGVjdGVkICovXG4rXHRpZiAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5idXNfbG9ja19kZXRlY3RlZCkge1xuK1x0XHRpZiAocmV0IFx1MDAzZSAwKSB7XG4rXHRcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9YODZfQlVTX0xPQ0s7XG4rXHRcdFx0cmV0ID0gMDtcbitcdFx0fVxuK1xuK1x0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VmbGFncyB8PSBLVk1fUlVOX1g4Nl9CVVNfTE9DSztcbitcdH1cbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIHZvaWQgdGR4X2dldF9leGl0X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKnJlYXNvbixcbiBcdFx0dTY0ICppbmZvMSwgdTY0ICppbmZvMiwgdTMyICppbnRyX2luZm8sIHUzMiAqZXJyb3JfY29kZSlcbiB7XG4gXHRzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTtcbiBcbiBcdCpyZWFzb24gPSB0ZHgtXHUwMDNldnQuZXhpdF9yZWFzb24uZnVsbDtcbi1cdGlmICgqcmVhc29uICE9IC0xdSkge1xuK1x0aWYgKCpyZWFzb24gIT0gVERYX0lOVkFMSURfRVhJVF9SRUFTT04pIHtcbiBcdFx0KmluZm8xID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHRcdCppbmZvMiA9IHRkeC1cdTAwM2VleHRfZXhpdF9xdWFsaWZpY2F0aW9uO1xuIFx0XHQqaW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7XG5AQCAtMzE1NCw2ICszMTg4LDE3IEBAIHN0YXRpYyBpbnQgdGR4X3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fdGR4X2NtZCAqY21kKVxuIFx0dGRfdm1jc193cml0ZTY0KHRkeCwgUE9TVEVEX0lOVFJfREVTQ19BRERSLCBfX3BhKFx1MDAyNnRkeC1cdTAwM2V2dC5waV9kZXNjKSk7XG4gXHR0ZF92bWNzX3NldGJpdDMyKHRkeCwgUElOX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCwgUElOX0JBU0VEX1BPU1RFRF9JTlRSKTtcbiBcbitcdGlmIChrdm1fbm90aWZ5X3ZtZXhpdF9lbmFibGVkKHZjcHUtXHUwMDNla3ZtKSkge1xuK1x0XHR0ZF92bWNzX3NldGJpdDMyKHRkeCwgU0VDT05EQVJZX1ZNX0VYRUNfQ09OVFJPTCxcbitcdFx0XHRcdCBTRUNPTkRBUllfRVhFQ19OT1RJRllfVk1fRVhJVElORyk7XG4rXHRcdHRkX3ZtY3Nfd3JpdGUzMih0ZHgsIE5PVElGWV9XSU5ET1csXG4rXHRcdFx0XHR2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm5vdGlmeV93aW5kb3cpO1xuK1x0fVxuK1xuK1x0aWYgKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guYnVzX2xvY2tfZGV0ZWN0aW9uX2VuYWJsZWQpXG4rXHRcdHRkX3ZtY3Nfc2V0Yml0MzIodGR4LCBTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MLFxuK1x0XHRcdFx0IFNFQ09OREFSWV9FWEVDX0JVU19MT0NLX0RFVEVDVElPTik7XG4rXG4gXHR0ZHgtXHUwMDNlc3RhdGUgPSBWQ1BVX1REX1NUQVRFX0lOSVRJQUxJWkVEO1xuIFxuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbmluZGV4IGUzYmZlNmFjYTFhMGUuLmM0MjlkYjliOTIwNTcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5AQCAtNjI2NSw3ICs2MjY1LDcgQEAgc3RhdGljIGludCBoYW5kbGVfZW5jbHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIH1cbiAjZW5kaWYgLyogQ09ORklHX1g4Nl9TR1hfS1ZNICovXG4gXG4tc3RhdGljIGludCBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbitpbnQgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0LypcbiBcdCAqIEhhcmR3YXJlIG1heSBvciBtYXkgbm90IHNldCB0aGUgQlVTX0xPQ0tfREVURUNURUQgZmxhZyBvbiBCVVNfTE9DS1xuQEAgLTYyNzksOSArNjI3OSw2IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gc3RhdGljIGludCBoYW5kbGVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuLVx0Ym9vbCBjb250ZXh0X2ludmFsaWQgPSBleGl0X3F1YWwgXHUwMDI2IE5PVElGWV9WTV9DT05URVhUX0lOVkFMSUQ7XG4tXG4tXHQrK3ZjcHUtXHUwMDNlc3RhdC5ub3RpZnlfd2luZG93X2V4aXRzO1xuIFxuIFx0LypcbiBcdCAqIE5vdGlmeSBWTSBleGl0IGhhcHBlbmVkIHdoaWxlIGV4ZWN1dGluZyBpcmV0IGZyb20gTk1JLFxuQEAgLTYyOTEsMTUgKzYyODgsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHR2bWNzX3NldF9iaXRzKEdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTyxcbiBcdFx0XHQgICAgICBHVUVTVF9JTlRSX1NUQVRFX05NSSk7XG4gXG4tXHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5ub3RpZnlfdm1leGl0X2ZsYWdzIFx1MDAyNiBLVk1fWDg2X05PVElGWV9WTUVYSVRfVVNFUiB8fFxuLVx0ICAgIGNvbnRleHRfaW52YWxpZCkge1xuLVx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX05PVElGWTtcbi1cdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlbm90aWZ5LmZsYWdzID0gY29udGV4dF9pbnZhbGlkID9cbi1cdFx0XHRcdFx0ICBLVk1fTk9USUZZX0NPTlRFWFRfSU5WQUxJRCA6IDA7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDE7XG4rXHRyZXR1cm4gX192bXhfaGFuZGxlX25vdGlmeSh2Y3B1LCBleGl0X3F1YWwpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHZteF9nZXRfbXNyX2ltbV9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmggYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXG5pbmRleCBkYzg1MTdmMTViYzQ2Li44ZmFmMDRjMDk3MjFjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguaFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC92bXguaFxuQEAgLTM3OSw2ICszNzksNyBAQCBib29sIF9fdm14X3ZjcHVfcnVuKHN0cnVjdCB2Y3B1X3ZteCAqdm14LCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIHZvaWQgdm14X2VwdF9sb2FkX3BkcHRycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFxuIHZvaWQgdm14X3NldF9pbnRlcmNlcHRfZm9yX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IsIGludCB0eXBlLCBib29sIHNldCk7XG4raW50IGhhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgdm14X2Rpc2FibGVfaW50ZXJjZXB0X2Zvcl9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRcdFx0XHRcdCB1MzIgbXNyLCBpbnQgdHlwZSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjM1OjA2LjQ4OTcxNTgwMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzMjUwMTQxNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFREWCBLVk0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIGl0IGxvb2tzIGxpa2UgYSB0YXJnZXRlZCBtb2RpZmljYXRpb24gdG8gS1ZNJ3MgVERYIHN1cHBvcnQsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggaGFuZGxpbmcgYE5PVElGWWAgYW5kIGBCVVNfTE9DS2AgVk0gZXhpdHMuIFRoZSBmYWN0IHRoYXQgaXQgdG91Y2hlcyBgY29tbW9uLmhgLCBgdGR4LmNgLCBgdm14LmNgLCBhbmQgYHZteC5oYCB0ZWxscyBtZSBpdCdzIG5vdCBhIHRyaXZpYWwgY2hhbmdlOyBpdCdzIGxpa2VseSBhIHByZXR0eSBmdW5kYW1lbnRhbCBzaGlmdCBpbiBob3cgdGhlc2UgZXhpdHMgYXJlIHByb2Nlc3NlZCB3aXRoaW4gdGhlIFREWCBjb250ZXh0LlxuXG5JdCBsb29rcyBsaWtlIHRoZSBgaGFuZGxlX25vdGlmeWAgZnVuY3Rpb24gaW4gYHZteC5jYCBpcyBiZWluZyByZWZhY3RvcmVkIHRvIHVzZSBhIGNvbW1vbiBoYW5kbGVyIGRlZmluZWQgaW4gYGNvbW1vbi5oYCwgYW5kIHRoYXQncyB1c3VhbGx5IGEgZ29vZCBzaWduIG9mIGNvZGUgcmV1c2UgYW5kIG1haW50YWluYWJpbGl0eS4gQ2hhbmdpbmcgYHRkeF90b192bXhfZXhpdF9yZWFzb25gIHRvIHVzZSBhIGB1bmlvbiB2bXhfZXhpdF9yZWFzb25gIGlzIGxpa2VseSBmb3IgYmV0dGVyIHR5cGUgc2FmZXR5IGFuZCBjbGFyaXR5LCB3aGljaCBpcyBkZWZpbml0ZWx5IGEgcGx1cy4gSGFuZGxpbmcgYEVYSVRfUkVBU09OX05PVElGWWAgYW5kIGBFWElUX1JFQVNPTl9CVVNfTE9DS2AgZGlyZWN0bHkgaW4gYF9fdGR4X2hhbmRsZV9leGl0YCBtYWtlcyBzZW5zZSwgYXMgdGhvc2UgYXJlIFREWC1zcGVjaWZpYyBleGl0IHJlYXNvbnMuIFNldHRpbmcgdGhvc2Ugc2Vjb25kYXJ5IGV4ZWN1dGlvbiBmbGFncyBkdXJpbmcgaW5pdGlhbGl6YXRpb24gaW4gYHRkeF92Y3B1X2luaXRgIGlzIGhvdyB3ZSBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5LlxuXG5Ob3csIG15IGtleSBjb25jZXJuIGlzIHJlYWNoYWJpbGl0eS4gVERYIGlzIGEgaGFyZHdhcmUgZmVhdHVyZSwgSW50ZWwncy4gSXMgdGhpcyBjb2RlIGV2ZW4gKnJlYWNoYWJsZSogaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzPyAgSSBrbm93IFREWCByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZSwgYnV0IG9mdGVuIHdpdGggS1ZNLCB3ZSBjYW4gbW9jayBvciB0ZXN0IHNvbWUgaGFyZHdhcmUgZmVhdHVyZXMgd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlLiBCdXQsIGlzIHRoYXQgdHJ1ZSBmb3IgVERYPyBJdCdzIG9mdGVuIGltcG9zc2libGUgdG8gZ2V0IHRvIGEgc3BlY2lmaWMgY29kZSBwYXRoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBlc3BlY2lhbGx5IHdoZW4gZW11bGF0aW5nIGhhcmR3YXJlLiBDYW4gUUVNVSBlbXVsYXRlIFREWD9cblxuSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgaWYgVERYIGlzIGV2ZW4gZnV6emFibGUuIElmIGl0J3Mgbm90LCB3ZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGNvZGUgdGhhdCdzIG5vdCBlYXNpbHkgdGVzdGFibGUgaW4gYSBzdGFuZGFyZCBzZXR1cC4gSSBuZWVkIHRvIHNlYXJjaCB0aGUgS1ZNIGNvZGViYXNlIGZvciBvdGhlciByZWZlcmVuY2VzIHRvIFREWCB0byBzZWUgaG93IGl0J3MgaGFuZGxlZC4gVGhpcyBpcyB3aGVyZSBJJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggdGhlIGBrdm0vYCBkaXJlY3RvcnkuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IG11Y2ggcmVhY2hhYmlsaXR5IHRoaXMgY29kZSBoYXMgaW4gbXkgdGVzdGluZyBlbnZpcm9ubWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1ODgsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODozNToxNC44MTQ3MzQxNTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwOTM1NzUwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfSU5URUxfVERYX0hPU1RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4Lmg9MTAyPXN0YXRpYyBpbmxpbmUgbG9uZyB0ZHhfa3ZtX2h5cGVyY2FsbCh1bnNpZ25lZCBpbnQgbnIsIHVuc2lnbmVkIGxvbmcgcDEsXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaC0xMDktXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4Lmg6MTEwOiNpZmRlZiBDT05GSUdfSU5URUxfVERYX0hPU1RcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaC0xMTEtdm9pZCB0ZHhfaW5pdCh2b2lkKTtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oPTE4ND1zdGF0aWMgaW5saW5lIHZvaWQgdGR4X3N5c19kaXNhYmxlKHZvaWQpIHsgfVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oOjE4NTojZW5kaWZcXHQvKiBDT05GSUdfSU5URUxfVERYX0hPU1QgKi9cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaC0xODYtXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmFyY2gveDg2L3ZpcnQvdm14L01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX0lOVEVMX1REWF9IT1NUKVxcdCs9IHRkeC9cXG4tLVxcbmRyaXZlcnMvdmlydC9jb2NvL01ha2VmaWxlPTg9b2JqLSQoQ09ORklHX0lOVEVMX1REWF9HVUVTVClcXHQrPSB0ZHgtZ3Vlc3QvXFxuZHJpdmVycy92aXJ0L2NvY28vTWFrZWZpbGU6OTpvYmotJChDT05GSUdfSU5URUxfVERYX0hPU1QpXFx0Kz0gdGR4LWhvc3QvXFxuZHJpdmVycy92aXJ0L2NvY28vTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0FSTV9DQ0FfR1VFU1QpXFx0Kz0gYXJtLWNjYS1ndWVzdC9cXG4tLVxcbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaD0xND1lbnVtIG1pc2NfcmVzX3R5cGUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9taXNjX2Nncm91cC5oLTIwLSNlbmRpZlxcbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaDoyMTojaWZkZWYgQ09ORklHX0lOVEVMX1REWF9IT1NUXFxuaW5jbHVkZS9saW51eC9taXNjX2Nncm91cC5oLTIyLVxcdC8qKiBATUlTQ19DR19SRVNfVERYOiBJbnRlbCBURFggSEtJRHMgcmVzb3VyY2UgKi9cXG4tLVxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jPTIwPXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBtaXNjX3Jlc19uYW1lW10gPSB7XFxuLS1cXG5rZXJuZWwvY2dyb3VwL21pc2MuYy0yNi0jZW5kaWZcXG5rZXJuZWwvY2dyb3VwL21pc2MuYzoyNzojaWZkZWYgQ09ORklHX0lOVEVMX1REWF9IT1NUXFxua2VybmVsL2Nncm91cC9taXNjLmMtMjgtXFx0LyogSW50ZWwgVERYIEhLSURzIHJlc291cmNlICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjM1OjE2LjkyNDEwMjI0NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MzE4NzAyNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCdzIFNjb3BlKipcblxuT2theSwgc28gdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jYC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSB6b29tIGluIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBnb3Zlcm4gaXRzIGNvbXBpbGF0aW9uLiBJIGtub3cgdGhpcyBmaWxlIGlzIGNyaXRpY2FsIGZvciBJbnRlbCdzIFREWCBzdXBwb3J0IHdpdGhpbiBLVk0sIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY2hhbmdlIGlzIGhhcHBlbmluZy4gVGhlIHR3byBwcmltYXJ5IGNvbmZpZ3VyYXRpb24ga25vYnMgdG8gY2hlY2sgYXJlIGRlZmluaXRlbHkgYENPTkZJR19JTlRFTF9URFhfSE9TVGAgYW5kIGBDT05GSUdfS1ZNX0lOVEVMYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb25lIGlzIHRoZSB0cmlnZ2VyIGZvciBpbmNsdWRpbmcgdGhpcyBjb2RlIGluIHRoZSBidWlsZCwgb3IgaWYgaXQgaXMgY29uZGl0aW9uYWwgb24gKmJvdGgqLiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBldmFsdWF0ZSB0aGUgcGF0Y2gncyBpbXBhY3QgYW5kIGl0cyBsaWtlbHkgdXNlIGNhc2Ugd2l0aGluIHRoZSBicm9hZGVyIHZpcnR1YWxpemF0aW9uIGxhbmRzY2FwZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGlzIGEgY29yZSBURFggaG9zdCB1cGRhdGUgb3IgYSBnZW5lcmFsIEtWTS9JbnRlbCBjaGFuZ2UsIGFuZCBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTI1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6MzU6MjAuODU1OTc2NjUyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NTQ3Njk3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZHhcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjM1OjIwLjk1NTUzMzM5OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NDIzMDU4ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGV4dCwgcmVuZGVyZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6XG5cbioqRGl2aW5nIGludG8gdGhlIEtWTS9WTVggTWFrZWZpbGUqKlxuXG5Pa2F5LCBzbyB0aGUgcHJvbXB0IHRlbGxzIG1lIHRvIGNoZWNrIG91dCBgYXJjaC94ODYva3ZtL3ZteC9NYWtlZmlsZWAuIEltbWVkaWF0ZWx5LCBteSBicmFpbiBraWNrcyBpbnRvIGdlYXIuIFRoaXMgaXMgdGhlIGhlYXJ0IG9mIHRoZSB4ODYtc3BlY2lmaWMgcGFydCBvZiBLVk0ncyBWTVggKFZpcnR1YWwgTWFjaGluZSBFeHRlbnNpb25zKSBjb2RlLCB3aGljaCBpcyBob3cgSW50ZWwgQ1BVcyBwcm92aWRlIGhhcmR3YXJlIHZpcnR1YWxpemF0aW9uLiBJIGtub3cgdGhpcyBNYWtlZmlsZSBsaWtlbHkgZGVmaW5lcyB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgdGhlIGNvcmUgVk1YIGNvbXBvbmVudHMg4oCTIHRoZSBtb2R1bGVzLCBvYmplY3QgZmlsZXMsIGFuZCBwcm9iYWJseSBob3cgdGhleSdyZSBsaW5rZWQgdG9nZXRoZXIuXG5cbkknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6XG5cbiogICAqKkNvbXBpbGVyIGZsYWdzOioqIEFyZSB0aGVyZSBzcGVjaWZpYyBmbGFncyBiZWluZyB1c2VkIGZvciBWTVggY29kZT8gVGhpbmdzIGxpa2UgYC1tcmVjb3JkLW1jb3VudGAsIGAtZm5vLXN0cmljdC1hbGlhc2luZ2AsIG9yIGFueXRoaW5nIHNwZWNpZmljIHRvIGhhbmRsZSB0aGUgcHJpdmlsZWdlZCBuYXR1cmUgb2YgdGhpcyBjb2RlP1xuKiAgICoqRGVwZW5kZW5jaWVzOioqIFdoYXQgb3RoZXIgZmlsZXMgYW5kIG1vZHVsZXMgZG9lcyB0aGlzIE1ha2VmaWxlIHJlbHkgb24/IEFyZSB0aGVyZSBjb3JlIEtWTSBjb21wb25lbnRzLCBvciBvdGhlciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmlsZXMsIG9yIHBvc3NpYmx5IGNvbW1vbiB2aXJ0dWFsaXphdGlvbiBzdHJ1Y3R1cmVzP1xuKiAgICoqT2JqZWN0IGZpbGVzOioqIFdoYXQgYXJlIHRoZSBtYWpvciBvYmplY3QgZmlsZXMgYnVpbHQgaGVyZT8gVGhpcyB3aWxsIGdpdmUgbWUgYSBxdWljayB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkaWZmZXJlbnQgZnVuY3Rpb25hbCBhcmVhcyBvZiB0aGUgVk1YIGltcGxlbWVudGF0aW9uLiBUaGluZ3MgbGlrZSBpbnRlcnJ1cHQgaGFuZGxpbmcsIFZNQ1MgbWFuYWdlbWVudCwgYW5kIG1lbW9yeSB0cmFuc2xhdGlvbiBhcmUgd2hhdCBJJ2QgZXhwZWN0IHRvIHNlZS5cbiogICAqKk1vZHVsZSBkZXBlbmRlbmNpZXM6KiogSG93IGRvZXMgdGhlIFZNWCBtb2R1bGUgKGxpa2VseSBga3ZtLWludGVsLmtvYCBvciBzb21ldGhpbmcgc2ltaWxhcikgZ2V0IGJ1aWx0LCBhbmQgd2hhdCdzIGl0cyByZWxhdGlvbnNoaXAgdG8gb3RoZXIgS1ZNIG1vZHVsZXM/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgbGlua2luZyBzdGVwcyBvciBidWlsZCBjb25maWd1cmF0aW9ucyBmb3Igc3BlY2lmaWMgQ1BVIGdlbmVyYXRpb25zIG9yIGZlYXR1cmVzP1xuKiAgICoqQ29uZGl0aW9uYWwgY29tcGlsYXRpb246KiogQXJlIHRoZXJlIGFueSBgI2lmZGVmYCBvciBzaW1pbGFyIGNvbnN0cnVjdHMgdG8gaGFuZGxlIGRpZmZlcmVudCBDUFUgZmVhdHVyZXMgKGUuZy4sIEV4dGVuZGVkIFBhZ2UgVGFibGVzIChFUFQpLCBWaXJ0dWFsaXphdGlvbiBFeHRlbnNpb25zIGZvciBJL08gKFZJTykpIG9yIGtlcm5lbCBjb25maWd1cmF0aW9ucz8gVGhpcyBpcyBhIGtleSBhcmVhIHRvIGxvb2sgZm9yIHRvIGRldGVybWluZSB0aGUgZGVncmVlIG9mIGN1c3RvbWl6YXRpb24uXG5cbkVzc2VudGlhbGx5LCBJJ20gZXhwZWN0aW5nIHRvIHRyYWNlIHRoZSBidWlsZCBwcm9jZXNzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBsb3ctbGV2ZWwgVk1YIGNvZGUgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBLVk0ga2VybmVsIG1vZHVsZS4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgcG90ZW50aWFsIG9wdGltaXphdGlvbnMsIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zLCBvciBhcmVhcyB0aGF0IG1pZ2h0IGJlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBUaGlzIGlzIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIEtWTSBwdXp6bGUuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0MzgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODozNToyNi4zOTc4NDIwMDlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk5MTY2MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGR4XFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL01ha2VmaWxlPTIxPWt2bS1pbnRlbC0kKENPTkZJR19LVk1fSFlQRVJWKVxcdCs9IHZteC9oeXBlcnYubyB2bXgvaHlwZXJ2X2V2bWNzLm9cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MjI6a3ZtLWludGVsLSQoQ09ORklHX0tWTV9JTlRFTF9URFgpXFx0Kz0gdm14L3RkeC5vXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlLTIzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODozNToyNi40Njc3NjM0MjdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjM5ODU4NDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIFREWCBTdXBwb3J0OiBBIFF1aWNrIFNjYW4qKlxuXG5BbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwIGludG8gdGhpcyBhcmNoaXRlY3R1cmUsIGZpcnN0IHRoaW5nJ3MgZmlyc3Q6IGdvdHRhIG1ha2Ugc3VyZSB3ZSdyZSBwbGF5aW5nIHdpdGggYSBzdXBwb3J0ZWQgZW52aXJvbm1lbnQuIExldCdzIHNlZS4uLiB0aGUgY29kZSdzIHByb2JhYmx5IGdvdCBjb25kaXRpb25hbHMgYmFzZWQgb24gdGhlIGBDT05GSUdfS1ZNX0lOVEVMX1REWGAgZmxhZy4gWWVwLCB0aGF0J3MgdGhlIG9uZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiB0aGUgcmVsZXZhbnQgYXJlYXMsIHByb2JhYmx5IHN0YXJ0aW5nIHdpdGggdGhlIEtWTSBJbnRlbCBtb2R1bGUgYW5kIGFueSBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb24gZmlsZXMuIE15IGh1bmNoIGlzIHRoYXQgdGhpcyB2YXJpYWJsZSBkaWN0YXRlcyBlbmFibGVtZW50IG9yIGRpc2FibGVtZW50IG9mIHRoZSBURFggZmVhdHVyZXMuIE1heWJlIEkgc2hvdWxkIGFsc28gbG9vayBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBgVERYYCBpbiB0aGUgY29udGV4dCBvZiB0aGUgZ3Vlc3Qgc2lkZS4gSXQnbGwgYWxzbyBsaWtlbHkgYmUgcmVmZXJlbmNlZCBpbiBhIGZldyBvdGhlciBwbGFjZXM7IEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBjb25maWcgb3B0aW9uIGlzIHVzZWQgY29uc2lzdGVudGx5IHRvIGdvdmVybiB0aGUgcmlnaHQgZnVuY3Rpb25hbGl0eS4gSXQncyB0aGUgbHluY2hwaW4sIHRoZSBpbmRpY2F0b3Igb2Ygd2hldGhlciB3ZSdyZSBpbiBhIFREWCB3b3JsZCBvciBub3QsIHdoaWNoLCBJIGJldCwgYWZmZWN0cyBldmVyeXRoaW5nIGZyb20gbWVtb3J5IGhhbmRsaW5nIHRvIHZpcnR1YWxpemF0aW9uIHN0cnVjdHVyZXMuIEJldHRlciBtYWtlIHN1cmUgdGhhdCBpdCBhbGwgbWFrZXMgc2Vuc2UuIE9rYXksIGxldCdzIGdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDg1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6MzU6MzAuMTA3NjI0OTUzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTQwODExOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0lOVEVMX1REWFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6MzU6MzAuMTczMDQxNDkxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4Mjc0NzEyNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipEZWx2aW5nIGludG8gS1ZNX0lOVEVMX1REWCBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZmlndXJpbmcgb3V0IHdoYXQgZXhhY3RseSBgS1ZNX0lOVEVMX1REWGAgcmVsaWVzIG9uLiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMgY3JpdGljYWwgZm9yIGFueSBzZXJpb3VzIGludmVzdGlnYXRpb24sIHdoZXRoZXIgaXQncyByZWxhdGVkIHRvIGRldmVsb3BtZW50LCBkZWJ1Z2dpbmcsIG9yIGp1c3QgdW5kZXJzdGFuZGluZyB0aGUgc3lzdGVtIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIGtub3cgd2hhdCBvdGhlciBjb21wb25lbnRzIG9yIGZlYXR1cmVzIGFyZSBmdW5kYW1lbnRhbCB0byB0aGUgb3BlcmF0aW9uIG9mIGBLVk1fSU5URUxfVERYYC4gVGhpbmdzIGxpa2UgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgc3VwcG9ydCAob2YgY291cnNlLCBpdCdzIEludGVsLXNwZWNpZmljLCBidXQgd2hpY2ggc3BlY2lmaWMgZmVhdHVyZXM/KSwgb3RoZXIgS1ZNIG1vZHVsZXMsIGFueSBzcGVjaWZpYyBrZXJuZWwgdmVyc2lvbnMsIG9yIGV2ZW4gcGFydGljdWxhciBjb21waWxlciBmbGFncyBtaWdodCBiZSBjcnVjaWFsLiBJJ20gaW1hZ2luaW5nIGEgY29tcGxleCBncmFwaCBvZiBkZXBlbmRlbmNpZXMsIGFuZCBJIG5lZWQgdG8gdW50YW5nbGUgaXQgc28gSSBjYW4gc2VlIHRoZSBiaWdnZXIgcGljdHVyZS4gVGltZSB0byBkaWcgaW4gYW5kIHVucmF2ZWwgdGhlIGNvbm5lY3Rpb25zLiBMZXQncyBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUwOCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjM1OjM0LjAwMDUxNTgxMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY1MjU5NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiS1ZNX0lOVEVMX1REWFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjM1OjM0LjA2NzA0Njc3OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjYyMTM4NjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIEtWTSBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWUgS1ZNIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gU3BlY2lmaWNhbGx5LCBJIHJlY2FsbCB0aGVyZSdzIHNvbWUgaW50ZXJlc3Rpbmcgc3R1ZmYgYXJvdW5kIGxpbmUgMTM0IGluIHRoZSBgYXJjaC94ODYva3ZtL0tjb25maWdgIGZpbGUuIEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCBpdC4gVGhpcyBmaWxlIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIGtlcm5lbCBjb25maWd1cmVzIEtWTSBvbiB4ODYsIHNvIHVuZGVyc3RhbmRpbmcgaXQgdGhvcm91Z2hseSBpcyBlc3NlbnRpYWwuIExldCdzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiB0aGVyZS4gSSdtIGFudGljaXBhdGluZyBzb21lIGludGVyZXN0aW5nIG9wdGlvbnMgcmVsYXRlZCB0byBDUFUgZmVhdHVyZXMsIE1NVSBjb25maWd1cmF0aW9uLCBvciBwZXJoYXBzIGV2ZW4gcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucy4gTGV0J3MgZGlnIGluIGFuZCBmaW5kIG91dCB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg3OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjM1OjM3LjcyOTE4Nzk2NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI3MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTI1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTI1OlxcdFxcdGhlbHBcXG4gMTI2OlxcdFxcbiAxMjc6XFx0XFx0ICBFbmFibGVzIEtWTSBndWVzdHMgdG8gY3JlYXRlIFNHWCBlbmNsYXZlcy5cXG4gMTI4OlxcdFxcbiAxMjk6XFx0XFx0ICBUaGlzIGluY2x1ZGVzIHN1cHBvcnQgdG8gZXhwb3NlIFxcXCJyYXdcXFwiIHVucmVjbGFpbWFibGUgZW5jbGF2ZSBtZW1vcnkgdG9cXG4gMTMwOlxcdFxcdCAgZ3Vlc3RzIHZpYSBhIGRldmljZSBub2RlLCBlLmcuIC9kZXYvc2d4X3ZlcGMuXFxuIDEzMTpcXHRcXG4gMTMyOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTMzOlxcdFxcbiAxMzQ6XFx0Y29uZmlnIEtWTV9JTlRFTF9URFhcXG4gMTM1OlxcdFxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuIDEzNjpcXHRcXHRkZWZhdWx0IHlcXG4gMTM3OlxcdFxcdGRlcGVuZHMgb24gSU5URUxfVERYX0hPU1RcXG4gMTM4OlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbiAxMzk6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxcbiAxNDA6XFx0XFx0aGVscFxcbiAxNDE6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWClcXG4gMTQyOlxcdFxcdCAgY29uZmlkZW50aWFsIFZNcyBvbiBJbnRlbCBwcm9jZXNzb3JzLlxcbiAxNDM6XFx0XFxuIDE0NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjM1OjM3LjcyOTM1MzI2NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzU3NTg2MDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSB3ZWxsLXZlcnNlZCBpbiB2aXJ0dWFsaXphdGlvbiBhbmQga2VybmVsIGNvbmZpZ3VyYXRpb246XG5cbioqQW5hbHl6aW5nIHRoZSBLVk0vVERYIERlcGVuZGVuY3kqKlxuXG5BbHJpZ2h0LCBzbyBgS1ZNX0lOVEVMX1REWGAgaXMgZmxhZ2dlZCBhcyBkZXBlbmRlbnQgb24gYElOVEVMX1REWF9IT1NUYC4gVGhhdCdzIGEgY2xlYXIgaW5kaWNhdG9yIG9mIGEgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIGZlYXR1cmUgb3IgZW5hYmxpbmcgY29uZGl0aW9uLiBJbW1lZGlhdGVseSwgbXkgbWVudGFsIGNoZWNrbGlzdCBzdGFydHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAuIEl0J3MgdHlwaWNhbCB0aGF0IGVuYWJsaW5nIHRoZSBLVk0gVERYIGd1ZXN0IHN1cHBvcnQgcmVxdWlyZXMgdGhlIHVuZGVybHlpbmcgaG9zdCBpbmZyYXN0cnVjdHVyZSAodGhlIFwiaG9zdFwiIHN1cHBvcnQpIHRvIGFsc28gYmUgYWN0aXZhdGVkLlxuXG5UaGUgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgZGVlcGVyIGludG8gYElOVEVMX1REWF9IT1NUYC4gSSBuZWVkIHRvIHZlcmlmeSB3aGF0IHRoaXMgcGFydGljdWxhciBvcHRpb24gZG9lcy4gVGhpcyB3aWxsIGludm9sdmUgY2hlY2tpbmcgdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uLCB0aGUgS2NvbmZpZyBmaWxlIGZvciBgSU5URUxfVERYX0hPU1RgLCBhbmQgaWRlYWxseSwgdGhlIHJlbGV2YW50IEludGVsIGRvY3VtZW50YXRpb24gb24gVERYLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBpdCByZWxhdGVzIHRvOiB0aGUgQ1BVJ3MgY2FwYWJpbGl0aWVzLCBzcGVjaWZpYyBmaXJtd2FyZSByZXF1aXJlbWVudHMsIGFueSB1bmRlcmx5aW5nIGNoaXBzZXQgc3VwcG9ydCwgYW5kIGFueSBvdGhlciByZWxldmFudCBob3N0LWxldmVsIGNvbmZpZ3VyYXRpb25zLlxuXG5JJ20gZXNzZW50aWFsbHkgYXNzZXNzaW5nIHdoZXRoZXIgSSd2ZSBnb3QgdGhlIGNvcnJlY3QgaG9zdCBwbGF0Zm9ybSB3aXRoIHRoZSBuZWNlc3NhcnkgaGFyZHdhcmUgb3IgaWYgSSdtIG1pc3Npbmcgc29tZSBvdGhlciBjb25maWd1cmF0aW9uIGl0ZW0gdGhhdCB3aWxsIGFsbG93IGBLVk1fSU5URUxfVERYYCB0byB3b3JrLiBJIG5lZWQgdG8gcnVsZSBvdXQgaGFyZHdhcmUgb3Igc3lzdGVtLWxldmVsIGluY29tcGF0aWJpbGl0aWVzLiBJZiBgSU5URUxfVERYX0hPU1RgIGlzbid0IGVuYWJsZWQsIEkgd29uJ3QgaGF2ZSBhIGZ1bmN0aW9uYWwgVERYIGVudmlyb25tZW50LiBUaGlzIGlzIGp1c3QgdGhlIGluaXRpYWwgZGlhZ25vc3RpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM5NSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6MzU6NDEuNDg2OTQyNDY3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjI3ODI1MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTlRFTF9URFhfSE9TVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9LY29uZmlnPTE4NDQ9Y29uZmlnIFg4Nl9VU0VSX1NIQURPV19TVEFDS1xcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xODYzLVxcbmFyY2gveDg2L0tjb25maWc6MTg2NDpjb25maWcgSU5URUxfVERYX0hPU1RcXG5hcmNoL3g4Ni9LY29uZmlnLTE4NjUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgaG9zdCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODozNTo0My43MTQ3NzY1MDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc5NjMxMTk4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSB4ODYgQXJjaGl0ZWN0dXJlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgYXJjaC94ODYvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIHg4NiBhcmNoaXRlY3R1cmUuIExldCdzIHN0YXJ0IGFyb3VuZCBsaW5lIDE4NjQg4oCTIHRoYXQncyBvZnRlbiBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGV4cGxvcmluZyBzcGVjaWZpYyBmZWF0dXJlIHNldHMgb3IgcmVsYXRlZCBzZXR0aW5ncy4gSG9wZWZ1bGx5LCB0aGlzIHNlY3Rpb24gd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIGFzcGVjdHMgSSdtIHRyeWluZyB0byB1bmRlcnN0YW5kLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIGRldGFpbHMgYWJvdXQgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGVyZSwgbGlrZWx5IHJlbGF0ZWQgdG8gW2luc2VydCB5b3VyIGZpZWxkJ3MgZXhwZWN0YXRpb24gZnJvbSBsb29raW5nIGF0IGBhcmNoL3g4Ni9LY29uZmlnYF0uIFRoaXMgc2hvdWxkIGJlIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODY5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6MzU6NDcuNTExMDkxNzE5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4NjA6XFx0XFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni9zaHN0ay5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uXFxuMTg2MTpcXHRcXG4xODYyOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4xODYzOlxcdFxcbjE4NjQ6XFx0Y29uZmlnIElOVEVMX1REWF9IT1NUXFxuMTg2NTpcXHRcXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBob3N0IHN1cHBvcnRcXFwiXFxuMTg2NjpcXHRcXHRkZXBlbmRzIG9uIENQVV9TVVBfSU5URUxcXG4xODY3OlxcdFxcdGRlcGVuZHMgb24gWDg2XzY0XFxuMTg2ODpcXHRcXHRkZXBlbmRzIG9uIEtWTV9JTlRFTFxcbjE4Njk6XFx0XFx0ZGVwZW5kcyBvbiBYODZfWDJBUElDXFxuMTg3MDpcXHRcXHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXFxuMTg3MTpcXHRcXHRkZXBlbmRzIG9uIENPTlRJR19BTExPQ1xcbjE4NzI6XFx0XFx0ZGVwZW5kcyBvbiBYODZfTUNFXFxuMTg3MzpcXHRcXHRoZWxwXFxuMTg3NDpcXHRcXHQgIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHByb3RlY3RzIGd1ZXN0IFZNcyBmcm9tIG1hbGljaW91c1xcbjE4NzU6XFx0XFx0ICBob3N0IGFuZCBjZXJ0YWluIHBoeXNpY2FsIGF0dGFja3MuICBUaGlzIG9wdGlvbiBlbmFibGVzIG5lY2Vzc2FyeSBURFhcXG4xODc2OlxcdFxcdCAgc3VwcG9ydCBpbiB0aGUgaG9zdCBrZXJuZWwgdG8gcnVuIGNvbmZpZGVudGlhbCBWTXMuXFxuMTg3NzpcXHRcXG4xODc4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4xODc5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODozNTo0Ny41MTEyOTQwMzlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE2NDczOTE2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFREWDogSW5pdGlhbCBBc3Nlc3NtZW50KipcblxuT2theSwgc28gdGhlIHF1ZXN0aW9uIGltbWVkaWF0ZWx5IHBvcHBpbmcgaW50byBteSBoZWFkIGlzLCBjYW4gd2UgKmZ1enoqIFREWD8gVGhlIHRleHQgbWVudGlvbnMgY29kZSBwYXRocyB0aGF0IGFyZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBCdXQsIFREWCBpcyBhICpoYXJkd2FyZSogZmVhdHVyZSwgcmlnaHQ/IFRoYXQgc3VnZ2VzdHMgUUVNVSBjYW4ndCBlbXVsYXRlIGl0LlxuXG5SaWdodCwgY29uZmlybWVkLiBRRU1VIG5lZWRzIHRoZSB1bmRlcmx5aW5nIEludGVsIFNHWC9URFggaGFyZHdhcmUgYW5kIHRoZSBTRUFNIG1vZHVsZS4gTm8gZW11bGF0aW9uIHBvc3NpYmxlIGhlcmUuXG5cbkhtbSwgdGhpcyBwYXRjaCwgdGhvdWdoLi4uIGl0J3MgYWxzbyB0b3VjaGluZyBgYXJjaC94ODYva3ZtL3ZteC92bXguY2AgYW5kIGBhcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oYC4gVGhhdCdzIGludHJpZ3VpbmcuIExldCdzIGRpZyBpbnRvIHdoYXQgdGhvc2UgY2hhbmdlcyBpbiBgdm14LmNgIGFyZSBhbGwgYWJvdXQuIFRpbWUgdG8gc2VlIHdoYXQncyBhY3R1YWxseSBiZWluZyBtb2RpZmllZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzOTksIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODozNTo1MS42NzYwMzUzMTlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ5ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS92bXgvdm14LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjI2NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjI2NTpcXHR9XFxuNjI2NjpcXHQjZW5kaWYgLyogQ09ORklHX1g4Nl9TR1hfS1ZNICovXFxuNjI2NzpcXHRcXG42MjY4OlxcdGludCBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG42MjY5OlxcdHtcXG42MjcwOlxcdFxcdC8qXFxuNjI3MTpcXHRcXHQgKiBIYXJkd2FyZSBtYXkgb3IgbWF5IG5vdCBzZXQgdGhlIEJVU19MT0NLX0RFVEVDVEVEIGZsYWcgb24gQlVTX0xPQ0tcXG42MjcyOlxcdFxcdCAqIFZNLUV4aXRzLiBVbmNvbmRpdGlvbmFsbHkgc2V0IHRoZSBmbGFnIGhlcmUgYW5kIGxlYXZlIHRoZSBoYW5kbGluZyB0b1xcbjYyNzM6XFx0XFx0ICogdm14X2hhbmRsZV9leGl0KCkuXFxuNjI3NDpcXHRcXHQgKi9cXG42Mjc1OlxcdFxcdHRvX3Z0KHZjcHUpLVxcdTAwM2VleGl0X3JlYXNvbi5idXNfbG9ja19kZXRlY3RlZCA9IHRydWU7XFxuNjI3NjpcXHRcXHRyZXR1cm4gMTtcXG42Mjc3OlxcdH1cXG42Mjc4OlxcdFxcbjYyNzk6XFx0c3RhdGljIGludCBoYW5kbGVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG42MjgwOlxcdHtcXG42MjgxOlxcdFxcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XFxuNjI4MjpcXHRcXG42MjgzOlxcdFxcdC8qXFxuNjI4NDpcXHRcXHQgKiBOb3RpZnkgVk0gZXhpdCBoYXBwZW5lZCB3aGlsZSBleGVjdXRpbmcgaXJldCBmcm9tIE5NSSxcXG42Mjg1OlxcdFxcdCAqIFxcXCJibG9ja2VkIGJ5IE5NSVxcXCIgYml0IGhhcyB0byBiZSBzZXQgYmVmb3JlIG5leHQgVk0gZW50cnkuXFxuNjI4NjpcXHRcXHQgKi9cXG42Mjg3OlxcdFxcdGlmIChlbmFibGVfdm5taSBcXHUwMDI2XFx1MDAyNiAoZXhpdF9xdWFsIFxcdTAwMjYgSU5UUl9JTkZPX1VOQkxPQ0tfTk1JKSlcXG42Mjg4OlxcdFxcdFxcdHZtY3Nfc2V0X2JpdHMoR1VFU1RfSU5URVJSVVBUSUJJTElUWV9JTkZPLFxcbjYyODk6XFx0XFx0XFx0XFx0ICAgICAgR1VFU1RfSU5UUl9TVEFURV9OTUkpO1xcbjYyOTA6XFx0XFxuNjI5MTpcXHRcXHRyZXR1cm4gX192bXhfaGFuZGxlX25vdGlmeSh2Y3B1LCBleGl0X3F1YWwpO1xcbjYyOTI6XFx0fVxcbjYyOTM6XFx0XFxuNjI5NDpcXHRzdGF0aWMgaW50IHZteF9nZXRfbXNyX2ltbV9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbjYyOTU6XFx0e1xcbjYyOTY6XFx0XFx0cmV0dXJuIHZteF9nZXRfaW5zdHJfaW5mb19yZWcodm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pKTtcXG42Mjk3OlxcdH1cXG42Mjk4OlxcdFxcbjYyOTk6XFx0c3RhdGljIGludCBoYW5kbGVfcmRtc3JfaW1tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG42MzAwOlxcdHtcXG42MzAxOlxcdFxcdHJldHVybiBrdm1fZW11bGF0ZV9yZG1zcl9pbW0odmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksXFxuNjMwMjpcXHRcXHRcXHRcXHRcXHQgICAgIHZteF9nZXRfbXNyX2ltbV9yZWcodmNwdSkpO1xcbjYzMDM6XFx0fVxcbjYzMDQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjM1OjUxLjY3NjQ4NjkwOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTM4MTQ3MTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIHRoZSBDb2RlIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoZSBgdm14LmNgIGNoYW5nZSBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdGAgaXMgbm8gbG9uZ2VyIGBzdGF0aWNgIGFuZCBgaGFuZGxlX25vdGlmeWAgaXMgYmVpbmcgcmVmYWN0b3JlZCB0byB1c2UgYSBuZXcgaW50ZXJuYWwgZnVuY3Rpb24sIGBfX3ZteF9oYW5kbGVfbm90aWZ5YCBkZWZpbmVkIGluIGBjb21tb24uaGAuIFRoZSBjb3JlIGxvZ2ljIG9mIGBoYW5kbGVfbm90aWZ5YCBpcyBlc3NlbnRpYWxseSBtb3ZlZCwgZW5hYmxpbmcgcmV1c2UsIHByZXN1bWFibHkgZm9yIFREWC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpcyBgaGFuZGxlX25vdGlmeWAgc3RpbGwgcmVsZXZhbnQgb3V0c2lkZSBhIFREWCBjb250ZXh0PyBPZiBjb3Vyc2UgaXQgaXMuIEl0J3MgYSBzdGFuZGFyZCBWTVggZXhpdCBoYW5kbGVyLiBJJ20gZGVhbGluZyB3aXRoIGBFWElUX1JFQVNPTl9OT1RJRllgLiBBbmQgdGhhdCdzIHJlYWNoYWJsZSBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIHdpdGggVk1YIGVtdWxhdGlvbiwgb3IgaW4gbmVzdGVkIEtWTSBzY2VuYXJpb3MuXG5cbk5vdywgd2FpdCBhIG1pbnV0ZSwgc3l6a2FsbGVyIGlzIHRoZSBmdXp6ZXIgdGhhdCdzIHJlbGV2YW50IGhlcmUgYW5kIGl0IGludGVyYWN0cyB3aXRoIEtWTSB2aWEgYEtWTV9SVU5gIGlvY3Rscy4gU28sIGlmIHRoZSBob3N0IENQVSBzdXBwb3J0cyBub3RpZnkgVk0gZXhpdHMsIG9yIGlmIHRob3NlIGV4aXRzIGFyZSBlbXVsYXRlZCwgdGhlbiB0aGF0IHBhcnQgb2YgdGhlIGNvZGUgaXMgcmVhY2hhYmxlLiBUaGUgYWN0dWFsIGNoYW5nZSBpbiBgdm14LmNgIGlzIGp1c3QgY29kZSBtb3ZlbWVudCB0aG91Z2gsIG1vc3RseSBtb3ZpbmcgdGhlIGxvZ2ljIGludG8gYSBzaGFyZWQgaW5saW5lIGZ1bmN0aW9uLiBUaGUgbWFpbiBmdW5jdGlvbmFsIGNoYW5nZSBpcyBsaWtlbHkgaGFwcGVuaW5nIHdpdGhpbiBgdGR4LmNgLlxuXG5UaGUgcmVhbCBxdWVzdGlvbiBpcyBhYm91dCBURFguIENhbiBzeXprYWxsZXIgcmVhY2ggdGhpcyBURFggZnVuY3Rpb25hbGl0eT8gSXQgcnVucyBpbiBHQ0UgVk1zLiBBbmQgR0NFIFZNcyBkb24ndCBzdXBwb3J0IFREWCBob3N0IGZlYXR1cmVzICp5ZXQqLiBFdmVuIGlmIHRoZXkgZGlkLCBURFggcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUgYW5kIGZpcm13YXJlIGNvbXBvbmVudHMgbGlrZSB0aGUgU0VBTSBtb2R1bGUuIFNvLCBhcmUgd2UgdGFsa2luZyBhYm91dCBhIHN5emthbGxlciBURFggZnV6emluZyB0YXJnZXQ/IEknbGwgbmVlZCB0byBjaGVjayB0aGUgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQzOCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjM1OjU4LjgxNDYzODEyNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4MTMwODQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLVk1fSU5URUxfVERYXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZT0yMT1rdm0taW50ZWwtJChDT05GSUdfS1ZNX0hZUEVSVilcXHQrPSB2bXgvaHlwZXJ2Lm8gdm14L2h5cGVydl9ldm1jcy5vXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlOjIyOmt2bS1pbnRlbC0kKENPTkZJR19LVk1fSU5URUxfVERYKVxcdCs9IHZteC90ZHgub1xcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0yMy1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmg9MzQ9c3RydWN0IHZjcHVfdnQge1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaC01OC1cXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oOjU5OiNpZmRlZiBDT05GSUdfS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtNjAtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMi1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxMzojaWZkZWYgQ09ORklHX0tWTV9JTlRFTF9URFhcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNC1zdGF0aWNfYXNzZXJ0KG9mZnNldG9mKHN0cnVjdCB2Y3B1X3ZteCwgdnQpID09IG9mZnNldG9mKHN0cnVjdCB2Y3B1X3RkeCwgdnQpKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTg2Mz1zdGF0aWMgaW50IHZ0X2dtZW1fbWF4X21hcHBpbmdfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODczLSNkZWZpbmUgdnRfb3BfdGR4X29ubHkobmFtZSkgdnRfIyNuYW1lXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6ODc0OiNlbHNlIC8qIENPTkZJR19LVk1fSU5URUxfVERYICovXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODc1LSNkZWZpbmUgdnRfb3AobmFtZSkgdm14XyMjbmFtZVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTg3Ni0jZGVmaW5lIHZ0X29wX3RkeF9vbmx5KG5hbWUpIE5VTExcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4Nzc6I2VuZGlmIC8qIENPTkZJR19LVk1fSU5URUxfVERYICovXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODc4LVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguaC02LVxcbmFyY2gveDg2L2t2bS92bXgvdGR4Lmg6NzojaWZkZWYgQ09ORklHX0tWTV9JTlRFTF9URFhcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTgtI2luY2x1ZGUgXFxcImNvbW1vbi5oXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg9MTI3PXZvaWQgdm14X3NldHVwX21jZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oLTEyOC1cXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaDoxMjk6I2lmZGVmIENPTkZJR19LVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmgtMTMwLXZvaWQgdGR4X2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODozNjowMC43OTU5NTI2NjNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTg1NDk2ODYzMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IFdvcnRoRnV6emluZz1mYWxzZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggdG91Y2hlcyBgdGR4LmNgIGFuZCBhbHNvIG1ha2VzIHNvbWUgY2hhbmdlcyB0byBgdm14LmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiBhbnkgb2YgdGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIGEgdHlwaWNhbCBmdXp6aW5nIHNldHVwLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGB0ZHguY2AgbW9kaWZpY2F0aW9ucyBhcmUgZXZlbiByZWxldmFudC4gQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiBURFgsIGl0IGFic29sdXRlbHkgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgc3VwcG9ydC4gWW91IGNhbid0IGp1c3Qgc3BpbiB1cCBhIFFFTVUgaW5zdGFuY2UgYW5kIG1hZ2ljYWxseSBoYXZlIFREWC4gVGhlIFREWCBtb2R1bGUgKFNFQU0pIG5lZWRzIHRvIGJlIGxvYWRlZCBieSB0aGUgQklPUy9maXJtd2FyZSwgYW5kIHlvdSBuZWVkIGEgcGh5c2ljYWwgSW50ZWwgQ1BVIHRoYXQgc3VwcG9ydHMgVERYLiBTbywgSSBuZWVkIHRvIGNvbmZpcm06IGNhbiBRRU1VIGVtdWxhdGUgVERYIGFzIGEgaG9zdD8gTm9wZSwgbm90IGV2ZW4gYSBndWVzdCwgbm8gd2F5LiBTbywgdGhlIGNvZGUgcGF0aHMgaW4gYHRkeC5jYCwgaW4gdGhlIGNvbnRleHQgb2YgS1ZNLCBhcmUgY29tcGxldGVseSB1bnJlYWNoYWJsZSBpbiBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4gVGhhdCdzIGEgaHVnZSBjbHVlLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgYHZteC5jYC4gIEkgc2VlIGEgY2hhbmdlIHRvIGBoYW5kbGVfYnVzX2xvY2tfdm1leGl0YCwgbWFraW5nIGl0IG5vbi1zdGF0aWMuICBPa2F5LCB0aGF0J3MganVzdCBhIHZpc2liaWxpdHkgY2hhbmdlLCBub3QgZnVuY3Rpb25hbC4gSSdtIGFsc28gbG9va2luZyBhdCB0aGUgcmVmYWN0b3Jpbmcgb2YgYGhhbmRsZV9ub3RpZnlgLiBFc3NlbnRpYWxseSwgdGhlIGNvZGUgdGhhdCB3YXMgaW4gYGhhbmRsZV9ub3RpZnlgIGlzIG5vdyBpbiBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gY2FsbGVkIGBfX3ZteF9oYW5kbGVfbm90aWZ5YCBkZWZpbmVkIGluIGBjb21tb24uaGAuIFRoZSBsb2dpYyBpcyAqZXhhY3RseSogdGhlIHNhbWUuIEp1c3QgbW92aW5nIGNvZGUgYXJvdW5kLiBObyBhY3R1YWwgY2hhbmdlcyBpbiBmdW5jdGlvbmFsaXR5IGZvciBWTVguIEkgZG91YmxlIGNoZWNrZWQgdGhlIGxvZ2ljIGFuZCBpdCdzIGJpdC1mb3ItYml0IGlkZW50aWNhbC5cblxuT2theSwgc28gSSBoYXZlIGEgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbi5cblxuVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIGdvIHRocm91Z2ggdGhlIHJlbGV2YW50IGZpbGVzLiBUaGVyZSdzIGEgY2hhbmdlIHRvIGB2bXguY2A6IGNoYW5naW5nIHRoZSBzdGF0aWMgdmlzaWJpbGl0eSBvZiBgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdGAuICBJdCBoYXMgYSBwcm90b3R5cGUgaW4gYHZteC5oYCBhZGRlZC4gTm8gY2hhbmdlcyB0byBvdGhlciBsb2dpYy4gIEFuZCBhIG5ldyBpbmxpbmUgZnVuY3Rpb24sIGBfX3ZteF9oYW5kbGVfbm90aWZ5YCwgaW4gYGNvbW1vbi5oYC4gVGhlIGNvcmUgb2YgdGhlIGZ1bmN0aW9uYWxpdHkgc3RpbGwgbGllcyB3aXRoIFREWCBpbiBgdGR4LmNgLCB3aGljaCwgYXMgd2UgZXN0YWJsaXNoZWQsIGlzIHVucmVhY2hhYmxlLiBJJ20gc2VlaW5nIGEgbG90IG9mIFREWC1zcGVjaWZpYyBjaGFuZ2VzIGluIGB0ZHhfdG9fdm14X2V4aXRfcmVhc29uYCwgYHRkeF92Y3B1X2VudGVyX2V4aXRgLCBgdGR4X2ZhaWxlZF92bWVudHJ5YCwgYHRkeF92Y3B1X3J1bmAsIGB0ZHhfaGFuZGxlX2V4aXRgLCBgdGR4X2dldF9leGl0X2luZm9gLCBgdGR4X3ZjcHVfaW5pdGAuIFRoZXNlIGFyZSBhbGwgVERYIHJlbGF0ZWQgY29kZSBhbmQgbm90IHJlYWNoYWJsZSB3aXRoIFFFTVUuXG5cbkdpdmVuIHRoZSBndWlkZWxpbmVzIEkgaGF2ZSwgdGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIG9ubHkgdG8gVERYLCB3aGljaCBpcyB1bnJlYWNoYWJsZS4gVGhlIFZNWCBjaGFuZ2VzIGFyZSBqdXN0IGNsZWFudXAuIE5vIG5ldyBhdHRhY2sgc3VyZmFjZS4gSSdtIHByZXR0eSBjb25maWRlbnQgaW4gcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVmYWN0b3Jpbmcgb2YgVk1YIGNvZGUgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBmdW5jdGlvbmFsaXR5IG9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgdGhhdCBhIGZ1enplciBjb3VsZCB0YXJnZXQgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlIG5ldyBjb2RlIGlzIHJlbGF0ZWQgdG8gVERYIGFuZCB0aGF0IHdpbGwgbmV2ZXIgYmUgcmVhY2hlZCBkdXJpbmcgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwOTIsIk91dHB1dFRva2VucyI6MTYwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODozNjoxOS4zNDU2NDMyNDNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyBleGNsdXNpdmVseSB0byBLVk0ncyBJbnRlbCBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBob3N0IHN1cHBvcnQgKGBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jYCkuIFRoZSBtb2RpZmljYXRpb25zIHRvIHN0YW5kYXJkIFZNWCBjb2RlIChgdm14LmNgLCBgY29tbW9uLmhgKSBhcmUgcHVyZWx5IHJlZmFjdG9yaW5nIHRvIHNoYXJlIGV4aXN0aW5nIGBoYW5kbGVfbm90aWZ5YCBhbmQgYGhhbmRsZV9idXNfbG9ja192bWV4aXRgIGxvZ2ljIHdpdGggVERYLiBTaW5jZSBURFggaG9zdCBmZWF0dXJlcyByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIEludGVsIGhhcmR3YXJlIGFuZCBmaXJtd2FyZSAoU0VBTSBtb2R1bGUpIHRoYXQgY2Fubm90IGJlIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIGV4Y2x1c2l2ZWx5IHRvIEtWTSdzIEludGVsIFREWCAoVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMpIGhvc3Qgc3VwcG9ydCAoYGFyY2gveDg2L2t2bS92bXgvdGR4LmNgKS4gVGhlIG1vZGlmaWNhdGlvbnMgdG8gc3RhbmRhcmQgVk1YIGNvZGUgKGB2bXguY2AsIGBjb21tb24uaGApIGFyZSBwdXJlbHkgcmVmYWN0b3JpbmcgdG8gc2hhcmUgZXhpc3RpbmcgYGhhbmRsZV9ub3RpZnlgIGFuZCBgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdGAgbG9naWMgd2l0aCBURFguIFNpbmNlIFREWCBob3N0IGZlYXR1cmVzIHJlcXVpcmUgc3BlY2lmaWMgcGh5c2ljYWwgSW50ZWwgaGFyZHdhcmUgYW5kIGZpcm13YXJlIChTRUFNIG1vZHVsZSkgdGhhdCBjYW5ub3QgYmUgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIHRoZXNlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6MzY6MTkuMzQ1Njc3OTUzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqxp7h[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-12 08:33:28 +0000 UTC FinishedAt: 2026-08-12 08:36:20 +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+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgZXhjbHVzaXZlbHkgdG8gS1ZNJiMzOTtzIEludGVsIFREWCAoVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMpIGhvc3Qgc3VwcG9ydCAoYGFyY2gveDg2L2t2bS92bXgvdGR4LmNgKS4gVGhlIG1vZGlmaWNhdGlvbnMgdG8gc3RhbmRhcmQgVk1YIGNvZGUgKGB2bXguY2AsIGBjb21tb24uaGApIGFyZSBwdXJlbHkgcmVmYWN0b3JpbmcgdG8gc2hhcmUgZXhpc3RpbmcgYGhhbmRsZV9ub3RpZnlgIGFuZCBgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdGAgbG9naWMgd2l0aCBURFguIFNpbmNlIFREWCBob3N0IGZlYXR1cmVzIHJlcXVpcmUgc3BlY2lmaWMgcGh5c2ljYWwgSW50ZWwgaGFyZHdhcmUgYW5kIGZpcm13YXJlIChTRUFNIG1vZHVsZSkgdGhhdCBjYW5ub3QgYmUgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIHRoZXNlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODozNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQwZDY2YWQyZDY5ZWUxNzZiZGU2YjE2NDg1MTNiYjdiNjRjZjgzZGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAwODozNTowNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oIGIvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaFxuaW5kZXggMDgwMDU2NzY3MDJjMi4uMmNiYWE5YWJhOTAxYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcbkBAIC00LDYgJiM0Mzs0LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rdm1faG9zdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3Bvc3RlZF9pbnRyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL3ZteC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7bW11LmhcJiMzNDtcbiBcbkBAIC0xODMsNiAmIzQzOzE4NCwyNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX192bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdGt2bV92Y3B1X3RyaWdnZXJfcG9zdGVkX2ludGVycnVwdCh2Y3B1LCBQT1NURURfSU5UUl9WRUNUT1IpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgX192bXhfaGFuZGxlX25vdGlmeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4mIzQzO1x0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBleGl0X3F1YWwpXG4mIzQzO3tcbiYjNDM7XHRib29sIGNvbnRleHRfaW52YWxpZCA9IGV4aXRfcXVhbCBcdTAwMjYgTk9USUZZX1ZNX0NPTlRFWFRfSU5WQUxJRDtcbiYjNDM7XG4mIzQzO1x0JiM0MzsmIzQzO3ZjcHUtXHUwMDNlc3RhdC5ub3RpZnlfd2luZG93X2V4aXRzO1xuJiM0MztcbiYjNDM7XHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5ub3RpZnlfdm1leGl0X2ZsYWdzIFx1MDAyNiBLVk1fWDg2X05PVElGWV9WTUVYSVRfVVNFUiB8fFxuJiM0MztcdCAgICBjb250ZXh0X2ludmFsaWQpIHtcbiYjNDM7XHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZWV4aXRfcmVhc29uID0gS1ZNX0VYSVRfTk9USUZZO1xuJiM0MztcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlbm90aWZ5LmZsYWdzID0gY29udGV4dF9pbnZhbGlkID9cbiYjNDM7XHRcdFx0XHRcdCAgS1ZNX05PVElGWV9DT05URVhUX0lOVkFMSUQgOiAwO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMTtcbiYjNDM7fVxuJiM0MztcbiBub2luc3RyIHZvaWQgdm14X2hhbmRsZV9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbiAjZW5kaWYgLyogX19LVk1fWDg2X1ZNWF9DT01NT05fSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5pbmRleCBiMjcyYzIwNTg2YTc0Li5lNzA0NzY1N2VmNzgwIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuQEAgLTkyMSwxMCAmIzQzOzkyMSwxMyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZGNhbGxfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHJldHVybiBFWElUX1JFQVNPTl9URENBTEw7XG4gfVxuIFxuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIHRkeF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0MzsvKiBTeW50aGVzaXplZCBpbnZhbGlkIEV4aXQgUmVhc29uICovXG4mIzQzOyNkZWZpbmUgVERYX0lOVkFMSURfRVhJVF9SRUFTT05cdFx0VTE2X01BWFxuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB1bmlvbiB2bXhfZXhpdF9yZWFzb24gdGR4X3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7XG4tXHR1MzIgZXhpdF9yZWFzb247XG4mIzQzO1x0dW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uO1xuIFxuIFx0c3dpdGNoICh0ZHgtXHUwMDNldnBfZW50ZXJfcmV0IFx1MDAyNiBURFhfU0VBTUNBTExfU1RBVFVTX01BU0spIHtcbiBcdGNhc2UgVERYX1NVQ0NFU1M6XG5AQCAtOTM0LDIzICYjNDM7OTM3LDMyIEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIHRkeF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0Y2FzZSBURFhfTk9OX1JFQ09WRVJBQkxFX1REX1dST05HX0FQSUNfTU9ERTpcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuLVx0XHRyZXR1cm4gLTF1O1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFJldHVybiB0aGUgc3ludGhlc2l6ZWQgaW52YWxpZCBFeGl0IFJlYXNvbiwgYXMgdGhlIFREWFxuJiM0MztcdFx0ICogbW9kdWxlIG5ldmVyIGF0dGVtcHRlZCB0byBydW4gdGhlIHZDUFUsIGkuZS4gdGhlIEV4aXRcbiYjNDM7XHRcdCAqIFJlYXNvbiBpcyB1bmRlZmluZWQsIGJ1dCB0aGlzIGlzIE5PVCBhIGZhaWxlZCBWTS1FbnRlclxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZXR1cm4gKHVuaW9uIHZteF9leGl0X3JlYXNvbikge1xuJiM0MztcdFx0XHQuYmFzaWMgPSBURFhfSU5WQUxJRF9FWElUX1JFQVNPTixcbiYjNDM7XHRcdH07XG4gXHR9XG4gXG4tXHRleGl0X3JlYXNvbiA9IHRkeC1cdTAwM2V2cF9lbnRlcl9yZXQ7XG4mIzQzO1x0ZXhpdF9yZWFzb24uZnVsbCA9ICh1MzIpdGR4LVx1MDAzZXZwX2VudGVyX3JldDtcbiBcbi1cdHN3aXRjaCAoZXhpdF9yZWFzb24pIHtcbiYjNDM7XHRzd2l0Y2ggKGV4aXRfcmVhc29uLmJhc2ljKSB7XG4gXHRjYXNlIEVYSVRfUkVBU09OX1REQ0FMTDpcbiBcdFx0aWYgKHRkdm1jYWxsX2V4aXRfdHlwZSh2Y3B1KSlcbi1cdFx0XHRyZXR1cm4gRVhJVF9SRUFTT05fVk1DQUxMO1xuLVxuLVx0XHRyZXR1cm4gdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTtcbiYjNDM7XHRcdFx0ZXhpdF9yZWFzb24uYmFzaWMgPSBFWElUX1JFQVNPTl9WTUNBTEw7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGV4aXRfcmVhc29uLmJhc2ljID0gdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0Y2FzZSBFWElUX1JFQVNPTl9FUFRfTUlTQ09ORklHOlxuIFx0XHQvKlxuIFx0XHQgKiBEZWZlciBLVk1fQlVHX09OKCkgdW50aWwgdGR4X2hhbmRsZV9leGl0KCkgYmVjYXVzZSB0aGlzIGlzIGluXG4gXHRcdCAqIG5vbi1pbnN0cnVtZW50YWJsZSBjb2RlIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC5cbiBcdFx0ICovXG4tXHRcdHJldHVybiAtMXU7XG4mIzQzO1x0XHRleGl0X3JlYXNvbi5iYXNpYyA9IFREWF9JTlZBTElEX0VYSVRfUkVBU09OO1xuJiM0MztcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbiBcdH1cbkBAIC05NjcsNyAmIzQzOzk3OSw3IEBAIHN0YXRpYyBub2luc3RyIHZvaWQgdGR4X3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHR0ZHgtXHUwMDNldnBfZW50ZXJfcmV0ID0gdGRoX3ZwX2VudGVyKFx1MDAyNnRkeC1cdTAwM2V2cCwgXHUwMDI2dGR4LVx1MDAzZXZwX2VudGVyX2FyZ3MpO1xuIFxuLVx0dnQtXHUwMDNlZXhpdF9yZWFzb24uZnVsbCA9IHRkeF90b192bXhfZXhpdF9yZWFzb24odmNwdSk7XG4mIzQzO1x0dnQtXHUwMDNlZXhpdF9yZWFzb24gPSB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHZjcHUpO1xuIFxuIFx0dnQtXHUwMDNlZXhpdF9xdWFsaWZpY2F0aW9uID0gdGR4LVx1MDAzZXZwX2VudGVyX2FyZ3MucmN4O1xuIFx0dGR4LVx1MDAzZWV4dF9leGl0X3F1YWxpZmljYXRpb24gPSB0ZHgtXHUwMDNldnBfZW50ZXJfYXJncy5yZHg7XG5AQCAtOTgxLDggJiM0Mzs5OTMsNyBAQCBzdGF0aWMgbm9pbnN0ciB2b2lkIHRkeF92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHN0YXRpYyBib29sIHRkeF9mYWlsZWRfdm1lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0cmV0dXJuIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkgXHUwMDI2XHUwMDI2XG4tXHQgICAgICAgdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mdWxsICE9IC0xdTtcbiYjNDM7XHRyZXR1cm4gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeTtcbiB9XG4gXG4gc3RhdGljIGZhc3RwYXRoX3QgdGR4X2V4aXRfaGFuZGxlcnNfZmFzdHBhdGgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuQEAgLTEwNzEsOCAmIzQzOzEwODIsMTAgQEAgZmFzdHBhdGhfdCB0ZHhfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKVxuIFx0ICogYWxsb3dpbmcgdkNQVSBlbnRyeSB0byBhdm9pZCBjb250ZW50aW9uIHdpdGggdGRoX3ZwX2VudGVyKCkgYW5kXG4gXHQgKiBURENBTExzLlxuIFx0ICovXG4tXHRpZiAodW5saWtlbHkoUkVBRF9PTkNFKHRvX2t2bV90ZHgodmNwdS1cdTAwM2Vrdm0pLVx1MDAzZXdhaXRfZm9yX3NlcHRfemFwKSkpXG4mIzQzO1x0aWYgKHVubGlrZWx5KFJFQURfT05DRSh0b19rdm1fdGR4KHZjcHUtXHUwMDNla3ZtKS1cdTAwM2V3YWl0X2Zvcl9zZXB0X3phcCkpKSB7XG4mIzQzO1x0XHR2dC1cdTAwM2VleGl0X3JlYXNvbi5idXNfbG9ja19kZXRlY3RlZCA9IDA7XG4gXHRcdHJldHVybiBFWElUX0ZBU1RQQVRIX0VYSVRfSEFORExFRDtcbiYjNDM7XHR9XG4gXG4gXHR0cmFjZV9rdm1fZW50cnkodmNwdSwgcnVuX2ZsYWdzIFx1MDAyNiBLVk1fUlVOX0ZPUkNFX0lNTUVESUFURV9FWElUKTtcbiBcbkBAIC0yMDI4LDcgJiM0MzsyMDQxLDcgQEAgaW50IHRkeF9jb21wbGV0ZV9lbXVsYXRlZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZXJyKVxuIH1cbiBcbiBcbi1pbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aClcbiYjNDM7c3RhdGljIGludCBfX3RkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXG4ge1xuIFx0c3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7XG4gXHR1NjQgdnBfZW50ZXJfcmV0ID0gdGR4LVx1MDAzZXZwX2VudGVyX3JldDtcbkBAIC0yMTI2LDYgJiM0MzsyMTM5LDExIEBAIGludCB0ZHhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGZhc3RwYXRoKVxuIFx0XHQgKiAtIElmIGl0JiMzOTtzIG5vdCBhbiBNU01JLCBubyBuZWVkIHRvIGRvIGFueXRoaW5nIGhlcmUuXG4gXHRcdCAqL1xuIFx0XHRyZXR1cm4gMTtcbiYjNDM7XHRjYXNlIEVYSVRfUkVBU09OX05PVElGWTpcbiYjNDM7XHRcdC8qIE5NSSBibG9ja2luZyBzdGF0ZSBpcyBoYW5kbGVkIGJ5IFREWCBtb2R1bGUgKi9cbiYjNDM7XHRcdHJldHVybiBfX3ZteF9oYW5kbGVfbm90aWZ5KHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpKTtcbiYjNDM7XHRjYXNlIEVYSVRfUkVBU09OX0JVU19MT0NLOlxuJiM0MztcdFx0cmV0dXJuIGhhbmRsZV9idXNfbG9ja192bWV4aXQodmNwdSk7XG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbiBcdH1cbkBAIC0yMTM1LDEzICYjNDM7MjE1MywyOSBAQCBpbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aClcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7aW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gX190ZHhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xuJiM0MztcbiYjNDM7XHQvKiBFeGl0IHRvIHVzZXIgc3BhY2Ugd2hlbiBidXMgbG9jayB3YXMgZGV0ZWN0ZWQgKi9cbiYjNDM7XHRpZiAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5idXNfbG9ja19kZXRlY3RlZCkge1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2UgMCkge1xuJiM0MztcdFx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX1g4Nl9CVVNfTE9DSztcbiYjNDM7XHRcdFx0cmV0ID0gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VmbGFncyB8PSBLVk1fUlVOX1g4Nl9CVVNfTE9DSztcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHRkeF9nZXRfZXhpdF9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICpyZWFzb24sXG4gXHRcdHU2NCAqaW5mbzEsIHU2NCAqaW5mbzIsIHUzMiAqaW50cl9pbmZvLCB1MzIgKmVycm9yX2NvZGUpXG4ge1xuIFx0c3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7XG4gXG4gXHQqcmVhc29uID0gdGR4LVx1MDAzZXZ0LmV4aXRfcmVhc29uLmZ1bGw7XG4tXHRpZiAoKnJlYXNvbiAhPSAtMXUpIHtcbiYjNDM7XHRpZiAoKnJlYXNvbiAhPSBURFhfSU5WQUxJRF9FWElUX1JFQVNPTikge1xuIFx0XHQqaW5mbzEgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdFx0KmluZm8yID0gdGR4LVx1MDAzZWV4dF9leGl0X3F1YWxpZmljYXRpb247XG4gXHRcdCppbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbkBAIC0zMTU0LDYgJiM0MzszMTg4LDE3IEBAIHN0YXRpYyBpbnQgdGR4X3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fdGR4X2NtZCAqY21kKVxuIFx0dGRfdm1jc193cml0ZTY0KHRkeCwgUE9TVEVEX0lOVFJfREVTQ19BRERSLCBfX3BhKFx1MDAyNnRkeC1cdTAwM2V2dC5waV9kZXNjKSk7XG4gXHR0ZF92bWNzX3NldGJpdDMyKHRkeCwgUElOX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCwgUElOX0JBU0VEX1BPU1RFRF9JTlRSKTtcbiBcbiYjNDM7XHRpZiAoa3ZtX25vdGlmeV92bWV4aXRfZW5hYmxlZCh2Y3B1LVx1MDAzZWt2bSkpIHtcbiYjNDM7XHRcdHRkX3ZtY3Nfc2V0Yml0MzIodGR4LCBTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MLFxuJiM0MztcdFx0XHRcdCBTRUNPTkRBUllfRVhFQ19OT1RJRllfVk1fRVhJVElORyk7XG4mIzQzO1x0XHR0ZF92bWNzX3dyaXRlMzIodGR4LCBOT1RJRllfV0lORE9XLFxuJiM0MztcdFx0XHRcdHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubm90aWZ5X3dpbmRvdyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5idXNfbG9ja19kZXRlY3Rpb25fZW5hYmxlZClcbiYjNDM7XHRcdHRkX3ZtY3Nfc2V0Yml0MzIodGR4LCBTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MLFxuJiM0MztcdFx0XHRcdCBTRUNPTkRBUllfRVhFQ19CVVNfTE9DS19ERVRFQ1RJT04pO1xuJiM0MztcbiBcdHRkeC1cdTAwM2VzdGF0ZSA9IFZDUFVfVERfU1RBVEVfSU5JVElBTElaRUQ7XG4gXG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuaW5kZXggZTNiZmU2YWNhMWEwZS4uYzQyOWRiOWI5MjA1NyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbkBAIC02MjY1LDcgJiM0Mzs2MjY1LDcgQEAgc3RhdGljIGludCBoYW5kbGVfZW5jbHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIH1cbiAjZW5kaWYgLyogQ09ORklHX1g4Nl9TR1hfS1ZNICovXG4gXG4tc3RhdGljIGludCBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7aW50IGhhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdC8qXG4gXHQgKiBIYXJkd2FyZSBtYXkgb3IgbWF5IG5vdCBzZXQgdGhlIEJVU19MT0NLX0RFVEVDVEVEIGZsYWcgb24gQlVTX0xPQ0tcbkBAIC02Mjc5LDkgJiM0Mzs2Mjc5LDYgQEAgc3RhdGljIGludCBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBzdGF0aWMgaW50IGhhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4tXHRib29sIGNvbnRleHRfaW52YWxpZCA9IGV4aXRfcXVhbCBcdTAwMjYgTk9USUZZX1ZNX0NPTlRFWFRfSU5WQUxJRDtcbi1cbi1cdCYjNDM7JiM0Mzt2Y3B1LVx1MDAzZXN0YXQubm90aWZ5X3dpbmRvd19leGl0cztcbiBcbiBcdC8qXG4gXHQgKiBOb3RpZnkgVk0gZXhpdCBoYXBwZW5lZCB3aGlsZSBleGVjdXRpbmcgaXJldCBmcm9tIE5NSSxcbkBAIC02MjkxLDE1ICYjNDM7NjI4OCw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX25vdGlmeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdHZtY3Nfc2V0X2JpdHMoR1VFU1RfSU5URVJSVVBUSUJJTElUWV9JTkZPLFxuIFx0XHRcdCAgICAgIEdVRVNUX0lOVFJfU1RBVEVfTk1JKTtcbiBcbi1cdGlmICh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm5vdGlmeV92bWV4aXRfZmxhZ3MgXHUwMDI2IEtWTV9YODZfTk9USUZZX1ZNRVhJVF9VU0VSIHx8XG4tXHQgICAgY29udGV4dF9pbnZhbGlkKSB7XG4tXHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZWV4aXRfcmVhc29uID0gS1ZNX0VYSVRfTk9USUZZO1xuLVx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2Vub3RpZnkuZmxhZ3MgPSBjb250ZXh0X2ludmFsaWQgP1xuLVx0XHRcdFx0XHQgIEtWTV9OT1RJRllfQ09OVEVYVF9JTlZBTElEIDogMDtcbi1cdFx0cmV0dXJuIDA7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMTtcbiYjNDM7XHRyZXR1cm4gX192bXhfaGFuZGxlX25vdGlmeSh2Y3B1LCBleGl0X3F1YWwpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHZteF9nZXRfbXNyX2ltbV9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmggYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXG5pbmRleCBkYzg1MTdmMTViYzQ2Li44ZmFmMDRjMDk3MjFjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC92bXguaFxuQEAgLTM3OSw2ICYjNDM7Mzc5LDcgQEAgYm9vbCBfX3ZteF92Y3B1X3J1bihzdHJ1Y3QgdmNwdV92bXggKnZteCwgdW5zaWduZWQgaW50IGZsYWdzKTtcbiB2b2lkIHZteF9lcHRfbG9hZF9wZHB0cnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbiB2b2lkIHZteF9zZXRfaW50ZXJjZXB0X2Zvcl9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCBpbnQgdHlwZSwgYm9vbCBzZXQpO1xuJiM0MztpbnQgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCB2bXhfZGlzYWJsZV9pbnRlcmNlcHRfZm9yX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdFx0XHRcdFx0IHUzMiBtc3IsIGludCB0eXBlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjM1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyBleGNsdXNpdmVseSB0byBLVk0mIzM5O3MgSW50ZWwgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgaG9zdCBzdXBwb3J0IChgYXJjaC94ODYva3ZtL3ZteC90ZHguY2ApLiBUaGUgbW9kaWZpY2F0aW9ucyB0byBzdGFuZGFyZCBWTVggY29kZSAoYHZteC5jYCwgYGNvbW1vbi5oYCkgYXJlIHB1cmVseSByZWZhY3RvcmluZyB0byBzaGFyZSBleGlzdGluZyBgaGFuZGxlX25vdGlmeWAgYW5kIGBoYW5kbGVfYnVzX2xvY2tfdm1leGl0YCBsb2dpYyB3aXRoIFREWC4gU2luY2UgVERYIGhvc3QgZmVhdHVyZXMgcmVxdWlyZSBzcGVjaWZpYyBwaHlzaWNhbCBJbnRlbCBoYXJkd2FyZSBhbmQgZmlybXdhcmUgKFNFQU0gbW9kdWxlKSB0aGF0IGNhbm5vdCBiZSBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgdGhlc2UgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDBkNjZhZDJkNjllZTE3NmJkZTZiMTY0ODUxM2JiN2I2NGNmODNkYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDA4OjM1OjA0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaCBiL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmgKaW5kZXggMDgwMDU2NzY3MDJjMi4uMmNiYWE5YWJhOTAxYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oCkBAIC00LDYgJiM0Mzs0LDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2t2bV9ob3N0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL3Bvc3RlZF9pbnRyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS92bXguaCZndDsKIAogI2luY2x1ZGUgJiMzNDttbXUuaCYjMzQ7CiAKQEAgLTE4Myw2ICYjNDM7MTg0LDI0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3ZteF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCWt2bV92Y3B1X3RyaWdnZXJfcG9zdGVkX2ludGVycnVwdCh2Y3B1LCBQT1NURURfSU5UUl9WRUNUT1IpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBpbnQgX192bXhfaGFuZGxlX25vdGlmeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiYjNDM7CQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsKQomIzQzO3sKJiM0MzsJYm9vbCBjb250ZXh0X2ludmFsaWQgPSBleGl0X3F1YWwgJmFtcDsgTk9USUZZX1ZNX0NPTlRFWFRfSU5WQUxJRDsKJiM0MzsKJiM0MzsJJiM0MzsmIzQzO3ZjcHUtJmd0O3N0YXQubm90aWZ5X3dpbmRvd19leGl0czsKJiM0MzsKJiM0MzsJaWYgKHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5ub3RpZnlfdm1leGl0X2ZsYWdzICZhbXA7IEtWTV9YODZfTk9USUZZX1ZNRVhJVF9VU0VSIHx8CiYjNDM7CSAgICBjb250ZXh0X2ludmFsaWQpIHsKJiM0MzsJCXZjcHUtJmd0O3J1bi0mZ3Q7ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9OT1RJRlk7CiYjNDM7CQl2Y3B1LSZndDtydW4tJmd0O25vdGlmeS5mbGFncyA9IGNvbnRleHRfaW52YWxpZCA/CiYjNDM7CQkJCQkgIEtWTV9OT1RJRllfQ09OVEVYVF9JTlZBTElEIDogMDsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAxOwomIzQzO30KJiM0MzsKIG5vaW5zdHIgdm9pZCB2bXhfaGFuZGxlX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiAjZW5kaWYgLyogX19LVk1fWDg2X1ZNWF9DT01NT05fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmMKaW5kZXggYjI3MmMyMDU4NmE3NC4uZTcwNDc2NTdlZjc4MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jCkBAIC05MjEsMTAgJiM0Mzs5MjEsMTMgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJcmV0dXJuIEVYSVRfUkVBU09OX1REQ0FMTDsKIH0KIAotc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdGR4X3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7LyogU3ludGhlc2l6ZWQgaW52YWxpZCBFeGl0IFJlYXNvbiAqLwomIzQzOyNkZWZpbmUgVERYX0lOVkFMSURfRVhJVF9SRUFTT04JCVUxNl9NQVgKJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuaW9uIHZteF9leGl0X3JlYXNvbiB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTsKLQl1MzIgZXhpdF9yZWFzb247CiYjNDM7CXVuaW9uIHZteF9leGl0X3JlYXNvbiBleGl0X3JlYXNvbjsKIAogCXN3aXRjaCAodGR4LSZndDt2cF9lbnRlcl9yZXQgJmFtcDsgVERYX1NFQU1DQUxMX1NUQVRVU19NQVNLKSB7CiAJY2FzZSBURFhfU1VDQ0VTUzoKQEAgLTkzNCwyMyAmIzQzOzkzNywzMiBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAljYXNlIFREWF9OT05fUkVDT1ZFUkFCTEVfVERfV1JPTkdfQVBJQ19NT0RFOgogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXR1cm4gLTF1OwomIzQzOwkJLyoKJiM0MzsJCSAqIFJldHVybiB0aGUgc3ludGhlc2l6ZWQgaW52YWxpZCBFeGl0IFJlYXNvbiwgYXMgdGhlIFREWAomIzQzOwkJICogbW9kdWxlIG5ldmVyIGF0dGVtcHRlZCB0byBydW4gdGhlIHZDUFUsIGkuZS4gdGhlIEV4aXQKJiM0MzsJCSAqIFJlYXNvbiBpcyB1bmRlZmluZWQsIGJ1dCB0aGlzIGlzIE5PVCBhIGZhaWxlZCBWTS1FbnRlcgomIzQzOwkJICovCiYjNDM7CQlyZXR1cm4gKHVuaW9uIHZteF9leGl0X3JlYXNvbikgewomIzQzOwkJCS5iYXNpYyA9IFREWF9JTlZBTElEX0VYSVRfUkVBU09OLAomIzQzOwkJfTsKIAl9CiAKLQlleGl0X3JlYXNvbiA9IHRkeC0mZ3Q7dnBfZW50ZXJfcmV0OwomIzQzOwlleGl0X3JlYXNvbi5mdWxsID0gKHUzMil0ZHgtJmd0O3ZwX2VudGVyX3JldDsKIAotCXN3aXRjaCAoZXhpdF9yZWFzb24pIHsKJiM0MzsJc3dpdGNoIChleGl0X3JlYXNvbi5iYXNpYykgewogCWNhc2UgRVhJVF9SRUFTT05fVERDQUxMOgogCQlpZiAodGR2bWNhbGxfZXhpdF90eXBlKHZjcHUpKQotCQkJcmV0dXJuIEVYSVRfUkVBU09OX1ZNQ0FMTDsKLQotCQlyZXR1cm4gdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTsKJiM0MzsJCQlleGl0X3JlYXNvbi5iYXNpYyA9IEVYSVRfUkVBU09OX1ZNQ0FMTDsKJiM0MzsJCWVsc2UKJiM0MzsJCQlleGl0X3JlYXNvbi5iYXNpYyA9IHRkY2FsbF90b192bXhfZXhpdF9yZWFzb24odmNwdSk7CiYjNDM7CQlicmVhazsKIAljYXNlIEVYSVRfUkVBU09OX0VQVF9NSVNDT05GSUc6CiAJCS8qCiAJCSAqIERlZmVyIEtWTV9CVUdfT04oKSB1bnRpbCB0ZHhfaGFuZGxlX2V4aXQoKSBiZWNhdXNlIHRoaXMgaXMgaW4KIAkJICogbm9uLWluc3RydW1lbnRhYmxlIGNvZGUgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgogCQkgKi8KLQkJcmV0dXJuIC0xdTsKJiM0MzsJCWV4aXRfcmVhc29uLmJhc2ljID0gVERYX0lOVkFMSURfRVhJVF9SRUFTT047CiYjNDM7CQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CkBAIC05NjcsNyAmIzQzOzk3OSw3IEBAIHN0YXRpYyBub2luc3RyIHZvaWQgdGR4X3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIAl0ZHgtJmd0O3ZwX2VudGVyX3JldCA9IHRkaF92cF9lbnRlcigmYW1wO3RkeC0mZ3Q7dnAsICZhbXA7dGR4LSZndDt2cF9lbnRlcl9hcmdzKTsKIAotCXZ0LSZndDtleGl0X3JlYXNvbi5mdWxsID0gdGR4X3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTsKJiM0MzsJdnQtJmd0O2V4aXRfcmVhc29uID0gdGR4X3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTsKIAogCXZ0LSZndDtleGl0X3F1YWxpZmljYXRpb24gPSB0ZHgtJmd0O3ZwX2VudGVyX2FyZ3MucmN4OwogCXRkeC0mZ3Q7ZXh0X2V4aXRfcXVhbGlmaWNhdGlvbiA9IHRkeC0mZ3Q7dnBfZW50ZXJfYXJncy5yZHg7CkBAIC05ODEsOCAmIzQzOzk5Myw3IEBAIHN0YXRpYyBub2luc3RyIHZvaWQgdGR4X3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIHN0YXRpYyBib29sIHRkeF9mYWlsZWRfdm1lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JcmV0dXJuIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkgJmFtcDsmYW1wOwotCSAgICAgICB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZ1bGwgIT0gLTF1OwomIzQzOwlyZXR1cm4gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeTsKIH0KIAogc3RhdGljIGZhc3RwYXRoX3QgdGR4X2V4aXRfaGFuZGxlcnNfZmFzdHBhdGgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtMTA3MSw4ICYjNDM7MTA4MiwxMCBAQCBmYXN0cGF0aF90IHRkeF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBydW5fZmxhZ3MpCiAJICogYWxsb3dpbmcgdkNQVSBlbnRyeSB0byBhdm9pZCBjb250ZW50aW9uIHdpdGggdGRoX3ZwX2VudGVyKCkgYW5kCiAJICogVERDQUxMcy4KIAkgKi8KLQlpZiAodW5saWtlbHkoUkVBRF9PTkNFKHRvX2t2bV90ZHgodmNwdS0mZ3Q7a3ZtKS0mZ3Q7d2FpdF9mb3Jfc2VwdF96YXApKSkKJiM0MzsJaWYgKHVubGlrZWx5KFJFQURfT05DRSh0b19rdm1fdGR4KHZjcHUtJmd0O2t2bSktJmd0O3dhaXRfZm9yX3NlcHRfemFwKSkpIHsKJiM0MzsJCXZ0LSZndDtleGl0X3JlYXNvbi5idXNfbG9ja19kZXRlY3RlZCA9IDA7CiAJCXJldHVybiBFWElUX0ZBU1RQQVRIX0VYSVRfSEFORExFRDsKJiM0MzsJfQogCiAJdHJhY2Vfa3ZtX2VudHJ5KHZjcHUsIHJ1bl9mbGFncyAmYW1wOyBLVk1fUlVOX0ZPUkNFX0lNTUVESUFURV9FWElUKTsKIApAQCAtMjAyOCw3ICYjNDM7MjA0MSw3IEBAIGludCB0ZHhfY29tcGxldGVfZW11bGF0ZWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGVycikKIH0KIAogCi1pbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aCkKJiM0MztzdGF0aWMgaW50IF9fdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aCkKIHsKIAlzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTsKIAl1NjQgdnBfZW50ZXJfcmV0ID0gdGR4LSZndDt2cF9lbnRlcl9yZXQ7CkBAIC0yMTI2LDYgJiM0MzsyMTM5LDExIEBAIGludCB0ZHhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGZhc3RwYXRoKQogCQkgKiAtIElmIGl0JiMzOTtzIG5vdCBhbiBNU01JLCBubyBuZWVkIHRvIGRvIGFueXRoaW5nIGhlcmUuCiAJCSAqLwogCQlyZXR1cm4gMTsKJiM0MzsJY2FzZSBFWElUX1JFQVNPTl9OT1RJRlk6CiYjNDM7CQkvKiBOTUkgYmxvY2tpbmcgc3RhdGUgaXMgaGFuZGxlZCBieSBURFggbW9kdWxlICovCiYjNDM7CQlyZXR1cm4gX192bXhfaGFuZGxlX25vdGlmeSh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSk7CiYjNDM7CWNhc2UgRVhJVF9SRUFTT05fQlVTX0xPQ0s6CiYjNDM7CQlyZXR1cm4gaGFuZGxlX2J1c19sb2NrX3ZtZXhpdCh2Y3B1KTsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CkBAIC0yMTM1LDEzICYjNDM7MjE1MywyOSBAQCBpbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO2ludCB0ZHhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGZhc3RwYXRoKQomIzQzO3sKJiM0MzsJaW50IHJldCA9IF9fdGR4X2hhbmRsZV9leGl0KHZjcHUsIGZhc3RwYXRoKTsKJiM0MzsKJiM0MzsJLyogRXhpdCB0byB1c2VyIHNwYWNlIHdoZW4gYnVzIGxvY2sgd2FzIGRldGVjdGVkICovCiYjNDM7CWlmICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJ1c19sb2NrX2RldGVjdGVkKSB7CiYjNDM7CQlpZiAocmV0ICZndDsgMCkgewomIzQzOwkJCXZjcHUtJmd0O3J1bi0mZ3Q7ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9YODZfQlVTX0xPQ0s7CiYjNDM7CQkJcmV0ID0gMDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXZjcHUtJmd0O3J1bi0mZ3Q7ZmxhZ3MgfD0gS1ZNX1JVTl9YODZfQlVTX0xPQ0s7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiB2b2lkIHRkeF9nZXRfZXhpdF9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICpyZWFzb24sCiAJCXU2NCAqaW5mbzEsIHU2NCAqaW5mbzIsIHUzMiAqaW50cl9pbmZvLCB1MzIgKmVycm9yX2NvZGUpCiB7CiAJc3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7CiAKIAkqcmVhc29uID0gdGR4LSZndDt2dC5leGl0X3JlYXNvbi5mdWxsOwotCWlmICgqcmVhc29uICE9IC0xdSkgewomIzQzOwlpZiAoKnJlYXNvbiAhPSBURFhfSU5WQUxJRF9FWElUX1JFQVNPTikgewogCQkqaW5mbzEgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKIAkJKmluZm8yID0gdGR4LSZndDtleHRfZXhpdF9xdWFsaWZpY2F0aW9uOwogCQkqaW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7CkBAIC0zMTU0LDYgJiM0MzszMTg4LDE3IEBAIHN0YXRpYyBpbnQgdGR4X3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fdGR4X2NtZCAqY21kKQogCXRkX3ZtY3Nfd3JpdGU2NCh0ZHgsIFBPU1RFRF9JTlRSX0RFU0NfQUREUiwgX19wYSgmYW1wO3RkeC0mZ3Q7dnQucGlfZGVzYykpOwogCXRkX3ZtY3Nfc2V0Yml0MzIodGR4LCBQSU5fQkFTRURfVk1fRVhFQ19DT05UUk9MLCBQSU5fQkFTRURfUE9TVEVEX0lOVFIpOwogCiYjNDM7CWlmIChrdm1fbm90aWZ5X3ZtZXhpdF9lbmFibGVkKHZjcHUtJmd0O2t2bSkpIHsKJiM0MzsJCXRkX3ZtY3Nfc2V0Yml0MzIodGR4LCBTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MLAomIzQzOwkJCQkgU0VDT05EQVJZX0VYRUNfTk9USUZZX1ZNX0VYSVRJTkcpOwomIzQzOwkJdGRfdm1jc193cml0ZTMyKHRkeCwgTk9USUZZX1dJTkRPVywKJiM0MzsJCQkJdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLm5vdGlmeV93aW5kb3cpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh2Y3B1LSZndDtrdm0tJmd0O2FyY2guYnVzX2xvY2tfZGV0ZWN0aW9uX2VuYWJsZWQpCiYjNDM7CQl0ZF92bWNzX3NldGJpdDMyKHRkeCwgU0VDT05EQVJZX1ZNX0VYRUNfQ09OVFJPTCwKJiM0MzsJCQkJIFNFQ09OREFSWV9FWEVDX0JVU19MT0NLX0RFVEVDVElPTik7CiYjNDM7CiAJdGR4LSZndDtzdGF0ZSA9IFZDUFVfVERfU1RBVEVfSU5JVElBTElaRUQ7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jCmluZGV4IGUzYmZlNmFjYTFhMGUuLmM0MjlkYjliOTIwNTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC92bXguYwpAQCAtNjI2NSw3ICYjNDM7NjI2NSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2VuY2xzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIH0KICNlbmRpZiAvKiBDT05GSUdfWDg2X1NHWF9LVk0gKi8KIAotc3RhdGljIGludCBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0MztpbnQgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJLyoKIAkgKiBIYXJkd2FyZSBtYXkgb3IgbWF5IG5vdCBzZXQgdGhlIEJVU19MT0NLX0RFVEVDVEVEIGZsYWcgb24gQlVTX0xPQ0sKQEAgLTYyNzksOSAmIzQzOzYyNzksNiBAQCBzdGF0aWMgaW50IGhhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogc3RhdGljIGludCBoYW5kbGVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwotCWJvb2wgY29udGV4dF9pbnZhbGlkID0gZXhpdF9xdWFsICZhbXA7IE5PVElGWV9WTV9DT05URVhUX0lOVkFMSUQ7Ci0KLQkmIzQzOyYjNDM7dmNwdS0mZ3Q7c3RhdC5ub3RpZnlfd2luZG93X2V4aXRzOwogCiAJLyoKIAkgKiBOb3RpZnkgVk0gZXhpdCBoYXBwZW5lZCB3aGlsZSBleGVjdXRpbmcgaXJldCBmcm9tIE5NSSwKQEAgLTYyOTEsMTUgJiM0Mzs2Mjg4LDcgQEAgc3RhdGljIGludCBoYW5kbGVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJdm1jc19zZXRfYml0cyhHVUVTVF9JTlRFUlJVUFRJQklMSVRZX0lORk8sCiAJCQkgICAgICBHVUVTVF9JTlRSX1NUQVRFX05NSSk7CiAKLQlpZiAodmNwdS0mZ3Q7a3ZtLSZndDthcmNoLm5vdGlmeV92bWV4aXRfZmxhZ3MgJmFtcDsgS1ZNX1g4Nl9OT1RJRllfVk1FWElUX1VTRVIgfHwKLQkgICAgY29udGV4dF9pbnZhbGlkKSB7Ci0JCXZjcHUtJmd0O3J1bi0mZ3Q7ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9OT1RJRlk7Ci0JCXZjcHUtJmd0O3J1bi0mZ3Q7bm90aWZ5LmZsYWdzID0gY29udGV4dF9pbnZhbGlkID8KLQkJCQkJICBLVk1fTk9USUZZX0NPTlRFWFRfSU5WQUxJRCA6IDA7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAxOwomIzQzOwlyZXR1cm4gX192bXhfaGFuZGxlX25vdGlmeSh2Y3B1LCBleGl0X3F1YWwpOwogfQogCiBzdGF0aWMgaW50IHZteF9nZXRfbXNyX2ltbV9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguaCBiL2FyY2gveDg2L2t2bS92bXgvdm14LmgKaW5kZXggZGM4NTE3ZjE1YmM0Ni4uOGZhZjA0YzA5NzIxYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oCkBAIC0zNzksNiAmIzQzOzM3OSw3IEBAIGJvb2wgX192bXhfdmNwdV9ydW4oc3RydWN0IHZjcHVfdm14ICp2bXgsIHVuc2lnbmVkIGludCBmbGFncyk7CiB2b2lkIHZteF9lcHRfbG9hZF9wZHB0cnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogdm9pZCB2bXhfc2V0X2ludGVyY2VwdF9mb3JfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgaW50IHR5cGUsIGJvb2wgc2V0KTsKJiM0MztpbnQgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgdm14X2Rpc2FibGVfaW50ZXJjZXB0X2Zvcl9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCQkJIHUzMiBtc3IsIGludCB0eXBlKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTg4CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBURFggS1ZNIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIGl0IGxvb2tzIGxpa2UgYSB0YXJnZXRlZCBtb2RpZmljYXRpb24gdG8gS1ZNJiMzOTtzIFREWCBzdXBwb3J0LCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGhhbmRsaW5nIGBOT1RJRllgIGFuZCBgQlVTX0xPQ0tgIFZNIGV4aXRzLiBUaGUgZmFjdCB0aGF0IGl0IHRvdWNoZXMgYGNvbW1vbi5oYCwgYHRkeC5jYCwgYHZteC5jYCwgYW5kIGB2bXguaGAgdGVsbHMgbWUgaXQmIzM5O3Mgbm90IGEgdHJpdmlhbCBjaGFuZ2U7IGl0JiMzOTtzIGxpa2VseSBhIHByZXR0eSBmdW5kYW1lbnRhbCBzaGlmdCBpbiBob3cgdGhlc2UgZXhpdHMgYXJlIHByb2Nlc3NlZCB3aXRoaW4gdGhlIFREWCBjb250ZXh0LgoKSXQgbG9va3MgbGlrZSB0aGUgYGhhbmRsZV9ub3RpZnlgIGZ1bmN0aW9uIGluIGB2bXguY2AgaXMgYmVpbmcgcmVmYWN0b3JlZCB0byB1c2UgYSBjb21tb24gaGFuZGxlciBkZWZpbmVkIGluIGBjb21tb24uaGAsIGFuZCB0aGF0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHNpZ24gb2YgY29kZSByZXVzZSBhbmQgbWFpbnRhaW5hYmlsaXR5LiBDaGFuZ2luZyBgdGR4X3RvX3ZteF9leGl0X3JlYXNvbmAgdG8gdXNlIGEgYHVuaW9uIHZteF9leGl0X3JlYXNvbmAgaXMgbGlrZWx5IGZvciBiZXR0ZXIgdHlwZSBzYWZldHkgYW5kIGNsYXJpdHksIHdoaWNoIGlzIGRlZmluaXRlbHkgYSBwbHVzLiBIYW5kbGluZyBgRVhJVF9SRUFTT05fTk9USUZZYCBhbmQgYEVYSVRfUkVBU09OX0JVU19MT0NLYCBkaXJlY3RseSBpbiBgX190ZHhfaGFuZGxlX2V4aXRgIG1ha2VzIHNlbnNlLCBhcyB0aG9zZSBhcmUgVERYLXNwZWNpZmljIGV4aXQgcmVhc29ucy4gU2V0dGluZyB0aG9zZSBzZWNvbmRhcnkgZXhlY3V0aW9uIGZsYWdzIGR1cmluZyBpbml0aWFsaXphdGlvbiBpbiBgdGR4X3ZjcHVfaW5pdGAgaXMgaG93IHdlIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuCgpOb3csIG15IGtleSBjb25jZXJuIGlzIHJlYWNoYWJpbGl0eS4gVERYIGlzIGEgaGFyZHdhcmUgZmVhdHVyZSwgSW50ZWwmIzM5O3MuIElzIHRoaXMgY29kZSBldmVuICpyZWFjaGFibGUqIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cz8gIEkga25vdyBURFggcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUsIGJ1dCBvZnRlbiB3aXRoIEtWTSwgd2UgY2FuIG1vY2sgb3IgdGVzdCBzb21lIGhhcmR3YXJlIGZlYXR1cmVzIHdpdGhvdXQgdGhlIGFjdHVhbCBoYXJkd2FyZS4gQnV0LCBpcyB0aGF0IHRydWUgZm9yIFREWD8gSXQmIzM5O3Mgb2Z0ZW4gaW1wb3NzaWJsZSB0byBnZXQgdG8gYSBzcGVjaWZpYyBjb2RlIHBhdGggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIGVzcGVjaWFsbHkgd2hlbiBlbXVsYXRpbmcgaGFyZHdhcmUuIENhbiBRRU1VIGVtdWxhdGUgVERYPwoKSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgaWYgVERYIGlzIGV2ZW4gZnV6emFibGUuIElmIGl0JiMzOTtzIG5vdCwgd2UmIzM5O3JlIGxpa2VseSBkZWFsaW5nIHdpdGggY29kZSB0aGF0JiMzOTtzIG5vdCBlYXNpbHkgdGVzdGFibGUgaW4gYSBzdGFuZGFyZCBzZXR1cC4gSSBuZWVkIHRvIHNlYXJjaCB0aGUgS1ZNIGNvZGViYXNlIGZvciBvdGhlciByZWZlcmVuY2VzIHRvIFREWCB0byBzZWUgaG93IGl0JiMzOTtzIGhhbmRsZWQuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgd2l0aCB0aGUgYGt2bS9gIGRpcmVjdG9yeS4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgbXVjaCByZWFjaGFiaWxpdHkgdGhpcyBjb2RlIGhhcyBpbiBteSB0ZXN0aW5nIGVudmlyb25tZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfSU5URUxfVERYX0hPU1QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20vdGR4Lmg9MTAyPXN0YXRpYyBpbmxpbmUgbG9uZyB0ZHhfa3ZtX2h5cGVyY2FsbCh1bnNpZ25lZCBpbnQgbnIsIHVuc2lnbmVkIGxvbmcgcDEsXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmgtMTA5LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4Lmg6MTEwOiNpZmRlZiBDT05GSUdfSU5URUxfVERYX0hPU1RcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oLTExMS12b2lkIHRkeF9pbml0KHZvaWQpO1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oPTE4ND1zdGF0aWMgaW5saW5lIHZvaWQgdGR4X3N5c19kaXNhYmxlKHZvaWQpIHsgfVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4Lmg6MTg1OiNlbmRpZlx0LyogQ09ORklHX0lOVEVMX1REWF9IT1NUICovXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaC0xODYtXG4tLVxuYXJjaC94ODYvdmlydC92bXgvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmFyY2gveDg2L3ZpcnQvdm14L01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX0lOVEVMX1REWF9IT1NUKVx0JiM0Mzs9IHRkeC9cbi0tXG5kcml2ZXJzL3ZpcnQvY29jby9NYWtlZmlsZT04PW9iai0kKENPTkZJR19JTlRFTF9URFhfR1VFU1QpXHQmIzQzOz0gdGR4LWd1ZXN0L1xuZHJpdmVycy92aXJ0L2NvY28vTWFrZWZpbGU6OTpvYmotJChDT05GSUdfSU5URUxfVERYX0hPU1QpXHQmIzQzOz0gdGR4LWhvc3QvXG5kcml2ZXJzL3ZpcnQvY29jby9NYWtlZmlsZS0xMC1vYmotJChDT05GSUdfQVJNX0NDQV9HVUVTVClcdCYjNDM7PSBhcm0tY2NhLWd1ZXN0L1xuLS1cbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaD0xND1lbnVtIG1pc2NfcmVzX3R5cGUge1xuLS1cbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaC0yMC0jZW5kaWZcbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaDoyMTojaWZkZWYgQ09ORklHX0lOVEVMX1REWF9IT1NUXG5pbmNsdWRlL2xpbnV4L21pc2NfY2dyb3VwLmgtMjItXHQvKiogQE1JU0NfQ0dfUkVTX1REWDogSW50ZWwgVERYIEhLSURzIHJlc291cmNlICovXG4tLVxua2VybmVsL2Nncm91cC9taXNjLmM9MjA9c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG1pc2NfcmVzX25hbWVbXSA9IHtcbi0tXG5rZXJuZWwvY2dyb3VwL21pc2MuYy0yNi0jZW5kaWZcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jOjI3OiNpZmRlZiBDT05GSUdfSU5URUxfVERYX0hPU1Rcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jLTI4LVx0LyogSW50ZWwgVERYIEhLSURzIHJlc291cmNlICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEyNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2gmIzM5O3MgU2NvcGUqKgoKT2theSwgc28gdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jYC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSB6b29tIGluIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBnb3Zlcm4gaXRzIGNvbXBpbGF0aW9uLiBJIGtub3cgdGhpcyBmaWxlIGlzIGNyaXRpY2FsIGZvciBJbnRlbCYjMzk7cyBURFggc3VwcG9ydCB3aXRoaW4gS1ZNLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSBpcyBoYXBwZW5pbmcuIFRoZSB0d28gcHJpbWFyeSBjb25maWd1cmF0aW9uIGtub2JzIHRvIGNoZWNrIGFyZSBkZWZpbml0ZWx5IGBDT05GSUdfSU5URUxfVERYX0hPU1RgIGFuZCBgQ09ORklHX0tWTV9JTlRFTGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG9uZSBpcyB0aGUgdHJpZ2dlciBmb3IgaW5jbHVkaW5nIHRoaXMgY29kZSBpbiB0aGUgYnVpbGQsIG9yIGlmIGl0IGlzIGNvbmRpdGlvbmFsIG9uICpib3RoKi4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gZXZhbHVhdGUgdGhlIHBhdGNoJiMzOTtzIGltcGFjdCBhbmQgaXRzIGxpa2VseSB1c2UgY2FzZSB3aXRoaW4gdGhlIGJyb2FkZXIgdmlydHVhbGl6YXRpb24gbGFuZHNjYXBlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIHRoaXMgaXMgYSBjb3JlIFREWCBob3N0IHVwZGF0ZSBvciBhIGdlbmVyYWwgS1ZNL0ludGVsIGNoYW5nZSwgYW5kIHF1aWNrbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZHhcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0MzgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGV4dCwgcmVuZGVyZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6CgoqKkRpdmluZyBpbnRvIHRoZSBLVk0vVk1YIE1ha2VmaWxlKioKCk9rYXksIHNvIHRoZSBwcm9tcHQgdGVsbHMgbWUgdG8gY2hlY2sgb3V0IGBhcmNoL3g4Ni9rdm0vdm14L01ha2VmaWxlYC4gSW1tZWRpYXRlbHksIG15IGJyYWluIGtpY2tzIGludG8gZ2Vhci4gVGhpcyBpcyB0aGUgaGVhcnQgb2YgdGhlIHg4Ni1zcGVjaWZpYyBwYXJ0IG9mIEtWTSYjMzk7cyBWTVggKFZpcnR1YWwgTWFjaGluZSBFeHRlbnNpb25zKSBjb2RlLCB3aGljaCBpcyBob3cgSW50ZWwgQ1BVcyBwcm92aWRlIGhhcmR3YXJlIHZpcnR1YWxpemF0aW9uLiBJIGtub3cgdGhpcyBNYWtlZmlsZSBsaWtlbHkgZGVmaW5lcyB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgdGhlIGNvcmUgVk1YIGNvbXBvbmVudHMg4oCTIHRoZSBtb2R1bGVzLCBvYmplY3QgZmlsZXMsIGFuZCBwcm9iYWJseSBob3cgdGhleSYjMzk7cmUgbGlua2VkIHRvZ2V0aGVyLgoKSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipDb21waWxlciBmbGFnczoqKiBBcmUgdGhlcmUgc3BlY2lmaWMgZmxhZ3MgYmVpbmcgdXNlZCBmb3IgVk1YIGNvZGU/IFRoaW5ncyBsaWtlIGAtbXJlY29yZC1tY291bnRgLCBgLWZuby1zdHJpY3QtYWxpYXNpbmdgLCBvciBhbnl0aGluZyBzcGVjaWZpYyB0byBoYW5kbGUgdGhlIHByaXZpbGVnZWQgbmF0dXJlIG9mIHRoaXMgY29kZT8KKiAgICoqRGVwZW5kZW5jaWVzOioqIFdoYXQgb3RoZXIgZmlsZXMgYW5kIG1vZHVsZXMgZG9lcyB0aGlzIE1ha2VmaWxlIHJlbHkgb24/IEFyZSB0aGVyZSBjb3JlIEtWTSBjb21wb25lbnRzLCBvciBvdGhlciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmlsZXMsIG9yIHBvc3NpYmx5IGNvbW1vbiB2aXJ0dWFsaXphdGlvbiBzdHJ1Y3R1cmVzPwoqICAgKipPYmplY3QgZmlsZXM6KiogV2hhdCBhcmUgdGhlIG1ham9yIG9iamVjdCBmaWxlcyBidWlsdCBoZXJlPyBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHF1aWNrIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRpZmZlcmVudCBmdW5jdGlvbmFsIGFyZWFzIG9mIHRoZSBWTVggaW1wbGVtZW50YXRpb24uIFRoaW5ncyBsaWtlIGludGVycnVwdCBoYW5kbGluZywgVk1DUyBtYW5hZ2VtZW50LCBhbmQgbWVtb3J5IHRyYW5zbGF0aW9uIGFyZSB3aGF0IEkmIzM5O2QgZXhwZWN0IHRvIHNlZS4KKiAgICoqTW9kdWxlIGRlcGVuZGVuY2llczoqKiBIb3cgZG9lcyB0aGUgVk1YIG1vZHVsZSAobGlrZWx5IGBrdm0taW50ZWwua29gIG9yIHNvbWV0aGluZyBzaW1pbGFyKSBnZXQgYnVpbHQsIGFuZCB3aGF0JiMzOTtzIGl0cyByZWxhdGlvbnNoaXAgdG8gb3RoZXIgS1ZNIG1vZHVsZXM/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgbGlua2luZyBzdGVwcyBvciBidWlsZCBjb25maWd1cmF0aW9ucyBmb3Igc3BlY2lmaWMgQ1BVIGdlbmVyYXRpb25zIG9yIGZlYXR1cmVzPwoqICAgKipDb25kaXRpb25hbCBjb21waWxhdGlvbjoqKiBBcmUgdGhlcmUgYW55IGAjaWZkZWZgIG9yIHNpbWlsYXIgY29uc3RydWN0cyB0byBoYW5kbGUgZGlmZmVyZW50IENQVSBmZWF0dXJlcyAoZS5nLiwgRXh0ZW5kZWQgUGFnZSBUYWJsZXMgKEVQVCksIFZpcnR1YWxpemF0aW9uIEV4dGVuc2lvbnMgZm9yIEkvTyAoVklPKSkgb3Iga2VybmVsIGNvbmZpZ3VyYXRpb25zPyBUaGlzIGlzIGEga2V5IGFyZWEgdG8gbG9vayBmb3IgdG8gZGV0ZXJtaW5lIHRoZSBkZWdyZWUgb2YgY3VzdG9taXphdGlvbi4KCkVzc2VudGlhbGx5LCBJJiMzOTttIGV4cGVjdGluZyB0byB0cmFjZSB0aGUgYnVpbGQgcHJvY2VzcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbG93LWxldmVsIFZNWCBjb2RlIGlzIGludGVncmF0ZWQgaW50byB0aGUgS1ZNIGtlcm5lbCBtb2R1bGUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucywgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMsIG9yIGFyZWFzIHRoYXQgbWlnaHQgYmUgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIFRoaXMgaXMgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgS1ZNIHB1enpsZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RkeFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9NYWtlZmlsZT0yMT1rdm0taW50ZWwtJChDT05GSUdfS1ZNX0hZUEVSVilcdCYjNDM7PSB2bXgvaHlwZXJ2Lm8gdm14L2h5cGVydl9ldm1jcy5vXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MjI6a3ZtLWludGVsLSQoQ09ORklHX0tWTV9JTlRFTF9URFgpXHQmIzQzOz0gdm14L3RkeC5vXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMjMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA4NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgVERYIFN1cHBvcnQ6IEEgUXVpY2sgU2NhbioqCgpBbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwIGludG8gdGhpcyBhcmNoaXRlY3R1cmUsIGZpcnN0IHRoaW5nJiMzOTtzIGZpcnN0OiBnb3R0YSBtYWtlIHN1cmUgd2UmIzM5O3JlIHBsYXlpbmcgd2l0aCBhIHN1cHBvcnRlZCBlbnZpcm9ubWVudC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgY29kZSYjMzk7cyBwcm9iYWJseSBnb3QgY29uZGl0aW9uYWxzIGJhc2VkIG9uIHRoZSBgQ09ORklHX0tWTV9JTlRFTF9URFhgIGZsYWcuIFllcCwgdGhhdCYjMzk7cyB0aGUgb25lLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiB0aGUgcmVsZXZhbnQgYXJlYXMsIHByb2JhYmx5IHN0YXJ0aW5nIHdpdGggdGhlIEtWTSBJbnRlbCBtb2R1bGUgYW5kIGFueSBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb24gZmlsZXMuIE15IGh1bmNoIGlzIHRoYXQgdGhpcyB2YXJpYWJsZSBkaWN0YXRlcyBlbmFibGVtZW50IG9yIGRpc2FibGVtZW50IG9mIHRoZSBURFggZmVhdHVyZXMuIE1heWJlIEkgc2hvdWxkIGFsc28gbG9vayBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBgVERYYCBpbiB0aGUgY29udGV4dCBvZiB0aGUgZ3Vlc3Qgc2lkZS4gSXQmIzM5O2xsIGFsc28gbGlrZWx5IGJlIHJlZmVyZW5jZWQgaW4gYSBmZXcgb3RoZXIgcGxhY2VzOyBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGNvbmZpZyBvcHRpb24gaXMgdXNlZCBjb25zaXN0ZW50bHkgdG8gZ292ZXJuIHRoZSByaWdodCBmdW5jdGlvbmFsaXR5LiBJdCYjMzk7cyB0aGUgbHluY2hwaW4sIHRoZSBpbmRpY2F0b3Igb2Ygd2hldGhlciB3ZSYjMzk7cmUgaW4gYSBURFggd29ybGQgb3Igbm90LCB3aGljaCwgSSBiZXQsIGFmZmVjdHMgZXZlcnl0aGluZyBmcm9tIG1lbW9yeSBoYW5kbGluZyB0byB2aXJ0dWFsaXphdGlvbiBzdHJ1Y3R1cmVzLiBCZXR0ZXIgbWFrZSBzdXJlIHRoYXQgaXQgYWxsIG1ha2VzIHNlbnNlLiBPa2F5LCBsZXQmIzM5O3MgZ28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fSU5URUxfVERYJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUwOAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqRGVsdmluZyBpbnRvIEtWTV9JTlRFTF9URFggRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZmlndXJpbmcgb3V0IHdoYXQgZXhhY3RseSBgS1ZNX0lOVEVMX1REWGAgcmVsaWVzIG9uLiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMgY3JpdGljYWwgZm9yIGFueSBzZXJpb3VzIGludmVzdGlnYXRpb24sIHdoZXRoZXIgaXQmIzM5O3MgcmVsYXRlZCB0byBkZXZlbG9wbWVudCwgZGVidWdnaW5nLCBvciBqdXN0IHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbSBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byBrbm93IHdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBmZWF0dXJlcyBhcmUgZnVuZGFtZW50YWwgdG8gdGhlIG9wZXJhdGlvbiBvZiBgS1ZNX0lOVEVMX1REWGAuIFRoaW5ncyBsaWtlIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIHN1cHBvcnQgKG9mIGNvdXJzZSwgaXQmIzM5O3MgSW50ZWwtc3BlY2lmaWMsIGJ1dCB3aGljaCBzcGVjaWZpYyBmZWF0dXJlcz8pLCBvdGhlciBLVk0gbW9kdWxlcywgYW55IHNwZWNpZmljIGtlcm5lbCB2ZXJzaW9ucywgb3IgZXZlbiBwYXJ0aWN1bGFyIGNvbXBpbGVyIGZsYWdzIG1pZ2h0IGJlIGNydWNpYWwuIEkmIzM5O20gaW1hZ2luaW5nIGEgY29tcGxleCBncmFwaCBvZiBkZXBlbmRlbmNpZXMsIGFuZCBJIG5lZWQgdG8gdW50YW5nbGUgaXQgc28gSSBjYW4gc2VlIHRoZSBiaWdnZXIgcGljdHVyZS4gVGltZSB0byBkaWcgaW4gYW5kIHVucmF2ZWwgdGhlIGNvbm5lY3Rpb25zLiBMZXQmIzM5O3MgZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0tWTV9JTlRFTF9URFgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg3OAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gS1ZNIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWUgS1ZNIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gU3BlY2lmaWNhbGx5LCBJIHJlY2FsbCB0aGVyZSYjMzk7cyBzb21lIGludGVyZXN0aW5nIHN0dWZmIGFyb3VuZCBsaW5lIDEzNCBpbiB0aGUgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGl0LiBUaGlzIGZpbGUgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsIGNvbmZpZ3VyZXMgS1ZNIG9uIHg4Niwgc28gdW5kZXJzdGFuZGluZyBpdCB0aG9yb3VnaGx5IGlzIGVzc2VudGlhbC4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiB0aGVyZS4gSSYjMzk7bSBhbnRpY2lwYXRpbmcgc29tZSBpbnRlcmVzdGluZyBvcHRpb25zIHJlbGF0ZWQgdG8gQ1BVIGZlYXR1cmVzLCBNTVUgY29uZmlndXJhdGlvbiwgb3IgcGVyaGFwcyBldmVuIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMuIExldCYjMzk7cyBkaWcgaW4gYW5kIGZpbmQgb3V0IHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTI1Olx0XHRoZWxwXG4gMTI2Olx0XG4gMTI3Olx0XHQgIEVuYWJsZXMgS1ZNIGd1ZXN0cyB0byBjcmVhdGUgU0dYIGVuY2xhdmVzLlxuIDEyODpcdFxuIDEyOTpcdFx0ICBUaGlzIGluY2x1ZGVzIHN1cHBvcnQgdG8gZXhwb3NlIFwmIzM0O3Jhd1wmIzM0OyB1bnJlY2xhaW1hYmxlIGVuY2xhdmUgbWVtb3J5IHRvXG4gMTMwOlx0XHQgIGd1ZXN0cyB2aWEgYSBkZXZpY2Ugbm9kZSwgZS5nLiAvZGV2L3NneF92ZXBjLlxuIDEzMTpcdFxuIDEzMjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDEzMzpcdFxuIDEzNDpcdGNvbmZpZyBLVk1fSU5URUxfVERYXG4gMTM1Olx0XHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbiAxMzY6XHRcdGRlZmF1bHQgeVxuIDEzNzpcdFx0ZGVwZW5kcyBvbiBJTlRFTF9URFhfSE9TVFxuIDEzODpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG4gMTM5Olx0XHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BPUFVMQVRFXG4gMTQwOlx0XHRoZWxwXG4gMTQxOlx0XHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIGxhdW5jaGluZyBJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKVxuIDE0MjpcdFx0ICBjb25maWRlbnRpYWwgVk1zIG9uIEludGVsIHByb2Nlc3NvcnMuXG4gMTQzOlx0XG4gMTQ0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzOTUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSB3ZWxsLXZlcnNlZCBpbiB2aXJ0dWFsaXphdGlvbiBhbmQga2VybmVsIGNvbmZpZ3VyYXRpb246CgoqKkFuYWx5emluZyB0aGUgS1ZNL1REWCBEZXBlbmRlbmN5KioKCkFscmlnaHQsIHNvIGBLVk1fSU5URUxfVERYYCBpcyBmbGFnZ2VkIGFzIGRlcGVuZGVudCBvbiBgSU5URUxfVERYX0hPU1RgLiBUaGF0JiMzOTtzIGEgY2xlYXIgaW5kaWNhdG9yIG9mIGEgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIGZlYXR1cmUgb3IgZW5hYmxpbmcgY29uZGl0aW9uLiBJbW1lZGlhdGVseSwgbXkgbWVudGFsIGNoZWNrbGlzdCBzdGFydHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAuIEl0JiMzOTtzIHR5cGljYWwgdGhhdCBlbmFibGluZyB0aGUgS1ZNIFREWCBndWVzdCBzdXBwb3J0IHJlcXVpcmVzIHRoZSB1bmRlcmx5aW5nIGhvc3QgaW5mcmFzdHJ1Y3R1cmUgKHRoZSAmIzM0O2hvc3QmIzM0OyBzdXBwb3J0KSB0byBhbHNvIGJlIGFjdGl2YXRlZC4KClRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBkZWVwZXIgaW50byBgSU5URUxfVERYX0hPU1RgLiBJIG5lZWQgdG8gdmVyaWZ5IHdoYXQgdGhpcyBwYXJ0aWN1bGFyIG9wdGlvbiBkb2VzLiBUaGlzIHdpbGwgaW52b2x2ZSBjaGVja2luZyB0aGUga2VybmVsIGRvY3VtZW50YXRpb24sIHRoZSBLY29uZmlnIGZpbGUgZm9yIGBJTlRFTF9URFhfSE9TVGAsIGFuZCBpZGVhbGx5LCB0aGUgcmVsZXZhbnQgSW50ZWwgZG9jdW1lbnRhdGlvbiBvbiBURFguIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGl0IHJlbGF0ZXMgdG86IHRoZSBDUFUmIzM5O3MgY2FwYWJpbGl0aWVzLCBzcGVjaWZpYyBmaXJtd2FyZSByZXF1aXJlbWVudHMsIGFueSB1bmRlcmx5aW5nIGNoaXBzZXQgc3VwcG9ydCwgYW5kIGFueSBvdGhlciByZWxldmFudCBob3N0LWxldmVsIGNvbmZpZ3VyYXRpb25zLgoKSSYjMzk7bSBlc3NlbnRpYWxseSBhc3Nlc3Npbmcgd2hldGhlciBJJiMzOTt2ZSBnb3QgdGhlIGNvcnJlY3QgaG9zdCBwbGF0Zm9ybSB3aXRoIHRoZSBuZWNlc3NhcnkgaGFyZHdhcmUgb3IgaWYgSSYjMzk7bSBtaXNzaW5nIHNvbWUgb3RoZXIgY29uZmlndXJhdGlvbiBpdGVtIHRoYXQgd2lsbCBhbGxvdyBgS1ZNX0lOVEVMX1REWGAgdG8gd29yay4gSSBuZWVkIHRvIHJ1bGUgb3V0IGhhcmR3YXJlIG9yIHN5c3RlbS1sZXZlbCBpbmNvbXBhdGliaWxpdGllcy4gSWYgYElOVEVMX1REWF9IT1NUYCBpc24mIzM5O3QgZW5hYmxlZCwgSSB3b24mIzM5O3QgaGF2ZSBhIGZ1bmN0aW9uYWwgVERYIGVudmlyb25tZW50LiBUaGlzIGlzIGp1c3QgdGhlIGluaXRpYWwgZGlhZ25vc3RpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElOVEVMX1REWF9IT1NUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9MTg0ND1jb25maWcgWDg2X1VTRVJfU0hBRE9XX1NUQUNLXG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xODYzLVxuYXJjaC94ODYvS2NvbmZpZzoxODY0OmNvbmZpZyBJTlRFTF9URFhfSE9TVFxuYXJjaC94ODYvS2NvbmZpZy0xODY1LVx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBob3N0IHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg2OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgeDg2IEFyY2hpdGVjdHVyZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBhcmNoL3g4Ni9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gTGV0JiMzOTtzIHN0YXJ0IGFyb3VuZCBsaW5lIDE4NjQg4oCTIHRoYXQmIzM5O3Mgb2Z0ZW4gYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBleHBsb3Jpbmcgc3BlY2lmaWMgZmVhdHVyZSBzZXRzIG9yIHJlbGF0ZWQgc2V0dGluZ3MuIEhvcGVmdWxseSwgdGhpcyBzZWN0aW9uIHdpbGwgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBhc3BlY3RzIEkmIzM5O20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIGRldGFpbHMgYWJvdXQgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGVyZSwgbGlrZWx5IHJlbGF0ZWQgdG8gW2luc2VydCB5b3VyIGZpZWxkJiMzOTtzIGV4cGVjdGF0aW9uIGZyb20gbG9va2luZyBhdCBgYXJjaC94ODYvS2NvbmZpZ2BdLiBUaGlzIHNob3VsZCBiZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODYwOlx0XHQgIFNlZSBEb2N1bWVudGF0aW9uL2FyY2gveDg2L3Noc3RrLnJzdCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbjE4NjE6XHRcbjE4NjI6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjE4NjM6XHRcbjE4NjQ6XHRjb25maWcgSU5URUxfVERYX0hPU1RcbjE4NjU6XHRcdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgaG9zdCBzdXBwb3J0XCYjMzQ7XG4xODY2Olx0XHRkZXBlbmRzIG9uIENQVV9TVVBfSU5URUxcbjE4Njc6XHRcdGRlcGVuZHMgb24gWDg2XzY0XG4xODY4Olx0XHRkZXBlbmRzIG9uIEtWTV9JTlRFTFxuMTg2OTpcdFx0ZGVwZW5kcyBvbiBYODZfWDJBUElDXG4xODcwOlx0XHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXG4xODcxOlx0XHRkZXBlbmRzIG9uIENPTlRJR19BTExPQ1xuMTg3MjpcdFx0ZGVwZW5kcyBvbiBYODZfTUNFXG4xODczOlx0XHRoZWxwXG4xODc0Olx0XHQgIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHByb3RlY3RzIGd1ZXN0IFZNcyBmcm9tIG1hbGljaW91c1xuMTg3NTpcdFx0ICBob3N0IGFuZCBjZXJ0YWluIHBoeXNpY2FsIGF0dGFja3MuICBUaGlzIG9wdGlvbiBlbmFibGVzIG5lY2Vzc2FyeSBURFhcbjE4NzY6XHRcdCAgc3VwcG9ydCBpbiB0aGUgaG9zdCBrZXJuZWwgdG8gcnVuIGNvbmZpZGVudGlhbCBWTXMuXG4xODc3Olx0XG4xODc4Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4xODc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzk5CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVERYOiBJbml0aWFsIEFzc2Vzc21lbnQqKgoKT2theSwgc28gdGhlIHF1ZXN0aW9uIGltbWVkaWF0ZWx5IHBvcHBpbmcgaW50byBteSBoZWFkIGlzLCBjYW4gd2UgKmZ1enoqIFREWD8gVGhlIHRleHQgbWVudGlvbnMgY29kZSBwYXRocyB0aGF0IGFyZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBCdXQsIFREWCBpcyBhICpoYXJkd2FyZSogZmVhdHVyZSwgcmlnaHQ/IFRoYXQgc3VnZ2VzdHMgUUVNVSBjYW4mIzM5O3QgZW11bGF0ZSBpdC4KClJpZ2h0LCBjb25maXJtZWQuIFFFTVUgbmVlZHMgdGhlIHVuZGVybHlpbmcgSW50ZWwgU0dYL1REWCBoYXJkd2FyZSBhbmQgdGhlIFNFQU0gbW9kdWxlLiBObyBlbXVsYXRpb24gcG9zc2libGUgaGVyZS4KCkhtbSwgdGhpcyBwYXRjaCwgdGhvdWdoLi4uIGl0JiMzOTtzIGFsc28gdG91Y2hpbmcgYGFyY2gveDg2L2t2bS92bXgvdm14LmNgIGFuZCBgYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaGAuIFRoYXQmIzM5O3MgaW50cmlndWluZy4gTGV0JiMzOTtzIGRpZyBpbnRvIHdoYXQgdGhvc2UgY2hhbmdlcyBpbiBgdm14LmNgIGFyZSBhbGwgYWJvdXQuIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgYmVpbmcgbW9kaWZpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC92bXguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYyNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjI2NTpcdH1cbjYyNjY6XHQjZW5kaWYgLyogQ09ORklHX1g4Nl9TR1hfS1ZNICovXG42MjY3Olx0XG42MjY4Olx0aW50IGhhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuNjI2OTpcdHtcbjYyNzA6XHRcdC8qXG42MjcxOlx0XHQgKiBIYXJkd2FyZSBtYXkgb3IgbWF5IG5vdCBzZXQgdGhlIEJVU19MT0NLX0RFVEVDVEVEIGZsYWcgb24gQlVTX0xPQ0tcbjYyNzI6XHRcdCAqIFZNLUV4aXRzLiBVbmNvbmRpdGlvbmFsbHkgc2V0IHRoZSBmbGFnIGhlcmUgYW5kIGxlYXZlIHRoZSBoYW5kbGluZyB0b1xuNjI3MzpcdFx0ICogdm14X2hhbmRsZV9leGl0KCkuXG42Mjc0Olx0XHQgKi9cbjYyNzU6XHRcdHRvX3Z0KHZjcHUpLVx1MDAzZWV4aXRfcmVhc29uLmJ1c19sb2NrX2RldGVjdGVkID0gdHJ1ZTtcbjYyNzY6XHRcdHJldHVybiAxO1xuNjI3NzpcdH1cbjYyNzg6XHRcbjYyNzk6XHRzdGF0aWMgaW50IGhhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuNjI4MDpcdHtcbjYyODE6XHRcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG42MjgyOlx0XG42MjgzOlx0XHQvKlxuNjI4NDpcdFx0ICogTm90aWZ5IFZNIGV4aXQgaGFwcGVuZWQgd2hpbGUgZXhlY3V0aW5nIGlyZXQgZnJvbSBOTUksXG42Mjg1Olx0XHQgKiBcJiMzNDtibG9ja2VkIGJ5IE5NSVwmIzM0OyBiaXQgaGFzIHRvIGJlIHNldCBiZWZvcmUgbmV4dCBWTSBlbnRyeS5cbjYyODY6XHRcdCAqL1xuNjI4NzpcdFx0aWYgKGVuYWJsZV92bm1pIFx1MDAyNlx1MDAyNiAoZXhpdF9xdWFsIFx1MDAyNiBJTlRSX0lORk9fVU5CTE9DS19OTUkpKVxuNjI4ODpcdFx0XHR2bWNzX3NldF9iaXRzKEdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTyxcbjYyODk6XHRcdFx0XHQgICAgICBHVUVTVF9JTlRSX1NUQVRFX05NSSk7XG42MjkwOlx0XG42MjkxOlx0XHRyZXR1cm4gX192bXhfaGFuZGxlX25vdGlmeSh2Y3B1LCBleGl0X3F1YWwpO1xuNjI5MjpcdH1cbjYyOTM6XHRcbjYyOTQ6XHRzdGF0aWMgaW50IHZteF9nZXRfbXNyX2ltbV9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuNjI5NTpcdHtcbjYyOTY6XHRcdHJldHVybiB2bXhfZ2V0X2luc3RyX2luZm9fcmVnKHZtY3NfcmVhZDMyKFZNWF9JTlNUUlVDVElPTl9JTkZPKSk7XG42Mjk3Olx0fVxuNjI5ODpcdFxuNjI5OTpcdHN0YXRpYyBpbnQgaGFuZGxlX3JkbXNyX2ltbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG42MzAwOlx0e1xuNjMwMTpcdFx0cmV0dXJuIGt2bV9lbXVsYXRlX3JkbXNyX2ltbSh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcbjYzMDI6XHRcdFx0XHRcdCAgICAgdm14X2dldF9tc3JfaW1tX3JlZyh2Y3B1KSk7XG42MzAzOlx0fVxuNjMwNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQzOAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDM3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9ucyBvZiB0aGUgQ29kZSBDaGFuZ2UqKgoKT2theSwgc28gdGhlIGB2bXguY2AgY2hhbmdlIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGBoYW5kbGVfYnVzX2xvY2tfdm1leGl0YCBpcyBubyBsb25nZXIgYHN0YXRpY2AgYW5kIGBoYW5kbGVfbm90aWZ5YCBpcyBiZWluZyByZWZhY3RvcmVkIHRvIHVzZSBhIG5ldyBpbnRlcm5hbCBmdW5jdGlvbiwgYF9fdm14X2hhbmRsZV9ub3RpZnlgIGRlZmluZWQgaW4gYGNvbW1vbi5oYC4gVGhlIGNvcmUgbG9naWMgb2YgYGhhbmRsZV9ub3RpZnlgIGlzIGVzc2VudGlhbGx5IG1vdmVkLCBlbmFibGluZyByZXVzZSwgcHJlc3VtYWJseSBmb3IgVERYLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGlzIGBoYW5kbGVfbm90aWZ5YCBzdGlsbCByZWxldmFudCBvdXRzaWRlIGEgVERYIGNvbnRleHQ/IE9mIGNvdXJzZSBpdCBpcy4gSXQmIzM5O3MgYSBzdGFuZGFyZCBWTVggZXhpdCBoYW5kbGVyLiBJJiMzOTttIGRlYWxpbmcgd2l0aCBgRVhJVF9SRUFTT05fTk9USUZZYC4gQW5kIHRoYXQmIzM5O3MgcmVhY2hhYmxlIGluIGVudmlyb25tZW50cyBsaWtlIFFFTVUgd2l0aCBWTVggZW11bGF0aW9uLCBvciBpbiBuZXN0ZWQgS1ZNIHNjZW5hcmlvcy4KCk5vdywgd2FpdCBhIG1pbnV0ZSwgc3l6a2FsbGVyIGlzIHRoZSBmdXp6ZXIgdGhhdCYjMzk7cyByZWxldmFudCBoZXJlIGFuZCBpdCBpbnRlcmFjdHMgd2l0aCBLVk0gdmlhIGBLVk1fUlVOYCBpb2N0bHMuIFNvLCBpZiB0aGUgaG9zdCBDUFUgc3VwcG9ydHMgbm90aWZ5IFZNIGV4aXRzLCBvciBpZiB0aG9zZSBleGl0cyBhcmUgZW11bGF0ZWQsIHRoZW4gdGhhdCBwYXJ0IG9mIHRoZSBjb2RlIGlzIHJlYWNoYWJsZS4gVGhlIGFjdHVhbCBjaGFuZ2UgaW4gYHZteC5jYCBpcyBqdXN0IGNvZGUgbW92ZW1lbnQgdGhvdWdoLCBtb3N0bHkgbW92aW5nIHRoZSBsb2dpYyBpbnRvIGEgc2hhcmVkIGlubGluZSBmdW5jdGlvbi4gVGhlIG1haW4gZnVuY3Rpb25hbCBjaGFuZ2UgaXMgbGlrZWx5IGhhcHBlbmluZyB3aXRoaW4gYHRkeC5jYC4KClRoZSByZWFsIHF1ZXN0aW9uIGlzIGFib3V0IFREWC4gQ2FuIHN5emthbGxlciByZWFjaCB0aGlzIFREWCBmdW5jdGlvbmFsaXR5PyBJdCBydW5zIGluIEdDRSBWTXMuIEFuZCBHQ0UgVk1zIGRvbiYjMzk7dCBzdXBwb3J0IFREWCBob3N0IGZlYXR1cmVzICp5ZXQqLiBFdmVuIGlmIHRoZXkgZGlkLCBURFggcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUgYW5kIGZpcm13YXJlIGNvbXBvbmVudHMgbGlrZSB0aGUgU0VBTSBtb2R1bGUuIFNvLCBhcmUgd2UgdGFsa2luZyBhYm91dCBhIHN5emthbGxlciBURFggZnV6emluZyB0YXJnZXQ/IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHN5emthbGxlciBkZXNjcmlwdGlvbnMgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S1ZNX0lOVEVMX1REWCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU9MjE9a3ZtLWludGVsLSQoQ09ORklHX0tWTV9IWVBFUlYpXHQmIzQzOz0gdm14L2h5cGVydi5vIHZteC9oeXBlcnZfZXZtY3Mub1xuYXJjaC94ODYva3ZtL01ha2VmaWxlOjIyOmt2bS1pbnRlbC0kKENPTkZJR19LVk1fSU5URUxfVERYKVx0JiM0Mzs9IHZteC90ZHgub1xuYXJjaC94ODYva3ZtL01ha2VmaWxlLTIzLVxuLS1cbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmg9MzQ9c3RydWN0IHZjcHVfdnQge1xuLS1cbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtNTgtXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oOjU5OiNpZmRlZiBDT05GSUdfS1ZNX0lOVEVMX1REWFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaC02MC1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMi1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEzOiNpZmRlZiBDT05GSUdfS1ZNX0lOVEVMX1REWFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTQtc3RhdGljX2Fzc2VydChvZmZzZXRvZihzdHJ1Y3QgdmNwdV92bXgsIHZ0KSA9PSBvZmZzZXRvZihzdHJ1Y3QgdmNwdV90ZHgsIHZ0KSk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODYzPXN0YXRpYyBpbnQgdnRfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODczLSNkZWZpbmUgdnRfb3BfdGR4X29ubHkobmFtZSkgdnRfIyNuYW1lXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4NzQ6I2Vsc2UgLyogQ09ORklHX0tWTV9JTlRFTF9URFggKi9cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTg3NS0jZGVmaW5lIHZ0X29wKG5hbWUpIHZteF8jI25hbWVcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTg3Ni0jZGVmaW5lIHZ0X29wX3RkeF9vbmx5KG5hbWUpIE5VTExcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjg3NzojZW5kaWYgLyogQ09ORklHX0tWTV9JTlRFTF9URFggKi9cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTg3OC1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTYtXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oOjc6I2lmZGVmIENPTkZJR19LVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTgtI2luY2x1ZGUgXCYjMzQ7Y29tbW9uLmhcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaD0xMjc9dm9pZCB2bXhfc2V0dXBfbWNlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaC0xMjgtXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaDoxMjk6I2lmZGVmIENPTkZJR19LVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaC0xMzAtdm9pZCB0ZHhfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDkyCgkJCQkJCQlvdXRwdXQ6IDE2MAoJCQkJCQkJdGhvdWdodHM6IDE2NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IFdvcnRoRnV6emluZz1mYWxzZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHRvdWNoZXMgYHRkeC5jYCBhbmQgYWxzbyBtYWtlcyBzb21lIGNoYW5nZXMgdG8gYHZteC5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgYW55IG9mIHRoZSBjb2RlIGlzIHJlYWNoYWJsZSBpbiBhIHR5cGljYWwgZnV6emluZyBzZXR1cC4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBgdGR4LmNgIG1vZGlmaWNhdGlvbnMgYXJlIGV2ZW4gcmVsZXZhbnQuIEJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgVERYLCBpdCBhYnNvbHV0ZWx5IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIHN1cHBvcnQuIFlvdSBjYW4mIzM5O3QganVzdCBzcGluIHVwIGEgUUVNVSBpbnN0YW5jZSBhbmQgbWFnaWNhbGx5IGhhdmUgVERYLiBUaGUgVERYIG1vZHVsZSAoU0VBTSkgbmVlZHMgdG8gYmUgbG9hZGVkIGJ5IHRoZSBCSU9TL2Zpcm13YXJlLCBhbmQgeW91IG5lZWQgYSBwaHlzaWNhbCBJbnRlbCBDUFUgdGhhdCBzdXBwb3J0cyBURFguIFNvLCBJIG5lZWQgdG8gY29uZmlybTogY2FuIFFFTVUgZW11bGF0ZSBURFggYXMgYSBob3N0PyBOb3BlLCBub3QgZXZlbiBhIGd1ZXN0LCBubyB3YXkuIFNvLCB0aGUgY29kZSBwYXRocyBpbiBgdGR4LmNgLCBpbiB0aGUgY29udGV4dCBvZiBLVk0sIGFyZSBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiBUaGF0JiMzOTtzIGEgaHVnZSBjbHVlLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCBgdm14LmNgLiAgSSBzZWUgYSBjaGFuZ2UgdG8gYGhhbmRsZV9idXNfbG9ja192bWV4aXRgLCBtYWtpbmcgaXQgbm9uLXN0YXRpYy4gIE9rYXksIHRoYXQmIzM5O3MganVzdCBhIHZpc2liaWxpdHkgY2hhbmdlLCBub3QgZnVuY3Rpb25hbC4gSSYjMzk7bSBhbHNvIGxvb2tpbmcgYXQgdGhlIHJlZmFjdG9yaW5nIG9mIGBoYW5kbGVfbm90aWZ5YC4gRXNzZW50aWFsbHksIHRoZSBjb2RlIHRoYXQgd2FzIGluIGBoYW5kbGVfbm90aWZ5YCBpcyBub3cgaW4gYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uIGNhbGxlZCBgX192bXhfaGFuZGxlX25vdGlmeWAgZGVmaW5lZCBpbiBgY29tbW9uLmhgLiBUaGUgbG9naWMgaXMgKmV4YWN0bHkqIHRoZSBzYW1lLiBKdXN0IG1vdmluZyBjb2RlIGFyb3VuZC4gTm8gYWN0dWFsIGNoYW5nZXMgaW4gZnVuY3Rpb25hbGl0eSBmb3IgVk1YLiBJIGRvdWJsZSBjaGVja2VkIHRoZSBsb2dpYyBhbmQgaXQmIzM5O3MgYml0LWZvci1iaXQgaWRlbnRpY2FsLgoKT2theSwgc28gSSBoYXZlIGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24uCgpUbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIGdvIHRocm91Z2ggdGhlIHJlbGV2YW50IGZpbGVzLiBUaGVyZSYjMzk7cyBhIGNoYW5nZSB0byBgdm14LmNgOiBjaGFuZ2luZyB0aGUgc3RhdGljIHZpc2liaWxpdHkgb2YgYGhhbmRsZV9idXNfbG9ja192bWV4aXRgLiAgSXQgaGFzIGEgcHJvdG90eXBlIGluIGB2bXguaGAgYWRkZWQuIE5vIGNoYW5nZXMgdG8gb3RoZXIgbG9naWMuICBBbmQgYSBuZXcgaW5saW5lIGZ1bmN0aW9uLCBgX192bXhfaGFuZGxlX25vdGlmeWAsIGluIGBjb21tb24uaGAuIFRoZSBjb3JlIG9mIHRoZSBmdW5jdGlvbmFsaXR5IHN0aWxsIGxpZXMgd2l0aCBURFggaW4gYHRkeC5jYCwgd2hpY2gsIGFzIHdlIGVzdGFibGlzaGVkLCBpcyB1bnJlYWNoYWJsZS4gSSYjMzk7bSBzZWVpbmcgYSBsb3Qgb2YgVERYLXNwZWNpZmljIGNoYW5nZXMgaW4gYHRkeF90b192bXhfZXhpdF9yZWFzb25gLCBgdGR4X3ZjcHVfZW50ZXJfZXhpdGAsIGB0ZHhfZmFpbGVkX3ZtZW50cnlgLCBgdGR4X3ZjcHVfcnVuYCwgYHRkeF9oYW5kbGVfZXhpdGAsIGB0ZHhfZ2V0X2V4aXRfaW5mb2AsIGB0ZHhfdmNwdV9pbml0YC4gVGhlc2UgYXJlIGFsbCBURFggcmVsYXRlZCBjb2RlIGFuZCBub3QgcmVhY2hhYmxlIHdpdGggUUVNVS4KCkdpdmVuIHRoZSBndWlkZWxpbmVzIEkgaGF2ZSwgdGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIG9ubHkgdG8gVERYLCB3aGljaCBpcyB1bnJlYWNoYWJsZS4gVGhlIFZNWCBjaGFuZ2VzIGFyZSBqdXN0IGNsZWFudXAuIE5vIG5ldyBhdHRhY2sgc3VyZmFjZS4gSSYjMzk7bSBwcmV0dHkgY29uZmlkZW50IGluIHJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJlZmFjdG9yaW5nIG9mIFZNWCBjb2RlIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGZ1bmN0aW9uYWxpdHkgb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyB0aGF0IGEgZnV6emVyIGNvdWxkIHRhcmdldCBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgbmV3IGNvZGUgaXMgcmVsYXRlZCB0byBURFggYW5kIHRoYXQgd2lsbCBuZXZlciBiZSByZWFjaGVkIGR1cmluZyBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIGV4Y2x1c2l2ZWx5IHRvIEtWTSYjMzk7cyBJbnRlbCBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBob3N0IHN1cHBvcnQgKGBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jYCkuIFRoZSBtb2RpZmljYXRpb25zIHRvIHN0YW5kYXJkIFZNWCBjb2RlIChgdm14LmNgLCBgY29tbW9uLmhgKSBhcmUgcHVyZWx5IHJlZmFjdG9yaW5nIHRvIHNoYXJlIGV4aXN0aW5nIGBoYW5kbGVfbm90aWZ5YCBhbmQgYGhhbmRsZV9idXNfbG9ja192bWV4aXRgIGxvZ2ljIHdpdGggVERYLiBTaW5jZSBURFggaG9zdCBmZWF0dXJlcyByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIEludGVsIGhhcmR3YXJlIGFuZCBmaXJtd2FyZSAoU0VBTSBtb2R1bGUpIHRoYXQgY2Fubm90IGJlIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIGV4Y2x1c2l2ZWx5IHRvIEtWTSYjMzk7cyBJbnRlbCBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBob3N0IHN1cHBvcnQgKGBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jYCkuIFRoZSBtb2RpZmljYXRpb25zIHRvIHN0YW5kYXJkIFZNWCBjb2RlIChgdm14LmNgLCBgY29tbW9uLmhgKSBhcmUgcHVyZWx5IHJlZmFjdG9yaW5nIHRvIHNoYXJlIGV4aXN0aW5nIGBoYW5kbGVfbm90aWZ5YCBhbmQgYGhhbmRsZV9idXNfbG9ja192bWV4aXRgIGxvZ2ljIHdpdGggVERYLiBTaW5jZSBURFggaG9zdCBmZWF0dXJlcyByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIEludGVsIGhhcmR3YXJlIGFuZCBmaXJtd2FyZSAoU0VBTSBtb2R1bGUpIHRoYXQgY2Fubm90IGJlIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODozNTowNS44ODkyMjgxNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNDU2NDY1ODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgZXhjbHVzaXZlbHkgdG8gS1ZNJ3MgSW50ZWwgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgaG9zdCBzdXBwb3J0IChgYXJjaC94ODYva3ZtL3ZteC90ZHguY2ApLiBUaGUgbW9kaWZpY2F0aW9ucyB0byBzdGFuZGFyZCBWTVggY29kZSAoYHZteC5jYCwgYGNvbW1vbi5oYCkgYXJlIHB1cmVseSByZWZhY3RvcmluZyB0byBzaGFyZSBleGlzdGluZyBgaGFuZGxlX25vdGlmeWAgYW5kIGBoYW5kbGVfYnVzX2xvY2tfdm1leGl0YCBsb2dpYyB3aXRoIFREWC4gU2luY2UgVERYIGhvc3QgZmVhdHVyZXMgcmVxdWlyZSBzcGVjaWZpYyBwaHlzaWNhbCBJbnRlbCBoYXJkd2FyZSBhbmQgZmlybXdhcmUgKFNFQU0gbW9kdWxlKSB0aGF0IGNhbm5vdCBiZSBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgdGhlc2UgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODozNTowNS44ODkyMzI4MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk4ODM3NjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDBkNjZhZDJkNjllZTE3NmJkZTZiMTY0ODUxM2JiN2I2NGNmODNkYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxMiAwODozNTowNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oIGIvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaFxcbmluZGV4IDA4MDA1Njc2NzAyYzIuLjJjYmFhOWFiYTkwMWMgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaFxcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcXG5AQCAtNCw2ICs0LDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdm1faG9zdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3Bvc3RlZF9pbnRyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20vdm14LmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwibW11LmhcXFwiXFxuIFxcbkBAIC0xODMsNiArMTg0LDI0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3ZteF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRrdm1fdmNwdV90cmlnZ2VyX3Bvc3RlZF9pbnRlcnJ1cHQodmNwdSwgUE9TVEVEX0lOVFJfVkVDVE9SKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBpbnQgX192bXhfaGFuZGxlX25vdGlmeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsKVxcbit7XFxuK1xcdGJvb2wgY29udGV4dF9pbnZhbGlkID0gZXhpdF9xdWFsIFxcdTAwMjYgTk9USUZZX1ZNX0NPTlRFWFRfSU5WQUxJRDtcXG4rXFxuK1xcdCsrdmNwdS1cXHUwMDNlc3RhdC5ub3RpZnlfd2luZG93X2V4aXRzO1xcbitcXG4rXFx0aWYgKHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5ub3RpZnlfdm1leGl0X2ZsYWdzIFxcdTAwMjYgS1ZNX1g4Nl9OT1RJRllfVk1FWElUX1VTRVIgfHxcXG4rXFx0ICAgIGNvbnRleHRfaW52YWxpZCkge1xcbitcXHRcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZWV4aXRfcmVhc29uID0gS1ZNX0VYSVRfTk9USUZZO1xcbitcXHRcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZW5vdGlmeS5mbGFncyA9IGNvbnRleHRfaW52YWxpZCA/XFxuK1xcdFxcdFxcdFxcdFxcdCAgS1ZNX05PVElGWV9DT05URVhUX0lOVkFMSUQgOiAwO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDE7XFxuK31cXG4rXFxuIG5vaW5zdHIgdm9pZCB2bXhfaGFuZGxlX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiBcXG4gI2VuZGlmIC8qIF9fS1ZNX1g4Nl9WTVhfQ09NTU9OX0ggKi9cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcXG5pbmRleCBiMjcyYzIwNTg2YTc0Li5lNzA0NzY1N2VmNzgwIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXFxuQEAgLTkyMSwxMCArOTIxLDEzIEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIHRkY2FsbF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRyZXR1cm4gRVhJVF9SRUFTT05fVERDQUxMO1xcbiB9XFxuIFxcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4rLyogU3ludGhlc2l6ZWQgaW52YWxpZCBFeGl0IFJlYXNvbiAqL1xcbisjZGVmaW5lIFREWF9JTlZBTElEX0VYSVRfUkVBU09OXFx0XFx0VTE2X01BWFxcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bmlvbiB2bXhfZXhpdF9yZWFzb24gdGR4X3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0c3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7XFxuLVxcdHUzMiBleGl0X3JlYXNvbjtcXG4rXFx0dW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uO1xcbiBcXG4gXFx0c3dpdGNoICh0ZHgtXFx1MDAzZXZwX2VudGVyX3JldCBcXHUwMDI2IFREWF9TRUFNQ0FMTF9TVEFUVVNfTUFTSykge1xcbiBcXHRjYXNlIFREWF9TVUNDRVNTOlxcbkBAIC05MzQsMjMgKzkzNywzMiBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0Y2FzZSBURFhfTk9OX1JFQ09WRVJBQkxFX1REX1dST05HX0FQSUNfTU9ERTpcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuLVxcdFxcdHJldHVybiAtMXU7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFJldHVybiB0aGUgc3ludGhlc2l6ZWQgaW52YWxpZCBFeGl0IFJlYXNvbiwgYXMgdGhlIFREWFxcbitcXHRcXHQgKiBtb2R1bGUgbmV2ZXIgYXR0ZW1wdGVkIHRvIHJ1biB0aGUgdkNQVSwgaS5lLiB0aGUgRXhpdFxcbitcXHRcXHQgKiBSZWFzb24gaXMgdW5kZWZpbmVkLCBidXQgdGhpcyBpcyBOT1QgYSBmYWlsZWQgVk0tRW50ZXJcXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJldHVybiAodW5pb24gdm14X2V4aXRfcmVhc29uKSB7XFxuK1xcdFxcdFxcdC5iYXNpYyA9IFREWF9JTlZBTElEX0VYSVRfUkVBU09OLFxcbitcXHRcXHR9O1xcbiBcXHR9XFxuIFxcbi1cXHRleGl0X3JlYXNvbiA9IHRkeC1cXHUwMDNldnBfZW50ZXJfcmV0O1xcbitcXHRleGl0X3JlYXNvbi5mdWxsID0gKHUzMil0ZHgtXFx1MDAzZXZwX2VudGVyX3JldDtcXG4gXFxuLVxcdHN3aXRjaCAoZXhpdF9yZWFzb24pIHtcXG4rXFx0c3dpdGNoIChleGl0X3JlYXNvbi5iYXNpYykge1xcbiBcXHRjYXNlIEVYSVRfUkVBU09OX1REQ0FMTDpcXG4gXFx0XFx0aWYgKHRkdm1jYWxsX2V4aXRfdHlwZSh2Y3B1KSlcXG4tXFx0XFx0XFx0cmV0dXJuIEVYSVRfUkVBU09OX1ZNQ0FMTDtcXG4tXFxuLVxcdFxcdHJldHVybiB0ZGNhbGxfdG9fdm14X2V4aXRfcmVhc29uKHZjcHUpO1xcbitcXHRcXHRcXHRleGl0X3JlYXNvbi5iYXNpYyA9IEVYSVRfUkVBU09OX1ZNQ0FMTDtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRleGl0X3JlYXNvbi5iYXNpYyA9IHRkY2FsbF90b192bXhfZXhpdF9yZWFzb24odmNwdSk7XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIEVYSVRfUkVBU09OX0VQVF9NSVNDT05GSUc6XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIERlZmVyIEtWTV9CVUdfT04oKSB1bnRpbCB0ZHhfaGFuZGxlX2V4aXQoKSBiZWNhdXNlIHRoaXMgaXMgaW5cXG4gXFx0XFx0ICogbm9uLWluc3RydW1lbnRhYmxlIGNvZGUgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0cmV0dXJuIC0xdTtcXG4rXFx0XFx0ZXhpdF9yZWFzb24uYmFzaWMgPSBURFhfSU5WQUxJRF9FWElUX1JFQVNPTjtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuQEAgLTk2Nyw3ICs5NzksNyBAQCBzdGF0aWMgbm9pbnN0ciB2b2lkIHRkeF92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gXFx0dGR4LVxcdTAwM2V2cF9lbnRlcl9yZXQgPSB0ZGhfdnBfZW50ZXIoXFx1MDAyNnRkeC1cXHUwMDNldnAsIFxcdTAwMjZ0ZHgtXFx1MDAzZXZwX2VudGVyX2FyZ3MpO1xcbiBcXG4tXFx0dnQtXFx1MDAzZWV4aXRfcmVhc29uLmZ1bGwgPSB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHZjcHUpO1xcbitcXHR2dC1cXHUwMDNlZXhpdF9yZWFzb24gPSB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHZjcHUpO1xcbiBcXG4gXFx0dnQtXFx1MDAzZWV4aXRfcXVhbGlmaWNhdGlvbiA9IHRkeC1cXHUwMDNldnBfZW50ZXJfYXJncy5yY3g7XFxuIFxcdHRkeC1cXHUwMDNlZXh0X2V4aXRfcXVhbGlmaWNhdGlvbiA9IHRkeC1cXHUwMDNldnBfZW50ZXJfYXJncy5yZHg7XFxuQEAgLTk4MSw4ICs5OTMsNyBAQCBzdGF0aWMgbm9pbnN0ciB2b2lkIHRkeF92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gc3RhdGljIGJvb2wgdGR4X2ZhaWxlZF92bWVudHJ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbi1cXHRyZXR1cm4gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgICAgdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mdWxsICE9IC0xdTtcXG4rXFx0cmV0dXJuIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnk7XFxuIH1cXG4gXFxuIHN0YXRpYyBmYXN0cGF0aF90IHRkeF9leGl0X2hhbmRsZXJzX2Zhc3RwYXRoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5AQCAtMTA3MSw4ICsxMDgyLDEwIEBAIGZhc3RwYXRoX3QgdGR4X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncylcXG4gXFx0ICogYWxsb3dpbmcgdkNQVSBlbnRyeSB0byBhdm9pZCBjb250ZW50aW9uIHdpdGggdGRoX3ZwX2VudGVyKCkgYW5kXFxuIFxcdCAqIFREQ0FMTHMuXFxuIFxcdCAqL1xcbi1cXHRpZiAodW5saWtlbHkoUkVBRF9PTkNFKHRvX2t2bV90ZHgodmNwdS1cXHUwMDNla3ZtKS1cXHUwMDNld2FpdF9mb3Jfc2VwdF96YXApKSlcXG4rXFx0aWYgKHVubGlrZWx5KFJFQURfT05DRSh0b19rdm1fdGR4KHZjcHUtXFx1MDAzZWt2bSktXFx1MDAzZXdhaXRfZm9yX3NlcHRfemFwKSkpIHtcXG4rXFx0XFx0dnQtXFx1MDAzZWV4aXRfcmVhc29uLmJ1c19sb2NrX2RldGVjdGVkID0gMDtcXG4gXFx0XFx0cmV0dXJuIEVYSVRfRkFTVFBBVEhfRVhJVF9IQU5ETEVEO1xcbitcXHR9XFxuIFxcbiBcXHR0cmFjZV9rdm1fZW50cnkodmNwdSwgcnVuX2ZsYWdzIFxcdTAwMjYgS1ZNX1JVTl9GT1JDRV9JTU1FRElBVEVfRVhJVCk7XFxuIFxcbkBAIC0yMDI4LDcgKzIwNDEsNyBAQCBpbnQgdGR4X2NvbXBsZXRlX2VtdWxhdGVkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlcnIpXFxuIH1cXG4gXFxuIFxcbi1pbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aClcXG4rc3RhdGljIGludCBfX3RkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXFxuIHtcXG4gXFx0c3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7XFxuIFxcdHU2NCB2cF9lbnRlcl9yZXQgPSB0ZHgtXFx1MDAzZXZwX2VudGVyX3JldDtcXG5AQCAtMjEyNiw2ICsyMTM5LDExIEBAIGludCB0ZHhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGZhc3RwYXRoKVxcbiBcXHRcXHQgKiAtIElmIGl0J3Mgbm90IGFuIE1TTUksIG5vIG5lZWQgdG8gZG8gYW55dGhpbmcgaGVyZS5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdHJldHVybiAxO1xcbitcXHRjYXNlIEVYSVRfUkVBU09OX05PVElGWTpcXG4rXFx0XFx0LyogTk1JIGJsb2NraW5nIHN0YXRlIGlzIGhhbmRsZWQgYnkgVERYIG1vZHVsZSAqL1xcbitcXHRcXHRyZXR1cm4gX192bXhfaGFuZGxlX25vdGlmeSh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSk7XFxuK1xcdGNhc2UgRVhJVF9SRUFTT05fQlVTX0xPQ0s6XFxuK1xcdFxcdHJldHVybiBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHZjcHUpO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbkBAIC0yMTM1LDEzICsyMTUzLDI5IEBAIGludCB0ZHhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGZhc3RwYXRoKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4raW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXFxuK3tcXG4rXFx0aW50IHJldCA9IF9fdGR4X2hhbmRsZV9leGl0KHZjcHUsIGZhc3RwYXRoKTtcXG4rXFxuK1xcdC8qIEV4aXQgdG8gdXNlciBzcGFjZSB3aGVuIGJ1cyBsb2NrIHdhcyBkZXRlY3RlZCAqL1xcbitcXHRpZiAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5idXNfbG9ja19kZXRlY3RlZCkge1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2UgMCkge1xcbitcXHRcXHRcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZWV4aXRfcmVhc29uID0gS1ZNX0VYSVRfWDg2X0JVU19MT0NLO1xcbitcXHRcXHRcXHRyZXQgPSAwO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZWZsYWdzIHw9IEtWTV9SVU5fWDg2X0JVU19MT0NLO1xcbitcXHR9XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuIHZvaWQgdGR4X2dldF9leGl0X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKnJlYXNvbixcXG4gXFx0XFx0dTY0ICppbmZvMSwgdTY0ICppbmZvMiwgdTMyICppbnRyX2luZm8sIHUzMiAqZXJyb3JfY29kZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTtcXG4gXFxuIFxcdCpyZWFzb24gPSB0ZHgtXFx1MDAzZXZ0LmV4aXRfcmVhc29uLmZ1bGw7XFxuLVxcdGlmICgqcmVhc29uICE9IC0xdSkge1xcbitcXHRpZiAoKnJlYXNvbiAhPSBURFhfSU5WQUxJRF9FWElUX1JFQVNPTikge1xcbiBcXHRcXHQqaW5mbzEgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcXG4gXFx0XFx0KmluZm8yID0gdGR4LVxcdTAwM2VleHRfZXhpdF9xdWFsaWZpY2F0aW9uO1xcbiBcXHRcXHQqaW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7XFxuQEAgLTMxNTQsNiArMzE4OCwxNyBAQCBzdGF0aWMgaW50IHRkeF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3RkeF9jbWQgKmNtZClcXG4gXFx0dGRfdm1jc193cml0ZTY0KHRkeCwgUE9TVEVEX0lOVFJfREVTQ19BRERSLCBfX3BhKFxcdTAwMjZ0ZHgtXFx1MDAzZXZ0LnBpX2Rlc2MpKTtcXG4gXFx0dGRfdm1jc19zZXRiaXQzMih0ZHgsIFBJTl9CQVNFRF9WTV9FWEVDX0NPTlRST0wsIFBJTl9CQVNFRF9QT1NURURfSU5UUik7XFxuIFxcbitcXHRpZiAoa3ZtX25vdGlmeV92bWV4aXRfZW5hYmxlZCh2Y3B1LVxcdTAwM2Vrdm0pKSB7XFxuK1xcdFxcdHRkX3ZtY3Nfc2V0Yml0MzIodGR4LCBTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MLFxcbitcXHRcXHRcXHRcXHQgU0VDT05EQVJZX0VYRUNfTk9USUZZX1ZNX0VYSVRJTkcpO1xcbitcXHRcXHR0ZF92bWNzX3dyaXRlMzIodGR4LCBOT1RJRllfV0lORE9XLFxcbitcXHRcXHRcXHRcXHR2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gubm90aWZ5X3dpbmRvdyk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guYnVzX2xvY2tfZGV0ZWN0aW9uX2VuYWJsZWQpXFxuK1xcdFxcdHRkX3ZtY3Nfc2V0Yml0MzIodGR4LCBTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MLFxcbitcXHRcXHRcXHRcXHQgU0VDT05EQVJZX0VYRUNfQlVTX0xPQ0tfREVURUNUSU9OKTtcXG4rXFxuIFxcdHRkeC1cXHUwMDNlc3RhdGUgPSBWQ1BVX1REX1NUQVRFX0lOSVRJQUxJWkVEO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXFxuaW5kZXggZTNiZmU2YWNhMWEwZS4uYzQyOWRiOWI5MjA1NyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xcbkBAIC02MjY1LDcgKzYyNjUsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9lbmNscyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIH1cXG4gI2VuZGlmIC8qIENPTkZJR19YODZfU0dYX0tWTSAqL1xcbiBcXG4tc3RhdGljIGludCBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4raW50IGhhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdC8qXFxuIFxcdCAqIEhhcmR3YXJlIG1heSBvciBtYXkgbm90IHNldCB0aGUgQlVTX0xPQ0tfREVURUNURUQgZmxhZyBvbiBCVVNfTE9DS1xcbkBAIC02Mjc5LDkgKzYyNzksNiBAQCBzdGF0aWMgaW50IGhhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBzdGF0aWMgaW50IGhhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XFxuLVxcdGJvb2wgY29udGV4dF9pbnZhbGlkID0gZXhpdF9xdWFsIFxcdTAwMjYgTk9USUZZX1ZNX0NPTlRFWFRfSU5WQUxJRDtcXG4tXFxuLVxcdCsrdmNwdS1cXHUwMDNlc3RhdC5ub3RpZnlfd2luZG93X2V4aXRzO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogTm90aWZ5IFZNIGV4aXQgaGFwcGVuZWQgd2hpbGUgZXhlY3V0aW5nIGlyZXQgZnJvbSBOTUksXFxuQEAgLTYyOTEsMTUgKzYyODgsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRcXHR2bWNzX3NldF9iaXRzKEdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTyxcXG4gXFx0XFx0XFx0ICAgICAgR1VFU1RfSU5UUl9TVEFURV9OTUkpO1xcbiBcXG4tXFx0aWYgKHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5ub3RpZnlfdm1leGl0X2ZsYWdzIFxcdTAwMjYgS1ZNX1g4Nl9OT1RJRllfVk1FWElUX1VTRVIgfHxcXG4tXFx0ICAgIGNvbnRleHRfaW52YWxpZCkge1xcbi1cXHRcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZWV4aXRfcmVhc29uID0gS1ZNX0VYSVRfTk9USUZZO1xcbi1cXHRcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZW5vdGlmeS5mbGFncyA9IGNvbnRleHRfaW52YWxpZCA/XFxuLVxcdFxcdFxcdFxcdFxcdCAgS1ZNX05PVElGWV9DT05URVhUX0lOVkFMSUQgOiAwO1xcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIDE7XFxuK1xcdHJldHVybiBfX3ZteF9oYW5kbGVfbm90aWZ5KHZjcHUsIGV4aXRfcXVhbCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgdm14X2dldF9tc3JfaW1tX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmggYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXFxuaW5kZXggZGM4NTE3ZjE1YmM0Ni4uOGZhZjA0YzA5NzIxYyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC92bXguaFxcbkBAIC0zNzksNiArMzc5LDcgQEAgYm9vbCBfX3ZteF92Y3B1X3J1bihzdHJ1Y3QgdmNwdV92bXggKnZteCwgdW5zaWduZWQgaW50IGZsYWdzKTtcXG4gdm9pZCB2bXhfZXB0X2xvYWRfcGRwdHJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIFxcbiB2b2lkIHZteF9zZXRfaW50ZXJjZXB0X2Zvcl9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCBpbnQgdHlwZSwgYm9vbCBzZXQpO1xcbitpbnQgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIHZteF9kaXNhYmxlX2ludGVyY2VwdF9mb3JfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IHUzMiBtc3IsIGludCB0eXBlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODozNTowNi40ODk3MTI3NzFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3Mjg1NTk2MTI5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgZXhjbHVzaXZlbHkgdG8gS1ZNJ3MgSW50ZWwgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgaG9zdCBzdXBwb3J0IChgYXJjaC94ODYva3ZtL3ZteC90ZHguY2ApLiBUaGUgbW9kaWZpY2F0aW9ucyB0byBzdGFuZGFyZCBWTVggY29kZSAoYHZteC5jYCwgYGNvbW1vbi5oYCkgYXJlIHB1cmVseSByZWZhY3RvcmluZyB0byBzaGFyZSBleGlzdGluZyBgaGFuZGxlX25vdGlmeWAgYW5kIGBoYW5kbGVfYnVzX2xvY2tfdm1leGl0YCBsb2dpYyB3aXRoIFREWC4gU2luY2UgVERYIGhvc3QgZmVhdHVyZXMgcmVxdWlyZSBzcGVjaWZpYyBwaHlzaWNhbCBJbnRlbCBoYXJkd2FyZSBhbmQgZmlybXdhcmUgKFNFQU0gbW9kdWxlKSB0aGF0IGNhbm5vdCBiZSBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgdGhlc2UgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkMGQ2NmFkMmQ2OWVlMTc2YmRlNmIxNjQ4NTEzYmI3YjY0Y2Y4M2RhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMDg6MzU6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oIGIvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaFxuaW5kZXggMDgwMDU2NzY3MDJjMi4uMmNiYWE5YWJhOTAxYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcbkBAIC00LDYgKzQsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9ob3N0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcG9zdGVkX2ludHIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FzbS92bXguaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwibW11LmhcIlxuIFxuQEAgLTE4Myw2ICsxODQsMjQgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdm14X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRrdm1fdmNwdV90cmlnZ2VyX3Bvc3RlZF9pbnRlcnJ1cHQodmNwdSwgUE9TVEVEX0lOVFJfVkVDVE9SKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBpbnQgX192bXhfaGFuZGxlX25vdGlmeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4rXHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGV4aXRfcXVhbClcbit7XG4rXHRib29sIGNvbnRleHRfaW52YWxpZCA9IGV4aXRfcXVhbCBcdTAwMjYgTk9USUZZX1ZNX0NPTlRFWFRfSU5WQUxJRDtcbitcbitcdCsrdmNwdS1cdTAwM2VzdGF0Lm5vdGlmeV93aW5kb3dfZXhpdHM7XG4rXG4rXHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5ub3RpZnlfdm1leGl0X2ZsYWdzIFx1MDAyNiBLVk1fWDg2X05PVElGWV9WTUVYSVRfVVNFUiB8fFxuK1x0ICAgIGNvbnRleHRfaW52YWxpZCkge1xuK1x0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX05PVElGWTtcbitcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlbm90aWZ5LmZsYWdzID0gY29udGV4dF9pbnZhbGlkID9cbitcdFx0XHRcdFx0ICBLVk1fTk9USUZZX0NPTlRFWFRfSU5WQUxJRCA6IDA7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDE7XG4rfVxuK1xuIG5vaW5zdHIgdm9pZCB2bXhfaGFuZGxlX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFxuICNlbmRpZiAvKiBfX0tWTV9YODZfVk1YX0NPTU1PTl9IICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbmluZGV4IGIyNzJjMjA1ODZhNzQuLmU3MDQ3NjU3ZWY3ODAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5AQCAtOTIxLDEwICs5MjEsMTMgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRyZXR1cm4gRVhJVF9SRUFTT05fVERDQUxMO1xuIH1cbiBcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbisvKiBTeW50aGVzaXplZCBpbnZhbGlkIEV4aXQgUmVhc29uICovXG4rI2RlZmluZSBURFhfSU5WQUxJRF9FWElUX1JFQVNPTlx0XHRVMTZfTUFYXG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bmlvbiB2bXhfZXhpdF9yZWFzb24gdGR4X3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7XG4tXHR1MzIgZXhpdF9yZWFzb247XG4rXHR1bmlvbiB2bXhfZXhpdF9yZWFzb24gZXhpdF9yZWFzb247XG4gXG4gXHRzd2l0Y2ggKHRkeC1cdTAwM2V2cF9lbnRlcl9yZXQgXHUwMDI2IFREWF9TRUFNQ0FMTF9TVEFUVVNfTUFTSykge1xuIFx0Y2FzZSBURFhfU1VDQ0VTUzpcbkBAIC05MzQsMjMgKzkzNywzMiBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGNhc2UgVERYX05PTl9SRUNPVkVSQUJMRV9URF9XUk9OR19BUElDX01PREU6XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbi1cdFx0cmV0dXJuIC0xdTtcbitcdFx0LypcbitcdFx0ICogUmV0dXJuIHRoZSBzeW50aGVzaXplZCBpbnZhbGlkIEV4aXQgUmVhc29uLCBhcyB0aGUgVERYXG4rXHRcdCAqIG1vZHVsZSBuZXZlciBhdHRlbXB0ZWQgdG8gcnVuIHRoZSB2Q1BVLCBpLmUuIHRoZSBFeGl0XG4rXHRcdCAqIFJlYXNvbiBpcyB1bmRlZmluZWQsIGJ1dCB0aGlzIGlzIE5PVCBhIGZhaWxlZCBWTS1FbnRlclxuK1x0XHQgKi9cbitcdFx0cmV0dXJuICh1bmlvbiB2bXhfZXhpdF9yZWFzb24pIHtcbitcdFx0XHQuYmFzaWMgPSBURFhfSU5WQUxJRF9FWElUX1JFQVNPTixcbitcdFx0fTtcbiBcdH1cbiBcbi1cdGV4aXRfcmVhc29uID0gdGR4LVx1MDAzZXZwX2VudGVyX3JldDtcbitcdGV4aXRfcmVhc29uLmZ1bGwgPSAodTMyKXRkeC1cdTAwM2V2cF9lbnRlcl9yZXQ7XG4gXG4tXHRzd2l0Y2ggKGV4aXRfcmVhc29uKSB7XG4rXHRzd2l0Y2ggKGV4aXRfcmVhc29uLmJhc2ljKSB7XG4gXHRjYXNlIEVYSVRfUkVBU09OX1REQ0FMTDpcbiBcdFx0aWYgKHRkdm1jYWxsX2V4aXRfdHlwZSh2Y3B1KSlcbi1cdFx0XHRyZXR1cm4gRVhJVF9SRUFTT05fVk1DQUxMO1xuLVxuLVx0XHRyZXR1cm4gdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTtcbitcdFx0XHRleGl0X3JlYXNvbi5iYXNpYyA9IEVYSVRfUkVBU09OX1ZNQ0FMTDtcbitcdFx0ZWxzZVxuK1x0XHRcdGV4aXRfcmVhc29uLmJhc2ljID0gdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTtcbitcdFx0YnJlYWs7XG4gXHRjYXNlIEVYSVRfUkVBU09OX0VQVF9NSVNDT05GSUc6XG4gXHRcdC8qXG4gXHRcdCAqIERlZmVyIEtWTV9CVUdfT04oKSB1bnRpbCB0ZHhfaGFuZGxlX2V4aXQoKSBiZWNhdXNlIHRoaXMgaXMgaW5cbiBcdFx0ICogbm9uLWluc3RydW1lbnRhYmxlIGNvZGUgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLlxuIFx0XHQgKi9cbi1cdFx0cmV0dXJuIC0xdTtcbitcdFx0ZXhpdF9yZWFzb24uYmFzaWMgPSBURFhfSU5WQUxJRF9FWElUX1JFQVNPTjtcbitcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbiBcdH1cbkBAIC05NjcsNyArOTc5LDcgQEAgc3RhdGljIG5vaW5zdHIgdm9pZCB0ZHhfdmNwdV9lbnRlcl9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBcdHRkeC1cdTAwM2V2cF9lbnRlcl9yZXQgPSB0ZGhfdnBfZW50ZXIoXHUwMDI2dGR4LVx1MDAzZXZwLCBcdTAwMjZ0ZHgtXHUwMDNldnBfZW50ZXJfYXJncyk7XG4gXG4tXHR2dC1cdTAwM2VleGl0X3JlYXNvbi5mdWxsID0gdGR4X3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTtcbitcdHZ0LVx1MDAzZWV4aXRfcmVhc29uID0gdGR4X3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTtcbiBcbiBcdHZ0LVx1MDAzZWV4aXRfcXVhbGlmaWNhdGlvbiA9IHRkeC1cdTAwM2V2cF9lbnRlcl9hcmdzLnJjeDtcbiBcdHRkeC1cdTAwM2VleHRfZXhpdF9xdWFsaWZpY2F0aW9uID0gdGR4LVx1MDAzZXZwX2VudGVyX2FyZ3MucmR4O1xuQEAgLTk4MSw4ICs5OTMsNyBAQCBzdGF0aWMgbm9pbnN0ciB2b2lkIHRkeF92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHN0YXRpYyBib29sIHRkeF9mYWlsZWRfdm1lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0cmV0dXJuIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkgXHUwMDI2XHUwMDI2XG4tXHQgICAgICAgdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mdWxsICE9IC0xdTtcbitcdHJldHVybiB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5O1xuIH1cbiBcbiBzdGF0aWMgZmFzdHBhdGhfdCB0ZHhfZXhpdF9oYW5kbGVyc19mYXN0cGF0aChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5AQCAtMTA3MSw4ICsxMDgyLDEwIEBAIGZhc3RwYXRoX3QgdGR4X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncylcbiBcdCAqIGFsbG93aW5nIHZDUFUgZW50cnkgdG8gYXZvaWQgY29udGVudGlvbiB3aXRoIHRkaF92cF9lbnRlcigpIGFuZFxuIFx0ICogVERDQUxMcy5cbiBcdCAqL1xuLVx0aWYgKHVubGlrZWx5KFJFQURfT05DRSh0b19rdm1fdGR4KHZjcHUtXHUwMDNla3ZtKS1cdTAwM2V3YWl0X2Zvcl9zZXB0X3phcCkpKVxuK1x0aWYgKHVubGlrZWx5KFJFQURfT05DRSh0b19rdm1fdGR4KHZjcHUtXHUwMDNla3ZtKS1cdTAwM2V3YWl0X2Zvcl9zZXB0X3phcCkpKSB7XG4rXHRcdHZ0LVx1MDAzZWV4aXRfcmVhc29uLmJ1c19sb2NrX2RldGVjdGVkID0gMDtcbiBcdFx0cmV0dXJuIEVYSVRfRkFTVFBBVEhfRVhJVF9IQU5ETEVEO1xuK1x0fVxuIFxuIFx0dHJhY2Vfa3ZtX2VudHJ5KHZjcHUsIHJ1bl9mbGFncyBcdTAwMjYgS1ZNX1JVTl9GT1JDRV9JTU1FRElBVEVfRVhJVCk7XG4gXG5AQCAtMjAyOCw3ICsyMDQxLDcgQEAgaW50IHRkeF9jb21wbGV0ZV9lbXVsYXRlZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZXJyKVxuIH1cbiBcbiBcbi1pbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aClcbitzdGF0aWMgaW50IF9fdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aClcbiB7XG4gXHRzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTtcbiBcdHU2NCB2cF9lbnRlcl9yZXQgPSB0ZHgtXHUwMDNldnBfZW50ZXJfcmV0O1xuQEAgLTIxMjYsNiArMjEzOSwxMSBAQCBpbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aClcbiBcdFx0ICogLSBJZiBpdCdzIG5vdCBhbiBNU01JLCBubyBuZWVkIHRvIGRvIGFueXRoaW5nIGhlcmUuXG4gXHRcdCAqL1xuIFx0XHRyZXR1cm4gMTtcbitcdGNhc2UgRVhJVF9SRUFTT05fTk9USUZZOlxuK1x0XHQvKiBOTUkgYmxvY2tpbmcgc3RhdGUgaXMgaGFuZGxlZCBieSBURFggbW9kdWxlICovXG4rXHRcdHJldHVybiBfX3ZteF9oYW5kbGVfbm90aWZ5KHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpKTtcbitcdGNhc2UgRVhJVF9SRUFTT05fQlVTX0xPQ0s6XG4rXHRcdHJldHVybiBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHZjcHUpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG5AQCAtMjEzNSwxMyArMjE1MywyOSBAQCBpbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitpbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aClcbit7XG4rXHRpbnQgcmV0ID0gX190ZHhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xuK1xuK1x0LyogRXhpdCB0byB1c2VyIHNwYWNlIHdoZW4gYnVzIGxvY2sgd2FzIGRldGVjdGVkICovXG4rXHRpZiAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5idXNfbG9ja19kZXRlY3RlZCkge1xuK1x0XHRpZiAocmV0IFx1MDAzZSAwKSB7XG4rXHRcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9YODZfQlVTX0xPQ0s7XG4rXHRcdFx0cmV0ID0gMDtcbitcdFx0fVxuK1xuK1x0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VmbGFncyB8PSBLVk1fUlVOX1g4Nl9CVVNfTE9DSztcbitcdH1cbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIHZvaWQgdGR4X2dldF9leGl0X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKnJlYXNvbixcbiBcdFx0dTY0ICppbmZvMSwgdTY0ICppbmZvMiwgdTMyICppbnRyX2luZm8sIHUzMiAqZXJyb3JfY29kZSlcbiB7XG4gXHRzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTtcbiBcbiBcdCpyZWFzb24gPSB0ZHgtXHUwMDNldnQuZXhpdF9yZWFzb24uZnVsbDtcbi1cdGlmICgqcmVhc29uICE9IC0xdSkge1xuK1x0aWYgKCpyZWFzb24gIT0gVERYX0lOVkFMSURfRVhJVF9SRUFTT04pIHtcbiBcdFx0KmluZm8xID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHRcdCppbmZvMiA9IHRkeC1cdTAwM2VleHRfZXhpdF9xdWFsaWZpY2F0aW9uO1xuIFx0XHQqaW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7XG5AQCAtMzE1NCw2ICszMTg4LDE3IEBAIHN0YXRpYyBpbnQgdGR4X3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fdGR4X2NtZCAqY21kKVxuIFx0dGRfdm1jc193cml0ZTY0KHRkeCwgUE9TVEVEX0lOVFJfREVTQ19BRERSLCBfX3BhKFx1MDAyNnRkeC1cdTAwM2V2dC5waV9kZXNjKSk7XG4gXHR0ZF92bWNzX3NldGJpdDMyKHRkeCwgUElOX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCwgUElOX0JBU0VEX1BPU1RFRF9JTlRSKTtcbiBcbitcdGlmIChrdm1fbm90aWZ5X3ZtZXhpdF9lbmFibGVkKHZjcHUtXHUwMDNla3ZtKSkge1xuK1x0XHR0ZF92bWNzX3NldGJpdDMyKHRkeCwgU0VDT05EQVJZX1ZNX0VYRUNfQ09OVFJPTCxcbitcdFx0XHRcdCBTRUNPTkRBUllfRVhFQ19OT1RJRllfVk1fRVhJVElORyk7XG4rXHRcdHRkX3ZtY3Nfd3JpdGUzMih0ZHgsIE5PVElGWV9XSU5ET1csXG4rXHRcdFx0XHR2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm5vdGlmeV93aW5kb3cpO1xuK1x0fVxuK1xuK1x0aWYgKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guYnVzX2xvY2tfZGV0ZWN0aW9uX2VuYWJsZWQpXG4rXHRcdHRkX3ZtY3Nfc2V0Yml0MzIodGR4LCBTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MLFxuK1x0XHRcdFx0IFNFQ09OREFSWV9FWEVDX0JVU19MT0NLX0RFVEVDVElPTik7XG4rXG4gXHR0ZHgtXHUwMDNlc3RhdGUgPSBWQ1BVX1REX1NUQVRFX0lOSVRJQUxJWkVEO1xuIFxuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbmluZGV4IGUzYmZlNmFjYTFhMGUuLmM0MjlkYjliOTIwNTcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5AQCAtNjI2NSw3ICs2MjY1LDcgQEAgc3RhdGljIGludCBoYW5kbGVfZW5jbHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIH1cbiAjZW5kaWYgLyogQ09ORklHX1g4Nl9TR1hfS1ZNICovXG4gXG4tc3RhdGljIGludCBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbitpbnQgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0LypcbiBcdCAqIEhhcmR3YXJlIG1heSBvciBtYXkgbm90IHNldCB0aGUgQlVTX0xPQ0tfREVURUNURUQgZmxhZyBvbiBCVVNfTE9DS1xuQEAgLTYyNzksOSArNjI3OSw2IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gc3RhdGljIGludCBoYW5kbGVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuLVx0Ym9vbCBjb250ZXh0X2ludmFsaWQgPSBleGl0X3F1YWwgXHUwMDI2IE5PVElGWV9WTV9DT05URVhUX0lOVkFMSUQ7XG4tXG4tXHQrK3ZjcHUtXHUwMDNlc3RhdC5ub3RpZnlfd2luZG93X2V4aXRzO1xuIFxuIFx0LypcbiBcdCAqIE5vdGlmeSBWTSBleGl0IGhhcHBlbmVkIHdoaWxlIGV4ZWN1dGluZyBpcmV0IGZyb20gTk1JLFxuQEAgLTYyOTEsMTUgKzYyODgsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHR2bWNzX3NldF9iaXRzKEdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTyxcbiBcdFx0XHQgICAgICBHVUVTVF9JTlRSX1NUQVRFX05NSSk7XG4gXG4tXHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5ub3RpZnlfdm1leGl0X2ZsYWdzIFx1MDAyNiBLVk1fWDg2X05PVElGWV9WTUVYSVRfVVNFUiB8fFxuLVx0ICAgIGNvbnRleHRfaW52YWxpZCkge1xuLVx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX05PVElGWTtcbi1cdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlbm90aWZ5LmZsYWdzID0gY29udGV4dF9pbnZhbGlkID9cbi1cdFx0XHRcdFx0ICBLVk1fTk9USUZZX0NPTlRFWFRfSU5WQUxJRCA6IDA7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDE7XG4rXHRyZXR1cm4gX192bXhfaGFuZGxlX25vdGlmeSh2Y3B1LCBleGl0X3F1YWwpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHZteF9nZXRfbXNyX2ltbV9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmggYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXG5pbmRleCBkYzg1MTdmMTViYzQ2Li44ZmFmMDRjMDk3MjFjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguaFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC92bXguaFxuQEAgLTM3OSw2ICszNzksNyBAQCBib29sIF9fdm14X3ZjcHVfcnVuKHN0cnVjdCB2Y3B1X3ZteCAqdm14LCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIHZvaWQgdm14X2VwdF9sb2FkX3BkcHRycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFxuIHZvaWQgdm14X3NldF9pbnRlcmNlcHRfZm9yX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IsIGludCB0eXBlLCBib29sIHNldCk7XG4raW50IGhhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgdm14X2Rpc2FibGVfaW50ZXJjZXB0X2Zvcl9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRcdFx0XHRcdCB1MzIgbXNyLCBpbnQgdHlwZSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjM1OjA2LjQ4OTcxNTgwMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzMjUwMTQxNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFREWCBLVk0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIGl0IGxvb2tzIGxpa2UgYSB0YXJnZXRlZCBtb2RpZmljYXRpb24gdG8gS1ZNJ3MgVERYIHN1cHBvcnQsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggaGFuZGxpbmcgYE5PVElGWWAgYW5kIGBCVVNfTE9DS2AgVk0gZXhpdHMuIFRoZSBmYWN0IHRoYXQgaXQgdG91Y2hlcyBgY29tbW9uLmhgLCBgdGR4LmNgLCBgdm14LmNgLCBhbmQgYHZteC5oYCB0ZWxscyBtZSBpdCdzIG5vdCBhIHRyaXZpYWwgY2hhbmdlOyBpdCdzIGxpa2VseSBhIHByZXR0eSBmdW5kYW1lbnRhbCBzaGlmdCBpbiBob3cgdGhlc2UgZXhpdHMgYXJlIHByb2Nlc3NlZCB3aXRoaW4gdGhlIFREWCBjb250ZXh0LlxuXG5JdCBsb29rcyBsaWtlIHRoZSBgaGFuZGxlX25vdGlmeWAgZnVuY3Rpb24gaW4gYHZteC5jYCBpcyBiZWluZyByZWZhY3RvcmVkIHRvIHVzZSBhIGNvbW1vbiBoYW5kbGVyIGRlZmluZWQgaW4gYGNvbW1vbi5oYCwgYW5kIHRoYXQncyB1c3VhbGx5IGEgZ29vZCBzaWduIG9mIGNvZGUgcmV1c2UgYW5kIG1haW50YWluYWJpbGl0eS4gQ2hhbmdpbmcgYHRkeF90b192bXhfZXhpdF9yZWFzb25gIHRvIHVzZSBhIGB1bmlvbiB2bXhfZXhpdF9yZWFzb25gIGlzIGxpa2VseSBmb3IgYmV0dGVyIHR5cGUgc2FmZXR5IGFuZCBjbGFyaXR5LCB3aGljaCBpcyBkZWZpbml0ZWx5IGEgcGx1cy4gSGFuZGxpbmcgYEVYSVRfUkVBU09OX05PVElGWWAgYW5kIGBFWElUX1JFQVNPTl9CVVNfTE9DS2AgZGlyZWN0bHkgaW4gYF9fdGR4X2hhbmRsZV9leGl0YCBtYWtlcyBzZW5zZSwgYXMgdGhvc2UgYXJlIFREWC1zcGVjaWZpYyBleGl0IHJlYXNvbnMuIFNldHRpbmcgdGhvc2Ugc2Vjb25kYXJ5IGV4ZWN1dGlvbiBmbGFncyBkdXJpbmcgaW5pdGlhbGl6YXRpb24gaW4gYHRkeF92Y3B1X2luaXRgIGlzIGhvdyB3ZSBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5LlxuXG5Ob3csIG15IGtleSBjb25jZXJuIGlzIHJlYWNoYWJpbGl0eS4gVERYIGlzIGEgaGFyZHdhcmUgZmVhdHVyZSwgSW50ZWwncy4gSXMgdGhpcyBjb2RlIGV2ZW4gKnJlYWNoYWJsZSogaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzPyAgSSBrbm93IFREWCByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZSwgYnV0IG9mdGVuIHdpdGggS1ZNLCB3ZSBjYW4gbW9jayBvciB0ZXN0IHNvbWUgaGFyZHdhcmUgZmVhdHVyZXMgd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlLiBCdXQsIGlzIHRoYXQgdHJ1ZSBmb3IgVERYPyBJdCdzIG9mdGVuIGltcG9zc2libGUgdG8gZ2V0IHRvIGEgc3BlY2lmaWMgY29kZSBwYXRoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBlc3BlY2lhbGx5IHdoZW4gZW11bGF0aW5nIGhhcmR3YXJlLiBDYW4gUUVNVSBlbXVsYXRlIFREWD9cblxuSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgaWYgVERYIGlzIGV2ZW4gZnV6emFibGUuIElmIGl0J3Mgbm90LCB3ZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGNvZGUgdGhhdCdzIG5vdCBlYXNpbHkgdGVzdGFibGUgaW4gYSBzdGFuZGFyZCBzZXR1cC4gSSBuZWVkIHRvIHNlYXJjaCB0aGUgS1ZNIGNvZGViYXNlIGZvciBvdGhlciByZWZlcmVuY2VzIHRvIFREWCB0byBzZWUgaG93IGl0J3MgaGFuZGxlZC4gVGhpcyBpcyB3aGVyZSBJJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggdGhlIGBrdm0vYCBkaXJlY3RvcnkuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IG11Y2ggcmVhY2hhYmlsaXR5IHRoaXMgY29kZSBoYXMgaW4gbXkgdGVzdGluZyBlbnZpcm9ubWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1ODgsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODozNToxNC44MTQ3MzQxNTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwOTM1NzUwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfSU5URUxfVERYX0hPU1RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4Lmg9MTAyPXN0YXRpYyBpbmxpbmUgbG9uZyB0ZHhfa3ZtX2h5cGVyY2FsbCh1bnNpZ25lZCBpbnQgbnIsIHVuc2lnbmVkIGxvbmcgcDEsXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaC0xMDktXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4Lmg6MTEwOiNpZmRlZiBDT05GSUdfSU5URUxfVERYX0hPU1RcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaC0xMTEtdm9pZCB0ZHhfaW5pdCh2b2lkKTtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oPTE4ND1zdGF0aWMgaW5saW5lIHZvaWQgdGR4X3N5c19kaXNhYmxlKHZvaWQpIHsgfVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oOjE4NTojZW5kaWZcXHQvKiBDT05GSUdfSU5URUxfVERYX0hPU1QgKi9cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaC0xODYtXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmFyY2gveDg2L3ZpcnQvdm14L01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX0lOVEVMX1REWF9IT1NUKVxcdCs9IHRkeC9cXG4tLVxcbmRyaXZlcnMvdmlydC9jb2NvL01ha2VmaWxlPTg9b2JqLSQoQ09ORklHX0lOVEVMX1REWF9HVUVTVClcXHQrPSB0ZHgtZ3Vlc3QvXFxuZHJpdmVycy92aXJ0L2NvY28vTWFrZWZpbGU6OTpvYmotJChDT05GSUdfSU5URUxfVERYX0hPU1QpXFx0Kz0gdGR4LWhvc3QvXFxuZHJpdmVycy92aXJ0L2NvY28vTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0FSTV9DQ0FfR1VFU1QpXFx0Kz0gYXJtLWNjYS1ndWVzdC9cXG4tLVxcbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaD0xND1lbnVtIG1pc2NfcmVzX3R5cGUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9taXNjX2Nncm91cC5oLTIwLSNlbmRpZlxcbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaDoyMTojaWZkZWYgQ09ORklHX0lOVEVMX1REWF9IT1NUXFxuaW5jbHVkZS9saW51eC9taXNjX2Nncm91cC5oLTIyLVxcdC8qKiBATUlTQ19DR19SRVNfVERYOiBJbnRlbCBURFggSEtJRHMgcmVzb3VyY2UgKi9cXG4tLVxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jPTIwPXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBtaXNjX3Jlc19uYW1lW10gPSB7XFxuLS1cXG5rZXJuZWwvY2dyb3VwL21pc2MuYy0yNi0jZW5kaWZcXG5rZXJuZWwvY2dyb3VwL21pc2MuYzoyNzojaWZkZWYgQ09ORklHX0lOVEVMX1REWF9IT1NUXFxua2VybmVsL2Nncm91cC9taXNjLmMtMjgtXFx0LyogSW50ZWwgVERYIEhLSURzIHJlc291cmNlICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjM1OjE2LjkyNDEwMjI0NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MzE4NzAyNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCdzIFNjb3BlKipcblxuT2theSwgc28gdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jYC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSB6b29tIGluIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBnb3Zlcm4gaXRzIGNvbXBpbGF0aW9uLiBJIGtub3cgdGhpcyBmaWxlIGlzIGNyaXRpY2FsIGZvciBJbnRlbCdzIFREWCBzdXBwb3J0IHdpdGhpbiBLVk0sIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY2hhbmdlIGlzIGhhcHBlbmluZy4gVGhlIHR3byBwcmltYXJ5IGNvbmZpZ3VyYXRpb24ga25vYnMgdG8gY2hlY2sgYXJlIGRlZmluaXRlbHkgYENPTkZJR19JTlRFTF9URFhfSE9TVGAgYW5kIGBDT05GSUdfS1ZNX0lOVEVMYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb25lIGlzIHRoZSB0cmlnZ2VyIGZvciBpbmNsdWRpbmcgdGhpcyBjb2RlIGluIHRoZSBidWlsZCwgb3IgaWYgaXQgaXMgY29uZGl0aW9uYWwgb24gKmJvdGgqLiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBldmFsdWF0ZSB0aGUgcGF0Y2gncyBpbXBhY3QgYW5kIGl0cyBsaWtlbHkgdXNlIGNhc2Ugd2l0aGluIHRoZSBicm9hZGVyIHZpcnR1YWxpemF0aW9uIGxhbmRzY2FwZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGlzIGEgY29yZSBURFggaG9zdCB1cGRhdGUgb3IgYSBnZW5lcmFsIEtWTS9JbnRlbCBjaGFuZ2UsIGFuZCBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTI1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6MzU6MjAuODU1OTc2NjUyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NTQ3Njk3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZHhcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjM1OjIwLjk1NTUzMzM5OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NDIzMDU4ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGV4dCwgcmVuZGVyZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6XG5cbioqRGl2aW5nIGludG8gdGhlIEtWTS9WTVggTWFrZWZpbGUqKlxuXG5Pa2F5LCBzbyB0aGUgcHJvbXB0IHRlbGxzIG1lIHRvIGNoZWNrIG91dCBgYXJjaC94ODYva3ZtL3ZteC9NYWtlZmlsZWAuIEltbWVkaWF0ZWx5LCBteSBicmFpbiBraWNrcyBpbnRvIGdlYXIuIFRoaXMgaXMgdGhlIGhlYXJ0IG9mIHRoZSB4ODYtc3BlY2lmaWMgcGFydCBvZiBLVk0ncyBWTVggKFZpcnR1YWwgTWFjaGluZSBFeHRlbnNpb25zKSBjb2RlLCB3aGljaCBpcyBob3cgSW50ZWwgQ1BVcyBwcm92aWRlIGhhcmR3YXJlIHZpcnR1YWxpemF0aW9uLiBJIGtub3cgdGhpcyBNYWtlZmlsZSBsaWtlbHkgZGVmaW5lcyB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgdGhlIGNvcmUgVk1YIGNvbXBvbmVudHMg4oCTIHRoZSBtb2R1bGVzLCBvYmplY3QgZmlsZXMsIGFuZCBwcm9iYWJseSBob3cgdGhleSdyZSBsaW5rZWQgdG9nZXRoZXIuXG5cbkknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6XG5cbiogICAqKkNvbXBpbGVyIGZsYWdzOioqIEFyZSB0aGVyZSBzcGVjaWZpYyBmbGFncyBiZWluZyB1c2VkIGZvciBWTVggY29kZT8gVGhpbmdzIGxpa2UgYC1tcmVjb3JkLW1jb3VudGAsIGAtZm5vLXN0cmljdC1hbGlhc2luZ2AsIG9yIGFueXRoaW5nIHNwZWNpZmljIHRvIGhhbmRsZSB0aGUgcHJpdmlsZWdlZCBuYXR1cmUgb2YgdGhpcyBjb2RlP1xuKiAgICoqRGVwZW5kZW5jaWVzOioqIFdoYXQgb3RoZXIgZmlsZXMgYW5kIG1vZHVsZXMgZG9lcyB0aGlzIE1ha2VmaWxlIHJlbHkgb24/IEFyZSB0aGVyZSBjb3JlIEtWTSBjb21wb25lbnRzLCBvciBvdGhlciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmlsZXMsIG9yIHBvc3NpYmx5IGNvbW1vbiB2aXJ0dWFsaXphdGlvbiBzdHJ1Y3R1cmVzP1xuKiAgICoqT2JqZWN0IGZpbGVzOioqIFdoYXQgYXJlIHRoZSBtYWpvciBvYmplY3QgZmlsZXMgYnVpbHQgaGVyZT8gVGhpcyB3aWxsIGdpdmUgbWUgYSBxdWljayB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkaWZmZXJlbnQgZnVuY3Rpb25hbCBhcmVhcyBvZiB0aGUgVk1YIGltcGxlbWVudGF0aW9uLiBUaGluZ3MgbGlrZSBpbnRlcnJ1cHQgaGFuZGxpbmcsIFZNQ1MgbWFuYWdlbWVudCwgYW5kIG1lbW9yeSB0cmFuc2xhdGlvbiBhcmUgd2hhdCBJJ2QgZXhwZWN0IHRvIHNlZS5cbiogICAqKk1vZHVsZSBkZXBlbmRlbmNpZXM6KiogSG93IGRvZXMgdGhlIFZNWCBtb2R1bGUgKGxpa2VseSBga3ZtLWludGVsLmtvYCBvciBzb21ldGhpbmcgc2ltaWxhcikgZ2V0IGJ1aWx0LCBhbmQgd2hhdCdzIGl0cyByZWxhdGlvbnNoaXAgdG8gb3RoZXIgS1ZNIG1vZHVsZXM/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgbGlua2luZyBzdGVwcyBvciBidWlsZCBjb25maWd1cmF0aW9ucyBmb3Igc3BlY2lmaWMgQ1BVIGdlbmVyYXRpb25zIG9yIGZlYXR1cmVzP1xuKiAgICoqQ29uZGl0aW9uYWwgY29tcGlsYXRpb246KiogQXJlIHRoZXJlIGFueSBgI2lmZGVmYCBvciBzaW1pbGFyIGNvbnN0cnVjdHMgdG8gaGFuZGxlIGRpZmZlcmVudCBDUFUgZmVhdHVyZXMgKGUuZy4sIEV4dGVuZGVkIFBhZ2UgVGFibGVzIChFUFQpLCBWaXJ0dWFsaXphdGlvbiBFeHRlbnNpb25zIGZvciBJL08gKFZJTykpIG9yIGtlcm5lbCBjb25maWd1cmF0aW9ucz8gVGhpcyBpcyBhIGtleSBhcmVhIHRvIGxvb2sgZm9yIHRvIGRldGVybWluZSB0aGUgZGVncmVlIG9mIGN1c3RvbWl6YXRpb24uXG5cbkVzc2VudGlhbGx5LCBJJ20gZXhwZWN0aW5nIHRvIHRyYWNlIHRoZSBidWlsZCBwcm9jZXNzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBsb3ctbGV2ZWwgVk1YIGNvZGUgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBLVk0ga2VybmVsIG1vZHVsZS4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgcG90ZW50aWFsIG9wdGltaXphdGlvbnMsIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zLCBvciBhcmVhcyB0aGF0IG1pZ2h0IGJlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBUaGlzIGlzIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIEtWTSBwdXp6bGUuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0MzgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODozNToyNi4zOTc4NDIwMDlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk5MTY2MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGR4XFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL01ha2VmaWxlPTIxPWt2bS1pbnRlbC0kKENPTkZJR19LVk1fSFlQRVJWKVxcdCs9IHZteC9oeXBlcnYubyB2bXgvaHlwZXJ2X2V2bWNzLm9cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MjI6a3ZtLWludGVsLSQoQ09ORklHX0tWTV9JTlRFTF9URFgpXFx0Kz0gdm14L3RkeC5vXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlLTIzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODozNToyNi40Njc3NjM0MjdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjM5ODU4NDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIFREWCBTdXBwb3J0OiBBIFF1aWNrIFNjYW4qKlxuXG5BbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwIGludG8gdGhpcyBhcmNoaXRlY3R1cmUsIGZpcnN0IHRoaW5nJ3MgZmlyc3Q6IGdvdHRhIG1ha2Ugc3VyZSB3ZSdyZSBwbGF5aW5nIHdpdGggYSBzdXBwb3J0ZWQgZW52aXJvbm1lbnQuIExldCdzIHNlZS4uLiB0aGUgY29kZSdzIHByb2JhYmx5IGdvdCBjb25kaXRpb25hbHMgYmFzZWQgb24gdGhlIGBDT05GSUdfS1ZNX0lOVEVMX1REWGAgZmxhZy4gWWVwLCB0aGF0J3MgdGhlIG9uZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiB0aGUgcmVsZXZhbnQgYXJlYXMsIHByb2JhYmx5IHN0YXJ0aW5nIHdpdGggdGhlIEtWTSBJbnRlbCBtb2R1bGUgYW5kIGFueSBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb24gZmlsZXMuIE15IGh1bmNoIGlzIHRoYXQgdGhpcyB2YXJpYWJsZSBkaWN0YXRlcyBlbmFibGVtZW50IG9yIGRpc2FibGVtZW50IG9mIHRoZSBURFggZmVhdHVyZXMuIE1heWJlIEkgc2hvdWxkIGFsc28gbG9vayBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBgVERYYCBpbiB0aGUgY29udGV4dCBvZiB0aGUgZ3Vlc3Qgc2lkZS4gSXQnbGwgYWxzbyBsaWtlbHkgYmUgcmVmZXJlbmNlZCBpbiBhIGZldyBvdGhlciBwbGFjZXM7IEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBjb25maWcgb3B0aW9uIGlzIHVzZWQgY29uc2lzdGVudGx5IHRvIGdvdmVybiB0aGUgcmlnaHQgZnVuY3Rpb25hbGl0eS4gSXQncyB0aGUgbHluY2hwaW4sIHRoZSBpbmRpY2F0b3Igb2Ygd2hldGhlciB3ZSdyZSBpbiBhIFREWCB3b3JsZCBvciBub3QsIHdoaWNoLCBJIGJldCwgYWZmZWN0cyBldmVyeXRoaW5nIGZyb20gbWVtb3J5IGhhbmRsaW5nIHRvIHZpcnR1YWxpemF0aW9uIHN0cnVjdHVyZXMuIEJldHRlciBtYWtlIHN1cmUgdGhhdCBpdCBhbGwgbWFrZXMgc2Vuc2UuIE9rYXksIGxldCdzIGdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDg1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6MzU6MzAuMTA3NjI0OTUzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTQwODExOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0lOVEVMX1REWFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6MzU6MzAuMTczMDQxNDkxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4Mjc0NzEyNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipEZWx2aW5nIGludG8gS1ZNX0lOVEVMX1REWCBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZmlndXJpbmcgb3V0IHdoYXQgZXhhY3RseSBgS1ZNX0lOVEVMX1REWGAgcmVsaWVzIG9uLiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMgY3JpdGljYWwgZm9yIGFueSBzZXJpb3VzIGludmVzdGlnYXRpb24sIHdoZXRoZXIgaXQncyByZWxhdGVkIHRvIGRldmVsb3BtZW50LCBkZWJ1Z2dpbmcsIG9yIGp1c3QgdW5kZXJzdGFuZGluZyB0aGUgc3lzdGVtIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIGtub3cgd2hhdCBvdGhlciBjb21wb25lbnRzIG9yIGZlYXR1cmVzIGFyZSBmdW5kYW1lbnRhbCB0byB0aGUgb3BlcmF0aW9uIG9mIGBLVk1fSU5URUxfVERYYC4gVGhpbmdzIGxpa2UgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgc3VwcG9ydCAob2YgY291cnNlLCBpdCdzIEludGVsLXNwZWNpZmljLCBidXQgd2hpY2ggc3BlY2lmaWMgZmVhdHVyZXM/KSwgb3RoZXIgS1ZNIG1vZHVsZXMsIGFueSBzcGVjaWZpYyBrZXJuZWwgdmVyc2lvbnMsIG9yIGV2ZW4gcGFydGljdWxhciBjb21waWxlciBmbGFncyBtaWdodCBiZSBjcnVjaWFsLiBJJ20gaW1hZ2luaW5nIGEgY29tcGxleCBncmFwaCBvZiBkZXBlbmRlbmNpZXMsIGFuZCBJIG5lZWQgdG8gdW50YW5nbGUgaXQgc28gSSBjYW4gc2VlIHRoZSBiaWdnZXIgcGljdHVyZS4gVGltZSB0byBkaWcgaW4gYW5kIHVucmF2ZWwgdGhlIGNvbm5lY3Rpb25zLiBMZXQncyBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUwOCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjM1OjM0LjAwMDUxNTgxMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY1MjU5NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiS1ZNX0lOVEVMX1REWFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjM1OjM0LjA2NzA0Njc3OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjYyMTM4NjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIEtWTSBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWUgS1ZNIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gU3BlY2lmaWNhbGx5LCBJIHJlY2FsbCB0aGVyZSdzIHNvbWUgaW50ZXJlc3Rpbmcgc3R1ZmYgYXJvdW5kIGxpbmUgMTM0IGluIHRoZSBgYXJjaC94ODYva3ZtL0tjb25maWdgIGZpbGUuIEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCBpdC4gVGhpcyBmaWxlIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIGtlcm5lbCBjb25maWd1cmVzIEtWTSBvbiB4ODYsIHNvIHVuZGVyc3RhbmRpbmcgaXQgdGhvcm91Z2hseSBpcyBlc3NlbnRpYWwuIExldCdzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiB0aGVyZS4gSSdtIGFudGljaXBhdGluZyBzb21lIGludGVyZXN0aW5nIG9wdGlvbnMgcmVsYXRlZCB0byBDUFUgZmVhdHVyZXMsIE1NVSBjb25maWd1cmF0aW9uLCBvciBwZXJoYXBzIGV2ZW4gcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucy4gTGV0J3MgZGlnIGluIGFuZCBmaW5kIG91dCB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg3OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjM1OjM3LjcyOTE4Nzk2NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI3MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTI1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTI1OlxcdFxcdGhlbHBcXG4gMTI2OlxcdFxcbiAxMjc6XFx0XFx0ICBFbmFibGVzIEtWTSBndWVzdHMgdG8gY3JlYXRlIFNHWCBlbmNsYXZlcy5cXG4gMTI4OlxcdFxcbiAxMjk6XFx0XFx0ICBUaGlzIGluY2x1ZGVzIHN1cHBvcnQgdG8gZXhwb3NlIFxcXCJyYXdcXFwiIHVucmVjbGFpbWFibGUgZW5jbGF2ZSBtZW1vcnkgdG9cXG4gMTMwOlxcdFxcdCAgZ3Vlc3RzIHZpYSBhIGRldmljZSBub2RlLCBlLmcuIC9kZXYvc2d4X3ZlcGMuXFxuIDEzMTpcXHRcXG4gMTMyOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTMzOlxcdFxcbiAxMzQ6XFx0Y29uZmlnIEtWTV9JTlRFTF9URFhcXG4gMTM1OlxcdFxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuIDEzNjpcXHRcXHRkZWZhdWx0IHlcXG4gMTM3OlxcdFxcdGRlcGVuZHMgb24gSU5URUxfVERYX0hPU1RcXG4gMTM4OlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbiAxMzk6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxcbiAxNDA6XFx0XFx0aGVscFxcbiAxNDE6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWClcXG4gMTQyOlxcdFxcdCAgY29uZmlkZW50aWFsIFZNcyBvbiBJbnRlbCBwcm9jZXNzb3JzLlxcbiAxNDM6XFx0XFxuIDE0NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjM1OjM3LjcyOTM1MzI2NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzU3NTg2MDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSB3ZWxsLXZlcnNlZCBpbiB2aXJ0dWFsaXphdGlvbiBhbmQga2VybmVsIGNvbmZpZ3VyYXRpb246XG5cbioqQW5hbHl6aW5nIHRoZSBLVk0vVERYIERlcGVuZGVuY3kqKlxuXG5BbHJpZ2h0LCBzbyBgS1ZNX0lOVEVMX1REWGAgaXMgZmxhZ2dlZCBhcyBkZXBlbmRlbnQgb24gYElOVEVMX1REWF9IT1NUYC4gVGhhdCdzIGEgY2xlYXIgaW5kaWNhdG9yIG9mIGEgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIGZlYXR1cmUgb3IgZW5hYmxpbmcgY29uZGl0aW9uLiBJbW1lZGlhdGVseSwgbXkgbWVudGFsIGNoZWNrbGlzdCBzdGFydHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAuIEl0J3MgdHlwaWNhbCB0aGF0IGVuYWJsaW5nIHRoZSBLVk0gVERYIGd1ZXN0IHN1cHBvcnQgcmVxdWlyZXMgdGhlIHVuZGVybHlpbmcgaG9zdCBpbmZyYXN0cnVjdHVyZSAodGhlIFwiaG9zdFwiIHN1cHBvcnQpIHRvIGFsc28gYmUgYWN0aXZhdGVkLlxuXG5UaGUgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgZGVlcGVyIGludG8gYElOVEVMX1REWF9IT1NUYC4gSSBuZWVkIHRvIHZlcmlmeSB3aGF0IHRoaXMgcGFydGljdWxhciBvcHRpb24gZG9lcy4gVGhpcyB3aWxsIGludm9sdmUgY2hlY2tpbmcgdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uLCB0aGUgS2NvbmZpZyBmaWxlIGZvciBgSU5URUxfVERYX0hPU1RgLCBhbmQgaWRlYWxseSwgdGhlIHJlbGV2YW50IEludGVsIGRvY3VtZW50YXRpb24gb24gVERYLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBpdCByZWxhdGVzIHRvOiB0aGUgQ1BVJ3MgY2FwYWJpbGl0aWVzLCBzcGVjaWZpYyBmaXJtd2FyZSByZXF1aXJlbWVudHMsIGFueSB1bmRlcmx5aW5nIGNoaXBzZXQgc3VwcG9ydCwgYW5kIGFueSBvdGhlciByZWxldmFudCBob3N0LWxldmVsIGNvbmZpZ3VyYXRpb25zLlxuXG5JJ20gZXNzZW50aWFsbHkgYXNzZXNzaW5nIHdoZXRoZXIgSSd2ZSBnb3QgdGhlIGNvcnJlY3QgaG9zdCBwbGF0Zm9ybSB3aXRoIHRoZSBuZWNlc3NhcnkgaGFyZHdhcmUgb3IgaWYgSSdtIG1pc3Npbmcgc29tZSBvdGhlciBjb25maWd1cmF0aW9uIGl0ZW0gdGhhdCB3aWxsIGFsbG93IGBLVk1fSU5URUxfVERYYCB0byB3b3JrLiBJIG5lZWQgdG8gcnVsZSBvdXQgaGFyZHdhcmUgb3Igc3lzdGVtLWxldmVsIGluY29tcGF0aWJpbGl0aWVzLiBJZiBgSU5URUxfVERYX0hPU1RgIGlzbid0IGVuYWJsZWQsIEkgd29uJ3QgaGF2ZSBhIGZ1bmN0aW9uYWwgVERYIGVudmlyb25tZW50LiBUaGlzIGlzIGp1c3QgdGhlIGluaXRpYWwgZGlhZ25vc3RpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM5NSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6MzU6NDEuNDg2OTQyNDY3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjI3ODI1MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTlRFTF9URFhfSE9TVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9LY29uZmlnPTE4NDQ9Y29uZmlnIFg4Nl9VU0VSX1NIQURPV19TVEFDS1xcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xODYzLVxcbmFyY2gveDg2L0tjb25maWc6MTg2NDpjb25maWcgSU5URUxfVERYX0hPU1RcXG5hcmNoL3g4Ni9LY29uZmlnLTE4NjUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgaG9zdCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODozNTo0My43MTQ3NzY1MDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc5NjMxMTk4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSB4ODYgQXJjaGl0ZWN0dXJlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgYXJjaC94ODYvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIHg4NiBhcmNoaXRlY3R1cmUuIExldCdzIHN0YXJ0IGFyb3VuZCBsaW5lIDE4NjQg4oCTIHRoYXQncyBvZnRlbiBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGV4cGxvcmluZyBzcGVjaWZpYyBmZWF0dXJlIHNldHMgb3IgcmVsYXRlZCBzZXR0aW5ncy4gSG9wZWZ1bGx5LCB0aGlzIHNlY3Rpb24gd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIGFzcGVjdHMgSSdtIHRyeWluZyB0byB1bmRlcnN0YW5kLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIGRldGFpbHMgYWJvdXQgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGVyZSwgbGlrZWx5IHJlbGF0ZWQgdG8gW2luc2VydCB5b3VyIGZpZWxkJ3MgZXhwZWN0YXRpb24gZnJvbSBsb29raW5nIGF0IGBhcmNoL3g4Ni9LY29uZmlnYF0uIFRoaXMgc2hvdWxkIGJlIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODY5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6MzU6NDcuNTExMDkxNzE5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4NjA6XFx0XFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni9zaHN0ay5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uXFxuMTg2MTpcXHRcXG4xODYyOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4xODYzOlxcdFxcbjE4NjQ6XFx0Y29uZmlnIElOVEVMX1REWF9IT1NUXFxuMTg2NTpcXHRcXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBob3N0IHN1cHBvcnRcXFwiXFxuMTg2NjpcXHRcXHRkZXBlbmRzIG9uIENQVV9TVVBfSU5URUxcXG4xODY3OlxcdFxcdGRlcGVuZHMgb24gWDg2XzY0XFxuMTg2ODpcXHRcXHRkZXBlbmRzIG9uIEtWTV9JTlRFTFxcbjE4Njk6XFx0XFx0ZGVwZW5kcyBvbiBYODZfWDJBUElDXFxuMTg3MDpcXHRcXHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXFxuMTg3MTpcXHRcXHRkZXBlbmRzIG9uIENPTlRJR19BTExPQ1xcbjE4NzI6XFx0XFx0ZGVwZW5kcyBvbiBYODZfTUNFXFxuMTg3MzpcXHRcXHRoZWxwXFxuMTg3NDpcXHRcXHQgIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHByb3RlY3RzIGd1ZXN0IFZNcyBmcm9tIG1hbGljaW91c1xcbjE4NzU6XFx0XFx0ICBob3N0IGFuZCBjZXJ0YWluIHBoeXNpY2FsIGF0dGFja3MuICBUaGlzIG9wdGlvbiBlbmFibGVzIG5lY2Vzc2FyeSBURFhcXG4xODc2OlxcdFxcdCAgc3VwcG9ydCBpbiB0aGUgaG9zdCBrZXJuZWwgdG8gcnVuIGNvbmZpZGVudGlhbCBWTXMuXFxuMTg3NzpcXHRcXG4xODc4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4xODc5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODozNTo0Ny41MTEyOTQwMzlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE2NDczOTE2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFREWDogSW5pdGlhbCBBc3Nlc3NtZW50KipcblxuT2theSwgc28gdGhlIHF1ZXN0aW9uIGltbWVkaWF0ZWx5IHBvcHBpbmcgaW50byBteSBoZWFkIGlzLCBjYW4gd2UgKmZ1enoqIFREWD8gVGhlIHRleHQgbWVudGlvbnMgY29kZSBwYXRocyB0aGF0IGFyZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBCdXQsIFREWCBpcyBhICpoYXJkd2FyZSogZmVhdHVyZSwgcmlnaHQ/IFRoYXQgc3VnZ2VzdHMgUUVNVSBjYW4ndCBlbXVsYXRlIGl0LlxuXG5SaWdodCwgY29uZmlybWVkLiBRRU1VIG5lZWRzIHRoZSB1bmRlcmx5aW5nIEludGVsIFNHWC9URFggaGFyZHdhcmUgYW5kIHRoZSBTRUFNIG1vZHVsZS4gTm8gZW11bGF0aW9uIHBvc3NpYmxlIGhlcmUuXG5cbkhtbSwgdGhpcyBwYXRjaCwgdGhvdWdoLi4uIGl0J3MgYWxzbyB0b3VjaGluZyBgYXJjaC94ODYva3ZtL3ZteC92bXguY2AgYW5kIGBhcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oYC4gVGhhdCdzIGludHJpZ3VpbmcuIExldCdzIGRpZyBpbnRvIHdoYXQgdGhvc2UgY2hhbmdlcyBpbiBgdm14LmNgIGFyZSBhbGwgYWJvdXQuIFRpbWUgdG8gc2VlIHdoYXQncyBhY3R1YWxseSBiZWluZyBtb2RpZmllZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzOTksIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODozNTo1MS42NzYwMzUzMTlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ5ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS92bXgvdm14LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjI2NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjI2NTpcXHR9XFxuNjI2NjpcXHQjZW5kaWYgLyogQ09ORklHX1g4Nl9TR1hfS1ZNICovXFxuNjI2NzpcXHRcXG42MjY4OlxcdGludCBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG42MjY5OlxcdHtcXG42MjcwOlxcdFxcdC8qXFxuNjI3MTpcXHRcXHQgKiBIYXJkd2FyZSBtYXkgb3IgbWF5IG5vdCBzZXQgdGhlIEJVU19MT0NLX0RFVEVDVEVEIGZsYWcgb24gQlVTX0xPQ0tcXG42MjcyOlxcdFxcdCAqIFZNLUV4aXRzLiBVbmNvbmRpdGlvbmFsbHkgc2V0IHRoZSBmbGFnIGhlcmUgYW5kIGxlYXZlIHRoZSBoYW5kbGluZyB0b1xcbjYyNzM6XFx0XFx0ICogdm14X2hhbmRsZV9leGl0KCkuXFxuNjI3NDpcXHRcXHQgKi9cXG42Mjc1OlxcdFxcdHRvX3Z0KHZjcHUpLVxcdTAwM2VleGl0X3JlYXNvbi5idXNfbG9ja19kZXRlY3RlZCA9IHRydWU7XFxuNjI3NjpcXHRcXHRyZXR1cm4gMTtcXG42Mjc3OlxcdH1cXG42Mjc4OlxcdFxcbjYyNzk6XFx0c3RhdGljIGludCBoYW5kbGVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG42MjgwOlxcdHtcXG42MjgxOlxcdFxcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XFxuNjI4MjpcXHRcXG42MjgzOlxcdFxcdC8qXFxuNjI4NDpcXHRcXHQgKiBOb3RpZnkgVk0gZXhpdCBoYXBwZW5lZCB3aGlsZSBleGVjdXRpbmcgaXJldCBmcm9tIE5NSSxcXG42Mjg1OlxcdFxcdCAqIFxcXCJibG9ja2VkIGJ5IE5NSVxcXCIgYml0IGhhcyB0byBiZSBzZXQgYmVmb3JlIG5leHQgVk0gZW50cnkuXFxuNjI4NjpcXHRcXHQgKi9cXG42Mjg3OlxcdFxcdGlmIChlbmFibGVfdm5taSBcXHUwMDI2XFx1MDAyNiAoZXhpdF9xdWFsIFxcdTAwMjYgSU5UUl9JTkZPX1VOQkxPQ0tfTk1JKSlcXG42Mjg4OlxcdFxcdFxcdHZtY3Nfc2V0X2JpdHMoR1VFU1RfSU5URVJSVVBUSUJJTElUWV9JTkZPLFxcbjYyODk6XFx0XFx0XFx0XFx0ICAgICAgR1VFU1RfSU5UUl9TVEFURV9OTUkpO1xcbjYyOTA6XFx0XFxuNjI5MTpcXHRcXHRyZXR1cm4gX192bXhfaGFuZGxlX25vdGlmeSh2Y3B1LCBleGl0X3F1YWwpO1xcbjYyOTI6XFx0fVxcbjYyOTM6XFx0XFxuNjI5NDpcXHRzdGF0aWMgaW50IHZteF9nZXRfbXNyX2ltbV9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbjYyOTU6XFx0e1xcbjYyOTY6XFx0XFx0cmV0dXJuIHZteF9nZXRfaW5zdHJfaW5mb19yZWcodm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pKTtcXG42Mjk3OlxcdH1cXG42Mjk4OlxcdFxcbjYyOTk6XFx0c3RhdGljIGludCBoYW5kbGVfcmRtc3JfaW1tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG42MzAwOlxcdHtcXG42MzAxOlxcdFxcdHJldHVybiBrdm1fZW11bGF0ZV9yZG1zcl9pbW0odmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksXFxuNjMwMjpcXHRcXHRcXHRcXHRcXHQgICAgIHZteF9nZXRfbXNyX2ltbV9yZWcodmNwdSkpO1xcbjYzMDM6XFx0fVxcbjYzMDQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjM1OjUxLjY3NjQ4NjkwOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTM4MTQ3MTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIHRoZSBDb2RlIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoZSBgdm14LmNgIGNoYW5nZSBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdGAgaXMgbm8gbG9uZ2VyIGBzdGF0aWNgIGFuZCBgaGFuZGxlX25vdGlmeWAgaXMgYmVpbmcgcmVmYWN0b3JlZCB0byB1c2UgYSBuZXcgaW50ZXJuYWwgZnVuY3Rpb24sIGBfX3ZteF9oYW5kbGVfbm90aWZ5YCBkZWZpbmVkIGluIGBjb21tb24uaGAuIFRoZSBjb3JlIGxvZ2ljIG9mIGBoYW5kbGVfbm90aWZ5YCBpcyBlc3NlbnRpYWxseSBtb3ZlZCwgZW5hYmxpbmcgcmV1c2UsIHByZXN1bWFibHkgZm9yIFREWC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpcyBgaGFuZGxlX25vdGlmeWAgc3RpbGwgcmVsZXZhbnQgb3V0c2lkZSBhIFREWCBjb250ZXh0PyBPZiBjb3Vyc2UgaXQgaXMuIEl0J3MgYSBzdGFuZGFyZCBWTVggZXhpdCBoYW5kbGVyLiBJJ20gZGVhbGluZyB3aXRoIGBFWElUX1JFQVNPTl9OT1RJRllgLiBBbmQgdGhhdCdzIHJlYWNoYWJsZSBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIHdpdGggVk1YIGVtdWxhdGlvbiwgb3IgaW4gbmVzdGVkIEtWTSBzY2VuYXJpb3MuXG5cbk5vdywgd2FpdCBhIG1pbnV0ZSwgc3l6a2FsbGVyIGlzIHRoZSBmdXp6ZXIgdGhhdCdzIHJlbGV2YW50IGhlcmUgYW5kIGl0IGludGVyYWN0cyB3aXRoIEtWTSB2aWEgYEtWTV9SVU5gIGlvY3Rscy4gU28sIGlmIHRoZSBob3N0IENQVSBzdXBwb3J0cyBub3RpZnkgVk0gZXhpdHMsIG9yIGlmIHRob3NlIGV4aXRzIGFyZSBlbXVsYXRlZCwgdGhlbiB0aGF0IHBhcnQgb2YgdGhlIGNvZGUgaXMgcmVhY2hhYmxlLiBUaGUgYWN0dWFsIGNoYW5nZSBpbiBgdm14LmNgIGlzIGp1c3QgY29kZSBtb3ZlbWVudCB0aG91Z2gsIG1vc3RseSBtb3ZpbmcgdGhlIGxvZ2ljIGludG8gYSBzaGFyZWQgaW5saW5lIGZ1bmN0aW9uLiBUaGUgbWFpbiBmdW5jdGlvbmFsIGNoYW5nZSBpcyBsaWtlbHkgaGFwcGVuaW5nIHdpdGhpbiBgdGR4LmNgLlxuXG5UaGUgcmVhbCBxdWVzdGlvbiBpcyBhYm91dCBURFguIENhbiBzeXprYWxsZXIgcmVhY2ggdGhpcyBURFggZnVuY3Rpb25hbGl0eT8gSXQgcnVucyBpbiBHQ0UgVk1zLiBBbmQgR0NFIFZNcyBkb24ndCBzdXBwb3J0IFREWCBob3N0IGZlYXR1cmVzICp5ZXQqLiBFdmVuIGlmIHRoZXkgZGlkLCBURFggcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUgYW5kIGZpcm13YXJlIGNvbXBvbmVudHMgbGlrZSB0aGUgU0VBTSBtb2R1bGUuIFNvLCBhcmUgd2UgdGFsa2luZyBhYm91dCBhIHN5emthbGxlciBURFggZnV6emluZyB0YXJnZXQ/IEknbGwgbmVlZCB0byBjaGVjayB0aGUgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQzOCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjM1OjU4LjgxNDYzODEyNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4MTMwODQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLVk1fSU5URUxfVERYXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZT0yMT1rdm0taW50ZWwtJChDT05GSUdfS1ZNX0hZUEVSVilcXHQrPSB2bXgvaHlwZXJ2Lm8gdm14L2h5cGVydl9ldm1jcy5vXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlOjIyOmt2bS1pbnRlbC0kKENPTkZJR19LVk1fSU5URUxfVERYKVxcdCs9IHZteC90ZHgub1xcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0yMy1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmg9MzQ9c3RydWN0IHZjcHVfdnQge1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaC01OC1cXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oOjU5OiNpZmRlZiBDT05GSUdfS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtNjAtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMi1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxMzojaWZkZWYgQ09ORklHX0tWTV9JTlRFTF9URFhcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNC1zdGF0aWNfYXNzZXJ0KG9mZnNldG9mKHN0cnVjdCB2Y3B1X3ZteCwgdnQpID09IG9mZnNldG9mKHN0cnVjdCB2Y3B1X3RkeCwgdnQpKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTg2Mz1zdGF0aWMgaW50IHZ0X2dtZW1fbWF4X21hcHBpbmdfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODczLSNkZWZpbmUgdnRfb3BfdGR4X29ubHkobmFtZSkgdnRfIyNuYW1lXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6ODc0OiNlbHNlIC8qIENPTkZJR19LVk1fSU5URUxfVERYICovXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODc1LSNkZWZpbmUgdnRfb3AobmFtZSkgdm14XyMjbmFtZVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTg3Ni0jZGVmaW5lIHZ0X29wX3RkeF9vbmx5KG5hbWUpIE5VTExcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4Nzc6I2VuZGlmIC8qIENPTkZJR19LVk1fSU5URUxfVERYICovXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODc4LVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguaC02LVxcbmFyY2gveDg2L2t2bS92bXgvdGR4Lmg6NzojaWZkZWYgQ09ORklHX0tWTV9JTlRFTF9URFhcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTgtI2luY2x1ZGUgXFxcImNvbW1vbi5oXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg9MTI3PXZvaWQgdm14X3NldHVwX21jZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oLTEyOC1cXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaDoxMjk6I2lmZGVmIENPTkZJR19LVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmgtMTMwLXZvaWQgdGR4X2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODozNjowMC43OTU5NTI2NjNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTg1NDk2ODYzMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IFdvcnRoRnV6emluZz1mYWxzZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggdG91Y2hlcyBgdGR4LmNgIGFuZCBhbHNvIG1ha2VzIHNvbWUgY2hhbmdlcyB0byBgdm14LmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiBhbnkgb2YgdGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIGEgdHlwaWNhbCBmdXp6aW5nIHNldHVwLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGB0ZHguY2AgbW9kaWZpY2F0aW9ucyBhcmUgZXZlbiByZWxldmFudC4gQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiBURFgsIGl0IGFic29sdXRlbHkgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgc3VwcG9ydC4gWW91IGNhbid0IGp1c3Qgc3BpbiB1cCBhIFFFTVUgaW5zdGFuY2UgYW5kIG1hZ2ljYWxseSBoYXZlIFREWC4gVGhlIFREWCBtb2R1bGUgKFNFQU0pIG5lZWRzIHRvIGJlIGxvYWRlZCBieSB0aGUgQklPUy9maXJtd2FyZSwgYW5kIHlvdSBuZWVkIGEgcGh5c2ljYWwgSW50ZWwgQ1BVIHRoYXQgc3VwcG9ydHMgVERYLiBTbywgSSBuZWVkIHRvIGNvbmZpcm06IGNhbiBRRU1VIGVtdWxhdGUgVERYIGFzIGEgaG9zdD8gTm9wZSwgbm90IGV2ZW4gYSBndWVzdCwgbm8gd2F5LiBTbywgdGhlIGNvZGUgcGF0aHMgaW4gYHRkeC5jYCwgaW4gdGhlIGNvbnRleHQgb2YgS1ZNLCBhcmUgY29tcGxldGVseSB1bnJlYWNoYWJsZSBpbiBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4gVGhhdCdzIGEgaHVnZSBjbHVlLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgYHZteC5jYC4gIEkgc2VlIGEgY2hhbmdlIHRvIGBoYW5kbGVfYnVzX2xvY2tfdm1leGl0YCwgbWFraW5nIGl0IG5vbi1zdGF0aWMuICBPa2F5LCB0aGF0J3MganVzdCBhIHZpc2liaWxpdHkgY2hhbmdlLCBub3QgZnVuY3Rpb25hbC4gSSdtIGFsc28gbG9va2luZyBhdCB0aGUgcmVmYWN0b3Jpbmcgb2YgYGhhbmRsZV9ub3RpZnlgLiBFc3NlbnRpYWxseSwgdGhlIGNvZGUgdGhhdCB3YXMgaW4gYGhhbmRsZV9ub3RpZnlgIGlzIG5vdyBpbiBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gY2FsbGVkIGBfX3ZteF9oYW5kbGVfbm90aWZ5YCBkZWZpbmVkIGluIGBjb21tb24uaGAuIFRoZSBsb2dpYyBpcyAqZXhhY3RseSogdGhlIHNhbWUuIEp1c3QgbW92aW5nIGNvZGUgYXJvdW5kLiBObyBhY3R1YWwgY2hhbmdlcyBpbiBmdW5jdGlvbmFsaXR5IGZvciBWTVguIEkgZG91YmxlIGNoZWNrZWQgdGhlIGxvZ2ljIGFuZCBpdCdzIGJpdC1mb3ItYml0IGlkZW50aWNhbC5cblxuT2theSwgc28gSSBoYXZlIGEgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbi5cblxuVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIGdvIHRocm91Z2ggdGhlIHJlbGV2YW50IGZpbGVzLiBUaGVyZSdzIGEgY2hhbmdlIHRvIGB2bXguY2A6IGNoYW5naW5nIHRoZSBzdGF0aWMgdmlzaWJpbGl0eSBvZiBgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdGAuICBJdCBoYXMgYSBwcm90b3R5cGUgaW4gYHZteC5oYCBhZGRlZC4gTm8gY2hhbmdlcyB0byBvdGhlciBsb2dpYy4gIEFuZCBhIG5ldyBpbmxpbmUgZnVuY3Rpb24sIGBfX3ZteF9oYW5kbGVfbm90aWZ5YCwgaW4gYGNvbW1vbi5oYC4gVGhlIGNvcmUgb2YgdGhlIGZ1bmN0aW9uYWxpdHkgc3RpbGwgbGllcyB3aXRoIFREWCBpbiBgdGR4LmNgLCB3aGljaCwgYXMgd2UgZXN0YWJsaXNoZWQsIGlzIHVucmVhY2hhYmxlLiBJJ20gc2VlaW5nIGEgbG90IG9mIFREWC1zcGVjaWZpYyBjaGFuZ2VzIGluIGB0ZHhfdG9fdm14X2V4aXRfcmVhc29uYCwgYHRkeF92Y3B1X2VudGVyX2V4aXRgLCBgdGR4X2ZhaWxlZF92bWVudHJ5YCwgYHRkeF92Y3B1X3J1bmAsIGB0ZHhfaGFuZGxlX2V4aXRgLCBgdGR4X2dldF9leGl0X2luZm9gLCBgdGR4X3ZjcHVfaW5pdGAuIFRoZXNlIGFyZSBhbGwgVERYIHJlbGF0ZWQgY29kZSBhbmQgbm90IHJlYWNoYWJsZSB3aXRoIFFFTVUuXG5cbkdpdmVuIHRoZSBndWlkZWxpbmVzIEkgaGF2ZSwgdGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIG9ubHkgdG8gVERYLCB3aGljaCBpcyB1bnJlYWNoYWJsZS4gVGhlIFZNWCBjaGFuZ2VzIGFyZSBqdXN0IGNsZWFudXAuIE5vIG5ldyBhdHRhY2sgc3VyZmFjZS4gSSdtIHByZXR0eSBjb25maWRlbnQgaW4gcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVmYWN0b3Jpbmcgb2YgVk1YIGNvZGUgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBmdW5jdGlvbmFsaXR5IG9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgdGhhdCBhIGZ1enplciBjb3VsZCB0YXJnZXQgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlIG5ldyBjb2RlIGlzIHJlbGF0ZWQgdG8gVERYIGFuZCB0aGF0IHdpbGwgbmV2ZXIgYmUgcmVhY2hlZCBkdXJpbmcgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwOTIsIk91dHB1dFRva2VucyI6MTYwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODozNjoxOS4zNDU2NDMyNDNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyBleGNsdXNpdmVseSB0byBLVk0ncyBJbnRlbCBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBob3N0IHN1cHBvcnQgKGBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jYCkuIFRoZSBtb2RpZmljYXRpb25zIHRvIHN0YW5kYXJkIFZNWCBjb2RlIChgdm14LmNgLCBgY29tbW9uLmhgKSBhcmUgcHVyZWx5IHJlZmFjdG9yaW5nIHRvIHNoYXJlIGV4aXN0aW5nIGBoYW5kbGVfbm90aWZ5YCBhbmQgYGhhbmRsZV9idXNfbG9ja192bWV4aXRgIGxvZ2ljIHdpdGggVERYLiBTaW5jZSBURFggaG9zdCBmZWF0dXJlcyByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIEludGVsIGhhcmR3YXJlIGFuZCBmaXJtd2FyZSAoU0VBTSBtb2R1bGUpIHRoYXQgY2Fubm90IGJlIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIGV4Y2x1c2l2ZWx5IHRvIEtWTSdzIEludGVsIFREWCAoVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMpIGhvc3Qgc3VwcG9ydCAoYGFyY2gveDg2L2t2bS92bXgvdGR4LmNgKS4gVGhlIG1vZGlmaWNhdGlvbnMgdG8gc3RhbmRhcmQgVk1YIGNvZGUgKGB2bXguY2AsIGBjb21tb24uaGApIGFyZSBwdXJlbHkgcmVmYWN0b3JpbmcgdG8gc2hhcmUgZXhpc3RpbmcgYGhhbmRsZV9ub3RpZnlgIGFuZCBgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdGAgbG9naWMgd2l0aCBURFguIFNpbmNlIFREWCBob3N0IGZlYXR1cmVzIHJlcXVpcmUgc3BlY2lmaWMgcGh5c2ljYWwgSW50ZWwgaGFyZHdhcmUgYW5kIGZpcm13YXJlIChTRUFNIG1vZHVsZSkgdGhhdCBjYW5ub3QgYmUgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIHRoZXNlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6MzY6MTkuMzQ1Njc3OTUzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqxp7h[1] Phase: Running StartedAt: 2026-08-12 08:36:30 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxp7h[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-12 08:36:30 +0000 UTC FinishedAt: 2026-08-12 08:36:35 +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,}