Name: series-workflowh9xz2 Phase: Failed StartedAt: 2026-09-10 17:39:45 +0000 UTC FinishedAt: 2026-09-10 17:58:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh9xz2[0] Phase: Succeeded StartedAt: 2026-09-10 17:39:45 +0000 UTC FinishedAt: 2026-09-10 17:57:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh9xz2[0].run-triage Phase: Succeeded StartedAt: 2026-09-10 17:39:45 +0000 UTC FinishedAt: 2026-09-10 17:57:58 +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+CgkJCTx0ZD4yMDI2LzA5LzEwIDE3OjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEV0aGVybmV0IEU4MDAgU2VyaWVzIGRyaXZlciAoaWNlKSwgc3BlY2lmaWNhbGx5IFRDIGZsb3dlciBmaWx0ZXIgb2ZmbG9hZCBsb2dpYy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgKEludGVsIEU4MTAvRTgwMCBOSUNzKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNzo1NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDA5OTIzNzUwYmFmYzU3MGFjNGIzZmI1NjFlMDYxMzVjNDhhMDgxZDVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAxNzo1NzoyNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmhcbmluZGV4IGRiM2M3MDE1YzU2YzQuLjZjNTk2ZTVhMzE1MTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxuQEAgLTY0Myw2ICYjNDM7NjQzLDcgQEAgc3RydWN0IGljZV9wZiB7XG4gXHQgKi9cbiBcdHUxNiBudW1fZG1hY19jaG5sX2ZsdHJzO1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgdGNfZmxvd2VyX2ZsdHJfbGlzdDtcbiYjNDM7XHRzdHJ1Y3QgaGxpc3RfaGVhZCB0Y19zd19mbHRyX2xpc3Q7XG4gXG4gXHR1NjQgc3VwcG9ydGVkX3J4ZGlkcztcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RjX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90Y19saWIuY1xuaW5kZXggZDIwMzU3YzA0MTI3My4uN2NmYzg5NDFiN2JhNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdGNfbGliLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdGNfbGliLmNcbkBAIC03OCw3ICYjNDM7NzgsOCBAQCBzdGF0aWMgaW50IGljZV90Y19jb3VudF9sa3Vwcyh1MzIgZmxhZ3MsIHN0cnVjdCBpY2VfdGNfZmxvd2VyX2ZsdHIgKmZsdHIpXG4gXHRcdCAgICAgSUNFX1RDX0ZMV1JfRklFTERfREVTVF9JUFY2IHwgSUNFX1RDX0ZMV1JfRklFTERfU1JDX0lQVjYpKVxuIFx0XHRsa3Vwc19jbnQmIzQzOyYjNDM7O1xuIFxuLVx0aWYgKGZsYWdzIFx1MDAyNiAoSUNFX1RDX0ZMV1JfRklFTERfSVBfVE9TIHwgSUNFX1RDX0ZMV1JfRklFTERfSVBfVFRMKSlcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IChJQ0VfVENfRkxXUl9GSUVMRF9JUF9UT1MgfCBJQ0VfVENfRkxXUl9GSUVMRF9JUF9UVEwgfFxuJiM0MztcdFx0ICAgICBJQ0VfVENfRkxXUl9GSUVMRF9JUF9QUk9UTykpXG4gXHRcdGxrdXBzX2NudCYjNDM7JiM0Mzs7XG4gXG4gXHQvKiBhcmUgTDJUUHYzIG9wdGlvbnMgc3BlY2lmaWVkPyAqL1xuQEAgLTU1Miw3ICYjNDM7NTUzLDggQEAgaWNlX3RjX2ZpbGxfcnVsZXMoc3RydWN0IGljZV9odyAqaHcsIHUzMiBmbGFncyxcbiBcdH1cbiBcbiBcdGlmIChoZWFkZXJzLVx1MDAzZWwyX2tleS5uX3Byb3RvID09IGh0b25zKEVUSF9QX0lQKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAoZmxhZ3MgXHUwMDI2IChJQ0VfVENfRkxXUl9GSUVMRF9JUF9UT1MgfCBJQ0VfVENfRkxXUl9GSUVMRF9JUF9UVEwpKSkge1xuJiM0MztcdCAgICAoZmxhZ3MgXHUwMDI2IChJQ0VfVENfRkxXUl9GSUVMRF9JUF9UT1MgfCBJQ0VfVENfRkxXUl9GSUVMRF9JUF9UVEwgfFxuJiM0MztcdFx0ICAgICAgSUNFX1RDX0ZMV1JfRklFTERfSVBfUFJPVE8pKSkge1xuIFx0XHRsaXN0W2ldLnR5cGUgPSBpY2VfcHJvdG9fdHlwZV9mcm9tX2lwdjQoaW5uZXIpO1xuIFxuIFx0XHRpZiAoZmxhZ3MgXHUwMDI2IElDRV9UQ19GTFdSX0ZJRUxEX0lQX1RPUykge1xuQEAgLTU2NywxMSAmIzQzOzU2OSwxOSBAQCBpY2VfdGNfZmlsbF9ydWxlcyhzdHJ1Y3QgaWNlX2h3ICpodywgdTMyIGZsYWdzLFxuIFx0XHRcdFx0aGVhZGVycy1cdTAwM2VsM19tYXNrLnR0bDtcbiBcdFx0fVxuIFxuJiM0MztcdFx0aWYgKGZsYWdzIFx1MDAyNiBJQ0VfVENfRkxXUl9GSUVMRF9JUF9QUk9UTykge1xuJiM0MztcdFx0XHRsaXN0W2ldLmhfdS5pcHY0X2hkci5wcm90b2NvbCA9XG4mIzQzO1x0XHRcdFx0aGVhZGVycy1cdTAwM2VsM19rZXkuaXBfcHJvdG87XG4mIzQzO1x0XHRcdGxpc3RbaV0ubV91LmlwdjRfaGRyLnByb3RvY29sID1cbiYjNDM7XHRcdFx0XHRoZWFkZXJzLVx1MDAzZWwzX21hc2suaXBfcHJvdG87XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHRpJiM0MzsmIzQzOztcbiBcdH1cbiBcbiBcdGlmIChoZWFkZXJzLVx1MDAzZWwyX2tleS5uX3Byb3RvID09IGh0b25zKEVUSF9QX0lQVjYpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIChmbGFncyBcdTAwMjYgKElDRV9UQ19GTFdSX0ZJRUxEX0lQX1RPUyB8IElDRV9UQ19GTFdSX0ZJRUxEX0lQX1RUTCkpKSB7XG4mIzQzO1x0ICAgIChmbGFncyBcdTAwMjYgKElDRV9UQ19GTFdSX0ZJRUxEX0lQX1RPUyB8IElDRV9UQ19GTFdSX0ZJRUxEX0lQX1RUTCB8XG4mIzQzO1x0XHQgICAgICBJQ0VfVENfRkxXUl9GSUVMRF9JUF9QUk9UTykpKSB7XG4gXHRcdHN0cnVjdCBpY2VfaXB2Nl9oZHIgKmhkcl9oLCAqaGRyX207XG4gXG4gXHRcdGhkcl9oID0gXHUwMDI2bGlzdFtpXS5oX3UuaXB2Nl9oZHI7XG5AQCAtNTkyLDYgJiM0Mzs2MDIsMTEgQEAgaWNlX3RjX2ZpbGxfcnVsZXMoc3RydWN0IGljZV9odyAqaHcsIHUzMiBmbGFncyxcbiBcdFx0XHRoZHJfbS1cdTAwM2Vob3BfbGltaXQgPSBoZWFkZXJzLVx1MDAzZWwzX21hc2sudHRsO1xuIFx0XHR9XG4gXG4mIzQzO1x0XHRpZiAoZmxhZ3MgXHUwMDI2IElDRV9UQ19GTFdSX0ZJRUxEX0lQX1BST1RPKSB7XG4mIzQzO1x0XHRcdGhkcl9oLVx1MDAzZW5leHRfaGRyID0gaGVhZGVycy1cdTAwM2VsM19rZXkuaXBfcHJvdG87XG4mIzQzO1x0XHRcdGhkcl9tLVx1MDAzZW5leHRfaGRyID0gaGVhZGVycy1cdTAwM2VsM19tYXNrLmlwX3Byb3RvO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0aSYjNDM7JiM0Mzs7XG4gXHR9XG4gXG5AQCAtMTczNyw2ICYjNDM7MTc1Miw5IEBAIGljZV9wYXJzZV9jbHNfZmxvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXJfZGV2LCBzdHJ1Y3QgaWNlX3ZzaSAqdnNpLFxuIFx0XHRoZWFkZXJzLVx1MDAzZWwyX2tleS5uX3Byb3RvID0gY3B1X3RvX2JlMTYobl9wcm90b19rZXkpO1xuIFx0XHRoZWFkZXJzLVx1MDAzZWwyX21hc2subl9wcm90byA9IGNwdV90b19iZTE2KG5fcHJvdG9fbWFzayk7XG4gXHRcdGhlYWRlcnMtXHUwMDNlbDNfa2V5LmlwX3Byb3RvID0gbWF0Y2gua2V5LVx1MDAzZWlwX3Byb3RvO1xuJiM0MztcdFx0aGVhZGVycy1cdTAwM2VsM19tYXNrLmlwX3Byb3RvID0gbWF0Y2gubWFzay1cdTAwM2VpcF9wcm90bztcbiYjNDM7XHRcdGlmIChtYXRjaC5tYXNrLVx1MDAzZWlwX3Byb3RvKVxuJiM0MztcdFx0XHRmbHRyLVx1MDAzZWZsYWdzIHw9IElDRV9UQ19GTFdSX0ZJRUxEX0lQX1BST1RPO1xuIFx0fVxuIFxuIFx0aWYgKGZsb3dfcnVsZV9tYXRjaF9rZXkocnVsZSwgRkxPV19ESVNTRUNUT1JfS0VZX0VUSF9BRERSUykpIHtcbkBAIC0xOTEwLDYgJiM0MzsxOTI4LDE5IEBAIGljZV9wYXJzZV9jbHNfZmxvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXJfZGV2LCBzdHJ1Y3QgaWNlX3ZzaSAqdnNpLFxuIFx0XHR9XG4gXHR9XG4gXG4mIzQzO1x0aWYgKGZsdHItXHUwMDNlZmxhZ3MgXHUwMDI2IChJQ0VfVENfRkxXUl9GSUVMRF9ERVNUX0w0X1BPUlQgfFxuJiM0MztcdFx0XHQgICBJQ0VfVENfRkxXUl9GSUVMRF9TUkNfTDRfUE9SVCB8XG4mIzQzO1x0XHRcdCAgIElDRV9UQ19GTFdSX0ZJRUxEX0wyVFBWM19TRVNTSUQpKVxuJiM0MztcdFx0Zmx0ci1cdTAwM2VmbGFncyBcdTAwMjY9IH5JQ0VfVENfRkxXUl9GSUVMRF9JUF9QUk9UTztcbiYjNDM7XG4mIzQzO1x0aWYgKChmbHRyLVx1MDAzZWZsYWdzIFx1MDAyNiBJQ0VfVENfRkxXUl9GSUVMRF9JUF9QUk9UTykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGhlYWRlcnMtXHUwMDNlbDJfa2V5Lm5fcHJvdG8gIT0gaHRvbnMoRVRIX1BfSVApIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBoZWFkZXJzLVx1MDAzZWwyX2tleS5uX3Byb3RvICE9IGh0b25zKEVUSF9QX0lQVjYpKSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZmx0ci1cdTAwM2VleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7SVAgcHJvdG9jb2wgbWF0Y2ggaXMgbm90IHN1cHBvcnRlZCB3aXRoIEdUUCBvciBQUFBvRVwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qIEluZ3Jlc3MgZmlsdGVyIG9uIHJlcHJlc2VudG9yIHJlc3VsdHMgaW4gYW4gZWdyZXNzIGZpbHRlciBpbiBIV1xuIFx0ICogYW5kIHZpY2UgdmVyc2FcbiBcdCAqL1xuQEAgLTIyMzgsNiAmIzQzOzIyNjksMTEyIEBAIGljZV9maW5kX3RjX2Zsb3dlcl9mbHRyKHN0cnVjdCBpY2VfcGYgKnBmLCB1bnNpZ25lZCBsb25nIGNvb2tpZSlcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGljZV90Y19mbHRyX2lzX2Ryb3AgLSBjaGVjayBpZiBhIGZpbHRlciBjYXJyaWVzIGEgZHJvcCBhY3Rpb25cbiYjNDM7ICogQGNsc19mbG93ZXI6IG9mZmxvYWQgcmVxdWVzdCBkZXNjcmliaW5nIHRoZSBmaWx0ZXJcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIGFueSBhY3Rpb24gb2YgdGhlIGZpbHRlciBpcyBhIGRyb3AsIGZhbHNlIG90aGVyd2lzZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIGljZV90Y19mbHRyX2lzX2Ryb3Aoc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZmxvd19ydWxlICpydWxlID0gZmxvd19jbHNfb2ZmbG9hZF9mbG93X3J1bGUoY2xzX2Zsb3dlcik7XG4mIzQzO1x0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICphY3Q7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGlmIChjbHNfZmxvd2VyLVx1MDAzZWNsYXNzaWQpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGZsb3dfYWN0aW9uX2Zvcl9lYWNoKGksIGFjdCwgXHUwMDI2cnVsZS1cdTAwM2VhY3Rpb24pXG4mIzQzO1x0XHRpZiAoYWN0LVx1MDAzZWlkID09IEZMT1dfQUNUSU9OX0RST1ApXG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBpY2VfdGNfdW50cmFja19zd19mbHRyIC0gZm9yZ2V0IGEgdHJhY2tlZCBzb2Z0d2FyZS1vbmx5IGZpbHRlclxuJiM0MzsgKiBAcGY6IHBvaW50ZXIgdG8gUEYgc3RydWN0dXJlXG4mIzQzOyAqIEBjb29raWU6IHVuaXF1ZSBmaWx0ZXIgaWRlbnRpZmllciBmcm9tIHRoZSBvZmZsb2FkIHJlcXVlc3RcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIHRoZSBmaWx0ZXIgd2FzIHRyYWNrZWQsIGZhbHNlIG90aGVyd2lzZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIGljZV90Y191bnRyYWNrX3N3X2ZsdHIoc3RydWN0IGljZV9wZiAqcGYsIHVuc2lnbmVkIGxvbmcgY29va2llKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGljZV90Y19zd19mbHRyICpzd19mbHRyO1xuJiM0MztcbiYjNDM7XHRobGlzdF9mb3JfZWFjaF9lbnRyeShzd19mbHRyLCBcdTAwMjZwZi1cdTAwM2V0Y19zd19mbHRyX2xpc3QsIG5vZGUpIHtcbiYjNDM7XHRcdGlmIChzd19mbHRyLVx1MDAzZWNvb2tpZSAhPSBjb29raWUpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGhsaXN0X2RlbChcdTAwMjZzd19mbHRyLVx1MDAzZW5vZGUpO1xuJiM0MztcdFx0a2ZyZWUoc3dfZmx0cik7XG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGljZV90Y190cmFja19zd19mbHRyIC0gcmVtZW1iZXIgYSBmaWx0ZXIgdGhhdCB3YXMgbm90IG9mZmxvYWRlZFxuJiM0MzsgKiBAcGY6IHBvaW50ZXIgdG8gUEYgc3RydWN0dXJlXG4mIzQzOyAqIEBmaWx0ZXJfZGV2OiBkZXZpY2UgdGhlIGZpbHRlciB3YXMgcmVxdWVzdGVkIG9uXG4mIzQzOyAqIEBjbHNfZmxvd2VyOiBvZmZsb2FkIHJlcXVlc3QgZGVzY3JpYmluZyB0aGUgZmlsdGVyXG4mIzQzOyAqIEBkaXJlY3Rpb246IGJsb2NrIGRpcmVjdGlvbiB0aGUgZmlsdGVyIHdhcyByZXF1ZXN0ZWQgZm9yXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBpY2VfdGNfdHJhY2tfc3dfZmx0cihzdHJ1Y3QgaWNlX3BmICpwZixcbiYjNDM7XHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlcl9kZXYsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvd2VyLFxuJiM0MztcdFx0XHRcdCBlbnVtIGljZV9lc3dpdGNoX2ZsdHJfZGlyZWN0aW9uIGRpcmVjdGlvbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpY2VfdGNfc3dfZmx0ciAqc3dfZmx0cjtcbiYjNDM7XG4mIzQzO1x0aGxpc3RfZm9yX2VhY2hfZW50cnkoc3dfZmx0ciwgXHUwMDI2cGYtXHUwMDNldGNfc3dfZmx0cl9saXN0LCBub2RlKVxuJiM0MztcdFx0aWYgKHN3X2ZsdHItXHUwMDNlY29va2llID09IGNsc19mbG93ZXItXHUwMDNlY29va2llKVxuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHN3X2ZsdHIgPSBremFsbG9jX29iaigqc3dfZmx0cik7XG4mIzQzO1x0aWYgKCFzd19mbHRyKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzd19mbHRyLVx1MDAzZWNvb2tpZSA9IGNsc19mbG93ZXItXHUwMDNlY29va2llO1xuJiM0MztcdHN3X2ZsdHItXHUwMDNlZmlsdGVyX2RldiA9IGZpbHRlcl9kZXY7XG4mIzQzO1x0c3dfZmx0ci1cdTAwM2VwcmlvID0gY2xzX2Zsb3dlci1cdTAwM2Vjb21tb24ucHJpbztcbiYjNDM7XHRzd19mbHRyLVx1MDAzZWRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiYjNDM7XHRzd19mbHRyLVx1MDAzZWlzX2Ryb3AgPSBpY2VfdGNfZmx0cl9pc19kcm9wKGNsc19mbG93ZXIpO1xuJiM0MztcdGhsaXN0X2FkZF9oZWFkKFx1MDAyNnN3X2ZsdHItXHUwMDNlbm9kZSwgXHUwMDI2cGYtXHUwMDNldGNfc3dfZmx0cl9saXN0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGljZV90Y19kcm9wX2J5cGFzc2VzX2ZsdHIgLSBjaGVjayBpZiBhIGRyb3AgcnVsZSB3b3VsZCBieXBhc3MgYSBmaWx0ZXJcbiYjNDM7ICogQHBmOiBwb2ludGVyIHRvIFBGIHN0cnVjdHVyZVxuJiM0MzsgKiBAZmlsdGVyX2RldjogZGV2aWNlIHRoZSBkcm9wIGZpbHRlciBpcyByZXF1ZXN0ZWQgb25cbiYjNDM7ICogQHByaW86IFRDIHByaW9yaXR5IG9mIHRoZSBkcm9wIGZpbHRlclxuJiM0MzsgKiBAZGlyZWN0aW9uOiBibG9jayBkaXJlY3Rpb24gb2YgdGhlIGRyb3AgZmlsdGVyXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBzdWNoIGEgZmlsdGVyIGV4aXN0cywgZmFsc2Ugb3RoZXJ3aXNlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGJvb2xcbiYjNDM7aWNlX3RjX2Ryb3BfYnlwYXNzZXNfZmx0cihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlcl9kZXYsXG4mIzQzO1x0XHRcdCAgdTMyIHByaW8sIGVudW0gaWNlX2Vzd2l0Y2hfZmx0cl9kaXJlY3Rpb24gZGlyZWN0aW9uKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGljZV90Y19mbG93ZXJfZmx0ciAqZmx0cjtcbiYjNDM7XHRzdHJ1Y3QgaWNlX3RjX3N3X2ZsdHIgKnN3X2ZsdHI7XG4mIzQzO1xuJiM0MztcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KHN3X2ZsdHIsIFx1MDAyNnBmLVx1MDAzZXRjX3N3X2ZsdHJfbGlzdCwgbm9kZSlcbiYjNDM7XHRcdGlmIChzd19mbHRyLVx1MDAzZWZpbHRlcl9kZXYgPT0gZmlsdGVyX2RldiBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBzd19mbHRyLVx1MDAzZWRpcmVjdGlvbiA9PSBkaXJlY3Rpb24gXHUwMDI2XHUwMDI2IHN3X2ZsdHItXHUwMDNlcHJpbyBcdTAwM2MgcHJpbyBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhc3dfZmx0ci1cdTAwM2Vpc19kcm9wKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0aGxpc3RfZm9yX2VhY2hfZW50cnkoZmx0ciwgXHUwMDI2cGYtXHUwMDNldGNfZmxvd2VyX2ZsdHJfbGlzdCwgdGNfZmxvd2VyX25vZGUpXG4mIzQzO1x0XHRpZiAoZmx0ci1cdTAwM2VmaWx0ZXJfZGV2ID09IGZpbHRlcl9kZXYgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgZmx0ci1cdTAwM2VkaXJlY3Rpb24gPT0gZGlyZWN0aW9uIFx1MDAyNlx1MDAyNiBmbHRyLVx1MDAzZXByaW8gXHUwMDNjIHByaW8gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgZmx0ci1cdTAwM2VhY3Rpb24uZmx0cl9hY3QgIT0gSUNFX0RST1BfUEFDS0VUKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGljZV9hZGRfY2xzX2Zsb3dlciAtIGFkZCBUQyBmbG93ZXIgZmlsdGVyc1xuICAqIEBuZXRkZXY6IFBvaW50ZXIgdG8gZmlsdGVyIGRldmljZVxuQEAgLTIyNTMsMTQgJiM0MzsyMzkwLDI0IEBAIGludCBpY2VfYWRkX2Nsc19mbG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGljZV92c2kgKnZzaSxcbiB7XG4gXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBjbHNfZmxvd2VyLVx1MDAzZWNvbW1vbi5leHRhY2s7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqdnNpX25ldGRldiA9IHZzaS1cdTAwM2VuZXRkZXY7XG4mIzQzO1x0ZW51bSBpY2VfZXN3aXRjaF9mbHRyX2RpcmVjdGlvbiBkaXJlY3Rpb247XG4gXHRzdHJ1Y3QgaWNlX3RjX2Zsb3dlcl9mbHRyICpmbHRyO1xuIFx0c3RydWN0IGljZV9wZiAqcGYgPSB2c2ktXHUwMDNlYmFjaztcbiYjNDM7XHRib29sIHRyYWNrX3N3X2ZsdHJzO1xuIFx0aW50IGVycjtcbiBcbi1cdGlmIChpY2VfaXNfcmVzZXRfaW5fcHJvZ3Jlc3MocGYtXHUwMDNlc3RhdGUpKVxuLVx0XHRyZXR1cm4gLUVCVVNZO1xuLVx0aWYgKHRlc3RfYml0KElDRV9GTEFHX0ZXX0xMRFBfQUdFTlQsIHBmLVx1MDAzZWZsYWdzKSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0ZGlyZWN0aW9uID0gaW5ncmVzcyA/IElDRV9FU1dJVENIX0ZMVFJfSU5HUkVTUyA6XG4mIzQzO1x0XHRcdCAgICAgIElDRV9FU1dJVENIX0ZMVFJfRUdSRVNTO1xuJiM0MztcdHRyYWNrX3N3X2ZsdHJzID0gIWljZV9pc19lc3dpdGNoX21vZGVfc3dpdGNoZGV2KHBmKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGljZV9pc19yZXNldF9pbl9wcm9ncmVzcyhwZi1cdTAwM2VzdGF0ZSkpIHtcbiYjNDM7XHRcdGVyciA9IC1FQlVTWTtcbiYjNDM7XHRcdGdvdG8gdHJhY2tfc3c7XG4mIzQzO1x0fVxuJiM0MztcdGlmICh0ZXN0X2JpdChJQ0VfRkxBR19GV19MTERQX0FHRU5ULCBwZi1cdTAwM2VmbGFncykpIHtcbiYjNDM7XHRcdGVyciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIHRyYWNrX3N3O1xuJiM0MztcdH1cbiBcbiBcdGlmIChpY2VfaXNfcG9ydF9yZXByX25ldGRldihuZXRkZXYpKVxuIFx0XHR2c2lfbmV0ZGV2ID0gbmV0ZGV2O1xuQEAgLTIyNzMsNyAmIzQzOzI0MjAsOCBAQCBpbnQgaWNlX2FkZF9jbHNfZmxvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBpY2VfdnNpICp2c2ksXG4gXHRcdCAqL1xuIFx0XHRpZiAobmV0ZGV2ID09IHZzaV9uZXRkZXYpXG4gXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7Y2FuJiMzOTt0IGFwcGx5IFRDIGZsb3dlciBmaWx0ZXJzLCB0dXJuIE9OIGh3LXRjLW9mZmxvYWQgYW5kIHRyeSBhZ2FpblwmIzM0Oyk7XG4tXHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0ZXJyID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gdHJhY2tfc3c7XG4gXHR9XG4gXG4gXHQvKiBhdm9pZCBkdXBsaWNhdGUgZW50cmllcywgaWYgZXhpc3RzIC0gcmV0dXJuIGVycm9yICovXG5AQCAtMjI4MywxNCAmIzQzOzI0MzEsMzIgQEAgaW50IGljZV9hZGRfY2xzX2Zsb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgaWNlX3ZzaSAqdnNpLFxuIFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcdH1cbiBcbiYjNDM7XHRpZiAodHJhY2tfc3dfZmx0cnMgXHUwMDI2XHUwMDI2ICFjbHNfZmxvd2VyLVx1MDAzZWNvbW1vbi5za2lwX3N3IFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBpY2VfdGNfZmx0cl9pc19kcm9wKGNsc19mbG93ZXIpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBpY2VfdGNfZHJvcF9ieXBhc3Nlc19mbHRyKHBmLCBuZXRkZXYsIGNsc19mbG93ZXItXHUwMDNlY29tbW9uLnByaW8sXG4mIzQzO1x0XHRcdFx0ICAgICAgZGlyZWN0aW9uKSkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDtEcm9wIGZpbHRlciBub3Qgb2ZmbG9hZGVkIGJlY2F1c2UgaXQgd291bGQgYnlwYXNzIGEgaGlnaGVyIHByaW9yaXR5IGZpbHRlclwmIzM0Oyk7XG4mIzQzO1x0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdGdvdG8gdHJhY2tfc3c7XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qIHByZXAgYW5kIGFkZCBUQy1mbG93ZXIgZmlsdGVyIGluIEhXICovXG4gXHRlcnIgPSBpY2VfYWRkX3RjX2ZsdHIobmV0ZGV2LCB2c2ksIGNsc19mbG93ZXIsIFx1MDAyNmZsdHIsIGluZ3Jlc3MpO1xuIFx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdGdvdG8gdHJhY2tfc3c7XG4mIzQzO1xuJiM0MztcdGZsdHItXHUwMDNlZmlsdGVyX2RldiA9IG5ldGRldjtcbiYjNDM7XHRmbHRyLVx1MDAzZXByaW8gPSBjbHNfZmxvd2VyLVx1MDAzZWNvbW1vbi5wcmlvO1xuIFxuIFx0LyogYWRkIGZpbHRlciBpbnRvIGFuIG9yZGVyZWQgbGlzdCAqL1xuIFx0aGxpc3RfYWRkX2hlYWQoXHUwMDI2Zmx0ci1cdTAwM2V0Y19mbG93ZXJfbm9kZSwgXHUwMDI2cGYtXHUwMDNldGNfZmxvd2VyX2ZsdHJfbGlzdCk7XG4gXHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO3RyYWNrX3N3OlxuJiM0MztcdGlmICh0cmFja19zd19mbHRycyBcdTAwMjZcdTAwMjYgIWNsc19mbG93ZXItXHUwMDNlY29tbW9uLnNraXBfc3cpXG4mIzQzO1x0XHRpY2VfdGNfdHJhY2tfc3dfZmx0cihwZiwgbmV0ZGV2LCBjbHNfZmxvd2VyLCBkaXJlY3Rpb24pO1xuJiM0MztcdHJldHVybiBlcnI7XG4gfVxuIFxuIC8qKlxuQEAgLTIzMDUsNiAmIzQzOzI0NzEsOSBAQCBpY2VfZGVsX2Nsc19mbG93ZXIoc3RydWN0IGljZV92c2kgKnZzaSwgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpXG4gXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHZzaS1cdTAwM2ViYWNrO1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHRpZiAoaWNlX3RjX3VudHJhY2tfc3dfZmx0cihwZiwgY2xzX2Zsb3dlci1cdTAwM2Vjb29raWUpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuIFx0LyogZmluZCBmaWx0ZXIgKi9cbiBcdGZsdHIgPSBpY2VfZmluZF90Y19mbG93ZXJfZmx0cihwZiwgY2xzX2Zsb3dlci1cdTAwM2Vjb29raWUpO1xuIFx0aWYgKCFmbHRyKSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90Y19saWIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdGNfbGliLmhcbmluZGV4IDhhM2FiMmYyMmFmOWIuLjM3ZDZmNDEwMGVjZmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RjX2xpYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RjX2xpYi5oXG5AQCAtMzgsNiAmIzQzOzM4LDcgQEBcbiAjZGVmaW5lIElDRV9UQ19GTFdSX0ZJRUxEX0NWTEFOX1BSSU9cdFx0QklUKDI4KVxuICNkZWZpbmUgSUNFX1RDX0ZMV1JfRklFTERfVkxBTl9UUElEXHRcdEJJVCgyOSlcbiAjZGVmaW5lIElDRV9UQ19GTFdSX0ZJRUxEX1BGQ1BfT1BUU1x0XHRCSVQoMzApXG4mIzQzOyNkZWZpbmUgSUNFX1RDX0ZMV1JfRklFTERfSVBfUFJPVE9cdFx0QklUKDMxKVxuIFxuICNkZWZpbmUgSUNFX1RDX0ZMT1dFUl9NQVNLXzMyICAgMHhGRkZGRkZGRlxuIFxuQEAgLTEzOCwxMiAmIzQzOzEzOSwzMyBAQCBlbnVtIGljZV9lc3dpdGNoX2ZsdHJfZGlyZWN0aW9uIHtcbiBcdElDRV9FU1dJVENIX0ZMVFJfRUdSRVNTLFxuIH07XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgaWNlX3RjX3N3X2ZsdHIgLSBmaWx0ZXIgcHJlc2VudGVkIHRvIHRoZSBkcml2ZXIgYnV0IG5vdCBvZmZsb2FkZWRcbiYjNDM7ICogQG5vZGU6IG5vZGUgaW4gdGhlIHBmLVx1MDAzZXRjX3N3X2ZsdHJfbGlzdFxuJiM0MzsgKiBAY29va2llOiB1bmlxdWUgZmlsdGVyIGlkZW50aWZpZXIgZnJvbSB0aGUgb2ZmbG9hZCByZXF1ZXN0XG4mIzQzOyAqIEBmaWx0ZXJfZGV2OiBkZXZpY2UgdGhlIGZpbHRlciB3YXMgcmVxdWVzdGVkIG9uXG4mIzQzOyAqIEBwcmlvOiBUQyBwcmlvcml0eSwgbG93ZXIgdmFsdWUgaXMgZXZhbHVhdGVkIGZpcnN0XG4mIzQzOyAqIEBkaXJlY3Rpb246IGJsb2NrIGRpcmVjdGlvbiB0aGUgZmlsdGVyIHdhcyByZXF1ZXN0ZWQgZm9yXG4mIzQzOyAqIEBpc19kcm9wOiB0aGUgZmlsdGVyIGNhcnJpZXMgYSBkcm9wIGFjdGlvblxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IGljZV90Y19zd19mbHRyIHtcbiYjNDM7XHRzdHJ1Y3QgaGxpc3Rfbm9kZSBub2RlO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgY29va2llO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXJfZGV2O1xuJiM0MztcdHUzMiBwcmlvO1xuJiM0MztcdGVudW0gaWNlX2Vzd2l0Y2hfZmx0cl9kaXJlY3Rpb24gZGlyZWN0aW9uO1xuJiM0MztcdGJvb2wgaXNfZHJvcDtcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IGljZV90Y19mbG93ZXJfZmx0ciB7XG4gXHRzdHJ1Y3QgaGxpc3Rfbm9kZSB0Y19mbG93ZXJfbm9kZTtcbiBcbiBcdC8qIGNvb2tpZSBiZWNvbWVzIGZpbHRlcl9ydWxlX2lkIGlmIHJ1bGUgaXMgYWRkZWQgc3VjY2Vzc2Z1bGx5ICovXG4gXHR1bnNpZ25lZCBsb25nIGNvb2tpZTtcbiBcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqZmlsdGVyX2RldjtcbiYjNDM7XHR1MzIgcHJpbztcbiYjNDM7XG4gXHQvKiBhZGRfYWR2X3J1bGUgcmV0dXJucyBpbmZvcm1hdGlvbiBsaWtlIHJlY2lwZSBJRCwgcnVsZV9pZC4gU3RvcmVcbiBcdCAqIHRob3NlIHZhbHVlcyBzaW5jZSB0aGV5IGFyZSBuZWVkZWQgdG8gcmVtb3ZlIGFkdmFuY2VkIHJ1bGVcbiBcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE3OjU3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBFdGhlcm5ldCBFODAwIFNlcmllcyBkcml2ZXIgKGljZSksIHNwZWNpZmljYWxseSBUQyBmbG93ZXIgZmlsdGVyIG9mZmxvYWQgbG9naWMuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIChJbnRlbCBFODEwL0U4MDAgTklDcykgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS92aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwOTkyMzc1MGJhZmM1NzBhYzRiM2ZiNTYxZTA2MTM1YzQ4YTA4MWQ1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMTAgMTc6NTc6MjYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmgKaW5kZXggZGIzYzcwMTVjNTZjNC4uNmM1OTZlNWEzMTUxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaApAQCAtNjQzLDYgJiM0Mzs2NDMsNyBAQCBzdHJ1Y3QgaWNlX3BmIHsKIAkgKi8KIAl1MTYgbnVtX2RtYWNfY2hubF9mbHRyczsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCB0Y19mbG93ZXJfZmx0cl9saXN0OwomIzQzOwlzdHJ1Y3QgaGxpc3RfaGVhZCB0Y19zd19mbHRyX2xpc3Q7CiAKIAl1NjQgc3VwcG9ydGVkX3J4ZGlkczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90Y19saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdGNfbGliLmMKaW5kZXggZDIwMzU3YzA0MTI3My4uN2NmYzg5NDFiN2JhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90Y19saWIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RjX2xpYi5jCkBAIC03OCw3ICYjNDM7NzgsOCBAQCBzdGF0aWMgaW50IGljZV90Y19jb3VudF9sa3Vwcyh1MzIgZmxhZ3MsIHN0cnVjdCBpY2VfdGNfZmxvd2VyX2ZsdHIgKmZsdHIpCiAJCSAgICAgSUNFX1RDX0ZMV1JfRklFTERfREVTVF9JUFY2IHwgSUNFX1RDX0ZMV1JfRklFTERfU1JDX0lQVjYpKQogCQlsa3Vwc19jbnQmIzQzOyYjNDM7OwogCi0JaWYgKGZsYWdzICZhbXA7IChJQ0VfVENfRkxXUl9GSUVMRF9JUF9UT1MgfCBJQ0VfVENfRkxXUl9GSUVMRF9JUF9UVEwpKQomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgKElDRV9UQ19GTFdSX0ZJRUxEX0lQX1RPUyB8IElDRV9UQ19GTFdSX0ZJRUxEX0lQX1RUTCB8CiYjNDM7CQkgICAgIElDRV9UQ19GTFdSX0ZJRUxEX0lQX1BST1RPKSkKIAkJbGt1cHNfY250JiM0MzsmIzQzOzsKIAogCS8qIGFyZSBMMlRQdjMgb3B0aW9ucyBzcGVjaWZpZWQ/ICovCkBAIC01NTIsNyAmIzQzOzU1Myw4IEBAIGljZV90Y19maWxsX3J1bGVzKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgZmxhZ3MsCiAJfQogCiAJaWYgKGhlYWRlcnMtJmd0O2wyX2tleS5uX3Byb3RvID09IGh0b25zKEVUSF9QX0lQKSAmYW1wOyZhbXA7Ci0JICAgIChmbGFncyAmYW1wOyAoSUNFX1RDX0ZMV1JfRklFTERfSVBfVE9TIHwgSUNFX1RDX0ZMV1JfRklFTERfSVBfVFRMKSkpIHsKJiM0MzsJICAgIChmbGFncyAmYW1wOyAoSUNFX1RDX0ZMV1JfRklFTERfSVBfVE9TIHwgSUNFX1RDX0ZMV1JfRklFTERfSVBfVFRMIHwKJiM0MzsJCSAgICAgIElDRV9UQ19GTFdSX0ZJRUxEX0lQX1BST1RPKSkpIHsKIAkJbGlzdFtpXS50eXBlID0gaWNlX3Byb3RvX3R5cGVfZnJvbV9pcHY0KGlubmVyKTsKIAogCQlpZiAoZmxhZ3MgJmFtcDsgSUNFX1RDX0ZMV1JfRklFTERfSVBfVE9TKSB7CkBAIC01NjcsMTEgJiM0Mzs1NjksMTkgQEAgaWNlX3RjX2ZpbGxfcnVsZXMoc3RydWN0IGljZV9odyAqaHcsIHUzMiBmbGFncywKIAkJCQloZWFkZXJzLSZndDtsM19tYXNrLnR0bDsKIAkJfQogCiYjNDM7CQlpZiAoZmxhZ3MgJmFtcDsgSUNFX1RDX0ZMV1JfRklFTERfSVBfUFJPVE8pIHsKJiM0MzsJCQlsaXN0W2ldLmhfdS5pcHY0X2hkci5wcm90b2NvbCA9CiYjNDM7CQkJCWhlYWRlcnMtJmd0O2wzX2tleS5pcF9wcm90bzsKJiM0MzsJCQlsaXN0W2ldLm1fdS5pcHY0X2hkci5wcm90b2NvbCA9CiYjNDM7CQkJCWhlYWRlcnMtJmd0O2wzX21hc2suaXBfcHJvdG87CiYjNDM7CQl9CiYjNDM7CiAJCWkmIzQzOyYjNDM7OwogCX0KIAogCWlmIChoZWFkZXJzLSZndDtsMl9rZXkubl9wcm90byA9PSBodG9ucyhFVEhfUF9JUFY2KSAmYW1wOyZhbXA7Ci0JICAgIChmbGFncyAmYW1wOyAoSUNFX1RDX0ZMV1JfRklFTERfSVBfVE9TIHwgSUNFX1RDX0ZMV1JfRklFTERfSVBfVFRMKSkpIHsKJiM0MzsJICAgIChmbGFncyAmYW1wOyAoSUNFX1RDX0ZMV1JfRklFTERfSVBfVE9TIHwgSUNFX1RDX0ZMV1JfRklFTERfSVBfVFRMIHwKJiM0MzsJCSAgICAgIElDRV9UQ19GTFdSX0ZJRUxEX0lQX1BST1RPKSkpIHsKIAkJc3RydWN0IGljZV9pcHY2X2hkciAqaGRyX2gsICpoZHJfbTsKIAogCQloZHJfaCA9ICZhbXA7bGlzdFtpXS5oX3UuaXB2Nl9oZHI7CkBAIC01OTIsNiAmIzQzOzYwMiwxMSBAQCBpY2VfdGNfZmlsbF9ydWxlcyhzdHJ1Y3QgaWNlX2h3ICpodywgdTMyIGZsYWdzLAogCQkJaGRyX20tJmd0O2hvcF9saW1pdCA9IGhlYWRlcnMtJmd0O2wzX21hc2sudHRsOwogCQl9CiAKJiM0MzsJCWlmIChmbGFncyAmYW1wOyBJQ0VfVENfRkxXUl9GSUVMRF9JUF9QUk9UTykgewomIzQzOwkJCWhkcl9oLSZndDtuZXh0X2hkciA9IGhlYWRlcnMtJmd0O2wzX2tleS5pcF9wcm90bzsKJiM0MzsJCQloZHJfbS0mZ3Q7bmV4dF9oZHIgPSBoZWFkZXJzLSZndDtsM19tYXNrLmlwX3Byb3RvOwomIzQzOwkJfQomIzQzOwogCQlpJiM0MzsmIzQzOzsKIAl9CiAKQEAgLTE3MzcsNiAmIzQzOzE3NTIsOSBAQCBpY2VfcGFyc2VfY2xzX2Zsb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZmlsdGVyX2Rldiwgc3RydWN0IGljZV92c2kgKnZzaSwKIAkJaGVhZGVycy0mZ3Q7bDJfa2V5Lm5fcHJvdG8gPSBjcHVfdG9fYmUxNihuX3Byb3RvX2tleSk7CiAJCWhlYWRlcnMtJmd0O2wyX21hc2subl9wcm90byA9IGNwdV90b19iZTE2KG5fcHJvdG9fbWFzayk7CiAJCWhlYWRlcnMtJmd0O2wzX2tleS5pcF9wcm90byA9IG1hdGNoLmtleS0mZ3Q7aXBfcHJvdG87CiYjNDM7CQloZWFkZXJzLSZndDtsM19tYXNrLmlwX3Byb3RvID0gbWF0Y2gubWFzay0mZ3Q7aXBfcHJvdG87CiYjNDM7CQlpZiAobWF0Y2gubWFzay0mZ3Q7aXBfcHJvdG8pCiYjNDM7CQkJZmx0ci0mZ3Q7ZmxhZ3MgfD0gSUNFX1RDX0ZMV1JfRklFTERfSVBfUFJPVE87CiAJfQogCiAJaWYgKGZsb3dfcnVsZV9tYXRjaF9rZXkocnVsZSwgRkxPV19ESVNTRUNUT1JfS0VZX0VUSF9BRERSUykpIHsKQEAgLTE5MTAsNiAmIzQzOzE5MjgsMTkgQEAgaWNlX3BhcnNlX2Nsc19mbG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlcl9kZXYsIHN0cnVjdCBpY2VfdnNpICp2c2ksCiAJCX0KIAl9CiAKJiM0MzsJaWYgKGZsdHItJmd0O2ZsYWdzICZhbXA7IChJQ0VfVENfRkxXUl9GSUVMRF9ERVNUX0w0X1BPUlQgfAomIzQzOwkJCSAgIElDRV9UQ19GTFdSX0ZJRUxEX1NSQ19MNF9QT1JUIHwKJiM0MzsJCQkgICBJQ0VfVENfRkxXUl9GSUVMRF9MMlRQVjNfU0VTU0lEKSkKJiM0MzsJCWZsdHItJmd0O2ZsYWdzICZhbXA7PSB+SUNFX1RDX0ZMV1JfRklFTERfSVBfUFJPVE87CiYjNDM7CiYjNDM7CWlmICgoZmx0ci0mZ3Q7ZmxhZ3MgJmFtcDsgSUNFX1RDX0ZMV1JfRklFTERfSVBfUFJPVE8pICZhbXA7JmFtcDsKJiM0MzsJICAgIGhlYWRlcnMtJmd0O2wyX2tleS5uX3Byb3RvICE9IGh0b25zKEVUSF9QX0lQKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBoZWFkZXJzLSZndDtsMl9rZXkubl9wcm90byAhPSBodG9ucyhFVEhfUF9JUFY2KSkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGZsdHItJmd0O2V4dGFjaywKJiM0MzsJCQkJICAgJiMzNDtJUCBwcm90b2NvbCBtYXRjaCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggR1RQIG9yIFBQUG9FJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiAJLyogSW5ncmVzcyBmaWx0ZXIgb24gcmVwcmVzZW50b3IgcmVzdWx0cyBpbiBhbiBlZ3Jlc3MgZmlsdGVyIGluIEhXCiAJICogYW5kIHZpY2UgdmVyc2EKIAkgKi8KQEAgLTIyMzgsNiAmIzQzOzIyNjksMTEyIEBAIGljZV9maW5kX3RjX2Zsb3dlcl9mbHRyKHN0cnVjdCBpY2VfcGYgKnBmLCB1bnNpZ25lZCBsb25nIGNvb2tpZSkKIAlyZXR1cm4gTlVMTDsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGljZV90Y19mbHRyX2lzX2Ryb3AgLSBjaGVjayBpZiBhIGZpbHRlciBjYXJyaWVzIGEgZHJvcCBhY3Rpb24KJiM0MzsgKiBAY2xzX2Zsb3dlcjogb2ZmbG9hZCByZXF1ZXN0IGRlc2NyaWJpbmcgdGhlIGZpbHRlcgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIGFueSBhY3Rpb24gb2YgdGhlIGZpbHRlciBpcyBhIGRyb3AsIGZhbHNlIG90aGVyd2lzZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCBpY2VfdGNfZmx0cl9pc19kcm9wKHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvd2VyKQomIzQzO3sKJiM0MzsJc3RydWN0IGZsb3dfcnVsZSAqcnVsZSA9IGZsb3dfY2xzX29mZmxvYWRfZmxvd19ydWxlKGNsc19mbG93ZXIpOwomIzQzOwlzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmFjdDsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWlmIChjbHNfZmxvd2VyLSZndDtjbGFzc2lkKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlmbG93X2FjdGlvbl9mb3JfZWFjaChpLCBhY3QsICZhbXA7cnVsZS0mZ3Q7YWN0aW9uKQomIzQzOwkJaWYgKGFjdC0mZ3Q7aWQgPT0gRkxPV19BQ1RJT05fRFJPUCkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBpY2VfdGNfdW50cmFja19zd19mbHRyIC0gZm9yZ2V0IGEgdHJhY2tlZCBzb2Z0d2FyZS1vbmx5IGZpbHRlcgomIzQzOyAqIEBwZjogcG9pbnRlciB0byBQRiBzdHJ1Y3R1cmUKJiM0MzsgKiBAY29va2llOiB1bmlxdWUgZmlsdGVyIGlkZW50aWZpZXIgZnJvbSB0aGUgb2ZmbG9hZCByZXF1ZXN0CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgdGhlIGZpbHRlciB3YXMgdHJhY2tlZCwgZmFsc2Ugb3RoZXJ3aXNlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIGljZV90Y191bnRyYWNrX3N3X2ZsdHIoc3RydWN0IGljZV9wZiAqcGYsIHVuc2lnbmVkIGxvbmcgY29va2llKQomIzQzO3sKJiM0MzsJc3RydWN0IGljZV90Y19zd19mbHRyICpzd19mbHRyOwomIzQzOwomIzQzOwlobGlzdF9mb3JfZWFjaF9lbnRyeShzd19mbHRyLCAmYW1wO3BmLSZndDt0Y19zd19mbHRyX2xpc3QsIG5vZGUpIHsKJiM0MzsJCWlmIChzd19mbHRyLSZndDtjb29raWUgIT0gY29va2llKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJaGxpc3RfZGVsKCZhbXA7c3dfZmx0ci0mZ3Q7bm9kZSk7CiYjNDM7CQlrZnJlZShzd19mbHRyKTsKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogaWNlX3RjX3RyYWNrX3N3X2ZsdHIgLSByZW1lbWJlciBhIGZpbHRlciB0aGF0IHdhcyBub3Qgb2ZmbG9hZGVkCiYjNDM7ICogQHBmOiBwb2ludGVyIHRvIFBGIHN0cnVjdHVyZQomIzQzOyAqIEBmaWx0ZXJfZGV2OiBkZXZpY2UgdGhlIGZpbHRlciB3YXMgcmVxdWVzdGVkIG9uCiYjNDM7ICogQGNsc19mbG93ZXI6IG9mZmxvYWQgcmVxdWVzdCBkZXNjcmliaW5nIHRoZSBmaWx0ZXIKJiM0MzsgKiBAZGlyZWN0aW9uOiBibG9jayBkaXJlY3Rpb24gdGhlIGZpbHRlciB3YXMgcmVxdWVzdGVkIGZvcgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGljZV90Y190cmFja19zd19mbHRyKHN0cnVjdCBpY2VfcGYgKnBmLAomIzQzOwkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlcl9kZXYsCiYjNDM7CQkJCSBzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqY2xzX2Zsb3dlciwKJiM0MzsJCQkJIGVudW0gaWNlX2Vzd2l0Y2hfZmx0cl9kaXJlY3Rpb24gZGlyZWN0aW9uKQomIzQzO3sKJiM0MzsJc3RydWN0IGljZV90Y19zd19mbHRyICpzd19mbHRyOwomIzQzOwomIzQzOwlobGlzdF9mb3JfZWFjaF9lbnRyeShzd19mbHRyLCAmYW1wO3BmLSZndDt0Y19zd19mbHRyX2xpc3QsIG5vZGUpCiYjNDM7CQlpZiAoc3dfZmx0ci0mZ3Q7Y29va2llID09IGNsc19mbG93ZXItJmd0O2Nvb2tpZSkKJiM0MzsJCQlyZXR1cm47CiYjNDM7CiYjNDM7CXN3X2ZsdHIgPSBremFsbG9jX29iaigqc3dfZmx0cik7CiYjNDM7CWlmICghc3dfZmx0cikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc3dfZmx0ci0mZ3Q7Y29va2llID0gY2xzX2Zsb3dlci0mZ3Q7Y29va2llOwomIzQzOwlzd19mbHRyLSZndDtmaWx0ZXJfZGV2ID0gZmlsdGVyX2RldjsKJiM0MzsJc3dfZmx0ci0mZ3Q7cHJpbyA9IGNsc19mbG93ZXItJmd0O2NvbW1vbi5wcmlvOwomIzQzOwlzd19mbHRyLSZndDtkaXJlY3Rpb24gPSBkaXJlY3Rpb247CiYjNDM7CXN3X2ZsdHItJmd0O2lzX2Ryb3AgPSBpY2VfdGNfZmx0cl9pc19kcm9wKGNsc19mbG93ZXIpOwomIzQzOwlobGlzdF9hZGRfaGVhZCgmYW1wO3N3X2ZsdHItJmd0O25vZGUsICZhbXA7cGYtJmd0O3RjX3N3X2ZsdHJfbGlzdCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGljZV90Y19kcm9wX2J5cGFzc2VzX2ZsdHIgLSBjaGVjayBpZiBhIGRyb3AgcnVsZSB3b3VsZCBieXBhc3MgYSBmaWx0ZXIKJiM0MzsgKiBAcGY6IHBvaW50ZXIgdG8gUEYgc3RydWN0dXJlCiYjNDM7ICogQGZpbHRlcl9kZXY6IGRldmljZSB0aGUgZHJvcCBmaWx0ZXIgaXMgcmVxdWVzdGVkIG9uCiYjNDM7ICogQHByaW86IFRDIHByaW9yaXR5IG9mIHRoZSBkcm9wIGZpbHRlcgomIzQzOyAqIEBkaXJlY3Rpb246IGJsb2NrIGRpcmVjdGlvbiBvZiB0aGUgZHJvcCBmaWx0ZXIKJiM0MzsgKgomIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBzdWNoIGEgZmlsdGVyIGV4aXN0cywgZmFsc2Ugb3RoZXJ3aXNlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sCiYjNDM7aWNlX3RjX2Ryb3BfYnlwYXNzZXNfZmx0cihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlcl9kZXYsCiYjNDM7CQkJICB1MzIgcHJpbywgZW51bSBpY2VfZXN3aXRjaF9mbHRyX2RpcmVjdGlvbiBkaXJlY3Rpb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWNlX3RjX2Zsb3dlcl9mbHRyICpmbHRyOwomIzQzOwlzdHJ1Y3QgaWNlX3RjX3N3X2ZsdHIgKnN3X2ZsdHI7CiYjNDM7CiYjNDM7CWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHN3X2ZsdHIsICZhbXA7cGYtJmd0O3RjX3N3X2ZsdHJfbGlzdCwgbm9kZSkKJiM0MzsJCWlmIChzd19mbHRyLSZndDtmaWx0ZXJfZGV2ID09IGZpbHRlcl9kZXYgJmFtcDsmYW1wOwomIzQzOwkJICAgIHN3X2ZsdHItJmd0O2RpcmVjdGlvbiA9PSBkaXJlY3Rpb24gJmFtcDsmYW1wOyBzd19mbHRyLSZndDtwcmlvICZsdDsgcHJpbyAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIXN3X2ZsdHItJmd0O2lzX2Ryb3ApCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGZsdHIsICZhbXA7cGYtJmd0O3RjX2Zsb3dlcl9mbHRyX2xpc3QsIHRjX2Zsb3dlcl9ub2RlKQomIzQzOwkJaWYgKGZsdHItJmd0O2ZpbHRlcl9kZXYgPT0gZmlsdGVyX2RldiAmYW1wOyZhbXA7CiYjNDM7CQkgICAgZmx0ci0mZ3Q7ZGlyZWN0aW9uID09IGRpcmVjdGlvbiAmYW1wOyZhbXA7IGZsdHItJmd0O3ByaW8gJmx0OyBwcmlvICZhbXA7JmFtcDsKJiM0MzsJCSAgICBmbHRyLSZndDthY3Rpb24uZmx0cl9hY3QgIT0gSUNFX0RST1BfUEFDS0VUKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBpY2VfYWRkX2Nsc19mbG93ZXIgLSBhZGQgVEMgZmxvd2VyIGZpbHRlcnMKICAqIEBuZXRkZXY6IFBvaW50ZXIgdG8gZmlsdGVyIGRldmljZQpAQCAtMjI1MywxNCAmIzQzOzIzOTAsMjQgQEAgaW50IGljZV9hZGRfY2xzX2Zsb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgaWNlX3ZzaSAqdnNpLAogewogCXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IGNsc19mbG93ZXItJmd0O2NvbW1vbi5leHRhY2s7CiAJc3RydWN0IG5ldF9kZXZpY2UgKnZzaV9uZXRkZXYgPSB2c2ktJmd0O25ldGRldjsKJiM0MzsJZW51bSBpY2VfZXN3aXRjaF9mbHRyX2RpcmVjdGlvbiBkaXJlY3Rpb247CiAJc3RydWN0IGljZV90Y19mbG93ZXJfZmx0ciAqZmx0cjsKIAlzdHJ1Y3QgaWNlX3BmICpwZiA9IHZzaS0mZ3Q7YmFjazsKJiM0MzsJYm9vbCB0cmFja19zd19mbHRyczsKIAlpbnQgZXJyOwogCi0JaWYgKGljZV9pc19yZXNldF9pbl9wcm9ncmVzcyhwZi0mZ3Q7c3RhdGUpKQotCQlyZXR1cm4gLUVCVVNZOwotCWlmICh0ZXN0X2JpdChJQ0VfRkxBR19GV19MTERQX0FHRU5ULCBwZi0mZ3Q7ZmxhZ3MpKQotCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJZGlyZWN0aW9uID0gaW5ncmVzcyA/IElDRV9FU1dJVENIX0ZMVFJfSU5HUkVTUyA6CiYjNDM7CQkJICAgICAgSUNFX0VTV0lUQ0hfRkxUUl9FR1JFU1M7CiYjNDM7CXRyYWNrX3N3X2ZsdHJzID0gIWljZV9pc19lc3dpdGNoX21vZGVfc3dpdGNoZGV2KHBmKTsKJiM0MzsKJiM0MzsJaWYgKGljZV9pc19yZXNldF9pbl9wcm9ncmVzcyhwZi0mZ3Q7c3RhdGUpKSB7CiYjNDM7CQllcnIgPSAtRUJVU1k7CiYjNDM7CQlnb3RvIHRyYWNrX3N3OwomIzQzOwl9CiYjNDM7CWlmICh0ZXN0X2JpdChJQ0VfRkxBR19GV19MTERQX0FHRU5ULCBwZi0mZ3Q7ZmxhZ3MpKSB7CiYjNDM7CQllcnIgPSAtRUlOVkFMOwomIzQzOwkJZ290byB0cmFja19zdzsKJiM0MzsJfQogCiAJaWYgKGljZV9pc19wb3J0X3JlcHJfbmV0ZGV2KG5ldGRldikpCiAJCXZzaV9uZXRkZXYgPSBuZXRkZXY7CkBAIC0yMjczLDcgJiM0MzsyNDIwLDggQEAgaW50IGljZV9hZGRfY2xzX2Zsb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgaWNlX3ZzaSAqdnNpLAogCQkgKi8KIAkJaWYgKG5ldGRldiA9PSB2c2lfbmV0ZGV2KQogCQkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgJiMzNDtjYW4mIzM5O3QgYXBwbHkgVEMgZmxvd2VyIGZpbHRlcnMsIHR1cm4gT04gaHctdGMtb2ZmbG9hZCBhbmQgdHJ5IGFnYWluJiMzNDspOwotCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCWVyciA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIHRyYWNrX3N3OwogCX0KIAogCS8qIGF2b2lkIGR1cGxpY2F0ZSBlbnRyaWVzLCBpZiBleGlzdHMgLSByZXR1cm4gZXJyb3IgKi8KQEAgLTIyODMsMTQgJiM0MzsyNDMxLDMyIEBAIGludCBpY2VfYWRkX2Nsc19mbG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGljZV92c2kgKnZzaSwKIAkJcmV0dXJuIC1FRVhJU1Q7CiAJfQogCiYjNDM7CWlmICh0cmFja19zd19mbHRycyAmYW1wOyZhbXA7ICFjbHNfZmxvd2VyLSZndDtjb21tb24uc2tpcF9zdyAmYW1wOyZhbXA7CiYjNDM7CSAgICBpY2VfdGNfZmx0cl9pc19kcm9wKGNsc19mbG93ZXIpICZhbXA7JmFtcDsKJiM0MzsJICAgIGljZV90Y19kcm9wX2J5cGFzc2VzX2ZsdHIocGYsIG5ldGRldiwgY2xzX2Zsb3dlci0mZ3Q7Y29tbW9uLnByaW8sCiYjNDM7CQkJCSAgICAgIGRpcmVjdGlvbikpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7RHJvcCBmaWx0ZXIgbm90IG9mZmxvYWRlZCBiZWNhdXNlIGl0IHdvdWxkIGJ5cGFzcyBhIGhpZ2hlciBwcmlvcml0eSBmaWx0ZXImIzM0Oyk7CiYjNDM7CQllcnIgPSAtRU9QTk9UU1VQUDsKJiM0MzsJCWdvdG8gdHJhY2tfc3c7CiYjNDM7CX0KJiM0MzsKIAkvKiBwcmVwIGFuZCBhZGQgVEMtZmxvd2VyIGZpbHRlciBpbiBIVyAqLwogCWVyciA9IGljZV9hZGRfdGNfZmx0cihuZXRkZXYsIHZzaSwgY2xzX2Zsb3dlciwgJmFtcDtmbHRyLCBpbmdyZXNzKTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwomIzQzOwkJZ290byB0cmFja19zdzsKJiM0MzsKJiM0MzsJZmx0ci0mZ3Q7ZmlsdGVyX2RldiA9IG5ldGRldjsKJiM0MzsJZmx0ci0mZ3Q7cHJpbyA9IGNsc19mbG93ZXItJmd0O2NvbW1vbi5wcmlvOwogCiAJLyogYWRkIGZpbHRlciBpbnRvIGFuIG9yZGVyZWQgbGlzdCAqLwogCWhsaXN0X2FkZF9oZWFkKCZhbXA7Zmx0ci0mZ3Q7dGNfZmxvd2VyX25vZGUsICZhbXA7cGYtJmd0O3RjX2Zsb3dlcl9mbHRyX2xpc3QpOwogCXJldHVybiAwOwomIzQzOwomIzQzO3RyYWNrX3N3OgomIzQzOwlpZiAodHJhY2tfc3dfZmx0cnMgJmFtcDsmYW1wOyAhY2xzX2Zsb3dlci0mZ3Q7Y29tbW9uLnNraXBfc3cpCiYjNDM7CQlpY2VfdGNfdHJhY2tfc3dfZmx0cihwZiwgbmV0ZGV2LCBjbHNfZmxvd2VyLCBkaXJlY3Rpb24pOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiAvKioKQEAgLTIzMDUsNiAmIzQzOzI0NzEsOSBAQCBpY2VfZGVsX2Nsc19mbG93ZXIoc3RydWN0IGljZV92c2kgKnZzaSwgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpCiAJc3RydWN0IGljZV9wZiAqcGYgPSB2c2ktJmd0O2JhY2s7CiAJaW50IGVycjsKIAomIzQzOwlpZiAoaWNlX3RjX3VudHJhY2tfc3dfZmx0cihwZiwgY2xzX2Zsb3dlci0mZ3Q7Y29va2llKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwogCS8qIGZpbmQgZmlsdGVyICovCiAJZmx0ciA9IGljZV9maW5kX3RjX2Zsb3dlcl9mbHRyKHBmLCBjbHNfZmxvd2VyLSZndDtjb29raWUpOwogCWlmICghZmx0cikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90Y19saWIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdGNfbGliLmgKaW5kZXggOGEzYWIyZjIyYWY5Yi4uMzdkNmY0MTAwZWNmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90Y19saWIuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RjX2xpYi5oCkBAIC0zOCw2ICYjNDM7MzgsNyBAQAogI2RlZmluZSBJQ0VfVENfRkxXUl9GSUVMRF9DVkxBTl9QUklPCQlCSVQoMjgpCiAjZGVmaW5lIElDRV9UQ19GTFdSX0ZJRUxEX1ZMQU5fVFBJRAkJQklUKDI5KQogI2RlZmluZSBJQ0VfVENfRkxXUl9GSUVMRF9QRkNQX09QVFMJCUJJVCgzMCkKJiM0MzsjZGVmaW5lIElDRV9UQ19GTFdSX0ZJRUxEX0lQX1BST1RPCQlCSVQoMzEpCiAKICNkZWZpbmUgSUNFX1RDX0ZMT1dFUl9NQVNLXzMyICAgMHhGRkZGRkZGRgogCkBAIC0xMzgsMTIgJiM0MzsxMzksMzMgQEAgZW51bSBpY2VfZXN3aXRjaF9mbHRyX2RpcmVjdGlvbiB7CiAJSUNFX0VTV0lUQ0hfRkxUUl9FR1JFU1MsCiB9OwogCiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IGljZV90Y19zd19mbHRyIC0gZmlsdGVyIHByZXNlbnRlZCB0byB0aGUgZHJpdmVyIGJ1dCBub3Qgb2ZmbG9hZGVkCiYjNDM7ICogQG5vZGU6IG5vZGUgaW4gdGhlIHBmLSZndDt0Y19zd19mbHRyX2xpc3QKJiM0MzsgKiBAY29va2llOiB1bmlxdWUgZmlsdGVyIGlkZW50aWZpZXIgZnJvbSB0aGUgb2ZmbG9hZCByZXF1ZXN0CiYjNDM7ICogQGZpbHRlcl9kZXY6IGRldmljZSB0aGUgZmlsdGVyIHdhcyByZXF1ZXN0ZWQgb24KJiM0MzsgKiBAcHJpbzogVEMgcHJpb3JpdHksIGxvd2VyIHZhbHVlIGlzIGV2YWx1YXRlZCBmaXJzdAomIzQzOyAqIEBkaXJlY3Rpb246IGJsb2NrIGRpcmVjdGlvbiB0aGUgZmlsdGVyIHdhcyByZXF1ZXN0ZWQgZm9yCiYjNDM7ICogQGlzX2Ryb3A6IHRoZSBmaWx0ZXIgY2FycmllcyBhIGRyb3AgYWN0aW9uCiYjNDM7ICovCiYjNDM7c3RydWN0IGljZV90Y19zd19mbHRyIHsKJiM0MzsJc3RydWN0IGhsaXN0X25vZGUgbm9kZTsKJiM0MzsJdW5zaWduZWQgbG9uZyBjb29raWU7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXJfZGV2OwomIzQzOwl1MzIgcHJpbzsKJiM0MzsJZW51bSBpY2VfZXN3aXRjaF9mbHRyX2RpcmVjdGlvbiBkaXJlY3Rpb247CiYjNDM7CWJvb2wgaXNfZHJvcDsKJiM0Mzt9OwomIzQzOwogc3RydWN0IGljZV90Y19mbG93ZXJfZmx0ciB7CiAJc3RydWN0IGhsaXN0X25vZGUgdGNfZmxvd2VyX25vZGU7CiAKIAkvKiBjb29raWUgYmVjb21lcyBmaWx0ZXJfcnVsZV9pZCBpZiBydWxlIGlzIGFkZGVkIHN1Y2Nlc3NmdWxseSAqLwogCXVuc2lnbmVkIGxvbmcgY29va2llOwogCiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXJfZGV2OwomIzQzOwl1MzIgcHJpbzsKJiM0MzsKIAkvKiBhZGRfYWR2X3J1bGUgcmV0dXJucyBpbmZvcm1hdGlvbiBsaWtlIHJlY2lwZSBJRCwgcnVsZV9pZC4gU3RvcmUKIAkgKiB0aG9zZSB2YWx1ZXMgc2luY2UgdGhleSBhcmUgbmVlZGVkIHRvIHJlbW92ZSBhZHZhbmNlZCBydWxlCiAJICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE3OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNDgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBJQ0UgRHJpdmVyIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZGVjaWRlIGlmIGl0JiMzOTtzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIHN5emthbGxlciBmdXp6aW5nLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLiBPa2F5LCBpdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggdG91Y2hlcyBmaWxlcyB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvYCBkaXJlY3Rvcnkg4oCTIGBpY2UuaGAsIGBpY2VfdGNfbGliLmNgLCBhbmQgYGljZV90Y19saWIuaGAgc3BlY2lmaWNhbGx5LiBTbywgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgSW50ZWwgRXRoZXJuZXQgQ29udHJvbGxlciBFODAwIHNlcmllcyBkcml2ZXIsIGFsc28ga25vd24gYXMgdGhlIElDRSBkcml2ZXIuIFRoYXQgbmFycm93cyBvdXIgZm9jdXMuCgpOb3csIGxldCYjMzk7cyBicmluZyB0aGUgdHJpYWdlIHBoaWxvc29waHkgaW50byBwbGF5LCBzcGVjaWZpY2FsbHkgU2VjdGlvbiAyLCB3aGljaCBkZWFscyB3aXRoIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS4gV2UgbmVlZCB0byBhc2NlcnRhaW4gaWYgdGhlIElDRSBkcml2ZXIgZmFsbHMgaW50byB0aGUgY2F0ZWdvcnkgb2YgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgdGhhdCByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VIG9yIHN5emthbGxlci4gVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogaXMgdGhlIGBpY2VgIGRyaXZlciBvbmUgb2YgdGhvc2U/IEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpZiBpdCByZXF1aXJlcyBzcGVjaWFsaXplZCBoYXJkd2FyZS4gVGhlIGJlc3Qgd2F5IGZvcndhcmQgaXMgdG8gdXNlIGBncmVwcGVyYCB0byBzZWUgaG93IHRoZSBgaWNlYCBkcml2ZXIgaXMgY29uZmlndXJlZCBhbmQgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIHF1aWNrbHkgZ2l2ZSBtZSBhbiBvdmVydmlldyBvZiBpdHMgZGVwZW5kZW5jaWVzIGFuZCB3aGV0aGVyIGl0JiMzOTtzIGluaGVyZW50bHkgdGllZCB0byBhIHNwZWNpZmljIHBoeXNpY2FsIHNldHVwIHRoYXQgbWFrZXMgaXQgYW4gdW5zdWl0YWJsZSBjYW5kaWRhdGUgZm9yIHN5emthbGxlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MjY4PWNvbmZpZyBJNDBFVkZcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTI5MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MjkxOmNvbmZpZyBJQ0VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjkyLVx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwoUikgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBTdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zMTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMyMDpjb25maWcgSUNFX0hXTU9OXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMyMS1cdGJvb2wgXCYjMzQ7SW50ZWwoUikgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBTdXBwb3J0IEhXTU9OIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMzMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MzMxOmNvbmZpZyBJQ0VfU1dJVENIREVWXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMzMi1cdGJvb2wgXCYjMzQ7U3dpdGNoZGV2IFN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTM0NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MzQ1OmNvbmZpZyBJQ0VfSFdUU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zNDYtXHRib29sIFwmIzM0O1N1cHBvcnQgSFcgY3Jvc3MtdGltZXN0YW1wIG9uIHBsYXRmb3JtcyB3aXRoIFBUTSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI1MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBJbnRlbCBFODAwIE5JQyBEcml2ZXIgUHJvYmUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgYmFzaWNzLiBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHRoYXQgdGhlIGBpY2VgIGRyaXZlciBpcywgaW4gZmFjdCwgdGhlIGNvcnJlY3QgUENJIGRldmljZSBkcml2ZXIgZm9yIHRoZSBJbnRlbCBFODAwIHNlcmllcyBOSUNzLiBUaGlzIG1lYW5zIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgZHJpdmVyJiMzOTtzIHByb2JlIHJvdXRpbmUsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyBpdCBpZGVudGlmaWVzIHRoZSBkZXZpY2UgYmFzZWQgb24gaXRzIFBDSSBJRHMuIEEgcXVpY2sgY2hlY2sgb2YgdGhlIFBDSSBJRHMgd2lsbCBjb25maXJtIHRoYXQgd2UgYXJlIGluZGVlZCBsb29raW5nIGF0IHRoZSBjb3JyZWN0IGRyaXZlci4gTm90aGluZyBsaWtlIGEgbWV0aG9kaWNhbCBzdGFydCB0byBhIHBvdGVudGlhbGx5IGNvbXBsZXggaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpY2VfcGNpX3RibCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01MTE3PXN0YXRpYyBpbnQgaWNlX3Byb2JlX3JlY292ZXJ5X21vZGUoc3RydWN0IGljZV9wZiAqcGYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTE0OS0gKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3RcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjUxNTA6ICogQGVudDogZW50cnkgaW4gaWNlX3BjaV90YmxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxNTEtICpcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01NzcxPXN0YXRpYyB2b2lkIGljZV9wY2lfZXJyX3Jlc2V0X2RvbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTc3NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjU3NzY6LyogaWNlX3BjaV90YmwgLSBQQ0kgRGV2aWNlIElEIFRhYmxlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01Nzc3LSAqXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTc4My0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjU3ODQ6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGljZV9wY2lfdGJsW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01Nzg1LVx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODEwQ19CQUNLUExBTkUpIH0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTgzNi19O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTgzNzpNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaWNlX3BjaV90YmwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTgzOC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01ODQ5PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpY2VfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTg1MC1cdC5uYW1lID0gS0JVSUxEX01PRE5BTUUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1ODUxOlx0LmlkX3RhYmxlID0gaWNlX3BjaV90YmwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01ODUyLVx0LnByb2JlID0gaWNlX3Byb2JlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE3OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwODMKCQkJCQkJCW91dHB1dDogMTAxCgkJCQkJCQl0aG91Z2h0czogNTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmVhc2liaWxpdHkgb2YgRnV6emluZyB0aGUgYGljZWAgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHdoZXRoZXIgd2UgY2FuIGFjdHVhbGx5IGZ1enogdGhlIGBpY2VgIGRyaXZlciwgc3BlY2lmaWNhbGx5IHdpdGhvdXQgcmVxdWlyaW5nIGEgcGh5c2ljYWwgSW50ZWwgRTgwMCBzZXJpZXMgUENJZSBjYXJkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBzaW5jZSBpdCYjMzk7cyBhbiBlbnRlcnByaXNlLWdyYWRlIE5JQywgbXkgZ3V0IHNheXMgaXQgcHJvYmFibHkgbmVlZHMgdGhlIHBoeXNpY2FsIGhhcmR3YXJlLiBRRU1VIGRlZmluaXRlbHkgZG9lc24mIzM5O3QgZW11bGF0ZSB0aGUgYGljZWAgaGFyZHdhcmUsIGl0IGZvY3VzZXMgb24gdGhlIG1vcmUgY29tbW9uIHN0dWZmIGxpa2UgYGUxMDAwYCwgYHZteG5ldDNgLCBhbmQgYHZpcnRpby1uZXRgLiBUaGUgdGV4dCBJJiMzOTttIGxvb2tpbmcgYXQgY29uZmlybXMgdGhpczogYGljZWAgcmVxdWlyZXMgYSByZWFsIEFTSUMvUENJZSBjYXJkLCBsaWtlIHRoZSBJbnRlbCBFODEwIG9yIEU4MDAgc2VyaWVzLgoKVGhhdCAmIzM0O1N0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSYjMzQ7IHNlY3Rpb24gaW4gdGhlIGRvY3MgaW1tZWRpYXRlbHkgY2xpY2tzLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBkcml2ZXJzIHRoYXQgYXJlIHRpZWQgdG8gc3BlY2lmaWMgaGFyZHdhcmUgYW5kIGFyZW4mIzM5O3QgZ29pbmcgdG8gcnVuIHdpdGhvdXQgaXQsIGp1c3QgbGlrZSBgbWx4c3dgLCBgcGRzX2NvcmVgLCBldGMuIFRoZSBgaWNlYCBkcml2ZXIgKmRlZmluaXRlbHkqIGZpdHMgdGhpcyBkZXNjcmlwdGlvbi4gU2luY2Ugd2UmIzM5O3JlIG1pc3NpbmcgdGhlIHBoeXNpY2FsIGNhcmQgb3IgcHJvcGVyIGVtdWxhdGlvbiwgZnVuY3Rpb25zIGxpa2UgYGljZV9wcm9iZWAgd29uJiMzOTt0IGV2ZXIgYmUgY2FsbGVkLCBhbmQgdGhlcmVmb3JlIHdlJiMzOTtsbCBuZXZlciBzZWUgdGhpbmdzIGxpa2UgYGljZV9wZmAsIG9yIGBpY2VfYWRkX2Nsc19mbG93ZXJgLgoKSSYjMzk7bSBub3cgY2hlY2tpbmcgaWYgdGhlcmUmIzM5O3MgYW55IGNsZXZlciBtb2NrIG9yIHZpcnR1YWwgZHJpdmVyIG1vZGUgYnVyaWVkIGluIHRoZSBjb2RlLCBvciBpZiBzb21lIG9ic2N1cmUgY29uZmlndXJhdGlvbiBmbGFncyBjYW4gYnJpbmcgaXQgdG8gbGlmZS4gQSBxdWljayBsb29rIGF0IHRoZSBwYXRjaCBkaWZmIGNvbmZpcm1zIHRoYXQgdGhlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9gIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IGluIGBpY2UuaGAsIGBpY2VfdGNfbGliLmNgLCBhbmQgYGljZV90Y19saWIuaGAuCgpHaXZlbiBhbGwgdGhpcywgSSYjMzk7bSBwcmV0dHkgY29uZmlkZW50IGluIG15IGNvbmNsdXNpb24uIEJlY2F1c2UgdGhlIHBhdGNoIGRpcmVjdGx5IGludm9sdmVzIGEgZHJpdmVyIHRoYXQgb25seSB3b3JrcyB3aXRoIHBoeXNpY2FsIGhhcmR3YXJlIHVuYXZhaWxhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZnV6emluZyBpcyBlc3NlbnRpYWxseSBhIG5vLWdvIGZvciB0aGlzIHBhdGNoLiBUaGUgcmVsZXZhbnQgZmllbGRzIGFyZToKCiogICBgV29ydGhGdXp6aW5nYDogZmFsc2UKKiAgIGBFbmFibGVDb25maWdzYDogXFsgXQoqICAgYEZvY3VzU3ltYm9sc2A6IFxbIF0KKiAgIGBSZWFzb25pbmdgOiBDb25jaXNlIGV4cGxhbmF0aW9uIHRoYXQgdGhlIHBhdGNoIGlzIGZvciB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBkcml2ZXIgKGBpY2VgKSwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLgoKTm93IEkmIzM5O2xsIHByZXAgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBjYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEV0aGVybmV0IEU4MDAgU2VyaWVzIGRyaXZlciAoaWNlKSwgc3BlY2lmaWNhbGx5IFRDIGZsb3dlciBmaWx0ZXIgb2ZmbG9hZCBsb2dpYy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgKEludGVsIEU4MTAvRTgwMCBOSUNzKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEV0aGVybmV0IEU4MDAgU2VyaWVzIGRyaXZlciAoaWNlKSwgc3BlY2lmaWNhbGx5IFRDIGZsb3dlciBmaWx0ZXIgb2ZmbG9hZCBsb2dpYy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgKEludGVsIEU4MTAvRTgwMCBOSUNzKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNzo1NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTBUMTc6NTc6MjcuMTM4MjE1MzIyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk3NDE1NDAwODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgRXRoZXJuZXQgRTgwMCBTZXJpZXMgZHJpdmVyIChpY2UpLCBzcGVjaWZpY2FsbHkgVEMgZmxvd2VyIGZpbHRlciBvZmZsb2FkIGxvZ2ljLiBUaGlzIGRyaXZlciByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSAoSW50ZWwgRTgxMC9FODAwIE5JQ3MpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNzo1NzoyNy4xMzgyMjA5NzJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwODM4MDA0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDA5OTIzNzUwYmFmYzU3MGFjNGIzZmI1NjFlMDYxMzVjNDhhMDgxZDVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMTAgMTc6NTc6MjYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXFxuaW5kZXggZGIzYzcwMTVjNTZjNC4uNmM1OTZlNWEzMTUxNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmhcXG5AQCAtNjQzLDYgKzY0Myw3IEBAIHN0cnVjdCBpY2VfcGYge1xcbiBcXHQgKi9cXG4gXFx0dTE2IG51bV9kbWFjX2NobmxfZmx0cnM7XFxuIFxcdHN0cnVjdCBobGlzdF9oZWFkIHRjX2Zsb3dlcl9mbHRyX2xpc3Q7XFxuK1xcdHN0cnVjdCBobGlzdF9oZWFkIHRjX3N3X2ZsdHJfbGlzdDtcXG4gXFxuIFxcdHU2NCBzdXBwb3J0ZWRfcnhkaWRzO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90Y19saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdGNfbGliLmNcXG5pbmRleCBkMjAzNTdjMDQxMjczLi43Y2ZjODk0MWI3YmE1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdGNfbGliLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RjX2xpYi5jXFxuQEAgLTc4LDcgKzc4LDggQEAgc3RhdGljIGludCBpY2VfdGNfY291bnRfbGt1cHModTMyIGZsYWdzLCBzdHJ1Y3QgaWNlX3RjX2Zsb3dlcl9mbHRyICpmbHRyKVxcbiBcXHRcXHQgICAgIElDRV9UQ19GTFdSX0ZJRUxEX0RFU1RfSVBWNiB8IElDRV9UQ19GTFdSX0ZJRUxEX1NSQ19JUFY2KSlcXG4gXFx0XFx0bGt1cHNfY250Kys7XFxuIFxcbi1cXHRpZiAoZmxhZ3MgXFx1MDAyNiAoSUNFX1RDX0ZMV1JfRklFTERfSVBfVE9TIHwgSUNFX1RDX0ZMV1JfRklFTERfSVBfVFRMKSlcXG4rXFx0aWYgKGZsYWdzIFxcdTAwMjYgKElDRV9UQ19GTFdSX0ZJRUxEX0lQX1RPUyB8IElDRV9UQ19GTFdSX0ZJRUxEX0lQX1RUTCB8XFxuK1xcdFxcdCAgICAgSUNFX1RDX0ZMV1JfRklFTERfSVBfUFJPVE8pKVxcbiBcXHRcXHRsa3Vwc19jbnQrKztcXG4gXFxuIFxcdC8qIGFyZSBMMlRQdjMgb3B0aW9ucyBzcGVjaWZpZWQ/ICovXFxuQEAgLTU1Miw3ICs1NTMsOCBAQCBpY2VfdGNfZmlsbF9ydWxlcyhzdHJ1Y3QgaWNlX2h3ICpodywgdTMyIGZsYWdzLFxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoaGVhZGVycy1cXHUwMDNlbDJfa2V5Lm5fcHJvdG8gPT0gaHRvbnMoRVRIX1BfSVApIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAoZmxhZ3MgXFx1MDAyNiAoSUNFX1RDX0ZMV1JfRklFTERfSVBfVE9TIHwgSUNFX1RDX0ZMV1JfRklFTERfSVBfVFRMKSkpIHtcXG4rXFx0ICAgIChmbGFncyBcXHUwMDI2IChJQ0VfVENfRkxXUl9GSUVMRF9JUF9UT1MgfCBJQ0VfVENfRkxXUl9GSUVMRF9JUF9UVEwgfFxcbitcXHRcXHQgICAgICBJQ0VfVENfRkxXUl9GSUVMRF9JUF9QUk9UTykpKSB7XFxuIFxcdFxcdGxpc3RbaV0udHlwZSA9IGljZV9wcm90b190eXBlX2Zyb21faXB2NChpbm5lcik7XFxuIFxcbiBcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJQ0VfVENfRkxXUl9GSUVMRF9JUF9UT1MpIHtcXG5AQCAtNTY3LDExICs1NjksMTkgQEAgaWNlX3RjX2ZpbGxfcnVsZXMoc3RydWN0IGljZV9odyAqaHcsIHUzMiBmbGFncyxcXG4gXFx0XFx0XFx0XFx0aGVhZGVycy1cXHUwMDNlbDNfbWFzay50dGw7XFxuIFxcdFxcdH1cXG4gXFxuK1xcdFxcdGlmIChmbGFncyBcXHUwMDI2IElDRV9UQ19GTFdSX0ZJRUxEX0lQX1BST1RPKSB7XFxuK1xcdFxcdFxcdGxpc3RbaV0uaF91LmlwdjRfaGRyLnByb3RvY29sID1cXG4rXFx0XFx0XFx0XFx0aGVhZGVycy1cXHUwMDNlbDNfa2V5LmlwX3Byb3RvO1xcbitcXHRcXHRcXHRsaXN0W2ldLm1fdS5pcHY0X2hkci5wcm90b2NvbCA9XFxuK1xcdFxcdFxcdFxcdGhlYWRlcnMtXFx1MDAzZWwzX21hc2suaXBfcHJvdG87XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdGkrKztcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGhlYWRlcnMtXFx1MDAzZWwyX2tleS5uX3Byb3RvID09IGh0b25zKEVUSF9QX0lQVjYpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAoZmxhZ3MgXFx1MDAyNiAoSUNFX1RDX0ZMV1JfRklFTERfSVBfVE9TIHwgSUNFX1RDX0ZMV1JfRklFTERfSVBfVFRMKSkpIHtcXG4rXFx0ICAgIChmbGFncyBcXHUwMDI2IChJQ0VfVENfRkxXUl9GSUVMRF9JUF9UT1MgfCBJQ0VfVENfRkxXUl9GSUVMRF9JUF9UVEwgfFxcbitcXHRcXHQgICAgICBJQ0VfVENfRkxXUl9GSUVMRF9JUF9QUk9UTykpKSB7XFxuIFxcdFxcdHN0cnVjdCBpY2VfaXB2Nl9oZHIgKmhkcl9oLCAqaGRyX207XFxuIFxcbiBcXHRcXHRoZHJfaCA9IFxcdTAwMjZsaXN0W2ldLmhfdS5pcHY2X2hkcjtcXG5AQCAtNTkyLDYgKzYwMiwxMSBAQCBpY2VfdGNfZmlsbF9ydWxlcyhzdHJ1Y3QgaWNlX2h3ICpodywgdTMyIGZsYWdzLFxcbiBcXHRcXHRcXHRoZHJfbS1cXHUwMDNlaG9wX2xpbWl0ID0gaGVhZGVycy1cXHUwMDNlbDNfbWFzay50dGw7XFxuIFxcdFxcdH1cXG4gXFxuK1xcdFxcdGlmIChmbGFncyBcXHUwMDI2IElDRV9UQ19GTFdSX0ZJRUxEX0lQX1BST1RPKSB7XFxuK1xcdFxcdFxcdGhkcl9oLVxcdTAwM2VuZXh0X2hkciA9IGhlYWRlcnMtXFx1MDAzZWwzX2tleS5pcF9wcm90bztcXG4rXFx0XFx0XFx0aGRyX20tXFx1MDAzZW5leHRfaGRyID0gaGVhZGVycy1cXHUwMDNlbDNfbWFzay5pcF9wcm90bztcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0aSsrO1xcbiBcXHR9XFxuIFxcbkBAIC0xNzM3LDYgKzE3NTIsOSBAQCBpY2VfcGFyc2VfY2xzX2Zsb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZmlsdGVyX2Rldiwgc3RydWN0IGljZV92c2kgKnZzaSxcXG4gXFx0XFx0aGVhZGVycy1cXHUwMDNlbDJfa2V5Lm5fcHJvdG8gPSBjcHVfdG9fYmUxNihuX3Byb3RvX2tleSk7XFxuIFxcdFxcdGhlYWRlcnMtXFx1MDAzZWwyX21hc2subl9wcm90byA9IGNwdV90b19iZTE2KG5fcHJvdG9fbWFzayk7XFxuIFxcdFxcdGhlYWRlcnMtXFx1MDAzZWwzX2tleS5pcF9wcm90byA9IG1hdGNoLmtleS1cXHUwMDNlaXBfcHJvdG87XFxuK1xcdFxcdGhlYWRlcnMtXFx1MDAzZWwzX21hc2suaXBfcHJvdG8gPSBtYXRjaC5tYXNrLVxcdTAwM2VpcF9wcm90bztcXG4rXFx0XFx0aWYgKG1hdGNoLm1hc2stXFx1MDAzZWlwX3Byb3RvKVxcbitcXHRcXHRcXHRmbHRyLVxcdTAwM2VmbGFncyB8PSBJQ0VfVENfRkxXUl9GSUVMRF9JUF9QUk9UTztcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGZsb3dfcnVsZV9tYXRjaF9rZXkocnVsZSwgRkxPV19ESVNTRUNUT1JfS0VZX0VUSF9BRERSUykpIHtcXG5AQCAtMTkxMCw2ICsxOTI4LDE5IEBAIGljZV9wYXJzZV9jbHNfZmxvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXJfZGV2LCBzdHJ1Y3QgaWNlX3ZzaSAqdnNpLFxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChmbHRyLVxcdTAwM2VmbGFncyBcXHUwMDI2IChJQ0VfVENfRkxXUl9GSUVMRF9ERVNUX0w0X1BPUlQgfFxcbitcXHRcXHRcXHQgICBJQ0VfVENfRkxXUl9GSUVMRF9TUkNfTDRfUE9SVCB8XFxuK1xcdFxcdFxcdCAgIElDRV9UQ19GTFdSX0ZJRUxEX0wyVFBWM19TRVNTSUQpKVxcbitcXHRcXHRmbHRyLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+SUNFX1RDX0ZMV1JfRklFTERfSVBfUFJPVE87XFxuK1xcbitcXHRpZiAoKGZsdHItXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUNFX1RDX0ZMV1JfRklFTERfSVBfUFJPVE8pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBoZWFkZXJzLVxcdTAwM2VsMl9rZXkubl9wcm90byAhPSBodG9ucyhFVEhfUF9JUCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGhlYWRlcnMtXFx1MDAzZWwyX2tleS5uX3Byb3RvICE9IGh0b25zKEVUSF9QX0lQVjYpKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChmbHRyLVxcdTAwM2VleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJJUCBwcm90b2NvbCBtYXRjaCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggR1RQIG9yIFBQUG9FXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4gXFx0LyogSW5ncmVzcyBmaWx0ZXIgb24gcmVwcmVzZW50b3IgcmVzdWx0cyBpbiBhbiBlZ3Jlc3MgZmlsdGVyIGluIEhXXFxuIFxcdCAqIGFuZCB2aWNlIHZlcnNhXFxuIFxcdCAqL1xcbkBAIC0yMjM4LDYgKzIyNjksMTEyIEBAIGljZV9maW5kX3RjX2Zsb3dlcl9mbHRyKHN0cnVjdCBpY2VfcGYgKnBmLCB1bnNpZ25lZCBsb25nIGNvb2tpZSlcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBpY2VfdGNfZmx0cl9pc19kcm9wIC0gY2hlY2sgaWYgYSBmaWx0ZXIgY2FycmllcyBhIGRyb3AgYWN0aW9uXFxuKyAqIEBjbHNfZmxvd2VyOiBvZmZsb2FkIHJlcXVlc3QgZGVzY3JpYmluZyB0aGUgZmlsdGVyXFxuKyAqXFxuKyAqIFJldHVybjogdHJ1ZSBpZiBhbnkgYWN0aW9uIG9mIHRoZSBmaWx0ZXIgaXMgYSBkcm9wLCBmYWxzZSBvdGhlcndpc2UuXFxuKyAqL1xcbitzdGF0aWMgYm9vbCBpY2VfdGNfZmx0cl9pc19kcm9wKHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvd2VyKVxcbit7XFxuK1xcdHN0cnVjdCBmbG93X3J1bGUgKnJ1bGUgPSBmbG93X2Nsc19vZmZsb2FkX2Zsb3dfcnVsZShjbHNfZmxvd2VyKTtcXG4rXFx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICphY3Q7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aWYgKGNsc19mbG93ZXItXFx1MDAzZWNsYXNzaWQpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGZsb3dfYWN0aW9uX2Zvcl9lYWNoKGksIGFjdCwgXFx1MDAyNnJ1bGUtXFx1MDAzZWFjdGlvbilcXG4rXFx0XFx0aWYgKGFjdC1cXHUwMDNlaWQgPT0gRkxPV19BQ1RJT05fRFJPUClcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBpY2VfdGNfdW50cmFja19zd19mbHRyIC0gZm9yZ2V0IGEgdHJhY2tlZCBzb2Z0d2FyZS1vbmx5IGZpbHRlclxcbisgKiBAcGY6IHBvaW50ZXIgdG8gUEYgc3RydWN0dXJlXFxuKyAqIEBjb29raWU6IHVuaXF1ZSBmaWx0ZXIgaWRlbnRpZmllciBmcm9tIHRoZSBvZmZsb2FkIHJlcXVlc3RcXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIGlmIHRoZSBmaWx0ZXIgd2FzIHRyYWNrZWQsIGZhbHNlIG90aGVyd2lzZS5cXG4rICovXFxuK3N0YXRpYyBib29sIGljZV90Y191bnRyYWNrX3N3X2ZsdHIoc3RydWN0IGljZV9wZiAqcGYsIHVuc2lnbmVkIGxvbmcgY29va2llKVxcbit7XFxuK1xcdHN0cnVjdCBpY2VfdGNfc3dfZmx0ciAqc3dfZmx0cjtcXG4rXFxuK1xcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KHN3X2ZsdHIsIFxcdTAwMjZwZi1cXHUwMDNldGNfc3dfZmx0cl9saXN0LCBub2RlKSB7XFxuK1xcdFxcdGlmIChzd19mbHRyLVxcdTAwM2Vjb29raWUgIT0gY29va2llKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGhsaXN0X2RlbChcXHUwMDI2c3dfZmx0ci1cXHUwMDNlbm9kZSk7XFxuK1xcdFxcdGtmcmVlKHN3X2ZsdHIpO1xcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbisvKipcXG4rICogaWNlX3RjX3RyYWNrX3N3X2ZsdHIgLSByZW1lbWJlciBhIGZpbHRlciB0aGF0IHdhcyBub3Qgb2ZmbG9hZGVkXFxuKyAqIEBwZjogcG9pbnRlciB0byBQRiBzdHJ1Y3R1cmVcXG4rICogQGZpbHRlcl9kZXY6IGRldmljZSB0aGUgZmlsdGVyIHdhcyByZXF1ZXN0ZWQgb25cXG4rICogQGNsc19mbG93ZXI6IG9mZmxvYWQgcmVxdWVzdCBkZXNjcmliaW5nIHRoZSBmaWx0ZXJcXG4rICogQGRpcmVjdGlvbjogYmxvY2sgZGlyZWN0aW9uIHRoZSBmaWx0ZXIgd2FzIHJlcXVlc3RlZCBmb3JcXG4rICovXFxuK3N0YXRpYyB2b2lkIGljZV90Y190cmFja19zd19mbHRyKHN0cnVjdCBpY2VfcGYgKnBmLFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlcl9kZXYsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqY2xzX2Zsb3dlcixcXG4rXFx0XFx0XFx0XFx0IGVudW0gaWNlX2Vzd2l0Y2hfZmx0cl9kaXJlY3Rpb24gZGlyZWN0aW9uKVxcbit7XFxuK1xcdHN0cnVjdCBpY2VfdGNfc3dfZmx0ciAqc3dfZmx0cjtcXG4rXFxuK1xcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KHN3X2ZsdHIsIFxcdTAwMjZwZi1cXHUwMDNldGNfc3dfZmx0cl9saXN0LCBub2RlKVxcbitcXHRcXHRpZiAoc3dfZmx0ci1cXHUwMDNlY29va2llID09IGNsc19mbG93ZXItXFx1MDAzZWNvb2tpZSlcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0c3dfZmx0ciA9IGt6YWxsb2Nfb2JqKCpzd19mbHRyKTtcXG4rXFx0aWYgKCFzd19mbHRyKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzd19mbHRyLVxcdTAwM2Vjb29raWUgPSBjbHNfZmxvd2VyLVxcdTAwM2Vjb29raWU7XFxuK1xcdHN3X2ZsdHItXFx1MDAzZWZpbHRlcl9kZXYgPSBmaWx0ZXJfZGV2O1xcbitcXHRzd19mbHRyLVxcdTAwM2VwcmlvID0gY2xzX2Zsb3dlci1cXHUwMDNlY29tbW9uLnByaW87XFxuK1xcdHN3X2ZsdHItXFx1MDAzZWRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcXG4rXFx0c3dfZmx0ci1cXHUwMDNlaXNfZHJvcCA9IGljZV90Y19mbHRyX2lzX2Ryb3AoY2xzX2Zsb3dlcik7XFxuK1xcdGhsaXN0X2FkZF9oZWFkKFxcdTAwMjZzd19mbHRyLVxcdTAwM2Vub2RlLCBcXHUwMDI2cGYtXFx1MDAzZXRjX3N3X2ZsdHJfbGlzdCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBpY2VfdGNfZHJvcF9ieXBhc3Nlc19mbHRyIC0gY2hlY2sgaWYgYSBkcm9wIHJ1bGUgd291bGQgYnlwYXNzIGEgZmlsdGVyXFxuKyAqIEBwZjogcG9pbnRlciB0byBQRiBzdHJ1Y3R1cmVcXG4rICogQGZpbHRlcl9kZXY6IGRldmljZSB0aGUgZHJvcCBmaWx0ZXIgaXMgcmVxdWVzdGVkIG9uXFxuKyAqIEBwcmlvOiBUQyBwcmlvcml0eSBvZiB0aGUgZHJvcCBmaWx0ZXJcXG4rICogQGRpcmVjdGlvbjogYmxvY2sgZGlyZWN0aW9uIG9mIHRoZSBkcm9wIGZpbHRlclxcbisgKlxcbisgKiBSZXR1cm46IHRydWUgaWYgc3VjaCBhIGZpbHRlciBleGlzdHMsIGZhbHNlIG90aGVyd2lzZS5cXG4rICovXFxuK3N0YXRpYyBib29sXFxuK2ljZV90Y19kcm9wX2J5cGFzc2VzX2ZsdHIoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXJfZGV2LFxcbitcXHRcXHRcXHQgIHUzMiBwcmlvLCBlbnVtIGljZV9lc3dpdGNoX2ZsdHJfZGlyZWN0aW9uIGRpcmVjdGlvbilcXG4re1xcbitcXHRzdHJ1Y3QgaWNlX3RjX2Zsb3dlcl9mbHRyICpmbHRyO1xcbitcXHRzdHJ1Y3QgaWNlX3RjX3N3X2ZsdHIgKnN3X2ZsdHI7XFxuK1xcbitcXHRobGlzdF9mb3JfZWFjaF9lbnRyeShzd19mbHRyLCBcXHUwMDI2cGYtXFx1MDAzZXRjX3N3X2ZsdHJfbGlzdCwgbm9kZSlcXG4rXFx0XFx0aWYgKHN3X2ZsdHItXFx1MDAzZWZpbHRlcl9kZXYgPT0gZmlsdGVyX2RldiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgc3dfZmx0ci1cXHUwMDNlZGlyZWN0aW9uID09IGRpcmVjdGlvbiBcXHUwMDI2XFx1MDAyNiBzd19mbHRyLVxcdTAwM2VwcmlvIFxcdTAwM2MgcHJpbyBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIXN3X2ZsdHItXFx1MDAzZWlzX2Ryb3ApXFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0aGxpc3RfZm9yX2VhY2hfZW50cnkoZmx0ciwgXFx1MDAyNnBmLVxcdTAwM2V0Y19mbG93ZXJfZmx0cl9saXN0LCB0Y19mbG93ZXJfbm9kZSlcXG4rXFx0XFx0aWYgKGZsdHItXFx1MDAzZWZpbHRlcl9kZXYgPT0gZmlsdGVyX2RldiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgZmx0ci1cXHUwMDNlZGlyZWN0aW9uID09IGRpcmVjdGlvbiBcXHUwMDI2XFx1MDAyNiBmbHRyLVxcdTAwM2VwcmlvIFxcdTAwM2MgcHJpbyBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgZmx0ci1cXHUwMDNlYWN0aW9uLmZsdHJfYWN0ICE9IElDRV9EUk9QX1BBQ0tFVClcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBpY2VfYWRkX2Nsc19mbG93ZXIgLSBhZGQgVEMgZmxvd2VyIGZpbHRlcnNcXG4gICogQG5ldGRldjogUG9pbnRlciB0byBmaWx0ZXIgZGV2aWNlXFxuQEAgLTIyNTMsMTQgKzIzOTAsMjQgQEAgaW50IGljZV9hZGRfY2xzX2Zsb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgaWNlX3ZzaSAqdnNpLFxcbiB7XFxuIFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IGNsc19mbG93ZXItXFx1MDAzZWNvbW1vbi5leHRhY2s7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICp2c2lfbmV0ZGV2ID0gdnNpLVxcdTAwM2VuZXRkZXY7XFxuK1xcdGVudW0gaWNlX2Vzd2l0Y2hfZmx0cl9kaXJlY3Rpb24gZGlyZWN0aW9uO1xcbiBcXHRzdHJ1Y3QgaWNlX3RjX2Zsb3dlcl9mbHRyICpmbHRyO1xcbiBcXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHZzaS1cXHUwMDNlYmFjaztcXG4rXFx0Ym9vbCB0cmFja19zd19mbHRycztcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdGlmIChpY2VfaXNfcmVzZXRfaW5fcHJvZ3Jlc3MocGYtXFx1MDAzZXN0YXRlKSlcXG4tXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4tXFx0aWYgKHRlc3RfYml0KElDRV9GTEFHX0ZXX0xMRFBfQUdFTlQsIHBmLVxcdTAwM2VmbGFncykpXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRkaXJlY3Rpb24gPSBpbmdyZXNzID8gSUNFX0VTV0lUQ0hfRkxUUl9JTkdSRVNTIDpcXG4rXFx0XFx0XFx0ICAgICAgSUNFX0VTV0lUQ0hfRkxUUl9FR1JFU1M7XFxuK1xcdHRyYWNrX3N3X2ZsdHJzID0gIWljZV9pc19lc3dpdGNoX21vZGVfc3dpdGNoZGV2KHBmKTtcXG4rXFxuK1xcdGlmIChpY2VfaXNfcmVzZXRfaW5fcHJvZ3Jlc3MocGYtXFx1MDAzZXN0YXRlKSkge1xcbitcXHRcXHRlcnIgPSAtRUJVU1k7XFxuK1xcdFxcdGdvdG8gdHJhY2tfc3c7XFxuK1xcdH1cXG4rXFx0aWYgKHRlc3RfYml0KElDRV9GTEFHX0ZXX0xMRFBfQUdFTlQsIHBmLVxcdTAwM2VmbGFncykpIHtcXG4rXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byB0cmFja19zdztcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKGljZV9pc19wb3J0X3JlcHJfbmV0ZGV2KG5ldGRldikpXFxuIFxcdFxcdHZzaV9uZXRkZXYgPSBuZXRkZXY7XFxuQEAgLTIyNzMsNyArMjQyMCw4IEBAIGludCBpY2VfYWRkX2Nsc19mbG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGljZV92c2kgKnZzaSxcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChuZXRkZXYgPT0gdnNpX25ldGRldilcXG4gXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcImNhbid0IGFwcGx5IFRDIGZsb3dlciBmaWx0ZXJzLCB0dXJuIE9OIGh3LXRjLW9mZmxvYWQgYW5kIHRyeSBhZ2FpblxcXCIpO1xcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byB0cmFja19zdztcXG4gXFx0fVxcbiBcXG4gXFx0LyogYXZvaWQgZHVwbGljYXRlIGVudHJpZXMsIGlmIGV4aXN0cyAtIHJldHVybiBlcnJvciAqL1xcbkBAIC0yMjgzLDE0ICsyNDMxLDMyIEBAIGludCBpY2VfYWRkX2Nsc19mbG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGljZV92c2kgKnZzaSxcXG4gXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuIFxcdH1cXG4gXFxuK1xcdGlmICh0cmFja19zd19mbHRycyBcXHUwMDI2XFx1MDAyNiAhY2xzX2Zsb3dlci1cXHUwMDNlY29tbW9uLnNraXBfc3cgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGljZV90Y19mbHRyX2lzX2Ryb3AoY2xzX2Zsb3dlcikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGljZV90Y19kcm9wX2J5cGFzc2VzX2ZsdHIocGYsIG5ldGRldiwgY2xzX2Zsb3dlci1cXHUwMDNlY29tbW9uLnByaW8sXFxuK1xcdFxcdFxcdFxcdCAgICAgIGRpcmVjdGlvbikpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIkRyb3AgZmlsdGVyIG5vdCBvZmZsb2FkZWQgYmVjYXVzZSBpdCB3b3VsZCBieXBhc3MgYSBoaWdoZXIgcHJpb3JpdHkgZmlsdGVyXFxcIik7XFxuK1xcdFxcdGVyciA9IC1FT1BOT1RTVVBQO1xcbitcXHRcXHRnb3RvIHRyYWNrX3N3O1xcbitcXHR9XFxuK1xcbiBcXHQvKiBwcmVwIGFuZCBhZGQgVEMtZmxvd2VyIGZpbHRlciBpbiBIVyAqL1xcbiBcXHRlcnIgPSBpY2VfYWRkX3RjX2ZsdHIobmV0ZGV2LCB2c2ksIGNsc19mbG93ZXIsIFxcdTAwMjZmbHRyLCBpbmdyZXNzKTtcXG4gXFx0aWYgKGVycilcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0Z290byB0cmFja19zdztcXG4rXFxuK1xcdGZsdHItXFx1MDAzZWZpbHRlcl9kZXYgPSBuZXRkZXY7XFxuK1xcdGZsdHItXFx1MDAzZXByaW8gPSBjbHNfZmxvd2VyLVxcdTAwM2Vjb21tb24ucHJpbztcXG4gXFxuIFxcdC8qIGFkZCBmaWx0ZXIgaW50byBhbiBvcmRlcmVkIGxpc3QgKi9cXG4gXFx0aGxpc3RfYWRkX2hlYWQoXFx1MDAyNmZsdHItXFx1MDAzZXRjX2Zsb3dlcl9ub2RlLCBcXHUwMDI2cGYtXFx1MDAzZXRjX2Zsb3dlcl9mbHRyX2xpc3QpO1xcbiBcXHRyZXR1cm4gMDtcXG4rXFxuK3RyYWNrX3N3OlxcbitcXHRpZiAodHJhY2tfc3dfZmx0cnMgXFx1MDAyNlxcdTAwMjYgIWNsc19mbG93ZXItXFx1MDAzZWNvbW1vbi5za2lwX3N3KVxcbitcXHRcXHRpY2VfdGNfdHJhY2tfc3dfZmx0cihwZiwgbmV0ZGV2LCBjbHNfZmxvd2VyLCBkaXJlY3Rpb24pO1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMjMwNSw2ICsyNDcxLDkgQEAgaWNlX2RlbF9jbHNfZmxvd2VyKHN0cnVjdCBpY2VfdnNpICp2c2ksIHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvd2VyKVxcbiBcXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHZzaS1cXHUwMDNlYmFjaztcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdGlmIChpY2VfdGNfdW50cmFja19zd19mbHRyKHBmLCBjbHNfZmxvd2VyLVxcdTAwM2Vjb29raWUpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuIFxcdC8qIGZpbmQgZmlsdGVyICovXFxuIFxcdGZsdHIgPSBpY2VfZmluZF90Y19mbG93ZXJfZmx0cihwZiwgY2xzX2Zsb3dlci1cXHUwMDNlY29va2llKTtcXG4gXFx0aWYgKCFmbHRyKSB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdGNfbGliLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RjX2xpYi5oXFxuaW5kZXggOGEzYWIyZjIyYWY5Yi4uMzdkNmY0MTAwZWNmYiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RjX2xpYi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90Y19saWIuaFxcbkBAIC0zOCw2ICszOCw3IEBAXFxuICNkZWZpbmUgSUNFX1RDX0ZMV1JfRklFTERfQ1ZMQU5fUFJJT1xcdFxcdEJJVCgyOClcXG4gI2RlZmluZSBJQ0VfVENfRkxXUl9GSUVMRF9WTEFOX1RQSURcXHRcXHRCSVQoMjkpXFxuICNkZWZpbmUgSUNFX1RDX0ZMV1JfRklFTERfUEZDUF9PUFRTXFx0XFx0QklUKDMwKVxcbisjZGVmaW5lIElDRV9UQ19GTFdSX0ZJRUxEX0lQX1BST1RPXFx0XFx0QklUKDMxKVxcbiBcXG4gI2RlZmluZSBJQ0VfVENfRkxPV0VSX01BU0tfMzIgICAweEZGRkZGRkZGXFxuIFxcbkBAIC0xMzgsMTIgKzEzOSwzMyBAQCBlbnVtIGljZV9lc3dpdGNoX2ZsdHJfZGlyZWN0aW9uIHtcXG4gXFx0SUNFX0VTV0lUQ0hfRkxUUl9FR1JFU1MsXFxuIH07XFxuIFxcbisvKipcXG4rICogc3RydWN0IGljZV90Y19zd19mbHRyIC0gZmlsdGVyIHByZXNlbnRlZCB0byB0aGUgZHJpdmVyIGJ1dCBub3Qgb2ZmbG9hZGVkXFxuKyAqIEBub2RlOiBub2RlIGluIHRoZSBwZi1cXHUwMDNldGNfc3dfZmx0cl9saXN0XFxuKyAqIEBjb29raWU6IHVuaXF1ZSBmaWx0ZXIgaWRlbnRpZmllciBmcm9tIHRoZSBvZmZsb2FkIHJlcXVlc3RcXG4rICogQGZpbHRlcl9kZXY6IGRldmljZSB0aGUgZmlsdGVyIHdhcyByZXF1ZXN0ZWQgb25cXG4rICogQHByaW86IFRDIHByaW9yaXR5LCBsb3dlciB2YWx1ZSBpcyBldmFsdWF0ZWQgZmlyc3RcXG4rICogQGRpcmVjdGlvbjogYmxvY2sgZGlyZWN0aW9uIHRoZSBmaWx0ZXIgd2FzIHJlcXVlc3RlZCBmb3JcXG4rICogQGlzX2Ryb3A6IHRoZSBmaWx0ZXIgY2FycmllcyBhIGRyb3AgYWN0aW9uXFxuKyAqL1xcbitzdHJ1Y3QgaWNlX3RjX3N3X2ZsdHIge1xcbitcXHRzdHJ1Y3QgaGxpc3Rfbm9kZSBub2RlO1xcbitcXHR1bnNpZ25lZCBsb25nIGNvb2tpZTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlcl9kZXY7XFxuK1xcdHUzMiBwcmlvO1xcbitcXHRlbnVtIGljZV9lc3dpdGNoX2ZsdHJfZGlyZWN0aW9uIGRpcmVjdGlvbjtcXG4rXFx0Ym9vbCBpc19kcm9wO1xcbit9O1xcbitcXG4gc3RydWN0IGljZV90Y19mbG93ZXJfZmx0ciB7XFxuIFxcdHN0cnVjdCBobGlzdF9ub2RlIHRjX2Zsb3dlcl9ub2RlO1xcbiBcXG4gXFx0LyogY29va2llIGJlY29tZXMgZmlsdGVyX3J1bGVfaWQgaWYgcnVsZSBpcyBhZGRlZCBzdWNjZXNzZnVsbHkgKi9cXG4gXFx0dW5zaWduZWQgbG9uZyBjb29raWU7XFxuIFxcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZmlsdGVyX2RldjtcXG4rXFx0dTMyIHByaW87XFxuK1xcbiBcXHQvKiBhZGRfYWR2X3J1bGUgcmV0dXJucyBpbmZvcm1hdGlvbiBsaWtlIHJlY2lwZSBJRCwgcnVsZV9pZC4gU3RvcmVcXG4gXFx0ICogdGhvc2UgdmFsdWVzIHNpbmNlIHRoZXkgYXJlIG5lZWRlZCB0byByZW1vdmUgYWR2YW5jZWQgcnVsZVxcbiBcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTc6NTc6MjcuNjQ3NDM3MjJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE5MjMyMzA0ODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgRXRoZXJuZXQgRTgwMCBTZXJpZXMgZHJpdmVyIChpY2UpLCBzcGVjaWZpY2FsbHkgVEMgZmxvd2VyIGZpbHRlciBvZmZsb2FkIGxvZ2ljLiBUaGlzIGRyaXZlciByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSAoSW50ZWwgRTgxMC9FODAwIE5JQ3MpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA5OTIzNzUwYmFmYzU3MGFjNGIzZmI1NjFlMDYxMzVjNDhhMDgxZDVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAxNzo1NzoyNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxuaW5kZXggZGIzYzcwMTVjNTZjNC4uNmM1OTZlNWEzMTUxNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXG5AQCAtNjQzLDYgKzY0Myw3IEBAIHN0cnVjdCBpY2VfcGYge1xuIFx0ICovXG4gXHR1MTYgbnVtX2RtYWNfY2hubF9mbHRycztcbiBcdHN0cnVjdCBobGlzdF9oZWFkIHRjX2Zsb3dlcl9mbHRyX2xpc3Q7XG4rXHRzdHJ1Y3QgaGxpc3RfaGVhZCB0Y19zd19mbHRyX2xpc3Q7XG4gXG4gXHR1NjQgc3VwcG9ydGVkX3J4ZGlkcztcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RjX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90Y19saWIuY1xuaW5kZXggZDIwMzU3YzA0MTI3My4uN2NmYzg5NDFiN2JhNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdGNfbGliLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdGNfbGliLmNcbkBAIC03OCw3ICs3OCw4IEBAIHN0YXRpYyBpbnQgaWNlX3RjX2NvdW50X2xrdXBzKHUzMiBmbGFncywgc3RydWN0IGljZV90Y19mbG93ZXJfZmx0ciAqZmx0cilcbiBcdFx0ICAgICBJQ0VfVENfRkxXUl9GSUVMRF9ERVNUX0lQVjYgfCBJQ0VfVENfRkxXUl9GSUVMRF9TUkNfSVBWNikpXG4gXHRcdGxrdXBzX2NudCsrO1xuIFxuLVx0aWYgKGZsYWdzIFx1MDAyNiAoSUNFX1RDX0ZMV1JfRklFTERfSVBfVE9TIHwgSUNFX1RDX0ZMV1JfRklFTERfSVBfVFRMKSlcbitcdGlmIChmbGFncyBcdTAwMjYgKElDRV9UQ19GTFdSX0ZJRUxEX0lQX1RPUyB8IElDRV9UQ19GTFdSX0ZJRUxEX0lQX1RUTCB8XG4rXHRcdCAgICAgSUNFX1RDX0ZMV1JfRklFTERfSVBfUFJPVE8pKVxuIFx0XHRsa3Vwc19jbnQrKztcbiBcbiBcdC8qIGFyZSBMMlRQdjMgb3B0aW9ucyBzcGVjaWZpZWQ/ICovXG5AQCAtNTUyLDcgKzU1Myw4IEBAIGljZV90Y19maWxsX3J1bGVzKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgZmxhZ3MsXG4gXHR9XG4gXG4gXHRpZiAoaGVhZGVycy1cdTAwM2VsMl9rZXkubl9wcm90byA9PSBodG9ucyhFVEhfUF9JUCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgKGZsYWdzIFx1MDAyNiAoSUNFX1RDX0ZMV1JfRklFTERfSVBfVE9TIHwgSUNFX1RDX0ZMV1JfRklFTERfSVBfVFRMKSkpIHtcbitcdCAgICAoZmxhZ3MgXHUwMDI2IChJQ0VfVENfRkxXUl9GSUVMRF9JUF9UT1MgfCBJQ0VfVENfRkxXUl9GSUVMRF9JUF9UVEwgfFxuK1x0XHQgICAgICBJQ0VfVENfRkxXUl9GSUVMRF9JUF9QUk9UTykpKSB7XG4gXHRcdGxpc3RbaV0udHlwZSA9IGljZV9wcm90b190eXBlX2Zyb21faXB2NChpbm5lcik7XG4gXG4gXHRcdGlmIChmbGFncyBcdTAwMjYgSUNFX1RDX0ZMV1JfRklFTERfSVBfVE9TKSB7XG5AQCAtNTY3LDExICs1NjksMTkgQEAgaWNlX3RjX2ZpbGxfcnVsZXMoc3RydWN0IGljZV9odyAqaHcsIHUzMiBmbGFncyxcbiBcdFx0XHRcdGhlYWRlcnMtXHUwMDNlbDNfbWFzay50dGw7XG4gXHRcdH1cbiBcbitcdFx0aWYgKGZsYWdzIFx1MDAyNiBJQ0VfVENfRkxXUl9GSUVMRF9JUF9QUk9UTykge1xuK1x0XHRcdGxpc3RbaV0uaF91LmlwdjRfaGRyLnByb3RvY29sID1cbitcdFx0XHRcdGhlYWRlcnMtXHUwMDNlbDNfa2V5LmlwX3Byb3RvO1xuK1x0XHRcdGxpc3RbaV0ubV91LmlwdjRfaGRyLnByb3RvY29sID1cbitcdFx0XHRcdGhlYWRlcnMtXHUwMDNlbDNfbWFzay5pcF9wcm90bztcbitcdFx0fVxuK1xuIFx0XHRpKys7XG4gXHR9XG4gXG4gXHRpZiAoaGVhZGVycy1cdTAwM2VsMl9rZXkubl9wcm90byA9PSBodG9ucyhFVEhfUF9JUFY2KSBcdTAwMjZcdTAwMjZcbi1cdCAgICAoZmxhZ3MgXHUwMDI2IChJQ0VfVENfRkxXUl9GSUVMRF9JUF9UT1MgfCBJQ0VfVENfRkxXUl9GSUVMRF9JUF9UVEwpKSkge1xuK1x0ICAgIChmbGFncyBcdTAwMjYgKElDRV9UQ19GTFdSX0ZJRUxEX0lQX1RPUyB8IElDRV9UQ19GTFdSX0ZJRUxEX0lQX1RUTCB8XG4rXHRcdCAgICAgIElDRV9UQ19GTFdSX0ZJRUxEX0lQX1BST1RPKSkpIHtcbiBcdFx0c3RydWN0IGljZV9pcHY2X2hkciAqaGRyX2gsICpoZHJfbTtcbiBcbiBcdFx0aGRyX2ggPSBcdTAwMjZsaXN0W2ldLmhfdS5pcHY2X2hkcjtcbkBAIC01OTIsNiArNjAyLDExIEBAIGljZV90Y19maWxsX3J1bGVzKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgZmxhZ3MsXG4gXHRcdFx0aGRyX20tXHUwMDNlaG9wX2xpbWl0ID0gaGVhZGVycy1cdTAwM2VsM19tYXNrLnR0bDtcbiBcdFx0fVxuIFxuK1x0XHRpZiAoZmxhZ3MgXHUwMDI2IElDRV9UQ19GTFdSX0ZJRUxEX0lQX1BST1RPKSB7XG4rXHRcdFx0aGRyX2gtXHUwMDNlbmV4dF9oZHIgPSBoZWFkZXJzLVx1MDAzZWwzX2tleS5pcF9wcm90bztcbitcdFx0XHRoZHJfbS1cdTAwM2VuZXh0X2hkciA9IGhlYWRlcnMtXHUwMDNlbDNfbWFzay5pcF9wcm90bztcbitcdFx0fVxuK1xuIFx0XHRpKys7XG4gXHR9XG4gXG5AQCAtMTczNyw2ICsxNzUyLDkgQEAgaWNlX3BhcnNlX2Nsc19mbG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlcl9kZXYsIHN0cnVjdCBpY2VfdnNpICp2c2ksXG4gXHRcdGhlYWRlcnMtXHUwMDNlbDJfa2V5Lm5fcHJvdG8gPSBjcHVfdG9fYmUxNihuX3Byb3RvX2tleSk7XG4gXHRcdGhlYWRlcnMtXHUwMDNlbDJfbWFzay5uX3Byb3RvID0gY3B1X3RvX2JlMTYobl9wcm90b19tYXNrKTtcbiBcdFx0aGVhZGVycy1cdTAwM2VsM19rZXkuaXBfcHJvdG8gPSBtYXRjaC5rZXktXHUwMDNlaXBfcHJvdG87XG4rXHRcdGhlYWRlcnMtXHUwMDNlbDNfbWFzay5pcF9wcm90byA9IG1hdGNoLm1hc2stXHUwMDNlaXBfcHJvdG87XG4rXHRcdGlmIChtYXRjaC5tYXNrLVx1MDAzZWlwX3Byb3RvKVxuK1x0XHRcdGZsdHItXHUwMDNlZmxhZ3MgfD0gSUNFX1RDX0ZMV1JfRklFTERfSVBfUFJPVE87XG4gXHR9XG4gXG4gXHRpZiAoZmxvd19ydWxlX21hdGNoX2tleShydWxlLCBGTE9XX0RJU1NFQ1RPUl9LRVlfRVRIX0FERFJTKSkge1xuQEAgLTE5MTAsNiArMTkyOCwxOSBAQCBpY2VfcGFyc2VfY2xzX2Zsb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZmlsdGVyX2Rldiwgc3RydWN0IGljZV92c2kgKnZzaSxcbiBcdFx0fVxuIFx0fVxuIFxuK1x0aWYgKGZsdHItXHUwMDNlZmxhZ3MgXHUwMDI2IChJQ0VfVENfRkxXUl9GSUVMRF9ERVNUX0w0X1BPUlQgfFxuK1x0XHRcdCAgIElDRV9UQ19GTFdSX0ZJRUxEX1NSQ19MNF9QT1JUIHxcbitcdFx0XHQgICBJQ0VfVENfRkxXUl9GSUVMRF9MMlRQVjNfU0VTU0lEKSlcbitcdFx0Zmx0ci1cdTAwM2VmbGFncyBcdTAwMjY9IH5JQ0VfVENfRkxXUl9GSUVMRF9JUF9QUk9UTztcbitcbitcdGlmICgoZmx0ci1cdTAwM2VmbGFncyBcdTAwMjYgSUNFX1RDX0ZMV1JfRklFTERfSVBfUFJPVE8pIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGhlYWRlcnMtXHUwMDNlbDJfa2V5Lm5fcHJvdG8gIT0gaHRvbnMoRVRIX1BfSVApIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGhlYWRlcnMtXHUwMDNlbDJfa2V5Lm5fcHJvdG8gIT0gaHRvbnMoRVRIX1BfSVBWNikpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGZsdHItXHUwMDNlZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJJUCBwcm90b2NvbCBtYXRjaCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggR1RQIG9yIFBQUG9FXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4gXHQvKiBJbmdyZXNzIGZpbHRlciBvbiByZXByZXNlbnRvciByZXN1bHRzIGluIGFuIGVncmVzcyBmaWx0ZXIgaW4gSFdcbiBcdCAqIGFuZCB2aWNlIHZlcnNhXG4gXHQgKi9cbkBAIC0yMjM4LDYgKzIyNjksMTEyIEBAIGljZV9maW5kX3RjX2Zsb3dlcl9mbHRyKHN0cnVjdCBpY2VfcGYgKnBmLCB1bnNpZ25lZCBsb25nIGNvb2tpZSlcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbisvKipcbisgKiBpY2VfdGNfZmx0cl9pc19kcm9wIC0gY2hlY2sgaWYgYSBmaWx0ZXIgY2FycmllcyBhIGRyb3AgYWN0aW9uXG4rICogQGNsc19mbG93ZXI6IG9mZmxvYWQgcmVxdWVzdCBkZXNjcmliaW5nIHRoZSBmaWx0ZXJcbisgKlxuKyAqIFJldHVybjogdHJ1ZSBpZiBhbnkgYWN0aW9uIG9mIHRoZSBmaWx0ZXIgaXMgYSBkcm9wLCBmYWxzZSBvdGhlcndpc2UuXG4rICovXG4rc3RhdGljIGJvb2wgaWNlX3RjX2ZsdHJfaXNfZHJvcChzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqY2xzX2Zsb3dlcilcbit7XG4rXHRzdHJ1Y3QgZmxvd19ydWxlICpydWxlID0gZmxvd19jbHNfb2ZmbG9hZF9mbG93X3J1bGUoY2xzX2Zsb3dlcik7XG4rXHRzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmFjdDtcbitcdGludCBpO1xuK1xuK1x0aWYgKGNsc19mbG93ZXItXHUwMDNlY2xhc3NpZClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Zmxvd19hY3Rpb25fZm9yX2VhY2goaSwgYWN0LCBcdTAwMjZydWxlLVx1MDAzZWFjdGlvbilcbitcdFx0aWYgKGFjdC1cdTAwM2VpZCA9PSBGTE9XX0FDVElPTl9EUk9QKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbisvKipcbisgKiBpY2VfdGNfdW50cmFja19zd19mbHRyIC0gZm9yZ2V0IGEgdHJhY2tlZCBzb2Z0d2FyZS1vbmx5IGZpbHRlclxuKyAqIEBwZjogcG9pbnRlciB0byBQRiBzdHJ1Y3R1cmVcbisgKiBAY29va2llOiB1bmlxdWUgZmlsdGVyIGlkZW50aWZpZXIgZnJvbSB0aGUgb2ZmbG9hZCByZXF1ZXN0XG4rICpcbisgKiBSZXR1cm46IHRydWUgaWYgdGhlIGZpbHRlciB3YXMgdHJhY2tlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuKyAqL1xuK3N0YXRpYyBib29sIGljZV90Y191bnRyYWNrX3N3X2ZsdHIoc3RydWN0IGljZV9wZiAqcGYsIHVuc2lnbmVkIGxvbmcgY29va2llKVxuK3tcbitcdHN0cnVjdCBpY2VfdGNfc3dfZmx0ciAqc3dfZmx0cjtcbitcbitcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KHN3X2ZsdHIsIFx1MDAyNnBmLVx1MDAzZXRjX3N3X2ZsdHJfbGlzdCwgbm9kZSkge1xuK1x0XHRpZiAoc3dfZmx0ci1cdTAwM2Vjb29raWUgIT0gY29va2llKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRobGlzdF9kZWwoXHUwMDI2c3dfZmx0ci1cdTAwM2Vub2RlKTtcbitcdFx0a2ZyZWUoc3dfZmx0cik7XG4rXHRcdHJldHVybiB0cnVlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbisvKipcbisgKiBpY2VfdGNfdHJhY2tfc3dfZmx0ciAtIHJlbWVtYmVyIGEgZmlsdGVyIHRoYXQgd2FzIG5vdCBvZmZsb2FkZWRcbisgKiBAcGY6IHBvaW50ZXIgdG8gUEYgc3RydWN0dXJlXG4rICogQGZpbHRlcl9kZXY6IGRldmljZSB0aGUgZmlsdGVyIHdhcyByZXF1ZXN0ZWQgb25cbisgKiBAY2xzX2Zsb3dlcjogb2ZmbG9hZCByZXF1ZXN0IGRlc2NyaWJpbmcgdGhlIGZpbHRlclxuKyAqIEBkaXJlY3Rpb246IGJsb2NrIGRpcmVjdGlvbiB0aGUgZmlsdGVyIHdhcyByZXF1ZXN0ZWQgZm9yXG4rICovXG4rc3RhdGljIHZvaWQgaWNlX3RjX3RyYWNrX3N3X2ZsdHIoc3RydWN0IGljZV9wZiAqcGYsXG4rXHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlcl9kZXYsXG4rXHRcdFx0XHQgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIsXG4rXHRcdFx0XHQgZW51bSBpY2VfZXN3aXRjaF9mbHRyX2RpcmVjdGlvbiBkaXJlY3Rpb24pXG4re1xuK1x0c3RydWN0IGljZV90Y19zd19mbHRyICpzd19mbHRyO1xuK1xuK1x0aGxpc3RfZm9yX2VhY2hfZW50cnkoc3dfZmx0ciwgXHUwMDI2cGYtXHUwMDNldGNfc3dfZmx0cl9saXN0LCBub2RlKVxuK1x0XHRpZiAoc3dfZmx0ci1cdTAwM2Vjb29raWUgPT0gY2xzX2Zsb3dlci1cdTAwM2Vjb29raWUpXG4rXHRcdFx0cmV0dXJuO1xuK1xuK1x0c3dfZmx0ciA9IGt6YWxsb2Nfb2JqKCpzd19mbHRyKTtcbitcdGlmICghc3dfZmx0cilcbitcdFx0cmV0dXJuO1xuK1xuK1x0c3dfZmx0ci1cdTAwM2Vjb29raWUgPSBjbHNfZmxvd2VyLVx1MDAzZWNvb2tpZTtcbitcdHN3X2ZsdHItXHUwMDNlZmlsdGVyX2RldiA9IGZpbHRlcl9kZXY7XG4rXHRzd19mbHRyLVx1MDAzZXByaW8gPSBjbHNfZmxvd2VyLVx1MDAzZWNvbW1vbi5wcmlvO1xuK1x0c3dfZmx0ci1cdTAwM2VkaXJlY3Rpb24gPSBkaXJlY3Rpb247XG4rXHRzd19mbHRyLVx1MDAzZWlzX2Ryb3AgPSBpY2VfdGNfZmx0cl9pc19kcm9wKGNsc19mbG93ZXIpO1xuK1x0aGxpc3RfYWRkX2hlYWQoXHUwMDI2c3dfZmx0ci1cdTAwM2Vub2RlLCBcdTAwMjZwZi1cdTAwM2V0Y19zd19mbHRyX2xpc3QpO1xuK31cbitcbisvKipcbisgKiBpY2VfdGNfZHJvcF9ieXBhc3Nlc19mbHRyIC0gY2hlY2sgaWYgYSBkcm9wIHJ1bGUgd291bGQgYnlwYXNzIGEgZmlsdGVyXG4rICogQHBmOiBwb2ludGVyIHRvIFBGIHN0cnVjdHVyZVxuKyAqIEBmaWx0ZXJfZGV2OiBkZXZpY2UgdGhlIGRyb3AgZmlsdGVyIGlzIHJlcXVlc3RlZCBvblxuKyAqIEBwcmlvOiBUQyBwcmlvcml0eSBvZiB0aGUgZHJvcCBmaWx0ZXJcbisgKiBAZGlyZWN0aW9uOiBibG9jayBkaXJlY3Rpb24gb2YgdGhlIGRyb3AgZmlsdGVyXG4rICpcbisgKiBSZXR1cm46IHRydWUgaWYgc3VjaCBhIGZpbHRlciBleGlzdHMsIGZhbHNlIG90aGVyd2lzZS5cbisgKi9cbitzdGF0aWMgYm9vbFxuK2ljZV90Y19kcm9wX2J5cGFzc2VzX2ZsdHIoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXJfZGV2LFxuK1x0XHRcdCAgdTMyIHByaW8sIGVudW0gaWNlX2Vzd2l0Y2hfZmx0cl9kaXJlY3Rpb24gZGlyZWN0aW9uKVxuK3tcbitcdHN0cnVjdCBpY2VfdGNfZmxvd2VyX2ZsdHIgKmZsdHI7XG4rXHRzdHJ1Y3QgaWNlX3RjX3N3X2ZsdHIgKnN3X2ZsdHI7XG4rXG4rXHRobGlzdF9mb3JfZWFjaF9lbnRyeShzd19mbHRyLCBcdTAwMjZwZi1cdTAwM2V0Y19zd19mbHRyX2xpc3QsIG5vZGUpXG4rXHRcdGlmIChzd19mbHRyLVx1MDAzZWZpbHRlcl9kZXYgPT0gZmlsdGVyX2RldiBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHN3X2ZsdHItXHUwMDNlZGlyZWN0aW9uID09IGRpcmVjdGlvbiBcdTAwMjZcdTAwMjYgc3dfZmx0ci1cdTAwM2VwcmlvIFx1MDAzYyBwcmlvIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIXN3X2ZsdHItXHUwMDNlaXNfZHJvcClcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KGZsdHIsIFx1MDAyNnBmLVx1MDAzZXRjX2Zsb3dlcl9mbHRyX2xpc3QsIHRjX2Zsb3dlcl9ub2RlKVxuK1x0XHRpZiAoZmx0ci1cdTAwM2VmaWx0ZXJfZGV2ID09IGZpbHRlcl9kZXYgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBmbHRyLVx1MDAzZWRpcmVjdGlvbiA9PSBkaXJlY3Rpb24gXHUwMDI2XHUwMDI2IGZsdHItXHUwMDNlcHJpbyBcdTAwM2MgcHJpbyBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGZsdHItXHUwMDNlYWN0aW9uLmZsdHJfYWN0ICE9IElDRV9EUk9QX1BBQ0tFVClcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4gLyoqXG4gICogaWNlX2FkZF9jbHNfZmxvd2VyIC0gYWRkIFRDIGZsb3dlciBmaWx0ZXJzXG4gICogQG5ldGRldjogUG9pbnRlciB0byBmaWx0ZXIgZGV2aWNlXG5AQCAtMjI1MywxNCArMjM5MCwyNCBAQCBpbnQgaWNlX2FkZF9jbHNfZmxvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBpY2VfdnNpICp2c2ksXG4ge1xuIFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gY2xzX2Zsb3dlci1cdTAwM2Vjb21tb24uZXh0YWNrO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKnZzaV9uZXRkZXYgPSB2c2ktXHUwMDNlbmV0ZGV2O1xuK1x0ZW51bSBpY2VfZXN3aXRjaF9mbHRyX2RpcmVjdGlvbiBkaXJlY3Rpb247XG4gXHRzdHJ1Y3QgaWNlX3RjX2Zsb3dlcl9mbHRyICpmbHRyO1xuIFx0c3RydWN0IGljZV9wZiAqcGYgPSB2c2ktXHUwMDNlYmFjaztcbitcdGJvb2wgdHJhY2tfc3dfZmx0cnM7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKGljZV9pc19yZXNldF9pbl9wcm9ncmVzcyhwZi1cdTAwM2VzdGF0ZSkpXG4tXHRcdHJldHVybiAtRUJVU1k7XG4tXHRpZiAodGVzdF9iaXQoSUNFX0ZMQUdfRldfTExEUF9BR0VOVCwgcGYtXHUwMDNlZmxhZ3MpKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGRpcmVjdGlvbiA9IGluZ3Jlc3MgPyBJQ0VfRVNXSVRDSF9GTFRSX0lOR1JFU1MgOlxuK1x0XHRcdCAgICAgIElDRV9FU1dJVENIX0ZMVFJfRUdSRVNTO1xuK1x0dHJhY2tfc3dfZmx0cnMgPSAhaWNlX2lzX2Vzd2l0Y2hfbW9kZV9zd2l0Y2hkZXYocGYpO1xuK1xuK1x0aWYgKGljZV9pc19yZXNldF9pbl9wcm9ncmVzcyhwZi1cdTAwM2VzdGF0ZSkpIHtcbitcdFx0ZXJyID0gLUVCVVNZO1xuK1x0XHRnb3RvIHRyYWNrX3N3O1xuK1x0fVxuK1x0aWYgKHRlc3RfYml0KElDRV9GTEFHX0ZXX0xMRFBfQUdFTlQsIHBmLVx1MDAzZWZsYWdzKSkge1xuK1x0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIHRyYWNrX3N3O1xuK1x0fVxuIFxuIFx0aWYgKGljZV9pc19wb3J0X3JlcHJfbmV0ZGV2KG5ldGRldikpXG4gXHRcdHZzaV9uZXRkZXYgPSBuZXRkZXY7XG5AQCAtMjI3Myw3ICsyNDIwLDggQEAgaW50IGljZV9hZGRfY2xzX2Zsb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgaWNlX3ZzaSAqdnNpLFxuIFx0XHQgKi9cbiBcdFx0aWYgKG5ldGRldiA9PSB2c2lfbmV0ZGV2KVxuIFx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwiY2FuJ3QgYXBwbHkgVEMgZmxvd2VyIGZpbHRlcnMsIHR1cm4gT04gaHctdGMtb2ZmbG9hZCBhbmQgdHJ5IGFnYWluXCIpO1xuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0Z290byB0cmFja19zdztcbiBcdH1cbiBcbiBcdC8qIGF2b2lkIGR1cGxpY2F0ZSBlbnRyaWVzLCBpZiBleGlzdHMgLSByZXR1cm4gZXJyb3IgKi9cbkBAIC0yMjgzLDE0ICsyNDMxLDMyIEBAIGludCBpY2VfYWRkX2Nsc19mbG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGljZV92c2kgKnZzaSxcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXHR9XG4gXG4rXHRpZiAodHJhY2tfc3dfZmx0cnMgXHUwMDI2XHUwMDI2ICFjbHNfZmxvd2VyLVx1MDAzZWNvbW1vbi5za2lwX3N3IFx1MDAyNlx1MDAyNlxuK1x0ICAgIGljZV90Y19mbHRyX2lzX2Ryb3AoY2xzX2Zsb3dlcikgXHUwMDI2XHUwMDI2XG4rXHQgICAgaWNlX3RjX2Ryb3BfYnlwYXNzZXNfZmx0cihwZiwgbmV0ZGV2LCBjbHNfZmxvd2VyLVx1MDAzZWNvbW1vbi5wcmlvLFxuK1x0XHRcdFx0ICAgICAgZGlyZWN0aW9uKSkge1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJEcm9wIGZpbHRlciBub3Qgb2ZmbG9hZGVkIGJlY2F1c2UgaXQgd291bGQgYnlwYXNzIGEgaGlnaGVyIHByaW9yaXR5IGZpbHRlclwiKTtcbitcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4rXHRcdGdvdG8gdHJhY2tfc3c7XG4rXHR9XG4rXG4gXHQvKiBwcmVwIGFuZCBhZGQgVEMtZmxvd2VyIGZpbHRlciBpbiBIVyAqL1xuIFx0ZXJyID0gaWNlX2FkZF90Y19mbHRyKG5ldGRldiwgdnNpLCBjbHNfZmxvd2VyLCBcdTAwMjZmbHRyLCBpbmdyZXNzKTtcbiBcdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4rXHRcdGdvdG8gdHJhY2tfc3c7XG4rXG4rXHRmbHRyLVx1MDAzZWZpbHRlcl9kZXYgPSBuZXRkZXY7XG4rXHRmbHRyLVx1MDAzZXByaW8gPSBjbHNfZmxvd2VyLVx1MDAzZWNvbW1vbi5wcmlvO1xuIFxuIFx0LyogYWRkIGZpbHRlciBpbnRvIGFuIG9yZGVyZWQgbGlzdCAqL1xuIFx0aGxpc3RfYWRkX2hlYWQoXHUwMDI2Zmx0ci1cdTAwM2V0Y19mbG93ZXJfbm9kZSwgXHUwMDI2cGYtXHUwMDNldGNfZmxvd2VyX2ZsdHJfbGlzdCk7XG4gXHRyZXR1cm4gMDtcbitcbit0cmFja19zdzpcbitcdGlmICh0cmFja19zd19mbHRycyBcdTAwMjZcdTAwMjYgIWNsc19mbG93ZXItXHUwMDNlY29tbW9uLnNraXBfc3cpXG4rXHRcdGljZV90Y190cmFja19zd19mbHRyKHBmLCBuZXRkZXYsIGNsc19mbG93ZXIsIGRpcmVjdGlvbik7XG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiAvKipcbkBAIC0yMzA1LDYgKzI0NzEsOSBAQCBpY2VfZGVsX2Nsc19mbG93ZXIoc3RydWN0IGljZV92c2kgKnZzaSwgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpXG4gXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHZzaS1cdTAwM2ViYWNrO1xuIFx0aW50IGVycjtcbiBcbitcdGlmIChpY2VfdGNfdW50cmFja19zd19mbHRyKHBmLCBjbHNfZmxvd2VyLVx1MDAzZWNvb2tpZSkpXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0LyogZmluZCBmaWx0ZXIgKi9cbiBcdGZsdHIgPSBpY2VfZmluZF90Y19mbG93ZXJfZmx0cihwZiwgY2xzX2Zsb3dlci1cdTAwM2Vjb29raWUpO1xuIFx0aWYgKCFmbHRyKSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90Y19saWIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdGNfbGliLmhcbmluZGV4IDhhM2FiMmYyMmFmOWIuLjM3ZDZmNDEwMGVjZmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RjX2xpYi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RjX2xpYi5oXG5AQCAtMzgsNiArMzgsNyBAQFxuICNkZWZpbmUgSUNFX1RDX0ZMV1JfRklFTERfQ1ZMQU5fUFJJT1x0XHRCSVQoMjgpXG4gI2RlZmluZSBJQ0VfVENfRkxXUl9GSUVMRF9WTEFOX1RQSURcdFx0QklUKDI5KVxuICNkZWZpbmUgSUNFX1RDX0ZMV1JfRklFTERfUEZDUF9PUFRTXHRcdEJJVCgzMClcbisjZGVmaW5lIElDRV9UQ19GTFdSX0ZJRUxEX0lQX1BST1RPXHRcdEJJVCgzMSlcbiBcbiAjZGVmaW5lIElDRV9UQ19GTE9XRVJfTUFTS18zMiAgIDB4RkZGRkZGRkZcbiBcbkBAIC0xMzgsMTIgKzEzOSwzMyBAQCBlbnVtIGljZV9lc3dpdGNoX2ZsdHJfZGlyZWN0aW9uIHtcbiBcdElDRV9FU1dJVENIX0ZMVFJfRUdSRVNTLFxuIH07XG4gXG4rLyoqXG4rICogc3RydWN0IGljZV90Y19zd19mbHRyIC0gZmlsdGVyIHByZXNlbnRlZCB0byB0aGUgZHJpdmVyIGJ1dCBub3Qgb2ZmbG9hZGVkXG4rICogQG5vZGU6IG5vZGUgaW4gdGhlIHBmLVx1MDAzZXRjX3N3X2ZsdHJfbGlzdFxuKyAqIEBjb29raWU6IHVuaXF1ZSBmaWx0ZXIgaWRlbnRpZmllciBmcm9tIHRoZSBvZmZsb2FkIHJlcXVlc3RcbisgKiBAZmlsdGVyX2RldjogZGV2aWNlIHRoZSBmaWx0ZXIgd2FzIHJlcXVlc3RlZCBvblxuKyAqIEBwcmlvOiBUQyBwcmlvcml0eSwgbG93ZXIgdmFsdWUgaXMgZXZhbHVhdGVkIGZpcnN0XG4rICogQGRpcmVjdGlvbjogYmxvY2sgZGlyZWN0aW9uIHRoZSBmaWx0ZXIgd2FzIHJlcXVlc3RlZCBmb3JcbisgKiBAaXNfZHJvcDogdGhlIGZpbHRlciBjYXJyaWVzIGEgZHJvcCBhY3Rpb25cbisgKi9cbitzdHJ1Y3QgaWNlX3RjX3N3X2ZsdHIge1xuK1x0c3RydWN0IGhsaXN0X25vZGUgbm9kZTtcbitcdHVuc2lnbmVkIGxvbmcgY29va2llO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlcl9kZXY7XG4rXHR1MzIgcHJpbztcbitcdGVudW0gaWNlX2Vzd2l0Y2hfZmx0cl9kaXJlY3Rpb24gZGlyZWN0aW9uO1xuK1x0Ym9vbCBpc19kcm9wO1xuK307XG4rXG4gc3RydWN0IGljZV90Y19mbG93ZXJfZmx0ciB7XG4gXHRzdHJ1Y3QgaGxpc3Rfbm9kZSB0Y19mbG93ZXJfbm9kZTtcbiBcbiBcdC8qIGNvb2tpZSBiZWNvbWVzIGZpbHRlcl9ydWxlX2lkIGlmIHJ1bGUgaXMgYWRkZWQgc3VjY2Vzc2Z1bGx5ICovXG4gXHR1bnNpZ25lZCBsb25nIGNvb2tpZTtcbiBcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXJfZGV2O1xuK1x0dTMyIHByaW87XG4rXG4gXHQvKiBhZGRfYWR2X3J1bGUgcmV0dXJucyBpbmZvcm1hdGlvbiBsaWtlIHJlY2lwZSBJRCwgcnVsZV9pZC4gU3RvcmVcbiBcdCAqIHRob3NlIHZhbHVlcyBzaW5jZSB0aGV5IGFyZSBuZWVkZWQgdG8gcmVtb3ZlIGFkdmFuY2VkIHJ1bGVcbiBcdCAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTc6NTc6MjcuNjQ3NDM5NDZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MTg3NTE4NTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgSUNFIERyaXZlciBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBkZWNpZGUgaWYgaXQncyBhIGdvb2QgY2FuZGlkYXRlIGZvciBzeXprYWxsZXIgZnV6emluZy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS4gT2theSwgaXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIHRvdWNoZXMgZmlsZXMgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2AgZGlyZWN0b3J5IOKAkyBgaWNlLmhgLCBgaWNlX3RjX2xpYi5jYCwgYW5kIGBpY2VfdGNfbGliLmhgIHNwZWNpZmljYWxseS4gU28sIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgSW50ZWwgRXRoZXJuZXQgQ29udHJvbGxlciBFODAwIHNlcmllcyBkcml2ZXIsIGFsc28ga25vd24gYXMgdGhlIElDRSBkcml2ZXIuIFRoYXQgbmFycm93cyBvdXIgZm9jdXMuXG5cbk5vdywgbGV0J3MgYnJpbmcgdGhlIHRyaWFnZSBwaGlsb3NvcGh5IGludG8gcGxheSwgc3BlY2lmaWNhbGx5IFNlY3Rpb24gMiwgd2hpY2ggZGVhbHMgd2l0aCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuIFdlIG5lZWQgdG8gYXNjZXJ0YWluIGlmIHRoZSBJQ0UgZHJpdmVyIGZhbGxzIGludG8gdGhlIGNhdGVnb3J5IG9mIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIHRoYXQgcmVxdWlyZSBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgYnkgc3RhbmRhcmQgUUVNVSBvciBzeXprYWxsZXIuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGlzIHRoZSBgaWNlYCBkcml2ZXIgb25lIG9mIHRob3NlPyBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggaWYgaXQgcmVxdWlyZXMgc3BlY2lhbGl6ZWQgaGFyZHdhcmUuIFRoZSBiZXN0IHdheSBmb3J3YXJkIGlzIHRvIHVzZSBgZ3JlcHBlcmAgdG8gc2VlIGhvdyB0aGUgYGljZWAgZHJpdmVyIGlzIGNvbmZpZ3VyZWQgYW5kIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBxdWlja2x5IGdpdmUgbWUgYW4gb3ZlcnZpZXcgb2YgaXRzIGRlcGVuZGVuY2llcyBhbmQgd2hldGhlciBpdCdzIGluaGVyZW50bHkgdGllZCB0byBhIHNwZWNpZmljIHBoeXNpY2FsIHNldHVwIHRoYXQgbWFrZXMgaXQgYW4gdW5zdWl0YWJsZSBjYW5kaWRhdGUgZm9yIHN5emthbGxlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM0OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE3OjU3OjM0LjgzNDk2MDQ2NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODI3MDU3NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZz0yNjg9Y29uZmlnIEk0MEVWRlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yOTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzoyOTE6Y29uZmlnIElDRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjkyLVxcdHRyaXN0YXRlIFxcXCJJbnRlbChSKSBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIFN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMxOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMyMDpjb25maWcgSUNFX0hXTU9OXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zMjEtXFx0Ym9vbCBcXFwiSW50ZWwoUikgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBTdXBwb3J0IEhXTU9OIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMzMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMzMTpjb25maWcgSUNFX1NXSVRDSERFVlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMzMyLVxcdGJvb2wgXFxcIlN3aXRjaGRldiBTdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzozNDU6Y29uZmlnIElDRV9IV1RTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zNDYtXFx0Ym9vbCBcXFwiU3VwcG9ydCBIVyBjcm9zcy10aW1lc3RhbXAgb24gcGxhdGZvcm1zIHdpdGggUFRNIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE3OjU3OjM1LjAxNzY3NTQ4N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NjQyNjM1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEludGVsIEU4MDAgTklDIERyaXZlciBQcm9iZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgYmFzaWNzLiBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHRoYXQgdGhlIGBpY2VgIGRyaXZlciBpcywgaW4gZmFjdCwgdGhlIGNvcnJlY3QgUENJIGRldmljZSBkcml2ZXIgZm9yIHRoZSBJbnRlbCBFODAwIHNlcmllcyBOSUNzLiBUaGlzIG1lYW5zIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBkcml2ZXIncyBwcm9iZSByb3V0aW5lLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBob3cgaXQgaWRlbnRpZmllcyB0aGUgZGV2aWNlIGJhc2VkIG9uIGl0cyBQQ0kgSURzLiBBIHF1aWNrIGNoZWNrIG9mIHRoZSBQQ0kgSURzIHdpbGwgY29uZmlybSB0aGF0IHdlIGFyZSBpbmRlZWQgbG9va2luZyBhdCB0aGUgY29ycmVjdCBkcml2ZXIuIE5vdGhpbmcgbGlrZSBhIG1ldGhvZGljYWwgc3RhcnQgdG8gYSBwb3RlbnRpYWxseSBjb21wbGV4IGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNTIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNzo1NzozNy44ODE5NDMxMDdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY2MTI1ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWNlX3BjaV90YmxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTUxMTc9c3RhdGljIGludCBpY2VfcHJvYmVfcmVjb3ZlcnlfbW9kZShzdHJ1Y3QgaWNlX3BmICpwZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxNDktICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTE1MDogKiBAZW50OiBlbnRyeSBpbiBpY2VfcGNpX3RibFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxNTEtICpcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTU3NzE9c3RhdGljIHZvaWQgaWNlX3BjaV9lcnJfcmVzZXRfZG9uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTU3NzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTc3NjovKiBpY2VfcGNpX3RibCAtIFBDSSBEZXZpY2UgSUQgVGFibGVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01Nzc3LSAqXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01NzgzLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjU3ODQ6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGljZV9wY2lfdGJsW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTc4NS1cXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MTBDX0JBQ0tQTEFORSkgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTU4MzYtfTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1ODM3Ok1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpY2VfcGNpX3RibCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTgzOC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTU4NDk9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGljZV9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTg1MC1cXHQubmFtZSA9IEtCVUlMRF9NT0ROQU1FLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjU4NTE6XFx0LmlkX3RhYmxlID0gaWNlX3BjaV90YmwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTg1Mi1cXHQucHJvYmUgPSBpY2VfcHJvYmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE3OjU3OjM3LjkzODU3NTQzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODk0MTEzMTI5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZlYXNpYmlsaXR5IG9mIEZ1enppbmcgdGhlIGBpY2VgIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gd2hldGhlciB3ZSBjYW4gYWN0dWFsbHkgZnV6eiB0aGUgYGljZWAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgd2l0aG91dCByZXF1aXJpbmcgYSBwaHlzaWNhbCBJbnRlbCBFODAwIHNlcmllcyBQQ0llIGNhcmQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHNpbmNlIGl0J3MgYW4gZW50ZXJwcmlzZS1ncmFkZSBOSUMsIG15IGd1dCBzYXlzIGl0IHByb2JhYmx5IG5lZWRzIHRoZSBwaHlzaWNhbCBoYXJkd2FyZS4gUUVNVSBkZWZpbml0ZWx5IGRvZXNuJ3QgZW11bGF0ZSB0aGUgYGljZWAgaGFyZHdhcmUsIGl0IGZvY3VzZXMgb24gdGhlIG1vcmUgY29tbW9uIHN0dWZmIGxpa2UgYGUxMDAwYCwgYHZteG5ldDNgLCBhbmQgYHZpcnRpby1uZXRgLiBUaGUgdGV4dCBJJ20gbG9va2luZyBhdCBjb25maXJtcyB0aGlzOiBgaWNlYCByZXF1aXJlcyBhIHJlYWwgQVNJQy9QQ0llIGNhcmQsIGxpa2UgdGhlIEludGVsIEU4MTAgb3IgRTgwMCBzZXJpZXMuXG5cblRoYXQgXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIiBzZWN0aW9uIGluIHRoZSBkb2NzIGltbWVkaWF0ZWx5IGNsaWNrcy4gV2UncmUgdGFsa2luZyBhYm91dCBkcml2ZXJzIHRoYXQgYXJlIHRpZWQgdG8gc3BlY2lmaWMgaGFyZHdhcmUgYW5kIGFyZW4ndCBnb2luZyB0byBydW4gd2l0aG91dCBpdCwganVzdCBsaWtlIGBtbHhzd2AsIGBwZHNfY29yZWAsIGV0Yy4gVGhlIGBpY2VgIGRyaXZlciAqZGVmaW5pdGVseSogZml0cyB0aGlzIGRlc2NyaXB0aW9uLiBTaW5jZSB3ZSdyZSBtaXNzaW5nIHRoZSBwaHlzaWNhbCBjYXJkIG9yIHByb3BlciBlbXVsYXRpb24sIGZ1bmN0aW9ucyBsaWtlIGBpY2VfcHJvYmVgIHdvbid0IGV2ZXIgYmUgY2FsbGVkLCBhbmQgdGhlcmVmb3JlIHdlJ2xsIG5ldmVyIHNlZSB0aGluZ3MgbGlrZSBgaWNlX3BmYCwgb3IgYGljZV9hZGRfY2xzX2Zsb3dlcmAuXG5cbkknbSBub3cgY2hlY2tpbmcgaWYgdGhlcmUncyBhbnkgY2xldmVyIG1vY2sgb3IgdmlydHVhbCBkcml2ZXIgbW9kZSBidXJpZWQgaW4gdGhlIGNvZGUsIG9yIGlmIHNvbWUgb2JzY3VyZSBjb25maWd1cmF0aW9uIGZsYWdzIGNhbiBicmluZyBpdCB0byBsaWZlLiBBIHF1aWNrIGxvb2sgYXQgdGhlIHBhdGNoIGRpZmYgY29uZmlybXMgdGhhdCB0aGUgY2hhbmdlcyBhcmUgaXNvbGF0ZWQgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2AgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgaW4gYGljZS5oYCwgYGljZV90Y19saWIuY2AsIGFuZCBgaWNlX3RjX2xpYi5oYC5cblxuR2l2ZW4gYWxsIHRoaXMsIEknbSBwcmV0dHkgY29uZmlkZW50IGluIG15IGNvbmNsdXNpb24uIEJlY2F1c2UgdGhlIHBhdGNoIGRpcmVjdGx5IGludm9sdmVzIGEgZHJpdmVyIHRoYXQgb25seSB3b3JrcyB3aXRoIHBoeXNpY2FsIGhhcmR3YXJlIHVuYXZhaWxhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZnV6emluZyBpcyBlc3NlbnRpYWxseSBhIG5vLWdvIGZvciB0aGlzIHBhdGNoLiBUaGUgcmVsZXZhbnQgZmllbGRzIGFyZTpcblxuKiAgIGBXb3J0aEZ1enppbmdgOiBmYWxzZVxuKiAgIGBFbmFibGVDb25maWdzYDogXFxbIF1cbiogICBgRm9jdXNTeW1ib2xzYDogXFxbIF1cbiogICBgUmVhc29uaW5nYDogQ29uY2lzZSBleHBsYW5hdGlvbiB0aGF0IHRoZSBwYXRjaCBpcyBmb3IgdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgZHJpdmVyIChgaWNlYCksIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cblxuTm93IEknbGwgcHJlcCB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwODMsIk91dHB1dFRva2VucyI6MTAxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE3OjU3OjQ2Ljg3OTcxMDM4MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEV0aGVybmV0IEU4MDAgU2VyaWVzIGRyaXZlciAoaWNlKSwgc3BlY2lmaWNhbGx5IFRDIGZsb3dlciBmaWx0ZXIgb2ZmbG9hZCBsb2dpYy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgKEludGVsIEU4MTAvRTgwMCBOSUNzKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEV0aGVybmV0IEU4MDAgU2VyaWVzIGRyaXZlciAoaWNlKSwgc3BlY2lmaWNhbGx5IFRDIGZsb3dlciBmaWx0ZXIgb2ZmbG9hZCBsb2dpYy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgKEludGVsIEU4MTAvRTgwMCBOSUNzKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTc6NTc6NDYuODc5NzQ0NDgxWiIsIlNlcSI6OSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowh9xz2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-10 17:39:45 +0000 UTC FinishedAt: 2026-09-10 17:57:48 +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+CgkJCTx0ZD4yMDI2LzA5LzEwIDE3OjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEV0aGVybmV0IEU4MDAgU2VyaWVzIGRyaXZlciAoaWNlKSwgc3BlY2lmaWNhbGx5IFRDIGZsb3dlciBmaWx0ZXIgb2ZmbG9hZCBsb2dpYy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgKEludGVsIEU4MTAvRTgwMCBOSUNzKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNzo1NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDA5OTIzNzUwYmFmYzU3MGFjNGIzZmI1NjFlMDYxMzVjNDhhMDgxZDVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAxNzo1NzoyNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmhcbmluZGV4IGRiM2M3MDE1YzU2YzQuLjZjNTk2ZTVhMzE1MTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxuQEAgLTY0Myw2ICYjNDM7NjQzLDcgQEAgc3RydWN0IGljZV9wZiB7XG4gXHQgKi9cbiBcdHUxNiBudW1fZG1hY19jaG5sX2ZsdHJzO1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgdGNfZmxvd2VyX2ZsdHJfbGlzdDtcbiYjNDM7XHRzdHJ1Y3QgaGxpc3RfaGVhZCB0Y19zd19mbHRyX2xpc3Q7XG4gXG4gXHR1NjQgc3VwcG9ydGVkX3J4ZGlkcztcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RjX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90Y19saWIuY1xuaW5kZXggZDIwMzU3YzA0MTI3My4uN2NmYzg5NDFiN2JhNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdGNfbGliLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdGNfbGliLmNcbkBAIC03OCw3ICYjNDM7NzgsOCBAQCBzdGF0aWMgaW50IGljZV90Y19jb3VudF9sa3Vwcyh1MzIgZmxhZ3MsIHN0cnVjdCBpY2VfdGNfZmxvd2VyX2ZsdHIgKmZsdHIpXG4gXHRcdCAgICAgSUNFX1RDX0ZMV1JfRklFTERfREVTVF9JUFY2IHwgSUNFX1RDX0ZMV1JfRklFTERfU1JDX0lQVjYpKVxuIFx0XHRsa3Vwc19jbnQmIzQzOyYjNDM7O1xuIFxuLVx0aWYgKGZsYWdzIFx1MDAyNiAoSUNFX1RDX0ZMV1JfRklFTERfSVBfVE9TIHwgSUNFX1RDX0ZMV1JfRklFTERfSVBfVFRMKSlcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IChJQ0VfVENfRkxXUl9GSUVMRF9JUF9UT1MgfCBJQ0VfVENfRkxXUl9GSUVMRF9JUF9UVEwgfFxuJiM0MztcdFx0ICAgICBJQ0VfVENfRkxXUl9GSUVMRF9JUF9QUk9UTykpXG4gXHRcdGxrdXBzX2NudCYjNDM7JiM0Mzs7XG4gXG4gXHQvKiBhcmUgTDJUUHYzIG9wdGlvbnMgc3BlY2lmaWVkPyAqL1xuQEAgLTU1Miw3ICYjNDM7NTUzLDggQEAgaWNlX3RjX2ZpbGxfcnVsZXMoc3RydWN0IGljZV9odyAqaHcsIHUzMiBmbGFncyxcbiBcdH1cbiBcbiBcdGlmIChoZWFkZXJzLVx1MDAzZWwyX2tleS5uX3Byb3RvID09IGh0b25zKEVUSF9QX0lQKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAoZmxhZ3MgXHUwMDI2IChJQ0VfVENfRkxXUl9GSUVMRF9JUF9UT1MgfCBJQ0VfVENfRkxXUl9GSUVMRF9JUF9UVEwpKSkge1xuJiM0MztcdCAgICAoZmxhZ3MgXHUwMDI2IChJQ0VfVENfRkxXUl9GSUVMRF9JUF9UT1MgfCBJQ0VfVENfRkxXUl9GSUVMRF9JUF9UVEwgfFxuJiM0MztcdFx0ICAgICAgSUNFX1RDX0ZMV1JfRklFTERfSVBfUFJPVE8pKSkge1xuIFx0XHRsaXN0W2ldLnR5cGUgPSBpY2VfcHJvdG9fdHlwZV9mcm9tX2lwdjQoaW5uZXIpO1xuIFxuIFx0XHRpZiAoZmxhZ3MgXHUwMDI2IElDRV9UQ19GTFdSX0ZJRUxEX0lQX1RPUykge1xuQEAgLTU2NywxMSAmIzQzOzU2OSwxOSBAQCBpY2VfdGNfZmlsbF9ydWxlcyhzdHJ1Y3QgaWNlX2h3ICpodywgdTMyIGZsYWdzLFxuIFx0XHRcdFx0aGVhZGVycy1cdTAwM2VsM19tYXNrLnR0bDtcbiBcdFx0fVxuIFxuJiM0MztcdFx0aWYgKGZsYWdzIFx1MDAyNiBJQ0VfVENfRkxXUl9GSUVMRF9JUF9QUk9UTykge1xuJiM0MztcdFx0XHRsaXN0W2ldLmhfdS5pcHY0X2hkci5wcm90b2NvbCA9XG4mIzQzO1x0XHRcdFx0aGVhZGVycy1cdTAwM2VsM19rZXkuaXBfcHJvdG87XG4mIzQzO1x0XHRcdGxpc3RbaV0ubV91LmlwdjRfaGRyLnByb3RvY29sID1cbiYjNDM7XHRcdFx0XHRoZWFkZXJzLVx1MDAzZWwzX21hc2suaXBfcHJvdG87XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHRpJiM0MzsmIzQzOztcbiBcdH1cbiBcbiBcdGlmIChoZWFkZXJzLVx1MDAzZWwyX2tleS5uX3Byb3RvID09IGh0b25zKEVUSF9QX0lQVjYpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIChmbGFncyBcdTAwMjYgKElDRV9UQ19GTFdSX0ZJRUxEX0lQX1RPUyB8IElDRV9UQ19GTFdSX0ZJRUxEX0lQX1RUTCkpKSB7XG4mIzQzO1x0ICAgIChmbGFncyBcdTAwMjYgKElDRV9UQ19GTFdSX0ZJRUxEX0lQX1RPUyB8IElDRV9UQ19GTFdSX0ZJRUxEX0lQX1RUTCB8XG4mIzQzO1x0XHQgICAgICBJQ0VfVENfRkxXUl9GSUVMRF9JUF9QUk9UTykpKSB7XG4gXHRcdHN0cnVjdCBpY2VfaXB2Nl9oZHIgKmhkcl9oLCAqaGRyX207XG4gXG4gXHRcdGhkcl9oID0gXHUwMDI2bGlzdFtpXS5oX3UuaXB2Nl9oZHI7XG5AQCAtNTkyLDYgJiM0Mzs2MDIsMTEgQEAgaWNlX3RjX2ZpbGxfcnVsZXMoc3RydWN0IGljZV9odyAqaHcsIHUzMiBmbGFncyxcbiBcdFx0XHRoZHJfbS1cdTAwM2Vob3BfbGltaXQgPSBoZWFkZXJzLVx1MDAzZWwzX21hc2sudHRsO1xuIFx0XHR9XG4gXG4mIzQzO1x0XHRpZiAoZmxhZ3MgXHUwMDI2IElDRV9UQ19GTFdSX0ZJRUxEX0lQX1BST1RPKSB7XG4mIzQzO1x0XHRcdGhkcl9oLVx1MDAzZW5leHRfaGRyID0gaGVhZGVycy1cdTAwM2VsM19rZXkuaXBfcHJvdG87XG4mIzQzO1x0XHRcdGhkcl9tLVx1MDAzZW5leHRfaGRyID0gaGVhZGVycy1cdTAwM2VsM19tYXNrLmlwX3Byb3RvO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0aSYjNDM7JiM0Mzs7XG4gXHR9XG4gXG5AQCAtMTczNyw2ICYjNDM7MTc1Miw5IEBAIGljZV9wYXJzZV9jbHNfZmxvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXJfZGV2LCBzdHJ1Y3QgaWNlX3ZzaSAqdnNpLFxuIFx0XHRoZWFkZXJzLVx1MDAzZWwyX2tleS5uX3Byb3RvID0gY3B1X3RvX2JlMTYobl9wcm90b19rZXkpO1xuIFx0XHRoZWFkZXJzLVx1MDAzZWwyX21hc2subl9wcm90byA9IGNwdV90b19iZTE2KG5fcHJvdG9fbWFzayk7XG4gXHRcdGhlYWRlcnMtXHUwMDNlbDNfa2V5LmlwX3Byb3RvID0gbWF0Y2gua2V5LVx1MDAzZWlwX3Byb3RvO1xuJiM0MztcdFx0aGVhZGVycy1cdTAwM2VsM19tYXNrLmlwX3Byb3RvID0gbWF0Y2gubWFzay1cdTAwM2VpcF9wcm90bztcbiYjNDM7XHRcdGlmIChtYXRjaC5tYXNrLVx1MDAzZWlwX3Byb3RvKVxuJiM0MztcdFx0XHRmbHRyLVx1MDAzZWZsYWdzIHw9IElDRV9UQ19GTFdSX0ZJRUxEX0lQX1BST1RPO1xuIFx0fVxuIFxuIFx0aWYgKGZsb3dfcnVsZV9tYXRjaF9rZXkocnVsZSwgRkxPV19ESVNTRUNUT1JfS0VZX0VUSF9BRERSUykpIHtcbkBAIC0xOTEwLDYgJiM0MzsxOTI4LDE5IEBAIGljZV9wYXJzZV9jbHNfZmxvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXJfZGV2LCBzdHJ1Y3QgaWNlX3ZzaSAqdnNpLFxuIFx0XHR9XG4gXHR9XG4gXG4mIzQzO1x0aWYgKGZsdHItXHUwMDNlZmxhZ3MgXHUwMDI2IChJQ0VfVENfRkxXUl9GSUVMRF9ERVNUX0w0X1BPUlQgfFxuJiM0MztcdFx0XHQgICBJQ0VfVENfRkxXUl9GSUVMRF9TUkNfTDRfUE9SVCB8XG4mIzQzO1x0XHRcdCAgIElDRV9UQ19GTFdSX0ZJRUxEX0wyVFBWM19TRVNTSUQpKVxuJiM0MztcdFx0Zmx0ci1cdTAwM2VmbGFncyBcdTAwMjY9IH5JQ0VfVENfRkxXUl9GSUVMRF9JUF9QUk9UTztcbiYjNDM7XG4mIzQzO1x0aWYgKChmbHRyLVx1MDAzZWZsYWdzIFx1MDAyNiBJQ0VfVENfRkxXUl9GSUVMRF9JUF9QUk9UTykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGhlYWRlcnMtXHUwMDNlbDJfa2V5Lm5fcHJvdG8gIT0gaHRvbnMoRVRIX1BfSVApIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBoZWFkZXJzLVx1MDAzZWwyX2tleS5uX3Byb3RvICE9IGh0b25zKEVUSF9QX0lQVjYpKSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZmx0ci1cdTAwM2VleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7SVAgcHJvdG9jb2wgbWF0Y2ggaXMgbm90IHN1cHBvcnRlZCB3aXRoIEdUUCBvciBQUFBvRVwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qIEluZ3Jlc3MgZmlsdGVyIG9uIHJlcHJlc2VudG9yIHJlc3VsdHMgaW4gYW4gZWdyZXNzIGZpbHRlciBpbiBIV1xuIFx0ICogYW5kIHZpY2UgdmVyc2FcbiBcdCAqL1xuQEAgLTIyMzgsNiAmIzQzOzIyNjksMTEyIEBAIGljZV9maW5kX3RjX2Zsb3dlcl9mbHRyKHN0cnVjdCBpY2VfcGYgKnBmLCB1bnNpZ25lZCBsb25nIGNvb2tpZSlcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGljZV90Y19mbHRyX2lzX2Ryb3AgLSBjaGVjayBpZiBhIGZpbHRlciBjYXJyaWVzIGEgZHJvcCBhY3Rpb25cbiYjNDM7ICogQGNsc19mbG93ZXI6IG9mZmxvYWQgcmVxdWVzdCBkZXNjcmliaW5nIHRoZSBmaWx0ZXJcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIGFueSBhY3Rpb24gb2YgdGhlIGZpbHRlciBpcyBhIGRyb3AsIGZhbHNlIG90aGVyd2lzZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIGljZV90Y19mbHRyX2lzX2Ryb3Aoc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZmxvd19ydWxlICpydWxlID0gZmxvd19jbHNfb2ZmbG9hZF9mbG93X3J1bGUoY2xzX2Zsb3dlcik7XG4mIzQzO1x0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICphY3Q7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGlmIChjbHNfZmxvd2VyLVx1MDAzZWNsYXNzaWQpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGZsb3dfYWN0aW9uX2Zvcl9lYWNoKGksIGFjdCwgXHUwMDI2cnVsZS1cdTAwM2VhY3Rpb24pXG4mIzQzO1x0XHRpZiAoYWN0LVx1MDAzZWlkID09IEZMT1dfQUNUSU9OX0RST1ApXG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBpY2VfdGNfdW50cmFja19zd19mbHRyIC0gZm9yZ2V0IGEgdHJhY2tlZCBzb2Z0d2FyZS1vbmx5IGZpbHRlclxuJiM0MzsgKiBAcGY6IHBvaW50ZXIgdG8gUEYgc3RydWN0dXJlXG4mIzQzOyAqIEBjb29raWU6IHVuaXF1ZSBmaWx0ZXIgaWRlbnRpZmllciBmcm9tIHRoZSBvZmZsb2FkIHJlcXVlc3RcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIHRoZSBmaWx0ZXIgd2FzIHRyYWNrZWQsIGZhbHNlIG90aGVyd2lzZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIGljZV90Y191bnRyYWNrX3N3X2ZsdHIoc3RydWN0IGljZV9wZiAqcGYsIHVuc2lnbmVkIGxvbmcgY29va2llKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGljZV90Y19zd19mbHRyICpzd19mbHRyO1xuJiM0MztcbiYjNDM7XHRobGlzdF9mb3JfZWFjaF9lbnRyeShzd19mbHRyLCBcdTAwMjZwZi1cdTAwM2V0Y19zd19mbHRyX2xpc3QsIG5vZGUpIHtcbiYjNDM7XHRcdGlmIChzd19mbHRyLVx1MDAzZWNvb2tpZSAhPSBjb29raWUpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGhsaXN0X2RlbChcdTAwMjZzd19mbHRyLVx1MDAzZW5vZGUpO1xuJiM0MztcdFx0a2ZyZWUoc3dfZmx0cik7XG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGljZV90Y190cmFja19zd19mbHRyIC0gcmVtZW1iZXIgYSBmaWx0ZXIgdGhhdCB3YXMgbm90IG9mZmxvYWRlZFxuJiM0MzsgKiBAcGY6IHBvaW50ZXIgdG8gUEYgc3RydWN0dXJlXG4mIzQzOyAqIEBmaWx0ZXJfZGV2OiBkZXZpY2UgdGhlIGZpbHRlciB3YXMgcmVxdWVzdGVkIG9uXG4mIzQzOyAqIEBjbHNfZmxvd2VyOiBvZmZsb2FkIHJlcXVlc3QgZGVzY3JpYmluZyB0aGUgZmlsdGVyXG4mIzQzOyAqIEBkaXJlY3Rpb246IGJsb2NrIGRpcmVjdGlvbiB0aGUgZmlsdGVyIHdhcyByZXF1ZXN0ZWQgZm9yXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBpY2VfdGNfdHJhY2tfc3dfZmx0cihzdHJ1Y3QgaWNlX3BmICpwZixcbiYjNDM7XHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlcl9kZXYsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvd2VyLFxuJiM0MztcdFx0XHRcdCBlbnVtIGljZV9lc3dpdGNoX2ZsdHJfZGlyZWN0aW9uIGRpcmVjdGlvbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpY2VfdGNfc3dfZmx0ciAqc3dfZmx0cjtcbiYjNDM7XG4mIzQzO1x0aGxpc3RfZm9yX2VhY2hfZW50cnkoc3dfZmx0ciwgXHUwMDI2cGYtXHUwMDNldGNfc3dfZmx0cl9saXN0LCBub2RlKVxuJiM0MztcdFx0aWYgKHN3X2ZsdHItXHUwMDNlY29va2llID09IGNsc19mbG93ZXItXHUwMDNlY29va2llKVxuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHN3X2ZsdHIgPSBremFsbG9jX29iaigqc3dfZmx0cik7XG4mIzQzO1x0aWYgKCFzd19mbHRyKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzd19mbHRyLVx1MDAzZWNvb2tpZSA9IGNsc19mbG93ZXItXHUwMDNlY29va2llO1xuJiM0MztcdHN3X2ZsdHItXHUwMDNlZmlsdGVyX2RldiA9IGZpbHRlcl9kZXY7XG4mIzQzO1x0c3dfZmx0ci1cdTAwM2VwcmlvID0gY2xzX2Zsb3dlci1cdTAwM2Vjb21tb24ucHJpbztcbiYjNDM7XHRzd19mbHRyLVx1MDAzZWRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiYjNDM7XHRzd19mbHRyLVx1MDAzZWlzX2Ryb3AgPSBpY2VfdGNfZmx0cl9pc19kcm9wKGNsc19mbG93ZXIpO1xuJiM0MztcdGhsaXN0X2FkZF9oZWFkKFx1MDAyNnN3X2ZsdHItXHUwMDNlbm9kZSwgXHUwMDI2cGYtXHUwMDNldGNfc3dfZmx0cl9saXN0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGljZV90Y19kcm9wX2J5cGFzc2VzX2ZsdHIgLSBjaGVjayBpZiBhIGRyb3AgcnVsZSB3b3VsZCBieXBhc3MgYSBmaWx0ZXJcbiYjNDM7ICogQHBmOiBwb2ludGVyIHRvIFBGIHN0cnVjdHVyZVxuJiM0MzsgKiBAZmlsdGVyX2RldjogZGV2aWNlIHRoZSBkcm9wIGZpbHRlciBpcyByZXF1ZXN0ZWQgb25cbiYjNDM7ICogQHByaW86IFRDIHByaW9yaXR5IG9mIHRoZSBkcm9wIGZpbHRlclxuJiM0MzsgKiBAZGlyZWN0aW9uOiBibG9jayBkaXJlY3Rpb24gb2YgdGhlIGRyb3AgZmlsdGVyXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBzdWNoIGEgZmlsdGVyIGV4aXN0cywgZmFsc2Ugb3RoZXJ3aXNlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGJvb2xcbiYjNDM7aWNlX3RjX2Ryb3BfYnlwYXNzZXNfZmx0cihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlcl9kZXYsXG4mIzQzO1x0XHRcdCAgdTMyIHByaW8sIGVudW0gaWNlX2Vzd2l0Y2hfZmx0cl9kaXJlY3Rpb24gZGlyZWN0aW9uKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGljZV90Y19mbG93ZXJfZmx0ciAqZmx0cjtcbiYjNDM7XHRzdHJ1Y3QgaWNlX3RjX3N3X2ZsdHIgKnN3X2ZsdHI7XG4mIzQzO1xuJiM0MztcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KHN3X2ZsdHIsIFx1MDAyNnBmLVx1MDAzZXRjX3N3X2ZsdHJfbGlzdCwgbm9kZSlcbiYjNDM7XHRcdGlmIChzd19mbHRyLVx1MDAzZWZpbHRlcl9kZXYgPT0gZmlsdGVyX2RldiBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBzd19mbHRyLVx1MDAzZWRpcmVjdGlvbiA9PSBkaXJlY3Rpb24gXHUwMDI2XHUwMDI2IHN3X2ZsdHItXHUwMDNlcHJpbyBcdTAwM2MgcHJpbyBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhc3dfZmx0ci1cdTAwM2Vpc19kcm9wKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0aGxpc3RfZm9yX2VhY2hfZW50cnkoZmx0ciwgXHUwMDI2cGYtXHUwMDNldGNfZmxvd2VyX2ZsdHJfbGlzdCwgdGNfZmxvd2VyX25vZGUpXG4mIzQzO1x0XHRpZiAoZmx0ci1cdTAwM2VmaWx0ZXJfZGV2ID09IGZpbHRlcl9kZXYgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgZmx0ci1cdTAwM2VkaXJlY3Rpb24gPT0gZGlyZWN0aW9uIFx1MDAyNlx1MDAyNiBmbHRyLVx1MDAzZXByaW8gXHUwMDNjIHByaW8gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgZmx0ci1cdTAwM2VhY3Rpb24uZmx0cl9hY3QgIT0gSUNFX0RST1BfUEFDS0VUKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGljZV9hZGRfY2xzX2Zsb3dlciAtIGFkZCBUQyBmbG93ZXIgZmlsdGVyc1xuICAqIEBuZXRkZXY6IFBvaW50ZXIgdG8gZmlsdGVyIGRldmljZVxuQEAgLTIyNTMsMTQgJiM0MzsyMzkwLDI0IEBAIGludCBpY2VfYWRkX2Nsc19mbG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGljZV92c2kgKnZzaSxcbiB7XG4gXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBjbHNfZmxvd2VyLVx1MDAzZWNvbW1vbi5leHRhY2s7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqdnNpX25ldGRldiA9IHZzaS1cdTAwM2VuZXRkZXY7XG4mIzQzO1x0ZW51bSBpY2VfZXN3aXRjaF9mbHRyX2RpcmVjdGlvbiBkaXJlY3Rpb247XG4gXHRzdHJ1Y3QgaWNlX3RjX2Zsb3dlcl9mbHRyICpmbHRyO1xuIFx0c3RydWN0IGljZV9wZiAqcGYgPSB2c2ktXHUwMDNlYmFjaztcbiYjNDM7XHRib29sIHRyYWNrX3N3X2ZsdHJzO1xuIFx0aW50IGVycjtcbiBcbi1cdGlmIChpY2VfaXNfcmVzZXRfaW5fcHJvZ3Jlc3MocGYtXHUwMDNlc3RhdGUpKVxuLVx0XHRyZXR1cm4gLUVCVVNZO1xuLVx0aWYgKHRlc3RfYml0KElDRV9GTEFHX0ZXX0xMRFBfQUdFTlQsIHBmLVx1MDAzZWZsYWdzKSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0ZGlyZWN0aW9uID0gaW5ncmVzcyA/IElDRV9FU1dJVENIX0ZMVFJfSU5HUkVTUyA6XG4mIzQzO1x0XHRcdCAgICAgIElDRV9FU1dJVENIX0ZMVFJfRUdSRVNTO1xuJiM0MztcdHRyYWNrX3N3X2ZsdHJzID0gIWljZV9pc19lc3dpdGNoX21vZGVfc3dpdGNoZGV2KHBmKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGljZV9pc19yZXNldF9pbl9wcm9ncmVzcyhwZi1cdTAwM2VzdGF0ZSkpIHtcbiYjNDM7XHRcdGVyciA9IC1FQlVTWTtcbiYjNDM7XHRcdGdvdG8gdHJhY2tfc3c7XG4mIzQzO1x0fVxuJiM0MztcdGlmICh0ZXN0X2JpdChJQ0VfRkxBR19GV19MTERQX0FHRU5ULCBwZi1cdTAwM2VmbGFncykpIHtcbiYjNDM7XHRcdGVyciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIHRyYWNrX3N3O1xuJiM0MztcdH1cbiBcbiBcdGlmIChpY2VfaXNfcG9ydF9yZXByX25ldGRldihuZXRkZXYpKVxuIFx0XHR2c2lfbmV0ZGV2ID0gbmV0ZGV2O1xuQEAgLTIyNzMsNyAmIzQzOzI0MjAsOCBAQCBpbnQgaWNlX2FkZF9jbHNfZmxvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBpY2VfdnNpICp2c2ksXG4gXHRcdCAqL1xuIFx0XHRpZiAobmV0ZGV2ID09IHZzaV9uZXRkZXYpXG4gXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7Y2FuJiMzOTt0IGFwcGx5IFRDIGZsb3dlciBmaWx0ZXJzLCB0dXJuIE9OIGh3LXRjLW9mZmxvYWQgYW5kIHRyeSBhZ2FpblwmIzM0Oyk7XG4tXHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0ZXJyID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gdHJhY2tfc3c7XG4gXHR9XG4gXG4gXHQvKiBhdm9pZCBkdXBsaWNhdGUgZW50cmllcywgaWYgZXhpc3RzIC0gcmV0dXJuIGVycm9yICovXG5AQCAtMjI4MywxNCAmIzQzOzI0MzEsMzIgQEAgaW50IGljZV9hZGRfY2xzX2Zsb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgaWNlX3ZzaSAqdnNpLFxuIFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcdH1cbiBcbiYjNDM7XHRpZiAodHJhY2tfc3dfZmx0cnMgXHUwMDI2XHUwMDI2ICFjbHNfZmxvd2VyLVx1MDAzZWNvbW1vbi5za2lwX3N3IFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBpY2VfdGNfZmx0cl9pc19kcm9wKGNsc19mbG93ZXIpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBpY2VfdGNfZHJvcF9ieXBhc3Nlc19mbHRyKHBmLCBuZXRkZXYsIGNsc19mbG93ZXItXHUwMDNlY29tbW9uLnByaW8sXG4mIzQzO1x0XHRcdFx0ICAgICAgZGlyZWN0aW9uKSkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDtEcm9wIGZpbHRlciBub3Qgb2ZmbG9hZGVkIGJlY2F1c2UgaXQgd291bGQgYnlwYXNzIGEgaGlnaGVyIHByaW9yaXR5IGZpbHRlclwmIzM0Oyk7XG4mIzQzO1x0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdGdvdG8gdHJhY2tfc3c7XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qIHByZXAgYW5kIGFkZCBUQy1mbG93ZXIgZmlsdGVyIGluIEhXICovXG4gXHRlcnIgPSBpY2VfYWRkX3RjX2ZsdHIobmV0ZGV2LCB2c2ksIGNsc19mbG93ZXIsIFx1MDAyNmZsdHIsIGluZ3Jlc3MpO1xuIFx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdGdvdG8gdHJhY2tfc3c7XG4mIzQzO1xuJiM0MztcdGZsdHItXHUwMDNlZmlsdGVyX2RldiA9IG5ldGRldjtcbiYjNDM7XHRmbHRyLVx1MDAzZXByaW8gPSBjbHNfZmxvd2VyLVx1MDAzZWNvbW1vbi5wcmlvO1xuIFxuIFx0LyogYWRkIGZpbHRlciBpbnRvIGFuIG9yZGVyZWQgbGlzdCAqL1xuIFx0aGxpc3RfYWRkX2hlYWQoXHUwMDI2Zmx0ci1cdTAwM2V0Y19mbG93ZXJfbm9kZSwgXHUwMDI2cGYtXHUwMDNldGNfZmxvd2VyX2ZsdHJfbGlzdCk7XG4gXHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO3RyYWNrX3N3OlxuJiM0MztcdGlmICh0cmFja19zd19mbHRycyBcdTAwMjZcdTAwMjYgIWNsc19mbG93ZXItXHUwMDNlY29tbW9uLnNraXBfc3cpXG4mIzQzO1x0XHRpY2VfdGNfdHJhY2tfc3dfZmx0cihwZiwgbmV0ZGV2LCBjbHNfZmxvd2VyLCBkaXJlY3Rpb24pO1xuJiM0MztcdHJldHVybiBlcnI7XG4gfVxuIFxuIC8qKlxuQEAgLTIzMDUsNiAmIzQzOzI0NzEsOSBAQCBpY2VfZGVsX2Nsc19mbG93ZXIoc3RydWN0IGljZV92c2kgKnZzaSwgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpXG4gXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHZzaS1cdTAwM2ViYWNrO1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHRpZiAoaWNlX3RjX3VudHJhY2tfc3dfZmx0cihwZiwgY2xzX2Zsb3dlci1cdTAwM2Vjb29raWUpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuIFx0LyogZmluZCBmaWx0ZXIgKi9cbiBcdGZsdHIgPSBpY2VfZmluZF90Y19mbG93ZXJfZmx0cihwZiwgY2xzX2Zsb3dlci1cdTAwM2Vjb29raWUpO1xuIFx0aWYgKCFmbHRyKSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90Y19saWIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdGNfbGliLmhcbmluZGV4IDhhM2FiMmYyMmFmOWIuLjM3ZDZmNDEwMGVjZmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RjX2xpYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RjX2xpYi5oXG5AQCAtMzgsNiAmIzQzOzM4LDcgQEBcbiAjZGVmaW5lIElDRV9UQ19GTFdSX0ZJRUxEX0NWTEFOX1BSSU9cdFx0QklUKDI4KVxuICNkZWZpbmUgSUNFX1RDX0ZMV1JfRklFTERfVkxBTl9UUElEXHRcdEJJVCgyOSlcbiAjZGVmaW5lIElDRV9UQ19GTFdSX0ZJRUxEX1BGQ1BfT1BUU1x0XHRCSVQoMzApXG4mIzQzOyNkZWZpbmUgSUNFX1RDX0ZMV1JfRklFTERfSVBfUFJPVE9cdFx0QklUKDMxKVxuIFxuICNkZWZpbmUgSUNFX1RDX0ZMT1dFUl9NQVNLXzMyICAgMHhGRkZGRkZGRlxuIFxuQEAgLTEzOCwxMiAmIzQzOzEzOSwzMyBAQCBlbnVtIGljZV9lc3dpdGNoX2ZsdHJfZGlyZWN0aW9uIHtcbiBcdElDRV9FU1dJVENIX0ZMVFJfRUdSRVNTLFxuIH07XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgaWNlX3RjX3N3X2ZsdHIgLSBmaWx0ZXIgcHJlc2VudGVkIHRvIHRoZSBkcml2ZXIgYnV0IG5vdCBvZmZsb2FkZWRcbiYjNDM7ICogQG5vZGU6IG5vZGUgaW4gdGhlIHBmLVx1MDAzZXRjX3N3X2ZsdHJfbGlzdFxuJiM0MzsgKiBAY29va2llOiB1bmlxdWUgZmlsdGVyIGlkZW50aWZpZXIgZnJvbSB0aGUgb2ZmbG9hZCByZXF1ZXN0XG4mIzQzOyAqIEBmaWx0ZXJfZGV2OiBkZXZpY2UgdGhlIGZpbHRlciB3YXMgcmVxdWVzdGVkIG9uXG4mIzQzOyAqIEBwcmlvOiBUQyBwcmlvcml0eSwgbG93ZXIgdmFsdWUgaXMgZXZhbHVhdGVkIGZpcnN0XG4mIzQzOyAqIEBkaXJlY3Rpb246IGJsb2NrIGRpcmVjdGlvbiB0aGUgZmlsdGVyIHdhcyByZXF1ZXN0ZWQgZm9yXG4mIzQzOyAqIEBpc19kcm9wOiB0aGUgZmlsdGVyIGNhcnJpZXMgYSBkcm9wIGFjdGlvblxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IGljZV90Y19zd19mbHRyIHtcbiYjNDM7XHRzdHJ1Y3QgaGxpc3Rfbm9kZSBub2RlO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgY29va2llO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXJfZGV2O1xuJiM0MztcdHUzMiBwcmlvO1xuJiM0MztcdGVudW0gaWNlX2Vzd2l0Y2hfZmx0cl9kaXJlY3Rpb24gZGlyZWN0aW9uO1xuJiM0MztcdGJvb2wgaXNfZHJvcDtcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IGljZV90Y19mbG93ZXJfZmx0ciB7XG4gXHRzdHJ1Y3QgaGxpc3Rfbm9kZSB0Y19mbG93ZXJfbm9kZTtcbiBcbiBcdC8qIGNvb2tpZSBiZWNvbWVzIGZpbHRlcl9ydWxlX2lkIGlmIHJ1bGUgaXMgYWRkZWQgc3VjY2Vzc2Z1bGx5ICovXG4gXHR1bnNpZ25lZCBsb25nIGNvb2tpZTtcbiBcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqZmlsdGVyX2RldjtcbiYjNDM7XHR1MzIgcHJpbztcbiYjNDM7XG4gXHQvKiBhZGRfYWR2X3J1bGUgcmV0dXJucyBpbmZvcm1hdGlvbiBsaWtlIHJlY2lwZSBJRCwgcnVsZV9pZC4gU3RvcmVcbiBcdCAqIHRob3NlIHZhbHVlcyBzaW5jZSB0aGV5IGFyZSBuZWVkZWQgdG8gcmVtb3ZlIGFkdmFuY2VkIHJ1bGVcbiBcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE3OjU3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBFdGhlcm5ldCBFODAwIFNlcmllcyBkcml2ZXIgKGljZSksIHNwZWNpZmljYWxseSBUQyBmbG93ZXIgZmlsdGVyIG9mZmxvYWQgbG9naWMuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIChJbnRlbCBFODEwL0U4MDAgTklDcykgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS92aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwOTkyMzc1MGJhZmM1NzBhYzRiM2ZiNTYxZTA2MTM1YzQ4YTA4MWQ1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMTAgMTc6NTc6MjYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmgKaW5kZXggZGIzYzcwMTVjNTZjNC4uNmM1OTZlNWEzMTUxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaApAQCAtNjQzLDYgJiM0Mzs2NDMsNyBAQCBzdHJ1Y3QgaWNlX3BmIHsKIAkgKi8KIAl1MTYgbnVtX2RtYWNfY2hubF9mbHRyczsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCB0Y19mbG93ZXJfZmx0cl9saXN0OwomIzQzOwlzdHJ1Y3QgaGxpc3RfaGVhZCB0Y19zd19mbHRyX2xpc3Q7CiAKIAl1NjQgc3VwcG9ydGVkX3J4ZGlkczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90Y19saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdGNfbGliLmMKaW5kZXggZDIwMzU3YzA0MTI3My4uN2NmYzg5NDFiN2JhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90Y19saWIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RjX2xpYi5jCkBAIC03OCw3ICYjNDM7NzgsOCBAQCBzdGF0aWMgaW50IGljZV90Y19jb3VudF9sa3Vwcyh1MzIgZmxhZ3MsIHN0cnVjdCBpY2VfdGNfZmxvd2VyX2ZsdHIgKmZsdHIpCiAJCSAgICAgSUNFX1RDX0ZMV1JfRklFTERfREVTVF9JUFY2IHwgSUNFX1RDX0ZMV1JfRklFTERfU1JDX0lQVjYpKQogCQlsa3Vwc19jbnQmIzQzOyYjNDM7OwogCi0JaWYgKGZsYWdzICZhbXA7IChJQ0VfVENfRkxXUl9GSUVMRF9JUF9UT1MgfCBJQ0VfVENfRkxXUl9GSUVMRF9JUF9UVEwpKQomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgKElDRV9UQ19GTFdSX0ZJRUxEX0lQX1RPUyB8IElDRV9UQ19GTFdSX0ZJRUxEX0lQX1RUTCB8CiYjNDM7CQkgICAgIElDRV9UQ19GTFdSX0ZJRUxEX0lQX1BST1RPKSkKIAkJbGt1cHNfY250JiM0MzsmIzQzOzsKIAogCS8qIGFyZSBMMlRQdjMgb3B0aW9ucyBzcGVjaWZpZWQ/ICovCkBAIC01NTIsNyAmIzQzOzU1Myw4IEBAIGljZV90Y19maWxsX3J1bGVzKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgZmxhZ3MsCiAJfQogCiAJaWYgKGhlYWRlcnMtJmd0O2wyX2tleS5uX3Byb3RvID09IGh0b25zKEVUSF9QX0lQKSAmYW1wOyZhbXA7Ci0JICAgIChmbGFncyAmYW1wOyAoSUNFX1RDX0ZMV1JfRklFTERfSVBfVE9TIHwgSUNFX1RDX0ZMV1JfRklFTERfSVBfVFRMKSkpIHsKJiM0MzsJICAgIChmbGFncyAmYW1wOyAoSUNFX1RDX0ZMV1JfRklFTERfSVBfVE9TIHwgSUNFX1RDX0ZMV1JfRklFTERfSVBfVFRMIHwKJiM0MzsJCSAgICAgIElDRV9UQ19GTFdSX0ZJRUxEX0lQX1BST1RPKSkpIHsKIAkJbGlzdFtpXS50eXBlID0gaWNlX3Byb3RvX3R5cGVfZnJvbV9pcHY0KGlubmVyKTsKIAogCQlpZiAoZmxhZ3MgJmFtcDsgSUNFX1RDX0ZMV1JfRklFTERfSVBfVE9TKSB7CkBAIC01NjcsMTEgJiM0Mzs1NjksMTkgQEAgaWNlX3RjX2ZpbGxfcnVsZXMoc3RydWN0IGljZV9odyAqaHcsIHUzMiBmbGFncywKIAkJCQloZWFkZXJzLSZndDtsM19tYXNrLnR0bDsKIAkJfQogCiYjNDM7CQlpZiAoZmxhZ3MgJmFtcDsgSUNFX1RDX0ZMV1JfRklFTERfSVBfUFJPVE8pIHsKJiM0MzsJCQlsaXN0W2ldLmhfdS5pcHY0X2hkci5wcm90b2NvbCA9CiYjNDM7CQkJCWhlYWRlcnMtJmd0O2wzX2tleS5pcF9wcm90bzsKJiM0MzsJCQlsaXN0W2ldLm1fdS5pcHY0X2hkci5wcm90b2NvbCA9CiYjNDM7CQkJCWhlYWRlcnMtJmd0O2wzX21hc2suaXBfcHJvdG87CiYjNDM7CQl9CiYjNDM7CiAJCWkmIzQzOyYjNDM7OwogCX0KIAogCWlmIChoZWFkZXJzLSZndDtsMl9rZXkubl9wcm90byA9PSBodG9ucyhFVEhfUF9JUFY2KSAmYW1wOyZhbXA7Ci0JICAgIChmbGFncyAmYW1wOyAoSUNFX1RDX0ZMV1JfRklFTERfSVBfVE9TIHwgSUNFX1RDX0ZMV1JfRklFTERfSVBfVFRMKSkpIHsKJiM0MzsJICAgIChmbGFncyAmYW1wOyAoSUNFX1RDX0ZMV1JfRklFTERfSVBfVE9TIHwgSUNFX1RDX0ZMV1JfRklFTERfSVBfVFRMIHwKJiM0MzsJCSAgICAgIElDRV9UQ19GTFdSX0ZJRUxEX0lQX1BST1RPKSkpIHsKIAkJc3RydWN0IGljZV9pcHY2X2hkciAqaGRyX2gsICpoZHJfbTsKIAogCQloZHJfaCA9ICZhbXA7bGlzdFtpXS5oX3UuaXB2Nl9oZHI7CkBAIC01OTIsNiAmIzQzOzYwMiwxMSBAQCBpY2VfdGNfZmlsbF9ydWxlcyhzdHJ1Y3QgaWNlX2h3ICpodywgdTMyIGZsYWdzLAogCQkJaGRyX20tJmd0O2hvcF9saW1pdCA9IGhlYWRlcnMtJmd0O2wzX21hc2sudHRsOwogCQl9CiAKJiM0MzsJCWlmIChmbGFncyAmYW1wOyBJQ0VfVENfRkxXUl9GSUVMRF9JUF9QUk9UTykgewomIzQzOwkJCWhkcl9oLSZndDtuZXh0X2hkciA9IGhlYWRlcnMtJmd0O2wzX2tleS5pcF9wcm90bzsKJiM0MzsJCQloZHJfbS0mZ3Q7bmV4dF9oZHIgPSBoZWFkZXJzLSZndDtsM19tYXNrLmlwX3Byb3RvOwomIzQzOwkJfQomIzQzOwogCQlpJiM0MzsmIzQzOzsKIAl9CiAKQEAgLTE3MzcsNiAmIzQzOzE3NTIsOSBAQCBpY2VfcGFyc2VfY2xzX2Zsb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZmlsdGVyX2Rldiwgc3RydWN0IGljZV92c2kgKnZzaSwKIAkJaGVhZGVycy0mZ3Q7bDJfa2V5Lm5fcHJvdG8gPSBjcHVfdG9fYmUxNihuX3Byb3RvX2tleSk7CiAJCWhlYWRlcnMtJmd0O2wyX21hc2subl9wcm90byA9IGNwdV90b19iZTE2KG5fcHJvdG9fbWFzayk7CiAJCWhlYWRlcnMtJmd0O2wzX2tleS5pcF9wcm90byA9IG1hdGNoLmtleS0mZ3Q7aXBfcHJvdG87CiYjNDM7CQloZWFkZXJzLSZndDtsM19tYXNrLmlwX3Byb3RvID0gbWF0Y2gubWFzay0mZ3Q7aXBfcHJvdG87CiYjNDM7CQlpZiAobWF0Y2gubWFzay0mZ3Q7aXBfcHJvdG8pCiYjNDM7CQkJZmx0ci0mZ3Q7ZmxhZ3MgfD0gSUNFX1RDX0ZMV1JfRklFTERfSVBfUFJPVE87CiAJfQogCiAJaWYgKGZsb3dfcnVsZV9tYXRjaF9rZXkocnVsZSwgRkxPV19ESVNTRUNUT1JfS0VZX0VUSF9BRERSUykpIHsKQEAgLTE5MTAsNiAmIzQzOzE5MjgsMTkgQEAgaWNlX3BhcnNlX2Nsc19mbG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlcl9kZXYsIHN0cnVjdCBpY2VfdnNpICp2c2ksCiAJCX0KIAl9CiAKJiM0MzsJaWYgKGZsdHItJmd0O2ZsYWdzICZhbXA7IChJQ0VfVENfRkxXUl9GSUVMRF9ERVNUX0w0X1BPUlQgfAomIzQzOwkJCSAgIElDRV9UQ19GTFdSX0ZJRUxEX1NSQ19MNF9QT1JUIHwKJiM0MzsJCQkgICBJQ0VfVENfRkxXUl9GSUVMRF9MMlRQVjNfU0VTU0lEKSkKJiM0MzsJCWZsdHItJmd0O2ZsYWdzICZhbXA7PSB+SUNFX1RDX0ZMV1JfRklFTERfSVBfUFJPVE87CiYjNDM7CiYjNDM7CWlmICgoZmx0ci0mZ3Q7ZmxhZ3MgJmFtcDsgSUNFX1RDX0ZMV1JfRklFTERfSVBfUFJPVE8pICZhbXA7JmFtcDsKJiM0MzsJICAgIGhlYWRlcnMtJmd0O2wyX2tleS5uX3Byb3RvICE9IGh0b25zKEVUSF9QX0lQKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBoZWFkZXJzLSZndDtsMl9rZXkubl9wcm90byAhPSBodG9ucyhFVEhfUF9JUFY2KSkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGZsdHItJmd0O2V4dGFjaywKJiM0MzsJCQkJICAgJiMzNDtJUCBwcm90b2NvbCBtYXRjaCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggR1RQIG9yIFBQUG9FJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiAJLyogSW5ncmVzcyBmaWx0ZXIgb24gcmVwcmVzZW50b3IgcmVzdWx0cyBpbiBhbiBlZ3Jlc3MgZmlsdGVyIGluIEhXCiAJICogYW5kIHZpY2UgdmVyc2EKIAkgKi8KQEAgLTIyMzgsNiAmIzQzOzIyNjksMTEyIEBAIGljZV9maW5kX3RjX2Zsb3dlcl9mbHRyKHN0cnVjdCBpY2VfcGYgKnBmLCB1bnNpZ25lZCBsb25nIGNvb2tpZSkKIAlyZXR1cm4gTlVMTDsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGljZV90Y19mbHRyX2lzX2Ryb3AgLSBjaGVjayBpZiBhIGZpbHRlciBjYXJyaWVzIGEgZHJvcCBhY3Rpb24KJiM0MzsgKiBAY2xzX2Zsb3dlcjogb2ZmbG9hZCByZXF1ZXN0IGRlc2NyaWJpbmcgdGhlIGZpbHRlcgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIGFueSBhY3Rpb24gb2YgdGhlIGZpbHRlciBpcyBhIGRyb3AsIGZhbHNlIG90aGVyd2lzZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCBpY2VfdGNfZmx0cl9pc19kcm9wKHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvd2VyKQomIzQzO3sKJiM0MzsJc3RydWN0IGZsb3dfcnVsZSAqcnVsZSA9IGZsb3dfY2xzX29mZmxvYWRfZmxvd19ydWxlKGNsc19mbG93ZXIpOwomIzQzOwlzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmFjdDsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWlmIChjbHNfZmxvd2VyLSZndDtjbGFzc2lkKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlmbG93X2FjdGlvbl9mb3JfZWFjaChpLCBhY3QsICZhbXA7cnVsZS0mZ3Q7YWN0aW9uKQomIzQzOwkJaWYgKGFjdC0mZ3Q7aWQgPT0gRkxPV19BQ1RJT05fRFJPUCkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBpY2VfdGNfdW50cmFja19zd19mbHRyIC0gZm9yZ2V0IGEgdHJhY2tlZCBzb2Z0d2FyZS1vbmx5IGZpbHRlcgomIzQzOyAqIEBwZjogcG9pbnRlciB0byBQRiBzdHJ1Y3R1cmUKJiM0MzsgKiBAY29va2llOiB1bmlxdWUgZmlsdGVyIGlkZW50aWZpZXIgZnJvbSB0aGUgb2ZmbG9hZCByZXF1ZXN0CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgdGhlIGZpbHRlciB3YXMgdHJhY2tlZCwgZmFsc2Ugb3RoZXJ3aXNlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIGljZV90Y191bnRyYWNrX3N3X2ZsdHIoc3RydWN0IGljZV9wZiAqcGYsIHVuc2lnbmVkIGxvbmcgY29va2llKQomIzQzO3sKJiM0MzsJc3RydWN0IGljZV90Y19zd19mbHRyICpzd19mbHRyOwomIzQzOwomIzQzOwlobGlzdF9mb3JfZWFjaF9lbnRyeShzd19mbHRyLCAmYW1wO3BmLSZndDt0Y19zd19mbHRyX2xpc3QsIG5vZGUpIHsKJiM0MzsJCWlmIChzd19mbHRyLSZndDtjb29raWUgIT0gY29va2llKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJaGxpc3RfZGVsKCZhbXA7c3dfZmx0ci0mZ3Q7bm9kZSk7CiYjNDM7CQlrZnJlZShzd19mbHRyKTsKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogaWNlX3RjX3RyYWNrX3N3X2ZsdHIgLSByZW1lbWJlciBhIGZpbHRlciB0aGF0IHdhcyBub3Qgb2ZmbG9hZGVkCiYjNDM7ICogQHBmOiBwb2ludGVyIHRvIFBGIHN0cnVjdHVyZQomIzQzOyAqIEBmaWx0ZXJfZGV2OiBkZXZpY2UgdGhlIGZpbHRlciB3YXMgcmVxdWVzdGVkIG9uCiYjNDM7ICogQGNsc19mbG93ZXI6IG9mZmxvYWQgcmVxdWVzdCBkZXNjcmliaW5nIHRoZSBmaWx0ZXIKJiM0MzsgKiBAZGlyZWN0aW9uOiBibG9jayBkaXJlY3Rpb24gdGhlIGZpbHRlciB3YXMgcmVxdWVzdGVkIGZvcgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGljZV90Y190cmFja19zd19mbHRyKHN0cnVjdCBpY2VfcGYgKnBmLAomIzQzOwkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlcl9kZXYsCiYjNDM7CQkJCSBzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqY2xzX2Zsb3dlciwKJiM0MzsJCQkJIGVudW0gaWNlX2Vzd2l0Y2hfZmx0cl9kaXJlY3Rpb24gZGlyZWN0aW9uKQomIzQzO3sKJiM0MzsJc3RydWN0IGljZV90Y19zd19mbHRyICpzd19mbHRyOwomIzQzOwomIzQzOwlobGlzdF9mb3JfZWFjaF9lbnRyeShzd19mbHRyLCAmYW1wO3BmLSZndDt0Y19zd19mbHRyX2xpc3QsIG5vZGUpCiYjNDM7CQlpZiAoc3dfZmx0ci0mZ3Q7Y29va2llID09IGNsc19mbG93ZXItJmd0O2Nvb2tpZSkKJiM0MzsJCQlyZXR1cm47CiYjNDM7CiYjNDM7CXN3X2ZsdHIgPSBremFsbG9jX29iaigqc3dfZmx0cik7CiYjNDM7CWlmICghc3dfZmx0cikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc3dfZmx0ci0mZ3Q7Y29va2llID0gY2xzX2Zsb3dlci0mZ3Q7Y29va2llOwomIzQzOwlzd19mbHRyLSZndDtmaWx0ZXJfZGV2ID0gZmlsdGVyX2RldjsKJiM0MzsJc3dfZmx0ci0mZ3Q7cHJpbyA9IGNsc19mbG93ZXItJmd0O2NvbW1vbi5wcmlvOwomIzQzOwlzd19mbHRyLSZndDtkaXJlY3Rpb24gPSBkaXJlY3Rpb247CiYjNDM7CXN3X2ZsdHItJmd0O2lzX2Ryb3AgPSBpY2VfdGNfZmx0cl9pc19kcm9wKGNsc19mbG93ZXIpOwomIzQzOwlobGlzdF9hZGRfaGVhZCgmYW1wO3N3X2ZsdHItJmd0O25vZGUsICZhbXA7cGYtJmd0O3RjX3N3X2ZsdHJfbGlzdCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGljZV90Y19kcm9wX2J5cGFzc2VzX2ZsdHIgLSBjaGVjayBpZiBhIGRyb3AgcnVsZSB3b3VsZCBieXBhc3MgYSBmaWx0ZXIKJiM0MzsgKiBAcGY6IHBvaW50ZXIgdG8gUEYgc3RydWN0dXJlCiYjNDM7ICogQGZpbHRlcl9kZXY6IGRldmljZSB0aGUgZHJvcCBmaWx0ZXIgaXMgcmVxdWVzdGVkIG9uCiYjNDM7ICogQHByaW86IFRDIHByaW9yaXR5IG9mIHRoZSBkcm9wIGZpbHRlcgomIzQzOyAqIEBkaXJlY3Rpb246IGJsb2NrIGRpcmVjdGlvbiBvZiB0aGUgZHJvcCBmaWx0ZXIKJiM0MzsgKgomIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBzdWNoIGEgZmlsdGVyIGV4aXN0cywgZmFsc2Ugb3RoZXJ3aXNlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sCiYjNDM7aWNlX3RjX2Ryb3BfYnlwYXNzZXNfZmx0cihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlcl9kZXYsCiYjNDM7CQkJICB1MzIgcHJpbywgZW51bSBpY2VfZXN3aXRjaF9mbHRyX2RpcmVjdGlvbiBkaXJlY3Rpb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWNlX3RjX2Zsb3dlcl9mbHRyICpmbHRyOwomIzQzOwlzdHJ1Y3QgaWNlX3RjX3N3X2ZsdHIgKnN3X2ZsdHI7CiYjNDM7CiYjNDM7CWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHN3X2ZsdHIsICZhbXA7cGYtJmd0O3RjX3N3X2ZsdHJfbGlzdCwgbm9kZSkKJiM0MzsJCWlmIChzd19mbHRyLSZndDtmaWx0ZXJfZGV2ID09IGZpbHRlcl9kZXYgJmFtcDsmYW1wOwomIzQzOwkJICAgIHN3X2ZsdHItJmd0O2RpcmVjdGlvbiA9PSBkaXJlY3Rpb24gJmFtcDsmYW1wOyBzd19mbHRyLSZndDtwcmlvICZsdDsgcHJpbyAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIXN3X2ZsdHItJmd0O2lzX2Ryb3ApCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGZsdHIsICZhbXA7cGYtJmd0O3RjX2Zsb3dlcl9mbHRyX2xpc3QsIHRjX2Zsb3dlcl9ub2RlKQomIzQzOwkJaWYgKGZsdHItJmd0O2ZpbHRlcl9kZXYgPT0gZmlsdGVyX2RldiAmYW1wOyZhbXA7CiYjNDM7CQkgICAgZmx0ci0mZ3Q7ZGlyZWN0aW9uID09IGRpcmVjdGlvbiAmYW1wOyZhbXA7IGZsdHItJmd0O3ByaW8gJmx0OyBwcmlvICZhbXA7JmFtcDsKJiM0MzsJCSAgICBmbHRyLSZndDthY3Rpb24uZmx0cl9hY3QgIT0gSUNFX0RST1BfUEFDS0VUKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBpY2VfYWRkX2Nsc19mbG93ZXIgLSBhZGQgVEMgZmxvd2VyIGZpbHRlcnMKICAqIEBuZXRkZXY6IFBvaW50ZXIgdG8gZmlsdGVyIGRldmljZQpAQCAtMjI1MywxNCAmIzQzOzIzOTAsMjQgQEAgaW50IGljZV9hZGRfY2xzX2Zsb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgaWNlX3ZzaSAqdnNpLAogewogCXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IGNsc19mbG93ZXItJmd0O2NvbW1vbi5leHRhY2s7CiAJc3RydWN0IG5ldF9kZXZpY2UgKnZzaV9uZXRkZXYgPSB2c2ktJmd0O25ldGRldjsKJiM0MzsJZW51bSBpY2VfZXN3aXRjaF9mbHRyX2RpcmVjdGlvbiBkaXJlY3Rpb247CiAJc3RydWN0IGljZV90Y19mbG93ZXJfZmx0ciAqZmx0cjsKIAlzdHJ1Y3QgaWNlX3BmICpwZiA9IHZzaS0mZ3Q7YmFjazsKJiM0MzsJYm9vbCB0cmFja19zd19mbHRyczsKIAlpbnQgZXJyOwogCi0JaWYgKGljZV9pc19yZXNldF9pbl9wcm9ncmVzcyhwZi0mZ3Q7c3RhdGUpKQotCQlyZXR1cm4gLUVCVVNZOwotCWlmICh0ZXN0X2JpdChJQ0VfRkxBR19GV19MTERQX0FHRU5ULCBwZi0mZ3Q7ZmxhZ3MpKQotCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJZGlyZWN0aW9uID0gaW5ncmVzcyA/IElDRV9FU1dJVENIX0ZMVFJfSU5HUkVTUyA6CiYjNDM7CQkJICAgICAgSUNFX0VTV0lUQ0hfRkxUUl9FR1JFU1M7CiYjNDM7CXRyYWNrX3N3X2ZsdHJzID0gIWljZV9pc19lc3dpdGNoX21vZGVfc3dpdGNoZGV2KHBmKTsKJiM0MzsKJiM0MzsJaWYgKGljZV9pc19yZXNldF9pbl9wcm9ncmVzcyhwZi0mZ3Q7c3RhdGUpKSB7CiYjNDM7CQllcnIgPSAtRUJVU1k7CiYjNDM7CQlnb3RvIHRyYWNrX3N3OwomIzQzOwl9CiYjNDM7CWlmICh0ZXN0X2JpdChJQ0VfRkxBR19GV19MTERQX0FHRU5ULCBwZi0mZ3Q7ZmxhZ3MpKSB7CiYjNDM7CQllcnIgPSAtRUlOVkFMOwomIzQzOwkJZ290byB0cmFja19zdzsKJiM0MzsJfQogCiAJaWYgKGljZV9pc19wb3J0X3JlcHJfbmV0ZGV2KG5ldGRldikpCiAJCXZzaV9uZXRkZXYgPSBuZXRkZXY7CkBAIC0yMjczLDcgJiM0MzsyNDIwLDggQEAgaW50IGljZV9hZGRfY2xzX2Zsb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgaWNlX3ZzaSAqdnNpLAogCQkgKi8KIAkJaWYgKG5ldGRldiA9PSB2c2lfbmV0ZGV2KQogCQkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgJiMzNDtjYW4mIzM5O3QgYXBwbHkgVEMgZmxvd2VyIGZpbHRlcnMsIHR1cm4gT04gaHctdGMtb2ZmbG9hZCBhbmQgdHJ5IGFnYWluJiMzNDspOwotCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCWVyciA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIHRyYWNrX3N3OwogCX0KIAogCS8qIGF2b2lkIGR1cGxpY2F0ZSBlbnRyaWVzLCBpZiBleGlzdHMgLSByZXR1cm4gZXJyb3IgKi8KQEAgLTIyODMsMTQgJiM0MzsyNDMxLDMyIEBAIGludCBpY2VfYWRkX2Nsc19mbG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGljZV92c2kgKnZzaSwKIAkJcmV0dXJuIC1FRVhJU1Q7CiAJfQogCiYjNDM7CWlmICh0cmFja19zd19mbHRycyAmYW1wOyZhbXA7ICFjbHNfZmxvd2VyLSZndDtjb21tb24uc2tpcF9zdyAmYW1wOyZhbXA7CiYjNDM7CSAgICBpY2VfdGNfZmx0cl9pc19kcm9wKGNsc19mbG93ZXIpICZhbXA7JmFtcDsKJiM0MzsJICAgIGljZV90Y19kcm9wX2J5cGFzc2VzX2ZsdHIocGYsIG5ldGRldiwgY2xzX2Zsb3dlci0mZ3Q7Y29tbW9uLnByaW8sCiYjNDM7CQkJCSAgICAgIGRpcmVjdGlvbikpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7RHJvcCBmaWx0ZXIgbm90IG9mZmxvYWRlZCBiZWNhdXNlIGl0IHdvdWxkIGJ5cGFzcyBhIGhpZ2hlciBwcmlvcml0eSBmaWx0ZXImIzM0Oyk7CiYjNDM7CQllcnIgPSAtRU9QTk9UU1VQUDsKJiM0MzsJCWdvdG8gdHJhY2tfc3c7CiYjNDM7CX0KJiM0MzsKIAkvKiBwcmVwIGFuZCBhZGQgVEMtZmxvd2VyIGZpbHRlciBpbiBIVyAqLwogCWVyciA9IGljZV9hZGRfdGNfZmx0cihuZXRkZXYsIHZzaSwgY2xzX2Zsb3dlciwgJmFtcDtmbHRyLCBpbmdyZXNzKTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwomIzQzOwkJZ290byB0cmFja19zdzsKJiM0MzsKJiM0MzsJZmx0ci0mZ3Q7ZmlsdGVyX2RldiA9IG5ldGRldjsKJiM0MzsJZmx0ci0mZ3Q7cHJpbyA9IGNsc19mbG93ZXItJmd0O2NvbW1vbi5wcmlvOwogCiAJLyogYWRkIGZpbHRlciBpbnRvIGFuIG9yZGVyZWQgbGlzdCAqLwogCWhsaXN0X2FkZF9oZWFkKCZhbXA7Zmx0ci0mZ3Q7dGNfZmxvd2VyX25vZGUsICZhbXA7cGYtJmd0O3RjX2Zsb3dlcl9mbHRyX2xpc3QpOwogCXJldHVybiAwOwomIzQzOwomIzQzO3RyYWNrX3N3OgomIzQzOwlpZiAodHJhY2tfc3dfZmx0cnMgJmFtcDsmYW1wOyAhY2xzX2Zsb3dlci0mZ3Q7Y29tbW9uLnNraXBfc3cpCiYjNDM7CQlpY2VfdGNfdHJhY2tfc3dfZmx0cihwZiwgbmV0ZGV2LCBjbHNfZmxvd2VyLCBkaXJlY3Rpb24pOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiAvKioKQEAgLTIzMDUsNiAmIzQzOzI0NzEsOSBAQCBpY2VfZGVsX2Nsc19mbG93ZXIoc3RydWN0IGljZV92c2kgKnZzaSwgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpCiAJc3RydWN0IGljZV9wZiAqcGYgPSB2c2ktJmd0O2JhY2s7CiAJaW50IGVycjsKIAomIzQzOwlpZiAoaWNlX3RjX3VudHJhY2tfc3dfZmx0cihwZiwgY2xzX2Zsb3dlci0mZ3Q7Y29va2llKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwogCS8qIGZpbmQgZmlsdGVyICovCiAJZmx0ciA9IGljZV9maW5kX3RjX2Zsb3dlcl9mbHRyKHBmLCBjbHNfZmxvd2VyLSZndDtjb29raWUpOwogCWlmICghZmx0cikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90Y19saWIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdGNfbGliLmgKaW5kZXggOGEzYWIyZjIyYWY5Yi4uMzdkNmY0MTAwZWNmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90Y19saWIuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RjX2xpYi5oCkBAIC0zOCw2ICYjNDM7MzgsNyBAQAogI2RlZmluZSBJQ0VfVENfRkxXUl9GSUVMRF9DVkxBTl9QUklPCQlCSVQoMjgpCiAjZGVmaW5lIElDRV9UQ19GTFdSX0ZJRUxEX1ZMQU5fVFBJRAkJQklUKDI5KQogI2RlZmluZSBJQ0VfVENfRkxXUl9GSUVMRF9QRkNQX09QVFMJCUJJVCgzMCkKJiM0MzsjZGVmaW5lIElDRV9UQ19GTFdSX0ZJRUxEX0lQX1BST1RPCQlCSVQoMzEpCiAKICNkZWZpbmUgSUNFX1RDX0ZMT1dFUl9NQVNLXzMyICAgMHhGRkZGRkZGRgogCkBAIC0xMzgsMTIgJiM0MzsxMzksMzMgQEAgZW51bSBpY2VfZXN3aXRjaF9mbHRyX2RpcmVjdGlvbiB7CiAJSUNFX0VTV0lUQ0hfRkxUUl9FR1JFU1MsCiB9OwogCiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IGljZV90Y19zd19mbHRyIC0gZmlsdGVyIHByZXNlbnRlZCB0byB0aGUgZHJpdmVyIGJ1dCBub3Qgb2ZmbG9hZGVkCiYjNDM7ICogQG5vZGU6IG5vZGUgaW4gdGhlIHBmLSZndDt0Y19zd19mbHRyX2xpc3QKJiM0MzsgKiBAY29va2llOiB1bmlxdWUgZmlsdGVyIGlkZW50aWZpZXIgZnJvbSB0aGUgb2ZmbG9hZCByZXF1ZXN0CiYjNDM7ICogQGZpbHRlcl9kZXY6IGRldmljZSB0aGUgZmlsdGVyIHdhcyByZXF1ZXN0ZWQgb24KJiM0MzsgKiBAcHJpbzogVEMgcHJpb3JpdHksIGxvd2VyIHZhbHVlIGlzIGV2YWx1YXRlZCBmaXJzdAomIzQzOyAqIEBkaXJlY3Rpb246IGJsb2NrIGRpcmVjdGlvbiB0aGUgZmlsdGVyIHdhcyByZXF1ZXN0ZWQgZm9yCiYjNDM7ICogQGlzX2Ryb3A6IHRoZSBmaWx0ZXIgY2FycmllcyBhIGRyb3AgYWN0aW9uCiYjNDM7ICovCiYjNDM7c3RydWN0IGljZV90Y19zd19mbHRyIHsKJiM0MzsJc3RydWN0IGhsaXN0X25vZGUgbm9kZTsKJiM0MzsJdW5zaWduZWQgbG9uZyBjb29raWU7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXJfZGV2OwomIzQzOwl1MzIgcHJpbzsKJiM0MzsJZW51bSBpY2VfZXN3aXRjaF9mbHRyX2RpcmVjdGlvbiBkaXJlY3Rpb247CiYjNDM7CWJvb2wgaXNfZHJvcDsKJiM0Mzt9OwomIzQzOwogc3RydWN0IGljZV90Y19mbG93ZXJfZmx0ciB7CiAJc3RydWN0IGhsaXN0X25vZGUgdGNfZmxvd2VyX25vZGU7CiAKIAkvKiBjb29raWUgYmVjb21lcyBmaWx0ZXJfcnVsZV9pZCBpZiBydWxlIGlzIGFkZGVkIHN1Y2Nlc3NmdWxseSAqLwogCXVuc2lnbmVkIGxvbmcgY29va2llOwogCiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXJfZGV2OwomIzQzOwl1MzIgcHJpbzsKJiM0MzsKIAkvKiBhZGRfYWR2X3J1bGUgcmV0dXJucyBpbmZvcm1hdGlvbiBsaWtlIHJlY2lwZSBJRCwgcnVsZV9pZC4gU3RvcmUKIAkgKiB0aG9zZSB2YWx1ZXMgc2luY2UgdGhleSBhcmUgbmVlZGVkIHRvIHJlbW92ZSBhZHZhbmNlZCBydWxlCiAJICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE3OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNDgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBJQ0UgRHJpdmVyIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZGVjaWRlIGlmIGl0JiMzOTtzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIHN5emthbGxlciBmdXp6aW5nLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLiBPa2F5LCBpdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggdG91Y2hlcyBmaWxlcyB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvYCBkaXJlY3Rvcnkg4oCTIGBpY2UuaGAsIGBpY2VfdGNfbGliLmNgLCBhbmQgYGljZV90Y19saWIuaGAgc3BlY2lmaWNhbGx5LiBTbywgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgSW50ZWwgRXRoZXJuZXQgQ29udHJvbGxlciBFODAwIHNlcmllcyBkcml2ZXIsIGFsc28ga25vd24gYXMgdGhlIElDRSBkcml2ZXIuIFRoYXQgbmFycm93cyBvdXIgZm9jdXMuCgpOb3csIGxldCYjMzk7cyBicmluZyB0aGUgdHJpYWdlIHBoaWxvc29waHkgaW50byBwbGF5LCBzcGVjaWZpY2FsbHkgU2VjdGlvbiAyLCB3aGljaCBkZWFscyB3aXRoIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS4gV2UgbmVlZCB0byBhc2NlcnRhaW4gaWYgdGhlIElDRSBkcml2ZXIgZmFsbHMgaW50byB0aGUgY2F0ZWdvcnkgb2YgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgdGhhdCByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VIG9yIHN5emthbGxlci4gVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogaXMgdGhlIGBpY2VgIGRyaXZlciBvbmUgb2YgdGhvc2U/IEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpZiBpdCByZXF1aXJlcyBzcGVjaWFsaXplZCBoYXJkd2FyZS4gVGhlIGJlc3Qgd2F5IGZvcndhcmQgaXMgdG8gdXNlIGBncmVwcGVyYCB0byBzZWUgaG93IHRoZSBgaWNlYCBkcml2ZXIgaXMgY29uZmlndXJlZCBhbmQgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIHF1aWNrbHkgZ2l2ZSBtZSBhbiBvdmVydmlldyBvZiBpdHMgZGVwZW5kZW5jaWVzIGFuZCB3aGV0aGVyIGl0JiMzOTtzIGluaGVyZW50bHkgdGllZCB0byBhIHNwZWNpZmljIHBoeXNpY2FsIHNldHVwIHRoYXQgbWFrZXMgaXQgYW4gdW5zdWl0YWJsZSBjYW5kaWRhdGUgZm9yIHN5emthbGxlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MjY4PWNvbmZpZyBJNDBFVkZcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTI5MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MjkxOmNvbmZpZyBJQ0VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjkyLVx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwoUikgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBTdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zMTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMyMDpjb25maWcgSUNFX0hXTU9OXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMyMS1cdGJvb2wgXCYjMzQ7SW50ZWwoUikgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBTdXBwb3J0IEhXTU9OIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMzMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MzMxOmNvbmZpZyBJQ0VfU1dJVENIREVWXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMzMi1cdGJvb2wgXCYjMzQ7U3dpdGNoZGV2IFN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTM0NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MzQ1OmNvbmZpZyBJQ0VfSFdUU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zNDYtXHRib29sIFwmIzM0O1N1cHBvcnQgSFcgY3Jvc3MtdGltZXN0YW1wIG9uIHBsYXRmb3JtcyB3aXRoIFBUTSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI1MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBJbnRlbCBFODAwIE5JQyBEcml2ZXIgUHJvYmUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgYmFzaWNzLiBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHRoYXQgdGhlIGBpY2VgIGRyaXZlciBpcywgaW4gZmFjdCwgdGhlIGNvcnJlY3QgUENJIGRldmljZSBkcml2ZXIgZm9yIHRoZSBJbnRlbCBFODAwIHNlcmllcyBOSUNzLiBUaGlzIG1lYW5zIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgZHJpdmVyJiMzOTtzIHByb2JlIHJvdXRpbmUsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyBpdCBpZGVudGlmaWVzIHRoZSBkZXZpY2UgYmFzZWQgb24gaXRzIFBDSSBJRHMuIEEgcXVpY2sgY2hlY2sgb2YgdGhlIFBDSSBJRHMgd2lsbCBjb25maXJtIHRoYXQgd2UgYXJlIGluZGVlZCBsb29raW5nIGF0IHRoZSBjb3JyZWN0IGRyaXZlci4gTm90aGluZyBsaWtlIGEgbWV0aG9kaWNhbCBzdGFydCB0byBhIHBvdGVudGlhbGx5IGNvbXBsZXggaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpY2VfcGNpX3RibCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01MTE3PXN0YXRpYyBpbnQgaWNlX3Byb2JlX3JlY292ZXJ5X21vZGUoc3RydWN0IGljZV9wZiAqcGYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTE0OS0gKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3RcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjUxNTA6ICogQGVudDogZW50cnkgaW4gaWNlX3BjaV90YmxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxNTEtICpcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01NzcxPXN0YXRpYyB2b2lkIGljZV9wY2lfZXJyX3Jlc2V0X2RvbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTc3NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjU3NzY6LyogaWNlX3BjaV90YmwgLSBQQ0kgRGV2aWNlIElEIFRhYmxlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01Nzc3LSAqXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTc4My0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjU3ODQ6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGljZV9wY2lfdGJsW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01Nzg1LVx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODEwQ19CQUNLUExBTkUpIH0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTgzNi19O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTgzNzpNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaWNlX3BjaV90YmwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTgzOC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01ODQ5PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpY2VfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTg1MC1cdC5uYW1lID0gS0JVSUxEX01PRE5BTUUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1ODUxOlx0LmlkX3RhYmxlID0gaWNlX3BjaV90YmwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01ODUyLVx0LnByb2JlID0gaWNlX3Byb2JlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE3OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwODMKCQkJCQkJCW91dHB1dDogMTAxCgkJCQkJCQl0aG91Z2h0czogNTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmVhc2liaWxpdHkgb2YgRnV6emluZyB0aGUgYGljZWAgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHdoZXRoZXIgd2UgY2FuIGFjdHVhbGx5IGZ1enogdGhlIGBpY2VgIGRyaXZlciwgc3BlY2lmaWNhbGx5IHdpdGhvdXQgcmVxdWlyaW5nIGEgcGh5c2ljYWwgSW50ZWwgRTgwMCBzZXJpZXMgUENJZSBjYXJkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBzaW5jZSBpdCYjMzk7cyBhbiBlbnRlcnByaXNlLWdyYWRlIE5JQywgbXkgZ3V0IHNheXMgaXQgcHJvYmFibHkgbmVlZHMgdGhlIHBoeXNpY2FsIGhhcmR3YXJlLiBRRU1VIGRlZmluaXRlbHkgZG9lc24mIzM5O3QgZW11bGF0ZSB0aGUgYGljZWAgaGFyZHdhcmUsIGl0IGZvY3VzZXMgb24gdGhlIG1vcmUgY29tbW9uIHN0dWZmIGxpa2UgYGUxMDAwYCwgYHZteG5ldDNgLCBhbmQgYHZpcnRpby1uZXRgLiBUaGUgdGV4dCBJJiMzOTttIGxvb2tpbmcgYXQgY29uZmlybXMgdGhpczogYGljZWAgcmVxdWlyZXMgYSByZWFsIEFTSUMvUENJZSBjYXJkLCBsaWtlIHRoZSBJbnRlbCBFODEwIG9yIEU4MDAgc2VyaWVzLgoKVGhhdCAmIzM0O1N0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSYjMzQ7IHNlY3Rpb24gaW4gdGhlIGRvY3MgaW1tZWRpYXRlbHkgY2xpY2tzLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBkcml2ZXJzIHRoYXQgYXJlIHRpZWQgdG8gc3BlY2lmaWMgaGFyZHdhcmUgYW5kIGFyZW4mIzM5O3QgZ29pbmcgdG8gcnVuIHdpdGhvdXQgaXQsIGp1c3QgbGlrZSBgbWx4c3dgLCBgcGRzX2NvcmVgLCBldGMuIFRoZSBgaWNlYCBkcml2ZXIgKmRlZmluaXRlbHkqIGZpdHMgdGhpcyBkZXNjcmlwdGlvbi4gU2luY2Ugd2UmIzM5O3JlIG1pc3NpbmcgdGhlIHBoeXNpY2FsIGNhcmQgb3IgcHJvcGVyIGVtdWxhdGlvbiwgZnVuY3Rpb25zIGxpa2UgYGljZV9wcm9iZWAgd29uJiMzOTt0IGV2ZXIgYmUgY2FsbGVkLCBhbmQgdGhlcmVmb3JlIHdlJiMzOTtsbCBuZXZlciBzZWUgdGhpbmdzIGxpa2UgYGljZV9wZmAsIG9yIGBpY2VfYWRkX2Nsc19mbG93ZXJgLgoKSSYjMzk7bSBub3cgY2hlY2tpbmcgaWYgdGhlcmUmIzM5O3MgYW55IGNsZXZlciBtb2NrIG9yIHZpcnR1YWwgZHJpdmVyIG1vZGUgYnVyaWVkIGluIHRoZSBjb2RlLCBvciBpZiBzb21lIG9ic2N1cmUgY29uZmlndXJhdGlvbiBmbGFncyBjYW4gYnJpbmcgaXQgdG8gbGlmZS4gQSBxdWljayBsb29rIGF0IHRoZSBwYXRjaCBkaWZmIGNvbmZpcm1zIHRoYXQgdGhlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9gIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IGluIGBpY2UuaGAsIGBpY2VfdGNfbGliLmNgLCBhbmQgYGljZV90Y19saWIuaGAuCgpHaXZlbiBhbGwgdGhpcywgSSYjMzk7bSBwcmV0dHkgY29uZmlkZW50IGluIG15IGNvbmNsdXNpb24uIEJlY2F1c2UgdGhlIHBhdGNoIGRpcmVjdGx5IGludm9sdmVzIGEgZHJpdmVyIHRoYXQgb25seSB3b3JrcyB3aXRoIHBoeXNpY2FsIGhhcmR3YXJlIHVuYXZhaWxhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZnV6emluZyBpcyBlc3NlbnRpYWxseSBhIG5vLWdvIGZvciB0aGlzIHBhdGNoLiBUaGUgcmVsZXZhbnQgZmllbGRzIGFyZToKCiogICBgV29ydGhGdXp6aW5nYDogZmFsc2UKKiAgIGBFbmFibGVDb25maWdzYDogXFsgXQoqICAgYEZvY3VzU3ltYm9sc2A6IFxbIF0KKiAgIGBSZWFzb25pbmdgOiBDb25jaXNlIGV4cGxhbmF0aW9uIHRoYXQgdGhlIHBhdGNoIGlzIGZvciB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBkcml2ZXIgKGBpY2VgKSwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLgoKTm93IEkmIzM5O2xsIHByZXAgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBjYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEV0aGVybmV0IEU4MDAgU2VyaWVzIGRyaXZlciAoaWNlKSwgc3BlY2lmaWNhbGx5IFRDIGZsb3dlciBmaWx0ZXIgb2ZmbG9hZCBsb2dpYy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgKEludGVsIEU4MTAvRTgwMCBOSUNzKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEV0aGVybmV0IEU4MDAgU2VyaWVzIGRyaXZlciAoaWNlKSwgc3BlY2lmaWNhbGx5IFRDIGZsb3dlciBmaWx0ZXIgb2ZmbG9hZCBsb2dpYy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgKEludGVsIEU4MTAvRTgwMCBOSUNzKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNzo1NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTBUMTc6NTc6MjcuMTM4MjE1MzIyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk3NDE1NDAwODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgRXRoZXJuZXQgRTgwMCBTZXJpZXMgZHJpdmVyIChpY2UpLCBzcGVjaWZpY2FsbHkgVEMgZmxvd2VyIGZpbHRlciBvZmZsb2FkIGxvZ2ljLiBUaGlzIGRyaXZlciByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSAoSW50ZWwgRTgxMC9FODAwIE5JQ3MpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNzo1NzoyNy4xMzgyMjA5NzJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwODM4MDA0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDA5OTIzNzUwYmFmYzU3MGFjNGIzZmI1NjFlMDYxMzVjNDhhMDgxZDVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMTAgMTc6NTc6MjYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXFxuaW5kZXggZGIzYzcwMTVjNTZjNC4uNmM1OTZlNWEzMTUxNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmhcXG5AQCAtNjQzLDYgKzY0Myw3IEBAIHN0cnVjdCBpY2VfcGYge1xcbiBcXHQgKi9cXG4gXFx0dTE2IG51bV9kbWFjX2NobmxfZmx0cnM7XFxuIFxcdHN0cnVjdCBobGlzdF9oZWFkIHRjX2Zsb3dlcl9mbHRyX2xpc3Q7XFxuK1xcdHN0cnVjdCBobGlzdF9oZWFkIHRjX3N3X2ZsdHJfbGlzdDtcXG4gXFxuIFxcdHU2NCBzdXBwb3J0ZWRfcnhkaWRzO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90Y19saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdGNfbGliLmNcXG5pbmRleCBkMjAzNTdjMDQxMjczLi43Y2ZjODk0MWI3YmE1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdGNfbGliLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RjX2xpYi5jXFxuQEAgLTc4LDcgKzc4LDggQEAgc3RhdGljIGludCBpY2VfdGNfY291bnRfbGt1cHModTMyIGZsYWdzLCBzdHJ1Y3QgaWNlX3RjX2Zsb3dlcl9mbHRyICpmbHRyKVxcbiBcXHRcXHQgICAgIElDRV9UQ19GTFdSX0ZJRUxEX0RFU1RfSVBWNiB8IElDRV9UQ19GTFdSX0ZJRUxEX1NSQ19JUFY2KSlcXG4gXFx0XFx0bGt1cHNfY250Kys7XFxuIFxcbi1cXHRpZiAoZmxhZ3MgXFx1MDAyNiAoSUNFX1RDX0ZMV1JfRklFTERfSVBfVE9TIHwgSUNFX1RDX0ZMV1JfRklFTERfSVBfVFRMKSlcXG4rXFx0aWYgKGZsYWdzIFxcdTAwMjYgKElDRV9UQ19GTFdSX0ZJRUxEX0lQX1RPUyB8IElDRV9UQ19GTFdSX0ZJRUxEX0lQX1RUTCB8XFxuK1xcdFxcdCAgICAgSUNFX1RDX0ZMV1JfRklFTERfSVBfUFJPVE8pKVxcbiBcXHRcXHRsa3Vwc19jbnQrKztcXG4gXFxuIFxcdC8qIGFyZSBMMlRQdjMgb3B0aW9ucyBzcGVjaWZpZWQ/ICovXFxuQEAgLTU1Miw3ICs1NTMsOCBAQCBpY2VfdGNfZmlsbF9ydWxlcyhzdHJ1Y3QgaWNlX2h3ICpodywgdTMyIGZsYWdzLFxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoaGVhZGVycy1cXHUwMDNlbDJfa2V5Lm5fcHJvdG8gPT0gaHRvbnMoRVRIX1BfSVApIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAoZmxhZ3MgXFx1MDAyNiAoSUNFX1RDX0ZMV1JfRklFTERfSVBfVE9TIHwgSUNFX1RDX0ZMV1JfRklFTERfSVBfVFRMKSkpIHtcXG4rXFx0ICAgIChmbGFncyBcXHUwMDI2IChJQ0VfVENfRkxXUl9GSUVMRF9JUF9UT1MgfCBJQ0VfVENfRkxXUl9GSUVMRF9JUF9UVEwgfFxcbitcXHRcXHQgICAgICBJQ0VfVENfRkxXUl9GSUVMRF9JUF9QUk9UTykpKSB7XFxuIFxcdFxcdGxpc3RbaV0udHlwZSA9IGljZV9wcm90b190eXBlX2Zyb21faXB2NChpbm5lcik7XFxuIFxcbiBcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJQ0VfVENfRkxXUl9GSUVMRF9JUF9UT1MpIHtcXG5AQCAtNTY3LDExICs1NjksMTkgQEAgaWNlX3RjX2ZpbGxfcnVsZXMoc3RydWN0IGljZV9odyAqaHcsIHUzMiBmbGFncyxcXG4gXFx0XFx0XFx0XFx0aGVhZGVycy1cXHUwMDNlbDNfbWFzay50dGw7XFxuIFxcdFxcdH1cXG4gXFxuK1xcdFxcdGlmIChmbGFncyBcXHUwMDI2IElDRV9UQ19GTFdSX0ZJRUxEX0lQX1BST1RPKSB7XFxuK1xcdFxcdFxcdGxpc3RbaV0uaF91LmlwdjRfaGRyLnByb3RvY29sID1cXG4rXFx0XFx0XFx0XFx0aGVhZGVycy1cXHUwMDNlbDNfa2V5LmlwX3Byb3RvO1xcbitcXHRcXHRcXHRsaXN0W2ldLm1fdS5pcHY0X2hkci5wcm90b2NvbCA9XFxuK1xcdFxcdFxcdFxcdGhlYWRlcnMtXFx1MDAzZWwzX21hc2suaXBfcHJvdG87XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdGkrKztcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGhlYWRlcnMtXFx1MDAzZWwyX2tleS5uX3Byb3RvID09IGh0b25zKEVUSF9QX0lQVjYpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAoZmxhZ3MgXFx1MDAyNiAoSUNFX1RDX0ZMV1JfRklFTERfSVBfVE9TIHwgSUNFX1RDX0ZMV1JfRklFTERfSVBfVFRMKSkpIHtcXG4rXFx0ICAgIChmbGFncyBcXHUwMDI2IChJQ0VfVENfRkxXUl9GSUVMRF9JUF9UT1MgfCBJQ0VfVENfRkxXUl9GSUVMRF9JUF9UVEwgfFxcbitcXHRcXHQgICAgICBJQ0VfVENfRkxXUl9GSUVMRF9JUF9QUk9UTykpKSB7XFxuIFxcdFxcdHN0cnVjdCBpY2VfaXB2Nl9oZHIgKmhkcl9oLCAqaGRyX207XFxuIFxcbiBcXHRcXHRoZHJfaCA9IFxcdTAwMjZsaXN0W2ldLmhfdS5pcHY2X2hkcjtcXG5AQCAtNTkyLDYgKzYwMiwxMSBAQCBpY2VfdGNfZmlsbF9ydWxlcyhzdHJ1Y3QgaWNlX2h3ICpodywgdTMyIGZsYWdzLFxcbiBcXHRcXHRcXHRoZHJfbS1cXHUwMDNlaG9wX2xpbWl0ID0gaGVhZGVycy1cXHUwMDNlbDNfbWFzay50dGw7XFxuIFxcdFxcdH1cXG4gXFxuK1xcdFxcdGlmIChmbGFncyBcXHUwMDI2IElDRV9UQ19GTFdSX0ZJRUxEX0lQX1BST1RPKSB7XFxuK1xcdFxcdFxcdGhkcl9oLVxcdTAwM2VuZXh0X2hkciA9IGhlYWRlcnMtXFx1MDAzZWwzX2tleS5pcF9wcm90bztcXG4rXFx0XFx0XFx0aGRyX20tXFx1MDAzZW5leHRfaGRyID0gaGVhZGVycy1cXHUwMDNlbDNfbWFzay5pcF9wcm90bztcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0aSsrO1xcbiBcXHR9XFxuIFxcbkBAIC0xNzM3LDYgKzE3NTIsOSBAQCBpY2VfcGFyc2VfY2xzX2Zsb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZmlsdGVyX2Rldiwgc3RydWN0IGljZV92c2kgKnZzaSxcXG4gXFx0XFx0aGVhZGVycy1cXHUwMDNlbDJfa2V5Lm5fcHJvdG8gPSBjcHVfdG9fYmUxNihuX3Byb3RvX2tleSk7XFxuIFxcdFxcdGhlYWRlcnMtXFx1MDAzZWwyX21hc2subl9wcm90byA9IGNwdV90b19iZTE2KG5fcHJvdG9fbWFzayk7XFxuIFxcdFxcdGhlYWRlcnMtXFx1MDAzZWwzX2tleS5pcF9wcm90byA9IG1hdGNoLmtleS1cXHUwMDNlaXBfcHJvdG87XFxuK1xcdFxcdGhlYWRlcnMtXFx1MDAzZWwzX21hc2suaXBfcHJvdG8gPSBtYXRjaC5tYXNrLVxcdTAwM2VpcF9wcm90bztcXG4rXFx0XFx0aWYgKG1hdGNoLm1hc2stXFx1MDAzZWlwX3Byb3RvKVxcbitcXHRcXHRcXHRmbHRyLVxcdTAwM2VmbGFncyB8PSBJQ0VfVENfRkxXUl9GSUVMRF9JUF9QUk9UTztcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGZsb3dfcnVsZV9tYXRjaF9rZXkocnVsZSwgRkxPV19ESVNTRUNUT1JfS0VZX0VUSF9BRERSUykpIHtcXG5AQCAtMTkxMCw2ICsxOTI4LDE5IEBAIGljZV9wYXJzZV9jbHNfZmxvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXJfZGV2LCBzdHJ1Y3QgaWNlX3ZzaSAqdnNpLFxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChmbHRyLVxcdTAwM2VmbGFncyBcXHUwMDI2IChJQ0VfVENfRkxXUl9GSUVMRF9ERVNUX0w0X1BPUlQgfFxcbitcXHRcXHRcXHQgICBJQ0VfVENfRkxXUl9GSUVMRF9TUkNfTDRfUE9SVCB8XFxuK1xcdFxcdFxcdCAgIElDRV9UQ19GTFdSX0ZJRUxEX0wyVFBWM19TRVNTSUQpKVxcbitcXHRcXHRmbHRyLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+SUNFX1RDX0ZMV1JfRklFTERfSVBfUFJPVE87XFxuK1xcbitcXHRpZiAoKGZsdHItXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUNFX1RDX0ZMV1JfRklFTERfSVBfUFJPVE8pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBoZWFkZXJzLVxcdTAwM2VsMl9rZXkubl9wcm90byAhPSBodG9ucyhFVEhfUF9JUCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGhlYWRlcnMtXFx1MDAzZWwyX2tleS5uX3Byb3RvICE9IGh0b25zKEVUSF9QX0lQVjYpKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChmbHRyLVxcdTAwM2VleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJJUCBwcm90b2NvbCBtYXRjaCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggR1RQIG9yIFBQUG9FXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4gXFx0LyogSW5ncmVzcyBmaWx0ZXIgb24gcmVwcmVzZW50b3IgcmVzdWx0cyBpbiBhbiBlZ3Jlc3MgZmlsdGVyIGluIEhXXFxuIFxcdCAqIGFuZCB2aWNlIHZlcnNhXFxuIFxcdCAqL1xcbkBAIC0yMjM4LDYgKzIyNjksMTEyIEBAIGljZV9maW5kX3RjX2Zsb3dlcl9mbHRyKHN0cnVjdCBpY2VfcGYgKnBmLCB1bnNpZ25lZCBsb25nIGNvb2tpZSlcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBpY2VfdGNfZmx0cl9pc19kcm9wIC0gY2hlY2sgaWYgYSBmaWx0ZXIgY2FycmllcyBhIGRyb3AgYWN0aW9uXFxuKyAqIEBjbHNfZmxvd2VyOiBvZmZsb2FkIHJlcXVlc3QgZGVzY3JpYmluZyB0aGUgZmlsdGVyXFxuKyAqXFxuKyAqIFJldHVybjogdHJ1ZSBpZiBhbnkgYWN0aW9uIG9mIHRoZSBmaWx0ZXIgaXMgYSBkcm9wLCBmYWxzZSBvdGhlcndpc2UuXFxuKyAqL1xcbitzdGF0aWMgYm9vbCBpY2VfdGNfZmx0cl9pc19kcm9wKHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvd2VyKVxcbit7XFxuK1xcdHN0cnVjdCBmbG93X3J1bGUgKnJ1bGUgPSBmbG93X2Nsc19vZmZsb2FkX2Zsb3dfcnVsZShjbHNfZmxvd2VyKTtcXG4rXFx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICphY3Q7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aWYgKGNsc19mbG93ZXItXFx1MDAzZWNsYXNzaWQpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGZsb3dfYWN0aW9uX2Zvcl9lYWNoKGksIGFjdCwgXFx1MDAyNnJ1bGUtXFx1MDAzZWFjdGlvbilcXG4rXFx0XFx0aWYgKGFjdC1cXHUwMDNlaWQgPT0gRkxPV19BQ1RJT05fRFJPUClcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBpY2VfdGNfdW50cmFja19zd19mbHRyIC0gZm9yZ2V0IGEgdHJhY2tlZCBzb2Z0d2FyZS1vbmx5IGZpbHRlclxcbisgKiBAcGY6IHBvaW50ZXIgdG8gUEYgc3RydWN0dXJlXFxuKyAqIEBjb29raWU6IHVuaXF1ZSBmaWx0ZXIgaWRlbnRpZmllciBmcm9tIHRoZSBvZmZsb2FkIHJlcXVlc3RcXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIGlmIHRoZSBmaWx0ZXIgd2FzIHRyYWNrZWQsIGZhbHNlIG90aGVyd2lzZS5cXG4rICovXFxuK3N0YXRpYyBib29sIGljZV90Y191bnRyYWNrX3N3X2ZsdHIoc3RydWN0IGljZV9wZiAqcGYsIHVuc2lnbmVkIGxvbmcgY29va2llKVxcbit7XFxuK1xcdHN0cnVjdCBpY2VfdGNfc3dfZmx0ciAqc3dfZmx0cjtcXG4rXFxuK1xcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KHN3X2ZsdHIsIFxcdTAwMjZwZi1cXHUwMDNldGNfc3dfZmx0cl9saXN0LCBub2RlKSB7XFxuK1xcdFxcdGlmIChzd19mbHRyLVxcdTAwM2Vjb29raWUgIT0gY29va2llKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGhsaXN0X2RlbChcXHUwMDI2c3dfZmx0ci1cXHUwMDNlbm9kZSk7XFxuK1xcdFxcdGtmcmVlKHN3X2ZsdHIpO1xcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbisvKipcXG4rICogaWNlX3RjX3RyYWNrX3N3X2ZsdHIgLSByZW1lbWJlciBhIGZpbHRlciB0aGF0IHdhcyBub3Qgb2ZmbG9hZGVkXFxuKyAqIEBwZjogcG9pbnRlciB0byBQRiBzdHJ1Y3R1cmVcXG4rICogQGZpbHRlcl9kZXY6IGRldmljZSB0aGUgZmlsdGVyIHdhcyByZXF1ZXN0ZWQgb25cXG4rICogQGNsc19mbG93ZXI6IG9mZmxvYWQgcmVxdWVzdCBkZXNjcmliaW5nIHRoZSBmaWx0ZXJcXG4rICogQGRpcmVjdGlvbjogYmxvY2sgZGlyZWN0aW9uIHRoZSBmaWx0ZXIgd2FzIHJlcXVlc3RlZCBmb3JcXG4rICovXFxuK3N0YXRpYyB2b2lkIGljZV90Y190cmFja19zd19mbHRyKHN0cnVjdCBpY2VfcGYgKnBmLFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlcl9kZXYsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqY2xzX2Zsb3dlcixcXG4rXFx0XFx0XFx0XFx0IGVudW0gaWNlX2Vzd2l0Y2hfZmx0cl9kaXJlY3Rpb24gZGlyZWN0aW9uKVxcbit7XFxuK1xcdHN0cnVjdCBpY2VfdGNfc3dfZmx0ciAqc3dfZmx0cjtcXG4rXFxuK1xcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KHN3X2ZsdHIsIFxcdTAwMjZwZi1cXHUwMDNldGNfc3dfZmx0cl9saXN0LCBub2RlKVxcbitcXHRcXHRpZiAoc3dfZmx0ci1cXHUwMDNlY29va2llID09IGNsc19mbG93ZXItXFx1MDAzZWNvb2tpZSlcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0c3dfZmx0ciA9IGt6YWxsb2Nfb2JqKCpzd19mbHRyKTtcXG4rXFx0aWYgKCFzd19mbHRyKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzd19mbHRyLVxcdTAwM2Vjb29raWUgPSBjbHNfZmxvd2VyLVxcdTAwM2Vjb29raWU7XFxuK1xcdHN3X2ZsdHItXFx1MDAzZWZpbHRlcl9kZXYgPSBmaWx0ZXJfZGV2O1xcbitcXHRzd19mbHRyLVxcdTAwM2VwcmlvID0gY2xzX2Zsb3dlci1cXHUwMDNlY29tbW9uLnByaW87XFxuK1xcdHN3X2ZsdHItXFx1MDAzZWRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcXG4rXFx0c3dfZmx0ci1cXHUwMDNlaXNfZHJvcCA9IGljZV90Y19mbHRyX2lzX2Ryb3AoY2xzX2Zsb3dlcik7XFxuK1xcdGhsaXN0X2FkZF9oZWFkKFxcdTAwMjZzd19mbHRyLVxcdTAwM2Vub2RlLCBcXHUwMDI2cGYtXFx1MDAzZXRjX3N3X2ZsdHJfbGlzdCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBpY2VfdGNfZHJvcF9ieXBhc3Nlc19mbHRyIC0gY2hlY2sgaWYgYSBkcm9wIHJ1bGUgd291bGQgYnlwYXNzIGEgZmlsdGVyXFxuKyAqIEBwZjogcG9pbnRlciB0byBQRiBzdHJ1Y3R1cmVcXG4rICogQGZpbHRlcl9kZXY6IGRldmljZSB0aGUgZHJvcCBmaWx0ZXIgaXMgcmVxdWVzdGVkIG9uXFxuKyAqIEBwcmlvOiBUQyBwcmlvcml0eSBvZiB0aGUgZHJvcCBmaWx0ZXJcXG4rICogQGRpcmVjdGlvbjogYmxvY2sgZGlyZWN0aW9uIG9mIHRoZSBkcm9wIGZpbHRlclxcbisgKlxcbisgKiBSZXR1cm46IHRydWUgaWYgc3VjaCBhIGZpbHRlciBleGlzdHMsIGZhbHNlIG90aGVyd2lzZS5cXG4rICovXFxuK3N0YXRpYyBib29sXFxuK2ljZV90Y19kcm9wX2J5cGFzc2VzX2ZsdHIoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXJfZGV2LFxcbitcXHRcXHRcXHQgIHUzMiBwcmlvLCBlbnVtIGljZV9lc3dpdGNoX2ZsdHJfZGlyZWN0aW9uIGRpcmVjdGlvbilcXG4re1xcbitcXHRzdHJ1Y3QgaWNlX3RjX2Zsb3dlcl9mbHRyICpmbHRyO1xcbitcXHRzdHJ1Y3QgaWNlX3RjX3N3X2ZsdHIgKnN3X2ZsdHI7XFxuK1xcbitcXHRobGlzdF9mb3JfZWFjaF9lbnRyeShzd19mbHRyLCBcXHUwMDI2cGYtXFx1MDAzZXRjX3N3X2ZsdHJfbGlzdCwgbm9kZSlcXG4rXFx0XFx0aWYgKHN3X2ZsdHItXFx1MDAzZWZpbHRlcl9kZXYgPT0gZmlsdGVyX2RldiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgc3dfZmx0ci1cXHUwMDNlZGlyZWN0aW9uID09IGRpcmVjdGlvbiBcXHUwMDI2XFx1MDAyNiBzd19mbHRyLVxcdTAwM2VwcmlvIFxcdTAwM2MgcHJpbyBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIXN3X2ZsdHItXFx1MDAzZWlzX2Ryb3ApXFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0aGxpc3RfZm9yX2VhY2hfZW50cnkoZmx0ciwgXFx1MDAyNnBmLVxcdTAwM2V0Y19mbG93ZXJfZmx0cl9saXN0LCB0Y19mbG93ZXJfbm9kZSlcXG4rXFx0XFx0aWYgKGZsdHItXFx1MDAzZWZpbHRlcl9kZXYgPT0gZmlsdGVyX2RldiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgZmx0ci1cXHUwMDNlZGlyZWN0aW9uID09IGRpcmVjdGlvbiBcXHUwMDI2XFx1MDAyNiBmbHRyLVxcdTAwM2VwcmlvIFxcdTAwM2MgcHJpbyBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgZmx0ci1cXHUwMDNlYWN0aW9uLmZsdHJfYWN0ICE9IElDRV9EUk9QX1BBQ0tFVClcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBpY2VfYWRkX2Nsc19mbG93ZXIgLSBhZGQgVEMgZmxvd2VyIGZpbHRlcnNcXG4gICogQG5ldGRldjogUG9pbnRlciB0byBmaWx0ZXIgZGV2aWNlXFxuQEAgLTIyNTMsMTQgKzIzOTAsMjQgQEAgaW50IGljZV9hZGRfY2xzX2Zsb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgaWNlX3ZzaSAqdnNpLFxcbiB7XFxuIFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IGNsc19mbG93ZXItXFx1MDAzZWNvbW1vbi5leHRhY2s7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICp2c2lfbmV0ZGV2ID0gdnNpLVxcdTAwM2VuZXRkZXY7XFxuK1xcdGVudW0gaWNlX2Vzd2l0Y2hfZmx0cl9kaXJlY3Rpb24gZGlyZWN0aW9uO1xcbiBcXHRzdHJ1Y3QgaWNlX3RjX2Zsb3dlcl9mbHRyICpmbHRyO1xcbiBcXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHZzaS1cXHUwMDNlYmFjaztcXG4rXFx0Ym9vbCB0cmFja19zd19mbHRycztcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdGlmIChpY2VfaXNfcmVzZXRfaW5fcHJvZ3Jlc3MocGYtXFx1MDAzZXN0YXRlKSlcXG4tXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4tXFx0aWYgKHRlc3RfYml0KElDRV9GTEFHX0ZXX0xMRFBfQUdFTlQsIHBmLVxcdTAwM2VmbGFncykpXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRkaXJlY3Rpb24gPSBpbmdyZXNzID8gSUNFX0VTV0lUQ0hfRkxUUl9JTkdSRVNTIDpcXG4rXFx0XFx0XFx0ICAgICAgSUNFX0VTV0lUQ0hfRkxUUl9FR1JFU1M7XFxuK1xcdHRyYWNrX3N3X2ZsdHJzID0gIWljZV9pc19lc3dpdGNoX21vZGVfc3dpdGNoZGV2KHBmKTtcXG4rXFxuK1xcdGlmIChpY2VfaXNfcmVzZXRfaW5fcHJvZ3Jlc3MocGYtXFx1MDAzZXN0YXRlKSkge1xcbitcXHRcXHRlcnIgPSAtRUJVU1k7XFxuK1xcdFxcdGdvdG8gdHJhY2tfc3c7XFxuK1xcdH1cXG4rXFx0aWYgKHRlc3RfYml0KElDRV9GTEFHX0ZXX0xMRFBfQUdFTlQsIHBmLVxcdTAwM2VmbGFncykpIHtcXG4rXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byB0cmFja19zdztcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKGljZV9pc19wb3J0X3JlcHJfbmV0ZGV2KG5ldGRldikpXFxuIFxcdFxcdHZzaV9uZXRkZXYgPSBuZXRkZXY7XFxuQEAgLTIyNzMsNyArMjQyMCw4IEBAIGludCBpY2VfYWRkX2Nsc19mbG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGljZV92c2kgKnZzaSxcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChuZXRkZXYgPT0gdnNpX25ldGRldilcXG4gXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcImNhbid0IGFwcGx5IFRDIGZsb3dlciBmaWx0ZXJzLCB0dXJuIE9OIGh3LXRjLW9mZmxvYWQgYW5kIHRyeSBhZ2FpblxcXCIpO1xcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byB0cmFja19zdztcXG4gXFx0fVxcbiBcXG4gXFx0LyogYXZvaWQgZHVwbGljYXRlIGVudHJpZXMsIGlmIGV4aXN0cyAtIHJldHVybiBlcnJvciAqL1xcbkBAIC0yMjgzLDE0ICsyNDMxLDMyIEBAIGludCBpY2VfYWRkX2Nsc19mbG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGljZV92c2kgKnZzaSxcXG4gXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuIFxcdH1cXG4gXFxuK1xcdGlmICh0cmFja19zd19mbHRycyBcXHUwMDI2XFx1MDAyNiAhY2xzX2Zsb3dlci1cXHUwMDNlY29tbW9uLnNraXBfc3cgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGljZV90Y19mbHRyX2lzX2Ryb3AoY2xzX2Zsb3dlcikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGljZV90Y19kcm9wX2J5cGFzc2VzX2ZsdHIocGYsIG5ldGRldiwgY2xzX2Zsb3dlci1cXHUwMDNlY29tbW9uLnByaW8sXFxuK1xcdFxcdFxcdFxcdCAgICAgIGRpcmVjdGlvbikpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIkRyb3AgZmlsdGVyIG5vdCBvZmZsb2FkZWQgYmVjYXVzZSBpdCB3b3VsZCBieXBhc3MgYSBoaWdoZXIgcHJpb3JpdHkgZmlsdGVyXFxcIik7XFxuK1xcdFxcdGVyciA9IC1FT1BOT1RTVVBQO1xcbitcXHRcXHRnb3RvIHRyYWNrX3N3O1xcbitcXHR9XFxuK1xcbiBcXHQvKiBwcmVwIGFuZCBhZGQgVEMtZmxvd2VyIGZpbHRlciBpbiBIVyAqL1xcbiBcXHRlcnIgPSBpY2VfYWRkX3RjX2ZsdHIobmV0ZGV2LCB2c2ksIGNsc19mbG93ZXIsIFxcdTAwMjZmbHRyLCBpbmdyZXNzKTtcXG4gXFx0aWYgKGVycilcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0Z290byB0cmFja19zdztcXG4rXFxuK1xcdGZsdHItXFx1MDAzZWZpbHRlcl9kZXYgPSBuZXRkZXY7XFxuK1xcdGZsdHItXFx1MDAzZXByaW8gPSBjbHNfZmxvd2VyLVxcdTAwM2Vjb21tb24ucHJpbztcXG4gXFxuIFxcdC8qIGFkZCBmaWx0ZXIgaW50byBhbiBvcmRlcmVkIGxpc3QgKi9cXG4gXFx0aGxpc3RfYWRkX2hlYWQoXFx1MDAyNmZsdHItXFx1MDAzZXRjX2Zsb3dlcl9ub2RlLCBcXHUwMDI2cGYtXFx1MDAzZXRjX2Zsb3dlcl9mbHRyX2xpc3QpO1xcbiBcXHRyZXR1cm4gMDtcXG4rXFxuK3RyYWNrX3N3OlxcbitcXHRpZiAodHJhY2tfc3dfZmx0cnMgXFx1MDAyNlxcdTAwMjYgIWNsc19mbG93ZXItXFx1MDAzZWNvbW1vbi5za2lwX3N3KVxcbitcXHRcXHRpY2VfdGNfdHJhY2tfc3dfZmx0cihwZiwgbmV0ZGV2LCBjbHNfZmxvd2VyLCBkaXJlY3Rpb24pO1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMjMwNSw2ICsyNDcxLDkgQEAgaWNlX2RlbF9jbHNfZmxvd2VyKHN0cnVjdCBpY2VfdnNpICp2c2ksIHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvd2VyKVxcbiBcXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHZzaS1cXHUwMDNlYmFjaztcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdGlmIChpY2VfdGNfdW50cmFja19zd19mbHRyKHBmLCBjbHNfZmxvd2VyLVxcdTAwM2Vjb29raWUpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuIFxcdC8qIGZpbmQgZmlsdGVyICovXFxuIFxcdGZsdHIgPSBpY2VfZmluZF90Y19mbG93ZXJfZmx0cihwZiwgY2xzX2Zsb3dlci1cXHUwMDNlY29va2llKTtcXG4gXFx0aWYgKCFmbHRyKSB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdGNfbGliLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RjX2xpYi5oXFxuaW5kZXggOGEzYWIyZjIyYWY5Yi4uMzdkNmY0MTAwZWNmYiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RjX2xpYi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90Y19saWIuaFxcbkBAIC0zOCw2ICszOCw3IEBAXFxuICNkZWZpbmUgSUNFX1RDX0ZMV1JfRklFTERfQ1ZMQU5fUFJJT1xcdFxcdEJJVCgyOClcXG4gI2RlZmluZSBJQ0VfVENfRkxXUl9GSUVMRF9WTEFOX1RQSURcXHRcXHRCSVQoMjkpXFxuICNkZWZpbmUgSUNFX1RDX0ZMV1JfRklFTERfUEZDUF9PUFRTXFx0XFx0QklUKDMwKVxcbisjZGVmaW5lIElDRV9UQ19GTFdSX0ZJRUxEX0lQX1BST1RPXFx0XFx0QklUKDMxKVxcbiBcXG4gI2RlZmluZSBJQ0VfVENfRkxPV0VSX01BU0tfMzIgICAweEZGRkZGRkZGXFxuIFxcbkBAIC0xMzgsMTIgKzEzOSwzMyBAQCBlbnVtIGljZV9lc3dpdGNoX2ZsdHJfZGlyZWN0aW9uIHtcXG4gXFx0SUNFX0VTV0lUQ0hfRkxUUl9FR1JFU1MsXFxuIH07XFxuIFxcbisvKipcXG4rICogc3RydWN0IGljZV90Y19zd19mbHRyIC0gZmlsdGVyIHByZXNlbnRlZCB0byB0aGUgZHJpdmVyIGJ1dCBub3Qgb2ZmbG9hZGVkXFxuKyAqIEBub2RlOiBub2RlIGluIHRoZSBwZi1cXHUwMDNldGNfc3dfZmx0cl9saXN0XFxuKyAqIEBjb29raWU6IHVuaXF1ZSBmaWx0ZXIgaWRlbnRpZmllciBmcm9tIHRoZSBvZmZsb2FkIHJlcXVlc3RcXG4rICogQGZpbHRlcl9kZXY6IGRldmljZSB0aGUgZmlsdGVyIHdhcyByZXF1ZXN0ZWQgb25cXG4rICogQHByaW86IFRDIHByaW9yaXR5LCBsb3dlciB2YWx1ZSBpcyBldmFsdWF0ZWQgZmlyc3RcXG4rICogQGRpcmVjdGlvbjogYmxvY2sgZGlyZWN0aW9uIHRoZSBmaWx0ZXIgd2FzIHJlcXVlc3RlZCBmb3JcXG4rICogQGlzX2Ryb3A6IHRoZSBmaWx0ZXIgY2FycmllcyBhIGRyb3AgYWN0aW9uXFxuKyAqL1xcbitzdHJ1Y3QgaWNlX3RjX3N3X2ZsdHIge1xcbitcXHRzdHJ1Y3QgaGxpc3Rfbm9kZSBub2RlO1xcbitcXHR1bnNpZ25lZCBsb25nIGNvb2tpZTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlcl9kZXY7XFxuK1xcdHUzMiBwcmlvO1xcbitcXHRlbnVtIGljZV9lc3dpdGNoX2ZsdHJfZGlyZWN0aW9uIGRpcmVjdGlvbjtcXG4rXFx0Ym9vbCBpc19kcm9wO1xcbit9O1xcbitcXG4gc3RydWN0IGljZV90Y19mbG93ZXJfZmx0ciB7XFxuIFxcdHN0cnVjdCBobGlzdF9ub2RlIHRjX2Zsb3dlcl9ub2RlO1xcbiBcXG4gXFx0LyogY29va2llIGJlY29tZXMgZmlsdGVyX3J1bGVfaWQgaWYgcnVsZSBpcyBhZGRlZCBzdWNjZXNzZnVsbHkgKi9cXG4gXFx0dW5zaWduZWQgbG9uZyBjb29raWU7XFxuIFxcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZmlsdGVyX2RldjtcXG4rXFx0dTMyIHByaW87XFxuK1xcbiBcXHQvKiBhZGRfYWR2X3J1bGUgcmV0dXJucyBpbmZvcm1hdGlvbiBsaWtlIHJlY2lwZSBJRCwgcnVsZV9pZC4gU3RvcmVcXG4gXFx0ICogdGhvc2UgdmFsdWVzIHNpbmNlIHRoZXkgYXJlIG5lZWRlZCB0byByZW1vdmUgYWR2YW5jZWQgcnVsZVxcbiBcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTc6NTc6MjcuNjQ3NDM3MjJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE5MjMyMzA0ODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgRXRoZXJuZXQgRTgwMCBTZXJpZXMgZHJpdmVyIChpY2UpLCBzcGVjaWZpY2FsbHkgVEMgZmxvd2VyIGZpbHRlciBvZmZsb2FkIGxvZ2ljLiBUaGlzIGRyaXZlciByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSAoSW50ZWwgRTgxMC9FODAwIE5JQ3MpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA5OTIzNzUwYmFmYzU3MGFjNGIzZmI1NjFlMDYxMzVjNDhhMDgxZDVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAxNzo1NzoyNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxuaW5kZXggZGIzYzcwMTVjNTZjNC4uNmM1OTZlNWEzMTUxNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXG5AQCAtNjQzLDYgKzY0Myw3IEBAIHN0cnVjdCBpY2VfcGYge1xuIFx0ICovXG4gXHR1MTYgbnVtX2RtYWNfY2hubF9mbHRycztcbiBcdHN0cnVjdCBobGlzdF9oZWFkIHRjX2Zsb3dlcl9mbHRyX2xpc3Q7XG4rXHRzdHJ1Y3QgaGxpc3RfaGVhZCB0Y19zd19mbHRyX2xpc3Q7XG4gXG4gXHR1NjQgc3VwcG9ydGVkX3J4ZGlkcztcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RjX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90Y19saWIuY1xuaW5kZXggZDIwMzU3YzA0MTI3My4uN2NmYzg5NDFiN2JhNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdGNfbGliLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdGNfbGliLmNcbkBAIC03OCw3ICs3OCw4IEBAIHN0YXRpYyBpbnQgaWNlX3RjX2NvdW50X2xrdXBzKHUzMiBmbGFncywgc3RydWN0IGljZV90Y19mbG93ZXJfZmx0ciAqZmx0cilcbiBcdFx0ICAgICBJQ0VfVENfRkxXUl9GSUVMRF9ERVNUX0lQVjYgfCBJQ0VfVENfRkxXUl9GSUVMRF9TUkNfSVBWNikpXG4gXHRcdGxrdXBzX2NudCsrO1xuIFxuLVx0aWYgKGZsYWdzIFx1MDAyNiAoSUNFX1RDX0ZMV1JfRklFTERfSVBfVE9TIHwgSUNFX1RDX0ZMV1JfRklFTERfSVBfVFRMKSlcbitcdGlmIChmbGFncyBcdTAwMjYgKElDRV9UQ19GTFdSX0ZJRUxEX0lQX1RPUyB8IElDRV9UQ19GTFdSX0ZJRUxEX0lQX1RUTCB8XG4rXHRcdCAgICAgSUNFX1RDX0ZMV1JfRklFTERfSVBfUFJPVE8pKVxuIFx0XHRsa3Vwc19jbnQrKztcbiBcbiBcdC8qIGFyZSBMMlRQdjMgb3B0aW9ucyBzcGVjaWZpZWQ/ICovXG5AQCAtNTUyLDcgKzU1Myw4IEBAIGljZV90Y19maWxsX3J1bGVzKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgZmxhZ3MsXG4gXHR9XG4gXG4gXHRpZiAoaGVhZGVycy1cdTAwM2VsMl9rZXkubl9wcm90byA9PSBodG9ucyhFVEhfUF9JUCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgKGZsYWdzIFx1MDAyNiAoSUNFX1RDX0ZMV1JfRklFTERfSVBfVE9TIHwgSUNFX1RDX0ZMV1JfRklFTERfSVBfVFRMKSkpIHtcbitcdCAgICAoZmxhZ3MgXHUwMDI2IChJQ0VfVENfRkxXUl9GSUVMRF9JUF9UT1MgfCBJQ0VfVENfRkxXUl9GSUVMRF9JUF9UVEwgfFxuK1x0XHQgICAgICBJQ0VfVENfRkxXUl9GSUVMRF9JUF9QUk9UTykpKSB7XG4gXHRcdGxpc3RbaV0udHlwZSA9IGljZV9wcm90b190eXBlX2Zyb21faXB2NChpbm5lcik7XG4gXG4gXHRcdGlmIChmbGFncyBcdTAwMjYgSUNFX1RDX0ZMV1JfRklFTERfSVBfVE9TKSB7XG5AQCAtNTY3LDExICs1NjksMTkgQEAgaWNlX3RjX2ZpbGxfcnVsZXMoc3RydWN0IGljZV9odyAqaHcsIHUzMiBmbGFncyxcbiBcdFx0XHRcdGhlYWRlcnMtXHUwMDNlbDNfbWFzay50dGw7XG4gXHRcdH1cbiBcbitcdFx0aWYgKGZsYWdzIFx1MDAyNiBJQ0VfVENfRkxXUl9GSUVMRF9JUF9QUk9UTykge1xuK1x0XHRcdGxpc3RbaV0uaF91LmlwdjRfaGRyLnByb3RvY29sID1cbitcdFx0XHRcdGhlYWRlcnMtXHUwMDNlbDNfa2V5LmlwX3Byb3RvO1xuK1x0XHRcdGxpc3RbaV0ubV91LmlwdjRfaGRyLnByb3RvY29sID1cbitcdFx0XHRcdGhlYWRlcnMtXHUwMDNlbDNfbWFzay5pcF9wcm90bztcbitcdFx0fVxuK1xuIFx0XHRpKys7XG4gXHR9XG4gXG4gXHRpZiAoaGVhZGVycy1cdTAwM2VsMl9rZXkubl9wcm90byA9PSBodG9ucyhFVEhfUF9JUFY2KSBcdTAwMjZcdTAwMjZcbi1cdCAgICAoZmxhZ3MgXHUwMDI2IChJQ0VfVENfRkxXUl9GSUVMRF9JUF9UT1MgfCBJQ0VfVENfRkxXUl9GSUVMRF9JUF9UVEwpKSkge1xuK1x0ICAgIChmbGFncyBcdTAwMjYgKElDRV9UQ19GTFdSX0ZJRUxEX0lQX1RPUyB8IElDRV9UQ19GTFdSX0ZJRUxEX0lQX1RUTCB8XG4rXHRcdCAgICAgIElDRV9UQ19GTFdSX0ZJRUxEX0lQX1BST1RPKSkpIHtcbiBcdFx0c3RydWN0IGljZV9pcHY2X2hkciAqaGRyX2gsICpoZHJfbTtcbiBcbiBcdFx0aGRyX2ggPSBcdTAwMjZsaXN0W2ldLmhfdS5pcHY2X2hkcjtcbkBAIC01OTIsNiArNjAyLDExIEBAIGljZV90Y19maWxsX3J1bGVzKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgZmxhZ3MsXG4gXHRcdFx0aGRyX20tXHUwMDNlaG9wX2xpbWl0ID0gaGVhZGVycy1cdTAwM2VsM19tYXNrLnR0bDtcbiBcdFx0fVxuIFxuK1x0XHRpZiAoZmxhZ3MgXHUwMDI2IElDRV9UQ19GTFdSX0ZJRUxEX0lQX1BST1RPKSB7XG4rXHRcdFx0aGRyX2gtXHUwMDNlbmV4dF9oZHIgPSBoZWFkZXJzLVx1MDAzZWwzX2tleS5pcF9wcm90bztcbitcdFx0XHRoZHJfbS1cdTAwM2VuZXh0X2hkciA9IGhlYWRlcnMtXHUwMDNlbDNfbWFzay5pcF9wcm90bztcbitcdFx0fVxuK1xuIFx0XHRpKys7XG4gXHR9XG4gXG5AQCAtMTczNyw2ICsxNzUyLDkgQEAgaWNlX3BhcnNlX2Nsc19mbG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlcl9kZXYsIHN0cnVjdCBpY2VfdnNpICp2c2ksXG4gXHRcdGhlYWRlcnMtXHUwMDNlbDJfa2V5Lm5fcHJvdG8gPSBjcHVfdG9fYmUxNihuX3Byb3RvX2tleSk7XG4gXHRcdGhlYWRlcnMtXHUwMDNlbDJfbWFzay5uX3Byb3RvID0gY3B1X3RvX2JlMTYobl9wcm90b19tYXNrKTtcbiBcdFx0aGVhZGVycy1cdTAwM2VsM19rZXkuaXBfcHJvdG8gPSBtYXRjaC5rZXktXHUwMDNlaXBfcHJvdG87XG4rXHRcdGhlYWRlcnMtXHUwMDNlbDNfbWFzay5pcF9wcm90byA9IG1hdGNoLm1hc2stXHUwMDNlaXBfcHJvdG87XG4rXHRcdGlmIChtYXRjaC5tYXNrLVx1MDAzZWlwX3Byb3RvKVxuK1x0XHRcdGZsdHItXHUwMDNlZmxhZ3MgfD0gSUNFX1RDX0ZMV1JfRklFTERfSVBfUFJPVE87XG4gXHR9XG4gXG4gXHRpZiAoZmxvd19ydWxlX21hdGNoX2tleShydWxlLCBGTE9XX0RJU1NFQ1RPUl9LRVlfRVRIX0FERFJTKSkge1xuQEAgLTE5MTAsNiArMTkyOCwxOSBAQCBpY2VfcGFyc2VfY2xzX2Zsb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZmlsdGVyX2Rldiwgc3RydWN0IGljZV92c2kgKnZzaSxcbiBcdFx0fVxuIFx0fVxuIFxuK1x0aWYgKGZsdHItXHUwMDNlZmxhZ3MgXHUwMDI2IChJQ0VfVENfRkxXUl9GSUVMRF9ERVNUX0w0X1BPUlQgfFxuK1x0XHRcdCAgIElDRV9UQ19GTFdSX0ZJRUxEX1NSQ19MNF9QT1JUIHxcbitcdFx0XHQgICBJQ0VfVENfRkxXUl9GSUVMRF9MMlRQVjNfU0VTU0lEKSlcbitcdFx0Zmx0ci1cdTAwM2VmbGFncyBcdTAwMjY9IH5JQ0VfVENfRkxXUl9GSUVMRF9JUF9QUk9UTztcbitcbitcdGlmICgoZmx0ci1cdTAwM2VmbGFncyBcdTAwMjYgSUNFX1RDX0ZMV1JfRklFTERfSVBfUFJPVE8pIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGhlYWRlcnMtXHUwMDNlbDJfa2V5Lm5fcHJvdG8gIT0gaHRvbnMoRVRIX1BfSVApIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGhlYWRlcnMtXHUwMDNlbDJfa2V5Lm5fcHJvdG8gIT0gaHRvbnMoRVRIX1BfSVBWNikpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGZsdHItXHUwMDNlZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJJUCBwcm90b2NvbCBtYXRjaCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggR1RQIG9yIFBQUG9FXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4gXHQvKiBJbmdyZXNzIGZpbHRlciBvbiByZXByZXNlbnRvciByZXN1bHRzIGluIGFuIGVncmVzcyBmaWx0ZXIgaW4gSFdcbiBcdCAqIGFuZCB2aWNlIHZlcnNhXG4gXHQgKi9cbkBAIC0yMjM4LDYgKzIyNjksMTEyIEBAIGljZV9maW5kX3RjX2Zsb3dlcl9mbHRyKHN0cnVjdCBpY2VfcGYgKnBmLCB1bnNpZ25lZCBsb25nIGNvb2tpZSlcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbisvKipcbisgKiBpY2VfdGNfZmx0cl9pc19kcm9wIC0gY2hlY2sgaWYgYSBmaWx0ZXIgY2FycmllcyBhIGRyb3AgYWN0aW9uXG4rICogQGNsc19mbG93ZXI6IG9mZmxvYWQgcmVxdWVzdCBkZXNjcmliaW5nIHRoZSBmaWx0ZXJcbisgKlxuKyAqIFJldHVybjogdHJ1ZSBpZiBhbnkgYWN0aW9uIG9mIHRoZSBmaWx0ZXIgaXMgYSBkcm9wLCBmYWxzZSBvdGhlcndpc2UuXG4rICovXG4rc3RhdGljIGJvb2wgaWNlX3RjX2ZsdHJfaXNfZHJvcChzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqY2xzX2Zsb3dlcilcbit7XG4rXHRzdHJ1Y3QgZmxvd19ydWxlICpydWxlID0gZmxvd19jbHNfb2ZmbG9hZF9mbG93X3J1bGUoY2xzX2Zsb3dlcik7XG4rXHRzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmFjdDtcbitcdGludCBpO1xuK1xuK1x0aWYgKGNsc19mbG93ZXItXHUwMDNlY2xhc3NpZClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Zmxvd19hY3Rpb25fZm9yX2VhY2goaSwgYWN0LCBcdTAwMjZydWxlLVx1MDAzZWFjdGlvbilcbitcdFx0aWYgKGFjdC1cdTAwM2VpZCA9PSBGTE9XX0FDVElPTl9EUk9QKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbisvKipcbisgKiBpY2VfdGNfdW50cmFja19zd19mbHRyIC0gZm9yZ2V0IGEgdHJhY2tlZCBzb2Z0d2FyZS1vbmx5IGZpbHRlclxuKyAqIEBwZjogcG9pbnRlciB0byBQRiBzdHJ1Y3R1cmVcbisgKiBAY29va2llOiB1bmlxdWUgZmlsdGVyIGlkZW50aWZpZXIgZnJvbSB0aGUgb2ZmbG9hZCByZXF1ZXN0XG4rICpcbisgKiBSZXR1cm46IHRydWUgaWYgdGhlIGZpbHRlciB3YXMgdHJhY2tlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuKyAqL1xuK3N0YXRpYyBib29sIGljZV90Y191bnRyYWNrX3N3X2ZsdHIoc3RydWN0IGljZV9wZiAqcGYsIHVuc2lnbmVkIGxvbmcgY29va2llKVxuK3tcbitcdHN0cnVjdCBpY2VfdGNfc3dfZmx0ciAqc3dfZmx0cjtcbitcbitcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KHN3X2ZsdHIsIFx1MDAyNnBmLVx1MDAzZXRjX3N3X2ZsdHJfbGlzdCwgbm9kZSkge1xuK1x0XHRpZiAoc3dfZmx0ci1cdTAwM2Vjb29raWUgIT0gY29va2llKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRobGlzdF9kZWwoXHUwMDI2c3dfZmx0ci1cdTAwM2Vub2RlKTtcbitcdFx0a2ZyZWUoc3dfZmx0cik7XG4rXHRcdHJldHVybiB0cnVlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbisvKipcbisgKiBpY2VfdGNfdHJhY2tfc3dfZmx0ciAtIHJlbWVtYmVyIGEgZmlsdGVyIHRoYXQgd2FzIG5vdCBvZmZsb2FkZWRcbisgKiBAcGY6IHBvaW50ZXIgdG8gUEYgc3RydWN0dXJlXG4rICogQGZpbHRlcl9kZXY6IGRldmljZSB0aGUgZmlsdGVyIHdhcyByZXF1ZXN0ZWQgb25cbisgKiBAY2xzX2Zsb3dlcjogb2ZmbG9hZCByZXF1ZXN0IGRlc2NyaWJpbmcgdGhlIGZpbHRlclxuKyAqIEBkaXJlY3Rpb246IGJsb2NrIGRpcmVjdGlvbiB0aGUgZmlsdGVyIHdhcyByZXF1ZXN0ZWQgZm9yXG4rICovXG4rc3RhdGljIHZvaWQgaWNlX3RjX3RyYWNrX3N3X2ZsdHIoc3RydWN0IGljZV9wZiAqcGYsXG4rXHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlcl9kZXYsXG4rXHRcdFx0XHQgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIsXG4rXHRcdFx0XHQgZW51bSBpY2VfZXN3aXRjaF9mbHRyX2RpcmVjdGlvbiBkaXJlY3Rpb24pXG4re1xuK1x0c3RydWN0IGljZV90Y19zd19mbHRyICpzd19mbHRyO1xuK1xuK1x0aGxpc3RfZm9yX2VhY2hfZW50cnkoc3dfZmx0ciwgXHUwMDI2cGYtXHUwMDNldGNfc3dfZmx0cl9saXN0LCBub2RlKVxuK1x0XHRpZiAoc3dfZmx0ci1cdTAwM2Vjb29raWUgPT0gY2xzX2Zsb3dlci1cdTAwM2Vjb29raWUpXG4rXHRcdFx0cmV0dXJuO1xuK1xuK1x0c3dfZmx0ciA9IGt6YWxsb2Nfb2JqKCpzd19mbHRyKTtcbitcdGlmICghc3dfZmx0cilcbitcdFx0cmV0dXJuO1xuK1xuK1x0c3dfZmx0ci1cdTAwM2Vjb29raWUgPSBjbHNfZmxvd2VyLVx1MDAzZWNvb2tpZTtcbitcdHN3X2ZsdHItXHUwMDNlZmlsdGVyX2RldiA9IGZpbHRlcl9kZXY7XG4rXHRzd19mbHRyLVx1MDAzZXByaW8gPSBjbHNfZmxvd2VyLVx1MDAzZWNvbW1vbi5wcmlvO1xuK1x0c3dfZmx0ci1cdTAwM2VkaXJlY3Rpb24gPSBkaXJlY3Rpb247XG4rXHRzd19mbHRyLVx1MDAzZWlzX2Ryb3AgPSBpY2VfdGNfZmx0cl9pc19kcm9wKGNsc19mbG93ZXIpO1xuK1x0aGxpc3RfYWRkX2hlYWQoXHUwMDI2c3dfZmx0ci1cdTAwM2Vub2RlLCBcdTAwMjZwZi1cdTAwM2V0Y19zd19mbHRyX2xpc3QpO1xuK31cbitcbisvKipcbisgKiBpY2VfdGNfZHJvcF9ieXBhc3Nlc19mbHRyIC0gY2hlY2sgaWYgYSBkcm9wIHJ1bGUgd291bGQgYnlwYXNzIGEgZmlsdGVyXG4rICogQHBmOiBwb2ludGVyIHRvIFBGIHN0cnVjdHVyZVxuKyAqIEBmaWx0ZXJfZGV2OiBkZXZpY2UgdGhlIGRyb3AgZmlsdGVyIGlzIHJlcXVlc3RlZCBvblxuKyAqIEBwcmlvOiBUQyBwcmlvcml0eSBvZiB0aGUgZHJvcCBmaWx0ZXJcbisgKiBAZGlyZWN0aW9uOiBibG9jayBkaXJlY3Rpb24gb2YgdGhlIGRyb3AgZmlsdGVyXG4rICpcbisgKiBSZXR1cm46IHRydWUgaWYgc3VjaCBhIGZpbHRlciBleGlzdHMsIGZhbHNlIG90aGVyd2lzZS5cbisgKi9cbitzdGF0aWMgYm9vbFxuK2ljZV90Y19kcm9wX2J5cGFzc2VzX2ZsdHIoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXJfZGV2LFxuK1x0XHRcdCAgdTMyIHByaW8sIGVudW0gaWNlX2Vzd2l0Y2hfZmx0cl9kaXJlY3Rpb24gZGlyZWN0aW9uKVxuK3tcbitcdHN0cnVjdCBpY2VfdGNfZmxvd2VyX2ZsdHIgKmZsdHI7XG4rXHRzdHJ1Y3QgaWNlX3RjX3N3X2ZsdHIgKnN3X2ZsdHI7XG4rXG4rXHRobGlzdF9mb3JfZWFjaF9lbnRyeShzd19mbHRyLCBcdTAwMjZwZi1cdTAwM2V0Y19zd19mbHRyX2xpc3QsIG5vZGUpXG4rXHRcdGlmIChzd19mbHRyLVx1MDAzZWZpbHRlcl9kZXYgPT0gZmlsdGVyX2RldiBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHN3X2ZsdHItXHUwMDNlZGlyZWN0aW9uID09IGRpcmVjdGlvbiBcdTAwMjZcdTAwMjYgc3dfZmx0ci1cdTAwM2VwcmlvIFx1MDAzYyBwcmlvIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIXN3X2ZsdHItXHUwMDNlaXNfZHJvcClcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KGZsdHIsIFx1MDAyNnBmLVx1MDAzZXRjX2Zsb3dlcl9mbHRyX2xpc3QsIHRjX2Zsb3dlcl9ub2RlKVxuK1x0XHRpZiAoZmx0ci1cdTAwM2VmaWx0ZXJfZGV2ID09IGZpbHRlcl9kZXYgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBmbHRyLVx1MDAzZWRpcmVjdGlvbiA9PSBkaXJlY3Rpb24gXHUwMDI2XHUwMDI2IGZsdHItXHUwMDNlcHJpbyBcdTAwM2MgcHJpbyBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGZsdHItXHUwMDNlYWN0aW9uLmZsdHJfYWN0ICE9IElDRV9EUk9QX1BBQ0tFVClcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4gLyoqXG4gICogaWNlX2FkZF9jbHNfZmxvd2VyIC0gYWRkIFRDIGZsb3dlciBmaWx0ZXJzXG4gICogQG5ldGRldjogUG9pbnRlciB0byBmaWx0ZXIgZGV2aWNlXG5AQCAtMjI1MywxNCArMjM5MCwyNCBAQCBpbnQgaWNlX2FkZF9jbHNfZmxvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBpY2VfdnNpICp2c2ksXG4ge1xuIFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gY2xzX2Zsb3dlci1cdTAwM2Vjb21tb24uZXh0YWNrO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKnZzaV9uZXRkZXYgPSB2c2ktXHUwMDNlbmV0ZGV2O1xuK1x0ZW51bSBpY2VfZXN3aXRjaF9mbHRyX2RpcmVjdGlvbiBkaXJlY3Rpb247XG4gXHRzdHJ1Y3QgaWNlX3RjX2Zsb3dlcl9mbHRyICpmbHRyO1xuIFx0c3RydWN0IGljZV9wZiAqcGYgPSB2c2ktXHUwMDNlYmFjaztcbitcdGJvb2wgdHJhY2tfc3dfZmx0cnM7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKGljZV9pc19yZXNldF9pbl9wcm9ncmVzcyhwZi1cdTAwM2VzdGF0ZSkpXG4tXHRcdHJldHVybiAtRUJVU1k7XG4tXHRpZiAodGVzdF9iaXQoSUNFX0ZMQUdfRldfTExEUF9BR0VOVCwgcGYtXHUwMDNlZmxhZ3MpKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGRpcmVjdGlvbiA9IGluZ3Jlc3MgPyBJQ0VfRVNXSVRDSF9GTFRSX0lOR1JFU1MgOlxuK1x0XHRcdCAgICAgIElDRV9FU1dJVENIX0ZMVFJfRUdSRVNTO1xuK1x0dHJhY2tfc3dfZmx0cnMgPSAhaWNlX2lzX2Vzd2l0Y2hfbW9kZV9zd2l0Y2hkZXYocGYpO1xuK1xuK1x0aWYgKGljZV9pc19yZXNldF9pbl9wcm9ncmVzcyhwZi1cdTAwM2VzdGF0ZSkpIHtcbitcdFx0ZXJyID0gLUVCVVNZO1xuK1x0XHRnb3RvIHRyYWNrX3N3O1xuK1x0fVxuK1x0aWYgKHRlc3RfYml0KElDRV9GTEFHX0ZXX0xMRFBfQUdFTlQsIHBmLVx1MDAzZWZsYWdzKSkge1xuK1x0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIHRyYWNrX3N3O1xuK1x0fVxuIFxuIFx0aWYgKGljZV9pc19wb3J0X3JlcHJfbmV0ZGV2KG5ldGRldikpXG4gXHRcdHZzaV9uZXRkZXYgPSBuZXRkZXY7XG5AQCAtMjI3Myw3ICsyNDIwLDggQEAgaW50IGljZV9hZGRfY2xzX2Zsb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgaWNlX3ZzaSAqdnNpLFxuIFx0XHQgKi9cbiBcdFx0aWYgKG5ldGRldiA9PSB2c2lfbmV0ZGV2KVxuIFx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwiY2FuJ3QgYXBwbHkgVEMgZmxvd2VyIGZpbHRlcnMsIHR1cm4gT04gaHctdGMtb2ZmbG9hZCBhbmQgdHJ5IGFnYWluXCIpO1xuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0Z290byB0cmFja19zdztcbiBcdH1cbiBcbiBcdC8qIGF2b2lkIGR1cGxpY2F0ZSBlbnRyaWVzLCBpZiBleGlzdHMgLSByZXR1cm4gZXJyb3IgKi9cbkBAIC0yMjgzLDE0ICsyNDMxLDMyIEBAIGludCBpY2VfYWRkX2Nsc19mbG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGljZV92c2kgKnZzaSxcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXHR9XG4gXG4rXHRpZiAodHJhY2tfc3dfZmx0cnMgXHUwMDI2XHUwMDI2ICFjbHNfZmxvd2VyLVx1MDAzZWNvbW1vbi5za2lwX3N3IFx1MDAyNlx1MDAyNlxuK1x0ICAgIGljZV90Y19mbHRyX2lzX2Ryb3AoY2xzX2Zsb3dlcikgXHUwMDI2XHUwMDI2XG4rXHQgICAgaWNlX3RjX2Ryb3BfYnlwYXNzZXNfZmx0cihwZiwgbmV0ZGV2LCBjbHNfZmxvd2VyLVx1MDAzZWNvbW1vbi5wcmlvLFxuK1x0XHRcdFx0ICAgICAgZGlyZWN0aW9uKSkge1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJEcm9wIGZpbHRlciBub3Qgb2ZmbG9hZGVkIGJlY2F1c2UgaXQgd291bGQgYnlwYXNzIGEgaGlnaGVyIHByaW9yaXR5IGZpbHRlclwiKTtcbitcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4rXHRcdGdvdG8gdHJhY2tfc3c7XG4rXHR9XG4rXG4gXHQvKiBwcmVwIGFuZCBhZGQgVEMtZmxvd2VyIGZpbHRlciBpbiBIVyAqL1xuIFx0ZXJyID0gaWNlX2FkZF90Y19mbHRyKG5ldGRldiwgdnNpLCBjbHNfZmxvd2VyLCBcdTAwMjZmbHRyLCBpbmdyZXNzKTtcbiBcdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4rXHRcdGdvdG8gdHJhY2tfc3c7XG4rXG4rXHRmbHRyLVx1MDAzZWZpbHRlcl9kZXYgPSBuZXRkZXY7XG4rXHRmbHRyLVx1MDAzZXByaW8gPSBjbHNfZmxvd2VyLVx1MDAzZWNvbW1vbi5wcmlvO1xuIFxuIFx0LyogYWRkIGZpbHRlciBpbnRvIGFuIG9yZGVyZWQgbGlzdCAqL1xuIFx0aGxpc3RfYWRkX2hlYWQoXHUwMDI2Zmx0ci1cdTAwM2V0Y19mbG93ZXJfbm9kZSwgXHUwMDI2cGYtXHUwMDNldGNfZmxvd2VyX2ZsdHJfbGlzdCk7XG4gXHRyZXR1cm4gMDtcbitcbit0cmFja19zdzpcbitcdGlmICh0cmFja19zd19mbHRycyBcdTAwMjZcdTAwMjYgIWNsc19mbG93ZXItXHUwMDNlY29tbW9uLnNraXBfc3cpXG4rXHRcdGljZV90Y190cmFja19zd19mbHRyKHBmLCBuZXRkZXYsIGNsc19mbG93ZXIsIGRpcmVjdGlvbik7XG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiAvKipcbkBAIC0yMzA1LDYgKzI0NzEsOSBAQCBpY2VfZGVsX2Nsc19mbG93ZXIoc3RydWN0IGljZV92c2kgKnZzaSwgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpXG4gXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHZzaS1cdTAwM2ViYWNrO1xuIFx0aW50IGVycjtcbiBcbitcdGlmIChpY2VfdGNfdW50cmFja19zd19mbHRyKHBmLCBjbHNfZmxvd2VyLVx1MDAzZWNvb2tpZSkpXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0LyogZmluZCBmaWx0ZXIgKi9cbiBcdGZsdHIgPSBpY2VfZmluZF90Y19mbG93ZXJfZmx0cihwZiwgY2xzX2Zsb3dlci1cdTAwM2Vjb29raWUpO1xuIFx0aWYgKCFmbHRyKSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90Y19saWIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdGNfbGliLmhcbmluZGV4IDhhM2FiMmYyMmFmOWIuLjM3ZDZmNDEwMGVjZmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RjX2xpYi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RjX2xpYi5oXG5AQCAtMzgsNiArMzgsNyBAQFxuICNkZWZpbmUgSUNFX1RDX0ZMV1JfRklFTERfQ1ZMQU5fUFJJT1x0XHRCSVQoMjgpXG4gI2RlZmluZSBJQ0VfVENfRkxXUl9GSUVMRF9WTEFOX1RQSURcdFx0QklUKDI5KVxuICNkZWZpbmUgSUNFX1RDX0ZMV1JfRklFTERfUEZDUF9PUFRTXHRcdEJJVCgzMClcbisjZGVmaW5lIElDRV9UQ19GTFdSX0ZJRUxEX0lQX1BST1RPXHRcdEJJVCgzMSlcbiBcbiAjZGVmaW5lIElDRV9UQ19GTE9XRVJfTUFTS18zMiAgIDB4RkZGRkZGRkZcbiBcbkBAIC0xMzgsMTIgKzEzOSwzMyBAQCBlbnVtIGljZV9lc3dpdGNoX2ZsdHJfZGlyZWN0aW9uIHtcbiBcdElDRV9FU1dJVENIX0ZMVFJfRUdSRVNTLFxuIH07XG4gXG4rLyoqXG4rICogc3RydWN0IGljZV90Y19zd19mbHRyIC0gZmlsdGVyIHByZXNlbnRlZCB0byB0aGUgZHJpdmVyIGJ1dCBub3Qgb2ZmbG9hZGVkXG4rICogQG5vZGU6IG5vZGUgaW4gdGhlIHBmLVx1MDAzZXRjX3N3X2ZsdHJfbGlzdFxuKyAqIEBjb29raWU6IHVuaXF1ZSBmaWx0ZXIgaWRlbnRpZmllciBmcm9tIHRoZSBvZmZsb2FkIHJlcXVlc3RcbisgKiBAZmlsdGVyX2RldjogZGV2aWNlIHRoZSBmaWx0ZXIgd2FzIHJlcXVlc3RlZCBvblxuKyAqIEBwcmlvOiBUQyBwcmlvcml0eSwgbG93ZXIgdmFsdWUgaXMgZXZhbHVhdGVkIGZpcnN0XG4rICogQGRpcmVjdGlvbjogYmxvY2sgZGlyZWN0aW9uIHRoZSBmaWx0ZXIgd2FzIHJlcXVlc3RlZCBmb3JcbisgKiBAaXNfZHJvcDogdGhlIGZpbHRlciBjYXJyaWVzIGEgZHJvcCBhY3Rpb25cbisgKi9cbitzdHJ1Y3QgaWNlX3RjX3N3X2ZsdHIge1xuK1x0c3RydWN0IGhsaXN0X25vZGUgbm9kZTtcbitcdHVuc2lnbmVkIGxvbmcgY29va2llO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlcl9kZXY7XG4rXHR1MzIgcHJpbztcbitcdGVudW0gaWNlX2Vzd2l0Y2hfZmx0cl9kaXJlY3Rpb24gZGlyZWN0aW9uO1xuK1x0Ym9vbCBpc19kcm9wO1xuK307XG4rXG4gc3RydWN0IGljZV90Y19mbG93ZXJfZmx0ciB7XG4gXHRzdHJ1Y3QgaGxpc3Rfbm9kZSB0Y19mbG93ZXJfbm9kZTtcbiBcbiBcdC8qIGNvb2tpZSBiZWNvbWVzIGZpbHRlcl9ydWxlX2lkIGlmIHJ1bGUgaXMgYWRkZWQgc3VjY2Vzc2Z1bGx5ICovXG4gXHR1bnNpZ25lZCBsb25nIGNvb2tpZTtcbiBcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXJfZGV2O1xuK1x0dTMyIHByaW87XG4rXG4gXHQvKiBhZGRfYWR2X3J1bGUgcmV0dXJucyBpbmZvcm1hdGlvbiBsaWtlIHJlY2lwZSBJRCwgcnVsZV9pZC4gU3RvcmVcbiBcdCAqIHRob3NlIHZhbHVlcyBzaW5jZSB0aGV5IGFyZSBuZWVkZWQgdG8gcmVtb3ZlIGFkdmFuY2VkIHJ1bGVcbiBcdCAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTc6NTc6MjcuNjQ3NDM5NDZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MTg3NTE4NTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgSUNFIERyaXZlciBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBkZWNpZGUgaWYgaXQncyBhIGdvb2QgY2FuZGlkYXRlIGZvciBzeXprYWxsZXIgZnV6emluZy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS4gT2theSwgaXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIHRvdWNoZXMgZmlsZXMgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2AgZGlyZWN0b3J5IOKAkyBgaWNlLmhgLCBgaWNlX3RjX2xpYi5jYCwgYW5kIGBpY2VfdGNfbGliLmhgIHNwZWNpZmljYWxseS4gU28sIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgSW50ZWwgRXRoZXJuZXQgQ29udHJvbGxlciBFODAwIHNlcmllcyBkcml2ZXIsIGFsc28ga25vd24gYXMgdGhlIElDRSBkcml2ZXIuIFRoYXQgbmFycm93cyBvdXIgZm9jdXMuXG5cbk5vdywgbGV0J3MgYnJpbmcgdGhlIHRyaWFnZSBwaGlsb3NvcGh5IGludG8gcGxheSwgc3BlY2lmaWNhbGx5IFNlY3Rpb24gMiwgd2hpY2ggZGVhbHMgd2l0aCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuIFdlIG5lZWQgdG8gYXNjZXJ0YWluIGlmIHRoZSBJQ0UgZHJpdmVyIGZhbGxzIGludG8gdGhlIGNhdGVnb3J5IG9mIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIHRoYXQgcmVxdWlyZSBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgYnkgc3RhbmRhcmQgUUVNVSBvciBzeXprYWxsZXIuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGlzIHRoZSBgaWNlYCBkcml2ZXIgb25lIG9mIHRob3NlPyBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggaWYgaXQgcmVxdWlyZXMgc3BlY2lhbGl6ZWQgaGFyZHdhcmUuIFRoZSBiZXN0IHdheSBmb3J3YXJkIGlzIHRvIHVzZSBgZ3JlcHBlcmAgdG8gc2VlIGhvdyB0aGUgYGljZWAgZHJpdmVyIGlzIGNvbmZpZ3VyZWQgYW5kIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBxdWlja2x5IGdpdmUgbWUgYW4gb3ZlcnZpZXcgb2YgaXRzIGRlcGVuZGVuY2llcyBhbmQgd2hldGhlciBpdCdzIGluaGVyZW50bHkgdGllZCB0byBhIHNwZWNpZmljIHBoeXNpY2FsIHNldHVwIHRoYXQgbWFrZXMgaXQgYW4gdW5zdWl0YWJsZSBjYW5kaWRhdGUgZm9yIHN5emthbGxlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM0OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE3OjU3OjM0LjgzNDk2MDQ2NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODI3MDU3NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZz0yNjg9Y29uZmlnIEk0MEVWRlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yOTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzoyOTE6Y29uZmlnIElDRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjkyLVxcdHRyaXN0YXRlIFxcXCJJbnRlbChSKSBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIFN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMxOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMyMDpjb25maWcgSUNFX0hXTU9OXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zMjEtXFx0Ym9vbCBcXFwiSW50ZWwoUikgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBTdXBwb3J0IEhXTU9OIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMzMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMzMTpjb25maWcgSUNFX1NXSVRDSERFVlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMzMyLVxcdGJvb2wgXFxcIlN3aXRjaGRldiBTdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzozNDU6Y29uZmlnIElDRV9IV1RTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zNDYtXFx0Ym9vbCBcXFwiU3VwcG9ydCBIVyBjcm9zcy10aW1lc3RhbXAgb24gcGxhdGZvcm1zIHdpdGggUFRNIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE3OjU3OjM1LjAxNzY3NTQ4N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NjQyNjM1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEludGVsIEU4MDAgTklDIERyaXZlciBQcm9iZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgYmFzaWNzLiBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHRoYXQgdGhlIGBpY2VgIGRyaXZlciBpcywgaW4gZmFjdCwgdGhlIGNvcnJlY3QgUENJIGRldmljZSBkcml2ZXIgZm9yIHRoZSBJbnRlbCBFODAwIHNlcmllcyBOSUNzLiBUaGlzIG1lYW5zIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBkcml2ZXIncyBwcm9iZSByb3V0aW5lLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBob3cgaXQgaWRlbnRpZmllcyB0aGUgZGV2aWNlIGJhc2VkIG9uIGl0cyBQQ0kgSURzLiBBIHF1aWNrIGNoZWNrIG9mIHRoZSBQQ0kgSURzIHdpbGwgY29uZmlybSB0aGF0IHdlIGFyZSBpbmRlZWQgbG9va2luZyBhdCB0aGUgY29ycmVjdCBkcml2ZXIuIE5vdGhpbmcgbGlrZSBhIG1ldGhvZGljYWwgc3RhcnQgdG8gYSBwb3RlbnRpYWxseSBjb21wbGV4IGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNTIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNzo1NzozNy44ODE5NDMxMDdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY2MTI1ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWNlX3BjaV90YmxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTUxMTc9c3RhdGljIGludCBpY2VfcHJvYmVfcmVjb3ZlcnlfbW9kZShzdHJ1Y3QgaWNlX3BmICpwZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxNDktICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTE1MDogKiBAZW50OiBlbnRyeSBpbiBpY2VfcGNpX3RibFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxNTEtICpcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTU3NzE9c3RhdGljIHZvaWQgaWNlX3BjaV9lcnJfcmVzZXRfZG9uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTU3NzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTc3NjovKiBpY2VfcGNpX3RibCAtIFBDSSBEZXZpY2UgSUQgVGFibGVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01Nzc3LSAqXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01NzgzLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjU3ODQ6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGljZV9wY2lfdGJsW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTc4NS1cXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MTBDX0JBQ0tQTEFORSkgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTU4MzYtfTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1ODM3Ok1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpY2VfcGNpX3RibCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTgzOC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTU4NDk9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGljZV9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTg1MC1cXHQubmFtZSA9IEtCVUlMRF9NT0ROQU1FLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjU4NTE6XFx0LmlkX3RhYmxlID0gaWNlX3BjaV90YmwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTg1Mi1cXHQucHJvYmUgPSBpY2VfcHJvYmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE3OjU3OjM3LjkzODU3NTQzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODk0MTEzMTI5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZlYXNpYmlsaXR5IG9mIEZ1enppbmcgdGhlIGBpY2VgIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gd2hldGhlciB3ZSBjYW4gYWN0dWFsbHkgZnV6eiB0aGUgYGljZWAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgd2l0aG91dCByZXF1aXJpbmcgYSBwaHlzaWNhbCBJbnRlbCBFODAwIHNlcmllcyBQQ0llIGNhcmQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHNpbmNlIGl0J3MgYW4gZW50ZXJwcmlzZS1ncmFkZSBOSUMsIG15IGd1dCBzYXlzIGl0IHByb2JhYmx5IG5lZWRzIHRoZSBwaHlzaWNhbCBoYXJkd2FyZS4gUUVNVSBkZWZpbml0ZWx5IGRvZXNuJ3QgZW11bGF0ZSB0aGUgYGljZWAgaGFyZHdhcmUsIGl0IGZvY3VzZXMgb24gdGhlIG1vcmUgY29tbW9uIHN0dWZmIGxpa2UgYGUxMDAwYCwgYHZteG5ldDNgLCBhbmQgYHZpcnRpby1uZXRgLiBUaGUgdGV4dCBJJ20gbG9va2luZyBhdCBjb25maXJtcyB0aGlzOiBgaWNlYCByZXF1aXJlcyBhIHJlYWwgQVNJQy9QQ0llIGNhcmQsIGxpa2UgdGhlIEludGVsIEU4MTAgb3IgRTgwMCBzZXJpZXMuXG5cblRoYXQgXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIiBzZWN0aW9uIGluIHRoZSBkb2NzIGltbWVkaWF0ZWx5IGNsaWNrcy4gV2UncmUgdGFsa2luZyBhYm91dCBkcml2ZXJzIHRoYXQgYXJlIHRpZWQgdG8gc3BlY2lmaWMgaGFyZHdhcmUgYW5kIGFyZW4ndCBnb2luZyB0byBydW4gd2l0aG91dCBpdCwganVzdCBsaWtlIGBtbHhzd2AsIGBwZHNfY29yZWAsIGV0Yy4gVGhlIGBpY2VgIGRyaXZlciAqZGVmaW5pdGVseSogZml0cyB0aGlzIGRlc2NyaXB0aW9uLiBTaW5jZSB3ZSdyZSBtaXNzaW5nIHRoZSBwaHlzaWNhbCBjYXJkIG9yIHByb3BlciBlbXVsYXRpb24sIGZ1bmN0aW9ucyBsaWtlIGBpY2VfcHJvYmVgIHdvbid0IGV2ZXIgYmUgY2FsbGVkLCBhbmQgdGhlcmVmb3JlIHdlJ2xsIG5ldmVyIHNlZSB0aGluZ3MgbGlrZSBgaWNlX3BmYCwgb3IgYGljZV9hZGRfY2xzX2Zsb3dlcmAuXG5cbkknbSBub3cgY2hlY2tpbmcgaWYgdGhlcmUncyBhbnkgY2xldmVyIG1vY2sgb3IgdmlydHVhbCBkcml2ZXIgbW9kZSBidXJpZWQgaW4gdGhlIGNvZGUsIG9yIGlmIHNvbWUgb2JzY3VyZSBjb25maWd1cmF0aW9uIGZsYWdzIGNhbiBicmluZyBpdCB0byBsaWZlLiBBIHF1aWNrIGxvb2sgYXQgdGhlIHBhdGNoIGRpZmYgY29uZmlybXMgdGhhdCB0aGUgY2hhbmdlcyBhcmUgaXNvbGF0ZWQgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2AgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgaW4gYGljZS5oYCwgYGljZV90Y19saWIuY2AsIGFuZCBgaWNlX3RjX2xpYi5oYC5cblxuR2l2ZW4gYWxsIHRoaXMsIEknbSBwcmV0dHkgY29uZmlkZW50IGluIG15IGNvbmNsdXNpb24uIEJlY2F1c2UgdGhlIHBhdGNoIGRpcmVjdGx5IGludm9sdmVzIGEgZHJpdmVyIHRoYXQgb25seSB3b3JrcyB3aXRoIHBoeXNpY2FsIGhhcmR3YXJlIHVuYXZhaWxhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZnV6emluZyBpcyBlc3NlbnRpYWxseSBhIG5vLWdvIGZvciB0aGlzIHBhdGNoLiBUaGUgcmVsZXZhbnQgZmllbGRzIGFyZTpcblxuKiAgIGBXb3J0aEZ1enppbmdgOiBmYWxzZVxuKiAgIGBFbmFibGVDb25maWdzYDogXFxbIF1cbiogICBgRm9jdXNTeW1ib2xzYDogXFxbIF1cbiogICBgUmVhc29uaW5nYDogQ29uY2lzZSBleHBsYW5hdGlvbiB0aGF0IHRoZSBwYXRjaCBpcyBmb3IgdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgZHJpdmVyIChgaWNlYCksIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cblxuTm93IEknbGwgcHJlcCB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwODMsIk91dHB1dFRva2VucyI6MTAxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE3OjU3OjQ2Ljg3OTcxMDM4MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEV0aGVybmV0IEU4MDAgU2VyaWVzIGRyaXZlciAoaWNlKSwgc3BlY2lmaWNhbGx5IFRDIGZsb3dlciBmaWx0ZXIgb2ZmbG9hZCBsb2dpYy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgKEludGVsIEU4MTAvRTgwMCBOSUNzKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEV0aGVybmV0IEU4MDAgU2VyaWVzIGRyaXZlciAoaWNlKSwgc3BlY2lmaWNhbGx5IFRDIGZsb3dlciBmaWx0ZXIgb2ZmbG9hZCBsb2dpYy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgKEludGVsIEU4MTAvRTgwMCBOSUNzKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTc6NTc6NDYuODc5NzQ0NDgxWiIsIlNlcSI6OSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowh9xz2[1] Phase: Running StartedAt: 2026-09-10 17:57:58 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh9xz2[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-10 17:57:58 +0000 UTC FinishedAt: 2026-09-10 17:58:03 +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,}