Name: series-workflow9jvt6 Phase: Running StartedAt: 2026-09-09 22:28:58 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9jvt6[0] Phase: Running StartedAt: 2026-09-09 22:28:58 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9jvt6[0].run-triage Phase: Running StartedAt: 2026-09-09 22:28:58 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9jvt6[0].run-triage(0) Phase: Running StartedAt: 2026-09-09 22:28:58 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvIGFuZCBpbmNsdWRlL25ldC9tYW5hLykuIFRoaXMgZHJpdmVyIHRhcmdldHMgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlL1NtYXJ0TklDcyBvbiBNaWNyb3NvZnQgQXp1cmUgLyBIeXBlci1WIGVudmlyb25tZW50cyBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuIEFzIHN1Y2gsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmY2NmMmI1YTQ0YTg3ZjczZTBiOTAxMjQ1Zjg3YWI0NTM4YmI0MGRmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAyMjo0NzoyNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2JwZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9icGYuY1xuaW5kZXggNzBiYjhjOWRjMzQxMy4uM2FjZWMxYmIwMmEzNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfYnBmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfYnBmLmNcbkBAIC01OSw2ICYjNDM7NTksMTEgQEAgaW50IG1hbmFfeGRwX3htaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGludCBuLCBzdHJ1Y3QgeGRwX2ZyYW1lICoqZnJhbWVzLFxuIFx0aWYgKHVubGlrZWx5KCFhcGMtXHUwMDNlcG9ydF9pc191cCkpXG4gXHRcdHJldHVybiAwO1xuIFxuJiM0MztcdC8qIFBhaXIgd2l0aCB0aGUgc21wX3dtYigpIGluIG1hbmFfcHVibGlzaF9xc2V0KCkgYmVmb3JlIHJlYWRpbmcgcXVldWVcbiYjNDM7XHQgKiBzdGF0ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzbXBfcm1iKCk7XG4mIzQzO1xuIFx0cV9pZHggPSBzbXBfcHJvY2Vzc29yX2lkKCkgJSBuZGV2LVx1MDAzZXJlYWxfbnVtX3R4X3F1ZXVlcztcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG47IGkmIzQzOyYjNDM7KSB7XG5AQCAtNjgsNyAmIzQzOzczLDcgQEAgaW50IG1hbmFfeGRwX3htaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGludCBuLCBzdHJ1Y3QgeGRwX2ZyYW1lICoqZnJhbWVzLFxuIFx0XHRjb3VudCYjNDM7JiM0Mzs7XG4gXHR9XG4gXG4tXHR0eF9zdGF0cyA9IFx1MDAyNmFwYy1cdTAwM2V0eF9xcFtxX2lkeF0tXHUwMDNldHhxLnN0YXRzO1xuJiM0MztcdHR4X3N0YXRzID0gYXBjLVx1MDAzZXR4X3FwW3FfaWR4XS1cdTAwM2V0eHEuc3RhdHM7XG4gXG4gXHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnR4X3N0YXRzLVx1MDAzZXN5bmNwKTtcbiBcdHR4X3N0YXRzLVx1MDAzZXhkcF94bWl0ICYjNDM7PSBjb3VudDtcbkBAIC05NSw3ICYjNDM7MTAwLDcgQEAgdTMyIG1hbmFfcnVuX3hkcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IG1hbmFfcnhxICpyeHEsXG4gXG4gXHRhY3QgPSBicGZfcHJvZ19ydW5feGRwKHByb2csIHhkcCk7XG4gXG4tXHRyeF9zdGF0cyA9IFx1MDAyNnJ4cS1cdTAwM2VzdGF0cztcbiYjNDM7XHRyeF9zdGF0cyA9IG1hbmFfcnhxX3N0YXRzKHJ4cSk7XG4gXG4gXHRzd2l0Y2ggKGFjdCkge1xuIFx0Y2FzZSBYRFBfUEFTUzpcbkBAIC0xNzIsNiAmIzQzOzE3Nyw4IEBAIHN0YXRpYyBpbnQgbWFuYV94ZHBfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4gXHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjID0gbmV0ZGV2X3ByaXYobmRldik7XG4mIzQzO1x0c3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICpzY3JhdGNoO1xuJiM0MztcdHN0cnVjdCBtYW5hX3FzZXQgbmV3cSwgb2xkcTtcbiBcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7XG4gXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYztcbiBcdGludCBlcnI7XG5AQCAtMTkxLDQ2ICYjNDM7MTk4LDQ0IEBAIHN0YXRpYyBpbnQgbWFuYV94ZHBfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbiBcbi1cdC8qIE9uZSByZWZjbnQgb2YgdGhlIHByb2cgaXMgaG9sZCBieSB0aGUgY2FsbGVyIGFscmVhZHksIHNvXG4tXHQgKiBkb24mIzM5O3QgaW5jcmVhc2UgcmVmY250IGZvciB0aGlzIG9uZS5cbi1cdCAqL1xuLVx0YXBjLVx1MDAzZWJwZl9wcm9nID0gcHJvZztcbi1cbiBcdGlmIChhcGMtXHUwMDNlcG9ydF9pc191cCkge1xuLVx0XHQvKiBSZS1jcmVhdGUgcnhxJiMzOTtzIGFmdGVyIHhkcCBwcm9nIHdhcyBsb2FkZWQgb3IgdW5sb2FkZWQuXG4tXHRcdCAqIEV4OiByZSBjcmVhdGUgcnhxJiMzOTtzIHRvIHN3aXRjaCBmcm9tIGZ1bGwgcGFnZXMgdG8gc21hbGxlclxuLVx0XHQgKiBzaXplIHBhZ2UgZnJhZ21lbnRzIHdoZW4geGRwIHByb2cgaXMgdW5sb2FkZWQgYW5kXG4tXHRcdCAqIHZpY2UtdmVyc2EuXG4tXHRcdCAqL1xuLVxuLVx0XHQvKiBQcmUtYWxsb2NhdGUgYnVmZmVycyB0byBwcmV2ZW50IGZhaWx1cmUgaW4gbWFuYV9hdHRhY2ggKi9cbi1cdFx0ZXJyID0gbWFuYV9wcmVfYWxsb2NfcnhidWZzKGFwYywgbmRldi1cdTAwM2VtdHUsIGFwYy1cdTAwM2VudW1fcXVldWVzKTtcbi1cdFx0aWYgKGVycikge1xuJiM0MztcdFx0c2NyYXRjaCA9IG1hbmFfcXNldF9zY3JhdGNoX2FsbG9jKGFwYyk7XG4mIzQzO1x0XHRpZiAoIXNjcmF0Y2gpIHtcbiBcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuLVx0XHRcdFx0XHQgICBcJiMzNDtYRFA6IEluc3VmZmljaWVudCBtZW1vcnkgZm9yIHR4L3J4IHJlLWNvbmZpZ1wmIzM0Oyk7XG4tXHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdFx0XHRcdCAgIFwmIzM0O1hEUDogSW5zdWZmaWNpZW50IG1lbW9yeSBmb3IgcmUtY29uZmlnXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRcdH1cbiBcbi1cdFx0ZXJyID0gbWFuYV9kZXRhY2gobmRldiwgZmFsc2UpO1xuJiM0MztcdFx0ZXJyID0gbWFuYV9hbGxvY19xc2V0KGFwYywgc2NyYXRjaCxcbiYjNDM7XHRcdFx0XHQgICAgICBhcGMtXHUwMDNlcnhfcXVldWVfc2l6ZSwgYXBjLVx1MDAzZXR4X3F1ZXVlX3NpemUsXG4mIzQzO1x0XHRcdFx0ICAgICAgYXBjLVx1MDAzZXByaXZfZmxhZ3MsIGFwYy1cdTAwM2Vjb25maWd1cmVkX210dSxcbiYjNDM7XHRcdFx0XHQgICAgICBwcm9nLCBcdTAwMjZuZXdxKTtcbiBcdFx0aWYgKGVycikge1xuLVx0XHRcdG5ldGRldl9lcnIobmRldixcbi1cdFx0XHRcdCAgIFwmIzM0O21hbmFfZGV0YWNoIGZhaWxlZCBhdCB4ZHAgc2V0OiAlZFxcblwmIzM0OywgZXJyKTtcbiBcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuLVx0XHRcdFx0XHQgICBcJiMzNDtYRFA6IFJlLWNvbmZpZyBmYWlsZWQgYXQgZGV0YWNoXCYjMzQ7KTtcbi1cdFx0XHRnb3RvIGVycl9kZWFsbG9jX3J4YnVmZnM7XG4mIzQzO1x0XHRcdFx0XHQgICBcJiMzNDtYRFA6IFJlLWNvbmZpZyBmYWlsZWQgYXQgYWxsb2NcJiMzNDspO1xuJiM0MztcdFx0XHRtYW5hX3FzZXRfc2NyYXRjaF9mcmVlKHNjcmF0Y2gpO1xuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG4gXG4tXHRcdGVyciA9IG1hbmFfYXR0YWNoKG5kZXYpO1xuJiM0MztcdFx0ZXJyID0gbWFuYV9wdWJsaXNoX3FzZXQoYXBjLCBcdTAwMjZuZXdxLCBcdTAwMjZvbGRxKTtcbiBcdFx0aWYgKGVycikge1xuLVx0XHRcdG5ldGRldl9lcnIobmRldixcbi1cdFx0XHRcdCAgIFwmIzM0O21hbmFfYXR0YWNoIGZhaWxlZCBhdCB4ZHAgc2V0OiAlZFxcblwmIzM0OywgZXJyKTtcbiBcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuLVx0XHRcdFx0XHQgICBcJiMzNDtYRFA6IFJlLWNvbmZpZyBmYWlsZWQgYXQgYXR0YWNoXCYjMzQ7KTtcbi1cdFx0XHRnb3RvIGVycl9kZWFsbG9jX3J4YnVmZnM7XG4mIzQzO1x0XHRcdFx0XHQgICBcJiMzNDtYRFA6IFJlLWNvbmZpZyBmYWlsZWQgYXQgcHVibGlzaFwmIzM0Oyk7XG4mIzQzO1x0XHRcdG1hbmFfZnJlZV9xc2V0KHNjcmF0Y2gsIFx1MDAyNm5ld3EpO1xuJiM0MztcdFx0XHQvKiBGcmVlIHRoZSBxdWV1ZXMgYmVmb3JlIGNsb3NpbmcgdGhlaXIgc2hhcmVkIEVRIHBvb2wuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRtYW5hX3B1Ymxpc2hfY2xvc2VfaWZfbmVlZGVkKGFwYyk7XG4mIzQzO1x0XHRcdG1hbmFfcXNldF9zY3JhdGNoX2ZyZWUoc2NyYXRjaCk7XG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbiBcbi1cdFx0bWFuYV9jaG5fc2V0eGRwKGFwYywgcHJvZyk7XG4tXHRcdG1hbmFfcHJlX2RlYWxsb2NfcnhidWZzKGFwYyk7XG4mIzQzO1x0XHRtYW5hX2ZyZWVfcXNldChzY3JhdGNoLCBcdTAwMjZvbGRxKTtcbiYjNDM7XHRcdG1hbmFfcXNldF9zY3JhdGNoX2ZyZWUoc2NyYXRjaCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIFVzZSB0aGUgY2FsbGVyJiMzOTtzIHByb2dyYW0gcmVmZXJlbmNlOyBtYW5hX29wZW4oKSBpbnN0YWxscyBpdFxuJiM0MztcdFx0ICogb24gcXVldWVzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRhcGMtXHUwMDNlYnBmX3Byb2cgPSBwcm9nO1xuIFx0fVxuIFxuIFx0aWYgKG9sZF9wcm9nKVxuQEAgLTI0MywxMSAmIzQzOzI0OCw2IEBAIHN0YXRpYyBpbnQgbWFuYV94ZHBfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4gXHRcdG5kZXYtXHUwMDNlbWF4X210dSA9IGdjLVx1MDAzZWFkYXB0ZXJfbXR1IC0gRVRIX0hMRU47XG4gXG4gXHRyZXR1cm4gMDtcbi1cbi1lcnJfZGVhbGxvY19yeGJ1ZmZzOlxuLVx0YXBjLVx1MDAzZWJwZl9wcm9nID0gb2xkX3Byb2c7XG4tXHRtYW5hX3ByZV9kZWFsbG9jX3J4YnVmcyhhcGMpO1xuLVx0cmV0dXJuIGVycjtcbiB9XG4gXG4gaW50IG1hbmFfYnBmKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgbmV0ZGV2X2JwZiAqYnBmKVxuQEAgLTI2MiwzICYjNDM7MjYyLDI3IEBAIGludCBtYW5hX2JwZihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IG5ldGRldl9icGYgKmJwZilcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuIH1cbiYjNDM7XG4mIzQzO3N0cnVjdCBicGZfcHJvZyAqbWFuYV9jaG5feGRwX3BlZWsoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpXG4mIzQzO3tcbiYjNDM7XHRBU1NFUlRfUlROTCgpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWFwYy1cdTAwM2VyeHFzIHx8ICFhcGMtXHUwMDNlcnhxc1swXSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcnRubF9kZXJlZmVyZW5jZShhcGMtXHUwMDNlcnhxc1swXS1cdTAwM2VicGZfcHJvZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEtlZXAgdGhlIHBlci1xdWV1ZSBwcm9ncmFtIHBvaW50ZXJzIHVudGlsIFJYIHBvbGxpbmcgc3RvcHMuICovXG4mIzQzO3ZvaWQgbWFuYV9jaG5feGRwX3JlbGVhc2Uoc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1bnNpZ25lZCBpbnQgbnVtX3F1ZXVlcylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCBpO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfUlROTCgpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXByb2cpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9xdWV1ZXM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0YnBmX3Byb2dfcHV0KHByb2cpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jXG5pbmRleCA3YTFhYzg1M2UzYWJjLi4yOWY1NGY5MWNiMDA5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNcbkBAIC05MCw2ICYjNDM7OTAsMTcgQEAgc3RhdGljIGludCBtYW5hX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRzbXBfd21iKCk7XG4gXG4gXHRuZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMobmRldik7XG4mIzQzO1xuJiM0MztcdC8qIFVuZG8gYSBmb3JjZWQgY2Fycmllci1vZmYgdW5sZXNzIGEgZGlzY29ubmVjdCBpcyBwZW5kaW5nIGJlaGluZCBSVE5MLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChhcGMtXHUwMDNlY2Fycmllcl9mb3JjZWRfb2ZmKSB7XG4mIzQzO1x0XHR1MzIgZXYgPSBSRUFEX09OQ0UoYXBjLVx1MDAzZWFjLVx1MDAzZWxpbmtfZXZlbnQpO1xuJiM0MztcbiYjNDM7XHRcdGFwYy1cdTAwM2VjYXJyaWVyX2ZvcmNlZF9vZmYgPSBmYWxzZTtcbiYjNDM7XHRcdGlmIChldiAhPSBIV0NfREFUQV9IV19MSU5LX0RJU0NPTk5FQ1QpXG4mIzQzO1x0XHRcdG5ldGlmX2NhcnJpZXJfb24obmRldik7XG4mIzQzO1x0fVxuJiM0MztcbiBcdG5ldGRldl9kYmcobmRldiwgXCYjMzQ7JXMgc3VjY2Vzc2Z1bFxcblwmIzM0OywgX19mdW5jX18pO1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTEwNiw2ICYjNDM7MTE3LDcgQEAgc3RhdGljIGludCBtYW5hX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFxuIHN0YXRpYyB2b2lkIG1hbmFfbGlua19zdGF0ZV9oYW5kbGUoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYztcbiBcdHN0cnVjdCBtYW5hX2NvbnRleHQgKmFjO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XG4gXHR1MzIgbGlua19ldmVudDtcbkBAIC0xMzEsNiAmIzQzOzE0Myw5IEBAIHN0YXRpYyB2b2lkIG1hbmFfbGlua19zdGF0ZV9oYW5kbGUoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxuIFx0XHRpZiAoIW5kZXYpXG4gXHRcdFx0Y29udGludWU7XG4gXG4mIzQzO1x0XHRhcGMgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XHRcdGFwYy1cdTAwM2VjYXJyaWVyX2ZvcmNlZF9vZmYgPSBmYWxzZTtcbiYjNDM7XG4gXHRcdGlmIChsaW5rX3VwKSB7XG4gXHRcdFx0bmV0aWZfY2Fycmllcl9vbihuZGV2KTtcbiBcbkBAIC0zMTIsOCAmIzQzOzMyNyw4IEBAIHN0YXRpYyB2b2lkIG1hbmFfcGVyX3BvcnRfcXVldWVfcmVzZXRfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcbiBcdHJ0bmxfbG9jaygpO1xuIFxuLVx0LyogQmxvY2sgUkRNQSBmcm9tIGdyYWJiaW5nIHRoZSB2cG9ydCBkdXJpbmcgdGhlIGRldGFjaC9hdHRhY2hcbi1cdCAqIHdpbmRvdywgc2FtZSBhcyBtYW5hX3NldF9jaGFubmVscygpLlxuJiM0MztcdC8qIEV4Y2x1ZGUgUkRNQSBhY3Jvc3MgZGV0YWNoL2F0dGFjaDsgUlROTCBzZXJpYWxpemVzIGNoYW5uZWxfY2hhbmdpbmdcbiYjNDM7XHQgKiB3cml0ZXJzLlxuIFx0ICovXG4gXHRtdXRleF9sb2NrKFx1MDAyNmFwYy1cdTAwM2V2cG9ydF9tdXRleCk7XG4gXHRhcGMtXHUwMDNlY2hhbm5lbF9jaGFuZ2luZyA9IHRydWU7XG5AQCAtMzY2LDEzICYjNDM7MzgxLDIyIEBAIG5ldGRldl90eF90IG1hbmFfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdGlmICh1bmxpa2VseSghYXBjLVx1MDAzZXBvcnRfaXNfdXApKVxuIFx0XHRnb3RvIHR4X2Ryb3A7XG4gXG4mIzQzO1x0LyogUGFpciB3aXRoIG1hbmFfcHVibGlzaF9xc2V0KCkmIzM5O3MgcHJlLWdhdGUgc21wX3dtYigpOiBvYnNlcnZlIHF1ZXVlXG4mIzQzO1x0ICogZmllbGRzIGFmdGVyIHJlYWRpbmcgcG9ydF9pc191cC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzbXBfcm1iKCk7XG4mIzQzO1xuJiM0MztcdC8qIFJldGlyaW5nIFJYUXMgbWF5IHVzZSBpbmRpY2VzIGJleW9uZCB0aGUgbGl2ZSBxdWV1ZSBjb3VudC4gKi9cbiYjNDM7XHRpZiAodW5saWtlbHkodHhxX2lkeCBcdTAwM2U9IGFwYy1cdTAwM2VudW1fcXVldWVzKSlcbiYjNDM7XHRcdGdvdG8gdHhfZHJvcF9jb3VudDtcbiYjNDM7XG4gXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgTUFOQV9IRUFEUk9PTSkpXG4gXHRcdGdvdG8gdHhfZHJvcF9jb3VudDtcbiBcbiBcdHR4cSA9IFx1MDAyNmFwYy1cdTAwM2V0eF9xcFt0eHFfaWR4XS1cdTAwM2V0eHE7XG4gXHRnZG1hX3NxID0gdHhxLVx1MDAzZWdkbWFfc3E7XG4gXHRjcSA9IFx1MDAyNmFwYy1cdTAwM2V0eF9xcFt0eHFfaWR4XS1cdTAwM2V0eF9jcTtcbi1cdHR4X3N0YXRzID0gXHUwMDI2dHhxLVx1MDAzZXN0YXRzO1xuJiM0MztcdHR4X3N0YXRzID0gdHhxLVx1MDAzZXN0YXRzO1xuIFxuIFx0QlVJTERfQlVHX09OKE1BWF9UWF9XUUVfU0dMX0VOVFJJRVMgIT0gTUFOQV9NQVhfVFhfV1FFX1NHTF9FTlRSSUVTKTtcbiBcdGlmIChNQVhfU0tCX0ZSQUdTICYjNDM7IDIgXHUwMDNlIE1BWF9UWF9XUUVfU0dMX0VOVFJJRVMgXHUwMDI2XHUwMDI2XG5AQCAtNTUxLDcgJiM0Mzs1NzUsNyBAQCBuZXRkZXZfdHhfdCBtYW5hX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHQvKiBQb3B1bGF0ZWQgdGhlIHBhY2tldCBhbmQgYnl0ZXMgY291bnRlcnMgYmFzZWQgb24gcG9zdCBHU08gcGFja2V0XG4gXHQgKiBjYWxjdWxhdGlvbnNcbiBcdCAqL1xuLVx0dHhfc3RhdHMgPSBcdTAwMjZ0eHEtXHUwMDNlc3RhdHM7XG4mIzQzO1x0dHhfc3RhdHMgPSB0eHEtXHUwMDNlc3RhdHM7XG4gXHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnR4X3N0YXRzLVx1MDAzZXN5bmNwKTtcbiBcdHR4X3N0YXRzLVx1MDAzZXBhY2tldHMgJiM0Mzs9IG51bV9nc29fc2VnO1xuIFx0dHhfc3RhdHMtXHUwMDNlYnl0ZXMgJiM0Mzs9IGxlbiAmIzQzOyAoKG51bV9nc29fc2VnIC0gMSkgKiBnc29faHMpO1xuQEAgLTU5NywxNSAmIzQzOzYyMSwxNSBAQCBzdGF0aWMgdm9pZCBtYW5hX2dldF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFx0XHRcdCAgICAgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdClcbiB7XG4gXHRzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyA9IG5ldGRldl9wcml2KG5kZXYpO1xuLVx0dW5zaWduZWQgaW50IG51bV9xdWV1ZXMgPSBhcGMtXHUwMDNlbnVtX3F1ZXVlcztcbiBcdHN0cnVjdCBtYW5hX3N0YXRzX3J4ICpyeF9zdGF0cztcbiBcdHN0cnVjdCBtYW5hX3N0YXRzX3R4ICp0eF9zdGF0cztcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbnVtX3F1ZXVlcztcbiBcdHVuc2lnbmVkIGludCBzdGFydDtcbiBcdHU2NCBwYWNrZXRzLCBieXRlcztcbiBcdGludCBxO1xuIFxuLVx0aWYgKCFhcGMtXHUwMDNlcG9ydF9pc191cClcbi1cdFx0cmV0dXJuO1xuJiM0MztcdC8qIFJlcG9ydCBldmVuIHdoaWxlIGRvd247IGRldl9nZXRfc3RhdHMoKSB6ZXJvZXMgaXRzIG91dHB1dC4gKi9cbiYjNDM7XHRudW1fcXVldWVzID0gYXBjLVx1MDAzZW1heF9xdWV1ZXM7XG4gXG4gXHRuZXRkZXZfc3RhdHNfdG9fc3RhdHM2NChzdCwgXHUwMDI2bmRldi1cdTAwM2VzdGF0cyk7XG4gXG5AQCAtNjE1LDcgJiM0Mzs2MzksMTggQEAgc3RhdGljIHZvaWQgbWFuYV9nZXRfc3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcdHN0LVx1MDAzZXJ4X21pc3NlZF9lcnJvcnMgPSBhcGMtXHUwMDNlYWMtXHUwMDNlaGNfc3RhdHMuaGNfcnhfZGlzY2FyZHNfbm9fd3FlO1xuIFxuIFx0Zm9yIChxID0gMDsgcSBcdTAwM2MgbnVtX3F1ZXVlczsgcSYjNDM7JiM0MzspIHtcbi1cdFx0cnhfc3RhdHMgPSBcdTAwMjZhcGMtXHUwMDNlcnhxc1txXS1cdTAwM2VzdGF0cztcbiYjNDM7XHRcdHJ4X3N0YXRzID0gXHUwMDI2YXBjLVx1MDAzZXJ4cV9zdGF0c1txXTtcbiYjNDM7XG4mIzQzO1x0XHRkbyB7XG4mIzQzO1x0XHRcdHN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luKFx1MDAyNnJ4X3N0YXRzLVx1MDAzZXN5bmNwKTtcbiYjNDM7XHRcdFx0cGFja2V0cyA9IHJ4X3N0YXRzLVx1MDAzZXBhY2tldHM7XG4mIzQzO1x0XHRcdGJ5dGVzID0gcnhfc3RhdHMtXHUwMDNlYnl0ZXM7XG4mIzQzO1x0XHR9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoXHUwMDI2cnhfc3RhdHMtXHUwMDNlc3luY3AsIHN0YXJ0KSk7XG4mIzQzO1xuJiM0MztcdFx0c3QtXHUwMDNlcnhfcGFja2V0cyAmIzQzOz0gcGFja2V0cztcbiYjNDM7XHRcdHN0LVx1MDAzZXJ4X2J5dGVzICYjNDM7PSBieXRlcztcbiYjNDM7XG4mIzQzO1x0XHRyeF9zdGF0cyA9IFx1MDAyNmFwYy1cdTAwM2VyeHFfc3RhdHNfcmV0W3FdO1xuIFxuIFx0XHRkbyB7XG4gXHRcdFx0c3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oXHUwMDI2cnhfc3RhdHMtXHUwMDNlc3luY3ApO1xuQEAgLTYyOCw3ICYjNDM7NjYzLDcgQEAgc3RhdGljIHZvaWQgbWFuYV9nZXRfc3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcdH1cbiBcbiBcdGZvciAocSA9IDA7IHEgXHUwMDNjIG51bV9xdWV1ZXM7IHEmIzQzOyYjNDM7KSB7XG4tXHRcdHR4X3N0YXRzID0gXHUwMDI2YXBjLVx1MDAzZXR4X3FwW3FdLVx1MDAzZXR4cS5zdGF0cztcbiYjNDM7XHRcdHR4X3N0YXRzID0gXHUwMDI2YXBjLVx1MDAzZXR4cV9zdGF0c1txXTtcbiBcbiBcdFx0ZG8ge1xuIFx0XHRcdHN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luKFx1MDAyNnR4X3N0YXRzLVx1MDAzZXN5bmNwKTtcbkBAIC04NzgsMzIgJiM0Mzs5MTMsMzcgQEAgaW50IG1hbmFfcHJlX2FsbG9jX3J4YnVmcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKm1wYywgaW50IG5ld19tdHUsIGludCBudW1fcXVcbiBzdGF0aWMgaW50IG1hbmFfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IG5ld19tdHUpXG4ge1xuIFx0c3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICptcGMgPSBuZXRkZXZfcHJpdihuZGV2KTtcbi1cdHVuc2lnbmVkIGludCBvbGRfbXR1ID0gbmRldi1cdTAwM2VtdHU7XG4mIzQzO1x0c3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICpzY3JhdGNoO1xuJiM0MztcdHN0cnVjdCBtYW5hX3FzZXQgbmV3cSwgb2xkcTtcbiBcdGludCBlcnI7XG4gXG4tXHQvKiBQcmUtYWxsb2NhdGUgYnVmZmVycyB0byBwcmV2ZW50IGZhaWx1cmUgaW4gbWFuYV9hdHRhY2ggbGF0ZXIgKi9cbi1cdGVyciA9IG1hbmFfcHJlX2FsbG9jX3J4YnVmcyhtcGMsIG5ld19tdHUsIG1wYy1cdTAwM2VudW1fcXVldWVzKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0bmV0ZGV2X2VycihuZGV2LCBcJiMzNDtJbnN1ZmZpY2llbnQgbWVtb3J5IGZvciBuZXcgTVRVXFxuXCYjMzQ7KTtcbi1cdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRpZiAoIW1wYy1cdTAwM2Vwb3J0X2lzX3VwKSB7XG4mIzQzO1x0XHRtcGMtXHUwMDNlY29uZmlndXJlZF9tdHUgPSBuZXdfbXR1O1xuJiM0MztcdFx0V1JJVEVfT05DRShuZGV2LVx1MDAzZW10dSwgbmV3X210dSk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbi1cdGVyciA9IG1hbmFfZGV0YWNoKG5kZXYsIGZhbHNlKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0bmV0ZGV2X2VycihuZGV2LCBcJiMzNDttYW5hX2RldGFjaCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCBlcnIpO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbiYjNDM7XHRzY3JhdGNoID0gbWFuYV9xc2V0X3NjcmF0Y2hfYWxsb2MobXBjKTtcbiYjNDM7XHRpZiAoIXNjcmF0Y2gpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdFdSSVRFX09OQ0UobmRldi1cdTAwM2VtdHUsIG5ld19tdHUpO1xuJiM0MztcdGVyciA9IG1hbmFfYWxsb2NfcXNldChtcGMsIHNjcmF0Y2gsIG1wYy1cdTAwM2VyeF9xdWV1ZV9zaXplLFxuJiM0MztcdFx0XHQgICAgICBtcGMtXHUwMDNldHhfcXVldWVfc2l6ZSwgbXBjLVx1MDAzZXByaXZfZmxhZ3MsIG5ld19tdHUsXG4mIzQzO1x0XHRcdCAgICAgIG1wYy1cdTAwM2VicGZfcHJvZywgXHUwMDI2bmV3cSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZnJlZV9zY3JhdGNoO1xuIFxuLVx0ZXJyID0gbWFuYV9hdHRhY2gobmRldik7XG4mIzQzO1x0ZXJyID0gbWFuYV9wdWJsaXNoX3FzZXQobXBjLCBcdTAwMjZuZXdxLCBcdTAwMjZvbGRxKTtcbiBcdGlmIChlcnIpIHtcbi1cdFx0bmV0ZGV2X2VycihuZGV2LCBcJiMzNDttYW5hX2F0dGFjaCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCBlcnIpO1xuLVx0XHRXUklURV9PTkNFKG5kZXYtXHUwMDNlbXR1LCBvbGRfbXR1KTtcbiYjNDM7XHRcdG1hbmFfZnJlZV9xc2V0KHNjcmF0Y2gsIFx1MDAyNm5ld3EpO1xuJiM0MztcdFx0Z290byBmcmVlX3NjcmF0Y2g7XG4gXHR9XG4gXG4tb3V0OlxuLVx0bWFuYV9wcmVfZGVhbGxvY19yeGJ1ZnMobXBjKTtcbiYjNDM7XHRtYW5hX2ZyZWVfcXNldChzY3JhdGNoLCBcdTAwMjZvbGRxKTtcbiYjNDM7XG4mIzQzO2ZyZWVfc2NyYXRjaDpcbiYjNDM7XHRtYW5hX3B1Ymxpc2hfY2xvc2VfaWZfbmVlZGVkKG1wYyk7XG4mIzQzO1x0bWFuYV9xc2V0X3NjcmF0Y2hfZnJlZShzY3JhdGNoKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTEwMzYsNiAmIzQzOzEwNzYsMTA1IEBAIHN0YXRpYyB2b2lkIG1hbmFfY2xlYW51cF9wb3J0X2NvbnRleHQoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpXG4gXHRhcGMtXHUwMDNlcnhxcyA9IE5VTEw7XG4gfVxuIFxuJiM0MzsvKiBQb3J0IGxpZmV0aW1lIHByZXNlcnZlcyBjb3VudGVycyBhY3Jvc3MgcXVldWUgcmVwbGFjZW1lbnQuICovXG4mIzQzO3N0YXRpYyBpbnQgbWFuYV9hbGxvY19xdWV1ZV9zdGF0cyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCBpO1xuJiM0MztcbiYjNDM7XHRhcGMtXHUwMDNlcnhxX3N0YXRzID0ga2NhbGxvYyhhcGMtXHUwMDNlbWF4X3F1ZXVlcywgc2l6ZW9mKCphcGMtXHUwMDNlcnhxX3N0YXRzKSxcbiYjNDM7XHRcdFx0XHQgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFhcGMtXHUwMDNlcnhxX3N0YXRzKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGFwYy1cdTAwM2VyeHFfc3RhdHNfcmV0ID0ga2NhbGxvYyhhcGMtXHUwMDNlbWF4X3F1ZXVlcyxcbiYjNDM7XHRcdFx0XHQgICAgIHNpemVvZigqYXBjLVx1MDAzZXJ4cV9zdGF0c19yZXQpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWFwYy1cdTAwM2VyeHFfc3RhdHNfcmV0KVxuJiM0MztcdFx0Z290byBmcmVlX3J4cV9zdGF0cztcbiYjNDM7XG4mIzQzO1x0YXBjLVx1MDAzZXR4cV9zdGF0cyA9IGtjYWxsb2MoYXBjLVx1MDAzZW1heF9xdWV1ZXMsIHNpemVvZigqYXBjLVx1MDAzZXR4cV9zdGF0cyksXG4mIzQzO1x0XHRcdFx0IEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghYXBjLVx1MDAzZXR4cV9zdGF0cylcbiYjNDM7XHRcdGdvdG8gZnJlZV9yeHFfc3RhdHNfcmV0O1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhcGMtXHUwMDNlbWF4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NF9zdGF0c19pbml0KFx1MDAyNmFwYy1cdTAwM2VyeHFfc3RhdHNbaV0uc3luY3ApO1xuJiM0MztcdFx0dTY0X3N0YXRzX2luaXQoXHUwMDI2YXBjLVx1MDAzZXJ4cV9zdGF0c19yZXRbaV0uc3luY3ApO1xuJiM0MztcdFx0dTY0X3N0YXRzX2luaXQoXHUwMDI2YXBjLVx1MDAzZXR4cV9zdGF0c1tpXS5zeW5jcCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2ZyZWVfcnhxX3N0YXRzX3JldDpcbiYjNDM7XHRrZnJlZShhcGMtXHUwMDNlcnhxX3N0YXRzX3JldCk7XG4mIzQzO1x0YXBjLVx1MDAzZXJ4cV9zdGF0c19yZXQgPSBOVUxMO1xuJiM0MztmcmVlX3J4cV9zdGF0czpcbiYjNDM7XHRrZnJlZShhcGMtXHUwMDNlcnhxX3N0YXRzKTtcbiYjNDM7XHRhcGMtXHUwMDNlcnhxX3N0YXRzID0gTlVMTDtcbiYjNDM7XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWFuYV9mcmVlX3F1ZXVlX3N0YXRzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKVxuJiM0Mzt7XG4mIzQzO1x0a2ZyZWUoYXBjLVx1MDAzZXJ4cV9zdGF0cyk7XG4mIzQzO1x0YXBjLVx1MDAzZXJ4cV9zdGF0cyA9IE5VTEw7XG4mIzQzO1x0a2ZyZWUoYXBjLVx1MDAzZXJ4cV9zdGF0c19yZXQpO1xuJiM0MztcdGFwYy1cdTAwM2VyeHFfc3RhdHNfcmV0ID0gTlVMTDtcbiYjNDM7XHRrZnJlZShhcGMtXHUwMDNldHhxX3N0YXRzKTtcbiYjNDM7XHRhcGMtXHUwMDNldHhxX3N0YXRzID0gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogRm9sZCB1bmRlciBSVE5MIGFmdGVyIGRyYWluX3N0YXRzIHdyaXRlcnMgcXVpZXNjZS4gQ2xlYXIgZHJhaW5fc3RhdHMgdG9cbiYjNDM7ICogcHJldmVudCBkb3VibGUgY291bnRpbmcgb24gcm9sbGJhY2suXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBtYW5hX2ZvbGRfcnhxX3N0YXRzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxuJiM0MztcdFx0XHRcdHN0cnVjdCBtYW5hX3J4cSAqcnhxKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1hbmFfc3RhdHNfcnggKnNyYyA9IFx1MDAyNnJ4cS1cdTAwM2VkcmFpbl9zdGF0cztcbiYjNDM7XHRzdHJ1Y3QgbWFuYV9zdGF0c19yeCAqZHN0O1xuJiM0MztcdHVuc2lnbmVkIGludCBpO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfUlROTCgpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWFwYy1cdTAwM2VyeHFfc3RhdHNfcmV0IHx8IHJ4cS1cdTAwM2VyeHFfaWR4IFx1MDAzZT0gYXBjLVx1MDAzZW1heF9xdWV1ZXMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGRzdCA9IFx1MDAyNmFwYy1cdTAwM2VyeHFfc3RhdHNfcmV0W3J4cS1cdTAwM2VyeHFfaWR4XTtcbiYjNDM7XG4mIzQzO1x0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZkc3QtXHUwMDNlc3luY3ApO1xuJiM0MztcdGRzdC1cdTAwM2VwYWNrZXRzXHRcdCYjNDM7PSBzcmMtXHUwMDNlcGFja2V0cztcbiYjNDM7XHRkc3QtXHUwMDNlYnl0ZXNcdFx0JiM0Mzs9IHNyYy1cdTAwM2VieXRlcztcbiYjNDM7XHRkc3QtXHUwMDNleGRwX2Ryb3BcdFx0JiM0Mzs9IHNyYy1cdTAwM2V4ZHBfZHJvcDtcbiYjNDM7XHRkc3QtXHUwMDNleGRwX3R4XHRcdCYjNDM7PSBzcmMtXHUwMDNleGRwX3R4O1xuJiM0MztcdGRzdC1cdTAwM2V4ZHBfcmVkaXJlY3RcdCYjNDM7PSBzcmMtXHUwMDNleGRwX3JlZGlyZWN0O1xuJiM0MztcdGRzdC1cdTAwM2Vwa3RfbGVuMF9lcnJcdCYjNDM7PSBzcmMtXHUwMDNlcGt0X2xlbjBfZXJyO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZHN0LVx1MDAzZWNvYWxlc2NlZF9jcWUpOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGRzdC1cdTAwM2Vjb2FsZXNjZWRfY3FlW2ldICYjNDM7PSBzcmMtXHUwMDNlY29hbGVzY2VkX2NxZVtpXTtcbiYjNDM7XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZkc3QtXHUwMDNlc3luY3ApO1xuJiM0MztcbiYjNDM7XHRzcmMtXHUwMDNlcGFja2V0c1x0XHQ9IDA7XG4mIzQzO1x0c3JjLVx1MDAzZWJ5dGVzXHRcdD0gMDtcbiYjNDM7XHRzcmMtXHUwMDNleGRwX2Ryb3BcdFx0PSAwO1xuJiM0MztcdHNyYy1cdTAwM2V4ZHBfdHhcdFx0PSAwO1xuJiM0MztcdHNyYy1cdTAwM2V4ZHBfcmVkaXJlY3RcdD0gMDtcbiYjNDM7XHRzcmMtXHUwMDNlcGt0X2xlbjBfZXJyXHQ9IDA7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShzcmMtXHUwMDNlY29hbGVzY2VkX2NxZSk7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0c3JjLVx1MDAzZWNvYWxlc2NlZF9jcWVbaV0gPSAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBtYW5hX2ZvbGRfcXNldF9yeF9zdGF0cyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IG1hbmFfcXNldCAqcXNldClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCBxO1xuJiM0MztcbiYjNDM7XHRpZiAoIXFzZXQtXHUwMDNlcnhxcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChxID0gMDsgcSBcdTAwM2MgcXNldC1cdTAwM2VudW1fcXVldWVzOyBxJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHFzZXQtXHUwMDNlcnhxc1txXSlcbiYjNDM7XHRcdFx0bWFuYV9mb2xkX3J4cV9zdGF0cyhhcGMsIHFzZXQtXHUwMDNlcnhxc1txXSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIG1hbmFfY2xlYW51cF9pbmRpcl90YWJsZShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYylcbiB7XG4gXHRhcGMtXHUwMDNlaW5kaXJfdGFibGVfc3ogPSAwO1xuQEAgLTEwNDUsNiAmIzQzOzExODQsNyBAQCBzdGF0aWMgdm9pZCBtYW5hX2NsZWFudXBfaW5kaXJfdGFibGUoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpXG4gXG4gc3RhdGljIGludCBtYW5hX2luaXRfcG9ydF9jb250ZXh0KHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKVxuIHtcbiYjNDM7XHRrZnJlZShhcGMtXHUwMDNlcnhxcyk7XG4gXHRhcGMtXHUwMDNlcnhxcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgbWFuYV9yeHEgKiwgYXBjLVx1MDAzZW51bV9xdWV1ZXMpO1xuIFxuIFx0cmV0dXJuICFhcGMtXHUwMDNlcnhxcyA/IC1FTk9NRU0gOiAwO1xuQEAgLTE3MzMsNyAmIzQzOzE4NzMsNyBAQCB2b2lkIG1hbmFfZGVzdHJveV9lcShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYylcbiBcdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShhcGMtXHUwMDNlbWFuYV9lcXNfZGVidWdmcyk7XG4gXHRhcGMtXHUwMDNlbWFuYV9lcXNfZGVidWdmcyA9IE5VTEw7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhcGMtXHUwMDNlbnVtX3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhcGMtXHUwMDNlbnVtX2VxczsgaSYjNDM7JiM0MzspIHtcbiBcdFx0ZXEgPSBhcGMtXHUwMDNlZXFzW2ldLmVxO1xuIFx0XHRpZiAoIWVxKVxuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTE3NDEsMjQgJiM0MzsxODgxLDI4IEBAIHZvaWQgbWFuYV9kZXN0cm95X2VxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKVxuIFx0XHRtc2kgPSBlcS1cdTAwM2VlcS5tc2l4X2luZGV4O1xuIFx0XHRtYW5hX2dkX2Rlc3Ryb3lfcXVldWUoZ2MsIGVxKTtcbiBcdFx0bWFuYV9nZF9wdXRfZ2ljKGdjLCAhZ2MtXHUwMDNlbXNpX3NoYXJpbmcsIG1zaSk7XG4mIzQzO1x0XHRhcGMtXHUwMDNlZXFzW2ldLmVxID0gTlVMTDtcbiYjNDM7XHRcdGFwYy1cdTAwM2VlcXNbaV0ubWFuYV9lcV9kZWJ1Z2ZzID0gTlVMTDtcbiBcdH1cbiBcbiBcdGtmcmVlKGFwYy1cdTAwM2VlcXMpO1xuIFx0YXBjLVx1MDAzZWVxcyA9IE5VTEw7XG4mIzQzO1x0YXBjLVx1MDAzZW51bV9lcXMgPSAwO1xuIH1cbiBFWFBPUlRfU1lNQk9MX05TKG1hbmFfZGVzdHJveV9lcSwgXCYjMzQ7TkVUX01BTkFcJiMzNDspO1xuIFxuIHN0YXRpYyB2b2lkIG1hbmFfY3JlYXRlX2VxX2RlYnVnZnMoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsIGludCBpKVxuIHtcbi1cdHN0cnVjdCBtYW5hX2VxIGVxID0gYXBjLVx1MDAzZWVxc1tpXTtcbiYjNDM7XHRzdHJ1Y3QgbWFuYV9lcSAqZXEgPSBcdTAwMjZhcGMtXHUwMDNlZXFzW2ldO1xuIFx0Y2hhciBlcW51bVszMl07XG4gXG4gXHRzcHJpbnRmKGVxbnVtLCBcJiMzNDtlcSVkXCYjMzQ7LCBpKTtcbi1cdGVxLm1hbmFfZXFfZGVidWdmcyA9IGRlYnVnZnNfY3JlYXRlX2RpcihlcW51bSwgYXBjLVx1MDAzZW1hbmFfZXFzX2RlYnVnZnMpO1xuLVx0ZGVidWdmc19jcmVhdGVfdTMyKFwmIzM0O2hlYWRcJiMzNDssIDA0MDAsIGVxLm1hbmFfZXFfZGVidWdmcywgXHUwMDI2ZXEuZXEtXHUwMDNlaGVhZCk7XG4tXHRkZWJ1Z2ZzX2NyZWF0ZV91MzIoXCYjMzQ7dGFpbFwmIzM0OywgMDQwMCwgZXEubWFuYV9lcV9kZWJ1Z2ZzLCBcdTAwMjZlcS5lcS1cdTAwM2V0YWlsKTtcbi1cdGRlYnVnZnNfY3JlYXRlX3UzMihcJiMzNDtpcnFcJiMzNDssIDA0MDAsIGVxLm1hbmFfZXFfZGVidWdmcywgXHUwMDI2ZXEuZXEtXHUwMDNlZXEuaXJxKTtcbi1cdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7ZXFfZHVtcFwmIzM0OywgMDQwMCwgZXEubWFuYV9lcV9kZWJ1Z2ZzLCBlcS5lcSwgXHUwMDI2bWFuYV9kYmdfcV9mb3BzKTtcbiYjNDM7XHRlcS1cdTAwM2VtYW5hX2VxX2RlYnVnZnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZXFudW0sIGFwYy1cdTAwM2VtYW5hX2Vxc19kZWJ1Z2ZzKTtcbiYjNDM7XHRkZWJ1Z2ZzX2NyZWF0ZV91MzIoXCYjMzQ7aGVhZFwmIzM0OywgMDQwMCwgZXEtXHUwMDNlbWFuYV9lcV9kZWJ1Z2ZzLCBcdTAwMjZlcS1cdTAwM2VlcS1cdTAwM2VoZWFkKTtcbiYjNDM7XHRkZWJ1Z2ZzX2NyZWF0ZV91MzIoXCYjMzQ7dGFpbFwmIzM0OywgMDQwMCwgZXEtXHUwMDNlbWFuYV9lcV9kZWJ1Z2ZzLCBcdTAwMjZlcS1cdTAwM2VlcS1cdTAwM2V0YWlsKTtcbiYjNDM7XHRkZWJ1Z2ZzX2NyZWF0ZV91MzIoXCYjMzQ7aXJxXCYjMzQ7LCAwNDAwLCBlcS1cdTAwM2VtYW5hX2VxX2RlYnVnZnMsIFx1MDAyNmVxLVx1MDAzZWVxLVx1MDAzZWVxLmlycSk7XG4mIzQzO1x0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtlcV9kdW1wXCYjMzQ7LCAwNDAwLCBlcS1cdTAwM2VtYW5hX2VxX2RlYnVnZnMsIGVxLVx1MDAzZWVxLFxuJiM0MztcdFx0XHQgICAgXHUwMDI2bWFuYV9kYmdfcV9mb3BzKTtcbiB9XG4gXG4gaW50IG1hbmFfY3JlYXRlX2VxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKVxuQEAgLTE3NzMsOSAmIzQzOzE5MTcsMTEgQEAgaW50IG1hbmFfY3JlYXRlX2VxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKVxuIFxuIFx0aWYgKFdBUk5fT04oYXBjLVx1MDAzZWVxcykpXG4gXHRcdHJldHVybiAtRUVYSVNUO1xuLVx0YXBjLVx1MDAzZWVxcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgbWFuYV9lcSwgYXBjLVx1MDAzZW51bV9xdWV1ZXMpO1xuJiM0MztcdC8qIEtlZXAgRVEgYXJyYXkgYWRkcmVzc2VzIHN0YWJsZSB3aGlsZSBDUXMgcmVmZXJlbmNlIHRoZW0uICovXG4mIzQzO1x0YXBjLVx1MDAzZWVxcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgbWFuYV9lcSwgYXBjLVx1MDAzZW1heF9xdWV1ZXMpO1xuIFx0aWYgKCFhcGMtXHUwMDNlZXFzKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRhcGMtXHUwMDNlbnVtX2VxcyA9IDA7XG4gXG4gXHRzcGVjLnR5cGUgPSBHRE1BX0VRO1xuIFx0c3BlYy5tb25pdG9yX2F2bF9idWYgPSBmYWxzZTtcbkBAIC0xODA1LDYgJiM0MzsxOTUxLDcgQEAgaW50IG1hbmFfY3JlYXRlX2VxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKVxuIFx0XHR9XG4gXHRcdGFwYy1cdTAwM2VlcXNbaV0uZXEtXHUwMDNlZXEuaXJxID0gZ2ljLVx1MDAzZWlycTtcbiBcdFx0bWFuYV9jcmVhdGVfZXFfZGVidWdmcyhhcGMsIGkpO1xuJiM0MztcdFx0YXBjLVx1MDAzZW51bV9lcXMgPSBpICYjNDM7IDE7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0xODE0LDYgJiM0MzsxOTYxLDg3IEBAIGludCBtYW5hX2NyZWF0ZV9lcShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYylcbiB9XG4gRVhQT1JUX1NZTUJPTF9OUyhtYW5hX2NyZWF0ZV9lcSwgXCYjMzQ7TkVUX01BTkFcJiMzNDspO1xuIFxuJiM0MzsvKiBHcm93IHRoZSBzaGFyZWQgRVEgcG9vbCB3aXRob3V0IHJlcGxhY2luZyBsaXZlIGVudHJpZXMuICovXG4mIzQzO3N0YXRpYyBpbnQgbWFuYV9ncm93X2VxcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgdW5zaWduZWQgaW50IG5lZWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZ2RtYV9kZXYgKmdkID0gYXBjLVx1MDAzZWFjLVx1MDAzZWdkbWFfZGV2O1xuJiM0MztcdHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjID0gZ2QtXHUwMDNlZ2RtYV9jb250ZXh0O1xuJiM0MztcdHN0cnVjdCBnZG1hX3F1ZXVlX3NwZWMgc3BlYyA9IHt9O1xuJiM0MztcdHN0cnVjdCBnZG1hX2lycV9jb250ZXh0ICpnaWM7XG4mIzQzO1x0dW5zaWduZWQgaW50IGk7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XHRpbnQgbXNpO1xuJiM0MztcbiYjNDM7XHRpZiAoV0FSTl9PTighYXBjLVx1MDAzZWVxcykpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aWYgKG5lZWQgXHUwMDNlIGFwYy1cdTAwM2VtYXhfcXVldWVzKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChuZWVkIFx1MDAzYz0gYXBjLVx1MDAzZW51bV9lcXMpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0c3BlYy50eXBlID0gR0RNQV9FUTtcbiYjNDM7XHRzcGVjLm1vbml0b3JfYXZsX2J1ZiA9IGZhbHNlO1xuJiM0MztcdHNwZWMucXVldWVfc2l6ZSA9IEVRX1NJWkU7XG4mIzQzO1x0c3BlYy5lcS5jYWxsYmFjayA9IE5VTEw7XG4mIzQzO1x0c3BlYy5lcS5jb250ZXh0ID0gYXBjLVx1MDAzZWVxcztcbiYjNDM7XHRzcGVjLmVxLmxvZzJfdGhyb3R0bGVfbGltaXQgPSBMT0cyX0VRX1RIUk9UVExFO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSBhcGMtXHUwMDNlbnVtX2VxczsgaSBcdTAwM2MgbmVlZDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdG1zaSA9IChpICYjNDM7IDEpICUgZ2MtXHUwMDNlbnVtX21zaXhfdXNhYmxlO1xuJiM0MztcbiYjNDM7XHRcdGdpYyA9IG1hbmFfZ2RfZ2V0X2dpYyhnYywgIWdjLVx1MDAzZW1zaV9zaGFyaW5nLCBcdTAwMjZtc2kpO1xuJiM0MztcdFx0aWYgKElTX0VSUihnaWMpKSB7XG4mIzQzO1x0XHRcdGVyciA9IFBUUl9FUlIoZ2ljKTtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRzcGVjLmVxLm1zaXhfaW5kZXggPSBtc2k7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gbWFuYV9nZF9jcmVhdGVfbWFuYV9lcShnZCwgXHUwMDI2c3BlYywgXHUwMDI2YXBjLVx1MDAzZWVxc1tpXS5lcSk7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdGRldl9lcnIoZ2MtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gZ3JvdyBFUSAldSA6ICVkXFxuXCYjMzQ7LCBpLCBlcnIpO1xuJiM0MztcdFx0XHRtYW5hX2dkX3B1dF9naWMoZ2MsICFnYy1cdTAwM2Vtc2lfc2hhcmluZywgbXNpKTtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRhcGMtXHUwMDNlZXFzW2ldLmVxLVx1MDAzZWVxLmlycSA9IGdpYy1cdTAwM2VpcnE7XG4mIzQzO1x0XHRtYW5hX2NyZWF0ZV9lcV9kZWJ1Z2ZzKGFwYywgaSk7XG4mIzQzO1x0XHRhcGMtXHUwMDNlbnVtX2VxcyA9IGkgJiM0MzsgMTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztvdXQ6XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQWxsIENRcyByZWZlcmVuY2luZyBFUXMgYXQgb3IgYWJvdmUgQGtlZXAgbXVzdCBiZSBkZXN0cm95ZWQgZmlyc3QuICovXG4mIzQzO3N0YXRpYyB2b2lkIG1hbmFfc2hyaW5rX2VxcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgdW5zaWduZWQgaW50IGtlZXApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IGFwYy1cdTAwM2VhYy1cdTAwM2VnZG1hX2Rldi1cdTAwM2VnZG1hX2NvbnRleHQ7XG4mIzQzO1x0c3RydWN0IGdkbWFfcXVldWUgKmVxO1xuJiM0MztcdHVuc2lnbmVkIGludCBtc2k7XG4mIzQzO1x0dW5zaWduZWQgaW50IGk7XG4mIzQzO1xuJiM0MztcdGlmICghYXBjLVx1MDAzZWVxcyB8fCBrZWVwIFx1MDAzZT0gYXBjLVx1MDAzZW51bV9lcXMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IGtlZXA7IGkgXHUwMDNjIGFwYy1cdTAwM2VudW1fZXFzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0ZXEgPSBhcGMtXHUwMDNlZXFzW2ldLmVxO1xuJiM0MztcdFx0aWYgKCFlcSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGFwYy1cdTAwM2VlcXNbaV0ubWFuYV9lcV9kZWJ1Z2ZzKTtcbiYjNDM7XHRcdGFwYy1cdTAwM2VlcXNbaV0ubWFuYV9lcV9kZWJ1Z2ZzID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0XHRtc2kgPSBlcS1cdTAwM2VlcS5tc2l4X2luZGV4O1xuJiM0MztcdFx0bWFuYV9nZF9kZXN0cm95X3F1ZXVlKGdjLCBlcSk7XG4mIzQzO1x0XHRtYW5hX2dkX3B1dF9naWMoZ2MsICFnYy1cdTAwM2Vtc2lfc2hhcmluZywgbXNpKTtcbiYjNDM7XHRcdGFwYy1cdTAwM2VlcXNbaV0uZXEgPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YXBjLVx1MDAzZW51bV9lcXMgPSBrZWVwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgbWFuYV9mZW5jZV9ycShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgc3RydWN0IG1hbmFfcnhxICpyeHEpXG4ge1xuIFx0c3RydWN0IG1hbmFfZmVuY2VfcnFfcmVzcCByZXNwID0ge307XG5AQCAtMjAxOCw3ICYjNDM7MjI0Niw5IEBAIHN0YXRpYyB2b2lkIG1hbmFfcG9sbF90eF9jcShzdHJ1Y3QgbWFuYV9jcSAqY3EpXG4gXHQvKiBFbnN1cmUgY2hlY2tpbmcgdHhxX3N0b3BwZWQgYmVmb3JlIGFwYy1cdTAwM2Vwb3J0X2lzX3VwLiAqL1xuIFx0c21wX3JtYigpO1xuIFxuLVx0aWYgKHR4cV9zdG9wcGVkIFx1MDAyNlx1MDAyNiBhcGMtXHUwMDNlcG9ydF9pc191cCBcdTAwMjZcdTAwMjYgYXZhaWxfc3BhY2UgXHUwMDNlPSBNQVhfVFhfV1FFX1NJWkUpIHtcbiYjNDM7XHQvKiBPcmRlciB0aGUgc3RvcHBlZC1zdGF0ZSByZWFkIGJlZm9yZSB0aGUgcmV0aXJpbmcgcmVhZC4gKi9cbiYjNDM7XHRpZiAodHhxX3N0b3BwZWQgXHUwMDI2XHUwMDI2ICFSRUFEX09OQ0UodHhxLVx1MDAzZXJldGlyaW5nKSBcdTAwMjZcdTAwMjYgYXBjLVx1MDAzZXBvcnRfaXNfdXAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGF2YWlsX3NwYWNlIFx1MDAzZT0gTUFYX1RYX1dRRV9TSVpFKSB7XG4gXHRcdG5ldGlmX3R4X3dha2VfcXVldWUobmV0X3R4cSk7XG4gXHRcdGFwYy1cdTAwM2VldGhfc3RhdHMud2FrZV9xdWV1ZSYjNDM7JiM0Mzs7XG4gXHR9XG5AQCAtMjA4MSw3ICYjNDM7MjMxMSw3IEBAIHN0YXRpYyB2b2lkIG1hbmFfcnhfc2tiKHZvaWQgKmJ1Zl92YSwgYm9vbCBmcm9tX3Bvb2wsXG4gXHRcdFx0c3RydWN0IG1hbmFfcnhjb21wX29vYiAqY3FlLCBzdHJ1Y3QgbWFuYV9yeHEgKnJ4cSxcbiBcdFx0XHR1MzIgcGt0X2xlbiwgdTMyIHBrdF9oYXNoKVxuIHtcbi1cdHN0cnVjdCBtYW5hX3N0YXRzX3J4ICpyeF9zdGF0cyA9IFx1MDAyNnJ4cS1cdTAwM2VzdGF0cztcbiYjNDM7XHRzdHJ1Y3QgbWFuYV9zdGF0c19yeCAqcnhfc3RhdHMgPSBtYW5hX3J4cV9zdGF0cyhyeHEpO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSByeHEtXHUwMDNlbmRldjtcbiBcdHUxNiByeHFfaWR4ID0gcnhxLVx1MDAzZXJ4cV9pZHg7XG4gXHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGk7XG5AQCAtMjMxNCw2ICYjNDM7MjU0NCw3IEBAIHN0YXRpYyB2b2lkIG1hbmFfcHJvY2Vzc19yeF9jcWUoc3RydWN0IG1hbmFfcnhxICpyeHEsIHN0cnVjdCBtYW5hX2NxICpjcSxcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcnhxLVx1MDAzZW5kZXY7XG4gXHRzdHJ1Y3QgbWFuYV9yZWN2X2J1Zl9vb2IgKnJ4YnVmX29vYjtcbiBcdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjO1xuJiM0MztcdHN0cnVjdCBtYW5hX3N0YXRzX3J4ICpyeF9zdGF0cztcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGdjLVx1MDAzZWRldjtcbiBcdGJvb2wgY29hbGVzY2VkXzggPSBmYWxzZTtcbiBcdGJvb2wgY29hbGVzY2VkID0gZmFsc2U7XG5AQCAtMjM5NSwxMyAmIzQzOzI2MjYsMTUgQEAgc3RhdGljIHZvaWQgbWFuYV9wcm9jZXNzX3J4X2NxZShzdHJ1Y3QgbWFuYV9yeHEgKnJ4cSwgc3RydWN0IG1hbmFfY3EgKmNxLFxuIFx0ICogQ29hbGVzY2VkIENRRXMgaGF2ZSBhdCBsZWFzdCAyIHBhY2tldHMsIHNvIGluZGV4IGlzIHBrdF9pIC0gMi5cbiBcdCAqL1xuIFx0aWYgKHBrdF9pIFx1MDAzZSAxKSB7XG4tXHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2cnhxLVx1MDAzZXN0YXRzLnN5bmNwKTtcbi1cdFx0cnhxLVx1MDAzZXN0YXRzLmNvYWxlc2NlZF9jcWVbcGt0X2kgLSAyXSYjNDM7JiM0Mzs7XG4tXHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnJ4cS1cdTAwM2VzdGF0cy5zeW5jcCk7XG4mIzQzO1x0XHRyeF9zdGF0cyA9IG1hbmFfcnhxX3N0YXRzKHJ4cSk7XG4mIzQzO1x0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnJ4X3N0YXRzLVx1MDAzZXN5bmNwKTtcbiYjNDM7XHRcdHJ4X3N0YXRzLVx1MDAzZWNvYWxlc2NlZF9jcWVbcGt0X2kgLSAyXSYjNDM7JiM0Mzs7XG4mIzQzO1x0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZyeF9zdGF0cy1cdTAwM2VzeW5jcCk7XG4gXHR9IGVsc2UgaWYgKCFwa3RfaSBcdTAwMjZcdTAwMjYgIXBrdGxlbikge1xuLVx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnJ4cS1cdTAwM2VzdGF0cy5zeW5jcCk7XG4tXHRcdHJ4cS1cdTAwM2VzdGF0cy5wa3RfbGVuMF9lcnImIzQzOyYjNDM7O1xuLVx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZyeHEtXHUwMDNlc3RhdHMuc3luY3ApO1xuJiM0MztcdFx0cnhfc3RhdHMgPSBtYW5hX3J4cV9zdGF0cyhyeHEpO1xuJiM0MztcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZyeF9zdGF0cy1cdTAwM2VzeW5jcCk7XG4mIzQzO1x0XHRyeF9zdGF0cy1cdTAwM2Vwa3RfbGVuMF9lcnImIzQzOyYjNDM7O1xuJiM0MztcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2cnhfc3RhdHMtXHUwMDNlc3luY3ApO1xuIFx0XHRuZXRkZXZfZXJyX29uY2UobmRldixcbiBcdFx0XHRcdFwmIzM0O1JYIHBrdCBsZW49MCwgcnE9JXUsIGNxPSV1LCByeG9iaj0weCVsbHhcXG5cJiMzNDssXG4gXHRcdFx0XHRyeHEtXHUwMDNlZ2RtYV9pZCwgY3EtXHUwMDNlZ2RtYV9pZCwgcnhxLVx1MDAzZXJ4b2JqKTtcbkBAIC0yNTMzLDggJiM0MzsyNzY2LDEyIEBAIHN0YXRpYyB2b2lkIG1hbmFfdXBkYXRlX3J4X2RpbShzdHJ1Y3QgbWFuYV9jcSAqY3EpXG4gXHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2YXBjLVx1MDAzZXJ4X2RpbV9lbmFibGVkKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0ZGltX3VwZGF0ZV9zYW1wbGUoUkVBRF9PTkNFKGNxLVx1MDAzZWRpbV9ldmVudF9jdHIpLCByeHEtXHUwMDNlc3RhdHMucGFja2V0cyxcbi1cdFx0XHQgIHJ4cS1cdTAwM2VzdGF0cy5ieXRlcywgXHUwMDI2ZGltX3NhbXBsZSk7XG4mIzQzO1x0LyogU2tpcCByZXRpcmluZyBSWFFzOyBESU0gcmVhZHMgc2hhcmVkIHBlci1pbmRleCBjb3VudGVycy4gKi9cbiYjNDM7XHRpZiAoUkVBRF9PTkNFKHJ4cS1cdTAwM2VyZXRpcmluZykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGRpbV91cGRhdGVfc2FtcGxlKFJFQURfT05DRShjcS1cdTAwM2VkaW1fZXZlbnRfY3RyKSwgcnhxLVx1MDAzZXN0YXRzLVx1MDAzZXBhY2tldHMsXG4mIzQzO1x0XHRcdCAgcnhxLVx1MDAzZXN0YXRzLVx1MDAzZWJ5dGVzLCBcdTAwMjZkaW1fc2FtcGxlKTtcbiBcdG5ldF9kaW0oXHUwMDI2Y3EtXHUwMDNlZGltLCBcdTAwMjZkaW1fc2FtcGxlKTtcbiB9XG4gXG5AQCAtMjY0MSw3ICYjNDM7Mjg3OCw5IEBAIHN0YXRpYyB2b2lkIG1hbmFfZGVpbml0X3R4cShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgc3RydWN0IG1hbmFfdHhxICp0eHEpXG4gXHRtYW5hX2dkX2Rlc3Ryb3lfcXVldWUoZ2QtXHUwMDNlZ2RtYV9jb250ZXh0LCB0eHEtXHUwMDNlZ2RtYV9zcSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1hbmFfZGVzdHJveV90eHEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpXG4mIzQzOy8qIEtlZXAgdGhlIGFycmF5IGFuZCBxdWV1ZXMgYmVsb3cgQGZpcnN0OyBjbGVhciBmcmVlZCBzbG90cy4gKi9cbiYjNDM7c3RhdGljIHZvaWQgbWFuYV9kZXN0cm95X3R4cV9mcm9tKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxuJiM0MztcdFx0XHRcdCAgdW5zaWduZWQgaW50IGZpcnN0KVxuIHtcbiBcdHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaTtcbiBcdGludCBpO1xuQEAgLTI2NDksNyAmIzQzOzI4ODgsNyBAQCBzdGF0aWMgdm9pZCBtYW5hX2Rlc3Ryb3lfdHhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKVxuIFx0aWYgKCFhcGMtXHUwMDNldHhfcXApXG4gXHRcdHJldHVybjtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFwYy1cdTAwM2VudW1fcXVldWVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdGZvciAoaSA9IGZpcnN0OyBpIFx1MDAzYyBhcGMtXHUwMDNlbnVtX3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKCFhcGMtXHUwMDNldHhfcXBbaV0pXG4gXHRcdFx0Y29udGludWU7XG4gXG5AQCAtMjY3Myw3ICYjNDM7MjkxMiwxNiBAQCBzdGF0aWMgdm9pZCBtYW5hX2Rlc3Ryb3lfdHhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKVxuIFx0XHRtYW5hX2RlaW5pdF90eHEoYXBjLCBcdTAwMjZhcGMtXHUwMDNldHhfcXBbaV0tXHUwMDNldHhxKTtcbiBcbiBcdFx0a3ZmcmVlKGFwYy1cdTAwM2V0eF9xcFtpXSk7XG4mIzQzO1x0XHRhcGMtXHUwMDNldHhfcXBbaV0gPSBOVUxMO1xuIFx0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBtYW5hX2Rlc3Ryb3lfdHhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFhcGMtXHUwMDNldHhfcXApXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdG1hbmFfZGVzdHJveV90eHFfZnJvbShhcGMsIDApO1xuIFxuIFx0a2ZyZWUoYXBjLVx1MDAzZXR4X3FwKTtcbiBcdGFwYy1cdTAwM2V0eF9xcCA9IE5VTEw7XG5AQCAtMjcwNCw4ICYjNDM7Mjk1MiwxMSBAQCBzdGF0aWMgdm9pZCBtYW5hX2NyZWF0ZV90eHFfZGVidWdmcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgaW50IGlkeClcbiBcdFx0XHQgICAgdHhfcXAtXHUwMDNldHhfY3EuZ2RtYV9jcSwgXHUwMDI2bWFuYV9kYmdfcV9mb3BzKTtcbiB9XG4gXG4mIzQzOy8qIFdpdGggQGZpcnN0IG5vbnplcm8sIHVzZSB0aGUgZXhpc3RpbmcgYXJyYXkgYW5kIHVud2luZCBvbmx5IG5ldyBxdWV1ZXMgb25cbiYjNDM7ICogZmFpbHVyZS5cbiYjNDM7ICovXG4gc3RhdGljIGludCBtYW5hX2NyZWF0ZV90eHEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXG4tXHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcbiYjNDM7XHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgdW5zaWduZWQgaW50IGZpcnN0KVxuIHtcbiBcdHN0cnVjdCBtYW5hX2NvbnRleHQgKmFjID0gYXBjLVx1MDAzZWFjO1xuIFx0c3RydWN0IGdkbWFfZGV2ICpnZCA9IGFjLVx1MDAzZWdkbWFfZGV2O1xuQEAgLTI3MjAsOSAmIzQzOzI5NzEsMTQgQEAgc3RhdGljIGludCBtYW5hX2NyZWF0ZV90eHEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXG4gXHRpbnQgZXJyO1xuIFx0aW50IGk7XG4gXG4tXHRhcGMtXHUwMDNldHhfcXAgPSBremFsbG9jX29ianMoc3RydWN0IG1hbmFfdHhfcXAgKiwgYXBjLVx1MDAzZW51bV9xdWV1ZXMpO1xuLVx0aWYgKCFhcGMtXHUwMDNldHhfcXApXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdGlmIChmaXJzdCkge1xuJiM0MztcdFx0aWYgKFdBUk5fT04oIWFwYy1cdTAwM2V0eF9xcCkpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRhcGMtXHUwMDNldHhfcXAgPSBremFsbG9jX29ianMoc3RydWN0IG1hbmFfdHhfcXAgKiwgYXBjLVx1MDAzZW51bV9xdWV1ZXMpO1xuJiM0MztcdFx0aWYgKCFhcGMtXHUwMDNldHhfcXApXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiBcbiBcdC8qICBUaGUgbWluaW11bSBzaXplIG9mIHRoZSBXUUUgaXMgMzIgYnl0ZXMsIGhlbmNlXG4gXHQgKiAgYXBjLVx1MDAzZXR4X3F1ZXVlX3NpemUgcmVwcmVzZW50cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgV1FFc1xuQEAgLTI3MzksNyAmIzQzOzI5OTUsNyBAQCBzdGF0aWMgaW50IG1hbmFfY3JlYXRlX3R4cShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcbiBcbiBcdGdjID0gZ2QtXHUwMDNlZ2RtYV9jb250ZXh0O1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYXBjLVx1MDAzZW51bV9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0Zm9yIChpID0gZmlyc3Q7IGkgXHUwMDNjIGFwYy1cdTAwM2VudW1fcXVldWVzOyBpJiM0MzsmIzQzOykge1xuIFx0XHRhcGMtXHUwMDNldHhfcXBbaV0gPSBrdnphbGxvY19vYmooKmFwYy1cdTAwM2V0eF9xcFtpXSk7XG4gXHRcdGlmICghYXBjLVx1MDAzZXR4X3FwW2ldKSB7XG4gXHRcdFx0ZXJyID0gLUVOT01FTTtcbkBAIC0yNzUxLDkgJiM0MzszMDA3LDEwIEBAIHN0YXRpYyBpbnQgbWFuYV9jcmVhdGVfdHhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxuIFx0XHQvKiBDcmVhdGUgU1EgKi9cbiBcdFx0dHhxID0gXHUwMDI2YXBjLVx1MDAzZXR4X3FwW2ldLVx1MDAzZXR4cTtcbiBcbi1cdFx0dTY0X3N0YXRzX2luaXQoXHUwMDI2dHhxLVx1MDAzZXN0YXRzLnN5bmNwKTtcbiYjNDM7XHRcdHR4cS1cdTAwM2VzdGF0cyA9IFx1MDAyNmFwYy1cdTAwM2V0eHFfc3RhdHNbaV07XG4gXHRcdHR4cS1cdTAwM2VuZGV2ID0gbmV0O1xuIFx0XHR0eHEtXHUwMDNlbmV0X3R4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUobmV0LCBpKTtcbiYjNDM7XHRcdHR4cS1cdTAwM2VyZXNldF9nZW4gPSBSRUFEX09OQ0UoYXBjLVx1MDAzZWFjLVx1MDAzZXJlc2V0X2dlbik7XG4gXHRcdHR4cS1cdTAwM2V2cF9vZmZzZXQgPSBhcGMtXHUwMDNldHhfdnBfb2Zmc2V0O1xuIFx0XHR0eHEtXHUwMDNlbmFwaV9pbml0aWFsaXplZCA9IGZhbHNlO1xuIFx0XHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNnR4cS1cdTAwM2VwZW5kaW5nX3NrYnMpO1xuQEAgLTI4NDYsNyAmIzQzOzMxMDMsMTAgQEAgc3RhdGljIGludCBtYW5hX2NyZWF0ZV90eHEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXG4gb3V0OlxuIFx0bmV0ZGV2X2VycihuZXQsIFwmIzM0O0ZhaWxlZCB0byBjcmVhdGUgJWQgVFggcXVldWVzLCAlZFxcblwmIzM0OyxcbiBcdFx0ICAgYXBjLVx1MDAzZW51bV9xdWV1ZXMsIGVycik7XG4tXHRtYW5hX2Rlc3Ryb3lfdHhxKGFwYyk7XG4mIzQzO1x0aWYgKGZpcnN0KVxuJiM0MztcdFx0bWFuYV9kZXN0cm95X3R4cV9mcm9tKGFwYywgZmlyc3QpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdG1hbmFfZGVzdHJveV90eHEoYXBjKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTI4NzcsNiAmIzQzOzMxMzcsOSBAQCBzdGF0aWMgdm9pZCBtYW5hX2Rlc3Ryb3lfcnhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxuIFx0XHRuZXRpZl9uYXBpX2RlbF9sb2NrZWQobmFwaSk7XG4gXHR9XG4gXG4mIzQzO1x0LyogTkFQSSBpcyBxdWllc2NlZCwgc28gZHJhaW5fc3RhdHMgaGFzIG5vIHJlbWFpbmluZyB3cml0ZXIuICovXG4mIzQzO1x0bWFuYV9mb2xkX3J4cV9zdGF0cyhhcGMsIHJ4cSk7XG4mIzQzO1xuIFx0aWYgKHhkcF9yeHFfaW5mb19pc19yZWcoXHUwMDI2cnhxLVx1MDAzZXhkcF9yeHEpKVxuIFx0XHR4ZHBfcnhxX2luZm9fdW5yZWcoXHUwMDI2cnhxLVx1MDAzZXhkcF9yeHEpO1xuIFxuQEAgLTMwMDksMTEgJiM0MzszMjcyLDExIEBAIHN0YXRpYyBpbnQgbWFuYV9wdXNoX3dxZShzdHJ1Y3QgbWFuYV9yeHEgKnJ4cSlcbiBcbiBzdGF0aWMgaW50IG1hbmFfY3JlYXRlX3BhZ2VfcG9vbChzdHJ1Y3QgbWFuYV9yeHEgKnJ4cSwgc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXG4ge1xuLVx0c3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICptcGMgPSBuZXRkZXZfcHJpdihyeHEtXHUwMDNlbmRldik7XG4gXHRzdHJ1Y3QgcGFnZV9wb29sX3BhcmFtcyBwcHJtID0ge307XG4gXHRpbnQgcmV0O1xuIFxuLVx0cHBybS5wb29sX3NpemUgPSBtcGMtXHUwMDNlcnhfcXVldWVfc2l6ZSAvIHJ4cS1cdTAwM2VmcmFnX2NvdW50ICYjNDM7IDE7XG4mIzQzO1x0LyogU2l6ZSB0aGUgcG9vbCBmb3IgdGhpcyBSWCBxdWV1ZSwgbm90IHRoZSBsaXZlIGNvbmZpZ3VyYXRpb24uICovXG4mIzQzO1x0cHBybS5wb29sX3NpemUgPSByeHEtXHUwMDNlbnVtX3J4X2J1ZiAvIHJ4cS1cdTAwM2VmcmFnX2NvdW50ICYjNDM7IDE7XG4gXHRwcHJtLm5pZCA9IGdjLVx1MDAzZW51bWFfbm9kZTtcbiBcdHBwcm0ubmFwaSA9IFx1MDAyNnJ4cS1cdTAwM2VyeF9jcS5uYXBpO1xuIFx0cHBybS5uZXRkZXYgPSByeHEtXHUwMDNlbmRldjtcbkBAIC0zMDYyLDExICYjNDM7MzMyNSwxNCBAQCBzdGF0aWMgc3RydWN0IG1hbmFfcnhxICptYW5hX2NyZWF0ZV9yeHEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFxuIFx0cnhxLVx1MDAzZW5kZXYgPSBuZGV2O1xuJiM0MztcdHJ4cS1cdTAwM2VzdGF0cyA9IFx1MDAyNmFwYy1cdTAwM2VyeHFfc3RhdHNbcnhxX2lkeF07XG4mIzQzO1x0dTY0X3N0YXRzX2luaXQoXHUwMDI2cnhxLVx1MDAzZWRyYWluX3N0YXRzLnN5bmNwKTtcbiBcdHJ4cS1cdTAwM2VudW1fcnhfYnVmID0gYXBjLVx1MDAzZXJ4X3F1ZXVlX3NpemU7XG4gXHRyeHEtXHUwMDNlcnhxX2lkeCA9IHJ4cV9pZHg7XG4gXHRyeHEtXHUwMDNlcnhvYmogPSBJTlZBTElEX01BTkFfSEFORExFO1xuIFxuLVx0bWFuYV9nZXRfcnhidWZfY2ZnKGFwYywgbmRldi1cdTAwM2VtdHUsIFx1MDAyNnJ4cS1cdTAwM2VkYXRhc2l6ZSwgXHUwMDI2cnhxLVx1MDAzZWFsbG9jX3NpemUsXG4mIzQzO1x0bWFuYV9nZXRfcnhidWZfY2ZnKGFwYywgYXBjLVx1MDAzZWNvbmZpZ3VyZWRfbXR1LCBcdTAwMjZyeHEtXHUwMDNlZGF0YXNpemUsXG4mIzQzO1x0XHRcdCAgIFx1MDAyNnJ4cS1cdTAwM2VhbGxvY19zaXplLFxuIFx0XHRcdCAgIFx1MDAyNnJ4cS1cdTAwM2VoZWFkcm9vbSwgXHUwMDI2cnhxLVx1MDAzZWZyYWdfY291bnQpO1xuIFx0LyogQ3JlYXRlIHBhZ2UgcG9vbCBmb3IgUlggcXVldWUgKi9cbiBcdGVyciA9IG1hbmFfY3JlYXRlX3BhZ2VfcG9vbChyeHEsIGdjKTtcbkBAIC0zMTk2LDE0ICYjNDM7MzQ2MiwxNSBAQCBzdGF0aWMgdm9pZCBtYW5hX2NyZWF0ZV9yeHFfZGVidWdmcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgaW50IGlkeClcbiBcdFx0XHQgICAgXHUwMDI2bWFuYV9kYmdfcV9mb3BzKTtcbiB9XG4gXG4mIzQzOy8qIFRoZSBjYWxsZXIgbXVzdCBkZXN0cm95IHF1ZXVlcyBhZGRlZCBiZWZvcmUgYSBmYWlsdXJlLiAqL1xuIHN0YXRpYyBpbnQgbWFuYV9hZGRfcnhfcXVldWVzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxuLVx0XHRcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdW5zaWduZWQgaW50IGZpcnN0KVxuIHtcbiBcdHN0cnVjdCBtYW5hX3J4cSAqcnhxO1xuIFx0aW50IGVyciA9IDA7XG4gXHRpbnQgaTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFwYy1cdTAwM2VudW1fcXVldWVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdGZvciAoaSA9IGZpcnN0OyBpIFx1MDAzYyBhcGMtXHUwMDNlbnVtX3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbiBcdFx0cnhxID0gbWFuYV9jcmVhdGVfcnhxKGFwYywgaSwgXHUwMDI2YXBjLVx1MDAzZWVxc1tpXSwgbmRldik7XG4gXHRcdGlmIChJU19FUlIocnhxKSkge1xuIFx0XHRcdGVyciA9IFBUUl9FUlIocnhxKTtcbkBAIC0zMjExLDggJiM0MzszNDc4LDYgQEAgc3RhdGljIGludCBtYW5hX2FkZF9yeF9xdWV1ZXMoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0dTY0X3N0YXRzX2luaXQoXHUwMDI2cnhxLVx1MDAzZXN0YXRzLnN5bmNwKTtcbi1cbiBcdFx0YXBjLVx1MDAzZXJ4cXNbaV0gPSByeHE7XG4gXG4gXHRcdG1hbmFfY3JlYXRlX3J4cV9kZWJ1Z2ZzKGFwYywgaSk7XG5AQCAtMzIyMywxNCAmIzQzOzM0ODgsMTUgQEAgc3RhdGljIGludCBtYW5hX2FkZF9yeF9xdWV1ZXMoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBtYW5hX2Rlc3Ryb3lfcnhxcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYylcbiYjNDM7c3RhdGljIHZvaWQgbWFuYV9kZXN0cm95X3J4cXNfZnJvbShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcbiYjNDM7XHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgZmlyc3QpXG4ge1xuIFx0c3RydWN0IG1hbmFfcnhxICpyeHE7XG4gXHR1MzIgcnhxX2lkeDtcbiBcbiBcdGlmIChhcGMtXHUwMDNlcnhxcykge1xuIFxuLVx0XHRmb3IgKHJ4cV9pZHggPSAwOyByeHFfaWR4IFx1MDAzYyBhcGMtXHUwMDNlbnVtX3F1ZXVlczsgcnhxX2lkeCYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGZvciAocnhxX2lkeCA9IGZpcnN0OyByeHFfaWR4IFx1MDAzYyBhcGMtXHUwMDNlbnVtX3F1ZXVlczsgcnhxX2lkeCYjNDM7JiM0MzspIHtcbiBcdFx0XHRyeHEgPSBhcGMtXHUwMDNlcnhxc1tyeHFfaWR4XTtcbiBcdFx0XHRpZiAoIXJ4cSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuQEAgLTMyNDEsNiAmIzQzOzM1MDcsMTEgQEAgc3RhdGljIHZvaWQgbWFuYV9kZXN0cm95X3J4cXMoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBtYW5hX2Rlc3Ryb3lfcnhxcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYylcbiYjNDM7e1xuJiM0MztcdG1hbmFfZGVzdHJveV9yeHFzX2Zyb20oYXBjLCAwKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBtYW5hX2Rlc3Ryb3lfdnBvcnQoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpXG4ge1xuIFx0c3RydWN0IGdkbWFfZGV2ICpnZCA9IGFwYy1cdTAwM2VhYy1cdTAwM2VnZG1hX2RldjtcbkBAIC0zMzA2LDYgJiM0MzszNTc3LDI3IEBAIHN0YXRpYyB2b2lkIG1hbmFfcnNzX3RhYmxlX2luaXQoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpXG4gXHRcdFx0ZXRodG9vbF9yeGZoX2luZGlyX2RlZmF1bHQoaSwgYXBjLVx1MDAzZW51bV9xdWV1ZXMpO1xuIH1cbiBcbiYjNDM7LyogS2VlcCB1c2VyIHRhYmxlcyB3aXRoIHZhbGlkIGluZGljZXM7IGRlZmVyIGxvc3Mgbm90aWZpY2F0aW9uLiAqL1xuJiM0MztzdGF0aWMgYm9vbCBtYW5hX3Jzc190YWJsZV9rZWVwKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxuJiM0MztcdFx0XHRcdHVuc2lnbmVkIGludCBudW1fcXVldWVzLCBib29sICpsb3N0KVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGk7XG4mIzQzO1xuJiM0MztcdCpsb3N0ID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICghbmV0aWZfaXNfcnhmaF9jb25maWd1cmVkKGFwYy1cdTAwM2VuZGV2KSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgYXBjLVx1MDAzZWluZGlyX3RhYmxlX3N6OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKGFwYy1cdTAwM2VpbmRpcl90YWJsZVtpXSBcdTAwM2U9IG51bV9xdWV1ZXMpIHtcbiYjNDM7XHRcdFx0Kmxvc3QgPSB0cnVlO1xuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiBpbnQgbWFuYV9kaXNhYmxlX3Zwb3J0X3J4KHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKVxuIHtcbiBcdHJldHVybiBtYW5hX2NmZ192cG9ydF9zdGVlcmluZyhhcGMsIFRSSV9TVEFURV9GQUxTRSwgZmFsc2UsIGZhbHNlLFxuQEAgLTM1NzYsNiAmIzQzOzM4NjgsNyBAQCBpbnQgbWFuYV9hbGxvY19xdWV1ZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4ge1xuIFx0c3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcdHN0cnVjdCBnZG1hX2RldiAqZ2QgPSBhcGMtXHUwMDNlYWMtXHUwMDNlZ2RtYV9kZXY7XG4mIzQzO1x0Ym9vbCBpbmRpcl9sb3N0O1xuIFx0aW50IGVycjtcbiBcbiBcdGVyciA9IG1hbmFfY3JlYXRlX3Zwb3J0KGFwYywgbmRldik7XG5AQCAtMzU5Miw3ICYjNDM7Mzg4NSw3IEBAIGludCBtYW5hX2FsbG9jX3F1ZXVlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdFx0Z290byBkZXN0cm95X3Zwb3J0O1xuIFx0fVxuIFxuLVx0ZXJyID0gbWFuYV9jcmVhdGVfdHhxKGFwYywgbmRldik7XG4mIzQzO1x0ZXJyID0gbWFuYV9jcmVhdGVfdHhxKGFwYywgbmRldiwgMCk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdG5ldGRldl9lcnIobmRldiwgXCYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSBUWFEgb24gdlBvcnQgJXU6ICVkXFxuXCYjMzQ7LFxuIFx0XHRcdCAgIGFwYy1cdTAwM2Vwb3J0X2lkeCwgZXJyKTtcbkBAIC0zNjA3LDcgJiM0MzszOTAwLDcgQEAgaW50IG1hbmFfYWxsb2NfcXVldWVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0XHRnb3RvIGRlc3Ryb3lfdHhxO1xuIFx0fVxuIFxuLVx0ZXJyID0gbWFuYV9hZGRfcnhfcXVldWVzKGFwYywgbmRldik7XG4mIzQzO1x0ZXJyID0gbWFuYV9hZGRfcnhfcXVldWVzKGFwYywgbmRldiwgMCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGRlc3Ryb3lfcnhxO1xuIFxuQEAgLTM2MjEsNyAmIzQzOzM5MTQsOSBAQCBpbnQgbWFuYV9hbGxvY19xdWV1ZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRcdGdvdG8gZGVzdHJveV9yeHE7XG4gXHR9XG4gXG4tXHRtYW5hX3Jzc190YWJsZV9pbml0KGFwYyk7XG4mIzQzO1x0LyogTG9zcyBub3RpZmljYXRpb24gbmVlZHMgYSBuZXRkZXYgaW5zdGFuY2UgbG9jayB3ZSBtYXkgbGFjay4gKi9cbiYjNDM7XHRpZiAoIW1hbmFfcnNzX3RhYmxlX2tlZXAoYXBjLCBhcGMtXHUwMDNlbnVtX3F1ZXVlcywgXHUwMDI2aW5kaXJfbG9zdCkpXG4mIzQzO1x0XHRtYW5hX3Jzc190YWJsZV9pbml0KGFwYyk7XG4gXG4gXHRlcnIgPSBtYW5hX2NvbmZpZ19yc3MoYXBjLCBUUklfU1RBVEVfVFJVRSwgdHJ1ZSwgdHJ1ZSk7XG4gXHRpZiAoZXJyKSB7XG5AQCAtMzY3OSwxNSAmIzQzOzM5NzQsODggQEAgaW50IG1hbmFfYXR0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbWFuYV9kZWFsbG9jX3F1ZXVlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiYjNDM7LyogRHJhaW4gd2l0aCBhIHBlci1zZXQgdGltZW91dDsgcmV0dXJuIHRydWUgb25seSBmb3IgYSBzdWNjZXNzZnVsIEZMUi4gQSBmYWxzZVxuJiM0MzsgKiByZXR1cm4gZG9lcyBub3QgZ3VhcmFudGVlIERNQSBxdWllc2NlbmNlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGJvb2wgbWFuYV9kcmFpbl90eHFzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKVxuIHtcbi1cdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICYjNDM7IDEyMCAqIEhaO1xuLVx0c3RydWN0IGdkbWFfZGV2ICpnZCA9IGFwYy1cdTAwM2VhYy1cdTAwM2VnZG1hX2RldjtcbiYjNDM7XHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IGFwYy1cdTAwM2VhYy1cdTAwM2VnZG1hX2Rldi1cdTAwM2VnZG1hX2NvbnRleHQ7XG4mIzQzO1x0Ym9vbCBxdWllc2NlZCA9IHRydWU7XG4mIzQzO1x0Ym9vbCByZXNldCA9IGZhbHNlO1xuIFx0c3RydWN0IG1hbmFfdHhxICp0eHE7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuLVx0aW50IGksIGVycjtcbiBcdHUzMiB0c2xlZXA7XG4mIzQzO1x0aW50IGksIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFhcGMtXHUwMDNldHhfcXApXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFwYy1cdTAwM2VudW1fcXVldWVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKCFhcGMtXHUwMDNldHhfcXBbaV0pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHR4cSA9IFx1MDAyNmFwYy1cdTAwM2V0eF9xcFtpXS1cdTAwM2V0eHE7XG4mIzQzO1xuJiM0MztcdFx0LyogQSBwcmV2aW91cyBmdW5jdGlvbiByZXNldCBpbnZhbGlkYXRlZCB0aGVzZSBxdWV1ZXMuICovXG4mIzQzO1x0XHRpZiAoUkVBRF9PTkNFKGFwYy1cdTAwM2VhYy1cdTAwM2VyZXNldF9nZW4pICE9IHR4cS1cdTAwM2VyZXNldF9nZW4pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHRzbGVlcCA9IDEwMDA7XG4mIzQzO1x0XHR3aGlsZSAoYXRvbWljX3JlYWQoXHUwMDI2dHhxLVx1MDAzZXBlbmRpbmdfc2VuZHMpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICAgIHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7XG4mIzQzO1x0XHRcdHVzbGVlcF9yYW5nZSh0c2xlZXAsIHRzbGVlcCAmIzQzOyAxMDAwKTtcbiYjNDM7XHRcdFx0dHNsZWVwIFx1MDAzY1x1MDAzYz0gMTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZ0eHEtXHUwMDNlcGVuZGluZ19zZW5kcykpIHtcbiYjNDM7XHRcdFx0ZXJyID0gcGNpZV9mbHIodG9fcGNpX2RldihnYy1cdTAwM2VkZXYpKTtcbiYjNDM7XHRcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRcdG5ldGRldl9lcnIoYXBjLVx1MDAzZW5kZXYsXG4mIzQzO1x0XHRcdFx0XHQgICBcJiMzNDtmbHIgZmFpbGVkICVkIHdpdGggJWQgcGt0cyBwZW5kaW5nIGluIHR4cSAldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgIGVycixcbiYjNDM7XHRcdFx0XHRcdCAgIGF0b21pY19yZWFkKFx1MDAyNnR4cS1cdTAwM2VwZW5kaW5nX3NlbmRzKSxcbiYjNDM7XHRcdFx0XHRcdCAgIHR4cS1cdTAwM2VnZG1hX3R4cV9pZCk7XG4mIzQzO1x0XHRcdFx0cXVpZXNjZWQgPSBmYWxzZTtcbiYjNDM7XHRcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0XHQvKiBJbnZhbGlkYXRlIHF1ZXVlcyBvbiBldmVyeSBwb3J0IGFmdGVyIHRoZVxuJiM0MztcdFx0XHRcdCAqIGZ1bmN0aW9uIHJlc2V0LlxuJiM0MztcdFx0XHRcdCAqL1xuJiM0MztcdFx0XHRcdFdSSVRFX09OQ0UoYXBjLVx1MDAzZWFjLVx1MDAzZXJlc2V0X2dlbixcbiYjNDM7XHRcdFx0XHRcdCAgIGFwYy1cdTAwM2VhYy1cdTAwM2VyZXNldF9nZW4gJiM0MzsgMSk7XG4mIzQzO1xuJiM0MztcdFx0XHRcdHJlc2V0ID0gdHJ1ZTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEEgZmFpbGVkIEZMUiBjYW5ub3QganVzdGlmeSB1bm1hcHBpbmcgcGVuZGluZyBUWCBidWZmZXJzLiAqL1xuJiM0MztcdGlmICghcXVpZXNjZWQpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIoYXBjLVx1MDAzZW5kZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O2RldmljZSBub3QgcXVpZXNjZWQsIGxlYWtpbmcgcGVuZGluZyBUWCBidWZmZXJzIGluc3RlYWQgb2YgdW5tYXBwaW5nIG1lbW9yeSBpdCBjYW4gc3RpbGwgRE1BIGZyb21cXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIHJlc2V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgYXBjLVx1MDAzZW51bV9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAoIWFwYy1cdTAwM2V0eF9xcFtpXSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0dHhxID0gXHUwMDI2YXBjLVx1MDAzZXR4X3FwW2ldLVx1MDAzZXR4cTtcbiYjNDM7XHRcdHdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoXHUwMDI2dHhxLVx1MDAzZXBlbmRpbmdfc2ticykpKSB7XG4mIzQzO1x0XHRcdG1hbmFfdW5tYXBfc2tiKHNrYiwgYXBjKTtcbiYjNDM7XHRcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGF0b21pY19zZXQoXHUwMDI2dHhxLVx1MDAzZXBlbmRpbmdfc2VuZHMsIDApO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlc2V0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG1hbmFfZGVhbGxvY19xdWV1ZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcdHN0cnVjdCBnZG1hX2RldiAqZ2QgPSBhcGMtXHUwMDNlYWMtXHUwMDNlZ2RtYV9kZXY7XG4mIzQzO1x0aW50IGVycjtcbiBcbiBcdGlmIChhcGMtXHUwMDNlcG9ydF9pc191cClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMzY5OCw0OCAmIzQzOzQwNjYsMjEgQEAgc3RhdGljIGludCBtYW5hX2RlYWxsb2NfcXVldWVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0aWYgKGdkLVx1MDAzZWdkbWFfY29udGV4dC1cdTAwM2Vpc19wZiBcdTAwMjZcdTAwMjYgIWFwYy1cdTAwM2VhYy1cdTAwM2VibV9ob3N0bW9kZSlcbiBcdFx0bWFuYV9wZl9kZXJlZ2lzdGVyX2ZpbHRlcihhcGMpO1xuIFxuLVx0LyogTm8gcGFja2V0IGNhbiBiZSB0cmFuc21pdHRlZCBub3cgc2luY2UgYXBjLVx1MDAzZXBvcnRfaXNfdXAgaXMgZmFsc2UuXG4tXHQgKiBUaGVyZSBpcyBzdGlsbCBhIHRpbnkgY2hhbmNlIHRoYXQgbWFuYV9wb2xsX3R4X2NxKCkgY2FuIHJlLWVuYWJsZVxuLVx0ICogYSB0eHEgYmVjYXVzZSBpdCBtYXkgbm90IHRpbWVseSBzZWUgYXBjLVx1MDAzZXBvcnRfaXNfdXAgYmVpbmcgY2xlYXJlZFxuLVx0ICogdG8gZmFsc2UsIGJ1dCBpdCBkb2VzbiYjMzk7dCBtYXR0ZXIgc2luY2UgbWFuYV9zdGFydF94bWl0KCkgZHJvcHMgYW55XG4tXHQgKiBuZXcgcGFja2V0cyBkdWUgdG8gYXBjLVx1MDAzZXBvcnRfaXNfdXAgYmVpbmcgZmFsc2UuXG4tXHQgKlxuLVx0ICogRHJhaW4gYWxsIHRoZSBpbi1mbGlnaHQgVFggcGFja2V0cy5cbi1cdCAqIEEgdGltZW91dCBvZiAxMjAgc2Vjb25kcyBmb3IgYWxsIHRoZSBxdWV1ZXMgaXMgdXNlZC5cbi1cdCAqIFRoaXMgd2lsbCBicmVhayB0aGUgd2hpbGUgbG9vcCB3aGVuIGgvdyBpcyBub3QgcmVzcG9uZGluZy5cbi1cdCAqIFRoaXMgdmFsdWUgb2YgMTIwIGhhcyBiZWVuIGRlY2lkZWQgaGVyZSBjb25zaWRlcmluZyBtYXhcbi1cdCAqIG51bWJlciBvZiBxdWV1ZXMuXG4tXHQgKi9cbiYjNDM7XHQvKiBBZnRlciBGTFIsIHNjaGVkdWxlIGEgYmVzdC1lZmZvcnQgc2libGluZy1wb3J0IHJlYnVpbGQuICovXG4mIzQzO1x0aWYgKG1hbmFfZHJhaW5fdHhxcyhhcGMpKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgbWFuYV9jb250ZXh0ICphYyA9IGFwYy1cdTAwM2VhYztcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBpO1xuIFxuLVx0aWYgKGFwYy1cdTAwM2V0eF9xcCkge1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhcGMtXHUwMDNlbnVtX3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0XHR0eHEgPSBcdTAwMjZhcGMtXHUwMDNldHhfcXBbaV0tXHUwMDNldHhxO1xuLVx0XHRcdHRzbGVlcCA9IDEwMDA7XG4tXHRcdFx0d2hpbGUgKGF0b21pY19yZWFkKFx1MDAyNnR4cS1cdTAwM2VwZW5kaW5nX3NlbmRzKSBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgICAgdGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpIHtcbi1cdFx0XHRcdHVzbGVlcF9yYW5nZSh0c2xlZXAsIHRzbGVlcCAmIzQzOyAxMDAwKTtcbi1cdFx0XHRcdHRzbGVlcCBcdTAwM2NcdTAwM2M9IDE7XG4tXHRcdFx0fVxuLVx0XHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZ0eHEtXHUwMDNlcGVuZGluZ19zZW5kcykpIHtcbi1cdFx0XHRcdGVyciA9XG4tXHRcdFx0XHQgICAgcGNpZV9mbHIodG9fcGNpX2RldihnZC1cdTAwM2VnZG1hX2NvbnRleHQtXHUwMDNlZGV2KSk7XG4tXHRcdFx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0XHRcdG5ldGRldl9lcnIobmRldiwgXCYjMzQ7ZmxyIGZhaWxlZCAlZCB3aXRoICVkIHBrdHMgcGVuZGluZyBpbiB0eHEgJXVcXG5cJiMzNDssXG4tXHRcdFx0XHRcdFx0ICAgZXJyLFxuLVx0XHRcdFx0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2dHhxLVx1MDAzZXBlbmRpbmdfc2VuZHMpLFxuLVx0XHRcdFx0XHQgICAgdHhxLVx1MDAzZWdkbWFfdHhxX2lkKTtcbi1cdFx0XHRcdH1cbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbi1cdFx0fVxuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYWMtXHUwMDNlbnVtX3BvcnRzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKnNpYjtcbiBcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYXBjLVx1MDAzZW51bV9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdFx0dHhxID0gXHUwMDI2YXBjLVx1MDAzZXR4X3FwW2ldLVx1MDAzZXR4cTtcbi1cdFx0XHR3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNnR4cS1cdTAwM2VwZW5kaW5nX3NrYnMpKSkge1xuLVx0XHRcdFx0bWFuYV91bm1hcF9za2Ioc2tiLCBhcGMpO1xuLVx0XHRcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbi1cdFx0XHR9XG4tXHRcdFx0YXRvbWljX3NldChcdTAwMjZ0eHEtXHUwMDNlcGVuZGluZ19zZW5kcywgMCk7XG4mIzQzO1x0XHRcdGlmICghYWMtXHUwMDNlcG9ydHNbaV0gfHwgYWMtXHUwMDNlcG9ydHNbaV0gPT0gbmRldilcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0c2liID0gbmV0ZGV2X3ByaXYoYWMtXHUwMDNlcG9ydHNbaV0pO1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKGFjLVx1MDAzZXBvcnRzW2ldLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O3F1ZXVlcyByZXNldCBieSBhIHNpYmxpbmcgcG9ydCwgc2NoZWR1bGluZyByZWJ1aWxkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cXVldWVfd29yayhhYy1cdTAwM2VwZXJfcG9ydF9xdWV1ZV9yZXNldF93cSxcbiYjNDM7XHRcdFx0XHQgICBcdTAwMjZzaWItXHUwMDNlcXVldWVfcmVzZXRfd29yayk7XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC0zNzYzLDYgJiM0Mzs0MTA0LDY4NSBAQCBzdGF0aWMgaW50IG1hbmFfZGVhbGxvY19xdWV1ZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIG1hbmFfcXNldF9zbmFwc2hvdChjb25zdCBzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmN0eCxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBtYW5hX3FzZXQgKm91dClcbiYjNDM7e1xuJiM0MztcdG91dC1cdTAwM2V0eF9xcFx0XHQ9IGN0eC1cdTAwM2V0eF9xcDtcbiYjNDM7XHRvdXQtXHUwMDNlcnhxc1x0XHQ9IGN0eC1cdTAwM2VyeHFzO1xuJiM0MztcdG91dC1cdTAwM2VpbmRpcl90YWJsZVx0PSBjdHgtXHUwMDNlaW5kaXJfdGFibGU7XG4mIzQzO1x0b3V0LVx1MDAzZWluZGlyX3RhYmxlX3N6XHQ9IGN0eC1cdTAwM2VpbmRpcl90YWJsZV9zejtcbiYjNDM7XHRvdXQtXHUwMDNlcnhvYmpfdGFibGVcdD0gY3R4LVx1MDAzZXJ4b2JqX3RhYmxlO1xuJiM0MztcdG91dC1cdTAwM2VkZWZhdWx0X3J4b2JqXHQ9IGN0eC1cdTAwM2VkZWZhdWx0X3J4b2JqO1xuJiM0MztcdG91dC1cdTAwM2VudW1fcXVldWVzXHRcdD0gY3R4LVx1MDAzZW51bV9xdWV1ZXM7XG4mIzQzO1x0b3V0LVx1MDAzZXJ4X3F1ZXVlX3NpemVcdD0gY3R4LVx1MDAzZXJ4X3F1ZXVlX3NpemU7XG4mIzQzO1x0b3V0LVx1MDAzZXR4X3F1ZXVlX3NpemVcdD0gY3R4LVx1MDAzZXR4X3F1ZXVlX3NpemU7XG4mIzQzO1x0b3V0LVx1MDAzZXByaXZfZmxhZ3NcdFx0PSBjdHgtXHUwMDNlcHJpdl9mbGFncztcbiYjNDM7XHRvdXQtXHUwMDNlbXR1XHRcdD0gY3R4LVx1MDAzZWNvbmZpZ3VyZWRfbXR1O1xuJiM0MztcdG91dC1cdTAwM2VicGZfcHJvZ1x0XHQ9IGN0eC1cdTAwM2VicGZfcHJvZztcbiYjNDM7XG4mIzQzO1x0b3V0LVx1MDAzZXJ4ZmhfaW5kaXJfbG9zdFx0PSBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWFuYV9xc2V0X2luc3RhbGwoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICpjdHgsXG4mIzQzO1x0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBtYW5hX3FzZXQgKnFzZXQpXG4mIzQzO3tcbiYjNDM7XHRjdHgtXHUwMDNldHhfcXBcdFx0PSBxc2V0LVx1MDAzZXR4X3FwO1xuJiM0MztcdGN0eC1cdTAwM2VyeHFzXHRcdD0gcXNldC1cdTAwM2VyeHFzO1xuJiM0MztcdGN0eC1cdTAwM2VpbmRpcl90YWJsZVx0PSBxc2V0LVx1MDAzZWluZGlyX3RhYmxlO1xuJiM0MztcdGN0eC1cdTAwM2VpbmRpcl90YWJsZV9zelx0PSBxc2V0LVx1MDAzZWluZGlyX3RhYmxlX3N6O1xuJiM0MztcdGN0eC1cdTAwM2VyeG9ial90YWJsZVx0PSBxc2V0LVx1MDAzZXJ4b2JqX3RhYmxlO1xuJiM0MztcdGN0eC1cdTAwM2VkZWZhdWx0X3J4b2JqXHQ9IHFzZXQtXHUwMDNlZGVmYXVsdF9yeG9iajtcbiYjNDM7XHRjdHgtXHUwMDNlbnVtX3F1ZXVlc1x0XHQ9IHFzZXQtXHUwMDNlbnVtX3F1ZXVlcztcbiYjNDM7XHRjdHgtXHUwMDNlcnhfcXVldWVfc2l6ZVx0PSBxc2V0LVx1MDAzZXJ4X3F1ZXVlX3NpemU7XG4mIzQzO1x0Y3R4LVx1MDAzZXR4X3F1ZXVlX3NpemVcdD0gcXNldC1cdTAwM2V0eF9xdWV1ZV9zaXplO1xuJiM0MztcdGN0eC1cdTAwM2Vwcml2X2ZsYWdzXHRcdD0gcXNldC1cdTAwM2Vwcml2X2ZsYWdzO1xuJiM0MztcdGN0eC1cdTAwM2Vjb25maWd1cmVkX210dVx0PSBxc2V0LVx1MDAzZW10dTtcbiYjNDM7XHRjdHgtXHUwMDNlYnBmX3Byb2dcdFx0PSBxc2V0LVx1MDAzZWJwZl9wcm9nO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBTY3JhdGNoIHN0YXJ0cyB3aXRob3V0IFNRcy9SUXMgYW5kIGJvcnJvd3MgdGhlIHBvcnQmIzM5O3MgRVEgcG9vbC4gTmV2ZXIgY2FsbFxuJiM0MzsgKiBtYW5hX2Rlc3Ryb3lfZXEoKSBvbiBpdC5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqbWFuYV9xc2V0X3NjcmF0Y2hfYWxsb2Moc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKnNjcmF0Y2g7XG4mIzQzO1xuJiM0MztcdHNjcmF0Y2ggPSBrdnphbGxvY19vYmooKnNjcmF0Y2gsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghc2NyYXRjaClcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHQqc2NyYXRjaCA9ICphcGM7XG4mIzQzO1xuJiM0MztcdHNjcmF0Y2gtXHUwMDNldHhfcXBcdFx0PSBOVUxMO1xuJiM0MztcdHNjcmF0Y2gtXHUwMDNlcnhxc1x0XHQ9IE5VTEw7XG4mIzQzO1x0c2NyYXRjaC1cdTAwM2VpbmRpcl90YWJsZVx0PSBOVUxMO1xuJiM0MztcdHNjcmF0Y2gtXHUwMDNlcnhvYmpfdGFibGVcdD0gTlVMTDtcbiYjNDM7XHRzY3JhdGNoLVx1MDAzZWRlZmF1bHRfcnhvYmpcdD0gSU5WQUxJRF9NQU5BX0hBTkRMRTtcbiYjNDM7XG4mIzQzO1x0LyogRG8gbm90IGNvbnN1bWUgdGhlIGxpdmUgc2V0JiMzOTtzIHByZS1hbGxvY2F0ZWQgUlggYnVmZmVycy4gKi9cbiYjNDM7XHRzY3JhdGNoLVx1MDAzZXJ4YnVmc19wcmVcdD0gTlVMTDtcbiYjNDM7XHRzY3JhdGNoLVx1MDAzZWRhc19wcmVcdD0gTlVMTDtcbiYjNDM7XHRzY3JhdGNoLVx1MDAzZXJ4YnByZV90b3RhbFx0PSAwO1xuJiM0MztcbiYjNDM7XHQvKiBTdXBwcmVzcyBkZWJ1Z2ZzIG5hbWVzIHRoYXQgd291bGQgY29sbGlkZSB3aXRoIHRoZSBsaXZlIHNldC4gKi9cbiYjNDM7XHRzY3JhdGNoLVx1MDAzZW1hbmFfcG9ydF9kZWJ1Z2ZzID0gRVJSX1BUUigtRU5PREVWKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHNjcmF0Y2g7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgbWFuYV9xc2V0X3NjcmF0Y2hfZnJlZShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKnNjcmF0Y2gpXG4mIzQzO3tcbiYjNDM7XHRrdmZyZWUoc2NyYXRjaCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFNwbGl0IGludG8ga2VwdCBxdWV1ZXMgYW5kIGEgcmV0aXJpbmcgdGFpbCB3aXRob3V0IGNoYW5naW5nIGxpdmUgb3duZXJzaGlwLlxuJiM0MzsgKiBRdWV1ZSBpIHJldGFpbnMgRVEgaS5cbiYjNDM7ICovXG4mIzQzO2ludCBtYW5hX3NwbGl0X3FzZXQoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXG4mIzQzO1x0XHQgICAgc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICpzY3JhdGNoLCB1bnNpZ25lZCBpbnQgbmV3X2NvdW50LFxuJiM0MztcdFx0ICAgIHN0cnVjdCBtYW5hX3FzZXQgKm91dF9uZXcsIHN0cnVjdCBtYW5hX3FzZXQgKm91dF90YWlsKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IG9sZF9jb3VudCA9IGFwYy1cdTAwM2VudW1fcXVldWVzO1xuJiM0MztcdHN0cnVjdCBtYW5hX3R4X3FwICoqbmV3X3R4LCAqKnRhaWxfdHg7XG4mIzQzO1x0c3RydWN0IG1hbmFfcnhxICoqbmV3X3J4LCAqKnRhaWxfcng7XG4mIzQzO1x0dW5zaWduZWQgaW50IHRhaWxfY291bnQ7XG4mIzQzO1x0Ym9vbCBpbmRpcl9sb3N0O1xuJiM0MztcdHVuc2lnbmVkIGludCBpO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9SVE5MKCk7XG4mIzQzO1xuJiM0MztcdGlmIChXQVJOX09OKG5ld19jb3VudCA9PSAwIHx8IG5ld19jb3VudCBcdTAwM2U9IG9sZF9jb3VudCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAoV0FSTl9PTighYXBjLVx1MDAzZXR4X3FwIHx8ICFhcGMtXHUwMDNlcnhxcykpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0dGFpbF9jb3VudCA9IG9sZF9jb3VudCAtIG5ld19jb3VudDtcbiYjNDM7XG4mIzQzO1x0LyogQnVpbGQgc3RlZXJpbmcgc2VwYXJhdGVseSBzbyBpdCBjYW5ub3QgaW5kZXggYmV5b25kIHRoZSBzaG9ydGVuZWQgUlhcbiYjNDM7XHQgKiBhcnJheS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzY3JhdGNoLVx1MDAzZW51bV9xdWV1ZXMgPSBuZXdfY291bnQ7XG4mIzQzO1x0ZXJyID0gbWFuYV9yc3NfdGFibGVfYWxsb2Moc2NyYXRjaCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGlmIChtYW5hX3Jzc190YWJsZV9rZWVwKGFwYywgbmV3X2NvdW50LCBcdTAwMjZpbmRpcl9sb3N0KSlcbiYjNDM7XHRcdG1lbWNweShzY3JhdGNoLVx1MDAzZWluZGlyX3RhYmxlLCBhcGMtXHUwMDNlaW5kaXJfdGFibGUsXG4mIzQzO1x0XHQgICAgICAgYXBjLVx1MDAzZWluZGlyX3RhYmxlX3N6ICogc2l6ZW9mKCphcGMtXHUwMDNlaW5kaXJfdGFibGUpKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRtYW5hX3Jzc190YWJsZV9pbml0KHNjcmF0Y2gpO1xuJiM0MztcbiYjNDM7XHRuZXdfdHggPSBremFsbG9jX29ianMoc3RydWN0IG1hbmFfdHhfcXAgKiwgbmV3X2NvdW50KTtcbiYjNDM7XHRuZXdfcnggPSBremFsbG9jX29ianMoc3RydWN0IG1hbmFfcnhxICosIG5ld19jb3VudCk7XG4mIzQzO1x0dGFpbF90eCA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgbWFuYV90eF9xcCAqLCB0YWlsX2NvdW50KTtcbiYjNDM7XHR0YWlsX3J4ID0ga3phbGxvY19vYmpzKHN0cnVjdCBtYW5hX3J4cSAqLCB0YWlsX2NvdW50KTtcbiYjNDM7XHRpZiAoIW5ld190eCB8fCAhbmV3X3J4IHx8ICF0YWlsX3R4IHx8ICF0YWlsX3J4KSB7XG4mIzQzO1x0XHRlcnIgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byBmcmVlX2FycmF5cztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5ld19jb3VudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdG5ld190eFtpXSA9IGFwYy1cdTAwM2V0eF9xcFtpXTtcbiYjNDM7XHRcdG5ld19yeFtpXSA9IGFwYy1cdTAwM2VyeHFzW2ldO1xuJiM0MztcdH1cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0YWlsX2NvdW50OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dGFpbF90eFtpXSA9IGFwYy1cdTAwM2V0eF9xcFtuZXdfY291bnQgJiM0MzsgaV07XG4mIzQzO1x0XHR0YWlsX3J4W2ldID0gYXBjLVx1MDAzZXJ4cXNbbmV3X2NvdW50ICYjNDM7IGldO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0b3V0X25ldy1cdTAwM2V0eF9xcFx0XHQ9IG5ld190eDtcbiYjNDM7XHRvdXRfbmV3LVx1MDAzZXJ4cXNcdFx0PSBuZXdfcng7XG4mIzQzO1x0b3V0X25ldy1cdTAwM2VpbmRpcl90YWJsZVx0PSBzY3JhdGNoLVx1MDAzZWluZGlyX3RhYmxlO1xuJiM0MztcdG91dF9uZXctXHUwMDNlaW5kaXJfdGFibGVfc3pcdD0gc2NyYXRjaC1cdTAwM2VpbmRpcl90YWJsZV9zejtcbiYjNDM7XHRvdXRfbmV3LVx1MDAzZXJ4b2JqX3RhYmxlXHQ9IHNjcmF0Y2gtXHUwMDNlcnhvYmpfdGFibGU7XG4mIzQzO1x0b3V0X25ldy1cdTAwM2VkZWZhdWx0X3J4b2JqXHQ9IGFwYy1cdTAwM2VyeHFzWzBdLVx1MDAzZXJ4b2JqO1xuJiM0MztcdG91dF9uZXctXHUwMDNlbnVtX3F1ZXVlc1x0PSBuZXdfY291bnQ7XG4mIzQzO1x0b3V0X25ldy1cdTAwM2VyeF9xdWV1ZV9zaXplXHQ9IGFwYy1cdTAwM2VyeF9xdWV1ZV9zaXplO1xuJiM0MztcdG91dF9uZXctXHUwMDNldHhfcXVldWVfc2l6ZVx0PSBhcGMtXHUwMDNldHhfcXVldWVfc2l6ZTtcbiYjNDM7XHRvdXRfbmV3LVx1MDAzZXByaXZfZmxhZ3NcdD0gYXBjLVx1MDAzZXByaXZfZmxhZ3M7XG4mIzQzO1x0b3V0X25ldy1cdTAwM2VtdHVcdFx0PSBhcGMtXHUwMDNlY29uZmlndXJlZF9tdHU7XG4mIzQzO1x0b3V0X25ldy1cdTAwM2VicGZfcHJvZ1x0PSBhcGMtXHUwMDNlYnBmX3Byb2c7XG4mIzQzO1x0b3V0X25ldy1cdTAwM2VyeGZoX2luZGlyX2xvc3QgPSBpbmRpcl9sb3N0O1xuJiM0MztcbiYjNDM7XHRzY3JhdGNoLVx1MDAzZWluZGlyX3RhYmxlXHQ9IE5VTEw7XG4mIzQzO1x0c2NyYXRjaC1cdTAwM2VyeG9ial90YWJsZVx0PSBOVUxMO1xuJiM0MztcbiYjNDM7XHRtZW1zZXQob3V0X3RhaWwsIDAsIHNpemVvZigqb3V0X3RhaWwpKTtcbiYjNDM7XHRvdXRfdGFpbC1cdTAwM2V0eF9xcFx0XHQ9IHRhaWxfdHg7XG4mIzQzO1x0b3V0X3RhaWwtXHUwMDNlcnhxc1x0XHQ9IHRhaWxfcng7XG4mIzQzO1x0b3V0X3RhaWwtXHUwMDNlZGVmYXVsdF9yeG9ialx0PSBJTlZBTElEX01BTkFfSEFORExFO1xuJiM0MztcdG91dF90YWlsLVx1MDAzZW51bV9xdWV1ZXNcdD0gdGFpbF9jb3VudDtcbiYjNDM7XHRvdXRfdGFpbC1cdTAwM2VyeF9xdWV1ZV9zaXplXHQ9IGFwYy1cdTAwM2VyeF9xdWV1ZV9zaXplO1xuJiM0MztcdG91dF90YWlsLVx1MDAzZXR4X3F1ZXVlX3NpemVcdD0gYXBjLVx1MDAzZXR4X3F1ZXVlX3NpemU7XG4mIzQzO1x0b3V0X3RhaWwtXHUwMDNlcHJpdl9mbGFnc1x0PSBhcGMtXHUwMDNlcHJpdl9mbGFncztcbiYjNDM7XHRvdXRfdGFpbC1cdTAwM2VtdHVcdFx0PSBhcGMtXHUwMDNlY29uZmlndXJlZF9tdHU7XG4mIzQzO1x0b3V0X3RhaWwtXHUwMDNlYnBmX3Byb2dcdD0gYXBjLVx1MDAzZWJwZl9wcm9nO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2ZyZWVfYXJyYXlzOlxuJiM0MztcdGtmcmVlKG5ld190eCk7XG4mIzQzO1x0a2ZyZWUobmV3X3J4KTtcbiYjNDM7XHRrZnJlZSh0YWlsX3R4KTtcbiYjNDM7XHRrZnJlZSh0YWlsX3J4KTtcbiYjNDM7XHRtYW5hX2NsZWFudXBfaW5kaXJfdGFibGUoc2NyYXRjaCk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogRnJlZSBjb250YWluZXJzIG9ubHk7IHRoZSBsaXZlIHBvcnQgc3RpbGwgb3ducyB0aGUgcXVldWVzLiAqL1xuJiM0Mzt2b2lkIG1hbmFfZGlzY2FyZF9zcGxpdChzdHJ1Y3QgbWFuYV9xc2V0ICpuZXdxLCBzdHJ1Y3QgbWFuYV9xc2V0ICp0YWlscSlcbiYjNDM7e1xuJiM0MztcdGtmcmVlKG5ld3EtXHUwMDNldHhfcXApO1xuJiM0MztcdGtmcmVlKG5ld3EtXHUwMDNlcnhxcyk7XG4mIzQzO1x0a2ZyZWUobmV3cS1cdTAwM2VpbmRpcl90YWJsZSk7XG4mIzQzO1x0a2ZyZWUobmV3cS1cdTAwM2VyeG9ial90YWJsZSk7XG4mIzQzO1x0a2ZyZWUodGFpbHEtXHUwMDNldHhfcXApO1xuJiM0MztcdGtmcmVlKHRhaWxxLVx1MDAzZXJ4cXMpO1xuJiM0MztcdG1lbXNldChuZXdxLCAwLCBzaXplb2YoKm5ld3EpKTtcbiYjNDM7XHRtZW1zZXQodGFpbHEsIDAsIHNpemVvZigqdGFpbHEpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQ2FycnkgZXhpc3RpbmcgcXVldWVzIGludG8gQG91dF9uZXc7IGFsbG9jYXRlIG9ubHkgdGhlIHRhaWwuIEBvdXRfZnJlc2hcbiYjNDM7ICogaXNvbGF0ZXMgbmV3IHF1ZXVlcyBmb3IgY2xlYW51cCBhZnRlciBhIGZhaWxlZCBwdWJsaXNoLlxuJiM0MzsgKi9cbiYjNDM7aW50IG1hbmFfZ3Jvd19xc2V0KHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxuJiM0MztcdFx0ICAgc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICpzY3JhdGNoLCB1bnNpZ25lZCBpbnQgbmV3X2NvdW50LFxuJiM0MztcdFx0ICAgc3RydWN0IG1hbmFfcXNldCAqb3V0X25ldywgc3RydWN0IG1hbmFfcXNldCAqb3V0X2ZyZXNoKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IG9sZF9jb3VudCA9IGFwYy1cdTAwM2VudW1fcXVldWVzO1xuJiM0MztcdHN0cnVjdCBtYW5hX3R4X3FwICoqbmV3X3R4LCAqKmZyZXNoX3R4O1xuJiM0MztcdHN0cnVjdCBtYW5hX3J4cSAqKm5ld19yeCwgKipmcmVzaF9yeDtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGFwYy1cdTAwM2VuZGV2O1xuJiM0MztcdHVuc2lnbmVkIGludCBmcmVzaF9jb3VudDtcbiYjNDM7XHRib29sIGluZGlyX2xvc3Q7XG4mIzQzO1x0dW5zaWduZWQgaW50IGk7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX1JUTkwoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKFdBUk5fT04obmV3X2NvdW50IFx1MDAzYz0gb2xkX2NvdW50KSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdGlmIChXQVJOX09OKCFhcGMtXHUwMDNldHhfcXAgfHwgIWFwYy1cdTAwM2VyeHFzKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRmcmVzaF9jb3VudCA9IG5ld19jb3VudCAtIG9sZF9jb3VudDtcbiYjNDM7XG4mIzQzO1x0bmV3X3R4ID0ga3phbGxvY19vYmpzKHN0cnVjdCBtYW5hX3R4X3FwICosIG5ld19jb3VudCk7XG4mIzQzO1x0bmV3X3J4ID0ga3phbGxvY19vYmpzKHN0cnVjdCBtYW5hX3J4cSAqLCBuZXdfY291bnQpO1xuJiM0MztcdGZyZXNoX3R4ID0ga3phbGxvY19vYmpzKHN0cnVjdCBtYW5hX3R4X3FwICosIGZyZXNoX2NvdW50KTtcbiYjNDM7XHRmcmVzaF9yeCA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgbWFuYV9yeHEgKiwgZnJlc2hfY291bnQpO1xuJiM0MztcdGlmICghbmV3X3R4IHx8ICFuZXdfcnggfHwgIWZyZXNoX3R4IHx8ICFmcmVzaF9yeCkge1xuJiM0MztcdFx0ZXJyID0gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gZnJlZV9hcnJheXM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBvbGRfY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRuZXdfdHhbaV0gPSBhcGMtXHUwMDNldHhfcXBbaV07XG4mIzQzO1x0XHRuZXdfcnhbaV0gPSBhcGMtXHUwMDNlcnhxc1tpXTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNjcmF0Y2gtXHUwMDNlbnVtX3F1ZXVlcyA9IG5ld19jb3VudDtcbiYjNDM7XHRzY3JhdGNoLVx1MDAzZXR4X3FwID0gbmV3X3R4O1xuJiM0MztcdHNjcmF0Y2gtXHUwMDNlcnhxcyA9IG5ld19yeDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gbWFuYV9yc3NfdGFibGVfYWxsb2Moc2NyYXRjaCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZnJlZV9hcnJheXM7XG4mIzQzO1xuJiM0MztcdGVyciA9IG1hbmFfZ3Jvd19lcXMoYXBjLCBuZXdfY291bnQpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXBfcnNzO1xuJiM0MztcbiYjNDM7XHRzY3JhdGNoLVx1MDAzZWVxcyA9IGFwYy1cdTAwM2VlcXM7XG4mIzQzO1x0c2NyYXRjaC1cdTAwM2VudW1fZXFzID0gYXBjLVx1MDAzZW51bV9lcXM7XG4mIzQzO1xuJiM0MztcdGVyciA9IG1hbmFfY3JlYXRlX3R4cShzY3JhdGNoLCBuZGV2LCBvbGRfY291bnQpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXBfcnNzO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBtYW5hX2FkZF9yeF9xdWV1ZXMoc2NyYXRjaCwgbmRldiwgb2xkX2NvdW50KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBjbGVhbnVwX3J4cTtcbiYjNDM7XG4mIzQzO1x0aWYgKG1hbmFfcnNzX3RhYmxlX2tlZXAoYXBjLCBuZXdfY291bnQsIFx1MDAyNmluZGlyX2xvc3QpKVxuJiM0MztcdFx0bWVtY3B5KHNjcmF0Y2gtXHUwMDNlaW5kaXJfdGFibGUsIGFwYy1cdTAwM2VpbmRpcl90YWJsZSxcbiYjNDM7XHRcdCAgICAgICBhcGMtXHUwMDNlaW5kaXJfdGFibGVfc3ogKiBzaXplb2YoKmFwYy1cdTAwM2VpbmRpcl90YWJsZSkpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdG1hbmFfcnNzX3RhYmxlX2luaXQoc2NyYXRjaCk7XG4mIzQzO1xuJiM0MztcdG1hbmFfcXNldF9zbmFwc2hvdChzY3JhdGNoLCBvdXRfbmV3KTtcbiYjNDM7XHRvdXRfbmV3LVx1MDAzZXJ4ZmhfaW5kaXJfbG9zdCA9IGluZGlyX2xvc3Q7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGZyZXNoX2NvdW50OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0ZnJlc2hfdHhbaV0gPSBuZXdfdHhbb2xkX2NvdW50ICYjNDM7IGldO1xuJiM0MztcdFx0ZnJlc2hfcnhbaV0gPSBuZXdfcnhbb2xkX2NvdW50ICYjNDM7IGldO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bWVtc2V0KG91dF9mcmVzaCwgMCwgc2l6ZW9mKCpvdXRfZnJlc2gpKTtcbiYjNDM7XHRvdXRfZnJlc2gtXHUwMDNldHhfcXBcdD0gZnJlc2hfdHg7XG4mIzQzO1x0b3V0X2ZyZXNoLVx1MDAzZXJ4cXNcdFx0PSBmcmVzaF9yeDtcbiYjNDM7XHRvdXRfZnJlc2gtXHUwMDNlZGVmYXVsdF9yeG9iaiA9IElOVkFMSURfTUFOQV9IQU5ETEU7XG4mIzQzO1x0b3V0X2ZyZXNoLVx1MDAzZW51bV9xdWV1ZXNcdD0gZnJlc2hfY291bnQ7XG4mIzQzO1x0b3V0X2ZyZXNoLVx1MDAzZXJ4X3F1ZXVlX3NpemUgPSBhcGMtXHUwMDNlcnhfcXVldWVfc2l6ZTtcbiYjNDM7XHRvdXRfZnJlc2gtXHUwMDNldHhfcXVldWVfc2l6ZSA9IGFwYy1cdTAwM2V0eF9xdWV1ZV9zaXplO1xuJiM0MztcdG91dF9mcmVzaC1cdTAwM2Vwcml2X2ZsYWdzXHQ9IGFwYy1cdTAwM2Vwcml2X2ZsYWdzO1xuJiM0MztcdG91dF9mcmVzaC1cdTAwM2VtdHVcdFx0PSBhcGMtXHUwMDNlY29uZmlndXJlZF9tdHU7XG4mIzQzO1x0b3V0X2ZyZXNoLVx1MDAzZWJwZl9wcm9nXHQ9IGFwYy1cdTAwM2VicGZfcHJvZztcbiYjNDM7XG4mIzQzO1x0LyogVGFrZSBYRFAgcmVmcyBvbiBmcmVzaCBSWFFzIG9ubHkuIE9uIHRoZSBtZXJnZWQgc2V0LFxuJiM0MztcdCAqIG1hbmFfY2huX3NldHhkcCgpIHJldHVybnMgZWFybHkgb24gdGhlIGNhcnJpZWQgcnhxc1swXS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtYW5hX3FzZXRfaW5zdGFsbChzY3JhdGNoLCBvdXRfZnJlc2gpO1xuJiM0MztcdG1hbmFfY2huX3NldHhkcChzY3JhdGNoLCBtYW5hX3hkcF9nZXQoYXBjKSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7Y2xlYW51cF9yeHE6XG4mIzQzO1x0bWFuYV9kZXN0cm95X3J4cXNfZnJvbShzY3JhdGNoLCBvbGRfY291bnQpO1xuJiM0MztcdG1hbmFfZGVzdHJveV90eHFfZnJvbShzY3JhdGNoLCBvbGRfY291bnQpO1xuJiM0MztjbGVhbnVwX3JzczpcbiYjNDM7XHRtYW5hX2NsZWFudXBfaW5kaXJfdGFibGUoc2NyYXRjaCk7XG4mIzQzO2ZyZWVfYXJyYXlzOlxuJiM0MztcdC8qIEZyZWUgY29udGFpbmVycyBvbmx5OyBjYXJyaWVkIHF1ZXVlcyByZW1haW4gbGl2ZS4gKi9cbiYjNDM7XHRzY3JhdGNoLVx1MDAzZXR4X3FwID0gTlVMTDtcbiYjNDM7XHRzY3JhdGNoLVx1MDAzZXJ4cXMgPSBOVUxMO1xuJiM0MztcdGtmcmVlKG5ld190eCk7XG4mIzQzO1x0a2ZyZWUobmV3X3J4KTtcbiYjNDM7XHRrZnJlZShmcmVzaF90eCk7XG4mIzQzO1x0a2ZyZWUoZnJlc2hfcngpO1xuJiM0MztcbiYjNDM7XHRtYW5hX3Nocmlua19lcXMoYXBjLCBhcGMtXHUwMDNlbnVtX3F1ZXVlcyk7XG4mIzQzO1xuJiM0MztcdG5ldGRldl9lcnIobmRldiwgXCYjMzQ7JXMobnVtX3F1ZXVlcz0ldSkgZmFpbGVkOiAlZFxcblwmIzM0OywgX19mdW5jX18sXG4mIzQzO1x0XHQgICBuZXdfY291bnQsIGVycik7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogRnJlZSBtZXJnZWQgY29udGFpbmVycyBvbmx5LCBub3QgY2FycmllZCBxdWV1ZXMuIFRoZSBjYWxsZXIgbXVzdCByZXRpcmUgZnJlc2hcbiYjNDM7ICogcXVldWVzIHNlcGFyYXRlbHkuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIG1hbmFfZGlzY2FyZF9ncm93KHN0cnVjdCBtYW5hX3FzZXQgKm5ld3EpXG4mIzQzO3tcbiYjNDM7XHRrZnJlZShuZXdxLVx1MDAzZXR4X3FwKTtcbiYjNDM7XHRrZnJlZShuZXdxLVx1MDAzZXJ4cXMpO1xuJiM0MztcdGtmcmVlKG5ld3EtXHUwMDNlaW5kaXJfdGFibGUpO1xuJiM0MztcdGtmcmVlKG5ld3EtXHUwMDNlcnhvYmpfdGFibGUpO1xuJiM0MztcdG1lbXNldChuZXdxLCAwLCBzaXplb2YoKm5ld3EpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUmVidWlsZCBhdCB0aGUgY3VycmVudCBjb3VudDsgcmVzaXplIHVzZXMgc3BsaXQvZ3Jvdy4gKi9cbiYjNDM7aW50IG1hbmFfYWxsb2NfcXNldChzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcbiYjNDM7XHRcdCAgICBzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKnNjcmF0Y2gsXG4mIzQzO1x0XHQgICAgdW5zaWduZWQgaW50IHJ4X3F1ZXVlX3NpemUsIHVuc2lnbmVkIGludCB0eF9xdWV1ZV9zaXplLFxuJiM0MztcdFx0ICAgIHUzMiBwcml2X2ZsYWdzLCBpbnQgbXR1LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLFxuJiM0MztcdFx0ICAgIHN0cnVjdCBtYW5hX3FzZXQgKm91dClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gc2NyYXRjaC1cdTAwM2VuZGV2O1xuJiM0MztcdGJvb2wgaW5kaXJfbG9zdDtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfUlROTCgpO1xuJiM0MztcbiYjNDM7XHRzY3JhdGNoLVx1MDAzZW51bV9xdWV1ZXNcdD0gYXBjLVx1MDAzZW51bV9xdWV1ZXM7XG4mIzQzO1x0c2NyYXRjaC1cdTAwM2VyeF9xdWV1ZV9zaXplXHQ9IHJ4X3F1ZXVlX3NpemU7XG4mIzQzO1x0c2NyYXRjaC1cdTAwM2V0eF9xdWV1ZV9zaXplXHQ9IHR4X3F1ZXVlX3NpemU7XG4mIzQzO1x0c2NyYXRjaC1cdTAwM2Vwcml2X2ZsYWdzXHQ9IHByaXZfZmxhZ3M7XG4mIzQzO1xuJiM0MztcdHNjcmF0Y2gtXHUwMDNlY29uZmlndXJlZF9tdHVcdD0gbXR1O1xuJiM0MztcdHNjcmF0Y2gtXHUwMDNlYnBmX3Byb2dcdD0gYnBmX3Byb2c7XG4mIzQzO1xuJiM0MztcdGVyciA9IG1hbmFfaW5pdF9wb3J0X2NvbnRleHQoc2NyYXRjaCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gb3V0X2VycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gbWFuYV9yc3NfdGFibGVfYWxsb2Moc2NyYXRjaCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gY2xlYW51cF9yeHFfYXJyYXk7XG4mIzQzO1xuJiM0MztcdC8qIFJldXNlIHRoZSBleGlzdGluZyBFUSBwb29sOyB0aGUgcXVldWUgY291bnQgaXMgdW5jaGFuZ2VkLiAqL1xuJiM0MztcdHNjcmF0Y2gtXHUwMDNlZXFzID0gYXBjLVx1MDAzZWVxcztcbiYjNDM7XHRzY3JhdGNoLVx1MDAzZW51bV9lcXMgPSBhcGMtXHUwMDNlbnVtX2VxcztcbiYjNDM7XG4mIzQzO1x0ZXJyID0gbWFuYV9jcmVhdGVfdHhxKHNjcmF0Y2gsIG5kZXYsIDApO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXBfcnNzO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBtYW5hX2FkZF9yeF9xdWV1ZXMoc2NyYXRjaCwgbmRldiwgMCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gY2xlYW51cF9yeHE7XG4mIzQzO1xuJiM0MztcdGlmIChtYW5hX3Jzc190YWJsZV9rZWVwKGFwYywgc2NyYXRjaC1cdTAwM2VudW1fcXVldWVzLCBcdTAwMjZpbmRpcl9sb3N0KSlcbiYjNDM7XHRcdG1lbWNweShzY3JhdGNoLVx1MDAzZWluZGlyX3RhYmxlLCBhcGMtXHUwMDNlaW5kaXJfdGFibGUsXG4mIzQzO1x0XHQgICAgICAgYXBjLVx1MDAzZWluZGlyX3RhYmxlX3N6ICogc2l6ZW9mKCphcGMtXHUwMDNlaW5kaXJfdGFibGUpKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRtYW5hX3Jzc190YWJsZV9pbml0KHNjcmF0Y2gpO1xuJiM0MztcbiYjNDM7XHRtYW5hX3FzZXRfc25hcHNob3Qoc2NyYXRjaCwgb3V0KTtcbiYjNDM7XHRvdXQtXHUwMDNlcnhmaF9pbmRpcl9sb3N0ID0gaW5kaXJfbG9zdDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2NsZWFudXBfcnhxOlxuJiM0MztcdG1hbmFfZGVzdHJveV9yeHFzKHNjcmF0Y2gpO1xuJiM0MztcdG1hbmFfZGVzdHJveV90eHEoc2NyYXRjaCk7XG4mIzQzO2NsZWFudXBfcnNzOlxuJiM0MztcdG1hbmFfY2xlYW51cF9pbmRpcl90YWJsZShzY3JhdGNoKTtcbiYjNDM7Y2xlYW51cF9yeHFfYXJyYXk6XG4mIzQzO1x0a2ZyZWUoc2NyYXRjaC1cdTAwM2VyeHFzKTtcbiYjNDM7XHRzY3JhdGNoLVx1MDAzZXJ4cXMgPSBOVUxMO1xuJiM0MztvdXRfZXJyOlxuJiM0MztcdG5ldGRldl9lcnIobmRldiwgXCYjMzQ7JXMobnVtX3F1ZXVlcz0ldSkgZmFpbGVkOiAlZFxcblwmIzM0OywgX19mdW5jX18sXG4mIzQzO1x0XHQgICBhcGMtXHUwMDNlbnVtX3F1ZXVlcywgZXJyKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBEZXN0cm95IGNhbGxlci1vd25lZCBDUXMgYmVmb3JlIGNsb3NpbmcgdGhpcyBkZWFkLWVuZCBwb3J0OiBjbG9zaW5nIGFsc29cbiYjNDM7ICogZnJlZXMgdGhlIHNoYXJlZCBFUSBwb29sLiBSZXF1aXJlcyBSVE5MLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBtYW5hX3B1Ymxpc2hfY2xvc2VfaWZfbmVlZGVkKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKVxuJiM0Mzt7XG4mIzQzO1x0QVNTRVJUX1JUTkwoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFhcGMtXHUwMDNlcHVibGlzaF9kZWFkX2VuZClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0YXBjLVx1MDAzZXB1Ymxpc2hfZGVhZF9lbmQgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKG1hbmFfZGVhbGxvY19xdWV1ZXMoYXBjLVx1MDAzZW5kZXYpKVxuJiM0MztcdFx0bmV0ZGV2X2VycihhcGMtXHUwMDNlbmRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7ZmFpbGVkIHRvIGNsb3NlIHRoZSBwb3J0IGFmdGVyIGEgZmFpbGVkIHJvbGxiYWNrXFxuXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQ2FycmllZC1vdmVyIHF1ZXVlcyBtYXkgc3RpbGwgaGF2ZSBmdWxsIHJpbmdzLiAqL1xuJiM0MztzdGF0aWMgdm9pZCBtYW5hX3N0YXJ0X3R4cXMoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGFwYy1cdTAwM2VuZGV2O1xuJiM0MztcdHVuc2lnbmVkIGludCBpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWFwYy1cdTAwM2V0eF9xcClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0LyogT3JkZXIgcG9ydF9pc191cD10cnVlIGJlZm9yZSByaW5nIHJlYWRzIHRvIGF2b2lkIGEgbWlzc2VkIHdha2V1cC5cbiYjNDM7XHQgKiBQYWlyIHdpdGggbWFuYV9wb2xsX3R4X2NxKCkmIzM5O3MgZnVsbCBiYXJyaWVyIGFmdGVyIGl0cyB0YWlsIHVwZGF0ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzbXBfbWIoKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgYXBjLVx1MDAzZW51bV9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAoIWFwYy1cdTAwM2V0eF9xcFtpXSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1hbmFfY2FuX3R4KGFwYy1cdTAwM2V0eF9xcFtpXS1cdTAwM2V0eHEuZ2RtYV9zcSkpXG4mIzQzO1x0XHRcdG5ldGlmX3R4X3dha2VfcXVldWUobmV0ZGV2X2dldF90eF9xdWV1ZShuZGV2LCBpKSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSZXRpcmluZyBjb21wbGV0aW9ucyBtdXN0IG5vdCB3YWtlIHJlcGxhY2VtZW50IHF1ZXVlcy4gTWFyayB0aGUgbGVhdmluZyBzZXRcbiYjNDM7ICogYmVmb3JlIHVubWFya2luZyB0aGUgaW5jb21pbmcgc2V0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgbWFuYV9xc2V0X3NldF9yZXRpcmluZyhzdHJ1Y3QgbWFuYV9xc2V0ICpxc2V0LFxuJiM0MztcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBtYW5hX3FzZXQgKmtlZXAsIGJvb2wgcmV0aXJpbmcpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChxID0gMDsgcSBcdTAwM2MgcXNldC1cdTAwM2VudW1fcXVldWVzOyBxJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHFzZXQtXHUwMDNldHhfcXAgXHUwMDI2XHUwMDI2IHFzZXQtXHUwMDNldHhfcXBbcV0pXG4mIzQzO1x0XHRcdFdSSVRFX09OQ0UocXNldC1cdTAwM2V0eF9xcFtxXS1cdTAwM2V0eHEucmV0aXJpbmcsIHJldGlyaW5nKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXFzZXQtXHUwMDNlcnhxcyB8fCAhcXNldC1cdTAwM2VyeHFzW3FdKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBDYXJyaWVkIFJYUXMgcmVtYWluIHRoZSBzb2xlIHBvbGwgd3JpdGVycyBvZiBzaGFyZWQgc2xvdHMuICovXG4mIzQzO1x0XHRpZiAocmV0aXJpbmcgXHUwMDI2XHUwMDI2IGtlZXAgXHUwMDI2XHUwMDI2IHEgXHUwMDNjIGtlZXAtXHUwMDNlbnVtX3F1ZXVlcyBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBrZWVwLVx1MDAzZXJ4cXMgXHUwMDI2XHUwMDI2IGtlZXAtXHUwMDNlcnhxc1txXSA9PSBxc2V0LVx1MDAzZXJ4cXNbcV0pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdC8qIFN3aXRjaCB0byBkcmFpbl9zdGF0czsgaGFuZCBvZmYgc2hhcmVkIHNsb3RzIGFmdGVyIGEgZ3JhY2VcbiYjNDM7XHRcdCAqIHBlcmlvZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0V1JJVEVfT05DRShxc2V0LVx1MDAzZXJ4cXNbcV0tXHUwMDNlcmV0aXJpbmcsIHJldGlyaW5nKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIExlYXZlIFRYIHN0b3BwZWQgYW5kIHJlcXVlc3QgUlggZGlzYWJsZTsgc3RlZXJpbmcgbWF5IGJlIHVucmVjb3ZlcmFibGUuICovXG4mIzQzO3N0YXRpYyB2b2lkIG1hbmFfcHVibGlzaF9naXZlX3VwKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0YXBjLVx1MDAzZXJzc19zdGF0ZSA9IFRSSV9TVEFURV9GQUxTRTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gbWFuYV9kaXNhYmxlX3Zwb3J0X3J4KGFwYyk7XG4mIzQzO1x0aWYgKGVyciBcdTAwMjZcdTAwMjYgbWFuYV9lbl9uZWVkX2xvZyhhcGMsIGVycikpXG4mIzQzO1x0XHRuZXRkZXZfZXJyKGFwYy1cdTAwM2VuZGV2LCBcJiMzNDtmYWlsZWQgdG8gZGlzYWJsZSB2UG9ydCBSWDogJWRcXG5cJiMzNDssIGVycik7XG4mIzQzO1xuJiM0MztcdGFwYy1cdTAwM2VjYXJyaWVyX2ZvcmNlZF9vZmYgPSBuZXRpZl9jYXJyaWVyX29rKGFwYy1cdTAwM2VuZGV2KTtcbiYjNDM7XHRuZXRpZl9jYXJyaWVyX29mZihhcGMtXHUwMDNlbmRldik7XG4mIzQzO1x0YXBjLVx1MDAzZXB1Ymxpc2hfZGVhZF9lbmQgPSB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBLZWVwIHRoZSBSWCBjb3VudCBoaWdoIHVudGlsIHJldGlyaW5nIFJRcyBzdG9wIGRlbGl2ZXJpbmcgdGhlaXIgaW5kaWNlcy4gKi9cbiYjNDM7c3RhdGljIGludCBtYW5hX3JhaXNlX3JlYWxfbnVtX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1bnNpZ25lZCBpbnQgY291bnQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoY291bnQgXHUwMDNjPSBuZGV2LVx1MDAzZXJlYWxfbnVtX3J4X3F1ZXVlcylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbmV0aWZfc2V0X3JlYWxfbnVtX3J4X3F1ZXVlcyhuZGV2LCBjb3VudCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFB1Ymxpc2ggdW5kZXIgUlROTCB3aXRoIFRYIGdhdGVkLiBBbiBlcnJvciByZXN0b3JlcyBvbGQgcG9pbnRlcnMsIG5vdFxuJiM0MzsgKiBuZWNlc3NhcmlseSBzZXJ2aWNlLiBGcmVlIG9ubHkgb3duZWQgcXVldWVzLlxuJiM0MzsgKi9cbiYjNDM7aW50IG1hbmFfcHVibGlzaF9xc2V0KHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLCBzdHJ1Y3QgbWFuYV9xc2V0ICpuZXdxLFxuJiM0MztcdFx0ICAgICAgc3RydWN0IG1hbmFfcXNldCAqb3V0X29sZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gYXBjLVx1MDAzZW5kZXY7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX1JUTkwoKTtcbiYjNDM7XG4mIzQzO1x0LyogQ2xvc2UgdGhlIFhEUCBnYXRlIGJlZm9yZSBzdG9wcGluZyBUWCBxdWV1ZXMuIFBhaXIgd2l0aFxuJiM0MztcdCAqIG1hbmFfcG9sbF90eF9jcSgpJiMzOTtzIHNtcF9ybWIoKSB0byBwcmV2ZW50IG1pZC1zd2FwIHdha2V1cHMuXG4mIzQzO1x0ICovXG4mIzQzO1x0V1JJVEVfT05DRShhcGMtXHUwMDNlcG9ydF9pc191cCwgZmFsc2UpO1xuJiM0MztcbiYjNDM7XHQvKiBFbnN1cmUgcG9ydCBzdGF0ZSB1cGRhdGVkIGJlZm9yZSB0eHEgc3RhdGUgKi9cbiYjNDM7XHRzbXBfd21iKCk7XG4mIzQzO1xuJiM0MztcdG5ldGlmX3R4X2Rpc2FibGUobmRldik7XG4mIzQzO1xuJiM0MztcdG1hbmFfcXNldF9zbmFwc2hvdChhcGMsIG91dF9vbGQpO1xuJiM0MztcbiYjNDM7XHQvKiBNYXJrIGJlZm9yZSB0aGUgZ3JhY2UgcGVyaW9kIHNvIG9sZCBjb21wbGV0aW9ucyBjYW5ub3Qgd2FrZSB0aGVcbiYjNDM7XHQgKiByZXBsYWNlbWVudCYjMzk7cyBzdG9wcGVkIHF1ZXVlLlxuJiM0MztcdCAqL1xuJiM0MztcdG1hbmFfcXNldF9zZXRfcmV0aXJpbmcob3V0X29sZCwgbmV3cSwgdHJ1ZSk7XG4mIzQzO1xuJiM0MztcdC8qIERyYWluIFRYL1hEUCByZWFkZXJzIHBhc3QgdGhlIGdhdGUgYW5kIHBvbGxzIG1pc3NpbmcgcmV0aXJpbmcuICovXG4mIzQzO1x0c3luY2hyb25pemVfbmV0KCk7XG4mIzQzO1xuJiM0MztcdG1hbmFfcXNldF9zZXRfcmV0aXJpbmcobmV3cSwgTlVMTCwgZmFsc2UpO1xuJiM0MztcbiYjNDM7XHRtYW5hX3FzZXRfaW5zdGFsbChhcGMsIG5ld3EpO1xuJiM0MztcdGFwYy1cdTAwM2Vyc3Nfc3RhdGUgPSBhcGMtXHUwMDNlbnVtX3F1ZXVlcyBcdTAwM2UgMSA/IFRSSV9TVEFURV9UUlVFIDogVFJJX1NUQVRFX0ZBTFNFO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBuZXRpZl9zZXRfcmVhbF9udW1fdHhfcXVldWVzKG5kZXYsIGFwYy1cdTAwM2VudW1fcXVldWVzKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byByb2xsYmFjaztcbiYjNDM7XG4mIzQzO1x0ZXJyID0gbWFuYV9yYWlzZV9yZWFsX251bV9yeChuZGV2LCBhcGMtXHUwMDNlbnVtX3F1ZXVlcyk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gcm9sbGJhY2s7XG4mIzQzO1xuJiM0MztcdC8qIEluc3RhbGwgWERQIGJlZm9yZSBzdGVlcmluZyByZWFjaGVzIHRoZSBpbmNvbWluZyBSWFFzLiAqL1xuJiM0MztcdG1hbmFfY2huX3NldHhkcChhcGMsIG1hbmFfeGRwX2dldChhcGMpKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gbWFuYV9jb25maWdfcnNzKGFwYywgVFJJX1NUQVRFX1RSVUUsIHRydWUsIHRydWUpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIHJvbGxiYWNrO1xuJiM0MztcbiYjNDM7XHRXUklURV9PTkNFKG5kZXYtXHUwMDNlbXR1LCBhcGMtXHUwMDNlY29uZmlndXJlZF9tdHUpO1xuJiM0MztcbiYjNDM7XHQvKiBQdWJsaXNoIGZpZWxkcyBiZWZvcmUgb3BlbmluZyB0aGUgZ2F0ZTsgcGFpciB3aXRoIFRYL1hEUCByZWFkXG4mIzQzO1x0ICogYmFycmllcnMuIFRoZSBwb3N0LWdhdGUgZnVsbCBiYXJyaWVyIGNhbm5vdCByZXBsYWNlIHRoaXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0c21wX3dtYigpO1xuJiM0MztcbiYjNDM7XHRXUklURV9PTkNFKGFwYy1cdTAwM2Vwb3J0X2lzX3VwLCB0cnVlKTtcbiYjNDM7XHRtYW5hX3N0YXJ0X3R4cXMoYXBjKTtcbiYjNDM7XG4mIzQzO1x0LyogUmVwb3J0IGEgbG9zdCB1c2VyIHRhYmxlIG9ubHkgYWZ0ZXIgc3VjY2Vzc2Z1bCBwdWJsaWNhdGlvbi4gKi9cbiYjNDM7XHRpZiAobmV3cS1cdTAwM2VyeGZoX2luZGlyX2xvc3QpXG4mIzQzO1x0XHRldGh0b29sX3J4ZmhfaW5kaXJfbG9zdChuZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0Mztyb2xsYmFjazpcbiYjNDM7XHRuZXRkZXZfZXJyKG5kZXYsIFwmIzM0OyVzIGZhaWxlZDogJWQsIHJlc3RvcmluZyBwcmV2aW91cyBxdWV1ZSBzZXRcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBfX2Z1bmNfXywgZXJyKTtcbiYjNDM7XG4mIzQzO1x0bWFuYV9xc2V0X3NldF9yZXRpcmluZyhuZXdxLCBvdXRfb2xkLCB0cnVlKTtcbiYjNDM7XG4mIzQzO1x0LyogUXVpZXNjZSBuZXcgc2hhcmVkLXNsb3Qgd3JpdGVycyBiZWZvcmUgcmVzdG9yaW5nIG9sZCBvbmVzLiAqL1xuJiM0MztcdHN5bmNocm9uaXplX25ldCgpO1xuJiM0MztcbiYjNDM7XHRtYW5hX3FzZXRfc2V0X3JldGlyaW5nKG91dF9vbGQsIE5VTEwsIGZhbHNlKTtcbiYjNDM7XG4mIzQzO1x0LyogUXVpZXNjZSBvbGQgZHJhaW5fc3RhdHMgd3JpdGVycyBiZWZvcmUgZm9sZGluZy4gKi9cbiYjNDM7XHRzeW5jaHJvbml6ZV9uZXQoKTtcbiYjNDM7XHRtYW5hX2ZvbGRfcXNldF9yeF9zdGF0cyhhcGMsIG91dF9vbGQpO1xuJiM0MztcbiYjNDM7XHRtYW5hX3FzZXRfaW5zdGFsbChhcGMsIG91dF9vbGQpO1xuJiM0MztcdGFwYy1cdTAwM2Vyc3Nfc3RhdGUgPSBhcGMtXHUwMDNlbnVtX3F1ZXVlcyBcdTAwM2UgMSA/IFRSSV9TVEFURV9UUlVFIDogVFJJX1NUQVRFX0ZBTFNFO1xuJiM0MztcbiYjNDM7XHRpZiAobmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcyhuZGV2LCBhcGMtXHUwMDNlbnVtX3F1ZXVlcykgfHxcbiYjNDM7XHQgICAgbWFuYV9yYWlzZV9yZWFsX251bV9yeChuZGV2LCBhcGMtXHUwMDNlbnVtX3F1ZXVlcykpIHtcbiYjNDM7XHRcdC8qIEluY29uc2lzdGVudCByZXN0b3JlZCBxdWV1ZSBjb3VudHMgcHJvaGliaXQgVFg7IGxlYXZlIHRoZVxuJiM0MztcdFx0ICogcG9ydCBzdG9wcGVkLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5kZXYsIFwmIzM0O2ZhaWxlZCB0byByZXN0b3JlIHF1ZXVlIGNvdW50cywgY2xvc2luZyB0aGUgcG9ydFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRtYW5hX3B1Ymxpc2hfZ2l2ZV91cChhcGMpO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChtYW5hX2NvbmZpZ19yc3MoYXBjLCBUUklfU1RBVEVfVFJVRSwgdHJ1ZSwgdHJ1ZSkpIHtcbiYjNDM7XHRcdC8qIERvIG5vdCByZW9wZW4gVFggd2l0aCBtaXNtYXRjaGVkIHN0ZWVyaW5nOyBSWCBkaXNhYmxlIGlzXG4mIzQzO1x0XHQgKiBiZXN0LWVmZm9ydC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZGV2LCBcJiMzNDtmYWlsZWQgdG8gcmVzdG9yZSBSU1Mgc3RlZXJpbmcsIGNsb3NpbmcgdGhlIHBvcnRcXG5cJiMzNDspO1xuJiM0MztcdFx0bWFuYV9wdWJsaXNoX2dpdmVfdXAoYXBjKTtcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRXUklURV9PTkNFKG5kZXYtXHUwMDNlbXR1LCBhcGMtXHUwMDNlY29uZmlndXJlZF9tdHUpO1xuJiM0MztcbiYjNDM7XHQvKiBQdWJsaXNoIHJlc3RvcmVkIGZpZWxkcyBiZWZvcmUgcmVvcGVuaW5nIHRoZSBnYXRlLCBhcyBvbiBzdWNjZXNzLiAqL1xuJiM0MztcdHNtcF93bWIoKTtcbiYjNDM7XG4mIzQzO1x0V1JJVEVfT05DRShhcGMtXHUwMDNlcG9ydF9pc191cCwgdHJ1ZSk7XG4mIzQzO1x0bWFuYV9zdGFydF90eHFzKGFwYyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIENyZWF0ZSBtaXNzaW5nIGRlYnVnZnMgbm9kZXMgb25jZSByZXRpcmluZyBuYW1lcyBhcmUgZ29uZS4gKi9cbiYjNDM7dm9pZCBtYW5hX3FzZXRfZGVidWdmc19wdWJsaXNoKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IGk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9SVE5MKCk7XG4mIzQzO1xuJiM0MztcdGlmIChJU19FUlJfT1JfTlVMTChhcGMtXHUwMDNlbWFuYV9wb3J0X2RlYnVnZnMpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhcGMtXHUwMDNlbnVtX3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChhcGMtXHUwMDNldHhfcXAgXHUwMDI2XHUwMDI2IGFwYy1cdTAwM2V0eF9xcFtpXSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBJU19FUlJfT1JfTlVMTChhcGMtXHUwMDNldHhfcXBbaV0tXHUwMDNlbWFuYV90eF9kZWJ1Z2ZzKSlcbiYjNDM7XHRcdFx0bWFuYV9jcmVhdGVfdHhxX2RlYnVnZnMoYXBjLCBpKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoYXBjLVx1MDAzZXJ4cXMgXHUwMDI2XHUwMDI2IGFwYy1cdTAwM2VyeHFzW2ldIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIElTX0VSUl9PUl9OVUxMKGFwYy1cdTAwM2VyeHFzW2ldLVx1MDAzZW1hbmFfcnhfZGVidWdmcykpXG4mIzQzO1x0XHRcdG1hbmFfY3JlYXRlX3J4cV9kZWJ1Z2ZzKGFwYywgaSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBVbmRlciBSVE5MLCBmcmVlIG9ubHkgcXVldWVzIG5vIGxvbmdlciBzaGFyZWQgd2l0aCB0aGUgaW5zdGFsbGVkIHNldC4gKi9cbiYjNDM7dm9pZCBtYW5hX2ZyZWVfcXNldChzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKnNjcmF0Y2gsIHN0cnVjdCBtYW5hX3FzZXQgKnFzZXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyA9IG5ldGRldl9wcml2KHNjcmF0Y2gtXHUwMDNlbmRldik7XG4mIzQzO1x0c3RydWN0IGJwZl9wcm9nICpyZXRpcmluZ19wcm9nO1xuJiM0MztcdHVuc2lnbmVkIGludCByZXRpcmluZ19xdWV1ZXM7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9SVE5MKCk7XG4mIzQzO1xuJiM0MztcdGlmICghcXNldC1cdTAwM2VyeHFzIFx1MDAyNlx1MDAyNiAhcXNldC1cdTAwM2V0eF9xcClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKHFzZXQtXHUwMDNldHhfcXApIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBxO1xuJiM0MztcbiYjNDM7XHRcdGZvciAocSA9IDA7IHEgXHUwMDNjIHFzZXQtXHUwMDNlbnVtX3F1ZXVlczsgcSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0aWYgKHFzZXQtXHUwMDNldHhfcXBbcV0pXG4mIzQzO1x0XHRcdFx0V1JJVEVfT05DRShxc2V0LVx1MDAzZXR4X3FwW3FdLVx1MDAzZXR4cS5yZXRpcmluZywgdHJ1ZSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBLZWVwIHJldGlyZWQgcXVldWVzIGFuZCBhcnJheXMgdGhyb3VnaCB0aGlzIGdyYWNlIHBlcmlvZDsgbG9jYWwgTkFQSVxuJiM0MztcdCAqIHN5bmNocm9uaXphdGlvbiBkb2VzIG5vdCBkcmFpbiBvdGhlciBkZXZpY2VzJiMzOTsgWERQLlxuJiM0MztcdCAqL1xuJiM0MztcdHN5bmNocm9uaXplX25ldCgpO1xuJiM0MztcbiYjNDM7XHRtYW5hX3FzZXRfaW5zdGFsbChzY3JhdGNoLCBxc2V0KTtcbiYjNDM7XG4mIzQzO1x0LyogS2VlcCByZXRpcmluZyBSWFFzJiMzOTsgWERQIHByb2dyYW1zIGFuZCByZWZlcmVuY2VzIHVudGlsIFJYIHRlYXJkb3duLlxuJiM0MztcdCAqIFJlYWQgdGhlIHByb2dyYW0gZnJvbSB0aGUgcXVldWVzLCBub3QgcXVldWUtc2V0IG1ldGFkYXRhLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldGlyaW5nX3Byb2cgPSBtYW5hX2Nobl94ZHBfcGVlayhzY3JhdGNoKTtcbiYjNDM7XHRyZXRpcmluZ19xdWV1ZXMgPSBzY3JhdGNoLVx1MDAzZW51bV9xdWV1ZXM7XG4mIzQzO1xuJiM0MztcdC8qIERyYWluIFRYIGJlZm9yZSB1bm1hcHBpbmcgUlggYnVmZmVycy4gKi9cbiYjNDM7XHRpZiAobWFuYV9kcmFpbl90eHFzKHNjcmF0Y2gpKSB7XG4mIzQzO1x0XHQvKiBGTFIgYWxzbyBkZXN0cm95cyB0aGUgSFdDOyByZWJ1aWxkaW5nIHBvcnRzIGlzIGJlc3QtZWZmb3J0LlxuJiM0MztcdFx0ICogVGhpcyBwYXRoIGRvZXMgbm90IHJlaW5pdGlhbGl6ZSB0aGUgZGV2aWNlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRzdHJ1Y3QgbWFuYV9jb250ZXh0ICphYyA9IGFwYy1cdTAwM2VhYztcbiYjNDM7XHRcdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqc2liO1xuJiM0MztcdFx0dW5zaWduZWQgaW50IGk7XG4mIzQzO1xuJiM0MztcdFx0bmV0ZGV2X2VycihzY3JhdGNoLVx1MDAzZW5kZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O2RldmljZSByZXNldCB3aGlsZSByZXRpcmluZyBhIHF1ZXVlIHNldCwgc2NoZWR1bGluZyBwb3J0IHJlc2V0XFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhYy1cdTAwM2VudW1fcG9ydHM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdGlmICghYWMtXHUwMDNlcG9ydHNbaV0pXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdHNpYiA9IG5ldGRldl9wcml2KGFjLVx1MDAzZXBvcnRzW2ldKTtcbiYjNDM7XHRcdFx0cXVldWVfd29yayhhYy1cdTAwM2VwZXJfcG9ydF9xdWV1ZV9yZXNldF93cSxcbiYjNDM7XHRcdFx0XHQgICBcdTAwMjZzaWItXHUwMDNlcXVldWVfcmVzZXRfd29yayk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBGZW5jZSBSUXMgYmVmb3JlIHVubWFwcGluZywgYnV0IHRlYXJkb3duIHByb2NlZWRzIG9uIGVycm9ycy4gKi9cbiYjNDM7XHRtYW5hX2ZlbmNlX3JxcyhzY3JhdGNoKTtcbiYjNDM7XG4mIzQzO1x0bWFuYV9kZXN0cm95X3J4cXMoc2NyYXRjaCk7XG4mIzQzO1xuJiM0MztcdG1hbmFfY2huX3hkcF9yZWxlYXNlKHJldGlyaW5nX3Byb2csIHJldGlyaW5nX3F1ZXVlcyk7XG4mIzQzO1xuJiM0MztcdG1hbmFfZGVzdHJveV90eHEoc2NyYXRjaCk7XG4mIzQzO1x0bWFuYV9jbGVhbnVwX2luZGlyX3RhYmxlKHNjcmF0Y2gpO1xuJiM0MztcdGtmcmVlKHNjcmF0Y2gtXHUwMDNlcnhxcyk7XG4mIzQzO1x0c2NyYXRjaC1cdTAwM2VyeHFzID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KHFzZXQsIDAsIHNpemVvZigqcXNldCkpO1xuJiM0MztcbiYjNDM7XHQvKiBSZXRpcmluZyBSUXMgY2FuIG5vIGxvbmdlciBkZWxpdmVyIGluZGljZXMgYmV5b25kIHRoZSBsaXZlIHF1ZXVlXG4mIzQzO1x0ICogY291bnQuXG4mIzQzO1x0ICovXG4mIzQzO1x0bmV0aWZfc2V0X3JlYWxfbnVtX3J4X3F1ZXVlcyhhcGMtXHUwMDNlbmRldiwgYXBjLVx1MDAzZW51bV9xdWV1ZXMpO1xuJiM0MztcbiYjNDM7XHRtYW5hX3Nocmlua19lcXMoYXBjLCBhcGMtXHUwMDNlbnVtX3F1ZXVlcyk7XG4mIzQzO1xuJiM0MztcdG1hbmFfcXNldF9kZWJ1Z2ZzX3B1Ymxpc2goYXBjKTtcbiYjNDM7fVxuJiM0MztcbiBpbnQgbWFuYV9kZXRhY2goc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGJvb2wgZnJvbV9jbG9zZSlcbiB7XG4gXHRzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyA9IG5ldGRldl9wcml2KG5kZXYpO1xuQEAgLTM3ODYsMTAgJiM0Mzs0ODA2LDggQEAgaW50IG1hbmFfZGV0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBib29sIGZyb21fY2xvc2UpXG4gXG4gXHRpZiAoYXBjLVx1MDAzZXBvcnRfc3Rfc2F2ZSkge1xuIFx0XHRlcnIgPSBtYW5hX2RlYWxsb2NfcXVldWVzKG5kZXYpO1xuLVx0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRpZiAoZXJyKVxuIFx0XHRcdG5ldGRldl9lcnIobmRldiwgXCYjMzQ7JXMgZmFpbGVkIHRvIGRlYWxsb2NhdGUgcXVldWVzOiAlZFxcblwmIzM0OywgX19mdW5jX18sIGVycik7XG4tXHRcdFx0cmV0dXJuIGVycjtcbi1cdFx0fVxuIFx0fVxuIFxuIFx0aWYgKCFmcm9tX2Nsb3NlKSB7XG5AQCAtMzgyNiw2ICYjNDM7NDg0NCw3IEBAIHN0YXRpYyBpbnQgbWFuYV9wcm9iZV9wb3J0KHN0cnVjdCBtYW5hX2NvbnRleHQgKmFjLCBpbnQgcG9ydF9pZHgsXG4gXHRhcGMtXHUwMDNlcG9ydF9oYW5kbGUgPSBJTlZBTElEX01BTkFfSEFORExFO1xuIFx0YXBjLVx1MDAzZXBmX2ZpbHRlcl9oYW5kbGUgPSBJTlZBTElEX01BTkFfSEFORExFO1xuIFx0YXBjLVx1MDAzZXBvcnRfaWR4ID0gcG9ydF9pZHg7XG4mIzQzO1x0YXBjLVx1MDAzZWNvbmZpZ3VyZWRfbXR1ID0gbmRldi1cdTAwM2VtdHU7XG4gXHRhcGMtXHUwMDNlbGlua19jZmdfZXJyb3IgPSAxO1xuIFx0YXBjLVx1MDAzZWNxZV9jb2FsZXNjaW5nX2VuYWJsZSA9IDA7XG4gXHRhcGMtXHUwMDNlY3FlOF9jb2FsZXNjaW5nX2VuYWJsZSA9IDA7XG5AQCAtMzg0MCw2ICYjNDM7NDg1OSwxMCBAQCBzdGF0aWMgaW50IG1hbmFfcHJvYmVfcG9ydChzdHJ1Y3QgbWFuYV9jb250ZXh0ICphYywgaW50IHBvcnRfaWR4LFxuIFx0XHRhcGMtXHUwMDNldHhfZGltX2VuYWJsZWQgPSBNQU5BX0FEQVBUSVZFX1RYX0RFRjtcbiBcdH1cbiBcbiYjNDM7XHRlcnIgPSBtYW5hX2FsbG9jX3F1ZXVlX3N0YXRzKGFwYyk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZnJlZV9uZXQ7XG4mIzQzO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZhcGMtXHUwMDNldnBvcnRfbXV0ZXgpO1xuIFx0YXBjLVx1MDAzZXZwb3J0X3VzZV9jb3VudCA9IDA7XG4gXG5AQCAtMzg2Miw3ICYjNDM7NDg4NSw3IEBAIHN0YXRpYyBpbnQgbWFuYV9wcm9iZV9wb3J0KHN0cnVjdCBtYW5hX2NvbnRleHQgKmFjLCBpbnQgcG9ydF9pZHgsXG4gXG4gXHRlcnIgPSBtYW5hX2luaXRfcG9ydChuZGV2KTtcbiBcdGlmIChlcnIpXG4tXHRcdGdvdG8gZnJlZV9uZXQ7XG4mIzQzO1x0XHRnb3RvIGZyZWVfc3RhdHM7XG4gXG4gXHRlcnIgPSBtYW5hX3Jzc190YWJsZV9hbGxvYyhhcGMpO1xuIFx0aWYgKGVycilcbkBAIC0zODk5LDYgJiM0Mzs0OTIyLDggQEAgc3RhdGljIGludCBtYW5hX3Byb2JlX3BvcnQoc3RydWN0IG1hbmFfY29udGV4dCAqYWMsIGludCBwb3J0X2lkeCxcbiBcdG1hbmFfY2xlYW51cF9pbmRpcl90YWJsZShhcGMpO1xuIHJlc2V0X2FwYzpcbiBcdG1hbmFfY2xlYW51cF9wb3J0X2NvbnRleHQoYXBjKTtcbiYjNDM7ZnJlZV9zdGF0czpcbiYjNDM7XHRtYW5hX2ZyZWVfcXVldWVfc3RhdHMoYXBjKTtcbiBmcmVlX25ldDpcbiBcdCpuZGV2X3N0b3JhZ2UgPSBOVUxMO1xuIFx0bmV0ZGV2X2VycihuZGV2LCBcJiMzNDtGYWlsZWQgdG8gcHJvYmUgdlBvcnQgJWQ6ICVkXFxuXCYjMzQ7LCBwb3J0X2lkeCwgZXJyKTtcbkBAIC00MjM5LDYgJiM0Mzs1MjY0LDExIEBAIHZvaWQgbWFuYV9yZW1vdmUoc3RydWN0IGdkbWFfZGV2ICpnZCwgYm9vbCBzdXNwZW5kaW5nKVxuIFxuIFx0XHR1bnJlZ2lzdGVyX25ldGRldmljZShuZGV2KTtcbiBcdFx0bWFuYV9jbGVhbnVwX2luZGlyX3RhYmxlKGFwYyk7XG4mIzQzO1x0XHRtYW5hX2ZyZWVfcXVldWVfc3RhdHMoYXBjKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBSZW1vdmUgdGhlIHBvcnQgZnJvbSByZXNldCB3YWxrcyBiZWZvcmUgZnJlZWluZyBpdHMgbmV0ZGV2LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRhYy1cdTAwM2Vwb3J0c1tpXSA9IE5VTEw7XG4gXG4gXHRcdHJ0bmxfdW5sb2NrKCk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2V0aHRvb2wuY1xuaW5kZXggZWNlN2ZmOWNjNDA5YS4uNjU4NmE5ZDJhMTM0MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZXRodG9vbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2V0aHRvb2wuY1xuQEAgLTI0Miw2ICYjNDM7MjQyLDEyIEBAIHN0YXRpYyB2b2lkIG1hbmFfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHR1NjQgeGRwX3R4O1xuIFx0dTY0IHBrdF9sZW4wX2VycjtcbiBcdHU2NCBjb2FsZXNjZWRfY3FlW01BTkFfQ1FFX0NPQUxfUEtUU184IC0gMV07XG4mIzQzO1x0dTY0IHJldF9jb2FsZXNjZWRfY3FlW01BTkFfQ1FFX0NPQUxfUEtUU184IC0gMV07XG4mIzQzO1x0dTY0IHJldF9wYWNrZXRzLCByZXRfYnl0ZXM7XG4mIzQzO1x0dTY0IHJldF94ZHBfcmVkaXJlY3Q7XG4mIzQzO1x0dTY0IHJldF9wa3RfbGVuMF9lcnI7XG4mIzQzO1x0dTY0IHJldF94ZHBfZHJvcDtcbiYjNDM7XHR1NjQgcmV0X3hkcF90eDtcbiBcdHU2NCB0c29fcGFja2V0cztcbiBcdHU2NCB0c29fYnl0ZXM7XG4gXHR1NjQgdHNvX2lubmVyX3BhY2tldHM7XG5AQCAtMjUyLDE0ICYjNDM7MjU4LDExIEBAIHN0YXRpYyB2b2lkIG1hbmFfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHR1NjQgbWFuYV9tYXBfZXJyO1xuIFx0aW50IHEsIGkgPSAwLCBqO1xuIFxuLVx0aWYgKCFhcGMtXHUwMDNlcG9ydF9pc191cClcbi1cdFx0cmV0dXJuO1xuLVxuLVx0LyogV2UgY2FsbCB0aGlzIG1hbmEgZnVuY3Rpb24gdG8gZ2V0IHRoZSBwaHkgc3RhdHMgZnJvbSBHRE1BIGFuZCBpbmNsdWRlc1xuLVx0ICogYWdncmVnYXRlIHR4L3J4IGRyb3AgY291bnRlcnMsIFBlci1UQyhUcmFmZmljIENoYW5uZWwpIHR4L3J4IGFuZCBwYXVzZVxuLVx0ICogY291bnRlcnMuXG4mIzQzO1x0LyogQ291bnRlcnMgb3V0bGl2ZSB0aGUgcXVldWVzLCBidXQgc3VzcGVuZCBjYW4gZGVzdHJveSB0aGUgSFcgY2hhbm5lbFxuJiM0MztcdCAqIHdoaWxlIHRoZSBuZXRkZXYgcmVtYWlucyByZWdpc3RlcmVkLiBHYXRlIG9ubHkgdGhlIFBIWSBxdWVyeS5cbiBcdCAqL1xuLVx0bWFuYV9xdWVyeV9waHlfc3RhdHMoYXBjKTtcbiYjNDM7XHRpZiAoYXBjLVx1MDAzZXBvcnRfaXNfdXApXG4mIzQzO1x0XHRtYW5hX3F1ZXJ5X3BoeV9zdGF0cyhhcGMpO1xuIFxuIFx0Zm9yIChxID0gMDsgcSBcdTAwM2MgQVJSQVlfU0laRShtYW5hX2V0aF9zdGF0cyk7IHEmIzQzOyYjNDM7KVxuIFx0XHRkYXRhW2kmIzQzOyYjNDM7XSA9ICoodTY0ICopKGV0aF9zdGF0cyAmIzQzOyBtYW5hX2V0aF9zdGF0c1txXS5vZmZzZXQpO1xuQEAgLTI3MSw3ICYjNDM7Mjc0LDcgQEAgc3RhdGljIHZvaWQgbWFuYV9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcdFx0ZGF0YVtpJiM0MzsmIzQzO10gPSAqKHU2NCAqKShwaHlfc3RhdHMgJiM0MzsgbWFuYV9waHlfc3RhdHNbcV0ub2Zmc2V0KTtcbiBcbiBcdGZvciAocSA9IDA7IHEgXHUwMDNjIG51bV9xdWV1ZXM7IHEmIzQzOyYjNDM7KSB7XG4tXHRcdHJ4X3N0YXRzID0gXHUwMDI2YXBjLVx1MDAzZXJ4cXNbcV0tXHUwMDNlc3RhdHM7XG4mIzQzO1x0XHRyeF9zdGF0cyA9IFx1MDAyNmFwYy1cdTAwM2VyeHFfc3RhdHNbcV07XG4gXG4gXHRcdGRvIHtcbiBcdFx0XHRzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbihcdTAwMjZyeF9zdGF0cy1cdTAwM2VzeW5jcCk7XG5AQCAtMjg1LDYgJiM0MzsyODgsMzMgQEAgc3RhdGljIHZvaWQgbWFuYV9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcdFx0XHRcdGNvYWxlc2NlZF9jcWVbal0gPSByeF9zdGF0cy1cdTAwM2Vjb2FsZXNjZWRfY3FlW2pdO1xuIFx0XHR9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoXHUwMDI2cnhfc3RhdHMtXHUwMDNlc3luY3AsIHN0YXJ0KSk7XG4gXG4mIzQzO1x0XHQvKiBTbmFwc2hvdCBzZXBhcmF0ZWx5IHNvIGEgcmV0cnkgY2Fubm90IGFkZCByZXRpcmVkIGNvdW50ZXJzXG4mIzQzO1x0XHQgKiB0d2ljZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cnhfc3RhdHMgPSBcdTAwMjZhcGMtXHUwMDNlcnhxX3N0YXRzX3JldFtxXTtcbiYjNDM7XG4mIzQzO1x0XHRkbyB7XG4mIzQzO1x0XHRcdHN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luKFx1MDAyNnJ4X3N0YXRzLVx1MDAzZXN5bmNwKTtcbiYjNDM7XHRcdFx0cmV0X3BhY2tldHMgPSByeF9zdGF0cy1cdTAwM2VwYWNrZXRzO1xuJiM0MztcdFx0XHRyZXRfYnl0ZXMgPSByeF9zdGF0cy1cdTAwM2VieXRlcztcbiYjNDM7XHRcdFx0cmV0X3hkcF9kcm9wID0gcnhfc3RhdHMtXHUwMDNleGRwX2Ryb3A7XG4mIzQzO1x0XHRcdHJldF94ZHBfdHggPSByeF9zdGF0cy1cdTAwM2V4ZHBfdHg7XG4mIzQzO1x0XHRcdHJldF94ZHBfcmVkaXJlY3QgPSByeF9zdGF0cy1cdTAwM2V4ZHBfcmVkaXJlY3Q7XG4mIzQzO1x0XHRcdHJldF9wa3RfbGVuMF9lcnIgPSByeF9zdGF0cy1cdTAwM2Vwa3RfbGVuMF9lcnI7XG4mIzQzO1x0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIE1BTkFfQ1FFX0NPQUxfUEtUU184IC0gMTsgaiYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdFx0cmV0X2NvYWxlc2NlZF9jcWVbal0gPVxuJiM0MztcdFx0XHRcdFx0cnhfc3RhdHMtXHUwMDNlY29hbGVzY2VkX2NxZVtqXTtcbiYjNDM7XHRcdH0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeShcdTAwMjZyeF9zdGF0cy1cdTAwM2VzeW5jcCwgc3RhcnQpKTtcbiYjNDM7XG4mIzQzO1x0XHRwYWNrZXRzICYjNDM7PSByZXRfcGFja2V0cztcbiYjNDM7XHRcdGJ5dGVzICYjNDM7PSByZXRfYnl0ZXM7XG4mIzQzO1x0XHR4ZHBfZHJvcCAmIzQzOz0gcmV0X3hkcF9kcm9wO1xuJiM0MztcdFx0eGRwX3R4ICYjNDM7PSByZXRfeGRwX3R4O1xuJiM0MztcdFx0eGRwX3JlZGlyZWN0ICYjNDM7PSByZXRfeGRwX3JlZGlyZWN0O1xuJiM0MztcdFx0cGt0X2xlbjBfZXJyICYjNDM7PSByZXRfcGt0X2xlbjBfZXJyO1xuJiM0MztcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgTUFOQV9DUUVfQ09BTF9QS1RTXzggLSAxOyBqJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0Y29hbGVzY2VkX2NxZVtqXSAmIzQzOz0gcmV0X2NvYWxlc2NlZF9jcWVbal07XG4mIzQzO1xuIFx0XHRkYXRhW2kmIzQzOyYjNDM7XSA9IHBhY2tldHM7XG4gXHRcdGRhdGFbaSYjNDM7JiM0MztdID0gYnl0ZXM7XG4gXHRcdGRhdGFbaSYjNDM7JiM0MztdID0geGRwX2Ryb3A7XG5AQCAtMjk2LDcgJiM0MzszMjYsNyBAQCBzdGF0aWMgdm9pZCBtYW5hX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFx0fVxuIFxuIFx0Zm9yIChxID0gMDsgcSBcdTAwM2MgbnVtX3F1ZXVlczsgcSYjNDM7JiM0MzspIHtcbi1cdFx0dHhfc3RhdHMgPSBcdTAwMjZhcGMtXHUwMDNldHhfcXBbcV0tXHUwMDNldHhxLnN0YXRzO1xuJiM0MztcdFx0dHhfc3RhdHMgPSBcdTAwMjZhcGMtXHUwMDNldHhxX3N0YXRzW3FdO1xuIFxuIFx0XHRkbyB7XG4gXHRcdFx0c3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oXHUwMDI2dHhfc3RhdHMtXHUwMDNlc3luY3ApO1xuQEAgLTY0OCw1MiAmIzQzOzY3OCwxMjYgQEAgc3RhdGljIGludCBtYW5hX3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi0vKiBtYW5hX3NldF9jaGFubmVscyAtIGNoYW5nZSB0aGUgbnVtYmVyIG9mIHF1ZXVlcyBvbiBhIHBvcnRcbi0gKlxuLSAqIFJldHVybnMgLUVCVVNZIGlmIFJETUEgaG9sZHMgdGhlIHZwb3J0IHdpdGggRVFzIHNpemVkIHRvIHRoZVxuLSAqIGN1cnJlbnQgbnVtX3F1ZXVlcy5cbi0gKi9cbiBzdGF0aWMgaW50IG1hbmFfc2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFx0XHRcdCAgICAgc3RydWN0IGV0aHRvb2xfY2hhbm5lbHMgKmNoYW5uZWxzKVxuIHtcbiBcdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXHR1bnNpZ25lZCBpbnQgbmV3X2NvdW50ID0gY2hhbm5lbHMtXHUwMDNlY29tYmluZWRfY291bnQ7XG4tXHR1bnNpZ25lZCBpbnQgb2xkX2NvdW50ID0gYXBjLVx1MDAzZW51bV9xdWV1ZXM7XG4mIzQzO1x0c3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICpzY3JhdGNoO1xuJiM0MztcdHN0cnVjdCBtYW5hX3FzZXQgbmV3cSwgb2xkcSwgZnJlc2hxO1xuIFx0aW50IGVycjtcbiBcbi1cdC8qIFNldCBjaGFubmVsX2NoYW5naW5nIHRvIGJsb2NrIFJETUEgZnJvbSBncmFiYmluZyB0aGUgdnBvcnRcbi1cdCAqIGR1cmluZyB0aGUgZGV0YWNoL2F0dGFjaCB3aW5kb3cuIG1hbmFfY2ZnX3Zwb3J0KCkgY2hlY2tzXG4tXHQgKiB0aGlzIGZsYWcgdW5kZXIgdnBvcnRfbXV0ZXggYW5kIHJldHVybnMgLUVCVVNZIGlmIHNldC5cbiYjNDM7XHRpZiAobmV3X2NvdW50IFx1MDAzYyAxIHx8IG5ld19jb3VudCBcdTAwM2UgYXBjLVx1MDAzZW1heF9xdWV1ZXMpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmRldiwgXCYjMzQ7SW52YWxpZCBjb21iaW5lZF9jb3VudCAldSAobWF4ICV1KVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgbmV3X2NvdW50LCBhcGMtXHUwMDNlbWF4X3F1ZXVlcyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChuZXdfY291bnQgPT0gYXBjLVx1MDAzZW51bV9xdWV1ZXMpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LyogUmVzaXplIHJ4cXMgd2hpbGUgZG93bjogbWFuYV9vcGVuKCkgZG9lcyBub3QgcmVjcmVhdGUgdGhlIHBvcnRcbiYjNDM7XHQgKiBjb250ZXh0LiBSRE1BIG11c3Qgbm90IG93biB0aGUgdnBvcnQgd2hpbGUgbnVtX3F1ZXVlcyBjaGFuZ2VzLlxuIFx0ICovXG4gXHRtdXRleF9sb2NrKFx1MDAyNmFwYy1cdTAwM2V2cG9ydF9tdXRleCk7XG4tXHRpZiAoIWFwYy1cdTAwM2Vwb3J0X2lzX3VwIFx1MDAyNlx1MDAyNiBhcGMtXHUwMDNldnBvcnRfdXNlX2NvdW50KSB7XG4mIzQzO1x0aWYgKCFhcGMtXHUwMDNlcG9ydF9pc191cCkge1xuJiM0MztcdFx0c3RydWN0IG1hbmFfcnhxICoqcnhxcztcbiYjNDM7XG4mIzQzO1x0XHRpZiAoYXBjLVx1MDAzZXZwb3J0X3VzZV9jb3VudCkge1xuJiM0MztcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2YXBjLVx1MDAzZXZwb3J0X211dGV4KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRyeHFzID0ga3phbGxvY19vYmpzKHN0cnVjdCBtYW5hX3J4cSAqLCBuZXdfY291bnQpO1xuJiM0MztcdFx0aWYgKCFyeHFzKSB7XG4mIzQzO1x0XHRcdG11dGV4X3VubG9jayhcdTAwMjZhcGMtXHUwMDNldnBvcnRfbXV0ZXgpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRrZnJlZShhcGMtXHUwMDNlcnhxcyk7XG4mIzQzO1x0XHRhcGMtXHUwMDNlcnhxcyA9IHJ4cXM7XG4mIzQzO1x0XHRhcGMtXHUwMDNlbnVtX3F1ZXVlcyA9IG5ld19jb3VudDtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZhcGMtXHUwMDNldnBvcnRfbXV0ZXgpO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBUaGUgRXRoZXJuZXQgcG9ydCBhbHJlYWR5IGhvbGRzIGEgdnBvcnQgcmVmZXJlbmNlOyBleGNsdWRlIFJETUFcbiYjNDM7XHQgKiB0aHJvdWdoIGZhaWx1cmUgY2xlYW51cC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoYXBjLVx1MDAzZWNoYW5uZWxfY2hhbmdpbmcpIHtcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmFwYy1cdTAwM2V2cG9ydF9tdXRleCk7XG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXHR9XG4gXHRhcGMtXHUwMDNlY2hhbm5lbF9jaGFuZ2luZyA9IHRydWU7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2YXBjLVx1MDAzZXZwb3J0X211dGV4KTtcbiBcbi1cdGVyciA9IG1hbmFfcHJlX2FsbG9jX3J4YnVmcyhhcGMsIG5kZXYtXHUwMDNlbXR1LCBuZXdfY291bnQpO1xuLVx0aWYgKGVycikge1xuLVx0XHRuZXRkZXZfZXJyKG5kZXYsIFwmIzM0O0luc3VmZmljaWVudCBtZW1vcnkgZm9yIG5ldyBhbGxvY2F0aW9uc1wmIzM0Oyk7XG4mIzQzO1x0c2NyYXRjaCA9IG1hbmFfcXNldF9zY3JhdGNoX2FsbG9jKGFwYyk7XG4mIzQzO1x0aWYgKCFzY3JhdGNoKSB7XG4mIzQzO1x0XHRlcnIgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIGNsZWFyX2ZsYWc7XG4gXHR9XG4gXG4tXHRlcnIgPSBtYW5hX2RldGFjaChuZGV2LCBmYWxzZSk7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdG5ldGRldl9lcnIobmRldiwgXCYjMzQ7bWFuYV9kZXRhY2ggZmFpbGVkOiAlZFxcblwmIzM0OywgZXJyKTtcbi1cdFx0Z290byBvdXQ7XG4mIzQzO1x0aWYgKG5ld19jb3VudCBcdTAwM2MgYXBjLVx1MDAzZW51bV9xdWV1ZXMpIHtcbiYjNDM7XHRcdHN0cnVjdCBtYW5hX3FzZXQgdGFpbHE7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gbWFuYV9zcGxpdF9xc2V0KGFwYywgc2NyYXRjaCwgbmV3X2NvdW50LCBcdTAwMjZuZXdxLCBcdTAwMjZ0YWlscSk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRnb3RvIGZyZWVfc2NyYXRjaDtcbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBtYW5hX3B1Ymxpc2hfcXNldChhcGMsIFx1MDAyNm5ld3EsIFx1MDAyNm9sZHEpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHQvKiBEaXNjYXJkIGNvbnRhaW5lcnMgb25seTsgdGhlaXIgcXVldWVzIHN0aWxsIGJlbG9uZyB0b1xuJiM0MztcdFx0XHQgKiB0aGUgb2xkIHNldC5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdG1hbmFfZGlzY2FyZF9zcGxpdChcdTAwMjZuZXdxLCBcdTAwMjZ0YWlscSk7XG4mIzQzO1x0XHRcdGdvdG8gZnJlZV9zY3JhdGNoO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qIFdhaXQgZm9yIG5kb19zZWxlY3RfcXVldWUoKSByZWFkZXJzIG9mIG9sZHEuaW5kaXJfdGFibGUuIEZyZWVcbiYjNDM7XHRcdCAqIG9ubHkgY29udGFpbmVyczsgdGhlIHF1ZXVlcyBiZWxvbmcgdG8gdGhlIGtlcHQgc2V0IG9yIHRhaWwuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHN5bmNocm9uaXplX25ldCgpO1xuJiM0MztcbiYjNDM7XHRcdGtmcmVlKG9sZHEudHhfcXApO1xuJiM0MztcdFx0a2ZyZWUob2xkcS5yeHFzKTtcbiYjNDM7XHRcdGtmcmVlKG9sZHEuaW5kaXJfdGFibGUpO1xuJiM0MztcdFx0a2ZyZWUob2xkcS5yeG9ial90YWJsZSk7XG4mIzQzO1xuJiM0MztcdFx0bWFuYV9mcmVlX3FzZXQoc2NyYXRjaCwgXHUwMDI2dGFpbHEpO1xuJiM0MztcdFx0Z290byBmcmVlX3NjcmF0Y2g7XG4gXHR9XG4gXG4tXHRhcGMtXHUwMDNlbnVtX3F1ZXVlcyA9IG5ld19jb3VudDtcbi1cdGVyciA9IG1hbmFfYXR0YWNoKG5kZXYpO1xuJiM0MztcdGVyciA9IG1hbmFfZ3Jvd19xc2V0KGFwYywgc2NyYXRjaCwgbmV3X2NvdW50LCBcdTAwMjZuZXdxLCBcdTAwMjZmcmVzaHEpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGZyZWVfc2NyYXRjaDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gbWFuYV9wdWJsaXNoX3FzZXQoYXBjLCBcdTAwMjZuZXdxLCBcdTAwMjZvbGRxKTtcbiBcdGlmIChlcnIpIHtcbi1cdFx0YXBjLVx1MDAzZW51bV9xdWV1ZXMgPSBvbGRfY291bnQ7XG4tXHRcdG5ldGRldl9lcnIobmRldiwgXCYjMzQ7bWFuYV9hdHRhY2ggZmFpbGVkOiAlZFxcblwmIzM0OywgZXJyKTtcbiYjNDM7XHRcdC8qIEZyZWUgb25seSB0aGUgbmV3IHF1ZXVlcywgdGhlbiBkaXNjYXJkIHRoZSBtZXJnZWQgY29udGFpbmVycy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0bWFuYV9mcmVlX3FzZXQoc2NyYXRjaCwgXHUwMDI2ZnJlc2hxKTtcbiYjNDM7XHRcdG1hbmFfZGlzY2FyZF9ncm93KFx1MDAyNm5ld3EpO1xuJiM0MztcdFx0Z290byBmcmVlX3NjcmF0Y2g7XG4gXHR9XG4gXG4tb3V0OlxuLVx0bWFuYV9wcmVfZGVhbGxvY19yeGJ1ZnMoYXBjKTtcbiYjNDM7XHQvKiBXYWl0IGZvciBuZG9fc2VsZWN0X3F1ZXVlKCkgcmVhZGVycyBvZiBvbGRxLmluZGlyX3RhYmxlLiBBbGwgcXVldWVzXG4mIzQzO1x0ICogYXJlIG5vdyBsaXZlIGluIG5ld3E7IGZyZWUgb25seSB0aGUgb2xkIGFuZCBmcmVzaCBjb250YWluZXJzLlxuJiM0MztcdCAqL1xuJiM0MztcdHN5bmNocm9uaXplX25ldCgpO1xuJiM0MztcbiYjNDM7XHRrZnJlZShvbGRxLnR4X3FwKTtcbiYjNDM7XHRrZnJlZShvbGRxLnJ4cXMpO1xuJiM0MztcdGtmcmVlKG9sZHEuaW5kaXJfdGFibGUpO1xuJiM0MztcdGtmcmVlKG9sZHEucnhvYmpfdGFibGUpO1xuJiM0MztcdGtmcmVlKGZyZXNocS50eF9xcCk7XG4mIzQzO1x0a2ZyZWUoZnJlc2hxLnJ4cXMpO1xuJiM0MztcbiYjNDM7XHQvKiBObyByZXRpcmVtZW50IHJ1bnMgdG8gcHVibGlzaCB0aGUgbmV3IHF1ZXVlcyYjMzk7IGRlYnVnZnMgbm9kZXMuICovXG4mIzQzO1x0bWFuYV9xc2V0X2RlYnVnZnNfcHVibGlzaChhcGMpO1xuJiM0MztcbiYjNDM7ZnJlZV9zY3JhdGNoOlxuJiM0MztcdG1hbmFfcHVibGlzaF9jbG9zZV9pZl9uZWVkZWQoYXBjKTtcbiYjNDM7XHRtYW5hX3FzZXRfc2NyYXRjaF9mcmVlKHNjcmF0Y2gpO1xuIGNsZWFyX2ZsYWc6XG4gXHRtdXRleF9sb2NrKFx1MDAyNmFwYy1cdTAwM2V2cG9ydF9tdXRleCk7XG4gXHRhcGMtXHUwMDNlY2hhbm5lbF9jaGFuZ2luZyA9IGZhbHNlO1xuQEAgLTcyMCwxMyAmIzQzOzgyNCwxMSBAQCBzdGF0aWMgaW50IG1hbmFfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKnNjcmF0Y2g7XG4mIzQzO1x0c3RydWN0IG1hbmFfcXNldCBuZXdxLCBvbGRxO1xuIFx0dTMyIG5ld190eCwgbmV3X3J4O1xuLVx0dTMyIG9sZF90eCwgb2xkX3J4O1xuIFx0aW50IGVycjtcbiBcbi1cdG9sZF90eCA9IGFwYy1cdTAwM2V0eF9xdWV1ZV9zaXplO1xuLVx0b2xkX3J4ID0gYXBjLVx1MDAzZXJ4X3F1ZXVlX3NpemU7XG4tXG4gXHRpZiAocmluZy1cdTAwM2V0eF9wZW5kaW5nIFx1MDAzYyBNSU5fVFhfQlVGRkVSU19QRVJfUVVFVUUpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjaywgXCYjMzQ7dHg6JWQgbGVzcyB0aGFuIHRoZSBtaW46JWRcJiMzNDssIHJpbmctXHUwMDNldHhfcGVuZGluZyxcbiBcdFx0XHRcdCAgIE1JTl9UWF9CVUZGRVJTX1BFUl9RVUVVRSk7XG5AQCAtNzQ0LDMyICYjNDM7ODQ2LDU2IEBAIHN0YXRpYyBpbnQgbWFuYV9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFx0bmV0ZGV2X2luZm8obmRldiwgXCYjMzQ7VXNpbmcgbmVhcmVzdCBwb3dlciBvZiAyIHZhbHVlcyBmb3IgVHhxOiVkIFJ4cTolZFxcblwmIzM0OyxcbiBcdFx0ICAgIG5ld190eCwgbmV3X3J4KTtcbiBcbi1cdC8qIHByZS1hbGxvY2F0aW5nIG5ldyBidWZmZXJzIHRvIHByZXZlbnQgZmFpbHVyZXMgaW4gbWFuYV9hdHRhY2goKSBsYXRlciAqL1xuLVx0YXBjLVx1MDAzZXJ4X3F1ZXVlX3NpemUgPSBuZXdfcng7XG4tXHRlcnIgPSBtYW5hX3ByZV9hbGxvY19yeGJ1ZnMoYXBjLCBuZGV2LVx1MDAzZW10dSwgYXBjLVx1MDAzZW51bV9xdWV1ZXMpO1xuLVx0YXBjLVx1MDAzZXJ4X3F1ZXVlX3NpemUgPSBvbGRfcng7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdG5ldGRldl9lcnIobmRldiwgXCYjMzQ7SW5zdWZmaWNpZW50IG1lbW9yeSBmb3IgbmV3IGFsbG9jYXRpb25zXFxuXCYjMzQ7KTtcbi1cdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRpZiAobmV3X3J4ID09IGFwYy1cdTAwM2VyeF9xdWV1ZV9zaXplIFx1MDAyNlx1MDAyNiBuZXdfdHggPT0gYXBjLVx1MDAzZXR4X3F1ZXVlX3NpemUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFhcGMtXHUwMDNlcG9ydF9pc191cCkge1xuJiM0MztcdFx0YXBjLVx1MDAzZXJ4X3F1ZXVlX3NpemUgPSBuZXdfcng7XG4mIzQzO1x0XHRhcGMtXHUwMDNldHhfcXVldWVfc2l6ZSA9IG5ld190eDtcbiYjNDM7XHRcdHJldHVybiAwO1xuIFx0fVxuIFxuLVx0ZXJyID0gbWFuYV9kZXRhY2gobmRldiwgZmFsc2UpO1xuLVx0aWYgKGVycikge1xuLVx0XHRuZXRkZXZfZXJyKG5kZXYsIFwmIzM0O21hbmFfZGV0YWNoIGZhaWxlZDogJWRcXG5cJiMzNDssIGVycik7XG4tXHRcdGdvdG8gb3V0O1xuJiM0MztcdC8qIEV4Y2x1ZGUgUkRNQSB0aHJvdWdoIGZhaWx1cmUgY2xlYW51cCwgd2hpY2ggbWF5IHJlbGVhc2UgdGhlIHZwb3J0LiAqL1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2YXBjLVx1MDAzZXZwb3J0X211dGV4KTtcbiYjNDM7XHRpZiAoYXBjLVx1MDAzZWNoYW5uZWxfY2hhbmdpbmcpIHtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZhcGMtXHUwMDNldnBvcnRfbXV0ZXgpO1xuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XHR9XG4mIzQzO1x0YXBjLVx1MDAzZWNoYW5uZWxfY2hhbmdpbmcgPSB0cnVlO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZhcGMtXHUwMDNldnBvcnRfbXV0ZXgpO1xuJiM0MztcbiYjNDM7XHRzY3JhdGNoID0gbWFuYV9xc2V0X3NjcmF0Y2hfYWxsb2MoYXBjKTtcbiYjNDM7XHRpZiAoIXNjcmF0Y2gpIHtcbiYjNDM7XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIGNsZWFyX2ZsYWc7XG4gXHR9XG4gXG4tXHRhcGMtXHUwMDNldHhfcXVldWVfc2l6ZSA9IG5ld190eDtcbi1cdGFwYy1cdTAwM2VyeF9xdWV1ZV9zaXplID0gbmV3X3J4O1xuJiM0MztcdGVyciA9IG1hbmFfYWxsb2NfcXNldChhcGMsIHNjcmF0Y2gsIG5ld19yeCwgbmV3X3R4LFxuJiM0MztcdFx0XHQgICAgICBhcGMtXHUwMDNlcHJpdl9mbGFncywgYXBjLVx1MDAzZWNvbmZpZ3VyZWRfbXR1LFxuJiM0MztcdFx0XHQgICAgICBhcGMtXHUwMDNlYnBmX3Byb2csIFx1MDAyNm5ld3EpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssIFwmIzM0O2ZhaWxlZCB0byBjaGFuZ2UgcmluZyBwYXJhbXM6ICVkXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIGVycik7XG4mIzQzO1x0XHRnb3RvIGZyZWVfc2NyYXRjaDtcbiYjNDM7XHR9XG4gXG4tXHRlcnIgPSBtYW5hX2F0dGFjaChuZGV2KTtcbiYjNDM7XHRlcnIgPSBtYW5hX3B1Ymxpc2hfcXNldChhcGMsIFx1MDAyNm5ld3EsIFx1MDAyNm9sZHEpO1xuIFx0aWYgKGVycikge1xuLVx0XHRuZXRkZXZfZXJyKG5kZXYsIFwmIzM0O21hbmFfYXR0YWNoIGZhaWxlZDogJWRcXG5cJiMzNDssIGVycik7XG4tXHRcdGFwYy1cdTAwM2V0eF9xdWV1ZV9zaXplID0gb2xkX3R4O1xuLVx0XHRhcGMtXHUwMDNlcnhfcXVldWVfc2l6ZSA9IG9sZF9yeDtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssIFwmIzM0O2ZhaWxlZCB0byBjaGFuZ2UgcmluZyBwYXJhbXM6ICVkXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIGVycik7XG4mIzQzO1x0XHRtYW5hX2ZyZWVfcXNldChzY3JhdGNoLCBcdTAwMjZuZXdxKTtcbiYjNDM7XHRcdGdvdG8gZnJlZV9zY3JhdGNoO1xuIFx0fVxuLW91dDpcbi1cdG1hbmFfcHJlX2RlYWxsb2NfcnhidWZzKGFwYyk7XG4mIzQzO1xuJiM0MztcdG1hbmFfZnJlZV9xc2V0KHNjcmF0Y2gsIFx1MDAyNm9sZHEpO1xuJiM0MztcbiYjNDM7ZnJlZV9zY3JhdGNoOlxuJiM0MztcdG1hbmFfcHVibGlzaF9jbG9zZV9pZl9uZWVkZWQoYXBjKTtcbiYjNDM7XHRtYW5hX3FzZXRfc2NyYXRjaF9mcmVlKHNjcmF0Y2gpO1xuJiM0MztjbGVhcl9mbGFnOlxuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2YXBjLVx1MDAzZXZwb3J0X211dGV4KTtcbiYjNDM7XHRhcGMtXHUwMDNlY2hhbm5lbF9jaGFuZ2luZyA9IGZhbHNlO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZhcGMtXHUwMDNldnBvcnRfbXV0ZXgpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtNzk5LDcgJiM0Mzs5MjUsOCBAQCBzdGF0aWMgaW50IG1hbmFfc2V0X3ByaXZfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBwcml2X2ZsYWdzKVxuIHtcbiBcdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXHR1MzIgY2hhbmdlZCA9IGFwYy1cdTAwM2Vwcml2X2ZsYWdzIF4gcHJpdl9mbGFncztcbi1cdHUzMiBvbGRfcHJpdl9mbGFncyA9IGFwYy1cdTAwM2Vwcml2X2ZsYWdzO1xuJiM0MztcdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqc2NyYXRjaDtcbiYjNDM7XHRzdHJ1Y3QgbWFuYV9xc2V0IG5ld3EsIG9sZHE7XG4gXHRpbnQgZXJyID0gMDtcbiBcbiBcdGlmICghY2hhbmdlZClcbkBAIC04MDksNTQgJiM0Mzs5MzYsNTAgQEAgc3RhdGljIGludCBtYW5hX3NldF9wcml2X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgcHJpdl9mbGFncylcbiBcdGlmIChwcml2X2ZsYWdzIFx1MDAyNiB+R0VOTUFTSyhNQU5BX1BSSVZfRkxBR19NQVggLSAxLCAwKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRhcGMtXHUwMDNlcHJpdl9mbGFncyA9IHByaXZfZmxhZ3M7XG4tXG4tXHRpZiAoY2hhbmdlZCBcdTAwMjYgQklUKE1BTkFfUFJJVl9GTEFHX1VTRV9GVUxMX1BBR0VfUlhCVUYpKSB7XG4tXHRcdGlmICghYXBjLVx1MDAzZXBvcnRfaXNfdXApXG4tXHRcdFx0cmV0dXJuIDA7XG4tXG4tXHRcdC8qIElmIFhEUCBpcyBhdHRhY2hlZCBvciBNVFUgaXMganVtYm8sIHNpbmdsZS1idWZmZXItcGVyLXBhZ2Vcbi1cdFx0ICogaXMgYWxyZWFkeSBmb3JjZWQgcmVnYXJkbGVzcyBvZiB0aGlzIGZsYWcuIFNraXAgdGhlXG4tXHRcdCAqIGV4cGVuc2l2ZSBkZXRhY2gvYXR0YWNoIGN5Y2xlIHNpbmNlIG5vdGhpbmcgY2hhbmdlcy5cbi1cdFx0ICovXG4tXHRcdGlmIChuZGV2LVx1MDAzZW10dSAmIzQzOyBNQU5BX1JYQlVGX1BBRCBcdTAwM2UgUEFHRV9TSVpFIC8gMiB8fFxuLVx0XHQgICAgbWFuYV94ZHBfZ2V0KGFwYykpXG4tXHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0LyogU2tpcCByZWJ1aWxkaW5nIHdoZW4gZnVsbC1wYWdlIFJYIGlzIGFscmVhZHkgcmVxdWlyZWQuICovXG4mIzQzO1x0aWYgKCEoY2hhbmdlZCBcdTAwMjYgQklUKE1BTkFfUFJJVl9GTEFHX1VTRV9GVUxMX1BBR0VfUlhCVUYpKSB8fFxuJiM0MztcdCAgICAhYXBjLVx1MDAzZXBvcnRfaXNfdXAgfHxcbiYjNDM7XHQgICAgbmRldi1cdTAwM2VtdHUgJiM0MzsgTUFOQV9SWEJVRl9QQUQgXHUwMDNlIFBBR0VfU0laRSAvIDIgfHxcbiYjNDM7XHQgICAgbWFuYV94ZHBfZ2V0KGFwYykpIHtcbiYjNDM7XHRcdGFwYy1cdTAwM2Vwcml2X2ZsYWdzID0gcHJpdl9mbGFncztcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiBcbi1cdFx0LyogQmxvY2sgUkRNQSBmcm9tIGdyYWJiaW5nIHRoZSB2cG9ydCBkdXJpbmcgZGV0YWNoL2F0dGFjaCAqL1xuLVx0XHRtdXRleF9sb2NrKFx1MDAyNmFwYy1cdTAwM2V2cG9ydF9tdXRleCk7XG4tXHRcdGFwYy1cdTAwM2VjaGFubmVsX2NoYW5naW5nID0gdHJ1ZTtcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmFwYy1cdTAwM2V2cG9ydF9tdXRleCk7XG4mIzQzO1x0aWYgKGFwYy1cdTAwM2VjaGFubmVsX2NoYW5naW5nKSB7XG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZhcGMtXHUwMDNldnBvcnRfbXV0ZXgpO1xuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XHR9XG4mIzQzO1x0YXBjLVx1MDAzZWNoYW5uZWxfY2hhbmdpbmcgPSB0cnVlO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZhcGMtXHUwMDNldnBvcnRfbXV0ZXgpO1xuIFxuLVx0XHRlcnIgPSBtYW5hX3ByZV9hbGxvY19yeGJ1ZnMoYXBjLCBuZGV2LVx1MDAzZW10dSwgYXBjLVx1MDAzZW51bV9xdWV1ZXMpO1xuLVx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0bmV0ZGV2X2VycihuZGV2LFxuLVx0XHRcdFx0ICAgXCYjMzQ7SW5zdWZmaWNpZW50IG1lbW9yeSBmb3IgbmV3IGFsbG9jYXRpb25zXFxuXCYjMzQ7KTtcbi1cdFx0XHRhcGMtXHUwMDNlcHJpdl9mbGFncyA9IG9sZF9wcml2X2ZsYWdzO1xuLVx0XHRcdGdvdG8gY2xlYXJfZmxhZztcbi1cdFx0fVxuJiM0MztcdHNjcmF0Y2ggPSBtYW5hX3FzZXRfc2NyYXRjaF9hbGxvYyhhcGMpO1xuJiM0MztcdGlmICghc2NyYXRjaCkge1xuJiM0MztcdFx0ZXJyID0gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gY2xlYXJfZmxhZztcbiYjNDM7XHR9XG4gXG4tXHRcdGVyciA9IG1hbmFfZGV0YWNoKG5kZXYsIGZhbHNlKTtcbi1cdFx0aWYgKGVycikge1xuLVx0XHRcdG5ldGRldl9lcnIobmRldiwgXCYjMzQ7bWFuYV9kZXRhY2ggZmFpbGVkOiAlZFxcblwmIzM0OywgZXJyKTtcbi1cdFx0XHRhcGMtXHUwMDNlcHJpdl9mbGFncyA9IG9sZF9wcml2X2ZsYWdzO1xuLVx0XHRcdGdvdG8gb3V0O1xuLVx0XHR9XG4mIzQzO1x0ZXJyID0gbWFuYV9hbGxvY19xc2V0KGFwYywgc2NyYXRjaCwgYXBjLVx1MDAzZXJ4X3F1ZXVlX3NpemUsXG4mIzQzO1x0XHRcdCAgICAgIGFwYy1cdTAwM2V0eF9xdWV1ZV9zaXplLCBwcml2X2ZsYWdzLFxuJiM0MztcdFx0XHQgICAgICBhcGMtXHUwMDNlY29uZmlndXJlZF9tdHUsIGFwYy1cdTAwM2VicGZfcHJvZywgXHUwMDI2bmV3cSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZnJlZV9zY3JhdGNoO1xuIFxuLVx0XHRlcnIgPSBtYW5hX2F0dGFjaChuZGV2KTtcbi1cdFx0aWYgKGVycikge1xuLVx0XHRcdG5ldGRldl9lcnIobmRldiwgXCYjMzQ7bWFuYV9hdHRhY2ggZmFpbGVkOiAlZFxcblwmIzM0OywgZXJyKTtcbi1cdFx0XHRhcGMtXHUwMDNlcHJpdl9mbGFncyA9IG9sZF9wcml2X2ZsYWdzO1xuLVx0XHR9XG4mIzQzO1x0ZXJyID0gbWFuYV9wdWJsaXNoX3FzZXQoYXBjLCBcdTAwMjZuZXdxLCBcdTAwMjZvbGRxKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRtYW5hX2ZyZWVfcXNldChzY3JhdGNoLCBcdTAwMjZuZXdxKTtcbiYjNDM7XHRcdGdvdG8gZnJlZV9zY3JhdGNoO1xuIFx0fVxuIFxuLW91dDpcbi1cdG1hbmFfcHJlX2RlYWxsb2NfcnhidWZzKGFwYyk7XG4mIzQzO1x0bWFuYV9mcmVlX3FzZXQoc2NyYXRjaCwgXHUwMDI2b2xkcSk7XG4mIzQzO1xuJiM0MztmcmVlX3NjcmF0Y2g6XG4mIzQzO1x0bWFuYV9wdWJsaXNoX2Nsb3NlX2lmX25lZWRlZChhcGMpO1xuJiM0MztcdG1hbmFfcXNldF9zY3JhdGNoX2ZyZWUoc2NyYXRjaCk7XG4gY2xlYXJfZmxhZzpcbiBcdG11dGV4X2xvY2soXHUwMDI2YXBjLVx1MDAzZXZwb3J0X211dGV4KTtcbiBcdGFwYy1cdTAwM2VjaGFubmVsX2NoYW5naW5nID0gZmFsc2U7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2YXBjLVx1MDAzZXZwb3J0X211dGV4KTtcbi1cbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTg3MSw3ICYjNDM7OTk0LDggQEAgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG1hbmFfZXRodG9vbF9vcHMgPSB7XG4gXHQub3BfbmVlZHNfcnRubFx0XHQ9IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ0hBTk5FTFMgfFxuIFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTSB8XG4gXHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUEZMQUdTIHxcbi1cdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LLFxuJiM0MztcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LIHxcbiYjNDM7XHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9SU1MsXG4gXHQuZ2V0X2V0aHRvb2xfc3RhdHNcdD0gbWFuYV9nZXRfZXRodG9vbF9zdGF0cyxcbiBcdC5nZXRfc3NldF9jb3VudFx0XHQ9IG1hbmFfZ2V0X3NzZXRfY291bnQsXG4gXHQuZ2V0X3N0cmluZ3NcdFx0PSBtYW5hX2dldF9zdHJpbmdzLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oIGIvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmhcbmluZGV4IDMwODk1MGY5YjU0YjAuLjY2NjU2NWZmYjI2YWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmhcbkBAIC02ODYsNiAmIzQzOzY4NiwxMSBAQCBlbnVtIHtcbiAvKiBEcml2ZXIgc3VwcG9ydHMgbm9uLWNvbnRpZ3VvdXMgcXVldWUgYnVmZmVycyAqL1xuICNkZWZpbmUgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9OT05fQ09OVElHVU9VU19CVUZGRVJTIEJJVCgzMClcbiBcbiYjNDM7LyogUmVzaXplIGZhaWx1cmVzIGFyZSBoYW5kbGVkIGluLWRyaXZlcjsgYSBmYWlsZWQgcm9sbGJhY2sgc3RpbGwgbmVlZHNcbiYjNDM7ICogcmVjb3ZlcnkuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIEdETUFfRFJWX0NBUF9GTEFHXzFfU0VMRl9SRUNPVkVSWV9PTl9RVUVVRV9SRVNJWkVfRkFJTFVSRSBCSVQoMzEpXG4mIzQzO1xuICNkZWZpbmUgR0RNQV9EUlZfQ0FQX0ZMQUdTMSBcXFxuIFx0KEdETUFfRFJWX0NBUF9GTEFHXzFfRVFfU0hBUklOR19NVUxUSV9WUE9SVCB8IFxcXG4gXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9OQVBJX1dLRE9ORV9GSVggfCBcXFxuQEAgLTcwMyw3ICYjNDM7NzA4LDggQEAgZW51bSB7XG4gXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9IV0NfVElNRU9VVF9SRUNPVkVSWSB8IFxcXG4gXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9FUV9NU0lfVU5TSEFSRV9NVUxUSV9WUE9SVCB8IFxcXG4gXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9EWU5fSU5URVJSVVBUX01PREVSQVRJT04gfCBcXFxuLVx0IEdETUFfRFJWX0NBUF9GTEFHXzFfTk9OX0NPTlRJR1VPVVNfQlVGRkVSUylcbiYjNDM7XHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9OT05fQ09OVElHVU9VU19CVUZGRVJTIHwgXFxcbiYjNDM7XHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9TRUxGX1JFQ09WRVJZX09OX1FVRVVFX1JFU0laRV9GQUlMVVJFKVxuIFxuICNkZWZpbmUgR0RNQV9EUlZfQ0FQX0ZMQUdTMiAwXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFuYS9tYW5hLmggYi9pbmNsdWRlL25ldC9tYW5hL21hbmEuaFxuaW5kZXggODNiN2VmZjQ2NDZlYS4uY2M5MzZhZTk3YTAzMSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L21hbmEvbWFuYS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9tYW5hL21hbmEuaFxuQEAgLTEwMiw3ICYjNDM7MTAyLDcgQEAgc3RydWN0IG1hbmFfc3RhdHNfcngge1xuIFx0dTY0IHBrdF9sZW4wX2VycjtcbiBcdHU2NCBjb2FsZXNjZWRfY3FlW01BTkFfQ1FFX0NPQUxfUEtUU184IC0gMV07XG4gXHRzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMgc3luY3A7XG4tfTtcbiYjNDM7fSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xuIFxuIHN0cnVjdCBtYW5hX3N0YXRzX3R4IHtcbiBcdHU2NCBwYWNrZXRzO1xuQEAgLTExNyw3ICYjNDM7MTE3LDcgQEAgc3RydWN0IG1hbmFfc3RhdHNfdHgge1xuIFx0dTY0IGNzdW1fcGFydGlhbDtcbiBcdHU2NCBtYW5hX21hcF9lcnI7XG4gXHRzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMgc3luY3A7XG4tfTtcbiYjNDM7fSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xuIFxuIHN0cnVjdCBtYW5hX3R4cSB7XG4gXHRzdHJ1Y3QgZ2RtYV9xdWV1ZSAqZ2RtYV9zcTtcbkBAIC0xNDMsNyAmIzQzOzE0MywxMiBAQCBzdHJ1Y3QgbWFuYV90eHEge1xuIFxuIFx0Ym9vbCBuYXBpX2luaXRpYWxpemVkO1xuIFxuLVx0c3RydWN0IG1hbmFfc3RhdHNfdHggc3RhdHM7XG4mIzQzO1x0dTMyIHJlc2V0X2dlbjtcbiYjNDM7XG4mIzQzO1x0LyogU3VwcHJlc3MgY29tcGxldGlvbiB3YWtldXBzIG9uIHRoZSByZXBsYWNlbWVudCYjMzk7cyBuZXRkZXYgcXVldWUuICovXG4mIzQzO1x0Ym9vbCByZXRpcmluZztcbiYjNDM7XG4mIzQzO1x0c3RydWN0IG1hbmFfc3RhdHNfdHggKnN0YXRzO1xuIH07XG4gXG4gLyogc2tiIGRhdGEgYW5kIGZyYWdzIGRtYSBtYXBwaW5ncyAqL1xuQEAgLTQwNSw3ICYjNDM7NDEwLDE2IEBAIHN0cnVjdCBtYW5hX3J4cSB7XG4gXG4gXHR1MzIgYnVmX2luZGV4O1xuIFxuLVx0c3RydWN0IG1hbmFfc3RhdHNfcnggc3RhdHM7XG4mIzQzO1x0LyogUG9ydC1vd25lZCBsaXZlIHNsb3Q7IHVzZSBtYW5hX3J4cV9zdGF0cygpIHRvIHNlbGVjdCB0aGUgd3JpdGVyJiMzOTtzXG4mIzQzO1x0ICogc2xvdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzdHJ1Y3QgbWFuYV9zdGF0c19yeCAqc3RhdHM7XG4mIzQzO1xuJiM0MztcdC8qIFNldCB1bmRlciBSVE5MIGJlZm9yZSBhbm90aGVyIHF1ZXVlIHRha2VzIG92ZXIgdGhpcyBpbmRleC4gKi9cbiYjNDM7XHRib29sIHJldGlyaW5nO1xuJiM0MztcbiYjNDM7XHQvKiBGb2xkZWQgdW5kZXIgUlROTCBhZnRlciBkcmFpbi1zdGF0IHdyaXRlcnMgcXVpZXNjZS4gKi9cbiYjNDM7XHRzdHJ1Y3QgbWFuYV9zdGF0c19yeCBkcmFpbl9zdGF0cztcbiBcbiBcdHN0cnVjdCBicGZfcHJvZyBfX3JjdSAqYnBmX3Byb2c7XG4gXHRzdHJ1Y3QgeGRwX3J4cV9pbmZvIHhkcF9yeHE7XG5AQCAtNTM3LDYgJiM0Mzs1NTEsMTIgQEAgc3RydWN0IG1hbmFfY29udGV4dCB7XG4gXHR1OCBibV9ob3N0bW9kZTtcbiBcbiBcdHN0cnVjdCBtYW5hX2V0aHRvb2xfaGNfc3RhdHMgaGNfc3RhdHM7XG4mIzQzO1xuJiM0MztcdC8qIEdlbmVyYXRpb24gb2Ygc3VjY2Vzc2Z1bCByZXNldHMgaXNzdWVkIGJ5IG1hbmFfZHJhaW5fdHhxcygpLCB1bmRlclxuJiM0MztcdCAqIFJUTkwuXG4mIzQzO1x0ICovXG4mIzQzO1x0dTMyIHJlc2V0X2dlbjtcbiYjNDM7XG4gXHRzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcGVyX3BvcnRfcXVldWVfcmVzZXRfd3E7XG4gXHQvKiBXb3JrcXVldWUgZm9yIHF1ZXJ5aW5nIGhhcmR3YXJlIHN0YXRzICovXG4gXHRzdHJ1Y3QgZGVsYXllZF93b3JrIGdmX3N0YXRzX3dvcms7XG5AQCAtNTU5LDcgJiM0Mzs1NzksOSBAQCBzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQge1xuIFxuIFx0dTggbWFjX2FkZHJbRVRIX0FMRU5dO1xuIFxuJiM0MztcdC8qIFBvcnQtb3duZWQgRVEgcG9vbDogbWF4X3F1ZXVlcyBzbG90cywgbnVtX2VxcyBwb3B1bGF0ZWQuICovXG4gXHRzdHJ1Y3QgbWFuYV9lcSAqZXFzO1xuJiM0MztcdHVuc2lnbmVkIGludCBudW1fZXFzO1xuIFx0c3RydWN0IGRlbnRyeSAqbWFuYV9lcXNfZGVidWdmcztcbiBcbiBcdGVudW0gVFJJX1NUQVRFIHJzc19zdGF0ZTtcbkBAIC02MDAsOSAmIzQzOzYyMiwyMSBAQCBzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQge1xuIFx0dW5zaWduZWQgaW50IG1heF9xdWV1ZXM7XG4gXHR1bnNpZ25lZCBpbnQgbnVtX3F1ZXVlcztcbiBcbiYjNDM7XHQvKiBQb3J0LWxpZmV0aW1lIGFycmF5cyB3aXRoIG1heF9xdWV1ZXMgc2xvdHMuIExpdmUgUlggcXVldWVzIHdyaXRlXG4mIzQzO1x0ICogcnhxX3N0YXRzW107IHRlYXJkb3duIGFuZCByb2xsYmFjayBmb2xkIGRyYWluX3N0YXRzIGludG9cbiYjNDM7XHQgKiByeHFfc3RhdHNfcmV0W10gdW5kZXIgUlROTC4gUmVhZGVycyBzdW0gYm90aC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzdHJ1Y3QgbWFuYV9zdGF0c19yeCAqcnhxX3N0YXRzO1xuJiM0MztcdHN0cnVjdCBtYW5hX3N0YXRzX3J4ICpyeHFfc3RhdHNfcmV0O1xuJiM0MztcdHN0cnVjdCBtYW5hX3N0YXRzX3R4ICp0eHFfc3RhdHM7XG4mIzQzO1xuIFx0dW5zaWduZWQgaW50IHJ4X3F1ZXVlX3NpemU7XG4gXHR1bnNpZ25lZCBpbnQgdHhfcXVldWVfc2l6ZTtcbiBcbiYjNDM7XHQvKiBNVFUgdXNlZCB0byBzaXplIFJYIGJ1ZmZlcnMsIGluZGVwZW5kZW50IG9mIG5kZXYtXHUwMDNlbXR1IGR1cmluZyBhIHN3YXAuXG4mIzQzO1x0ICovXG4mIzQzO1x0aW50IGNvbmZpZ3VyZWRfbXR1O1xuJiM0MztcbiBcdG1hbmFfaGFuZGxlX3QgcG9ydF9oYW5kbGU7XG4gXHRtYW5hX2hhbmRsZV90IHBmX2ZpbHRlcl9oYW5kbGU7XG4gXG5AQCAtNjEwLDEyICYjNDM7NjQ0LDE3IEBAIHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCB7XG4gXHRzdHJ1Y3QgbXV0ZXggdnBvcnRfbXV0ZXg7XG4gXHRpbnQgdnBvcnRfdXNlX2NvdW50O1xuIFxuLVx0LyogU2V0IGJ5IG1hbmFfc2V0X2NoYW5uZWxzKCkgdW5kZXIgdnBvcnRfbXV0ZXggdG8gYmxvY2sgUkRNQVxuLVx0ICogZnJvbSBncmFiYmluZyB0aGUgdnBvcnQgZHVyaW5nIHRoZSBkZXRhY2gvYXR0YWNoIHdpbmRvdy5cbi1cdCAqIENoZWNrZWQgYnkgbWFuYV9jZmdfdnBvcnQoKSB3aGVuIGNhbGxlZCBmcm9tIHRoZSBSRE1BIHBhdGguXG4tXHQgKi9cbiYjNDM7XHQvKiBFeGNsdWRlIFJETUEgZHVyaW5nIHJlY29uZmlndXJhdGlvbjsgcHJvdGVjdGVkIGJ5IHZwb3J0X211dGV4LiAqL1xuIFx0Ym9vbCBjaGFubmVsX2NoYW5naW5nO1xuIFxuJiM0MztcdC8qIENhbGxlciBtdXN0IGNsb3NlIHRoZSBwb3J0IGFmdGVyIHJlbGVhc2luZyB0aGUgdW5wdWJsaXNoZWQgc2V0LiAqL1xuJiM0MztcdGJvb2wgcHVibGlzaF9kZWFkX2VuZDtcbiYjNDM7XG4mIzQzO1x0LyogQ2FycmllciBsb3dlcmVkIGJ5IGZhaWxlZCByb2xsYmFjazsgY2xlYXJlZCBvbiByZW9wZW4gb3IgYSBsaW5rXG4mIzQzO1x0ICogZXZlbnQuXG4mIzQzO1x0ICovXG4mIzQzO1x0Ym9vbCBjYXJyaWVyX2ZvcmNlZF9vZmY7XG4mIzQzO1xuIFx0LyogTmV0IHNoYXBlciBoYW5kbGUqL1xuIFx0c3RydWN0IG5ldF9zaGFwZXJfaGFuZGxlIGhhbmRsZTtcbiBcbkBAIC02NjEsNiAmIzQzOzcwMCwyNyBAQCBzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQge1xuIFx0dTMyIHN0ZWVyX2NxZV9jb2FsZXNjaW5nO1xuIH07XG4gXG4mIzQzO3N0cnVjdCBtYW5hX3FzZXQge1xuJiM0MztcdHN0cnVjdCBtYW5hX3R4X3FwXHQqKnR4X3FwO1xuJiM0MztcdHN0cnVjdCBtYW5hX3J4cVx0XHQqKnJ4cXM7XG4mIzQzO1xuJiM0MztcdHUzMlx0XHRcdCppbmRpcl90YWJsZTtcbiYjNDM7XHR1MzJcdFx0XHRpbmRpcl90YWJsZV9zejtcbiYjNDM7XHRtYW5hX2hhbmRsZV90XHRcdCpyeG9ial90YWJsZTtcbiYjNDM7XHRtYW5hX2hhbmRsZV90XHRcdGRlZmF1bHRfcnhvYmo7XG4mIzQzO1xuJiM0MztcdHVuc2lnbmVkIGludFx0XHRudW1fcXVldWVzO1xuJiM0MztcdHVuc2lnbmVkIGludFx0XHRyeF9xdWV1ZV9zaXplO1xuJiM0MztcdHVuc2lnbmVkIGludFx0XHR0eF9xdWV1ZV9zaXplO1xuJiM0MztcdHUzMlx0XHRcdHByaXZfZmxhZ3M7XG4mIzQzO1xuJiM0MztcdGludFx0XHRcdG10dTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3Byb2dcdFx0KmJwZl9wcm9nO1xuJiM0MztcbiYjNDM7XHQvKiBOb3RpZnkgdGhlIGNvcmUgb25seSBhZnRlciB0aGlzIHNldCBpcyBwdWJsaXNoZWQuICovXG4mIzQzO1x0Ym9vbFx0XHRcdHJ4ZmhfaW5kaXJfbG9zdDtcbiYjNDM7fTtcbiYjNDM7XG4gbmV0ZGV2X3R4X3QgbWFuYV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbiBpbnQgbWFuYV9jb25maWdfcnNzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYWMsIGVudW0gVFJJX1NUQVRFIHJ4LFxuIFx0XHQgICAgYm9vbCB1cGRhdGVfaGFzaCwgYm9vbCB1cGRhdGVfdGFiKTtcbkBAIC02NzAsNiAmIzQzOzczMCwzMyBAQCBpbnQgbWFuYV9hbGxvY19xdWV1ZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuIGludCBtYW5hX2F0dGFjaChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4gaW50IG1hbmFfZGV0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBib29sIGZyb21fY2xvc2UpO1xuIFxuJiM0MztzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKlxuJiM0MzttYW5hX3FzZXRfc2NyYXRjaF9hbGxvYyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyk7XG4mIzQzO3ZvaWQgbWFuYV9xc2V0X3NjcmF0Y2hfZnJlZShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKnNjcmF0Y2gpO1xuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBtYW5hX3N0YXRzX3J4ICptYW5hX3J4cV9zdGF0cyhzdHJ1Y3QgbWFuYV9yeHEgKnJ4cSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBSRUFEX09OQ0UocnhxLVx1MDAzZXJldGlyaW5nKSA/IFx1MDAyNnJ4cS1cdTAwM2VkcmFpbl9zdGF0cyA6IHJ4cS1cdTAwM2VzdGF0cztcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG1hbmFfYWxsb2NfcXNldChzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcbiYjNDM7XHRcdCAgICBzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKnNjcmF0Y2gsXG4mIzQzO1x0XHQgICAgdW5zaWduZWQgaW50IHJ4X3F1ZXVlX3NpemUsIHVuc2lnbmVkIGludCB0eF9xdWV1ZV9zaXplLFxuJiM0MztcdFx0ICAgIHUzMiBwcml2X2ZsYWdzLCBpbnQgbXR1LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLFxuJiM0MztcdFx0ICAgIHN0cnVjdCBtYW5hX3FzZXQgKm91dCk7XG4mIzQzO2ludCBtYW5hX3NwbGl0X3FzZXQoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXG4mIzQzO1x0XHQgICAgc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICpzY3JhdGNoLCB1bnNpZ25lZCBpbnQgbmV3X2NvdW50LFxuJiM0MztcdFx0ICAgIHN0cnVjdCBtYW5hX3FzZXQgKm91dF9uZXcsIHN0cnVjdCBtYW5hX3FzZXQgKm91dF90YWlsKTtcbiYjNDM7dm9pZCBtYW5hX2Rpc2NhcmRfc3BsaXQoc3RydWN0IG1hbmFfcXNldCAqbmV3cSwgc3RydWN0IG1hbmFfcXNldCAqdGFpbHEpO1xuJiM0MztpbnQgbWFuYV9ncm93X3FzZXQoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXG4mIzQzO1x0XHQgICBzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKnNjcmF0Y2gsIHVuc2lnbmVkIGludCBuZXdfY291bnQsXG4mIzQzO1x0XHQgICBzdHJ1Y3QgbWFuYV9xc2V0ICpvdXRfbmV3LCBzdHJ1Y3QgbWFuYV9xc2V0ICpvdXRfZnJlc2gpO1xuJiM0Mzt2b2lkIG1hbmFfZGlzY2FyZF9ncm93KHN0cnVjdCBtYW5hX3FzZXQgKm5ld3EpO1xuJiM0MztpbnQgbWFuYV9wdWJsaXNoX3FzZXQoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsIHN0cnVjdCBtYW5hX3FzZXQgKm5ld3EsXG4mIzQzO1x0XHQgICAgICBzdHJ1Y3QgbWFuYV9xc2V0ICpvdXRfb2xkKTtcbiYjNDM7dm9pZCBtYW5hX3B1Ymxpc2hfY2xvc2VfaWZfbmVlZGVkKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKTtcbiYjNDM7dm9pZCBtYW5hX2ZyZWVfcXNldChzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKnNjcmF0Y2gsIHN0cnVjdCBtYW5hX3FzZXQgKnFzZXQpO1xuJiM0Mzt2b2lkIG1hbmFfcXNldF9kZWJ1Z2ZzX3B1Ymxpc2goc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpO1xuJiM0MztcbiB2b2lkIG1hbmFfZGltX2NoYW5nZShzdHJ1Y3QgbWFuYV9jcSAqY3EsIGJvb2wgZW5hYmxlKTtcbiBcbiBpbnQgbWFuYV9wcm9iZShzdHJ1Y3QgZ2RtYV9kZXYgKmdkLCBib29sIHJlc3VtaW5nKTtcbkBAIC02ODUsNiAmIzQzOzc3Miw4IEBAIHUzMiBtYW5hX3J1bl94ZHAoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBtYW5hX3J4cSAqcnhxLFxuIFx0XHQgc3RydWN0IHhkcF9idWZmICp4ZHAsIHZvaWQgKmJ1Zl92YSwgdWludCBwa3RfbGVuKTtcbiBzdHJ1Y3QgYnBmX3Byb2cgKm1hbmFfeGRwX2dldChzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyk7XG4gdm9pZCBtYW5hX2Nobl9zZXR4ZHAoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XG4mIzQzO3N0cnVjdCBicGZfcHJvZyAqbWFuYV9jaG5feGRwX3BlZWsoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpO1xuJiM0Mzt2b2lkIG1hbmFfY2huX3hkcF9yZWxlYXNlKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdW5zaWduZWQgaW50IG51bV9xdWV1ZXMpO1xuIGludCBtYW5hX2JwZihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IG5ldGRldl9icGYgKmJwZik7XG4gaW50IG1hbmFfcXVlcnlfZ2Zfc3RhdHMoc3RydWN0IG1hbmFfY29udGV4dCAqYWMpO1xuIGludCBtYW5hX3F1ZXJ5X2xpbmtfY2ZnKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjo0NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS8gYW5kIGluY2x1ZGUvbmV0L21hbmEvKS4gVGhpcyBkcml2ZXIgdGFyZ2V0cyB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUvU21hcnROSUNzIG9uIE1pY3Jvc29mdCBBenVyZSAvIEh5cGVyLVYgZW52aXJvbm1lbnRzIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4gQXMgc3VjaCwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZjY2YyYjVhNDRhODdmNzNlMGI5MDEyNDVmODdhYjQ1MzhiYjQwZGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDIyOjQ3OjI0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9icGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfYnBmLmMKaW5kZXggNzBiYjhjOWRjMzQxMy4uM2FjZWMxYmIwMmEzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9icGYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2JwZi5jCkBAIC01OSw2ICYjNDM7NTksMTEgQEAgaW50IG1hbmFfeGRwX3htaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGludCBuLCBzdHJ1Y3QgeGRwX2ZyYW1lICoqZnJhbWVzLAogCWlmICh1bmxpa2VseSghYXBjLSZndDtwb3J0X2lzX3VwKSkKIAkJcmV0dXJuIDA7CiAKJiM0MzsJLyogUGFpciB3aXRoIHRoZSBzbXBfd21iKCkgaW4gbWFuYV9wdWJsaXNoX3FzZXQoKSBiZWZvcmUgcmVhZGluZyBxdWV1ZQomIzQzOwkgKiBzdGF0ZS4KJiM0MzsJICovCiYjNDM7CXNtcF9ybWIoKTsKJiM0MzsKIAlxX2lkeCA9IHNtcF9wcm9jZXNzb3JfaWQoKSAlIG5kZXYtJmd0O3JlYWxfbnVtX3R4X3F1ZXVlczsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBuOyBpJiM0MzsmIzQzOykgewpAQCAtNjgsNyAmIzQzOzczLDcgQEAgaW50IG1hbmFfeGRwX3htaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGludCBuLCBzdHJ1Y3QgeGRwX2ZyYW1lICoqZnJhbWVzLAogCQljb3VudCYjNDM7JiM0Mzs7CiAJfQogCi0JdHhfc3RhdHMgPSAmYW1wO2FwYy0mZ3Q7dHhfcXBbcV9pZHhdLSZndDt0eHEuc3RhdHM7CiYjNDM7CXR4X3N0YXRzID0gYXBjLSZndDt0eF9xcFtxX2lkeF0tJmd0O3R4cS5zdGF0czsKIAogCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJmFtcDt0eF9zdGF0cy0mZ3Q7c3luY3ApOwogCXR4X3N0YXRzLSZndDt4ZHBfeG1pdCAmIzQzOz0gY291bnQ7CkBAIC05NSw3ICYjNDM7MTAwLDcgQEAgdTMyIG1hbmFfcnVuX3hkcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IG1hbmFfcnhxICpyeHEsCiAKIAlhY3QgPSBicGZfcHJvZ19ydW5feGRwKHByb2csIHhkcCk7CiAKLQlyeF9zdGF0cyA9ICZhbXA7cnhxLSZndDtzdGF0czsKJiM0MzsJcnhfc3RhdHMgPSBtYW5hX3J4cV9zdGF0cyhyeHEpOwogCiAJc3dpdGNoIChhY3QpIHsKIAljYXNlIFhEUF9QQVNTOgpAQCAtMTcyLDYgJiM0MzsxNzcsOCBAQCBzdGF0aWMgaW50IG1hbmFfeGRwX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGJwZl9wcm9nICpwcm9nLAogCQkJc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjID0gbmV0ZGV2X3ByaXYobmRldik7CiYjNDM7CXN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqc2NyYXRjaDsKJiM0MzsJc3RydWN0IG1hbmFfcXNldCBuZXdxLCBvbGRxOwogCXN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7CiAJc3RydWN0IGdkbWFfY29udGV4dCAqZ2M7CiAJaW50IGVycjsKQEAgLTE5MSw0NiAmIzQzOzE5OCw0NCBAQCBzdGF0aWMgaW50IG1hbmFfeGRwX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGJwZl9wcm9nICpwcm9nLAogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCi0JLyogT25lIHJlZmNudCBvZiB0aGUgcHJvZyBpcyBob2xkIGJ5IHRoZSBjYWxsZXIgYWxyZWFkeSwgc28KLQkgKiBkb24mIzM5O3QgaW5jcmVhc2UgcmVmY250IGZvciB0aGlzIG9uZS4KLQkgKi8KLQlhcGMtJmd0O2JwZl9wcm9nID0gcHJvZzsKLQogCWlmIChhcGMtJmd0O3BvcnRfaXNfdXApIHsKLQkJLyogUmUtY3JlYXRlIHJ4cSYjMzk7cyBhZnRlciB4ZHAgcHJvZyB3YXMgbG9hZGVkIG9yIHVubG9hZGVkLgotCQkgKiBFeDogcmUgY3JlYXRlIHJ4cSYjMzk7cyB0byBzd2l0Y2ggZnJvbSBmdWxsIHBhZ2VzIHRvIHNtYWxsZXIKLQkJICogc2l6ZSBwYWdlIGZyYWdtZW50cyB3aGVuIHhkcCBwcm9nIGlzIHVubG9hZGVkIGFuZAotCQkgKiB2aWNlLXZlcnNhLgotCQkgKi8KLQotCQkvKiBQcmUtYWxsb2NhdGUgYnVmZmVycyB0byBwcmV2ZW50IGZhaWx1cmUgaW4gbWFuYV9hdHRhY2ggKi8KLQkJZXJyID0gbWFuYV9wcmVfYWxsb2NfcnhidWZzKGFwYywgbmRldi0mZ3Q7bXR1LCBhcGMtJmd0O251bV9xdWV1ZXMpOwotCQlpZiAoZXJyKSB7CiYjNDM7CQlzY3JhdGNoID0gbWFuYV9xc2V0X3NjcmF0Y2hfYWxsb2MoYXBjKTsKJiM0MzsJCWlmICghc2NyYXRjaCkgewogCQkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKLQkJCQkJICAgJiMzNDtYRFA6IEluc3VmZmljaWVudCBtZW1vcnkgZm9yIHR4L3J4IHJlLWNvbmZpZyYjMzQ7KTsKLQkJCXJldHVybiBlcnI7CiYjNDM7CQkJCQkgICAmIzM0O1hEUDogSW5zdWZmaWNpZW50IG1lbW9yeSBmb3IgcmUtY29uZmlnJiMzNDspOwomIzQzOwkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAKLQkJZXJyID0gbWFuYV9kZXRhY2gobmRldiwgZmFsc2UpOwomIzQzOwkJZXJyID0gbWFuYV9hbGxvY19xc2V0KGFwYywgc2NyYXRjaCwKJiM0MzsJCQkJICAgICAgYXBjLSZndDtyeF9xdWV1ZV9zaXplLCBhcGMtJmd0O3R4X3F1ZXVlX3NpemUsCiYjNDM7CQkJCSAgICAgIGFwYy0mZ3Q7cHJpdl9mbGFncywgYXBjLSZndDtjb25maWd1cmVkX210dSwKJiM0MzsJCQkJICAgICAgcHJvZywgJmFtcDtuZXdxKTsKIAkJaWYgKGVycikgewotCQkJbmV0ZGV2X2VycihuZGV2LAotCQkJCSAgICYjMzQ7bWFuYV9kZXRhY2ggZmFpbGVkIGF0IHhkcCBzZXQ6ICVkXG4mIzM0OywgZXJyKTsKIAkJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCi0JCQkJCSAgICYjMzQ7WERQOiBSZS1jb25maWcgZmFpbGVkIGF0IGRldGFjaCYjMzQ7KTsKLQkJCWdvdG8gZXJyX2RlYWxsb2NfcnhidWZmczsKJiM0MzsJCQkJCSAgICYjMzQ7WERQOiBSZS1jb25maWcgZmFpbGVkIGF0IGFsbG9jJiMzNDspOwomIzQzOwkJCW1hbmFfcXNldF9zY3JhdGNoX2ZyZWUoc2NyYXRjaCk7CiYjNDM7CQkJcmV0dXJuIGVycjsKIAkJfQogCi0JCWVyciA9IG1hbmFfYXR0YWNoKG5kZXYpOwomIzQzOwkJZXJyID0gbWFuYV9wdWJsaXNoX3FzZXQoYXBjLCAmYW1wO25ld3EsICZhbXA7b2xkcSk7CiAJCWlmIChlcnIpIHsKLQkJCW5ldGRldl9lcnIobmRldiwKLQkJCQkgICAmIzM0O21hbmFfYXR0YWNoIGZhaWxlZCBhdCB4ZHAgc2V0OiAlZFxuJiMzNDssIGVycik7CiAJCQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAotCQkJCQkgICAmIzM0O1hEUDogUmUtY29uZmlnIGZhaWxlZCBhdCBhdHRhY2gmIzM0Oyk7Ci0JCQlnb3RvIGVycl9kZWFsbG9jX3J4YnVmZnM7CiYjNDM7CQkJCQkgICAmIzM0O1hEUDogUmUtY29uZmlnIGZhaWxlZCBhdCBwdWJsaXNoJiMzNDspOwomIzQzOwkJCW1hbmFfZnJlZV9xc2V0KHNjcmF0Y2gsICZhbXA7bmV3cSk7CiYjNDM7CQkJLyogRnJlZSB0aGUgcXVldWVzIGJlZm9yZSBjbG9zaW5nIHRoZWlyIHNoYXJlZCBFUSBwb29sLgomIzQzOwkJCSAqLwomIzQzOwkJCW1hbmFfcHVibGlzaF9jbG9zZV9pZl9uZWVkZWQoYXBjKTsKJiM0MzsJCQltYW5hX3FzZXRfc2NyYXRjaF9mcmVlKHNjcmF0Y2gpOwomIzQzOwkJCXJldHVybiBlcnI7CiAJCX0KIAotCQltYW5hX2Nobl9zZXR4ZHAoYXBjLCBwcm9nKTsKLQkJbWFuYV9wcmVfZGVhbGxvY19yeGJ1ZnMoYXBjKTsKJiM0MzsJCW1hbmFfZnJlZV9xc2V0KHNjcmF0Y2gsICZhbXA7b2xkcSk7CiYjNDM7CQltYW5hX3FzZXRfc2NyYXRjaF9mcmVlKHNjcmF0Y2gpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyogVXNlIHRoZSBjYWxsZXImIzM5O3MgcHJvZ3JhbSByZWZlcmVuY2U7IG1hbmFfb3BlbigpIGluc3RhbGxzIGl0CiYjNDM7CQkgKiBvbiBxdWV1ZXMuCiYjNDM7CQkgKi8KJiM0MzsJCWFwYy0mZ3Q7YnBmX3Byb2cgPSBwcm9nOwogCX0KIAogCWlmIChvbGRfcHJvZykKQEAgLTI0MywxMSAmIzQzOzI0OCw2IEBAIHN0YXRpYyBpbnQgbWFuYV94ZHBfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csCiAJCW5kZXYtJmd0O21heF9tdHUgPSBnYy0mZ3Q7YWRhcHRlcl9tdHUgLSBFVEhfSExFTjsKIAogCXJldHVybiAwOwotCi1lcnJfZGVhbGxvY19yeGJ1ZmZzOgotCWFwYy0mZ3Q7YnBmX3Byb2cgPSBvbGRfcHJvZzsKLQltYW5hX3ByZV9kZWFsbG9jX3J4YnVmcyhhcGMpOwotCXJldHVybiBlcnI7CiB9CiAKIGludCBtYW5hX2JwZihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IG5ldGRldl9icGYgKmJwZikKQEAgLTI2MiwzICYjNDM7MjYyLDI3IEBAIGludCBtYW5hX2JwZihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IG5ldGRldl9icGYgKmJwZikKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIH0KJiM0MzsKJiM0MztzdHJ1Y3QgYnBmX3Byb2cgKm1hbmFfY2huX3hkcF9wZWVrKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKQomIzQzO3sKJiM0MzsJQVNTRVJUX1JUTkwoKTsKJiM0MzsKJiM0MzsJaWYgKCFhcGMtJmd0O3J4cXMgfHwgIWFwYy0mZ3Q7cnhxc1swXSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlyZXR1cm4gcnRubF9kZXJlZmVyZW5jZShhcGMtJmd0O3J4cXNbMF0tJmd0O2JwZl9wcm9nKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogS2VlcCB0aGUgcGVyLXF1ZXVlIHByb2dyYW0gcG9pbnRlcnMgdW50aWwgUlggcG9sbGluZyBzdG9wcy4gKi8KJiM0Mzt2b2lkIG1hbmFfY2huX3hkcF9yZWxlYXNlKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdW5zaWduZWQgaW50IG51bV9xdWV1ZXMpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgaTsKJiM0MzsKJiM0MzsJQVNTRVJUX1JUTkwoKTsKJiM0MzsKJiM0MzsJaWYgKCFwcm9nKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnVtX3F1ZXVlczsgaSYjNDM7JiM0MzspCiYjNDM7CQlicGZfcHJvZ19wdXQocHJvZyk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jCmluZGV4IDdhMWFjODUzZTNhYmMuLjI5ZjU0ZjkxY2IwMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMKQEAgLTkwLDYgJiM0Mzs5MCwxNyBAQCBzdGF0aWMgaW50IG1hbmFfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIAlzbXBfd21iKCk7CiAKIAluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMobmRldik7CiYjNDM7CiYjNDM7CS8qIFVuZG8gYSBmb3JjZWQgY2Fycmllci1vZmYgdW5sZXNzIGEgZGlzY29ubmVjdCBpcyBwZW5kaW5nIGJlaGluZCBSVE5MLgomIzQzOwkgKi8KJiM0MzsJaWYgKGFwYy0mZ3Q7Y2Fycmllcl9mb3JjZWRfb2ZmKSB7CiYjNDM7CQl1MzIgZXYgPSBSRUFEX09OQ0UoYXBjLSZndDthYy0mZ3Q7bGlua19ldmVudCk7CiYjNDM7CiYjNDM7CQlhcGMtJmd0O2NhcnJpZXJfZm9yY2VkX29mZiA9IGZhbHNlOwomIzQzOwkJaWYgKGV2ICE9IEhXQ19EQVRBX0hXX0xJTktfRElTQ09OTkVDVCkKJiM0MzsJCQluZXRpZl9jYXJyaWVyX29uKG5kZXYpOwomIzQzOwl9CiYjNDM7CiAJbmV0ZGV2X2RiZyhuZGV2LCAmIzM0OyVzIHN1Y2Nlc3NmdWxcbiYjMzQ7LCBfX2Z1bmNfXyk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMDYsNiAmIzQzOzExNyw3IEBAIHN0YXRpYyBpbnQgbWFuYV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIAogc3RhdGljIHZvaWQgbWFuYV9saW5rX3N0YXRlX2hhbmRsZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpCiB7CiYjNDM7CXN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjOwogCXN0cnVjdCBtYW5hX2NvbnRleHQgKmFjOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OwogCXUzMiBsaW5rX2V2ZW50OwpAQCAtMTMxLDYgJiM0MzsxNDMsOSBAQCBzdGF0aWMgdm9pZCBtYW5hX2xpbmtfc3RhdGVfaGFuZGxlKHN0cnVjdCB3b3JrX3N0cnVjdCAqdykKIAkJaWYgKCFuZGV2KQogCQkJY29udGludWU7CiAKJiM0MzsJCWFwYyA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwkJYXBjLSZndDtjYXJyaWVyX2ZvcmNlZF9vZmYgPSBmYWxzZTsKJiM0MzsKIAkJaWYgKGxpbmtfdXApIHsKIAkJCW5ldGlmX2NhcnJpZXJfb24obmRldik7CiAKQEAgLTMxMiw4ICYjNDM7MzI3LDggQEAgc3RhdGljIHZvaWQgbWFuYV9wZXJfcG9ydF9xdWV1ZV9yZXNldF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCiAJcnRubF9sb2NrKCk7CiAKLQkvKiBCbG9jayBSRE1BIGZyb20gZ3JhYmJpbmcgdGhlIHZwb3J0IGR1cmluZyB0aGUgZGV0YWNoL2F0dGFjaAotCSAqIHdpbmRvdywgc2FtZSBhcyBtYW5hX3NldF9jaGFubmVscygpLgomIzQzOwkvKiBFeGNsdWRlIFJETUEgYWNyb3NzIGRldGFjaC9hdHRhY2g7IFJUTkwgc2VyaWFsaXplcyBjaGFubmVsX2NoYW5naW5nCiYjNDM7CSAqIHdyaXRlcnMuCiAJICovCiAJbXV0ZXhfbG9jaygmYW1wO2FwYy0mZ3Q7dnBvcnRfbXV0ZXgpOwogCWFwYy0mZ3Q7Y2hhbm5lbF9jaGFuZ2luZyA9IHRydWU7CkBAIC0zNjYsMTMgJiM0MzszODEsMjIgQEAgbmV0ZGV2X3R4X3QgbWFuYV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCWlmICh1bmxpa2VseSghYXBjLSZndDtwb3J0X2lzX3VwKSkKIAkJZ290byB0eF9kcm9wOwogCiYjNDM7CS8qIFBhaXIgd2l0aCBtYW5hX3B1Ymxpc2hfcXNldCgpJiMzOTtzIHByZS1nYXRlIHNtcF93bWIoKTogb2JzZXJ2ZSBxdWV1ZQomIzQzOwkgKiBmaWVsZHMgYWZ0ZXIgcmVhZGluZyBwb3J0X2lzX3VwLgomIzQzOwkgKi8KJiM0MzsJc21wX3JtYigpOwomIzQzOwomIzQzOwkvKiBSZXRpcmluZyBSWFFzIG1heSB1c2UgaW5kaWNlcyBiZXlvbmQgdGhlIGxpdmUgcXVldWUgY291bnQuICovCiYjNDM7CWlmICh1bmxpa2VseSh0eHFfaWR4ICZndDs9IGFwYy0mZ3Q7bnVtX3F1ZXVlcykpCiYjNDM7CQlnb3RvIHR4X2Ryb3BfY291bnQ7CiYjNDM7CiAJaWYgKHNrYl9jb3dfaGVhZChza2IsIE1BTkFfSEVBRFJPT00pKQogCQlnb3RvIHR4X2Ryb3BfY291bnQ7CiAKIAl0eHEgPSAmYW1wO2FwYy0mZ3Q7dHhfcXBbdHhxX2lkeF0tJmd0O3R4cTsKIAlnZG1hX3NxID0gdHhxLSZndDtnZG1hX3NxOwogCWNxID0gJmFtcDthcGMtJmd0O3R4X3FwW3R4cV9pZHhdLSZndDt0eF9jcTsKLQl0eF9zdGF0cyA9ICZhbXA7dHhxLSZndDtzdGF0czsKJiM0MzsJdHhfc3RhdHMgPSB0eHEtJmd0O3N0YXRzOwogCiAJQlVJTERfQlVHX09OKE1BWF9UWF9XUUVfU0dMX0VOVFJJRVMgIT0gTUFOQV9NQVhfVFhfV1FFX1NHTF9FTlRSSUVTKTsKIAlpZiAoTUFYX1NLQl9GUkFHUyAmIzQzOyAyICZndDsgTUFYX1RYX1dRRV9TR0xfRU5UUklFUyAmYW1wOyZhbXA7CkBAIC01NTEsNyAmIzQzOzU3NSw3IEBAIG5ldGRldl90eF90IG1hbmFfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIAkvKiBQb3B1bGF0ZWQgdGhlIHBhY2tldCBhbmQgYnl0ZXMgY291bnRlcnMgYmFzZWQgb24gcG9zdCBHU08gcGFja2V0CiAJICogY2FsY3VsYXRpb25zCiAJICovCi0JdHhfc3RhdHMgPSAmYW1wO3R4cS0mZ3Q7c3RhdHM7CiYjNDM7CXR4X3N0YXRzID0gdHhxLSZndDtzdGF0czsKIAl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZhbXA7dHhfc3RhdHMtJmd0O3N5bmNwKTsKIAl0eF9zdGF0cy0mZ3Q7cGFja2V0cyAmIzQzOz0gbnVtX2dzb19zZWc7CiAJdHhfc3RhdHMtJmd0O2J5dGVzICYjNDM7PSBsZW4gJiM0MzsgKChudW1fZ3NvX3NlZyAtIDEpICogZ3NvX2hzKTsKQEAgLTU5NywxNSAmIzQzOzYyMSwxNSBAQCBzdGF0aWMgdm9pZCBtYW5hX2dldF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAogCQkJICAgICBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0KQogewogCXN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjID0gbmV0ZGV2X3ByaXYobmRldik7Ci0JdW5zaWduZWQgaW50IG51bV9xdWV1ZXMgPSBhcGMtJmd0O251bV9xdWV1ZXM7CiAJc3RydWN0IG1hbmFfc3RhdHNfcnggKnJ4X3N0YXRzOwogCXN0cnVjdCBtYW5hX3N0YXRzX3R4ICp0eF9zdGF0czsKJiM0MzsJdW5zaWduZWQgaW50IG51bV9xdWV1ZXM7CiAJdW5zaWduZWQgaW50IHN0YXJ0OwogCXU2NCBwYWNrZXRzLCBieXRlczsKIAlpbnQgcTsKIAotCWlmICghYXBjLSZndDtwb3J0X2lzX3VwKQotCQlyZXR1cm47CiYjNDM7CS8qIFJlcG9ydCBldmVuIHdoaWxlIGRvd247IGRldl9nZXRfc3RhdHMoKSB6ZXJvZXMgaXRzIG91dHB1dC4gKi8KJiM0MzsJbnVtX3F1ZXVlcyA9IGFwYy0mZ3Q7bWF4X3F1ZXVlczsKIAogCW5ldGRldl9zdGF0c190b19zdGF0czY0KHN0LCAmYW1wO25kZXYtJmd0O3N0YXRzKTsKIApAQCAtNjE1LDcgJiM0Mzs2MzksMTggQEAgc3RhdGljIHZvaWQgbWFuYV9nZXRfc3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAlzdC0mZ3Q7cnhfbWlzc2VkX2Vycm9ycyA9IGFwYy0mZ3Q7YWMtJmd0O2hjX3N0YXRzLmhjX3J4X2Rpc2NhcmRzX25vX3dxZTsKIAogCWZvciAocSA9IDA7IHEgJmx0OyBudW1fcXVldWVzOyBxJiM0MzsmIzQzOykgewotCQlyeF9zdGF0cyA9ICZhbXA7YXBjLSZndDtyeHFzW3FdLSZndDtzdGF0czsKJiM0MzsJCXJ4X3N0YXRzID0gJmFtcDthcGMtJmd0O3J4cV9zdGF0c1txXTsKJiM0MzsKJiM0MzsJCWRvIHsKJiM0MzsJCQlzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbigmYW1wO3J4X3N0YXRzLSZndDtzeW5jcCk7CiYjNDM7CQkJcGFja2V0cyA9IHJ4X3N0YXRzLSZndDtwYWNrZXRzOwomIzQzOwkJCWJ5dGVzID0gcnhfc3RhdHMtJmd0O2J5dGVzOwomIzQzOwkJfSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5KCZhbXA7cnhfc3RhdHMtJmd0O3N5bmNwLCBzdGFydCkpOwomIzQzOwomIzQzOwkJc3QtJmd0O3J4X3BhY2tldHMgJiM0Mzs9IHBhY2tldHM7CiYjNDM7CQlzdC0mZ3Q7cnhfYnl0ZXMgJiM0Mzs9IGJ5dGVzOwomIzQzOwomIzQzOwkJcnhfc3RhdHMgPSAmYW1wO2FwYy0mZ3Q7cnhxX3N0YXRzX3JldFtxXTsKIAogCQlkbyB7CiAJCQlzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbigmYW1wO3J4X3N0YXRzLSZndDtzeW5jcCk7CkBAIC02MjgsNyAmIzQzOzY2Myw3IEBAIHN0YXRpYyB2b2lkIG1hbmFfZ2V0X3N0YXRzNjQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCiAJfQogCiAJZm9yIChxID0gMDsgcSAmbHQ7IG51bV9xdWV1ZXM7IHEmIzQzOyYjNDM7KSB7Ci0JCXR4X3N0YXRzID0gJmFtcDthcGMtJmd0O3R4X3FwW3FdLSZndDt0eHEuc3RhdHM7CiYjNDM7CQl0eF9zdGF0cyA9ICZhbXA7YXBjLSZndDt0eHFfc3RhdHNbcV07CiAKIAkJZG8gewogCQkJc3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oJmFtcDt0eF9zdGF0cy0mZ3Q7c3luY3ApOwpAQCAtODc4LDMyICYjNDM7OTEzLDM3IEBAIGludCBtYW5hX3ByZV9hbGxvY19yeGJ1ZnMoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICptcGMsIGludCBuZXdfbXR1LCBpbnQgbnVtX3F1CiBzdGF0aWMgaW50IG1hbmFfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IG5ld19tdHUpCiB7CiAJc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICptcGMgPSBuZXRkZXZfcHJpdihuZGV2KTsKLQl1bnNpZ25lZCBpbnQgb2xkX210dSA9IG5kZXYtJmd0O210dTsKJiM0MzsJc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICpzY3JhdGNoOwomIzQzOwlzdHJ1Y3QgbWFuYV9xc2V0IG5ld3EsIG9sZHE7CiAJaW50IGVycjsKIAotCS8qIFByZS1hbGxvY2F0ZSBidWZmZXJzIHRvIHByZXZlbnQgZmFpbHVyZSBpbiBtYW5hX2F0dGFjaCBsYXRlciAqLwotCWVyciA9IG1hbmFfcHJlX2FsbG9jX3J4YnVmcyhtcGMsIG5ld19tdHUsIG1wYy0mZ3Q7bnVtX3F1ZXVlcyk7Ci0JaWYgKGVycikgewotCQluZXRkZXZfZXJyKG5kZXYsICYjMzQ7SW5zdWZmaWNpZW50IG1lbW9yeSBmb3IgbmV3IE1UVVxuJiMzNDspOwotCQlyZXR1cm4gZXJyOwomIzQzOwlpZiAoIW1wYy0mZ3Q7cG9ydF9pc191cCkgewomIzQzOwkJbXBjLSZndDtjb25maWd1cmVkX210dSA9IG5ld19tdHU7CiYjNDM7CQlXUklURV9PTkNFKG5kZXYtJmd0O210dSwgbmV3X210dSk7CiYjNDM7CQlyZXR1cm4gMDsKIAl9CiAKLQllcnIgPSBtYW5hX2RldGFjaChuZGV2LCBmYWxzZSk7Ci0JaWYgKGVycikgewotCQluZXRkZXZfZXJyKG5kZXYsICYjMzQ7bWFuYV9kZXRhY2ggZmFpbGVkOiAlZFxuJiMzNDssIGVycik7Ci0JCWdvdG8gb3V0OwotCX0KJiM0MzsJc2NyYXRjaCA9IG1hbmFfcXNldF9zY3JhdGNoX2FsbG9jKG1wYyk7CiYjNDM7CWlmICghc2NyYXRjaCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwogCi0JV1JJVEVfT05DRShuZGV2LSZndDttdHUsIG5ld19tdHUpOwomIzQzOwllcnIgPSBtYW5hX2FsbG9jX3FzZXQobXBjLCBzY3JhdGNoLCBtcGMtJmd0O3J4X3F1ZXVlX3NpemUsCiYjNDM7CQkJICAgICAgbXBjLSZndDt0eF9xdWV1ZV9zaXplLCBtcGMtJmd0O3ByaXZfZmxhZ3MsIG5ld19tdHUsCiYjNDM7CQkJICAgICAgbXBjLSZndDticGZfcHJvZywgJmFtcDtuZXdxKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZnJlZV9zY3JhdGNoOwogCi0JZXJyID0gbWFuYV9hdHRhY2gobmRldik7CiYjNDM7CWVyciA9IG1hbmFfcHVibGlzaF9xc2V0KG1wYywgJmFtcDtuZXdxLCAmYW1wO29sZHEpOwogCWlmIChlcnIpIHsKLQkJbmV0ZGV2X2VycihuZGV2LCAmIzM0O21hbmFfYXR0YWNoIGZhaWxlZDogJWRcbiYjMzQ7LCBlcnIpOwotCQlXUklURV9PTkNFKG5kZXYtJmd0O210dSwgb2xkX210dSk7CiYjNDM7CQltYW5hX2ZyZWVfcXNldChzY3JhdGNoLCAmYW1wO25ld3EpOwomIzQzOwkJZ290byBmcmVlX3NjcmF0Y2g7CiAJfQogCi1vdXQ6Ci0JbWFuYV9wcmVfZGVhbGxvY19yeGJ1ZnMobXBjKTsKJiM0MzsJbWFuYV9mcmVlX3FzZXQoc2NyYXRjaCwgJmFtcDtvbGRxKTsKJiM0MzsKJiM0MztmcmVlX3NjcmF0Y2g6CiYjNDM7CW1hbmFfcHVibGlzaF9jbG9zZV9pZl9uZWVkZWQobXBjKTsKJiM0MzsJbWFuYV9xc2V0X3NjcmF0Y2hfZnJlZShzY3JhdGNoKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMDM2LDYgJiM0MzsxMDc2LDEwNSBAQCBzdGF0aWMgdm9pZCBtYW5hX2NsZWFudXBfcG9ydF9jb250ZXh0KHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKQogCWFwYy0mZ3Q7cnhxcyA9IE5VTEw7CiB9CiAKJiM0MzsvKiBQb3J0IGxpZmV0aW1lIHByZXNlcnZlcyBjb3VudGVycyBhY3Jvc3MgcXVldWUgcmVwbGFjZW1lbnQuICovCiYjNDM7c3RhdGljIGludCBtYW5hX2FsbG9jX3F1ZXVlX3N0YXRzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IGk7CiYjNDM7CiYjNDM7CWFwYy0mZ3Q7cnhxX3N0YXRzID0ga2NhbGxvYyhhcGMtJmd0O21heF9xdWV1ZXMsIHNpemVvZigqYXBjLSZndDtyeHFfc3RhdHMpLAomIzQzOwkJCQkgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghYXBjLSZndDtyeHFfc3RhdHMpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJYXBjLSZndDtyeHFfc3RhdHNfcmV0ID0ga2NhbGxvYyhhcGMtJmd0O21heF9xdWV1ZXMsCiYjNDM7CQkJCSAgICAgc2l6ZW9mKCphcGMtJmd0O3J4cV9zdGF0c19yZXQpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFhcGMtJmd0O3J4cV9zdGF0c19yZXQpCiYjNDM7CQlnb3RvIGZyZWVfcnhxX3N0YXRzOwomIzQzOwomIzQzOwlhcGMtJmd0O3R4cV9zdGF0cyA9IGtjYWxsb2MoYXBjLSZndDttYXhfcXVldWVzLCBzaXplb2YoKmFwYy0mZ3Q7dHhxX3N0YXRzKSwKJiM0MzsJCQkJIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWFwYy0mZ3Q7dHhxX3N0YXRzKQomIzQzOwkJZ290byBmcmVlX3J4cV9zdGF0c19yZXQ7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBhcGMtJmd0O21heF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1NjRfc3RhdHNfaW5pdCgmYW1wO2FwYy0mZ3Q7cnhxX3N0YXRzW2ldLnN5bmNwKTsKJiM0MzsJCXU2NF9zdGF0c19pbml0KCZhbXA7YXBjLSZndDtyeHFfc3RhdHNfcmV0W2ldLnN5bmNwKTsKJiM0MzsJCXU2NF9zdGF0c19pbml0KCZhbXA7YXBjLSZndDt0eHFfc3RhdHNbaV0uc3luY3ApOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2ZyZWVfcnhxX3N0YXRzX3JldDoKJiM0MzsJa2ZyZWUoYXBjLSZndDtyeHFfc3RhdHNfcmV0KTsKJiM0MzsJYXBjLSZndDtyeHFfc3RhdHNfcmV0ID0gTlVMTDsKJiM0MztmcmVlX3J4cV9zdGF0czoKJiM0MzsJa2ZyZWUoYXBjLSZndDtyeHFfc3RhdHMpOwomIzQzOwlhcGMtJmd0O3J4cV9zdGF0cyA9IE5VTEw7CiYjNDM7CXJldHVybiAtRU5PTUVNOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtYW5hX2ZyZWVfcXVldWVfc3RhdHMoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpCiYjNDM7ewomIzQzOwlrZnJlZShhcGMtJmd0O3J4cV9zdGF0cyk7CiYjNDM7CWFwYy0mZ3Q7cnhxX3N0YXRzID0gTlVMTDsKJiM0MzsJa2ZyZWUoYXBjLSZndDtyeHFfc3RhdHNfcmV0KTsKJiM0MzsJYXBjLSZndDtyeHFfc3RhdHNfcmV0ID0gTlVMTDsKJiM0MzsJa2ZyZWUoYXBjLSZndDt0eHFfc3RhdHMpOwomIzQzOwlhcGMtJmd0O3R4cV9zdGF0cyA9IE5VTEw7CiYjNDM7fQomIzQzOwomIzQzOy8qIEZvbGQgdW5kZXIgUlROTCBhZnRlciBkcmFpbl9zdGF0cyB3cml0ZXJzIHF1aWVzY2UuIENsZWFyIGRyYWluX3N0YXRzIHRvCiYjNDM7ICogcHJldmVudCBkb3VibGUgY291bnRpbmcgb24gcm9sbGJhY2suCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgbWFuYV9mb2xkX3J4cV9zdGF0cyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywKJiM0MzsJCQkJc3RydWN0IG1hbmFfcnhxICpyeHEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWFuYV9zdGF0c19yeCAqc3JjID0gJmFtcDtyeHEtJmd0O2RyYWluX3N0YXRzOwomIzQzOwlzdHJ1Y3QgbWFuYV9zdGF0c19yeCAqZHN0OwomIzQzOwl1bnNpZ25lZCBpbnQgaTsKJiM0MzsKJiM0MzsJQVNTRVJUX1JUTkwoKTsKJiM0MzsKJiM0MzsJaWYgKCFhcGMtJmd0O3J4cV9zdGF0c19yZXQgfHwgcnhxLSZndDtyeHFfaWR4ICZndDs9IGFwYy0mZ3Q7bWF4X3F1ZXVlcykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZHN0ID0gJmFtcDthcGMtJmd0O3J4cV9zdGF0c19yZXRbcnhxLSZndDtyeHFfaWR4XTsKJiM0MzsKJiM0MzsJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmYW1wO2RzdC0mZ3Q7c3luY3ApOwomIzQzOwlkc3QtJmd0O3BhY2tldHMJCSYjNDM7PSBzcmMtJmd0O3BhY2tldHM7CiYjNDM7CWRzdC0mZ3Q7Ynl0ZXMJCSYjNDM7PSBzcmMtJmd0O2J5dGVzOwomIzQzOwlkc3QtJmd0O3hkcF9kcm9wCQkmIzQzOz0gc3JjLSZndDt4ZHBfZHJvcDsKJiM0MzsJZHN0LSZndDt4ZHBfdHgJCSYjNDM7PSBzcmMtJmd0O3hkcF90eDsKJiM0MzsJZHN0LSZndDt4ZHBfcmVkaXJlY3QJJiM0Mzs9IHNyYy0mZ3Q7eGRwX3JlZGlyZWN0OwomIzQzOwlkc3QtJmd0O3BrdF9sZW4wX2VycgkmIzQzOz0gc3JjLSZndDtwa3RfbGVuMF9lcnI7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGRzdC0mZ3Q7Y29hbGVzY2VkX2NxZSk7IGkmIzQzOyYjNDM7KQomIzQzOwkJZHN0LSZndDtjb2FsZXNjZWRfY3FlW2ldICYjNDM7PSBzcmMtJmd0O2NvYWxlc2NlZF9jcWVbaV07CiYjNDM7CXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7ZHN0LSZndDtzeW5jcCk7CiYjNDM7CiYjNDM7CXNyYy0mZ3Q7cGFja2V0cwkJPSAwOwomIzQzOwlzcmMtJmd0O2J5dGVzCQk9IDA7CiYjNDM7CXNyYy0mZ3Q7eGRwX2Ryb3AJCT0gMDsKJiM0MzsJc3JjLSZndDt4ZHBfdHgJCT0gMDsKJiM0MzsJc3JjLSZndDt4ZHBfcmVkaXJlY3QJPSAwOwomIzQzOwlzcmMtJmd0O3BrdF9sZW4wX2Vycgk9IDA7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHNyYy0mZ3Q7Y29hbGVzY2VkX2NxZSk7IGkmIzQzOyYjNDM7KQomIzQzOwkJc3JjLSZndDtjb2FsZXNjZWRfY3FlW2ldID0gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbWFuYV9mb2xkX3FzZXRfcnhfc3RhdHMoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgbWFuYV9xc2V0ICpxc2V0KQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IHE7CiYjNDM7CiYjNDM7CWlmICghcXNldC0mZ3Q7cnhxcykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZm9yIChxID0gMDsgcSAmbHQ7IHFzZXQtJmd0O251bV9xdWV1ZXM7IHEmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAocXNldC0mZ3Q7cnhxc1txXSkKJiM0MzsJCQltYW5hX2ZvbGRfcnhxX3N0YXRzKGFwYywgcXNldC0mZ3Q7cnhxc1txXSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBtYW5hX2NsZWFudXBfaW5kaXJfdGFibGUoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpCiB7CiAJYXBjLSZndDtpbmRpcl90YWJsZV9zeiA9IDA7CkBAIC0xMDQ1LDYgJiM0MzsxMTg0LDcgQEAgc3RhdGljIHZvaWQgbWFuYV9jbGVhbnVwX2luZGlyX3RhYmxlKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKQogCiBzdGF0aWMgaW50IG1hbmFfaW5pdF9wb3J0X2NvbnRleHQoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpCiB7CiYjNDM7CWtmcmVlKGFwYy0mZ3Q7cnhxcyk7CiAJYXBjLSZndDtyeHFzID0ga3phbGxvY19vYmpzKHN0cnVjdCBtYW5hX3J4cSAqLCBhcGMtJmd0O251bV9xdWV1ZXMpOwogCiAJcmV0dXJuICFhcGMtJmd0O3J4cXMgPyAtRU5PTUVNIDogMDsKQEAgLTE3MzMsNyAmIzQzOzE4NzMsNyBAQCB2b2lkIG1hbmFfZGVzdHJveV9lcShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYykKIAlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoYXBjLSZndDttYW5hX2Vxc19kZWJ1Z2ZzKTsKIAlhcGMtJmd0O21hbmFfZXFzX2RlYnVnZnMgPSBOVUxMOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IGFwYy0mZ3Q7bnVtX3F1ZXVlczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGFwYy0mZ3Q7bnVtX2VxczsgaSYjNDM7JiM0MzspIHsKIAkJZXEgPSBhcGMtJmd0O2Vxc1tpXS5lcTsKIAkJaWYgKCFlcSkKIAkJCWNvbnRpbnVlOwpAQCAtMTc0MSwyNCAmIzQzOzE4ODEsMjggQEAgdm9pZCBtYW5hX2Rlc3Ryb3lfZXEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpCiAJCW1zaSA9IGVxLSZndDtlcS5tc2l4X2luZGV4OwogCQltYW5hX2dkX2Rlc3Ryb3lfcXVldWUoZ2MsIGVxKTsKIAkJbWFuYV9nZF9wdXRfZ2ljKGdjLCAhZ2MtJmd0O21zaV9zaGFyaW5nLCBtc2kpOwomIzQzOwkJYXBjLSZndDtlcXNbaV0uZXEgPSBOVUxMOwomIzQzOwkJYXBjLSZndDtlcXNbaV0ubWFuYV9lcV9kZWJ1Z2ZzID0gTlVMTDsKIAl9CiAKIAlrZnJlZShhcGMtJmd0O2Vxcyk7CiAJYXBjLSZndDtlcXMgPSBOVUxMOwomIzQzOwlhcGMtJmd0O251bV9lcXMgPSAwOwogfQogRVhQT1JUX1NZTUJPTF9OUyhtYW5hX2Rlc3Ryb3lfZXEsICYjMzQ7TkVUX01BTkEmIzM0Oyk7CiAKIHN0YXRpYyB2b2lkIG1hbmFfY3JlYXRlX2VxX2RlYnVnZnMoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsIGludCBpKQogewotCXN0cnVjdCBtYW5hX2VxIGVxID0gYXBjLSZndDtlcXNbaV07CiYjNDM7CXN0cnVjdCBtYW5hX2VxICplcSA9ICZhbXA7YXBjLSZndDtlcXNbaV07CiAJY2hhciBlcW51bVszMl07CiAKIAlzcHJpbnRmKGVxbnVtLCAmIzM0O2VxJWQmIzM0OywgaSk7Ci0JZXEubWFuYV9lcV9kZWJ1Z2ZzID0gZGVidWdmc19jcmVhdGVfZGlyKGVxbnVtLCBhcGMtJmd0O21hbmFfZXFzX2RlYnVnZnMpOwotCWRlYnVnZnNfY3JlYXRlX3UzMigmIzM0O2hlYWQmIzM0OywgMDQwMCwgZXEubWFuYV9lcV9kZWJ1Z2ZzLCAmYW1wO2VxLmVxLSZndDtoZWFkKTsKLQlkZWJ1Z2ZzX2NyZWF0ZV91MzIoJiMzNDt0YWlsJiMzNDssIDA0MDAsIGVxLm1hbmFfZXFfZGVidWdmcywgJmFtcDtlcS5lcS0mZ3Q7dGFpbCk7Ci0JZGVidWdmc19jcmVhdGVfdTMyKCYjMzQ7aXJxJiMzNDssIDA0MDAsIGVxLm1hbmFfZXFfZGVidWdmcywgJmFtcDtlcS5lcS0mZ3Q7ZXEuaXJxKTsKLQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7ZXFfZHVtcCYjMzQ7LCAwNDAwLCBlcS5tYW5hX2VxX2RlYnVnZnMsIGVxLmVxLCAmYW1wO21hbmFfZGJnX3FfZm9wcyk7CiYjNDM7CWVxLSZndDttYW5hX2VxX2RlYnVnZnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZXFudW0sIGFwYy0mZ3Q7bWFuYV9lcXNfZGVidWdmcyk7CiYjNDM7CWRlYnVnZnNfY3JlYXRlX3UzMigmIzM0O2hlYWQmIzM0OywgMDQwMCwgZXEtJmd0O21hbmFfZXFfZGVidWdmcywgJmFtcDtlcS0mZ3Q7ZXEtJmd0O2hlYWQpOwomIzQzOwlkZWJ1Z2ZzX2NyZWF0ZV91MzIoJiMzNDt0YWlsJiMzNDssIDA0MDAsIGVxLSZndDttYW5hX2VxX2RlYnVnZnMsICZhbXA7ZXEtJmd0O2VxLSZndDt0YWlsKTsKJiM0MzsJZGVidWdmc19jcmVhdGVfdTMyKCYjMzQ7aXJxJiMzNDssIDA0MDAsIGVxLSZndDttYW5hX2VxX2RlYnVnZnMsICZhbXA7ZXEtJmd0O2VxLSZndDtlcS5pcnEpOwomIzQzOwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7ZXFfZHVtcCYjMzQ7LCAwNDAwLCBlcS0mZ3Q7bWFuYV9lcV9kZWJ1Z2ZzLCBlcS0mZ3Q7ZXEsCiYjNDM7CQkJICAgICZhbXA7bWFuYV9kYmdfcV9mb3BzKTsKIH0KIAogaW50IG1hbmFfY3JlYXRlX2VxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKQpAQCAtMTc3Myw5ICYjNDM7MTkxNywxMSBAQCBpbnQgbWFuYV9jcmVhdGVfZXEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpCiAKIAlpZiAoV0FSTl9PTihhcGMtJmd0O2VxcykpCiAJCXJldHVybiAtRUVYSVNUOwotCWFwYy0mZ3Q7ZXFzID0ga3phbGxvY19vYmpzKHN0cnVjdCBtYW5hX2VxLCBhcGMtJmd0O251bV9xdWV1ZXMpOwomIzQzOwkvKiBLZWVwIEVRIGFycmF5IGFkZHJlc3NlcyBzdGFibGUgd2hpbGUgQ1FzIHJlZmVyZW5jZSB0aGVtLiAqLwomIzQzOwlhcGMtJmd0O2VxcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgbWFuYV9lcSwgYXBjLSZndDttYXhfcXVldWVzKTsKIAlpZiAoIWFwYy0mZ3Q7ZXFzKQogCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJYXBjLSZndDtudW1fZXFzID0gMDsKIAogCXNwZWMudHlwZSA9IEdETUFfRVE7CiAJc3BlYy5tb25pdG9yX2F2bF9idWYgPSBmYWxzZTsKQEAgLTE4MDUsNiAmIzQzOzE5NTEsNyBAQCBpbnQgbWFuYV9jcmVhdGVfZXEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpCiAJCX0KIAkJYXBjLSZndDtlcXNbaV0uZXEtJmd0O2VxLmlycSA9IGdpYy0mZ3Q7aXJxOwogCQltYW5hX2NyZWF0ZV9lcV9kZWJ1Z2ZzKGFwYywgaSk7CiYjNDM7CQlhcGMtJmd0O251bV9lcXMgPSBpICYjNDM7IDE7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xODE0LDYgJiM0MzsxOTYxLDg3IEBAIGludCBtYW5hX2NyZWF0ZV9lcShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYykKIH0KIEVYUE9SVF9TWU1CT0xfTlMobWFuYV9jcmVhdGVfZXEsICYjMzQ7TkVUX01BTkEmIzM0Oyk7CiAKJiM0MzsvKiBHcm93IHRoZSBzaGFyZWQgRVEgcG9vbCB3aXRob3V0IHJlcGxhY2luZyBsaXZlIGVudHJpZXMuICovCiYjNDM7c3RhdGljIGludCBtYW5hX2dyb3dfZXFzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLCB1bnNpZ25lZCBpbnQgbmVlZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBnZG1hX2RldiAqZ2QgPSBhcGMtJmd0O2FjLSZndDtnZG1hX2RldjsKJiM0MzsJc3RydWN0IGdkbWFfY29udGV4dCAqZ2MgPSBnZC0mZ3Q7Z2RtYV9jb250ZXh0OwomIzQzOwlzdHJ1Y3QgZ2RtYV9xdWV1ZV9zcGVjIHNwZWMgPSB7fTsKJiM0MzsJc3RydWN0IGdkbWFfaXJxX2NvbnRleHQgKmdpYzsKJiM0MzsJdW5zaWduZWQgaW50IGk7CiYjNDM7CWludCBlcnI7CiYjNDM7CWludCBtc2k7CiYjNDM7CiYjNDM7CWlmIChXQVJOX09OKCFhcGMtJmd0O2VxcykpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKG5lZWQgJmd0OyBhcGMtJmd0O21heF9xdWV1ZXMpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKG5lZWQgJmx0Oz0gYXBjLSZndDtudW1fZXFzKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXNwZWMudHlwZSA9IEdETUFfRVE7CiYjNDM7CXNwZWMubW9uaXRvcl9hdmxfYnVmID0gZmFsc2U7CiYjNDM7CXNwZWMucXVldWVfc2l6ZSA9IEVRX1NJWkU7CiYjNDM7CXNwZWMuZXEuY2FsbGJhY2sgPSBOVUxMOwomIzQzOwlzcGVjLmVxLmNvbnRleHQgPSBhcGMtJmd0O2VxczsKJiM0MzsJc3BlYy5lcS5sb2cyX3Rocm90dGxlX2xpbWl0ID0gTE9HMl9FUV9USFJPVFRMRTsKJiM0MzsKJiM0MzsJZm9yIChpID0gYXBjLSZndDtudW1fZXFzOyBpICZsdDsgbmVlZDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCW1zaSA9IChpICYjNDM7IDEpICUgZ2MtJmd0O251bV9tc2l4X3VzYWJsZTsKJiM0MzsKJiM0MzsJCWdpYyA9IG1hbmFfZ2RfZ2V0X2dpYyhnYywgIWdjLSZndDttc2lfc2hhcmluZywgJmFtcDttc2kpOwomIzQzOwkJaWYgKElTX0VSUihnaWMpKSB7CiYjNDM7CQkJZXJyID0gUFRSX0VSUihnaWMpOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwkJc3BlYy5lcS5tc2l4X2luZGV4ID0gbXNpOwomIzQzOwomIzQzOwkJZXJyID0gbWFuYV9nZF9jcmVhdGVfbWFuYV9lcShnZCwgJmFtcDtzcGVjLCAmYW1wO2FwYy0mZ3Q7ZXFzW2ldLmVxKTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQlkZXZfZXJyKGdjLSZndDtkZXYsICYjMzQ7RmFpbGVkIHRvIGdyb3cgRVEgJXUgOiAlZFxuJiMzNDssIGksIGVycik7CiYjNDM7CQkJbWFuYV9nZF9wdXRfZ2ljKGdjLCAhZ2MtJmd0O21zaV9zaGFyaW5nLCBtc2kpOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwkJYXBjLSZndDtlcXNbaV0uZXEtJmd0O2VxLmlycSA9IGdpYy0mZ3Q7aXJxOwomIzQzOwkJbWFuYV9jcmVhdGVfZXFfZGVidWdmcyhhcGMsIGkpOwomIzQzOwkJYXBjLSZndDtudW1fZXFzID0gaSAmIzQzOyAxOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO291dDoKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQWxsIENRcyByZWZlcmVuY2luZyBFUXMgYXQgb3IgYWJvdmUgQGtlZXAgbXVzdCBiZSBkZXN0cm95ZWQgZmlyc3QuICovCiYjNDM7c3RhdGljIHZvaWQgbWFuYV9zaHJpbmtfZXFzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLCB1bnNpZ25lZCBpbnQga2VlcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBnZG1hX2NvbnRleHQgKmdjID0gYXBjLSZndDthYy0mZ3Q7Z2RtYV9kZXYtJmd0O2dkbWFfY29udGV4dDsKJiM0MzsJc3RydWN0IGdkbWFfcXVldWUgKmVxOwomIzQzOwl1bnNpZ25lZCBpbnQgbXNpOwomIzQzOwl1bnNpZ25lZCBpbnQgaTsKJiM0MzsKJiM0MzsJaWYgKCFhcGMtJmd0O2VxcyB8fCBrZWVwICZndDs9IGFwYy0mZ3Q7bnVtX2VxcykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZm9yIChpID0ga2VlcDsgaSAmbHQ7IGFwYy0mZ3Q7bnVtX2VxczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWVxID0gYXBjLSZndDtlcXNbaV0uZXE7CiYjNDM7CQlpZiAoIWVxKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGFwYy0mZ3Q7ZXFzW2ldLm1hbmFfZXFfZGVidWdmcyk7CiYjNDM7CQlhcGMtJmd0O2Vxc1tpXS5tYW5hX2VxX2RlYnVnZnMgPSBOVUxMOwomIzQzOwomIzQzOwkJbXNpID0gZXEtJmd0O2VxLm1zaXhfaW5kZXg7CiYjNDM7CQltYW5hX2dkX2Rlc3Ryb3lfcXVldWUoZ2MsIGVxKTsKJiM0MzsJCW1hbmFfZ2RfcHV0X2dpYyhnYywgIWdjLSZndDttc2lfc2hhcmluZywgbXNpKTsKJiM0MzsJCWFwYy0mZ3Q7ZXFzW2ldLmVxID0gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlhcGMtJmd0O251bV9lcXMgPSBrZWVwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbWFuYV9mZW5jZV9ycShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgc3RydWN0IG1hbmFfcnhxICpyeHEpCiB7CiAJc3RydWN0IG1hbmFfZmVuY2VfcnFfcmVzcCByZXNwID0ge307CkBAIC0yMDE4LDcgJiM0MzsyMjQ2LDkgQEAgc3RhdGljIHZvaWQgbWFuYV9wb2xsX3R4X2NxKHN0cnVjdCBtYW5hX2NxICpjcSkKIAkvKiBFbnN1cmUgY2hlY2tpbmcgdHhxX3N0b3BwZWQgYmVmb3JlIGFwYy0mZ3Q7cG9ydF9pc191cC4gKi8KIAlzbXBfcm1iKCk7CiAKLQlpZiAodHhxX3N0b3BwZWQgJmFtcDsmYW1wOyBhcGMtJmd0O3BvcnRfaXNfdXAgJmFtcDsmYW1wOyBhdmFpbF9zcGFjZSAmZ3Q7PSBNQVhfVFhfV1FFX1NJWkUpIHsKJiM0MzsJLyogT3JkZXIgdGhlIHN0b3BwZWQtc3RhdGUgcmVhZCBiZWZvcmUgdGhlIHJldGlyaW5nIHJlYWQuICovCiYjNDM7CWlmICh0eHFfc3RvcHBlZCAmYW1wOyZhbXA7ICFSRUFEX09OQ0UodHhxLSZndDtyZXRpcmluZykgJmFtcDsmYW1wOyBhcGMtJmd0O3BvcnRfaXNfdXAgJmFtcDsmYW1wOwomIzQzOwkgICAgYXZhaWxfc3BhY2UgJmd0Oz0gTUFYX1RYX1dRRV9TSVpFKSB7CiAJCW5ldGlmX3R4X3dha2VfcXVldWUobmV0X3R4cSk7CiAJCWFwYy0mZ3Q7ZXRoX3N0YXRzLndha2VfcXVldWUmIzQzOyYjNDM7OwogCX0KQEAgLTIwODEsNyAmIzQzOzIzMTEsNyBAQCBzdGF0aWMgdm9pZCBtYW5hX3J4X3NrYih2b2lkICpidWZfdmEsIGJvb2wgZnJvbV9wb29sLAogCQkJc3RydWN0IG1hbmFfcnhjb21wX29vYiAqY3FlLCBzdHJ1Y3QgbWFuYV9yeHEgKnJ4cSwKIAkJCXUzMiBwa3RfbGVuLCB1MzIgcGt0X2hhc2gpCiB7Ci0Jc3RydWN0IG1hbmFfc3RhdHNfcnggKnJ4X3N0YXRzID0gJmFtcDtyeHEtJmd0O3N0YXRzOwomIzQzOwlzdHJ1Y3QgbWFuYV9zdGF0c19yeCAqcnhfc3RhdHMgPSBtYW5hX3J4cV9zdGF0cyhyeHEpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcnhxLSZndDtuZGV2OwogCXUxNiByeHFfaWR4ID0gcnhxLSZndDtyeHFfaWR4OwogCXN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaTsKQEAgLTIzMTQsNiAmIzQzOzI1NDQsNyBAQCBzdGF0aWMgdm9pZCBtYW5hX3Byb2Nlc3NfcnhfY3FlKHN0cnVjdCBtYW5hX3J4cSAqcnhxLCBzdHJ1Y3QgbWFuYV9jcSAqY3EsCiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSByeHEtJmd0O25kZXY7CiAJc3RydWN0IG1hbmFfcmVjdl9idWZfb29iICpyeGJ1Zl9vb2I7CiAJc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGM7CiYjNDM7CXN0cnVjdCBtYW5hX3N0YXRzX3J4ICpyeF9zdGF0czsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBnYy0mZ3Q7ZGV2OwogCWJvb2wgY29hbGVzY2VkXzggPSBmYWxzZTsKIAlib29sIGNvYWxlc2NlZCA9IGZhbHNlOwpAQCAtMjM5NSwxMyAmIzQzOzI2MjYsMTUgQEAgc3RhdGljIHZvaWQgbWFuYV9wcm9jZXNzX3J4X2NxZShzdHJ1Y3QgbWFuYV9yeHEgKnJ4cSwgc3RydWN0IG1hbmFfY3EgKmNxLAogCSAqIENvYWxlc2NlZCBDUUVzIGhhdmUgYXQgbGVhc3QgMiBwYWNrZXRzLCBzbyBpbmRleCBpcyBwa3RfaSAtIDIuCiAJICovCiAJaWYgKHBrdF9pICZndDsgMSkgewotCQl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZhbXA7cnhxLSZndDtzdGF0cy5zeW5jcCk7Ci0JCXJ4cS0mZ3Q7c3RhdHMuY29hbGVzY2VkX2NxZVtwa3RfaSAtIDJdJiM0MzsmIzQzOzsKLQkJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJmFtcDtyeHEtJmd0O3N0YXRzLnN5bmNwKTsKJiM0MzsJCXJ4X3N0YXRzID0gbWFuYV9yeHFfc3RhdHMocnhxKTsKJiM0MzsJCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJmFtcDtyeF9zdGF0cy0mZ3Q7c3luY3ApOwomIzQzOwkJcnhfc3RhdHMtJmd0O2NvYWxlc2NlZF9jcWVbcGt0X2kgLSAyXSYjNDM7JiM0Mzs7CiYjNDM7CQl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmYW1wO3J4X3N0YXRzLSZndDtzeW5jcCk7CiAJfSBlbHNlIGlmICghcGt0X2kgJmFtcDsmYW1wOyAhcGt0bGVuKSB7Ci0JCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJmFtcDtyeHEtJmd0O3N0YXRzLnN5bmNwKTsKLQkJcnhxLSZndDtzdGF0cy5wa3RfbGVuMF9lcnImIzQzOyYjNDM7OwotCQl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmYW1wO3J4cS0mZ3Q7c3RhdHMuc3luY3ApOwomIzQzOwkJcnhfc3RhdHMgPSBtYW5hX3J4cV9zdGF0cyhyeHEpOwomIzQzOwkJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmYW1wO3J4X3N0YXRzLSZndDtzeW5jcCk7CiYjNDM7CQlyeF9zdGF0cy0mZ3Q7cGt0X2xlbjBfZXJyJiM0MzsmIzQzOzsKJiM0MzsJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7cnhfc3RhdHMtJmd0O3N5bmNwKTsKIAkJbmV0ZGV2X2Vycl9vbmNlKG5kZXYsCiAJCQkJJiMzNDtSWCBwa3QgbGVuPTAsIHJxPSV1LCBjcT0ldSwgcnhvYmo9MHglbGx4XG4mIzM0OywKIAkJCQlyeHEtJmd0O2dkbWFfaWQsIGNxLSZndDtnZG1hX2lkLCByeHEtJmd0O3J4b2JqKTsKQEAgLTI1MzMsOCAmIzQzOzI3NjYsMTIgQEAgc3RhdGljIHZvaWQgbWFuYV91cGRhdGVfcnhfZGltKHN0cnVjdCBtYW5hX2NxICpjcSkKIAlpZiAoIXNtcF9sb2FkX2FjcXVpcmUoJmFtcDthcGMtJmd0O3J4X2RpbV9lbmFibGVkKSkKIAkJcmV0dXJuOwogCi0JZGltX3VwZGF0ZV9zYW1wbGUoUkVBRF9PTkNFKGNxLSZndDtkaW1fZXZlbnRfY3RyKSwgcnhxLSZndDtzdGF0cy5wYWNrZXRzLAotCQkJICByeHEtJmd0O3N0YXRzLmJ5dGVzLCAmYW1wO2RpbV9zYW1wbGUpOwomIzQzOwkvKiBTa2lwIHJldGlyaW5nIFJYUXM7IERJTSByZWFkcyBzaGFyZWQgcGVyLWluZGV4IGNvdW50ZXJzLiAqLwomIzQzOwlpZiAoUkVBRF9PTkNFKHJ4cS0mZ3Q7cmV0aXJpbmcpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlkaW1fdXBkYXRlX3NhbXBsZShSRUFEX09OQ0UoY3EtJmd0O2RpbV9ldmVudF9jdHIpLCByeHEtJmd0O3N0YXRzLSZndDtwYWNrZXRzLAomIzQzOwkJCSAgcnhxLSZndDtzdGF0cy0mZ3Q7Ynl0ZXMsICZhbXA7ZGltX3NhbXBsZSk7CiAJbmV0X2RpbSgmYW1wO2NxLSZndDtkaW0sICZhbXA7ZGltX3NhbXBsZSk7CiB9CiAKQEAgLTI2NDEsNyAmIzQzOzI4NzgsOSBAQCBzdGF0aWMgdm9pZCBtYW5hX2RlaW5pdF90eHEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsIHN0cnVjdCBtYW5hX3R4cSAqdHhxKQogCW1hbmFfZ2RfZGVzdHJveV9xdWV1ZShnZC0mZ3Q7Z2RtYV9jb250ZXh0LCB0eHEtJmd0O2dkbWFfc3EpOwogfQogCi1zdGF0aWMgdm9pZCBtYW5hX2Rlc3Ryb3lfdHhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKQomIzQzOy8qIEtlZXAgdGhlIGFycmF5IGFuZCBxdWV1ZXMgYmVsb3cgQGZpcnN0OyBjbGVhciBmcmVlZCBzbG90cy4gKi8KJiM0MztzdGF0aWMgdm9pZCBtYW5hX2Rlc3Ryb3lfdHhxX2Zyb20oc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsCiYjNDM7CQkJCSAgdW5zaWduZWQgaW50IGZpcnN0KQogewogCXN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaTsKIAlpbnQgaTsKQEAgLTI2NDksNyAmIzQzOzI4ODgsNyBAQCBzdGF0aWMgdm9pZCBtYW5hX2Rlc3Ryb3lfdHhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKQogCWlmICghYXBjLSZndDt0eF9xcCkKIAkJcmV0dXJuOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IGFwYy0mZ3Q7bnVtX3F1ZXVlczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJZm9yIChpID0gZmlyc3Q7IGkgJmx0OyBhcGMtJmd0O251bV9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7CiAJCWlmICghYXBjLSZndDt0eF9xcFtpXSkKIAkJCWNvbnRpbnVlOwogCkBAIC0yNjczLDcgJiM0MzsyOTEyLDE2IEBAIHN0YXRpYyB2b2lkIG1hbmFfZGVzdHJveV90eHEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpCiAJCW1hbmFfZGVpbml0X3R4cShhcGMsICZhbXA7YXBjLSZndDt0eF9xcFtpXS0mZ3Q7dHhxKTsKIAogCQlrdmZyZWUoYXBjLSZndDt0eF9xcFtpXSk7CiYjNDM7CQlhcGMtJmd0O3R4X3FwW2ldID0gTlVMTDsKIAl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1hbmFfZGVzdHJveV90eHEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpCiYjNDM7ewomIzQzOwlpZiAoIWFwYy0mZ3Q7dHhfcXApCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CW1hbmFfZGVzdHJveV90eHFfZnJvbShhcGMsIDApOwogCiAJa2ZyZWUoYXBjLSZndDt0eF9xcCk7CiAJYXBjLSZndDt0eF9xcCA9IE5VTEw7CkBAIC0yNzA0LDggJiM0MzsyOTUyLDExIEBAIHN0YXRpYyB2b2lkIG1hbmFfY3JlYXRlX3R4cV9kZWJ1Z2ZzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLCBpbnQgaWR4KQogCQkJICAgIHR4X3FwLSZndDt0eF9jcS5nZG1hX2NxLCAmYW1wO21hbmFfZGJnX3FfZm9wcyk7CiB9CiAKJiM0MzsvKiBXaXRoIEBmaXJzdCBub256ZXJvLCB1c2UgdGhlIGV4aXN0aW5nIGFycmF5IGFuZCB1bndpbmQgb25seSBuZXcgcXVldWVzIG9uCiYjNDM7ICogZmFpbHVyZS4KJiM0MzsgKi8KIHN0YXRpYyBpbnQgbWFuYV9jcmVhdGVfdHhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLAotCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKJiM0MzsJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCB1bnNpZ25lZCBpbnQgZmlyc3QpCiB7CiAJc3RydWN0IG1hbmFfY29udGV4dCAqYWMgPSBhcGMtJmd0O2FjOwogCXN0cnVjdCBnZG1hX2RldiAqZ2QgPSBhYy0mZ3Q7Z2RtYV9kZXY7CkBAIC0yNzIwLDkgJiM0MzsyOTcxLDE0IEBAIHN0YXRpYyBpbnQgbWFuYV9jcmVhdGVfdHhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLAogCWludCBlcnI7CiAJaW50IGk7CiAKLQlhcGMtJmd0O3R4X3FwID0ga3phbGxvY19vYmpzKHN0cnVjdCBtYW5hX3R4X3FwICosIGFwYy0mZ3Q7bnVtX3F1ZXVlcyk7Ci0JaWYgKCFhcGMtJmd0O3R4X3FwKQotCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJaWYgKGZpcnN0KSB7CiYjNDM7CQlpZiAoV0FSTl9PTighYXBjLSZndDt0eF9xcCkpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlhcGMtJmd0O3R4X3FwID0ga3phbGxvY19vYmpzKHN0cnVjdCBtYW5hX3R4X3FwICosIGFwYy0mZ3Q7bnVtX3F1ZXVlcyk7CiYjNDM7CQlpZiAoIWFwYy0mZ3Q7dHhfcXApCiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KIAogCS8qICBUaGUgbWluaW11bSBzaXplIG9mIHRoZSBXUUUgaXMgMzIgYnl0ZXMsIGhlbmNlCiAJICogIGFwYy0mZ3Q7dHhfcXVldWVfc2l6ZSByZXByZXNlbnRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBXUUVzCkBAIC0yNzM5LDcgJiM0MzsyOTk1LDcgQEAgc3RhdGljIGludCBtYW5hX2NyZWF0ZV90eHEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsCiAKIAlnYyA9IGdkLSZndDtnZG1hX2NvbnRleHQ7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgYXBjLSZndDtudW1fcXVldWVzOyBpJiM0MzsmIzQzOykgewomIzQzOwlmb3IgKGkgPSBmaXJzdDsgaSAmbHQ7IGFwYy0mZ3Q7bnVtX3F1ZXVlczsgaSYjNDM7JiM0MzspIHsKIAkJYXBjLSZndDt0eF9xcFtpXSA9IGt2emFsbG9jX29iaigqYXBjLSZndDt0eF9xcFtpXSk7CiAJCWlmICghYXBjLSZndDt0eF9xcFtpXSkgewogCQkJZXJyID0gLUVOT01FTTsKQEAgLTI3NTEsOSAmIzQzOzMwMDcsMTAgQEAgc3RhdGljIGludCBtYW5hX2NyZWF0ZV90eHEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsCiAJCS8qIENyZWF0ZSBTUSAqLwogCQl0eHEgPSAmYW1wO2FwYy0mZ3Q7dHhfcXBbaV0tJmd0O3R4cTsKIAotCQl1NjRfc3RhdHNfaW5pdCgmYW1wO3R4cS0mZ3Q7c3RhdHMuc3luY3ApOwomIzQzOwkJdHhxLSZndDtzdGF0cyA9ICZhbXA7YXBjLSZndDt0eHFfc3RhdHNbaV07CiAJCXR4cS0mZ3Q7bmRldiA9IG5ldDsKIAkJdHhxLSZndDtuZXRfdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShuZXQsIGkpOwomIzQzOwkJdHhxLSZndDtyZXNldF9nZW4gPSBSRUFEX09OQ0UoYXBjLSZndDthYy0mZ3Q7cmVzZXRfZ2VuKTsKIAkJdHhxLSZndDt2cF9vZmZzZXQgPSBhcGMtJmd0O3R4X3ZwX29mZnNldDsKIAkJdHhxLSZndDtuYXBpX2luaXRpYWxpemVkID0gZmFsc2U7CiAJCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDt0eHEtJmd0O3BlbmRpbmdfc2ticyk7CkBAIC0yODQ2LDcgJiM0MzszMTAzLDEwIEBAIHN0YXRpYyBpbnQgbWFuYV9jcmVhdGVfdHhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLAogb3V0OgogCW5ldGRldl9lcnIobmV0LCAmIzM0O0ZhaWxlZCB0byBjcmVhdGUgJWQgVFggcXVldWVzLCAlZFxuJiMzNDssCiAJCSAgIGFwYy0mZ3Q7bnVtX3F1ZXVlcywgZXJyKTsKLQltYW5hX2Rlc3Ryb3lfdHhxKGFwYyk7CiYjNDM7CWlmIChmaXJzdCkKJiM0MzsJCW1hbmFfZGVzdHJveV90eHFfZnJvbShhcGMsIGZpcnN0KTsKJiM0MzsJZWxzZQomIzQzOwkJbWFuYV9kZXN0cm95X3R4cShhcGMpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTI4NzcsNiAmIzQzOzMxMzcsOSBAQCBzdGF0aWMgdm9pZCBtYW5hX2Rlc3Ryb3lfcnhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLAogCQluZXRpZl9uYXBpX2RlbF9sb2NrZWQobmFwaSk7CiAJfQogCiYjNDM7CS8qIE5BUEkgaXMgcXVpZXNjZWQsIHNvIGRyYWluX3N0YXRzIGhhcyBubyByZW1haW5pbmcgd3JpdGVyLiAqLwomIzQzOwltYW5hX2ZvbGRfcnhxX3N0YXRzKGFwYywgcnhxKTsKJiM0MzsKIAlpZiAoeGRwX3J4cV9pbmZvX2lzX3JlZygmYW1wO3J4cS0mZ3Q7eGRwX3J4cSkpCiAJCXhkcF9yeHFfaW5mb191bnJlZygmYW1wO3J4cS0mZ3Q7eGRwX3J4cSk7CiAKQEAgLTMwMDksMTEgJiM0MzszMjcyLDExIEBAIHN0YXRpYyBpbnQgbWFuYV9wdXNoX3dxZShzdHJ1Y3QgbWFuYV9yeHEgKnJ4cSkKIAogc3RhdGljIGludCBtYW5hX2NyZWF0ZV9wYWdlX3Bvb2woc3RydWN0IG1hbmFfcnhxICpyeHEsIHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKQogewotCXN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqbXBjID0gbmV0ZGV2X3ByaXYocnhxLSZndDtuZGV2KTsKIAlzdHJ1Y3QgcGFnZV9wb29sX3BhcmFtcyBwcHJtID0ge307CiAJaW50IHJldDsKIAotCXBwcm0ucG9vbF9zaXplID0gbXBjLSZndDtyeF9xdWV1ZV9zaXplIC8gcnhxLSZndDtmcmFnX2NvdW50ICYjNDM7IDE7CiYjNDM7CS8qIFNpemUgdGhlIHBvb2wgZm9yIHRoaXMgUlggcXVldWUsIG5vdCB0aGUgbGl2ZSBjb25maWd1cmF0aW9uLiAqLwomIzQzOwlwcHJtLnBvb2xfc2l6ZSA9IHJ4cS0mZ3Q7bnVtX3J4X2J1ZiAvIHJ4cS0mZ3Q7ZnJhZ19jb3VudCAmIzQzOyAxOwogCXBwcm0ubmlkID0gZ2MtJmd0O251bWFfbm9kZTsKIAlwcHJtLm5hcGkgPSAmYW1wO3J4cS0mZ3Q7cnhfY3EubmFwaTsKIAlwcHJtLm5ldGRldiA9IHJ4cS0mZ3Q7bmRldjsKQEAgLTMwNjIsMTEgJiM0MzszMzI1LDE0IEBAIHN0YXRpYyBzdHJ1Y3QgbWFuYV9yeHEgKm1hbmFfY3JlYXRlX3J4cShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAlyeHEtJmd0O25kZXYgPSBuZGV2OwomIzQzOwlyeHEtJmd0O3N0YXRzID0gJmFtcDthcGMtJmd0O3J4cV9zdGF0c1tyeHFfaWR4XTsKJiM0MzsJdTY0X3N0YXRzX2luaXQoJmFtcDtyeHEtJmd0O2RyYWluX3N0YXRzLnN5bmNwKTsKIAlyeHEtJmd0O251bV9yeF9idWYgPSBhcGMtJmd0O3J4X3F1ZXVlX3NpemU7CiAJcnhxLSZndDtyeHFfaWR4ID0gcnhxX2lkeDsKIAlyeHEtJmd0O3J4b2JqID0gSU5WQUxJRF9NQU5BX0hBTkRMRTsKIAotCW1hbmFfZ2V0X3J4YnVmX2NmZyhhcGMsIG5kZXYtJmd0O210dSwgJmFtcDtyeHEtJmd0O2RhdGFzaXplLCAmYW1wO3J4cS0mZ3Q7YWxsb2Nfc2l6ZSwKJiM0MzsJbWFuYV9nZXRfcnhidWZfY2ZnKGFwYywgYXBjLSZndDtjb25maWd1cmVkX210dSwgJmFtcDtyeHEtJmd0O2RhdGFzaXplLAomIzQzOwkJCSAgICZhbXA7cnhxLSZndDthbGxvY19zaXplLAogCQkJICAgJmFtcDtyeHEtJmd0O2hlYWRyb29tLCAmYW1wO3J4cS0mZ3Q7ZnJhZ19jb3VudCk7CiAJLyogQ3JlYXRlIHBhZ2UgcG9vbCBmb3IgUlggcXVldWUgKi8KIAllcnIgPSBtYW5hX2NyZWF0ZV9wYWdlX3Bvb2wocnhxLCBnYyk7CkBAIC0zMTk2LDE0ICYjNDM7MzQ2MiwxNSBAQCBzdGF0aWMgdm9pZCBtYW5hX2NyZWF0ZV9yeHFfZGVidWdmcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgaW50IGlkeCkKIAkJCSAgICAmYW1wO21hbmFfZGJnX3FfZm9wcyk7CiB9CiAKJiM0MzsvKiBUaGUgY2FsbGVyIG11c3QgZGVzdHJveSBxdWV1ZXMgYWRkZWQgYmVmb3JlIGEgZmFpbHVyZS4gKi8KIHN0YXRpYyBpbnQgbWFuYV9hZGRfcnhfcXVldWVzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLAotCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiYjNDM7CQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHVuc2lnbmVkIGludCBmaXJzdCkKIHsKIAlzdHJ1Y3QgbWFuYV9yeHEgKnJ4cTsKIAlpbnQgZXJyID0gMDsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBhcGMtJmd0O251bV9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CWZvciAoaSA9IGZpcnN0OyBpICZsdDsgYXBjLSZndDtudW1fcXVldWVzOyBpJiM0MzsmIzQzOykgewogCQlyeHEgPSBtYW5hX2NyZWF0ZV9yeHEoYXBjLCBpLCAmYW1wO2FwYy0mZ3Q7ZXFzW2ldLCBuZGV2KTsKIAkJaWYgKElTX0VSUihyeHEpKSB7CiAJCQllcnIgPSBQVFJfRVJSKHJ4cSk7CkBAIC0zMjExLDggJiM0MzszNDc4LDYgQEAgc3RhdGljIGludCBtYW5hX2FkZF9yeF9xdWV1ZXMoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsCiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCXU2NF9zdGF0c19pbml0KCZhbXA7cnhxLSZndDtzdGF0cy5zeW5jcCk7Ci0KIAkJYXBjLSZndDtyeHFzW2ldID0gcnhxOwogCiAJCW1hbmFfY3JlYXRlX3J4cV9kZWJ1Z2ZzKGFwYywgaSk7CkBAIC0zMjIzLDE0ICYjNDM7MzQ4OCwxNSBAQCBzdGF0aWMgaW50IG1hbmFfYWRkX3J4X3F1ZXVlcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBtYW5hX2Rlc3Ryb3lfcnhxcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYykKJiM0MztzdGF0aWMgdm9pZCBtYW5hX2Rlc3Ryb3lfcnhxc19mcm9tKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLAomIzQzOwkJCQkgICB1bnNpZ25lZCBpbnQgZmlyc3QpCiB7CiAJc3RydWN0IG1hbmFfcnhxICpyeHE7CiAJdTMyIHJ4cV9pZHg7CiAKIAlpZiAoYXBjLSZndDtyeHFzKSB7CiAKLQkJZm9yIChyeHFfaWR4ID0gMDsgcnhxX2lkeCAmbHQ7IGFwYy0mZ3Q7bnVtX3F1ZXVlczsgcnhxX2lkeCYjNDM7JiM0MzspIHsKJiM0MzsJCWZvciAocnhxX2lkeCA9IGZpcnN0OyByeHFfaWR4ICZsdDsgYXBjLSZndDtudW1fcXVldWVzOyByeHFfaWR4JiM0MzsmIzQzOykgewogCQkJcnhxID0gYXBjLSZndDtyeHFzW3J4cV9pZHhdOwogCQkJaWYgKCFyeHEpCiAJCQkJY29udGludWU7CkBAIC0zMjQxLDYgJiM0MzszNTA3LDExIEBAIHN0YXRpYyB2b2lkIG1hbmFfZGVzdHJveV9yeHFzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKQogCX0KIH0KIAomIzQzO3N0YXRpYyB2b2lkIG1hbmFfZGVzdHJveV9yeHFzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKQomIzQzO3sKJiM0MzsJbWFuYV9kZXN0cm95X3J4cXNfZnJvbShhcGMsIDApOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIG1hbmFfZGVzdHJveV92cG9ydChzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYykKIHsKIAlzdHJ1Y3QgZ2RtYV9kZXYgKmdkID0gYXBjLSZndDthYy0mZ3Q7Z2RtYV9kZXY7CkBAIC0zMzA2LDYgJiM0MzszNTc3LDI3IEBAIHN0YXRpYyB2b2lkIG1hbmFfcnNzX3RhYmxlX2luaXQoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpCiAJCQlldGh0b29sX3J4ZmhfaW5kaXJfZGVmYXVsdChpLCBhcGMtJmd0O251bV9xdWV1ZXMpOwogfQogCiYjNDM7LyogS2VlcCB1c2VyIHRhYmxlcyB3aXRoIHZhbGlkIGluZGljZXM7IGRlZmVyIGxvc3Mgbm90aWZpY2F0aW9uLiAqLwomIzQzO3N0YXRpYyBib29sIG1hbmFfcnNzX3RhYmxlX2tlZXAoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsCiYjNDM7CQkJCXVuc2lnbmVkIGludCBudW1fcXVldWVzLCBib29sICpsb3N0KQomIzQzO3sKJiM0MzsJdTMyIGk7CiYjNDM7CiYjNDM7CSpsb3N0ID0gZmFsc2U7CiYjNDM7CiYjNDM7CWlmICghbmV0aWZfaXNfcnhmaF9jb25maWd1cmVkKGFwYy0mZ3Q7bmRldikpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBhcGMtJmd0O2luZGlyX3RhYmxlX3N6OyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKGFwYy0mZ3Q7aW5kaXJfdGFibGVbaV0gJmd0Oz0gbnVtX3F1ZXVlcykgewomIzQzOwkJCSpsb3N0ID0gdHJ1ZTsKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwogaW50IG1hbmFfZGlzYWJsZV92cG9ydF9yeChzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYykKIHsKIAlyZXR1cm4gbWFuYV9jZmdfdnBvcnRfc3RlZXJpbmcoYXBjLCBUUklfU1RBVEVfRkFMU0UsIGZhbHNlLCBmYWxzZSwKQEAgLTM1NzYsNiAmIzQzOzM4NjgsNyBAQCBpbnQgbWFuYV9hbGxvY19xdWV1ZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CiAJc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAlzdHJ1Y3QgZ2RtYV9kZXYgKmdkID0gYXBjLSZndDthYy0mZ3Q7Z2RtYV9kZXY7CiYjNDM7CWJvb2wgaW5kaXJfbG9zdDsKIAlpbnQgZXJyOwogCiAJZXJyID0gbWFuYV9jcmVhdGVfdnBvcnQoYXBjLCBuZGV2KTsKQEAgLTM1OTIsNyAmIzQzOzM4ODUsNyBAQCBpbnQgbWFuYV9hbGxvY19xdWV1ZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiAJCWdvdG8gZGVzdHJveV92cG9ydDsKIAl9CiAKLQllcnIgPSBtYW5hX2NyZWF0ZV90eHEoYXBjLCBuZGV2KTsKJiM0MzsJZXJyID0gbWFuYV9jcmVhdGVfdHhxKGFwYywgbmRldiwgMCk7CiAJaWYgKGVycikgewogCQluZXRkZXZfZXJyKG5kZXYsICYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSBUWFEgb24gdlBvcnQgJXU6ICVkXG4mIzM0OywKIAkJCSAgIGFwYy0mZ3Q7cG9ydF9pZHgsIGVycik7CkBAIC0zNjA3LDcgJiM0MzszOTAwLDcgQEAgaW50IG1hbmFfYWxsb2NfcXVldWVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCQlnb3RvIGRlc3Ryb3lfdHhxOwogCX0KIAotCWVyciA9IG1hbmFfYWRkX3J4X3F1ZXVlcyhhcGMsIG5kZXYpOwomIzQzOwllcnIgPSBtYW5hX2FkZF9yeF9xdWV1ZXMoYXBjLCBuZGV2LCAwKTsKIAlpZiAoZXJyKQogCQlnb3RvIGRlc3Ryb3lfcnhxOwogCkBAIC0zNjIxLDcgJiM0MzszOTE0LDkgQEAgaW50IG1hbmFfYWxsb2NfcXVldWVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCQlnb3RvIGRlc3Ryb3lfcnhxOwogCX0KIAotCW1hbmFfcnNzX3RhYmxlX2luaXQoYXBjKTsKJiM0MzsJLyogTG9zcyBub3RpZmljYXRpb24gbmVlZHMgYSBuZXRkZXYgaW5zdGFuY2UgbG9jayB3ZSBtYXkgbGFjay4gKi8KJiM0MzsJaWYgKCFtYW5hX3Jzc190YWJsZV9rZWVwKGFwYywgYXBjLSZndDtudW1fcXVldWVzLCAmYW1wO2luZGlyX2xvc3QpKQomIzQzOwkJbWFuYV9yc3NfdGFibGVfaW5pdChhcGMpOwogCiAJZXJyID0gbWFuYV9jb25maWdfcnNzKGFwYywgVFJJX1NUQVRFX1RSVUUsIHRydWUsIHRydWUpOwogCWlmIChlcnIpIHsKQEAgLTM2NzksMTUgJiM0MzszOTc0LDg4IEBAIGludCBtYW5hX2F0dGFjaChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtYW5hX2RlYWxsb2NfcXVldWVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQomIzQzOy8qIERyYWluIHdpdGggYSBwZXItc2V0IHRpbWVvdXQ7IHJldHVybiB0cnVlIG9ubHkgZm9yIGEgc3VjY2Vzc2Z1bCBGTFIuIEEgZmFsc2UKJiM0MzsgKiByZXR1cm4gZG9lcyBub3QgZ3VhcmFudGVlIERNQSBxdWllc2NlbmNlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIG1hbmFfZHJhaW5fdHhxcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYykKIHsKLQlzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyA9IG5ldGRldl9wcml2KG5kZXYpOwogCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgJiM0MzsgMTIwICogSFo7Ci0Jc3RydWN0IGdkbWFfZGV2ICpnZCA9IGFwYy0mZ3Q7YWMtJmd0O2dkbWFfZGV2OwomIzQzOwlzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IGFwYy0mZ3Q7YWMtJmd0O2dkbWFfZGV2LSZndDtnZG1hX2NvbnRleHQ7CiYjNDM7CWJvb2wgcXVpZXNjZWQgPSB0cnVlOwomIzQzOwlib29sIHJlc2V0ID0gZmFsc2U7CiAJc3RydWN0IG1hbmFfdHhxICp0eHE7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgaSwgZXJyOwogCXUzMiB0c2xlZXA7CiYjNDM7CWludCBpLCBlcnI7CiYjNDM7CiYjNDM7CWlmICghYXBjLSZndDt0eF9xcCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGFwYy0mZ3Q7bnVtX3F1ZXVlczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICghYXBjLSZndDt0eF9xcFtpXSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXR4cSA9ICZhbXA7YXBjLSZndDt0eF9xcFtpXS0mZ3Q7dHhxOwomIzQzOwomIzQzOwkJLyogQSBwcmV2aW91cyBmdW5jdGlvbiByZXNldCBpbnZhbGlkYXRlZCB0aGVzZSBxdWV1ZXMuICovCiYjNDM7CQlpZiAoUkVBRF9PTkNFKGFwYy0mZ3Q7YWMtJmd0O3Jlc2V0X2dlbikgIT0gdHhxLSZndDtyZXNldF9nZW4pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQl0c2xlZXAgPSAxMDAwOwomIzQzOwkJd2hpbGUgKGF0b21pY19yZWFkKCZhbXA7dHhxLSZndDtwZW5kaW5nX3NlbmRzKSAmZ3Q7IDAgJmFtcDsmYW1wOwomIzQzOwkJICAgICAgIHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7CiYjNDM7CQkJdXNsZWVwX3JhbmdlKHRzbGVlcCwgdHNsZWVwICYjNDM7IDEwMDApOwomIzQzOwkJCXRzbGVlcCAmbHQ7Jmx0Oz0gMTsKJiM0MzsJCX0KJiM0MzsJCWlmIChhdG9taWNfcmVhZCgmYW1wO3R4cS0mZ3Q7cGVuZGluZ19zZW5kcykpIHsKJiM0MzsJCQllcnIgPSBwY2llX2Zscih0b19wY2lfZGV2KGdjLSZndDtkZXYpKTsKJiM0MzsJCQlpZiAoZXJyKSB7CiYjNDM7CQkJCW5ldGRldl9lcnIoYXBjLSZndDtuZGV2LAomIzQzOwkJCQkJICAgJiMzNDtmbHIgZmFpbGVkICVkIHdpdGggJWQgcGt0cyBwZW5kaW5nIGluIHR4cSAldVxuJiMzNDssCiYjNDM7CQkJCQkgICBlcnIsCiYjNDM7CQkJCQkgICBhdG9taWNfcmVhZCgmYW1wO3R4cS0mZ3Q7cGVuZGluZ19zZW5kcyksCiYjNDM7CQkJCQkgICB0eHEtJmd0O2dkbWFfdHhxX2lkKTsKJiM0MzsJCQkJcXVpZXNjZWQgPSBmYWxzZTsKJiM0MzsJCQl9IGVsc2UgewomIzQzOwkJCQkvKiBJbnZhbGlkYXRlIHF1ZXVlcyBvbiBldmVyeSBwb3J0IGFmdGVyIHRoZQomIzQzOwkJCQkgKiBmdW5jdGlvbiByZXNldC4KJiM0MzsJCQkJICovCiYjNDM7CQkJCVdSSVRFX09OQ0UoYXBjLSZndDthYy0mZ3Q7cmVzZXRfZ2VuLAomIzQzOwkJCQkJICAgYXBjLSZndDthYy0mZ3Q7cmVzZXRfZ2VuICYjNDM7IDEpOwomIzQzOwomIzQzOwkJCQlyZXNldCA9IHRydWU7CiYjNDM7CQkJfQomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEEgZmFpbGVkIEZMUiBjYW5ub3QganVzdGlmeSB1bm1hcHBpbmcgcGVuZGluZyBUWCBidWZmZXJzLiAqLwomIzQzOwlpZiAoIXF1aWVzY2VkKSB7CiYjNDM7CQluZXRkZXZfZXJyKGFwYy0mZ3Q7bmRldiwKJiM0MzsJCQkgICAmIzM0O2RldmljZSBub3QgcXVpZXNjZWQsIGxlYWtpbmcgcGVuZGluZyBUWCBidWZmZXJzIGluc3RlYWQgb2YgdW5tYXBwaW5nIG1lbW9yeSBpdCBjYW4gc3RpbGwgRE1BIGZyb21cbiYjMzQ7KTsKJiM0MzsJCXJldHVybiByZXNldDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgYXBjLSZndDtudW1fcXVldWVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKCFhcGMtJmd0O3R4X3FwW2ldKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJdHhxID0gJmFtcDthcGMtJmd0O3R4X3FwW2ldLSZndDt0eHE7CiYjNDM7CQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZhbXA7dHhxLSZndDtwZW5kaW5nX3NrYnMpKSkgewomIzQzOwkJCW1hbmFfdW5tYXBfc2tiKHNrYiwgYXBjKTsKJiM0MzsJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwomIzQzOwkJfQomIzQzOwkJYXRvbWljX3NldCgmYW1wO3R4cS0mZ3Q7cGVuZGluZ19zZW5kcywgMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJlc2V0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG1hbmFfZGVhbGxvY19xdWV1ZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwlzdHJ1Y3QgZ2RtYV9kZXYgKmdkID0gYXBjLSZndDthYy0mZ3Q7Z2RtYV9kZXY7CiYjNDM7CWludCBlcnI7CiAKIAlpZiAoYXBjLSZndDtwb3J0X2lzX3VwKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTM2OTgsNDggJiM0Mzs0MDY2LDIxIEBAIHN0YXRpYyBpbnQgbWFuYV9kZWFsbG9jX3F1ZXVlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIAlpZiAoZ2QtJmd0O2dkbWFfY29udGV4dC0mZ3Q7aXNfcGYgJmFtcDsmYW1wOyAhYXBjLSZndDthYy0mZ3Q7Ym1faG9zdG1vZGUpCiAJCW1hbmFfcGZfZGVyZWdpc3Rlcl9maWx0ZXIoYXBjKTsKIAotCS8qIE5vIHBhY2tldCBjYW4gYmUgdHJhbnNtaXR0ZWQgbm93IHNpbmNlIGFwYy0mZ3Q7cG9ydF9pc191cCBpcyBmYWxzZS4KLQkgKiBUaGVyZSBpcyBzdGlsbCBhIHRpbnkgY2hhbmNlIHRoYXQgbWFuYV9wb2xsX3R4X2NxKCkgY2FuIHJlLWVuYWJsZQotCSAqIGEgdHhxIGJlY2F1c2UgaXQgbWF5IG5vdCB0aW1lbHkgc2VlIGFwYy0mZ3Q7cG9ydF9pc191cCBiZWluZyBjbGVhcmVkCi0JICogdG8gZmFsc2UsIGJ1dCBpdCBkb2VzbiYjMzk7dCBtYXR0ZXIgc2luY2UgbWFuYV9zdGFydF94bWl0KCkgZHJvcHMgYW55Ci0JICogbmV3IHBhY2tldHMgZHVlIHRvIGFwYy0mZ3Q7cG9ydF9pc191cCBiZWluZyBmYWxzZS4KLQkgKgotCSAqIERyYWluIGFsbCB0aGUgaW4tZmxpZ2h0IFRYIHBhY2tldHMuCi0JICogQSB0aW1lb3V0IG9mIDEyMCBzZWNvbmRzIGZvciBhbGwgdGhlIHF1ZXVlcyBpcyB1c2VkLgotCSAqIFRoaXMgd2lsbCBicmVhayB0aGUgd2hpbGUgbG9vcCB3aGVuIGgvdyBpcyBub3QgcmVzcG9uZGluZy4KLQkgKiBUaGlzIHZhbHVlIG9mIDEyMCBoYXMgYmVlbiBkZWNpZGVkIGhlcmUgY29uc2lkZXJpbmcgbWF4Ci0JICogbnVtYmVyIG9mIHF1ZXVlcy4KLQkgKi8KJiM0MzsJLyogQWZ0ZXIgRkxSLCBzY2hlZHVsZSBhIGJlc3QtZWZmb3J0IHNpYmxpbmctcG9ydCByZWJ1aWxkLiAqLwomIzQzOwlpZiAobWFuYV9kcmFpbl90eHFzKGFwYykpIHsKJiM0MzsJCXN0cnVjdCBtYW5hX2NvbnRleHQgKmFjID0gYXBjLSZndDthYzsKJiM0MzsJCXVuc2lnbmVkIGludCBpOwogCi0JaWYgKGFwYy0mZ3Q7dHhfcXApIHsKLQkJZm9yIChpID0gMDsgaSAmbHQ7IGFwYy0mZ3Q7bnVtX3F1ZXVlczsgaSYjNDM7JiM0MzspIHsKLQkJCXR4cSA9ICZhbXA7YXBjLSZndDt0eF9xcFtpXS0mZ3Q7dHhxOwotCQkJdHNsZWVwID0gMTAwMDsKLQkJCXdoaWxlIChhdG9taWNfcmVhZCgmYW1wO3R4cS0mZ3Q7cGVuZGluZ19zZW5kcykgJmd0OyAwICZhbXA7JmFtcDsKLQkJCSAgICAgICB0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkgewotCQkJCXVzbGVlcF9yYW5nZSh0c2xlZXAsIHRzbGVlcCAmIzQzOyAxMDAwKTsKLQkJCQl0c2xlZXAgJmx0OyZsdDs9IDE7Ci0JCQl9Ci0JCQlpZiAoYXRvbWljX3JlYWQoJmFtcDt0eHEtJmd0O3BlbmRpbmdfc2VuZHMpKSB7Ci0JCQkJZXJyID0KLQkJCQkgICAgcGNpZV9mbHIodG9fcGNpX2RldihnZC0mZ3Q7Z2RtYV9jb250ZXh0LSZndDtkZXYpKTsKLQkJCQlpZiAoZXJyKSB7Ci0JCQkJCW5ldGRldl9lcnIobmRldiwgJiMzNDtmbHIgZmFpbGVkICVkIHdpdGggJWQgcGt0cyBwZW5kaW5nIGluIHR4cSAldVxuJiMzNDssCi0JCQkJCQkgICBlcnIsCi0JCQkJCSAgICBhdG9taWNfcmVhZCgmYW1wO3R4cS0mZ3Q7cGVuZGluZ19zZW5kcyksCi0JCQkJCSAgICB0eHEtJmd0O2dkbWFfdHhxX2lkKTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBhYy0mZ3Q7bnVtX3BvcnRzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCXN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqc2liOwogCi0JCWZvciAoaSA9IDA7IGkgJmx0OyBhcGMtJmd0O251bV9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCQl0eHEgPSAmYW1wO2FwYy0mZ3Q7dHhfcXBbaV0tJmd0O3R4cTsKLQkJCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmFtcDt0eHEtJmd0O3BlbmRpbmdfc2ticykpKSB7Ci0JCQkJbWFuYV91bm1hcF9za2Ioc2tiLCBhcGMpOwotCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCQl9Ci0JCQlhdG9taWNfc2V0KCZhbXA7dHhxLSZndDtwZW5kaW5nX3NlbmRzLCAwKTsKJiM0MzsJCQlpZiAoIWFjLSZndDtwb3J0c1tpXSB8fCBhYy0mZ3Q7cG9ydHNbaV0gPT0gbmRldikKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQkJc2liID0gbmV0ZGV2X3ByaXYoYWMtJmd0O3BvcnRzW2ldKTsKJiM0MzsJCQluZXRkZXZfZXJyKGFjLSZndDtwb3J0c1tpXSwKJiM0MzsJCQkJICAgJiMzNDtxdWV1ZXMgcmVzZXQgYnkgYSBzaWJsaW5nIHBvcnQsIHNjaGVkdWxpbmcgcmVidWlsZFxuJiMzNDspOwomIzQzOwkJCXF1ZXVlX3dvcmsoYWMtJmd0O3Blcl9wb3J0X3F1ZXVlX3Jlc2V0X3dxLAomIzQzOwkJCQkgICAmYW1wO3NpYi0mZ3Q7cXVldWVfcmVzZXRfd29yayk7CiAJCX0KIAl9CiAKQEAgLTM3NjMsNiAmIzQzOzQxMDQsNjg1IEBAIHN0YXRpYyBpbnQgbWFuYV9kZWFsbG9jX3F1ZXVlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIG1hbmFfcXNldF9zbmFwc2hvdChjb25zdCBzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmN0eCwKJiM0MzsJCQkgICAgICAgc3RydWN0IG1hbmFfcXNldCAqb3V0KQomIzQzO3sKJiM0MzsJb3V0LSZndDt0eF9xcAkJPSBjdHgtJmd0O3R4X3FwOwomIzQzOwlvdXQtJmd0O3J4cXMJCT0gY3R4LSZndDtyeHFzOwomIzQzOwlvdXQtJmd0O2luZGlyX3RhYmxlCT0gY3R4LSZndDtpbmRpcl90YWJsZTsKJiM0MzsJb3V0LSZndDtpbmRpcl90YWJsZV9zegk9IGN0eC0mZ3Q7aW5kaXJfdGFibGVfc3o7CiYjNDM7CW91dC0mZ3Q7cnhvYmpfdGFibGUJPSBjdHgtJmd0O3J4b2JqX3RhYmxlOwomIzQzOwlvdXQtJmd0O2RlZmF1bHRfcnhvYmoJPSBjdHgtJmd0O2RlZmF1bHRfcnhvYmo7CiYjNDM7CW91dC0mZ3Q7bnVtX3F1ZXVlcwkJPSBjdHgtJmd0O251bV9xdWV1ZXM7CiYjNDM7CW91dC0mZ3Q7cnhfcXVldWVfc2l6ZQk9IGN0eC0mZ3Q7cnhfcXVldWVfc2l6ZTsKJiM0MzsJb3V0LSZndDt0eF9xdWV1ZV9zaXplCT0gY3R4LSZndDt0eF9xdWV1ZV9zaXplOwomIzQzOwlvdXQtJmd0O3ByaXZfZmxhZ3MJCT0gY3R4LSZndDtwcml2X2ZsYWdzOwomIzQzOwlvdXQtJmd0O210dQkJPSBjdHgtJmd0O2NvbmZpZ3VyZWRfbXR1OwomIzQzOwlvdXQtJmd0O2JwZl9wcm9nCQk9IGN0eC0mZ3Q7YnBmX3Byb2c7CiYjNDM7CiYjNDM7CW91dC0mZ3Q7cnhmaF9pbmRpcl9sb3N0CT0gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1hbmFfcXNldF9pbnN0YWxsKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqY3R4LAomIzQzOwkJCSAgICAgIGNvbnN0IHN0cnVjdCBtYW5hX3FzZXQgKnFzZXQpCiYjNDM7ewomIzQzOwljdHgtJmd0O3R4X3FwCQk9IHFzZXQtJmd0O3R4X3FwOwomIzQzOwljdHgtJmd0O3J4cXMJCT0gcXNldC0mZ3Q7cnhxczsKJiM0MzsJY3R4LSZndDtpbmRpcl90YWJsZQk9IHFzZXQtJmd0O2luZGlyX3RhYmxlOwomIzQzOwljdHgtJmd0O2luZGlyX3RhYmxlX3N6CT0gcXNldC0mZ3Q7aW5kaXJfdGFibGVfc3o7CiYjNDM7CWN0eC0mZ3Q7cnhvYmpfdGFibGUJPSBxc2V0LSZndDtyeG9ial90YWJsZTsKJiM0MzsJY3R4LSZndDtkZWZhdWx0X3J4b2JqCT0gcXNldC0mZ3Q7ZGVmYXVsdF9yeG9iajsKJiM0MzsJY3R4LSZndDtudW1fcXVldWVzCQk9IHFzZXQtJmd0O251bV9xdWV1ZXM7CiYjNDM7CWN0eC0mZ3Q7cnhfcXVldWVfc2l6ZQk9IHFzZXQtJmd0O3J4X3F1ZXVlX3NpemU7CiYjNDM7CWN0eC0mZ3Q7dHhfcXVldWVfc2l6ZQk9IHFzZXQtJmd0O3R4X3F1ZXVlX3NpemU7CiYjNDM7CWN0eC0mZ3Q7cHJpdl9mbGFncwkJPSBxc2V0LSZndDtwcml2X2ZsYWdzOwomIzQzOwljdHgtJmd0O2NvbmZpZ3VyZWRfbXR1CT0gcXNldC0mZ3Q7bXR1OwomIzQzOwljdHgtJmd0O2JwZl9wcm9nCQk9IHFzZXQtJmd0O2JwZl9wcm9nOwomIzQzO30KJiM0MzsKJiM0MzsvKiBTY3JhdGNoIHN0YXJ0cyB3aXRob3V0IFNRcy9SUXMgYW5kIGJvcnJvd3MgdGhlIHBvcnQmIzM5O3MgRVEgcG9vbC4gTmV2ZXIgY2FsbAomIzQzOyAqIG1hbmFfZGVzdHJveV9lcSgpIG9uIGl0LgomIzQzOyAqLwomIzQzO3N0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqbWFuYV9xc2V0X3NjcmF0Y2hfYWxsb2Moc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKnNjcmF0Y2g7CiYjNDM7CiYjNDM7CXNjcmF0Y2ggPSBrdnphbGxvY19vYmooKnNjcmF0Y2gsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXNjcmF0Y2gpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJKnNjcmF0Y2ggPSAqYXBjOwomIzQzOwomIzQzOwlzY3JhdGNoLSZndDt0eF9xcAkJPSBOVUxMOwomIzQzOwlzY3JhdGNoLSZndDtyeHFzCQk9IE5VTEw7CiYjNDM7CXNjcmF0Y2gtJmd0O2luZGlyX3RhYmxlCT0gTlVMTDsKJiM0MzsJc2NyYXRjaC0mZ3Q7cnhvYmpfdGFibGUJPSBOVUxMOwomIzQzOwlzY3JhdGNoLSZndDtkZWZhdWx0X3J4b2JqCT0gSU5WQUxJRF9NQU5BX0hBTkRMRTsKJiM0MzsKJiM0MzsJLyogRG8gbm90IGNvbnN1bWUgdGhlIGxpdmUgc2V0JiMzOTtzIHByZS1hbGxvY2F0ZWQgUlggYnVmZmVycy4gKi8KJiM0MzsJc2NyYXRjaC0mZ3Q7cnhidWZzX3ByZQk9IE5VTEw7CiYjNDM7CXNjcmF0Y2gtJmd0O2Rhc19wcmUJPSBOVUxMOwomIzQzOwlzY3JhdGNoLSZndDtyeGJwcmVfdG90YWwJPSAwOwomIzQzOwomIzQzOwkvKiBTdXBwcmVzcyBkZWJ1Z2ZzIG5hbWVzIHRoYXQgd291bGQgY29sbGlkZSB3aXRoIHRoZSBsaXZlIHNldC4gKi8KJiM0MzsJc2NyYXRjaC0mZ3Q7bWFuYV9wb3J0X2RlYnVnZnMgPSBFUlJfUFRSKC1FTk9ERVYpOwomIzQzOwomIzQzOwlyZXR1cm4gc2NyYXRjaDsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBtYW5hX3FzZXRfc2NyYXRjaF9mcmVlKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqc2NyYXRjaCkKJiM0Mzt7CiYjNDM7CWt2ZnJlZShzY3JhdGNoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogU3BsaXQgaW50byBrZXB0IHF1ZXVlcyBhbmQgYSByZXRpcmluZyB0YWlsIHdpdGhvdXQgY2hhbmdpbmcgbGl2ZSBvd25lcnNoaXAuCiYjNDM7ICogUXVldWUgaSByZXRhaW5zIEVRIGkuCiYjNDM7ICovCiYjNDM7aW50IG1hbmFfc3BsaXRfcXNldChzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywKJiM0MzsJCSAgICBzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKnNjcmF0Y2gsIHVuc2lnbmVkIGludCBuZXdfY291bnQsCiYjNDM7CQkgICAgc3RydWN0IG1hbmFfcXNldCAqb3V0X25ldywgc3RydWN0IG1hbmFfcXNldCAqb3V0X3RhaWwpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgb2xkX2NvdW50ID0gYXBjLSZndDtudW1fcXVldWVzOwomIzQzOwlzdHJ1Y3QgbWFuYV90eF9xcCAqKm5ld190eCwgKip0YWlsX3R4OwomIzQzOwlzdHJ1Y3QgbWFuYV9yeHEgKipuZXdfcngsICoqdGFpbF9yeDsKJiM0MzsJdW5zaWduZWQgaW50IHRhaWxfY291bnQ7CiYjNDM7CWJvb2wgaW5kaXJfbG9zdDsKJiM0MzsJdW5zaWduZWQgaW50IGk7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CUFTU0VSVF9SVE5MKCk7CiYjNDM7CiYjNDM7CWlmIChXQVJOX09OKG5ld19jb3VudCA9PSAwIHx8IG5ld19jb3VudCAmZ3Q7PSBvbGRfY291bnQpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmIChXQVJOX09OKCFhcGMtJmd0O3R4X3FwIHx8ICFhcGMtJmd0O3J4cXMpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXRhaWxfY291bnQgPSBvbGRfY291bnQgLSBuZXdfY291bnQ7CiYjNDM7CiYjNDM7CS8qIEJ1aWxkIHN0ZWVyaW5nIHNlcGFyYXRlbHkgc28gaXQgY2Fubm90IGluZGV4IGJleW9uZCB0aGUgc2hvcnRlbmVkIFJYCiYjNDM7CSAqIGFycmF5LgomIzQzOwkgKi8KJiM0MzsJc2NyYXRjaC0mZ3Q7bnVtX3F1ZXVlcyA9IG5ld19jb3VudDsKJiM0MzsJZXJyID0gbWFuYV9yc3NfdGFibGVfYWxsb2Moc2NyYXRjaCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlpZiAobWFuYV9yc3NfdGFibGVfa2VlcChhcGMsIG5ld19jb3VudCwgJmFtcDtpbmRpcl9sb3N0KSkKJiM0MzsJCW1lbWNweShzY3JhdGNoLSZndDtpbmRpcl90YWJsZSwgYXBjLSZndDtpbmRpcl90YWJsZSwKJiM0MzsJCSAgICAgICBhcGMtJmd0O2luZGlyX3RhYmxlX3N6ICogc2l6ZW9mKCphcGMtJmd0O2luZGlyX3RhYmxlKSk7CiYjNDM7CWVsc2UKJiM0MzsJCW1hbmFfcnNzX3RhYmxlX2luaXQoc2NyYXRjaCk7CiYjNDM7CiYjNDM7CW5ld190eCA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgbWFuYV90eF9xcCAqLCBuZXdfY291bnQpOwomIzQzOwluZXdfcnggPSBremFsbG9jX29ianMoc3RydWN0IG1hbmFfcnhxICosIG5ld19jb3VudCk7CiYjNDM7CXRhaWxfdHggPSBremFsbG9jX29ianMoc3RydWN0IG1hbmFfdHhfcXAgKiwgdGFpbF9jb3VudCk7CiYjNDM7CXRhaWxfcnggPSBremFsbG9jX29ianMoc3RydWN0IG1hbmFfcnhxICosIHRhaWxfY291bnQpOwomIzQzOwlpZiAoIW5ld190eCB8fCAhbmV3X3J4IHx8ICF0YWlsX3R4IHx8ICF0YWlsX3J4KSB7CiYjNDM7CQllcnIgPSAtRU5PTUVNOwomIzQzOwkJZ290byBmcmVlX2FycmF5czsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbmV3X2NvdW50OyBpJiM0MzsmIzQzOykgewomIzQzOwkJbmV3X3R4W2ldID0gYXBjLSZndDt0eF9xcFtpXTsKJiM0MzsJCW5ld19yeFtpXSA9IGFwYy0mZ3Q7cnhxc1tpXTsKJiM0MzsJfQomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdGFpbF9jb3VudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXRhaWxfdHhbaV0gPSBhcGMtJmd0O3R4X3FwW25ld19jb3VudCAmIzQzOyBpXTsKJiM0MzsJCXRhaWxfcnhbaV0gPSBhcGMtJmd0O3J4cXNbbmV3X2NvdW50ICYjNDM7IGldOwomIzQzOwl9CiYjNDM7CiYjNDM7CW91dF9uZXctJmd0O3R4X3FwCQk9IG5ld190eDsKJiM0MzsJb3V0X25ldy0mZ3Q7cnhxcwkJPSBuZXdfcng7CiYjNDM7CW91dF9uZXctJmd0O2luZGlyX3RhYmxlCT0gc2NyYXRjaC0mZ3Q7aW5kaXJfdGFibGU7CiYjNDM7CW91dF9uZXctJmd0O2luZGlyX3RhYmxlX3N6CT0gc2NyYXRjaC0mZ3Q7aW5kaXJfdGFibGVfc3o7CiYjNDM7CW91dF9uZXctJmd0O3J4b2JqX3RhYmxlCT0gc2NyYXRjaC0mZ3Q7cnhvYmpfdGFibGU7CiYjNDM7CW91dF9uZXctJmd0O2RlZmF1bHRfcnhvYmoJPSBhcGMtJmd0O3J4cXNbMF0tJmd0O3J4b2JqOwomIzQzOwlvdXRfbmV3LSZndDtudW1fcXVldWVzCT0gbmV3X2NvdW50OwomIzQzOwlvdXRfbmV3LSZndDtyeF9xdWV1ZV9zaXplCT0gYXBjLSZndDtyeF9xdWV1ZV9zaXplOwomIzQzOwlvdXRfbmV3LSZndDt0eF9xdWV1ZV9zaXplCT0gYXBjLSZndDt0eF9xdWV1ZV9zaXplOwomIzQzOwlvdXRfbmV3LSZndDtwcml2X2ZsYWdzCT0gYXBjLSZndDtwcml2X2ZsYWdzOwomIzQzOwlvdXRfbmV3LSZndDttdHUJCT0gYXBjLSZndDtjb25maWd1cmVkX210dTsKJiM0MzsJb3V0X25ldy0mZ3Q7YnBmX3Byb2cJPSBhcGMtJmd0O2JwZl9wcm9nOwomIzQzOwlvdXRfbmV3LSZndDtyeGZoX2luZGlyX2xvc3QgPSBpbmRpcl9sb3N0OwomIzQzOwomIzQzOwlzY3JhdGNoLSZndDtpbmRpcl90YWJsZQk9IE5VTEw7CiYjNDM7CXNjcmF0Y2gtJmd0O3J4b2JqX3RhYmxlCT0gTlVMTDsKJiM0MzsKJiM0MzsJbWVtc2V0KG91dF90YWlsLCAwLCBzaXplb2YoKm91dF90YWlsKSk7CiYjNDM7CW91dF90YWlsLSZndDt0eF9xcAkJPSB0YWlsX3R4OwomIzQzOwlvdXRfdGFpbC0mZ3Q7cnhxcwkJPSB0YWlsX3J4OwomIzQzOwlvdXRfdGFpbC0mZ3Q7ZGVmYXVsdF9yeG9iagk9IElOVkFMSURfTUFOQV9IQU5ETEU7CiYjNDM7CW91dF90YWlsLSZndDtudW1fcXVldWVzCT0gdGFpbF9jb3VudDsKJiM0MzsJb3V0X3RhaWwtJmd0O3J4X3F1ZXVlX3NpemUJPSBhcGMtJmd0O3J4X3F1ZXVlX3NpemU7CiYjNDM7CW91dF90YWlsLSZndDt0eF9xdWV1ZV9zaXplCT0gYXBjLSZndDt0eF9xdWV1ZV9zaXplOwomIzQzOwlvdXRfdGFpbC0mZ3Q7cHJpdl9mbGFncwk9IGFwYy0mZ3Q7cHJpdl9mbGFnczsKJiM0MzsJb3V0X3RhaWwtJmd0O210dQkJPSBhcGMtJmd0O2NvbmZpZ3VyZWRfbXR1OwomIzQzOwlvdXRfdGFpbC0mZ3Q7YnBmX3Byb2cJPSBhcGMtJmd0O2JwZl9wcm9nOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztmcmVlX2FycmF5czoKJiM0MzsJa2ZyZWUobmV3X3R4KTsKJiM0MzsJa2ZyZWUobmV3X3J4KTsKJiM0MzsJa2ZyZWUodGFpbF90eCk7CiYjNDM7CWtmcmVlKHRhaWxfcngpOwomIzQzOwltYW5hX2NsZWFudXBfaW5kaXJfdGFibGUoc2NyYXRjaCk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzOy8qIEZyZWUgY29udGFpbmVycyBvbmx5OyB0aGUgbGl2ZSBwb3J0IHN0aWxsIG93bnMgdGhlIHF1ZXVlcy4gKi8KJiM0Mzt2b2lkIG1hbmFfZGlzY2FyZF9zcGxpdChzdHJ1Y3QgbWFuYV9xc2V0ICpuZXdxLCBzdHJ1Y3QgbWFuYV9xc2V0ICp0YWlscSkKJiM0Mzt7CiYjNDM7CWtmcmVlKG5ld3EtJmd0O3R4X3FwKTsKJiM0MzsJa2ZyZWUobmV3cS0mZ3Q7cnhxcyk7CiYjNDM7CWtmcmVlKG5ld3EtJmd0O2luZGlyX3RhYmxlKTsKJiM0MzsJa2ZyZWUobmV3cS0mZ3Q7cnhvYmpfdGFibGUpOwomIzQzOwlrZnJlZSh0YWlscS0mZ3Q7dHhfcXApOwomIzQzOwlrZnJlZSh0YWlscS0mZ3Q7cnhxcyk7CiYjNDM7CW1lbXNldChuZXdxLCAwLCBzaXplb2YoKm5ld3EpKTsKJiM0MzsJbWVtc2V0KHRhaWxxLCAwLCBzaXplb2YoKnRhaWxxKSk7CiYjNDM7fQomIzQzOwomIzQzOy8qIENhcnJ5IGV4aXN0aW5nIHF1ZXVlcyBpbnRvIEBvdXRfbmV3OyBhbGxvY2F0ZSBvbmx5IHRoZSB0YWlsLiBAb3V0X2ZyZXNoCiYjNDM7ICogaXNvbGF0ZXMgbmV3IHF1ZXVlcyBmb3IgY2xlYW51cCBhZnRlciBhIGZhaWxlZCBwdWJsaXNoLgomIzQzOyAqLwomIzQzO2ludCBtYW5hX2dyb3dfcXNldChzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywKJiM0MzsJCSAgIHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqc2NyYXRjaCwgdW5zaWduZWQgaW50IG5ld19jb3VudCwKJiM0MzsJCSAgIHN0cnVjdCBtYW5hX3FzZXQgKm91dF9uZXcsIHN0cnVjdCBtYW5hX3FzZXQgKm91dF9mcmVzaCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBvbGRfY291bnQgPSBhcGMtJmd0O251bV9xdWV1ZXM7CiYjNDM7CXN0cnVjdCBtYW5hX3R4X3FwICoqbmV3X3R4LCAqKmZyZXNoX3R4OwomIzQzOwlzdHJ1Y3QgbWFuYV9yeHEgKipuZXdfcngsICoqZnJlc2hfcng7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gYXBjLSZndDtuZGV2OwomIzQzOwl1bnNpZ25lZCBpbnQgZnJlc2hfY291bnQ7CiYjNDM7CWJvb2wgaW5kaXJfbG9zdDsKJiM0MzsJdW5zaWduZWQgaW50IGk7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CUFTU0VSVF9SVE5MKCk7CiYjNDM7CiYjNDM7CWlmIChXQVJOX09OKG5ld19jb3VudCAmbHQ7PSBvbGRfY291bnQpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmIChXQVJOX09OKCFhcGMtJmd0O3R4X3FwIHx8ICFhcGMtJmd0O3J4cXMpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWZyZXNoX2NvdW50ID0gbmV3X2NvdW50IC0gb2xkX2NvdW50OwomIzQzOwomIzQzOwluZXdfdHggPSBremFsbG9jX29ianMoc3RydWN0IG1hbmFfdHhfcXAgKiwgbmV3X2NvdW50KTsKJiM0MzsJbmV3X3J4ID0ga3phbGxvY19vYmpzKHN0cnVjdCBtYW5hX3J4cSAqLCBuZXdfY291bnQpOwomIzQzOwlmcmVzaF90eCA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgbWFuYV90eF9xcCAqLCBmcmVzaF9jb3VudCk7CiYjNDM7CWZyZXNoX3J4ID0ga3phbGxvY19vYmpzKHN0cnVjdCBtYW5hX3J4cSAqLCBmcmVzaF9jb3VudCk7CiYjNDM7CWlmICghbmV3X3R4IHx8ICFuZXdfcnggfHwgIWZyZXNoX3R4IHx8ICFmcmVzaF9yeCkgewomIzQzOwkJZXJyID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gZnJlZV9hcnJheXM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG9sZF9jb3VudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCW5ld190eFtpXSA9IGFwYy0mZ3Q7dHhfcXBbaV07CiYjNDM7CQluZXdfcnhbaV0gPSBhcGMtJmd0O3J4cXNbaV07CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2NyYXRjaC0mZ3Q7bnVtX3F1ZXVlcyA9IG5ld19jb3VudDsKJiM0MzsJc2NyYXRjaC0mZ3Q7dHhfcXAgPSBuZXdfdHg7CiYjNDM7CXNjcmF0Y2gtJmd0O3J4cXMgPSBuZXdfcng7CiYjNDM7CiYjNDM7CWVyciA9IG1hbmFfcnNzX3RhYmxlX2FsbG9jKHNjcmF0Y2gpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBmcmVlX2FycmF5czsKJiM0MzsKJiM0MzsJZXJyID0gbWFuYV9ncm93X2VxcyhhcGMsIG5ld19jb3VudCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGNsZWFudXBfcnNzOwomIzQzOwomIzQzOwlzY3JhdGNoLSZndDtlcXMgPSBhcGMtJmd0O2VxczsKJiM0MzsJc2NyYXRjaC0mZ3Q7bnVtX2VxcyA9IGFwYy0mZ3Q7bnVtX2VxczsKJiM0MzsKJiM0MzsJZXJyID0gbWFuYV9jcmVhdGVfdHhxKHNjcmF0Y2gsIG5kZXYsIG9sZF9jb3VudCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGNsZWFudXBfcnNzOwomIzQzOwomIzQzOwllcnIgPSBtYW5hX2FkZF9yeF9xdWV1ZXMoc2NyYXRjaCwgbmRldiwgb2xkX2NvdW50KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gY2xlYW51cF9yeHE7CiYjNDM7CiYjNDM7CWlmIChtYW5hX3Jzc190YWJsZV9rZWVwKGFwYywgbmV3X2NvdW50LCAmYW1wO2luZGlyX2xvc3QpKQomIzQzOwkJbWVtY3B5KHNjcmF0Y2gtJmd0O2luZGlyX3RhYmxlLCBhcGMtJmd0O2luZGlyX3RhYmxlLAomIzQzOwkJICAgICAgIGFwYy0mZ3Q7aW5kaXJfdGFibGVfc3ogKiBzaXplb2YoKmFwYy0mZ3Q7aW5kaXJfdGFibGUpKTsKJiM0MzsJZWxzZQomIzQzOwkJbWFuYV9yc3NfdGFibGVfaW5pdChzY3JhdGNoKTsKJiM0MzsKJiM0MzsJbWFuYV9xc2V0X3NuYXBzaG90KHNjcmF0Y2gsIG91dF9uZXcpOwomIzQzOwlvdXRfbmV3LSZndDtyeGZoX2luZGlyX2xvc3QgPSBpbmRpcl9sb3N0OwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZnJlc2hfY291bnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlmcmVzaF90eFtpXSA9IG5ld190eFtvbGRfY291bnQgJiM0MzsgaV07CiYjNDM7CQlmcmVzaF9yeFtpXSA9IG5ld19yeFtvbGRfY291bnQgJiM0MzsgaV07CiYjNDM7CX0KJiM0MzsKJiM0MzsJbWVtc2V0KG91dF9mcmVzaCwgMCwgc2l6ZW9mKCpvdXRfZnJlc2gpKTsKJiM0MzsJb3V0X2ZyZXNoLSZndDt0eF9xcAk9IGZyZXNoX3R4OwomIzQzOwlvdXRfZnJlc2gtJmd0O3J4cXMJCT0gZnJlc2hfcng7CiYjNDM7CW91dF9mcmVzaC0mZ3Q7ZGVmYXVsdF9yeG9iaiA9IElOVkFMSURfTUFOQV9IQU5ETEU7CiYjNDM7CW91dF9mcmVzaC0mZ3Q7bnVtX3F1ZXVlcwk9IGZyZXNoX2NvdW50OwomIzQzOwlvdXRfZnJlc2gtJmd0O3J4X3F1ZXVlX3NpemUgPSBhcGMtJmd0O3J4X3F1ZXVlX3NpemU7CiYjNDM7CW91dF9mcmVzaC0mZ3Q7dHhfcXVldWVfc2l6ZSA9IGFwYy0mZ3Q7dHhfcXVldWVfc2l6ZTsKJiM0MzsJb3V0X2ZyZXNoLSZndDtwcml2X2ZsYWdzCT0gYXBjLSZndDtwcml2X2ZsYWdzOwomIzQzOwlvdXRfZnJlc2gtJmd0O210dQkJPSBhcGMtJmd0O2NvbmZpZ3VyZWRfbXR1OwomIzQzOwlvdXRfZnJlc2gtJmd0O2JwZl9wcm9nCT0gYXBjLSZndDticGZfcHJvZzsKJiM0MzsKJiM0MzsJLyogVGFrZSBYRFAgcmVmcyBvbiBmcmVzaCBSWFFzIG9ubHkuIE9uIHRoZSBtZXJnZWQgc2V0LAomIzQzOwkgKiBtYW5hX2Nobl9zZXR4ZHAoKSByZXR1cm5zIGVhcmx5IG9uIHRoZSBjYXJyaWVkIHJ4cXNbMF0uCiYjNDM7CSAqLwomIzQzOwltYW5hX3FzZXRfaW5zdGFsbChzY3JhdGNoLCBvdXRfZnJlc2gpOwomIzQzOwltYW5hX2Nobl9zZXR4ZHAoc2NyYXRjaCwgbWFuYV94ZHBfZ2V0KGFwYykpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztjbGVhbnVwX3J4cToKJiM0MzsJbWFuYV9kZXN0cm95X3J4cXNfZnJvbShzY3JhdGNoLCBvbGRfY291bnQpOwomIzQzOwltYW5hX2Rlc3Ryb3lfdHhxX2Zyb20oc2NyYXRjaCwgb2xkX2NvdW50KTsKJiM0MztjbGVhbnVwX3JzczoKJiM0MzsJbWFuYV9jbGVhbnVwX2luZGlyX3RhYmxlKHNjcmF0Y2gpOwomIzQzO2ZyZWVfYXJyYXlzOgomIzQzOwkvKiBGcmVlIGNvbnRhaW5lcnMgb25seTsgY2FycmllZCBxdWV1ZXMgcmVtYWluIGxpdmUuICovCiYjNDM7CXNjcmF0Y2gtJmd0O3R4X3FwID0gTlVMTDsKJiM0MzsJc2NyYXRjaC0mZ3Q7cnhxcyA9IE5VTEw7CiYjNDM7CWtmcmVlKG5ld190eCk7CiYjNDM7CWtmcmVlKG5ld19yeCk7CiYjNDM7CWtmcmVlKGZyZXNoX3R4KTsKJiM0MzsJa2ZyZWUoZnJlc2hfcngpOwomIzQzOwomIzQzOwltYW5hX3Nocmlua19lcXMoYXBjLCBhcGMtJmd0O251bV9xdWV1ZXMpOwomIzQzOwomIzQzOwluZXRkZXZfZXJyKG5kZXYsICYjMzQ7JXMobnVtX3F1ZXVlcz0ldSkgZmFpbGVkOiAlZFxuJiMzNDssIF9fZnVuY19fLAomIzQzOwkJICAgbmV3X2NvdW50LCBlcnIpOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MzsvKiBGcmVlIG1lcmdlZCBjb250YWluZXJzIG9ubHksIG5vdCBjYXJyaWVkIHF1ZXVlcy4gVGhlIGNhbGxlciBtdXN0IHJldGlyZSBmcmVzaAomIzQzOyAqIHF1ZXVlcyBzZXBhcmF0ZWx5LgomIzQzOyAqLwomIzQzO3ZvaWQgbWFuYV9kaXNjYXJkX2dyb3coc3RydWN0IG1hbmFfcXNldCAqbmV3cSkKJiM0Mzt7CiYjNDM7CWtmcmVlKG5ld3EtJmd0O3R4X3FwKTsKJiM0MzsJa2ZyZWUobmV3cS0mZ3Q7cnhxcyk7CiYjNDM7CWtmcmVlKG5ld3EtJmd0O2luZGlyX3RhYmxlKTsKJiM0MzsJa2ZyZWUobmV3cS0mZ3Q7cnhvYmpfdGFibGUpOwomIzQzOwltZW1zZXQobmV3cSwgMCwgc2l6ZW9mKCpuZXdxKSk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFJlYnVpbGQgYXQgdGhlIGN1cnJlbnQgY291bnQ7IHJlc2l6ZSB1c2VzIHNwbGl0L2dyb3cuICovCiYjNDM7aW50IG1hbmFfYWxsb2NfcXNldChzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywKJiM0MzsJCSAgICBzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKnNjcmF0Y2gsCiYjNDM7CQkgICAgdW5zaWduZWQgaW50IHJ4X3F1ZXVlX3NpemUsIHVuc2lnbmVkIGludCB0eF9xdWV1ZV9zaXplLAomIzQzOwkJICAgIHUzMiBwcml2X2ZsYWdzLCBpbnQgbXR1LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLAomIzQzOwkJICAgIHN0cnVjdCBtYW5hX3FzZXQgKm91dCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gc2NyYXRjaC0mZ3Q7bmRldjsKJiM0MzsJYm9vbCBpbmRpcl9sb3N0OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlBU1NFUlRfUlROTCgpOwomIzQzOwomIzQzOwlzY3JhdGNoLSZndDtudW1fcXVldWVzCT0gYXBjLSZndDtudW1fcXVldWVzOwomIzQzOwlzY3JhdGNoLSZndDtyeF9xdWV1ZV9zaXplCT0gcnhfcXVldWVfc2l6ZTsKJiM0MzsJc2NyYXRjaC0mZ3Q7dHhfcXVldWVfc2l6ZQk9IHR4X3F1ZXVlX3NpemU7CiYjNDM7CXNjcmF0Y2gtJmd0O3ByaXZfZmxhZ3MJPSBwcml2X2ZsYWdzOwomIzQzOwomIzQzOwlzY3JhdGNoLSZndDtjb25maWd1cmVkX210dQk9IG10dTsKJiM0MzsJc2NyYXRjaC0mZ3Q7YnBmX3Byb2cJPSBicGZfcHJvZzsKJiM0MzsKJiM0MzsJZXJyID0gbWFuYV9pbml0X3BvcnRfY29udGV4dChzY3JhdGNoKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gb3V0X2VycjsKJiM0MzsKJiM0MzsJZXJyID0gbWFuYV9yc3NfdGFibGVfYWxsb2Moc2NyYXRjaCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGNsZWFudXBfcnhxX2FycmF5OwomIzQzOwomIzQzOwkvKiBSZXVzZSB0aGUgZXhpc3RpbmcgRVEgcG9vbDsgdGhlIHF1ZXVlIGNvdW50IGlzIHVuY2hhbmdlZC4gKi8KJiM0MzsJc2NyYXRjaC0mZ3Q7ZXFzID0gYXBjLSZndDtlcXM7CiYjNDM7CXNjcmF0Y2gtJmd0O251bV9lcXMgPSBhcGMtJmd0O251bV9lcXM7CiYjNDM7CiYjNDM7CWVyciA9IG1hbmFfY3JlYXRlX3R4cShzY3JhdGNoLCBuZGV2LCAwKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gY2xlYW51cF9yc3M7CiYjNDM7CiYjNDM7CWVyciA9IG1hbmFfYWRkX3J4X3F1ZXVlcyhzY3JhdGNoLCBuZGV2LCAwKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gY2xlYW51cF9yeHE7CiYjNDM7CiYjNDM7CWlmIChtYW5hX3Jzc190YWJsZV9rZWVwKGFwYywgc2NyYXRjaC0mZ3Q7bnVtX3F1ZXVlcywgJmFtcDtpbmRpcl9sb3N0KSkKJiM0MzsJCW1lbWNweShzY3JhdGNoLSZndDtpbmRpcl90YWJsZSwgYXBjLSZndDtpbmRpcl90YWJsZSwKJiM0MzsJCSAgICAgICBhcGMtJmd0O2luZGlyX3RhYmxlX3N6ICogc2l6ZW9mKCphcGMtJmd0O2luZGlyX3RhYmxlKSk7CiYjNDM7CWVsc2UKJiM0MzsJCW1hbmFfcnNzX3RhYmxlX2luaXQoc2NyYXRjaCk7CiYjNDM7CiYjNDM7CW1hbmFfcXNldF9zbmFwc2hvdChzY3JhdGNoLCBvdXQpOwomIzQzOwlvdXQtJmd0O3J4ZmhfaW5kaXJfbG9zdCA9IGluZGlyX2xvc3Q7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2NsZWFudXBfcnhxOgomIzQzOwltYW5hX2Rlc3Ryb3lfcnhxcyhzY3JhdGNoKTsKJiM0MzsJbWFuYV9kZXN0cm95X3R4cShzY3JhdGNoKTsKJiM0MztjbGVhbnVwX3JzczoKJiM0MzsJbWFuYV9jbGVhbnVwX2luZGlyX3RhYmxlKHNjcmF0Y2gpOwomIzQzO2NsZWFudXBfcnhxX2FycmF5OgomIzQzOwlrZnJlZShzY3JhdGNoLSZndDtyeHFzKTsKJiM0MzsJc2NyYXRjaC0mZ3Q7cnhxcyA9IE5VTEw7CiYjNDM7b3V0X2VycjoKJiM0MzsJbmV0ZGV2X2VycihuZGV2LCAmIzM0OyVzKG51bV9xdWV1ZXM9JXUpIGZhaWxlZDogJWRcbiYjMzQ7LCBfX2Z1bmNfXywKJiM0MzsJCSAgIGFwYy0mZ3Q7bnVtX3F1ZXVlcywgZXJyKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogRGVzdHJveSBjYWxsZXItb3duZWQgQ1FzIGJlZm9yZSBjbG9zaW5nIHRoaXMgZGVhZC1lbmQgcG9ydDogY2xvc2luZyBhbHNvCiYjNDM7ICogZnJlZXMgdGhlIHNoYXJlZCBFUSBwb29sLiBSZXF1aXJlcyBSVE5MLgomIzQzOyAqLwomIzQzO3ZvaWQgbWFuYV9wdWJsaXNoX2Nsb3NlX2lmX25lZWRlZChzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYykKJiM0Mzt7CiYjNDM7CUFTU0VSVF9SVE5MKCk7CiYjNDM7CiYjNDM7CWlmICghYXBjLSZndDtwdWJsaXNoX2RlYWRfZW5kKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlhcGMtJmd0O3B1Ymxpc2hfZGVhZF9lbmQgPSBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKG1hbmFfZGVhbGxvY19xdWV1ZXMoYXBjLSZndDtuZGV2KSkKJiM0MzsJCW5ldGRldl9lcnIoYXBjLSZndDtuZGV2LAomIzQzOwkJCSAgICYjMzQ7ZmFpbGVkIHRvIGNsb3NlIHRoZSBwb3J0IGFmdGVyIGEgZmFpbGVkIHJvbGxiYWNrXG4mIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzOy8qIENhcnJpZWQtb3ZlciBxdWV1ZXMgbWF5IHN0aWxsIGhhdmUgZnVsbCByaW5ncy4gKi8KJiM0MztzdGF0aWMgdm9pZCBtYW5hX3N0YXJ0X3R4cXMoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGFwYy0mZ3Q7bmRldjsKJiM0MzsJdW5zaWduZWQgaW50IGk7CiYjNDM7CiYjNDM7CWlmICghYXBjLSZndDt0eF9xcCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyogT3JkZXIgcG9ydF9pc191cD10cnVlIGJlZm9yZSByaW5nIHJlYWRzIHRvIGF2b2lkIGEgbWlzc2VkIHdha2V1cC4KJiM0MzsJICogUGFpciB3aXRoIG1hbmFfcG9sbF90eF9jcSgpJiMzOTtzIGZ1bGwgYmFycmllciBhZnRlciBpdHMgdGFpbCB1cGRhdGUuCiYjNDM7CSAqLwomIzQzOwlzbXBfbWIoKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGFwYy0mZ3Q7bnVtX3F1ZXVlczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICghYXBjLSZndDt0eF9xcFtpXSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWlmIChtYW5hX2Nhbl90eChhcGMtJmd0O3R4X3FwW2ldLSZndDt0eHEuZ2RtYV9zcSkpCiYjNDM7CQkJbmV0aWZfdHhfd2FrZV9xdWV1ZShuZXRkZXZfZ2V0X3R4X3F1ZXVlKG5kZXYsIGkpKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MzsvKiBSZXRpcmluZyBjb21wbGV0aW9ucyBtdXN0IG5vdCB3YWtlIHJlcGxhY2VtZW50IHF1ZXVlcy4gTWFyayB0aGUgbGVhdmluZyBzZXQKJiM0MzsgKiBiZWZvcmUgdW5tYXJraW5nIHRoZSBpbmNvbWluZyBzZXQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgbWFuYV9xc2V0X3NldF9yZXRpcmluZyhzdHJ1Y3QgbWFuYV9xc2V0ICpxc2V0LAomIzQzOwkJCQkgICBjb25zdCBzdHJ1Y3QgbWFuYV9xc2V0ICprZWVwLCBib29sIHJldGlyaW5nKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IHE7CiYjNDM7CiYjNDM7CWZvciAocSA9IDA7IHEgJmx0OyBxc2V0LSZndDtudW1fcXVldWVzOyBxJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHFzZXQtJmd0O3R4X3FwICZhbXA7JmFtcDsgcXNldC0mZ3Q7dHhfcXBbcV0pCiYjNDM7CQkJV1JJVEVfT05DRShxc2V0LSZndDt0eF9xcFtxXS0mZ3Q7dHhxLnJldGlyaW5nLCByZXRpcmluZyk7CiYjNDM7CiYjNDM7CQlpZiAoIXFzZXQtJmd0O3J4cXMgfHwgIXFzZXQtJmd0O3J4cXNbcV0pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkvKiBDYXJyaWVkIFJYUXMgcmVtYWluIHRoZSBzb2xlIHBvbGwgd3JpdGVycyBvZiBzaGFyZWQgc2xvdHMuICovCiYjNDM7CQlpZiAocmV0aXJpbmcgJmFtcDsmYW1wOyBrZWVwICZhbXA7JmFtcDsgcSAmbHQ7IGtlZXAtJmd0O251bV9xdWV1ZXMgJmFtcDsmYW1wOwomIzQzOwkJICAgIGtlZXAtJmd0O3J4cXMgJmFtcDsmYW1wOyBrZWVwLSZndDtyeHFzW3FdID09IHFzZXQtJmd0O3J4cXNbcV0pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkvKiBTd2l0Y2ggdG8gZHJhaW5fc3RhdHM7IGhhbmQgb2ZmIHNoYXJlZCBzbG90cyBhZnRlciBhIGdyYWNlCiYjNDM7CQkgKiBwZXJpb2QuCiYjNDM7CQkgKi8KJiM0MzsJCVdSSVRFX09OQ0UocXNldC0mZ3Q7cnhxc1txXS0mZ3Q7cmV0aXJpbmcsIHJldGlyaW5nKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MzsvKiBMZWF2ZSBUWCBzdG9wcGVkIGFuZCByZXF1ZXN0IFJYIGRpc2FibGU7IHN0ZWVyaW5nIG1heSBiZSB1bnJlY292ZXJhYmxlLiAqLwomIzQzO3N0YXRpYyB2b2lkIG1hbmFfcHVibGlzaF9naXZlX3VwKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKQomIzQzO3sKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJYXBjLSZndDtyc3Nfc3RhdGUgPSBUUklfU1RBVEVfRkFMU0U7CiYjNDM7CiYjNDM7CWVyciA9IG1hbmFfZGlzYWJsZV92cG9ydF9yeChhcGMpOwomIzQzOwlpZiAoZXJyICZhbXA7JmFtcDsgbWFuYV9lbl9uZWVkX2xvZyhhcGMsIGVycikpCiYjNDM7CQluZXRkZXZfZXJyKGFwYy0mZ3Q7bmRldiwgJiMzNDtmYWlsZWQgdG8gZGlzYWJsZSB2UG9ydCBSWDogJWRcbiYjMzQ7LCBlcnIpOwomIzQzOwomIzQzOwlhcGMtJmd0O2NhcnJpZXJfZm9yY2VkX29mZiA9IG5ldGlmX2NhcnJpZXJfb2soYXBjLSZndDtuZGV2KTsKJiM0MzsJbmV0aWZfY2Fycmllcl9vZmYoYXBjLSZndDtuZGV2KTsKJiM0MzsJYXBjLSZndDtwdWJsaXNoX2RlYWRfZW5kID0gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogS2VlcCB0aGUgUlggY291bnQgaGlnaCB1bnRpbCByZXRpcmluZyBSUXMgc3RvcCBkZWxpdmVyaW5nIHRoZWlyIGluZGljZXMuICovCiYjNDM7c3RhdGljIGludCBtYW5hX3JhaXNlX3JlYWxfbnVtX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1bnNpZ25lZCBpbnQgY291bnQpCiYjNDM7ewomIzQzOwlpZiAoY291bnQgJmx0Oz0gbmRldi0mZ3Q7cmVhbF9udW1fcnhfcXVldWVzKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiBuZXRpZl9zZXRfcmVhbF9udW1fcnhfcXVldWVzKG5kZXYsIGNvdW50KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUHVibGlzaCB1bmRlciBSVE5MIHdpdGggVFggZ2F0ZWQuIEFuIGVycm9yIHJlc3RvcmVzIG9sZCBwb2ludGVycywgbm90CiYjNDM7ICogbmVjZXNzYXJpbHkgc2VydmljZS4gRnJlZSBvbmx5IG93bmVkIHF1ZXVlcy4KJiM0MzsgKi8KJiM0MztpbnQgbWFuYV9wdWJsaXNoX3FzZXQoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsIHN0cnVjdCBtYW5hX3FzZXQgKm5ld3EsCiYjNDM7CQkgICAgICBzdHJ1Y3QgbWFuYV9xc2V0ICpvdXRfb2xkKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBhcGMtJmd0O25kZXY7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CUFTU0VSVF9SVE5MKCk7CiYjNDM7CiYjNDM7CS8qIENsb3NlIHRoZSBYRFAgZ2F0ZSBiZWZvcmUgc3RvcHBpbmcgVFggcXVldWVzLiBQYWlyIHdpdGgKJiM0MzsJICogbWFuYV9wb2xsX3R4X2NxKCkmIzM5O3Mgc21wX3JtYigpIHRvIHByZXZlbnQgbWlkLXN3YXAgd2FrZXVwcy4KJiM0MzsJICovCiYjNDM7CVdSSVRFX09OQ0UoYXBjLSZndDtwb3J0X2lzX3VwLCBmYWxzZSk7CiYjNDM7CiYjNDM7CS8qIEVuc3VyZSBwb3J0IHN0YXRlIHVwZGF0ZWQgYmVmb3JlIHR4cSBzdGF0ZSAqLwomIzQzOwlzbXBfd21iKCk7CiYjNDM7CiYjNDM7CW5ldGlmX3R4X2Rpc2FibGUobmRldik7CiYjNDM7CiYjNDM7CW1hbmFfcXNldF9zbmFwc2hvdChhcGMsIG91dF9vbGQpOwomIzQzOwomIzQzOwkvKiBNYXJrIGJlZm9yZSB0aGUgZ3JhY2UgcGVyaW9kIHNvIG9sZCBjb21wbGV0aW9ucyBjYW5ub3Qgd2FrZSB0aGUKJiM0MzsJICogcmVwbGFjZW1lbnQmIzM5O3Mgc3RvcHBlZCBxdWV1ZS4KJiM0MzsJICovCiYjNDM7CW1hbmFfcXNldF9zZXRfcmV0aXJpbmcob3V0X29sZCwgbmV3cSwgdHJ1ZSk7CiYjNDM7CiYjNDM7CS8qIERyYWluIFRYL1hEUCByZWFkZXJzIHBhc3QgdGhlIGdhdGUgYW5kIHBvbGxzIG1pc3NpbmcgcmV0aXJpbmcuICovCiYjNDM7CXN5bmNocm9uaXplX25ldCgpOwomIzQzOwomIzQzOwltYW5hX3FzZXRfc2V0X3JldGlyaW5nKG5ld3EsIE5VTEwsIGZhbHNlKTsKJiM0MzsKJiM0MzsJbWFuYV9xc2V0X2luc3RhbGwoYXBjLCBuZXdxKTsKJiM0MzsJYXBjLSZndDtyc3Nfc3RhdGUgPSBhcGMtJmd0O251bV9xdWV1ZXMgJmd0OyAxID8gVFJJX1NUQVRFX1RSVUUgOiBUUklfU1RBVEVfRkFMU0U7CiYjNDM7CiYjNDM7CWVyciA9IG5ldGlmX3NldF9yZWFsX251bV90eF9xdWV1ZXMobmRldiwgYXBjLSZndDtudW1fcXVldWVzKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gcm9sbGJhY2s7CiYjNDM7CiYjNDM7CWVyciA9IG1hbmFfcmFpc2VfcmVhbF9udW1fcngobmRldiwgYXBjLSZndDtudW1fcXVldWVzKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gcm9sbGJhY2s7CiYjNDM7CiYjNDM7CS8qIEluc3RhbGwgWERQIGJlZm9yZSBzdGVlcmluZyByZWFjaGVzIHRoZSBpbmNvbWluZyBSWFFzLiAqLwomIzQzOwltYW5hX2Nobl9zZXR4ZHAoYXBjLCBtYW5hX3hkcF9nZXQoYXBjKSk7CiYjNDM7CiYjNDM7CWVyciA9IG1hbmFfY29uZmlnX3JzcyhhcGMsIFRSSV9TVEFURV9UUlVFLCB0cnVlLCB0cnVlKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gcm9sbGJhY2s7CiYjNDM7CiYjNDM7CVdSSVRFX09OQ0UobmRldi0mZ3Q7bXR1LCBhcGMtJmd0O2NvbmZpZ3VyZWRfbXR1KTsKJiM0MzsKJiM0MzsJLyogUHVibGlzaCBmaWVsZHMgYmVmb3JlIG9wZW5pbmcgdGhlIGdhdGU7IHBhaXIgd2l0aCBUWC9YRFAgcmVhZAomIzQzOwkgKiBiYXJyaWVycy4gVGhlIHBvc3QtZ2F0ZSBmdWxsIGJhcnJpZXIgY2Fubm90IHJlcGxhY2UgdGhpcy4KJiM0MzsJICovCiYjNDM7CXNtcF93bWIoKTsKJiM0MzsKJiM0MzsJV1JJVEVfT05DRShhcGMtJmd0O3BvcnRfaXNfdXAsIHRydWUpOwomIzQzOwltYW5hX3N0YXJ0X3R4cXMoYXBjKTsKJiM0MzsKJiM0MzsJLyogUmVwb3J0IGEgbG9zdCB1c2VyIHRhYmxlIG9ubHkgYWZ0ZXIgc3VjY2Vzc2Z1bCBwdWJsaWNhdGlvbi4gKi8KJiM0MzsJaWYgKG5ld3EtJmd0O3J4ZmhfaW5kaXJfbG9zdCkKJiM0MzsJCWV0aHRvb2xfcnhmaF9pbmRpcl9sb3N0KG5kZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0Mztyb2xsYmFjazoKJiM0MzsJbmV0ZGV2X2VycihuZGV2LCAmIzM0OyVzIGZhaWxlZDogJWQsIHJlc3RvcmluZyBwcmV2aW91cyBxdWV1ZSBzZXRcbiYjMzQ7LAomIzQzOwkJICAgX19mdW5jX18sIGVycik7CiYjNDM7CiYjNDM7CW1hbmFfcXNldF9zZXRfcmV0aXJpbmcobmV3cSwgb3V0X29sZCwgdHJ1ZSk7CiYjNDM7CiYjNDM7CS8qIFF1aWVzY2UgbmV3IHNoYXJlZC1zbG90IHdyaXRlcnMgYmVmb3JlIHJlc3RvcmluZyBvbGQgb25lcy4gKi8KJiM0MzsJc3luY2hyb25pemVfbmV0KCk7CiYjNDM7CiYjNDM7CW1hbmFfcXNldF9zZXRfcmV0aXJpbmcob3V0X29sZCwgTlVMTCwgZmFsc2UpOwomIzQzOwomIzQzOwkvKiBRdWllc2NlIG9sZCBkcmFpbl9zdGF0cyB3cml0ZXJzIGJlZm9yZSBmb2xkaW5nLiAqLwomIzQzOwlzeW5jaHJvbml6ZV9uZXQoKTsKJiM0MzsJbWFuYV9mb2xkX3FzZXRfcnhfc3RhdHMoYXBjLCBvdXRfb2xkKTsKJiM0MzsKJiM0MzsJbWFuYV9xc2V0X2luc3RhbGwoYXBjLCBvdXRfb2xkKTsKJiM0MzsJYXBjLSZndDtyc3Nfc3RhdGUgPSBhcGMtJmd0O251bV9xdWV1ZXMgJmd0OyAxID8gVFJJX1NUQVRFX1RSVUUgOiBUUklfU1RBVEVfRkFMU0U7CiYjNDM7CiYjNDM7CWlmIChuZXRpZl9zZXRfcmVhbF9udW1fdHhfcXVldWVzKG5kZXYsIGFwYy0mZ3Q7bnVtX3F1ZXVlcykgfHwKJiM0MzsJICAgIG1hbmFfcmFpc2VfcmVhbF9udW1fcngobmRldiwgYXBjLSZndDtudW1fcXVldWVzKSkgewomIzQzOwkJLyogSW5jb25zaXN0ZW50IHJlc3RvcmVkIHF1ZXVlIGNvdW50cyBwcm9oaWJpdCBUWDsgbGVhdmUgdGhlCiYjNDM7CQkgKiBwb3J0IHN0b3BwZWQuCiYjNDM7CQkgKi8KJiM0MzsJCW5ldGRldl9lcnIobmRldiwgJiMzNDtmYWlsZWQgdG8gcmVzdG9yZSBxdWV1ZSBjb3VudHMsIGNsb3NpbmcgdGhlIHBvcnRcbiYjMzQ7KTsKJiM0MzsJCW1hbmFfcHVibGlzaF9naXZlX3VwKGFwYyk7CiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChtYW5hX2NvbmZpZ19yc3MoYXBjLCBUUklfU1RBVEVfVFJVRSwgdHJ1ZSwgdHJ1ZSkpIHsKJiM0MzsJCS8qIERvIG5vdCByZW9wZW4gVFggd2l0aCBtaXNtYXRjaGVkIHN0ZWVyaW5nOyBSWCBkaXNhYmxlIGlzCiYjNDM7CQkgKiBiZXN0LWVmZm9ydC4KJiM0MzsJCSAqLwomIzQzOwkJbmV0ZGV2X2VycihuZGV2LCAmIzM0O2ZhaWxlZCB0byByZXN0b3JlIFJTUyBzdGVlcmluZywgY2xvc2luZyB0aGUgcG9ydFxuJiMzNDspOwomIzQzOwkJbWFuYV9wdWJsaXNoX2dpdmVfdXAoYXBjKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJV1JJVEVfT05DRShuZGV2LSZndDttdHUsIGFwYy0mZ3Q7Y29uZmlndXJlZF9tdHUpOwomIzQzOwomIzQzOwkvKiBQdWJsaXNoIHJlc3RvcmVkIGZpZWxkcyBiZWZvcmUgcmVvcGVuaW5nIHRoZSBnYXRlLCBhcyBvbiBzdWNjZXNzLiAqLwomIzQzOwlzbXBfd21iKCk7CiYjNDM7CiYjNDM7CVdSSVRFX09OQ0UoYXBjLSZndDtwb3J0X2lzX3VwLCB0cnVlKTsKJiM0MzsJbWFuYV9zdGFydF90eHFzKGFwYyk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzOy8qIENyZWF0ZSBtaXNzaW5nIGRlYnVnZnMgbm9kZXMgb25jZSByZXRpcmluZyBuYW1lcyBhcmUgZ29uZS4gKi8KJiM0Mzt2b2lkIG1hbmFfcXNldF9kZWJ1Z2ZzX3B1Ymxpc2goc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgaTsKJiM0MzsKJiM0MzsJQVNTRVJUX1JUTkwoKTsKJiM0MzsKJiM0MzsJaWYgKElTX0VSUl9PUl9OVUxMKGFwYy0mZ3Q7bWFuYV9wb3J0X2RlYnVnZnMpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgYXBjLSZndDtudW1fcXVldWVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKGFwYy0mZ3Q7dHhfcXAgJmFtcDsmYW1wOyBhcGMtJmd0O3R4X3FwW2ldICZhbXA7JmFtcDsKJiM0MzsJCSAgICBJU19FUlJfT1JfTlVMTChhcGMtJmd0O3R4X3FwW2ldLSZndDttYW5hX3R4X2RlYnVnZnMpKQomIzQzOwkJCW1hbmFfY3JlYXRlX3R4cV9kZWJ1Z2ZzKGFwYywgaSk7CiYjNDM7CiYjNDM7CQlpZiAoYXBjLSZndDtyeHFzICZhbXA7JmFtcDsgYXBjLSZndDtyeHFzW2ldICZhbXA7JmFtcDsKJiM0MzsJCSAgICBJU19FUlJfT1JfTlVMTChhcGMtJmd0O3J4cXNbaV0tJmd0O21hbmFfcnhfZGVidWdmcykpCiYjNDM7CQkJbWFuYV9jcmVhdGVfcnhxX2RlYnVnZnMoYXBjLCBpKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MzsvKiBVbmRlciBSVE5MLCBmcmVlIG9ubHkgcXVldWVzIG5vIGxvbmdlciBzaGFyZWQgd2l0aCB0aGUgaW5zdGFsbGVkIHNldC4gKi8KJiM0Mzt2b2lkIG1hbmFfZnJlZV9xc2V0KHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqc2NyYXRjaCwgc3RydWN0IG1hbmFfcXNldCAqcXNldCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjID0gbmV0ZGV2X3ByaXYoc2NyYXRjaC0mZ3Q7bmRldik7CiYjNDM7CXN0cnVjdCBicGZfcHJvZyAqcmV0aXJpbmdfcHJvZzsKJiM0MzsJdW5zaWduZWQgaW50IHJldGlyaW5nX3F1ZXVlczsKJiM0MzsKJiM0MzsJQVNTRVJUX1JUTkwoKTsKJiM0MzsKJiM0MzsJaWYgKCFxc2V0LSZndDtyeHFzICZhbXA7JmFtcDsgIXFzZXQtJmd0O3R4X3FwKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAocXNldC0mZ3Q7dHhfcXApIHsKJiM0MzsJCXVuc2lnbmVkIGludCBxOwomIzQzOwomIzQzOwkJZm9yIChxID0gMDsgcSAmbHQ7IHFzZXQtJmd0O251bV9xdWV1ZXM7IHEmIzQzOyYjNDM7KSB7CiYjNDM7CQkJaWYgKHFzZXQtJmd0O3R4X3FwW3FdKQomIzQzOwkJCQlXUklURV9PTkNFKHFzZXQtJmd0O3R4X3FwW3FdLSZndDt0eHEucmV0aXJpbmcsIHRydWUpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEtlZXAgcmV0aXJlZCBxdWV1ZXMgYW5kIGFycmF5cyB0aHJvdWdoIHRoaXMgZ3JhY2UgcGVyaW9kOyBsb2NhbCBOQVBJCiYjNDM7CSAqIHN5bmNocm9uaXphdGlvbiBkb2VzIG5vdCBkcmFpbiBvdGhlciBkZXZpY2VzJiMzOTsgWERQLgomIzQzOwkgKi8KJiM0MzsJc3luY2hyb25pemVfbmV0KCk7CiYjNDM7CiYjNDM7CW1hbmFfcXNldF9pbnN0YWxsKHNjcmF0Y2gsIHFzZXQpOwomIzQzOwomIzQzOwkvKiBLZWVwIHJldGlyaW5nIFJYUXMmIzM5OyBYRFAgcHJvZ3JhbXMgYW5kIHJlZmVyZW5jZXMgdW50aWwgUlggdGVhcmRvd24uCiYjNDM7CSAqIFJlYWQgdGhlIHByb2dyYW0gZnJvbSB0aGUgcXVldWVzLCBub3QgcXVldWUtc2V0IG1ldGFkYXRhLgomIzQzOwkgKi8KJiM0MzsJcmV0aXJpbmdfcHJvZyA9IG1hbmFfY2huX3hkcF9wZWVrKHNjcmF0Y2gpOwomIzQzOwlyZXRpcmluZ19xdWV1ZXMgPSBzY3JhdGNoLSZndDtudW1fcXVldWVzOwomIzQzOwomIzQzOwkvKiBEcmFpbiBUWCBiZWZvcmUgdW5tYXBwaW5nIFJYIGJ1ZmZlcnMuICovCiYjNDM7CWlmIChtYW5hX2RyYWluX3R4cXMoc2NyYXRjaCkpIHsKJiM0MzsJCS8qIEZMUiBhbHNvIGRlc3Ryb3lzIHRoZSBIV0M7IHJlYnVpbGRpbmcgcG9ydHMgaXMgYmVzdC1lZmZvcnQuCiYjNDM7CQkgKiBUaGlzIHBhdGggZG9lcyBub3QgcmVpbml0aWFsaXplIHRoZSBkZXZpY2UuCiYjNDM7CQkgKi8KJiM0MzsJCXN0cnVjdCBtYW5hX2NvbnRleHQgKmFjID0gYXBjLSZndDthYzsKJiM0MzsJCXN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqc2liOwomIzQzOwkJdW5zaWduZWQgaW50IGk7CiYjNDM7CiYjNDM7CQluZXRkZXZfZXJyKHNjcmF0Y2gtJmd0O25kZXYsCiYjNDM7CQkJICAgJiMzNDtkZXZpY2UgcmVzZXQgd2hpbGUgcmV0aXJpbmcgYSBxdWV1ZSBzZXQsIHNjaGVkdWxpbmcgcG9ydCByZXNldFxuJiMzNDspOwomIzQzOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IGFjLSZndDtudW1fcG9ydHM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJaWYgKCFhYy0mZ3Q7cG9ydHNbaV0pCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCXNpYiA9IG5ldGRldl9wcml2KGFjLSZndDtwb3J0c1tpXSk7CiYjNDM7CQkJcXVldWVfd29yayhhYy0mZ3Q7cGVyX3BvcnRfcXVldWVfcmVzZXRfd3EsCiYjNDM7CQkJCSAgICZhbXA7c2liLSZndDtxdWV1ZV9yZXNldF93b3JrKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwkvKiBGZW5jZSBSUXMgYmVmb3JlIHVubWFwcGluZywgYnV0IHRlYXJkb3duIHByb2NlZWRzIG9uIGVycm9ycy4gKi8KJiM0MzsJbWFuYV9mZW5jZV9ycXMoc2NyYXRjaCk7CiYjNDM7CiYjNDM7CW1hbmFfZGVzdHJveV9yeHFzKHNjcmF0Y2gpOwomIzQzOwomIzQzOwltYW5hX2Nobl94ZHBfcmVsZWFzZShyZXRpcmluZ19wcm9nLCByZXRpcmluZ19xdWV1ZXMpOwomIzQzOwomIzQzOwltYW5hX2Rlc3Ryb3lfdHhxKHNjcmF0Y2gpOwomIzQzOwltYW5hX2NsZWFudXBfaW5kaXJfdGFibGUoc2NyYXRjaCk7CiYjNDM7CWtmcmVlKHNjcmF0Y2gtJmd0O3J4cXMpOwomIzQzOwlzY3JhdGNoLSZndDtyeHFzID0gTlVMTDsKJiM0MzsKJiM0MzsJbWVtc2V0KHFzZXQsIDAsIHNpemVvZigqcXNldCkpOwomIzQzOwomIzQzOwkvKiBSZXRpcmluZyBSUXMgY2FuIG5vIGxvbmdlciBkZWxpdmVyIGluZGljZXMgYmV5b25kIHRoZSBsaXZlIHF1ZXVlCiYjNDM7CSAqIGNvdW50LgomIzQzOwkgKi8KJiM0MzsJbmV0aWZfc2V0X3JlYWxfbnVtX3J4X3F1ZXVlcyhhcGMtJmd0O25kZXYsIGFwYy0mZ3Q7bnVtX3F1ZXVlcyk7CiYjNDM7CiYjNDM7CW1hbmFfc2hyaW5rX2VxcyhhcGMsIGFwYy0mZ3Q7bnVtX3F1ZXVlcyk7CiYjNDM7CiYjNDM7CW1hbmFfcXNldF9kZWJ1Z2ZzX3B1Ymxpc2goYXBjKTsKJiM0Mzt9CiYjNDM7CiBpbnQgbWFuYV9kZXRhY2goc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGJvb2wgZnJvbV9jbG9zZSkKIHsKIAlzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyA9IG5ldGRldl9wcml2KG5kZXYpOwpAQCAtMzc4NiwxMCAmIzQzOzQ4MDYsOCBAQCBpbnQgbWFuYV9kZXRhY2goc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGJvb2wgZnJvbV9jbG9zZSkKIAogCWlmIChhcGMtJmd0O3BvcnRfc3Rfc2F2ZSkgewogCQllcnIgPSBtYW5hX2RlYWxsb2NfcXVldWVzKG5kZXYpOwotCQlpZiAoZXJyKSB7CiYjNDM7CQlpZiAoZXJyKQogCQkJbmV0ZGV2X2VycihuZGV2LCAmIzM0OyVzIGZhaWxlZCB0byBkZWFsbG9jYXRlIHF1ZXVlczogJWRcbiYjMzQ7LCBfX2Z1bmNfXywgZXJyKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KIAl9CiAKIAlpZiAoIWZyb21fY2xvc2UpIHsKQEAgLTM4MjYsNiAmIzQzOzQ4NDQsNyBAQCBzdGF0aWMgaW50IG1hbmFfcHJvYmVfcG9ydChzdHJ1Y3QgbWFuYV9jb250ZXh0ICphYywgaW50IHBvcnRfaWR4LAogCWFwYy0mZ3Q7cG9ydF9oYW5kbGUgPSBJTlZBTElEX01BTkFfSEFORExFOwogCWFwYy0mZ3Q7cGZfZmlsdGVyX2hhbmRsZSA9IElOVkFMSURfTUFOQV9IQU5ETEU7CiAJYXBjLSZndDtwb3J0X2lkeCA9IHBvcnRfaWR4OwomIzQzOwlhcGMtJmd0O2NvbmZpZ3VyZWRfbXR1ID0gbmRldi0mZ3Q7bXR1OwogCWFwYy0mZ3Q7bGlua19jZmdfZXJyb3IgPSAxOwogCWFwYy0mZ3Q7Y3FlX2NvYWxlc2NpbmdfZW5hYmxlID0gMDsKIAlhcGMtJmd0O2NxZThfY29hbGVzY2luZ19lbmFibGUgPSAwOwpAQCAtMzg0MCw2ICYjNDM7NDg1OSwxMCBAQCBzdGF0aWMgaW50IG1hbmFfcHJvYmVfcG9ydChzdHJ1Y3QgbWFuYV9jb250ZXh0ICphYywgaW50IHBvcnRfaWR4LAogCQlhcGMtJmd0O3R4X2RpbV9lbmFibGVkID0gTUFOQV9BREFQVElWRV9UWF9ERUY7CiAJfQogCiYjNDM7CWVyciA9IG1hbmFfYWxsb2NfcXVldWVfc3RhdHMoYXBjKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZnJlZV9uZXQ7CiYjNDM7CiAJbXV0ZXhfaW5pdCgmYW1wO2FwYy0mZ3Q7dnBvcnRfbXV0ZXgpOwogCWFwYy0mZ3Q7dnBvcnRfdXNlX2NvdW50ID0gMDsKIApAQCAtMzg2Miw3ICYjNDM7NDg4NSw3IEBAIHN0YXRpYyBpbnQgbWFuYV9wcm9iZV9wb3J0KHN0cnVjdCBtYW5hX2NvbnRleHQgKmFjLCBpbnQgcG9ydF9pZHgsCiAKIAllcnIgPSBtYW5hX2luaXRfcG9ydChuZGV2KTsKIAlpZiAoZXJyKQotCQlnb3RvIGZyZWVfbmV0OwomIzQzOwkJZ290byBmcmVlX3N0YXRzOwogCiAJZXJyID0gbWFuYV9yc3NfdGFibGVfYWxsb2MoYXBjKTsKIAlpZiAoZXJyKQpAQCAtMzg5OSw2ICYjNDM7NDkyMiw4IEBAIHN0YXRpYyBpbnQgbWFuYV9wcm9iZV9wb3J0KHN0cnVjdCBtYW5hX2NvbnRleHQgKmFjLCBpbnQgcG9ydF9pZHgsCiAJbWFuYV9jbGVhbnVwX2luZGlyX3RhYmxlKGFwYyk7CiByZXNldF9hcGM6CiAJbWFuYV9jbGVhbnVwX3BvcnRfY29udGV4dChhcGMpOwomIzQzO2ZyZWVfc3RhdHM6CiYjNDM7CW1hbmFfZnJlZV9xdWV1ZV9zdGF0cyhhcGMpOwogZnJlZV9uZXQ6CiAJKm5kZXZfc3RvcmFnZSA9IE5VTEw7CiAJbmV0ZGV2X2VycihuZGV2LCAmIzM0O0ZhaWxlZCB0byBwcm9iZSB2UG9ydCAlZDogJWRcbiYjMzQ7LCBwb3J0X2lkeCwgZXJyKTsKQEAgLTQyMzksNiAmIzQzOzUyNjQsMTEgQEAgdm9pZCBtYW5hX3JlbW92ZShzdHJ1Y3QgZ2RtYV9kZXYgKmdkLCBib29sIHN1c3BlbmRpbmcpCiAKIAkJdW5yZWdpc3Rlcl9uZXRkZXZpY2UobmRldik7CiAJCW1hbmFfY2xlYW51cF9pbmRpcl90YWJsZShhcGMpOwomIzQzOwkJbWFuYV9mcmVlX3F1ZXVlX3N0YXRzKGFwYyk7CiYjNDM7CiYjNDM7CQkvKiBSZW1vdmUgdGhlIHBvcnQgZnJvbSByZXNldCB3YWxrcyBiZWZvcmUgZnJlZWluZyBpdHMgbmV0ZGV2LgomIzQzOwkJICovCiYjNDM7CQlhYy0mZ3Q7cG9ydHNbaV0gPSBOVUxMOwogCiAJCXJ0bmxfdW5sb2NrKCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9ldGh0b29sLmMKaW5kZXggZWNlN2ZmOWNjNDA5YS4uNjU4NmE5ZDJhMTM0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9ldGh0b29sLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9ldGh0b29sLmMKQEAgLTI0Miw2ICYjNDM7MjQyLDEyIEBAIHN0YXRpYyB2b2lkIG1hbmFfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCiAJdTY0IHhkcF90eDsKIAl1NjQgcGt0X2xlbjBfZXJyOwogCXU2NCBjb2FsZXNjZWRfY3FlW01BTkFfQ1FFX0NPQUxfUEtUU184IC0gMV07CiYjNDM7CXU2NCByZXRfY29hbGVzY2VkX2NxZVtNQU5BX0NRRV9DT0FMX1BLVFNfOCAtIDFdOwomIzQzOwl1NjQgcmV0X3BhY2tldHMsIHJldF9ieXRlczsKJiM0MzsJdTY0IHJldF94ZHBfcmVkaXJlY3Q7CiYjNDM7CXU2NCByZXRfcGt0X2xlbjBfZXJyOwomIzQzOwl1NjQgcmV0X3hkcF9kcm9wOwomIzQzOwl1NjQgcmV0X3hkcF90eDsKIAl1NjQgdHNvX3BhY2tldHM7CiAJdTY0IHRzb19ieXRlczsKIAl1NjQgdHNvX2lubmVyX3BhY2tldHM7CkBAIC0yNTIsMTQgJiM0MzsyNTgsMTEgQEAgc3RhdGljIHZvaWQgbWFuYV9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAl1NjQgbWFuYV9tYXBfZXJyOwogCWludCBxLCBpID0gMCwgajsKIAotCWlmICghYXBjLSZndDtwb3J0X2lzX3VwKQotCQlyZXR1cm47Ci0KLQkvKiBXZSBjYWxsIHRoaXMgbWFuYSBmdW5jdGlvbiB0byBnZXQgdGhlIHBoeSBzdGF0cyBmcm9tIEdETUEgYW5kIGluY2x1ZGVzCi0JICogYWdncmVnYXRlIHR4L3J4IGRyb3AgY291bnRlcnMsIFBlci1UQyhUcmFmZmljIENoYW5uZWwpIHR4L3J4IGFuZCBwYXVzZQotCSAqIGNvdW50ZXJzLgomIzQzOwkvKiBDb3VudGVycyBvdXRsaXZlIHRoZSBxdWV1ZXMsIGJ1dCBzdXNwZW5kIGNhbiBkZXN0cm95IHRoZSBIVyBjaGFubmVsCiYjNDM7CSAqIHdoaWxlIHRoZSBuZXRkZXYgcmVtYWlucyByZWdpc3RlcmVkLiBHYXRlIG9ubHkgdGhlIFBIWSBxdWVyeS4KIAkgKi8KLQltYW5hX3F1ZXJ5X3BoeV9zdGF0cyhhcGMpOwomIzQzOwlpZiAoYXBjLSZndDtwb3J0X2lzX3VwKQomIzQzOwkJbWFuYV9xdWVyeV9waHlfc3RhdHMoYXBjKTsKIAogCWZvciAocSA9IDA7IHEgJmx0OyBBUlJBWV9TSVpFKG1hbmFfZXRoX3N0YXRzKTsgcSYjNDM7JiM0MzspCiAJCWRhdGFbaSYjNDM7JiM0MztdID0gKih1NjQgKikoZXRoX3N0YXRzICYjNDM7IG1hbmFfZXRoX3N0YXRzW3FdLm9mZnNldCk7CkBAIC0yNzEsNyAmIzQzOzI3NCw3IEBAIHN0YXRpYyB2b2lkIG1hbmFfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCiAJCWRhdGFbaSYjNDM7JiM0MztdID0gKih1NjQgKikocGh5X3N0YXRzICYjNDM7IG1hbmFfcGh5X3N0YXRzW3FdLm9mZnNldCk7CiAKIAlmb3IgKHEgPSAwOyBxICZsdDsgbnVtX3F1ZXVlczsgcSYjNDM7JiM0MzspIHsKLQkJcnhfc3RhdHMgPSAmYW1wO2FwYy0mZ3Q7cnhxc1txXS0mZ3Q7c3RhdHM7CiYjNDM7CQlyeF9zdGF0cyA9ICZhbXA7YXBjLSZndDtyeHFfc3RhdHNbcV07CiAKIAkJZG8gewogCQkJc3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oJmFtcDtyeF9zdGF0cy0mZ3Q7c3luY3ApOwpAQCAtMjg1LDYgJiM0MzsyODgsMzMgQEAgc3RhdGljIHZvaWQgbWFuYV9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAkJCQljb2FsZXNjZWRfY3FlW2pdID0gcnhfc3RhdHMtJmd0O2NvYWxlc2NlZF9jcWVbal07CiAJCX0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeSgmYW1wO3J4X3N0YXRzLSZndDtzeW5jcCwgc3RhcnQpKTsKIAomIzQzOwkJLyogU25hcHNob3Qgc2VwYXJhdGVseSBzbyBhIHJldHJ5IGNhbm5vdCBhZGQgcmV0aXJlZCBjb3VudGVycwomIzQzOwkJICogdHdpY2UuCiYjNDM7CQkgKi8KJiM0MzsJCXJ4X3N0YXRzID0gJmFtcDthcGMtJmd0O3J4cV9zdGF0c19yZXRbcV07CiYjNDM7CiYjNDM7CQlkbyB7CiYjNDM7CQkJc3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oJmFtcDtyeF9zdGF0cy0mZ3Q7c3luY3ApOwomIzQzOwkJCXJldF9wYWNrZXRzID0gcnhfc3RhdHMtJmd0O3BhY2tldHM7CiYjNDM7CQkJcmV0X2J5dGVzID0gcnhfc3RhdHMtJmd0O2J5dGVzOwomIzQzOwkJCXJldF94ZHBfZHJvcCA9IHJ4X3N0YXRzLSZndDt4ZHBfZHJvcDsKJiM0MzsJCQlyZXRfeGRwX3R4ID0gcnhfc3RhdHMtJmd0O3hkcF90eDsKJiM0MzsJCQlyZXRfeGRwX3JlZGlyZWN0ID0gcnhfc3RhdHMtJmd0O3hkcF9yZWRpcmVjdDsKJiM0MzsJCQlyZXRfcGt0X2xlbjBfZXJyID0gcnhfc3RhdHMtJmd0O3BrdF9sZW4wX2VycjsKJiM0MzsJCQlmb3IgKGogPSAwOyBqICZsdDsgTUFOQV9DUUVfQ09BTF9QS1RTXzggLSAxOyBqJiM0MzsmIzQzOykKJiM0MzsJCQkJcmV0X2NvYWxlc2NlZF9jcWVbal0gPQomIzQzOwkJCQkJcnhfc3RhdHMtJmd0O2NvYWxlc2NlZF9jcWVbal07CiYjNDM7CQl9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoJmFtcDtyeF9zdGF0cy0mZ3Q7c3luY3AsIHN0YXJ0KSk7CiYjNDM7CiYjNDM7CQlwYWNrZXRzICYjNDM7PSByZXRfcGFja2V0czsKJiM0MzsJCWJ5dGVzICYjNDM7PSByZXRfYnl0ZXM7CiYjNDM7CQl4ZHBfZHJvcCAmIzQzOz0gcmV0X3hkcF9kcm9wOwomIzQzOwkJeGRwX3R4ICYjNDM7PSByZXRfeGRwX3R4OwomIzQzOwkJeGRwX3JlZGlyZWN0ICYjNDM7PSByZXRfeGRwX3JlZGlyZWN0OwomIzQzOwkJcGt0X2xlbjBfZXJyICYjNDM7PSByZXRfcGt0X2xlbjBfZXJyOwomIzQzOwkJZm9yIChqID0gMDsgaiAmbHQ7IE1BTkFfQ1FFX0NPQUxfUEtUU184IC0gMTsgaiYjNDM7JiM0MzspCiYjNDM7CQkJY29hbGVzY2VkX2NxZVtqXSAmIzQzOz0gcmV0X2NvYWxlc2NlZF9jcWVbal07CiYjNDM7CiAJCWRhdGFbaSYjNDM7JiM0MztdID0gcGFja2V0czsKIAkJZGF0YVtpJiM0MzsmIzQzO10gPSBieXRlczsKIAkJZGF0YVtpJiM0MzsmIzQzO10gPSB4ZHBfZHJvcDsKQEAgLTI5Niw3ICYjNDM7MzI2LDcgQEAgc3RhdGljIHZvaWQgbWFuYV9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAl9CiAKIAlmb3IgKHEgPSAwOyBxICZsdDsgbnVtX3F1ZXVlczsgcSYjNDM7JiM0MzspIHsKLQkJdHhfc3RhdHMgPSAmYW1wO2FwYy0mZ3Q7dHhfcXBbcV0tJmd0O3R4cS5zdGF0czsKJiM0MzsJCXR4X3N0YXRzID0gJmFtcDthcGMtJmd0O3R4cV9zdGF0c1txXTsKIAogCQlkbyB7CiAJCQlzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbigmYW1wO3R4X3N0YXRzLSZndDtzeW5jcCk7CkBAIC02NDgsNTIgJiM0Mzs2NzgsMTI2IEBAIHN0YXRpYyBpbnQgbWFuYV9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCiAJcmV0dXJuIDA7CiB9CiAKLS8qIG1hbmFfc2V0X2NoYW5uZWxzIC0gY2hhbmdlIHRoZSBudW1iZXIgb2YgcXVldWVzIG9uIGEgcG9ydAotICoKLSAqIFJldHVybnMgLUVCVVNZIGlmIFJETUEgaG9sZHMgdGhlIHZwb3J0IHdpdGggRVFzIHNpemVkIHRvIHRoZQotICogY3VycmVudCBudW1fcXVldWVzLgotICovCiBzdGF0aWMgaW50IG1hbmFfc2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAogCQkJICAgICBzdHJ1Y3QgZXRodG9vbF9jaGFubmVscyAqY2hhbm5lbHMpCiB7CiAJc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAl1bnNpZ25lZCBpbnQgbmV3X2NvdW50ID0gY2hhbm5lbHMtJmd0O2NvbWJpbmVkX2NvdW50OwotCXVuc2lnbmVkIGludCBvbGRfY291bnQgPSBhcGMtJmd0O251bV9xdWV1ZXM7CiYjNDM7CXN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqc2NyYXRjaDsKJiM0MzsJc3RydWN0IG1hbmFfcXNldCBuZXdxLCBvbGRxLCBmcmVzaHE7CiAJaW50IGVycjsKIAotCS8qIFNldCBjaGFubmVsX2NoYW5naW5nIHRvIGJsb2NrIFJETUEgZnJvbSBncmFiYmluZyB0aGUgdnBvcnQKLQkgKiBkdXJpbmcgdGhlIGRldGFjaC9hdHRhY2ggd2luZG93LiBtYW5hX2NmZ192cG9ydCgpIGNoZWNrcwotCSAqIHRoaXMgZmxhZyB1bmRlciB2cG9ydF9tdXRleCBhbmQgcmV0dXJucyAtRUJVU1kgaWYgc2V0LgomIzQzOwlpZiAobmV3X2NvdW50ICZsdDsgMSB8fCBuZXdfY291bnQgJmd0OyBhcGMtJmd0O21heF9xdWV1ZXMpIHsKJiM0MzsJCW5ldGRldl9lcnIobmRldiwgJiMzNDtJbnZhbGlkIGNvbWJpbmVkX2NvdW50ICV1IChtYXggJXUpXG4mIzM0OywKJiM0MzsJCQkgICBuZXdfY291bnQsIGFwYy0mZ3Q7bWF4X3F1ZXVlcyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobmV3X2NvdW50ID09IGFwYy0mZ3Q7bnVtX3F1ZXVlcykKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBSZXNpemUgcnhxcyB3aGlsZSBkb3duOiBtYW5hX29wZW4oKSBkb2VzIG5vdCByZWNyZWF0ZSB0aGUgcG9ydAomIzQzOwkgKiBjb250ZXh0LiBSRE1BIG11c3Qgbm90IG93biB0aGUgdnBvcnQgd2hpbGUgbnVtX3F1ZXVlcyBjaGFuZ2VzLgogCSAqLwogCW11dGV4X2xvY2soJmFtcDthcGMtJmd0O3Zwb3J0X211dGV4KTsKLQlpZiAoIWFwYy0mZ3Q7cG9ydF9pc191cCAmYW1wOyZhbXA7IGFwYy0mZ3Q7dnBvcnRfdXNlX2NvdW50KSB7CiYjNDM7CWlmICghYXBjLSZndDtwb3J0X2lzX3VwKSB7CiYjNDM7CQlzdHJ1Y3QgbWFuYV9yeHEgKipyeHFzOwomIzQzOwomIzQzOwkJaWYgKGFwYy0mZ3Q7dnBvcnRfdXNlX2NvdW50KSB7CiYjNDM7CQkJbXV0ZXhfdW5sb2NrKCZhbXA7YXBjLSZndDt2cG9ydF9tdXRleCk7CiYjNDM7CQkJcmV0dXJuIC1FQlVTWTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXJ4cXMgPSBremFsbG9jX29ianMoc3RydWN0IG1hbmFfcnhxICosIG5ld19jb3VudCk7CiYjNDM7CQlpZiAoIXJ4cXMpIHsKJiM0MzsJCQltdXRleF91bmxvY2soJmFtcDthcGMtJmd0O3Zwb3J0X211dGV4KTsKJiM0MzsJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWtmcmVlKGFwYy0mZ3Q7cnhxcyk7CiYjNDM7CQlhcGMtJmd0O3J4cXMgPSByeHFzOwomIzQzOwkJYXBjLSZndDtudW1fcXVldWVzID0gbmV3X2NvdW50OwomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7YXBjLSZndDt2cG9ydF9tdXRleCk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBUaGUgRXRoZXJuZXQgcG9ydCBhbHJlYWR5IGhvbGRzIGEgdnBvcnQgcmVmZXJlbmNlOyBleGNsdWRlIFJETUEKJiM0MzsJICogdGhyb3VnaCBmYWlsdXJlIGNsZWFudXAuCiYjNDM7CSAqLwomIzQzOwlpZiAoYXBjLSZndDtjaGFubmVsX2NoYW5naW5nKSB7CiAJCW11dGV4X3VubG9jaygmYW1wO2FwYy0mZ3Q7dnBvcnRfbXV0ZXgpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAlhcGMtJmd0O2NoYW5uZWxfY2hhbmdpbmcgPSB0cnVlOwogCW11dGV4X3VubG9jaygmYW1wO2FwYy0mZ3Q7dnBvcnRfbXV0ZXgpOwogCi0JZXJyID0gbWFuYV9wcmVfYWxsb2NfcnhidWZzKGFwYywgbmRldi0mZ3Q7bXR1LCBuZXdfY291bnQpOwotCWlmIChlcnIpIHsKLQkJbmV0ZGV2X2VycihuZGV2LCAmIzM0O0luc3VmZmljaWVudCBtZW1vcnkgZm9yIG5ldyBhbGxvY2F0aW9ucyYjMzQ7KTsKJiM0MzsJc2NyYXRjaCA9IG1hbmFfcXNldF9zY3JhdGNoX2FsbG9jKGFwYyk7CiYjNDM7CWlmICghc2NyYXRjaCkgewomIzQzOwkJZXJyID0gLUVOT01FTTsKIAkJZ290byBjbGVhcl9mbGFnOwogCX0KIAotCWVyciA9IG1hbmFfZGV0YWNoKG5kZXYsIGZhbHNlKTsKLQlpZiAoZXJyKSB7Ci0JCW5ldGRldl9lcnIobmRldiwgJiMzNDttYW5hX2RldGFjaCBmYWlsZWQ6ICVkXG4mIzM0OywgZXJyKTsKLQkJZ290byBvdXQ7CiYjNDM7CWlmIChuZXdfY291bnQgJmx0OyBhcGMtJmd0O251bV9xdWV1ZXMpIHsKJiM0MzsJCXN0cnVjdCBtYW5hX3FzZXQgdGFpbHE7CiYjNDM7CiYjNDM7CQllcnIgPSBtYW5hX3NwbGl0X3FzZXQoYXBjLCBzY3JhdGNoLCBuZXdfY291bnQsICZhbXA7bmV3cSwgJmFtcDt0YWlscSk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gZnJlZV9zY3JhdGNoOwomIzQzOwomIzQzOwkJZXJyID0gbWFuYV9wdWJsaXNoX3FzZXQoYXBjLCAmYW1wO25ld3EsICZhbXA7b2xkcSk7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJLyogRGlzY2FyZCBjb250YWluZXJzIG9ubHk7IHRoZWlyIHF1ZXVlcyBzdGlsbCBiZWxvbmcgdG8KJiM0MzsJCQkgKiB0aGUgb2xkIHNldC4KJiM0MzsJCQkgKi8KJiM0MzsJCQltYW5hX2Rpc2NhcmRfc3BsaXQoJmFtcDtuZXdxLCAmYW1wO3RhaWxxKTsKJiM0MzsJCQlnb3RvIGZyZWVfc2NyYXRjaDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCS8qIFdhaXQgZm9yIG5kb19zZWxlY3RfcXVldWUoKSByZWFkZXJzIG9mIG9sZHEuaW5kaXJfdGFibGUuIEZyZWUKJiM0MzsJCSAqIG9ubHkgY29udGFpbmVyczsgdGhlIHF1ZXVlcyBiZWxvbmcgdG8gdGhlIGtlcHQgc2V0IG9yIHRhaWwuCiYjNDM7CQkgKi8KJiM0MzsJCXN5bmNocm9uaXplX25ldCgpOwomIzQzOwomIzQzOwkJa2ZyZWUob2xkcS50eF9xcCk7CiYjNDM7CQlrZnJlZShvbGRxLnJ4cXMpOwomIzQzOwkJa2ZyZWUob2xkcS5pbmRpcl90YWJsZSk7CiYjNDM7CQlrZnJlZShvbGRxLnJ4b2JqX3RhYmxlKTsKJiM0MzsKJiM0MzsJCW1hbmFfZnJlZV9xc2V0KHNjcmF0Y2gsICZhbXA7dGFpbHEpOwomIzQzOwkJZ290byBmcmVlX3NjcmF0Y2g7CiAJfQogCi0JYXBjLSZndDtudW1fcXVldWVzID0gbmV3X2NvdW50OwotCWVyciA9IG1hbmFfYXR0YWNoKG5kZXYpOwomIzQzOwllcnIgPSBtYW5hX2dyb3dfcXNldChhcGMsIHNjcmF0Y2gsIG5ld19jb3VudCwgJmFtcDtuZXdxLCAmYW1wO2ZyZXNocSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGZyZWVfc2NyYXRjaDsKJiM0MzsKJiM0MzsJZXJyID0gbWFuYV9wdWJsaXNoX3FzZXQoYXBjLCAmYW1wO25ld3EsICZhbXA7b2xkcSk7CiAJaWYgKGVycikgewotCQlhcGMtJmd0O251bV9xdWV1ZXMgPSBvbGRfY291bnQ7Ci0JCW5ldGRldl9lcnIobmRldiwgJiMzNDttYW5hX2F0dGFjaCBmYWlsZWQ6ICVkXG4mIzM0OywgZXJyKTsKJiM0MzsJCS8qIEZyZWUgb25seSB0aGUgbmV3IHF1ZXVlcywgdGhlbiBkaXNjYXJkIHRoZSBtZXJnZWQgY29udGFpbmVycy4KJiM0MzsJCSAqLwomIzQzOwkJbWFuYV9mcmVlX3FzZXQoc2NyYXRjaCwgJmFtcDtmcmVzaHEpOwomIzQzOwkJbWFuYV9kaXNjYXJkX2dyb3coJmFtcDtuZXdxKTsKJiM0MzsJCWdvdG8gZnJlZV9zY3JhdGNoOwogCX0KIAotb3V0OgotCW1hbmFfcHJlX2RlYWxsb2NfcnhidWZzKGFwYyk7CiYjNDM7CS8qIFdhaXQgZm9yIG5kb19zZWxlY3RfcXVldWUoKSByZWFkZXJzIG9mIG9sZHEuaW5kaXJfdGFibGUuIEFsbCBxdWV1ZXMKJiM0MzsJICogYXJlIG5vdyBsaXZlIGluIG5ld3E7IGZyZWUgb25seSB0aGUgb2xkIGFuZCBmcmVzaCBjb250YWluZXJzLgomIzQzOwkgKi8KJiM0MzsJc3luY2hyb25pemVfbmV0KCk7CiYjNDM7CiYjNDM7CWtmcmVlKG9sZHEudHhfcXApOwomIzQzOwlrZnJlZShvbGRxLnJ4cXMpOwomIzQzOwlrZnJlZShvbGRxLmluZGlyX3RhYmxlKTsKJiM0MzsJa2ZyZWUob2xkcS5yeG9ial90YWJsZSk7CiYjNDM7CWtmcmVlKGZyZXNocS50eF9xcCk7CiYjNDM7CWtmcmVlKGZyZXNocS5yeHFzKTsKJiM0MzsKJiM0MzsJLyogTm8gcmV0aXJlbWVudCBydW5zIHRvIHB1Ymxpc2ggdGhlIG5ldyBxdWV1ZXMmIzM5OyBkZWJ1Z2ZzIG5vZGVzLiAqLwomIzQzOwltYW5hX3FzZXRfZGVidWdmc19wdWJsaXNoKGFwYyk7CiYjNDM7CiYjNDM7ZnJlZV9zY3JhdGNoOgomIzQzOwltYW5hX3B1Ymxpc2hfY2xvc2VfaWZfbmVlZGVkKGFwYyk7CiYjNDM7CW1hbmFfcXNldF9zY3JhdGNoX2ZyZWUoc2NyYXRjaCk7CiBjbGVhcl9mbGFnOgogCW11dGV4X2xvY2soJmFtcDthcGMtJmd0O3Zwb3J0X211dGV4KTsKIAlhcGMtJmd0O2NoYW5uZWxfY2hhbmdpbmcgPSBmYWxzZTsKQEAgLTcyMCwxMyAmIzQzOzgyNCwxMSBAQCBzdGF0aWMgaW50IG1hbmFfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAkJCSAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKIAlzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwlzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKnNjcmF0Y2g7CiYjNDM7CXN0cnVjdCBtYW5hX3FzZXQgbmV3cSwgb2xkcTsKIAl1MzIgbmV3X3R4LCBuZXdfcng7Ci0JdTMyIG9sZF90eCwgb2xkX3J4OwogCWludCBlcnI7CiAKLQlvbGRfdHggPSBhcGMtJmd0O3R4X3F1ZXVlX3NpemU7Ci0Jb2xkX3J4ID0gYXBjLSZndDtyeF9xdWV1ZV9zaXplOwotCiAJaWYgKHJpbmctJmd0O3R4X3BlbmRpbmcgJmx0OyBNSU5fVFhfQlVGRkVSU19QRVJfUVVFVUUpIHsKIAkJTkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjaywgJiMzNDt0eDolZCBsZXNzIHRoYW4gdGhlIG1pbjolZCYjMzQ7LCByaW5nLSZndDt0eF9wZW5kaW5nLAogCQkJCSAgIE1JTl9UWF9CVUZGRVJTX1BFUl9RVUVVRSk7CkBAIC03NDQsMzIgJiM0Mzs4NDYsNTYgQEAgc3RhdGljIGludCBtYW5hX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCiAJbmV0ZGV2X2luZm8obmRldiwgJiMzNDtVc2luZyBuZWFyZXN0IHBvd2VyIG9mIDIgdmFsdWVzIGZvciBUeHE6JWQgUnhxOiVkXG4mIzM0OywKIAkJICAgIG5ld190eCwgbmV3X3J4KTsKIAotCS8qIHByZS1hbGxvY2F0aW5nIG5ldyBidWZmZXJzIHRvIHByZXZlbnQgZmFpbHVyZXMgaW4gbWFuYV9hdHRhY2goKSBsYXRlciAqLwotCWFwYy0mZ3Q7cnhfcXVldWVfc2l6ZSA9IG5ld19yeDsKLQllcnIgPSBtYW5hX3ByZV9hbGxvY19yeGJ1ZnMoYXBjLCBuZGV2LSZndDttdHUsIGFwYy0mZ3Q7bnVtX3F1ZXVlcyk7Ci0JYXBjLSZndDtyeF9xdWV1ZV9zaXplID0gb2xkX3J4OwotCWlmIChlcnIpIHsKLQkJbmV0ZGV2X2VycihuZGV2LCAmIzM0O0luc3VmZmljaWVudCBtZW1vcnkgZm9yIG5ldyBhbGxvY2F0aW9uc1xuJiMzNDspOwotCQlyZXR1cm4gZXJyOwomIzQzOwlpZiAobmV3X3J4ID09IGFwYy0mZ3Q7cnhfcXVldWVfc2l6ZSAmYW1wOyZhbXA7IG5ld190eCA9PSBhcGMtJmd0O3R4X3F1ZXVlX3NpemUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKCFhcGMtJmd0O3BvcnRfaXNfdXApIHsKJiM0MzsJCWFwYy0mZ3Q7cnhfcXVldWVfc2l6ZSA9IG5ld19yeDsKJiM0MzsJCWFwYy0mZ3Q7dHhfcXVldWVfc2l6ZSA9IG5ld190eDsKJiM0MzsJCXJldHVybiAwOwogCX0KIAotCWVyciA9IG1hbmFfZGV0YWNoKG5kZXYsIGZhbHNlKTsKLQlpZiAoZXJyKSB7Ci0JCW5ldGRldl9lcnIobmRldiwgJiMzNDttYW5hX2RldGFjaCBmYWlsZWQ6ICVkXG4mIzM0OywgZXJyKTsKLQkJZ290byBvdXQ7CiYjNDM7CS8qIEV4Y2x1ZGUgUkRNQSB0aHJvdWdoIGZhaWx1cmUgY2xlYW51cCwgd2hpY2ggbWF5IHJlbGVhc2UgdGhlIHZwb3J0LiAqLwomIzQzOwltdXRleF9sb2NrKCZhbXA7YXBjLSZndDt2cG9ydF9tdXRleCk7CiYjNDM7CWlmIChhcGMtJmd0O2NoYW5uZWxfY2hhbmdpbmcpIHsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO2FwYy0mZ3Q7dnBvcnRfbXV0ZXgpOwomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsJfQomIzQzOwlhcGMtJmd0O2NoYW5uZWxfY2hhbmdpbmcgPSB0cnVlOwomIzQzOwltdXRleF91bmxvY2soJmFtcDthcGMtJmd0O3Zwb3J0X211dGV4KTsKJiM0MzsKJiM0MzsJc2NyYXRjaCA9IG1hbmFfcXNldF9zY3JhdGNoX2FsbG9jKGFwYyk7CiYjNDM7CWlmICghc2NyYXRjaCkgewomIzQzOwkJZXJyID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gY2xlYXJfZmxhZzsKIAl9CiAKLQlhcGMtJmd0O3R4X3F1ZXVlX3NpemUgPSBuZXdfdHg7Ci0JYXBjLSZndDtyeF9xdWV1ZV9zaXplID0gbmV3X3J4OwomIzQzOwllcnIgPSBtYW5hX2FsbG9jX3FzZXQoYXBjLCBzY3JhdGNoLCBuZXdfcngsIG5ld190eCwKJiM0MzsJCQkgICAgICBhcGMtJmd0O3ByaXZfZmxhZ3MsIGFwYy0mZ3Q7Y29uZmlndXJlZF9tdHUsCiYjNDM7CQkJICAgICAgYXBjLSZndDticGZfcHJvZywgJmFtcDtuZXdxKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJTkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjaywgJiMzNDtmYWlsZWQgdG8gY2hhbmdlIHJpbmcgcGFyYW1zOiAlZCYjMzQ7LAomIzQzOwkJCQkgICBlcnIpOwomIzQzOwkJZ290byBmcmVlX3NjcmF0Y2g7CiYjNDM7CX0KIAotCWVyciA9IG1hbmFfYXR0YWNoKG5kZXYpOwomIzQzOwllcnIgPSBtYW5hX3B1Ymxpc2hfcXNldChhcGMsICZhbXA7bmV3cSwgJmFtcDtvbGRxKTsKIAlpZiAoZXJyKSB7Ci0JCW5ldGRldl9lcnIobmRldiwgJiMzNDttYW5hX2F0dGFjaCBmYWlsZWQ6ICVkXG4mIzM0OywgZXJyKTsKLQkJYXBjLSZndDt0eF9xdWV1ZV9zaXplID0gb2xkX3R4OwotCQlhcGMtJmd0O3J4X3F1ZXVlX3NpemUgPSBvbGRfcng7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLCAmIzM0O2ZhaWxlZCB0byBjaGFuZ2UgcmluZyBwYXJhbXM6ICVkJiMzNDssCiYjNDM7CQkJCSAgIGVycik7CiYjNDM7CQltYW5hX2ZyZWVfcXNldChzY3JhdGNoLCAmYW1wO25ld3EpOwomIzQzOwkJZ290byBmcmVlX3NjcmF0Y2g7CiAJfQotb3V0OgotCW1hbmFfcHJlX2RlYWxsb2NfcnhidWZzKGFwYyk7CiYjNDM7CiYjNDM7CW1hbmFfZnJlZV9xc2V0KHNjcmF0Y2gsICZhbXA7b2xkcSk7CiYjNDM7CiYjNDM7ZnJlZV9zY3JhdGNoOgomIzQzOwltYW5hX3B1Ymxpc2hfY2xvc2VfaWZfbmVlZGVkKGFwYyk7CiYjNDM7CW1hbmFfcXNldF9zY3JhdGNoX2ZyZWUoc2NyYXRjaCk7CiYjNDM7Y2xlYXJfZmxhZzoKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2FwYy0mZ3Q7dnBvcnRfbXV0ZXgpOwomIzQzOwlhcGMtJmd0O2NoYW5uZWxfY2hhbmdpbmcgPSBmYWxzZTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7YXBjLSZndDt2cG9ydF9tdXRleCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNzk5LDcgJiM0Mzs5MjUsOCBAQCBzdGF0aWMgaW50IG1hbmFfc2V0X3ByaXZfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBwcml2X2ZsYWdzKQogewogCXN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjID0gbmV0ZGV2X3ByaXYobmRldik7CiAJdTMyIGNoYW5nZWQgPSBhcGMtJmd0O3ByaXZfZmxhZ3MgXiBwcml2X2ZsYWdzOwotCXUzMiBvbGRfcHJpdl9mbGFncyA9IGFwYy0mZ3Q7cHJpdl9mbGFnczsKJiM0MzsJc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICpzY3JhdGNoOwomIzQzOwlzdHJ1Y3QgbWFuYV9xc2V0IG5ld3EsIG9sZHE7CiAJaW50IGVyciA9IDA7CiAKIAlpZiAoIWNoYW5nZWQpCkBAIC04MDksNTQgJiM0Mzs5MzYsNTAgQEAgc3RhdGljIGludCBtYW5hX3NldF9wcml2X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgcHJpdl9mbGFncykKIAlpZiAocHJpdl9mbGFncyAmYW1wOyB+R0VOTUFTSyhNQU5BX1BSSVZfRkxBR19NQVggLSAxLCAwKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlhcGMtJmd0O3ByaXZfZmxhZ3MgPSBwcml2X2ZsYWdzOwotCi0JaWYgKGNoYW5nZWQgJmFtcDsgQklUKE1BTkFfUFJJVl9GTEFHX1VTRV9GVUxMX1BBR0VfUlhCVUYpKSB7Ci0JCWlmICghYXBjLSZndDtwb3J0X2lzX3VwKQotCQkJcmV0dXJuIDA7Ci0KLQkJLyogSWYgWERQIGlzIGF0dGFjaGVkIG9yIE1UVSBpcyBqdW1ibywgc2luZ2xlLWJ1ZmZlci1wZXItcGFnZQotCQkgKiBpcyBhbHJlYWR5IGZvcmNlZCByZWdhcmRsZXNzIG9mIHRoaXMgZmxhZy4gU2tpcCB0aGUKLQkJICogZXhwZW5zaXZlIGRldGFjaC9hdHRhY2ggY3ljbGUgc2luY2Ugbm90aGluZyBjaGFuZ2VzLgotCQkgKi8KLQkJaWYgKG5kZXYtJmd0O210dSAmIzQzOyBNQU5BX1JYQlVGX1BBRCAmZ3Q7IFBBR0VfU0laRSAvIDIgfHwKLQkJICAgIG1hbmFfeGRwX2dldChhcGMpKQotCQkJcmV0dXJuIDA7CiYjNDM7CS8qIFNraXAgcmVidWlsZGluZyB3aGVuIGZ1bGwtcGFnZSBSWCBpcyBhbHJlYWR5IHJlcXVpcmVkLiAqLwomIzQzOwlpZiAoIShjaGFuZ2VkICZhbXA7IEJJVChNQU5BX1BSSVZfRkxBR19VU0VfRlVMTF9QQUdFX1JYQlVGKSkgfHwKJiM0MzsJICAgICFhcGMtJmd0O3BvcnRfaXNfdXAgfHwKJiM0MzsJICAgIG5kZXYtJmd0O210dSAmIzQzOyBNQU5BX1JYQlVGX1BBRCAmZ3Q7IFBBR0VfU0laRSAvIDIgfHwKJiM0MzsJICAgIG1hbmFfeGRwX2dldChhcGMpKSB7CiYjNDM7CQlhcGMtJmd0O3ByaXZfZmxhZ3MgPSBwcml2X2ZsYWdzOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KIAotCQkvKiBCbG9jayBSRE1BIGZyb20gZ3JhYmJpbmcgdGhlIHZwb3J0IGR1cmluZyBkZXRhY2gvYXR0YWNoICovCi0JCW11dGV4X2xvY2soJmFtcDthcGMtJmd0O3Zwb3J0X211dGV4KTsKLQkJYXBjLSZndDtjaGFubmVsX2NoYW5naW5nID0gdHJ1ZTsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2FwYy0mZ3Q7dnBvcnRfbXV0ZXgpOwomIzQzOwlpZiAoYXBjLSZndDtjaGFubmVsX2NoYW5naW5nKSB7CiAJCW11dGV4X3VubG9jaygmYW1wO2FwYy0mZ3Q7dnBvcnRfbXV0ZXgpOwomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsJfQomIzQzOwlhcGMtJmd0O2NoYW5uZWxfY2hhbmdpbmcgPSB0cnVlOwomIzQzOwltdXRleF91bmxvY2soJmFtcDthcGMtJmd0O3Zwb3J0X211dGV4KTsKIAotCQllcnIgPSBtYW5hX3ByZV9hbGxvY19yeGJ1ZnMoYXBjLCBuZGV2LSZndDttdHUsIGFwYy0mZ3Q7bnVtX3F1ZXVlcyk7Ci0JCWlmIChlcnIpIHsKLQkJCW5ldGRldl9lcnIobmRldiwKLQkJCQkgICAmIzM0O0luc3VmZmljaWVudCBtZW1vcnkgZm9yIG5ldyBhbGxvY2F0aW9uc1xuJiMzNDspOwotCQkJYXBjLSZndDtwcml2X2ZsYWdzID0gb2xkX3ByaXZfZmxhZ3M7Ci0JCQlnb3RvIGNsZWFyX2ZsYWc7Ci0JCX0KJiM0MzsJc2NyYXRjaCA9IG1hbmFfcXNldF9zY3JhdGNoX2FsbG9jKGFwYyk7CiYjNDM7CWlmICghc2NyYXRjaCkgewomIzQzOwkJZXJyID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gY2xlYXJfZmxhZzsKJiM0MzsJfQogCi0JCWVyciA9IG1hbmFfZGV0YWNoKG5kZXYsIGZhbHNlKTsKLQkJaWYgKGVycikgewotCQkJbmV0ZGV2X2VycihuZGV2LCAmIzM0O21hbmFfZGV0YWNoIGZhaWxlZDogJWRcbiYjMzQ7LCBlcnIpOwotCQkJYXBjLSZndDtwcml2X2ZsYWdzID0gb2xkX3ByaXZfZmxhZ3M7Ci0JCQlnb3RvIG91dDsKLQkJfQomIzQzOwllcnIgPSBtYW5hX2FsbG9jX3FzZXQoYXBjLCBzY3JhdGNoLCBhcGMtJmd0O3J4X3F1ZXVlX3NpemUsCiYjNDM7CQkJICAgICAgYXBjLSZndDt0eF9xdWV1ZV9zaXplLCBwcml2X2ZsYWdzLAomIzQzOwkJCSAgICAgIGFwYy0mZ3Q7Y29uZmlndXJlZF9tdHUsIGFwYy0mZ3Q7YnBmX3Byb2csICZhbXA7bmV3cSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGZyZWVfc2NyYXRjaDsKIAotCQllcnIgPSBtYW5hX2F0dGFjaChuZGV2KTsKLQkJaWYgKGVycikgewotCQkJbmV0ZGV2X2VycihuZGV2LCAmIzM0O21hbmFfYXR0YWNoIGZhaWxlZDogJWRcbiYjMzQ7LCBlcnIpOwotCQkJYXBjLSZndDtwcml2X2ZsYWdzID0gb2xkX3ByaXZfZmxhZ3M7Ci0JCX0KJiM0MzsJZXJyID0gbWFuYV9wdWJsaXNoX3FzZXQoYXBjLCAmYW1wO25ld3EsICZhbXA7b2xkcSk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCW1hbmFfZnJlZV9xc2V0KHNjcmF0Y2gsICZhbXA7bmV3cSk7CiYjNDM7CQlnb3RvIGZyZWVfc2NyYXRjaDsKIAl9CiAKLW91dDoKLQltYW5hX3ByZV9kZWFsbG9jX3J4YnVmcyhhcGMpOwomIzQzOwltYW5hX2ZyZWVfcXNldChzY3JhdGNoLCAmYW1wO29sZHEpOwomIzQzOwomIzQzO2ZyZWVfc2NyYXRjaDoKJiM0MzsJbWFuYV9wdWJsaXNoX2Nsb3NlX2lmX25lZWRlZChhcGMpOwomIzQzOwltYW5hX3FzZXRfc2NyYXRjaF9mcmVlKHNjcmF0Y2gpOwogY2xlYXJfZmxhZzoKIAltdXRleF9sb2NrKCZhbXA7YXBjLSZndDt2cG9ydF9tdXRleCk7CiAJYXBjLSZndDtjaGFubmVsX2NoYW5naW5nID0gZmFsc2U7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7YXBjLSZndDt2cG9ydF9tdXRleCk7Ci0KIAlyZXR1cm4gZXJyOwogfQogCkBAIC04NzEsNyAmIzQzOzk5NCw4IEBAIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBtYW5hX2V0aHRvb2xfb3BzID0gewogCS5vcF9uZWVkc19ydG5sCQk9IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ0hBTk5FTFMgfAogCQkJCSAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU0gfAogCQkJCSAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQRkxBR1MgfAotCQkJCSAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LLAomIzQzOwkJCQkgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSyB8CiYjNDM7CQkJCSAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1JTUywKIAkuZ2V0X2V0aHRvb2xfc3RhdHMJPSBtYW5hX2dldF9ldGh0b29sX3N0YXRzLAogCS5nZXRfc3NldF9jb3VudAkJPSBtYW5hX2dldF9zc2V0X2NvdW50LAogCS5nZXRfc3RyaW5ncwkJPSBtYW5hX2dldF9zdHJpbmdzLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmggYi9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaAppbmRleCAzMDg5NTBmOWI1NGIwLi42NjY1NjVmZmIyNmFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaApAQCAtNjg2LDYgJiM0Mzs2ODYsMTEgQEAgZW51bSB7CiAvKiBEcml2ZXIgc3VwcG9ydHMgbm9uLWNvbnRpZ3VvdXMgcXVldWUgYnVmZmVycyAqLwogI2RlZmluZSBHRE1BX0RSVl9DQVBfRkxBR18xX05PTl9DT05USUdVT1VTX0JVRkZFUlMgQklUKDMwKQogCiYjNDM7LyogUmVzaXplIGZhaWx1cmVzIGFyZSBoYW5kbGVkIGluLWRyaXZlcjsgYSBmYWlsZWQgcm9sbGJhY2sgc3RpbGwgbmVlZHMKJiM0MzsgKiByZWNvdmVyeS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEdETUFfRFJWX0NBUF9GTEFHXzFfU0VMRl9SRUNPVkVSWV9PTl9RVUVVRV9SRVNJWkVfRkFJTFVSRSBCSVQoMzEpCiYjNDM7CiAjZGVmaW5lIEdETUFfRFJWX0NBUF9GTEFHUzEgXAogCShHRE1BX0RSVl9DQVBfRkxBR18xX0VRX1NIQVJJTkdfTVVMVElfVlBPUlQgfCBcCiAJIEdETUFfRFJWX0NBUF9GTEFHXzFfTkFQSV9XS0RPTkVfRklYIHwgXApAQCAtNzAzLDcgJiM0Mzs3MDgsOCBAQCBlbnVtIHsKIAkgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9IV0NfVElNRU9VVF9SRUNPVkVSWSB8IFwKIAkgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9FUV9NU0lfVU5TSEFSRV9NVUxUSV9WUE9SVCB8IFwKIAkgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9EWU5fSU5URVJSVVBUX01PREVSQVRJT04gfCBcCi0JIEdETUFfRFJWX0NBUF9GTEFHXzFfTk9OX0NPTlRJR1VPVVNfQlVGRkVSUykKJiM0MzsJIEdETUFfRFJWX0NBUF9GTEFHXzFfTk9OX0NPTlRJR1VPVVNfQlVGRkVSUyB8IFwKJiM0MzsJIEdETUFfRFJWX0NBUF9GTEFHXzFfU0VMRl9SRUNPVkVSWV9PTl9RVUVVRV9SRVNJWkVfRkFJTFVSRSkKIAogI2RlZmluZSBHRE1BX0RSVl9DQVBfRkxBR1MyIDAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFuYS9tYW5hLmggYi9pbmNsdWRlL25ldC9tYW5hL21hbmEuaAppbmRleCA4M2I3ZWZmNDY0NmVhLi5jYzkzNmFlOTdhMDMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tYW5hL21hbmEuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9tYW5hL21hbmEuaApAQCAtMTAyLDcgJiM0MzsxMDIsNyBAQCBzdHJ1Y3QgbWFuYV9zdGF0c19yeCB7CiAJdTY0IHBrdF9sZW4wX2VycjsKIAl1NjQgY29hbGVzY2VkX2NxZVtNQU5BX0NRRV9DT0FMX1BLVFNfOCAtIDFdOwogCXN0cnVjdCB1NjRfc3RhdHNfc3luYyBzeW5jcDsKLX07CiYjNDM7fSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogCiBzdHJ1Y3QgbWFuYV9zdGF0c190eCB7CiAJdTY0IHBhY2tldHM7CkBAIC0xMTcsNyAmIzQzOzExNyw3IEBAIHN0cnVjdCBtYW5hX3N0YXRzX3R4IHsKIAl1NjQgY3N1bV9wYXJ0aWFsOwogCXU2NCBtYW5hX21hcF9lcnI7CiAJc3RydWN0IHU2NF9zdGF0c19zeW5jIHN5bmNwOwotfTsKJiM0Mzt9IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CiAKIHN0cnVjdCBtYW5hX3R4cSB7CiAJc3RydWN0IGdkbWFfcXVldWUgKmdkbWFfc3E7CkBAIC0xNDMsNyAmIzQzOzE0MywxMiBAQCBzdHJ1Y3QgbWFuYV90eHEgewogCiAJYm9vbCBuYXBpX2luaXRpYWxpemVkOwogCi0Jc3RydWN0IG1hbmFfc3RhdHNfdHggc3RhdHM7CiYjNDM7CXUzMiByZXNldF9nZW47CiYjNDM7CiYjNDM7CS8qIFN1cHByZXNzIGNvbXBsZXRpb24gd2FrZXVwcyBvbiB0aGUgcmVwbGFjZW1lbnQmIzM5O3MgbmV0ZGV2IHF1ZXVlLiAqLwomIzQzOwlib29sIHJldGlyaW5nOwomIzQzOwomIzQzOwlzdHJ1Y3QgbWFuYV9zdGF0c190eCAqc3RhdHM7CiB9OwogCiAvKiBza2IgZGF0YSBhbmQgZnJhZ3MgZG1hIG1hcHBpbmdzICovCkBAIC00MDUsNyAmIzQzOzQxMCwxNiBAQCBzdHJ1Y3QgbWFuYV9yeHEgewogCiAJdTMyIGJ1Zl9pbmRleDsKIAotCXN0cnVjdCBtYW5hX3N0YXRzX3J4IHN0YXRzOwomIzQzOwkvKiBQb3J0LW93bmVkIGxpdmUgc2xvdDsgdXNlIG1hbmFfcnhxX3N0YXRzKCkgdG8gc2VsZWN0IHRoZSB3cml0ZXImIzM5O3MKJiM0MzsJICogc2xvdC4KJiM0MzsJICovCiYjNDM7CXN0cnVjdCBtYW5hX3N0YXRzX3J4ICpzdGF0czsKJiM0MzsKJiM0MzsJLyogU2V0IHVuZGVyIFJUTkwgYmVmb3JlIGFub3RoZXIgcXVldWUgdGFrZXMgb3ZlciB0aGlzIGluZGV4LiAqLwomIzQzOwlib29sIHJldGlyaW5nOwomIzQzOwomIzQzOwkvKiBGb2xkZWQgdW5kZXIgUlROTCBhZnRlciBkcmFpbi1zdGF0IHdyaXRlcnMgcXVpZXNjZS4gKi8KJiM0MzsJc3RydWN0IG1hbmFfc3RhdHNfcnggZHJhaW5fc3RhdHM7CiAKIAlzdHJ1Y3QgYnBmX3Byb2cgX19yY3UgKmJwZl9wcm9nOwogCXN0cnVjdCB4ZHBfcnhxX2luZm8geGRwX3J4cTsKQEAgLTUzNyw2ICYjNDM7NTUxLDEyIEBAIHN0cnVjdCBtYW5hX2NvbnRleHQgewogCXU4IGJtX2hvc3Rtb2RlOwogCiAJc3RydWN0IG1hbmFfZXRodG9vbF9oY19zdGF0cyBoY19zdGF0czsKJiM0MzsKJiM0MzsJLyogR2VuZXJhdGlvbiBvZiBzdWNjZXNzZnVsIHJlc2V0cyBpc3N1ZWQgYnkgbWFuYV9kcmFpbl90eHFzKCksIHVuZGVyCiYjNDM7CSAqIFJUTkwuCiYjNDM7CSAqLwomIzQzOwl1MzIgcmVzZXRfZ2VuOwomIzQzOwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpwZXJfcG9ydF9xdWV1ZV9yZXNldF93cTsKIAkvKiBXb3JrcXVldWUgZm9yIHF1ZXJ5aW5nIGhhcmR3YXJlIHN0YXRzICovCiAJc3RydWN0IGRlbGF5ZWRfd29yayBnZl9zdGF0c193b3JrOwpAQCAtNTU5LDcgJiM0Mzs1NzksOSBAQCBzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgewogCiAJdTggbWFjX2FkZHJbRVRIX0FMRU5dOwogCiYjNDM7CS8qIFBvcnQtb3duZWQgRVEgcG9vbDogbWF4X3F1ZXVlcyBzbG90cywgbnVtX2VxcyBwb3B1bGF0ZWQuICovCiAJc3RydWN0IG1hbmFfZXEgKmVxczsKJiM0MzsJdW5zaWduZWQgaW50IG51bV9lcXM7CiAJc3RydWN0IGRlbnRyeSAqbWFuYV9lcXNfZGVidWdmczsKIAogCWVudW0gVFJJX1NUQVRFIHJzc19zdGF0ZTsKQEAgLTYwMCw5ICYjNDM7NjIyLDIxIEBAIHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCB7CiAJdW5zaWduZWQgaW50IG1heF9xdWV1ZXM7CiAJdW5zaWduZWQgaW50IG51bV9xdWV1ZXM7CiAKJiM0MzsJLyogUG9ydC1saWZldGltZSBhcnJheXMgd2l0aCBtYXhfcXVldWVzIHNsb3RzLiBMaXZlIFJYIHF1ZXVlcyB3cml0ZQomIzQzOwkgKiByeHFfc3RhdHNbXTsgdGVhcmRvd24gYW5kIHJvbGxiYWNrIGZvbGQgZHJhaW5fc3RhdHMgaW50bwomIzQzOwkgKiByeHFfc3RhdHNfcmV0W10gdW5kZXIgUlROTC4gUmVhZGVycyBzdW0gYm90aC4KJiM0MzsJICovCiYjNDM7CXN0cnVjdCBtYW5hX3N0YXRzX3J4ICpyeHFfc3RhdHM7CiYjNDM7CXN0cnVjdCBtYW5hX3N0YXRzX3J4ICpyeHFfc3RhdHNfcmV0OwomIzQzOwlzdHJ1Y3QgbWFuYV9zdGF0c190eCAqdHhxX3N0YXRzOwomIzQzOwogCXVuc2lnbmVkIGludCByeF9xdWV1ZV9zaXplOwogCXVuc2lnbmVkIGludCB0eF9xdWV1ZV9zaXplOwogCiYjNDM7CS8qIE1UVSB1c2VkIHRvIHNpemUgUlggYnVmZmVycywgaW5kZXBlbmRlbnQgb2YgbmRldi0mZ3Q7bXR1IGR1cmluZyBhIHN3YXAuCiYjNDM7CSAqLwomIzQzOwlpbnQgY29uZmlndXJlZF9tdHU7CiYjNDM7CiAJbWFuYV9oYW5kbGVfdCBwb3J0X2hhbmRsZTsKIAltYW5hX2hhbmRsZV90IHBmX2ZpbHRlcl9oYW5kbGU7CiAKQEAgLTYxMCwxMiAmIzQzOzY0NCwxNyBAQCBzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgewogCXN0cnVjdCBtdXRleCB2cG9ydF9tdXRleDsKIAlpbnQgdnBvcnRfdXNlX2NvdW50OwogCi0JLyogU2V0IGJ5IG1hbmFfc2V0X2NoYW5uZWxzKCkgdW5kZXIgdnBvcnRfbXV0ZXggdG8gYmxvY2sgUkRNQQotCSAqIGZyb20gZ3JhYmJpbmcgdGhlIHZwb3J0IGR1cmluZyB0aGUgZGV0YWNoL2F0dGFjaCB3aW5kb3cuCi0JICogQ2hlY2tlZCBieSBtYW5hX2NmZ192cG9ydCgpIHdoZW4gY2FsbGVkIGZyb20gdGhlIFJETUEgcGF0aC4KLQkgKi8KJiM0MzsJLyogRXhjbHVkZSBSRE1BIGR1cmluZyByZWNvbmZpZ3VyYXRpb247IHByb3RlY3RlZCBieSB2cG9ydF9tdXRleC4gKi8KIAlib29sIGNoYW5uZWxfY2hhbmdpbmc7CiAKJiM0MzsJLyogQ2FsbGVyIG11c3QgY2xvc2UgdGhlIHBvcnQgYWZ0ZXIgcmVsZWFzaW5nIHRoZSB1bnB1Ymxpc2hlZCBzZXQuICovCiYjNDM7CWJvb2wgcHVibGlzaF9kZWFkX2VuZDsKJiM0MzsKJiM0MzsJLyogQ2FycmllciBsb3dlcmVkIGJ5IGZhaWxlZCByb2xsYmFjazsgY2xlYXJlZCBvbiByZW9wZW4gb3IgYSBsaW5rCiYjNDM7CSAqIGV2ZW50LgomIzQzOwkgKi8KJiM0MzsJYm9vbCBjYXJyaWVyX2ZvcmNlZF9vZmY7CiYjNDM7CiAJLyogTmV0IHNoYXBlciBoYW5kbGUqLwogCXN0cnVjdCBuZXRfc2hhcGVyX2hhbmRsZSBoYW5kbGU7CiAKQEAgLTY2MSw2ICYjNDM7NzAwLDI3IEBAIHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCB7CiAJdTMyIHN0ZWVyX2NxZV9jb2FsZXNjaW5nOwogfTsKIAomIzQzO3N0cnVjdCBtYW5hX3FzZXQgewomIzQzOwlzdHJ1Y3QgbWFuYV90eF9xcAkqKnR4X3FwOwomIzQzOwlzdHJ1Y3QgbWFuYV9yeHEJCSoqcnhxczsKJiM0MzsKJiM0MzsJdTMyCQkJKmluZGlyX3RhYmxlOwomIzQzOwl1MzIJCQlpbmRpcl90YWJsZV9zejsKJiM0MzsJbWFuYV9oYW5kbGVfdAkJKnJ4b2JqX3RhYmxlOwomIzQzOwltYW5hX2hhbmRsZV90CQlkZWZhdWx0X3J4b2JqOwomIzQzOwomIzQzOwl1bnNpZ25lZCBpbnQJCW51bV9xdWV1ZXM7CiYjNDM7CXVuc2lnbmVkIGludAkJcnhfcXVldWVfc2l6ZTsKJiM0MzsJdW5zaWduZWQgaW50CQl0eF9xdWV1ZV9zaXplOwomIzQzOwl1MzIJCQlwcml2X2ZsYWdzOwomIzQzOwomIzQzOwlpbnQJCQltdHU7CiYjNDM7CXN0cnVjdCBicGZfcHJvZwkJKmJwZl9wcm9nOwomIzQzOwomIzQzOwkvKiBOb3RpZnkgdGhlIGNvcmUgb25seSBhZnRlciB0aGlzIHNldCBpcyBwdWJsaXNoZWQuICovCiYjNDM7CWJvb2wJCQlyeGZoX2luZGlyX2xvc3Q7CiYjNDM7fTsKJiM0MzsKIG5ldGRldl90eF90IG1hbmFfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7CiBpbnQgbWFuYV9jb25maWdfcnNzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYWMsIGVudW0gVFJJX1NUQVRFIHJ4LAogCQkgICAgYm9vbCB1cGRhdGVfaGFzaCwgYm9vbCB1cGRhdGVfdGFiKTsKQEAgLTY3MCw2ICYjNDM7NzMwLDMzIEBAIGludCBtYW5hX2FsbG9jX3F1ZXVlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7CiBpbnQgbWFuYV9hdHRhY2goc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOwogaW50IG1hbmFfZGV0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBib29sIGZyb21fY2xvc2UpOwogCiYjNDM7c3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICoKJiM0MzttYW5hX3FzZXRfc2NyYXRjaF9hbGxvYyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyk7CiYjNDM7dm9pZCBtYW5hX3FzZXRfc2NyYXRjaF9mcmVlKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqc2NyYXRjaCk7CiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgbWFuYV9zdGF0c19yeCAqbWFuYV9yeHFfc3RhdHMoc3RydWN0IG1hbmFfcnhxICpyeHEpCiYjNDM7ewomIzQzOwlyZXR1cm4gUkVBRF9PTkNFKHJ4cS0mZ3Q7cmV0aXJpbmcpID8gJmFtcDtyeHEtJmd0O2RyYWluX3N0YXRzIDogcnhxLSZndDtzdGF0czsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG1hbmFfYWxsb2NfcXNldChzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywKJiM0MzsJCSAgICBzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKnNjcmF0Y2gsCiYjNDM7CQkgICAgdW5zaWduZWQgaW50IHJ4X3F1ZXVlX3NpemUsIHVuc2lnbmVkIGludCB0eF9xdWV1ZV9zaXplLAomIzQzOwkJICAgIHUzMiBwcml2X2ZsYWdzLCBpbnQgbXR1LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLAomIzQzOwkJICAgIHN0cnVjdCBtYW5hX3FzZXQgKm91dCk7CiYjNDM7aW50IG1hbmFfc3BsaXRfcXNldChzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywKJiM0MzsJCSAgICBzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKnNjcmF0Y2gsIHVuc2lnbmVkIGludCBuZXdfY291bnQsCiYjNDM7CQkgICAgc3RydWN0IG1hbmFfcXNldCAqb3V0X25ldywgc3RydWN0IG1hbmFfcXNldCAqb3V0X3RhaWwpOwomIzQzO3ZvaWQgbWFuYV9kaXNjYXJkX3NwbGl0KHN0cnVjdCBtYW5hX3FzZXQgKm5ld3EsIHN0cnVjdCBtYW5hX3FzZXQgKnRhaWxxKTsKJiM0MztpbnQgbWFuYV9ncm93X3FzZXQoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsCiYjNDM7CQkgICBzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKnNjcmF0Y2gsIHVuc2lnbmVkIGludCBuZXdfY291bnQsCiYjNDM7CQkgICBzdHJ1Y3QgbWFuYV9xc2V0ICpvdXRfbmV3LCBzdHJ1Y3QgbWFuYV9xc2V0ICpvdXRfZnJlc2gpOwomIzQzO3ZvaWQgbWFuYV9kaXNjYXJkX2dyb3coc3RydWN0IG1hbmFfcXNldCAqbmV3cSk7CiYjNDM7aW50IG1hbmFfcHVibGlzaF9xc2V0KHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLCBzdHJ1Y3QgbWFuYV9xc2V0ICpuZXdxLAomIzQzOwkJICAgICAgc3RydWN0IG1hbmFfcXNldCAqb3V0X29sZCk7CiYjNDM7dm9pZCBtYW5hX3B1Ymxpc2hfY2xvc2VfaWZfbmVlZGVkKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKTsKJiM0Mzt2b2lkIG1hbmFfZnJlZV9xc2V0KHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqc2NyYXRjaCwgc3RydWN0IG1hbmFfcXNldCAqcXNldCk7CiYjNDM7dm9pZCBtYW5hX3FzZXRfZGVidWdmc19wdWJsaXNoKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKTsKJiM0MzsKIHZvaWQgbWFuYV9kaW1fY2hhbmdlKHN0cnVjdCBtYW5hX2NxICpjcSwgYm9vbCBlbmFibGUpOwogCiBpbnQgbWFuYV9wcm9iZShzdHJ1Y3QgZ2RtYV9kZXYgKmdkLCBib29sIHJlc3VtaW5nKTsKQEAgLTY4NSw2ICYjNDM7NzcyLDggQEAgdTMyIG1hbmFfcnVuX3hkcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IG1hbmFfcnhxICpyeHEsCiAJCSBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdm9pZCAqYnVmX3ZhLCB1aW50IHBrdF9sZW4pOwogc3RydWN0IGJwZl9wcm9nICptYW5hX3hkcF9nZXQoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpOwogdm9pZCBtYW5hX2Nobl9zZXR4ZHAoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7CiYjNDM7c3RydWN0IGJwZl9wcm9nICptYW5hX2Nobl94ZHBfcGVlayhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyk7CiYjNDM7dm9pZCBtYW5hX2Nobl94ZHBfcmVsZWFzZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHVuc2lnbmVkIGludCBudW1fcXVldWVzKTsKIGludCBtYW5hX2JwZihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IG5ldGRldl9icGYgKmJwZik7CiBpbnQgbWFuYV9xdWVyeV9nZl9zdGF0cyhzdHJ1Y3QgbWFuYV9jb250ZXh0ICphYyk7CiBpbnQgbWFuYV9xdWVyeV9saW5rX2NmZyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0Nzc0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGtlZXBpbmcgdGhlIGd1aWRlbGluZXMgaW4gbWluZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMgYmVmb3JlIEkgZXZlbiBzdGFydCBjb25zaWRlcmluZyBhIGZ1enppbmcgc3RyYXRlZ3kuCgpGaXJzdCwgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGNoYW5nZWQuIFRoZSBwYXRjaCB0b3VjaGVzOiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9icGYuY2AsIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNgLCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9ldGh0b29sLmNgLCBhbmQgYSBjb3VwbGUgb2YgaW5jbHVkZSBmaWxlczogYGluY2x1ZGUvbmV0L21hbmEvZ2RtYS5oYCwgYGluY2x1ZGUvbmV0L21hbmEvbWFuYS5oYC4gVGhlICYjMzQ7bWFuYSYjMzQ7IHBhcnQgaXMgd2hhdCBqdW1wcyBvdXQuIEkgZG9uJiMzOTt0IGluc3RhbnRseSByZWNvZ25pemUgaXQuCgpTbywgd2hhdCBleGFjdGx5ICppcyogJiMzNDttYW5hJiMzNDs/IFRpbWUgdG8gZ28gaHVudGluZyBpbiB0aGUgS2NvbmZpZyBmaWxlcyBvciB0aGUgY29kZSBpdHNlbGYgdG8gZ2V0IGNvbnRleHQuIE9rYXksIGFmdGVyIGEgcXVpY2sgbG9vaywgaXQgc2VlbXMgbGlrZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvYCBpcyB0aGUgZGlyZWN0b3J5IGZvciB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgRXRoZXJuZXQgZHJpdmVyLiBOb3cgd2UmIzM5O3JlIGdldHRpbmcgc29tZXdoZXJlLgoKVGhlIG5leHQgY3JpdGljYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyLCBtZWFuaW5nIGl0ICpyZXF1aXJlcyogYSBzcGVjaWZpYyBQQ0llIGNhcmQgb3IgaXMgZW11bGF0ZWQgaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50PyBJIG5lZWQgdG8gY2hlY2sgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcyBhbmQgYmUgdmVyeSBhd2FyZSBvZiBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuIExldCBtZSBxdWlja2x5IHJlZnJlc2ggdGhhdCBzZWN0aW9uLi4uIEFoYSEgU2VjdGlvbiAyIHN0YXRlcyB0aGF0IHdlIHNob3VsZCBza2lwIHRoaW5ncyBsaWtlIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIHRoYXQgbmVlZCBzcGVjaWFsaXplZCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KClRoZXJlZm9yZSwgdGhlIGtleSBwb2ludCBpcyB3aGV0aGVyIE1pY3Jvc29mdCBNQU5BIGlzIGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlciB0aGF0IG5lZWRzIHBoeXNpY2FsIGhhcmR3YXJlIG9yIGNhbiBpdCBydW4gaW4gYSBtb3JlIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQ/IE5vdywgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBrZXJuZWwgZG9jdW1lbnRhdGlvbiB0byBzZWUgd2hldGhlciBNQU5BIHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIHRvIG9wZXJhdGUuIEkmIzM5O2xsIHNlYXJjaCB0aGUga2VybmVsIHJlcG8gZm9yIE1BTkEgS2NvbmZpZyBzZXR0aW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUlDUk9TT0ZUX01BTkEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnPTE2PWlmIE5FVF9WRU5ET1JfTUlDUk9TT0ZUXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZy0xNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnOjE4OmNvbmZpZyBNSUNST1NPRlRfTUFOQVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWctMTktXHR0cmlzdGF0ZSBcJiMzNDtNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU2NTcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgS2NvbmZpZyBmaWxlOgoKKipEaXZpbmcgaW50byB0aGUgTWljcm9zb2Z0IEV0aGVybmV0IERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gYGRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnYC4gUmlnaHQsIHRoaXMgS2NvbmZpZyBmaWxlIHdpbGwgZGVmaW5lIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBNaWNyb3NvZnQgRXRoZXJuZXQgZHJpdmVycy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSB1c3VhbCBzdHJ1Y3R1cmU6IGZlYXR1cmVzLCBoYXJkd2FyZSBzdXBwb3J0LCBtYXliZSBzb21lIGRlYnVnZ2luZyBvcHRpb25zLCBhbmQgZGVwZW5kZW5jaWVzLiBHaXZlbiB0aGF0IGl0JiMzOTtzIE1pY3Jvc29mdCwgSSYjMzk7bSBjdXJpb3VzIHRvIHNlZSBpZiB0aGV5JiMzOTt2ZSBnb3Qgc29tZSBwcm9wcmlldGFyeSBvcHRpb25zIGluIGhlcmUuIFByb2JhYmx5IHNwZWNpZmljIGhhcmR3YXJlIHN1cHBvcnQsIGdpdmVuIHRoZSBmb2N1cy4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGZvciB0aGUgdmFyaW91cyBgY29uZmlnYCBzeW1ib2xzLCB0aGVpciBhc3NvY2lhdGVkIGRlc2NyaXB0aW9ucywgYW5kIGFueSBgZGVwZW5kcyBvbmAgb3IgYHNlbGVjdGAgc3RhdGVtZW50cyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBkaWZmZXJlbnQgZmVhdHVyZXMuIEdvdHRhIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRlZmF1bHQgdmFsdWVzIGFuZCBoZWxwIHRleHQ7IHRoYXQmIzM5O2xsIHRlbGwgbWUgYSBsb3QgYWJvdXQgdGhlaXIgZGVzaWduIHBoaWxvc29waHkgYW5kIGludGVuZGVkIHVzZSBjYXNlcy4gSSYjMzk7bGwgYWxzbyBiZSBzZWFyY2hpbmcgZm9yIGhvdyB0aGV5IGhhbmRsZSBkaWZmZXJlbnQgbmV0d29yayBjb250cm9sbGVycyBhbmQgaW50ZXJmYWNlcy4gQW55IG1lbnRpb25zIG9mIHNwZWNpZmljIE1BQyBhZGRyZXNzZXMgb3IgUEhZcz8gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGNvZGUgaXMgZGVzaWduZWQgdG8gaW50ZXJmYWNlIHdpdGggc29tZSBwcm9wcmlldGFyeSBoYXJkd2FyZS4gTGV0JiMzOTtzIGdldCByZWFkaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjXG4gICAyOlx0IyBNaWNyb3NvZnQgQXp1cmUgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxuICAgMzpcdCNcbiAgIDQ6XHRcbiAgIDU6XHRjb25maWcgTkVUX1ZFTkRPUl9NSUNST1NPRlRcbiAgIDY6XHRcdGJvb2wgXCYjMzQ7TWljcm9zb2Z0IE5ldHdvcmsgRGV2aWNlc1wmIzM0O1xuICAgNzpcdFx0ZGVmYXVsdCB5XG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGRldmljZSBiZWxvbmdpbmcgdG8gdGhpcyBjbGFzcywgc2F5IFkuXG4gIDEwOlx0XG4gIDExOlx0XHQgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24mIzM5O3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxuICAxMjpcdFx0ICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgdGhlXG4gIDEzOlx0XHQgIHF1ZXN0aW9uIGFib3V0IE1pY3Jvc29mdCBuZXR3b3JrIGRldmljZXMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmVcbiAgMTQ6XHRcdCAgYXNrZWQgZm9yIHlvdXIgc3BlY2lmaWMgZGV2aWNlIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb24uXG4gIDE1Olx0XG4gIDE2Olx0aWYgTkVUX1ZFTkRPUl9NSUNST1NPRlRcbiAgMTc6XHRcbiAgMTg6XHRjb25maWcgTUlDUk9TT0ZUX01BTkFcbiAgMTk6XHRcdHRyaXN0YXRlIFwmIzM0O01pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIHN1cHBvcnRcJiMzNDtcbiAgMjA6XHRcdGRlcGVuZHMgb24gUENJX01TSVxuICAyMTpcdFx0ZGVwZW5kcyBvbiBYODZfNjQgfHwgKEFSTTY0IFx1MDAyNlx1MDAyNiAhQ1BVX0JJR19FTkRJQU4pXG4gIDIyOlx0XHRkZXBlbmRzIG9uIFBDSV9IWVBFUlZcbiAgMjM6XHRcdHNlbGVjdCBBVVhJTElBUllfQlVTXG4gIDI0Olx0XHRzZWxlY3QgRElNTElCXG4gIDI1Olx0XHRzZWxlY3QgUEFHRV9QT09MXG4gIDI2Olx0XHRzZWxlY3QgTkVUX1NIQVBFUlxuICAyNzpcdFx0aGVscFxuICAyODpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKS5cbiAgMjk6XHRcdCAgU28gZmFyLCB0aGUgZHJpdmVyIGlzIG9ubHkgc3VwcG9ydGVkIG9uIFg4Nl82NC5cbiAgMzA6XHRcbiAgMzE6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cbiAgMzI6XHRcdCAgVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtYW5hLlxuICAzMzpcdFxuICAzNDpcdGVuZGlmICNORVRfVkVORE9SX01JQ1JPU09GVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2Mzk3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTUlDUk9TT0ZUX01BTkEgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gdGhlIGluaXRpYWwgaW5mb3JtYXRpb24sIGl0IHNlZW1zIGBNSUNST1NPRlRfTUFOQWAgaXMgZnVuZGFtZW50YWxseSB0aWVkIHRvIHRoZSBBenVyZSBlbnZpcm9ubWVudCwgc3BlY2lmaWNhbGx5IHRoZSBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGl0c2VsZi4gVGhpcyBjb25uZWN0aW9uIGlzIGV4Y2x1c2l2ZWx5IHdpdGhpbiBBenVyZSBWaXJ0dWFsIE1hY2hpbmVzIChWTXMpLiBUaGUgZGVwZW5kZW5jeSBvbiBgUENJX0hZUEVSVmAgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB0aGUgTUFOQSBmdW5jdGlvbmFsaXR5IEkmIzM5O20gaW50ZXJlc3RlZCBpbiB1c2VzIGEgUENJIGJ1cywgZWl0aGVyIHNpbXVsYXRlZCB0aHJvdWdoIEh5cGVyLVYgdmlydHVhbGl6YXRpb24gb3IgZGlyZWN0bHkgZnJvbSBhIHBoeXNpY2FsIE1BTkEgTklDLgoKTXkgbmV4dCBpbW1lZGlhdGUgc3RlcCB3aWxsIGJlIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIE1BTkEgcHJvYmluZyBtZWNoYW5pc21zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpZGVudGlmaWVzIHRoZSBidXMgaXQmIzM5O3MgcnVubmluZyBvbiwgaG93IGl0IGludGVyYWN0cyB3aXRoIGl0LCBhbmQgd2hhdCBkaWFnbm9zdGljIGRhdGEgaXQgcHVsbHMgd2hlbiBydW5uaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBidXMgaW50ZXJhY3Rpb24gaXMsIHdoaWNoIGlzIGtleSB0byBzZWVpbmcgaWYgaXQmIzM5O3MgYSBwaHlzaWNhbCBvciBlbXVsYXRlZCBQQ0kgYnVzLiBUaGlzIHNob3VsZCBjbGFyaWZ5IGhvdyB0aGUgc29mdHdhcmUgZGV0ZXJtaW5lcyBpdHMgb3BlcmF0aW9uYWwgY29udGV4dCBhbmQgY29uZmlybSB0aGUgZXhwZWN0ZWQgZGVwZW5kZW5jeSBwYXRoLiBUaGlzIHdpbGwgbGVhZCB0byBhIHZlcnkgcXVpY2sgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtJiMzOTtzIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYW5hX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM9MTc5PXN0YXRpYyBpbnQgbWFuYV9nZF9xdWVyeV9tYXhfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTI4Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jOjI4MzpcdC8qIENhcCB0byB0aGUgc2FtZSBsaW1pdCB1c2VkIGJ5IG1hbmFfcHJvYmUoKSBmb3IgcG9ydCBpbnN0YW50aWF0aW9uLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjg0LVx0ICogc28gTVNJLVggYW5kIHF1ZXVlIGJ1ZGdldGluZyBtYXRjaGVzIHRoZSBhY3R1YWwgcG9ydCBjb3VudC5cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYz0yNDk5PXN0YXRpYyBpbnQgbWFuYV9nZF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNTU0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM6MjU1NTpcdGVyciA9IG1hbmFfcHJvYmUoXHUwMDI2Z2MtXHUwMDNlbWFuYSwgZmFsc2UpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjU1Ni1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjU5My1cdCAqIEhhcmR3YXJlIGNvdWxkIGJlIGluIHJlY292ZXJ5IG1vZGUgYW5kIHRoZSBIV0MgcmV0dXJucyBUSU1FRE9VVCBvclxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM6MjU5NDpcdCAqIEVQUk9UTyBmcm9tIG1hbmFfZ2Rfc2V0dXAoKSwgbWFuYV9wcm9iZSgpIG9yIG1hbmFfcmRtYV9wcm9iZSgpLCBvclxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjU5NS1cdCAqIHdlIHJlY2VpdmVkIGEgaGFyZHdhcmUgcmVzZXQgZXZlbnQgb3ZlciBIV0MgaW50ZXJydXB0LiBJbiB0aGlzIGNhc2UsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM9MjY1OT1pbnQgbWFuYV9nZF9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjY2Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jOjI2Njg6XHRlcnIgPSBtYW5hX3Byb2JlKFx1MDAyNmdjLVx1MDAzZW1hbmEsIHRydWUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjY2OS1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jPTQ3ODY9aW50IG1hbmFfZGV0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBib29sIGZyb21fY2xvc2UpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTQ4MjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM6NDgyMTpzdGF0aWMgaW50IG1hbmFfcHJvYmVfcG9ydChzdHJ1Y3QgbWFuYV9jb250ZXh0ICphYywgaW50IHBvcnRfaWR4LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTQ4MjItXHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKipuZGV2X3N0b3JhZ2UpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jPTUwNjk9c3RhdGljIHZvaWQgbWFuYV9nZl9zdGF0c193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy01MDkxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jOjUwOTI6aW50IG1hbmFfcHJvYmUoc3RydWN0IGdkbWFfZGV2ICpnZCwgYm9vbCByZXN1bWluZylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy01MDkzLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtNTE2Ni1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYWMtXHUwMDNlbnVtX3BvcnRzOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jOjUxNjc6XHRcdFx0ZXJyID0gbWFuYV9wcm9iZV9wb3J0KGFjLCBpLCBcdTAwMjZhYy1cdTAwM2Vwb3J0c1tpXSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtNTE2OC1cdFx0XHQvKiBMb2cgdGhlIHBvcnQgZm9yIHdoaWNoIHRoZSBwcm9iZSBmYWlsZWQsIHN0b3AgcHJvYmluZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NjgxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6CgoqKk1BTkEgSW52ZXN0aWdhdGlvbjogRGV2aWNlIElEcyBhbmQgYG1hbmFfZ2RfcHJvYmVgKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiB0aGlzIE1BTkEgaXNzdWUuIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCB0aGUgY29yZSBjb25uZWN0aW9uOiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBkZXZpY2UgaXRzZWxmIGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgcmVjb2duaXplZC4gTXkgaW5pdGlhbCBhcHByb2FjaCBpcyB0byBpbW1lZGlhdGVseSBjaGVjayB0aGUgYG1hbmFfZ2RfcHJvYmVgIGZ1bmN0aW9uLiBUaGlzIGlzIHVzdWFsbHkgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgTUFOQSBkcml2ZXIgdG8gaW5pdGlhbGl6ZSwgc28gYW55IGlzc3VlcyBkdXJpbmcgZWFybHkgZGV2aWNlIGRldGVjdGlvbiB3b3VsZCBsaWtlbHkgc3VyZmFjZSBoZXJlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGlzIHRyeWluZyB0byBpZGVudGlmeSB0aGUgZGV2aWNlLgoKVGhlbiwgSSYjMzk7bSBnb2luZyB0byBjcm9zcy1yZWZlcmVuY2UgdGhhdCB3aXRoIHRoZSBQQ0kgZGV2aWNlIElEIHRhYmxlLiBUaGlzIGlzIHRoZSBjcnVjaWFsIGxvb2t1cCB0YWJsZSB3aGVyZSB0aGUgZHJpdmVyIGlkZW50aWZpZXMgdGhlIHNwZWNpZmljIGhhcmR3YXJlIGJhc2VkIG9uIGl0cyBWZW5kb3IgSUQgYW5kIERldmljZSBJRC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZSBkZXZpY2UmIzM5O3MgSUQgaXMgY29ycmVjdGx5IGxpc3RlZCBhbmQgdGhhdCB0aGUgZHJpdmVyIGtub3dzIHdoYXQgdG8gZG8gd2l0aCBpdC4gQW55IG1pc2NvbmZpZ3VyYXRpb24gb3IgbWlzc2luZyBlbnRyaWVzIGluIHRoaXMgdGFibGUgY2FuIGxlYWQgdG8gYWxsIHNvcnRzIG9mIHJlY29nbml0aW9uIGZhaWx1cmVzLiBFc3NlbnRpYWxseSwgSSYjMzk7bSBsb29raW5nIGZvciBhIG1pc21hdGNoIG9yIG9taXNzaW9uLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGRlYnVnZ2luZyBzdGVwLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGUgY29ycmVjdCBJRHMgYXJlIHByb2dyYW1tZWQsIG9yIGF0IGxlYXN0IHRoYXQgdGhlIGRldmljZSBJRHMgYWxpZ24gd2l0aCB0aGUgZHJpdmVyJiMzOTtzIGV4cGVjdGF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX2RldmljZV9pZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jPTI0OTQ9c3RhdGljIGJvb2wgbWFuYV9pc19wZih1bnNpZ25lZCBzaG9ydCBkZXZfaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjQ5OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jOjI0OTk6c3RhdGljIGludCBtYW5hX2dkX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjUwMC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM9MjY5OD1zdGF0aWMgaW50IG1hbmFfc3Jpb3ZfY29uZmlndXJlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnVtdmZzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTI3MTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYzoyNzE5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBtYW5hX2lkX3RhYmxlW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNzIwLVx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUlDUk9TT0ZULCBNQU5BX1BGX0RFVklDRV9JRCkgfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgzMTcKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBtYW5hX2lkX3RhYmxlYCoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBQQ0kgSURzIHdpdGhpbiB0aGUgYG1hbmFfaWRfdGFibGVgLiBJJiMzOTttIHRoaW5raW5nLCB0aGlzIHRhYmxlIGxpa2VseSBjb250YWlucyBjcnVjaWFsIGluZm9ybWF0aW9uIGZvciBpZGVudGlmeWluZyBhbmQgbWFuYWdpbmcgaGFyZHdhcmUgY29tcG9uZW50cywgc3BlY2lmaWNhbGx5IHRob3NlIHV0aWxpemluZyBQQ0kgaW50ZXJmYWNlcy4gVGhlIGdvYWwgaGVyZSBpcyBwcm9iYWJseSB0byBlc3RhYmxpc2ggYSBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIGRldmljZSBJRHMgYW5kIHJlbGV2YW50IGRyaXZlcnMgb3IgY29uZmlndXJhdGlvbnMgd2l0aGluIHRoZSBzeXN0ZW0uIFVuZGVyc3RhbmRpbmcgdGhpcyBtYXBwaW5nIGlzIGZ1bmRhbWVudGFsIGZvciBkZXZpY2UgZGV0ZWN0aW9uLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQgb3ZlcmFsbCBzeXN0ZW0gZnVuY3Rpb25hbGl0eS4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBzdHJ1Y3R1cmUgYW5kIGNvbnRlbnRzIHRvIGdyYXNwIGhvdyB0aG9zZSBJRHMgYXJlIHVzZWQsIGFuZCB3aGF0IGluc2lnaHRzIHRoZXkgbWlnaHQgcHJvdmlkZS4gUGVyaGFwcyB0aGlzIHRhYmxlIGlzIGZvciBhIHNwZWNpZmljIHN5c3RlbSBvciBhcmNoaXRlY3R1cmUuIEkgd2lsbCBpbnZlc3RpZ2F0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjcxNTpcdFxuMjcxNjpcdFx0cmV0dXJuIGVyciA/IGVyciA6IG51bXZmcztcbjI3MTc6XHR9XG4yNzE4Olx0XG4yNzE5Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG1hbmFfaWRfdGFibGVbXSA9IHtcbjI3MjA6XHRcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01JQ1JPU09GVCwgTUFOQV9QRl9ERVZJQ0VfSUQpIH0sXG4yNzIxOlx0XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NSUNST1NPRlQsIE1BTkFfUEYyX0RFVklDRV9JRCkgfSxcbjI3MjI6XHRcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01JQ1JPU09GVCwgTUFOQV9WRl9ERVZJQ0VfSUQpIH0sXG4yNzIzOlx0XHR7IH1cbjI3MjQ6XHR9O1xuMjcyNTpcdFxuMjcyNjpcdHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBtYW5hX2RyaXZlciA9IHtcbjI3Mjc6XHRcdC5uYW1lXHRcdD0gXCYjMzQ7bWFuYVwmIzM0OyxcbjI3Mjg6XHRcdC5pZF90YWJsZVx0PSBtYW5hX2lkX3RhYmxlLFxuMjcyOTpcdFx0LnByb2JlXHRcdD0gbWFuYV9nZF9wcm9iZSxcbjI3MzA6XHRcdC5yZW1vdmVcdFx0PSBtYW5hX2dkX3JlbW92ZSxcbjI3MzE6XHRcdC5zdXNwZW5kXHQ9IG1hbmFfZ2Rfc3VzcGVuZCxcbjI3MzI6XHRcdC5yZXN1bWVcdFx0PSBtYW5hX2dkX3Jlc3VtZSxcbjI3MzM6XHRcdC5zaHV0ZG93blx0PSBtYW5hX2dkX3NodXRkb3duLFxuMjczNDpcdFx0LnNyaW92X2NvbmZpZ3VyZSA9IG1hbmFfc3Jpb3ZfY29uZmlndXJlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODg5NAoJCQkJCQkJb3V0cHV0OiAxMTMKCQkJCQkJCXRob3VnaHRzOiA1MzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIERlY2lzaW9uIGZvciBNaWNyb3NvZnQgTUFOQSBEcml2ZXIgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBhbmFseXNpcyBpbmRpY2F0ZXMgdGhhdCB0aGlzIGNvbW1pdCBtb2RpZmllcyBjb2RlIGV4Y2x1c2l2ZWx5IHdpdGhpbiB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgZHJpdmVyLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIGFyZSBsb2NhdGVkIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2AgZGlyZWN0b3J5IGFuZCByZWxhdGVkIGBpbmNsdWRlL25ldC9tYW5hL2AgaGVhZGVycy4KClRoZSBjcnV4IG9mIHRoZSBtYXR0ZXIgaXMgdGhlIE1BTkEgZHJpdmVyJiMzOTtzIGhhcmR3YXJlIGRlcGVuZGVuY3kuIEl0IHJlcXVpcmVzIHNwZWNpZmljIE1pY3Jvc29mdCBBenVyZSBNQU5BIGhhcmR3YXJlLCBpbmNsdWRpbmcgcG90ZW50aWFsbHkgR0RNQSBoYXJkd2FyZSBhbmQgSHlwZXItViBQQ0kgZGV2aWNlcy4gVGhlIGtpY2tlcj8gVGhlc2UgZGV2aWNlcyBhcmUgKm5vdCogZW11bGF0ZWQgaW4gdGhlIHN0YW5kYXJkIFFFTVUgb3IgR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB0aGF0IHN5emthbGxlciB1dGlsaXplcyBmb3IgZnV6emluZy4gVGhpcyBtZWFucyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyDigJMgdGhlIHBhY2tldCB0cmFuc21pc3Npb24vcmVjZXB0aW9uIHJvdXRpbmVzLCBYRFAgaGFuZGxpbmcsIGV0aHRvb2wgaW50ZWdyYXRpb24sIGFuZCBxdWV1ZSBtYW5hZ2VtZW50IOKAkyBhcmUsIGZvciBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXMsIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSB3aXRoaW4gb3VyIGZ1enppbmcgc2V0dXAuIFRoZXJlJiMzOTtzIHNpbXBseSBubyB3YXkgdG8gdHJpZ2dlciB0aG9zZSBjb2RlIHBhdGhzIGluIGEgbWVhbmluZ2Z1bCB3YXkuCgpHaXZlbiB0aGlzLCBhY2NvcmRpbmcgdG8gdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLCB0aGlzIGlzIGEgY2xlYXIgY2FzZSBmb3Igc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gQ29uc2VxdWVudGx5LCBJJiMzOTtsbCBzZXQgYEZvY3VzU3ltYm9sc2AgdG8gbnVsbCwgb3IgZW1wdHksIGFuZCBhbHNvIGBFbmFibGVDb25maWdzYCB0byBudWxsLCBvciBlbXB0eSBhcyB3ZWxsLCBhcyB0aGVyZSYjMzk7cyBubyBuZWVkIHRvIHRhcmdldCBzcGVjaWZpYyBzeW1ib2xzIG9yIGNvbmZpZ3VyYXRpb25zIGhlcmUuCgpOb3csIGxldCYjMzk7cyBnZXQgdGhvc2UgcmVzdWx0cyB1cGRhdGVkLiBDYWxsaW5nIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvIGFuZCBpbmNsdWRlL25ldC9tYW5hLykuIFRoaXMgZHJpdmVyIHRhcmdldHMgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlL1NtYXJ0TklDcyBvbiBNaWNyb3NvZnQgQXp1cmUgLyBIeXBlci1WIGVudmlyb25tZW50cyBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuIEFzIHN1Y2gsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hLyBhbmQgaW5jbHVkZS9uZXQvbWFuYS8pLiBUaGlzIGRyaXZlciB0YXJnZXRzIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZS9TbWFydE5JQ3Mgb24gTWljcm9zb2Z0IEF6dXJlIC8gSHlwZXItViBlbnZpcm9ubWVudHMgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiBBcyBzdWNoLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6NDc6MjQuOTY0NDA2NzM3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5Nzk5NzU1MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS8gYW5kIGluY2x1ZGUvbmV0L21hbmEvKS4gVGhpcyBkcml2ZXIgdGFyZ2V0cyB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUvU21hcnROSUNzIG9uIE1pY3Jvc29mdCBBenVyZSAvIEh5cGVyLVYgZW52aXJvbm1lbnRzIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4gQXMgc3VjaCwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6NDc6MjQuOTY0NDExMzE3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQyNjM5NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmY2NmMmI1YTQ0YTg3ZjczZTBiOTAxMjQ1Zjg3YWI0NTM4YmI0MGRmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDkgMjI6NDc6MjQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9icGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfYnBmLmNcXG5pbmRleCA3MGJiOGM5ZGMzNDEzLi4zYWNlYzFiYjAyYTM0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfYnBmLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2JwZi5jXFxuQEAgLTU5LDYgKzU5LDExIEBAIGludCBtYW5hX3hkcF94bWl0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgbiwgc3RydWN0IHhkcF9mcmFtZSAqKmZyYW1lcyxcXG4gXFx0aWYgKHVubGlrZWx5KCFhcGMtXFx1MDAzZXBvcnRfaXNfdXApKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuK1xcdC8qIFBhaXIgd2l0aCB0aGUgc21wX3dtYigpIGluIG1hbmFfcHVibGlzaF9xc2V0KCkgYmVmb3JlIHJlYWRpbmcgcXVldWVcXG4rXFx0ICogc3RhdGUuXFxuK1xcdCAqL1xcbitcXHRzbXBfcm1iKCk7XFxuK1xcbiBcXHRxX2lkeCA9IHNtcF9wcm9jZXNzb3JfaWQoKSAlIG5kZXYtXFx1MDAzZXJlYWxfbnVtX3R4X3F1ZXVlcztcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuOyBpKyspIHtcXG5AQCAtNjgsNyArNzMsNyBAQCBpbnQgbWFuYV94ZHBfeG1pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IG4sIHN0cnVjdCB4ZHBfZnJhbWUgKipmcmFtZXMsXFxuIFxcdFxcdGNvdW50Kys7XFxuIFxcdH1cXG4gXFxuLVxcdHR4X3N0YXRzID0gXFx1MDAyNmFwYy1cXHUwMDNldHhfcXBbcV9pZHhdLVxcdTAwM2V0eHEuc3RhdHM7XFxuK1xcdHR4X3N0YXRzID0gYXBjLVxcdTAwM2V0eF9xcFtxX2lkeF0tXFx1MDAzZXR4cS5zdGF0cztcXG4gXFxuIFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnR4X3N0YXRzLVxcdTAwM2VzeW5jcCk7XFxuIFxcdHR4X3N0YXRzLVxcdTAwM2V4ZHBfeG1pdCArPSBjb3VudDtcXG5AQCAtOTUsNyArMTAwLDcgQEAgdTMyIG1hbmFfcnVuX3hkcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IG1hbmFfcnhxICpyeHEsXFxuIFxcbiBcXHRhY3QgPSBicGZfcHJvZ19ydW5feGRwKHByb2csIHhkcCk7XFxuIFxcbi1cXHRyeF9zdGF0cyA9IFxcdTAwMjZyeHEtXFx1MDAzZXN0YXRzO1xcbitcXHRyeF9zdGF0cyA9IG1hbmFfcnhxX3N0YXRzKHJ4cSk7XFxuIFxcbiBcXHRzd2l0Y2ggKGFjdCkge1xcbiBcXHRjYXNlIFhEUF9QQVNTOlxcbkBAIC0xNzIsNiArMTc3LDggQEAgc3RhdGljIGludCBtYW5hX3hkcF9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4gXFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuIFxcdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqc2NyYXRjaDtcXG4rXFx0c3RydWN0IG1hbmFfcXNldCBuZXdxLCBvbGRxO1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nO1xcbiBcXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYztcXG4gXFx0aW50IGVycjtcXG5AQCAtMTkxLDQ2ICsxOTgsNDQgQEAgc3RhdGljIGludCBtYW5hX3hkcF9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXHR9XFxuIFxcbi1cXHQvKiBPbmUgcmVmY250IG9mIHRoZSBwcm9nIGlzIGhvbGQgYnkgdGhlIGNhbGxlciBhbHJlYWR5LCBzb1xcbi1cXHQgKiBkb24ndCBpbmNyZWFzZSByZWZjbnQgZm9yIHRoaXMgb25lLlxcbi1cXHQgKi9cXG4tXFx0YXBjLVxcdTAwM2VicGZfcHJvZyA9IHByb2c7XFxuLVxcbiBcXHRpZiAoYXBjLVxcdTAwM2Vwb3J0X2lzX3VwKSB7XFxuLVxcdFxcdC8qIFJlLWNyZWF0ZSByeHEncyBhZnRlciB4ZHAgcHJvZyB3YXMgbG9hZGVkIG9yIHVubG9hZGVkLlxcbi1cXHRcXHQgKiBFeDogcmUgY3JlYXRlIHJ4cSdzIHRvIHN3aXRjaCBmcm9tIGZ1bGwgcGFnZXMgdG8gc21hbGxlclxcbi1cXHRcXHQgKiBzaXplIHBhZ2UgZnJhZ21lbnRzIHdoZW4geGRwIHByb2cgaXMgdW5sb2FkZWQgYW5kXFxuLVxcdFxcdCAqIHZpY2UtdmVyc2EuXFxuLVxcdFxcdCAqL1xcbi1cXG4tXFx0XFx0LyogUHJlLWFsbG9jYXRlIGJ1ZmZlcnMgdG8gcHJldmVudCBmYWlsdXJlIGluIG1hbmFfYXR0YWNoICovXFxuLVxcdFxcdGVyciA9IG1hbmFfcHJlX2FsbG9jX3J4YnVmcyhhcGMsIG5kZXYtXFx1MDAzZW10dSwgYXBjLVxcdTAwM2VudW1fcXVldWVzKTtcXG4tXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRzY3JhdGNoID0gbWFuYV9xc2V0X3NjcmF0Y2hfYWxsb2MoYXBjKTtcXG4rXFx0XFx0aWYgKCFzY3JhdGNoKSB7XFxuIFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuLVxcdFxcdFxcdFxcdFxcdCAgIFxcXCJYRFA6IEluc3VmZmljaWVudCBtZW1vcnkgZm9yIHR4L3J4IHJlLWNvbmZpZ1xcXCIpO1xcbi1cXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRcXHRcXHRcXHQgICBcXFwiWERQOiBJbnN1ZmZpY2llbnQgbWVtb3J5IGZvciByZS1jb25maWdcXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGVyciA9IG1hbmFfZGV0YWNoKG5kZXYsIGZhbHNlKTtcXG4rXFx0XFx0ZXJyID0gbWFuYV9hbGxvY19xc2V0KGFwYywgc2NyYXRjaCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgYXBjLVxcdTAwM2VyeF9xdWV1ZV9zaXplLCBhcGMtXFx1MDAzZXR4X3F1ZXVlX3NpemUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGFwYy1cXHUwMDNlcHJpdl9mbGFncywgYXBjLVxcdTAwM2Vjb25maWd1cmVkX210dSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgcHJvZywgXFx1MDAyNm5ld3EpO1xcbiBcXHRcXHRpZiAoZXJyKSB7XFxuLVxcdFxcdFxcdG5ldGRldl9lcnIobmRldixcXG4tXFx0XFx0XFx0XFx0ICAgXFxcIm1hbmFfZGV0YWNoIGZhaWxlZCBhdCB4ZHAgc2V0OiAlZFxcXFxuXFxcIiwgZXJyKTtcXG4gXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgXFxcIlhEUDogUmUtY29uZmlnIGZhaWxlZCBhdCBkZXRhY2hcXFwiKTtcXG4tXFx0XFx0XFx0Z290byBlcnJfZGVhbGxvY19yeGJ1ZmZzO1xcbitcXHRcXHRcXHRcXHRcXHQgICBcXFwiWERQOiBSZS1jb25maWcgZmFpbGVkIGF0IGFsbG9jXFxcIik7XFxuK1xcdFxcdFxcdG1hbmFfcXNldF9zY3JhdGNoX2ZyZWUoc2NyYXRjaCk7XFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGVyciA9IG1hbmFfYXR0YWNoKG5kZXYpO1xcbitcXHRcXHRlcnIgPSBtYW5hX3B1Ymxpc2hfcXNldChhcGMsIFxcdTAwMjZuZXdxLCBcXHUwMDI2b2xkcSk7XFxuIFxcdFxcdGlmIChlcnIpIHtcXG4tXFx0XFx0XFx0bmV0ZGV2X2VycihuZGV2LFxcbi1cXHRcXHRcXHRcXHQgICBcXFwibWFuYV9hdHRhY2ggZmFpbGVkIGF0IHhkcCBzZXQ6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbiBcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBcXFwiWERQOiBSZS1jb25maWcgZmFpbGVkIGF0IGF0dGFjaFxcXCIpO1xcbi1cXHRcXHRcXHRnb3RvIGVycl9kZWFsbG9jX3J4YnVmZnM7XFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcXCJYRFA6IFJlLWNvbmZpZyBmYWlsZWQgYXQgcHVibGlzaFxcXCIpO1xcbitcXHRcXHRcXHRtYW5hX2ZyZWVfcXNldChzY3JhdGNoLCBcXHUwMDI2bmV3cSk7XFxuK1xcdFxcdFxcdC8qIEZyZWUgdGhlIHF1ZXVlcyBiZWZvcmUgY2xvc2luZyB0aGVpciBzaGFyZWQgRVEgcG9vbC5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdG1hbmFfcHVibGlzaF9jbG9zZV9pZl9uZWVkZWQoYXBjKTtcXG4rXFx0XFx0XFx0bWFuYV9xc2V0X3NjcmF0Y2hfZnJlZShzY3JhdGNoKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0bWFuYV9jaG5fc2V0eGRwKGFwYywgcHJvZyk7XFxuLVxcdFxcdG1hbmFfcHJlX2RlYWxsb2NfcnhidWZzKGFwYyk7XFxuK1xcdFxcdG1hbmFfZnJlZV9xc2V0KHNjcmF0Y2gsIFxcdTAwMjZvbGRxKTtcXG4rXFx0XFx0bWFuYV9xc2V0X3NjcmF0Y2hfZnJlZShzY3JhdGNoKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogVXNlIHRoZSBjYWxsZXIncyBwcm9ncmFtIHJlZmVyZW5jZTsgbWFuYV9vcGVuKCkgaW5zdGFsbHMgaXRcXG4rXFx0XFx0ICogb24gcXVldWVzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0YXBjLVxcdTAwM2VicGZfcHJvZyA9IHByb2c7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChvbGRfcHJvZylcXG5AQCAtMjQzLDExICsyNDgsNiBAQCBzdGF0aWMgaW50IG1hbmFfeGRwX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbiBcXHRcXHRuZGV2LVxcdTAwM2VtYXhfbXR1ID0gZ2MtXFx1MDAzZWFkYXB0ZXJfbXR1IC0gRVRIX0hMRU47XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4tXFxuLWVycl9kZWFsbG9jX3J4YnVmZnM6XFxuLVxcdGFwYy1cXHUwMDNlYnBmX3Byb2cgPSBvbGRfcHJvZztcXG4tXFx0bWFuYV9wcmVfZGVhbGxvY19yeGJ1ZnMoYXBjKTtcXG4tXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4gaW50IG1hbmFfYnBmKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgbmV0ZGV2X2JwZiAqYnBmKVxcbkBAIC0yNjIsMyArMjYyLDI3IEBAIGludCBtYW5hX2JwZihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IG5ldGRldl9icGYgKmJwZilcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXHR9XFxuIH1cXG4rXFxuK3N0cnVjdCBicGZfcHJvZyAqbWFuYV9jaG5feGRwX3BlZWsoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpXFxuK3tcXG4rXFx0QVNTRVJUX1JUTkwoKTtcXG4rXFxuK1xcdGlmICghYXBjLVxcdTAwM2VyeHFzIHx8ICFhcGMtXFx1MDAzZXJ4cXNbMF0pXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0cmV0dXJuIHJ0bmxfZGVyZWZlcmVuY2UoYXBjLVxcdTAwM2VyeHFzWzBdLVxcdTAwM2VicGZfcHJvZyk7XFxuK31cXG4rXFxuKy8qIEtlZXAgdGhlIHBlci1xdWV1ZSBwcm9ncmFtIHBvaW50ZXJzIHVudGlsIFJYIHBvbGxpbmcgc3RvcHMuICovXFxuK3ZvaWQgbWFuYV9jaG5feGRwX3JlbGVhc2Uoc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1bnNpZ25lZCBpbnQgbnVtX3F1ZXVlcylcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgaTtcXG4rXFxuK1xcdEFTU0VSVF9SVE5MKCk7XFxuK1xcbitcXHRpZiAoIXByb2cpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fcXVldWVzOyBpKyspXFxuK1xcdFxcdGJwZl9wcm9nX3B1dChwcm9nKTtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNcXG5pbmRleCA3YTFhYzg1M2UzYWJjLi4yOWY1NGY5MWNiMDA5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uY1xcbkBAIC05MCw2ICs5MCwxNyBAQCBzdGF0aWMgaW50IG1hbmFfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gXFx0c21wX3dtYigpO1xcbiBcXG4gXFx0bmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKG5kZXYpO1xcbitcXG4rXFx0LyogVW5kbyBhIGZvcmNlZCBjYXJyaWVyLW9mZiB1bmxlc3MgYSBkaXNjb25uZWN0IGlzIHBlbmRpbmcgYmVoaW5kIFJUTkwuXFxuK1xcdCAqL1xcbitcXHRpZiAoYXBjLVxcdTAwM2VjYXJyaWVyX2ZvcmNlZF9vZmYpIHtcXG4rXFx0XFx0dTMyIGV2ID0gUkVBRF9PTkNFKGFwYy1cXHUwMDNlYWMtXFx1MDAzZWxpbmtfZXZlbnQpO1xcbitcXG4rXFx0XFx0YXBjLVxcdTAwM2VjYXJyaWVyX2ZvcmNlZF9vZmYgPSBmYWxzZTtcXG4rXFx0XFx0aWYgKGV2ICE9IEhXQ19EQVRBX0hXX0xJTktfRElTQ09OTkVDVClcXG4rXFx0XFx0XFx0bmV0aWZfY2Fycmllcl9vbihuZGV2KTtcXG4rXFx0fVxcbitcXG4gXFx0bmV0ZGV2X2RiZyhuZGV2LCBcXFwiJXMgc3VjY2Vzc2Z1bFxcXFxuXFxcIiwgX19mdW5jX18pO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC0xMDYsNiArMTE3LDcgQEAgc3RhdGljIGludCBtYW5hX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiBcXG4gc3RhdGljIHZvaWQgbWFuYV9saW5rX3N0YXRlX2hhbmRsZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXFxuIHtcXG4rXFx0c3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGM7XFxuIFxcdHN0cnVjdCBtYW5hX2NvbnRleHQgKmFjO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcXG4gXFx0dTMyIGxpbmtfZXZlbnQ7XFxuQEAgLTEzMSw2ICsxNDMsOSBAQCBzdGF0aWMgdm9pZCBtYW5hX2xpbmtfc3RhdGVfaGFuZGxlKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcXG4gXFx0XFx0aWYgKCFuZGV2KVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuK1xcdFxcdGFwYyA9IG5ldGRldl9wcml2KG5kZXYpO1xcbitcXHRcXHRhcGMtXFx1MDAzZWNhcnJpZXJfZm9yY2VkX29mZiA9IGZhbHNlO1xcbitcXG4gXFx0XFx0aWYgKGxpbmtfdXApIHtcXG4gXFx0XFx0XFx0bmV0aWZfY2Fycmllcl9vbihuZGV2KTtcXG4gXFxuQEAgLTMxMiw4ICszMjcsOCBAQCBzdGF0aWMgdm9pZCBtYW5hX3Blcl9wb3J0X3F1ZXVlX3Jlc2V0X3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcbiBcXHRydG5sX2xvY2soKTtcXG4gXFxuLVxcdC8qIEJsb2NrIFJETUEgZnJvbSBncmFiYmluZyB0aGUgdnBvcnQgZHVyaW5nIHRoZSBkZXRhY2gvYXR0YWNoXFxuLVxcdCAqIHdpbmRvdywgc2FtZSBhcyBtYW5hX3NldF9jaGFubmVscygpLlxcbitcXHQvKiBFeGNsdWRlIFJETUEgYWNyb3NzIGRldGFjaC9hdHRhY2g7IFJUTkwgc2VyaWFsaXplcyBjaGFubmVsX2NoYW5naW5nXFxuK1xcdCAqIHdyaXRlcnMuXFxuIFxcdCAqL1xcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZhcGMtXFx1MDAzZXZwb3J0X211dGV4KTtcXG4gXFx0YXBjLVxcdTAwM2VjaGFubmVsX2NoYW5naW5nID0gdHJ1ZTtcXG5AQCAtMzY2LDEzICszODEsMjIgQEAgbmV0ZGV2X3R4X3QgbWFuYV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiBcXHRpZiAodW5saWtlbHkoIWFwYy1cXHUwMDNlcG9ydF9pc191cCkpXFxuIFxcdFxcdGdvdG8gdHhfZHJvcDtcXG4gXFxuK1xcdC8qIFBhaXIgd2l0aCBtYW5hX3B1Ymxpc2hfcXNldCgpJ3MgcHJlLWdhdGUgc21wX3dtYigpOiBvYnNlcnZlIHF1ZXVlXFxuK1xcdCAqIGZpZWxkcyBhZnRlciByZWFkaW5nIHBvcnRfaXNfdXAuXFxuK1xcdCAqL1xcbitcXHRzbXBfcm1iKCk7XFxuK1xcbitcXHQvKiBSZXRpcmluZyBSWFFzIG1heSB1c2UgaW5kaWNlcyBiZXlvbmQgdGhlIGxpdmUgcXVldWUgY291bnQuICovXFxuK1xcdGlmICh1bmxpa2VseSh0eHFfaWR4IFxcdTAwM2U9IGFwYy1cXHUwMDNlbnVtX3F1ZXVlcykpXFxuK1xcdFxcdGdvdG8gdHhfZHJvcF9jb3VudDtcXG4rXFxuIFxcdGlmIChza2JfY293X2hlYWQoc2tiLCBNQU5BX0hFQURST09NKSlcXG4gXFx0XFx0Z290byB0eF9kcm9wX2NvdW50O1xcbiBcXG4gXFx0dHhxID0gXFx1MDAyNmFwYy1cXHUwMDNldHhfcXBbdHhxX2lkeF0tXFx1MDAzZXR4cTtcXG4gXFx0Z2RtYV9zcSA9IHR4cS1cXHUwMDNlZ2RtYV9zcTtcXG4gXFx0Y3EgPSBcXHUwMDI2YXBjLVxcdTAwM2V0eF9xcFt0eHFfaWR4XS1cXHUwMDNldHhfY3E7XFxuLVxcdHR4X3N0YXRzID0gXFx1MDAyNnR4cS1cXHUwMDNlc3RhdHM7XFxuK1xcdHR4X3N0YXRzID0gdHhxLVxcdTAwM2VzdGF0cztcXG4gXFxuIFxcdEJVSUxEX0JVR19PTihNQVhfVFhfV1FFX1NHTF9FTlRSSUVTICE9IE1BTkFfTUFYX1RYX1dRRV9TR0xfRU5UUklFUyk7XFxuIFxcdGlmIChNQVhfU0tCX0ZSQUdTICsgMiBcXHUwMDNlIE1BWF9UWF9XUUVfU0dMX0VOVFJJRVMgXFx1MDAyNlxcdTAwMjZcXG5AQCAtNTUxLDcgKzU3NSw3IEBAIG5ldGRldl90eF90IG1hbmFfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gXFx0LyogUG9wdWxhdGVkIHRoZSBwYWNrZXQgYW5kIGJ5dGVzIGNvdW50ZXJzIGJhc2VkIG9uIHBvc3QgR1NPIHBhY2tldFxcbiBcXHQgKiBjYWxjdWxhdGlvbnNcXG4gXFx0ICovXFxuLVxcdHR4X3N0YXRzID0gXFx1MDAyNnR4cS1cXHUwMDNlc3RhdHM7XFxuK1xcdHR4X3N0YXRzID0gdHhxLVxcdTAwM2VzdGF0cztcXG4gXFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2dHhfc3RhdHMtXFx1MDAzZXN5bmNwKTtcXG4gXFx0dHhfc3RhdHMtXFx1MDAzZXBhY2tldHMgKz0gbnVtX2dzb19zZWc7XFxuIFxcdHR4X3N0YXRzLVxcdTAwM2VieXRlcyArPSBsZW4gKyAoKG51bV9nc29fc2VnIC0gMSkgKiBnc29faHMpO1xcbkBAIC01OTcsMTUgKzYyMSwxNSBAQCBzdGF0aWMgdm9pZCBtYW5hX2dldF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3QpXFxuIHtcXG4gXFx0c3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4tXFx0dW5zaWduZWQgaW50IG51bV9xdWV1ZXMgPSBhcGMtXFx1MDAzZW51bV9xdWV1ZXM7XFxuIFxcdHN0cnVjdCBtYW5hX3N0YXRzX3J4ICpyeF9zdGF0cztcXG4gXFx0c3RydWN0IG1hbmFfc3RhdHNfdHggKnR4X3N0YXRzO1xcbitcXHR1bnNpZ25lZCBpbnQgbnVtX3F1ZXVlcztcXG4gXFx0dW5zaWduZWQgaW50IHN0YXJ0O1xcbiBcXHR1NjQgcGFja2V0cywgYnl0ZXM7XFxuIFxcdGludCBxO1xcbiBcXG4tXFx0aWYgKCFhcGMtXFx1MDAzZXBvcnRfaXNfdXApXFxuLVxcdFxcdHJldHVybjtcXG4rXFx0LyogUmVwb3J0IGV2ZW4gd2hpbGUgZG93bjsgZGV2X2dldF9zdGF0cygpIHplcm9lcyBpdHMgb3V0cHV0LiAqL1xcbitcXHRudW1fcXVldWVzID0gYXBjLVxcdTAwM2VtYXhfcXVldWVzO1xcbiBcXG4gXFx0bmV0ZGV2X3N0YXRzX3RvX3N0YXRzNjQoc3QsIFxcdTAwMjZuZGV2LVxcdTAwM2VzdGF0cyk7XFxuIFxcbkBAIC02MTUsNyArNjM5LDE4IEBAIHN0YXRpYyB2b2lkIG1hbmFfZ2V0X3N0YXRzNjQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuIFxcdHN0LVxcdTAwM2VyeF9taXNzZWRfZXJyb3JzID0gYXBjLVxcdTAwM2VhYy1cXHUwMDNlaGNfc3RhdHMuaGNfcnhfZGlzY2FyZHNfbm9fd3FlO1xcbiBcXG4gXFx0Zm9yIChxID0gMDsgcSBcXHUwMDNjIG51bV9xdWV1ZXM7IHErKykge1xcbi1cXHRcXHRyeF9zdGF0cyA9IFxcdTAwMjZhcGMtXFx1MDAzZXJ4cXNbcV0tXFx1MDAzZXN0YXRzO1xcbitcXHRcXHRyeF9zdGF0cyA9IFxcdTAwMjZhcGMtXFx1MDAzZXJ4cV9zdGF0c1txXTtcXG4rXFxuK1xcdFxcdGRvIHtcXG4rXFx0XFx0XFx0c3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oXFx1MDAyNnJ4X3N0YXRzLVxcdTAwM2VzeW5jcCk7XFxuK1xcdFxcdFxcdHBhY2tldHMgPSByeF9zdGF0cy1cXHUwMDNlcGFja2V0cztcXG4rXFx0XFx0XFx0Ynl0ZXMgPSByeF9zdGF0cy1cXHUwMDNlYnl0ZXM7XFxuK1xcdFxcdH0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeShcXHUwMDI2cnhfc3RhdHMtXFx1MDAzZXN5bmNwLCBzdGFydCkpO1xcbitcXG4rXFx0XFx0c3QtXFx1MDAzZXJ4X3BhY2tldHMgKz0gcGFja2V0cztcXG4rXFx0XFx0c3QtXFx1MDAzZXJ4X2J5dGVzICs9IGJ5dGVzO1xcbitcXG4rXFx0XFx0cnhfc3RhdHMgPSBcXHUwMDI2YXBjLVxcdTAwM2VyeHFfc3RhdHNfcmV0W3FdO1xcbiBcXG4gXFx0XFx0ZG8ge1xcbiBcXHRcXHRcXHRzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbihcXHUwMDI2cnhfc3RhdHMtXFx1MDAzZXN5bmNwKTtcXG5AQCAtNjI4LDcgKzY2Myw3IEBAIHN0YXRpYyB2b2lkIG1hbmFfZ2V0X3N0YXRzNjQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuIFxcdH1cXG4gXFxuIFxcdGZvciAocSA9IDA7IHEgXFx1MDAzYyBudW1fcXVldWVzOyBxKyspIHtcXG4tXFx0XFx0dHhfc3RhdHMgPSBcXHUwMDI2YXBjLVxcdTAwM2V0eF9xcFtxXS1cXHUwMDNldHhxLnN0YXRzO1xcbitcXHRcXHR0eF9zdGF0cyA9IFxcdTAwMjZhcGMtXFx1MDAzZXR4cV9zdGF0c1txXTtcXG4gXFxuIFxcdFxcdGRvIHtcXG4gXFx0XFx0XFx0c3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oXFx1MDAyNnR4X3N0YXRzLVxcdTAwM2VzeW5jcCk7XFxuQEAgLTg3OCwzMiArOTEzLDM3IEBAIGludCBtYW5hX3ByZV9hbGxvY19yeGJ1ZnMoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICptcGMsIGludCBuZXdfbXR1LCBpbnQgbnVtX3F1XFxuIHN0YXRpYyBpbnQgbWFuYV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgbmV3X210dSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKm1wYyA9IG5ldGRldl9wcml2KG5kZXYpO1xcbi1cXHR1bnNpZ25lZCBpbnQgb2xkX210dSA9IG5kZXYtXFx1MDAzZW10dTtcXG4rXFx0c3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICpzY3JhdGNoO1xcbitcXHRzdHJ1Y3QgbWFuYV9xc2V0IG5ld3EsIG9sZHE7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHQvKiBQcmUtYWxsb2NhdGUgYnVmZmVycyB0byBwcmV2ZW50IGZhaWx1cmUgaW4gbWFuYV9hdHRhY2ggbGF0ZXIgKi9cXG4tXFx0ZXJyID0gbWFuYV9wcmVfYWxsb2NfcnhidWZzKG1wYywgbmV3X210dSwgbXBjLVxcdTAwM2VudW1fcXVldWVzKTtcXG4tXFx0aWYgKGVycikge1xcbi1cXHRcXHRuZXRkZXZfZXJyKG5kZXYsIFxcXCJJbnN1ZmZpY2llbnQgbWVtb3J5IGZvciBuZXcgTVRVXFxcXG5cXFwiKTtcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0aWYgKCFtcGMtXFx1MDAzZXBvcnRfaXNfdXApIHtcXG4rXFx0XFx0bXBjLVxcdTAwM2Vjb25maWd1cmVkX210dSA9IG5ld19tdHU7XFxuK1xcdFxcdFdSSVRFX09OQ0UobmRldi1cXHUwMDNlbXR1LCBuZXdfbXR1KTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuLVxcdGVyciA9IG1hbmFfZGV0YWNoKG5kZXYsIGZhbHNlKTtcXG4tXFx0aWYgKGVycikge1xcbi1cXHRcXHRuZXRkZXZfZXJyKG5kZXYsIFxcXCJtYW5hX2RldGFjaCBmYWlsZWQ6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFx0fVxcbitcXHRzY3JhdGNoID0gbWFuYV9xc2V0X3NjcmF0Y2hfYWxsb2MobXBjKTtcXG4rXFx0aWYgKCFzY3JhdGNoKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuLVxcdFdSSVRFX09OQ0UobmRldi1cXHUwMDNlbXR1LCBuZXdfbXR1KTtcXG4rXFx0ZXJyID0gbWFuYV9hbGxvY19xc2V0KG1wYywgc2NyYXRjaCwgbXBjLVxcdTAwM2VyeF9xdWV1ZV9zaXplLFxcbitcXHRcXHRcXHQgICAgICBtcGMtXFx1MDAzZXR4X3F1ZXVlX3NpemUsIG1wYy1cXHUwMDNlcHJpdl9mbGFncywgbmV3X210dSxcXG4rXFx0XFx0XFx0ICAgICAgbXBjLVxcdTAwM2VicGZfcHJvZywgXFx1MDAyNm5ld3EpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGZyZWVfc2NyYXRjaDtcXG4gXFxuLVxcdGVyciA9IG1hbmFfYXR0YWNoKG5kZXYpO1xcbitcXHRlcnIgPSBtYW5hX3B1Ymxpc2hfcXNldChtcGMsIFxcdTAwMjZuZXdxLCBcXHUwMDI2b2xkcSk7XFxuIFxcdGlmIChlcnIpIHtcXG4tXFx0XFx0bmV0ZGV2X2VycihuZGV2LCBcXFwibWFuYV9hdHRhY2ggZmFpbGVkOiAlZFxcXFxuXFxcIiwgZXJyKTtcXG4tXFx0XFx0V1JJVEVfT05DRShuZGV2LVxcdTAwM2VtdHUsIG9sZF9tdHUpO1xcbitcXHRcXHRtYW5hX2ZyZWVfcXNldChzY3JhdGNoLCBcXHUwMDI2bmV3cSk7XFxuK1xcdFxcdGdvdG8gZnJlZV9zY3JhdGNoO1xcbiBcXHR9XFxuIFxcbi1vdXQ6XFxuLVxcdG1hbmFfcHJlX2RlYWxsb2NfcnhidWZzKG1wYyk7XFxuK1xcdG1hbmFfZnJlZV9xc2V0KHNjcmF0Y2gsIFxcdTAwMjZvbGRxKTtcXG4rXFxuK2ZyZWVfc2NyYXRjaDpcXG4rXFx0bWFuYV9wdWJsaXNoX2Nsb3NlX2lmX25lZWRlZChtcGMpO1xcbitcXHRtYW5hX3FzZXRfc2NyYXRjaF9mcmVlKHNjcmF0Y2gpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbkBAIC0xMDM2LDYgKzEwNzYsMTA1IEBAIHN0YXRpYyB2b2lkIG1hbmFfY2xlYW51cF9wb3J0X2NvbnRleHQoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpXFxuIFxcdGFwYy1cXHUwMDNlcnhxcyA9IE5VTEw7XFxuIH1cXG4gXFxuKy8qIFBvcnQgbGlmZXRpbWUgcHJlc2VydmVzIGNvdW50ZXJzIGFjcm9zcyBxdWV1ZSByZXBsYWNlbWVudC4gKi9cXG4rc3RhdGljIGludCBtYW5hX2FsbG9jX3F1ZXVlX3N0YXRzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBpO1xcbitcXG4rXFx0YXBjLVxcdTAwM2VyeHFfc3RhdHMgPSBrY2FsbG9jKGFwYy1cXHUwMDNlbWF4X3F1ZXVlcywgc2l6ZW9mKCphcGMtXFx1MDAzZXJ4cV9zdGF0cyksXFxuK1xcdFxcdFxcdFxcdCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFhcGMtXFx1MDAzZXJ4cV9zdGF0cylcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRhcGMtXFx1MDAzZXJ4cV9zdGF0c19yZXQgPSBrY2FsbG9jKGFwYy1cXHUwMDNlbWF4X3F1ZXVlcyxcXG4rXFx0XFx0XFx0XFx0ICAgICBzaXplb2YoKmFwYy1cXHUwMDNlcnhxX3N0YXRzX3JldCksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWFwYy1cXHUwMDNlcnhxX3N0YXRzX3JldClcXG4rXFx0XFx0Z290byBmcmVlX3J4cV9zdGF0cztcXG4rXFxuK1xcdGFwYy1cXHUwMDNldHhxX3N0YXRzID0ga2NhbGxvYyhhcGMtXFx1MDAzZW1heF9xdWV1ZXMsIHNpemVvZigqYXBjLVxcdTAwM2V0eHFfc3RhdHMpLFxcbitcXHRcXHRcXHRcXHQgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghYXBjLVxcdTAwM2V0eHFfc3RhdHMpXFxuK1xcdFxcdGdvdG8gZnJlZV9yeHFfc3RhdHNfcmV0O1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFwYy1cXHUwMDNlbWF4X3F1ZXVlczsgaSsrKSB7XFxuK1xcdFxcdHU2NF9zdGF0c19pbml0KFxcdTAwMjZhcGMtXFx1MDAzZXJ4cV9zdGF0c1tpXS5zeW5jcCk7XFxuK1xcdFxcdHU2NF9zdGF0c19pbml0KFxcdTAwMjZhcGMtXFx1MDAzZXJ4cV9zdGF0c19yZXRbaV0uc3luY3ApO1xcbitcXHRcXHR1NjRfc3RhdHNfaW5pdChcXHUwMDI2YXBjLVxcdTAwM2V0eHFfc3RhdHNbaV0uc3luY3ApO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2ZyZWVfcnhxX3N0YXRzX3JldDpcXG4rXFx0a2ZyZWUoYXBjLVxcdTAwM2VyeHFfc3RhdHNfcmV0KTtcXG4rXFx0YXBjLVxcdTAwM2VyeHFfc3RhdHNfcmV0ID0gTlVMTDtcXG4rZnJlZV9yeHFfc3RhdHM6XFxuK1xcdGtmcmVlKGFwYy1cXHUwMDNlcnhxX3N0YXRzKTtcXG4rXFx0YXBjLVxcdTAwM2VyeHFfc3RhdHMgPSBOVUxMO1xcbitcXHRyZXR1cm4gLUVOT01FTTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbWFuYV9mcmVlX3F1ZXVlX3N0YXRzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKVxcbit7XFxuK1xcdGtmcmVlKGFwYy1cXHUwMDNlcnhxX3N0YXRzKTtcXG4rXFx0YXBjLVxcdTAwM2VyeHFfc3RhdHMgPSBOVUxMO1xcbitcXHRrZnJlZShhcGMtXFx1MDAzZXJ4cV9zdGF0c19yZXQpO1xcbitcXHRhcGMtXFx1MDAzZXJ4cV9zdGF0c19yZXQgPSBOVUxMO1xcbitcXHRrZnJlZShhcGMtXFx1MDAzZXR4cV9zdGF0cyk7XFxuK1xcdGFwYy1cXHUwMDNldHhxX3N0YXRzID0gTlVMTDtcXG4rfVxcbitcXG4rLyogRm9sZCB1bmRlciBSVE5MIGFmdGVyIGRyYWluX3N0YXRzIHdyaXRlcnMgcXVpZXNjZS4gQ2xlYXIgZHJhaW5fc3RhdHMgdG9cXG4rICogcHJldmVudCBkb3VibGUgY291bnRpbmcgb24gcm9sbGJhY2suXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBtYW5hX2ZvbGRfcnhxX3N0YXRzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgbWFuYV9yeHEgKnJ4cSlcXG4re1xcbitcXHRzdHJ1Y3QgbWFuYV9zdGF0c19yeCAqc3JjID0gXFx1MDAyNnJ4cS1cXHUwMDNlZHJhaW5fc3RhdHM7XFxuK1xcdHN0cnVjdCBtYW5hX3N0YXRzX3J4ICpkc3Q7XFxuK1xcdHVuc2lnbmVkIGludCBpO1xcbitcXG4rXFx0QVNTRVJUX1JUTkwoKTtcXG4rXFxuK1xcdGlmICghYXBjLVxcdTAwM2VyeHFfc3RhdHNfcmV0IHx8IHJ4cS1cXHUwMDNlcnhxX2lkeCBcXHUwMDNlPSBhcGMtXFx1MDAzZW1heF9xdWV1ZXMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGRzdCA9IFxcdTAwMjZhcGMtXFx1MDAzZXJ4cV9zdGF0c19yZXRbcnhxLVxcdTAwM2VyeHFfaWR4XTtcXG4rXFxuK1xcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNmRzdC1cXHUwMDNlc3luY3ApO1xcbitcXHRkc3QtXFx1MDAzZXBhY2tldHNcXHRcXHQrPSBzcmMtXFx1MDAzZXBhY2tldHM7XFxuK1xcdGRzdC1cXHUwMDNlYnl0ZXNcXHRcXHQrPSBzcmMtXFx1MDAzZWJ5dGVzO1xcbitcXHRkc3QtXFx1MDAzZXhkcF9kcm9wXFx0XFx0Kz0gc3JjLVxcdTAwM2V4ZHBfZHJvcDtcXG4rXFx0ZHN0LVxcdTAwM2V4ZHBfdHhcXHRcXHQrPSBzcmMtXFx1MDAzZXhkcF90eDtcXG4rXFx0ZHN0LVxcdTAwM2V4ZHBfcmVkaXJlY3RcXHQrPSBzcmMtXFx1MDAzZXhkcF9yZWRpcmVjdDtcXG4rXFx0ZHN0LVxcdTAwM2Vwa3RfbGVuMF9lcnJcXHQrPSBzcmMtXFx1MDAzZXBrdF9sZW4wX2VycjtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoZHN0LVxcdTAwM2Vjb2FsZXNjZWRfY3FlKTsgaSsrKVxcbitcXHRcXHRkc3QtXFx1MDAzZWNvYWxlc2NlZF9jcWVbaV0gKz0gc3JjLVxcdTAwM2Vjb2FsZXNjZWRfY3FlW2ldO1xcbitcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2ZHN0LVxcdTAwM2VzeW5jcCk7XFxuK1xcbitcXHRzcmMtXFx1MDAzZXBhY2tldHNcXHRcXHQ9IDA7XFxuK1xcdHNyYy1cXHUwMDNlYnl0ZXNcXHRcXHQ9IDA7XFxuK1xcdHNyYy1cXHUwMDNleGRwX2Ryb3BcXHRcXHQ9IDA7XFxuK1xcdHNyYy1cXHUwMDNleGRwX3R4XFx0XFx0PSAwO1xcbitcXHRzcmMtXFx1MDAzZXhkcF9yZWRpcmVjdFxcdD0gMDtcXG4rXFx0c3JjLVxcdTAwM2Vwa3RfbGVuMF9lcnJcXHQ9IDA7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHNyYy1cXHUwMDNlY29hbGVzY2VkX2NxZSk7IGkrKylcXG4rXFx0XFx0c3JjLVxcdTAwM2Vjb2FsZXNjZWRfY3FlW2ldID0gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbWFuYV9mb2xkX3FzZXRfcnhfc3RhdHMoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbWFuYV9xc2V0ICpxc2V0KVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBxO1xcbitcXG4rXFx0aWYgKCFxc2V0LVxcdTAwM2VyeHFzKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRmb3IgKHEgPSAwOyBxIFxcdTAwM2MgcXNldC1cXHUwMDNlbnVtX3F1ZXVlczsgcSsrKSB7XFxuK1xcdFxcdGlmIChxc2V0LVxcdTAwM2VyeHFzW3FdKVxcbitcXHRcXHRcXHRtYW5hX2ZvbGRfcnhxX3N0YXRzKGFwYywgcXNldC1cXHUwMDNlcnhxc1txXSk7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgbWFuYV9jbGVhbnVwX2luZGlyX3RhYmxlKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKVxcbiB7XFxuIFxcdGFwYy1cXHUwMDNlaW5kaXJfdGFibGVfc3ogPSAwO1xcbkBAIC0xMDQ1LDYgKzExODQsNyBAQCBzdGF0aWMgdm9pZCBtYW5hX2NsZWFudXBfaW5kaXJfdGFibGUoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpXFxuIFxcbiBzdGF0aWMgaW50IG1hbmFfaW5pdF9wb3J0X2NvbnRleHQoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpXFxuIHtcXG4rXFx0a2ZyZWUoYXBjLVxcdTAwM2VyeHFzKTtcXG4gXFx0YXBjLVxcdTAwM2VyeHFzID0ga3phbGxvY19vYmpzKHN0cnVjdCBtYW5hX3J4cSAqLCBhcGMtXFx1MDAzZW51bV9xdWV1ZXMpO1xcbiBcXG4gXFx0cmV0dXJuICFhcGMtXFx1MDAzZXJ4cXMgPyAtRU5PTUVNIDogMDtcXG5AQCAtMTczMyw3ICsxODczLDcgQEAgdm9pZCBtYW5hX2Rlc3Ryb3lfZXEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpXFxuIFxcdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShhcGMtXFx1MDAzZW1hbmFfZXFzX2RlYnVnZnMpO1xcbiBcXHRhcGMtXFx1MDAzZW1hbmFfZXFzX2RlYnVnZnMgPSBOVUxMO1xcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFwYy1cXHUwMDNlbnVtX3F1ZXVlczsgaSsrKSB7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBhcGMtXFx1MDAzZW51bV9lcXM7IGkrKykge1xcbiBcXHRcXHRlcSA9IGFwYy1cXHUwMDNlZXFzW2ldLmVxO1xcbiBcXHRcXHRpZiAoIWVxKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG5AQCAtMTc0MSwyNCArMTg4MSwyOCBAQCB2b2lkIG1hbmFfZGVzdHJveV9lcShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYylcXG4gXFx0XFx0bXNpID0gZXEtXFx1MDAzZWVxLm1zaXhfaW5kZXg7XFxuIFxcdFxcdG1hbmFfZ2RfZGVzdHJveV9xdWV1ZShnYywgZXEpO1xcbiBcXHRcXHRtYW5hX2dkX3B1dF9naWMoZ2MsICFnYy1cXHUwMDNlbXNpX3NoYXJpbmcsIG1zaSk7XFxuK1xcdFxcdGFwYy1cXHUwMDNlZXFzW2ldLmVxID0gTlVMTDtcXG4rXFx0XFx0YXBjLVxcdTAwM2VlcXNbaV0ubWFuYV9lcV9kZWJ1Z2ZzID0gTlVMTDtcXG4gXFx0fVxcbiBcXG4gXFx0a2ZyZWUoYXBjLVxcdTAwM2VlcXMpO1xcbiBcXHRhcGMtXFx1MDAzZWVxcyA9IE5VTEw7XFxuK1xcdGFwYy1cXHUwMDNlbnVtX2VxcyA9IDA7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9OUyhtYW5hX2Rlc3Ryb3lfZXEsIFxcXCJORVRfTUFOQVxcXCIpO1xcbiBcXG4gc3RhdGljIHZvaWQgbWFuYV9jcmVhdGVfZXFfZGVidWdmcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgaW50IGkpXFxuIHtcXG4tXFx0c3RydWN0IG1hbmFfZXEgZXEgPSBhcGMtXFx1MDAzZWVxc1tpXTtcXG4rXFx0c3RydWN0IG1hbmFfZXEgKmVxID0gXFx1MDAyNmFwYy1cXHUwMDNlZXFzW2ldO1xcbiBcXHRjaGFyIGVxbnVtWzMyXTtcXG4gXFxuIFxcdHNwcmludGYoZXFudW0sIFxcXCJlcSVkXFxcIiwgaSk7XFxuLVxcdGVxLm1hbmFfZXFfZGVidWdmcyA9IGRlYnVnZnNfY3JlYXRlX2RpcihlcW51bSwgYXBjLVxcdTAwM2VtYW5hX2Vxc19kZWJ1Z2ZzKTtcXG4tXFx0ZGVidWdmc19jcmVhdGVfdTMyKFxcXCJoZWFkXFxcIiwgMDQwMCwgZXEubWFuYV9lcV9kZWJ1Z2ZzLCBcXHUwMDI2ZXEuZXEtXFx1MDAzZWhlYWQpO1xcbi1cXHRkZWJ1Z2ZzX2NyZWF0ZV91MzIoXFxcInRhaWxcXFwiLCAwNDAwLCBlcS5tYW5hX2VxX2RlYnVnZnMsIFxcdTAwMjZlcS5lcS1cXHUwMDNldGFpbCk7XFxuLVxcdGRlYnVnZnNfY3JlYXRlX3UzMihcXFwiaXJxXFxcIiwgMDQwMCwgZXEubWFuYV9lcV9kZWJ1Z2ZzLCBcXHUwMDI2ZXEuZXEtXFx1MDAzZWVxLmlycSk7XFxuLVxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcImVxX2R1bXBcXFwiLCAwNDAwLCBlcS5tYW5hX2VxX2RlYnVnZnMsIGVxLmVxLCBcXHUwMDI2bWFuYV9kYmdfcV9mb3BzKTtcXG4rXFx0ZXEtXFx1MDAzZW1hbmFfZXFfZGVidWdmcyA9IGRlYnVnZnNfY3JlYXRlX2RpcihlcW51bSwgYXBjLVxcdTAwM2VtYW5hX2Vxc19kZWJ1Z2ZzKTtcXG4rXFx0ZGVidWdmc19jcmVhdGVfdTMyKFxcXCJoZWFkXFxcIiwgMDQwMCwgZXEtXFx1MDAzZW1hbmFfZXFfZGVidWdmcywgXFx1MDAyNmVxLVxcdTAwM2VlcS1cXHUwMDNlaGVhZCk7XFxuK1xcdGRlYnVnZnNfY3JlYXRlX3UzMihcXFwidGFpbFxcXCIsIDA0MDAsIGVxLVxcdTAwM2VtYW5hX2VxX2RlYnVnZnMsIFxcdTAwMjZlcS1cXHUwMDNlZXEtXFx1MDAzZXRhaWwpO1xcbitcXHRkZWJ1Z2ZzX2NyZWF0ZV91MzIoXFxcImlycVxcXCIsIDA0MDAsIGVxLVxcdTAwM2VtYW5hX2VxX2RlYnVnZnMsIFxcdTAwMjZlcS1cXHUwMDNlZXEtXFx1MDAzZWVxLmlycSk7XFxuK1xcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcImVxX2R1bXBcXFwiLCAwNDAwLCBlcS1cXHUwMDNlbWFuYV9lcV9kZWJ1Z2ZzLCBlcS1cXHUwMDNlZXEsXFxuK1xcdFxcdFxcdCAgICBcXHUwMDI2bWFuYV9kYmdfcV9mb3BzKTtcXG4gfVxcbiBcXG4gaW50IG1hbmFfY3JlYXRlX2VxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKVxcbkBAIC0xNzczLDkgKzE5MTcsMTEgQEAgaW50IG1hbmFfY3JlYXRlX2VxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKVxcbiBcXG4gXFx0aWYgKFdBUk5fT04oYXBjLVxcdTAwM2VlcXMpKVxcbiBcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4tXFx0YXBjLVxcdTAwM2VlcXMgPSBremFsbG9jX29ianMoc3RydWN0IG1hbmFfZXEsIGFwYy1cXHUwMDNlbnVtX3F1ZXVlcyk7XFxuK1xcdC8qIEtlZXAgRVEgYXJyYXkgYWRkcmVzc2VzIHN0YWJsZSB3aGlsZSBDUXMgcmVmZXJlbmNlIHRoZW0uICovXFxuK1xcdGFwYy1cXHUwMDNlZXFzID0ga3phbGxvY19vYmpzKHN0cnVjdCBtYW5hX2VxLCBhcGMtXFx1MDAzZW1heF9xdWV1ZXMpO1xcbiBcXHRpZiAoIWFwYy1cXHUwMDNlZXFzKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0YXBjLVxcdTAwM2VudW1fZXFzID0gMDtcXG4gXFxuIFxcdHNwZWMudHlwZSA9IEdETUFfRVE7XFxuIFxcdHNwZWMubW9uaXRvcl9hdmxfYnVmID0gZmFsc2U7XFxuQEAgLTE4MDUsNiArMTk1MSw3IEBAIGludCBtYW5hX2NyZWF0ZV9lcShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYylcXG4gXFx0XFx0fVxcbiBcXHRcXHRhcGMtXFx1MDAzZWVxc1tpXS5lcS1cXHUwMDNlZXEuaXJxID0gZ2ljLVxcdTAwM2VpcnE7XFxuIFxcdFxcdG1hbmFfY3JlYXRlX2VxX2RlYnVnZnMoYXBjLCBpKTtcXG4rXFx0XFx0YXBjLVxcdTAwM2VudW1fZXFzID0gaSArIDE7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC0xODE0LDYgKzE5NjEsODcgQEAgaW50IG1hbmFfY3JlYXRlX2VxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfTlMobWFuYV9jcmVhdGVfZXEsIFxcXCJORVRfTUFOQVxcXCIpO1xcbiBcXG4rLyogR3JvdyB0aGUgc2hhcmVkIEVRIHBvb2wgd2l0aG91dCByZXBsYWNpbmcgbGl2ZSBlbnRyaWVzLiAqL1xcbitzdGF0aWMgaW50IG1hbmFfZ3Jvd19lcXMoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsIHVuc2lnbmVkIGludCBuZWVkKVxcbit7XFxuK1xcdHN0cnVjdCBnZG1hX2RldiAqZ2QgPSBhcGMtXFx1MDAzZWFjLVxcdTAwM2VnZG1hX2RldjtcXG4rXFx0c3RydWN0IGdkbWFfY29udGV4dCAqZ2MgPSBnZC1cXHUwMDNlZ2RtYV9jb250ZXh0O1xcbitcXHRzdHJ1Y3QgZ2RtYV9xdWV1ZV9zcGVjIHNwZWMgPSB7fTtcXG4rXFx0c3RydWN0IGdkbWFfaXJxX2NvbnRleHQgKmdpYztcXG4rXFx0dW5zaWduZWQgaW50IGk7XFxuK1xcdGludCBlcnI7XFxuK1xcdGludCBtc2k7XFxuK1xcbitcXHRpZiAoV0FSTl9PTighYXBjLVxcdTAwM2VlcXMpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChuZWVkIFxcdTAwM2UgYXBjLVxcdTAwM2VtYXhfcXVldWVzKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChuZWVkIFxcdTAwM2M9IGFwYy1cXHUwMDNlbnVtX2VxcylcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRzcGVjLnR5cGUgPSBHRE1BX0VRO1xcbitcXHRzcGVjLm1vbml0b3JfYXZsX2J1ZiA9IGZhbHNlO1xcbitcXHRzcGVjLnF1ZXVlX3NpemUgPSBFUV9TSVpFO1xcbitcXHRzcGVjLmVxLmNhbGxiYWNrID0gTlVMTDtcXG4rXFx0c3BlYy5lcS5jb250ZXh0ID0gYXBjLVxcdTAwM2VlcXM7XFxuK1xcdHNwZWMuZXEubG9nMl90aHJvdHRsZV9saW1pdCA9IExPRzJfRVFfVEhST1RUTEU7XFxuK1xcbitcXHRmb3IgKGkgPSBhcGMtXFx1MDAzZW51bV9lcXM7IGkgXFx1MDAzYyBuZWVkOyBpKyspIHtcXG4rXFx0XFx0bXNpID0gKGkgKyAxKSAlIGdjLVxcdTAwM2VudW1fbXNpeF91c2FibGU7XFxuK1xcbitcXHRcXHRnaWMgPSBtYW5hX2dkX2dldF9naWMoZ2MsICFnYy1cXHUwMDNlbXNpX3NoYXJpbmcsIFxcdTAwMjZtc2kpO1xcbitcXHRcXHRpZiAoSVNfRVJSKGdpYykpIHtcXG4rXFx0XFx0XFx0ZXJyID0gUFRSX0VSUihnaWMpO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXHRcXHRzcGVjLmVxLm1zaXhfaW5kZXggPSBtc2k7XFxuK1xcbitcXHRcXHRlcnIgPSBtYW5hX2dkX2NyZWF0ZV9tYW5hX2VxKGdkLCBcXHUwMDI2c3BlYywgXFx1MDAyNmFwYy1cXHUwMDNlZXFzW2ldLmVxKTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHRkZXZfZXJyKGdjLVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gZ3JvdyBFUSAldSA6ICVkXFxcXG5cXFwiLCBpLCBlcnIpO1xcbitcXHRcXHRcXHRtYW5hX2dkX3B1dF9naWMoZ2MsICFnYy1cXHUwMDNlbXNpX3NoYXJpbmcsIG1zaSk7XFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHR9XFxuK1xcdFxcdGFwYy1cXHUwMDNlZXFzW2ldLmVxLVxcdTAwM2VlcS5pcnEgPSBnaWMtXFx1MDAzZWlycTtcXG4rXFx0XFx0bWFuYV9jcmVhdGVfZXFfZGVidWdmcyhhcGMsIGkpO1xcbitcXHRcXHRhcGMtXFx1MDAzZW51bV9lcXMgPSBpICsgMTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK291dDpcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rLyogQWxsIENRcyByZWZlcmVuY2luZyBFUXMgYXQgb3IgYWJvdmUgQGtlZXAgbXVzdCBiZSBkZXN0cm95ZWQgZmlyc3QuICovXFxuK3N0YXRpYyB2b2lkIG1hbmFfc2hyaW5rX2VxcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgdW5zaWduZWQgaW50IGtlZXApXFxuK3tcXG4rXFx0c3RydWN0IGdkbWFfY29udGV4dCAqZ2MgPSBhcGMtXFx1MDAzZWFjLVxcdTAwM2VnZG1hX2Rldi1cXHUwMDNlZ2RtYV9jb250ZXh0O1xcbitcXHRzdHJ1Y3QgZ2RtYV9xdWV1ZSAqZXE7XFxuK1xcdHVuc2lnbmVkIGludCBtc2k7XFxuK1xcdHVuc2lnbmVkIGludCBpO1xcbitcXG4rXFx0aWYgKCFhcGMtXFx1MDAzZWVxcyB8fCBrZWVwIFxcdTAwM2U9IGFwYy1cXHUwMDNlbnVtX2VxcylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Zm9yIChpID0ga2VlcDsgaSBcXHUwMDNjIGFwYy1cXHUwMDNlbnVtX2VxczsgaSsrKSB7XFxuK1xcdFxcdGVxID0gYXBjLVxcdTAwM2VlcXNbaV0uZXE7XFxuK1xcdFxcdGlmICghZXEpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGFwYy1cXHUwMDNlZXFzW2ldLm1hbmFfZXFfZGVidWdmcyk7XFxuK1xcdFxcdGFwYy1cXHUwMDNlZXFzW2ldLm1hbmFfZXFfZGVidWdmcyA9IE5VTEw7XFxuK1xcbitcXHRcXHRtc2kgPSBlcS1cXHUwMDNlZXEubXNpeF9pbmRleDtcXG4rXFx0XFx0bWFuYV9nZF9kZXN0cm95X3F1ZXVlKGdjLCBlcSk7XFxuK1xcdFxcdG1hbmFfZ2RfcHV0X2dpYyhnYywgIWdjLVxcdTAwM2Vtc2lfc2hhcmluZywgbXNpKTtcXG4rXFx0XFx0YXBjLVxcdTAwM2VlcXNbaV0uZXEgPSBOVUxMO1xcbitcXHR9XFxuK1xcbitcXHRhcGMtXFx1MDAzZW51bV9lcXMgPSBrZWVwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IG1hbmFfZmVuY2VfcnEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsIHN0cnVjdCBtYW5hX3J4cSAqcnhxKVxcbiB7XFxuIFxcdHN0cnVjdCBtYW5hX2ZlbmNlX3JxX3Jlc3AgcmVzcCA9IHt9O1xcbkBAIC0yMDE4LDcgKzIyNDYsOSBAQCBzdGF0aWMgdm9pZCBtYW5hX3BvbGxfdHhfY3Eoc3RydWN0IG1hbmFfY3EgKmNxKVxcbiBcXHQvKiBFbnN1cmUgY2hlY2tpbmcgdHhxX3N0b3BwZWQgYmVmb3JlIGFwYy1cXHUwMDNlcG9ydF9pc191cC4gKi9cXG4gXFx0c21wX3JtYigpO1xcbiBcXG4tXFx0aWYgKHR4cV9zdG9wcGVkIFxcdTAwMjZcXHUwMDI2IGFwYy1cXHUwMDNlcG9ydF9pc191cCBcXHUwMDI2XFx1MDAyNiBhdmFpbF9zcGFjZSBcXHUwMDNlPSBNQVhfVFhfV1FFX1NJWkUpIHtcXG4rXFx0LyogT3JkZXIgdGhlIHN0b3BwZWQtc3RhdGUgcmVhZCBiZWZvcmUgdGhlIHJldGlyaW5nIHJlYWQuICovXFxuK1xcdGlmICh0eHFfc3RvcHBlZCBcXHUwMDI2XFx1MDAyNiAhUkVBRF9PTkNFKHR4cS1cXHUwMDNlcmV0aXJpbmcpIFxcdTAwMjZcXHUwMDI2IGFwYy1cXHUwMDNlcG9ydF9pc191cCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgYXZhaWxfc3BhY2UgXFx1MDAzZT0gTUFYX1RYX1dRRV9TSVpFKSB7XFxuIFxcdFxcdG5ldGlmX3R4X3dha2VfcXVldWUobmV0X3R4cSk7XFxuIFxcdFxcdGFwYy1cXHUwMDNlZXRoX3N0YXRzLndha2VfcXVldWUrKztcXG4gXFx0fVxcbkBAIC0yMDgxLDcgKzIzMTEsNyBAQCBzdGF0aWMgdm9pZCBtYW5hX3J4X3NrYih2b2lkICpidWZfdmEsIGJvb2wgZnJvbV9wb29sLFxcbiBcXHRcXHRcXHRzdHJ1Y3QgbWFuYV9yeGNvbXBfb29iICpjcWUsIHN0cnVjdCBtYW5hX3J4cSAqcnhxLFxcbiBcXHRcXHRcXHR1MzIgcGt0X2xlbiwgdTMyIHBrdF9oYXNoKVxcbiB7XFxuLVxcdHN0cnVjdCBtYW5hX3N0YXRzX3J4ICpyeF9zdGF0cyA9IFxcdTAwMjZyeHEtXFx1MDAzZXN0YXRzO1xcbitcXHRzdHJ1Y3QgbWFuYV9zdGF0c19yeCAqcnhfc3RhdHMgPSBtYW5hX3J4cV9zdGF0cyhyeHEpO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHJ4cS1cXHUwMDNlbmRldjtcXG4gXFx0dTE2IHJ4cV9pZHggPSByeHEtXFx1MDAzZXJ4cV9pZHg7XFxuIFxcdHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaTtcXG5AQCAtMjMxNCw2ICsyNTQ0LDcgQEAgc3RhdGljIHZvaWQgbWFuYV9wcm9jZXNzX3J4X2NxZShzdHJ1Y3QgbWFuYV9yeHEgKnJ4cSwgc3RydWN0IG1hbmFfY3EgKmNxLFxcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHJ4cS1cXHUwMDNlbmRldjtcXG4gXFx0c3RydWN0IG1hbmFfcmVjdl9idWZfb29iICpyeGJ1Zl9vb2I7XFxuIFxcdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjO1xcbitcXHRzdHJ1Y3QgbWFuYV9zdGF0c19yeCAqcnhfc3RhdHM7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGdjLVxcdTAwM2VkZXY7XFxuIFxcdGJvb2wgY29hbGVzY2VkXzggPSBmYWxzZTtcXG4gXFx0Ym9vbCBjb2FsZXNjZWQgPSBmYWxzZTtcXG5AQCAtMjM5NSwxMyArMjYyNiwxNSBAQCBzdGF0aWMgdm9pZCBtYW5hX3Byb2Nlc3NfcnhfY3FlKHN0cnVjdCBtYW5hX3J4cSAqcnhxLCBzdHJ1Y3QgbWFuYV9jcSAqY3EsXFxuIFxcdCAqIENvYWxlc2NlZCBDUUVzIGhhdmUgYXQgbGVhc3QgMiBwYWNrZXRzLCBzbyBpbmRleCBpcyBwa3RfaSAtIDIuXFxuIFxcdCAqL1xcbiBcXHRpZiAocGt0X2kgXFx1MDAzZSAxKSB7XFxuLVxcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnJ4cS1cXHUwMDNlc3RhdHMuc3luY3ApO1xcbi1cXHRcXHRyeHEtXFx1MDAzZXN0YXRzLmNvYWxlc2NlZF9jcWVbcGt0X2kgLSAyXSsrO1xcbi1cXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2cnhxLVxcdTAwM2VzdGF0cy5zeW5jcCk7XFxuK1xcdFxcdHJ4X3N0YXRzID0gbWFuYV9yeHFfc3RhdHMocnhxKTtcXG4rXFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2cnhfc3RhdHMtXFx1MDAzZXN5bmNwKTtcXG4rXFx0XFx0cnhfc3RhdHMtXFx1MDAzZWNvYWxlc2NlZF9jcWVbcGt0X2kgLSAyXSsrO1xcbitcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2cnhfc3RhdHMtXFx1MDAzZXN5bmNwKTtcXG4gXFx0fSBlbHNlIGlmICghcGt0X2kgXFx1MDAyNlxcdTAwMjYgIXBrdGxlbikge1xcbi1cXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFxcdTAwMjZyeHEtXFx1MDAzZXN0YXRzLnN5bmNwKTtcXG4tXFx0XFx0cnhxLVxcdTAwM2VzdGF0cy5wa3RfbGVuMF9lcnIrKztcXG4tXFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnJ4cS1cXHUwMDNlc3RhdHMuc3luY3ApO1xcbitcXHRcXHRyeF9zdGF0cyA9IG1hbmFfcnhxX3N0YXRzKHJ4cSk7XFxuK1xcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnJ4X3N0YXRzLVxcdTAwM2VzeW5jcCk7XFxuK1xcdFxcdHJ4X3N0YXRzLVxcdTAwM2Vwa3RfbGVuMF9lcnIrKztcXG4rXFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnJ4X3N0YXRzLVxcdTAwM2VzeW5jcCk7XFxuIFxcdFxcdG5ldGRldl9lcnJfb25jZShuZGV2LFxcbiBcXHRcXHRcXHRcXHRcXFwiUlggcGt0IGxlbj0wLCBycT0ldSwgY3E9JXUsIHJ4b2JqPTB4JWxseFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0cnhxLVxcdTAwM2VnZG1hX2lkLCBjcS1cXHUwMDNlZ2RtYV9pZCwgcnhxLVxcdTAwM2VyeG9iaik7XFxuQEAgLTI1MzMsOCArMjc2NiwxMiBAQCBzdGF0aWMgdm9pZCBtYW5hX3VwZGF0ZV9yeF9kaW0oc3RydWN0IG1hbmFfY3EgKmNxKVxcbiBcXHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNmFwYy1cXHUwMDNlcnhfZGltX2VuYWJsZWQpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRkaW1fdXBkYXRlX3NhbXBsZShSRUFEX09OQ0UoY3EtXFx1MDAzZWRpbV9ldmVudF9jdHIpLCByeHEtXFx1MDAzZXN0YXRzLnBhY2tldHMsXFxuLVxcdFxcdFxcdCAgcnhxLVxcdTAwM2VzdGF0cy5ieXRlcywgXFx1MDAyNmRpbV9zYW1wbGUpO1xcbitcXHQvKiBTa2lwIHJldGlyaW5nIFJYUXM7IERJTSByZWFkcyBzaGFyZWQgcGVyLWluZGV4IGNvdW50ZXJzLiAqL1xcbitcXHRpZiAoUkVBRF9PTkNFKHJ4cS1cXHUwMDNlcmV0aXJpbmcpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRkaW1fdXBkYXRlX3NhbXBsZShSRUFEX09OQ0UoY3EtXFx1MDAzZWRpbV9ldmVudF9jdHIpLCByeHEtXFx1MDAzZXN0YXRzLVxcdTAwM2VwYWNrZXRzLFxcbitcXHRcXHRcXHQgIHJ4cS1cXHUwMDNlc3RhdHMtXFx1MDAzZWJ5dGVzLCBcXHUwMDI2ZGltX3NhbXBsZSk7XFxuIFxcdG5ldF9kaW0oXFx1MDAyNmNxLVxcdTAwM2VkaW0sIFxcdTAwMjZkaW1fc2FtcGxlKTtcXG4gfVxcbiBcXG5AQCAtMjY0MSw3ICsyODc4LDkgQEAgc3RhdGljIHZvaWQgbWFuYV9kZWluaXRfdHhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLCBzdHJ1Y3QgbWFuYV90eHEgKnR4cSlcXG4gXFx0bWFuYV9nZF9kZXN0cm95X3F1ZXVlKGdkLVxcdTAwM2VnZG1hX2NvbnRleHQsIHR4cS1cXHUwMDNlZ2RtYV9zcSk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIG1hbmFfZGVzdHJveV90eHEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpXFxuKy8qIEtlZXAgdGhlIGFycmF5IGFuZCBxdWV1ZXMgYmVsb3cgQGZpcnN0OyBjbGVhciBmcmVlZCBzbG90cy4gKi9cXG4rc3RhdGljIHZvaWQgbWFuYV9kZXN0cm95X3R4cV9mcm9tKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxcbitcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBmaXJzdClcXG4ge1xcbiBcXHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGk7XFxuIFxcdGludCBpO1xcbkBAIC0yNjQ5LDcgKzI4ODgsNyBAQCBzdGF0aWMgdm9pZCBtYW5hX2Rlc3Ryb3lfdHhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKVxcbiBcXHRpZiAoIWFwYy1cXHUwMDNldHhfcXApXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBhcGMtXFx1MDAzZW51bV9xdWV1ZXM7IGkrKykge1xcbitcXHRmb3IgKGkgPSBmaXJzdDsgaSBcXHUwMDNjIGFwYy1cXHUwMDNlbnVtX3F1ZXVlczsgaSsrKSB7XFxuIFxcdFxcdGlmICghYXBjLVxcdTAwM2V0eF9xcFtpXSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbkBAIC0yNjczLDcgKzI5MTIsMTYgQEAgc3RhdGljIHZvaWQgbWFuYV9kZXN0cm95X3R4cShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYylcXG4gXFx0XFx0bWFuYV9kZWluaXRfdHhxKGFwYywgXFx1MDAyNmFwYy1cXHUwMDNldHhfcXBbaV0tXFx1MDAzZXR4cSk7XFxuIFxcbiBcXHRcXHRrdmZyZWUoYXBjLVxcdTAwM2V0eF9xcFtpXSk7XFxuK1xcdFxcdGFwYy1cXHUwMDNldHhfcXBbaV0gPSBOVUxMO1xcbiBcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1hbmFfZGVzdHJveV90eHEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpXFxuK3tcXG4rXFx0aWYgKCFhcGMtXFx1MDAzZXR4X3FwKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRtYW5hX2Rlc3Ryb3lfdHhxX2Zyb20oYXBjLCAwKTtcXG4gXFxuIFxcdGtmcmVlKGFwYy1cXHUwMDNldHhfcXApO1xcbiBcXHRhcGMtXFx1MDAzZXR4X3FwID0gTlVMTDtcXG5AQCAtMjcwNCw4ICsyOTUyLDExIEBAIHN0YXRpYyB2b2lkIG1hbmFfY3JlYXRlX3R4cV9kZWJ1Z2ZzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLCBpbnQgaWR4KVxcbiBcXHRcXHRcXHQgICAgdHhfcXAtXFx1MDAzZXR4X2NxLmdkbWFfY3EsIFxcdTAwMjZtYW5hX2RiZ19xX2ZvcHMpO1xcbiB9XFxuIFxcbisvKiBXaXRoIEBmaXJzdCBub256ZXJvLCB1c2UgdGhlIGV4aXN0aW5nIGFycmF5IGFuZCB1bndpbmQgb25seSBuZXcgcXVldWVzIG9uXFxuKyAqIGZhaWx1cmUuXFxuKyAqL1xcbiBzdGF0aWMgaW50IG1hbmFfY3JlYXRlX3R4cShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcXG4tXFx0XFx0XFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcXG4rXFx0XFx0XFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgdW5zaWduZWQgaW50IGZpcnN0KVxcbiB7XFxuIFxcdHN0cnVjdCBtYW5hX2NvbnRleHQgKmFjID0gYXBjLVxcdTAwM2VhYztcXG4gXFx0c3RydWN0IGdkbWFfZGV2ICpnZCA9IGFjLVxcdTAwM2VnZG1hX2RldjtcXG5AQCAtMjcyMCw5ICsyOTcxLDE0IEBAIHN0YXRpYyBpbnQgbWFuYV9jcmVhdGVfdHhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxcbiBcXHRpbnQgZXJyO1xcbiBcXHRpbnQgaTtcXG4gXFxuLVxcdGFwYy1cXHUwMDNldHhfcXAgPSBremFsbG9jX29ianMoc3RydWN0IG1hbmFfdHhfcXAgKiwgYXBjLVxcdTAwM2VudW1fcXVldWVzKTtcXG4tXFx0aWYgKCFhcGMtXFx1MDAzZXR4X3FwKVxcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0aWYgKGZpcnN0KSB7XFxuK1xcdFxcdGlmIChXQVJOX09OKCFhcGMtXFx1MDAzZXR4X3FwKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGFwYy1cXHUwMDNldHhfcXAgPSBremFsbG9jX29ianMoc3RydWN0IG1hbmFfdHhfcXAgKiwgYXBjLVxcdTAwM2VudW1fcXVldWVzKTtcXG4rXFx0XFx0aWYgKCFhcGMtXFx1MDAzZXR4X3FwKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbiBcXG4gXFx0LyogIFRoZSBtaW5pbXVtIHNpemUgb2YgdGhlIFdRRSBpcyAzMiBieXRlcywgaGVuY2VcXG4gXFx0ICogIGFwYy1cXHUwMDNldHhfcXVldWVfc2l6ZSByZXByZXNlbnRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBXUUVzXFxuQEAgLTI3MzksNyArMjk5NSw3IEBAIHN0YXRpYyBpbnQgbWFuYV9jcmVhdGVfdHhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxcbiBcXG4gXFx0Z2MgPSBnZC1cXHUwMDNlZ2RtYV9jb250ZXh0O1xcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFwYy1cXHUwMDNlbnVtX3F1ZXVlczsgaSsrKSB7XFxuK1xcdGZvciAoaSA9IGZpcnN0OyBpIFxcdTAwM2MgYXBjLVxcdTAwM2VudW1fcXVldWVzOyBpKyspIHtcXG4gXFx0XFx0YXBjLVxcdTAwM2V0eF9xcFtpXSA9IGt2emFsbG9jX29iaigqYXBjLVxcdTAwM2V0eF9xcFtpXSk7XFxuIFxcdFxcdGlmICghYXBjLVxcdTAwM2V0eF9xcFtpXSkge1xcbiBcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbkBAIC0yNzUxLDkgKzMwMDcsMTAgQEAgc3RhdGljIGludCBtYW5hX2NyZWF0ZV90eHEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXFxuIFxcdFxcdC8qIENyZWF0ZSBTUSAqL1xcbiBcXHRcXHR0eHEgPSBcXHUwMDI2YXBjLVxcdTAwM2V0eF9xcFtpXS1cXHUwMDNldHhxO1xcbiBcXG4tXFx0XFx0dTY0X3N0YXRzX2luaXQoXFx1MDAyNnR4cS1cXHUwMDNlc3RhdHMuc3luY3ApO1xcbitcXHRcXHR0eHEtXFx1MDAzZXN0YXRzID0gXFx1MDAyNmFwYy1cXHUwMDNldHhxX3N0YXRzW2ldO1xcbiBcXHRcXHR0eHEtXFx1MDAzZW5kZXYgPSBuZXQ7XFxuIFxcdFxcdHR4cS1cXHUwMDNlbmV0X3R4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUobmV0LCBpKTtcXG4rXFx0XFx0dHhxLVxcdTAwM2VyZXNldF9nZW4gPSBSRUFEX09OQ0UoYXBjLVxcdTAwM2VhYy1cXHUwMDNlcmVzZXRfZ2VuKTtcXG4gXFx0XFx0dHhxLVxcdTAwM2V2cF9vZmZzZXQgPSBhcGMtXFx1MDAzZXR4X3ZwX29mZnNldDtcXG4gXFx0XFx0dHhxLVxcdTAwM2VuYXBpX2luaXRpYWxpemVkID0gZmFsc2U7XFxuIFxcdFxcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNnR4cS1cXHUwMDNlcGVuZGluZ19za2JzKTtcXG5AQCAtMjg0Niw3ICszMTAzLDEwIEBAIHN0YXRpYyBpbnQgbWFuYV9jcmVhdGVfdHhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxcbiBvdXQ6XFxuIFxcdG5ldGRldl9lcnIobmV0LCBcXFwiRmFpbGVkIHRvIGNyZWF0ZSAlZCBUWCBxdWV1ZXMsICVkXFxcXG5cXFwiLFxcbiBcXHRcXHQgICBhcGMtXFx1MDAzZW51bV9xdWV1ZXMsIGVycik7XFxuLVxcdG1hbmFfZGVzdHJveV90eHEoYXBjKTtcXG4rXFx0aWYgKGZpcnN0KVxcbitcXHRcXHRtYW5hX2Rlc3Ryb3lfdHhxX2Zyb20oYXBjLCBmaXJzdCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0bWFuYV9kZXN0cm95X3R4cShhcGMpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbkBAIC0yODc3LDYgKzMxMzcsOSBAQCBzdGF0aWMgdm9pZCBtYW5hX2Rlc3Ryb3lfcnhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxcbiBcXHRcXHRuZXRpZl9uYXBpX2RlbF9sb2NrZWQobmFwaSk7XFxuIFxcdH1cXG4gXFxuK1xcdC8qIE5BUEkgaXMgcXVpZXNjZWQsIHNvIGRyYWluX3N0YXRzIGhhcyBubyByZW1haW5pbmcgd3JpdGVyLiAqL1xcbitcXHRtYW5hX2ZvbGRfcnhxX3N0YXRzKGFwYywgcnhxKTtcXG4rXFxuIFxcdGlmICh4ZHBfcnhxX2luZm9faXNfcmVnKFxcdTAwMjZyeHEtXFx1MDAzZXhkcF9yeHEpKVxcbiBcXHRcXHR4ZHBfcnhxX2luZm9fdW5yZWcoXFx1MDAyNnJ4cS1cXHUwMDNleGRwX3J4cSk7XFxuIFxcbkBAIC0zMDA5LDExICszMjcyLDExIEBAIHN0YXRpYyBpbnQgbWFuYV9wdXNoX3dxZShzdHJ1Y3QgbWFuYV9yeHEgKnJ4cSlcXG4gXFxuIHN0YXRpYyBpbnQgbWFuYV9jcmVhdGVfcGFnZV9wb29sKHN0cnVjdCBtYW5hX3J4cSAqcnhxLCBzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcXG4ge1xcbi1cXHRzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKm1wYyA9IG5ldGRldl9wcml2KHJ4cS1cXHUwMDNlbmRldik7XFxuIFxcdHN0cnVjdCBwYWdlX3Bvb2xfcGFyYW1zIHBwcm0gPSB7fTtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdHBwcm0ucG9vbF9zaXplID0gbXBjLVxcdTAwM2VyeF9xdWV1ZV9zaXplIC8gcnhxLVxcdTAwM2VmcmFnX2NvdW50ICsgMTtcXG4rXFx0LyogU2l6ZSB0aGUgcG9vbCBmb3IgdGhpcyBSWCBxdWV1ZSwgbm90IHRoZSBsaXZlIGNvbmZpZ3VyYXRpb24uICovXFxuK1xcdHBwcm0ucG9vbF9zaXplID0gcnhxLVxcdTAwM2VudW1fcnhfYnVmIC8gcnhxLVxcdTAwM2VmcmFnX2NvdW50ICsgMTtcXG4gXFx0cHBybS5uaWQgPSBnYy1cXHUwMDNlbnVtYV9ub2RlO1xcbiBcXHRwcHJtLm5hcGkgPSBcXHUwMDI2cnhxLVxcdTAwM2VyeF9jcS5uYXBpO1xcbiBcXHRwcHJtLm5ldGRldiA9IHJ4cS1cXHUwMDNlbmRldjtcXG5AQCAtMzA2MiwxMSArMzMyNSwxNCBAQCBzdGF0aWMgc3RydWN0IG1hbmFfcnhxICptYW5hX2NyZWF0ZV9yeHEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbiBcXG4gXFx0cnhxLVxcdTAwM2VuZGV2ID0gbmRldjtcXG4rXFx0cnhxLVxcdTAwM2VzdGF0cyA9IFxcdTAwMjZhcGMtXFx1MDAzZXJ4cV9zdGF0c1tyeHFfaWR4XTtcXG4rXFx0dTY0X3N0YXRzX2luaXQoXFx1MDAyNnJ4cS1cXHUwMDNlZHJhaW5fc3RhdHMuc3luY3ApO1xcbiBcXHRyeHEtXFx1MDAzZW51bV9yeF9idWYgPSBhcGMtXFx1MDAzZXJ4X3F1ZXVlX3NpemU7XFxuIFxcdHJ4cS1cXHUwMDNlcnhxX2lkeCA9IHJ4cV9pZHg7XFxuIFxcdHJ4cS1cXHUwMDNlcnhvYmogPSBJTlZBTElEX01BTkFfSEFORExFO1xcbiBcXG4tXFx0bWFuYV9nZXRfcnhidWZfY2ZnKGFwYywgbmRldi1cXHUwMDNlbXR1LCBcXHUwMDI2cnhxLVxcdTAwM2VkYXRhc2l6ZSwgXFx1MDAyNnJ4cS1cXHUwMDNlYWxsb2Nfc2l6ZSxcXG4rXFx0bWFuYV9nZXRfcnhidWZfY2ZnKGFwYywgYXBjLVxcdTAwM2Vjb25maWd1cmVkX210dSwgXFx1MDAyNnJ4cS1cXHUwMDNlZGF0YXNpemUsXFxuK1xcdFxcdFxcdCAgIFxcdTAwMjZyeHEtXFx1MDAzZWFsbG9jX3NpemUsXFxuIFxcdFxcdFxcdCAgIFxcdTAwMjZyeHEtXFx1MDAzZWhlYWRyb29tLCBcXHUwMDI2cnhxLVxcdTAwM2VmcmFnX2NvdW50KTtcXG4gXFx0LyogQ3JlYXRlIHBhZ2UgcG9vbCBmb3IgUlggcXVldWUgKi9cXG4gXFx0ZXJyID0gbWFuYV9jcmVhdGVfcGFnZV9wb29sKHJ4cSwgZ2MpO1xcbkBAIC0zMTk2LDE0ICszNDYyLDE1IEBAIHN0YXRpYyB2b2lkIG1hbmFfY3JlYXRlX3J4cV9kZWJ1Z2ZzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLCBpbnQgaWR4KVxcbiBcXHRcXHRcXHQgICAgXFx1MDAyNm1hbmFfZGJnX3FfZm9wcyk7XFxuIH1cXG4gXFxuKy8qIFRoZSBjYWxsZXIgbXVzdCBkZXN0cm95IHF1ZXVlcyBhZGRlZCBiZWZvcmUgYSBmYWlsdXJlLiAqL1xcbiBzdGF0aWMgaW50IG1hbmFfYWRkX3J4X3F1ZXVlcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcXG4tXFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1bnNpZ25lZCBpbnQgZmlyc3QpXFxuIHtcXG4gXFx0c3RydWN0IG1hbmFfcnhxICpyeHE7XFxuIFxcdGludCBlcnIgPSAwO1xcbiBcXHRpbnQgaTtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBhcGMtXFx1MDAzZW51bV9xdWV1ZXM7IGkrKykge1xcbitcXHRmb3IgKGkgPSBmaXJzdDsgaSBcXHUwMDNjIGFwYy1cXHUwMDNlbnVtX3F1ZXVlczsgaSsrKSB7XFxuIFxcdFxcdHJ4cSA9IG1hbmFfY3JlYXRlX3J4cShhcGMsIGksIFxcdTAwMjZhcGMtXFx1MDAzZWVxc1tpXSwgbmRldik7XFxuIFxcdFxcdGlmIChJU19FUlIocnhxKSkge1xcbiBcXHRcXHRcXHRlcnIgPSBQVFJfRVJSKHJ4cSk7XFxuQEAgLTMyMTEsOCArMzQ3OCw2IEBAIHN0YXRpYyBpbnQgbWFuYV9hZGRfcnhfcXVldWVzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0dTY0X3N0YXRzX2luaXQoXFx1MDAyNnJ4cS1cXHUwMDNlc3RhdHMuc3luY3ApO1xcbi1cXG4gXFx0XFx0YXBjLVxcdTAwM2VyeHFzW2ldID0gcnhxO1xcbiBcXG4gXFx0XFx0bWFuYV9jcmVhdGVfcnhxX2RlYnVnZnMoYXBjLCBpKTtcXG5AQCAtMzIyMywxNCArMzQ4OCwxNSBAQCBzdGF0aWMgaW50IG1hbmFfYWRkX3J4X3F1ZXVlcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgbWFuYV9kZXN0cm95X3J4cXMoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpXFxuK3N0YXRpYyB2b2lkIG1hbmFfZGVzdHJveV9yeHFzX2Zyb20oc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXFxuK1xcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBmaXJzdClcXG4ge1xcbiBcXHRzdHJ1Y3QgbWFuYV9yeHEgKnJ4cTtcXG4gXFx0dTMyIHJ4cV9pZHg7XFxuIFxcbiBcXHRpZiAoYXBjLVxcdTAwM2VyeHFzKSB7XFxuIFxcbi1cXHRcXHRmb3IgKHJ4cV9pZHggPSAwOyByeHFfaWR4IFxcdTAwM2MgYXBjLVxcdTAwM2VudW1fcXVldWVzOyByeHFfaWR4KyspIHtcXG4rXFx0XFx0Zm9yIChyeHFfaWR4ID0gZmlyc3Q7IHJ4cV9pZHggXFx1MDAzYyBhcGMtXFx1MDAzZW51bV9xdWV1ZXM7IHJ4cV9pZHgrKykge1xcbiBcXHRcXHRcXHRyeHEgPSBhcGMtXFx1MDAzZXJ4cXNbcnhxX2lkeF07XFxuIFxcdFxcdFxcdGlmICghcnhxKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG5AQCAtMzI0MSw2ICszNTA3LDExIEBAIHN0YXRpYyB2b2lkIG1hbmFfZGVzdHJveV9yeHFzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKVxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIG1hbmFfZGVzdHJveV9yeHFzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKVxcbit7XFxuK1xcdG1hbmFfZGVzdHJveV9yeHFzX2Zyb20oYXBjLCAwKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgbWFuYV9kZXN0cm95X3Zwb3J0KHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKVxcbiB7XFxuIFxcdHN0cnVjdCBnZG1hX2RldiAqZ2QgPSBhcGMtXFx1MDAzZWFjLVxcdTAwM2VnZG1hX2RldjtcXG5AQCAtMzMwNiw2ICszNTc3LDI3IEBAIHN0YXRpYyB2b2lkIG1hbmFfcnNzX3RhYmxlX2luaXQoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpXFxuIFxcdFxcdFxcdGV0aHRvb2xfcnhmaF9pbmRpcl9kZWZhdWx0KGksIGFwYy1cXHUwMDNlbnVtX3F1ZXVlcyk7XFxuIH1cXG4gXFxuKy8qIEtlZXAgdXNlciB0YWJsZXMgd2l0aCB2YWxpZCBpbmRpY2VzOyBkZWZlciBsb3NzIG5vdGlmaWNhdGlvbi4gKi9cXG4rc3RhdGljIGJvb2wgbWFuYV9yc3NfdGFibGVfa2VlcChzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcXG4rXFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IG51bV9xdWV1ZXMsIGJvb2wgKmxvc3QpXFxuK3tcXG4rXFx0dTMyIGk7XFxuK1xcbitcXHQqbG9zdCA9IGZhbHNlO1xcbitcXG4rXFx0aWYgKCFuZXRpZl9pc19yeGZoX2NvbmZpZ3VyZWQoYXBjLVxcdTAwM2VuZGV2KSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFwYy1cXHUwMDNlaW5kaXJfdGFibGVfc3o7IGkrKykge1xcbitcXHRcXHRpZiAoYXBjLVxcdTAwM2VpbmRpcl90YWJsZVtpXSBcXHUwMDNlPSBudW1fcXVldWVzKSB7XFxuK1xcdFxcdFxcdCpsb3N0ID0gdHJ1ZTtcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbiBpbnQgbWFuYV9kaXNhYmxlX3Zwb3J0X3J4KHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKVxcbiB7XFxuIFxcdHJldHVybiBtYW5hX2NmZ192cG9ydF9zdGVlcmluZyhhcGMsIFRSSV9TVEFURV9GQUxTRSwgZmFsc2UsIGZhbHNlLFxcbkBAIC0zNTc2LDYgKzM4NjgsNyBAQCBpbnQgbWFuYV9hbGxvY19xdWV1ZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIHtcXG4gXFx0c3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4gXFx0c3RydWN0IGdkbWFfZGV2ICpnZCA9IGFwYy1cXHUwMDNlYWMtXFx1MDAzZWdkbWFfZGV2O1xcbitcXHRib29sIGluZGlyX2xvc3Q7XFxuIFxcdGludCBlcnI7XFxuIFxcbiBcXHRlcnIgPSBtYW5hX2NyZWF0ZV92cG9ydChhcGMsIG5kZXYpO1xcbkBAIC0zNTkyLDcgKzM4ODUsNyBAQCBpbnQgbWFuYV9hbGxvY19xdWV1ZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIFxcdFxcdGdvdG8gZGVzdHJveV92cG9ydDtcXG4gXFx0fVxcbiBcXG4tXFx0ZXJyID0gbWFuYV9jcmVhdGVfdHhxKGFwYywgbmRldik7XFxuK1xcdGVyciA9IG1hbmFfY3JlYXRlX3R4cShhcGMsIG5kZXYsIDApO1xcbiBcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdG5ldGRldl9lcnIobmRldiwgXFxcIkZhaWxlZCB0byBjcmVhdGUgVFhRIG9uIHZQb3J0ICV1OiAlZFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICAgYXBjLVxcdTAwM2Vwb3J0X2lkeCwgZXJyKTtcXG5AQCAtMzYwNyw3ICszOTAwLDcgQEAgaW50IG1hbmFfYWxsb2NfcXVldWVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiBcXHRcXHRnb3RvIGRlc3Ryb3lfdHhxO1xcbiBcXHR9XFxuIFxcbi1cXHRlcnIgPSBtYW5hX2FkZF9yeF9xdWV1ZXMoYXBjLCBuZGV2KTtcXG4rXFx0ZXJyID0gbWFuYV9hZGRfcnhfcXVldWVzKGFwYywgbmRldiwgMCk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZGVzdHJveV9yeHE7XFxuIFxcbkBAIC0zNjIxLDcgKzM5MTQsOSBAQCBpbnQgbWFuYV9hbGxvY19xdWV1ZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIFxcdFxcdGdvdG8gZGVzdHJveV9yeHE7XFxuIFxcdH1cXG4gXFxuLVxcdG1hbmFfcnNzX3RhYmxlX2luaXQoYXBjKTtcXG4rXFx0LyogTG9zcyBub3RpZmljYXRpb24gbmVlZHMgYSBuZXRkZXYgaW5zdGFuY2UgbG9jayB3ZSBtYXkgbGFjay4gKi9cXG4rXFx0aWYgKCFtYW5hX3Jzc190YWJsZV9rZWVwKGFwYywgYXBjLVxcdTAwM2VudW1fcXVldWVzLCBcXHUwMDI2aW5kaXJfbG9zdCkpXFxuK1xcdFxcdG1hbmFfcnNzX3RhYmxlX2luaXQoYXBjKTtcXG4gXFxuIFxcdGVyciA9IG1hbmFfY29uZmlnX3JzcyhhcGMsIFRSSV9TVEFURV9UUlVFLCB0cnVlLCB0cnVlKTtcXG4gXFx0aWYgKGVycikge1xcbkBAIC0zNjc5LDE1ICszOTc0LDg4IEBAIGludCBtYW5hX2F0dGFjaChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgbWFuYV9kZWFsbG9jX3F1ZXVlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4rLyogRHJhaW4gd2l0aCBhIHBlci1zZXQgdGltZW91dDsgcmV0dXJuIHRydWUgb25seSBmb3IgYSBzdWNjZXNzZnVsIEZMUi4gQSBmYWxzZVxcbisgKiByZXR1cm4gZG9lcyBub3QgZ3VhcmFudGVlIERNQSBxdWllc2NlbmNlLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgbWFuYV9kcmFpbl90eHFzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKVxcbiB7XFxuLVxcdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjID0gbmV0ZGV2X3ByaXYobmRldik7XFxuIFxcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyAxMjAgKiBIWjtcXG4tXFx0c3RydWN0IGdkbWFfZGV2ICpnZCA9IGFwYy1cXHUwMDNlYWMtXFx1MDAzZWdkbWFfZGV2O1xcbitcXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IGFwYy1cXHUwMDNlYWMtXFx1MDAzZWdkbWFfZGV2LVxcdTAwM2VnZG1hX2NvbnRleHQ7XFxuK1xcdGJvb2wgcXVpZXNjZWQgPSB0cnVlO1xcbitcXHRib29sIHJlc2V0ID0gZmFsc2U7XFxuIFxcdHN0cnVjdCBtYW5hX3R4cSAqdHhxO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbi1cXHRpbnQgaSwgZXJyO1xcbiBcXHR1MzIgdHNsZWVwO1xcbitcXHRpbnQgaSwgZXJyO1xcbitcXG4rXFx0aWYgKCFhcGMtXFx1MDAzZXR4X3FwKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYXBjLVxcdTAwM2VudW1fcXVldWVzOyBpKyspIHtcXG4rXFx0XFx0aWYgKCFhcGMtXFx1MDAzZXR4X3FwW2ldKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHR4cSA9IFxcdTAwMjZhcGMtXFx1MDAzZXR4X3FwW2ldLVxcdTAwM2V0eHE7XFxuK1xcbitcXHRcXHQvKiBBIHByZXZpb3VzIGZ1bmN0aW9uIHJlc2V0IGludmFsaWRhdGVkIHRoZXNlIHF1ZXVlcy4gKi9cXG4rXFx0XFx0aWYgKFJFQURfT05DRShhcGMtXFx1MDAzZWFjLVxcdTAwM2VyZXNldF9nZW4pICE9IHR4cS1cXHUwMDNlcmVzZXRfZ2VuKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHRzbGVlcCA9IDEwMDA7XFxuK1xcdFxcdHdoaWxlIChhdG9taWNfcmVhZChcXHUwMDI2dHhxLVxcdTAwM2VwZW5kaW5nX3NlbmRzKSBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICAgIHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7XFxuK1xcdFxcdFxcdHVzbGVlcF9yYW5nZSh0c2xlZXAsIHRzbGVlcCArIDEwMDApO1xcbitcXHRcXHRcXHR0c2xlZXAgXFx1MDAzY1xcdTAwM2M9IDE7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZ0eHEtXFx1MDAzZXBlbmRpbmdfc2VuZHMpKSB7XFxuK1xcdFxcdFxcdGVyciA9IHBjaWVfZmxyKHRvX3BjaV9kZXYoZ2MtXFx1MDAzZWRldikpO1xcbitcXHRcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdFxcdG5ldGRldl9lcnIoYXBjLVxcdTAwM2VuZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXFwiZmxyIGZhaWxlZCAlZCB3aXRoICVkIHBrdHMgcGVuZGluZyBpbiB0eHEgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGVycixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgYXRvbWljX3JlYWQoXFx1MDAyNnR4cS1cXHUwMDNlcGVuZGluZ19zZW5kcyksXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHR4cS1cXHUwMDNlZ2RtYV90eHFfaWQpO1xcbitcXHRcXHRcXHRcXHRxdWllc2NlZCA9IGZhbHNlO1xcbitcXHRcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRcXHQvKiBJbnZhbGlkYXRlIHF1ZXVlcyBvbiBldmVyeSBwb3J0IGFmdGVyIHRoZVxcbitcXHRcXHRcXHRcXHQgKiBmdW5jdGlvbiByZXNldC5cXG4rXFx0XFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdFxcdFdSSVRFX09OQ0UoYXBjLVxcdTAwM2VhYy1cXHUwMDNlcmVzZXRfZ2VuLFxcbitcXHRcXHRcXHRcXHRcXHQgICBhcGMtXFx1MDAzZWFjLVxcdTAwM2VyZXNldF9nZW4gKyAxKTtcXG4rXFxuK1xcdFxcdFxcdFxcdHJlc2V0ID0gdHJ1ZTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHQvKiBBIGZhaWxlZCBGTFIgY2Fubm90IGp1c3RpZnkgdW5tYXBwaW5nIHBlbmRpbmcgVFggYnVmZmVycy4gKi9cXG4rXFx0aWYgKCFxdWllc2NlZCkge1xcbitcXHRcXHRuZXRkZXZfZXJyKGFwYy1cXHUwMDNlbmRldixcXG4rXFx0XFx0XFx0ICAgXFxcImRldmljZSBub3QgcXVpZXNjZWQsIGxlYWtpbmcgcGVuZGluZyBUWCBidWZmZXJzIGluc3RlYWQgb2YgdW5tYXBwaW5nIG1lbW9yeSBpdCBjYW4gc3RpbGwgRE1BIGZyb21cXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gcmVzZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBhcGMtXFx1MDAzZW51bV9xdWV1ZXM7IGkrKykge1xcbitcXHRcXHRpZiAoIWFwYy1cXHUwMDNldHhfcXBbaV0pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0dHhxID0gXFx1MDAyNmFwYy1cXHUwMDNldHhfcXBbaV0tXFx1MDAzZXR4cTtcXG4rXFx0XFx0d2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZShcXHUwMDI2dHhxLVxcdTAwM2VwZW5kaW5nX3NrYnMpKSkge1xcbitcXHRcXHRcXHRtYW5hX3VubWFwX3NrYihza2IsIGFwYyk7XFxuK1xcdFxcdFxcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuK1xcdFxcdH1cXG4rXFx0XFx0YXRvbWljX3NldChcXHUwMDI2dHhxLVxcdTAwM2VwZW5kaW5nX3NlbmRzLCAwKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJlc2V0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG1hbmFfZGVhbGxvY19xdWV1ZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuK3tcXG4rXFx0c3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFx0c3RydWN0IGdkbWFfZGV2ICpnZCA9IGFwYy1cXHUwMDNlYWMtXFx1MDAzZWdkbWFfZGV2O1xcbitcXHRpbnQgZXJyO1xcbiBcXG4gXFx0aWYgKGFwYy1cXHUwMDNlcG9ydF9pc191cClcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuQEAgLTM2OTgsNDggKzQwNjYsMjEgQEAgc3RhdGljIGludCBtYW5hX2RlYWxsb2NfcXVldWVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiBcXHRpZiAoZ2QtXFx1MDAzZWdkbWFfY29udGV4dC1cXHUwMDNlaXNfcGYgXFx1MDAyNlxcdTAwMjYgIWFwYy1cXHUwMDNlYWMtXFx1MDAzZWJtX2hvc3Rtb2RlKVxcbiBcXHRcXHRtYW5hX3BmX2RlcmVnaXN0ZXJfZmlsdGVyKGFwYyk7XFxuIFxcbi1cXHQvKiBObyBwYWNrZXQgY2FuIGJlIHRyYW5zbWl0dGVkIG5vdyBzaW5jZSBhcGMtXFx1MDAzZXBvcnRfaXNfdXAgaXMgZmFsc2UuXFxuLVxcdCAqIFRoZXJlIGlzIHN0aWxsIGEgdGlueSBjaGFuY2UgdGhhdCBtYW5hX3BvbGxfdHhfY3EoKSBjYW4gcmUtZW5hYmxlXFxuLVxcdCAqIGEgdHhxIGJlY2F1c2UgaXQgbWF5IG5vdCB0aW1lbHkgc2VlIGFwYy1cXHUwMDNlcG9ydF9pc191cCBiZWluZyBjbGVhcmVkXFxuLVxcdCAqIHRvIGZhbHNlLCBidXQgaXQgZG9lc24ndCBtYXR0ZXIgc2luY2UgbWFuYV9zdGFydF94bWl0KCkgZHJvcHMgYW55XFxuLVxcdCAqIG5ldyBwYWNrZXRzIGR1ZSB0byBhcGMtXFx1MDAzZXBvcnRfaXNfdXAgYmVpbmcgZmFsc2UuXFxuLVxcdCAqXFxuLVxcdCAqIERyYWluIGFsbCB0aGUgaW4tZmxpZ2h0IFRYIHBhY2tldHMuXFxuLVxcdCAqIEEgdGltZW91dCBvZiAxMjAgc2Vjb25kcyBmb3IgYWxsIHRoZSBxdWV1ZXMgaXMgdXNlZC5cXG4tXFx0ICogVGhpcyB3aWxsIGJyZWFrIHRoZSB3aGlsZSBsb29wIHdoZW4gaC93IGlzIG5vdCByZXNwb25kaW5nLlxcbi1cXHQgKiBUaGlzIHZhbHVlIG9mIDEyMCBoYXMgYmVlbiBkZWNpZGVkIGhlcmUgY29uc2lkZXJpbmcgbWF4XFxuLVxcdCAqIG51bWJlciBvZiBxdWV1ZXMuXFxuLVxcdCAqL1xcbitcXHQvKiBBZnRlciBGTFIsIHNjaGVkdWxlIGEgYmVzdC1lZmZvcnQgc2libGluZy1wb3J0IHJlYnVpbGQuICovXFxuK1xcdGlmIChtYW5hX2RyYWluX3R4cXMoYXBjKSkge1xcbitcXHRcXHRzdHJ1Y3QgbWFuYV9jb250ZXh0ICphYyA9IGFwYy1cXHUwMDNlYWM7XFxuK1xcdFxcdHVuc2lnbmVkIGludCBpO1xcbiBcXG4tXFx0aWYgKGFwYy1cXHUwMDNldHhfcXApIHtcXG4tXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFwYy1cXHUwMDNlbnVtX3F1ZXVlczsgaSsrKSB7XFxuLVxcdFxcdFxcdHR4cSA9IFxcdTAwMjZhcGMtXFx1MDAzZXR4X3FwW2ldLVxcdTAwM2V0eHE7XFxuLVxcdFxcdFxcdHRzbGVlcCA9IDEwMDA7XFxuLVxcdFxcdFxcdHdoaWxlIChhdG9taWNfcmVhZChcXHUwMDI2dHhxLVxcdTAwM2VwZW5kaW5nX3NlbmRzKSBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0ICAgICAgIHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7XFxuLVxcdFxcdFxcdFxcdHVzbGVlcF9yYW5nZSh0c2xlZXAsIHRzbGVlcCArIDEwMDApO1xcbi1cXHRcXHRcXHRcXHR0c2xlZXAgXFx1MDAzY1xcdTAwM2M9IDE7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZ0eHEtXFx1MDAzZXBlbmRpbmdfc2VuZHMpKSB7XFxuLVxcdFxcdFxcdFxcdGVyciA9XFxuLVxcdFxcdFxcdFxcdCAgICBwY2llX2Zscih0b19wY2lfZGV2KGdkLVxcdTAwM2VnZG1hX2NvbnRleHQtXFx1MDAzZWRldikpO1xcbi1cXHRcXHRcXHRcXHRpZiAoZXJyKSB7XFxuLVxcdFxcdFxcdFxcdFxcdG5ldGRldl9lcnIobmRldiwgXFxcImZsciBmYWlsZWQgJWQgd2l0aCAlZCBwa3RzIHBlbmRpbmcgaW4gdHhxICV1XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICBlcnIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBhdG9taWNfcmVhZChcXHUwMDI2dHhxLVxcdTAwM2VwZW5kaW5nX3NlbmRzKSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIHR4cS1cXHUwMDNlZ2RtYV90eHFfaWQpO1xcbi1cXHRcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdH1cXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFjLVxcdTAwM2VudW1fcG9ydHM7IGkrKykge1xcbitcXHRcXHRcXHRzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKnNpYjtcXG4gXFxuLVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBhcGMtXFx1MDAzZW51bV9xdWV1ZXM7IGkrKykge1xcbi1cXHRcXHRcXHR0eHEgPSBcXHUwMDI2YXBjLVxcdTAwM2V0eF9xcFtpXS1cXHUwMDNldHhxO1xcbi1cXHRcXHRcXHR3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKFxcdTAwMjZ0eHEtXFx1MDAzZXBlbmRpbmdfc2ticykpKSB7XFxuLVxcdFxcdFxcdFxcdG1hbmFfdW5tYXBfc2tiKHNrYiwgYXBjKTtcXG4tXFx0XFx0XFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZ0eHEtXFx1MDAzZXBlbmRpbmdfc2VuZHMsIDApO1xcbitcXHRcXHRcXHRpZiAoIWFjLVxcdTAwM2Vwb3J0c1tpXSB8fCBhYy1cXHUwMDNlcG9ydHNbaV0gPT0gbmRldilcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdHNpYiA9IG5ldGRldl9wcml2KGFjLVxcdTAwM2Vwb3J0c1tpXSk7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIoYWMtXFx1MDAzZXBvcnRzW2ldLFxcbitcXHRcXHRcXHRcXHQgICBcXFwicXVldWVzIHJlc2V0IGJ5IGEgc2libGluZyBwb3J0LCBzY2hlZHVsaW5nIHJlYnVpbGRcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRxdWV1ZV93b3JrKGFjLVxcdTAwM2VwZXJfcG9ydF9xdWV1ZV9yZXNldF93cSxcXG4rXFx0XFx0XFx0XFx0ICAgXFx1MDAyNnNpYi1cXHUwMDNlcXVldWVfcmVzZXRfd29yayk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG5AQCAtMzc2Myw2ICs0MTA0LDY4NSBAQCBzdGF0aWMgaW50IG1hbmFfZGVhbGxvY19xdWV1ZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBtYW5hX3FzZXRfc25hcHNob3QoY29uc3Qgc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICpjdHgsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbWFuYV9xc2V0ICpvdXQpXFxuK3tcXG4rXFx0b3V0LVxcdTAwM2V0eF9xcFxcdFxcdD0gY3R4LVxcdTAwM2V0eF9xcDtcXG4rXFx0b3V0LVxcdTAwM2VyeHFzXFx0XFx0PSBjdHgtXFx1MDAzZXJ4cXM7XFxuK1xcdG91dC1cXHUwMDNlaW5kaXJfdGFibGVcXHQ9IGN0eC1cXHUwMDNlaW5kaXJfdGFibGU7XFxuK1xcdG91dC1cXHUwMDNlaW5kaXJfdGFibGVfc3pcXHQ9IGN0eC1cXHUwMDNlaW5kaXJfdGFibGVfc3o7XFxuK1xcdG91dC1cXHUwMDNlcnhvYmpfdGFibGVcXHQ9IGN0eC1cXHUwMDNlcnhvYmpfdGFibGU7XFxuK1xcdG91dC1cXHUwMDNlZGVmYXVsdF9yeG9ialxcdD0gY3R4LVxcdTAwM2VkZWZhdWx0X3J4b2JqO1xcbitcXHRvdXQtXFx1MDAzZW51bV9xdWV1ZXNcXHRcXHQ9IGN0eC1cXHUwMDNlbnVtX3F1ZXVlcztcXG4rXFx0b3V0LVxcdTAwM2VyeF9xdWV1ZV9zaXplXFx0PSBjdHgtXFx1MDAzZXJ4X3F1ZXVlX3NpemU7XFxuK1xcdG91dC1cXHUwMDNldHhfcXVldWVfc2l6ZVxcdD0gY3R4LVxcdTAwM2V0eF9xdWV1ZV9zaXplO1xcbitcXHRvdXQtXFx1MDAzZXByaXZfZmxhZ3NcXHRcXHQ9IGN0eC1cXHUwMDNlcHJpdl9mbGFncztcXG4rXFx0b3V0LVxcdTAwM2VtdHVcXHRcXHQ9IGN0eC1cXHUwMDNlY29uZmlndXJlZF9tdHU7XFxuK1xcdG91dC1cXHUwMDNlYnBmX3Byb2dcXHRcXHQ9IGN0eC1cXHUwMDNlYnBmX3Byb2c7XFxuK1xcbitcXHRvdXQtXFx1MDAzZXJ4ZmhfaW5kaXJfbG9zdFxcdD0gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1hbmFfcXNldF9pbnN0YWxsKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqY3R4LFxcbitcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbWFuYV9xc2V0ICpxc2V0KVxcbit7XFxuK1xcdGN0eC1cXHUwMDNldHhfcXBcXHRcXHQ9IHFzZXQtXFx1MDAzZXR4X3FwO1xcbitcXHRjdHgtXFx1MDAzZXJ4cXNcXHRcXHQ9IHFzZXQtXFx1MDAzZXJ4cXM7XFxuK1xcdGN0eC1cXHUwMDNlaW5kaXJfdGFibGVcXHQ9IHFzZXQtXFx1MDAzZWluZGlyX3RhYmxlO1xcbitcXHRjdHgtXFx1MDAzZWluZGlyX3RhYmxlX3N6XFx0PSBxc2V0LVxcdTAwM2VpbmRpcl90YWJsZV9zejtcXG4rXFx0Y3R4LVxcdTAwM2VyeG9ial90YWJsZVxcdD0gcXNldC1cXHUwMDNlcnhvYmpfdGFibGU7XFxuK1xcdGN0eC1cXHUwMDNlZGVmYXVsdF9yeG9ialxcdD0gcXNldC1cXHUwMDNlZGVmYXVsdF9yeG9iajtcXG4rXFx0Y3R4LVxcdTAwM2VudW1fcXVldWVzXFx0XFx0PSBxc2V0LVxcdTAwM2VudW1fcXVldWVzO1xcbitcXHRjdHgtXFx1MDAzZXJ4X3F1ZXVlX3NpemVcXHQ9IHFzZXQtXFx1MDAzZXJ4X3F1ZXVlX3NpemU7XFxuK1xcdGN0eC1cXHUwMDNldHhfcXVldWVfc2l6ZVxcdD0gcXNldC1cXHUwMDNldHhfcXVldWVfc2l6ZTtcXG4rXFx0Y3R4LVxcdTAwM2Vwcml2X2ZsYWdzXFx0XFx0PSBxc2V0LVxcdTAwM2Vwcml2X2ZsYWdzO1xcbitcXHRjdHgtXFx1MDAzZWNvbmZpZ3VyZWRfbXR1XFx0PSBxc2V0LVxcdTAwM2VtdHU7XFxuK1xcdGN0eC1cXHUwMDNlYnBmX3Byb2dcXHRcXHQ9IHFzZXQtXFx1MDAzZWJwZl9wcm9nO1xcbit9XFxuK1xcbisvKiBTY3JhdGNoIHN0YXJ0cyB3aXRob3V0IFNRcy9SUXMgYW5kIGJvcnJvd3MgdGhlIHBvcnQncyBFUSBwb29sLiBOZXZlciBjYWxsXFxuKyAqIG1hbmFfZGVzdHJveV9lcSgpIG9uIGl0LlxcbisgKi9cXG4rc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICptYW5hX3FzZXRfc2NyYXRjaF9hbGxvYyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYylcXG4re1xcbitcXHRzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKnNjcmF0Y2g7XFxuK1xcbitcXHRzY3JhdGNoID0ga3Z6YWxsb2Nfb2JqKCpzY3JhdGNoLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFzY3JhdGNoKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdCpzY3JhdGNoID0gKmFwYztcXG4rXFxuK1xcdHNjcmF0Y2gtXFx1MDAzZXR4X3FwXFx0XFx0PSBOVUxMO1xcbitcXHRzY3JhdGNoLVxcdTAwM2VyeHFzXFx0XFx0PSBOVUxMO1xcbitcXHRzY3JhdGNoLVxcdTAwM2VpbmRpcl90YWJsZVxcdD0gTlVMTDtcXG4rXFx0c2NyYXRjaC1cXHUwMDNlcnhvYmpfdGFibGVcXHQ9IE5VTEw7XFxuK1xcdHNjcmF0Y2gtXFx1MDAzZWRlZmF1bHRfcnhvYmpcXHQ9IElOVkFMSURfTUFOQV9IQU5ETEU7XFxuK1xcbitcXHQvKiBEbyBub3QgY29uc3VtZSB0aGUgbGl2ZSBzZXQncyBwcmUtYWxsb2NhdGVkIFJYIGJ1ZmZlcnMuICovXFxuK1xcdHNjcmF0Y2gtXFx1MDAzZXJ4YnVmc19wcmVcXHQ9IE5VTEw7XFxuK1xcdHNjcmF0Y2gtXFx1MDAzZWRhc19wcmVcXHQ9IE5VTEw7XFxuK1xcdHNjcmF0Y2gtXFx1MDAzZXJ4YnByZV90b3RhbFxcdD0gMDtcXG4rXFxuK1xcdC8qIFN1cHByZXNzIGRlYnVnZnMgbmFtZXMgdGhhdCB3b3VsZCBjb2xsaWRlIHdpdGggdGhlIGxpdmUgc2V0LiAqL1xcbitcXHRzY3JhdGNoLVxcdTAwM2VtYW5hX3BvcnRfZGVidWdmcyA9IEVSUl9QVFIoLUVOT0RFVik7XFxuK1xcbitcXHRyZXR1cm4gc2NyYXRjaDtcXG4rfVxcbitcXG4rdm9pZCBtYW5hX3FzZXRfc2NyYXRjaF9mcmVlKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqc2NyYXRjaClcXG4re1xcbitcXHRrdmZyZWUoc2NyYXRjaCk7XFxuK31cXG4rXFxuKy8qIFNwbGl0IGludG8ga2VwdCBxdWV1ZXMgYW5kIGEgcmV0aXJpbmcgdGFpbCB3aXRob3V0IGNoYW5naW5nIGxpdmUgb3duZXJzaGlwLlxcbisgKiBRdWV1ZSBpIHJldGFpbnMgRVEgaS5cXG4rICovXFxuK2ludCBtYW5hX3NwbGl0X3FzZXQoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXFxuK1xcdFxcdCAgICBzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKnNjcmF0Y2gsIHVuc2lnbmVkIGludCBuZXdfY291bnQsXFxuK1xcdFxcdCAgICBzdHJ1Y3QgbWFuYV9xc2V0ICpvdXRfbmV3LCBzdHJ1Y3QgbWFuYV9xc2V0ICpvdXRfdGFpbClcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgb2xkX2NvdW50ID0gYXBjLVxcdTAwM2VudW1fcXVldWVzO1xcbitcXHRzdHJ1Y3QgbWFuYV90eF9xcCAqKm5ld190eCwgKip0YWlsX3R4O1xcbitcXHRzdHJ1Y3QgbWFuYV9yeHEgKipuZXdfcngsICoqdGFpbF9yeDtcXG4rXFx0dW5zaWduZWQgaW50IHRhaWxfY291bnQ7XFxuK1xcdGJvb2wgaW5kaXJfbG9zdDtcXG4rXFx0dW5zaWduZWQgaW50IGk7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRBU1NFUlRfUlROTCgpO1xcbitcXG4rXFx0aWYgKFdBUk5fT04obmV3X2NvdW50ID09IDAgfHwgbmV3X2NvdW50IFxcdTAwM2U9IG9sZF9jb3VudCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAoV0FSTl9PTighYXBjLVxcdTAwM2V0eF9xcCB8fCAhYXBjLVxcdTAwM2VyeHFzKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHR0YWlsX2NvdW50ID0gb2xkX2NvdW50IC0gbmV3X2NvdW50O1xcbitcXG4rXFx0LyogQnVpbGQgc3RlZXJpbmcgc2VwYXJhdGVseSBzbyBpdCBjYW5ub3QgaW5kZXggYmV5b25kIHRoZSBzaG9ydGVuZWQgUlhcXG4rXFx0ICogYXJyYXkuXFxuK1xcdCAqL1xcbitcXHRzY3JhdGNoLVxcdTAwM2VudW1fcXVldWVzID0gbmV3X2NvdW50O1xcbitcXHRlcnIgPSBtYW5hX3Jzc190YWJsZV9hbGxvYyhzY3JhdGNoKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGlmIChtYW5hX3Jzc190YWJsZV9rZWVwKGFwYywgbmV3X2NvdW50LCBcXHUwMDI2aW5kaXJfbG9zdCkpXFxuK1xcdFxcdG1lbWNweShzY3JhdGNoLVxcdTAwM2VpbmRpcl90YWJsZSwgYXBjLVxcdTAwM2VpbmRpcl90YWJsZSxcXG4rXFx0XFx0ICAgICAgIGFwYy1cXHUwMDNlaW5kaXJfdGFibGVfc3ogKiBzaXplb2YoKmFwYy1cXHUwMDNlaW5kaXJfdGFibGUpKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRtYW5hX3Jzc190YWJsZV9pbml0KHNjcmF0Y2gpO1xcbitcXG4rXFx0bmV3X3R4ID0ga3phbGxvY19vYmpzKHN0cnVjdCBtYW5hX3R4X3FwICosIG5ld19jb3VudCk7XFxuK1xcdG5ld19yeCA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgbWFuYV9yeHEgKiwgbmV3X2NvdW50KTtcXG4rXFx0dGFpbF90eCA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgbWFuYV90eF9xcCAqLCB0YWlsX2NvdW50KTtcXG4rXFx0dGFpbF9yeCA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgbWFuYV9yeHEgKiwgdGFpbF9jb3VudCk7XFxuK1xcdGlmICghbmV3X3R4IHx8ICFuZXdfcnggfHwgIXRhaWxfdHggfHwgIXRhaWxfcngpIHtcXG4rXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byBmcmVlX2FycmF5cztcXG4rXFx0fVxcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5ld19jb3VudDsgaSsrKSB7XFxuK1xcdFxcdG5ld190eFtpXSA9IGFwYy1cXHUwMDNldHhfcXBbaV07XFxuK1xcdFxcdG5ld19yeFtpXSA9IGFwYy1cXHUwMDNlcnhxc1tpXTtcXG4rXFx0fVxcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdGFpbF9jb3VudDsgaSsrKSB7XFxuK1xcdFxcdHRhaWxfdHhbaV0gPSBhcGMtXFx1MDAzZXR4X3FwW25ld19jb3VudCArIGldO1xcbitcXHRcXHR0YWlsX3J4W2ldID0gYXBjLVxcdTAwM2VyeHFzW25ld19jb3VudCArIGldO1xcbitcXHR9XFxuK1xcbitcXHRvdXRfbmV3LVxcdTAwM2V0eF9xcFxcdFxcdD0gbmV3X3R4O1xcbitcXHRvdXRfbmV3LVxcdTAwM2VyeHFzXFx0XFx0PSBuZXdfcng7XFxuK1xcdG91dF9uZXctXFx1MDAzZWluZGlyX3RhYmxlXFx0PSBzY3JhdGNoLVxcdTAwM2VpbmRpcl90YWJsZTtcXG4rXFx0b3V0X25ldy1cXHUwMDNlaW5kaXJfdGFibGVfc3pcXHQ9IHNjcmF0Y2gtXFx1MDAzZWluZGlyX3RhYmxlX3N6O1xcbitcXHRvdXRfbmV3LVxcdTAwM2VyeG9ial90YWJsZVxcdD0gc2NyYXRjaC1cXHUwMDNlcnhvYmpfdGFibGU7XFxuK1xcdG91dF9uZXctXFx1MDAzZWRlZmF1bHRfcnhvYmpcXHQ9IGFwYy1cXHUwMDNlcnhxc1swXS1cXHUwMDNlcnhvYmo7XFxuK1xcdG91dF9uZXctXFx1MDAzZW51bV9xdWV1ZXNcXHQ9IG5ld19jb3VudDtcXG4rXFx0b3V0X25ldy1cXHUwMDNlcnhfcXVldWVfc2l6ZVxcdD0gYXBjLVxcdTAwM2VyeF9xdWV1ZV9zaXplO1xcbitcXHRvdXRfbmV3LVxcdTAwM2V0eF9xdWV1ZV9zaXplXFx0PSBhcGMtXFx1MDAzZXR4X3F1ZXVlX3NpemU7XFxuK1xcdG91dF9uZXctXFx1MDAzZXByaXZfZmxhZ3NcXHQ9IGFwYy1cXHUwMDNlcHJpdl9mbGFncztcXG4rXFx0b3V0X25ldy1cXHUwMDNlbXR1XFx0XFx0PSBhcGMtXFx1MDAzZWNvbmZpZ3VyZWRfbXR1O1xcbitcXHRvdXRfbmV3LVxcdTAwM2VicGZfcHJvZ1xcdD0gYXBjLVxcdTAwM2VicGZfcHJvZztcXG4rXFx0b3V0X25ldy1cXHUwMDNlcnhmaF9pbmRpcl9sb3N0ID0gaW5kaXJfbG9zdDtcXG4rXFxuK1xcdHNjcmF0Y2gtXFx1MDAzZWluZGlyX3RhYmxlXFx0PSBOVUxMO1xcbitcXHRzY3JhdGNoLVxcdTAwM2VyeG9ial90YWJsZVxcdD0gTlVMTDtcXG4rXFxuK1xcdG1lbXNldChvdXRfdGFpbCwgMCwgc2l6ZW9mKCpvdXRfdGFpbCkpO1xcbitcXHRvdXRfdGFpbC1cXHUwMDNldHhfcXBcXHRcXHQ9IHRhaWxfdHg7XFxuK1xcdG91dF90YWlsLVxcdTAwM2VyeHFzXFx0XFx0PSB0YWlsX3J4O1xcbitcXHRvdXRfdGFpbC1cXHUwMDNlZGVmYXVsdF9yeG9ialxcdD0gSU5WQUxJRF9NQU5BX0hBTkRMRTtcXG4rXFx0b3V0X3RhaWwtXFx1MDAzZW51bV9xdWV1ZXNcXHQ9IHRhaWxfY291bnQ7XFxuK1xcdG91dF90YWlsLVxcdTAwM2VyeF9xdWV1ZV9zaXplXFx0PSBhcGMtXFx1MDAzZXJ4X3F1ZXVlX3NpemU7XFxuK1xcdG91dF90YWlsLVxcdTAwM2V0eF9xdWV1ZV9zaXplXFx0PSBhcGMtXFx1MDAzZXR4X3F1ZXVlX3NpemU7XFxuK1xcdG91dF90YWlsLVxcdTAwM2Vwcml2X2ZsYWdzXFx0PSBhcGMtXFx1MDAzZXByaXZfZmxhZ3M7XFxuK1xcdG91dF90YWlsLVxcdTAwM2VtdHVcXHRcXHQ9IGFwYy1cXHUwMDNlY29uZmlndXJlZF9tdHU7XFxuK1xcdG91dF90YWlsLVxcdTAwM2VicGZfcHJvZ1xcdD0gYXBjLVxcdTAwM2VicGZfcHJvZztcXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rZnJlZV9hcnJheXM6XFxuK1xcdGtmcmVlKG5ld190eCk7XFxuK1xcdGtmcmVlKG5ld19yeCk7XFxuK1xcdGtmcmVlKHRhaWxfdHgpO1xcbitcXHRrZnJlZSh0YWlsX3J4KTtcXG4rXFx0bWFuYV9jbGVhbnVwX2luZGlyX3RhYmxlKHNjcmF0Y2gpO1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbisvKiBGcmVlIGNvbnRhaW5lcnMgb25seTsgdGhlIGxpdmUgcG9ydCBzdGlsbCBvd25zIHRoZSBxdWV1ZXMuICovXFxuK3ZvaWQgbWFuYV9kaXNjYXJkX3NwbGl0KHN0cnVjdCBtYW5hX3FzZXQgKm5ld3EsIHN0cnVjdCBtYW5hX3FzZXQgKnRhaWxxKVxcbit7XFxuK1xcdGtmcmVlKG5ld3EtXFx1MDAzZXR4X3FwKTtcXG4rXFx0a2ZyZWUobmV3cS1cXHUwMDNlcnhxcyk7XFxuK1xcdGtmcmVlKG5ld3EtXFx1MDAzZWluZGlyX3RhYmxlKTtcXG4rXFx0a2ZyZWUobmV3cS1cXHUwMDNlcnhvYmpfdGFibGUpO1xcbitcXHRrZnJlZSh0YWlscS1cXHUwMDNldHhfcXApO1xcbitcXHRrZnJlZSh0YWlscS1cXHUwMDNlcnhxcyk7XFxuK1xcdG1lbXNldChuZXdxLCAwLCBzaXplb2YoKm5ld3EpKTtcXG4rXFx0bWVtc2V0KHRhaWxxLCAwLCBzaXplb2YoKnRhaWxxKSk7XFxuK31cXG4rXFxuKy8qIENhcnJ5IGV4aXN0aW5nIHF1ZXVlcyBpbnRvIEBvdXRfbmV3OyBhbGxvY2F0ZSBvbmx5IHRoZSB0YWlsLiBAb3V0X2ZyZXNoXFxuKyAqIGlzb2xhdGVzIG5ldyBxdWV1ZXMgZm9yIGNsZWFudXAgYWZ0ZXIgYSBmYWlsZWQgcHVibGlzaC5cXG4rICovXFxuK2ludCBtYW5hX2dyb3dfcXNldChzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcXG4rXFx0XFx0ICAgc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICpzY3JhdGNoLCB1bnNpZ25lZCBpbnQgbmV3X2NvdW50LFxcbitcXHRcXHQgICBzdHJ1Y3QgbWFuYV9xc2V0ICpvdXRfbmV3LCBzdHJ1Y3QgbWFuYV9xc2V0ICpvdXRfZnJlc2gpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IG9sZF9jb3VudCA9IGFwYy1cXHUwMDNlbnVtX3F1ZXVlcztcXG4rXFx0c3RydWN0IG1hbmFfdHhfcXAgKipuZXdfdHgsICoqZnJlc2hfdHg7XFxuK1xcdHN0cnVjdCBtYW5hX3J4cSAqKm5ld19yeCwgKipmcmVzaF9yeDtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBhcGMtXFx1MDAzZW5kZXY7XFxuK1xcdHVuc2lnbmVkIGludCBmcmVzaF9jb3VudDtcXG4rXFx0Ym9vbCBpbmRpcl9sb3N0O1xcbitcXHR1bnNpZ25lZCBpbnQgaTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdEFTU0VSVF9SVE5MKCk7XFxuK1xcbitcXHRpZiAoV0FSTl9PTihuZXdfY291bnQgXFx1MDAzYz0gb2xkX2NvdW50KSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGlmIChXQVJOX09OKCFhcGMtXFx1MDAzZXR4X3FwIHx8ICFhcGMtXFx1MDAzZXJ4cXMpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGZyZXNoX2NvdW50ID0gbmV3X2NvdW50IC0gb2xkX2NvdW50O1xcbitcXG4rXFx0bmV3X3R4ID0ga3phbGxvY19vYmpzKHN0cnVjdCBtYW5hX3R4X3FwICosIG5ld19jb3VudCk7XFxuK1xcdG5ld19yeCA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgbWFuYV9yeHEgKiwgbmV3X2NvdW50KTtcXG4rXFx0ZnJlc2hfdHggPSBremFsbG9jX29ianMoc3RydWN0IG1hbmFfdHhfcXAgKiwgZnJlc2hfY291bnQpO1xcbitcXHRmcmVzaF9yeCA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgbWFuYV9yeHEgKiwgZnJlc2hfY291bnQpO1xcbitcXHRpZiAoIW5ld190eCB8fCAhbmV3X3J4IHx8ICFmcmVzaF90eCB8fCAhZnJlc2hfcngpIHtcXG4rXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byBmcmVlX2FycmF5cztcXG4rXFx0fVxcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG9sZF9jb3VudDsgaSsrKSB7XFxuK1xcdFxcdG5ld190eFtpXSA9IGFwYy1cXHUwMDNldHhfcXBbaV07XFxuK1xcdFxcdG5ld19yeFtpXSA9IGFwYy1cXHUwMDNlcnhxc1tpXTtcXG4rXFx0fVxcbitcXG4rXFx0c2NyYXRjaC1cXHUwMDNlbnVtX3F1ZXVlcyA9IG5ld19jb3VudDtcXG4rXFx0c2NyYXRjaC1cXHUwMDNldHhfcXAgPSBuZXdfdHg7XFxuK1xcdHNjcmF0Y2gtXFx1MDAzZXJ4cXMgPSBuZXdfcng7XFxuK1xcbitcXHRlcnIgPSBtYW5hX3Jzc190YWJsZV9hbGxvYyhzY3JhdGNoKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBmcmVlX2FycmF5cztcXG4rXFxuK1xcdGVyciA9IG1hbmFfZ3Jvd19lcXMoYXBjLCBuZXdfY291bnQpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGNsZWFudXBfcnNzO1xcbitcXG4rXFx0c2NyYXRjaC1cXHUwMDNlZXFzID0gYXBjLVxcdTAwM2VlcXM7XFxuK1xcdHNjcmF0Y2gtXFx1MDAzZW51bV9lcXMgPSBhcGMtXFx1MDAzZW51bV9lcXM7XFxuK1xcbitcXHRlcnIgPSBtYW5hX2NyZWF0ZV90eHEoc2NyYXRjaCwgbmRldiwgb2xkX2NvdW50KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBjbGVhbnVwX3JzcztcXG4rXFxuK1xcdGVyciA9IG1hbmFfYWRkX3J4X3F1ZXVlcyhzY3JhdGNoLCBuZGV2LCBvbGRfY291bnQpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGNsZWFudXBfcnhxO1xcbitcXG4rXFx0aWYgKG1hbmFfcnNzX3RhYmxlX2tlZXAoYXBjLCBuZXdfY291bnQsIFxcdTAwMjZpbmRpcl9sb3N0KSlcXG4rXFx0XFx0bWVtY3B5KHNjcmF0Y2gtXFx1MDAzZWluZGlyX3RhYmxlLCBhcGMtXFx1MDAzZWluZGlyX3RhYmxlLFxcbitcXHRcXHQgICAgICAgYXBjLVxcdTAwM2VpbmRpcl90YWJsZV9zeiAqIHNpemVvZigqYXBjLVxcdTAwM2VpbmRpcl90YWJsZSkpO1xcbitcXHRlbHNlXFxuK1xcdFxcdG1hbmFfcnNzX3RhYmxlX2luaXQoc2NyYXRjaCk7XFxuK1xcbitcXHRtYW5hX3FzZXRfc25hcHNob3Qoc2NyYXRjaCwgb3V0X25ldyk7XFxuK1xcdG91dF9uZXctXFx1MDAzZXJ4ZmhfaW5kaXJfbG9zdCA9IGluZGlyX2xvc3Q7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZnJlc2hfY291bnQ7IGkrKykge1xcbitcXHRcXHRmcmVzaF90eFtpXSA9IG5ld190eFtvbGRfY291bnQgKyBpXTtcXG4rXFx0XFx0ZnJlc2hfcnhbaV0gPSBuZXdfcnhbb2xkX2NvdW50ICsgaV07XFxuK1xcdH1cXG4rXFxuK1xcdG1lbXNldChvdXRfZnJlc2gsIDAsIHNpemVvZigqb3V0X2ZyZXNoKSk7XFxuK1xcdG91dF9mcmVzaC1cXHUwMDNldHhfcXBcXHQ9IGZyZXNoX3R4O1xcbitcXHRvdXRfZnJlc2gtXFx1MDAzZXJ4cXNcXHRcXHQ9IGZyZXNoX3J4O1xcbitcXHRvdXRfZnJlc2gtXFx1MDAzZWRlZmF1bHRfcnhvYmogPSBJTlZBTElEX01BTkFfSEFORExFO1xcbitcXHRvdXRfZnJlc2gtXFx1MDAzZW51bV9xdWV1ZXNcXHQ9IGZyZXNoX2NvdW50O1xcbitcXHRvdXRfZnJlc2gtXFx1MDAzZXJ4X3F1ZXVlX3NpemUgPSBhcGMtXFx1MDAzZXJ4X3F1ZXVlX3NpemU7XFxuK1xcdG91dF9mcmVzaC1cXHUwMDNldHhfcXVldWVfc2l6ZSA9IGFwYy1cXHUwMDNldHhfcXVldWVfc2l6ZTtcXG4rXFx0b3V0X2ZyZXNoLVxcdTAwM2Vwcml2X2ZsYWdzXFx0PSBhcGMtXFx1MDAzZXByaXZfZmxhZ3M7XFxuK1xcdG91dF9mcmVzaC1cXHUwMDNlbXR1XFx0XFx0PSBhcGMtXFx1MDAzZWNvbmZpZ3VyZWRfbXR1O1xcbitcXHRvdXRfZnJlc2gtXFx1MDAzZWJwZl9wcm9nXFx0PSBhcGMtXFx1MDAzZWJwZl9wcm9nO1xcbitcXG4rXFx0LyogVGFrZSBYRFAgcmVmcyBvbiBmcmVzaCBSWFFzIG9ubHkuIE9uIHRoZSBtZXJnZWQgc2V0LFxcbitcXHQgKiBtYW5hX2Nobl9zZXR4ZHAoKSByZXR1cm5zIGVhcmx5IG9uIHRoZSBjYXJyaWVkIHJ4cXNbMF0uXFxuK1xcdCAqL1xcbitcXHRtYW5hX3FzZXRfaW5zdGFsbChzY3JhdGNoLCBvdXRfZnJlc2gpO1xcbitcXHRtYW5hX2Nobl9zZXR4ZHAoc2NyYXRjaCwgbWFuYV94ZHBfZ2V0KGFwYykpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitjbGVhbnVwX3J4cTpcXG4rXFx0bWFuYV9kZXN0cm95X3J4cXNfZnJvbShzY3JhdGNoLCBvbGRfY291bnQpO1xcbitcXHRtYW5hX2Rlc3Ryb3lfdHhxX2Zyb20oc2NyYXRjaCwgb2xkX2NvdW50KTtcXG4rY2xlYW51cF9yc3M6XFxuK1xcdG1hbmFfY2xlYW51cF9pbmRpcl90YWJsZShzY3JhdGNoKTtcXG4rZnJlZV9hcnJheXM6XFxuK1xcdC8qIEZyZWUgY29udGFpbmVycyBvbmx5OyBjYXJyaWVkIHF1ZXVlcyByZW1haW4gbGl2ZS4gKi9cXG4rXFx0c2NyYXRjaC1cXHUwMDNldHhfcXAgPSBOVUxMO1xcbitcXHRzY3JhdGNoLVxcdTAwM2VyeHFzID0gTlVMTDtcXG4rXFx0a2ZyZWUobmV3X3R4KTtcXG4rXFx0a2ZyZWUobmV3X3J4KTtcXG4rXFx0a2ZyZWUoZnJlc2hfdHgpO1xcbitcXHRrZnJlZShmcmVzaF9yeCk7XFxuK1xcbitcXHRtYW5hX3Nocmlua19lcXMoYXBjLCBhcGMtXFx1MDAzZW51bV9xdWV1ZXMpO1xcbitcXG4rXFx0bmV0ZGV2X2VycihuZGV2LCBcXFwiJXMobnVtX3F1ZXVlcz0ldSkgZmFpbGVkOiAlZFxcXFxuXFxcIiwgX19mdW5jX18sXFxuK1xcdFxcdCAgIG5ld19jb3VudCwgZXJyKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rLyogRnJlZSBtZXJnZWQgY29udGFpbmVycyBvbmx5LCBub3QgY2FycmllZCBxdWV1ZXMuIFRoZSBjYWxsZXIgbXVzdCByZXRpcmUgZnJlc2hcXG4rICogcXVldWVzIHNlcGFyYXRlbHkuXFxuKyAqL1xcbit2b2lkIG1hbmFfZGlzY2FyZF9ncm93KHN0cnVjdCBtYW5hX3FzZXQgKm5ld3EpXFxuK3tcXG4rXFx0a2ZyZWUobmV3cS1cXHUwMDNldHhfcXApO1xcbitcXHRrZnJlZShuZXdxLVxcdTAwM2VyeHFzKTtcXG4rXFx0a2ZyZWUobmV3cS1cXHUwMDNlaW5kaXJfdGFibGUpO1xcbitcXHRrZnJlZShuZXdxLVxcdTAwM2VyeG9ial90YWJsZSk7XFxuK1xcdG1lbXNldChuZXdxLCAwLCBzaXplb2YoKm5ld3EpKTtcXG4rfVxcbitcXG4rLyogUmVidWlsZCBhdCB0aGUgY3VycmVudCBjb3VudDsgcmVzaXplIHVzZXMgc3BsaXQvZ3Jvdy4gKi9cXG4raW50IG1hbmFfYWxsb2NfcXNldChzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcXG4rXFx0XFx0ICAgIHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqc2NyYXRjaCxcXG4rXFx0XFx0ICAgIHVuc2lnbmVkIGludCByeF9xdWV1ZV9zaXplLCB1bnNpZ25lZCBpbnQgdHhfcXVldWVfc2l6ZSxcXG4rXFx0XFx0ICAgIHUzMiBwcml2X2ZsYWdzLCBpbnQgbXR1LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLFxcbitcXHRcXHQgICAgc3RydWN0IG1hbmFfcXNldCAqb3V0KVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gc2NyYXRjaC1cXHUwMDNlbmRldjtcXG4rXFx0Ym9vbCBpbmRpcl9sb3N0O1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0QVNTRVJUX1JUTkwoKTtcXG4rXFxuK1xcdHNjcmF0Y2gtXFx1MDAzZW51bV9xdWV1ZXNcXHQ9IGFwYy1cXHUwMDNlbnVtX3F1ZXVlcztcXG4rXFx0c2NyYXRjaC1cXHUwMDNlcnhfcXVldWVfc2l6ZVxcdD0gcnhfcXVldWVfc2l6ZTtcXG4rXFx0c2NyYXRjaC1cXHUwMDNldHhfcXVldWVfc2l6ZVxcdD0gdHhfcXVldWVfc2l6ZTtcXG4rXFx0c2NyYXRjaC1cXHUwMDNlcHJpdl9mbGFnc1xcdD0gcHJpdl9mbGFncztcXG4rXFxuK1xcdHNjcmF0Y2gtXFx1MDAzZWNvbmZpZ3VyZWRfbXR1XFx0PSBtdHU7XFxuK1xcdHNjcmF0Y2gtXFx1MDAzZWJwZl9wcm9nXFx0PSBicGZfcHJvZztcXG4rXFxuK1xcdGVyciA9IG1hbmFfaW5pdF9wb3J0X2NvbnRleHQoc2NyYXRjaCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gb3V0X2VycjtcXG4rXFxuK1xcdGVyciA9IG1hbmFfcnNzX3RhYmxlX2FsbG9jKHNjcmF0Y2gpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGNsZWFudXBfcnhxX2FycmF5O1xcbitcXG4rXFx0LyogUmV1c2UgdGhlIGV4aXN0aW5nIEVRIHBvb2w7IHRoZSBxdWV1ZSBjb3VudCBpcyB1bmNoYW5nZWQuICovXFxuK1xcdHNjcmF0Y2gtXFx1MDAzZWVxcyA9IGFwYy1cXHUwMDNlZXFzO1xcbitcXHRzY3JhdGNoLVxcdTAwM2VudW1fZXFzID0gYXBjLVxcdTAwM2VudW1fZXFzO1xcbitcXG4rXFx0ZXJyID0gbWFuYV9jcmVhdGVfdHhxKHNjcmF0Y2gsIG5kZXYsIDApO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGNsZWFudXBfcnNzO1xcbitcXG4rXFx0ZXJyID0gbWFuYV9hZGRfcnhfcXVldWVzKHNjcmF0Y2gsIG5kZXYsIDApO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGNsZWFudXBfcnhxO1xcbitcXG4rXFx0aWYgKG1hbmFfcnNzX3RhYmxlX2tlZXAoYXBjLCBzY3JhdGNoLVxcdTAwM2VudW1fcXVldWVzLCBcXHUwMDI2aW5kaXJfbG9zdCkpXFxuK1xcdFxcdG1lbWNweShzY3JhdGNoLVxcdTAwM2VpbmRpcl90YWJsZSwgYXBjLVxcdTAwM2VpbmRpcl90YWJsZSxcXG4rXFx0XFx0ICAgICAgIGFwYy1cXHUwMDNlaW5kaXJfdGFibGVfc3ogKiBzaXplb2YoKmFwYy1cXHUwMDNlaW5kaXJfdGFibGUpKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRtYW5hX3Jzc190YWJsZV9pbml0KHNjcmF0Y2gpO1xcbitcXG4rXFx0bWFuYV9xc2V0X3NuYXBzaG90KHNjcmF0Y2gsIG91dCk7XFxuK1xcdG91dC1cXHUwMDNlcnhmaF9pbmRpcl9sb3N0ID0gaW5kaXJfbG9zdDtcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitjbGVhbnVwX3J4cTpcXG4rXFx0bWFuYV9kZXN0cm95X3J4cXMoc2NyYXRjaCk7XFxuK1xcdG1hbmFfZGVzdHJveV90eHEoc2NyYXRjaCk7XFxuK2NsZWFudXBfcnNzOlxcbitcXHRtYW5hX2NsZWFudXBfaW5kaXJfdGFibGUoc2NyYXRjaCk7XFxuK2NsZWFudXBfcnhxX2FycmF5OlxcbitcXHRrZnJlZShzY3JhdGNoLVxcdTAwM2VyeHFzKTtcXG4rXFx0c2NyYXRjaC1cXHUwMDNlcnhxcyA9IE5VTEw7XFxuK291dF9lcnI6XFxuK1xcdG5ldGRldl9lcnIobmRldiwgXFxcIiVzKG51bV9xdWV1ZXM9JXUpIGZhaWxlZDogJWRcXFxcblxcXCIsIF9fZnVuY19fLFxcbitcXHRcXHQgICBhcGMtXFx1MDAzZW51bV9xdWV1ZXMsIGVycik7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuKy8qIERlc3Ryb3kgY2FsbGVyLW93bmVkIENRcyBiZWZvcmUgY2xvc2luZyB0aGlzIGRlYWQtZW5kIHBvcnQ6IGNsb3NpbmcgYWxzb1xcbisgKiBmcmVlcyB0aGUgc2hhcmVkIEVRIHBvb2wuIFJlcXVpcmVzIFJUTkwuXFxuKyAqL1xcbit2b2lkIG1hbmFfcHVibGlzaF9jbG9zZV9pZl9uZWVkZWQoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpXFxuK3tcXG4rXFx0QVNTRVJUX1JUTkwoKTtcXG4rXFxuK1xcdGlmICghYXBjLVxcdTAwM2VwdWJsaXNoX2RlYWRfZW5kKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRhcGMtXFx1MDAzZXB1Ymxpc2hfZGVhZF9lbmQgPSBmYWxzZTtcXG4rXFxuK1xcdGlmIChtYW5hX2RlYWxsb2NfcXVldWVzKGFwYy1cXHUwMDNlbmRldikpXFxuK1xcdFxcdG5ldGRldl9lcnIoYXBjLVxcdTAwM2VuZGV2LFxcbitcXHRcXHRcXHQgICBcXFwiZmFpbGVkIHRvIGNsb3NlIHRoZSBwb3J0IGFmdGVyIGEgZmFpbGVkIHJvbGxiYWNrXFxcXG5cXFwiKTtcXG4rfVxcbitcXG4rLyogQ2FycmllZC1vdmVyIHF1ZXVlcyBtYXkgc3RpbGwgaGF2ZSBmdWxsIHJpbmdzLiAqL1xcbitzdGF0aWMgdm9pZCBtYW5hX3N0YXJ0X3R4cXMoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpXFxuK3tcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBhcGMtXFx1MDAzZW5kZXY7XFxuK1xcdHVuc2lnbmVkIGludCBpO1xcbitcXG4rXFx0aWYgKCFhcGMtXFx1MDAzZXR4X3FwKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBPcmRlciBwb3J0X2lzX3VwPXRydWUgYmVmb3JlIHJpbmcgcmVhZHMgdG8gYXZvaWQgYSBtaXNzZWQgd2FrZXVwLlxcbitcXHQgKiBQYWlyIHdpdGggbWFuYV9wb2xsX3R4X2NxKCkncyBmdWxsIGJhcnJpZXIgYWZ0ZXIgaXRzIHRhaWwgdXBkYXRlLlxcbitcXHQgKi9cXG4rXFx0c21wX21iKCk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYXBjLVxcdTAwM2VudW1fcXVldWVzOyBpKyspIHtcXG4rXFx0XFx0aWYgKCFhcGMtXFx1MDAzZXR4X3FwW2ldKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGlmIChtYW5hX2Nhbl90eChhcGMtXFx1MDAzZXR4X3FwW2ldLVxcdTAwM2V0eHEuZ2RtYV9zcSkpXFxuK1xcdFxcdFxcdG5ldGlmX3R4X3dha2VfcXVldWUobmV0ZGV2X2dldF90eF9xdWV1ZShuZGV2LCBpKSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rLyogUmV0aXJpbmcgY29tcGxldGlvbnMgbXVzdCBub3Qgd2FrZSByZXBsYWNlbWVudCBxdWV1ZXMuIE1hcmsgdGhlIGxlYXZpbmcgc2V0XFxuKyAqIGJlZm9yZSB1bm1hcmtpbmcgdGhlIGluY29taW5nIHNldC5cXG4rICovXFxuK3N0YXRpYyB2b2lkIG1hbmFfcXNldF9zZXRfcmV0aXJpbmcoc3RydWN0IG1hbmFfcXNldCAqcXNldCxcXG4rXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG1hbmFfcXNldCAqa2VlcCwgYm9vbCByZXRpcmluZylcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgcTtcXG4rXFxuK1xcdGZvciAocSA9IDA7IHEgXFx1MDAzYyBxc2V0LVxcdTAwM2VudW1fcXVldWVzOyBxKyspIHtcXG4rXFx0XFx0aWYgKHFzZXQtXFx1MDAzZXR4X3FwIFxcdTAwMjZcXHUwMDI2IHFzZXQtXFx1MDAzZXR4X3FwW3FdKVxcbitcXHRcXHRcXHRXUklURV9PTkNFKHFzZXQtXFx1MDAzZXR4X3FwW3FdLVxcdTAwM2V0eHEucmV0aXJpbmcsIHJldGlyaW5nKTtcXG4rXFxuK1xcdFxcdGlmICghcXNldC1cXHUwMDNlcnhxcyB8fCAhcXNldC1cXHUwMDNlcnhxc1txXSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHQvKiBDYXJyaWVkIFJYUXMgcmVtYWluIHRoZSBzb2xlIHBvbGwgd3JpdGVycyBvZiBzaGFyZWQgc2xvdHMuICovXFxuK1xcdFxcdGlmIChyZXRpcmluZyBcXHUwMDI2XFx1MDAyNiBrZWVwIFxcdTAwMjZcXHUwMDI2IHEgXFx1MDAzYyBrZWVwLVxcdTAwM2VudW1fcXVldWVzIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBrZWVwLVxcdTAwM2VyeHFzIFxcdTAwMjZcXHUwMDI2IGtlZXAtXFx1MDAzZXJ4cXNbcV0gPT0gcXNldC1cXHUwMDNlcnhxc1txXSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHQvKiBTd2l0Y2ggdG8gZHJhaW5fc3RhdHM7IGhhbmQgb2ZmIHNoYXJlZCBzbG90cyBhZnRlciBhIGdyYWNlXFxuK1xcdFxcdCAqIHBlcmlvZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdFdSSVRFX09OQ0UocXNldC1cXHUwMDNlcnhxc1txXS1cXHUwMDNlcmV0aXJpbmcsIHJldGlyaW5nKTtcXG4rXFx0fVxcbit9XFxuK1xcbisvKiBMZWF2ZSBUWCBzdG9wcGVkIGFuZCByZXF1ZXN0IFJYIGRpc2FibGU7IHN0ZWVyaW5nIG1heSBiZSB1bnJlY292ZXJhYmxlLiAqL1xcbitzdGF0aWMgdm9pZCBtYW5hX3B1Ymxpc2hfZ2l2ZV91cChzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYylcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0YXBjLVxcdTAwM2Vyc3Nfc3RhdGUgPSBUUklfU1RBVEVfRkFMU0U7XFxuK1xcbitcXHRlcnIgPSBtYW5hX2Rpc2FibGVfdnBvcnRfcngoYXBjKTtcXG4rXFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiBtYW5hX2VuX25lZWRfbG9nKGFwYywgZXJyKSlcXG4rXFx0XFx0bmV0ZGV2X2VycihhcGMtXFx1MDAzZW5kZXYsIFxcXCJmYWlsZWQgdG8gZGlzYWJsZSB2UG9ydCBSWDogJWRcXFxcblxcXCIsIGVycik7XFxuK1xcbitcXHRhcGMtXFx1MDAzZWNhcnJpZXJfZm9yY2VkX29mZiA9IG5ldGlmX2NhcnJpZXJfb2soYXBjLVxcdTAwM2VuZGV2KTtcXG4rXFx0bmV0aWZfY2Fycmllcl9vZmYoYXBjLVxcdTAwM2VuZGV2KTtcXG4rXFx0YXBjLVxcdTAwM2VwdWJsaXNoX2RlYWRfZW5kID0gdHJ1ZTtcXG4rfVxcbitcXG4rLyogS2VlcCB0aGUgUlggY291bnQgaGlnaCB1bnRpbCByZXRpcmluZyBSUXMgc3RvcCBkZWxpdmVyaW5nIHRoZWlyIGluZGljZXMuICovXFxuK3N0YXRpYyBpbnQgbWFuYV9yYWlzZV9yZWFsX251bV9yeChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdW5zaWduZWQgaW50IGNvdW50KVxcbit7XFxuK1xcdGlmIChjb3VudCBcXHUwMDNjPSBuZGV2LVxcdTAwM2VyZWFsX251bV9yeF9xdWV1ZXMpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIG5ldGlmX3NldF9yZWFsX251bV9yeF9xdWV1ZXMobmRldiwgY291bnQpO1xcbit9XFxuK1xcbisvKiBQdWJsaXNoIHVuZGVyIFJUTkwgd2l0aCBUWCBnYXRlZC4gQW4gZXJyb3IgcmVzdG9yZXMgb2xkIHBvaW50ZXJzLCBub3RcXG4rICogbmVjZXNzYXJpbHkgc2VydmljZS4gRnJlZSBvbmx5IG93bmVkIHF1ZXVlcy5cXG4rICovXFxuK2ludCBtYW5hX3B1Ymxpc2hfcXNldChzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgc3RydWN0IG1hbmFfcXNldCAqbmV3cSxcXG4rXFx0XFx0ICAgICAgc3RydWN0IG1hbmFfcXNldCAqb3V0X29sZClcXG4re1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGFwYy1cXHUwMDNlbmRldjtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdEFTU0VSVF9SVE5MKCk7XFxuK1xcbitcXHQvKiBDbG9zZSB0aGUgWERQIGdhdGUgYmVmb3JlIHN0b3BwaW5nIFRYIHF1ZXVlcy4gUGFpciB3aXRoXFxuK1xcdCAqIG1hbmFfcG9sbF90eF9jcSgpJ3Mgc21wX3JtYigpIHRvIHByZXZlbnQgbWlkLXN3YXAgd2FrZXVwcy5cXG4rXFx0ICovXFxuK1xcdFdSSVRFX09OQ0UoYXBjLVxcdTAwM2Vwb3J0X2lzX3VwLCBmYWxzZSk7XFxuK1xcbitcXHQvKiBFbnN1cmUgcG9ydCBzdGF0ZSB1cGRhdGVkIGJlZm9yZSB0eHEgc3RhdGUgKi9cXG4rXFx0c21wX3dtYigpO1xcbitcXG4rXFx0bmV0aWZfdHhfZGlzYWJsZShuZGV2KTtcXG4rXFxuK1xcdG1hbmFfcXNldF9zbmFwc2hvdChhcGMsIG91dF9vbGQpO1xcbitcXG4rXFx0LyogTWFyayBiZWZvcmUgdGhlIGdyYWNlIHBlcmlvZCBzbyBvbGQgY29tcGxldGlvbnMgY2Fubm90IHdha2UgdGhlXFxuK1xcdCAqIHJlcGxhY2VtZW50J3Mgc3RvcHBlZCBxdWV1ZS5cXG4rXFx0ICovXFxuK1xcdG1hbmFfcXNldF9zZXRfcmV0aXJpbmcob3V0X29sZCwgbmV3cSwgdHJ1ZSk7XFxuK1xcbitcXHQvKiBEcmFpbiBUWC9YRFAgcmVhZGVycyBwYXN0IHRoZSBnYXRlIGFuZCBwb2xscyBtaXNzaW5nIHJldGlyaW5nLiAqL1xcbitcXHRzeW5jaHJvbml6ZV9uZXQoKTtcXG4rXFxuK1xcdG1hbmFfcXNldF9zZXRfcmV0aXJpbmcobmV3cSwgTlVMTCwgZmFsc2UpO1xcbitcXG4rXFx0bWFuYV9xc2V0X2luc3RhbGwoYXBjLCBuZXdxKTtcXG4rXFx0YXBjLVxcdTAwM2Vyc3Nfc3RhdGUgPSBhcGMtXFx1MDAzZW51bV9xdWV1ZXMgXFx1MDAzZSAxID8gVFJJX1NUQVRFX1RSVUUgOiBUUklfU1RBVEVfRkFMU0U7XFxuK1xcbitcXHRlcnIgPSBuZXRpZl9zZXRfcmVhbF9udW1fdHhfcXVldWVzKG5kZXYsIGFwYy1cXHUwMDNlbnVtX3F1ZXVlcyk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gcm9sbGJhY2s7XFxuK1xcbitcXHRlcnIgPSBtYW5hX3JhaXNlX3JlYWxfbnVtX3J4KG5kZXYsIGFwYy1cXHUwMDNlbnVtX3F1ZXVlcyk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gcm9sbGJhY2s7XFxuK1xcbitcXHQvKiBJbnN0YWxsIFhEUCBiZWZvcmUgc3RlZXJpbmcgcmVhY2hlcyB0aGUgaW5jb21pbmcgUlhRcy4gKi9cXG4rXFx0bWFuYV9jaG5fc2V0eGRwKGFwYywgbWFuYV94ZHBfZ2V0KGFwYykpO1xcbitcXG4rXFx0ZXJyID0gbWFuYV9jb25maWdfcnNzKGFwYywgVFJJX1NUQVRFX1RSVUUsIHRydWUsIHRydWUpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIHJvbGxiYWNrO1xcbitcXG4rXFx0V1JJVEVfT05DRShuZGV2LVxcdTAwM2VtdHUsIGFwYy1cXHUwMDNlY29uZmlndXJlZF9tdHUpO1xcbitcXG4rXFx0LyogUHVibGlzaCBmaWVsZHMgYmVmb3JlIG9wZW5pbmcgdGhlIGdhdGU7IHBhaXIgd2l0aCBUWC9YRFAgcmVhZFxcbitcXHQgKiBiYXJyaWVycy4gVGhlIHBvc3QtZ2F0ZSBmdWxsIGJhcnJpZXIgY2Fubm90IHJlcGxhY2UgdGhpcy5cXG4rXFx0ICovXFxuK1xcdHNtcF93bWIoKTtcXG4rXFxuK1xcdFdSSVRFX09OQ0UoYXBjLVxcdTAwM2Vwb3J0X2lzX3VwLCB0cnVlKTtcXG4rXFx0bWFuYV9zdGFydF90eHFzKGFwYyk7XFxuK1xcbitcXHQvKiBSZXBvcnQgYSBsb3N0IHVzZXIgdGFibGUgb25seSBhZnRlciBzdWNjZXNzZnVsIHB1YmxpY2F0aW9uLiAqL1xcbitcXHRpZiAobmV3cS1cXHUwMDNlcnhmaF9pbmRpcl9sb3N0KVxcbitcXHRcXHRldGh0b29sX3J4ZmhfaW5kaXJfbG9zdChuZGV2KTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rcm9sbGJhY2s6XFxuK1xcdG5ldGRldl9lcnIobmRldiwgXFxcIiVzIGZhaWxlZDogJWQsIHJlc3RvcmluZyBwcmV2aW91cyBxdWV1ZSBzZXRcXFxcblxcXCIsXFxuK1xcdFxcdCAgIF9fZnVuY19fLCBlcnIpO1xcbitcXG4rXFx0bWFuYV9xc2V0X3NldF9yZXRpcmluZyhuZXdxLCBvdXRfb2xkLCB0cnVlKTtcXG4rXFxuK1xcdC8qIFF1aWVzY2UgbmV3IHNoYXJlZC1zbG90IHdyaXRlcnMgYmVmb3JlIHJlc3RvcmluZyBvbGQgb25lcy4gKi9cXG4rXFx0c3luY2hyb25pemVfbmV0KCk7XFxuK1xcbitcXHRtYW5hX3FzZXRfc2V0X3JldGlyaW5nKG91dF9vbGQsIE5VTEwsIGZhbHNlKTtcXG4rXFxuK1xcdC8qIFF1aWVzY2Ugb2xkIGRyYWluX3N0YXRzIHdyaXRlcnMgYmVmb3JlIGZvbGRpbmcuICovXFxuK1xcdHN5bmNocm9uaXplX25ldCgpO1xcbitcXHRtYW5hX2ZvbGRfcXNldF9yeF9zdGF0cyhhcGMsIG91dF9vbGQpO1xcbitcXG4rXFx0bWFuYV9xc2V0X2luc3RhbGwoYXBjLCBvdXRfb2xkKTtcXG4rXFx0YXBjLVxcdTAwM2Vyc3Nfc3RhdGUgPSBhcGMtXFx1MDAzZW51bV9xdWV1ZXMgXFx1MDAzZSAxID8gVFJJX1NUQVRFX1RSVUUgOiBUUklfU1RBVEVfRkFMU0U7XFxuK1xcbitcXHRpZiAobmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcyhuZGV2LCBhcGMtXFx1MDAzZW51bV9xdWV1ZXMpIHx8XFxuK1xcdCAgICBtYW5hX3JhaXNlX3JlYWxfbnVtX3J4KG5kZXYsIGFwYy1cXHUwMDNlbnVtX3F1ZXVlcykpIHtcXG4rXFx0XFx0LyogSW5jb25zaXN0ZW50IHJlc3RvcmVkIHF1ZXVlIGNvdW50cyBwcm9oaWJpdCBUWDsgbGVhdmUgdGhlXFxuK1xcdFxcdCAqIHBvcnQgc3RvcHBlZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdG5ldGRldl9lcnIobmRldiwgXFxcImZhaWxlZCB0byByZXN0b3JlIHF1ZXVlIGNvdW50cywgY2xvc2luZyB0aGUgcG9ydFxcXFxuXFxcIik7XFxuK1xcdFxcdG1hbmFfcHVibGlzaF9naXZlX3VwKGFwYyk7XFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChtYW5hX2NvbmZpZ19yc3MoYXBjLCBUUklfU1RBVEVfVFJVRSwgdHJ1ZSwgdHJ1ZSkpIHtcXG4rXFx0XFx0LyogRG8gbm90IHJlb3BlbiBUWCB3aXRoIG1pc21hdGNoZWQgc3RlZXJpbmc7IFJYIGRpc2FibGUgaXNcXG4rXFx0XFx0ICogYmVzdC1lZmZvcnQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRuZXRkZXZfZXJyKG5kZXYsIFxcXCJmYWlsZWQgdG8gcmVzdG9yZSBSU1Mgc3RlZXJpbmcsIGNsb3NpbmcgdGhlIHBvcnRcXFxcblxcXCIpO1xcbitcXHRcXHRtYW5hX3B1Ymxpc2hfZ2l2ZV91cChhcGMpO1xcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRXUklURV9PTkNFKG5kZXYtXFx1MDAzZW10dSwgYXBjLVxcdTAwM2Vjb25maWd1cmVkX210dSk7XFxuK1xcbitcXHQvKiBQdWJsaXNoIHJlc3RvcmVkIGZpZWxkcyBiZWZvcmUgcmVvcGVuaW5nIHRoZSBnYXRlLCBhcyBvbiBzdWNjZXNzLiAqL1xcbitcXHRzbXBfd21iKCk7XFxuK1xcbitcXHRXUklURV9PTkNFKGFwYy1cXHUwMDNlcG9ydF9pc191cCwgdHJ1ZSk7XFxuK1xcdG1hbmFfc3RhcnRfdHhxcyhhcGMpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rLyogQ3JlYXRlIG1pc3NpbmcgZGVidWdmcyBub2RlcyBvbmNlIHJldGlyaW5nIG5hbWVzIGFyZSBnb25lLiAqL1xcbit2b2lkIG1hbmFfcXNldF9kZWJ1Z2ZzX3B1Ymxpc2goc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IGk7XFxuK1xcbitcXHRBU1NFUlRfUlROTCgpO1xcbitcXG4rXFx0aWYgKElTX0VSUl9PUl9OVUxMKGFwYy1cXHUwMDNlbWFuYV9wb3J0X2RlYnVnZnMpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYXBjLVxcdTAwM2VudW1fcXVldWVzOyBpKyspIHtcXG4rXFx0XFx0aWYgKGFwYy1cXHUwMDNldHhfcXAgXFx1MDAyNlxcdTAwMjYgYXBjLVxcdTAwM2V0eF9xcFtpXSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgSVNfRVJSX09SX05VTEwoYXBjLVxcdTAwM2V0eF9xcFtpXS1cXHUwMDNlbWFuYV90eF9kZWJ1Z2ZzKSlcXG4rXFx0XFx0XFx0bWFuYV9jcmVhdGVfdHhxX2RlYnVnZnMoYXBjLCBpKTtcXG4rXFxuK1xcdFxcdGlmIChhcGMtXFx1MDAzZXJ4cXMgXFx1MDAyNlxcdTAwMjYgYXBjLVxcdTAwM2VyeHFzW2ldIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBJU19FUlJfT1JfTlVMTChhcGMtXFx1MDAzZXJ4cXNbaV0tXFx1MDAzZW1hbmFfcnhfZGVidWdmcykpXFxuK1xcdFxcdFxcdG1hbmFfY3JlYXRlX3J4cV9kZWJ1Z2ZzKGFwYywgaSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rLyogVW5kZXIgUlROTCwgZnJlZSBvbmx5IHF1ZXVlcyBubyBsb25nZXIgc2hhcmVkIHdpdGggdGhlIGluc3RhbGxlZCBzZXQuICovXFxuK3ZvaWQgbWFuYV9mcmVlX3FzZXQoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICpzY3JhdGNoLCBzdHJ1Y3QgbWFuYV9xc2V0ICpxc2V0KVxcbit7XFxuK1xcdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjID0gbmV0ZGV2X3ByaXYoc2NyYXRjaC1cXHUwMDNlbmRldik7XFxuK1xcdHN0cnVjdCBicGZfcHJvZyAqcmV0aXJpbmdfcHJvZztcXG4rXFx0dW5zaWduZWQgaW50IHJldGlyaW5nX3F1ZXVlcztcXG4rXFxuK1xcdEFTU0VSVF9SVE5MKCk7XFxuK1xcbitcXHRpZiAoIXFzZXQtXFx1MDAzZXJ4cXMgXFx1MDAyNlxcdTAwMjYgIXFzZXQtXFx1MDAzZXR4X3FwKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAocXNldC1cXHUwMDNldHhfcXApIHtcXG4rXFx0XFx0dW5zaWduZWQgaW50IHE7XFxuK1xcbitcXHRcXHRmb3IgKHEgPSAwOyBxIFxcdTAwM2MgcXNldC1cXHUwMDNlbnVtX3F1ZXVlczsgcSsrKSB7XFxuK1xcdFxcdFxcdGlmIChxc2V0LVxcdTAwM2V0eF9xcFtxXSlcXG4rXFx0XFx0XFx0XFx0V1JJVEVfT05DRShxc2V0LVxcdTAwM2V0eF9xcFtxXS1cXHUwMDNldHhxLnJldGlyaW5nLCB0cnVlKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHQvKiBLZWVwIHJldGlyZWQgcXVldWVzIGFuZCBhcnJheXMgdGhyb3VnaCB0aGlzIGdyYWNlIHBlcmlvZDsgbG9jYWwgTkFQSVxcbitcXHQgKiBzeW5jaHJvbml6YXRpb24gZG9lcyBub3QgZHJhaW4gb3RoZXIgZGV2aWNlcycgWERQLlxcbitcXHQgKi9cXG4rXFx0c3luY2hyb25pemVfbmV0KCk7XFxuK1xcbitcXHRtYW5hX3FzZXRfaW5zdGFsbChzY3JhdGNoLCBxc2V0KTtcXG4rXFxuK1xcdC8qIEtlZXAgcmV0aXJpbmcgUlhRcycgWERQIHByb2dyYW1zIGFuZCByZWZlcmVuY2VzIHVudGlsIFJYIHRlYXJkb3duLlxcbitcXHQgKiBSZWFkIHRoZSBwcm9ncmFtIGZyb20gdGhlIHF1ZXVlcywgbm90IHF1ZXVlLXNldCBtZXRhZGF0YS5cXG4rXFx0ICovXFxuK1xcdHJldGlyaW5nX3Byb2cgPSBtYW5hX2Nobl94ZHBfcGVlayhzY3JhdGNoKTtcXG4rXFx0cmV0aXJpbmdfcXVldWVzID0gc2NyYXRjaC1cXHUwMDNlbnVtX3F1ZXVlcztcXG4rXFxuK1xcdC8qIERyYWluIFRYIGJlZm9yZSB1bm1hcHBpbmcgUlggYnVmZmVycy4gKi9cXG4rXFx0aWYgKG1hbmFfZHJhaW5fdHhxcyhzY3JhdGNoKSkge1xcbitcXHRcXHQvKiBGTFIgYWxzbyBkZXN0cm95cyB0aGUgSFdDOyByZWJ1aWxkaW5nIHBvcnRzIGlzIGJlc3QtZWZmb3J0LlxcbitcXHRcXHQgKiBUaGlzIHBhdGggZG9lcyBub3QgcmVpbml0aWFsaXplIHRoZSBkZXZpY2UuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRzdHJ1Y3QgbWFuYV9jb250ZXh0ICphYyA9IGFwYy1cXHUwMDNlYWM7XFxuK1xcdFxcdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqc2liO1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgaTtcXG4rXFxuK1xcdFxcdG5ldGRldl9lcnIoc2NyYXRjaC1cXHUwMDNlbmRldixcXG4rXFx0XFx0XFx0ICAgXFxcImRldmljZSByZXNldCB3aGlsZSByZXRpcmluZyBhIHF1ZXVlIHNldCwgc2NoZWR1bGluZyBwb3J0IHJlc2V0XFxcXG5cXFwiKTtcXG4rXFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBhYy1cXHUwMDNlbnVtX3BvcnRzOyBpKyspIHtcXG4rXFx0XFx0XFx0aWYgKCFhYy1cXHUwMDNlcG9ydHNbaV0pXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHRzaWIgPSBuZXRkZXZfcHJpdihhYy1cXHUwMDNlcG9ydHNbaV0pO1xcbitcXHRcXHRcXHRxdWV1ZV93b3JrKGFjLVxcdTAwM2VwZXJfcG9ydF9xdWV1ZV9yZXNldF93cSxcXG4rXFx0XFx0XFx0XFx0ICAgXFx1MDAyNnNpYi1cXHUwMDNlcXVldWVfcmVzZXRfd29yayk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0LyogRmVuY2UgUlFzIGJlZm9yZSB1bm1hcHBpbmcsIGJ1dCB0ZWFyZG93biBwcm9jZWVkcyBvbiBlcnJvcnMuICovXFxuK1xcdG1hbmFfZmVuY2VfcnFzKHNjcmF0Y2gpO1xcbitcXG4rXFx0bWFuYV9kZXN0cm95X3J4cXMoc2NyYXRjaCk7XFxuK1xcbitcXHRtYW5hX2Nobl94ZHBfcmVsZWFzZShyZXRpcmluZ19wcm9nLCByZXRpcmluZ19xdWV1ZXMpO1xcbitcXG4rXFx0bWFuYV9kZXN0cm95X3R4cShzY3JhdGNoKTtcXG4rXFx0bWFuYV9jbGVhbnVwX2luZGlyX3RhYmxlKHNjcmF0Y2gpO1xcbitcXHRrZnJlZShzY3JhdGNoLVxcdTAwM2VyeHFzKTtcXG4rXFx0c2NyYXRjaC1cXHUwMDNlcnhxcyA9IE5VTEw7XFxuK1xcbitcXHRtZW1zZXQocXNldCwgMCwgc2l6ZW9mKCpxc2V0KSk7XFxuK1xcbitcXHQvKiBSZXRpcmluZyBSUXMgY2FuIG5vIGxvbmdlciBkZWxpdmVyIGluZGljZXMgYmV5b25kIHRoZSBsaXZlIHF1ZXVlXFxuK1xcdCAqIGNvdW50LlxcbitcXHQgKi9cXG4rXFx0bmV0aWZfc2V0X3JlYWxfbnVtX3J4X3F1ZXVlcyhhcGMtXFx1MDAzZW5kZXYsIGFwYy1cXHUwMDNlbnVtX3F1ZXVlcyk7XFxuK1xcbitcXHRtYW5hX3Nocmlua19lcXMoYXBjLCBhcGMtXFx1MDAzZW51bV9xdWV1ZXMpO1xcbitcXG4rXFx0bWFuYV9xc2V0X2RlYnVnZnNfcHVibGlzaChhcGMpO1xcbit9XFxuK1xcbiBpbnQgbWFuYV9kZXRhY2goc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGJvb2wgZnJvbV9jbG9zZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyA9IG5ldGRldl9wcml2KG5kZXYpO1xcbkBAIC0zNzg2LDEwICs0ODA2LDggQEAgaW50IG1hbmFfZGV0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBib29sIGZyb21fY2xvc2UpXFxuIFxcbiBcXHRpZiAoYXBjLVxcdTAwM2Vwb3J0X3N0X3NhdmUpIHtcXG4gXFx0XFx0ZXJyID0gbWFuYV9kZWFsbG9jX3F1ZXVlcyhuZGV2KTtcXG4tXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRuZXRkZXZfZXJyKG5kZXYsIFxcXCIlcyBmYWlsZWQgdG8gZGVhbGxvY2F0ZSBxdWV1ZXM6ICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgZXJyKTtcXG4tXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4tXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoIWZyb21fY2xvc2UpIHtcXG5AQCAtMzgyNiw2ICs0ODQ0LDcgQEAgc3RhdGljIGludCBtYW5hX3Byb2JlX3BvcnQoc3RydWN0IG1hbmFfY29udGV4dCAqYWMsIGludCBwb3J0X2lkeCxcXG4gXFx0YXBjLVxcdTAwM2Vwb3J0X2hhbmRsZSA9IElOVkFMSURfTUFOQV9IQU5ETEU7XFxuIFxcdGFwYy1cXHUwMDNlcGZfZmlsdGVyX2hhbmRsZSA9IElOVkFMSURfTUFOQV9IQU5ETEU7XFxuIFxcdGFwYy1cXHUwMDNlcG9ydF9pZHggPSBwb3J0X2lkeDtcXG4rXFx0YXBjLVxcdTAwM2Vjb25maWd1cmVkX210dSA9IG5kZXYtXFx1MDAzZW10dTtcXG4gXFx0YXBjLVxcdTAwM2VsaW5rX2NmZ19lcnJvciA9IDE7XFxuIFxcdGFwYy1cXHUwMDNlY3FlX2NvYWxlc2NpbmdfZW5hYmxlID0gMDtcXG4gXFx0YXBjLVxcdTAwM2VjcWU4X2NvYWxlc2NpbmdfZW5hYmxlID0gMDtcXG5AQCAtMzg0MCw2ICs0ODU5LDEwIEBAIHN0YXRpYyBpbnQgbWFuYV9wcm9iZV9wb3J0KHN0cnVjdCBtYW5hX2NvbnRleHQgKmFjLCBpbnQgcG9ydF9pZHgsXFxuIFxcdFxcdGFwYy1cXHUwMDNldHhfZGltX2VuYWJsZWQgPSBNQU5BX0FEQVBUSVZFX1RYX0RFRjtcXG4gXFx0fVxcbiBcXG4rXFx0ZXJyID0gbWFuYV9hbGxvY19xdWV1ZV9zdGF0cyhhcGMpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGZyZWVfbmV0O1xcbitcXG4gXFx0bXV0ZXhfaW5pdChcXHUwMDI2YXBjLVxcdTAwM2V2cG9ydF9tdXRleCk7XFxuIFxcdGFwYy1cXHUwMDNldnBvcnRfdXNlX2NvdW50ID0gMDtcXG4gXFxuQEAgLTM4NjIsNyArNDg4NSw3IEBAIHN0YXRpYyBpbnQgbWFuYV9wcm9iZV9wb3J0KHN0cnVjdCBtYW5hX2NvbnRleHQgKmFjLCBpbnQgcG9ydF9pZHgsXFxuIFxcbiBcXHRlcnIgPSBtYW5hX2luaXRfcG9ydChuZGV2KTtcXG4gXFx0aWYgKGVycilcXG4tXFx0XFx0Z290byBmcmVlX25ldDtcXG4rXFx0XFx0Z290byBmcmVlX3N0YXRzO1xcbiBcXG4gXFx0ZXJyID0gbWFuYV9yc3NfdGFibGVfYWxsb2MoYXBjKTtcXG4gXFx0aWYgKGVycilcXG5AQCAtMzg5OSw2ICs0OTIyLDggQEAgc3RhdGljIGludCBtYW5hX3Byb2JlX3BvcnQoc3RydWN0IG1hbmFfY29udGV4dCAqYWMsIGludCBwb3J0X2lkeCxcXG4gXFx0bWFuYV9jbGVhbnVwX2luZGlyX3RhYmxlKGFwYyk7XFxuIHJlc2V0X2FwYzpcXG4gXFx0bWFuYV9jbGVhbnVwX3BvcnRfY29udGV4dChhcGMpO1xcbitmcmVlX3N0YXRzOlxcbitcXHRtYW5hX2ZyZWVfcXVldWVfc3RhdHMoYXBjKTtcXG4gZnJlZV9uZXQ6XFxuIFxcdCpuZGV2X3N0b3JhZ2UgPSBOVUxMO1xcbiBcXHRuZXRkZXZfZXJyKG5kZXYsIFxcXCJGYWlsZWQgdG8gcHJvYmUgdlBvcnQgJWQ6ICVkXFxcXG5cXFwiLCBwb3J0X2lkeCwgZXJyKTtcXG5AQCAtNDIzOSw2ICs1MjY0LDExIEBAIHZvaWQgbWFuYV9yZW1vdmUoc3RydWN0IGdkbWFfZGV2ICpnZCwgYm9vbCBzdXNwZW5kaW5nKVxcbiBcXG4gXFx0XFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2UobmRldik7XFxuIFxcdFxcdG1hbmFfY2xlYW51cF9pbmRpcl90YWJsZShhcGMpO1xcbitcXHRcXHRtYW5hX2ZyZWVfcXVldWVfc3RhdHMoYXBjKTtcXG4rXFxuK1xcdFxcdC8qIFJlbW92ZSB0aGUgcG9ydCBmcm9tIHJlc2V0IHdhbGtzIGJlZm9yZSBmcmVlaW5nIGl0cyBuZXRkZXYuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRhYy1cXHUwMDNlcG9ydHNbaV0gPSBOVUxMO1xcbiBcXG4gXFx0XFx0cnRubF91bmxvY2soKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9ldGh0b29sLmNcXG5pbmRleCBlY2U3ZmY5Y2M0MDlhLi42NTg2YTlkMmExMzQzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZXRodG9vbC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9ldGh0b29sLmNcXG5AQCAtMjQyLDYgKzI0MiwxMiBAQCBzdGF0aWMgdm9pZCBtYW5hX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbiBcXHR1NjQgeGRwX3R4O1xcbiBcXHR1NjQgcGt0X2xlbjBfZXJyO1xcbiBcXHR1NjQgY29hbGVzY2VkX2NxZVtNQU5BX0NRRV9DT0FMX1BLVFNfOCAtIDFdO1xcbitcXHR1NjQgcmV0X2NvYWxlc2NlZF9jcWVbTUFOQV9DUUVfQ09BTF9QS1RTXzggLSAxXTtcXG4rXFx0dTY0IHJldF9wYWNrZXRzLCByZXRfYnl0ZXM7XFxuK1xcdHU2NCByZXRfeGRwX3JlZGlyZWN0O1xcbitcXHR1NjQgcmV0X3BrdF9sZW4wX2VycjtcXG4rXFx0dTY0IHJldF94ZHBfZHJvcDtcXG4rXFx0dTY0IHJldF94ZHBfdHg7XFxuIFxcdHU2NCB0c29fcGFja2V0cztcXG4gXFx0dTY0IHRzb19ieXRlcztcXG4gXFx0dTY0IHRzb19pbm5lcl9wYWNrZXRzO1xcbkBAIC0yNTIsMTQgKzI1OCwxMSBAQCBzdGF0aWMgdm9pZCBtYW5hX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbiBcXHR1NjQgbWFuYV9tYXBfZXJyO1xcbiBcXHRpbnQgcSwgaSA9IDAsIGo7XFxuIFxcbi1cXHRpZiAoIWFwYy1cXHUwMDNlcG9ydF9pc191cClcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0LyogV2UgY2FsbCB0aGlzIG1hbmEgZnVuY3Rpb24gdG8gZ2V0IHRoZSBwaHkgc3RhdHMgZnJvbSBHRE1BIGFuZCBpbmNsdWRlc1xcbi1cXHQgKiBhZ2dyZWdhdGUgdHgvcnggZHJvcCBjb3VudGVycywgUGVyLVRDKFRyYWZmaWMgQ2hhbm5lbCkgdHgvcnggYW5kIHBhdXNlXFxuLVxcdCAqIGNvdW50ZXJzLlxcbitcXHQvKiBDb3VudGVycyBvdXRsaXZlIHRoZSBxdWV1ZXMsIGJ1dCBzdXNwZW5kIGNhbiBkZXN0cm95IHRoZSBIVyBjaGFubmVsXFxuK1xcdCAqIHdoaWxlIHRoZSBuZXRkZXYgcmVtYWlucyByZWdpc3RlcmVkLiBHYXRlIG9ubHkgdGhlIFBIWSBxdWVyeS5cXG4gXFx0ICovXFxuLVxcdG1hbmFfcXVlcnlfcGh5X3N0YXRzKGFwYyk7XFxuK1xcdGlmIChhcGMtXFx1MDAzZXBvcnRfaXNfdXApXFxuK1xcdFxcdG1hbmFfcXVlcnlfcGh5X3N0YXRzKGFwYyk7XFxuIFxcbiBcXHRmb3IgKHEgPSAwOyBxIFxcdTAwM2MgQVJSQVlfU0laRShtYW5hX2V0aF9zdGF0cyk7IHErKylcXG4gXFx0XFx0ZGF0YVtpKytdID0gKih1NjQgKikoZXRoX3N0YXRzICsgbWFuYV9ldGhfc3RhdHNbcV0ub2Zmc2V0KTtcXG5AQCAtMjcxLDcgKzI3NCw3IEBAIHN0YXRpYyB2b2lkIG1hbmFfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuIFxcdFxcdGRhdGFbaSsrXSA9ICoodTY0ICopKHBoeV9zdGF0cyArIG1hbmFfcGh5X3N0YXRzW3FdLm9mZnNldCk7XFxuIFxcbiBcXHRmb3IgKHEgPSAwOyBxIFxcdTAwM2MgbnVtX3F1ZXVlczsgcSsrKSB7XFxuLVxcdFxcdHJ4X3N0YXRzID0gXFx1MDAyNmFwYy1cXHUwMDNlcnhxc1txXS1cXHUwMDNlc3RhdHM7XFxuK1xcdFxcdHJ4X3N0YXRzID0gXFx1MDAyNmFwYy1cXHUwMDNlcnhxX3N0YXRzW3FdO1xcbiBcXG4gXFx0XFx0ZG8ge1xcbiBcXHRcXHRcXHRzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbihcXHUwMDI2cnhfc3RhdHMtXFx1MDAzZXN5bmNwKTtcXG5AQCAtMjg1LDYgKzI4OCwzMyBAQCBzdGF0aWMgdm9pZCBtYW5hX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbiBcXHRcXHRcXHRcXHRjb2FsZXNjZWRfY3FlW2pdID0gcnhfc3RhdHMtXFx1MDAzZWNvYWxlc2NlZF9jcWVbal07XFxuIFxcdFxcdH0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeShcXHUwMDI2cnhfc3RhdHMtXFx1MDAzZXN5bmNwLCBzdGFydCkpO1xcbiBcXG4rXFx0XFx0LyogU25hcHNob3Qgc2VwYXJhdGVseSBzbyBhIHJldHJ5IGNhbm5vdCBhZGQgcmV0aXJlZCBjb3VudGVyc1xcbitcXHRcXHQgKiB0d2ljZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJ4X3N0YXRzID0gXFx1MDAyNmFwYy1cXHUwMDNlcnhxX3N0YXRzX3JldFtxXTtcXG4rXFxuK1xcdFxcdGRvIHtcXG4rXFx0XFx0XFx0c3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oXFx1MDAyNnJ4X3N0YXRzLVxcdTAwM2VzeW5jcCk7XFxuK1xcdFxcdFxcdHJldF9wYWNrZXRzID0gcnhfc3RhdHMtXFx1MDAzZXBhY2tldHM7XFxuK1xcdFxcdFxcdHJldF9ieXRlcyA9IHJ4X3N0YXRzLVxcdTAwM2VieXRlcztcXG4rXFx0XFx0XFx0cmV0X3hkcF9kcm9wID0gcnhfc3RhdHMtXFx1MDAzZXhkcF9kcm9wO1xcbitcXHRcXHRcXHRyZXRfeGRwX3R4ID0gcnhfc3RhdHMtXFx1MDAzZXhkcF90eDtcXG4rXFx0XFx0XFx0cmV0X3hkcF9yZWRpcmVjdCA9IHJ4X3N0YXRzLVxcdTAwM2V4ZHBfcmVkaXJlY3Q7XFxuK1xcdFxcdFxcdHJldF9wa3RfbGVuMF9lcnIgPSByeF9zdGF0cy1cXHUwMDNlcGt0X2xlbjBfZXJyO1xcbitcXHRcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgTUFOQV9DUUVfQ09BTF9QS1RTXzggLSAxOyBqKyspXFxuK1xcdFxcdFxcdFxcdHJldF9jb2FsZXNjZWRfY3FlW2pdID1cXG4rXFx0XFx0XFx0XFx0XFx0cnhfc3RhdHMtXFx1MDAzZWNvYWxlc2NlZF9jcWVbal07XFxuK1xcdFxcdH0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeShcXHUwMDI2cnhfc3RhdHMtXFx1MDAzZXN5bmNwLCBzdGFydCkpO1xcbitcXG4rXFx0XFx0cGFja2V0cyArPSByZXRfcGFja2V0cztcXG4rXFx0XFx0Ynl0ZXMgKz0gcmV0X2J5dGVzO1xcbitcXHRcXHR4ZHBfZHJvcCArPSByZXRfeGRwX2Ryb3A7XFxuK1xcdFxcdHhkcF90eCArPSByZXRfeGRwX3R4O1xcbitcXHRcXHR4ZHBfcmVkaXJlY3QgKz0gcmV0X3hkcF9yZWRpcmVjdDtcXG4rXFx0XFx0cGt0X2xlbjBfZXJyICs9IHJldF9wa3RfbGVuMF9lcnI7XFxuK1xcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBNQU5BX0NRRV9DT0FMX1BLVFNfOCAtIDE7IGorKylcXG4rXFx0XFx0XFx0Y29hbGVzY2VkX2NxZVtqXSArPSByZXRfY29hbGVzY2VkX2NxZVtqXTtcXG4rXFxuIFxcdFxcdGRhdGFbaSsrXSA9IHBhY2tldHM7XFxuIFxcdFxcdGRhdGFbaSsrXSA9IGJ5dGVzO1xcbiBcXHRcXHRkYXRhW2krK10gPSB4ZHBfZHJvcDtcXG5AQCAtMjk2LDcgKzMyNiw3IEBAIHN0YXRpYyB2b2lkIG1hbmFfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuIFxcdH1cXG4gXFxuIFxcdGZvciAocSA9IDA7IHEgXFx1MDAzYyBudW1fcXVldWVzOyBxKyspIHtcXG4tXFx0XFx0dHhfc3RhdHMgPSBcXHUwMDI2YXBjLVxcdTAwM2V0eF9xcFtxXS1cXHUwMDNldHhxLnN0YXRzO1xcbitcXHRcXHR0eF9zdGF0cyA9IFxcdTAwMjZhcGMtXFx1MDAzZXR4cV9zdGF0c1txXTtcXG4gXFxuIFxcdFxcdGRvIHtcXG4gXFx0XFx0XFx0c3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oXFx1MDAyNnR4X3N0YXRzLVxcdTAwM2VzeW5jcCk7XFxuQEAgLTY0OCw1MiArNjc4LDEyNiBAQCBzdGF0aWMgaW50IG1hbmFfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tLyogbWFuYV9zZXRfY2hhbm5lbHMgLSBjaGFuZ2UgdGhlIG51bWJlciBvZiBxdWV1ZXMgb24gYSBwb3J0XFxuLSAqXFxuLSAqIFJldHVybnMgLUVCVVNZIGlmIFJETUEgaG9sZHMgdGhlIHZwb3J0IHdpdGggRVFzIHNpemVkIHRvIHRoZVxcbi0gKiBjdXJyZW50IG51bV9xdWV1ZXMuXFxuLSAqL1xcbiBzdGF0aWMgaW50IG1hbmFfc2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBldGh0b29sX2NoYW5uZWxzICpjaGFubmVscylcXG4ge1xcbiBcXHRzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyA9IG5ldGRldl9wcml2KG5kZXYpO1xcbiBcXHR1bnNpZ25lZCBpbnQgbmV3X2NvdW50ID0gY2hhbm5lbHMtXFx1MDAzZWNvbWJpbmVkX2NvdW50O1xcbi1cXHR1bnNpZ25lZCBpbnQgb2xkX2NvdW50ID0gYXBjLVxcdTAwM2VudW1fcXVldWVzO1xcbitcXHRzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKnNjcmF0Y2g7XFxuK1xcdHN0cnVjdCBtYW5hX3FzZXQgbmV3cSwgb2xkcSwgZnJlc2hxO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0LyogU2V0IGNoYW5uZWxfY2hhbmdpbmcgdG8gYmxvY2sgUkRNQSBmcm9tIGdyYWJiaW5nIHRoZSB2cG9ydFxcbi1cXHQgKiBkdXJpbmcgdGhlIGRldGFjaC9hdHRhY2ggd2luZG93LiBtYW5hX2NmZ192cG9ydCgpIGNoZWNrc1xcbi1cXHQgKiB0aGlzIGZsYWcgdW5kZXIgdnBvcnRfbXV0ZXggYW5kIHJldHVybnMgLUVCVVNZIGlmIHNldC5cXG4rXFx0aWYgKG5ld19jb3VudCBcXHUwMDNjIDEgfHwgbmV3X2NvdW50IFxcdTAwM2UgYXBjLVxcdTAwM2VtYXhfcXVldWVzKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmRldiwgXFxcIkludmFsaWQgY29tYmluZWRfY291bnQgJXUgKG1heCAldSlcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIG5ld19jb3VudCwgYXBjLVxcdTAwM2VtYXhfcXVldWVzKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChuZXdfY291bnQgPT0gYXBjLVxcdTAwM2VudW1fcXVldWVzKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIFJlc2l6ZSByeHFzIHdoaWxlIGRvd246IG1hbmFfb3BlbigpIGRvZXMgbm90IHJlY3JlYXRlIHRoZSBwb3J0XFxuK1xcdCAqIGNvbnRleHQuIFJETUEgbXVzdCBub3Qgb3duIHRoZSB2cG9ydCB3aGlsZSBudW1fcXVldWVzIGNoYW5nZXMuXFxuIFxcdCAqL1xcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZhcGMtXFx1MDAzZXZwb3J0X211dGV4KTtcXG4tXFx0aWYgKCFhcGMtXFx1MDAzZXBvcnRfaXNfdXAgXFx1MDAyNlxcdTAwMjYgYXBjLVxcdTAwM2V2cG9ydF91c2VfY291bnQpIHtcXG4rXFx0aWYgKCFhcGMtXFx1MDAzZXBvcnRfaXNfdXApIHtcXG4rXFx0XFx0c3RydWN0IG1hbmFfcnhxICoqcnhxcztcXG4rXFxuK1xcdFxcdGlmIChhcGMtXFx1MDAzZXZwb3J0X3VzZV9jb3VudCkge1xcbitcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmFwYy1cXHUwMDNldnBvcnRfbXV0ZXgpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRyeHFzID0ga3phbGxvY19vYmpzKHN0cnVjdCBtYW5hX3J4cSAqLCBuZXdfY291bnQpO1xcbitcXHRcXHRpZiAoIXJ4cXMpIHtcXG4rXFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZhcGMtXFx1MDAzZXZwb3J0X211dGV4KTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGtmcmVlKGFwYy1cXHUwMDNlcnhxcyk7XFxuK1xcdFxcdGFwYy1cXHUwMDNlcnhxcyA9IHJ4cXM7XFxuK1xcdFxcdGFwYy1cXHUwMDNlbnVtX3F1ZXVlcyA9IG5ld19jb3VudDtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZhcGMtXFx1MDAzZXZwb3J0X211dGV4KTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFRoZSBFdGhlcm5ldCBwb3J0IGFscmVhZHkgaG9sZHMgYSB2cG9ydCByZWZlcmVuY2U7IGV4Y2x1ZGUgUkRNQVxcbitcXHQgKiB0aHJvdWdoIGZhaWx1cmUgY2xlYW51cC5cXG4rXFx0ICovXFxuK1xcdGlmIChhcGMtXFx1MDAzZWNoYW5uZWxfY2hhbmdpbmcpIHtcXG4gXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZhcGMtXFx1MDAzZXZwb3J0X211dGV4KTtcXG4gXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gXFx0fVxcbiBcXHRhcGMtXFx1MDAzZWNoYW5uZWxfY2hhbmdpbmcgPSB0cnVlO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmFwYy1cXHUwMDNldnBvcnRfbXV0ZXgpO1xcbiBcXG4tXFx0ZXJyID0gbWFuYV9wcmVfYWxsb2NfcnhidWZzKGFwYywgbmRldi1cXHUwMDNlbXR1LCBuZXdfY291bnQpO1xcbi1cXHRpZiAoZXJyKSB7XFxuLVxcdFxcdG5ldGRldl9lcnIobmRldiwgXFxcIkluc3VmZmljaWVudCBtZW1vcnkgZm9yIG5ldyBhbGxvY2F0aW9uc1xcXCIpO1xcbitcXHRzY3JhdGNoID0gbWFuYV9xc2V0X3NjcmF0Y2hfYWxsb2MoYXBjKTtcXG4rXFx0aWYgKCFzY3JhdGNoKSB7XFxuK1xcdFxcdGVyciA9IC1FTk9NRU07XFxuIFxcdFxcdGdvdG8gY2xlYXJfZmxhZztcXG4gXFx0fVxcbiBcXG4tXFx0ZXJyID0gbWFuYV9kZXRhY2gobmRldiwgZmFsc2UpO1xcbi1cXHRpZiAoZXJyKSB7XFxuLVxcdFxcdG5ldGRldl9lcnIobmRldiwgXFxcIm1hbmFfZGV0YWNoIGZhaWxlZDogJWRcXFxcblxcXCIsIGVycik7XFxuLVxcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAobmV3X2NvdW50IFxcdTAwM2MgYXBjLVxcdTAwM2VudW1fcXVldWVzKSB7XFxuK1xcdFxcdHN0cnVjdCBtYW5hX3FzZXQgdGFpbHE7XFxuK1xcbitcXHRcXHRlcnIgPSBtYW5hX3NwbGl0X3FzZXQoYXBjLCBzY3JhdGNoLCBuZXdfY291bnQsIFxcdTAwMjZuZXdxLCBcXHUwMDI2dGFpbHEpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRnb3RvIGZyZWVfc2NyYXRjaDtcXG4rXFxuK1xcdFxcdGVyciA9IG1hbmFfcHVibGlzaF9xc2V0KGFwYywgXFx1MDAyNm5ld3EsIFxcdTAwMjZvbGRxKTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHQvKiBEaXNjYXJkIGNvbnRhaW5lcnMgb25seTsgdGhlaXIgcXVldWVzIHN0aWxsIGJlbG9uZyB0b1xcbitcXHRcXHRcXHQgKiB0aGUgb2xkIHNldC5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdG1hbmFfZGlzY2FyZF9zcGxpdChcXHUwMDI2bmV3cSwgXFx1MDAyNnRhaWxxKTtcXG4rXFx0XFx0XFx0Z290byBmcmVlX3NjcmF0Y2g7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIFdhaXQgZm9yIG5kb19zZWxlY3RfcXVldWUoKSByZWFkZXJzIG9mIG9sZHEuaW5kaXJfdGFibGUuIEZyZWVcXG4rXFx0XFx0ICogb25seSBjb250YWluZXJzOyB0aGUgcXVldWVzIGJlbG9uZyB0byB0aGUga2VwdCBzZXQgb3IgdGFpbC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHN5bmNocm9uaXplX25ldCgpO1xcbitcXG4rXFx0XFx0a2ZyZWUob2xkcS50eF9xcCk7XFxuK1xcdFxcdGtmcmVlKG9sZHEucnhxcyk7XFxuK1xcdFxcdGtmcmVlKG9sZHEuaW5kaXJfdGFibGUpO1xcbitcXHRcXHRrZnJlZShvbGRxLnJ4b2JqX3RhYmxlKTtcXG4rXFxuK1xcdFxcdG1hbmFfZnJlZV9xc2V0KHNjcmF0Y2gsIFxcdTAwMjZ0YWlscSk7XFxuK1xcdFxcdGdvdG8gZnJlZV9zY3JhdGNoO1xcbiBcXHR9XFxuIFxcbi1cXHRhcGMtXFx1MDAzZW51bV9xdWV1ZXMgPSBuZXdfY291bnQ7XFxuLVxcdGVyciA9IG1hbmFfYXR0YWNoKG5kZXYpO1xcbitcXHRlcnIgPSBtYW5hX2dyb3dfcXNldChhcGMsIHNjcmF0Y2gsIG5ld19jb3VudCwgXFx1MDAyNm5ld3EsIFxcdTAwMjZmcmVzaHEpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGZyZWVfc2NyYXRjaDtcXG4rXFxuK1xcdGVyciA9IG1hbmFfcHVibGlzaF9xc2V0KGFwYywgXFx1MDAyNm5ld3EsIFxcdTAwMjZvbGRxKTtcXG4gXFx0aWYgKGVycikge1xcbi1cXHRcXHRhcGMtXFx1MDAzZW51bV9xdWV1ZXMgPSBvbGRfY291bnQ7XFxuLVxcdFxcdG5ldGRldl9lcnIobmRldiwgXFxcIm1hbmFfYXR0YWNoIGZhaWxlZDogJWRcXFxcblxcXCIsIGVycik7XFxuK1xcdFxcdC8qIEZyZWUgb25seSB0aGUgbmV3IHF1ZXVlcywgdGhlbiBkaXNjYXJkIHRoZSBtZXJnZWQgY29udGFpbmVycy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdG1hbmFfZnJlZV9xc2V0KHNjcmF0Y2gsIFxcdTAwMjZmcmVzaHEpO1xcbitcXHRcXHRtYW5hX2Rpc2NhcmRfZ3JvdyhcXHUwMDI2bmV3cSk7XFxuK1xcdFxcdGdvdG8gZnJlZV9zY3JhdGNoO1xcbiBcXHR9XFxuIFxcbi1vdXQ6XFxuLVxcdG1hbmFfcHJlX2RlYWxsb2NfcnhidWZzKGFwYyk7XFxuK1xcdC8qIFdhaXQgZm9yIG5kb19zZWxlY3RfcXVldWUoKSByZWFkZXJzIG9mIG9sZHEuaW5kaXJfdGFibGUuIEFsbCBxdWV1ZXNcXG4rXFx0ICogYXJlIG5vdyBsaXZlIGluIG5ld3E7IGZyZWUgb25seSB0aGUgb2xkIGFuZCBmcmVzaCBjb250YWluZXJzLlxcbitcXHQgKi9cXG4rXFx0c3luY2hyb25pemVfbmV0KCk7XFxuK1xcbitcXHRrZnJlZShvbGRxLnR4X3FwKTtcXG4rXFx0a2ZyZWUob2xkcS5yeHFzKTtcXG4rXFx0a2ZyZWUob2xkcS5pbmRpcl90YWJsZSk7XFxuK1xcdGtmcmVlKG9sZHEucnhvYmpfdGFibGUpO1xcbitcXHRrZnJlZShmcmVzaHEudHhfcXApO1xcbitcXHRrZnJlZShmcmVzaHEucnhxcyk7XFxuK1xcbitcXHQvKiBObyByZXRpcmVtZW50IHJ1bnMgdG8gcHVibGlzaCB0aGUgbmV3IHF1ZXVlcycgZGVidWdmcyBub2Rlcy4gKi9cXG4rXFx0bWFuYV9xc2V0X2RlYnVnZnNfcHVibGlzaChhcGMpO1xcbitcXG4rZnJlZV9zY3JhdGNoOlxcbitcXHRtYW5hX3B1Ymxpc2hfY2xvc2VfaWZfbmVlZGVkKGFwYyk7XFxuK1xcdG1hbmFfcXNldF9zY3JhdGNoX2ZyZWUoc2NyYXRjaCk7XFxuIGNsZWFyX2ZsYWc6XFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNmFwYy1cXHUwMDNldnBvcnRfbXV0ZXgpO1xcbiBcXHRhcGMtXFx1MDAzZWNoYW5uZWxfY2hhbmdpbmcgPSBmYWxzZTtcXG5AQCAtNzIwLDEzICs4MjQsMTEgQEAgc3RhdGljIGludCBtYW5hX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuIFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4ge1xcbiBcXHRzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyA9IG5ldGRldl9wcml2KG5kZXYpO1xcbitcXHRzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKnNjcmF0Y2g7XFxuK1xcdHN0cnVjdCBtYW5hX3FzZXQgbmV3cSwgb2xkcTtcXG4gXFx0dTMyIG5ld190eCwgbmV3X3J4O1xcbi1cXHR1MzIgb2xkX3R4LCBvbGRfcng7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHRvbGRfdHggPSBhcGMtXFx1MDAzZXR4X3F1ZXVlX3NpemU7XFxuLVxcdG9sZF9yeCA9IGFwYy1cXHUwMDNlcnhfcXVldWVfc2l6ZTtcXG4tXFxuIFxcdGlmIChyaW5nLVxcdTAwM2V0eF9wZW5kaW5nIFxcdTAwM2MgTUlOX1RYX0JVRkZFUlNfUEVSX1FVRVVFKSB7XFxuIFxcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssIFxcXCJ0eDolZCBsZXNzIHRoYW4gdGhlIG1pbjolZFxcXCIsIHJpbmctXFx1MDAzZXR4X3BlbmRpbmcsXFxuIFxcdFxcdFxcdFxcdCAgIE1JTl9UWF9CVUZGRVJTX1BFUl9RVUVVRSk7XFxuQEAgLTc0NCwzMiArODQ2LDU2IEBAIHN0YXRpYyBpbnQgbWFuYV9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbiBcXHRuZXRkZXZfaW5mbyhuZGV2LCBcXFwiVXNpbmcgbmVhcmVzdCBwb3dlciBvZiAyIHZhbHVlcyBmb3IgVHhxOiVkIFJ4cTolZFxcXFxuXFxcIixcXG4gXFx0XFx0ICAgIG5ld190eCwgbmV3X3J4KTtcXG4gXFxuLVxcdC8qIHByZS1hbGxvY2F0aW5nIG5ldyBidWZmZXJzIHRvIHByZXZlbnQgZmFpbHVyZXMgaW4gbWFuYV9hdHRhY2goKSBsYXRlciAqL1xcbi1cXHRhcGMtXFx1MDAzZXJ4X3F1ZXVlX3NpemUgPSBuZXdfcng7XFxuLVxcdGVyciA9IG1hbmFfcHJlX2FsbG9jX3J4YnVmcyhhcGMsIG5kZXYtXFx1MDAzZW10dSwgYXBjLVxcdTAwM2VudW1fcXVldWVzKTtcXG4tXFx0YXBjLVxcdTAwM2VyeF9xdWV1ZV9zaXplID0gb2xkX3J4O1xcbi1cXHRpZiAoZXJyKSB7XFxuLVxcdFxcdG5ldGRldl9lcnIobmRldiwgXFxcIkluc3VmZmljaWVudCBtZW1vcnkgZm9yIG5ldyBhbGxvY2F0aW9uc1xcXFxuXFxcIik7XFxuLVxcdFxcdHJldHVybiBlcnI7XFxuK1xcdGlmIChuZXdfcnggPT0gYXBjLVxcdTAwM2VyeF9xdWV1ZV9zaXplIFxcdTAwMjZcXHUwMDI2IG5ld190eCA9PSBhcGMtXFx1MDAzZXR4X3F1ZXVlX3NpemUpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKCFhcGMtXFx1MDAzZXBvcnRfaXNfdXApIHtcXG4rXFx0XFx0YXBjLVxcdTAwM2VyeF9xdWV1ZV9zaXplID0gbmV3X3J4O1xcbitcXHRcXHRhcGMtXFx1MDAzZXR4X3F1ZXVlX3NpemUgPSBuZXdfdHg7XFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcbi1cXHRlcnIgPSBtYW5hX2RldGFjaChuZGV2LCBmYWxzZSk7XFxuLVxcdGlmIChlcnIpIHtcXG4tXFx0XFx0bmV0ZGV2X2VycihuZGV2LCBcXFwibWFuYV9kZXRhY2ggZmFpbGVkOiAlZFxcXFxuXFxcIiwgZXJyKTtcXG4tXFx0XFx0Z290byBvdXQ7XFxuK1xcdC8qIEV4Y2x1ZGUgUkRNQSB0aHJvdWdoIGZhaWx1cmUgY2xlYW51cCwgd2hpY2ggbWF5IHJlbGVhc2UgdGhlIHZwb3J0LiAqL1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZhcGMtXFx1MDAzZXZwb3J0X211dGV4KTtcXG4rXFx0aWYgKGFwYy1cXHUwMDNlY2hhbm5lbF9jaGFuZ2luZykge1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmFwYy1cXHUwMDNldnBvcnRfbXV0ZXgpO1xcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXHR9XFxuK1xcdGFwYy1cXHUwMDNlY2hhbm5lbF9jaGFuZ2luZyA9IHRydWU7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2YXBjLVxcdTAwM2V2cG9ydF9tdXRleCk7XFxuK1xcbitcXHRzY3JhdGNoID0gbWFuYV9xc2V0X3NjcmF0Y2hfYWxsb2MoYXBjKTtcXG4rXFx0aWYgKCFzY3JhdGNoKSB7XFxuK1xcdFxcdGVyciA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gY2xlYXJfZmxhZztcXG4gXFx0fVxcbiBcXG4tXFx0YXBjLVxcdTAwM2V0eF9xdWV1ZV9zaXplID0gbmV3X3R4O1xcbi1cXHRhcGMtXFx1MDAzZXJ4X3F1ZXVlX3NpemUgPSBuZXdfcng7XFxuK1xcdGVyciA9IG1hbmFfYWxsb2NfcXNldChhcGMsIHNjcmF0Y2gsIG5ld19yeCwgbmV3X3R4LFxcbitcXHRcXHRcXHQgICAgICBhcGMtXFx1MDAzZXByaXZfZmxhZ3MsIGFwYy1cXHUwMDNlY29uZmlndXJlZF9tdHUsXFxuK1xcdFxcdFxcdCAgICAgIGFwYy1cXHUwMDNlYnBmX3Byb2csIFxcdTAwMjZuZXdxKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLCBcXFwiZmFpbGVkIHRvIGNoYW5nZSByaW5nIHBhcmFtczogJWRcXFwiLFxcbitcXHRcXHRcXHRcXHQgICBlcnIpO1xcbitcXHRcXHRnb3RvIGZyZWVfc2NyYXRjaDtcXG4rXFx0fVxcbiBcXG4tXFx0ZXJyID0gbWFuYV9hdHRhY2gobmRldik7XFxuK1xcdGVyciA9IG1hbmFfcHVibGlzaF9xc2V0KGFwYywgXFx1MDAyNm5ld3EsIFxcdTAwMjZvbGRxKTtcXG4gXFx0aWYgKGVycikge1xcbi1cXHRcXHRuZXRkZXZfZXJyKG5kZXYsIFxcXCJtYW5hX2F0dGFjaCBmYWlsZWQ6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbi1cXHRcXHRhcGMtXFx1MDAzZXR4X3F1ZXVlX3NpemUgPSBvbGRfdHg7XFxuLVxcdFxcdGFwYy1cXHUwMDNlcnhfcXVldWVfc2l6ZSA9IG9sZF9yeDtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjaywgXFxcImZhaWxlZCB0byBjaGFuZ2UgcmluZyBwYXJhbXM6ICVkXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgZXJyKTtcXG4rXFx0XFx0bWFuYV9mcmVlX3FzZXQoc2NyYXRjaCwgXFx1MDAyNm5ld3EpO1xcbitcXHRcXHRnb3RvIGZyZWVfc2NyYXRjaDtcXG4gXFx0fVxcbi1vdXQ6XFxuLVxcdG1hbmFfcHJlX2RlYWxsb2NfcnhidWZzKGFwYyk7XFxuK1xcbitcXHRtYW5hX2ZyZWVfcXNldChzY3JhdGNoLCBcXHUwMDI2b2xkcSk7XFxuK1xcbitmcmVlX3NjcmF0Y2g6XFxuK1xcdG1hbmFfcHVibGlzaF9jbG9zZV9pZl9uZWVkZWQoYXBjKTtcXG4rXFx0bWFuYV9xc2V0X3NjcmF0Y2hfZnJlZShzY3JhdGNoKTtcXG4rY2xlYXJfZmxhZzpcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2YXBjLVxcdTAwM2V2cG9ydF9tdXRleCk7XFxuK1xcdGFwYy1cXHUwMDNlY2hhbm5lbF9jaGFuZ2luZyA9IGZhbHNlO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmFwYy1cXHUwMDNldnBvcnRfbXV0ZXgpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbkBAIC03OTksNyArOTI1LDggQEAgc3RhdGljIGludCBtYW5hX3NldF9wcml2X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgcHJpdl9mbGFncylcXG4ge1xcbiBcXHRzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyA9IG5ldGRldl9wcml2KG5kZXYpO1xcbiBcXHR1MzIgY2hhbmdlZCA9IGFwYy1cXHUwMDNlcHJpdl9mbGFncyBeIHByaXZfZmxhZ3M7XFxuLVxcdHUzMiBvbGRfcHJpdl9mbGFncyA9IGFwYy1cXHUwMDNlcHJpdl9mbGFncztcXG4rXFx0c3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICpzY3JhdGNoO1xcbitcXHRzdHJ1Y3QgbWFuYV9xc2V0IG5ld3EsIG9sZHE7XFxuIFxcdGludCBlcnIgPSAwO1xcbiBcXG4gXFx0aWYgKCFjaGFuZ2VkKVxcbkBAIC04MDksNTQgKzkzNiw1MCBAQCBzdGF0aWMgaW50IG1hbmFfc2V0X3ByaXZfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBwcml2X2ZsYWdzKVxcbiBcXHRpZiAocHJpdl9mbGFncyBcXHUwMDI2IH5HRU5NQVNLKE1BTkFfUFJJVl9GTEFHX01BWCAtIDEsIDApKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLVxcdGFwYy1cXHUwMDNlcHJpdl9mbGFncyA9IHByaXZfZmxhZ3M7XFxuLVxcbi1cXHRpZiAoY2hhbmdlZCBcXHUwMDI2IEJJVChNQU5BX1BSSVZfRkxBR19VU0VfRlVMTF9QQUdFX1JYQlVGKSkge1xcbi1cXHRcXHRpZiAoIWFwYy1cXHUwMDNlcG9ydF9pc191cClcXG4tXFx0XFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHRcXHQvKiBJZiBYRFAgaXMgYXR0YWNoZWQgb3IgTVRVIGlzIGp1bWJvLCBzaW5nbGUtYnVmZmVyLXBlci1wYWdlXFxuLVxcdFxcdCAqIGlzIGFscmVhZHkgZm9yY2VkIHJlZ2FyZGxlc3Mgb2YgdGhpcyBmbGFnLiBTa2lwIHRoZVxcbi1cXHRcXHQgKiBleHBlbnNpdmUgZGV0YWNoL2F0dGFjaCBjeWNsZSBzaW5jZSBub3RoaW5nIGNoYW5nZXMuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAobmRldi1cXHUwMDNlbXR1ICsgTUFOQV9SWEJVRl9QQUQgXFx1MDAzZSBQQUdFX1NJWkUgLyAyIHx8XFxuLVxcdFxcdCAgICBtYW5hX3hkcF9nZXQoYXBjKSlcXG4tXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdC8qIFNraXAgcmVidWlsZGluZyB3aGVuIGZ1bGwtcGFnZSBSWCBpcyBhbHJlYWR5IHJlcXVpcmVkLiAqL1xcbitcXHRpZiAoIShjaGFuZ2VkIFxcdTAwMjYgQklUKE1BTkFfUFJJVl9GTEFHX1VTRV9GVUxMX1BBR0VfUlhCVUYpKSB8fFxcbitcXHQgICAgIWFwYy1cXHUwMDNlcG9ydF9pc191cCB8fFxcbitcXHQgICAgbmRldi1cXHUwMDNlbXR1ICsgTUFOQV9SWEJVRl9QQUQgXFx1MDAzZSBQQUdFX1NJWkUgLyAyIHx8XFxuK1xcdCAgICBtYW5hX3hkcF9nZXQoYXBjKSkge1xcbitcXHRcXHRhcGMtXFx1MDAzZXByaXZfZmxhZ3MgPSBwcml2X2ZsYWdzO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbiBcXG4tXFx0XFx0LyogQmxvY2sgUkRNQSBmcm9tIGdyYWJiaW5nIHRoZSB2cG9ydCBkdXJpbmcgZGV0YWNoL2F0dGFjaCAqL1xcbi1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZhcGMtXFx1MDAzZXZwb3J0X211dGV4KTtcXG4tXFx0XFx0YXBjLVxcdTAwM2VjaGFubmVsX2NoYW5naW5nID0gdHJ1ZTtcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2YXBjLVxcdTAwM2V2cG9ydF9tdXRleCk7XFxuK1xcdGlmIChhcGMtXFx1MDAzZWNoYW5uZWxfY2hhbmdpbmcpIHtcXG4gXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZhcGMtXFx1MDAzZXZwb3J0X211dGV4KTtcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFx0fVxcbitcXHRhcGMtXFx1MDAzZWNoYW5uZWxfY2hhbmdpbmcgPSB0cnVlO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmFwYy1cXHUwMDNldnBvcnRfbXV0ZXgpO1xcbiBcXG4tXFx0XFx0ZXJyID0gbWFuYV9wcmVfYWxsb2NfcnhidWZzKGFwYywgbmRldi1cXHUwMDNlbXR1LCBhcGMtXFx1MDAzZW51bV9xdWV1ZXMpO1xcbi1cXHRcXHRpZiAoZXJyKSB7XFxuLVxcdFxcdFxcdG5ldGRldl9lcnIobmRldixcXG4tXFx0XFx0XFx0XFx0ICAgXFxcIkluc3VmZmljaWVudCBtZW1vcnkgZm9yIG5ldyBhbGxvY2F0aW9uc1xcXFxuXFxcIik7XFxuLVxcdFxcdFxcdGFwYy1cXHUwMDNlcHJpdl9mbGFncyA9IG9sZF9wcml2X2ZsYWdzO1xcbi1cXHRcXHRcXHRnb3RvIGNsZWFyX2ZsYWc7XFxuLVxcdFxcdH1cXG4rXFx0c2NyYXRjaCA9IG1hbmFfcXNldF9zY3JhdGNoX2FsbG9jKGFwYyk7XFxuK1xcdGlmICghc2NyYXRjaCkge1xcbitcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbitcXHRcXHRnb3RvIGNsZWFyX2ZsYWc7XFxuK1xcdH1cXG4gXFxuLVxcdFxcdGVyciA9IG1hbmFfZGV0YWNoKG5kZXYsIGZhbHNlKTtcXG4tXFx0XFx0aWYgKGVycikge1xcbi1cXHRcXHRcXHRuZXRkZXZfZXJyKG5kZXYsIFxcXCJtYW5hX2RldGFjaCBmYWlsZWQ6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbi1cXHRcXHRcXHRhcGMtXFx1MDAzZXByaXZfZmxhZ3MgPSBvbGRfcHJpdl9mbGFncztcXG4tXFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdH1cXG4rXFx0ZXJyID0gbWFuYV9hbGxvY19xc2V0KGFwYywgc2NyYXRjaCwgYXBjLVxcdTAwM2VyeF9xdWV1ZV9zaXplLFxcbitcXHRcXHRcXHQgICAgICBhcGMtXFx1MDAzZXR4X3F1ZXVlX3NpemUsIHByaXZfZmxhZ3MsXFxuK1xcdFxcdFxcdCAgICAgIGFwYy1cXHUwMDNlY29uZmlndXJlZF9tdHUsIGFwYy1cXHUwMDNlYnBmX3Byb2csIFxcdTAwMjZuZXdxKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBmcmVlX3NjcmF0Y2g7XFxuIFxcbi1cXHRcXHRlcnIgPSBtYW5hX2F0dGFjaChuZGV2KTtcXG4tXFx0XFx0aWYgKGVycikge1xcbi1cXHRcXHRcXHRuZXRkZXZfZXJyKG5kZXYsIFxcXCJtYW5hX2F0dGFjaCBmYWlsZWQ6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbi1cXHRcXHRcXHRhcGMtXFx1MDAzZXByaXZfZmxhZ3MgPSBvbGRfcHJpdl9mbGFncztcXG4tXFx0XFx0fVxcbitcXHRlcnIgPSBtYW5hX3B1Ymxpc2hfcXNldChhcGMsIFxcdTAwMjZuZXdxLCBcXHUwMDI2b2xkcSk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0bWFuYV9mcmVlX3FzZXQoc2NyYXRjaCwgXFx1MDAyNm5ld3EpO1xcbitcXHRcXHRnb3RvIGZyZWVfc2NyYXRjaDtcXG4gXFx0fVxcbiBcXG4tb3V0Olxcbi1cXHRtYW5hX3ByZV9kZWFsbG9jX3J4YnVmcyhhcGMpO1xcbitcXHRtYW5hX2ZyZWVfcXNldChzY3JhdGNoLCBcXHUwMDI2b2xkcSk7XFxuK1xcbitmcmVlX3NjcmF0Y2g6XFxuK1xcdG1hbmFfcHVibGlzaF9jbG9zZV9pZl9uZWVkZWQoYXBjKTtcXG4rXFx0bWFuYV9xc2V0X3NjcmF0Y2hfZnJlZShzY3JhdGNoKTtcXG4gY2xlYXJfZmxhZzpcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2YXBjLVxcdTAwM2V2cG9ydF9tdXRleCk7XFxuIFxcdGFwYy1cXHUwMDNlY2hhbm5lbF9jaGFuZ2luZyA9IGZhbHNlO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmFwYy1cXHUwMDNldnBvcnRfbXV0ZXgpO1xcbi1cXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5AQCAtODcxLDcgKzk5NCw4IEBAIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBtYW5hX2V0aHRvb2xfb3BzID0ge1xcbiBcXHQub3BfbmVlZHNfcnRubFxcdFxcdD0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8XFxuIFxcdFxcdFxcdFxcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU0gfFxcbiBcXHRcXHRcXHRcXHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUEZMQUdTIHxcXG4tXFx0XFx0XFx0XFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTkssXFxuK1xcdFxcdFxcdFxcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LIHxcXG4rXFx0XFx0XFx0XFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfUlNTLFxcbiBcXHQuZ2V0X2V0aHRvb2xfc3RhdHNcXHQ9IG1hbmFfZ2V0X2V0aHRvb2xfc3RhdHMsXFxuIFxcdC5nZXRfc3NldF9jb3VudFxcdFxcdD0gbWFuYV9nZXRfc3NldF9jb3VudCxcXG4gXFx0LmdldF9zdHJpbmdzXFx0XFx0PSBtYW5hX2dldF9zdHJpbmdzLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaCBiL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oXFxuaW5kZXggMzA4OTUwZjliNTRiMC4uNjY2NTY1ZmZiMjZhYSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaFxcbisrKyBiL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oXFxuQEAgLTY4Niw2ICs2ODYsMTEgQEAgZW51bSB7XFxuIC8qIERyaXZlciBzdXBwb3J0cyBub24tY29udGlndW91cyBxdWV1ZSBidWZmZXJzICovXFxuICNkZWZpbmUgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9OT05fQ09OVElHVU9VU19CVUZGRVJTIEJJVCgzMClcXG4gXFxuKy8qIFJlc2l6ZSBmYWlsdXJlcyBhcmUgaGFuZGxlZCBpbi1kcml2ZXI7IGEgZmFpbGVkIHJvbGxiYWNrIHN0aWxsIG5lZWRzXFxuKyAqIHJlY292ZXJ5LlxcbisgKi9cXG4rI2RlZmluZSBHRE1BX0RSVl9DQVBfRkxBR18xX1NFTEZfUkVDT1ZFUllfT05fUVVFVUVfUkVTSVpFX0ZBSUxVUkUgQklUKDMxKVxcbitcXG4gI2RlZmluZSBHRE1BX0RSVl9DQVBfRkxBR1MxIFxcXFxcXG4gXFx0KEdETUFfRFJWX0NBUF9GTEFHXzFfRVFfU0hBUklOR19NVUxUSV9WUE9SVCB8IFxcXFxcXG4gXFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfTkFQSV9XS0RPTkVfRklYIHwgXFxcXFxcbkBAIC03MDMsNyArNzA4LDggQEAgZW51bSB7XFxuIFxcdCBHRE1BX0RSVl9DQVBfRkxBR18xX0hXQ19USU1FT1VUX1JFQ09WRVJZIHwgXFxcXFxcbiBcXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9FUV9NU0lfVU5TSEFSRV9NVUxUSV9WUE9SVCB8IFxcXFxcXG4gXFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfRFlOX0lOVEVSUlVQVF9NT0RFUkFUSU9OIHwgXFxcXFxcbi1cXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9OT05fQ09OVElHVU9VU19CVUZGRVJTKVxcbitcXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9OT05fQ09OVElHVU9VU19CVUZGRVJTIHwgXFxcXFxcbitcXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9TRUxGX1JFQ09WRVJZX09OX1FVRVVFX1JFU0laRV9GQUlMVVJFKVxcbiBcXG4gI2RlZmluZSBHRE1BX0RSVl9DQVBfRkxBR1MyIDBcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hbmEvbWFuYS5oIGIvaW5jbHVkZS9uZXQvbWFuYS9tYW5hLmhcXG5pbmRleCA4M2I3ZWZmNDY0NmVhLi5jYzkzNmFlOTdhMDMxIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L21hbmEvbWFuYS5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbWFuYS9tYW5hLmhcXG5AQCAtMTAyLDcgKzEwMiw3IEBAIHN0cnVjdCBtYW5hX3N0YXRzX3J4IHtcXG4gXFx0dTY0IHBrdF9sZW4wX2VycjtcXG4gXFx0dTY0IGNvYWxlc2NlZF9jcWVbTUFOQV9DUUVfQ09BTF9QS1RTXzggLSAxXTtcXG4gXFx0c3RydWN0IHU2NF9zdGF0c19zeW5jIHN5bmNwO1xcbi19O1xcbit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XFxuIFxcbiBzdHJ1Y3QgbWFuYV9zdGF0c190eCB7XFxuIFxcdHU2NCBwYWNrZXRzO1xcbkBAIC0xMTcsNyArMTE3LDcgQEAgc3RydWN0IG1hbmFfc3RhdHNfdHgge1xcbiBcXHR1NjQgY3N1bV9wYXJ0aWFsO1xcbiBcXHR1NjQgbWFuYV9tYXBfZXJyO1xcbiBcXHRzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMgc3luY3A7XFxuLX07XFxuK30gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDtcXG4gXFxuIHN0cnVjdCBtYW5hX3R4cSB7XFxuIFxcdHN0cnVjdCBnZG1hX3F1ZXVlICpnZG1hX3NxO1xcbkBAIC0xNDMsNyArMTQzLDEyIEBAIHN0cnVjdCBtYW5hX3R4cSB7XFxuIFxcbiBcXHRib29sIG5hcGlfaW5pdGlhbGl6ZWQ7XFxuIFxcbi1cXHRzdHJ1Y3QgbWFuYV9zdGF0c190eCBzdGF0cztcXG4rXFx0dTMyIHJlc2V0X2dlbjtcXG4rXFxuK1xcdC8qIFN1cHByZXNzIGNvbXBsZXRpb24gd2FrZXVwcyBvbiB0aGUgcmVwbGFjZW1lbnQncyBuZXRkZXYgcXVldWUuICovXFxuK1xcdGJvb2wgcmV0aXJpbmc7XFxuK1xcbitcXHRzdHJ1Y3QgbWFuYV9zdGF0c190eCAqc3RhdHM7XFxuIH07XFxuIFxcbiAvKiBza2IgZGF0YSBhbmQgZnJhZ3MgZG1hIG1hcHBpbmdzICovXFxuQEAgLTQwNSw3ICs0MTAsMTYgQEAgc3RydWN0IG1hbmFfcnhxIHtcXG4gXFxuIFxcdHUzMiBidWZfaW5kZXg7XFxuIFxcbi1cXHRzdHJ1Y3QgbWFuYV9zdGF0c19yeCBzdGF0cztcXG4rXFx0LyogUG9ydC1vd25lZCBsaXZlIHNsb3Q7IHVzZSBtYW5hX3J4cV9zdGF0cygpIHRvIHNlbGVjdCB0aGUgd3JpdGVyJ3NcXG4rXFx0ICogc2xvdC5cXG4rXFx0ICovXFxuK1xcdHN0cnVjdCBtYW5hX3N0YXRzX3J4ICpzdGF0cztcXG4rXFxuK1xcdC8qIFNldCB1bmRlciBSVE5MIGJlZm9yZSBhbm90aGVyIHF1ZXVlIHRha2VzIG92ZXIgdGhpcyBpbmRleC4gKi9cXG4rXFx0Ym9vbCByZXRpcmluZztcXG4rXFxuK1xcdC8qIEZvbGRlZCB1bmRlciBSVE5MIGFmdGVyIGRyYWluLXN0YXQgd3JpdGVycyBxdWllc2NlLiAqL1xcbitcXHRzdHJ1Y3QgbWFuYV9zdGF0c19yeCBkcmFpbl9zdGF0cztcXG4gXFxuIFxcdHN0cnVjdCBicGZfcHJvZyBfX3JjdSAqYnBmX3Byb2c7XFxuIFxcdHN0cnVjdCB4ZHBfcnhxX2luZm8geGRwX3J4cTtcXG5AQCAtNTM3LDYgKzU1MSwxMiBAQCBzdHJ1Y3QgbWFuYV9jb250ZXh0IHtcXG4gXFx0dTggYm1faG9zdG1vZGU7XFxuIFxcbiBcXHRzdHJ1Y3QgbWFuYV9ldGh0b29sX2hjX3N0YXRzIGhjX3N0YXRzO1xcbitcXG4rXFx0LyogR2VuZXJhdGlvbiBvZiBzdWNjZXNzZnVsIHJlc2V0cyBpc3N1ZWQgYnkgbWFuYV9kcmFpbl90eHFzKCksIHVuZGVyXFxuK1xcdCAqIFJUTkwuXFxuK1xcdCAqL1xcbitcXHR1MzIgcmVzZXRfZ2VuO1xcbitcXG4gXFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnBlcl9wb3J0X3F1ZXVlX3Jlc2V0X3dxO1xcbiBcXHQvKiBXb3JrcXVldWUgZm9yIHF1ZXJ5aW5nIGhhcmR3YXJlIHN0YXRzICovXFxuIFxcdHN0cnVjdCBkZWxheWVkX3dvcmsgZ2Zfc3RhdHNfd29yaztcXG5AQCAtNTU5LDcgKzU3OSw5IEBAIHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCB7XFxuIFxcbiBcXHR1OCBtYWNfYWRkcltFVEhfQUxFTl07XFxuIFxcbitcXHQvKiBQb3J0LW93bmVkIEVRIHBvb2w6IG1heF9xdWV1ZXMgc2xvdHMsIG51bV9lcXMgcG9wdWxhdGVkLiAqL1xcbiBcXHRzdHJ1Y3QgbWFuYV9lcSAqZXFzO1xcbitcXHR1bnNpZ25lZCBpbnQgbnVtX2VxcztcXG4gXFx0c3RydWN0IGRlbnRyeSAqbWFuYV9lcXNfZGVidWdmcztcXG4gXFxuIFxcdGVudW0gVFJJX1NUQVRFIHJzc19zdGF0ZTtcXG5AQCAtNjAwLDkgKzYyMiwyMSBAQCBzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQge1xcbiBcXHR1bnNpZ25lZCBpbnQgbWF4X3F1ZXVlcztcXG4gXFx0dW5zaWduZWQgaW50IG51bV9xdWV1ZXM7XFxuIFxcbitcXHQvKiBQb3J0LWxpZmV0aW1lIGFycmF5cyB3aXRoIG1heF9xdWV1ZXMgc2xvdHMuIExpdmUgUlggcXVldWVzIHdyaXRlXFxuK1xcdCAqIHJ4cV9zdGF0c1tdOyB0ZWFyZG93biBhbmQgcm9sbGJhY2sgZm9sZCBkcmFpbl9zdGF0cyBpbnRvXFxuK1xcdCAqIHJ4cV9zdGF0c19yZXRbXSB1bmRlciBSVE5MLiBSZWFkZXJzIHN1bSBib3RoLlxcbitcXHQgKi9cXG4rXFx0c3RydWN0IG1hbmFfc3RhdHNfcnggKnJ4cV9zdGF0cztcXG4rXFx0c3RydWN0IG1hbmFfc3RhdHNfcnggKnJ4cV9zdGF0c19yZXQ7XFxuK1xcdHN0cnVjdCBtYW5hX3N0YXRzX3R4ICp0eHFfc3RhdHM7XFxuK1xcbiBcXHR1bnNpZ25lZCBpbnQgcnhfcXVldWVfc2l6ZTtcXG4gXFx0dW5zaWduZWQgaW50IHR4X3F1ZXVlX3NpemU7XFxuIFxcbitcXHQvKiBNVFUgdXNlZCB0byBzaXplIFJYIGJ1ZmZlcnMsIGluZGVwZW5kZW50IG9mIG5kZXYtXFx1MDAzZW10dSBkdXJpbmcgYSBzd2FwLlxcbitcXHQgKi9cXG4rXFx0aW50IGNvbmZpZ3VyZWRfbXR1O1xcbitcXG4gXFx0bWFuYV9oYW5kbGVfdCBwb3J0X2hhbmRsZTtcXG4gXFx0bWFuYV9oYW5kbGVfdCBwZl9maWx0ZXJfaGFuZGxlO1xcbiBcXG5AQCAtNjEwLDEyICs2NDQsMTcgQEAgc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0IHtcXG4gXFx0c3RydWN0IG11dGV4IHZwb3J0X211dGV4O1xcbiBcXHRpbnQgdnBvcnRfdXNlX2NvdW50O1xcbiBcXG4tXFx0LyogU2V0IGJ5IG1hbmFfc2V0X2NoYW5uZWxzKCkgdW5kZXIgdnBvcnRfbXV0ZXggdG8gYmxvY2sgUkRNQVxcbi1cXHQgKiBmcm9tIGdyYWJiaW5nIHRoZSB2cG9ydCBkdXJpbmcgdGhlIGRldGFjaC9hdHRhY2ggd2luZG93Llxcbi1cXHQgKiBDaGVja2VkIGJ5IG1hbmFfY2ZnX3Zwb3J0KCkgd2hlbiBjYWxsZWQgZnJvbSB0aGUgUkRNQSBwYXRoLlxcbi1cXHQgKi9cXG4rXFx0LyogRXhjbHVkZSBSRE1BIGR1cmluZyByZWNvbmZpZ3VyYXRpb247IHByb3RlY3RlZCBieSB2cG9ydF9tdXRleC4gKi9cXG4gXFx0Ym9vbCBjaGFubmVsX2NoYW5naW5nO1xcbiBcXG4rXFx0LyogQ2FsbGVyIG11c3QgY2xvc2UgdGhlIHBvcnQgYWZ0ZXIgcmVsZWFzaW5nIHRoZSB1bnB1Ymxpc2hlZCBzZXQuICovXFxuK1xcdGJvb2wgcHVibGlzaF9kZWFkX2VuZDtcXG4rXFxuK1xcdC8qIENhcnJpZXIgbG93ZXJlZCBieSBmYWlsZWQgcm9sbGJhY2s7IGNsZWFyZWQgb24gcmVvcGVuIG9yIGEgbGlua1xcbitcXHQgKiBldmVudC5cXG4rXFx0ICovXFxuK1xcdGJvb2wgY2Fycmllcl9mb3JjZWRfb2ZmO1xcbitcXG4gXFx0LyogTmV0IHNoYXBlciBoYW5kbGUqL1xcbiBcXHRzdHJ1Y3QgbmV0X3NoYXBlcl9oYW5kbGUgaGFuZGxlO1xcbiBcXG5AQCAtNjYxLDYgKzcwMCwyNyBAQCBzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQge1xcbiBcXHR1MzIgc3RlZXJfY3FlX2NvYWxlc2Npbmc7XFxuIH07XFxuIFxcbitzdHJ1Y3QgbWFuYV9xc2V0IHtcXG4rXFx0c3RydWN0IG1hbmFfdHhfcXBcXHQqKnR4X3FwO1xcbitcXHRzdHJ1Y3QgbWFuYV9yeHFcXHRcXHQqKnJ4cXM7XFxuK1xcbitcXHR1MzJcXHRcXHRcXHQqaW5kaXJfdGFibGU7XFxuK1xcdHUzMlxcdFxcdFxcdGluZGlyX3RhYmxlX3N6O1xcbitcXHRtYW5hX2hhbmRsZV90XFx0XFx0KnJ4b2JqX3RhYmxlO1xcbitcXHRtYW5hX2hhbmRsZV90XFx0XFx0ZGVmYXVsdF9yeG9iajtcXG4rXFxuK1xcdHVuc2lnbmVkIGludFxcdFxcdG51bV9xdWV1ZXM7XFxuK1xcdHVuc2lnbmVkIGludFxcdFxcdHJ4X3F1ZXVlX3NpemU7XFxuK1xcdHVuc2lnbmVkIGludFxcdFxcdHR4X3F1ZXVlX3NpemU7XFxuK1xcdHUzMlxcdFxcdFxcdHByaXZfZmxhZ3M7XFxuK1xcbitcXHRpbnRcXHRcXHRcXHRtdHU7XFxuK1xcdHN0cnVjdCBicGZfcHJvZ1xcdFxcdCpicGZfcHJvZztcXG4rXFxuK1xcdC8qIE5vdGlmeSB0aGUgY29yZSBvbmx5IGFmdGVyIHRoaXMgc2V0IGlzIHB1Ymxpc2hlZC4gKi9cXG4rXFx0Ym9vbFxcdFxcdFxcdHJ4ZmhfaW5kaXJfbG9zdDtcXG4rfTtcXG4rXFxuIG5ldGRldl90eF90IG1hbmFfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XFxuIGludCBtYW5hX2NvbmZpZ19yc3Moc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphYywgZW51bSBUUklfU1RBVEUgcngsXFxuIFxcdFxcdCAgICBib29sIHVwZGF0ZV9oYXNoLCBib29sIHVwZGF0ZV90YWIpO1xcbkBAIC02NzAsNiArNzMwLDMzIEBAIGludCBtYW5hX2FsbG9jX3F1ZXVlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XFxuIGludCBtYW5hX2F0dGFjaChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XFxuIGludCBtYW5hX2RldGFjaChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgYm9vbCBmcm9tX2Nsb3NlKTtcXG4gXFxuK3N0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqXFxuK21hbmFfcXNldF9zY3JhdGNoX2FsbG9jKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKTtcXG4rdm9pZCBtYW5hX3FzZXRfc2NyYXRjaF9mcmVlKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqc2NyYXRjaCk7XFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1hbmFfc3RhdHNfcnggKm1hbmFfcnhxX3N0YXRzKHN0cnVjdCBtYW5hX3J4cSAqcnhxKVxcbit7XFxuK1xcdHJldHVybiBSRUFEX09OQ0UocnhxLVxcdTAwM2VyZXRpcmluZykgPyBcXHUwMDI2cnhxLVxcdTAwM2VkcmFpbl9zdGF0cyA6IHJ4cS1cXHUwMDNlc3RhdHM7XFxuK31cXG4rXFxuK2ludCBtYW5hX2FsbG9jX3FzZXQoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXFxuK1xcdFxcdCAgICBzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKnNjcmF0Y2gsXFxuK1xcdFxcdCAgICB1bnNpZ25lZCBpbnQgcnhfcXVldWVfc2l6ZSwgdW5zaWduZWQgaW50IHR4X3F1ZXVlX3NpemUsXFxuK1xcdFxcdCAgICB1MzIgcHJpdl9mbGFncywgaW50IG10dSwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZyxcXG4rXFx0XFx0ICAgIHN0cnVjdCBtYW5hX3FzZXQgKm91dCk7XFxuK2ludCBtYW5hX3NwbGl0X3FzZXQoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXFxuK1xcdFxcdCAgICBzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKnNjcmF0Y2gsIHVuc2lnbmVkIGludCBuZXdfY291bnQsXFxuK1xcdFxcdCAgICBzdHJ1Y3QgbWFuYV9xc2V0ICpvdXRfbmV3LCBzdHJ1Y3QgbWFuYV9xc2V0ICpvdXRfdGFpbCk7XFxuK3ZvaWQgbWFuYV9kaXNjYXJkX3NwbGl0KHN0cnVjdCBtYW5hX3FzZXQgKm5ld3EsIHN0cnVjdCBtYW5hX3FzZXQgKnRhaWxxKTtcXG4raW50IG1hbmFfZ3Jvd19xc2V0KHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxcbitcXHRcXHQgICBzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKnNjcmF0Y2gsIHVuc2lnbmVkIGludCBuZXdfY291bnQsXFxuK1xcdFxcdCAgIHN0cnVjdCBtYW5hX3FzZXQgKm91dF9uZXcsIHN0cnVjdCBtYW5hX3FzZXQgKm91dF9mcmVzaCk7XFxuK3ZvaWQgbWFuYV9kaXNjYXJkX2dyb3coc3RydWN0IG1hbmFfcXNldCAqbmV3cSk7XFxuK2ludCBtYW5hX3B1Ymxpc2hfcXNldChzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgc3RydWN0IG1hbmFfcXNldCAqbmV3cSxcXG4rXFx0XFx0ICAgICAgc3RydWN0IG1hbmFfcXNldCAqb3V0X29sZCk7XFxuK3ZvaWQgbWFuYV9wdWJsaXNoX2Nsb3NlX2lmX25lZWRlZChzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyk7XFxuK3ZvaWQgbWFuYV9mcmVlX3FzZXQoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICpzY3JhdGNoLCBzdHJ1Y3QgbWFuYV9xc2V0ICpxc2V0KTtcXG4rdm9pZCBtYW5hX3FzZXRfZGVidWdmc19wdWJsaXNoKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKTtcXG4rXFxuIHZvaWQgbWFuYV9kaW1fY2hhbmdlKHN0cnVjdCBtYW5hX2NxICpjcSwgYm9vbCBlbmFibGUpO1xcbiBcXG4gaW50IG1hbmFfcHJvYmUoc3RydWN0IGdkbWFfZGV2ICpnZCwgYm9vbCByZXN1bWluZyk7XFxuQEAgLTY4NSw2ICs3NzIsOCBAQCB1MzIgbWFuYV9ydW5feGRwKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgbWFuYV9yeHEgKnJ4cSxcXG4gXFx0XFx0IHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCB2b2lkICpidWZfdmEsIHVpbnQgcGt0X2xlbik7XFxuIHN0cnVjdCBicGZfcHJvZyAqbWFuYV94ZHBfZ2V0KHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKTtcXG4gdm9pZCBtYW5hX2Nobl9zZXR4ZHAoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XFxuK3N0cnVjdCBicGZfcHJvZyAqbWFuYV9jaG5feGRwX3BlZWsoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpO1xcbit2b2lkIG1hbmFfY2huX3hkcF9yZWxlYXNlKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdW5zaWduZWQgaW50IG51bV9xdWV1ZXMpO1xcbiBpbnQgbWFuYV9icGYoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBuZXRkZXZfYnBmICpicGYpO1xcbiBpbnQgbWFuYV9xdWVyeV9nZl9zdGF0cyhzdHJ1Y3QgbWFuYV9jb250ZXh0ICphYyk7XFxuIGludCBtYW5hX3F1ZXJ5X2xpbmtfY2ZnKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6NDc6MjUuNDY5NDUxMDA1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNDQ3NDkxNjU5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvIGFuZCBpbmNsdWRlL25ldC9tYW5hLykuIFRoaXMgZHJpdmVyIHRhcmdldHMgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlL1NtYXJ0TklDcyBvbiBNaWNyb3NvZnQgQXp1cmUgLyBIeXBlci1WIGVudmlyb25tZW50cyBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuIEFzIHN1Y2gsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZmNjZjJiNWE0NGE4N2Y3M2UwYjkwMTI0NWY4N2FiNDUzOGJiNDBkZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMjI6NDc6MjQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2JwZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9icGYuY1xuaW5kZXggNzBiYjhjOWRjMzQxMy4uM2FjZWMxYmIwMmEzNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfYnBmLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfYnBmLmNcbkBAIC01OSw2ICs1OSwxMSBAQCBpbnQgbWFuYV94ZHBfeG1pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IG4sIHN0cnVjdCB4ZHBfZnJhbWUgKipmcmFtZXMsXG4gXHRpZiAodW5saWtlbHkoIWFwYy1cdTAwM2Vwb3J0X2lzX3VwKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4rXHQvKiBQYWlyIHdpdGggdGhlIHNtcF93bWIoKSBpbiBtYW5hX3B1Ymxpc2hfcXNldCgpIGJlZm9yZSByZWFkaW5nIHF1ZXVlXG4rXHQgKiBzdGF0ZS5cbitcdCAqL1xuK1x0c21wX3JtYigpO1xuK1xuIFx0cV9pZHggPSBzbXBfcHJvY2Vzc29yX2lkKCkgJSBuZGV2LVx1MDAzZXJlYWxfbnVtX3R4X3F1ZXVlcztcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG47IGkrKykge1xuQEAgLTY4LDcgKzczLDcgQEAgaW50IG1hbmFfeGRwX3htaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGludCBuLCBzdHJ1Y3QgeGRwX2ZyYW1lICoqZnJhbWVzLFxuIFx0XHRjb3VudCsrO1xuIFx0fVxuIFxuLVx0dHhfc3RhdHMgPSBcdTAwMjZhcGMtXHUwMDNldHhfcXBbcV9pZHhdLVx1MDAzZXR4cS5zdGF0cztcbitcdHR4X3N0YXRzID0gYXBjLVx1MDAzZXR4X3FwW3FfaWR4XS1cdTAwM2V0eHEuc3RhdHM7XG4gXG4gXHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnR4X3N0YXRzLVx1MDAzZXN5bmNwKTtcbiBcdHR4X3N0YXRzLVx1MDAzZXhkcF94bWl0ICs9IGNvdW50O1xuQEAgLTk1LDcgKzEwMCw3IEBAIHUzMiBtYW5hX3J1bl94ZHAoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBtYW5hX3J4cSAqcnhxLFxuIFxuIFx0YWN0ID0gYnBmX3Byb2dfcnVuX3hkcChwcm9nLCB4ZHApO1xuIFxuLVx0cnhfc3RhdHMgPSBcdTAwMjZyeHEtXHUwMDNlc3RhdHM7XG4rXHRyeF9zdGF0cyA9IG1hbmFfcnhxX3N0YXRzKHJ4cSk7XG4gXG4gXHRzd2l0Y2ggKGFjdCkge1xuIFx0Y2FzZSBYRFBfUEFTUzpcbkBAIC0xNzIsNiArMTc3LDggQEAgc3RhdGljIGludCBtYW5hX3hkcF9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbiBcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqc2NyYXRjaDtcbitcdHN0cnVjdCBtYW5hX3FzZXQgbmV3cSwgb2xkcTtcbiBcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7XG4gXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYztcbiBcdGludCBlcnI7XG5AQCAtMTkxLDQ2ICsxOTgsNDQgQEAgc3RhdGljIGludCBtYW5hX3hkcF9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuIFxuLVx0LyogT25lIHJlZmNudCBvZiB0aGUgcHJvZyBpcyBob2xkIGJ5IHRoZSBjYWxsZXIgYWxyZWFkeSwgc29cbi1cdCAqIGRvbid0IGluY3JlYXNlIHJlZmNudCBmb3IgdGhpcyBvbmUuXG4tXHQgKi9cbi1cdGFwYy1cdTAwM2VicGZfcHJvZyA9IHByb2c7XG4tXG4gXHRpZiAoYXBjLVx1MDAzZXBvcnRfaXNfdXApIHtcbi1cdFx0LyogUmUtY3JlYXRlIHJ4cSdzIGFmdGVyIHhkcCBwcm9nIHdhcyBsb2FkZWQgb3IgdW5sb2FkZWQuXG4tXHRcdCAqIEV4OiByZSBjcmVhdGUgcnhxJ3MgdG8gc3dpdGNoIGZyb20gZnVsbCBwYWdlcyB0byBzbWFsbGVyXG4tXHRcdCAqIHNpemUgcGFnZSBmcmFnbWVudHMgd2hlbiB4ZHAgcHJvZyBpcyB1bmxvYWRlZCBhbmRcbi1cdFx0ICogdmljZS12ZXJzYS5cbi1cdFx0ICovXG4tXG4tXHRcdC8qIFByZS1hbGxvY2F0ZSBidWZmZXJzIHRvIHByZXZlbnQgZmFpbHVyZSBpbiBtYW5hX2F0dGFjaCAqL1xuLVx0XHRlcnIgPSBtYW5hX3ByZV9hbGxvY19yeGJ1ZnMoYXBjLCBuZGV2LVx1MDAzZW10dSwgYXBjLVx1MDAzZW51bV9xdWV1ZXMpO1xuLVx0XHRpZiAoZXJyKSB7XG4rXHRcdHNjcmF0Y2ggPSBtYW5hX3FzZXRfc2NyYXRjaF9hbGxvYyhhcGMpO1xuK1x0XHRpZiAoIXNjcmF0Y2gpIHtcbiBcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuLVx0XHRcdFx0XHQgICBcIlhEUDogSW5zdWZmaWNpZW50IG1lbW9yeSBmb3IgdHgvcnggcmUtY29uZmlnXCIpO1xuLVx0XHRcdHJldHVybiBlcnI7XG4rXHRcdFx0XHRcdCAgIFwiWERQOiBJbnN1ZmZpY2llbnQgbWVtb3J5IGZvciByZS1jb25maWdcIik7XG4rXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRcdH1cbiBcbi1cdFx0ZXJyID0gbWFuYV9kZXRhY2gobmRldiwgZmFsc2UpO1xuK1x0XHRlcnIgPSBtYW5hX2FsbG9jX3FzZXQoYXBjLCBzY3JhdGNoLFxuK1x0XHRcdFx0ICAgICAgYXBjLVx1MDAzZXJ4X3F1ZXVlX3NpemUsIGFwYy1cdTAwM2V0eF9xdWV1ZV9zaXplLFxuK1x0XHRcdFx0ICAgICAgYXBjLVx1MDAzZXByaXZfZmxhZ3MsIGFwYy1cdTAwM2Vjb25maWd1cmVkX210dSxcbitcdFx0XHRcdCAgICAgIHByb2csIFx1MDAyNm5ld3EpO1xuIFx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0bmV0ZGV2X2VycihuZGV2LFxuLVx0XHRcdFx0ICAgXCJtYW5hX2RldGFjaCBmYWlsZWQgYXQgeGRwIHNldDogJWRcXG5cIiwgZXJyKTtcbiBcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuLVx0XHRcdFx0XHQgICBcIlhEUDogUmUtY29uZmlnIGZhaWxlZCBhdCBkZXRhY2hcIik7XG4tXHRcdFx0Z290byBlcnJfZGVhbGxvY19yeGJ1ZmZzO1xuK1x0XHRcdFx0XHQgICBcIlhEUDogUmUtY29uZmlnIGZhaWxlZCBhdCBhbGxvY1wiKTtcbitcdFx0XHRtYW5hX3FzZXRfc2NyYXRjaF9mcmVlKHNjcmF0Y2gpO1xuK1x0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbiBcbi1cdFx0ZXJyID0gbWFuYV9hdHRhY2gobmRldik7XG4rXHRcdGVyciA9IG1hbmFfcHVibGlzaF9xc2V0KGFwYywgXHUwMDI2bmV3cSwgXHUwMDI2b2xkcSk7XG4gXHRcdGlmIChlcnIpIHtcbi1cdFx0XHRuZXRkZXZfZXJyKG5kZXYsXG4tXHRcdFx0XHQgICBcIm1hbmFfYXR0YWNoIGZhaWxlZCBhdCB4ZHAgc2V0OiAlZFxcblwiLCBlcnIpO1xuIFx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4tXHRcdFx0XHRcdCAgIFwiWERQOiBSZS1jb25maWcgZmFpbGVkIGF0IGF0dGFjaFwiKTtcbi1cdFx0XHRnb3RvIGVycl9kZWFsbG9jX3J4YnVmZnM7XG4rXHRcdFx0XHRcdCAgIFwiWERQOiBSZS1jb25maWcgZmFpbGVkIGF0IHB1Ymxpc2hcIik7XG4rXHRcdFx0bWFuYV9mcmVlX3FzZXQoc2NyYXRjaCwgXHUwMDI2bmV3cSk7XG4rXHRcdFx0LyogRnJlZSB0aGUgcXVldWVzIGJlZm9yZSBjbG9zaW5nIHRoZWlyIHNoYXJlZCBFUSBwb29sLlxuK1x0XHRcdCAqL1xuK1x0XHRcdG1hbmFfcHVibGlzaF9jbG9zZV9pZl9uZWVkZWQoYXBjKTtcbitcdFx0XHRtYW5hX3FzZXRfc2NyYXRjaF9mcmVlKHNjcmF0Y2gpO1xuK1x0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbiBcbi1cdFx0bWFuYV9jaG5fc2V0eGRwKGFwYywgcHJvZyk7XG4tXHRcdG1hbmFfcHJlX2RlYWxsb2NfcnhidWZzKGFwYyk7XG4rXHRcdG1hbmFfZnJlZV9xc2V0KHNjcmF0Y2gsIFx1MDAyNm9sZHEpO1xuK1x0XHRtYW5hX3FzZXRfc2NyYXRjaF9mcmVlKHNjcmF0Y2gpO1xuK1x0fSBlbHNlIHtcbitcdFx0LyogVXNlIHRoZSBjYWxsZXIncyBwcm9ncmFtIHJlZmVyZW5jZTsgbWFuYV9vcGVuKCkgaW5zdGFsbHMgaXRcbitcdFx0ICogb24gcXVldWVzLlxuK1x0XHQgKi9cbitcdFx0YXBjLVx1MDAzZWJwZl9wcm9nID0gcHJvZztcbiBcdH1cbiBcbiBcdGlmIChvbGRfcHJvZylcbkBAIC0yNDMsMTEgKzI0OCw2IEBAIHN0YXRpYyBpbnQgbWFuYV94ZHBfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4gXHRcdG5kZXYtXHUwMDNlbWF4X210dSA9IGdjLVx1MDAzZWFkYXB0ZXJfbXR1IC0gRVRIX0hMRU47XG4gXG4gXHRyZXR1cm4gMDtcbi1cbi1lcnJfZGVhbGxvY19yeGJ1ZmZzOlxuLVx0YXBjLVx1MDAzZWJwZl9wcm9nID0gb2xkX3Byb2c7XG4tXHRtYW5hX3ByZV9kZWFsbG9jX3J4YnVmcyhhcGMpO1xuLVx0cmV0dXJuIGVycjtcbiB9XG4gXG4gaW50IG1hbmFfYnBmKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgbmV0ZGV2X2JwZiAqYnBmKVxuQEAgLTI2MiwzICsyNjIsMjcgQEAgaW50IG1hbmFfYnBmKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgbmV0ZGV2X2JwZiAqYnBmKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG4gfVxuK1xuK3N0cnVjdCBicGZfcHJvZyAqbWFuYV9jaG5feGRwX3BlZWsoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpXG4re1xuK1x0QVNTRVJUX1JUTkwoKTtcbitcbitcdGlmICghYXBjLVx1MDAzZXJ4cXMgfHwgIWFwYy1cdTAwM2VyeHFzWzBdKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHJldHVybiBydG5sX2RlcmVmZXJlbmNlKGFwYy1cdTAwM2VyeHFzWzBdLVx1MDAzZWJwZl9wcm9nKTtcbit9XG4rXG4rLyogS2VlcCB0aGUgcGVyLXF1ZXVlIHByb2dyYW0gcG9pbnRlcnMgdW50aWwgUlggcG9sbGluZyBzdG9wcy4gKi9cbit2b2lkIG1hbmFfY2huX3hkcF9yZWxlYXNlKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdW5zaWduZWQgaW50IG51bV9xdWV1ZXMpXG4re1xuK1x0dW5zaWduZWQgaW50IGk7XG4rXG4rXHRBU1NFUlRfUlROTCgpO1xuK1xuK1x0aWYgKCFwcm9nKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fcXVldWVzOyBpKyspXG4rXHRcdGJwZl9wcm9nX3B1dChwcm9nKTtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jXG5pbmRleCA3YTFhYzg1M2UzYWJjLi4yOWY1NGY5MWNiMDA5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNcbkBAIC05MCw2ICs5MCwxNyBAQCBzdGF0aWMgaW50IG1hbmFfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdHNtcF93bWIoKTtcbiBcbiBcdG5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhuZGV2KTtcbitcbitcdC8qIFVuZG8gYSBmb3JjZWQgY2Fycmllci1vZmYgdW5sZXNzIGEgZGlzY29ubmVjdCBpcyBwZW5kaW5nIGJlaGluZCBSVE5MLlxuK1x0ICovXG4rXHRpZiAoYXBjLVx1MDAzZWNhcnJpZXJfZm9yY2VkX29mZikge1xuK1x0XHR1MzIgZXYgPSBSRUFEX09OQ0UoYXBjLVx1MDAzZWFjLVx1MDAzZWxpbmtfZXZlbnQpO1xuK1xuK1x0XHRhcGMtXHUwMDNlY2Fycmllcl9mb3JjZWRfb2ZmID0gZmFsc2U7XG4rXHRcdGlmIChldiAhPSBIV0NfREFUQV9IV19MSU5LX0RJU0NPTk5FQ1QpXG4rXHRcdFx0bmV0aWZfY2Fycmllcl9vbihuZGV2KTtcbitcdH1cbitcbiBcdG5ldGRldl9kYmcobmRldiwgXCIlcyBzdWNjZXNzZnVsXFxuXCIsIF9fZnVuY19fKTtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xMDYsNiArMTE3LDcgQEAgc3RhdGljIGludCBtYW5hX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFxuIHN0YXRpYyB2b2lkIG1hbmFfbGlua19zdGF0ZV9oYW5kbGUoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxuIHtcbitcdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjO1xuIFx0c3RydWN0IG1hbmFfY29udGV4dCAqYWM7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcbiBcdHUzMiBsaW5rX2V2ZW50O1xuQEAgLTEzMSw2ICsxNDMsOSBAQCBzdGF0aWMgdm9pZCBtYW5hX2xpbmtfc3RhdGVfaGFuZGxlKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbiBcdFx0aWYgKCFuZGV2KVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuK1x0XHRhcGMgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcdFx0YXBjLVx1MDAzZWNhcnJpZXJfZm9yY2VkX29mZiA9IGZhbHNlO1xuK1xuIFx0XHRpZiAobGlua191cCkge1xuIFx0XHRcdG5ldGlmX2NhcnJpZXJfb24obmRldik7XG4gXG5AQCAtMzEyLDggKzMyNyw4IEBAIHN0YXRpYyB2b2lkIG1hbmFfcGVyX3BvcnRfcXVldWVfcmVzZXRfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcbiBcdHJ0bmxfbG9jaygpO1xuIFxuLVx0LyogQmxvY2sgUkRNQSBmcm9tIGdyYWJiaW5nIHRoZSB2cG9ydCBkdXJpbmcgdGhlIGRldGFjaC9hdHRhY2hcbi1cdCAqIHdpbmRvdywgc2FtZSBhcyBtYW5hX3NldF9jaGFubmVscygpLlxuK1x0LyogRXhjbHVkZSBSRE1BIGFjcm9zcyBkZXRhY2gvYXR0YWNoOyBSVE5MIHNlcmlhbGl6ZXMgY2hhbm5lbF9jaGFuZ2luZ1xuK1x0ICogd3JpdGVycy5cbiBcdCAqL1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZhcGMtXHUwMDNldnBvcnRfbXV0ZXgpO1xuIFx0YXBjLVx1MDAzZWNoYW5uZWxfY2hhbmdpbmcgPSB0cnVlO1xuQEAgLTM2NiwxMyArMzgxLDIyIEBAIG5ldGRldl90eF90IG1hbmFfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdGlmICh1bmxpa2VseSghYXBjLVx1MDAzZXBvcnRfaXNfdXApKVxuIFx0XHRnb3RvIHR4X2Ryb3A7XG4gXG4rXHQvKiBQYWlyIHdpdGggbWFuYV9wdWJsaXNoX3FzZXQoKSdzIHByZS1nYXRlIHNtcF93bWIoKTogb2JzZXJ2ZSBxdWV1ZVxuK1x0ICogZmllbGRzIGFmdGVyIHJlYWRpbmcgcG9ydF9pc191cC5cbitcdCAqL1xuK1x0c21wX3JtYigpO1xuK1xuK1x0LyogUmV0aXJpbmcgUlhRcyBtYXkgdXNlIGluZGljZXMgYmV5b25kIHRoZSBsaXZlIHF1ZXVlIGNvdW50LiAqL1xuK1x0aWYgKHVubGlrZWx5KHR4cV9pZHggXHUwMDNlPSBhcGMtXHUwMDNlbnVtX3F1ZXVlcykpXG4rXHRcdGdvdG8gdHhfZHJvcF9jb3VudDtcbitcbiBcdGlmIChza2JfY293X2hlYWQoc2tiLCBNQU5BX0hFQURST09NKSlcbiBcdFx0Z290byB0eF9kcm9wX2NvdW50O1xuIFxuIFx0dHhxID0gXHUwMDI2YXBjLVx1MDAzZXR4X3FwW3R4cV9pZHhdLVx1MDAzZXR4cTtcbiBcdGdkbWFfc3EgPSB0eHEtXHUwMDNlZ2RtYV9zcTtcbiBcdGNxID0gXHUwMDI2YXBjLVx1MDAzZXR4X3FwW3R4cV9pZHhdLVx1MDAzZXR4X2NxO1xuLVx0dHhfc3RhdHMgPSBcdTAwMjZ0eHEtXHUwMDNlc3RhdHM7XG4rXHR0eF9zdGF0cyA9IHR4cS1cdTAwM2VzdGF0cztcbiBcbiBcdEJVSUxEX0JVR19PTihNQVhfVFhfV1FFX1NHTF9FTlRSSUVTICE9IE1BTkFfTUFYX1RYX1dRRV9TR0xfRU5UUklFUyk7XG4gXHRpZiAoTUFYX1NLQl9GUkFHUyArIDIgXHUwMDNlIE1BWF9UWF9XUUVfU0dMX0VOVFJJRVMgXHUwMDI2XHUwMDI2XG5AQCAtNTUxLDcgKzU3NSw3IEBAIG5ldGRldl90eF90IG1hbmFfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdC8qIFBvcHVsYXRlZCB0aGUgcGFja2V0IGFuZCBieXRlcyBjb3VudGVycyBiYXNlZCBvbiBwb3N0IEdTTyBwYWNrZXRcbiBcdCAqIGNhbGN1bGF0aW9uc1xuIFx0ICovXG4tXHR0eF9zdGF0cyA9IFx1MDAyNnR4cS1cdTAwM2VzdGF0cztcbitcdHR4X3N0YXRzID0gdHhxLVx1MDAzZXN0YXRzO1xuIFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZ0eF9zdGF0cy1cdTAwM2VzeW5jcCk7XG4gXHR0eF9zdGF0cy1cdTAwM2VwYWNrZXRzICs9IG51bV9nc29fc2VnO1xuIFx0dHhfc3RhdHMtXHUwMDNlYnl0ZXMgKz0gbGVuICsgKChudW1fZ3NvX3NlZyAtIDEpICogZ3NvX2hzKTtcbkBAIC01OTcsMTUgKzYyMSwxNSBAQCBzdGF0aWMgdm9pZCBtYW5hX2dldF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFx0XHRcdCAgICAgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdClcbiB7XG4gXHRzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyA9IG5ldGRldl9wcml2KG5kZXYpO1xuLVx0dW5zaWduZWQgaW50IG51bV9xdWV1ZXMgPSBhcGMtXHUwMDNlbnVtX3F1ZXVlcztcbiBcdHN0cnVjdCBtYW5hX3N0YXRzX3J4ICpyeF9zdGF0cztcbiBcdHN0cnVjdCBtYW5hX3N0YXRzX3R4ICp0eF9zdGF0cztcbitcdHVuc2lnbmVkIGludCBudW1fcXVldWVzO1xuIFx0dW5zaWduZWQgaW50IHN0YXJ0O1xuIFx0dTY0IHBhY2tldHMsIGJ5dGVzO1xuIFx0aW50IHE7XG4gXG4tXHRpZiAoIWFwYy1cdTAwM2Vwb3J0X2lzX3VwKVxuLVx0XHRyZXR1cm47XG4rXHQvKiBSZXBvcnQgZXZlbiB3aGlsZSBkb3duOyBkZXZfZ2V0X3N0YXRzKCkgemVyb2VzIGl0cyBvdXRwdXQuICovXG4rXHRudW1fcXVldWVzID0gYXBjLVx1MDAzZW1heF9xdWV1ZXM7XG4gXG4gXHRuZXRkZXZfc3RhdHNfdG9fc3RhdHM2NChzdCwgXHUwMDI2bmRldi1cdTAwM2VzdGF0cyk7XG4gXG5AQCAtNjE1LDcgKzYzOSwxOCBAQCBzdGF0aWMgdm9pZCBtYW5hX2dldF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFx0c3QtXHUwMDNlcnhfbWlzc2VkX2Vycm9ycyA9IGFwYy1cdTAwM2VhYy1cdTAwM2VoY19zdGF0cy5oY19yeF9kaXNjYXJkc19ub193cWU7XG4gXG4gXHRmb3IgKHEgPSAwOyBxIFx1MDAzYyBudW1fcXVldWVzOyBxKyspIHtcbi1cdFx0cnhfc3RhdHMgPSBcdTAwMjZhcGMtXHUwMDNlcnhxc1txXS1cdTAwM2VzdGF0cztcbitcdFx0cnhfc3RhdHMgPSBcdTAwMjZhcGMtXHUwMDNlcnhxX3N0YXRzW3FdO1xuK1xuK1x0XHRkbyB7XG4rXHRcdFx0c3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oXHUwMDI2cnhfc3RhdHMtXHUwMDNlc3luY3ApO1xuK1x0XHRcdHBhY2tldHMgPSByeF9zdGF0cy1cdTAwM2VwYWNrZXRzO1xuK1x0XHRcdGJ5dGVzID0gcnhfc3RhdHMtXHUwMDNlYnl0ZXM7XG4rXHRcdH0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeShcdTAwMjZyeF9zdGF0cy1cdTAwM2VzeW5jcCwgc3RhcnQpKTtcbitcbitcdFx0c3QtXHUwMDNlcnhfcGFja2V0cyArPSBwYWNrZXRzO1xuK1x0XHRzdC1cdTAwM2VyeF9ieXRlcyArPSBieXRlcztcbitcbitcdFx0cnhfc3RhdHMgPSBcdTAwMjZhcGMtXHUwMDNlcnhxX3N0YXRzX3JldFtxXTtcbiBcbiBcdFx0ZG8ge1xuIFx0XHRcdHN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luKFx1MDAyNnJ4X3N0YXRzLVx1MDAzZXN5bmNwKTtcbkBAIC02MjgsNyArNjYzLDcgQEAgc3RhdGljIHZvaWQgbWFuYV9nZXRfc3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcdH1cbiBcbiBcdGZvciAocSA9IDA7IHEgXHUwMDNjIG51bV9xdWV1ZXM7IHErKykge1xuLVx0XHR0eF9zdGF0cyA9IFx1MDAyNmFwYy1cdTAwM2V0eF9xcFtxXS1cdTAwM2V0eHEuc3RhdHM7XG4rXHRcdHR4X3N0YXRzID0gXHUwMDI2YXBjLVx1MDAzZXR4cV9zdGF0c1txXTtcbiBcbiBcdFx0ZG8ge1xuIFx0XHRcdHN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luKFx1MDAyNnR4X3N0YXRzLVx1MDAzZXN5bmNwKTtcbkBAIC04NzgsMzIgKzkxMywzNyBAQCBpbnQgbWFuYV9wcmVfYWxsb2NfcnhidWZzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqbXBjLCBpbnQgbmV3X210dSwgaW50IG51bV9xdVxuIHN0YXRpYyBpbnQgbWFuYV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgbmV3X210dSlcbiB7XG4gXHRzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKm1wYyA9IG5ldGRldl9wcml2KG5kZXYpO1xuLVx0dW5zaWduZWQgaW50IG9sZF9tdHUgPSBuZGV2LVx1MDAzZW10dTtcbitcdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqc2NyYXRjaDtcbitcdHN0cnVjdCBtYW5hX3FzZXQgbmV3cSwgb2xkcTtcbiBcdGludCBlcnI7XG4gXG4tXHQvKiBQcmUtYWxsb2NhdGUgYnVmZmVycyB0byBwcmV2ZW50IGZhaWx1cmUgaW4gbWFuYV9hdHRhY2ggbGF0ZXIgKi9cbi1cdGVyciA9IG1hbmFfcHJlX2FsbG9jX3J4YnVmcyhtcGMsIG5ld19tdHUsIG1wYy1cdTAwM2VudW1fcXVldWVzKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0bmV0ZGV2X2VycihuZGV2LCBcIkluc3VmZmljaWVudCBtZW1vcnkgZm9yIG5ldyBNVFVcXG5cIik7XG4tXHRcdHJldHVybiBlcnI7XG4rXHRpZiAoIW1wYy1cdTAwM2Vwb3J0X2lzX3VwKSB7XG4rXHRcdG1wYy1cdTAwM2Vjb25maWd1cmVkX210dSA9IG5ld19tdHU7XG4rXHRcdFdSSVRFX09OQ0UobmRldi1cdTAwM2VtdHUsIG5ld19tdHUpO1xuK1x0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbi1cdGVyciA9IG1hbmFfZGV0YWNoKG5kZXYsIGZhbHNlKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0bmV0ZGV2X2VycihuZGV2LCBcIm1hbmFfZGV0YWNoIGZhaWxlZDogJWRcXG5cIiwgZXJyKTtcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4rXHRzY3JhdGNoID0gbWFuYV9xc2V0X3NjcmF0Y2hfYWxsb2MobXBjKTtcbitcdGlmICghc2NyYXRjaClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHRXUklURV9PTkNFKG5kZXYtXHUwMDNlbXR1LCBuZXdfbXR1KTtcbitcdGVyciA9IG1hbmFfYWxsb2NfcXNldChtcGMsIHNjcmF0Y2gsIG1wYy1cdTAwM2VyeF9xdWV1ZV9zaXplLFxuK1x0XHRcdCAgICAgIG1wYy1cdTAwM2V0eF9xdWV1ZV9zaXplLCBtcGMtXHUwMDNlcHJpdl9mbGFncywgbmV3X210dSxcbitcdFx0XHQgICAgICBtcGMtXHUwMDNlYnBmX3Byb2csIFx1MDAyNm5ld3EpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBmcmVlX3NjcmF0Y2g7XG4gXG4tXHRlcnIgPSBtYW5hX2F0dGFjaChuZGV2KTtcbitcdGVyciA9IG1hbmFfcHVibGlzaF9xc2V0KG1wYywgXHUwMDI2bmV3cSwgXHUwMDI2b2xkcSk7XG4gXHRpZiAoZXJyKSB7XG4tXHRcdG5ldGRldl9lcnIobmRldiwgXCJtYW5hX2F0dGFjaCBmYWlsZWQ6ICVkXFxuXCIsIGVycik7XG4tXHRcdFdSSVRFX09OQ0UobmRldi1cdTAwM2VtdHUsIG9sZF9tdHUpO1xuK1x0XHRtYW5hX2ZyZWVfcXNldChzY3JhdGNoLCBcdTAwMjZuZXdxKTtcbitcdFx0Z290byBmcmVlX3NjcmF0Y2g7XG4gXHR9XG4gXG4tb3V0OlxuLVx0bWFuYV9wcmVfZGVhbGxvY19yeGJ1ZnMobXBjKTtcbitcdG1hbmFfZnJlZV9xc2V0KHNjcmF0Y2gsIFx1MDAyNm9sZHEpO1xuK1xuK2ZyZWVfc2NyYXRjaDpcbitcdG1hbmFfcHVibGlzaF9jbG9zZV9pZl9uZWVkZWQobXBjKTtcbitcdG1hbmFfcXNldF9zY3JhdGNoX2ZyZWUoc2NyYXRjaCk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0xMDM2LDYgKzEwNzYsMTA1IEBAIHN0YXRpYyB2b2lkIG1hbmFfY2xlYW51cF9wb3J0X2NvbnRleHQoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpXG4gXHRhcGMtXHUwMDNlcnhxcyA9IE5VTEw7XG4gfVxuIFxuKy8qIFBvcnQgbGlmZXRpbWUgcHJlc2VydmVzIGNvdW50ZXJzIGFjcm9zcyBxdWV1ZSByZXBsYWNlbWVudC4gKi9cbitzdGF0aWMgaW50IG1hbmFfYWxsb2NfcXVldWVfc3RhdHMoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpXG4re1xuK1x0dW5zaWduZWQgaW50IGk7XG4rXG4rXHRhcGMtXHUwMDNlcnhxX3N0YXRzID0ga2NhbGxvYyhhcGMtXHUwMDNlbWF4X3F1ZXVlcywgc2l6ZW9mKCphcGMtXHUwMDNlcnhxX3N0YXRzKSxcbitcdFx0XHRcdCBHRlBfS0VSTkVMKTtcbitcdGlmICghYXBjLVx1MDAzZXJ4cV9zdGF0cylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRhcGMtXHUwMDNlcnhxX3N0YXRzX3JldCA9IGtjYWxsb2MoYXBjLVx1MDAzZW1heF9xdWV1ZXMsXG4rXHRcdFx0XHQgICAgIHNpemVvZigqYXBjLVx1MDAzZXJ4cV9zdGF0c19yZXQpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghYXBjLVx1MDAzZXJ4cV9zdGF0c19yZXQpXG4rXHRcdGdvdG8gZnJlZV9yeHFfc3RhdHM7XG4rXG4rXHRhcGMtXHUwMDNldHhxX3N0YXRzID0ga2NhbGxvYyhhcGMtXHUwMDNlbWF4X3F1ZXVlcywgc2l6ZW9mKCphcGMtXHUwMDNldHhxX3N0YXRzKSxcbitcdFx0XHRcdCBHRlBfS0VSTkVMKTtcbitcdGlmICghYXBjLVx1MDAzZXR4cV9zdGF0cylcbitcdFx0Z290byBmcmVlX3J4cV9zdGF0c19yZXQ7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhcGMtXHUwMDNlbWF4X3F1ZXVlczsgaSsrKSB7XG4rXHRcdHU2NF9zdGF0c19pbml0KFx1MDAyNmFwYy1cdTAwM2VyeHFfc3RhdHNbaV0uc3luY3ApO1xuK1x0XHR1NjRfc3RhdHNfaW5pdChcdTAwMjZhcGMtXHUwMDNlcnhxX3N0YXRzX3JldFtpXS5zeW5jcCk7XG4rXHRcdHU2NF9zdGF0c19pbml0KFx1MDAyNmFwYy1cdTAwM2V0eHFfc3RhdHNbaV0uc3luY3ApO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZnJlZV9yeHFfc3RhdHNfcmV0OlxuK1x0a2ZyZWUoYXBjLVx1MDAzZXJ4cV9zdGF0c19yZXQpO1xuK1x0YXBjLVx1MDAzZXJ4cV9zdGF0c19yZXQgPSBOVUxMO1xuK2ZyZWVfcnhxX3N0YXRzOlxuK1x0a2ZyZWUoYXBjLVx1MDAzZXJ4cV9zdGF0cyk7XG4rXHRhcGMtXHUwMDNlcnhxX3N0YXRzID0gTlVMTDtcbitcdHJldHVybiAtRU5PTUVNO1xuK31cbitcbitzdGF0aWMgdm9pZCBtYW5hX2ZyZWVfcXVldWVfc3RhdHMoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpXG4re1xuK1x0a2ZyZWUoYXBjLVx1MDAzZXJ4cV9zdGF0cyk7XG4rXHRhcGMtXHUwMDNlcnhxX3N0YXRzID0gTlVMTDtcbitcdGtmcmVlKGFwYy1cdTAwM2VyeHFfc3RhdHNfcmV0KTtcbitcdGFwYy1cdTAwM2VyeHFfc3RhdHNfcmV0ID0gTlVMTDtcbitcdGtmcmVlKGFwYy1cdTAwM2V0eHFfc3RhdHMpO1xuK1x0YXBjLVx1MDAzZXR4cV9zdGF0cyA9IE5VTEw7XG4rfVxuK1xuKy8qIEZvbGQgdW5kZXIgUlROTCBhZnRlciBkcmFpbl9zdGF0cyB3cml0ZXJzIHF1aWVzY2UuIENsZWFyIGRyYWluX3N0YXRzIHRvXG4rICogcHJldmVudCBkb3VibGUgY291bnRpbmcgb24gcm9sbGJhY2suXG4rICovXG4rc3RhdGljIHZvaWQgbWFuYV9mb2xkX3J4cV9zdGF0cyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcbitcdFx0XHRcdHN0cnVjdCBtYW5hX3J4cSAqcnhxKVxuK3tcbitcdHN0cnVjdCBtYW5hX3N0YXRzX3J4ICpzcmMgPSBcdTAwMjZyeHEtXHUwMDNlZHJhaW5fc3RhdHM7XG4rXHRzdHJ1Y3QgbWFuYV9zdGF0c19yeCAqZHN0O1xuK1x0dW5zaWduZWQgaW50IGk7XG4rXG4rXHRBU1NFUlRfUlROTCgpO1xuK1xuK1x0aWYgKCFhcGMtXHUwMDNlcnhxX3N0YXRzX3JldCB8fCByeHEtXHUwMDNlcnhxX2lkeCBcdTAwM2U9IGFwYy1cdTAwM2VtYXhfcXVldWVzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRkc3QgPSBcdTAwMjZhcGMtXHUwMDNlcnhxX3N0YXRzX3JldFtyeHEtXHUwMDNlcnhxX2lkeF07XG4rXG4rXHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNmRzdC1cdTAwM2VzeW5jcCk7XG4rXHRkc3QtXHUwMDNlcGFja2V0c1x0XHQrPSBzcmMtXHUwMDNlcGFja2V0cztcbitcdGRzdC1cdTAwM2VieXRlc1x0XHQrPSBzcmMtXHUwMDNlYnl0ZXM7XG4rXHRkc3QtXHUwMDNleGRwX2Ryb3BcdFx0Kz0gc3JjLVx1MDAzZXhkcF9kcm9wO1xuK1x0ZHN0LVx1MDAzZXhkcF90eFx0XHQrPSBzcmMtXHUwMDNleGRwX3R4O1xuK1x0ZHN0LVx1MDAzZXhkcF9yZWRpcmVjdFx0Kz0gc3JjLVx1MDAzZXhkcF9yZWRpcmVjdDtcbitcdGRzdC1cdTAwM2Vwa3RfbGVuMF9lcnJcdCs9IHNyYy1cdTAwM2Vwa3RfbGVuMF9lcnI7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGRzdC1cdTAwM2Vjb2FsZXNjZWRfY3FlKTsgaSsrKVxuK1x0XHRkc3QtXHUwMDNlY29hbGVzY2VkX2NxZVtpXSArPSBzcmMtXHUwMDNlY29hbGVzY2VkX2NxZVtpXTtcbitcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNmRzdC1cdTAwM2VzeW5jcCk7XG4rXG4rXHRzcmMtXHUwMDNlcGFja2V0c1x0XHQ9IDA7XG4rXHRzcmMtXHUwMDNlYnl0ZXNcdFx0PSAwO1xuK1x0c3JjLVx1MDAzZXhkcF9kcm9wXHRcdD0gMDtcbitcdHNyYy1cdTAwM2V4ZHBfdHhcdFx0PSAwO1xuK1x0c3JjLVx1MDAzZXhkcF9yZWRpcmVjdFx0PSAwO1xuK1x0c3JjLVx1MDAzZXBrdF9sZW4wX2Vyclx0PSAwO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShzcmMtXHUwMDNlY29hbGVzY2VkX2NxZSk7IGkrKylcbitcdFx0c3JjLVx1MDAzZWNvYWxlc2NlZF9jcWVbaV0gPSAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBtYW5hX2ZvbGRfcXNldF9yeF9zdGF0cyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcbitcdFx0XHRcdCAgICBzdHJ1Y3QgbWFuYV9xc2V0ICpxc2V0KVxuK3tcbitcdHVuc2lnbmVkIGludCBxO1xuK1xuK1x0aWYgKCFxc2V0LVx1MDAzZXJ4cXMpXG4rXHRcdHJldHVybjtcbitcbitcdGZvciAocSA9IDA7IHEgXHUwMDNjIHFzZXQtXHUwMDNlbnVtX3F1ZXVlczsgcSsrKSB7XG4rXHRcdGlmIChxc2V0LVx1MDAzZXJ4cXNbcV0pXG4rXHRcdFx0bWFuYV9mb2xkX3J4cV9zdGF0cyhhcGMsIHFzZXQtXHUwMDNlcnhxc1txXSk7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyB2b2lkIG1hbmFfY2xlYW51cF9pbmRpcl90YWJsZShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYylcbiB7XG4gXHRhcGMtXHUwMDNlaW5kaXJfdGFibGVfc3ogPSAwO1xuQEAgLTEwNDUsNiArMTE4NCw3IEBAIHN0YXRpYyB2b2lkIG1hbmFfY2xlYW51cF9pbmRpcl90YWJsZShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYylcbiBcbiBzdGF0aWMgaW50IG1hbmFfaW5pdF9wb3J0X2NvbnRleHQoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpXG4ge1xuK1x0a2ZyZWUoYXBjLVx1MDAzZXJ4cXMpO1xuIFx0YXBjLVx1MDAzZXJ4cXMgPSBremFsbG9jX29ianMoc3RydWN0IG1hbmFfcnhxICosIGFwYy1cdTAwM2VudW1fcXVldWVzKTtcbiBcbiBcdHJldHVybiAhYXBjLVx1MDAzZXJ4cXMgPyAtRU5PTUVNIDogMDtcbkBAIC0xNzMzLDcgKzE4NzMsNyBAQCB2b2lkIG1hbmFfZGVzdHJveV9lcShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYylcbiBcdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShhcGMtXHUwMDNlbWFuYV9lcXNfZGVidWdmcyk7XG4gXHRhcGMtXHUwMDNlbWFuYV9lcXNfZGVidWdmcyA9IE5VTEw7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhcGMtXHUwMDNlbnVtX3F1ZXVlczsgaSsrKSB7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhcGMtXHUwMDNlbnVtX2VxczsgaSsrKSB7XG4gXHRcdGVxID0gYXBjLVx1MDAzZWVxc1tpXS5lcTtcbiBcdFx0aWYgKCFlcSlcbiBcdFx0XHRjb250aW51ZTtcbkBAIC0xNzQxLDI0ICsxODgxLDI4IEBAIHZvaWQgbWFuYV9kZXN0cm95X2VxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKVxuIFx0XHRtc2kgPSBlcS1cdTAwM2VlcS5tc2l4X2luZGV4O1xuIFx0XHRtYW5hX2dkX2Rlc3Ryb3lfcXVldWUoZ2MsIGVxKTtcbiBcdFx0bWFuYV9nZF9wdXRfZ2ljKGdjLCAhZ2MtXHUwMDNlbXNpX3NoYXJpbmcsIG1zaSk7XG4rXHRcdGFwYy1cdTAwM2VlcXNbaV0uZXEgPSBOVUxMO1xuK1x0XHRhcGMtXHUwMDNlZXFzW2ldLm1hbmFfZXFfZGVidWdmcyA9IE5VTEw7XG4gXHR9XG4gXG4gXHRrZnJlZShhcGMtXHUwMDNlZXFzKTtcbiBcdGFwYy1cdTAwM2VlcXMgPSBOVUxMO1xuK1x0YXBjLVx1MDAzZW51bV9lcXMgPSAwO1xuIH1cbiBFWFBPUlRfU1lNQk9MX05TKG1hbmFfZGVzdHJveV9lcSwgXCJORVRfTUFOQVwiKTtcbiBcbiBzdGF0aWMgdm9pZCBtYW5hX2NyZWF0ZV9lcV9kZWJ1Z2ZzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLCBpbnQgaSlcbiB7XG4tXHRzdHJ1Y3QgbWFuYV9lcSBlcSA9IGFwYy1cdTAwM2VlcXNbaV07XG4rXHRzdHJ1Y3QgbWFuYV9lcSAqZXEgPSBcdTAwMjZhcGMtXHUwMDNlZXFzW2ldO1xuIFx0Y2hhciBlcW51bVszMl07XG4gXG4gXHRzcHJpbnRmKGVxbnVtLCBcImVxJWRcIiwgaSk7XG4tXHRlcS5tYW5hX2VxX2RlYnVnZnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZXFudW0sIGFwYy1cdTAwM2VtYW5hX2Vxc19kZWJ1Z2ZzKTtcbi1cdGRlYnVnZnNfY3JlYXRlX3UzMihcImhlYWRcIiwgMDQwMCwgZXEubWFuYV9lcV9kZWJ1Z2ZzLCBcdTAwMjZlcS5lcS1cdTAwM2VoZWFkKTtcbi1cdGRlYnVnZnNfY3JlYXRlX3UzMihcInRhaWxcIiwgMDQwMCwgZXEubWFuYV9lcV9kZWJ1Z2ZzLCBcdTAwMjZlcS5lcS1cdTAwM2V0YWlsKTtcbi1cdGRlYnVnZnNfY3JlYXRlX3UzMihcImlycVwiLCAwNDAwLCBlcS5tYW5hX2VxX2RlYnVnZnMsIFx1MDAyNmVxLmVxLVx1MDAzZWVxLmlycSk7XG4tXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwiZXFfZHVtcFwiLCAwNDAwLCBlcS5tYW5hX2VxX2RlYnVnZnMsIGVxLmVxLCBcdTAwMjZtYW5hX2RiZ19xX2ZvcHMpO1xuK1x0ZXEtXHUwMDNlbWFuYV9lcV9kZWJ1Z2ZzID0gZGVidWdmc19jcmVhdGVfZGlyKGVxbnVtLCBhcGMtXHUwMDNlbWFuYV9lcXNfZGVidWdmcyk7XG4rXHRkZWJ1Z2ZzX2NyZWF0ZV91MzIoXCJoZWFkXCIsIDA0MDAsIGVxLVx1MDAzZW1hbmFfZXFfZGVidWdmcywgXHUwMDI2ZXEtXHUwMDNlZXEtXHUwMDNlaGVhZCk7XG4rXHRkZWJ1Z2ZzX2NyZWF0ZV91MzIoXCJ0YWlsXCIsIDA0MDAsIGVxLVx1MDAzZW1hbmFfZXFfZGVidWdmcywgXHUwMDI2ZXEtXHUwMDNlZXEtXHUwMDNldGFpbCk7XG4rXHRkZWJ1Z2ZzX2NyZWF0ZV91MzIoXCJpcnFcIiwgMDQwMCwgZXEtXHUwMDNlbWFuYV9lcV9kZWJ1Z2ZzLCBcdTAwMjZlcS1cdTAwM2VlcS1cdTAwM2VlcS5pcnEpO1xuK1x0ZGVidWdmc19jcmVhdGVfZmlsZShcImVxX2R1bXBcIiwgMDQwMCwgZXEtXHUwMDNlbWFuYV9lcV9kZWJ1Z2ZzLCBlcS1cdTAwM2VlcSxcbitcdFx0XHQgICAgXHUwMDI2bWFuYV9kYmdfcV9mb3BzKTtcbiB9XG4gXG4gaW50IG1hbmFfY3JlYXRlX2VxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKVxuQEAgLTE3NzMsOSArMTkxNywxMSBAQCBpbnQgbWFuYV9jcmVhdGVfZXEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpXG4gXG4gXHRpZiAoV0FSTl9PTihhcGMtXHUwMDNlZXFzKSlcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4tXHRhcGMtXHUwMDNlZXFzID0ga3phbGxvY19vYmpzKHN0cnVjdCBtYW5hX2VxLCBhcGMtXHUwMDNlbnVtX3F1ZXVlcyk7XG4rXHQvKiBLZWVwIEVRIGFycmF5IGFkZHJlc3NlcyBzdGFibGUgd2hpbGUgQ1FzIHJlZmVyZW5jZSB0aGVtLiAqL1xuK1x0YXBjLVx1MDAzZWVxcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgbWFuYV9lcSwgYXBjLVx1MDAzZW1heF9xdWV1ZXMpO1xuIFx0aWYgKCFhcGMtXHUwMDNlZXFzKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdGFwYy1cdTAwM2VudW1fZXFzID0gMDtcbiBcbiBcdHNwZWMudHlwZSA9IEdETUFfRVE7XG4gXHRzcGVjLm1vbml0b3JfYXZsX2J1ZiA9IGZhbHNlO1xuQEAgLTE4MDUsNiArMTk1MSw3IEBAIGludCBtYW5hX2NyZWF0ZV9lcShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYylcbiBcdFx0fVxuIFx0XHRhcGMtXHUwMDNlZXFzW2ldLmVxLVx1MDAzZWVxLmlycSA9IGdpYy1cdTAwM2VpcnE7XG4gXHRcdG1hbmFfY3JlYXRlX2VxX2RlYnVnZnMoYXBjLCBpKTtcbitcdFx0YXBjLVx1MDAzZW51bV9lcXMgPSBpICsgMTtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuQEAgLTE4MTQsNiArMTk2MSw4NyBAQCBpbnQgbWFuYV9jcmVhdGVfZXEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpXG4gfVxuIEVYUE9SVF9TWU1CT0xfTlMobWFuYV9jcmVhdGVfZXEsIFwiTkVUX01BTkFcIik7XG4gXG4rLyogR3JvdyB0aGUgc2hhcmVkIEVRIHBvb2wgd2l0aG91dCByZXBsYWNpbmcgbGl2ZSBlbnRyaWVzLiAqL1xuK3N0YXRpYyBpbnQgbWFuYV9ncm93X2VxcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgdW5zaWduZWQgaW50IG5lZWQpXG4re1xuK1x0c3RydWN0IGdkbWFfZGV2ICpnZCA9IGFwYy1cdTAwM2VhYy1cdTAwM2VnZG1hX2RldjtcbitcdHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjID0gZ2QtXHUwMDNlZ2RtYV9jb250ZXh0O1xuK1x0c3RydWN0IGdkbWFfcXVldWVfc3BlYyBzcGVjID0ge307XG4rXHRzdHJ1Y3QgZ2RtYV9pcnFfY29udGV4dCAqZ2ljO1xuK1x0dW5zaWduZWQgaW50IGk7XG4rXHRpbnQgZXJyO1xuK1x0aW50IG1zaTtcbitcbitcdGlmIChXQVJOX09OKCFhcGMtXHUwMDNlZXFzKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAobmVlZCBcdTAwM2UgYXBjLVx1MDAzZW1heF9xdWV1ZXMpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKG5lZWQgXHUwMDNjPSBhcGMtXHUwMDNlbnVtX2VxcylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRzcGVjLnR5cGUgPSBHRE1BX0VRO1xuK1x0c3BlYy5tb25pdG9yX2F2bF9idWYgPSBmYWxzZTtcbitcdHNwZWMucXVldWVfc2l6ZSA9IEVRX1NJWkU7XG4rXHRzcGVjLmVxLmNhbGxiYWNrID0gTlVMTDtcbitcdHNwZWMuZXEuY29udGV4dCA9IGFwYy1cdTAwM2VlcXM7XG4rXHRzcGVjLmVxLmxvZzJfdGhyb3R0bGVfbGltaXQgPSBMT0cyX0VRX1RIUk9UVExFO1xuK1xuK1x0Zm9yIChpID0gYXBjLVx1MDAzZW51bV9lcXM7IGkgXHUwMDNjIG5lZWQ7IGkrKykge1xuK1x0XHRtc2kgPSAoaSArIDEpICUgZ2MtXHUwMDNlbnVtX21zaXhfdXNhYmxlO1xuK1xuK1x0XHRnaWMgPSBtYW5hX2dkX2dldF9naWMoZ2MsICFnYy1cdTAwM2Vtc2lfc2hhcmluZywgXHUwMDI2bXNpKTtcbitcdFx0aWYgKElTX0VSUihnaWMpKSB7XG4rXHRcdFx0ZXJyID0gUFRSX0VSUihnaWMpO1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4rXHRcdHNwZWMuZXEubXNpeF9pbmRleCA9IG1zaTtcbitcbitcdFx0ZXJyID0gbWFuYV9nZF9jcmVhdGVfbWFuYV9lcShnZCwgXHUwMDI2c3BlYywgXHUwMDI2YXBjLVx1MDAzZWVxc1tpXS5lcSk7XG4rXHRcdGlmIChlcnIpIHtcbitcdFx0XHRkZXZfZXJyKGdjLVx1MDAzZWRldiwgXCJGYWlsZWQgdG8gZ3JvdyBFUSAldSA6ICVkXFxuXCIsIGksIGVycik7XG4rXHRcdFx0bWFuYV9nZF9wdXRfZ2ljKGdjLCAhZ2MtXHUwMDNlbXNpX3NoYXJpbmcsIG1zaSk7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcdFx0YXBjLVx1MDAzZWVxc1tpXS5lcS1cdTAwM2VlcS5pcnEgPSBnaWMtXHUwMDNlaXJxO1xuK1x0XHRtYW5hX2NyZWF0ZV9lcV9kZWJ1Z2ZzKGFwYywgaSk7XG4rXHRcdGFwYy1cdTAwM2VudW1fZXFzID0gaSArIDE7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbitvdXQ6XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbisvKiBBbGwgQ1FzIHJlZmVyZW5jaW5nIEVRcyBhdCBvciBhYm92ZSBAa2VlcCBtdXN0IGJlIGRlc3Ryb3llZCBmaXJzdC4gKi9cbitzdGF0aWMgdm9pZCBtYW5hX3Nocmlua19lcXMoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsIHVuc2lnbmVkIGludCBrZWVwKVxuK3tcbitcdHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjID0gYXBjLVx1MDAzZWFjLVx1MDAzZWdkbWFfZGV2LVx1MDAzZWdkbWFfY29udGV4dDtcbitcdHN0cnVjdCBnZG1hX3F1ZXVlICplcTtcbitcdHVuc2lnbmVkIGludCBtc2k7XG4rXHR1bnNpZ25lZCBpbnQgaTtcbitcbitcdGlmICghYXBjLVx1MDAzZWVxcyB8fCBrZWVwIFx1MDAzZT0gYXBjLVx1MDAzZW51bV9lcXMpXG4rXHRcdHJldHVybjtcbitcbitcdGZvciAoaSA9IGtlZXA7IGkgXHUwMDNjIGFwYy1cdTAwM2VudW1fZXFzOyBpKyspIHtcbitcdFx0ZXEgPSBhcGMtXHUwMDNlZXFzW2ldLmVxO1xuK1x0XHRpZiAoIWVxKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoYXBjLVx1MDAzZWVxc1tpXS5tYW5hX2VxX2RlYnVnZnMpO1xuK1x0XHRhcGMtXHUwMDNlZXFzW2ldLm1hbmFfZXFfZGVidWdmcyA9IE5VTEw7XG4rXG4rXHRcdG1zaSA9IGVxLVx1MDAzZWVxLm1zaXhfaW5kZXg7XG4rXHRcdG1hbmFfZ2RfZGVzdHJveV9xdWV1ZShnYywgZXEpO1xuK1x0XHRtYW5hX2dkX3B1dF9naWMoZ2MsICFnYy1cdTAwM2Vtc2lfc2hhcmluZywgbXNpKTtcbitcdFx0YXBjLVx1MDAzZWVxc1tpXS5lcSA9IE5VTEw7XG4rXHR9XG4rXG4rXHRhcGMtXHUwMDNlbnVtX2VxcyA9IGtlZXA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgbWFuYV9mZW5jZV9ycShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgc3RydWN0IG1hbmFfcnhxICpyeHEpXG4ge1xuIFx0c3RydWN0IG1hbmFfZmVuY2VfcnFfcmVzcCByZXNwID0ge307XG5AQCAtMjAxOCw3ICsyMjQ2LDkgQEAgc3RhdGljIHZvaWQgbWFuYV9wb2xsX3R4X2NxKHN0cnVjdCBtYW5hX2NxICpjcSlcbiBcdC8qIEVuc3VyZSBjaGVja2luZyB0eHFfc3RvcHBlZCBiZWZvcmUgYXBjLVx1MDAzZXBvcnRfaXNfdXAuICovXG4gXHRzbXBfcm1iKCk7XG4gXG4tXHRpZiAodHhxX3N0b3BwZWQgXHUwMDI2XHUwMDI2IGFwYy1cdTAwM2Vwb3J0X2lzX3VwIFx1MDAyNlx1MDAyNiBhdmFpbF9zcGFjZSBcdTAwM2U9IE1BWF9UWF9XUUVfU0laRSkge1xuK1x0LyogT3JkZXIgdGhlIHN0b3BwZWQtc3RhdGUgcmVhZCBiZWZvcmUgdGhlIHJldGlyaW5nIHJlYWQuICovXG4rXHRpZiAodHhxX3N0b3BwZWQgXHUwMDI2XHUwMDI2ICFSRUFEX09OQ0UodHhxLVx1MDAzZXJldGlyaW5nKSBcdTAwMjZcdTAwMjYgYXBjLVx1MDAzZXBvcnRfaXNfdXAgXHUwMDI2XHUwMDI2XG4rXHQgICAgYXZhaWxfc3BhY2UgXHUwMDNlPSBNQVhfVFhfV1FFX1NJWkUpIHtcbiBcdFx0bmV0aWZfdHhfd2FrZV9xdWV1ZShuZXRfdHhxKTtcbiBcdFx0YXBjLVx1MDAzZWV0aF9zdGF0cy53YWtlX3F1ZXVlKys7XG4gXHR9XG5AQCAtMjA4MSw3ICsyMzExLDcgQEAgc3RhdGljIHZvaWQgbWFuYV9yeF9za2Iodm9pZCAqYnVmX3ZhLCBib29sIGZyb21fcG9vbCxcbiBcdFx0XHRzdHJ1Y3QgbWFuYV9yeGNvbXBfb29iICpjcWUsIHN0cnVjdCBtYW5hX3J4cSAqcnhxLFxuIFx0XHRcdHUzMiBwa3RfbGVuLCB1MzIgcGt0X2hhc2gpXG4ge1xuLVx0c3RydWN0IG1hbmFfc3RhdHNfcnggKnJ4X3N0YXRzID0gXHUwMDI2cnhxLVx1MDAzZXN0YXRzO1xuK1x0c3RydWN0IG1hbmFfc3RhdHNfcnggKnJ4X3N0YXRzID0gbWFuYV9yeHFfc3RhdHMocnhxKTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcnhxLVx1MDAzZW5kZXY7XG4gXHR1MTYgcnhxX2lkeCA9IHJ4cS1cdTAwM2VyeHFfaWR4O1xuIFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpO1xuQEAgLTIzMTQsNiArMjU0NCw3IEBAIHN0YXRpYyB2b2lkIG1hbmFfcHJvY2Vzc19yeF9jcWUoc3RydWN0IG1hbmFfcnhxICpyeHEsIHN0cnVjdCBtYW5hX2NxICpjcSxcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcnhxLVx1MDAzZW5kZXY7XG4gXHRzdHJ1Y3QgbWFuYV9yZWN2X2J1Zl9vb2IgKnJ4YnVmX29vYjtcbiBcdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjO1xuK1x0c3RydWN0IG1hbmFfc3RhdHNfcnggKnJ4X3N0YXRzO1xuIFx0c3RydWN0IGRldmljZSAqZGV2ID0gZ2MtXHUwMDNlZGV2O1xuIFx0Ym9vbCBjb2FsZXNjZWRfOCA9IGZhbHNlO1xuIFx0Ym9vbCBjb2FsZXNjZWQgPSBmYWxzZTtcbkBAIC0yMzk1LDEzICsyNjI2LDE1IEBAIHN0YXRpYyB2b2lkIG1hbmFfcHJvY2Vzc19yeF9jcWUoc3RydWN0IG1hbmFfcnhxICpyeHEsIHN0cnVjdCBtYW5hX2NxICpjcSxcbiBcdCAqIENvYWxlc2NlZCBDUUVzIGhhdmUgYXQgbGVhc3QgMiBwYWNrZXRzLCBzbyBpbmRleCBpcyBwa3RfaSAtIDIuXG4gXHQgKi9cbiBcdGlmIChwa3RfaSBcdTAwM2UgMSkge1xuLVx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnJ4cS1cdTAwM2VzdGF0cy5zeW5jcCk7XG4tXHRcdHJ4cS1cdTAwM2VzdGF0cy5jb2FsZXNjZWRfY3FlW3BrdF9pIC0gMl0rKztcbi1cdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2cnhxLVx1MDAzZXN0YXRzLnN5bmNwKTtcbitcdFx0cnhfc3RhdHMgPSBtYW5hX3J4cV9zdGF0cyhyeHEpO1xuK1x0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnJ4X3N0YXRzLVx1MDAzZXN5bmNwKTtcbitcdFx0cnhfc3RhdHMtXHUwMDNlY29hbGVzY2VkX2NxZVtwa3RfaSAtIDJdKys7XG4rXHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnJ4X3N0YXRzLVx1MDAzZXN5bmNwKTtcbiBcdH0gZWxzZSBpZiAoIXBrdF9pIFx1MDAyNlx1MDAyNiAhcGt0bGVuKSB7XG4tXHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2cnhxLVx1MDAzZXN0YXRzLnN5bmNwKTtcbi1cdFx0cnhxLVx1MDAzZXN0YXRzLnBrdF9sZW4wX2VycisrO1xuLVx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZyeHEtXHUwMDNlc3RhdHMuc3luY3ApO1xuK1x0XHRyeF9zdGF0cyA9IG1hbmFfcnhxX3N0YXRzKHJ4cSk7XG4rXHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2cnhfc3RhdHMtXHUwMDNlc3luY3ApO1xuK1x0XHRyeF9zdGF0cy1cdTAwM2Vwa3RfbGVuMF9lcnIrKztcbitcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2cnhfc3RhdHMtXHUwMDNlc3luY3ApO1xuIFx0XHRuZXRkZXZfZXJyX29uY2UobmRldixcbiBcdFx0XHRcdFwiUlggcGt0IGxlbj0wLCBycT0ldSwgY3E9JXUsIHJ4b2JqPTB4JWxseFxcblwiLFxuIFx0XHRcdFx0cnhxLVx1MDAzZWdkbWFfaWQsIGNxLVx1MDAzZWdkbWFfaWQsIHJ4cS1cdTAwM2VyeG9iaik7XG5AQCAtMjUzMyw4ICsyNzY2LDEyIEBAIHN0YXRpYyB2b2lkIG1hbmFfdXBkYXRlX3J4X2RpbShzdHJ1Y3QgbWFuYV9jcSAqY3EpXG4gXHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2YXBjLVx1MDAzZXJ4X2RpbV9lbmFibGVkKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0ZGltX3VwZGF0ZV9zYW1wbGUoUkVBRF9PTkNFKGNxLVx1MDAzZWRpbV9ldmVudF9jdHIpLCByeHEtXHUwMDNlc3RhdHMucGFja2V0cyxcbi1cdFx0XHQgIHJ4cS1cdTAwM2VzdGF0cy5ieXRlcywgXHUwMDI2ZGltX3NhbXBsZSk7XG4rXHQvKiBTa2lwIHJldGlyaW5nIFJYUXM7IERJTSByZWFkcyBzaGFyZWQgcGVyLWluZGV4IGNvdW50ZXJzLiAqL1xuK1x0aWYgKFJFQURfT05DRShyeHEtXHUwMDNlcmV0aXJpbmcpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRkaW1fdXBkYXRlX3NhbXBsZShSRUFEX09OQ0UoY3EtXHUwMDNlZGltX2V2ZW50X2N0ciksIHJ4cS1cdTAwM2VzdGF0cy1cdTAwM2VwYWNrZXRzLFxuK1x0XHRcdCAgcnhxLVx1MDAzZXN0YXRzLVx1MDAzZWJ5dGVzLCBcdTAwMjZkaW1fc2FtcGxlKTtcbiBcdG5ldF9kaW0oXHUwMDI2Y3EtXHUwMDNlZGltLCBcdTAwMjZkaW1fc2FtcGxlKTtcbiB9XG4gXG5AQCAtMjY0MSw3ICsyODc4LDkgQEAgc3RhdGljIHZvaWQgbWFuYV9kZWluaXRfdHhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLCBzdHJ1Y3QgbWFuYV90eHEgKnR4cSlcbiBcdG1hbmFfZ2RfZGVzdHJveV9xdWV1ZShnZC1cdTAwM2VnZG1hX2NvbnRleHQsIHR4cS1cdTAwM2VnZG1hX3NxKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbWFuYV9kZXN0cm95X3R4cShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYylcbisvKiBLZWVwIHRoZSBhcnJheSBhbmQgcXVldWVzIGJlbG93IEBmaXJzdDsgY2xlYXIgZnJlZWQgc2xvdHMuICovXG4rc3RhdGljIHZvaWQgbWFuYV9kZXN0cm95X3R4cV9mcm9tKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxuK1x0XHRcdFx0ICB1bnNpZ25lZCBpbnQgZmlyc3QpXG4ge1xuIFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpO1xuIFx0aW50IGk7XG5AQCAtMjY0OSw3ICsyODg4LDcgQEAgc3RhdGljIHZvaWQgbWFuYV9kZXN0cm95X3R4cShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYylcbiBcdGlmICghYXBjLVx1MDAzZXR4X3FwKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhcGMtXHUwMDNlbnVtX3F1ZXVlczsgaSsrKSB7XG4rXHRmb3IgKGkgPSBmaXJzdDsgaSBcdTAwM2MgYXBjLVx1MDAzZW51bV9xdWV1ZXM7IGkrKykge1xuIFx0XHRpZiAoIWFwYy1cdTAwM2V0eF9xcFtpXSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbkBAIC0yNjczLDcgKzI5MTIsMTYgQEAgc3RhdGljIHZvaWQgbWFuYV9kZXN0cm95X3R4cShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYylcbiBcdFx0bWFuYV9kZWluaXRfdHhxKGFwYywgXHUwMDI2YXBjLVx1MDAzZXR4X3FwW2ldLVx1MDAzZXR4cSk7XG4gXG4gXHRcdGt2ZnJlZShhcGMtXHUwMDNldHhfcXBbaV0pO1xuK1x0XHRhcGMtXHUwMDNldHhfcXBbaV0gPSBOVUxMO1xuIFx0fVxuK31cbitcbitzdGF0aWMgdm9pZCBtYW5hX2Rlc3Ryb3lfdHhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKVxuK3tcbitcdGlmICghYXBjLVx1MDAzZXR4X3FwKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRtYW5hX2Rlc3Ryb3lfdHhxX2Zyb20oYXBjLCAwKTtcbiBcbiBcdGtmcmVlKGFwYy1cdTAwM2V0eF9xcCk7XG4gXHRhcGMtXHUwMDNldHhfcXAgPSBOVUxMO1xuQEAgLTI3MDQsOCArMjk1MiwxMSBAQCBzdGF0aWMgdm9pZCBtYW5hX2NyZWF0ZV90eHFfZGVidWdmcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgaW50IGlkeClcbiBcdFx0XHQgICAgdHhfcXAtXHUwMDNldHhfY3EuZ2RtYV9jcSwgXHUwMDI2bWFuYV9kYmdfcV9mb3BzKTtcbiB9XG4gXG4rLyogV2l0aCBAZmlyc3Qgbm9uemVybywgdXNlIHRoZSBleGlzdGluZyBhcnJheSBhbmQgdW53aW5kIG9ubHkgbmV3IHF1ZXVlcyBvblxuKyAqIGZhaWx1cmUuXG4rICovXG4gc3RhdGljIGludCBtYW5hX2NyZWF0ZV90eHEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXG4tXHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcbitcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCB1bnNpZ25lZCBpbnQgZmlyc3QpXG4ge1xuIFx0c3RydWN0IG1hbmFfY29udGV4dCAqYWMgPSBhcGMtXHUwMDNlYWM7XG4gXHRzdHJ1Y3QgZ2RtYV9kZXYgKmdkID0gYWMtXHUwMDNlZ2RtYV9kZXY7XG5AQCAtMjcyMCw5ICsyOTcxLDE0IEBAIHN0YXRpYyBpbnQgbWFuYV9jcmVhdGVfdHhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxuIFx0aW50IGVycjtcbiBcdGludCBpO1xuIFxuLVx0YXBjLVx1MDAzZXR4X3FwID0ga3phbGxvY19vYmpzKHN0cnVjdCBtYW5hX3R4X3FwICosIGFwYy1cdTAwM2VudW1fcXVldWVzKTtcbi1cdGlmICghYXBjLVx1MDAzZXR4X3FwKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbitcdGlmIChmaXJzdCkge1xuK1x0XHRpZiAoV0FSTl9PTighYXBjLVx1MDAzZXR4X3FwKSlcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH0gZWxzZSB7XG4rXHRcdGFwYy1cdTAwM2V0eF9xcCA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgbWFuYV90eF9xcCAqLCBhcGMtXHUwMDNlbnVtX3F1ZXVlcyk7XG4rXHRcdGlmICghYXBjLVx1MDAzZXR4X3FwKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuIFxuIFx0LyogIFRoZSBtaW5pbXVtIHNpemUgb2YgdGhlIFdRRSBpcyAzMiBieXRlcywgaGVuY2VcbiBcdCAqICBhcGMtXHUwMDNldHhfcXVldWVfc2l6ZSByZXByZXNlbnRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBXUUVzXG5AQCAtMjczOSw3ICsyOTk1LDcgQEAgc3RhdGljIGludCBtYW5hX2NyZWF0ZV90eHEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXG4gXG4gXHRnYyA9IGdkLVx1MDAzZWdkbWFfY29udGV4dDtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFwYy1cdTAwM2VudW1fcXVldWVzOyBpKyspIHtcbitcdGZvciAoaSA9IGZpcnN0OyBpIFx1MDAzYyBhcGMtXHUwMDNlbnVtX3F1ZXVlczsgaSsrKSB7XG4gXHRcdGFwYy1cdTAwM2V0eF9xcFtpXSA9IGt2emFsbG9jX29iaigqYXBjLVx1MDAzZXR4X3FwW2ldKTtcbiBcdFx0aWYgKCFhcGMtXHUwMDNldHhfcXBbaV0pIHtcbiBcdFx0XHRlcnIgPSAtRU5PTUVNO1xuQEAgLTI3NTEsOSArMzAwNywxMCBAQCBzdGF0aWMgaW50IG1hbmFfY3JlYXRlX3R4cShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcbiBcdFx0LyogQ3JlYXRlIFNRICovXG4gXHRcdHR4cSA9IFx1MDAyNmFwYy1cdTAwM2V0eF9xcFtpXS1cdTAwM2V0eHE7XG4gXG4tXHRcdHU2NF9zdGF0c19pbml0KFx1MDAyNnR4cS1cdTAwM2VzdGF0cy5zeW5jcCk7XG4rXHRcdHR4cS1cdTAwM2VzdGF0cyA9IFx1MDAyNmFwYy1cdTAwM2V0eHFfc3RhdHNbaV07XG4gXHRcdHR4cS1cdTAwM2VuZGV2ID0gbmV0O1xuIFx0XHR0eHEtXHUwMDNlbmV0X3R4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUobmV0LCBpKTtcbitcdFx0dHhxLVx1MDAzZXJlc2V0X2dlbiA9IFJFQURfT05DRShhcGMtXHUwMDNlYWMtXHUwMDNlcmVzZXRfZ2VuKTtcbiBcdFx0dHhxLVx1MDAzZXZwX29mZnNldCA9IGFwYy1cdTAwM2V0eF92cF9vZmZzZXQ7XG4gXHRcdHR4cS1cdTAwM2VuYXBpX2luaXRpYWxpemVkID0gZmFsc2U7XG4gXHRcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2dHhxLVx1MDAzZXBlbmRpbmdfc2ticyk7XG5AQCAtMjg0Niw3ICszMTAzLDEwIEBAIHN0YXRpYyBpbnQgbWFuYV9jcmVhdGVfdHhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxuIG91dDpcbiBcdG5ldGRldl9lcnIobmV0LCBcIkZhaWxlZCB0byBjcmVhdGUgJWQgVFggcXVldWVzLCAlZFxcblwiLFxuIFx0XHQgICBhcGMtXHUwMDNlbnVtX3F1ZXVlcywgZXJyKTtcbi1cdG1hbmFfZGVzdHJveV90eHEoYXBjKTtcbitcdGlmIChmaXJzdClcbitcdFx0bWFuYV9kZXN0cm95X3R4cV9mcm9tKGFwYywgZmlyc3QpO1xuK1x0ZWxzZVxuK1x0XHRtYW5hX2Rlc3Ryb3lfdHhxKGFwYyk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0yODc3LDYgKzMxMzcsOSBAQCBzdGF0aWMgdm9pZCBtYW5hX2Rlc3Ryb3lfcnhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxuIFx0XHRuZXRpZl9uYXBpX2RlbF9sb2NrZWQobmFwaSk7XG4gXHR9XG4gXG4rXHQvKiBOQVBJIGlzIHF1aWVzY2VkLCBzbyBkcmFpbl9zdGF0cyBoYXMgbm8gcmVtYWluaW5nIHdyaXRlci4gKi9cbitcdG1hbmFfZm9sZF9yeHFfc3RhdHMoYXBjLCByeHEpO1xuK1xuIFx0aWYgKHhkcF9yeHFfaW5mb19pc19yZWcoXHUwMDI2cnhxLVx1MDAzZXhkcF9yeHEpKVxuIFx0XHR4ZHBfcnhxX2luZm9fdW5yZWcoXHUwMDI2cnhxLVx1MDAzZXhkcF9yeHEpO1xuIFxuQEAgLTMwMDksMTEgKzMyNzIsMTEgQEAgc3RhdGljIGludCBtYW5hX3B1c2hfd3FlKHN0cnVjdCBtYW5hX3J4cSAqcnhxKVxuIFxuIHN0YXRpYyBpbnQgbWFuYV9jcmVhdGVfcGFnZV9wb29sKHN0cnVjdCBtYW5hX3J4cSAqcnhxLCBzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbiB7XG4tXHRzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKm1wYyA9IG5ldGRldl9wcml2KHJ4cS1cdTAwM2VuZGV2KTtcbiBcdHN0cnVjdCBwYWdlX3Bvb2xfcGFyYW1zIHBwcm0gPSB7fTtcbiBcdGludCByZXQ7XG4gXG4tXHRwcHJtLnBvb2xfc2l6ZSA9IG1wYy1cdTAwM2VyeF9xdWV1ZV9zaXplIC8gcnhxLVx1MDAzZWZyYWdfY291bnQgKyAxO1xuK1x0LyogU2l6ZSB0aGUgcG9vbCBmb3IgdGhpcyBSWCBxdWV1ZSwgbm90IHRoZSBsaXZlIGNvbmZpZ3VyYXRpb24uICovXG4rXHRwcHJtLnBvb2xfc2l6ZSA9IHJ4cS1cdTAwM2VudW1fcnhfYnVmIC8gcnhxLVx1MDAzZWZyYWdfY291bnQgKyAxO1xuIFx0cHBybS5uaWQgPSBnYy1cdTAwM2VudW1hX25vZGU7XG4gXHRwcHJtLm5hcGkgPSBcdTAwMjZyeHEtXHUwMDNlcnhfY3EubmFwaTtcbiBcdHBwcm0ubmV0ZGV2ID0gcnhxLVx1MDAzZW5kZXY7XG5AQCAtMzA2MiwxMSArMzMyNSwxNCBAQCBzdGF0aWMgc3RydWN0IG1hbmFfcnhxICptYW5hX2NyZWF0ZV9yeHEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFxuIFx0cnhxLVx1MDAzZW5kZXYgPSBuZGV2O1xuK1x0cnhxLVx1MDAzZXN0YXRzID0gXHUwMDI2YXBjLVx1MDAzZXJ4cV9zdGF0c1tyeHFfaWR4XTtcbitcdHU2NF9zdGF0c19pbml0KFx1MDAyNnJ4cS1cdTAwM2VkcmFpbl9zdGF0cy5zeW5jcCk7XG4gXHRyeHEtXHUwMDNlbnVtX3J4X2J1ZiA9IGFwYy1cdTAwM2VyeF9xdWV1ZV9zaXplO1xuIFx0cnhxLVx1MDAzZXJ4cV9pZHggPSByeHFfaWR4O1xuIFx0cnhxLVx1MDAzZXJ4b2JqID0gSU5WQUxJRF9NQU5BX0hBTkRMRTtcbiBcbi1cdG1hbmFfZ2V0X3J4YnVmX2NmZyhhcGMsIG5kZXYtXHUwMDNlbXR1LCBcdTAwMjZyeHEtXHUwMDNlZGF0YXNpemUsIFx1MDAyNnJ4cS1cdTAwM2VhbGxvY19zaXplLFxuK1x0bWFuYV9nZXRfcnhidWZfY2ZnKGFwYywgYXBjLVx1MDAzZWNvbmZpZ3VyZWRfbXR1LCBcdTAwMjZyeHEtXHUwMDNlZGF0YXNpemUsXG4rXHRcdFx0ICAgXHUwMDI2cnhxLVx1MDAzZWFsbG9jX3NpemUsXG4gXHRcdFx0ICAgXHUwMDI2cnhxLVx1MDAzZWhlYWRyb29tLCBcdTAwMjZyeHEtXHUwMDNlZnJhZ19jb3VudCk7XG4gXHQvKiBDcmVhdGUgcGFnZSBwb29sIGZvciBSWCBxdWV1ZSAqL1xuIFx0ZXJyID0gbWFuYV9jcmVhdGVfcGFnZV9wb29sKHJ4cSwgZ2MpO1xuQEAgLTMxOTYsMTQgKzM0NjIsMTUgQEAgc3RhdGljIHZvaWQgbWFuYV9jcmVhdGVfcnhxX2RlYnVnZnMoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsIGludCBpZHgpXG4gXHRcdFx0ICAgIFx1MDAyNm1hbmFfZGJnX3FfZm9wcyk7XG4gfVxuIFxuKy8qIFRoZSBjYWxsZXIgbXVzdCBkZXN0cm95IHF1ZXVlcyBhZGRlZCBiZWZvcmUgYSBmYWlsdXJlLiAqL1xuIHN0YXRpYyBpbnQgbWFuYV9hZGRfcnhfcXVldWVzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxuLVx0XHRcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuK1x0XHRcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1bnNpZ25lZCBpbnQgZmlyc3QpXG4ge1xuIFx0c3RydWN0IG1hbmFfcnhxICpyeHE7XG4gXHRpbnQgZXJyID0gMDtcbiBcdGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYXBjLVx1MDAzZW51bV9xdWV1ZXM7IGkrKykge1xuK1x0Zm9yIChpID0gZmlyc3Q7IGkgXHUwMDNjIGFwYy1cdTAwM2VudW1fcXVldWVzOyBpKyspIHtcbiBcdFx0cnhxID0gbWFuYV9jcmVhdGVfcnhxKGFwYywgaSwgXHUwMDI2YXBjLVx1MDAzZWVxc1tpXSwgbmRldik7XG4gXHRcdGlmIChJU19FUlIocnhxKSkge1xuIFx0XHRcdGVyciA9IFBUUl9FUlIocnhxKTtcbkBAIC0zMjExLDggKzM0NzgsNiBAQCBzdGF0aWMgaW50IG1hbmFfYWRkX3J4X3F1ZXVlcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuLVx0XHR1NjRfc3RhdHNfaW5pdChcdTAwMjZyeHEtXHUwMDNlc3RhdHMuc3luY3ApO1xuLVxuIFx0XHRhcGMtXHUwMDNlcnhxc1tpXSA9IHJ4cTtcbiBcbiBcdFx0bWFuYV9jcmVhdGVfcnhxX2RlYnVnZnMoYXBjLCBpKTtcbkBAIC0zMjIzLDE0ICszNDg4LDE1IEBAIHN0YXRpYyBpbnQgbWFuYV9hZGRfcnhfcXVldWVzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbWFuYV9kZXN0cm95X3J4cXMoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpXG4rc3RhdGljIHZvaWQgbWFuYV9kZXN0cm95X3J4cXNfZnJvbShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGludCBmaXJzdClcbiB7XG4gXHRzdHJ1Y3QgbWFuYV9yeHEgKnJ4cTtcbiBcdHUzMiByeHFfaWR4O1xuIFxuIFx0aWYgKGFwYy1cdTAwM2VyeHFzKSB7XG4gXG4tXHRcdGZvciAocnhxX2lkeCA9IDA7IHJ4cV9pZHggXHUwMDNjIGFwYy1cdTAwM2VudW1fcXVldWVzOyByeHFfaWR4KyspIHtcbitcdFx0Zm9yIChyeHFfaWR4ID0gZmlyc3Q7IHJ4cV9pZHggXHUwMDNjIGFwYy1cdTAwM2VudW1fcXVldWVzOyByeHFfaWR4KyspIHtcbiBcdFx0XHRyeHEgPSBhcGMtXHUwMDNlcnhxc1tyeHFfaWR4XTtcbiBcdFx0XHRpZiAoIXJ4cSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuQEAgLTMyNDEsNiArMzUwNywxMSBAQCBzdGF0aWMgdm9pZCBtYW5hX2Rlc3Ryb3lfcnhxcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYylcbiBcdH1cbiB9XG4gXG4rc3RhdGljIHZvaWQgbWFuYV9kZXN0cm95X3J4cXMoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpXG4re1xuK1x0bWFuYV9kZXN0cm95X3J4cXNfZnJvbShhcGMsIDApO1xuK31cbitcbiBzdGF0aWMgdm9pZCBtYW5hX2Rlc3Ryb3lfdnBvcnQoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpXG4ge1xuIFx0c3RydWN0IGdkbWFfZGV2ICpnZCA9IGFwYy1cdTAwM2VhYy1cdTAwM2VnZG1hX2RldjtcbkBAIC0zMzA2LDYgKzM1NzcsMjcgQEAgc3RhdGljIHZvaWQgbWFuYV9yc3NfdGFibGVfaW5pdChzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYylcbiBcdFx0XHRldGh0b29sX3J4ZmhfaW5kaXJfZGVmYXVsdChpLCBhcGMtXHUwMDNlbnVtX3F1ZXVlcyk7XG4gfVxuIFxuKy8qIEtlZXAgdXNlciB0YWJsZXMgd2l0aCB2YWxpZCBpbmRpY2VzOyBkZWZlciBsb3NzIG5vdGlmaWNhdGlvbi4gKi9cbitzdGF0aWMgYm9vbCBtYW5hX3Jzc190YWJsZV9rZWVwKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxuK1x0XHRcdFx0dW5zaWduZWQgaW50IG51bV9xdWV1ZXMsIGJvb2wgKmxvc3QpXG4re1xuK1x0dTMyIGk7XG4rXG4rXHQqbG9zdCA9IGZhbHNlO1xuK1xuK1x0aWYgKCFuZXRpZl9pc19yeGZoX2NvbmZpZ3VyZWQoYXBjLVx1MDAzZW5kZXYpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhcGMtXHUwMDNlaW5kaXJfdGFibGVfc3o7IGkrKykge1xuK1x0XHRpZiAoYXBjLVx1MDAzZWluZGlyX3RhYmxlW2ldIFx1MDAzZT0gbnVtX3F1ZXVlcykge1xuK1x0XHRcdCpsb3N0ID0gdHJ1ZTtcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiBpbnQgbWFuYV9kaXNhYmxlX3Zwb3J0X3J4KHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKVxuIHtcbiBcdHJldHVybiBtYW5hX2NmZ192cG9ydF9zdGVlcmluZyhhcGMsIFRSSV9TVEFURV9GQUxTRSwgZmFsc2UsIGZhbHNlLFxuQEAgLTM1NzYsNiArMzg2OCw3IEBAIGludCBtYW5hX2FsbG9jX3F1ZXVlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiB7XG4gXHRzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFx0c3RydWN0IGdkbWFfZGV2ICpnZCA9IGFwYy1cdTAwM2VhYy1cdTAwM2VnZG1hX2RldjtcbitcdGJvb2wgaW5kaXJfbG9zdDtcbiBcdGludCBlcnI7XG4gXG4gXHRlcnIgPSBtYW5hX2NyZWF0ZV92cG9ydChhcGMsIG5kZXYpO1xuQEAgLTM1OTIsNyArMzg4NSw3IEBAIGludCBtYW5hX2FsbG9jX3F1ZXVlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdFx0Z290byBkZXN0cm95X3Zwb3J0O1xuIFx0fVxuIFxuLVx0ZXJyID0gbWFuYV9jcmVhdGVfdHhxKGFwYywgbmRldik7XG4rXHRlcnIgPSBtYW5hX2NyZWF0ZV90eHEoYXBjLCBuZGV2LCAwKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0bmV0ZGV2X2VycihuZGV2LCBcIkZhaWxlZCB0byBjcmVhdGUgVFhRIG9uIHZQb3J0ICV1OiAlZFxcblwiLFxuIFx0XHRcdCAgIGFwYy1cdTAwM2Vwb3J0X2lkeCwgZXJyKTtcbkBAIC0zNjA3LDcgKzM5MDAsNyBAQCBpbnQgbWFuYV9hbGxvY19xdWV1ZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRcdGdvdG8gZGVzdHJveV90eHE7XG4gXHR9XG4gXG4tXHRlcnIgPSBtYW5hX2FkZF9yeF9xdWV1ZXMoYXBjLCBuZGV2KTtcbitcdGVyciA9IG1hbmFfYWRkX3J4X3F1ZXVlcyhhcGMsIG5kZXYsIDApO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBkZXN0cm95X3J4cTtcbiBcbkBAIC0zNjIxLDcgKzM5MTQsOSBAQCBpbnQgbWFuYV9hbGxvY19xdWV1ZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRcdGdvdG8gZGVzdHJveV9yeHE7XG4gXHR9XG4gXG4tXHRtYW5hX3Jzc190YWJsZV9pbml0KGFwYyk7XG4rXHQvKiBMb3NzIG5vdGlmaWNhdGlvbiBuZWVkcyBhIG5ldGRldiBpbnN0YW5jZSBsb2NrIHdlIG1heSBsYWNrLiAqL1xuK1x0aWYgKCFtYW5hX3Jzc190YWJsZV9rZWVwKGFwYywgYXBjLVx1MDAzZW51bV9xdWV1ZXMsIFx1MDAyNmluZGlyX2xvc3QpKVxuK1x0XHRtYW5hX3Jzc190YWJsZV9pbml0KGFwYyk7XG4gXG4gXHRlcnIgPSBtYW5hX2NvbmZpZ19yc3MoYXBjLCBUUklfU1RBVEVfVFJVRSwgdHJ1ZSwgdHJ1ZSk7XG4gXHRpZiAoZXJyKSB7XG5AQCAtMzY3OSwxNSArMzk3NCw4OCBAQCBpbnQgbWFuYV9hdHRhY2goc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBtYW5hX2RlYWxsb2NfcXVldWVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuKy8qIERyYWluIHdpdGggYSBwZXItc2V0IHRpbWVvdXQ7IHJldHVybiB0cnVlIG9ubHkgZm9yIGEgc3VjY2Vzc2Z1bCBGTFIuIEEgZmFsc2VcbisgKiByZXR1cm4gZG9lcyBub3QgZ3VhcmFudGVlIERNQSBxdWllc2NlbmNlLlxuKyAqL1xuK3N0YXRpYyBib29sIG1hbmFfZHJhaW5fdHhxcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYylcbiB7XG4tXHRzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFx0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIDEyMCAqIEhaO1xuLVx0c3RydWN0IGdkbWFfZGV2ICpnZCA9IGFwYy1cdTAwM2VhYy1cdTAwM2VnZG1hX2RldjtcbitcdHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjID0gYXBjLVx1MDAzZWFjLVx1MDAzZWdkbWFfZGV2LVx1MDAzZWdkbWFfY29udGV4dDtcbitcdGJvb2wgcXVpZXNjZWQgPSB0cnVlO1xuK1x0Ym9vbCByZXNldCA9IGZhbHNlO1xuIFx0c3RydWN0IG1hbmFfdHhxICp0eHE7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuLVx0aW50IGksIGVycjtcbiBcdHUzMiB0c2xlZXA7XG4rXHRpbnQgaSwgZXJyO1xuK1xuK1x0aWYgKCFhcGMtXHUwMDNldHhfcXApXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFwYy1cdTAwM2VudW1fcXVldWVzOyBpKyspIHtcbitcdFx0aWYgKCFhcGMtXHUwMDNldHhfcXBbaV0pXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHR4cSA9IFx1MDAyNmFwYy1cdTAwM2V0eF9xcFtpXS1cdTAwM2V0eHE7XG4rXG4rXHRcdC8qIEEgcHJldmlvdXMgZnVuY3Rpb24gcmVzZXQgaW52YWxpZGF0ZWQgdGhlc2UgcXVldWVzLiAqL1xuK1x0XHRpZiAoUkVBRF9PTkNFKGFwYy1cdTAwM2VhYy1cdTAwM2VyZXNldF9nZW4pICE9IHR4cS1cdTAwM2VyZXNldF9nZW4pXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHRzbGVlcCA9IDEwMDA7XG4rXHRcdHdoaWxlIChhdG9taWNfcmVhZChcdTAwMjZ0eHEtXHUwMDNlcGVuZGluZ19zZW5kcykgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAgICB0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkge1xuK1x0XHRcdHVzbGVlcF9yYW5nZSh0c2xlZXAsIHRzbGVlcCArIDEwMDApO1xuK1x0XHRcdHRzbGVlcCBcdTAwM2NcdTAwM2M9IDE7XG4rXHRcdH1cbitcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNnR4cS1cdTAwM2VwZW5kaW5nX3NlbmRzKSkge1xuK1x0XHRcdGVyciA9IHBjaWVfZmxyKHRvX3BjaV9kZXYoZ2MtXHUwMDNlZGV2KSk7XG4rXHRcdFx0aWYgKGVycikge1xuK1x0XHRcdFx0bmV0ZGV2X2VycihhcGMtXHUwMDNlbmRldixcbitcdFx0XHRcdFx0ICAgXCJmbHIgZmFpbGVkICVkIHdpdGggJWQgcGt0cyBwZW5kaW5nIGluIHR4cSAldVxcblwiLFxuK1x0XHRcdFx0XHQgICBlcnIsXG4rXHRcdFx0XHRcdCAgIGF0b21pY19yZWFkKFx1MDAyNnR4cS1cdTAwM2VwZW5kaW5nX3NlbmRzKSxcbitcdFx0XHRcdFx0ICAgdHhxLVx1MDAzZWdkbWFfdHhxX2lkKTtcbitcdFx0XHRcdHF1aWVzY2VkID0gZmFsc2U7XG4rXHRcdFx0fSBlbHNlIHtcbitcdFx0XHRcdC8qIEludmFsaWRhdGUgcXVldWVzIG9uIGV2ZXJ5IHBvcnQgYWZ0ZXIgdGhlXG4rXHRcdFx0XHQgKiBmdW5jdGlvbiByZXNldC5cbitcdFx0XHRcdCAqL1xuK1x0XHRcdFx0V1JJVEVfT05DRShhcGMtXHUwMDNlYWMtXHUwMDNlcmVzZXRfZ2VuLFxuK1x0XHRcdFx0XHQgICBhcGMtXHUwMDNlYWMtXHUwMDNlcmVzZXRfZ2VuICsgMSk7XG4rXG4rXHRcdFx0XHRyZXNldCA9IHRydWU7XG4rXHRcdFx0fVxuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHQvKiBBIGZhaWxlZCBGTFIgY2Fubm90IGp1c3RpZnkgdW5tYXBwaW5nIHBlbmRpbmcgVFggYnVmZmVycy4gKi9cbitcdGlmICghcXVpZXNjZWQpIHtcbitcdFx0bmV0ZGV2X2VycihhcGMtXHUwMDNlbmRldixcbitcdFx0XHQgICBcImRldmljZSBub3QgcXVpZXNjZWQsIGxlYWtpbmcgcGVuZGluZyBUWCBidWZmZXJzIGluc3RlYWQgb2YgdW5tYXBwaW5nIG1lbW9yeSBpdCBjYW4gc3RpbGwgRE1BIGZyb21cXG5cIik7XG4rXHRcdHJldHVybiByZXNldDtcbitcdH1cbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFwYy1cdTAwM2VudW1fcXVldWVzOyBpKyspIHtcbitcdFx0aWYgKCFhcGMtXHUwMDNldHhfcXBbaV0pXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHR4cSA9IFx1MDAyNmFwYy1cdTAwM2V0eF9xcFtpXS1cdTAwM2V0eHE7XG4rXHRcdHdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoXHUwMDI2dHhxLVx1MDAzZXBlbmRpbmdfc2ticykpKSB7XG4rXHRcdFx0bWFuYV91bm1hcF9za2Ioc2tiLCBhcGMpO1xuK1x0XHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4rXHRcdH1cbitcdFx0YXRvbWljX3NldChcdTAwMjZ0eHEtXHUwMDNlcGVuZGluZ19zZW5kcywgMCk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmVzZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbWFuYV9kZWFsbG9jX3F1ZXVlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbit7XG4rXHRzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyA9IG5ldGRldl9wcml2KG5kZXYpO1xuK1x0c3RydWN0IGdkbWFfZGV2ICpnZCA9IGFwYy1cdTAwM2VhYy1cdTAwM2VnZG1hX2RldjtcbitcdGludCBlcnI7XG4gXG4gXHRpZiAoYXBjLVx1MDAzZXBvcnRfaXNfdXApXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTM2OTgsNDggKzQwNjYsMjEgQEAgc3RhdGljIGludCBtYW5hX2RlYWxsb2NfcXVldWVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0aWYgKGdkLVx1MDAzZWdkbWFfY29udGV4dC1cdTAwM2Vpc19wZiBcdTAwMjZcdTAwMjYgIWFwYy1cdTAwM2VhYy1cdTAwM2VibV9ob3N0bW9kZSlcbiBcdFx0bWFuYV9wZl9kZXJlZ2lzdGVyX2ZpbHRlcihhcGMpO1xuIFxuLVx0LyogTm8gcGFja2V0IGNhbiBiZSB0cmFuc21pdHRlZCBub3cgc2luY2UgYXBjLVx1MDAzZXBvcnRfaXNfdXAgaXMgZmFsc2UuXG4tXHQgKiBUaGVyZSBpcyBzdGlsbCBhIHRpbnkgY2hhbmNlIHRoYXQgbWFuYV9wb2xsX3R4X2NxKCkgY2FuIHJlLWVuYWJsZVxuLVx0ICogYSB0eHEgYmVjYXVzZSBpdCBtYXkgbm90IHRpbWVseSBzZWUgYXBjLVx1MDAzZXBvcnRfaXNfdXAgYmVpbmcgY2xlYXJlZFxuLVx0ICogdG8gZmFsc2UsIGJ1dCBpdCBkb2Vzbid0IG1hdHRlciBzaW5jZSBtYW5hX3N0YXJ0X3htaXQoKSBkcm9wcyBhbnlcbi1cdCAqIG5ldyBwYWNrZXRzIGR1ZSB0byBhcGMtXHUwMDNlcG9ydF9pc191cCBiZWluZyBmYWxzZS5cbi1cdCAqXG4tXHQgKiBEcmFpbiBhbGwgdGhlIGluLWZsaWdodCBUWCBwYWNrZXRzLlxuLVx0ICogQSB0aW1lb3V0IG9mIDEyMCBzZWNvbmRzIGZvciBhbGwgdGhlIHF1ZXVlcyBpcyB1c2VkLlxuLVx0ICogVGhpcyB3aWxsIGJyZWFrIHRoZSB3aGlsZSBsb29wIHdoZW4gaC93IGlzIG5vdCByZXNwb25kaW5nLlxuLVx0ICogVGhpcyB2YWx1ZSBvZiAxMjAgaGFzIGJlZW4gZGVjaWRlZCBoZXJlIGNvbnNpZGVyaW5nIG1heFxuLVx0ICogbnVtYmVyIG9mIHF1ZXVlcy5cbi1cdCAqL1xuK1x0LyogQWZ0ZXIgRkxSLCBzY2hlZHVsZSBhIGJlc3QtZWZmb3J0IHNpYmxpbmctcG9ydCByZWJ1aWxkLiAqL1xuK1x0aWYgKG1hbmFfZHJhaW5fdHhxcyhhcGMpKSB7XG4rXHRcdHN0cnVjdCBtYW5hX2NvbnRleHQgKmFjID0gYXBjLVx1MDAzZWFjO1xuK1x0XHR1bnNpZ25lZCBpbnQgaTtcbiBcbi1cdGlmIChhcGMtXHUwMDNldHhfcXApIHtcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYXBjLVx1MDAzZW51bV9xdWV1ZXM7IGkrKykge1xuLVx0XHRcdHR4cSA9IFx1MDAyNmFwYy1cdTAwM2V0eF9xcFtpXS1cdTAwM2V0eHE7XG4tXHRcdFx0dHNsZWVwID0gMTAwMDtcbi1cdFx0XHR3aGlsZSAoYXRvbWljX3JlYWQoXHUwMDI2dHhxLVx1MDAzZXBlbmRpbmdfc2VuZHMpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICAgICB0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkge1xuLVx0XHRcdFx0dXNsZWVwX3JhbmdlKHRzbGVlcCwgdHNsZWVwICsgMTAwMCk7XG4tXHRcdFx0XHR0c2xlZXAgXHUwMDNjXHUwMDNjPSAxO1xuLVx0XHRcdH1cbi1cdFx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2dHhxLVx1MDAzZXBlbmRpbmdfc2VuZHMpKSB7XG4tXHRcdFx0XHRlcnIgPVxuLVx0XHRcdFx0ICAgIHBjaWVfZmxyKHRvX3BjaV9kZXYoZ2QtXHUwMDNlZ2RtYV9jb250ZXh0LVx1MDAzZWRldikpO1xuLVx0XHRcdFx0aWYgKGVycikge1xuLVx0XHRcdFx0XHRuZXRkZXZfZXJyKG5kZXYsIFwiZmxyIGZhaWxlZCAlZCB3aXRoICVkIHBrdHMgcGVuZGluZyBpbiB0eHEgJXVcXG5cIixcbi1cdFx0XHRcdFx0XHQgICBlcnIsXG4tXHRcdFx0XHRcdCAgICBhdG9taWNfcmVhZChcdTAwMjZ0eHEtXHUwMDNlcGVuZGluZ19zZW5kcyksXG4tXHRcdFx0XHRcdCAgICB0eHEtXHUwMDNlZ2RtYV90eHFfaWQpO1xuLVx0XHRcdFx0fVxuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuLVx0XHR9XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFjLVx1MDAzZW51bV9wb3J0czsgaSsrKSB7XG4rXHRcdFx0c3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICpzaWI7XG4gXG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFwYy1cdTAwM2VudW1fcXVldWVzOyBpKyspIHtcbi1cdFx0XHR0eHEgPSBcdTAwMjZhcGMtXHUwMDNldHhfcXBbaV0tXHUwMDNldHhxO1xuLVx0XHRcdHdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoXHUwMDI2dHhxLVx1MDAzZXBlbmRpbmdfc2ticykpKSB7XG4tXHRcdFx0XHRtYW5hX3VubWFwX3NrYihza2IsIGFwYyk7XG4tXHRcdFx0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuLVx0XHRcdH1cbi1cdFx0XHRhdG9taWNfc2V0KFx1MDAyNnR4cS1cdTAwM2VwZW5kaW5nX3NlbmRzLCAwKTtcbitcdFx0XHRpZiAoIWFjLVx1MDAzZXBvcnRzW2ldIHx8IGFjLVx1MDAzZXBvcnRzW2ldID09IG5kZXYpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRzaWIgPSBuZXRkZXZfcHJpdihhYy1cdTAwM2Vwb3J0c1tpXSk7XG4rXHRcdFx0bmV0ZGV2X2VycihhYy1cdTAwM2Vwb3J0c1tpXSxcbitcdFx0XHRcdCAgIFwicXVldWVzIHJlc2V0IGJ5IGEgc2libGluZyBwb3J0LCBzY2hlZHVsaW5nIHJlYnVpbGRcXG5cIik7XG4rXHRcdFx0cXVldWVfd29yayhhYy1cdTAwM2VwZXJfcG9ydF9xdWV1ZV9yZXNldF93cSxcbitcdFx0XHRcdCAgIFx1MDAyNnNpYi1cdTAwM2VxdWV1ZV9yZXNldF93b3JrKTtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTM3NjMsNiArNDEwNCw2ODUgQEAgc3RhdGljIGludCBtYW5hX2RlYWxsb2NfcXVldWVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIG1hbmFfcXNldF9zbmFwc2hvdChjb25zdCBzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmN0eCxcbitcdFx0XHQgICAgICAgc3RydWN0IG1hbmFfcXNldCAqb3V0KVxuK3tcbitcdG91dC1cdTAwM2V0eF9xcFx0XHQ9IGN0eC1cdTAwM2V0eF9xcDtcbitcdG91dC1cdTAwM2VyeHFzXHRcdD0gY3R4LVx1MDAzZXJ4cXM7XG4rXHRvdXQtXHUwMDNlaW5kaXJfdGFibGVcdD0gY3R4LVx1MDAzZWluZGlyX3RhYmxlO1xuK1x0b3V0LVx1MDAzZWluZGlyX3RhYmxlX3N6XHQ9IGN0eC1cdTAwM2VpbmRpcl90YWJsZV9zejtcbitcdG91dC1cdTAwM2VyeG9ial90YWJsZVx0PSBjdHgtXHUwMDNlcnhvYmpfdGFibGU7XG4rXHRvdXQtXHUwMDNlZGVmYXVsdF9yeG9ialx0PSBjdHgtXHUwMDNlZGVmYXVsdF9yeG9iajtcbitcdG91dC1cdTAwM2VudW1fcXVldWVzXHRcdD0gY3R4LVx1MDAzZW51bV9xdWV1ZXM7XG4rXHRvdXQtXHUwMDNlcnhfcXVldWVfc2l6ZVx0PSBjdHgtXHUwMDNlcnhfcXVldWVfc2l6ZTtcbitcdG91dC1cdTAwM2V0eF9xdWV1ZV9zaXplXHQ9IGN0eC1cdTAwM2V0eF9xdWV1ZV9zaXplO1xuK1x0b3V0LVx1MDAzZXByaXZfZmxhZ3NcdFx0PSBjdHgtXHUwMDNlcHJpdl9mbGFncztcbitcdG91dC1cdTAwM2VtdHVcdFx0PSBjdHgtXHUwMDNlY29uZmlndXJlZF9tdHU7XG4rXHRvdXQtXHUwMDNlYnBmX3Byb2dcdFx0PSBjdHgtXHUwMDNlYnBmX3Byb2c7XG4rXG4rXHRvdXQtXHUwMDNlcnhmaF9pbmRpcl9sb3N0XHQ9IGZhbHNlO1xuK31cbitcbitzdGF0aWMgdm9pZCBtYW5hX3FzZXRfaW5zdGFsbChzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmN0eCxcbitcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbWFuYV9xc2V0ICpxc2V0KVxuK3tcbitcdGN0eC1cdTAwM2V0eF9xcFx0XHQ9IHFzZXQtXHUwMDNldHhfcXA7XG4rXHRjdHgtXHUwMDNlcnhxc1x0XHQ9IHFzZXQtXHUwMDNlcnhxcztcbitcdGN0eC1cdTAwM2VpbmRpcl90YWJsZVx0PSBxc2V0LVx1MDAzZWluZGlyX3RhYmxlO1xuK1x0Y3R4LVx1MDAzZWluZGlyX3RhYmxlX3N6XHQ9IHFzZXQtXHUwMDNlaW5kaXJfdGFibGVfc3o7XG4rXHRjdHgtXHUwMDNlcnhvYmpfdGFibGVcdD0gcXNldC1cdTAwM2VyeG9ial90YWJsZTtcbitcdGN0eC1cdTAwM2VkZWZhdWx0X3J4b2JqXHQ9IHFzZXQtXHUwMDNlZGVmYXVsdF9yeG9iajtcbitcdGN0eC1cdTAwM2VudW1fcXVldWVzXHRcdD0gcXNldC1cdTAwM2VudW1fcXVldWVzO1xuK1x0Y3R4LVx1MDAzZXJ4X3F1ZXVlX3NpemVcdD0gcXNldC1cdTAwM2VyeF9xdWV1ZV9zaXplO1xuK1x0Y3R4LVx1MDAzZXR4X3F1ZXVlX3NpemVcdD0gcXNldC1cdTAwM2V0eF9xdWV1ZV9zaXplO1xuK1x0Y3R4LVx1MDAzZXByaXZfZmxhZ3NcdFx0PSBxc2V0LVx1MDAzZXByaXZfZmxhZ3M7XG4rXHRjdHgtXHUwMDNlY29uZmlndXJlZF9tdHVcdD0gcXNldC1cdTAwM2VtdHU7XG4rXHRjdHgtXHUwMDNlYnBmX3Byb2dcdFx0PSBxc2V0LVx1MDAzZWJwZl9wcm9nO1xuK31cbitcbisvKiBTY3JhdGNoIHN0YXJ0cyB3aXRob3V0IFNRcy9SUXMgYW5kIGJvcnJvd3MgdGhlIHBvcnQncyBFUSBwb29sLiBOZXZlciBjYWxsXG4rICogbWFuYV9kZXN0cm95X2VxKCkgb24gaXQuXG4rICovXG4rc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICptYW5hX3FzZXRfc2NyYXRjaF9hbGxvYyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYylcbit7XG4rXHRzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKnNjcmF0Y2g7XG4rXG4rXHRzY3JhdGNoID0ga3Z6YWxsb2Nfb2JqKCpzY3JhdGNoLCBHRlBfS0VSTkVMKTtcbitcdGlmICghc2NyYXRjaClcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHQqc2NyYXRjaCA9ICphcGM7XG4rXG4rXHRzY3JhdGNoLVx1MDAzZXR4X3FwXHRcdD0gTlVMTDtcbitcdHNjcmF0Y2gtXHUwMDNlcnhxc1x0XHQ9IE5VTEw7XG4rXHRzY3JhdGNoLVx1MDAzZWluZGlyX3RhYmxlXHQ9IE5VTEw7XG4rXHRzY3JhdGNoLVx1MDAzZXJ4b2JqX3RhYmxlXHQ9IE5VTEw7XG4rXHRzY3JhdGNoLVx1MDAzZWRlZmF1bHRfcnhvYmpcdD0gSU5WQUxJRF9NQU5BX0hBTkRMRTtcbitcbitcdC8qIERvIG5vdCBjb25zdW1lIHRoZSBsaXZlIHNldCdzIHByZS1hbGxvY2F0ZWQgUlggYnVmZmVycy4gKi9cbitcdHNjcmF0Y2gtXHUwMDNlcnhidWZzX3ByZVx0PSBOVUxMO1xuK1x0c2NyYXRjaC1cdTAwM2VkYXNfcHJlXHQ9IE5VTEw7XG4rXHRzY3JhdGNoLVx1MDAzZXJ4YnByZV90b3RhbFx0PSAwO1xuK1xuK1x0LyogU3VwcHJlc3MgZGVidWdmcyBuYW1lcyB0aGF0IHdvdWxkIGNvbGxpZGUgd2l0aCB0aGUgbGl2ZSBzZXQuICovXG4rXHRzY3JhdGNoLVx1MDAzZW1hbmFfcG9ydF9kZWJ1Z2ZzID0gRVJSX1BUUigtRU5PREVWKTtcbitcbitcdHJldHVybiBzY3JhdGNoO1xuK31cbitcbit2b2lkIG1hbmFfcXNldF9zY3JhdGNoX2ZyZWUoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICpzY3JhdGNoKVxuK3tcbitcdGt2ZnJlZShzY3JhdGNoKTtcbit9XG4rXG4rLyogU3BsaXQgaW50byBrZXB0IHF1ZXVlcyBhbmQgYSByZXRpcmluZyB0YWlsIHdpdGhvdXQgY2hhbmdpbmcgbGl2ZSBvd25lcnNoaXAuXG4rICogUXVldWUgaSByZXRhaW5zIEVRIGkuXG4rICovXG4raW50IG1hbmFfc3BsaXRfcXNldChzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcbitcdFx0ICAgIHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqc2NyYXRjaCwgdW5zaWduZWQgaW50IG5ld19jb3VudCxcbitcdFx0ICAgIHN0cnVjdCBtYW5hX3FzZXQgKm91dF9uZXcsIHN0cnVjdCBtYW5hX3FzZXQgKm91dF90YWlsKVxuK3tcbitcdHVuc2lnbmVkIGludCBvbGRfY291bnQgPSBhcGMtXHUwMDNlbnVtX3F1ZXVlcztcbitcdHN0cnVjdCBtYW5hX3R4X3FwICoqbmV3X3R4LCAqKnRhaWxfdHg7XG4rXHRzdHJ1Y3QgbWFuYV9yeHEgKipuZXdfcngsICoqdGFpbF9yeDtcbitcdHVuc2lnbmVkIGludCB0YWlsX2NvdW50O1xuK1x0Ym9vbCBpbmRpcl9sb3N0O1xuK1x0dW5zaWduZWQgaW50IGk7XG4rXHRpbnQgZXJyO1xuK1xuK1x0QVNTRVJUX1JUTkwoKTtcbitcbitcdGlmIChXQVJOX09OKG5ld19jb3VudCA9PSAwIHx8IG5ld19jb3VudCBcdTAwM2U9IG9sZF9jb3VudCkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKFdBUk5fT04oIWFwYy1cdTAwM2V0eF9xcCB8fCAhYXBjLVx1MDAzZXJ4cXMpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHRhaWxfY291bnQgPSBvbGRfY291bnQgLSBuZXdfY291bnQ7XG4rXG4rXHQvKiBCdWlsZCBzdGVlcmluZyBzZXBhcmF0ZWx5IHNvIGl0IGNhbm5vdCBpbmRleCBiZXlvbmQgdGhlIHNob3J0ZW5lZCBSWFxuK1x0ICogYXJyYXkuXG4rXHQgKi9cbitcdHNjcmF0Y2gtXHUwMDNlbnVtX3F1ZXVlcyA9IG5ld19jb3VudDtcbitcdGVyciA9IG1hbmFfcnNzX3RhYmxlX2FsbG9jKHNjcmF0Y2gpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGlmIChtYW5hX3Jzc190YWJsZV9rZWVwKGFwYywgbmV3X2NvdW50LCBcdTAwMjZpbmRpcl9sb3N0KSlcbitcdFx0bWVtY3B5KHNjcmF0Y2gtXHUwMDNlaW5kaXJfdGFibGUsIGFwYy1cdTAwM2VpbmRpcl90YWJsZSxcbitcdFx0ICAgICAgIGFwYy1cdTAwM2VpbmRpcl90YWJsZV9zeiAqIHNpemVvZigqYXBjLVx1MDAzZWluZGlyX3RhYmxlKSk7XG4rXHRlbHNlXG4rXHRcdG1hbmFfcnNzX3RhYmxlX2luaXQoc2NyYXRjaCk7XG4rXG4rXHRuZXdfdHggPSBremFsbG9jX29ianMoc3RydWN0IG1hbmFfdHhfcXAgKiwgbmV3X2NvdW50KTtcbitcdG5ld19yeCA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgbWFuYV9yeHEgKiwgbmV3X2NvdW50KTtcbitcdHRhaWxfdHggPSBremFsbG9jX29ianMoc3RydWN0IG1hbmFfdHhfcXAgKiwgdGFpbF9jb3VudCk7XG4rXHR0YWlsX3J4ID0ga3phbGxvY19vYmpzKHN0cnVjdCBtYW5hX3J4cSAqLCB0YWlsX2NvdW50KTtcbitcdGlmICghbmV3X3R4IHx8ICFuZXdfcnggfHwgIXRhaWxfdHggfHwgIXRhaWxfcngpIHtcbitcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0Z290byBmcmVlX2FycmF5cztcbitcdH1cbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5ld19jb3VudDsgaSsrKSB7XG4rXHRcdG5ld190eFtpXSA9IGFwYy1cdTAwM2V0eF9xcFtpXTtcbitcdFx0bmV3X3J4W2ldID0gYXBjLVx1MDAzZXJ4cXNbaV07XG4rXHR9XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0YWlsX2NvdW50OyBpKyspIHtcbitcdFx0dGFpbF90eFtpXSA9IGFwYy1cdTAwM2V0eF9xcFtuZXdfY291bnQgKyBpXTtcbitcdFx0dGFpbF9yeFtpXSA9IGFwYy1cdTAwM2VyeHFzW25ld19jb3VudCArIGldO1xuK1x0fVxuK1xuK1x0b3V0X25ldy1cdTAwM2V0eF9xcFx0XHQ9IG5ld190eDtcbitcdG91dF9uZXctXHUwMDNlcnhxc1x0XHQ9IG5ld19yeDtcbitcdG91dF9uZXctXHUwMDNlaW5kaXJfdGFibGVcdD0gc2NyYXRjaC1cdTAwM2VpbmRpcl90YWJsZTtcbitcdG91dF9uZXctXHUwMDNlaW5kaXJfdGFibGVfc3pcdD0gc2NyYXRjaC1cdTAwM2VpbmRpcl90YWJsZV9zejtcbitcdG91dF9uZXctXHUwMDNlcnhvYmpfdGFibGVcdD0gc2NyYXRjaC1cdTAwM2VyeG9ial90YWJsZTtcbitcdG91dF9uZXctXHUwMDNlZGVmYXVsdF9yeG9ialx0PSBhcGMtXHUwMDNlcnhxc1swXS1cdTAwM2VyeG9iajtcbitcdG91dF9uZXctXHUwMDNlbnVtX3F1ZXVlc1x0PSBuZXdfY291bnQ7XG4rXHRvdXRfbmV3LVx1MDAzZXJ4X3F1ZXVlX3NpemVcdD0gYXBjLVx1MDAzZXJ4X3F1ZXVlX3NpemU7XG4rXHRvdXRfbmV3LVx1MDAzZXR4X3F1ZXVlX3NpemVcdD0gYXBjLVx1MDAzZXR4X3F1ZXVlX3NpemU7XG4rXHRvdXRfbmV3LVx1MDAzZXByaXZfZmxhZ3NcdD0gYXBjLVx1MDAzZXByaXZfZmxhZ3M7XG4rXHRvdXRfbmV3LVx1MDAzZW10dVx0XHQ9IGFwYy1cdTAwM2Vjb25maWd1cmVkX210dTtcbitcdG91dF9uZXctXHUwMDNlYnBmX3Byb2dcdD0gYXBjLVx1MDAzZWJwZl9wcm9nO1xuK1x0b3V0X25ldy1cdTAwM2VyeGZoX2luZGlyX2xvc3QgPSBpbmRpcl9sb3N0O1xuK1xuK1x0c2NyYXRjaC1cdTAwM2VpbmRpcl90YWJsZVx0PSBOVUxMO1xuK1x0c2NyYXRjaC1cdTAwM2VyeG9ial90YWJsZVx0PSBOVUxMO1xuK1xuK1x0bWVtc2V0KG91dF90YWlsLCAwLCBzaXplb2YoKm91dF90YWlsKSk7XG4rXHRvdXRfdGFpbC1cdTAwM2V0eF9xcFx0XHQ9IHRhaWxfdHg7XG4rXHRvdXRfdGFpbC1cdTAwM2VyeHFzXHRcdD0gdGFpbF9yeDtcbitcdG91dF90YWlsLVx1MDAzZWRlZmF1bHRfcnhvYmpcdD0gSU5WQUxJRF9NQU5BX0hBTkRMRTtcbitcdG91dF90YWlsLVx1MDAzZW51bV9xdWV1ZXNcdD0gdGFpbF9jb3VudDtcbitcdG91dF90YWlsLVx1MDAzZXJ4X3F1ZXVlX3NpemVcdD0gYXBjLVx1MDAzZXJ4X3F1ZXVlX3NpemU7XG4rXHRvdXRfdGFpbC1cdTAwM2V0eF9xdWV1ZV9zaXplXHQ9IGFwYy1cdTAwM2V0eF9xdWV1ZV9zaXplO1xuK1x0b3V0X3RhaWwtXHUwMDNlcHJpdl9mbGFnc1x0PSBhcGMtXHUwMDNlcHJpdl9mbGFncztcbitcdG91dF90YWlsLVx1MDAzZW10dVx0XHQ9IGFwYy1cdTAwM2Vjb25maWd1cmVkX210dTtcbitcdG91dF90YWlsLVx1MDAzZWJwZl9wcm9nXHQ9IGFwYy1cdTAwM2VicGZfcHJvZztcbitcbitcdHJldHVybiAwO1xuK1xuK2ZyZWVfYXJyYXlzOlxuK1x0a2ZyZWUobmV3X3R4KTtcbitcdGtmcmVlKG5ld19yeCk7XG4rXHRrZnJlZSh0YWlsX3R4KTtcbitcdGtmcmVlKHRhaWxfcngpO1xuK1x0bWFuYV9jbGVhbnVwX2luZGlyX3RhYmxlKHNjcmF0Y2gpO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rLyogRnJlZSBjb250YWluZXJzIG9ubHk7IHRoZSBsaXZlIHBvcnQgc3RpbGwgb3ducyB0aGUgcXVldWVzLiAqL1xuK3ZvaWQgbWFuYV9kaXNjYXJkX3NwbGl0KHN0cnVjdCBtYW5hX3FzZXQgKm5ld3EsIHN0cnVjdCBtYW5hX3FzZXQgKnRhaWxxKVxuK3tcbitcdGtmcmVlKG5ld3EtXHUwMDNldHhfcXApO1xuK1x0a2ZyZWUobmV3cS1cdTAwM2VyeHFzKTtcbitcdGtmcmVlKG5ld3EtXHUwMDNlaW5kaXJfdGFibGUpO1xuK1x0a2ZyZWUobmV3cS1cdTAwM2VyeG9ial90YWJsZSk7XG4rXHRrZnJlZSh0YWlscS1cdTAwM2V0eF9xcCk7XG4rXHRrZnJlZSh0YWlscS1cdTAwM2VyeHFzKTtcbitcdG1lbXNldChuZXdxLCAwLCBzaXplb2YoKm5ld3EpKTtcbitcdG1lbXNldCh0YWlscSwgMCwgc2l6ZW9mKCp0YWlscSkpO1xuK31cbitcbisvKiBDYXJyeSBleGlzdGluZyBxdWV1ZXMgaW50byBAb3V0X25ldzsgYWxsb2NhdGUgb25seSB0aGUgdGFpbC4gQG91dF9mcmVzaFxuKyAqIGlzb2xhdGVzIG5ldyBxdWV1ZXMgZm9yIGNsZWFudXAgYWZ0ZXIgYSBmYWlsZWQgcHVibGlzaC5cbisgKi9cbitpbnQgbWFuYV9ncm93X3FzZXQoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXG4rXHRcdCAgIHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqc2NyYXRjaCwgdW5zaWduZWQgaW50IG5ld19jb3VudCxcbitcdFx0ICAgc3RydWN0IG1hbmFfcXNldCAqb3V0X25ldywgc3RydWN0IG1hbmFfcXNldCAqb3V0X2ZyZXNoKVxuK3tcbitcdHVuc2lnbmVkIGludCBvbGRfY291bnQgPSBhcGMtXHUwMDNlbnVtX3F1ZXVlcztcbitcdHN0cnVjdCBtYW5hX3R4X3FwICoqbmV3X3R4LCAqKmZyZXNoX3R4O1xuK1x0c3RydWN0IG1hbmFfcnhxICoqbmV3X3J4LCAqKmZyZXNoX3J4O1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBhcGMtXHUwMDNlbmRldjtcbitcdHVuc2lnbmVkIGludCBmcmVzaF9jb3VudDtcbitcdGJvb2wgaW5kaXJfbG9zdDtcbitcdHVuc2lnbmVkIGludCBpO1xuK1x0aW50IGVycjtcbitcbitcdEFTU0VSVF9SVE5MKCk7XG4rXG4rXHRpZiAoV0FSTl9PTihuZXdfY291bnQgXHUwMDNjPSBvbGRfY291bnQpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmIChXQVJOX09OKCFhcGMtXHUwMDNldHhfcXAgfHwgIWFwYy1cdTAwM2VyeHFzKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRmcmVzaF9jb3VudCA9IG5ld19jb3VudCAtIG9sZF9jb3VudDtcbitcbitcdG5ld190eCA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgbWFuYV90eF9xcCAqLCBuZXdfY291bnQpO1xuK1x0bmV3X3J4ID0ga3phbGxvY19vYmpzKHN0cnVjdCBtYW5hX3J4cSAqLCBuZXdfY291bnQpO1xuK1x0ZnJlc2hfdHggPSBremFsbG9jX29ianMoc3RydWN0IG1hbmFfdHhfcXAgKiwgZnJlc2hfY291bnQpO1xuK1x0ZnJlc2hfcnggPSBremFsbG9jX29ianMoc3RydWN0IG1hbmFfcnhxICosIGZyZXNoX2NvdW50KTtcbitcdGlmICghbmV3X3R4IHx8ICFuZXdfcnggfHwgIWZyZXNoX3R4IHx8ICFmcmVzaF9yeCkge1xuK1x0XHRlcnIgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIGZyZWVfYXJyYXlzO1xuK1x0fVxuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgb2xkX2NvdW50OyBpKyspIHtcbitcdFx0bmV3X3R4W2ldID0gYXBjLVx1MDAzZXR4X3FwW2ldO1xuK1x0XHRuZXdfcnhbaV0gPSBhcGMtXHUwMDNlcnhxc1tpXTtcbitcdH1cbitcbitcdHNjcmF0Y2gtXHUwMDNlbnVtX3F1ZXVlcyA9IG5ld19jb3VudDtcbitcdHNjcmF0Y2gtXHUwMDNldHhfcXAgPSBuZXdfdHg7XG4rXHRzY3JhdGNoLVx1MDAzZXJ4cXMgPSBuZXdfcng7XG4rXG4rXHRlcnIgPSBtYW5hX3Jzc190YWJsZV9hbGxvYyhzY3JhdGNoKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZnJlZV9hcnJheXM7XG4rXG4rXHRlcnIgPSBtYW5hX2dyb3dfZXFzKGFwYywgbmV3X2NvdW50KTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gY2xlYW51cF9yc3M7XG4rXG4rXHRzY3JhdGNoLVx1MDAzZWVxcyA9IGFwYy1cdTAwM2VlcXM7XG4rXHRzY3JhdGNoLVx1MDAzZW51bV9lcXMgPSBhcGMtXHUwMDNlbnVtX2VxcztcbitcbitcdGVyciA9IG1hbmFfY3JlYXRlX3R4cShzY3JhdGNoLCBuZGV2LCBvbGRfY291bnQpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBjbGVhbnVwX3JzcztcbitcbitcdGVyciA9IG1hbmFfYWRkX3J4X3F1ZXVlcyhzY3JhdGNoLCBuZGV2LCBvbGRfY291bnQpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBjbGVhbnVwX3J4cTtcbitcbitcdGlmIChtYW5hX3Jzc190YWJsZV9rZWVwKGFwYywgbmV3X2NvdW50LCBcdTAwMjZpbmRpcl9sb3N0KSlcbitcdFx0bWVtY3B5KHNjcmF0Y2gtXHUwMDNlaW5kaXJfdGFibGUsIGFwYy1cdTAwM2VpbmRpcl90YWJsZSxcbitcdFx0ICAgICAgIGFwYy1cdTAwM2VpbmRpcl90YWJsZV9zeiAqIHNpemVvZigqYXBjLVx1MDAzZWluZGlyX3RhYmxlKSk7XG4rXHRlbHNlXG4rXHRcdG1hbmFfcnNzX3RhYmxlX2luaXQoc2NyYXRjaCk7XG4rXG4rXHRtYW5hX3FzZXRfc25hcHNob3Qoc2NyYXRjaCwgb3V0X25ldyk7XG4rXHRvdXRfbmV3LVx1MDAzZXJ4ZmhfaW5kaXJfbG9zdCA9IGluZGlyX2xvc3Q7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBmcmVzaF9jb3VudDsgaSsrKSB7XG4rXHRcdGZyZXNoX3R4W2ldID0gbmV3X3R4W29sZF9jb3VudCArIGldO1xuK1x0XHRmcmVzaF9yeFtpXSA9IG5ld19yeFtvbGRfY291bnQgKyBpXTtcbitcdH1cbitcbitcdG1lbXNldChvdXRfZnJlc2gsIDAsIHNpemVvZigqb3V0X2ZyZXNoKSk7XG4rXHRvdXRfZnJlc2gtXHUwMDNldHhfcXBcdD0gZnJlc2hfdHg7XG4rXHRvdXRfZnJlc2gtXHUwMDNlcnhxc1x0XHQ9IGZyZXNoX3J4O1xuK1x0b3V0X2ZyZXNoLVx1MDAzZWRlZmF1bHRfcnhvYmogPSBJTlZBTElEX01BTkFfSEFORExFO1xuK1x0b3V0X2ZyZXNoLVx1MDAzZW51bV9xdWV1ZXNcdD0gZnJlc2hfY291bnQ7XG4rXHRvdXRfZnJlc2gtXHUwMDNlcnhfcXVldWVfc2l6ZSA9IGFwYy1cdTAwM2VyeF9xdWV1ZV9zaXplO1xuK1x0b3V0X2ZyZXNoLVx1MDAzZXR4X3F1ZXVlX3NpemUgPSBhcGMtXHUwMDNldHhfcXVldWVfc2l6ZTtcbitcdG91dF9mcmVzaC1cdTAwM2Vwcml2X2ZsYWdzXHQ9IGFwYy1cdTAwM2Vwcml2X2ZsYWdzO1xuK1x0b3V0X2ZyZXNoLVx1MDAzZW10dVx0XHQ9IGFwYy1cdTAwM2Vjb25maWd1cmVkX210dTtcbitcdG91dF9mcmVzaC1cdTAwM2VicGZfcHJvZ1x0PSBhcGMtXHUwMDNlYnBmX3Byb2c7XG4rXG4rXHQvKiBUYWtlIFhEUCByZWZzIG9uIGZyZXNoIFJYUXMgb25seS4gT24gdGhlIG1lcmdlZCBzZXQsXG4rXHQgKiBtYW5hX2Nobl9zZXR4ZHAoKSByZXR1cm5zIGVhcmx5IG9uIHRoZSBjYXJyaWVkIHJ4cXNbMF0uXG4rXHQgKi9cbitcdG1hbmFfcXNldF9pbnN0YWxsKHNjcmF0Y2gsIG91dF9mcmVzaCk7XG4rXHRtYW5hX2Nobl9zZXR4ZHAoc2NyYXRjaCwgbWFuYV94ZHBfZ2V0KGFwYykpO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rY2xlYW51cF9yeHE6XG4rXHRtYW5hX2Rlc3Ryb3lfcnhxc19mcm9tKHNjcmF0Y2gsIG9sZF9jb3VudCk7XG4rXHRtYW5hX2Rlc3Ryb3lfdHhxX2Zyb20oc2NyYXRjaCwgb2xkX2NvdW50KTtcbitjbGVhbnVwX3JzczpcbitcdG1hbmFfY2xlYW51cF9pbmRpcl90YWJsZShzY3JhdGNoKTtcbitmcmVlX2FycmF5czpcbitcdC8qIEZyZWUgY29udGFpbmVycyBvbmx5OyBjYXJyaWVkIHF1ZXVlcyByZW1haW4gbGl2ZS4gKi9cbitcdHNjcmF0Y2gtXHUwMDNldHhfcXAgPSBOVUxMO1xuK1x0c2NyYXRjaC1cdTAwM2VyeHFzID0gTlVMTDtcbitcdGtmcmVlKG5ld190eCk7XG4rXHRrZnJlZShuZXdfcngpO1xuK1x0a2ZyZWUoZnJlc2hfdHgpO1xuK1x0a2ZyZWUoZnJlc2hfcngpO1xuK1xuK1x0bWFuYV9zaHJpbmtfZXFzKGFwYywgYXBjLVx1MDAzZW51bV9xdWV1ZXMpO1xuK1xuK1x0bmV0ZGV2X2VycihuZGV2LCBcIiVzKG51bV9xdWV1ZXM9JXUpIGZhaWxlZDogJWRcXG5cIiwgX19mdW5jX18sXG4rXHRcdCAgIG5ld19jb3VudCwgZXJyKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuKy8qIEZyZWUgbWVyZ2VkIGNvbnRhaW5lcnMgb25seSwgbm90IGNhcnJpZWQgcXVldWVzLiBUaGUgY2FsbGVyIG11c3QgcmV0aXJlIGZyZXNoXG4rICogcXVldWVzIHNlcGFyYXRlbHkuXG4rICovXG4rdm9pZCBtYW5hX2Rpc2NhcmRfZ3JvdyhzdHJ1Y3QgbWFuYV9xc2V0ICpuZXdxKVxuK3tcbitcdGtmcmVlKG5ld3EtXHUwMDNldHhfcXApO1xuK1x0a2ZyZWUobmV3cS1cdTAwM2VyeHFzKTtcbitcdGtmcmVlKG5ld3EtXHUwMDNlaW5kaXJfdGFibGUpO1xuK1x0a2ZyZWUobmV3cS1cdTAwM2VyeG9ial90YWJsZSk7XG4rXHRtZW1zZXQobmV3cSwgMCwgc2l6ZW9mKCpuZXdxKSk7XG4rfVxuK1xuKy8qIFJlYnVpbGQgYXQgdGhlIGN1cnJlbnQgY291bnQ7IHJlc2l6ZSB1c2VzIHNwbGl0L2dyb3cuICovXG4raW50IG1hbmFfYWxsb2NfcXNldChzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcbitcdFx0ICAgIHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqc2NyYXRjaCxcbitcdFx0ICAgIHVuc2lnbmVkIGludCByeF9xdWV1ZV9zaXplLCB1bnNpZ25lZCBpbnQgdHhfcXVldWVfc2l6ZSxcbitcdFx0ICAgIHUzMiBwcml2X2ZsYWdzLCBpbnQgbXR1LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLFxuK1x0XHQgICAgc3RydWN0IG1hbmFfcXNldCAqb3V0KVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gc2NyYXRjaC1cdTAwM2VuZGV2O1xuK1x0Ym9vbCBpbmRpcl9sb3N0O1xuK1x0aW50IGVycjtcbitcbitcdEFTU0VSVF9SVE5MKCk7XG4rXG4rXHRzY3JhdGNoLVx1MDAzZW51bV9xdWV1ZXNcdD0gYXBjLVx1MDAzZW51bV9xdWV1ZXM7XG4rXHRzY3JhdGNoLVx1MDAzZXJ4X3F1ZXVlX3NpemVcdD0gcnhfcXVldWVfc2l6ZTtcbitcdHNjcmF0Y2gtXHUwMDNldHhfcXVldWVfc2l6ZVx0PSB0eF9xdWV1ZV9zaXplO1xuK1x0c2NyYXRjaC1cdTAwM2Vwcml2X2ZsYWdzXHQ9IHByaXZfZmxhZ3M7XG4rXG4rXHRzY3JhdGNoLVx1MDAzZWNvbmZpZ3VyZWRfbXR1XHQ9IG10dTtcbitcdHNjcmF0Y2gtXHUwMDNlYnBmX3Byb2dcdD0gYnBmX3Byb2c7XG4rXG4rXHRlcnIgPSBtYW5hX2luaXRfcG9ydF9jb250ZXh0KHNjcmF0Y2gpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBvdXRfZXJyO1xuK1xuK1x0ZXJyID0gbWFuYV9yc3NfdGFibGVfYWxsb2Moc2NyYXRjaCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGNsZWFudXBfcnhxX2FycmF5O1xuK1xuK1x0LyogUmV1c2UgdGhlIGV4aXN0aW5nIEVRIHBvb2w7IHRoZSBxdWV1ZSBjb3VudCBpcyB1bmNoYW5nZWQuICovXG4rXHRzY3JhdGNoLVx1MDAzZWVxcyA9IGFwYy1cdTAwM2VlcXM7XG4rXHRzY3JhdGNoLVx1MDAzZW51bV9lcXMgPSBhcGMtXHUwMDNlbnVtX2VxcztcbitcbitcdGVyciA9IG1hbmFfY3JlYXRlX3R4cShzY3JhdGNoLCBuZGV2LCAwKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gY2xlYW51cF9yc3M7XG4rXG4rXHRlcnIgPSBtYW5hX2FkZF9yeF9xdWV1ZXMoc2NyYXRjaCwgbmRldiwgMCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGNsZWFudXBfcnhxO1xuK1xuK1x0aWYgKG1hbmFfcnNzX3RhYmxlX2tlZXAoYXBjLCBzY3JhdGNoLVx1MDAzZW51bV9xdWV1ZXMsIFx1MDAyNmluZGlyX2xvc3QpKVxuK1x0XHRtZW1jcHkoc2NyYXRjaC1cdTAwM2VpbmRpcl90YWJsZSwgYXBjLVx1MDAzZWluZGlyX3RhYmxlLFxuK1x0XHQgICAgICAgYXBjLVx1MDAzZWluZGlyX3RhYmxlX3N6ICogc2l6ZW9mKCphcGMtXHUwMDNlaW5kaXJfdGFibGUpKTtcbitcdGVsc2VcbitcdFx0bWFuYV9yc3NfdGFibGVfaW5pdChzY3JhdGNoKTtcbitcbitcdG1hbmFfcXNldF9zbmFwc2hvdChzY3JhdGNoLCBvdXQpO1xuK1x0b3V0LVx1MDAzZXJ4ZmhfaW5kaXJfbG9zdCA9IGluZGlyX2xvc3Q7XG4rXHRyZXR1cm4gMDtcbitcbitjbGVhbnVwX3J4cTpcbitcdG1hbmFfZGVzdHJveV9yeHFzKHNjcmF0Y2gpO1xuK1x0bWFuYV9kZXN0cm95X3R4cShzY3JhdGNoKTtcbitjbGVhbnVwX3JzczpcbitcdG1hbmFfY2xlYW51cF9pbmRpcl90YWJsZShzY3JhdGNoKTtcbitjbGVhbnVwX3J4cV9hcnJheTpcbitcdGtmcmVlKHNjcmF0Y2gtXHUwMDNlcnhxcyk7XG4rXHRzY3JhdGNoLVx1MDAzZXJ4cXMgPSBOVUxMO1xuK291dF9lcnI6XG4rXHRuZXRkZXZfZXJyKG5kZXYsIFwiJXMobnVtX3F1ZXVlcz0ldSkgZmFpbGVkOiAlZFxcblwiLCBfX2Z1bmNfXyxcbitcdFx0ICAgYXBjLVx1MDAzZW51bV9xdWV1ZXMsIGVycik7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbisvKiBEZXN0cm95IGNhbGxlci1vd25lZCBDUXMgYmVmb3JlIGNsb3NpbmcgdGhpcyBkZWFkLWVuZCBwb3J0OiBjbG9zaW5nIGFsc29cbisgKiBmcmVlcyB0aGUgc2hhcmVkIEVRIHBvb2wuIFJlcXVpcmVzIFJUTkwuXG4rICovXG4rdm9pZCBtYW5hX3B1Ymxpc2hfY2xvc2VfaWZfbmVlZGVkKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKVxuK3tcbitcdEFTU0VSVF9SVE5MKCk7XG4rXG4rXHRpZiAoIWFwYy1cdTAwM2VwdWJsaXNoX2RlYWRfZW5kKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRhcGMtXHUwMDNlcHVibGlzaF9kZWFkX2VuZCA9IGZhbHNlO1xuK1xuK1x0aWYgKG1hbmFfZGVhbGxvY19xdWV1ZXMoYXBjLVx1MDAzZW5kZXYpKVxuK1x0XHRuZXRkZXZfZXJyKGFwYy1cdTAwM2VuZGV2LFxuK1x0XHRcdCAgIFwiZmFpbGVkIHRvIGNsb3NlIHRoZSBwb3J0IGFmdGVyIGEgZmFpbGVkIHJvbGxiYWNrXFxuXCIpO1xuK31cbitcbisvKiBDYXJyaWVkLW92ZXIgcXVldWVzIG1heSBzdGlsbCBoYXZlIGZ1bGwgcmluZ3MuICovXG4rc3RhdGljIHZvaWQgbWFuYV9zdGFydF90eHFzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gYXBjLVx1MDAzZW5kZXY7XG4rXHR1bnNpZ25lZCBpbnQgaTtcbitcbitcdGlmICghYXBjLVx1MDAzZXR4X3FwKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKiBPcmRlciBwb3J0X2lzX3VwPXRydWUgYmVmb3JlIHJpbmcgcmVhZHMgdG8gYXZvaWQgYSBtaXNzZWQgd2FrZXVwLlxuK1x0ICogUGFpciB3aXRoIG1hbmFfcG9sbF90eF9jcSgpJ3MgZnVsbCBiYXJyaWVyIGFmdGVyIGl0cyB0YWlsIHVwZGF0ZS5cbitcdCAqL1xuK1x0c21wX21iKCk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhcGMtXHUwMDNlbnVtX3F1ZXVlczsgaSsrKSB7XG4rXHRcdGlmICghYXBjLVx1MDAzZXR4X3FwW2ldKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRpZiAobWFuYV9jYW5fdHgoYXBjLVx1MDAzZXR4X3FwW2ldLVx1MDAzZXR4cS5nZG1hX3NxKSlcbitcdFx0XHRuZXRpZl90eF93YWtlX3F1ZXVlKG5ldGRldl9nZXRfdHhfcXVldWUobmRldiwgaSkpO1xuK1x0fVxuK31cbitcbisvKiBSZXRpcmluZyBjb21wbGV0aW9ucyBtdXN0IG5vdCB3YWtlIHJlcGxhY2VtZW50IHF1ZXVlcy4gTWFyayB0aGUgbGVhdmluZyBzZXRcbisgKiBiZWZvcmUgdW5tYXJraW5nIHRoZSBpbmNvbWluZyBzZXQuXG4rICovXG4rc3RhdGljIHZvaWQgbWFuYV9xc2V0X3NldF9yZXRpcmluZyhzdHJ1Y3QgbWFuYV9xc2V0ICpxc2V0LFxuK1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG1hbmFfcXNldCAqa2VlcCwgYm9vbCByZXRpcmluZylcbit7XG4rXHR1bnNpZ25lZCBpbnQgcTtcbitcbitcdGZvciAocSA9IDA7IHEgXHUwMDNjIHFzZXQtXHUwMDNlbnVtX3F1ZXVlczsgcSsrKSB7XG4rXHRcdGlmIChxc2V0LVx1MDAzZXR4X3FwIFx1MDAyNlx1MDAyNiBxc2V0LVx1MDAzZXR4X3FwW3FdKVxuK1x0XHRcdFdSSVRFX09OQ0UocXNldC1cdTAwM2V0eF9xcFtxXS1cdTAwM2V0eHEucmV0aXJpbmcsIHJldGlyaW5nKTtcbitcbitcdFx0aWYgKCFxc2V0LVx1MDAzZXJ4cXMgfHwgIXFzZXQtXHUwMDNlcnhxc1txXSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0LyogQ2FycmllZCBSWFFzIHJlbWFpbiB0aGUgc29sZSBwb2xsIHdyaXRlcnMgb2Ygc2hhcmVkIHNsb3RzLiAqL1xuK1x0XHRpZiAocmV0aXJpbmcgXHUwMDI2XHUwMDI2IGtlZXAgXHUwMDI2XHUwMDI2IHEgXHUwMDNjIGtlZXAtXHUwMDNlbnVtX3F1ZXVlcyBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGtlZXAtXHUwMDNlcnhxcyBcdTAwMjZcdTAwMjYga2VlcC1cdTAwM2VyeHFzW3FdID09IHFzZXQtXHUwMDNlcnhxc1txXSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0LyogU3dpdGNoIHRvIGRyYWluX3N0YXRzOyBoYW5kIG9mZiBzaGFyZWQgc2xvdHMgYWZ0ZXIgYSBncmFjZVxuK1x0XHQgKiBwZXJpb2QuXG4rXHRcdCAqL1xuK1x0XHRXUklURV9PTkNFKHFzZXQtXHUwMDNlcnhxc1txXS1cdTAwM2VyZXRpcmluZywgcmV0aXJpbmcpO1xuK1x0fVxuK31cbitcbisvKiBMZWF2ZSBUWCBzdG9wcGVkIGFuZCByZXF1ZXN0IFJYIGRpc2FibGU7IHN0ZWVyaW5nIG1heSBiZSB1bnJlY292ZXJhYmxlLiAqL1xuK3N0YXRpYyB2b2lkIG1hbmFfcHVibGlzaF9naXZlX3VwKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKVxuK3tcbitcdGludCBlcnI7XG4rXG4rXHRhcGMtXHUwMDNlcnNzX3N0YXRlID0gVFJJX1NUQVRFX0ZBTFNFO1xuK1xuK1x0ZXJyID0gbWFuYV9kaXNhYmxlX3Zwb3J0X3J4KGFwYyk7XG4rXHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBtYW5hX2VuX25lZWRfbG9nKGFwYywgZXJyKSlcbitcdFx0bmV0ZGV2X2VycihhcGMtXHUwMDNlbmRldiwgXCJmYWlsZWQgdG8gZGlzYWJsZSB2UG9ydCBSWDogJWRcXG5cIiwgZXJyKTtcbitcbitcdGFwYy1cdTAwM2VjYXJyaWVyX2ZvcmNlZF9vZmYgPSBuZXRpZl9jYXJyaWVyX29rKGFwYy1cdTAwM2VuZGV2KTtcbitcdG5ldGlmX2NhcnJpZXJfb2ZmKGFwYy1cdTAwM2VuZGV2KTtcbitcdGFwYy1cdTAwM2VwdWJsaXNoX2RlYWRfZW5kID0gdHJ1ZTtcbit9XG4rXG4rLyogS2VlcCB0aGUgUlggY291bnQgaGlnaCB1bnRpbCByZXRpcmluZyBSUXMgc3RvcCBkZWxpdmVyaW5nIHRoZWlyIGluZGljZXMuICovXG4rc3RhdGljIGludCBtYW5hX3JhaXNlX3JlYWxfbnVtX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1bnNpZ25lZCBpbnQgY291bnQpXG4re1xuK1x0aWYgKGNvdW50IFx1MDAzYz0gbmRldi1cdTAwM2VyZWFsX251bV9yeF9xdWV1ZXMpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIG5ldGlmX3NldF9yZWFsX251bV9yeF9xdWV1ZXMobmRldiwgY291bnQpO1xuK31cbitcbisvKiBQdWJsaXNoIHVuZGVyIFJUTkwgd2l0aCBUWCBnYXRlZC4gQW4gZXJyb3IgcmVzdG9yZXMgb2xkIHBvaW50ZXJzLCBub3RcbisgKiBuZWNlc3NhcmlseSBzZXJ2aWNlLiBGcmVlIG9ubHkgb3duZWQgcXVldWVzLlxuKyAqL1xuK2ludCBtYW5hX3B1Ymxpc2hfcXNldChzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgc3RydWN0IG1hbmFfcXNldCAqbmV3cSxcbitcdFx0ICAgICAgc3RydWN0IG1hbmFfcXNldCAqb3V0X29sZClcbit7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGFwYy1cdTAwM2VuZGV2O1xuK1x0aW50IGVycjtcbitcbitcdEFTU0VSVF9SVE5MKCk7XG4rXG4rXHQvKiBDbG9zZSB0aGUgWERQIGdhdGUgYmVmb3JlIHN0b3BwaW5nIFRYIHF1ZXVlcy4gUGFpciB3aXRoXG4rXHQgKiBtYW5hX3BvbGxfdHhfY3EoKSdzIHNtcF9ybWIoKSB0byBwcmV2ZW50IG1pZC1zd2FwIHdha2V1cHMuXG4rXHQgKi9cbitcdFdSSVRFX09OQ0UoYXBjLVx1MDAzZXBvcnRfaXNfdXAsIGZhbHNlKTtcbitcbitcdC8qIEVuc3VyZSBwb3J0IHN0YXRlIHVwZGF0ZWQgYmVmb3JlIHR4cSBzdGF0ZSAqL1xuK1x0c21wX3dtYigpO1xuK1xuK1x0bmV0aWZfdHhfZGlzYWJsZShuZGV2KTtcbitcbitcdG1hbmFfcXNldF9zbmFwc2hvdChhcGMsIG91dF9vbGQpO1xuK1xuK1x0LyogTWFyayBiZWZvcmUgdGhlIGdyYWNlIHBlcmlvZCBzbyBvbGQgY29tcGxldGlvbnMgY2Fubm90IHdha2UgdGhlXG4rXHQgKiByZXBsYWNlbWVudCdzIHN0b3BwZWQgcXVldWUuXG4rXHQgKi9cbitcdG1hbmFfcXNldF9zZXRfcmV0aXJpbmcob3V0X29sZCwgbmV3cSwgdHJ1ZSk7XG4rXG4rXHQvKiBEcmFpbiBUWC9YRFAgcmVhZGVycyBwYXN0IHRoZSBnYXRlIGFuZCBwb2xscyBtaXNzaW5nIHJldGlyaW5nLiAqL1xuK1x0c3luY2hyb25pemVfbmV0KCk7XG4rXG4rXHRtYW5hX3FzZXRfc2V0X3JldGlyaW5nKG5ld3EsIE5VTEwsIGZhbHNlKTtcbitcbitcdG1hbmFfcXNldF9pbnN0YWxsKGFwYywgbmV3cSk7XG4rXHRhcGMtXHUwMDNlcnNzX3N0YXRlID0gYXBjLVx1MDAzZW51bV9xdWV1ZXMgXHUwMDNlIDEgPyBUUklfU1RBVEVfVFJVRSA6IFRSSV9TVEFURV9GQUxTRTtcbitcbitcdGVyciA9IG5ldGlmX3NldF9yZWFsX251bV90eF9xdWV1ZXMobmRldiwgYXBjLVx1MDAzZW51bV9xdWV1ZXMpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byByb2xsYmFjaztcbitcbitcdGVyciA9IG1hbmFfcmFpc2VfcmVhbF9udW1fcngobmRldiwgYXBjLVx1MDAzZW51bV9xdWV1ZXMpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byByb2xsYmFjaztcbitcbitcdC8qIEluc3RhbGwgWERQIGJlZm9yZSBzdGVlcmluZyByZWFjaGVzIHRoZSBpbmNvbWluZyBSWFFzLiAqL1xuK1x0bWFuYV9jaG5fc2V0eGRwKGFwYywgbWFuYV94ZHBfZ2V0KGFwYykpO1xuK1xuK1x0ZXJyID0gbWFuYV9jb25maWdfcnNzKGFwYywgVFJJX1NUQVRFX1RSVUUsIHRydWUsIHRydWUpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byByb2xsYmFjaztcbitcbitcdFdSSVRFX09OQ0UobmRldi1cdTAwM2VtdHUsIGFwYy1cdTAwM2Vjb25maWd1cmVkX210dSk7XG4rXG4rXHQvKiBQdWJsaXNoIGZpZWxkcyBiZWZvcmUgb3BlbmluZyB0aGUgZ2F0ZTsgcGFpciB3aXRoIFRYL1hEUCByZWFkXG4rXHQgKiBiYXJyaWVycy4gVGhlIHBvc3QtZ2F0ZSBmdWxsIGJhcnJpZXIgY2Fubm90IHJlcGxhY2UgdGhpcy5cbitcdCAqL1xuK1x0c21wX3dtYigpO1xuK1xuK1x0V1JJVEVfT05DRShhcGMtXHUwMDNlcG9ydF9pc191cCwgdHJ1ZSk7XG4rXHRtYW5hX3N0YXJ0X3R4cXMoYXBjKTtcbitcbitcdC8qIFJlcG9ydCBhIGxvc3QgdXNlciB0YWJsZSBvbmx5IGFmdGVyIHN1Y2Nlc3NmdWwgcHVibGljYXRpb24uICovXG4rXHRpZiAobmV3cS1cdTAwM2VyeGZoX2luZGlyX2xvc3QpXG4rXHRcdGV0aHRvb2xfcnhmaF9pbmRpcl9sb3N0KG5kZXYpO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rcm9sbGJhY2s6XG4rXHRuZXRkZXZfZXJyKG5kZXYsIFwiJXMgZmFpbGVkOiAlZCwgcmVzdG9yaW5nIHByZXZpb3VzIHF1ZXVlIHNldFxcblwiLFxuK1x0XHQgICBfX2Z1bmNfXywgZXJyKTtcbitcbitcdG1hbmFfcXNldF9zZXRfcmV0aXJpbmcobmV3cSwgb3V0X29sZCwgdHJ1ZSk7XG4rXG4rXHQvKiBRdWllc2NlIG5ldyBzaGFyZWQtc2xvdCB3cml0ZXJzIGJlZm9yZSByZXN0b3Jpbmcgb2xkIG9uZXMuICovXG4rXHRzeW5jaHJvbml6ZV9uZXQoKTtcbitcbitcdG1hbmFfcXNldF9zZXRfcmV0aXJpbmcob3V0X29sZCwgTlVMTCwgZmFsc2UpO1xuK1xuK1x0LyogUXVpZXNjZSBvbGQgZHJhaW5fc3RhdHMgd3JpdGVycyBiZWZvcmUgZm9sZGluZy4gKi9cbitcdHN5bmNocm9uaXplX25ldCgpO1xuK1x0bWFuYV9mb2xkX3FzZXRfcnhfc3RhdHMoYXBjLCBvdXRfb2xkKTtcbitcbitcdG1hbmFfcXNldF9pbnN0YWxsKGFwYywgb3V0X29sZCk7XG4rXHRhcGMtXHUwMDNlcnNzX3N0YXRlID0gYXBjLVx1MDAzZW51bV9xdWV1ZXMgXHUwMDNlIDEgPyBUUklfU1RBVEVfVFJVRSA6IFRSSV9TVEFURV9GQUxTRTtcbitcbitcdGlmIChuZXRpZl9zZXRfcmVhbF9udW1fdHhfcXVldWVzKG5kZXYsIGFwYy1cdTAwM2VudW1fcXVldWVzKSB8fFxuK1x0ICAgIG1hbmFfcmFpc2VfcmVhbF9udW1fcngobmRldiwgYXBjLVx1MDAzZW51bV9xdWV1ZXMpKSB7XG4rXHRcdC8qIEluY29uc2lzdGVudCByZXN0b3JlZCBxdWV1ZSBjb3VudHMgcHJvaGliaXQgVFg7IGxlYXZlIHRoZVxuK1x0XHQgKiBwb3J0IHN0b3BwZWQuXG4rXHRcdCAqL1xuK1x0XHRuZXRkZXZfZXJyKG5kZXYsIFwiZmFpbGVkIHRvIHJlc3RvcmUgcXVldWUgY291bnRzLCBjbG9zaW5nIHRoZSBwb3J0XFxuXCIpO1xuK1x0XHRtYW5hX3B1Ymxpc2hfZ2l2ZV91cChhcGMpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0aWYgKG1hbmFfY29uZmlnX3JzcyhhcGMsIFRSSV9TVEFURV9UUlVFLCB0cnVlLCB0cnVlKSkge1xuK1x0XHQvKiBEbyBub3QgcmVvcGVuIFRYIHdpdGggbWlzbWF0Y2hlZCBzdGVlcmluZzsgUlggZGlzYWJsZSBpc1xuK1x0XHQgKiBiZXN0LWVmZm9ydC5cbitcdFx0ICovXG4rXHRcdG5ldGRldl9lcnIobmRldiwgXCJmYWlsZWQgdG8gcmVzdG9yZSBSU1Mgc3RlZXJpbmcsIGNsb3NpbmcgdGhlIHBvcnRcXG5cIik7XG4rXHRcdG1hbmFfcHVibGlzaF9naXZlX3VwKGFwYyk7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHRXUklURV9PTkNFKG5kZXYtXHUwMDNlbXR1LCBhcGMtXHUwMDNlY29uZmlndXJlZF9tdHUpO1xuK1xuK1x0LyogUHVibGlzaCByZXN0b3JlZCBmaWVsZHMgYmVmb3JlIHJlb3BlbmluZyB0aGUgZ2F0ZSwgYXMgb24gc3VjY2Vzcy4gKi9cbitcdHNtcF93bWIoKTtcbitcbitcdFdSSVRFX09OQ0UoYXBjLVx1MDAzZXBvcnRfaXNfdXAsIHRydWUpO1xuK1x0bWFuYV9zdGFydF90eHFzKGFwYyk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbisvKiBDcmVhdGUgbWlzc2luZyBkZWJ1Z2ZzIG5vZGVzIG9uY2UgcmV0aXJpbmcgbmFtZXMgYXJlIGdvbmUuICovXG4rdm9pZCBtYW5hX3FzZXRfZGVidWdmc19wdWJsaXNoKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKVxuK3tcbitcdHVuc2lnbmVkIGludCBpO1xuK1xuK1x0QVNTRVJUX1JUTkwoKTtcbitcbitcdGlmIChJU19FUlJfT1JfTlVMTChhcGMtXHUwMDNlbWFuYV9wb3J0X2RlYnVnZnMpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhcGMtXHUwMDNlbnVtX3F1ZXVlczsgaSsrKSB7XG4rXHRcdGlmIChhcGMtXHUwMDNldHhfcXAgXHUwMDI2XHUwMDI2IGFwYy1cdTAwM2V0eF9xcFtpXSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIElTX0VSUl9PUl9OVUxMKGFwYy1cdTAwM2V0eF9xcFtpXS1cdTAwM2VtYW5hX3R4X2RlYnVnZnMpKVxuK1x0XHRcdG1hbmFfY3JlYXRlX3R4cV9kZWJ1Z2ZzKGFwYywgaSk7XG4rXG4rXHRcdGlmIChhcGMtXHUwMDNlcnhxcyBcdTAwMjZcdTAwMjYgYXBjLVx1MDAzZXJ4cXNbaV0gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBJU19FUlJfT1JfTlVMTChhcGMtXHUwMDNlcnhxc1tpXS1cdTAwM2VtYW5hX3J4X2RlYnVnZnMpKVxuK1x0XHRcdG1hbmFfY3JlYXRlX3J4cV9kZWJ1Z2ZzKGFwYywgaSk7XG4rXHR9XG4rfVxuK1xuKy8qIFVuZGVyIFJUTkwsIGZyZWUgb25seSBxdWV1ZXMgbm8gbG9uZ2VyIHNoYXJlZCB3aXRoIHRoZSBpbnN0YWxsZWQgc2V0LiAqL1xuK3ZvaWQgbWFuYV9mcmVlX3FzZXQoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICpzY3JhdGNoLCBzdHJ1Y3QgbWFuYV9xc2V0ICpxc2V0KVxuK3tcbitcdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjID0gbmV0ZGV2X3ByaXYoc2NyYXRjaC1cdTAwM2VuZGV2KTtcbitcdHN0cnVjdCBicGZfcHJvZyAqcmV0aXJpbmdfcHJvZztcbitcdHVuc2lnbmVkIGludCByZXRpcmluZ19xdWV1ZXM7XG4rXG4rXHRBU1NFUlRfUlROTCgpO1xuK1xuK1x0aWYgKCFxc2V0LVx1MDAzZXJ4cXMgXHUwMDI2XHUwMDI2ICFxc2V0LVx1MDAzZXR4X3FwKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAocXNldC1cdTAwM2V0eF9xcCkge1xuK1x0XHR1bnNpZ25lZCBpbnQgcTtcbitcbitcdFx0Zm9yIChxID0gMDsgcSBcdTAwM2MgcXNldC1cdTAwM2VudW1fcXVldWVzOyBxKyspIHtcbitcdFx0XHRpZiAocXNldC1cdTAwM2V0eF9xcFtxXSlcbitcdFx0XHRcdFdSSVRFX09OQ0UocXNldC1cdTAwM2V0eF9xcFtxXS1cdTAwM2V0eHEucmV0aXJpbmcsIHRydWUpO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHQvKiBLZWVwIHJldGlyZWQgcXVldWVzIGFuZCBhcnJheXMgdGhyb3VnaCB0aGlzIGdyYWNlIHBlcmlvZDsgbG9jYWwgTkFQSVxuK1x0ICogc3luY2hyb25pemF0aW9uIGRvZXMgbm90IGRyYWluIG90aGVyIGRldmljZXMnIFhEUC5cbitcdCAqL1xuK1x0c3luY2hyb25pemVfbmV0KCk7XG4rXG4rXHRtYW5hX3FzZXRfaW5zdGFsbChzY3JhdGNoLCBxc2V0KTtcbitcbitcdC8qIEtlZXAgcmV0aXJpbmcgUlhRcycgWERQIHByb2dyYW1zIGFuZCByZWZlcmVuY2VzIHVudGlsIFJYIHRlYXJkb3duLlxuK1x0ICogUmVhZCB0aGUgcHJvZ3JhbSBmcm9tIHRoZSBxdWV1ZXMsIG5vdCBxdWV1ZS1zZXQgbWV0YWRhdGEuXG4rXHQgKi9cbitcdHJldGlyaW5nX3Byb2cgPSBtYW5hX2Nobl94ZHBfcGVlayhzY3JhdGNoKTtcbitcdHJldGlyaW5nX3F1ZXVlcyA9IHNjcmF0Y2gtXHUwMDNlbnVtX3F1ZXVlcztcbitcbitcdC8qIERyYWluIFRYIGJlZm9yZSB1bm1hcHBpbmcgUlggYnVmZmVycy4gKi9cbitcdGlmIChtYW5hX2RyYWluX3R4cXMoc2NyYXRjaCkpIHtcbitcdFx0LyogRkxSIGFsc28gZGVzdHJveXMgdGhlIEhXQzsgcmVidWlsZGluZyBwb3J0cyBpcyBiZXN0LWVmZm9ydC5cbitcdFx0ICogVGhpcyBwYXRoIGRvZXMgbm90IHJlaW5pdGlhbGl6ZSB0aGUgZGV2aWNlLlxuK1x0XHQgKi9cbitcdFx0c3RydWN0IG1hbmFfY29udGV4dCAqYWMgPSBhcGMtXHUwMDNlYWM7XG4rXHRcdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqc2liO1xuK1x0XHR1bnNpZ25lZCBpbnQgaTtcbitcbitcdFx0bmV0ZGV2X2VycihzY3JhdGNoLVx1MDAzZW5kZXYsXG4rXHRcdFx0ICAgXCJkZXZpY2UgcmVzZXQgd2hpbGUgcmV0aXJpbmcgYSBxdWV1ZSBzZXQsIHNjaGVkdWxpbmcgcG9ydCByZXNldFxcblwiKTtcbitcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYWMtXHUwMDNlbnVtX3BvcnRzOyBpKyspIHtcbitcdFx0XHRpZiAoIWFjLVx1MDAzZXBvcnRzW2ldKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0c2liID0gbmV0ZGV2X3ByaXYoYWMtXHUwMDNlcG9ydHNbaV0pO1xuK1x0XHRcdHF1ZXVlX3dvcmsoYWMtXHUwMDNlcGVyX3BvcnRfcXVldWVfcmVzZXRfd3EsXG4rXHRcdFx0XHQgICBcdTAwMjZzaWItXHUwMDNlcXVldWVfcmVzZXRfd29yayk7XG4rXHRcdH1cbitcdH1cbitcbitcdC8qIEZlbmNlIFJRcyBiZWZvcmUgdW5tYXBwaW5nLCBidXQgdGVhcmRvd24gcHJvY2VlZHMgb24gZXJyb3JzLiAqL1xuK1x0bWFuYV9mZW5jZV9ycXMoc2NyYXRjaCk7XG4rXG4rXHRtYW5hX2Rlc3Ryb3lfcnhxcyhzY3JhdGNoKTtcbitcbitcdG1hbmFfY2huX3hkcF9yZWxlYXNlKHJldGlyaW5nX3Byb2csIHJldGlyaW5nX3F1ZXVlcyk7XG4rXG4rXHRtYW5hX2Rlc3Ryb3lfdHhxKHNjcmF0Y2gpO1xuK1x0bWFuYV9jbGVhbnVwX2luZGlyX3RhYmxlKHNjcmF0Y2gpO1xuK1x0a2ZyZWUoc2NyYXRjaC1cdTAwM2VyeHFzKTtcbitcdHNjcmF0Y2gtXHUwMDNlcnhxcyA9IE5VTEw7XG4rXG4rXHRtZW1zZXQocXNldCwgMCwgc2l6ZW9mKCpxc2V0KSk7XG4rXG4rXHQvKiBSZXRpcmluZyBSUXMgY2FuIG5vIGxvbmdlciBkZWxpdmVyIGluZGljZXMgYmV5b25kIHRoZSBsaXZlIHF1ZXVlXG4rXHQgKiBjb3VudC5cbitcdCAqL1xuK1x0bmV0aWZfc2V0X3JlYWxfbnVtX3J4X3F1ZXVlcyhhcGMtXHUwMDNlbmRldiwgYXBjLVx1MDAzZW51bV9xdWV1ZXMpO1xuK1xuK1x0bWFuYV9zaHJpbmtfZXFzKGFwYywgYXBjLVx1MDAzZW51bV9xdWV1ZXMpO1xuK1xuK1x0bWFuYV9xc2V0X2RlYnVnZnNfcHVibGlzaChhcGMpO1xuK31cbitcbiBpbnQgbWFuYV9kZXRhY2goc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGJvb2wgZnJvbV9jbG9zZSlcbiB7XG4gXHRzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyA9IG5ldGRldl9wcml2KG5kZXYpO1xuQEAgLTM3ODYsMTAgKzQ4MDYsOCBAQCBpbnQgbWFuYV9kZXRhY2goc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGJvb2wgZnJvbV9jbG9zZSlcbiBcbiBcdGlmIChhcGMtXHUwMDNlcG9ydF9zdF9zYXZlKSB7XG4gXHRcdGVyciA9IG1hbmFfZGVhbGxvY19xdWV1ZXMobmRldik7XG4tXHRcdGlmIChlcnIpIHtcbitcdFx0aWYgKGVycilcbiBcdFx0XHRuZXRkZXZfZXJyKG5kZXYsIFwiJXMgZmFpbGVkIHRvIGRlYWxsb2NhdGUgcXVldWVzOiAlZFxcblwiLCBfX2Z1bmNfXywgZXJyKTtcbi1cdFx0XHRyZXR1cm4gZXJyO1xuLVx0XHR9XG4gXHR9XG4gXG4gXHRpZiAoIWZyb21fY2xvc2UpIHtcbkBAIC0zODI2LDYgKzQ4NDQsNyBAQCBzdGF0aWMgaW50IG1hbmFfcHJvYmVfcG9ydChzdHJ1Y3QgbWFuYV9jb250ZXh0ICphYywgaW50IHBvcnRfaWR4LFxuIFx0YXBjLVx1MDAzZXBvcnRfaGFuZGxlID0gSU5WQUxJRF9NQU5BX0hBTkRMRTtcbiBcdGFwYy1cdTAwM2VwZl9maWx0ZXJfaGFuZGxlID0gSU5WQUxJRF9NQU5BX0hBTkRMRTtcbiBcdGFwYy1cdTAwM2Vwb3J0X2lkeCA9IHBvcnRfaWR4O1xuK1x0YXBjLVx1MDAzZWNvbmZpZ3VyZWRfbXR1ID0gbmRldi1cdTAwM2VtdHU7XG4gXHRhcGMtXHUwMDNlbGlua19jZmdfZXJyb3IgPSAxO1xuIFx0YXBjLVx1MDAzZWNxZV9jb2FsZXNjaW5nX2VuYWJsZSA9IDA7XG4gXHRhcGMtXHUwMDNlY3FlOF9jb2FsZXNjaW5nX2VuYWJsZSA9IDA7XG5AQCAtMzg0MCw2ICs0ODU5LDEwIEBAIHN0YXRpYyBpbnQgbWFuYV9wcm9iZV9wb3J0KHN0cnVjdCBtYW5hX2NvbnRleHQgKmFjLCBpbnQgcG9ydF9pZHgsXG4gXHRcdGFwYy1cdTAwM2V0eF9kaW1fZW5hYmxlZCA9IE1BTkFfQURBUFRJVkVfVFhfREVGO1xuIFx0fVxuIFxuK1x0ZXJyID0gbWFuYV9hbGxvY19xdWV1ZV9zdGF0cyhhcGMpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBmcmVlX25ldDtcbitcbiBcdG11dGV4X2luaXQoXHUwMDI2YXBjLVx1MDAzZXZwb3J0X211dGV4KTtcbiBcdGFwYy1cdTAwM2V2cG9ydF91c2VfY291bnQgPSAwO1xuIFxuQEAgLTM4NjIsNyArNDg4NSw3IEBAIHN0YXRpYyBpbnQgbWFuYV9wcm9iZV9wb3J0KHN0cnVjdCBtYW5hX2NvbnRleHQgKmFjLCBpbnQgcG9ydF9pZHgsXG4gXG4gXHRlcnIgPSBtYW5hX2luaXRfcG9ydChuZGV2KTtcbiBcdGlmIChlcnIpXG4tXHRcdGdvdG8gZnJlZV9uZXQ7XG4rXHRcdGdvdG8gZnJlZV9zdGF0cztcbiBcbiBcdGVyciA9IG1hbmFfcnNzX3RhYmxlX2FsbG9jKGFwYyk7XG4gXHRpZiAoZXJyKVxuQEAgLTM4OTksNiArNDkyMiw4IEBAIHN0YXRpYyBpbnQgbWFuYV9wcm9iZV9wb3J0KHN0cnVjdCBtYW5hX2NvbnRleHQgKmFjLCBpbnQgcG9ydF9pZHgsXG4gXHRtYW5hX2NsZWFudXBfaW5kaXJfdGFibGUoYXBjKTtcbiByZXNldF9hcGM6XG4gXHRtYW5hX2NsZWFudXBfcG9ydF9jb250ZXh0KGFwYyk7XG4rZnJlZV9zdGF0czpcbitcdG1hbmFfZnJlZV9xdWV1ZV9zdGF0cyhhcGMpO1xuIGZyZWVfbmV0OlxuIFx0Km5kZXZfc3RvcmFnZSA9IE5VTEw7XG4gXHRuZXRkZXZfZXJyKG5kZXYsIFwiRmFpbGVkIHRvIHByb2JlIHZQb3J0ICVkOiAlZFxcblwiLCBwb3J0X2lkeCwgZXJyKTtcbkBAIC00MjM5LDYgKzUyNjQsMTEgQEAgdm9pZCBtYW5hX3JlbW92ZShzdHJ1Y3QgZ2RtYV9kZXYgKmdkLCBib29sIHN1c3BlbmRpbmcpXG4gXG4gXHRcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlKG5kZXYpO1xuIFx0XHRtYW5hX2NsZWFudXBfaW5kaXJfdGFibGUoYXBjKTtcbitcdFx0bWFuYV9mcmVlX3F1ZXVlX3N0YXRzKGFwYyk7XG4rXG4rXHRcdC8qIFJlbW92ZSB0aGUgcG9ydCBmcm9tIHJlc2V0IHdhbGtzIGJlZm9yZSBmcmVlaW5nIGl0cyBuZXRkZXYuXG4rXHRcdCAqL1xuK1x0XHRhYy1cdTAwM2Vwb3J0c1tpXSA9IE5VTEw7XG4gXG4gXHRcdHJ0bmxfdW5sb2NrKCk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2V0aHRvb2wuY1xuaW5kZXggZWNlN2ZmOWNjNDA5YS4uNjU4NmE5ZDJhMTM0MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZXRodG9vbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2V0aHRvb2wuY1xuQEAgLTI0Miw2ICsyNDIsMTIgQEAgc3RhdGljIHZvaWQgbWFuYV9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcdHU2NCB4ZHBfdHg7XG4gXHR1NjQgcGt0X2xlbjBfZXJyO1xuIFx0dTY0IGNvYWxlc2NlZF9jcWVbTUFOQV9DUUVfQ09BTF9QS1RTXzggLSAxXTtcbitcdHU2NCByZXRfY29hbGVzY2VkX2NxZVtNQU5BX0NRRV9DT0FMX1BLVFNfOCAtIDFdO1xuK1x0dTY0IHJldF9wYWNrZXRzLCByZXRfYnl0ZXM7XG4rXHR1NjQgcmV0X3hkcF9yZWRpcmVjdDtcbitcdHU2NCByZXRfcGt0X2xlbjBfZXJyO1xuK1x0dTY0IHJldF94ZHBfZHJvcDtcbitcdHU2NCByZXRfeGRwX3R4O1xuIFx0dTY0IHRzb19wYWNrZXRzO1xuIFx0dTY0IHRzb19ieXRlcztcbiBcdHU2NCB0c29faW5uZXJfcGFja2V0cztcbkBAIC0yNTIsMTQgKzI1OCwxMSBAQCBzdGF0aWMgdm9pZCBtYW5hX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFx0dTY0IG1hbmFfbWFwX2VycjtcbiBcdGludCBxLCBpID0gMCwgajtcbiBcbi1cdGlmICghYXBjLVx1MDAzZXBvcnRfaXNfdXApXG4tXHRcdHJldHVybjtcbi1cbi1cdC8qIFdlIGNhbGwgdGhpcyBtYW5hIGZ1bmN0aW9uIHRvIGdldCB0aGUgcGh5IHN0YXRzIGZyb20gR0RNQSBhbmQgaW5jbHVkZXNcbi1cdCAqIGFnZ3JlZ2F0ZSB0eC9yeCBkcm9wIGNvdW50ZXJzLCBQZXItVEMoVHJhZmZpYyBDaGFubmVsKSB0eC9yeCBhbmQgcGF1c2Vcbi1cdCAqIGNvdW50ZXJzLlxuK1x0LyogQ291bnRlcnMgb3V0bGl2ZSB0aGUgcXVldWVzLCBidXQgc3VzcGVuZCBjYW4gZGVzdHJveSB0aGUgSFcgY2hhbm5lbFxuK1x0ICogd2hpbGUgdGhlIG5ldGRldiByZW1haW5zIHJlZ2lzdGVyZWQuIEdhdGUgb25seSB0aGUgUEhZIHF1ZXJ5LlxuIFx0ICovXG4tXHRtYW5hX3F1ZXJ5X3BoeV9zdGF0cyhhcGMpO1xuK1x0aWYgKGFwYy1cdTAwM2Vwb3J0X2lzX3VwKVxuK1x0XHRtYW5hX3F1ZXJ5X3BoeV9zdGF0cyhhcGMpO1xuIFxuIFx0Zm9yIChxID0gMDsgcSBcdTAwM2MgQVJSQVlfU0laRShtYW5hX2V0aF9zdGF0cyk7IHErKylcbiBcdFx0ZGF0YVtpKytdID0gKih1NjQgKikoZXRoX3N0YXRzICsgbWFuYV9ldGhfc3RhdHNbcV0ub2Zmc2V0KTtcbkBAIC0yNzEsNyArMjc0LDcgQEAgc3RhdGljIHZvaWQgbWFuYV9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcdFx0ZGF0YVtpKytdID0gKih1NjQgKikocGh5X3N0YXRzICsgbWFuYV9waHlfc3RhdHNbcV0ub2Zmc2V0KTtcbiBcbiBcdGZvciAocSA9IDA7IHEgXHUwMDNjIG51bV9xdWV1ZXM7IHErKykge1xuLVx0XHRyeF9zdGF0cyA9IFx1MDAyNmFwYy1cdTAwM2VyeHFzW3FdLVx1MDAzZXN0YXRzO1xuK1x0XHRyeF9zdGF0cyA9IFx1MDAyNmFwYy1cdTAwM2VyeHFfc3RhdHNbcV07XG4gXG4gXHRcdGRvIHtcbiBcdFx0XHRzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbihcdTAwMjZyeF9zdGF0cy1cdTAwM2VzeW5jcCk7XG5AQCAtMjg1LDYgKzI4OCwzMyBAQCBzdGF0aWMgdm9pZCBtYW5hX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFx0XHRcdFx0Y29hbGVzY2VkX2NxZVtqXSA9IHJ4X3N0YXRzLVx1MDAzZWNvYWxlc2NlZF9jcWVbal07XG4gXHRcdH0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeShcdTAwMjZyeF9zdGF0cy1cdTAwM2VzeW5jcCwgc3RhcnQpKTtcbiBcbitcdFx0LyogU25hcHNob3Qgc2VwYXJhdGVseSBzbyBhIHJldHJ5IGNhbm5vdCBhZGQgcmV0aXJlZCBjb3VudGVyc1xuK1x0XHQgKiB0d2ljZS5cbitcdFx0ICovXG4rXHRcdHJ4X3N0YXRzID0gXHUwMDI2YXBjLVx1MDAzZXJ4cV9zdGF0c19yZXRbcV07XG4rXG4rXHRcdGRvIHtcbitcdFx0XHRzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbihcdTAwMjZyeF9zdGF0cy1cdTAwM2VzeW5jcCk7XG4rXHRcdFx0cmV0X3BhY2tldHMgPSByeF9zdGF0cy1cdTAwM2VwYWNrZXRzO1xuK1x0XHRcdHJldF9ieXRlcyA9IHJ4X3N0YXRzLVx1MDAzZWJ5dGVzO1xuK1x0XHRcdHJldF94ZHBfZHJvcCA9IHJ4X3N0YXRzLVx1MDAzZXhkcF9kcm9wO1xuK1x0XHRcdHJldF94ZHBfdHggPSByeF9zdGF0cy1cdTAwM2V4ZHBfdHg7XG4rXHRcdFx0cmV0X3hkcF9yZWRpcmVjdCA9IHJ4X3N0YXRzLVx1MDAzZXhkcF9yZWRpcmVjdDtcbitcdFx0XHRyZXRfcGt0X2xlbjBfZXJyID0gcnhfc3RhdHMtXHUwMDNlcGt0X2xlbjBfZXJyO1xuK1x0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIE1BTkFfQ1FFX0NPQUxfUEtUU184IC0gMTsgaisrKVxuK1x0XHRcdFx0cmV0X2NvYWxlc2NlZF9jcWVbal0gPVxuK1x0XHRcdFx0XHRyeF9zdGF0cy1cdTAwM2Vjb2FsZXNjZWRfY3FlW2pdO1xuK1x0XHR9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoXHUwMDI2cnhfc3RhdHMtXHUwMDNlc3luY3AsIHN0YXJ0KSk7XG4rXG4rXHRcdHBhY2tldHMgKz0gcmV0X3BhY2tldHM7XG4rXHRcdGJ5dGVzICs9IHJldF9ieXRlcztcbitcdFx0eGRwX2Ryb3AgKz0gcmV0X3hkcF9kcm9wO1xuK1x0XHR4ZHBfdHggKz0gcmV0X3hkcF90eDtcbitcdFx0eGRwX3JlZGlyZWN0ICs9IHJldF94ZHBfcmVkaXJlY3Q7XG4rXHRcdHBrdF9sZW4wX2VyciArPSByZXRfcGt0X2xlbjBfZXJyO1xuK1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBNQU5BX0NRRV9DT0FMX1BLVFNfOCAtIDE7IGorKylcbitcdFx0XHRjb2FsZXNjZWRfY3FlW2pdICs9IHJldF9jb2FsZXNjZWRfY3FlW2pdO1xuK1xuIFx0XHRkYXRhW2krK10gPSBwYWNrZXRzO1xuIFx0XHRkYXRhW2krK10gPSBieXRlcztcbiBcdFx0ZGF0YVtpKytdID0geGRwX2Ryb3A7XG5AQCAtMjk2LDcgKzMyNiw3IEBAIHN0YXRpYyB2b2lkIG1hbmFfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHR9XG4gXG4gXHRmb3IgKHEgPSAwOyBxIFx1MDAzYyBudW1fcXVldWVzOyBxKyspIHtcbi1cdFx0dHhfc3RhdHMgPSBcdTAwMjZhcGMtXHUwMDNldHhfcXBbcV0tXHUwMDNldHhxLnN0YXRzO1xuK1x0XHR0eF9zdGF0cyA9IFx1MDAyNmFwYy1cdTAwM2V0eHFfc3RhdHNbcV07XG4gXG4gXHRcdGRvIHtcbiBcdFx0XHRzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbihcdTAwMjZ0eF9zdGF0cy1cdTAwM2VzeW5jcCk7XG5AQCAtNjQ4LDUyICs2NzgsMTI2IEBAIHN0YXRpYyBpbnQgbWFuYV9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tLyogbWFuYV9zZXRfY2hhbm5lbHMgLSBjaGFuZ2UgdGhlIG51bWJlciBvZiBxdWV1ZXMgb24gYSBwb3J0XG4tICpcbi0gKiBSZXR1cm5zIC1FQlVTWSBpZiBSRE1BIGhvbGRzIHRoZSB2cG9ydCB3aXRoIEVRcyBzaXplZCB0byB0aGVcbi0gKiBjdXJyZW50IG51bV9xdWV1ZXMuXG4tICovXG4gc3RhdGljIGludCBtYW5hX3NldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcdFx0XHQgICAgIHN0cnVjdCBldGh0b29sX2NoYW5uZWxzICpjaGFubmVscylcbiB7XG4gXHRzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFx0dW5zaWduZWQgaW50IG5ld19jb3VudCA9IGNoYW5uZWxzLVx1MDAzZWNvbWJpbmVkX2NvdW50O1xuLVx0dW5zaWduZWQgaW50IG9sZF9jb3VudCA9IGFwYy1cdTAwM2VudW1fcXVldWVzO1xuK1x0c3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICpzY3JhdGNoO1xuK1x0c3RydWN0IG1hbmFfcXNldCBuZXdxLCBvbGRxLCBmcmVzaHE7XG4gXHRpbnQgZXJyO1xuIFxuLVx0LyogU2V0IGNoYW5uZWxfY2hhbmdpbmcgdG8gYmxvY2sgUkRNQSBmcm9tIGdyYWJiaW5nIHRoZSB2cG9ydFxuLVx0ICogZHVyaW5nIHRoZSBkZXRhY2gvYXR0YWNoIHdpbmRvdy4gbWFuYV9jZmdfdnBvcnQoKSBjaGVja3Ncbi1cdCAqIHRoaXMgZmxhZyB1bmRlciB2cG9ydF9tdXRleCBhbmQgcmV0dXJucyAtRUJVU1kgaWYgc2V0LlxuK1x0aWYgKG5ld19jb3VudCBcdTAwM2MgMSB8fCBuZXdfY291bnQgXHUwMDNlIGFwYy1cdTAwM2VtYXhfcXVldWVzKSB7XG4rXHRcdG5ldGRldl9lcnIobmRldiwgXCJJbnZhbGlkIGNvbWJpbmVkX2NvdW50ICV1IChtYXggJXUpXFxuXCIsXG4rXHRcdFx0ICAgbmV3X2NvdW50LCBhcGMtXHUwMDNlbWF4X3F1ZXVlcyk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKG5ld19jb3VudCA9PSBhcGMtXHUwMDNlbnVtX3F1ZXVlcylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBSZXNpemUgcnhxcyB3aGlsZSBkb3duOiBtYW5hX29wZW4oKSBkb2VzIG5vdCByZWNyZWF0ZSB0aGUgcG9ydFxuK1x0ICogY29udGV4dC4gUkRNQSBtdXN0IG5vdCBvd24gdGhlIHZwb3J0IHdoaWxlIG51bV9xdWV1ZXMgY2hhbmdlcy5cbiBcdCAqL1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZhcGMtXHUwMDNldnBvcnRfbXV0ZXgpO1xuLVx0aWYgKCFhcGMtXHUwMDNlcG9ydF9pc191cCBcdTAwMjZcdTAwMjYgYXBjLVx1MDAzZXZwb3J0X3VzZV9jb3VudCkge1xuK1x0aWYgKCFhcGMtXHUwMDNlcG9ydF9pc191cCkge1xuK1x0XHRzdHJ1Y3QgbWFuYV9yeHEgKipyeHFzO1xuK1xuK1x0XHRpZiAoYXBjLVx1MDAzZXZwb3J0X3VzZV9jb3VudCkge1xuK1x0XHRcdG11dGV4X3VubG9jayhcdTAwMjZhcGMtXHUwMDNldnBvcnRfbXV0ZXgpO1xuK1x0XHRcdHJldHVybiAtRUJVU1k7XG4rXHRcdH1cbitcbitcdFx0cnhxcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgbWFuYV9yeHEgKiwgbmV3X2NvdW50KTtcbitcdFx0aWYgKCFyeHFzKSB7XG4rXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmFwYy1cdTAwM2V2cG9ydF9tdXRleCk7XG4rXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRcdH1cbitcbitcdFx0a2ZyZWUoYXBjLVx1MDAzZXJ4cXMpO1xuK1x0XHRhcGMtXHUwMDNlcnhxcyA9IHJ4cXM7XG4rXHRcdGFwYy1cdTAwM2VudW1fcXVldWVzID0gbmV3X2NvdW50O1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2YXBjLVx1MDAzZXZwb3J0X211dGV4KTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHQvKiBUaGUgRXRoZXJuZXQgcG9ydCBhbHJlYWR5IGhvbGRzIGEgdnBvcnQgcmVmZXJlbmNlOyBleGNsdWRlIFJETUFcbitcdCAqIHRocm91Z2ggZmFpbHVyZSBjbGVhbnVwLlxuK1x0ICovXG4rXHRpZiAoYXBjLVx1MDAzZWNoYW5uZWxfY2hhbmdpbmcpIHtcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmFwYy1cdTAwM2V2cG9ydF9tdXRleCk7XG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXHR9XG4gXHRhcGMtXHUwMDNlY2hhbm5lbF9jaGFuZ2luZyA9IHRydWU7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2YXBjLVx1MDAzZXZwb3J0X211dGV4KTtcbiBcbi1cdGVyciA9IG1hbmFfcHJlX2FsbG9jX3J4YnVmcyhhcGMsIG5kZXYtXHUwMDNlbXR1LCBuZXdfY291bnQpO1xuLVx0aWYgKGVycikge1xuLVx0XHRuZXRkZXZfZXJyKG5kZXYsIFwiSW5zdWZmaWNpZW50IG1lbW9yeSBmb3IgbmV3IGFsbG9jYXRpb25zXCIpO1xuK1x0c2NyYXRjaCA9IG1hbmFfcXNldF9zY3JhdGNoX2FsbG9jKGFwYyk7XG4rXHRpZiAoIXNjcmF0Y2gpIHtcbitcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0Z290byBjbGVhcl9mbGFnO1xuIFx0fVxuIFxuLVx0ZXJyID0gbWFuYV9kZXRhY2gobmRldiwgZmFsc2UpO1xuLVx0aWYgKGVycikge1xuLVx0XHRuZXRkZXZfZXJyKG5kZXYsIFwibWFuYV9kZXRhY2ggZmFpbGVkOiAlZFxcblwiLCBlcnIpO1xuLVx0XHRnb3RvIG91dDtcbitcdGlmIChuZXdfY291bnQgXHUwMDNjIGFwYy1cdTAwM2VudW1fcXVldWVzKSB7XG4rXHRcdHN0cnVjdCBtYW5hX3FzZXQgdGFpbHE7XG4rXG4rXHRcdGVyciA9IG1hbmFfc3BsaXRfcXNldChhcGMsIHNjcmF0Y2gsIG5ld19jb3VudCwgXHUwMDI2bmV3cSwgXHUwMDI2dGFpbHEpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gZnJlZV9zY3JhdGNoO1xuK1xuK1x0XHRlcnIgPSBtYW5hX3B1Ymxpc2hfcXNldChhcGMsIFx1MDAyNm5ld3EsIFx1MDAyNm9sZHEpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0LyogRGlzY2FyZCBjb250YWluZXJzIG9ubHk7IHRoZWlyIHF1ZXVlcyBzdGlsbCBiZWxvbmcgdG9cbitcdFx0XHQgKiB0aGUgb2xkIHNldC5cbitcdFx0XHQgKi9cbitcdFx0XHRtYW5hX2Rpc2NhcmRfc3BsaXQoXHUwMDI2bmV3cSwgXHUwMDI2dGFpbHEpO1xuK1x0XHRcdGdvdG8gZnJlZV9zY3JhdGNoO1xuK1x0XHR9XG4rXG4rXHRcdC8qIFdhaXQgZm9yIG5kb19zZWxlY3RfcXVldWUoKSByZWFkZXJzIG9mIG9sZHEuaW5kaXJfdGFibGUuIEZyZWVcbitcdFx0ICogb25seSBjb250YWluZXJzOyB0aGUgcXVldWVzIGJlbG9uZyB0byB0aGUga2VwdCBzZXQgb3IgdGFpbC5cbitcdFx0ICovXG4rXHRcdHN5bmNocm9uaXplX25ldCgpO1xuK1xuK1x0XHRrZnJlZShvbGRxLnR4X3FwKTtcbitcdFx0a2ZyZWUob2xkcS5yeHFzKTtcbitcdFx0a2ZyZWUob2xkcS5pbmRpcl90YWJsZSk7XG4rXHRcdGtmcmVlKG9sZHEucnhvYmpfdGFibGUpO1xuK1xuK1x0XHRtYW5hX2ZyZWVfcXNldChzY3JhdGNoLCBcdTAwMjZ0YWlscSk7XG4rXHRcdGdvdG8gZnJlZV9zY3JhdGNoO1xuIFx0fVxuIFxuLVx0YXBjLVx1MDAzZW51bV9xdWV1ZXMgPSBuZXdfY291bnQ7XG4tXHRlcnIgPSBtYW5hX2F0dGFjaChuZGV2KTtcbitcdGVyciA9IG1hbmFfZ3Jvd19xc2V0KGFwYywgc2NyYXRjaCwgbmV3X2NvdW50LCBcdTAwMjZuZXdxLCBcdTAwMjZmcmVzaHEpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBmcmVlX3NjcmF0Y2g7XG4rXG4rXHRlcnIgPSBtYW5hX3B1Ymxpc2hfcXNldChhcGMsIFx1MDAyNm5ld3EsIFx1MDAyNm9sZHEpO1xuIFx0aWYgKGVycikge1xuLVx0XHRhcGMtXHUwMDNlbnVtX3F1ZXVlcyA9IG9sZF9jb3VudDtcbi1cdFx0bmV0ZGV2X2VycihuZGV2LCBcIm1hbmFfYXR0YWNoIGZhaWxlZDogJWRcXG5cIiwgZXJyKTtcbitcdFx0LyogRnJlZSBvbmx5IHRoZSBuZXcgcXVldWVzLCB0aGVuIGRpc2NhcmQgdGhlIG1lcmdlZCBjb250YWluZXJzLlxuK1x0XHQgKi9cbitcdFx0bWFuYV9mcmVlX3FzZXQoc2NyYXRjaCwgXHUwMDI2ZnJlc2hxKTtcbitcdFx0bWFuYV9kaXNjYXJkX2dyb3coXHUwMDI2bmV3cSk7XG4rXHRcdGdvdG8gZnJlZV9zY3JhdGNoO1xuIFx0fVxuIFxuLW91dDpcbi1cdG1hbmFfcHJlX2RlYWxsb2NfcnhidWZzKGFwYyk7XG4rXHQvKiBXYWl0IGZvciBuZG9fc2VsZWN0X3F1ZXVlKCkgcmVhZGVycyBvZiBvbGRxLmluZGlyX3RhYmxlLiBBbGwgcXVldWVzXG4rXHQgKiBhcmUgbm93IGxpdmUgaW4gbmV3cTsgZnJlZSBvbmx5IHRoZSBvbGQgYW5kIGZyZXNoIGNvbnRhaW5lcnMuXG4rXHQgKi9cbitcdHN5bmNocm9uaXplX25ldCgpO1xuK1xuK1x0a2ZyZWUob2xkcS50eF9xcCk7XG4rXHRrZnJlZShvbGRxLnJ4cXMpO1xuK1x0a2ZyZWUob2xkcS5pbmRpcl90YWJsZSk7XG4rXHRrZnJlZShvbGRxLnJ4b2JqX3RhYmxlKTtcbitcdGtmcmVlKGZyZXNocS50eF9xcCk7XG4rXHRrZnJlZShmcmVzaHEucnhxcyk7XG4rXG4rXHQvKiBObyByZXRpcmVtZW50IHJ1bnMgdG8gcHVibGlzaCB0aGUgbmV3IHF1ZXVlcycgZGVidWdmcyBub2Rlcy4gKi9cbitcdG1hbmFfcXNldF9kZWJ1Z2ZzX3B1Ymxpc2goYXBjKTtcbitcbitmcmVlX3NjcmF0Y2g6XG4rXHRtYW5hX3B1Ymxpc2hfY2xvc2VfaWZfbmVlZGVkKGFwYyk7XG4rXHRtYW5hX3FzZXRfc2NyYXRjaF9mcmVlKHNjcmF0Y2gpO1xuIGNsZWFyX2ZsYWc6XG4gXHRtdXRleF9sb2NrKFx1MDAyNmFwYy1cdTAwM2V2cG9ydF9tdXRleCk7XG4gXHRhcGMtXHUwMDNlY2hhbm5lbF9jaGFuZ2luZyA9IGZhbHNlO1xuQEAgLTcyMCwxMyArODI0LDExIEBAIHN0YXRpYyBpbnQgbWFuYV9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyA9IG5ldGRldl9wcml2KG5kZXYpO1xuK1x0c3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICpzY3JhdGNoO1xuK1x0c3RydWN0IG1hbmFfcXNldCBuZXdxLCBvbGRxO1xuIFx0dTMyIG5ld190eCwgbmV3X3J4O1xuLVx0dTMyIG9sZF90eCwgb2xkX3J4O1xuIFx0aW50IGVycjtcbiBcbi1cdG9sZF90eCA9IGFwYy1cdTAwM2V0eF9xdWV1ZV9zaXplO1xuLVx0b2xkX3J4ID0gYXBjLVx1MDAzZXJ4X3F1ZXVlX3NpemU7XG4tXG4gXHRpZiAocmluZy1cdTAwM2V0eF9wZW5kaW5nIFx1MDAzYyBNSU5fVFhfQlVGRkVSU19QRVJfUVVFVUUpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjaywgXCJ0eDolZCBsZXNzIHRoYW4gdGhlIG1pbjolZFwiLCByaW5nLVx1MDAzZXR4X3BlbmRpbmcsXG4gXHRcdFx0XHQgICBNSU5fVFhfQlVGRkVSU19QRVJfUVVFVUUpO1xuQEAgLTc0NCwzMiArODQ2LDU2IEBAIHN0YXRpYyBpbnQgbWFuYV9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFx0bmV0ZGV2X2luZm8obmRldiwgXCJVc2luZyBuZWFyZXN0IHBvd2VyIG9mIDIgdmFsdWVzIGZvciBUeHE6JWQgUnhxOiVkXFxuXCIsXG4gXHRcdCAgICBuZXdfdHgsIG5ld19yeCk7XG4gXG4tXHQvKiBwcmUtYWxsb2NhdGluZyBuZXcgYnVmZmVycyB0byBwcmV2ZW50IGZhaWx1cmVzIGluIG1hbmFfYXR0YWNoKCkgbGF0ZXIgKi9cbi1cdGFwYy1cdTAwM2VyeF9xdWV1ZV9zaXplID0gbmV3X3J4O1xuLVx0ZXJyID0gbWFuYV9wcmVfYWxsb2NfcnhidWZzKGFwYywgbmRldi1cdTAwM2VtdHUsIGFwYy1cdTAwM2VudW1fcXVldWVzKTtcbi1cdGFwYy1cdTAwM2VyeF9xdWV1ZV9zaXplID0gb2xkX3J4O1xuLVx0aWYgKGVycikge1xuLVx0XHRuZXRkZXZfZXJyKG5kZXYsIFwiSW5zdWZmaWNpZW50IG1lbW9yeSBmb3IgbmV3IGFsbG9jYXRpb25zXFxuXCIpO1xuLVx0XHRyZXR1cm4gZXJyO1xuK1x0aWYgKG5ld19yeCA9PSBhcGMtXHUwMDNlcnhfcXVldWVfc2l6ZSBcdTAwMjZcdTAwMjYgbmV3X3R4ID09IGFwYy1cdTAwM2V0eF9xdWV1ZV9zaXplKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmICghYXBjLVx1MDAzZXBvcnRfaXNfdXApIHtcbitcdFx0YXBjLVx1MDAzZXJ4X3F1ZXVlX3NpemUgPSBuZXdfcng7XG4rXHRcdGFwYy1cdTAwM2V0eF9xdWV1ZV9zaXplID0gbmV3X3R4O1xuK1x0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbi1cdGVyciA9IG1hbmFfZGV0YWNoKG5kZXYsIGZhbHNlKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0bmV0ZGV2X2VycihuZGV2LCBcIm1hbmFfZGV0YWNoIGZhaWxlZDogJWRcXG5cIiwgZXJyKTtcbi1cdFx0Z290byBvdXQ7XG4rXHQvKiBFeGNsdWRlIFJETUEgdGhyb3VnaCBmYWlsdXJlIGNsZWFudXAsIHdoaWNoIG1heSByZWxlYXNlIHRoZSB2cG9ydC4gKi9cbitcdG11dGV4X2xvY2soXHUwMDI2YXBjLVx1MDAzZXZwb3J0X211dGV4KTtcbitcdGlmIChhcGMtXHUwMDNlY2hhbm5lbF9jaGFuZ2luZykge1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2YXBjLVx1MDAzZXZwb3J0X211dGV4KTtcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcdH1cbitcdGFwYy1cdTAwM2VjaGFubmVsX2NoYW5naW5nID0gdHJ1ZTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZhcGMtXHUwMDNldnBvcnRfbXV0ZXgpO1xuK1xuK1x0c2NyYXRjaCA9IG1hbmFfcXNldF9zY3JhdGNoX2FsbG9jKGFwYyk7XG4rXHRpZiAoIXNjcmF0Y2gpIHtcbitcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0Z290byBjbGVhcl9mbGFnO1xuIFx0fVxuIFxuLVx0YXBjLVx1MDAzZXR4X3F1ZXVlX3NpemUgPSBuZXdfdHg7XG4tXHRhcGMtXHUwMDNlcnhfcXVldWVfc2l6ZSA9IG5ld19yeDtcbitcdGVyciA9IG1hbmFfYWxsb2NfcXNldChhcGMsIHNjcmF0Y2gsIG5ld19yeCwgbmV3X3R4LFxuK1x0XHRcdCAgICAgIGFwYy1cdTAwM2Vwcml2X2ZsYWdzLCBhcGMtXHUwMDNlY29uZmlndXJlZF9tdHUsXG4rXHRcdFx0ICAgICAgYXBjLVx1MDAzZWJwZl9wcm9nLCBcdTAwMjZuZXdxKTtcbitcdGlmIChlcnIpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjaywgXCJmYWlsZWQgdG8gY2hhbmdlIHJpbmcgcGFyYW1zOiAlZFwiLFxuK1x0XHRcdFx0ICAgZXJyKTtcbitcdFx0Z290byBmcmVlX3NjcmF0Y2g7XG4rXHR9XG4gXG4tXHRlcnIgPSBtYW5hX2F0dGFjaChuZGV2KTtcbitcdGVyciA9IG1hbmFfcHVibGlzaF9xc2V0KGFwYywgXHUwMDI2bmV3cSwgXHUwMDI2b2xkcSk7XG4gXHRpZiAoZXJyKSB7XG4tXHRcdG5ldGRldl9lcnIobmRldiwgXCJtYW5hX2F0dGFjaCBmYWlsZWQ6ICVkXFxuXCIsIGVycik7XG4tXHRcdGFwYy1cdTAwM2V0eF9xdWV1ZV9zaXplID0gb2xkX3R4O1xuLVx0XHRhcGMtXHUwMDNlcnhfcXVldWVfc2l6ZSA9IG9sZF9yeDtcbitcdFx0TkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjaywgXCJmYWlsZWQgdG8gY2hhbmdlIHJpbmcgcGFyYW1zOiAlZFwiLFxuK1x0XHRcdFx0ICAgZXJyKTtcbitcdFx0bWFuYV9mcmVlX3FzZXQoc2NyYXRjaCwgXHUwMDI2bmV3cSk7XG4rXHRcdGdvdG8gZnJlZV9zY3JhdGNoO1xuIFx0fVxuLW91dDpcbi1cdG1hbmFfcHJlX2RlYWxsb2NfcnhidWZzKGFwYyk7XG4rXG4rXHRtYW5hX2ZyZWVfcXNldChzY3JhdGNoLCBcdTAwMjZvbGRxKTtcbitcbitmcmVlX3NjcmF0Y2g6XG4rXHRtYW5hX3B1Ymxpc2hfY2xvc2VfaWZfbmVlZGVkKGFwYyk7XG4rXHRtYW5hX3FzZXRfc2NyYXRjaF9mcmVlKHNjcmF0Y2gpO1xuK2NsZWFyX2ZsYWc6XG4rXHRtdXRleF9sb2NrKFx1MDAyNmFwYy1cdTAwM2V2cG9ydF9tdXRleCk7XG4rXHRhcGMtXHUwMDNlY2hhbm5lbF9jaGFuZ2luZyA9IGZhbHNlO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmFwYy1cdTAwM2V2cG9ydF9tdXRleCk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC03OTksNyArOTI1LDggQEAgc3RhdGljIGludCBtYW5hX3NldF9wcml2X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgcHJpdl9mbGFncylcbiB7XG4gXHRzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFx0dTMyIGNoYW5nZWQgPSBhcGMtXHUwMDNlcHJpdl9mbGFncyBeIHByaXZfZmxhZ3M7XG4tXHR1MzIgb2xkX3ByaXZfZmxhZ3MgPSBhcGMtXHUwMDNlcHJpdl9mbGFncztcbitcdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqc2NyYXRjaDtcbitcdHN0cnVjdCBtYW5hX3FzZXQgbmV3cSwgb2xkcTtcbiBcdGludCBlcnIgPSAwO1xuIFxuIFx0aWYgKCFjaGFuZ2VkKVxuQEAgLTgwOSw1NCArOTM2LDUwIEBAIHN0YXRpYyBpbnQgbWFuYV9zZXRfcHJpdl9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIHByaXZfZmxhZ3MpXG4gXHRpZiAocHJpdl9mbGFncyBcdTAwMjYgfkdFTk1BU0soTUFOQV9QUklWX0ZMQUdfTUFYIC0gMSwgMCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0YXBjLVx1MDAzZXByaXZfZmxhZ3MgPSBwcml2X2ZsYWdzO1xuLVxuLVx0aWYgKGNoYW5nZWQgXHUwMDI2IEJJVChNQU5BX1BSSVZfRkxBR19VU0VfRlVMTF9QQUdFX1JYQlVGKSkge1xuLVx0XHRpZiAoIWFwYy1cdTAwM2Vwb3J0X2lzX3VwKVxuLVx0XHRcdHJldHVybiAwO1xuLVxuLVx0XHQvKiBJZiBYRFAgaXMgYXR0YWNoZWQgb3IgTVRVIGlzIGp1bWJvLCBzaW5nbGUtYnVmZmVyLXBlci1wYWdlXG4tXHRcdCAqIGlzIGFscmVhZHkgZm9yY2VkIHJlZ2FyZGxlc3Mgb2YgdGhpcyBmbGFnLiBTa2lwIHRoZVxuLVx0XHQgKiBleHBlbnNpdmUgZGV0YWNoL2F0dGFjaCBjeWNsZSBzaW5jZSBub3RoaW5nIGNoYW5nZXMuXG4tXHRcdCAqL1xuLVx0XHRpZiAobmRldi1cdTAwM2VtdHUgKyBNQU5BX1JYQlVGX1BBRCBcdTAwM2UgUEFHRV9TSVpFIC8gMiB8fFxuLVx0XHQgICAgbWFuYV94ZHBfZ2V0KGFwYykpXG4tXHRcdFx0cmV0dXJuIDA7XG4rXHQvKiBTa2lwIHJlYnVpbGRpbmcgd2hlbiBmdWxsLXBhZ2UgUlggaXMgYWxyZWFkeSByZXF1aXJlZC4gKi9cbitcdGlmICghKGNoYW5nZWQgXHUwMDI2IEJJVChNQU5BX1BSSVZfRkxBR19VU0VfRlVMTF9QQUdFX1JYQlVGKSkgfHxcbitcdCAgICAhYXBjLVx1MDAzZXBvcnRfaXNfdXAgfHxcbitcdCAgICBuZGV2LVx1MDAzZW10dSArIE1BTkFfUlhCVUZfUEFEIFx1MDAzZSBQQUdFX1NJWkUgLyAyIHx8XG4rXHQgICAgbWFuYV94ZHBfZ2V0KGFwYykpIHtcbitcdFx0YXBjLVx1MDAzZXByaXZfZmxhZ3MgPSBwcml2X2ZsYWdzO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbiBcbi1cdFx0LyogQmxvY2sgUkRNQSBmcm9tIGdyYWJiaW5nIHRoZSB2cG9ydCBkdXJpbmcgZGV0YWNoL2F0dGFjaCAqL1xuLVx0XHRtdXRleF9sb2NrKFx1MDAyNmFwYy1cdTAwM2V2cG9ydF9tdXRleCk7XG4tXHRcdGFwYy1cdTAwM2VjaGFubmVsX2NoYW5naW5nID0gdHJ1ZTtcbitcdG11dGV4X2xvY2soXHUwMDI2YXBjLVx1MDAzZXZwb3J0X211dGV4KTtcbitcdGlmIChhcGMtXHUwMDNlY2hhbm5lbF9jaGFuZ2luZykge1xuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2YXBjLVx1MDAzZXZwb3J0X211dGV4KTtcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcdH1cbitcdGFwYy1cdTAwM2VjaGFubmVsX2NoYW5naW5nID0gdHJ1ZTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZhcGMtXHUwMDNldnBvcnRfbXV0ZXgpO1xuIFxuLVx0XHRlcnIgPSBtYW5hX3ByZV9hbGxvY19yeGJ1ZnMoYXBjLCBuZGV2LVx1MDAzZW10dSwgYXBjLVx1MDAzZW51bV9xdWV1ZXMpO1xuLVx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0bmV0ZGV2X2VycihuZGV2LFxuLVx0XHRcdFx0ICAgXCJJbnN1ZmZpY2llbnQgbWVtb3J5IGZvciBuZXcgYWxsb2NhdGlvbnNcXG5cIik7XG4tXHRcdFx0YXBjLVx1MDAzZXByaXZfZmxhZ3MgPSBvbGRfcHJpdl9mbGFncztcbi1cdFx0XHRnb3RvIGNsZWFyX2ZsYWc7XG4tXHRcdH1cbitcdHNjcmF0Y2ggPSBtYW5hX3FzZXRfc2NyYXRjaF9hbGxvYyhhcGMpO1xuK1x0aWYgKCFzY3JhdGNoKSB7XG4rXHRcdGVyciA9IC1FTk9NRU07XG4rXHRcdGdvdG8gY2xlYXJfZmxhZztcbitcdH1cbiBcbi1cdFx0ZXJyID0gbWFuYV9kZXRhY2gobmRldiwgZmFsc2UpO1xuLVx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0bmV0ZGV2X2VycihuZGV2LCBcIm1hbmFfZGV0YWNoIGZhaWxlZDogJWRcXG5cIiwgZXJyKTtcbi1cdFx0XHRhcGMtXHUwMDNlcHJpdl9mbGFncyA9IG9sZF9wcml2X2ZsYWdzO1xuLVx0XHRcdGdvdG8gb3V0O1xuLVx0XHR9XG4rXHRlcnIgPSBtYW5hX2FsbG9jX3FzZXQoYXBjLCBzY3JhdGNoLCBhcGMtXHUwMDNlcnhfcXVldWVfc2l6ZSxcbitcdFx0XHQgICAgICBhcGMtXHUwMDNldHhfcXVldWVfc2l6ZSwgcHJpdl9mbGFncyxcbitcdFx0XHQgICAgICBhcGMtXHUwMDNlY29uZmlndXJlZF9tdHUsIGFwYy1cdTAwM2VicGZfcHJvZywgXHUwMDI2bmV3cSk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGZyZWVfc2NyYXRjaDtcbiBcbi1cdFx0ZXJyID0gbWFuYV9hdHRhY2gobmRldik7XG4tXHRcdGlmIChlcnIpIHtcbi1cdFx0XHRuZXRkZXZfZXJyKG5kZXYsIFwibWFuYV9hdHRhY2ggZmFpbGVkOiAlZFxcblwiLCBlcnIpO1xuLVx0XHRcdGFwYy1cdTAwM2Vwcml2X2ZsYWdzID0gb2xkX3ByaXZfZmxhZ3M7XG4tXHRcdH1cbitcdGVyciA9IG1hbmFfcHVibGlzaF9xc2V0KGFwYywgXHUwMDI2bmV3cSwgXHUwMDI2b2xkcSk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdG1hbmFfZnJlZV9xc2V0KHNjcmF0Y2gsIFx1MDAyNm5ld3EpO1xuK1x0XHRnb3RvIGZyZWVfc2NyYXRjaDtcbiBcdH1cbiBcbi1vdXQ6XG4tXHRtYW5hX3ByZV9kZWFsbG9jX3J4YnVmcyhhcGMpO1xuK1x0bWFuYV9mcmVlX3FzZXQoc2NyYXRjaCwgXHUwMDI2b2xkcSk7XG4rXG4rZnJlZV9zY3JhdGNoOlxuK1x0bWFuYV9wdWJsaXNoX2Nsb3NlX2lmX25lZWRlZChhcGMpO1xuK1x0bWFuYV9xc2V0X3NjcmF0Y2hfZnJlZShzY3JhdGNoKTtcbiBjbGVhcl9mbGFnOlxuIFx0bXV0ZXhfbG9jayhcdTAwMjZhcGMtXHUwMDNldnBvcnRfbXV0ZXgpO1xuIFx0YXBjLVx1MDAzZWNoYW5uZWxfY2hhbmdpbmcgPSBmYWxzZTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZhcGMtXHUwMDNldnBvcnRfbXV0ZXgpO1xuLVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtODcxLDcgKzk5NCw4IEBAIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBtYW5hX2V0aHRvb2xfb3BzID0ge1xuIFx0Lm9wX25lZWRzX3J0bmxcdFx0PSBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTIHxcbiBcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU0gfFxuIFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfU1BGTEFHUyB8XG4tXHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSyxcbitcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LIHxcbitcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1JTUyxcbiBcdC5nZXRfZXRodG9vbF9zdGF0c1x0PSBtYW5hX2dldF9ldGh0b29sX3N0YXRzLFxuIFx0LmdldF9zc2V0X2NvdW50XHRcdD0gbWFuYV9nZXRfc3NldF9jb3VudCxcbiBcdC5nZXRfc3RyaW5nc1x0XHQ9IG1hbmFfZ2V0X3N0cmluZ3MsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmggYi9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaFxuaW5kZXggMzA4OTUwZjliNTRiMC4uNjY2NTY1ZmZiMjZhYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oXG4rKysgYi9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaFxuQEAgLTY4Niw2ICs2ODYsMTEgQEAgZW51bSB7XG4gLyogRHJpdmVyIHN1cHBvcnRzIG5vbi1jb250aWd1b3VzIHF1ZXVlIGJ1ZmZlcnMgKi9cbiAjZGVmaW5lIEdETUFfRFJWX0NBUF9GTEFHXzFfTk9OX0NPTlRJR1VPVVNfQlVGRkVSUyBCSVQoMzApXG4gXG4rLyogUmVzaXplIGZhaWx1cmVzIGFyZSBoYW5kbGVkIGluLWRyaXZlcjsgYSBmYWlsZWQgcm9sbGJhY2sgc3RpbGwgbmVlZHNcbisgKiByZWNvdmVyeS5cbisgKi9cbisjZGVmaW5lIEdETUFfRFJWX0NBUF9GTEFHXzFfU0VMRl9SRUNPVkVSWV9PTl9RVUVVRV9SRVNJWkVfRkFJTFVSRSBCSVQoMzEpXG4rXG4gI2RlZmluZSBHRE1BX0RSVl9DQVBfRkxBR1MxIFxcXG4gXHQoR0RNQV9EUlZfQ0FQX0ZMQUdfMV9FUV9TSEFSSU5HX01VTFRJX1ZQT1JUIHwgXFxcbiBcdCBHRE1BX0RSVl9DQVBfRkxBR18xX05BUElfV0tET05FX0ZJWCB8IFxcXG5AQCAtNzAzLDcgKzcwOCw4IEBAIGVudW0ge1xuIFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfSFdDX1RJTUVPVVRfUkVDT1ZFUlkgfCBcXFxuIFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfRVFfTVNJX1VOU0hBUkVfTVVMVElfVlBPUlQgfCBcXFxuIFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfRFlOX0lOVEVSUlVQVF9NT0RFUkFUSU9OIHwgXFxcbi1cdCBHRE1BX0RSVl9DQVBfRkxBR18xX05PTl9DT05USUdVT1VTX0JVRkZFUlMpXG4rXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9OT05fQ09OVElHVU9VU19CVUZGRVJTIHwgXFxcbitcdCBHRE1BX0RSVl9DQVBfRkxBR18xX1NFTEZfUkVDT1ZFUllfT05fUVVFVUVfUkVTSVpFX0ZBSUxVUkUpXG4gXG4gI2RlZmluZSBHRE1BX0RSVl9DQVBfRkxBR1MyIDBcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYW5hL21hbmEuaCBiL2luY2x1ZGUvbmV0L21hbmEvbWFuYS5oXG5pbmRleCA4M2I3ZWZmNDY0NmVhLi5jYzkzNmFlOTdhMDMxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbWFuYS9tYW5hLmhcbisrKyBiL2luY2x1ZGUvbmV0L21hbmEvbWFuYS5oXG5AQCAtMTAyLDcgKzEwMiw3IEBAIHN0cnVjdCBtYW5hX3N0YXRzX3J4IHtcbiBcdHU2NCBwa3RfbGVuMF9lcnI7XG4gXHR1NjQgY29hbGVzY2VkX2NxZVtNQU5BX0NRRV9DT0FMX1BLVFNfOCAtIDFdO1xuIFx0c3RydWN0IHU2NF9zdGF0c19zeW5jIHN5bmNwO1xuLX07XG4rfSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xuIFxuIHN0cnVjdCBtYW5hX3N0YXRzX3R4IHtcbiBcdHU2NCBwYWNrZXRzO1xuQEAgLTExNyw3ICsxMTcsNyBAQCBzdHJ1Y3QgbWFuYV9zdGF0c190eCB7XG4gXHR1NjQgY3N1bV9wYXJ0aWFsO1xuIFx0dTY0IG1hbmFfbWFwX2VycjtcbiBcdHN0cnVjdCB1NjRfc3RhdHNfc3luYyBzeW5jcDtcbi19O1xuK30gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDtcbiBcbiBzdHJ1Y3QgbWFuYV90eHEge1xuIFx0c3RydWN0IGdkbWFfcXVldWUgKmdkbWFfc3E7XG5AQCAtMTQzLDcgKzE0MywxMiBAQCBzdHJ1Y3QgbWFuYV90eHEge1xuIFxuIFx0Ym9vbCBuYXBpX2luaXRpYWxpemVkO1xuIFxuLVx0c3RydWN0IG1hbmFfc3RhdHNfdHggc3RhdHM7XG4rXHR1MzIgcmVzZXRfZ2VuO1xuK1xuK1x0LyogU3VwcHJlc3MgY29tcGxldGlvbiB3YWtldXBzIG9uIHRoZSByZXBsYWNlbWVudCdzIG5ldGRldiBxdWV1ZS4gKi9cbitcdGJvb2wgcmV0aXJpbmc7XG4rXG4rXHRzdHJ1Y3QgbWFuYV9zdGF0c190eCAqc3RhdHM7XG4gfTtcbiBcbiAvKiBza2IgZGF0YSBhbmQgZnJhZ3MgZG1hIG1hcHBpbmdzICovXG5AQCAtNDA1LDcgKzQxMCwxNiBAQCBzdHJ1Y3QgbWFuYV9yeHEge1xuIFxuIFx0dTMyIGJ1Zl9pbmRleDtcbiBcbi1cdHN0cnVjdCBtYW5hX3N0YXRzX3J4IHN0YXRzO1xuK1x0LyogUG9ydC1vd25lZCBsaXZlIHNsb3Q7IHVzZSBtYW5hX3J4cV9zdGF0cygpIHRvIHNlbGVjdCB0aGUgd3JpdGVyJ3NcbitcdCAqIHNsb3QuXG4rXHQgKi9cbitcdHN0cnVjdCBtYW5hX3N0YXRzX3J4ICpzdGF0cztcbitcbitcdC8qIFNldCB1bmRlciBSVE5MIGJlZm9yZSBhbm90aGVyIHF1ZXVlIHRha2VzIG92ZXIgdGhpcyBpbmRleC4gKi9cbitcdGJvb2wgcmV0aXJpbmc7XG4rXG4rXHQvKiBGb2xkZWQgdW5kZXIgUlROTCBhZnRlciBkcmFpbi1zdGF0IHdyaXRlcnMgcXVpZXNjZS4gKi9cbitcdHN0cnVjdCBtYW5hX3N0YXRzX3J4IGRyYWluX3N0YXRzO1xuIFxuIFx0c3RydWN0IGJwZl9wcm9nIF9fcmN1ICpicGZfcHJvZztcbiBcdHN0cnVjdCB4ZHBfcnhxX2luZm8geGRwX3J4cTtcbkBAIC01MzcsNiArNTUxLDEyIEBAIHN0cnVjdCBtYW5hX2NvbnRleHQge1xuIFx0dTggYm1faG9zdG1vZGU7XG4gXG4gXHRzdHJ1Y3QgbWFuYV9ldGh0b29sX2hjX3N0YXRzIGhjX3N0YXRzO1xuK1xuK1x0LyogR2VuZXJhdGlvbiBvZiBzdWNjZXNzZnVsIHJlc2V0cyBpc3N1ZWQgYnkgbWFuYV9kcmFpbl90eHFzKCksIHVuZGVyXG4rXHQgKiBSVE5MLlxuK1x0ICovXG4rXHR1MzIgcmVzZXRfZ2VuO1xuK1xuIFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnBlcl9wb3J0X3F1ZXVlX3Jlc2V0X3dxO1xuIFx0LyogV29ya3F1ZXVlIGZvciBxdWVyeWluZyBoYXJkd2FyZSBzdGF0cyAqL1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayBnZl9zdGF0c193b3JrO1xuQEAgLTU1OSw3ICs1NzksOSBAQCBzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQge1xuIFxuIFx0dTggbWFjX2FkZHJbRVRIX0FMRU5dO1xuIFxuK1x0LyogUG9ydC1vd25lZCBFUSBwb29sOiBtYXhfcXVldWVzIHNsb3RzLCBudW1fZXFzIHBvcHVsYXRlZC4gKi9cbiBcdHN0cnVjdCBtYW5hX2VxICplcXM7XG4rXHR1bnNpZ25lZCBpbnQgbnVtX2VxcztcbiBcdHN0cnVjdCBkZW50cnkgKm1hbmFfZXFzX2RlYnVnZnM7XG4gXG4gXHRlbnVtIFRSSV9TVEFURSByc3Nfc3RhdGU7XG5AQCAtNjAwLDkgKzYyMiwyMSBAQCBzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQge1xuIFx0dW5zaWduZWQgaW50IG1heF9xdWV1ZXM7XG4gXHR1bnNpZ25lZCBpbnQgbnVtX3F1ZXVlcztcbiBcbitcdC8qIFBvcnQtbGlmZXRpbWUgYXJyYXlzIHdpdGggbWF4X3F1ZXVlcyBzbG90cy4gTGl2ZSBSWCBxdWV1ZXMgd3JpdGVcbitcdCAqIHJ4cV9zdGF0c1tdOyB0ZWFyZG93biBhbmQgcm9sbGJhY2sgZm9sZCBkcmFpbl9zdGF0cyBpbnRvXG4rXHQgKiByeHFfc3RhdHNfcmV0W10gdW5kZXIgUlROTC4gUmVhZGVycyBzdW0gYm90aC5cbitcdCAqL1xuK1x0c3RydWN0IG1hbmFfc3RhdHNfcnggKnJ4cV9zdGF0cztcbitcdHN0cnVjdCBtYW5hX3N0YXRzX3J4ICpyeHFfc3RhdHNfcmV0O1xuK1x0c3RydWN0IG1hbmFfc3RhdHNfdHggKnR4cV9zdGF0cztcbitcbiBcdHVuc2lnbmVkIGludCByeF9xdWV1ZV9zaXplO1xuIFx0dW5zaWduZWQgaW50IHR4X3F1ZXVlX3NpemU7XG4gXG4rXHQvKiBNVFUgdXNlZCB0byBzaXplIFJYIGJ1ZmZlcnMsIGluZGVwZW5kZW50IG9mIG5kZXYtXHUwMDNlbXR1IGR1cmluZyBhIHN3YXAuXG4rXHQgKi9cbitcdGludCBjb25maWd1cmVkX210dTtcbitcbiBcdG1hbmFfaGFuZGxlX3QgcG9ydF9oYW5kbGU7XG4gXHRtYW5hX2hhbmRsZV90IHBmX2ZpbHRlcl9oYW5kbGU7XG4gXG5AQCAtNjEwLDEyICs2NDQsMTcgQEAgc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0IHtcbiBcdHN0cnVjdCBtdXRleCB2cG9ydF9tdXRleDtcbiBcdGludCB2cG9ydF91c2VfY291bnQ7XG4gXG4tXHQvKiBTZXQgYnkgbWFuYV9zZXRfY2hhbm5lbHMoKSB1bmRlciB2cG9ydF9tdXRleCB0byBibG9jayBSRE1BXG4tXHQgKiBmcm9tIGdyYWJiaW5nIHRoZSB2cG9ydCBkdXJpbmcgdGhlIGRldGFjaC9hdHRhY2ggd2luZG93LlxuLVx0ICogQ2hlY2tlZCBieSBtYW5hX2NmZ192cG9ydCgpIHdoZW4gY2FsbGVkIGZyb20gdGhlIFJETUEgcGF0aC5cbi1cdCAqL1xuK1x0LyogRXhjbHVkZSBSRE1BIGR1cmluZyByZWNvbmZpZ3VyYXRpb247IHByb3RlY3RlZCBieSB2cG9ydF9tdXRleC4gKi9cbiBcdGJvb2wgY2hhbm5lbF9jaGFuZ2luZztcbiBcbitcdC8qIENhbGxlciBtdXN0IGNsb3NlIHRoZSBwb3J0IGFmdGVyIHJlbGVhc2luZyB0aGUgdW5wdWJsaXNoZWQgc2V0LiAqL1xuK1x0Ym9vbCBwdWJsaXNoX2RlYWRfZW5kO1xuK1xuK1x0LyogQ2FycmllciBsb3dlcmVkIGJ5IGZhaWxlZCByb2xsYmFjazsgY2xlYXJlZCBvbiByZW9wZW4gb3IgYSBsaW5rXG4rXHQgKiBldmVudC5cbitcdCAqL1xuK1x0Ym9vbCBjYXJyaWVyX2ZvcmNlZF9vZmY7XG4rXG4gXHQvKiBOZXQgc2hhcGVyIGhhbmRsZSovXG4gXHRzdHJ1Y3QgbmV0X3NoYXBlcl9oYW5kbGUgaGFuZGxlO1xuIFxuQEAgLTY2MSw2ICs3MDAsMjcgQEAgc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0IHtcbiBcdHUzMiBzdGVlcl9jcWVfY29hbGVzY2luZztcbiB9O1xuIFxuK3N0cnVjdCBtYW5hX3FzZXQge1xuK1x0c3RydWN0IG1hbmFfdHhfcXBcdCoqdHhfcXA7XG4rXHRzdHJ1Y3QgbWFuYV9yeHFcdFx0KipyeHFzO1xuK1xuK1x0dTMyXHRcdFx0KmluZGlyX3RhYmxlO1xuK1x0dTMyXHRcdFx0aW5kaXJfdGFibGVfc3o7XG4rXHRtYW5hX2hhbmRsZV90XHRcdCpyeG9ial90YWJsZTtcbitcdG1hbmFfaGFuZGxlX3RcdFx0ZGVmYXVsdF9yeG9iajtcbitcbitcdHVuc2lnbmVkIGludFx0XHRudW1fcXVldWVzO1xuK1x0dW5zaWduZWQgaW50XHRcdHJ4X3F1ZXVlX3NpemU7XG4rXHR1bnNpZ25lZCBpbnRcdFx0dHhfcXVldWVfc2l6ZTtcbitcdHUzMlx0XHRcdHByaXZfZmxhZ3M7XG4rXG4rXHRpbnRcdFx0XHRtdHU7XG4rXHRzdHJ1Y3QgYnBmX3Byb2dcdFx0KmJwZl9wcm9nO1xuK1xuK1x0LyogTm90aWZ5IHRoZSBjb3JlIG9ubHkgYWZ0ZXIgdGhpcyBzZXQgaXMgcHVibGlzaGVkLiAqL1xuK1x0Ym9vbFx0XHRcdHJ4ZmhfaW5kaXJfbG9zdDtcbit9O1xuK1xuIG5ldGRldl90eF90IG1hbmFfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4gaW50IG1hbmFfY29uZmlnX3JzcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFjLCBlbnVtIFRSSV9TVEFURSByeCxcbiBcdFx0ICAgIGJvb2wgdXBkYXRlX2hhc2gsIGJvb2wgdXBkYXRlX3RhYik7XG5AQCAtNjcwLDYgKzczMCwzMyBAQCBpbnQgbWFuYV9hbGxvY19xdWV1ZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuIGludCBtYW5hX2F0dGFjaChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4gaW50IG1hbmFfZGV0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBib29sIGZyb21fY2xvc2UpO1xuIFxuK3N0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqXG4rbWFuYV9xc2V0X3NjcmF0Y2hfYWxsb2Moc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMpO1xuK3ZvaWQgbWFuYV9xc2V0X3NjcmF0Y2hfZnJlZShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKnNjcmF0Y2gpO1xuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1hbmFfc3RhdHNfcnggKm1hbmFfcnhxX3N0YXRzKHN0cnVjdCBtYW5hX3J4cSAqcnhxKVxuK3tcbitcdHJldHVybiBSRUFEX09OQ0UocnhxLVx1MDAzZXJldGlyaW5nKSA/IFx1MDAyNnJ4cS1cdTAwM2VkcmFpbl9zdGF0cyA6IHJ4cS1cdTAwM2VzdGF0cztcbit9XG4rXG4raW50IG1hbmFfYWxsb2NfcXNldChzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcbitcdFx0ICAgIHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqc2NyYXRjaCxcbitcdFx0ICAgIHVuc2lnbmVkIGludCByeF9xdWV1ZV9zaXplLCB1bnNpZ25lZCBpbnQgdHhfcXVldWVfc2l6ZSxcbitcdFx0ICAgIHUzMiBwcml2X2ZsYWdzLCBpbnQgbXR1LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLFxuK1x0XHQgICAgc3RydWN0IG1hbmFfcXNldCAqb3V0KTtcbitpbnQgbWFuYV9zcGxpdF9xc2V0KHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxuK1x0XHQgICAgc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICpzY3JhdGNoLCB1bnNpZ25lZCBpbnQgbmV3X2NvdW50LFxuK1x0XHQgICAgc3RydWN0IG1hbmFfcXNldCAqb3V0X25ldywgc3RydWN0IG1hbmFfcXNldCAqb3V0X3RhaWwpO1xuK3ZvaWQgbWFuYV9kaXNjYXJkX3NwbGl0KHN0cnVjdCBtYW5hX3FzZXQgKm5ld3EsIHN0cnVjdCBtYW5hX3FzZXQgKnRhaWxxKTtcbitpbnQgbWFuYV9ncm93X3FzZXQoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXG4rXHRcdCAgIHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqc2NyYXRjaCwgdW5zaWduZWQgaW50IG5ld19jb3VudCxcbitcdFx0ICAgc3RydWN0IG1hbmFfcXNldCAqb3V0X25ldywgc3RydWN0IG1hbmFfcXNldCAqb3V0X2ZyZXNoKTtcbit2b2lkIG1hbmFfZGlzY2FyZF9ncm93KHN0cnVjdCBtYW5hX3FzZXQgKm5ld3EpO1xuK2ludCBtYW5hX3B1Ymxpc2hfcXNldChzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgc3RydWN0IG1hbmFfcXNldCAqbmV3cSxcbitcdFx0ICAgICAgc3RydWN0IG1hbmFfcXNldCAqb3V0X29sZCk7XG4rdm9pZCBtYW5hX3B1Ymxpc2hfY2xvc2VfaWZfbmVlZGVkKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKTtcbit2b2lkIG1hbmFfZnJlZV9xc2V0KHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqc2NyYXRjaCwgc3RydWN0IG1hbmFfcXNldCAqcXNldCk7XG4rdm9pZCBtYW5hX3FzZXRfZGVidWdmc19wdWJsaXNoKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKTtcbitcbiB2b2lkIG1hbmFfZGltX2NoYW5nZShzdHJ1Y3QgbWFuYV9jcSAqY3EsIGJvb2wgZW5hYmxlKTtcbiBcbiBpbnQgbWFuYV9wcm9iZShzdHJ1Y3QgZ2RtYV9kZXYgKmdkLCBib29sIHJlc3VtaW5nKTtcbkBAIC02ODUsNiArNzcyLDggQEAgdTMyIG1hbmFfcnVuX3hkcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IG1hbmFfcnhxICpyeHEsXG4gXHRcdCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdm9pZCAqYnVmX3ZhLCB1aW50IHBrdF9sZW4pO1xuIHN0cnVjdCBicGZfcHJvZyAqbWFuYV94ZHBfZ2V0KHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKTtcbiB2b2lkIG1hbmFfY2huX3NldHhkcChzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgc3RydWN0IGJwZl9wcm9nICpwcm9nKTtcbitzdHJ1Y3QgYnBmX3Byb2cgKm1hbmFfY2huX3hkcF9wZWVrKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKTtcbit2b2lkIG1hbmFfY2huX3hkcF9yZWxlYXNlKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdW5zaWduZWQgaW50IG51bV9xdWV1ZXMpO1xuIGludCBtYW5hX2JwZihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IG5ldGRldl9icGYgKmJwZik7XG4gaW50IG1hbmFfcXVlcnlfZ2Zfc3RhdHMoc3RydWN0IG1hbmFfY29udGV4dCAqYWMpO1xuIGludCBtYW5hX3F1ZXJ5X2xpbmtfY2ZnKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjQ3OjI1LjQ2OTQ1MjMxNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxMDQyMDM5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIGl0J3MgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZywga2VlcGluZyB0aGUgZ3VpZGVsaW5lcyBpbiBtaW5kLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGltcGxpY2F0aW9ucyBiZWZvcmUgSSBldmVuIHN0YXJ0IGNvbnNpZGVyaW5nIGEgZnV6emluZyBzdHJhdGVneS5cblxuRmlyc3QsIGxldCdzIHNlZSB3aGF0J3MgY2hhbmdlZC4gVGhlIHBhdGNoIHRvdWNoZXM6IGBkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2JwZi5jYCwgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uY2AsIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2V0aHRvb2wuY2AsIGFuZCBhIGNvdXBsZSBvZiBpbmNsdWRlIGZpbGVzOiBgaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmhgLCBgaW5jbHVkZS9uZXQvbWFuYS9tYW5hLmhgLiBUaGUgXCJtYW5hXCIgcGFydCBpcyB3aGF0IGp1bXBzIG91dC4gSSBkb24ndCBpbnN0YW50bHkgcmVjb2duaXplIGl0LlxuXG5Tbywgd2hhdCBleGFjdGx5ICppcyogXCJtYW5hXCI/IFRpbWUgdG8gZ28gaHVudGluZyBpbiB0aGUgS2NvbmZpZyBmaWxlcyBvciB0aGUgY29kZSBpdHNlbGYgdG8gZ2V0IGNvbnRleHQuIE9rYXksIGFmdGVyIGEgcXVpY2sgbG9vaywgaXQgc2VlbXMgbGlrZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvYCBpcyB0aGUgZGlyZWN0b3J5IGZvciB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgRXRoZXJuZXQgZHJpdmVyLiBOb3cgd2UncmUgZ2V0dGluZyBzb21ld2hlcmUuXG5cblRoZSBuZXh0IGNyaXRpY2FsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciwgbWVhbmluZyBpdCAqcmVxdWlyZXMqIGEgc3BlY2lmaWMgUENJZSBjYXJkIG9yIGlzIGVtdWxhdGVkIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMgYW5kIGJlIHZlcnkgYXdhcmUgb2Ygc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLiBMZXQgbWUgcXVpY2tseSByZWZyZXNoIHRoYXQgc2VjdGlvbi4uLiBBaGEhIFNlY3Rpb24gMiBzdGF0ZXMgdGhhdCB3ZSBzaG91bGQgc2tpcCB0aGluZ3MgbGlrZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyB0aGF0IG5lZWQgc3BlY2lhbGl6ZWQgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG5cblRoZXJlZm9yZSwgdGhlIGtleSBwb2ludCBpcyB3aGV0aGVyIE1pY3Jvc29mdCBNQU5BIGlzIGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlciB0aGF0IG5lZWRzIHBoeXNpY2FsIGhhcmR3YXJlIG9yIGNhbiBpdCBydW4gaW4gYSBtb3JlIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQ/IE5vdywgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBrZXJuZWwgZG9jdW1lbnRhdGlvbiB0byBzZWUgd2hldGhlciBNQU5BIHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIHRvIG9wZXJhdGUuIEknbGwgc2VhcmNoIHRoZSBrZXJuZWwgcmVwbyBmb3IgTUFOQSBLY29uZmlnIHNldHRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDc3NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjQ3OjI5LjU3MzY1ODk3NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzk1MzYxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUlDUk9TT0ZUX01BTkFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZz0xNj1pZiBORVRfVkVORE9SX01JQ1JPU09GVFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnLTE3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnOjE4OmNvbmZpZyBNSUNST1NPRlRfTUFOQVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnLTE5LVxcdHRyaXN0YXRlIFxcXCJNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjo0NzoyOS42MTc2MTkyMDZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzI0NTE3ODYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IEtjb25maWcgZmlsZTpcblxuKipEaXZpbmcgaW50byB0aGUgTWljcm9zb2Z0IEV0aGVybmV0IERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWdgLiBSaWdodCwgdGhpcyBLY29uZmlnIGZpbGUgd2lsbCBkZWZpbmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIE1pY3Jvc29mdCBFdGhlcm5ldCBkcml2ZXJzLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgdXN1YWwgc3RydWN0dXJlOiBmZWF0dXJlcywgaGFyZHdhcmUgc3VwcG9ydCwgbWF5YmUgc29tZSBkZWJ1Z2dpbmcgb3B0aW9ucywgYW5kIGRlcGVuZGVuY2llcy4gR2l2ZW4gdGhhdCBpdCdzIE1pY3Jvc29mdCwgSSdtIGN1cmlvdXMgdG8gc2VlIGlmIHRoZXkndmUgZ290IHNvbWUgcHJvcHJpZXRhcnkgb3B0aW9ucyBpbiBoZXJlLiBQcm9iYWJseSBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0LCBnaXZlbiB0aGUgZm9jdXMuIEknbGwgbmVlZCB0byBsb29rIGZvciB0aGUgdmFyaW91cyBgY29uZmlnYCBzeW1ib2xzLCB0aGVpciBhc3NvY2lhdGVkIGRlc2NyaXB0aW9ucywgYW5kIGFueSBgZGVwZW5kcyBvbmAgb3IgYHNlbGVjdGAgc3RhdGVtZW50cyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBkaWZmZXJlbnQgZmVhdHVyZXMuIEdvdHRhIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRlZmF1bHQgdmFsdWVzIGFuZCBoZWxwIHRleHQ7IHRoYXQnbGwgdGVsbCBtZSBhIGxvdCBhYm91dCB0aGVpciBkZXNpZ24gcGhpbG9zb3BoeSBhbmQgaW50ZW5kZWQgdXNlIGNhc2VzLiBJJ2xsIGFsc28gYmUgc2VhcmNoaW5nIGZvciBob3cgdGhleSBoYW5kbGUgZGlmZmVyZW50IG5ldHdvcmsgY29udHJvbGxlcnMgYW5kIGludGVyZmFjZXMuIEFueSBtZW50aW9ucyBvZiBzcGVjaWZpYyBNQUMgYWRkcmVzc2VzIG9yIFBIWXM/IExldCdzIHNlZSBpZiB0aGlzIGNvZGUgaXMgZGVzaWduZWQgdG8gaW50ZXJmYWNlIHdpdGggc29tZSBwcm9wcmlldGFyeSBoYXJkd2FyZS4gTGV0J3MgZ2V0IHJlYWRpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NjU3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6NDc6MzIuMzQyMTM5Mjc3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjXFxuICAgMjpcXHQjIE1pY3Jvc29mdCBBenVyZSBuZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uXFxuICAgMzpcXHQjXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBORVRfVkVORE9SX01JQ1JPU09GVFxcbiAgIDY6XFx0XFx0Ym9vbCBcXFwiTWljcm9zb2Z0IE5ldHdvcmsgRGV2aWNlc1xcXCJcXG4gICA3OlxcdFxcdGRlZmF1bHQgeVxcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBkZXZpY2UgYmVsb25naW5nIHRvIHRoaXMgY2xhc3MsIHNheSBZLlxcbiAgMTA6XFx0XFxuICAxMTpcXHRcXHQgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24ndCBkaXJlY3RseSBhZmZlY3QgdGhlXFxuICAxMjpcXHRcXHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCB0aGVcXG4gIDEzOlxcdFxcdCAgcXVlc3Rpb24gYWJvdXQgTWljcm9zb2Z0IG5ldHdvcmsgZGV2aWNlcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZVxcbiAgMTQ6XFx0XFx0ICBhc2tlZCBmb3IgeW91ciBzcGVjaWZpYyBkZXZpY2UgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbi5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0aWYgTkVUX1ZFTkRPUl9NSUNST1NPRlRcXG4gIDE3OlxcdFxcbiAgMTg6XFx0Y29uZmlnIE1JQ1JPU09GVF9NQU5BXFxuICAxOTpcXHRcXHR0cmlzdGF0ZSBcXFwiTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgc3VwcG9ydFxcXCJcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gUENJX01TSVxcbiAgMjE6XFx0XFx0ZGVwZW5kcyBvbiBYODZfNjQgfHwgKEFSTTY0IFxcdTAwMjZcXHUwMDI2ICFDUFVfQklHX0VORElBTilcXG4gIDIyOlxcdFxcdGRlcGVuZHMgb24gUENJX0hZUEVSVlxcbiAgMjM6XFx0XFx0c2VsZWN0IEFVWElMSUFSWV9CVVNcXG4gIDI0OlxcdFxcdHNlbGVjdCBESU1MSUJcXG4gIDI1OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0xcXG4gIDI2OlxcdFxcdHNlbGVjdCBORVRfU0hBUEVSXFxuICAyNzpcXHRcXHRoZWxwXFxuICAyODpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpLlxcbiAgMjk6XFx0XFx0ICBTbyBmYXIsIHRoZSBkcml2ZXIgaXMgb25seSBzdXBwb3J0ZWQgb24gWDg2XzY0LlxcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXFxuICAzMjpcXHRcXHQgIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbWFuYS5cXG4gIDMzOlxcdFxcbiAgMzQ6XFx0ZW5kaWYgI05FVF9WRU5ET1JfTUlDUk9TT0ZUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjQ3OjMyLjM0MjE5ODQzN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4MDc5Nzg4MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgTUlDUk9TT0ZUX01BTkEgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHRoZSBpbml0aWFsIGluZm9ybWF0aW9uLCBpdCBzZWVtcyBgTUlDUk9TT0ZUX01BTkFgIGlzIGZ1bmRhbWVudGFsbHkgdGllZCB0byB0aGUgQXp1cmUgZW52aXJvbm1lbnQsIHNwZWNpZmljYWxseSB0aGUgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBpdHNlbGYuIFRoaXMgY29ubmVjdGlvbiBpcyBleGNsdXNpdmVseSB3aXRoaW4gQXp1cmUgVmlydHVhbCBNYWNoaW5lcyAoVk1zKS4gVGhlIGRlcGVuZGVuY3kgb24gYFBDSV9IWVBFUlZgIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgdGhlIE1BTkEgZnVuY3Rpb25hbGl0eSBJJ20gaW50ZXJlc3RlZCBpbiB1c2VzIGEgUENJIGJ1cywgZWl0aGVyIHNpbXVsYXRlZCB0aHJvdWdoIEh5cGVyLVYgdmlydHVhbGl6YXRpb24gb3IgZGlyZWN0bHkgZnJvbSBhIHBoeXNpY2FsIE1BTkEgTklDLlxuXG5NeSBuZXh0IGltbWVkaWF0ZSBzdGVwIHdpbGwgYmUgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgTUFOQSBwcm9iaW5nIG1lY2hhbmlzbXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlkZW50aWZpZXMgdGhlIGJ1cyBpdCdzIHJ1bm5pbmcgb24sIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBpdCwgYW5kIHdoYXQgZGlhZ25vc3RpYyBkYXRhIGl0IHB1bGxzIHdoZW4gcnVubmluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgYnVzIGludGVyYWN0aW9uIGlzLCB3aGljaCBpcyBrZXkgdG8gc2VlaW5nIGlmIGl0J3MgYSBwaHlzaWNhbCBvciBlbXVsYXRlZCBQQ0kgYnVzLiBUaGlzIHNob3VsZCBjbGFyaWZ5IGhvdyB0aGUgc29mdHdhcmUgZGV0ZXJtaW5lcyBpdHMgb3BlcmF0aW9uYWwgY29udGV4dCBhbmQgY29uZmlybSB0aGUgZXhwZWN0ZWQgZGVwZW5kZW5jeSBwYXRoLiBUaGlzIHdpbGwgbGVhZCB0byBhIHZlcnkgcXVpY2sgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtJ3MgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjM5NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6NDc6MzYuMTUwMTc5NzE1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjM4MTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hbmFfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM9MTc5PXN0YXRpYyBpbnQgbWFuYV9nZF9xdWVyeV9tYXhfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjgyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jOjI4MzpcXHQvKiBDYXAgdG8gdGhlIHNhbWUgbGltaXQgdXNlZCBieSBtYW5hX3Byb2JlKCkgZm9yIHBvcnQgaW5zdGFudGlhdGlvbixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yODQtXFx0ICogc28gTVNJLVggYW5kIHF1ZXVlIGJ1ZGdldGluZyBtYXRjaGVzIHRoZSBhY3R1YWwgcG9ydCBjb3VudC5cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jPTI0OTk9c3RhdGljIGludCBtYW5hX2dkX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjU1NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYzoyNTU1OlxcdGVyciA9IG1hbmFfcHJvYmUoXFx1MDAyNmdjLVxcdTAwM2VtYW5hLCBmYWxzZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjU1Ni1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjU5My1cXHQgKiBIYXJkd2FyZSBjb3VsZCBiZSBpbiByZWNvdmVyeSBtb2RlIGFuZCB0aGUgSFdDIHJldHVybnMgVElNRURPVVQgb3JcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYzoyNTk0OlxcdCAqIEVQUk9UTyBmcm9tIG1hbmFfZ2Rfc2V0dXAoKSwgbWFuYV9wcm9iZSgpIG9yIG1hbmFfcmRtYV9wcm9iZSgpLCBvclxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTI1OTUtXFx0ICogd2UgcmVjZWl2ZWQgYSBoYXJkd2FyZSByZXNldCBldmVudCBvdmVyIEhXQyBpbnRlcnJ1cHQuIEluIHRoaXMgY2FzZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jPTI2NTk9aW50IG1hbmFfZ2RfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjY2Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYzoyNjY4OlxcdGVyciA9IG1hbmFfcHJvYmUoXFx1MDAyNmdjLVxcdTAwM2VtYW5hLCB0cnVlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNjY5LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM9NDc4Nj1pbnQgbWFuYV9kZXRhY2goc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGJvb2wgZnJvbV9jbG9zZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy00ODIwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYzo0ODIxOnN0YXRpYyBpbnQgbWFuYV9wcm9iZV9wb3J0KHN0cnVjdCBtYW5hX2NvbnRleHQgKmFjLCBpbnQgcG9ydF9pZHgsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTQ4MjItXFx0XFx0XFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKipuZGV2X3N0b3JhZ2UpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM9NTA2OT1zdGF0aWMgdm9pZCBtYW5hX2dmX3N0YXRzX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtNTA5MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM6NTA5MjppbnQgbWFuYV9wcm9iZShzdHJ1Y3QgZ2RtYV9kZXYgKmdkLCBib29sIHJlc3VtaW5nKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy01MDkzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy01MTY2LVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBhYy1cXHUwMDNlbnVtX3BvcnRzOyBpKyspIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM6NTE2NzpcXHRcXHRcXHRlcnIgPSBtYW5hX3Byb2JlX3BvcnQoYWMsIGksIFxcdTAwMjZhYy1cXHUwMDNlcG9ydHNbaV0pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy01MTY4LVxcdFxcdFxcdC8qIExvZyB0aGUgcG9ydCBmb3Igd2hpY2ggdGhlIHByb2JlIGZhaWxlZCwgc3RvcCBwcm9iaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjQ3OjM2LjE5NTQyNzAzOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2NjQzODc0MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczpcblxuKipNQU5BIEludmVzdGlnYXRpb246IERldmljZSBJRHMgYW5kIGBtYW5hX2dkX3Byb2JlYCoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIHRoaXMgTUFOQSBpc3N1ZS4gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBjb3JlIGNvbm5lY3Rpb246IEknbSB0aGlua2luZyBhYm91dCB0aGUgZGV2aWNlIGl0c2VsZiBhbmQgaG93IGl0J3MgYmVpbmcgcmVjb2duaXplZC4gTXkgaW5pdGlhbCBhcHByb2FjaCBpcyB0byBpbW1lZGlhdGVseSBjaGVjayB0aGUgYG1hbmFfZ2RfcHJvYmVgIGZ1bmN0aW9uLiBUaGlzIGlzIHVzdWFsbHkgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgTUFOQSBkcml2ZXIgdG8gaW5pdGlhbGl6ZSwgc28gYW55IGlzc3VlcyBkdXJpbmcgZWFybHkgZGV2aWNlIGRldGVjdGlvbiB3b3VsZCBsaWtlbHkgc3VyZmFjZSBoZXJlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGlzIHRyeWluZyB0byBpZGVudGlmeSB0aGUgZGV2aWNlLlxuXG5UaGVuLCBJJ20gZ29pbmcgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoYXQgd2l0aCB0aGUgUENJIGRldmljZSBJRCB0YWJsZS4gVGhpcyBpcyB0aGUgY3J1Y2lhbCBsb29rdXAgdGFibGUgd2hlcmUgdGhlIGRyaXZlciBpZGVudGlmaWVzIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBiYXNlZCBvbiBpdHMgVmVuZG9yIElEIGFuZCBEZXZpY2UgSUQuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgZGV2aWNlJ3MgSUQgaXMgY29ycmVjdGx5IGxpc3RlZCBhbmQgdGhhdCB0aGUgZHJpdmVyIGtub3dzIHdoYXQgdG8gZG8gd2l0aCBpdC4gQW55IG1pc2NvbmZpZ3VyYXRpb24gb3IgbWlzc2luZyBlbnRyaWVzIGluIHRoaXMgdGFibGUgY2FuIGxlYWQgdG8gYWxsIHNvcnRzIG9mIHJlY29nbml0aW9uIGZhaWx1cmVzLiBFc3NlbnRpYWxseSwgSSdtIGxvb2tpbmcgZm9yIGEgbWlzbWF0Y2ggb3Igb21pc3Npb24uIEl0J3MgYSBmdW5kYW1lbnRhbCBkZWJ1Z2dpbmcgc3RlcC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGUgY29ycmVjdCBJRHMgYXJlIHByb2dyYW1tZWQsIG9yIGF0IGxlYXN0IHRoYXQgdGhlIGRldmljZSBJRHMgYWxpZ24gd2l0aCB0aGUgZHJpdmVyJ3MgZXhwZWN0YXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzY4MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjQ3OjM4Ljg1OTgxODE1M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxNjk3NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGNpX2RldmljZV9pZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYz0yNDk0PXN0YXRpYyBib29sIG1hbmFfaXNfcGYodW5zaWduZWQgc2hvcnQgZGV2X2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjQ5OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYzoyNDk5OnN0YXRpYyBpbnQgbWFuYV9nZF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNTAwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jPTI2OTg9c3RhdGljIGludCBtYW5hX3NyaW92X2NvbmZpZ3VyZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG51bXZmcylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTI3MTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM6MjcxOTpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbWFuYV9pZF90YWJsZVtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTI3MjAtXFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUlDUk9TT0ZULCBNQU5BX1BGX0RFVklDRV9JRCkgfSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6NDc6MzguOTA1OTk5NjU2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4ODM4NDQwNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYG1hbmFfaWRfdGFibGVgKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBQQ0kgSURzIHdpdGhpbiB0aGUgYG1hbmFfaWRfdGFibGVgLiBJJ20gdGhpbmtpbmcsIHRoaXMgdGFibGUgbGlrZWx5IGNvbnRhaW5zIGNydWNpYWwgaW5mb3JtYXRpb24gZm9yIGlkZW50aWZ5aW5nIGFuZCBtYW5hZ2luZyBoYXJkd2FyZSBjb21wb25lbnRzLCBzcGVjaWZpY2FsbHkgdGhvc2UgdXRpbGl6aW5nIFBDSSBpbnRlcmZhY2VzLiBUaGUgZ29hbCBoZXJlIGlzIHByb2JhYmx5IHRvIGVzdGFibGlzaCBhIGNvcnJlc3BvbmRlbmNlIGJldHdlZW4gZGV2aWNlIElEcyBhbmQgcmVsZXZhbnQgZHJpdmVycyBvciBjb25maWd1cmF0aW9ucyB3aXRoaW4gdGhlIHN5c3RlbS4gVW5kZXJzdGFuZGluZyB0aGlzIG1hcHBpbmcgaXMgZnVuZGFtZW50YWwgZm9yIGRldmljZSBkZXRlY3Rpb24sIHJlc291cmNlIGFsbG9jYXRpb24sIGFuZCBvdmVyYWxsIHN5c3RlbSBmdW5jdGlvbmFsaXR5LiBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgc3RydWN0dXJlIGFuZCBjb250ZW50cyB0byBncmFzcCBob3cgdGhvc2UgSURzIGFyZSB1c2VkLCBhbmQgd2hhdCBpbnNpZ2h0cyB0aGV5IG1pZ2h0IHByb3ZpZGUuIFBlcmhhcHMgdGhpcyB0YWJsZSBpcyBmb3IgYSBzcGVjaWZpYyBzeXN0ZW0gb3IgYXJjaGl0ZWN0dXJlLiBJIHdpbGwgaW52ZXN0aWdhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MzE3LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6NDc6NDAuNzg5ODQ1NzgxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzI0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzE1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNzE1OlxcdFxcbjI3MTY6XFx0XFx0cmV0dXJuIGVyciA/IGVyciA6IG51bXZmcztcXG4yNzE3OlxcdH1cXG4yNzE4OlxcdFxcbjI3MTk6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG1hbmFfaWRfdGFibGVbXSA9IHtcXG4yNzIwOlxcdFxcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01JQ1JPU09GVCwgTUFOQV9QRl9ERVZJQ0VfSUQpIH0sXFxuMjcyMTpcXHRcXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NSUNST1NPRlQsIE1BTkFfUEYyX0RFVklDRV9JRCkgfSxcXG4yNzIyOlxcdFxcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01JQ1JPU09GVCwgTUFOQV9WRl9ERVZJQ0VfSUQpIH0sXFxuMjcyMzpcXHRcXHR7IH1cXG4yNzI0OlxcdH07XFxuMjcyNTpcXHRcXG4yNzI2OlxcdHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBtYW5hX2RyaXZlciA9IHtcXG4yNzI3OlxcdFxcdC5uYW1lXFx0XFx0PSBcXFwibWFuYVxcXCIsXFxuMjcyODpcXHRcXHQuaWRfdGFibGVcXHQ9IG1hbmFfaWRfdGFibGUsXFxuMjcyOTpcXHRcXHQucHJvYmVcXHRcXHQ9IG1hbmFfZ2RfcHJvYmUsXFxuMjczMDpcXHRcXHQucmVtb3ZlXFx0XFx0PSBtYW5hX2dkX3JlbW92ZSxcXG4yNzMxOlxcdFxcdC5zdXNwZW5kXFx0PSBtYW5hX2dkX3N1c3BlbmQsXFxuMjczMjpcXHRcXHQucmVzdW1lXFx0XFx0PSBtYW5hX2dkX3Jlc3VtZSxcXG4yNzMzOlxcdFxcdC5zaHV0ZG93blxcdD0gbWFuYV9nZF9zaHV0ZG93bixcXG4yNzM0OlxcdFxcdC5zcmlvdl9jb25maWd1cmUgPSBtYW5hX3NyaW92X2NvbmZpZ3VyZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6NDc6NDAuNzkwMDIwNzIyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkxNTQzMTA4MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nIERlY2lzaW9uIGZvciBNaWNyb3NvZnQgTUFOQSBEcml2ZXIgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgYW5hbHlzaXMgaW5kaWNhdGVzIHRoYXQgdGhpcyBjb21taXQgbW9kaWZpZXMgY29kZSBleGNsdXNpdmVseSB3aXRoaW4gdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGRyaXZlci4gU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlcyBhcmUgbG9jYXRlZCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9gIGRpcmVjdG9yeSBhbmQgcmVsYXRlZCBgaW5jbHVkZS9uZXQvbWFuYS9gIGhlYWRlcnMuXG5cblRoZSBjcnV4IG9mIHRoZSBtYXR0ZXIgaXMgdGhlIE1BTkEgZHJpdmVyJ3MgaGFyZHdhcmUgZGVwZW5kZW5jeS4gSXQgcmVxdWlyZXMgc3BlY2lmaWMgTWljcm9zb2Z0IEF6dXJlIE1BTkEgaGFyZHdhcmUsIGluY2x1ZGluZyBwb3RlbnRpYWxseSBHRE1BIGhhcmR3YXJlIGFuZCBIeXBlci1WIFBDSSBkZXZpY2VzLiBUaGUga2lja2VyPyBUaGVzZSBkZXZpY2VzIGFyZSAqbm90KiBlbXVsYXRlZCBpbiB0aGUgc3RhbmRhcmQgUUVNVSBvciBHQ0UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHRoYXQgc3l6a2FsbGVyIHV0aWxpemVzIGZvciBmdXp6aW5nLiBUaGlzIG1lYW5zIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIOKAkyB0aGUgcGFja2V0IHRyYW5zbWlzc2lvbi9yZWNlcHRpb24gcm91dGluZXMsIFhEUCBoYW5kbGluZywgZXRodG9vbCBpbnRlZ3JhdGlvbiwgYW5kIHF1ZXVlIG1hbmFnZW1lbnQg4oCTIGFyZSwgZm9yIGFsbCBpbnRlbnRzIGFuZCBwdXJwb3Nlcywgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIHdpdGhpbiBvdXIgZnV6emluZyBzZXR1cC4gVGhlcmUncyBzaW1wbHkgbm8gd2F5IHRvIHRyaWdnZXIgdGhvc2UgY29kZSBwYXRocyBpbiBhIG1lYW5pbmdmdWwgd2F5LlxuXG5HaXZlbiB0aGlzLCBhY2NvcmRpbmcgdG8gdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLCB0aGlzIGlzIGEgY2xlYXIgY2FzZSBmb3Igc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gQ29uc2VxdWVudGx5LCBJJ2xsIHNldCBgRm9jdXNTeW1ib2xzYCB0byBudWxsLCBvciBlbXB0eSwgYW5kIGFsc28gYEVuYWJsZUNvbmZpZ3NgIHRvIG51bGwsIG9yIGVtcHR5IGFzIHdlbGwsIGFzIHRoZXJlJ3Mgbm8gbmVlZCB0byB0YXJnZXQgc3BlY2lmaWMgc3ltYm9scyBvciBjb25maWd1cmF0aW9ucyBoZXJlLlxuXG5Ob3csIGxldCdzIGdldCB0aG9zZSByZXN1bHRzIHVwZGF0ZWQuIENhbGxpbmcgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg4OTQsIk91dHB1dFRva2VucyI6MTEzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6NDc6NDkuOTQ0MzM0MTc1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvIGFuZCBpbmNsdWRlL25ldC9tYW5hLykuIFRoaXMgZHJpdmVyIHRhcmdldHMgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlL1NtYXJ0TklDcyBvbiBNaWNyb3NvZnQgQXp1cmUgLyBIeXBlci1WIGVudmlyb25tZW50cyBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuIEFzIHN1Y2gsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hLyBhbmQgaW5jbHVkZS9uZXQvbWFuYS8pLiBUaGlzIGRyaXZlciB0YXJnZXRzIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZS9TbWFydE5JQ3Mgb24gTWljcm9zb2Z0IEF6dXJlIC8gSHlwZXItViBlbnZpcm9ubWVudHMgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiBBcyBzdWNoLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjo0Nzo0OS45NDQzNjk5NzVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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:nil,}