Name: series-workflowx42g6 Phase: Failed StartedAt: 2026-09-04 03:22:07 +0000 UTC FinishedAt: 2026-09-04 03:40:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx42g6[0] Phase: Succeeded StartedAt: 2026-09-04 03:22:07 +0000 UTC FinishedAt: 2026-09-04 03:40:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx42g6[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 03:22:07 +0000 UTC FinishedAt: 2026-09-04 03:40:19 +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+CgkJCTx0ZD4yMDI2LzA5LzA0IDAzOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIG9ubHkgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIG5ldHdvcmsgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi8pLCBhZGRpbmcgc3VwcG9ydCBmb3IgbXFwcmlvIGhhcmR3YXJlIGJhbmR3aWR0aCBvZmZsb2FkLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDL1NvQyBkcml2ZXIgcmVxdWlyaW5nIHBoeXNpY2FsIE1hcnZlbGwgT2N0ZW9uVFgyIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAzOjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTExMzY1ZTY4MWFlZTM5NGI1ZWM3ZDAwZjhkZmM1MTdjZjZjOGZlZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMDM6Mzk6NDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXG5pbmRleCAxNTNlYjU3YmFkMDY3Li5jOWE0MzI2ZDcyNWQ4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbkBAIC0zMzEsOCAmIzQzOzMzMSwxMiBAQCBzdGF0aWMgYm9vbCBpc192YWxpZF90eHNjaHEoc3RydWN0IHJ2dSAqcnZ1LCBpbnQgYmxrYWRkcixcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH1cbiBcbi1cdGlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKVxuJiM0MztcdGlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKSB7XG4mIzQzO1x0XHRkZXZfZXJyX3JhdGVsaW1pdGVkKHJ2dS1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O3BjaWZ1bmMgJXggbWFwIHBjaWZ1bmMgJXggbm90IGVxdWFsLCBsdmw9JXUgc2NocT0ldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgcGNpZnVuYywgbWFwX2Z1bmMsIGx2bCwgc2NocSk7XG4gXHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuaW5kZXggMTc1OTkyMTg4YzE4YS4uYTUxOWUwYTk3YTJiNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuQEAgLTYxNSw2ICYjNDM7NjE1LDE0MiBAQCB2b2lkIG90eDJfZ2V0X21hY19mcm9tX2FmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0wob3R4Ml9nZXRfbWFjX2Zyb21fYWYpO1xuIFxuJiM0MztzdGF0aWMgaW50XG4mIzQzO290eDJfbml4X3RtcV9yZWdfd3JpdGUoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgY250LFxuJiM0MztcdFx0ICAgICAgIHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddLFxuJiM0MztcdFx0ICAgICAgIHU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR10pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWJveCAqbWJveCA9IFx1MDAyNnBmdmYtXHUwMDNlbWJveDtcbiYjNDM7XHRzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTtcbiYjNDM7XHRpbnQgaSwgZXJyO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTtcbiYjNDM7XHRpZiAoIXJlcSkge1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJlcS1cdTAwM2VsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTtcbiYjNDM7XHRyZXEtXHUwMDNlbnVtX3JlZ3MgPSBjbnQ7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJlcS1cdTAwM2VyZWdbaV0gPSByZWdfYWRkcltpXTtcbiYjNDM7XHRcdHJlcS1cdTAwM2VyZWd2YWxbaV0gPSByZWdfdmFsW2ldO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddO1xuJiM0MztcdHU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR107XG4mIzQzO1x0aW50IGVyciwgc21xLCBpLCBjbnQgPSAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c21xID0gcGZ2Zi1cdTAwM2Vody50eHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1NNUV1baV07XG4mIzQzO1xuJiM0MztcdFx0cmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuJiM0MztcdFx0cmVnX3ZhbFtjbnRdID0gMDtcbiYjNDM7XHRcdGNudCYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdFx0cmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xuJiM0MztcdFx0cmVnX3ZhbFtjbnRdID0gMDtcbiYjNDM7XHRcdGNudCYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGNudCBcdTAwM2MgTUFYX1JFR1NfUEVSX01CT1hfTVNHIC0gMSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHJlZ19hZGRyLCByZWdfdmFsKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGdvdG8gZmFpbDtcbiYjNDM7XHRcdGNudCA9IDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoY250KSB7XG4mIzQzO1x0XHRlcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBmYWlsO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO2ZhaWw6XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLFxuJiM0MztcdFx0XHRcdCBpbnQgdHhxLCB1NjQgbWlucmF0ZSwgdTY0IG1heHJhdGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWJveCAqbWJveCA9IFx1MDAyNnBmdmYtXHUwMDNlbWJveDtcbiYjNDM7XHRzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTtcbiYjNDM7XHRpbnQgZXJyLCBzbXEsIG4gPSAwO1xuJiM0MztcdHU2NCByZWdfYWRkclsyXTtcbiYjNDM7XHR1NjQgcmVnX3ZhbFsyXTtcbiYjNDM7XHR1NjQgcmF0ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFtYXhyYXRlIFx1MDAyNlx1MDAyNiAhbWlucmF0ZSkge1xuJiM0MztcdFx0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xuJiM0MztcdFx0cmVnX2FkZHJbMF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbiYjNDM7XHRcdHJlZ192YWxbMF0gPSAwO1xuJiM0MztcdFx0cmVnX2FkZHJbMV0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbiYjNDM7XHRcdHJlZ192YWxbMV0gPSAwO1xuJiM0MztcdFx0cmV0dXJuIG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgMiwgcmVnX2FkZHIsIHJlZ192YWwpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTtcbiYjNDM7XHRpZiAoIXJlcSkge1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJlcS1cdTAwM2VsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTtcbiYjNDM7XG4mIzQzO1x0LyogTVFQUklPIGV4cG9zZXMgb25seSBtaW4vbWF4IHJhdGUsIG5vdCBidXJzdC4gIFBhc3MgYnVyc3QgMCBzb1xuJiM0MztcdCAqIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoKSBwcm9ncmFtbWVzIHRoZSBsYXJnZXN0IGJ1cnN0IHRoZSBOSVhcbiYjNDM7XHQgKiBlbmNvZGluZyBzdXBwb3J0cyAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb24gQ04xMEspLiAgVGhpcyBkaWZmZXJzXG4mIzQzO1x0ICogZnJvbSB0aGUgNjU1MzYgYnl0ZSBkZWZhdWx0IHVzZWQgaW4gdGhlIEhUQiBwYXRoLCB3aGljaCBpcyBhXG4mIzQzO1x0ICoga2VybmVsLXNpZGUgZGVmYXVsdCB3aGVuIG5vIGV4cGxpY2l0IGJ1cnN0IGlzIGNvbmZpZ3VyZWQsIG5vdCBhXG4mIzQzO1x0ICogaGFyZHdhcmUgY2FwLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogbXFwcmlvIHNldHVwIHJlc3RhcnRzIHRoZSBuZXRkZXYgKG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KSxcbiYjNDM7XHQgKiB3aGljaCByZXNldHMgTURRIHNoYXBlcnMgdG8gemVyby4gIFByb2dyYW0gYm90aCBQSVIgYW5kIENJUiBvblxuJiM0MztcdCAqIGV2ZXJ5IHVwZGF0ZSBzbyBvbWl0dGVkIHJhdGVzIGFyZSBhcHBsaWVkIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW5cbiYjNDM7XHQgKiByZWx5aW5nIG9uIHN0YWxlIGhhcmR3YXJlIHN0YXRlLlxuJiM0MztcdCAqL1xuJiM0MztcdHJlcS1cdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbiYjNDM7XHRpZiAobWF4cmF0ZSkge1xuJiM0MztcdFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1heHJhdGUpO1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IDA7XG4mIzQzO1x0fVxuJiM0MztcdG4mIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHQvKiBDSVImIzQzO1BJUiBzdXBwb3J0IGlzIHJlcXVpcmVkIGFuZCBjaGVja2VkIGF0IG1xcHJpbyBzZXR1cC4gKi9cbiYjNDM7XHRyZXEtXHUwMDNlcmVnW25dID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XG4mIzQzO1x0aWYgKG1pbnJhdGUpIHtcbiYjNDM7XHRcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtaW5yYXRlKTtcbiYjNDM7XHRcdHJlcS1cdTAwM2VyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJlcS1cdTAwM2VyZWd2YWxbbl0gPSAwO1xuJiM0MztcdH1cbiYjNDM7XHRuJiM0MzsmIzQzOztcbiYjNDM7XHRyZXEtXHUwMDNlbnVtX3JlZ3MgPSBuO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2Zvcl9wZmMpXG4ge1xuIFx0dTE2ICgqc2NocV9saXN0KVtNQVhfVFhTQ0hRX1BFUl9GVU5DXTtcbkBAIC02NTEsNyAmIzQzOzc4NywxMSBAQCBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2ZvclxuIFx0XHRcdFx0XHRcdCh1NjQpaHctXHUwMDNlc21xX2xpbmtfdHlwZSk7XG4gXHRcdHJlcS1cdTAwM2VudW1fcmVncyYjNDM7JiM0Mzs7XG4gXHRcdC8qIE1EUSBjb25maWcgKi9cbi1cdFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVtwcmlvXTtcbiYjNDM7XHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxuJiM0MztcdFx0XHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdWzBdO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dO1xuJiM0MztcbiBcdFx0cmVxLVx1MDAzZXJlZ1sxXSA9IE5JWF9BRl9NRFFYX1BBUkVOVChzY2hxKTtcbiBcdFx0cmVxLVx1MDAzZXJlZ3ZhbFsxXSA9IHBhcmVudCBcdTAwM2NcdTAwM2MgMTY7XG4gXHRcdHJlcS1cdTAwM2VudW1fcmVncyYjNDM7JiM0Mzs7XG5AQCAtNzc5LDYgJiM0Mzs5MTksOSBAQCBpbnQgb3R4Ml90eHNjaF9hbGxvYyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHRcdHJlcS1cdTAwM2VzY2hxW05JWF9UWFNDSF9MVkxfVEw0XSA9IGNoYW5fY250O1xuIFx0fVxuIFxuJiM0MztcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxuJiM0MztcdFx0cmVxLVx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9TTVFdID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbiYjNDM7XG4gXHRyYyA9IG90eDJfc3luY19tYm94X21zZyhcdTAwMjZwZnZmLVx1MDAzZW1ib3gpO1xuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gcmM7XG5AQCAtODQ0LDYgJiM0Mzs5ODcsNyBAQCB2b2lkIG90eDJfdHhzY2hxX3N0b3Aoc3RydWN0IG90eDJfbmljICpwZnZmKVxuIFxuIFx0LyogQ2xlYXIgdGhlIHR4c2NocSBsaXN0ICovXG4gXHRmb3IgKGx2bCA9IDA7IGx2bCBcdTAwM2MgTklYX1RYU0NIX0xWTF9DTlQ7IGx2bCYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHBmdmYtXHUwMDNlaHcudHhzY2hxX2NudFtsdmxdID0gMDtcbiBcdFx0Zm9yIChzY2hxID0gMDsgc2NocSBcdTAwM2MgTUFYX1RYU0NIUV9QRVJfRlVOQzsgc2NocSYjNDM7JiM0MzspXG4gXHRcdFx0cGZ2Zi1cdTAwM2Vody50eHNjaHFfbGlzdFtsdmxdW3NjaHFdID0gMDtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG5pbmRleCBlZWNlZTYxMmI3YjJjLi5lZGU3ZjExMTNiNzE0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG5AQCAtMTcsNiAmIzQzOzE3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zb2MvbWFydmVsbC9zaWxpY29ucy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc29jL21hcnZlbGwvb2N0ZW9udHgyL2FzbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L21hY3NlYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvcGt0X3NjaGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RldmxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWU2NC5oXHUwMDNlXG5AQCAtNDgzLDYgJiM0Mzs0ODQsMjMgQEAgc3RydWN0IHBmX2lycV9kYXRhIHtcbiBcdGludCBtZGV2cztcbiB9O1xuIFxuJiM0MztzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwIHtcbiYjNDM7XHR1NjQgbWluX3JhdGVbVENfUU9QVF9NQVhfUVVFVUVdO1xuJiM0MztcdHU2NCBtYXhfcmF0ZVtUQ19RT1BUX01BWF9RVUVVRV07XG4mIzQzO1x0X191OCBudW1fdGM7XG4mIzQzO1x0X191MTYgY291bnRbVENfUU9QVF9NQVhfUVVFVUVdO1xuJiM0MztcdF9fdTE2IG9mZnNldFtUQ19RT1BUX01BWF9RVUVVRV07XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3Qgb3R4Ml9tcXByaW8ge1xuJiM0MztcdHUzMlx0ZmxhZ3M7XG4mIzQzO1x0dTY0XHQqbWluX3JhdGU7XG4mIzQzO1x0dTY0XHQqbWF4X3JhdGU7XG4mIzQzO1x0Ym9vbFx0cmF0ZV9saW1pdDtcbiYjNDM7XHRib29sXHRyZXBsYWNlX3NldHVwX2RvbmU7XG4mIzQzO1x0Ym9vbFx0cmVwbGFjZV9ncmFmdF9kb25lO1xuJiM0Mzt9O1xuJiM0MztcbiBzdHJ1Y3Qgb3R4Ml9uaWMge1xuIFx0dm9pZCBfX2lvbWVtXHRcdCpyZWdfYmFzZTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlXHQqbmV0ZGV2O1xuQEAgLTUxNSw2ICYjNDM7NTMzLDEwIEBAIHN0cnVjdCBvdHgyX25pYyB7XG4gXHR1NjRcdFx0XHRmbGFncztcbiBcdHU2NFx0XHRcdCpjcV9vcF9hZGRyO1xuIFxuJiM0MztcdHN0cnVjdCBvdHgyX21xcHJpb1x0bXFwcmlvO1xuJiM0MztcdHN0cnVjdCBtcV9vZmZsb2FkX3NuYXBcdCpjdXJfbXFfc25hcDtcbiYjNDM7XHRzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwXHQqb2xkX21xX3NuYXA7XG4mIzQzO1xuIFx0c3RydWN0IGJwZl9wcm9nXHRcdCp4ZHBfcHJvZztcbiBcdHN0cnVjdCBvdHgyX3FzZXRcdHFzZXQ7XG4gXHRzdHJ1Y3Qgb3R4Ml9od1x0XHRodztcbkBAIC0xMjQ2LDYgJiM0MzsxMjY4LDExIEBAIGRtYV9hZGRyX3Qgb3R4Ml9kbWFfbWFwX3NrYl9mcmFnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc2VnLCBpbnQgKmxlbik7XG4gdm9pZCBvdHgyX2RtYV91bm1hcF9za2JfZnJhZ3Moc3RydWN0IG90eDJfbmljICpwZnZmLCBzdHJ1Y3Qgc2dfbGlzdCAqc2cpO1xuIGludCBvdHgyX3JlYWRfZnJlZV9zcWUoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgcWlkeCk7XG4mIzQzO2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHR4cSxcbiYjNDM7XHRcdFx0XHQgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTtcbiYjNDM7aW50IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuJiM0MztpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuJiM0MztpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiB2b2lkIG90eDJfcXVldWVfdmZfd29yayhzdHJ1Y3QgbWJveCAqbXcsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptYm94X3dxLFxuIFx0XHRcdGludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7XG4gaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXG5pbmRleCBmMTEwZGZhNDIzNjA1Li40YTcwYWJjMjMwYmVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuQEAgLTQxMyw2ICYjNDM7NDEzLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml9kY2JubF9pZWVlX3NldHBmYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWVlZV9wZmMgKnBmYylcbiBcdHU4IG9sZF9wZmNfZW47XG4gXHRpbnQgZXJyO1xuIFxuJiM0MztcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0IFx1MDAyNlx1MDAyNiBwZmMtXHUwMDNlcGZjX2VuKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7UEZDOiBjYW5ub3QgZW5hYmxlIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRvbGRfcGZjX2VuID0gcGZ2Zi1cdTAwM2VwZmNfZW47XG4gXHRwZnZmLVx1MDAzZXBmY19lbiA9IHBmYy1cdTAwM2VwZmNfZW47XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG5pbmRleCA5YmVlMWI5MWVlYWE2Li5lYzI2MDFjNmMyNTVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbkBAIC0yODcsNiAmIzQzOzI4NywxNCBAQCBzdGF0aWMgaW50IG90eDJfc2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuJiM0MztcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0IFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoY2hhbm5lbC1cdTAwM2V0eF9jb3VudCAhPSBwZnZmLVx1MDAzZWh3LnR4X3F1ZXVlcyB8fFxuJiM0MztcdCAgICAgY2hhbm5lbC1cdTAwM2VyeF9jb3VudCAhPSBwZnZmLVx1MDAzZWh3LnJ4X3F1ZXVlcykpIHtcbiYjNDM7XHRcdG5ldGRldl9pbmZvKGRldixcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O05vdCBwZXJtaXR0ZWQgdG8gY2hhbmdlIGNoYW5uZWwgY291bnQgd2hpbGUgTVEgcHJpbyBpcyBhY3RpdmVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChpZl91cClcbiBcdFx0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3N0b3AoZGV2KTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xuaW5kZXggYzk5NWYyOTAwODU5MC4uNzlhODJlNDQ1NDU0NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbkBAIC0xOTgwLDYgJiM0MzsxOTgwLDEyIEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX2ZyZWVfbWVtO1xuIFxuJiM0MztcdGVyciA9IG90eDJfbXFwcmlvX3VwKHBmKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0bmV0ZGV2X2VycihwZi1cdTAwM2VuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O21xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVycyBkdXJpbmcgb3BlbjogJWQ7IGNvbnRpbnVpbmcgd2l0aG91dCBiYW5kd2lkdGggbGltaXRzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBlcnIpO1xuJiM0MztcbiBcdC8qIFJlZ2lzdGVyIE5BUEkgaGFuZGxlciAqL1xuIFx0Zm9yIChxaWR4ID0gMDsgcWlkeCBcdTAwM2MgcGYtXHUwMDNlaHcuY2ludF9jbnQ7IHFpZHgmIzQzOyYjNDM7KSB7XG4gXHRcdGNxX3BvbGwgPSBcdTAwMjZxc2V0LVx1MDAzZW5hcGlbcWlkeF07XG5AQCAtMjg0Niw2ICYjNDM7Mjg1MiwxMiBAQCBzdGF0aWMgaW50IG90eDJfeGRwX3NldHVwKHN0cnVjdCBvdHgyX25pYyAqcGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiBcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKHBmLVx1MDAzZW5ldGRldik7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nO1xuIFxuJiM0MztcdGlmIChwcm9nIFx1MDAyNlx1MDAyNiBwZi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O1hEUDogY2Fubm90IGF0dGFjaCB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHByb2cgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VtdHUgXHUwMDNlIE1BWF9YRFBfTVRVKSB7XG4gXHRcdG5ldGRldl93YXJuKGRldiwgXCYjMzQ7SnVtYm8gZnJhbWVzIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggWERQXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXG5pbmRleCAwMzlmZDQ3ZWJmNTIyLi40MDkwMjk2ZWRmYzViIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xuQEAgLTE2LDYgJiM0MzsxNiw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjX2FjdC90Y19taXJyZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y19hY3QvdGNfdmxhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X3NjaGVkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L3NjaF9nZW5lcmljLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtjbjEway5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7b3R4Ml9jb21tb24uaFwmIzM0O1xuQEAgLTMxLDYgJiM0MzszMywxMCBAQFxuIFxuICNkZWZpbmUgTUNBU1RfSU5WQUxJRF9HUlBcdFx0KC0xVSlcbiAjZGVmaW5lIFJBVEVfTUFOVElTU0FfQklUU1x0XHQ4XG4mIzQzOy8qIE1pbiBwZXItcXVldWUgZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgyIE1icHMpLiAqL1xuJiM0MzsjZGVmaW5lIE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTXHQyNTAwMDBVTExcbiYjNDM7LyogTWF4IGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMTMwODE2IE1icHMpLiAqL1xuJiM0MzsjZGVmaW5lIE9UWDJfTVFQUklPX01BWF9SQVRFX0JZVEVTX1BTXHQoKE1BWF9CVVJTVF9TSVpFICogMTAwMDAwMFVMTCkgLyA4VUxMKVxuIFxuIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcbiBcdFx0XHRcdCAgICAgIHUzMiAqYnVyc3RfZXhwLCB1MzIgKmJ1cnN0X21hbnRpc3NhKVxuQEAgLTYxLDYgJiM0Mzs2Nyw5IEBAIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcbiBcdFx0XHQqYnVyc3RfbWFudGlzc2EgPSB0bXAgLyAoMVVMTCBcdTAwM2NcdTAwM2MgKCpidXJzdF9leHAgLSA3KSk7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBidXJzdCAwOiBsYXJnZXN0IGVuY29kYWJsZSBidXJzdCAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb25cbiYjNDM7XHRcdCAqIENOMTBLKSwgbm90IGEgbWluaW1hbCBidXJzdC5cbiYjNDM7XHRcdCAqL1xuIFx0XHQqYnVyc3RfZXhwID0gTUFYX0JVUlNUX0VYUE9ORU5UO1xuIFx0XHQqYnVyc3RfbWFudGlzc2EgPSBtYXhfbWFudGlzc2E7XG4gXHR9XG5AQCAtMTYwMCwxNCAmIzQzOzE2MDksNzA5IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19ibG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgIG5pYywgbmljLCBpbmdyZXNzKTtcbiB9XG4gXG4mIzQzOy8qIEZyZWUgdGhlIHBlci1xdWV1ZSBtaW4vbWF4IHJhdGUgY2FjaGVzLiAqL1xuJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19mcmVlX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdGRldm1fa2ZyZWUocGZ2Zi1cdTAwM2VkZXYsIHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlKTtcbiYjNDM7XHRkZXZtX2tmcmVlKHBmdmYtXHUwMDNlZGV2LCBwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSk7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUgPSBOVUxMO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlID0gTlVMTDtcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmLCBib29sIHJlcGxhY2luZylcbiYjNDM7e1xuJiM0MztcdHUxNiBudW1fdHhxID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbiYjNDM7XG4mIzQzO1x0aWYgKHJlcGxhY2luZyBcdTAwMjZcdTAwMjYgcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUgXHUwMDI2XHUwMDI2IHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSB7XG4mIzQzO1x0XHRtZW1zZXQocGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUsIDAsXG4mIzQzO1x0XHQgICAgICAgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUpKTtcbiYjNDM7XHRcdG1lbXNldChwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSwgMCxcbiYjNDM7XHRcdCAgICAgICBudW1fdHhxICogc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSkpO1xuJiM0MztcdFx0cGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgPSAwO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xuJiM0MztcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVx1MDAzZWRldiwgbnVtX3R4cSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSksXG4mIzQzO1x0XHRcdFx0XHQgICAgIEdGUF9LRVJORUwpO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtXHUwMDNlZGV2LCBudW1fdHhxLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSB8fCAhcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpIHtcbiYjNDM7XHRcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19zbmFwX2ZyZWUoc3RydWN0IG90eDJfbmljICpwZnZmLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IG1xX29mZmxvYWRfc25hcCAqKnNuYXApXG4mIzQzO3tcbiYjNDM7XHRpZiAoISpzbmFwKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRkZXZtX2tmcmVlKHBmdmYtXHUwMDNlZGV2LCAqc25hcCk7XG4mIzQzO1x0KnNuYXAgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3NuYXBfY29weShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKipkc3QsXG4mIzQzO1x0XHRcdFx0IGNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbiYjNDM7XHRzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICpzbmFwO1xuJiM0MztcdGludCB0YztcbiYjNDM7XG4mIzQzO1x0aWYgKCEqZHN0KSB7XG4mIzQzO1x0XHRzbmFwID0gZGV2bV9remFsbG9jKHBmdmYtXHUwMDNlZGV2LCBzaXplb2YoKnNuYXApLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdGlmICghc25hcClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0XHQqZHN0ID0gc25hcDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0c25hcCA9ICpkc3Q7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzbmFwLVx1MDAzZW51bV90YyA9IHFvcHQtXHUwMDNlbnVtX3RjO1xuJiM0MztcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgVENfUU9QVF9NQVhfUVVFVUU7IHRjJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c25hcC1cdTAwM2Vjb3VudFt0Y10gPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbiYjNDM7XHRcdHNuYXAtXHUwMDNlb2Zmc2V0W3RjXSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbiYjNDM7XHRcdHNuYXAtXHUwMDNlbWluX3JhdGVbdGNdID0gMDtcbiYjNDM7XHRcdHNuYXAtXHUwMDNlbWF4X3JhdGVbdGNdID0gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IHRjJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXG4mIzQzO1x0XHRcdHNuYXAtXHUwMDNlbWluX3JhdGVbdGNdID0gbXFwcmlvLVx1MDAzZW1pbl9yYXRlW3RjXTtcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuJiM0MztcdFx0XHRzbmFwLVx1MDAzZW1heF9yYXRlW3RjXSA9IG1xcHJpby1cdTAwM2VtYXhfcmF0ZVt0Y107XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19zdGFnZV9jdXIoc3RydWN0IG90eDJfbmljICpwZnZmLFxuJiM0MztcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG90eDJfbXFwcmlvX3NuYXBfY29weShwZnZmLCBcdTAwMjZwZnZmLVx1MDAzZWN1cl9tcV9zbmFwLCBtcXByaW8pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19zbmFwX2NvbW1pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXHUwMDI2cGZ2Zi1cdTAwM2VvbGRfbXFfc25hcCk7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VvbGRfbXFfc25hcCA9IHBmdmYtXHUwMDNlY3VyX21xX3NuYXA7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VjdXJfbXFfc25hcCA9IE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2NsZWFyX3JlcGxhY2Vfc3RhdGUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lID0gZmFsc2U7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lID0gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHBmdmYtXHUwMDNlaHcudHhzY2hxX2NudFtOSVhfVFhTQ0hfTFZMX01EUV0gIT0gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0b3JlX29sZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICpzbmFwID0gcGZ2Zi1cdTAwM2VvbGRfbXFfc25hcDtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4mIzQzO1x0dTE2IG51bV90eHEgPSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xuJiM0MztcdGludCB0YywgdHhxLCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmICghc25hcClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBvdHgyX21xcHJpb19hbGxvY19jYWNoZShwZnZmLCBmYWxzZSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdG1lbXNldChwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSwgMCwgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUpKTtcbiYjNDM7XHRtZW1zZXQocGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUsIDAsIG51bV90eHEgKiBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSk7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgPSAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHNuYXAtXHUwMDNlbnVtX3RjOyB0YyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBtaW5fcmF0ZSA9IHNuYXAtXHUwMDNlbWluX3JhdGVbdGNdO1xuJiM0MztcdFx0dTY0IG1heF9yYXRlID0gc25hcC1cdTAwM2VtYXhfcmF0ZVt0Y107XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1pbl9yYXRlKVxuJiM0MztcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyB8PSBUQ19NUVBSSU9fRl9NSU5fUkFURTtcbiYjNDM7XHRcdGlmIChtYXhfcmF0ZSlcbiYjNDM7XHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgfD0gVENfTVFQUklPX0ZfTUFYX1JBVEU7XG4mIzQzO1xuJiM0MztcdFx0Zm9yICh0eHEgPSBzbmFwLVx1MDAzZW9mZnNldFt0Y107XG4mIzQzO1x0XHQgICAgIHR4cSBcdTAwM2Mgc25hcC1cdTAwM2VvZmZzZXRbdGNdICYjNDM7IHNuYXAtXHUwMDNlY291bnRbdGNdOyB0eHEmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcbiYjNDM7XHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXSA9IG1heF9yYXRlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCBzbmFwLVx1MDAzZW51bV90Yyk7XG4mIzQzO1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBzbmFwLVx1MDAzZW51bV90YzsgdGMmIzQzOyYjNDM7KVxuJiM0MztcdFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIHRjLCBzbmFwLVx1MDAzZWNvdW50W3RjXSxcbiYjNDM7XHRcdFx0XHQgICAgc25hcC1cdTAwM2VvZmZzZXRbdGNdKTtcbiYjNDM7XG4mIzQzO1x0aWYgKG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpIHtcbiYjNDM7XHRcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldigpIGNsZWFycyByYXRlX2xpbWl0IHdoZW4gbmRvX29wZW4oKSBmYWlscy4gKi9cbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3R4Ml9tcXByaW9fdXAocGZ2Zik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdG90eDJfbXFwcmlvX3NuYXBfZnJlZShwZnZmLCBcdTAwMjZwZnZmLVx1MDAzZWN1cl9tcV9zbmFwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfZGVzdHJveShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXHUwMDI2cGZ2Zi1cdTAwM2VjdXJfbXFfc25hcCk7XG4mIzQzO1x0b3R4Ml9tcXByaW9fc25hcF9mcmVlKHBmdmYsIFx1MDAyNnBmdmYtXHUwMDNlb2xkX21xX3NuYXApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19jbGVhcl9zdyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4mIzQzO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgPSBmYWxzZTtcbiYjNDM7XHRvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHBmdmYpO1xuJiM0MztcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgMCk7XG4mIzQzO1x0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogVGVhciBkb3duIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZDogY2xlYXIgcGVyLXF1ZXVlIHNoYXBlcnMsXG4mIzQzOyAqIG1xcHJpb19yYXRlX2xpbWl0LCBuZXRkZXYgVEMgbWFwcGluZ3MsIGFuZCB0aGUgY2FjaGVkIHJhdGVzLiAgQ2FsbGVkIG9uXG4mIzQzOyAqIGV4cGxpY2l0IG1xcHJpbyB0ZWFyZG93biAodGMgcWRpc2MgZGVsKSBhbmQgZXJyb3IgY2xlYW51cCwgbm90IG9uXG4mIzQzOyAqIHJvdXRpbmUgbmV0ZGV2IHN0b3Avb3BlbiBjeWNsZXMgd2hlcmUgdGhlIG9mZmxvYWQgc3RheXMgYWN0aXZlLlxuJiM0MzsgKi9cbiYjNDM7aW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAobmV0aWZfcnVubmluZyhwZnZmLVx1MDAzZW5ldGRldikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpXG4mIzQzO1x0XHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XG4mIzQzO1xuJiM0MztcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xuJiM0MztcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKHBmdmYtXHUwMDNlbmV0ZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDttcXByaW86IGZhaWxlZCB0byBjbGVhciBoYXJkd2FyZSBzaGFwZXJzOiAlZDsgc29tZSBUWCBxdWV1ZXMgbWF5IHJldGFpbiBiYW5kd2lkdGggbGltaXRzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBlcnIpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG90eDJfbXFwcmlvX3VwKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbiYjNDM7XHRpbnQgdHhxLCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlIHx8ICFwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKHR4cSA9IDA7IHR4cSBcdTAwM2MgcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlczsgdHhxJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xuJiM0MztcbiYjNDM7XHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5mbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXG4mIzQzO1x0XHRcdG1pbl9yYXRlID0gcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGVbdHhxXTtcbiYjNDM7XHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5mbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4mIzQzO1x0XHRcdG1heF9yYXRlID0gcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIW1pbl9yYXRlIFx1MDAyNlx1MDAyNiAhbWF4X3JhdGUpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLCBtaW5fcmF0ZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgbWF4X3JhdGUpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IGZhaWxlZCB0byByZXN0b3JlIHNoYXBlciBmb3IgdHhxICVkOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICB0eHEsIGVycik7XG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUmVzdGFydCB0aGUgbmV0ZGV2IHRvIHJlcHJvZ3JhbSB0aGUgVFggc2NoZWR1bGVyIGhpZXJhcmNoeSBmb3IgbXFwcmlvXG4mIzQzOyAqIGJhbmR3aWR0aCBvZmZsb2FkLiAgQm90aCBtcXByaW8gYWRkIGFuZCBkZWxldGUgKHdoZW4gb2ZmbG9hZCB3YXMgYWN0aXZlKVxuJiM0MzsgKiB0YWtlIHRoaXMgcGF0aCB2aWEgbmRvX3N0b3AoKS9uZG9fb3BlbigpIHNvIFZGLXNwZWNpZmljIG9wZW4gbG9naWMgKGUuZy5cbiYjNDM7ICogTEJLIGNhcnJpZXIgb24pIHJ1bnMgY29ycmVjdGx5LiAgVGhlIGZ1bGwgc3RvcC9vcGVuIGN5Y2xlIGNsZWFyc1xuJiM0MzsgKiBjYXJyaWVyLCBzdG9wcyBhbGwgVFggcXVldWVzLCB0ZWFycyBkb3duIElSUXMvTkFQSSBhbmQgZHJvcHMgaW4tZmxpZ2h0XG4mIzQzOyAqIHRyYWZmaWMuICBJZiBvcGVuIGZhaWxzLCB0aGUgaW50ZXJmYWNlIGlzIGxlZnQgYWRtaW5pc3RyYXRpdmVseSBkb3duXG4mIzQzOyAqIHdpdGhvdXQgY2FsbGluZyBuZG9fc3RvcCgpIGFnYWluIG9uIHJlc291cmNlcyBhbHJlYWR5IHRvcm4gZG93biBieVxuJiM0MzsgKiB0aGUgb3BlbiBlcnJvciBwYXRoLlxuJiM0MzsgKlxuJiM0MzsgKiBEbyBub3QgY2FsbCBkZXZfZGVhY3RpdmF0ZSgpL2Rldl9hY3RpdmF0ZSgpIGhlcmU6IHRoaXMgcnVucyBmcm9tXG4mIzQzOyAqIG5kb19zZXR1cF90YygpIHdoaWxlIHFkaXNjX2dyYWZ0KCkgbWF5IGFscmVhZHkgaG9sZCB0aGUgZGV2aWNlXG4mIzQzOyAqIGRlYWN0aXZhdGVkIGFuZCBtdXN0IHBlcmZvcm0gdGhlIGZpbmFsIGRldl9hY3RpdmF0ZSgpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJhdGVfbGltaXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gbmV0ZGV2LVx1MDAzZW5ldGRldl9vcHM7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0LyogVE9ETzogRXhwbG9yZSBsaXZlIFRYIHNjaGVkdWxlciByZXByb2dyYW1taW5nIHRvIGF2b2lkIGEgZnVsbFxuJiM0MztcdCAqIG5kb19zdG9wKCkvbmRvX29wZW4oKSBib3VuY2Ugb24gZXZlcnkgbXFwcmlvIGNoYW5nZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRuZXRkZXZfaW5mbyhuZXRkZXYsXG4mIzQzO1x0XHQgICAgXCYjMzQ7bXFwcmlvOiByZXN0YXJ0aW5nIGludGVyZmFjZSB0byByZXByb2dyYW0gVFggc2NoZWR1bGVyOyBpbi1mbGlnaHQgdHJhZmZpYyB3aWxsIGJlIGRyb3BwZWRcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBvcHMtXHUwMDNlbmRvX3N0b3AobmV0ZGV2KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0LyogU2V0IGJlZm9yZSBuZG9fb3BlbigpIHNvIG90eDJfdHhzY2hfYWxsb2MoKSB3aWRlbnMgU01RIGFsbG9jYXRpb24uXG4mIzQzO1x0ICogT24gdGVhcmRvd24sIGRyb3AgbXFwcmlvIHNvZnR3YXJlIHN0YXRlIHNvIG5kb19vcGVuKCkgZG9lcyBub3RcbiYjNDM7XHQgKiByZS1hcHBseSBiYW5kd2lkdGggbGltaXRzIHZpYSBvdHgyX21xcHJpb191cCgpIGFmdGVyIHRoZSBrZXJuZWxcbiYjNDM7XHQgKiByZW1vdmVkIHRoZSBxZGlzYy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocmF0ZV9saW1pdClcbiYjNDM7XHRcdHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgPSB0cnVlO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBvcHMtXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7RmFpbGVkIHRvIHJlc3RhcnQgZGV2aWNlIGFmdGVyIG1xcHJpbyBjaGFuZ2U6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBlcnIpO1xuJiM0MztcdFx0LyogbmRvX29wZW4oKSBhbHJlYWR5IGZyZWVkIHRoZSBUWCBzY2hlZHVsZXJzIG9uIGZhaWx1cmUgd2hpbGVcbiYjNDM7XHRcdCAqIG5ldGlmX3J1bm5pbmcoKSBtYXkgc3RpbGwgYmUgdHJ1ZTsgZHJvcCBtcXByaW8gc29mdHdhcmUgc3RhdGVcbiYjNDM7XHRcdCAqIG9ubHkgaW5zdGVhZCBvZiBzZW5kaW5nIHNoYXBlciBjbGVhcnMgdG8gZnJlZWQgcXVldWVzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcbiYjNDM7XHRcdC8qIG5kb19vcGVuKCkgcm9sbHMgYmFjayBvbiBmYWlsdXJlOyBtYXJrIHRoZSBpbnRlcmZhY2UgZG93biBzb1xuJiM0MztcdFx0ICogbmV0aWZfY2xvc2UoKSBkb2VzIG5vdCBpbnZva2UgbmRvX3N0b3AoKSBvbiBmcmVlZCBOQVBJL3F1ZXVlXG4mIzQzO1x0XHQgKiBzdGF0ZS4gQ2FsbGVyIGhvbGRzIFJUTkw7IGRldl9jbG9zZSgpIHdvdWxkIGRlYWRsb2NrLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRwZnZmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19JTlRGX0RPV047XG4mIzQzO1x0XHQvKiB2aXNpYmxlIHRvIG90eDJfc3RvcCgpIG9uIG90aGVyIGNwdXMgKi9cbiYjNDM7XHRcdHNtcF93bWIoKTtcbiYjNDM7XHRcdG5ldGlmX2Nsb3NlKG5ldGRldik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdHU2NCByYXRlLCB1MzIgcWNvdW50LCBpbnQgdGMsXG4mIzQzO1x0XHRcdFx0XHRjb25zdCBjaGFyICpuYW1lKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFyYXRlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChxY291bnQgXHUwMDNjPSAxKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIFRPRE86IG1xcHJpbyBtaW5fcmF0ZS9tYXhfcmF0ZSBhcmUgcGVyIHRyYWZmaWMgY2xhc3MsIGJ1dCBiYW5kd2lkdGhcbiYjNDM7XHQgKiBvZmZsb2FkIHNoYXBlcyBvbiBwZXItcXVldWUgTURRIG5vZGVzIHBhcmVudGVkIHVuZGVyIGEgc2luZ2xlIFRMNC5cbiYjNDM7XHQgKiBXaXRob3V0IHBlci1UQyBUTDQgc2hhcGVycyB0aGUgZHJpdmVyIGNhbm5vdCBob25vciBUQy1sZXZlbCBsaW1pdHNcbiYjNDM7XHQgKiBmb3IgYSB0cmFmZmljIGNsYXNzIHRoYXQgc3BhbnMgbXVsdGlwbGUgcXVldWVzIHdpdGhvdXQgZWl0aGVyXG4mIzQzO1x0ICogZGl2aWRpbmcgdGhlIHJhdGUgYWNyb3NzIHF1ZXVlcyAodUFQSSBtaXNtYXRjaCkgb3IgZXhjZWVkaW5nIHRoZSBUQ1xuJiM0MztcdCAqIGNhcCB3aGVuIGV2ZXJ5IG1lbWJlciBxdWV1ZSBpcyBhY3RpdmUuIFJlamVjdCB1bnRpbCBwZXItVEMgVEw0XG4mIzQzO1x0ICogc2hhcGluZyBjYW4gYmUgaW1wbGVtZW50ZWQgd2l0aG91dCBhbGxvY2F0aW5nIGFkZGl0aW9uYWwgVEw0IG5vZGVzXG4mIzQzO1x0ICogYmV5b25kIHRoZSBleGlzdGluZyBoaWVyYXJjaHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHQgICBcJiMzNDttcXByaW86ICVzIHJhdGUgZm9yIHRjICVkIG5vdCBzdXBwb3J0ZWQgd2l0aCAldSBxdWV1ZXNcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBuYW1lLCB0YywgcWNvdW50KTtcbiYjNDM7XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O21xcHJpbzogJXMgcmF0ZSBmb3IgdGMgJWQgbm90IHN1cHBvcnRlZCB3aXRoICV1IHF1ZXVlc1wmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIG5hbWUsIHRjLCBxY291bnQpO1xuJiM0MztcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb192YWxpZGF0ZV90eHFzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHUxNiBudW1fdHhxID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbiYjNDM7XHRpbnQgdGMsIHR4cTtcbiYjNDM7XG4mIzQzO1x0aWYgKHFvcHQtXHUwMDNlbnVtX3RjIFx1MDAzZSBudW1fdHhxKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7TnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBxb3B0LVx1MDAzZW51bV90YywgbnVtX3R4cSk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7TnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1XCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgICBxb3B0LVx1MDAzZW51bV90YywgbnVtX3R4cSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChudW1fdHhxIFx1MDAzZSBNQVhfVFhTQ0hRX1BFUl9GVU5DKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7TnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgICAgIFwmIzM0O051bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1XCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgICBudW1fdHhxLCBNQVhfVFhTQ0hRX1BFUl9GVU5DKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1MzIgcWNvdW50ID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4mIzQzO1xuJiM0MztcdFx0Zm9yICh0eHEgPSBxb3B0LVx1MDAzZW9mZnNldFt0Y107XG4mIzQzO1x0XHQgICAgIHR4cSBcdTAwM2MgcW9wdC1cdTAwM2VvZmZzZXRbdGNdICYjNDM7IHFjb3VudDsgdHhxJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRpZiAodHhxIFx1MDAzZT0gbnVtX3R4cSkge1xuJiM0MztcdFx0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiB0eHEgJWQgZXhjZWVkcyBvZmZsb2FkIHF1ZXVlIGNvdW50ICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgdHhxLCBudW1fdHhxKTtcbiYjNDM7XHRcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIFwmIzM0O21xcHJpbzogdHhxICVkIGV4Y2VlZHMgb2ZmbG9hZCBxdWV1ZSBjb3VudCAldVwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIHR4cSwgbnVtX3R4cSk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBvdHgyX21xcHJpb19yYXRlX3ZhbGlkKHU2NCByYXRlX2J5dGVzX3BzKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IG1icHM7XG4mIzQzO1xuJiM0MztcdGlmICghcmF0ZV9ieXRlc19wcylcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRpZiAocmF0ZV9ieXRlc19wcyBcdTAwM2MgT1RYMl9NUVBSSU9fTUlOX1JBVEVfQllURVNfUFMpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChyYXRlX2J5dGVzX3BzIFx1MDAzZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QUylcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJhdGVfYnl0ZXNfcHMgXHUwMDNlIGRpdl91NjQoVTY0X01BWCwgOCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG1icHMgPSBvdHgyX2NvbnZlcnRfcmF0ZShyYXRlX2J5dGVzX3BzKTtcbiYjNDM7XHRyZXR1cm4gaWxvZzIobWJwcyAvIDIpIFx1MDAzYz0gTUFYX1JBVEVfRVhQT05FTlQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml90ZWFyZG93bl90Y19tcXByaW8oc3RydWN0IG90eDJfbmljICpwZnZmLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbiYjNDM7XHRib29sIGhhZF9tcXByaW8gPSBwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0O1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbiYjNDM7XHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdHFvcHQtXHUwMDNlaHcgPSAwO1xuJiM0MztcbiYjNDM7XHQvKiB0YyBxZGlzYyByZXBsYWNlIHJ1bnMgc2V0dXAgb24gdGhlIG5ldyBtcXByaW8gYmVmb3JlIGRlc3Ryb3lpbmcgdGhlXG4mIzQzO1x0ICogb2xkIG9uZS4gcmVwbGFjZV9zZXR1cF9kb25lIGFuZCBUQ19ST09UX0dSQUZUIGRpc3Rpbmd1aXNoIHN0YWxlXG4mIzQzO1x0ICogb2xkLWluc3RhbmNlIHRlYXJkb3duIGZyb20gZ3JhZnQgZmFpbHVyZSBhZnRlciBzZXR1cC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lIFx1MDAyNlx1MDAyNiBwZnZmLVx1MDAzZWN1cl9tcV9zbmFwKSB7XG4mIzQzO1x0XHRlcnIgPSAwO1xuJiM0MztcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSlcbiYjNDM7XHRcdFx0b3R4Ml9tcXByaW9fc25hcF9jb21taXQocGZ2Zik7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHBmdmYpO1xuJiM0MztcdFx0b3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShwZnZmKTtcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBTa2lwIHRoZSBuZXRkZXYgcmVzdGFydCB3aGVuIG1xcHJpbyBvZmZsb2FkIHdhcyBub3QgYWN0aXZlLiAqL1xuJiM0MztcdGlmICghaGFkX21xcHJpbylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAoaWZfdXApIHtcbiYjNDM7XHRcdGludCBkb3duX2VyciwgZXJyO1xuJiM0MztcbiYjNDM7XHRcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcbiYjNDM7XHRcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KG5ldGRldiwgZmFsc2UpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdHJldHVybiBkb3duX2VycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIG5kb19zdG9wKCkgYWxyZWFkeSBmcmVlZCB0aGUgVFggc2NoZWR1bGVyIFRMIG5vZGVzOyBkcm9wIHNvZnR3YXJlXG4mIzQzO1x0ICogc3RhdGUgb25seS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX3NldHVwX3RjX21xcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHRcdHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBtcXByaW8tXHUwMDNlZXh0YWNrO1xuJiM0MztcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0c3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gXHUwMDI2bXFwcmlvLVx1MDAzZXFvcHQ7XG4mIzQzO1x0Ym9vbCByZXBsYWNpbmcgPSBwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0O1xuJiM0MztcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XG4mIzQzO1x0aW50IHRjLCB0eHEsIGVyciwgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFxb3B0LVx1MDAzZWh3KVxuJiM0MztcdFx0cmV0dXJuIG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XG4mIzQzO1xuJiM0MztcdGlmICghaWZfdXApIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDttcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFxcblwmIzM0Oyk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDttcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobXFwcmlvLVx1MDAzZXNoYXBlciAhPSBUQ19NUVBSSU9fU0hBUEVSX0JXX1JBVEUpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDtVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxcblwmIzM0OywgbXFwcmlvLVx1MDAzZXNoYXBlcik7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywgXCYjMzQ7VW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgIG1xcHJpby1cdTAwM2VzaGFwZXIpO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCBcdTAwMjZwZnZmLVx1MDAzZWh3LmNhcF9mbGFnKSkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSJiM0MztQSVIgc3VwcG9ydFxcblwmIzM0Oyk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSJiM0MztQSVIgc3VwcG9ydFwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoaXNfb3R4Ml9zZHBfcmVwKHBmdmYtXHUwMDNlcGRldikpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFxcblwmIzM0Oyk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwZnZmLVx1MDAzZXBmY19lbikge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNleGRwX3Byb2cpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgWERQIGlzIGFjdGl2ZVwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbiYjNDM7XHRcdHUzMiBxY291bnQgPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbiYjNDM7XHRcdFx0bWluX3JhdGUgPSBtcXByaW8tXHUwMDNlbWluX3JhdGVbdGNdO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4mIzQzO1x0XHRcdG1heF9yYXRlID0gbXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobWluX3JhdGUgXHUwMDI2XHUwMDI2IG1heF9yYXRlIFx1MDAyNlx1MDAyNiBtaW5fcmF0ZSBcdTAwM2UgbWF4X3JhdGUpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpO1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBcJiMzNDttaW5fcmF0ZSAlbGx1IGV4Y2VlZHMgbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWRcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKSB7XG4mIzQzO1x0XHRcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBleHRhY2ssIG1pbl9yYXRlLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIHFjb3VudCwgdGMsIFwmIzM0O21pblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSkge1xuJiM0MztcdFx0XHRlcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtYXhfcmF0ZSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBxY291bnQsIHRjLCBcJiMzNDttYXhcJiMzNDspO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIW90eDJfbXFwcmlvX3JhdGVfdmFsaWQobWluX3JhdGUpKSB7XG4mIzQzO1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgbWluX3JhdGUsIHRjKTtcbiYjNDM7XHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgXCYjMzQ7bXFwcmlvOiBtaW5fcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0c1wmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBtaW5fcmF0ZSwgdGMpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChtYXhfcmF0ZSkpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0c1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICBtYXhfcmF0ZSwgdGMpO1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBcJiMzNDttcXByaW86IG1heF9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIG1heF9yYXRlLCB0Yyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdHhxcyhuZXRkZXYsIGV4dGFjaywgcW9wdCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfbXFwcmlvX3N0YWdlX2N1cihwZnZmLCBtcXByaW8pO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihwZnZmLVx1MDAzZW5ldGRldiwgdHJ1ZSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUocGZ2ZiwgcmVwbGFjaW5nKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHQvKiBvdHgyX21xcHJpb191cCgpIG1heSBoYXZlIHJlc3RvcmVkIHRoZSBwcmV2aW91cyBjb25maWd1cmF0aW9uIGR1cmluZ1xuJiM0MztcdCAqIHRoZSByZXN0YXJ0IGFib3ZlLiBDbGVhciBldmVyeSBNRFEgc2hhcGVyIGJlZm9yZSBhcHBseWluZyB0aGUgbmV3XG4mIzQzO1x0ICogbWFwcGluZyBzbyBxdWV1ZXMgZHJvcHBlZCBmcm9tIHRoZSBUQyBsYXlvdXQgZG8gbm90IGtlZXAgc3RhbGVcbiYjNDM7XHQgKiBsaW1pdHMgaW4gaGFyZHdhcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpIHtcbiYjNDM7XHRcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzID0gbXFwcmlvLVx1MDAzZWZsYWdzO1xuJiM0MztcbiYjNDM7XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbiYjNDM7XHRcdHUzMiBxY291bnQgPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBSYXRlcyBvbWl0dGVkIGZyb20gdGMgbXFwcmlvIGFyZSBwYXNzZWQgYXMgemVybyBhbmQgYm90aCBNRFFcbiYjNDM7XHRcdCAqIHNoYXBlciByZWdpc3RlcnMgYXJlIHByb2dyYW1tZWQ7IHNlZVxuJiM0MztcdFx0ICogb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcigpLiBNdWx0aS1xdWV1ZSBUQ3Mgd2l0aCByYXRlc1xuJiM0MztcdFx0ICogYXJlIHJlamVjdGVkIGFib3ZlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbiYjNDM7XHRcdFx0bWluX3JhdGUgPSBtcXByaW8tXHUwMDNlbWluX3JhdGVbdGNdO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4mIzQzO1x0XHRcdG1heF9yYXRlID0gbXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKHR4cSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbiYjNDM7XHRcdCAgICAgdHhxIFx1MDAzYyBxb3B0LVx1MDAzZW9mZnNldFt0Y10gJiM0MzsgcWNvdW50OyB0eHEmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdG5ldGRldl9kYmcobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogdGMgJWQgdHhxICVkIG1pbl9yYXRlICVsbHUgbWF4X3JhdGUgJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICB0YywgdHhxLCBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xuJiM0MztcbiYjNDM7XHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGVbdHhxXSA9IG1pbl9yYXRlO1xuJiM0MztcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7XG4mIzQzO1xuJiM0MztcdFx0XHRlcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgcGZ2Zi1cdTAwM2VjdXJfbXFfc25hcC1cdTAwM2VudW1fdGMpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBmdmYtXHUwMDNlY3VyX21xX3NuYXAtXHUwMDNlbnVtX3RjOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdG5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCBpLCBwZnZmLVx1MDAzZWN1cl9tcV9zbmFwLVx1MDAzZWNvdW50W2ldLFxuJiM0MztcdFx0XHRcdCAgICBxb3B0LVx1MDAzZW9mZnNldFtpXSk7XG4mIzQzO1xuJiM0MztcdHFvcHQtXHUwMDNlaHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7XG4mIzQzO1xuJiM0MztcdGlmIChyZXBsYWNpbmcpIHtcbiYjNDM7XHRcdHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSA9IHRydWU7XG4mIzQzO1x0XHRwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSBmYWxzZTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0b3R4Ml9tcXByaW9fc25hcF9jb21taXQocGZ2Zik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2NsZWFudXA6XG4mIzQzO1x0cW9wdC1cdTAwM2VodyA9IDA7XG4mIzQzO1x0aWYgKHJlcGxhY2luZykge1xuJiM0MztcdFx0aW50IHJlc3RvcmVfZXJyID0gb3R4Ml9tcXByaW9fcmVzdG9yZV9vbGQocGZ2Zik7XG4mIzQzO1xuJiM0MztcdFx0b3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShwZnZmKTtcbiYjNDM7XHRcdGlmIChyZXN0b3JlX2Vycikge1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IHJlcGxhY2UgZmFpbGVkIGFuZCBwcmlvciBjb25maWd1cmF0aW9uIHJvbGxiYWNrIGZhaWxlZDogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgcmVzdG9yZV9lcnIpO1xuJiM0MztcdFx0XHRpZiAoZXh0YWNrKVxuJiM0MztcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgXCYjMzQ7bXFwcmlvOiByZXBsYWNlIGZhaWxlZCBhbmQgcHJpb3IgY29uZmlndXJhdGlvbiByb2xsYmFjayBmYWlsZWQ6ICVkXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgcmVzdG9yZV9lcnIpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiByZXBsYWNlIGZhaWxlZDsgcHJpb3IgY29uZmlndXJhdGlvbiByZXN0b3JlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGlmIChleHRhY2spXG4mIzQzO1x0XHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiByZXBsYWNlIGZhaWxlZDsgcHJpb3IgY29uZmlndXJhdGlvbiByZXN0b3JlZFwmIzM0Oyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXR1cm4gZXJyID8gZXJyIDogLUVJTztcbiYjNDM7XHR9XG4mIzQzO1x0b3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfcm9vdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCB0Y19yb290X3FvcHRfb2ZmbG9hZCAqcm9vdClcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAocm9vdC1cdTAwM2Vjb21tYW5kKSB7XG4mIzQzO1x0Y2FzZSBUQ19ST09UX0dSQUZUOlxuJiM0MztcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSlcbiYjNDM7XHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lID0gdHJ1ZTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh2b2lkICp0eXBlX2RhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlID0gdHlwZV9kYXRhO1xuJiM0MztcdHN0cnVjdCB0Y19tcXByaW9fY2FwcyAqY2FwcztcbiYjNDM7XG4mIzQzO1x0aWYgKGJhc2UtXHUwMDNldHlwZSAhPSBUQ19TRVRVUF9RRElTQ19NUVBSSU8pXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdGNhcHMgPSBiYXNlLVx1MDAzZWNhcHM7XG4mIzQzO1x0Y2Fwcy1cdTAwM2V2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBpbnQgb3R4Ml9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbiBcdFx0ICB2b2lkICp0eXBlX2RhdGEpXG4ge1xuIFx0c3dpdGNoICh0eXBlKSB7XG4mIzQzO1x0Y2FzZSBUQ19RVUVSWV9DQVBTOlxuJiM0MztcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh0eXBlX2RhdGEpO1xuIFx0Y2FzZSBUQ19TRVRVUF9CTE9DSzpcbiBcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfYmxvY2sobmV0ZGV2LCB0eXBlX2RhdGEpO1xuIFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19IVEI6XG4gXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX2h0YihuZXRkZXYsIHR5cGVfZGF0YSk7XG4mIzQzO1x0Y2FzZSBUQ19TRVRVUF9RRElTQ19NUVBSSU86XG4mIzQzO1x0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19tcXByaW8obmV0ZGV2LCB0eXBlX2RhdGEpO1xuJiM0MztcdGNhc2UgVENfU0VUVVBfUk9PVF9RRElTQzpcbiYjNDM7XHRcdHJldHVybiBvdHgyX3NldHVwX3RjX3Jvb3QobmV0ZGV2X3ByaXYobmV0ZGV2KSwgdHlwZV9kYXRhKTtcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbkBAIC0xNjMyLDYgJiM0MzsyMzM2LDcgQEAgRVhQT1JUX1NZTUJPTChvdHgyX2luaXRfdGMpO1xuIHZvaWQgb3R4Ml9zaHV0ZG93bl90YyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYylcbiB7XG4gXHRvdHgyX2Rlc3Ryb3lfdGNfZmxvd19saXN0KG5pYyk7XG4mIzQzO1x0b3R4Ml9tcXByaW9fc25hcF9kZXN0cm95KG5pYyk7XG4gfVxuIEVYUE9SVF9TWU1CT0wob3R4Ml9zaHV0ZG93bl90Yyk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXG5pbmRleCA2OWMwOTExZTI4ZTkxLi5kOWFmMTgyZTU3MjFkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcbkBAIC0xMTgsNiAmIzQzOzExOCw5IEBAIHN0YXRpYyB2b2lkIG90eDJfY29uZmlnX3NjaGVkX3NoYXBpbmcoc3RydWN0IG90eDJfbmljICpwZnZmLFxuIFx0LyogY29uZmlndXJlIFBJUiAqL1xuIFx0bWF4cmF0ZSA9IChub2RlLVx1MDAzZXJhdGUgXHUwMDNlIG5vZGUtXHUwMDNlY2VpbCkgPyBub2RlLVx1MDAzZXJhdGUgOiBub2RlLVx1MDAzZWNlaWw7XG4gXG4mIzQzO1x0LyogNjU1MzYgaXMgdGhlIGtlcm5lbC1zaWRlIGRlZmF1bHQgYnVyc3Qgd2hlbiBIVEIgZG9lcyBub3Qgc3VwcGx5IGFuXG4mIzQzO1x0ICogZXhwbGljaXQgdmFsdWUsIG5vdCB0aGUgTklYIGhhcmR3YXJlIG1heGltdW0gKENOMTBLX01BWF9CVVJTVF9TSVpFKS5cbiYjNDM7XHQgKi9cbiBcdGNmZy1cdTAwM2VyZWd2YWxbKm51bV9yZWdzXSA9XG4gXHRcdG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCBtYXhyYXRlLCA2NTUzNik7XG4gXHQoKm51bV9yZWdzKSYjNDM7JiM0Mzs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDM6Mzk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIG9ubHkgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIG5ldHdvcmsgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi8pLCBhZGRpbmcgc3VwcG9ydCBmb3IgbXFwcmlvIGhhcmR3YXJlIGJhbmR3aWR0aCBvZmZsb2FkLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDL1NvQyBkcml2ZXIgcmVxdWlyaW5nIHBoeXNpY2FsIE1hcnZlbGwgT2N0ZW9uVFgyIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTExMzY1ZTY4MWFlZTM5NGI1ZWM3ZDAwZjhkZmM1MTdjZjZjOGZlZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMDM6Mzk6NDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMKaW5kZXggMTUzZWI1N2JhZDA2Ny4uYzlhNDMyNmQ3MjVkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguYwpAQCAtMzMxLDggJiM0MzszMzEsMTIgQEAgc3RhdGljIGJvb2wgaXNfdmFsaWRfdHhzY2hxKHN0cnVjdCBydnUgKnJ2dSwgaW50IGJsa2FkZHIsCiAJCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKLQlpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYykKJiM0MzsJaWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpIHsKJiM0MzsJCWRldl9lcnJfcmF0ZWxpbWl0ZWQocnZ1LSZndDtkZXYsCiYjNDM7CQkJCSAgICAmIzM0O3BjaWZ1bmMgJXggbWFwIHBjaWZ1bmMgJXggbm90IGVxdWFsLCBsdmw9JXUgc2NocT0ldVxuJiMzNDssCiYjNDM7CQkJCSAgICBwY2lmdW5jLCBtYXBfZnVuYywgbHZsLCBzY2hxKTsKIAkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMKaW5kZXggMTc1OTkyMTg4YzE4YS4uYTUxOWUwYTk3YTJiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMKQEAgLTYxNSw2ICYjNDM7NjE1LDE0MiBAQCB2b2lkIG90eDJfZ2V0X21hY19mcm9tX2FmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB9CiBFWFBPUlRfU1lNQk9MKG90eDJfZ2V0X21hY19mcm9tX2FmKTsKIAomIzQzO3N0YXRpYyBpbnQKJiM0MztvdHgyX25peF90bXFfcmVnX3dyaXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGNudCwKJiM0MzsJCSAgICAgICB1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSwKJiM0MzsJCSAgICAgICB1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddKQomIzQzO3sKJiM0MzsJc3RydWN0IG1ib3ggKm1ib3ggPSAmYW1wO3BmdmYtJmd0O21ib3g7CiYjNDM7CXN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxOwomIzQzOwlpbnQgaSwgZXJyOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CXJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7CiYjNDM7CWlmICghcmVxKSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDttYm94LSZndDtsb2NrKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJlcS0mZ3Q7bHZsID0gTklYX1RYU0NIX0xWTF9NRFE7CiYjNDM7CXJlcS0mZ3Q7bnVtX3JlZ3MgPSBjbnQ7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjbnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlyZXEtJmd0O3JlZ1tpXSA9IHJlZ19hZGRyW2ldOwomIzQzOwkJcmVxLSZndDtyZWd2YWxbaV0gPSByZWdfdmFsW2ldOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR107CiYjNDM7CXU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR107CiYjNDM7CWludCBlcnIsIHNtcSwgaSwgY250ID0gMDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHBmdmYtJmd0O2h3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc21xID0gcGZ2Zi0mZ3Q7aHcudHhzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9TTVFdW2ldOwomIzQzOwomIzQzOwkJcmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpOwomIzQzOwkJcmVnX3ZhbFtjbnRdID0gMDsKJiM0MzsJCWNudCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQlyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7CiYjNDM7CQlyZWdfdmFsW2NudF0gPSAwOwomIzQzOwkJY250JiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJCWlmIChjbnQgJmx0OyBNQVhfUkVHU19QRVJfTUJPWF9NU0cgLSAxKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsCiYjNDM7CQkJCQkgICAgIHJlZ19hZGRyLCByZWdfdmFsKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBmYWlsOwomIzQzOwkJY250ID0gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoY250KSB7CiYjNDM7CQllcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCwKJiM0MzsJCQkJCSAgICAgcmVnX2FkZHIsIHJlZ192YWwpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlnb3RvIGZhaWw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7ZmFpbDoKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLAomIzQzOwkJCQkgaW50IHR4cSwgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IG1ib3ggKm1ib3ggPSAmYW1wO3BmdmYtJmd0O21ib3g7CiYjNDM7CXN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxOwomIzQzOwlpbnQgZXJyLCBzbXEsIG4gPSAwOwomIzQzOwl1NjQgcmVnX2FkZHJbMl07CiYjNDM7CXU2NCByZWdfdmFsWzJdOwomIzQzOwl1NjQgcmF0ZTsKJiM0MzsKJiM0MzsJaWYgKCFtYXhyYXRlICZhbXA7JmFtcDsgIW1pbnJhdGUpIHsKJiM0MzsJCXNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTsKJiM0MzsJCXJlZ19hZGRyWzBdID0gTklYX0FGX01EUVhfUElSKHNtcSk7CiYjNDM7CQlyZWdfdmFsWzBdID0gMDsKJiM0MzsJCXJlZ19hZGRyWzFdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7CiYjNDM7CQlyZWdfdmFsWzFdID0gMDsKJiM0MzsJCXJldHVybiBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIDIsIHJlZ19hZGRyLCByZWdfdmFsKTsKJiM0MzsJfQomIzQzOwomIzQzOwlzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDttYm94LSZndDtsb2NrKTsKJiM0MzsJcmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTsKJiM0MzsJaWYgKCFyZXEpIHsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO21ib3gtJmd0O2xvY2spOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmVxLSZndDtsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTsKJiM0MzsKJiM0MzsJLyogTVFQUklPIGV4cG9zZXMgb25seSBtaW4vbWF4IHJhdGUsIG5vdCBidXJzdC4gIFBhc3MgYnVyc3QgMCBzbwomIzQzOwkgKiBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKCkgcHJvZ3JhbW1lcyB0aGUgbGFyZ2VzdCBidXJzdCB0aGUgTklYCiYjNDM7CSAqIGVuY29kaW5nIHN1cHBvcnRzIChDTjEwS19NQVhfQlVSU1RfU0laRSBvbiBDTjEwSykuICBUaGlzIGRpZmZlcnMKJiM0MzsJICogZnJvbSB0aGUgNjU1MzYgYnl0ZSBkZWZhdWx0IHVzZWQgaW4gdGhlIEhUQiBwYXRoLCB3aGljaCBpcyBhCiYjNDM7CSAqIGtlcm5lbC1zaWRlIGRlZmF1bHQgd2hlbiBubyBleHBsaWNpdCBidXJzdCBpcyBjb25maWd1cmVkLCBub3QgYQomIzQzOwkgKiBoYXJkd2FyZSBjYXAuCiYjNDM7CSAqCiYjNDM7CSAqIG1xcHJpbyBzZXR1cCByZXN0YXJ0cyB0aGUgbmV0ZGV2IChvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldiksCiYjNDM7CSAqIHdoaWNoIHJlc2V0cyBNRFEgc2hhcGVycyB0byB6ZXJvLiAgUHJvZ3JhbSBib3RoIFBJUiBhbmQgQ0lSIG9uCiYjNDM7CSAqIGV2ZXJ5IHVwZGF0ZSBzbyBvbWl0dGVkIHJhdGVzIGFyZSBhcHBsaWVkIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW4KJiM0MzsJICogcmVseWluZyBvbiBzdGFsZSBoYXJkd2FyZSBzdGF0ZS4KJiM0MzsJICovCiYjNDM7CXJlcS0mZ3Q7cmVnW25dID0gTklYX0FGX01EUVhfUElSKHNtcSk7CiYjNDM7CWlmIChtYXhyYXRlKSB7CiYjNDM7CQlyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWF4cmF0ZSk7CiYjNDM7CQlyZXEtJmd0O3JlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJlcS0mZ3Q7cmVndmFsW25dID0gMDsKJiM0MzsJfQomIzQzOwluJiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJLyogQ0lSJiM0MztQSVIgc3VwcG9ydCBpcyByZXF1aXJlZCBhbmQgY2hlY2tlZCBhdCBtcXByaW8gc2V0dXAuICovCiYjNDM7CXJlcS0mZ3Q7cmVnW25dID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7CiYjNDM7CWlmIChtaW5yYXRlKSB7CiYjNDM7CQlyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWlucmF0ZSk7CiYjNDM7CQlyZXEtJmd0O3JlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJlcS0mZ3Q7cmVndmFsW25dID0gMDsKJiM0MzsJfQomIzQzOwluJiM0MzsmIzQzOzsKJiM0MzsJcmVxLSZndDtudW1fcmVncyA9IG47CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwogaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JfcGZjKQogewogCXUxNiAoKnNjaHFfbGlzdClbTUFYX1RYU0NIUV9QRVJfRlVOQ107CkBAIC02NTEsNyAmIzQzOzc4NywxMSBAQCBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2ZvcgogCQkJCQkJKHU2NClody0mZ3Q7c21xX2xpbmtfdHlwZSk7CiAJCXJlcS0mZ3Q7bnVtX3JlZ3MmIzQzOyYjNDM7OwogCQkvKiBNRFEgY29uZmlnICovCi0JCXBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107CiYjNDM7CQlpZiAocGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQpCiYjNDM7CQkJcGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVswXTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dOwomIzQzOwogCQlyZXEtJmd0O3JlZ1sxXSA9IE5JWF9BRl9NRFFYX1BBUkVOVChzY2hxKTsKIAkJcmVxLSZndDtyZWd2YWxbMV0gPSBwYXJlbnQgJmx0OyZsdDsgMTY7CiAJCXJlcS0mZ3Q7bnVtX3JlZ3MmIzQzOyYjNDM7OwpAQCAtNzc5LDYgJiM0Mzs5MTksOSBAQCBpbnQgb3R4Ml90eHNjaF9hbGxvYyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiAJCXJlcS0mZ3Q7c2NocVtOSVhfVFhTQ0hfTFZMX1RMNF0gPSBjaGFuX2NudDsKIAl9CiAKJiM0MzsJaWYgKHBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0KQomIzQzOwkJcmVxLSZndDtzY2hxW05JWF9UWFNDSF9MVkxfU01RXSA9IHBmdmYtJmd0O2h3Lm5vbl9xb3NfcXVldWVzOwomIzQzOwogCXJjID0gb3R4Ml9zeW5jX21ib3hfbXNnKCZhbXA7cGZ2Zi0mZ3Q7bWJveCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CkBAIC04NDQsNiAmIzQzOzk4Nyw3IEBAIHZvaWQgb3R4Ml90eHNjaHFfc3RvcChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiAKIAkvKiBDbGVhciB0aGUgdHhzY2hxIGxpc3QgKi8KIAlmb3IgKGx2bCA9IDA7IGx2bCAmbHQ7IE5JWF9UWFNDSF9MVkxfQ05UOyBsdmwmIzQzOyYjNDM7KSB7CiYjNDM7CQlwZnZmLSZndDtody50eHNjaHFfY250W2x2bF0gPSAwOwogCQlmb3IgKHNjaHEgPSAwOyBzY2hxICZsdDsgTUFYX1RYU0NIUV9QRVJfRlVOQzsgc2NocSYjNDM7JiM0MzspCiAJCQlwZnZmLSZndDtody50eHNjaHFfbGlzdFtsdmxdW3NjaHFdID0gMDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oCmluZGV4IGVlY2VlNjEyYjdiMmMuLmVkZTdmMTExM2I3MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oCkBAIC0xNyw2ICYjNDM7MTcsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3NvYy9tYXJ2ZWxsL3NpbGljb25zLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc29jL21hcnZlbGwvb2N0ZW9udHgyL2FzbS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9tYWNzZWMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9wa3Rfc2NoZWQuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvcGt0X2Nscy5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9kZXZsaW5rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdGltZTY0LmgmZ3Q7CkBAIC00ODMsNiAmIzQzOzQ4NCwyMyBAQCBzdHJ1Y3QgcGZfaXJxX2RhdGEgewogCWludCBtZGV2czsKIH07CiAKJiM0MztzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwIHsKJiM0MzsJdTY0IG1pbl9yYXRlW1RDX1FPUFRfTUFYX1FVRVVFXTsKJiM0MzsJdTY0IG1heF9yYXRlW1RDX1FPUFRfTUFYX1FVRVVFXTsKJiM0MzsJX191OCBudW1fdGM7CiYjNDM7CV9fdTE2IGNvdW50W1RDX1FPUFRfTUFYX1FVRVVFXTsKJiM0MzsJX191MTYgb2Zmc2V0W1RDX1FPUFRfTUFYX1FVRVVFXTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBvdHgyX21xcHJpbyB7CiYjNDM7CXUzMglmbGFnczsKJiM0MzsJdTY0CSptaW5fcmF0ZTsKJiM0MzsJdTY0CSptYXhfcmF0ZTsKJiM0MzsJYm9vbAlyYXRlX2xpbWl0OwomIzQzOwlib29sCXJlcGxhY2Vfc2V0dXBfZG9uZTsKJiM0MzsJYm9vbAlyZXBsYWNlX2dyYWZ0X2RvbmU7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBvdHgyX25pYyB7CiAJdm9pZCBfX2lvbWVtCQkqcmVnX2Jhc2U7CiAJc3RydWN0IG5ldF9kZXZpY2UJKm5ldGRldjsKQEAgLTUxNSw2ICYjNDM7NTMzLDEwIEBAIHN0cnVjdCBvdHgyX25pYyB7CiAJdTY0CQkJZmxhZ3M7CiAJdTY0CQkJKmNxX29wX2FkZHI7CiAKJiM0MzsJc3RydWN0IG90eDJfbXFwcmlvCW1xcHJpbzsKJiM0MzsJc3RydWN0IG1xX29mZmxvYWRfc25hcAkqY3VyX21xX3NuYXA7CiYjNDM7CXN0cnVjdCBtcV9vZmZsb2FkX3NuYXAJKm9sZF9tcV9zbmFwOwomIzQzOwogCXN0cnVjdCBicGZfcHJvZwkJKnhkcF9wcm9nOwogCXN0cnVjdCBvdHgyX3FzZXQJcXNldDsKIAlzdHJ1Y3Qgb3R4Ml9odwkJaHc7CkBAIC0xMjQ2LDYgJiM0MzsxMjY4LDExIEBAIGRtYV9hZGRyX3Qgb3R4Ml9kbWFfbWFwX3NrYl9mcmFnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKIAkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHNlZywgaW50ICpsZW4pOwogdm9pZCBvdHgyX2RtYV91bm1hcF9za2JfZnJhZ3Moc3RydWN0IG90eDJfbmljICpwZnZmLCBzdHJ1Y3Qgc2dfbGlzdCAqc2cpOwogaW50IG90eDJfcmVhZF9mcmVlX3NxZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBxaWR4KTsKJiM0MztpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCB0eHEsCiYjNDM7CQkJCSB1NjQgbWlucmF0ZSwgdTY0IG1heHJhdGUpOwomIzQzO2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKTsKJiM0MztpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpOwomIzQzO2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpOwogdm9pZCBvdHgyX3F1ZXVlX3ZmX3dvcmsoc3RydWN0IG1ib3ggKm13LCBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbWJveF93cSwKIAkJCWludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7CiBpbnQgb3R4Ml9kZWxfbWNhbV9mbG93X2VudHJ5KHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MTYgZW50cnksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYwppbmRleCBmMTEwZGZhNDIzNjA1Li40YTcwYWJjMjMwYmVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMKQEAgLTQxMyw2ICYjNDM7NDEzLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml9kY2JubF9pZWVlX3NldHBmYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWVlZV9wZmMgKnBmYykKIAl1OCBvbGRfcGZjX2VuOwogCWludCBlcnI7CiAKJiM0MzsJaWYgKHBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0ICZhbXA7JmFtcDsgcGZjLSZndDtwZmNfZW4pIHsKJiM0MzsJCW5ldGRldl9lcnIoZGV2LAomIzQzOwkJCSAgICYjMzQ7UEZDOiBjYW5ub3QgZW5hYmxlIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwogCW9sZF9wZmNfZW4gPSBwZnZmLSZndDtwZmNfZW47CiAJcGZ2Zi0mZ3Q7cGZjX2VuID0gcGZjLSZndDtwZmNfZW47CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuYwppbmRleCA5YmVlMWI5MWVlYWE2Li5lYzI2MDFjNmMyNTVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jCkBAIC0yODcsNiAmIzQzOzI4NywxNCBAQCBzdGF0aWMgaW50IG90eDJfc2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAomIzQzOwlpZiAocGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQgJmFtcDsmYW1wOwomIzQzOwkgICAgKGNoYW5uZWwtJmd0O3R4X2NvdW50ICE9IHBmdmYtJmd0O2h3LnR4X3F1ZXVlcyB8fAomIzQzOwkgICAgIGNoYW5uZWwtJmd0O3J4X2NvdW50ICE9IHBmdmYtJmd0O2h3LnJ4X3F1ZXVlcykpIHsKJiM0MzsJCW5ldGRldl9pbmZvKGRldiwKJiM0MzsJCQkgICAgJiMzNDtOb3QgcGVybWl0dGVkIHRvIGNoYW5nZSBjaGFubmVsIGNvdW50IHdoaWxlIE1RIHByaW8gaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwogCWlmIChpZl91cCkKIAkJZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fc3RvcChkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYwppbmRleCBjOTk1ZjI5MDA4NTkwLi43OWE4MmU0NDU0NTQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMKQEAgLTE5ODAsNiAmIzQzOzE5ODAsMTIgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2ZyZWVfbWVtOwogCiYjNDM7CWVyciA9IG90eDJfbXFwcmlvX3VwKHBmKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCW5ldGRldl9lcnIocGYtJmd0O25ldGRldiwKJiM0MzsJCQkgICAmIzM0O21xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVycyBkdXJpbmcgb3BlbjogJWQ7IGNvbnRpbnVpbmcgd2l0aG91dCBiYW5kd2lkdGggbGltaXRzXG4mIzM0OywKJiM0MzsJCQkgICBlcnIpOwomIzQzOwogCS8qIFJlZ2lzdGVyIE5BUEkgaGFuZGxlciAqLwogCWZvciAocWlkeCA9IDA7IHFpZHggJmx0OyBwZi0mZ3Q7aHcuY2ludF9jbnQ7IHFpZHgmIzQzOyYjNDM7KSB7CiAJCWNxX3BvbGwgPSAmYW1wO3FzZXQtJmd0O25hcGlbcWlkeF07CkBAIC0yODQ2LDYgJiM0MzsyODUyLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml94ZHBfc2V0dXAoc3RydWN0IG90eDJfbmljICpwZiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKQogCWJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKHBmLSZndDtuZXRkZXYpOwogCXN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7CiAKJiM0MzsJaWYgKHByb2cgJmFtcDsmYW1wOyBwZi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQpIHsKJiM0MzsJCW5ldGRldl9lcnIoZGV2LAomIzQzOwkJCSAgICYjMzQ7WERQOiBjYW5ub3QgYXR0YWNoIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwogCWlmIChwcm9nICZhbXA7JmFtcDsgZGV2LSZndDttdHUgJmd0OyBNQVhfWERQX01UVSkgewogCQluZXRkZXZfd2FybihkZXYsICYjMzQ7SnVtYm8gZnJhbWVzIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggWERQXG4mIzM0Oyk7CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jCmluZGV4IDAzOWZkNDdlYmY1MjIuLjQwOTAyOTZlZGZjNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYwpAQCAtMTYsNiAmIzQzOzE2LDggQEAKICNpbmNsdWRlICZsdDtuZXQvdGNfYWN0L3RjX21pcnJlZC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC90Y19hY3QvdGNfdmxhbi5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9pcHY2LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9wa3Rfc2NoZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L3NjaF9nZW5lcmljLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7Y24xMGsuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O290eDJfY29tbW9uLmgmIzM0OwpAQCAtMzEsNiAmIzQzOzMzLDEwIEBACiAKICNkZWZpbmUgTUNBU1RfSU5WQUxJRF9HUlAJCSgtMVUpCiAjZGVmaW5lIFJBVEVfTUFOVElTU0FfQklUUwkJOAomIzQzOy8qIE1pbiBwZXItcXVldWUgZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgyIE1icHMpLiAqLwomIzQzOyNkZWZpbmUgT1RYMl9NUVBSSU9fTUlOX1JBVEVfQllURVNfUFMJMjUwMDAwVUxMCiYjNDM7LyogTWF4IGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMTMwODE2IE1icHMpLiAqLwomIzQzOyNkZWZpbmUgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFMJKChNQVhfQlVSU1RfU0laRSAqIDEwMDAwMDBVTEwpIC8gOFVMTCkKIAogc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LAogCQkJCSAgICAgIHUzMiAqYnVyc3RfZXhwLCB1MzIgKmJ1cnN0X21hbnRpc3NhKQpAQCAtNjEsNiAmIzQzOzY3LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LAogCQkJKmJ1cnN0X21hbnRpc3NhID0gdG1wIC8gKDFVTEwgJmx0OyZsdDsgKCpidXJzdF9leHAgLSA3KSk7CiAJCX0KIAl9IGVsc2UgewomIzQzOwkJLyogYnVyc3QgMDogbGFyZ2VzdCBlbmNvZGFibGUgYnVyc3QgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uCiYjNDM7CQkgKiBDTjEwSyksIG5vdCBhIG1pbmltYWwgYnVyc3QuCiYjNDM7CQkgKi8KIAkJKmJ1cnN0X2V4cCA9IE1BWF9CVVJTVF9FWFBPTkVOVDsKIAkJKmJ1cnN0X21hbnRpc3NhID0gbWF4X21hbnRpc3NhOwogCX0KQEAgLTE2MDAsMTQgJiM0MzsxNjA5LDcwOSBAQCBzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfYmxvY2soc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCQkJICBuaWMsIG5pYywgaW5ncmVzcyk7CiB9CiAKJiM0MzsvKiBGcmVlIHRoZSBwZXItcXVldWUgbWluL21heCByYXRlIGNhY2hlcy4gKi8KJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19mcmVlX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CWRldm1fa2ZyZWUocGZ2Zi0mZ3Q7ZGV2LCBwZnZmLSZndDttcXByaW8ubWluX3JhdGUpOwomIzQzOwlkZXZtX2tmcmVlKHBmdmYtJmd0O2RldiwgcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlKTsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlID0gTlVMTDsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlID0gTlVMTDsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLmZsYWdzID0gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19hbGxvY19jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGJvb2wgcmVwbGFjaW5nKQomIzQzO3sKJiM0MzsJdTE2IG51bV90eHEgPSBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlczsKJiM0MzsKJiM0MzsJaWYgKHJlcGxhY2luZyAmYW1wOyZhbXA7IHBmdmYtJmd0O21xcHJpby5taW5fcmF0ZSAmYW1wOyZhbXA7IHBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZSkgewomIzQzOwkJbWVtc2V0KHBmdmYtJmd0O21xcHJpby5taW5fcmF0ZSwgMCwKJiM0MzsJCSAgICAgICBudW1fdHhxICogc2l6ZW9mKCpwZnZmLSZndDttcXByaW8ubWluX3JhdGUpKTsKJiM0MzsJCW1lbXNldChwZnZmLSZndDttcXByaW8ubWF4X3JhdGUsIDAsCiYjNDM7CQkgICAgICAgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlKSk7CiYjNDM7CQlwZnZmLSZndDttcXByaW8uZmxhZ3MgPSAwOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTsKJiM0MzsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtJmd0O2RldiwgbnVtX3R4cSwKJiM0MzsJCQkJCSAgICAgc2l6ZW9mKCpwZnZmLSZndDttcXByaW8ubWluX3JhdGUpLAomIzQzOwkJCQkJICAgICBHRlBfS0VSTkVMKTsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtJmd0O2RldiwgbnVtX3R4cSwKJiM0MzsJCQkJCSAgICAgc2l6ZW9mKCpwZnZmLSZndDttcXByaW8ubWF4X3JhdGUpLAomIzQzOwkJCQkJICAgICBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwZnZmLSZndDttcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZSkgewomIzQzOwkJb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19zbmFwX2ZyZWUoc3RydWN0IG90eDJfbmljICpwZnZmLAomIzQzOwkJCQkgIHN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKipzbmFwKQomIzQzO3sKJiM0MzsJaWYgKCEqc25hcCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZGV2bV9rZnJlZShwZnZmLSZndDtkZXYsICpzbmFwKTsKJiM0MzsJKnNuYXAgPSBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3NuYXBfY29weShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsCiYjNDM7CQkJCSBzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICoqZHN0LAomIzQzOwkJCQkgY29uc3Qgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9ICZhbXA7bXFwcmlvLSZndDtxb3B0OwomIzQzOwlzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICpzbmFwOwomIzQzOwlpbnQgdGM7CiYjNDM7CiYjNDM7CWlmICghKmRzdCkgewomIzQzOwkJc25hcCA9IGRldm1fa3phbGxvYyhwZnZmLSZndDtkZXYsIHNpemVvZigqc25hcCksIEdGUF9LRVJORUwpOwomIzQzOwkJaWYgKCFzbmFwKQomIzQzOwkJCXJldHVybiAtRU5PTUVNOwomIzQzOwkJKmRzdCA9IHNuYXA7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlzbmFwID0gKmRzdDsKJiM0MzsJfQomIzQzOwomIzQzOwlzbmFwLSZndDtudW1fdGMgPSBxb3B0LSZndDtudW1fdGM7CiYjNDM7CWZvciAodGMgPSAwOyB0YyAmbHQ7IFRDX1FPUFRfTUFYX1FVRVVFOyB0YyYjNDM7JiM0MzspIHsKJiM0MzsJCXNuYXAtJmd0O2NvdW50W3RjXSA9IHFvcHQtJmd0O2NvdW50W3RjXTsKJiM0MzsJCXNuYXAtJmd0O29mZnNldFt0Y10gPSBxb3B0LSZndDtvZmZzZXRbdGNdOwomIzQzOwkJc25hcC0mZ3Q7bWluX3JhdGVbdGNdID0gMDsKJiM0MzsJCXNuYXAtJmd0O21heF9yYXRlW3RjXSA9IDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yICh0YyA9IDA7IHRjICZsdDsgcW9wdC0mZ3Q7bnVtX3RjOyB0YyYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01JTl9SQVRFKQomIzQzOwkJCXNuYXAtJmd0O21pbl9yYXRlW3RjXSA9IG1xcHJpby0mZ3Q7bWluX3JhdGVbdGNdOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUFYX1JBVEUpCiYjNDM7CQkJc25hcC0mZ3Q7bWF4X3JhdGVbdGNdID0gbXFwcmlvLSZndDttYXhfcmF0ZVt0Y107CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fc3RhZ2VfY3VyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKJiM0MzsJCQkJIGNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pCiYjNDM7ewomIzQzOwlyZXR1cm4gb3R4Ml9tcXByaW9fc25hcF9jb3B5KHBmdmYsICZhbXA7cGZ2Zi0mZ3Q7Y3VyX21xX3NuYXAsIG1xcHJpbyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfY29tbWl0KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CW90eDJfbXFwcmlvX3NuYXBfZnJlZShwZnZmLCAmYW1wO3BmdmYtJmd0O29sZF9tcV9zbmFwKTsKJiM0MzsJcGZ2Zi0mZ3Q7b2xkX21xX3NuYXAgPSBwZnZmLSZndDtjdXJfbXFfc25hcDsKJiM0MzsJcGZ2Zi0mZ3Q7Y3VyX21xX3NuYXAgPSBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgPSBmYWxzZTsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSA9IGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CXJldHVybiBwZnZmLSZndDtody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfTURRXSAhPSAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKnNuYXAgPSBwZnZmLSZndDtvbGRfbXFfc25hcDsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtJmd0O25ldGRldjsKJiM0MzsJdTE2IG51bV90eHEgPSBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlczsKJiM0MzsJaW50IHRjLCB0eHEsIGVycjsKJiM0MzsKJiM0MzsJaWYgKCFzbmFwKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYsIGZhbHNlKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CW1lbXNldChwZnZmLSZndDttcXByaW8ubWluX3JhdGUsIDAsIG51bV90eHEgKiBzaXplb2YoKnBmdmYtJmd0O21xcHJpby5taW5fcmF0ZSkpOwomIzQzOwltZW1zZXQocGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlLCAwLCBudW1fdHhxICogc2l6ZW9mKCpwZnZmLSZndDttcXByaW8ubWF4X3JhdGUpKTsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLmZsYWdzID0gMDsKJiM0MzsKJiM0MzsJZm9yICh0YyA9IDA7IHRjICZsdDsgc25hcC0mZ3Q7bnVtX3RjOyB0YyYjNDM7JiM0MzspIHsKJiM0MzsJCXU2NCBtaW5fcmF0ZSA9IHNuYXAtJmd0O21pbl9yYXRlW3RjXTsKJiM0MzsJCXU2NCBtYXhfcmF0ZSA9IHNuYXAtJmd0O21heF9yYXRlW3RjXTsKJiM0MzsKJiM0MzsJCWlmIChtaW5fcmF0ZSkKJiM0MzsJCQlwZnZmLSZndDttcXByaW8uZmxhZ3MgfD0gVENfTVFQUklPX0ZfTUlOX1JBVEU7CiYjNDM7CQlpZiAobWF4X3JhdGUpCiYjNDM7CQkJcGZ2Zi0mZ3Q7bXFwcmlvLmZsYWdzIHw9IFRDX01RUFJJT19GX01BWF9SQVRFOwomIzQzOwomIzQzOwkJZm9yICh0eHEgPSBzbmFwLSZndDtvZmZzZXRbdGNdOwomIzQzOwkJICAgICB0eHEgJmx0OyBzbmFwLSZndDtvZmZzZXRbdGNdICYjNDM7IHNuYXAtJmd0O2NvdW50W3RjXTsgdHhxJiM0MzsmIzQzOykgewomIzQzOwkJCXBmdmYtJmd0O21xcHJpby5taW5fcmF0ZVt0eHFdID0gbWluX3JhdGU7CiYjNDM7CQkJcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlW3R4cV0gPSBtYXhfcmF0ZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwluZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHNuYXAtJmd0O251bV90Yyk7CiYjNDM7CWZvciAodGMgPSAwOyB0YyAmbHQ7IHNuYXAtJmd0O251bV90YzsgdGMmIzQzOyYjNDM7KQomIzQzOwkJbmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIHRjLCBzbmFwLSZndDtjb3VudFt0Y10sCiYjNDM7CQkJCSAgICBzbmFwLSZndDtvZmZzZXRbdGNdKTsKJiM0MzsKJiM0MzsJaWYgKG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpIHsKJiM0MzsJCWVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldigpIGNsZWFycyByYXRlX2xpbWl0IHdoZW4gbmRvX29wZW4oKSBmYWlscy4gKi8KJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQgPSB0cnVlOwomIzQzOwomIzQzOwllcnIgPSBvdHgyX21xcHJpb191cChwZnZmKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CW90eDJfbXFwcmlvX3NuYXBfZnJlZShwZnZmLCAmYW1wO3BmdmYtJmd0O2N1cl9tcV9zbmFwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfZGVzdHJveShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgJmFtcDtwZnZmLSZndDtjdXJfbXFfc25hcCk7CiYjNDM7CW90eDJfbXFwcmlvX3NuYXBfZnJlZShwZnZmLCAmYW1wO3BmdmYtJmd0O29sZF9tcV9zbmFwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fY2xlYXJfc3coc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtJmd0O25ldGRldjsKJiM0MzsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQgPSBmYWxzZTsKJiM0MzsJb3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShwZnZmKTsKJiM0MzsJbmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCAwKTsKJiM0MzsJb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVGVhciBkb3duIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZDogY2xlYXIgcGVyLXF1ZXVlIHNoYXBlcnMsCiYjNDM7ICogbXFwcmlvX3JhdGVfbGltaXQsIG5ldGRldiBUQyBtYXBwaW5ncywgYW5kIHRoZSBjYWNoZWQgcmF0ZXMuICBDYWxsZWQgb24KJiM0MzsgKiBleHBsaWNpdCBtcXByaW8gdGVhcmRvd24gKHRjIHFkaXNjIGRlbCkgYW5kIGVycm9yIGNsZWFudXAsIG5vdCBvbgomIzQzOyAqIHJvdXRpbmUgbmV0ZGV2IHN0b3Avb3BlbiBjeWNsZXMgd2hlcmUgdGhlIG9mZmxvYWQgc3RheXMgYWN0aXZlLgomIzQzOyAqLwomIzQzO2ludCBvdHgyX21xcHJpb19kb3duKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwomIzQzOwlpZiAoIXBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChuZXRpZl9ydW5uaW5nKHBmdmYtJmd0O25ldGRldikgJmFtcDsmYW1wOwomIzQzOwkgICAgb3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChwZnZmKSkKJiM0MzsJCWVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTsKJiM0MzsKJiM0MzsJb3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7CiYjNDM7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCW5ldGRldl9lcnIocGZ2Zi0mZ3Q7bmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7bXFwcmlvOiBmYWlsZWQgdG8gY2xlYXIgaGFyZHdhcmUgc2hhcGVyczogJWQ7IHNvbWUgVFggcXVldWVzIG1heSByZXRhaW4gYmFuZHdpZHRoIGxpbWl0c1xuJiMzNDssCiYjNDM7CQkJICAgZXJyKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtJmd0O25ldGRldjsKJiM0MzsJaW50IHR4cSwgZXJyOwomIzQzOwomIzQzOwlpZiAoIXBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmICghcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlIHx8ICFwZnZmLSZndDttcXByaW8ubWF4X3JhdGUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZm9yICh0eHEgPSAwOyB0eHEgJmx0OyBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlczsgdHhxJiM0MzsmIzQzOykgewomIzQzOwkJdTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwOwomIzQzOwomIzQzOwkJaWYgKHBmdmYtJmd0O21xcHJpby5mbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NSU5fUkFURSkKJiM0MzsJCQltaW5fcmF0ZSA9IHBmdmYtJmd0O21xcHJpby5taW5fcmF0ZVt0eHFdOwomIzQzOwkJaWYgKHBmdmYtJmd0O21xcHJpby5mbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NQVhfUkFURSkKJiM0MzsJCQltYXhfcmF0ZSA9IHBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZVt0eHFdOwomIzQzOwomIzQzOwkJaWYgKCFtaW5fcmF0ZSAmYW1wOyZhbXA7ICFtYXhfcmF0ZSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLCBtaW5fcmF0ZSwKJiM0MzsJCQkJCQkgICBtYXhfcmF0ZSk7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBmYWlsZWQgdG8gcmVzdG9yZSBzaGFwZXIgZm9yIHR4cSAlZDogJWRcbiYjMzQ7LAomIzQzOwkJCQkgICB0eHEsIGVycik7CiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUmVzdGFydCB0aGUgbmV0ZGV2IHRvIHJlcHJvZ3JhbSB0aGUgVFggc2NoZWR1bGVyIGhpZXJhcmNoeSBmb3IgbXFwcmlvCiYjNDM7ICogYmFuZHdpZHRoIG9mZmxvYWQuICBCb3RoIG1xcHJpbyBhZGQgYW5kIGRlbGV0ZSAod2hlbiBvZmZsb2FkIHdhcyBhY3RpdmUpCiYjNDM7ICogdGFrZSB0aGlzIHBhdGggdmlhIG5kb19zdG9wKCkvbmRvX29wZW4oKSBzbyBWRi1zcGVjaWZpYyBvcGVuIGxvZ2ljIChlLmcuCiYjNDM7ICogTEJLIGNhcnJpZXIgb24pIHJ1bnMgY29ycmVjdGx5LiAgVGhlIGZ1bGwgc3RvcC9vcGVuIGN5Y2xlIGNsZWFycwomIzQzOyAqIGNhcnJpZXIsIHN0b3BzIGFsbCBUWCBxdWV1ZXMsIHRlYXJzIGRvd24gSVJRcy9OQVBJIGFuZCBkcm9wcyBpbi1mbGlnaHQKJiM0MzsgKiB0cmFmZmljLiAgSWYgb3BlbiBmYWlscywgdGhlIGludGVyZmFjZSBpcyBsZWZ0IGFkbWluaXN0cmF0aXZlbHkgZG93bgomIzQzOyAqIHdpdGhvdXQgY2FsbGluZyBuZG9fc3RvcCgpIGFnYWluIG9uIHJlc291cmNlcyBhbHJlYWR5IHRvcm4gZG93biBieQomIzQzOyAqIHRoZSBvcGVuIGVycm9yIHBhdGguCiYjNDM7ICoKJiM0MzsgKiBEbyBub3QgY2FsbCBkZXZfZGVhY3RpdmF0ZSgpL2Rldl9hY3RpdmF0ZSgpIGhlcmU6IHRoaXMgcnVucyBmcm9tCiYjNDM7ICogbmRvX3NldHVwX3RjKCkgd2hpbGUgcWRpc2NfZ3JhZnQoKSBtYXkgYWxyZWFkeSBob2xkIHRoZSBkZXZpY2UKJiM0MzsgKiBkZWFjdGl2YXRlZCBhbmQgbXVzdCBwZXJmb3JtIHRoZSBmaW5hbCBkZXZfYWN0aXZhdGUoKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmF0ZV9saW1pdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gbmV0ZGV2LSZndDtuZXRkZXZfb3BzOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwkvKiBUT0RPOiBFeHBsb3JlIGxpdmUgVFggc2NoZWR1bGVyIHJlcHJvZ3JhbW1pbmcgdG8gYXZvaWQgYSBmdWxsCiYjNDM7CSAqIG5kb19zdG9wKCkvbmRvX29wZW4oKSBib3VuY2Ugb24gZXZlcnkgbXFwcmlvIGNoYW5nZS4KJiM0MzsJICovCiYjNDM7CW5ldGRldl9pbmZvKG5ldGRldiwKJiM0MzsJCSAgICAmIzM0O21xcHJpbzogcmVzdGFydGluZyBpbnRlcmZhY2UgdG8gcmVwcm9ncmFtIFRYIHNjaGVkdWxlcjsgaW4tZmxpZ2h0IHRyYWZmaWMgd2lsbCBiZSBkcm9wcGVkXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IG9wcy0mZ3Q7bmRvX3N0b3AobmV0ZGV2KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CS8qIFNldCBiZWZvcmUgbmRvX29wZW4oKSBzbyBvdHgyX3R4c2NoX2FsbG9jKCkgd2lkZW5zIFNNUSBhbGxvY2F0aW9uLgomIzQzOwkgKiBPbiB0ZWFyZG93biwgZHJvcCBtcXByaW8gc29mdHdhcmUgc3RhdGUgc28gbmRvX29wZW4oKSBkb2VzIG5vdAomIzQzOwkgKiByZS1hcHBseSBiYW5kd2lkdGggbGltaXRzIHZpYSBvdHgyX21xcHJpb191cCgpIGFmdGVyIHRoZSBrZXJuZWwKJiM0MzsJICogcmVtb3ZlZCB0aGUgcWRpc2MuCiYjNDM7CSAqLwomIzQzOwlpZiAocmF0ZV9saW1pdCkKJiM0MzsJCXBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0ID0gdHJ1ZTsKJiM0MzsJZWxzZQomIzQzOwkJb3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7CiYjNDM7CiYjNDM7CWVyciA9IG9wcy0mZ3Q7bmRvX29wZW4obmV0ZGV2KTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDtGYWlsZWQgdG8gcmVzdGFydCBkZXZpY2UgYWZ0ZXIgbXFwcmlvIGNoYW5nZTogJWRcbiYjMzQ7LAomIzQzOwkJCSAgIGVycik7CiYjNDM7CQkvKiBuZG9fb3BlbigpIGFscmVhZHkgZnJlZWQgdGhlIFRYIHNjaGVkdWxlcnMgb24gZmFpbHVyZSB3aGlsZQomIzQzOwkJICogbmV0aWZfcnVubmluZygpIG1heSBzdGlsbCBiZSB0cnVlOyBkcm9wIG1xcHJpbyBzb2Z0d2FyZSBzdGF0ZQomIzQzOwkJICogb25seSBpbnN0ZWFkIG9mIHNlbmRpbmcgc2hhcGVyIGNsZWFycyB0byBmcmVlZCBxdWV1ZXMuCiYjNDM7CQkgKi8KJiM0MzsJCW90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpOwomIzQzOwkJLyogbmRvX29wZW4oKSByb2xscyBiYWNrIG9uIGZhaWx1cmU7IG1hcmsgdGhlIGludGVyZmFjZSBkb3duIHNvCiYjNDM7CQkgKiBuZXRpZl9jbG9zZSgpIGRvZXMgbm90IGludm9rZSBuZG9fc3RvcCgpIG9uIGZyZWVkIE5BUEkvcXVldWUKJiM0MzsJCSAqIHN0YXRlLiBDYWxsZXIgaG9sZHMgUlROTDsgZGV2X2Nsb3NlKCkgd291bGQgZGVhZGxvY2suCiYjNDM7CQkgKi8KJiM0MzsJCXBmdmYtJmd0O2ZsYWdzIHw9IE9UWDJfRkxBR19JTlRGX0RPV047CiYjNDM7CQkvKiB2aXNpYmxlIHRvIG90eDJfc3RvcCgpIG9uIG90aGVyIGNwdXMgKi8KJiM0MzsJCXNtcF93bWIoKTsKJiM0MzsJCW5ldGlmX2Nsb3NlKG5ldGRldik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCQlzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssCiYjNDM7CQkJCQl1NjQgcmF0ZSwgdTMyIHFjb3VudCwgaW50IHRjLAomIzQzOwkJCQkJY29uc3QgY2hhciAqbmFtZSkKJiM0Mzt7CiYjNDM7CWlmICghcmF0ZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAocWNvdW50ICZsdDs9IDEpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyogVE9ETzogbXFwcmlvIG1pbl9yYXRlL21heF9yYXRlIGFyZSBwZXIgdHJhZmZpYyBjbGFzcywgYnV0IGJhbmR3aWR0aAomIzQzOwkgKiBvZmZsb2FkIHNoYXBlcyBvbiBwZXItcXVldWUgTURRIG5vZGVzIHBhcmVudGVkIHVuZGVyIGEgc2luZ2xlIFRMNC4KJiM0MzsJICogV2l0aG91dCBwZXItVEMgVEw0IHNoYXBlcnMgdGhlIGRyaXZlciBjYW5ub3QgaG9ub3IgVEMtbGV2ZWwgbGltaXRzCiYjNDM7CSAqIGZvciBhIHRyYWZmaWMgY2xhc3MgdGhhdCBzcGFucyBtdWx0aXBsZSBxdWV1ZXMgd2l0aG91dCBlaXRoZXIKJiM0MzsJICogZGl2aWRpbmcgdGhlIHJhdGUgYWNyb3NzIHF1ZXVlcyAodUFQSSBtaXNtYXRjaCkgb3IgZXhjZWVkaW5nIHRoZSBUQwomIzQzOwkgKiBjYXAgd2hlbiBldmVyeSBtZW1iZXIgcXVldWUgaXMgYWN0aXZlLiBSZWplY3QgdW50aWwgcGVyLVRDIFRMNAomIzQzOwkgKiBzaGFwaW5nIGNhbiBiZSBpbXBsZW1lbnRlZCB3aXRob3V0IGFsbG9jYXRpbmcgYWRkaXRpb25hbCBUTDQgbm9kZXMKJiM0MzsJICogYmV5b25kIHRoZSBleGlzdGluZyBoaWVyYXJjaHkuCiYjNDM7CSAqLwomIzQzOwluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCSAgICYjMzQ7bXFwcmlvOiAlcyByYXRlIGZvciB0YyAlZCBub3Qgc3VwcG9ydGVkIHdpdGggJXUgcXVldWVzXG4mIzM0OywKJiM0MzsJCSAgIG5hbWUsIHRjLCBxY291bnQpOwomIzQzOwlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywKJiM0MzsJCQkgICAgICAgJiMzNDttcXByaW86ICVzIHJhdGUgZm9yIHRjICVkIG5vdCBzdXBwb3J0ZWQgd2l0aCAldSBxdWV1ZXMmIzM0OywKJiM0MzsJCQkgICAgICAgbmFtZSwgdGMsIHFjb3VudCk7CiYjNDM7CXJldHVybiAtRU9QTk9UU1VQUDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb192YWxpZGF0ZV90eHFzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCSAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLAomIzQzOwkJCQkgICAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CXUxNiBudW1fdHhxID0gcGZ2Zi0mZ3Q7aHcubm9uX3Fvc19xdWV1ZXM7CiYjNDM7CWludCB0YywgdHhxOwomIzQzOwomIzQzOwlpZiAocW9wdC0mZ3Q7bnVtX3RjICZndDsgbnVtX3R4cSkgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsICYjMzQ7TnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1XG4mIzM0OywKJiM0MzsJCQkgICBxb3B0LSZndDtudW1fdGMsIG51bV90eHEpOwomIzQzOwkJTkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICAgICAmIzM0O051bWJlciBvZiBUQ3MgKCV1KSBleGNlZWRzIGh3IHF1ZXVlcyAldSYjMzQ7LAomIzQzOwkJCQkgICAgICAgcW9wdC0mZ3Q7bnVtX3RjLCBudW1fdHhxKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChudW1fdHhxICZndDsgTUFYX1RYU0NIUV9QRVJfRlVOQykgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDtOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldVxuJiMzNDssCiYjNDM7CQkJICAgbnVtX3R4cSwgTUFYX1RYU0NIUV9QRVJfRlVOQyk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywKJiM0MzsJCQkJICAgICAgICYjMzQ7TnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXUmIzM0OywKJiM0MzsJCQkJICAgICAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yICh0YyA9IDA7IHRjICZsdDsgcW9wdC0mZ3Q7bnVtX3RjOyB0YyYjNDM7JiM0MzspIHsKJiM0MzsJCXUzMiBxY291bnQgPSBxb3B0LSZndDtjb3VudFt0Y107CiYjNDM7CiYjNDM7CQlmb3IgKHR4cSA9IHFvcHQtJmd0O29mZnNldFt0Y107CiYjNDM7CQkgICAgIHR4cSAmbHQ7IHFvcHQtJmd0O29mZnNldFt0Y10gJiM0MzsgcWNvdW50OyB0eHEmIzQzOyYjNDM7KSB7CiYjNDM7CQkJaWYgKHR4cSAmZ3Q7PSBudW1fdHhxKSB7CiYjNDM7CQkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkJICAgJiMzNDttcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXVcbiYjMzQ7LAomIzQzOwkJCQkJICAgdHhxLCBudW1fdHhxKTsKJiM0MzsJCQkJTkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssCiYjNDM7CQkJCQkJICAgICAgICYjMzQ7bXFwcmlvOiB0eHEgJWQgZXhjZWVkcyBvZmZsb2FkIHF1ZXVlIGNvdW50ICV1JiMzNDssCiYjNDM7CQkJCQkJICAgICAgIHR4cSwgbnVtX3R4cSk7CiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgb3R4Ml9tcXByaW9fcmF0ZV92YWxpZCh1NjQgcmF0ZV9ieXRlc19wcykKJiM0Mzt7CiYjNDM7CXU2NCBtYnBzOwomIzQzOwomIzQzOwlpZiAoIXJhdGVfYnl0ZXNfcHMpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJaWYgKHJhdGVfYnl0ZXNfcHMgJmx0OyBPVFgyX01RUFJJT19NSU5fUkFURV9CWVRFU19QUykKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKHJhdGVfYnl0ZXNfcHMgJmd0OyBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QUykKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKHJhdGVfYnl0ZXNfcHMgJmd0OyBkaXZfdTY0KFU2NF9NQVgsIDgpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwltYnBzID0gb3R4Ml9jb252ZXJ0X3JhdGUocmF0ZV9ieXRlc19wcyk7CiYjNDM7CXJldHVybiBpbG9nMihtYnBzIC8gMikgJmx0Oz0gTUFYX1JBVEVfRVhQT05FTlQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml90ZWFyZG93bl90Y19tcXByaW8oc3RydWN0IG90eDJfbmljICpwZnZmLAomIzQzOwkJCQkgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKQomIzQzO3sKJiM0MzsJc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gJmFtcDttcXByaW8tJmd0O3FvcHQ7CiYjNDM7CWJvb2wgaGFkX21xcHJpbyA9IHBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0OwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi0mZ3Q7bmV0ZGV2OwomIzQzOwlib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlxb3B0LSZndDtodyA9IDA7CiYjNDM7CiYjNDM7CS8qIHRjIHFkaXNjIHJlcGxhY2UgcnVucyBzZXR1cCBvbiB0aGUgbmV3IG1xcHJpbyBiZWZvcmUgZGVzdHJveWluZyB0aGUKJiM0MzsJICogb2xkIG9uZS4gcmVwbGFjZV9zZXR1cF9kb25lIGFuZCBUQ19ST09UX0dSQUZUIGRpc3Rpbmd1aXNoIHN0YWxlCiYjNDM7CSAqIG9sZC1pbnN0YW5jZSB0ZWFyZG93biBmcm9tIGdyYWZ0IGZhaWx1cmUgYWZ0ZXIgc2V0dXAuCiYjNDM7CSAqLwomIzQzOwlpZiAocGZ2Zi0mZ3Q7bXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSAmYW1wOyZhbXA7IHBmdmYtJmd0O2N1cl9tcV9zbmFwKSB7CiYjNDM7CQllcnIgPSAwOwomIzQzOwkJaWYgKHBmdmYtJmd0O21xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUpCiYjNDM7CQkJb3R4Ml9tcXByaW9fc25hcF9jb21taXQocGZ2Zik7CiYjNDM7CQllbHNlCiYjNDM7CQkJZXJyID0gb3R4Ml9tcXByaW9fcmVzdG9yZV9vbGQocGZ2Zik7CiYjNDM7CQlvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHBmdmYpOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTa2lwIHRoZSBuZXRkZXYgcmVzdGFydCB3aGVuIG1xcHJpbyBvZmZsb2FkIHdhcyBub3QgYWN0aXZlLiAqLwomIzQzOwlpZiAoIWhhZF9tcXByaW8pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKGlmX3VwKSB7CiYjNDM7CQlpbnQgZG93bl9lcnIsIGVycjsKJiM0MzsKJiM0MzsJCWRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTsKJiM0MzsJCWVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KG5ldGRldiwgZmFsc2UpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJcmV0dXJuIGRvd25fZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIG5kb19zdG9wKCkgYWxyZWFkeSBmcmVlZCB0aGUgVFggc2NoZWR1bGVyIFRMIG5vZGVzOyBkcm9wIHNvZnR3YXJlCiYjNDM7CSAqIHN0YXRlIG9ubHkuCiYjNDM7CSAqLwomIzQzOwlvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkJc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IG1xcHJpby0mZ3Q7ZXh0YWNrOwomIzQzOwlzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSAmYW1wO21xcHJpby0mZ3Q7cW9wdDsKJiM0MzsJYm9vbCByZXBsYWNpbmcgPSBwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdDsKJiM0MzsJYm9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTsKJiM0MzsJaW50IHRjLCB0eHEsIGVyciwgaTsKJiM0MzsKJiM0MzsJaWYgKCFxb3B0LSZndDtodykKJiM0MzsJCXJldHVybiBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhwZnZmLCBtcXByaW8pOwomIzQzOwomIzQzOwlpZiAoIWlmX3VwKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDttcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFxuJiMzNDspOwomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgJiMzNDttcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUCYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobXFwcmlvLSZndDtzaGFwZXIgIT0gVENfTVFQUklPX1NIQVBFUl9CV19SQVRFKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxuJiMzNDssIG1xcHJpby0mZ3Q7c2hhcGVyKTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLCAmIzM0O1Vuc3VwcG9ydGVkIG1xcHJpbyBzaGFwZXIgJSN4JiMzNDssCiYjNDM7CQkJCSAgICAgICBtcXByaW8tJmd0O3NoYXBlcik7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCAmYW1wO3BmdmYtJmd0O2h3LmNhcF9mbGFnKSkgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUiYjNDM7UElSIHN1cHBvcnRcbiYjMzQ7KTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCByZXF1aXJlcyBDSVImIzQzO1BJUiBzdXBwb3J0JiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChpc19vdHgyX3NkcF9yZXAocGZ2Zi0mZ3Q7cGRldikpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LCAmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwXG4mIzM0Oyk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChwZnZmLSZndDtwZmNfZW4pIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcbiYjMzQ7KTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWQmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHBmdmYtJmd0O3hkcF9wcm9nKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkgICAmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmVcbiYjMzQ7KTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgWERQIGlzIGFjdGl2ZSYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKHRjID0gMDsgdGMgJmx0OyBxb3B0LSZndDtudW1fdGM7IHRjJiM0MzsmIzQzOykgewomIzQzOwkJdTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwOwomIzQzOwkJdTMyIHFjb3VudCA9IHFvcHQtJmd0O2NvdW50W3RjXTsKJiM0MzsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01JTl9SQVRFKQomIzQzOwkJCW1pbl9yYXRlID0gbXFwcmlvLSZndDttaW5fcmF0ZVt0Y107CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NQVhfUkFURSkKJiM0MzsJCQltYXhfcmF0ZSA9IG1xcHJpby0mZ3Q7bWF4X3JhdGVbdGNdOwomIzQzOwomIzQzOwkJaWYgKG1pbl9yYXRlICZhbXA7JmFtcDsgbWF4X3JhdGUgJmFtcDsmYW1wOyBtaW5fcmF0ZSAmZ3Q7IG1heF9yYXRlKSB7CiYjNDM7CQkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7bWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXG4mIzM0OywKJiM0MzsJCQkJICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7CiYjNDM7CQkJTkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssCiYjNDM7CQkJCQkgICAgICAgJiMzNDttaW5fcmF0ZSAlbGx1IGV4Y2VlZHMgbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQmIzM0OywKJiM0MzsJCQkJCSAgICAgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01JTl9SQVRFKSB7CiYjNDM7CQkJZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShuZXRkZXYsIGV4dGFjaywgbWluX3JhdGUsCiYjNDM7CQkJCQkJCSAgIHFjb3VudCwgdGMsICYjMzQ7bWluJiMzNDspOwomIzQzOwkJCWlmIChlcnIpCiYjNDM7CQkJCXJldHVybiBlcnI7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NQVhfUkFURSkgewomIzQzOwkJCWVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBleHRhY2ssIG1heF9yYXRlLAomIzQzOwkJCQkJCQkgICBxY291bnQsIHRjLCAmIzM0O21heCYjMzQ7KTsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUlOX1JBVEUgJmFtcDsmYW1wOwomIzQzOwkJICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG1pbl9yYXRlKSkgewomIzQzOwkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcbiYjMzQ7LAomIzQzOwkJCQkgICBtaW5fcmF0ZSwgdGMpOwomIzQzOwkJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLAomIzQzOwkJCQkJICAgICAgICYjMzQ7bXFwcmlvOiBtaW5fcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0cyYjMzQ7LAomIzQzOwkJCQkJICAgICAgIG1pbl9yYXRlLCB0Yyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NQVhfUkFURSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIW90eDJfbXFwcmlvX3JhdGVfdmFsaWQobWF4X3JhdGUpKSB7CiYjNDM7CQkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0c1xuJiMzNDssCiYjNDM7CQkJCSAgIG1heF9yYXRlLCB0Yyk7CiYjNDM7CQkJTkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssCiYjNDM7CQkJCQkgICAgICAgJiMzNDttcXByaW86IG1heF9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzJiMzNDssCiYjNDM7CQkJCQkgICAgICAgbWF4X3JhdGUsIHRjKTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90eHFzKG5ldGRldiwgZXh0YWNrLCBxb3B0KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfbXFwcmlvX3N0YWdlX2N1cihwZnZmLCBtcXByaW8pOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYocGZ2Zi0mZ3Q7bmV0ZGV2LCB0cnVlKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJZXJyID0gb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUocGZ2ZiwgcmVwbGFjaW5nKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyogb3R4Ml9tcXByaW9fdXAoKSBtYXkgaGF2ZSByZXN0b3JlZCB0aGUgcHJldmlvdXMgY29uZmlndXJhdGlvbiBkdXJpbmcKJiM0MzsJICogdGhlIHJlc3RhcnQgYWJvdmUuIENsZWFyIGV2ZXJ5IE1EUSBzaGFwZXIgYmVmb3JlIGFwcGx5aW5nIHRoZSBuZXcKJiM0MzsJICogbWFwcGluZyBzbyBxdWV1ZXMgZHJvcHBlZCBmcm9tIHRoZSBUQyBsYXlvdXQgZG8gbm90IGtlZXAgc3RhbGUKJiM0MzsJICogbGltaXRzIGluIGhhcmR3YXJlLgomIzQzOwkgKi8KJiM0MzsJaWYgKG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpIHsKJiM0MzsJCWVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5mbGFncyA9IG1xcHJpby0mZ3Q7ZmxhZ3M7CiYjNDM7CiYjNDM7CWZvciAodGMgPSAwOyB0YyAmbHQ7IHFvcHQtJmd0O251bV90YzsgdGMmIzQzOyYjNDM7KSB7CiYjNDM7CQl1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7CiYjNDM7CQl1MzIgcWNvdW50ID0gcW9wdC0mZ3Q7Y291bnRbdGNdOwomIzQzOwomIzQzOwkJLyogUmF0ZXMgb21pdHRlZCBmcm9tIHRjIG1xcHJpbyBhcmUgcGFzc2VkIGFzIHplcm8gYW5kIGJvdGggTURRCiYjNDM7CQkgKiBzaGFwZXIgcmVnaXN0ZXJzIGFyZSBwcm9ncmFtbWVkOyBzZWUKJiM0MzsJCSAqIG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoKS4gTXVsdGktcXVldWUgVENzIHdpdGggcmF0ZXMKJiM0MzsJCSAqIGFyZSByZWplY3RlZCBhYm92ZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUlOX1JBVEUpCiYjNDM7CQkJbWluX3JhdGUgPSBtcXByaW8tJmd0O21pbl9yYXRlW3RjXTsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01BWF9SQVRFKQomIzQzOwkJCW1heF9yYXRlID0gbXFwcmlvLSZndDttYXhfcmF0ZVt0Y107CiYjNDM7CiYjNDM7CQlmb3IgKHR4cSA9IHFvcHQtJmd0O29mZnNldFt0Y107CiYjNDM7CQkgICAgIHR4cSAmbHQ7IHFvcHQtJmd0O29mZnNldFt0Y10gJiM0MzsgcWNvdW50OyB0eHEmIzQzOyYjNDM7KSB7CiYjNDM7CQkJbmV0ZGV2X2RiZyhuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiB0YyAlZCB0eHEgJWQgbWluX3JhdGUgJWxsdSBtYXhfcmF0ZSAlbGx1XG4mIzM0OywKJiM0MzsJCQkJICAgdGMsIHR4cSwgbWluX3JhdGUsIG1heF9yYXRlKTsKJiM0MzsKJiM0MzsJCQlwZnZmLSZndDttcXByaW8ubWluX3JhdGVbdHhxXSA9IG1pbl9yYXRlOwomIzQzOwkJCXBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7CiYjNDM7CiYjNDM7CQkJZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsCiYjNDM7CQkJCQkJCSAgIG1pbl9yYXRlLCBtYXhfcmF0ZSk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJZ290byBjbGVhbnVwOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CW5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgcGZ2Zi0mZ3Q7Y3VyX21xX3NuYXAtJmd0O251bV90Yyk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBwZnZmLSZndDtjdXJfbXFfc25hcC0mZ3Q7bnVtX3RjOyBpJiM0MzsmIzQzOykKJiM0MzsJCW5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCBpLCBwZnZmLSZndDtjdXJfbXFfc25hcC0mZ3Q7Y291bnRbaV0sCiYjNDM7CQkJCSAgICBxb3B0LSZndDtvZmZzZXRbaV0pOwomIzQzOwomIzQzOwlxb3B0LSZndDtodyA9IFRDX01RUFJJT19IV19PRkZMT0FEX1RDUzsKJiM0MzsKJiM0MzsJaWYgKHJlcGxhY2luZykgewomIzQzOwkJcGZ2Zi0mZ3Q7bXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSA9IHRydWU7CiYjNDM7CQlwZnZmLSZndDttcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lID0gZmFsc2U7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlvdHgyX21xcHJpb19zbmFwX2NvbW1pdChwZnZmKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztjbGVhbnVwOgomIzQzOwlxb3B0LSZndDtodyA9IDA7CiYjNDM7CWlmIChyZXBsYWNpbmcpIHsKJiM0MzsJCWludCByZXN0b3JlX2VyciA9IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHBmdmYpOwomIzQzOwomIzQzOwkJb3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShwZnZmKTsKJiM0MzsJCWlmIChyZXN0b3JlX2VycikgewomIzQzOwkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogcmVwbGFjZSBmYWlsZWQgYW5kIHByaW9yIGNvbmZpZ3VyYXRpb24gcm9sbGJhY2sgZmFpbGVkOiAlZFxuJiMzNDssCiYjNDM7CQkJCSAgIHJlc3RvcmVfZXJyKTsKJiM0MzsJCQlpZiAoZXh0YWNrKQomIzQzOwkJCQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywKJiM0MzsJCQkJCQkgICAgICAgJiMzNDttcXByaW86IHJlcGxhY2UgZmFpbGVkIGFuZCBwcmlvciBjb25maWd1cmF0aW9uIHJvbGxiYWNrIGZhaWxlZDogJWQmIzM0OywKJiM0MzsJCQkJCQkgICAgICAgcmVzdG9yZV9lcnIpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IHJlcGxhY2UgZmFpbGVkOyBwcmlvciBjb25maWd1cmF0aW9uIHJlc3RvcmVkXG4mIzM0Oyk7CiYjNDM7CQkJaWYgKGV4dGFjaykKJiM0MzsJCQkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJCQkgICAmIzM0O21xcHJpbzogcmVwbGFjZSBmYWlsZWQ7IHByaW9yIGNvbmZpZ3VyYXRpb24gcmVzdG9yZWQmIzM0Oyk7CiYjNDM7CQl9CiYjNDM7CQlyZXR1cm4gZXJyID8gZXJyIDogLUVJTzsKJiM0MzsJfQomIzQzOwlvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhwZnZmLCBtcXByaW8pOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfcm9vdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsCiYjNDM7CQkJICAgICAgc3RydWN0IHRjX3Jvb3RfcW9wdF9vZmZsb2FkICpyb290KQomIzQzO3sKJiM0MzsJc3dpdGNoIChyb290LSZndDtjb21tYW5kKSB7CiYjNDM7CWNhc2UgVENfUk9PVF9HUkFGVDoKJiM0MzsJCWlmIChwZnZmLSZndDttcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lKQomIzQzOwkJCXBmdmYtJmd0O21xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSB0cnVlOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX3NldHVwX3RjX3F1ZXJ5X2NhcHModm9pZCAqdHlwZV9kYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHRjX3F1ZXJ5X2NhcHNfYmFzZSAqYmFzZSA9IHR5cGVfZGF0YTsKJiM0MzsJc3RydWN0IHRjX21xcHJpb19jYXBzICpjYXBzOwomIzQzOwomIzQzOwlpZiAoYmFzZS0mZ3Q7dHlwZSAhPSBUQ19TRVRVUF9RRElTQ19NUVBSSU8pCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWNhcHMgPSBiYXNlLSZndDtjYXBzOwomIzQzOwljYXBzLSZndDt2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBpbnQgb3R4Ml9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSwKIAkJICB2b2lkICp0eXBlX2RhdGEpCiB7CiAJc3dpdGNoICh0eXBlKSB7CiYjNDM7CWNhc2UgVENfUVVFUllfQ0FQUzoKJiM0MzsJCXJldHVybiBvdHgyX3NldHVwX3RjX3F1ZXJ5X2NhcHModHlwZV9kYXRhKTsKIAljYXNlIFRDX1NFVFVQX0JMT0NLOgogCQlyZXR1cm4gb3R4Ml9zZXR1cF90Y19ibG9jayhuZXRkZXYsIHR5cGVfZGF0YSk7CiAJY2FzZSBUQ19TRVRVUF9RRElTQ19IVEI6CiAJCXJldHVybiBvdHgyX3NldHVwX3RjX2h0YihuZXRkZXYsIHR5cGVfZGF0YSk7CiYjNDM7CWNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOgomIzQzOwkJcmV0dXJuIG90eDJfc2V0dXBfdGNfbXFwcmlvKG5ldGRldiwgdHlwZV9kYXRhKTsKJiM0MzsJY2FzZSBUQ19TRVRVUF9ST09UX1FESVNDOgomIzQzOwkJcmV0dXJuIG90eDJfc2V0dXBfdGNfcm9vdChuZXRkZXZfcHJpdihuZXRkZXYpLCB0eXBlX2RhdGEpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CkBAIC0xNjMyLDYgJiM0MzsyMzM2LDcgQEAgRVhQT1JUX1NZTUJPTChvdHgyX2luaXRfdGMpOwogdm9pZCBvdHgyX3NodXRkb3duX3RjKHN0cnVjdCBvdHgyX25pYyAqbmljKQogewogCW90eDJfZGVzdHJveV90Y19mbG93X2xpc3QobmljKTsKJiM0MzsJb3R4Ml9tcXByaW9fc25hcF9kZXN0cm95KG5pYyk7CiB9CiBFWFBPUlRfU1lNQk9MKG90eDJfc2h1dGRvd25fdGMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMKaW5kZXggNjljMDkxMWUyOGU5MS4uZDlhZjE4MmU1NzIxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYwpAQCAtMTE4LDYgJiM0MzsxMTgsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2NvbmZpZ19zY2hlZF9zaGFwaW5nKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKIAkvKiBjb25maWd1cmUgUElSICovCiAJbWF4cmF0ZSA9IChub2RlLSZndDtyYXRlICZndDsgbm9kZS0mZ3Q7Y2VpbCkgPyBub2RlLSZndDtyYXRlIDogbm9kZS0mZ3Q7Y2VpbDsKIAomIzQzOwkvKiA2NTUzNiBpcyB0aGUga2VybmVsLXNpZGUgZGVmYXVsdCBidXJzdCB3aGVuIEhUQiBkb2VzIG5vdCBzdXBwbHkgYW4KJiM0MzsJICogZXhwbGljaXQgdmFsdWUsIG5vdCB0aGUgTklYIGhhcmR3YXJlIG1heGltdW0gKENOMTBLX01BWF9CVVJTVF9TSVpFKS4KJiM0MzsJICovCiAJY2ZnLSZndDtyZWd2YWxbKm51bV9yZWdzXSA9CiAJCW90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCBtYXhyYXRlLCA2NTUzNik7CiAJKCpudW1fcmVncykmIzQzOyYjNDM7Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzUwMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhpcyBQYXRjaCBTZXJpZXMgZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBzZXJpZXMgYW5kIHNlZSBpZiBpdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlIGZvciBzb21lIHN5emthbGxlciBmdXp6aW5nLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBjaGVja2luZyBpcyB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSDigJMgbG9va3MgbGlrZSBpdCYjMzk7cyBhbWQ2NC4gR29vZCwgdGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQgZW5vdWdoIHRvIHdvcmsgd2l0aC4KCk5vdywgdGhlIGZpbGVzIHRoYXQgd2VyZSBtb2RpZmllZCwgdGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nOgoqICAgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY2AKKiAgIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY2AKKiAgIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaGAKKiAgIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jYAoqICAgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY2AKKiAgIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jYAoqICAgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNgCiogICBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jYAoKSG1tLCBsb29rcyBsaWtlIGEgbmV0d29ya2luZyBzdGFjayBkcml2ZXIgc3BlY2lmaWMgdG8gdGhlIGBvY3Rlb250eDJgIGhhcmR3YXJlLiBUaGF0IG1lYW5zIGl04oCZcyB2ZW5kb3Itc3BlY2lmaWMsIHdoaWNoIGlzIHByZWNpc2VseSB0aGUga2luZCBvZiBsb3ctaGFuZ2luZyBmcnVpdCB3ZSYjMzk7cmUgbG9va2luZyBmb3IsIHBvdGVudGlhbGx5LiBPY3Rlb24gVFgyIGlzIE1hcnZlbGwgaGFyZHdhcmUgKEFSTTY0IFNvQywgUENJZSBTbWFydE5JQywgQ045Sy9DTjEwSyBoYXJkd2FyZSkuCgpTbywgdGhlIG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIGZvciBgb2N0ZW9udHgyYC4gTGV04oCZcyBjb25maXJtIHRoYXQgaXQmIzM5O3MgY29uZmlndXJhYmxlIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25kaXRpb25zIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGlzLiBHcmVwcGluZyBvciBhIHF1aWNrIGZpbGUgcmVhZCB3aWxsIGdpdmUgbWUgdGhhdCBhbnN3ZXIgZmFzdC4gVGhpcyB0ZWxscyBtZSBpZiB0aGVyZSYjMzk7cyBhIGdvb2QgY2hhbmNlIG9mIGl0IGJlaW5nIHJlYWNoYWJsZSBieSBzeXprYWxsZXIuIElmIHNvLCB0aGlzIHNlcmllcyBsb29rcyB2ZXJ5IHByb21pc2luZyBpbmRlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7T0NURU9OVFgyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy01LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo2OmNvbmZpZyBPQ1RFT05UWDJfTUJPWFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy03LVx0dHJpc3RhdGVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6OTpjb25maWcgT0NURU9OVFgyX0FGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTEwLVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBPY3Rlb25UWDIgUlZVIEFkbWluIEZ1bmN0aW9uIGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzoxMTpcdHNlbGVjdCBPQ1RFT05UWDJfTUJPWFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0xMi1cdHNlbGVjdCBORVRfREVWTElOS1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc9MjI9Y29uZmlnIE5EQ19ESVNfRFlOQU1JQ19DQUNISU5HXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTIzLVx0Ym9vbCBcJiMzNDtEaXNhYmxlIGNhY2hpbmcgb2YgZHluYW1pYyBlbnRyaWVzIGluIE5EQ1wmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzoyNDpcdGRlcGVuZHMgb24gT0NURU9OVFgyX0FGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTI1LVx0ZGVmYXVsdCBuXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6MzE6Y29uZmlnIE9DVEVPTlRYMl9QRlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zMi1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgT2N0ZW9uVFgyIE5JQyBQaHlzaWNhbCBGdW5jdGlvbiBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6MzM6XHRzZWxlY3QgT0NURU9OVFgyX01CT1hcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMzQtXHRzZWxlY3QgTkVUX0RFVkxJTktcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTQ0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo0NTpjb25maWcgT0NURU9OVFgyX1ZGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTQ2LVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBPY3Rlb25UWDIgTklDIFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjQ3Olx0ZGVwZW5kcyBvbiBPQ1RFT05UWDJfUEZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNDgtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz01MT1jb25maWcgUlZVX0VTV0lUQ0hcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNTItXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIFJWVSBFLVN3aXRjaCBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjUzOlx0ZGVwZW5kcyBvbiBPQ1RFT05UWDJfUEZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNTQtXHRkZWZhdWx0IG1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9NYWtlZmlsZS01LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfT0NURU9OVFgyX01CT1gpICYjNDM7PSBhZi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX09DVEVPTlRYMl9BRikgJiM0Mzs9IGFmL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvTWFrZWZpbGU6ODpvYmotJChDT05GSUdfT0NURU9OVFgyX1BGKSAmIzQzOz0gbmljL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL01ha2VmaWxlPTY9Y2NmbGFncy15ICYjNDM7PSAtSSQoc3JjKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfT0NURU9OVFgyX01CT1gpICYjNDM7PSBydnVfbWJveC5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19PQ1RFT05UWDJfQUYpICYjNDM7PSBydnVfYWYub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvTWFrZWZpbGUtOS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guYz02Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgY2d4X2lkX3RhYmxlW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guYzo2NzpcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9DR1gpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guYy02OC1cdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9DTjEwS19SUE0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY2d4LmgtMTUtIC8qIFBDSSBkZXZpY2UgSURzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guaDoxNjojZGVmaW5lXHRQQ0lfREVWSURfT0NURU9OVFgyX0NHWFx0XHQweEEwNTlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5oLTE3LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYz0xNTQ9REVGSU5FX1NIT1dfQVRUUklCVVRFKG5wY19tY2FtX2xheW91dCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMTU1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jOjE1NjojZGVmaW5lIF9fT0NURU9OVFgyX0RFQlVHRlNfQVRUUklCVVRFX0ZPUFMoX19uYW1lKVx0XHRcdFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMTU3LXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIF9fbmFtZSAjIyBfZm9wcyA9IHtcdFx0XHRcXFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNjQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM6MTY1OiNkZWZpbmUgREVGSU5FX09DVEVPTlRYMl9ERUJVR0ZTX0FUVFJJQlVURV9XSVRIX1NJWkUoX19uYW1lLCBfX3NpemUpXHRcdFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMTY2LXN0YXRpYyBpbnQgX19uYW1lICMjIF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVx0XHRcXFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNzAtfVx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYzoxNzE6X19PQ1RFT05UWDJfREVCVUdGU19BVFRSSUJVVEVfRk9QUyhfX25hbWUpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMTcyLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYz0xODE9c3RhdGljIGludCBucGNfbWNhbV9kc3RhdHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnVudXNlZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMjQyLSNkZWZpbmUgVE9UQUxfU1ogKE1BWF9OVU1fQkFOS1MgKiBNQVhfTlVNX1NVQl9CQU5LUyAqIE1BWF9TVUJCQU5LX0RFUFRIICogNjQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM6MjQzOkRFRklORV9PQ1RFT05UWDJfREVCVUdGU19BVFRSSUJVVEVfV0lUSF9TSVpFKG5wY19tY2FtX2RzdGF0cywgVE9UQUxfU1opO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTI0NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYz0yNDU9c3RhdGljIGludCBucGNfbWNhbV9taXNtYXRjaF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0yODQtLyogXCYjMzQ7JXVcXHQlZFxcdCV1XFxuXCYjMzQ7IG5lZWRzIGxlc3MgdGhhbiA2NCBjaGFyYWN0ZXJzIHRvIHByaW50LiAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jOjI4NTpERUZJTkVfT0NURU9OVFgyX0RFQlVHRlNfQVRUUklCVVRFX1dJVEhfU0laRShucGNfbWNhbV9taXNtYXRjaCwgVE9UQUxfU1opO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTI4Ni1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy0yMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjIxOiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9QVFBcdFx0XHQweEEwMENcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTIyLSNkZWZpbmUgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85OHh4X1BUUFx0XHQweEIxMDBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy0yNy0jZGVmaW5lIFBDSV9TVUJTWVNfREVWSURfT0NUWDJfOTVYWE9fUFRQXHQweEI2MDBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjI4OiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9SU1RcdFx0XHQweEEwODVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTI5LSNkZWZpbmUgUENJX0RFVklEX0NOMTBLX1BUUFx0XHRcdDB4QTA5RVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jPTU4OT1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcHRwX2lkX3RhYmxlW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo1OTA6XHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5MS1cdFx0XHQgUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy01OTItXHRcdFx0IFBDSV9TVUJTWVNfREVWSURfT0NUWDJfOTh4eF9QVFApIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo1OTM6XHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5NC1cdFx0XHQgUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy01OTUtXHRcdFx0IFBDSV9TVUJTWVNfREVWSURfT0NUWDJfOTZYWF9QVFApIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo1OTY6XHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5Ny1cdFx0XHQgUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy01OTgtXHRcdFx0IFBDSV9TVUJTWVNfREVWSURfT0NUWDJfOTVYWF9QVFApIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo1OTk6XHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTYwMC1cdFx0XHQgUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy02MDEtXHRcdFx0IFBDSV9TVUJTWVNfREVWSURfT0NUWDJfOTVYWE5fUFRQKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM6NjAyOlx0eyBQQ0lfREVWSUNFX1NVQihQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9QVFAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy02MDMtXHRcdFx0IFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNjA0LVx0XHRcdCBQQ0lfU1VCU1lTX0RFVklEX09DVFgyXzk1TU1fUFRQKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM6NjA1Olx0eyBQQ0lfREVWSUNFX1NVQihQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9QVFAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy02MDYtXHRcdFx0IFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBydnVfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjQ1Olx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRikgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTQ2LVx0eyAwLCB9ICAvKiBlbmQgb2YgdGFibGUgKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYz05Mjc9c3RhdGljIHZvaWQgcnZ1X2dldF9sYmtfYnVmc2l6ZShzdHJ1Y3QgcnZ1ICpydnUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtOTMzLVx0cGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM6OTM0Olx0XHRcdCAgICAgIFBDSV9ERVZJRF9PQ1RFT05UWDJfTEJLLCBwZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTkzNS1cdGlmICghcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYz0zNDQ3PWludCBydnVfZ2V0X251bV9sYmtfY2hhbnModm9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNDUyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM6MzQ1MzpcdHBkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9MQkssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNDU0LVx0XHRcdCAgICAgIE5VTEwpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM0NzAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzozNDcxOiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUZWRlx0MHhBMEY4XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNDcyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM9MzQ3Mz1zdGF0aWMgaW50IHJ2dV9lbmFibGVfc3Jpb3Yoc3RydWN0IHJ2dSAqcnZ1KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM0OTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzozNDk1Olx0aWYgKHJ2dS1cdTAwM2V2Zl9kZXZpZCA9PSBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRlZGKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNDk2LVx0XHRjaGFucyA9IHJ2dV9nZXRfbnVtX2xia19jaGFucygpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5oLTIzLS8qIFBDSSBkZXZpY2UgSURzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuaDoyNDojZGVmaW5lXHRQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRlx0XHQweEEwNjVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5oOjI1OiNkZWZpbmVcdFBDSV9ERVZJRF9PQ1RFT05UWDJfTEJLXHRcdFx0MHhBMDYxXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuaC0yNi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfY24xMGsuYz0zOTI9c3RhdGljIHZvaWQgcnZ1X2xia19zZXRfY2hhbm5lbHMoc3RydWN0IHJ2dSAqcnZ1KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9jbjEway5jLTQxNS1cdFx0cGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2NuMTBrLmM6NDE2Olx0XHRcdFx0ICAgICAgUENJX0RFVklEX09DVEVPTlRYMl9MQkssIHBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2NuMTBrLmMtNDE3LVx0XHRpZiAoIXBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYz0yODAwPXN0YXRpYyB2b2lkIHJ2dV9kYmdfbnBhX2luaXQoc3RydWN0IHJ2dSAqcnZ1KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtMjgxOS0vKiBQZXItbG1hYyBDR1ggZGVidWdmcyBmaWxlcyBuZWVkIGJvdGggUlZVIGFuZCBDR1ggaGFuZGxlOyBpbm9kZS1cdTAwM2VpX3ByaXZhdGVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmM6MjgyMDogKiBwb2ludHMgaGVyZSBzbyBzZXFfZmlsZSBvcHMgYXZvaWQgcGNpX2dldF9kZXZpY2UoUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUYpLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0yODIxLSAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9NYWtlZmlsZS01LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX09DVEVPTlRYMl9QRikgJiM0Mzs9IHJ2dV9uaWNwZi5vIG90eDJfcHRwLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19PQ1RFT05UWDJfVkYpICYjNDM7PSBydnVfbmljdmYubyBvdHgyX3B0cC5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvTWFrZWZpbGUtOC1vYmotJChDT05GSUdfUlZVX0VTV0lUQ0gpICYjNDM7PSBydnVfcmVwLm9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC00My0vKiBQQ0kgZGV2aWNlIElEcyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmg6NDQ6I2RlZmluZSBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9QRiAgICAgICAgICAgICAgMHhBMDYzXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo0NTojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX1ZGXHRcdDB4QTA2NFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmg6NDY6I2RlZmluZSBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRlZGXHRcdDB4QTBGOFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNDctXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNTEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo1MjojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfU0RQX1JFUFx0XHQweEEwRjdcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTUzLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oPTYxOT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfb3R4Ml9sYmt2ZihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTYyMC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo2MjE6XHRyZXR1cm4gKHBkZXYtXHUwMDNlZGV2aWNlID09IFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGVkYpIHx8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC02MjItXHRcdChwZGV2LVx1MDAzZWRldmljZSA9PSBQQ0lfREVWSURfUlZVX1JFUCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmg9NjM3PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19vdHgyX3NkcF9yZXAoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC02Mzgte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmg6NjM5Olx0cmV0dXJuIHBkZXYtXHUwMDNlZGV2aWNlID09IFBDSV9ERVZJRF9PQ1RFT05UWDJfU0RQX1JFUDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTY0MC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYz0zNj1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgb3R4Ml9wZl9pZF90YWJsZVtdID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzozNzpcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfUEYpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTM4LVx0eyAwLCB9ICAvKiBlbmQgb2YgdGFibGUgKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jPTIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBvdHgyX3ZmX2lkX3RhYmxlW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jOjIzOlx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRlZGKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuYzoyNDpcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfVkYpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jOjI1Olx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1NEUF9SRVApIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jLTI2LVx0eyB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0NzEKCQkJCQkJCW91dHB1dDogMTIzCgkJCQkJCQl0aG91Z2h0czogNTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIERyaXZlciBmb3IgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbnN1bHQgU2VjdGlvbiAyIG9mIHRoZSB0cmlhZ2UgcGhpbG9zb3BoeSwgc3BlY2lmaWNhbGx5IHRoZSBwYXJ0IGFib3V0ICYjMzQ7U3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLiYjMzQ7IFJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBmb3IgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgdGhhdCBkZXBlbmQgb24gcGh5c2ljYWwgQVNJQ3Mgb3IgUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KClRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBkcml2ZXIgKE9DVEVPTlRYMl9QRiwgT0NURU9OVFgyX1ZGLCBPQ1RFT05UWDJfQUYpIGltbWVkaWF0ZWx5IGNhdWdodCBteSBleWUuIFRoaXMgaXMgYSBkcml2ZXIgZm9yIE1hcnZlbGwvQ2F2aXVtIE9jdGVvbiBUWDIgU21hcnROSUNzIGFuZCBTb0NzLCB1c2luZyB2ZW5kb3IgSUQgMHgxNzdkLiBEZWZpbml0ZWx5IGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIGRyaXZlci4gV2UgbmVlZCB0byBjb25maXJtIGlmIGl0ICpyZXF1aXJlcyogcGh5c2ljYWwgaGFyZHdhcmUuCgpMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGRyaXZlciBhY3R1YWxseSB0b3VjaGVzLiBMb29rcyBsaWtlIGl0IG1vZGlmaWVzIGZpbGVzIHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYDogc3BlY2lmaWNhbGx5IGBydnVfbml4LmNgIGFuZCBmaWxlcyB1bmRlciB0aGUgYG5pY2AgZGlyZWN0b3J5IGxpa2UgYG90eDJfY29tbW9uLmNgLCBgb3R4Ml9kY2JubC5jYCwgYW5kIHNvIG9uLiBHb29kLCBpdCYjMzk7cyBjb250YWluZWQgd2l0aGluIHRoYXQgTWFydmVsbC1zcGVjaWZpYyBwYXJ0IG9mIHRoZSB0cmVlLiBUaGVyZSBhcmUgbm8gbW9kaWZpY2F0aW9ucyB0byBjb3JlIG5ldHdvcmtpbmcgb3IgdmlydHVhbCBkZXZpY2UgZHJpdmVycywgd2hpY2ggaXMgcHJvbWlzaW5nIGZyb20gYSAmIzM0O3JlYWNoYWJpbGl0eSYjMzQ7IHBlcnNwZWN0aXZlLgoKTm93LCB0aGUgY3J1Y2lhbCBjaGVjazogRG9lcyBRRU1VIGVtdWxhdGUgYW55IG9mIHRoaXM/IE5vcGUuIFN0YW5kYXJkIFFFTVUgZG9lc24mIzM5O3QgdG91Y2ggdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIFJWVSAvIE5JWCBoYXJkd2FyZS4gVGhpcyBzb2xpZGlmaWVzIHRoYXQgdGhlIGRyaXZlciBkZW1hbmRzIHBoeXNpY2FsIGhhcmR3YXJlIOKAkyB0aGUgTWFydmVsbCBPY3Rlb25UWDIgU29DIG9yIFBDSWUgU21hcnROSUMuIFRoZXJlZm9yZSwgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBoYXJkd2FyZSB0aGF0JiMzOTtzICpzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUqIGluIG91ciBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4KClNvLCB0aGUgY29uY2x1c2lvbiBpcyBjbGVhci4gVGhpcyBpc24mIzM5O3Qgd29ydGggZnV6emluZyBpbiBvdXIgc3RhbmRhcmQgc2V0dXAuCgpUaGVyZWZvcmUsIHRoZSByZXNwb25zZSBpczoKCldvcnRoRnV6emluZzogZmFsc2UKUmVhc29uaW5nOiBUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIG9ubHkgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIG5ldHdvcmsgZHJpdmVyIChgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYCksIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIE1hcnZlbGwgT2N0ZW9uVFgyIGhhcmR3YXJlL0FTSUNzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuCkVuYWJsZUNvbmZpZ3M6IFtdCkZvY3VzU3ltYm9sczogW10KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIG9ubHkgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIG5ldHdvcmsgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi8pLCBhZGRpbmcgc3VwcG9ydCBmb3IgbXFwcmlvIGhhcmR3YXJlIGJhbmR3aWR0aCBvZmZsb2FkLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDL1NvQyBkcml2ZXIgcmVxdWlyaW5nIHBoeXNpY2FsIE1hcnZlbGwgT2N0ZW9uVFgyIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgb25seSB0aGUgTWFydmVsbCBPY3Rlb25UWDIgbmV0d29yayBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyLyksIGFkZGluZyBzdXBwb3J0IGZvciBtcXByaW8gaGFyZHdhcmUgYmFuZHdpZHRoIG9mZmxvYWQuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU21hcnROSUMvU29DIGRyaXZlciByZXF1aXJpbmcgcGh5c2ljYWwgTWFydmVsbCBPY3Rlb25UWDIgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDM6NDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAzOjM5OjQ1LjI1NDg2NDIxNVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjc2NzIyMzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIG9ubHkgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIG5ldHdvcmsgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi8pLCBhZGRpbmcgc3VwcG9ydCBmb3IgbXFwcmlvIGhhcmR3YXJlIGJhbmR3aWR0aCBvZmZsb2FkLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDL1NvQyBkcml2ZXIgcmVxdWlyaW5nIHBoeXNpY2FsIE1hcnZlbGwgT2N0ZW9uVFgyIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMzozOTo0NS4yNTQ4Njk1MTVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NTc3NjAyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGExMTM2NWU2ODFhZWUzOTRiNWVjN2QwMGY4ZGZjNTE3Y2Y2YzhmZWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgNCAwMzozOTo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcXG5pbmRleCAxNTNlYjU3YmFkMDY3Li5jOWE0MzI2ZDcyNWQ4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xcbkBAIC0zMzEsOCArMzMxLDEyIEBAIHN0YXRpYyBib29sIGlzX3ZhbGlkX3R4c2NocShzdHJ1Y3QgcnZ1ICpydnUsIGludCBibGthZGRyLFxcbiBcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpXFxuK1xcdGlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKSB7XFxuK1xcdFxcdGRldl9lcnJfcmF0ZWxpbWl0ZWQocnZ1LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwicGNpZnVuYyAleCBtYXAgcGNpZnVuYyAleCBub3QgZXF1YWwsIGx2bD0ldSBzY2hxPSV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgcGNpZnVuYywgbWFwX2Z1bmMsIGx2bCwgc2NocSk7XFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbiBcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xcbmluZGV4IDE3NTk5MjE4OGMxOGEuLmE1MTllMGE5N2EyYjcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xcbkBAIC02MTUsNiArNjE1LDE0MiBAQCB2b2lkIG90eDJfZ2V0X21hY19mcm9tX2FmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChvdHgyX2dldF9tYWNfZnJvbV9hZik7XFxuIFxcbitzdGF0aWMgaW50XFxuK290eDJfbml4X3RtcV9yZWdfd3JpdGUoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgY250LFxcbitcXHRcXHQgICAgICAgdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR10sXFxuK1xcdFxcdCAgICAgICB1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddKVxcbit7XFxuK1xcdHN0cnVjdCBtYm94ICptYm94ID0gXFx1MDAyNnBmdmYtXFx1MDAzZW1ib3g7XFxuK1xcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xcbitcXHRpbnQgaSwgZXJyO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XFxuK1xcdGlmICghcmVxKSB7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRyZXEtXFx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xcbitcXHRyZXEtXFx1MDAzZW51bV9yZWdzID0gY250O1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNudDsgaSsrKSB7XFxuK1xcdFxcdHJlcS1cXHUwMDNlcmVnW2ldID0gcmVnX2FkZHJbaV07XFxuK1xcdFxcdHJlcS1cXHUwMDNlcmVndmFsW2ldID0gcmVnX3ZhbFtpXTtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4raW50IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0dTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR107XFxuK1xcdHU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR107XFxuK1xcdGludCBlcnIsIHNtcSwgaSwgY250ID0gMDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwZnZmLVxcdTAwM2Vody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfU01RXTsgaSsrKSB7XFxuK1xcdFxcdHNtcSA9IHBmdmYtXFx1MDAzZWh3LnR4c2NocV9saXN0W05JWF9UWFNDSF9MVkxfU01RXVtpXTtcXG4rXFxuK1xcdFxcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcXG4rXFx0XFx0cmVnX3ZhbFtjbnRdID0gMDtcXG4rXFx0XFx0Y250Kys7XFxuK1xcbitcXHRcXHRyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XFxuK1xcdFxcdHJlZ192YWxbY250XSA9IDA7XFxuK1xcdFxcdGNudCsrO1xcbitcXG4rXFx0XFx0aWYgKGNudCBcXHUwMDNjIE1BWF9SRUdTX1BFUl9NQk9YX01TRyAtIDEpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRnb3RvIGZhaWw7XFxuK1xcdFxcdGNudCA9IDA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChjbnQpIHtcXG4rXFx0XFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRnb3RvIGZhaWw7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbitmYWlsOlxcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuK1xcdFxcdFxcdFxcdCBpbnQgdHhxLCB1NjQgbWlucmF0ZSwgdTY0IG1heHJhdGUpXFxuK3tcXG4rXFx0c3RydWN0IG1ib3ggKm1ib3ggPSBcXHUwMDI2cGZ2Zi1cXHUwMDNlbWJveDtcXG4rXFx0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XFxuK1xcdGludCBlcnIsIHNtcSwgbiA9IDA7XFxuK1xcdHU2NCByZWdfYWRkclsyXTtcXG4rXFx0dTY0IHJlZ192YWxbMl07XFxuK1xcdHU2NCByYXRlO1xcbitcXG4rXFx0aWYgKCFtYXhyYXRlIFxcdTAwMjZcXHUwMDI2ICFtaW5yYXRlKSB7XFxuK1xcdFxcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTtcXG4rXFx0XFx0cmVnX2FkZHJbMF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcXG4rXFx0XFx0cmVnX3ZhbFswXSA9IDA7XFxuK1xcdFxcdHJlZ19hZGRyWzFdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XFxuK1xcdFxcdHJlZ192YWxbMV0gPSAwO1xcbitcXHRcXHRyZXR1cm4gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCAyLCByZWdfYWRkciwgcmVnX3ZhbCk7XFxuK1xcdH1cXG4rXFxuK1xcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbitcXHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpO1xcbitcXHRpZiAoIXJlcSkge1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0cmVxLVxcdTAwM2VsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTtcXG4rXFxuK1xcdC8qIE1RUFJJTyBleHBvc2VzIG9ubHkgbWluL21heCByYXRlLCBub3QgYnVyc3QuICBQYXNzIGJ1cnN0IDAgc29cXG4rXFx0ICogb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZygpIHByb2dyYW1tZXMgdGhlIGxhcmdlc3QgYnVyc3QgdGhlIE5JWFxcbitcXHQgKiBlbmNvZGluZyBzdXBwb3J0cyAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb24gQ04xMEspLiAgVGhpcyBkaWZmZXJzXFxuK1xcdCAqIGZyb20gdGhlIDY1NTM2IGJ5dGUgZGVmYXVsdCB1c2VkIGluIHRoZSBIVEIgcGF0aCwgd2hpY2ggaXMgYVxcbitcXHQgKiBrZXJuZWwtc2lkZSBkZWZhdWx0IHdoZW4gbm8gZXhwbGljaXQgYnVyc3QgaXMgY29uZmlndXJlZCwgbm90IGFcXG4rXFx0ICogaGFyZHdhcmUgY2FwLlxcbitcXHQgKlxcbitcXHQgKiBtcXByaW8gc2V0dXAgcmVzdGFydHMgdGhlIG5ldGRldiAob3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYpLFxcbitcXHQgKiB3aGljaCByZXNldHMgTURRIHNoYXBlcnMgdG8gemVyby4gIFByb2dyYW0gYm90aCBQSVIgYW5kIENJUiBvblxcbitcXHQgKiBldmVyeSB1cGRhdGUgc28gb21pdHRlZCByYXRlcyBhcmUgYXBwbGllZCBleHBsaWNpdGx5IHJhdGhlciB0aGFuXFxuK1xcdCAqIHJlbHlpbmcgb24gc3RhbGUgaGFyZHdhcmUgc3RhdGUuXFxuK1xcdCAqL1xcbitcXHRyZXEtXFx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xcbitcXHRpZiAobWF4cmF0ZSkge1xcbitcXHRcXHRyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWF4cmF0ZSk7XFxuK1xcdFxcdHJlcS1cXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFtuXSA9IDA7XFxuK1xcdH1cXG4rXFx0bisrO1xcbitcXG4rXFx0LyogQ0lSK1BJUiBzdXBwb3J0IGlzIHJlcXVpcmVkIGFuZCBjaGVja2VkIGF0IG1xcHJpbyBzZXR1cC4gKi9cXG4rXFx0cmVxLVxcdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcXG4rXFx0aWYgKG1pbnJhdGUpIHtcXG4rXFx0XFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1pbnJhdGUpO1xcbitcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmVxLVxcdTAwM2VyZWd2YWxbbl0gPSAwO1xcbitcXHR9XFxuK1xcdG4rKztcXG4rXFx0cmVxLVxcdTAwM2VudW1fcmVncyA9IG47XFxuK1xcbitcXHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yX3BmYylcXG4ge1xcbiBcXHR1MTYgKCpzY2hxX2xpc3QpW01BWF9UWFNDSFFfUEVSX0ZVTkNdO1xcbkBAIC02NTEsNyArNzg3LDExIEBAIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCh1NjQpaHctXFx1MDAzZXNtcV9saW5rX3R5cGUpO1xcbiBcXHRcXHRyZXEtXFx1MDAzZW51bV9yZWdzKys7XFxuIFxcdFxcdC8qIE1EUSBjb25maWcgKi9cXG4tXFx0XFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVtwcmlvXTtcXG4rXFx0XFx0aWYgKHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxcbitcXHRcXHRcXHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdWzBdO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XFxuK1xcbiBcXHRcXHRyZXEtXFx1MDAzZXJlZ1sxXSA9IE5JWF9BRl9NRFFYX1BBUkVOVChzY2hxKTtcXG4gXFx0XFx0cmVxLVxcdTAwM2VyZWd2YWxbMV0gPSBwYXJlbnQgXFx1MDAzY1xcdTAwM2MgMTY7XFxuIFxcdFxcdHJlcS1cXHUwMDNlbnVtX3JlZ3MrKztcXG5AQCAtNzc5LDYgKzkxOSw5IEBAIGludCBvdHgyX3R4c2NoX2FsbG9jKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4gXFx0XFx0cmVxLVxcdTAwM2VzY2hxW05JWF9UWFNDSF9MVkxfVEw0XSA9IGNoYW5fY250O1xcbiBcXHR9XFxuIFxcbitcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXFxuK1xcdFxcdHJlcS1cXHUwMDNlc2NocVtOSVhfVFhTQ0hfTFZMX1NNUV0gPSBwZnZmLVxcdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcXG4rXFxuIFxcdHJjID0gb3R4Ml9zeW5jX21ib3hfbXNnKFxcdTAwMjZwZnZmLVxcdTAwM2VtYm94KTtcXG4gXFx0aWYgKHJjKVxcbiBcXHRcXHRyZXR1cm4gcmM7XFxuQEAgLTg0NCw2ICs5ODcsNyBAQCB2b2lkIG90eDJfdHhzY2hxX3N0b3Aoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbiBcXG4gXFx0LyogQ2xlYXIgdGhlIHR4c2NocSBsaXN0ICovXFxuIFxcdGZvciAobHZsID0gMDsgbHZsIFxcdTAwM2MgTklYX1RYU0NIX0xWTF9DTlQ7IGx2bCsrKSB7XFxuK1xcdFxcdHBmdmYtXFx1MDAzZWh3LnR4c2NocV9jbnRbbHZsXSA9IDA7XFxuIFxcdFxcdGZvciAoc2NocSA9IDA7IHNjaHEgXFx1MDAzYyBNQVhfVFhTQ0hRX1BFUl9GVU5DOyBzY2hxKyspXFxuIFxcdFxcdFxcdHBmdmYtXFx1MDAzZWh3LnR4c2NocV9saXN0W2x2bF1bc2NocV0gPSAwO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcXG5pbmRleCBlZWNlZTYxMmI3YjJjLi5lZGU3ZjExMTNiNzE0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcXG5AQCAtMTcsNiArMTcsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc29jL21hcnZlbGwvc2lsaWNvbnMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NvYy9tYXJ2ZWxsL29jdGVvbnR4Mi9hc20uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9tYWNzZWMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvcGt0X3NjaGVkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X2Nscy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2RldmxpbmsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RpbWU2NC5oXFx1MDAzZVxcbkBAIC00ODMsNiArNDg0LDIzIEBAIHN0cnVjdCBwZl9pcnFfZGF0YSB7XFxuIFxcdGludCBtZGV2cztcXG4gfTtcXG4gXFxuK3N0cnVjdCBtcV9vZmZsb2FkX3NuYXAge1xcbitcXHR1NjQgbWluX3JhdGVbVENfUU9QVF9NQVhfUVVFVUVdO1xcbitcXHR1NjQgbWF4X3JhdGVbVENfUU9QVF9NQVhfUVVFVUVdO1xcbitcXHRfX3U4IG51bV90YztcXG4rXFx0X191MTYgY291bnRbVENfUU9QVF9NQVhfUVVFVUVdO1xcbitcXHRfX3UxNiBvZmZzZXRbVENfUU9QVF9NQVhfUVVFVUVdO1xcbit9O1xcbitcXG4rc3RydWN0IG90eDJfbXFwcmlvIHtcXG4rXFx0dTMyXFx0ZmxhZ3M7XFxuK1xcdHU2NFxcdCptaW5fcmF0ZTtcXG4rXFx0dTY0XFx0Km1heF9yYXRlO1xcbitcXHRib29sXFx0cmF0ZV9saW1pdDtcXG4rXFx0Ym9vbFxcdHJlcGxhY2Vfc2V0dXBfZG9uZTtcXG4rXFx0Ym9vbFxcdHJlcGxhY2VfZ3JhZnRfZG9uZTtcXG4rfTtcXG4rXFxuIHN0cnVjdCBvdHgyX25pYyB7XFxuIFxcdHZvaWQgX19pb21lbVxcdFxcdCpyZWdfYmFzZTtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2VcXHQqbmV0ZGV2O1xcbkBAIC01MTUsNiArNTMzLDEwIEBAIHN0cnVjdCBvdHgyX25pYyB7XFxuIFxcdHU2NFxcdFxcdFxcdGZsYWdzO1xcbiBcXHR1NjRcXHRcXHRcXHQqY3Ffb3BfYWRkcjtcXG4gXFxuK1xcdHN0cnVjdCBvdHgyX21xcHJpb1xcdG1xcHJpbztcXG4rXFx0c3RydWN0IG1xX29mZmxvYWRfc25hcFxcdCpjdXJfbXFfc25hcDtcXG4rXFx0c3RydWN0IG1xX29mZmxvYWRfc25hcFxcdCpvbGRfbXFfc25hcDtcXG4rXFxuIFxcdHN0cnVjdCBicGZfcHJvZ1xcdFxcdCp4ZHBfcHJvZztcXG4gXFx0c3RydWN0IG90eDJfcXNldFxcdHFzZXQ7XFxuIFxcdHN0cnVjdCBvdHgyX2h3XFx0XFx0aHc7XFxuQEAgLTEyNDYsNiArMTI2OCwxMSBAQCBkbWFfYWRkcl90IG90eDJfZG1hX21hcF9za2JfZnJhZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc2VnLCBpbnQgKmxlbik7XFxuIHZvaWQgb3R4Ml9kbWFfdW5tYXBfc2tiX2ZyYWdzKHN0cnVjdCBvdHgyX25pYyAqcGZ2Ziwgc3RydWN0IHNnX2xpc3QgKnNnKTtcXG4gaW50IG90eDJfcmVhZF9mcmVlX3NxZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBxaWR4KTtcXG4raW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgdHhxLFxcbitcXHRcXHRcXHRcXHQgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTtcXG4raW50IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xcbitpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTtcXG4gdm9pZCBvdHgyX3F1ZXVlX3ZmX3dvcmsoc3RydWN0IG1ib3ggKm13LCBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbWJveF93cSxcXG4gXFx0XFx0XFx0aW50IGZpcnN0LCBpbnQgbWRldnMsIHU2NCBpbnRyKTtcXG4gaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xcbmluZGV4IGYxMTBkZmE0MjM2MDUuLjRhNzBhYmMyMzBiZWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNcXG5AQCAtNDEzLDYgKzQxMywxMiBAQCBzdGF0aWMgaW50IG90eDJfZGNibmxfaWVlZV9zZXRwZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGllZWVfcGZjICpwZmMpXFxuIFxcdHU4IG9sZF9wZmNfZW47XFxuIFxcdGludCBlcnI7XFxuIFxcbitcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgXFx1MDAyNlxcdTAwMjYgcGZjLVxcdTAwM2VwZmNfZW4pIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJQRkM6IGNhbm5vdCBlbmFibGUgd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4gXFx0b2xkX3BmY19lbiA9IHBmdmYtXFx1MDAzZXBmY19lbjtcXG4gXFx0cGZ2Zi1cXHUwMDNlcGZjX2VuID0gcGZjLVxcdTAwM2VwZmNfZW47XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcXG5pbmRleCA5YmVlMWI5MWVlYWE2Li5lYzI2MDFjNmMyNTVhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xcbkBAIC0yODcsNiArMjg3LDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKGNoYW5uZWwtXFx1MDAzZXR4X2NvdW50ICE9IHBmdmYtXFx1MDAzZWh3LnR4X3F1ZXVlcyB8fFxcbitcXHQgICAgIGNoYW5uZWwtXFx1MDAzZXJ4X2NvdW50ICE9IHBmdmYtXFx1MDAzZWh3LnJ4X3F1ZXVlcykpIHtcXG4rXFx0XFx0bmV0ZGV2X2luZm8oZGV2LFxcbitcXHRcXHRcXHQgICAgXFxcIk5vdCBwZXJtaXR0ZWQgdG8gY2hhbmdlIGNoYW5uZWwgY291bnQgd2hpbGUgTVEgcHJpbyBpcyBhY3RpdmVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKGlmX3VwKVxcbiBcXHRcXHRkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zdG9wKGRldik7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xcbmluZGV4IGM5OTVmMjkwMDg1OTAuLjc5YTgyZTQ0NTQ1NDYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcXG5AQCAtMTk4MCw2ICsxOTgwLDEyIEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJfZnJlZV9tZW07XFxuIFxcbitcXHRlcnIgPSBvdHgyX21xcHJpb191cChwZik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdG5ldGRldl9lcnIocGYtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVycyBkdXJpbmcgb3BlbjogJWQ7IGNvbnRpbnVpbmcgd2l0aG91dCBiYW5kd2lkdGggbGltaXRzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBlcnIpO1xcbitcXG4gXFx0LyogUmVnaXN0ZXIgTkFQSSBoYW5kbGVyICovXFxuIFxcdGZvciAocWlkeCA9IDA7IHFpZHggXFx1MDAzYyBwZi1cXHUwMDNlaHcuY2ludF9jbnQ7IHFpZHgrKykge1xcbiBcXHRcXHRjcV9wb2xsID0gXFx1MDAyNnFzZXQtXFx1MDAzZW5hcGlbcWlkeF07XFxuQEAgLTI4NDYsNiArMjg1MiwxMiBAQCBzdGF0aWMgaW50IG90eDJfeGRwX3NldHVwKHN0cnVjdCBvdHgyX25pYyAqcGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4gXFx0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcocGYtXFx1MDAzZW5ldGRldik7XFxuIFxcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7XFxuIFxcbitcXHRpZiAocHJvZyBcXHUwMDI2XFx1MDAyNiBwZi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJYRFA6IGNhbm5vdCBhdHRhY2ggd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKHByb2cgXFx1MDAyNlxcdTAwMjYgZGV2LVxcdTAwM2VtdHUgXFx1MDAzZSBNQVhfWERQX01UVSkge1xcbiBcXHRcXHRuZXRkZXZfd2FybihkZXYsIFxcXCJKdW1ibyBmcmFtZXMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCBYRFBcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXFxuaW5kZXggMDM5ZmQ0N2ViZjUyMi4uNDA5MDI5NmVkZmM1YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xcbkBAIC0xNiw2ICsxNiw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvdGNfYWN0L3RjX21pcnJlZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3RjX2FjdC90Y192bGFuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvaXB2Ni5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9zY2hlZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L3NjaF9nZW5lcmljLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwiY24xMGsuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIm90eDJfY29tbW9uLmhcXFwiXFxuQEAgLTMxLDYgKzMzLDEwIEBAXFxuIFxcbiAjZGVmaW5lIE1DQVNUX0lOVkFMSURfR1JQXFx0XFx0KC0xVSlcXG4gI2RlZmluZSBSQVRFX01BTlRJU1NBX0JJVFNcXHRcXHQ4XFxuKy8qIE1pbiBwZXItcXVldWUgZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgyIE1icHMpLiAqL1xcbisjZGVmaW5lIE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTXFx0MjUwMDAwVUxMXFxuKy8qIE1heCBlZ3Jlc3Mgc2hhcGluZyByYXRlIHRoZSBOSVggVExYIGVuY29kZXIgc3VwcG9ydHMgKDEzMDgxNiBNYnBzKS4gKi9cXG4rI2RlZmluZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QU1xcdCgoTUFYX0JVUlNUX1NJWkUgKiAxMDAwMDAwVUxMKSAvIDhVTEwpXFxuIFxcbiBzdGF0aWMgdm9pZCBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MzIgYnVyc3QsXFxuIFxcdFxcdFxcdFxcdCAgICAgIHUzMiAqYnVyc3RfZXhwLCB1MzIgKmJ1cnN0X21hbnRpc3NhKVxcbkBAIC02MSw2ICs2Nyw5IEBAIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcXG4gXFx0XFx0XFx0KmJ1cnN0X21hbnRpc3NhID0gdG1wIC8gKDFVTEwgXFx1MDAzY1xcdTAwM2MgKCpidXJzdF9leHAgLSA3KSk7XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogYnVyc3QgMDogbGFyZ2VzdCBlbmNvZGFibGUgYnVyc3QgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uXFxuK1xcdFxcdCAqIENOMTBLKSwgbm90IGEgbWluaW1hbCBidXJzdC5cXG4rXFx0XFx0ICovXFxuIFxcdFxcdCpidXJzdF9leHAgPSBNQVhfQlVSU1RfRVhQT05FTlQ7XFxuIFxcdFxcdCpidXJzdF9tYW50aXNzYSA9IG1heF9tYW50aXNzYTtcXG4gXFx0fVxcbkBAIC0xNjAwLDE0ICsxNjA5LDcwOSBAQCBzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfYmxvY2soc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0XFx0XFx0XFx0ICBuaWMsIG5pYywgaW5ncmVzcyk7XFxuIH1cXG4gXFxuKy8qIEZyZWUgdGhlIHBlci1xdWV1ZSBtaW4vbWF4IHJhdGUgY2FjaGVzLiAqL1xcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19mcmVlX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRkZXZtX2tmcmVlKHBmdmYtXFx1MDAzZWRldiwgcGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlKTtcXG4rXFx0ZGV2bV9rZnJlZShwZnZmLVxcdTAwM2VkZXYsIHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSk7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IE5VTEw7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSA9IE5VTEw7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5mbGFncyA9IDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmLCBib29sIHJlcGxhY2luZylcXG4re1xcbitcXHR1MTYgbnVtX3R4cSA9IHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xcbitcXG4rXFx0aWYgKHJlcGxhY2luZyBcXHUwMDI2XFx1MDAyNiBwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUgXFx1MDAyNlxcdTAwMjYgcGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlKSB7XFxuK1xcdFxcdG1lbXNldChwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUsIDAsXFxuK1xcdFxcdCAgICAgICBudW1fdHhxICogc2l6ZW9mKCpwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUpKTtcXG4rXFx0XFx0bWVtc2V0KHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSwgMCxcXG4rXFx0XFx0ICAgICAgIG51bV90eHEgKiBzaXplb2YoKnBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSkpO1xcbitcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW8uZmxhZ3MgPSAwO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcXG4rXFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVxcdTAwM2VkZXYsIG51bV90eHEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKCpwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIEdGUF9LRVJORUwpO1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8ubWF4X3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi1cXHUwMDNlZGV2LCBudW1fdHhxLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZigqcGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSkge1xcbitcXHRcXHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfZnJlZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IG1xX29mZmxvYWRfc25hcCAqKnNuYXApXFxuK3tcXG4rXFx0aWYgKCEqc25hcClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZGV2bV9rZnJlZShwZnZmLVxcdTAwM2VkZXYsICpzbmFwKTtcXG4rXFx0KnNuYXAgPSBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3NuYXBfY29weShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICoqZHN0LFxcbitcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcXHUwMDI2bXFwcmlvLVxcdTAwM2Vxb3B0O1xcbitcXHRzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICpzbmFwO1xcbitcXHRpbnQgdGM7XFxuK1xcbitcXHRpZiAoISpkc3QpIHtcXG4rXFx0XFx0c25hcCA9IGRldm1fa3phbGxvYyhwZnZmLVxcdTAwM2VkZXYsIHNpemVvZigqc25hcCksIEdGUF9LRVJORUwpO1xcbitcXHRcXHRpZiAoIXNuYXApXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHQqZHN0ID0gc25hcDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0c25hcCA9ICpkc3Q7XFxuK1xcdH1cXG4rXFxuK1xcdHNuYXAtXFx1MDAzZW51bV90YyA9IHFvcHQtXFx1MDAzZW51bV90YztcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgVENfUU9QVF9NQVhfUVVFVUU7IHRjKyspIHtcXG4rXFx0XFx0c25hcC1cXHUwMDNlY291bnRbdGNdID0gcW9wdC1cXHUwMDNlY291bnRbdGNdO1xcbitcXHRcXHRzbmFwLVxcdTAwM2VvZmZzZXRbdGNdID0gcW9wdC1cXHUwMDNlb2Zmc2V0W3RjXTtcXG4rXFx0XFx0c25hcC1cXHUwMDNlbWluX3JhdGVbdGNdID0gMDtcXG4rXFx0XFx0c25hcC1cXHUwMDNlbWF4X3JhdGVbdGNdID0gMDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgcW9wdC1cXHUwMDNlbnVtX3RjOyB0YysrKSB7XFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXFxuK1xcdFxcdFxcdHNuYXAtXFx1MDAzZW1pbl9yYXRlW3RjXSA9IG1xcHJpby1cXHUwMDNlbWluX3JhdGVbdGNdO1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxcbitcXHRcXHRcXHRzbmFwLVxcdTAwM2VtYXhfcmF0ZVt0Y10gPSBtcXByaW8tXFx1MDAzZW1heF9yYXRlW3RjXTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fc3RhZ2VfY3VyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4rXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXFxuK3tcXG4rXFx0cmV0dXJuIG90eDJfbXFwcmlvX3NuYXBfY29weShwZnZmLCBcXHUwMDI2cGZ2Zi1cXHUwMDNlY3VyX21xX3NuYXAsIG1xcHJpbyk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfY29tbWl0KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXFx1MDAyNnBmdmYtXFx1MDAzZW9sZF9tcV9zbmFwKTtcXG4rXFx0cGZ2Zi1cXHUwMDNlb2xkX21xX3NuYXAgPSBwZnZmLVxcdTAwM2VjdXJfbXFfc25hcDtcXG4rXFx0cGZ2Zi1cXHUwMDNlY3VyX21xX3NuYXAgPSBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lID0gZmFsc2U7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgb3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0cmV0dXJuIHBmdmYtXFx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9NRFFdICE9IDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdG9yZV9vbGQoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKnNuYXAgPSBwZnZmLVxcdTAwM2VvbGRfbXFfc25hcDtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXFx1MDAzZW5ldGRldjtcXG4rXFx0dTE2IG51bV90eHEgPSBwZnZmLVxcdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcXG4rXFx0aW50IHRjLCB0eHEsIGVycjtcXG4rXFxuK1xcdGlmICghc25hcClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRlcnIgPSBvdHgyX21xcHJpb19hbGxvY19jYWNoZShwZnZmLCBmYWxzZSk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRtZW1zZXQocGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlLCAwLCBudW1fdHhxICogc2l6ZW9mKCpwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUpKTtcXG4rXFx0bWVtc2V0KHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSwgMCwgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlKSk7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5mbGFncyA9IDA7XFxuK1xcbitcXHRmb3IgKHRjID0gMDsgdGMgXFx1MDAzYyBzbmFwLVxcdTAwM2VudW1fdGM7IHRjKyspIHtcXG4rXFx0XFx0dTY0IG1pbl9yYXRlID0gc25hcC1cXHUwMDNlbWluX3JhdGVbdGNdO1xcbitcXHRcXHR1NjQgbWF4X3JhdGUgPSBzbmFwLVxcdTAwM2VtYXhfcmF0ZVt0Y107XFxuK1xcbitcXHRcXHRpZiAobWluX3JhdGUpXFxuK1xcdFxcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5mbGFncyB8PSBUQ19NUVBSSU9fRl9NSU5fUkFURTtcXG4rXFx0XFx0aWYgKG1heF9yYXRlKVxcbitcXHRcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW8uZmxhZ3MgfD0gVENfTVFQUklPX0ZfTUFYX1JBVEU7XFxuK1xcbitcXHRcXHRmb3IgKHR4cSA9IHNuYXAtXFx1MDAzZW9mZnNldFt0Y107XFxuK1xcdFxcdCAgICAgdHhxIFxcdTAwM2Mgc25hcC1cXHUwMDNlb2Zmc2V0W3RjXSArIHNuYXAtXFx1MDAzZWNvdW50W3RjXTsgdHhxKyspIHtcXG4rXFx0XFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcXG4rXFx0XFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlW3R4cV0gPSBtYXhfcmF0ZTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHNuYXAtXFx1MDAzZW51bV90Yyk7XFxuK1xcdGZvciAodGMgPSAwOyB0YyBcXHUwMDNjIHNuYXAtXFx1MDAzZW51bV90YzsgdGMrKylcXG4rXFx0XFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIHRjLCBzbmFwLVxcdTAwM2Vjb3VudFt0Y10sXFxuK1xcdFxcdFxcdFxcdCAgICBzbmFwLVxcdTAwM2VvZmZzZXRbdGNdKTtcXG4rXFxuK1xcdGlmIChvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKSB7XFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0Lyogb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoKSBjbGVhcnMgcmF0ZV9saW1pdCB3aGVuIG5kb19vcGVuKCkgZmFpbHMuICovXFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gdHJ1ZTtcXG4rXFxuK1xcdGVyciA9IG90eDJfbXFwcmlvX3VwKHBmdmYpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0b3R4Ml9tcXByaW9fc25hcF9mcmVlKHBmdmYsIFxcdTAwMjZwZnZmLVxcdTAwM2VjdXJfbXFfc25hcCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fc25hcF9kZXN0cm95KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXFx1MDAyNnBmdmYtXFx1MDAzZWN1cl9tcV9zbmFwKTtcXG4rXFx0b3R4Ml9tcXByaW9fc25hcF9mcmVlKHBmdmYsIFxcdTAwMjZwZnZmLVxcdTAwM2VvbGRfbXFfc25hcCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2NsZWFyX3N3KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cXHUwMDNlbmV0ZGV2O1xcbitcXG4rXFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgPSBmYWxzZTtcXG4rXFx0b3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShwZnZmKTtcXG4rXFx0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCAwKTtcXG4rXFx0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcXG4rfVxcbitcXG4rLyogVGVhciBkb3duIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZDogY2xlYXIgcGVyLXF1ZXVlIHNoYXBlcnMsXFxuKyAqIG1xcHJpb19yYXRlX2xpbWl0LCBuZXRkZXYgVEMgbWFwcGluZ3MsIGFuZCB0aGUgY2FjaGVkIHJhdGVzLiAgQ2FsbGVkIG9uXFxuKyAqIGV4cGxpY2l0IG1xcHJpbyB0ZWFyZG93biAodGMgcWRpc2MgZGVsKSBhbmQgZXJyb3IgY2xlYW51cCwgbm90IG9uXFxuKyAqIHJvdXRpbmUgbmV0ZGV2IHN0b3Avb3BlbiBjeWNsZXMgd2hlcmUgdGhlIG9mZmxvYWQgc3RheXMgYWN0aXZlLlxcbisgKi9cXG4raW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0aWYgKCFwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAobmV0aWZfcnVubmluZyhwZnZmLVxcdTAwM2VuZXRkZXYpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKVxcbitcXHRcXHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XFxuK1xcbitcXHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcXG4rXFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihwZnZmLVxcdTAwM2VuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJtcXByaW86IGZhaWxlZCB0byBjbGVhciBoYXJkd2FyZSBzaGFwZXJzOiAlZDsgc29tZSBUWCBxdWV1ZXMgbWF5IHJldGFpbiBiYW5kd2lkdGggbGltaXRzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBlcnIpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVxcdTAwM2VuZXRkZXY7XFxuK1xcdGludCB0eHEsIGVycjtcXG4rXFxuK1xcdGlmICghcGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKCFwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRmb3IgKHR4cSA9IDA7IHR4cSBcXHUwMDNjIHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzOyB0eHErKykge1xcbitcXHRcXHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XFxuK1xcbitcXHRcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvLmZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXFxuK1xcdFxcdFxcdG1pbl9yYXRlID0gcGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV07XFxuK1xcdFxcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8uZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcXG4rXFx0XFx0XFx0bWF4X3JhdGUgPSBwZnZmLVxcdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXTtcXG4rXFxuK1xcdFxcdGlmICghbWluX3JhdGUgXFx1MDAyNlxcdTAwMjYgIW1heF9yYXRlKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLCBtaW5fcmF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgbWF4X3JhdGUpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBmYWlsZWQgdG8gcmVzdG9yZSBzaGFwZXIgZm9yIHR4cSAlZDogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIHR4cSwgZXJyKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogUmVzdGFydCB0aGUgbmV0ZGV2IHRvIHJlcHJvZ3JhbSB0aGUgVFggc2NoZWR1bGVyIGhpZXJhcmNoeSBmb3IgbXFwcmlvXFxuKyAqIGJhbmR3aWR0aCBvZmZsb2FkLiAgQm90aCBtcXByaW8gYWRkIGFuZCBkZWxldGUgKHdoZW4gb2ZmbG9hZCB3YXMgYWN0aXZlKVxcbisgKiB0YWtlIHRoaXMgcGF0aCB2aWEgbmRvX3N0b3AoKS9uZG9fb3BlbigpIHNvIFZGLXNwZWNpZmljIG9wZW4gbG9naWMgKGUuZy5cXG4rICogTEJLIGNhcnJpZXIgb24pIHJ1bnMgY29ycmVjdGx5LiAgVGhlIGZ1bGwgc3RvcC9vcGVuIGN5Y2xlIGNsZWFyc1xcbisgKiBjYXJyaWVyLCBzdG9wcyBhbGwgVFggcXVldWVzLCB0ZWFycyBkb3duIElSUXMvTkFQSSBhbmQgZHJvcHMgaW4tZmxpZ2h0XFxuKyAqIHRyYWZmaWMuICBJZiBvcGVuIGZhaWxzLCB0aGUgaW50ZXJmYWNlIGlzIGxlZnQgYWRtaW5pc3RyYXRpdmVseSBkb3duXFxuKyAqIHdpdGhvdXQgY2FsbGluZyBuZG9fc3RvcCgpIGFnYWluIG9uIHJlc291cmNlcyBhbHJlYWR5IHRvcm4gZG93biBieVxcbisgKiB0aGUgb3BlbiBlcnJvciBwYXRoLlxcbisgKlxcbisgKiBEbyBub3QgY2FsbCBkZXZfZGVhY3RpdmF0ZSgpL2Rldl9hY3RpdmF0ZSgpIGhlcmU6IHRoaXMgcnVucyBmcm9tXFxuKyAqIG5kb19zZXR1cF90YygpIHdoaWxlIHFkaXNjX2dyYWZ0KCkgbWF5IGFscmVhZHkgaG9sZCB0aGUgZGV2aWNlXFxuKyAqIGRlYWN0aXZhdGVkIGFuZCBtdXN0IHBlcmZvcm0gdGhlIGZpbmFsIGRldl9hY3RpdmF0ZSgpLlxcbisgKi9cXG4rc3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJhdGVfbGltaXQpXFxuK3tcXG4rXFx0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBuZXRkZXYtXFx1MDAzZW5ldGRldl9vcHM7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHQvKiBUT0RPOiBFeHBsb3JlIGxpdmUgVFggc2NoZWR1bGVyIHJlcHJvZ3JhbW1pbmcgdG8gYXZvaWQgYSBmdWxsXFxuK1xcdCAqIG5kb19zdG9wKCkvbmRvX29wZW4oKSBib3VuY2Ugb24gZXZlcnkgbXFwcmlvIGNoYW5nZS5cXG4rXFx0ICovXFxuK1xcdG5ldGRldl9pbmZvKG5ldGRldixcXG4rXFx0XFx0ICAgIFxcXCJtcXByaW86IHJlc3RhcnRpbmcgaW50ZXJmYWNlIHRvIHJlcHJvZ3JhbSBUWCBzY2hlZHVsZXI7IGluLWZsaWdodCB0cmFmZmljIHdpbGwgYmUgZHJvcHBlZFxcXFxuXFxcIik7XFxuK1xcbitcXHRlcnIgPSBvcHMtXFx1MDAzZW5kb19zdG9wKG5ldGRldik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHQvKiBTZXQgYmVmb3JlIG5kb19vcGVuKCkgc28gb3R4Ml90eHNjaF9hbGxvYygpIHdpZGVucyBTTVEgYWxsb2NhdGlvbi5cXG4rXFx0ICogT24gdGVhcmRvd24sIGRyb3AgbXFwcmlvIHNvZnR3YXJlIHN0YXRlIHNvIG5kb19vcGVuKCkgZG9lcyBub3RcXG4rXFx0ICogcmUtYXBwbHkgYmFuZHdpZHRoIGxpbWl0cyB2aWEgb3R4Ml9tcXByaW9fdXAoKSBhZnRlciB0aGUga2VybmVsXFxuK1xcdCAqIHJlbW92ZWQgdGhlIHFkaXNjLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJhdGVfbGltaXQpXFxuK1xcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gdHJ1ZTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcXG4rXFxuK1xcdGVyciA9IG9wcy1cXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIkZhaWxlZCB0byByZXN0YXJ0IGRldmljZSBhZnRlciBtcXByaW8gY2hhbmdlOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgZXJyKTtcXG4rXFx0XFx0LyogbmRvX29wZW4oKSBhbHJlYWR5IGZyZWVkIHRoZSBUWCBzY2hlZHVsZXJzIG9uIGZhaWx1cmUgd2hpbGVcXG4rXFx0XFx0ICogbmV0aWZfcnVubmluZygpIG1heSBzdGlsbCBiZSB0cnVlOyBkcm9wIG1xcHJpbyBzb2Z0d2FyZSBzdGF0ZVxcbitcXHRcXHQgKiBvbmx5IGluc3RlYWQgb2Ygc2VuZGluZyBzaGFwZXIgY2xlYXJzIHRvIGZyZWVkIHF1ZXVlcy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xcbitcXHRcXHQvKiBuZG9fb3BlbigpIHJvbGxzIGJhY2sgb24gZmFpbHVyZTsgbWFyayB0aGUgaW50ZXJmYWNlIGRvd24gc29cXG4rXFx0XFx0ICogbmV0aWZfY2xvc2UoKSBkb2VzIG5vdCBpbnZva2UgbmRvX3N0b3AoKSBvbiBmcmVlZCBOQVBJL3F1ZXVlXFxuK1xcdFxcdCAqIHN0YXRlLiBDYWxsZXIgaG9sZHMgUlROTDsgZGV2X2Nsb3NlKCkgd291bGQgZGVhZGxvY2suXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRwZnZmLVxcdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfSU5URl9ET1dOO1xcbitcXHRcXHQvKiB2aXNpYmxlIHRvIG90eDJfc3RvcCgpIG9uIG90aGVyIGNwdXMgKi9cXG4rXFx0XFx0c21wX3dtYigpO1xcbitcXHRcXHRuZXRpZl9jbG9zZShuZXRkZXYpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHR1NjQgcmF0ZSwgdTMyIHFjb3VudCwgaW50IHRjLFxcbitcXHRcXHRcXHRcXHRcXHRjb25zdCBjaGFyICpuYW1lKVxcbit7XFxuK1xcdGlmICghcmF0ZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAocWNvdW50IFxcdTAwM2M9IDEpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LyogVE9ETzogbXFwcmlvIG1pbl9yYXRlL21heF9yYXRlIGFyZSBwZXIgdHJhZmZpYyBjbGFzcywgYnV0IGJhbmR3aWR0aFxcbitcXHQgKiBvZmZsb2FkIHNoYXBlcyBvbiBwZXItcXVldWUgTURRIG5vZGVzIHBhcmVudGVkIHVuZGVyIGEgc2luZ2xlIFRMNC5cXG4rXFx0ICogV2l0aG91dCBwZXItVEMgVEw0IHNoYXBlcnMgdGhlIGRyaXZlciBjYW5ub3QgaG9ub3IgVEMtbGV2ZWwgbGltaXRzXFxuK1xcdCAqIGZvciBhIHRyYWZmaWMgY2xhc3MgdGhhdCBzcGFucyBtdWx0aXBsZSBxdWV1ZXMgd2l0aG91dCBlaXRoZXJcXG4rXFx0ICogZGl2aWRpbmcgdGhlIHJhdGUgYWNyb3NzIHF1ZXVlcyAodUFQSSBtaXNtYXRjaCkgb3IgZXhjZWVkaW5nIHRoZSBUQ1xcbitcXHQgKiBjYXAgd2hlbiBldmVyeSBtZW1iZXIgcXVldWUgaXMgYWN0aXZlLiBSZWplY3QgdW50aWwgcGVyLVRDIFRMNFxcbitcXHQgKiBzaGFwaW5nIGNhbiBiZSBpbXBsZW1lbnRlZCB3aXRob3V0IGFsbG9jYXRpbmcgYWRkaXRpb25hbCBUTDQgbm9kZXNcXG4rXFx0ICogYmV5b25kIHRoZSBleGlzdGluZyBoaWVyYXJjaHkuXFxuK1xcdCAqL1xcbitcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0ICAgXFxcIm1xcHJpbzogJXMgcmF0ZSBmb3IgdGMgJWQgbm90IHN1cHBvcnRlZCB3aXRoICV1IHF1ZXVlc1xcXFxuXFxcIixcXG4rXFx0XFx0ICAgbmFtZSwgdGMsIHFjb3VudCk7XFxuK1xcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHQgICAgICAgXFxcIm1xcHJpbzogJXMgcmF0ZSBmb3IgdGMgJWQgbm90IHN1cHBvcnRlZCB3aXRoICV1IHF1ZXVlc1xcXCIsXFxuK1xcdFxcdFxcdCAgICAgICBuYW1lLCB0YywgcWNvdW50KTtcXG4rXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0KVxcbit7XFxuK1xcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdHUxNiBudW1fdHhxID0gcGZ2Zi1cXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XFxuK1xcdGludCB0YywgdHhxO1xcbitcXG4rXFx0aWYgKHFvcHQtXFx1MDAzZW51bV90YyBcXHUwMDNlIG51bV90eHEpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIHFvcHQtXFx1MDAzZW51bV90YywgbnVtX3R4cSk7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIk51bWJlciBvZiBUQ3MgKCV1KSBleGNlZWRzIGh3IHF1ZXVlcyAldVxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBxb3B0LVxcdTAwM2VudW1fdGMsIG51bV90eHEpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG51bV90eHEgXFx1MDAzZSBNQVhfVFhTQ0hRX1BFUl9GVU5DKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHQgICBcXFwiTnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcXCJOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldVxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBudW1fdHhxLCBNQVhfVFhTQ0hRX1BFUl9GVU5DKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAodGMgPSAwOyB0YyBcXHUwMDNjIHFvcHQtXFx1MDAzZW51bV90YzsgdGMrKykge1xcbitcXHRcXHR1MzIgcWNvdW50ID0gcW9wdC1cXHUwMDNlY291bnRbdGNdO1xcbitcXG4rXFx0XFx0Zm9yICh0eHEgPSBxb3B0LVxcdTAwM2VvZmZzZXRbdGNdO1xcbitcXHRcXHQgICAgIHR4cSBcXHUwMDNjIHFvcHQtXFx1MDAzZW9mZnNldFt0Y10gKyBxY291bnQ7IHR4cSsrKSB7XFxuK1xcdFxcdFxcdGlmICh0eHEgXFx1MDAzZT0gbnVtX3R4cSkge1xcbitcXHRcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogdHhxICVkIGV4Y2VlZHMgb2ZmbG9hZCBxdWV1ZSBjb3VudCAldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgdHhxLCBudW1fdHhxKTtcXG4rXFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwibXFwcmlvOiB0eHEgJWQgZXhjZWVkcyBvZmZsb2FkIHF1ZXVlIGNvdW50ICV1XFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHR4cSwgbnVtX3R4cSk7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIG90eDJfbXFwcmlvX3JhdGVfdmFsaWQodTY0IHJhdGVfYnl0ZXNfcHMpXFxuK3tcXG4rXFx0dTY0IG1icHM7XFxuK1xcbitcXHRpZiAoIXJhdGVfYnl0ZXNfcHMpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0aWYgKHJhdGVfYnl0ZXNfcHMgXFx1MDAzYyBPVFgyX01RUFJJT19NSU5fUkFURV9CWVRFU19QUylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKHJhdGVfYnl0ZXNfcHMgXFx1MDAzZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QUylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKHJhdGVfYnl0ZXNfcHMgXFx1MDAzZSBkaXZfdTY0KFU2NF9NQVgsIDgpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRtYnBzID0gb3R4Ml9jb252ZXJ0X3JhdGUocmF0ZV9ieXRlc19wcyk7XFxuK1xcdHJldHVybiBpbG9nMihtYnBzIC8gMikgXFx1MDAzYz0gTUFYX1JBVEVfRVhQT05FTlQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml90ZWFyZG93bl90Y19tcXByaW8oc3RydWN0IG90eDJfbmljICpwZnZmLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxcbit7XFxuK1xcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFxcdTAwMjZtcXByaW8tXFx1MDAzZXFvcHQ7XFxuK1xcdGJvb2wgaGFkX21xcHJpbyA9IHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0O1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cXHUwMDNlbmV0ZGV2O1xcbitcXHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0cW9wdC1cXHUwMDNlaHcgPSAwO1xcbitcXG4rXFx0LyogdGMgcWRpc2MgcmVwbGFjZSBydW5zIHNldHVwIG9uIHRoZSBuZXcgbXFwcmlvIGJlZm9yZSBkZXN0cm95aW5nIHRoZVxcbitcXHQgKiBvbGQgb25lLiByZXBsYWNlX3NldHVwX2RvbmUgYW5kIFRDX1JPT1RfR1JBRlQgZGlzdGluZ3Vpc2ggc3RhbGVcXG4rXFx0ICogb2xkLWluc3RhbmNlIHRlYXJkb3duIGZyb20gZ3JhZnQgZmFpbHVyZSBhZnRlciBzZXR1cC5cXG4rXFx0ICovXFxuK1xcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lIFxcdTAwMjZcXHUwMDI2IHBmdmYtXFx1MDAzZWN1cl9tcV9zbmFwKSB7XFxuK1xcdFxcdGVyciA9IDA7XFxuK1xcdFxcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lKVxcbitcXHRcXHRcXHRvdHgyX21xcHJpb19zbmFwX2NvbW1pdChwZnZmKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRlcnIgPSBvdHgyX21xcHJpb19yZXN0b3JlX29sZChwZnZmKTtcXG4rXFx0XFx0b3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShwZnZmKTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0LyogU2tpcCB0aGUgbmV0ZGV2IHJlc3RhcnQgd2hlbiBtcXByaW8gb2ZmbG9hZCB3YXMgbm90IGFjdGl2ZS4gKi9cXG4rXFx0aWYgKCFoYWRfbXFwcmlvKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChpZl91cCkge1xcbitcXHRcXHRpbnQgZG93bl9lcnIsIGVycjtcXG4rXFxuK1xcdFxcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcXG4rXFx0XFx0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYobmV0ZGV2LCBmYWxzZSk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdHJldHVybiBkb3duX2VycjtcXG4rXFx0fVxcbitcXG4rXFx0LyogbmRvX3N0b3AoKSBhbHJlYWR5IGZyZWVkIHRoZSBUWCBzY2hlZHVsZXIgVEwgbm9kZXM7IGRyb3Agc29mdHdhcmVcXG4rXFx0ICogc3RhdGUgb25seS5cXG4rXFx0ICovXFxuK1xcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHgyX3NldHVwX3RjX21xcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IG1xcHJpby1cXHUwMDNlZXh0YWNrO1xcbitcXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcXHUwMDI2bXFwcmlvLVxcdTAwM2Vxb3B0O1xcbitcXHRib29sIHJlcGxhY2luZyA9IHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0O1xcbitcXHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xcbitcXHRpbnQgdGMsIHR4cSwgZXJyLCBpO1xcbitcXG4rXFx0aWYgKCFxb3B0LVxcdTAwM2VodylcXG4rXFx0XFx0cmV0dXJuIG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XFxuK1xcbitcXHRpZiAoIWlmX3VwKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwibXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcXFxcblxcXCIpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwibXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAobXFwcmlvLVxcdTAwM2VzaGFwZXIgIT0gVENfTVFQUklPX1NIQVBFUl9CV19SQVRFKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwiVW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcXFxcblxcXCIsIG1xcHJpby1cXHUwMDNlc2hhcGVyKTtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssIFxcXCJVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBtcXByaW8tXFx1MDAzZXNoYXBlcik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCBcXHUwMDI2cGZ2Zi1cXHUwMDNlaHcuY2FwX2ZsYWcpKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCByZXF1aXJlcyBDSVIrUElSIHN1cHBvcnRcXFxcblxcXCIpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCByZXF1aXJlcyBDSVIrUElSIHN1cHBvcnRcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoaXNfb3R4Ml9zZHBfcmVwKHBmdmYtXFx1MDAzZXBkZXYpKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCBub3Qgc3VwcG9ydGVkIG9uIFNEUCByZXBcXFxcblxcXCIpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCBub3Qgc3VwcG9ydGVkIG9uIFNEUCByZXBcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocGZ2Zi1cXHUwMDNlcGZjX2VuKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcXFxcblxcXCIpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocGZ2Zi1cXHUwMDNleGRwX3Byb2cpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlXFxcXG5cXFwiKTtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmVcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKHRjID0gMDsgdGMgXFx1MDAzYyBxb3B0LVxcdTAwM2VudW1fdGM7IHRjKyspIHtcXG4rXFx0XFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xcbitcXHRcXHR1MzIgcWNvdW50ID0gcW9wdC1cXHUwMDNlY291bnRbdGNdO1xcbitcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcXG4rXFx0XFx0XFx0bWluX3JhdGUgPSBtcXByaW8tXFx1MDAzZW1pbl9yYXRlW3RjXTtcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcXG4rXFx0XFx0XFx0bWF4X3JhdGUgPSBtcXByaW8tXFx1MDAzZW1heF9yYXRlW3RjXTtcXG4rXFxuK1xcdFxcdGlmIChtaW5fcmF0ZSBcXHUwMDI2XFx1MDAyNiBtYXhfcmF0ZSBcXHUwMDI2XFx1MDAyNiBtaW5fcmF0ZSBcXHUwMDNlIG1heF9yYXRlKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTtcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwibWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSkge1xcbitcXHRcXHRcXHRlcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtaW5fcmF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgcWNvdW50LCB0YywgXFxcIm1pblxcXCIpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKSB7XFxuK1xcdFxcdFxcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBleHRhY2ssIG1heF9yYXRlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBxY291bnQsIHRjLCBcXFwibWF4XFxcIik7XFxuK1xcdFxcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG1pbl9yYXRlKSkge1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIG1pbl9yYXRlLCB0Yyk7XFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIm1xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgbWluX3JhdGUsIHRjKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG1heF9yYXRlKSkge1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIG1heF9yYXRlLCB0Yyk7XFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIm1xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgbWF4X3JhdGUsIHRjKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdHhxcyhuZXRkZXYsIGV4dGFjaywgcW9wdCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRlcnIgPSBvdHgyX21xcHJpb19zdGFnZV9jdXIocGZ2ZiwgbXFwcmlvKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHBmdmYtXFx1MDAzZW5ldGRldiwgdHJ1ZSk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYsIHJlcGxhY2luZyk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIG90eDJfbXFwcmlvX3VwKCkgbWF5IGhhdmUgcmVzdG9yZWQgdGhlIHByZXZpb3VzIGNvbmZpZ3VyYXRpb24gZHVyaW5nXFxuK1xcdCAqIHRoZSByZXN0YXJ0IGFib3ZlLiBDbGVhciBldmVyeSBNRFEgc2hhcGVyIGJlZm9yZSBhcHBseWluZyB0aGUgbmV3XFxuK1xcdCAqIG1hcHBpbmcgc28gcXVldWVzIGRyb3BwZWQgZnJvbSB0aGUgVEMgbGF5b3V0IGRvIG5vdCBrZWVwIHN0YWxlXFxuK1xcdCAqIGxpbWl0cyBpbiBoYXJkd2FyZS5cXG4rXFx0ICovXFxuK1xcdGlmIChvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKSB7XFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHR9XFxuK1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8uZmxhZ3MgPSBtcXByaW8tXFx1MDAzZWZsYWdzO1xcbitcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgcW9wdC1cXHUwMDNlbnVtX3RjOyB0YysrKSB7XFxuK1xcdFxcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcXG4rXFx0XFx0dTMyIHFjb3VudCA9IHFvcHQtXFx1MDAzZWNvdW50W3RjXTtcXG4rXFxuK1xcdFxcdC8qIFJhdGVzIG9taXR0ZWQgZnJvbSB0YyBtcXByaW8gYXJlIHBhc3NlZCBhcyB6ZXJvIGFuZCBib3RoIE1EUVxcbitcXHRcXHQgKiBzaGFwZXIgcmVnaXN0ZXJzIGFyZSBwcm9ncmFtbWVkOyBzZWVcXG4rXFx0XFx0ICogb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcigpLiBNdWx0aS1xdWV1ZSBUQ3Mgd2l0aCByYXRlc1xcbitcXHRcXHQgKiBhcmUgcmVqZWN0ZWQgYWJvdmUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxcbitcXHRcXHRcXHRtaW5fcmF0ZSA9IG1xcHJpby1cXHUwMDNlbWluX3JhdGVbdGNdO1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxcbitcXHRcXHRcXHRtYXhfcmF0ZSA9IG1xcHJpby1cXHUwMDNlbWF4X3JhdGVbdGNdO1xcbitcXG4rXFx0XFx0Zm9yICh0eHEgPSBxb3B0LVxcdTAwM2VvZmZzZXRbdGNdO1xcbitcXHRcXHQgICAgIHR4cSBcXHUwMDNjIHFvcHQtXFx1MDAzZW9mZnNldFt0Y10gKyBxY291bnQ7IHR4cSsrKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9kYmcobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiB0YyAlZCB0eHEgJWQgbWluX3JhdGUgJWxsdSBtYXhfcmF0ZSAlbGx1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICB0YywgdHhxLCBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xcbitcXG4rXFx0XFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcXG4rXFx0XFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlW3R4cV0gPSBtYXhfcmF0ZTtcXG4rXFxuK1xcdFxcdFxcdGVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCBwZnZmLVxcdTAwM2VjdXJfbXFfc25hcC1cXHUwMDNlbnVtX3RjKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBmdmYtXFx1MDAzZWN1cl9tcV9zbmFwLVxcdTAwM2VudW1fdGM7IGkrKylcXG4rXFx0XFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIGksIHBmdmYtXFx1MDAzZWN1cl9tcV9zbmFwLVxcdTAwM2Vjb3VudFtpXSxcXG4rXFx0XFx0XFx0XFx0ICAgIHFvcHQtXFx1MDAzZW9mZnNldFtpXSk7XFxuK1xcbitcXHRxb3B0LVxcdTAwM2VodyA9IFRDX01RUFJJT19IV19PRkZMT0FEX1RDUztcXG4rXFxuK1xcdGlmIChyZXBsYWNpbmcpIHtcXG4rXFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSA9IHRydWU7XFxuK1xcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSBmYWxzZTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0b3R4Ml9tcXByaW9fc25hcF9jb21taXQocGZ2Zik7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rY2xlYW51cDpcXG4rXFx0cW9wdC1cXHUwMDNlaHcgPSAwO1xcbitcXHRpZiAocmVwbGFjaW5nKSB7XFxuK1xcdFxcdGludCByZXN0b3JlX2VyciA9IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHBmdmYpO1xcbitcXG4rXFx0XFx0b3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShwZnZmKTtcXG4rXFx0XFx0aWYgKHJlc3RvcmVfZXJyKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiByZXBsYWNlIGZhaWxlZCBhbmQgcHJpb3IgY29uZmlndXJhdGlvbiByb2xsYmFjayBmYWlsZWQ6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICByZXN0b3JlX2Vycik7XFxuK1xcdFxcdFxcdGlmIChleHRhY2spXFxuK1xcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIm1xcHJpbzogcmVwbGFjZSBmYWlsZWQgYW5kIHByaW9yIGNvbmZpZ3VyYXRpb24gcm9sbGJhY2sgZmFpbGVkOiAlZFxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICByZXN0b3JlX2Vycik7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiByZXBsYWNlIGZhaWxlZDsgcHJpb3IgY29uZmlndXJhdGlvbiByZXN0b3JlZFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGlmIChleHRhY2spXFxuK1xcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IHJlcGxhY2UgZmFpbGVkOyBwcmlvciBjb25maWd1cmF0aW9uIHJlc3RvcmVkXFxcIik7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmV0dXJuIGVyciA/IGVyciA6IC1FSU87XFxuK1xcdH1cXG4rXFx0b3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHgyX3NldHVwX3RjX3Jvb3Qoc3RydWN0IG90eDJfbmljICpwZnZmLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGNfcm9vdF9xb3B0X29mZmxvYWQgKnJvb3QpXFxuK3tcXG4rXFx0c3dpdGNoIChyb290LVxcdTAwM2Vjb21tYW5kKSB7XFxuK1xcdGNhc2UgVENfUk9PVF9HUkFGVDpcXG4rXFx0XFx0aWYgKHBmdmYtXFx1MDAzZW1xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUpXFxuK1xcdFxcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSB0cnVlO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHZvaWQgKnR5cGVfZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlID0gdHlwZV9kYXRhO1xcbitcXHRzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHM7XFxuK1xcbitcXHRpZiAoYmFzZS1cXHUwMDNldHlwZSAhPSBUQ19TRVRVUF9RRElTQ19NUVBSSU8pXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGNhcHMgPSBiYXNlLVxcdTAwM2VjYXBzO1xcbitcXHRjYXBzLVxcdTAwM2V2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIGludCBvdHgyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxcbiBcXHRcXHQgIHZvaWQgKnR5cGVfZGF0YSlcXG4ge1xcbiBcXHRzd2l0Y2ggKHR5cGUpIHtcXG4rXFx0Y2FzZSBUQ19RVUVSWV9DQVBTOlxcbitcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHR5cGVfZGF0YSk7XFxuIFxcdGNhc2UgVENfU0VUVVBfQkxPQ0s6XFxuIFxcdFxcdHJldHVybiBvdHgyX3NldHVwX3RjX2Jsb2NrKG5ldGRldiwgdHlwZV9kYXRhKTtcXG4gXFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19IVEI6XFxuIFxcdFxcdHJldHVybiBvdHgyX3NldHVwX3RjX2h0YihuZXRkZXYsIHR5cGVfZGF0YSk7XFxuK1xcdGNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOlxcbitcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19tcXByaW8obmV0ZGV2LCB0eXBlX2RhdGEpO1xcbitcXHRjYXNlIFRDX1NFVFVQX1JPT1RfUURJU0M6XFxuK1xcdFxcdHJldHVybiBvdHgyX3NldHVwX3RjX3Jvb3QobmV0ZGV2X3ByaXYobmV0ZGV2KSwgdHlwZV9kYXRhKTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXHR9XFxuQEAgLTE2MzIsNiArMjMzNiw3IEBAIEVYUE9SVF9TWU1CT0wob3R4Ml9pbml0X3RjKTtcXG4gdm9pZCBvdHgyX3NodXRkb3duX3RjKHN0cnVjdCBvdHgyX25pYyAqbmljKVxcbiB7XFxuIFxcdG90eDJfZGVzdHJveV90Y19mbG93X2xpc3QobmljKTtcXG4rXFx0b3R4Ml9tcXByaW9fc25hcF9kZXN0cm95KG5pYyk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChvdHgyX3NodXRkb3duX3RjKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xcbmluZGV4IDY5YzA5MTFlMjhlOTEuLmQ5YWYxODJlNTcyMWQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXFxuQEAgLTExOCw2ICsxMTgsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2NvbmZpZ19zY2hlZF9zaGFwaW5nKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4gXFx0LyogY29uZmlndXJlIFBJUiAqL1xcbiBcXHRtYXhyYXRlID0gKG5vZGUtXFx1MDAzZXJhdGUgXFx1MDAzZSBub2RlLVxcdTAwM2VjZWlsKSA/IG5vZGUtXFx1MDAzZXJhdGUgOiBub2RlLVxcdTAwM2VjZWlsO1xcbiBcXG4rXFx0LyogNjU1MzYgaXMgdGhlIGtlcm5lbC1zaWRlIGRlZmF1bHQgYnVyc3Qgd2hlbiBIVEIgZG9lcyBub3Qgc3VwcGx5IGFuXFxuK1xcdCAqIGV4cGxpY2l0IHZhbHVlLCBub3QgdGhlIE5JWCBoYXJkd2FyZSBtYXhpbXVtIChDTjEwS19NQVhfQlVSU1RfU0laRSkuXFxuK1xcdCAqL1xcbiBcXHRjZmctXFx1MDAzZXJlZ3ZhbFsqbnVtX3JlZ3NdID1cXG4gXFx0XFx0b3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIG1heHJhdGUsIDY1NTM2KTtcXG4gXFx0KCpudW1fcmVncykrKztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDM6Mzk6NDUuODAxNDU4OTczWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMjEzMDExMTA5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIG9ubHkgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIG5ldHdvcmsgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi8pLCBhZGRpbmcgc3VwcG9ydCBmb3IgbXFwcmlvIGhhcmR3YXJlIGJhbmR3aWR0aCBvZmZsb2FkLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDL1NvQyBkcml2ZXIgcmVxdWlyaW5nIHBoeXNpY2FsIE1hcnZlbGwgT2N0ZW9uVFgyIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGExMTM2NWU2ODFhZWUzOTRiNWVjN2QwMGY4ZGZjNTE3Y2Y2YzhmZWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDAzOjM5OjQ0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXG5pbmRleCAxNTNlYjU3YmFkMDY3Li5jOWE0MzI2ZDcyNWQ4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbkBAIC0zMzEsOCArMzMxLDEyIEBAIHN0YXRpYyBib29sIGlzX3ZhbGlkX3R4c2NocShzdHJ1Y3QgcnZ1ICpydnUsIGludCBibGthZGRyLFxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuLVx0aWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpXG4rXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYykge1xuK1x0XHRkZXZfZXJyX3JhdGVsaW1pdGVkKHJ2dS1cdTAwM2VkZXYsXG4rXHRcdFx0XHQgICAgXCJwY2lmdW5jICV4IG1hcCBwY2lmdW5jICV4IG5vdCBlcXVhbCwgbHZsPSV1IHNjaHE9JXVcXG5cIixcbitcdFx0XHRcdCAgICBwY2lmdW5jLCBtYXBfZnVuYywgbHZsLCBzY2hxKTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuIFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcbmluZGV4IDE3NTk5MjE4OGMxOGEuLmE1MTllMGE5N2EyYjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcbkBAIC02MTUsNiArNjE1LDE0MiBAQCB2b2lkIG90eDJfZ2V0X21hY19mcm9tX2FmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0wob3R4Ml9nZXRfbWFjX2Zyb21fYWYpO1xuIFxuK3N0YXRpYyBpbnRcbitvdHgyX25peF90bXFfcmVnX3dyaXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGNudCxcbitcdFx0ICAgICAgIHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddLFxuK1x0XHQgICAgICAgdTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSlcbit7XG4rXHRzdHJ1Y3QgbWJveCAqbWJveCA9IFx1MDAyNnBmdmYtXHUwMDNlbWJveDtcbitcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xuK1x0aW50IGksIGVycjtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XG4rXHRpZiAoIXJlcSkge1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRyZXEtXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XG4rXHRyZXEtXHUwMDNlbnVtX3JlZ3MgPSBjbnQ7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjbnQ7IGkrKykge1xuK1x0XHRyZXEtXHUwMDNlcmVnW2ldID0gcmVnX2FkZHJbaV07XG4rXHRcdHJlcS1cdTAwM2VyZWd2YWxbaV0gPSByZWdfdmFsW2ldO1xuK1x0fVxuK1xuK1x0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHR1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcbitcdHU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR107XG4rXHRpbnQgZXJyLCBzbXEsIGksIGNudCA9IDA7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdOyBpKyspIHtcbitcdFx0c21xID0gcGZ2Zi1cdTAwM2Vody50eHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1NNUV1baV07XG4rXG4rXHRcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbitcdFx0cmVnX3ZhbFtjbnRdID0gMDtcbitcdFx0Y250Kys7XG4rXG4rXHRcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbitcdFx0cmVnX3ZhbFtjbnRdID0gMDtcbitcdFx0Y250Kys7XG4rXG4rXHRcdGlmIChjbnQgXHUwMDNjIE1BWF9SRUdTX1BFUl9NQk9YX01TRyAtIDEpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LFxuK1x0XHRcdFx0XHQgICAgIHJlZ19hZGRyLCByZWdfdmFsKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGZhaWw7XG4rXHRcdGNudCA9IDA7XG4rXHR9XG4rXG4rXHRpZiAoY250KSB7XG4rXHRcdGVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LFxuK1x0XHRcdFx0XHQgICAgIHJlZ19hZGRyLCByZWdfdmFsKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGZhaWw7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbitmYWlsOlxuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4raW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLFxuK1x0XHRcdFx0IGludCB0eHEsIHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSlcbit7XG4rXHRzdHJ1Y3QgbWJveCAqbWJveCA9IFx1MDAyNnBmdmYtXHUwMDNlbWJveDtcbitcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xuK1x0aW50IGVyciwgc21xLCBuID0gMDtcbitcdHU2NCByZWdfYWRkclsyXTtcbitcdHU2NCByZWdfdmFsWzJdO1xuK1x0dTY0IHJhdGU7XG4rXG4rXHRpZiAoIW1heHJhdGUgXHUwMDI2XHUwMDI2ICFtaW5yYXRlKSB7XG4rXHRcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTtcbitcdFx0cmVnX2FkZHJbMF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbitcdFx0cmVnX3ZhbFswXSA9IDA7XG4rXHRcdHJlZ19hZGRyWzFdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XG4rXHRcdHJlZ192YWxbMV0gPSAwO1xuK1x0XHRyZXR1cm4gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCAyLCByZWdfYWRkciwgcmVnX3ZhbCk7XG4rXHR9XG4rXG4rXHRzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4rXHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpO1xuK1x0aWYgKCFyZXEpIHtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0cmVxLVx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xuK1xuK1x0LyogTVFQUklPIGV4cG9zZXMgb25seSBtaW4vbWF4IHJhdGUsIG5vdCBidXJzdC4gIFBhc3MgYnVyc3QgMCBzb1xuK1x0ICogb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZygpIHByb2dyYW1tZXMgdGhlIGxhcmdlc3QgYnVyc3QgdGhlIE5JWFxuK1x0ICogZW5jb2Rpbmcgc3VwcG9ydHMgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uIENOMTBLKS4gIFRoaXMgZGlmZmVyc1xuK1x0ICogZnJvbSB0aGUgNjU1MzYgYnl0ZSBkZWZhdWx0IHVzZWQgaW4gdGhlIEhUQiBwYXRoLCB3aGljaCBpcyBhXG4rXHQgKiBrZXJuZWwtc2lkZSBkZWZhdWx0IHdoZW4gbm8gZXhwbGljaXQgYnVyc3QgaXMgY29uZmlndXJlZCwgbm90IGFcbitcdCAqIGhhcmR3YXJlIGNhcC5cbitcdCAqXG4rXHQgKiBtcXByaW8gc2V0dXAgcmVzdGFydHMgdGhlIG5ldGRldiAob3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYpLFxuK1x0ICogd2hpY2ggcmVzZXRzIE1EUSBzaGFwZXJzIHRvIHplcm8uICBQcm9ncmFtIGJvdGggUElSIGFuZCBDSVIgb25cbitcdCAqIGV2ZXJ5IHVwZGF0ZSBzbyBvbWl0dGVkIHJhdGVzIGFyZSBhcHBsaWVkIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW5cbitcdCAqIHJlbHlpbmcgb24gc3RhbGUgaGFyZHdhcmUgc3RhdGUuXG4rXHQgKi9cbitcdHJlcS1cdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbitcdGlmIChtYXhyYXRlKSB7XG4rXHRcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtYXhyYXRlKTtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcbitcdH0gZWxzZSB7XG4rXHRcdHJlcS1cdTAwM2VyZWd2YWxbbl0gPSAwO1xuK1x0fVxuK1x0bisrO1xuK1xuK1x0LyogQ0lSK1BJUiBzdXBwb3J0IGlzIHJlcXVpcmVkIGFuZCBjaGVja2VkIGF0IG1xcHJpbyBzZXR1cC4gKi9cbitcdHJlcS1cdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbitcdGlmIChtaW5yYXRlKSB7XG4rXHRcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtaW5yYXRlKTtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcbitcdH0gZWxzZSB7XG4rXHRcdHJlcS1cdTAwM2VyZWd2YWxbbl0gPSAwO1xuK1x0fVxuK1x0bisrO1xuK1x0cmVxLVx1MDAzZW51bV9yZWdzID0gbjtcbitcbitcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4gaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JfcGZjKVxuIHtcbiBcdHUxNiAoKnNjaHFfbGlzdClbTUFYX1RYU0NIUV9QRVJfRlVOQ107XG5AQCAtNjUxLDcgKzc4NywxMSBAQCBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2ZvclxuIFx0XHRcdFx0XHRcdCh1NjQpaHctXHUwMDNlc21xX2xpbmtfdHlwZSk7XG4gXHRcdHJlcS1cdTAwM2VudW1fcmVncysrO1xuIFx0XHQvKiBNRFEgY29uZmlnICovXG4tXHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XG4rXHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxuK1x0XHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bMF07XG4rXHRcdGVsc2VcbitcdFx0XHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dO1xuK1xuIFx0XHRyZXEtXHUwMDNlcmVnWzFdID0gTklYX0FGX01EUVhfUEFSRU5UKHNjaHEpO1xuIFx0XHRyZXEtXHUwMDNlcmVndmFsWzFdID0gcGFyZW50IFx1MDAzY1x1MDAzYyAxNjtcbiBcdFx0cmVxLVx1MDAzZW51bV9yZWdzKys7XG5AQCAtNzc5LDYgKzkxOSw5IEBAIGludCBvdHgyX3R4c2NoX2FsbG9jKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiBcdFx0cmVxLVx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9UTDRdID0gY2hhbl9jbnQ7XG4gXHR9XG4gXG4rXHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcbitcdFx0cmVxLVx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9TTVFdID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbitcbiBcdHJjID0gb3R4Ml9zeW5jX21ib3hfbXNnKFx1MDAyNnBmdmYtXHUwMDNlbWJveCk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbkBAIC04NDQsNiArOTg3LDcgQEAgdm9pZCBvdHgyX3R4c2NocV9zdG9wKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiBcbiBcdC8qIENsZWFyIHRoZSB0eHNjaHEgbGlzdCAqL1xuIFx0Zm9yIChsdmwgPSAwOyBsdmwgXHUwMDNjIE5JWF9UWFNDSF9MVkxfQ05UOyBsdmwrKykge1xuK1x0XHRwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbbHZsXSA9IDA7XG4gXHRcdGZvciAoc2NocSA9IDA7IHNjaHEgXHUwMDNjIE1BWF9UWFNDSFFfUEVSX0ZVTkM7IHNjaHErKylcbiBcdFx0XHRwZnZmLVx1MDAzZWh3LnR4c2NocV9saXN0W2x2bF1bc2NocV0gPSAwO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcbmluZGV4IGVlY2VlNjEyYjdiMmMuLmVkZTdmMTExM2I3MTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcbkBAIC0xNyw2ICsxNyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc29jL21hcnZlbGwvc2lsaWNvbnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvYy9tYXJ2ZWxsL29jdGVvbnR4Mi9hc20uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9tYWNzZWMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvcGt0X3NjaGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RldmxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWU2NC5oXHUwMDNlXG5AQCAtNDgzLDYgKzQ4NCwyMyBAQCBzdHJ1Y3QgcGZfaXJxX2RhdGEge1xuIFx0aW50IG1kZXZzO1xuIH07XG4gXG4rc3RydWN0IG1xX29mZmxvYWRfc25hcCB7XG4rXHR1NjQgbWluX3JhdGVbVENfUU9QVF9NQVhfUVVFVUVdO1xuK1x0dTY0IG1heF9yYXRlW1RDX1FPUFRfTUFYX1FVRVVFXTtcbitcdF9fdTggbnVtX3RjO1xuK1x0X191MTYgY291bnRbVENfUU9QVF9NQVhfUVVFVUVdO1xuK1x0X191MTYgb2Zmc2V0W1RDX1FPUFRfTUFYX1FVRVVFXTtcbit9O1xuK1xuK3N0cnVjdCBvdHgyX21xcHJpbyB7XG4rXHR1MzJcdGZsYWdzO1xuK1x0dTY0XHQqbWluX3JhdGU7XG4rXHR1NjRcdCptYXhfcmF0ZTtcbitcdGJvb2xcdHJhdGVfbGltaXQ7XG4rXHRib29sXHRyZXBsYWNlX3NldHVwX2RvbmU7XG4rXHRib29sXHRyZXBsYWNlX2dyYWZ0X2RvbmU7XG4rfTtcbitcbiBzdHJ1Y3Qgb3R4Ml9uaWMge1xuIFx0dm9pZCBfX2lvbWVtXHRcdCpyZWdfYmFzZTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlXHQqbmV0ZGV2O1xuQEAgLTUxNSw2ICs1MzMsMTAgQEAgc3RydWN0IG90eDJfbmljIHtcbiBcdHU2NFx0XHRcdGZsYWdzO1xuIFx0dTY0XHRcdFx0KmNxX29wX2FkZHI7XG4gXG4rXHRzdHJ1Y3Qgb3R4Ml9tcXByaW9cdG1xcHJpbztcbitcdHN0cnVjdCBtcV9vZmZsb2FkX3NuYXBcdCpjdXJfbXFfc25hcDtcbitcdHN0cnVjdCBtcV9vZmZsb2FkX3NuYXBcdCpvbGRfbXFfc25hcDtcbitcbiBcdHN0cnVjdCBicGZfcHJvZ1x0XHQqeGRwX3Byb2c7XG4gXHRzdHJ1Y3Qgb3R4Ml9xc2V0XHRxc2V0O1xuIFx0c3RydWN0IG90eDJfaHdcdFx0aHc7XG5AQCAtMTI0Niw2ICsxMjY4LDExIEBAIGRtYV9hZGRyX3Qgb3R4Ml9kbWFfbWFwX3NrYl9mcmFnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc2VnLCBpbnQgKmxlbik7XG4gdm9pZCBvdHgyX2RtYV91bm1hcF9za2JfZnJhZ3Moc3RydWN0IG90eDJfbmljICpwZnZmLCBzdHJ1Y3Qgc2dfbGlzdCAqc2cpO1xuIGludCBvdHgyX3JlYWRfZnJlZV9zcWUoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgcWlkeCk7XG4raW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgdHhxLFxuK1x0XHRcdFx0IHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSk7XG4raW50IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuK2ludCBvdHgyX21xcHJpb19kb3duKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4raW50IG90eDJfbXFwcmlvX3VwKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4gdm9pZCBvdHgyX3F1ZXVlX3ZmX3dvcmsoc3RydWN0IG1ib3ggKm13LCBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbWJveF93cSxcbiBcdFx0XHRpbnQgZmlyc3QsIGludCBtZGV2cywgdTY0IGludHIpO1xuIGludCBvdHgyX2RlbF9tY2FtX2Zsb3dfZW50cnkoc3RydWN0IG90eDJfbmljICpuaWMsIHUxNiBlbnRyeSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuaW5kZXggZjExMGRmYTQyMzYwNS4uNGE3MGFiYzIzMGJlYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNcbkBAIC00MTMsNiArNDEzLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml9kY2JubF9pZWVlX3NldHBmYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWVlZV9wZmMgKnBmYylcbiBcdHU4IG9sZF9wZmNfZW47XG4gXHRpbnQgZXJyO1xuIFxuK1x0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgXHUwMDI2XHUwMDI2IHBmYy1cdTAwM2VwZmNfZW4pIHtcbitcdFx0bmV0ZGV2X2VycihkZXYsXG4rXHRcdFx0ICAgXCJQRkM6IGNhbm5vdCBlbmFibGUgd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcblwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuIFx0b2xkX3BmY19lbiA9IHBmdmYtXHUwMDNlcGZjX2VuO1xuIFx0cGZ2Zi1cdTAwM2VwZmNfZW4gPSBwZmMtXHUwMDNlcGZjX2VuO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xuaW5kZXggOWJlZTFiOTFlZWFhNi4uZWMyNjAxYzZjMjU1YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG5AQCAtMjg3LDYgKzI4NywxNCBAQCBzdGF0aWMgaW50IG90eDJfc2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuK1x0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgXHUwMDI2XHUwMDI2XG4rXHQgICAgKGNoYW5uZWwtXHUwMDNldHhfY291bnQgIT0gcGZ2Zi1cdTAwM2Vody50eF9xdWV1ZXMgfHxcbitcdCAgICAgY2hhbm5lbC1cdTAwM2VyeF9jb3VudCAhPSBwZnZmLVx1MDAzZWh3LnJ4X3F1ZXVlcykpIHtcbitcdFx0bmV0ZGV2X2luZm8oZGV2LFxuK1x0XHRcdCAgICBcIk5vdCBwZXJtaXR0ZWQgdG8gY2hhbmdlIGNoYW5uZWwgY291bnQgd2hpbGUgTVEgcHJpbyBpcyBhY3RpdmVcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuIFx0aWYgKGlmX3VwKVxuIFx0XHRkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc3RvcChkZXYpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG5pbmRleCBjOTk1ZjI5MDA4NTkwLi43OWE4MmU0NDU0NTQ2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xuQEAgLTE5ODAsNiArMTk4MCwxMiBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9mcmVlX21lbTtcbiBcbitcdGVyciA9IG90eDJfbXFwcmlvX3VwKHBmKTtcbitcdGlmIChlcnIpXG4rXHRcdG5ldGRldl9lcnIocGYtXHUwMDNlbmV0ZGV2LFxuK1x0XHRcdCAgIFwibXFwcmlvOiBmYWlsZWQgdG8gcmVzdG9yZSBzaGFwZXJzIGR1cmluZyBvcGVuOiAlZDsgY29udGludWluZyB3aXRob3V0IGJhbmR3aWR0aCBsaW1pdHNcXG5cIixcbitcdFx0XHQgICBlcnIpO1xuK1xuIFx0LyogUmVnaXN0ZXIgTkFQSSBoYW5kbGVyICovXG4gXHRmb3IgKHFpZHggPSAwOyBxaWR4IFx1MDAzYyBwZi1cdTAwM2Vody5jaW50X2NudDsgcWlkeCsrKSB7XG4gXHRcdGNxX3BvbGwgPSBcdTAwMjZxc2V0LVx1MDAzZW5hcGlbcWlkeF07XG5AQCAtMjg0Niw2ICsyODUyLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml94ZHBfc2V0dXAoc3RydWN0IG90eDJfbmljICpwZiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuIFx0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcocGYtXHUwMDNlbmV0ZGV2KTtcbiBcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7XG4gXG4rXHRpZiAocHJvZyBcdTAwMjZcdTAwMjYgcGYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpIHtcbitcdFx0bmV0ZGV2X2VycihkZXYsXG4rXHRcdFx0ICAgXCJYRFA6IGNhbm5vdCBhdHRhY2ggd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcblwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuIFx0aWYgKHByb2cgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VtdHUgXHUwMDNlIE1BWF9YRFBfTVRVKSB7XG4gXHRcdG5ldGRldl93YXJuKGRldiwgXCJKdW1ibyBmcmFtZXMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCBYRFBcXG5cIik7XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xuaW5kZXggMDM5ZmQ0N2ViZjUyMi4uNDA5MDI5NmVkZmM1YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcbkBAIC0xNiw2ICsxNiw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjX2FjdC90Y19taXJyZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y19hY3QvdGNfdmxhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9wa3Rfc2NoZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9zY2hfZ2VuZXJpYy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJjbjEway5oXCJcbiAjaW5jbHVkZSBcIm90eDJfY29tbW9uLmhcIlxuQEAgLTMxLDYgKzMzLDEwIEBAXG4gXG4gI2RlZmluZSBNQ0FTVF9JTlZBTElEX0dSUFx0XHQoLTFVKVxuICNkZWZpbmUgUkFURV9NQU5USVNTQV9CSVRTXHRcdDhcbisvKiBNaW4gcGVyLXF1ZXVlIGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMiBNYnBzKS4gKi9cbisjZGVmaW5lIE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTXHQyNTAwMDBVTExcbisvKiBNYXggZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgxMzA4MTYgTWJwcykuICovXG4rI2RlZmluZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QU1x0KChNQVhfQlVSU1RfU0laRSAqIDEwMDAwMDBVTEwpIC8gOFVMTClcbiBcbiBzdGF0aWMgdm9pZCBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MzIgYnVyc3QsXG4gXHRcdFx0XHQgICAgICB1MzIgKmJ1cnN0X2V4cCwgdTMyICpidXJzdF9tYW50aXNzYSlcbkBAIC02MSw2ICs2Nyw5IEBAIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcbiBcdFx0XHQqYnVyc3RfbWFudGlzc2EgPSB0bXAgLyAoMVVMTCBcdTAwM2NcdTAwM2MgKCpidXJzdF9leHAgLSA3KSk7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4rXHRcdC8qIGJ1cnN0IDA6IGxhcmdlc3QgZW5jb2RhYmxlIGJ1cnN0IChDTjEwS19NQVhfQlVSU1RfU0laRSBvblxuK1x0XHQgKiBDTjEwSyksIG5vdCBhIG1pbmltYWwgYnVyc3QuXG4rXHRcdCAqL1xuIFx0XHQqYnVyc3RfZXhwID0gTUFYX0JVUlNUX0VYUE9ORU5UO1xuIFx0XHQqYnVyc3RfbWFudGlzc2EgPSBtYXhfbWFudGlzc2E7XG4gXHR9XG5AQCAtMTYwMCwxNCArMTYwOSw3MDkgQEAgc3RhdGljIGludCBvdHgyX3NldHVwX3RjX2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdCAgbmljLCBuaWMsIGluZ3Jlc3MpO1xuIH1cbiBcbisvKiBGcmVlIHRoZSBwZXItcXVldWUgbWluL21heCByYXRlIGNhY2hlcy4gKi9cbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19mcmVlX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRkZXZtX2tmcmVlKHBmdmYtXHUwMDNlZGV2LCBwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSk7XG4rXHRkZXZtX2tmcmVlKHBmdmYtXHUwMDNlZGV2LCBwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSk7XG4rXHRwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IE5VTEw7XG4rXHRwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSA9IE5VTEw7XG4rXHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmLCBib29sIHJlcGxhY2luZylcbit7XG4rXHR1MTYgbnVtX3R4cSA9IHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XG4rXG4rXHRpZiAocmVwbGFjaW5nIFx1MDAyNlx1MDAyNiBwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSBcdTAwMjZcdTAwMjYgcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpIHtcbitcdFx0bWVtc2V0KHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlLCAwLFxuK1x0XHQgICAgICAgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUpKTtcbitcdFx0bWVtc2V0KHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlLCAwLFxuK1x0XHQgICAgICAgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpKTtcbitcdFx0cGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgPSAwO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4rXG4rXHRwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVx1MDAzZWRldiwgbnVtX3R4cSxcbitcdFx0XHRcdFx0ICAgICBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlKSxcbitcdFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMKTtcbitcdHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtXHUwMDNlZGV2LCBudW1fdHhxLFxuK1x0XHRcdFx0XHQgICAgIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpLFxuK1x0XHRcdFx0XHQgICAgIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSB8fCAhcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpIHtcbitcdFx0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fc25hcF9mcmVlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbitcdFx0XHRcdCAgc3RydWN0IG1xX29mZmxvYWRfc25hcCAqKnNuYXApXG4re1xuK1x0aWYgKCEqc25hcClcbitcdFx0cmV0dXJuO1xuK1xuK1x0ZGV2bV9rZnJlZShwZnZmLVx1MDAzZWRldiwgKnNuYXApO1xuK1x0KnNuYXAgPSBOVUxMO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3NuYXBfY29weShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4rXHRcdFx0XHQgc3RydWN0IG1xX29mZmxvYWRfc25hcCAqKmRzdCxcbitcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuK3tcbitcdGNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFx1MDAyNm1xcHJpby1cdTAwM2Vxb3B0O1xuK1x0c3RydWN0IG1xX29mZmxvYWRfc25hcCAqc25hcDtcbitcdGludCB0YztcbitcbitcdGlmICghKmRzdCkge1xuK1x0XHRzbmFwID0gZGV2bV9remFsbG9jKHBmdmYtXHUwMDNlZGV2LCBzaXplb2YoKnNuYXApLCBHRlBfS0VSTkVMKTtcbitcdFx0aWYgKCFzbmFwKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHQqZHN0ID0gc25hcDtcbitcdH0gZWxzZSB7XG4rXHRcdHNuYXAgPSAqZHN0O1xuK1x0fVxuK1xuK1x0c25hcC1cdTAwM2VudW1fdGMgPSBxb3B0LVx1MDAzZW51bV90YztcbitcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgVENfUU9QVF9NQVhfUVVFVUU7IHRjKyspIHtcbitcdFx0c25hcC1cdTAwM2Vjb3VudFt0Y10gPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbitcdFx0c25hcC1cdTAwM2VvZmZzZXRbdGNdID0gcW9wdC1cdTAwM2VvZmZzZXRbdGNdO1xuK1x0XHRzbmFwLVx1MDAzZW1pbl9yYXRlW3RjXSA9IDA7XG4rXHRcdHNuYXAtXHUwMDNlbWF4X3JhdGVbdGNdID0gMDtcbitcdH1cbitcbitcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IHRjKyspIHtcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXG4rXHRcdFx0c25hcC1cdTAwM2VtaW5fcmF0ZVt0Y10gPSBtcXByaW8tXHUwMDNlbWluX3JhdGVbdGNdO1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcbitcdFx0XHRzbmFwLVx1MDAzZW1heF9yYXRlW3RjXSA9IG1xcHJpby1cdTAwM2VtYXhfcmF0ZVt0Y107XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBvdHgyX21xcHJpb19zdGFnZV9jdXIoc3RydWN0IG90eDJfbmljICpwZnZmLFxuK1x0XHRcdFx0IGNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4re1xuK1x0cmV0dXJuIG90eDJfbXFwcmlvX3NuYXBfY29weShwZnZmLCBcdTAwMjZwZnZmLVx1MDAzZWN1cl9tcV9zbmFwLCBtcXByaW8pO1xuK31cbitcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19zbmFwX2NvbW1pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0b3R4Ml9tcXByaW9fc25hcF9mcmVlKHBmdmYsIFx1MDAyNnBmdmYtXHUwMDNlb2xkX21xX3NuYXApO1xuK1x0cGZ2Zi1cdTAwM2VvbGRfbXFfc25hcCA9IHBmdmYtXHUwMDNlY3VyX21xX3NuYXA7XG4rXHRwZnZmLVx1MDAzZWN1cl9tcV9zbmFwID0gTlVMTDtcbit9XG4rXG4rc3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lID0gZmFsc2U7XG4rXHRwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSBmYWxzZTtcbit9XG4rXG4rc3RhdGljIGJvb2wgb3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0cmV0dXJuIHBmdmYtXHUwMDNlaHcudHhzY2hxX2NudFtOSVhfVFhTQ0hfTFZMX01EUV0gIT0gMDtcbit9XG4rXG4rc3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0b3JlX29sZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0c3RydWN0IG1xX29mZmxvYWRfc25hcCAqc25hcCA9IHBmdmYtXHUwMDNlb2xkX21xX3NuYXA7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4rXHR1MTYgbnVtX3R4cSA9IHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XG4rXHRpbnQgdGMsIHR4cSwgZXJyO1xuK1xuK1x0aWYgKCFzbmFwKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYsIGZhbHNlKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRtZW1zZXQocGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUsIDAsIG51bV90eHEgKiBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlKSk7XG4rXHRtZW1zZXQocGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUsIDAsIG51bV90eHEgKiBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSk7XG4rXHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IDA7XG4rXG4rXHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHNuYXAtXHUwMDNlbnVtX3RjOyB0YysrKSB7XG4rXHRcdHU2NCBtaW5fcmF0ZSA9IHNuYXAtXHUwMDNlbWluX3JhdGVbdGNdO1xuK1x0XHR1NjQgbWF4X3JhdGUgPSBzbmFwLVx1MDAzZW1heF9yYXRlW3RjXTtcbitcbitcdFx0aWYgKG1pbl9yYXRlKVxuK1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzIHw9IFRDX01RUFJJT19GX01JTl9SQVRFO1xuK1x0XHRpZiAobWF4X3JhdGUpXG4rXHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgfD0gVENfTVFQUklPX0ZfTUFYX1JBVEU7XG4rXG4rXHRcdGZvciAodHhxID0gc25hcC1cdTAwM2VvZmZzZXRbdGNdO1xuK1x0XHQgICAgIHR4cSBcdTAwM2Mgc25hcC1cdTAwM2VvZmZzZXRbdGNdICsgc25hcC1cdTAwM2Vjb3VudFt0Y107IHR4cSsrKSB7XG4rXHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGVbdHhxXSA9IG1pbl9yYXRlO1xuK1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlW3R4cV0gPSBtYXhfcmF0ZTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCBzbmFwLVx1MDAzZW51bV90Yyk7XG4rXHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHNuYXAtXHUwMDNlbnVtX3RjOyB0YysrKVxuK1x0XHRuZXRkZXZfc2V0X3RjX3F1ZXVlKG5ldGRldiwgdGMsIHNuYXAtXHUwMDNlY291bnRbdGNdLFxuK1x0XHRcdFx0ICAgIHNuYXAtXHUwMDNlb2Zmc2V0W3RjXSk7XG4rXG4rXHRpZiAob3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChwZnZmKSkge1xuK1x0XHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdC8qIG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KCkgY2xlYXJzIHJhdGVfbGltaXQgd2hlbiBuZG9fb3BlbigpIGZhaWxzLiAqL1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCA9IHRydWU7XG4rXG4rXHRlcnIgPSBvdHgyX21xcHJpb191cChwZnZmKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXHUwMDI2cGZ2Zi1cdTAwM2VjdXJfbXFfc25hcCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fc25hcF9kZXN0cm95KHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXHUwMDI2cGZ2Zi1cdTAwM2VjdXJfbXFfc25hcCk7XG4rXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXHUwMDI2cGZ2Zi1cdTAwM2VvbGRfbXFfc25hcCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2NsZWFyX3N3KHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4rXG4rXHRwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gZmFsc2U7XG4rXHRvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHBmdmYpO1xuK1x0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCAwKTtcbitcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4rfVxuK1xuKy8qIFRlYXIgZG93biBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQ6IGNsZWFyIHBlci1xdWV1ZSBzaGFwZXJzLFxuKyAqIG1xcHJpb19yYXRlX2xpbWl0LCBuZXRkZXYgVEMgbWFwcGluZ3MsIGFuZCB0aGUgY2FjaGVkIHJhdGVzLiAgQ2FsbGVkIG9uXG4rICogZXhwbGljaXQgbXFwcmlvIHRlYXJkb3duICh0YyBxZGlzYyBkZWwpIGFuZCBlcnJvciBjbGVhbnVwLCBub3Qgb25cbisgKiByb3V0aW5lIG5ldGRldiBzdG9wL29wZW4gY3ljbGVzIHdoZXJlIHRoZSBvZmZsb2FkIHN0YXlzIGFjdGl2ZS5cbisgKi9cbitpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKG5ldGlmX3J1bm5pbmcocGZ2Zi1cdTAwM2VuZXRkZXYpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpXG4rXHRcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcbitcbitcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xuK1xuK1x0aWYgKGVycikge1xuK1x0XHRuZXRkZXZfZXJyKHBmdmYtXHUwMDNlbmV0ZGV2LFxuK1x0XHRcdCAgIFwibXFwcmlvOiBmYWlsZWQgdG8gY2xlYXIgaGFyZHdhcmUgc2hhcGVyczogJWQ7IHNvbWUgVFggcXVldWVzIG1heSByZXRhaW4gYmFuZHdpZHRoIGxpbWl0c1xcblwiLFxuK1x0XHRcdCAgIGVycik7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbitcdGludCB0eHEsIGVycjtcbitcbitcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlIHx8ICFwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRmb3IgKHR4cSA9IDA7IHR4cSBcdTAwM2MgcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlczsgdHhxKyspIHtcbitcdFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xuK1xuK1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuK1x0XHRcdG1pbl9yYXRlID0gcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGVbdHhxXTtcbitcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcbitcdFx0XHRtYXhfcmF0ZSA9IHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlW3R4cV07XG4rXG4rXHRcdGlmICghbWluX3JhdGUgXHUwMDI2XHUwMDI2ICFtYXhfcmF0ZSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsIG1pbl9yYXRlLFxuK1x0XHRcdFx0XHRcdCAgIG1heF9yYXRlKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IGZhaWxlZCB0byByZXN0b3JlIHNoYXBlciBmb3IgdHhxICVkOiAlZFxcblwiLFxuK1x0XHRcdFx0ICAgdHhxLCBlcnIpO1xuK1x0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBSZXN0YXJ0IHRoZSBuZXRkZXYgdG8gcmVwcm9ncmFtIHRoZSBUWCBzY2hlZHVsZXIgaGllcmFyY2h5IGZvciBtcXByaW9cbisgKiBiYW5kd2lkdGggb2ZmbG9hZC4gIEJvdGggbXFwcmlvIGFkZCBhbmQgZGVsZXRlICh3aGVuIG9mZmxvYWQgd2FzIGFjdGl2ZSlcbisgKiB0YWtlIHRoaXMgcGF0aCB2aWEgbmRvX3N0b3AoKS9uZG9fb3BlbigpIHNvIFZGLXNwZWNpZmljIG9wZW4gbG9naWMgKGUuZy5cbisgKiBMQksgY2FycmllciBvbikgcnVucyBjb3JyZWN0bHkuICBUaGUgZnVsbCBzdG9wL29wZW4gY3ljbGUgY2xlYXJzXG4rICogY2Fycmllciwgc3RvcHMgYWxsIFRYIHF1ZXVlcywgdGVhcnMgZG93biBJUlFzL05BUEkgYW5kIGRyb3BzIGluLWZsaWdodFxuKyAqIHRyYWZmaWMuICBJZiBvcGVuIGZhaWxzLCB0aGUgaW50ZXJmYWNlIGlzIGxlZnQgYWRtaW5pc3RyYXRpdmVseSBkb3duXG4rICogd2l0aG91dCBjYWxsaW5nIG5kb19zdG9wKCkgYWdhaW4gb24gcmVzb3VyY2VzIGFscmVhZHkgdG9ybiBkb3duIGJ5XG4rICogdGhlIG9wZW4gZXJyb3IgcGF0aC5cbisgKlxuKyAqIERvIG5vdCBjYWxsIGRldl9kZWFjdGl2YXRlKCkvZGV2X2FjdGl2YXRlKCkgaGVyZTogdGhpcyBydW5zIGZyb21cbisgKiBuZG9fc2V0dXBfdGMoKSB3aGlsZSBxZGlzY19ncmFmdCgpIG1heSBhbHJlYWR5IGhvbGQgdGhlIGRldmljZVxuKyAqIGRlYWN0aXZhdGVkIGFuZCBtdXN0IHBlcmZvcm0gdGhlIGZpbmFsIGRldl9hY3RpdmF0ZSgpLlxuKyAqL1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByYXRlX2xpbWl0KVxuK3tcbitcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzO1xuK1x0aW50IGVycjtcbitcbitcdC8qIFRPRE86IEV4cGxvcmUgbGl2ZSBUWCBzY2hlZHVsZXIgcmVwcm9ncmFtbWluZyB0byBhdm9pZCBhIGZ1bGxcbitcdCAqIG5kb19zdG9wKCkvbmRvX29wZW4oKSBib3VuY2Ugb24gZXZlcnkgbXFwcmlvIGNoYW5nZS5cbitcdCAqL1xuK1x0bmV0ZGV2X2luZm8obmV0ZGV2LFxuK1x0XHQgICAgXCJtcXByaW86IHJlc3RhcnRpbmcgaW50ZXJmYWNlIHRvIHJlcHJvZ3JhbSBUWCBzY2hlZHVsZXI7IGluLWZsaWdodCB0cmFmZmljIHdpbGwgYmUgZHJvcHBlZFxcblwiKTtcbitcbitcdGVyciA9IG9wcy1cdTAwM2VuZG9fc3RvcChuZXRkZXYpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdC8qIFNldCBiZWZvcmUgbmRvX29wZW4oKSBzbyBvdHgyX3R4c2NoX2FsbG9jKCkgd2lkZW5zIFNNUSBhbGxvY2F0aW9uLlxuK1x0ICogT24gdGVhcmRvd24sIGRyb3AgbXFwcmlvIHNvZnR3YXJlIHN0YXRlIHNvIG5kb19vcGVuKCkgZG9lcyBub3RcbitcdCAqIHJlLWFwcGx5IGJhbmR3aWR0aCBsaW1pdHMgdmlhIG90eDJfbXFwcmlvX3VwKCkgYWZ0ZXIgdGhlIGtlcm5lbFxuK1x0ICogcmVtb3ZlZCB0aGUgcWRpc2MuXG4rXHQgKi9cbitcdGlmIChyYXRlX2xpbWl0KVxuK1x0XHRwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gdHJ1ZTtcbitcdGVsc2VcbitcdFx0b3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7XG4rXG4rXHRlcnIgPSBvcHMtXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcbitcdGlmIChlcnIpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0ICAgXCJGYWlsZWQgdG8gcmVzdGFydCBkZXZpY2UgYWZ0ZXIgbXFwcmlvIGNoYW5nZTogJWRcXG5cIixcbitcdFx0XHQgICBlcnIpO1xuK1x0XHQvKiBuZG9fb3BlbigpIGFscmVhZHkgZnJlZWQgdGhlIFRYIHNjaGVkdWxlcnMgb24gZmFpbHVyZSB3aGlsZVxuK1x0XHQgKiBuZXRpZl9ydW5uaW5nKCkgbWF5IHN0aWxsIGJlIHRydWU7IGRyb3AgbXFwcmlvIHNvZnR3YXJlIHN0YXRlXG4rXHRcdCAqIG9ubHkgaW5zdGVhZCBvZiBzZW5kaW5nIHNoYXBlciBjbGVhcnMgdG8gZnJlZWQgcXVldWVzLlxuK1x0XHQgKi9cbitcdFx0b3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7XG4rXHRcdC8qIG5kb19vcGVuKCkgcm9sbHMgYmFjayBvbiBmYWlsdXJlOyBtYXJrIHRoZSBpbnRlcmZhY2UgZG93biBzb1xuK1x0XHQgKiBuZXRpZl9jbG9zZSgpIGRvZXMgbm90IGludm9rZSBuZG9fc3RvcCgpIG9uIGZyZWVkIE5BUEkvcXVldWVcbitcdFx0ICogc3RhdGUuIENhbGxlciBob2xkcyBSVE5MOyBkZXZfY2xvc2UoKSB3b3VsZCBkZWFkbG9jay5cbitcdFx0ICovXG4rXHRcdHBmdmYtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX0lOVEZfRE9XTjtcbitcdFx0LyogdmlzaWJsZSB0byBvdHgyX3N0b3AoKSBvbiBvdGhlciBjcHVzICovXG4rXHRcdHNtcF93bWIoKTtcbitcdFx0bmV0aWZfY2xvc2UobmV0ZGV2KTtcbitcdH1cbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4rXHRcdFx0XHRcdHU2NCByYXRlLCB1MzIgcWNvdW50LCBpbnQgdGMsXG4rXHRcdFx0XHRcdGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0aWYgKCFyYXRlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChxY291bnQgXHUwMDNjPSAxKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIFRPRE86IG1xcHJpbyBtaW5fcmF0ZS9tYXhfcmF0ZSBhcmUgcGVyIHRyYWZmaWMgY2xhc3MsIGJ1dCBiYW5kd2lkdGhcbitcdCAqIG9mZmxvYWQgc2hhcGVzIG9uIHBlci1xdWV1ZSBNRFEgbm9kZXMgcGFyZW50ZWQgdW5kZXIgYSBzaW5nbGUgVEw0LlxuK1x0ICogV2l0aG91dCBwZXItVEMgVEw0IHNoYXBlcnMgdGhlIGRyaXZlciBjYW5ub3QgaG9ub3IgVEMtbGV2ZWwgbGltaXRzXG4rXHQgKiBmb3IgYSB0cmFmZmljIGNsYXNzIHRoYXQgc3BhbnMgbXVsdGlwbGUgcXVldWVzIHdpdGhvdXQgZWl0aGVyXG4rXHQgKiBkaXZpZGluZyB0aGUgcmF0ZSBhY3Jvc3MgcXVldWVzICh1QVBJIG1pc21hdGNoKSBvciBleGNlZWRpbmcgdGhlIFRDXG4rXHQgKiBjYXAgd2hlbiBldmVyeSBtZW1iZXIgcXVldWUgaXMgYWN0aXZlLiBSZWplY3QgdW50aWwgcGVyLVRDIFRMNFxuK1x0ICogc2hhcGluZyBjYW4gYmUgaW1wbGVtZW50ZWQgd2l0aG91dCBhbGxvY2F0aW5nIGFkZGl0aW9uYWwgVEw0IG5vZGVzXG4rXHQgKiBiZXlvbmQgdGhlIGV4aXN0aW5nIGhpZXJhcmNoeS5cbitcdCAqL1xuK1x0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdCAgIFwibXFwcmlvOiAlcyByYXRlIGZvciB0YyAlZCBub3Qgc3VwcG9ydGVkIHdpdGggJXUgcXVldWVzXFxuXCIsXG4rXHRcdCAgIG5hbWUsIHRjLCBxY291bnQpO1xuK1x0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0ICAgICAgIFwibXFwcmlvOiAlcyByYXRlIGZvciB0YyAlZCBub3Qgc3VwcG9ydGVkIHdpdGggJXUgcXVldWVzXCIsXG4rXHRcdFx0ICAgICAgIG5hbWUsIHRjLCBxY291bnQpO1xuK1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQpXG4re1xuK1x0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHUxNiBudW1fdHhxID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbitcdGludCB0YywgdHhxO1xuK1xuK1x0aWYgKHFvcHQtXHUwMDNlbnVtX3RjIFx1MDAzZSBudW1fdHhxKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIk51bWJlciBvZiBUQ3MgKCV1KSBleGNlZWRzIGh3IHF1ZXVlcyAldVxcblwiLFxuK1x0XHRcdCAgIHFvcHQtXHUwMDNlbnVtX3RjLCBudW1fdHhxKTtcbitcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICAgICAgXCJOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcIixcbitcdFx0XHRcdCAgICAgICBxb3B0LVx1MDAzZW51bV90YywgbnVtX3R4cSk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKG51bV90eHEgXHUwMDNlIE1BWF9UWFNDSFFfUEVSX0ZVTkMpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0ICAgXCJOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldVxcblwiLFxuK1x0XHRcdCAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xuK1x0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbitcdFx0XHRcdCAgICAgICBcIk51bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1XCIsXG4rXHRcdFx0XHQgICAgICAgbnVtX3R4cSwgTUFYX1RYU0NIUV9QRVJfRlVOQyk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMrKykge1xuK1x0XHR1MzIgcWNvdW50ID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4rXG4rXHRcdGZvciAodHhxID0gcW9wdC1cdTAwM2VvZmZzZXRbdGNdO1xuK1x0XHQgICAgIHR4cSBcdTAwM2MgcW9wdC1cdTAwM2VvZmZzZXRbdGNdICsgcWNvdW50OyB0eHErKykge1xuK1x0XHRcdGlmICh0eHEgXHUwMDNlPSBudW1fdHhxKSB7XG4rXHRcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdFx0ICAgXCJtcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXVcXG5cIixcbitcdFx0XHRcdFx0ICAgdHhxLCBudW1fdHhxKTtcbitcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuK1x0XHRcdFx0XHRcdCAgICAgICBcIm1xcHJpbzogdHhxICVkIGV4Y2VlZHMgb2ZmbG9hZCBxdWV1ZSBjb3VudCAldVwiLFxuK1x0XHRcdFx0XHRcdCAgICAgICB0eHEsIG51bV90eHEpO1xuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGJvb2wgb3R4Ml9tcXByaW9fcmF0ZV92YWxpZCh1NjQgcmF0ZV9ieXRlc19wcylcbit7XG4rXHR1NjQgbWJwcztcbitcbitcdGlmICghcmF0ZV9ieXRlc19wcylcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRpZiAocmF0ZV9ieXRlc19wcyBcdTAwM2MgT1RYMl9NUVBSSU9fTUlOX1JBVEVfQllURVNfUFMpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChyYXRlX2J5dGVzX3BzIFx1MDAzZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QUylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKHJhdGVfYnl0ZXNfcHMgXHUwMDNlIGRpdl91NjQoVTY0X01BWCwgOCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdG1icHMgPSBvdHgyX2NvbnZlcnRfcmF0ZShyYXRlX2J5dGVzX3BzKTtcbitcdHJldHVybiBpbG9nMihtYnBzIC8gMikgXHUwMDNjPSBNQVhfUkFURV9FWFBPTkVOVDtcbit9XG4rXG4rc3RhdGljIGludCBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuK3tcbitcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFx1MDAyNm1xcHJpby1cdTAwM2Vxb3B0O1xuK1x0Ym9vbCBoYWRfbXFwcmlvID0gcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdDtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbitcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XG4rXHRpbnQgZXJyO1xuK1xuK1x0cW9wdC1cdTAwM2VodyA9IDA7XG4rXG4rXHQvKiB0YyBxZGlzYyByZXBsYWNlIHJ1bnMgc2V0dXAgb24gdGhlIG5ldyBtcXByaW8gYmVmb3JlIGRlc3Ryb3lpbmcgdGhlXG4rXHQgKiBvbGQgb25lLiByZXBsYWNlX3NldHVwX2RvbmUgYW5kIFRDX1JPT1RfR1JBRlQgZGlzdGluZ3Vpc2ggc3RhbGVcbitcdCAqIG9sZC1pbnN0YW5jZSB0ZWFyZG93biBmcm9tIGdyYWZ0IGZhaWx1cmUgYWZ0ZXIgc2V0dXAuXG4rXHQgKi9cbitcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgXHUwMDI2XHUwMDI2IHBmdmYtXHUwMDNlY3VyX21xX3NuYXApIHtcbitcdFx0ZXJyID0gMDtcbitcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSlcbitcdFx0XHRvdHgyX21xcHJpb19zbmFwX2NvbW1pdChwZnZmKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHBmdmYpO1xuK1x0XHRvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHBmdmYpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0LyogU2tpcCB0aGUgbmV0ZGV2IHJlc3RhcnQgd2hlbiBtcXByaW8gb2ZmbG9hZCB3YXMgbm90IGFjdGl2ZS4gKi9cbitcdGlmICghaGFkX21xcHJpbylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoaWZfdXApIHtcbitcdFx0aW50IGRvd25fZXJyLCBlcnI7XG4rXG4rXHRcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcbitcdFx0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYobmV0ZGV2LCBmYWxzZSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0cmV0dXJuIGRvd25fZXJyO1xuK1x0fVxuK1xuK1x0LyogbmRvX3N0b3AoKSBhbHJlYWR5IGZyZWVkIHRoZSBUWCBzY2hlZHVsZXIgVEwgbm9kZXM7IGRyb3Agc29mdHdhcmVcbitcdCAqIHN0YXRlIG9ubHkuXG4rXHQgKi9cbitcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4re1xuK1x0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gbXFwcmlvLVx1MDAzZWV4dGFjaztcbitcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbitcdGJvb2wgcmVwbGFjaW5nID0gcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdDtcbitcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XG4rXHRpbnQgdGMsIHR4cSwgZXJyLCBpO1xuK1xuK1x0aWYgKCFxb3B0LVx1MDAzZWh3KVxuK1x0XHRyZXR1cm4gb3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcbitcbitcdGlmICghaWZfdXApIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwibXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcXG5cIik7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwibXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmIChtcXByaW8tXHUwMDNlc2hhcGVyICE9IFRDX01RUFJJT19TSEFQRVJfQldfUkFURSkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxcblwiLCBtcXByaW8tXHUwMDNlc2hhcGVyKTtcbitcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssIFwiVW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcIixcbitcdFx0XHRcdCAgICAgICBtcXByaW8tXHUwMDNlc2hhcGVyKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCBcdTAwMjZwZnZmLVx1MDAzZWh3LmNhcF9mbGFnKSkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHQgICBcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSK1BJUiBzdXBwb3J0XFxuXCIpO1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUitQSVIgc3VwcG9ydFwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKGlzX290eDJfc2RwX3JlcChwZnZmLVx1MDAzZXBkZXYpKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwXFxuXCIpO1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKHBmdmYtXHUwMDNlcGZjX2VuKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdCAgIFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcXG5cIik7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAocGZ2Zi1cdTAwM2V4ZHBfcHJvZykge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHQgICBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmVcXG5cIik7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmVcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IHRjKyspIHtcbitcdFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xuK1x0XHR1MzIgcWNvdW50ID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4rXG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuK1x0XHRcdG1pbl9yYXRlID0gbXFwcmlvLVx1MDAzZW1pbl9yYXRlW3RjXTtcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4rXHRcdFx0bWF4X3JhdGUgPSBtcXByaW8tXHUwMDNlbWF4X3JhdGVbdGNdO1xuK1xuK1x0XHRpZiAobWluX3JhdGUgXHUwMDI2XHUwMDI2IG1heF9yYXRlIFx1MDAyNlx1MDAyNiBtaW5fcmF0ZSBcdTAwM2UgbWF4X3JhdGUpIHtcbitcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdCAgIFwibWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXFxuXCIsXG4rXHRcdFx0XHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTtcbitcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbitcdFx0XHRcdFx0ICAgICAgIFwibWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXCIsXG4rXHRcdFx0XHRcdCAgICAgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSkge1xuK1x0XHRcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBleHRhY2ssIG1pbl9yYXRlLFxuK1x0XHRcdFx0XHRcdFx0ICAgcWNvdW50LCB0YywgXCJtaW5cIik7XG4rXHRcdFx0aWYgKGVycilcbitcdFx0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbitcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpIHtcbitcdFx0XHRlcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtYXhfcmF0ZSxcbitcdFx0XHRcdFx0XHRcdCAgIHFjb3VudCwgdGMsIFwibWF4XCIpO1xuK1x0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIW90eDJfbXFwcmlvX3JhdGVfdmFsaWQobWluX3JhdGUpKSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXG5cIixcbitcdFx0XHRcdCAgIG1pbl9yYXRlLCB0Yyk7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0XHRcdCAgICAgICBcIm1xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcIixcbitcdFx0XHRcdFx0ICAgICAgIG1pbl9yYXRlLCB0Yyk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChtYXhfcmF0ZSkpIHtcbitcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdCAgIFwibXFwcmlvOiBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0c1xcblwiLFxuK1x0XHRcdFx0ICAgbWF4X3JhdGUsIHRjKTtcbitcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbitcdFx0XHRcdFx0ICAgICAgIFwibXFwcmlvOiBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0c1wiLFxuK1x0XHRcdFx0XHQgICAgICAgbWF4X3JhdGUsIHRjKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0fVxuK1xuK1x0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdHhxcyhuZXRkZXYsIGV4dGFjaywgcW9wdCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0ZXJyID0gb3R4Ml9tcXByaW9fc3RhZ2VfY3VyKHBmdmYsIG1xcHJpbyk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYocGZ2Zi1cdTAwM2VuZXRkZXYsIHRydWUpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0ZXJyID0gb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUocGZ2ZiwgcmVwbGFjaW5nKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdC8qIG90eDJfbXFwcmlvX3VwKCkgbWF5IGhhdmUgcmVzdG9yZWQgdGhlIHByZXZpb3VzIGNvbmZpZ3VyYXRpb24gZHVyaW5nXG4rXHQgKiB0aGUgcmVzdGFydCBhYm92ZS4gQ2xlYXIgZXZlcnkgTURRIHNoYXBlciBiZWZvcmUgYXBwbHlpbmcgdGhlIG5ld1xuK1x0ICogbWFwcGluZyBzbyBxdWV1ZXMgZHJvcHBlZCBmcm9tIHRoZSBUQyBsYXlvdXQgZG8gbm90IGtlZXAgc3RhbGVcbitcdCAqIGxpbWl0cyBpbiBoYXJkd2FyZS5cbitcdCAqL1xuK1x0aWYgKG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpIHtcbitcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHBmdmYpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gY2xlYW51cDtcbitcdH1cbitcbitcdHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzID0gbXFwcmlvLVx1MDAzZWZsYWdzO1xuK1xuK1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMrKykge1xuK1x0XHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XG4rXHRcdHUzMiBxY291bnQgPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbitcbitcdFx0LyogUmF0ZXMgb21pdHRlZCBmcm9tIHRjIG1xcHJpbyBhcmUgcGFzc2VkIGFzIHplcm8gYW5kIGJvdGggTURRXG4rXHRcdCAqIHNoYXBlciByZWdpc3RlcnMgYXJlIHByb2dyYW1tZWQ7IHNlZVxuK1x0XHQgKiBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKCkuIE11bHRpLXF1ZXVlIFRDcyB3aXRoIHJhdGVzXG4rXHRcdCAqIGFyZSByZWplY3RlZCBhYm92ZS5cbitcdFx0ICovXG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuK1x0XHRcdG1pbl9yYXRlID0gbXFwcmlvLVx1MDAzZW1pbl9yYXRlW3RjXTtcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4rXHRcdFx0bWF4X3JhdGUgPSBtcXByaW8tXHUwMDNlbWF4X3JhdGVbdGNdO1xuK1xuK1x0XHRmb3IgKHR4cSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbitcdFx0ICAgICB0eHEgXHUwMDNjIHFvcHQtXHUwMDNlb2Zmc2V0W3RjXSArIHFjb3VudDsgdHhxKyspIHtcbitcdFx0XHRuZXRkZXZfZGJnKG5ldGRldixcbitcdFx0XHRcdCAgIFwibXFwcmlvOiB0YyAlZCB0eHEgJWQgbWluX3JhdGUgJWxsdSBtYXhfcmF0ZSAlbGx1XFxuXCIsXG4rXHRcdFx0XHQgICB0YywgdHhxLCBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xuK1xuK1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcbitcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7XG4rXG4rXHRcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsXG4rXHRcdFx0XHRcdFx0XHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xuK1x0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRnb3RvIGNsZWFudXA7XG4rXHRcdH1cbitcdH1cbitcbitcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgcGZ2Zi1cdTAwM2VjdXJfbXFfc25hcC1cdTAwM2VudW1fdGMpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGZ2Zi1cdTAwM2VjdXJfbXFfc25hcC1cdTAwM2VudW1fdGM7IGkrKylcbitcdFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIGksIHBmdmYtXHUwMDNlY3VyX21xX3NuYXAtXHUwMDNlY291bnRbaV0sXG4rXHRcdFx0XHQgICAgcW9wdC1cdTAwM2VvZmZzZXRbaV0pO1xuK1xuK1x0cW9wdC1cdTAwM2VodyA9IFRDX01RUFJJT19IV19PRkZMT0FEX1RDUztcbitcbitcdGlmIChyZXBsYWNpbmcpIHtcbitcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lID0gdHJ1ZTtcbitcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lID0gZmFsc2U7XG4rXHR9IGVsc2Uge1xuK1x0XHRvdHgyX21xcHJpb19zbmFwX2NvbW1pdChwZnZmKTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK1xuK2NsZWFudXA6XG4rXHRxb3B0LVx1MDAzZWh3ID0gMDtcbitcdGlmIChyZXBsYWNpbmcpIHtcbitcdFx0aW50IHJlc3RvcmVfZXJyID0gb3R4Ml9tcXByaW9fcmVzdG9yZV9vbGQocGZ2Zik7XG4rXG4rXHRcdG90eDJfbXFwcmlvX2NsZWFyX3JlcGxhY2Vfc3RhdGUocGZ2Zik7XG4rXHRcdGlmIChyZXN0b3JlX2Vycikge1xuK1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IHJlcGxhY2UgZmFpbGVkIGFuZCBwcmlvciBjb25maWd1cmF0aW9uIHJvbGxiYWNrIGZhaWxlZDogJWRcXG5cIixcbitcdFx0XHRcdCAgIHJlc3RvcmVfZXJyKTtcbitcdFx0XHRpZiAoZXh0YWNrKVxuK1x0XHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0XHRcdFx0ICAgICAgIFwibXFwcmlvOiByZXBsYWNlIGZhaWxlZCBhbmQgcHJpb3IgY29uZmlndXJhdGlvbiByb2xsYmFjayBmYWlsZWQ6ICVkXCIsXG4rXHRcdFx0XHRcdFx0ICAgICAgIHJlc3RvcmVfZXJyKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdCAgIFwibXFwcmlvOiByZXBsYWNlIGZhaWxlZDsgcHJpb3IgY29uZmlndXJhdGlvbiByZXN0b3JlZFxcblwiKTtcbitcdFx0XHRpZiAoZXh0YWNrKVxuK1x0XHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdFx0XHQgICBcIm1xcHJpbzogcmVwbGFjZSBmYWlsZWQ7IHByaW9yIGNvbmZpZ3VyYXRpb24gcmVzdG9yZWRcIik7XG4rXHRcdH1cbitcdFx0cmV0dXJuIGVyciA/IGVyciA6IC1FSU87XG4rXHR9XG4rXHRvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhwZnZmLCBtcXByaW8pO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIGludCBvdHgyX3NldHVwX3RjX3Jvb3Qoc3RydWN0IG90eDJfbmljICpwZnZmLFxuK1x0XHRcdCAgICAgIHN0cnVjdCB0Y19yb290X3FvcHRfb2ZmbG9hZCAqcm9vdClcbit7XG4rXHRzd2l0Y2ggKHJvb3QtXHUwMDNlY29tbWFuZCkge1xuK1x0Y2FzZSBUQ19ST09UX0dSQUZUOlxuK1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lKVxuK1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSA9IHRydWU7XG4rXHRcdHJldHVybiAwO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK31cbitcbitzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh2b2lkICp0eXBlX2RhdGEpXG4re1xuK1x0c3RydWN0IHRjX3F1ZXJ5X2NhcHNfYmFzZSAqYmFzZSA9IHR5cGVfZGF0YTtcbitcdHN0cnVjdCB0Y19tcXByaW9fY2FwcyAqY2FwcztcbitcbitcdGlmIChiYXNlLVx1MDAzZXR5cGUgIT0gVENfU0VUVVBfUURJU0NfTVFQUklPKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRjYXBzID0gYmFzZS1cdTAwM2VjYXBzO1xuK1x0Y2Fwcy1cdTAwM2V2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIGludCBvdHgyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxuIFx0XHQgIHZvaWQgKnR5cGVfZGF0YSlcbiB7XG4gXHRzd2l0Y2ggKHR5cGUpIHtcbitcdGNhc2UgVENfUVVFUllfQ0FQUzpcbitcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh0eXBlX2RhdGEpO1xuIFx0Y2FzZSBUQ19TRVRVUF9CTE9DSzpcbiBcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfYmxvY2sobmV0ZGV2LCB0eXBlX2RhdGEpO1xuIFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19IVEI6XG4gXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX2h0YihuZXRkZXYsIHR5cGVfZGF0YSk7XG4rXHRjYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzpcbitcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfbXFwcmlvKG5ldGRldiwgdHlwZV9kYXRhKTtcbitcdGNhc2UgVENfU0VUVVBfUk9PVF9RRElTQzpcbitcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfcm9vdChuZXRkZXZfcHJpdihuZXRkZXYpLCB0eXBlX2RhdGEpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuQEAgLTE2MzIsNiArMjMzNiw3IEBAIEVYUE9SVF9TWU1CT0wob3R4Ml9pbml0X3RjKTtcbiB2b2lkIG90eDJfc2h1dGRvd25fdGMoc3RydWN0IG90eDJfbmljICpuaWMpXG4ge1xuIFx0b3R4Ml9kZXN0cm95X3RjX2Zsb3dfbGlzdChuaWMpO1xuK1x0b3R4Ml9tcXByaW9fc25hcF9kZXN0cm95KG5pYyk7XG4gfVxuIEVYUE9SVF9TWU1CT0wob3R4Ml9zaHV0ZG93bl90Yyk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXG5pbmRleCA2OWMwOTExZTI4ZTkxLi5kOWFmMTgyZTU3MjFkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcbkBAIC0xMTgsNiArMTE4LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9jb25maWdfc2NoZWRfc2hhcGluZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4gXHQvKiBjb25maWd1cmUgUElSICovXG4gXHRtYXhyYXRlID0gKG5vZGUtXHUwMDNlcmF0ZSBcdTAwM2Ugbm9kZS1cdTAwM2VjZWlsKSA/IG5vZGUtXHUwMDNlcmF0ZSA6IG5vZGUtXHUwMDNlY2VpbDtcbiBcbitcdC8qIDY1NTM2IGlzIHRoZSBrZXJuZWwtc2lkZSBkZWZhdWx0IGJ1cnN0IHdoZW4gSFRCIGRvZXMgbm90IHN1cHBseSBhblxuK1x0ICogZXhwbGljaXQgdmFsdWUsIG5vdCB0aGUgTklYIGhhcmR3YXJlIG1heGltdW0gKENOMTBLX01BWF9CVVJTVF9TSVpFKS5cbitcdCAqL1xuIFx0Y2ZnLVx1MDAzZXJlZ3ZhbFsqbnVtX3JlZ3NdID1cbiBcdFx0b3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIG1heHJhdGUsIDY1NTM2KTtcbiBcdCgqbnVtX3JlZ3MpKys7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMzozOTo0NS44MDE0NjEwNzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjIzMjk3MjgzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhpcyBQYXRjaCBTZXJpZXMgZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggc2VyaWVzIGFuZCBzZWUgaWYgaXQncyBhIGdvb2QgY2FuZGlkYXRlIGZvciBzb21lIHN5emthbGxlciBmdXp6aW5nLiBUaGUgZmlyc3QgdGhpbmcgSSdtIGNoZWNraW5nIGlzIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIOKAkyBsb29rcyBsaWtlIGl0J3MgYW1kNjQuIEdvb2QsIHRoYXQncyBzdHJhaWdodGZvcndhcmQgZW5vdWdoIHRvIHdvcmsgd2l0aC5cblxuTm93LCB0aGUgZmlsZXMgdGhhdCB3ZXJlIG1vZGlmaWVkLCB0aGF0J3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZzpcbiogICBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jYFxuKiAgIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY2BcbiogICBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhgXG4qICAgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNgXG4qICAgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY2BcbiogICBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY2BcbiogICBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY2BcbiogICBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jYFxuXG5IbW0sIGxvb2tzIGxpa2UgYSBuZXR3b3JraW5nIHN0YWNrIGRyaXZlciBzcGVjaWZpYyB0byB0aGUgYG9jdGVvbnR4MmAgaGFyZHdhcmUuIFRoYXQgbWVhbnMgaXTigJlzIHZlbmRvci1zcGVjaWZpYywgd2hpY2ggaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIGxvdy1oYW5naW5nIGZydWl0IHdlJ3JlIGxvb2tpbmcgZm9yLCBwb3RlbnRpYWxseS4gT2N0ZW9uIFRYMiBpcyBNYXJ2ZWxsIGhhcmR3YXJlIChBUk02NCBTb0MsIFBDSWUgU21hcnROSUMsIENOOUsvQ04xMEsgaGFyZHdhcmUpLlxuXG5TbywgdGhlIG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIGZvciBgb2N0ZW9udHgyYC4gTGV04oCZcyBjb25maXJtIHRoYXQgaXQncyBjb25maWd1cmFibGUgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmRpdGlvbnMgcmVxdWlyZWQgdG8gZW5hYmxlIHRoaXMuIEdyZXBwaW5nIG9yIGEgcXVpY2sgZmlsZSByZWFkIHdpbGwgZ2l2ZSBtZSB0aGF0IGFuc3dlciBmYXN0LiBUaGlzIHRlbGxzIG1lIGlmIHRoZXJlJ3MgYSBnb29kIGNoYW5jZSBvZiBpdCBiZWluZyByZWFjaGFibGUgYnkgc3l6a2FsbGVyLiBJZiBzbywgdGhpcyBzZXJpZXMgbG9va3MgdmVyeSBwcm9taXNpbmcgaW5kZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzUwMiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAzOjQwOjAyLjAzNDQzODI2NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTY2NzIxNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiT0NURU9OVFgyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjY6Y29uZmlnIE9DVEVPTlRYMl9NQk9YXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy03LVxcdHRyaXN0YXRlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy04LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6OTpjb25maWcgT0NURU9OVFgyX0FGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0xMC1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBPY3Rlb25UWDIgUlZVIEFkbWluIEZ1bmN0aW9uIGRyaXZlclxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjExOlxcdHNlbGVjdCBPQ1RFT05UWDJfTUJPWFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMTItXFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnPTIyPWNvbmZpZyBORENfRElTX0RZTkFNSUNfQ0FDSElOR1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMjMtXFx0Ym9vbCBcXFwiRGlzYWJsZSBjYWNoaW5nIG9mIGR5bmFtaWMgZW50cmllcyBpbiBORENcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzoyNDpcXHRkZXBlbmRzIG9uIE9DVEVPTlRYMl9BRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMjUtXFx0ZGVmYXVsdCBuXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTMwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6MzE6Y29uZmlnIE9DVEVPTlRYMl9QRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMzItXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBQaHlzaWNhbCBGdW5jdGlvbiBkcml2ZXJcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzozMzpcXHRzZWxlY3QgT0NURU9OVFgyX01CT1hcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTM0LVxcdHNlbGVjdCBORVRfREVWTElOS1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy00NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjQ1OmNvbmZpZyBPQ1RFT05UWDJfVkZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTQ2LVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXJcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo0NzpcXHRkZXBlbmRzIG9uIE9DVEVPTlRYMl9QRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNDgtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz01MT1jb25maWcgUlZVX0VTV0lUQ0hcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTUyLVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFJWVSBFLVN3aXRjaCBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6NTM6XFx0ZGVwZW5kcyBvbiBPQ1RFT05UWDJfUEZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTU0LVxcdGRlZmF1bHQgbVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvTWFrZWZpbGUtNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19PQ1RFT05UWDJfTUJPWCkgKz0gYWYvXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfT0NURU9OVFgyX0FGKSArPSBhZi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19PQ1RFT05UWDJfUEYpICs9IG5pYy9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL01ha2VmaWxlPTY9Y2NmbGFncy15ICs9IC1JJChzcmMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfT0NURU9OVFgyX01CT1gpICs9IHJ2dV9tYm94Lm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19PQ1RFT05UWDJfQUYpICs9IHJ2dV9hZi5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvTWFrZWZpbGUtOS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jPTY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjZ3hfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guYzo2NzpcXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfQ0dYKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jLTY4LVxcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9DTjEwS19SUE0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guaC0xNS0gLyogUENJIGRldmljZSBJRHMgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guaDoxNjojZGVmaW5lXFx0UENJX0RFVklEX09DVEVPTlRYMl9DR1hcXHRcXHQweEEwNTlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guaC0xNy1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYz0xNTQ9REVGSU5FX1NIT1dfQVRUUklCVVRFKG5wY19tY2FtX2xheW91dCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTE1NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM6MTU2OiNkZWZpbmUgX19PQ1RFT05UWDJfREVCVUdGU19BVFRSSUJVVEVfRk9QUyhfX25hbWUpXFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNTctc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgX19uYW1lICMjIF9mb3BzID0ge1xcdFxcdFxcdFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNjQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jOjE2NTojZGVmaW5lIERFRklORV9PQ1RFT05UWDJfREVCVUdGU19BVFRSSUJVVEVfV0lUSF9TSVpFKF9fbmFtZSwgX19zaXplKVxcdFxcdFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMTY2LXN0YXRpYyBpbnQgX19uYW1lICMjIF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcdFxcdFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNzAtfVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM6MTcxOl9fT0NURU9OVFgyX0RFQlVHRlNfQVRUUklCVVRFX0ZPUFMoX19uYW1lKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNzItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM9MTgxPXN0YXRpYyBpbnQgbnBjX21jYW1fZHN0YXRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMjQyLSNkZWZpbmUgVE9UQUxfU1ogKE1BWF9OVU1fQkFOS1MgKiBNQVhfTlVNX1NVQl9CQU5LUyAqIE1BWF9TVUJCQU5LX0RFUFRIICogNjQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jOjI0MzpERUZJTkVfT0NURU9OVFgyX0RFQlVHRlNfQVRUUklCVVRFX1dJVEhfU0laRShucGNfbWNhbV9kc3RhdHMsIFRPVEFMX1NaKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMjQ0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYz0yNDU9c3RhdGljIGludCBucGNfbWNhbV9taXNtYXRjaF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTI4NC0vKiBcXFwiJXVcXFxcdCVkXFxcXHQldVxcXFxuXFxcIiBuZWVkcyBsZXNzIHRoYW4gNjQgY2hhcmFjdGVycyB0byBwcmludC4gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM6Mjg1OkRFRklORV9PQ1RFT05UWDJfREVCVUdGU19BVFRSSUJVVEVfV0lUSF9TSVpFKG5wY19tY2FtX21pc21hdGNoLCBUT1RBTF9TWik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTI4Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTIwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjIxOiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9QVFBcXHRcXHRcXHQweEEwMENcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy0yMi0jZGVmaW5lIFBDSV9TVUJTWVNfREVWSURfT0NUWDJfOTh4eF9QVFBcXHRcXHQweEIxMDBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTI3LSNkZWZpbmUgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NVhYT19QVFBcXHQweEI2MDBcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzoyODojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlNUXFx0XFx0XFx0MHhBMDg1XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtMjktI2RlZmluZSBQQ0lfREVWSURfQ04xMEtfUFRQXFx0XFx0XFx0MHhBMDlFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYz01ODk9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHB0cF9pZF90YWJsZVtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjU5MDpcXHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy01OTEtXFx0XFx0XFx0IFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5Mi1cXHRcXHRcXHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85OHh4X1BUUCkgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo1OTM6XFx0eyBQQ0lfREVWSUNFX1NVQihQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9QVFAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTk0LVxcdFxcdFxcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy01OTUtXFx0XFx0XFx0IFBDSV9TVUJTWVNfREVWSURfT0NUWDJfOTZYWF9QVFApIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM6NTk2OlxcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5Ny1cXHRcXHRcXHQgUENJX1ZFTkRPUl9JRF9DQVZJVU0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTk4LVxcdFxcdFxcdCBQQ0lfU1VCU1lTX0RFVklEX09DVFgyXzk1WFhfUFRQKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjU5OTpcXHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy02MDAtXFx0XFx0XFx0IFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTYwMS1cXHRcXHRcXHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NVhYTl9QVFApIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM6NjAyOlxcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTYwMy1cXHRcXHRcXHQgUENJX1ZFTkRPUl9JRF9DQVZJVU0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNjA0LVxcdFxcdFxcdCBQQ0lfU1VCU1lTX0RFVklEX09DVFgyXzk1TU1fUFRQKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjYwNTpcXHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy02MDYtXFx0XFx0XFx0IFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM9NDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJ2dV9pZF90YWJsZVtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjQ1OlxcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUYpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtNDYtXFx0eyAwLCB9ICAvKiBlbmQgb2YgdGFibGUgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTkyNz1zdGF0aWMgdm9pZCBydnVfZ2V0X2xia19idWZzaXplKHN0cnVjdCBydnUgKnJ2dSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTkzMy1cXHRwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM6OTM0OlxcdFxcdFxcdCAgICAgIFBDSV9ERVZJRF9PQ1RFT05UWDJfTEJLLCBwZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy05MzUtXFx0aWYgKCFwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM9MzQ0Nz1pbnQgcnZ1X2dldF9udW1fbGJrX2NoYW5zKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNDUyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjM0NTM6XFx0cGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX0xCSyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNDU0LVxcdFxcdFxcdCAgICAgIE5VTEwpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzQ3MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzozNDcxOiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUZWRlxcdDB4QTBGOFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM0NzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM9MzQ3Mz1zdGF0aWMgaW50IHJ2dV9lbmFibGVfc3Jpb3Yoc3RydWN0IHJ2dSAqcnZ1KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzQ5NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzozNDk1OlxcdGlmIChydnUtXFx1MDAzZXZmX2RldmlkID09IFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGVkYpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNDk2LVxcdFxcdGNoYW5zID0gcnZ1X2dldF9udW1fbGJrX2NoYW5zKCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuaC0yMy0vKiBQQ0kgZGV2aWNlIElEcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5oOjI0OiNkZWZpbmVcXHRQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRlxcdFxcdDB4QTA2NVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5oOjI1OiNkZWZpbmVcXHRQQ0lfREVWSURfT0NURU9OVFgyX0xCS1xcdFxcdFxcdDB4QTA2MVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5oLTI2LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2NuMTBrLmM9MzkyPXN0YXRpYyB2b2lkIHJ2dV9sYmtfc2V0X2NoYW5uZWxzKHN0cnVjdCBydnUgKnJ2dSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9jbjEway5jLTQxNS1cXHRcXHRwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2NuMTBrLmM6NDE2OlxcdFxcdFxcdFxcdCAgICAgIFBDSV9ERVZJRF9PQ1RFT05UWDJfTEJLLCBwZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfY24xMGsuYy00MTctXFx0XFx0aWYgKCFwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYz0yODAwPXN0YXRpYyB2b2lkIHJ2dV9kYmdfbnBhX2luaXQoc3RydWN0IHJ2dSAqcnZ1KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0yODE5LS8qIFBlci1sbWFjIENHWCBkZWJ1Z2ZzIGZpbGVzIG5lZWQgYm90aCBSVlUgYW5kIENHWCBoYW5kbGU7IGlub2RlLVxcdTAwM2VpX3ByaXZhdGVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jOjI4MjA6ICogcG9pbnRzIGhlcmUgc28gc2VxX2ZpbGUgb3BzIGF2b2lkIHBjaV9nZXRfZGV2aWNlKFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGKS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTI4MjEtICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvTWFrZWZpbGUtNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfT0NURU9OVFgyX1BGKSArPSBydnVfbmljcGYubyBvdHgyX3B0cC5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX09DVEVPTlRYMl9WRikgKz0gcnZ1X25pY3ZmLm8gb3R4Ml9wdHAub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9NYWtlZmlsZS04LW9iai0kKENPTkZJR19SVlVfRVNXSVRDSCkgKz0gcnZ1X3JlcC5vXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC00My0vKiBQQ0kgZGV2aWNlIElEcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjQ0OiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfUEYgICAgICAgICAgICAgIDB4QTA2M1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjQ1OiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfVkZcXHRcXHQweEEwNjRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo0NjojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGVkZcXHRcXHQweEEwRjhcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC00Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTUxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjUyOiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9TRFBfUkVQXFx0XFx0MHhBMEY3XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNTMtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaD02MTk9c3RhdGljIGlubGluZSBib29sIGlzX290eDJfbGJrdmYoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNjIwLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo2MjE6XFx0cmV0dXJuIChwZGV2LVxcdTAwM2VkZXZpY2UgPT0gUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUZWRikgfHxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC02MjItXFx0XFx0KHBkZXYtXFx1MDAzZWRldmljZSA9PSBQQ0lfREVWSURfUlZVX1JFUCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaD02Mzc9c3RhdGljIGlubGluZSBib29sIGlzX290eDJfc2RwX3JlcChzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC02Mzgte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjYzOTpcXHRyZXR1cm4gcGRldi1cXHUwMDNlZGV2aWNlID09IFBDSV9ERVZJRF9PQ1RFT05UWDJfU0RQX1JFUDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC02NDAtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYz0zNj1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgb3R4Ml9wZl9pZF90YWJsZVtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM6Mzc6XFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9QRikgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTM4LVxcdHsgMCwgfSAgLyogZW5kIG9mIHRhYmxlICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jPTIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBvdHgyX3ZmX2lkX3RhYmxlW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuYzoyMzpcXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGVkYpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuYzoyNDpcXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX1ZGKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM6MjU6XFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1NEUF9SRVApIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuYy0yNi1cXHR7IH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDM6NDA6MDIuMzMxMTE3MTkyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTYwMDQyNjQxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBEcml2ZXIgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uc3VsdCBTZWN0aW9uIDIgb2YgdGhlIHRyaWFnZSBwaGlsb3NvcGh5LCBzcGVjaWZpY2FsbHkgdGhlIHBhcnQgYWJvdXQgXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuXCIgUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgZm9yIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIHRoYXQgZGVwZW5kIG9uIHBoeXNpY2FsIEFTSUNzIG9yIFBDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG5cblRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBkcml2ZXIgKE9DVEVPTlRYMl9QRiwgT0NURU9OVFgyX1ZGLCBPQ1RFT05UWDJfQUYpIGltbWVkaWF0ZWx5IGNhdWdodCBteSBleWUuIFRoaXMgaXMgYSBkcml2ZXIgZm9yIE1hcnZlbGwvQ2F2aXVtIE9jdGVvbiBUWDIgU21hcnROSUNzIGFuZCBTb0NzLCB1c2luZyB2ZW5kb3IgSUQgMHgxNzdkLiBEZWZpbml0ZWx5IGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIGRyaXZlci4gV2UgbmVlZCB0byBjb25maXJtIGlmIGl0ICpyZXF1aXJlcyogcGh5c2ljYWwgaGFyZHdhcmUuXG5cbkxldCdzIHNlZSB3aGF0IHRoZSBkcml2ZXIgYWN0dWFsbHkgdG91Y2hlcy4gTG9va3MgbGlrZSBpdCBtb2RpZmllcyBmaWxlcyB3aXRoaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2A6IHNwZWNpZmljYWxseSBgcnZ1X25peC5jYCBhbmQgZmlsZXMgdW5kZXIgdGhlIGBuaWNgIGRpcmVjdG9yeSBsaWtlIGBvdHgyX2NvbW1vbi5jYCwgYG90eDJfZGNibmwuY2AsIGFuZCBzbyBvbi4gR29vZCwgaXQncyBjb250YWluZWQgd2l0aGluIHRoYXQgTWFydmVsbC1zcGVjaWZpYyBwYXJ0IG9mIHRoZSB0cmVlLiBUaGVyZSBhcmUgbm8gbW9kaWZpY2F0aW9ucyB0byBjb3JlIG5ldHdvcmtpbmcgb3IgdmlydHVhbCBkZXZpY2UgZHJpdmVycywgd2hpY2ggaXMgcHJvbWlzaW5nIGZyb20gYSBcInJlYWNoYWJpbGl0eVwiIHBlcnNwZWN0aXZlLlxuXG5Ob3csIHRoZSBjcnVjaWFsIGNoZWNrOiBEb2VzIFFFTVUgZW11bGF0ZSBhbnkgb2YgdGhpcz8gTm9wZS4gU3RhbmRhcmQgUUVNVSBkb2Vzbid0IHRvdWNoIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBSVlUgLyBOSVggaGFyZHdhcmUuIFRoaXMgc29saWRpZmllcyB0aGF0IHRoZSBkcml2ZXIgZGVtYW5kcyBwaHlzaWNhbCBoYXJkd2FyZSDigJMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIFNvQyBvciBQQ0llIFNtYXJ0TklDLiBUaGVyZWZvcmUsIHdlJ3JlIGRlYWxpbmcgd2l0aCBoYXJkd2FyZSB0aGF0J3MgKnN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSogaW4gb3VyIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlxuXG5TbywgdGhlIGNvbmNsdXNpb24gaXMgY2xlYXIuIFRoaXMgaXNuJ3Qgd29ydGggZnV6emluZyBpbiBvdXIgc3RhbmRhcmQgc2V0dXAuXG5cblRoZXJlZm9yZSwgdGhlIHJlc3BvbnNlIGlzOlxuXG5Xb3J0aEZ1enppbmc6IGZhbHNlXG5SZWFzb25pbmc6IFRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgb25seSB0aGUgTWFydmVsbCBPY3Rlb25UWDIgbmV0d29yayBkcml2ZXIgKGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9gKSwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgTWFydmVsbCBPY3Rlb25UWDIgaGFyZHdhcmUvQVNJQ3Mgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cbkVuYWJsZUNvbmZpZ3M6IFtdXG5Gb2N1c1N5bWJvbHM6IFtdXG5cblRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQ3MSwiT3V0cHV0VG9rZW5zIjoxMjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDM6NDA6MDcuOTMxNTQ1ODk1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgb25seSB0aGUgTWFydmVsbCBPY3Rlb25UWDIgbmV0d29yayBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyLyksIGFkZGluZyBzdXBwb3J0IGZvciBtcXByaW8gaGFyZHdhcmUgYmFuZHdpZHRoIG9mZmxvYWQuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU21hcnROSUMvU29DIGRyaXZlciByZXF1aXJpbmcgcGh5c2ljYWwgTWFydmVsbCBPY3Rlb25UWDIgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBvbmx5IHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBuZXR3b3JrIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvKSwgYWRkaW5nIHN1cHBvcnQgZm9yIG1xcHJpbyBoYXJkd2FyZSBiYW5kd2lkdGggb2ZmbG9hZC4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBTbWFydE5JQy9Tb0MgZHJpdmVyIHJlcXVpcmluZyBwaHlzaWNhbCBNYXJ2ZWxsIE9jdGVvblRYMiBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDM6NDA6MDcuOTMxNTczMDI1WiIsIlNlcSI6NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowx42g6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 03:22:07 +0000 UTC FinishedAt: 2026-09-04 03:40:09 +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+CgkJCTx0ZD4yMDI2LzA5LzA0IDAzOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIG9ubHkgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIG5ldHdvcmsgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi8pLCBhZGRpbmcgc3VwcG9ydCBmb3IgbXFwcmlvIGhhcmR3YXJlIGJhbmR3aWR0aCBvZmZsb2FkLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDL1NvQyBkcml2ZXIgcmVxdWlyaW5nIHBoeXNpY2FsIE1hcnZlbGwgT2N0ZW9uVFgyIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAzOjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTExMzY1ZTY4MWFlZTM5NGI1ZWM3ZDAwZjhkZmM1MTdjZjZjOGZlZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMDM6Mzk6NDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXG5pbmRleCAxNTNlYjU3YmFkMDY3Li5jOWE0MzI2ZDcyNWQ4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbkBAIC0zMzEsOCAmIzQzOzMzMSwxMiBAQCBzdGF0aWMgYm9vbCBpc192YWxpZF90eHNjaHEoc3RydWN0IHJ2dSAqcnZ1LCBpbnQgYmxrYWRkcixcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH1cbiBcbi1cdGlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKVxuJiM0MztcdGlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKSB7XG4mIzQzO1x0XHRkZXZfZXJyX3JhdGVsaW1pdGVkKHJ2dS1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O3BjaWZ1bmMgJXggbWFwIHBjaWZ1bmMgJXggbm90IGVxdWFsLCBsdmw9JXUgc2NocT0ldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgcGNpZnVuYywgbWFwX2Z1bmMsIGx2bCwgc2NocSk7XG4gXHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuaW5kZXggMTc1OTkyMTg4YzE4YS4uYTUxOWUwYTk3YTJiNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuQEAgLTYxNSw2ICYjNDM7NjE1LDE0MiBAQCB2b2lkIG90eDJfZ2V0X21hY19mcm9tX2FmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0wob3R4Ml9nZXRfbWFjX2Zyb21fYWYpO1xuIFxuJiM0MztzdGF0aWMgaW50XG4mIzQzO290eDJfbml4X3RtcV9yZWdfd3JpdGUoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgY250LFxuJiM0MztcdFx0ICAgICAgIHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddLFxuJiM0MztcdFx0ICAgICAgIHU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR10pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWJveCAqbWJveCA9IFx1MDAyNnBmdmYtXHUwMDNlbWJveDtcbiYjNDM7XHRzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTtcbiYjNDM7XHRpbnQgaSwgZXJyO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTtcbiYjNDM7XHRpZiAoIXJlcSkge1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJlcS1cdTAwM2VsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTtcbiYjNDM7XHRyZXEtXHUwMDNlbnVtX3JlZ3MgPSBjbnQ7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJlcS1cdTAwM2VyZWdbaV0gPSByZWdfYWRkcltpXTtcbiYjNDM7XHRcdHJlcS1cdTAwM2VyZWd2YWxbaV0gPSByZWdfdmFsW2ldO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddO1xuJiM0MztcdHU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR107XG4mIzQzO1x0aW50IGVyciwgc21xLCBpLCBjbnQgPSAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c21xID0gcGZ2Zi1cdTAwM2Vody50eHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1NNUV1baV07XG4mIzQzO1xuJiM0MztcdFx0cmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuJiM0MztcdFx0cmVnX3ZhbFtjbnRdID0gMDtcbiYjNDM7XHRcdGNudCYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdFx0cmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xuJiM0MztcdFx0cmVnX3ZhbFtjbnRdID0gMDtcbiYjNDM7XHRcdGNudCYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGNudCBcdTAwM2MgTUFYX1JFR1NfUEVSX01CT1hfTVNHIC0gMSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHJlZ19hZGRyLCByZWdfdmFsKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGdvdG8gZmFpbDtcbiYjNDM7XHRcdGNudCA9IDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoY250KSB7XG4mIzQzO1x0XHRlcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBmYWlsO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO2ZhaWw6XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLFxuJiM0MztcdFx0XHRcdCBpbnQgdHhxLCB1NjQgbWlucmF0ZSwgdTY0IG1heHJhdGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWJveCAqbWJveCA9IFx1MDAyNnBmdmYtXHUwMDNlbWJveDtcbiYjNDM7XHRzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTtcbiYjNDM7XHRpbnQgZXJyLCBzbXEsIG4gPSAwO1xuJiM0MztcdHU2NCByZWdfYWRkclsyXTtcbiYjNDM7XHR1NjQgcmVnX3ZhbFsyXTtcbiYjNDM7XHR1NjQgcmF0ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFtYXhyYXRlIFx1MDAyNlx1MDAyNiAhbWlucmF0ZSkge1xuJiM0MztcdFx0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xuJiM0MztcdFx0cmVnX2FkZHJbMF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbiYjNDM7XHRcdHJlZ192YWxbMF0gPSAwO1xuJiM0MztcdFx0cmVnX2FkZHJbMV0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbiYjNDM7XHRcdHJlZ192YWxbMV0gPSAwO1xuJiM0MztcdFx0cmV0dXJuIG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgMiwgcmVnX2FkZHIsIHJlZ192YWwpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTtcbiYjNDM7XHRpZiAoIXJlcSkge1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJlcS1cdTAwM2VsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTtcbiYjNDM7XG4mIzQzO1x0LyogTVFQUklPIGV4cG9zZXMgb25seSBtaW4vbWF4IHJhdGUsIG5vdCBidXJzdC4gIFBhc3MgYnVyc3QgMCBzb1xuJiM0MztcdCAqIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoKSBwcm9ncmFtbWVzIHRoZSBsYXJnZXN0IGJ1cnN0IHRoZSBOSVhcbiYjNDM7XHQgKiBlbmNvZGluZyBzdXBwb3J0cyAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb24gQ04xMEspLiAgVGhpcyBkaWZmZXJzXG4mIzQzO1x0ICogZnJvbSB0aGUgNjU1MzYgYnl0ZSBkZWZhdWx0IHVzZWQgaW4gdGhlIEhUQiBwYXRoLCB3aGljaCBpcyBhXG4mIzQzO1x0ICoga2VybmVsLXNpZGUgZGVmYXVsdCB3aGVuIG5vIGV4cGxpY2l0IGJ1cnN0IGlzIGNvbmZpZ3VyZWQsIG5vdCBhXG4mIzQzO1x0ICogaGFyZHdhcmUgY2FwLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogbXFwcmlvIHNldHVwIHJlc3RhcnRzIHRoZSBuZXRkZXYgKG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KSxcbiYjNDM7XHQgKiB3aGljaCByZXNldHMgTURRIHNoYXBlcnMgdG8gemVyby4gIFByb2dyYW0gYm90aCBQSVIgYW5kIENJUiBvblxuJiM0MztcdCAqIGV2ZXJ5IHVwZGF0ZSBzbyBvbWl0dGVkIHJhdGVzIGFyZSBhcHBsaWVkIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW5cbiYjNDM7XHQgKiByZWx5aW5nIG9uIHN0YWxlIGhhcmR3YXJlIHN0YXRlLlxuJiM0MztcdCAqL1xuJiM0MztcdHJlcS1cdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbiYjNDM7XHRpZiAobWF4cmF0ZSkge1xuJiM0MztcdFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1heHJhdGUpO1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IDA7XG4mIzQzO1x0fVxuJiM0MztcdG4mIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHQvKiBDSVImIzQzO1BJUiBzdXBwb3J0IGlzIHJlcXVpcmVkIGFuZCBjaGVja2VkIGF0IG1xcHJpbyBzZXR1cC4gKi9cbiYjNDM7XHRyZXEtXHUwMDNlcmVnW25dID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XG4mIzQzO1x0aWYgKG1pbnJhdGUpIHtcbiYjNDM7XHRcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtaW5yYXRlKTtcbiYjNDM7XHRcdHJlcS1cdTAwM2VyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJlcS1cdTAwM2VyZWd2YWxbbl0gPSAwO1xuJiM0MztcdH1cbiYjNDM7XHRuJiM0MzsmIzQzOztcbiYjNDM7XHRyZXEtXHUwMDNlbnVtX3JlZ3MgPSBuO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2Zvcl9wZmMpXG4ge1xuIFx0dTE2ICgqc2NocV9saXN0KVtNQVhfVFhTQ0hRX1BFUl9GVU5DXTtcbkBAIC02NTEsNyAmIzQzOzc4NywxMSBAQCBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2ZvclxuIFx0XHRcdFx0XHRcdCh1NjQpaHctXHUwMDNlc21xX2xpbmtfdHlwZSk7XG4gXHRcdHJlcS1cdTAwM2VudW1fcmVncyYjNDM7JiM0Mzs7XG4gXHRcdC8qIE1EUSBjb25maWcgKi9cbi1cdFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVtwcmlvXTtcbiYjNDM7XHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxuJiM0MztcdFx0XHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdWzBdO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dO1xuJiM0MztcbiBcdFx0cmVxLVx1MDAzZXJlZ1sxXSA9IE5JWF9BRl9NRFFYX1BBUkVOVChzY2hxKTtcbiBcdFx0cmVxLVx1MDAzZXJlZ3ZhbFsxXSA9IHBhcmVudCBcdTAwM2NcdTAwM2MgMTY7XG4gXHRcdHJlcS1cdTAwM2VudW1fcmVncyYjNDM7JiM0Mzs7XG5AQCAtNzc5LDYgJiM0Mzs5MTksOSBAQCBpbnQgb3R4Ml90eHNjaF9hbGxvYyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHRcdHJlcS1cdTAwM2VzY2hxW05JWF9UWFNDSF9MVkxfVEw0XSA9IGNoYW5fY250O1xuIFx0fVxuIFxuJiM0MztcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxuJiM0MztcdFx0cmVxLVx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9TTVFdID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbiYjNDM7XG4gXHRyYyA9IG90eDJfc3luY19tYm94X21zZyhcdTAwMjZwZnZmLVx1MDAzZW1ib3gpO1xuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gcmM7XG5AQCAtODQ0LDYgJiM0Mzs5ODcsNyBAQCB2b2lkIG90eDJfdHhzY2hxX3N0b3Aoc3RydWN0IG90eDJfbmljICpwZnZmKVxuIFxuIFx0LyogQ2xlYXIgdGhlIHR4c2NocSBsaXN0ICovXG4gXHRmb3IgKGx2bCA9IDA7IGx2bCBcdTAwM2MgTklYX1RYU0NIX0xWTF9DTlQ7IGx2bCYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHBmdmYtXHUwMDNlaHcudHhzY2hxX2NudFtsdmxdID0gMDtcbiBcdFx0Zm9yIChzY2hxID0gMDsgc2NocSBcdTAwM2MgTUFYX1RYU0NIUV9QRVJfRlVOQzsgc2NocSYjNDM7JiM0MzspXG4gXHRcdFx0cGZ2Zi1cdTAwM2Vody50eHNjaHFfbGlzdFtsdmxdW3NjaHFdID0gMDtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG5pbmRleCBlZWNlZTYxMmI3YjJjLi5lZGU3ZjExMTNiNzE0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG5AQCAtMTcsNiAmIzQzOzE3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zb2MvbWFydmVsbC9zaWxpY29ucy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc29jL21hcnZlbGwvb2N0ZW9udHgyL2FzbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L21hY3NlYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvcGt0X3NjaGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RldmxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWU2NC5oXHUwMDNlXG5AQCAtNDgzLDYgJiM0Mzs0ODQsMjMgQEAgc3RydWN0IHBmX2lycV9kYXRhIHtcbiBcdGludCBtZGV2cztcbiB9O1xuIFxuJiM0MztzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwIHtcbiYjNDM7XHR1NjQgbWluX3JhdGVbVENfUU9QVF9NQVhfUVVFVUVdO1xuJiM0MztcdHU2NCBtYXhfcmF0ZVtUQ19RT1BUX01BWF9RVUVVRV07XG4mIzQzO1x0X191OCBudW1fdGM7XG4mIzQzO1x0X191MTYgY291bnRbVENfUU9QVF9NQVhfUVVFVUVdO1xuJiM0MztcdF9fdTE2IG9mZnNldFtUQ19RT1BUX01BWF9RVUVVRV07XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3Qgb3R4Ml9tcXByaW8ge1xuJiM0MztcdHUzMlx0ZmxhZ3M7XG4mIzQzO1x0dTY0XHQqbWluX3JhdGU7XG4mIzQzO1x0dTY0XHQqbWF4X3JhdGU7XG4mIzQzO1x0Ym9vbFx0cmF0ZV9saW1pdDtcbiYjNDM7XHRib29sXHRyZXBsYWNlX3NldHVwX2RvbmU7XG4mIzQzO1x0Ym9vbFx0cmVwbGFjZV9ncmFmdF9kb25lO1xuJiM0Mzt9O1xuJiM0MztcbiBzdHJ1Y3Qgb3R4Ml9uaWMge1xuIFx0dm9pZCBfX2lvbWVtXHRcdCpyZWdfYmFzZTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlXHQqbmV0ZGV2O1xuQEAgLTUxNSw2ICYjNDM7NTMzLDEwIEBAIHN0cnVjdCBvdHgyX25pYyB7XG4gXHR1NjRcdFx0XHRmbGFncztcbiBcdHU2NFx0XHRcdCpjcV9vcF9hZGRyO1xuIFxuJiM0MztcdHN0cnVjdCBvdHgyX21xcHJpb1x0bXFwcmlvO1xuJiM0MztcdHN0cnVjdCBtcV9vZmZsb2FkX3NuYXBcdCpjdXJfbXFfc25hcDtcbiYjNDM7XHRzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwXHQqb2xkX21xX3NuYXA7XG4mIzQzO1xuIFx0c3RydWN0IGJwZl9wcm9nXHRcdCp4ZHBfcHJvZztcbiBcdHN0cnVjdCBvdHgyX3FzZXRcdHFzZXQ7XG4gXHRzdHJ1Y3Qgb3R4Ml9od1x0XHRodztcbkBAIC0xMjQ2LDYgJiM0MzsxMjY4LDExIEBAIGRtYV9hZGRyX3Qgb3R4Ml9kbWFfbWFwX3NrYl9mcmFnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc2VnLCBpbnQgKmxlbik7XG4gdm9pZCBvdHgyX2RtYV91bm1hcF9za2JfZnJhZ3Moc3RydWN0IG90eDJfbmljICpwZnZmLCBzdHJ1Y3Qgc2dfbGlzdCAqc2cpO1xuIGludCBvdHgyX3JlYWRfZnJlZV9zcWUoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgcWlkeCk7XG4mIzQzO2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHR4cSxcbiYjNDM7XHRcdFx0XHQgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTtcbiYjNDM7aW50IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuJiM0MztpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuJiM0MztpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiB2b2lkIG90eDJfcXVldWVfdmZfd29yayhzdHJ1Y3QgbWJveCAqbXcsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptYm94X3dxLFxuIFx0XHRcdGludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7XG4gaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXG5pbmRleCBmMTEwZGZhNDIzNjA1Li40YTcwYWJjMjMwYmVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuQEAgLTQxMyw2ICYjNDM7NDEzLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml9kY2JubF9pZWVlX3NldHBmYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWVlZV9wZmMgKnBmYylcbiBcdHU4IG9sZF9wZmNfZW47XG4gXHRpbnQgZXJyO1xuIFxuJiM0MztcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0IFx1MDAyNlx1MDAyNiBwZmMtXHUwMDNlcGZjX2VuKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7UEZDOiBjYW5ub3QgZW5hYmxlIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRvbGRfcGZjX2VuID0gcGZ2Zi1cdTAwM2VwZmNfZW47XG4gXHRwZnZmLVx1MDAzZXBmY19lbiA9IHBmYy1cdTAwM2VwZmNfZW47XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG5pbmRleCA5YmVlMWI5MWVlYWE2Li5lYzI2MDFjNmMyNTVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbkBAIC0yODcsNiAmIzQzOzI4NywxNCBAQCBzdGF0aWMgaW50IG90eDJfc2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuJiM0MztcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0IFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoY2hhbm5lbC1cdTAwM2V0eF9jb3VudCAhPSBwZnZmLVx1MDAzZWh3LnR4X3F1ZXVlcyB8fFxuJiM0MztcdCAgICAgY2hhbm5lbC1cdTAwM2VyeF9jb3VudCAhPSBwZnZmLVx1MDAzZWh3LnJ4X3F1ZXVlcykpIHtcbiYjNDM7XHRcdG5ldGRldl9pbmZvKGRldixcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O05vdCBwZXJtaXR0ZWQgdG8gY2hhbmdlIGNoYW5uZWwgY291bnQgd2hpbGUgTVEgcHJpbyBpcyBhY3RpdmVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChpZl91cClcbiBcdFx0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3N0b3AoZGV2KTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xuaW5kZXggYzk5NWYyOTAwODU5MC4uNzlhODJlNDQ1NDU0NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbkBAIC0xOTgwLDYgJiM0MzsxOTgwLDEyIEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX2ZyZWVfbWVtO1xuIFxuJiM0MztcdGVyciA9IG90eDJfbXFwcmlvX3VwKHBmKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0bmV0ZGV2X2VycihwZi1cdTAwM2VuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O21xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVycyBkdXJpbmcgb3BlbjogJWQ7IGNvbnRpbnVpbmcgd2l0aG91dCBiYW5kd2lkdGggbGltaXRzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBlcnIpO1xuJiM0MztcbiBcdC8qIFJlZ2lzdGVyIE5BUEkgaGFuZGxlciAqL1xuIFx0Zm9yIChxaWR4ID0gMDsgcWlkeCBcdTAwM2MgcGYtXHUwMDNlaHcuY2ludF9jbnQ7IHFpZHgmIzQzOyYjNDM7KSB7XG4gXHRcdGNxX3BvbGwgPSBcdTAwMjZxc2V0LVx1MDAzZW5hcGlbcWlkeF07XG5AQCAtMjg0Niw2ICYjNDM7Mjg1MiwxMiBAQCBzdGF0aWMgaW50IG90eDJfeGRwX3NldHVwKHN0cnVjdCBvdHgyX25pYyAqcGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiBcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKHBmLVx1MDAzZW5ldGRldik7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nO1xuIFxuJiM0MztcdGlmIChwcm9nIFx1MDAyNlx1MDAyNiBwZi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O1hEUDogY2Fubm90IGF0dGFjaCB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHByb2cgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VtdHUgXHUwMDNlIE1BWF9YRFBfTVRVKSB7XG4gXHRcdG5ldGRldl93YXJuKGRldiwgXCYjMzQ7SnVtYm8gZnJhbWVzIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggWERQXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXG5pbmRleCAwMzlmZDQ3ZWJmNTIyLi40MDkwMjk2ZWRmYzViIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xuQEAgLTE2LDYgJiM0MzsxNiw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjX2FjdC90Y19taXJyZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y19hY3QvdGNfdmxhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X3NjaGVkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L3NjaF9nZW5lcmljLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtjbjEway5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7b3R4Ml9jb21tb24uaFwmIzM0O1xuQEAgLTMxLDYgJiM0MzszMywxMCBAQFxuIFxuICNkZWZpbmUgTUNBU1RfSU5WQUxJRF9HUlBcdFx0KC0xVSlcbiAjZGVmaW5lIFJBVEVfTUFOVElTU0FfQklUU1x0XHQ4XG4mIzQzOy8qIE1pbiBwZXItcXVldWUgZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgyIE1icHMpLiAqL1xuJiM0MzsjZGVmaW5lIE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTXHQyNTAwMDBVTExcbiYjNDM7LyogTWF4IGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMTMwODE2IE1icHMpLiAqL1xuJiM0MzsjZGVmaW5lIE9UWDJfTVFQUklPX01BWF9SQVRFX0JZVEVTX1BTXHQoKE1BWF9CVVJTVF9TSVpFICogMTAwMDAwMFVMTCkgLyA4VUxMKVxuIFxuIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcbiBcdFx0XHRcdCAgICAgIHUzMiAqYnVyc3RfZXhwLCB1MzIgKmJ1cnN0X21hbnRpc3NhKVxuQEAgLTYxLDYgJiM0Mzs2Nyw5IEBAIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcbiBcdFx0XHQqYnVyc3RfbWFudGlzc2EgPSB0bXAgLyAoMVVMTCBcdTAwM2NcdTAwM2MgKCpidXJzdF9leHAgLSA3KSk7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBidXJzdCAwOiBsYXJnZXN0IGVuY29kYWJsZSBidXJzdCAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb25cbiYjNDM7XHRcdCAqIENOMTBLKSwgbm90IGEgbWluaW1hbCBidXJzdC5cbiYjNDM7XHRcdCAqL1xuIFx0XHQqYnVyc3RfZXhwID0gTUFYX0JVUlNUX0VYUE9ORU5UO1xuIFx0XHQqYnVyc3RfbWFudGlzc2EgPSBtYXhfbWFudGlzc2E7XG4gXHR9XG5AQCAtMTYwMCwxNCAmIzQzOzE2MDksNzA5IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19ibG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgIG5pYywgbmljLCBpbmdyZXNzKTtcbiB9XG4gXG4mIzQzOy8qIEZyZWUgdGhlIHBlci1xdWV1ZSBtaW4vbWF4IHJhdGUgY2FjaGVzLiAqL1xuJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19mcmVlX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdGRldm1fa2ZyZWUocGZ2Zi1cdTAwM2VkZXYsIHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlKTtcbiYjNDM7XHRkZXZtX2tmcmVlKHBmdmYtXHUwMDNlZGV2LCBwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSk7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUgPSBOVUxMO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlID0gTlVMTDtcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmLCBib29sIHJlcGxhY2luZylcbiYjNDM7e1xuJiM0MztcdHUxNiBudW1fdHhxID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbiYjNDM7XG4mIzQzO1x0aWYgKHJlcGxhY2luZyBcdTAwMjZcdTAwMjYgcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUgXHUwMDI2XHUwMDI2IHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSB7XG4mIzQzO1x0XHRtZW1zZXQocGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUsIDAsXG4mIzQzO1x0XHQgICAgICAgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUpKTtcbiYjNDM7XHRcdG1lbXNldChwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSwgMCxcbiYjNDM7XHRcdCAgICAgICBudW1fdHhxICogc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSkpO1xuJiM0MztcdFx0cGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgPSAwO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xuJiM0MztcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVx1MDAzZWRldiwgbnVtX3R4cSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSksXG4mIzQzO1x0XHRcdFx0XHQgICAgIEdGUF9LRVJORUwpO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtXHUwMDNlZGV2LCBudW1fdHhxLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSB8fCAhcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpIHtcbiYjNDM7XHRcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19zbmFwX2ZyZWUoc3RydWN0IG90eDJfbmljICpwZnZmLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IG1xX29mZmxvYWRfc25hcCAqKnNuYXApXG4mIzQzO3tcbiYjNDM7XHRpZiAoISpzbmFwKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRkZXZtX2tmcmVlKHBmdmYtXHUwMDNlZGV2LCAqc25hcCk7XG4mIzQzO1x0KnNuYXAgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3NuYXBfY29weShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKipkc3QsXG4mIzQzO1x0XHRcdFx0IGNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbiYjNDM7XHRzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICpzbmFwO1xuJiM0MztcdGludCB0YztcbiYjNDM7XG4mIzQzO1x0aWYgKCEqZHN0KSB7XG4mIzQzO1x0XHRzbmFwID0gZGV2bV9remFsbG9jKHBmdmYtXHUwMDNlZGV2LCBzaXplb2YoKnNuYXApLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdGlmICghc25hcClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0XHQqZHN0ID0gc25hcDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0c25hcCA9ICpkc3Q7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzbmFwLVx1MDAzZW51bV90YyA9IHFvcHQtXHUwMDNlbnVtX3RjO1xuJiM0MztcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgVENfUU9QVF9NQVhfUVVFVUU7IHRjJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c25hcC1cdTAwM2Vjb3VudFt0Y10gPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbiYjNDM7XHRcdHNuYXAtXHUwMDNlb2Zmc2V0W3RjXSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbiYjNDM7XHRcdHNuYXAtXHUwMDNlbWluX3JhdGVbdGNdID0gMDtcbiYjNDM7XHRcdHNuYXAtXHUwMDNlbWF4X3JhdGVbdGNdID0gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IHRjJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXG4mIzQzO1x0XHRcdHNuYXAtXHUwMDNlbWluX3JhdGVbdGNdID0gbXFwcmlvLVx1MDAzZW1pbl9yYXRlW3RjXTtcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuJiM0MztcdFx0XHRzbmFwLVx1MDAzZW1heF9yYXRlW3RjXSA9IG1xcHJpby1cdTAwM2VtYXhfcmF0ZVt0Y107XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19zdGFnZV9jdXIoc3RydWN0IG90eDJfbmljICpwZnZmLFxuJiM0MztcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG90eDJfbXFwcmlvX3NuYXBfY29weShwZnZmLCBcdTAwMjZwZnZmLVx1MDAzZWN1cl9tcV9zbmFwLCBtcXByaW8pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19zbmFwX2NvbW1pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXHUwMDI2cGZ2Zi1cdTAwM2VvbGRfbXFfc25hcCk7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VvbGRfbXFfc25hcCA9IHBmdmYtXHUwMDNlY3VyX21xX3NuYXA7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VjdXJfbXFfc25hcCA9IE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2NsZWFyX3JlcGxhY2Vfc3RhdGUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lID0gZmFsc2U7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lID0gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHBmdmYtXHUwMDNlaHcudHhzY2hxX2NudFtOSVhfVFhTQ0hfTFZMX01EUV0gIT0gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0b3JlX29sZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICpzbmFwID0gcGZ2Zi1cdTAwM2VvbGRfbXFfc25hcDtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4mIzQzO1x0dTE2IG51bV90eHEgPSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xuJiM0MztcdGludCB0YywgdHhxLCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmICghc25hcClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBvdHgyX21xcHJpb19hbGxvY19jYWNoZShwZnZmLCBmYWxzZSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdG1lbXNldChwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSwgMCwgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUpKTtcbiYjNDM7XHRtZW1zZXQocGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUsIDAsIG51bV90eHEgKiBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSk7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgPSAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHNuYXAtXHUwMDNlbnVtX3RjOyB0YyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBtaW5fcmF0ZSA9IHNuYXAtXHUwMDNlbWluX3JhdGVbdGNdO1xuJiM0MztcdFx0dTY0IG1heF9yYXRlID0gc25hcC1cdTAwM2VtYXhfcmF0ZVt0Y107XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1pbl9yYXRlKVxuJiM0MztcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyB8PSBUQ19NUVBSSU9fRl9NSU5fUkFURTtcbiYjNDM7XHRcdGlmIChtYXhfcmF0ZSlcbiYjNDM7XHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgfD0gVENfTVFQUklPX0ZfTUFYX1JBVEU7XG4mIzQzO1xuJiM0MztcdFx0Zm9yICh0eHEgPSBzbmFwLVx1MDAzZW9mZnNldFt0Y107XG4mIzQzO1x0XHQgICAgIHR4cSBcdTAwM2Mgc25hcC1cdTAwM2VvZmZzZXRbdGNdICYjNDM7IHNuYXAtXHUwMDNlY291bnRbdGNdOyB0eHEmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcbiYjNDM7XHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXSA9IG1heF9yYXRlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCBzbmFwLVx1MDAzZW51bV90Yyk7XG4mIzQzO1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBzbmFwLVx1MDAzZW51bV90YzsgdGMmIzQzOyYjNDM7KVxuJiM0MztcdFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIHRjLCBzbmFwLVx1MDAzZWNvdW50W3RjXSxcbiYjNDM7XHRcdFx0XHQgICAgc25hcC1cdTAwM2VvZmZzZXRbdGNdKTtcbiYjNDM7XG4mIzQzO1x0aWYgKG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpIHtcbiYjNDM7XHRcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldigpIGNsZWFycyByYXRlX2xpbWl0IHdoZW4gbmRvX29wZW4oKSBmYWlscy4gKi9cbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3R4Ml9tcXByaW9fdXAocGZ2Zik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdG90eDJfbXFwcmlvX3NuYXBfZnJlZShwZnZmLCBcdTAwMjZwZnZmLVx1MDAzZWN1cl9tcV9zbmFwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfZGVzdHJveShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXHUwMDI2cGZ2Zi1cdTAwM2VjdXJfbXFfc25hcCk7XG4mIzQzO1x0b3R4Ml9tcXByaW9fc25hcF9mcmVlKHBmdmYsIFx1MDAyNnBmdmYtXHUwMDNlb2xkX21xX3NuYXApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19jbGVhcl9zdyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4mIzQzO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgPSBmYWxzZTtcbiYjNDM7XHRvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHBmdmYpO1xuJiM0MztcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgMCk7XG4mIzQzO1x0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogVGVhciBkb3duIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZDogY2xlYXIgcGVyLXF1ZXVlIHNoYXBlcnMsXG4mIzQzOyAqIG1xcHJpb19yYXRlX2xpbWl0LCBuZXRkZXYgVEMgbWFwcGluZ3MsIGFuZCB0aGUgY2FjaGVkIHJhdGVzLiAgQ2FsbGVkIG9uXG4mIzQzOyAqIGV4cGxpY2l0IG1xcHJpbyB0ZWFyZG93biAodGMgcWRpc2MgZGVsKSBhbmQgZXJyb3IgY2xlYW51cCwgbm90IG9uXG4mIzQzOyAqIHJvdXRpbmUgbmV0ZGV2IHN0b3Avb3BlbiBjeWNsZXMgd2hlcmUgdGhlIG9mZmxvYWQgc3RheXMgYWN0aXZlLlxuJiM0MzsgKi9cbiYjNDM7aW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAobmV0aWZfcnVubmluZyhwZnZmLVx1MDAzZW5ldGRldikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpXG4mIzQzO1x0XHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XG4mIzQzO1xuJiM0MztcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xuJiM0MztcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKHBmdmYtXHUwMDNlbmV0ZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDttcXByaW86IGZhaWxlZCB0byBjbGVhciBoYXJkd2FyZSBzaGFwZXJzOiAlZDsgc29tZSBUWCBxdWV1ZXMgbWF5IHJldGFpbiBiYW5kd2lkdGggbGltaXRzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBlcnIpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG90eDJfbXFwcmlvX3VwKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbiYjNDM7XHRpbnQgdHhxLCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlIHx8ICFwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKHR4cSA9IDA7IHR4cSBcdTAwM2MgcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlczsgdHhxJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xuJiM0MztcbiYjNDM7XHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5mbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXG4mIzQzO1x0XHRcdG1pbl9yYXRlID0gcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGVbdHhxXTtcbiYjNDM7XHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5mbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4mIzQzO1x0XHRcdG1heF9yYXRlID0gcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIW1pbl9yYXRlIFx1MDAyNlx1MDAyNiAhbWF4X3JhdGUpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLCBtaW5fcmF0ZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgbWF4X3JhdGUpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IGZhaWxlZCB0byByZXN0b3JlIHNoYXBlciBmb3IgdHhxICVkOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICB0eHEsIGVycik7XG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUmVzdGFydCB0aGUgbmV0ZGV2IHRvIHJlcHJvZ3JhbSB0aGUgVFggc2NoZWR1bGVyIGhpZXJhcmNoeSBmb3IgbXFwcmlvXG4mIzQzOyAqIGJhbmR3aWR0aCBvZmZsb2FkLiAgQm90aCBtcXByaW8gYWRkIGFuZCBkZWxldGUgKHdoZW4gb2ZmbG9hZCB3YXMgYWN0aXZlKVxuJiM0MzsgKiB0YWtlIHRoaXMgcGF0aCB2aWEgbmRvX3N0b3AoKS9uZG9fb3BlbigpIHNvIFZGLXNwZWNpZmljIG9wZW4gbG9naWMgKGUuZy5cbiYjNDM7ICogTEJLIGNhcnJpZXIgb24pIHJ1bnMgY29ycmVjdGx5LiAgVGhlIGZ1bGwgc3RvcC9vcGVuIGN5Y2xlIGNsZWFyc1xuJiM0MzsgKiBjYXJyaWVyLCBzdG9wcyBhbGwgVFggcXVldWVzLCB0ZWFycyBkb3duIElSUXMvTkFQSSBhbmQgZHJvcHMgaW4tZmxpZ2h0XG4mIzQzOyAqIHRyYWZmaWMuICBJZiBvcGVuIGZhaWxzLCB0aGUgaW50ZXJmYWNlIGlzIGxlZnQgYWRtaW5pc3RyYXRpdmVseSBkb3duXG4mIzQzOyAqIHdpdGhvdXQgY2FsbGluZyBuZG9fc3RvcCgpIGFnYWluIG9uIHJlc291cmNlcyBhbHJlYWR5IHRvcm4gZG93biBieVxuJiM0MzsgKiB0aGUgb3BlbiBlcnJvciBwYXRoLlxuJiM0MzsgKlxuJiM0MzsgKiBEbyBub3QgY2FsbCBkZXZfZGVhY3RpdmF0ZSgpL2Rldl9hY3RpdmF0ZSgpIGhlcmU6IHRoaXMgcnVucyBmcm9tXG4mIzQzOyAqIG5kb19zZXR1cF90YygpIHdoaWxlIHFkaXNjX2dyYWZ0KCkgbWF5IGFscmVhZHkgaG9sZCB0aGUgZGV2aWNlXG4mIzQzOyAqIGRlYWN0aXZhdGVkIGFuZCBtdXN0IHBlcmZvcm0gdGhlIGZpbmFsIGRldl9hY3RpdmF0ZSgpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJhdGVfbGltaXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gbmV0ZGV2LVx1MDAzZW5ldGRldl9vcHM7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0LyogVE9ETzogRXhwbG9yZSBsaXZlIFRYIHNjaGVkdWxlciByZXByb2dyYW1taW5nIHRvIGF2b2lkIGEgZnVsbFxuJiM0MztcdCAqIG5kb19zdG9wKCkvbmRvX29wZW4oKSBib3VuY2Ugb24gZXZlcnkgbXFwcmlvIGNoYW5nZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRuZXRkZXZfaW5mbyhuZXRkZXYsXG4mIzQzO1x0XHQgICAgXCYjMzQ7bXFwcmlvOiByZXN0YXJ0aW5nIGludGVyZmFjZSB0byByZXByb2dyYW0gVFggc2NoZWR1bGVyOyBpbi1mbGlnaHQgdHJhZmZpYyB3aWxsIGJlIGRyb3BwZWRcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBvcHMtXHUwMDNlbmRvX3N0b3AobmV0ZGV2KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0LyogU2V0IGJlZm9yZSBuZG9fb3BlbigpIHNvIG90eDJfdHhzY2hfYWxsb2MoKSB3aWRlbnMgU01RIGFsbG9jYXRpb24uXG4mIzQzO1x0ICogT24gdGVhcmRvd24sIGRyb3AgbXFwcmlvIHNvZnR3YXJlIHN0YXRlIHNvIG5kb19vcGVuKCkgZG9lcyBub3RcbiYjNDM7XHQgKiByZS1hcHBseSBiYW5kd2lkdGggbGltaXRzIHZpYSBvdHgyX21xcHJpb191cCgpIGFmdGVyIHRoZSBrZXJuZWxcbiYjNDM7XHQgKiByZW1vdmVkIHRoZSBxZGlzYy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocmF0ZV9saW1pdClcbiYjNDM7XHRcdHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgPSB0cnVlO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBvcHMtXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7RmFpbGVkIHRvIHJlc3RhcnQgZGV2aWNlIGFmdGVyIG1xcHJpbyBjaGFuZ2U6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBlcnIpO1xuJiM0MztcdFx0LyogbmRvX29wZW4oKSBhbHJlYWR5IGZyZWVkIHRoZSBUWCBzY2hlZHVsZXJzIG9uIGZhaWx1cmUgd2hpbGVcbiYjNDM7XHRcdCAqIG5ldGlmX3J1bm5pbmcoKSBtYXkgc3RpbGwgYmUgdHJ1ZTsgZHJvcCBtcXByaW8gc29mdHdhcmUgc3RhdGVcbiYjNDM7XHRcdCAqIG9ubHkgaW5zdGVhZCBvZiBzZW5kaW5nIHNoYXBlciBjbGVhcnMgdG8gZnJlZWQgcXVldWVzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcbiYjNDM7XHRcdC8qIG5kb19vcGVuKCkgcm9sbHMgYmFjayBvbiBmYWlsdXJlOyBtYXJrIHRoZSBpbnRlcmZhY2UgZG93biBzb1xuJiM0MztcdFx0ICogbmV0aWZfY2xvc2UoKSBkb2VzIG5vdCBpbnZva2UgbmRvX3N0b3AoKSBvbiBmcmVlZCBOQVBJL3F1ZXVlXG4mIzQzO1x0XHQgKiBzdGF0ZS4gQ2FsbGVyIGhvbGRzIFJUTkw7IGRldl9jbG9zZSgpIHdvdWxkIGRlYWRsb2NrLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRwZnZmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19JTlRGX0RPV047XG4mIzQzO1x0XHQvKiB2aXNpYmxlIHRvIG90eDJfc3RvcCgpIG9uIG90aGVyIGNwdXMgKi9cbiYjNDM7XHRcdHNtcF93bWIoKTtcbiYjNDM7XHRcdG5ldGlmX2Nsb3NlKG5ldGRldik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdHU2NCByYXRlLCB1MzIgcWNvdW50LCBpbnQgdGMsXG4mIzQzO1x0XHRcdFx0XHRjb25zdCBjaGFyICpuYW1lKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFyYXRlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChxY291bnQgXHUwMDNjPSAxKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIFRPRE86IG1xcHJpbyBtaW5fcmF0ZS9tYXhfcmF0ZSBhcmUgcGVyIHRyYWZmaWMgY2xhc3MsIGJ1dCBiYW5kd2lkdGhcbiYjNDM7XHQgKiBvZmZsb2FkIHNoYXBlcyBvbiBwZXItcXVldWUgTURRIG5vZGVzIHBhcmVudGVkIHVuZGVyIGEgc2luZ2xlIFRMNC5cbiYjNDM7XHQgKiBXaXRob3V0IHBlci1UQyBUTDQgc2hhcGVycyB0aGUgZHJpdmVyIGNhbm5vdCBob25vciBUQy1sZXZlbCBsaW1pdHNcbiYjNDM7XHQgKiBmb3IgYSB0cmFmZmljIGNsYXNzIHRoYXQgc3BhbnMgbXVsdGlwbGUgcXVldWVzIHdpdGhvdXQgZWl0aGVyXG4mIzQzO1x0ICogZGl2aWRpbmcgdGhlIHJhdGUgYWNyb3NzIHF1ZXVlcyAodUFQSSBtaXNtYXRjaCkgb3IgZXhjZWVkaW5nIHRoZSBUQ1xuJiM0MztcdCAqIGNhcCB3aGVuIGV2ZXJ5IG1lbWJlciBxdWV1ZSBpcyBhY3RpdmUuIFJlamVjdCB1bnRpbCBwZXItVEMgVEw0XG4mIzQzO1x0ICogc2hhcGluZyBjYW4gYmUgaW1wbGVtZW50ZWQgd2l0aG91dCBhbGxvY2F0aW5nIGFkZGl0aW9uYWwgVEw0IG5vZGVzXG4mIzQzO1x0ICogYmV5b25kIHRoZSBleGlzdGluZyBoaWVyYXJjaHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHQgICBcJiMzNDttcXByaW86ICVzIHJhdGUgZm9yIHRjICVkIG5vdCBzdXBwb3J0ZWQgd2l0aCAldSBxdWV1ZXNcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBuYW1lLCB0YywgcWNvdW50KTtcbiYjNDM7XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O21xcHJpbzogJXMgcmF0ZSBmb3IgdGMgJWQgbm90IHN1cHBvcnRlZCB3aXRoICV1IHF1ZXVlc1wmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIG5hbWUsIHRjLCBxY291bnQpO1xuJiM0MztcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb192YWxpZGF0ZV90eHFzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHUxNiBudW1fdHhxID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbiYjNDM7XHRpbnQgdGMsIHR4cTtcbiYjNDM7XG4mIzQzO1x0aWYgKHFvcHQtXHUwMDNlbnVtX3RjIFx1MDAzZSBudW1fdHhxKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7TnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBxb3B0LVx1MDAzZW51bV90YywgbnVtX3R4cSk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7TnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1XCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgICBxb3B0LVx1MDAzZW51bV90YywgbnVtX3R4cSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChudW1fdHhxIFx1MDAzZSBNQVhfVFhTQ0hRX1BFUl9GVU5DKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7TnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgICAgIFwmIzM0O051bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1XCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgICBudW1fdHhxLCBNQVhfVFhTQ0hRX1BFUl9GVU5DKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1MzIgcWNvdW50ID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4mIzQzO1xuJiM0MztcdFx0Zm9yICh0eHEgPSBxb3B0LVx1MDAzZW9mZnNldFt0Y107XG4mIzQzO1x0XHQgICAgIHR4cSBcdTAwM2MgcW9wdC1cdTAwM2VvZmZzZXRbdGNdICYjNDM7IHFjb3VudDsgdHhxJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRpZiAodHhxIFx1MDAzZT0gbnVtX3R4cSkge1xuJiM0MztcdFx0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiB0eHEgJWQgZXhjZWVkcyBvZmZsb2FkIHF1ZXVlIGNvdW50ICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgdHhxLCBudW1fdHhxKTtcbiYjNDM7XHRcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIFwmIzM0O21xcHJpbzogdHhxICVkIGV4Y2VlZHMgb2ZmbG9hZCBxdWV1ZSBjb3VudCAldVwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIHR4cSwgbnVtX3R4cSk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBvdHgyX21xcHJpb19yYXRlX3ZhbGlkKHU2NCByYXRlX2J5dGVzX3BzKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IG1icHM7XG4mIzQzO1xuJiM0MztcdGlmICghcmF0ZV9ieXRlc19wcylcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRpZiAocmF0ZV9ieXRlc19wcyBcdTAwM2MgT1RYMl9NUVBSSU9fTUlOX1JBVEVfQllURVNfUFMpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChyYXRlX2J5dGVzX3BzIFx1MDAzZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QUylcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJhdGVfYnl0ZXNfcHMgXHUwMDNlIGRpdl91NjQoVTY0X01BWCwgOCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG1icHMgPSBvdHgyX2NvbnZlcnRfcmF0ZShyYXRlX2J5dGVzX3BzKTtcbiYjNDM7XHRyZXR1cm4gaWxvZzIobWJwcyAvIDIpIFx1MDAzYz0gTUFYX1JBVEVfRVhQT05FTlQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml90ZWFyZG93bl90Y19tcXByaW8oc3RydWN0IG90eDJfbmljICpwZnZmLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbiYjNDM7XHRib29sIGhhZF9tcXByaW8gPSBwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0O1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbiYjNDM7XHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdHFvcHQtXHUwMDNlaHcgPSAwO1xuJiM0MztcbiYjNDM7XHQvKiB0YyBxZGlzYyByZXBsYWNlIHJ1bnMgc2V0dXAgb24gdGhlIG5ldyBtcXByaW8gYmVmb3JlIGRlc3Ryb3lpbmcgdGhlXG4mIzQzO1x0ICogb2xkIG9uZS4gcmVwbGFjZV9zZXR1cF9kb25lIGFuZCBUQ19ST09UX0dSQUZUIGRpc3Rpbmd1aXNoIHN0YWxlXG4mIzQzO1x0ICogb2xkLWluc3RhbmNlIHRlYXJkb3duIGZyb20gZ3JhZnQgZmFpbHVyZSBhZnRlciBzZXR1cC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lIFx1MDAyNlx1MDAyNiBwZnZmLVx1MDAzZWN1cl9tcV9zbmFwKSB7XG4mIzQzO1x0XHRlcnIgPSAwO1xuJiM0MztcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSlcbiYjNDM7XHRcdFx0b3R4Ml9tcXByaW9fc25hcF9jb21taXQocGZ2Zik7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHBmdmYpO1xuJiM0MztcdFx0b3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShwZnZmKTtcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBTa2lwIHRoZSBuZXRkZXYgcmVzdGFydCB3aGVuIG1xcHJpbyBvZmZsb2FkIHdhcyBub3QgYWN0aXZlLiAqL1xuJiM0MztcdGlmICghaGFkX21xcHJpbylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAoaWZfdXApIHtcbiYjNDM7XHRcdGludCBkb3duX2VyciwgZXJyO1xuJiM0MztcbiYjNDM7XHRcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcbiYjNDM7XHRcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KG5ldGRldiwgZmFsc2UpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdHJldHVybiBkb3duX2VycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIG5kb19zdG9wKCkgYWxyZWFkeSBmcmVlZCB0aGUgVFggc2NoZWR1bGVyIFRMIG5vZGVzOyBkcm9wIHNvZnR3YXJlXG4mIzQzO1x0ICogc3RhdGUgb25seS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX3NldHVwX3RjX21xcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHRcdHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBtcXByaW8tXHUwMDNlZXh0YWNrO1xuJiM0MztcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0c3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gXHUwMDI2bXFwcmlvLVx1MDAzZXFvcHQ7XG4mIzQzO1x0Ym9vbCByZXBsYWNpbmcgPSBwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0O1xuJiM0MztcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XG4mIzQzO1x0aW50IHRjLCB0eHEsIGVyciwgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFxb3B0LVx1MDAzZWh3KVxuJiM0MztcdFx0cmV0dXJuIG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XG4mIzQzO1xuJiM0MztcdGlmICghaWZfdXApIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDttcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFxcblwmIzM0Oyk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDttcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobXFwcmlvLVx1MDAzZXNoYXBlciAhPSBUQ19NUVBSSU9fU0hBUEVSX0JXX1JBVEUpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDtVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxcblwmIzM0OywgbXFwcmlvLVx1MDAzZXNoYXBlcik7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywgXCYjMzQ7VW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgIG1xcHJpby1cdTAwM2VzaGFwZXIpO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCBcdTAwMjZwZnZmLVx1MDAzZWh3LmNhcF9mbGFnKSkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSJiM0MztQSVIgc3VwcG9ydFxcblwmIzM0Oyk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSJiM0MztQSVIgc3VwcG9ydFwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoaXNfb3R4Ml9zZHBfcmVwKHBmdmYtXHUwMDNlcGRldikpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFxcblwmIzM0Oyk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwZnZmLVx1MDAzZXBmY19lbikge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNleGRwX3Byb2cpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgWERQIGlzIGFjdGl2ZVwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbiYjNDM7XHRcdHUzMiBxY291bnQgPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbiYjNDM7XHRcdFx0bWluX3JhdGUgPSBtcXByaW8tXHUwMDNlbWluX3JhdGVbdGNdO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4mIzQzO1x0XHRcdG1heF9yYXRlID0gbXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobWluX3JhdGUgXHUwMDI2XHUwMDI2IG1heF9yYXRlIFx1MDAyNlx1MDAyNiBtaW5fcmF0ZSBcdTAwM2UgbWF4X3JhdGUpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpO1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBcJiMzNDttaW5fcmF0ZSAlbGx1IGV4Y2VlZHMgbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWRcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKSB7XG4mIzQzO1x0XHRcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBleHRhY2ssIG1pbl9yYXRlLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIHFjb3VudCwgdGMsIFwmIzM0O21pblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSkge1xuJiM0MztcdFx0XHRlcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtYXhfcmF0ZSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBxY291bnQsIHRjLCBcJiMzNDttYXhcJiMzNDspO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIW90eDJfbXFwcmlvX3JhdGVfdmFsaWQobWluX3JhdGUpKSB7XG4mIzQzO1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgbWluX3JhdGUsIHRjKTtcbiYjNDM7XHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgXCYjMzQ7bXFwcmlvOiBtaW5fcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0c1wmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBtaW5fcmF0ZSwgdGMpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChtYXhfcmF0ZSkpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0c1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICBtYXhfcmF0ZSwgdGMpO1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBcJiMzNDttcXByaW86IG1heF9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIG1heF9yYXRlLCB0Yyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdHhxcyhuZXRkZXYsIGV4dGFjaywgcW9wdCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfbXFwcmlvX3N0YWdlX2N1cihwZnZmLCBtcXByaW8pO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihwZnZmLVx1MDAzZW5ldGRldiwgdHJ1ZSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUocGZ2ZiwgcmVwbGFjaW5nKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHQvKiBvdHgyX21xcHJpb191cCgpIG1heSBoYXZlIHJlc3RvcmVkIHRoZSBwcmV2aW91cyBjb25maWd1cmF0aW9uIGR1cmluZ1xuJiM0MztcdCAqIHRoZSByZXN0YXJ0IGFib3ZlLiBDbGVhciBldmVyeSBNRFEgc2hhcGVyIGJlZm9yZSBhcHBseWluZyB0aGUgbmV3XG4mIzQzO1x0ICogbWFwcGluZyBzbyBxdWV1ZXMgZHJvcHBlZCBmcm9tIHRoZSBUQyBsYXlvdXQgZG8gbm90IGtlZXAgc3RhbGVcbiYjNDM7XHQgKiBsaW1pdHMgaW4gaGFyZHdhcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpIHtcbiYjNDM7XHRcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzID0gbXFwcmlvLVx1MDAzZWZsYWdzO1xuJiM0MztcbiYjNDM7XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbiYjNDM7XHRcdHUzMiBxY291bnQgPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBSYXRlcyBvbWl0dGVkIGZyb20gdGMgbXFwcmlvIGFyZSBwYXNzZWQgYXMgemVybyBhbmQgYm90aCBNRFFcbiYjNDM7XHRcdCAqIHNoYXBlciByZWdpc3RlcnMgYXJlIHByb2dyYW1tZWQ7IHNlZVxuJiM0MztcdFx0ICogb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcigpLiBNdWx0aS1xdWV1ZSBUQ3Mgd2l0aCByYXRlc1xuJiM0MztcdFx0ICogYXJlIHJlamVjdGVkIGFib3ZlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbiYjNDM7XHRcdFx0bWluX3JhdGUgPSBtcXByaW8tXHUwMDNlbWluX3JhdGVbdGNdO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4mIzQzO1x0XHRcdG1heF9yYXRlID0gbXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKHR4cSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbiYjNDM7XHRcdCAgICAgdHhxIFx1MDAzYyBxb3B0LVx1MDAzZW9mZnNldFt0Y10gJiM0MzsgcWNvdW50OyB0eHEmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdG5ldGRldl9kYmcobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogdGMgJWQgdHhxICVkIG1pbl9yYXRlICVsbHUgbWF4X3JhdGUgJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICB0YywgdHhxLCBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xuJiM0MztcbiYjNDM7XHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGVbdHhxXSA9IG1pbl9yYXRlO1xuJiM0MztcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7XG4mIzQzO1xuJiM0MztcdFx0XHRlcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgcGZ2Zi1cdTAwM2VjdXJfbXFfc25hcC1cdTAwM2VudW1fdGMpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBmdmYtXHUwMDNlY3VyX21xX3NuYXAtXHUwMDNlbnVtX3RjOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdG5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCBpLCBwZnZmLVx1MDAzZWN1cl9tcV9zbmFwLVx1MDAzZWNvdW50W2ldLFxuJiM0MztcdFx0XHRcdCAgICBxb3B0LVx1MDAzZW9mZnNldFtpXSk7XG4mIzQzO1xuJiM0MztcdHFvcHQtXHUwMDNlaHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7XG4mIzQzO1xuJiM0MztcdGlmIChyZXBsYWNpbmcpIHtcbiYjNDM7XHRcdHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSA9IHRydWU7XG4mIzQzO1x0XHRwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSBmYWxzZTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0b3R4Ml9tcXByaW9fc25hcF9jb21taXQocGZ2Zik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2NsZWFudXA6XG4mIzQzO1x0cW9wdC1cdTAwM2VodyA9IDA7XG4mIzQzO1x0aWYgKHJlcGxhY2luZykge1xuJiM0MztcdFx0aW50IHJlc3RvcmVfZXJyID0gb3R4Ml9tcXByaW9fcmVzdG9yZV9vbGQocGZ2Zik7XG4mIzQzO1xuJiM0MztcdFx0b3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShwZnZmKTtcbiYjNDM7XHRcdGlmIChyZXN0b3JlX2Vycikge1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IHJlcGxhY2UgZmFpbGVkIGFuZCBwcmlvciBjb25maWd1cmF0aW9uIHJvbGxiYWNrIGZhaWxlZDogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgcmVzdG9yZV9lcnIpO1xuJiM0MztcdFx0XHRpZiAoZXh0YWNrKVxuJiM0MztcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgXCYjMzQ7bXFwcmlvOiByZXBsYWNlIGZhaWxlZCBhbmQgcHJpb3IgY29uZmlndXJhdGlvbiByb2xsYmFjayBmYWlsZWQ6ICVkXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgcmVzdG9yZV9lcnIpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiByZXBsYWNlIGZhaWxlZDsgcHJpb3IgY29uZmlndXJhdGlvbiByZXN0b3JlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGlmIChleHRhY2spXG4mIzQzO1x0XHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiByZXBsYWNlIGZhaWxlZDsgcHJpb3IgY29uZmlndXJhdGlvbiByZXN0b3JlZFwmIzM0Oyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXR1cm4gZXJyID8gZXJyIDogLUVJTztcbiYjNDM7XHR9XG4mIzQzO1x0b3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfcm9vdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCB0Y19yb290X3FvcHRfb2ZmbG9hZCAqcm9vdClcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAocm9vdC1cdTAwM2Vjb21tYW5kKSB7XG4mIzQzO1x0Y2FzZSBUQ19ST09UX0dSQUZUOlxuJiM0MztcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSlcbiYjNDM7XHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lID0gdHJ1ZTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh2b2lkICp0eXBlX2RhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlID0gdHlwZV9kYXRhO1xuJiM0MztcdHN0cnVjdCB0Y19tcXByaW9fY2FwcyAqY2FwcztcbiYjNDM7XG4mIzQzO1x0aWYgKGJhc2UtXHUwMDNldHlwZSAhPSBUQ19TRVRVUF9RRElTQ19NUVBSSU8pXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdGNhcHMgPSBiYXNlLVx1MDAzZWNhcHM7XG4mIzQzO1x0Y2Fwcy1cdTAwM2V2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBpbnQgb3R4Ml9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbiBcdFx0ICB2b2lkICp0eXBlX2RhdGEpXG4ge1xuIFx0c3dpdGNoICh0eXBlKSB7XG4mIzQzO1x0Y2FzZSBUQ19RVUVSWV9DQVBTOlxuJiM0MztcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh0eXBlX2RhdGEpO1xuIFx0Y2FzZSBUQ19TRVRVUF9CTE9DSzpcbiBcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfYmxvY2sobmV0ZGV2LCB0eXBlX2RhdGEpO1xuIFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19IVEI6XG4gXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX2h0YihuZXRkZXYsIHR5cGVfZGF0YSk7XG4mIzQzO1x0Y2FzZSBUQ19TRVRVUF9RRElTQ19NUVBSSU86XG4mIzQzO1x0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19tcXByaW8obmV0ZGV2LCB0eXBlX2RhdGEpO1xuJiM0MztcdGNhc2UgVENfU0VUVVBfUk9PVF9RRElTQzpcbiYjNDM7XHRcdHJldHVybiBvdHgyX3NldHVwX3RjX3Jvb3QobmV0ZGV2X3ByaXYobmV0ZGV2KSwgdHlwZV9kYXRhKTtcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbkBAIC0xNjMyLDYgJiM0MzsyMzM2LDcgQEAgRVhQT1JUX1NZTUJPTChvdHgyX2luaXRfdGMpO1xuIHZvaWQgb3R4Ml9zaHV0ZG93bl90YyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYylcbiB7XG4gXHRvdHgyX2Rlc3Ryb3lfdGNfZmxvd19saXN0KG5pYyk7XG4mIzQzO1x0b3R4Ml9tcXByaW9fc25hcF9kZXN0cm95KG5pYyk7XG4gfVxuIEVYUE9SVF9TWU1CT0wob3R4Ml9zaHV0ZG93bl90Yyk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXG5pbmRleCA2OWMwOTExZTI4ZTkxLi5kOWFmMTgyZTU3MjFkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcbkBAIC0xMTgsNiAmIzQzOzExOCw5IEBAIHN0YXRpYyB2b2lkIG90eDJfY29uZmlnX3NjaGVkX3NoYXBpbmcoc3RydWN0IG90eDJfbmljICpwZnZmLFxuIFx0LyogY29uZmlndXJlIFBJUiAqL1xuIFx0bWF4cmF0ZSA9IChub2RlLVx1MDAzZXJhdGUgXHUwMDNlIG5vZGUtXHUwMDNlY2VpbCkgPyBub2RlLVx1MDAzZXJhdGUgOiBub2RlLVx1MDAzZWNlaWw7XG4gXG4mIzQzO1x0LyogNjU1MzYgaXMgdGhlIGtlcm5lbC1zaWRlIGRlZmF1bHQgYnVyc3Qgd2hlbiBIVEIgZG9lcyBub3Qgc3VwcGx5IGFuXG4mIzQzO1x0ICogZXhwbGljaXQgdmFsdWUsIG5vdCB0aGUgTklYIGhhcmR3YXJlIG1heGltdW0gKENOMTBLX01BWF9CVVJTVF9TSVpFKS5cbiYjNDM7XHQgKi9cbiBcdGNmZy1cdTAwM2VyZWd2YWxbKm51bV9yZWdzXSA9XG4gXHRcdG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCBtYXhyYXRlLCA2NTUzNik7XG4gXHQoKm51bV9yZWdzKSYjNDM7JiM0Mzs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDM6Mzk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIG9ubHkgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIG5ldHdvcmsgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi8pLCBhZGRpbmcgc3VwcG9ydCBmb3IgbXFwcmlvIGhhcmR3YXJlIGJhbmR3aWR0aCBvZmZsb2FkLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDL1NvQyBkcml2ZXIgcmVxdWlyaW5nIHBoeXNpY2FsIE1hcnZlbGwgT2N0ZW9uVFgyIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTExMzY1ZTY4MWFlZTM5NGI1ZWM3ZDAwZjhkZmM1MTdjZjZjOGZlZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMDM6Mzk6NDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMKaW5kZXggMTUzZWI1N2JhZDA2Ny4uYzlhNDMyNmQ3MjVkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguYwpAQCAtMzMxLDggJiM0MzszMzEsMTIgQEAgc3RhdGljIGJvb2wgaXNfdmFsaWRfdHhzY2hxKHN0cnVjdCBydnUgKnJ2dSwgaW50IGJsa2FkZHIsCiAJCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKLQlpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYykKJiM0MzsJaWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpIHsKJiM0MzsJCWRldl9lcnJfcmF0ZWxpbWl0ZWQocnZ1LSZndDtkZXYsCiYjNDM7CQkJCSAgICAmIzM0O3BjaWZ1bmMgJXggbWFwIHBjaWZ1bmMgJXggbm90IGVxdWFsLCBsdmw9JXUgc2NocT0ldVxuJiMzNDssCiYjNDM7CQkJCSAgICBwY2lmdW5jLCBtYXBfZnVuYywgbHZsLCBzY2hxKTsKIAkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMKaW5kZXggMTc1OTkyMTg4YzE4YS4uYTUxOWUwYTk3YTJiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMKQEAgLTYxNSw2ICYjNDM7NjE1LDE0MiBAQCB2b2lkIG90eDJfZ2V0X21hY19mcm9tX2FmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB9CiBFWFBPUlRfU1lNQk9MKG90eDJfZ2V0X21hY19mcm9tX2FmKTsKIAomIzQzO3N0YXRpYyBpbnQKJiM0MztvdHgyX25peF90bXFfcmVnX3dyaXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGNudCwKJiM0MzsJCSAgICAgICB1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSwKJiM0MzsJCSAgICAgICB1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddKQomIzQzO3sKJiM0MzsJc3RydWN0IG1ib3ggKm1ib3ggPSAmYW1wO3BmdmYtJmd0O21ib3g7CiYjNDM7CXN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxOwomIzQzOwlpbnQgaSwgZXJyOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CXJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7CiYjNDM7CWlmICghcmVxKSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDttYm94LSZndDtsb2NrKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJlcS0mZ3Q7bHZsID0gTklYX1RYU0NIX0xWTF9NRFE7CiYjNDM7CXJlcS0mZ3Q7bnVtX3JlZ3MgPSBjbnQ7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjbnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlyZXEtJmd0O3JlZ1tpXSA9IHJlZ19hZGRyW2ldOwomIzQzOwkJcmVxLSZndDtyZWd2YWxbaV0gPSByZWdfdmFsW2ldOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR107CiYjNDM7CXU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR107CiYjNDM7CWludCBlcnIsIHNtcSwgaSwgY250ID0gMDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHBmdmYtJmd0O2h3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc21xID0gcGZ2Zi0mZ3Q7aHcudHhzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9TTVFdW2ldOwomIzQzOwomIzQzOwkJcmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpOwomIzQzOwkJcmVnX3ZhbFtjbnRdID0gMDsKJiM0MzsJCWNudCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQlyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7CiYjNDM7CQlyZWdfdmFsW2NudF0gPSAwOwomIzQzOwkJY250JiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJCWlmIChjbnQgJmx0OyBNQVhfUkVHU19QRVJfTUJPWF9NU0cgLSAxKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsCiYjNDM7CQkJCQkgICAgIHJlZ19hZGRyLCByZWdfdmFsKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBmYWlsOwomIzQzOwkJY250ID0gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoY250KSB7CiYjNDM7CQllcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCwKJiM0MzsJCQkJCSAgICAgcmVnX2FkZHIsIHJlZ192YWwpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlnb3RvIGZhaWw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7ZmFpbDoKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLAomIzQzOwkJCQkgaW50IHR4cSwgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IG1ib3ggKm1ib3ggPSAmYW1wO3BmdmYtJmd0O21ib3g7CiYjNDM7CXN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxOwomIzQzOwlpbnQgZXJyLCBzbXEsIG4gPSAwOwomIzQzOwl1NjQgcmVnX2FkZHJbMl07CiYjNDM7CXU2NCByZWdfdmFsWzJdOwomIzQzOwl1NjQgcmF0ZTsKJiM0MzsKJiM0MzsJaWYgKCFtYXhyYXRlICZhbXA7JmFtcDsgIW1pbnJhdGUpIHsKJiM0MzsJCXNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTsKJiM0MzsJCXJlZ19hZGRyWzBdID0gTklYX0FGX01EUVhfUElSKHNtcSk7CiYjNDM7CQlyZWdfdmFsWzBdID0gMDsKJiM0MzsJCXJlZ19hZGRyWzFdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7CiYjNDM7CQlyZWdfdmFsWzFdID0gMDsKJiM0MzsJCXJldHVybiBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIDIsIHJlZ19hZGRyLCByZWdfdmFsKTsKJiM0MzsJfQomIzQzOwomIzQzOwlzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDttYm94LSZndDtsb2NrKTsKJiM0MzsJcmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTsKJiM0MzsJaWYgKCFyZXEpIHsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO21ib3gtJmd0O2xvY2spOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmVxLSZndDtsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTsKJiM0MzsKJiM0MzsJLyogTVFQUklPIGV4cG9zZXMgb25seSBtaW4vbWF4IHJhdGUsIG5vdCBidXJzdC4gIFBhc3MgYnVyc3QgMCBzbwomIzQzOwkgKiBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKCkgcHJvZ3JhbW1lcyB0aGUgbGFyZ2VzdCBidXJzdCB0aGUgTklYCiYjNDM7CSAqIGVuY29kaW5nIHN1cHBvcnRzIChDTjEwS19NQVhfQlVSU1RfU0laRSBvbiBDTjEwSykuICBUaGlzIGRpZmZlcnMKJiM0MzsJICogZnJvbSB0aGUgNjU1MzYgYnl0ZSBkZWZhdWx0IHVzZWQgaW4gdGhlIEhUQiBwYXRoLCB3aGljaCBpcyBhCiYjNDM7CSAqIGtlcm5lbC1zaWRlIGRlZmF1bHQgd2hlbiBubyBleHBsaWNpdCBidXJzdCBpcyBjb25maWd1cmVkLCBub3QgYQomIzQzOwkgKiBoYXJkd2FyZSBjYXAuCiYjNDM7CSAqCiYjNDM7CSAqIG1xcHJpbyBzZXR1cCByZXN0YXJ0cyB0aGUgbmV0ZGV2IChvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldiksCiYjNDM7CSAqIHdoaWNoIHJlc2V0cyBNRFEgc2hhcGVycyB0byB6ZXJvLiAgUHJvZ3JhbSBib3RoIFBJUiBhbmQgQ0lSIG9uCiYjNDM7CSAqIGV2ZXJ5IHVwZGF0ZSBzbyBvbWl0dGVkIHJhdGVzIGFyZSBhcHBsaWVkIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW4KJiM0MzsJICogcmVseWluZyBvbiBzdGFsZSBoYXJkd2FyZSBzdGF0ZS4KJiM0MzsJICovCiYjNDM7CXJlcS0mZ3Q7cmVnW25dID0gTklYX0FGX01EUVhfUElSKHNtcSk7CiYjNDM7CWlmIChtYXhyYXRlKSB7CiYjNDM7CQlyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWF4cmF0ZSk7CiYjNDM7CQlyZXEtJmd0O3JlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJlcS0mZ3Q7cmVndmFsW25dID0gMDsKJiM0MzsJfQomIzQzOwluJiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJLyogQ0lSJiM0MztQSVIgc3VwcG9ydCBpcyByZXF1aXJlZCBhbmQgY2hlY2tlZCBhdCBtcXByaW8gc2V0dXAuICovCiYjNDM7CXJlcS0mZ3Q7cmVnW25dID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7CiYjNDM7CWlmIChtaW5yYXRlKSB7CiYjNDM7CQlyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWlucmF0ZSk7CiYjNDM7CQlyZXEtJmd0O3JlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJlcS0mZ3Q7cmVndmFsW25dID0gMDsKJiM0MzsJfQomIzQzOwluJiM0MzsmIzQzOzsKJiM0MzsJcmVxLSZndDtudW1fcmVncyA9IG47CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwogaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JfcGZjKQogewogCXUxNiAoKnNjaHFfbGlzdClbTUFYX1RYU0NIUV9QRVJfRlVOQ107CkBAIC02NTEsNyAmIzQzOzc4NywxMSBAQCBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2ZvcgogCQkJCQkJKHU2NClody0mZ3Q7c21xX2xpbmtfdHlwZSk7CiAJCXJlcS0mZ3Q7bnVtX3JlZ3MmIzQzOyYjNDM7OwogCQkvKiBNRFEgY29uZmlnICovCi0JCXBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107CiYjNDM7CQlpZiAocGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQpCiYjNDM7CQkJcGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVswXTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dOwomIzQzOwogCQlyZXEtJmd0O3JlZ1sxXSA9IE5JWF9BRl9NRFFYX1BBUkVOVChzY2hxKTsKIAkJcmVxLSZndDtyZWd2YWxbMV0gPSBwYXJlbnQgJmx0OyZsdDsgMTY7CiAJCXJlcS0mZ3Q7bnVtX3JlZ3MmIzQzOyYjNDM7OwpAQCAtNzc5LDYgJiM0Mzs5MTksOSBAQCBpbnQgb3R4Ml90eHNjaF9hbGxvYyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiAJCXJlcS0mZ3Q7c2NocVtOSVhfVFhTQ0hfTFZMX1RMNF0gPSBjaGFuX2NudDsKIAl9CiAKJiM0MzsJaWYgKHBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0KQomIzQzOwkJcmVxLSZndDtzY2hxW05JWF9UWFNDSF9MVkxfU01RXSA9IHBmdmYtJmd0O2h3Lm5vbl9xb3NfcXVldWVzOwomIzQzOwogCXJjID0gb3R4Ml9zeW5jX21ib3hfbXNnKCZhbXA7cGZ2Zi0mZ3Q7bWJveCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CkBAIC04NDQsNiAmIzQzOzk4Nyw3IEBAIHZvaWQgb3R4Ml90eHNjaHFfc3RvcChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiAKIAkvKiBDbGVhciB0aGUgdHhzY2hxIGxpc3QgKi8KIAlmb3IgKGx2bCA9IDA7IGx2bCAmbHQ7IE5JWF9UWFNDSF9MVkxfQ05UOyBsdmwmIzQzOyYjNDM7KSB7CiYjNDM7CQlwZnZmLSZndDtody50eHNjaHFfY250W2x2bF0gPSAwOwogCQlmb3IgKHNjaHEgPSAwOyBzY2hxICZsdDsgTUFYX1RYU0NIUV9QRVJfRlVOQzsgc2NocSYjNDM7JiM0MzspCiAJCQlwZnZmLSZndDtody50eHNjaHFfbGlzdFtsdmxdW3NjaHFdID0gMDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oCmluZGV4IGVlY2VlNjEyYjdiMmMuLmVkZTdmMTExM2I3MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oCkBAIC0xNyw2ICYjNDM7MTcsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3NvYy9tYXJ2ZWxsL3NpbGljb25zLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc29jL21hcnZlbGwvb2N0ZW9udHgyL2FzbS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9tYWNzZWMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9wa3Rfc2NoZWQuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvcGt0X2Nscy5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9kZXZsaW5rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdGltZTY0LmgmZ3Q7CkBAIC00ODMsNiAmIzQzOzQ4NCwyMyBAQCBzdHJ1Y3QgcGZfaXJxX2RhdGEgewogCWludCBtZGV2czsKIH07CiAKJiM0MztzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwIHsKJiM0MzsJdTY0IG1pbl9yYXRlW1RDX1FPUFRfTUFYX1FVRVVFXTsKJiM0MzsJdTY0IG1heF9yYXRlW1RDX1FPUFRfTUFYX1FVRVVFXTsKJiM0MzsJX191OCBudW1fdGM7CiYjNDM7CV9fdTE2IGNvdW50W1RDX1FPUFRfTUFYX1FVRVVFXTsKJiM0MzsJX191MTYgb2Zmc2V0W1RDX1FPUFRfTUFYX1FVRVVFXTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBvdHgyX21xcHJpbyB7CiYjNDM7CXUzMglmbGFnczsKJiM0MzsJdTY0CSptaW5fcmF0ZTsKJiM0MzsJdTY0CSptYXhfcmF0ZTsKJiM0MzsJYm9vbAlyYXRlX2xpbWl0OwomIzQzOwlib29sCXJlcGxhY2Vfc2V0dXBfZG9uZTsKJiM0MzsJYm9vbAlyZXBsYWNlX2dyYWZ0X2RvbmU7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBvdHgyX25pYyB7CiAJdm9pZCBfX2lvbWVtCQkqcmVnX2Jhc2U7CiAJc3RydWN0IG5ldF9kZXZpY2UJKm5ldGRldjsKQEAgLTUxNSw2ICYjNDM7NTMzLDEwIEBAIHN0cnVjdCBvdHgyX25pYyB7CiAJdTY0CQkJZmxhZ3M7CiAJdTY0CQkJKmNxX29wX2FkZHI7CiAKJiM0MzsJc3RydWN0IG90eDJfbXFwcmlvCW1xcHJpbzsKJiM0MzsJc3RydWN0IG1xX29mZmxvYWRfc25hcAkqY3VyX21xX3NuYXA7CiYjNDM7CXN0cnVjdCBtcV9vZmZsb2FkX3NuYXAJKm9sZF9tcV9zbmFwOwomIzQzOwogCXN0cnVjdCBicGZfcHJvZwkJKnhkcF9wcm9nOwogCXN0cnVjdCBvdHgyX3FzZXQJcXNldDsKIAlzdHJ1Y3Qgb3R4Ml9odwkJaHc7CkBAIC0xMjQ2LDYgJiM0MzsxMjY4LDExIEBAIGRtYV9hZGRyX3Qgb3R4Ml9kbWFfbWFwX3NrYl9mcmFnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKIAkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHNlZywgaW50ICpsZW4pOwogdm9pZCBvdHgyX2RtYV91bm1hcF9za2JfZnJhZ3Moc3RydWN0IG90eDJfbmljICpwZnZmLCBzdHJ1Y3Qgc2dfbGlzdCAqc2cpOwogaW50IG90eDJfcmVhZF9mcmVlX3NxZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBxaWR4KTsKJiM0MztpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCB0eHEsCiYjNDM7CQkJCSB1NjQgbWlucmF0ZSwgdTY0IG1heHJhdGUpOwomIzQzO2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKTsKJiM0MztpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpOwomIzQzO2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpOwogdm9pZCBvdHgyX3F1ZXVlX3ZmX3dvcmsoc3RydWN0IG1ib3ggKm13LCBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbWJveF93cSwKIAkJCWludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7CiBpbnQgb3R4Ml9kZWxfbWNhbV9mbG93X2VudHJ5KHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MTYgZW50cnksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYwppbmRleCBmMTEwZGZhNDIzNjA1Li40YTcwYWJjMjMwYmVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMKQEAgLTQxMyw2ICYjNDM7NDEzLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml9kY2JubF9pZWVlX3NldHBmYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWVlZV9wZmMgKnBmYykKIAl1OCBvbGRfcGZjX2VuOwogCWludCBlcnI7CiAKJiM0MzsJaWYgKHBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0ICZhbXA7JmFtcDsgcGZjLSZndDtwZmNfZW4pIHsKJiM0MzsJCW5ldGRldl9lcnIoZGV2LAomIzQzOwkJCSAgICYjMzQ7UEZDOiBjYW5ub3QgZW5hYmxlIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwogCW9sZF9wZmNfZW4gPSBwZnZmLSZndDtwZmNfZW47CiAJcGZ2Zi0mZ3Q7cGZjX2VuID0gcGZjLSZndDtwZmNfZW47CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuYwppbmRleCA5YmVlMWI5MWVlYWE2Li5lYzI2MDFjNmMyNTVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jCkBAIC0yODcsNiAmIzQzOzI4NywxNCBAQCBzdGF0aWMgaW50IG90eDJfc2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAomIzQzOwlpZiAocGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQgJmFtcDsmYW1wOwomIzQzOwkgICAgKGNoYW5uZWwtJmd0O3R4X2NvdW50ICE9IHBmdmYtJmd0O2h3LnR4X3F1ZXVlcyB8fAomIzQzOwkgICAgIGNoYW5uZWwtJmd0O3J4X2NvdW50ICE9IHBmdmYtJmd0O2h3LnJ4X3F1ZXVlcykpIHsKJiM0MzsJCW5ldGRldl9pbmZvKGRldiwKJiM0MzsJCQkgICAgJiMzNDtOb3QgcGVybWl0dGVkIHRvIGNoYW5nZSBjaGFubmVsIGNvdW50IHdoaWxlIE1RIHByaW8gaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwogCWlmIChpZl91cCkKIAkJZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fc3RvcChkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYwppbmRleCBjOTk1ZjI5MDA4NTkwLi43OWE4MmU0NDU0NTQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMKQEAgLTE5ODAsNiAmIzQzOzE5ODAsMTIgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2ZyZWVfbWVtOwogCiYjNDM7CWVyciA9IG90eDJfbXFwcmlvX3VwKHBmKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCW5ldGRldl9lcnIocGYtJmd0O25ldGRldiwKJiM0MzsJCQkgICAmIzM0O21xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVycyBkdXJpbmcgb3BlbjogJWQ7IGNvbnRpbnVpbmcgd2l0aG91dCBiYW5kd2lkdGggbGltaXRzXG4mIzM0OywKJiM0MzsJCQkgICBlcnIpOwomIzQzOwogCS8qIFJlZ2lzdGVyIE5BUEkgaGFuZGxlciAqLwogCWZvciAocWlkeCA9IDA7IHFpZHggJmx0OyBwZi0mZ3Q7aHcuY2ludF9jbnQ7IHFpZHgmIzQzOyYjNDM7KSB7CiAJCWNxX3BvbGwgPSAmYW1wO3FzZXQtJmd0O25hcGlbcWlkeF07CkBAIC0yODQ2LDYgJiM0MzsyODUyLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml94ZHBfc2V0dXAoc3RydWN0IG90eDJfbmljICpwZiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKQogCWJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKHBmLSZndDtuZXRkZXYpOwogCXN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7CiAKJiM0MzsJaWYgKHByb2cgJmFtcDsmYW1wOyBwZi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQpIHsKJiM0MzsJCW5ldGRldl9lcnIoZGV2LAomIzQzOwkJCSAgICYjMzQ7WERQOiBjYW5ub3QgYXR0YWNoIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwogCWlmIChwcm9nICZhbXA7JmFtcDsgZGV2LSZndDttdHUgJmd0OyBNQVhfWERQX01UVSkgewogCQluZXRkZXZfd2FybihkZXYsICYjMzQ7SnVtYm8gZnJhbWVzIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggWERQXG4mIzM0Oyk7CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jCmluZGV4IDAzOWZkNDdlYmY1MjIuLjQwOTAyOTZlZGZjNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYwpAQCAtMTYsNiAmIzQzOzE2LDggQEAKICNpbmNsdWRlICZsdDtuZXQvdGNfYWN0L3RjX21pcnJlZC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC90Y19hY3QvdGNfdmxhbi5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9pcHY2LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9wa3Rfc2NoZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L3NjaF9nZW5lcmljLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7Y24xMGsuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O290eDJfY29tbW9uLmgmIzM0OwpAQCAtMzEsNiAmIzQzOzMzLDEwIEBACiAKICNkZWZpbmUgTUNBU1RfSU5WQUxJRF9HUlAJCSgtMVUpCiAjZGVmaW5lIFJBVEVfTUFOVElTU0FfQklUUwkJOAomIzQzOy8qIE1pbiBwZXItcXVldWUgZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgyIE1icHMpLiAqLwomIzQzOyNkZWZpbmUgT1RYMl9NUVBSSU9fTUlOX1JBVEVfQllURVNfUFMJMjUwMDAwVUxMCiYjNDM7LyogTWF4IGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMTMwODE2IE1icHMpLiAqLwomIzQzOyNkZWZpbmUgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFMJKChNQVhfQlVSU1RfU0laRSAqIDEwMDAwMDBVTEwpIC8gOFVMTCkKIAogc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LAogCQkJCSAgICAgIHUzMiAqYnVyc3RfZXhwLCB1MzIgKmJ1cnN0X21hbnRpc3NhKQpAQCAtNjEsNiAmIzQzOzY3LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LAogCQkJKmJ1cnN0X21hbnRpc3NhID0gdG1wIC8gKDFVTEwgJmx0OyZsdDsgKCpidXJzdF9leHAgLSA3KSk7CiAJCX0KIAl9IGVsc2UgewomIzQzOwkJLyogYnVyc3QgMDogbGFyZ2VzdCBlbmNvZGFibGUgYnVyc3QgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uCiYjNDM7CQkgKiBDTjEwSyksIG5vdCBhIG1pbmltYWwgYnVyc3QuCiYjNDM7CQkgKi8KIAkJKmJ1cnN0X2V4cCA9IE1BWF9CVVJTVF9FWFBPTkVOVDsKIAkJKmJ1cnN0X21hbnRpc3NhID0gbWF4X21hbnRpc3NhOwogCX0KQEAgLTE2MDAsMTQgJiM0MzsxNjA5LDcwOSBAQCBzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfYmxvY2soc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCQkJICBuaWMsIG5pYywgaW5ncmVzcyk7CiB9CiAKJiM0MzsvKiBGcmVlIHRoZSBwZXItcXVldWUgbWluL21heCByYXRlIGNhY2hlcy4gKi8KJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19mcmVlX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CWRldm1fa2ZyZWUocGZ2Zi0mZ3Q7ZGV2LCBwZnZmLSZndDttcXByaW8ubWluX3JhdGUpOwomIzQzOwlkZXZtX2tmcmVlKHBmdmYtJmd0O2RldiwgcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlKTsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlID0gTlVMTDsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlID0gTlVMTDsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLmZsYWdzID0gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19hbGxvY19jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGJvb2wgcmVwbGFjaW5nKQomIzQzO3sKJiM0MzsJdTE2IG51bV90eHEgPSBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlczsKJiM0MzsKJiM0MzsJaWYgKHJlcGxhY2luZyAmYW1wOyZhbXA7IHBmdmYtJmd0O21xcHJpby5taW5fcmF0ZSAmYW1wOyZhbXA7IHBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZSkgewomIzQzOwkJbWVtc2V0KHBmdmYtJmd0O21xcHJpby5taW5fcmF0ZSwgMCwKJiM0MzsJCSAgICAgICBudW1fdHhxICogc2l6ZW9mKCpwZnZmLSZndDttcXByaW8ubWluX3JhdGUpKTsKJiM0MzsJCW1lbXNldChwZnZmLSZndDttcXByaW8ubWF4X3JhdGUsIDAsCiYjNDM7CQkgICAgICAgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlKSk7CiYjNDM7CQlwZnZmLSZndDttcXByaW8uZmxhZ3MgPSAwOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTsKJiM0MzsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtJmd0O2RldiwgbnVtX3R4cSwKJiM0MzsJCQkJCSAgICAgc2l6ZW9mKCpwZnZmLSZndDttcXByaW8ubWluX3JhdGUpLAomIzQzOwkJCQkJICAgICBHRlBfS0VSTkVMKTsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtJmd0O2RldiwgbnVtX3R4cSwKJiM0MzsJCQkJCSAgICAgc2l6ZW9mKCpwZnZmLSZndDttcXByaW8ubWF4X3JhdGUpLAomIzQzOwkJCQkJICAgICBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwZnZmLSZndDttcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZSkgewomIzQzOwkJb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19zbmFwX2ZyZWUoc3RydWN0IG90eDJfbmljICpwZnZmLAomIzQzOwkJCQkgIHN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKipzbmFwKQomIzQzO3sKJiM0MzsJaWYgKCEqc25hcCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZGV2bV9rZnJlZShwZnZmLSZndDtkZXYsICpzbmFwKTsKJiM0MzsJKnNuYXAgPSBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3NuYXBfY29weShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsCiYjNDM7CQkJCSBzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICoqZHN0LAomIzQzOwkJCQkgY29uc3Qgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9ICZhbXA7bXFwcmlvLSZndDtxb3B0OwomIzQzOwlzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICpzbmFwOwomIzQzOwlpbnQgdGM7CiYjNDM7CiYjNDM7CWlmICghKmRzdCkgewomIzQzOwkJc25hcCA9IGRldm1fa3phbGxvYyhwZnZmLSZndDtkZXYsIHNpemVvZigqc25hcCksIEdGUF9LRVJORUwpOwomIzQzOwkJaWYgKCFzbmFwKQomIzQzOwkJCXJldHVybiAtRU5PTUVNOwomIzQzOwkJKmRzdCA9IHNuYXA7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlzbmFwID0gKmRzdDsKJiM0MzsJfQomIzQzOwomIzQzOwlzbmFwLSZndDtudW1fdGMgPSBxb3B0LSZndDtudW1fdGM7CiYjNDM7CWZvciAodGMgPSAwOyB0YyAmbHQ7IFRDX1FPUFRfTUFYX1FVRVVFOyB0YyYjNDM7JiM0MzspIHsKJiM0MzsJCXNuYXAtJmd0O2NvdW50W3RjXSA9IHFvcHQtJmd0O2NvdW50W3RjXTsKJiM0MzsJCXNuYXAtJmd0O29mZnNldFt0Y10gPSBxb3B0LSZndDtvZmZzZXRbdGNdOwomIzQzOwkJc25hcC0mZ3Q7bWluX3JhdGVbdGNdID0gMDsKJiM0MzsJCXNuYXAtJmd0O21heF9yYXRlW3RjXSA9IDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yICh0YyA9IDA7IHRjICZsdDsgcW9wdC0mZ3Q7bnVtX3RjOyB0YyYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01JTl9SQVRFKQomIzQzOwkJCXNuYXAtJmd0O21pbl9yYXRlW3RjXSA9IG1xcHJpby0mZ3Q7bWluX3JhdGVbdGNdOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUFYX1JBVEUpCiYjNDM7CQkJc25hcC0mZ3Q7bWF4X3JhdGVbdGNdID0gbXFwcmlvLSZndDttYXhfcmF0ZVt0Y107CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fc3RhZ2VfY3VyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKJiM0MzsJCQkJIGNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pCiYjNDM7ewomIzQzOwlyZXR1cm4gb3R4Ml9tcXByaW9fc25hcF9jb3B5KHBmdmYsICZhbXA7cGZ2Zi0mZ3Q7Y3VyX21xX3NuYXAsIG1xcHJpbyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfY29tbWl0KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CW90eDJfbXFwcmlvX3NuYXBfZnJlZShwZnZmLCAmYW1wO3BmdmYtJmd0O29sZF9tcV9zbmFwKTsKJiM0MzsJcGZ2Zi0mZ3Q7b2xkX21xX3NuYXAgPSBwZnZmLSZndDtjdXJfbXFfc25hcDsKJiM0MzsJcGZ2Zi0mZ3Q7Y3VyX21xX3NuYXAgPSBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgPSBmYWxzZTsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSA9IGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CXJldHVybiBwZnZmLSZndDtody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfTURRXSAhPSAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKnNuYXAgPSBwZnZmLSZndDtvbGRfbXFfc25hcDsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtJmd0O25ldGRldjsKJiM0MzsJdTE2IG51bV90eHEgPSBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlczsKJiM0MzsJaW50IHRjLCB0eHEsIGVycjsKJiM0MzsKJiM0MzsJaWYgKCFzbmFwKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYsIGZhbHNlKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CW1lbXNldChwZnZmLSZndDttcXByaW8ubWluX3JhdGUsIDAsIG51bV90eHEgKiBzaXplb2YoKnBmdmYtJmd0O21xcHJpby5taW5fcmF0ZSkpOwomIzQzOwltZW1zZXQocGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlLCAwLCBudW1fdHhxICogc2l6ZW9mKCpwZnZmLSZndDttcXByaW8ubWF4X3JhdGUpKTsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLmZsYWdzID0gMDsKJiM0MzsKJiM0MzsJZm9yICh0YyA9IDA7IHRjICZsdDsgc25hcC0mZ3Q7bnVtX3RjOyB0YyYjNDM7JiM0MzspIHsKJiM0MzsJCXU2NCBtaW5fcmF0ZSA9IHNuYXAtJmd0O21pbl9yYXRlW3RjXTsKJiM0MzsJCXU2NCBtYXhfcmF0ZSA9IHNuYXAtJmd0O21heF9yYXRlW3RjXTsKJiM0MzsKJiM0MzsJCWlmIChtaW5fcmF0ZSkKJiM0MzsJCQlwZnZmLSZndDttcXByaW8uZmxhZ3MgfD0gVENfTVFQUklPX0ZfTUlOX1JBVEU7CiYjNDM7CQlpZiAobWF4X3JhdGUpCiYjNDM7CQkJcGZ2Zi0mZ3Q7bXFwcmlvLmZsYWdzIHw9IFRDX01RUFJJT19GX01BWF9SQVRFOwomIzQzOwomIzQzOwkJZm9yICh0eHEgPSBzbmFwLSZndDtvZmZzZXRbdGNdOwomIzQzOwkJICAgICB0eHEgJmx0OyBzbmFwLSZndDtvZmZzZXRbdGNdICYjNDM7IHNuYXAtJmd0O2NvdW50W3RjXTsgdHhxJiM0MzsmIzQzOykgewomIzQzOwkJCXBmdmYtJmd0O21xcHJpby5taW5fcmF0ZVt0eHFdID0gbWluX3JhdGU7CiYjNDM7CQkJcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlW3R4cV0gPSBtYXhfcmF0ZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwluZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHNuYXAtJmd0O251bV90Yyk7CiYjNDM7CWZvciAodGMgPSAwOyB0YyAmbHQ7IHNuYXAtJmd0O251bV90YzsgdGMmIzQzOyYjNDM7KQomIzQzOwkJbmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIHRjLCBzbmFwLSZndDtjb3VudFt0Y10sCiYjNDM7CQkJCSAgICBzbmFwLSZndDtvZmZzZXRbdGNdKTsKJiM0MzsKJiM0MzsJaWYgKG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpIHsKJiM0MzsJCWVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldigpIGNsZWFycyByYXRlX2xpbWl0IHdoZW4gbmRvX29wZW4oKSBmYWlscy4gKi8KJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQgPSB0cnVlOwomIzQzOwomIzQzOwllcnIgPSBvdHgyX21xcHJpb191cChwZnZmKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CW90eDJfbXFwcmlvX3NuYXBfZnJlZShwZnZmLCAmYW1wO3BmdmYtJmd0O2N1cl9tcV9zbmFwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfZGVzdHJveShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgJmFtcDtwZnZmLSZndDtjdXJfbXFfc25hcCk7CiYjNDM7CW90eDJfbXFwcmlvX3NuYXBfZnJlZShwZnZmLCAmYW1wO3BmdmYtJmd0O29sZF9tcV9zbmFwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fY2xlYXJfc3coc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtJmd0O25ldGRldjsKJiM0MzsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQgPSBmYWxzZTsKJiM0MzsJb3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShwZnZmKTsKJiM0MzsJbmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCAwKTsKJiM0MzsJb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVGVhciBkb3duIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZDogY2xlYXIgcGVyLXF1ZXVlIHNoYXBlcnMsCiYjNDM7ICogbXFwcmlvX3JhdGVfbGltaXQsIG5ldGRldiBUQyBtYXBwaW5ncywgYW5kIHRoZSBjYWNoZWQgcmF0ZXMuICBDYWxsZWQgb24KJiM0MzsgKiBleHBsaWNpdCBtcXByaW8gdGVhcmRvd24gKHRjIHFkaXNjIGRlbCkgYW5kIGVycm9yIGNsZWFudXAsIG5vdCBvbgomIzQzOyAqIHJvdXRpbmUgbmV0ZGV2IHN0b3Avb3BlbiBjeWNsZXMgd2hlcmUgdGhlIG9mZmxvYWQgc3RheXMgYWN0aXZlLgomIzQzOyAqLwomIzQzO2ludCBvdHgyX21xcHJpb19kb3duKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwomIzQzOwlpZiAoIXBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChuZXRpZl9ydW5uaW5nKHBmdmYtJmd0O25ldGRldikgJmFtcDsmYW1wOwomIzQzOwkgICAgb3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChwZnZmKSkKJiM0MzsJCWVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTsKJiM0MzsKJiM0MzsJb3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7CiYjNDM7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCW5ldGRldl9lcnIocGZ2Zi0mZ3Q7bmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7bXFwcmlvOiBmYWlsZWQgdG8gY2xlYXIgaGFyZHdhcmUgc2hhcGVyczogJWQ7IHNvbWUgVFggcXVldWVzIG1heSByZXRhaW4gYmFuZHdpZHRoIGxpbWl0c1xuJiMzNDssCiYjNDM7CQkJICAgZXJyKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtJmd0O25ldGRldjsKJiM0MzsJaW50IHR4cSwgZXJyOwomIzQzOwomIzQzOwlpZiAoIXBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmICghcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlIHx8ICFwZnZmLSZndDttcXByaW8ubWF4X3JhdGUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZm9yICh0eHEgPSAwOyB0eHEgJmx0OyBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlczsgdHhxJiM0MzsmIzQzOykgewomIzQzOwkJdTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwOwomIzQzOwomIzQzOwkJaWYgKHBmdmYtJmd0O21xcHJpby5mbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NSU5fUkFURSkKJiM0MzsJCQltaW5fcmF0ZSA9IHBmdmYtJmd0O21xcHJpby5taW5fcmF0ZVt0eHFdOwomIzQzOwkJaWYgKHBmdmYtJmd0O21xcHJpby5mbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NQVhfUkFURSkKJiM0MzsJCQltYXhfcmF0ZSA9IHBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZVt0eHFdOwomIzQzOwomIzQzOwkJaWYgKCFtaW5fcmF0ZSAmYW1wOyZhbXA7ICFtYXhfcmF0ZSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLCBtaW5fcmF0ZSwKJiM0MzsJCQkJCQkgICBtYXhfcmF0ZSk7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBmYWlsZWQgdG8gcmVzdG9yZSBzaGFwZXIgZm9yIHR4cSAlZDogJWRcbiYjMzQ7LAomIzQzOwkJCQkgICB0eHEsIGVycik7CiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUmVzdGFydCB0aGUgbmV0ZGV2IHRvIHJlcHJvZ3JhbSB0aGUgVFggc2NoZWR1bGVyIGhpZXJhcmNoeSBmb3IgbXFwcmlvCiYjNDM7ICogYmFuZHdpZHRoIG9mZmxvYWQuICBCb3RoIG1xcHJpbyBhZGQgYW5kIGRlbGV0ZSAod2hlbiBvZmZsb2FkIHdhcyBhY3RpdmUpCiYjNDM7ICogdGFrZSB0aGlzIHBhdGggdmlhIG5kb19zdG9wKCkvbmRvX29wZW4oKSBzbyBWRi1zcGVjaWZpYyBvcGVuIGxvZ2ljIChlLmcuCiYjNDM7ICogTEJLIGNhcnJpZXIgb24pIHJ1bnMgY29ycmVjdGx5LiAgVGhlIGZ1bGwgc3RvcC9vcGVuIGN5Y2xlIGNsZWFycwomIzQzOyAqIGNhcnJpZXIsIHN0b3BzIGFsbCBUWCBxdWV1ZXMsIHRlYXJzIGRvd24gSVJRcy9OQVBJIGFuZCBkcm9wcyBpbi1mbGlnaHQKJiM0MzsgKiB0cmFmZmljLiAgSWYgb3BlbiBmYWlscywgdGhlIGludGVyZmFjZSBpcyBsZWZ0IGFkbWluaXN0cmF0aXZlbHkgZG93bgomIzQzOyAqIHdpdGhvdXQgY2FsbGluZyBuZG9fc3RvcCgpIGFnYWluIG9uIHJlc291cmNlcyBhbHJlYWR5IHRvcm4gZG93biBieQomIzQzOyAqIHRoZSBvcGVuIGVycm9yIHBhdGguCiYjNDM7ICoKJiM0MzsgKiBEbyBub3QgY2FsbCBkZXZfZGVhY3RpdmF0ZSgpL2Rldl9hY3RpdmF0ZSgpIGhlcmU6IHRoaXMgcnVucyBmcm9tCiYjNDM7ICogbmRvX3NldHVwX3RjKCkgd2hpbGUgcWRpc2NfZ3JhZnQoKSBtYXkgYWxyZWFkeSBob2xkIHRoZSBkZXZpY2UKJiM0MzsgKiBkZWFjdGl2YXRlZCBhbmQgbXVzdCBwZXJmb3JtIHRoZSBmaW5hbCBkZXZfYWN0aXZhdGUoKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmF0ZV9saW1pdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gbmV0ZGV2LSZndDtuZXRkZXZfb3BzOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwkvKiBUT0RPOiBFeHBsb3JlIGxpdmUgVFggc2NoZWR1bGVyIHJlcHJvZ3JhbW1pbmcgdG8gYXZvaWQgYSBmdWxsCiYjNDM7CSAqIG5kb19zdG9wKCkvbmRvX29wZW4oKSBib3VuY2Ugb24gZXZlcnkgbXFwcmlvIGNoYW5nZS4KJiM0MzsJICovCiYjNDM7CW5ldGRldl9pbmZvKG5ldGRldiwKJiM0MzsJCSAgICAmIzM0O21xcHJpbzogcmVzdGFydGluZyBpbnRlcmZhY2UgdG8gcmVwcm9ncmFtIFRYIHNjaGVkdWxlcjsgaW4tZmxpZ2h0IHRyYWZmaWMgd2lsbCBiZSBkcm9wcGVkXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IG9wcy0mZ3Q7bmRvX3N0b3AobmV0ZGV2KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CS8qIFNldCBiZWZvcmUgbmRvX29wZW4oKSBzbyBvdHgyX3R4c2NoX2FsbG9jKCkgd2lkZW5zIFNNUSBhbGxvY2F0aW9uLgomIzQzOwkgKiBPbiB0ZWFyZG93biwgZHJvcCBtcXByaW8gc29mdHdhcmUgc3RhdGUgc28gbmRvX29wZW4oKSBkb2VzIG5vdAomIzQzOwkgKiByZS1hcHBseSBiYW5kd2lkdGggbGltaXRzIHZpYSBvdHgyX21xcHJpb191cCgpIGFmdGVyIHRoZSBrZXJuZWwKJiM0MzsJICogcmVtb3ZlZCB0aGUgcWRpc2MuCiYjNDM7CSAqLwomIzQzOwlpZiAocmF0ZV9saW1pdCkKJiM0MzsJCXBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0ID0gdHJ1ZTsKJiM0MzsJZWxzZQomIzQzOwkJb3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7CiYjNDM7CiYjNDM7CWVyciA9IG9wcy0mZ3Q7bmRvX29wZW4obmV0ZGV2KTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDtGYWlsZWQgdG8gcmVzdGFydCBkZXZpY2UgYWZ0ZXIgbXFwcmlvIGNoYW5nZTogJWRcbiYjMzQ7LAomIzQzOwkJCSAgIGVycik7CiYjNDM7CQkvKiBuZG9fb3BlbigpIGFscmVhZHkgZnJlZWQgdGhlIFRYIHNjaGVkdWxlcnMgb24gZmFpbHVyZSB3aGlsZQomIzQzOwkJICogbmV0aWZfcnVubmluZygpIG1heSBzdGlsbCBiZSB0cnVlOyBkcm9wIG1xcHJpbyBzb2Z0d2FyZSBzdGF0ZQomIzQzOwkJICogb25seSBpbnN0ZWFkIG9mIHNlbmRpbmcgc2hhcGVyIGNsZWFycyB0byBmcmVlZCBxdWV1ZXMuCiYjNDM7CQkgKi8KJiM0MzsJCW90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpOwomIzQzOwkJLyogbmRvX29wZW4oKSByb2xscyBiYWNrIG9uIGZhaWx1cmU7IG1hcmsgdGhlIGludGVyZmFjZSBkb3duIHNvCiYjNDM7CQkgKiBuZXRpZl9jbG9zZSgpIGRvZXMgbm90IGludm9rZSBuZG9fc3RvcCgpIG9uIGZyZWVkIE5BUEkvcXVldWUKJiM0MzsJCSAqIHN0YXRlLiBDYWxsZXIgaG9sZHMgUlROTDsgZGV2X2Nsb3NlKCkgd291bGQgZGVhZGxvY2suCiYjNDM7CQkgKi8KJiM0MzsJCXBmdmYtJmd0O2ZsYWdzIHw9IE9UWDJfRkxBR19JTlRGX0RPV047CiYjNDM7CQkvKiB2aXNpYmxlIHRvIG90eDJfc3RvcCgpIG9uIG90aGVyIGNwdXMgKi8KJiM0MzsJCXNtcF93bWIoKTsKJiM0MzsJCW5ldGlmX2Nsb3NlKG5ldGRldik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCQlzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssCiYjNDM7CQkJCQl1NjQgcmF0ZSwgdTMyIHFjb3VudCwgaW50IHRjLAomIzQzOwkJCQkJY29uc3QgY2hhciAqbmFtZSkKJiM0Mzt7CiYjNDM7CWlmICghcmF0ZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAocWNvdW50ICZsdDs9IDEpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyogVE9ETzogbXFwcmlvIG1pbl9yYXRlL21heF9yYXRlIGFyZSBwZXIgdHJhZmZpYyBjbGFzcywgYnV0IGJhbmR3aWR0aAomIzQzOwkgKiBvZmZsb2FkIHNoYXBlcyBvbiBwZXItcXVldWUgTURRIG5vZGVzIHBhcmVudGVkIHVuZGVyIGEgc2luZ2xlIFRMNC4KJiM0MzsJICogV2l0aG91dCBwZXItVEMgVEw0IHNoYXBlcnMgdGhlIGRyaXZlciBjYW5ub3QgaG9ub3IgVEMtbGV2ZWwgbGltaXRzCiYjNDM7CSAqIGZvciBhIHRyYWZmaWMgY2xhc3MgdGhhdCBzcGFucyBtdWx0aXBsZSBxdWV1ZXMgd2l0aG91dCBlaXRoZXIKJiM0MzsJICogZGl2aWRpbmcgdGhlIHJhdGUgYWNyb3NzIHF1ZXVlcyAodUFQSSBtaXNtYXRjaCkgb3IgZXhjZWVkaW5nIHRoZSBUQwomIzQzOwkgKiBjYXAgd2hlbiBldmVyeSBtZW1iZXIgcXVldWUgaXMgYWN0aXZlLiBSZWplY3QgdW50aWwgcGVyLVRDIFRMNAomIzQzOwkgKiBzaGFwaW5nIGNhbiBiZSBpbXBsZW1lbnRlZCB3aXRob3V0IGFsbG9jYXRpbmcgYWRkaXRpb25hbCBUTDQgbm9kZXMKJiM0MzsJICogYmV5b25kIHRoZSBleGlzdGluZyBoaWVyYXJjaHkuCiYjNDM7CSAqLwomIzQzOwluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCSAgICYjMzQ7bXFwcmlvOiAlcyByYXRlIGZvciB0YyAlZCBub3Qgc3VwcG9ydGVkIHdpdGggJXUgcXVldWVzXG4mIzM0OywKJiM0MzsJCSAgIG5hbWUsIHRjLCBxY291bnQpOwomIzQzOwlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywKJiM0MzsJCQkgICAgICAgJiMzNDttcXByaW86ICVzIHJhdGUgZm9yIHRjICVkIG5vdCBzdXBwb3J0ZWQgd2l0aCAldSBxdWV1ZXMmIzM0OywKJiM0MzsJCQkgICAgICAgbmFtZSwgdGMsIHFjb3VudCk7CiYjNDM7CXJldHVybiAtRU9QTk9UU1VQUDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb192YWxpZGF0ZV90eHFzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCSAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLAomIzQzOwkJCQkgICAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CXUxNiBudW1fdHhxID0gcGZ2Zi0mZ3Q7aHcubm9uX3Fvc19xdWV1ZXM7CiYjNDM7CWludCB0YywgdHhxOwomIzQzOwomIzQzOwlpZiAocW9wdC0mZ3Q7bnVtX3RjICZndDsgbnVtX3R4cSkgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsICYjMzQ7TnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1XG4mIzM0OywKJiM0MzsJCQkgICBxb3B0LSZndDtudW1fdGMsIG51bV90eHEpOwomIzQzOwkJTkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICAgICAmIzM0O051bWJlciBvZiBUQ3MgKCV1KSBleGNlZWRzIGh3IHF1ZXVlcyAldSYjMzQ7LAomIzQzOwkJCQkgICAgICAgcW9wdC0mZ3Q7bnVtX3RjLCBudW1fdHhxKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChudW1fdHhxICZndDsgTUFYX1RYU0NIUV9QRVJfRlVOQykgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDtOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldVxuJiMzNDssCiYjNDM7CQkJICAgbnVtX3R4cSwgTUFYX1RYU0NIUV9QRVJfRlVOQyk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywKJiM0MzsJCQkJICAgICAgICYjMzQ7TnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXUmIzM0OywKJiM0MzsJCQkJICAgICAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yICh0YyA9IDA7IHRjICZsdDsgcW9wdC0mZ3Q7bnVtX3RjOyB0YyYjNDM7JiM0MzspIHsKJiM0MzsJCXUzMiBxY291bnQgPSBxb3B0LSZndDtjb3VudFt0Y107CiYjNDM7CiYjNDM7CQlmb3IgKHR4cSA9IHFvcHQtJmd0O29mZnNldFt0Y107CiYjNDM7CQkgICAgIHR4cSAmbHQ7IHFvcHQtJmd0O29mZnNldFt0Y10gJiM0MzsgcWNvdW50OyB0eHEmIzQzOyYjNDM7KSB7CiYjNDM7CQkJaWYgKHR4cSAmZ3Q7PSBudW1fdHhxKSB7CiYjNDM7CQkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkJICAgJiMzNDttcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXVcbiYjMzQ7LAomIzQzOwkJCQkJICAgdHhxLCBudW1fdHhxKTsKJiM0MzsJCQkJTkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssCiYjNDM7CQkJCQkJICAgICAgICYjMzQ7bXFwcmlvOiB0eHEgJWQgZXhjZWVkcyBvZmZsb2FkIHF1ZXVlIGNvdW50ICV1JiMzNDssCiYjNDM7CQkJCQkJICAgICAgIHR4cSwgbnVtX3R4cSk7CiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgb3R4Ml9tcXByaW9fcmF0ZV92YWxpZCh1NjQgcmF0ZV9ieXRlc19wcykKJiM0Mzt7CiYjNDM7CXU2NCBtYnBzOwomIzQzOwomIzQzOwlpZiAoIXJhdGVfYnl0ZXNfcHMpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJaWYgKHJhdGVfYnl0ZXNfcHMgJmx0OyBPVFgyX01RUFJJT19NSU5fUkFURV9CWVRFU19QUykKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKHJhdGVfYnl0ZXNfcHMgJmd0OyBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QUykKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKHJhdGVfYnl0ZXNfcHMgJmd0OyBkaXZfdTY0KFU2NF9NQVgsIDgpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwltYnBzID0gb3R4Ml9jb252ZXJ0X3JhdGUocmF0ZV9ieXRlc19wcyk7CiYjNDM7CXJldHVybiBpbG9nMihtYnBzIC8gMikgJmx0Oz0gTUFYX1JBVEVfRVhQT05FTlQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml90ZWFyZG93bl90Y19tcXByaW8oc3RydWN0IG90eDJfbmljICpwZnZmLAomIzQzOwkJCQkgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKQomIzQzO3sKJiM0MzsJc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gJmFtcDttcXByaW8tJmd0O3FvcHQ7CiYjNDM7CWJvb2wgaGFkX21xcHJpbyA9IHBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0OwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi0mZ3Q7bmV0ZGV2OwomIzQzOwlib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlxb3B0LSZndDtodyA9IDA7CiYjNDM7CiYjNDM7CS8qIHRjIHFkaXNjIHJlcGxhY2UgcnVucyBzZXR1cCBvbiB0aGUgbmV3IG1xcHJpbyBiZWZvcmUgZGVzdHJveWluZyB0aGUKJiM0MzsJICogb2xkIG9uZS4gcmVwbGFjZV9zZXR1cF9kb25lIGFuZCBUQ19ST09UX0dSQUZUIGRpc3Rpbmd1aXNoIHN0YWxlCiYjNDM7CSAqIG9sZC1pbnN0YW5jZSB0ZWFyZG93biBmcm9tIGdyYWZ0IGZhaWx1cmUgYWZ0ZXIgc2V0dXAuCiYjNDM7CSAqLwomIzQzOwlpZiAocGZ2Zi0mZ3Q7bXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSAmYW1wOyZhbXA7IHBmdmYtJmd0O2N1cl9tcV9zbmFwKSB7CiYjNDM7CQllcnIgPSAwOwomIzQzOwkJaWYgKHBmdmYtJmd0O21xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUpCiYjNDM7CQkJb3R4Ml9tcXByaW9fc25hcF9jb21taXQocGZ2Zik7CiYjNDM7CQllbHNlCiYjNDM7CQkJZXJyID0gb3R4Ml9tcXByaW9fcmVzdG9yZV9vbGQocGZ2Zik7CiYjNDM7CQlvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHBmdmYpOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTa2lwIHRoZSBuZXRkZXYgcmVzdGFydCB3aGVuIG1xcHJpbyBvZmZsb2FkIHdhcyBub3QgYWN0aXZlLiAqLwomIzQzOwlpZiAoIWhhZF9tcXByaW8pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKGlmX3VwKSB7CiYjNDM7CQlpbnQgZG93bl9lcnIsIGVycjsKJiM0MzsKJiM0MzsJCWRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTsKJiM0MzsJCWVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KG5ldGRldiwgZmFsc2UpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJcmV0dXJuIGRvd25fZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIG5kb19zdG9wKCkgYWxyZWFkeSBmcmVlZCB0aGUgVFggc2NoZWR1bGVyIFRMIG5vZGVzOyBkcm9wIHNvZnR3YXJlCiYjNDM7CSAqIHN0YXRlIG9ubHkuCiYjNDM7CSAqLwomIzQzOwlvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkJc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IG1xcHJpby0mZ3Q7ZXh0YWNrOwomIzQzOwlzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSAmYW1wO21xcHJpby0mZ3Q7cW9wdDsKJiM0MzsJYm9vbCByZXBsYWNpbmcgPSBwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdDsKJiM0MzsJYm9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTsKJiM0MzsJaW50IHRjLCB0eHEsIGVyciwgaTsKJiM0MzsKJiM0MzsJaWYgKCFxb3B0LSZndDtodykKJiM0MzsJCXJldHVybiBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhwZnZmLCBtcXByaW8pOwomIzQzOwomIzQzOwlpZiAoIWlmX3VwKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDttcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFxuJiMzNDspOwomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgJiMzNDttcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUCYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobXFwcmlvLSZndDtzaGFwZXIgIT0gVENfTVFQUklPX1NIQVBFUl9CV19SQVRFKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxuJiMzNDssIG1xcHJpby0mZ3Q7c2hhcGVyKTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLCAmIzM0O1Vuc3VwcG9ydGVkIG1xcHJpbyBzaGFwZXIgJSN4JiMzNDssCiYjNDM7CQkJCSAgICAgICBtcXByaW8tJmd0O3NoYXBlcik7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCAmYW1wO3BmdmYtJmd0O2h3LmNhcF9mbGFnKSkgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUiYjNDM7UElSIHN1cHBvcnRcbiYjMzQ7KTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCByZXF1aXJlcyBDSVImIzQzO1BJUiBzdXBwb3J0JiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChpc19vdHgyX3NkcF9yZXAocGZ2Zi0mZ3Q7cGRldikpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LCAmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwXG4mIzM0Oyk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChwZnZmLSZndDtwZmNfZW4pIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcbiYjMzQ7KTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWQmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHBmdmYtJmd0O3hkcF9wcm9nKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkgICAmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmVcbiYjMzQ7KTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgWERQIGlzIGFjdGl2ZSYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKHRjID0gMDsgdGMgJmx0OyBxb3B0LSZndDtudW1fdGM7IHRjJiM0MzsmIzQzOykgewomIzQzOwkJdTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwOwomIzQzOwkJdTMyIHFjb3VudCA9IHFvcHQtJmd0O2NvdW50W3RjXTsKJiM0MzsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01JTl9SQVRFKQomIzQzOwkJCW1pbl9yYXRlID0gbXFwcmlvLSZndDttaW5fcmF0ZVt0Y107CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NQVhfUkFURSkKJiM0MzsJCQltYXhfcmF0ZSA9IG1xcHJpby0mZ3Q7bWF4X3JhdGVbdGNdOwomIzQzOwomIzQzOwkJaWYgKG1pbl9yYXRlICZhbXA7JmFtcDsgbWF4X3JhdGUgJmFtcDsmYW1wOyBtaW5fcmF0ZSAmZ3Q7IG1heF9yYXRlKSB7CiYjNDM7CQkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7bWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXG4mIzM0OywKJiM0MzsJCQkJICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7CiYjNDM7CQkJTkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssCiYjNDM7CQkJCQkgICAgICAgJiMzNDttaW5fcmF0ZSAlbGx1IGV4Y2VlZHMgbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQmIzM0OywKJiM0MzsJCQkJCSAgICAgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01JTl9SQVRFKSB7CiYjNDM7CQkJZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShuZXRkZXYsIGV4dGFjaywgbWluX3JhdGUsCiYjNDM7CQkJCQkJCSAgIHFjb3VudCwgdGMsICYjMzQ7bWluJiMzNDspOwomIzQzOwkJCWlmIChlcnIpCiYjNDM7CQkJCXJldHVybiBlcnI7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NQVhfUkFURSkgewomIzQzOwkJCWVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBleHRhY2ssIG1heF9yYXRlLAomIzQzOwkJCQkJCQkgICBxY291bnQsIHRjLCAmIzM0O21heCYjMzQ7KTsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUlOX1JBVEUgJmFtcDsmYW1wOwomIzQzOwkJICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG1pbl9yYXRlKSkgewomIzQzOwkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcbiYjMzQ7LAomIzQzOwkJCQkgICBtaW5fcmF0ZSwgdGMpOwomIzQzOwkJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLAomIzQzOwkJCQkJICAgICAgICYjMzQ7bXFwcmlvOiBtaW5fcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0cyYjMzQ7LAomIzQzOwkJCQkJICAgICAgIG1pbl9yYXRlLCB0Yyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NQVhfUkFURSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIW90eDJfbXFwcmlvX3JhdGVfdmFsaWQobWF4X3JhdGUpKSB7CiYjNDM7CQkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0c1xuJiMzNDssCiYjNDM7CQkJCSAgIG1heF9yYXRlLCB0Yyk7CiYjNDM7CQkJTkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssCiYjNDM7CQkJCQkgICAgICAgJiMzNDttcXByaW86IG1heF9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzJiMzNDssCiYjNDM7CQkJCQkgICAgICAgbWF4X3JhdGUsIHRjKTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90eHFzKG5ldGRldiwgZXh0YWNrLCBxb3B0KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfbXFwcmlvX3N0YWdlX2N1cihwZnZmLCBtcXByaW8pOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYocGZ2Zi0mZ3Q7bmV0ZGV2LCB0cnVlKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJZXJyID0gb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUocGZ2ZiwgcmVwbGFjaW5nKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyogb3R4Ml9tcXByaW9fdXAoKSBtYXkgaGF2ZSByZXN0b3JlZCB0aGUgcHJldmlvdXMgY29uZmlndXJhdGlvbiBkdXJpbmcKJiM0MzsJICogdGhlIHJlc3RhcnQgYWJvdmUuIENsZWFyIGV2ZXJ5IE1EUSBzaGFwZXIgYmVmb3JlIGFwcGx5aW5nIHRoZSBuZXcKJiM0MzsJICogbWFwcGluZyBzbyBxdWV1ZXMgZHJvcHBlZCBmcm9tIHRoZSBUQyBsYXlvdXQgZG8gbm90IGtlZXAgc3RhbGUKJiM0MzsJICogbGltaXRzIGluIGhhcmR3YXJlLgomIzQzOwkgKi8KJiM0MzsJaWYgKG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpIHsKJiM0MzsJCWVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5mbGFncyA9IG1xcHJpby0mZ3Q7ZmxhZ3M7CiYjNDM7CiYjNDM7CWZvciAodGMgPSAwOyB0YyAmbHQ7IHFvcHQtJmd0O251bV90YzsgdGMmIzQzOyYjNDM7KSB7CiYjNDM7CQl1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7CiYjNDM7CQl1MzIgcWNvdW50ID0gcW9wdC0mZ3Q7Y291bnRbdGNdOwomIzQzOwomIzQzOwkJLyogUmF0ZXMgb21pdHRlZCBmcm9tIHRjIG1xcHJpbyBhcmUgcGFzc2VkIGFzIHplcm8gYW5kIGJvdGggTURRCiYjNDM7CQkgKiBzaGFwZXIgcmVnaXN0ZXJzIGFyZSBwcm9ncmFtbWVkOyBzZWUKJiM0MzsJCSAqIG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoKS4gTXVsdGktcXVldWUgVENzIHdpdGggcmF0ZXMKJiM0MzsJCSAqIGFyZSByZWplY3RlZCBhYm92ZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUlOX1JBVEUpCiYjNDM7CQkJbWluX3JhdGUgPSBtcXByaW8tJmd0O21pbl9yYXRlW3RjXTsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01BWF9SQVRFKQomIzQzOwkJCW1heF9yYXRlID0gbXFwcmlvLSZndDttYXhfcmF0ZVt0Y107CiYjNDM7CiYjNDM7CQlmb3IgKHR4cSA9IHFvcHQtJmd0O29mZnNldFt0Y107CiYjNDM7CQkgICAgIHR4cSAmbHQ7IHFvcHQtJmd0O29mZnNldFt0Y10gJiM0MzsgcWNvdW50OyB0eHEmIzQzOyYjNDM7KSB7CiYjNDM7CQkJbmV0ZGV2X2RiZyhuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiB0YyAlZCB0eHEgJWQgbWluX3JhdGUgJWxsdSBtYXhfcmF0ZSAlbGx1XG4mIzM0OywKJiM0MzsJCQkJICAgdGMsIHR4cSwgbWluX3JhdGUsIG1heF9yYXRlKTsKJiM0MzsKJiM0MzsJCQlwZnZmLSZndDttcXByaW8ubWluX3JhdGVbdHhxXSA9IG1pbl9yYXRlOwomIzQzOwkJCXBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7CiYjNDM7CiYjNDM7CQkJZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsCiYjNDM7CQkJCQkJCSAgIG1pbl9yYXRlLCBtYXhfcmF0ZSk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJZ290byBjbGVhbnVwOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CW5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgcGZ2Zi0mZ3Q7Y3VyX21xX3NuYXAtJmd0O251bV90Yyk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBwZnZmLSZndDtjdXJfbXFfc25hcC0mZ3Q7bnVtX3RjOyBpJiM0MzsmIzQzOykKJiM0MzsJCW5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCBpLCBwZnZmLSZndDtjdXJfbXFfc25hcC0mZ3Q7Y291bnRbaV0sCiYjNDM7CQkJCSAgICBxb3B0LSZndDtvZmZzZXRbaV0pOwomIzQzOwomIzQzOwlxb3B0LSZndDtodyA9IFRDX01RUFJJT19IV19PRkZMT0FEX1RDUzsKJiM0MzsKJiM0MzsJaWYgKHJlcGxhY2luZykgewomIzQzOwkJcGZ2Zi0mZ3Q7bXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSA9IHRydWU7CiYjNDM7CQlwZnZmLSZndDttcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lID0gZmFsc2U7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlvdHgyX21xcHJpb19zbmFwX2NvbW1pdChwZnZmKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztjbGVhbnVwOgomIzQzOwlxb3B0LSZndDtodyA9IDA7CiYjNDM7CWlmIChyZXBsYWNpbmcpIHsKJiM0MzsJCWludCByZXN0b3JlX2VyciA9IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHBmdmYpOwomIzQzOwomIzQzOwkJb3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShwZnZmKTsKJiM0MzsJCWlmIChyZXN0b3JlX2VycikgewomIzQzOwkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogcmVwbGFjZSBmYWlsZWQgYW5kIHByaW9yIGNvbmZpZ3VyYXRpb24gcm9sbGJhY2sgZmFpbGVkOiAlZFxuJiMzNDssCiYjNDM7CQkJCSAgIHJlc3RvcmVfZXJyKTsKJiM0MzsJCQlpZiAoZXh0YWNrKQomIzQzOwkJCQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywKJiM0MzsJCQkJCQkgICAgICAgJiMzNDttcXByaW86IHJlcGxhY2UgZmFpbGVkIGFuZCBwcmlvciBjb25maWd1cmF0aW9uIHJvbGxiYWNrIGZhaWxlZDogJWQmIzM0OywKJiM0MzsJCQkJCQkgICAgICAgcmVzdG9yZV9lcnIpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IHJlcGxhY2UgZmFpbGVkOyBwcmlvciBjb25maWd1cmF0aW9uIHJlc3RvcmVkXG4mIzM0Oyk7CiYjNDM7CQkJaWYgKGV4dGFjaykKJiM0MzsJCQkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJCQkgICAmIzM0O21xcHJpbzogcmVwbGFjZSBmYWlsZWQ7IHByaW9yIGNvbmZpZ3VyYXRpb24gcmVzdG9yZWQmIzM0Oyk7CiYjNDM7CQl9CiYjNDM7CQlyZXR1cm4gZXJyID8gZXJyIDogLUVJTzsKJiM0MzsJfQomIzQzOwlvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhwZnZmLCBtcXByaW8pOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfcm9vdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsCiYjNDM7CQkJICAgICAgc3RydWN0IHRjX3Jvb3RfcW9wdF9vZmZsb2FkICpyb290KQomIzQzO3sKJiM0MzsJc3dpdGNoIChyb290LSZndDtjb21tYW5kKSB7CiYjNDM7CWNhc2UgVENfUk9PVF9HUkFGVDoKJiM0MzsJCWlmIChwZnZmLSZndDttcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lKQomIzQzOwkJCXBmdmYtJmd0O21xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSB0cnVlOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX3NldHVwX3RjX3F1ZXJ5X2NhcHModm9pZCAqdHlwZV9kYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHRjX3F1ZXJ5X2NhcHNfYmFzZSAqYmFzZSA9IHR5cGVfZGF0YTsKJiM0MzsJc3RydWN0IHRjX21xcHJpb19jYXBzICpjYXBzOwomIzQzOwomIzQzOwlpZiAoYmFzZS0mZ3Q7dHlwZSAhPSBUQ19TRVRVUF9RRElTQ19NUVBSSU8pCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWNhcHMgPSBiYXNlLSZndDtjYXBzOwomIzQzOwljYXBzLSZndDt2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBpbnQgb3R4Ml9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSwKIAkJICB2b2lkICp0eXBlX2RhdGEpCiB7CiAJc3dpdGNoICh0eXBlKSB7CiYjNDM7CWNhc2UgVENfUVVFUllfQ0FQUzoKJiM0MzsJCXJldHVybiBvdHgyX3NldHVwX3RjX3F1ZXJ5X2NhcHModHlwZV9kYXRhKTsKIAljYXNlIFRDX1NFVFVQX0JMT0NLOgogCQlyZXR1cm4gb3R4Ml9zZXR1cF90Y19ibG9jayhuZXRkZXYsIHR5cGVfZGF0YSk7CiAJY2FzZSBUQ19TRVRVUF9RRElTQ19IVEI6CiAJCXJldHVybiBvdHgyX3NldHVwX3RjX2h0YihuZXRkZXYsIHR5cGVfZGF0YSk7CiYjNDM7CWNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOgomIzQzOwkJcmV0dXJuIG90eDJfc2V0dXBfdGNfbXFwcmlvKG5ldGRldiwgdHlwZV9kYXRhKTsKJiM0MzsJY2FzZSBUQ19TRVRVUF9ST09UX1FESVNDOgomIzQzOwkJcmV0dXJuIG90eDJfc2V0dXBfdGNfcm9vdChuZXRkZXZfcHJpdihuZXRkZXYpLCB0eXBlX2RhdGEpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CkBAIC0xNjMyLDYgJiM0MzsyMzM2LDcgQEAgRVhQT1JUX1NZTUJPTChvdHgyX2luaXRfdGMpOwogdm9pZCBvdHgyX3NodXRkb3duX3RjKHN0cnVjdCBvdHgyX25pYyAqbmljKQogewogCW90eDJfZGVzdHJveV90Y19mbG93X2xpc3QobmljKTsKJiM0MzsJb3R4Ml9tcXByaW9fc25hcF9kZXN0cm95KG5pYyk7CiB9CiBFWFBPUlRfU1lNQk9MKG90eDJfc2h1dGRvd25fdGMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMKaW5kZXggNjljMDkxMWUyOGU5MS4uZDlhZjE4MmU1NzIxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYwpAQCAtMTE4LDYgJiM0MzsxMTgsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2NvbmZpZ19zY2hlZF9zaGFwaW5nKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKIAkvKiBjb25maWd1cmUgUElSICovCiAJbWF4cmF0ZSA9IChub2RlLSZndDtyYXRlICZndDsgbm9kZS0mZ3Q7Y2VpbCkgPyBub2RlLSZndDtyYXRlIDogbm9kZS0mZ3Q7Y2VpbDsKIAomIzQzOwkvKiA2NTUzNiBpcyB0aGUga2VybmVsLXNpZGUgZGVmYXVsdCBidXJzdCB3aGVuIEhUQiBkb2VzIG5vdCBzdXBwbHkgYW4KJiM0MzsJICogZXhwbGljaXQgdmFsdWUsIG5vdCB0aGUgTklYIGhhcmR3YXJlIG1heGltdW0gKENOMTBLX01BWF9CVVJTVF9TSVpFKS4KJiM0MzsJICovCiAJY2ZnLSZndDtyZWd2YWxbKm51bV9yZWdzXSA9CiAJCW90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCBtYXhyYXRlLCA2NTUzNik7CiAJKCpudW1fcmVncykmIzQzOyYjNDM7Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzUwMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhpcyBQYXRjaCBTZXJpZXMgZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBzZXJpZXMgYW5kIHNlZSBpZiBpdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlIGZvciBzb21lIHN5emthbGxlciBmdXp6aW5nLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBjaGVja2luZyBpcyB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSDigJMgbG9va3MgbGlrZSBpdCYjMzk7cyBhbWQ2NC4gR29vZCwgdGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQgZW5vdWdoIHRvIHdvcmsgd2l0aC4KCk5vdywgdGhlIGZpbGVzIHRoYXQgd2VyZSBtb2RpZmllZCwgdGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nOgoqICAgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY2AKKiAgIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY2AKKiAgIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaGAKKiAgIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jYAoqICAgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY2AKKiAgIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jYAoqICAgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNgCiogICBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jYAoKSG1tLCBsb29rcyBsaWtlIGEgbmV0d29ya2luZyBzdGFjayBkcml2ZXIgc3BlY2lmaWMgdG8gdGhlIGBvY3Rlb250eDJgIGhhcmR3YXJlLiBUaGF0IG1lYW5zIGl04oCZcyB2ZW5kb3Itc3BlY2lmaWMsIHdoaWNoIGlzIHByZWNpc2VseSB0aGUga2luZCBvZiBsb3ctaGFuZ2luZyBmcnVpdCB3ZSYjMzk7cmUgbG9va2luZyBmb3IsIHBvdGVudGlhbGx5LiBPY3Rlb24gVFgyIGlzIE1hcnZlbGwgaGFyZHdhcmUgKEFSTTY0IFNvQywgUENJZSBTbWFydE5JQywgQ045Sy9DTjEwSyBoYXJkd2FyZSkuCgpTbywgdGhlIG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIGZvciBgb2N0ZW9udHgyYC4gTGV04oCZcyBjb25maXJtIHRoYXQgaXQmIzM5O3MgY29uZmlndXJhYmxlIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25kaXRpb25zIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGlzLiBHcmVwcGluZyBvciBhIHF1aWNrIGZpbGUgcmVhZCB3aWxsIGdpdmUgbWUgdGhhdCBhbnN3ZXIgZmFzdC4gVGhpcyB0ZWxscyBtZSBpZiB0aGVyZSYjMzk7cyBhIGdvb2QgY2hhbmNlIG9mIGl0IGJlaW5nIHJlYWNoYWJsZSBieSBzeXprYWxsZXIuIElmIHNvLCB0aGlzIHNlcmllcyBsb29rcyB2ZXJ5IHByb21pc2luZyBpbmRlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7T0NURU9OVFgyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy01LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo2OmNvbmZpZyBPQ1RFT05UWDJfTUJPWFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy03LVx0dHJpc3RhdGVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6OTpjb25maWcgT0NURU9OVFgyX0FGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTEwLVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBPY3Rlb25UWDIgUlZVIEFkbWluIEZ1bmN0aW9uIGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzoxMTpcdHNlbGVjdCBPQ1RFT05UWDJfTUJPWFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0xMi1cdHNlbGVjdCBORVRfREVWTElOS1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc9MjI9Y29uZmlnIE5EQ19ESVNfRFlOQU1JQ19DQUNISU5HXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTIzLVx0Ym9vbCBcJiMzNDtEaXNhYmxlIGNhY2hpbmcgb2YgZHluYW1pYyBlbnRyaWVzIGluIE5EQ1wmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzoyNDpcdGRlcGVuZHMgb24gT0NURU9OVFgyX0FGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTI1LVx0ZGVmYXVsdCBuXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6MzE6Y29uZmlnIE9DVEVPTlRYMl9QRlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zMi1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgT2N0ZW9uVFgyIE5JQyBQaHlzaWNhbCBGdW5jdGlvbiBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6MzM6XHRzZWxlY3QgT0NURU9OVFgyX01CT1hcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMzQtXHRzZWxlY3QgTkVUX0RFVkxJTktcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTQ0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo0NTpjb25maWcgT0NURU9OVFgyX1ZGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTQ2LVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBPY3Rlb25UWDIgTklDIFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjQ3Olx0ZGVwZW5kcyBvbiBPQ1RFT05UWDJfUEZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNDgtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz01MT1jb25maWcgUlZVX0VTV0lUQ0hcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNTItXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIFJWVSBFLVN3aXRjaCBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjUzOlx0ZGVwZW5kcyBvbiBPQ1RFT05UWDJfUEZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNTQtXHRkZWZhdWx0IG1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9NYWtlZmlsZS01LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfT0NURU9OVFgyX01CT1gpICYjNDM7PSBhZi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX09DVEVPTlRYMl9BRikgJiM0Mzs9IGFmL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvTWFrZWZpbGU6ODpvYmotJChDT05GSUdfT0NURU9OVFgyX1BGKSAmIzQzOz0gbmljL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL01ha2VmaWxlPTY9Y2NmbGFncy15ICYjNDM7PSAtSSQoc3JjKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfT0NURU9OVFgyX01CT1gpICYjNDM7PSBydnVfbWJveC5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19PQ1RFT05UWDJfQUYpICYjNDM7PSBydnVfYWYub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvTWFrZWZpbGUtOS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guYz02Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgY2d4X2lkX3RhYmxlW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guYzo2NzpcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9DR1gpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guYy02OC1cdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9DTjEwS19SUE0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY2d4LmgtMTUtIC8qIFBDSSBkZXZpY2UgSURzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guaDoxNjojZGVmaW5lXHRQQ0lfREVWSURfT0NURU9OVFgyX0NHWFx0XHQweEEwNTlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5oLTE3LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYz0xNTQ9REVGSU5FX1NIT1dfQVRUUklCVVRFKG5wY19tY2FtX2xheW91dCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMTU1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jOjE1NjojZGVmaW5lIF9fT0NURU9OVFgyX0RFQlVHRlNfQVRUUklCVVRFX0ZPUFMoX19uYW1lKVx0XHRcdFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMTU3LXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIF9fbmFtZSAjIyBfZm9wcyA9IHtcdFx0XHRcXFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNjQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM6MTY1OiNkZWZpbmUgREVGSU5FX09DVEVPTlRYMl9ERUJVR0ZTX0FUVFJJQlVURV9XSVRIX1NJWkUoX19uYW1lLCBfX3NpemUpXHRcdFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMTY2LXN0YXRpYyBpbnQgX19uYW1lICMjIF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVx0XHRcXFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNzAtfVx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYzoxNzE6X19PQ1RFT05UWDJfREVCVUdGU19BVFRSSUJVVEVfRk9QUyhfX25hbWUpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMTcyLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYz0xODE9c3RhdGljIGludCBucGNfbWNhbV9kc3RhdHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnVudXNlZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMjQyLSNkZWZpbmUgVE9UQUxfU1ogKE1BWF9OVU1fQkFOS1MgKiBNQVhfTlVNX1NVQl9CQU5LUyAqIE1BWF9TVUJCQU5LX0RFUFRIICogNjQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM6MjQzOkRFRklORV9PQ1RFT05UWDJfREVCVUdGU19BVFRSSUJVVEVfV0lUSF9TSVpFKG5wY19tY2FtX2RzdGF0cywgVE9UQUxfU1opO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTI0NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYz0yNDU9c3RhdGljIGludCBucGNfbWNhbV9taXNtYXRjaF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0yODQtLyogXCYjMzQ7JXVcXHQlZFxcdCV1XFxuXCYjMzQ7IG5lZWRzIGxlc3MgdGhhbiA2NCBjaGFyYWN0ZXJzIHRvIHByaW50LiAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jOjI4NTpERUZJTkVfT0NURU9OVFgyX0RFQlVHRlNfQVRUUklCVVRFX1dJVEhfU0laRShucGNfbWNhbV9taXNtYXRjaCwgVE9UQUxfU1opO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTI4Ni1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy0yMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjIxOiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9QVFBcdFx0XHQweEEwMENcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTIyLSNkZWZpbmUgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85OHh4X1BUUFx0XHQweEIxMDBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy0yNy0jZGVmaW5lIFBDSV9TVUJTWVNfREVWSURfT0NUWDJfOTVYWE9fUFRQXHQweEI2MDBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjI4OiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9SU1RcdFx0XHQweEEwODVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTI5LSNkZWZpbmUgUENJX0RFVklEX0NOMTBLX1BUUFx0XHRcdDB4QTA5RVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jPTU4OT1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcHRwX2lkX3RhYmxlW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo1OTA6XHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5MS1cdFx0XHQgUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy01OTItXHRcdFx0IFBDSV9TVUJTWVNfREVWSURfT0NUWDJfOTh4eF9QVFApIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo1OTM6XHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5NC1cdFx0XHQgUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy01OTUtXHRcdFx0IFBDSV9TVUJTWVNfREVWSURfT0NUWDJfOTZYWF9QVFApIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo1OTY6XHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5Ny1cdFx0XHQgUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy01OTgtXHRcdFx0IFBDSV9TVUJTWVNfREVWSURfT0NUWDJfOTVYWF9QVFApIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo1OTk6XHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTYwMC1cdFx0XHQgUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy02MDEtXHRcdFx0IFBDSV9TVUJTWVNfREVWSURfT0NUWDJfOTVYWE5fUFRQKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM6NjAyOlx0eyBQQ0lfREVWSUNFX1NVQihQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9QVFAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy02MDMtXHRcdFx0IFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNjA0LVx0XHRcdCBQQ0lfU1VCU1lTX0RFVklEX09DVFgyXzk1TU1fUFRQKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM6NjA1Olx0eyBQQ0lfREVWSUNFX1NVQihQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9QVFAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy02MDYtXHRcdFx0IFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBydnVfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjQ1Olx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRikgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTQ2LVx0eyAwLCB9ICAvKiBlbmQgb2YgdGFibGUgKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYz05Mjc9c3RhdGljIHZvaWQgcnZ1X2dldF9sYmtfYnVmc2l6ZShzdHJ1Y3QgcnZ1ICpydnUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtOTMzLVx0cGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM6OTM0Olx0XHRcdCAgICAgIFBDSV9ERVZJRF9PQ1RFT05UWDJfTEJLLCBwZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTkzNS1cdGlmICghcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYz0zNDQ3PWludCBydnVfZ2V0X251bV9sYmtfY2hhbnModm9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNDUyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM6MzQ1MzpcdHBkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9MQkssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNDU0LVx0XHRcdCAgICAgIE5VTEwpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM0NzAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzozNDcxOiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUZWRlx0MHhBMEY4XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNDcyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM9MzQ3Mz1zdGF0aWMgaW50IHJ2dV9lbmFibGVfc3Jpb3Yoc3RydWN0IHJ2dSAqcnZ1KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM0OTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzozNDk1Olx0aWYgKHJ2dS1cdTAwM2V2Zl9kZXZpZCA9PSBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRlZGKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNDk2LVx0XHRjaGFucyA9IHJ2dV9nZXRfbnVtX2xia19jaGFucygpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5oLTIzLS8qIFBDSSBkZXZpY2UgSURzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuaDoyNDojZGVmaW5lXHRQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRlx0XHQweEEwNjVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5oOjI1OiNkZWZpbmVcdFBDSV9ERVZJRF9PQ1RFT05UWDJfTEJLXHRcdFx0MHhBMDYxXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuaC0yNi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfY24xMGsuYz0zOTI9c3RhdGljIHZvaWQgcnZ1X2xia19zZXRfY2hhbm5lbHMoc3RydWN0IHJ2dSAqcnZ1KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9jbjEway5jLTQxNS1cdFx0cGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2NuMTBrLmM6NDE2Olx0XHRcdFx0ICAgICAgUENJX0RFVklEX09DVEVPTlRYMl9MQkssIHBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2NuMTBrLmMtNDE3LVx0XHRpZiAoIXBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYz0yODAwPXN0YXRpYyB2b2lkIHJ2dV9kYmdfbnBhX2luaXQoc3RydWN0IHJ2dSAqcnZ1KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtMjgxOS0vKiBQZXItbG1hYyBDR1ggZGVidWdmcyBmaWxlcyBuZWVkIGJvdGggUlZVIGFuZCBDR1ggaGFuZGxlOyBpbm9kZS1cdTAwM2VpX3ByaXZhdGVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmM6MjgyMDogKiBwb2ludHMgaGVyZSBzbyBzZXFfZmlsZSBvcHMgYXZvaWQgcGNpX2dldF9kZXZpY2UoUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUYpLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0yODIxLSAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9NYWtlZmlsZS01LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX09DVEVPTlRYMl9QRikgJiM0Mzs9IHJ2dV9uaWNwZi5vIG90eDJfcHRwLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19PQ1RFT05UWDJfVkYpICYjNDM7PSBydnVfbmljdmYubyBvdHgyX3B0cC5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvTWFrZWZpbGUtOC1vYmotJChDT05GSUdfUlZVX0VTV0lUQ0gpICYjNDM7PSBydnVfcmVwLm9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC00My0vKiBQQ0kgZGV2aWNlIElEcyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmg6NDQ6I2RlZmluZSBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9QRiAgICAgICAgICAgICAgMHhBMDYzXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo0NTojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX1ZGXHRcdDB4QTA2NFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmg6NDY6I2RlZmluZSBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRlZGXHRcdDB4QTBGOFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNDctXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNTEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo1MjojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfU0RQX1JFUFx0XHQweEEwRjdcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTUzLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oPTYxOT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfb3R4Ml9sYmt2ZihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTYyMC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo2MjE6XHRyZXR1cm4gKHBkZXYtXHUwMDNlZGV2aWNlID09IFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGVkYpIHx8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC02MjItXHRcdChwZGV2LVx1MDAzZWRldmljZSA9PSBQQ0lfREVWSURfUlZVX1JFUCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmg9NjM3PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19vdHgyX3NkcF9yZXAoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC02Mzgte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmg6NjM5Olx0cmV0dXJuIHBkZXYtXHUwMDNlZGV2aWNlID09IFBDSV9ERVZJRF9PQ1RFT05UWDJfU0RQX1JFUDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTY0MC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYz0zNj1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgb3R4Ml9wZl9pZF90YWJsZVtdID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzozNzpcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfUEYpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTM4LVx0eyAwLCB9ICAvKiBlbmQgb2YgdGFibGUgKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jPTIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBvdHgyX3ZmX2lkX3RhYmxlW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jOjIzOlx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRlZGKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuYzoyNDpcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfVkYpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jOjI1Olx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1NEUF9SRVApIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jLTI2LVx0eyB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0NzEKCQkJCQkJCW91dHB1dDogMTIzCgkJCQkJCQl0aG91Z2h0czogNTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIERyaXZlciBmb3IgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbnN1bHQgU2VjdGlvbiAyIG9mIHRoZSB0cmlhZ2UgcGhpbG9zb3BoeSwgc3BlY2lmaWNhbGx5IHRoZSBwYXJ0IGFib3V0ICYjMzQ7U3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLiYjMzQ7IFJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBmb3IgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgdGhhdCBkZXBlbmQgb24gcGh5c2ljYWwgQVNJQ3Mgb3IgUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KClRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBkcml2ZXIgKE9DVEVPTlRYMl9QRiwgT0NURU9OVFgyX1ZGLCBPQ1RFT05UWDJfQUYpIGltbWVkaWF0ZWx5IGNhdWdodCBteSBleWUuIFRoaXMgaXMgYSBkcml2ZXIgZm9yIE1hcnZlbGwvQ2F2aXVtIE9jdGVvbiBUWDIgU21hcnROSUNzIGFuZCBTb0NzLCB1c2luZyB2ZW5kb3IgSUQgMHgxNzdkLiBEZWZpbml0ZWx5IGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIGRyaXZlci4gV2UgbmVlZCB0byBjb25maXJtIGlmIGl0ICpyZXF1aXJlcyogcGh5c2ljYWwgaGFyZHdhcmUuCgpMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGRyaXZlciBhY3R1YWxseSB0b3VjaGVzLiBMb29rcyBsaWtlIGl0IG1vZGlmaWVzIGZpbGVzIHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYDogc3BlY2lmaWNhbGx5IGBydnVfbml4LmNgIGFuZCBmaWxlcyB1bmRlciB0aGUgYG5pY2AgZGlyZWN0b3J5IGxpa2UgYG90eDJfY29tbW9uLmNgLCBgb3R4Ml9kY2JubC5jYCwgYW5kIHNvIG9uLiBHb29kLCBpdCYjMzk7cyBjb250YWluZWQgd2l0aGluIHRoYXQgTWFydmVsbC1zcGVjaWZpYyBwYXJ0IG9mIHRoZSB0cmVlLiBUaGVyZSBhcmUgbm8gbW9kaWZpY2F0aW9ucyB0byBjb3JlIG5ldHdvcmtpbmcgb3IgdmlydHVhbCBkZXZpY2UgZHJpdmVycywgd2hpY2ggaXMgcHJvbWlzaW5nIGZyb20gYSAmIzM0O3JlYWNoYWJpbGl0eSYjMzQ7IHBlcnNwZWN0aXZlLgoKTm93LCB0aGUgY3J1Y2lhbCBjaGVjazogRG9lcyBRRU1VIGVtdWxhdGUgYW55IG9mIHRoaXM/IE5vcGUuIFN0YW5kYXJkIFFFTVUgZG9lc24mIzM5O3QgdG91Y2ggdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIFJWVSAvIE5JWCBoYXJkd2FyZS4gVGhpcyBzb2xpZGlmaWVzIHRoYXQgdGhlIGRyaXZlciBkZW1hbmRzIHBoeXNpY2FsIGhhcmR3YXJlIOKAkyB0aGUgTWFydmVsbCBPY3Rlb25UWDIgU29DIG9yIFBDSWUgU21hcnROSUMuIFRoZXJlZm9yZSwgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBoYXJkd2FyZSB0aGF0JiMzOTtzICpzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUqIGluIG91ciBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4KClNvLCB0aGUgY29uY2x1c2lvbiBpcyBjbGVhci4gVGhpcyBpc24mIzM5O3Qgd29ydGggZnV6emluZyBpbiBvdXIgc3RhbmRhcmQgc2V0dXAuCgpUaGVyZWZvcmUsIHRoZSByZXNwb25zZSBpczoKCldvcnRoRnV6emluZzogZmFsc2UKUmVhc29uaW5nOiBUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIG9ubHkgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIG5ldHdvcmsgZHJpdmVyIChgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYCksIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIE1hcnZlbGwgT2N0ZW9uVFgyIGhhcmR3YXJlL0FTSUNzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuCkVuYWJsZUNvbmZpZ3M6IFtdCkZvY3VzU3ltYm9sczogW10KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIG9ubHkgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIG5ldHdvcmsgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi8pLCBhZGRpbmcgc3VwcG9ydCBmb3IgbXFwcmlvIGhhcmR3YXJlIGJhbmR3aWR0aCBvZmZsb2FkLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDL1NvQyBkcml2ZXIgcmVxdWlyaW5nIHBoeXNpY2FsIE1hcnZlbGwgT2N0ZW9uVFgyIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgb25seSB0aGUgTWFydmVsbCBPY3Rlb25UWDIgbmV0d29yayBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyLyksIGFkZGluZyBzdXBwb3J0IGZvciBtcXByaW8gaGFyZHdhcmUgYmFuZHdpZHRoIG9mZmxvYWQuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU21hcnROSUMvU29DIGRyaXZlciByZXF1aXJpbmcgcGh5c2ljYWwgTWFydmVsbCBPY3Rlb25UWDIgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDM6NDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAzOjM5OjQ1LjI1NDg2NDIxNVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjc2NzIyMzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIG9ubHkgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIG5ldHdvcmsgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi8pLCBhZGRpbmcgc3VwcG9ydCBmb3IgbXFwcmlvIGhhcmR3YXJlIGJhbmR3aWR0aCBvZmZsb2FkLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDL1NvQyBkcml2ZXIgcmVxdWlyaW5nIHBoeXNpY2FsIE1hcnZlbGwgT2N0ZW9uVFgyIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMzozOTo0NS4yNTQ4Njk1MTVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NTc3NjAyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGExMTM2NWU2ODFhZWUzOTRiNWVjN2QwMGY4ZGZjNTE3Y2Y2YzhmZWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgNCAwMzozOTo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcXG5pbmRleCAxNTNlYjU3YmFkMDY3Li5jOWE0MzI2ZDcyNWQ4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xcbkBAIC0zMzEsOCArMzMxLDEyIEBAIHN0YXRpYyBib29sIGlzX3ZhbGlkX3R4c2NocShzdHJ1Y3QgcnZ1ICpydnUsIGludCBibGthZGRyLFxcbiBcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpXFxuK1xcdGlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKSB7XFxuK1xcdFxcdGRldl9lcnJfcmF0ZWxpbWl0ZWQocnZ1LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwicGNpZnVuYyAleCBtYXAgcGNpZnVuYyAleCBub3QgZXF1YWwsIGx2bD0ldSBzY2hxPSV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgcGNpZnVuYywgbWFwX2Z1bmMsIGx2bCwgc2NocSk7XFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbiBcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xcbmluZGV4IDE3NTk5MjE4OGMxOGEuLmE1MTllMGE5N2EyYjcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xcbkBAIC02MTUsNiArNjE1LDE0MiBAQCB2b2lkIG90eDJfZ2V0X21hY19mcm9tX2FmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChvdHgyX2dldF9tYWNfZnJvbV9hZik7XFxuIFxcbitzdGF0aWMgaW50XFxuK290eDJfbml4X3RtcV9yZWdfd3JpdGUoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgY250LFxcbitcXHRcXHQgICAgICAgdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR10sXFxuK1xcdFxcdCAgICAgICB1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddKVxcbit7XFxuK1xcdHN0cnVjdCBtYm94ICptYm94ID0gXFx1MDAyNnBmdmYtXFx1MDAzZW1ib3g7XFxuK1xcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xcbitcXHRpbnQgaSwgZXJyO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XFxuK1xcdGlmICghcmVxKSB7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRyZXEtXFx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xcbitcXHRyZXEtXFx1MDAzZW51bV9yZWdzID0gY250O1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNudDsgaSsrKSB7XFxuK1xcdFxcdHJlcS1cXHUwMDNlcmVnW2ldID0gcmVnX2FkZHJbaV07XFxuK1xcdFxcdHJlcS1cXHUwMDNlcmVndmFsW2ldID0gcmVnX3ZhbFtpXTtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4raW50IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0dTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR107XFxuK1xcdHU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR107XFxuK1xcdGludCBlcnIsIHNtcSwgaSwgY250ID0gMDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwZnZmLVxcdTAwM2Vody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfU01RXTsgaSsrKSB7XFxuK1xcdFxcdHNtcSA9IHBmdmYtXFx1MDAzZWh3LnR4c2NocV9saXN0W05JWF9UWFNDSF9MVkxfU01RXVtpXTtcXG4rXFxuK1xcdFxcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcXG4rXFx0XFx0cmVnX3ZhbFtjbnRdID0gMDtcXG4rXFx0XFx0Y250Kys7XFxuK1xcbitcXHRcXHRyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XFxuK1xcdFxcdHJlZ192YWxbY250XSA9IDA7XFxuK1xcdFxcdGNudCsrO1xcbitcXG4rXFx0XFx0aWYgKGNudCBcXHUwMDNjIE1BWF9SRUdTX1BFUl9NQk9YX01TRyAtIDEpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRnb3RvIGZhaWw7XFxuK1xcdFxcdGNudCA9IDA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChjbnQpIHtcXG4rXFx0XFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRnb3RvIGZhaWw7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbitmYWlsOlxcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuK1xcdFxcdFxcdFxcdCBpbnQgdHhxLCB1NjQgbWlucmF0ZSwgdTY0IG1heHJhdGUpXFxuK3tcXG4rXFx0c3RydWN0IG1ib3ggKm1ib3ggPSBcXHUwMDI2cGZ2Zi1cXHUwMDNlbWJveDtcXG4rXFx0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XFxuK1xcdGludCBlcnIsIHNtcSwgbiA9IDA7XFxuK1xcdHU2NCByZWdfYWRkclsyXTtcXG4rXFx0dTY0IHJlZ192YWxbMl07XFxuK1xcdHU2NCByYXRlO1xcbitcXG4rXFx0aWYgKCFtYXhyYXRlIFxcdTAwMjZcXHUwMDI2ICFtaW5yYXRlKSB7XFxuK1xcdFxcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTtcXG4rXFx0XFx0cmVnX2FkZHJbMF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcXG4rXFx0XFx0cmVnX3ZhbFswXSA9IDA7XFxuK1xcdFxcdHJlZ19hZGRyWzFdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XFxuK1xcdFxcdHJlZ192YWxbMV0gPSAwO1xcbitcXHRcXHRyZXR1cm4gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCAyLCByZWdfYWRkciwgcmVnX3ZhbCk7XFxuK1xcdH1cXG4rXFxuK1xcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbitcXHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpO1xcbitcXHRpZiAoIXJlcSkge1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0cmVxLVxcdTAwM2VsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTtcXG4rXFxuK1xcdC8qIE1RUFJJTyBleHBvc2VzIG9ubHkgbWluL21heCByYXRlLCBub3QgYnVyc3QuICBQYXNzIGJ1cnN0IDAgc29cXG4rXFx0ICogb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZygpIHByb2dyYW1tZXMgdGhlIGxhcmdlc3QgYnVyc3QgdGhlIE5JWFxcbitcXHQgKiBlbmNvZGluZyBzdXBwb3J0cyAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb24gQ04xMEspLiAgVGhpcyBkaWZmZXJzXFxuK1xcdCAqIGZyb20gdGhlIDY1NTM2IGJ5dGUgZGVmYXVsdCB1c2VkIGluIHRoZSBIVEIgcGF0aCwgd2hpY2ggaXMgYVxcbitcXHQgKiBrZXJuZWwtc2lkZSBkZWZhdWx0IHdoZW4gbm8gZXhwbGljaXQgYnVyc3QgaXMgY29uZmlndXJlZCwgbm90IGFcXG4rXFx0ICogaGFyZHdhcmUgY2FwLlxcbitcXHQgKlxcbitcXHQgKiBtcXByaW8gc2V0dXAgcmVzdGFydHMgdGhlIG5ldGRldiAob3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYpLFxcbitcXHQgKiB3aGljaCByZXNldHMgTURRIHNoYXBlcnMgdG8gemVyby4gIFByb2dyYW0gYm90aCBQSVIgYW5kIENJUiBvblxcbitcXHQgKiBldmVyeSB1cGRhdGUgc28gb21pdHRlZCByYXRlcyBhcmUgYXBwbGllZCBleHBsaWNpdGx5IHJhdGhlciB0aGFuXFxuK1xcdCAqIHJlbHlpbmcgb24gc3RhbGUgaGFyZHdhcmUgc3RhdGUuXFxuK1xcdCAqL1xcbitcXHRyZXEtXFx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xcbitcXHRpZiAobWF4cmF0ZSkge1xcbitcXHRcXHRyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWF4cmF0ZSk7XFxuK1xcdFxcdHJlcS1cXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFtuXSA9IDA7XFxuK1xcdH1cXG4rXFx0bisrO1xcbitcXG4rXFx0LyogQ0lSK1BJUiBzdXBwb3J0IGlzIHJlcXVpcmVkIGFuZCBjaGVja2VkIGF0IG1xcHJpbyBzZXR1cC4gKi9cXG4rXFx0cmVxLVxcdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcXG4rXFx0aWYgKG1pbnJhdGUpIHtcXG4rXFx0XFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1pbnJhdGUpO1xcbitcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmVxLVxcdTAwM2VyZWd2YWxbbl0gPSAwO1xcbitcXHR9XFxuK1xcdG4rKztcXG4rXFx0cmVxLVxcdTAwM2VudW1fcmVncyA9IG47XFxuK1xcbitcXHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yX3BmYylcXG4ge1xcbiBcXHR1MTYgKCpzY2hxX2xpc3QpW01BWF9UWFNDSFFfUEVSX0ZVTkNdO1xcbkBAIC02NTEsNyArNzg3LDExIEBAIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCh1NjQpaHctXFx1MDAzZXNtcV9saW5rX3R5cGUpO1xcbiBcXHRcXHRyZXEtXFx1MDAzZW51bV9yZWdzKys7XFxuIFxcdFxcdC8qIE1EUSBjb25maWcgKi9cXG4tXFx0XFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVtwcmlvXTtcXG4rXFx0XFx0aWYgKHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxcbitcXHRcXHRcXHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdWzBdO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XFxuK1xcbiBcXHRcXHRyZXEtXFx1MDAzZXJlZ1sxXSA9IE5JWF9BRl9NRFFYX1BBUkVOVChzY2hxKTtcXG4gXFx0XFx0cmVxLVxcdTAwM2VyZWd2YWxbMV0gPSBwYXJlbnQgXFx1MDAzY1xcdTAwM2MgMTY7XFxuIFxcdFxcdHJlcS1cXHUwMDNlbnVtX3JlZ3MrKztcXG5AQCAtNzc5LDYgKzkxOSw5IEBAIGludCBvdHgyX3R4c2NoX2FsbG9jKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4gXFx0XFx0cmVxLVxcdTAwM2VzY2hxW05JWF9UWFNDSF9MVkxfVEw0XSA9IGNoYW5fY250O1xcbiBcXHR9XFxuIFxcbitcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXFxuK1xcdFxcdHJlcS1cXHUwMDNlc2NocVtOSVhfVFhTQ0hfTFZMX1NNUV0gPSBwZnZmLVxcdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcXG4rXFxuIFxcdHJjID0gb3R4Ml9zeW5jX21ib3hfbXNnKFxcdTAwMjZwZnZmLVxcdTAwM2VtYm94KTtcXG4gXFx0aWYgKHJjKVxcbiBcXHRcXHRyZXR1cm4gcmM7XFxuQEAgLTg0NCw2ICs5ODcsNyBAQCB2b2lkIG90eDJfdHhzY2hxX3N0b3Aoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbiBcXG4gXFx0LyogQ2xlYXIgdGhlIHR4c2NocSBsaXN0ICovXFxuIFxcdGZvciAobHZsID0gMDsgbHZsIFxcdTAwM2MgTklYX1RYU0NIX0xWTF9DTlQ7IGx2bCsrKSB7XFxuK1xcdFxcdHBmdmYtXFx1MDAzZWh3LnR4c2NocV9jbnRbbHZsXSA9IDA7XFxuIFxcdFxcdGZvciAoc2NocSA9IDA7IHNjaHEgXFx1MDAzYyBNQVhfVFhTQ0hRX1BFUl9GVU5DOyBzY2hxKyspXFxuIFxcdFxcdFxcdHBmdmYtXFx1MDAzZWh3LnR4c2NocV9saXN0W2x2bF1bc2NocV0gPSAwO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcXG5pbmRleCBlZWNlZTYxMmI3YjJjLi5lZGU3ZjExMTNiNzE0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcXG5AQCAtMTcsNiArMTcsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc29jL21hcnZlbGwvc2lsaWNvbnMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NvYy9tYXJ2ZWxsL29jdGVvbnR4Mi9hc20uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9tYWNzZWMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvcGt0X3NjaGVkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X2Nscy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2RldmxpbmsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RpbWU2NC5oXFx1MDAzZVxcbkBAIC00ODMsNiArNDg0LDIzIEBAIHN0cnVjdCBwZl9pcnFfZGF0YSB7XFxuIFxcdGludCBtZGV2cztcXG4gfTtcXG4gXFxuK3N0cnVjdCBtcV9vZmZsb2FkX3NuYXAge1xcbitcXHR1NjQgbWluX3JhdGVbVENfUU9QVF9NQVhfUVVFVUVdO1xcbitcXHR1NjQgbWF4X3JhdGVbVENfUU9QVF9NQVhfUVVFVUVdO1xcbitcXHRfX3U4IG51bV90YztcXG4rXFx0X191MTYgY291bnRbVENfUU9QVF9NQVhfUVVFVUVdO1xcbitcXHRfX3UxNiBvZmZzZXRbVENfUU9QVF9NQVhfUVVFVUVdO1xcbit9O1xcbitcXG4rc3RydWN0IG90eDJfbXFwcmlvIHtcXG4rXFx0dTMyXFx0ZmxhZ3M7XFxuK1xcdHU2NFxcdCptaW5fcmF0ZTtcXG4rXFx0dTY0XFx0Km1heF9yYXRlO1xcbitcXHRib29sXFx0cmF0ZV9saW1pdDtcXG4rXFx0Ym9vbFxcdHJlcGxhY2Vfc2V0dXBfZG9uZTtcXG4rXFx0Ym9vbFxcdHJlcGxhY2VfZ3JhZnRfZG9uZTtcXG4rfTtcXG4rXFxuIHN0cnVjdCBvdHgyX25pYyB7XFxuIFxcdHZvaWQgX19pb21lbVxcdFxcdCpyZWdfYmFzZTtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2VcXHQqbmV0ZGV2O1xcbkBAIC01MTUsNiArNTMzLDEwIEBAIHN0cnVjdCBvdHgyX25pYyB7XFxuIFxcdHU2NFxcdFxcdFxcdGZsYWdzO1xcbiBcXHR1NjRcXHRcXHRcXHQqY3Ffb3BfYWRkcjtcXG4gXFxuK1xcdHN0cnVjdCBvdHgyX21xcHJpb1xcdG1xcHJpbztcXG4rXFx0c3RydWN0IG1xX29mZmxvYWRfc25hcFxcdCpjdXJfbXFfc25hcDtcXG4rXFx0c3RydWN0IG1xX29mZmxvYWRfc25hcFxcdCpvbGRfbXFfc25hcDtcXG4rXFxuIFxcdHN0cnVjdCBicGZfcHJvZ1xcdFxcdCp4ZHBfcHJvZztcXG4gXFx0c3RydWN0IG90eDJfcXNldFxcdHFzZXQ7XFxuIFxcdHN0cnVjdCBvdHgyX2h3XFx0XFx0aHc7XFxuQEAgLTEyNDYsNiArMTI2OCwxMSBAQCBkbWFfYWRkcl90IG90eDJfZG1hX21hcF9za2JfZnJhZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc2VnLCBpbnQgKmxlbik7XFxuIHZvaWQgb3R4Ml9kbWFfdW5tYXBfc2tiX2ZyYWdzKHN0cnVjdCBvdHgyX25pYyAqcGZ2Ziwgc3RydWN0IHNnX2xpc3QgKnNnKTtcXG4gaW50IG90eDJfcmVhZF9mcmVlX3NxZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBxaWR4KTtcXG4raW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgdHhxLFxcbitcXHRcXHRcXHRcXHQgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTtcXG4raW50IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xcbitpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTtcXG4gdm9pZCBvdHgyX3F1ZXVlX3ZmX3dvcmsoc3RydWN0IG1ib3ggKm13LCBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbWJveF93cSxcXG4gXFx0XFx0XFx0aW50IGZpcnN0LCBpbnQgbWRldnMsIHU2NCBpbnRyKTtcXG4gaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xcbmluZGV4IGYxMTBkZmE0MjM2MDUuLjRhNzBhYmMyMzBiZWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNcXG5AQCAtNDEzLDYgKzQxMywxMiBAQCBzdGF0aWMgaW50IG90eDJfZGNibmxfaWVlZV9zZXRwZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGllZWVfcGZjICpwZmMpXFxuIFxcdHU4IG9sZF9wZmNfZW47XFxuIFxcdGludCBlcnI7XFxuIFxcbitcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgXFx1MDAyNlxcdTAwMjYgcGZjLVxcdTAwM2VwZmNfZW4pIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJQRkM6IGNhbm5vdCBlbmFibGUgd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4gXFx0b2xkX3BmY19lbiA9IHBmdmYtXFx1MDAzZXBmY19lbjtcXG4gXFx0cGZ2Zi1cXHUwMDNlcGZjX2VuID0gcGZjLVxcdTAwM2VwZmNfZW47XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcXG5pbmRleCA5YmVlMWI5MWVlYWE2Li5lYzI2MDFjNmMyNTVhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xcbkBAIC0yODcsNiArMjg3LDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKGNoYW5uZWwtXFx1MDAzZXR4X2NvdW50ICE9IHBmdmYtXFx1MDAzZWh3LnR4X3F1ZXVlcyB8fFxcbitcXHQgICAgIGNoYW5uZWwtXFx1MDAzZXJ4X2NvdW50ICE9IHBmdmYtXFx1MDAzZWh3LnJ4X3F1ZXVlcykpIHtcXG4rXFx0XFx0bmV0ZGV2X2luZm8oZGV2LFxcbitcXHRcXHRcXHQgICAgXFxcIk5vdCBwZXJtaXR0ZWQgdG8gY2hhbmdlIGNoYW5uZWwgY291bnQgd2hpbGUgTVEgcHJpbyBpcyBhY3RpdmVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKGlmX3VwKVxcbiBcXHRcXHRkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zdG9wKGRldik7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xcbmluZGV4IGM5OTVmMjkwMDg1OTAuLjc5YTgyZTQ0NTQ1NDYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcXG5AQCAtMTk4MCw2ICsxOTgwLDEyIEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJfZnJlZV9tZW07XFxuIFxcbitcXHRlcnIgPSBvdHgyX21xcHJpb191cChwZik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdG5ldGRldl9lcnIocGYtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVycyBkdXJpbmcgb3BlbjogJWQ7IGNvbnRpbnVpbmcgd2l0aG91dCBiYW5kd2lkdGggbGltaXRzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBlcnIpO1xcbitcXG4gXFx0LyogUmVnaXN0ZXIgTkFQSSBoYW5kbGVyICovXFxuIFxcdGZvciAocWlkeCA9IDA7IHFpZHggXFx1MDAzYyBwZi1cXHUwMDNlaHcuY2ludF9jbnQ7IHFpZHgrKykge1xcbiBcXHRcXHRjcV9wb2xsID0gXFx1MDAyNnFzZXQtXFx1MDAzZW5hcGlbcWlkeF07XFxuQEAgLTI4NDYsNiArMjg1MiwxMiBAQCBzdGF0aWMgaW50IG90eDJfeGRwX3NldHVwKHN0cnVjdCBvdHgyX25pYyAqcGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4gXFx0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcocGYtXFx1MDAzZW5ldGRldik7XFxuIFxcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7XFxuIFxcbitcXHRpZiAocHJvZyBcXHUwMDI2XFx1MDAyNiBwZi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJYRFA6IGNhbm5vdCBhdHRhY2ggd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKHByb2cgXFx1MDAyNlxcdTAwMjYgZGV2LVxcdTAwM2VtdHUgXFx1MDAzZSBNQVhfWERQX01UVSkge1xcbiBcXHRcXHRuZXRkZXZfd2FybihkZXYsIFxcXCJKdW1ibyBmcmFtZXMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCBYRFBcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXFxuaW5kZXggMDM5ZmQ0N2ViZjUyMi4uNDA5MDI5NmVkZmM1YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xcbkBAIC0xNiw2ICsxNiw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvdGNfYWN0L3RjX21pcnJlZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3RjX2FjdC90Y192bGFuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvaXB2Ni5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9zY2hlZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L3NjaF9nZW5lcmljLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwiY24xMGsuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIm90eDJfY29tbW9uLmhcXFwiXFxuQEAgLTMxLDYgKzMzLDEwIEBAXFxuIFxcbiAjZGVmaW5lIE1DQVNUX0lOVkFMSURfR1JQXFx0XFx0KC0xVSlcXG4gI2RlZmluZSBSQVRFX01BTlRJU1NBX0JJVFNcXHRcXHQ4XFxuKy8qIE1pbiBwZXItcXVldWUgZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgyIE1icHMpLiAqL1xcbisjZGVmaW5lIE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTXFx0MjUwMDAwVUxMXFxuKy8qIE1heCBlZ3Jlc3Mgc2hhcGluZyByYXRlIHRoZSBOSVggVExYIGVuY29kZXIgc3VwcG9ydHMgKDEzMDgxNiBNYnBzKS4gKi9cXG4rI2RlZmluZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QU1xcdCgoTUFYX0JVUlNUX1NJWkUgKiAxMDAwMDAwVUxMKSAvIDhVTEwpXFxuIFxcbiBzdGF0aWMgdm9pZCBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MzIgYnVyc3QsXFxuIFxcdFxcdFxcdFxcdCAgICAgIHUzMiAqYnVyc3RfZXhwLCB1MzIgKmJ1cnN0X21hbnRpc3NhKVxcbkBAIC02MSw2ICs2Nyw5IEBAIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcXG4gXFx0XFx0XFx0KmJ1cnN0X21hbnRpc3NhID0gdG1wIC8gKDFVTEwgXFx1MDAzY1xcdTAwM2MgKCpidXJzdF9leHAgLSA3KSk7XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogYnVyc3QgMDogbGFyZ2VzdCBlbmNvZGFibGUgYnVyc3QgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uXFxuK1xcdFxcdCAqIENOMTBLKSwgbm90IGEgbWluaW1hbCBidXJzdC5cXG4rXFx0XFx0ICovXFxuIFxcdFxcdCpidXJzdF9leHAgPSBNQVhfQlVSU1RfRVhQT05FTlQ7XFxuIFxcdFxcdCpidXJzdF9tYW50aXNzYSA9IG1heF9tYW50aXNzYTtcXG4gXFx0fVxcbkBAIC0xNjAwLDE0ICsxNjA5LDcwOSBAQCBzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfYmxvY2soc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0XFx0XFx0XFx0ICBuaWMsIG5pYywgaW5ncmVzcyk7XFxuIH1cXG4gXFxuKy8qIEZyZWUgdGhlIHBlci1xdWV1ZSBtaW4vbWF4IHJhdGUgY2FjaGVzLiAqL1xcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19mcmVlX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRkZXZtX2tmcmVlKHBmdmYtXFx1MDAzZWRldiwgcGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlKTtcXG4rXFx0ZGV2bV9rZnJlZShwZnZmLVxcdTAwM2VkZXYsIHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSk7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IE5VTEw7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSA9IE5VTEw7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5mbGFncyA9IDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmLCBib29sIHJlcGxhY2luZylcXG4re1xcbitcXHR1MTYgbnVtX3R4cSA9IHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xcbitcXG4rXFx0aWYgKHJlcGxhY2luZyBcXHUwMDI2XFx1MDAyNiBwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUgXFx1MDAyNlxcdTAwMjYgcGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlKSB7XFxuK1xcdFxcdG1lbXNldChwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUsIDAsXFxuK1xcdFxcdCAgICAgICBudW1fdHhxICogc2l6ZW9mKCpwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUpKTtcXG4rXFx0XFx0bWVtc2V0KHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSwgMCxcXG4rXFx0XFx0ICAgICAgIG51bV90eHEgKiBzaXplb2YoKnBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSkpO1xcbitcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW8uZmxhZ3MgPSAwO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcXG4rXFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVxcdTAwM2VkZXYsIG51bV90eHEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKCpwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIEdGUF9LRVJORUwpO1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8ubWF4X3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi1cXHUwMDNlZGV2LCBudW1fdHhxLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZigqcGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSkge1xcbitcXHRcXHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfZnJlZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IG1xX29mZmxvYWRfc25hcCAqKnNuYXApXFxuK3tcXG4rXFx0aWYgKCEqc25hcClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZGV2bV9rZnJlZShwZnZmLVxcdTAwM2VkZXYsICpzbmFwKTtcXG4rXFx0KnNuYXAgPSBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3NuYXBfY29weShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICoqZHN0LFxcbitcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcXHUwMDI2bXFwcmlvLVxcdTAwM2Vxb3B0O1xcbitcXHRzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICpzbmFwO1xcbitcXHRpbnQgdGM7XFxuK1xcbitcXHRpZiAoISpkc3QpIHtcXG4rXFx0XFx0c25hcCA9IGRldm1fa3phbGxvYyhwZnZmLVxcdTAwM2VkZXYsIHNpemVvZigqc25hcCksIEdGUF9LRVJORUwpO1xcbitcXHRcXHRpZiAoIXNuYXApXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHQqZHN0ID0gc25hcDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0c25hcCA9ICpkc3Q7XFxuK1xcdH1cXG4rXFxuK1xcdHNuYXAtXFx1MDAzZW51bV90YyA9IHFvcHQtXFx1MDAzZW51bV90YztcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgVENfUU9QVF9NQVhfUVVFVUU7IHRjKyspIHtcXG4rXFx0XFx0c25hcC1cXHUwMDNlY291bnRbdGNdID0gcW9wdC1cXHUwMDNlY291bnRbdGNdO1xcbitcXHRcXHRzbmFwLVxcdTAwM2VvZmZzZXRbdGNdID0gcW9wdC1cXHUwMDNlb2Zmc2V0W3RjXTtcXG4rXFx0XFx0c25hcC1cXHUwMDNlbWluX3JhdGVbdGNdID0gMDtcXG4rXFx0XFx0c25hcC1cXHUwMDNlbWF4X3JhdGVbdGNdID0gMDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgcW9wdC1cXHUwMDNlbnVtX3RjOyB0YysrKSB7XFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXFxuK1xcdFxcdFxcdHNuYXAtXFx1MDAzZW1pbl9yYXRlW3RjXSA9IG1xcHJpby1cXHUwMDNlbWluX3JhdGVbdGNdO1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxcbitcXHRcXHRcXHRzbmFwLVxcdTAwM2VtYXhfcmF0ZVt0Y10gPSBtcXByaW8tXFx1MDAzZW1heF9yYXRlW3RjXTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fc3RhZ2VfY3VyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4rXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXFxuK3tcXG4rXFx0cmV0dXJuIG90eDJfbXFwcmlvX3NuYXBfY29weShwZnZmLCBcXHUwMDI2cGZ2Zi1cXHUwMDNlY3VyX21xX3NuYXAsIG1xcHJpbyk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfY29tbWl0KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXFx1MDAyNnBmdmYtXFx1MDAzZW9sZF9tcV9zbmFwKTtcXG4rXFx0cGZ2Zi1cXHUwMDNlb2xkX21xX3NuYXAgPSBwZnZmLVxcdTAwM2VjdXJfbXFfc25hcDtcXG4rXFx0cGZ2Zi1cXHUwMDNlY3VyX21xX3NuYXAgPSBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lID0gZmFsc2U7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgb3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0cmV0dXJuIHBmdmYtXFx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9NRFFdICE9IDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdG9yZV9vbGQoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKnNuYXAgPSBwZnZmLVxcdTAwM2VvbGRfbXFfc25hcDtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXFx1MDAzZW5ldGRldjtcXG4rXFx0dTE2IG51bV90eHEgPSBwZnZmLVxcdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcXG4rXFx0aW50IHRjLCB0eHEsIGVycjtcXG4rXFxuK1xcdGlmICghc25hcClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRlcnIgPSBvdHgyX21xcHJpb19hbGxvY19jYWNoZShwZnZmLCBmYWxzZSk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRtZW1zZXQocGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlLCAwLCBudW1fdHhxICogc2l6ZW9mKCpwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUpKTtcXG4rXFx0bWVtc2V0KHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSwgMCwgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlKSk7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5mbGFncyA9IDA7XFxuK1xcbitcXHRmb3IgKHRjID0gMDsgdGMgXFx1MDAzYyBzbmFwLVxcdTAwM2VudW1fdGM7IHRjKyspIHtcXG4rXFx0XFx0dTY0IG1pbl9yYXRlID0gc25hcC1cXHUwMDNlbWluX3JhdGVbdGNdO1xcbitcXHRcXHR1NjQgbWF4X3JhdGUgPSBzbmFwLVxcdTAwM2VtYXhfcmF0ZVt0Y107XFxuK1xcbitcXHRcXHRpZiAobWluX3JhdGUpXFxuK1xcdFxcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5mbGFncyB8PSBUQ19NUVBSSU9fRl9NSU5fUkFURTtcXG4rXFx0XFx0aWYgKG1heF9yYXRlKVxcbitcXHRcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW8uZmxhZ3MgfD0gVENfTVFQUklPX0ZfTUFYX1JBVEU7XFxuK1xcbitcXHRcXHRmb3IgKHR4cSA9IHNuYXAtXFx1MDAzZW9mZnNldFt0Y107XFxuK1xcdFxcdCAgICAgdHhxIFxcdTAwM2Mgc25hcC1cXHUwMDNlb2Zmc2V0W3RjXSArIHNuYXAtXFx1MDAzZWNvdW50W3RjXTsgdHhxKyspIHtcXG4rXFx0XFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcXG4rXFx0XFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlW3R4cV0gPSBtYXhfcmF0ZTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHNuYXAtXFx1MDAzZW51bV90Yyk7XFxuK1xcdGZvciAodGMgPSAwOyB0YyBcXHUwMDNjIHNuYXAtXFx1MDAzZW51bV90YzsgdGMrKylcXG4rXFx0XFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIHRjLCBzbmFwLVxcdTAwM2Vjb3VudFt0Y10sXFxuK1xcdFxcdFxcdFxcdCAgICBzbmFwLVxcdTAwM2VvZmZzZXRbdGNdKTtcXG4rXFxuK1xcdGlmIChvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKSB7XFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0Lyogb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoKSBjbGVhcnMgcmF0ZV9saW1pdCB3aGVuIG5kb19vcGVuKCkgZmFpbHMuICovXFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gdHJ1ZTtcXG4rXFxuK1xcdGVyciA9IG90eDJfbXFwcmlvX3VwKHBmdmYpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0b3R4Ml9tcXByaW9fc25hcF9mcmVlKHBmdmYsIFxcdTAwMjZwZnZmLVxcdTAwM2VjdXJfbXFfc25hcCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fc25hcF9kZXN0cm95KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXFx1MDAyNnBmdmYtXFx1MDAzZWN1cl9tcV9zbmFwKTtcXG4rXFx0b3R4Ml9tcXByaW9fc25hcF9mcmVlKHBmdmYsIFxcdTAwMjZwZnZmLVxcdTAwM2VvbGRfbXFfc25hcCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2NsZWFyX3N3KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cXHUwMDNlbmV0ZGV2O1xcbitcXG4rXFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgPSBmYWxzZTtcXG4rXFx0b3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShwZnZmKTtcXG4rXFx0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCAwKTtcXG4rXFx0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcXG4rfVxcbitcXG4rLyogVGVhciBkb3duIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZDogY2xlYXIgcGVyLXF1ZXVlIHNoYXBlcnMsXFxuKyAqIG1xcHJpb19yYXRlX2xpbWl0LCBuZXRkZXYgVEMgbWFwcGluZ3MsIGFuZCB0aGUgY2FjaGVkIHJhdGVzLiAgQ2FsbGVkIG9uXFxuKyAqIGV4cGxpY2l0IG1xcHJpbyB0ZWFyZG93biAodGMgcWRpc2MgZGVsKSBhbmQgZXJyb3IgY2xlYW51cCwgbm90IG9uXFxuKyAqIHJvdXRpbmUgbmV0ZGV2IHN0b3Avb3BlbiBjeWNsZXMgd2hlcmUgdGhlIG9mZmxvYWQgc3RheXMgYWN0aXZlLlxcbisgKi9cXG4raW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0aWYgKCFwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAobmV0aWZfcnVubmluZyhwZnZmLVxcdTAwM2VuZXRkZXYpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKVxcbitcXHRcXHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XFxuK1xcbitcXHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcXG4rXFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihwZnZmLVxcdTAwM2VuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJtcXByaW86IGZhaWxlZCB0byBjbGVhciBoYXJkd2FyZSBzaGFwZXJzOiAlZDsgc29tZSBUWCBxdWV1ZXMgbWF5IHJldGFpbiBiYW5kd2lkdGggbGltaXRzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBlcnIpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVxcdTAwM2VuZXRkZXY7XFxuK1xcdGludCB0eHEsIGVycjtcXG4rXFxuK1xcdGlmICghcGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKCFwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRmb3IgKHR4cSA9IDA7IHR4cSBcXHUwMDNjIHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzOyB0eHErKykge1xcbitcXHRcXHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XFxuK1xcbitcXHRcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvLmZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXFxuK1xcdFxcdFxcdG1pbl9yYXRlID0gcGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV07XFxuK1xcdFxcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8uZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcXG4rXFx0XFx0XFx0bWF4X3JhdGUgPSBwZnZmLVxcdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXTtcXG4rXFxuK1xcdFxcdGlmICghbWluX3JhdGUgXFx1MDAyNlxcdTAwMjYgIW1heF9yYXRlKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLCBtaW5fcmF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgbWF4X3JhdGUpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBmYWlsZWQgdG8gcmVzdG9yZSBzaGFwZXIgZm9yIHR4cSAlZDogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIHR4cSwgZXJyKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogUmVzdGFydCB0aGUgbmV0ZGV2IHRvIHJlcHJvZ3JhbSB0aGUgVFggc2NoZWR1bGVyIGhpZXJhcmNoeSBmb3IgbXFwcmlvXFxuKyAqIGJhbmR3aWR0aCBvZmZsb2FkLiAgQm90aCBtcXByaW8gYWRkIGFuZCBkZWxldGUgKHdoZW4gb2ZmbG9hZCB3YXMgYWN0aXZlKVxcbisgKiB0YWtlIHRoaXMgcGF0aCB2aWEgbmRvX3N0b3AoKS9uZG9fb3BlbigpIHNvIFZGLXNwZWNpZmljIG9wZW4gbG9naWMgKGUuZy5cXG4rICogTEJLIGNhcnJpZXIgb24pIHJ1bnMgY29ycmVjdGx5LiAgVGhlIGZ1bGwgc3RvcC9vcGVuIGN5Y2xlIGNsZWFyc1xcbisgKiBjYXJyaWVyLCBzdG9wcyBhbGwgVFggcXVldWVzLCB0ZWFycyBkb3duIElSUXMvTkFQSSBhbmQgZHJvcHMgaW4tZmxpZ2h0XFxuKyAqIHRyYWZmaWMuICBJZiBvcGVuIGZhaWxzLCB0aGUgaW50ZXJmYWNlIGlzIGxlZnQgYWRtaW5pc3RyYXRpdmVseSBkb3duXFxuKyAqIHdpdGhvdXQgY2FsbGluZyBuZG9fc3RvcCgpIGFnYWluIG9uIHJlc291cmNlcyBhbHJlYWR5IHRvcm4gZG93biBieVxcbisgKiB0aGUgb3BlbiBlcnJvciBwYXRoLlxcbisgKlxcbisgKiBEbyBub3QgY2FsbCBkZXZfZGVhY3RpdmF0ZSgpL2Rldl9hY3RpdmF0ZSgpIGhlcmU6IHRoaXMgcnVucyBmcm9tXFxuKyAqIG5kb19zZXR1cF90YygpIHdoaWxlIHFkaXNjX2dyYWZ0KCkgbWF5IGFscmVhZHkgaG9sZCB0aGUgZGV2aWNlXFxuKyAqIGRlYWN0aXZhdGVkIGFuZCBtdXN0IHBlcmZvcm0gdGhlIGZpbmFsIGRldl9hY3RpdmF0ZSgpLlxcbisgKi9cXG4rc3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJhdGVfbGltaXQpXFxuK3tcXG4rXFx0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBuZXRkZXYtXFx1MDAzZW5ldGRldl9vcHM7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHQvKiBUT0RPOiBFeHBsb3JlIGxpdmUgVFggc2NoZWR1bGVyIHJlcHJvZ3JhbW1pbmcgdG8gYXZvaWQgYSBmdWxsXFxuK1xcdCAqIG5kb19zdG9wKCkvbmRvX29wZW4oKSBib3VuY2Ugb24gZXZlcnkgbXFwcmlvIGNoYW5nZS5cXG4rXFx0ICovXFxuK1xcdG5ldGRldl9pbmZvKG5ldGRldixcXG4rXFx0XFx0ICAgIFxcXCJtcXByaW86IHJlc3RhcnRpbmcgaW50ZXJmYWNlIHRvIHJlcHJvZ3JhbSBUWCBzY2hlZHVsZXI7IGluLWZsaWdodCB0cmFmZmljIHdpbGwgYmUgZHJvcHBlZFxcXFxuXFxcIik7XFxuK1xcbitcXHRlcnIgPSBvcHMtXFx1MDAzZW5kb19zdG9wKG5ldGRldik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHQvKiBTZXQgYmVmb3JlIG5kb19vcGVuKCkgc28gb3R4Ml90eHNjaF9hbGxvYygpIHdpZGVucyBTTVEgYWxsb2NhdGlvbi5cXG4rXFx0ICogT24gdGVhcmRvd24sIGRyb3AgbXFwcmlvIHNvZnR3YXJlIHN0YXRlIHNvIG5kb19vcGVuKCkgZG9lcyBub3RcXG4rXFx0ICogcmUtYXBwbHkgYmFuZHdpZHRoIGxpbWl0cyB2aWEgb3R4Ml9tcXByaW9fdXAoKSBhZnRlciB0aGUga2VybmVsXFxuK1xcdCAqIHJlbW92ZWQgdGhlIHFkaXNjLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJhdGVfbGltaXQpXFxuK1xcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gdHJ1ZTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcXG4rXFxuK1xcdGVyciA9IG9wcy1cXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIkZhaWxlZCB0byByZXN0YXJ0IGRldmljZSBhZnRlciBtcXByaW8gY2hhbmdlOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgZXJyKTtcXG4rXFx0XFx0LyogbmRvX29wZW4oKSBhbHJlYWR5IGZyZWVkIHRoZSBUWCBzY2hlZHVsZXJzIG9uIGZhaWx1cmUgd2hpbGVcXG4rXFx0XFx0ICogbmV0aWZfcnVubmluZygpIG1heSBzdGlsbCBiZSB0cnVlOyBkcm9wIG1xcHJpbyBzb2Z0d2FyZSBzdGF0ZVxcbitcXHRcXHQgKiBvbmx5IGluc3RlYWQgb2Ygc2VuZGluZyBzaGFwZXIgY2xlYXJzIHRvIGZyZWVkIHF1ZXVlcy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xcbitcXHRcXHQvKiBuZG9fb3BlbigpIHJvbGxzIGJhY2sgb24gZmFpbHVyZTsgbWFyayB0aGUgaW50ZXJmYWNlIGRvd24gc29cXG4rXFx0XFx0ICogbmV0aWZfY2xvc2UoKSBkb2VzIG5vdCBpbnZva2UgbmRvX3N0b3AoKSBvbiBmcmVlZCBOQVBJL3F1ZXVlXFxuK1xcdFxcdCAqIHN0YXRlLiBDYWxsZXIgaG9sZHMgUlROTDsgZGV2X2Nsb3NlKCkgd291bGQgZGVhZGxvY2suXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRwZnZmLVxcdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfSU5URl9ET1dOO1xcbitcXHRcXHQvKiB2aXNpYmxlIHRvIG90eDJfc3RvcCgpIG9uIG90aGVyIGNwdXMgKi9cXG4rXFx0XFx0c21wX3dtYigpO1xcbitcXHRcXHRuZXRpZl9jbG9zZShuZXRkZXYpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHR1NjQgcmF0ZSwgdTMyIHFjb3VudCwgaW50IHRjLFxcbitcXHRcXHRcXHRcXHRcXHRjb25zdCBjaGFyICpuYW1lKVxcbit7XFxuK1xcdGlmICghcmF0ZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAocWNvdW50IFxcdTAwM2M9IDEpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LyogVE9ETzogbXFwcmlvIG1pbl9yYXRlL21heF9yYXRlIGFyZSBwZXIgdHJhZmZpYyBjbGFzcywgYnV0IGJhbmR3aWR0aFxcbitcXHQgKiBvZmZsb2FkIHNoYXBlcyBvbiBwZXItcXVldWUgTURRIG5vZGVzIHBhcmVudGVkIHVuZGVyIGEgc2luZ2xlIFRMNC5cXG4rXFx0ICogV2l0aG91dCBwZXItVEMgVEw0IHNoYXBlcnMgdGhlIGRyaXZlciBjYW5ub3QgaG9ub3IgVEMtbGV2ZWwgbGltaXRzXFxuK1xcdCAqIGZvciBhIHRyYWZmaWMgY2xhc3MgdGhhdCBzcGFucyBtdWx0aXBsZSBxdWV1ZXMgd2l0aG91dCBlaXRoZXJcXG4rXFx0ICogZGl2aWRpbmcgdGhlIHJhdGUgYWNyb3NzIHF1ZXVlcyAodUFQSSBtaXNtYXRjaCkgb3IgZXhjZWVkaW5nIHRoZSBUQ1xcbitcXHQgKiBjYXAgd2hlbiBldmVyeSBtZW1iZXIgcXVldWUgaXMgYWN0aXZlLiBSZWplY3QgdW50aWwgcGVyLVRDIFRMNFxcbitcXHQgKiBzaGFwaW5nIGNhbiBiZSBpbXBsZW1lbnRlZCB3aXRob3V0IGFsbG9jYXRpbmcgYWRkaXRpb25hbCBUTDQgbm9kZXNcXG4rXFx0ICogYmV5b25kIHRoZSBleGlzdGluZyBoaWVyYXJjaHkuXFxuK1xcdCAqL1xcbitcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0ICAgXFxcIm1xcHJpbzogJXMgcmF0ZSBmb3IgdGMgJWQgbm90IHN1cHBvcnRlZCB3aXRoICV1IHF1ZXVlc1xcXFxuXFxcIixcXG4rXFx0XFx0ICAgbmFtZSwgdGMsIHFjb3VudCk7XFxuK1xcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHQgICAgICAgXFxcIm1xcHJpbzogJXMgcmF0ZSBmb3IgdGMgJWQgbm90IHN1cHBvcnRlZCB3aXRoICV1IHF1ZXVlc1xcXCIsXFxuK1xcdFxcdFxcdCAgICAgICBuYW1lLCB0YywgcWNvdW50KTtcXG4rXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0KVxcbit7XFxuK1xcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdHUxNiBudW1fdHhxID0gcGZ2Zi1cXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XFxuK1xcdGludCB0YywgdHhxO1xcbitcXG4rXFx0aWYgKHFvcHQtXFx1MDAzZW51bV90YyBcXHUwMDNlIG51bV90eHEpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIHFvcHQtXFx1MDAzZW51bV90YywgbnVtX3R4cSk7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIk51bWJlciBvZiBUQ3MgKCV1KSBleGNlZWRzIGh3IHF1ZXVlcyAldVxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBxb3B0LVxcdTAwM2VudW1fdGMsIG51bV90eHEpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG51bV90eHEgXFx1MDAzZSBNQVhfVFhTQ0hRX1BFUl9GVU5DKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHQgICBcXFwiTnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcXCJOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldVxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBudW1fdHhxLCBNQVhfVFhTQ0hRX1BFUl9GVU5DKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAodGMgPSAwOyB0YyBcXHUwMDNjIHFvcHQtXFx1MDAzZW51bV90YzsgdGMrKykge1xcbitcXHRcXHR1MzIgcWNvdW50ID0gcW9wdC1cXHUwMDNlY291bnRbdGNdO1xcbitcXG4rXFx0XFx0Zm9yICh0eHEgPSBxb3B0LVxcdTAwM2VvZmZzZXRbdGNdO1xcbitcXHRcXHQgICAgIHR4cSBcXHUwMDNjIHFvcHQtXFx1MDAzZW9mZnNldFt0Y10gKyBxY291bnQ7IHR4cSsrKSB7XFxuK1xcdFxcdFxcdGlmICh0eHEgXFx1MDAzZT0gbnVtX3R4cSkge1xcbitcXHRcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogdHhxICVkIGV4Y2VlZHMgb2ZmbG9hZCBxdWV1ZSBjb3VudCAldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgdHhxLCBudW1fdHhxKTtcXG4rXFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwibXFwcmlvOiB0eHEgJWQgZXhjZWVkcyBvZmZsb2FkIHF1ZXVlIGNvdW50ICV1XFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHR4cSwgbnVtX3R4cSk7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIG90eDJfbXFwcmlvX3JhdGVfdmFsaWQodTY0IHJhdGVfYnl0ZXNfcHMpXFxuK3tcXG4rXFx0dTY0IG1icHM7XFxuK1xcbitcXHRpZiAoIXJhdGVfYnl0ZXNfcHMpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0aWYgKHJhdGVfYnl0ZXNfcHMgXFx1MDAzYyBPVFgyX01RUFJJT19NSU5fUkFURV9CWVRFU19QUylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKHJhdGVfYnl0ZXNfcHMgXFx1MDAzZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QUylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKHJhdGVfYnl0ZXNfcHMgXFx1MDAzZSBkaXZfdTY0KFU2NF9NQVgsIDgpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRtYnBzID0gb3R4Ml9jb252ZXJ0X3JhdGUocmF0ZV9ieXRlc19wcyk7XFxuK1xcdHJldHVybiBpbG9nMihtYnBzIC8gMikgXFx1MDAzYz0gTUFYX1JBVEVfRVhQT05FTlQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml90ZWFyZG93bl90Y19tcXByaW8oc3RydWN0IG90eDJfbmljICpwZnZmLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxcbit7XFxuK1xcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFxcdTAwMjZtcXByaW8tXFx1MDAzZXFvcHQ7XFxuK1xcdGJvb2wgaGFkX21xcHJpbyA9IHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0O1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cXHUwMDNlbmV0ZGV2O1xcbitcXHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0cW9wdC1cXHUwMDNlaHcgPSAwO1xcbitcXG4rXFx0LyogdGMgcWRpc2MgcmVwbGFjZSBydW5zIHNldHVwIG9uIHRoZSBuZXcgbXFwcmlvIGJlZm9yZSBkZXN0cm95aW5nIHRoZVxcbitcXHQgKiBvbGQgb25lLiByZXBsYWNlX3NldHVwX2RvbmUgYW5kIFRDX1JPT1RfR1JBRlQgZGlzdGluZ3Vpc2ggc3RhbGVcXG4rXFx0ICogb2xkLWluc3RhbmNlIHRlYXJkb3duIGZyb20gZ3JhZnQgZmFpbHVyZSBhZnRlciBzZXR1cC5cXG4rXFx0ICovXFxuK1xcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lIFxcdTAwMjZcXHUwMDI2IHBmdmYtXFx1MDAzZWN1cl9tcV9zbmFwKSB7XFxuK1xcdFxcdGVyciA9IDA7XFxuK1xcdFxcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lKVxcbitcXHRcXHRcXHRvdHgyX21xcHJpb19zbmFwX2NvbW1pdChwZnZmKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRlcnIgPSBvdHgyX21xcHJpb19yZXN0b3JlX29sZChwZnZmKTtcXG4rXFx0XFx0b3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShwZnZmKTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0LyogU2tpcCB0aGUgbmV0ZGV2IHJlc3RhcnQgd2hlbiBtcXByaW8gb2ZmbG9hZCB3YXMgbm90IGFjdGl2ZS4gKi9cXG4rXFx0aWYgKCFoYWRfbXFwcmlvKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChpZl91cCkge1xcbitcXHRcXHRpbnQgZG93bl9lcnIsIGVycjtcXG4rXFxuK1xcdFxcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcXG4rXFx0XFx0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYobmV0ZGV2LCBmYWxzZSk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdHJldHVybiBkb3duX2VycjtcXG4rXFx0fVxcbitcXG4rXFx0LyogbmRvX3N0b3AoKSBhbHJlYWR5IGZyZWVkIHRoZSBUWCBzY2hlZHVsZXIgVEwgbm9kZXM7IGRyb3Agc29mdHdhcmVcXG4rXFx0ICogc3RhdGUgb25seS5cXG4rXFx0ICovXFxuK1xcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHgyX3NldHVwX3RjX21xcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IG1xcHJpby1cXHUwMDNlZXh0YWNrO1xcbitcXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcXHUwMDI2bXFwcmlvLVxcdTAwM2Vxb3B0O1xcbitcXHRib29sIHJlcGxhY2luZyA9IHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0O1xcbitcXHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xcbitcXHRpbnQgdGMsIHR4cSwgZXJyLCBpO1xcbitcXG4rXFx0aWYgKCFxb3B0LVxcdTAwM2VodylcXG4rXFx0XFx0cmV0dXJuIG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XFxuK1xcbitcXHRpZiAoIWlmX3VwKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwibXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcXFxcblxcXCIpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwibXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAobXFwcmlvLVxcdTAwM2VzaGFwZXIgIT0gVENfTVFQUklPX1NIQVBFUl9CV19SQVRFKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwiVW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcXFxcblxcXCIsIG1xcHJpby1cXHUwMDNlc2hhcGVyKTtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssIFxcXCJVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBtcXByaW8tXFx1MDAzZXNoYXBlcik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCBcXHUwMDI2cGZ2Zi1cXHUwMDNlaHcuY2FwX2ZsYWcpKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCByZXF1aXJlcyBDSVIrUElSIHN1cHBvcnRcXFxcblxcXCIpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCByZXF1aXJlcyBDSVIrUElSIHN1cHBvcnRcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoaXNfb3R4Ml9zZHBfcmVwKHBmdmYtXFx1MDAzZXBkZXYpKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCBub3Qgc3VwcG9ydGVkIG9uIFNEUCByZXBcXFxcblxcXCIpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCBub3Qgc3VwcG9ydGVkIG9uIFNEUCByZXBcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocGZ2Zi1cXHUwMDNlcGZjX2VuKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcXFxcblxcXCIpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocGZ2Zi1cXHUwMDNleGRwX3Byb2cpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlXFxcXG5cXFwiKTtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmVcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKHRjID0gMDsgdGMgXFx1MDAzYyBxb3B0LVxcdTAwM2VudW1fdGM7IHRjKyspIHtcXG4rXFx0XFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xcbitcXHRcXHR1MzIgcWNvdW50ID0gcW9wdC1cXHUwMDNlY291bnRbdGNdO1xcbitcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcXG4rXFx0XFx0XFx0bWluX3JhdGUgPSBtcXByaW8tXFx1MDAzZW1pbl9yYXRlW3RjXTtcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcXG4rXFx0XFx0XFx0bWF4X3JhdGUgPSBtcXByaW8tXFx1MDAzZW1heF9yYXRlW3RjXTtcXG4rXFxuK1xcdFxcdGlmIChtaW5fcmF0ZSBcXHUwMDI2XFx1MDAyNiBtYXhfcmF0ZSBcXHUwMDI2XFx1MDAyNiBtaW5fcmF0ZSBcXHUwMDNlIG1heF9yYXRlKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTtcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwibWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSkge1xcbitcXHRcXHRcXHRlcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtaW5fcmF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgcWNvdW50LCB0YywgXFxcIm1pblxcXCIpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKSB7XFxuK1xcdFxcdFxcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBleHRhY2ssIG1heF9yYXRlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBxY291bnQsIHRjLCBcXFwibWF4XFxcIik7XFxuK1xcdFxcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG1pbl9yYXRlKSkge1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIG1pbl9yYXRlLCB0Yyk7XFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIm1xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgbWluX3JhdGUsIHRjKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG1heF9yYXRlKSkge1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIG1heF9yYXRlLCB0Yyk7XFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIm1xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgbWF4X3JhdGUsIHRjKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdHhxcyhuZXRkZXYsIGV4dGFjaywgcW9wdCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRlcnIgPSBvdHgyX21xcHJpb19zdGFnZV9jdXIocGZ2ZiwgbXFwcmlvKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHBmdmYtXFx1MDAzZW5ldGRldiwgdHJ1ZSk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYsIHJlcGxhY2luZyk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIG90eDJfbXFwcmlvX3VwKCkgbWF5IGhhdmUgcmVzdG9yZWQgdGhlIHByZXZpb3VzIGNvbmZpZ3VyYXRpb24gZHVyaW5nXFxuK1xcdCAqIHRoZSByZXN0YXJ0IGFib3ZlLiBDbGVhciBldmVyeSBNRFEgc2hhcGVyIGJlZm9yZSBhcHBseWluZyB0aGUgbmV3XFxuK1xcdCAqIG1hcHBpbmcgc28gcXVldWVzIGRyb3BwZWQgZnJvbSB0aGUgVEMgbGF5b3V0IGRvIG5vdCBrZWVwIHN0YWxlXFxuK1xcdCAqIGxpbWl0cyBpbiBoYXJkd2FyZS5cXG4rXFx0ICovXFxuK1xcdGlmIChvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKSB7XFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHR9XFxuK1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8uZmxhZ3MgPSBtcXByaW8tXFx1MDAzZWZsYWdzO1xcbitcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgcW9wdC1cXHUwMDNlbnVtX3RjOyB0YysrKSB7XFxuK1xcdFxcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcXG4rXFx0XFx0dTMyIHFjb3VudCA9IHFvcHQtXFx1MDAzZWNvdW50W3RjXTtcXG4rXFxuK1xcdFxcdC8qIFJhdGVzIG9taXR0ZWQgZnJvbSB0YyBtcXByaW8gYXJlIHBhc3NlZCBhcyB6ZXJvIGFuZCBib3RoIE1EUVxcbitcXHRcXHQgKiBzaGFwZXIgcmVnaXN0ZXJzIGFyZSBwcm9ncmFtbWVkOyBzZWVcXG4rXFx0XFx0ICogb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcigpLiBNdWx0aS1xdWV1ZSBUQ3Mgd2l0aCByYXRlc1xcbitcXHRcXHQgKiBhcmUgcmVqZWN0ZWQgYWJvdmUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxcbitcXHRcXHRcXHRtaW5fcmF0ZSA9IG1xcHJpby1cXHUwMDNlbWluX3JhdGVbdGNdO1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxcbitcXHRcXHRcXHRtYXhfcmF0ZSA9IG1xcHJpby1cXHUwMDNlbWF4X3JhdGVbdGNdO1xcbitcXG4rXFx0XFx0Zm9yICh0eHEgPSBxb3B0LVxcdTAwM2VvZmZzZXRbdGNdO1xcbitcXHRcXHQgICAgIHR4cSBcXHUwMDNjIHFvcHQtXFx1MDAzZW9mZnNldFt0Y10gKyBxY291bnQ7IHR4cSsrKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9kYmcobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiB0YyAlZCB0eHEgJWQgbWluX3JhdGUgJWxsdSBtYXhfcmF0ZSAlbGx1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICB0YywgdHhxLCBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xcbitcXG4rXFx0XFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcXG4rXFx0XFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlW3R4cV0gPSBtYXhfcmF0ZTtcXG4rXFxuK1xcdFxcdFxcdGVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCBwZnZmLVxcdTAwM2VjdXJfbXFfc25hcC1cXHUwMDNlbnVtX3RjKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBmdmYtXFx1MDAzZWN1cl9tcV9zbmFwLVxcdTAwM2VudW1fdGM7IGkrKylcXG4rXFx0XFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIGksIHBmdmYtXFx1MDAzZWN1cl9tcV9zbmFwLVxcdTAwM2Vjb3VudFtpXSxcXG4rXFx0XFx0XFx0XFx0ICAgIHFvcHQtXFx1MDAzZW9mZnNldFtpXSk7XFxuK1xcbitcXHRxb3B0LVxcdTAwM2VodyA9IFRDX01RUFJJT19IV19PRkZMT0FEX1RDUztcXG4rXFxuK1xcdGlmIChyZXBsYWNpbmcpIHtcXG4rXFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSA9IHRydWU7XFxuK1xcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSBmYWxzZTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0b3R4Ml9tcXByaW9fc25hcF9jb21taXQocGZ2Zik7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rY2xlYW51cDpcXG4rXFx0cW9wdC1cXHUwMDNlaHcgPSAwO1xcbitcXHRpZiAocmVwbGFjaW5nKSB7XFxuK1xcdFxcdGludCByZXN0b3JlX2VyciA9IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHBmdmYpO1xcbitcXG4rXFx0XFx0b3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShwZnZmKTtcXG4rXFx0XFx0aWYgKHJlc3RvcmVfZXJyKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiByZXBsYWNlIGZhaWxlZCBhbmQgcHJpb3IgY29uZmlndXJhdGlvbiByb2xsYmFjayBmYWlsZWQ6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICByZXN0b3JlX2Vycik7XFxuK1xcdFxcdFxcdGlmIChleHRhY2spXFxuK1xcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIm1xcHJpbzogcmVwbGFjZSBmYWlsZWQgYW5kIHByaW9yIGNvbmZpZ3VyYXRpb24gcm9sbGJhY2sgZmFpbGVkOiAlZFxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICByZXN0b3JlX2Vycik7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiByZXBsYWNlIGZhaWxlZDsgcHJpb3IgY29uZmlndXJhdGlvbiByZXN0b3JlZFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGlmIChleHRhY2spXFxuK1xcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IHJlcGxhY2UgZmFpbGVkOyBwcmlvciBjb25maWd1cmF0aW9uIHJlc3RvcmVkXFxcIik7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmV0dXJuIGVyciA/IGVyciA6IC1FSU87XFxuK1xcdH1cXG4rXFx0b3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHgyX3NldHVwX3RjX3Jvb3Qoc3RydWN0IG90eDJfbmljICpwZnZmLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGNfcm9vdF9xb3B0X29mZmxvYWQgKnJvb3QpXFxuK3tcXG4rXFx0c3dpdGNoIChyb290LVxcdTAwM2Vjb21tYW5kKSB7XFxuK1xcdGNhc2UgVENfUk9PVF9HUkFGVDpcXG4rXFx0XFx0aWYgKHBmdmYtXFx1MDAzZW1xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUpXFxuK1xcdFxcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSB0cnVlO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHZvaWQgKnR5cGVfZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlID0gdHlwZV9kYXRhO1xcbitcXHRzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHM7XFxuK1xcbitcXHRpZiAoYmFzZS1cXHUwMDNldHlwZSAhPSBUQ19TRVRVUF9RRElTQ19NUVBSSU8pXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGNhcHMgPSBiYXNlLVxcdTAwM2VjYXBzO1xcbitcXHRjYXBzLVxcdTAwM2V2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIGludCBvdHgyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxcbiBcXHRcXHQgIHZvaWQgKnR5cGVfZGF0YSlcXG4ge1xcbiBcXHRzd2l0Y2ggKHR5cGUpIHtcXG4rXFx0Y2FzZSBUQ19RVUVSWV9DQVBTOlxcbitcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHR5cGVfZGF0YSk7XFxuIFxcdGNhc2UgVENfU0VUVVBfQkxPQ0s6XFxuIFxcdFxcdHJldHVybiBvdHgyX3NldHVwX3RjX2Jsb2NrKG5ldGRldiwgdHlwZV9kYXRhKTtcXG4gXFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19IVEI6XFxuIFxcdFxcdHJldHVybiBvdHgyX3NldHVwX3RjX2h0YihuZXRkZXYsIHR5cGVfZGF0YSk7XFxuK1xcdGNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOlxcbitcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19tcXByaW8obmV0ZGV2LCB0eXBlX2RhdGEpO1xcbitcXHRjYXNlIFRDX1NFVFVQX1JPT1RfUURJU0M6XFxuK1xcdFxcdHJldHVybiBvdHgyX3NldHVwX3RjX3Jvb3QobmV0ZGV2X3ByaXYobmV0ZGV2KSwgdHlwZV9kYXRhKTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXHR9XFxuQEAgLTE2MzIsNiArMjMzNiw3IEBAIEVYUE9SVF9TWU1CT0wob3R4Ml9pbml0X3RjKTtcXG4gdm9pZCBvdHgyX3NodXRkb3duX3RjKHN0cnVjdCBvdHgyX25pYyAqbmljKVxcbiB7XFxuIFxcdG90eDJfZGVzdHJveV90Y19mbG93X2xpc3QobmljKTtcXG4rXFx0b3R4Ml9tcXByaW9fc25hcF9kZXN0cm95KG5pYyk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChvdHgyX3NodXRkb3duX3RjKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xcbmluZGV4IDY5YzA5MTFlMjhlOTEuLmQ5YWYxODJlNTcyMWQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXFxuQEAgLTExOCw2ICsxMTgsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2NvbmZpZ19zY2hlZF9zaGFwaW5nKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4gXFx0LyogY29uZmlndXJlIFBJUiAqL1xcbiBcXHRtYXhyYXRlID0gKG5vZGUtXFx1MDAzZXJhdGUgXFx1MDAzZSBub2RlLVxcdTAwM2VjZWlsKSA/IG5vZGUtXFx1MDAzZXJhdGUgOiBub2RlLVxcdTAwM2VjZWlsO1xcbiBcXG4rXFx0LyogNjU1MzYgaXMgdGhlIGtlcm5lbC1zaWRlIGRlZmF1bHQgYnVyc3Qgd2hlbiBIVEIgZG9lcyBub3Qgc3VwcGx5IGFuXFxuK1xcdCAqIGV4cGxpY2l0IHZhbHVlLCBub3QgdGhlIE5JWCBoYXJkd2FyZSBtYXhpbXVtIChDTjEwS19NQVhfQlVSU1RfU0laRSkuXFxuK1xcdCAqL1xcbiBcXHRjZmctXFx1MDAzZXJlZ3ZhbFsqbnVtX3JlZ3NdID1cXG4gXFx0XFx0b3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIG1heHJhdGUsIDY1NTM2KTtcXG4gXFx0KCpudW1fcmVncykrKztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDM6Mzk6NDUuODAxNDU4OTczWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMjEzMDExMTA5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIG9ubHkgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIG5ldHdvcmsgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi8pLCBhZGRpbmcgc3VwcG9ydCBmb3IgbXFwcmlvIGhhcmR3YXJlIGJhbmR3aWR0aCBvZmZsb2FkLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDL1NvQyBkcml2ZXIgcmVxdWlyaW5nIHBoeXNpY2FsIE1hcnZlbGwgT2N0ZW9uVFgyIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGExMTM2NWU2ODFhZWUzOTRiNWVjN2QwMGY4ZGZjNTE3Y2Y2YzhmZWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDAzOjM5OjQ0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXG5pbmRleCAxNTNlYjU3YmFkMDY3Li5jOWE0MzI2ZDcyNWQ4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbkBAIC0zMzEsOCArMzMxLDEyIEBAIHN0YXRpYyBib29sIGlzX3ZhbGlkX3R4c2NocShzdHJ1Y3QgcnZ1ICpydnUsIGludCBibGthZGRyLFxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuLVx0aWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpXG4rXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYykge1xuK1x0XHRkZXZfZXJyX3JhdGVsaW1pdGVkKHJ2dS1cdTAwM2VkZXYsXG4rXHRcdFx0XHQgICAgXCJwY2lmdW5jICV4IG1hcCBwY2lmdW5jICV4IG5vdCBlcXVhbCwgbHZsPSV1IHNjaHE9JXVcXG5cIixcbitcdFx0XHRcdCAgICBwY2lmdW5jLCBtYXBfZnVuYywgbHZsLCBzY2hxKTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuIFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcbmluZGV4IDE3NTk5MjE4OGMxOGEuLmE1MTllMGE5N2EyYjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcbkBAIC02MTUsNiArNjE1LDE0MiBAQCB2b2lkIG90eDJfZ2V0X21hY19mcm9tX2FmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0wob3R4Ml9nZXRfbWFjX2Zyb21fYWYpO1xuIFxuK3N0YXRpYyBpbnRcbitvdHgyX25peF90bXFfcmVnX3dyaXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGNudCxcbitcdFx0ICAgICAgIHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddLFxuK1x0XHQgICAgICAgdTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSlcbit7XG4rXHRzdHJ1Y3QgbWJveCAqbWJveCA9IFx1MDAyNnBmdmYtXHUwMDNlbWJveDtcbitcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xuK1x0aW50IGksIGVycjtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XG4rXHRpZiAoIXJlcSkge1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRyZXEtXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XG4rXHRyZXEtXHUwMDNlbnVtX3JlZ3MgPSBjbnQ7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjbnQ7IGkrKykge1xuK1x0XHRyZXEtXHUwMDNlcmVnW2ldID0gcmVnX2FkZHJbaV07XG4rXHRcdHJlcS1cdTAwM2VyZWd2YWxbaV0gPSByZWdfdmFsW2ldO1xuK1x0fVxuK1xuK1x0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHR1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcbitcdHU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR107XG4rXHRpbnQgZXJyLCBzbXEsIGksIGNudCA9IDA7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdOyBpKyspIHtcbitcdFx0c21xID0gcGZ2Zi1cdTAwM2Vody50eHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1NNUV1baV07XG4rXG4rXHRcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbitcdFx0cmVnX3ZhbFtjbnRdID0gMDtcbitcdFx0Y250Kys7XG4rXG4rXHRcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbitcdFx0cmVnX3ZhbFtjbnRdID0gMDtcbitcdFx0Y250Kys7XG4rXG4rXHRcdGlmIChjbnQgXHUwMDNjIE1BWF9SRUdTX1BFUl9NQk9YX01TRyAtIDEpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LFxuK1x0XHRcdFx0XHQgICAgIHJlZ19hZGRyLCByZWdfdmFsKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGZhaWw7XG4rXHRcdGNudCA9IDA7XG4rXHR9XG4rXG4rXHRpZiAoY250KSB7XG4rXHRcdGVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LFxuK1x0XHRcdFx0XHQgICAgIHJlZ19hZGRyLCByZWdfdmFsKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGZhaWw7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbitmYWlsOlxuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4raW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLFxuK1x0XHRcdFx0IGludCB0eHEsIHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSlcbit7XG4rXHRzdHJ1Y3QgbWJveCAqbWJveCA9IFx1MDAyNnBmdmYtXHUwMDNlbWJveDtcbitcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xuK1x0aW50IGVyciwgc21xLCBuID0gMDtcbitcdHU2NCByZWdfYWRkclsyXTtcbitcdHU2NCByZWdfdmFsWzJdO1xuK1x0dTY0IHJhdGU7XG4rXG4rXHRpZiAoIW1heHJhdGUgXHUwMDI2XHUwMDI2ICFtaW5yYXRlKSB7XG4rXHRcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTtcbitcdFx0cmVnX2FkZHJbMF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbitcdFx0cmVnX3ZhbFswXSA9IDA7XG4rXHRcdHJlZ19hZGRyWzFdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XG4rXHRcdHJlZ192YWxbMV0gPSAwO1xuK1x0XHRyZXR1cm4gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCAyLCByZWdfYWRkciwgcmVnX3ZhbCk7XG4rXHR9XG4rXG4rXHRzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4rXHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpO1xuK1x0aWYgKCFyZXEpIHtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0cmVxLVx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xuK1xuK1x0LyogTVFQUklPIGV4cG9zZXMgb25seSBtaW4vbWF4IHJhdGUsIG5vdCBidXJzdC4gIFBhc3MgYnVyc3QgMCBzb1xuK1x0ICogb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZygpIHByb2dyYW1tZXMgdGhlIGxhcmdlc3QgYnVyc3QgdGhlIE5JWFxuK1x0ICogZW5jb2Rpbmcgc3VwcG9ydHMgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uIENOMTBLKS4gIFRoaXMgZGlmZmVyc1xuK1x0ICogZnJvbSB0aGUgNjU1MzYgYnl0ZSBkZWZhdWx0IHVzZWQgaW4gdGhlIEhUQiBwYXRoLCB3aGljaCBpcyBhXG4rXHQgKiBrZXJuZWwtc2lkZSBkZWZhdWx0IHdoZW4gbm8gZXhwbGljaXQgYnVyc3QgaXMgY29uZmlndXJlZCwgbm90IGFcbitcdCAqIGhhcmR3YXJlIGNhcC5cbitcdCAqXG4rXHQgKiBtcXByaW8gc2V0dXAgcmVzdGFydHMgdGhlIG5ldGRldiAob3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYpLFxuK1x0ICogd2hpY2ggcmVzZXRzIE1EUSBzaGFwZXJzIHRvIHplcm8uICBQcm9ncmFtIGJvdGggUElSIGFuZCBDSVIgb25cbitcdCAqIGV2ZXJ5IHVwZGF0ZSBzbyBvbWl0dGVkIHJhdGVzIGFyZSBhcHBsaWVkIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW5cbitcdCAqIHJlbHlpbmcgb24gc3RhbGUgaGFyZHdhcmUgc3RhdGUuXG4rXHQgKi9cbitcdHJlcS1cdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbitcdGlmIChtYXhyYXRlKSB7XG4rXHRcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtYXhyYXRlKTtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcbitcdH0gZWxzZSB7XG4rXHRcdHJlcS1cdTAwM2VyZWd2YWxbbl0gPSAwO1xuK1x0fVxuK1x0bisrO1xuK1xuK1x0LyogQ0lSK1BJUiBzdXBwb3J0IGlzIHJlcXVpcmVkIGFuZCBjaGVja2VkIGF0IG1xcHJpbyBzZXR1cC4gKi9cbitcdHJlcS1cdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbitcdGlmIChtaW5yYXRlKSB7XG4rXHRcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtaW5yYXRlKTtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcbitcdH0gZWxzZSB7XG4rXHRcdHJlcS1cdTAwM2VyZWd2YWxbbl0gPSAwO1xuK1x0fVxuK1x0bisrO1xuK1x0cmVxLVx1MDAzZW51bV9yZWdzID0gbjtcbitcbitcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4gaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JfcGZjKVxuIHtcbiBcdHUxNiAoKnNjaHFfbGlzdClbTUFYX1RYU0NIUV9QRVJfRlVOQ107XG5AQCAtNjUxLDcgKzc4NywxMSBAQCBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2ZvclxuIFx0XHRcdFx0XHRcdCh1NjQpaHctXHUwMDNlc21xX2xpbmtfdHlwZSk7XG4gXHRcdHJlcS1cdTAwM2VudW1fcmVncysrO1xuIFx0XHQvKiBNRFEgY29uZmlnICovXG4tXHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XG4rXHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxuK1x0XHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bMF07XG4rXHRcdGVsc2VcbitcdFx0XHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dO1xuK1xuIFx0XHRyZXEtXHUwMDNlcmVnWzFdID0gTklYX0FGX01EUVhfUEFSRU5UKHNjaHEpO1xuIFx0XHRyZXEtXHUwMDNlcmVndmFsWzFdID0gcGFyZW50IFx1MDAzY1x1MDAzYyAxNjtcbiBcdFx0cmVxLVx1MDAzZW51bV9yZWdzKys7XG5AQCAtNzc5LDYgKzkxOSw5IEBAIGludCBvdHgyX3R4c2NoX2FsbG9jKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiBcdFx0cmVxLVx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9UTDRdID0gY2hhbl9jbnQ7XG4gXHR9XG4gXG4rXHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcbitcdFx0cmVxLVx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9TTVFdID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbitcbiBcdHJjID0gb3R4Ml9zeW5jX21ib3hfbXNnKFx1MDAyNnBmdmYtXHUwMDNlbWJveCk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbkBAIC04NDQsNiArOTg3LDcgQEAgdm9pZCBvdHgyX3R4c2NocV9zdG9wKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiBcbiBcdC8qIENsZWFyIHRoZSB0eHNjaHEgbGlzdCAqL1xuIFx0Zm9yIChsdmwgPSAwOyBsdmwgXHUwMDNjIE5JWF9UWFNDSF9MVkxfQ05UOyBsdmwrKykge1xuK1x0XHRwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbbHZsXSA9IDA7XG4gXHRcdGZvciAoc2NocSA9IDA7IHNjaHEgXHUwMDNjIE1BWF9UWFNDSFFfUEVSX0ZVTkM7IHNjaHErKylcbiBcdFx0XHRwZnZmLVx1MDAzZWh3LnR4c2NocV9saXN0W2x2bF1bc2NocV0gPSAwO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcbmluZGV4IGVlY2VlNjEyYjdiMmMuLmVkZTdmMTExM2I3MTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcbkBAIC0xNyw2ICsxNyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc29jL21hcnZlbGwvc2lsaWNvbnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvYy9tYXJ2ZWxsL29jdGVvbnR4Mi9hc20uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9tYWNzZWMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvcGt0X3NjaGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RldmxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWU2NC5oXHUwMDNlXG5AQCAtNDgzLDYgKzQ4NCwyMyBAQCBzdHJ1Y3QgcGZfaXJxX2RhdGEge1xuIFx0aW50IG1kZXZzO1xuIH07XG4gXG4rc3RydWN0IG1xX29mZmxvYWRfc25hcCB7XG4rXHR1NjQgbWluX3JhdGVbVENfUU9QVF9NQVhfUVVFVUVdO1xuK1x0dTY0IG1heF9yYXRlW1RDX1FPUFRfTUFYX1FVRVVFXTtcbitcdF9fdTggbnVtX3RjO1xuK1x0X191MTYgY291bnRbVENfUU9QVF9NQVhfUVVFVUVdO1xuK1x0X191MTYgb2Zmc2V0W1RDX1FPUFRfTUFYX1FVRVVFXTtcbit9O1xuK1xuK3N0cnVjdCBvdHgyX21xcHJpbyB7XG4rXHR1MzJcdGZsYWdzO1xuK1x0dTY0XHQqbWluX3JhdGU7XG4rXHR1NjRcdCptYXhfcmF0ZTtcbitcdGJvb2xcdHJhdGVfbGltaXQ7XG4rXHRib29sXHRyZXBsYWNlX3NldHVwX2RvbmU7XG4rXHRib29sXHRyZXBsYWNlX2dyYWZ0X2RvbmU7XG4rfTtcbitcbiBzdHJ1Y3Qgb3R4Ml9uaWMge1xuIFx0dm9pZCBfX2lvbWVtXHRcdCpyZWdfYmFzZTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlXHQqbmV0ZGV2O1xuQEAgLTUxNSw2ICs1MzMsMTAgQEAgc3RydWN0IG90eDJfbmljIHtcbiBcdHU2NFx0XHRcdGZsYWdzO1xuIFx0dTY0XHRcdFx0KmNxX29wX2FkZHI7XG4gXG4rXHRzdHJ1Y3Qgb3R4Ml9tcXByaW9cdG1xcHJpbztcbitcdHN0cnVjdCBtcV9vZmZsb2FkX3NuYXBcdCpjdXJfbXFfc25hcDtcbitcdHN0cnVjdCBtcV9vZmZsb2FkX3NuYXBcdCpvbGRfbXFfc25hcDtcbitcbiBcdHN0cnVjdCBicGZfcHJvZ1x0XHQqeGRwX3Byb2c7XG4gXHRzdHJ1Y3Qgb3R4Ml9xc2V0XHRxc2V0O1xuIFx0c3RydWN0IG90eDJfaHdcdFx0aHc7XG5AQCAtMTI0Niw2ICsxMjY4LDExIEBAIGRtYV9hZGRyX3Qgb3R4Ml9kbWFfbWFwX3NrYl9mcmFnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc2VnLCBpbnQgKmxlbik7XG4gdm9pZCBvdHgyX2RtYV91bm1hcF9za2JfZnJhZ3Moc3RydWN0IG90eDJfbmljICpwZnZmLCBzdHJ1Y3Qgc2dfbGlzdCAqc2cpO1xuIGludCBvdHgyX3JlYWRfZnJlZV9zcWUoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgcWlkeCk7XG4raW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgdHhxLFxuK1x0XHRcdFx0IHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSk7XG4raW50IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuK2ludCBvdHgyX21xcHJpb19kb3duKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4raW50IG90eDJfbXFwcmlvX3VwKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4gdm9pZCBvdHgyX3F1ZXVlX3ZmX3dvcmsoc3RydWN0IG1ib3ggKm13LCBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbWJveF93cSxcbiBcdFx0XHRpbnQgZmlyc3QsIGludCBtZGV2cywgdTY0IGludHIpO1xuIGludCBvdHgyX2RlbF9tY2FtX2Zsb3dfZW50cnkoc3RydWN0IG90eDJfbmljICpuaWMsIHUxNiBlbnRyeSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuaW5kZXggZjExMGRmYTQyMzYwNS4uNGE3MGFiYzIzMGJlYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNcbkBAIC00MTMsNiArNDEzLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml9kY2JubF9pZWVlX3NldHBmYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWVlZV9wZmMgKnBmYylcbiBcdHU4IG9sZF9wZmNfZW47XG4gXHRpbnQgZXJyO1xuIFxuK1x0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgXHUwMDI2XHUwMDI2IHBmYy1cdTAwM2VwZmNfZW4pIHtcbitcdFx0bmV0ZGV2X2VycihkZXYsXG4rXHRcdFx0ICAgXCJQRkM6IGNhbm5vdCBlbmFibGUgd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcblwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuIFx0b2xkX3BmY19lbiA9IHBmdmYtXHUwMDNlcGZjX2VuO1xuIFx0cGZ2Zi1cdTAwM2VwZmNfZW4gPSBwZmMtXHUwMDNlcGZjX2VuO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xuaW5kZXggOWJlZTFiOTFlZWFhNi4uZWMyNjAxYzZjMjU1YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG5AQCAtMjg3LDYgKzI4NywxNCBAQCBzdGF0aWMgaW50IG90eDJfc2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuK1x0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgXHUwMDI2XHUwMDI2XG4rXHQgICAgKGNoYW5uZWwtXHUwMDNldHhfY291bnQgIT0gcGZ2Zi1cdTAwM2Vody50eF9xdWV1ZXMgfHxcbitcdCAgICAgY2hhbm5lbC1cdTAwM2VyeF9jb3VudCAhPSBwZnZmLVx1MDAzZWh3LnJ4X3F1ZXVlcykpIHtcbitcdFx0bmV0ZGV2X2luZm8oZGV2LFxuK1x0XHRcdCAgICBcIk5vdCBwZXJtaXR0ZWQgdG8gY2hhbmdlIGNoYW5uZWwgY291bnQgd2hpbGUgTVEgcHJpbyBpcyBhY3RpdmVcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuIFx0aWYgKGlmX3VwKVxuIFx0XHRkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc3RvcChkZXYpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG5pbmRleCBjOTk1ZjI5MDA4NTkwLi43OWE4MmU0NDU0NTQ2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xuQEAgLTE5ODAsNiArMTk4MCwxMiBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9mcmVlX21lbTtcbiBcbitcdGVyciA9IG90eDJfbXFwcmlvX3VwKHBmKTtcbitcdGlmIChlcnIpXG4rXHRcdG5ldGRldl9lcnIocGYtXHUwMDNlbmV0ZGV2LFxuK1x0XHRcdCAgIFwibXFwcmlvOiBmYWlsZWQgdG8gcmVzdG9yZSBzaGFwZXJzIGR1cmluZyBvcGVuOiAlZDsgY29udGludWluZyB3aXRob3V0IGJhbmR3aWR0aCBsaW1pdHNcXG5cIixcbitcdFx0XHQgICBlcnIpO1xuK1xuIFx0LyogUmVnaXN0ZXIgTkFQSSBoYW5kbGVyICovXG4gXHRmb3IgKHFpZHggPSAwOyBxaWR4IFx1MDAzYyBwZi1cdTAwM2Vody5jaW50X2NudDsgcWlkeCsrKSB7XG4gXHRcdGNxX3BvbGwgPSBcdTAwMjZxc2V0LVx1MDAzZW5hcGlbcWlkeF07XG5AQCAtMjg0Niw2ICsyODUyLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml94ZHBfc2V0dXAoc3RydWN0IG90eDJfbmljICpwZiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuIFx0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcocGYtXHUwMDNlbmV0ZGV2KTtcbiBcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7XG4gXG4rXHRpZiAocHJvZyBcdTAwMjZcdTAwMjYgcGYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpIHtcbitcdFx0bmV0ZGV2X2VycihkZXYsXG4rXHRcdFx0ICAgXCJYRFA6IGNhbm5vdCBhdHRhY2ggd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcblwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuIFx0aWYgKHByb2cgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VtdHUgXHUwMDNlIE1BWF9YRFBfTVRVKSB7XG4gXHRcdG5ldGRldl93YXJuKGRldiwgXCJKdW1ibyBmcmFtZXMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCBYRFBcXG5cIik7XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xuaW5kZXggMDM5ZmQ0N2ViZjUyMi4uNDA5MDI5NmVkZmM1YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcbkBAIC0xNiw2ICsxNiw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjX2FjdC90Y19taXJyZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y19hY3QvdGNfdmxhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9wa3Rfc2NoZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9zY2hfZ2VuZXJpYy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJjbjEway5oXCJcbiAjaW5jbHVkZSBcIm90eDJfY29tbW9uLmhcIlxuQEAgLTMxLDYgKzMzLDEwIEBAXG4gXG4gI2RlZmluZSBNQ0FTVF9JTlZBTElEX0dSUFx0XHQoLTFVKVxuICNkZWZpbmUgUkFURV9NQU5USVNTQV9CSVRTXHRcdDhcbisvKiBNaW4gcGVyLXF1ZXVlIGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMiBNYnBzKS4gKi9cbisjZGVmaW5lIE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTXHQyNTAwMDBVTExcbisvKiBNYXggZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgxMzA4MTYgTWJwcykuICovXG4rI2RlZmluZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QU1x0KChNQVhfQlVSU1RfU0laRSAqIDEwMDAwMDBVTEwpIC8gOFVMTClcbiBcbiBzdGF0aWMgdm9pZCBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MzIgYnVyc3QsXG4gXHRcdFx0XHQgICAgICB1MzIgKmJ1cnN0X2V4cCwgdTMyICpidXJzdF9tYW50aXNzYSlcbkBAIC02MSw2ICs2Nyw5IEBAIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcbiBcdFx0XHQqYnVyc3RfbWFudGlzc2EgPSB0bXAgLyAoMVVMTCBcdTAwM2NcdTAwM2MgKCpidXJzdF9leHAgLSA3KSk7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4rXHRcdC8qIGJ1cnN0IDA6IGxhcmdlc3QgZW5jb2RhYmxlIGJ1cnN0IChDTjEwS19NQVhfQlVSU1RfU0laRSBvblxuK1x0XHQgKiBDTjEwSyksIG5vdCBhIG1pbmltYWwgYnVyc3QuXG4rXHRcdCAqL1xuIFx0XHQqYnVyc3RfZXhwID0gTUFYX0JVUlNUX0VYUE9ORU5UO1xuIFx0XHQqYnVyc3RfbWFudGlzc2EgPSBtYXhfbWFudGlzc2E7XG4gXHR9XG5AQCAtMTYwMCwxNCArMTYwOSw3MDkgQEAgc3RhdGljIGludCBvdHgyX3NldHVwX3RjX2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdCAgbmljLCBuaWMsIGluZ3Jlc3MpO1xuIH1cbiBcbisvKiBGcmVlIHRoZSBwZXItcXVldWUgbWluL21heCByYXRlIGNhY2hlcy4gKi9cbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19mcmVlX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRkZXZtX2tmcmVlKHBmdmYtXHUwMDNlZGV2LCBwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSk7XG4rXHRkZXZtX2tmcmVlKHBmdmYtXHUwMDNlZGV2LCBwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSk7XG4rXHRwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IE5VTEw7XG4rXHRwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSA9IE5VTEw7XG4rXHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmLCBib29sIHJlcGxhY2luZylcbit7XG4rXHR1MTYgbnVtX3R4cSA9IHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XG4rXG4rXHRpZiAocmVwbGFjaW5nIFx1MDAyNlx1MDAyNiBwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSBcdTAwMjZcdTAwMjYgcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpIHtcbitcdFx0bWVtc2V0KHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlLCAwLFxuK1x0XHQgICAgICAgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUpKTtcbitcdFx0bWVtc2V0KHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlLCAwLFxuK1x0XHQgICAgICAgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpKTtcbitcdFx0cGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgPSAwO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4rXG4rXHRwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVx1MDAzZWRldiwgbnVtX3R4cSxcbitcdFx0XHRcdFx0ICAgICBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlKSxcbitcdFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMKTtcbitcdHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtXHUwMDNlZGV2LCBudW1fdHhxLFxuK1x0XHRcdFx0XHQgICAgIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpLFxuK1x0XHRcdFx0XHQgICAgIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSB8fCAhcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpIHtcbitcdFx0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fc25hcF9mcmVlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbitcdFx0XHRcdCAgc3RydWN0IG1xX29mZmxvYWRfc25hcCAqKnNuYXApXG4re1xuK1x0aWYgKCEqc25hcClcbitcdFx0cmV0dXJuO1xuK1xuK1x0ZGV2bV9rZnJlZShwZnZmLVx1MDAzZWRldiwgKnNuYXApO1xuK1x0KnNuYXAgPSBOVUxMO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3NuYXBfY29weShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4rXHRcdFx0XHQgc3RydWN0IG1xX29mZmxvYWRfc25hcCAqKmRzdCxcbitcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuK3tcbitcdGNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFx1MDAyNm1xcHJpby1cdTAwM2Vxb3B0O1xuK1x0c3RydWN0IG1xX29mZmxvYWRfc25hcCAqc25hcDtcbitcdGludCB0YztcbitcbitcdGlmICghKmRzdCkge1xuK1x0XHRzbmFwID0gZGV2bV9remFsbG9jKHBmdmYtXHUwMDNlZGV2LCBzaXplb2YoKnNuYXApLCBHRlBfS0VSTkVMKTtcbitcdFx0aWYgKCFzbmFwKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHQqZHN0ID0gc25hcDtcbitcdH0gZWxzZSB7XG4rXHRcdHNuYXAgPSAqZHN0O1xuK1x0fVxuK1xuK1x0c25hcC1cdTAwM2VudW1fdGMgPSBxb3B0LVx1MDAzZW51bV90YztcbitcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgVENfUU9QVF9NQVhfUVVFVUU7IHRjKyspIHtcbitcdFx0c25hcC1cdTAwM2Vjb3VudFt0Y10gPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbitcdFx0c25hcC1cdTAwM2VvZmZzZXRbdGNdID0gcW9wdC1cdTAwM2VvZmZzZXRbdGNdO1xuK1x0XHRzbmFwLVx1MDAzZW1pbl9yYXRlW3RjXSA9IDA7XG4rXHRcdHNuYXAtXHUwMDNlbWF4X3JhdGVbdGNdID0gMDtcbitcdH1cbitcbitcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IHRjKyspIHtcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXG4rXHRcdFx0c25hcC1cdTAwM2VtaW5fcmF0ZVt0Y10gPSBtcXByaW8tXHUwMDNlbWluX3JhdGVbdGNdO1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcbitcdFx0XHRzbmFwLVx1MDAzZW1heF9yYXRlW3RjXSA9IG1xcHJpby1cdTAwM2VtYXhfcmF0ZVt0Y107XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBvdHgyX21xcHJpb19zdGFnZV9jdXIoc3RydWN0IG90eDJfbmljICpwZnZmLFxuK1x0XHRcdFx0IGNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4re1xuK1x0cmV0dXJuIG90eDJfbXFwcmlvX3NuYXBfY29weShwZnZmLCBcdTAwMjZwZnZmLVx1MDAzZWN1cl9tcV9zbmFwLCBtcXByaW8pO1xuK31cbitcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19zbmFwX2NvbW1pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0b3R4Ml9tcXByaW9fc25hcF9mcmVlKHBmdmYsIFx1MDAyNnBmdmYtXHUwMDNlb2xkX21xX3NuYXApO1xuK1x0cGZ2Zi1cdTAwM2VvbGRfbXFfc25hcCA9IHBmdmYtXHUwMDNlY3VyX21xX3NuYXA7XG4rXHRwZnZmLVx1MDAzZWN1cl9tcV9zbmFwID0gTlVMTDtcbit9XG4rXG4rc3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lID0gZmFsc2U7XG4rXHRwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSBmYWxzZTtcbit9XG4rXG4rc3RhdGljIGJvb2wgb3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0cmV0dXJuIHBmdmYtXHUwMDNlaHcudHhzY2hxX2NudFtOSVhfVFhTQ0hfTFZMX01EUV0gIT0gMDtcbit9XG4rXG4rc3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0b3JlX29sZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0c3RydWN0IG1xX29mZmxvYWRfc25hcCAqc25hcCA9IHBmdmYtXHUwMDNlb2xkX21xX3NuYXA7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4rXHR1MTYgbnVtX3R4cSA9IHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XG4rXHRpbnQgdGMsIHR4cSwgZXJyO1xuK1xuK1x0aWYgKCFzbmFwKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYsIGZhbHNlKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRtZW1zZXQocGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUsIDAsIG51bV90eHEgKiBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlKSk7XG4rXHRtZW1zZXQocGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUsIDAsIG51bV90eHEgKiBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSk7XG4rXHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IDA7XG4rXG4rXHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHNuYXAtXHUwMDNlbnVtX3RjOyB0YysrKSB7XG4rXHRcdHU2NCBtaW5fcmF0ZSA9IHNuYXAtXHUwMDNlbWluX3JhdGVbdGNdO1xuK1x0XHR1NjQgbWF4X3JhdGUgPSBzbmFwLVx1MDAzZW1heF9yYXRlW3RjXTtcbitcbitcdFx0aWYgKG1pbl9yYXRlKVxuK1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzIHw9IFRDX01RUFJJT19GX01JTl9SQVRFO1xuK1x0XHRpZiAobWF4X3JhdGUpXG4rXHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgfD0gVENfTVFQUklPX0ZfTUFYX1JBVEU7XG4rXG4rXHRcdGZvciAodHhxID0gc25hcC1cdTAwM2VvZmZzZXRbdGNdO1xuK1x0XHQgICAgIHR4cSBcdTAwM2Mgc25hcC1cdTAwM2VvZmZzZXRbdGNdICsgc25hcC1cdTAwM2Vjb3VudFt0Y107IHR4cSsrKSB7XG4rXHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGVbdHhxXSA9IG1pbl9yYXRlO1xuK1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlW3R4cV0gPSBtYXhfcmF0ZTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCBzbmFwLVx1MDAzZW51bV90Yyk7XG4rXHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHNuYXAtXHUwMDNlbnVtX3RjOyB0YysrKVxuK1x0XHRuZXRkZXZfc2V0X3RjX3F1ZXVlKG5ldGRldiwgdGMsIHNuYXAtXHUwMDNlY291bnRbdGNdLFxuK1x0XHRcdFx0ICAgIHNuYXAtXHUwMDNlb2Zmc2V0W3RjXSk7XG4rXG4rXHRpZiAob3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChwZnZmKSkge1xuK1x0XHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdC8qIG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KCkgY2xlYXJzIHJhdGVfbGltaXQgd2hlbiBuZG9fb3BlbigpIGZhaWxzLiAqL1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCA9IHRydWU7XG4rXG4rXHRlcnIgPSBvdHgyX21xcHJpb191cChwZnZmKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXHUwMDI2cGZ2Zi1cdTAwM2VjdXJfbXFfc25hcCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fc25hcF9kZXN0cm95KHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXHUwMDI2cGZ2Zi1cdTAwM2VjdXJfbXFfc25hcCk7XG4rXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXHUwMDI2cGZ2Zi1cdTAwM2VvbGRfbXFfc25hcCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2NsZWFyX3N3KHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4rXG4rXHRwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gZmFsc2U7XG4rXHRvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHBmdmYpO1xuK1x0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCAwKTtcbitcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4rfVxuK1xuKy8qIFRlYXIgZG93biBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQ6IGNsZWFyIHBlci1xdWV1ZSBzaGFwZXJzLFxuKyAqIG1xcHJpb19yYXRlX2xpbWl0LCBuZXRkZXYgVEMgbWFwcGluZ3MsIGFuZCB0aGUgY2FjaGVkIHJhdGVzLiAgQ2FsbGVkIG9uXG4rICogZXhwbGljaXQgbXFwcmlvIHRlYXJkb3duICh0YyBxZGlzYyBkZWwpIGFuZCBlcnJvciBjbGVhbnVwLCBub3Qgb25cbisgKiByb3V0aW5lIG5ldGRldiBzdG9wL29wZW4gY3ljbGVzIHdoZXJlIHRoZSBvZmZsb2FkIHN0YXlzIGFjdGl2ZS5cbisgKi9cbitpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKG5ldGlmX3J1bm5pbmcocGZ2Zi1cdTAwM2VuZXRkZXYpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpXG4rXHRcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcbitcbitcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xuK1xuK1x0aWYgKGVycikge1xuK1x0XHRuZXRkZXZfZXJyKHBmdmYtXHUwMDNlbmV0ZGV2LFxuK1x0XHRcdCAgIFwibXFwcmlvOiBmYWlsZWQgdG8gY2xlYXIgaGFyZHdhcmUgc2hhcGVyczogJWQ7IHNvbWUgVFggcXVldWVzIG1heSByZXRhaW4gYmFuZHdpZHRoIGxpbWl0c1xcblwiLFxuK1x0XHRcdCAgIGVycik7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbitcdGludCB0eHEsIGVycjtcbitcbitcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlIHx8ICFwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRmb3IgKHR4cSA9IDA7IHR4cSBcdTAwM2MgcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlczsgdHhxKyspIHtcbitcdFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xuK1xuK1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuK1x0XHRcdG1pbl9yYXRlID0gcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGVbdHhxXTtcbitcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcbitcdFx0XHRtYXhfcmF0ZSA9IHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlW3R4cV07XG4rXG4rXHRcdGlmICghbWluX3JhdGUgXHUwMDI2XHUwMDI2ICFtYXhfcmF0ZSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsIG1pbl9yYXRlLFxuK1x0XHRcdFx0XHRcdCAgIG1heF9yYXRlKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IGZhaWxlZCB0byByZXN0b3JlIHNoYXBlciBmb3IgdHhxICVkOiAlZFxcblwiLFxuK1x0XHRcdFx0ICAgdHhxLCBlcnIpO1xuK1x0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBSZXN0YXJ0IHRoZSBuZXRkZXYgdG8gcmVwcm9ncmFtIHRoZSBUWCBzY2hlZHVsZXIgaGllcmFyY2h5IGZvciBtcXByaW9cbisgKiBiYW5kd2lkdGggb2ZmbG9hZC4gIEJvdGggbXFwcmlvIGFkZCBhbmQgZGVsZXRlICh3aGVuIG9mZmxvYWQgd2FzIGFjdGl2ZSlcbisgKiB0YWtlIHRoaXMgcGF0aCB2aWEgbmRvX3N0b3AoKS9uZG9fb3BlbigpIHNvIFZGLXNwZWNpZmljIG9wZW4gbG9naWMgKGUuZy5cbisgKiBMQksgY2FycmllciBvbikgcnVucyBjb3JyZWN0bHkuICBUaGUgZnVsbCBzdG9wL29wZW4gY3ljbGUgY2xlYXJzXG4rICogY2Fycmllciwgc3RvcHMgYWxsIFRYIHF1ZXVlcywgdGVhcnMgZG93biBJUlFzL05BUEkgYW5kIGRyb3BzIGluLWZsaWdodFxuKyAqIHRyYWZmaWMuICBJZiBvcGVuIGZhaWxzLCB0aGUgaW50ZXJmYWNlIGlzIGxlZnQgYWRtaW5pc3RyYXRpdmVseSBkb3duXG4rICogd2l0aG91dCBjYWxsaW5nIG5kb19zdG9wKCkgYWdhaW4gb24gcmVzb3VyY2VzIGFscmVhZHkgdG9ybiBkb3duIGJ5XG4rICogdGhlIG9wZW4gZXJyb3IgcGF0aC5cbisgKlxuKyAqIERvIG5vdCBjYWxsIGRldl9kZWFjdGl2YXRlKCkvZGV2X2FjdGl2YXRlKCkgaGVyZTogdGhpcyBydW5zIGZyb21cbisgKiBuZG9fc2V0dXBfdGMoKSB3aGlsZSBxZGlzY19ncmFmdCgpIG1heSBhbHJlYWR5IGhvbGQgdGhlIGRldmljZVxuKyAqIGRlYWN0aXZhdGVkIGFuZCBtdXN0IHBlcmZvcm0gdGhlIGZpbmFsIGRldl9hY3RpdmF0ZSgpLlxuKyAqL1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByYXRlX2xpbWl0KVxuK3tcbitcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzO1xuK1x0aW50IGVycjtcbitcbitcdC8qIFRPRE86IEV4cGxvcmUgbGl2ZSBUWCBzY2hlZHVsZXIgcmVwcm9ncmFtbWluZyB0byBhdm9pZCBhIGZ1bGxcbitcdCAqIG5kb19zdG9wKCkvbmRvX29wZW4oKSBib3VuY2Ugb24gZXZlcnkgbXFwcmlvIGNoYW5nZS5cbitcdCAqL1xuK1x0bmV0ZGV2X2luZm8obmV0ZGV2LFxuK1x0XHQgICAgXCJtcXByaW86IHJlc3RhcnRpbmcgaW50ZXJmYWNlIHRvIHJlcHJvZ3JhbSBUWCBzY2hlZHVsZXI7IGluLWZsaWdodCB0cmFmZmljIHdpbGwgYmUgZHJvcHBlZFxcblwiKTtcbitcbitcdGVyciA9IG9wcy1cdTAwM2VuZG9fc3RvcChuZXRkZXYpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdC8qIFNldCBiZWZvcmUgbmRvX29wZW4oKSBzbyBvdHgyX3R4c2NoX2FsbG9jKCkgd2lkZW5zIFNNUSBhbGxvY2F0aW9uLlxuK1x0ICogT24gdGVhcmRvd24sIGRyb3AgbXFwcmlvIHNvZnR3YXJlIHN0YXRlIHNvIG5kb19vcGVuKCkgZG9lcyBub3RcbitcdCAqIHJlLWFwcGx5IGJhbmR3aWR0aCBsaW1pdHMgdmlhIG90eDJfbXFwcmlvX3VwKCkgYWZ0ZXIgdGhlIGtlcm5lbFxuK1x0ICogcmVtb3ZlZCB0aGUgcWRpc2MuXG4rXHQgKi9cbitcdGlmIChyYXRlX2xpbWl0KVxuK1x0XHRwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gdHJ1ZTtcbitcdGVsc2VcbitcdFx0b3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7XG4rXG4rXHRlcnIgPSBvcHMtXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcbitcdGlmIChlcnIpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0ICAgXCJGYWlsZWQgdG8gcmVzdGFydCBkZXZpY2UgYWZ0ZXIgbXFwcmlvIGNoYW5nZTogJWRcXG5cIixcbitcdFx0XHQgICBlcnIpO1xuK1x0XHQvKiBuZG9fb3BlbigpIGFscmVhZHkgZnJlZWQgdGhlIFRYIHNjaGVkdWxlcnMgb24gZmFpbHVyZSB3aGlsZVxuK1x0XHQgKiBuZXRpZl9ydW5uaW5nKCkgbWF5IHN0aWxsIGJlIHRydWU7IGRyb3AgbXFwcmlvIHNvZnR3YXJlIHN0YXRlXG4rXHRcdCAqIG9ubHkgaW5zdGVhZCBvZiBzZW5kaW5nIHNoYXBlciBjbGVhcnMgdG8gZnJlZWQgcXVldWVzLlxuK1x0XHQgKi9cbitcdFx0b3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7XG4rXHRcdC8qIG5kb19vcGVuKCkgcm9sbHMgYmFjayBvbiBmYWlsdXJlOyBtYXJrIHRoZSBpbnRlcmZhY2UgZG93biBzb1xuK1x0XHQgKiBuZXRpZl9jbG9zZSgpIGRvZXMgbm90IGludm9rZSBuZG9fc3RvcCgpIG9uIGZyZWVkIE5BUEkvcXVldWVcbitcdFx0ICogc3RhdGUuIENhbGxlciBob2xkcyBSVE5MOyBkZXZfY2xvc2UoKSB3b3VsZCBkZWFkbG9jay5cbitcdFx0ICovXG4rXHRcdHBmdmYtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX0lOVEZfRE9XTjtcbitcdFx0LyogdmlzaWJsZSB0byBvdHgyX3N0b3AoKSBvbiBvdGhlciBjcHVzICovXG4rXHRcdHNtcF93bWIoKTtcbitcdFx0bmV0aWZfY2xvc2UobmV0ZGV2KTtcbitcdH1cbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4rXHRcdFx0XHRcdHU2NCByYXRlLCB1MzIgcWNvdW50LCBpbnQgdGMsXG4rXHRcdFx0XHRcdGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0aWYgKCFyYXRlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChxY291bnQgXHUwMDNjPSAxKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIFRPRE86IG1xcHJpbyBtaW5fcmF0ZS9tYXhfcmF0ZSBhcmUgcGVyIHRyYWZmaWMgY2xhc3MsIGJ1dCBiYW5kd2lkdGhcbitcdCAqIG9mZmxvYWQgc2hhcGVzIG9uIHBlci1xdWV1ZSBNRFEgbm9kZXMgcGFyZW50ZWQgdW5kZXIgYSBzaW5nbGUgVEw0LlxuK1x0ICogV2l0aG91dCBwZXItVEMgVEw0IHNoYXBlcnMgdGhlIGRyaXZlciBjYW5ub3QgaG9ub3IgVEMtbGV2ZWwgbGltaXRzXG4rXHQgKiBmb3IgYSB0cmFmZmljIGNsYXNzIHRoYXQgc3BhbnMgbXVsdGlwbGUgcXVldWVzIHdpdGhvdXQgZWl0aGVyXG4rXHQgKiBkaXZpZGluZyB0aGUgcmF0ZSBhY3Jvc3MgcXVldWVzICh1QVBJIG1pc21hdGNoKSBvciBleGNlZWRpbmcgdGhlIFRDXG4rXHQgKiBjYXAgd2hlbiBldmVyeSBtZW1iZXIgcXVldWUgaXMgYWN0aXZlLiBSZWplY3QgdW50aWwgcGVyLVRDIFRMNFxuK1x0ICogc2hhcGluZyBjYW4gYmUgaW1wbGVtZW50ZWQgd2l0aG91dCBhbGxvY2F0aW5nIGFkZGl0aW9uYWwgVEw0IG5vZGVzXG4rXHQgKiBiZXlvbmQgdGhlIGV4aXN0aW5nIGhpZXJhcmNoeS5cbitcdCAqL1xuK1x0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdCAgIFwibXFwcmlvOiAlcyByYXRlIGZvciB0YyAlZCBub3Qgc3VwcG9ydGVkIHdpdGggJXUgcXVldWVzXFxuXCIsXG4rXHRcdCAgIG5hbWUsIHRjLCBxY291bnQpO1xuK1x0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0ICAgICAgIFwibXFwcmlvOiAlcyByYXRlIGZvciB0YyAlZCBub3Qgc3VwcG9ydGVkIHdpdGggJXUgcXVldWVzXCIsXG4rXHRcdFx0ICAgICAgIG5hbWUsIHRjLCBxY291bnQpO1xuK1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQpXG4re1xuK1x0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHUxNiBudW1fdHhxID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbitcdGludCB0YywgdHhxO1xuK1xuK1x0aWYgKHFvcHQtXHUwMDNlbnVtX3RjIFx1MDAzZSBudW1fdHhxKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIk51bWJlciBvZiBUQ3MgKCV1KSBleGNlZWRzIGh3IHF1ZXVlcyAldVxcblwiLFxuK1x0XHRcdCAgIHFvcHQtXHUwMDNlbnVtX3RjLCBudW1fdHhxKTtcbitcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICAgICAgXCJOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcIixcbitcdFx0XHRcdCAgICAgICBxb3B0LVx1MDAzZW51bV90YywgbnVtX3R4cSk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKG51bV90eHEgXHUwMDNlIE1BWF9UWFNDSFFfUEVSX0ZVTkMpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0ICAgXCJOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldVxcblwiLFxuK1x0XHRcdCAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xuK1x0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbitcdFx0XHRcdCAgICAgICBcIk51bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1XCIsXG4rXHRcdFx0XHQgICAgICAgbnVtX3R4cSwgTUFYX1RYU0NIUV9QRVJfRlVOQyk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMrKykge1xuK1x0XHR1MzIgcWNvdW50ID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4rXG4rXHRcdGZvciAodHhxID0gcW9wdC1cdTAwM2VvZmZzZXRbdGNdO1xuK1x0XHQgICAgIHR4cSBcdTAwM2MgcW9wdC1cdTAwM2VvZmZzZXRbdGNdICsgcWNvdW50OyB0eHErKykge1xuK1x0XHRcdGlmICh0eHEgXHUwMDNlPSBudW1fdHhxKSB7XG4rXHRcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdFx0ICAgXCJtcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXVcXG5cIixcbitcdFx0XHRcdFx0ICAgdHhxLCBudW1fdHhxKTtcbitcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuK1x0XHRcdFx0XHRcdCAgICAgICBcIm1xcHJpbzogdHhxICVkIGV4Y2VlZHMgb2ZmbG9hZCBxdWV1ZSBjb3VudCAldVwiLFxuK1x0XHRcdFx0XHRcdCAgICAgICB0eHEsIG51bV90eHEpO1xuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGJvb2wgb3R4Ml9tcXByaW9fcmF0ZV92YWxpZCh1NjQgcmF0ZV9ieXRlc19wcylcbit7XG4rXHR1NjQgbWJwcztcbitcbitcdGlmICghcmF0ZV9ieXRlc19wcylcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRpZiAocmF0ZV9ieXRlc19wcyBcdTAwM2MgT1RYMl9NUVBSSU9fTUlOX1JBVEVfQllURVNfUFMpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChyYXRlX2J5dGVzX3BzIFx1MDAzZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QUylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKHJhdGVfYnl0ZXNfcHMgXHUwMDNlIGRpdl91NjQoVTY0X01BWCwgOCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdG1icHMgPSBvdHgyX2NvbnZlcnRfcmF0ZShyYXRlX2J5dGVzX3BzKTtcbitcdHJldHVybiBpbG9nMihtYnBzIC8gMikgXHUwMDNjPSBNQVhfUkFURV9FWFBPTkVOVDtcbit9XG4rXG4rc3RhdGljIGludCBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuK3tcbitcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFx1MDAyNm1xcHJpby1cdTAwM2Vxb3B0O1xuK1x0Ym9vbCBoYWRfbXFwcmlvID0gcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdDtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbitcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XG4rXHRpbnQgZXJyO1xuK1xuK1x0cW9wdC1cdTAwM2VodyA9IDA7XG4rXG4rXHQvKiB0YyBxZGlzYyByZXBsYWNlIHJ1bnMgc2V0dXAgb24gdGhlIG5ldyBtcXByaW8gYmVmb3JlIGRlc3Ryb3lpbmcgdGhlXG4rXHQgKiBvbGQgb25lLiByZXBsYWNlX3NldHVwX2RvbmUgYW5kIFRDX1JPT1RfR1JBRlQgZGlzdGluZ3Vpc2ggc3RhbGVcbitcdCAqIG9sZC1pbnN0YW5jZSB0ZWFyZG93biBmcm9tIGdyYWZ0IGZhaWx1cmUgYWZ0ZXIgc2V0dXAuXG4rXHQgKi9cbitcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgXHUwMDI2XHUwMDI2IHBmdmYtXHUwMDNlY3VyX21xX3NuYXApIHtcbitcdFx0ZXJyID0gMDtcbitcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSlcbitcdFx0XHRvdHgyX21xcHJpb19zbmFwX2NvbW1pdChwZnZmKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHBmdmYpO1xuK1x0XHRvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHBmdmYpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0LyogU2tpcCB0aGUgbmV0ZGV2IHJlc3RhcnQgd2hlbiBtcXByaW8gb2ZmbG9hZCB3YXMgbm90IGFjdGl2ZS4gKi9cbitcdGlmICghaGFkX21xcHJpbylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoaWZfdXApIHtcbitcdFx0aW50IGRvd25fZXJyLCBlcnI7XG4rXG4rXHRcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcbitcdFx0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYobmV0ZGV2LCBmYWxzZSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0cmV0dXJuIGRvd25fZXJyO1xuK1x0fVxuK1xuK1x0LyogbmRvX3N0b3AoKSBhbHJlYWR5IGZyZWVkIHRoZSBUWCBzY2hlZHVsZXIgVEwgbm9kZXM7IGRyb3Agc29mdHdhcmVcbitcdCAqIHN0YXRlIG9ubHkuXG4rXHQgKi9cbitcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4re1xuK1x0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gbXFwcmlvLVx1MDAzZWV4dGFjaztcbitcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbitcdGJvb2wgcmVwbGFjaW5nID0gcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdDtcbitcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XG4rXHRpbnQgdGMsIHR4cSwgZXJyLCBpO1xuK1xuK1x0aWYgKCFxb3B0LVx1MDAzZWh3KVxuK1x0XHRyZXR1cm4gb3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcbitcbitcdGlmICghaWZfdXApIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwibXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcXG5cIik7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwibXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmIChtcXByaW8tXHUwMDNlc2hhcGVyICE9IFRDX01RUFJJT19TSEFQRVJfQldfUkFURSkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxcblwiLCBtcXByaW8tXHUwMDNlc2hhcGVyKTtcbitcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssIFwiVW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcIixcbitcdFx0XHRcdCAgICAgICBtcXByaW8tXHUwMDNlc2hhcGVyKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCBcdTAwMjZwZnZmLVx1MDAzZWh3LmNhcF9mbGFnKSkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHQgICBcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSK1BJUiBzdXBwb3J0XFxuXCIpO1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUitQSVIgc3VwcG9ydFwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKGlzX290eDJfc2RwX3JlcChwZnZmLVx1MDAzZXBkZXYpKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwXFxuXCIpO1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKHBmdmYtXHUwMDNlcGZjX2VuKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdCAgIFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcXG5cIik7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAocGZ2Zi1cdTAwM2V4ZHBfcHJvZykge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHQgICBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmVcXG5cIik7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmVcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IHRjKyspIHtcbitcdFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xuK1x0XHR1MzIgcWNvdW50ID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4rXG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuK1x0XHRcdG1pbl9yYXRlID0gbXFwcmlvLVx1MDAzZW1pbl9yYXRlW3RjXTtcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4rXHRcdFx0bWF4X3JhdGUgPSBtcXByaW8tXHUwMDNlbWF4X3JhdGVbdGNdO1xuK1xuK1x0XHRpZiAobWluX3JhdGUgXHUwMDI2XHUwMDI2IG1heF9yYXRlIFx1MDAyNlx1MDAyNiBtaW5fcmF0ZSBcdTAwM2UgbWF4X3JhdGUpIHtcbitcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdCAgIFwibWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXFxuXCIsXG4rXHRcdFx0XHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTtcbitcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbitcdFx0XHRcdFx0ICAgICAgIFwibWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXCIsXG4rXHRcdFx0XHRcdCAgICAgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSkge1xuK1x0XHRcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBleHRhY2ssIG1pbl9yYXRlLFxuK1x0XHRcdFx0XHRcdFx0ICAgcWNvdW50LCB0YywgXCJtaW5cIik7XG4rXHRcdFx0aWYgKGVycilcbitcdFx0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbitcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpIHtcbitcdFx0XHRlcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtYXhfcmF0ZSxcbitcdFx0XHRcdFx0XHRcdCAgIHFjb3VudCwgdGMsIFwibWF4XCIpO1xuK1x0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIW90eDJfbXFwcmlvX3JhdGVfdmFsaWQobWluX3JhdGUpKSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXG5cIixcbitcdFx0XHRcdCAgIG1pbl9yYXRlLCB0Yyk7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0XHRcdCAgICAgICBcIm1xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcIixcbitcdFx0XHRcdFx0ICAgICAgIG1pbl9yYXRlLCB0Yyk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChtYXhfcmF0ZSkpIHtcbitcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdCAgIFwibXFwcmlvOiBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0c1xcblwiLFxuK1x0XHRcdFx0ICAgbWF4X3JhdGUsIHRjKTtcbitcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbitcdFx0XHRcdFx0ICAgICAgIFwibXFwcmlvOiBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0c1wiLFxuK1x0XHRcdFx0XHQgICAgICAgbWF4X3JhdGUsIHRjKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0fVxuK1xuK1x0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdHhxcyhuZXRkZXYsIGV4dGFjaywgcW9wdCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0ZXJyID0gb3R4Ml9tcXByaW9fc3RhZ2VfY3VyKHBmdmYsIG1xcHJpbyk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYocGZ2Zi1cdTAwM2VuZXRkZXYsIHRydWUpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0ZXJyID0gb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUocGZ2ZiwgcmVwbGFjaW5nKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdC8qIG90eDJfbXFwcmlvX3VwKCkgbWF5IGhhdmUgcmVzdG9yZWQgdGhlIHByZXZpb3VzIGNvbmZpZ3VyYXRpb24gZHVyaW5nXG4rXHQgKiB0aGUgcmVzdGFydCBhYm92ZS4gQ2xlYXIgZXZlcnkgTURRIHNoYXBlciBiZWZvcmUgYXBwbHlpbmcgdGhlIG5ld1xuK1x0ICogbWFwcGluZyBzbyBxdWV1ZXMgZHJvcHBlZCBmcm9tIHRoZSBUQyBsYXlvdXQgZG8gbm90IGtlZXAgc3RhbGVcbitcdCAqIGxpbWl0cyBpbiBoYXJkd2FyZS5cbitcdCAqL1xuK1x0aWYgKG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpIHtcbitcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHBmdmYpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gY2xlYW51cDtcbitcdH1cbitcbitcdHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzID0gbXFwcmlvLVx1MDAzZWZsYWdzO1xuK1xuK1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMrKykge1xuK1x0XHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XG4rXHRcdHUzMiBxY291bnQgPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbitcbitcdFx0LyogUmF0ZXMgb21pdHRlZCBmcm9tIHRjIG1xcHJpbyBhcmUgcGFzc2VkIGFzIHplcm8gYW5kIGJvdGggTURRXG4rXHRcdCAqIHNoYXBlciByZWdpc3RlcnMgYXJlIHByb2dyYW1tZWQ7IHNlZVxuK1x0XHQgKiBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKCkuIE11bHRpLXF1ZXVlIFRDcyB3aXRoIHJhdGVzXG4rXHRcdCAqIGFyZSByZWplY3RlZCBhYm92ZS5cbitcdFx0ICovXG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuK1x0XHRcdG1pbl9yYXRlID0gbXFwcmlvLVx1MDAzZW1pbl9yYXRlW3RjXTtcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4rXHRcdFx0bWF4X3JhdGUgPSBtcXByaW8tXHUwMDNlbWF4X3JhdGVbdGNdO1xuK1xuK1x0XHRmb3IgKHR4cSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbitcdFx0ICAgICB0eHEgXHUwMDNjIHFvcHQtXHUwMDNlb2Zmc2V0W3RjXSArIHFjb3VudDsgdHhxKyspIHtcbitcdFx0XHRuZXRkZXZfZGJnKG5ldGRldixcbitcdFx0XHRcdCAgIFwibXFwcmlvOiB0YyAlZCB0eHEgJWQgbWluX3JhdGUgJWxsdSBtYXhfcmF0ZSAlbGx1XFxuXCIsXG4rXHRcdFx0XHQgICB0YywgdHhxLCBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xuK1xuK1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcbitcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7XG4rXG4rXHRcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsXG4rXHRcdFx0XHRcdFx0XHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xuK1x0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRnb3RvIGNsZWFudXA7XG4rXHRcdH1cbitcdH1cbitcbitcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgcGZ2Zi1cdTAwM2VjdXJfbXFfc25hcC1cdTAwM2VudW1fdGMpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGZ2Zi1cdTAwM2VjdXJfbXFfc25hcC1cdTAwM2VudW1fdGM7IGkrKylcbitcdFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIGksIHBmdmYtXHUwMDNlY3VyX21xX3NuYXAtXHUwMDNlY291bnRbaV0sXG4rXHRcdFx0XHQgICAgcW9wdC1cdTAwM2VvZmZzZXRbaV0pO1xuK1xuK1x0cW9wdC1cdTAwM2VodyA9IFRDX01RUFJJT19IV19PRkZMT0FEX1RDUztcbitcbitcdGlmIChyZXBsYWNpbmcpIHtcbitcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lID0gdHJ1ZTtcbitcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lID0gZmFsc2U7XG4rXHR9IGVsc2Uge1xuK1x0XHRvdHgyX21xcHJpb19zbmFwX2NvbW1pdChwZnZmKTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK1xuK2NsZWFudXA6XG4rXHRxb3B0LVx1MDAzZWh3ID0gMDtcbitcdGlmIChyZXBsYWNpbmcpIHtcbitcdFx0aW50IHJlc3RvcmVfZXJyID0gb3R4Ml9tcXByaW9fcmVzdG9yZV9vbGQocGZ2Zik7XG4rXG4rXHRcdG90eDJfbXFwcmlvX2NsZWFyX3JlcGxhY2Vfc3RhdGUocGZ2Zik7XG4rXHRcdGlmIChyZXN0b3JlX2Vycikge1xuK1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IHJlcGxhY2UgZmFpbGVkIGFuZCBwcmlvciBjb25maWd1cmF0aW9uIHJvbGxiYWNrIGZhaWxlZDogJWRcXG5cIixcbitcdFx0XHRcdCAgIHJlc3RvcmVfZXJyKTtcbitcdFx0XHRpZiAoZXh0YWNrKVxuK1x0XHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0XHRcdFx0ICAgICAgIFwibXFwcmlvOiByZXBsYWNlIGZhaWxlZCBhbmQgcHJpb3IgY29uZmlndXJhdGlvbiByb2xsYmFjayBmYWlsZWQ6ICVkXCIsXG4rXHRcdFx0XHRcdFx0ICAgICAgIHJlc3RvcmVfZXJyKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdCAgIFwibXFwcmlvOiByZXBsYWNlIGZhaWxlZDsgcHJpb3IgY29uZmlndXJhdGlvbiByZXN0b3JlZFxcblwiKTtcbitcdFx0XHRpZiAoZXh0YWNrKVxuK1x0XHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdFx0XHQgICBcIm1xcHJpbzogcmVwbGFjZSBmYWlsZWQ7IHByaW9yIGNvbmZpZ3VyYXRpb24gcmVzdG9yZWRcIik7XG4rXHRcdH1cbitcdFx0cmV0dXJuIGVyciA/IGVyciA6IC1FSU87XG4rXHR9XG4rXHRvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhwZnZmLCBtcXByaW8pO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIGludCBvdHgyX3NldHVwX3RjX3Jvb3Qoc3RydWN0IG90eDJfbmljICpwZnZmLFxuK1x0XHRcdCAgICAgIHN0cnVjdCB0Y19yb290X3FvcHRfb2ZmbG9hZCAqcm9vdClcbit7XG4rXHRzd2l0Y2ggKHJvb3QtXHUwMDNlY29tbWFuZCkge1xuK1x0Y2FzZSBUQ19ST09UX0dSQUZUOlxuK1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lKVxuK1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSA9IHRydWU7XG4rXHRcdHJldHVybiAwO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK31cbitcbitzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh2b2lkICp0eXBlX2RhdGEpXG4re1xuK1x0c3RydWN0IHRjX3F1ZXJ5X2NhcHNfYmFzZSAqYmFzZSA9IHR5cGVfZGF0YTtcbitcdHN0cnVjdCB0Y19tcXByaW9fY2FwcyAqY2FwcztcbitcbitcdGlmIChiYXNlLVx1MDAzZXR5cGUgIT0gVENfU0VUVVBfUURJU0NfTVFQUklPKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRjYXBzID0gYmFzZS1cdTAwM2VjYXBzO1xuK1x0Y2Fwcy1cdTAwM2V2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIGludCBvdHgyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxuIFx0XHQgIHZvaWQgKnR5cGVfZGF0YSlcbiB7XG4gXHRzd2l0Y2ggKHR5cGUpIHtcbitcdGNhc2UgVENfUVVFUllfQ0FQUzpcbitcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh0eXBlX2RhdGEpO1xuIFx0Y2FzZSBUQ19TRVRVUF9CTE9DSzpcbiBcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfYmxvY2sobmV0ZGV2LCB0eXBlX2RhdGEpO1xuIFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19IVEI6XG4gXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX2h0YihuZXRkZXYsIHR5cGVfZGF0YSk7XG4rXHRjYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzpcbitcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfbXFwcmlvKG5ldGRldiwgdHlwZV9kYXRhKTtcbitcdGNhc2UgVENfU0VUVVBfUk9PVF9RRElTQzpcbitcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfcm9vdChuZXRkZXZfcHJpdihuZXRkZXYpLCB0eXBlX2RhdGEpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuQEAgLTE2MzIsNiArMjMzNiw3IEBAIEVYUE9SVF9TWU1CT0wob3R4Ml9pbml0X3RjKTtcbiB2b2lkIG90eDJfc2h1dGRvd25fdGMoc3RydWN0IG90eDJfbmljICpuaWMpXG4ge1xuIFx0b3R4Ml9kZXN0cm95X3RjX2Zsb3dfbGlzdChuaWMpO1xuK1x0b3R4Ml9tcXByaW9fc25hcF9kZXN0cm95KG5pYyk7XG4gfVxuIEVYUE9SVF9TWU1CT0wob3R4Ml9zaHV0ZG93bl90Yyk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXG5pbmRleCA2OWMwOTExZTI4ZTkxLi5kOWFmMTgyZTU3MjFkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcbkBAIC0xMTgsNiArMTE4LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9jb25maWdfc2NoZWRfc2hhcGluZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4gXHQvKiBjb25maWd1cmUgUElSICovXG4gXHRtYXhyYXRlID0gKG5vZGUtXHUwMDNlcmF0ZSBcdTAwM2Ugbm9kZS1cdTAwM2VjZWlsKSA/IG5vZGUtXHUwMDNlcmF0ZSA6IG5vZGUtXHUwMDNlY2VpbDtcbiBcbitcdC8qIDY1NTM2IGlzIHRoZSBrZXJuZWwtc2lkZSBkZWZhdWx0IGJ1cnN0IHdoZW4gSFRCIGRvZXMgbm90IHN1cHBseSBhblxuK1x0ICogZXhwbGljaXQgdmFsdWUsIG5vdCB0aGUgTklYIGhhcmR3YXJlIG1heGltdW0gKENOMTBLX01BWF9CVVJTVF9TSVpFKS5cbitcdCAqL1xuIFx0Y2ZnLVx1MDAzZXJlZ3ZhbFsqbnVtX3JlZ3NdID1cbiBcdFx0b3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIG1heHJhdGUsIDY1NTM2KTtcbiBcdCgqbnVtX3JlZ3MpKys7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMzozOTo0NS44MDE0NjEwNzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjIzMjk3MjgzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhpcyBQYXRjaCBTZXJpZXMgZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggc2VyaWVzIGFuZCBzZWUgaWYgaXQncyBhIGdvb2QgY2FuZGlkYXRlIGZvciBzb21lIHN5emthbGxlciBmdXp6aW5nLiBUaGUgZmlyc3QgdGhpbmcgSSdtIGNoZWNraW5nIGlzIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIOKAkyBsb29rcyBsaWtlIGl0J3MgYW1kNjQuIEdvb2QsIHRoYXQncyBzdHJhaWdodGZvcndhcmQgZW5vdWdoIHRvIHdvcmsgd2l0aC5cblxuTm93LCB0aGUgZmlsZXMgdGhhdCB3ZXJlIG1vZGlmaWVkLCB0aGF0J3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZzpcbiogICBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jYFxuKiAgIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY2BcbiogICBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhgXG4qICAgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNgXG4qICAgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY2BcbiogICBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY2BcbiogICBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY2BcbiogICBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jYFxuXG5IbW0sIGxvb2tzIGxpa2UgYSBuZXR3b3JraW5nIHN0YWNrIGRyaXZlciBzcGVjaWZpYyB0byB0aGUgYG9jdGVvbnR4MmAgaGFyZHdhcmUuIFRoYXQgbWVhbnMgaXTigJlzIHZlbmRvci1zcGVjaWZpYywgd2hpY2ggaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIGxvdy1oYW5naW5nIGZydWl0IHdlJ3JlIGxvb2tpbmcgZm9yLCBwb3RlbnRpYWxseS4gT2N0ZW9uIFRYMiBpcyBNYXJ2ZWxsIGhhcmR3YXJlIChBUk02NCBTb0MsIFBDSWUgU21hcnROSUMsIENOOUsvQ04xMEsgaGFyZHdhcmUpLlxuXG5TbywgdGhlIG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIGZvciBgb2N0ZW9udHgyYC4gTGV04oCZcyBjb25maXJtIHRoYXQgaXQncyBjb25maWd1cmFibGUgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmRpdGlvbnMgcmVxdWlyZWQgdG8gZW5hYmxlIHRoaXMuIEdyZXBwaW5nIG9yIGEgcXVpY2sgZmlsZSByZWFkIHdpbGwgZ2l2ZSBtZSB0aGF0IGFuc3dlciBmYXN0LiBUaGlzIHRlbGxzIG1lIGlmIHRoZXJlJ3MgYSBnb29kIGNoYW5jZSBvZiBpdCBiZWluZyByZWFjaGFibGUgYnkgc3l6a2FsbGVyLiBJZiBzbywgdGhpcyBzZXJpZXMgbG9va3MgdmVyeSBwcm9taXNpbmcgaW5kZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzUwMiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAzOjQwOjAyLjAzNDQzODI2NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTY2NzIxNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiT0NURU9OVFgyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjY6Y29uZmlnIE9DVEVPTlRYMl9NQk9YXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy03LVxcdHRyaXN0YXRlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy04LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6OTpjb25maWcgT0NURU9OVFgyX0FGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0xMC1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBPY3Rlb25UWDIgUlZVIEFkbWluIEZ1bmN0aW9uIGRyaXZlclxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjExOlxcdHNlbGVjdCBPQ1RFT05UWDJfTUJPWFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMTItXFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnPTIyPWNvbmZpZyBORENfRElTX0RZTkFNSUNfQ0FDSElOR1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMjMtXFx0Ym9vbCBcXFwiRGlzYWJsZSBjYWNoaW5nIG9mIGR5bmFtaWMgZW50cmllcyBpbiBORENcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzoyNDpcXHRkZXBlbmRzIG9uIE9DVEVPTlRYMl9BRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMjUtXFx0ZGVmYXVsdCBuXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTMwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6MzE6Y29uZmlnIE9DVEVPTlRYMl9QRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMzItXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBQaHlzaWNhbCBGdW5jdGlvbiBkcml2ZXJcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzozMzpcXHRzZWxlY3QgT0NURU9OVFgyX01CT1hcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTM0LVxcdHNlbGVjdCBORVRfREVWTElOS1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy00NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjQ1OmNvbmZpZyBPQ1RFT05UWDJfVkZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTQ2LVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXJcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo0NzpcXHRkZXBlbmRzIG9uIE9DVEVPTlRYMl9QRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNDgtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz01MT1jb25maWcgUlZVX0VTV0lUQ0hcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTUyLVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFJWVSBFLVN3aXRjaCBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6NTM6XFx0ZGVwZW5kcyBvbiBPQ1RFT05UWDJfUEZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTU0LVxcdGRlZmF1bHQgbVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvTWFrZWZpbGUtNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19PQ1RFT05UWDJfTUJPWCkgKz0gYWYvXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfT0NURU9OVFgyX0FGKSArPSBhZi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19PQ1RFT05UWDJfUEYpICs9IG5pYy9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL01ha2VmaWxlPTY9Y2NmbGFncy15ICs9IC1JJChzcmMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfT0NURU9OVFgyX01CT1gpICs9IHJ2dV9tYm94Lm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19PQ1RFT05UWDJfQUYpICs9IHJ2dV9hZi5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvTWFrZWZpbGUtOS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jPTY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjZ3hfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guYzo2NzpcXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfQ0dYKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jLTY4LVxcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9DTjEwS19SUE0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guaC0xNS0gLyogUENJIGRldmljZSBJRHMgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guaDoxNjojZGVmaW5lXFx0UENJX0RFVklEX09DVEVPTlRYMl9DR1hcXHRcXHQweEEwNTlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guaC0xNy1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYz0xNTQ9REVGSU5FX1NIT1dfQVRUUklCVVRFKG5wY19tY2FtX2xheW91dCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTE1NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM6MTU2OiNkZWZpbmUgX19PQ1RFT05UWDJfREVCVUdGU19BVFRSSUJVVEVfRk9QUyhfX25hbWUpXFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNTctc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgX19uYW1lICMjIF9mb3BzID0ge1xcdFxcdFxcdFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNjQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jOjE2NTojZGVmaW5lIERFRklORV9PQ1RFT05UWDJfREVCVUdGU19BVFRSSUJVVEVfV0lUSF9TSVpFKF9fbmFtZSwgX19zaXplKVxcdFxcdFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMTY2LXN0YXRpYyBpbnQgX19uYW1lICMjIF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcdFxcdFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNzAtfVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM6MTcxOl9fT0NURU9OVFgyX0RFQlVHRlNfQVRUUklCVVRFX0ZPUFMoX19uYW1lKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNzItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM9MTgxPXN0YXRpYyBpbnQgbnBjX21jYW1fZHN0YXRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMjQyLSNkZWZpbmUgVE9UQUxfU1ogKE1BWF9OVU1fQkFOS1MgKiBNQVhfTlVNX1NVQl9CQU5LUyAqIE1BWF9TVUJCQU5LX0RFUFRIICogNjQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jOjI0MzpERUZJTkVfT0NURU9OVFgyX0RFQlVHRlNfQVRUUklCVVRFX1dJVEhfU0laRShucGNfbWNhbV9kc3RhdHMsIFRPVEFMX1NaKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMjQ0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYz0yNDU9c3RhdGljIGludCBucGNfbWNhbV9taXNtYXRjaF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTI4NC0vKiBcXFwiJXVcXFxcdCVkXFxcXHQldVxcXFxuXFxcIiBuZWVkcyBsZXNzIHRoYW4gNjQgY2hhcmFjdGVycyB0byBwcmludC4gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM6Mjg1OkRFRklORV9PQ1RFT05UWDJfREVCVUdGU19BVFRSSUJVVEVfV0lUSF9TSVpFKG5wY19tY2FtX21pc21hdGNoLCBUT1RBTF9TWik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTI4Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTIwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjIxOiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9QVFBcXHRcXHRcXHQweEEwMENcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy0yMi0jZGVmaW5lIFBDSV9TVUJTWVNfREVWSURfT0NUWDJfOTh4eF9QVFBcXHRcXHQweEIxMDBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTI3LSNkZWZpbmUgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NVhYT19QVFBcXHQweEI2MDBcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzoyODojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlNUXFx0XFx0XFx0MHhBMDg1XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtMjktI2RlZmluZSBQQ0lfREVWSURfQ04xMEtfUFRQXFx0XFx0XFx0MHhBMDlFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYz01ODk9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHB0cF9pZF90YWJsZVtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjU5MDpcXHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy01OTEtXFx0XFx0XFx0IFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5Mi1cXHRcXHRcXHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85OHh4X1BUUCkgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo1OTM6XFx0eyBQQ0lfREVWSUNFX1NVQihQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9QVFAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTk0LVxcdFxcdFxcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy01OTUtXFx0XFx0XFx0IFBDSV9TVUJTWVNfREVWSURfT0NUWDJfOTZYWF9QVFApIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM6NTk2OlxcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5Ny1cXHRcXHRcXHQgUENJX1ZFTkRPUl9JRF9DQVZJVU0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTk4LVxcdFxcdFxcdCBQQ0lfU1VCU1lTX0RFVklEX09DVFgyXzk1WFhfUFRQKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjU5OTpcXHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy02MDAtXFx0XFx0XFx0IFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTYwMS1cXHRcXHRcXHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NVhYTl9QVFApIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM6NjAyOlxcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTYwMy1cXHRcXHRcXHQgUENJX1ZFTkRPUl9JRF9DQVZJVU0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNjA0LVxcdFxcdFxcdCBQQ0lfU1VCU1lTX0RFVklEX09DVFgyXzk1TU1fUFRQKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjYwNTpcXHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy02MDYtXFx0XFx0XFx0IFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM9NDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJ2dV9pZF90YWJsZVtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjQ1OlxcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUYpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtNDYtXFx0eyAwLCB9ICAvKiBlbmQgb2YgdGFibGUgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTkyNz1zdGF0aWMgdm9pZCBydnVfZ2V0X2xia19idWZzaXplKHN0cnVjdCBydnUgKnJ2dSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTkzMy1cXHRwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM6OTM0OlxcdFxcdFxcdCAgICAgIFBDSV9ERVZJRF9PQ1RFT05UWDJfTEJLLCBwZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy05MzUtXFx0aWYgKCFwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM9MzQ0Nz1pbnQgcnZ1X2dldF9udW1fbGJrX2NoYW5zKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNDUyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjM0NTM6XFx0cGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX0xCSyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNDU0LVxcdFxcdFxcdCAgICAgIE5VTEwpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzQ3MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzozNDcxOiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUZWRlxcdDB4QTBGOFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM0NzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM9MzQ3Mz1zdGF0aWMgaW50IHJ2dV9lbmFibGVfc3Jpb3Yoc3RydWN0IHJ2dSAqcnZ1KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzQ5NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzozNDk1OlxcdGlmIChydnUtXFx1MDAzZXZmX2RldmlkID09IFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGVkYpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNDk2LVxcdFxcdGNoYW5zID0gcnZ1X2dldF9udW1fbGJrX2NoYW5zKCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuaC0yMy0vKiBQQ0kgZGV2aWNlIElEcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5oOjI0OiNkZWZpbmVcXHRQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRlxcdFxcdDB4QTA2NVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5oOjI1OiNkZWZpbmVcXHRQQ0lfREVWSURfT0NURU9OVFgyX0xCS1xcdFxcdFxcdDB4QTA2MVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5oLTI2LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2NuMTBrLmM9MzkyPXN0YXRpYyB2b2lkIHJ2dV9sYmtfc2V0X2NoYW5uZWxzKHN0cnVjdCBydnUgKnJ2dSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9jbjEway5jLTQxNS1cXHRcXHRwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2NuMTBrLmM6NDE2OlxcdFxcdFxcdFxcdCAgICAgIFBDSV9ERVZJRF9PQ1RFT05UWDJfTEJLLCBwZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfY24xMGsuYy00MTctXFx0XFx0aWYgKCFwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYz0yODAwPXN0YXRpYyB2b2lkIHJ2dV9kYmdfbnBhX2luaXQoc3RydWN0IHJ2dSAqcnZ1KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0yODE5LS8qIFBlci1sbWFjIENHWCBkZWJ1Z2ZzIGZpbGVzIG5lZWQgYm90aCBSVlUgYW5kIENHWCBoYW5kbGU7IGlub2RlLVxcdTAwM2VpX3ByaXZhdGVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jOjI4MjA6ICogcG9pbnRzIGhlcmUgc28gc2VxX2ZpbGUgb3BzIGF2b2lkIHBjaV9nZXRfZGV2aWNlKFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGKS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTI4MjEtICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvTWFrZWZpbGUtNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfT0NURU9OVFgyX1BGKSArPSBydnVfbmljcGYubyBvdHgyX3B0cC5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX09DVEVPTlRYMl9WRikgKz0gcnZ1X25pY3ZmLm8gb3R4Ml9wdHAub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9NYWtlZmlsZS04LW9iai0kKENPTkZJR19SVlVfRVNXSVRDSCkgKz0gcnZ1X3JlcC5vXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC00My0vKiBQQ0kgZGV2aWNlIElEcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjQ0OiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfUEYgICAgICAgICAgICAgIDB4QTA2M1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjQ1OiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfVkZcXHRcXHQweEEwNjRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo0NjojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGVkZcXHRcXHQweEEwRjhcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC00Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTUxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjUyOiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9TRFBfUkVQXFx0XFx0MHhBMEY3XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNTMtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaD02MTk9c3RhdGljIGlubGluZSBib29sIGlzX290eDJfbGJrdmYoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNjIwLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo2MjE6XFx0cmV0dXJuIChwZGV2LVxcdTAwM2VkZXZpY2UgPT0gUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUZWRikgfHxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC02MjItXFx0XFx0KHBkZXYtXFx1MDAzZWRldmljZSA9PSBQQ0lfREVWSURfUlZVX1JFUCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaD02Mzc9c3RhdGljIGlubGluZSBib29sIGlzX290eDJfc2RwX3JlcChzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC02Mzgte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjYzOTpcXHRyZXR1cm4gcGRldi1cXHUwMDNlZGV2aWNlID09IFBDSV9ERVZJRF9PQ1RFT05UWDJfU0RQX1JFUDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC02NDAtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYz0zNj1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgb3R4Ml9wZl9pZF90YWJsZVtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM6Mzc6XFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9QRikgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTM4LVxcdHsgMCwgfSAgLyogZW5kIG9mIHRhYmxlICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jPTIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBvdHgyX3ZmX2lkX3RhYmxlW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuYzoyMzpcXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGVkYpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuYzoyNDpcXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX1ZGKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM6MjU6XFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1NEUF9SRVApIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuYy0yNi1cXHR7IH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDM6NDA6MDIuMzMxMTE3MTkyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTYwMDQyNjQxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBEcml2ZXIgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uc3VsdCBTZWN0aW9uIDIgb2YgdGhlIHRyaWFnZSBwaGlsb3NvcGh5LCBzcGVjaWZpY2FsbHkgdGhlIHBhcnQgYWJvdXQgXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuXCIgUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgZm9yIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIHRoYXQgZGVwZW5kIG9uIHBoeXNpY2FsIEFTSUNzIG9yIFBDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG5cblRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBkcml2ZXIgKE9DVEVPTlRYMl9QRiwgT0NURU9OVFgyX1ZGLCBPQ1RFT05UWDJfQUYpIGltbWVkaWF0ZWx5IGNhdWdodCBteSBleWUuIFRoaXMgaXMgYSBkcml2ZXIgZm9yIE1hcnZlbGwvQ2F2aXVtIE9jdGVvbiBUWDIgU21hcnROSUNzIGFuZCBTb0NzLCB1c2luZyB2ZW5kb3IgSUQgMHgxNzdkLiBEZWZpbml0ZWx5IGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIGRyaXZlci4gV2UgbmVlZCB0byBjb25maXJtIGlmIGl0ICpyZXF1aXJlcyogcGh5c2ljYWwgaGFyZHdhcmUuXG5cbkxldCdzIHNlZSB3aGF0IHRoZSBkcml2ZXIgYWN0dWFsbHkgdG91Y2hlcy4gTG9va3MgbGlrZSBpdCBtb2RpZmllcyBmaWxlcyB3aXRoaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2A6IHNwZWNpZmljYWxseSBgcnZ1X25peC5jYCBhbmQgZmlsZXMgdW5kZXIgdGhlIGBuaWNgIGRpcmVjdG9yeSBsaWtlIGBvdHgyX2NvbW1vbi5jYCwgYG90eDJfZGNibmwuY2AsIGFuZCBzbyBvbi4gR29vZCwgaXQncyBjb250YWluZWQgd2l0aGluIHRoYXQgTWFydmVsbC1zcGVjaWZpYyBwYXJ0IG9mIHRoZSB0cmVlLiBUaGVyZSBhcmUgbm8gbW9kaWZpY2F0aW9ucyB0byBjb3JlIG5ldHdvcmtpbmcgb3IgdmlydHVhbCBkZXZpY2UgZHJpdmVycywgd2hpY2ggaXMgcHJvbWlzaW5nIGZyb20gYSBcInJlYWNoYWJpbGl0eVwiIHBlcnNwZWN0aXZlLlxuXG5Ob3csIHRoZSBjcnVjaWFsIGNoZWNrOiBEb2VzIFFFTVUgZW11bGF0ZSBhbnkgb2YgdGhpcz8gTm9wZS4gU3RhbmRhcmQgUUVNVSBkb2Vzbid0IHRvdWNoIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBSVlUgLyBOSVggaGFyZHdhcmUuIFRoaXMgc29saWRpZmllcyB0aGF0IHRoZSBkcml2ZXIgZGVtYW5kcyBwaHlzaWNhbCBoYXJkd2FyZSDigJMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIFNvQyBvciBQQ0llIFNtYXJ0TklDLiBUaGVyZWZvcmUsIHdlJ3JlIGRlYWxpbmcgd2l0aCBoYXJkd2FyZSB0aGF0J3MgKnN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSogaW4gb3VyIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlxuXG5TbywgdGhlIGNvbmNsdXNpb24gaXMgY2xlYXIuIFRoaXMgaXNuJ3Qgd29ydGggZnV6emluZyBpbiBvdXIgc3RhbmRhcmQgc2V0dXAuXG5cblRoZXJlZm9yZSwgdGhlIHJlc3BvbnNlIGlzOlxuXG5Xb3J0aEZ1enppbmc6IGZhbHNlXG5SZWFzb25pbmc6IFRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgb25seSB0aGUgTWFydmVsbCBPY3Rlb25UWDIgbmV0d29yayBkcml2ZXIgKGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9gKSwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgTWFydmVsbCBPY3Rlb25UWDIgaGFyZHdhcmUvQVNJQ3Mgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cbkVuYWJsZUNvbmZpZ3M6IFtdXG5Gb2N1c1N5bWJvbHM6IFtdXG5cblRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQ3MSwiT3V0cHV0VG9rZW5zIjoxMjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDM6NDA6MDcuOTMxNTQ1ODk1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgb25seSB0aGUgTWFydmVsbCBPY3Rlb25UWDIgbmV0d29yayBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyLyksIGFkZGluZyBzdXBwb3J0IGZvciBtcXByaW8gaGFyZHdhcmUgYmFuZHdpZHRoIG9mZmxvYWQuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU21hcnROSUMvU29DIGRyaXZlciByZXF1aXJpbmcgcGh5c2ljYWwgTWFydmVsbCBPY3Rlb25UWDIgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBvbmx5IHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBuZXR3b3JrIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvKSwgYWRkaW5nIHN1cHBvcnQgZm9yIG1xcHJpbyBoYXJkd2FyZSBiYW5kd2lkdGggb2ZmbG9hZC4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBTbWFydE5JQy9Tb0MgZHJpdmVyIHJlcXVpcmluZyBwaHlzaWNhbCBNYXJ2ZWxsIE9jdGVvblRYMiBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDM6NDA6MDcuOTMxNTczMDI1WiIsIlNlcSI6NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowx42g6[1] Phase: Running StartedAt: 2026-09-04 03:40:19 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx42g6[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-04 03:40:19 +0000 UTC FinishedAt: 2026-09-04 03:40:23 +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,}