Name: series-workflows2gfn Phase: Failed StartedAt: 2026-06-29 11:39:29 +0000 UTC FinishedAt: 2026-06-29 11:53:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2gfn[0] Phase: Succeeded StartedAt: 2026-06-29 11:39:29 +0000 UTC FinishedAt: 2026-06-29 11:52:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2gfn[0].run-triage Phase: Succeeded StartedAt: 2026-06-29 11:39:29 +0000 UTC FinishedAt: 2026-06-29 11:52:46 +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+CgkJCTx0ZD4yMDI2LzA2LzI5IDExOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBGcmVlc2NhbGUgRFBBQTIgc3dpdGNoIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXN3aXRjaC5jKSB0byBhZGQgTEFHIG9mZmxvYWQgc3VwcG9ydC4gVGhpcyBkcml2ZXIgZGVwZW5kcyBvbiB0aGUgZnNsLW1jIGJ1cyAoRlNMX01DX0JVUyksIHdoaWNoIGlzIHNwZWNpZmljIHRvIE5YUCBRb3JJUSBEUEFBMiBoYXJkd2FyZSAoQVJDSF9MQVlFUlNDQVBFKS4gVGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIGhhcmR3YXJlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDExOjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNWQ4OTc5YzdhNWZiYTNlZTRkZjJmMTVmYmJiZjEwYzc0OGQxNGU5N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVuIDI5IDExOjUyOjA5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guY1xuaW5kZXggODU4YmE4NDRhYzUxNjQuLjgzMjBiMjZjM2Y3MjZlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXN3aXRjaC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItc3dpdGNoLmNcbkBAIC0yNSw2ICYjNDM7MjUsOSBAQFxuIFxuICNkZWZpbmUgREVGQVVMVF9WTEFOX0lEXHRcdFx0MVxuIFxuJiM0MztzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGRwYWEyX3N3aXRjaF9wb3J0X3N3aXRjaGRldl9uYjtcbiYjNDM7c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBkcGFhMl9zd2l0Y2hfcG9ydF9zd2l0Y2hkZXZfYmxvY2tpbmdfbmI7XG4mIzQzO1xuIHN0YXRpYyB1MTYgZHBhYTJfc3dpdGNoX3BvcnRfZ2V0X2ZkYl9pZChzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYpXG4ge1xuIFx0cmV0dXJuIHBvcnRfcHJpdi1cdTAwM2VmZGItXHUwMDNlZmRiX2lkO1xuQEAgLTUxLDYgJiM0Mzs1NCwxNyBAQCBkcGFhMl9zd2l0Y2hfZmlsdGVyX2Jsb2NrX2dldF91bnVzZWQoc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3KVxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuJiM0MztzdGF0aWMgc3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKlxuJiM0MztkcGFhMl9zd2l0Y2hfbGFnX2dldF91bnVzZWQoc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGV0aHN3LVx1MDAzZXN3X2F0dHIubnVtX2lmczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRpZiAoIWV0aHN3LVx1MDAzZWxhZ3NbaV0uaW5fdXNlKVxuJiM0MztcdFx0XHRyZXR1cm4gXHUwMDI2ZXRoc3ctXHUwMDNlbGFnc1tpXTtcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgYm9vbCBkcGFhMl9zd2l0Y2hfZmRiX2luX3VzZV9ieV9vdGhlcnMoc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3LFxuIFx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZkYiAqZmRiLFxuIFx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpleGNlcHQpXG5AQCAtNzEsOSAmIzQzOzg1LDkgQEAgc3RhdGljIHN0cnVjdCBkcGFhMl9zd2l0Y2hfZmRiICpcbiBkcGFhMl9zd2l0Y2hfZmRiX2Zvcl9qb2luKHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdixcbiBcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlICp1cHBlcl9kZXYpXG4ge1xuLVx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqb3RoZXJfcG9ydF9wcml2O1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKm90aGVyX2Rldjtcbi1cdHN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7XG4mIzQzO1x0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqb3RoZXJfcG9ydF9wcml2ID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqb3RoZXJfZGV2LCAqb3RoZXJfZGV2MjtcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkICppdGVyLCAqaXRlcjI7XG4gXG4gXHQvKiBUaGUgYmVsb3cgY2FsbCB0byBuZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KCkgZGVtYW5kcyB0aGUgUlROTCBsb2NrXG4gXHQgKiBiZWluZyBoZWxkLiBBc3NlcnQgb24gaXQgc28gdGhhdCBpdCYjMzk7cyBlYXNpZXIgdG8gY2F0Y2ggbmV3IGNvZGVcbkBAIC04MiwxNyAmIzQzOzk2LDMyIEBAIGRwYWEyX3N3aXRjaF9mZGJfZm9yX2pvaW4oc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2LFxuIFx0QVNTRVJUX1JUTkwoKTtcbiBcbiBcdC8qIElmIHBhcnQgb2YgYSBicmlkZ2UsIHVzZSB0aGUgRkRCIG9mIHRoZSBmaXJzdCBkcGFhMiBzd2l0Y2ggaW50ZXJmYWNlXG4tXHQgKiB0byBiZSBwcmVzZW50IGluIHRoYXQgYnJpZGdlXG4mIzQzO1x0ICogdG8gYmUgcHJlc2VudCBpbiB0aGF0IGJyaWRnZS4gVGhlIHNlYXJjaCBkZXNjZW5kcyBvbmUgbGV2ZWwgdGhyb3VnaFxuJiM0MztcdCAqIGEgYnJpZGdlZCBib25kJiMzOTtzIGxvd2VycyBhcyB3ZWxsLlxuIFx0ICovXG4gXHRuZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KHVwcGVyX2Rldiwgb3RoZXJfZGV2LCBpdGVyKSB7XG4tXHRcdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrKG90aGVyX2RldikpXG4tXHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRpZiAobmV0aWZfaXNfbGFnX21hc3RlcihvdGhlcl9kZXYpKSB7XG4mIzQzO1x0XHRcdG5ldGRldl9mb3JfZWFjaF9sb3dlcl9kZXYob3RoZXJfZGV2LCBvdGhlcl9kZXYyLCBpdGVyMikge1xuJiM0MztcdFx0XHRcdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrKG90aGVyX2RldjIpKVxuJiM0MztcdFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGlmIChvdGhlcl9kZXYgPT0gcG9ydF9wcml2LVx1MDAzZW5ldGRldilcbi1cdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0XHRpZiAob3RoZXJfZGV2MiA9PSBwb3J0X3ByaXYtXHUwMDNlbmV0ZGV2KVxuJiM0MztcdFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdG90aGVyX3BvcnRfcHJpdiA9IG5ldGRldl9wcml2KG90aGVyX2Rldik7XG4tXHRcdHJldHVybiBvdGhlcl9wb3J0X3ByaXYtXHUwMDNlZmRiO1xuJiM0MztcdFx0XHRcdG90aGVyX3BvcnRfcHJpdiA9IG5ldGRldl9wcml2KG90aGVyX2RldjIpO1xuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhvdGhlcl9kZXYpKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKG90aGVyX2RldiA9PSBwb3J0X3ByaXYtXHUwMDNlbmV0ZGV2KVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdFx0b3RoZXJfcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYob3RoZXJfZGV2KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChvdGhlcl9wb3J0X3ByaXYpXG4mIzQzO1x0XHRcdHJldHVybiBvdGhlcl9wb3J0X3ByaXYtXHUwMDNlZmRiO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHBvcnRfcHJpdi1cdTAwM2VmZGI7XG5AQCAtNTM3LDYgJiM0Mzs1NjYsMTAzIEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2RlbF9tYyhzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfYWRkKHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdixcbiYjNDM7XHRcdFx0XHQgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGFkZHIpKVxuJiM0MztcdFx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2FkZF91Yyhwb3J0X3ByaXYsIGFkZHIpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9hZGRfbWMocG9ydF9wcml2LCBhZGRyKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsKHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdixcbiYjNDM7XHRcdFx0XHQgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXG4mIzQzO3tcbiYjNDM7XHRpZiAoaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGFkZHIpKVxuJiM0MztcdFx0cmV0dXJuIGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9kZWxfdWMocG9ydF9wcml2LCBhZGRyKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRyZXR1cm4gZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2RlbF9tYyhwb3J0X3ByaXYsIGFkZHIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGRwYWEyX21hY19hZGRyICpcbiYjNDM7ZHBhYTJfc3dpdGNoX21hY19hZGRyX2ZpbmQoc3RydWN0IGxpc3RfaGVhZCAqYWRkcl9saXN0LFxuJiM0MztcdFx0XHQgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCB1MTYgdmlkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRwYWEyX21hY19hZGRyICphO1xuJiM0MztcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGEsIGFkZHJfbGlzdCwgbGlzdClcbiYjNDM7XHRcdGlmIChldGhlcl9hZGRyX2VxdWFsKGEtXHUwMDNlYWRkciwgYWRkcikgXHUwMDI2XHUwMDI2IGEtXHUwMDNldmlkID09IHZpZClcbiYjNDM7XHRcdFx0cmV0dXJuIGE7XG4mIzQzO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9sYWdfZmRiX2FkZChzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqbGFnLFxuJiM0MztcdFx0XHRcdCAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCB1MTYgdmlkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbGFnLVx1MDAzZXByaW1hcnk7XG4mIzQzO1x0c3RydWN0IGRwYWEyX21hY19hZGRyICphO1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmxhZy1cdTAwM2VmZGJfbG9jayk7XG4mIzQzO1xuJiM0MztcdGEgPSBkcGFhMl9zd2l0Y2hfbWFjX2FkZHJfZmluZChcdTAwMjZsYWctXHUwMDNlZmRicywgYWRkciwgdmlkKTtcbiYjNDM7XHRpZiAoYSkge1xuJiM0MztcdFx0cmVmY291bnRfaW5jKFx1MDAyNmEtXHUwMDNlcmVmY291bnQpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRhID0ga3phbGxvYyhzaXplb2YoKmEpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWEpIHtcbiYjNDM7XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9hZGQocG9ydF9wcml2LCBhZGRyKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRrZnJlZShhKTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXRoZXJfYWRkcl9jb3B5KGEtXHUwMDNlYWRkciwgYWRkcik7XG4mIzQzO1x0YS1cdTAwM2V2aWQgPSB2aWQ7XG4mIzQzO1x0cmVmY291bnRfc2V0KFx1MDAyNmEtXHUwMDNlcmVmY291bnQsIDEpO1xuJiM0MztcdGxpc3RfYWRkX3RhaWwoXHUwMDI2YS1cdTAwM2VsaXN0LCBcdTAwMjZsYWctXHUwMDNlZmRicyk7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmxhZy1cdTAwM2VmZGJfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9sYWdfZmRiX2RlbChzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqbGFnLFxuJiM0MztcdFx0XHRcdCAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgdTE2IHZpZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IGxhZy1cdTAwM2VwcmltYXJ5O1xuJiM0MztcdHN0cnVjdCBkcGFhMl9tYWNfYWRkciAqYTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZsYWctXHUwMDNlZmRiX2xvY2spO1xuJiM0MztcbiYjNDM7XHRhID0gZHBhYTJfc3dpdGNoX21hY19hZGRyX2ZpbmQoXHUwMDI2bGFnLVx1MDAzZWZkYnMsIGFkZHIsIHZpZCk7XG4mIzQzO1x0aWYgKCFhKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGlmICghcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmEtXHUwMDNlcmVmY291bnQpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGxpc3RfZGVsKFx1MDAyNmEtXHUwMDNlbGlzdCk7XG4mIzQzO1x0a2ZyZWUoYSk7XG4mIzQzO1xuJiM0MztcdGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9kZWwocG9ydF9wcml2LCBhZGRyKTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bGFnLVx1MDAzZWZkYl9sb2NrKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBkcGFhMl9zd2l0Y2hfcG9ydF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHRcdFx0c3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cylcbiB7XG5AQCAtMTQ4NSw2ICYjNDM7MTYxMSwzMyBAQCBib29sIGRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0cmV0dXJuIG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzID09IFx1MDAyNmRwYWEyX3N3aXRjaF9wb3J0X29wcztcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIGRwYWEyX3N3aXRjaF9mb3JlaWduX2Rldl9jaGVjayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmZvcmVpZ25fZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3cgPSBwb3J0X3ByaXYtXHUwMDNlZXRoc3dfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpvdGhlcl9wb3J0O1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRpZiAobmV0aWZfaXNfYnJpZGdlX21hc3Rlcihmb3JlaWduX2RldikpXG4mIzQzO1x0XHRpZiAocG9ydF9wcml2LVx1MDAzZWZkYi1cdTAwM2VicmlkZ2VfZGV2ID09IGZvcmVpZ25fZGV2KVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChuZXRpZl9pc19icmlkZ2VfcG9ydChmb3JlaWduX2RldikpIHtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGV0aHN3LVx1MDAzZXN3X2F0dHIubnVtX2lmczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0b3RoZXJfcG9ydCA9IGV0aHN3LVx1MDAzZXBvcnRzW2ldO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKCFvdGhlcl9wb3J0KVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRpZiAoZHBhYTJfc3dpdGNoX3BvcnRfb2ZmbG9hZHNfYnJpZGdlX3BvcnQob3RoZXJfcG9ydCxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdCAgIGZvcmVpZ25fZGV2KSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2Nvbm5lY3RfbWFjKHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdilcbiB7XG4gXHRzdHJ1Y3QgZnNsX21jX2RldmljZSAqZHBzd19wb3J0X2RldiwgKmRwbWFjX2RldjtcbkBAIC0xODYwLDUxICYjNDM7MjAxMywzMiBAQCBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfdmxhbnNfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdCAgdmxhbi1cdTAwM2VjaGFuZ2VkKTtcbiB9XG4gXG4tc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9sb29rdXBfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgaXNfdWMsXG4tXHRcdFx0XHRcdCAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKVxuLXtcbi1cdHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpsaXN0ID0gKGlzX3VjKSA/IFx1MDAyNm5ldGRldi1cdTAwM2V1YyA6IFx1MDAyNm5ldGRldi1cdTAwM2VtYztcbi1cdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XG4tXG4tXHRuZXRpZl9hZGRyX2xvY2tfYmgobmV0ZGV2KTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkoaGEsIFx1MDAyNmxpc3QtXHUwMDNlbGlzdCwgbGlzdCkge1xuLVx0XHRpZiAoZXRoZXJfYWRkcl9lcXVhbChoYS1cdTAwM2VhZGRyLCBhZGRyKSkge1xuLVx0XHRcdG5ldGlmX2FkZHJfdW5sb2NrX2JoKG5ldGRldik7XG4tXHRcdFx0cmV0dXJuIDE7XG4tXHRcdH1cbi1cdH1cbi1cdG5ldGlmX2FkZHJfdW5sb2NrX2JoKG5ldGRldik7XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4gc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9tZGJfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfbWRiICptZGIpXG4ge1xuIFx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbi1cdGludCBlcnI7XG4mIzQzO1x0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZztcbiBcbi1cdC8qIENoZWNrIGlmIGFkZHJlc3MgaXMgYWxyZWFkeSBzZXQgb24gdGhpcyBwb3J0ICovXG4tXHRpZiAoZHBhYTJfc3dpdGNoX3BvcnRfbG9va3VwX2FkZHJlc3MobmV0ZGV2LCAwLCBtZGItXHUwMDNlYWRkcikpXG4tXHRcdHJldHVybiAtRUVYSVNUO1xuLVxuLVx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2FkZF9tYyhwb3J0X3ByaXYsIG1kYi1cdTAwM2VhZGRyKTtcbi1cdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4tXG4tXHRlcnIgPSBkZXZfbWNfYWRkKG5ldGRldiwgbWRiLVx1MDAzZWFkZHIpO1xuLVx0aWYgKGVycikge1xuLVx0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7ZGV2X21jX2FkZCBlcnIgJWRcXG5cJiMzNDssIGVycik7XG4tXHRcdGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9kZWxfbWMocG9ydF9wcml2LCBtZGItXHUwMDNlYWRkcik7XG4tXHR9XG4tXG4tXHRyZXR1cm4gZXJyO1xuJiM0MztcdGxhZyA9IHJ0bmxfZGVyZWZlcmVuY2UocG9ydF9wcml2LVx1MDAzZWxhZyk7XG4mIzQzO1x0aWYgKGxhZylcbiYjNDM7XHRcdHJldHVybiBkcGFhMl9zd2l0Y2hfbGFnX2ZkYl9hZGQobGFnLCBtZGItXHUwMDNlYWRkciwgbWRiLVx1MDAzZXZpZCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmV0dXJuIGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9hZGQocG9ydF9wcml2LCBtZGItXHUwMDNlYWRkcik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfb2JqX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuLVx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X29iaiAqb2JqKVxuJiM0MztzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X29ial9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgY29uc3Qgdm9pZCAqY3R4LFxuJiM0MztcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmogKm9iaixcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4mIzQzO1x0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0aWYgKGN0eCBcdTAwMjZcdTAwMjYgY3R4ICE9IHBvcnRfcHJpdilcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X29mZmxvYWRzX2JyaWRnZV9wb3J0KHBvcnRfcHJpdiwgb2JqLVx1MDAzZW9yaWdfZGV2KSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4gXHRzd2l0Y2ggKG9iai1cdTAwM2VpZCkge1xuIFx0Y2FzZSBTV0lUQ0hERVZfT0JKX0lEX1BPUlRfVkxBTjpcbiBcdFx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfdmxhbnNfYWRkKG5ldGRldixcbkBAIC0yMDAwLDI5ICYjNDM7MjEzNCwyOSBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X21kYl9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmpfcG9ydF9tZGIgKm1kYilcbiB7XG4gXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuLVx0aW50IGVycjtcbi1cbi1cdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfbG9va3VwX2FkZHJlc3MobmV0ZGV2LCAwLCBtZGItXHUwMDNlYWRkcikpXG4tXHRcdHJldHVybiAtRU5PRU5UO1xuLVxuLVx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2RlbF9tYyhwb3J0X3ByaXYsIG1kYi1cdTAwM2VhZGRyKTtcbi1cdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4mIzQzO1x0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZztcbiBcbi1cdGVyciA9IGRldl9tY19kZWwobmV0ZGV2LCBtZGItXHUwMDNlYWRkcik7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDtkZXZfbWNfZGVsIGVyciAlZFxcblwmIzM0OywgZXJyKTtcbi1cdFx0cmV0dXJuIGVycjtcbi1cdH1cbiYjNDM7XHRsYWcgPSBydG5sX2RlcmVmZXJlbmNlKHBvcnRfcHJpdi1cdTAwM2VsYWcpO1xuJiM0MztcdGlmIChsYWcpXG4mIzQzO1x0XHRkcGFhMl9zd2l0Y2hfbGFnX2ZkYl9kZWwobGFnLCBtZGItXHUwMDNlYWRkciwgbWRiLVx1MDAzZXZpZCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2RlbChwb3J0X3ByaXYsIG1kYi1cdTAwM2VhZGRyKTtcbiBcbi1cdHJldHVybiBlcnI7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfb2JqX2RlbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X29ial9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgY29uc3Qgdm9pZCAqY3R4LFxuIFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X29iaiAqb2JqKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHRpZiAoY3R4IFx1MDAyNlx1MDAyNiBjdHggIT0gcG9ydF9wcml2KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfb2ZmbG9hZHNfYnJpZGdlX3BvcnQocG9ydF9wcml2LCBvYmotXHUwMDNlb3JpZ19kZXYpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiBcdHN3aXRjaCAob2JqLVx1MDAzZWlkKSB7XG4gXHRjYXNlIFNXSVRDSERFVl9PQkpfSURfUE9SVF9WTEFOOlxuIFx0XHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF92bGFuc19kZWwobmV0ZGV2LCBTV0lUQ0hERVZfT0JKX1BPUlRfVkxBTihvYmopKTtcbkBAIC0yMDQ4LDYgJiM0MzsyMTgyLDIxIEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfYXR0cl9zZXRfZXZlbnQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7XG4gfVxuIFxuJiM0MztzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKlxuJiM0MztkcGFhMl9zd2l0Y2hfcG9ydF90b19icmlkZ2VfcG9ydChzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqbGFnO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBvcnRfcHJpdi1cdTAwM2VmZGItXHUwMDNlYnJpZGdlX2RldilcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRsYWcgPSBydG5sX2RlcmVmZXJlbmNlKHBvcnRfcHJpdi1cdTAwM2VsYWcpO1xuJiM0MztcdGlmIChsYWcpXG4mIzQzO1x0XHRyZXR1cm4gbGFnLVx1MDAzZWJvbmRfZGV2O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcG9ydF9wcml2LVx1MDAzZW5ldGRldjtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2JyaWRnZV9qb2luKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdCBzdHJ1Y3QgbmV0X2RldmljZSAqdXBwZXJfZGV2LFxuIFx0XHRcdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuQEAgLTIwNTUsNiAmIzQzOzIyMDQsNyBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2JyaWRnZV9qb2luKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0c3RydWN0IGRwYWEyX3N3aXRjaF9mZGIgKm9sZF9mZGIgPSBwb3J0X3ByaXYtXHUwMDNlZmRiO1xuIFx0c3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3ID0gcG9ydF9wcml2LVx1MDAzZWV0aHN3X2RhdGE7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKmJycG9ydF9kZXY7XG4gXHRib29sIGxlYXJuX2VuYTtcbiBcdGludCBlcnI7XG4gXG5AQCAtMjA2Niw3ICYjNDM7MjIxNiw4IEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfYnJpZGdlX2pvaW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdGRwYWEyX3N3aXRjaF9wb3J0X3NldF9mZGIocG9ydF9wcml2LCB1cHBlcl9kZXYsIHRydWUpO1xuIFxuIFx0LyogSW5oZXJpdCB0aGUgaW5pdGlhbCBicmlkZ2UgcG9ydCBsZWFybmluZyBzdGF0ZSAqL1xuLVx0bGVhcm5fZW5hID0gYnJfcG9ydF9mbGFnX2lzX3NldChuZXRkZXYsIEJSX0xFQVJOSU5HKTtcbiYjNDM7XHRicnBvcnRfZGV2ID0gZHBhYTJfc3dpdGNoX3BvcnRfdG9fYnJpZGdlX3BvcnQocG9ydF9wcml2KTtcbiYjNDM7XHRsZWFybl9lbmEgPSBicl9wb3J0X2ZsYWdfaXNfc2V0KGJycG9ydF9kZXYsIEJSX0xFQVJOSU5HKTtcbiBcdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X3NldF9sZWFybmluZyhwb3J0X3ByaXYsIGxlYXJuX2VuYSk7XG4gXHRwb3J0X3ByaXYtXHUwMDNlbGVhcm5fZW5hID0gbGVhcm5fZW5hO1xuIFxuQEAgLTIwODAsOCAmIzQzOzIyMzEsMTEgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9icmlkZ2Vfam9pbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfZWdyZXNzX2Zsb29kO1xuIFxuLVx0ZXJyID0gc3dpdGNoZGV2X2JyaWRnZV9wb3J0X29mZmxvYWQobmV0ZGV2LCBuZXRkZXYsIE5VTEwsXG4tXHRcdFx0XHRcdCAgICBOVUxMLCBOVUxMLCBmYWxzZSwgZXh0YWNrKTtcbiYjNDM7XHRicnBvcnRfZGV2ID0gZHBhYTJfc3dpdGNoX3BvcnRfdG9fYnJpZGdlX3BvcnQocG9ydF9wcml2KTtcbiYjNDM7XHRlcnIgPSBzd2l0Y2hkZXZfYnJpZGdlX3BvcnRfb2ZmbG9hZChicnBvcnRfZGV2LCBuZXRkZXYsIHBvcnRfcHJpdixcbiYjNDM7XHRcdFx0XHRcdCAgICBcdTAwMjZkcGFhMl9zd2l0Y2hfcG9ydF9zd2l0Y2hkZXZfbmIsXG4mIzQzO1x0XHRcdFx0XHQgICAgXHUwMDI2ZHBhYTJfc3dpdGNoX3BvcnRfc3dpdGNoZGV2X2Jsb2NraW5nX25iLFxuJiM0MztcdFx0XHRcdFx0ICAgIGZhbHNlLCBleHRhY2spO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfc3dpdGNoZGV2X29mZmxvYWQ7XG4gXG5AQCAtMjExNSw3ICYjNDM7MjI2OSwyMiBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X3Jlc3RvcmVfcnh2bGFuKHN0cnVjdCBuZXRfZGV2aWNlICp2ZGV2LCBpbnQgdmlkLCB2b1xuIFxuIHN0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9wb3J0X3ByZV9icmlkZ2VfbGVhdmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4tXHRzd2l0Y2hkZXZfYnJpZGdlX3BvcnRfdW5vZmZsb2FkKG5ldGRldiwgTlVMTCwgTlVMTCwgTlVMTCk7XG4mIzQzO1x0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3cgPSBwb3J0X3ByaXYtXHUwMDNlZXRoc3dfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqYnJwb3J0X2RldjtcbiYjNDM7XG4mIzQzO1x0YnJwb3J0X2RldiA9IGRwYWEyX3N3aXRjaF9wb3J0X3RvX2JyaWRnZV9wb3J0KHBvcnRfcHJpdik7XG4mIzQzO1x0aWYgKCFicnBvcnRfZGV2KVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2hkZXZfYnJpZGdlX3BvcnRfdW5vZmZsb2FkKGJycG9ydF9kZXYsIHBvcnRfcHJpdixcbiYjNDM7XHRcdFx0XHRcdFx1MDAyNmRwYWEyX3N3aXRjaF9wb3J0X3N3aXRjaGRldl9uYixcbiYjNDM7XHRcdFx0XHRcdFx1MDAyNmRwYWEyX3N3aXRjaF9wb3J0X3N3aXRjaGRldl9ibG9ja2luZ19uYik7XG4mIzQzO1xuJiM0MztcdC8qIE1ha2Ugc3VyZSB0aGF0IGFueSBGREIgYWRkL2RlbCBvcGVyYXRpb25zIGFyZSBjb21wbGV0ZWQgYmVmb3JlIHRoZVxuJiM0MztcdCAqIGJyaWRnZSBsYXlvdXQgY2hhbmdlc1xuJiM0MztcdCAqL1xuJiM0MztcdGZsdXNoX3dvcmtxdWV1ZShldGhzdy1cdTAwM2V3b3JrcXVldWUpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2JyaWRnZV9sZWF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuQEAgLTIxNzcsMzAgJiM0MzsyMzQ2LDUzIEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfYnJpZGdlX2xlYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRcdFx0XHRcdCAgZmFsc2UpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludFxuJiM0MztkcGFhMl9zd2l0Y2hfaGF2ZV92bGFuX3VwcGVyKHN0cnVjdCBuZXRfZGV2aWNlICp1cHBlcl9kZXYsXG4mIzQzO1x0XHRcdCAgICAgX19hbHdheXNfdW51c2VkIHN0cnVjdCBuZXRkZXZfbmVzdGVkX3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gaXNfdmxhbl9kZXYodXBwZXJfZGV2KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wcmV2ZW50X2JyaWRnaW5nX3dpdGhfODAyMXFfdXBwZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqdXBwZXJfZGV2O1xuLVx0c3RydWN0IGxpc3RfaGVhZCAqaXRlcjtcbiYjNDM7XHRzdHJ1Y3QgbmV0ZGV2X25lc3RlZF9wcml2IHByaXYgPSB7fTtcbiBcbiBcdC8qIFJDVSByZWFkIGxvY2sgbm90IG5lY2Vzc2FyeSBiZWNhdXNlIHdlIGhhdmUgd3JpdGUtc2lkZSBwcm90ZWN0aW9uXG4tXHQgKiAocnRubF9tdXRleCksIGhvd2V2ZXIgYSBub24tcmN1IGl0ZXJhdG9yIGRvZXMgbm90IGV4aXN0LlxuJiM0MztcdCAqIChydG5sX211dGV4KSwgaG93ZXZlciBhIG5vbi1yY3UgaXRlcmF0b3IgZG9lcyBub3QgZXhpc3QuIFdhbGsgdGhlXG4mIzQzO1x0ICogZW50aXJlIHVwcGVyIGNoYWluIHNvIHRoYXQgYSBWTEFOIGRldmljZSBzdGFja2VkIG9uIGEgaW50ZXJtZWRpYXRlXG4mIzQzO1x0ICogYm9uZCBpcyBjYXVnaHQgdG9vLlxuIFx0ICovXG4tXHRuZXRkZXZfZm9yX2VhY2hfdXBwZXJfZGV2X3JjdShuZXRkZXYsIHVwcGVyX2RldiwgaXRlcilcbi1cdFx0aWYgKGlzX3ZsYW5fZGV2KHVwcGVyX2RldikpXG4tXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdGlmIChuZXRkZXZfd2Fsa19hbGxfdXBwZXJfZGV2X3JjdShuZXRkZXYsIGRwYWEyX3N3aXRjaF9oYXZlX3ZsYW5fdXBwZXIsXG4mIzQzO1x0XHRcdFx0XHQgIFx1MDAyNnByaXYpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9jaGVja19kcHN3X2luc3RhbmNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgc3RydWN0IG5ldGRldl9uZXN0ZWRfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IChzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICopcHJpdi1cdTAwM2VkYXRhO1xuJiM0MztcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKm90aGVyX3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhkZXYpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChvdGhlcl9wcml2LVx1MDAzZWV0aHN3X2RhdGEgPT0gcG9ydF9wcml2LVx1MDAzZWV0aHN3X2RhdGEpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDE7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludFxuIGRwYWEyX3N3aXRjaF9wcmVjaGFuZ2V1cHBlcl9zYW5pdHlfY2hlY2tzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2UgKnVwcGVyX2RldixcbiBcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbi1cdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKm90aGVyX3BvcnRfcHJpdjtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICpvdGhlcl9kZXY7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkICppdGVyO1xuJiM0MztcdHN0cnVjdCBuZXRkZXZfbmVzdGVkX3ByaXYgZGF0YSA9IHtcbiYjNDM7XHRcdC5kYXRhID0gKHZvaWQgKilwb3J0X3ByaXYsXG4mIzQzO1x0fTtcbiBcdGludCBlcnI7XG4gXG4gXHRpZiAoIWJyX3ZsYW5fZW5hYmxlZCh1cHBlcl9kZXYpKSB7XG5AQCAtMjIxNSw2ICYjNDM7MjQwNyw3MCBAQCBkcGFhMl9zd2l0Y2hfcHJlY2hhbmdldXBwZXJfc2FuaXR5X2NoZWNrcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuJiM0MztcdGVyciA9IG5ldGRldl93YWxrX2FsbF9sb3dlcl9kZXYodXBwZXJfZGV2LFxuJiM0MztcdFx0XHRcdFx0ZHBhYTJfc3dpdGNoX2NoZWNrX2Rwc3dfaW5zdGFuY2UsXG4mIzQzO1x0XHRcdFx0XHRcdTAwMjZkYXRhKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O0ludGVyZmFjZSBmcm9tIGEgZGlmZmVyZW50IERQU1cgaXMgaW4gdGhlIGJyaWRnZSBhbHJlYWR5XCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3ByZV9sYWdfam9pbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKnVwcGVyX2RldixcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBuZXRkZXZfbGFnX3VwcGVyX2luZm8gKmluZm8sXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHN0cnVjdCBldGhzd19jb3JlICpldGhzdyA9IHBvcnRfcHJpdi1cdTAwM2VldGhzd19kYXRhO1xuJiM0MztcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKm90aGVyX3BvcnRfcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqbGFnID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgZHBzd19sYWdfY2ZnIGNmZyA9IHswfTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqb3RoZXJfZGV2O1xuJiM0MztcdGludCBpLCBudW1faWZzID0gMCwgZXJyO1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7XG4mIzQzO1xuJiM0MztcdGlmICghKGV0aHN3LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBFVEhTV19GRUFUVVJFX0xBR19PRkZMT0FEKSkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDtMQUcgb2ZmbG9hZCBpcyBzdXBwb3J0ZWQgb25seSBmb3IgRFBTVyBcdTAwM2U9IHY4LjEzXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChpbmZvLVx1MDAzZXR4X3R5cGUgIT0gTkVUREVWX0xBR19UWF9UWVBFX0hBU0gpIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7Q2FuIG9ubHkgb2ZmbG9hZCBMQUcgdXNpbmcgaGFzaCBUWCB0eXBlXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChpbmZvLVx1MDAzZWhhc2hfdHlwZSAhPSBORVRERVZfTEFHX0hBU0hfTDIzKSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtDYW4gb25seSBvZmZsb2FkIEwyJiM0MztMMyBUeCBoYXNoXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfaGFzX21hYyhwb3J0X3ByaXYpKSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O09ubHkgc3dpdGNoIGludGVyZmFjZXMgY29ubmVjdGVkIHRvIE1BQ3MgY2FuIGJlIHVuZGVyIGEgTEFHXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHZsYW5fdXNlc19kZXYodXBwZXJfZGV2KSkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDtDYW5ub3Qgam9pbiBhIExBRyB1cHBlciB0aGF0IGhhcyBhIFZMQU5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZXRoc3ctXHUwMDNlc3dfYXR0ci5udW1faWZzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKCFldGhzdy1cdTAwM2VsYWdzW2ldLmluX3VzZSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRpZiAoZXRoc3ctXHUwMDNlbGFnc1tpXS5ib25kX2RldiAhPSB1cHBlcl9kZXYpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0bGFnID0gXHUwMDI2ZXRoc3ctXHUwMDNlbGFnc1tpXTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRuZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KHVwcGVyX2Rldiwgb3RoZXJfZGV2LCBpdGVyKSB7XG4gXHRcdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrKG90aGVyX2RldikpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtMjIyMiw5ICYjNDM7MjQ3OCwyNDggQEAgZHBhYTJfc3dpdGNoX3ByZWNoYW5nZXVwcGVyX3Nhbml0eV9jaGVja3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0b3RoZXJfcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYob3RoZXJfZGV2KTtcbiBcdFx0aWYgKG90aGVyX3BvcnRfcHJpdi1cdTAwM2VldGhzd19kYXRhICE9IHBvcnRfcHJpdi1cdTAwM2VldGhzd19kYXRhKSB7XG4gXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbi1cdFx0XHRcdFx0ICAgXCYjMzQ7SW50ZXJmYWNlIGZyb20gYSBkaWZmZXJlbnQgRFBTVyBpcyBpbiB0aGUgYnJpZGdlIGFscmVhZHlcJiMzNDspO1xuJiM0MztcdFx0XHRcdFx0ICAgXCYjMzQ7SW50ZXJmYWNlIGZyb20gYSBkaWZmZXJlbnQgRFBTVyBpcyBpbiB0aGUgYm9uZCBhbHJlYWR5XCYjMzQ7KTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGNmZy5pZl9pZFtudW1faWZzJiM0MzsmIzQzO10gPSBvdGhlcl9wb3J0X3ByaXYtXHUwMDNlaWR4O1xuJiM0MztcbiYjNDM7XHRcdGlmIChudW1faWZzIFx1MDAzZT0gRFBTV19NQVhfTEFHX0lGUykge1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0ICAgXCYjMzQ7Q2Fubm90IGFkZCBtb3JlIHRoYW4gOCBEUEFBMiBzd2l0Y2ggcG9ydHMgdW5kZXIgdGhlIHNhbWUgYm9uZFwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGxhZykge1xuJiM0MztcdFx0Y2ZnLmdyb3VwX2lkID0gbGFnLVx1MDAzZWlkO1xuJiM0MztcdFx0Y2ZnLmlmX2lkW251bV9pZnMmIzQzOyYjNDM7XSA9IHBvcnRfcHJpdi1cdTAwM2VpZHg7XG4mIzQzO1x0XHRjZmcubnVtX2lmcyA9IG51bV9pZnM7XG4mIzQzO1x0XHRjZmcucGhhc2UgPSBEUFNXX0xBR19TRVRfUEhBU0VfQ0hFQ0s7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gZHBzd19sYWdfc2V0KGV0aHN3LVx1MDAzZW1jX2lvLCAwLCBldGhzdy1cdTAwM2VkcHN3X2hhbmRsZSwgXHUwMDI2Y2ZnKTtcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdCAgIFwmIzM0O0Nhbm5vdCBvZmZsb2FkIExBRyBjb25maWd1cmF0aW9uXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9wb3J0X3NldF9sYWdfZ3JvdXAoc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2LFxuJiM0MztcdFx0XHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBldGhzd19jb3JlICpldGhzdyA9IHBvcnRfcHJpdi1cdTAwM2VldGhzd19kYXRhO1xuJiM0MztcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKm90aGVyX3BvcnRfcHJpdiA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZyA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKm90aGVyX2xhZztcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqb3RoZXJfZGV2O1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7XG4mIzQzO1xuJiM0MztcdG5ldGRldl9mb3JfZWFjaF9sb3dlcl9kZXYoYm9uZF9kZXYsIG90aGVyX2RldiwgaXRlcikge1xuJiM0MztcdFx0aWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2sob3RoZXJfZGV2KSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0b3RoZXJfcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYob3RoZXJfZGV2KTtcbiYjNDM7XHRcdG90aGVyX2xhZyA9IHJ0bmxfZGVyZWZlcmVuY2Uob3RoZXJfcG9ydF9wcml2LVx1MDAzZWxhZyk7XG4mIzQzO1x0XHRpZiAoIW90aGVyX2xhZylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG90aGVyX2xhZy1cdTAwM2Vib25kX2RldiA9PSBib25kX2Rldikge1xuJiM0MztcdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIocG9ydF9wcml2LVx1MDAzZWxhZywgb3RoZXJfbGFnKTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogVGhpcyBpcyB0aGUgZmlyc3QgaW50ZXJmYWNlIHRvIGJlIGFkZGVkIHVuZGVyIGEgYm9uZCBkZXZpY2UuIEZpbmQgYW5cbiYjNDM7XHQgKiB1bnVzZWQgTEFHIGdyb3VwLiBObyBuZWVkIHRvIGNoZWNrIGZvciBOVUxMIHNpbmNlIHRoZXJlIGFyZSB0aGUgc2FtZVxuJiM0MztcdCAqIGFtb3VudCBvZiBEUFNXIHBvcnRzIGFzIExBRyBncm91cHMsIG1lYW5pbmcgdGhhdCBlYWNoIHBvcnQgY2FuIGhhdmVcbiYjNDM7XHQgKiBpdHMgb3duIExBRyBncm91cC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRsYWcgPSBkcGFhMl9zd2l0Y2hfbGFnX2dldF91bnVzZWQoZXRoc3cpO1xuJiM0MztcdGxhZy1cdTAwM2Vpbl91c2UgPSB0cnVlO1xuJiM0MztcdGxhZy1cdTAwM2Vib25kX2RldiA9IGJvbmRfZGV2O1xuJiM0MztcdGxhZy1cdTAwM2VwcmltYXJ5ID0gcG9ydF9wcml2O1xuJiM0MztcdHJjdV9hc3NpZ25fcG9pbnRlcihwb3J0X3ByaXYtXHUwMDNlbGFnLCBsYWcpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBkcGFhMl9zd2l0Y2hfcG9ydF9pbl9sYWcoc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2LFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZztcbiYjNDM7XG4mIzQzO1x0aWYgKCFwb3J0X3ByaXYpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGxhZyA9IHJ0bmxfZGVyZWZlcmVuY2UocG9ydF9wcml2LVx1MDAzZWxhZyk7XG4mIzQzO1x0cmV0dXJuIGxhZyBcdTAwMjZcdTAwMjYgbGFnLVx1MDAzZWJvbmRfZGV2ID09IGJvbmRfZGV2O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9zZXRfbGFnX2NmZyhzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHU4IGxhZ19pZCxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZyA9IFx1MDAyNmV0aHN3LVx1MDAzZWxhZ3NbbGFnX2lkIC0gMV07XG4mIzQzO1x0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcHJpbWFyeSwgKnBvcnRfcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpuZXdfcHJpbWFyeSA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IGRwc3dfbGFnX2NmZyBjZmcgPSB7MH07XG4mIzQzO1x0c3RydWN0IGRwYWEyX21hY19hZGRyICphO1xuJiM0MztcdHU4IG51bV9pZnMgPSAwO1xuJiM0MztcdGludCBlcnIsIGk7XG4mIzQzO1xuJiM0MztcdGNmZy5ncm91cF9pZCA9IGxhZ19pZDtcbiYjNDM7XG4mIzQzO1x0LyogRGV0ZXJtaW5lIHRoZSBwcmltYXJ5IHBvcnQuIFRoZSBjYWxsZXIgY2xlYXJzIC1cdTAwM2VsYWcgb24gdGhlIHBvcnQgdGhhdFxuJiM0MztcdCAqIGlzIGxlYXZpbmcsIHNvIGEgTlVMTCAtXHUwMDNlbGFnIG9uIHRoZSBjdXJyZW50IHByaW1hcnkgbWVhbnMgaXQgaXMgdGhlXG4mIzQzO1x0ICogb25lIGxlYXZpbmc6IGVsZWN0IHRoZSBmaXJzdCByZW1haW5pbmcgbWVtYmVyIGFzIHRoZSBuZXcgcHJpbWFyeS5cbiYjNDM7XHQgKiBPdGhlcndpc2Uga2VlcCB0aGUgY3VycmVudCBwcmltYXJ5LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChydG5sX2RlcmVmZXJlbmNlKGxhZy1cdTAwM2VwcmltYXJ5LVx1MDAzZWxhZykpIHtcbiYjNDM7XHRcdHByaW1hcnkgPSBsYWctXHUwMDNlcHJpbWFyeTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cHJpbWFyeSA9IE5VTEw7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBldGhzdy1cdTAwM2Vzd19hdHRyLm51bV9pZnM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdGlmIChkcGFhMl9zd2l0Y2hfcG9ydF9pbl9sYWcoZXRoc3ctXHUwMDNlcG9ydHNbaV0sIGJvbmRfZGV2KSkge1xuJiM0MztcdFx0XHRcdG5ld19wcmltYXJ5ID0gZXRoc3ctXHUwMDNlcG9ydHNbaV07XG4mIzQzO1x0XHRcdFx0cHJpbWFyeSA9IG5ld19wcmltYXJ5O1xuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBCdWlsZCB0aGUgaW50ZXJmYWNlIGxpc3QsIGFsd2F5cyBwbGFjaW5nIHRoZSBwcmltYXJ5IGZpcnN0ICovXG4mIzQzO1x0aWYgKHByaW1hcnkpXG4mIzQzO1x0XHRjZmcuaWZfaWRbbnVtX2lmcyYjNDM7JiM0MztdID0gcHJpbWFyeS1cdTAwM2VpZHg7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZXRoc3ctXHUwMDNlc3dfYXR0ci5udW1faWZzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cG9ydF9wcml2ID0gZXRoc3ctXHUwMDNlcG9ydHNbaV07XG4mIzQzO1x0XHRpZiAocG9ydF9wcml2ID09IHByaW1hcnkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9pbl9sYWcocG9ydF9wcml2LCBib25kX2RldikpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGNmZy5pZl9pZFtudW1faWZzJiM0MzsmIzQzO10gPSBwb3J0X3ByaXYtXHUwMDNlaWR4O1xuJiM0MztcdH1cbiYjNDM7XHRjZmcubnVtX2lmcyA9IG51bV9pZnM7XG4mIzQzO1xuJiM0MztcdC8qIE5vIG1vcmUgaW50ZXJmYWNlcyB1bmRlciB0aGlzIExBRyBncm91cCwgbWFyayBpdCBhcyBub3QgaW4gdXNlLiBXYWl0XG4mIzQzO1x0ICogZm9yIGEgZ3JhY2UgcGVyaW9kIHNvIHRoYXQgYW55IHJlYWRlcnMgb2YgdGhlIGxhZyBzdHJ1Y3R1cmUgZmluaXNoZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFudW1faWZzKSB7XG4mIzQzO1x0XHRzeW5jaHJvbml6ZV9uZXQoKTtcbiYjNDM7XG4mIzQzO1x0XHRsYWctXHUwMDNlYm9uZF9kZXYgPSBOVUxMO1xuJiM0MztcdFx0bGFnLVx1MDAzZXByaW1hcnkgPSBOVUxMO1xuJiM0MztcdFx0bGFnLVx1MDAzZWluX3VzZSA9IGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogV2hlbiB0aGUgcHJpbWFyeSBjaGFuZ2VzLCBtaWdyYXRlIHRoZSBGREIgZW50cmllcyBmcm9tIHRoZSBvbGRcbiYjNDM7XHQgKiBwcmltYXJ5IHRvIHRoZSBuZXcgb25lOiByZW1vdmUgdGhlbSBiZWZvcmUgcmVjb25maWd1cmluZyB0aGUgTEFHIGluXG4mIzQzO1x0ICogaGFyZHdhcmUgYW5kIHJlLWFkZCB0aGVtIG9uIHRoZSBuZXcgcHJpbWFyeSBhZnRlcndhcmRzLiBXZSBkbyBub3RcbiYjNDM7XHQgKiB0b3VjaCBhbnkgcmVmY291bnRpbmcgc2luY2UgdGhlIGludGVudGlvbiBpcyB0byBjaGFuZ2UgdGhlIEhXIGVudHJ5LFxuJiM0MztcdCAqIG5vdCB0aGUgcGFyYWxsZWwgc29mdHdhcmUgdHJhY2tpbmcuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG5ld19wcmltYXJ5KSB7XG4mIzQzO1x0XHRtdXRleF9sb2NrKFx1MDAyNmxhZy1cdTAwM2VmZGJfbG9jayk7XG4mIzQzO1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGEsIFx1MDAyNmxhZy1cdTAwM2VmZGJzLCBsaXN0KVxuJiM0MztcdFx0XHRkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsKGxhZy1cdTAwM2VwcmltYXJ5LCBhLVx1MDAzZWFkZHIpO1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxhZy1cdTAwM2VmZGJfbG9jayk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSBkcHN3X2xhZ19zZXQoZXRoc3ctXHUwMDNlbWNfaW8sIDAsIGV0aHN3LVx1MDAzZWRwc3dfaGFuZGxlLCBcdTAwMjZjZmcpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAobmV3X3ByaW1hcnkpIHtcbiYjNDM7XHRcdG11dGV4X2xvY2soXHUwMDI2bGFnLVx1MDAzZWZkYl9sb2NrKTtcbiYjNDM7XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoYSwgXHUwMDI2bGFnLVx1MDAzZWZkYnMsIGxpc3QpIHtcbiYjNDM7XHRcdFx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2FkZChuZXdfcHJpbWFyeSwgYS1cdTAwM2VhZGRyKTtcbiYjNDM7XHRcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0XHRuZXRkZXZfZXJyKG5ld19wcmltYXJ5LVx1MDAzZW5ldGRldiwgXCYjMzQ7VW5hYmxlIHRvIG1pZ3JhdGUgRkRCXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZsYWctXHUwMDNlZmRiX2xvY2spO1xuJiM0MztcbiYjNDM7XHRcdHN5bmNocm9uaXplX25ldCgpO1xuJiM0MztcdFx0bGFnLVx1MDAzZXByaW1hcnkgPSBuZXdfcHJpbWFyeTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2JvbmRfam9pbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRkZXZfbGFnX3VwcGVyX2luZm8gKmluZm8sXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0c3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3ID0gcG9ydF9wcml2LVx1MDAzZWV0aHN3X2RhdGE7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKmJyaWRnZV9kZXY7XG4mIzQzO1x0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZztcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XHR1OCBsYWdfaWQ7XG4mIzQzO1xuJiM0MztcdC8qIFNldHVwIHRoZSBwb3J0X3ByaXYtXHUwMDNlbGFnIHBvaW50ZXIgZm9yIHRoaXMgc3dpdGNoIHBvcnQgKi9cbiYjNDM7XHRkcGFhMl9zd2l0Y2hfcG9ydF9zZXRfbGFnX2dyb3VwKHBvcnRfcHJpdiwgYm9uZF9kZXYpO1xuJiM0MztcbiYjNDM7XHQvKiBDcmVhdGUgdGhlIExBRyBjb25maWd1cmF0aW9uIGFuZCBhcHBseSBpdCBpbiBNQyAqL1xuJiM0MztcdGxhZyA9IHJ0bmxfZGVyZWZlcmVuY2UocG9ydF9wcml2LVx1MDAzZWxhZyk7XG4mIzQzO1x0bGFnX2lkID0gbGFnLVx1MDAzZWlkO1xuJiM0MztcdGVyciA9IGRwYWEyX3N3aXRjaF9zZXRfbGFnX2NmZyhib25kX2RldiwgbGFnX2lkLCBldGhzdyk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXJyX2xhZ19jZmc7XG4mIzQzO1xuJiM0MztcdC8qIElmIHRoZSBib25kIGRldmljZSBpcyBhIHN3aXRjaCBwb3J0LCBqb2luIHRoZSBicmlkZ2UgYXMgd2VsbCAqL1xuJiM0MztcdGJyaWRnZV9kZXYgPSBuZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9nZXQoYm9uZF9kZXYpO1xuJiM0MztcdGlmICghYnJpZGdlX2RldiB8fCAhbmV0aWZfaXNfYnJpZGdlX21hc3RlcihicmlkZ2VfZGV2KSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9icmlkZ2Vfam9pbihuZXRkZXYsIGJyaWRnZV9kZXYsIGV4dGFjayk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXJyX2xhZ19jZmc7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztlcnJfbGFnX2NmZzpcbiYjNDM7XHRyY3VfYXNzaWduX3BvaW50ZXIocG9ydF9wcml2LVx1MDAzZWxhZywgTlVMTCk7XG4mIzQzO1x0ZHBhYTJfc3dpdGNoX3NldF9sYWdfY2ZnKGJvbmRfZGV2LCBsYWdfaWQsIGV0aHN3KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9ib25kX2xlYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqYnJpZGdlX2RldiA9IG5ldGRldl9tYXN0ZXJfdXBwZXJfZGV2X2dldChib25kX2Rldik7XG4mIzQzO1x0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqbGFnID0gcnRubF9kZXJlZmVyZW5jZShwb3J0X3ByaXYtXHUwMDNlbGFnKTtcbiYjNDM7XHRzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3cgPSBwb3J0X3ByaXYtXHUwMDNlZXRoc3dfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqYnJwZGV2O1xuJiM0MztcdGJvb2wgbGVhcm5fZW5hO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmICghbGFnKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIFJlY3JlYXRlIHRoZSBMQUcgY29uZmlndXJhdGlvbiBmb3IgdGhlIExBRyBncm91cCB0aGF0IHdlIGxlZnQuICovXG4mIzQzO1x0cmN1X2Fzc2lnbl9wb2ludGVyKHBvcnRfcHJpdi1cdTAwM2VsYWcsIE5VTEwpO1xuJiM0MztcdGRwYWEyX3N3aXRjaF9zZXRfbGFnX2NmZyhib25kX2RldiwgbGFnLVx1MDAzZWlkLCBldGhzdyk7XG4mIzQzO1xuJiM0MztcdGlmIChicmlkZ2VfZGV2IFx1MDAyNlx1MDAyNiBuZXRpZl9pc19icmlkZ2VfbWFzdGVyKGJyaWRnZV9kZXYpKSB7XG4mIzQzO1x0XHQvKiBNYWtlIHN1cmUgdGhhdCB0aGUgbmV3IHByaW1hcnkgaW5oZXJpdHMgdGhlIGxlYXJuaW5nIHN0YXRlICovXG4mIzQzO1x0XHRpZiAobGFnLVx1MDAzZXByaW1hcnkpIHtcbiYjNDM7XHRcdFx0YnJwZGV2ID0gZHBhYTJfc3dpdGNoX3BvcnRfdG9fYnJpZGdlX3BvcnQobGFnLVx1MDAzZXByaW1hcnkpO1xuJiM0MztcdFx0XHRsZWFybl9lbmEgPSBicl9wb3J0X2ZsYWdfaXNfc2V0KGJycGRldiwgQlJfTEVBUk5JTkcpO1xuJiM0MztcdFx0XHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9zZXRfbGVhcm5pbmcobGFnLVx1MDAzZXByaW1hcnksXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICBsZWFybl9lbmEpO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHRcdGxhZy1cdTAwM2VwcmltYXJ5LVx1MDAzZWxlYXJuX2VuYSA9IGxlYXJuX2VuYTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQvKiBJbiBjYXNlIHRoZSBib25kIGlzIGEgYnJpZGdlIHBvcnQsIGxlYXZlIHRoZSB1cHBlciBicmlkZ2UgYXNcbiYjNDM7XHRcdCAqIHdlbGwuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJldHVybiBkcGFhMl9zd2l0Y2hfcG9ydF9icmlkZ2VfbGVhdmUobmV0ZGV2KTtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuQEAgLTIyMzQsOCAmIzQzOzI3MjksOCBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X3ByZWNoYW5nZXVwcGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0ZGV2X25vdGlmaWVyX2NoYW5nZXVwcGVyX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2O1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICp1cHBlcl9kZXYsICpicjtcbiBcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaztcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICp1cHBlcl9kZXY7XG4gXHRpbnQgZXJyO1xuIFxuIFx0aWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2sobmV0ZGV2KSlcbkBAIC0yMjUyLDYgJiM0MzsyNzQ3LDI0IEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfcHJlY2hhbmdldXBwZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcbiBcdFx0aWYgKCFpbmZvLVx1MDAzZWxpbmtpbmcpXG4gXHRcdFx0ZHBhYTJfc3dpdGNoX3BvcnRfcHJlX2JyaWRnZV9sZWF2ZShuZXRkZXYpO1xuJiM0MztcdH0gZWxzZSBpZiAobmV0aWZfaXNfbGFnX21hc3Rlcih1cHBlcl9kZXYpKSB7XG4mIzQzO1x0XHRpZiAoIWluZm8tXHUwMDNlbGlua2luZykge1xuJiM0MztcdFx0XHRpZiAobmV0aWZfaXNfYnJpZGdlX3BvcnQodXBwZXJfZGV2KSlcbiYjNDM7XHRcdFx0XHRkcGFhMl9zd2l0Y2hfcG9ydF9wcmVfYnJpZGdlX2xlYXZlKG5ldGRldik7XG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChuZXRpZl9pc19icmlkZ2VfcG9ydCh1cHBlcl9kZXYpKSB7XG4mIzQzO1x0XHRcdGJyID0gbmV0ZGV2X21hc3Rlcl91cHBlcl9kZXZfZ2V0KHVwcGVyX2Rldik7XG4mIzQzO1x0XHRcdGVyciA9IGRwYWEyX3N3aXRjaF9wcmVjaGFuZ2V1cHBlcl9zYW5pdHlfY2hlY2tzKG5ldGRldixcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdFx0YnIsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRcdGV4dGFjayk7XG4mIzQzO1x0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gZHBhYTJfc3dpdGNoX3ByZV9sYWdfam9pbihuZXRkZXYsIHVwcGVyX2RldixcbiYjNDM7XHRcdFx0XHRcdFx0IGluZm8tXHUwMDNldXBwZXJfaW5mbywgZXh0YWNrKTtcbiBcdH0gZWxzZSBpZiAoaXNfdmxhbl9kZXYodXBwZXJfZGV2KSkge1xuIFx0XHRwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0XHRpZiAocG9ydF9wcml2LVx1MDAzZWZkYi1cdTAwM2VicmlkZ2VfZGV2KSB7XG5AQCAtMjI4Myw2ICYjNDM7Mjc5Niw4MCBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2NoYW5nZXVwcGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdFx0XHQgICAgIGV4dGFjayk7XG4gXHRcdGVsc2VcbiBcdFx0XHRyZXR1cm4gZHBhYTJfc3dpdGNoX3BvcnRfYnJpZGdlX2xlYXZlKG5ldGRldik7XG4mIzQzO1x0fSBlbHNlIGlmIChuZXRpZl9pc19sYWdfbWFzdGVyKHVwcGVyX2RldikpIHtcbiYjNDM7XHRcdGlmIChpbmZvLVx1MDAzZWxpbmtpbmcpXG4mIzQzO1x0XHRcdHJldHVybiBkcGFhMl9zd2l0Y2hfcG9ydF9ib25kX2pvaW4obmV0ZGV2LCB1cHBlcl9kZXYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgaW5mby1cdTAwM2V1cHBlcl9pbmZvLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIGV4dGFjayk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHJldHVybiBkcGFhMl9zd2l0Y2hfcG9ydF9ib25kX2xlYXZlKG5ldGRldiwgdXBwZXJfZGV2KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO2RwYWEyX3N3aXRjaF9sYWdfcHJlY2hhbmdldXBwZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgbmV0ZGV2X25vdGlmaWVyX2NoYW5nZXVwcGVyX2luZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbG93ZXI7XG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCAqaXRlcjtcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFuZXRpZl9pc19sYWdfbWFzdGVyKG5ldGRldikpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX2RldihuZXRkZXYsIGxvd2VyLCBpdGVyKSB7XG4mIzQzO1x0XHRpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhsb3dlcikpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X3ByZWNoYW5nZXVwcGVyKGxvd2VyLCBpbmZvKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO2RwYWEyX3N3aXRjaF9sYWdfY2hhbmdldXBwZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3QgbmV0ZGV2X25vdGlmaWVyX2NoYW5nZXVwcGVyX2luZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbG93ZXI7XG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCAqaXRlcjtcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFuZXRpZl9pc19sYWdfbWFzdGVyKG5ldGRldikpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX2RldihuZXRkZXYsIGxvd2VyLCBpdGVyKSB7XG4mIzQzO1x0XHRpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhsb3dlcikpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X2NoYW5nZXVwcGVyKGxvd2VyLCBpbmZvKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0MztkcGFhMl9zd2l0Y2hfcG9ydF9jaGFuZ2Vsb3dlcnN0YXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IG5ldGRldl9sYWdfbG93ZXJfc3RhdGVfaW5mbyAqbGluZm8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHN0cnVjdCBldGhzd19jb3JlICpldGhzdyA9IHBvcnRfcHJpdi1cdTAwM2VldGhzd19kYXRhO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmICghcnRubF9kZXJlZmVyZW5jZShwb3J0X3ByaXYtXHUwMDNlbGFnKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBkcHN3X2lmX3NldF9sYWdfc3RhdGUoZXRoc3ctXHUwMDNlbWNfaW8sIDAsIGV0aHN3LVx1MDAzZWRwc3dfaGFuZGxlLFxuJiM0MztcdFx0XHRcdCAgICBwb3J0X3ByaXYtXHUwMDNlaWR4LCBsaW5mby1cdTAwM2V0eF9lbmFibGVkID8gMSA6IDApO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDtkcHN3X2lmX3NldF9sYWdfc3RhdGUoKSA9ICVkXFxuXCYjMzQ7LCBlcnIpO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuQEAgLTIyOTIsNiAmIzQzOzI4NzksNyBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X25ldGRldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuIFx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7XG4mIzQzO1x0c3RydWN0IG5ldGRldl9ub3RpZmllcl9jaGFuZ2Vsb3dlcnN0YXRlX2luZm8gKmluZm87XG4gXHRpbnQgZXJyID0gMDtcbiBcbiBcdHN3aXRjaCAoZXZlbnQpIHtcbkBAIC0yMzAwLDEzICYjNDM7Mjg4OCwyOSBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X25ldGRldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7XG4gXG4mIzQzO1x0XHRlcnIgPSBkcGFhMl9zd2l0Y2hfbGFnX3ByZWNoYW5nZXVwcGVyKG5ldGRldiwgcHRyKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7XG4mIzQzO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgTkVUREVWX0NIQU5HRVVQUEVSOlxuIFx0XHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9jaGFuZ2V1cHBlcihuZXRkZXYsIHB0cik7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8oZXJyKTtcbiBcbiYjNDM7XHRcdGVyciA9IGRwYWEyX3N3aXRjaF9sYWdfY2hhbmdldXBwZXIobmV0ZGV2LCBwdHIpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8oZXJyKTtcbiYjNDM7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTkVUREVWX0NIQU5HRUxPV0VSU1RBVEU6XG4mIzQzO1x0XHRpbmZvID0gcHRyO1xuJiM0MztcdFx0aWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2sobmV0ZGV2KSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfY2hhbmdlbG93ZXJzdGF0ZShuZXRkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0IGluZm8tXHUwMDNlbG93ZXJfc3RhdGVfaW5mbyk7XG4mIzQzO1x0XHRyZXR1cm4gbm90aWZpZXJfZnJvbV9lcnJubyhlcnIpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIE5PVElGWV9ET05FO1xuQEAgLTIzMTYsODAgJiM0MzsyOTIwLDk3IEBAIHN0cnVjdCBldGhzd19zd2l0Y2hkZXZfZXZlbnRfd29yayB7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yaztcbiBcdHN0cnVjdCBzd2l0Y2hkZXZfbm90aWZpZXJfZmRiX2luZm8gZmRiX2luZm87XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldjtcbiBcdHVuc2lnbmVkIGxvbmcgZXZlbnQ7XG4mIzQzO1x0dTE2IHZpZDtcbiB9O1xuIFxuIHN0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9ldmVudF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgZXRoc3dfc3dpdGNoZGV2X2V2ZW50X3dvcmsgKnN3aXRjaGRldl93b3JrID1cbiBcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBldGhzd19zd2l0Y2hkZXZfZXZlbnRfd29yaywgd29yayk7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2ID0gc3dpdGNoZGV2X3dvcmstXHUwMDNlb3JpZ19kZXY7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc3dpdGNoZGV2X3dvcmstXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IG5ldGRldl9wcml2KGRldik7XG4gXHRzdHJ1Y3Qgc3dpdGNoZGV2X25vdGlmaWVyX2ZkYl9pbmZvICpmZGJfaW5mbztcbiYjNDM7XHRzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqbGFnO1xuIFx0aW50IGVycjtcbiBcbi1cdHJ0bmxfbG9jaygpO1xuIFx0ZmRiX2luZm8gPSBcdTAwMjZzd2l0Y2hkZXZfd29yay1cdTAwM2VmZGJfaW5mbztcbiBcbiYjNDM7XHQvKiBUaGUgbGFnIHN0cnVjdHVyZXMgYXJlIGZyZWVkIG9ubHkgZnJvbSBkcGFhMl9zd2l0Y2hfcmVtb3ZlKCksIHdoaWNoXG4mIzQzO1x0ICogZmlyc3QgZmx1c2hlcyB0aGlzIHdvcmtxdWV1ZSwgc28gdGhlIHBvaW50ZXIgc3RheXMgdmFsaWQgZm9yIHRoZVxuJiM0MztcdCAqIGxpZmV0aW1lIG9mIHRoZSB3b3JrIGl0ZW0uIE9ubHkgdGhlIGRlcmVmZXJlbmNlIG5lZWRzIHRoZSBSQ1VcbiYjNDM7XHQgKiByZWFkLXNpZGUgbG9jazsgdGhlIEZEQiBoZWxwZXJzIGJlbG93IGNhbiBzbGVlcCBhbmQgbXVzdCBydW4gb3V0c2lkZVxuJiM0MztcdCAqIG9mIGl0LlxuJiM0MztcdCAqL1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRsYWcgPSByY3VfZGVyZWZlcmVuY2UocG9ydF9wcml2LVx1MDAzZWxhZyk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuIFx0c3dpdGNoIChzd2l0Y2hkZXZfd29yay1cdTAwM2VldmVudCkge1xuIFx0Y2FzZSBTV0lUQ0hERVZfRkRCX0FERF9UT19ERVZJQ0U6XG4tXHRcdGlmICghZmRiX2luZm8tXHUwMDNlYWRkZWRfYnlfdXNlciB8fCBmZGJfaW5mby1cdTAwM2Vpc19sb2NhbClcbi1cdFx0XHRicmVhaztcbi1cdFx0aWYgKGlzX3VuaWNhc3RfZXRoZXJfYWRkcihmZGJfaW5mby1cdTAwM2VhZGRyKSlcbi1cdFx0XHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfYWRkX3VjKG5ldGRldl9wcml2KGRldiksXG4tXHRcdFx0XHRcdFx0XHQgICBmZGJfaW5mby1cdTAwM2VhZGRyKTtcbiYjNDM7XHRcdGlmIChsYWcpXG4mIzQzO1x0XHRcdGVyciA9IGRwYWEyX3N3aXRjaF9sYWdfZmRiX2FkZChsYWcsIGZkYl9pbmZvLVx1MDAzZWFkZHIsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBzd2l0Y2hkZXZfd29yay1cdTAwM2V2aWQpO1xuIFx0XHRlbHNlXG4tXHRcdFx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2FkZF9tYyhuZXRkZXZfcHJpdihkZXYpLFxuLVx0XHRcdFx0XHRcdFx0ICAgZmRiX2luZm8tXHUwMDNlYWRkcik7XG4mIzQzO1x0XHRcdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9hZGQocG9ydF9wcml2LFxuJiM0MztcdFx0XHRcdFx0XHRcdGZkYl9pbmZvLVx1MDAzZWFkZHIpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRmZGJfaW5mby1cdTAwM2VvZmZsb2FkZWQgPSB0cnVlO1xuLVx0XHRjYWxsX3N3aXRjaGRldl9ub3RpZmllcnMoU1dJVENIREVWX0ZEQl9PRkZMT0FERUQsIGRldixcbiYjNDM7XHRcdGNhbGxfc3dpdGNoZGV2X25vdGlmaWVycyhTV0lUQ0hERVZfRkRCX09GRkxPQURFRCwgb3JpZ19kZXYsXG4gXHRcdFx0XHRcdCBcdTAwMjZmZGJfaW5mby1cdTAwM2VpbmZvLCBOVUxMKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFNXSVRDSERFVl9GREJfREVMX1RPX0RFVklDRTpcbi1cdFx0aWYgKCFmZGJfaW5mby1cdTAwM2VhZGRlZF9ieV91c2VyIHx8IGZkYl9pbmZvLVx1MDAzZWlzX2xvY2FsKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRpZiAoaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGZkYl9pbmZvLVx1MDAzZWFkZHIpKVxuLVx0XHRcdGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9kZWxfdWMobmV0ZGV2X3ByaXYoZGV2KSwgZmRiX2luZm8tXHUwMDNlYWRkcik7XG4mIzQzO1x0XHRpZiAobGFnKVxuJiM0MztcdFx0XHRkcGFhMl9zd2l0Y2hfbGFnX2ZkYl9kZWwobGFnLCBmZGJfaW5mby1cdTAwM2VhZGRyLFxuJiM0MztcdFx0XHRcdFx0XHQgc3dpdGNoZGV2X3dvcmstXHUwMDNldmlkKTtcbiBcdFx0ZWxzZVxuLVx0XHRcdGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9kZWxfbWMobmV0ZGV2X3ByaXYoZGV2KSwgZmRiX2luZm8tXHUwMDNlYWRkcik7XG4mIzQzO1x0XHRcdGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9kZWwocG9ydF9wcml2LCBmZGJfaW5mby1cdTAwM2VhZGRyKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXG4tXHRydG5sX3VubG9jaygpO1xuIFx0a2ZyZWUoc3dpdGNoZGV2X3dvcmstXHUwMDNlZmRiX2luZm8uYWRkcik7XG4gXHRrZnJlZShzd2l0Y2hkZXZfd29yayk7XG4gXHRkZXZfcHV0KGRldik7XG4mIzQzO1x0ZGV2X3B1dChvcmlnX2Rldik7XG4gfVxuIFxuLS8qIENhbGxlZCB1bmRlciByY3VfcmVhZF9sb2NrKCkgKi9cbi1zdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4tXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7ZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2V2ZW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYsXG4mIzQzO1x0XHRcdCAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCBjb25zdCB2b2lkICpjdHgsXG4mIzQzO1x0XHRcdCAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X25vdGlmaWVyX2ZkYl9pbmZvICpmZGJfaW5mbylcbiB7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc3dpdGNoZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7XG4gXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0c3RydWN0IGV0aHN3X3N3aXRjaGRldl9ldmVudF93b3JrICpzd2l0Y2hkZXZfd29yaztcbi1cdHN0cnVjdCBzd2l0Y2hkZXZfbm90aWZpZXJfZmRiX2luZm8gKmZkYl9pbmZvID0gcHRyO1xuIFx0c3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3ID0gcG9ydF9wcml2LVx1MDAzZWV0aHN3X2RhdGE7XG4gXG4tXHRpZiAoZXZlbnQgPT0gU1dJVENIREVWX1BPUlRfQVRUUl9TRVQpXG4tXHRcdHJldHVybiBkcGFhMl9zd2l0Y2hfcG9ydF9hdHRyX3NldF9ldmVudChkZXYsIHB0cik7XG4mIzQzO1x0aWYgKGN0eCBcdTAwMjZcdTAwMjYgY3R4ICE9IHBvcnRfcHJpdilcbiYjNDM7XHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2soZGV2KSlcbi1cdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuJiM0MztcdC8qIEZvciB0aGUgbW9tZW50LCBkbyBub3RoaW5nIHdpdGggZW50cmllcyB0b3dhcmRzIGZvcmVpZ24gZGV2aWNlcyAqL1xuJiM0MztcdGlmIChkcGFhMl9zd2l0Y2hfZm9yZWlnbl9kZXZfY2hlY2soZGV2LCBvcmlnX2RldikpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFmZGJfaW5mby1cdTAwM2VhZGRlZF9ieV91c2VyIHx8IGZkYl9pbmZvLVx1MDAzZWlzX2xvY2FsKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4gXG4gXHRzd2l0Y2hkZXZfd29yayA9IGt6YWxsb2Nfb2JqKCpzd2l0Y2hkZXZfd29yaywgR0ZQX0FUT01JQyk7XG4gXHRpZiAoIXN3aXRjaGRldl93b3JrKVxuLVx0XHRyZXR1cm4gTk9USUZZX0JBRDtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0SU5JVF9XT1JLKFx1MDAyNnN3aXRjaGRldl93b3JrLVx1MDAzZXdvcmssIGRwYWEyX3N3aXRjaF9ldmVudF93b3JrKTtcbiBcdHN3aXRjaGRldl93b3JrLVx1MDAzZWRldiA9IGRldjtcbiBcdHN3aXRjaGRldl93b3JrLVx1MDAzZWV2ZW50ID0gZXZlbnQ7XG4mIzQzO1x0c3dpdGNoZGV2X3dvcmstXHUwMDNlb3JpZ19kZXYgPSBvcmlnX2RldjtcbiYjNDM7XHRzd2l0Y2hkZXZfd29yay1cdTAwM2V2aWQgPSBmZGJfaW5mby1cdTAwM2V2aWQ7XG4gXG4gXHRzd2l0Y2ggKGV2ZW50KSB7XG4gXHRjYXNlIFNXSVRDSERFVl9GREJfQUREX1RPX0RFVklDRTpcbiBcdGNhc2UgU1dJVENIREVWX0ZEQl9ERUxfVE9fREVWSUNFOlxuLVx0XHRtZW1jcHkoXHUwMDI2c3dpdGNoZGV2X3dvcmstXHUwMDNlZmRiX2luZm8sIHB0cixcbiYjNDM7XHRcdG1lbWNweShcdTAwMjZzd2l0Y2hkZXZfd29yay1cdTAwM2VmZGJfaW5mbywgZmRiX2luZm8sXG4gXHRcdCAgICAgICBzaXplb2Yoc3dpdGNoZGV2X3dvcmstXHUwMDNlZmRiX2luZm8pKTtcbiBcdFx0c3dpdGNoZGV2X3dvcmstXHUwMDNlZmRiX2luZm8uYWRkciA9IGt6YWxsb2MoRVRIX0FMRU4sIEdGUF9BVE9NSUMpO1xuIFx0XHRpZiAoIXN3aXRjaGRldl93b3JrLVx1MDAzZWZkYl9pbmZvLmFkZHIpXG5AQCAtMjQwMCw1MiAmIzQzOzMwMjEsNjEgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuIFxuIFx0XHQvKiBUYWtlIGEgcmVmZXJlbmNlIG9uIHRoZSBkZXZpY2UgdG8gYXZvaWQgYmVpbmcgZnJlZWQuICovXG4gXHRcdGRldl9ob2xkKGRldik7XG4mIzQzO1x0XHRkZXZfaG9sZChvcmlnX2Rldik7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0a2ZyZWUoc3dpdGNoZGV2X3dvcmspO1xuLVx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbiBcdHF1ZXVlX3dvcmsoZXRoc3ctXHUwMDNld29ya3F1ZXVlLCBcdTAwMjZzd2l0Y2hkZXZfd29yay1cdTAwM2V3b3JrKTtcbiBcbi1cdHJldHVybiBOT1RJRllfRE9ORTtcbiYjNDM7XHRyZXR1cm4gMDtcbiBcbiBlcnJfYWRkcl9hbGxvYzpcbiBcdGtmcmVlKHN3aXRjaGRldl93b3JrKTtcbi1cdHJldHVybiBOT1RJRllfQkFEO1xuJiM0MztcdHJldHVybiAtRU5PTUVNO1xuIH1cbiBcbi1zdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X29ial9ldmVudCh1bnNpZ25lZCBsb25nIGV2ZW50LFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IHN3aXRjaGRldl9ub3RpZmllcl9wb3J0X29ial9pbmZvICpwb3J0X29ial9pbmZvKVxuJiM0MzsvKiBDYWxsZWQgdW5kZXIgcmN1X3JlYWRfbG9jaygpICovXG4mIzQzO3N0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbiYjNDM7XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXG4ge1xuLVx0aW50IGVyciA9IC1FT1BOT1RTVVBQO1xuLVxuLVx0aWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2sobmV0ZGV2KSlcbi1cdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBzd2l0Y2hkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcbiYjNDM7XHRpbnQgZXJyO1xuIFxuIFx0c3dpdGNoIChldmVudCkge1xuLVx0Y2FzZSBTV0lUQ0hERVZfUE9SVF9PQkpfQUREOlxuLVx0XHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9vYmpfYWRkKG5ldGRldiwgcG9ydF9vYmpfaW5mby1cdTAwM2VvYmopO1xuLVx0XHRicmVhaztcbi1cdGNhc2UgU1dJVENIREVWX1BPUlRfT0JKX0RFTDpcbi1cdFx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfb2JqX2RlbChuZXRkZXYsIHBvcnRfb2JqX2luZm8tXHUwMDNlb2JqKTtcbi1cdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBTV0lUQ0hERVZfUE9SVF9BVFRSX1NFVDpcbiYjNDM7XHRcdHJldHVybiBkcGFhMl9zd2l0Y2hfcG9ydF9hdHRyX3NldF9ldmVudChkZXYsIHB0cik7XG4mIzQzO1x0Y2FzZSBTV0lUQ0hERVZfRkRCX0FERF9UT19ERVZJQ0U6XG4mIzQzO1x0Y2FzZSBTV0lUQ0hERVZfRkRCX0RFTF9UT19ERVZJQ0U6XG4mIzQzO1x0XHRlcnIgPSBzd2l0Y2hkZXZfaGFuZGxlX2ZkYl9ldmVudF90b19kZXZpY2UoZGV2LCBldmVudCwgcHRyLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIGRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBkcGFhMl9zd2l0Y2hfZm9yZWlnbl9kZXZfY2hlY2ssXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2V2ZW50KTtcbiYjNDM7XHRcdHJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiBOT1RJRllfRE9ORTtcbiBcdH1cbi1cbi1cdHBvcnRfb2JqX2luZm8tXHUwMDNlaGFuZGxlZCA9IHRydWU7XG4tXHRyZXR1cm4gbm90aWZpZXJfZnJvbV9lcnJubyhlcnIpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2Jsb2NraW5nX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4gXHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHN3aXRjaGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xuJiM0MztcdGludCBlcnI7XG4gXG4gXHRzd2l0Y2ggKGV2ZW50KSB7XG4gXHRjYXNlIFNXSVRDSERFVl9QT1JUX09CSl9BREQ6XG4mIzQzO1x0XHRlcnIgPSBzd2l0Y2hkZXZfaGFuZGxlX3BvcnRfb2JqX2FkZChkZXYsIHB0cixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIGRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIGRwYWEyX3N3aXRjaF9wb3J0X29ial9hZGQpO1xuJiM0MztcdFx0cmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8oZXJyKTtcbiBcdGNhc2UgU1dJVENIREVWX1BPUlRfT0JKX0RFTDpcbi1cdFx0cmV0dXJuIGRwYWEyX3N3aXRjaF9wb3J0X29ial9ldmVudChldmVudCwgZGV2LCBwdHIpO1xuJiM0MztcdFx0ZXJyID0gc3dpdGNoZGV2X2hhbmRsZV9wb3J0X29ial9kZWwoZGV2LCBwdHIsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2ssXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBkcGFhMl9zd2l0Y2hfcG9ydF9vYmpfZGVsKTtcbiYjNDM7XHRcdHJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7XG4gXHRjYXNlIFNXSVRDSERFVl9QT1JUX0FUVFJfU0VUOlxuIFx0XHRyZXR1cm4gZHBhYTJfc3dpdGNoX3BvcnRfYXR0cl9zZXRfZXZlbnQoZGV2LCBwdHIpO1xuIFx0fVxuQEAgLTI0OTAsMTkgJiM0MzszMTIwLDIyIEBAIHN0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9yeChzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZxICpmcSxcbiBcdGRtYV9hZGRyX3QgYWRkciA9IGRwYWEyX2ZkX2dldF9hZGRyKGZkKTtcbiBcdHN0cnVjdCBldGhzd19jb3JlICpldGhzdyA9IGZxLVx1MDAzZWV0aHN3O1xuIFx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2O1xuJiM0MztcdHN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWc7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuIFx0c3RydWN0IHZsYW5fZXRoaGRyICpoZHI7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFx0dTE2IHZsYW5fdGNpLCB2aWQ7XG4gXHRpbnQgaWZfaWQsIGVycjtcbiBcdHZvaWQgKnZhZGRyO1xuJiM0MztcdHU2NCBmbGM7XG4gXG4gXHR2YWRkciA9IGRwYWEyX2lvdmFfdG9fdmlydChldGhzdy1cdTAwM2Vpb21tdV9kb21haW4sIGFkZHIpO1xuIFx0ZG1hX3VubWFwX3BhZ2UoZXRoc3ctXHUwMDNlZGV2LCBhZGRyLCBEUEFBMl9TV0lUQ0hfUlhfQlVGX1NJWkUsXG4gXHRcdCAgICAgICBETUFfRlJPTV9ERVZJQ0UpO1xuIFxuIFx0LyogZ2V0IHN3aXRjaCBpbmdyZXNzIGludGVyZmFjZSBJRCAqL1xuLVx0aWZfaWQgPSB1cHBlcl8zMl9iaXRzKGRwYWEyX2ZkX2dldF9mbGMoZmQpKSBcdTAwMjYgMHgwMDAwRkZGRjtcbiYjNDM7XHRmbGMgPSBkcGFhMl9mZF9nZXRfZmxjKGZkKTtcbiYjNDM7XHRpZl9pZCA9IERQQUEyX0VUSFNXX0ZMQ19JRl9JRChmbGMpO1xuIFx0aWYgKGlmX2lkIFx1MDAzZT0gZXRoc3ctXHUwMDNlc3dfYXR0ci5udW1faWZzKSB7XG4gXHRcdGRldl9lcnIoZXRoc3ctXHUwMDNlZGV2LCBcJiMzNDtGcmFtZSByZWNlaXZlZCBmcm9tIHVua25vd24gaW50ZXJmYWNlIVxcblwmIzM0Oyk7XG4gXHRcdGdvdG8gZXJyX2ZyZWVfZmQ7XG5AQCAtMjU0MSwxMiAmIzQzOzMxNzQsMjAgQEAgc3RhdGljIHZvaWQgZHBhYTJfc3dpdGNoX3J4KHN0cnVjdCBkcGFhMl9zd2l0Y2hfZnEgKmZxLFxuIFx0XHR9XG4gXHR9XG4gXG4tXHRza2ItXHUwMDNlZGV2ID0gbmV0ZGV2O1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XG4mIzQzO1x0bGFnID0gcmN1X2RlcmVmZXJlbmNlKHBvcnRfcHJpdi1cdTAwM2VsYWcpO1xuJiM0MztcdGlmIChEUEFBMl9FVEhTV19GTENfSU1QUkVDSVNFX0lGX0lEKGZsYykgXHUwMDI2XHUwMDI2IGxhZylcbiYjNDM7XHRcdHNrYi1cdTAwM2VkZXYgPSBsYWctXHUwMDNlYm9uZF9kZXY7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0c2tiLVx1MDAzZWRldiA9IG5ldGRldjtcbiBcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgc2tiLVx1MDAzZWRldik7XG4gXG4gXHQvKiBTZXR1cCB0aGUgb2ZmbG9hZF9md2RfbWFyayBvbmx5IGlmIHRoZSBwb3J0IGlzIHVuZGVyIGEgYnJpZGdlICovXG4gXHRza2ItXHUwMDNlb2ZmbG9hZF9md2RfbWFyayA9ICEhKHBvcnRfcHJpdi1cdTAwM2VmZGItXHUwMDNlYnJpZGdlX2Rldik7XG4gXG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuIFx0bmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTtcbiBcbiBcdHJldHVybjtcbkBAIC0yNTYxLDYgJiM0MzszMjAyLDkgQEAgc3RhdGljIHZvaWQgZHBhYTJfc3dpdGNoX2RldGVjdF9mZWF0dXJlcyhzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3cpXG4gXG4gXHRpZiAoZXRoc3ctXHUwMDNlbWFqb3IgXHUwMDNlIDggfHwgKGV0aHN3LVx1MDAzZW1ham9yID09IDggXHUwMDI2XHUwMDI2IGV0aHN3LVx1MDAzZW1pbm9yIFx1MDAzZT0gNikpXG4gXHRcdGV0aHN3LVx1MDAzZWZlYXR1cmVzIHw9IEVUSFNXX0ZFQVRVUkVfTUFDX0FERFI7XG4mIzQzO1xuJiM0MztcdGlmIChldGhzdy1cdTAwM2VtYWpvciBcdTAwM2UgOCB8fCAoZXRoc3ctXHUwMDNlbWFqb3IgPT0gOCBcdTAwMjZcdTAwMjYgZXRoc3ctXHUwMDNlbWlub3IgXHUwMDNlPSAxMykpXG4mIzQzO1x0XHRldGhzdy1cdTAwM2VmZWF0dXJlcyB8PSBFVEhTV19GRUFUVVJFX0xBR19PRkZMT0FEO1xuIH1cbiBcbiBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9zZXR1cF9mcXMoc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3KVxuQEAgLTMxOTUsMTcgJiM0MzszODM5LDE1IEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX2luaXQoc3RydWN0IGZzbF9tY19kZXZpY2UgKnN3X2RldilcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLS8qIEFkZCBhbiBBQ0wgdG8gcmVkaXJlY3QgZnJhbWVzIHdpdGggc3BlY2lmaWMgZGVzdGluYXRpb24gTUFDIGFkZHJlc3MgdG9cbi0gKiBjb250cm9sIGludGVyZmFjZVxuLSAqL1xuJiM0MzsvKiBBZGQgYW4gQUNMIHRvIHJlZGlyZWN0IGZyYW1lcyB0byBjb250cm9sIGludGVyZmFjZSBiYXNlZCBvbiB0aGUgZHN0IE1BQyAqL1xuIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfdHJhcF9tYWNfYWRkcihzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYsXG4tXHRcdFx0XHRcdCAgIGNvbnN0IGNoYXIgKm1hYylcbiYjNDM7XHRcdFx0XHRcdCAgIGNvbnN0IHU4ICptYWMsIGNvbnN0IHU4ICptYXNrKVxuIHtcbiBcdHN0cnVjdCBkcGFhMl9zd2l0Y2hfYWNsX2VudHJ5IGFjbF9lbnRyeSA9IHswfTtcbiBcbiBcdC8qIE1hdGNoIG9uIHRoZSBkZXN0aW5hdGlvbiBNQUMgYWRkcmVzcyAqL1xuIFx0ZXRoZXJfYWRkcl9jb3B5KGFjbF9lbnRyeS5rZXkubWF0Y2gubDJfZGVzdF9tYWMsIG1hYyk7XG4tXHRldGhfYnJvYWRjYXN0X2FkZHIoYWNsX2VudHJ5LmtleS5tYXNrLmwyX2Rlc3RfbWFjKTtcbiYjNDM7XHRldGhlcl9hZGRyX2NvcHkoYWNsX2VudHJ5LmtleS5tYXNrLmwyX2Rlc3RfbWFjLCBtYXNrKTtcbiBcbiBcdC8qIFRyYXAgdG8gQ1BVICovXG4gXHRhY2xfZW50cnkuY2ZnLnByZWNlZGVuY2UgPSAwO1xuQEAgLTMyMTYsNyAmIzQzOzM4NTgsOCBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X3RyYXBfbWFjX2FkZHIoc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2LFxuIFxuIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfaW5pdChzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYsIHUxNiBwb3J0KVxuIHtcbi1cdGNvbnN0IGNoYXIgc3RwYVtFVEhfQUxFTl0gPSB7MHgwMSwgMHg4MCwgMHhjMiwgMHgwMCwgMHgwMCwgMHgwMH07XG4mIzQzO1x0Y29uc3QgdTggbGxfbWFjW0VUSF9BTEVOXSA9IHsweDAxLCAweDgwLCAweGMyLCAweDAwLCAweDAwLCAweDAwfTtcbiYjNDM7XHRjb25zdCB1OCBsbF9tYXNrW0VUSF9BTEVOXSA9IHsweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGYwfTtcbiBcdHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfdmxhbiB2bGFuID0ge1xuIFx0XHQub2JqLmlkID0gU1dJVENIREVWX09CSl9JRF9QT1JUX1ZMQU4sXG4gXHRcdC52aWQgPSBERUZBVUxUX1ZMQU5fSUQsXG5AQCAtMzI5MSw3ICYjNDM7MzkzNCw3IEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfaW5pdChzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYsIHUxNiBwb3J0KVxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X3RyYXBfbWFjX2FkZHIocG9ydF9wcml2LCBzdHBhKTtcbiYjNDM7XHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF90cmFwX21hY19hZGRyKHBvcnRfcHJpdiwgbGxfbWFjLCBsbF9tYXNrKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG5AQCAtMzMzMSw2ICYjNDM7Mzk3NCw5IEBAIHN0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9yZW1vdmUoc3RydWN0IGZzbF9tY19kZXZpY2UgKnN3X2RldilcbiBcdGRldiA9IFx1MDAyNnN3X2Rldi1cdTAwM2VkZXY7XG4gXHRldGhzdyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuIFxuJiM0MztcdC8qIE1ha2Ugc3VyZSB0aGF0IGFsbCBldmVudHMgd2VyZSBoYW5kbGVkIGJlZm9yZSB3ZSBrZnJlZSBhbnl0aGluZyAqL1xuJiM0MztcdGZsdXNoX3dvcmtxdWV1ZShldGhzdy1cdTAwM2V3b3JrcXVldWUpO1xuJiM0MztcbiBcdGRwYWEyX3N3aXRjaF90ZWFyZG93bl9pcnFzKHN3X2Rldik7XG4gXG4gXHRkcHN3X2Rpc2FibGUoZXRoc3ctXHUwMDNlbWNfaW8sIDAsIGV0aHN3LVx1MDAzZWRwc3dfaGFuZGxlKTtcbkBAIC0zMzQ0LDEyICYjNDM7Mzk5MCwxNSBAQCBzdGF0aWMgdm9pZCBkcGFhMl9zd2l0Y2hfcmVtb3ZlKHN0cnVjdCBmc2xfbWNfZGV2aWNlICpzd19kZXYpXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBEUEFBMl9TV0lUQ0hfUlhfTlVNX0ZRUzsgaSYjNDM7JiM0MzspXG4gXHRcdG5ldGlmX25hcGlfZGVsKFx1MDAyNmV0aHN3LVx1MDAzZWZxW2ldLm5hcGkpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZXRoc3ctXHUwMDNlc3dfYXR0ci5udW1faWZzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBldGhzdy1cdTAwM2Vzd19hdHRyLm51bV9pZnM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGRwYWEyX3N3aXRjaF9yZW1vdmVfcG9ydChldGhzdywgaSk7XG4mIzQzO1x0XHRtdXRleF9kZXN0cm95KFx1MDAyNmV0aHN3LVx1MDAzZWxhZ3NbaV0uZmRiX2xvY2spO1xuJiM0MztcdH1cbiBcbiBcdGtmcmVlKGV0aHN3LVx1MDAzZWZkYnMpO1xuIFx0a2ZyZWUoZXRoc3ctXHUwMDNlZmlsdGVyX2Jsb2Nrcyk7XG4gXHRrZnJlZShldGhzdy1cdTAwM2Vwb3J0cyk7XG4mIzQzO1x0a2ZyZWUoZXRoc3ctXHUwMDNlbGFncyk7XG4gXG4gXHRkcGFhMl9zd2l0Y2hfdGVhcmRvd24oc3dfZGV2KTtcbiBcbkBAIC0zMzc3LDYgJiM0Mzs0MDI2LDcgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcHJvYmVfcG9ydChzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3csXG4gXHRwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihwb3J0X25ldGRldik7XG4gXHRwb3J0X3ByaXYtXHUwMDNlbmV0ZGV2ID0gcG9ydF9uZXRkZXY7XG4gXHRwb3J0X3ByaXYtXHUwMDNlZXRoc3dfZGF0YSA9IGV0aHN3O1xuJiM0MztcdHJjdV9hc3NpZ25fcG9pbnRlcihwb3J0X3ByaXYtXHUwMDNlbGFnLCBOVUxMKTtcbiBcbiBcdG11dGV4X2luaXQoXHUwMDI2cG9ydF9wcml2LVx1MDAzZW1hY19sb2NrKTtcbiBcbkBAIC0zNDg0LDYgJiM0Mzs0MTM0LDIxIEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3Byb2JlKHN0cnVjdCBmc2xfbWNfZGV2aWNlICpzd19kZXYpXG4gXHRcdGdvdG8gZXJyX2ZyZWVfZmRicztcbiBcdH1cbiBcbiYjNDM7XHRldGhzdy1cdTAwM2VsYWdzID0ga2NhbGxvYyhldGhzdy1cdTAwM2Vzd19hdHRyLm51bV9pZnMsIHNpemVvZigqZXRoc3ctXHUwMDNlbGFncyksXG4mIzQzO1x0XHRcdCAgICAgIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghZXRoc3ctXHUwMDNlbGFncykge1xuJiM0MztcdFx0ZXJyID0gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWVfZmlsdGVyO1xuJiM0MztcdH1cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBldGhzdy1cdTAwM2Vzd19hdHRyLm51bV9pZnM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRldGhzdy1cdTAwM2VsYWdzW2ldLmJvbmRfZGV2ID0gTlVMTDtcbiYjNDM7XHRcdGV0aHN3LVx1MDAzZWxhZ3NbaV0uZXRoc3cgPSBldGhzdztcbiYjNDM7XHRcdGV0aHN3LVx1MDAzZWxhZ3NbaV0uaWQgPSBpICYjNDM7IDE7XG4mIzQzO1x0XHRldGhzdy1cdTAwM2VsYWdzW2ldLmluX3VzZSA9IDA7XG4mIzQzO1x0XHRtdXRleF9pbml0KFx1MDAyNmV0aHN3LVx1MDAzZWxhZ3NbaV0uZmRiX2xvY2spO1xuJiM0MztcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZXRoc3ctXHUwMDNlbGFnc1tpXS5mZGJzKTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZXRoc3ctXHUwMDNlc3dfYXR0ci5udW1faWZzOyBpJiM0MzsmIzQzOykge1xuIFx0XHRlcnIgPSBkcGFhMl9zd2l0Y2hfcHJvYmVfcG9ydChldGhzdywgaSk7XG4gXHRcdGlmIChlcnIpXG5AQCAtMzUzMCw2ICYjNDM7NDE5NSwxMCBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wcm9iZShzdHJ1Y3QgZnNsX21jX2RldmljZSAqc3dfZGV2KVxuIGVycl9mcmVlX25ldGRldjpcbiBcdGZvciAoaS0tOyBpIFx1MDAzZT0gMDsgaS0tKVxuIFx0XHRkcGFhMl9zd2l0Y2hfcmVtb3ZlX3BvcnQoZXRoc3csIGkpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGV0aHN3LVx1MDAzZXN3X2F0dHIubnVtX2lmczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRtdXRleF9kZXN0cm95KFx1MDAyNmV0aHN3LVx1MDAzZWxhZ3NbaV0uZmRiX2xvY2spO1xuJiM0MztcdGtmcmVlKGV0aHN3LVx1MDAzZWxhZ3MpO1xuJiM0MztlcnJfZnJlZV9maWx0ZXI6XG4gXHRrZnJlZShldGhzdy1cdTAwM2VmaWx0ZXJfYmxvY2tzKTtcbiBlcnJfZnJlZV9mZGJzOlxuIFx0a2ZyZWUoZXRoc3ctXHUwMDNlZmRicyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXN3aXRjaC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXN3aXRjaC5oXG5pbmRleCA0MmIzY2E3M2Y1NWQ1NC4uNjNiNzAyYjAwMDBjMmUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItc3dpdGNoLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guaFxuQEAgLTQxLDcgJiM0Mzs0MSw4IEBAXG4gI2RlZmluZSBFVEhTV19NQVhfRlJBTUVfTEVOR1RIXHQoRFBBQTJfTUZMIC0gVkxBTl9FVEhfSExFTiAtIEVUSF9GQ1NfTEVOKVxuICNkZWZpbmUgRVRIU1dfTDJfTUFYX0ZSTShtdHUpXHQoKG10dSkgJiM0MzsgVkxBTl9FVEhfSExFTiAmIzQzOyBFVEhfRkNTX0xFTilcbiBcbi0jZGVmaW5lIEVUSFNXX0ZFQVRVUkVfTUFDX0FERFJcdEJJVCgwKVxuJiM0MzsjZGVmaW5lIEVUSFNXX0ZFQVRVUkVfTUFDX0FERFJcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgRVRIU1dfRkVBVFVSRV9MQUdfT0ZGTE9BRFx0QklUKDEpXG4gXG4gLyogTnVtYmVyIG9mIHJlY2VpdmUgcXVldWVzIChvbmUgUlggYW5kIG9uZSBUWF9DT05GKSAqL1xuICNkZWZpbmUgRFBBQTJfU1dJVENIX1JYX05VTV9GUVNcdDJcbkBAIC04Niw2ICYjNDM7ODcsOSBAQFxuIFxuICNkZWZpbmUgRFBBQTJfRVRIU1dfUE9SVF9BQ0xfQ01EX0JVRl9TSVpFXHQyNTZcbiBcbiYjNDM7I2RlZmluZSBEUEFBMl9FVEhTV19GTENfSUZfSUQoZmxjKVx0XHQoKChmbGMpIFx1MDAzZVx1MDAzZSAzMikgXHUwMDI2IEdFTk1BU0soMTUsIDApKVxuJiM0MzsjZGVmaW5lIERQQUEyX0VUSFNXX0ZMQ19JTVBSRUNJU0VfSUZfSUQoZmxjKVx0KChmbGMpIFx1MDAyNiBCSVRfVUxMKDYzKSlcbiYjNDM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBkcGFhMl9zd2l0Y2hfcG9ydF9ldGh0b29sX29wcztcbiBcbiBzdHJ1Y3QgZXRoc3dfY29yZTtcbkBAIC05OSwxMiAmIzQzOzEwMywzMCBAQCBzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZxIHtcbiBcdHUzMiBmcWlkO1xuIH07XG4gXG4mIzQzO3N0cnVjdCBkcGFhMl9tYWNfYWRkciB7XG4mIzQzO1x0dW5zaWduZWQgY2hhciBhZGRyW0VUSF9BTEVOXTtcbiYjNDM7XHR1MTYgdmlkO1xuJiM0MztcdHJlZmNvdW50X3QgcmVmY291bnQ7XG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuJiM0Mzt9O1xuJiM0MztcbiBzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZkYiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZVx0KmJyaWRnZV9kZXY7XG4gXHR1MTZcdFx0XHRmZGJfaWQ7XG4gXHRib29sXHRcdFx0aW5fdXNlO1xuIH07XG4gXG4mIzQzO3N0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnIHtcbiYjNDM7XHRzdHJ1Y3QgZXRoc3dfY29yZVx0KmV0aHN3O1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlXHQqYm9uZF9kZXY7XG4mIzQzO1x0Ym9vbFx0XHRcdGluX3VzZTtcbiYjNDM7XHR1OFx0XHRcdGlkO1xuJiM0MztcdHN0cnVjdCBldGhzd19wb3J0X3ByaXZcdCpwcmltYXJ5O1xuJiM0MztcdC8qIFByb3RlY3RzIHRoZSBsaXN0IG9mIGZkYnMgaW5zdGFsbGVkIG9uIHRoaXMgTEFHICovXG4mIzQzO1x0c3RydWN0IG11dGV4XHRcdGZkYl9sb2NrO1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWRcdGZkYnM7XG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBkcGFhMl9zd2l0Y2hfYWNsX2VudHJ5IHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG4gXHR1MTZcdFx0XHRwcmlvO1xuQEAgLTE2Myw2ICYjNDM7MTg1LDggQEAgc3RydWN0IGV0aHN3X3BvcnRfcHJpdiB7XG4gXHRzdHJ1Y3QgZHBhYTJfbWFjXHQqbWFjO1xuIFx0LyogUHJvdGVjdHMgYWdhaW5zdCBjaGFuZ2VzIHRvIHBvcnRfcHJpdi1cdTAwM2VtYWMgKi9cbiBcdHN0cnVjdCBtdXRleFx0XHRtYWNfbG9jaztcbiYjNDM7XG4mIzQzO1x0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgX19yY3UgKmxhZztcbiB9O1xuIFxuIC8qIFN3aXRjaCBkYXRhICovXG5AQCAtMTkwLDYgJiM0MzsyMTQsOCBAQCBzdHJ1Y3QgZXRoc3dfY29yZSB7XG4gXHRzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZkYlx0XHQqZmRicztcbiBcdHN0cnVjdCBkcGFhMl9zd2l0Y2hfZmlsdGVyX2Jsb2NrICpmaWx0ZXJfYmxvY2tzO1xuIFx0dTE2XHRcdFx0XHRtaXJyb3JfcG9ydDtcbiYjNDM7XG4mIzQzO1x0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWdcdFx0KmxhZ3M7XG4gfTtcbiBcbiBzdGF0aWMgaW5saW5lIGludCBkcGFhMl9zd2l0Y2hfZ2V0X2luZGV4KHN0cnVjdCBldGhzd19jb3JlICpldGhzdyxcbkBAIC0yNzQsNCAmIzQzOzMwMCwxOCBAQCBpbnQgZHBhYTJfc3dpdGNoX2Jsb2NrX29mZmxvYWRfbWlycm9yKHN0cnVjdCBkcGFhMl9zd2l0Y2hfZmlsdGVyX2Jsb2NrICpibG9jayxcbiBcbiBpbnQgZHBhYTJfc3dpdGNoX2Jsb2NrX3Vub2ZmbG9hZF9taXJyb3Ioc3RydWN0IGRwYWEyX3N3aXRjaF9maWx0ZXJfYmxvY2sgKmJsb2NrLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYpO1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sXG4mIzQzO2RwYWEyX3N3aXRjaF9wb3J0X29mZmxvYWRzX2JyaWRnZV9wb3J0KHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdixcbiYjNDM7XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWcgPSByY3VfZGVyZWZlcmVuY2VfcnRubChwb3J0X3ByaXYtXHUwMDNlbGFnKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGxhZyBcdTAwMjZcdTAwMjYgbGFnLVx1MDAzZWJvbmRfZGV2ID09IGRldilcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdGlmIChwb3J0X3ByaXYtXHUwMDNlbmV0ZGV2ID09IGRldilcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiAjZW5kaWZcdC8qIF9fRVRIU1dfSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LWNtZC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwc3ctY21kLmhcbmluZGV4IDM5N2Q1NWYyYmQ5OTUwLi45YTIwNTVjNjQ5ODNjZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LWNtZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBzdy1jbWQuaFxuQEAgLTEyLDcgJiM0MzsxMiw3IEBAXG4gXG4gLyogRFBTVyBWZXJzaW9uICovXG4gI2RlZmluZSBEUFNXX1ZFUl9NQUpPUlx0XHQ4XG4tI2RlZmluZSBEUFNXX1ZFUl9NSU5PUlx0XHQ5XG4mIzQzOyNkZWZpbmUgRFBTV19WRVJfTUlOT1JcdFx0MTNcbiBcbiAjZGVmaW5lIERQU1dfQ01EX0JBU0VfVkVSU0lPTlx0MVxuICNkZWZpbmUgRFBTV19DTURfVkVSU0lPTl8yXHQyXG5AQCAtOTIsMTEgJiM0Mzs5MiwxNCBAQFxuICNkZWZpbmUgRFBTV19DTURJRF9DVFJMX0lGX1NFVF9QT09MUyAgICAgICAgRFBTV19DTURfSUQoMHgwQTEpXG4gI2RlZmluZSBEUFNXX0NNRElEX0NUUkxfSUZfRU5BQkxFICAgICAgICAgICBEUFNXX0NNRF9JRCgweDBBMilcbiAjZGVmaW5lIERQU1dfQ01ESURfQ1RSTF9JRl9ESVNBQkxFICAgICAgICAgIERQU1dfQ01EX0lEKDB4MEEzKVxuJiM0MzsjZGVmaW5lIERQU1dfQ01ESURfU0VUX0xBRyAgICAgICAgICAgICAgICAgIERQU1dfQ01EX1YyKDB4MEE0KVxuICNkZWZpbmUgRFBTV19DTURJRF9DVFJMX0lGX1NFVF9RVUVVRSAgICAgICAgRFBTV19DTURfSUQoMHgwQTYpXG4gXG4gI2RlZmluZSBEUFNXX0NNRElEX1NFVF9FR1JFU1NfRkxPT0QgICAgICAgICBEUFNXX0NNRF9JRCgweDBBQylcbiAjZGVmaW5lIERQU1dfQ01ESURfSUZfU0VUX0xFQVJOSU5HX01PREUgICAgIERQU1dfQ01EX0lEKDB4MEFEKVxuIFxuJiM0MzsjZGVmaW5lIERQU1dfQ01ESURfSUZfU0VUX0xBR19TVEFURSAgICAgICAgIERQU1dfQ01EX0lEKDB4MEIwKVxuJiM0MztcbiAvKiBNYWNyb3MgZm9yIGFjY2Vzc2luZyBjb21tYW5kIGZpZWxkcyBzbWFsbGVyIHRoYW4gMWJ5dGUgKi9cbiAjZGVmaW5lIERQU1dfTUFTSyhmaWVsZCkgICAgICAgIFxcXG4gXHRHRU5NQVNLKERQU1dfIyNmaWVsZCMjX1NISUZUICYjNDM7IERQU1dfIyNmaWVsZCMjX1NJWkUgLSAxLCBcXFxuQEAgLTU1Miw1ICYjNDM7NTU1LDE4IEBAIHN0cnVjdCBkcHN3X2NtZF9pZl9yZWZsZWN0aW9uIHtcbiBcdC8qIG9ubHkgMiBiaXRzIGZyb20gdGhlIExTQiAqL1xuIFx0dTggZmlsdGVyO1xuIH07XG4mIzQzO1xuJiM0MztzdHJ1Y3QgZHBzd19jbWRfbGFnIHtcbiYjNDM7XHR1OCBncm91cF9pZDtcbiYjNDM7XHR1OCBudW1faWZzO1xuJiM0MztcdHU4IHBhZFs2XTtcbiYjNDM7XHR1OCBpZl9pZFtEUFNXX01BWF9MQUdfSUZTXTtcbiYjNDM7XHR1OCBwaGFzZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBkcHN3X2NtZF9pZl9zZXRfbGFnX3N0YXRlIHtcbiYjNDM7XHRfX2xlMTYgaWZfaWQ7XG4mIzQzO1x0dTggdHhfZW5hYmxlZDtcbiYjNDM7fTtcbiAjcHJhZ21hIHBhY2socG9wKVxuICNlbmRpZiAvKiBfX0ZTTF9EUFNXX0NNRF9IICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwc3cuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LmNcbmluZGV4IGFiOTIxZDc1ZGViMmU4Li5mNzVjYmRjZTQyYmEyZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LmNcbkBAIC0xNjU5LDMgJiM0MzsxNjU5LDYzIEBAIGludCBkcHN3X2lmX3JlbW92ZV9yZWZsZWN0aW9uKHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLCB1MzIgY21kX2ZsYWdzLCB1MTYgdG9rZW4sXG4gXG4gXHRyZXR1cm4gbWNfc2VuZF9jb21tYW5kKG1jX2lvLCBcdTAwMjZjbWQpO1xuIH1cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBkcHN3X2xhZ19zZXQoKSAtIFNldCBMQUcgY29uZmlndXJhdGlvblxuJiM0MzsgKiBAbWNfaW86XHRQb2ludGVyIHRvIE1DIHBvcnRhbCYjMzk7cyBJL08gb2JqZWN0XG4mIzQzOyAqIEBjbWRfZmxhZ3M6XHRDb21tYW5kIGZsYWdzOyBvbmUgb3IgbW9yZSBvZiAmIzM5O01DX0NNRF9GTEFHXyYjMzk7XG4mIzQzOyAqIEB0b2tlbjpcdFRva2VuIG9mIERQU1cgb2JqZWN0XG4mIzQzOyAqIEBjZmc6XHRwb2ludGVyIHRvIExBRyBjb25maWd1cmF0aW9uXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogICAmIzM5OzAmIzM5OyBvbiBTdWNjZXNzOyBFcnJvciBjb2RlIG90aGVyd2lzZS5cbiYjNDM7ICovXG4mIzQzO2ludCBkcHN3X2xhZ19zZXQoc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHUzMiBjbWRfZmxhZ3MsIHUxNiB0b2tlbixcbiYjNDM7XHRcdCBjb25zdCBzdHJ1Y3QgZHBzd19sYWdfY2ZnICpjZmcpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZnNsX21jX2NvbW1hbmQgY21kID0geyAwIH07XG4mIzQzO1x0c3RydWN0IGRwc3dfY21kX2xhZyAqY21kX3BhcmFtcztcbiYjNDM7XHRpbnQgaSA9IDA7XG4mIzQzO1xuJiM0MztcdGNtZC5oZWFkZXIgPSBtY19lbmNvZGVfY21kX2hlYWRlcihEUFNXX0NNRElEX1NFVF9MQUcsIGNtZF9mbGFncywgdG9rZW4pO1xuJiM0MztcbiYjNDM7XHRpZiAoY2ZnLVx1MDAzZW51bV9pZnMgXHUwMDNlIERQU1dfTUFYX0xBR19JRlMpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdGNtZF9wYXJhbXMgPSAoc3RydWN0IGRwc3dfY21kX2xhZyAqKWNtZC5wYXJhbXM7XG4mIzQzO1x0Y21kX3BhcmFtcy1cdTAwM2Vncm91cF9pZCA9IGNmZy1cdTAwM2Vncm91cF9pZDtcbiYjNDM7XHRjbWRfcGFyYW1zLVx1MDAzZW51bV9pZnMgPSBjZmctXHUwMDNlbnVtX2lmcztcbiYjNDM7XHRjbWRfcGFyYW1zLVx1MDAzZXBoYXNlID0gY2ZnLVx1MDAzZXBoYXNlO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjZmctXHUwMDNlbnVtX2lmczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRjbWRfcGFyYW1zLVx1MDAzZWlmX2lkW2ldID0gY2ZnLVx1MDAzZWlmX2lkW2ldO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWNfc2VuZF9jb21tYW5kKG1jX2lvLCBcdTAwMjZjbWQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogZHBzd19pZl9zZXRfbGFnX3N0YXRlKCkgLSBDaGFuZ2UgcGVyIHBvcnQgTEFHIHN0YXRlXG4mIzQzOyAqIEBtY19pbzogICAgICBQb2ludGVyIHRvIE1DIHBvcnRhbCYjMzk7cyBJL08gb2JqZWN0XG4mIzQzOyAqIEBjbWRfZmxhZ3M6ICBDb21tYW5kIGZsYWdzOyBvbmUgb3IgbW9yZSBvZiAmIzM5O01DX0NNRF9GTEFHXyYjMzk7XG4mIzQzOyAqIEB0b2tlbjogICAgICBUb2tlbiBvZiBEUFNXIG9iamVjdFxuJiM0MzsgKiBAaWZfaWQ6ICAgICAgSUQgb2YgdGhlIHN3aXRjaCBpbnRlcmZhY2VcbiYjNDM7ICogQHR4X2VuYWJsZWQ6IFZhbHVlIG9mIHRoZSBwZXIgcG9ydCBMQUcgc3RhdGVcbiYjNDM7ICogICAgIC0gMCBpZiB0aGUgaW50ZXJmYWNlIHdpbGwgbm90IGJlIGFjdGl2ZSBhcyBwYXJ0IG9mIHRoZSBMQUcgZ3JvdXBcbiYjNDM7ICogICAgIC0gMSBpZiB0aGUgaW50ZXJmYWNlIHdpbGwgYmUgYWN0aXZlIGluIHRoZSBMQUcgZ3JvdXBcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAgICYjMzk7MCYjMzk7IG9uIFN1Y2Nlc3M7IEVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuJiM0MzsgKi9cbiYjNDM7aW50IGRwc3dfaWZfc2V0X2xhZ19zdGF0ZShzdHJ1Y3QgZnNsX21jX2lvICptY19pbywgdTMyIGNtZF9mbGFncywgdTE2IHRva2VuLFxuJiM0MztcdFx0XHQgIHUxNiBpZl9pZCwgdTggdHhfZW5hYmxlZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkcHN3X2NtZF9pZl9zZXRfbGFnX3N0YXRlICpjbWRfcGFyYW1zO1xuJiM0MztcdHN0cnVjdCBmc2xfbWNfY29tbWFuZCBjbWQgPSB7IDAgfTtcbiYjNDM7XG4mIzQzO1x0Y21kLmhlYWRlciA9IG1jX2VuY29kZV9jbWRfaGVhZGVyKERQU1dfQ01ESURfSUZfU0VUX0xBR19TVEFURSxcbiYjNDM7XHRcdFx0XHRcdCAgY21kX2ZsYWdzLCB0b2tlbik7XG4mIzQzO1xuJiM0MztcdGNtZF9wYXJhbXMgPSAoc3RydWN0IGRwc3dfY21kX2lmX3NldF9sYWdfc3RhdGUgKiljbWQucGFyYW1zO1xuJiM0MztcdGNtZF9wYXJhbXMtXHUwMDNlaWZfaWQgPSBjcHVfdG9fbGUxNihpZl9pZCk7XG4mIzQzO1x0Y21kX3BhcmFtcy1cdTAwM2V0eF9lbmFibGVkID0gdHhfZW5hYmxlZDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1jX3NlbmRfY29tbWFuZChtY19pbywgXHUwMDI2Y21kKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBzdy5oXG5pbmRleCBiOTBiZDM2M2Y0N2ExOS4uODlmMDI2N2RlOGU5YmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBzdy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBzdy5oXG5AQCAtMjAsNiAmIzQzOzIwLDggQEAgc3RydWN0IGZzbF9tY19pbztcbiBcbiAjZGVmaW5lIERQU1dfTUFYX0lGXHRcdDY0XG4gXG4mIzQzOyNkZWZpbmUgRFBTV19NQVhfTEFHX0lGU1x0OFxuJiM0MztcbiBpbnQgZHBzd19vcGVuKHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLCB1MzIgY21kX2ZsYWdzLCBpbnQgZHBzd19pZCwgdTE2ICp0b2tlbik7XG4gXG4gaW50IGRwc3dfY2xvc2Uoc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHUzMiBjbWRfZmxhZ3MsIHUxNiB0b2tlbik7XG5AQCAtNzg4LDQgJiM0Mzs3OTAsMzIgQEAgaW50IGRwc3dfaWZfYWRkX3JlZmxlY3Rpb24oc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHUzMiBjbWRfZmxhZ3MsIHUxNiB0b2tlbixcbiBcbiBpbnQgZHBzd19pZl9yZW1vdmVfcmVmbGVjdGlvbihzdHJ1Y3QgZnNsX21jX2lvICptY19pbywgdTMyIGNtZF9mbGFncywgdTE2IHRva2VuLFxuIFx0XHRcdCAgICAgIHUxNiBpZl9pZCwgY29uc3Qgc3RydWN0IGRwc3dfcmVmbGVjdGlvbl9jZmcgKmNmZyk7XG4mIzQzO1xuJiM0MzsvKiBMaW5rIEFnZ3JlZ2F0aW9uIEdyb3VwIGNvbmZpZ3VyYXRpb24gKi9cbiYjNDM7XG4mIzQzOyNkZWZpbmUgRFBTV19MQUdfU0VUX1BIQVNFX0FQUExZIDBcbiYjNDM7I2RlZmluZSBEUFNXX0xBR19TRVRfUEhBU0VfQ0hFQ0sgMVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBkcHN3X2xhZ19jZmcgLSBDb25maWd1cmF0aW9uIHN0cnVjdHVyZSBmb3IgYSBMQUcgZ3JvdXBcbiYjNDM7ICogQGdyb3VwX2lkOiBMaW5rIGFnZ3JlZ2F0aW9uIGdyb3VwIElELiBWYWxpZCB2YWx1ZXMgYXJlIGluIHRoZVxuJiM0MzsgKiBbMSwgRFBTV19NQVhfTEFHX0lGU10gcmFuZ2UuXG4mIzQzOyAqIEBudW1faWZzOiBOdW1iZXIgb2YgaW50ZXJmYWNlcyBpbiB0aGlzIExBRyBncm91cCwgdmFsaWQgcmFuZ2UgaXNcbiYjNDM7ICogWzAsIERQU1dfTUFYX0xBR19JRlNdLlxuJiM0MzsgKiBAaWZfaWQ6IEFycmF5IGNvbnRhaW5pbmcgdGhlIGludGVyZmFjZSBJRHMgb2YgdGhlIHBvcnRzIHBhcnQgb2YgYSBMQUcgZ3JvdXBcbiYjNDM7ICogQHBoYXNlOiBVc2UgRFBTV19MQUdfU0VUX1BIQVNFX0FQUExZIGZvciBMQUcgY29uZmlndXJhdGlvbiBwcm9jZXNzaW5nIG9yXG4mIzQzOyAqIERQU1dfTEFHX1NFVF9QSEFTRV9DSEVDSyBmb3IgTEFHIGNvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbi5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBkcHN3X2xhZ19jZmcge1xuJiM0MztcdHU4IGdyb3VwX2lkO1xuJiM0MztcdHU4IG51bV9pZnM7XG4mIzQzO1x0dTggaWZfaWRbRFBTV19NQVhfTEFHX0lGU107XG4mIzQzO1x0dTggcGhhc2U7XG4mIzQzO307XG4mIzQzO1xuJiM0MztpbnQgZHBzd19sYWdfc2V0KHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLCB1MzIgY21kX2ZsYWdzLCB1MTYgdG9rZW4sXG4mIzQzO1x0XHQgY29uc3Qgc3RydWN0IGRwc3dfbGFnX2NmZyAqY2ZnKTtcbiYjNDM7XG4mIzQzO2ludCBkcHN3X2lmX3NldF9sYWdfc3RhdGUoc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHUzMiBjbWRfZmxhZ3MsIHUxNiB0b2tlbixcbiYjNDM7XHRcdFx0ICB1MTYgaWZfaWQsIHU4IHR4X2VuYWJsZWQpO1xuICNlbmRpZiAvKiBfX0ZTTF9EUFNXX0ggKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMTo1MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgRnJlZXNjYWxlIERQQUEyIHN3aXRjaCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guYykgdG8gYWRkIExBRyBvZmZsb2FkIHN1cHBvcnQuIFRoaXMgZHJpdmVyIGRlcGVuZHMgb24gdGhlIGZzbC1tYyBidXMgKEZTTF9NQ19CVVMpLCB3aGljaCBpcyBzcGVjaWZpYyB0byBOWFAgUW9ySVEgRFBBQTIgaGFyZHdhcmUgKEFSQ0hfTEFZRVJTQ0FQRSkuIFRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBoYXJkd2FyZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWQ4OTc5YzdhNWZiYTNlZTRkZjJmMTVmYmJiZjEwYzc0OGQxNGU5NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVuIDI5IDExOjUyOjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXN3aXRjaC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXN3aXRjaC5jCmluZGV4IDg1OGJhODQ0YWM1MTY0Li44MzIwYjI2YzNmNzI2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXN3aXRjaC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guYwpAQCAtMjUsNiAmIzQzOzI1LDkgQEAKIAogI2RlZmluZSBERUZBVUxUX1ZMQU5fSUQJCQkxCiAKJiM0MztzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGRwYWEyX3N3aXRjaF9wb3J0X3N3aXRjaGRldl9uYjsKJiM0MztzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGRwYWEyX3N3aXRjaF9wb3J0X3N3aXRjaGRldl9ibG9ja2luZ19uYjsKJiM0MzsKIHN0YXRpYyB1MTYgZHBhYTJfc3dpdGNoX3BvcnRfZ2V0X2ZkYl9pZChzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYpCiB7CiAJcmV0dXJuIHBvcnRfcHJpdi0mZ3Q7ZmRiLSZndDtmZGJfaWQ7CkBAIC01MSw2ICYjNDM7NTQsMTcgQEAgZHBhYTJfc3dpdGNoX2ZpbHRlcl9ibG9ja19nZXRfdW51c2VkKHN0cnVjdCBldGhzd19jb3JlICpldGhzdykKIAlyZXR1cm4gTlVMTDsKIH0KIAomIzQzO3N0YXRpYyBzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqCiYjNDM7ZHBhYTJfc3dpdGNoX2xhZ19nZXRfdW51c2VkKHN0cnVjdCBldGhzd19jb3JlICpldGhzdykKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZXRoc3ctJmd0O3N3X2F0dHIubnVtX2lmczsgaSYjNDM7JiM0MzspCiYjNDM7CQlpZiAoIWV0aHN3LSZndDtsYWdzW2ldLmluX3VzZSkKJiM0MzsJCQlyZXR1cm4gJmFtcDtldGhzdy0mZ3Q7bGFnc1tpXTsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwogc3RhdGljIGJvb2wgZHBhYTJfc3dpdGNoX2ZkYl9pbl91c2VfYnlfb3RoZXJzKHN0cnVjdCBldGhzd19jb3JlICpldGhzdywKIAkJCQkJICAgICAgc3RydWN0IGRwYWEyX3N3aXRjaF9mZGIgKmZkYiwKIAkJCQkJICAgICAgc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqZXhjZXB0KQpAQCAtNzEsOSAmIzQzOzg1LDkgQEAgc3RhdGljIHN0cnVjdCBkcGFhMl9zd2l0Y2hfZmRiICoKIGRwYWEyX3N3aXRjaF9mZGJfZm9yX2pvaW4oc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2LAogCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqdXBwZXJfZGV2KQogewotCXN0cnVjdCBldGhzd19wb3J0X3ByaXYgKm90aGVyX3BvcnRfcHJpdjsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqb3RoZXJfZGV2OwotCXN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7CiYjNDM7CXN0cnVjdCBldGhzd19wb3J0X3ByaXYgKm90aGVyX3BvcnRfcHJpdiA9IE5VTEw7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpvdGhlcl9kZXYsICpvdGhlcl9kZXYyOwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkICppdGVyLCAqaXRlcjI7CiAKIAkvKiBUaGUgYmVsb3cgY2FsbCB0byBuZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KCkgZGVtYW5kcyB0aGUgUlROTCBsb2NrCiAJICogYmVpbmcgaGVsZC4gQXNzZXJ0IG9uIGl0IHNvIHRoYXQgaXQmIzM5O3MgZWFzaWVyIHRvIGNhdGNoIG5ldyBjb2RlCkBAIC04MiwxNyAmIzQzOzk2LDMyIEBAIGRwYWEyX3N3aXRjaF9mZGJfZm9yX2pvaW4oc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2LAogCUFTU0VSVF9SVE5MKCk7CiAKIAkvKiBJZiBwYXJ0IG9mIGEgYnJpZGdlLCB1c2UgdGhlIEZEQiBvZiB0aGUgZmlyc3QgZHBhYTIgc3dpdGNoIGludGVyZmFjZQotCSAqIHRvIGJlIHByZXNlbnQgaW4gdGhhdCBicmlkZ2UKJiM0MzsJICogdG8gYmUgcHJlc2VudCBpbiB0aGF0IGJyaWRnZS4gVGhlIHNlYXJjaCBkZXNjZW5kcyBvbmUgbGV2ZWwgdGhyb3VnaAomIzQzOwkgKiBhIGJyaWRnZWQgYm9uZCYjMzk7cyBsb3dlcnMgYXMgd2VsbC4KIAkgKi8KIAluZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KHVwcGVyX2Rldiwgb3RoZXJfZGV2LCBpdGVyKSB7Ci0JCWlmICghZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrKG90aGVyX2RldikpCi0JCQljb250aW51ZTsKJiM0MzsJCWlmIChuZXRpZl9pc19sYWdfbWFzdGVyKG90aGVyX2RldikpIHsKJiM0MzsJCQluZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KG90aGVyX2Rldiwgb3RoZXJfZGV2MiwgaXRlcjIpIHsKJiM0MzsJCQkJaWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2sob3RoZXJfZGV2MikpCiYjNDM7CQkJCQljb250aW51ZTsKIAotCQlpZiAob3RoZXJfZGV2ID09IHBvcnRfcHJpdi0mZ3Q7bmV0ZGV2KQotCQkJY29udGludWU7CiYjNDM7CQkJCWlmIChvdGhlcl9kZXYyID09IHBvcnRfcHJpdi0mZ3Q7bmV0ZGV2KQomIzQzOwkJCQkJY29udGludWU7CiAKLQkJb3RoZXJfcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYob3RoZXJfZGV2KTsKLQkJcmV0dXJuIG90aGVyX3BvcnRfcHJpdi0mZ3Q7ZmRiOwomIzQzOwkJCQlvdGhlcl9wb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihvdGhlcl9kZXYyKTsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhvdGhlcl9kZXYpKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQlpZiAob3RoZXJfZGV2ID09IHBvcnRfcHJpdi0mZ3Q7bmV0ZGV2KQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQlvdGhlcl9wb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihvdGhlcl9kZXYpOwomIzQzOwkJfQomIzQzOwkJaWYgKG90aGVyX3BvcnRfcHJpdikKJiM0MzsJCQlyZXR1cm4gb3RoZXJfcG9ydF9wcml2LSZndDtmZGI7CiAJfQogCiAJcmV0dXJuIHBvcnRfcHJpdi0mZ3Q7ZmRiOwpAQCAtNTM3LDYgJiM0Mzs1NjYsMTAzIEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2RlbF9tYyhzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYsCiAJcmV0dXJuIGVycjsKIH0KIAomIzQzO3N0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2FkZChzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYsCiYjNDM7CQkJCSAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcikKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlmIChpc191bmljYXN0X2V0aGVyX2FkZHIoYWRkcikpCiYjNDM7CQllcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfYWRkX3VjKHBvcnRfcHJpdiwgYWRkcik7CiYjNDM7CWVsc2UKJiM0MzsJCWVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9hZGRfbWMocG9ydF9wcml2LCBhZGRyKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsKHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiwKJiM0MzsJCQkJICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKQomIzQzO3sKJiM0MzsJaWYgKGlzX3VuaWNhc3RfZXRoZXJfYWRkcihhZGRyKSkKJiM0MzsJCXJldHVybiBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsX3VjKHBvcnRfcHJpdiwgYWRkcik7CiYjNDM7CWVsc2UKJiM0MzsJCXJldHVybiBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsX21jKHBvcnRfcHJpdiwgYWRkcik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgZHBhYTJfbWFjX2FkZHIgKgomIzQzO2RwYWEyX3N3aXRjaF9tYWNfYWRkcl9maW5kKHN0cnVjdCBsaXN0X2hlYWQgKmFkZHJfbGlzdCwKJiM0MzsJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCB1MTYgdmlkKQomIzQzO3sKJiM0MzsJc3RydWN0IGRwYWEyX21hY19hZGRyICphOwomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGEsIGFkZHJfbGlzdCwgbGlzdCkKJiM0MzsJCWlmIChldGhlcl9hZGRyX2VxdWFsKGEtJmd0O2FkZHIsIGFkZHIpICZhbXA7JmFtcDsgYS0mZ3Q7dmlkID09IHZpZCkKJiM0MzsJCQlyZXR1cm4gYTsKJiM0MzsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX2xhZ19mZGJfYWRkKHN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWcsCiYjNDM7CQkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCB1MTYgdmlkKQomIzQzO3sKJiM0MzsJc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbGFnLSZndDtwcmltYXJ5OwomIzQzOwlzdHJ1Y3QgZHBhYTJfbWFjX2FkZHIgKmE7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bGFnLSZndDtmZGJfbG9jayk7CiYjNDM7CiYjNDM7CWEgPSBkcGFhMl9zd2l0Y2hfbWFjX2FkZHJfZmluZCgmYW1wO2xhZy0mZ3Q7ZmRicywgYWRkciwgdmlkKTsKJiM0MzsJaWYgKGEpIHsKJiM0MzsJCXJlZmNvdW50X2luYygmYW1wO2EtJmd0O3JlZmNvdW50KTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWEgPSBremFsbG9jKHNpemVvZigqYSksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWEpIHsKJiM0MzsJCWVyciA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfYWRkKHBvcnRfcHJpdiwgYWRkcik7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWtmcmVlKGEpOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXRoZXJfYWRkcl9jb3B5KGEtJmd0O2FkZHIsIGFkZHIpOwomIzQzOwlhLSZndDt2aWQgPSB2aWQ7CiYjNDM7CXJlZmNvdW50X3NldCgmYW1wO2EtJmd0O3JlZmNvdW50LCAxKTsKJiM0MzsJbGlzdF9hZGRfdGFpbCgmYW1wO2EtJmd0O2xpc3QsICZhbXA7bGFnLSZndDtmZGJzKTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2xhZy0mZ3Q7ZmRiX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkcGFhMl9zd2l0Y2hfbGFnX2ZkYl9kZWwoc3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZywKJiM0MzsJCQkJICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCB1MTYgdmlkKQomIzQzO3sKJiM0MzsJc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbGFnLSZndDtwcmltYXJ5OwomIzQzOwlzdHJ1Y3QgZHBhYTJfbWFjX2FkZHIgKmE7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtsYWctJmd0O2ZkYl9sb2NrKTsKJiM0MzsKJiM0MzsJYSA9IGRwYWEyX3N3aXRjaF9tYWNfYWRkcl9maW5kKCZhbXA7bGFnLSZndDtmZGJzLCBhZGRyLCB2aWQpOwomIzQzOwlpZiAoIWEpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWYgKCFyZWZjb3VudF9kZWNfYW5kX3Rlc3QoJmFtcDthLSZndDtyZWZjb3VudCkpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJbGlzdF9kZWwoJmFtcDthLSZndDtsaXN0KTsKJiM0MzsJa2ZyZWUoYSk7CiYjNDM7CiYjNDM7CWRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9kZWwocG9ydF9wcml2LCBhZGRyKTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2xhZy0mZ3Q7ZmRiX2xvY2spOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9wb3J0X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJCQlzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKQogewpAQCAtMTQ4NSw2ICYjNDM7MTYxMSwzMyBAQCBib29sIGRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCXJldHVybiBuZXRkZXYtJmd0O25ldGRldl9vcHMgPT0gJmFtcDtkcGFhMl9zd2l0Y2hfcG9ydF9vcHM7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBkcGFhMl9zd2l0Y2hfZm9yZWlnbl9kZXZfY2hlY2soY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkJCSAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpmb3JlaWduX2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CXN0cnVjdCBldGhzd19jb3JlICpldGhzdyA9IHBvcnRfcHJpdi0mZ3Q7ZXRoc3dfZGF0YTsKJiM0MzsJc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqb3RoZXJfcG9ydDsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWlmIChuZXRpZl9pc19icmlkZ2VfbWFzdGVyKGZvcmVpZ25fZGV2KSkKJiM0MzsJCWlmIChwb3J0X3ByaXYtJmd0O2ZkYi0mZ3Q7YnJpZGdlX2RldiA9PSBmb3JlaWduX2RldikKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChuZXRpZl9pc19icmlkZ2VfcG9ydChmb3JlaWduX2RldikpIHsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBldGhzdy0mZ3Q7c3dfYXR0ci5udW1faWZzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCW90aGVyX3BvcnQgPSBldGhzdy0mZ3Q7cG9ydHNbaV07CiYjNDM7CiYjNDM7CQkJaWYgKCFvdGhlcl9wb3J0KQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQlpZiAoZHBhYTJfc3dpdGNoX3BvcnRfb2ZmbG9hZHNfYnJpZGdlX3BvcnQob3RoZXJfcG9ydCwKJiM0MzsJCQkJCQkJCSAgIGZvcmVpZ25fZGV2KSkKJiM0MzsJCQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfY29ubmVjdF9tYWMoc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2KQogewogCXN0cnVjdCBmc2xfbWNfZGV2aWNlICpkcHN3X3BvcnRfZGV2LCAqZHBtYWNfZGV2OwpAQCAtMTg2MCw1MSAmIzQzOzIwMTMsMzIgQEAgaW50IGRwYWEyX3N3aXRjaF9wb3J0X3ZsYW5zX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJCQkgIHZsYW4tJmd0O2NoYW5nZWQpOwogfQogCi1zdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2xvb2t1cF9hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBpc191YywKLQkJCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpCi17Ci0Jc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmxpc3QgPSAoaXNfdWMpID8gJmFtcDtuZXRkZXYtJmd0O3VjIDogJmFtcDtuZXRkZXYtJmd0O21jOwotCXN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7Ci0KLQluZXRpZl9hZGRyX2xvY2tfYmgobmV0ZGV2KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhhLCAmYW1wO2xpc3QtJmd0O2xpc3QsIGxpc3QpIHsKLQkJaWYgKGV0aGVyX2FkZHJfZXF1YWwoaGEtJmd0O2FkZHIsIGFkZHIpKSB7Ci0JCQluZXRpZl9hZGRyX3VubG9ja19iaChuZXRkZXYpOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQl9Ci0JbmV0aWZfYWRkcl91bmxvY2tfYmgobmV0ZGV2KTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9tZGJfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkJICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X29ial9wb3J0X21kYiAqbWRiKQogewogCXN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JaW50IGVycjsKJiM0MzsJc3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZzsKIAotCS8qIENoZWNrIGlmIGFkZHJlc3MgaXMgYWxyZWFkeSBzZXQgb24gdGhpcyBwb3J0ICovCi0JaWYgKGRwYWEyX3N3aXRjaF9wb3J0X2xvb2t1cF9hZGRyZXNzKG5ldGRldiwgMCwgbWRiLSZndDthZGRyKSkKLQkJcmV0dXJuIC1FRVhJU1Q7Ci0KLQllcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfYWRkX21jKHBvcnRfcHJpdiwgbWRiLSZndDthZGRyKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gZGV2X21jX2FkZChuZXRkZXYsIG1kYi0mZ3Q7YWRkcik7Ci0JaWYgKGVycikgewotCQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtkZXZfbWNfYWRkIGVyciAlZFxuJiMzNDssIGVycik7Ci0JCWRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9kZWxfbWMocG9ydF9wcml2LCBtZGItJmd0O2FkZHIpOwotCX0KLQotCXJldHVybiBlcnI7CiYjNDM7CWxhZyA9IHJ0bmxfZGVyZWZlcmVuY2UocG9ydF9wcml2LSZndDtsYWcpOwomIzQzOwlpZiAobGFnKQomIzQzOwkJcmV0dXJuIGRwYWEyX3N3aXRjaF9sYWdfZmRiX2FkZChsYWcsIG1kYi0mZ3Q7YWRkciwgbWRiLSZndDt2aWQpOwomIzQzOwllbHNlCiYjNDM7CQlyZXR1cm4gZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2FkZChwb3J0X3ByaXYsIG1kYi0mZ3Q7YWRkcik7CiB9CiAKLXN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfb2JqX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAotCQkJCSAgICAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmogKm9iaikKJiM0MztzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X29ial9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgY29uc3Qgdm9pZCAqY3R4LAomIzQzOwkJCQkgICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqICpvYmosCiYjNDM7CQkJCSAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewomIzQzOwlzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCWludCBlcnI7CiAKJiM0MzsJaWYgKGN0eCAmYW1wOyZhbXA7IGN0eCAhPSBwb3J0X3ByaXYpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9vZmZsb2Fkc19icmlkZ2VfcG9ydChwb3J0X3ByaXYsIG9iai0mZ3Q7b3JpZ19kZXYpKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwogCXN3aXRjaCAob2JqLSZndDtpZCkgewogCWNhc2UgU1dJVENIREVWX09CSl9JRF9QT1JUX1ZMQU46CiAJCWVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X3ZsYW5zX2FkZChuZXRkZXYsCkBAIC0yMDAwLDI5ICYjNDM7MjEzNCwyOSBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X21kYl9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCQkgICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfbWRiICptZGIpCiB7CiAJc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlpbnQgZXJyOwotCi0JaWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9sb29rdXBfYWRkcmVzcyhuZXRkZXYsIDAsIG1kYi0mZ3Q7YWRkcikpCi0JCXJldHVybiAtRU5PRU5UOwotCi0JZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2RlbF9tYyhwb3J0X3ByaXYsIG1kYi0mZ3Q7YWRkcik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKJiM0MzsJc3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZzsKIAotCWVyciA9IGRldl9tY19kZWwobmV0ZGV2LCBtZGItJmd0O2FkZHIpOwotCWlmIChlcnIpIHsKLQkJbmV0ZGV2X2VycihuZXRkZXYsICYjMzQ7ZGV2X21jX2RlbCBlcnIgJWRcbiYjMzQ7LCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KJiM0MzsJbGFnID0gcnRubF9kZXJlZmVyZW5jZShwb3J0X3ByaXYtJmd0O2xhZyk7CiYjNDM7CWlmIChsYWcpCiYjNDM7CQlkcGFhMl9zd2l0Y2hfbGFnX2ZkYl9kZWwobGFnLCBtZGItJmd0O2FkZHIsIG1kYi0mZ3Q7dmlkKTsKJiM0MzsJZWxzZQomIzQzOwkJZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2RlbChwb3J0X3ByaXYsIG1kYi0mZ3Q7YWRkcik7CiAKLQlyZXR1cm4gZXJyOwomIzQzOwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9vYmpfZGVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7c3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9vYmpfZGVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGNvbnN0IHZvaWQgKmN0eCwKIAkJCQkgICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqICpvYmopCiB7CiYjNDM7CXN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJaW50IGVycjsKIAomIzQzOwlpZiAoY3R4ICZhbXA7JmFtcDsgY3R4ICE9IHBvcnRfcHJpdikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X29mZmxvYWRzX2JyaWRnZV9wb3J0KHBvcnRfcHJpdiwgb2JqLSZndDtvcmlnX2RldikpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiAJc3dpdGNoIChvYmotJmd0O2lkKSB7CiAJY2FzZSBTV0lUQ0hERVZfT0JKX0lEX1BPUlRfVkxBTjoKIAkJZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfdmxhbnNfZGVsKG5ldGRldiwgU1dJVENIREVWX09CSl9QT1JUX1ZMQU4ob2JqKSk7CkBAIC0yMDQ4LDYgJiM0MzsyMTgyLDIxIEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfYXR0cl9zZXRfZXZlbnQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAlyZXR1cm4gbm90aWZpZXJfZnJvbV9lcnJubyhlcnIpOwogfQogCiYjNDM7c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICoKJiM0MztkcGFhMl9zd2l0Y2hfcG9ydF90b19icmlkZ2VfcG9ydChzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqbGFnOwomIzQzOwomIzQzOwlpZiAoIXBvcnRfcHJpdi0mZ3Q7ZmRiLSZndDticmlkZ2VfZGV2KQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CWxhZyA9IHJ0bmxfZGVyZWZlcmVuY2UocG9ydF9wcml2LSZndDtsYWcpOwomIzQzOwlpZiAobGFnKQomIzQzOwkJcmV0dXJuIGxhZy0mZ3Q7Ym9uZF9kZXY7CiYjNDM7CiYjNDM7CXJldHVybiBwb3J0X3ByaXYtJmd0O25ldGRldjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2JyaWRnZV9qb2luKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqdXBwZXJfZGV2LAogCQkJCQkgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQpAQCAtMjA1NSw2ICYjNDM7MjIwNCw3IEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfYnJpZGdlX2pvaW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAlzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBkcGFhMl9zd2l0Y2hfZmRiICpvbGRfZmRiID0gcG9ydF9wcml2LSZndDtmZGI7CiAJc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3ID0gcG9ydF9wcml2LSZndDtldGhzd19kYXRhOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqYnJwb3J0X2RldjsKIAlib29sIGxlYXJuX2VuYTsKIAlpbnQgZXJyOwogCkBAIC0yMDY2LDcgJiM0MzsyMjE2LDggQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9icmlkZ2Vfam9pbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCWRwYWEyX3N3aXRjaF9wb3J0X3NldF9mZGIocG9ydF9wcml2LCB1cHBlcl9kZXYsIHRydWUpOwogCiAJLyogSW5oZXJpdCB0aGUgaW5pdGlhbCBicmlkZ2UgcG9ydCBsZWFybmluZyBzdGF0ZSAqLwotCWxlYXJuX2VuYSA9IGJyX3BvcnRfZmxhZ19pc19zZXQobmV0ZGV2LCBCUl9MRUFSTklORyk7CiYjNDM7CWJycG9ydF9kZXYgPSBkcGFhMl9zd2l0Y2hfcG9ydF90b19icmlkZ2VfcG9ydChwb3J0X3ByaXYpOwomIzQzOwlsZWFybl9lbmEgPSBicl9wb3J0X2ZsYWdfaXNfc2V0KGJycG9ydF9kZXYsIEJSX0xFQVJOSU5HKTsKIAllcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9zZXRfbGVhcm5pbmcocG9ydF9wcml2LCBsZWFybl9lbmEpOwogCXBvcnRfcHJpdi0mZ3Q7bGVhcm5fZW5hID0gbGVhcm5fZW5hOwogCkBAIC0yMDgwLDggJiM0MzsyMjMxLDExIEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfYnJpZGdlX2pvaW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9lZ3Jlc3NfZmxvb2Q7CiAKLQllcnIgPSBzd2l0Y2hkZXZfYnJpZGdlX3BvcnRfb2ZmbG9hZChuZXRkZXYsIG5ldGRldiwgTlVMTCwKLQkJCQkJICAgIE5VTEwsIE5VTEwsIGZhbHNlLCBleHRhY2spOwomIzQzOwlicnBvcnRfZGV2ID0gZHBhYTJfc3dpdGNoX3BvcnRfdG9fYnJpZGdlX3BvcnQocG9ydF9wcml2KTsKJiM0MzsJZXJyID0gc3dpdGNoZGV2X2JyaWRnZV9wb3J0X29mZmxvYWQoYnJwb3J0X2RldiwgbmV0ZGV2LCBwb3J0X3ByaXYsCiYjNDM7CQkJCQkgICAgJmFtcDtkcGFhMl9zd2l0Y2hfcG9ydF9zd2l0Y2hkZXZfbmIsCiYjNDM7CQkJCQkgICAgJmFtcDtkcGFhMl9zd2l0Y2hfcG9ydF9zd2l0Y2hkZXZfYmxvY2tpbmdfbmIsCiYjNDM7CQkJCQkgICAgZmFsc2UsIGV4dGFjayk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfc3dpdGNoZGV2X29mZmxvYWQ7CiAKQEAgLTIxMTUsNyAmIzQzOzIyNjksMjIgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9yZXN0b3JlX3J4dmxhbihzdHJ1Y3QgbmV0X2RldmljZSAqdmRldiwgaW50IHZpZCwgdm8KIAogc3RhdGljIHZvaWQgZHBhYTJfc3dpdGNoX3BvcnRfcHJlX2JyaWRnZV9sZWF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewotCXN3aXRjaGRldl9icmlkZ2VfcG9ydF91bm9mZmxvYWQobmV0ZGV2LCBOVUxMLCBOVUxMLCBOVUxMKTsKJiM0MzsJc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3ID0gcG9ydF9wcml2LSZndDtldGhzd19kYXRhOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqYnJwb3J0X2RldjsKJiM0MzsKJiM0MzsJYnJwb3J0X2RldiA9IGRwYWEyX3N3aXRjaF9wb3J0X3RvX2JyaWRnZV9wb3J0KHBvcnRfcHJpdik7CiYjNDM7CWlmICghYnJwb3J0X2RldikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc3dpdGNoZGV2X2JyaWRnZV9wb3J0X3Vub2ZmbG9hZChicnBvcnRfZGV2LCBwb3J0X3ByaXYsCiYjNDM7CQkJCQkmYW1wO2RwYWEyX3N3aXRjaF9wb3J0X3N3aXRjaGRldl9uYiwKJiM0MzsJCQkJCSZhbXA7ZHBhYTJfc3dpdGNoX3BvcnRfc3dpdGNoZGV2X2Jsb2NraW5nX25iKTsKJiM0MzsKJiM0MzsJLyogTWFrZSBzdXJlIHRoYXQgYW55IEZEQiBhZGQvZGVsIG9wZXJhdGlvbnMgYXJlIGNvbXBsZXRlZCBiZWZvcmUgdGhlCiYjNDM7CSAqIGJyaWRnZSBsYXlvdXQgY2hhbmdlcwomIzQzOwkgKi8KJiM0MzsJZmx1c2hfd29ya3F1ZXVlKGV0aHN3LSZndDt3b3JrcXVldWUpOwogfQogCiBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2JyaWRnZV9sZWF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQpAQCAtMjE3NywzMCAmIzQzOzIzNDYsNTMgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9icmlkZ2VfbGVhdmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAkJCQkJICBmYWxzZSk7CiB9CiAKJiM0MztzdGF0aWMgaW50CiYjNDM7ZHBhYTJfc3dpdGNoX2hhdmVfdmxhbl91cHBlcihzdHJ1Y3QgbmV0X2RldmljZSAqdXBwZXJfZGV2LAomIzQzOwkJCSAgICAgX19hbHdheXNfdW51c2VkIHN0cnVjdCBuZXRkZXZfbmVzdGVkX3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gaXNfdmxhbl9kZXYodXBwZXJfZGV2KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wcmV2ZW50X2JyaWRnaW5nX3dpdGhfODAyMXFfdXBwZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqdXBwZXJfZGV2OwotCXN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7CiYjNDM7CXN0cnVjdCBuZXRkZXZfbmVzdGVkX3ByaXYgcHJpdiA9IHt9OwogCiAJLyogUkNVIHJlYWQgbG9jayBub3QgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UgaGF2ZSB3cml0ZS1zaWRlIHByb3RlY3Rpb24KLQkgKiAocnRubF9tdXRleCksIGhvd2V2ZXIgYSBub24tcmN1IGl0ZXJhdG9yIGRvZXMgbm90IGV4aXN0LgomIzQzOwkgKiAocnRubF9tdXRleCksIGhvd2V2ZXIgYSBub24tcmN1IGl0ZXJhdG9yIGRvZXMgbm90IGV4aXN0LiBXYWxrIHRoZQomIzQzOwkgKiBlbnRpcmUgdXBwZXIgY2hhaW4gc28gdGhhdCBhIFZMQU4gZGV2aWNlIHN0YWNrZWQgb24gYSBpbnRlcm1lZGlhdGUKJiM0MzsJICogYm9uZCBpcyBjYXVnaHQgdG9vLgogCSAqLwotCW5ldGRldl9mb3JfZWFjaF91cHBlcl9kZXZfcmN1KG5ldGRldiwgdXBwZXJfZGV2LCBpdGVyKQotCQlpZiAoaXNfdmxhbl9kZXYodXBwZXJfZGV2KSkKLQkJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJaWYgKG5ldGRldl93YWxrX2FsbF91cHBlcl9kZXZfcmN1KG5ldGRldiwgZHBhYTJfc3dpdGNoX2hhdmVfdmxhbl91cHBlciwKJiM0MzsJCQkJCSAgJmFtcDtwcml2KSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBkcGFhMl9zd2l0Y2hfY2hlY2tfZHBzd19pbnN0YW5jZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkJICAgIHN0cnVjdCBuZXRkZXZfbmVzdGVkX3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSAoc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqKXByaXYtJmd0O2RhdGE7CiYjNDM7CXN0cnVjdCBldGhzd19wb3J0X3ByaXYgKm90aGVyX3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwomIzQzOwlpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhkZXYpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChvdGhlcl9wcml2LSZndDtldGhzd19kYXRhID09IHBvcnRfcHJpdi0mZ3Q7ZXRoc3dfZGF0YSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4gMTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50CiBkcGFhMl9zd2l0Y2hfcHJlY2hhbmdldXBwZXJfc2FuaXR5X2NoZWNrcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICp1cHBlcl9kZXYsCiAJCQkJCSAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqb3RoZXJfcG9ydF9wcml2OwotCXN0cnVjdCBuZXRfZGV2aWNlICpvdGhlcl9kZXY7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqaXRlcjsKJiM0MzsJc3RydWN0IG5ldGRldl9uZXN0ZWRfcHJpdiBkYXRhID0gewomIzQzOwkJLmRhdGEgPSAodm9pZCAqKXBvcnRfcHJpdiwKJiM0MzsJfTsKIAlpbnQgZXJyOwogCiAJaWYgKCFicl92bGFuX2VuYWJsZWQodXBwZXJfZGV2KSkgewpAQCAtMjIxNSw2ICYjNDM7MjQwNyw3MCBAQCBkcGFhMl9zd2l0Y2hfcHJlY2hhbmdldXBwZXJfc2FuaXR5X2NoZWNrcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQlyZXR1cm4gZXJyOwogCX0KIAomIzQzOwllcnIgPSBuZXRkZXZfd2Fsa19hbGxfbG93ZXJfZGV2KHVwcGVyX2RldiwKJiM0MzsJCQkJCWRwYWEyX3N3aXRjaF9jaGVja19kcHN3X2luc3RhbmNlLAomIzQzOwkJCQkJJmFtcDtkYXRhKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJICAgJiMzNDtJbnRlcmZhY2UgZnJvbSBhIGRpZmZlcmVudCBEUFNXIGlzIGluIHRoZSBicmlkZ2UgYWxyZWFkeSYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wcmVfbGFnX2pvaW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqdXBwZXJfZGV2LAomIzQzOwkJCQkgICAgIHN0cnVjdCBuZXRkZXZfbGFnX3VwcGVyX2luZm8gKmluZm8sCiYjNDM7CQkJCSAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3ID0gcG9ydF9wcml2LSZndDtldGhzd19kYXRhOwomIzQzOwlzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpvdGhlcl9wb3J0X3ByaXY7CiYjNDM7CXN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWcgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgZHBzd19sYWdfY2ZnIGNmZyA9IHswfTsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm90aGVyX2RldjsKJiM0MzsJaW50IGksIG51bV9pZnMgPSAwLCBlcnI7CiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7CiYjNDM7CiYjNDM7CWlmICghKGV0aHN3LSZndDtmZWF0dXJlcyAmYW1wOyBFVEhTV19GRUFUVVJFX0xBR19PRkZMT0FEKSkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJICAgJiMzNDtMQUcgb2ZmbG9hZCBpcyBzdXBwb3J0ZWQgb25seSBmb3IgRFBTVyAmZ3Q7PSB2OC4xMyYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaW5mby0mZ3Q7dHhfdHlwZSAhPSBORVRERVZfTEFHX1RYX1RZUEVfSEFTSCkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJICAgJiMzNDtDYW4gb25seSBvZmZsb2FkIExBRyB1c2luZyBoYXNoIFRYIHR5cGUmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGluZm8tJmd0O2hhc2hfdHlwZSAhPSBORVRERVZfTEFHX0hBU0hfTDIzKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCAmIzM0O0NhbiBvbmx5IG9mZmxvYWQgTDImIzQzO0wzIFR4IGhhc2gmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9oYXNfbWFjKHBvcnRfcHJpdikpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7T25seSBzd2l0Y2ggaW50ZXJmYWNlcyBjb25uZWN0ZWQgdG8gTUFDcyBjYW4gYmUgdW5kZXIgYSBMQUcmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodmxhbl91c2VzX2Rldih1cHBlcl9kZXYpKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O0Nhbm5vdCBqb2luIGEgTEFHIHVwcGVyIHRoYXQgaGFzIGEgVkxBTiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZXRoc3ctJmd0O3N3X2F0dHIubnVtX2lmczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICghZXRoc3ctJmd0O2xhZ3NbaV0uaW5fdXNlKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKGV0aHN3LSZndDtsYWdzW2ldLmJvbmRfZGV2ICE9IHVwcGVyX2RldikKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWxhZyA9ICZhbXA7ZXRoc3ctJmd0O2xhZ3NbaV07CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwogCW5ldGRldl9mb3JfZWFjaF9sb3dlcl9kZXYodXBwZXJfZGV2LCBvdGhlcl9kZXYsIGl0ZXIpIHsKIAkJaWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2sob3RoZXJfZGV2KSkKIAkJCWNvbnRpbnVlOwpAQCAtMjIyMiw5ICYjNDM7MjQ3OCwyNDggQEAgZHBhYTJfc3dpdGNoX3ByZWNoYW5nZXVwcGVyX3Nhbml0eV9jaGVja3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJb3RoZXJfcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYob3RoZXJfZGV2KTsKIAkJaWYgKG90aGVyX3BvcnRfcHJpdi0mZ3Q7ZXRoc3dfZGF0YSAhPSBwb3J0X3ByaXYtJmd0O2V0aHN3X2RhdGEpIHsKIAkJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCi0JCQkJCSAgICYjMzQ7SW50ZXJmYWNlIGZyb20gYSBkaWZmZXJlbnQgRFBTVyBpcyBpbiB0aGUgYnJpZGdlIGFscmVhZHkmIzM0Oyk7CiYjNDM7CQkJCQkgICAmIzM0O0ludGVyZmFjZSBmcm9tIGEgZGlmZmVyZW50IERQU1cgaXMgaW4gdGhlIGJvbmQgYWxyZWFkeSYjMzQ7KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiYjNDM7CiYjNDM7CQljZmcuaWZfaWRbbnVtX2lmcyYjNDM7JiM0MztdID0gb3RoZXJfcG9ydF9wcml2LSZndDtpZHg7CiYjNDM7CiYjNDM7CQlpZiAobnVtX2lmcyAmZ3Q7PSBEUFNXX01BWF9MQUdfSUZTKSB7CiYjNDM7CQkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJCSAgICYjMzQ7Q2Fubm90IGFkZCBtb3JlIHRoYW4gOCBEUEFBMiBzd2l0Y2ggcG9ydHMgdW5kZXIgdGhlIHNhbWUgYm9uZCYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobGFnKSB7CiYjNDM7CQljZmcuZ3JvdXBfaWQgPSBsYWctJmd0O2lkOwomIzQzOwkJY2ZnLmlmX2lkW251bV9pZnMmIzQzOyYjNDM7XSA9IHBvcnRfcHJpdi0mZ3Q7aWR4OwomIzQzOwkJY2ZnLm51bV9pZnMgPSBudW1faWZzOwomIzQzOwkJY2ZnLnBoYXNlID0gRFBTV19MQUdfU0VUX1BIQVNFX0NIRUNLOwomIzQzOwomIzQzOwkJZXJyID0gZHBzd19sYWdfc2V0KGV0aHN3LSZndDttY19pbywgMCwgZXRoc3ctJmd0O2Rwc3dfaGFuZGxlLCAmYW1wO2NmZyk7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJCSAgICYjMzQ7Q2Fubm90IG9mZmxvYWQgTEFHIGNvbmZpZ3VyYXRpb24mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkcGFhMl9zd2l0Y2hfcG9ydF9zZXRfbGFnX2dyb3VwKHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiwKJiM0MzsJCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3cgPSBwb3J0X3ByaXYtJmd0O2V0aHN3X2RhdGE7CiYjNDM7CXN0cnVjdCBldGhzd19wb3J0X3ByaXYgKm90aGVyX3BvcnRfcHJpdiA9IE5VTEw7CiYjNDM7CXN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWcgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqb3RoZXJfbGFnOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqb3RoZXJfZGV2OwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkICppdGVyOwomIzQzOwomIzQzOwluZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KGJvbmRfZGV2LCBvdGhlcl9kZXYsIGl0ZXIpIHsKJiM0MzsJCWlmICghZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrKG90aGVyX2RldikpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlvdGhlcl9wb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihvdGhlcl9kZXYpOwomIzQzOwkJb3RoZXJfbGFnID0gcnRubF9kZXJlZmVyZW5jZShvdGhlcl9wb3J0X3ByaXYtJmd0O2xhZyk7CiYjNDM7CQlpZiAoIW90aGVyX2xhZykKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWlmIChvdGhlcl9sYWctJmd0O2JvbmRfZGV2ID09IGJvbmRfZGV2KSB7CiYjNDM7CQkJcmN1X2Fzc2lnbl9wb2ludGVyKHBvcnRfcHJpdi0mZ3Q7bGFnLCBvdGhlcl9sYWcpOwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwkvKiBUaGlzIGlzIHRoZSBmaXJzdCBpbnRlcmZhY2UgdG8gYmUgYWRkZWQgdW5kZXIgYSBib25kIGRldmljZS4gRmluZCBhbgomIzQzOwkgKiB1bnVzZWQgTEFHIGdyb3VwLiBObyBuZWVkIHRvIGNoZWNrIGZvciBOVUxMIHNpbmNlIHRoZXJlIGFyZSB0aGUgc2FtZQomIzQzOwkgKiBhbW91bnQgb2YgRFBTVyBwb3J0cyBhcyBMQUcgZ3JvdXBzLCBtZWFuaW5nIHRoYXQgZWFjaCBwb3J0IGNhbiBoYXZlCiYjNDM7CSAqIGl0cyBvd24gTEFHIGdyb3VwLgomIzQzOwkgKi8KJiM0MzsJbGFnID0gZHBhYTJfc3dpdGNoX2xhZ19nZXRfdW51c2VkKGV0aHN3KTsKJiM0MzsJbGFnLSZndDtpbl91c2UgPSB0cnVlOwomIzQzOwlsYWctJmd0O2JvbmRfZGV2ID0gYm9uZF9kZXY7CiYjNDM7CWxhZy0mZ3Q7cHJpbWFyeSA9IHBvcnRfcHJpdjsKJiM0MzsJcmN1X2Fzc2lnbl9wb2ludGVyKHBvcnRfcHJpdi0mZ3Q7bGFnLCBsYWcpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBkcGFhMl9zd2l0Y2hfcG9ydF9pbl9sYWcoc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2LAomIzQzOwkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWc7CiYjNDM7CiYjNDM7CWlmICghcG9ydF9wcml2KQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlsYWcgPSBydG5sX2RlcmVmZXJlbmNlKHBvcnRfcHJpdi0mZ3Q7bGFnKTsKJiM0MzsJcmV0dXJuIGxhZyAmYW1wOyZhbXA7IGxhZy0mZ3Q7Ym9uZF9kZXYgPT0gYm9uZF9kZXY7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3NldF9sYWdfY2ZnKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldiwgdTggbGFnX2lkLAomIzQzOwkJCQkgICAgc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3KQomIzQzO3sKJiM0MzsJc3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZyA9ICZhbXA7ZXRoc3ctJmd0O2xhZ3NbbGFnX2lkIC0gMV07CiYjNDM7CXN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnByaW1hcnksICpwb3J0X3ByaXY7CiYjNDM7CXN0cnVjdCBldGhzd19wb3J0X3ByaXYgKm5ld19wcmltYXJ5ID0gTlVMTDsKJiM0MzsJc3RydWN0IGRwc3dfbGFnX2NmZyBjZmcgPSB7MH07CiYjNDM7CXN0cnVjdCBkcGFhMl9tYWNfYWRkciAqYTsKJiM0MzsJdTggbnVtX2lmcyA9IDA7CiYjNDM7CWludCBlcnIsIGk7CiYjNDM7CiYjNDM7CWNmZy5ncm91cF9pZCA9IGxhZ19pZDsKJiM0MzsKJiM0MzsJLyogRGV0ZXJtaW5lIHRoZSBwcmltYXJ5IHBvcnQuIFRoZSBjYWxsZXIgY2xlYXJzIC0mZ3Q7bGFnIG9uIHRoZSBwb3J0IHRoYXQKJiM0MzsJICogaXMgbGVhdmluZywgc28gYSBOVUxMIC0mZ3Q7bGFnIG9uIHRoZSBjdXJyZW50IHByaW1hcnkgbWVhbnMgaXQgaXMgdGhlCiYjNDM7CSAqIG9uZSBsZWF2aW5nOiBlbGVjdCB0aGUgZmlyc3QgcmVtYWluaW5nIG1lbWJlciBhcyB0aGUgbmV3IHByaW1hcnkuCiYjNDM7CSAqIE90aGVyd2lzZSBrZWVwIHRoZSBjdXJyZW50IHByaW1hcnkuCiYjNDM7CSAqLwomIzQzOwlpZiAocnRubF9kZXJlZmVyZW5jZShsYWctJmd0O3ByaW1hcnktJmd0O2xhZykpIHsKJiM0MzsJCXByaW1hcnkgPSBsYWctJmd0O3ByaW1hcnk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlwcmltYXJ5ID0gTlVMTDsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBldGhzdy0mZ3Q7c3dfYXR0ci5udW1faWZzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCWlmIChkcGFhMl9zd2l0Y2hfcG9ydF9pbl9sYWcoZXRoc3ctJmd0O3BvcnRzW2ldLCBib25kX2RldikpIHsKJiM0MzsJCQkJbmV3X3ByaW1hcnkgPSBldGhzdy0mZ3Q7cG9ydHNbaV07CiYjNDM7CQkJCXByaW1hcnkgPSBuZXdfcHJpbWFyeTsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEJ1aWxkIHRoZSBpbnRlcmZhY2UgbGlzdCwgYWx3YXlzIHBsYWNpbmcgdGhlIHByaW1hcnkgZmlyc3QgKi8KJiM0MzsJaWYgKHByaW1hcnkpCiYjNDM7CQljZmcuaWZfaWRbbnVtX2lmcyYjNDM7JiM0MztdID0gcHJpbWFyeS0mZ3Q7aWR4OwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZXRoc3ctJmd0O3N3X2F0dHIubnVtX2lmczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXBvcnRfcHJpdiA9IGV0aHN3LSZndDtwb3J0c1tpXTsKJiM0MzsJCWlmIChwb3J0X3ByaXYgPT0gcHJpbWFyeSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmICghZHBhYTJfc3dpdGNoX3BvcnRfaW5fbGFnKHBvcnRfcHJpdiwgYm9uZF9kZXYpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJY2ZnLmlmX2lkW251bV9pZnMmIzQzOyYjNDM7XSA9IHBvcnRfcHJpdi0mZ3Q7aWR4OwomIzQzOwl9CiYjNDM7CWNmZy5udW1faWZzID0gbnVtX2lmczsKJiM0MzsKJiM0MzsJLyogTm8gbW9yZSBpbnRlcmZhY2VzIHVuZGVyIHRoaXMgTEFHIGdyb3VwLCBtYXJrIGl0IGFzIG5vdCBpbiB1c2UuIFdhaXQKJiM0MzsJICogZm9yIGEgZ3JhY2UgcGVyaW9kIHNvIHRoYXQgYW55IHJlYWRlcnMgb2YgdGhlIGxhZyBzdHJ1Y3R1cmUgZmluaXNoZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAoIW51bV9pZnMpIHsKJiM0MzsJCXN5bmNocm9uaXplX25ldCgpOwomIzQzOwomIzQzOwkJbGFnLSZndDtib25kX2RldiA9IE5VTEw7CiYjNDM7CQlsYWctJmd0O3ByaW1hcnkgPSBOVUxMOwomIzQzOwkJbGFnLSZndDtpbl91c2UgPSBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBXaGVuIHRoZSBwcmltYXJ5IGNoYW5nZXMsIG1pZ3JhdGUgdGhlIEZEQiBlbnRyaWVzIGZyb20gdGhlIG9sZAomIzQzOwkgKiBwcmltYXJ5IHRvIHRoZSBuZXcgb25lOiByZW1vdmUgdGhlbSBiZWZvcmUgcmVjb25maWd1cmluZyB0aGUgTEFHIGluCiYjNDM7CSAqIGhhcmR3YXJlIGFuZCByZS1hZGQgdGhlbSBvbiB0aGUgbmV3IHByaW1hcnkgYWZ0ZXJ3YXJkcy4gV2UgZG8gbm90CiYjNDM7CSAqIHRvdWNoIGFueSByZWZjb3VudGluZyBzaW5jZSB0aGUgaW50ZW50aW9uIGlzIHRvIGNoYW5nZSB0aGUgSFcgZW50cnksCiYjNDM7CSAqIG5vdCB0aGUgcGFyYWxsZWwgc29mdHdhcmUgdHJhY2tpbmcuCiYjNDM7CSAqLwomIzQzOwlpZiAobmV3X3ByaW1hcnkpIHsKJiM0MzsJCW11dGV4X2xvY2soJmFtcDtsYWctJmd0O2ZkYl9sb2NrKTsKJiM0MzsJCWxpc3RfZm9yX2VhY2hfZW50cnkoYSwgJmFtcDtsYWctJmd0O2ZkYnMsIGxpc3QpCiYjNDM7CQkJZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2RlbChsYWctJmd0O3ByaW1hcnksIGEtJmd0O2FkZHIpOwomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7bGFnLSZndDtmZGJfbG9jayk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gZHBzd19sYWdfc2V0KGV0aHN3LSZndDttY19pbywgMCwgZXRoc3ctJmd0O2Rwc3dfaGFuZGxlLCAmYW1wO2NmZyk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlpZiAobmV3X3ByaW1hcnkpIHsKJiM0MzsJCW11dGV4X2xvY2soJmFtcDtsYWctJmd0O2ZkYl9sb2NrKTsKJiM0MzsJCWxpc3RfZm9yX2VhY2hfZW50cnkoYSwgJmFtcDtsYWctJmd0O2ZkYnMsIGxpc3QpIHsKJiM0MzsJCQllcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfYWRkKG5ld19wcmltYXJ5LCBhLSZndDthZGRyKTsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQluZXRkZXZfZXJyKG5ld19wcmltYXJ5LSZndDtuZXRkZXYsICYjMzQ7VW5hYmxlIHRvIG1pZ3JhdGUgRkRCXG4mIzM0Oyk7CiYjNDM7CQl9CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtsYWctJmd0O2ZkYl9sb2NrKTsKJiM0MzsKJiM0MzsJCXN5bmNocm9uaXplX25ldCgpOwomIzQzOwkJbGFnLSZndDtwcmltYXJ5ID0gbmV3X3ByaW1hcnk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfYm9uZF9qb2luKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgbmV0ZGV2X2xhZ191cHBlcl9pbmZvICppbmZvLAomIzQzOwkJCQkgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3ID0gcG9ydF9wcml2LSZndDtldGhzd19kYXRhOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqYnJpZGdlX2RldjsKJiM0MzsJc3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZzsKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CXU4IGxhZ19pZDsKJiM0MzsKJiM0MzsJLyogU2V0dXAgdGhlIHBvcnRfcHJpdi0mZ3Q7bGFnIHBvaW50ZXIgZm9yIHRoaXMgc3dpdGNoIHBvcnQgKi8KJiM0MzsJZHBhYTJfc3dpdGNoX3BvcnRfc2V0X2xhZ19ncm91cChwb3J0X3ByaXYsIGJvbmRfZGV2KTsKJiM0MzsKJiM0MzsJLyogQ3JlYXRlIHRoZSBMQUcgY29uZmlndXJhdGlvbiBhbmQgYXBwbHkgaXQgaW4gTUMgKi8KJiM0MzsJbGFnID0gcnRubF9kZXJlZmVyZW5jZShwb3J0X3ByaXYtJmd0O2xhZyk7CiYjNDM7CWxhZ19pZCA9IGxhZy0mZ3Q7aWQ7CiYjNDM7CWVyciA9IGRwYWEyX3N3aXRjaF9zZXRfbGFnX2NmZyhib25kX2RldiwgbGFnX2lkLCBldGhzdyk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGVycl9sYWdfY2ZnOwomIzQzOwomIzQzOwkvKiBJZiB0aGUgYm9uZCBkZXZpY2UgaXMgYSBzd2l0Y2ggcG9ydCwgam9pbiB0aGUgYnJpZGdlIGFzIHdlbGwgKi8KJiM0MzsJYnJpZGdlX2RldiA9IG5ldGRldl9tYXN0ZXJfdXBwZXJfZGV2X2dldChib25kX2Rldik7CiYjNDM7CWlmICghYnJpZGdlX2RldiB8fCAhbmV0aWZfaXNfYnJpZGdlX21hc3RlcihicmlkZ2VfZGV2KSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwllcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9icmlkZ2Vfam9pbihuZXRkZXYsIGJyaWRnZV9kZXYsIGV4dGFjayk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGVycl9sYWdfY2ZnOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzOwomIzQzO2Vycl9sYWdfY2ZnOgomIzQzOwlyY3VfYXNzaWduX3BvaW50ZXIocG9ydF9wcml2LSZndDtsYWcsIE5VTEwpOwomIzQzOwlkcGFhMl9zd2l0Y2hfc2V0X2xhZ19jZmcoYm9uZF9kZXYsIGxhZ19pZCwgZXRoc3cpOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2JvbmRfbGVhdmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpicmlkZ2VfZGV2ID0gbmV0ZGV2X21hc3Rlcl91cHBlcl9kZXZfZ2V0KGJvbmRfZGV2KTsKJiM0MzsJc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZyA9IHJ0bmxfZGVyZWZlcmVuY2UocG9ydF9wcml2LSZndDtsYWcpOwomIzQzOwlzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3cgPSBwb3J0X3ByaXYtJmd0O2V0aHN3X2RhdGE7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpicnBkZXY7CiYjNDM7CWJvb2wgbGVhcm5fZW5hOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZiAoIWxhZykKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBSZWNyZWF0ZSB0aGUgTEFHIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBMQUcgZ3JvdXAgdGhhdCB3ZSBsZWZ0LiAqLwomIzQzOwlyY3VfYXNzaWduX3BvaW50ZXIocG9ydF9wcml2LSZndDtsYWcsIE5VTEwpOwomIzQzOwlkcGFhMl9zd2l0Y2hfc2V0X2xhZ19jZmcoYm9uZF9kZXYsIGxhZy0mZ3Q7aWQsIGV0aHN3KTsKJiM0MzsKJiM0MzsJaWYgKGJyaWRnZV9kZXYgJmFtcDsmYW1wOyBuZXRpZl9pc19icmlkZ2VfbWFzdGVyKGJyaWRnZV9kZXYpKSB7CiYjNDM7CQkvKiBNYWtlIHN1cmUgdGhhdCB0aGUgbmV3IHByaW1hcnkgaW5oZXJpdHMgdGhlIGxlYXJuaW5nIHN0YXRlICovCiYjNDM7CQlpZiAobGFnLSZndDtwcmltYXJ5KSB7CiYjNDM7CQkJYnJwZGV2ID0gZHBhYTJfc3dpdGNoX3BvcnRfdG9fYnJpZGdlX3BvcnQobGFnLSZndDtwcmltYXJ5KTsKJiM0MzsJCQlsZWFybl9lbmEgPSBicl9wb3J0X2ZsYWdfaXNfc2V0KGJycGRldiwgQlJfTEVBUk5JTkcpOwomIzQzOwkJCWVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X3NldF9sZWFybmluZyhsYWctJmd0O3ByaW1hcnksCiYjNDM7CQkJCQkJCSAgICAgbGVhcm5fZW5hKTsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQlyZXR1cm4gZXJyOwomIzQzOwkJCWxhZy0mZ3Q7cHJpbWFyeS0mZ3Q7bGVhcm5fZW5hID0gbGVhcm5fZW5hOwomIzQzOwkJfQomIzQzOwomIzQzOwkJLyogSW4gY2FzZSB0aGUgYm9uZCBpcyBhIGJyaWRnZSBwb3J0LCBsZWF2ZSB0aGUgdXBwZXIgYnJpZGdlIGFzCiYjNDM7CQkgKiB3ZWxsLgomIzQzOwkJICovCiYjNDM7CQlyZXR1cm4gZHBhYTJfc3dpdGNoX3BvcnRfYnJpZGdlX2xlYXZlKG5ldGRldik7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0yMjM0LDggJiM0MzsyNzI5LDggQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9wcmVjaGFuZ2V1cHBlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJCQkgICAgc3RydWN0IG5ldGRldl9ub3RpZmllcl9jaGFuZ2V1cHBlcl9pbmZvICppbmZvKQogewogCXN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdjsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKnVwcGVyX2RldiwgKmJyOwogCXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjazsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqdXBwZXJfZGV2OwogCWludCBlcnI7CiAKIAlpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhuZXRkZXYpKQpAQCAtMjI1Miw2ICYjNDM7Mjc0NywyNCBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X3ByZWNoYW5nZXVwcGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAKIAkJaWYgKCFpbmZvLSZndDtsaW5raW5nKQogCQkJZHBhYTJfc3dpdGNoX3BvcnRfcHJlX2JyaWRnZV9sZWF2ZShuZXRkZXYpOwomIzQzOwl9IGVsc2UgaWYgKG5ldGlmX2lzX2xhZ19tYXN0ZXIodXBwZXJfZGV2KSkgewomIzQzOwkJaWYgKCFpbmZvLSZndDtsaW5raW5nKSB7CiYjNDM7CQkJaWYgKG5ldGlmX2lzX2JyaWRnZV9wb3J0KHVwcGVyX2RldikpCiYjNDM7CQkJCWRwYWEyX3N3aXRjaF9wb3J0X3ByZV9icmlkZ2VfbGVhdmUobmV0ZGV2KTsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChuZXRpZl9pc19icmlkZ2VfcG9ydCh1cHBlcl9kZXYpKSB7CiYjNDM7CQkJYnIgPSBuZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9nZXQodXBwZXJfZGV2KTsKJiM0MzsJCQllcnIgPSBkcGFhMl9zd2l0Y2hfcHJlY2hhbmdldXBwZXJfc2FuaXR5X2NoZWNrcyhuZXRkZXYsCiYjNDM7CQkJCQkJCQkJYnIsCiYjNDM7CQkJCQkJCQkJZXh0YWNrKTsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcmV0dXJuIGRwYWEyX3N3aXRjaF9wcmVfbGFnX2pvaW4obmV0ZGV2LCB1cHBlcl9kZXYsCiYjNDM7CQkJCQkJIGluZm8tJmd0O3VwcGVyX2luZm8sIGV4dGFjayk7CiAJfSBlbHNlIGlmIChpc192bGFuX2Rldih1cHBlcl9kZXYpKSB7CiAJCXBvcnRfcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJCWlmIChwb3J0X3ByaXYtJmd0O2ZkYi0mZ3Q7YnJpZGdlX2RldikgewpAQCAtMjI4Myw2ICYjNDM7Mjc5Niw4MCBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2NoYW5nZXVwcGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkJCQkJICAgICBleHRhY2spOwogCQllbHNlCiAJCQlyZXR1cm4gZHBhYTJfc3dpdGNoX3BvcnRfYnJpZGdlX2xlYXZlKG5ldGRldik7CiYjNDM7CX0gZWxzZSBpZiAobmV0aWZfaXNfbGFnX21hc3Rlcih1cHBlcl9kZXYpKSB7CiYjNDM7CQlpZiAoaW5mby0mZ3Q7bGlua2luZykKJiM0MzsJCQlyZXR1cm4gZHBhYTJfc3dpdGNoX3BvcnRfYm9uZF9qb2luKG5ldGRldiwgdXBwZXJfZGV2LAomIzQzOwkJCQkJCQkgICBpbmZvLSZndDt1cHBlcl9pbmZvLAomIzQzOwkJCQkJCQkgICBleHRhY2spOwomIzQzOwkJZWxzZQomIzQzOwkJCXJldHVybiBkcGFhMl9zd2l0Y2hfcG9ydF9ib25kX2xlYXZlKG5ldGRldiwgdXBwZXJfZGV2KTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO2RwYWEyX3N3aXRjaF9sYWdfcHJlY2hhbmdldXBwZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkJc3RydWN0IG5ldGRldl9ub3RpZmllcl9jaGFuZ2V1cHBlcl9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmxvd2VyOwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkICppdGVyOwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFuZXRpZl9pc19sYWdfbWFzdGVyKG5ldGRldikpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJbmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX2RldihuZXRkZXYsIGxvd2VyLCBpdGVyKSB7CiYjNDM7CQlpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhsb3dlcikpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQllcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9wcmVjaGFuZ2V1cHBlcihsb3dlciwgaW5mbyk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO2RwYWEyX3N3aXRjaF9sYWdfY2hhbmdldXBwZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkgICAgIHN0cnVjdCBuZXRkZXZfbm90aWZpZXJfY2hhbmdldXBwZXJfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpsb3dlcjsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCAqaXRlcjsKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CWlmICghbmV0aWZfaXNfbGFnX21hc3RlcihuZXRkZXYpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CW5ldGRldl9mb3JfZWFjaF9sb3dlcl9kZXYobmV0ZGV2LCBsb3dlciwgaXRlcikgewomIzQzOwkJaWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2sobG93ZXIpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfY2hhbmdldXBwZXIobG93ZXIsIGluZm8pOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7ZHBhYTJfc3dpdGNoX3BvcnRfY2hhbmdlbG93ZXJzdGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAomIzQzOwkJCQkgICBzdHJ1Y3QgbmV0ZGV2X2xhZ19sb3dlcl9zdGF0ZV9pbmZvICpsaW5mbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CXN0cnVjdCBldGhzd19jb3JlICpldGhzdyA9IHBvcnRfcHJpdi0mZ3Q7ZXRoc3dfZGF0YTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJaWYgKCFydG5sX2RlcmVmZXJlbmNlKHBvcnRfcHJpdi0mZ3Q7bGFnKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwllcnIgPSBkcHN3X2lmX3NldF9sYWdfc3RhdGUoZXRoc3ctJmd0O21jX2lvLCAwLCBldGhzdy0mZ3Q7ZHBzd19oYW5kbGUsCiYjNDM7CQkJCSAgICBwb3J0X3ByaXYtJmd0O2lkeCwgbGluZm8tJmd0O3R4X2VuYWJsZWQgPyAxIDogMCk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LCAmIzM0O2Rwc3dfaWZfc2V0X2xhZ19zdGF0ZSgpID0gJWRcbiYjMzQ7LCBlcnIpOwomIzQzOwkJcmV0dXJuIGVycjsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTIyOTIsNiAmIzQzOzI4NzksNyBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X25ldGRldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAogCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7CiYjNDM7CXN0cnVjdCBuZXRkZXZfbm90aWZpZXJfY2hhbmdlbG93ZXJzdGF0ZV9pbmZvICppbmZvOwogCWludCBlcnIgPSAwOwogCiAJc3dpdGNoIChldmVudCkgewpAQCAtMjMwMCwxMyAmIzQzOzI4ODgsMjkgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9uZXRkZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKIAkJaWYgKGVycikKIAkJCXJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7CiAKJiM0MzsJCWVyciA9IGRwYWEyX3N3aXRjaF9sYWdfcHJlY2hhbmdldXBwZXIobmV0ZGV2LCBwdHIpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gbm90aWZpZXJfZnJvbV9lcnJubyhlcnIpOwomIzQzOwogCQlicmVhazsKIAljYXNlIE5FVERFVl9DSEFOR0VVUFBFUjoKIAkJZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfY2hhbmdldXBwZXIobmV0ZGV2LCBwdHIpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8oZXJyKTsKIAomIzQzOwkJZXJyID0gZHBhYTJfc3dpdGNoX2xhZ19jaGFuZ2V1cHBlcihuZXRkZXYsIHB0cik7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7CiYjNDM7CiAJCWJyZWFrOwomIzQzOwljYXNlIE5FVERFVl9DSEFOR0VMT1dFUlNUQVRFOgomIzQzOwkJaW5mbyA9IHB0cjsKJiM0MzsJCWlmICghZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrKG5ldGRldikpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQllcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9jaGFuZ2Vsb3dlcnN0YXRlKG5ldGRldiwKJiM0MzsJCQkJCQkJIGluZm8tJmd0O2xvd2VyX3N0YXRlX2luZm8pOwomIzQzOwkJcmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8oZXJyKTsKIAl9CiAKIAlyZXR1cm4gTk9USUZZX0RPTkU7CkBAIC0yMzE2LDgwICYjNDM7MjkyMCw5NyBAQCBzdHJ1Y3QgZXRoc3dfc3dpdGNoZGV2X2V2ZW50X3dvcmsgewogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwogCXN0cnVjdCBzd2l0Y2hkZXZfbm90aWZpZXJfZmRiX2luZm8gZmRiX2luZm87CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2OwogCXVuc2lnbmVkIGxvbmcgZXZlbnQ7CiYjNDM7CXUxNiB2aWQ7CiB9OwogCiBzdGF0aWMgdm9pZCBkcGFhMl9zd2l0Y2hfZXZlbnRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGV0aHN3X3N3aXRjaGRldl9ldmVudF93b3JrICpzd2l0Y2hkZXZfd29yayA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZXRoc3dfc3dpdGNoZGV2X2V2ZW50X3dvcmssIHdvcmspOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYgPSBzd2l0Y2hkZXZfd29yay0mZ3Q7b3JpZ19kZXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHN3aXRjaGRldl93b3JrLSZndDtkZXY7CiYjNDM7CXN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHN3aXRjaGRldl9ub3RpZmllcl9mZGJfaW5mbyAqZmRiX2luZm87CiYjNDM7CXN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWc7CiAJaW50IGVycjsKIAotCXJ0bmxfbG9jaygpOwogCWZkYl9pbmZvID0gJmFtcDtzd2l0Y2hkZXZfd29yay0mZ3Q7ZmRiX2luZm87CiAKJiM0MzsJLyogVGhlIGxhZyBzdHJ1Y3R1cmVzIGFyZSBmcmVlZCBvbmx5IGZyb20gZHBhYTJfc3dpdGNoX3JlbW92ZSgpLCB3aGljaAomIzQzOwkgKiBmaXJzdCBmbHVzaGVzIHRoaXMgd29ya3F1ZXVlLCBzbyB0aGUgcG9pbnRlciBzdGF5cyB2YWxpZCBmb3IgdGhlCiYjNDM7CSAqIGxpZmV0aW1lIG9mIHRoZSB3b3JrIGl0ZW0uIE9ubHkgdGhlIGRlcmVmZXJlbmNlIG5lZWRzIHRoZSBSQ1UKJiM0MzsJICogcmVhZC1zaWRlIGxvY2s7IHRoZSBGREIgaGVscGVycyBiZWxvdyBjYW4gc2xlZXAgYW5kIG11c3QgcnVuIG91dHNpZGUKJiM0MzsJICogb2YgaXQuCiYjNDM7CSAqLwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWxhZyA9IHJjdV9kZXJlZmVyZW5jZShwb3J0X3ByaXYtJmd0O2xhZyk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwogCXN3aXRjaCAoc3dpdGNoZGV2X3dvcmstJmd0O2V2ZW50KSB7CiAJY2FzZSBTV0lUQ0hERVZfRkRCX0FERF9UT19ERVZJQ0U6Ci0JCWlmICghZmRiX2luZm8tJmd0O2FkZGVkX2J5X3VzZXIgfHwgZmRiX2luZm8tJmd0O2lzX2xvY2FsKQotCQkJYnJlYWs7Ci0JCWlmIChpc191bmljYXN0X2V0aGVyX2FkZHIoZmRiX2luZm8tJmd0O2FkZHIpKQotCQkJZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2FkZF91YyhuZXRkZXZfcHJpdihkZXYpLAotCQkJCQkJCSAgIGZkYl9pbmZvLSZndDthZGRyKTsKJiM0MzsJCWlmIChsYWcpCiYjNDM7CQkJZXJyID0gZHBhYTJfc3dpdGNoX2xhZ19mZGJfYWRkKGxhZywgZmRiX2luZm8tJmd0O2FkZHIsCiYjNDM7CQkJCQkJICAgICAgIHN3aXRjaGRldl93b3JrLSZndDt2aWQpOwogCQllbHNlCi0JCQllcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfYWRkX21jKG5ldGRldl9wcml2KGRldiksCi0JCQkJCQkJICAgZmRiX2luZm8tJmd0O2FkZHIpOwomIzQzOwkJCWVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9hZGQocG9ydF9wcml2LAomIzQzOwkJCQkJCQlmZGJfaW5mby0mZ3Q7YWRkcik7CiAJCWlmIChlcnIpCiAJCQlicmVhazsKIAkJZmRiX2luZm8tJmd0O29mZmxvYWRlZCA9IHRydWU7Ci0JCWNhbGxfc3dpdGNoZGV2X25vdGlmaWVycyhTV0lUQ0hERVZfRkRCX09GRkxPQURFRCwgZGV2LAomIzQzOwkJY2FsbF9zd2l0Y2hkZXZfbm90aWZpZXJzKFNXSVRDSERFVl9GREJfT0ZGTE9BREVELCBvcmlnX2RldiwKIAkJCQkJICZhbXA7ZmRiX2luZm8tJmd0O2luZm8sIE5VTEwpOwogCQlicmVhazsKIAljYXNlIFNXSVRDSERFVl9GREJfREVMX1RPX0RFVklDRToKLQkJaWYgKCFmZGJfaW5mby0mZ3Q7YWRkZWRfYnlfdXNlciB8fCBmZGJfaW5mby0mZ3Q7aXNfbG9jYWwpCi0JCQlicmVhazsKLQkJaWYgKGlzX3VuaWNhc3RfZXRoZXJfYWRkcihmZGJfaW5mby0mZ3Q7YWRkcikpCi0JCQlkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsX3VjKG5ldGRldl9wcml2KGRldiksIGZkYl9pbmZvLSZndDthZGRyKTsKJiM0MzsJCWlmIChsYWcpCiYjNDM7CQkJZHBhYTJfc3dpdGNoX2xhZ19mZGJfZGVsKGxhZywgZmRiX2luZm8tJmd0O2FkZHIsCiYjNDM7CQkJCQkJIHN3aXRjaGRldl93b3JrLSZndDt2aWQpOwogCQllbHNlCi0JCQlkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsX21jKG5ldGRldl9wcml2KGRldiksIGZkYl9pbmZvLSZndDthZGRyKTsKJiM0MzsJCQlkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsKHBvcnRfcHJpdiwgZmRiX2luZm8tJmd0O2FkZHIpOwogCQlicmVhazsKIAl9CiAKLQlydG5sX3VubG9jaygpOwogCWtmcmVlKHN3aXRjaGRldl93b3JrLSZndDtmZGJfaW5mby5hZGRyKTsKIAlrZnJlZShzd2l0Y2hkZXZfd29yayk7CiAJZGV2X3B1dChkZXYpOwomIzQzOwlkZXZfcHV0KG9yaWdfZGV2KTsKIH0KIAotLyogQ2FsbGVkIHVuZGVyIHJjdV9yZWFkX2xvY2soKSAqLwotc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cikKJiM0MztzdGF0aWMgaW50CiYjNDM7ZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2V2ZW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldiwKJiM0MzsJCQkgICAgdW5zaWduZWQgbG9uZyBldmVudCwgY29uc3Qgdm9pZCAqY3R4LAomIzQzOwkJCSAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X25vdGlmaWVyX2ZkYl9pbmZvICpmZGJfaW5mbykKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc3dpdGNoZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7CiAJc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgZXRoc3dfc3dpdGNoZGV2X2V2ZW50X3dvcmsgKnN3aXRjaGRldl93b3JrOwotCXN0cnVjdCBzd2l0Y2hkZXZfbm90aWZpZXJfZmRiX2luZm8gKmZkYl9pbmZvID0gcHRyOwogCXN0cnVjdCBldGhzd19jb3JlICpldGhzdyA9IHBvcnRfcHJpdi0mZ3Q7ZXRoc3dfZGF0YTsKIAotCWlmIChldmVudCA9PSBTV0lUQ0hERVZfUE9SVF9BVFRSX1NFVCkKLQkJcmV0dXJuIGRwYWEyX3N3aXRjaF9wb3J0X2F0dHJfc2V0X2V2ZW50KGRldiwgcHRyKTsKJiM0MzsJaWYgKGN0eCAmYW1wOyZhbXA7IGN0eCAhPSBwb3J0X3ByaXYpCiYjNDM7CQlyZXR1cm4gMDsKIAotCWlmICghZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrKGRldikpCi0JCXJldHVybiBOT1RJRllfRE9ORTsKJiM0MzsJLyogRm9yIHRoZSBtb21lbnQsIGRvIG5vdGhpbmcgd2l0aCBlbnRyaWVzIHRvd2FyZHMgZm9yZWlnbiBkZXZpY2VzICovCiYjNDM7CWlmIChkcGFhMl9zd2l0Y2hfZm9yZWlnbl9kZXZfY2hlY2soZGV2LCBvcmlnX2RldikpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKCFmZGJfaW5mby0mZ3Q7YWRkZWRfYnlfdXNlciB8fCBmZGJfaW5mby0mZ3Q7aXNfbG9jYWwpCiYjNDM7CQlyZXR1cm4gMDsKIAogCXN3aXRjaGRldl93b3JrID0ga3phbGxvY19vYmooKnN3aXRjaGRldl93b3JrLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXN3aXRjaGRldl93b3JrKQotCQlyZXR1cm4gTk9USUZZX0JBRDsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwogCiAJSU5JVF9XT1JLKCZhbXA7c3dpdGNoZGV2X3dvcmstJmd0O3dvcmssIGRwYWEyX3N3aXRjaF9ldmVudF93b3JrKTsKIAlzd2l0Y2hkZXZfd29yay0mZ3Q7ZGV2ID0gZGV2OwogCXN3aXRjaGRldl93b3JrLSZndDtldmVudCA9IGV2ZW50OwomIzQzOwlzd2l0Y2hkZXZfd29yay0mZ3Q7b3JpZ19kZXYgPSBvcmlnX2RldjsKJiM0MzsJc3dpdGNoZGV2X3dvcmstJmd0O3ZpZCA9IGZkYl9pbmZvLSZndDt2aWQ7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBTV0lUQ0hERVZfRkRCX0FERF9UT19ERVZJQ0U6CiAJY2FzZSBTV0lUQ0hERVZfRkRCX0RFTF9UT19ERVZJQ0U6Ci0JCW1lbWNweSgmYW1wO3N3aXRjaGRldl93b3JrLSZndDtmZGJfaW5mbywgcHRyLAomIzQzOwkJbWVtY3B5KCZhbXA7c3dpdGNoZGV2X3dvcmstJmd0O2ZkYl9pbmZvLCBmZGJfaW5mbywKIAkJICAgICAgIHNpemVvZihzd2l0Y2hkZXZfd29yay0mZ3Q7ZmRiX2luZm8pKTsKIAkJc3dpdGNoZGV2X3dvcmstJmd0O2ZkYl9pbmZvLmFkZHIgPSBremFsbG9jKEVUSF9BTEVOLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFzd2l0Y2hkZXZfd29yay0mZ3Q7ZmRiX2luZm8uYWRkcikKQEAgLTI0MDAsNTIgJiM0MzszMDIxLDYxIEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKIAogCQkvKiBUYWtlIGEgcmVmZXJlbmNlIG9uIHRoZSBkZXZpY2UgdG8gYXZvaWQgYmVpbmcgZnJlZWQuICovCiAJCWRldl9ob2xkKGRldik7CiYjNDM7CQlkZXZfaG9sZChvcmlnX2Rldik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWtmcmVlKHN3aXRjaGRldl93b3JrKTsKLQkJcmV0dXJuIE5PVElGWV9ET05FOwomIzQzOwkJcmV0dXJuIDA7CiAJfQogCiAJcXVldWVfd29yayhldGhzdy0mZ3Q7d29ya3F1ZXVlLCAmYW1wO3N3aXRjaGRldl93b3JrLSZndDt3b3JrKTsKIAotCXJldHVybiBOT1RJRllfRE9ORTsKJiM0MzsJcmV0dXJuIDA7CiAKIGVycl9hZGRyX2FsbG9jOgogCWtmcmVlKHN3aXRjaGRldl93b3JrKTsKLQlyZXR1cm4gTk9USUZZX0JBRDsKJiM0MzsJcmV0dXJuIC1FTk9NRU07CiB9CiAKLXN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfb2JqX2V2ZW50KHVuc2lnbmVkIGxvbmcgZXZlbnQsCi0JCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCi0JCQkJICAgICAgIHN0cnVjdCBzd2l0Y2hkZXZfbm90aWZpZXJfcG9ydF9vYmpfaW5mbyAqcG9ydF9vYmpfaW5mbykKJiM0MzsvKiBDYWxsZWQgdW5kZXIgcmN1X3JlYWRfbG9jaygpICovCiYjNDM7c3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAomIzQzOwkJCQkgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpCiB7Ci0JaW50IGVyciA9IC1FT1BOT1RTVVBQOwotCi0JaWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2sobmV0ZGV2KSkKLQkJcmV0dXJuIE5PVElGWV9ET05FOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc3dpdGNoZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7CiYjNDM7CWludCBlcnI7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7Ci0JY2FzZSBTV0lUQ0hERVZfUE9SVF9PQkpfQUREOgotCQllcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9vYmpfYWRkKG5ldGRldiwgcG9ydF9vYmpfaW5mby0mZ3Q7b2JqKTsKLQkJYnJlYWs7Ci0JY2FzZSBTV0lUQ0hERVZfUE9SVF9PQkpfREVMOgotCQllcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9vYmpfZGVsKG5ldGRldiwgcG9ydF9vYmpfaW5mby0mZ3Q7b2JqKTsKLQkJYnJlYWs7CiYjNDM7CWNhc2UgU1dJVENIREVWX1BPUlRfQVRUUl9TRVQ6CiYjNDM7CQlyZXR1cm4gZHBhYTJfc3dpdGNoX3BvcnRfYXR0cl9zZXRfZXZlbnQoZGV2LCBwdHIpOwomIzQzOwljYXNlIFNXSVRDSERFVl9GREJfQUREX1RPX0RFVklDRToKJiM0MzsJY2FzZSBTV0lUQ0hERVZfRkRCX0RFTF9UT19ERVZJQ0U6CiYjNDM7CQllcnIgPSBzd2l0Y2hkZXZfaGFuZGxlX2ZkYl9ldmVudF90b19kZXZpY2UoZGV2LCBldmVudCwgcHRyLAomIzQzOwkJCQkJCQkgICBkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2ssCiYjNDM7CQkJCQkJCSAgIGRwYWEyX3N3aXRjaF9mb3JlaWduX2Rldl9jaGVjaywKJiM0MzsJCQkJCQkJICAgZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2V2ZW50KTsKJiM0MzsJCXJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gTk9USUZZX0RPTkU7CiAJfQotCi0JcG9ydF9vYmpfaW5mby0mZ3Q7aGFuZGxlZCA9IHRydWU7Ci0JcmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8oZXJyKTsKIH0KIAogc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9ibG9ja2luZ19ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAogCQkJCQkgICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBzd2l0Y2hkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTsKJiM0MzsJaW50IGVycjsKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIFNXSVRDSERFVl9QT1JUX09CSl9BREQ6CiYjNDM7CQllcnIgPSBzd2l0Y2hkZXZfaGFuZGxlX3BvcnRfb2JqX2FkZChkZXYsIHB0ciwKJiM0MzsJCQkJCQkgICAgZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrLAomIzQzOwkJCQkJCSAgICBkcGFhMl9zd2l0Y2hfcG9ydF9vYmpfYWRkKTsKJiM0MzsJCXJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7CiAJY2FzZSBTV0lUQ0hERVZfUE9SVF9PQkpfREVMOgotCQlyZXR1cm4gZHBhYTJfc3dpdGNoX3BvcnRfb2JqX2V2ZW50KGV2ZW50LCBkZXYsIHB0cik7CiYjNDM7CQllcnIgPSBzd2l0Y2hkZXZfaGFuZGxlX3BvcnRfb2JqX2RlbChkZXYsIHB0ciwKJiM0MzsJCQkJCQkgICAgZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrLAomIzQzOwkJCQkJCSAgICBkcGFhMl9zd2l0Y2hfcG9ydF9vYmpfZGVsKTsKJiM0MzsJCXJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7CiAJY2FzZSBTV0lUQ0hERVZfUE9SVF9BVFRSX1NFVDoKIAkJcmV0dXJuIGRwYWEyX3N3aXRjaF9wb3J0X2F0dHJfc2V0X2V2ZW50KGRldiwgcHRyKTsKIAl9CkBAIC0yNDkwLDE5ICYjNDM7MzEyMCwyMiBAQCBzdGF0aWMgdm9pZCBkcGFhMl9zd2l0Y2hfcngoc3RydWN0IGRwYWEyX3N3aXRjaF9mcSAqZnEsCiAJZG1hX2FkZHJfdCBhZGRyID0gZHBhYTJfZmRfZ2V0X2FkZHIoZmQpOwogCXN0cnVjdCBldGhzd19jb3JlICpldGhzdyA9IGZxLSZndDtldGhzdzsKIAlzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXY7CiYjNDM7CXN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWc7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAlzdHJ1Y3Qgdmxhbl9ldGhoZHIgKmhkcjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXUxNiB2bGFuX3RjaSwgdmlkOwogCWludCBpZl9pZCwgZXJyOwogCXZvaWQgKnZhZGRyOwomIzQzOwl1NjQgZmxjOwogCiAJdmFkZHIgPSBkcGFhMl9pb3ZhX3RvX3ZpcnQoZXRoc3ctJmd0O2lvbW11X2RvbWFpbiwgYWRkcik7CiAJZG1hX3VubWFwX3BhZ2UoZXRoc3ctJmd0O2RldiwgYWRkciwgRFBBQTJfU1dJVENIX1JYX0JVRl9TSVpFLAogCQkgICAgICAgRE1BX0ZST01fREVWSUNFKTsKIAogCS8qIGdldCBzd2l0Y2ggaW5ncmVzcyBpbnRlcmZhY2UgSUQgKi8KLQlpZl9pZCA9IHVwcGVyXzMyX2JpdHMoZHBhYTJfZmRfZ2V0X2ZsYyhmZCkpICZhbXA7IDB4MDAwMEZGRkY7CiYjNDM7CWZsYyA9IGRwYWEyX2ZkX2dldF9mbGMoZmQpOwomIzQzOwlpZl9pZCA9IERQQUEyX0VUSFNXX0ZMQ19JRl9JRChmbGMpOwogCWlmIChpZl9pZCAmZ3Q7PSBldGhzdy0mZ3Q7c3dfYXR0ci5udW1faWZzKSB7CiAJCWRldl9lcnIoZXRoc3ctJmd0O2RldiwgJiMzNDtGcmFtZSByZWNlaXZlZCBmcm9tIHVua25vd24gaW50ZXJmYWNlIVxuJiMzNDspOwogCQlnb3RvIGVycl9mcmVlX2ZkOwpAQCAtMjU0MSwxMiAmIzQzOzMxNzQsMjAgQEAgc3RhdGljIHZvaWQgZHBhYTJfc3dpdGNoX3J4KHN0cnVjdCBkcGFhMl9zd2l0Y2hfZnEgKmZxLAogCQl9CiAJfQogCi0Jc2tiLSZndDtkZXYgPSBuZXRkZXY7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsKJiM0MzsJbGFnID0gcmN1X2RlcmVmZXJlbmNlKHBvcnRfcHJpdi0mZ3Q7bGFnKTsKJiM0MzsJaWYgKERQQUEyX0VUSFNXX0ZMQ19JTVBSRUNJU0VfSUZfSUQoZmxjKSAmYW1wOyZhbXA7IGxhZykKJiM0MzsJCXNrYi0mZ3Q7ZGV2ID0gbGFnLSZndDtib25kX2RldjsKJiM0MzsJZWxzZQomIzQzOwkJc2tiLSZndDtkZXYgPSBuZXRkZXY7CiAJc2tiLSZndDtwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgc2tiLSZndDtkZXYpOwogCiAJLyogU2V0dXAgdGhlIG9mZmxvYWRfZndkX21hcmsgb25seSBpZiB0aGUgcG9ydCBpcyB1bmRlciBhIGJyaWRnZSAqLwogCXNrYi0mZ3Q7b2ZmbG9hZF9md2RfbWFyayA9ICEhKHBvcnRfcHJpdi0mZ3Q7ZmRiLSZndDticmlkZ2VfZGV2KTsKIAomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKIAluZXRpZl9yZWNlaXZlX3NrYihza2IpOwogCiAJcmV0dXJuOwpAQCAtMjU2MSw2ICYjNDM7MzIwMiw5IEBAIHN0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9kZXRlY3RfZmVhdHVyZXMoc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3KQogCiAJaWYgKGV0aHN3LSZndDttYWpvciAmZ3Q7IDggfHwgKGV0aHN3LSZndDttYWpvciA9PSA4ICZhbXA7JmFtcDsgZXRoc3ctJmd0O21pbm9yICZndDs9IDYpKQogCQlldGhzdy0mZ3Q7ZmVhdHVyZXMgfD0gRVRIU1dfRkVBVFVSRV9NQUNfQUREUjsKJiM0MzsKJiM0MzsJaWYgKGV0aHN3LSZndDttYWpvciAmZ3Q7IDggfHwgKGV0aHN3LSZndDttYWpvciA9PSA4ICZhbXA7JmFtcDsgZXRoc3ctJmd0O21pbm9yICZndDs9IDEzKSkKJiM0MzsJCWV0aHN3LSZndDtmZWF0dXJlcyB8PSBFVEhTV19GRUFUVVJFX0xBR19PRkZMT0FEOwogfQogCiBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9zZXR1cF9mcXMoc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3KQpAQCAtMzE5NSwxNyAmIzQzOzM4MzksMTUgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfaW5pdChzdHJ1Y3QgZnNsX21jX2RldmljZSAqc3dfZGV2KQogCXJldHVybiBlcnI7CiB9CiAKLS8qIEFkZCBhbiBBQ0wgdG8gcmVkaXJlY3QgZnJhbWVzIHdpdGggc3BlY2lmaWMgZGVzdGluYXRpb24gTUFDIGFkZHJlc3MgdG8KLSAqIGNvbnRyb2wgaW50ZXJmYWNlCi0gKi8KJiM0MzsvKiBBZGQgYW4gQUNMIHRvIHJlZGlyZWN0IGZyYW1lcyB0byBjb250cm9sIGludGVyZmFjZSBiYXNlZCBvbiB0aGUgZHN0IE1BQyAqLwogc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF90cmFwX21hY19hZGRyKHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiwKLQkJCQkJICAgY29uc3QgY2hhciAqbWFjKQomIzQzOwkJCQkJICAgY29uc3QgdTggKm1hYywgY29uc3QgdTggKm1hc2spCiB7CiAJc3RydWN0IGRwYWEyX3N3aXRjaF9hY2xfZW50cnkgYWNsX2VudHJ5ID0gezB9OwogCiAJLyogTWF0Y2ggb24gdGhlIGRlc3RpbmF0aW9uIE1BQyBhZGRyZXNzICovCiAJZXRoZXJfYWRkcl9jb3B5KGFjbF9lbnRyeS5rZXkubWF0Y2gubDJfZGVzdF9tYWMsIG1hYyk7Ci0JZXRoX2Jyb2FkY2FzdF9hZGRyKGFjbF9lbnRyeS5rZXkubWFzay5sMl9kZXN0X21hYyk7CiYjNDM7CWV0aGVyX2FkZHJfY29weShhY2xfZW50cnkua2V5Lm1hc2subDJfZGVzdF9tYWMsIG1hc2spOwogCiAJLyogVHJhcCB0byBDUFUgKi8KIAlhY2xfZW50cnkuY2ZnLnByZWNlZGVuY2UgPSAwOwpAQCAtMzIxNiw3ICYjNDM7Mzg1OCw4IEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfdHJhcF9tYWNfYWRkcihzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYsCiAKIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfaW5pdChzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYsIHUxNiBwb3J0KQogewotCWNvbnN0IGNoYXIgc3RwYVtFVEhfQUxFTl0gPSB7MHgwMSwgMHg4MCwgMHhjMiwgMHgwMCwgMHgwMCwgMHgwMH07CiYjNDM7CWNvbnN0IHU4IGxsX21hY1tFVEhfQUxFTl0gPSB7MHgwMSwgMHg4MCwgMHhjMiwgMHgwMCwgMHgwMCwgMHgwMH07CiYjNDM7CWNvbnN0IHU4IGxsX21hc2tbRVRIX0FMRU5dID0gezB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjB9OwogCXN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfdmxhbiB2bGFuID0gewogCQkub2JqLmlkID0gU1dJVENIREVWX09CSl9JRF9QT1JUX1ZMQU4sCiAJCS52aWQgPSBERUZBVUxUX1ZMQU5fSUQsCkBAIC0zMjkxLDcgJiM0MzszOTM0LDcgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9pbml0KHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiwgdTE2IHBvcnQpCiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X3RyYXBfbWFjX2FkZHIocG9ydF9wcml2LCBzdHBhKTsKJiM0MzsJZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfdHJhcF9tYWNfYWRkcihwb3J0X3ByaXYsIGxsX21hYywgbGxfbWFzayk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMzMzMSw2ICYjNDM7Mzk3NCw5IEBAIHN0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9yZW1vdmUoc3RydWN0IGZzbF9tY19kZXZpY2UgKnN3X2RldikKIAlkZXYgPSAmYW1wO3N3X2Rldi0mZ3Q7ZGV2OwogCWV0aHN3ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKJiM0MzsJLyogTWFrZSBzdXJlIHRoYXQgYWxsIGV2ZW50cyB3ZXJlIGhhbmRsZWQgYmVmb3JlIHdlIGtmcmVlIGFueXRoaW5nICovCiYjNDM7CWZsdXNoX3dvcmtxdWV1ZShldGhzdy0mZ3Q7d29ya3F1ZXVlKTsKJiM0MzsKIAlkcGFhMl9zd2l0Y2hfdGVhcmRvd25faXJxcyhzd19kZXYpOwogCiAJZHBzd19kaXNhYmxlKGV0aHN3LSZndDttY19pbywgMCwgZXRoc3ctJmd0O2Rwc3dfaGFuZGxlKTsKQEAgLTMzNDQsMTIgJiM0MzszOTkwLDE1IEBAIHN0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9yZW1vdmUoc3RydWN0IGZzbF9tY19kZXZpY2UgKnN3X2RldikKIAlmb3IgKGkgPSAwOyBpICZsdDsgRFBBQTJfU1dJVENIX1JYX05VTV9GUVM7IGkmIzQzOyYjNDM7KQogCQluZXRpZl9uYXBpX2RlbCgmYW1wO2V0aHN3LSZndDtmcVtpXS5uYXBpKTsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBldGhzdy0mZ3Q7c3dfYXR0ci5udW1faWZzOyBpJiM0MzsmIzQzOykKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGV0aHN3LSZndDtzd19hdHRyLm51bV9pZnM7IGkmIzQzOyYjNDM7KSB7CiAJCWRwYWEyX3N3aXRjaF9yZW1vdmVfcG9ydChldGhzdywgaSk7CiYjNDM7CQltdXRleF9kZXN0cm95KCZhbXA7ZXRoc3ctJmd0O2xhZ3NbaV0uZmRiX2xvY2spOwomIzQzOwl9CiAKIAlrZnJlZShldGhzdy0mZ3Q7ZmRicyk7CiAJa2ZyZWUoZXRoc3ctJmd0O2ZpbHRlcl9ibG9ja3MpOwogCWtmcmVlKGV0aHN3LSZndDtwb3J0cyk7CiYjNDM7CWtmcmVlKGV0aHN3LSZndDtsYWdzKTsKIAogCWRwYWEyX3N3aXRjaF90ZWFyZG93bihzd19kZXYpOwogCkBAIC0zMzc3LDYgJiM0Mzs0MDI2LDcgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcHJvYmVfcG9ydChzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3csCiAJcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYocG9ydF9uZXRkZXYpOwogCXBvcnRfcHJpdi0mZ3Q7bmV0ZGV2ID0gcG9ydF9uZXRkZXY7CiAJcG9ydF9wcml2LSZndDtldGhzd19kYXRhID0gZXRoc3c7CiYjNDM7CXJjdV9hc3NpZ25fcG9pbnRlcihwb3J0X3ByaXYtJmd0O2xhZywgTlVMTCk7CiAKIAltdXRleF9pbml0KCZhbXA7cG9ydF9wcml2LSZndDttYWNfbG9jayk7CiAKQEAgLTM0ODQsNiAmIzQzOzQxMzQsMjEgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcHJvYmUoc3RydWN0IGZzbF9tY19kZXZpY2UgKnN3X2RldikKIAkJZ290byBlcnJfZnJlZV9mZGJzOwogCX0KIAomIzQzOwlldGhzdy0mZ3Q7bGFncyA9IGtjYWxsb2MoZXRoc3ctJmd0O3N3X2F0dHIubnVtX2lmcywgc2l6ZW9mKCpldGhzdy0mZ3Q7bGFncyksCiYjNDM7CQkJICAgICAgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghZXRoc3ctJmd0O2xhZ3MpIHsKJiM0MzsJCWVyciA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIGVycl9mcmVlX2ZpbHRlcjsKJiM0MzsJfQomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZXRoc3ctJmd0O3N3X2F0dHIubnVtX2lmczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWV0aHN3LSZndDtsYWdzW2ldLmJvbmRfZGV2ID0gTlVMTDsKJiM0MzsJCWV0aHN3LSZndDtsYWdzW2ldLmV0aHN3ID0gZXRoc3c7CiYjNDM7CQlldGhzdy0mZ3Q7bGFnc1tpXS5pZCA9IGkgJiM0MzsgMTsKJiM0MzsJCWV0aHN3LSZndDtsYWdzW2ldLmluX3VzZSA9IDA7CiYjNDM7CQltdXRleF9pbml0KCZhbXA7ZXRoc3ctJmd0O2xhZ3NbaV0uZmRiX2xvY2spOwomIzQzOwkJSU5JVF9MSVNUX0hFQUQoJmFtcDtldGhzdy0mZ3Q7bGFnc1tpXS5mZGJzKTsKJiM0MzsJfQomIzQzOwogCWZvciAoaSA9IDA7IGkgJmx0OyBldGhzdy0mZ3Q7c3dfYXR0ci5udW1faWZzOyBpJiM0MzsmIzQzOykgewogCQllcnIgPSBkcGFhMl9zd2l0Y2hfcHJvYmVfcG9ydChldGhzdywgaSk7CiAJCWlmIChlcnIpCkBAIC0zNTMwLDYgJiM0Mzs0MTk1LDEwIEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3Byb2JlKHN0cnVjdCBmc2xfbWNfZGV2aWNlICpzd19kZXYpCiBlcnJfZnJlZV9uZXRkZXY6CiAJZm9yIChpLS07IGkgJmd0Oz0gMDsgaS0tKQogCQlkcGFhMl9zd2l0Y2hfcmVtb3ZlX3BvcnQoZXRoc3csIGkpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZXRoc3ctJmd0O3N3X2F0dHIubnVtX2lmczsgaSYjNDM7JiM0MzspCiYjNDM7CQltdXRleF9kZXN0cm95KCZhbXA7ZXRoc3ctJmd0O2xhZ3NbaV0uZmRiX2xvY2spOwomIzQzOwlrZnJlZShldGhzdy0mZ3Q7bGFncyk7CiYjNDM7ZXJyX2ZyZWVfZmlsdGVyOgogCWtmcmVlKGV0aHN3LSZndDtmaWx0ZXJfYmxvY2tzKTsKIGVycl9mcmVlX2ZkYnM6CiAJa2ZyZWUoZXRoc3ctJmd0O2ZkYnMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXN3aXRjaC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXN3aXRjaC5oCmluZGV4IDQyYjNjYTczZjU1ZDU0Li42M2I3MDJiMDAwMGMyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXN3aXRjaC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guaApAQCAtNDEsNyAmIzQzOzQxLDggQEAKICNkZWZpbmUgRVRIU1dfTUFYX0ZSQU1FX0xFTkdUSAkoRFBBQTJfTUZMIC0gVkxBTl9FVEhfSExFTiAtIEVUSF9GQ1NfTEVOKQogI2RlZmluZSBFVEhTV19MMl9NQVhfRlJNKG10dSkJKChtdHUpICYjNDM7IFZMQU5fRVRIX0hMRU4gJiM0MzsgRVRIX0ZDU19MRU4pCiAKLSNkZWZpbmUgRVRIU1dfRkVBVFVSRV9NQUNfQUREUglCSVQoMCkKJiM0MzsjZGVmaW5lIEVUSFNXX0ZFQVRVUkVfTUFDX0FERFIJCUJJVCgwKQomIzQzOyNkZWZpbmUgRVRIU1dfRkVBVFVSRV9MQUdfT0ZGTE9BRAlCSVQoMSkKIAogLyogTnVtYmVyIG9mIHJlY2VpdmUgcXVldWVzIChvbmUgUlggYW5kIG9uZSBUWF9DT05GKSAqLwogI2RlZmluZSBEUEFBMl9TV0lUQ0hfUlhfTlVNX0ZRUwkyCkBAIC04Niw2ICYjNDM7ODcsOSBAQAogCiAjZGVmaW5lIERQQUEyX0VUSFNXX1BPUlRfQUNMX0NNRF9CVUZfU0laRQkyNTYKIAomIzQzOyNkZWZpbmUgRFBBQTJfRVRIU1dfRkxDX0lGX0lEKGZsYykJCSgoKGZsYykgJmd0OyZndDsgMzIpICZhbXA7IEdFTk1BU0soMTUsIDApKQomIzQzOyNkZWZpbmUgRFBBQTJfRVRIU1dfRkxDX0lNUFJFQ0lTRV9JRl9JRChmbGMpCSgoZmxjKSAmYW1wOyBCSVRfVUxMKDYzKSkKJiM0MzsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZHBhYTJfc3dpdGNoX3BvcnRfZXRodG9vbF9vcHM7CiAKIHN0cnVjdCBldGhzd19jb3JlOwpAQCAtOTksMTIgJiM0MzsxMDMsMzAgQEAgc3RydWN0IGRwYWEyX3N3aXRjaF9mcSB7CiAJdTMyIGZxaWQ7CiB9OwogCiYjNDM7c3RydWN0IGRwYWEyX21hY19hZGRyIHsKJiM0MzsJdW5zaWduZWQgY2hhciBhZGRyW0VUSF9BTEVOXTsKJiM0MzsJdTE2IHZpZDsKJiM0MzsJcmVmY291bnRfdCByZWZjb3VudDsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwomIzQzO307CiYjNDM7CiBzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZkYiB7CiAJc3RydWN0IG5ldF9kZXZpY2UJKmJyaWRnZV9kZXY7CiAJdTE2CQkJZmRiX2lkOwogCWJvb2wJCQlpbl91c2U7CiB9OwogCiYjNDM7c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgewomIzQzOwlzdHJ1Y3QgZXRoc3dfY29yZQkqZXRoc3c7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlCSpib25kX2RldjsKJiM0MzsJYm9vbAkJCWluX3VzZTsKJiM0MzsJdTgJCQlpZDsKJiM0MzsJc3RydWN0IGV0aHN3X3BvcnRfcHJpdgkqcHJpbWFyeTsKJiM0MzsJLyogUHJvdGVjdHMgdGhlIGxpc3Qgb2YgZmRicyBpbnN0YWxsZWQgb24gdGhpcyBMQUcgKi8KJiM0MzsJc3RydWN0IG11dGV4CQlmZGJfbG9jazsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZAlmZGJzOwomIzQzO307CiYjNDM7CiBzdHJ1Y3QgZHBhYTJfc3dpdGNoX2FjbF9lbnRyeSB7CiAJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwogCXUxNgkJCXByaW87CkBAIC0xNjMsNiAmIzQzOzE4NSw4IEBAIHN0cnVjdCBldGhzd19wb3J0X3ByaXYgewogCXN0cnVjdCBkcGFhMl9tYWMJKm1hYzsKIAkvKiBQcm90ZWN0cyBhZ2FpbnN0IGNoYW5nZXMgdG8gcG9ydF9wcml2LSZndDttYWMgKi8KIAlzdHJ1Y3QgbXV0ZXgJCW1hY19sb2NrOwomIzQzOwomIzQzOwlzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyBfX3JjdSAqbGFnOwogfTsKIAogLyogU3dpdGNoIGRhdGEgKi8KQEAgLTE5MCw2ICYjNDM7MjE0LDggQEAgc3RydWN0IGV0aHN3X2NvcmUgewogCXN0cnVjdCBkcGFhMl9zd2l0Y2hfZmRiCQkqZmRiczsKIAlzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZpbHRlcl9ibG9jayAqZmlsdGVyX2Jsb2NrczsKIAl1MTYJCQkJbWlycm9yX3BvcnQ7CiYjNDM7CiYjNDM7CXN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnCQkqbGFnczsKIH07CiAKIHN0YXRpYyBpbmxpbmUgaW50IGRwYWEyX3N3aXRjaF9nZXRfaW5kZXgoc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3LApAQCAtMjc0LDQgJiM0MzszMDAsMTggQEAgaW50IGRwYWEyX3N3aXRjaF9ibG9ja19vZmZsb2FkX21pcnJvcihzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZpbHRlcl9ibG9jayAqYmxvY2ssCiAKIGludCBkcGFhMl9zd2l0Y2hfYmxvY2tfdW5vZmZsb2FkX21pcnJvcihzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZpbHRlcl9ibG9jayAqYmxvY2ssCiAJCQkJCXN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdik7CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sCiYjNDM7ZHBhYTJfc3dpdGNoX3BvcnRfb2ZmbG9hZHNfYnJpZGdlX3BvcnQoc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2LAomIzQzOwkJCQkgICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWcgPSByY3VfZGVyZWZlcmVuY2VfcnRubChwb3J0X3ByaXYtJmd0O2xhZyk7CiYjNDM7CiYjNDM7CWlmIChsYWcgJmFtcDsmYW1wOyBsYWctJmd0O2JvbmRfZGV2ID09IGRldikKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwlpZiAocG9ydF9wcml2LSZndDtuZXRkZXYgPT0gZGV2KQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiAjZW5kaWYJLyogX19FVEhTV19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBzdy1jbWQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LWNtZC5oCmluZGV4IDM5N2Q1NWYyYmQ5OTUwLi45YTIwNTVjNjQ5ODNjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwc3ctY21kLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwc3ctY21kLmgKQEAgLTEyLDcgJiM0MzsxMiw3IEBACiAKIC8qIERQU1cgVmVyc2lvbiAqLwogI2RlZmluZSBEUFNXX1ZFUl9NQUpPUgkJOAotI2RlZmluZSBEUFNXX1ZFUl9NSU5PUgkJOQomIzQzOyNkZWZpbmUgRFBTV19WRVJfTUlOT1IJCTEzCiAKICNkZWZpbmUgRFBTV19DTURfQkFTRV9WRVJTSU9OCTEKICNkZWZpbmUgRFBTV19DTURfVkVSU0lPTl8yCTIKQEAgLTkyLDExICYjNDM7OTIsMTQgQEAKICNkZWZpbmUgRFBTV19DTURJRF9DVFJMX0lGX1NFVF9QT09MUyAgICAgICAgRFBTV19DTURfSUQoMHgwQTEpCiAjZGVmaW5lIERQU1dfQ01ESURfQ1RSTF9JRl9FTkFCTEUgICAgICAgICAgIERQU1dfQ01EX0lEKDB4MEEyKQogI2RlZmluZSBEUFNXX0NNRElEX0NUUkxfSUZfRElTQUJMRSAgICAgICAgICBEUFNXX0NNRF9JRCgweDBBMykKJiM0MzsjZGVmaW5lIERQU1dfQ01ESURfU0VUX0xBRyAgICAgICAgICAgICAgICAgIERQU1dfQ01EX1YyKDB4MEE0KQogI2RlZmluZSBEUFNXX0NNRElEX0NUUkxfSUZfU0VUX1FVRVVFICAgICAgICBEUFNXX0NNRF9JRCgweDBBNikKIAogI2RlZmluZSBEUFNXX0NNRElEX1NFVF9FR1JFU1NfRkxPT0QgICAgICAgICBEUFNXX0NNRF9JRCgweDBBQykKICNkZWZpbmUgRFBTV19DTURJRF9JRl9TRVRfTEVBUk5JTkdfTU9ERSAgICAgRFBTV19DTURfSUQoMHgwQUQpCiAKJiM0MzsjZGVmaW5lIERQU1dfQ01ESURfSUZfU0VUX0xBR19TVEFURSAgICAgICAgIERQU1dfQ01EX0lEKDB4MEIwKQomIzQzOwogLyogTWFjcm9zIGZvciBhY2Nlc3NpbmcgY29tbWFuZCBmaWVsZHMgc21hbGxlciB0aGFuIDFieXRlICovCiAjZGVmaW5lIERQU1dfTUFTSyhmaWVsZCkgICAgICAgIFwKIAlHRU5NQVNLKERQU1dfIyNmaWVsZCMjX1NISUZUICYjNDM7IERQU1dfIyNmaWVsZCMjX1NJWkUgLSAxLCBcCkBAIC01NTIsNSAmIzQzOzU1NSwxOCBAQCBzdHJ1Y3QgZHBzd19jbWRfaWZfcmVmbGVjdGlvbiB7CiAJLyogb25seSAyIGJpdHMgZnJvbSB0aGUgTFNCICovCiAJdTggZmlsdGVyOwogfTsKJiM0MzsKJiM0MztzdHJ1Y3QgZHBzd19jbWRfbGFnIHsKJiM0MzsJdTggZ3JvdXBfaWQ7CiYjNDM7CXU4IG51bV9pZnM7CiYjNDM7CXU4IHBhZFs2XTsKJiM0MzsJdTggaWZfaWRbRFBTV19NQVhfTEFHX0lGU107CiYjNDM7CXU4IHBoYXNlOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGRwc3dfY21kX2lmX3NldF9sYWdfc3RhdGUgewomIzQzOwlfX2xlMTYgaWZfaWQ7CiYjNDM7CXU4IHR4X2VuYWJsZWQ7CiYjNDM7fTsKICNwcmFnbWEgcGFjayhwb3ApCiAjZW5kaWYgLyogX19GU0xfRFBTV19DTURfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwc3cuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LmMKaW5kZXggYWI5MjFkNzVkZWIyZTguLmY3NWNiZGNlNDJiYTJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBzdy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LmMKQEAgLTE2NTksMyAmIzQzOzE2NTksNjMgQEAgaW50IGRwc3dfaWZfcmVtb3ZlX3JlZmxlY3Rpb24oc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHUzMiBjbWRfZmxhZ3MsIHUxNiB0b2tlbiwKIAogCXJldHVybiBtY19zZW5kX2NvbW1hbmQobWNfaW8sICZhbXA7Y21kKTsKIH0KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBkcHN3X2xhZ19zZXQoKSAtIFNldCBMQUcgY29uZmlndXJhdGlvbgomIzQzOyAqIEBtY19pbzoJUG9pbnRlciB0byBNQyBwb3J0YWwmIzM5O3MgSS9PIG9iamVjdAomIzQzOyAqIEBjbWRfZmxhZ3M6CUNvbW1hbmQgZmxhZ3M7IG9uZSBvciBtb3JlIG9mICYjMzk7TUNfQ01EX0ZMQUdfJiMzOTsKJiM0MzsgKiBAdG9rZW46CVRva2VuIG9mIERQU1cgb2JqZWN0CiYjNDM7ICogQGNmZzoJcG9pbnRlciB0byBMQUcgY29uZmlndXJhdGlvbgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAgICYjMzk7MCYjMzk7IG9uIFN1Y2Nlc3M7IEVycm9yIGNvZGUgb3RoZXJ3aXNlLgomIzQzOyAqLwomIzQzO2ludCBkcHN3X2xhZ19zZXQoc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHUzMiBjbWRfZmxhZ3MsIHUxNiB0b2tlbiwKJiM0MzsJCSBjb25zdCBzdHJ1Y3QgZHBzd19sYWdfY2ZnICpjZmcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZnNsX21jX2NvbW1hbmQgY21kID0geyAwIH07CiYjNDM7CXN0cnVjdCBkcHN3X2NtZF9sYWcgKmNtZF9wYXJhbXM7CiYjNDM7CWludCBpID0gMDsKJiM0MzsKJiM0MzsJY21kLmhlYWRlciA9IG1jX2VuY29kZV9jbWRfaGVhZGVyKERQU1dfQ01ESURfU0VUX0xBRywgY21kX2ZsYWdzLCB0b2tlbik7CiYjNDM7CiYjNDM7CWlmIChjZmctJmd0O251bV9pZnMgJmd0OyBEUFNXX01BWF9MQUdfSUZTKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwljbWRfcGFyYW1zID0gKHN0cnVjdCBkcHN3X2NtZF9sYWcgKiljbWQucGFyYW1zOwomIzQzOwljbWRfcGFyYW1zLSZndDtncm91cF9pZCA9IGNmZy0mZ3Q7Z3JvdXBfaWQ7CiYjNDM7CWNtZF9wYXJhbXMtJmd0O251bV9pZnMgPSBjZmctJmd0O251bV9pZnM7CiYjNDM7CWNtZF9wYXJhbXMtJmd0O3BoYXNlID0gY2ZnLSZndDtwaGFzZTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGNmZy0mZ3Q7bnVtX2lmczsgaSYjNDM7JiM0MzspCiYjNDM7CQljbWRfcGFyYW1zLSZndDtpZl9pZFtpXSA9IGNmZy0mZ3Q7aWZfaWRbaV07CiYjNDM7CiYjNDM7CXJldHVybiBtY19zZW5kX2NvbW1hbmQobWNfaW8sICZhbXA7Y21kKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZHBzd19pZl9zZXRfbGFnX3N0YXRlKCkgLSBDaGFuZ2UgcGVyIHBvcnQgTEFHIHN0YXRlCiYjNDM7ICogQG1jX2lvOiAgICAgIFBvaW50ZXIgdG8gTUMgcG9ydGFsJiMzOTtzIEkvTyBvYmplY3QKJiM0MzsgKiBAY21kX2ZsYWdzOiAgQ29tbWFuZCBmbGFnczsgb25lIG9yIG1vcmUgb2YgJiMzOTtNQ19DTURfRkxBR18mIzM5OwomIzQzOyAqIEB0b2tlbjogICAgICBUb2tlbiBvZiBEUFNXIG9iamVjdAomIzQzOyAqIEBpZl9pZDogICAgICBJRCBvZiB0aGUgc3dpdGNoIGludGVyZmFjZQomIzQzOyAqIEB0eF9lbmFibGVkOiBWYWx1ZSBvZiB0aGUgcGVyIHBvcnQgTEFHIHN0YXRlCiYjNDM7ICogICAgIC0gMCBpZiB0aGUgaW50ZXJmYWNlIHdpbGwgbm90IGJlIGFjdGl2ZSBhcyBwYXJ0IG9mIHRoZSBMQUcgZ3JvdXAKJiM0MzsgKiAgICAgLSAxIGlmIHRoZSBpbnRlcmZhY2Ugd2lsbCBiZSBhY3RpdmUgaW4gdGhlIExBRyBncm91cAomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAgICYjMzk7MCYjMzk7IG9uIFN1Y2Nlc3M7IEVycm9yIGNvZGUgb3RoZXJ3aXNlLgomIzQzOyAqLwomIzQzO2ludCBkcHN3X2lmX3NldF9sYWdfc3RhdGUoc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHUzMiBjbWRfZmxhZ3MsIHUxNiB0b2tlbiwKJiM0MzsJCQkgIHUxNiBpZl9pZCwgdTggdHhfZW5hYmxlZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkcHN3X2NtZF9pZl9zZXRfbGFnX3N0YXRlICpjbWRfcGFyYW1zOwomIzQzOwlzdHJ1Y3QgZnNsX21jX2NvbW1hbmQgY21kID0geyAwIH07CiYjNDM7CiYjNDM7CWNtZC5oZWFkZXIgPSBtY19lbmNvZGVfY21kX2hlYWRlcihEUFNXX0NNRElEX0lGX1NFVF9MQUdfU1RBVEUsCiYjNDM7CQkJCQkgIGNtZF9mbGFncywgdG9rZW4pOwomIzQzOwomIzQzOwljbWRfcGFyYW1zID0gKHN0cnVjdCBkcHN3X2NtZF9pZl9zZXRfbGFnX3N0YXRlICopY21kLnBhcmFtczsKJiM0MzsJY21kX3BhcmFtcy0mZ3Q7aWZfaWQgPSBjcHVfdG9fbGUxNihpZl9pZCk7CiYjNDM7CWNtZF9wYXJhbXMtJmd0O3R4X2VuYWJsZWQgPSB0eF9lbmFibGVkOwomIzQzOwomIzQzOwlyZXR1cm4gbWNfc2VuZF9jb21tYW5kKG1jX2lvLCAmYW1wO2NtZCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwc3cuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LmgKaW5kZXggYjkwYmQzNjNmNDdhMTkuLjg5ZjAyNjdkZThlOWJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBzdy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LmgKQEAgLTIwLDYgJiM0MzsyMCw4IEBAIHN0cnVjdCBmc2xfbWNfaW87CiAKICNkZWZpbmUgRFBTV19NQVhfSUYJCTY0CiAKJiM0MzsjZGVmaW5lIERQU1dfTUFYX0xBR19JRlMJOAomIzQzOwogaW50IGRwc3dfb3BlbihzdHJ1Y3QgZnNsX21jX2lvICptY19pbywgdTMyIGNtZF9mbGFncywgaW50IGRwc3dfaWQsIHUxNiAqdG9rZW4pOwogCiBpbnQgZHBzd19jbG9zZShzdHJ1Y3QgZnNsX21jX2lvICptY19pbywgdTMyIGNtZF9mbGFncywgdTE2IHRva2VuKTsKQEAgLTc4OCw0ICYjNDM7NzkwLDMyIEBAIGludCBkcHN3X2lmX2FkZF9yZWZsZWN0aW9uKHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLCB1MzIgY21kX2ZsYWdzLCB1MTYgdG9rZW4sCiAKIGludCBkcHN3X2lmX3JlbW92ZV9yZWZsZWN0aW9uKHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLCB1MzIgY21kX2ZsYWdzLCB1MTYgdG9rZW4sCiAJCQkgICAgICB1MTYgaWZfaWQsIGNvbnN0IHN0cnVjdCBkcHN3X3JlZmxlY3Rpb25fY2ZnICpjZmcpOwomIzQzOwomIzQzOy8qIExpbmsgQWdncmVnYXRpb24gR3JvdXAgY29uZmlndXJhdGlvbiAqLwomIzQzOwomIzQzOyNkZWZpbmUgRFBTV19MQUdfU0VUX1BIQVNFX0FQUExZIDAKJiM0MzsjZGVmaW5lIERQU1dfTEFHX1NFVF9QSEFTRV9DSEVDSyAxCiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IGRwc3dfbGFnX2NmZyAtIENvbmZpZ3VyYXRpb24gc3RydWN0dXJlIGZvciBhIExBRyBncm91cAomIzQzOyAqIEBncm91cF9pZDogTGluayBhZ2dyZWdhdGlvbiBncm91cCBJRC4gVmFsaWQgdmFsdWVzIGFyZSBpbiB0aGUKJiM0MzsgKiBbMSwgRFBTV19NQVhfTEFHX0lGU10gcmFuZ2UuCiYjNDM7ICogQG51bV9pZnM6IE51bWJlciBvZiBpbnRlcmZhY2VzIGluIHRoaXMgTEFHIGdyb3VwLCB2YWxpZCByYW5nZSBpcwomIzQzOyAqIFswLCBEUFNXX01BWF9MQUdfSUZTXS4KJiM0MzsgKiBAaWZfaWQ6IEFycmF5IGNvbnRhaW5pbmcgdGhlIGludGVyZmFjZSBJRHMgb2YgdGhlIHBvcnRzIHBhcnQgb2YgYSBMQUcgZ3JvdXAKJiM0MzsgKiBAcGhhc2U6IFVzZSBEUFNXX0xBR19TRVRfUEhBU0VfQVBQTFkgZm9yIExBRyBjb25maWd1cmF0aW9uIHByb2Nlc3Npbmcgb3IKJiM0MzsgKiBEUFNXX0xBR19TRVRfUEhBU0VfQ0hFQ0sgZm9yIExBRyBjb25maWd1cmF0aW9uIHZhbGlkYXRpb24uCiYjNDM7ICovCiYjNDM7c3RydWN0IGRwc3dfbGFnX2NmZyB7CiYjNDM7CXU4IGdyb3VwX2lkOwomIzQzOwl1OCBudW1faWZzOwomIzQzOwl1OCBpZl9pZFtEUFNXX01BWF9MQUdfSUZTXTsKJiM0MzsJdTggcGhhc2U7CiYjNDM7fTsKJiM0MzsKJiM0MztpbnQgZHBzd19sYWdfc2V0KHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLCB1MzIgY21kX2ZsYWdzLCB1MTYgdG9rZW4sCiYjNDM7CQkgY29uc3Qgc3RydWN0IGRwc3dfbGFnX2NmZyAqY2ZnKTsKJiM0MzsKJiM0MztpbnQgZHBzd19pZl9zZXRfbGFnX3N0YXRlKHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLCB1MzIgY21kX2ZsYWdzLCB1MTYgdG9rZW4sCiYjNDM7CQkJICB1MTYgaWZfaWQsIHU4IHR4X2VuYWJsZWQpOwogI2VuZGlmIC8qIF9fRlNMX0RQU1dfSCAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjE2NgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDczNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBEUEFBMiBMQUcgT2ZmbG9hZCBDb2RlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBMaW5rIEFnZ3JlZ2F0aW9uIEdyb3VwIChMQUcpIG9mZmxvYWQgc3VwcG9ydCB0byB0aGUgRnJlZXNjYWxlIERQQUEyIHN3aXRjaCBkcml2ZXIsIHdoaWNoIGlzIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guY2AuIEl0JiMzOTtzIGltcGxlbWVudGluZyBuZXcgZnVuY3Rpb25zIGxpa2UgYGRwYWEyX3N3aXRjaF9sYWdfZ2V0X3VudXNlZGAsIGBkcGFhMl9zd2l0Y2hfbGFnX2ZkYl9hZGRgLCBhbmQgbW9kaWZpY2F0aW9ucyB0byBleGlzdGluZyBvbmVzIGxpa2UgYGRwYWEyX3N3aXRjaF9wb3J0X25ldGRldmljZV9ldmVudGAgdG8gaGFuZGxlIGBORVRERVZfQ0hBTkdFVVBQRVJgIGFuZCBgTkVUREVWX0NIQU5HRUxPV0VSU1RBVEVgLiBUaGUgY29yZSBvZiB0aGUgZHJpdmVyIHNlZW1zIHRvIGJlIGludGVyYWN0aW5nIGRpcmVjdGx5IHdpdGggdGhlIGhhcmR3YXJlLCBhIEZyZWVzY2FsZSBEUEFBMiBzd2l0Y2guCgpNeSBmaXJzdCB0aG91Z2h0IGlzLCBjYW4gSSBldmVuICp0ZXN0KiB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFRoaXMgZHJpdmVyIGlzIHNwZWNpZmljIHRvIHRoZSBEUEFBMiBhcmNoaXRlY3R1cmUsIHR5cGljYWxseSBmb3VuZCBvbiBBUk02NC1iYXNlZCBOWFAgTGF5ZXJzY2FwZSBTb0NzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlIGluIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpLCB3aGljaCBhcmUgbXkgdXN1YWwgdGVzdGluZyBncm91bmRzLgoKVGhlIGBkcGFhMl9zd2l0Y2hfcHJvYmVgIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgZGV2aWNlIG1hdGNoaW5nIHRoZSBmc2wtbWMgYnVzIGlzIGRldGVjdGVkLiBOb3csIHRoZSBmc2wtbWMgYnVzIGlzIGEgTlhQLXNwZWNpZmljIGJ1cy4gSSBoYXZlIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgc29mdHdhcmUgZW11bGF0aW9uIG9mIHRoYXQgYnVzIHdpdGhpbiBRRU1VLiBVc3VhbGx5LCBJJiMzOTtkIGNoZWNrIGEgc3RhbmRhcmQgc3l6a2FsbGVyIHNldHVwLCBidXQgSSBkb3VidCBpdCBoYXMgYW55IE5YUC1zcGVjaWZpYyBlbXVsYXRpb24uCgpJJiMzOTtsbCBjaGVjayB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEFyZSBgQ09ORklHX0ZTTF9NQ19CVVNgIGFuZCBgQ09ORklHX0ZTTF9EUEFBMl9TV0lUQ0hgIGV2ZW4gZW5hYmxpbmcgYW55dGhpbmcgbWVhbmluZ2Z1bCB3aXRob3V0IHRoZSBhY3R1YWwgaGFyZHdhcmU/IFNpbmNlIHN5emthbGxlciBpc24mIzM5O3Qgc2V0IHVwIGZvciBOWFAgaGFyZHdhcmUsIHRoZSBxdWVzdGlvbiBpcywgaG93IGNhbiBJIGV2ZW4gcmVhY2ggdGhpcyBjb2RlPwoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBpbiBgZHBhYTItc3dpdGNoLmNgLiBBaCwgeWVzLCBpdCAqZGVwZW5kcyBvbiogYEZTTF9NQ19CVVNgIGFuZCBgRlNMX0RQQUEyX1NXSVRDSGAuIFNvLCBpdCBsb29rcyBsaWtlIGBkcGFhMl9zd2l0Y2hfcHJvYmVgICpyZXF1aXJlcyogdGhlIGZzbC1tYyBidXMgdG8gYmUgcHJlc2VudCB0byBydW4uIFRoZSBmc2wtbWMgYnVzIGRldmljZXMgYXJlIHR5cGljYWxseSBwb3B1bGF0ZWQgYnkgdGhlIGZpcm13YXJlIG9yIHRoZSBkZXZpY2UgdHJlZSBvbiBhbiBOWFAgU29DLgoKT2theSwgSSB0aGluayBJIGhhdmUgaXQuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGltcG9zc2libGUgdG8gcmVhY2ggdGhpcyBjb2RlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRSAqd2l0aG91dCogc3BlY2lmaWMgaGFyZHdhcmUgZW11bGF0aW9uIG9mIHRoZSBmc2wtbWMgYnVzIGFuZCBEUEFBMiBoYXJkd2FyZS4gVGhpcyB3b3VsZCBtZWFuIEkgd291bGQgaGF2ZSB0byBjcmVhdGUgY3VzdG9tIGVtdWxhdGlvbiBzcGVjaWZpYyB0byB0aGUgRFBBQTIgaGFyZHdhcmUgdG8gcmVhY2ggdGhpcyBuZXcgY29kZSwgd2hpY2ggaXMgYmV5b25kIHRoZSBzY29wZSBvZiBhIHN0YW5kYXJkIGZ1enppbmcgZWZmb3J0LgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjay4gSSYjMzk7bGwgdXNlIGBncmVwcGVyYCB0byBzZWFyY2ggdGhyb3VnaCBgZHJpdmVycy9gIGFuZCBgdG9vbHMvYCBmb3IgbWVudGlvbnMgb2YgYGZzbC1tY2Agb3IgYGRwYWEyYCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgKmFueSogbW9jayBpbXBsZW1lbnRhdGlvbiBvciBhbnkgc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGUgZGV2aWNlLCBidXQgSSBhbSBub3QgdmVyeSBob3BlZnVsLiBUaGlzIHBhdGNoIHNob3VsZCB0aGVyZWZvcmUgaGF2ZSBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmc2wtbWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2J1cy9LY29uZmlnPTI0Mj1jb25maWcgREE4WFhfTVNUUFJJXG4tLVxuZHJpdmVycy9idXMvS2NvbmZpZy0yNDktXG5kcml2ZXJzL2J1cy9LY29uZmlnOjI1MDpzb3VyY2UgXCYjMzQ7ZHJpdmVycy9idXMvZnNsLW1jL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYnVzL0tjb25maWctMjUxLXNvdXJjZSBcJiMzNDtkcml2ZXJzL2J1cy9taGkvS2NvbmZpZ1wmIzM0O1xuLS1cbmRyaXZlcnMvYnVzL01ha2VmaWxlPTExPW9iai0kKENPTkZJR19NT1hURVQpXHRcdCYjNDM7PSBtb3h0ZXQub1xuZHJpdmVycy9idXMvTWFrZWZpbGUtMTItXG5kcml2ZXJzL2J1cy9NYWtlZmlsZToxMzojIERQQUEyIGZzbC1tYyBidXNcbmRyaXZlcnMvYnVzL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19GU0xfTUNfQlVTKVx0JiM0Mzs9IGZzbC1tYy9cbmRyaXZlcnMvYnVzL01ha2VmaWxlLTE1LVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9LY29uZmlnLTItI1xuZHJpdmVycy9idXMvZnNsLW1jL0tjb25maWc6MzojIERQQUEyIGZzbC1tYyBidXNcbmRyaXZlcnMvYnVzL2ZzbC1tYy9LY29uZmlnLTQtI1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9LY29uZmlnPTg9Y29uZmlnIEZTTF9NQ19CVVNcbmRyaXZlcnMvYnVzL2ZzbC1tYy9LY29uZmlnOjk6XHRib29sIFwmIzM0O1FvcklRIERQQUEyIGZzbC1tYyBidXMgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL2J1cy9mc2wtbWMvS2NvbmZpZy0xMC1cdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IChBUkNIX0xBWUVSU0NBUEUgfHwgKENPTVBJTEVfVEVTVCBcdTAwMjZcdTAwMjYgKEFSTSB8fCBBUk02NCB8fCBYODZfTE9DQUxfQVBJQyB8fCBQUEMpKSlcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvS2NvbmZpZy0xMy1cdCAgRHJpdmVyIHRvIGVuYWJsZSB0aGUgYnVzIGluZnJhc3RydWN0dXJlIGZvciB0aGUgUW9ySVEgRFBBQTJcbmRyaXZlcnMvYnVzL2ZzbC1tYy9LY29uZmlnOjE0Olx0ICBhcmNoaXRlY3R1cmUuICBUaGUgZnNsLW1jIGJ1cyBkcml2ZXIgaGFuZGxlcyBkaXNjb3Zlcnkgb2ZcbmRyaXZlcnMvYnVzL2ZzbC1tYy9LY29uZmlnLTE1LVx0ICBEUEFBMiBvYmplY3RzICh3aGljaCBhcmUgcmVwcmVzZW50ZWQgYXMgTGludXggZGV2aWNlcykgYW5kXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL01ha2VmaWxlPTc9b2JqLSQoQ09ORklHX0ZTTF9NQ19CVVMpICYjNDM7PSBtYy1idXMtZHJpdmVyLm9cbmRyaXZlcnMvYnVzL2ZzbC1tYy9NYWtlZmlsZS04LVxuZHJpdmVycy9idXMvZnNsLW1jL01ha2VmaWxlOjk6bWMtYnVzLWRyaXZlci1vYmpzIDo9IGZzbC1tYy1idXMubyBcXFxuZHJpdmVycy9idXMvZnNsLW1jL01ha2VmaWxlLTEwLVx0XHQgICAgICBtYy1zeXMubyBcXFxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9NYWtlZmlsZS0xNS1cdFx0ICAgICAgZHByYy1kcml2ZXIubyBcXFxuZHJpdmVycy9idXMvZnNsLW1jL01ha2VmaWxlOjE2Olx0XHQgICAgICBmc2wtbWMtYWxsb2NhdG9yLm8gXFxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9NYWtlZmlsZToxNzpcdFx0ICAgICAgZnNsLW1jLW1zaS5vIFxcXG5kcml2ZXJzL2J1cy9mc2wtbWMvTWFrZWZpbGUtMTgtXHRcdCAgICAgIGRwbWNwLm8gXFxcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvTWFrZWZpbGUtMjEtIyBNQyB1c2Vyc3BhY2Ugc3VwcG9ydFxuZHJpdmVycy9idXMvZnNsLW1jL01ha2VmaWxlOjIyOm9iai0kKENPTkZJR19GU0xfTUNfVUFQSV9TVVBQT1JUKSAmIzQzOz0gZnNsLW1jLXVhcGkub1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcGJwLmMtOC1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcGJwLmM6OTojaW5jbHVkZSBcJiMzNDtmc2wtbWMtcHJpdmF0ZS5oXCYjMzQ7XG5kcml2ZXJzL2J1cy9mc2wtbWMvZHBicC5jLTEwLVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcGNvbi5jLTgtXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHBjb24uYzo5OiNpbmNsdWRlIFwmIzM0O2ZzbC1tYy1wcml2YXRlLmhcJiMzNDtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcGNvbi5jLTEwLVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcG1jcC5jLTgtXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHBtY3AuYzo5OiNpbmNsdWRlIFwmIzM0O2ZzbC1tYy1wcml2YXRlLmhcJiMzNDtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcG1jcC5jLTEwLVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTE1LVxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM6MTY6I2luY2x1ZGUgXCYjMzQ7ZnNsLW1jLXByaXZhdGUuaFwmIzM0O1xuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtMTctXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM9Njg9c3RhdGljIGludCBfX2ZzbF9tY19kZXZpY2VfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYy03OS0gKlxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM6ODA6ICogQG1jX2J1c19kZXY6IHBvaW50ZXIgdG8gdGhlIGZzbC1tYyBkZXZpY2UgdGhhdCByZXByZXNlbnRzIGEgRFBSQyBvYmplY3RcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTgxLSAqIEBvYmpfZGVzY19hcnJheTogYXJyYXkgb2Ygb2JqZWN0IGRlc2NyaXB0b3JzIGZvciBjaGlsZCBvYmplY3RzIGN1cnJlbnRseVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jPTEyMz1zdHJ1Y3QgZnNsX21jX2RldmljZSAqZnNsX21jX2RldmljZV9sb29rdXAoc3RydWN0IGZzbF9tY19vYmpfZGVzYyAqb2JqX2Rlc2MsXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtMTM2LSAqXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYzoxMzc6ICogQG1jX2RldjogcG9pbnRlciB0byB0aGUgZnNsLW1jIGRldmljZSBmb3IgYSBnaXZlbiBNQyBvYmplY3RcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTEzOC0gKiBAb2JqX2Rlc2M6IHBvaW50ZXIgdG8gdGhlIE1DIG9iamVjdCYjMzk7cyBkZXNjcmlwdG9yIGluIHRoZSBNQ1xuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtMTM5LSAqXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYzoxNDA6ICogSWYgdGhlIHBsdWdnZWQgc3RhdGUgaGFzIGNoYW5nZWQgZnJvbSB1bnBsdWdnZWQgdG8gcGx1Z2dlZCwgdGhlIGZzbC1tY1xuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtMTQxLSAqIGRldmljZSBpcyBib3VuZCB0byB0aGUgY29ycmVzcG9uZGluZyBkZXZpY2UgZHJpdmVyLlxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM6MTQyOiAqIElmIHRoZSBwbHVnZ2VkIHN0YXRlIGhhcyBjaGFuZ2VkIGZyb20gcGx1Z2dlZCB0byB1bnBsdWdnZWQsIHRoZSBmc2wtbWNcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTE0My0gKiBkZXZpY2UgaXMgdW5ib3VuZCBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIGRldmljZSBkcml2ZXIuXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM9MTY5PXN0YXRpYyB2b2lkIGZzbF9tY19vYmpfZGV2aWNlX2FkZChzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfYnVzX2Rldixcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYy0xOTItICpcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jOjE5MzogKiBAbWNfYnVzX2RldjogcG9pbnRlciB0byB0aGUgZnNsLW1jIGRldmljZSB0aGF0IHJlcHJlc2VudHMgYSBEUFJDIG9iamVjdFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtMTk0LSAqIEBvYmpfZGVzY19hcnJheTogYXJyYXkgb2YgZGV2aWNlIGRlc2NyaXB0b3JzIGZvciBjaGlsZCBkZXZpY2VzIGN1cnJlbnRseVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jPTIwMj1zdGF0aWMgdm9pZCBkcHJjX2FkZF9uZXdfZGV2aWNlcyhzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfYnVzX2Rldixcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYy0yMjgtICpcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jOjIyOTogKiBAbWNfYnVzX2RldjogcG9pbnRlciB0byB0aGUgZnNsLW1jIGRldmljZSB0aGF0IHJlcHJlc2VudHMgYSBEUFJDIG9iamVjdFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtMjMwLSAqIEBhbGxvY19pbnRlcnJ1cHRzOiBpZiB0cnVlIHRoZSBmdW5jdGlvbiBhbGxvY2F0ZXMgdGhlIGludGVycnVwdCBwb29sLFxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jPTI0NT1pbnQgZHByY19zY2FuX29iamVjdHMoc3RydWN0IGZzbF9tY19kZXZpY2UgKm1jX2J1c19kZXYsXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtMzU2LSAqXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYzozNTc6ICogQG1jX2J1c19kZXY6IHBvaW50ZXIgdG8gdGhlIGZzbC1tYyBkZXZpY2UgdGhhdCByZXByZXNlbnRzIGEgRFBSQyBvYmplY3RcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTM1OC0gKiBAYWxsb2NfaW50ZXJydXB0czogaWYgdHJ1ZSB0aGUgZnVuY3Rpb24gYWxsb2NhdGVzIHRoZSBpbnRlcnJ1cHQgcG9vbCxcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYz01NzI9c3RhdGljIGludCBkcHJjX3NldHVwX2lycShzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfZGV2KVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTYwMS0gKlxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM6NjAyOiAqIEBtY19kZXY6IFBvaW50ZXIgdG8gZnNsLW1jIGRldmljZSByZXByZXNlbnRpbmcgYSBEUFJDXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYy02MDMtICpcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYz03MTE9RVhQT1JUX1NZTUJPTF9HUEwoZHByY19zZXR1cCk7XG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtNzE1LSAqXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYzo3MTY6ICogQG1jX2RldjogUG9pbnRlciB0byBmc2wtbWMgZGV2aWNlIHJlcHJlc2VudGluZyBhIERQUkNcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTcxNy0gKlxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jPTc1OD1zdGF0aWMgdm9pZCBkcHJjX3RlYXJkb3duX2lycShzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfZGV2KVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTc3MS0gKlxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM6NzcyOiAqIEBtY19kZXY6IFBvaW50ZXIgdG8gZnNsLW1jIGRldmljZSByZXByZXNlbnRpbmcgdGhlIERQUkNcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTc3My0gKlxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jPTgxNT1FWFBPUlRfU1lNQk9MX0dQTChkcHJjX2NsZWFudXApO1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTgxOS0gKlxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM6ODIwOiAqIEBtY19kZXY6IFBvaW50ZXIgdG8gZnNsLW1jIGRldmljZSByZXByZXNlbnRpbmcgdGhlIERQUkNcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTgyMS0gKlxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLmMtOS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLmM6MTA6I2luY2x1ZGUgXCYjMzQ7ZnNsLW1jLXByaXZhdGUuaFwmIzM0O1xuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMuYy0xMS1cbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTItLypcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM6MzogKiBmc2wtbWMgb2JqZWN0IGFsbG9jYXRvciBkcml2ZXJcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtNC0gKlxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtMTItXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jOjEzOiNpbmNsdWRlIFwmIzM0O2ZzbC1tYy1wcml2YXRlLmhcJiMzNDtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtMTQtXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jPTE1PXN0YXRpYyBib29sIF9fbXVzdF9jaGVjayBmc2xfbWNfaXNfYWxsb2NhdGFibGUoc3RydWN0IGZzbF9tY19kZXZpY2UgKm1jX2Rldilcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTIzLSAqIGZzbF9tY19yZXNvdXJjZV9wb29sX2FkZF9kZXZpY2UgLSBhZGQgYWxsb2NhdGFibGUgb2JqZWN0IHRvIGEgcmVzb3VyY2VcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM6MjQ6ICogcG9vbCBvZiBhIGdpdmVuIGZzbC1tYyBidXNcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtMjUtICpcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM6MjY6ICogQG1jX2J1czogcG9pbnRlciB0byB0aGUgZnNsLW1jIGJ1c1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYy0yNy0gKiBAcG9vbF90eXBlOiBwb29sIHR5cGVcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM6Mjg6ICogQG1jX2RldjogcG9pbnRlciB0byBhbGxvY2F0YWJsZSBmc2wtbWMgZGV2aWNlXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTI5LSAqL1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYz0zMD1zdGF0aWMgaW50IF9fbXVzdF9jaGVjayBmc2xfbWNfcmVzb3VyY2VfcG9vbF9hZGRfZGV2aWNlKHN0cnVjdCBmc2xfbWNfYnVzXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYy05MS0gKlxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYzo5MjogKiBAbWNfZGV2OiBwb2ludGVyIHRvIGFsbG9jYXRhYmxlIGZzbC1tYyBkZXZpY2VcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtOTMtICpcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM6OTQ6ICogSXQgcGVybWFuZW50bHkgcmVtb3ZlcyBhbiBhbGxvY2F0YWJsZSBmc2wtbWMgZGV2aWNlIGZyb20gdGhlIHJlc291cmNlXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTk1LSAqIHBvb2wuIEl0JiMzOTtzIGFuIGVycm9yIGlmIHRoZSBkZXZpY2UgaXMgaW4gdXNlLlxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM9MjU0PUVYUE9SVF9TWU1CT0xfR1BMKGZzbF9tY19yZXNvdXJjZV9mcmVlKTtcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTI1Ni0vKipcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM6MjU3OiAqIGZzbF9tY19vYmplY3RfYWxsb2NhdGUgLSBBbGxvY2F0ZXMgYW4gZnNsLW1jIG9iamVjdCBvZiB0aGUgZ2l2ZW5cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM6MjU4OiAqIHBvb2wgdHlwZSBmcm9tIGEgZ2l2ZW4gZnNsLW1jIGJ1cyBpbnN0YW5jZVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYy0yNTktICpcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM6MjYwOiAqIEBtY19kZXY6IGZzbC1tYyBkZXZpY2Ugd2hpY2ggaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYy0yNjEtICogYWxsb2NhdGVkIG9iamVjdFxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM9MzIyPUVYUE9SVF9TWU1CT0xfR1BMKGZzbF9tY19vYmplY3RfYWxsb2NhdGUpO1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtMzI0LS8qKlxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYzozMjU6ICogZnNsX21jX29iamVjdF9mcmVlIC0gUmV0dXJucyBhbiBmc2wtbWMgb2JqZWN0IHRvIHRoZSByZXNvdXJjZVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYy0zMjYtICogcG9vbCB3aGVyZSBpdCBjYW1lIGZyb20uXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jOjMyNzogKiBAbWNfYWRldjogUG9pbnRlciB0byB0aGUgZnNsLW1jIGRldmljZVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYy0zMjgtICovXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYz0zNDM9RVhQT1JUX1NZTUJPTF9HUEwoZnNsX21jX29iamVjdF9mcmVlKTtcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTM1MS0vKlxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYzozNTI6ICogSW5pdGlhbGl6ZSB0aGUgaW50ZXJydXB0IHBvb2wgYXNzb2NpYXRlZCB3aXRoIGFuIGZzbC1tYyBidXMuXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTM1My0gKiBJdCBhbGxvY2F0ZXMgYSBibG9jayBvZiBJUlFzIGZyb20gdGhlIEdJQy1JVFMuXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYz00MTE9RVhQT1JUX1NZTUJPTF9HUEwoZnNsX21jX3BvcHVsYXRlX2lycV9wb29sKTtcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTQxMy0vKlxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYzo0MTQ6ICogVGVhcmRvd24gdGhlIGludGVycnVwdCBwb29sIGFzc29jaWF0ZWQgd2l0aCBhbiBmc2wtbWMgYnVzLlxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYy00MTUtICogSXQgZnJlZXMgdGhlIElSUXMgdGhhdCB3ZXJlIGFsbG9jYXRlZCB0byB0aGUgcG9vbCwgYmFjayB0byB0aGUgR0lDLUlUUy5cbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jPTQzOD1FWFBPUlRfU1lNQk9MX0dQTChmc2xfbWNfY2xlYW51cF9pcnFfcG9vbCk7XG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYy00NDAtLypcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM6NDQxOiAqIEFsbG9jYXRlIHRoZSBJUlFzIHJlcXVpcmVkIGJ5IGEgZ2l2ZW4gZnNsLW1jIGRldmljZS5cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtNDQyLSAqL1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM9NTA2PUVYUE9SVF9TWU1CT0xfR1BMKGZzbF9tY19hbGxvY2F0ZV9pcnFzKTtcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTUwOC0vKlxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYzo1MDk6ICogRnJlZXMgdGhlIElSUXMgdGhhdCB3ZXJlIGFsbG9jYXRlZCBmb3IgYW4gZnNsLW1jIGRldmljZS5cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtNTEwLSAqL1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM9NTYyPXN0YXRpYyBpbnQgZnNsX21jX2FsbG9jYXRvcl9wcm9iZShzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfZGV2KVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtNTg1LVx0ZGV2X2RiZyhcdTAwMjZtY19kZXYtXHUwMDNlZGV2LFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYzo1ODY6XHRcdFwmIzM0O0FsbG9jYXRhYmxlIGZzbC1tYyBkZXZpY2UgYm91bmQgdG8gZnNsX21jX2FsbG9jYXRvciBkcml2ZXJcJiMzNDspO1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYy01ODctXHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jPTU5ND1zdGF0aWMgdm9pZCBmc2xfbWNfYWxsb2NhdG9yX3JlbW92ZShzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfZGV2KVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtNjA0LVx0ZGV2X2RiZyhcdTAwMjZtY19kZXYtXHUwMDNlZGV2LFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYzo2MDU6XHRcdFwmIzM0O0FsbG9jYXRhYmxlIGZzbC1tYyBkZXZpY2UgdW5ib3VuZCBmcm9tIGZzbF9tY19hbGxvY2F0b3IgZHJpdmVyXCYjMzQ7KTtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtNjA2LX1cbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEwLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoxMTojZGVmaW5lIHByX2ZtdChmbXQpIFwmIzM0O2ZzbC1tYzogXCYjMzQ7IGZtdFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMi1cbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTI1LVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoyNjojaW5jbHVkZSBcJiMzNDtmc2wtbWMtcHJpdmF0ZS5oXCYjMzQ7XG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTI3LVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0yOC0vKlxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoyOTogKiBEZWZhdWx0IERNQSBtYXNrIGZvciBkZXZpY2VzIG9uIGEgZnNsLW1jIGJ1c1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0zMC0gKi9cbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTMzPXN0YXRpYyBzdHJ1Y3QgZnNsX21jX3ZlcnNpb24gbWNfdmVyc2lvbjtcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTM2LSAqIHN0cnVjdCBmc2xfbWMgLSBQcml2YXRlIGRhdGEgb2YgYSBcJiMzNDtmc2wscW9yaXEtbWNcJiMzNDsgcGxhdGZvcm0gZGV2aWNlXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjM3OiAqIEByb290X21jX2J1c19kZXY6IGZzbC1tYyBkZXZpY2UgcmVwcmVzZW50aW5nIHRoZSByb290IERQUkNcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMzgtICogQG51bV90cmFuc2xhdGlvbl9yYW5nZXM6IG51bWJlciBvZiBlbnRyaWVzIGluIGFkZHJfdHJhbnNsYXRpb25fcmFuZ2VzXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz04MD1zdGF0aWMgcGh5c19hZGRyX3QgbWNfcG9ydGFsX2Jhc2VfcGh5c19hZGRyO1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtODMtICogZnNsX21jX2J1c19tYXRjaCAtIGRldmljZSB0byBkcml2ZXIgbWF0Y2hpbmcgY2FsbGJhY2tcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6ODQ6ICogQGRldjogdGhlIGZzbC1tYyBkZXZpY2UgdG8gbWF0Y2ggYWdhaW5zdFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzo4NTogKiBAZHJ2OiB0aGUgZGV2aWNlIGRyaXZlciB0byBzZWFyY2ggZm9yIG1hdGNoaW5nIGZzbC1tYyBvYmplY3QgdHlwZVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy04Ni0gKiBzdHJ1Y3R1cmVzXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0xMzk9c3RhdGljIGludCBmc2xfbWNfYnVzX3VldmVudChjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudilcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTE0Mi1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTQzOlx0aWYgKGFkZF91ZXZlbnRfdmFyKGVudiwgXCYjMzQ7TU9EQUxJQVM9ZnNsLW1jOnYlMDhYZCVzXCYjMzQ7LFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xNDQtXHRcdFx0ICAgbWNfZGV2LVx1MDAzZW9ial9kZXNjLnZlbmRvcixcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTIxND1zdGF0aWMgc3NpemVfdCBtb2RhbGlhc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0yMTgtXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjIxOTpcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7ZnNsLW1jOnYlMDhYZCVzXFxuXCYjMzQ7LCBtY19kZXYtXHUwMDNlb2JqX2Rlc2MudmVuZG9yLFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0yMjAtXHRcdFx0bWNfZGV2LVx1MDAzZW9ial9kZXNjLnR5cGUpO1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9MzI2PWNvbnN0IHN0cnVjdCBidXNfdHlwZSBmc2xfbWNfYnVzX3R5cGUgPSB7XG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjMyNzpcdC5uYW1lID0gXCYjMzQ7ZnNsLW1jXCYjMzQ7LFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0zMjgtXHQuZHJpdmVyX292ZXJyaWRlID0gdHJ1ZSxcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTQ5OT1zdGF0aWMgaW50IG1jX2dldF92ZXJzaW9uKHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLFxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtNTI4LSAqXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjUyOTogKiBSZXR1cm46XHRtYyB2ZXJzaW9uIHdoZW4gY2FsbGVkIGFmdGVyIGZzbC1tYy1idXMgcHJvYmU7IE5VTEwgb3RoZXJ3aXNlLlxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy01MzAtICovXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz02MzI9c3RhdGljIGludCBmc2xfbWNfZGV2aWNlX2dldF9tbWlvX3JlZ2lvbnMoc3RydWN0IGZzbF9tY19kZXZpY2UgKm1jX2Rldixcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTcxMC1cdFx0cmVnaW9uc1tpXS5lbmQgPSByZWdpb25zW2ldLnN0YXJ0ICYjNDM7IHJlZ2lvbl9kZXNjLnNpemUgLSAxO1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzo3MTE6XHRcdHJlZ2lvbnNbaV0ubmFtZSA9IFwmIzM0O2ZzbC1tYyBvYmplY3QgTU1JTyByZWdpb25cJiMzNDs7XG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTcxMi1cdFx0cmVnaW9uc1tpXS5mbGFncyA9IHJlZ2lvbl9kZXNjLmZsYWdzIFx1MDAyNiBJT1JFU09VUkNFX0JJVFM7XG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz03Mzc9c3RhdGljIHZvaWQgZnNsX21jX2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTc0OS0vKlxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzo3NTA6ICogQWRkIGEgbmV3bHkgZGlzY292ZXJlZCBmc2wtbWMgZGV2aWNlIHRvIGJlIHZpc2libGUgaW4gTGludXhcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtNzUxLSAqL1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9ODgyPXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZnNsX21jX25iO1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtODg0LS8qKlxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzo4ODU6ICogZnNsX21jX2RldmljZV9yZW1vdmUgLSBSZW1vdmUgYW4gZnNsLW1jIGRldmljZSBmcm9tIGJlaW5nIHZpc2libGUgdG9cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtODg2LSAqIExpbnV4XG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTg4Ny0gKlxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzo4ODg6ICogQG1jX2RldjogUG9pbnRlciB0byBhbiBmc2wtbWMgZGV2aWNlXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTg4OS0gKi9cbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTkwMD1zdHJ1Y3QgZnNsX21jX2RldmljZSAqZnNsX21jX2dldF9lbmRwb2ludChzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfZGV2LFxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtOTM2LVx0ICogaW50ZXJyb2dhdGluZyB0aGUgZmlybXdhcmUuIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiB0aGUgZGV2aWNlIHdhcyBub3RcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6OTM3Olx0ICogeWV0IGRpc2NvdmVyZWQgYnkgdGhlIGZzbC1tYyBidXMsIHRodXMgdGhlIGxvb2t1cCByZXR1cm5lZCBOVUxMLlxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy05MzgtXHQgKiBGb3JjZSBhIHJlc2NhbiBvZiB0aGUgZGV2aWNlcyBpbiB0aGlzIGNvbnRhaW5lciBhbmQgcmV0cnkgdGhlIGxvb2t1cC5cbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTEwMDU9c3RhdGljIGludCBmc2xfbWNfZmlybXdhcmVfY2hlY2soc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEwMTMtXHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjEwMTQ6XHRcdFx0XCYjMzQ7ZnNsLW1jOiBEUEwgcHJvY2Vzc2luZyB3YXMgbm90IHN0YXJ0ZWQsIERQQUEyIHdpbGwgbm90IHdvcmshXFxuXCYjMzQ7KTtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTAxNS1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTAyMC1cdFx0ZGV2X2RiZyhcdTAwMjZwZGV2LVx1MDAzZWRldixcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTAyMTpcdFx0XHRcJiMzNDtmc2wtbWM6IERQTCBwcm9jZXNzaW5nIGluIHByb2dyZXNzLCBkZWZlciBwcm9iZVxcblwmIzM0Oyk7XG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEwMjItXHRcdHJldHVybiAtRVBST0JFX0RFRkVSO1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTAyNy1cdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldixcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTAyODpcdFx0XHRcJiMzNDtmc2wtbWM6IE1DIGJvb3QgY29tcGxldGVkIHdpdGggZXJyb3IgMHgleFxcblwmIzM0OywgbWNzKTtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTAyOS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1tc2kuYy0xNS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtbXNpLmM6MTY6I2luY2x1ZGUgXCYjMzQ7ZnNsLW1jLXByaXZhdGUuaFwmIzM0O1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1tc2kuYy0xNy1cbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLXByaXZhdGUuaD01ODI9c3RydWN0IGZzbF9tY191YXBpIHtcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLXByaXZhdGUuaC01OTEtICogc3RydWN0IGZzbF9tY19idXMgLSBsb2dpY2FsIGJ1cyB0aGF0IGNvcnJlc3BvbmRzIHRvIGEgcGh5c2ljYWwgRFBSQ1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1wcml2YXRlLmg6NTkyOiAqIEBtY19kZXY6IGZzbC1tYyBkZXZpY2UgZm9yIHRoZSBidXMgZGV2aWNlIGl0c2VsZi5cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtcHJpdmF0ZS5oLTU5My0gKiBAcmVzb3VyY2VfcG9vbHM6IGFycmF5IG9mIHJlc291cmNlIHBvb2xzIChvbmUgcG9vbCBwZXIgcmVzb3VyY2UgdHlwZSlcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLXVhcGkuYy0xMy1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtdWFwaS5jOjE0OiNpbmNsdWRlIFwmIzM0O2ZzbC1tYy1wcml2YXRlLmhcJiMzNDtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtdWFwaS5jLTE1LVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9tYy1pby5jLTktXG5kcml2ZXJzL2J1cy9mc2wtbWMvbWMtaW8uYzoxMDojaW5jbHVkZSBcJiMzNDtmc2wtbWMtcHJpdmF0ZS5oXCYjMzQ7XG5kcml2ZXJzL2J1cy9mc2wtbWMvbWMtaW8uYy0xMS1cbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvbWMtc3lzLmMtMTYtXG5kcml2ZXJzL2J1cy9mc2wtbWMvbWMtc3lzLmM6MTc6I2luY2x1ZGUgXCYjMzQ7ZnNsLW1jLXByaXZhdGUuaFwmIzM0O1xuZHJpdmVycy9idXMvZnNsLW1jL21jLXN5cy5jLTE4LVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9vYmotYXBpLmMtOC1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9vYmotYXBpLmM6OTojaW5jbHVkZSBcJiMzNDtmc2wtbWMtcHJpdmF0ZS5oXCYjMzQ7XG5kcml2ZXJzL2J1cy9mc2wtbWMvb2JqLWFwaS5jLTEwLVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NhYW0vS2NvbmZpZz0xNzg9Y29uZmlnIENSWVBUT19ERVZfRlNMX0RQQUEyX0NBQU1cbi0tXG5kcml2ZXJzL2NyeXB0by9jYWFtL0tjb25maWctMTkzLVx0ICBJdCBoYW5kbGVzIERQU0VDSSBEUEFBMiBvYmplY3RzIHRoYXQgc2l0IG9uIHRoZSBNYW5hZ2VtZW50IENvbXBsZXhcbmRyaXZlcnMvY3J5cHRvL2NhYW0vS2NvbmZpZzoxOTQ6XHQgIChNQykgZnNsLW1jIGJ1cy5cbmRyaXZlcnMvY3J5cHRvL2NhYW0vS2NvbmZpZy0xOTUtXG4tLVxuZHJpdmVycy9kbWEvZnNsLWRwYWEyLXFkbWEvZHBhYTItcWRtYS5jPTE1Mj1kcGFhMl9xZG1hX3BvcHVsYXRlX2ZkKHUzMiBmb3JtYXQsIHN0cnVjdCBkcGFhMl9xZG1hX2NvbXAgKmRwYWEyX2NvbXApXG4tLVxuZHJpdmVycy9kbWEvZnNsLWRwYWEyLXFkbWEvZHBhYTItcWRtYS5jLTE2My1cdCAqIEJ5cGFzcyBtZW1vcnkgdHJhbnNsYXRpb24sIEZyYW1lIGxpc3QgZm9ybWF0LCBzaG9ydCBsZW5ndGggZGlzYWJsZVxuZHJpdmVycy9kbWEvZnNsLWRwYWEyLXFkbWEvZHBhYTItcWRtYS5jOjE2NDpcdCAqIHdlIG5lZWQgdG8gZGlzYWJsZSBCTVQgaWYgZnNsLW1jIHVzZSBpb3ZhIGFkZHJcbmRyaXZlcnMvZG1hL2ZzbC1kcGFhMi1xZG1hL2RwYWEyLXFkbWEuYy0xNjUtXHQgKi9cbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11LmM9MTY4NT1FWFBPUlRfU1lNQk9MX0dQTChwY2lfZGV2aWNlX2dyb3VwKTtcbmRyaXZlcnMvaW9tbXUvaW9tbXUuYy0xNjg2LVxuZHJpdmVycy9pb21tdS9pb21tdS5jOjE2ODc6LyogR2V0IHRoZSBJT01NVSBncm91cCBmb3IgZGV2aWNlIG9uIGZzbC1tYyBidXMgKi9cbmRyaXZlcnMvaW9tbXUvaW9tbXUuYy0xNjg4LXN0cnVjdCBpb21tdV9ncm91cCAqZnNsX21jX2RldmljZV9ncm91cChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9zb2MvZnNsL2RwaW8vTWFrZWZpbGUtNS1cbmRyaXZlcnMvc29jL2ZzbC9kcGlvL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0ZTTF9NQ19EUElPKSAmIzQzOz0gZnNsLW1jLWRwaW8ub1xuZHJpdmVycy9zb2MvZnNsL2RwaW8vTWFrZWZpbGUtNy1cbmRyaXZlcnMvc29jL2ZzbC9kcGlvL01ha2VmaWxlOjg6ZnNsLW1jLWRwaW8tb2JqcyA6PSBkcGlvLm8gcWJtYW4tcG9ydGFsLm8gZHBpby1zZXJ2aWNlLm8gZHBpby1kcml2ZXIub1xuLS1cbmRyaXZlcnMvc29jL2ZzbC9kcGlvL2RwaW8tc2VydmljZS5jPTIyNj1pcnFyZXR1cm5fdCBkcGFhMl9pb19pcnEoc3RydWN0IGRwYWEyX2lvICpvYmopXG4tLVxuZHJpdmVycy9zb2MvZnNsL2RwaW8vZHBpby1zZXJ2aWNlLmMtMjQ5LVx0XHR9IGVsc2Uge1xuZHJpdmVycy9zb2MvZnNsL2RwaW8vZHBpby1zZXJ2aWNlLmM6MjUwOlx0XHRcdHByX2NyaXQoXCYjMzQ7ZnNsLW1jLWRwaW86IFVucmVjb2duaXNlZC9pZ25vcmVkIERRUlIgZW50cnlcXG5cJiMzNDspO1xuZHJpdmVycy9zb2MvZnNsL2RwaW8vZHBpby1zZXJ2aWNlLmMtMjUxLVx0XHR9XG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWc9OTU9c291cmNlIFwmIzM0O2RyaXZlcnMvdmZpby9tZGV2L0tjb25maWdcJiMzNDtcbmRyaXZlcnMvdmZpby9LY29uZmlnOjk2OnNvdXJjZSBcJiMzNDtkcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvdmZpby9LY29uZmlnLTk3LXNvdXJjZSBcJiMzNDtkcml2ZXJzL3ZmaW8vY2R4L0tjb25maWdcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX1ZGSU9fTURFVikgJiM0Mzs9IG1kZXYvXG5kcml2ZXJzL3ZmaW8vTWFrZWZpbGU6MTc6b2JqLSQoQ09ORklHX1ZGSU9fRlNMX01DKSAmIzQzOz0gZnNsLW1jL1xuZHJpdmVycy92ZmlvL01ha2VmaWxlLTE4LW9iai0kKENPTkZJR19WRklPX0NEWCkgJiM0Mzs9IGNkeC9cbi0tXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWc9ND1jb25maWcgVkZJT19GU0xfTUNcbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZzo1Olx0dHJpc3RhdGUgXCYjMzQ7VkZJTyBzdXBwb3J0IGZvciBRb3JJUSBEUEFBMiBmc2wtbWMgYnVzIGRldmljZXNcJiMzNDtcbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZy02LVx0c2VsZWN0IEVWRU5URkRcbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZy03LVx0aGVscFxuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnOjg6XHQgIERyaXZlciB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIFZGSU8gUW9ySVEgRFBBQTIgZnNsLW1jXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWctOS1cdCAgKE1hbmFnZW1lbnQgQ29tcGxleCkgZGV2aWNlcy4gVGhpcyBpcyByZXF1aXJlZCB0byBwYXNzdGhyb3VnaFxuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnOjEwOlx0ICBmc2wtbWMgYnVzIGRldmljZXMgdXNpbmcgdGhlIFZGSU8gZnJhbWV3b3JrLlxuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnLTExLVxuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvTWFrZWZpbGUtMi1cbmRyaXZlcnMvdmZpby9mc2wtbWMvTWFrZWZpbGU6Mzp2ZmlvLWZzbC1tYy15IDo9IHZmaW9fZnNsX21jLm8gdmZpb19mc2xfbWNfaW50ci5vXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX1ZGSU9fRlNMX01DKSAmIzQzOz0gdmZpby1mc2wtbWMub1xuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYz00MTY9c3RhdGljIGludCB2ZmlvX2ZzbF9tY19idXNfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbi0tXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtNDM3LVx0XHRpZiAobWNfZHJ2IFx1MDAyNlx1MDAyNiBtY19kcnYgIT0gXHUwMDI2dmZpb19mc2xfbWNfZHJpdmVyKVxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jOjQzODpcdFx0XHRkZXZfd2FybihkZXYsIFwmIzM0O1ZGSU9fRlNMX01DOiBPYmplY3QgJXMgYm91bmQgdG8gZHJpdmVyICVzIHdoaWxlIERQUkMgYm91bmQgdG8gdmZpby1mc2wtbWNcXG5cJiMzNDssXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtNDM5LVx0XHRcdFx0IGRldl9uYW1lKGRldiksIG1jX2Rydi1cdTAwM2Vkcml2ZXIubmFtZSk7XG4tLVxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jPTU3NT1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyB2ZmlvX2ZzbF9tY19vcHMgPSB7XG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM6NTc2Olx0Lm5hbWVcdFx0PSBcJiMzNDt2ZmlvLWZzbC1tY1wmIzM0OyxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy01NzctXHQuaW5pdFx0XHQ9IHZmaW9fZnNsX21jX2luaXRfZGV2LFxuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYz01OTI9c3RhdGljIHN0cnVjdCBmc2xfbWNfZHJpdmVyIHZmaW9fZnNsX21jX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtNTk1LVx0LmRyaXZlclx0PSB7XG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM6NTk2Olx0XHQubmFtZVx0PSBcJiMzNDt2ZmlvLWZzbC1tY1wmIzM0OyxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy01OTctXHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDExOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNTQ5CgkJCQkJCQlvdXRwdXQ6IDE0NAoJCQkJCQkJdGhvdWdodHM6IDE2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBQYXRjaCoqCgpPa2F5LCBhZnRlciByZXZpZXdpbmcgdGhpcyBwYXRjaCwgaGVyZSYjMzk7cyBteSB0YWtlLiBUaGUgY29kZSBtb2RpZmljYXRpb24gdG91Y2hlcyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXN3aXRjaC5jYC4gUmlnaHQgYXdheSwgdGhhdCByYWlzZXMgYSBmbGFnIOKAkyBpdCYjMzk7cyBhIGRyaXZlciBmb3IgdGhlIERQQUEyIHN3aXRjaCwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGUgTlhQIFFvcklRIERQQUEyIGFyY2hpdGVjdHVyZSwgd2hpY2ggd2Uga25vdyBpcyBgQVJDSF9MQVlFUlNDQVBFYC4gVGhlIGNvcmUgaXNzdWUgaXMgdGhhdCB0aGUgYGZzbC1tY2AgYnVzLCB3aGljaCB0aGlzIGRyaXZlciBjbGVhcmx5IHJlbGllcyBvbiwgaXMgaGFyZHdhcmUtc3BlY2lmaWMuIFdlJiMzOTtyZSBub3QgdGFsa2luZyBhYm91dCBzb21ldGhpbmcgdGhhdCYjMzk7cyBlYXNpbHkgZW11bGF0ZWQgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBldmVuIHNvbWV0aGluZyB3ZSBzZWUgaW4gc3l6a2FsbGVyLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgZHJpdmVyIHJlcXVpcmVzIHRoYXQgc3BlY2lmaWMgaGFyZHdhcmUgYW5kIGl0cyBhc3NvY2lhdGVkIGJ1cyAoYGZzbC1tY2ApLCBpdCYjMzk7cyBlZmZlY3RpdmVseSB1bnJlYWNoYWJsZSBpbiB0aGUga2luZCBvZiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2UgdHlwaWNhbGx5IHVzZSBmb3IgZnV6emluZy4gVGhlIGxpa2VsaWhvb2Qgb2YgZ2VuZXJhdGluZyBhbnkgdXNlZnVsIHRlc3QgY292ZXJhZ2UgaW4gc3VjaCBhIHNldHVwIGlzIGluY3JlZGlibHkgbG93LCBib3JkZXJpbmcgb24gemVyby4KClNvLCBpbiBnb29kIGNvbnNjaWVuY2UsIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBNeSByYXRpb25hbGUgaXMgY2xlYXI6IHRoaXMgcGF0Y2ggbW9kaWZpZXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgZm9yIHRoZSBGcmVlc2NhbGUgRFBBQTIgc3dpdGNoLCBhbmQgdGhhdCBjb2RlIGlzIGluYWNjZXNzaWJsZSBpbiBvdXIgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBzZXR1cHMgd2l0aG91dCB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlIGVtdWxhdGlvbiwgd2hpY2ggaXNuJiMzOTt0IGF2YWlsYWJsZSBvciBmZWFzaWJsZSBmb3IgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBGcmVlc2NhbGUgRFBBQTIgc3dpdGNoIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXN3aXRjaC5jKSB0byBhZGQgTEFHIG9mZmxvYWQgc3VwcG9ydC4gVGhpcyBkcml2ZXIgZGVwZW5kcyBvbiB0aGUgZnNsLW1jIGJ1cyAoRlNMX01DX0JVUyksIHdoaWNoIGlzIHNwZWNpZmljIHRvIE5YUCBRb3JJUSBEUEFBMiBoYXJkd2FyZSAoQVJDSF9MQVlFUlNDQVBFKS4gVGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIGhhcmR3YXJlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgRnJlZXNjYWxlIERQQUEyIHN3aXRjaCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guYykgdG8gYWRkIExBRyBvZmZsb2FkIHN1cHBvcnQuIFRoaXMgZHJpdmVyIGRlcGVuZHMgb24gdGhlIGZzbC1tYyBidXMgKEZTTF9NQ19CVVMpLCB3aGljaCBpcyBzcGVjaWZpYyB0byBOWFAgUW9ySVEgRFBBQTIgaGFyZHdhcmUgKEFSQ0hfTEFZRVJTQ0FQRSkuIFRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBoYXJkd2FyZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjUyOjExLjE1MDI2NjI4OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMTE4NjA1ODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgRnJlZXNjYWxlIERQQUEyIHN3aXRjaCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guYykgdG8gYWRkIExBRyBvZmZsb2FkIHN1cHBvcnQuIFRoaXMgZHJpdmVyIGRlcGVuZHMgb24gdGhlIGZzbC1tYyBidXMgKEZTTF9NQ19CVVMpLCB3aGljaCBpcyBzcGVjaWZpYyB0byBOWFAgUW9ySVEgRFBBQTIgaGFyZHdhcmUgKEFSQ0hfTEFZRVJTQ0FQRSkuIFRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBoYXJkd2FyZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6NTI6MTEuMTUwMjc2MzI4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjE0MTY2OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1ZDg5NzljN2E1ZmJhM2VlNGRmMmYxNWZiYmJmMTBjNzQ4ZDE0ZTk3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVuIDI5IDExOjUyOjA5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guY1xcbmluZGV4IDg1OGJhODQ0YWM1MTY0Li44MzIwYjI2YzNmNzI2ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItc3dpdGNoLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItc3dpdGNoLmNcXG5AQCAtMjUsNiArMjUsOSBAQFxcbiBcXG4gI2RlZmluZSBERUZBVUxUX1ZMQU5fSURcXHRcXHRcXHQxXFxuIFxcbitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGRwYWEyX3N3aXRjaF9wb3J0X3N3aXRjaGRldl9uYjtcXG4rc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBkcGFhMl9zd2l0Y2hfcG9ydF9zd2l0Y2hkZXZfYmxvY2tpbmdfbmI7XFxuK1xcbiBzdGF0aWMgdTE2IGRwYWEyX3N3aXRjaF9wb3J0X2dldF9mZGJfaWQoc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2KVxcbiB7XFxuIFxcdHJldHVybiBwb3J0X3ByaXYtXFx1MDAzZWZkYi1cXHUwMDNlZmRiX2lkO1xcbkBAIC01MSw2ICs1NCwxNyBAQCBkcGFhMl9zd2l0Y2hfZmlsdGVyX2Jsb2NrX2dldF91bnVzZWQoc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3KVxcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4rc3RhdGljIHN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpcXG4rZHBhYTJfc3dpdGNoX2xhZ19nZXRfdW51c2VkKHN0cnVjdCBldGhzd19jb3JlICpldGhzdylcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBldGhzdy1cXHUwMDNlc3dfYXR0ci5udW1faWZzOyBpKyspXFxuK1xcdFxcdGlmICghZXRoc3ctXFx1MDAzZWxhZ3NbaV0uaW5fdXNlKVxcbitcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNmV0aHN3LVxcdTAwM2VsYWdzW2ldO1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4gc3RhdGljIGJvb2wgZHBhYTJfc3dpdGNoX2ZkYl9pbl91c2VfYnlfb3RoZXJzKHN0cnVjdCBldGhzd19jb3JlICpldGhzdyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGRwYWEyX3N3aXRjaF9mZGIgKmZkYixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqZXhjZXB0KVxcbkBAIC03MSw5ICs4NSw5IEBAIHN0YXRpYyBzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZkYiAqXFxuIGRwYWEyX3N3aXRjaF9mZGJfZm9yX2pvaW4oc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2LFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlICp1cHBlcl9kZXYpXFxuIHtcXG4tXFx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqb3RoZXJfcG9ydF9wcml2O1xcbi1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqb3RoZXJfZGV2O1xcbi1cXHRzdHJ1Y3QgbGlzdF9oZWFkICppdGVyO1xcbitcXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpvdGhlcl9wb3J0X3ByaXYgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqb3RoZXJfZGV2LCAqb3RoZXJfZGV2MjtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZCAqaXRlciwgKml0ZXIyO1xcbiBcXG4gXFx0LyogVGhlIGJlbG93IGNhbGwgdG8gbmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX2RldigpIGRlbWFuZHMgdGhlIFJUTkwgbG9ja1xcbiBcXHQgKiBiZWluZyBoZWxkLiBBc3NlcnQgb24gaXQgc28gdGhhdCBpdCdzIGVhc2llciB0byBjYXRjaCBuZXcgY29kZVxcbkBAIC04MiwxNyArOTYsMzIgQEAgZHBhYTJfc3dpdGNoX2ZkYl9mb3Jfam9pbihzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYsXFxuIFxcdEFTU0VSVF9SVE5MKCk7XFxuIFxcbiBcXHQvKiBJZiBwYXJ0IG9mIGEgYnJpZGdlLCB1c2UgdGhlIEZEQiBvZiB0aGUgZmlyc3QgZHBhYTIgc3dpdGNoIGludGVyZmFjZVxcbi1cXHQgKiB0byBiZSBwcmVzZW50IGluIHRoYXQgYnJpZGdlXFxuK1xcdCAqIHRvIGJlIHByZXNlbnQgaW4gdGhhdCBicmlkZ2UuIFRoZSBzZWFyY2ggZGVzY2VuZHMgb25lIGxldmVsIHRocm91Z2hcXG4rXFx0ICogYSBicmlkZ2VkIGJvbmQncyBsb3dlcnMgYXMgd2VsbC5cXG4gXFx0ICovXFxuIFxcdG5ldGRldl9mb3JfZWFjaF9sb3dlcl9kZXYodXBwZXJfZGV2LCBvdGhlcl9kZXYsIGl0ZXIpIHtcXG4tXFx0XFx0aWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2sob3RoZXJfZGV2KSlcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGlmIChuZXRpZl9pc19sYWdfbWFzdGVyKG90aGVyX2RldikpIHtcXG4rXFx0XFx0XFx0bmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX2RldihvdGhlcl9kZXYsIG90aGVyX2RldjIsIGl0ZXIyKSB7XFxuK1xcdFxcdFxcdFxcdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrKG90aGVyX2RldjIpKVxcbitcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdGlmIChvdGhlcl9kZXYgPT0gcG9ydF9wcml2LVxcdTAwM2VuZXRkZXYpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHRcXHRpZiAob3RoZXJfZGV2MiA9PSBwb3J0X3ByaXYtXFx1MDAzZW5ldGRldilcXG4rXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRvdGhlcl9wb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihvdGhlcl9kZXYpO1xcbi1cXHRcXHRyZXR1cm4gb3RoZXJfcG9ydF9wcml2LVxcdTAwM2VmZGI7XFxuK1xcdFxcdFxcdFxcdG90aGVyX3BvcnRfcHJpdiA9IG5ldGRldl9wcml2KG90aGVyX2RldjIpO1xcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhvdGhlcl9kZXYpKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdFxcdGlmIChvdGhlcl9kZXYgPT0gcG9ydF9wcml2LVxcdTAwM2VuZXRkZXYpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0XFx0b3RoZXJfcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYob3RoZXJfZGV2KTtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAob3RoZXJfcG9ydF9wcml2KVxcbitcXHRcXHRcXHRyZXR1cm4gb3RoZXJfcG9ydF9wcml2LVxcdTAwM2VmZGI7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiBwb3J0X3ByaXYtXFx1MDAzZWZkYjtcXG5AQCAtNTM3LDYgKzU2NiwxMDMgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsX21jKHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdixcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfYWRkKHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdixcXG4rXFx0XFx0XFx0XFx0ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKVxcbit7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRpZiAoaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGFkZHIpKVxcbitcXHRcXHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfYWRkX3VjKHBvcnRfcHJpdiwgYWRkcik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2FkZF9tYyhwb3J0X3ByaXYsIGFkZHIpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsKHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdixcXG4rXFx0XFx0XFx0XFx0ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKVxcbit7XFxuK1xcdGlmIChpc191bmljYXN0X2V0aGVyX2FkZHIoYWRkcikpXFxuK1xcdFxcdHJldHVybiBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsX3VjKHBvcnRfcHJpdiwgYWRkcik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cmV0dXJuIGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9kZWxfbWMocG9ydF9wcml2LCBhZGRyKTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBkcGFhMl9tYWNfYWRkciAqXFxuK2RwYWEyX3N3aXRjaF9tYWNfYWRkcl9maW5kKHN0cnVjdCBsaXN0X2hlYWQgKmFkZHJfbGlzdCxcXG4rXFx0XFx0XFx0ICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgdTE2IHZpZClcXG4re1xcbitcXHRzdHJ1Y3QgZHBhYTJfbWFjX2FkZHIgKmE7XFxuK1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGEsIGFkZHJfbGlzdCwgbGlzdClcXG4rXFx0XFx0aWYgKGV0aGVyX2FkZHJfZXF1YWwoYS1cXHUwMDNlYWRkciwgYWRkcikgXFx1MDAyNlxcdTAwMjYgYS1cXHUwMDNldmlkID09IHZpZClcXG4rXFx0XFx0XFx0cmV0dXJuIGE7XFxuK1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfbGFnX2ZkYl9hZGQoc3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZyxcXG4rXFx0XFx0XFx0XFx0ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIHUxNiB2aWQpXFxuK3tcXG4rXFx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbGFnLVxcdTAwM2VwcmltYXJ5O1xcbitcXHRzdHJ1Y3QgZHBhYTJfbWFjX2FkZHIgKmE7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2bGFnLVxcdTAwM2VmZGJfbG9jayk7XFxuK1xcbitcXHRhID0gZHBhYTJfc3dpdGNoX21hY19hZGRyX2ZpbmQoXFx1MDAyNmxhZy1cXHUwMDNlZmRicywgYWRkciwgdmlkKTtcXG4rXFx0aWYgKGEpIHtcXG4rXFx0XFx0cmVmY291bnRfaW5jKFxcdTAwMjZhLVxcdTAwM2VyZWZjb3VudCk7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRhID0ga3phbGxvYyhzaXplb2YoKmEpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFhKSB7XFxuK1xcdFxcdGVyciA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfYWRkKHBvcnRfcHJpdiwgYWRkcik7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0a2ZyZWUoYSk7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRldGhlcl9hZGRyX2NvcHkoYS1cXHUwMDNlYWRkciwgYWRkcik7XFxuK1xcdGEtXFx1MDAzZXZpZCA9IHZpZDtcXG4rXFx0cmVmY291bnRfc2V0KFxcdTAwMjZhLVxcdTAwM2VyZWZjb3VudCwgMSk7XFxuK1xcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmEtXFx1MDAzZWxpc3QsIFxcdTAwMjZsYWctXFx1MDAzZWZkYnMpO1xcbitcXG4rb3V0OlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmxhZy1cXHUwMDNlZmRiX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZHBhYTJfc3dpdGNoX2xhZ19mZGJfZGVsKHN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWcsXFxuK1xcdFxcdFxcdFxcdCAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgdTE2IHZpZClcXG4re1xcbitcXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBsYWctXFx1MDAzZXByaW1hcnk7XFxuK1xcdHN0cnVjdCBkcGFhMl9tYWNfYWRkciAqYTtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmxhZy1cXHUwMDNlZmRiX2xvY2spO1xcbitcXG4rXFx0YSA9IGRwYWEyX3N3aXRjaF9tYWNfYWRkcl9maW5kKFxcdTAwMjZsYWctXFx1MDAzZWZkYnMsIGFkZHIsIHZpZCk7XFxuK1xcdGlmICghYSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRpZiAoIXJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2YS1cXHUwMDNlcmVmY291bnQpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGxpc3RfZGVsKFxcdTAwMjZhLVxcdTAwM2VsaXN0KTtcXG4rXFx0a2ZyZWUoYSk7XFxuK1xcbitcXHRkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsKHBvcnRfcHJpdiwgYWRkcik7XFxuK1xcbitvdXQ6XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2bGFnLVxcdTAwM2VmZGJfbG9jayk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9wb3J0X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKVxcbiB7XFxuQEAgLTE0ODUsNiArMTYxMSwzMyBAQCBib29sIGRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXHRyZXR1cm4gbmV0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzID09IFxcdTAwMjZkcGFhMl9zd2l0Y2hfcG9ydF9vcHM7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIGRwYWEyX3N3aXRjaF9mb3JlaWduX2Rldl9jaGVjayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZm9yZWlnbl9kZXYpXFxuK3tcXG4rXFx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFx0c3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3ID0gcG9ydF9wcml2LVxcdTAwM2VldGhzd19kYXRhO1xcbitcXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpvdGhlcl9wb3J0O1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGlmIChuZXRpZl9pc19icmlkZ2VfbWFzdGVyKGZvcmVpZ25fZGV2KSlcXG4rXFx0XFx0aWYgKHBvcnRfcHJpdi1cXHUwMDNlZmRiLVxcdTAwM2VicmlkZ2VfZGV2ID09IGZvcmVpZ25fZGV2KVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAobmV0aWZfaXNfYnJpZGdlX3BvcnQoZm9yZWlnbl9kZXYpKSB7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBldGhzdy1cXHUwMDNlc3dfYXR0ci5udW1faWZzOyBpKyspIHtcXG4rXFx0XFx0XFx0b3RoZXJfcG9ydCA9IGV0aHN3LVxcdTAwM2Vwb3J0c1tpXTtcXG4rXFxuK1xcdFxcdFxcdGlmICghb3RoZXJfcG9ydClcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdGlmIChkcGFhMl9zd2l0Y2hfcG9ydF9vZmZsb2Fkc19icmlkZ2VfcG9ydChvdGhlcl9wb3J0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBmb3JlaWduX2RldikpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9jb25uZWN0X21hYyhzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYpXFxuIHtcXG4gXFx0c3RydWN0IGZzbF9tY19kZXZpY2UgKmRwc3dfcG9ydF9kZXYsICpkcG1hY19kZXY7XFxuQEAgLTE4NjAsNTEgKzIwMTMsMzIgQEAgaW50IGRwYWEyX3N3aXRjaF9wb3J0X3ZsYW5zX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgIHZsYW4tXFx1MDAzZWNoYW5nZWQpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2xvb2t1cF9hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBpc191YyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXFxuLXtcXG4tXFx0c3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmxpc3QgPSAoaXNfdWMpID8gXFx1MDAyNm5ldGRldi1cXHUwMDNldWMgOiBcXHUwMDI2bmV0ZGV2LVxcdTAwM2VtYztcXG4tXFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcXG4tXFxuLVxcdG5ldGlmX2FkZHJfbG9ja19iaChuZXRkZXYpO1xcbi1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGhhLCBcXHUwMDI2bGlzdC1cXHUwMDNlbGlzdCwgbGlzdCkge1xcbi1cXHRcXHRpZiAoZXRoZXJfYWRkcl9lcXVhbChoYS1cXHUwMDNlYWRkciwgYWRkcikpIHtcXG4tXFx0XFx0XFx0bmV0aWZfYWRkcl91bmxvY2tfYmgobmV0ZGV2KTtcXG4tXFx0XFx0XFx0cmV0dXJuIDE7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbi1cXHRuZXRpZl9hZGRyX3VubG9ja19iaChuZXRkZXYpO1xcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4gc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9tZGJfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmpfcG9ydF9tZGIgKm1kYilcXG4ge1xcbiBcXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbi1cXHRpbnQgZXJyO1xcbitcXHRzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqbGFnO1xcbiBcXG4tXFx0LyogQ2hlY2sgaWYgYWRkcmVzcyBpcyBhbHJlYWR5IHNldCBvbiB0aGlzIHBvcnQgKi9cXG4tXFx0aWYgKGRwYWEyX3N3aXRjaF9wb3J0X2xvb2t1cF9hZGRyZXNzKG5ldGRldiwgMCwgbWRiLVxcdTAwM2VhZGRyKSlcXG4tXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuLVxcbi1cXHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfYWRkX21jKHBvcnRfcHJpdiwgbWRiLVxcdTAwM2VhZGRyKTtcXG4tXFx0aWYgKGVycilcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4tXFxuLVxcdGVyciA9IGRldl9tY19hZGQobmV0ZGV2LCBtZGItXFx1MDAzZWFkZHIpO1xcbi1cXHRpZiAoZXJyKSB7XFxuLVxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwiZGV2X21jX2FkZCBlcnIgJWRcXFxcblxcXCIsIGVycik7XFxuLVxcdFxcdGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9kZWxfbWMocG9ydF9wcml2LCBtZGItXFx1MDAzZWFkZHIpO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gZXJyO1xcbitcXHRsYWcgPSBydG5sX2RlcmVmZXJlbmNlKHBvcnRfcHJpdi1cXHUwMDNlbGFnKTtcXG4rXFx0aWYgKGxhZylcXG4rXFx0XFx0cmV0dXJuIGRwYWEyX3N3aXRjaF9sYWdfZmRiX2FkZChsYWcsIG1kYi1cXHUwMDNlYWRkciwgbWRiLVxcdTAwM2V2aWQpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJldHVybiBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfYWRkKHBvcnRfcHJpdiwgbWRiLVxcdTAwM2VhZGRyKTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9vYmpfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLVxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmogKm9iailcXG4rc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9vYmpfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGNvbnN0IHZvaWQgKmN0eCxcXG4rXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X29iaiAqb2JqLFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4ge1xcbitcXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0aWYgKGN0eCBcXHUwMDI2XFx1MDAyNiBjdHggIT0gcG9ydF9wcml2KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfb2ZmbG9hZHNfYnJpZGdlX3BvcnQocG9ydF9wcml2LCBvYmotXFx1MDAzZW9yaWdfZGV2KSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4gXFx0c3dpdGNoIChvYmotXFx1MDAzZWlkKSB7XFxuIFxcdGNhc2UgU1dJVENIREVWX09CSl9JRF9QT1JUX1ZMQU46XFxuIFxcdFxcdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X3ZsYW5zX2FkZChuZXRkZXYsXFxuQEAgLTIwMDAsMjkgKzIxMzQsMjkgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9tZGJfZGVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmpfcG9ydF9tZGIgKm1kYilcXG4ge1xcbiBcXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbi1cXHRpbnQgZXJyO1xcbi1cXG4tXFx0aWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9sb29rdXBfYWRkcmVzcyhuZXRkZXYsIDAsIG1kYi1cXHUwMDNlYWRkcikpXFxuLVxcdFxcdHJldHVybiAtRU5PRU5UO1xcbi1cXG4tXFx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2RlbF9tYyhwb3J0X3ByaXYsIG1kYi1cXHUwMDNlYWRkcik7XFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdHJldHVybiBlcnI7XFxuK1xcdHN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWc7XFxuIFxcbi1cXHRlcnIgPSBkZXZfbWNfZGVsKG5ldGRldiwgbWRiLVxcdTAwM2VhZGRyKTtcXG4tXFx0aWYgKGVycikge1xcbi1cXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcImRldl9tY19kZWwgZXJyICVkXFxcXG5cXFwiLCBlcnIpO1xcbi1cXHRcXHRyZXR1cm4gZXJyO1xcbi1cXHR9XFxuK1xcdGxhZyA9IHJ0bmxfZGVyZWZlcmVuY2UocG9ydF9wcml2LVxcdTAwM2VsYWcpO1xcbitcXHRpZiAobGFnKVxcbitcXHRcXHRkcGFhMl9zd2l0Y2hfbGFnX2ZkYl9kZWwobGFnLCBtZGItXFx1MDAzZWFkZHIsIG1kYi1cXHUwMDNldmlkKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsKHBvcnRfcHJpdiwgbWRiLVxcdTAwM2VhZGRyKTtcXG4gXFxuLVxcdHJldHVybiBlcnI7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X29ial9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9vYmpfZGVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGNvbnN0IHZvaWQgKmN0eCxcXG4gXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X29iaiAqb2JqKVxcbiB7XFxuK1xcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuIFxcdGludCBlcnI7XFxuIFxcbitcXHRpZiAoY3R4IFxcdTAwMjZcXHUwMDI2IGN0eCAhPSBwb3J0X3ByaXYpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9vZmZsb2Fkc19icmlkZ2VfcG9ydChwb3J0X3ByaXYsIG9iai1cXHUwMDNlb3JpZ19kZXYpKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbiBcXHRzd2l0Y2ggKG9iai1cXHUwMDNlaWQpIHtcXG4gXFx0Y2FzZSBTV0lUQ0hERVZfT0JKX0lEX1BPUlRfVkxBTjpcXG4gXFx0XFx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfdmxhbnNfZGVsKG5ldGRldiwgU1dJVENIREVWX09CSl9QT1JUX1ZMQU4ob2JqKSk7XFxuQEAgLTIwNDgsNiArMjE4MiwyMSBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2F0dHJfc2V0X2V2ZW50KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdHJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7XFxuIH1cXG4gXFxuK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqXFxuK2RwYWEyX3N3aXRjaF9wb3J0X3RvX2JyaWRnZV9wb3J0KHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdilcXG4re1xcbitcXHRzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqbGFnO1xcbitcXG4rXFx0aWYgKCFwb3J0X3ByaXYtXFx1MDAzZWZkYi1cXHUwMDNlYnJpZGdlX2RldilcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRsYWcgPSBydG5sX2RlcmVmZXJlbmNlKHBvcnRfcHJpdi1cXHUwMDNlbGFnKTtcXG4rXFx0aWYgKGxhZylcXG4rXFx0XFx0cmV0dXJuIGxhZy1cXHUwMDNlYm9uZF9kZXY7XFxuK1xcbitcXHRyZXR1cm4gcG9ydF9wcml2LVxcdTAwM2VuZXRkZXY7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfYnJpZGdlX2pvaW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRfZGV2aWNlICp1cHBlcl9kZXYsXFxuIFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuQEAgLTIwNTUsNiArMjIwNCw3IEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfYnJpZGdlX2pvaW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gXFx0c3RydWN0IGRwYWEyX3N3aXRjaF9mZGIgKm9sZF9mZGIgPSBwb3J0X3ByaXYtXFx1MDAzZWZkYjtcXG4gXFx0c3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3ID0gcG9ydF9wcml2LVxcdTAwM2VldGhzd19kYXRhO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqYnJwb3J0X2RldjtcXG4gXFx0Ym9vbCBsZWFybl9lbmE7XFxuIFxcdGludCBlcnI7XFxuIFxcbkBAIC0yMDY2LDcgKzIyMTYsOCBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2JyaWRnZV9qb2luKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdGRwYWEyX3N3aXRjaF9wb3J0X3NldF9mZGIocG9ydF9wcml2LCB1cHBlcl9kZXYsIHRydWUpO1xcbiBcXG4gXFx0LyogSW5oZXJpdCB0aGUgaW5pdGlhbCBicmlkZ2UgcG9ydCBsZWFybmluZyBzdGF0ZSAqL1xcbi1cXHRsZWFybl9lbmEgPSBicl9wb3J0X2ZsYWdfaXNfc2V0KG5ldGRldiwgQlJfTEVBUk5JTkcpO1xcbitcXHRicnBvcnRfZGV2ID0gZHBhYTJfc3dpdGNoX3BvcnRfdG9fYnJpZGdlX3BvcnQocG9ydF9wcml2KTtcXG4rXFx0bGVhcm5fZW5hID0gYnJfcG9ydF9mbGFnX2lzX3NldChicnBvcnRfZGV2LCBCUl9MRUFSTklORyk7XFxuIFxcdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X3NldF9sZWFybmluZyhwb3J0X3ByaXYsIGxlYXJuX2VuYSk7XFxuIFxcdHBvcnRfcHJpdi1cXHUwMDNlbGVhcm5fZW5hID0gbGVhcm5fZW5hO1xcbiBcXG5AQCAtMjA4MCw4ICsyMjMxLDExIEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfYnJpZGdlX2pvaW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJfZWdyZXNzX2Zsb29kO1xcbiBcXG4tXFx0ZXJyID0gc3dpdGNoZGV2X2JyaWRnZV9wb3J0X29mZmxvYWQobmV0ZGV2LCBuZXRkZXYsIE5VTEwsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBOVUxMLCBOVUxMLCBmYWxzZSwgZXh0YWNrKTtcXG4rXFx0YnJwb3J0X2RldiA9IGRwYWEyX3N3aXRjaF9wb3J0X3RvX2JyaWRnZV9wb3J0KHBvcnRfcHJpdik7XFxuK1xcdGVyciA9IHN3aXRjaGRldl9icmlkZ2VfcG9ydF9vZmZsb2FkKGJycG9ydF9kZXYsIG5ldGRldiwgcG9ydF9wcml2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmRwYWEyX3N3aXRjaF9wb3J0X3N3aXRjaGRldl9uYixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZkcGFhMl9zd2l0Y2hfcG9ydF9zd2l0Y2hkZXZfYmxvY2tpbmdfbmIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBmYWxzZSwgZXh0YWNrKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJfc3dpdGNoZGV2X29mZmxvYWQ7XFxuIFxcbkBAIC0yMTE1LDcgKzIyNjksMjIgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9yZXN0b3JlX3J4dmxhbihzdHJ1Y3QgbmV0X2RldmljZSAqdmRldiwgaW50IHZpZCwgdm9cXG4gXFxuIHN0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9wb3J0X3ByZV9icmlkZ2VfbGVhdmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4ge1xcbi1cXHRzd2l0Y2hkZXZfYnJpZGdlX3BvcnRfdW5vZmZsb2FkKG5ldGRldiwgTlVMTCwgTlVMTCwgTlVMTCk7XFxuK1xcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdHN0cnVjdCBldGhzd19jb3JlICpldGhzdyA9IHBvcnRfcHJpdi1cXHUwMDNlZXRoc3dfZGF0YTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmJycG9ydF9kZXY7XFxuK1xcbitcXHRicnBvcnRfZGV2ID0gZHBhYTJfc3dpdGNoX3BvcnRfdG9fYnJpZGdlX3BvcnQocG9ydF9wcml2KTtcXG4rXFx0aWYgKCFicnBvcnRfZGV2KVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzd2l0Y2hkZXZfYnJpZGdlX3BvcnRfdW5vZmZsb2FkKGJycG9ydF9kZXYsIHBvcnRfcHJpdixcXG4rXFx0XFx0XFx0XFx0XFx0XFx1MDAyNmRwYWEyX3N3aXRjaF9wb3J0X3N3aXRjaGRldl9uYixcXG4rXFx0XFx0XFx0XFx0XFx0XFx1MDAyNmRwYWEyX3N3aXRjaF9wb3J0X3N3aXRjaGRldl9ibG9ja2luZ19uYik7XFxuK1xcbitcXHQvKiBNYWtlIHN1cmUgdGhhdCBhbnkgRkRCIGFkZC9kZWwgb3BlcmF0aW9ucyBhcmUgY29tcGxldGVkIGJlZm9yZSB0aGVcXG4rXFx0ICogYnJpZGdlIGxheW91dCBjaGFuZ2VzXFxuK1xcdCAqL1xcbitcXHRmbHVzaF93b3JrcXVldWUoZXRoc3ctXFx1MDAzZXdvcmtxdWV1ZSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfYnJpZGdlX2xlYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuQEAgLTIxNzcsMzAgKzIzNDYsNTMgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9icmlkZ2VfbGVhdmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0XFx0XFx0XFx0XFx0ICBmYWxzZSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnRcXG4rZHBhYTJfc3dpdGNoX2hhdmVfdmxhbl91cHBlcihzdHJ1Y3QgbmV0X2RldmljZSAqdXBwZXJfZGV2LFxcbitcXHRcXHRcXHQgICAgIF9fYWx3YXlzX3VudXNlZCBzdHJ1Y3QgbmV0ZGV2X25lc3RlZF9wcml2ICpwcml2KVxcbit7XFxuK1xcdHJldHVybiBpc192bGFuX2Rldih1cHBlcl9kZXYpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wcmV2ZW50X2JyaWRnaW5nX3dpdGhfODAyMXFfdXBwZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4ge1xcbi1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqdXBwZXJfZGV2O1xcbi1cXHRzdHJ1Y3QgbGlzdF9oZWFkICppdGVyO1xcbitcXHRzdHJ1Y3QgbmV0ZGV2X25lc3RlZF9wcml2IHByaXYgPSB7fTtcXG4gXFxuIFxcdC8qIFJDVSByZWFkIGxvY2sgbm90IG5lY2Vzc2FyeSBiZWNhdXNlIHdlIGhhdmUgd3JpdGUtc2lkZSBwcm90ZWN0aW9uXFxuLVxcdCAqIChydG5sX211dGV4KSwgaG93ZXZlciBhIG5vbi1yY3UgaXRlcmF0b3IgZG9lcyBub3QgZXhpc3QuXFxuK1xcdCAqIChydG5sX211dGV4KSwgaG93ZXZlciBhIG5vbi1yY3UgaXRlcmF0b3IgZG9lcyBub3QgZXhpc3QuIFdhbGsgdGhlXFxuK1xcdCAqIGVudGlyZSB1cHBlciBjaGFpbiBzbyB0aGF0IGEgVkxBTiBkZXZpY2Ugc3RhY2tlZCBvbiBhIGludGVybWVkaWF0ZVxcbitcXHQgKiBib25kIGlzIGNhdWdodCB0b28uXFxuIFxcdCAqL1xcbi1cXHRuZXRkZXZfZm9yX2VhY2hfdXBwZXJfZGV2X3JjdShuZXRkZXYsIHVwcGVyX2RldiwgaXRlcilcXG4tXFx0XFx0aWYgKGlzX3ZsYW5fZGV2KHVwcGVyX2RldikpXFxuLVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0aWYgKG5ldGRldl93YWxrX2FsbF91cHBlcl9kZXZfcmN1KG5ldGRldiwgZHBhYTJfc3dpdGNoX2hhdmVfdmxhbl91cHBlcixcXG4rXFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2cHJpdikpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9jaGVja19kcHN3X2luc3RhbmNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0ZGV2X25lc3RlZF9wcml2ICpwcml2KVxcbit7XFxuK1xcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IChzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICopcHJpdi1cXHUwMDNlZGF0YTtcXG4rXFx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqb3RoZXJfcHJpdiA9IG5ldGRldl9wcml2KGRldik7XFxuK1xcbitcXHRpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhkZXYpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChvdGhlcl9wcml2LVxcdTAwM2VldGhzd19kYXRhID09IHBvcnRfcHJpdi1cXHUwMDNlZXRoc3dfZGF0YSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4gMTtcXG4rfVxcbitcXG4gc3RhdGljIGludFxcbiBkcGFhMl9zd2l0Y2hfcHJlY2hhbmdldXBwZXJfc2FuaXR5X2NoZWNrcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlICp1cHBlcl9kZXYsXFxuIFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuIFxcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuLVxcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKm90aGVyX3BvcnRfcHJpdjtcXG4tXFx0c3RydWN0IG5ldF9kZXZpY2UgKm90aGVyX2RldjtcXG4tXFx0c3RydWN0IGxpc3RfaGVhZCAqaXRlcjtcXG4rXFx0c3RydWN0IG5ldGRldl9uZXN0ZWRfcHJpdiBkYXRhID0ge1xcbitcXHRcXHQuZGF0YSA9ICh2b2lkICopcG9ydF9wcml2LFxcbitcXHR9O1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0aWYgKCFicl92bGFuX2VuYWJsZWQodXBwZXJfZGV2KSkge1xcbkBAIC0yMjE1LDYgKzI0MDcsNzAgQEAgZHBhYTJfc3dpdGNoX3ByZWNoYW5nZXVwcGVyX3Nhbml0eV9jaGVja3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbiBcXG4rXFx0ZXJyID0gbmV0ZGV2X3dhbGtfYWxsX2xvd2VyX2Rldih1cHBlcl9kZXYsXFxuK1xcdFxcdFxcdFxcdFxcdGRwYWEyX3N3aXRjaF9jaGVja19kcHN3X2luc3RhbmNlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHUwMDI2ZGF0YSk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIkludGVyZmFjZSBmcm9tIGEgZGlmZmVyZW50IERQU1cgaXMgaW4gdGhlIGJyaWRnZSBhbHJlYWR5XFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcHJlX2xhZ19qb2luKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKnVwcGVyX2RldixcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0ZGV2X2xhZ191cHBlcl9pbmZvICppbmZvLFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4re1xcbitcXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHRzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3cgPSBwb3J0X3ByaXYtXFx1MDAzZWV0aHN3X2RhdGE7XFxuK1xcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKm90aGVyX3BvcnRfcHJpdjtcXG4rXFx0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZyA9IE5VTEw7XFxuK1xcdHN0cnVjdCBkcHN3X2xhZ19jZmcgY2ZnID0gezB9O1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqb3RoZXJfZGV2O1xcbitcXHRpbnQgaSwgbnVtX2lmcyA9IDAsIGVycjtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZCAqaXRlcjtcXG4rXFxuK1xcdGlmICghKGV0aHN3LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IEVUSFNXX0ZFQVRVUkVfTEFHX09GRkxPQUQpKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJMQUcgb2ZmbG9hZCBpcyBzdXBwb3J0ZWQgb25seSBmb3IgRFBTVyBcXHUwMDNlPSB2OC4xM1xcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChpbmZvLVxcdTAwM2V0eF90eXBlICE9IE5FVERFVl9MQUdfVFhfVFlQRV9IQVNIKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJDYW4gb25seSBvZmZsb2FkIExBRyB1c2luZyBoYXNoIFRYIHR5cGVcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoaW5mby1cXHUwMDNlaGFzaF90eXBlICE9IE5FVERFVl9MQUdfSEFTSF9MMjMpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkNhbiBvbmx5IG9mZmxvYWQgTDIrTDMgVHggaGFzaFxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfaGFzX21hYyhwb3J0X3ByaXYpKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJPbmx5IHN3aXRjaCBpbnRlcmZhY2VzIGNvbm5lY3RlZCB0byBNQUNzIGNhbiBiZSB1bmRlciBhIExBR1xcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHZsYW5fdXNlc19kZXYodXBwZXJfZGV2KSkge1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICBcXFwiQ2Fubm90IGpvaW4gYSBMQUcgdXBwZXIgdGhhdCBoYXMgYSBWTEFOXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGV0aHN3LVxcdTAwM2Vzd19hdHRyLm51bV9pZnM7IGkrKykge1xcbitcXHRcXHRpZiAoIWV0aHN3LVxcdTAwM2VsYWdzW2ldLmluX3VzZSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGlmIChldGhzdy1cXHUwMDNlbGFnc1tpXS5ib25kX2RldiAhPSB1cHBlcl9kZXYpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRsYWcgPSBcXHUwMDI2ZXRoc3ctXFx1MDAzZWxhZ3NbaV07XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbiBcXHRuZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KHVwcGVyX2Rldiwgb3RoZXJfZGV2LCBpdGVyKSB7XFxuIFxcdFxcdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrKG90aGVyX2RldikpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbkBAIC0yMjIyLDkgKzI0NzgsMjQ4IEBAIGRwYWEyX3N3aXRjaF9wcmVjaGFuZ2V1cHBlcl9zYW5pdHlfY2hlY2tzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdG90aGVyX3BvcnRfcHJpdiA9IG5ldGRldl9wcml2KG90aGVyX2Rldik7XFxuIFxcdFxcdGlmIChvdGhlcl9wb3J0X3ByaXYtXFx1MDAzZWV0aHN3X2RhdGEgIT0gcG9ydF9wcml2LVxcdTAwM2VldGhzd19kYXRhKSB7XFxuIFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuLVxcdFxcdFxcdFxcdFxcdCAgIFxcXCJJbnRlcmZhY2UgZnJvbSBhIGRpZmZlcmVudCBEUFNXIGlzIGluIHRoZSBicmlkZ2UgYWxyZWFkeVxcXCIpO1xcbitcXHRcXHRcXHRcXHRcXHQgICBcXFwiSW50ZXJmYWNlIGZyb20gYSBkaWZmZXJlbnQgRFBTVyBpcyBpbiB0aGUgYm9uZCBhbHJlYWR5XFxcIik7XFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHR9XFxuK1xcbitcXHRcXHRjZmcuaWZfaWRbbnVtX2lmcysrXSA9IG90aGVyX3BvcnRfcHJpdi1cXHUwMDNlaWR4O1xcbitcXG4rXFx0XFx0aWYgKG51bV9pZnMgXFx1MDAzZT0gRFBTV19NQVhfTEFHX0lGUykge1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXFwiQ2Fubm90IGFkZCBtb3JlIHRoYW4gOCBEUEFBMiBzd2l0Y2ggcG9ydHMgdW5kZXIgdGhlIHNhbWUgYm9uZFxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRpZiAobGFnKSB7XFxuK1xcdFxcdGNmZy5ncm91cF9pZCA9IGxhZy1cXHUwMDNlaWQ7XFxuK1xcdFxcdGNmZy5pZl9pZFtudW1faWZzKytdID0gcG9ydF9wcml2LVxcdTAwM2VpZHg7XFxuK1xcdFxcdGNmZy5udW1faWZzID0gbnVtX2lmcztcXG4rXFx0XFx0Y2ZnLnBoYXNlID0gRFBTV19MQUdfU0VUX1BIQVNFX0NIRUNLO1xcbitcXG4rXFx0XFx0ZXJyID0gZHBzd19sYWdfc2V0KGV0aHN3LVxcdTAwM2VtY19pbywgMCwgZXRoc3ctXFx1MDAzZWRwc3dfaGFuZGxlLCBcXHUwMDI2Y2ZnKTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXFwiQ2Fubm90IG9mZmxvYWQgTEFHIGNvbmZpZ3VyYXRpb25cXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBkcGFhMl9zd2l0Y2hfcG9ydF9zZXRfbGFnX2dyb3VwKHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3cgPSBwb3J0X3ByaXYtXFx1MDAzZWV0aHN3X2RhdGE7XFxuK1xcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKm90aGVyX3BvcnRfcHJpdiA9IE5VTEw7XFxuK1xcdHN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWcgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqb3RoZXJfbGFnO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqb3RoZXJfZGV2O1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkICppdGVyO1xcbitcXG4rXFx0bmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX2Rldihib25kX2Rldiwgb3RoZXJfZGV2LCBpdGVyKSB7XFxuK1xcdFxcdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrKG90aGVyX2RldikpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0b3RoZXJfcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYob3RoZXJfZGV2KTtcXG4rXFx0XFx0b3RoZXJfbGFnID0gcnRubF9kZXJlZmVyZW5jZShvdGhlcl9wb3J0X3ByaXYtXFx1MDAzZWxhZyk7XFxuK1xcdFxcdGlmICghb3RoZXJfbGFnKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGlmIChvdGhlcl9sYWctXFx1MDAzZWJvbmRfZGV2ID09IGJvbmRfZGV2KSB7XFxuK1xcdFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihwb3J0X3ByaXYtXFx1MDAzZWxhZywgb3RoZXJfbGFnKTtcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFRoaXMgaXMgdGhlIGZpcnN0IGludGVyZmFjZSB0byBiZSBhZGRlZCB1bmRlciBhIGJvbmQgZGV2aWNlLiBGaW5kIGFuXFxuK1xcdCAqIHVudXNlZCBMQUcgZ3JvdXAuIE5vIG5lZWQgdG8gY2hlY2sgZm9yIE5VTEwgc2luY2UgdGhlcmUgYXJlIHRoZSBzYW1lXFxuK1xcdCAqIGFtb3VudCBvZiBEUFNXIHBvcnRzIGFzIExBRyBncm91cHMsIG1lYW5pbmcgdGhhdCBlYWNoIHBvcnQgY2FuIGhhdmVcXG4rXFx0ICogaXRzIG93biBMQUcgZ3JvdXAuXFxuK1xcdCAqL1xcbitcXHRsYWcgPSBkcGFhMl9zd2l0Y2hfbGFnX2dldF91bnVzZWQoZXRoc3cpO1xcbitcXHRsYWctXFx1MDAzZWluX3VzZSA9IHRydWU7XFxuK1xcdGxhZy1cXHUwMDNlYm9uZF9kZXYgPSBib25kX2RldjtcXG4rXFx0bGFnLVxcdTAwM2VwcmltYXJ5ID0gcG9ydF9wcml2O1xcbitcXHRyY3VfYXNzaWduX3BvaW50ZXIocG9ydF9wcml2LVxcdTAwM2VsYWcsIGxhZyk7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIGRwYWEyX3N3aXRjaF9wb3J0X2luX2xhZyhzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWc7XFxuK1xcbitcXHRpZiAoIXBvcnRfcHJpdilcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0bGFnID0gcnRubF9kZXJlZmVyZW5jZShwb3J0X3ByaXYtXFx1MDAzZWxhZyk7XFxuK1xcdHJldHVybiBsYWcgXFx1MDAyNlxcdTAwMjYgbGFnLVxcdTAwM2Vib25kX2RldiA9PSBib25kX2RldjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfc2V0X2xhZ19jZmcoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCB1OCBsYWdfaWQsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3cpXFxuK3tcXG4rXFx0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZyA9IFxcdTAwMjZldGhzdy1cXHUwMDNlbGFnc1tsYWdfaWQgLSAxXTtcXG4rXFx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcHJpbWFyeSwgKnBvcnRfcHJpdjtcXG4rXFx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqbmV3X3ByaW1hcnkgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgZHBzd19sYWdfY2ZnIGNmZyA9IHswfTtcXG4rXFx0c3RydWN0IGRwYWEyX21hY19hZGRyICphO1xcbitcXHR1OCBudW1faWZzID0gMDtcXG4rXFx0aW50IGVyciwgaTtcXG4rXFxuK1xcdGNmZy5ncm91cF9pZCA9IGxhZ19pZDtcXG4rXFxuK1xcdC8qIERldGVybWluZSB0aGUgcHJpbWFyeSBwb3J0LiBUaGUgY2FsbGVyIGNsZWFycyAtXFx1MDAzZWxhZyBvbiB0aGUgcG9ydCB0aGF0XFxuK1xcdCAqIGlzIGxlYXZpbmcsIHNvIGEgTlVMTCAtXFx1MDAzZWxhZyBvbiB0aGUgY3VycmVudCBwcmltYXJ5IG1lYW5zIGl0IGlzIHRoZVxcbitcXHQgKiBvbmUgbGVhdmluZzogZWxlY3QgdGhlIGZpcnN0IHJlbWFpbmluZyBtZW1iZXIgYXMgdGhlIG5ldyBwcmltYXJ5LlxcbitcXHQgKiBPdGhlcndpc2Uga2VlcCB0aGUgY3VycmVudCBwcmltYXJ5LlxcbitcXHQgKi9cXG4rXFx0aWYgKHJ0bmxfZGVyZWZlcmVuY2UobGFnLVxcdTAwM2VwcmltYXJ5LVxcdTAwM2VsYWcpKSB7XFxuK1xcdFxcdHByaW1hcnkgPSBsYWctXFx1MDAzZXByaW1hcnk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHByaW1hcnkgPSBOVUxMO1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZXRoc3ctXFx1MDAzZXN3X2F0dHIubnVtX2lmczsgaSsrKSB7XFxuK1xcdFxcdFxcdGlmIChkcGFhMl9zd2l0Y2hfcG9ydF9pbl9sYWcoZXRoc3ctXFx1MDAzZXBvcnRzW2ldLCBib25kX2RldikpIHtcXG4rXFx0XFx0XFx0XFx0bmV3X3ByaW1hcnkgPSBldGhzdy1cXHUwMDNlcG9ydHNbaV07XFxuK1xcdFxcdFxcdFxcdHByaW1hcnkgPSBuZXdfcHJpbWFyeTtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHQvKiBCdWlsZCB0aGUgaW50ZXJmYWNlIGxpc3QsIGFsd2F5cyBwbGFjaW5nIHRoZSBwcmltYXJ5IGZpcnN0ICovXFxuK1xcdGlmIChwcmltYXJ5KVxcbitcXHRcXHRjZmcuaWZfaWRbbnVtX2lmcysrXSA9IHByaW1hcnktXFx1MDAzZWlkeDtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGV0aHN3LVxcdTAwM2Vzd19hdHRyLm51bV9pZnM7IGkrKykge1xcbitcXHRcXHRwb3J0X3ByaXYgPSBldGhzdy1cXHUwMDNlcG9ydHNbaV07XFxuK1xcdFxcdGlmIChwb3J0X3ByaXYgPT0gcHJpbWFyeSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfaW5fbGFnKHBvcnRfcHJpdiwgYm9uZF9kZXYpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGNmZy5pZl9pZFtudW1faWZzKytdID0gcG9ydF9wcml2LVxcdTAwM2VpZHg7XFxuK1xcdH1cXG4rXFx0Y2ZnLm51bV9pZnMgPSBudW1faWZzO1xcbitcXG4rXFx0LyogTm8gbW9yZSBpbnRlcmZhY2VzIHVuZGVyIHRoaXMgTEFHIGdyb3VwLCBtYXJrIGl0IGFzIG5vdCBpbiB1c2UuIFdhaXRcXG4rXFx0ICogZm9yIGEgZ3JhY2UgcGVyaW9kIHNvIHRoYXQgYW55IHJlYWRlcnMgb2YgdGhlIGxhZyBzdHJ1Y3R1cmUgZmluaXNoZWQuXFxuK1xcdCAqL1xcbitcXHRpZiAoIW51bV9pZnMpIHtcXG4rXFx0XFx0c3luY2hyb25pemVfbmV0KCk7XFxuK1xcbitcXHRcXHRsYWctXFx1MDAzZWJvbmRfZGV2ID0gTlVMTDtcXG4rXFx0XFx0bGFnLVxcdTAwM2VwcmltYXJ5ID0gTlVMTDtcXG4rXFx0XFx0bGFnLVxcdTAwM2Vpbl91c2UgPSBmYWxzZTtcXG4rXFx0fVxcbitcXG4rXFx0LyogV2hlbiB0aGUgcHJpbWFyeSBjaGFuZ2VzLCBtaWdyYXRlIHRoZSBGREIgZW50cmllcyBmcm9tIHRoZSBvbGRcXG4rXFx0ICogcHJpbWFyeSB0byB0aGUgbmV3IG9uZTogcmVtb3ZlIHRoZW0gYmVmb3JlIHJlY29uZmlndXJpbmcgdGhlIExBRyBpblxcbitcXHQgKiBoYXJkd2FyZSBhbmQgcmUtYWRkIHRoZW0gb24gdGhlIG5ldyBwcmltYXJ5IGFmdGVyd2FyZHMuIFdlIGRvIG5vdFxcbitcXHQgKiB0b3VjaCBhbnkgcmVmY291bnRpbmcgc2luY2UgdGhlIGludGVudGlvbiBpcyB0byBjaGFuZ2UgdGhlIEhXIGVudHJ5LFxcbitcXHQgKiBub3QgdGhlIHBhcmFsbGVsIHNvZnR3YXJlIHRyYWNraW5nLlxcbitcXHQgKi9cXG4rXFx0aWYgKG5ld19wcmltYXJ5KSB7XFxuK1xcdFxcdG11dGV4X2xvY2soXFx1MDAyNmxhZy1cXHUwMDNlZmRiX2xvY2spO1xcbitcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGEsIFxcdTAwMjZsYWctXFx1MDAzZWZkYnMsIGxpc3QpXFxuK1xcdFxcdFxcdGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9kZWwobGFnLVxcdTAwM2VwcmltYXJ5LCBhLVxcdTAwM2VhZGRyKTtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsYWctXFx1MDAzZWZkYl9sb2NrKTtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gZHBzd19sYWdfc2V0KGV0aHN3LVxcdTAwM2VtY19pbywgMCwgZXRoc3ctXFx1MDAzZWRwc3dfaGFuZGxlLCBcXHUwMDI2Y2ZnKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGlmIChuZXdfcHJpbWFyeSkge1xcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZsYWctXFx1MDAzZWZkYl9sb2NrKTtcXG4rXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShhLCBcXHUwMDI2bGFnLVxcdTAwM2VmZGJzLCBsaXN0KSB7XFxuK1xcdFxcdFxcdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9hZGQobmV3X3ByaW1hcnksIGEtXFx1MDAzZWFkZHIpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRuZXRkZXZfZXJyKG5ld19wcmltYXJ5LVxcdTAwM2VuZXRkZXYsIFxcXCJVbmFibGUgdG8gbWlncmF0ZSBGREJcXFxcblxcXCIpO1xcbitcXHRcXHR9XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bGFnLVxcdTAwM2VmZGJfbG9jayk7XFxuK1xcbitcXHRcXHRzeW5jaHJvbml6ZV9uZXQoKTtcXG4rXFx0XFx0bGFnLVxcdTAwM2VwcmltYXJ5ID0gbmV3X3ByaW1hcnk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2JvbmRfam9pbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldGRldl9sYWdfdXBwZXJfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4re1xcbitcXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHRzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3cgPSBwb3J0X3ByaXYtXFx1MDAzZWV0aHN3X2RhdGE7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpicmlkZ2VfZGV2O1xcbitcXHRzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqbGFnO1xcbitcXHRpbnQgZXJyID0gMDtcXG4rXFx0dTggbGFnX2lkO1xcbitcXG4rXFx0LyogU2V0dXAgdGhlIHBvcnRfcHJpdi1cXHUwMDNlbGFnIHBvaW50ZXIgZm9yIHRoaXMgc3dpdGNoIHBvcnQgKi9cXG4rXFx0ZHBhYTJfc3dpdGNoX3BvcnRfc2V0X2xhZ19ncm91cChwb3J0X3ByaXYsIGJvbmRfZGV2KTtcXG4rXFxuK1xcdC8qIENyZWF0ZSB0aGUgTEFHIGNvbmZpZ3VyYXRpb24gYW5kIGFwcGx5IGl0IGluIE1DICovXFxuK1xcdGxhZyA9IHJ0bmxfZGVyZWZlcmVuY2UocG9ydF9wcml2LVxcdTAwM2VsYWcpO1xcbitcXHRsYWdfaWQgPSBsYWctXFx1MDAzZWlkO1xcbitcXHRlcnIgPSBkcGFhMl9zd2l0Y2hfc2V0X2xhZ19jZmcoYm9uZF9kZXYsIGxhZ19pZCwgZXRoc3cpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGVycl9sYWdfY2ZnO1xcbitcXG4rXFx0LyogSWYgdGhlIGJvbmQgZGV2aWNlIGlzIGEgc3dpdGNoIHBvcnQsIGpvaW4gdGhlIGJyaWRnZSBhcyB3ZWxsICovXFxuK1xcdGJyaWRnZV9kZXYgPSBuZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9nZXQoYm9uZF9kZXYpO1xcbitcXHRpZiAoIWJyaWRnZV9kZXYgfHwgIW5ldGlmX2lzX2JyaWRnZV9tYXN0ZXIoYnJpZGdlX2RldikpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfYnJpZGdlX2pvaW4obmV0ZGV2LCBicmlkZ2VfZGV2LCBleHRhY2spO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGVycl9sYWdfY2ZnO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rXFxuK2Vycl9sYWdfY2ZnOlxcbitcXHRyY3VfYXNzaWduX3BvaW50ZXIocG9ydF9wcml2LVxcdTAwM2VsYWcsIE5VTEwpO1xcbitcXHRkcGFhMl9zd2l0Y2hfc2V0X2xhZ19jZmcoYm9uZF9kZXYsIGxhZ19pZCwgZXRoc3cpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9ib25kX2xlYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqYnJpZGdlX2RldiA9IG5ldGRldl9tYXN0ZXJfdXBwZXJfZGV2X2dldChib25kX2Rldik7XFxuK1xcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdHN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWcgPSBydG5sX2RlcmVmZXJlbmNlKHBvcnRfcHJpdi1cXHUwMDNlbGFnKTtcXG4rXFx0c3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3ID0gcG9ydF9wcml2LVxcdTAwM2VldGhzd19kYXRhO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqYnJwZGV2O1xcbitcXHRib29sIGxlYXJuX2VuYTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGlmICghbGFnKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIFJlY3JlYXRlIHRoZSBMQUcgY29uZmlndXJhdGlvbiBmb3IgdGhlIExBRyBncm91cCB0aGF0IHdlIGxlZnQuICovXFxuK1xcdHJjdV9hc3NpZ25fcG9pbnRlcihwb3J0X3ByaXYtXFx1MDAzZWxhZywgTlVMTCk7XFxuK1xcdGRwYWEyX3N3aXRjaF9zZXRfbGFnX2NmZyhib25kX2RldiwgbGFnLVxcdTAwM2VpZCwgZXRoc3cpO1xcbitcXG4rXFx0aWYgKGJyaWRnZV9kZXYgXFx1MDAyNlxcdTAwMjYgbmV0aWZfaXNfYnJpZGdlX21hc3RlcihicmlkZ2VfZGV2KSkge1xcbitcXHRcXHQvKiBNYWtlIHN1cmUgdGhhdCB0aGUgbmV3IHByaW1hcnkgaW5oZXJpdHMgdGhlIGxlYXJuaW5nIHN0YXRlICovXFxuK1xcdFxcdGlmIChsYWctXFx1MDAzZXByaW1hcnkpIHtcXG4rXFx0XFx0XFx0YnJwZGV2ID0gZHBhYTJfc3dpdGNoX3BvcnRfdG9fYnJpZGdlX3BvcnQobGFnLVxcdTAwM2VwcmltYXJ5KTtcXG4rXFx0XFx0XFx0bGVhcm5fZW5hID0gYnJfcG9ydF9mbGFnX2lzX3NldChicnBkZXYsIEJSX0xFQVJOSU5HKTtcXG4rXFx0XFx0XFx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfc2V0X2xlYXJuaW5nKGxhZy1cXHUwMDNlcHJpbWFyeSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBsZWFybl9lbmEpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRcXHRsYWctXFx1MDAzZXByaW1hcnktXFx1MDAzZWxlYXJuX2VuYSA9IGxlYXJuX2VuYTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0LyogSW4gY2FzZSB0aGUgYm9uZCBpcyBhIGJyaWRnZSBwb3J0LCBsZWF2ZSB0aGUgdXBwZXIgYnJpZGdlIGFzXFxuK1xcdFxcdCAqIHdlbGwuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyZXR1cm4gZHBhYTJfc3dpdGNoX3BvcnRfYnJpZGdlX2xlYXZlKG5ldGRldik7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC0yMjM0LDggKzI3MjksOCBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X3ByZWNoYW5nZXVwcGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0ZGV2X25vdGlmaWVyX2NoYW5nZXVwcGVyX2luZm8gKmluZm8pXFxuIHtcXG4gXFx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2O1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqdXBwZXJfZGV2LCAqYnI7XFxuIFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaztcXG4tXFx0c3RydWN0IG5ldF9kZXZpY2UgKnVwcGVyX2RldjtcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrKG5ldGRldikpXFxuQEAgLTIyNTIsNiArMjc0NywyNCBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X3ByZWNoYW5nZXVwcGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcbiBcXHRcXHRpZiAoIWluZm8tXFx1MDAzZWxpbmtpbmcpXFxuIFxcdFxcdFxcdGRwYWEyX3N3aXRjaF9wb3J0X3ByZV9icmlkZ2VfbGVhdmUobmV0ZGV2KTtcXG4rXFx0fSBlbHNlIGlmIChuZXRpZl9pc19sYWdfbWFzdGVyKHVwcGVyX2RldikpIHtcXG4rXFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VsaW5raW5nKSB7XFxuK1xcdFxcdFxcdGlmIChuZXRpZl9pc19icmlkZ2VfcG9ydCh1cHBlcl9kZXYpKVxcbitcXHRcXHRcXHRcXHRkcGFhMl9zd2l0Y2hfcG9ydF9wcmVfYnJpZGdlX2xlYXZlKG5ldGRldik7XFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAobmV0aWZfaXNfYnJpZGdlX3BvcnQodXBwZXJfZGV2KSkge1xcbitcXHRcXHRcXHRiciA9IG5ldGRldl9tYXN0ZXJfdXBwZXJfZGV2X2dldCh1cHBlcl9kZXYpO1xcbitcXHRcXHRcXHRlcnIgPSBkcGFhMl9zd2l0Y2hfcHJlY2hhbmdldXBwZXJfc2FuaXR5X2NoZWNrcyhuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGJyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRleHRhY2spO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRyZXR1cm4gZHBhYTJfc3dpdGNoX3ByZV9sYWdfam9pbihuZXRkZXYsIHVwcGVyX2RldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IGluZm8tXFx1MDAzZXVwcGVyX2luZm8sIGV4dGFjayk7XFxuIFxcdH0gZWxzZSBpZiAoaXNfdmxhbl9kZXYodXBwZXJfZGV2KSkge1xcbiBcXHRcXHRwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbiBcXHRcXHRpZiAocG9ydF9wcml2LVxcdTAwM2VmZGItXFx1MDAzZWJyaWRnZV9kZXYpIHtcXG5AQCAtMjI4Myw2ICsyNzk2LDgwIEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfY2hhbmdldXBwZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBleHRhY2spO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHJldHVybiBkcGFhMl9zd2l0Y2hfcG9ydF9icmlkZ2VfbGVhdmUobmV0ZGV2KTtcXG4rXFx0fSBlbHNlIGlmIChuZXRpZl9pc19sYWdfbWFzdGVyKHVwcGVyX2RldikpIHtcXG4rXFx0XFx0aWYgKGluZm8tXFx1MDAzZWxpbmtpbmcpXFxuK1xcdFxcdFxcdHJldHVybiBkcGFhMl9zd2l0Y2hfcG9ydF9ib25kX2pvaW4obmV0ZGV2LCB1cHBlcl9kZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGluZm8tXFx1MDAzZXVwcGVyX2luZm8sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGV4dGFjayk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cmV0dXJuIGRwYWEyX3N3aXRjaF9wb3J0X2JvbmRfbGVhdmUobmV0ZGV2LCB1cHBlcl9kZXYpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbitkcGFhMl9zd2l0Y2hfbGFnX3ByZWNoYW5nZXVwcGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBuZXRkZXZfbm90aWZpZXJfY2hhbmdldXBwZXJfaW5mbyAqaW5mbylcXG4re1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbG93ZXI7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0aWYgKCFuZXRpZl9pc19sYWdfbWFzdGVyKG5ldGRldikpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0bmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX2RldihuZXRkZXYsIGxvd2VyLCBpdGVyKSB7XFxuK1xcdFxcdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrKGxvd2VyKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9wcmVjaGFuZ2V1cHBlcihsb3dlciwgaW5mbyk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4rZHBhYTJfc3dpdGNoX2xhZ19jaGFuZ2V1cHBlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRkZXZfbm90aWZpZXJfY2hhbmdldXBwZXJfaW5mbyAqaW5mbylcXG4re1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbG93ZXI7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0aWYgKCFuZXRpZl9pc19sYWdfbWFzdGVyKG5ldGRldikpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0bmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX2RldihuZXRkZXYsIGxvd2VyLCBpdGVyKSB7XFxuK1xcdFxcdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrKGxvd2VyKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9jaGFuZ2V1cHBlcihsb3dlciwgaW5mbyk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK2RwYWEyX3N3aXRjaF9wb3J0X2NoYW5nZWxvd2Vyc3RhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldGRldl9sYWdfbG93ZXJfc3RhdGVfaW5mbyAqbGluZm8pXFxuK3tcXG4rXFx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3ID0gcG9ydF9wcml2LVxcdTAwM2VldGhzd19kYXRhO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0aWYgKCFydG5sX2RlcmVmZXJlbmNlKHBvcnRfcHJpdi1cXHUwMDNlbGFnKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRlcnIgPSBkcHN3X2lmX3NldF9sYWdfc3RhdGUoZXRoc3ctXFx1MDAzZW1jX2lvLCAwLCBldGhzdy1cXHUwMDNlZHBzd19oYW5kbGUsXFxuK1xcdFxcdFxcdFxcdCAgICBwb3J0X3ByaXYtXFx1MDAzZWlkeCwgbGluZm8tXFx1MDAzZXR4X2VuYWJsZWQgPyAxIDogMCk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJkcHN3X2lmX3NldF9sYWdfc3RhdGUoKSA9ICVkXFxcXG5cXFwiLCBlcnIpO1xcbitcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMjI5Miw2ICsyODc5LDcgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9uZXRkZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXFxuIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xcbitcXHRzdHJ1Y3QgbmV0ZGV2X25vdGlmaWVyX2NoYW5nZWxvd2Vyc3RhdGVfaW5mbyAqaW5mbztcXG4gXFx0aW50IGVyciA9IDA7XFxuIFxcbiBcXHRzd2l0Y2ggKGV2ZW50KSB7XFxuQEAgLTIzMDAsMTMgKzI4ODgsMjkgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9uZXRkZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0cmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8oZXJyKTtcXG4gXFxuK1xcdFxcdGVyciA9IGRwYWEyX3N3aXRjaF9sYWdfcHJlY2hhbmdldXBwZXIobmV0ZGV2LCBwdHIpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gbm90aWZpZXJfZnJvbV9lcnJubyhlcnIpO1xcbitcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgTkVUREVWX0NIQU5HRVVQUEVSOlxcbiBcXHRcXHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9jaGFuZ2V1cHBlcihuZXRkZXYsIHB0cik7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdHJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7XFxuIFxcbitcXHRcXHRlcnIgPSBkcGFhMl9zd2l0Y2hfbGFnX2NoYW5nZXVwcGVyKG5ldGRldiwgcHRyKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8oZXJyKTtcXG4rXFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE5FVERFVl9DSEFOR0VMT1dFUlNUQVRFOlxcbitcXHRcXHRpbmZvID0gcHRyO1xcbitcXHRcXHRpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhuZXRkZXYpKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X2NoYW5nZWxvd2Vyc3RhdGUobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgaW5mby1cXHUwMDNlbG93ZXJfc3RhdGVfaW5mbyk7XFxuK1xcdFxcdHJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiBOT1RJRllfRE9ORTtcXG5AQCAtMjMxNiw4MCArMjkyMCw5NyBAQCBzdHJ1Y3QgZXRoc3dfc3dpdGNoZGV2X2V2ZW50X3dvcmsge1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yaztcXG4gXFx0c3RydWN0IHN3aXRjaGRldl9ub3RpZmllcl9mZGJfaW5mbyBmZGJfaW5mbztcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2O1xcbiBcXHR1bnNpZ25lZCBsb25nIGV2ZW50O1xcbitcXHR1MTYgdmlkO1xcbiB9O1xcbiBcXG4gc3RhdGljIHZvaWQgZHBhYTJfc3dpdGNoX2V2ZW50X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiB7XFxuIFxcdHN0cnVjdCBldGhzd19zd2l0Y2hkZXZfZXZlbnRfd29yayAqc3dpdGNoZGV2X3dvcmsgPVxcbiBcXHRcXHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IGV0aHN3X3N3aXRjaGRldl9ldmVudF93b3JrLCB3b3JrKTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2ID0gc3dpdGNoZGV2X3dvcmstXFx1MDAzZW9yaWdfZGV2O1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc3dpdGNoZGV2X3dvcmstXFx1MDAzZWRldjtcXG4rXFx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gXFx0c3RydWN0IHN3aXRjaGRldl9ub3RpZmllcl9mZGJfaW5mbyAqZmRiX2luZm87XFxuK1xcdHN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWc7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHRydG5sX2xvY2soKTtcXG4gXFx0ZmRiX2luZm8gPSBcXHUwMDI2c3dpdGNoZGV2X3dvcmstXFx1MDAzZWZkYl9pbmZvO1xcbiBcXG4rXFx0LyogVGhlIGxhZyBzdHJ1Y3R1cmVzIGFyZSBmcmVlZCBvbmx5IGZyb20gZHBhYTJfc3dpdGNoX3JlbW92ZSgpLCB3aGljaFxcbitcXHQgKiBmaXJzdCBmbHVzaGVzIHRoaXMgd29ya3F1ZXVlLCBzbyB0aGUgcG9pbnRlciBzdGF5cyB2YWxpZCBmb3IgdGhlXFxuK1xcdCAqIGxpZmV0aW1lIG9mIHRoZSB3b3JrIGl0ZW0uIE9ubHkgdGhlIGRlcmVmZXJlbmNlIG5lZWRzIHRoZSBSQ1VcXG4rXFx0ICogcmVhZC1zaWRlIGxvY2s7IHRoZSBGREIgaGVscGVycyBiZWxvdyBjYW4gc2xlZXAgYW5kIG11c3QgcnVuIG91dHNpZGVcXG4rXFx0ICogb2YgaXQuXFxuK1xcdCAqL1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdGxhZyA9IHJjdV9kZXJlZmVyZW5jZShwb3J0X3ByaXYtXFx1MDAzZWxhZyk7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4gXFx0c3dpdGNoIChzd2l0Y2hkZXZfd29yay1cXHUwMDNlZXZlbnQpIHtcXG4gXFx0Y2FzZSBTV0lUQ0hERVZfRkRCX0FERF9UT19ERVZJQ0U6XFxuLVxcdFxcdGlmICghZmRiX2luZm8tXFx1MDAzZWFkZGVkX2J5X3VzZXIgfHwgZmRiX2luZm8tXFx1MDAzZWlzX2xvY2FsKVxcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0aWYgKGlzX3VuaWNhc3RfZXRoZXJfYWRkcihmZGJfaW5mby1cXHUwMDNlYWRkcikpXFxuLVxcdFxcdFxcdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9hZGRfdWMobmV0ZGV2X3ByaXYoZGV2KSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgZmRiX2luZm8tXFx1MDAzZWFkZHIpO1xcbitcXHRcXHRpZiAobGFnKVxcbitcXHRcXHRcXHRlcnIgPSBkcGFhMl9zd2l0Y2hfbGFnX2ZkYl9hZGQobGFnLCBmZGJfaW5mby1cXHUwMDNlYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN3aXRjaGRldl93b3JrLVxcdTAwM2V2aWQpO1xcbiBcXHRcXHRlbHNlXFxuLVxcdFxcdFxcdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9hZGRfbWMobmV0ZGV2X3ByaXYoZGV2KSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgZmRiX2luZm8tXFx1MDAzZWFkZHIpO1xcbitcXHRcXHRcXHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfYWRkKHBvcnRfcHJpdixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ZmRiX2luZm8tXFx1MDAzZWFkZHIpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ZmRiX2luZm8tXFx1MDAzZW9mZmxvYWRlZCA9IHRydWU7XFxuLVxcdFxcdGNhbGxfc3dpdGNoZGV2X25vdGlmaWVycyhTV0lUQ0hERVZfRkRCX09GRkxPQURFRCwgZGV2LFxcbitcXHRcXHRjYWxsX3N3aXRjaGRldl9ub3RpZmllcnMoU1dJVENIREVWX0ZEQl9PRkZMT0FERUQsIG9yaWdfZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmZkYl9pbmZvLVxcdTAwM2VpbmZvLCBOVUxMKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgU1dJVENIREVWX0ZEQl9ERUxfVE9fREVWSUNFOlxcbi1cXHRcXHRpZiAoIWZkYl9pbmZvLVxcdTAwM2VhZGRlZF9ieV91c2VyIHx8IGZkYl9pbmZvLVxcdTAwM2Vpc19sb2NhbClcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGlmIChpc191bmljYXN0X2V0aGVyX2FkZHIoZmRiX2luZm8tXFx1MDAzZWFkZHIpKVxcbi1cXHRcXHRcXHRkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsX3VjKG5ldGRldl9wcml2KGRldiksIGZkYl9pbmZvLVxcdTAwM2VhZGRyKTtcXG4rXFx0XFx0aWYgKGxhZylcXG4rXFx0XFx0XFx0ZHBhYTJfc3dpdGNoX2xhZ19mZGJfZGVsKGxhZywgZmRiX2luZm8tXFx1MDAzZWFkZHIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBzd2l0Y2hkZXZfd29yay1cXHUwMDNldmlkKTtcXG4gXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsX21jKG5ldGRldl9wcml2KGRldiksIGZkYl9pbmZvLVxcdTAwM2VhZGRyKTtcXG4rXFx0XFx0XFx0ZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2RlbChwb3J0X3ByaXYsIGZkYl9pbmZvLVxcdTAwM2VhZGRyKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFxuLVxcdHJ0bmxfdW5sb2NrKCk7XFxuIFxcdGtmcmVlKHN3aXRjaGRldl93b3JrLVxcdTAwM2VmZGJfaW5mby5hZGRyKTtcXG4gXFx0a2ZyZWUoc3dpdGNoZGV2X3dvcmspO1xcbiBcXHRkZXZfcHV0KGRldik7XFxuK1xcdGRldl9wdXQob3JpZ19kZXYpO1xcbiB9XFxuIFxcbi0vKiBDYWxsZWQgdW5kZXIgcmN1X3JlYWRfbG9jaygpICovXFxuLXN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG4tXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxcbitzdGF0aWMgaW50XFxuK2RwYWEyX3N3aXRjaF9wb3J0X2ZkYl9ldmVudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2LFxcbitcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBldmVudCwgY29uc3Qgdm9pZCAqY3R4LFxcbitcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9ub3RpZmllcl9mZGJfaW5mbyAqZmRiX2luZm8pXFxuIHtcXG4tXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHN3aXRjaGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xcbiBcXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiBcXHRzdHJ1Y3QgZXRoc3dfc3dpdGNoZGV2X2V2ZW50X3dvcmsgKnN3aXRjaGRldl93b3JrO1xcbi1cXHRzdHJ1Y3Qgc3dpdGNoZGV2X25vdGlmaWVyX2ZkYl9pbmZvICpmZGJfaW5mbyA9IHB0cjtcXG4gXFx0c3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3ID0gcG9ydF9wcml2LVxcdTAwM2VldGhzd19kYXRhO1xcbiBcXG4tXFx0aWYgKGV2ZW50ID09IFNXSVRDSERFVl9QT1JUX0FUVFJfU0VUKVxcbi1cXHRcXHRyZXR1cm4gZHBhYTJfc3dpdGNoX3BvcnRfYXR0cl9zZXRfZXZlbnQoZGV2LCBwdHIpO1xcbitcXHRpZiAoY3R4IFxcdTAwMjZcXHUwMDI2IGN0eCAhPSBwb3J0X3ByaXYpXFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0aWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2soZGV2KSlcXG4tXFx0XFx0cmV0dXJuIE5PVElGWV9ET05FO1xcbitcXHQvKiBGb3IgdGhlIG1vbWVudCwgZG8gbm90aGluZyB3aXRoIGVudHJpZXMgdG93YXJkcyBmb3JlaWduIGRldmljZXMgKi9cXG4rXFx0aWYgKGRwYWEyX3N3aXRjaF9mb3JlaWduX2Rldl9jaGVjayhkZXYsIG9yaWdfZGV2KSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAoIWZkYl9pbmZvLVxcdTAwM2VhZGRlZF9ieV91c2VyIHx8IGZkYl9pbmZvLVxcdTAwM2Vpc19sb2NhbClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRzd2l0Y2hkZXZfd29yayA9IGt6YWxsb2Nfb2JqKCpzd2l0Y2hkZXZfd29yaywgR0ZQX0FUT01JQyk7XFxuIFxcdGlmICghc3dpdGNoZGV2X3dvcmspXFxuLVxcdFxcdHJldHVybiBOT1RJRllfQkFEO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdElOSVRfV09SSyhcXHUwMDI2c3dpdGNoZGV2X3dvcmstXFx1MDAzZXdvcmssIGRwYWEyX3N3aXRjaF9ldmVudF93b3JrKTtcXG4gXFx0c3dpdGNoZGV2X3dvcmstXFx1MDAzZWRldiA9IGRldjtcXG4gXFx0c3dpdGNoZGV2X3dvcmstXFx1MDAzZWV2ZW50ID0gZXZlbnQ7XFxuK1xcdHN3aXRjaGRldl93b3JrLVxcdTAwM2VvcmlnX2RldiA9IG9yaWdfZGV2O1xcbitcXHRzd2l0Y2hkZXZfd29yay1cXHUwMDNldmlkID0gZmRiX2luZm8tXFx1MDAzZXZpZDtcXG4gXFxuIFxcdHN3aXRjaCAoZXZlbnQpIHtcXG4gXFx0Y2FzZSBTV0lUQ0hERVZfRkRCX0FERF9UT19ERVZJQ0U6XFxuIFxcdGNhc2UgU1dJVENIREVWX0ZEQl9ERUxfVE9fREVWSUNFOlxcbi1cXHRcXHRtZW1jcHkoXFx1MDAyNnN3aXRjaGRldl93b3JrLVxcdTAwM2VmZGJfaW5mbywgcHRyLFxcbitcXHRcXHRtZW1jcHkoXFx1MDAyNnN3aXRjaGRldl93b3JrLVxcdTAwM2VmZGJfaW5mbywgZmRiX2luZm8sXFxuIFxcdFxcdCAgICAgICBzaXplb2Yoc3dpdGNoZGV2X3dvcmstXFx1MDAzZWZkYl9pbmZvKSk7XFxuIFxcdFxcdHN3aXRjaGRldl93b3JrLVxcdTAwM2VmZGJfaW5mby5hZGRyID0ga3phbGxvYyhFVEhfQUxFTiwgR0ZQX0FUT01JQyk7XFxuIFxcdFxcdGlmICghc3dpdGNoZGV2X3dvcmstXFx1MDAzZWZkYl9pbmZvLmFkZHIpXFxuQEAgLTI0MDAsNTIgKzMwMjEsNjEgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbiBcXG4gXFx0XFx0LyogVGFrZSBhIHJlZmVyZW5jZSBvbiB0aGUgZGV2aWNlIHRvIGF2b2lkIGJlaW5nIGZyZWVkLiAqL1xcbiBcXHRcXHRkZXZfaG9sZChkZXYpO1xcbitcXHRcXHRkZXZfaG9sZChvcmlnX2Rldik7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRrZnJlZShzd2l0Y2hkZXZfd29yayk7XFxuLVxcdFxcdHJldHVybiBOT1RJRllfRE9ORTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuIFxcdHF1ZXVlX3dvcmsoZXRoc3ctXFx1MDAzZXdvcmtxdWV1ZSwgXFx1MDAyNnN3aXRjaGRldl93b3JrLVxcdTAwM2V3b3JrKTtcXG4gXFxuLVxcdHJldHVybiBOT1RJRllfRE9ORTtcXG4rXFx0cmV0dXJuIDA7XFxuIFxcbiBlcnJfYWRkcl9hbGxvYzpcXG4gXFx0a2ZyZWUoc3dpdGNoZGV2X3dvcmspO1xcbi1cXHRyZXR1cm4gTk9USUZZX0JBRDtcXG4rXFx0cmV0dXJuIC1FTk9NRU07XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfb2JqX2V2ZW50KHVuc2lnbmVkIGxvbmcgZXZlbnQsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHN3aXRjaGRldl9ub3RpZmllcl9wb3J0X29ial9pbmZvICpwb3J0X29ial9pbmZvKVxcbisvKiBDYWxsZWQgdW5kZXIgcmN1X3JlYWRfbG9jaygpICovXFxuK3N0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG4rXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxcbiB7XFxuLVxcdGludCBlcnIgPSAtRU9QTk9UU1VQUDtcXG4tXFxuLVxcdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrKG5ldGRldikpXFxuLVxcdFxcdHJldHVybiBOT1RJRllfRE9ORTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHN3aXRjaGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xcbitcXHRpbnQgZXJyO1xcbiBcXG4gXFx0c3dpdGNoIChldmVudCkge1xcbi1cXHRjYXNlIFNXSVRDSERFVl9QT1JUX09CSl9BREQ6XFxuLVxcdFxcdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X29ial9hZGQobmV0ZGV2LCBwb3J0X29ial9pbmZvLVxcdTAwM2VvYmopO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0Y2FzZSBTV0lUQ0hERVZfUE9SVF9PQkpfREVMOlxcbi1cXHRcXHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9vYmpfZGVsKG5ldGRldiwgcG9ydF9vYmpfaW5mby1cXHUwMDNlb2JqKTtcXG4tXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgU1dJVENIREVWX1BPUlRfQVRUUl9TRVQ6XFxuK1xcdFxcdHJldHVybiBkcGFhMl9zd2l0Y2hfcG9ydF9hdHRyX3NldF9ldmVudChkZXYsIHB0cik7XFxuK1xcdGNhc2UgU1dJVENIREVWX0ZEQl9BRERfVE9fREVWSUNFOlxcbitcXHRjYXNlIFNXSVRDSERFVl9GREJfREVMX1RPX0RFVklDRTpcXG4rXFx0XFx0ZXJyID0gc3dpdGNoZGV2X2hhbmRsZV9mZGJfZXZlbnRfdG9fZGV2aWNlKGRldiwgZXZlbnQsIHB0cixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBkcGFhMl9zd2l0Y2hfZm9yZWlnbl9kZXZfY2hlY2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9ldmVudCk7XFxuK1xcdFxcdHJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBOT1RJRllfRE9ORTtcXG4gXFx0fVxcbi1cXG4tXFx0cG9ydF9vYmpfaW5mby1cXHUwMDNlaGFuZGxlZCA9IHRydWU7XFxuLVxcdHJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfYmxvY2tpbmdfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc3dpdGNoZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7XFxuK1xcdGludCBlcnI7XFxuIFxcbiBcXHRzd2l0Y2ggKGV2ZW50KSB7XFxuIFxcdGNhc2UgU1dJVENIREVWX1BPUlRfT0JKX0FERDpcXG4rXFx0XFx0ZXJyID0gc3dpdGNoZGV2X2hhbmRsZV9wb3J0X29ial9hZGQoZGV2LCBwdHIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBkcGFhMl9zd2l0Y2hfcG9ydF9vYmpfYWRkKTtcXG4rXFx0XFx0cmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8oZXJyKTtcXG4gXFx0Y2FzZSBTV0lUQ0hERVZfUE9SVF9PQkpfREVMOlxcbi1cXHRcXHRyZXR1cm4gZHBhYTJfc3dpdGNoX3BvcnRfb2JqX2V2ZW50KGV2ZW50LCBkZXYsIHB0cik7XFxuK1xcdFxcdGVyciA9IHN3aXRjaGRldl9oYW5kbGVfcG9ydF9vYmpfZGVsKGRldiwgcHRyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgZHBhYTJfc3dpdGNoX3BvcnRfb2JqX2RlbCk7XFxuK1xcdFxcdHJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7XFxuIFxcdGNhc2UgU1dJVENIREVWX1BPUlRfQVRUUl9TRVQ6XFxuIFxcdFxcdHJldHVybiBkcGFhMl9zd2l0Y2hfcG9ydF9hdHRyX3NldF9ldmVudChkZXYsIHB0cik7XFxuIFxcdH1cXG5AQCAtMjQ5MCwxOSArMzEyMCwyMiBAQCBzdGF0aWMgdm9pZCBkcGFhMl9zd2l0Y2hfcngoc3RydWN0IGRwYWEyX3N3aXRjaF9mcSAqZnEsXFxuIFxcdGRtYV9hZGRyX3QgYWRkciA9IGRwYWEyX2ZkX2dldF9hZGRyKGZkKTtcXG4gXFx0c3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3ID0gZnEtXFx1MDAzZWV0aHN3O1xcbiBcXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXY7XFxuK1xcdHN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWc7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XFxuIFxcdHN0cnVjdCB2bGFuX2V0aGhkciAqaGRyO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiBcXHR1MTYgdmxhbl90Y2ksIHZpZDtcXG4gXFx0aW50IGlmX2lkLCBlcnI7XFxuIFxcdHZvaWQgKnZhZGRyO1xcbitcXHR1NjQgZmxjO1xcbiBcXG4gXFx0dmFkZHIgPSBkcGFhMl9pb3ZhX3RvX3ZpcnQoZXRoc3ctXFx1MDAzZWlvbW11X2RvbWFpbiwgYWRkcik7XFxuIFxcdGRtYV91bm1hcF9wYWdlKGV0aHN3LVxcdTAwM2VkZXYsIGFkZHIsIERQQUEyX1NXSVRDSF9SWF9CVUZfU0laRSxcXG4gXFx0XFx0ICAgICAgIERNQV9GUk9NX0RFVklDRSk7XFxuIFxcbiBcXHQvKiBnZXQgc3dpdGNoIGluZ3Jlc3MgaW50ZXJmYWNlIElEICovXFxuLVxcdGlmX2lkID0gdXBwZXJfMzJfYml0cyhkcGFhMl9mZF9nZXRfZmxjKGZkKSkgXFx1MDAyNiAweDAwMDBGRkZGO1xcbitcXHRmbGMgPSBkcGFhMl9mZF9nZXRfZmxjKGZkKTtcXG4rXFx0aWZfaWQgPSBEUEFBMl9FVEhTV19GTENfSUZfSUQoZmxjKTtcXG4gXFx0aWYgKGlmX2lkIFxcdTAwM2U9IGV0aHN3LVxcdTAwM2Vzd19hdHRyLm51bV9pZnMpIHtcXG4gXFx0XFx0ZGV2X2VycihldGhzdy1cXHUwMDNlZGV2LCBcXFwiRnJhbWUgcmVjZWl2ZWQgZnJvbSB1bmtub3duIGludGVyZmFjZSFcXFxcblxcXCIpO1xcbiBcXHRcXHRnb3RvIGVycl9mcmVlX2ZkO1xcbkBAIC0yNTQxLDEyICszMTc0LDIwIEBAIHN0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9yeChzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZxICpmcSxcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRza2ItXFx1MDAzZWRldiA9IG5ldGRldjtcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXG4rXFx0bGFnID0gcmN1X2RlcmVmZXJlbmNlKHBvcnRfcHJpdi1cXHUwMDNlbGFnKTtcXG4rXFx0aWYgKERQQUEyX0VUSFNXX0ZMQ19JTVBSRUNJU0VfSUZfSUQoZmxjKSBcXHUwMDI2XFx1MDAyNiBsYWcpXFxuK1xcdFxcdHNrYi1cXHUwMDNlZGV2ID0gbGFnLVxcdTAwM2Vib25kX2RldjtcXG4rXFx0ZWxzZVxcbitcXHRcXHRza2ItXFx1MDAzZWRldiA9IG5ldGRldjtcXG4gXFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgc2tiLVxcdTAwM2VkZXYpO1xcbiBcXG4gXFx0LyogU2V0dXAgdGhlIG9mZmxvYWRfZndkX21hcmsgb25seSBpZiB0aGUgcG9ydCBpcyB1bmRlciBhIGJyaWRnZSAqL1xcbiBcXHRza2ItXFx1MDAzZW9mZmxvYWRfZndkX21hcmsgPSAhIShwb3J0X3ByaXYtXFx1MDAzZWZkYi1cXHUwMDNlYnJpZGdlX2Rldik7XFxuIFxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuIFxcdG5ldGlmX3JlY2VpdmVfc2tiKHNrYik7XFxuIFxcbiBcXHRyZXR1cm47XFxuQEAgLTI1NjEsNiArMzIwMiw5IEBAIHN0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9kZXRlY3RfZmVhdHVyZXMoc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3KVxcbiBcXG4gXFx0aWYgKGV0aHN3LVxcdTAwM2VtYWpvciBcXHUwMDNlIDggfHwgKGV0aHN3LVxcdTAwM2VtYWpvciA9PSA4IFxcdTAwMjZcXHUwMDI2IGV0aHN3LVxcdTAwM2VtaW5vciBcXHUwMDNlPSA2KSlcXG4gXFx0XFx0ZXRoc3ctXFx1MDAzZWZlYXR1cmVzIHw9IEVUSFNXX0ZFQVRVUkVfTUFDX0FERFI7XFxuK1xcbitcXHRpZiAoZXRoc3ctXFx1MDAzZW1ham9yIFxcdTAwM2UgOCB8fCAoZXRoc3ctXFx1MDAzZW1ham9yID09IDggXFx1MDAyNlxcdTAwMjYgZXRoc3ctXFx1MDAzZW1pbm9yIFxcdTAwM2U9IDEzKSlcXG4rXFx0XFx0ZXRoc3ctXFx1MDAzZWZlYXR1cmVzIHw9IEVUSFNXX0ZFQVRVUkVfTEFHX09GRkxPQUQ7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3NldHVwX2ZxcyhzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3cpXFxuQEAgLTMxOTUsMTcgKzM4MzksMTUgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfaW5pdChzdHJ1Y3QgZnNsX21jX2RldmljZSAqc3dfZGV2KVxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi0vKiBBZGQgYW4gQUNMIHRvIHJlZGlyZWN0IGZyYW1lcyB3aXRoIHNwZWNpZmljIGRlc3RpbmF0aW9uIE1BQyBhZGRyZXNzIHRvXFxuLSAqIGNvbnRyb2wgaW50ZXJmYWNlXFxuLSAqL1xcbisvKiBBZGQgYW4gQUNMIHRvIHJlZGlyZWN0IGZyYW1lcyB0byBjb250cm9sIGludGVyZmFjZSBiYXNlZCBvbiB0aGUgZHN0IE1BQyAqL1xcbiBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X3RyYXBfbWFjX2FkZHIoc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2LFxcbi1cXHRcXHRcXHRcXHRcXHQgICBjb25zdCBjaGFyICptYWMpXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHU4ICptYWMsIGNvbnN0IHU4ICptYXNrKVxcbiB7XFxuIFxcdHN0cnVjdCBkcGFhMl9zd2l0Y2hfYWNsX2VudHJ5IGFjbF9lbnRyeSA9IHswfTtcXG4gXFxuIFxcdC8qIE1hdGNoIG9uIHRoZSBkZXN0aW5hdGlvbiBNQUMgYWRkcmVzcyAqL1xcbiBcXHRldGhlcl9hZGRyX2NvcHkoYWNsX2VudHJ5LmtleS5tYXRjaC5sMl9kZXN0X21hYywgbWFjKTtcXG4tXFx0ZXRoX2Jyb2FkY2FzdF9hZGRyKGFjbF9lbnRyeS5rZXkubWFzay5sMl9kZXN0X21hYyk7XFxuK1xcdGV0aGVyX2FkZHJfY29weShhY2xfZW50cnkua2V5Lm1hc2subDJfZGVzdF9tYWMsIG1hc2spO1xcbiBcXG4gXFx0LyogVHJhcCB0byBDUFUgKi9cXG4gXFx0YWNsX2VudHJ5LmNmZy5wcmVjZWRlbmNlID0gMDtcXG5AQCAtMzIxNiw3ICszODU4LDggQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF90cmFwX21hY19hZGRyKHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdixcXG4gXFxuIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfaW5pdChzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYsIHUxNiBwb3J0KVxcbiB7XFxuLVxcdGNvbnN0IGNoYXIgc3RwYVtFVEhfQUxFTl0gPSB7MHgwMSwgMHg4MCwgMHhjMiwgMHgwMCwgMHgwMCwgMHgwMH07XFxuK1xcdGNvbnN0IHU4IGxsX21hY1tFVEhfQUxFTl0gPSB7MHgwMSwgMHg4MCwgMHhjMiwgMHgwMCwgMHgwMCwgMHgwMH07XFxuK1xcdGNvbnN0IHU4IGxsX21hc2tbRVRIX0FMRU5dID0gezB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjB9O1xcbiBcXHRzdHJ1Y3Qgc3dpdGNoZGV2X29ial9wb3J0X3ZsYW4gdmxhbiA9IHtcXG4gXFx0XFx0Lm9iai5pZCA9IFNXSVRDSERFVl9PQkpfSURfUE9SVF9WTEFOLFxcbiBcXHRcXHQudmlkID0gREVGQVVMVF9WTEFOX0lELFxcbkBAIC0zMjkxLDcgKzM5MzQsNyBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2luaXQoc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2LCB1MTYgcG9ydClcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuLVxcdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X3RyYXBfbWFjX2FkZHIocG9ydF9wcml2LCBzdHBhKTtcXG4rXFx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfdHJhcF9tYWNfYWRkcihwb3J0X3ByaXYsIGxsX21hYywgbGxfbWFzayk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbkBAIC0zMzMxLDYgKzM5NzQsOSBAQCBzdGF0aWMgdm9pZCBkcGFhMl9zd2l0Y2hfcmVtb3ZlKHN0cnVjdCBmc2xfbWNfZGV2aWNlICpzd19kZXYpXFxuIFxcdGRldiA9IFxcdTAwMjZzd19kZXYtXFx1MDAzZWRldjtcXG4gXFx0ZXRoc3cgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcXG4gXFxuK1xcdC8qIE1ha2Ugc3VyZSB0aGF0IGFsbCBldmVudHMgd2VyZSBoYW5kbGVkIGJlZm9yZSB3ZSBrZnJlZSBhbnl0aGluZyAqL1xcbitcXHRmbHVzaF93b3JrcXVldWUoZXRoc3ctXFx1MDAzZXdvcmtxdWV1ZSk7XFxuK1xcbiBcXHRkcGFhMl9zd2l0Y2hfdGVhcmRvd25faXJxcyhzd19kZXYpO1xcbiBcXG4gXFx0ZHBzd19kaXNhYmxlKGV0aHN3LVxcdTAwM2VtY19pbywgMCwgZXRoc3ctXFx1MDAzZWRwc3dfaGFuZGxlKTtcXG5AQCAtMzM0NCwxMiArMzk5MCwxNSBAQCBzdGF0aWMgdm9pZCBkcGFhMl9zd2l0Y2hfcmVtb3ZlKHN0cnVjdCBmc2xfbWNfZGV2aWNlICpzd19kZXYpXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBEUEFBMl9TV0lUQ0hfUlhfTlVNX0ZRUzsgaSsrKVxcbiBcXHRcXHRuZXRpZl9uYXBpX2RlbChcXHUwMDI2ZXRoc3ctXFx1MDAzZWZxW2ldLm5hcGkpO1xcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGV0aHN3LVxcdTAwM2Vzd19hdHRyLm51bV9pZnM7IGkrKylcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGV0aHN3LVxcdTAwM2Vzd19hdHRyLm51bV9pZnM7IGkrKykge1xcbiBcXHRcXHRkcGFhMl9zd2l0Y2hfcmVtb3ZlX3BvcnQoZXRoc3csIGkpO1xcbitcXHRcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZldGhzdy1cXHUwMDNlbGFnc1tpXS5mZGJfbG9jayk7XFxuK1xcdH1cXG4gXFxuIFxcdGtmcmVlKGV0aHN3LVxcdTAwM2VmZGJzKTtcXG4gXFx0a2ZyZWUoZXRoc3ctXFx1MDAzZWZpbHRlcl9ibG9ja3MpO1xcbiBcXHRrZnJlZShldGhzdy1cXHUwMDNlcG9ydHMpO1xcbitcXHRrZnJlZShldGhzdy1cXHUwMDNlbGFncyk7XFxuIFxcbiBcXHRkcGFhMl9zd2l0Y2hfdGVhcmRvd24oc3dfZGV2KTtcXG4gXFxuQEAgLTMzNzcsNiArNDAyNiw3IEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3Byb2JlX3BvcnQoc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3LFxcbiBcXHRwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihwb3J0X25ldGRldik7XFxuIFxcdHBvcnRfcHJpdi1cXHUwMDNlbmV0ZGV2ID0gcG9ydF9uZXRkZXY7XFxuIFxcdHBvcnRfcHJpdi1cXHUwMDNlZXRoc3dfZGF0YSA9IGV0aHN3O1xcbitcXHRyY3VfYXNzaWduX3BvaW50ZXIocG9ydF9wcml2LVxcdTAwM2VsYWcsIE5VTEwpO1xcbiBcXG4gXFx0bXV0ZXhfaW5pdChcXHUwMDI2cG9ydF9wcml2LVxcdTAwM2VtYWNfbG9jayk7XFxuIFxcbkBAIC0zNDg0LDYgKzQxMzQsMjEgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcHJvYmUoc3RydWN0IGZzbF9tY19kZXZpY2UgKnN3X2RldilcXG4gXFx0XFx0Z290byBlcnJfZnJlZV9mZGJzO1xcbiBcXHR9XFxuIFxcbitcXHRldGhzdy1cXHUwMDNlbGFncyA9IGtjYWxsb2MoZXRoc3ctXFx1MDAzZXN3X2F0dHIubnVtX2lmcywgc2l6ZW9mKCpldGhzdy1cXHUwMDNlbGFncyksXFxuK1xcdFxcdFxcdCAgICAgIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWV0aHN3LVxcdTAwM2VsYWdzKSB7XFxuK1xcdFxcdGVyciA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWVfZmlsdGVyO1xcbitcXHR9XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBldGhzdy1cXHUwMDNlc3dfYXR0ci5udW1faWZzOyBpKyspIHtcXG4rXFx0XFx0ZXRoc3ctXFx1MDAzZWxhZ3NbaV0uYm9uZF9kZXYgPSBOVUxMO1xcbitcXHRcXHRldGhzdy1cXHUwMDNlbGFnc1tpXS5ldGhzdyA9IGV0aHN3O1xcbitcXHRcXHRldGhzdy1cXHUwMDNlbGFnc1tpXS5pZCA9IGkgKyAxO1xcbitcXHRcXHRldGhzdy1cXHUwMDNlbGFnc1tpXS5pbl91c2UgPSAwO1xcbitcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZldGhzdy1cXHUwMDNlbGFnc1tpXS5mZGJfbG9jayk7XFxuK1xcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZldGhzdy1cXHUwMDNlbGFnc1tpXS5mZGJzKTtcXG4rXFx0fVxcbitcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGV0aHN3LVxcdTAwM2Vzd19hdHRyLm51bV9pZnM7IGkrKykge1xcbiBcXHRcXHRlcnIgPSBkcGFhMl9zd2l0Y2hfcHJvYmVfcG9ydChldGhzdywgaSk7XFxuIFxcdFxcdGlmIChlcnIpXFxuQEAgLTM1MzAsNiArNDE5NSwxMCBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wcm9iZShzdHJ1Y3QgZnNsX21jX2RldmljZSAqc3dfZGV2KVxcbiBlcnJfZnJlZV9uZXRkZXY6XFxuIFxcdGZvciAoaS0tOyBpIFxcdTAwM2U9IDA7IGktLSlcXG4gXFx0XFx0ZHBhYTJfc3dpdGNoX3JlbW92ZV9wb3J0KGV0aHN3LCBpKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGV0aHN3LVxcdTAwM2Vzd19hdHRyLm51bV9pZnM7IGkrKylcXG4rXFx0XFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2ZXRoc3ctXFx1MDAzZWxhZ3NbaV0uZmRiX2xvY2spO1xcbitcXHRrZnJlZShldGhzdy1cXHUwMDNlbGFncyk7XFxuK2Vycl9mcmVlX2ZpbHRlcjpcXG4gXFx0a2ZyZWUoZXRoc3ctXFx1MDAzZWZpbHRlcl9ibG9ja3MpO1xcbiBlcnJfZnJlZV9mZGJzOlxcbiBcXHRrZnJlZShldGhzdy1cXHUwMDNlZmRicyk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guaFxcbmluZGV4IDQyYjNjYTczZjU1ZDU0Li42M2I3MDJiMDAwMGMyZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItc3dpdGNoLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItc3dpdGNoLmhcXG5AQCAtNDEsNyArNDEsOCBAQFxcbiAjZGVmaW5lIEVUSFNXX01BWF9GUkFNRV9MRU5HVEhcXHQoRFBBQTJfTUZMIC0gVkxBTl9FVEhfSExFTiAtIEVUSF9GQ1NfTEVOKVxcbiAjZGVmaW5lIEVUSFNXX0wyX01BWF9GUk0obXR1KVxcdCgobXR1KSArIFZMQU5fRVRIX0hMRU4gKyBFVEhfRkNTX0xFTilcXG4gXFxuLSNkZWZpbmUgRVRIU1dfRkVBVFVSRV9NQUNfQUREUlxcdEJJVCgwKVxcbisjZGVmaW5lIEVUSFNXX0ZFQVRVUkVfTUFDX0FERFJcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBFVEhTV19GRUFUVVJFX0xBR19PRkZMT0FEXFx0QklUKDEpXFxuIFxcbiAvKiBOdW1iZXIgb2YgcmVjZWl2ZSBxdWV1ZXMgKG9uZSBSWCBhbmQgb25lIFRYX0NPTkYpICovXFxuICNkZWZpbmUgRFBBQTJfU1dJVENIX1JYX05VTV9GUVNcXHQyXFxuQEAgLTg2LDYgKzg3LDkgQEBcXG4gXFxuICNkZWZpbmUgRFBBQTJfRVRIU1dfUE9SVF9BQ0xfQ01EX0JVRl9TSVpFXFx0MjU2XFxuIFxcbisjZGVmaW5lIERQQUEyX0VUSFNXX0ZMQ19JRl9JRChmbGMpXFx0XFx0KCgoZmxjKSBcXHUwMDNlXFx1MDAzZSAzMikgXFx1MDAyNiBHRU5NQVNLKDE1LCAwKSlcXG4rI2RlZmluZSBEUEFBMl9FVEhTV19GTENfSU1QUkVDSVNFX0lGX0lEKGZsYylcXHQoKGZsYykgXFx1MDAyNiBCSVRfVUxMKDYzKSlcXG4rXFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZHBhYTJfc3dpdGNoX3BvcnRfZXRodG9vbF9vcHM7XFxuIFxcbiBzdHJ1Y3QgZXRoc3dfY29yZTtcXG5AQCAtOTksMTIgKzEwMywzMCBAQCBzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZxIHtcXG4gXFx0dTMyIGZxaWQ7XFxuIH07XFxuIFxcbitzdHJ1Y3QgZHBhYTJfbWFjX2FkZHIge1xcbitcXHR1bnNpZ25lZCBjaGFyIGFkZHJbRVRIX0FMRU5dO1xcbitcXHR1MTYgdmlkO1xcbitcXHRyZWZjb3VudF90IHJlZmNvdW50O1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuK307XFxuK1xcbiBzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZkYiB7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlXFx0KmJyaWRnZV9kZXY7XFxuIFxcdHUxNlxcdFxcdFxcdGZkYl9pZDtcXG4gXFx0Ym9vbFxcdFxcdFxcdGluX3VzZTtcXG4gfTtcXG4gXFxuK3N0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnIHtcXG4rXFx0c3RydWN0IGV0aHN3X2NvcmVcXHQqZXRoc3c7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlXFx0KmJvbmRfZGV2O1xcbitcXHRib29sXFx0XFx0XFx0aW5fdXNlO1xcbitcXHR1OFxcdFxcdFxcdGlkO1xcbitcXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2XFx0KnByaW1hcnk7XFxuK1xcdC8qIFByb3RlY3RzIHRoZSBsaXN0IG9mIGZkYnMgaW5zdGFsbGVkIG9uIHRoaXMgTEFHICovXFxuK1xcdHN0cnVjdCBtdXRleFxcdFxcdGZkYl9sb2NrO1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0ZmRicztcXG4rfTtcXG4rXFxuIHN0cnVjdCBkcGFhMl9zd2l0Y2hfYWNsX2VudHJ5IHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuIFxcdHUxNlxcdFxcdFxcdHByaW87XFxuQEAgLTE2Myw2ICsxODUsOCBAQCBzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2IHtcXG4gXFx0c3RydWN0IGRwYWEyX21hY1xcdCptYWM7XFxuIFxcdC8qIFByb3RlY3RzIGFnYWluc3QgY2hhbmdlcyB0byBwb3J0X3ByaXYtXFx1MDAzZW1hYyAqL1xcbiBcXHRzdHJ1Y3QgbXV0ZXhcXHRcXHRtYWNfbG9jaztcXG4rXFxuK1xcdHN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnIF9fcmN1ICpsYWc7XFxuIH07XFxuIFxcbiAvKiBTd2l0Y2ggZGF0YSAqL1xcbkBAIC0xOTAsNiArMjE0LDggQEAgc3RydWN0IGV0aHN3X2NvcmUge1xcbiBcXHRzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZkYlxcdFxcdCpmZGJzO1xcbiBcXHRzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZpbHRlcl9ibG9jayAqZmlsdGVyX2Jsb2NrcztcXG4gXFx0dTE2XFx0XFx0XFx0XFx0bWlycm9yX3BvcnQ7XFxuK1xcbitcXHRzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZ1xcdFxcdCpsYWdzO1xcbiB9O1xcbiBcXG4gc3RhdGljIGlubGluZSBpbnQgZHBhYTJfc3dpdGNoX2dldF9pbmRleChzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3csXFxuQEAgLTI3NCw0ICszMDAsMTggQEAgaW50IGRwYWEyX3N3aXRjaF9ibG9ja19vZmZsb2FkX21pcnJvcihzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZpbHRlcl9ibG9jayAqYmxvY2ssXFxuIFxcbiBpbnQgZHBhYTJfc3dpdGNoX2Jsb2NrX3Vub2ZmbG9hZF9taXJyb3Ioc3RydWN0IGRwYWEyX3N3aXRjaF9maWx0ZXJfYmxvY2sgKmJsb2NrLFxcbiBcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYpO1xcbitcXG4rc3RhdGljIGlubGluZSBib29sXFxuK2RwYWEyX3N3aXRjaF9wb3J0X29mZmxvYWRzX2JyaWRnZV9wb3J0KHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZyA9IHJjdV9kZXJlZmVyZW5jZV9ydG5sKHBvcnRfcHJpdi1cXHUwMDNlbGFnKTtcXG4rXFxuK1xcdGlmIChsYWcgXFx1MDAyNlxcdTAwMjYgbGFnLVxcdTAwM2Vib25kX2RldiA9PSBkZXYpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRpZiAocG9ydF9wcml2LVxcdTAwM2VuZXRkZXYgPT0gZGV2KVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiAjZW5kaWZcXHQvKiBfX0VUSFNXX0ggKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwc3ctY21kLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBzdy1jbWQuaFxcbmluZGV4IDM5N2Q1NWYyYmQ5OTUwLi45YTIwNTVjNjQ5ODNjZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBzdy1jbWQuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LWNtZC5oXFxuQEAgLTEyLDcgKzEyLDcgQEBcXG4gXFxuIC8qIERQU1cgVmVyc2lvbiAqL1xcbiAjZGVmaW5lIERQU1dfVkVSX01BSk9SXFx0XFx0OFxcbi0jZGVmaW5lIERQU1dfVkVSX01JTk9SXFx0XFx0OVxcbisjZGVmaW5lIERQU1dfVkVSX01JTk9SXFx0XFx0MTNcXG4gXFxuICNkZWZpbmUgRFBTV19DTURfQkFTRV9WRVJTSU9OXFx0MVxcbiAjZGVmaW5lIERQU1dfQ01EX1ZFUlNJT05fMlxcdDJcXG5AQCAtOTIsMTEgKzkyLDE0IEBAXFxuICNkZWZpbmUgRFBTV19DTURJRF9DVFJMX0lGX1NFVF9QT09MUyAgICAgICAgRFBTV19DTURfSUQoMHgwQTEpXFxuICNkZWZpbmUgRFBTV19DTURJRF9DVFJMX0lGX0VOQUJMRSAgICAgICAgICAgRFBTV19DTURfSUQoMHgwQTIpXFxuICNkZWZpbmUgRFBTV19DTURJRF9DVFJMX0lGX0RJU0FCTEUgICAgICAgICAgRFBTV19DTURfSUQoMHgwQTMpXFxuKyNkZWZpbmUgRFBTV19DTURJRF9TRVRfTEFHICAgICAgICAgICAgICAgICAgRFBTV19DTURfVjIoMHgwQTQpXFxuICNkZWZpbmUgRFBTV19DTURJRF9DVFJMX0lGX1NFVF9RVUVVRSAgICAgICAgRFBTV19DTURfSUQoMHgwQTYpXFxuIFxcbiAjZGVmaW5lIERQU1dfQ01ESURfU0VUX0VHUkVTU19GTE9PRCAgICAgICAgIERQU1dfQ01EX0lEKDB4MEFDKVxcbiAjZGVmaW5lIERQU1dfQ01ESURfSUZfU0VUX0xFQVJOSU5HX01PREUgICAgIERQU1dfQ01EX0lEKDB4MEFEKVxcbiBcXG4rI2RlZmluZSBEUFNXX0NNRElEX0lGX1NFVF9MQUdfU1RBVEUgICAgICAgICBEUFNXX0NNRF9JRCgweDBCMClcXG4rXFxuIC8qIE1hY3JvcyBmb3IgYWNjZXNzaW5nIGNvbW1hbmQgZmllbGRzIHNtYWxsZXIgdGhhbiAxYnl0ZSAqL1xcbiAjZGVmaW5lIERQU1dfTUFTSyhmaWVsZCkgICAgICAgIFxcXFxcXG4gXFx0R0VOTUFTSyhEUFNXXyMjZmllbGQjI19TSElGVCArIERQU1dfIyNmaWVsZCMjX1NJWkUgLSAxLCBcXFxcXFxuQEAgLTU1Miw1ICs1NTUsMTggQEAgc3RydWN0IGRwc3dfY21kX2lmX3JlZmxlY3Rpb24ge1xcbiBcXHQvKiBvbmx5IDIgYml0cyBmcm9tIHRoZSBMU0IgKi9cXG4gXFx0dTggZmlsdGVyO1xcbiB9O1xcbitcXG4rc3RydWN0IGRwc3dfY21kX2xhZyB7XFxuK1xcdHU4IGdyb3VwX2lkO1xcbitcXHR1OCBudW1faWZzO1xcbitcXHR1OCBwYWRbNl07XFxuK1xcdHU4IGlmX2lkW0RQU1dfTUFYX0xBR19JRlNdO1xcbitcXHR1OCBwaGFzZTtcXG4rfTtcXG4rXFxuK3N0cnVjdCBkcHN3X2NtZF9pZl9zZXRfbGFnX3N0YXRlIHtcXG4rXFx0X19sZTE2IGlmX2lkO1xcbitcXHR1OCB0eF9lbmFibGVkO1xcbit9O1xcbiAjcHJhZ21hIHBhY2socG9wKVxcbiAjZW5kaWYgLyogX19GU0xfRFBTV19DTURfSCAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBzdy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwc3cuY1xcbmluZGV4IGFiOTIxZDc1ZGViMmU4Li5mNzVjYmRjZTQyYmEyZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBzdy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwc3cuY1xcbkBAIC0xNjU5LDMgKzE2NTksNjMgQEAgaW50IGRwc3dfaWZfcmVtb3ZlX3JlZmxlY3Rpb24oc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHUzMiBjbWRfZmxhZ3MsIHUxNiB0b2tlbixcXG4gXFxuIFxcdHJldHVybiBtY19zZW5kX2NvbW1hbmQobWNfaW8sIFxcdTAwMjZjbWQpO1xcbiB9XFxuK1xcbisvKipcXG4rICogZHBzd19sYWdfc2V0KCkgLSBTZXQgTEFHIGNvbmZpZ3VyYXRpb25cXG4rICogQG1jX2lvOlxcdFBvaW50ZXIgdG8gTUMgcG9ydGFsJ3MgSS9PIG9iamVjdFxcbisgKiBAY21kX2ZsYWdzOlxcdENvbW1hbmQgZmxhZ3M7IG9uZSBvciBtb3JlIG9mICdNQ19DTURfRkxBR18nXFxuKyAqIEB0b2tlbjpcXHRUb2tlbiBvZiBEUFNXIG9iamVjdFxcbisgKiBAY2ZnOlxcdHBvaW50ZXIgdG8gTEFHIGNvbmZpZ3VyYXRpb25cXG4rICpcXG4rICogUmV0dXJuOiAgICcwJyBvbiBTdWNjZXNzOyBFcnJvciBjb2RlIG90aGVyd2lzZS5cXG4rICovXFxuK2ludCBkcHN3X2xhZ19zZXQoc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHUzMiBjbWRfZmxhZ3MsIHUxNiB0b2tlbixcXG4rXFx0XFx0IGNvbnN0IHN0cnVjdCBkcHN3X2xhZ19jZmcgKmNmZylcXG4re1xcbitcXHRzdHJ1Y3QgZnNsX21jX2NvbW1hbmQgY21kID0geyAwIH07XFxuK1xcdHN0cnVjdCBkcHN3X2NtZF9sYWcgKmNtZF9wYXJhbXM7XFxuK1xcdGludCBpID0gMDtcXG4rXFxuK1xcdGNtZC5oZWFkZXIgPSBtY19lbmNvZGVfY21kX2hlYWRlcihEUFNXX0NNRElEX1NFVF9MQUcsIGNtZF9mbGFncywgdG9rZW4pO1xcbitcXG4rXFx0aWYgKGNmZy1cXHUwMDNlbnVtX2lmcyBcXHUwMDNlIERQU1dfTUFYX0xBR19JRlMpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGNtZF9wYXJhbXMgPSAoc3RydWN0IGRwc3dfY21kX2xhZyAqKWNtZC5wYXJhbXM7XFxuK1xcdGNtZF9wYXJhbXMtXFx1MDAzZWdyb3VwX2lkID0gY2ZnLVxcdTAwM2Vncm91cF9pZDtcXG4rXFx0Y21kX3BhcmFtcy1cXHUwMDNlbnVtX2lmcyA9IGNmZy1cXHUwMDNlbnVtX2lmcztcXG4rXFx0Y21kX3BhcmFtcy1cXHUwMDNlcGhhc2UgPSBjZmctXFx1MDAzZXBoYXNlO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNmZy1cXHUwMDNlbnVtX2lmczsgaSsrKVxcbitcXHRcXHRjbWRfcGFyYW1zLVxcdTAwM2VpZl9pZFtpXSA9IGNmZy1cXHUwMDNlaWZfaWRbaV07XFxuK1xcbitcXHRyZXR1cm4gbWNfc2VuZF9jb21tYW5kKG1jX2lvLCBcXHUwMDI2Y21kKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGRwc3dfaWZfc2V0X2xhZ19zdGF0ZSgpIC0gQ2hhbmdlIHBlciBwb3J0IExBRyBzdGF0ZVxcbisgKiBAbWNfaW86ICAgICAgUG9pbnRlciB0byBNQyBwb3J0YWwncyBJL08gb2JqZWN0XFxuKyAqIEBjbWRfZmxhZ3M6ICBDb21tYW5kIGZsYWdzOyBvbmUgb3IgbW9yZSBvZiAnTUNfQ01EX0ZMQUdfJ1xcbisgKiBAdG9rZW46ICAgICAgVG9rZW4gb2YgRFBTVyBvYmplY3RcXG4rICogQGlmX2lkOiAgICAgIElEIG9mIHRoZSBzd2l0Y2ggaW50ZXJmYWNlXFxuKyAqIEB0eF9lbmFibGVkOiBWYWx1ZSBvZiB0aGUgcGVyIHBvcnQgTEFHIHN0YXRlXFxuKyAqICAgICAtIDAgaWYgdGhlIGludGVyZmFjZSB3aWxsIG5vdCBiZSBhY3RpdmUgYXMgcGFydCBvZiB0aGUgTEFHIGdyb3VwXFxuKyAqICAgICAtIDEgaWYgdGhlIGludGVyZmFjZSB3aWxsIGJlIGFjdGl2ZSBpbiB0aGUgTEFHIGdyb3VwXFxuKyAqXFxuKyAqIFJldHVybjogICAnMCcgb24gU3VjY2VzczsgRXJyb3IgY29kZSBvdGhlcndpc2UuXFxuKyAqL1xcbitpbnQgZHBzd19pZl9zZXRfbGFnX3N0YXRlKHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLCB1MzIgY21kX2ZsYWdzLCB1MTYgdG9rZW4sXFxuK1xcdFxcdFxcdCAgdTE2IGlmX2lkLCB1OCB0eF9lbmFibGVkKVxcbit7XFxuK1xcdHN0cnVjdCBkcHN3X2NtZF9pZl9zZXRfbGFnX3N0YXRlICpjbWRfcGFyYW1zO1xcbitcXHRzdHJ1Y3QgZnNsX21jX2NvbW1hbmQgY21kID0geyAwIH07XFxuK1xcbitcXHRjbWQuaGVhZGVyID0gbWNfZW5jb2RlX2NtZF9oZWFkZXIoRFBTV19DTURJRF9JRl9TRVRfTEFHX1NUQVRFLFxcbitcXHRcXHRcXHRcXHRcXHQgIGNtZF9mbGFncywgdG9rZW4pO1xcbitcXG4rXFx0Y21kX3BhcmFtcyA9IChzdHJ1Y3QgZHBzd19jbWRfaWZfc2V0X2xhZ19zdGF0ZSAqKWNtZC5wYXJhbXM7XFxuK1xcdGNtZF9wYXJhbXMtXFx1MDAzZWlmX2lkID0gY3B1X3RvX2xlMTYoaWZfaWQpO1xcbitcXHRjbWRfcGFyYW1zLVxcdTAwM2V0eF9lbmFibGVkID0gdHhfZW5hYmxlZDtcXG4rXFxuK1xcdHJldHVybiBtY19zZW5kX2NvbW1hbmQobWNfaW8sIFxcdTAwMjZjbWQpO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBzdy5oXFxuaW5kZXggYjkwYmQzNjNmNDdhMTkuLjg5ZjAyNjdkZThlOWJkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBzdy5oXFxuQEAgLTIwLDYgKzIwLDggQEAgc3RydWN0IGZzbF9tY19pbztcXG4gXFxuICNkZWZpbmUgRFBTV19NQVhfSUZcXHRcXHQ2NFxcbiBcXG4rI2RlZmluZSBEUFNXX01BWF9MQUdfSUZTXFx0OFxcbitcXG4gaW50IGRwc3dfb3BlbihzdHJ1Y3QgZnNsX21jX2lvICptY19pbywgdTMyIGNtZF9mbGFncywgaW50IGRwc3dfaWQsIHUxNiAqdG9rZW4pO1xcbiBcXG4gaW50IGRwc3dfY2xvc2Uoc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHUzMiBjbWRfZmxhZ3MsIHUxNiB0b2tlbik7XFxuQEAgLTc4OCw0ICs3OTAsMzIgQEAgaW50IGRwc3dfaWZfYWRkX3JlZmxlY3Rpb24oc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHUzMiBjbWRfZmxhZ3MsIHUxNiB0b2tlbixcXG4gXFxuIGludCBkcHN3X2lmX3JlbW92ZV9yZWZsZWN0aW9uKHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLCB1MzIgY21kX2ZsYWdzLCB1MTYgdG9rZW4sXFxuIFxcdFxcdFxcdCAgICAgIHUxNiBpZl9pZCwgY29uc3Qgc3RydWN0IGRwc3dfcmVmbGVjdGlvbl9jZmcgKmNmZyk7XFxuK1xcbisvKiBMaW5rIEFnZ3JlZ2F0aW9uIEdyb3VwIGNvbmZpZ3VyYXRpb24gKi9cXG4rXFxuKyNkZWZpbmUgRFBTV19MQUdfU0VUX1BIQVNFX0FQUExZIDBcXG4rI2RlZmluZSBEUFNXX0xBR19TRVRfUEhBU0VfQ0hFQ0sgMVxcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBkcHN3X2xhZ19jZmcgLSBDb25maWd1cmF0aW9uIHN0cnVjdHVyZSBmb3IgYSBMQUcgZ3JvdXBcXG4rICogQGdyb3VwX2lkOiBMaW5rIGFnZ3JlZ2F0aW9uIGdyb3VwIElELiBWYWxpZCB2YWx1ZXMgYXJlIGluIHRoZVxcbisgKiBbMSwgRFBTV19NQVhfTEFHX0lGU10gcmFuZ2UuXFxuKyAqIEBudW1faWZzOiBOdW1iZXIgb2YgaW50ZXJmYWNlcyBpbiB0aGlzIExBRyBncm91cCwgdmFsaWQgcmFuZ2UgaXNcXG4rICogWzAsIERQU1dfTUFYX0xBR19JRlNdLlxcbisgKiBAaWZfaWQ6IEFycmF5IGNvbnRhaW5pbmcgdGhlIGludGVyZmFjZSBJRHMgb2YgdGhlIHBvcnRzIHBhcnQgb2YgYSBMQUcgZ3JvdXBcXG4rICogQHBoYXNlOiBVc2UgRFBTV19MQUdfU0VUX1BIQVNFX0FQUExZIGZvciBMQUcgY29uZmlndXJhdGlvbiBwcm9jZXNzaW5nIG9yXFxuKyAqIERQU1dfTEFHX1NFVF9QSEFTRV9DSEVDSyBmb3IgTEFHIGNvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbi5cXG4rICovXFxuK3N0cnVjdCBkcHN3X2xhZ19jZmcge1xcbitcXHR1OCBncm91cF9pZDtcXG4rXFx0dTggbnVtX2lmcztcXG4rXFx0dTggaWZfaWRbRFBTV19NQVhfTEFHX0lGU107XFxuK1xcdHU4IHBoYXNlO1xcbit9O1xcbitcXG4raW50IGRwc3dfbGFnX3NldChzdHJ1Y3QgZnNsX21jX2lvICptY19pbywgdTMyIGNtZF9mbGFncywgdTE2IHRva2VuLFxcbitcXHRcXHQgY29uc3Qgc3RydWN0IGRwc3dfbGFnX2NmZyAqY2ZnKTtcXG4rXFxuK2ludCBkcHN3X2lmX3NldF9sYWdfc3RhdGUoc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHUzMiBjbWRfZmxhZ3MsIHUxNiB0b2tlbixcXG4rXFx0XFx0XFx0ICB1MTYgaWZfaWQsIHU4IHR4X2VuYWJsZWQpO1xcbiAjZW5kaWYgLyogX19GU0xfRFBTV19IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjUyOjEyLjExMjQ5MzUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjE1NjM2ODE0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEZyZWVzY2FsZSBEUEFBMiBzd2l0Y2ggZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItc3dpdGNoLmMpIHRvIGFkZCBMQUcgb2ZmbG9hZCBzdXBwb3J0LiBUaGlzIGRyaXZlciBkZXBlbmRzIG9uIHRoZSBmc2wtbWMgYnVzIChGU0xfTUNfQlVTKSwgd2hpY2ggaXMgc3BlY2lmaWMgdG8gTlhQIFFvcklRIERQQUEyIGhhcmR3YXJlIChBUkNIX0xBWUVSU0NBUEUpLiBUaGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoaXMgaGFyZHdhcmUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWQ4OTc5YzdhNWZiYTNlZTRkZjJmMTVmYmJiZjEwYzc0OGQxNGU5N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVuIDI5IDExOjUyOjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXN3aXRjaC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXN3aXRjaC5jXG5pbmRleCA4NThiYTg0NGFjNTE2NC4uODMyMGIyNmMzZjcyNmUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItc3dpdGNoLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guY1xuQEAgLTI1LDYgKzI1LDkgQEBcbiBcbiAjZGVmaW5lIERFRkFVTFRfVkxBTl9JRFx0XHRcdDFcbiBcbitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGRwYWEyX3N3aXRjaF9wb3J0X3N3aXRjaGRldl9uYjtcbitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGRwYWEyX3N3aXRjaF9wb3J0X3N3aXRjaGRldl9ibG9ja2luZ19uYjtcbitcbiBzdGF0aWMgdTE2IGRwYWEyX3N3aXRjaF9wb3J0X2dldF9mZGJfaWQoc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2KVxuIHtcbiBcdHJldHVybiBwb3J0X3ByaXYtXHUwMDNlZmRiLVx1MDAzZWZkYl9pZDtcbkBAIC01MSw2ICs1NCwxNyBAQCBkcGFhMl9zd2l0Y2hfZmlsdGVyX2Jsb2NrX2dldF91bnVzZWQoc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3KVxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuK3N0YXRpYyBzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqXG4rZHBhYTJfc3dpdGNoX2xhZ19nZXRfdW51c2VkKHN0cnVjdCBldGhzd19jb3JlICpldGhzdylcbit7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGV0aHN3LVx1MDAzZXN3X2F0dHIubnVtX2lmczsgaSsrKVxuK1x0XHRpZiAoIWV0aHN3LVx1MDAzZWxhZ3NbaV0uaW5fdXNlKVxuK1x0XHRcdHJldHVybiBcdTAwMjZldGhzdy1cdTAwM2VsYWdzW2ldO1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuIHN0YXRpYyBib29sIGRwYWEyX3N3aXRjaF9mZGJfaW5fdXNlX2J5X290aGVycyhzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3csXG4gXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBkcGFhMl9zd2l0Y2hfZmRiICpmZGIsXG4gXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKmV4Y2VwdClcbkBAIC03MSw5ICs4NSw5IEBAIHN0YXRpYyBzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZkYiAqXG4gZHBhYTJfc3dpdGNoX2ZkYl9mb3Jfam9pbihzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYsXG4gXHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqdXBwZXJfZGV2KVxuIHtcbi1cdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKm90aGVyX3BvcnRfcHJpdjtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICpvdGhlcl9kZXY7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkICppdGVyO1xuK1x0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqb3RoZXJfcG9ydF9wcml2ID0gTlVMTDtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpvdGhlcl9kZXYsICpvdGhlcl9kZXYyO1xuK1x0c3RydWN0IGxpc3RfaGVhZCAqaXRlciwgKml0ZXIyO1xuIFxuIFx0LyogVGhlIGJlbG93IGNhbGwgdG8gbmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX2RldigpIGRlbWFuZHMgdGhlIFJUTkwgbG9ja1xuIFx0ICogYmVpbmcgaGVsZC4gQXNzZXJ0IG9uIGl0IHNvIHRoYXQgaXQncyBlYXNpZXIgdG8gY2F0Y2ggbmV3IGNvZGVcbkBAIC04MiwxNyArOTYsMzIgQEAgZHBhYTJfc3dpdGNoX2ZkYl9mb3Jfam9pbihzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYsXG4gXHRBU1NFUlRfUlROTCgpO1xuIFxuIFx0LyogSWYgcGFydCBvZiBhIGJyaWRnZSwgdXNlIHRoZSBGREIgb2YgdGhlIGZpcnN0IGRwYWEyIHN3aXRjaCBpbnRlcmZhY2Vcbi1cdCAqIHRvIGJlIHByZXNlbnQgaW4gdGhhdCBicmlkZ2VcbitcdCAqIHRvIGJlIHByZXNlbnQgaW4gdGhhdCBicmlkZ2UuIFRoZSBzZWFyY2ggZGVzY2VuZHMgb25lIGxldmVsIHRocm91Z2hcbitcdCAqIGEgYnJpZGdlZCBib25kJ3MgbG93ZXJzIGFzIHdlbGwuXG4gXHQgKi9cbiBcdG5ldGRldl9mb3JfZWFjaF9sb3dlcl9kZXYodXBwZXJfZGV2LCBvdGhlcl9kZXYsIGl0ZXIpIHtcbi1cdFx0aWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2sob3RoZXJfZGV2KSlcbi1cdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKG5ldGlmX2lzX2xhZ19tYXN0ZXIob3RoZXJfZGV2KSkge1xuK1x0XHRcdG5ldGRldl9mb3JfZWFjaF9sb3dlcl9kZXYob3RoZXJfZGV2LCBvdGhlcl9kZXYyLCBpdGVyMikge1xuK1x0XHRcdFx0aWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2sob3RoZXJfZGV2MikpXG4rXHRcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRpZiAob3RoZXJfZGV2ID09IHBvcnRfcHJpdi1cdTAwM2VuZXRkZXYpXG4tXHRcdFx0Y29udGludWU7XG4rXHRcdFx0XHRpZiAob3RoZXJfZGV2MiA9PSBwb3J0X3ByaXYtXHUwMDNlbmV0ZGV2KVxuK1x0XHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0b3RoZXJfcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYob3RoZXJfZGV2KTtcbi1cdFx0cmV0dXJuIG90aGVyX3BvcnRfcHJpdi1cdTAwM2VmZGI7XG4rXHRcdFx0XHRvdGhlcl9wb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihvdGhlcl9kZXYyKTtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcdFx0fSBlbHNlIHtcbitcdFx0XHRpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhvdGhlcl9kZXYpKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXG4rXHRcdFx0aWYgKG90aGVyX2RldiA9PSBwb3J0X3ByaXYtXHUwMDNlbmV0ZGV2KVxuK1x0XHRcdFx0Y29udGludWU7XG4rXG4rXHRcdFx0b3RoZXJfcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYob3RoZXJfZGV2KTtcbitcdFx0fVxuK1x0XHRpZiAob3RoZXJfcG9ydF9wcml2KVxuK1x0XHRcdHJldHVybiBvdGhlcl9wb3J0X3ByaXYtXHUwMDNlZmRiO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHBvcnRfcHJpdi1cdTAwM2VmZGI7XG5AQCAtNTM3LDYgKzU2NiwxMDMgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsX21jKHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdixcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuK3N0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2FkZChzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYsXG4rXHRcdFx0XHQgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXG4re1xuK1x0aW50IGVycjtcbitcbitcdGlmIChpc191bmljYXN0X2V0aGVyX2FkZHIoYWRkcikpXG4rXHRcdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9hZGRfdWMocG9ydF9wcml2LCBhZGRyKTtcbitcdGVsc2VcbitcdFx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2FkZF9tYyhwb3J0X3ByaXYsIGFkZHIpO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsKHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdixcbitcdFx0XHRcdCAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcilcbit7XG4rXHRpZiAoaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGFkZHIpKVxuK1x0XHRyZXR1cm4gZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2RlbF91Yyhwb3J0X3ByaXYsIGFkZHIpO1xuK1x0ZWxzZVxuK1x0XHRyZXR1cm4gZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2RlbF9tYyhwb3J0X3ByaXYsIGFkZHIpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IGRwYWEyX21hY19hZGRyICpcbitkcGFhMl9zd2l0Y2hfbWFjX2FkZHJfZmluZChzdHJ1Y3QgbGlzdF9oZWFkICphZGRyX2xpc3QsXG4rXHRcdFx0ICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgdTE2IHZpZClcbit7XG4rXHRzdHJ1Y3QgZHBhYTJfbWFjX2FkZHIgKmE7XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGEsIGFkZHJfbGlzdCwgbGlzdClcbitcdFx0aWYgKGV0aGVyX2FkZHJfZXF1YWwoYS1cdTAwM2VhZGRyLCBhZGRyKSBcdTAwMjZcdTAwMjYgYS1cdTAwM2V2aWQgPT0gdmlkKVxuK1x0XHRcdHJldHVybiBhO1xuK1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX2xhZ19mZGJfYWRkKHN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWcsXG4rXHRcdFx0XHQgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgdTE2IHZpZClcbit7XG4rXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBsYWctXHUwMDNlcHJpbWFyeTtcbitcdHN0cnVjdCBkcGFhMl9tYWNfYWRkciAqYTtcbitcdGludCBlcnIgPSAwO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZsYWctXHUwMDNlZmRiX2xvY2spO1xuK1xuK1x0YSA9IGRwYWEyX3N3aXRjaF9tYWNfYWRkcl9maW5kKFx1MDAyNmxhZy1cdTAwM2VmZGJzLCBhZGRyLCB2aWQpO1xuK1x0aWYgKGEpIHtcbitcdFx0cmVmY291bnRfaW5jKFx1MDAyNmEtXHUwMDNlcmVmY291bnQpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGEgPSBremFsbG9jKHNpemVvZigqYSksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFhKSB7XG4rXHRcdGVyciA9IC1FTk9NRU07XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2FkZChwb3J0X3ByaXYsIGFkZHIpO1xuK1x0aWYgKGVycikge1xuK1x0XHRrZnJlZShhKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRldGhlcl9hZGRyX2NvcHkoYS1cdTAwM2VhZGRyLCBhZGRyKTtcbitcdGEtXHUwMDNldmlkID0gdmlkO1xuK1x0cmVmY291bnRfc2V0KFx1MDAyNmEtXHUwMDNlcmVmY291bnQsIDEpO1xuK1x0bGlzdF9hZGRfdGFpbChcdTAwMjZhLVx1MDAzZWxpc3QsIFx1MDAyNmxhZy1cdTAwM2VmZGJzKTtcbitcbitvdXQ6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2bGFnLVx1MDAzZWZkYl9sb2NrKTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9sYWdfZmRiX2RlbChzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqbGFnLFxuK1x0XHRcdFx0ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCB1MTYgdmlkKVxuK3tcbitcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IGxhZy1cdTAwM2VwcmltYXJ5O1xuK1x0c3RydWN0IGRwYWEyX21hY19hZGRyICphO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZsYWctXHUwMDNlZmRiX2xvY2spO1xuK1xuK1x0YSA9IGRwYWEyX3N3aXRjaF9tYWNfYWRkcl9maW5kKFx1MDAyNmxhZy1cdTAwM2VmZGJzLCBhZGRyLCB2aWQpO1xuK1x0aWYgKCFhKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlmICghcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmEtXHUwMDNlcmVmY291bnQpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGxpc3RfZGVsKFx1MDAyNmEtXHUwMDNlbGlzdCk7XG4rXHRrZnJlZShhKTtcbitcbitcdGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9kZWwocG9ydF9wcml2LCBhZGRyKTtcbitcbitvdXQ6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2bGFnLVx1MDAzZWZkYl9sb2NrKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgZHBhYTJfc3dpdGNoX3BvcnRfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpXG4ge1xuQEAgLTE0ODUsNiArMTYxMSwzMyBAQCBib29sIGRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0cmV0dXJuIG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzID09IFx1MDAyNmRwYWEyX3N3aXRjaF9wb3J0X29wcztcbiB9XG4gXG4rc3RhdGljIGJvb2wgZHBhYTJfc3dpdGNoX2ZvcmVpZ25fZGV2X2NoZWNrKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpmb3JlaWduX2Rldilcbit7XG4rXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0c3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3ID0gcG9ydF9wcml2LVx1MDAzZWV0aHN3X2RhdGE7XG4rXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpvdGhlcl9wb3J0O1xuK1x0aW50IGk7XG4rXG4rXHRpZiAobmV0aWZfaXNfYnJpZGdlX21hc3Rlcihmb3JlaWduX2RldikpXG4rXHRcdGlmIChwb3J0X3ByaXYtXHUwMDNlZmRiLVx1MDAzZWJyaWRnZV9kZXYgPT0gZm9yZWlnbl9kZXYpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKG5ldGlmX2lzX2JyaWRnZV9wb3J0KGZvcmVpZ25fZGV2KSkge1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBldGhzdy1cdTAwM2Vzd19hdHRyLm51bV9pZnM7IGkrKykge1xuK1x0XHRcdG90aGVyX3BvcnQgPSBldGhzdy1cdTAwM2Vwb3J0c1tpXTtcbitcbitcdFx0XHRpZiAoIW90aGVyX3BvcnQpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRpZiAoZHBhYTJfc3dpdGNoX3BvcnRfb2ZmbG9hZHNfYnJpZGdlX3BvcnQob3RoZXJfcG9ydCxcbitcdFx0XHRcdFx0XHRcdFx0ICAgZm9yZWlnbl9kZXYpKVxuK1x0XHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9jb25uZWN0X21hYyhzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYpXG4ge1xuIFx0c3RydWN0IGZzbF9tY19kZXZpY2UgKmRwc3dfcG9ydF9kZXYsICpkcG1hY19kZXY7XG5AQCAtMTg2MCw1MSArMjAxMywzMiBAQCBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfdmxhbnNfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdCAgdmxhbi1cdTAwM2VjaGFuZ2VkKTtcbiB9XG4gXG4tc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9sb29rdXBfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgaXNfdWMsXG4tXHRcdFx0XHRcdCAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKVxuLXtcbi1cdHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpsaXN0ID0gKGlzX3VjKSA/IFx1MDAyNm5ldGRldi1cdTAwM2V1YyA6IFx1MDAyNm5ldGRldi1cdTAwM2VtYztcbi1cdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XG4tXG4tXHRuZXRpZl9hZGRyX2xvY2tfYmgobmV0ZGV2KTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkoaGEsIFx1MDAyNmxpc3QtXHUwMDNlbGlzdCwgbGlzdCkge1xuLVx0XHRpZiAoZXRoZXJfYWRkcl9lcXVhbChoYS1cdTAwM2VhZGRyLCBhZGRyKSkge1xuLVx0XHRcdG5ldGlmX2FkZHJfdW5sb2NrX2JoKG5ldGRldik7XG4tXHRcdFx0cmV0dXJuIDE7XG4tXHRcdH1cbi1cdH1cbi1cdG5ldGlmX2FkZHJfdW5sb2NrX2JoKG5ldGRldik7XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4gc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9tZGJfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfbWRiICptZGIpXG4ge1xuIFx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbi1cdGludCBlcnI7XG4rXHRzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqbGFnO1xuIFxuLVx0LyogQ2hlY2sgaWYgYWRkcmVzcyBpcyBhbHJlYWR5IHNldCBvbiB0aGlzIHBvcnQgKi9cbi1cdGlmIChkcGFhMl9zd2l0Y2hfcG9ydF9sb29rdXBfYWRkcmVzcyhuZXRkZXYsIDAsIG1kYi1cdTAwM2VhZGRyKSlcbi1cdFx0cmV0dXJuIC1FRVhJU1Q7XG4tXG4tXHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfYWRkX21jKHBvcnRfcHJpdiwgbWRiLVx1MDAzZWFkZHIpO1xuLVx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbi1cbi1cdGVyciA9IGRldl9tY19hZGQobmV0ZGV2LCBtZGItXHUwMDNlYWRkcik7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcImRldl9tY19hZGQgZXJyICVkXFxuXCIsIGVycik7XG4tXHRcdGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9kZWxfbWMocG9ydF9wcml2LCBtZGItXHUwMDNlYWRkcik7XG4tXHR9XG4tXG4tXHRyZXR1cm4gZXJyO1xuK1x0bGFnID0gcnRubF9kZXJlZmVyZW5jZShwb3J0X3ByaXYtXHUwMDNlbGFnKTtcbitcdGlmIChsYWcpXG4rXHRcdHJldHVybiBkcGFhMl9zd2l0Y2hfbGFnX2ZkYl9hZGQobGFnLCBtZGItXHUwMDNlYWRkciwgbWRiLVx1MDAzZXZpZCk7XG4rXHRlbHNlXG4rXHRcdHJldHVybiBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfYWRkKHBvcnRfcHJpdiwgbWRiLVx1MDAzZWFkZHIpO1xuIH1cbiBcbi1zdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X29ial9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi1cdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmogKm9iailcbitzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X29ial9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgY29uc3Qgdm9pZCAqY3R4LFxuK1x0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X29iaiAqb2JqLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuK1x0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcdGludCBlcnI7XG4gXG4rXHRpZiAoY3R4IFx1MDAyNlx1MDAyNiBjdHggIT0gcG9ydF9wcml2KVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfb2ZmbG9hZHNfYnJpZGdlX3BvcnQocG9ydF9wcml2LCBvYmotXHUwMDNlb3JpZ19kZXYpKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4gXHRzd2l0Y2ggKG9iai1cdTAwM2VpZCkge1xuIFx0Y2FzZSBTV0lUQ0hERVZfT0JKX0lEX1BPUlRfVkxBTjpcbiBcdFx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfdmxhbnNfYWRkKG5ldGRldixcbkBAIC0yMDAwLDI5ICsyMTM0LDI5IEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfbWRiX2RlbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X29ial9wb3J0X21kYiAqbWRiKVxuIHtcbiBcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4tXHRpbnQgZXJyO1xuLVxuLVx0aWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9sb29rdXBfYWRkcmVzcyhuZXRkZXYsIDAsIG1kYi1cdTAwM2VhZGRyKSlcbi1cdFx0cmV0dXJuIC1FTk9FTlQ7XG4tXG4tXHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsX21jKHBvcnRfcHJpdiwgbWRiLVx1MDAzZWFkZHIpO1xuLVx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbitcdHN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWc7XG4gXG4tXHRlcnIgPSBkZXZfbWNfZGVsKG5ldGRldiwgbWRiLVx1MDAzZWFkZHIpO1xuLVx0aWYgKGVycikge1xuLVx0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJkZXZfbWNfZGVsIGVyciAlZFxcblwiLCBlcnIpO1xuLVx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuK1x0bGFnID0gcnRubF9kZXJlZmVyZW5jZShwb3J0X3ByaXYtXHUwMDNlbGFnKTtcbitcdGlmIChsYWcpXG4rXHRcdGRwYWEyX3N3aXRjaF9sYWdfZmRiX2RlbChsYWcsIG1kYi1cdTAwM2VhZGRyLCBtZGItXHUwMDNldmlkKTtcbitcdGVsc2VcbitcdFx0ZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2RlbChwb3J0X3ByaXYsIG1kYi1cdTAwM2VhZGRyKTtcbiBcbi1cdHJldHVybiBlcnI7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9vYmpfZGVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9vYmpfZGVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGNvbnN0IHZvaWQgKmN0eCxcbiBcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmogKm9iailcbiB7XG4rXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0aW50IGVycjtcbiBcbitcdGlmIChjdHggXHUwMDI2XHUwMDI2IGN0eCAhPSBwb3J0X3ByaXYpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9vZmZsb2Fkc19icmlkZ2VfcG9ydChwb3J0X3ByaXYsIG9iai1cdTAwM2VvcmlnX2RldikpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbiBcdHN3aXRjaCAob2JqLVx1MDAzZWlkKSB7XG4gXHRjYXNlIFNXSVRDSERFVl9PQkpfSURfUE9SVF9WTEFOOlxuIFx0XHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF92bGFuc19kZWwobmV0ZGV2LCBTV0lUQ0hERVZfT0JKX1BPUlRfVkxBTihvYmopKTtcbkBAIC0yMDQ4LDYgKzIxODIsMjEgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9hdHRyX3NldF9ldmVudChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0cmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8oZXJyKTtcbiB9XG4gXG4rc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpcbitkcGFhMl9zd2l0Y2hfcG9ydF90b19icmlkZ2VfcG9ydChzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYpXG4re1xuK1x0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZztcbitcbitcdGlmICghcG9ydF9wcml2LVx1MDAzZWZkYi1cdTAwM2VicmlkZ2VfZGV2KVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdGxhZyA9IHJ0bmxfZGVyZWZlcmVuY2UocG9ydF9wcml2LVx1MDAzZWxhZyk7XG4rXHRpZiAobGFnKVxuK1x0XHRyZXR1cm4gbGFnLVx1MDAzZWJvbmRfZGV2O1xuK1xuK1x0cmV0dXJuIHBvcnRfcHJpdi1cdTAwM2VuZXRkZXY7XG4rfVxuK1xuIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfYnJpZGdlX2pvaW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlICp1cHBlcl9kZXYsXG4gXHRcdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG5AQCAtMjA1NSw2ICsyMjA0LDcgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9icmlkZ2Vfam9pbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcdHN0cnVjdCBkcGFhMl9zd2l0Y2hfZmRiICpvbGRfZmRiID0gcG9ydF9wcml2LVx1MDAzZWZkYjtcbiBcdHN0cnVjdCBldGhzd19jb3JlICpldGhzdyA9IHBvcnRfcHJpdi1cdTAwM2VldGhzd19kYXRhO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmJycG9ydF9kZXY7XG4gXHRib29sIGxlYXJuX2VuYTtcbiBcdGludCBlcnI7XG4gXG5AQCAtMjA2Niw3ICsyMjE2LDggQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9icmlkZ2Vfam9pbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0ZHBhYTJfc3dpdGNoX3BvcnRfc2V0X2ZkYihwb3J0X3ByaXYsIHVwcGVyX2RldiwgdHJ1ZSk7XG4gXG4gXHQvKiBJbmhlcml0IHRoZSBpbml0aWFsIGJyaWRnZSBwb3J0IGxlYXJuaW5nIHN0YXRlICovXG4tXHRsZWFybl9lbmEgPSBicl9wb3J0X2ZsYWdfaXNfc2V0KG5ldGRldiwgQlJfTEVBUk5JTkcpO1xuK1x0YnJwb3J0X2RldiA9IGRwYWEyX3N3aXRjaF9wb3J0X3RvX2JyaWRnZV9wb3J0KHBvcnRfcHJpdik7XG4rXHRsZWFybl9lbmEgPSBicl9wb3J0X2ZsYWdfaXNfc2V0KGJycG9ydF9kZXYsIEJSX0xFQVJOSU5HKTtcbiBcdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X3NldF9sZWFybmluZyhwb3J0X3ByaXYsIGxlYXJuX2VuYSk7XG4gXHRwb3J0X3ByaXYtXHUwMDNlbGVhcm5fZW5hID0gbGVhcm5fZW5hO1xuIFxuQEAgLTIwODAsOCArMjIzMSwxMSBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2JyaWRnZV9qb2luKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9lZ3Jlc3NfZmxvb2Q7XG4gXG4tXHRlcnIgPSBzd2l0Y2hkZXZfYnJpZGdlX3BvcnRfb2ZmbG9hZChuZXRkZXYsIG5ldGRldiwgTlVMTCxcbi1cdFx0XHRcdFx0ICAgIE5VTEwsIE5VTEwsIGZhbHNlLCBleHRhY2spO1xuK1x0YnJwb3J0X2RldiA9IGRwYWEyX3N3aXRjaF9wb3J0X3RvX2JyaWRnZV9wb3J0KHBvcnRfcHJpdik7XG4rXHRlcnIgPSBzd2l0Y2hkZXZfYnJpZGdlX3BvcnRfb2ZmbG9hZChicnBvcnRfZGV2LCBuZXRkZXYsIHBvcnRfcHJpdixcbitcdFx0XHRcdFx0ICAgIFx1MDAyNmRwYWEyX3N3aXRjaF9wb3J0X3N3aXRjaGRldl9uYixcbitcdFx0XHRcdFx0ICAgIFx1MDAyNmRwYWEyX3N3aXRjaF9wb3J0X3N3aXRjaGRldl9ibG9ja2luZ19uYixcbitcdFx0XHRcdFx0ICAgIGZhbHNlLCBleHRhY2spO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfc3dpdGNoZGV2X29mZmxvYWQ7XG4gXG5AQCAtMjExNSw3ICsyMjY5LDIyIEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfcmVzdG9yZV9yeHZsYW4oc3RydWN0IG5ldF9kZXZpY2UgKnZkZXYsIGludCB2aWQsIHZvXG4gXG4gc3RhdGljIHZvaWQgZHBhYTJfc3dpdGNoX3BvcnRfcHJlX2JyaWRnZV9sZWF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbi1cdHN3aXRjaGRldl9icmlkZ2VfcG9ydF91bm9mZmxvYWQobmV0ZGV2LCBOVUxMLCBOVUxMLCBOVUxMKTtcbitcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3cgPSBwb3J0X3ByaXYtXHUwMDNlZXRoc3dfZGF0YTtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpicnBvcnRfZGV2O1xuK1xuK1x0YnJwb3J0X2RldiA9IGRwYWEyX3N3aXRjaF9wb3J0X3RvX2JyaWRnZV9wb3J0KHBvcnRfcHJpdik7XG4rXHRpZiAoIWJycG9ydF9kZXYpXG4rXHRcdHJldHVybjtcbitcbitcdHN3aXRjaGRldl9icmlkZ2VfcG9ydF91bm9mZmxvYWQoYnJwb3J0X2RldiwgcG9ydF9wcml2LFxuK1x0XHRcdFx0XHRcdTAwMjZkcGFhMl9zd2l0Y2hfcG9ydF9zd2l0Y2hkZXZfbmIsXG4rXHRcdFx0XHRcdFx1MDAyNmRwYWEyX3N3aXRjaF9wb3J0X3N3aXRjaGRldl9ibG9ja2luZ19uYik7XG4rXG4rXHQvKiBNYWtlIHN1cmUgdGhhdCBhbnkgRkRCIGFkZC9kZWwgb3BlcmF0aW9ucyBhcmUgY29tcGxldGVkIGJlZm9yZSB0aGVcbitcdCAqIGJyaWRnZSBsYXlvdXQgY2hhbmdlc1xuK1x0ICovXG4rXHRmbHVzaF93b3JrcXVldWUoZXRoc3ctXHUwMDNld29ya3F1ZXVlKTtcbiB9XG4gXG4gc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9icmlkZ2VfbGVhdmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbkBAIC0yMTc3LDMwICsyMzQ2LDUzIEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfYnJpZGdlX2xlYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRcdFx0XHRcdCAgZmFsc2UpO1xuIH1cbiBcbitzdGF0aWMgaW50XG4rZHBhYTJfc3dpdGNoX2hhdmVfdmxhbl91cHBlcihzdHJ1Y3QgbmV0X2RldmljZSAqdXBwZXJfZGV2LFxuK1x0XHRcdCAgICAgX19hbHdheXNfdW51c2VkIHN0cnVjdCBuZXRkZXZfbmVzdGVkX3ByaXYgKnByaXYpXG4re1xuK1x0cmV0dXJuIGlzX3ZsYW5fZGV2KHVwcGVyX2Rldik7XG4rfVxuK1xuIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3ByZXZlbnRfYnJpZGdpbmdfd2l0aF84MDIxcV91cHBlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICp1cHBlcl9kZXY7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkICppdGVyO1xuK1x0c3RydWN0IG5ldGRldl9uZXN0ZWRfcHJpdiBwcml2ID0ge307XG4gXG4gXHQvKiBSQ1UgcmVhZCBsb2NrIG5vdCBuZWNlc3NhcnkgYmVjYXVzZSB3ZSBoYXZlIHdyaXRlLXNpZGUgcHJvdGVjdGlvblxuLVx0ICogKHJ0bmxfbXV0ZXgpLCBob3dldmVyIGEgbm9uLXJjdSBpdGVyYXRvciBkb2VzIG5vdCBleGlzdC5cbitcdCAqIChydG5sX211dGV4KSwgaG93ZXZlciBhIG5vbi1yY3UgaXRlcmF0b3IgZG9lcyBub3QgZXhpc3QuIFdhbGsgdGhlXG4rXHQgKiBlbnRpcmUgdXBwZXIgY2hhaW4gc28gdGhhdCBhIFZMQU4gZGV2aWNlIHN0YWNrZWQgb24gYSBpbnRlcm1lZGlhdGVcbitcdCAqIGJvbmQgaXMgY2F1Z2h0IHRvby5cbiBcdCAqL1xuLVx0bmV0ZGV2X2Zvcl9lYWNoX3VwcGVyX2Rldl9yY3UobmV0ZGV2LCB1cHBlcl9kZXYsIGl0ZXIpXG4tXHRcdGlmIChpc192bGFuX2Rldih1cHBlcl9kZXYpKVxuLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdGlmIChuZXRkZXZfd2Fsa19hbGxfdXBwZXJfZGV2X3JjdShuZXRkZXYsIGRwYWEyX3N3aXRjaF9oYXZlX3ZsYW5fdXBwZXIsXG4rXHRcdFx0XHRcdCAgXHUwMDI2cHJpdikpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9jaGVja19kcHN3X2luc3RhbmNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0ZGV2X25lc3RlZF9wcml2ICpwcml2KVxuK3tcbitcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IChzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICopcHJpdi1cdTAwM2VkYXRhO1xuK1x0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqb3RoZXJfcHJpdiA9IG5ldGRldl9wcml2KGRldik7XG4rXG4rXHRpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhkZXYpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChvdGhlcl9wcml2LVx1MDAzZWV0aHN3X2RhdGEgPT0gcG9ydF9wcml2LVx1MDAzZWV0aHN3X2RhdGEpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIDE7XG4rfVxuK1xuIHN0YXRpYyBpbnRcbiBkcGFhMl9zd2l0Y2hfcHJlY2hhbmdldXBwZXJfc2FuaXR5X2NoZWNrcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlICp1cHBlcl9kZXYsXG4gXHRcdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4tXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpvdGhlcl9wb3J0X3ByaXY7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqb3RoZXJfZGV2O1xuLVx0c3RydWN0IGxpc3RfaGVhZCAqaXRlcjtcbitcdHN0cnVjdCBuZXRkZXZfbmVzdGVkX3ByaXYgZGF0YSA9IHtcbitcdFx0LmRhdGEgPSAodm9pZCAqKXBvcnRfcHJpdixcbitcdH07XG4gXHRpbnQgZXJyO1xuIFxuIFx0aWYgKCFicl92bGFuX2VuYWJsZWQodXBwZXJfZGV2KSkge1xuQEAgLTIyMTUsNiArMjQwNyw3MCBAQCBkcGFhMl9zd2l0Y2hfcHJlY2hhbmdldXBwZXJfc2FuaXR5X2NoZWNrcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuK1x0ZXJyID0gbmV0ZGV2X3dhbGtfYWxsX2xvd2VyX2Rldih1cHBlcl9kZXYsXG4rXHRcdFx0XHRcdGRwYWEyX3N3aXRjaF9jaGVja19kcHN3X2luc3RhbmNlLFxuK1x0XHRcdFx0XHRcdTAwMjZkYXRhKTtcbitcdGlmIChlcnIpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdCAgIFwiSW50ZXJmYWNlIGZyb20gYSBkaWZmZXJlbnQgRFBTVyBpcyBpbiB0aGUgYnJpZGdlIGFscmVhZHlcIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3ByZV9sYWdfam9pbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqdXBwZXJfZGV2LFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0ZGV2X2xhZ191cHBlcl9pbmZvICppbmZvLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHN0cnVjdCBldGhzd19jb3JlICpldGhzdyA9IHBvcnRfcHJpdi1cdTAwM2VldGhzd19kYXRhO1xuK1x0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqb3RoZXJfcG9ydF9wcml2O1xuK1x0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZyA9IE5VTEw7XG4rXHRzdHJ1Y3QgZHBzd19sYWdfY2ZnIGNmZyA9IHswfTtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpvdGhlcl9kZXY7XG4rXHRpbnQgaSwgbnVtX2lmcyA9IDAsIGVycjtcbitcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7XG4rXG4rXHRpZiAoIShldGhzdy1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgRVRIU1dfRkVBVFVSRV9MQUdfT0ZGTE9BRCkpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdCAgIFwiTEFHIG9mZmxvYWQgaXMgc3VwcG9ydGVkIG9ubHkgZm9yIERQU1cgXHUwMDNlPSB2OC4xM1wiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKGluZm8tXHUwMDNldHhfdHlwZSAhPSBORVRERVZfTEFHX1RYX1RZUEVfSEFTSCkge1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJDYW4gb25seSBvZmZsb2FkIExBRyB1c2luZyBoYXNoIFRYIHR5cGVcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmIChpbmZvLVx1MDAzZWhhc2hfdHlwZSAhPSBORVRERVZfTEFHX0hBU0hfTDIzKSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwiQ2FuIG9ubHkgb2ZmbG9hZCBMMitMMyBUeCBoYXNoXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X2hhc19tYWMocG9ydF9wcml2KSkge1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJPbmx5IHN3aXRjaCBpbnRlcmZhY2VzIGNvbm5lY3RlZCB0byBNQUNzIGNhbiBiZSB1bmRlciBhIExBR1wiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRpZiAodmxhbl91c2VzX2Rldih1cHBlcl9kZXYpKSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICBcIkNhbm5vdCBqb2luIGEgTEFHIHVwcGVyIHRoYXQgaGFzIGEgVkxBTlwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZXRoc3ctXHUwMDNlc3dfYXR0ci5udW1faWZzOyBpKyspIHtcbitcdFx0aWYgKCFldGhzdy1cdTAwM2VsYWdzW2ldLmluX3VzZSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKGV0aHN3LVx1MDAzZWxhZ3NbaV0uYm9uZF9kZXYgIT0gdXBwZXJfZGV2KVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRsYWcgPSBcdTAwMjZldGhzdy1cdTAwM2VsYWdzW2ldO1xuK1x0XHRicmVhaztcbitcdH1cbitcbiBcdG5ldGRldl9mb3JfZWFjaF9sb3dlcl9kZXYodXBwZXJfZGV2LCBvdGhlcl9kZXYsIGl0ZXIpIHtcbiBcdFx0aWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2sob3RoZXJfZGV2KSlcbiBcdFx0XHRjb250aW51ZTtcbkBAIC0yMjIyLDkgKzI0NzgsMjQ4IEBAIGRwYWEyX3N3aXRjaF9wcmVjaGFuZ2V1cHBlcl9zYW5pdHlfY2hlY2tzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdG90aGVyX3BvcnRfcHJpdiA9IG5ldGRldl9wcml2KG90aGVyX2Rldik7XG4gXHRcdGlmIChvdGhlcl9wb3J0X3ByaXYtXHUwMDNlZXRoc3dfZGF0YSAhPSBwb3J0X3ByaXYtXHUwMDNlZXRoc3dfZGF0YSkge1xuIFx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4tXHRcdFx0XHRcdCAgIFwiSW50ZXJmYWNlIGZyb20gYSBkaWZmZXJlbnQgRFBTVyBpcyBpbiB0aGUgYnJpZGdlIGFscmVhZHlcIik7XG4rXHRcdFx0XHRcdCAgIFwiSW50ZXJmYWNlIGZyb20gYSBkaWZmZXJlbnQgRFBTVyBpcyBpbiB0aGUgYm9uZCBhbHJlYWR5XCIpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4rXG4rXHRcdGNmZy5pZl9pZFtudW1faWZzKytdID0gb3RoZXJfcG9ydF9wcml2LVx1MDAzZWlkeDtcbitcbitcdFx0aWYgKG51bV9pZnMgXHUwMDNlPSBEUFNXX01BWF9MQUdfSUZTKSB7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdFx0ICAgXCJDYW5ub3QgYWRkIG1vcmUgdGhhbiA4IERQQUEyIHN3aXRjaCBwb3J0cyB1bmRlciB0aGUgc2FtZSBib25kXCIpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRpZiAobGFnKSB7XG4rXHRcdGNmZy5ncm91cF9pZCA9IGxhZy1cdTAwM2VpZDtcbitcdFx0Y2ZnLmlmX2lkW251bV9pZnMrK10gPSBwb3J0X3ByaXYtXHUwMDNlaWR4O1xuK1x0XHRjZmcubnVtX2lmcyA9IG51bV9pZnM7XG4rXHRcdGNmZy5waGFzZSA9IERQU1dfTEFHX1NFVF9QSEFTRV9DSEVDSztcbitcbitcdFx0ZXJyID0gZHBzd19sYWdfc2V0KGV0aHN3LVx1MDAzZW1jX2lvLCAwLCBldGhzdy1cdTAwM2VkcHN3X2hhbmRsZSwgXHUwMDI2Y2ZnKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHRcdCAgIFwiQ2Fubm90IG9mZmxvYWQgTEFHIGNvbmZpZ3VyYXRpb25cIik7XG4rXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgZHBhYTJfc3dpdGNoX3BvcnRfc2V0X2xhZ19ncm91cChzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYsXG4rXHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXG4re1xuK1x0c3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3ID0gcG9ydF9wcml2LVx1MDAzZWV0aHN3X2RhdGE7XG4rXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpvdGhlcl9wb3J0X3ByaXYgPSBOVUxMO1xuK1x0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZyA9IE5VTEw7XG4rXHRzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqb3RoZXJfbGFnO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm90aGVyX2RldjtcbitcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7XG4rXG4rXHRuZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KGJvbmRfZGV2LCBvdGhlcl9kZXYsIGl0ZXIpIHtcbitcdFx0aWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2sob3RoZXJfZGV2KSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0b3RoZXJfcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYob3RoZXJfZGV2KTtcbitcdFx0b3RoZXJfbGFnID0gcnRubF9kZXJlZmVyZW5jZShvdGhlcl9wb3J0X3ByaXYtXHUwMDNlbGFnKTtcbitcdFx0aWYgKCFvdGhlcl9sYWcpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGlmIChvdGhlcl9sYWctXHUwMDNlYm9uZF9kZXYgPT0gYm9uZF9kZXYpIHtcbitcdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIocG9ydF9wcml2LVx1MDAzZWxhZywgb3RoZXJfbGFnKTtcbitcdFx0XHRyZXR1cm47XG4rXHRcdH1cbitcdH1cbitcbitcdC8qIFRoaXMgaXMgdGhlIGZpcnN0IGludGVyZmFjZSB0byBiZSBhZGRlZCB1bmRlciBhIGJvbmQgZGV2aWNlLiBGaW5kIGFuXG4rXHQgKiB1bnVzZWQgTEFHIGdyb3VwLiBObyBuZWVkIHRvIGNoZWNrIGZvciBOVUxMIHNpbmNlIHRoZXJlIGFyZSB0aGUgc2FtZVxuK1x0ICogYW1vdW50IG9mIERQU1cgcG9ydHMgYXMgTEFHIGdyb3VwcywgbWVhbmluZyB0aGF0IGVhY2ggcG9ydCBjYW4gaGF2ZVxuK1x0ICogaXRzIG93biBMQUcgZ3JvdXAuXG4rXHQgKi9cbitcdGxhZyA9IGRwYWEyX3N3aXRjaF9sYWdfZ2V0X3VudXNlZChldGhzdyk7XG4rXHRsYWctXHUwMDNlaW5fdXNlID0gdHJ1ZTtcbitcdGxhZy1cdTAwM2Vib25kX2RldiA9IGJvbmRfZGV2O1xuK1x0bGFnLVx1MDAzZXByaW1hcnkgPSBwb3J0X3ByaXY7XG4rXHRyY3VfYXNzaWduX3BvaW50ZXIocG9ydF9wcml2LVx1MDAzZWxhZywgbGFnKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgZHBhYTJfc3dpdGNoX3BvcnRfaW5fbGFnKHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdixcbitcdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxuK3tcbitcdHN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWc7XG4rXG4rXHRpZiAoIXBvcnRfcHJpdilcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0bGFnID0gcnRubF9kZXJlZmVyZW5jZShwb3J0X3ByaXYtXHUwMDNlbGFnKTtcbitcdHJldHVybiBsYWcgXHUwMDI2XHUwMDI2IGxhZy1cdTAwM2Vib25kX2RldiA9PSBib25kX2Rldjtcbit9XG4rXG4rc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfc2V0X2xhZ19jZmcoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCB1OCBsYWdfaWQsXG4rXHRcdFx0XHQgICAgc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3KVxuK3tcbitcdHN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWcgPSBcdTAwMjZldGhzdy1cdTAwM2VsYWdzW2xhZ19pZCAtIDFdO1xuK1x0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcHJpbWFyeSwgKnBvcnRfcHJpdjtcbitcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKm5ld19wcmltYXJ5ID0gTlVMTDtcbitcdHN0cnVjdCBkcHN3X2xhZ19jZmcgY2ZnID0gezB9O1xuK1x0c3RydWN0IGRwYWEyX21hY19hZGRyICphO1xuK1x0dTggbnVtX2lmcyA9IDA7XG4rXHRpbnQgZXJyLCBpO1xuK1xuK1x0Y2ZnLmdyb3VwX2lkID0gbGFnX2lkO1xuK1xuK1x0LyogRGV0ZXJtaW5lIHRoZSBwcmltYXJ5IHBvcnQuIFRoZSBjYWxsZXIgY2xlYXJzIC1cdTAwM2VsYWcgb24gdGhlIHBvcnQgdGhhdFxuK1x0ICogaXMgbGVhdmluZywgc28gYSBOVUxMIC1cdTAwM2VsYWcgb24gdGhlIGN1cnJlbnQgcHJpbWFyeSBtZWFucyBpdCBpcyB0aGVcbitcdCAqIG9uZSBsZWF2aW5nOiBlbGVjdCB0aGUgZmlyc3QgcmVtYWluaW5nIG1lbWJlciBhcyB0aGUgbmV3IHByaW1hcnkuXG4rXHQgKiBPdGhlcndpc2Uga2VlcCB0aGUgY3VycmVudCBwcmltYXJ5LlxuK1x0ICovXG4rXHRpZiAocnRubF9kZXJlZmVyZW5jZShsYWctXHUwMDNlcHJpbWFyeS1cdTAwM2VsYWcpKSB7XG4rXHRcdHByaW1hcnkgPSBsYWctXHUwMDNlcHJpbWFyeTtcbitcdH0gZWxzZSB7XG4rXHRcdHByaW1hcnkgPSBOVUxMO1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBldGhzdy1cdTAwM2Vzd19hdHRyLm51bV9pZnM7IGkrKykge1xuK1x0XHRcdGlmIChkcGFhMl9zd2l0Y2hfcG9ydF9pbl9sYWcoZXRoc3ctXHUwMDNlcG9ydHNbaV0sIGJvbmRfZGV2KSkge1xuK1x0XHRcdFx0bmV3X3ByaW1hcnkgPSBldGhzdy1cdTAwM2Vwb3J0c1tpXTtcbitcdFx0XHRcdHByaW1hcnkgPSBuZXdfcHJpbWFyeTtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1xuK1x0LyogQnVpbGQgdGhlIGludGVyZmFjZSBsaXN0LCBhbHdheXMgcGxhY2luZyB0aGUgcHJpbWFyeSBmaXJzdCAqL1xuK1x0aWYgKHByaW1hcnkpXG4rXHRcdGNmZy5pZl9pZFtudW1faWZzKytdID0gcHJpbWFyeS1cdTAwM2VpZHg7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBldGhzdy1cdTAwM2Vzd19hdHRyLm51bV9pZnM7IGkrKykge1xuK1x0XHRwb3J0X3ByaXYgPSBldGhzdy1cdTAwM2Vwb3J0c1tpXTtcbitcdFx0aWYgKHBvcnRfcHJpdiA9PSBwcmltYXJ5KVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X2luX2xhZyhwb3J0X3ByaXYsIGJvbmRfZGV2KSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0Y2ZnLmlmX2lkW251bV9pZnMrK10gPSBwb3J0X3ByaXYtXHUwMDNlaWR4O1xuK1x0fVxuK1x0Y2ZnLm51bV9pZnMgPSBudW1faWZzO1xuK1xuK1x0LyogTm8gbW9yZSBpbnRlcmZhY2VzIHVuZGVyIHRoaXMgTEFHIGdyb3VwLCBtYXJrIGl0IGFzIG5vdCBpbiB1c2UuIFdhaXRcbitcdCAqIGZvciBhIGdyYWNlIHBlcmlvZCBzbyB0aGF0IGFueSByZWFkZXJzIG9mIHRoZSBsYWcgc3RydWN0dXJlIGZpbmlzaGVkLlxuK1x0ICovXG4rXHRpZiAoIW51bV9pZnMpIHtcbitcdFx0c3luY2hyb25pemVfbmV0KCk7XG4rXG4rXHRcdGxhZy1cdTAwM2Vib25kX2RldiA9IE5VTEw7XG4rXHRcdGxhZy1cdTAwM2VwcmltYXJ5ID0gTlVMTDtcbitcdFx0bGFnLVx1MDAzZWluX3VzZSA9IGZhbHNlO1xuK1x0fVxuK1xuK1x0LyogV2hlbiB0aGUgcHJpbWFyeSBjaGFuZ2VzLCBtaWdyYXRlIHRoZSBGREIgZW50cmllcyBmcm9tIHRoZSBvbGRcbitcdCAqIHByaW1hcnkgdG8gdGhlIG5ldyBvbmU6IHJlbW92ZSB0aGVtIGJlZm9yZSByZWNvbmZpZ3VyaW5nIHRoZSBMQUcgaW5cbitcdCAqIGhhcmR3YXJlIGFuZCByZS1hZGQgdGhlbSBvbiB0aGUgbmV3IHByaW1hcnkgYWZ0ZXJ3YXJkcy4gV2UgZG8gbm90XG4rXHQgKiB0b3VjaCBhbnkgcmVmY291bnRpbmcgc2luY2UgdGhlIGludGVudGlvbiBpcyB0byBjaGFuZ2UgdGhlIEhXIGVudHJ5LFxuK1x0ICogbm90IHRoZSBwYXJhbGxlbCBzb2Z0d2FyZSB0cmFja2luZy5cbitcdCAqL1xuK1x0aWYgKG5ld19wcmltYXJ5KSB7XG4rXHRcdG11dGV4X2xvY2soXHUwMDI2bGFnLVx1MDAzZWZkYl9sb2NrKTtcbitcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShhLCBcdTAwMjZsYWctXHUwMDNlZmRicywgbGlzdClcbitcdFx0XHRkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsKGxhZy1cdTAwM2VwcmltYXJ5LCBhLVx1MDAzZWFkZHIpO1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bGFnLVx1MDAzZWZkYl9sb2NrKTtcbitcdH1cbitcbitcdGVyciA9IGRwc3dfbGFnX3NldChldGhzdy1cdTAwM2VtY19pbywgMCwgZXRoc3ctXHUwMDNlZHBzd19oYW5kbGUsIFx1MDAyNmNmZyk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0aWYgKG5ld19wcmltYXJ5KSB7XG4rXHRcdG11dGV4X2xvY2soXHUwMDI2bGFnLVx1MDAzZWZkYl9sb2NrKTtcbitcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShhLCBcdTAwMjZsYWctXHUwMDNlZmRicywgbGlzdCkge1xuK1x0XHRcdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9hZGQobmV3X3ByaW1hcnksIGEtXHUwMDNlYWRkcik7XG4rXHRcdFx0aWYgKGVycilcbitcdFx0XHRcdG5ldGRldl9lcnIobmV3X3ByaW1hcnktXHUwMDNlbmV0ZGV2LCBcIlVuYWJsZSB0byBtaWdyYXRlIEZEQlxcblwiKTtcbitcdFx0fVxuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bGFnLVx1MDAzZWZkYl9sb2NrKTtcbitcbitcdFx0c3luY2hyb25pemVfbmV0KCk7XG4rXHRcdGxhZy1cdTAwM2VwcmltYXJ5ID0gbmV3X3ByaW1hcnk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9ib25kX2pvaW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG5ldGRldl9sYWdfdXBwZXJfaW5mbyAqaW5mbyxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHN0cnVjdCBldGhzd19jb3JlICpldGhzdyA9IHBvcnRfcHJpdi1cdTAwM2VldGhzd19kYXRhO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmJyaWRnZV9kZXY7XG4rXHRzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqbGFnO1xuK1x0aW50IGVyciA9IDA7XG4rXHR1OCBsYWdfaWQ7XG4rXG4rXHQvKiBTZXR1cCB0aGUgcG9ydF9wcml2LVx1MDAzZWxhZyBwb2ludGVyIGZvciB0aGlzIHN3aXRjaCBwb3J0ICovXG4rXHRkcGFhMl9zd2l0Y2hfcG9ydF9zZXRfbGFnX2dyb3VwKHBvcnRfcHJpdiwgYm9uZF9kZXYpO1xuK1xuK1x0LyogQ3JlYXRlIHRoZSBMQUcgY29uZmlndXJhdGlvbiBhbmQgYXBwbHkgaXQgaW4gTUMgKi9cbitcdGxhZyA9IHJ0bmxfZGVyZWZlcmVuY2UocG9ydF9wcml2LVx1MDAzZWxhZyk7XG4rXHRsYWdfaWQgPSBsYWctXHUwMDNlaWQ7XG4rXHRlcnIgPSBkcGFhMl9zd2l0Y2hfc2V0X2xhZ19jZmcoYm9uZF9kZXYsIGxhZ19pZCwgZXRoc3cpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJfbGFnX2NmZztcbitcbitcdC8qIElmIHRoZSBib25kIGRldmljZSBpcyBhIHN3aXRjaCBwb3J0LCBqb2luIHRoZSBicmlkZ2UgYXMgd2VsbCAqL1xuK1x0YnJpZGdlX2RldiA9IG5ldGRldl9tYXN0ZXJfdXBwZXJfZGV2X2dldChib25kX2Rldik7XG4rXHRpZiAoIWJyaWRnZV9kZXYgfHwgIW5ldGlmX2lzX2JyaWRnZV9tYXN0ZXIoYnJpZGdlX2RldikpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfYnJpZGdlX2pvaW4obmV0ZGV2LCBicmlkZ2VfZGV2LCBleHRhY2spO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJfbGFnX2NmZztcbitcbitcdHJldHVybiBlcnI7XG4rXG4rZXJyX2xhZ19jZmc6XG4rXHRyY3VfYXNzaWduX3BvaW50ZXIocG9ydF9wcml2LVx1MDAzZWxhZywgTlVMTCk7XG4rXHRkcGFhMl9zd2l0Y2hfc2V0X2xhZ19jZmcoYm9uZF9kZXYsIGxhZ19pZCwgZXRoc3cpO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9ib25kX2xlYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldilcbit7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqYnJpZGdlX2RldiA9IG5ldGRldl9tYXN0ZXJfdXBwZXJfZGV2X2dldChib25kX2Rldik7XG4rXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZyA9IHJ0bmxfZGVyZWZlcmVuY2UocG9ydF9wcml2LVx1MDAzZWxhZyk7XG4rXHRzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3cgPSBwb3J0X3ByaXYtXHUwMDNlZXRoc3dfZGF0YTtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpicnBkZXY7XG4rXHRib29sIGxlYXJuX2VuYTtcbitcdGludCBlcnI7XG4rXG4rXHRpZiAoIWxhZylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBSZWNyZWF0ZSB0aGUgTEFHIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBMQUcgZ3JvdXAgdGhhdCB3ZSBsZWZ0LiAqL1xuK1x0cmN1X2Fzc2lnbl9wb2ludGVyKHBvcnRfcHJpdi1cdTAwM2VsYWcsIE5VTEwpO1xuK1x0ZHBhYTJfc3dpdGNoX3NldF9sYWdfY2ZnKGJvbmRfZGV2LCBsYWctXHUwMDNlaWQsIGV0aHN3KTtcbitcbitcdGlmIChicmlkZ2VfZGV2IFx1MDAyNlx1MDAyNiBuZXRpZl9pc19icmlkZ2VfbWFzdGVyKGJyaWRnZV9kZXYpKSB7XG4rXHRcdC8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBuZXcgcHJpbWFyeSBpbmhlcml0cyB0aGUgbGVhcm5pbmcgc3RhdGUgKi9cbitcdFx0aWYgKGxhZy1cdTAwM2VwcmltYXJ5KSB7XG4rXHRcdFx0YnJwZGV2ID0gZHBhYTJfc3dpdGNoX3BvcnRfdG9fYnJpZGdlX3BvcnQobGFnLVx1MDAzZXByaW1hcnkpO1xuK1x0XHRcdGxlYXJuX2VuYSA9IGJyX3BvcnRfZmxhZ19pc19zZXQoYnJwZGV2LCBCUl9MRUFSTklORyk7XG4rXHRcdFx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfc2V0X2xlYXJuaW5nKGxhZy1cdTAwM2VwcmltYXJ5LFxuK1x0XHRcdFx0XHRcdFx0ICAgICBsZWFybl9lbmEpO1xuK1x0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHRcdGxhZy1cdTAwM2VwcmltYXJ5LVx1MDAzZWxlYXJuX2VuYSA9IGxlYXJuX2VuYTtcbitcdFx0fVxuK1xuK1x0XHQvKiBJbiBjYXNlIHRoZSBib25kIGlzIGEgYnJpZGdlIHBvcnQsIGxlYXZlIHRoZSB1cHBlciBicmlkZ2UgYXNcbitcdFx0ICogd2VsbC5cbitcdFx0ICovXG4rXHRcdHJldHVybiBkcGFhMl9zd2l0Y2hfcG9ydF9icmlkZ2VfbGVhdmUobmV0ZGV2KTtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuQEAgLTIyMzQsOCArMjcyOSw4IEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfcHJlY2hhbmdldXBwZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHRcdFx0ICAgIHN0cnVjdCBuZXRkZXZfbm90aWZpZXJfY2hhbmdldXBwZXJfaW5mbyAqaW5mbylcbiB7XG4gXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXY7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqdXBwZXJfZGV2LCAqYnI7XG4gXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2s7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqdXBwZXJfZGV2O1xuIFx0aW50IGVycjtcbiBcbiBcdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrKG5ldGRldikpXG5AQCAtMjI1Miw2ICsyNzQ3LDI0IEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfcHJlY2hhbmdldXBwZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcbiBcdFx0aWYgKCFpbmZvLVx1MDAzZWxpbmtpbmcpXG4gXHRcdFx0ZHBhYTJfc3dpdGNoX3BvcnRfcHJlX2JyaWRnZV9sZWF2ZShuZXRkZXYpO1xuK1x0fSBlbHNlIGlmIChuZXRpZl9pc19sYWdfbWFzdGVyKHVwcGVyX2RldikpIHtcbitcdFx0aWYgKCFpbmZvLVx1MDAzZWxpbmtpbmcpIHtcbitcdFx0XHRpZiAobmV0aWZfaXNfYnJpZGdlX3BvcnQodXBwZXJfZGV2KSlcbitcdFx0XHRcdGRwYWEyX3N3aXRjaF9wb3J0X3ByZV9icmlkZ2VfbGVhdmUobmV0ZGV2KTtcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuK1xuK1x0XHRpZiAobmV0aWZfaXNfYnJpZGdlX3BvcnQodXBwZXJfZGV2KSkge1xuK1x0XHRcdGJyID0gbmV0ZGV2X21hc3Rlcl91cHBlcl9kZXZfZ2V0KHVwcGVyX2Rldik7XG4rXHRcdFx0ZXJyID0gZHBhYTJfc3dpdGNoX3ByZWNoYW5nZXVwcGVyX3Nhbml0eV9jaGVja3MobmV0ZGV2LFxuK1x0XHRcdFx0XHRcdFx0XHRcdGJyLFxuK1x0XHRcdFx0XHRcdFx0XHRcdGV4dGFjayk7XG4rXHRcdFx0aWYgKGVycilcbitcdFx0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbitcbitcdFx0cmV0dXJuIGRwYWEyX3N3aXRjaF9wcmVfbGFnX2pvaW4obmV0ZGV2LCB1cHBlcl9kZXYsXG4rXHRcdFx0XHRcdFx0IGluZm8tXHUwMDNldXBwZXJfaW5mbywgZXh0YWNrKTtcbiBcdH0gZWxzZSBpZiAoaXNfdmxhbl9kZXYodXBwZXJfZGV2KSkge1xuIFx0XHRwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0XHRpZiAocG9ydF9wcml2LVx1MDAzZWZkYi1cdTAwM2VicmlkZ2VfZGV2KSB7XG5AQCAtMjI4Myw2ICsyNzk2LDgwIEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfY2hhbmdldXBwZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHRcdFx0XHRcdCAgICAgZXh0YWNrKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdHJldHVybiBkcGFhMl9zd2l0Y2hfcG9ydF9icmlkZ2VfbGVhdmUobmV0ZGV2KTtcbitcdH0gZWxzZSBpZiAobmV0aWZfaXNfbGFnX21hc3Rlcih1cHBlcl9kZXYpKSB7XG4rXHRcdGlmIChpbmZvLVx1MDAzZWxpbmtpbmcpXG4rXHRcdFx0cmV0dXJuIGRwYWEyX3N3aXRjaF9wb3J0X2JvbmRfam9pbihuZXRkZXYsIHVwcGVyX2RldixcbitcdFx0XHRcdFx0XHRcdCAgIGluZm8tXHUwMDNldXBwZXJfaW5mbyxcbitcdFx0XHRcdFx0XHRcdCAgIGV4dGFjayk7XG4rXHRcdGVsc2VcbitcdFx0XHRyZXR1cm4gZHBhYTJfc3dpdGNoX3BvcnRfYm9uZF9sZWF2ZShuZXRkZXYsIHVwcGVyX2Rldik7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludFxuK2RwYWEyX3N3aXRjaF9sYWdfcHJlY2hhbmdldXBwZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdHN0cnVjdCBuZXRkZXZfbm90aWZpZXJfY2hhbmdldXBwZXJfaW5mbyAqaW5mbylcbit7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbG93ZXI7XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkICppdGVyO1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRpZiAoIW5ldGlmX2lzX2xhZ19tYXN0ZXIobmV0ZGV2KSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRuZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KG5ldGRldiwgbG93ZXIsIGl0ZXIpIHtcbitcdFx0aWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2sobG93ZXIpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9wcmVjaGFuZ2V1cHBlcihsb3dlciwgaW5mbyk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbitkcGFhMl9zd2l0Y2hfbGFnX2NoYW5nZXVwcGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0ICAgICBzdHJ1Y3QgbmV0ZGV2X25vdGlmaWVyX2NoYW5nZXVwcGVyX2luZm8gKmluZm8pXG4re1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmxvd2VyO1xuK1x0c3RydWN0IGxpc3RfaGVhZCAqaXRlcjtcbitcdGludCBlcnIgPSAwO1xuK1xuK1x0aWYgKCFuZXRpZl9pc19sYWdfbWFzdGVyKG5ldGRldikpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0bmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX2RldihuZXRkZXYsIGxvd2VyLCBpdGVyKSB7XG4rXHRcdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrKGxvd2VyKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfY2hhbmdldXBwZXIobG93ZXIsIGluZm8pO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludFxuK2RwYWEyX3N3aXRjaF9wb3J0X2NoYW5nZWxvd2Vyc3RhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdCAgIHN0cnVjdCBuZXRkZXZfbGFnX2xvd2VyX3N0YXRlX2luZm8gKmxpbmZvKVxuK3tcbitcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3cgPSBwb3J0X3ByaXYtXHUwMDNlZXRoc3dfZGF0YTtcbitcdGludCBlcnI7XG4rXG4rXHRpZiAoIXJ0bmxfZGVyZWZlcmVuY2UocG9ydF9wcml2LVx1MDAzZWxhZykpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0ZXJyID0gZHBzd19pZl9zZXRfbGFnX3N0YXRlKGV0aHN3LVx1MDAzZW1jX2lvLCAwLCBldGhzdy1cdTAwM2VkcHN3X2hhbmRsZSxcbitcdFx0XHRcdCAgICBwb3J0X3ByaXYtXHUwMDNlaWR4LCBsaW5mby1cdTAwM2V0eF9lbmFibGVkID8gMSA6IDApO1xuK1x0aWYgKGVycikge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJkcHN3X2lmX3NldF9sYWdfc3RhdGUoKSA9ICVkXFxuXCIsIGVycik7XG4rXHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0yMjkyLDYgKzI4NzksNyBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X25ldGRldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuIFx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7XG4rXHRzdHJ1Y3QgbmV0ZGV2X25vdGlmaWVyX2NoYW5nZWxvd2Vyc3RhdGVfaW5mbyAqaW5mbztcbiBcdGludCBlcnIgPSAwO1xuIFxuIFx0c3dpdGNoIChldmVudCkge1xuQEAgLTIzMDAsMTMgKzI4ODgsMjkgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9uZXRkZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gbm90aWZpZXJfZnJvbV9lcnJubyhlcnIpO1xuIFxuK1x0XHRlcnIgPSBkcGFhMl9zd2l0Y2hfbGFnX3ByZWNoYW5nZXVwcGVyKG5ldGRldiwgcHRyKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gbm90aWZpZXJfZnJvbV9lcnJubyhlcnIpO1xuK1xuIFx0XHRicmVhaztcbiBcdGNhc2UgTkVUREVWX0NIQU5HRVVQUEVSOlxuIFx0XHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9jaGFuZ2V1cHBlcihuZXRkZXYsIHB0cik7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8oZXJyKTtcbiBcbitcdFx0ZXJyID0gZHBhYTJfc3dpdGNoX2xhZ19jaGFuZ2V1cHBlcihuZXRkZXYsIHB0cik7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8oZXJyKTtcbitcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIE5FVERFVl9DSEFOR0VMT1dFUlNUQVRFOlxuK1x0XHRpbmZvID0gcHRyO1xuK1x0XHRpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhuZXRkZXYpKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9jaGFuZ2Vsb3dlcnN0YXRlKG5ldGRldixcbitcdFx0XHRcdFx0XHRcdCBpbmZvLVx1MDAzZWxvd2VyX3N0YXRlX2luZm8pO1xuK1x0XHRyZXR1cm4gbm90aWZpZXJfZnJvbV9lcnJubyhlcnIpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIE5PVElGWV9ET05FO1xuQEAgLTIzMTYsODAgKzI5MjAsOTcgQEAgc3RydWN0IGV0aHN3X3N3aXRjaGRldl9ldmVudF93b3JrIHtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuIFx0c3RydWN0IHN3aXRjaGRldl9ub3RpZmllcl9mZGJfaW5mbyBmZGJfaW5mbztcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXY7XG4gXHR1bnNpZ25lZCBsb25nIGV2ZW50O1xuK1x0dTE2IHZpZDtcbiB9O1xuIFxuIHN0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9ldmVudF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgZXRoc3dfc3dpdGNoZGV2X2V2ZW50X3dvcmsgKnN3aXRjaGRldl93b3JrID1cbiBcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBldGhzd19zd2l0Y2hkZXZfZXZlbnRfd29yaywgd29yayk7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYgPSBzd2l0Y2hkZXZfd29yay1cdTAwM2VvcmlnX2RldjtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBzd2l0Y2hkZXZfd29yay1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0c3RydWN0IHN3aXRjaGRldl9ub3RpZmllcl9mZGJfaW5mbyAqZmRiX2luZm87XG4rXHRzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqbGFnO1xuIFx0aW50IGVycjtcbiBcbi1cdHJ0bmxfbG9jaygpO1xuIFx0ZmRiX2luZm8gPSBcdTAwMjZzd2l0Y2hkZXZfd29yay1cdTAwM2VmZGJfaW5mbztcbiBcbitcdC8qIFRoZSBsYWcgc3RydWN0dXJlcyBhcmUgZnJlZWQgb25seSBmcm9tIGRwYWEyX3N3aXRjaF9yZW1vdmUoKSwgd2hpY2hcbitcdCAqIGZpcnN0IGZsdXNoZXMgdGhpcyB3b3JrcXVldWUsIHNvIHRoZSBwb2ludGVyIHN0YXlzIHZhbGlkIGZvciB0aGVcbitcdCAqIGxpZmV0aW1lIG9mIHRoZSB3b3JrIGl0ZW0uIE9ubHkgdGhlIGRlcmVmZXJlbmNlIG5lZWRzIHRoZSBSQ1VcbitcdCAqIHJlYWQtc2lkZSBsb2NrOyB0aGUgRkRCIGhlbHBlcnMgYmVsb3cgY2FuIHNsZWVwIGFuZCBtdXN0IHJ1biBvdXRzaWRlXG4rXHQgKiBvZiBpdC5cbitcdCAqL1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0bGFnID0gcmN1X2RlcmVmZXJlbmNlKHBvcnRfcHJpdi1cdTAwM2VsYWcpO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4gXHRzd2l0Y2ggKHN3aXRjaGRldl93b3JrLVx1MDAzZWV2ZW50KSB7XG4gXHRjYXNlIFNXSVRDSERFVl9GREJfQUREX1RPX0RFVklDRTpcbi1cdFx0aWYgKCFmZGJfaW5mby1cdTAwM2VhZGRlZF9ieV91c2VyIHx8IGZkYl9pbmZvLVx1MDAzZWlzX2xvY2FsKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRpZiAoaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGZkYl9pbmZvLVx1MDAzZWFkZHIpKVxuLVx0XHRcdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9hZGRfdWMobmV0ZGV2X3ByaXYoZGV2KSxcbi1cdFx0XHRcdFx0XHRcdCAgIGZkYl9pbmZvLVx1MDAzZWFkZHIpO1xuK1x0XHRpZiAobGFnKVxuK1x0XHRcdGVyciA9IGRwYWEyX3N3aXRjaF9sYWdfZmRiX2FkZChsYWcsIGZkYl9pbmZvLVx1MDAzZWFkZHIsXG4rXHRcdFx0XHRcdFx0ICAgICAgIHN3aXRjaGRldl93b3JrLVx1MDAzZXZpZCk7XG4gXHRcdGVsc2Vcbi1cdFx0XHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfYWRkX21jKG5ldGRldl9wcml2KGRldiksXG4tXHRcdFx0XHRcdFx0XHQgICBmZGJfaW5mby1cdTAwM2VhZGRyKTtcbitcdFx0XHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfYWRkKHBvcnRfcHJpdixcbitcdFx0XHRcdFx0XHRcdGZkYl9pbmZvLVx1MDAzZWFkZHIpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRmZGJfaW5mby1cdTAwM2VvZmZsb2FkZWQgPSB0cnVlO1xuLVx0XHRjYWxsX3N3aXRjaGRldl9ub3RpZmllcnMoU1dJVENIREVWX0ZEQl9PRkZMT0FERUQsIGRldixcbitcdFx0Y2FsbF9zd2l0Y2hkZXZfbm90aWZpZXJzKFNXSVRDSERFVl9GREJfT0ZGTE9BREVELCBvcmlnX2RldixcbiBcdFx0XHRcdFx0IFx1MDAyNmZkYl9pbmZvLVx1MDAzZWluZm8sIE5VTEwpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgU1dJVENIREVWX0ZEQl9ERUxfVE9fREVWSUNFOlxuLVx0XHRpZiAoIWZkYl9pbmZvLVx1MDAzZWFkZGVkX2J5X3VzZXIgfHwgZmRiX2luZm8tXHUwMDNlaXNfbG9jYWwpXG4tXHRcdFx0YnJlYWs7XG4tXHRcdGlmIChpc191bmljYXN0X2V0aGVyX2FkZHIoZmRiX2luZm8tXHUwMDNlYWRkcikpXG4tXHRcdFx0ZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2RlbF91YyhuZXRkZXZfcHJpdihkZXYpLCBmZGJfaW5mby1cdTAwM2VhZGRyKTtcbitcdFx0aWYgKGxhZylcbitcdFx0XHRkcGFhMl9zd2l0Y2hfbGFnX2ZkYl9kZWwobGFnLCBmZGJfaW5mby1cdTAwM2VhZGRyLFxuK1x0XHRcdFx0XHRcdCBzd2l0Y2hkZXZfd29yay1cdTAwM2V2aWQpO1xuIFx0XHRlbHNlXG4tXHRcdFx0ZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2RlbF9tYyhuZXRkZXZfcHJpdihkZXYpLCBmZGJfaW5mby1cdTAwM2VhZGRyKTtcbitcdFx0XHRkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsKHBvcnRfcHJpdiwgZmRiX2luZm8tXHUwMDNlYWRkcik7XG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuLVx0cnRubF91bmxvY2soKTtcbiBcdGtmcmVlKHN3aXRjaGRldl93b3JrLVx1MDAzZWZkYl9pbmZvLmFkZHIpO1xuIFx0a2ZyZWUoc3dpdGNoZGV2X3dvcmspO1xuIFx0ZGV2X3B1dChkZXYpO1xuK1x0ZGV2X3B1dChvcmlnX2Rldik7XG4gfVxuIFxuLS8qIENhbGxlZCB1bmRlciByY3VfcmVhZF9sb2NrKCkgKi9cbi1zdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4tXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXG4rc3RhdGljIGludFxuK2RwYWEyX3N3aXRjaF9wb3J0X2ZkYl9ldmVudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYsXG4rXHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIGNvbnN0IHZvaWQgKmN0eCxcbitcdFx0XHQgICAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9ub3RpZmllcl9mZGJfaW5mbyAqZmRiX2luZm8pXG4ge1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHN3aXRjaGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xuIFx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdHN0cnVjdCBldGhzd19zd2l0Y2hkZXZfZXZlbnRfd29yayAqc3dpdGNoZGV2X3dvcms7XG4tXHRzdHJ1Y3Qgc3dpdGNoZGV2X25vdGlmaWVyX2ZkYl9pbmZvICpmZGJfaW5mbyA9IHB0cjtcbiBcdHN0cnVjdCBldGhzd19jb3JlICpldGhzdyA9IHBvcnRfcHJpdi1cdTAwM2VldGhzd19kYXRhO1xuIFxuLVx0aWYgKGV2ZW50ID09IFNXSVRDSERFVl9QT1JUX0FUVFJfU0VUKVxuLVx0XHRyZXR1cm4gZHBhYTJfc3dpdGNoX3BvcnRfYXR0cl9zZXRfZXZlbnQoZGV2LCBwdHIpO1xuK1x0aWYgKGN0eCBcdTAwMjZcdTAwMjYgY3R4ICE9IHBvcnRfcHJpdilcbitcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhkZXYpKVxuLVx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4rXHQvKiBGb3IgdGhlIG1vbWVudCwgZG8gbm90aGluZyB3aXRoIGVudHJpZXMgdG93YXJkcyBmb3JlaWduIGRldmljZXMgKi9cbitcdGlmIChkcGFhMl9zd2l0Y2hfZm9yZWlnbl9kZXZfY2hlY2soZGV2LCBvcmlnX2RldikpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKCFmZGJfaW5mby1cdTAwM2VhZGRlZF9ieV91c2VyIHx8IGZkYl9pbmZvLVx1MDAzZWlzX2xvY2FsKVxuK1x0XHRyZXR1cm4gMDtcbiBcbiBcdHN3aXRjaGRldl93b3JrID0ga3phbGxvY19vYmooKnN3aXRjaGRldl93b3JrLCBHRlBfQVRPTUlDKTtcbiBcdGlmICghc3dpdGNoZGV2X3dvcmspXG4tXHRcdHJldHVybiBOT1RJRllfQkFEO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdElOSVRfV09SSyhcdTAwMjZzd2l0Y2hkZXZfd29yay1cdTAwM2V3b3JrLCBkcGFhMl9zd2l0Y2hfZXZlbnRfd29yayk7XG4gXHRzd2l0Y2hkZXZfd29yay1cdTAwM2VkZXYgPSBkZXY7XG4gXHRzd2l0Y2hkZXZfd29yay1cdTAwM2VldmVudCA9IGV2ZW50O1xuK1x0c3dpdGNoZGV2X3dvcmstXHUwMDNlb3JpZ19kZXYgPSBvcmlnX2RldjtcbitcdHN3aXRjaGRldl93b3JrLVx1MDAzZXZpZCA9IGZkYl9pbmZvLVx1MDAzZXZpZDtcbiBcbiBcdHN3aXRjaCAoZXZlbnQpIHtcbiBcdGNhc2UgU1dJVENIREVWX0ZEQl9BRERfVE9fREVWSUNFOlxuIFx0Y2FzZSBTV0lUQ0hERVZfRkRCX0RFTF9UT19ERVZJQ0U6XG4tXHRcdG1lbWNweShcdTAwMjZzd2l0Y2hkZXZfd29yay1cdTAwM2VmZGJfaW5mbywgcHRyLFxuK1x0XHRtZW1jcHkoXHUwMDI2c3dpdGNoZGV2X3dvcmstXHUwMDNlZmRiX2luZm8sIGZkYl9pbmZvLFxuIFx0XHQgICAgICAgc2l6ZW9mKHN3aXRjaGRldl93b3JrLVx1MDAzZWZkYl9pbmZvKSk7XG4gXHRcdHN3aXRjaGRldl93b3JrLVx1MDAzZWZkYl9pbmZvLmFkZHIgPSBremFsbG9jKEVUSF9BTEVOLCBHRlBfQVRPTUlDKTtcbiBcdFx0aWYgKCFzd2l0Y2hkZXZfd29yay1cdTAwM2VmZGJfaW5mby5hZGRyKVxuQEAgLTI0MDAsNTIgKzMwMjEsNjEgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuIFxuIFx0XHQvKiBUYWtlIGEgcmVmZXJlbmNlIG9uIHRoZSBkZXZpY2UgdG8gYXZvaWQgYmVpbmcgZnJlZWQuICovXG4gXHRcdGRldl9ob2xkKGRldik7XG4rXHRcdGRldl9ob2xkKG9yaWdfZGV2KTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRrZnJlZShzd2l0Y2hkZXZfd29yayk7XG4tXHRcdHJldHVybiBOT1RJRllfRE9ORTtcbitcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4gXHRxdWV1ZV93b3JrKGV0aHN3LVx1MDAzZXdvcmtxdWV1ZSwgXHUwMDI2c3dpdGNoZGV2X3dvcmstXHUwMDNld29yayk7XG4gXG4tXHRyZXR1cm4gTk9USUZZX0RPTkU7XG4rXHRyZXR1cm4gMDtcbiBcbiBlcnJfYWRkcl9hbGxvYzpcbiBcdGtmcmVlKHN3aXRjaGRldl93b3JrKTtcbi1cdHJldHVybiBOT1RJRllfQkFEO1xuK1x0cmV0dXJuIC1FTk9NRU07XG4gfVxuIFxuLXN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfb2JqX2V2ZW50KHVuc2lnbmVkIGxvbmcgZXZlbnQsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc3dpdGNoZGV2X25vdGlmaWVyX3BvcnRfb2JqX2luZm8gKnBvcnRfb2JqX2luZm8pXG4rLyogQ2FsbGVkIHVuZGVyIHJjdV9yZWFkX2xvY2soKSAqL1xuK3N0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcbiB7XG4tXHRpbnQgZXJyID0gLUVPUE5PVFNVUFA7XG4tXG4tXHRpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhuZXRkZXYpKVxuLVx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc3dpdGNoZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7XG4rXHRpbnQgZXJyO1xuIFxuIFx0c3dpdGNoIChldmVudCkge1xuLVx0Y2FzZSBTV0lUQ0hERVZfUE9SVF9PQkpfQUREOlxuLVx0XHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9vYmpfYWRkKG5ldGRldiwgcG9ydF9vYmpfaW5mby1cdTAwM2VvYmopO1xuLVx0XHRicmVhaztcbi1cdGNhc2UgU1dJVENIREVWX1BPUlRfT0JKX0RFTDpcbi1cdFx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfb2JqX2RlbChuZXRkZXYsIHBvcnRfb2JqX2luZm8tXHUwMDNlb2JqKTtcbi1cdFx0YnJlYWs7XG4rXHRjYXNlIFNXSVRDSERFVl9QT1JUX0FUVFJfU0VUOlxuK1x0XHRyZXR1cm4gZHBhYTJfc3dpdGNoX3BvcnRfYXR0cl9zZXRfZXZlbnQoZGV2LCBwdHIpO1xuK1x0Y2FzZSBTV0lUQ0hERVZfRkRCX0FERF9UT19ERVZJQ0U6XG4rXHRjYXNlIFNXSVRDSERFVl9GREJfREVMX1RPX0RFVklDRTpcbitcdFx0ZXJyID0gc3dpdGNoZGV2X2hhbmRsZV9mZGJfZXZlbnRfdG9fZGV2aWNlKGRldiwgZXZlbnQsIHB0cixcbitcdFx0XHRcdFx0XHRcdCAgIGRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayxcbitcdFx0XHRcdFx0XHRcdCAgIGRwYWEyX3N3aXRjaF9mb3JlaWduX2Rldl9jaGVjayxcbitcdFx0XHRcdFx0XHRcdCAgIGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9ldmVudCk7XG4rXHRcdHJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4gXHR9XG4tXG4tXHRwb3J0X29ial9pbmZvLVx1MDAzZWhhbmRsZWQgPSB0cnVlO1xuLVx0cmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8oZXJyKTtcbiB9XG4gXG4gc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9ibG9ja2luZ19ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuIFx0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBzd2l0Y2hkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcbitcdGludCBlcnI7XG4gXG4gXHRzd2l0Y2ggKGV2ZW50KSB7XG4gXHRjYXNlIFNXSVRDSERFVl9QT1JUX09CSl9BREQ6XG4rXHRcdGVyciA9IHN3aXRjaGRldl9oYW5kbGVfcG9ydF9vYmpfYWRkKGRldiwgcHRyLFxuK1x0XHRcdFx0XHRcdCAgICBkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2ssXG4rXHRcdFx0XHRcdFx0ICAgIGRwYWEyX3N3aXRjaF9wb3J0X29ial9hZGQpO1xuK1x0XHRyZXR1cm4gbm90aWZpZXJfZnJvbV9lcnJubyhlcnIpO1xuIFx0Y2FzZSBTV0lUQ0hERVZfUE9SVF9PQkpfREVMOlxuLVx0XHRyZXR1cm4gZHBhYTJfc3dpdGNoX3BvcnRfb2JqX2V2ZW50KGV2ZW50LCBkZXYsIHB0cik7XG4rXHRcdGVyciA9IHN3aXRjaGRldl9oYW5kbGVfcG9ydF9vYmpfZGVsKGRldiwgcHRyLFxuK1x0XHRcdFx0XHRcdCAgICBkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2ssXG4rXHRcdFx0XHRcdFx0ICAgIGRwYWEyX3N3aXRjaF9wb3J0X29ial9kZWwpO1xuK1x0XHRyZXR1cm4gbm90aWZpZXJfZnJvbV9lcnJubyhlcnIpO1xuIFx0Y2FzZSBTV0lUQ0hERVZfUE9SVF9BVFRSX1NFVDpcbiBcdFx0cmV0dXJuIGRwYWEyX3N3aXRjaF9wb3J0X2F0dHJfc2V0X2V2ZW50KGRldiwgcHRyKTtcbiBcdH1cbkBAIC0yNDkwLDE5ICszMTIwLDIyIEBAIHN0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9yeChzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZxICpmcSxcbiBcdGRtYV9hZGRyX3QgYWRkciA9IGRwYWEyX2ZkX2dldF9hZGRyKGZkKTtcbiBcdHN0cnVjdCBldGhzd19jb3JlICpldGhzdyA9IGZxLVx1MDAzZWV0aHN3O1xuIFx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2O1xuK1x0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZztcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4gXHRzdHJ1Y3Qgdmxhbl9ldGhoZHIgKmhkcjtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXHR1MTYgdmxhbl90Y2ksIHZpZDtcbiBcdGludCBpZl9pZCwgZXJyO1xuIFx0dm9pZCAqdmFkZHI7XG4rXHR1NjQgZmxjO1xuIFxuIFx0dmFkZHIgPSBkcGFhMl9pb3ZhX3RvX3ZpcnQoZXRoc3ctXHUwMDNlaW9tbXVfZG9tYWluLCBhZGRyKTtcbiBcdGRtYV91bm1hcF9wYWdlKGV0aHN3LVx1MDAzZWRldiwgYWRkciwgRFBBQTJfU1dJVENIX1JYX0JVRl9TSVpFLFxuIFx0XHQgICAgICAgRE1BX0ZST01fREVWSUNFKTtcbiBcbiBcdC8qIGdldCBzd2l0Y2ggaW5ncmVzcyBpbnRlcmZhY2UgSUQgKi9cbi1cdGlmX2lkID0gdXBwZXJfMzJfYml0cyhkcGFhMl9mZF9nZXRfZmxjKGZkKSkgXHUwMDI2IDB4MDAwMEZGRkY7XG4rXHRmbGMgPSBkcGFhMl9mZF9nZXRfZmxjKGZkKTtcbitcdGlmX2lkID0gRFBBQTJfRVRIU1dfRkxDX0lGX0lEKGZsYyk7XG4gXHRpZiAoaWZfaWQgXHUwMDNlPSBldGhzdy1cdTAwM2Vzd19hdHRyLm51bV9pZnMpIHtcbiBcdFx0ZGV2X2VycihldGhzdy1cdTAwM2VkZXYsIFwiRnJhbWUgcmVjZWl2ZWQgZnJvbSB1bmtub3duIGludGVyZmFjZSFcXG5cIik7XG4gXHRcdGdvdG8gZXJyX2ZyZWVfZmQ7XG5AQCAtMjU0MSwxMiArMzE3NCwyMCBAQCBzdGF0aWMgdm9pZCBkcGFhMl9zd2l0Y2hfcngoc3RydWN0IGRwYWEyX3N3aXRjaF9mcSAqZnEsXG4gXHRcdH1cbiBcdH1cbiBcbi1cdHNrYi1cdTAwM2VkZXYgPSBuZXRkZXY7XG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXG4rXHRsYWcgPSByY3VfZGVyZWZlcmVuY2UocG9ydF9wcml2LVx1MDAzZWxhZyk7XG4rXHRpZiAoRFBBQTJfRVRIU1dfRkxDX0lNUFJFQ0lTRV9JRl9JRChmbGMpIFx1MDAyNlx1MDAyNiBsYWcpXG4rXHRcdHNrYi1cdTAwM2VkZXYgPSBsYWctXHUwMDNlYm9uZF9kZXY7XG4rXHRlbHNlXG4rXHRcdHNrYi1cdTAwM2VkZXYgPSBuZXRkZXY7XG4gXHRza2ItXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHNrYi1cdTAwM2VkZXYpO1xuIFxuIFx0LyogU2V0dXAgdGhlIG9mZmxvYWRfZndkX21hcmsgb25seSBpZiB0aGUgcG9ydCBpcyB1bmRlciBhIGJyaWRnZSAqL1xuIFx0c2tiLVx1MDAzZW9mZmxvYWRfZndkX21hcmsgPSAhIShwb3J0X3ByaXYtXHUwMDNlZmRiLVx1MDAzZWJyaWRnZV9kZXYpO1xuIFxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4gXHRuZXRpZl9yZWNlaXZlX3NrYihza2IpO1xuIFxuIFx0cmV0dXJuO1xuQEAgLTI1NjEsNiArMzIwMiw5IEBAIHN0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9kZXRlY3RfZmVhdHVyZXMoc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3KVxuIFxuIFx0aWYgKGV0aHN3LVx1MDAzZW1ham9yIFx1MDAzZSA4IHx8IChldGhzdy1cdTAwM2VtYWpvciA9PSA4IFx1MDAyNlx1MDAyNiBldGhzdy1cdTAwM2VtaW5vciBcdTAwM2U9IDYpKVxuIFx0XHRldGhzdy1cdTAwM2VmZWF0dXJlcyB8PSBFVEhTV19GRUFUVVJFX01BQ19BRERSO1xuK1xuK1x0aWYgKGV0aHN3LVx1MDAzZW1ham9yIFx1MDAzZSA4IHx8IChldGhzdy1cdTAwM2VtYWpvciA9PSA4IFx1MDAyNlx1MDAyNiBldGhzdy1cdTAwM2VtaW5vciBcdTAwM2U9IDEzKSlcbitcdFx0ZXRoc3ctXHUwMDNlZmVhdHVyZXMgfD0gRVRIU1dfRkVBVFVSRV9MQUdfT0ZGTE9BRDtcbiB9XG4gXG4gc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfc2V0dXBfZnFzKHN0cnVjdCBldGhzd19jb3JlICpldGhzdylcbkBAIC0zMTk1LDE3ICszODM5LDE1IEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX2luaXQoc3RydWN0IGZzbF9tY19kZXZpY2UgKnN3X2RldilcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLS8qIEFkZCBhbiBBQ0wgdG8gcmVkaXJlY3QgZnJhbWVzIHdpdGggc3BlY2lmaWMgZGVzdGluYXRpb24gTUFDIGFkZHJlc3MgdG9cbi0gKiBjb250cm9sIGludGVyZmFjZVxuLSAqL1xuKy8qIEFkZCBhbiBBQ0wgdG8gcmVkaXJlY3QgZnJhbWVzIHRvIGNvbnRyb2wgaW50ZXJmYWNlIGJhc2VkIG9uIHRoZSBkc3QgTUFDICovXG4gc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF90cmFwX21hY19hZGRyKHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdixcbi1cdFx0XHRcdFx0ICAgY29uc3QgY2hhciAqbWFjKVxuK1x0XHRcdFx0XHQgICBjb25zdCB1OCAqbWFjLCBjb25zdCB1OCAqbWFzaylcbiB7XG4gXHRzdHJ1Y3QgZHBhYTJfc3dpdGNoX2FjbF9lbnRyeSBhY2xfZW50cnkgPSB7MH07XG4gXG4gXHQvKiBNYXRjaCBvbiB0aGUgZGVzdGluYXRpb24gTUFDIGFkZHJlc3MgKi9cbiBcdGV0aGVyX2FkZHJfY29weShhY2xfZW50cnkua2V5Lm1hdGNoLmwyX2Rlc3RfbWFjLCBtYWMpO1xuLVx0ZXRoX2Jyb2FkY2FzdF9hZGRyKGFjbF9lbnRyeS5rZXkubWFzay5sMl9kZXN0X21hYyk7XG4rXHRldGhlcl9hZGRyX2NvcHkoYWNsX2VudHJ5LmtleS5tYXNrLmwyX2Rlc3RfbWFjLCBtYXNrKTtcbiBcbiBcdC8qIFRyYXAgdG8gQ1BVICovXG4gXHRhY2xfZW50cnkuY2ZnLnByZWNlZGVuY2UgPSAwO1xuQEAgLTMyMTYsNyArMzg1OCw4IEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfdHJhcF9tYWNfYWRkcihzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYsXG4gXG4gc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9pbml0KHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiwgdTE2IHBvcnQpXG4ge1xuLVx0Y29uc3QgY2hhciBzdHBhW0VUSF9BTEVOXSA9IHsweDAxLCAweDgwLCAweGMyLCAweDAwLCAweDAwLCAweDAwfTtcbitcdGNvbnN0IHU4IGxsX21hY1tFVEhfQUxFTl0gPSB7MHgwMSwgMHg4MCwgMHhjMiwgMHgwMCwgMHgwMCwgMHgwMH07XG4rXHRjb25zdCB1OCBsbF9tYXNrW0VUSF9BTEVOXSA9IHsweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGYwfTtcbiBcdHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfdmxhbiB2bGFuID0ge1xuIFx0XHQub2JqLmlkID0gU1dJVENIREVWX09CSl9JRF9QT1JUX1ZMQU4sXG4gXHRcdC52aWQgPSBERUZBVUxUX1ZMQU5fSUQsXG5AQCAtMzI5MSw3ICszOTM0LDcgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9pbml0KHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiwgdTE2IHBvcnQpXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfdHJhcF9tYWNfYWRkcihwb3J0X3ByaXYsIHN0cGEpO1xuK1x0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfdHJhcF9tYWNfYWRkcihwb3J0X3ByaXYsIGxsX21hYywgbGxfbWFzayk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuQEAgLTMzMzEsNiArMzk3NCw5IEBAIHN0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9yZW1vdmUoc3RydWN0IGZzbF9tY19kZXZpY2UgKnN3X2RldilcbiBcdGRldiA9IFx1MDAyNnN3X2Rldi1cdTAwM2VkZXY7XG4gXHRldGhzdyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuIFxuK1x0LyogTWFrZSBzdXJlIHRoYXQgYWxsIGV2ZW50cyB3ZXJlIGhhbmRsZWQgYmVmb3JlIHdlIGtmcmVlIGFueXRoaW5nICovXG4rXHRmbHVzaF93b3JrcXVldWUoZXRoc3ctXHUwMDNld29ya3F1ZXVlKTtcbitcbiBcdGRwYWEyX3N3aXRjaF90ZWFyZG93bl9pcnFzKHN3X2Rldik7XG4gXG4gXHRkcHN3X2Rpc2FibGUoZXRoc3ctXHUwMDNlbWNfaW8sIDAsIGV0aHN3LVx1MDAzZWRwc3dfaGFuZGxlKTtcbkBAIC0zMzQ0LDEyICszOTkwLDE1IEBAIHN0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9yZW1vdmUoc3RydWN0IGZzbF9tY19kZXZpY2UgKnN3X2RldilcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIERQQUEyX1NXSVRDSF9SWF9OVU1fRlFTOyBpKyspXG4gXHRcdG5ldGlmX25hcGlfZGVsKFx1MDAyNmV0aHN3LVx1MDAzZWZxW2ldLm5hcGkpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZXRoc3ctXHUwMDNlc3dfYXR0ci5udW1faWZzOyBpKyspXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBldGhzdy1cdTAwM2Vzd19hdHRyLm51bV9pZnM7IGkrKykge1xuIFx0XHRkcGFhMl9zd2l0Y2hfcmVtb3ZlX3BvcnQoZXRoc3csIGkpO1xuK1x0XHRtdXRleF9kZXN0cm95KFx1MDAyNmV0aHN3LVx1MDAzZWxhZ3NbaV0uZmRiX2xvY2spO1xuK1x0fVxuIFxuIFx0a2ZyZWUoZXRoc3ctXHUwMDNlZmRicyk7XG4gXHRrZnJlZShldGhzdy1cdTAwM2VmaWx0ZXJfYmxvY2tzKTtcbiBcdGtmcmVlKGV0aHN3LVx1MDAzZXBvcnRzKTtcbitcdGtmcmVlKGV0aHN3LVx1MDAzZWxhZ3MpO1xuIFxuIFx0ZHBhYTJfc3dpdGNoX3RlYXJkb3duKHN3X2Rldik7XG4gXG5AQCAtMzM3Nyw2ICs0MDI2LDcgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcHJvYmVfcG9ydChzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3csXG4gXHRwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihwb3J0X25ldGRldik7XG4gXHRwb3J0X3ByaXYtXHUwMDNlbmV0ZGV2ID0gcG9ydF9uZXRkZXY7XG4gXHRwb3J0X3ByaXYtXHUwMDNlZXRoc3dfZGF0YSA9IGV0aHN3O1xuK1x0cmN1X2Fzc2lnbl9wb2ludGVyKHBvcnRfcHJpdi1cdTAwM2VsYWcsIE5VTEwpO1xuIFxuIFx0bXV0ZXhfaW5pdChcdTAwMjZwb3J0X3ByaXYtXHUwMDNlbWFjX2xvY2spO1xuIFxuQEAgLTM0ODQsNiArNDEzNCwyMSBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wcm9iZShzdHJ1Y3QgZnNsX21jX2RldmljZSAqc3dfZGV2KVxuIFx0XHRnb3RvIGVycl9mcmVlX2ZkYnM7XG4gXHR9XG4gXG4rXHRldGhzdy1cdTAwM2VsYWdzID0ga2NhbGxvYyhldGhzdy1cdTAwM2Vzd19hdHRyLm51bV9pZnMsIHNpemVvZigqZXRoc3ctXHUwMDNlbGFncyksXG4rXHRcdFx0ICAgICAgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWV0aHN3LVx1MDAzZWxhZ3MpIHtcbitcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0Z290byBlcnJfZnJlZV9maWx0ZXI7XG4rXHR9XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBldGhzdy1cdTAwM2Vzd19hdHRyLm51bV9pZnM7IGkrKykge1xuK1x0XHRldGhzdy1cdTAwM2VsYWdzW2ldLmJvbmRfZGV2ID0gTlVMTDtcbitcdFx0ZXRoc3ctXHUwMDNlbGFnc1tpXS5ldGhzdyA9IGV0aHN3O1xuK1x0XHRldGhzdy1cdTAwM2VsYWdzW2ldLmlkID0gaSArIDE7XG4rXHRcdGV0aHN3LVx1MDAzZWxhZ3NbaV0uaW5fdXNlID0gMDtcbitcdFx0bXV0ZXhfaW5pdChcdTAwMjZldGhzdy1cdTAwM2VsYWdzW2ldLmZkYl9sb2NrKTtcbitcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZXRoc3ctXHUwMDNlbGFnc1tpXS5mZGJzKTtcbitcdH1cbitcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGV0aHN3LVx1MDAzZXN3X2F0dHIubnVtX2lmczsgaSsrKSB7XG4gXHRcdGVyciA9IGRwYWEyX3N3aXRjaF9wcm9iZV9wb3J0KGV0aHN3LCBpKTtcbiBcdFx0aWYgKGVycilcbkBAIC0zNTMwLDYgKzQxOTUsMTAgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcHJvYmUoc3RydWN0IGZzbF9tY19kZXZpY2UgKnN3X2RldilcbiBlcnJfZnJlZV9uZXRkZXY6XG4gXHRmb3IgKGktLTsgaSBcdTAwM2U9IDA7IGktLSlcbiBcdFx0ZHBhYTJfc3dpdGNoX3JlbW92ZV9wb3J0KGV0aHN3LCBpKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGV0aHN3LVx1MDAzZXN3X2F0dHIubnVtX2lmczsgaSsrKVxuK1x0XHRtdXRleF9kZXN0cm95KFx1MDAyNmV0aHN3LVx1MDAzZWxhZ3NbaV0uZmRiX2xvY2spO1xuK1x0a2ZyZWUoZXRoc3ctXHUwMDNlbGFncyk7XG4rZXJyX2ZyZWVfZmlsdGVyOlxuIFx0a2ZyZWUoZXRoc3ctXHUwMDNlZmlsdGVyX2Jsb2Nrcyk7XG4gZXJyX2ZyZWVfZmRiczpcbiBcdGtmcmVlKGV0aHN3LVx1MDAzZWZkYnMpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guaFxuaW5kZXggNDJiM2NhNzNmNTVkNTQuLjYzYjcwMmIwMDAwYzJlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXN3aXRjaC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItc3dpdGNoLmhcbkBAIC00MSw3ICs0MSw4IEBAXG4gI2RlZmluZSBFVEhTV19NQVhfRlJBTUVfTEVOR1RIXHQoRFBBQTJfTUZMIC0gVkxBTl9FVEhfSExFTiAtIEVUSF9GQ1NfTEVOKVxuICNkZWZpbmUgRVRIU1dfTDJfTUFYX0ZSTShtdHUpXHQoKG10dSkgKyBWTEFOX0VUSF9ITEVOICsgRVRIX0ZDU19MRU4pXG4gXG4tI2RlZmluZSBFVEhTV19GRUFUVVJFX01BQ19BRERSXHRCSVQoMClcbisjZGVmaW5lIEVUSFNXX0ZFQVRVUkVfTUFDX0FERFJcdFx0QklUKDApXG4rI2RlZmluZSBFVEhTV19GRUFUVVJFX0xBR19PRkZMT0FEXHRCSVQoMSlcbiBcbiAvKiBOdW1iZXIgb2YgcmVjZWl2ZSBxdWV1ZXMgKG9uZSBSWCBhbmQgb25lIFRYX0NPTkYpICovXG4gI2RlZmluZSBEUEFBMl9TV0lUQ0hfUlhfTlVNX0ZRU1x0MlxuQEAgLTg2LDYgKzg3LDkgQEBcbiBcbiAjZGVmaW5lIERQQUEyX0VUSFNXX1BPUlRfQUNMX0NNRF9CVUZfU0laRVx0MjU2XG4gXG4rI2RlZmluZSBEUEFBMl9FVEhTV19GTENfSUZfSUQoZmxjKVx0XHQoKChmbGMpIFx1MDAzZVx1MDAzZSAzMikgXHUwMDI2IEdFTk1BU0soMTUsIDApKVxuKyNkZWZpbmUgRFBBQTJfRVRIU1dfRkxDX0lNUFJFQ0lTRV9JRl9JRChmbGMpXHQoKGZsYykgXHUwMDI2IEJJVF9VTEwoNjMpKVxuK1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZHBhYTJfc3dpdGNoX3BvcnRfZXRodG9vbF9vcHM7XG4gXG4gc3RydWN0IGV0aHN3X2NvcmU7XG5AQCAtOTksMTIgKzEwMywzMCBAQCBzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZxIHtcbiBcdHUzMiBmcWlkO1xuIH07XG4gXG4rc3RydWN0IGRwYWEyX21hY19hZGRyIHtcbitcdHVuc2lnbmVkIGNoYXIgYWRkcltFVEhfQUxFTl07XG4rXHR1MTYgdmlkO1xuK1x0cmVmY291bnRfdCByZWZjb3VudDtcbitcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbit9O1xuK1xuIHN0cnVjdCBkcGFhMl9zd2l0Y2hfZmRiIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlXHQqYnJpZGdlX2RldjtcbiBcdHUxNlx0XHRcdGZkYl9pZDtcbiBcdGJvb2xcdFx0XHRpbl91c2U7XG4gfTtcbiBcbitzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyB7XG4rXHRzdHJ1Y3QgZXRoc3dfY29yZVx0KmV0aHN3O1xuK1x0c3RydWN0IG5ldF9kZXZpY2VcdCpib25kX2RldjtcbitcdGJvb2xcdFx0XHRpbl91c2U7XG4rXHR1OFx0XHRcdGlkO1xuK1x0c3RydWN0IGV0aHN3X3BvcnRfcHJpdlx0KnByaW1hcnk7XG4rXHQvKiBQcm90ZWN0cyB0aGUgbGlzdCBvZiBmZGJzIGluc3RhbGxlZCBvbiB0aGlzIExBRyAqL1xuK1x0c3RydWN0IG11dGV4XHRcdGZkYl9sb2NrO1xuK1x0c3RydWN0IGxpc3RfaGVhZFx0ZmRicztcbit9O1xuK1xuIHN0cnVjdCBkcGFhMl9zd2l0Y2hfYWNsX2VudHJ5IHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG4gXHR1MTZcdFx0XHRwcmlvO1xuQEAgLTE2Myw2ICsxODUsOCBAQCBzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2IHtcbiBcdHN0cnVjdCBkcGFhMl9tYWNcdCptYWM7XG4gXHQvKiBQcm90ZWN0cyBhZ2FpbnN0IGNoYW5nZXMgdG8gcG9ydF9wcml2LVx1MDAzZW1hYyAqL1xuIFx0c3RydWN0IG11dGV4XHRcdG1hY19sb2NrO1xuK1xuK1x0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgX19yY3UgKmxhZztcbiB9O1xuIFxuIC8qIFN3aXRjaCBkYXRhICovXG5AQCAtMTkwLDYgKzIxNCw4IEBAIHN0cnVjdCBldGhzd19jb3JlIHtcbiBcdHN0cnVjdCBkcGFhMl9zd2l0Y2hfZmRiXHRcdCpmZGJzO1xuIFx0c3RydWN0IGRwYWEyX3N3aXRjaF9maWx0ZXJfYmxvY2sgKmZpbHRlcl9ibG9ja3M7XG4gXHR1MTZcdFx0XHRcdG1pcnJvcl9wb3J0O1xuK1xuK1x0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWdcdFx0KmxhZ3M7XG4gfTtcbiBcbiBzdGF0aWMgaW5saW5lIGludCBkcGFhMl9zd2l0Y2hfZ2V0X2luZGV4KHN0cnVjdCBldGhzd19jb3JlICpldGhzdyxcbkBAIC0yNzQsNCArMzAwLDE4IEBAIGludCBkcGFhMl9zd2l0Y2hfYmxvY2tfb2ZmbG9hZF9taXJyb3Ioc3RydWN0IGRwYWEyX3N3aXRjaF9maWx0ZXJfYmxvY2sgKmJsb2NrLFxuIFxuIGludCBkcGFhMl9zd2l0Y2hfYmxvY2tfdW5vZmZsb2FkX21pcnJvcihzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZpbHRlcl9ibG9jayAqYmxvY2ssXG4gXHRcdFx0XHRcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdik7XG4rXG4rc3RhdGljIGlubGluZSBib29sXG4rZHBhYTJfc3dpdGNoX3BvcnRfb2ZmbG9hZHNfYnJpZGdlX3BvcnQoc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2LFxuK1x0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4re1xuK1x0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZyA9IHJjdV9kZXJlZmVyZW5jZV9ydG5sKHBvcnRfcHJpdi1cdTAwM2VsYWcpO1xuK1xuK1x0aWYgKGxhZyBcdTAwMjZcdTAwMjYgbGFnLVx1MDAzZWJvbmRfZGV2ID09IGRldilcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRpZiAocG9ydF9wcml2LVx1MDAzZW5ldGRldiA9PSBkZXYpXG4rXHRcdHJldHVybiB0cnVlO1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiAjZW5kaWZcdC8qIF9fRVRIU1dfSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LWNtZC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwc3ctY21kLmhcbmluZGV4IDM5N2Q1NWYyYmQ5OTUwLi45YTIwNTVjNjQ5ODNjZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LWNtZC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBzdy1jbWQuaFxuQEAgLTEyLDcgKzEyLDcgQEBcbiBcbiAvKiBEUFNXIFZlcnNpb24gKi9cbiAjZGVmaW5lIERQU1dfVkVSX01BSk9SXHRcdDhcbi0jZGVmaW5lIERQU1dfVkVSX01JTk9SXHRcdDlcbisjZGVmaW5lIERQU1dfVkVSX01JTk9SXHRcdDEzXG4gXG4gI2RlZmluZSBEUFNXX0NNRF9CQVNFX1ZFUlNJT05cdDFcbiAjZGVmaW5lIERQU1dfQ01EX1ZFUlNJT05fMlx0MlxuQEAgLTkyLDExICs5MiwxNCBAQFxuICNkZWZpbmUgRFBTV19DTURJRF9DVFJMX0lGX1NFVF9QT09MUyAgICAgICAgRFBTV19DTURfSUQoMHgwQTEpXG4gI2RlZmluZSBEUFNXX0NNRElEX0NUUkxfSUZfRU5BQkxFICAgICAgICAgICBEUFNXX0NNRF9JRCgweDBBMilcbiAjZGVmaW5lIERQU1dfQ01ESURfQ1RSTF9JRl9ESVNBQkxFICAgICAgICAgIERQU1dfQ01EX0lEKDB4MEEzKVxuKyNkZWZpbmUgRFBTV19DTURJRF9TRVRfTEFHICAgICAgICAgICAgICAgICAgRFBTV19DTURfVjIoMHgwQTQpXG4gI2RlZmluZSBEUFNXX0NNRElEX0NUUkxfSUZfU0VUX1FVRVVFICAgICAgICBEUFNXX0NNRF9JRCgweDBBNilcbiBcbiAjZGVmaW5lIERQU1dfQ01ESURfU0VUX0VHUkVTU19GTE9PRCAgICAgICAgIERQU1dfQ01EX0lEKDB4MEFDKVxuICNkZWZpbmUgRFBTV19DTURJRF9JRl9TRVRfTEVBUk5JTkdfTU9ERSAgICAgRFBTV19DTURfSUQoMHgwQUQpXG4gXG4rI2RlZmluZSBEUFNXX0NNRElEX0lGX1NFVF9MQUdfU1RBVEUgICAgICAgICBEUFNXX0NNRF9JRCgweDBCMClcbitcbiAvKiBNYWNyb3MgZm9yIGFjY2Vzc2luZyBjb21tYW5kIGZpZWxkcyBzbWFsbGVyIHRoYW4gMWJ5dGUgKi9cbiAjZGVmaW5lIERQU1dfTUFTSyhmaWVsZCkgICAgICAgIFxcXG4gXHRHRU5NQVNLKERQU1dfIyNmaWVsZCMjX1NISUZUICsgRFBTV18jI2ZpZWxkIyNfU0laRSAtIDEsIFxcXG5AQCAtNTUyLDUgKzU1NSwxOCBAQCBzdHJ1Y3QgZHBzd19jbWRfaWZfcmVmbGVjdGlvbiB7XG4gXHQvKiBvbmx5IDIgYml0cyBmcm9tIHRoZSBMU0IgKi9cbiBcdHU4IGZpbHRlcjtcbiB9O1xuK1xuK3N0cnVjdCBkcHN3X2NtZF9sYWcge1xuK1x0dTggZ3JvdXBfaWQ7XG4rXHR1OCBudW1faWZzO1xuK1x0dTggcGFkWzZdO1xuK1x0dTggaWZfaWRbRFBTV19NQVhfTEFHX0lGU107XG4rXHR1OCBwaGFzZTtcbit9O1xuK1xuK3N0cnVjdCBkcHN3X2NtZF9pZl9zZXRfbGFnX3N0YXRlIHtcbitcdF9fbGUxNiBpZl9pZDtcbitcdHU4IHR4X2VuYWJsZWQ7XG4rfTtcbiAjcHJhZ21hIHBhY2socG9wKVxuICNlbmRpZiAvKiBfX0ZTTF9EUFNXX0NNRF9IICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwc3cuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LmNcbmluZGV4IGFiOTIxZDc1ZGViMmU4Li5mNzVjYmRjZTQyYmEyZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LmNcbkBAIC0xNjU5LDMgKzE2NTksNjMgQEAgaW50IGRwc3dfaWZfcmVtb3ZlX3JlZmxlY3Rpb24oc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHUzMiBjbWRfZmxhZ3MsIHUxNiB0b2tlbixcbiBcbiBcdHJldHVybiBtY19zZW5kX2NvbW1hbmQobWNfaW8sIFx1MDAyNmNtZCk7XG4gfVxuK1xuKy8qKlxuKyAqIGRwc3dfbGFnX3NldCgpIC0gU2V0IExBRyBjb25maWd1cmF0aW9uXG4rICogQG1jX2lvOlx0UG9pbnRlciB0byBNQyBwb3J0YWwncyBJL08gb2JqZWN0XG4rICogQGNtZF9mbGFnczpcdENvbW1hbmQgZmxhZ3M7IG9uZSBvciBtb3JlIG9mICdNQ19DTURfRkxBR18nXG4rICogQHRva2VuOlx0VG9rZW4gb2YgRFBTVyBvYmplY3RcbisgKiBAY2ZnOlx0cG9pbnRlciB0byBMQUcgY29uZmlndXJhdGlvblxuKyAqXG4rICogUmV0dXJuOiAgICcwJyBvbiBTdWNjZXNzOyBFcnJvciBjb2RlIG90aGVyd2lzZS5cbisgKi9cbitpbnQgZHBzd19sYWdfc2V0KHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLCB1MzIgY21kX2ZsYWdzLCB1MTYgdG9rZW4sXG4rXHRcdCBjb25zdCBzdHJ1Y3QgZHBzd19sYWdfY2ZnICpjZmcpXG4re1xuK1x0c3RydWN0IGZzbF9tY19jb21tYW5kIGNtZCA9IHsgMCB9O1xuK1x0c3RydWN0IGRwc3dfY21kX2xhZyAqY21kX3BhcmFtcztcbitcdGludCBpID0gMDtcbitcbitcdGNtZC5oZWFkZXIgPSBtY19lbmNvZGVfY21kX2hlYWRlcihEUFNXX0NNRElEX1NFVF9MQUcsIGNtZF9mbGFncywgdG9rZW4pO1xuK1xuK1x0aWYgKGNmZy1cdTAwM2VudW1faWZzIFx1MDAzZSBEUFNXX01BWF9MQUdfSUZTKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRjbWRfcGFyYW1zID0gKHN0cnVjdCBkcHN3X2NtZF9sYWcgKiljbWQucGFyYW1zO1xuK1x0Y21kX3BhcmFtcy1cdTAwM2Vncm91cF9pZCA9IGNmZy1cdTAwM2Vncm91cF9pZDtcbitcdGNtZF9wYXJhbXMtXHUwMDNlbnVtX2lmcyA9IGNmZy1cdTAwM2VudW1faWZzO1xuK1x0Y21kX3BhcmFtcy1cdTAwM2VwaGFzZSA9IGNmZy1cdTAwM2VwaGFzZTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNmZy1cdTAwM2VudW1faWZzOyBpKyspXG4rXHRcdGNtZF9wYXJhbXMtXHUwMDNlaWZfaWRbaV0gPSBjZmctXHUwMDNlaWZfaWRbaV07XG4rXG4rXHRyZXR1cm4gbWNfc2VuZF9jb21tYW5kKG1jX2lvLCBcdTAwMjZjbWQpO1xuK31cbitcbisvKipcbisgKiBkcHN3X2lmX3NldF9sYWdfc3RhdGUoKSAtIENoYW5nZSBwZXIgcG9ydCBMQUcgc3RhdGVcbisgKiBAbWNfaW86ICAgICAgUG9pbnRlciB0byBNQyBwb3J0YWwncyBJL08gb2JqZWN0XG4rICogQGNtZF9mbGFnczogIENvbW1hbmQgZmxhZ3M7IG9uZSBvciBtb3JlIG9mICdNQ19DTURfRkxBR18nXG4rICogQHRva2VuOiAgICAgIFRva2VuIG9mIERQU1cgb2JqZWN0XG4rICogQGlmX2lkOiAgICAgIElEIG9mIHRoZSBzd2l0Y2ggaW50ZXJmYWNlXG4rICogQHR4X2VuYWJsZWQ6IFZhbHVlIG9mIHRoZSBwZXIgcG9ydCBMQUcgc3RhdGVcbisgKiAgICAgLSAwIGlmIHRoZSBpbnRlcmZhY2Ugd2lsbCBub3QgYmUgYWN0aXZlIGFzIHBhcnQgb2YgdGhlIExBRyBncm91cFxuKyAqICAgICAtIDEgaWYgdGhlIGludGVyZmFjZSB3aWxsIGJlIGFjdGl2ZSBpbiB0aGUgTEFHIGdyb3VwXG4rICpcbisgKiBSZXR1cm46ICAgJzAnIG9uIFN1Y2Nlc3M7IEVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuKyAqL1xuK2ludCBkcHN3X2lmX3NldF9sYWdfc3RhdGUoc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHUzMiBjbWRfZmxhZ3MsIHUxNiB0b2tlbixcbitcdFx0XHQgIHUxNiBpZl9pZCwgdTggdHhfZW5hYmxlZClcbit7XG4rXHRzdHJ1Y3QgZHBzd19jbWRfaWZfc2V0X2xhZ19zdGF0ZSAqY21kX3BhcmFtcztcbitcdHN0cnVjdCBmc2xfbWNfY29tbWFuZCBjbWQgPSB7IDAgfTtcbitcbitcdGNtZC5oZWFkZXIgPSBtY19lbmNvZGVfY21kX2hlYWRlcihEUFNXX0NNRElEX0lGX1NFVF9MQUdfU1RBVEUsXG4rXHRcdFx0XHRcdCAgY21kX2ZsYWdzLCB0b2tlbik7XG4rXG4rXHRjbWRfcGFyYW1zID0gKHN0cnVjdCBkcHN3X2NtZF9pZl9zZXRfbGFnX3N0YXRlICopY21kLnBhcmFtcztcbitcdGNtZF9wYXJhbXMtXHUwMDNlaWZfaWQgPSBjcHVfdG9fbGUxNihpZl9pZCk7XG4rXHRjbWRfcGFyYW1zLVx1MDAzZXR4X2VuYWJsZWQgPSB0eF9lbmFibGVkO1xuK1xuK1x0cmV0dXJuIG1jX3NlbmRfY29tbWFuZChtY19pbywgXHUwMDI2Y21kKTtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwc3cuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LmhcbmluZGV4IGI5MGJkMzYzZjQ3YTE5Li44OWYwMjY3ZGU4ZTliZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LmhcbkBAIC0yMCw2ICsyMCw4IEBAIHN0cnVjdCBmc2xfbWNfaW87XG4gXG4gI2RlZmluZSBEUFNXX01BWF9JRlx0XHQ2NFxuIFxuKyNkZWZpbmUgRFBTV19NQVhfTEFHX0lGU1x0OFxuK1xuIGludCBkcHN3X29wZW4oc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHUzMiBjbWRfZmxhZ3MsIGludCBkcHN3X2lkLCB1MTYgKnRva2VuKTtcbiBcbiBpbnQgZHBzd19jbG9zZShzdHJ1Y3QgZnNsX21jX2lvICptY19pbywgdTMyIGNtZF9mbGFncywgdTE2IHRva2VuKTtcbkBAIC03ODgsNCArNzkwLDMyIEBAIGludCBkcHN3X2lmX2FkZF9yZWZsZWN0aW9uKHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLCB1MzIgY21kX2ZsYWdzLCB1MTYgdG9rZW4sXG4gXG4gaW50IGRwc3dfaWZfcmVtb3ZlX3JlZmxlY3Rpb24oc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHUzMiBjbWRfZmxhZ3MsIHUxNiB0b2tlbixcbiBcdFx0XHQgICAgICB1MTYgaWZfaWQsIGNvbnN0IHN0cnVjdCBkcHN3X3JlZmxlY3Rpb25fY2ZnICpjZmcpO1xuK1xuKy8qIExpbmsgQWdncmVnYXRpb24gR3JvdXAgY29uZmlndXJhdGlvbiAqL1xuK1xuKyNkZWZpbmUgRFBTV19MQUdfU0VUX1BIQVNFX0FQUExZIDBcbisjZGVmaW5lIERQU1dfTEFHX1NFVF9QSEFTRV9DSEVDSyAxXG4rXG4rLyoqXG4rICogc3RydWN0IGRwc3dfbGFnX2NmZyAtIENvbmZpZ3VyYXRpb24gc3RydWN0dXJlIGZvciBhIExBRyBncm91cFxuKyAqIEBncm91cF9pZDogTGluayBhZ2dyZWdhdGlvbiBncm91cCBJRC4gVmFsaWQgdmFsdWVzIGFyZSBpbiB0aGVcbisgKiBbMSwgRFBTV19NQVhfTEFHX0lGU10gcmFuZ2UuXG4rICogQG51bV9pZnM6IE51bWJlciBvZiBpbnRlcmZhY2VzIGluIHRoaXMgTEFHIGdyb3VwLCB2YWxpZCByYW5nZSBpc1xuKyAqIFswLCBEUFNXX01BWF9MQUdfSUZTXS5cbisgKiBAaWZfaWQ6IEFycmF5IGNvbnRhaW5pbmcgdGhlIGludGVyZmFjZSBJRHMgb2YgdGhlIHBvcnRzIHBhcnQgb2YgYSBMQUcgZ3JvdXBcbisgKiBAcGhhc2U6IFVzZSBEUFNXX0xBR19TRVRfUEhBU0VfQVBQTFkgZm9yIExBRyBjb25maWd1cmF0aW9uIHByb2Nlc3Npbmcgb3JcbisgKiBEUFNXX0xBR19TRVRfUEhBU0VfQ0hFQ0sgZm9yIExBRyBjb25maWd1cmF0aW9uIHZhbGlkYXRpb24uXG4rICovXG4rc3RydWN0IGRwc3dfbGFnX2NmZyB7XG4rXHR1OCBncm91cF9pZDtcbitcdHU4IG51bV9pZnM7XG4rXHR1OCBpZl9pZFtEUFNXX01BWF9MQUdfSUZTXTtcbitcdHU4IHBoYXNlO1xuK307XG4rXG4raW50IGRwc3dfbGFnX3NldChzdHJ1Y3QgZnNsX21jX2lvICptY19pbywgdTMyIGNtZF9mbGFncywgdTE2IHRva2VuLFxuK1x0XHQgY29uc3Qgc3RydWN0IGRwc3dfbGFnX2NmZyAqY2ZnKTtcbitcbitpbnQgZHBzd19pZl9zZXRfbGFnX3N0YXRlKHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLCB1MzIgY21kX2ZsYWdzLCB1MTYgdG9rZW4sXG4rXHRcdFx0ICB1MTYgaWZfaWQsIHU4IHR4X2VuYWJsZWQpO1xuICNlbmRpZiAvKiBfX0ZTTF9EUFNXX0ggKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjUyOjEyLjExMjQ5ODM2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMxNjYzMDU0NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgRFBBQTIgTEFHIE9mZmxvYWQgQ29kZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBMaW5rIEFnZ3JlZ2F0aW9uIEdyb3VwIChMQUcpIG9mZmxvYWQgc3VwcG9ydCB0byB0aGUgRnJlZXNjYWxlIERQQUEyIHN3aXRjaCBkcml2ZXIsIHdoaWNoIGlzIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guY2AuIEl0J3MgaW1wbGVtZW50aW5nIG5ldyBmdW5jdGlvbnMgbGlrZSBgZHBhYTJfc3dpdGNoX2xhZ19nZXRfdW51c2VkYCwgYGRwYWEyX3N3aXRjaF9sYWdfZmRiX2FkZGAsIGFuZCBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIG9uZXMgbGlrZSBgZHBhYTJfc3dpdGNoX3BvcnRfbmV0ZGV2aWNlX2V2ZW50YCB0byBoYW5kbGUgYE5FVERFVl9DSEFOR0VVUFBFUmAgYW5kIGBORVRERVZfQ0hBTkdFTE9XRVJTVEFURWAuIFRoZSBjb3JlIG9mIHRoZSBkcml2ZXIgc2VlbXMgdG8gYmUgaW50ZXJhY3RpbmcgZGlyZWN0bHkgd2l0aCB0aGUgaGFyZHdhcmUsIGEgRnJlZXNjYWxlIERQQUEyIHN3aXRjaC5cblxuTXkgZmlyc3QgdGhvdWdodCBpcywgY2FuIEkgZXZlbiAqdGVzdCogdGhpcyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGlzIGRyaXZlciBpcyBzcGVjaWZpYyB0byB0aGUgRFBBQTIgYXJjaGl0ZWN0dXJlLCB0eXBpY2FsbHkgZm91bmQgb24gQVJNNjQtYmFzZWQgTlhQIExheWVyc2NhcGUgU29Dcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBpbiBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSAoR0NFKSwgd2hpY2ggYXJlIG15IHVzdWFsIHRlc3RpbmcgZ3JvdW5kcy5cblxuVGhlIGBkcGFhMl9zd2l0Y2hfcHJvYmVgIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgZGV2aWNlIG1hdGNoaW5nIHRoZSBmc2wtbWMgYnVzIGlzIGRldGVjdGVkLiBOb3csIHRoZSBmc2wtbWMgYnVzIGlzIGEgTlhQLXNwZWNpZmljIGJ1cy4gSSBoYXZlIHRvIHNlZSBpZiB0aGVyZSdzIGFueSBzb2Z0d2FyZSBlbXVsYXRpb24gb2YgdGhhdCBidXMgd2l0aGluIFFFTVUuIFVzdWFsbHksIEknZCBjaGVjayBhIHN0YW5kYXJkIHN5emthbGxlciBzZXR1cCwgYnV0IEkgZG91YnQgaXQgaGFzIGFueSBOWFAtc3BlY2lmaWMgZW11bGF0aW9uLlxuXG5JJ2xsIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gQXJlIGBDT05GSUdfRlNMX01DX0JVU2AgYW5kIGBDT05GSUdfRlNMX0RQQUEyX1NXSVRDSGAgZXZlbiBlbmFibGluZyBhbnl0aGluZyBtZWFuaW5nZnVsIHdpdGhvdXQgdGhlIGFjdHVhbCBoYXJkd2FyZT8gU2luY2Ugc3l6a2FsbGVyIGlzbid0IHNldCB1cCBmb3IgTlhQIGhhcmR3YXJlLCB0aGUgcXVlc3Rpb24gaXMsIGhvdyBjYW4gSSBldmVuIHJlYWNoIHRoaXMgY29kZT9cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBpbiBgZHBhYTItc3dpdGNoLmNgLiBBaCwgeWVzLCBpdCAqZGVwZW5kcyBvbiogYEZTTF9NQ19CVVNgIGFuZCBgRlNMX0RQQUEyX1NXSVRDSGAuIFNvLCBpdCBsb29rcyBsaWtlIGBkcGFhMl9zd2l0Y2hfcHJvYmVgICpyZXF1aXJlcyogdGhlIGZzbC1tYyBidXMgdG8gYmUgcHJlc2VudCB0byBydW4uIFRoZSBmc2wtbWMgYnVzIGRldmljZXMgYXJlIHR5cGljYWxseSBwb3B1bGF0ZWQgYnkgdGhlIGZpcm13YXJlIG9yIHRoZSBkZXZpY2UgdHJlZSBvbiBhbiBOWFAgU29DLlxuXG5Pa2F5LCBJIHRoaW5rIEkgaGF2ZSBpdC4gSXQncyBlc3NlbnRpYWxseSBpbXBvc3NpYmxlIHRvIHJlYWNoIHRoaXMgY29kZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHQ0UgKndpdGhvdXQqIHNwZWNpZmljIGhhcmR3YXJlIGVtdWxhdGlvbiBvZiB0aGUgZnNsLW1jIGJ1cyBhbmQgRFBBQTIgaGFyZHdhcmUuIFRoaXMgd291bGQgbWVhbiBJIHdvdWxkIGhhdmUgdG8gY3JlYXRlIGN1c3RvbSBlbXVsYXRpb24gc3BlY2lmaWMgdG8gdGhlIERQQUEyIGhhcmR3YXJlIHRvIHJlYWNoIHRoaXMgbmV3IGNvZGUsIHdoaWNoIGlzIGJleW9uZCB0aGUgc2NvcGUgb2YgYSBzdGFuZGFyZCBmdXp6aW5nIGVmZm9ydC5cblxuTGV0J3MgZG91YmxlLWNoZWNrLiBJJ2xsIHVzZSBgZ3JlcHBlcmAgdG8gc2VhcmNoIHRocm91Z2ggYGRyaXZlcnMvYCBhbmQgYHRvb2xzL2AgZm9yIG1lbnRpb25zIG9mIGBmc2wtbWNgIG9yIGBkcGFhMmAgdG8gc2VlIGlmIHRoZXJlJ3MgKmFueSogbW9jayBpbXBsZW1lbnRhdGlvbiBvciBhbnkgc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGUgZGV2aWNlLCBidXQgSSBhbSBub3QgdmVyeSBob3BlZnVsLiBUaGlzIHBhdGNoIHNob3VsZCB0aGVyZWZvcmUgaGF2ZSBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxNjYsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMTo1MjoyNS4yNzg4MDcyODVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcwNjM2NDYzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmc2wtbWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9idXMvS2NvbmZpZz0yNDI9Y29uZmlnIERBOFhYX01TVFBSSVxcbi0tXFxuZHJpdmVycy9idXMvS2NvbmZpZy0yNDktXFxuZHJpdmVycy9idXMvS2NvbmZpZzoyNTA6c291cmNlIFxcXCJkcml2ZXJzL2J1cy9mc2wtbWMvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL2J1cy9LY29uZmlnLTI1MS1zb3VyY2UgXFxcImRyaXZlcnMvYnVzL21oaS9LY29uZmlnXFxcIlxcbi0tXFxuZHJpdmVycy9idXMvTWFrZWZpbGU9MTE9b2JqLSQoQ09ORklHX01PWFRFVClcXHRcXHQrPSBtb3h0ZXQub1xcbmRyaXZlcnMvYnVzL01ha2VmaWxlLTEyLVxcbmRyaXZlcnMvYnVzL01ha2VmaWxlOjEzOiMgRFBBQTIgZnNsLW1jIGJ1c1xcbmRyaXZlcnMvYnVzL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19GU0xfTUNfQlVTKVxcdCs9IGZzbC1tYy9cXG5kcml2ZXJzL2J1cy9NYWtlZmlsZS0xNS1cXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9LY29uZmlnLTItI1xcbmRyaXZlcnMvYnVzL2ZzbC1tYy9LY29uZmlnOjM6IyBEUEFBMiBmc2wtbWMgYnVzXFxuZHJpdmVycy9idXMvZnNsLW1jL0tjb25maWctNC0jXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvS2NvbmZpZz04PWNvbmZpZyBGU0xfTUNfQlVTXFxuZHJpdmVycy9idXMvZnNsLW1jL0tjb25maWc6OTpcXHRib29sIFxcXCJRb3JJUSBEUEFBMiBmc2wtbWMgYnVzIGRyaXZlclxcXCJcXG5kcml2ZXJzL2J1cy9mc2wtbWMvS2NvbmZpZy0xMC1cXHRkZXBlbmRzIG9uIE9GIFxcdTAwMjZcXHUwMDI2IChBUkNIX0xBWUVSU0NBUEUgfHwgKENPTVBJTEVfVEVTVCBcXHUwMDI2XFx1MDAyNiAoQVJNIHx8IEFSTTY0IHx8IFg4Nl9MT0NBTF9BUElDIHx8IFBQQykpKVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL0tjb25maWctMTMtXFx0ICBEcml2ZXIgdG8gZW5hYmxlIHRoZSBidXMgaW5mcmFzdHJ1Y3R1cmUgZm9yIHRoZSBRb3JJUSBEUEFBMlxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9LY29uZmlnOjE0OlxcdCAgYXJjaGl0ZWN0dXJlLiAgVGhlIGZzbC1tYyBidXMgZHJpdmVyIGhhbmRsZXMgZGlzY292ZXJ5IG9mXFxuZHJpdmVycy9idXMvZnNsLW1jL0tjb25maWctMTUtXFx0ICBEUEFBMiBvYmplY3RzICh3aGljaCBhcmUgcmVwcmVzZW50ZWQgYXMgTGludXggZGV2aWNlcykgYW5kXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvTWFrZWZpbGU9Nz1vYmotJChDT05GSUdfRlNMX01DX0JVUykgKz0gbWMtYnVzLWRyaXZlci5vXFxuZHJpdmVycy9idXMvZnNsLW1jL01ha2VmaWxlLTgtXFxuZHJpdmVycy9idXMvZnNsLW1jL01ha2VmaWxlOjk6bWMtYnVzLWRyaXZlci1vYmpzIDo9IGZzbC1tYy1idXMubyBcXFxcXFxuZHJpdmVycy9idXMvZnNsLW1jL01ha2VmaWxlLTEwLVxcdFxcdCAgICAgIG1jLXN5cy5vIFxcXFxcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9NYWtlZmlsZS0xNS1cXHRcXHQgICAgICBkcHJjLWRyaXZlci5vIFxcXFxcXG5kcml2ZXJzL2J1cy9mc2wtbWMvTWFrZWZpbGU6MTY6XFx0XFx0ICAgICAgZnNsLW1jLWFsbG9jYXRvci5vIFxcXFxcXG5kcml2ZXJzL2J1cy9mc2wtbWMvTWFrZWZpbGU6MTc6XFx0XFx0ICAgICAgZnNsLW1jLW1zaS5vIFxcXFxcXG5kcml2ZXJzL2J1cy9mc2wtbWMvTWFrZWZpbGUtMTgtXFx0XFx0ICAgICAgZHBtY3AubyBcXFxcXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvTWFrZWZpbGUtMjEtIyBNQyB1c2Vyc3BhY2Ugc3VwcG9ydFxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9NYWtlZmlsZToyMjpvYmotJChDT05GSUdfRlNMX01DX1VBUElfU1VQUE9SVCkgKz0gZnNsLW1jLXVhcGkub1xcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwYnAuYy04LVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcGJwLmM6OTojaW5jbHVkZSBcXFwiZnNsLW1jLXByaXZhdGUuaFxcXCJcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHBicC5jLTEwLVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwY29uLmMtOC1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHBjb24uYzo5OiNpbmNsdWRlIFxcXCJmc2wtbWMtcHJpdmF0ZS5oXFxcIlxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcGNvbi5jLTEwLVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwbWNwLmMtOC1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHBtY3AuYzo5OiNpbmNsdWRlIFxcXCJmc2wtbWMtcHJpdmF0ZS5oXFxcIlxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcG1jcC5jLTEwLVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtMTUtXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM6MTY6I2luY2x1ZGUgXFxcImZzbC1tYy1wcml2YXRlLmhcXFwiXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtMTctXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYz02OD1zdGF0aWMgaW50IF9fZnNsX21jX2RldmljZV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtNzktICpcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYzo4MDogKiBAbWNfYnVzX2RldjogcG9pbnRlciB0byB0aGUgZnNsLW1jIGRldmljZSB0aGF0IHJlcHJlc2VudHMgYSBEUFJDIG9iamVjdFxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTgxLSAqIEBvYmpfZGVzY19hcnJheTogYXJyYXkgb2Ygb2JqZWN0IGRlc2NyaXB0b3JzIGZvciBjaGlsZCBvYmplY3RzIGN1cnJlbnRseVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM9MTIzPXN0cnVjdCBmc2xfbWNfZGV2aWNlICpmc2xfbWNfZGV2aWNlX2xvb2t1cChzdHJ1Y3QgZnNsX21jX29ial9kZXNjICpvYmpfZGVzYyxcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTEzNi0gKlxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jOjEzNzogKiBAbWNfZGV2OiBwb2ludGVyIHRvIHRoZSBmc2wtbWMgZGV2aWNlIGZvciBhIGdpdmVuIE1DIG9iamVjdFxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTEzOC0gKiBAb2JqX2Rlc2M6IHBvaW50ZXIgdG8gdGhlIE1DIG9iamVjdCdzIGRlc2NyaXB0b3IgaW4gdGhlIE1DXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtMTM5LSAqXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM6MTQwOiAqIElmIHRoZSBwbHVnZ2VkIHN0YXRlIGhhcyBjaGFuZ2VkIGZyb20gdW5wbHVnZ2VkIHRvIHBsdWdnZWQsIHRoZSBmc2wtbWNcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYy0xNDEtICogZGV2aWNlIGlzIGJvdW5kIHRvIHRoZSBjb3JyZXNwb25kaW5nIGRldmljZSBkcml2ZXIuXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM6MTQyOiAqIElmIHRoZSBwbHVnZ2VkIHN0YXRlIGhhcyBjaGFuZ2VkIGZyb20gcGx1Z2dlZCB0byB1bnBsdWdnZWQsIHRoZSBmc2wtbWNcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYy0xNDMtICogZGV2aWNlIGlzIHVuYm91bmQgZnJvbSB0aGUgY29ycmVzcG9uZGluZyBkZXZpY2UgZHJpdmVyLlxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM9MTY5PXN0YXRpYyB2b2lkIGZzbF9tY19vYmpfZGV2aWNlX2FkZChzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfYnVzX2RldixcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTE5Mi0gKlxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jOjE5MzogKiBAbWNfYnVzX2RldjogcG9pbnRlciB0byB0aGUgZnNsLW1jIGRldmljZSB0aGF0IHJlcHJlc2VudHMgYSBEUFJDIG9iamVjdFxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTE5NC0gKiBAb2JqX2Rlc2NfYXJyYXk6IGFycmF5IG9mIGRldmljZSBkZXNjcmlwdG9ycyBmb3IgY2hpbGQgZGV2aWNlcyBjdXJyZW50bHlcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jPTIwMj1zdGF0aWMgdm9pZCBkcHJjX2FkZF9uZXdfZGV2aWNlcyhzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfYnVzX2RldixcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTIyOC0gKlxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jOjIyOTogKiBAbWNfYnVzX2RldjogcG9pbnRlciB0byB0aGUgZnNsLW1jIGRldmljZSB0aGF0IHJlcHJlc2VudHMgYSBEUFJDIG9iamVjdFxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTIzMC0gKiBAYWxsb2NfaW50ZXJydXB0czogaWYgdHJ1ZSB0aGUgZnVuY3Rpb24gYWxsb2NhdGVzIHRoZSBpbnRlcnJ1cHQgcG9vbCxcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jPTI0NT1pbnQgZHByY19zY2FuX29iamVjdHMoc3RydWN0IGZzbF9tY19kZXZpY2UgKm1jX2J1c19kZXYsXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYy0zNTYtICpcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYzozNTc6ICogQG1jX2J1c19kZXY6IHBvaW50ZXIgdG8gdGhlIGZzbC1tYyBkZXZpY2UgdGhhdCByZXByZXNlbnRzIGEgRFBSQyBvYmplY3RcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYy0zNTgtICogQGFsbG9jX2ludGVycnVwdHM6IGlmIHRydWUgdGhlIGZ1bmN0aW9uIGFsbG9jYXRlcyB0aGUgaW50ZXJydXB0IHBvb2wsXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYz01NzI9c3RhdGljIGludCBkcHJjX3NldHVwX2lycShzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfZGV2KVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtNjAxLSAqXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM6NjAyOiAqIEBtY19kZXY6IFBvaW50ZXIgdG8gZnNsLW1jIGRldmljZSByZXByZXNlbnRpbmcgYSBEUFJDXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtNjAzLSAqXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYz03MTE9RVhQT1JUX1NZTUJPTF9HUEwoZHByY19zZXR1cCk7XFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYy03MTUtICpcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYzo3MTY6ICogQG1jX2RldjogUG9pbnRlciB0byBmc2wtbWMgZGV2aWNlIHJlcHJlc2VudGluZyBhIERQUkNcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYy03MTctICpcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jPTc1OD1zdGF0aWMgdm9pZCBkcHJjX3RlYXJkb3duX2lycShzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfZGV2KVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtNzcxLSAqXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM6NzcyOiAqIEBtY19kZXY6IFBvaW50ZXIgdG8gZnNsLW1jIGRldmljZSByZXByZXNlbnRpbmcgdGhlIERQUkNcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYy03NzMtICpcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jPTgxNT1FWFBPUlRfU1lNQk9MX0dQTChkcHJjX2NsZWFudXApO1xcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtODE5LSAqXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM6ODIwOiAqIEBtY19kZXY6IFBvaW50ZXIgdG8gZnNsLW1jIGRldmljZSByZXByZXNlbnRpbmcgdGhlIERQUkNcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYy04MjEtICpcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLmMtOS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy5jOjEwOiNpbmNsdWRlIFxcXCJmc2wtbWMtcHJpdmF0ZS5oXFxcIlxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLmMtMTEtXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTItLypcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jOjM6ICogZnNsLW1jIG9iamVjdCBhbGxvY2F0b3IgZHJpdmVyXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYy00LSAqXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTEyLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM6MTM6I2luY2x1ZGUgXFxcImZzbC1tYy1wcml2YXRlLmhcXFwiXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYy0xNC1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jPTE1PXN0YXRpYyBib29sIF9fbXVzdF9jaGVjayBmc2xfbWNfaXNfYWxsb2NhdGFibGUoc3RydWN0IGZzbF9tY19kZXZpY2UgKm1jX2RldilcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtMjMtICogZnNsX21jX3Jlc291cmNlX3Bvb2xfYWRkX2RldmljZSAtIGFkZCBhbGxvY2F0YWJsZSBvYmplY3QgdG8gYSByZXNvdXJjZVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM6MjQ6ICogcG9vbCBvZiBhIGdpdmVuIGZzbC1tYyBidXNcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTI1LSAqXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYzoyNjogKiBAbWNfYnVzOiBwb2ludGVyIHRvIHRoZSBmc2wtbWMgYnVzXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYy0yNy0gKiBAcG9vbF90eXBlOiBwb29sIHR5cGVcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jOjI4OiAqIEBtY19kZXY6IHBvaW50ZXIgdG8gYWxsb2NhdGFibGUgZnNsLW1jIGRldmljZVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtMjktICovXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYz0zMD1zdGF0aWMgaW50IF9fbXVzdF9jaGVjayBmc2xfbWNfcmVzb3VyY2VfcG9vbF9hZGRfZGV2aWNlKHN0cnVjdCBmc2xfbWNfYnVzXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTkxLSAqXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYzo5MjogKiBAbWNfZGV2OiBwb2ludGVyIHRvIGFsbG9jYXRhYmxlIGZzbC1tYyBkZXZpY2VcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTkzLSAqXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYzo5NDogKiBJdCBwZXJtYW5lbnRseSByZW1vdmVzIGFuIGFsbG9jYXRhYmxlIGZzbC1tYyBkZXZpY2UgZnJvbSB0aGUgcmVzb3VyY2VcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTk1LSAqIHBvb2wuIEl0J3MgYW4gZXJyb3IgaWYgdGhlIGRldmljZSBpcyBpbiB1c2UuXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jPTI1ND1FWFBPUlRfU1lNQk9MX0dQTChmc2xfbWNfcmVzb3VyY2VfZnJlZSk7XFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTI1Ni0vKipcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jOjI1NzogKiBmc2xfbWNfb2JqZWN0X2FsbG9jYXRlIC0gQWxsb2NhdGVzIGFuIGZzbC1tYyBvYmplY3Qgb2YgdGhlIGdpdmVuXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYzoyNTg6ICogcG9vbCB0eXBlIGZyb20gYSBnaXZlbiBmc2wtbWMgYnVzIGluc3RhbmNlXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYy0yNTktICpcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jOjI2MDogKiBAbWNfZGV2OiBmc2wtbWMgZGV2aWNlIHdoaWNoIGlzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGVcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTI2MS0gKiBhbGxvY2F0ZWQgb2JqZWN0XFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jPTMyMj1FWFBPUlRfU1lNQk9MX0dQTChmc2xfbWNfb2JqZWN0X2FsbG9jYXRlKTtcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtMzI0LS8qKlxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM6MzI1OiAqIGZzbF9tY19vYmplY3RfZnJlZSAtIFJldHVybnMgYW4gZnNsLW1jIG9iamVjdCB0byB0aGUgcmVzb3VyY2VcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTMyNi0gKiBwb29sIHdoZXJlIGl0IGNhbWUgZnJvbS5cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jOjMyNzogKiBAbWNfYWRldjogUG9pbnRlciB0byB0aGUgZnNsLW1jIGRldmljZVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtMzI4LSAqL1xcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYz0zNDM9RVhQT1JUX1NZTUJPTF9HUEwoZnNsX21jX29iamVjdF9mcmVlKTtcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtMzUxLS8qXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYzozNTI6ICogSW5pdGlhbGl6ZSB0aGUgaW50ZXJydXB0IHBvb2wgYXNzb2NpYXRlZCB3aXRoIGFuIGZzbC1tYyBidXMuXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYy0zNTMtICogSXQgYWxsb2NhdGVzIGEgYmxvY2sgb2YgSVJRcyBmcm9tIHRoZSBHSUMtSVRTLlxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYz00MTE9RVhQT1JUX1NZTUJPTF9HUEwoZnNsX21jX3BvcHVsYXRlX2lycV9wb29sKTtcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtNDEzLS8qXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYzo0MTQ6ICogVGVhcmRvd24gdGhlIGludGVycnVwdCBwb29sIGFzc29jaWF0ZWQgd2l0aCBhbiBmc2wtbWMgYnVzLlxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtNDE1LSAqIEl0IGZyZWVzIHRoZSBJUlFzIHRoYXQgd2VyZSBhbGxvY2F0ZWQgdG8gdGhlIHBvb2wsIGJhY2sgdG8gdGhlIEdJQy1JVFMuXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jPTQzOD1FWFBPUlRfU1lNQk9MX0dQTChmc2xfbWNfY2xlYW51cF9pcnFfcG9vbCk7XFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTQ0MC0vKlxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM6NDQxOiAqIEFsbG9jYXRlIHRoZSBJUlFzIHJlcXVpcmVkIGJ5IGEgZ2l2ZW4gZnNsLW1jIGRldmljZS5cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTQ0Mi0gKi9cXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM9NTA2PUVYUE9SVF9TWU1CT0xfR1BMKGZzbF9tY19hbGxvY2F0ZV9pcnFzKTtcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtNTA4LS8qXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYzo1MDk6ICogRnJlZXMgdGhlIElSUXMgdGhhdCB3ZXJlIGFsbG9jYXRlZCBmb3IgYW4gZnNsLW1jIGRldmljZS5cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTUxMC0gKi9cXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM9NTYyPXN0YXRpYyBpbnQgZnNsX21jX2FsbG9jYXRvcl9wcm9iZShzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfZGV2KVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYy01ODUtXFx0ZGV2X2RiZyhcXHUwMDI2bWNfZGV2LVxcdTAwM2VkZXYsXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYzo1ODY6XFx0XFx0XFxcIkFsbG9jYXRhYmxlIGZzbC1tYyBkZXZpY2UgYm91bmQgdG8gZnNsX21jX2FsbG9jYXRvciBkcml2ZXJcXFwiKTtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTU4Ny1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM9NTk0PXN0YXRpYyB2b2lkIGZzbF9tY19hbGxvY2F0b3JfcmVtb3ZlKHN0cnVjdCBmc2xfbWNfZGV2aWNlICptY19kZXYpXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTYwNC1cXHRkZXZfZGJnKFxcdTAwMjZtY19kZXYtXFx1MDAzZWRldixcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jOjYwNTpcXHRcXHRcXFwiQWxsb2NhdGFibGUgZnNsLW1jIGRldmljZSB1bmJvdW5kIGZyb20gZnNsX21jX2FsbG9jYXRvciBkcml2ZXJcXFwiKTtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTYwNi19XFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEwLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTE6I2RlZmluZSBwcl9mbXQoZm10KSBcXFwiZnNsLW1jOiBcXFwiIGZtdFxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTItXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTI1LVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MjY6I2luY2x1ZGUgXFxcImZzbC1tYy1wcml2YXRlLmhcXFwiXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0yNy1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTI4LS8qXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoyOTogKiBEZWZhdWx0IERNQSBtYXNrIGZvciBkZXZpY2VzIG9uIGEgZnNsLW1jIGJ1c1xcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMzAtICovXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTMzPXN0YXRpYyBzdHJ1Y3QgZnNsX21jX3ZlcnNpb24gbWNfdmVyc2lvbjtcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMzYtICogc3RydWN0IGZzbF9tYyAtIFByaXZhdGUgZGF0YSBvZiBhIFxcXCJmc2wscW9yaXEtbWNcXFwiIHBsYXRmb3JtIGRldmljZVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6Mzc6ICogQHJvb3RfbWNfYnVzX2RldjogZnNsLW1jIGRldmljZSByZXByZXNlbnRpbmcgdGhlIHJvb3QgRFBSQ1xcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMzgtICogQG51bV90cmFuc2xhdGlvbl9yYW5nZXM6IG51bWJlciBvZiBlbnRyaWVzIGluIGFkZHJfdHJhbnNsYXRpb25fcmFuZ2VzXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTgwPXN0YXRpYyBwaHlzX2FkZHJfdCBtY19wb3J0YWxfYmFzZV9waHlzX2FkZHI7XFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTgzLSAqIGZzbF9tY19idXNfbWF0Y2ggLSBkZXZpY2UgdG8gZHJpdmVyIG1hdGNoaW5nIGNhbGxiYWNrXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzo4NDogKiBAZGV2OiB0aGUgZnNsLW1jIGRldmljZSB0byBtYXRjaCBhZ2FpbnN0XFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzo4NTogKiBAZHJ2OiB0aGUgZGV2aWNlIGRyaXZlciB0byBzZWFyY2ggZm9yIG1hdGNoaW5nIGZzbC1tYyBvYmplY3QgdHlwZVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtODYtICogc3RydWN0dXJlc1xcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0xMzk9c3RhdGljIGludCBmc2xfbWNfYnVzX3VldmVudChjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudilcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTQyLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTQzOlxcdGlmIChhZGRfdWV2ZW50X3ZhcihlbnYsIFxcXCJNT0RBTElBUz1mc2wtbWM6diUwOFhkJXNcXFwiLFxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTQ0LVxcdFxcdFxcdCAgIG1jX2Rldi1cXHUwMDNlb2JqX2Rlc2MudmVuZG9yLFxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0yMTQ9c3RhdGljIHNzaXplX3QgbW9kYWxpYXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0yMTgtXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoyMTk6XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiZnNsLW1jOnYlMDhYZCVzXFxcXG5cXFwiLCBtY19kZXYtXFx1MDAzZW9ial9kZXNjLnZlbmRvcixcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTIyMC1cXHRcXHRcXHRtY19kZXYtXFx1MDAzZW9ial9kZXNjLnR5cGUpO1xcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0zMjY9Y29uc3Qgc3RydWN0IGJ1c190eXBlIGZzbF9tY19idXNfdHlwZSA9IHtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjMyNzpcXHQubmFtZSA9IFxcXCJmc2wtbWNcXFwiLFxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMzI4LVxcdC5kcml2ZXJfb3ZlcnJpZGUgPSB0cnVlLFxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz00OTk9c3RhdGljIGludCBtY19nZXRfdmVyc2lvbihzdHJ1Y3QgZnNsX21jX2lvICptY19pbyxcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtNTI4LSAqXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzo1Mjk6ICogUmV0dXJuOlxcdG1jIHZlcnNpb24gd2hlbiBjYWxsZWQgYWZ0ZXIgZnNsLW1jLWJ1cyBwcm9iZTsgTlVMTCBvdGhlcndpc2UuXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy01MzAtICovXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTYzMj1zdGF0aWMgaW50IGZzbF9tY19kZXZpY2VfZ2V0X21taW9fcmVnaW9ucyhzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfZGV2LFxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy03MTAtXFx0XFx0cmVnaW9uc1tpXS5lbmQgPSByZWdpb25zW2ldLnN0YXJ0ICsgcmVnaW9uX2Rlc2Muc2l6ZSAtIDE7XFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzo3MTE6XFx0XFx0cmVnaW9uc1tpXS5uYW1lID0gXFxcImZzbC1tYyBvYmplY3QgTU1JTyByZWdpb25cXFwiO1xcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtNzEyLVxcdFxcdHJlZ2lvbnNbaV0uZmxhZ3MgPSByZWdpb25fZGVzYy5mbGFncyBcXHUwMDI2IElPUkVTT1VSQ0VfQklUUztcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9NzM3PXN0YXRpYyB2b2lkIGZzbF9tY19kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTc0OS0vKlxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6NzUwOiAqIEFkZCBhIG5ld2x5IGRpc2NvdmVyZWQgZnNsLW1jIGRldmljZSB0byBiZSB2aXNpYmxlIGluIExpbnV4XFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy03NTEtICovXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTg4Mj1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGZzbF9tY19uYjtcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtODg0LS8qKlxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6ODg1OiAqIGZzbF9tY19kZXZpY2VfcmVtb3ZlIC0gUmVtb3ZlIGFuIGZzbC1tYyBkZXZpY2UgZnJvbSBiZWluZyB2aXNpYmxlIHRvXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy04ODYtICogTGludXhcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTg4Ny0gKlxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6ODg4OiAqIEBtY19kZXY6IFBvaW50ZXIgdG8gYW4gZnNsLW1jIGRldmljZVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtODg5LSAqL1xcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz05MDA9c3RydWN0IGZzbF9tY19kZXZpY2UgKmZzbF9tY19nZXRfZW5kcG9pbnQoc3RydWN0IGZzbF9tY19kZXZpY2UgKm1jX2RldixcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtOTM2LVxcdCAqIGludGVycm9nYXRpbmcgdGhlIGZpcm13YXJlLiBUaGlzIGlzIHRoZSBjYXNlIHdoZW4gdGhlIGRldmljZSB3YXMgbm90XFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzo5Mzc6XFx0ICogeWV0IGRpc2NvdmVyZWQgYnkgdGhlIGZzbC1tYyBidXMsIHRodXMgdGhlIGxvb2t1cCByZXR1cm5lZCBOVUxMLlxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtOTM4LVxcdCAqIEZvcmNlIGEgcmVzY2FuIG9mIHRoZSBkZXZpY2VzIGluIHRoaXMgY29udGFpbmVyIGFuZCByZXRyeSB0aGUgbG9va3VwLlxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0xMDA1PXN0YXRpYyBpbnQgZnNsX21jX2Zpcm13YXJlX2NoZWNrKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEwMTMtXFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LFxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTAxNDpcXHRcXHRcXHRcXFwiZnNsLW1jOiBEUEwgcHJvY2Vzc2luZyB3YXMgbm90IHN0YXJ0ZWQsIERQQUEyIHdpbGwgbm90IHdvcmshXFxcXG5cXFwiKTtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEwMTUtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMDIwLVxcdFxcdGRldl9kYmcoXFx1MDAyNnBkZXYtXFx1MDAzZWRldixcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjEwMjE6XFx0XFx0XFx0XFxcImZzbC1tYzogRFBMIHByb2Nlc3NpbmcgaW4gcHJvZ3Jlc3MsIGRlZmVyIHByb2JlXFxcXG5cXFwiKTtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEwMjItXFx0XFx0cmV0dXJuIC1FUFJPQkVfREVGRVI7XFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEwMjctXFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LFxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTAyODpcXHRcXHRcXHRcXFwiZnNsLW1jOiBNQyBib290IGNvbXBsZXRlZCB3aXRoIGVycm9yIDB4JXhcXFxcblxcXCIsIG1jcyk7XFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMDI5LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1tc2kuYy0xNS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLW1zaS5jOjE2OiNpbmNsdWRlIFxcXCJmc2wtbWMtcHJpdmF0ZS5oXFxcIlxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtbXNpLmMtMTctXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLXByaXZhdGUuaD01ODI9c3RydWN0IGZzbF9tY191YXBpIHtcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtcHJpdmF0ZS5oLTU5MS0gKiBzdHJ1Y3QgZnNsX21jX2J1cyAtIGxvZ2ljYWwgYnVzIHRoYXQgY29ycmVzcG9uZHMgdG8gYSBwaHlzaWNhbCBEUFJDXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1wcml2YXRlLmg6NTkyOiAqIEBtY19kZXY6IGZzbC1tYyBkZXZpY2UgZm9yIHRoZSBidXMgZGV2aWNlIGl0c2VsZi5cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLXByaXZhdGUuaC01OTMtICogQHJlc291cmNlX3Bvb2xzOiBhcnJheSBvZiByZXNvdXJjZSBwb29scyAob25lIHBvb2wgcGVyIHJlc291cmNlIHR5cGUpXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLXVhcGkuYy0xMy1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLXVhcGkuYzoxNDojaW5jbHVkZSBcXFwiZnNsLW1jLXByaXZhdGUuaFxcXCJcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLXVhcGkuYy0xNS1cXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9tYy1pby5jLTktXFxuZHJpdmVycy9idXMvZnNsLW1jL21jLWlvLmM6MTA6I2luY2x1ZGUgXFxcImZzbC1tYy1wcml2YXRlLmhcXFwiXFxuZHJpdmVycy9idXMvZnNsLW1jL21jLWlvLmMtMTEtXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvbWMtc3lzLmMtMTYtXFxuZHJpdmVycy9idXMvZnNsLW1jL21jLXN5cy5jOjE3OiNpbmNsdWRlIFxcXCJmc2wtbWMtcHJpdmF0ZS5oXFxcIlxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9tYy1zeXMuYy0xOC1cXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9vYmotYXBpLmMtOC1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvb2JqLWFwaS5jOjk6I2luY2x1ZGUgXFxcImZzbC1tYy1wcml2YXRlLmhcXFwiXFxuZHJpdmVycy9idXMvZnNsLW1jL29iai1hcGkuYy0xMC1cXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NhYW0vS2NvbmZpZz0xNzg9Y29uZmlnIENSWVBUT19ERVZfRlNMX0RQQUEyX0NBQU1cXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NhYW0vS2NvbmZpZy0xOTMtXFx0ICBJdCBoYW5kbGVzIERQU0VDSSBEUEFBMiBvYmplY3RzIHRoYXQgc2l0IG9uIHRoZSBNYW5hZ2VtZW50IENvbXBsZXhcXG5kcml2ZXJzL2NyeXB0by9jYWFtL0tjb25maWc6MTk0OlxcdCAgKE1DKSBmc2wtbWMgYnVzLlxcbmRyaXZlcnMvY3J5cHRvL2NhYW0vS2NvbmZpZy0xOTUtXFxuLS1cXG5kcml2ZXJzL2RtYS9mc2wtZHBhYTItcWRtYS9kcGFhMi1xZG1hLmM9MTUyPWRwYWEyX3FkbWFfcG9wdWxhdGVfZmQodTMyIGZvcm1hdCwgc3RydWN0IGRwYWEyX3FkbWFfY29tcCAqZHBhYTJfY29tcClcXG4tLVxcbmRyaXZlcnMvZG1hL2ZzbC1kcGFhMi1xZG1hL2RwYWEyLXFkbWEuYy0xNjMtXFx0ICogQnlwYXNzIG1lbW9yeSB0cmFuc2xhdGlvbiwgRnJhbWUgbGlzdCBmb3JtYXQsIHNob3J0IGxlbmd0aCBkaXNhYmxlXFxuZHJpdmVycy9kbWEvZnNsLWRwYWEyLXFkbWEvZHBhYTItcWRtYS5jOjE2NDpcXHQgKiB3ZSBuZWVkIHRvIGRpc2FibGUgQk1UIGlmIGZzbC1tYyB1c2UgaW92YSBhZGRyXFxuZHJpdmVycy9kbWEvZnNsLWRwYWEyLXFkbWEvZHBhYTItcWRtYS5jLTE2NS1cXHQgKi9cXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXUuYz0xNjg1PUVYUE9SVF9TWU1CT0xfR1BMKHBjaV9kZXZpY2VfZ3JvdXApO1xcbmRyaXZlcnMvaW9tbXUvaW9tbXUuYy0xNjg2LVxcbmRyaXZlcnMvaW9tbXUvaW9tbXUuYzoxNjg3Oi8qIEdldCB0aGUgSU9NTVUgZ3JvdXAgZm9yIGRldmljZSBvbiBmc2wtbWMgYnVzICovXFxuZHJpdmVycy9pb21tdS9pb21tdS5jLTE2ODgtc3RydWN0IGlvbW11X2dyb3VwICpmc2xfbWNfZGV2aWNlX2dyb3VwKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvc29jL2ZzbC9kcGlvL01ha2VmaWxlLTUtXFxuZHJpdmVycy9zb2MvZnNsL2RwaW8vTWFrZWZpbGU6NjpvYmotJChDT05GSUdfRlNMX01DX0RQSU8pICs9IGZzbC1tYy1kcGlvLm9cXG5kcml2ZXJzL3NvYy9mc2wvZHBpby9NYWtlZmlsZS03LVxcbmRyaXZlcnMvc29jL2ZzbC9kcGlvL01ha2VmaWxlOjg6ZnNsLW1jLWRwaW8tb2JqcyA6PSBkcGlvLm8gcWJtYW4tcG9ydGFsLm8gZHBpby1zZXJ2aWNlLm8gZHBpby1kcml2ZXIub1xcbi0tXFxuZHJpdmVycy9zb2MvZnNsL2RwaW8vZHBpby1zZXJ2aWNlLmM9MjI2PWlycXJldHVybl90IGRwYWEyX2lvX2lycShzdHJ1Y3QgZHBhYTJfaW8gKm9iailcXG4tLVxcbmRyaXZlcnMvc29jL2ZzbC9kcGlvL2RwaW8tc2VydmljZS5jLTI0OS1cXHRcXHR9IGVsc2Uge1xcbmRyaXZlcnMvc29jL2ZzbC9kcGlvL2RwaW8tc2VydmljZS5jOjI1MDpcXHRcXHRcXHRwcl9jcml0KFxcXCJmc2wtbWMtZHBpbzogVW5yZWNvZ25pc2VkL2lnbm9yZWQgRFFSUiBlbnRyeVxcXFxuXFxcIik7XFxuZHJpdmVycy9zb2MvZnNsL2RwaW8vZHBpby1zZXJ2aWNlLmMtMjUxLVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvdmZpby9LY29uZmlnPTk1PXNvdXJjZSBcXFwiZHJpdmVycy92ZmlvL21kZXYvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo5Njpzb3VyY2UgXFxcImRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy05Ny1zb3VyY2UgXFxcImRyaXZlcnMvdmZpby9jZHgvS2NvbmZpZ1xcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9NYWtlZmlsZT0xNj1vYmotJChDT05GSUdfVkZJT19NREVWKSArPSBtZGV2L1xcbmRyaXZlcnMvdmZpby9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfVkZJT19GU0xfTUMpICs9IGZzbC1tYy9cXG5kcml2ZXJzL3ZmaW8vTWFrZWZpbGUtMTgtb2JqLSQoQ09ORklHX1ZGSU9fQ0RYKSArPSBjZHgvXFxuLS1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWc9ND1jb25maWcgVkZJT19GU0xfTUNcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWc6NTpcXHR0cmlzdGF0ZSBcXFwiVkZJTyBzdXBwb3J0IGZvciBRb3JJUSBEUEFBMiBmc2wtbWMgYnVzIGRldmljZXNcXFwiXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnLTYtXFx0c2VsZWN0IEVWRU5URkRcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWctNy1cXHRoZWxwXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnOjg6XFx0ICBEcml2ZXIgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBWRklPIFFvcklRIERQQUEyIGZzbC1tY1xcbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZy05LVxcdCAgKE1hbmFnZW1lbnQgQ29tcGxleCkgZGV2aWNlcy4gVGhpcyBpcyByZXF1aXJlZCB0byBwYXNzdGhyb3VnaFxcbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZzoxMDpcXHQgIGZzbC1tYyBidXMgZGV2aWNlcyB1c2luZyB0aGUgVkZJTyBmcmFtZXdvcmsuXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnLTExLVxcbi0tXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy9NYWtlZmlsZS0yLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvTWFrZWZpbGU6Mzp2ZmlvLWZzbC1tYy15IDo9IHZmaW9fZnNsX21jLm8gdmZpb19mc2xfbWNfaW50ci5vXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19WRklPX0ZTTF9NQykgKz0gdmZpby1mc2wtbWMub1xcbi0tXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jPTQxNj1zdGF0aWMgaW50IHZmaW9fZnNsX21jX2J1c19ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbi0tXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTQzNy1cXHRcXHRpZiAobWNfZHJ2IFxcdTAwMjZcXHUwMDI2IG1jX2RydiAhPSBcXHUwMDI2dmZpb19mc2xfbWNfZHJpdmVyKVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYzo0Mzg6XFx0XFx0XFx0ZGV2X3dhcm4oZGV2LCBcXFwiVkZJT19GU0xfTUM6IE9iamVjdCAlcyBib3VuZCB0byBkcml2ZXIgJXMgd2hpbGUgRFBSQyBib3VuZCB0byB2ZmlvLWZzbC1tY1xcXFxuXFxcIixcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtNDM5LVxcdFxcdFxcdFxcdCBkZXZfbmFtZShkZXYpLCBtY19kcnYtXFx1MDAzZWRyaXZlci5uYW1lKTtcXG4tLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYz01NzU9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgdmZpb19mc2xfbWNfb3BzID0ge1xcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYzo1NzY6XFx0Lm5hbWVcXHRcXHQ9IFxcXCJ2ZmlvLWZzbC1tY1xcXCIsXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTU3Ny1cXHQuaW5pdFxcdFxcdD0gdmZpb19mc2xfbWNfaW5pdF9kZXYsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM9NTkyPXN0YXRpYyBzdHJ1Y3QgZnNsX21jX2RyaXZlciB2ZmlvX2ZzbF9tY19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtNTk1LVxcdC5kcml2ZXJcXHQ9IHtcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM6NTk2OlxcdFxcdC5uYW1lXFx0PSBcXFwidmZpby1mc2wtbWNcXFwiLFxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy01OTctXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6NTI6MjcuOTg1MTgyMDY4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI4MzYzMjE5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBQYXRjaCoqXG5cbk9rYXksIGFmdGVyIHJldmlld2luZyB0aGlzIHBhdGNoLCBoZXJlJ3MgbXkgdGFrZS4gVGhlIGNvZGUgbW9kaWZpY2F0aW9uIHRvdWNoZXMgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guY2AuIFJpZ2h0IGF3YXksIHRoYXQgcmFpc2VzIGEgZmxhZyDigJMgaXQncyBhIGRyaXZlciBmb3IgdGhlIERQQUEyIHN3aXRjaCwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGUgTlhQIFFvcklRIERQQUEyIGFyY2hpdGVjdHVyZSwgd2hpY2ggd2Uga25vdyBpcyBgQVJDSF9MQVlFUlNDQVBFYC4gVGhlIGNvcmUgaXNzdWUgaXMgdGhhdCB0aGUgYGZzbC1tY2AgYnVzLCB3aGljaCB0aGlzIGRyaXZlciBjbGVhcmx5IHJlbGllcyBvbiwgaXMgaGFyZHdhcmUtc3BlY2lmaWMuIFdlJ3JlIG5vdCB0YWxraW5nIGFib3V0IHNvbWV0aGluZyB0aGF0J3MgZWFzaWx5IGVtdWxhdGVkIGluIHN0YW5kYXJkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgZXZlbiBzb21ldGhpbmcgd2Ugc2VlIGluIHN5emthbGxlci5cblxuVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgZHJpdmVyIHJlcXVpcmVzIHRoYXQgc3BlY2lmaWMgaGFyZHdhcmUgYW5kIGl0cyBhc3NvY2lhdGVkIGJ1cyAoYGZzbC1tY2ApLCBpdCdzIGVmZmVjdGl2ZWx5IHVucmVhY2hhYmxlIGluIHRoZSBraW5kIG9mIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3ZSB0eXBpY2FsbHkgdXNlIGZvciBmdXp6aW5nLiBUaGUgbGlrZWxpaG9vZCBvZiBnZW5lcmF0aW5nIGFueSB1c2VmdWwgdGVzdCBjb3ZlcmFnZSBpbiBzdWNoIGEgc2V0dXAgaXMgaW5jcmVkaWJseSBsb3csIGJvcmRlcmluZyBvbiB6ZXJvLlxuXG5TbywgaW4gZ29vZCBjb25zY2llbmNlLCBJJ20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBNeSByYXRpb25hbGUgaXMgY2xlYXI6IHRoaXMgcGF0Y2ggbW9kaWZpZXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgZm9yIHRoZSBGcmVlc2NhbGUgRFBBQTIgc3dpdGNoLCBhbmQgdGhhdCBjb2RlIGlzIGluYWNjZXNzaWJsZSBpbiBvdXIgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBzZXR1cHMgd2l0aG91dCB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlIGVtdWxhdGlvbiwgd2hpY2ggaXNuJ3QgYXZhaWxhYmxlIG9yIGZlYXNpYmxlIGZvciB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjU0OSwiT3V0cHV0VG9rZW5zIjoxNDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6NTI6MzQuMjY4ODE5MzA3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgRnJlZXNjYWxlIERQQUEyIHN3aXRjaCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guYykgdG8gYWRkIExBRyBvZmZsb2FkIHN1cHBvcnQuIFRoaXMgZHJpdmVyIGRlcGVuZHMgb24gdGhlIGZzbC1tYyBidXMgKEZTTF9NQ19CVVMpLCB3aGljaCBpcyBzcGVjaWZpYyB0byBOWFAgUW9ySVEgRFBBQTIgaGFyZHdhcmUgKEFSQ0hfTEFZRVJTQ0FQRSkuIFRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBoYXJkd2FyZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEZyZWVzY2FsZSBEUEFBMiBzd2l0Y2ggZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItc3dpdGNoLmMpIHRvIGFkZCBMQUcgb2ZmbG9hZCBzdXBwb3J0LiBUaGlzIGRyaXZlciBkZXBlbmRzIG9uIHRoZSBmc2wtbWMgYnVzIChGU0xfTUNfQlVTKSwgd2hpY2ggaXMgc3BlY2lmaWMgdG8gTlhQIFFvcklRIERQQUEyIGhhcmR3YXJlIChBUkNIX0xBWUVSU0NBUEUpLiBUaGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoaXMgaGFyZHdhcmUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflows2gfn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-29 11:39:29 +0000 UTC FinishedAt: 2026-06-29 11:52:36 +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+CgkJCTx0ZD4yMDI2LzA2LzI5IDExOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBGcmVlc2NhbGUgRFBBQTIgc3dpdGNoIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXN3aXRjaC5jKSB0byBhZGQgTEFHIG9mZmxvYWQgc3VwcG9ydC4gVGhpcyBkcml2ZXIgZGVwZW5kcyBvbiB0aGUgZnNsLW1jIGJ1cyAoRlNMX01DX0JVUyksIHdoaWNoIGlzIHNwZWNpZmljIHRvIE5YUCBRb3JJUSBEUEFBMiBoYXJkd2FyZSAoQVJDSF9MQVlFUlNDQVBFKS4gVGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIGhhcmR3YXJlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDExOjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNWQ4OTc5YzdhNWZiYTNlZTRkZjJmMTVmYmJiZjEwYzc0OGQxNGU5N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVuIDI5IDExOjUyOjA5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guY1xuaW5kZXggODU4YmE4NDRhYzUxNjQuLjgzMjBiMjZjM2Y3MjZlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXN3aXRjaC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItc3dpdGNoLmNcbkBAIC0yNSw2ICYjNDM7MjUsOSBAQFxuIFxuICNkZWZpbmUgREVGQVVMVF9WTEFOX0lEXHRcdFx0MVxuIFxuJiM0MztzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGRwYWEyX3N3aXRjaF9wb3J0X3N3aXRjaGRldl9uYjtcbiYjNDM7c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBkcGFhMl9zd2l0Y2hfcG9ydF9zd2l0Y2hkZXZfYmxvY2tpbmdfbmI7XG4mIzQzO1xuIHN0YXRpYyB1MTYgZHBhYTJfc3dpdGNoX3BvcnRfZ2V0X2ZkYl9pZChzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYpXG4ge1xuIFx0cmV0dXJuIHBvcnRfcHJpdi1cdTAwM2VmZGItXHUwMDNlZmRiX2lkO1xuQEAgLTUxLDYgJiM0Mzs1NCwxNyBAQCBkcGFhMl9zd2l0Y2hfZmlsdGVyX2Jsb2NrX2dldF91bnVzZWQoc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3KVxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuJiM0MztzdGF0aWMgc3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKlxuJiM0MztkcGFhMl9zd2l0Y2hfbGFnX2dldF91bnVzZWQoc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGV0aHN3LVx1MDAzZXN3X2F0dHIubnVtX2lmczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRpZiAoIWV0aHN3LVx1MDAzZWxhZ3NbaV0uaW5fdXNlKVxuJiM0MztcdFx0XHRyZXR1cm4gXHUwMDI2ZXRoc3ctXHUwMDNlbGFnc1tpXTtcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgYm9vbCBkcGFhMl9zd2l0Y2hfZmRiX2luX3VzZV9ieV9vdGhlcnMoc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3LFxuIFx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZkYiAqZmRiLFxuIFx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpleGNlcHQpXG5AQCAtNzEsOSAmIzQzOzg1LDkgQEAgc3RhdGljIHN0cnVjdCBkcGFhMl9zd2l0Y2hfZmRiICpcbiBkcGFhMl9zd2l0Y2hfZmRiX2Zvcl9qb2luKHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdixcbiBcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlICp1cHBlcl9kZXYpXG4ge1xuLVx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqb3RoZXJfcG9ydF9wcml2O1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKm90aGVyX2Rldjtcbi1cdHN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7XG4mIzQzO1x0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqb3RoZXJfcG9ydF9wcml2ID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqb3RoZXJfZGV2LCAqb3RoZXJfZGV2MjtcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkICppdGVyLCAqaXRlcjI7XG4gXG4gXHQvKiBUaGUgYmVsb3cgY2FsbCB0byBuZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KCkgZGVtYW5kcyB0aGUgUlROTCBsb2NrXG4gXHQgKiBiZWluZyBoZWxkLiBBc3NlcnQgb24gaXQgc28gdGhhdCBpdCYjMzk7cyBlYXNpZXIgdG8gY2F0Y2ggbmV3IGNvZGVcbkBAIC04MiwxNyAmIzQzOzk2LDMyIEBAIGRwYWEyX3N3aXRjaF9mZGJfZm9yX2pvaW4oc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2LFxuIFx0QVNTRVJUX1JUTkwoKTtcbiBcbiBcdC8qIElmIHBhcnQgb2YgYSBicmlkZ2UsIHVzZSB0aGUgRkRCIG9mIHRoZSBmaXJzdCBkcGFhMiBzd2l0Y2ggaW50ZXJmYWNlXG4tXHQgKiB0byBiZSBwcmVzZW50IGluIHRoYXQgYnJpZGdlXG4mIzQzO1x0ICogdG8gYmUgcHJlc2VudCBpbiB0aGF0IGJyaWRnZS4gVGhlIHNlYXJjaCBkZXNjZW5kcyBvbmUgbGV2ZWwgdGhyb3VnaFxuJiM0MztcdCAqIGEgYnJpZGdlZCBib25kJiMzOTtzIGxvd2VycyBhcyB3ZWxsLlxuIFx0ICovXG4gXHRuZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KHVwcGVyX2Rldiwgb3RoZXJfZGV2LCBpdGVyKSB7XG4tXHRcdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrKG90aGVyX2RldikpXG4tXHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRpZiAobmV0aWZfaXNfbGFnX21hc3RlcihvdGhlcl9kZXYpKSB7XG4mIzQzO1x0XHRcdG5ldGRldl9mb3JfZWFjaF9sb3dlcl9kZXYob3RoZXJfZGV2LCBvdGhlcl9kZXYyLCBpdGVyMikge1xuJiM0MztcdFx0XHRcdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrKG90aGVyX2RldjIpKVxuJiM0MztcdFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGlmIChvdGhlcl9kZXYgPT0gcG9ydF9wcml2LVx1MDAzZW5ldGRldilcbi1cdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0XHRpZiAob3RoZXJfZGV2MiA9PSBwb3J0X3ByaXYtXHUwMDNlbmV0ZGV2KVxuJiM0MztcdFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdG90aGVyX3BvcnRfcHJpdiA9IG5ldGRldl9wcml2KG90aGVyX2Rldik7XG4tXHRcdHJldHVybiBvdGhlcl9wb3J0X3ByaXYtXHUwMDNlZmRiO1xuJiM0MztcdFx0XHRcdG90aGVyX3BvcnRfcHJpdiA9IG5ldGRldl9wcml2KG90aGVyX2RldjIpO1xuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhvdGhlcl9kZXYpKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKG90aGVyX2RldiA9PSBwb3J0X3ByaXYtXHUwMDNlbmV0ZGV2KVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdFx0b3RoZXJfcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYob3RoZXJfZGV2KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChvdGhlcl9wb3J0X3ByaXYpXG4mIzQzO1x0XHRcdHJldHVybiBvdGhlcl9wb3J0X3ByaXYtXHUwMDNlZmRiO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHBvcnRfcHJpdi1cdTAwM2VmZGI7XG5AQCAtNTM3LDYgJiM0Mzs1NjYsMTAzIEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2RlbF9tYyhzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfYWRkKHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdixcbiYjNDM7XHRcdFx0XHQgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGFkZHIpKVxuJiM0MztcdFx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2FkZF91Yyhwb3J0X3ByaXYsIGFkZHIpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9hZGRfbWMocG9ydF9wcml2LCBhZGRyKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsKHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdixcbiYjNDM7XHRcdFx0XHQgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXG4mIzQzO3tcbiYjNDM7XHRpZiAoaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGFkZHIpKVxuJiM0MztcdFx0cmV0dXJuIGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9kZWxfdWMocG9ydF9wcml2LCBhZGRyKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRyZXR1cm4gZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2RlbF9tYyhwb3J0X3ByaXYsIGFkZHIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGRwYWEyX21hY19hZGRyICpcbiYjNDM7ZHBhYTJfc3dpdGNoX21hY19hZGRyX2ZpbmQoc3RydWN0IGxpc3RfaGVhZCAqYWRkcl9saXN0LFxuJiM0MztcdFx0XHQgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCB1MTYgdmlkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRwYWEyX21hY19hZGRyICphO1xuJiM0MztcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGEsIGFkZHJfbGlzdCwgbGlzdClcbiYjNDM7XHRcdGlmIChldGhlcl9hZGRyX2VxdWFsKGEtXHUwMDNlYWRkciwgYWRkcikgXHUwMDI2XHUwMDI2IGEtXHUwMDNldmlkID09IHZpZClcbiYjNDM7XHRcdFx0cmV0dXJuIGE7XG4mIzQzO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9sYWdfZmRiX2FkZChzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqbGFnLFxuJiM0MztcdFx0XHRcdCAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCB1MTYgdmlkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbGFnLVx1MDAzZXByaW1hcnk7XG4mIzQzO1x0c3RydWN0IGRwYWEyX21hY19hZGRyICphO1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmxhZy1cdTAwM2VmZGJfbG9jayk7XG4mIzQzO1xuJiM0MztcdGEgPSBkcGFhMl9zd2l0Y2hfbWFjX2FkZHJfZmluZChcdTAwMjZsYWctXHUwMDNlZmRicywgYWRkciwgdmlkKTtcbiYjNDM7XHRpZiAoYSkge1xuJiM0MztcdFx0cmVmY291bnRfaW5jKFx1MDAyNmEtXHUwMDNlcmVmY291bnQpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRhID0ga3phbGxvYyhzaXplb2YoKmEpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWEpIHtcbiYjNDM7XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9hZGQocG9ydF9wcml2LCBhZGRyKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRrZnJlZShhKTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXRoZXJfYWRkcl9jb3B5KGEtXHUwMDNlYWRkciwgYWRkcik7XG4mIzQzO1x0YS1cdTAwM2V2aWQgPSB2aWQ7XG4mIzQzO1x0cmVmY291bnRfc2V0KFx1MDAyNmEtXHUwMDNlcmVmY291bnQsIDEpO1xuJiM0MztcdGxpc3RfYWRkX3RhaWwoXHUwMDI2YS1cdTAwM2VsaXN0LCBcdTAwMjZsYWctXHUwMDNlZmRicyk7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmxhZy1cdTAwM2VmZGJfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9sYWdfZmRiX2RlbChzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqbGFnLFxuJiM0MztcdFx0XHRcdCAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgdTE2IHZpZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IGxhZy1cdTAwM2VwcmltYXJ5O1xuJiM0MztcdHN0cnVjdCBkcGFhMl9tYWNfYWRkciAqYTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZsYWctXHUwMDNlZmRiX2xvY2spO1xuJiM0MztcbiYjNDM7XHRhID0gZHBhYTJfc3dpdGNoX21hY19hZGRyX2ZpbmQoXHUwMDI2bGFnLVx1MDAzZWZkYnMsIGFkZHIsIHZpZCk7XG4mIzQzO1x0aWYgKCFhKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGlmICghcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmEtXHUwMDNlcmVmY291bnQpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGxpc3RfZGVsKFx1MDAyNmEtXHUwMDNlbGlzdCk7XG4mIzQzO1x0a2ZyZWUoYSk7XG4mIzQzO1xuJiM0MztcdGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9kZWwocG9ydF9wcml2LCBhZGRyKTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bGFnLVx1MDAzZWZkYl9sb2NrKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBkcGFhMl9zd2l0Y2hfcG9ydF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHRcdFx0c3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cylcbiB7XG5AQCAtMTQ4NSw2ICYjNDM7MTYxMSwzMyBAQCBib29sIGRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0cmV0dXJuIG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzID09IFx1MDAyNmRwYWEyX3N3aXRjaF9wb3J0X29wcztcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIGRwYWEyX3N3aXRjaF9mb3JlaWduX2Rldl9jaGVjayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmZvcmVpZ25fZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3cgPSBwb3J0X3ByaXYtXHUwMDNlZXRoc3dfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpvdGhlcl9wb3J0O1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRpZiAobmV0aWZfaXNfYnJpZGdlX21hc3Rlcihmb3JlaWduX2RldikpXG4mIzQzO1x0XHRpZiAocG9ydF9wcml2LVx1MDAzZWZkYi1cdTAwM2VicmlkZ2VfZGV2ID09IGZvcmVpZ25fZGV2KVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChuZXRpZl9pc19icmlkZ2VfcG9ydChmb3JlaWduX2RldikpIHtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGV0aHN3LVx1MDAzZXN3X2F0dHIubnVtX2lmczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0b3RoZXJfcG9ydCA9IGV0aHN3LVx1MDAzZXBvcnRzW2ldO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKCFvdGhlcl9wb3J0KVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRpZiAoZHBhYTJfc3dpdGNoX3BvcnRfb2ZmbG9hZHNfYnJpZGdlX3BvcnQob3RoZXJfcG9ydCxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdCAgIGZvcmVpZ25fZGV2KSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2Nvbm5lY3RfbWFjKHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdilcbiB7XG4gXHRzdHJ1Y3QgZnNsX21jX2RldmljZSAqZHBzd19wb3J0X2RldiwgKmRwbWFjX2RldjtcbkBAIC0xODYwLDUxICYjNDM7MjAxMywzMiBAQCBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfdmxhbnNfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdCAgdmxhbi1cdTAwM2VjaGFuZ2VkKTtcbiB9XG4gXG4tc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9sb29rdXBfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgaXNfdWMsXG4tXHRcdFx0XHRcdCAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKVxuLXtcbi1cdHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpsaXN0ID0gKGlzX3VjKSA/IFx1MDAyNm5ldGRldi1cdTAwM2V1YyA6IFx1MDAyNm5ldGRldi1cdTAwM2VtYztcbi1cdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XG4tXG4tXHRuZXRpZl9hZGRyX2xvY2tfYmgobmV0ZGV2KTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkoaGEsIFx1MDAyNmxpc3QtXHUwMDNlbGlzdCwgbGlzdCkge1xuLVx0XHRpZiAoZXRoZXJfYWRkcl9lcXVhbChoYS1cdTAwM2VhZGRyLCBhZGRyKSkge1xuLVx0XHRcdG5ldGlmX2FkZHJfdW5sb2NrX2JoKG5ldGRldik7XG4tXHRcdFx0cmV0dXJuIDE7XG4tXHRcdH1cbi1cdH1cbi1cdG5ldGlmX2FkZHJfdW5sb2NrX2JoKG5ldGRldik7XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4gc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9tZGJfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfbWRiICptZGIpXG4ge1xuIFx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbi1cdGludCBlcnI7XG4mIzQzO1x0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZztcbiBcbi1cdC8qIENoZWNrIGlmIGFkZHJlc3MgaXMgYWxyZWFkeSBzZXQgb24gdGhpcyBwb3J0ICovXG4tXHRpZiAoZHBhYTJfc3dpdGNoX3BvcnRfbG9va3VwX2FkZHJlc3MobmV0ZGV2LCAwLCBtZGItXHUwMDNlYWRkcikpXG4tXHRcdHJldHVybiAtRUVYSVNUO1xuLVxuLVx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2FkZF9tYyhwb3J0X3ByaXYsIG1kYi1cdTAwM2VhZGRyKTtcbi1cdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4tXG4tXHRlcnIgPSBkZXZfbWNfYWRkKG5ldGRldiwgbWRiLVx1MDAzZWFkZHIpO1xuLVx0aWYgKGVycikge1xuLVx0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7ZGV2X21jX2FkZCBlcnIgJWRcXG5cJiMzNDssIGVycik7XG4tXHRcdGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9kZWxfbWMocG9ydF9wcml2LCBtZGItXHUwMDNlYWRkcik7XG4tXHR9XG4tXG4tXHRyZXR1cm4gZXJyO1xuJiM0MztcdGxhZyA9IHJ0bmxfZGVyZWZlcmVuY2UocG9ydF9wcml2LVx1MDAzZWxhZyk7XG4mIzQzO1x0aWYgKGxhZylcbiYjNDM7XHRcdHJldHVybiBkcGFhMl9zd2l0Y2hfbGFnX2ZkYl9hZGQobGFnLCBtZGItXHUwMDNlYWRkciwgbWRiLVx1MDAzZXZpZCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmV0dXJuIGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9hZGQocG9ydF9wcml2LCBtZGItXHUwMDNlYWRkcik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfb2JqX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuLVx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X29iaiAqb2JqKVxuJiM0MztzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X29ial9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgY29uc3Qgdm9pZCAqY3R4LFxuJiM0MztcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmogKm9iaixcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4mIzQzO1x0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0aWYgKGN0eCBcdTAwMjZcdTAwMjYgY3R4ICE9IHBvcnRfcHJpdilcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X29mZmxvYWRzX2JyaWRnZV9wb3J0KHBvcnRfcHJpdiwgb2JqLVx1MDAzZW9yaWdfZGV2KSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4gXHRzd2l0Y2ggKG9iai1cdTAwM2VpZCkge1xuIFx0Y2FzZSBTV0lUQ0hERVZfT0JKX0lEX1BPUlRfVkxBTjpcbiBcdFx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfdmxhbnNfYWRkKG5ldGRldixcbkBAIC0yMDAwLDI5ICYjNDM7MjEzNCwyOSBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X21kYl9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmpfcG9ydF9tZGIgKm1kYilcbiB7XG4gXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuLVx0aW50IGVycjtcbi1cbi1cdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfbG9va3VwX2FkZHJlc3MobmV0ZGV2LCAwLCBtZGItXHUwMDNlYWRkcikpXG4tXHRcdHJldHVybiAtRU5PRU5UO1xuLVxuLVx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2RlbF9tYyhwb3J0X3ByaXYsIG1kYi1cdTAwM2VhZGRyKTtcbi1cdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4mIzQzO1x0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZztcbiBcbi1cdGVyciA9IGRldl9tY19kZWwobmV0ZGV2LCBtZGItXHUwMDNlYWRkcik7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDtkZXZfbWNfZGVsIGVyciAlZFxcblwmIzM0OywgZXJyKTtcbi1cdFx0cmV0dXJuIGVycjtcbi1cdH1cbiYjNDM7XHRsYWcgPSBydG5sX2RlcmVmZXJlbmNlKHBvcnRfcHJpdi1cdTAwM2VsYWcpO1xuJiM0MztcdGlmIChsYWcpXG4mIzQzO1x0XHRkcGFhMl9zd2l0Y2hfbGFnX2ZkYl9kZWwobGFnLCBtZGItXHUwMDNlYWRkciwgbWRiLVx1MDAzZXZpZCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2RlbChwb3J0X3ByaXYsIG1kYi1cdTAwM2VhZGRyKTtcbiBcbi1cdHJldHVybiBlcnI7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfb2JqX2RlbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X29ial9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgY29uc3Qgdm9pZCAqY3R4LFxuIFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X29iaiAqb2JqKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHRpZiAoY3R4IFx1MDAyNlx1MDAyNiBjdHggIT0gcG9ydF9wcml2KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfb2ZmbG9hZHNfYnJpZGdlX3BvcnQocG9ydF9wcml2LCBvYmotXHUwMDNlb3JpZ19kZXYpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiBcdHN3aXRjaCAob2JqLVx1MDAzZWlkKSB7XG4gXHRjYXNlIFNXSVRDSERFVl9PQkpfSURfUE9SVF9WTEFOOlxuIFx0XHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF92bGFuc19kZWwobmV0ZGV2LCBTV0lUQ0hERVZfT0JKX1BPUlRfVkxBTihvYmopKTtcbkBAIC0yMDQ4LDYgJiM0MzsyMTgyLDIxIEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfYXR0cl9zZXRfZXZlbnQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7XG4gfVxuIFxuJiM0MztzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKlxuJiM0MztkcGFhMl9zd2l0Y2hfcG9ydF90b19icmlkZ2VfcG9ydChzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqbGFnO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBvcnRfcHJpdi1cdTAwM2VmZGItXHUwMDNlYnJpZGdlX2RldilcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRsYWcgPSBydG5sX2RlcmVmZXJlbmNlKHBvcnRfcHJpdi1cdTAwM2VsYWcpO1xuJiM0MztcdGlmIChsYWcpXG4mIzQzO1x0XHRyZXR1cm4gbGFnLVx1MDAzZWJvbmRfZGV2O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcG9ydF9wcml2LVx1MDAzZW5ldGRldjtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2JyaWRnZV9qb2luKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdCBzdHJ1Y3QgbmV0X2RldmljZSAqdXBwZXJfZGV2LFxuIFx0XHRcdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuQEAgLTIwNTUsNiAmIzQzOzIyMDQsNyBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2JyaWRnZV9qb2luKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0c3RydWN0IGRwYWEyX3N3aXRjaF9mZGIgKm9sZF9mZGIgPSBwb3J0X3ByaXYtXHUwMDNlZmRiO1xuIFx0c3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3ID0gcG9ydF9wcml2LVx1MDAzZWV0aHN3X2RhdGE7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKmJycG9ydF9kZXY7XG4gXHRib29sIGxlYXJuX2VuYTtcbiBcdGludCBlcnI7XG4gXG5AQCAtMjA2Niw3ICYjNDM7MjIxNiw4IEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfYnJpZGdlX2pvaW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdGRwYWEyX3N3aXRjaF9wb3J0X3NldF9mZGIocG9ydF9wcml2LCB1cHBlcl9kZXYsIHRydWUpO1xuIFxuIFx0LyogSW5oZXJpdCB0aGUgaW5pdGlhbCBicmlkZ2UgcG9ydCBsZWFybmluZyBzdGF0ZSAqL1xuLVx0bGVhcm5fZW5hID0gYnJfcG9ydF9mbGFnX2lzX3NldChuZXRkZXYsIEJSX0xFQVJOSU5HKTtcbiYjNDM7XHRicnBvcnRfZGV2ID0gZHBhYTJfc3dpdGNoX3BvcnRfdG9fYnJpZGdlX3BvcnQocG9ydF9wcml2KTtcbiYjNDM7XHRsZWFybl9lbmEgPSBicl9wb3J0X2ZsYWdfaXNfc2V0KGJycG9ydF9kZXYsIEJSX0xFQVJOSU5HKTtcbiBcdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X3NldF9sZWFybmluZyhwb3J0X3ByaXYsIGxlYXJuX2VuYSk7XG4gXHRwb3J0X3ByaXYtXHUwMDNlbGVhcm5fZW5hID0gbGVhcm5fZW5hO1xuIFxuQEAgLTIwODAsOCAmIzQzOzIyMzEsMTEgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9icmlkZ2Vfam9pbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfZWdyZXNzX2Zsb29kO1xuIFxuLVx0ZXJyID0gc3dpdGNoZGV2X2JyaWRnZV9wb3J0X29mZmxvYWQobmV0ZGV2LCBuZXRkZXYsIE5VTEwsXG4tXHRcdFx0XHRcdCAgICBOVUxMLCBOVUxMLCBmYWxzZSwgZXh0YWNrKTtcbiYjNDM7XHRicnBvcnRfZGV2ID0gZHBhYTJfc3dpdGNoX3BvcnRfdG9fYnJpZGdlX3BvcnQocG9ydF9wcml2KTtcbiYjNDM7XHRlcnIgPSBzd2l0Y2hkZXZfYnJpZGdlX3BvcnRfb2ZmbG9hZChicnBvcnRfZGV2LCBuZXRkZXYsIHBvcnRfcHJpdixcbiYjNDM7XHRcdFx0XHRcdCAgICBcdTAwMjZkcGFhMl9zd2l0Y2hfcG9ydF9zd2l0Y2hkZXZfbmIsXG4mIzQzO1x0XHRcdFx0XHQgICAgXHUwMDI2ZHBhYTJfc3dpdGNoX3BvcnRfc3dpdGNoZGV2X2Jsb2NraW5nX25iLFxuJiM0MztcdFx0XHRcdFx0ICAgIGZhbHNlLCBleHRhY2spO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfc3dpdGNoZGV2X29mZmxvYWQ7XG4gXG5AQCAtMjExNSw3ICYjNDM7MjI2OSwyMiBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X3Jlc3RvcmVfcnh2bGFuKHN0cnVjdCBuZXRfZGV2aWNlICp2ZGV2LCBpbnQgdmlkLCB2b1xuIFxuIHN0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9wb3J0X3ByZV9icmlkZ2VfbGVhdmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4tXHRzd2l0Y2hkZXZfYnJpZGdlX3BvcnRfdW5vZmZsb2FkKG5ldGRldiwgTlVMTCwgTlVMTCwgTlVMTCk7XG4mIzQzO1x0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3cgPSBwb3J0X3ByaXYtXHUwMDNlZXRoc3dfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqYnJwb3J0X2RldjtcbiYjNDM7XG4mIzQzO1x0YnJwb3J0X2RldiA9IGRwYWEyX3N3aXRjaF9wb3J0X3RvX2JyaWRnZV9wb3J0KHBvcnRfcHJpdik7XG4mIzQzO1x0aWYgKCFicnBvcnRfZGV2KVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2hkZXZfYnJpZGdlX3BvcnRfdW5vZmZsb2FkKGJycG9ydF9kZXYsIHBvcnRfcHJpdixcbiYjNDM7XHRcdFx0XHRcdFx1MDAyNmRwYWEyX3N3aXRjaF9wb3J0X3N3aXRjaGRldl9uYixcbiYjNDM7XHRcdFx0XHRcdFx1MDAyNmRwYWEyX3N3aXRjaF9wb3J0X3N3aXRjaGRldl9ibG9ja2luZ19uYik7XG4mIzQzO1xuJiM0MztcdC8qIE1ha2Ugc3VyZSB0aGF0IGFueSBGREIgYWRkL2RlbCBvcGVyYXRpb25zIGFyZSBjb21wbGV0ZWQgYmVmb3JlIHRoZVxuJiM0MztcdCAqIGJyaWRnZSBsYXlvdXQgY2hhbmdlc1xuJiM0MztcdCAqL1xuJiM0MztcdGZsdXNoX3dvcmtxdWV1ZShldGhzdy1cdTAwM2V3b3JrcXVldWUpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2JyaWRnZV9sZWF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuQEAgLTIxNzcsMzAgJiM0MzsyMzQ2LDUzIEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfYnJpZGdlX2xlYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRcdFx0XHRcdCAgZmFsc2UpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludFxuJiM0MztkcGFhMl9zd2l0Y2hfaGF2ZV92bGFuX3VwcGVyKHN0cnVjdCBuZXRfZGV2aWNlICp1cHBlcl9kZXYsXG4mIzQzO1x0XHRcdCAgICAgX19hbHdheXNfdW51c2VkIHN0cnVjdCBuZXRkZXZfbmVzdGVkX3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gaXNfdmxhbl9kZXYodXBwZXJfZGV2KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wcmV2ZW50X2JyaWRnaW5nX3dpdGhfODAyMXFfdXBwZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqdXBwZXJfZGV2O1xuLVx0c3RydWN0IGxpc3RfaGVhZCAqaXRlcjtcbiYjNDM7XHRzdHJ1Y3QgbmV0ZGV2X25lc3RlZF9wcml2IHByaXYgPSB7fTtcbiBcbiBcdC8qIFJDVSByZWFkIGxvY2sgbm90IG5lY2Vzc2FyeSBiZWNhdXNlIHdlIGhhdmUgd3JpdGUtc2lkZSBwcm90ZWN0aW9uXG4tXHQgKiAocnRubF9tdXRleCksIGhvd2V2ZXIgYSBub24tcmN1IGl0ZXJhdG9yIGRvZXMgbm90IGV4aXN0LlxuJiM0MztcdCAqIChydG5sX211dGV4KSwgaG93ZXZlciBhIG5vbi1yY3UgaXRlcmF0b3IgZG9lcyBub3QgZXhpc3QuIFdhbGsgdGhlXG4mIzQzO1x0ICogZW50aXJlIHVwcGVyIGNoYWluIHNvIHRoYXQgYSBWTEFOIGRldmljZSBzdGFja2VkIG9uIGEgaW50ZXJtZWRpYXRlXG4mIzQzO1x0ICogYm9uZCBpcyBjYXVnaHQgdG9vLlxuIFx0ICovXG4tXHRuZXRkZXZfZm9yX2VhY2hfdXBwZXJfZGV2X3JjdShuZXRkZXYsIHVwcGVyX2RldiwgaXRlcilcbi1cdFx0aWYgKGlzX3ZsYW5fZGV2KHVwcGVyX2RldikpXG4tXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdGlmIChuZXRkZXZfd2Fsa19hbGxfdXBwZXJfZGV2X3JjdShuZXRkZXYsIGRwYWEyX3N3aXRjaF9oYXZlX3ZsYW5fdXBwZXIsXG4mIzQzO1x0XHRcdFx0XHQgIFx1MDAyNnByaXYpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9jaGVja19kcHN3X2luc3RhbmNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgc3RydWN0IG5ldGRldl9uZXN0ZWRfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IChzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICopcHJpdi1cdTAwM2VkYXRhO1xuJiM0MztcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKm90aGVyX3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhkZXYpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChvdGhlcl9wcml2LVx1MDAzZWV0aHN3X2RhdGEgPT0gcG9ydF9wcml2LVx1MDAzZWV0aHN3X2RhdGEpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDE7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludFxuIGRwYWEyX3N3aXRjaF9wcmVjaGFuZ2V1cHBlcl9zYW5pdHlfY2hlY2tzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2UgKnVwcGVyX2RldixcbiBcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbi1cdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKm90aGVyX3BvcnRfcHJpdjtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICpvdGhlcl9kZXY7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkICppdGVyO1xuJiM0MztcdHN0cnVjdCBuZXRkZXZfbmVzdGVkX3ByaXYgZGF0YSA9IHtcbiYjNDM7XHRcdC5kYXRhID0gKHZvaWQgKilwb3J0X3ByaXYsXG4mIzQzO1x0fTtcbiBcdGludCBlcnI7XG4gXG4gXHRpZiAoIWJyX3ZsYW5fZW5hYmxlZCh1cHBlcl9kZXYpKSB7XG5AQCAtMjIxNSw2ICYjNDM7MjQwNyw3MCBAQCBkcGFhMl9zd2l0Y2hfcHJlY2hhbmdldXBwZXJfc2FuaXR5X2NoZWNrcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuJiM0MztcdGVyciA9IG5ldGRldl93YWxrX2FsbF9sb3dlcl9kZXYodXBwZXJfZGV2LFxuJiM0MztcdFx0XHRcdFx0ZHBhYTJfc3dpdGNoX2NoZWNrX2Rwc3dfaW5zdGFuY2UsXG4mIzQzO1x0XHRcdFx0XHRcdTAwMjZkYXRhKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O0ludGVyZmFjZSBmcm9tIGEgZGlmZmVyZW50IERQU1cgaXMgaW4gdGhlIGJyaWRnZSBhbHJlYWR5XCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3ByZV9sYWdfam9pbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKnVwcGVyX2RldixcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBuZXRkZXZfbGFnX3VwcGVyX2luZm8gKmluZm8sXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHN0cnVjdCBldGhzd19jb3JlICpldGhzdyA9IHBvcnRfcHJpdi1cdTAwM2VldGhzd19kYXRhO1xuJiM0MztcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKm90aGVyX3BvcnRfcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqbGFnID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgZHBzd19sYWdfY2ZnIGNmZyA9IHswfTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqb3RoZXJfZGV2O1xuJiM0MztcdGludCBpLCBudW1faWZzID0gMCwgZXJyO1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7XG4mIzQzO1xuJiM0MztcdGlmICghKGV0aHN3LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBFVEhTV19GRUFUVVJFX0xBR19PRkZMT0FEKSkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDtMQUcgb2ZmbG9hZCBpcyBzdXBwb3J0ZWQgb25seSBmb3IgRFBTVyBcdTAwM2U9IHY4LjEzXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChpbmZvLVx1MDAzZXR4X3R5cGUgIT0gTkVUREVWX0xBR19UWF9UWVBFX0hBU0gpIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7Q2FuIG9ubHkgb2ZmbG9hZCBMQUcgdXNpbmcgaGFzaCBUWCB0eXBlXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChpbmZvLVx1MDAzZWhhc2hfdHlwZSAhPSBORVRERVZfTEFHX0hBU0hfTDIzKSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtDYW4gb25seSBvZmZsb2FkIEwyJiM0MztMMyBUeCBoYXNoXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfaGFzX21hYyhwb3J0X3ByaXYpKSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O09ubHkgc3dpdGNoIGludGVyZmFjZXMgY29ubmVjdGVkIHRvIE1BQ3MgY2FuIGJlIHVuZGVyIGEgTEFHXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHZsYW5fdXNlc19kZXYodXBwZXJfZGV2KSkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDtDYW5ub3Qgam9pbiBhIExBRyB1cHBlciB0aGF0IGhhcyBhIFZMQU5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZXRoc3ctXHUwMDNlc3dfYXR0ci5udW1faWZzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKCFldGhzdy1cdTAwM2VsYWdzW2ldLmluX3VzZSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRpZiAoZXRoc3ctXHUwMDNlbGFnc1tpXS5ib25kX2RldiAhPSB1cHBlcl9kZXYpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0bGFnID0gXHUwMDI2ZXRoc3ctXHUwMDNlbGFnc1tpXTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRuZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KHVwcGVyX2Rldiwgb3RoZXJfZGV2LCBpdGVyKSB7XG4gXHRcdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrKG90aGVyX2RldikpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtMjIyMiw5ICYjNDM7MjQ3OCwyNDggQEAgZHBhYTJfc3dpdGNoX3ByZWNoYW5nZXVwcGVyX3Nhbml0eV9jaGVja3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0b3RoZXJfcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYob3RoZXJfZGV2KTtcbiBcdFx0aWYgKG90aGVyX3BvcnRfcHJpdi1cdTAwM2VldGhzd19kYXRhICE9IHBvcnRfcHJpdi1cdTAwM2VldGhzd19kYXRhKSB7XG4gXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbi1cdFx0XHRcdFx0ICAgXCYjMzQ7SW50ZXJmYWNlIGZyb20gYSBkaWZmZXJlbnQgRFBTVyBpcyBpbiB0aGUgYnJpZGdlIGFscmVhZHlcJiMzNDspO1xuJiM0MztcdFx0XHRcdFx0ICAgXCYjMzQ7SW50ZXJmYWNlIGZyb20gYSBkaWZmZXJlbnQgRFBTVyBpcyBpbiB0aGUgYm9uZCBhbHJlYWR5XCYjMzQ7KTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGNmZy5pZl9pZFtudW1faWZzJiM0MzsmIzQzO10gPSBvdGhlcl9wb3J0X3ByaXYtXHUwMDNlaWR4O1xuJiM0MztcbiYjNDM7XHRcdGlmIChudW1faWZzIFx1MDAzZT0gRFBTV19NQVhfTEFHX0lGUykge1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0ICAgXCYjMzQ7Q2Fubm90IGFkZCBtb3JlIHRoYW4gOCBEUEFBMiBzd2l0Y2ggcG9ydHMgdW5kZXIgdGhlIHNhbWUgYm9uZFwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGxhZykge1xuJiM0MztcdFx0Y2ZnLmdyb3VwX2lkID0gbGFnLVx1MDAzZWlkO1xuJiM0MztcdFx0Y2ZnLmlmX2lkW251bV9pZnMmIzQzOyYjNDM7XSA9IHBvcnRfcHJpdi1cdTAwM2VpZHg7XG4mIzQzO1x0XHRjZmcubnVtX2lmcyA9IG51bV9pZnM7XG4mIzQzO1x0XHRjZmcucGhhc2UgPSBEUFNXX0xBR19TRVRfUEhBU0VfQ0hFQ0s7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gZHBzd19sYWdfc2V0KGV0aHN3LVx1MDAzZW1jX2lvLCAwLCBldGhzdy1cdTAwM2VkcHN3X2hhbmRsZSwgXHUwMDI2Y2ZnKTtcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdCAgIFwmIzM0O0Nhbm5vdCBvZmZsb2FkIExBRyBjb25maWd1cmF0aW9uXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9wb3J0X3NldF9sYWdfZ3JvdXAoc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2LFxuJiM0MztcdFx0XHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBldGhzd19jb3JlICpldGhzdyA9IHBvcnRfcHJpdi1cdTAwM2VldGhzd19kYXRhO1xuJiM0MztcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKm90aGVyX3BvcnRfcHJpdiA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZyA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKm90aGVyX2xhZztcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqb3RoZXJfZGV2O1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7XG4mIzQzO1xuJiM0MztcdG5ldGRldl9mb3JfZWFjaF9sb3dlcl9kZXYoYm9uZF9kZXYsIG90aGVyX2RldiwgaXRlcikge1xuJiM0MztcdFx0aWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2sob3RoZXJfZGV2KSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0b3RoZXJfcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYob3RoZXJfZGV2KTtcbiYjNDM7XHRcdG90aGVyX2xhZyA9IHJ0bmxfZGVyZWZlcmVuY2Uob3RoZXJfcG9ydF9wcml2LVx1MDAzZWxhZyk7XG4mIzQzO1x0XHRpZiAoIW90aGVyX2xhZylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG90aGVyX2xhZy1cdTAwM2Vib25kX2RldiA9PSBib25kX2Rldikge1xuJiM0MztcdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIocG9ydF9wcml2LVx1MDAzZWxhZywgb3RoZXJfbGFnKTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogVGhpcyBpcyB0aGUgZmlyc3QgaW50ZXJmYWNlIHRvIGJlIGFkZGVkIHVuZGVyIGEgYm9uZCBkZXZpY2UuIEZpbmQgYW5cbiYjNDM7XHQgKiB1bnVzZWQgTEFHIGdyb3VwLiBObyBuZWVkIHRvIGNoZWNrIGZvciBOVUxMIHNpbmNlIHRoZXJlIGFyZSB0aGUgc2FtZVxuJiM0MztcdCAqIGFtb3VudCBvZiBEUFNXIHBvcnRzIGFzIExBRyBncm91cHMsIG1lYW5pbmcgdGhhdCBlYWNoIHBvcnQgY2FuIGhhdmVcbiYjNDM7XHQgKiBpdHMgb3duIExBRyBncm91cC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRsYWcgPSBkcGFhMl9zd2l0Y2hfbGFnX2dldF91bnVzZWQoZXRoc3cpO1xuJiM0MztcdGxhZy1cdTAwM2Vpbl91c2UgPSB0cnVlO1xuJiM0MztcdGxhZy1cdTAwM2Vib25kX2RldiA9IGJvbmRfZGV2O1xuJiM0MztcdGxhZy1cdTAwM2VwcmltYXJ5ID0gcG9ydF9wcml2O1xuJiM0MztcdHJjdV9hc3NpZ25fcG9pbnRlcihwb3J0X3ByaXYtXHUwMDNlbGFnLCBsYWcpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBkcGFhMl9zd2l0Y2hfcG9ydF9pbl9sYWcoc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2LFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZztcbiYjNDM7XG4mIzQzO1x0aWYgKCFwb3J0X3ByaXYpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGxhZyA9IHJ0bmxfZGVyZWZlcmVuY2UocG9ydF9wcml2LVx1MDAzZWxhZyk7XG4mIzQzO1x0cmV0dXJuIGxhZyBcdTAwMjZcdTAwMjYgbGFnLVx1MDAzZWJvbmRfZGV2ID09IGJvbmRfZGV2O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9zZXRfbGFnX2NmZyhzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHU4IGxhZ19pZCxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZyA9IFx1MDAyNmV0aHN3LVx1MDAzZWxhZ3NbbGFnX2lkIC0gMV07XG4mIzQzO1x0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcHJpbWFyeSwgKnBvcnRfcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpuZXdfcHJpbWFyeSA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IGRwc3dfbGFnX2NmZyBjZmcgPSB7MH07XG4mIzQzO1x0c3RydWN0IGRwYWEyX21hY19hZGRyICphO1xuJiM0MztcdHU4IG51bV9pZnMgPSAwO1xuJiM0MztcdGludCBlcnIsIGk7XG4mIzQzO1xuJiM0MztcdGNmZy5ncm91cF9pZCA9IGxhZ19pZDtcbiYjNDM7XG4mIzQzO1x0LyogRGV0ZXJtaW5lIHRoZSBwcmltYXJ5IHBvcnQuIFRoZSBjYWxsZXIgY2xlYXJzIC1cdTAwM2VsYWcgb24gdGhlIHBvcnQgdGhhdFxuJiM0MztcdCAqIGlzIGxlYXZpbmcsIHNvIGEgTlVMTCAtXHUwMDNlbGFnIG9uIHRoZSBjdXJyZW50IHByaW1hcnkgbWVhbnMgaXQgaXMgdGhlXG4mIzQzO1x0ICogb25lIGxlYXZpbmc6IGVsZWN0IHRoZSBmaXJzdCByZW1haW5pbmcgbWVtYmVyIGFzIHRoZSBuZXcgcHJpbWFyeS5cbiYjNDM7XHQgKiBPdGhlcndpc2Uga2VlcCB0aGUgY3VycmVudCBwcmltYXJ5LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChydG5sX2RlcmVmZXJlbmNlKGxhZy1cdTAwM2VwcmltYXJ5LVx1MDAzZWxhZykpIHtcbiYjNDM7XHRcdHByaW1hcnkgPSBsYWctXHUwMDNlcHJpbWFyeTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cHJpbWFyeSA9IE5VTEw7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBldGhzdy1cdTAwM2Vzd19hdHRyLm51bV9pZnM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdGlmIChkcGFhMl9zd2l0Y2hfcG9ydF9pbl9sYWcoZXRoc3ctXHUwMDNlcG9ydHNbaV0sIGJvbmRfZGV2KSkge1xuJiM0MztcdFx0XHRcdG5ld19wcmltYXJ5ID0gZXRoc3ctXHUwMDNlcG9ydHNbaV07XG4mIzQzO1x0XHRcdFx0cHJpbWFyeSA9IG5ld19wcmltYXJ5O1xuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBCdWlsZCB0aGUgaW50ZXJmYWNlIGxpc3QsIGFsd2F5cyBwbGFjaW5nIHRoZSBwcmltYXJ5IGZpcnN0ICovXG4mIzQzO1x0aWYgKHByaW1hcnkpXG4mIzQzO1x0XHRjZmcuaWZfaWRbbnVtX2lmcyYjNDM7JiM0MztdID0gcHJpbWFyeS1cdTAwM2VpZHg7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZXRoc3ctXHUwMDNlc3dfYXR0ci5udW1faWZzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cG9ydF9wcml2ID0gZXRoc3ctXHUwMDNlcG9ydHNbaV07XG4mIzQzO1x0XHRpZiAocG9ydF9wcml2ID09IHByaW1hcnkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9pbl9sYWcocG9ydF9wcml2LCBib25kX2RldikpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGNmZy5pZl9pZFtudW1faWZzJiM0MzsmIzQzO10gPSBwb3J0X3ByaXYtXHUwMDNlaWR4O1xuJiM0MztcdH1cbiYjNDM7XHRjZmcubnVtX2lmcyA9IG51bV9pZnM7XG4mIzQzO1xuJiM0MztcdC8qIE5vIG1vcmUgaW50ZXJmYWNlcyB1bmRlciB0aGlzIExBRyBncm91cCwgbWFyayBpdCBhcyBub3QgaW4gdXNlLiBXYWl0XG4mIzQzO1x0ICogZm9yIGEgZ3JhY2UgcGVyaW9kIHNvIHRoYXQgYW55IHJlYWRlcnMgb2YgdGhlIGxhZyBzdHJ1Y3R1cmUgZmluaXNoZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFudW1faWZzKSB7XG4mIzQzO1x0XHRzeW5jaHJvbml6ZV9uZXQoKTtcbiYjNDM7XG4mIzQzO1x0XHRsYWctXHUwMDNlYm9uZF9kZXYgPSBOVUxMO1xuJiM0MztcdFx0bGFnLVx1MDAzZXByaW1hcnkgPSBOVUxMO1xuJiM0MztcdFx0bGFnLVx1MDAzZWluX3VzZSA9IGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogV2hlbiB0aGUgcHJpbWFyeSBjaGFuZ2VzLCBtaWdyYXRlIHRoZSBGREIgZW50cmllcyBmcm9tIHRoZSBvbGRcbiYjNDM7XHQgKiBwcmltYXJ5IHRvIHRoZSBuZXcgb25lOiByZW1vdmUgdGhlbSBiZWZvcmUgcmVjb25maWd1cmluZyB0aGUgTEFHIGluXG4mIzQzO1x0ICogaGFyZHdhcmUgYW5kIHJlLWFkZCB0aGVtIG9uIHRoZSBuZXcgcHJpbWFyeSBhZnRlcndhcmRzLiBXZSBkbyBub3RcbiYjNDM7XHQgKiB0b3VjaCBhbnkgcmVmY291bnRpbmcgc2luY2UgdGhlIGludGVudGlvbiBpcyB0byBjaGFuZ2UgdGhlIEhXIGVudHJ5LFxuJiM0MztcdCAqIG5vdCB0aGUgcGFyYWxsZWwgc29mdHdhcmUgdHJhY2tpbmcuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG5ld19wcmltYXJ5KSB7XG4mIzQzO1x0XHRtdXRleF9sb2NrKFx1MDAyNmxhZy1cdTAwM2VmZGJfbG9jayk7XG4mIzQzO1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGEsIFx1MDAyNmxhZy1cdTAwM2VmZGJzLCBsaXN0KVxuJiM0MztcdFx0XHRkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsKGxhZy1cdTAwM2VwcmltYXJ5LCBhLVx1MDAzZWFkZHIpO1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxhZy1cdTAwM2VmZGJfbG9jayk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSBkcHN3X2xhZ19zZXQoZXRoc3ctXHUwMDNlbWNfaW8sIDAsIGV0aHN3LVx1MDAzZWRwc3dfaGFuZGxlLCBcdTAwMjZjZmcpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAobmV3X3ByaW1hcnkpIHtcbiYjNDM7XHRcdG11dGV4X2xvY2soXHUwMDI2bGFnLVx1MDAzZWZkYl9sb2NrKTtcbiYjNDM7XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoYSwgXHUwMDI2bGFnLVx1MDAzZWZkYnMsIGxpc3QpIHtcbiYjNDM7XHRcdFx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2FkZChuZXdfcHJpbWFyeSwgYS1cdTAwM2VhZGRyKTtcbiYjNDM7XHRcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0XHRuZXRkZXZfZXJyKG5ld19wcmltYXJ5LVx1MDAzZW5ldGRldiwgXCYjMzQ7VW5hYmxlIHRvIG1pZ3JhdGUgRkRCXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZsYWctXHUwMDNlZmRiX2xvY2spO1xuJiM0MztcbiYjNDM7XHRcdHN5bmNocm9uaXplX25ldCgpO1xuJiM0MztcdFx0bGFnLVx1MDAzZXByaW1hcnkgPSBuZXdfcHJpbWFyeTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2JvbmRfam9pbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRkZXZfbGFnX3VwcGVyX2luZm8gKmluZm8sXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0c3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3ID0gcG9ydF9wcml2LVx1MDAzZWV0aHN3X2RhdGE7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKmJyaWRnZV9kZXY7XG4mIzQzO1x0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZztcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XHR1OCBsYWdfaWQ7XG4mIzQzO1xuJiM0MztcdC8qIFNldHVwIHRoZSBwb3J0X3ByaXYtXHUwMDNlbGFnIHBvaW50ZXIgZm9yIHRoaXMgc3dpdGNoIHBvcnQgKi9cbiYjNDM7XHRkcGFhMl9zd2l0Y2hfcG9ydF9zZXRfbGFnX2dyb3VwKHBvcnRfcHJpdiwgYm9uZF9kZXYpO1xuJiM0MztcbiYjNDM7XHQvKiBDcmVhdGUgdGhlIExBRyBjb25maWd1cmF0aW9uIGFuZCBhcHBseSBpdCBpbiBNQyAqL1xuJiM0MztcdGxhZyA9IHJ0bmxfZGVyZWZlcmVuY2UocG9ydF9wcml2LVx1MDAzZWxhZyk7XG4mIzQzO1x0bGFnX2lkID0gbGFnLVx1MDAzZWlkO1xuJiM0MztcdGVyciA9IGRwYWEyX3N3aXRjaF9zZXRfbGFnX2NmZyhib25kX2RldiwgbGFnX2lkLCBldGhzdyk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXJyX2xhZ19jZmc7XG4mIzQzO1xuJiM0MztcdC8qIElmIHRoZSBib25kIGRldmljZSBpcyBhIHN3aXRjaCBwb3J0LCBqb2luIHRoZSBicmlkZ2UgYXMgd2VsbCAqL1xuJiM0MztcdGJyaWRnZV9kZXYgPSBuZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9nZXQoYm9uZF9kZXYpO1xuJiM0MztcdGlmICghYnJpZGdlX2RldiB8fCAhbmV0aWZfaXNfYnJpZGdlX21hc3RlcihicmlkZ2VfZGV2KSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9icmlkZ2Vfam9pbihuZXRkZXYsIGJyaWRnZV9kZXYsIGV4dGFjayk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXJyX2xhZ19jZmc7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztlcnJfbGFnX2NmZzpcbiYjNDM7XHRyY3VfYXNzaWduX3BvaW50ZXIocG9ydF9wcml2LVx1MDAzZWxhZywgTlVMTCk7XG4mIzQzO1x0ZHBhYTJfc3dpdGNoX3NldF9sYWdfY2ZnKGJvbmRfZGV2LCBsYWdfaWQsIGV0aHN3KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9ib25kX2xlYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqYnJpZGdlX2RldiA9IG5ldGRldl9tYXN0ZXJfdXBwZXJfZGV2X2dldChib25kX2Rldik7XG4mIzQzO1x0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqbGFnID0gcnRubF9kZXJlZmVyZW5jZShwb3J0X3ByaXYtXHUwMDNlbGFnKTtcbiYjNDM7XHRzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3cgPSBwb3J0X3ByaXYtXHUwMDNlZXRoc3dfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqYnJwZGV2O1xuJiM0MztcdGJvb2wgbGVhcm5fZW5hO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmICghbGFnKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIFJlY3JlYXRlIHRoZSBMQUcgY29uZmlndXJhdGlvbiBmb3IgdGhlIExBRyBncm91cCB0aGF0IHdlIGxlZnQuICovXG4mIzQzO1x0cmN1X2Fzc2lnbl9wb2ludGVyKHBvcnRfcHJpdi1cdTAwM2VsYWcsIE5VTEwpO1xuJiM0MztcdGRwYWEyX3N3aXRjaF9zZXRfbGFnX2NmZyhib25kX2RldiwgbGFnLVx1MDAzZWlkLCBldGhzdyk7XG4mIzQzO1xuJiM0MztcdGlmIChicmlkZ2VfZGV2IFx1MDAyNlx1MDAyNiBuZXRpZl9pc19icmlkZ2VfbWFzdGVyKGJyaWRnZV9kZXYpKSB7XG4mIzQzO1x0XHQvKiBNYWtlIHN1cmUgdGhhdCB0aGUgbmV3IHByaW1hcnkgaW5oZXJpdHMgdGhlIGxlYXJuaW5nIHN0YXRlICovXG4mIzQzO1x0XHRpZiAobGFnLVx1MDAzZXByaW1hcnkpIHtcbiYjNDM7XHRcdFx0YnJwZGV2ID0gZHBhYTJfc3dpdGNoX3BvcnRfdG9fYnJpZGdlX3BvcnQobGFnLVx1MDAzZXByaW1hcnkpO1xuJiM0MztcdFx0XHRsZWFybl9lbmEgPSBicl9wb3J0X2ZsYWdfaXNfc2V0KGJycGRldiwgQlJfTEVBUk5JTkcpO1xuJiM0MztcdFx0XHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9zZXRfbGVhcm5pbmcobGFnLVx1MDAzZXByaW1hcnksXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICBsZWFybl9lbmEpO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHRcdGxhZy1cdTAwM2VwcmltYXJ5LVx1MDAzZWxlYXJuX2VuYSA9IGxlYXJuX2VuYTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQvKiBJbiBjYXNlIHRoZSBib25kIGlzIGEgYnJpZGdlIHBvcnQsIGxlYXZlIHRoZSB1cHBlciBicmlkZ2UgYXNcbiYjNDM7XHRcdCAqIHdlbGwuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJldHVybiBkcGFhMl9zd2l0Y2hfcG9ydF9icmlkZ2VfbGVhdmUobmV0ZGV2KTtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuQEAgLTIyMzQsOCAmIzQzOzI3MjksOCBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X3ByZWNoYW5nZXVwcGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0ZGV2X25vdGlmaWVyX2NoYW5nZXVwcGVyX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2O1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICp1cHBlcl9kZXYsICpicjtcbiBcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaztcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICp1cHBlcl9kZXY7XG4gXHRpbnQgZXJyO1xuIFxuIFx0aWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2sobmV0ZGV2KSlcbkBAIC0yMjUyLDYgJiM0MzsyNzQ3LDI0IEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfcHJlY2hhbmdldXBwZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcbiBcdFx0aWYgKCFpbmZvLVx1MDAzZWxpbmtpbmcpXG4gXHRcdFx0ZHBhYTJfc3dpdGNoX3BvcnRfcHJlX2JyaWRnZV9sZWF2ZShuZXRkZXYpO1xuJiM0MztcdH0gZWxzZSBpZiAobmV0aWZfaXNfbGFnX21hc3Rlcih1cHBlcl9kZXYpKSB7XG4mIzQzO1x0XHRpZiAoIWluZm8tXHUwMDNlbGlua2luZykge1xuJiM0MztcdFx0XHRpZiAobmV0aWZfaXNfYnJpZGdlX3BvcnQodXBwZXJfZGV2KSlcbiYjNDM7XHRcdFx0XHRkcGFhMl9zd2l0Y2hfcG9ydF9wcmVfYnJpZGdlX2xlYXZlKG5ldGRldik7XG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChuZXRpZl9pc19icmlkZ2VfcG9ydCh1cHBlcl9kZXYpKSB7XG4mIzQzO1x0XHRcdGJyID0gbmV0ZGV2X21hc3Rlcl91cHBlcl9kZXZfZ2V0KHVwcGVyX2Rldik7XG4mIzQzO1x0XHRcdGVyciA9IGRwYWEyX3N3aXRjaF9wcmVjaGFuZ2V1cHBlcl9zYW5pdHlfY2hlY2tzKG5ldGRldixcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdFx0YnIsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRcdGV4dGFjayk7XG4mIzQzO1x0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gZHBhYTJfc3dpdGNoX3ByZV9sYWdfam9pbihuZXRkZXYsIHVwcGVyX2RldixcbiYjNDM7XHRcdFx0XHRcdFx0IGluZm8tXHUwMDNldXBwZXJfaW5mbywgZXh0YWNrKTtcbiBcdH0gZWxzZSBpZiAoaXNfdmxhbl9kZXYodXBwZXJfZGV2KSkge1xuIFx0XHRwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0XHRpZiAocG9ydF9wcml2LVx1MDAzZWZkYi1cdTAwM2VicmlkZ2VfZGV2KSB7XG5AQCAtMjI4Myw2ICYjNDM7Mjc5Niw4MCBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2NoYW5nZXVwcGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdFx0XHQgICAgIGV4dGFjayk7XG4gXHRcdGVsc2VcbiBcdFx0XHRyZXR1cm4gZHBhYTJfc3dpdGNoX3BvcnRfYnJpZGdlX2xlYXZlKG5ldGRldik7XG4mIzQzO1x0fSBlbHNlIGlmIChuZXRpZl9pc19sYWdfbWFzdGVyKHVwcGVyX2RldikpIHtcbiYjNDM7XHRcdGlmIChpbmZvLVx1MDAzZWxpbmtpbmcpXG4mIzQzO1x0XHRcdHJldHVybiBkcGFhMl9zd2l0Y2hfcG9ydF9ib25kX2pvaW4obmV0ZGV2LCB1cHBlcl9kZXYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgaW5mby1cdTAwM2V1cHBlcl9pbmZvLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIGV4dGFjayk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHJldHVybiBkcGFhMl9zd2l0Y2hfcG9ydF9ib25kX2xlYXZlKG5ldGRldiwgdXBwZXJfZGV2KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO2RwYWEyX3N3aXRjaF9sYWdfcHJlY2hhbmdldXBwZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgbmV0ZGV2X25vdGlmaWVyX2NoYW5nZXVwcGVyX2luZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbG93ZXI7XG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCAqaXRlcjtcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFuZXRpZl9pc19sYWdfbWFzdGVyKG5ldGRldikpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX2RldihuZXRkZXYsIGxvd2VyLCBpdGVyKSB7XG4mIzQzO1x0XHRpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhsb3dlcikpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X3ByZWNoYW5nZXVwcGVyKGxvd2VyLCBpbmZvKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO2RwYWEyX3N3aXRjaF9sYWdfY2hhbmdldXBwZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3QgbmV0ZGV2X25vdGlmaWVyX2NoYW5nZXVwcGVyX2luZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbG93ZXI7XG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCAqaXRlcjtcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFuZXRpZl9pc19sYWdfbWFzdGVyKG5ldGRldikpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX2RldihuZXRkZXYsIGxvd2VyLCBpdGVyKSB7XG4mIzQzO1x0XHRpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhsb3dlcikpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X2NoYW5nZXVwcGVyKGxvd2VyLCBpbmZvKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0MztkcGFhMl9zd2l0Y2hfcG9ydF9jaGFuZ2Vsb3dlcnN0YXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IG5ldGRldl9sYWdfbG93ZXJfc3RhdGVfaW5mbyAqbGluZm8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHN0cnVjdCBldGhzd19jb3JlICpldGhzdyA9IHBvcnRfcHJpdi1cdTAwM2VldGhzd19kYXRhO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmICghcnRubF9kZXJlZmVyZW5jZShwb3J0X3ByaXYtXHUwMDNlbGFnKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBkcHN3X2lmX3NldF9sYWdfc3RhdGUoZXRoc3ctXHUwMDNlbWNfaW8sIDAsIGV0aHN3LVx1MDAzZWRwc3dfaGFuZGxlLFxuJiM0MztcdFx0XHRcdCAgICBwb3J0X3ByaXYtXHUwMDNlaWR4LCBsaW5mby1cdTAwM2V0eF9lbmFibGVkID8gMSA6IDApO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDtkcHN3X2lmX3NldF9sYWdfc3RhdGUoKSA9ICVkXFxuXCYjMzQ7LCBlcnIpO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuQEAgLTIyOTIsNiAmIzQzOzI4NzksNyBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X25ldGRldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuIFx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7XG4mIzQzO1x0c3RydWN0IG5ldGRldl9ub3RpZmllcl9jaGFuZ2Vsb3dlcnN0YXRlX2luZm8gKmluZm87XG4gXHRpbnQgZXJyID0gMDtcbiBcbiBcdHN3aXRjaCAoZXZlbnQpIHtcbkBAIC0yMzAwLDEzICYjNDM7Mjg4OCwyOSBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X25ldGRldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7XG4gXG4mIzQzO1x0XHRlcnIgPSBkcGFhMl9zd2l0Y2hfbGFnX3ByZWNoYW5nZXVwcGVyKG5ldGRldiwgcHRyKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7XG4mIzQzO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgTkVUREVWX0NIQU5HRVVQUEVSOlxuIFx0XHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9jaGFuZ2V1cHBlcihuZXRkZXYsIHB0cik7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8oZXJyKTtcbiBcbiYjNDM7XHRcdGVyciA9IGRwYWEyX3N3aXRjaF9sYWdfY2hhbmdldXBwZXIobmV0ZGV2LCBwdHIpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8oZXJyKTtcbiYjNDM7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTkVUREVWX0NIQU5HRUxPV0VSU1RBVEU6XG4mIzQzO1x0XHRpbmZvID0gcHRyO1xuJiM0MztcdFx0aWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2sobmV0ZGV2KSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfY2hhbmdlbG93ZXJzdGF0ZShuZXRkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0IGluZm8tXHUwMDNlbG93ZXJfc3RhdGVfaW5mbyk7XG4mIzQzO1x0XHRyZXR1cm4gbm90aWZpZXJfZnJvbV9lcnJubyhlcnIpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIE5PVElGWV9ET05FO1xuQEAgLTIzMTYsODAgJiM0MzsyOTIwLDk3IEBAIHN0cnVjdCBldGhzd19zd2l0Y2hkZXZfZXZlbnRfd29yayB7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yaztcbiBcdHN0cnVjdCBzd2l0Y2hkZXZfbm90aWZpZXJfZmRiX2luZm8gZmRiX2luZm87XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldjtcbiBcdHVuc2lnbmVkIGxvbmcgZXZlbnQ7XG4mIzQzO1x0dTE2IHZpZDtcbiB9O1xuIFxuIHN0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9ldmVudF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgZXRoc3dfc3dpdGNoZGV2X2V2ZW50X3dvcmsgKnN3aXRjaGRldl93b3JrID1cbiBcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBldGhzd19zd2l0Y2hkZXZfZXZlbnRfd29yaywgd29yayk7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2ID0gc3dpdGNoZGV2X3dvcmstXHUwMDNlb3JpZ19kZXY7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc3dpdGNoZGV2X3dvcmstXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IG5ldGRldl9wcml2KGRldik7XG4gXHRzdHJ1Y3Qgc3dpdGNoZGV2X25vdGlmaWVyX2ZkYl9pbmZvICpmZGJfaW5mbztcbiYjNDM7XHRzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqbGFnO1xuIFx0aW50IGVycjtcbiBcbi1cdHJ0bmxfbG9jaygpO1xuIFx0ZmRiX2luZm8gPSBcdTAwMjZzd2l0Y2hkZXZfd29yay1cdTAwM2VmZGJfaW5mbztcbiBcbiYjNDM7XHQvKiBUaGUgbGFnIHN0cnVjdHVyZXMgYXJlIGZyZWVkIG9ubHkgZnJvbSBkcGFhMl9zd2l0Y2hfcmVtb3ZlKCksIHdoaWNoXG4mIzQzO1x0ICogZmlyc3QgZmx1c2hlcyB0aGlzIHdvcmtxdWV1ZSwgc28gdGhlIHBvaW50ZXIgc3RheXMgdmFsaWQgZm9yIHRoZVxuJiM0MztcdCAqIGxpZmV0aW1lIG9mIHRoZSB3b3JrIGl0ZW0uIE9ubHkgdGhlIGRlcmVmZXJlbmNlIG5lZWRzIHRoZSBSQ1VcbiYjNDM7XHQgKiByZWFkLXNpZGUgbG9jazsgdGhlIEZEQiBoZWxwZXJzIGJlbG93IGNhbiBzbGVlcCBhbmQgbXVzdCBydW4gb3V0c2lkZVxuJiM0MztcdCAqIG9mIGl0LlxuJiM0MztcdCAqL1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRsYWcgPSByY3VfZGVyZWZlcmVuY2UocG9ydF9wcml2LVx1MDAzZWxhZyk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuIFx0c3dpdGNoIChzd2l0Y2hkZXZfd29yay1cdTAwM2VldmVudCkge1xuIFx0Y2FzZSBTV0lUQ0hERVZfRkRCX0FERF9UT19ERVZJQ0U6XG4tXHRcdGlmICghZmRiX2luZm8tXHUwMDNlYWRkZWRfYnlfdXNlciB8fCBmZGJfaW5mby1cdTAwM2Vpc19sb2NhbClcbi1cdFx0XHRicmVhaztcbi1cdFx0aWYgKGlzX3VuaWNhc3RfZXRoZXJfYWRkcihmZGJfaW5mby1cdTAwM2VhZGRyKSlcbi1cdFx0XHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfYWRkX3VjKG5ldGRldl9wcml2KGRldiksXG4tXHRcdFx0XHRcdFx0XHQgICBmZGJfaW5mby1cdTAwM2VhZGRyKTtcbiYjNDM7XHRcdGlmIChsYWcpXG4mIzQzO1x0XHRcdGVyciA9IGRwYWEyX3N3aXRjaF9sYWdfZmRiX2FkZChsYWcsIGZkYl9pbmZvLVx1MDAzZWFkZHIsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBzd2l0Y2hkZXZfd29yay1cdTAwM2V2aWQpO1xuIFx0XHRlbHNlXG4tXHRcdFx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2FkZF9tYyhuZXRkZXZfcHJpdihkZXYpLFxuLVx0XHRcdFx0XHRcdFx0ICAgZmRiX2luZm8tXHUwMDNlYWRkcik7XG4mIzQzO1x0XHRcdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9hZGQocG9ydF9wcml2LFxuJiM0MztcdFx0XHRcdFx0XHRcdGZkYl9pbmZvLVx1MDAzZWFkZHIpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRmZGJfaW5mby1cdTAwM2VvZmZsb2FkZWQgPSB0cnVlO1xuLVx0XHRjYWxsX3N3aXRjaGRldl9ub3RpZmllcnMoU1dJVENIREVWX0ZEQl9PRkZMT0FERUQsIGRldixcbiYjNDM7XHRcdGNhbGxfc3dpdGNoZGV2X25vdGlmaWVycyhTV0lUQ0hERVZfRkRCX09GRkxPQURFRCwgb3JpZ19kZXYsXG4gXHRcdFx0XHRcdCBcdTAwMjZmZGJfaW5mby1cdTAwM2VpbmZvLCBOVUxMKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFNXSVRDSERFVl9GREJfREVMX1RPX0RFVklDRTpcbi1cdFx0aWYgKCFmZGJfaW5mby1cdTAwM2VhZGRlZF9ieV91c2VyIHx8IGZkYl9pbmZvLVx1MDAzZWlzX2xvY2FsKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRpZiAoaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGZkYl9pbmZvLVx1MDAzZWFkZHIpKVxuLVx0XHRcdGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9kZWxfdWMobmV0ZGV2X3ByaXYoZGV2KSwgZmRiX2luZm8tXHUwMDNlYWRkcik7XG4mIzQzO1x0XHRpZiAobGFnKVxuJiM0MztcdFx0XHRkcGFhMl9zd2l0Y2hfbGFnX2ZkYl9kZWwobGFnLCBmZGJfaW5mby1cdTAwM2VhZGRyLFxuJiM0MztcdFx0XHRcdFx0XHQgc3dpdGNoZGV2X3dvcmstXHUwMDNldmlkKTtcbiBcdFx0ZWxzZVxuLVx0XHRcdGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9kZWxfbWMobmV0ZGV2X3ByaXYoZGV2KSwgZmRiX2luZm8tXHUwMDNlYWRkcik7XG4mIzQzO1x0XHRcdGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9kZWwocG9ydF9wcml2LCBmZGJfaW5mby1cdTAwM2VhZGRyKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXG4tXHRydG5sX3VubG9jaygpO1xuIFx0a2ZyZWUoc3dpdGNoZGV2X3dvcmstXHUwMDNlZmRiX2luZm8uYWRkcik7XG4gXHRrZnJlZShzd2l0Y2hkZXZfd29yayk7XG4gXHRkZXZfcHV0KGRldik7XG4mIzQzO1x0ZGV2X3B1dChvcmlnX2Rldik7XG4gfVxuIFxuLS8qIENhbGxlZCB1bmRlciByY3VfcmVhZF9sb2NrKCkgKi9cbi1zdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4tXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7ZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2V2ZW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYsXG4mIzQzO1x0XHRcdCAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCBjb25zdCB2b2lkICpjdHgsXG4mIzQzO1x0XHRcdCAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X25vdGlmaWVyX2ZkYl9pbmZvICpmZGJfaW5mbylcbiB7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc3dpdGNoZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7XG4gXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0c3RydWN0IGV0aHN3X3N3aXRjaGRldl9ldmVudF93b3JrICpzd2l0Y2hkZXZfd29yaztcbi1cdHN0cnVjdCBzd2l0Y2hkZXZfbm90aWZpZXJfZmRiX2luZm8gKmZkYl9pbmZvID0gcHRyO1xuIFx0c3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3ID0gcG9ydF9wcml2LVx1MDAzZWV0aHN3X2RhdGE7XG4gXG4tXHRpZiAoZXZlbnQgPT0gU1dJVENIREVWX1BPUlRfQVRUUl9TRVQpXG4tXHRcdHJldHVybiBkcGFhMl9zd2l0Y2hfcG9ydF9hdHRyX3NldF9ldmVudChkZXYsIHB0cik7XG4mIzQzO1x0aWYgKGN0eCBcdTAwMjZcdTAwMjYgY3R4ICE9IHBvcnRfcHJpdilcbiYjNDM7XHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2soZGV2KSlcbi1cdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuJiM0MztcdC8qIEZvciB0aGUgbW9tZW50LCBkbyBub3RoaW5nIHdpdGggZW50cmllcyB0b3dhcmRzIGZvcmVpZ24gZGV2aWNlcyAqL1xuJiM0MztcdGlmIChkcGFhMl9zd2l0Y2hfZm9yZWlnbl9kZXZfY2hlY2soZGV2LCBvcmlnX2RldikpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFmZGJfaW5mby1cdTAwM2VhZGRlZF9ieV91c2VyIHx8IGZkYl9pbmZvLVx1MDAzZWlzX2xvY2FsKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4gXG4gXHRzd2l0Y2hkZXZfd29yayA9IGt6YWxsb2Nfb2JqKCpzd2l0Y2hkZXZfd29yaywgR0ZQX0FUT01JQyk7XG4gXHRpZiAoIXN3aXRjaGRldl93b3JrKVxuLVx0XHRyZXR1cm4gTk9USUZZX0JBRDtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0SU5JVF9XT1JLKFx1MDAyNnN3aXRjaGRldl93b3JrLVx1MDAzZXdvcmssIGRwYWEyX3N3aXRjaF9ldmVudF93b3JrKTtcbiBcdHN3aXRjaGRldl93b3JrLVx1MDAzZWRldiA9IGRldjtcbiBcdHN3aXRjaGRldl93b3JrLVx1MDAzZWV2ZW50ID0gZXZlbnQ7XG4mIzQzO1x0c3dpdGNoZGV2X3dvcmstXHUwMDNlb3JpZ19kZXYgPSBvcmlnX2RldjtcbiYjNDM7XHRzd2l0Y2hkZXZfd29yay1cdTAwM2V2aWQgPSBmZGJfaW5mby1cdTAwM2V2aWQ7XG4gXG4gXHRzd2l0Y2ggKGV2ZW50KSB7XG4gXHRjYXNlIFNXSVRDSERFVl9GREJfQUREX1RPX0RFVklDRTpcbiBcdGNhc2UgU1dJVENIREVWX0ZEQl9ERUxfVE9fREVWSUNFOlxuLVx0XHRtZW1jcHkoXHUwMDI2c3dpdGNoZGV2X3dvcmstXHUwMDNlZmRiX2luZm8sIHB0cixcbiYjNDM7XHRcdG1lbWNweShcdTAwMjZzd2l0Y2hkZXZfd29yay1cdTAwM2VmZGJfaW5mbywgZmRiX2luZm8sXG4gXHRcdCAgICAgICBzaXplb2Yoc3dpdGNoZGV2X3dvcmstXHUwMDNlZmRiX2luZm8pKTtcbiBcdFx0c3dpdGNoZGV2X3dvcmstXHUwMDNlZmRiX2luZm8uYWRkciA9IGt6YWxsb2MoRVRIX0FMRU4sIEdGUF9BVE9NSUMpO1xuIFx0XHRpZiAoIXN3aXRjaGRldl93b3JrLVx1MDAzZWZkYl9pbmZvLmFkZHIpXG5AQCAtMjQwMCw1MiAmIzQzOzMwMjEsNjEgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuIFxuIFx0XHQvKiBUYWtlIGEgcmVmZXJlbmNlIG9uIHRoZSBkZXZpY2UgdG8gYXZvaWQgYmVpbmcgZnJlZWQuICovXG4gXHRcdGRldl9ob2xkKGRldik7XG4mIzQzO1x0XHRkZXZfaG9sZChvcmlnX2Rldik7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0a2ZyZWUoc3dpdGNoZGV2X3dvcmspO1xuLVx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbiBcdHF1ZXVlX3dvcmsoZXRoc3ctXHUwMDNld29ya3F1ZXVlLCBcdTAwMjZzd2l0Y2hkZXZfd29yay1cdTAwM2V3b3JrKTtcbiBcbi1cdHJldHVybiBOT1RJRllfRE9ORTtcbiYjNDM7XHRyZXR1cm4gMDtcbiBcbiBlcnJfYWRkcl9hbGxvYzpcbiBcdGtmcmVlKHN3aXRjaGRldl93b3JrKTtcbi1cdHJldHVybiBOT1RJRllfQkFEO1xuJiM0MztcdHJldHVybiAtRU5PTUVNO1xuIH1cbiBcbi1zdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X29ial9ldmVudCh1bnNpZ25lZCBsb25nIGV2ZW50LFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IHN3aXRjaGRldl9ub3RpZmllcl9wb3J0X29ial9pbmZvICpwb3J0X29ial9pbmZvKVxuJiM0MzsvKiBDYWxsZWQgdW5kZXIgcmN1X3JlYWRfbG9jaygpICovXG4mIzQzO3N0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbiYjNDM7XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXG4ge1xuLVx0aW50IGVyciA9IC1FT1BOT1RTVVBQO1xuLVxuLVx0aWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2sobmV0ZGV2KSlcbi1cdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBzd2l0Y2hkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcbiYjNDM7XHRpbnQgZXJyO1xuIFxuIFx0c3dpdGNoIChldmVudCkge1xuLVx0Y2FzZSBTV0lUQ0hERVZfUE9SVF9PQkpfQUREOlxuLVx0XHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9vYmpfYWRkKG5ldGRldiwgcG9ydF9vYmpfaW5mby1cdTAwM2VvYmopO1xuLVx0XHRicmVhaztcbi1cdGNhc2UgU1dJVENIREVWX1BPUlRfT0JKX0RFTDpcbi1cdFx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfb2JqX2RlbChuZXRkZXYsIHBvcnRfb2JqX2luZm8tXHUwMDNlb2JqKTtcbi1cdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBTV0lUQ0hERVZfUE9SVF9BVFRSX1NFVDpcbiYjNDM7XHRcdHJldHVybiBkcGFhMl9zd2l0Y2hfcG9ydF9hdHRyX3NldF9ldmVudChkZXYsIHB0cik7XG4mIzQzO1x0Y2FzZSBTV0lUQ0hERVZfRkRCX0FERF9UT19ERVZJQ0U6XG4mIzQzO1x0Y2FzZSBTV0lUQ0hERVZfRkRCX0RFTF9UT19ERVZJQ0U6XG4mIzQzO1x0XHRlcnIgPSBzd2l0Y2hkZXZfaGFuZGxlX2ZkYl9ldmVudF90b19kZXZpY2UoZGV2LCBldmVudCwgcHRyLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIGRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBkcGFhMl9zd2l0Y2hfZm9yZWlnbl9kZXZfY2hlY2ssXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2V2ZW50KTtcbiYjNDM7XHRcdHJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiBOT1RJRllfRE9ORTtcbiBcdH1cbi1cbi1cdHBvcnRfb2JqX2luZm8tXHUwMDNlaGFuZGxlZCA9IHRydWU7XG4tXHRyZXR1cm4gbm90aWZpZXJfZnJvbV9lcnJubyhlcnIpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2Jsb2NraW5nX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4gXHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHN3aXRjaGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xuJiM0MztcdGludCBlcnI7XG4gXG4gXHRzd2l0Y2ggKGV2ZW50KSB7XG4gXHRjYXNlIFNXSVRDSERFVl9QT1JUX09CSl9BREQ6XG4mIzQzO1x0XHRlcnIgPSBzd2l0Y2hkZXZfaGFuZGxlX3BvcnRfb2JqX2FkZChkZXYsIHB0cixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIGRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIGRwYWEyX3N3aXRjaF9wb3J0X29ial9hZGQpO1xuJiM0MztcdFx0cmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8oZXJyKTtcbiBcdGNhc2UgU1dJVENIREVWX1BPUlRfT0JKX0RFTDpcbi1cdFx0cmV0dXJuIGRwYWEyX3N3aXRjaF9wb3J0X29ial9ldmVudChldmVudCwgZGV2LCBwdHIpO1xuJiM0MztcdFx0ZXJyID0gc3dpdGNoZGV2X2hhbmRsZV9wb3J0X29ial9kZWwoZGV2LCBwdHIsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2ssXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBkcGFhMl9zd2l0Y2hfcG9ydF9vYmpfZGVsKTtcbiYjNDM7XHRcdHJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7XG4gXHRjYXNlIFNXSVRDSERFVl9QT1JUX0FUVFJfU0VUOlxuIFx0XHRyZXR1cm4gZHBhYTJfc3dpdGNoX3BvcnRfYXR0cl9zZXRfZXZlbnQoZGV2LCBwdHIpO1xuIFx0fVxuQEAgLTI0OTAsMTkgJiM0MzszMTIwLDIyIEBAIHN0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9yeChzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZxICpmcSxcbiBcdGRtYV9hZGRyX3QgYWRkciA9IGRwYWEyX2ZkX2dldF9hZGRyKGZkKTtcbiBcdHN0cnVjdCBldGhzd19jb3JlICpldGhzdyA9IGZxLVx1MDAzZWV0aHN3O1xuIFx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2O1xuJiM0MztcdHN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWc7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuIFx0c3RydWN0IHZsYW5fZXRoaGRyICpoZHI7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFx0dTE2IHZsYW5fdGNpLCB2aWQ7XG4gXHRpbnQgaWZfaWQsIGVycjtcbiBcdHZvaWQgKnZhZGRyO1xuJiM0MztcdHU2NCBmbGM7XG4gXG4gXHR2YWRkciA9IGRwYWEyX2lvdmFfdG9fdmlydChldGhzdy1cdTAwM2Vpb21tdV9kb21haW4sIGFkZHIpO1xuIFx0ZG1hX3VubWFwX3BhZ2UoZXRoc3ctXHUwMDNlZGV2LCBhZGRyLCBEUEFBMl9TV0lUQ0hfUlhfQlVGX1NJWkUsXG4gXHRcdCAgICAgICBETUFfRlJPTV9ERVZJQ0UpO1xuIFxuIFx0LyogZ2V0IHN3aXRjaCBpbmdyZXNzIGludGVyZmFjZSBJRCAqL1xuLVx0aWZfaWQgPSB1cHBlcl8zMl9iaXRzKGRwYWEyX2ZkX2dldF9mbGMoZmQpKSBcdTAwMjYgMHgwMDAwRkZGRjtcbiYjNDM7XHRmbGMgPSBkcGFhMl9mZF9nZXRfZmxjKGZkKTtcbiYjNDM7XHRpZl9pZCA9IERQQUEyX0VUSFNXX0ZMQ19JRl9JRChmbGMpO1xuIFx0aWYgKGlmX2lkIFx1MDAzZT0gZXRoc3ctXHUwMDNlc3dfYXR0ci5udW1faWZzKSB7XG4gXHRcdGRldl9lcnIoZXRoc3ctXHUwMDNlZGV2LCBcJiMzNDtGcmFtZSByZWNlaXZlZCBmcm9tIHVua25vd24gaW50ZXJmYWNlIVxcblwmIzM0Oyk7XG4gXHRcdGdvdG8gZXJyX2ZyZWVfZmQ7XG5AQCAtMjU0MSwxMiAmIzQzOzMxNzQsMjAgQEAgc3RhdGljIHZvaWQgZHBhYTJfc3dpdGNoX3J4KHN0cnVjdCBkcGFhMl9zd2l0Y2hfZnEgKmZxLFxuIFx0XHR9XG4gXHR9XG4gXG4tXHRza2ItXHUwMDNlZGV2ID0gbmV0ZGV2O1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XG4mIzQzO1x0bGFnID0gcmN1X2RlcmVmZXJlbmNlKHBvcnRfcHJpdi1cdTAwM2VsYWcpO1xuJiM0MztcdGlmIChEUEFBMl9FVEhTV19GTENfSU1QUkVDSVNFX0lGX0lEKGZsYykgXHUwMDI2XHUwMDI2IGxhZylcbiYjNDM7XHRcdHNrYi1cdTAwM2VkZXYgPSBsYWctXHUwMDNlYm9uZF9kZXY7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0c2tiLVx1MDAzZWRldiA9IG5ldGRldjtcbiBcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgc2tiLVx1MDAzZWRldik7XG4gXG4gXHQvKiBTZXR1cCB0aGUgb2ZmbG9hZF9md2RfbWFyayBvbmx5IGlmIHRoZSBwb3J0IGlzIHVuZGVyIGEgYnJpZGdlICovXG4gXHRza2ItXHUwMDNlb2ZmbG9hZF9md2RfbWFyayA9ICEhKHBvcnRfcHJpdi1cdTAwM2VmZGItXHUwMDNlYnJpZGdlX2Rldik7XG4gXG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuIFx0bmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTtcbiBcbiBcdHJldHVybjtcbkBAIC0yNTYxLDYgJiM0MzszMjAyLDkgQEAgc3RhdGljIHZvaWQgZHBhYTJfc3dpdGNoX2RldGVjdF9mZWF0dXJlcyhzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3cpXG4gXG4gXHRpZiAoZXRoc3ctXHUwMDNlbWFqb3IgXHUwMDNlIDggfHwgKGV0aHN3LVx1MDAzZW1ham9yID09IDggXHUwMDI2XHUwMDI2IGV0aHN3LVx1MDAzZW1pbm9yIFx1MDAzZT0gNikpXG4gXHRcdGV0aHN3LVx1MDAzZWZlYXR1cmVzIHw9IEVUSFNXX0ZFQVRVUkVfTUFDX0FERFI7XG4mIzQzO1xuJiM0MztcdGlmIChldGhzdy1cdTAwM2VtYWpvciBcdTAwM2UgOCB8fCAoZXRoc3ctXHUwMDNlbWFqb3IgPT0gOCBcdTAwMjZcdTAwMjYgZXRoc3ctXHUwMDNlbWlub3IgXHUwMDNlPSAxMykpXG4mIzQzO1x0XHRldGhzdy1cdTAwM2VmZWF0dXJlcyB8PSBFVEhTV19GRUFUVVJFX0xBR19PRkZMT0FEO1xuIH1cbiBcbiBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9zZXR1cF9mcXMoc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3KVxuQEAgLTMxOTUsMTcgJiM0MzszODM5LDE1IEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX2luaXQoc3RydWN0IGZzbF9tY19kZXZpY2UgKnN3X2RldilcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLS8qIEFkZCBhbiBBQ0wgdG8gcmVkaXJlY3QgZnJhbWVzIHdpdGggc3BlY2lmaWMgZGVzdGluYXRpb24gTUFDIGFkZHJlc3MgdG9cbi0gKiBjb250cm9sIGludGVyZmFjZVxuLSAqL1xuJiM0MzsvKiBBZGQgYW4gQUNMIHRvIHJlZGlyZWN0IGZyYW1lcyB0byBjb250cm9sIGludGVyZmFjZSBiYXNlZCBvbiB0aGUgZHN0IE1BQyAqL1xuIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfdHJhcF9tYWNfYWRkcihzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYsXG4tXHRcdFx0XHRcdCAgIGNvbnN0IGNoYXIgKm1hYylcbiYjNDM7XHRcdFx0XHRcdCAgIGNvbnN0IHU4ICptYWMsIGNvbnN0IHU4ICptYXNrKVxuIHtcbiBcdHN0cnVjdCBkcGFhMl9zd2l0Y2hfYWNsX2VudHJ5IGFjbF9lbnRyeSA9IHswfTtcbiBcbiBcdC8qIE1hdGNoIG9uIHRoZSBkZXN0aW5hdGlvbiBNQUMgYWRkcmVzcyAqL1xuIFx0ZXRoZXJfYWRkcl9jb3B5KGFjbF9lbnRyeS5rZXkubWF0Y2gubDJfZGVzdF9tYWMsIG1hYyk7XG4tXHRldGhfYnJvYWRjYXN0X2FkZHIoYWNsX2VudHJ5LmtleS5tYXNrLmwyX2Rlc3RfbWFjKTtcbiYjNDM7XHRldGhlcl9hZGRyX2NvcHkoYWNsX2VudHJ5LmtleS5tYXNrLmwyX2Rlc3RfbWFjLCBtYXNrKTtcbiBcbiBcdC8qIFRyYXAgdG8gQ1BVICovXG4gXHRhY2xfZW50cnkuY2ZnLnByZWNlZGVuY2UgPSAwO1xuQEAgLTMyMTYsNyAmIzQzOzM4NTgsOCBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X3RyYXBfbWFjX2FkZHIoc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2LFxuIFxuIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfaW5pdChzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYsIHUxNiBwb3J0KVxuIHtcbi1cdGNvbnN0IGNoYXIgc3RwYVtFVEhfQUxFTl0gPSB7MHgwMSwgMHg4MCwgMHhjMiwgMHgwMCwgMHgwMCwgMHgwMH07XG4mIzQzO1x0Y29uc3QgdTggbGxfbWFjW0VUSF9BTEVOXSA9IHsweDAxLCAweDgwLCAweGMyLCAweDAwLCAweDAwLCAweDAwfTtcbiYjNDM7XHRjb25zdCB1OCBsbF9tYXNrW0VUSF9BTEVOXSA9IHsweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGYwfTtcbiBcdHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfdmxhbiB2bGFuID0ge1xuIFx0XHQub2JqLmlkID0gU1dJVENIREVWX09CSl9JRF9QT1JUX1ZMQU4sXG4gXHRcdC52aWQgPSBERUZBVUxUX1ZMQU5fSUQsXG5AQCAtMzI5MSw3ICYjNDM7MzkzNCw3IEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfaW5pdChzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYsIHUxNiBwb3J0KVxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X3RyYXBfbWFjX2FkZHIocG9ydF9wcml2LCBzdHBhKTtcbiYjNDM7XHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF90cmFwX21hY19hZGRyKHBvcnRfcHJpdiwgbGxfbWFjLCBsbF9tYXNrKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG5AQCAtMzMzMSw2ICYjNDM7Mzk3NCw5IEBAIHN0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9yZW1vdmUoc3RydWN0IGZzbF9tY19kZXZpY2UgKnN3X2RldilcbiBcdGRldiA9IFx1MDAyNnN3X2Rldi1cdTAwM2VkZXY7XG4gXHRldGhzdyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuIFxuJiM0MztcdC8qIE1ha2Ugc3VyZSB0aGF0IGFsbCBldmVudHMgd2VyZSBoYW5kbGVkIGJlZm9yZSB3ZSBrZnJlZSBhbnl0aGluZyAqL1xuJiM0MztcdGZsdXNoX3dvcmtxdWV1ZShldGhzdy1cdTAwM2V3b3JrcXVldWUpO1xuJiM0MztcbiBcdGRwYWEyX3N3aXRjaF90ZWFyZG93bl9pcnFzKHN3X2Rldik7XG4gXG4gXHRkcHN3X2Rpc2FibGUoZXRoc3ctXHUwMDNlbWNfaW8sIDAsIGV0aHN3LVx1MDAzZWRwc3dfaGFuZGxlKTtcbkBAIC0zMzQ0LDEyICYjNDM7Mzk5MCwxNSBAQCBzdGF0aWMgdm9pZCBkcGFhMl9zd2l0Y2hfcmVtb3ZlKHN0cnVjdCBmc2xfbWNfZGV2aWNlICpzd19kZXYpXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBEUEFBMl9TV0lUQ0hfUlhfTlVNX0ZRUzsgaSYjNDM7JiM0MzspXG4gXHRcdG5ldGlmX25hcGlfZGVsKFx1MDAyNmV0aHN3LVx1MDAzZWZxW2ldLm5hcGkpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZXRoc3ctXHUwMDNlc3dfYXR0ci5udW1faWZzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBldGhzdy1cdTAwM2Vzd19hdHRyLm51bV9pZnM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGRwYWEyX3N3aXRjaF9yZW1vdmVfcG9ydChldGhzdywgaSk7XG4mIzQzO1x0XHRtdXRleF9kZXN0cm95KFx1MDAyNmV0aHN3LVx1MDAzZWxhZ3NbaV0uZmRiX2xvY2spO1xuJiM0MztcdH1cbiBcbiBcdGtmcmVlKGV0aHN3LVx1MDAzZWZkYnMpO1xuIFx0a2ZyZWUoZXRoc3ctXHUwMDNlZmlsdGVyX2Jsb2Nrcyk7XG4gXHRrZnJlZShldGhzdy1cdTAwM2Vwb3J0cyk7XG4mIzQzO1x0a2ZyZWUoZXRoc3ctXHUwMDNlbGFncyk7XG4gXG4gXHRkcGFhMl9zd2l0Y2hfdGVhcmRvd24oc3dfZGV2KTtcbiBcbkBAIC0zMzc3LDYgJiM0Mzs0MDI2LDcgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcHJvYmVfcG9ydChzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3csXG4gXHRwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihwb3J0X25ldGRldik7XG4gXHRwb3J0X3ByaXYtXHUwMDNlbmV0ZGV2ID0gcG9ydF9uZXRkZXY7XG4gXHRwb3J0X3ByaXYtXHUwMDNlZXRoc3dfZGF0YSA9IGV0aHN3O1xuJiM0MztcdHJjdV9hc3NpZ25fcG9pbnRlcihwb3J0X3ByaXYtXHUwMDNlbGFnLCBOVUxMKTtcbiBcbiBcdG11dGV4X2luaXQoXHUwMDI2cG9ydF9wcml2LVx1MDAzZW1hY19sb2NrKTtcbiBcbkBAIC0zNDg0LDYgJiM0Mzs0MTM0LDIxIEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3Byb2JlKHN0cnVjdCBmc2xfbWNfZGV2aWNlICpzd19kZXYpXG4gXHRcdGdvdG8gZXJyX2ZyZWVfZmRicztcbiBcdH1cbiBcbiYjNDM7XHRldGhzdy1cdTAwM2VsYWdzID0ga2NhbGxvYyhldGhzdy1cdTAwM2Vzd19hdHRyLm51bV9pZnMsIHNpemVvZigqZXRoc3ctXHUwMDNlbGFncyksXG4mIzQzO1x0XHRcdCAgICAgIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghZXRoc3ctXHUwMDNlbGFncykge1xuJiM0MztcdFx0ZXJyID0gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWVfZmlsdGVyO1xuJiM0MztcdH1cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBldGhzdy1cdTAwM2Vzd19hdHRyLm51bV9pZnM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRldGhzdy1cdTAwM2VsYWdzW2ldLmJvbmRfZGV2ID0gTlVMTDtcbiYjNDM7XHRcdGV0aHN3LVx1MDAzZWxhZ3NbaV0uZXRoc3cgPSBldGhzdztcbiYjNDM7XHRcdGV0aHN3LVx1MDAzZWxhZ3NbaV0uaWQgPSBpICYjNDM7IDE7XG4mIzQzO1x0XHRldGhzdy1cdTAwM2VsYWdzW2ldLmluX3VzZSA9IDA7XG4mIzQzO1x0XHRtdXRleF9pbml0KFx1MDAyNmV0aHN3LVx1MDAzZWxhZ3NbaV0uZmRiX2xvY2spO1xuJiM0MztcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZXRoc3ctXHUwMDNlbGFnc1tpXS5mZGJzKTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZXRoc3ctXHUwMDNlc3dfYXR0ci5udW1faWZzOyBpJiM0MzsmIzQzOykge1xuIFx0XHRlcnIgPSBkcGFhMl9zd2l0Y2hfcHJvYmVfcG9ydChldGhzdywgaSk7XG4gXHRcdGlmIChlcnIpXG5AQCAtMzUzMCw2ICYjNDM7NDE5NSwxMCBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wcm9iZShzdHJ1Y3QgZnNsX21jX2RldmljZSAqc3dfZGV2KVxuIGVycl9mcmVlX25ldGRldjpcbiBcdGZvciAoaS0tOyBpIFx1MDAzZT0gMDsgaS0tKVxuIFx0XHRkcGFhMl9zd2l0Y2hfcmVtb3ZlX3BvcnQoZXRoc3csIGkpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGV0aHN3LVx1MDAzZXN3X2F0dHIubnVtX2lmczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRtdXRleF9kZXN0cm95KFx1MDAyNmV0aHN3LVx1MDAzZWxhZ3NbaV0uZmRiX2xvY2spO1xuJiM0MztcdGtmcmVlKGV0aHN3LVx1MDAzZWxhZ3MpO1xuJiM0MztlcnJfZnJlZV9maWx0ZXI6XG4gXHRrZnJlZShldGhzdy1cdTAwM2VmaWx0ZXJfYmxvY2tzKTtcbiBlcnJfZnJlZV9mZGJzOlxuIFx0a2ZyZWUoZXRoc3ctXHUwMDNlZmRicyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXN3aXRjaC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXN3aXRjaC5oXG5pbmRleCA0MmIzY2E3M2Y1NWQ1NC4uNjNiNzAyYjAwMDBjMmUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItc3dpdGNoLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guaFxuQEAgLTQxLDcgJiM0Mzs0MSw4IEBAXG4gI2RlZmluZSBFVEhTV19NQVhfRlJBTUVfTEVOR1RIXHQoRFBBQTJfTUZMIC0gVkxBTl9FVEhfSExFTiAtIEVUSF9GQ1NfTEVOKVxuICNkZWZpbmUgRVRIU1dfTDJfTUFYX0ZSTShtdHUpXHQoKG10dSkgJiM0MzsgVkxBTl9FVEhfSExFTiAmIzQzOyBFVEhfRkNTX0xFTilcbiBcbi0jZGVmaW5lIEVUSFNXX0ZFQVRVUkVfTUFDX0FERFJcdEJJVCgwKVxuJiM0MzsjZGVmaW5lIEVUSFNXX0ZFQVRVUkVfTUFDX0FERFJcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgRVRIU1dfRkVBVFVSRV9MQUdfT0ZGTE9BRFx0QklUKDEpXG4gXG4gLyogTnVtYmVyIG9mIHJlY2VpdmUgcXVldWVzIChvbmUgUlggYW5kIG9uZSBUWF9DT05GKSAqL1xuICNkZWZpbmUgRFBBQTJfU1dJVENIX1JYX05VTV9GUVNcdDJcbkBAIC04Niw2ICYjNDM7ODcsOSBAQFxuIFxuICNkZWZpbmUgRFBBQTJfRVRIU1dfUE9SVF9BQ0xfQ01EX0JVRl9TSVpFXHQyNTZcbiBcbiYjNDM7I2RlZmluZSBEUEFBMl9FVEhTV19GTENfSUZfSUQoZmxjKVx0XHQoKChmbGMpIFx1MDAzZVx1MDAzZSAzMikgXHUwMDI2IEdFTk1BU0soMTUsIDApKVxuJiM0MzsjZGVmaW5lIERQQUEyX0VUSFNXX0ZMQ19JTVBSRUNJU0VfSUZfSUQoZmxjKVx0KChmbGMpIFx1MDAyNiBCSVRfVUxMKDYzKSlcbiYjNDM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBkcGFhMl9zd2l0Y2hfcG9ydF9ldGh0b29sX29wcztcbiBcbiBzdHJ1Y3QgZXRoc3dfY29yZTtcbkBAIC05OSwxMiAmIzQzOzEwMywzMCBAQCBzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZxIHtcbiBcdHUzMiBmcWlkO1xuIH07XG4gXG4mIzQzO3N0cnVjdCBkcGFhMl9tYWNfYWRkciB7XG4mIzQzO1x0dW5zaWduZWQgY2hhciBhZGRyW0VUSF9BTEVOXTtcbiYjNDM7XHR1MTYgdmlkO1xuJiM0MztcdHJlZmNvdW50X3QgcmVmY291bnQ7XG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuJiM0Mzt9O1xuJiM0MztcbiBzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZkYiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZVx0KmJyaWRnZV9kZXY7XG4gXHR1MTZcdFx0XHRmZGJfaWQ7XG4gXHRib29sXHRcdFx0aW5fdXNlO1xuIH07XG4gXG4mIzQzO3N0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnIHtcbiYjNDM7XHRzdHJ1Y3QgZXRoc3dfY29yZVx0KmV0aHN3O1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlXHQqYm9uZF9kZXY7XG4mIzQzO1x0Ym9vbFx0XHRcdGluX3VzZTtcbiYjNDM7XHR1OFx0XHRcdGlkO1xuJiM0MztcdHN0cnVjdCBldGhzd19wb3J0X3ByaXZcdCpwcmltYXJ5O1xuJiM0MztcdC8qIFByb3RlY3RzIHRoZSBsaXN0IG9mIGZkYnMgaW5zdGFsbGVkIG9uIHRoaXMgTEFHICovXG4mIzQzO1x0c3RydWN0IG11dGV4XHRcdGZkYl9sb2NrO1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWRcdGZkYnM7XG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBkcGFhMl9zd2l0Y2hfYWNsX2VudHJ5IHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG4gXHR1MTZcdFx0XHRwcmlvO1xuQEAgLTE2Myw2ICYjNDM7MTg1LDggQEAgc3RydWN0IGV0aHN3X3BvcnRfcHJpdiB7XG4gXHRzdHJ1Y3QgZHBhYTJfbWFjXHQqbWFjO1xuIFx0LyogUHJvdGVjdHMgYWdhaW5zdCBjaGFuZ2VzIHRvIHBvcnRfcHJpdi1cdTAwM2VtYWMgKi9cbiBcdHN0cnVjdCBtdXRleFx0XHRtYWNfbG9jaztcbiYjNDM7XG4mIzQzO1x0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgX19yY3UgKmxhZztcbiB9O1xuIFxuIC8qIFN3aXRjaCBkYXRhICovXG5AQCAtMTkwLDYgJiM0MzsyMTQsOCBAQCBzdHJ1Y3QgZXRoc3dfY29yZSB7XG4gXHRzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZkYlx0XHQqZmRicztcbiBcdHN0cnVjdCBkcGFhMl9zd2l0Y2hfZmlsdGVyX2Jsb2NrICpmaWx0ZXJfYmxvY2tzO1xuIFx0dTE2XHRcdFx0XHRtaXJyb3JfcG9ydDtcbiYjNDM7XG4mIzQzO1x0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWdcdFx0KmxhZ3M7XG4gfTtcbiBcbiBzdGF0aWMgaW5saW5lIGludCBkcGFhMl9zd2l0Y2hfZ2V0X2luZGV4KHN0cnVjdCBldGhzd19jb3JlICpldGhzdyxcbkBAIC0yNzQsNCAmIzQzOzMwMCwxOCBAQCBpbnQgZHBhYTJfc3dpdGNoX2Jsb2NrX29mZmxvYWRfbWlycm9yKHN0cnVjdCBkcGFhMl9zd2l0Y2hfZmlsdGVyX2Jsb2NrICpibG9jayxcbiBcbiBpbnQgZHBhYTJfc3dpdGNoX2Jsb2NrX3Vub2ZmbG9hZF9taXJyb3Ioc3RydWN0IGRwYWEyX3N3aXRjaF9maWx0ZXJfYmxvY2sgKmJsb2NrLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYpO1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sXG4mIzQzO2RwYWEyX3N3aXRjaF9wb3J0X29mZmxvYWRzX2JyaWRnZV9wb3J0KHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdixcbiYjNDM7XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWcgPSByY3VfZGVyZWZlcmVuY2VfcnRubChwb3J0X3ByaXYtXHUwMDNlbGFnKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGxhZyBcdTAwMjZcdTAwMjYgbGFnLVx1MDAzZWJvbmRfZGV2ID09IGRldilcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdGlmIChwb3J0X3ByaXYtXHUwMDNlbmV0ZGV2ID09IGRldilcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiAjZW5kaWZcdC8qIF9fRVRIU1dfSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LWNtZC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwc3ctY21kLmhcbmluZGV4IDM5N2Q1NWYyYmQ5OTUwLi45YTIwNTVjNjQ5ODNjZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LWNtZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBzdy1jbWQuaFxuQEAgLTEyLDcgJiM0MzsxMiw3IEBAXG4gXG4gLyogRFBTVyBWZXJzaW9uICovXG4gI2RlZmluZSBEUFNXX1ZFUl9NQUpPUlx0XHQ4XG4tI2RlZmluZSBEUFNXX1ZFUl9NSU5PUlx0XHQ5XG4mIzQzOyNkZWZpbmUgRFBTV19WRVJfTUlOT1JcdFx0MTNcbiBcbiAjZGVmaW5lIERQU1dfQ01EX0JBU0VfVkVSU0lPTlx0MVxuICNkZWZpbmUgRFBTV19DTURfVkVSU0lPTl8yXHQyXG5AQCAtOTIsMTEgJiM0Mzs5MiwxNCBAQFxuICNkZWZpbmUgRFBTV19DTURJRF9DVFJMX0lGX1NFVF9QT09MUyAgICAgICAgRFBTV19DTURfSUQoMHgwQTEpXG4gI2RlZmluZSBEUFNXX0NNRElEX0NUUkxfSUZfRU5BQkxFICAgICAgICAgICBEUFNXX0NNRF9JRCgweDBBMilcbiAjZGVmaW5lIERQU1dfQ01ESURfQ1RSTF9JRl9ESVNBQkxFICAgICAgICAgIERQU1dfQ01EX0lEKDB4MEEzKVxuJiM0MzsjZGVmaW5lIERQU1dfQ01ESURfU0VUX0xBRyAgICAgICAgICAgICAgICAgIERQU1dfQ01EX1YyKDB4MEE0KVxuICNkZWZpbmUgRFBTV19DTURJRF9DVFJMX0lGX1NFVF9RVUVVRSAgICAgICAgRFBTV19DTURfSUQoMHgwQTYpXG4gXG4gI2RlZmluZSBEUFNXX0NNRElEX1NFVF9FR1JFU1NfRkxPT0QgICAgICAgICBEUFNXX0NNRF9JRCgweDBBQylcbiAjZGVmaW5lIERQU1dfQ01ESURfSUZfU0VUX0xFQVJOSU5HX01PREUgICAgIERQU1dfQ01EX0lEKDB4MEFEKVxuIFxuJiM0MzsjZGVmaW5lIERQU1dfQ01ESURfSUZfU0VUX0xBR19TVEFURSAgICAgICAgIERQU1dfQ01EX0lEKDB4MEIwKVxuJiM0MztcbiAvKiBNYWNyb3MgZm9yIGFjY2Vzc2luZyBjb21tYW5kIGZpZWxkcyBzbWFsbGVyIHRoYW4gMWJ5dGUgKi9cbiAjZGVmaW5lIERQU1dfTUFTSyhmaWVsZCkgICAgICAgIFxcXG4gXHRHRU5NQVNLKERQU1dfIyNmaWVsZCMjX1NISUZUICYjNDM7IERQU1dfIyNmaWVsZCMjX1NJWkUgLSAxLCBcXFxuQEAgLTU1Miw1ICYjNDM7NTU1LDE4IEBAIHN0cnVjdCBkcHN3X2NtZF9pZl9yZWZsZWN0aW9uIHtcbiBcdC8qIG9ubHkgMiBiaXRzIGZyb20gdGhlIExTQiAqL1xuIFx0dTggZmlsdGVyO1xuIH07XG4mIzQzO1xuJiM0MztzdHJ1Y3QgZHBzd19jbWRfbGFnIHtcbiYjNDM7XHR1OCBncm91cF9pZDtcbiYjNDM7XHR1OCBudW1faWZzO1xuJiM0MztcdHU4IHBhZFs2XTtcbiYjNDM7XHR1OCBpZl9pZFtEUFNXX01BWF9MQUdfSUZTXTtcbiYjNDM7XHR1OCBwaGFzZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBkcHN3X2NtZF9pZl9zZXRfbGFnX3N0YXRlIHtcbiYjNDM7XHRfX2xlMTYgaWZfaWQ7XG4mIzQzO1x0dTggdHhfZW5hYmxlZDtcbiYjNDM7fTtcbiAjcHJhZ21hIHBhY2socG9wKVxuICNlbmRpZiAvKiBfX0ZTTF9EUFNXX0NNRF9IICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwc3cuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LmNcbmluZGV4IGFiOTIxZDc1ZGViMmU4Li5mNzVjYmRjZTQyYmEyZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LmNcbkBAIC0xNjU5LDMgJiM0MzsxNjU5LDYzIEBAIGludCBkcHN3X2lmX3JlbW92ZV9yZWZsZWN0aW9uKHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLCB1MzIgY21kX2ZsYWdzLCB1MTYgdG9rZW4sXG4gXG4gXHRyZXR1cm4gbWNfc2VuZF9jb21tYW5kKG1jX2lvLCBcdTAwMjZjbWQpO1xuIH1cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBkcHN3X2xhZ19zZXQoKSAtIFNldCBMQUcgY29uZmlndXJhdGlvblxuJiM0MzsgKiBAbWNfaW86XHRQb2ludGVyIHRvIE1DIHBvcnRhbCYjMzk7cyBJL08gb2JqZWN0XG4mIzQzOyAqIEBjbWRfZmxhZ3M6XHRDb21tYW5kIGZsYWdzOyBvbmUgb3IgbW9yZSBvZiAmIzM5O01DX0NNRF9GTEFHXyYjMzk7XG4mIzQzOyAqIEB0b2tlbjpcdFRva2VuIG9mIERQU1cgb2JqZWN0XG4mIzQzOyAqIEBjZmc6XHRwb2ludGVyIHRvIExBRyBjb25maWd1cmF0aW9uXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogICAmIzM5OzAmIzM5OyBvbiBTdWNjZXNzOyBFcnJvciBjb2RlIG90aGVyd2lzZS5cbiYjNDM7ICovXG4mIzQzO2ludCBkcHN3X2xhZ19zZXQoc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHUzMiBjbWRfZmxhZ3MsIHUxNiB0b2tlbixcbiYjNDM7XHRcdCBjb25zdCBzdHJ1Y3QgZHBzd19sYWdfY2ZnICpjZmcpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZnNsX21jX2NvbW1hbmQgY21kID0geyAwIH07XG4mIzQzO1x0c3RydWN0IGRwc3dfY21kX2xhZyAqY21kX3BhcmFtcztcbiYjNDM7XHRpbnQgaSA9IDA7XG4mIzQzO1xuJiM0MztcdGNtZC5oZWFkZXIgPSBtY19lbmNvZGVfY21kX2hlYWRlcihEUFNXX0NNRElEX1NFVF9MQUcsIGNtZF9mbGFncywgdG9rZW4pO1xuJiM0MztcbiYjNDM7XHRpZiAoY2ZnLVx1MDAzZW51bV9pZnMgXHUwMDNlIERQU1dfTUFYX0xBR19JRlMpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdGNtZF9wYXJhbXMgPSAoc3RydWN0IGRwc3dfY21kX2xhZyAqKWNtZC5wYXJhbXM7XG4mIzQzO1x0Y21kX3BhcmFtcy1cdTAwM2Vncm91cF9pZCA9IGNmZy1cdTAwM2Vncm91cF9pZDtcbiYjNDM7XHRjbWRfcGFyYW1zLVx1MDAzZW51bV9pZnMgPSBjZmctXHUwMDNlbnVtX2lmcztcbiYjNDM7XHRjbWRfcGFyYW1zLVx1MDAzZXBoYXNlID0gY2ZnLVx1MDAzZXBoYXNlO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjZmctXHUwMDNlbnVtX2lmczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRjbWRfcGFyYW1zLVx1MDAzZWlmX2lkW2ldID0gY2ZnLVx1MDAzZWlmX2lkW2ldO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWNfc2VuZF9jb21tYW5kKG1jX2lvLCBcdTAwMjZjbWQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogZHBzd19pZl9zZXRfbGFnX3N0YXRlKCkgLSBDaGFuZ2UgcGVyIHBvcnQgTEFHIHN0YXRlXG4mIzQzOyAqIEBtY19pbzogICAgICBQb2ludGVyIHRvIE1DIHBvcnRhbCYjMzk7cyBJL08gb2JqZWN0XG4mIzQzOyAqIEBjbWRfZmxhZ3M6ICBDb21tYW5kIGZsYWdzOyBvbmUgb3IgbW9yZSBvZiAmIzM5O01DX0NNRF9GTEFHXyYjMzk7XG4mIzQzOyAqIEB0b2tlbjogICAgICBUb2tlbiBvZiBEUFNXIG9iamVjdFxuJiM0MzsgKiBAaWZfaWQ6ICAgICAgSUQgb2YgdGhlIHN3aXRjaCBpbnRlcmZhY2VcbiYjNDM7ICogQHR4X2VuYWJsZWQ6IFZhbHVlIG9mIHRoZSBwZXIgcG9ydCBMQUcgc3RhdGVcbiYjNDM7ICogICAgIC0gMCBpZiB0aGUgaW50ZXJmYWNlIHdpbGwgbm90IGJlIGFjdGl2ZSBhcyBwYXJ0IG9mIHRoZSBMQUcgZ3JvdXBcbiYjNDM7ICogICAgIC0gMSBpZiB0aGUgaW50ZXJmYWNlIHdpbGwgYmUgYWN0aXZlIGluIHRoZSBMQUcgZ3JvdXBcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAgICYjMzk7MCYjMzk7IG9uIFN1Y2Nlc3M7IEVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuJiM0MzsgKi9cbiYjNDM7aW50IGRwc3dfaWZfc2V0X2xhZ19zdGF0ZShzdHJ1Y3QgZnNsX21jX2lvICptY19pbywgdTMyIGNtZF9mbGFncywgdTE2IHRva2VuLFxuJiM0MztcdFx0XHQgIHUxNiBpZl9pZCwgdTggdHhfZW5hYmxlZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkcHN3X2NtZF9pZl9zZXRfbGFnX3N0YXRlICpjbWRfcGFyYW1zO1xuJiM0MztcdHN0cnVjdCBmc2xfbWNfY29tbWFuZCBjbWQgPSB7IDAgfTtcbiYjNDM7XG4mIzQzO1x0Y21kLmhlYWRlciA9IG1jX2VuY29kZV9jbWRfaGVhZGVyKERQU1dfQ01ESURfSUZfU0VUX0xBR19TVEFURSxcbiYjNDM7XHRcdFx0XHRcdCAgY21kX2ZsYWdzLCB0b2tlbik7XG4mIzQzO1xuJiM0MztcdGNtZF9wYXJhbXMgPSAoc3RydWN0IGRwc3dfY21kX2lmX3NldF9sYWdfc3RhdGUgKiljbWQucGFyYW1zO1xuJiM0MztcdGNtZF9wYXJhbXMtXHUwMDNlaWZfaWQgPSBjcHVfdG9fbGUxNihpZl9pZCk7XG4mIzQzO1x0Y21kX3BhcmFtcy1cdTAwM2V0eF9lbmFibGVkID0gdHhfZW5hYmxlZDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1jX3NlbmRfY29tbWFuZChtY19pbywgXHUwMDI2Y21kKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBzdy5oXG5pbmRleCBiOTBiZDM2M2Y0N2ExOS4uODlmMDI2N2RlOGU5YmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBzdy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBzdy5oXG5AQCAtMjAsNiAmIzQzOzIwLDggQEAgc3RydWN0IGZzbF9tY19pbztcbiBcbiAjZGVmaW5lIERQU1dfTUFYX0lGXHRcdDY0XG4gXG4mIzQzOyNkZWZpbmUgRFBTV19NQVhfTEFHX0lGU1x0OFxuJiM0MztcbiBpbnQgZHBzd19vcGVuKHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLCB1MzIgY21kX2ZsYWdzLCBpbnQgZHBzd19pZCwgdTE2ICp0b2tlbik7XG4gXG4gaW50IGRwc3dfY2xvc2Uoc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHUzMiBjbWRfZmxhZ3MsIHUxNiB0b2tlbik7XG5AQCAtNzg4LDQgJiM0Mzs3OTAsMzIgQEAgaW50IGRwc3dfaWZfYWRkX3JlZmxlY3Rpb24oc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHUzMiBjbWRfZmxhZ3MsIHUxNiB0b2tlbixcbiBcbiBpbnQgZHBzd19pZl9yZW1vdmVfcmVmbGVjdGlvbihzdHJ1Y3QgZnNsX21jX2lvICptY19pbywgdTMyIGNtZF9mbGFncywgdTE2IHRva2VuLFxuIFx0XHRcdCAgICAgIHUxNiBpZl9pZCwgY29uc3Qgc3RydWN0IGRwc3dfcmVmbGVjdGlvbl9jZmcgKmNmZyk7XG4mIzQzO1xuJiM0MzsvKiBMaW5rIEFnZ3JlZ2F0aW9uIEdyb3VwIGNvbmZpZ3VyYXRpb24gKi9cbiYjNDM7XG4mIzQzOyNkZWZpbmUgRFBTV19MQUdfU0VUX1BIQVNFX0FQUExZIDBcbiYjNDM7I2RlZmluZSBEUFNXX0xBR19TRVRfUEhBU0VfQ0hFQ0sgMVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBkcHN3X2xhZ19jZmcgLSBDb25maWd1cmF0aW9uIHN0cnVjdHVyZSBmb3IgYSBMQUcgZ3JvdXBcbiYjNDM7ICogQGdyb3VwX2lkOiBMaW5rIGFnZ3JlZ2F0aW9uIGdyb3VwIElELiBWYWxpZCB2YWx1ZXMgYXJlIGluIHRoZVxuJiM0MzsgKiBbMSwgRFBTV19NQVhfTEFHX0lGU10gcmFuZ2UuXG4mIzQzOyAqIEBudW1faWZzOiBOdW1iZXIgb2YgaW50ZXJmYWNlcyBpbiB0aGlzIExBRyBncm91cCwgdmFsaWQgcmFuZ2UgaXNcbiYjNDM7ICogWzAsIERQU1dfTUFYX0xBR19JRlNdLlxuJiM0MzsgKiBAaWZfaWQ6IEFycmF5IGNvbnRhaW5pbmcgdGhlIGludGVyZmFjZSBJRHMgb2YgdGhlIHBvcnRzIHBhcnQgb2YgYSBMQUcgZ3JvdXBcbiYjNDM7ICogQHBoYXNlOiBVc2UgRFBTV19MQUdfU0VUX1BIQVNFX0FQUExZIGZvciBMQUcgY29uZmlndXJhdGlvbiBwcm9jZXNzaW5nIG9yXG4mIzQzOyAqIERQU1dfTEFHX1NFVF9QSEFTRV9DSEVDSyBmb3IgTEFHIGNvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbi5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBkcHN3X2xhZ19jZmcge1xuJiM0MztcdHU4IGdyb3VwX2lkO1xuJiM0MztcdHU4IG51bV9pZnM7XG4mIzQzO1x0dTggaWZfaWRbRFBTV19NQVhfTEFHX0lGU107XG4mIzQzO1x0dTggcGhhc2U7XG4mIzQzO307XG4mIzQzO1xuJiM0MztpbnQgZHBzd19sYWdfc2V0KHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLCB1MzIgY21kX2ZsYWdzLCB1MTYgdG9rZW4sXG4mIzQzO1x0XHQgY29uc3Qgc3RydWN0IGRwc3dfbGFnX2NmZyAqY2ZnKTtcbiYjNDM7XG4mIzQzO2ludCBkcHN3X2lmX3NldF9sYWdfc3RhdGUoc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHUzMiBjbWRfZmxhZ3MsIHUxNiB0b2tlbixcbiYjNDM7XHRcdFx0ICB1MTYgaWZfaWQsIHU4IHR4X2VuYWJsZWQpO1xuICNlbmRpZiAvKiBfX0ZTTF9EUFNXX0ggKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMTo1MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgRnJlZXNjYWxlIERQQUEyIHN3aXRjaCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guYykgdG8gYWRkIExBRyBvZmZsb2FkIHN1cHBvcnQuIFRoaXMgZHJpdmVyIGRlcGVuZHMgb24gdGhlIGZzbC1tYyBidXMgKEZTTF9NQ19CVVMpLCB3aGljaCBpcyBzcGVjaWZpYyB0byBOWFAgUW9ySVEgRFBBQTIgaGFyZHdhcmUgKEFSQ0hfTEFZRVJTQ0FQRSkuIFRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBoYXJkd2FyZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWQ4OTc5YzdhNWZiYTNlZTRkZjJmMTVmYmJiZjEwYzc0OGQxNGU5NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVuIDI5IDExOjUyOjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXN3aXRjaC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXN3aXRjaC5jCmluZGV4IDg1OGJhODQ0YWM1MTY0Li44MzIwYjI2YzNmNzI2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXN3aXRjaC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guYwpAQCAtMjUsNiAmIzQzOzI1LDkgQEAKIAogI2RlZmluZSBERUZBVUxUX1ZMQU5fSUQJCQkxCiAKJiM0MztzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGRwYWEyX3N3aXRjaF9wb3J0X3N3aXRjaGRldl9uYjsKJiM0MztzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGRwYWEyX3N3aXRjaF9wb3J0X3N3aXRjaGRldl9ibG9ja2luZ19uYjsKJiM0MzsKIHN0YXRpYyB1MTYgZHBhYTJfc3dpdGNoX3BvcnRfZ2V0X2ZkYl9pZChzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYpCiB7CiAJcmV0dXJuIHBvcnRfcHJpdi0mZ3Q7ZmRiLSZndDtmZGJfaWQ7CkBAIC01MSw2ICYjNDM7NTQsMTcgQEAgZHBhYTJfc3dpdGNoX2ZpbHRlcl9ibG9ja19nZXRfdW51c2VkKHN0cnVjdCBldGhzd19jb3JlICpldGhzdykKIAlyZXR1cm4gTlVMTDsKIH0KIAomIzQzO3N0YXRpYyBzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqCiYjNDM7ZHBhYTJfc3dpdGNoX2xhZ19nZXRfdW51c2VkKHN0cnVjdCBldGhzd19jb3JlICpldGhzdykKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZXRoc3ctJmd0O3N3X2F0dHIubnVtX2lmczsgaSYjNDM7JiM0MzspCiYjNDM7CQlpZiAoIWV0aHN3LSZndDtsYWdzW2ldLmluX3VzZSkKJiM0MzsJCQlyZXR1cm4gJmFtcDtldGhzdy0mZ3Q7bGFnc1tpXTsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwogc3RhdGljIGJvb2wgZHBhYTJfc3dpdGNoX2ZkYl9pbl91c2VfYnlfb3RoZXJzKHN0cnVjdCBldGhzd19jb3JlICpldGhzdywKIAkJCQkJICAgICAgc3RydWN0IGRwYWEyX3N3aXRjaF9mZGIgKmZkYiwKIAkJCQkJICAgICAgc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqZXhjZXB0KQpAQCAtNzEsOSAmIzQzOzg1LDkgQEAgc3RhdGljIHN0cnVjdCBkcGFhMl9zd2l0Y2hfZmRiICoKIGRwYWEyX3N3aXRjaF9mZGJfZm9yX2pvaW4oc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2LAogCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqdXBwZXJfZGV2KQogewotCXN0cnVjdCBldGhzd19wb3J0X3ByaXYgKm90aGVyX3BvcnRfcHJpdjsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqb3RoZXJfZGV2OwotCXN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7CiYjNDM7CXN0cnVjdCBldGhzd19wb3J0X3ByaXYgKm90aGVyX3BvcnRfcHJpdiA9IE5VTEw7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpvdGhlcl9kZXYsICpvdGhlcl9kZXYyOwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkICppdGVyLCAqaXRlcjI7CiAKIAkvKiBUaGUgYmVsb3cgY2FsbCB0byBuZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KCkgZGVtYW5kcyB0aGUgUlROTCBsb2NrCiAJICogYmVpbmcgaGVsZC4gQXNzZXJ0IG9uIGl0IHNvIHRoYXQgaXQmIzM5O3MgZWFzaWVyIHRvIGNhdGNoIG5ldyBjb2RlCkBAIC04MiwxNyAmIzQzOzk2LDMyIEBAIGRwYWEyX3N3aXRjaF9mZGJfZm9yX2pvaW4oc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2LAogCUFTU0VSVF9SVE5MKCk7CiAKIAkvKiBJZiBwYXJ0IG9mIGEgYnJpZGdlLCB1c2UgdGhlIEZEQiBvZiB0aGUgZmlyc3QgZHBhYTIgc3dpdGNoIGludGVyZmFjZQotCSAqIHRvIGJlIHByZXNlbnQgaW4gdGhhdCBicmlkZ2UKJiM0MzsJICogdG8gYmUgcHJlc2VudCBpbiB0aGF0IGJyaWRnZS4gVGhlIHNlYXJjaCBkZXNjZW5kcyBvbmUgbGV2ZWwgdGhyb3VnaAomIzQzOwkgKiBhIGJyaWRnZWQgYm9uZCYjMzk7cyBsb3dlcnMgYXMgd2VsbC4KIAkgKi8KIAluZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KHVwcGVyX2Rldiwgb3RoZXJfZGV2LCBpdGVyKSB7Ci0JCWlmICghZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrKG90aGVyX2RldikpCi0JCQljb250aW51ZTsKJiM0MzsJCWlmIChuZXRpZl9pc19sYWdfbWFzdGVyKG90aGVyX2RldikpIHsKJiM0MzsJCQluZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KG90aGVyX2Rldiwgb3RoZXJfZGV2MiwgaXRlcjIpIHsKJiM0MzsJCQkJaWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2sob3RoZXJfZGV2MikpCiYjNDM7CQkJCQljb250aW51ZTsKIAotCQlpZiAob3RoZXJfZGV2ID09IHBvcnRfcHJpdi0mZ3Q7bmV0ZGV2KQotCQkJY29udGludWU7CiYjNDM7CQkJCWlmIChvdGhlcl9kZXYyID09IHBvcnRfcHJpdi0mZ3Q7bmV0ZGV2KQomIzQzOwkJCQkJY29udGludWU7CiAKLQkJb3RoZXJfcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYob3RoZXJfZGV2KTsKLQkJcmV0dXJuIG90aGVyX3BvcnRfcHJpdi0mZ3Q7ZmRiOwomIzQzOwkJCQlvdGhlcl9wb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihvdGhlcl9kZXYyKTsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhvdGhlcl9kZXYpKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQlpZiAob3RoZXJfZGV2ID09IHBvcnRfcHJpdi0mZ3Q7bmV0ZGV2KQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQlvdGhlcl9wb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihvdGhlcl9kZXYpOwomIzQzOwkJfQomIzQzOwkJaWYgKG90aGVyX3BvcnRfcHJpdikKJiM0MzsJCQlyZXR1cm4gb3RoZXJfcG9ydF9wcml2LSZndDtmZGI7CiAJfQogCiAJcmV0dXJuIHBvcnRfcHJpdi0mZ3Q7ZmRiOwpAQCAtNTM3LDYgJiM0Mzs1NjYsMTAzIEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2RlbF9tYyhzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYsCiAJcmV0dXJuIGVycjsKIH0KIAomIzQzO3N0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2FkZChzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYsCiYjNDM7CQkJCSAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcikKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlmIChpc191bmljYXN0X2V0aGVyX2FkZHIoYWRkcikpCiYjNDM7CQllcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfYWRkX3VjKHBvcnRfcHJpdiwgYWRkcik7CiYjNDM7CWVsc2UKJiM0MzsJCWVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9hZGRfbWMocG9ydF9wcml2LCBhZGRyKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsKHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiwKJiM0MzsJCQkJICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKQomIzQzO3sKJiM0MzsJaWYgKGlzX3VuaWNhc3RfZXRoZXJfYWRkcihhZGRyKSkKJiM0MzsJCXJldHVybiBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsX3VjKHBvcnRfcHJpdiwgYWRkcik7CiYjNDM7CWVsc2UKJiM0MzsJCXJldHVybiBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsX21jKHBvcnRfcHJpdiwgYWRkcik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgZHBhYTJfbWFjX2FkZHIgKgomIzQzO2RwYWEyX3N3aXRjaF9tYWNfYWRkcl9maW5kKHN0cnVjdCBsaXN0X2hlYWQgKmFkZHJfbGlzdCwKJiM0MzsJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCB1MTYgdmlkKQomIzQzO3sKJiM0MzsJc3RydWN0IGRwYWEyX21hY19hZGRyICphOwomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGEsIGFkZHJfbGlzdCwgbGlzdCkKJiM0MzsJCWlmIChldGhlcl9hZGRyX2VxdWFsKGEtJmd0O2FkZHIsIGFkZHIpICZhbXA7JmFtcDsgYS0mZ3Q7dmlkID09IHZpZCkKJiM0MzsJCQlyZXR1cm4gYTsKJiM0MzsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX2xhZ19mZGJfYWRkKHN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWcsCiYjNDM7CQkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCB1MTYgdmlkKQomIzQzO3sKJiM0MzsJc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbGFnLSZndDtwcmltYXJ5OwomIzQzOwlzdHJ1Y3QgZHBhYTJfbWFjX2FkZHIgKmE7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bGFnLSZndDtmZGJfbG9jayk7CiYjNDM7CiYjNDM7CWEgPSBkcGFhMl9zd2l0Y2hfbWFjX2FkZHJfZmluZCgmYW1wO2xhZy0mZ3Q7ZmRicywgYWRkciwgdmlkKTsKJiM0MzsJaWYgKGEpIHsKJiM0MzsJCXJlZmNvdW50X2luYygmYW1wO2EtJmd0O3JlZmNvdW50KTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWEgPSBremFsbG9jKHNpemVvZigqYSksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWEpIHsKJiM0MzsJCWVyciA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfYWRkKHBvcnRfcHJpdiwgYWRkcik7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWtmcmVlKGEpOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXRoZXJfYWRkcl9jb3B5KGEtJmd0O2FkZHIsIGFkZHIpOwomIzQzOwlhLSZndDt2aWQgPSB2aWQ7CiYjNDM7CXJlZmNvdW50X3NldCgmYW1wO2EtJmd0O3JlZmNvdW50LCAxKTsKJiM0MzsJbGlzdF9hZGRfdGFpbCgmYW1wO2EtJmd0O2xpc3QsICZhbXA7bGFnLSZndDtmZGJzKTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2xhZy0mZ3Q7ZmRiX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkcGFhMl9zd2l0Y2hfbGFnX2ZkYl9kZWwoc3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZywKJiM0MzsJCQkJICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCB1MTYgdmlkKQomIzQzO3sKJiM0MzsJc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbGFnLSZndDtwcmltYXJ5OwomIzQzOwlzdHJ1Y3QgZHBhYTJfbWFjX2FkZHIgKmE7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtsYWctJmd0O2ZkYl9sb2NrKTsKJiM0MzsKJiM0MzsJYSA9IGRwYWEyX3N3aXRjaF9tYWNfYWRkcl9maW5kKCZhbXA7bGFnLSZndDtmZGJzLCBhZGRyLCB2aWQpOwomIzQzOwlpZiAoIWEpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWYgKCFyZWZjb3VudF9kZWNfYW5kX3Rlc3QoJmFtcDthLSZndDtyZWZjb3VudCkpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJbGlzdF9kZWwoJmFtcDthLSZndDtsaXN0KTsKJiM0MzsJa2ZyZWUoYSk7CiYjNDM7CiYjNDM7CWRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9kZWwocG9ydF9wcml2LCBhZGRyKTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2xhZy0mZ3Q7ZmRiX2xvY2spOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9wb3J0X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJCQlzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKQogewpAQCAtMTQ4NSw2ICYjNDM7MTYxMSwzMyBAQCBib29sIGRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCXJldHVybiBuZXRkZXYtJmd0O25ldGRldl9vcHMgPT0gJmFtcDtkcGFhMl9zd2l0Y2hfcG9ydF9vcHM7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBkcGFhMl9zd2l0Y2hfZm9yZWlnbl9kZXZfY2hlY2soY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkJCSAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpmb3JlaWduX2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CXN0cnVjdCBldGhzd19jb3JlICpldGhzdyA9IHBvcnRfcHJpdi0mZ3Q7ZXRoc3dfZGF0YTsKJiM0MzsJc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqb3RoZXJfcG9ydDsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWlmIChuZXRpZl9pc19icmlkZ2VfbWFzdGVyKGZvcmVpZ25fZGV2KSkKJiM0MzsJCWlmIChwb3J0X3ByaXYtJmd0O2ZkYi0mZ3Q7YnJpZGdlX2RldiA9PSBmb3JlaWduX2RldikKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChuZXRpZl9pc19icmlkZ2VfcG9ydChmb3JlaWduX2RldikpIHsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBldGhzdy0mZ3Q7c3dfYXR0ci5udW1faWZzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCW90aGVyX3BvcnQgPSBldGhzdy0mZ3Q7cG9ydHNbaV07CiYjNDM7CiYjNDM7CQkJaWYgKCFvdGhlcl9wb3J0KQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQlpZiAoZHBhYTJfc3dpdGNoX3BvcnRfb2ZmbG9hZHNfYnJpZGdlX3BvcnQob3RoZXJfcG9ydCwKJiM0MzsJCQkJCQkJCSAgIGZvcmVpZ25fZGV2KSkKJiM0MzsJCQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfY29ubmVjdF9tYWMoc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2KQogewogCXN0cnVjdCBmc2xfbWNfZGV2aWNlICpkcHN3X3BvcnRfZGV2LCAqZHBtYWNfZGV2OwpAQCAtMTg2MCw1MSAmIzQzOzIwMTMsMzIgQEAgaW50IGRwYWEyX3N3aXRjaF9wb3J0X3ZsYW5zX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJCQkgIHZsYW4tJmd0O2NoYW5nZWQpOwogfQogCi1zdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2xvb2t1cF9hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBpc191YywKLQkJCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpCi17Ci0Jc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmxpc3QgPSAoaXNfdWMpID8gJmFtcDtuZXRkZXYtJmd0O3VjIDogJmFtcDtuZXRkZXYtJmd0O21jOwotCXN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7Ci0KLQluZXRpZl9hZGRyX2xvY2tfYmgobmV0ZGV2KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhhLCAmYW1wO2xpc3QtJmd0O2xpc3QsIGxpc3QpIHsKLQkJaWYgKGV0aGVyX2FkZHJfZXF1YWwoaGEtJmd0O2FkZHIsIGFkZHIpKSB7Ci0JCQluZXRpZl9hZGRyX3VubG9ja19iaChuZXRkZXYpOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQl9Ci0JbmV0aWZfYWRkcl91bmxvY2tfYmgobmV0ZGV2KTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9tZGJfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkJICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X29ial9wb3J0X21kYiAqbWRiKQogewogCXN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JaW50IGVycjsKJiM0MzsJc3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZzsKIAotCS8qIENoZWNrIGlmIGFkZHJlc3MgaXMgYWxyZWFkeSBzZXQgb24gdGhpcyBwb3J0ICovCi0JaWYgKGRwYWEyX3N3aXRjaF9wb3J0X2xvb2t1cF9hZGRyZXNzKG5ldGRldiwgMCwgbWRiLSZndDthZGRyKSkKLQkJcmV0dXJuIC1FRVhJU1Q7Ci0KLQllcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfYWRkX21jKHBvcnRfcHJpdiwgbWRiLSZndDthZGRyKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gZGV2X21jX2FkZChuZXRkZXYsIG1kYi0mZ3Q7YWRkcik7Ci0JaWYgKGVycikgewotCQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtkZXZfbWNfYWRkIGVyciAlZFxuJiMzNDssIGVycik7Ci0JCWRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9kZWxfbWMocG9ydF9wcml2LCBtZGItJmd0O2FkZHIpOwotCX0KLQotCXJldHVybiBlcnI7CiYjNDM7CWxhZyA9IHJ0bmxfZGVyZWZlcmVuY2UocG9ydF9wcml2LSZndDtsYWcpOwomIzQzOwlpZiAobGFnKQomIzQzOwkJcmV0dXJuIGRwYWEyX3N3aXRjaF9sYWdfZmRiX2FkZChsYWcsIG1kYi0mZ3Q7YWRkciwgbWRiLSZndDt2aWQpOwomIzQzOwllbHNlCiYjNDM7CQlyZXR1cm4gZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2FkZChwb3J0X3ByaXYsIG1kYi0mZ3Q7YWRkcik7CiB9CiAKLXN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfb2JqX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAotCQkJCSAgICAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmogKm9iaikKJiM0MztzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X29ial9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgY29uc3Qgdm9pZCAqY3R4LAomIzQzOwkJCQkgICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqICpvYmosCiYjNDM7CQkJCSAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewomIzQzOwlzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCWludCBlcnI7CiAKJiM0MzsJaWYgKGN0eCAmYW1wOyZhbXA7IGN0eCAhPSBwb3J0X3ByaXYpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9vZmZsb2Fkc19icmlkZ2VfcG9ydChwb3J0X3ByaXYsIG9iai0mZ3Q7b3JpZ19kZXYpKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwogCXN3aXRjaCAob2JqLSZndDtpZCkgewogCWNhc2UgU1dJVENIREVWX09CSl9JRF9QT1JUX1ZMQU46CiAJCWVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X3ZsYW5zX2FkZChuZXRkZXYsCkBAIC0yMDAwLDI5ICYjNDM7MjEzNCwyOSBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X21kYl9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCQkgICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfbWRiICptZGIpCiB7CiAJc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlpbnQgZXJyOwotCi0JaWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9sb29rdXBfYWRkcmVzcyhuZXRkZXYsIDAsIG1kYi0mZ3Q7YWRkcikpCi0JCXJldHVybiAtRU5PRU5UOwotCi0JZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2RlbF9tYyhwb3J0X3ByaXYsIG1kYi0mZ3Q7YWRkcik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKJiM0MzsJc3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZzsKIAotCWVyciA9IGRldl9tY19kZWwobmV0ZGV2LCBtZGItJmd0O2FkZHIpOwotCWlmIChlcnIpIHsKLQkJbmV0ZGV2X2VycihuZXRkZXYsICYjMzQ7ZGV2X21jX2RlbCBlcnIgJWRcbiYjMzQ7LCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KJiM0MzsJbGFnID0gcnRubF9kZXJlZmVyZW5jZShwb3J0X3ByaXYtJmd0O2xhZyk7CiYjNDM7CWlmIChsYWcpCiYjNDM7CQlkcGFhMl9zd2l0Y2hfbGFnX2ZkYl9kZWwobGFnLCBtZGItJmd0O2FkZHIsIG1kYi0mZ3Q7dmlkKTsKJiM0MzsJZWxzZQomIzQzOwkJZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2RlbChwb3J0X3ByaXYsIG1kYi0mZ3Q7YWRkcik7CiAKLQlyZXR1cm4gZXJyOwomIzQzOwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9vYmpfZGVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7c3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9vYmpfZGVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGNvbnN0IHZvaWQgKmN0eCwKIAkJCQkgICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqICpvYmopCiB7CiYjNDM7CXN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJaW50IGVycjsKIAomIzQzOwlpZiAoY3R4ICZhbXA7JmFtcDsgY3R4ICE9IHBvcnRfcHJpdikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X29mZmxvYWRzX2JyaWRnZV9wb3J0KHBvcnRfcHJpdiwgb2JqLSZndDtvcmlnX2RldikpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiAJc3dpdGNoIChvYmotJmd0O2lkKSB7CiAJY2FzZSBTV0lUQ0hERVZfT0JKX0lEX1BPUlRfVkxBTjoKIAkJZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfdmxhbnNfZGVsKG5ldGRldiwgU1dJVENIREVWX09CSl9QT1JUX1ZMQU4ob2JqKSk7CkBAIC0yMDQ4LDYgJiM0MzsyMTgyLDIxIEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfYXR0cl9zZXRfZXZlbnQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAlyZXR1cm4gbm90aWZpZXJfZnJvbV9lcnJubyhlcnIpOwogfQogCiYjNDM7c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICoKJiM0MztkcGFhMl9zd2l0Y2hfcG9ydF90b19icmlkZ2VfcG9ydChzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqbGFnOwomIzQzOwomIzQzOwlpZiAoIXBvcnRfcHJpdi0mZ3Q7ZmRiLSZndDticmlkZ2VfZGV2KQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CWxhZyA9IHJ0bmxfZGVyZWZlcmVuY2UocG9ydF9wcml2LSZndDtsYWcpOwomIzQzOwlpZiAobGFnKQomIzQzOwkJcmV0dXJuIGxhZy0mZ3Q7Ym9uZF9kZXY7CiYjNDM7CiYjNDM7CXJldHVybiBwb3J0X3ByaXYtJmd0O25ldGRldjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2JyaWRnZV9qb2luKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqdXBwZXJfZGV2LAogCQkJCQkgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQpAQCAtMjA1NSw2ICYjNDM7MjIwNCw3IEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfYnJpZGdlX2pvaW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAlzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBkcGFhMl9zd2l0Y2hfZmRiICpvbGRfZmRiID0gcG9ydF9wcml2LSZndDtmZGI7CiAJc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3ID0gcG9ydF9wcml2LSZndDtldGhzd19kYXRhOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqYnJwb3J0X2RldjsKIAlib29sIGxlYXJuX2VuYTsKIAlpbnQgZXJyOwogCkBAIC0yMDY2LDcgJiM0MzsyMjE2LDggQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9icmlkZ2Vfam9pbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCWRwYWEyX3N3aXRjaF9wb3J0X3NldF9mZGIocG9ydF9wcml2LCB1cHBlcl9kZXYsIHRydWUpOwogCiAJLyogSW5oZXJpdCB0aGUgaW5pdGlhbCBicmlkZ2UgcG9ydCBsZWFybmluZyBzdGF0ZSAqLwotCWxlYXJuX2VuYSA9IGJyX3BvcnRfZmxhZ19pc19zZXQobmV0ZGV2LCBCUl9MRUFSTklORyk7CiYjNDM7CWJycG9ydF9kZXYgPSBkcGFhMl9zd2l0Y2hfcG9ydF90b19icmlkZ2VfcG9ydChwb3J0X3ByaXYpOwomIzQzOwlsZWFybl9lbmEgPSBicl9wb3J0X2ZsYWdfaXNfc2V0KGJycG9ydF9kZXYsIEJSX0xFQVJOSU5HKTsKIAllcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9zZXRfbGVhcm5pbmcocG9ydF9wcml2LCBsZWFybl9lbmEpOwogCXBvcnRfcHJpdi0mZ3Q7bGVhcm5fZW5hID0gbGVhcm5fZW5hOwogCkBAIC0yMDgwLDggJiM0MzsyMjMxLDExIEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfYnJpZGdlX2pvaW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9lZ3Jlc3NfZmxvb2Q7CiAKLQllcnIgPSBzd2l0Y2hkZXZfYnJpZGdlX3BvcnRfb2ZmbG9hZChuZXRkZXYsIG5ldGRldiwgTlVMTCwKLQkJCQkJICAgIE5VTEwsIE5VTEwsIGZhbHNlLCBleHRhY2spOwomIzQzOwlicnBvcnRfZGV2ID0gZHBhYTJfc3dpdGNoX3BvcnRfdG9fYnJpZGdlX3BvcnQocG9ydF9wcml2KTsKJiM0MzsJZXJyID0gc3dpdGNoZGV2X2JyaWRnZV9wb3J0X29mZmxvYWQoYnJwb3J0X2RldiwgbmV0ZGV2LCBwb3J0X3ByaXYsCiYjNDM7CQkJCQkgICAgJmFtcDtkcGFhMl9zd2l0Y2hfcG9ydF9zd2l0Y2hkZXZfbmIsCiYjNDM7CQkJCQkgICAgJmFtcDtkcGFhMl9zd2l0Y2hfcG9ydF9zd2l0Y2hkZXZfYmxvY2tpbmdfbmIsCiYjNDM7CQkJCQkgICAgZmFsc2UsIGV4dGFjayk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfc3dpdGNoZGV2X29mZmxvYWQ7CiAKQEAgLTIxMTUsNyAmIzQzOzIyNjksMjIgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9yZXN0b3JlX3J4dmxhbihzdHJ1Y3QgbmV0X2RldmljZSAqdmRldiwgaW50IHZpZCwgdm8KIAogc3RhdGljIHZvaWQgZHBhYTJfc3dpdGNoX3BvcnRfcHJlX2JyaWRnZV9sZWF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewotCXN3aXRjaGRldl9icmlkZ2VfcG9ydF91bm9mZmxvYWQobmV0ZGV2LCBOVUxMLCBOVUxMLCBOVUxMKTsKJiM0MzsJc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3ID0gcG9ydF9wcml2LSZndDtldGhzd19kYXRhOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqYnJwb3J0X2RldjsKJiM0MzsKJiM0MzsJYnJwb3J0X2RldiA9IGRwYWEyX3N3aXRjaF9wb3J0X3RvX2JyaWRnZV9wb3J0KHBvcnRfcHJpdik7CiYjNDM7CWlmICghYnJwb3J0X2RldikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc3dpdGNoZGV2X2JyaWRnZV9wb3J0X3Vub2ZmbG9hZChicnBvcnRfZGV2LCBwb3J0X3ByaXYsCiYjNDM7CQkJCQkmYW1wO2RwYWEyX3N3aXRjaF9wb3J0X3N3aXRjaGRldl9uYiwKJiM0MzsJCQkJCSZhbXA7ZHBhYTJfc3dpdGNoX3BvcnRfc3dpdGNoZGV2X2Jsb2NraW5nX25iKTsKJiM0MzsKJiM0MzsJLyogTWFrZSBzdXJlIHRoYXQgYW55IEZEQiBhZGQvZGVsIG9wZXJhdGlvbnMgYXJlIGNvbXBsZXRlZCBiZWZvcmUgdGhlCiYjNDM7CSAqIGJyaWRnZSBsYXlvdXQgY2hhbmdlcwomIzQzOwkgKi8KJiM0MzsJZmx1c2hfd29ya3F1ZXVlKGV0aHN3LSZndDt3b3JrcXVldWUpOwogfQogCiBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2JyaWRnZV9sZWF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQpAQCAtMjE3NywzMCAmIzQzOzIzNDYsNTMgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9icmlkZ2VfbGVhdmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAkJCQkJICBmYWxzZSk7CiB9CiAKJiM0MztzdGF0aWMgaW50CiYjNDM7ZHBhYTJfc3dpdGNoX2hhdmVfdmxhbl91cHBlcihzdHJ1Y3QgbmV0X2RldmljZSAqdXBwZXJfZGV2LAomIzQzOwkJCSAgICAgX19hbHdheXNfdW51c2VkIHN0cnVjdCBuZXRkZXZfbmVzdGVkX3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gaXNfdmxhbl9kZXYodXBwZXJfZGV2KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wcmV2ZW50X2JyaWRnaW5nX3dpdGhfODAyMXFfdXBwZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqdXBwZXJfZGV2OwotCXN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7CiYjNDM7CXN0cnVjdCBuZXRkZXZfbmVzdGVkX3ByaXYgcHJpdiA9IHt9OwogCiAJLyogUkNVIHJlYWQgbG9jayBub3QgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UgaGF2ZSB3cml0ZS1zaWRlIHByb3RlY3Rpb24KLQkgKiAocnRubF9tdXRleCksIGhvd2V2ZXIgYSBub24tcmN1IGl0ZXJhdG9yIGRvZXMgbm90IGV4aXN0LgomIzQzOwkgKiAocnRubF9tdXRleCksIGhvd2V2ZXIgYSBub24tcmN1IGl0ZXJhdG9yIGRvZXMgbm90IGV4aXN0LiBXYWxrIHRoZQomIzQzOwkgKiBlbnRpcmUgdXBwZXIgY2hhaW4gc28gdGhhdCBhIFZMQU4gZGV2aWNlIHN0YWNrZWQgb24gYSBpbnRlcm1lZGlhdGUKJiM0MzsJICogYm9uZCBpcyBjYXVnaHQgdG9vLgogCSAqLwotCW5ldGRldl9mb3JfZWFjaF91cHBlcl9kZXZfcmN1KG5ldGRldiwgdXBwZXJfZGV2LCBpdGVyKQotCQlpZiAoaXNfdmxhbl9kZXYodXBwZXJfZGV2KSkKLQkJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJaWYgKG5ldGRldl93YWxrX2FsbF91cHBlcl9kZXZfcmN1KG5ldGRldiwgZHBhYTJfc3dpdGNoX2hhdmVfdmxhbl91cHBlciwKJiM0MzsJCQkJCSAgJmFtcDtwcml2KSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBkcGFhMl9zd2l0Y2hfY2hlY2tfZHBzd19pbnN0YW5jZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkJICAgIHN0cnVjdCBuZXRkZXZfbmVzdGVkX3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSAoc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqKXByaXYtJmd0O2RhdGE7CiYjNDM7CXN0cnVjdCBldGhzd19wb3J0X3ByaXYgKm90aGVyX3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwomIzQzOwlpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhkZXYpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChvdGhlcl9wcml2LSZndDtldGhzd19kYXRhID09IHBvcnRfcHJpdi0mZ3Q7ZXRoc3dfZGF0YSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4gMTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50CiBkcGFhMl9zd2l0Y2hfcHJlY2hhbmdldXBwZXJfc2FuaXR5X2NoZWNrcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICp1cHBlcl9kZXYsCiAJCQkJCSAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqb3RoZXJfcG9ydF9wcml2OwotCXN0cnVjdCBuZXRfZGV2aWNlICpvdGhlcl9kZXY7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqaXRlcjsKJiM0MzsJc3RydWN0IG5ldGRldl9uZXN0ZWRfcHJpdiBkYXRhID0gewomIzQzOwkJLmRhdGEgPSAodm9pZCAqKXBvcnRfcHJpdiwKJiM0MzsJfTsKIAlpbnQgZXJyOwogCiAJaWYgKCFicl92bGFuX2VuYWJsZWQodXBwZXJfZGV2KSkgewpAQCAtMjIxNSw2ICYjNDM7MjQwNyw3MCBAQCBkcGFhMl9zd2l0Y2hfcHJlY2hhbmdldXBwZXJfc2FuaXR5X2NoZWNrcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQlyZXR1cm4gZXJyOwogCX0KIAomIzQzOwllcnIgPSBuZXRkZXZfd2Fsa19hbGxfbG93ZXJfZGV2KHVwcGVyX2RldiwKJiM0MzsJCQkJCWRwYWEyX3N3aXRjaF9jaGVja19kcHN3X2luc3RhbmNlLAomIzQzOwkJCQkJJmFtcDtkYXRhKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJICAgJiMzNDtJbnRlcmZhY2UgZnJvbSBhIGRpZmZlcmVudCBEUFNXIGlzIGluIHRoZSBicmlkZ2UgYWxyZWFkeSYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wcmVfbGFnX2pvaW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqdXBwZXJfZGV2LAomIzQzOwkJCQkgICAgIHN0cnVjdCBuZXRkZXZfbGFnX3VwcGVyX2luZm8gKmluZm8sCiYjNDM7CQkJCSAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3ID0gcG9ydF9wcml2LSZndDtldGhzd19kYXRhOwomIzQzOwlzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpvdGhlcl9wb3J0X3ByaXY7CiYjNDM7CXN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWcgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgZHBzd19sYWdfY2ZnIGNmZyA9IHswfTsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm90aGVyX2RldjsKJiM0MzsJaW50IGksIG51bV9pZnMgPSAwLCBlcnI7CiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7CiYjNDM7CiYjNDM7CWlmICghKGV0aHN3LSZndDtmZWF0dXJlcyAmYW1wOyBFVEhTV19GRUFUVVJFX0xBR19PRkZMT0FEKSkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJICAgJiMzNDtMQUcgb2ZmbG9hZCBpcyBzdXBwb3J0ZWQgb25seSBmb3IgRFBTVyAmZ3Q7PSB2OC4xMyYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaW5mby0mZ3Q7dHhfdHlwZSAhPSBORVRERVZfTEFHX1RYX1RZUEVfSEFTSCkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJICAgJiMzNDtDYW4gb25seSBvZmZsb2FkIExBRyB1c2luZyBoYXNoIFRYIHR5cGUmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGluZm8tJmd0O2hhc2hfdHlwZSAhPSBORVRERVZfTEFHX0hBU0hfTDIzKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCAmIzM0O0NhbiBvbmx5IG9mZmxvYWQgTDImIzQzO0wzIFR4IGhhc2gmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9oYXNfbWFjKHBvcnRfcHJpdikpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7T25seSBzd2l0Y2ggaW50ZXJmYWNlcyBjb25uZWN0ZWQgdG8gTUFDcyBjYW4gYmUgdW5kZXIgYSBMQUcmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodmxhbl91c2VzX2Rldih1cHBlcl9kZXYpKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O0Nhbm5vdCBqb2luIGEgTEFHIHVwcGVyIHRoYXQgaGFzIGEgVkxBTiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZXRoc3ctJmd0O3N3X2F0dHIubnVtX2lmczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICghZXRoc3ctJmd0O2xhZ3NbaV0uaW5fdXNlKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKGV0aHN3LSZndDtsYWdzW2ldLmJvbmRfZGV2ICE9IHVwcGVyX2RldikKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWxhZyA9ICZhbXA7ZXRoc3ctJmd0O2xhZ3NbaV07CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwogCW5ldGRldl9mb3JfZWFjaF9sb3dlcl9kZXYodXBwZXJfZGV2LCBvdGhlcl9kZXYsIGl0ZXIpIHsKIAkJaWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2sob3RoZXJfZGV2KSkKIAkJCWNvbnRpbnVlOwpAQCAtMjIyMiw5ICYjNDM7MjQ3OCwyNDggQEAgZHBhYTJfc3dpdGNoX3ByZWNoYW5nZXVwcGVyX3Nhbml0eV9jaGVja3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJb3RoZXJfcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYob3RoZXJfZGV2KTsKIAkJaWYgKG90aGVyX3BvcnRfcHJpdi0mZ3Q7ZXRoc3dfZGF0YSAhPSBwb3J0X3ByaXYtJmd0O2V0aHN3X2RhdGEpIHsKIAkJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCi0JCQkJCSAgICYjMzQ7SW50ZXJmYWNlIGZyb20gYSBkaWZmZXJlbnQgRFBTVyBpcyBpbiB0aGUgYnJpZGdlIGFscmVhZHkmIzM0Oyk7CiYjNDM7CQkJCQkgICAmIzM0O0ludGVyZmFjZSBmcm9tIGEgZGlmZmVyZW50IERQU1cgaXMgaW4gdGhlIGJvbmQgYWxyZWFkeSYjMzQ7KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiYjNDM7CiYjNDM7CQljZmcuaWZfaWRbbnVtX2lmcyYjNDM7JiM0MztdID0gb3RoZXJfcG9ydF9wcml2LSZndDtpZHg7CiYjNDM7CiYjNDM7CQlpZiAobnVtX2lmcyAmZ3Q7PSBEUFNXX01BWF9MQUdfSUZTKSB7CiYjNDM7CQkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJCSAgICYjMzQ7Q2Fubm90IGFkZCBtb3JlIHRoYW4gOCBEUEFBMiBzd2l0Y2ggcG9ydHMgdW5kZXIgdGhlIHNhbWUgYm9uZCYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobGFnKSB7CiYjNDM7CQljZmcuZ3JvdXBfaWQgPSBsYWctJmd0O2lkOwomIzQzOwkJY2ZnLmlmX2lkW251bV9pZnMmIzQzOyYjNDM7XSA9IHBvcnRfcHJpdi0mZ3Q7aWR4OwomIzQzOwkJY2ZnLm51bV9pZnMgPSBudW1faWZzOwomIzQzOwkJY2ZnLnBoYXNlID0gRFBTV19MQUdfU0VUX1BIQVNFX0NIRUNLOwomIzQzOwomIzQzOwkJZXJyID0gZHBzd19sYWdfc2V0KGV0aHN3LSZndDttY19pbywgMCwgZXRoc3ctJmd0O2Rwc3dfaGFuZGxlLCAmYW1wO2NmZyk7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJCSAgICYjMzQ7Q2Fubm90IG9mZmxvYWQgTEFHIGNvbmZpZ3VyYXRpb24mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkcGFhMl9zd2l0Y2hfcG9ydF9zZXRfbGFnX2dyb3VwKHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiwKJiM0MzsJCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3cgPSBwb3J0X3ByaXYtJmd0O2V0aHN3X2RhdGE7CiYjNDM7CXN0cnVjdCBldGhzd19wb3J0X3ByaXYgKm90aGVyX3BvcnRfcHJpdiA9IE5VTEw7CiYjNDM7CXN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWcgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqb3RoZXJfbGFnOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqb3RoZXJfZGV2OwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkICppdGVyOwomIzQzOwomIzQzOwluZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KGJvbmRfZGV2LCBvdGhlcl9kZXYsIGl0ZXIpIHsKJiM0MzsJCWlmICghZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrKG90aGVyX2RldikpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlvdGhlcl9wb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihvdGhlcl9kZXYpOwomIzQzOwkJb3RoZXJfbGFnID0gcnRubF9kZXJlZmVyZW5jZShvdGhlcl9wb3J0X3ByaXYtJmd0O2xhZyk7CiYjNDM7CQlpZiAoIW90aGVyX2xhZykKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWlmIChvdGhlcl9sYWctJmd0O2JvbmRfZGV2ID09IGJvbmRfZGV2KSB7CiYjNDM7CQkJcmN1X2Fzc2lnbl9wb2ludGVyKHBvcnRfcHJpdi0mZ3Q7bGFnLCBvdGhlcl9sYWcpOwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwkvKiBUaGlzIGlzIHRoZSBmaXJzdCBpbnRlcmZhY2UgdG8gYmUgYWRkZWQgdW5kZXIgYSBib25kIGRldmljZS4gRmluZCBhbgomIzQzOwkgKiB1bnVzZWQgTEFHIGdyb3VwLiBObyBuZWVkIHRvIGNoZWNrIGZvciBOVUxMIHNpbmNlIHRoZXJlIGFyZSB0aGUgc2FtZQomIzQzOwkgKiBhbW91bnQgb2YgRFBTVyBwb3J0cyBhcyBMQUcgZ3JvdXBzLCBtZWFuaW5nIHRoYXQgZWFjaCBwb3J0IGNhbiBoYXZlCiYjNDM7CSAqIGl0cyBvd24gTEFHIGdyb3VwLgomIzQzOwkgKi8KJiM0MzsJbGFnID0gZHBhYTJfc3dpdGNoX2xhZ19nZXRfdW51c2VkKGV0aHN3KTsKJiM0MzsJbGFnLSZndDtpbl91c2UgPSB0cnVlOwomIzQzOwlsYWctJmd0O2JvbmRfZGV2ID0gYm9uZF9kZXY7CiYjNDM7CWxhZy0mZ3Q7cHJpbWFyeSA9IHBvcnRfcHJpdjsKJiM0MzsJcmN1X2Fzc2lnbl9wb2ludGVyKHBvcnRfcHJpdi0mZ3Q7bGFnLCBsYWcpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBkcGFhMl9zd2l0Y2hfcG9ydF9pbl9sYWcoc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2LAomIzQzOwkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWc7CiYjNDM7CiYjNDM7CWlmICghcG9ydF9wcml2KQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlsYWcgPSBydG5sX2RlcmVmZXJlbmNlKHBvcnRfcHJpdi0mZ3Q7bGFnKTsKJiM0MzsJcmV0dXJuIGxhZyAmYW1wOyZhbXA7IGxhZy0mZ3Q7Ym9uZF9kZXYgPT0gYm9uZF9kZXY7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3NldF9sYWdfY2ZnKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldiwgdTggbGFnX2lkLAomIzQzOwkJCQkgICAgc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3KQomIzQzO3sKJiM0MzsJc3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZyA9ICZhbXA7ZXRoc3ctJmd0O2xhZ3NbbGFnX2lkIC0gMV07CiYjNDM7CXN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnByaW1hcnksICpwb3J0X3ByaXY7CiYjNDM7CXN0cnVjdCBldGhzd19wb3J0X3ByaXYgKm5ld19wcmltYXJ5ID0gTlVMTDsKJiM0MzsJc3RydWN0IGRwc3dfbGFnX2NmZyBjZmcgPSB7MH07CiYjNDM7CXN0cnVjdCBkcGFhMl9tYWNfYWRkciAqYTsKJiM0MzsJdTggbnVtX2lmcyA9IDA7CiYjNDM7CWludCBlcnIsIGk7CiYjNDM7CiYjNDM7CWNmZy5ncm91cF9pZCA9IGxhZ19pZDsKJiM0MzsKJiM0MzsJLyogRGV0ZXJtaW5lIHRoZSBwcmltYXJ5IHBvcnQuIFRoZSBjYWxsZXIgY2xlYXJzIC0mZ3Q7bGFnIG9uIHRoZSBwb3J0IHRoYXQKJiM0MzsJICogaXMgbGVhdmluZywgc28gYSBOVUxMIC0mZ3Q7bGFnIG9uIHRoZSBjdXJyZW50IHByaW1hcnkgbWVhbnMgaXQgaXMgdGhlCiYjNDM7CSAqIG9uZSBsZWF2aW5nOiBlbGVjdCB0aGUgZmlyc3QgcmVtYWluaW5nIG1lbWJlciBhcyB0aGUgbmV3IHByaW1hcnkuCiYjNDM7CSAqIE90aGVyd2lzZSBrZWVwIHRoZSBjdXJyZW50IHByaW1hcnkuCiYjNDM7CSAqLwomIzQzOwlpZiAocnRubF9kZXJlZmVyZW5jZShsYWctJmd0O3ByaW1hcnktJmd0O2xhZykpIHsKJiM0MzsJCXByaW1hcnkgPSBsYWctJmd0O3ByaW1hcnk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlwcmltYXJ5ID0gTlVMTDsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBldGhzdy0mZ3Q7c3dfYXR0ci5udW1faWZzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCWlmIChkcGFhMl9zd2l0Y2hfcG9ydF9pbl9sYWcoZXRoc3ctJmd0O3BvcnRzW2ldLCBib25kX2RldikpIHsKJiM0MzsJCQkJbmV3X3ByaW1hcnkgPSBldGhzdy0mZ3Q7cG9ydHNbaV07CiYjNDM7CQkJCXByaW1hcnkgPSBuZXdfcHJpbWFyeTsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEJ1aWxkIHRoZSBpbnRlcmZhY2UgbGlzdCwgYWx3YXlzIHBsYWNpbmcgdGhlIHByaW1hcnkgZmlyc3QgKi8KJiM0MzsJaWYgKHByaW1hcnkpCiYjNDM7CQljZmcuaWZfaWRbbnVtX2lmcyYjNDM7JiM0MztdID0gcHJpbWFyeS0mZ3Q7aWR4OwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZXRoc3ctJmd0O3N3X2F0dHIubnVtX2lmczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXBvcnRfcHJpdiA9IGV0aHN3LSZndDtwb3J0c1tpXTsKJiM0MzsJCWlmIChwb3J0X3ByaXYgPT0gcHJpbWFyeSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmICghZHBhYTJfc3dpdGNoX3BvcnRfaW5fbGFnKHBvcnRfcHJpdiwgYm9uZF9kZXYpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJY2ZnLmlmX2lkW251bV9pZnMmIzQzOyYjNDM7XSA9IHBvcnRfcHJpdi0mZ3Q7aWR4OwomIzQzOwl9CiYjNDM7CWNmZy5udW1faWZzID0gbnVtX2lmczsKJiM0MzsKJiM0MzsJLyogTm8gbW9yZSBpbnRlcmZhY2VzIHVuZGVyIHRoaXMgTEFHIGdyb3VwLCBtYXJrIGl0IGFzIG5vdCBpbiB1c2UuIFdhaXQKJiM0MzsJICogZm9yIGEgZ3JhY2UgcGVyaW9kIHNvIHRoYXQgYW55IHJlYWRlcnMgb2YgdGhlIGxhZyBzdHJ1Y3R1cmUgZmluaXNoZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAoIW51bV9pZnMpIHsKJiM0MzsJCXN5bmNocm9uaXplX25ldCgpOwomIzQzOwomIzQzOwkJbGFnLSZndDtib25kX2RldiA9IE5VTEw7CiYjNDM7CQlsYWctJmd0O3ByaW1hcnkgPSBOVUxMOwomIzQzOwkJbGFnLSZndDtpbl91c2UgPSBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBXaGVuIHRoZSBwcmltYXJ5IGNoYW5nZXMsIG1pZ3JhdGUgdGhlIEZEQiBlbnRyaWVzIGZyb20gdGhlIG9sZAomIzQzOwkgKiBwcmltYXJ5IHRvIHRoZSBuZXcgb25lOiByZW1vdmUgdGhlbSBiZWZvcmUgcmVjb25maWd1cmluZyB0aGUgTEFHIGluCiYjNDM7CSAqIGhhcmR3YXJlIGFuZCByZS1hZGQgdGhlbSBvbiB0aGUgbmV3IHByaW1hcnkgYWZ0ZXJ3YXJkcy4gV2UgZG8gbm90CiYjNDM7CSAqIHRvdWNoIGFueSByZWZjb3VudGluZyBzaW5jZSB0aGUgaW50ZW50aW9uIGlzIHRvIGNoYW5nZSB0aGUgSFcgZW50cnksCiYjNDM7CSAqIG5vdCB0aGUgcGFyYWxsZWwgc29mdHdhcmUgdHJhY2tpbmcuCiYjNDM7CSAqLwomIzQzOwlpZiAobmV3X3ByaW1hcnkpIHsKJiM0MzsJCW11dGV4X2xvY2soJmFtcDtsYWctJmd0O2ZkYl9sb2NrKTsKJiM0MzsJCWxpc3RfZm9yX2VhY2hfZW50cnkoYSwgJmFtcDtsYWctJmd0O2ZkYnMsIGxpc3QpCiYjNDM7CQkJZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2RlbChsYWctJmd0O3ByaW1hcnksIGEtJmd0O2FkZHIpOwomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7bGFnLSZndDtmZGJfbG9jayk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gZHBzd19sYWdfc2V0KGV0aHN3LSZndDttY19pbywgMCwgZXRoc3ctJmd0O2Rwc3dfaGFuZGxlLCAmYW1wO2NmZyk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlpZiAobmV3X3ByaW1hcnkpIHsKJiM0MzsJCW11dGV4X2xvY2soJmFtcDtsYWctJmd0O2ZkYl9sb2NrKTsKJiM0MzsJCWxpc3RfZm9yX2VhY2hfZW50cnkoYSwgJmFtcDtsYWctJmd0O2ZkYnMsIGxpc3QpIHsKJiM0MzsJCQllcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfYWRkKG5ld19wcmltYXJ5LCBhLSZndDthZGRyKTsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQluZXRkZXZfZXJyKG5ld19wcmltYXJ5LSZndDtuZXRkZXYsICYjMzQ7VW5hYmxlIHRvIG1pZ3JhdGUgRkRCXG4mIzM0Oyk7CiYjNDM7CQl9CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtsYWctJmd0O2ZkYl9sb2NrKTsKJiM0MzsKJiM0MzsJCXN5bmNocm9uaXplX25ldCgpOwomIzQzOwkJbGFnLSZndDtwcmltYXJ5ID0gbmV3X3ByaW1hcnk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfYm9uZF9qb2luKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgbmV0ZGV2X2xhZ191cHBlcl9pbmZvICppbmZvLAomIzQzOwkJCQkgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3ID0gcG9ydF9wcml2LSZndDtldGhzd19kYXRhOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqYnJpZGdlX2RldjsKJiM0MzsJc3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZzsKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CXU4IGxhZ19pZDsKJiM0MzsKJiM0MzsJLyogU2V0dXAgdGhlIHBvcnRfcHJpdi0mZ3Q7bGFnIHBvaW50ZXIgZm9yIHRoaXMgc3dpdGNoIHBvcnQgKi8KJiM0MzsJZHBhYTJfc3dpdGNoX3BvcnRfc2V0X2xhZ19ncm91cChwb3J0X3ByaXYsIGJvbmRfZGV2KTsKJiM0MzsKJiM0MzsJLyogQ3JlYXRlIHRoZSBMQUcgY29uZmlndXJhdGlvbiBhbmQgYXBwbHkgaXQgaW4gTUMgKi8KJiM0MzsJbGFnID0gcnRubF9kZXJlZmVyZW5jZShwb3J0X3ByaXYtJmd0O2xhZyk7CiYjNDM7CWxhZ19pZCA9IGxhZy0mZ3Q7aWQ7CiYjNDM7CWVyciA9IGRwYWEyX3N3aXRjaF9zZXRfbGFnX2NmZyhib25kX2RldiwgbGFnX2lkLCBldGhzdyk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGVycl9sYWdfY2ZnOwomIzQzOwomIzQzOwkvKiBJZiB0aGUgYm9uZCBkZXZpY2UgaXMgYSBzd2l0Y2ggcG9ydCwgam9pbiB0aGUgYnJpZGdlIGFzIHdlbGwgKi8KJiM0MzsJYnJpZGdlX2RldiA9IG5ldGRldl9tYXN0ZXJfdXBwZXJfZGV2X2dldChib25kX2Rldik7CiYjNDM7CWlmICghYnJpZGdlX2RldiB8fCAhbmV0aWZfaXNfYnJpZGdlX21hc3RlcihicmlkZ2VfZGV2KSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwllcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9icmlkZ2Vfam9pbihuZXRkZXYsIGJyaWRnZV9kZXYsIGV4dGFjayk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGVycl9sYWdfY2ZnOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzOwomIzQzO2Vycl9sYWdfY2ZnOgomIzQzOwlyY3VfYXNzaWduX3BvaW50ZXIocG9ydF9wcml2LSZndDtsYWcsIE5VTEwpOwomIzQzOwlkcGFhMl9zd2l0Y2hfc2V0X2xhZ19jZmcoYm9uZF9kZXYsIGxhZ19pZCwgZXRoc3cpOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2JvbmRfbGVhdmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpicmlkZ2VfZGV2ID0gbmV0ZGV2X21hc3Rlcl91cHBlcl9kZXZfZ2V0KGJvbmRfZGV2KTsKJiM0MzsJc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZyA9IHJ0bmxfZGVyZWZlcmVuY2UocG9ydF9wcml2LSZndDtsYWcpOwomIzQzOwlzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3cgPSBwb3J0X3ByaXYtJmd0O2V0aHN3X2RhdGE7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpicnBkZXY7CiYjNDM7CWJvb2wgbGVhcm5fZW5hOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZiAoIWxhZykKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBSZWNyZWF0ZSB0aGUgTEFHIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBMQUcgZ3JvdXAgdGhhdCB3ZSBsZWZ0LiAqLwomIzQzOwlyY3VfYXNzaWduX3BvaW50ZXIocG9ydF9wcml2LSZndDtsYWcsIE5VTEwpOwomIzQzOwlkcGFhMl9zd2l0Y2hfc2V0X2xhZ19jZmcoYm9uZF9kZXYsIGxhZy0mZ3Q7aWQsIGV0aHN3KTsKJiM0MzsKJiM0MzsJaWYgKGJyaWRnZV9kZXYgJmFtcDsmYW1wOyBuZXRpZl9pc19icmlkZ2VfbWFzdGVyKGJyaWRnZV9kZXYpKSB7CiYjNDM7CQkvKiBNYWtlIHN1cmUgdGhhdCB0aGUgbmV3IHByaW1hcnkgaW5oZXJpdHMgdGhlIGxlYXJuaW5nIHN0YXRlICovCiYjNDM7CQlpZiAobGFnLSZndDtwcmltYXJ5KSB7CiYjNDM7CQkJYnJwZGV2ID0gZHBhYTJfc3dpdGNoX3BvcnRfdG9fYnJpZGdlX3BvcnQobGFnLSZndDtwcmltYXJ5KTsKJiM0MzsJCQlsZWFybl9lbmEgPSBicl9wb3J0X2ZsYWdfaXNfc2V0KGJycGRldiwgQlJfTEVBUk5JTkcpOwomIzQzOwkJCWVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X3NldF9sZWFybmluZyhsYWctJmd0O3ByaW1hcnksCiYjNDM7CQkJCQkJCSAgICAgbGVhcm5fZW5hKTsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQlyZXR1cm4gZXJyOwomIzQzOwkJCWxhZy0mZ3Q7cHJpbWFyeS0mZ3Q7bGVhcm5fZW5hID0gbGVhcm5fZW5hOwomIzQzOwkJfQomIzQzOwomIzQzOwkJLyogSW4gY2FzZSB0aGUgYm9uZCBpcyBhIGJyaWRnZSBwb3J0LCBsZWF2ZSB0aGUgdXBwZXIgYnJpZGdlIGFzCiYjNDM7CQkgKiB3ZWxsLgomIzQzOwkJICovCiYjNDM7CQlyZXR1cm4gZHBhYTJfc3dpdGNoX3BvcnRfYnJpZGdlX2xlYXZlKG5ldGRldik7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0yMjM0LDggJiM0MzsyNzI5LDggQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9wcmVjaGFuZ2V1cHBlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJCQkgICAgc3RydWN0IG5ldGRldl9ub3RpZmllcl9jaGFuZ2V1cHBlcl9pbmZvICppbmZvKQogewogCXN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdjsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKnVwcGVyX2RldiwgKmJyOwogCXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjazsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqdXBwZXJfZGV2OwogCWludCBlcnI7CiAKIAlpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhuZXRkZXYpKQpAQCAtMjI1Miw2ICYjNDM7Mjc0NywyNCBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X3ByZWNoYW5nZXVwcGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAKIAkJaWYgKCFpbmZvLSZndDtsaW5raW5nKQogCQkJZHBhYTJfc3dpdGNoX3BvcnRfcHJlX2JyaWRnZV9sZWF2ZShuZXRkZXYpOwomIzQzOwl9IGVsc2UgaWYgKG5ldGlmX2lzX2xhZ19tYXN0ZXIodXBwZXJfZGV2KSkgewomIzQzOwkJaWYgKCFpbmZvLSZndDtsaW5raW5nKSB7CiYjNDM7CQkJaWYgKG5ldGlmX2lzX2JyaWRnZV9wb3J0KHVwcGVyX2RldikpCiYjNDM7CQkJCWRwYWEyX3N3aXRjaF9wb3J0X3ByZV9icmlkZ2VfbGVhdmUobmV0ZGV2KTsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChuZXRpZl9pc19icmlkZ2VfcG9ydCh1cHBlcl9kZXYpKSB7CiYjNDM7CQkJYnIgPSBuZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9nZXQodXBwZXJfZGV2KTsKJiM0MzsJCQllcnIgPSBkcGFhMl9zd2l0Y2hfcHJlY2hhbmdldXBwZXJfc2FuaXR5X2NoZWNrcyhuZXRkZXYsCiYjNDM7CQkJCQkJCQkJYnIsCiYjNDM7CQkJCQkJCQkJZXh0YWNrKTsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcmV0dXJuIGRwYWEyX3N3aXRjaF9wcmVfbGFnX2pvaW4obmV0ZGV2LCB1cHBlcl9kZXYsCiYjNDM7CQkJCQkJIGluZm8tJmd0O3VwcGVyX2luZm8sIGV4dGFjayk7CiAJfSBlbHNlIGlmIChpc192bGFuX2Rldih1cHBlcl9kZXYpKSB7CiAJCXBvcnRfcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJCWlmIChwb3J0X3ByaXYtJmd0O2ZkYi0mZ3Q7YnJpZGdlX2RldikgewpAQCAtMjI4Myw2ICYjNDM7Mjc5Niw4MCBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2NoYW5nZXVwcGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkJCQkJICAgICBleHRhY2spOwogCQllbHNlCiAJCQlyZXR1cm4gZHBhYTJfc3dpdGNoX3BvcnRfYnJpZGdlX2xlYXZlKG5ldGRldik7CiYjNDM7CX0gZWxzZSBpZiAobmV0aWZfaXNfbGFnX21hc3Rlcih1cHBlcl9kZXYpKSB7CiYjNDM7CQlpZiAoaW5mby0mZ3Q7bGlua2luZykKJiM0MzsJCQlyZXR1cm4gZHBhYTJfc3dpdGNoX3BvcnRfYm9uZF9qb2luKG5ldGRldiwgdXBwZXJfZGV2LAomIzQzOwkJCQkJCQkgICBpbmZvLSZndDt1cHBlcl9pbmZvLAomIzQzOwkJCQkJCQkgICBleHRhY2spOwomIzQzOwkJZWxzZQomIzQzOwkJCXJldHVybiBkcGFhMl9zd2l0Y2hfcG9ydF9ib25kX2xlYXZlKG5ldGRldiwgdXBwZXJfZGV2KTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO2RwYWEyX3N3aXRjaF9sYWdfcHJlY2hhbmdldXBwZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkJc3RydWN0IG5ldGRldl9ub3RpZmllcl9jaGFuZ2V1cHBlcl9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmxvd2VyOwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkICppdGVyOwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFuZXRpZl9pc19sYWdfbWFzdGVyKG5ldGRldikpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJbmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX2RldihuZXRkZXYsIGxvd2VyLCBpdGVyKSB7CiYjNDM7CQlpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhsb3dlcikpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQllcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9wcmVjaGFuZ2V1cHBlcihsb3dlciwgaW5mbyk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO2RwYWEyX3N3aXRjaF9sYWdfY2hhbmdldXBwZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkgICAgIHN0cnVjdCBuZXRkZXZfbm90aWZpZXJfY2hhbmdldXBwZXJfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpsb3dlcjsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCAqaXRlcjsKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CWlmICghbmV0aWZfaXNfbGFnX21hc3RlcihuZXRkZXYpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CW5ldGRldl9mb3JfZWFjaF9sb3dlcl9kZXYobmV0ZGV2LCBsb3dlciwgaXRlcikgewomIzQzOwkJaWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2sobG93ZXIpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfY2hhbmdldXBwZXIobG93ZXIsIGluZm8pOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7ZHBhYTJfc3dpdGNoX3BvcnRfY2hhbmdlbG93ZXJzdGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAomIzQzOwkJCQkgICBzdHJ1Y3QgbmV0ZGV2X2xhZ19sb3dlcl9zdGF0ZV9pbmZvICpsaW5mbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CXN0cnVjdCBldGhzd19jb3JlICpldGhzdyA9IHBvcnRfcHJpdi0mZ3Q7ZXRoc3dfZGF0YTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJaWYgKCFydG5sX2RlcmVmZXJlbmNlKHBvcnRfcHJpdi0mZ3Q7bGFnKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwllcnIgPSBkcHN3X2lmX3NldF9sYWdfc3RhdGUoZXRoc3ctJmd0O21jX2lvLCAwLCBldGhzdy0mZ3Q7ZHBzd19oYW5kbGUsCiYjNDM7CQkJCSAgICBwb3J0X3ByaXYtJmd0O2lkeCwgbGluZm8tJmd0O3R4X2VuYWJsZWQgPyAxIDogMCk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LCAmIzM0O2Rwc3dfaWZfc2V0X2xhZ19zdGF0ZSgpID0gJWRcbiYjMzQ7LCBlcnIpOwomIzQzOwkJcmV0dXJuIGVycjsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTIyOTIsNiAmIzQzOzI4NzksNyBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X25ldGRldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAogCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7CiYjNDM7CXN0cnVjdCBuZXRkZXZfbm90aWZpZXJfY2hhbmdlbG93ZXJzdGF0ZV9pbmZvICppbmZvOwogCWludCBlcnIgPSAwOwogCiAJc3dpdGNoIChldmVudCkgewpAQCAtMjMwMCwxMyAmIzQzOzI4ODgsMjkgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9uZXRkZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKIAkJaWYgKGVycikKIAkJCXJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7CiAKJiM0MzsJCWVyciA9IGRwYWEyX3N3aXRjaF9sYWdfcHJlY2hhbmdldXBwZXIobmV0ZGV2LCBwdHIpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gbm90aWZpZXJfZnJvbV9lcnJubyhlcnIpOwomIzQzOwogCQlicmVhazsKIAljYXNlIE5FVERFVl9DSEFOR0VVUFBFUjoKIAkJZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfY2hhbmdldXBwZXIobmV0ZGV2LCBwdHIpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8oZXJyKTsKIAomIzQzOwkJZXJyID0gZHBhYTJfc3dpdGNoX2xhZ19jaGFuZ2V1cHBlcihuZXRkZXYsIHB0cik7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7CiYjNDM7CiAJCWJyZWFrOwomIzQzOwljYXNlIE5FVERFVl9DSEFOR0VMT1dFUlNUQVRFOgomIzQzOwkJaW5mbyA9IHB0cjsKJiM0MzsJCWlmICghZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrKG5ldGRldikpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQllcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9jaGFuZ2Vsb3dlcnN0YXRlKG5ldGRldiwKJiM0MzsJCQkJCQkJIGluZm8tJmd0O2xvd2VyX3N0YXRlX2luZm8pOwomIzQzOwkJcmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8oZXJyKTsKIAl9CiAKIAlyZXR1cm4gTk9USUZZX0RPTkU7CkBAIC0yMzE2LDgwICYjNDM7MjkyMCw5NyBAQCBzdHJ1Y3QgZXRoc3dfc3dpdGNoZGV2X2V2ZW50X3dvcmsgewogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwogCXN0cnVjdCBzd2l0Y2hkZXZfbm90aWZpZXJfZmRiX2luZm8gZmRiX2luZm87CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2OwogCXVuc2lnbmVkIGxvbmcgZXZlbnQ7CiYjNDM7CXUxNiB2aWQ7CiB9OwogCiBzdGF0aWMgdm9pZCBkcGFhMl9zd2l0Y2hfZXZlbnRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGV0aHN3X3N3aXRjaGRldl9ldmVudF93b3JrICpzd2l0Y2hkZXZfd29yayA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZXRoc3dfc3dpdGNoZGV2X2V2ZW50X3dvcmssIHdvcmspOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYgPSBzd2l0Y2hkZXZfd29yay0mZ3Q7b3JpZ19kZXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHN3aXRjaGRldl93b3JrLSZndDtkZXY7CiYjNDM7CXN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHN3aXRjaGRldl9ub3RpZmllcl9mZGJfaW5mbyAqZmRiX2luZm87CiYjNDM7CXN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWc7CiAJaW50IGVycjsKIAotCXJ0bmxfbG9jaygpOwogCWZkYl9pbmZvID0gJmFtcDtzd2l0Y2hkZXZfd29yay0mZ3Q7ZmRiX2luZm87CiAKJiM0MzsJLyogVGhlIGxhZyBzdHJ1Y3R1cmVzIGFyZSBmcmVlZCBvbmx5IGZyb20gZHBhYTJfc3dpdGNoX3JlbW92ZSgpLCB3aGljaAomIzQzOwkgKiBmaXJzdCBmbHVzaGVzIHRoaXMgd29ya3F1ZXVlLCBzbyB0aGUgcG9pbnRlciBzdGF5cyB2YWxpZCBmb3IgdGhlCiYjNDM7CSAqIGxpZmV0aW1lIG9mIHRoZSB3b3JrIGl0ZW0uIE9ubHkgdGhlIGRlcmVmZXJlbmNlIG5lZWRzIHRoZSBSQ1UKJiM0MzsJICogcmVhZC1zaWRlIGxvY2s7IHRoZSBGREIgaGVscGVycyBiZWxvdyBjYW4gc2xlZXAgYW5kIG11c3QgcnVuIG91dHNpZGUKJiM0MzsJICogb2YgaXQuCiYjNDM7CSAqLwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWxhZyA9IHJjdV9kZXJlZmVyZW5jZShwb3J0X3ByaXYtJmd0O2xhZyk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwogCXN3aXRjaCAoc3dpdGNoZGV2X3dvcmstJmd0O2V2ZW50KSB7CiAJY2FzZSBTV0lUQ0hERVZfRkRCX0FERF9UT19ERVZJQ0U6Ci0JCWlmICghZmRiX2luZm8tJmd0O2FkZGVkX2J5X3VzZXIgfHwgZmRiX2luZm8tJmd0O2lzX2xvY2FsKQotCQkJYnJlYWs7Ci0JCWlmIChpc191bmljYXN0X2V0aGVyX2FkZHIoZmRiX2luZm8tJmd0O2FkZHIpKQotCQkJZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2FkZF91YyhuZXRkZXZfcHJpdihkZXYpLAotCQkJCQkJCSAgIGZkYl9pbmZvLSZndDthZGRyKTsKJiM0MzsJCWlmIChsYWcpCiYjNDM7CQkJZXJyID0gZHBhYTJfc3dpdGNoX2xhZ19mZGJfYWRkKGxhZywgZmRiX2luZm8tJmd0O2FkZHIsCiYjNDM7CQkJCQkJICAgICAgIHN3aXRjaGRldl93b3JrLSZndDt2aWQpOwogCQllbHNlCi0JCQllcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfYWRkX21jKG5ldGRldl9wcml2KGRldiksCi0JCQkJCQkJICAgZmRiX2luZm8tJmd0O2FkZHIpOwomIzQzOwkJCWVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9hZGQocG9ydF9wcml2LAomIzQzOwkJCQkJCQlmZGJfaW5mby0mZ3Q7YWRkcik7CiAJCWlmIChlcnIpCiAJCQlicmVhazsKIAkJZmRiX2luZm8tJmd0O29mZmxvYWRlZCA9IHRydWU7Ci0JCWNhbGxfc3dpdGNoZGV2X25vdGlmaWVycyhTV0lUQ0hERVZfRkRCX09GRkxPQURFRCwgZGV2LAomIzQzOwkJY2FsbF9zd2l0Y2hkZXZfbm90aWZpZXJzKFNXSVRDSERFVl9GREJfT0ZGTE9BREVELCBvcmlnX2RldiwKIAkJCQkJICZhbXA7ZmRiX2luZm8tJmd0O2luZm8sIE5VTEwpOwogCQlicmVhazsKIAljYXNlIFNXSVRDSERFVl9GREJfREVMX1RPX0RFVklDRToKLQkJaWYgKCFmZGJfaW5mby0mZ3Q7YWRkZWRfYnlfdXNlciB8fCBmZGJfaW5mby0mZ3Q7aXNfbG9jYWwpCi0JCQlicmVhazsKLQkJaWYgKGlzX3VuaWNhc3RfZXRoZXJfYWRkcihmZGJfaW5mby0mZ3Q7YWRkcikpCi0JCQlkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsX3VjKG5ldGRldl9wcml2KGRldiksIGZkYl9pbmZvLSZndDthZGRyKTsKJiM0MzsJCWlmIChsYWcpCiYjNDM7CQkJZHBhYTJfc3dpdGNoX2xhZ19mZGJfZGVsKGxhZywgZmRiX2luZm8tJmd0O2FkZHIsCiYjNDM7CQkJCQkJIHN3aXRjaGRldl93b3JrLSZndDt2aWQpOwogCQllbHNlCi0JCQlkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsX21jKG5ldGRldl9wcml2KGRldiksIGZkYl9pbmZvLSZndDthZGRyKTsKJiM0MzsJCQlkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsKHBvcnRfcHJpdiwgZmRiX2luZm8tJmd0O2FkZHIpOwogCQlicmVhazsKIAl9CiAKLQlydG5sX3VubG9jaygpOwogCWtmcmVlKHN3aXRjaGRldl93b3JrLSZndDtmZGJfaW5mby5hZGRyKTsKIAlrZnJlZShzd2l0Y2hkZXZfd29yayk7CiAJZGV2X3B1dChkZXYpOwomIzQzOwlkZXZfcHV0KG9yaWdfZGV2KTsKIH0KIAotLyogQ2FsbGVkIHVuZGVyIHJjdV9yZWFkX2xvY2soKSAqLwotc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cikKJiM0MztzdGF0aWMgaW50CiYjNDM7ZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2V2ZW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldiwKJiM0MzsJCQkgICAgdW5zaWduZWQgbG9uZyBldmVudCwgY29uc3Qgdm9pZCAqY3R4LAomIzQzOwkJCSAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X25vdGlmaWVyX2ZkYl9pbmZvICpmZGJfaW5mbykKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc3dpdGNoZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7CiAJc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgZXRoc3dfc3dpdGNoZGV2X2V2ZW50X3dvcmsgKnN3aXRjaGRldl93b3JrOwotCXN0cnVjdCBzd2l0Y2hkZXZfbm90aWZpZXJfZmRiX2luZm8gKmZkYl9pbmZvID0gcHRyOwogCXN0cnVjdCBldGhzd19jb3JlICpldGhzdyA9IHBvcnRfcHJpdi0mZ3Q7ZXRoc3dfZGF0YTsKIAotCWlmIChldmVudCA9PSBTV0lUQ0hERVZfUE9SVF9BVFRSX1NFVCkKLQkJcmV0dXJuIGRwYWEyX3N3aXRjaF9wb3J0X2F0dHJfc2V0X2V2ZW50KGRldiwgcHRyKTsKJiM0MzsJaWYgKGN0eCAmYW1wOyZhbXA7IGN0eCAhPSBwb3J0X3ByaXYpCiYjNDM7CQlyZXR1cm4gMDsKIAotCWlmICghZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrKGRldikpCi0JCXJldHVybiBOT1RJRllfRE9ORTsKJiM0MzsJLyogRm9yIHRoZSBtb21lbnQsIGRvIG5vdGhpbmcgd2l0aCBlbnRyaWVzIHRvd2FyZHMgZm9yZWlnbiBkZXZpY2VzICovCiYjNDM7CWlmIChkcGFhMl9zd2l0Y2hfZm9yZWlnbl9kZXZfY2hlY2soZGV2LCBvcmlnX2RldikpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKCFmZGJfaW5mby0mZ3Q7YWRkZWRfYnlfdXNlciB8fCBmZGJfaW5mby0mZ3Q7aXNfbG9jYWwpCiYjNDM7CQlyZXR1cm4gMDsKIAogCXN3aXRjaGRldl93b3JrID0ga3phbGxvY19vYmooKnN3aXRjaGRldl93b3JrLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXN3aXRjaGRldl93b3JrKQotCQlyZXR1cm4gTk9USUZZX0JBRDsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwogCiAJSU5JVF9XT1JLKCZhbXA7c3dpdGNoZGV2X3dvcmstJmd0O3dvcmssIGRwYWEyX3N3aXRjaF9ldmVudF93b3JrKTsKIAlzd2l0Y2hkZXZfd29yay0mZ3Q7ZGV2ID0gZGV2OwogCXN3aXRjaGRldl93b3JrLSZndDtldmVudCA9IGV2ZW50OwomIzQzOwlzd2l0Y2hkZXZfd29yay0mZ3Q7b3JpZ19kZXYgPSBvcmlnX2RldjsKJiM0MzsJc3dpdGNoZGV2X3dvcmstJmd0O3ZpZCA9IGZkYl9pbmZvLSZndDt2aWQ7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBTV0lUQ0hERVZfRkRCX0FERF9UT19ERVZJQ0U6CiAJY2FzZSBTV0lUQ0hERVZfRkRCX0RFTF9UT19ERVZJQ0U6Ci0JCW1lbWNweSgmYW1wO3N3aXRjaGRldl93b3JrLSZndDtmZGJfaW5mbywgcHRyLAomIzQzOwkJbWVtY3B5KCZhbXA7c3dpdGNoZGV2X3dvcmstJmd0O2ZkYl9pbmZvLCBmZGJfaW5mbywKIAkJICAgICAgIHNpemVvZihzd2l0Y2hkZXZfd29yay0mZ3Q7ZmRiX2luZm8pKTsKIAkJc3dpdGNoZGV2X3dvcmstJmd0O2ZkYl9pbmZvLmFkZHIgPSBremFsbG9jKEVUSF9BTEVOLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFzd2l0Y2hkZXZfd29yay0mZ3Q7ZmRiX2luZm8uYWRkcikKQEAgLTI0MDAsNTIgJiM0MzszMDIxLDYxIEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKIAogCQkvKiBUYWtlIGEgcmVmZXJlbmNlIG9uIHRoZSBkZXZpY2UgdG8gYXZvaWQgYmVpbmcgZnJlZWQuICovCiAJCWRldl9ob2xkKGRldik7CiYjNDM7CQlkZXZfaG9sZChvcmlnX2Rldik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWtmcmVlKHN3aXRjaGRldl93b3JrKTsKLQkJcmV0dXJuIE5PVElGWV9ET05FOwomIzQzOwkJcmV0dXJuIDA7CiAJfQogCiAJcXVldWVfd29yayhldGhzdy0mZ3Q7d29ya3F1ZXVlLCAmYW1wO3N3aXRjaGRldl93b3JrLSZndDt3b3JrKTsKIAotCXJldHVybiBOT1RJRllfRE9ORTsKJiM0MzsJcmV0dXJuIDA7CiAKIGVycl9hZGRyX2FsbG9jOgogCWtmcmVlKHN3aXRjaGRldl93b3JrKTsKLQlyZXR1cm4gTk9USUZZX0JBRDsKJiM0MzsJcmV0dXJuIC1FTk9NRU07CiB9CiAKLXN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfb2JqX2V2ZW50KHVuc2lnbmVkIGxvbmcgZXZlbnQsCi0JCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCi0JCQkJICAgICAgIHN0cnVjdCBzd2l0Y2hkZXZfbm90aWZpZXJfcG9ydF9vYmpfaW5mbyAqcG9ydF9vYmpfaW5mbykKJiM0MzsvKiBDYWxsZWQgdW5kZXIgcmN1X3JlYWRfbG9jaygpICovCiYjNDM7c3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAomIzQzOwkJCQkgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpCiB7Ci0JaW50IGVyciA9IC1FT1BOT1RTVVBQOwotCi0JaWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2sobmV0ZGV2KSkKLQkJcmV0dXJuIE5PVElGWV9ET05FOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc3dpdGNoZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7CiYjNDM7CWludCBlcnI7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7Ci0JY2FzZSBTV0lUQ0hERVZfUE9SVF9PQkpfQUREOgotCQllcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9vYmpfYWRkKG5ldGRldiwgcG9ydF9vYmpfaW5mby0mZ3Q7b2JqKTsKLQkJYnJlYWs7Ci0JY2FzZSBTV0lUQ0hERVZfUE9SVF9PQkpfREVMOgotCQllcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9vYmpfZGVsKG5ldGRldiwgcG9ydF9vYmpfaW5mby0mZ3Q7b2JqKTsKLQkJYnJlYWs7CiYjNDM7CWNhc2UgU1dJVENIREVWX1BPUlRfQVRUUl9TRVQ6CiYjNDM7CQlyZXR1cm4gZHBhYTJfc3dpdGNoX3BvcnRfYXR0cl9zZXRfZXZlbnQoZGV2LCBwdHIpOwomIzQzOwljYXNlIFNXSVRDSERFVl9GREJfQUREX1RPX0RFVklDRToKJiM0MzsJY2FzZSBTV0lUQ0hERVZfRkRCX0RFTF9UT19ERVZJQ0U6CiYjNDM7CQllcnIgPSBzd2l0Y2hkZXZfaGFuZGxlX2ZkYl9ldmVudF90b19kZXZpY2UoZGV2LCBldmVudCwgcHRyLAomIzQzOwkJCQkJCQkgICBkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2ssCiYjNDM7CQkJCQkJCSAgIGRwYWEyX3N3aXRjaF9mb3JlaWduX2Rldl9jaGVjaywKJiM0MzsJCQkJCQkJICAgZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2V2ZW50KTsKJiM0MzsJCXJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gTk9USUZZX0RPTkU7CiAJfQotCi0JcG9ydF9vYmpfaW5mby0mZ3Q7aGFuZGxlZCA9IHRydWU7Ci0JcmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8oZXJyKTsKIH0KIAogc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9ibG9ja2luZ19ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAogCQkJCQkgICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBzd2l0Y2hkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTsKJiM0MzsJaW50IGVycjsKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIFNXSVRDSERFVl9QT1JUX09CSl9BREQ6CiYjNDM7CQllcnIgPSBzd2l0Y2hkZXZfaGFuZGxlX3BvcnRfb2JqX2FkZChkZXYsIHB0ciwKJiM0MzsJCQkJCQkgICAgZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrLAomIzQzOwkJCQkJCSAgICBkcGFhMl9zd2l0Y2hfcG9ydF9vYmpfYWRkKTsKJiM0MzsJCXJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7CiAJY2FzZSBTV0lUQ0hERVZfUE9SVF9PQkpfREVMOgotCQlyZXR1cm4gZHBhYTJfc3dpdGNoX3BvcnRfb2JqX2V2ZW50KGV2ZW50LCBkZXYsIHB0cik7CiYjNDM7CQllcnIgPSBzd2l0Y2hkZXZfaGFuZGxlX3BvcnRfb2JqX2RlbChkZXYsIHB0ciwKJiM0MzsJCQkJCQkgICAgZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrLAomIzQzOwkJCQkJCSAgICBkcGFhMl9zd2l0Y2hfcG9ydF9vYmpfZGVsKTsKJiM0MzsJCXJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7CiAJY2FzZSBTV0lUQ0hERVZfUE9SVF9BVFRSX1NFVDoKIAkJcmV0dXJuIGRwYWEyX3N3aXRjaF9wb3J0X2F0dHJfc2V0X2V2ZW50KGRldiwgcHRyKTsKIAl9CkBAIC0yNDkwLDE5ICYjNDM7MzEyMCwyMiBAQCBzdGF0aWMgdm9pZCBkcGFhMl9zd2l0Y2hfcngoc3RydWN0IGRwYWEyX3N3aXRjaF9mcSAqZnEsCiAJZG1hX2FkZHJfdCBhZGRyID0gZHBhYTJfZmRfZ2V0X2FkZHIoZmQpOwogCXN0cnVjdCBldGhzd19jb3JlICpldGhzdyA9IGZxLSZndDtldGhzdzsKIAlzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXY7CiYjNDM7CXN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWc7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAlzdHJ1Y3Qgdmxhbl9ldGhoZHIgKmhkcjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXUxNiB2bGFuX3RjaSwgdmlkOwogCWludCBpZl9pZCwgZXJyOwogCXZvaWQgKnZhZGRyOwomIzQzOwl1NjQgZmxjOwogCiAJdmFkZHIgPSBkcGFhMl9pb3ZhX3RvX3ZpcnQoZXRoc3ctJmd0O2lvbW11X2RvbWFpbiwgYWRkcik7CiAJZG1hX3VubWFwX3BhZ2UoZXRoc3ctJmd0O2RldiwgYWRkciwgRFBBQTJfU1dJVENIX1JYX0JVRl9TSVpFLAogCQkgICAgICAgRE1BX0ZST01fREVWSUNFKTsKIAogCS8qIGdldCBzd2l0Y2ggaW5ncmVzcyBpbnRlcmZhY2UgSUQgKi8KLQlpZl9pZCA9IHVwcGVyXzMyX2JpdHMoZHBhYTJfZmRfZ2V0X2ZsYyhmZCkpICZhbXA7IDB4MDAwMEZGRkY7CiYjNDM7CWZsYyA9IGRwYWEyX2ZkX2dldF9mbGMoZmQpOwomIzQzOwlpZl9pZCA9IERQQUEyX0VUSFNXX0ZMQ19JRl9JRChmbGMpOwogCWlmIChpZl9pZCAmZ3Q7PSBldGhzdy0mZ3Q7c3dfYXR0ci5udW1faWZzKSB7CiAJCWRldl9lcnIoZXRoc3ctJmd0O2RldiwgJiMzNDtGcmFtZSByZWNlaXZlZCBmcm9tIHVua25vd24gaW50ZXJmYWNlIVxuJiMzNDspOwogCQlnb3RvIGVycl9mcmVlX2ZkOwpAQCAtMjU0MSwxMiAmIzQzOzMxNzQsMjAgQEAgc3RhdGljIHZvaWQgZHBhYTJfc3dpdGNoX3J4KHN0cnVjdCBkcGFhMl9zd2l0Y2hfZnEgKmZxLAogCQl9CiAJfQogCi0Jc2tiLSZndDtkZXYgPSBuZXRkZXY7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsKJiM0MzsJbGFnID0gcmN1X2RlcmVmZXJlbmNlKHBvcnRfcHJpdi0mZ3Q7bGFnKTsKJiM0MzsJaWYgKERQQUEyX0VUSFNXX0ZMQ19JTVBSRUNJU0VfSUZfSUQoZmxjKSAmYW1wOyZhbXA7IGxhZykKJiM0MzsJCXNrYi0mZ3Q7ZGV2ID0gbGFnLSZndDtib25kX2RldjsKJiM0MzsJZWxzZQomIzQzOwkJc2tiLSZndDtkZXYgPSBuZXRkZXY7CiAJc2tiLSZndDtwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgc2tiLSZndDtkZXYpOwogCiAJLyogU2V0dXAgdGhlIG9mZmxvYWRfZndkX21hcmsgb25seSBpZiB0aGUgcG9ydCBpcyB1bmRlciBhIGJyaWRnZSAqLwogCXNrYi0mZ3Q7b2ZmbG9hZF9md2RfbWFyayA9ICEhKHBvcnRfcHJpdi0mZ3Q7ZmRiLSZndDticmlkZ2VfZGV2KTsKIAomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKIAluZXRpZl9yZWNlaXZlX3NrYihza2IpOwogCiAJcmV0dXJuOwpAQCAtMjU2MSw2ICYjNDM7MzIwMiw5IEBAIHN0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9kZXRlY3RfZmVhdHVyZXMoc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3KQogCiAJaWYgKGV0aHN3LSZndDttYWpvciAmZ3Q7IDggfHwgKGV0aHN3LSZndDttYWpvciA9PSA4ICZhbXA7JmFtcDsgZXRoc3ctJmd0O21pbm9yICZndDs9IDYpKQogCQlldGhzdy0mZ3Q7ZmVhdHVyZXMgfD0gRVRIU1dfRkVBVFVSRV9NQUNfQUREUjsKJiM0MzsKJiM0MzsJaWYgKGV0aHN3LSZndDttYWpvciAmZ3Q7IDggfHwgKGV0aHN3LSZndDttYWpvciA9PSA4ICZhbXA7JmFtcDsgZXRoc3ctJmd0O21pbm9yICZndDs9IDEzKSkKJiM0MzsJCWV0aHN3LSZndDtmZWF0dXJlcyB8PSBFVEhTV19GRUFUVVJFX0xBR19PRkZMT0FEOwogfQogCiBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9zZXR1cF9mcXMoc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3KQpAQCAtMzE5NSwxNyAmIzQzOzM4MzksMTUgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfaW5pdChzdHJ1Y3QgZnNsX21jX2RldmljZSAqc3dfZGV2KQogCXJldHVybiBlcnI7CiB9CiAKLS8qIEFkZCBhbiBBQ0wgdG8gcmVkaXJlY3QgZnJhbWVzIHdpdGggc3BlY2lmaWMgZGVzdGluYXRpb24gTUFDIGFkZHJlc3MgdG8KLSAqIGNvbnRyb2wgaW50ZXJmYWNlCi0gKi8KJiM0MzsvKiBBZGQgYW4gQUNMIHRvIHJlZGlyZWN0IGZyYW1lcyB0byBjb250cm9sIGludGVyZmFjZSBiYXNlZCBvbiB0aGUgZHN0IE1BQyAqLwogc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF90cmFwX21hY19hZGRyKHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiwKLQkJCQkJICAgY29uc3QgY2hhciAqbWFjKQomIzQzOwkJCQkJICAgY29uc3QgdTggKm1hYywgY29uc3QgdTggKm1hc2spCiB7CiAJc3RydWN0IGRwYWEyX3N3aXRjaF9hY2xfZW50cnkgYWNsX2VudHJ5ID0gezB9OwogCiAJLyogTWF0Y2ggb24gdGhlIGRlc3RpbmF0aW9uIE1BQyBhZGRyZXNzICovCiAJZXRoZXJfYWRkcl9jb3B5KGFjbF9lbnRyeS5rZXkubWF0Y2gubDJfZGVzdF9tYWMsIG1hYyk7Ci0JZXRoX2Jyb2FkY2FzdF9hZGRyKGFjbF9lbnRyeS5rZXkubWFzay5sMl9kZXN0X21hYyk7CiYjNDM7CWV0aGVyX2FkZHJfY29weShhY2xfZW50cnkua2V5Lm1hc2subDJfZGVzdF9tYWMsIG1hc2spOwogCiAJLyogVHJhcCB0byBDUFUgKi8KIAlhY2xfZW50cnkuY2ZnLnByZWNlZGVuY2UgPSAwOwpAQCAtMzIxNiw3ICYjNDM7Mzg1OCw4IEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfdHJhcF9tYWNfYWRkcihzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYsCiAKIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfaW5pdChzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYsIHUxNiBwb3J0KQogewotCWNvbnN0IGNoYXIgc3RwYVtFVEhfQUxFTl0gPSB7MHgwMSwgMHg4MCwgMHhjMiwgMHgwMCwgMHgwMCwgMHgwMH07CiYjNDM7CWNvbnN0IHU4IGxsX21hY1tFVEhfQUxFTl0gPSB7MHgwMSwgMHg4MCwgMHhjMiwgMHgwMCwgMHgwMCwgMHgwMH07CiYjNDM7CWNvbnN0IHU4IGxsX21hc2tbRVRIX0FMRU5dID0gezB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjB9OwogCXN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfdmxhbiB2bGFuID0gewogCQkub2JqLmlkID0gU1dJVENIREVWX09CSl9JRF9QT1JUX1ZMQU4sCiAJCS52aWQgPSBERUZBVUxUX1ZMQU5fSUQsCkBAIC0zMjkxLDcgJiM0MzszOTM0LDcgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9pbml0KHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiwgdTE2IHBvcnQpCiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X3RyYXBfbWFjX2FkZHIocG9ydF9wcml2LCBzdHBhKTsKJiM0MzsJZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfdHJhcF9tYWNfYWRkcihwb3J0X3ByaXYsIGxsX21hYywgbGxfbWFzayk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMzMzMSw2ICYjNDM7Mzk3NCw5IEBAIHN0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9yZW1vdmUoc3RydWN0IGZzbF9tY19kZXZpY2UgKnN3X2RldikKIAlkZXYgPSAmYW1wO3N3X2Rldi0mZ3Q7ZGV2OwogCWV0aHN3ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKJiM0MzsJLyogTWFrZSBzdXJlIHRoYXQgYWxsIGV2ZW50cyB3ZXJlIGhhbmRsZWQgYmVmb3JlIHdlIGtmcmVlIGFueXRoaW5nICovCiYjNDM7CWZsdXNoX3dvcmtxdWV1ZShldGhzdy0mZ3Q7d29ya3F1ZXVlKTsKJiM0MzsKIAlkcGFhMl9zd2l0Y2hfdGVhcmRvd25faXJxcyhzd19kZXYpOwogCiAJZHBzd19kaXNhYmxlKGV0aHN3LSZndDttY19pbywgMCwgZXRoc3ctJmd0O2Rwc3dfaGFuZGxlKTsKQEAgLTMzNDQsMTIgJiM0MzszOTkwLDE1IEBAIHN0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9yZW1vdmUoc3RydWN0IGZzbF9tY19kZXZpY2UgKnN3X2RldikKIAlmb3IgKGkgPSAwOyBpICZsdDsgRFBBQTJfU1dJVENIX1JYX05VTV9GUVM7IGkmIzQzOyYjNDM7KQogCQluZXRpZl9uYXBpX2RlbCgmYW1wO2V0aHN3LSZndDtmcVtpXS5uYXBpKTsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBldGhzdy0mZ3Q7c3dfYXR0ci5udW1faWZzOyBpJiM0MzsmIzQzOykKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGV0aHN3LSZndDtzd19hdHRyLm51bV9pZnM7IGkmIzQzOyYjNDM7KSB7CiAJCWRwYWEyX3N3aXRjaF9yZW1vdmVfcG9ydChldGhzdywgaSk7CiYjNDM7CQltdXRleF9kZXN0cm95KCZhbXA7ZXRoc3ctJmd0O2xhZ3NbaV0uZmRiX2xvY2spOwomIzQzOwl9CiAKIAlrZnJlZShldGhzdy0mZ3Q7ZmRicyk7CiAJa2ZyZWUoZXRoc3ctJmd0O2ZpbHRlcl9ibG9ja3MpOwogCWtmcmVlKGV0aHN3LSZndDtwb3J0cyk7CiYjNDM7CWtmcmVlKGV0aHN3LSZndDtsYWdzKTsKIAogCWRwYWEyX3N3aXRjaF90ZWFyZG93bihzd19kZXYpOwogCkBAIC0zMzc3LDYgJiM0Mzs0MDI2LDcgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcHJvYmVfcG9ydChzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3csCiAJcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYocG9ydF9uZXRkZXYpOwogCXBvcnRfcHJpdi0mZ3Q7bmV0ZGV2ID0gcG9ydF9uZXRkZXY7CiAJcG9ydF9wcml2LSZndDtldGhzd19kYXRhID0gZXRoc3c7CiYjNDM7CXJjdV9hc3NpZ25fcG9pbnRlcihwb3J0X3ByaXYtJmd0O2xhZywgTlVMTCk7CiAKIAltdXRleF9pbml0KCZhbXA7cG9ydF9wcml2LSZndDttYWNfbG9jayk7CiAKQEAgLTM0ODQsNiAmIzQzOzQxMzQsMjEgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcHJvYmUoc3RydWN0IGZzbF9tY19kZXZpY2UgKnN3X2RldikKIAkJZ290byBlcnJfZnJlZV9mZGJzOwogCX0KIAomIzQzOwlldGhzdy0mZ3Q7bGFncyA9IGtjYWxsb2MoZXRoc3ctJmd0O3N3X2F0dHIubnVtX2lmcywgc2l6ZW9mKCpldGhzdy0mZ3Q7bGFncyksCiYjNDM7CQkJICAgICAgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghZXRoc3ctJmd0O2xhZ3MpIHsKJiM0MzsJCWVyciA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIGVycl9mcmVlX2ZpbHRlcjsKJiM0MzsJfQomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZXRoc3ctJmd0O3N3X2F0dHIubnVtX2lmczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWV0aHN3LSZndDtsYWdzW2ldLmJvbmRfZGV2ID0gTlVMTDsKJiM0MzsJCWV0aHN3LSZndDtsYWdzW2ldLmV0aHN3ID0gZXRoc3c7CiYjNDM7CQlldGhzdy0mZ3Q7bGFnc1tpXS5pZCA9IGkgJiM0MzsgMTsKJiM0MzsJCWV0aHN3LSZndDtsYWdzW2ldLmluX3VzZSA9IDA7CiYjNDM7CQltdXRleF9pbml0KCZhbXA7ZXRoc3ctJmd0O2xhZ3NbaV0uZmRiX2xvY2spOwomIzQzOwkJSU5JVF9MSVNUX0hFQUQoJmFtcDtldGhzdy0mZ3Q7bGFnc1tpXS5mZGJzKTsKJiM0MzsJfQomIzQzOwogCWZvciAoaSA9IDA7IGkgJmx0OyBldGhzdy0mZ3Q7c3dfYXR0ci5udW1faWZzOyBpJiM0MzsmIzQzOykgewogCQllcnIgPSBkcGFhMl9zd2l0Y2hfcHJvYmVfcG9ydChldGhzdywgaSk7CiAJCWlmIChlcnIpCkBAIC0zNTMwLDYgJiM0Mzs0MTk1LDEwIEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3Byb2JlKHN0cnVjdCBmc2xfbWNfZGV2aWNlICpzd19kZXYpCiBlcnJfZnJlZV9uZXRkZXY6CiAJZm9yIChpLS07IGkgJmd0Oz0gMDsgaS0tKQogCQlkcGFhMl9zd2l0Y2hfcmVtb3ZlX3BvcnQoZXRoc3csIGkpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZXRoc3ctJmd0O3N3X2F0dHIubnVtX2lmczsgaSYjNDM7JiM0MzspCiYjNDM7CQltdXRleF9kZXN0cm95KCZhbXA7ZXRoc3ctJmd0O2xhZ3NbaV0uZmRiX2xvY2spOwomIzQzOwlrZnJlZShldGhzdy0mZ3Q7bGFncyk7CiYjNDM7ZXJyX2ZyZWVfZmlsdGVyOgogCWtmcmVlKGV0aHN3LSZndDtmaWx0ZXJfYmxvY2tzKTsKIGVycl9mcmVlX2ZkYnM6CiAJa2ZyZWUoZXRoc3ctJmd0O2ZkYnMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXN3aXRjaC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXN3aXRjaC5oCmluZGV4IDQyYjNjYTczZjU1ZDU0Li42M2I3MDJiMDAwMGMyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXN3aXRjaC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guaApAQCAtNDEsNyAmIzQzOzQxLDggQEAKICNkZWZpbmUgRVRIU1dfTUFYX0ZSQU1FX0xFTkdUSAkoRFBBQTJfTUZMIC0gVkxBTl9FVEhfSExFTiAtIEVUSF9GQ1NfTEVOKQogI2RlZmluZSBFVEhTV19MMl9NQVhfRlJNKG10dSkJKChtdHUpICYjNDM7IFZMQU5fRVRIX0hMRU4gJiM0MzsgRVRIX0ZDU19MRU4pCiAKLSNkZWZpbmUgRVRIU1dfRkVBVFVSRV9NQUNfQUREUglCSVQoMCkKJiM0MzsjZGVmaW5lIEVUSFNXX0ZFQVRVUkVfTUFDX0FERFIJCUJJVCgwKQomIzQzOyNkZWZpbmUgRVRIU1dfRkVBVFVSRV9MQUdfT0ZGTE9BRAlCSVQoMSkKIAogLyogTnVtYmVyIG9mIHJlY2VpdmUgcXVldWVzIChvbmUgUlggYW5kIG9uZSBUWF9DT05GKSAqLwogI2RlZmluZSBEUEFBMl9TV0lUQ0hfUlhfTlVNX0ZRUwkyCkBAIC04Niw2ICYjNDM7ODcsOSBAQAogCiAjZGVmaW5lIERQQUEyX0VUSFNXX1BPUlRfQUNMX0NNRF9CVUZfU0laRQkyNTYKIAomIzQzOyNkZWZpbmUgRFBBQTJfRVRIU1dfRkxDX0lGX0lEKGZsYykJCSgoKGZsYykgJmd0OyZndDsgMzIpICZhbXA7IEdFTk1BU0soMTUsIDApKQomIzQzOyNkZWZpbmUgRFBBQTJfRVRIU1dfRkxDX0lNUFJFQ0lTRV9JRl9JRChmbGMpCSgoZmxjKSAmYW1wOyBCSVRfVUxMKDYzKSkKJiM0MzsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZHBhYTJfc3dpdGNoX3BvcnRfZXRodG9vbF9vcHM7CiAKIHN0cnVjdCBldGhzd19jb3JlOwpAQCAtOTksMTIgJiM0MzsxMDMsMzAgQEAgc3RydWN0IGRwYWEyX3N3aXRjaF9mcSB7CiAJdTMyIGZxaWQ7CiB9OwogCiYjNDM7c3RydWN0IGRwYWEyX21hY19hZGRyIHsKJiM0MzsJdW5zaWduZWQgY2hhciBhZGRyW0VUSF9BTEVOXTsKJiM0MzsJdTE2IHZpZDsKJiM0MzsJcmVmY291bnRfdCByZWZjb3VudDsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwomIzQzO307CiYjNDM7CiBzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZkYiB7CiAJc3RydWN0IG5ldF9kZXZpY2UJKmJyaWRnZV9kZXY7CiAJdTE2CQkJZmRiX2lkOwogCWJvb2wJCQlpbl91c2U7CiB9OwogCiYjNDM7c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgewomIzQzOwlzdHJ1Y3QgZXRoc3dfY29yZQkqZXRoc3c7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlCSpib25kX2RldjsKJiM0MzsJYm9vbAkJCWluX3VzZTsKJiM0MzsJdTgJCQlpZDsKJiM0MzsJc3RydWN0IGV0aHN3X3BvcnRfcHJpdgkqcHJpbWFyeTsKJiM0MzsJLyogUHJvdGVjdHMgdGhlIGxpc3Qgb2YgZmRicyBpbnN0YWxsZWQgb24gdGhpcyBMQUcgKi8KJiM0MzsJc3RydWN0IG11dGV4CQlmZGJfbG9jazsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZAlmZGJzOwomIzQzO307CiYjNDM7CiBzdHJ1Y3QgZHBhYTJfc3dpdGNoX2FjbF9lbnRyeSB7CiAJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwogCXUxNgkJCXByaW87CkBAIC0xNjMsNiAmIzQzOzE4NSw4IEBAIHN0cnVjdCBldGhzd19wb3J0X3ByaXYgewogCXN0cnVjdCBkcGFhMl9tYWMJKm1hYzsKIAkvKiBQcm90ZWN0cyBhZ2FpbnN0IGNoYW5nZXMgdG8gcG9ydF9wcml2LSZndDttYWMgKi8KIAlzdHJ1Y3QgbXV0ZXgJCW1hY19sb2NrOwomIzQzOwomIzQzOwlzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyBfX3JjdSAqbGFnOwogfTsKIAogLyogU3dpdGNoIGRhdGEgKi8KQEAgLTE5MCw2ICYjNDM7MjE0LDggQEAgc3RydWN0IGV0aHN3X2NvcmUgewogCXN0cnVjdCBkcGFhMl9zd2l0Y2hfZmRiCQkqZmRiczsKIAlzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZpbHRlcl9ibG9jayAqZmlsdGVyX2Jsb2NrczsKIAl1MTYJCQkJbWlycm9yX3BvcnQ7CiYjNDM7CiYjNDM7CXN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnCQkqbGFnczsKIH07CiAKIHN0YXRpYyBpbmxpbmUgaW50IGRwYWEyX3N3aXRjaF9nZXRfaW5kZXgoc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3LApAQCAtMjc0LDQgJiM0MzszMDAsMTggQEAgaW50IGRwYWEyX3N3aXRjaF9ibG9ja19vZmZsb2FkX21pcnJvcihzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZpbHRlcl9ibG9jayAqYmxvY2ssCiAKIGludCBkcGFhMl9zd2l0Y2hfYmxvY2tfdW5vZmZsb2FkX21pcnJvcihzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZpbHRlcl9ibG9jayAqYmxvY2ssCiAJCQkJCXN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdik7CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sCiYjNDM7ZHBhYTJfc3dpdGNoX3BvcnRfb2ZmbG9hZHNfYnJpZGdlX3BvcnQoc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2LAomIzQzOwkJCQkgICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWcgPSByY3VfZGVyZWZlcmVuY2VfcnRubChwb3J0X3ByaXYtJmd0O2xhZyk7CiYjNDM7CiYjNDM7CWlmIChsYWcgJmFtcDsmYW1wOyBsYWctJmd0O2JvbmRfZGV2ID09IGRldikKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwlpZiAocG9ydF9wcml2LSZndDtuZXRkZXYgPT0gZGV2KQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiAjZW5kaWYJLyogX19FVEhTV19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBzdy1jbWQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LWNtZC5oCmluZGV4IDM5N2Q1NWYyYmQ5OTUwLi45YTIwNTVjNjQ5ODNjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwc3ctY21kLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwc3ctY21kLmgKQEAgLTEyLDcgJiM0MzsxMiw3IEBACiAKIC8qIERQU1cgVmVyc2lvbiAqLwogI2RlZmluZSBEUFNXX1ZFUl9NQUpPUgkJOAotI2RlZmluZSBEUFNXX1ZFUl9NSU5PUgkJOQomIzQzOyNkZWZpbmUgRFBTV19WRVJfTUlOT1IJCTEzCiAKICNkZWZpbmUgRFBTV19DTURfQkFTRV9WRVJTSU9OCTEKICNkZWZpbmUgRFBTV19DTURfVkVSU0lPTl8yCTIKQEAgLTkyLDExICYjNDM7OTIsMTQgQEAKICNkZWZpbmUgRFBTV19DTURJRF9DVFJMX0lGX1NFVF9QT09MUyAgICAgICAgRFBTV19DTURfSUQoMHgwQTEpCiAjZGVmaW5lIERQU1dfQ01ESURfQ1RSTF9JRl9FTkFCTEUgICAgICAgICAgIERQU1dfQ01EX0lEKDB4MEEyKQogI2RlZmluZSBEUFNXX0NNRElEX0NUUkxfSUZfRElTQUJMRSAgICAgICAgICBEUFNXX0NNRF9JRCgweDBBMykKJiM0MzsjZGVmaW5lIERQU1dfQ01ESURfU0VUX0xBRyAgICAgICAgICAgICAgICAgIERQU1dfQ01EX1YyKDB4MEE0KQogI2RlZmluZSBEUFNXX0NNRElEX0NUUkxfSUZfU0VUX1FVRVVFICAgICAgICBEUFNXX0NNRF9JRCgweDBBNikKIAogI2RlZmluZSBEUFNXX0NNRElEX1NFVF9FR1JFU1NfRkxPT0QgICAgICAgICBEUFNXX0NNRF9JRCgweDBBQykKICNkZWZpbmUgRFBTV19DTURJRF9JRl9TRVRfTEVBUk5JTkdfTU9ERSAgICAgRFBTV19DTURfSUQoMHgwQUQpCiAKJiM0MzsjZGVmaW5lIERQU1dfQ01ESURfSUZfU0VUX0xBR19TVEFURSAgICAgICAgIERQU1dfQ01EX0lEKDB4MEIwKQomIzQzOwogLyogTWFjcm9zIGZvciBhY2Nlc3NpbmcgY29tbWFuZCBmaWVsZHMgc21hbGxlciB0aGFuIDFieXRlICovCiAjZGVmaW5lIERQU1dfTUFTSyhmaWVsZCkgICAgICAgIFwKIAlHRU5NQVNLKERQU1dfIyNmaWVsZCMjX1NISUZUICYjNDM7IERQU1dfIyNmaWVsZCMjX1NJWkUgLSAxLCBcCkBAIC01NTIsNSAmIzQzOzU1NSwxOCBAQCBzdHJ1Y3QgZHBzd19jbWRfaWZfcmVmbGVjdGlvbiB7CiAJLyogb25seSAyIGJpdHMgZnJvbSB0aGUgTFNCICovCiAJdTggZmlsdGVyOwogfTsKJiM0MzsKJiM0MztzdHJ1Y3QgZHBzd19jbWRfbGFnIHsKJiM0MzsJdTggZ3JvdXBfaWQ7CiYjNDM7CXU4IG51bV9pZnM7CiYjNDM7CXU4IHBhZFs2XTsKJiM0MzsJdTggaWZfaWRbRFBTV19NQVhfTEFHX0lGU107CiYjNDM7CXU4IHBoYXNlOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGRwc3dfY21kX2lmX3NldF9sYWdfc3RhdGUgewomIzQzOwlfX2xlMTYgaWZfaWQ7CiYjNDM7CXU4IHR4X2VuYWJsZWQ7CiYjNDM7fTsKICNwcmFnbWEgcGFjayhwb3ApCiAjZW5kaWYgLyogX19GU0xfRFBTV19DTURfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwc3cuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LmMKaW5kZXggYWI5MjFkNzVkZWIyZTguLmY3NWNiZGNlNDJiYTJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBzdy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LmMKQEAgLTE2NTksMyAmIzQzOzE2NTksNjMgQEAgaW50IGRwc3dfaWZfcmVtb3ZlX3JlZmxlY3Rpb24oc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHUzMiBjbWRfZmxhZ3MsIHUxNiB0b2tlbiwKIAogCXJldHVybiBtY19zZW5kX2NvbW1hbmQobWNfaW8sICZhbXA7Y21kKTsKIH0KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBkcHN3X2xhZ19zZXQoKSAtIFNldCBMQUcgY29uZmlndXJhdGlvbgomIzQzOyAqIEBtY19pbzoJUG9pbnRlciB0byBNQyBwb3J0YWwmIzM5O3MgSS9PIG9iamVjdAomIzQzOyAqIEBjbWRfZmxhZ3M6CUNvbW1hbmQgZmxhZ3M7IG9uZSBvciBtb3JlIG9mICYjMzk7TUNfQ01EX0ZMQUdfJiMzOTsKJiM0MzsgKiBAdG9rZW46CVRva2VuIG9mIERQU1cgb2JqZWN0CiYjNDM7ICogQGNmZzoJcG9pbnRlciB0byBMQUcgY29uZmlndXJhdGlvbgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAgICYjMzk7MCYjMzk7IG9uIFN1Y2Nlc3M7IEVycm9yIGNvZGUgb3RoZXJ3aXNlLgomIzQzOyAqLwomIzQzO2ludCBkcHN3X2xhZ19zZXQoc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHUzMiBjbWRfZmxhZ3MsIHUxNiB0b2tlbiwKJiM0MzsJCSBjb25zdCBzdHJ1Y3QgZHBzd19sYWdfY2ZnICpjZmcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZnNsX21jX2NvbW1hbmQgY21kID0geyAwIH07CiYjNDM7CXN0cnVjdCBkcHN3X2NtZF9sYWcgKmNtZF9wYXJhbXM7CiYjNDM7CWludCBpID0gMDsKJiM0MzsKJiM0MzsJY21kLmhlYWRlciA9IG1jX2VuY29kZV9jbWRfaGVhZGVyKERQU1dfQ01ESURfU0VUX0xBRywgY21kX2ZsYWdzLCB0b2tlbik7CiYjNDM7CiYjNDM7CWlmIChjZmctJmd0O251bV9pZnMgJmd0OyBEUFNXX01BWF9MQUdfSUZTKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwljbWRfcGFyYW1zID0gKHN0cnVjdCBkcHN3X2NtZF9sYWcgKiljbWQucGFyYW1zOwomIzQzOwljbWRfcGFyYW1zLSZndDtncm91cF9pZCA9IGNmZy0mZ3Q7Z3JvdXBfaWQ7CiYjNDM7CWNtZF9wYXJhbXMtJmd0O251bV9pZnMgPSBjZmctJmd0O251bV9pZnM7CiYjNDM7CWNtZF9wYXJhbXMtJmd0O3BoYXNlID0gY2ZnLSZndDtwaGFzZTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGNmZy0mZ3Q7bnVtX2lmczsgaSYjNDM7JiM0MzspCiYjNDM7CQljbWRfcGFyYW1zLSZndDtpZl9pZFtpXSA9IGNmZy0mZ3Q7aWZfaWRbaV07CiYjNDM7CiYjNDM7CXJldHVybiBtY19zZW5kX2NvbW1hbmQobWNfaW8sICZhbXA7Y21kKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZHBzd19pZl9zZXRfbGFnX3N0YXRlKCkgLSBDaGFuZ2UgcGVyIHBvcnQgTEFHIHN0YXRlCiYjNDM7ICogQG1jX2lvOiAgICAgIFBvaW50ZXIgdG8gTUMgcG9ydGFsJiMzOTtzIEkvTyBvYmplY3QKJiM0MzsgKiBAY21kX2ZsYWdzOiAgQ29tbWFuZCBmbGFnczsgb25lIG9yIG1vcmUgb2YgJiMzOTtNQ19DTURfRkxBR18mIzM5OwomIzQzOyAqIEB0b2tlbjogICAgICBUb2tlbiBvZiBEUFNXIG9iamVjdAomIzQzOyAqIEBpZl9pZDogICAgICBJRCBvZiB0aGUgc3dpdGNoIGludGVyZmFjZQomIzQzOyAqIEB0eF9lbmFibGVkOiBWYWx1ZSBvZiB0aGUgcGVyIHBvcnQgTEFHIHN0YXRlCiYjNDM7ICogICAgIC0gMCBpZiB0aGUgaW50ZXJmYWNlIHdpbGwgbm90IGJlIGFjdGl2ZSBhcyBwYXJ0IG9mIHRoZSBMQUcgZ3JvdXAKJiM0MzsgKiAgICAgLSAxIGlmIHRoZSBpbnRlcmZhY2Ugd2lsbCBiZSBhY3RpdmUgaW4gdGhlIExBRyBncm91cAomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAgICYjMzk7MCYjMzk7IG9uIFN1Y2Nlc3M7IEVycm9yIGNvZGUgb3RoZXJ3aXNlLgomIzQzOyAqLwomIzQzO2ludCBkcHN3X2lmX3NldF9sYWdfc3RhdGUoc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHUzMiBjbWRfZmxhZ3MsIHUxNiB0b2tlbiwKJiM0MzsJCQkgIHUxNiBpZl9pZCwgdTggdHhfZW5hYmxlZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkcHN3X2NtZF9pZl9zZXRfbGFnX3N0YXRlICpjbWRfcGFyYW1zOwomIzQzOwlzdHJ1Y3QgZnNsX21jX2NvbW1hbmQgY21kID0geyAwIH07CiYjNDM7CiYjNDM7CWNtZC5oZWFkZXIgPSBtY19lbmNvZGVfY21kX2hlYWRlcihEUFNXX0NNRElEX0lGX1NFVF9MQUdfU1RBVEUsCiYjNDM7CQkJCQkgIGNtZF9mbGFncywgdG9rZW4pOwomIzQzOwomIzQzOwljbWRfcGFyYW1zID0gKHN0cnVjdCBkcHN3X2NtZF9pZl9zZXRfbGFnX3N0YXRlICopY21kLnBhcmFtczsKJiM0MzsJY21kX3BhcmFtcy0mZ3Q7aWZfaWQgPSBjcHVfdG9fbGUxNihpZl9pZCk7CiYjNDM7CWNtZF9wYXJhbXMtJmd0O3R4X2VuYWJsZWQgPSB0eF9lbmFibGVkOwomIzQzOwomIzQzOwlyZXR1cm4gbWNfc2VuZF9jb21tYW5kKG1jX2lvLCAmYW1wO2NtZCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwc3cuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LmgKaW5kZXggYjkwYmQzNjNmNDdhMTkuLjg5ZjAyNjdkZThlOWJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBzdy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LmgKQEAgLTIwLDYgJiM0MzsyMCw4IEBAIHN0cnVjdCBmc2xfbWNfaW87CiAKICNkZWZpbmUgRFBTV19NQVhfSUYJCTY0CiAKJiM0MzsjZGVmaW5lIERQU1dfTUFYX0xBR19JRlMJOAomIzQzOwogaW50IGRwc3dfb3BlbihzdHJ1Y3QgZnNsX21jX2lvICptY19pbywgdTMyIGNtZF9mbGFncywgaW50IGRwc3dfaWQsIHUxNiAqdG9rZW4pOwogCiBpbnQgZHBzd19jbG9zZShzdHJ1Y3QgZnNsX21jX2lvICptY19pbywgdTMyIGNtZF9mbGFncywgdTE2IHRva2VuKTsKQEAgLTc4OCw0ICYjNDM7NzkwLDMyIEBAIGludCBkcHN3X2lmX2FkZF9yZWZsZWN0aW9uKHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLCB1MzIgY21kX2ZsYWdzLCB1MTYgdG9rZW4sCiAKIGludCBkcHN3X2lmX3JlbW92ZV9yZWZsZWN0aW9uKHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLCB1MzIgY21kX2ZsYWdzLCB1MTYgdG9rZW4sCiAJCQkgICAgICB1MTYgaWZfaWQsIGNvbnN0IHN0cnVjdCBkcHN3X3JlZmxlY3Rpb25fY2ZnICpjZmcpOwomIzQzOwomIzQzOy8qIExpbmsgQWdncmVnYXRpb24gR3JvdXAgY29uZmlndXJhdGlvbiAqLwomIzQzOwomIzQzOyNkZWZpbmUgRFBTV19MQUdfU0VUX1BIQVNFX0FQUExZIDAKJiM0MzsjZGVmaW5lIERQU1dfTEFHX1NFVF9QSEFTRV9DSEVDSyAxCiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IGRwc3dfbGFnX2NmZyAtIENvbmZpZ3VyYXRpb24gc3RydWN0dXJlIGZvciBhIExBRyBncm91cAomIzQzOyAqIEBncm91cF9pZDogTGluayBhZ2dyZWdhdGlvbiBncm91cCBJRC4gVmFsaWQgdmFsdWVzIGFyZSBpbiB0aGUKJiM0MzsgKiBbMSwgRFBTV19NQVhfTEFHX0lGU10gcmFuZ2UuCiYjNDM7ICogQG51bV9pZnM6IE51bWJlciBvZiBpbnRlcmZhY2VzIGluIHRoaXMgTEFHIGdyb3VwLCB2YWxpZCByYW5nZSBpcwomIzQzOyAqIFswLCBEUFNXX01BWF9MQUdfSUZTXS4KJiM0MzsgKiBAaWZfaWQ6IEFycmF5IGNvbnRhaW5pbmcgdGhlIGludGVyZmFjZSBJRHMgb2YgdGhlIHBvcnRzIHBhcnQgb2YgYSBMQUcgZ3JvdXAKJiM0MzsgKiBAcGhhc2U6IFVzZSBEUFNXX0xBR19TRVRfUEhBU0VfQVBQTFkgZm9yIExBRyBjb25maWd1cmF0aW9uIHByb2Nlc3Npbmcgb3IKJiM0MzsgKiBEUFNXX0xBR19TRVRfUEhBU0VfQ0hFQ0sgZm9yIExBRyBjb25maWd1cmF0aW9uIHZhbGlkYXRpb24uCiYjNDM7ICovCiYjNDM7c3RydWN0IGRwc3dfbGFnX2NmZyB7CiYjNDM7CXU4IGdyb3VwX2lkOwomIzQzOwl1OCBudW1faWZzOwomIzQzOwl1OCBpZl9pZFtEUFNXX01BWF9MQUdfSUZTXTsKJiM0MzsJdTggcGhhc2U7CiYjNDM7fTsKJiM0MzsKJiM0MztpbnQgZHBzd19sYWdfc2V0KHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLCB1MzIgY21kX2ZsYWdzLCB1MTYgdG9rZW4sCiYjNDM7CQkgY29uc3Qgc3RydWN0IGRwc3dfbGFnX2NmZyAqY2ZnKTsKJiM0MzsKJiM0MztpbnQgZHBzd19pZl9zZXRfbGFnX3N0YXRlKHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLCB1MzIgY21kX2ZsYWdzLCB1MTYgdG9rZW4sCiYjNDM7CQkJICB1MTYgaWZfaWQsIHU4IHR4X2VuYWJsZWQpOwogI2VuZGlmIC8qIF9fRlNMX0RQU1dfSCAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjE2NgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDczNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBEUEFBMiBMQUcgT2ZmbG9hZCBDb2RlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBMaW5rIEFnZ3JlZ2F0aW9uIEdyb3VwIChMQUcpIG9mZmxvYWQgc3VwcG9ydCB0byB0aGUgRnJlZXNjYWxlIERQQUEyIHN3aXRjaCBkcml2ZXIsIHdoaWNoIGlzIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guY2AuIEl0JiMzOTtzIGltcGxlbWVudGluZyBuZXcgZnVuY3Rpb25zIGxpa2UgYGRwYWEyX3N3aXRjaF9sYWdfZ2V0X3VudXNlZGAsIGBkcGFhMl9zd2l0Y2hfbGFnX2ZkYl9hZGRgLCBhbmQgbW9kaWZpY2F0aW9ucyB0byBleGlzdGluZyBvbmVzIGxpa2UgYGRwYWEyX3N3aXRjaF9wb3J0X25ldGRldmljZV9ldmVudGAgdG8gaGFuZGxlIGBORVRERVZfQ0hBTkdFVVBQRVJgIGFuZCBgTkVUREVWX0NIQU5HRUxPV0VSU1RBVEVgLiBUaGUgY29yZSBvZiB0aGUgZHJpdmVyIHNlZW1zIHRvIGJlIGludGVyYWN0aW5nIGRpcmVjdGx5IHdpdGggdGhlIGhhcmR3YXJlLCBhIEZyZWVzY2FsZSBEUEFBMiBzd2l0Y2guCgpNeSBmaXJzdCB0aG91Z2h0IGlzLCBjYW4gSSBldmVuICp0ZXN0KiB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFRoaXMgZHJpdmVyIGlzIHNwZWNpZmljIHRvIHRoZSBEUEFBMiBhcmNoaXRlY3R1cmUsIHR5cGljYWxseSBmb3VuZCBvbiBBUk02NC1iYXNlZCBOWFAgTGF5ZXJzY2FwZSBTb0NzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlIGluIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpLCB3aGljaCBhcmUgbXkgdXN1YWwgdGVzdGluZyBncm91bmRzLgoKVGhlIGBkcGFhMl9zd2l0Y2hfcHJvYmVgIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgZGV2aWNlIG1hdGNoaW5nIHRoZSBmc2wtbWMgYnVzIGlzIGRldGVjdGVkLiBOb3csIHRoZSBmc2wtbWMgYnVzIGlzIGEgTlhQLXNwZWNpZmljIGJ1cy4gSSBoYXZlIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgc29mdHdhcmUgZW11bGF0aW9uIG9mIHRoYXQgYnVzIHdpdGhpbiBRRU1VLiBVc3VhbGx5LCBJJiMzOTtkIGNoZWNrIGEgc3RhbmRhcmQgc3l6a2FsbGVyIHNldHVwLCBidXQgSSBkb3VidCBpdCBoYXMgYW55IE5YUC1zcGVjaWZpYyBlbXVsYXRpb24uCgpJJiMzOTtsbCBjaGVjayB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEFyZSBgQ09ORklHX0ZTTF9NQ19CVVNgIGFuZCBgQ09ORklHX0ZTTF9EUEFBMl9TV0lUQ0hgIGV2ZW4gZW5hYmxpbmcgYW55dGhpbmcgbWVhbmluZ2Z1bCB3aXRob3V0IHRoZSBhY3R1YWwgaGFyZHdhcmU/IFNpbmNlIHN5emthbGxlciBpc24mIzM5O3Qgc2V0IHVwIGZvciBOWFAgaGFyZHdhcmUsIHRoZSBxdWVzdGlvbiBpcywgaG93IGNhbiBJIGV2ZW4gcmVhY2ggdGhpcyBjb2RlPwoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBpbiBgZHBhYTItc3dpdGNoLmNgLiBBaCwgeWVzLCBpdCAqZGVwZW5kcyBvbiogYEZTTF9NQ19CVVNgIGFuZCBgRlNMX0RQQUEyX1NXSVRDSGAuIFNvLCBpdCBsb29rcyBsaWtlIGBkcGFhMl9zd2l0Y2hfcHJvYmVgICpyZXF1aXJlcyogdGhlIGZzbC1tYyBidXMgdG8gYmUgcHJlc2VudCB0byBydW4uIFRoZSBmc2wtbWMgYnVzIGRldmljZXMgYXJlIHR5cGljYWxseSBwb3B1bGF0ZWQgYnkgdGhlIGZpcm13YXJlIG9yIHRoZSBkZXZpY2UgdHJlZSBvbiBhbiBOWFAgU29DLgoKT2theSwgSSB0aGluayBJIGhhdmUgaXQuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGltcG9zc2libGUgdG8gcmVhY2ggdGhpcyBjb2RlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRSAqd2l0aG91dCogc3BlY2lmaWMgaGFyZHdhcmUgZW11bGF0aW9uIG9mIHRoZSBmc2wtbWMgYnVzIGFuZCBEUEFBMiBoYXJkd2FyZS4gVGhpcyB3b3VsZCBtZWFuIEkgd291bGQgaGF2ZSB0byBjcmVhdGUgY3VzdG9tIGVtdWxhdGlvbiBzcGVjaWZpYyB0byB0aGUgRFBBQTIgaGFyZHdhcmUgdG8gcmVhY2ggdGhpcyBuZXcgY29kZSwgd2hpY2ggaXMgYmV5b25kIHRoZSBzY29wZSBvZiBhIHN0YW5kYXJkIGZ1enppbmcgZWZmb3J0LgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjay4gSSYjMzk7bGwgdXNlIGBncmVwcGVyYCB0byBzZWFyY2ggdGhyb3VnaCBgZHJpdmVycy9gIGFuZCBgdG9vbHMvYCBmb3IgbWVudGlvbnMgb2YgYGZzbC1tY2Agb3IgYGRwYWEyYCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgKmFueSogbW9jayBpbXBsZW1lbnRhdGlvbiBvciBhbnkgc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGUgZGV2aWNlLCBidXQgSSBhbSBub3QgdmVyeSBob3BlZnVsLiBUaGlzIHBhdGNoIHNob3VsZCB0aGVyZWZvcmUgaGF2ZSBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmc2wtbWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2J1cy9LY29uZmlnPTI0Mj1jb25maWcgREE4WFhfTVNUUFJJXG4tLVxuZHJpdmVycy9idXMvS2NvbmZpZy0yNDktXG5kcml2ZXJzL2J1cy9LY29uZmlnOjI1MDpzb3VyY2UgXCYjMzQ7ZHJpdmVycy9idXMvZnNsLW1jL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYnVzL0tjb25maWctMjUxLXNvdXJjZSBcJiMzNDtkcml2ZXJzL2J1cy9taGkvS2NvbmZpZ1wmIzM0O1xuLS1cbmRyaXZlcnMvYnVzL01ha2VmaWxlPTExPW9iai0kKENPTkZJR19NT1hURVQpXHRcdCYjNDM7PSBtb3h0ZXQub1xuZHJpdmVycy9idXMvTWFrZWZpbGUtMTItXG5kcml2ZXJzL2J1cy9NYWtlZmlsZToxMzojIERQQUEyIGZzbC1tYyBidXNcbmRyaXZlcnMvYnVzL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19GU0xfTUNfQlVTKVx0JiM0Mzs9IGZzbC1tYy9cbmRyaXZlcnMvYnVzL01ha2VmaWxlLTE1LVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9LY29uZmlnLTItI1xuZHJpdmVycy9idXMvZnNsLW1jL0tjb25maWc6MzojIERQQUEyIGZzbC1tYyBidXNcbmRyaXZlcnMvYnVzL2ZzbC1tYy9LY29uZmlnLTQtI1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9LY29uZmlnPTg9Y29uZmlnIEZTTF9NQ19CVVNcbmRyaXZlcnMvYnVzL2ZzbC1tYy9LY29uZmlnOjk6XHRib29sIFwmIzM0O1FvcklRIERQQUEyIGZzbC1tYyBidXMgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL2J1cy9mc2wtbWMvS2NvbmZpZy0xMC1cdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IChBUkNIX0xBWUVSU0NBUEUgfHwgKENPTVBJTEVfVEVTVCBcdTAwMjZcdTAwMjYgKEFSTSB8fCBBUk02NCB8fCBYODZfTE9DQUxfQVBJQyB8fCBQUEMpKSlcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvS2NvbmZpZy0xMy1cdCAgRHJpdmVyIHRvIGVuYWJsZSB0aGUgYnVzIGluZnJhc3RydWN0dXJlIGZvciB0aGUgUW9ySVEgRFBBQTJcbmRyaXZlcnMvYnVzL2ZzbC1tYy9LY29uZmlnOjE0Olx0ICBhcmNoaXRlY3R1cmUuICBUaGUgZnNsLW1jIGJ1cyBkcml2ZXIgaGFuZGxlcyBkaXNjb3Zlcnkgb2ZcbmRyaXZlcnMvYnVzL2ZzbC1tYy9LY29uZmlnLTE1LVx0ICBEUEFBMiBvYmplY3RzICh3aGljaCBhcmUgcmVwcmVzZW50ZWQgYXMgTGludXggZGV2aWNlcykgYW5kXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL01ha2VmaWxlPTc9b2JqLSQoQ09ORklHX0ZTTF9NQ19CVVMpICYjNDM7PSBtYy1idXMtZHJpdmVyLm9cbmRyaXZlcnMvYnVzL2ZzbC1tYy9NYWtlZmlsZS04LVxuZHJpdmVycy9idXMvZnNsLW1jL01ha2VmaWxlOjk6bWMtYnVzLWRyaXZlci1vYmpzIDo9IGZzbC1tYy1idXMubyBcXFxuZHJpdmVycy9idXMvZnNsLW1jL01ha2VmaWxlLTEwLVx0XHQgICAgICBtYy1zeXMubyBcXFxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9NYWtlZmlsZS0xNS1cdFx0ICAgICAgZHByYy1kcml2ZXIubyBcXFxuZHJpdmVycy9idXMvZnNsLW1jL01ha2VmaWxlOjE2Olx0XHQgICAgICBmc2wtbWMtYWxsb2NhdG9yLm8gXFxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9NYWtlZmlsZToxNzpcdFx0ICAgICAgZnNsLW1jLW1zaS5vIFxcXG5kcml2ZXJzL2J1cy9mc2wtbWMvTWFrZWZpbGUtMTgtXHRcdCAgICAgIGRwbWNwLm8gXFxcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvTWFrZWZpbGUtMjEtIyBNQyB1c2Vyc3BhY2Ugc3VwcG9ydFxuZHJpdmVycy9idXMvZnNsLW1jL01ha2VmaWxlOjIyOm9iai0kKENPTkZJR19GU0xfTUNfVUFQSV9TVVBQT1JUKSAmIzQzOz0gZnNsLW1jLXVhcGkub1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcGJwLmMtOC1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcGJwLmM6OTojaW5jbHVkZSBcJiMzNDtmc2wtbWMtcHJpdmF0ZS5oXCYjMzQ7XG5kcml2ZXJzL2J1cy9mc2wtbWMvZHBicC5jLTEwLVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcGNvbi5jLTgtXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHBjb24uYzo5OiNpbmNsdWRlIFwmIzM0O2ZzbC1tYy1wcml2YXRlLmhcJiMzNDtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcGNvbi5jLTEwLVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcG1jcC5jLTgtXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHBtY3AuYzo5OiNpbmNsdWRlIFwmIzM0O2ZzbC1tYy1wcml2YXRlLmhcJiMzNDtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcG1jcC5jLTEwLVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTE1LVxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM6MTY6I2luY2x1ZGUgXCYjMzQ7ZnNsLW1jLXByaXZhdGUuaFwmIzM0O1xuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtMTctXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM9Njg9c3RhdGljIGludCBfX2ZzbF9tY19kZXZpY2VfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYy03OS0gKlxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM6ODA6ICogQG1jX2J1c19kZXY6IHBvaW50ZXIgdG8gdGhlIGZzbC1tYyBkZXZpY2UgdGhhdCByZXByZXNlbnRzIGEgRFBSQyBvYmplY3RcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTgxLSAqIEBvYmpfZGVzY19hcnJheTogYXJyYXkgb2Ygb2JqZWN0IGRlc2NyaXB0b3JzIGZvciBjaGlsZCBvYmplY3RzIGN1cnJlbnRseVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jPTEyMz1zdHJ1Y3QgZnNsX21jX2RldmljZSAqZnNsX21jX2RldmljZV9sb29rdXAoc3RydWN0IGZzbF9tY19vYmpfZGVzYyAqb2JqX2Rlc2MsXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtMTM2LSAqXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYzoxMzc6ICogQG1jX2RldjogcG9pbnRlciB0byB0aGUgZnNsLW1jIGRldmljZSBmb3IgYSBnaXZlbiBNQyBvYmplY3RcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTEzOC0gKiBAb2JqX2Rlc2M6IHBvaW50ZXIgdG8gdGhlIE1DIG9iamVjdCYjMzk7cyBkZXNjcmlwdG9yIGluIHRoZSBNQ1xuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtMTM5LSAqXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYzoxNDA6ICogSWYgdGhlIHBsdWdnZWQgc3RhdGUgaGFzIGNoYW5nZWQgZnJvbSB1bnBsdWdnZWQgdG8gcGx1Z2dlZCwgdGhlIGZzbC1tY1xuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtMTQxLSAqIGRldmljZSBpcyBib3VuZCB0byB0aGUgY29ycmVzcG9uZGluZyBkZXZpY2UgZHJpdmVyLlxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM6MTQyOiAqIElmIHRoZSBwbHVnZ2VkIHN0YXRlIGhhcyBjaGFuZ2VkIGZyb20gcGx1Z2dlZCB0byB1bnBsdWdnZWQsIHRoZSBmc2wtbWNcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTE0My0gKiBkZXZpY2UgaXMgdW5ib3VuZCBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIGRldmljZSBkcml2ZXIuXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM9MTY5PXN0YXRpYyB2b2lkIGZzbF9tY19vYmpfZGV2aWNlX2FkZChzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfYnVzX2Rldixcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYy0xOTItICpcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jOjE5MzogKiBAbWNfYnVzX2RldjogcG9pbnRlciB0byB0aGUgZnNsLW1jIGRldmljZSB0aGF0IHJlcHJlc2VudHMgYSBEUFJDIG9iamVjdFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtMTk0LSAqIEBvYmpfZGVzY19hcnJheTogYXJyYXkgb2YgZGV2aWNlIGRlc2NyaXB0b3JzIGZvciBjaGlsZCBkZXZpY2VzIGN1cnJlbnRseVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jPTIwMj1zdGF0aWMgdm9pZCBkcHJjX2FkZF9uZXdfZGV2aWNlcyhzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfYnVzX2Rldixcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYy0yMjgtICpcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jOjIyOTogKiBAbWNfYnVzX2RldjogcG9pbnRlciB0byB0aGUgZnNsLW1jIGRldmljZSB0aGF0IHJlcHJlc2VudHMgYSBEUFJDIG9iamVjdFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtMjMwLSAqIEBhbGxvY19pbnRlcnJ1cHRzOiBpZiB0cnVlIHRoZSBmdW5jdGlvbiBhbGxvY2F0ZXMgdGhlIGludGVycnVwdCBwb29sLFxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jPTI0NT1pbnQgZHByY19zY2FuX29iamVjdHMoc3RydWN0IGZzbF9tY19kZXZpY2UgKm1jX2J1c19kZXYsXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtMzU2LSAqXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYzozNTc6ICogQG1jX2J1c19kZXY6IHBvaW50ZXIgdG8gdGhlIGZzbC1tYyBkZXZpY2UgdGhhdCByZXByZXNlbnRzIGEgRFBSQyBvYmplY3RcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTM1OC0gKiBAYWxsb2NfaW50ZXJydXB0czogaWYgdHJ1ZSB0aGUgZnVuY3Rpb24gYWxsb2NhdGVzIHRoZSBpbnRlcnJ1cHQgcG9vbCxcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYz01NzI9c3RhdGljIGludCBkcHJjX3NldHVwX2lycShzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfZGV2KVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTYwMS0gKlxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM6NjAyOiAqIEBtY19kZXY6IFBvaW50ZXIgdG8gZnNsLW1jIGRldmljZSByZXByZXNlbnRpbmcgYSBEUFJDXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYy02MDMtICpcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYz03MTE9RVhQT1JUX1NZTUJPTF9HUEwoZHByY19zZXR1cCk7XG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtNzE1LSAqXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYzo3MTY6ICogQG1jX2RldjogUG9pbnRlciB0byBmc2wtbWMgZGV2aWNlIHJlcHJlc2VudGluZyBhIERQUkNcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTcxNy0gKlxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jPTc1OD1zdGF0aWMgdm9pZCBkcHJjX3RlYXJkb3duX2lycShzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfZGV2KVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTc3MS0gKlxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM6NzcyOiAqIEBtY19kZXY6IFBvaW50ZXIgdG8gZnNsLW1jIGRldmljZSByZXByZXNlbnRpbmcgdGhlIERQUkNcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTc3My0gKlxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jPTgxNT1FWFBPUlRfU1lNQk9MX0dQTChkcHJjX2NsZWFudXApO1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTgxOS0gKlxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM6ODIwOiAqIEBtY19kZXY6IFBvaW50ZXIgdG8gZnNsLW1jIGRldmljZSByZXByZXNlbnRpbmcgdGhlIERQUkNcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTgyMS0gKlxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLmMtOS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLmM6MTA6I2luY2x1ZGUgXCYjMzQ7ZnNsLW1jLXByaXZhdGUuaFwmIzM0O1xuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMuYy0xMS1cbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTItLypcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM6MzogKiBmc2wtbWMgb2JqZWN0IGFsbG9jYXRvciBkcml2ZXJcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtNC0gKlxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtMTItXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jOjEzOiNpbmNsdWRlIFwmIzM0O2ZzbC1tYy1wcml2YXRlLmhcJiMzNDtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtMTQtXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jPTE1PXN0YXRpYyBib29sIF9fbXVzdF9jaGVjayBmc2xfbWNfaXNfYWxsb2NhdGFibGUoc3RydWN0IGZzbF9tY19kZXZpY2UgKm1jX2Rldilcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTIzLSAqIGZzbF9tY19yZXNvdXJjZV9wb29sX2FkZF9kZXZpY2UgLSBhZGQgYWxsb2NhdGFibGUgb2JqZWN0IHRvIGEgcmVzb3VyY2VcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM6MjQ6ICogcG9vbCBvZiBhIGdpdmVuIGZzbC1tYyBidXNcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtMjUtICpcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM6MjY6ICogQG1jX2J1czogcG9pbnRlciB0byB0aGUgZnNsLW1jIGJ1c1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYy0yNy0gKiBAcG9vbF90eXBlOiBwb29sIHR5cGVcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM6Mjg6ICogQG1jX2RldjogcG9pbnRlciB0byBhbGxvY2F0YWJsZSBmc2wtbWMgZGV2aWNlXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTI5LSAqL1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYz0zMD1zdGF0aWMgaW50IF9fbXVzdF9jaGVjayBmc2xfbWNfcmVzb3VyY2VfcG9vbF9hZGRfZGV2aWNlKHN0cnVjdCBmc2xfbWNfYnVzXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYy05MS0gKlxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYzo5MjogKiBAbWNfZGV2OiBwb2ludGVyIHRvIGFsbG9jYXRhYmxlIGZzbC1tYyBkZXZpY2VcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtOTMtICpcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM6OTQ6ICogSXQgcGVybWFuZW50bHkgcmVtb3ZlcyBhbiBhbGxvY2F0YWJsZSBmc2wtbWMgZGV2aWNlIGZyb20gdGhlIHJlc291cmNlXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTk1LSAqIHBvb2wuIEl0JiMzOTtzIGFuIGVycm9yIGlmIHRoZSBkZXZpY2UgaXMgaW4gdXNlLlxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM9MjU0PUVYUE9SVF9TWU1CT0xfR1BMKGZzbF9tY19yZXNvdXJjZV9mcmVlKTtcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTI1Ni0vKipcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM6MjU3OiAqIGZzbF9tY19vYmplY3RfYWxsb2NhdGUgLSBBbGxvY2F0ZXMgYW4gZnNsLW1jIG9iamVjdCBvZiB0aGUgZ2l2ZW5cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM6MjU4OiAqIHBvb2wgdHlwZSBmcm9tIGEgZ2l2ZW4gZnNsLW1jIGJ1cyBpbnN0YW5jZVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYy0yNTktICpcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM6MjYwOiAqIEBtY19kZXY6IGZzbC1tYyBkZXZpY2Ugd2hpY2ggaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYy0yNjEtICogYWxsb2NhdGVkIG9iamVjdFxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM9MzIyPUVYUE9SVF9TWU1CT0xfR1BMKGZzbF9tY19vYmplY3RfYWxsb2NhdGUpO1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtMzI0LS8qKlxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYzozMjU6ICogZnNsX21jX29iamVjdF9mcmVlIC0gUmV0dXJucyBhbiBmc2wtbWMgb2JqZWN0IHRvIHRoZSByZXNvdXJjZVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYy0zMjYtICogcG9vbCB3aGVyZSBpdCBjYW1lIGZyb20uXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jOjMyNzogKiBAbWNfYWRldjogUG9pbnRlciB0byB0aGUgZnNsLW1jIGRldmljZVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYy0zMjgtICovXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYz0zNDM9RVhQT1JUX1NZTUJPTF9HUEwoZnNsX21jX29iamVjdF9mcmVlKTtcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTM1MS0vKlxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYzozNTI6ICogSW5pdGlhbGl6ZSB0aGUgaW50ZXJydXB0IHBvb2wgYXNzb2NpYXRlZCB3aXRoIGFuIGZzbC1tYyBidXMuXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTM1My0gKiBJdCBhbGxvY2F0ZXMgYSBibG9jayBvZiBJUlFzIGZyb20gdGhlIEdJQy1JVFMuXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYz00MTE9RVhQT1JUX1NZTUJPTF9HUEwoZnNsX21jX3BvcHVsYXRlX2lycV9wb29sKTtcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTQxMy0vKlxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYzo0MTQ6ICogVGVhcmRvd24gdGhlIGludGVycnVwdCBwb29sIGFzc29jaWF0ZWQgd2l0aCBhbiBmc2wtbWMgYnVzLlxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYy00MTUtICogSXQgZnJlZXMgdGhlIElSUXMgdGhhdCB3ZXJlIGFsbG9jYXRlZCB0byB0aGUgcG9vbCwgYmFjayB0byB0aGUgR0lDLUlUUy5cbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jPTQzOD1FWFBPUlRfU1lNQk9MX0dQTChmc2xfbWNfY2xlYW51cF9pcnFfcG9vbCk7XG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYy00NDAtLypcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM6NDQxOiAqIEFsbG9jYXRlIHRoZSBJUlFzIHJlcXVpcmVkIGJ5IGEgZ2l2ZW4gZnNsLW1jIGRldmljZS5cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtNDQyLSAqL1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM9NTA2PUVYUE9SVF9TWU1CT0xfR1BMKGZzbF9tY19hbGxvY2F0ZV9pcnFzKTtcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTUwOC0vKlxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYzo1MDk6ICogRnJlZXMgdGhlIElSUXMgdGhhdCB3ZXJlIGFsbG9jYXRlZCBmb3IgYW4gZnNsLW1jIGRldmljZS5cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtNTEwLSAqL1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM9NTYyPXN0YXRpYyBpbnQgZnNsX21jX2FsbG9jYXRvcl9wcm9iZShzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfZGV2KVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtNTg1LVx0ZGV2X2RiZyhcdTAwMjZtY19kZXYtXHUwMDNlZGV2LFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYzo1ODY6XHRcdFwmIzM0O0FsbG9jYXRhYmxlIGZzbC1tYyBkZXZpY2UgYm91bmQgdG8gZnNsX21jX2FsbG9jYXRvciBkcml2ZXJcJiMzNDspO1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYy01ODctXHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jPTU5ND1zdGF0aWMgdm9pZCBmc2xfbWNfYWxsb2NhdG9yX3JlbW92ZShzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfZGV2KVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtNjA0LVx0ZGV2X2RiZyhcdTAwMjZtY19kZXYtXHUwMDNlZGV2LFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYzo2MDU6XHRcdFwmIzM0O0FsbG9jYXRhYmxlIGZzbC1tYyBkZXZpY2UgdW5ib3VuZCBmcm9tIGZzbF9tY19hbGxvY2F0b3IgZHJpdmVyXCYjMzQ7KTtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtNjA2LX1cbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEwLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoxMTojZGVmaW5lIHByX2ZtdChmbXQpIFwmIzM0O2ZzbC1tYzogXCYjMzQ7IGZtdFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMi1cbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTI1LVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoyNjojaW5jbHVkZSBcJiMzNDtmc2wtbWMtcHJpdmF0ZS5oXCYjMzQ7XG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTI3LVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0yOC0vKlxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoyOTogKiBEZWZhdWx0IERNQSBtYXNrIGZvciBkZXZpY2VzIG9uIGEgZnNsLW1jIGJ1c1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0zMC0gKi9cbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTMzPXN0YXRpYyBzdHJ1Y3QgZnNsX21jX3ZlcnNpb24gbWNfdmVyc2lvbjtcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTM2LSAqIHN0cnVjdCBmc2xfbWMgLSBQcml2YXRlIGRhdGEgb2YgYSBcJiMzNDtmc2wscW9yaXEtbWNcJiMzNDsgcGxhdGZvcm0gZGV2aWNlXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjM3OiAqIEByb290X21jX2J1c19kZXY6IGZzbC1tYyBkZXZpY2UgcmVwcmVzZW50aW5nIHRoZSByb290IERQUkNcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMzgtICogQG51bV90cmFuc2xhdGlvbl9yYW5nZXM6IG51bWJlciBvZiBlbnRyaWVzIGluIGFkZHJfdHJhbnNsYXRpb25fcmFuZ2VzXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz04MD1zdGF0aWMgcGh5c19hZGRyX3QgbWNfcG9ydGFsX2Jhc2VfcGh5c19hZGRyO1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtODMtICogZnNsX21jX2J1c19tYXRjaCAtIGRldmljZSB0byBkcml2ZXIgbWF0Y2hpbmcgY2FsbGJhY2tcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6ODQ6ICogQGRldjogdGhlIGZzbC1tYyBkZXZpY2UgdG8gbWF0Y2ggYWdhaW5zdFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzo4NTogKiBAZHJ2OiB0aGUgZGV2aWNlIGRyaXZlciB0byBzZWFyY2ggZm9yIG1hdGNoaW5nIGZzbC1tYyBvYmplY3QgdHlwZVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy04Ni0gKiBzdHJ1Y3R1cmVzXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0xMzk9c3RhdGljIGludCBmc2xfbWNfYnVzX3VldmVudChjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudilcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTE0Mi1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTQzOlx0aWYgKGFkZF91ZXZlbnRfdmFyKGVudiwgXCYjMzQ7TU9EQUxJQVM9ZnNsLW1jOnYlMDhYZCVzXCYjMzQ7LFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xNDQtXHRcdFx0ICAgbWNfZGV2LVx1MDAzZW9ial9kZXNjLnZlbmRvcixcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTIxND1zdGF0aWMgc3NpemVfdCBtb2RhbGlhc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0yMTgtXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjIxOTpcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7ZnNsLW1jOnYlMDhYZCVzXFxuXCYjMzQ7LCBtY19kZXYtXHUwMDNlb2JqX2Rlc2MudmVuZG9yLFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0yMjAtXHRcdFx0bWNfZGV2LVx1MDAzZW9ial9kZXNjLnR5cGUpO1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9MzI2PWNvbnN0IHN0cnVjdCBidXNfdHlwZSBmc2xfbWNfYnVzX3R5cGUgPSB7XG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjMyNzpcdC5uYW1lID0gXCYjMzQ7ZnNsLW1jXCYjMzQ7LFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0zMjgtXHQuZHJpdmVyX292ZXJyaWRlID0gdHJ1ZSxcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTQ5OT1zdGF0aWMgaW50IG1jX2dldF92ZXJzaW9uKHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLFxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtNTI4LSAqXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjUyOTogKiBSZXR1cm46XHRtYyB2ZXJzaW9uIHdoZW4gY2FsbGVkIGFmdGVyIGZzbC1tYy1idXMgcHJvYmU7IE5VTEwgb3RoZXJ3aXNlLlxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy01MzAtICovXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz02MzI9c3RhdGljIGludCBmc2xfbWNfZGV2aWNlX2dldF9tbWlvX3JlZ2lvbnMoc3RydWN0IGZzbF9tY19kZXZpY2UgKm1jX2Rldixcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTcxMC1cdFx0cmVnaW9uc1tpXS5lbmQgPSByZWdpb25zW2ldLnN0YXJ0ICYjNDM7IHJlZ2lvbl9kZXNjLnNpemUgLSAxO1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzo3MTE6XHRcdHJlZ2lvbnNbaV0ubmFtZSA9IFwmIzM0O2ZzbC1tYyBvYmplY3QgTU1JTyByZWdpb25cJiMzNDs7XG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTcxMi1cdFx0cmVnaW9uc1tpXS5mbGFncyA9IHJlZ2lvbl9kZXNjLmZsYWdzIFx1MDAyNiBJT1JFU09VUkNFX0JJVFM7XG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz03Mzc9c3RhdGljIHZvaWQgZnNsX21jX2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTc0OS0vKlxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzo3NTA6ICogQWRkIGEgbmV3bHkgZGlzY292ZXJlZCBmc2wtbWMgZGV2aWNlIHRvIGJlIHZpc2libGUgaW4gTGludXhcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtNzUxLSAqL1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9ODgyPXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZnNsX21jX25iO1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtODg0LS8qKlxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzo4ODU6ICogZnNsX21jX2RldmljZV9yZW1vdmUgLSBSZW1vdmUgYW4gZnNsLW1jIGRldmljZSBmcm9tIGJlaW5nIHZpc2libGUgdG9cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtODg2LSAqIExpbnV4XG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTg4Ny0gKlxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzo4ODg6ICogQG1jX2RldjogUG9pbnRlciB0byBhbiBmc2wtbWMgZGV2aWNlXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTg4OS0gKi9cbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTkwMD1zdHJ1Y3QgZnNsX21jX2RldmljZSAqZnNsX21jX2dldF9lbmRwb2ludChzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfZGV2LFxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtOTM2LVx0ICogaW50ZXJyb2dhdGluZyB0aGUgZmlybXdhcmUuIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiB0aGUgZGV2aWNlIHdhcyBub3RcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6OTM3Olx0ICogeWV0IGRpc2NvdmVyZWQgYnkgdGhlIGZzbC1tYyBidXMsIHRodXMgdGhlIGxvb2t1cCByZXR1cm5lZCBOVUxMLlxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy05MzgtXHQgKiBGb3JjZSBhIHJlc2NhbiBvZiB0aGUgZGV2aWNlcyBpbiB0aGlzIGNvbnRhaW5lciBhbmQgcmV0cnkgdGhlIGxvb2t1cC5cbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTEwMDU9c3RhdGljIGludCBmc2xfbWNfZmlybXdhcmVfY2hlY2soc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEwMTMtXHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjEwMTQ6XHRcdFx0XCYjMzQ7ZnNsLW1jOiBEUEwgcHJvY2Vzc2luZyB3YXMgbm90IHN0YXJ0ZWQsIERQQUEyIHdpbGwgbm90IHdvcmshXFxuXCYjMzQ7KTtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTAxNS1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTAyMC1cdFx0ZGV2X2RiZyhcdTAwMjZwZGV2LVx1MDAzZWRldixcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTAyMTpcdFx0XHRcJiMzNDtmc2wtbWM6IERQTCBwcm9jZXNzaW5nIGluIHByb2dyZXNzLCBkZWZlciBwcm9iZVxcblwmIzM0Oyk7XG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEwMjItXHRcdHJldHVybiAtRVBST0JFX0RFRkVSO1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTAyNy1cdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldixcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTAyODpcdFx0XHRcJiMzNDtmc2wtbWM6IE1DIGJvb3QgY29tcGxldGVkIHdpdGggZXJyb3IgMHgleFxcblwmIzM0OywgbWNzKTtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTAyOS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1tc2kuYy0xNS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtbXNpLmM6MTY6I2luY2x1ZGUgXCYjMzQ7ZnNsLW1jLXByaXZhdGUuaFwmIzM0O1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1tc2kuYy0xNy1cbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLXByaXZhdGUuaD01ODI9c3RydWN0IGZzbF9tY191YXBpIHtcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLXByaXZhdGUuaC01OTEtICogc3RydWN0IGZzbF9tY19idXMgLSBsb2dpY2FsIGJ1cyB0aGF0IGNvcnJlc3BvbmRzIHRvIGEgcGh5c2ljYWwgRFBSQ1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1wcml2YXRlLmg6NTkyOiAqIEBtY19kZXY6IGZzbC1tYyBkZXZpY2UgZm9yIHRoZSBidXMgZGV2aWNlIGl0c2VsZi5cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtcHJpdmF0ZS5oLTU5My0gKiBAcmVzb3VyY2VfcG9vbHM6IGFycmF5IG9mIHJlc291cmNlIHBvb2xzIChvbmUgcG9vbCBwZXIgcmVzb3VyY2UgdHlwZSlcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLXVhcGkuYy0xMy1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtdWFwaS5jOjE0OiNpbmNsdWRlIFwmIzM0O2ZzbC1tYy1wcml2YXRlLmhcJiMzNDtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtdWFwaS5jLTE1LVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9tYy1pby5jLTktXG5kcml2ZXJzL2J1cy9mc2wtbWMvbWMtaW8uYzoxMDojaW5jbHVkZSBcJiMzNDtmc2wtbWMtcHJpdmF0ZS5oXCYjMzQ7XG5kcml2ZXJzL2J1cy9mc2wtbWMvbWMtaW8uYy0xMS1cbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvbWMtc3lzLmMtMTYtXG5kcml2ZXJzL2J1cy9mc2wtbWMvbWMtc3lzLmM6MTc6I2luY2x1ZGUgXCYjMzQ7ZnNsLW1jLXByaXZhdGUuaFwmIzM0O1xuZHJpdmVycy9idXMvZnNsLW1jL21jLXN5cy5jLTE4LVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9vYmotYXBpLmMtOC1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9vYmotYXBpLmM6OTojaW5jbHVkZSBcJiMzNDtmc2wtbWMtcHJpdmF0ZS5oXCYjMzQ7XG5kcml2ZXJzL2J1cy9mc2wtbWMvb2JqLWFwaS5jLTEwLVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NhYW0vS2NvbmZpZz0xNzg9Y29uZmlnIENSWVBUT19ERVZfRlNMX0RQQUEyX0NBQU1cbi0tXG5kcml2ZXJzL2NyeXB0by9jYWFtL0tjb25maWctMTkzLVx0ICBJdCBoYW5kbGVzIERQU0VDSSBEUEFBMiBvYmplY3RzIHRoYXQgc2l0IG9uIHRoZSBNYW5hZ2VtZW50IENvbXBsZXhcbmRyaXZlcnMvY3J5cHRvL2NhYW0vS2NvbmZpZzoxOTQ6XHQgIChNQykgZnNsLW1jIGJ1cy5cbmRyaXZlcnMvY3J5cHRvL2NhYW0vS2NvbmZpZy0xOTUtXG4tLVxuZHJpdmVycy9kbWEvZnNsLWRwYWEyLXFkbWEvZHBhYTItcWRtYS5jPTE1Mj1kcGFhMl9xZG1hX3BvcHVsYXRlX2ZkKHUzMiBmb3JtYXQsIHN0cnVjdCBkcGFhMl9xZG1hX2NvbXAgKmRwYWEyX2NvbXApXG4tLVxuZHJpdmVycy9kbWEvZnNsLWRwYWEyLXFkbWEvZHBhYTItcWRtYS5jLTE2My1cdCAqIEJ5cGFzcyBtZW1vcnkgdHJhbnNsYXRpb24sIEZyYW1lIGxpc3QgZm9ybWF0LCBzaG9ydCBsZW5ndGggZGlzYWJsZVxuZHJpdmVycy9kbWEvZnNsLWRwYWEyLXFkbWEvZHBhYTItcWRtYS5jOjE2NDpcdCAqIHdlIG5lZWQgdG8gZGlzYWJsZSBCTVQgaWYgZnNsLW1jIHVzZSBpb3ZhIGFkZHJcbmRyaXZlcnMvZG1hL2ZzbC1kcGFhMi1xZG1hL2RwYWEyLXFkbWEuYy0xNjUtXHQgKi9cbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11LmM9MTY4NT1FWFBPUlRfU1lNQk9MX0dQTChwY2lfZGV2aWNlX2dyb3VwKTtcbmRyaXZlcnMvaW9tbXUvaW9tbXUuYy0xNjg2LVxuZHJpdmVycy9pb21tdS9pb21tdS5jOjE2ODc6LyogR2V0IHRoZSBJT01NVSBncm91cCBmb3IgZGV2aWNlIG9uIGZzbC1tYyBidXMgKi9cbmRyaXZlcnMvaW9tbXUvaW9tbXUuYy0xNjg4LXN0cnVjdCBpb21tdV9ncm91cCAqZnNsX21jX2RldmljZV9ncm91cChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9zb2MvZnNsL2RwaW8vTWFrZWZpbGUtNS1cbmRyaXZlcnMvc29jL2ZzbC9kcGlvL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0ZTTF9NQ19EUElPKSAmIzQzOz0gZnNsLW1jLWRwaW8ub1xuZHJpdmVycy9zb2MvZnNsL2RwaW8vTWFrZWZpbGUtNy1cbmRyaXZlcnMvc29jL2ZzbC9kcGlvL01ha2VmaWxlOjg6ZnNsLW1jLWRwaW8tb2JqcyA6PSBkcGlvLm8gcWJtYW4tcG9ydGFsLm8gZHBpby1zZXJ2aWNlLm8gZHBpby1kcml2ZXIub1xuLS1cbmRyaXZlcnMvc29jL2ZzbC9kcGlvL2RwaW8tc2VydmljZS5jPTIyNj1pcnFyZXR1cm5fdCBkcGFhMl9pb19pcnEoc3RydWN0IGRwYWEyX2lvICpvYmopXG4tLVxuZHJpdmVycy9zb2MvZnNsL2RwaW8vZHBpby1zZXJ2aWNlLmMtMjQ5LVx0XHR9IGVsc2Uge1xuZHJpdmVycy9zb2MvZnNsL2RwaW8vZHBpby1zZXJ2aWNlLmM6MjUwOlx0XHRcdHByX2NyaXQoXCYjMzQ7ZnNsLW1jLWRwaW86IFVucmVjb2duaXNlZC9pZ25vcmVkIERRUlIgZW50cnlcXG5cJiMzNDspO1xuZHJpdmVycy9zb2MvZnNsL2RwaW8vZHBpby1zZXJ2aWNlLmMtMjUxLVx0XHR9XG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWc9OTU9c291cmNlIFwmIzM0O2RyaXZlcnMvdmZpby9tZGV2L0tjb25maWdcJiMzNDtcbmRyaXZlcnMvdmZpby9LY29uZmlnOjk2OnNvdXJjZSBcJiMzNDtkcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvdmZpby9LY29uZmlnLTk3LXNvdXJjZSBcJiMzNDtkcml2ZXJzL3ZmaW8vY2R4L0tjb25maWdcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX1ZGSU9fTURFVikgJiM0Mzs9IG1kZXYvXG5kcml2ZXJzL3ZmaW8vTWFrZWZpbGU6MTc6b2JqLSQoQ09ORklHX1ZGSU9fRlNMX01DKSAmIzQzOz0gZnNsLW1jL1xuZHJpdmVycy92ZmlvL01ha2VmaWxlLTE4LW9iai0kKENPTkZJR19WRklPX0NEWCkgJiM0Mzs9IGNkeC9cbi0tXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWc9ND1jb25maWcgVkZJT19GU0xfTUNcbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZzo1Olx0dHJpc3RhdGUgXCYjMzQ7VkZJTyBzdXBwb3J0IGZvciBRb3JJUSBEUEFBMiBmc2wtbWMgYnVzIGRldmljZXNcJiMzNDtcbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZy02LVx0c2VsZWN0IEVWRU5URkRcbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZy03LVx0aGVscFxuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnOjg6XHQgIERyaXZlciB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIFZGSU8gUW9ySVEgRFBBQTIgZnNsLW1jXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWctOS1cdCAgKE1hbmFnZW1lbnQgQ29tcGxleCkgZGV2aWNlcy4gVGhpcyBpcyByZXF1aXJlZCB0byBwYXNzdGhyb3VnaFxuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnOjEwOlx0ICBmc2wtbWMgYnVzIGRldmljZXMgdXNpbmcgdGhlIFZGSU8gZnJhbWV3b3JrLlxuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnLTExLVxuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvTWFrZWZpbGUtMi1cbmRyaXZlcnMvdmZpby9mc2wtbWMvTWFrZWZpbGU6Mzp2ZmlvLWZzbC1tYy15IDo9IHZmaW9fZnNsX21jLm8gdmZpb19mc2xfbWNfaW50ci5vXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX1ZGSU9fRlNMX01DKSAmIzQzOz0gdmZpby1mc2wtbWMub1xuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYz00MTY9c3RhdGljIGludCB2ZmlvX2ZzbF9tY19idXNfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbi0tXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtNDM3LVx0XHRpZiAobWNfZHJ2IFx1MDAyNlx1MDAyNiBtY19kcnYgIT0gXHUwMDI2dmZpb19mc2xfbWNfZHJpdmVyKVxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jOjQzODpcdFx0XHRkZXZfd2FybihkZXYsIFwmIzM0O1ZGSU9fRlNMX01DOiBPYmplY3QgJXMgYm91bmQgdG8gZHJpdmVyICVzIHdoaWxlIERQUkMgYm91bmQgdG8gdmZpby1mc2wtbWNcXG5cJiMzNDssXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtNDM5LVx0XHRcdFx0IGRldl9uYW1lKGRldiksIG1jX2Rydi1cdTAwM2Vkcml2ZXIubmFtZSk7XG4tLVxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jPTU3NT1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyB2ZmlvX2ZzbF9tY19vcHMgPSB7XG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM6NTc2Olx0Lm5hbWVcdFx0PSBcJiMzNDt2ZmlvLWZzbC1tY1wmIzM0OyxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy01NzctXHQuaW5pdFx0XHQ9IHZmaW9fZnNsX21jX2luaXRfZGV2LFxuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYz01OTI9c3RhdGljIHN0cnVjdCBmc2xfbWNfZHJpdmVyIHZmaW9fZnNsX21jX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtNTk1LVx0LmRyaXZlclx0PSB7XG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM6NTk2Olx0XHQubmFtZVx0PSBcJiMzNDt2ZmlvLWZzbC1tY1wmIzM0OyxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy01OTctXHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDExOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNTQ5CgkJCQkJCQlvdXRwdXQ6IDE0NAoJCQkJCQkJdGhvdWdodHM6IDE2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBQYXRjaCoqCgpPa2F5LCBhZnRlciByZXZpZXdpbmcgdGhpcyBwYXRjaCwgaGVyZSYjMzk7cyBteSB0YWtlLiBUaGUgY29kZSBtb2RpZmljYXRpb24gdG91Y2hlcyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXN3aXRjaC5jYC4gUmlnaHQgYXdheSwgdGhhdCByYWlzZXMgYSBmbGFnIOKAkyBpdCYjMzk7cyBhIGRyaXZlciBmb3IgdGhlIERQQUEyIHN3aXRjaCwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGUgTlhQIFFvcklRIERQQUEyIGFyY2hpdGVjdHVyZSwgd2hpY2ggd2Uga25vdyBpcyBgQVJDSF9MQVlFUlNDQVBFYC4gVGhlIGNvcmUgaXNzdWUgaXMgdGhhdCB0aGUgYGZzbC1tY2AgYnVzLCB3aGljaCB0aGlzIGRyaXZlciBjbGVhcmx5IHJlbGllcyBvbiwgaXMgaGFyZHdhcmUtc3BlY2lmaWMuIFdlJiMzOTtyZSBub3QgdGFsa2luZyBhYm91dCBzb21ldGhpbmcgdGhhdCYjMzk7cyBlYXNpbHkgZW11bGF0ZWQgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBldmVuIHNvbWV0aGluZyB3ZSBzZWUgaW4gc3l6a2FsbGVyLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgZHJpdmVyIHJlcXVpcmVzIHRoYXQgc3BlY2lmaWMgaGFyZHdhcmUgYW5kIGl0cyBhc3NvY2lhdGVkIGJ1cyAoYGZzbC1tY2ApLCBpdCYjMzk7cyBlZmZlY3RpdmVseSB1bnJlYWNoYWJsZSBpbiB0aGUga2luZCBvZiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2UgdHlwaWNhbGx5IHVzZSBmb3IgZnV6emluZy4gVGhlIGxpa2VsaWhvb2Qgb2YgZ2VuZXJhdGluZyBhbnkgdXNlZnVsIHRlc3QgY292ZXJhZ2UgaW4gc3VjaCBhIHNldHVwIGlzIGluY3JlZGlibHkgbG93LCBib3JkZXJpbmcgb24gemVyby4KClNvLCBpbiBnb29kIGNvbnNjaWVuY2UsIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBNeSByYXRpb25hbGUgaXMgY2xlYXI6IHRoaXMgcGF0Y2ggbW9kaWZpZXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgZm9yIHRoZSBGcmVlc2NhbGUgRFBBQTIgc3dpdGNoLCBhbmQgdGhhdCBjb2RlIGlzIGluYWNjZXNzaWJsZSBpbiBvdXIgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBzZXR1cHMgd2l0aG91dCB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlIGVtdWxhdGlvbiwgd2hpY2ggaXNuJiMzOTt0IGF2YWlsYWJsZSBvciBmZWFzaWJsZSBmb3IgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBGcmVlc2NhbGUgRFBBQTIgc3dpdGNoIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXN3aXRjaC5jKSB0byBhZGQgTEFHIG9mZmxvYWQgc3VwcG9ydC4gVGhpcyBkcml2ZXIgZGVwZW5kcyBvbiB0aGUgZnNsLW1jIGJ1cyAoRlNMX01DX0JVUyksIHdoaWNoIGlzIHNwZWNpZmljIHRvIE5YUCBRb3JJUSBEUEFBMiBoYXJkd2FyZSAoQVJDSF9MQVlFUlNDQVBFKS4gVGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIGhhcmR3YXJlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgRnJlZXNjYWxlIERQQUEyIHN3aXRjaCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guYykgdG8gYWRkIExBRyBvZmZsb2FkIHN1cHBvcnQuIFRoaXMgZHJpdmVyIGRlcGVuZHMgb24gdGhlIGZzbC1tYyBidXMgKEZTTF9NQ19CVVMpLCB3aGljaCBpcyBzcGVjaWZpYyB0byBOWFAgUW9ySVEgRFBBQTIgaGFyZHdhcmUgKEFSQ0hfTEFZRVJTQ0FQRSkuIFRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBoYXJkd2FyZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjUyOjExLjE1MDI2NjI4OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMTE4NjA1ODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgRnJlZXNjYWxlIERQQUEyIHN3aXRjaCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guYykgdG8gYWRkIExBRyBvZmZsb2FkIHN1cHBvcnQuIFRoaXMgZHJpdmVyIGRlcGVuZHMgb24gdGhlIGZzbC1tYyBidXMgKEZTTF9NQ19CVVMpLCB3aGljaCBpcyBzcGVjaWZpYyB0byBOWFAgUW9ySVEgRFBBQTIgaGFyZHdhcmUgKEFSQ0hfTEFZRVJTQ0FQRSkuIFRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBoYXJkd2FyZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6NTI6MTEuMTUwMjc2MzI4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjE0MTY2OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1ZDg5NzljN2E1ZmJhM2VlNGRmMmYxNWZiYmJmMTBjNzQ4ZDE0ZTk3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVuIDI5IDExOjUyOjA5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guY1xcbmluZGV4IDg1OGJhODQ0YWM1MTY0Li44MzIwYjI2YzNmNzI2ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItc3dpdGNoLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItc3dpdGNoLmNcXG5AQCAtMjUsNiArMjUsOSBAQFxcbiBcXG4gI2RlZmluZSBERUZBVUxUX1ZMQU5fSURcXHRcXHRcXHQxXFxuIFxcbitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGRwYWEyX3N3aXRjaF9wb3J0X3N3aXRjaGRldl9uYjtcXG4rc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBkcGFhMl9zd2l0Y2hfcG9ydF9zd2l0Y2hkZXZfYmxvY2tpbmdfbmI7XFxuK1xcbiBzdGF0aWMgdTE2IGRwYWEyX3N3aXRjaF9wb3J0X2dldF9mZGJfaWQoc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2KVxcbiB7XFxuIFxcdHJldHVybiBwb3J0X3ByaXYtXFx1MDAzZWZkYi1cXHUwMDNlZmRiX2lkO1xcbkBAIC01MSw2ICs1NCwxNyBAQCBkcGFhMl9zd2l0Y2hfZmlsdGVyX2Jsb2NrX2dldF91bnVzZWQoc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3KVxcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4rc3RhdGljIHN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpcXG4rZHBhYTJfc3dpdGNoX2xhZ19nZXRfdW51c2VkKHN0cnVjdCBldGhzd19jb3JlICpldGhzdylcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBldGhzdy1cXHUwMDNlc3dfYXR0ci5udW1faWZzOyBpKyspXFxuK1xcdFxcdGlmICghZXRoc3ctXFx1MDAzZWxhZ3NbaV0uaW5fdXNlKVxcbitcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNmV0aHN3LVxcdTAwM2VsYWdzW2ldO1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4gc3RhdGljIGJvb2wgZHBhYTJfc3dpdGNoX2ZkYl9pbl91c2VfYnlfb3RoZXJzKHN0cnVjdCBldGhzd19jb3JlICpldGhzdyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGRwYWEyX3N3aXRjaF9mZGIgKmZkYixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqZXhjZXB0KVxcbkBAIC03MSw5ICs4NSw5IEBAIHN0YXRpYyBzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZkYiAqXFxuIGRwYWEyX3N3aXRjaF9mZGJfZm9yX2pvaW4oc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2LFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlICp1cHBlcl9kZXYpXFxuIHtcXG4tXFx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqb3RoZXJfcG9ydF9wcml2O1xcbi1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqb3RoZXJfZGV2O1xcbi1cXHRzdHJ1Y3QgbGlzdF9oZWFkICppdGVyO1xcbitcXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpvdGhlcl9wb3J0X3ByaXYgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqb3RoZXJfZGV2LCAqb3RoZXJfZGV2MjtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZCAqaXRlciwgKml0ZXIyO1xcbiBcXG4gXFx0LyogVGhlIGJlbG93IGNhbGwgdG8gbmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX2RldigpIGRlbWFuZHMgdGhlIFJUTkwgbG9ja1xcbiBcXHQgKiBiZWluZyBoZWxkLiBBc3NlcnQgb24gaXQgc28gdGhhdCBpdCdzIGVhc2llciB0byBjYXRjaCBuZXcgY29kZVxcbkBAIC04MiwxNyArOTYsMzIgQEAgZHBhYTJfc3dpdGNoX2ZkYl9mb3Jfam9pbihzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYsXFxuIFxcdEFTU0VSVF9SVE5MKCk7XFxuIFxcbiBcXHQvKiBJZiBwYXJ0IG9mIGEgYnJpZGdlLCB1c2UgdGhlIEZEQiBvZiB0aGUgZmlyc3QgZHBhYTIgc3dpdGNoIGludGVyZmFjZVxcbi1cXHQgKiB0byBiZSBwcmVzZW50IGluIHRoYXQgYnJpZGdlXFxuK1xcdCAqIHRvIGJlIHByZXNlbnQgaW4gdGhhdCBicmlkZ2UuIFRoZSBzZWFyY2ggZGVzY2VuZHMgb25lIGxldmVsIHRocm91Z2hcXG4rXFx0ICogYSBicmlkZ2VkIGJvbmQncyBsb3dlcnMgYXMgd2VsbC5cXG4gXFx0ICovXFxuIFxcdG5ldGRldl9mb3JfZWFjaF9sb3dlcl9kZXYodXBwZXJfZGV2LCBvdGhlcl9kZXYsIGl0ZXIpIHtcXG4tXFx0XFx0aWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2sob3RoZXJfZGV2KSlcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGlmIChuZXRpZl9pc19sYWdfbWFzdGVyKG90aGVyX2RldikpIHtcXG4rXFx0XFx0XFx0bmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX2RldihvdGhlcl9kZXYsIG90aGVyX2RldjIsIGl0ZXIyKSB7XFxuK1xcdFxcdFxcdFxcdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrKG90aGVyX2RldjIpKVxcbitcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdGlmIChvdGhlcl9kZXYgPT0gcG9ydF9wcml2LVxcdTAwM2VuZXRkZXYpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHRcXHRpZiAob3RoZXJfZGV2MiA9PSBwb3J0X3ByaXYtXFx1MDAzZW5ldGRldilcXG4rXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRvdGhlcl9wb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihvdGhlcl9kZXYpO1xcbi1cXHRcXHRyZXR1cm4gb3RoZXJfcG9ydF9wcml2LVxcdTAwM2VmZGI7XFxuK1xcdFxcdFxcdFxcdG90aGVyX3BvcnRfcHJpdiA9IG5ldGRldl9wcml2KG90aGVyX2RldjIpO1xcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhvdGhlcl9kZXYpKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdFxcdGlmIChvdGhlcl9kZXYgPT0gcG9ydF9wcml2LVxcdTAwM2VuZXRkZXYpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0XFx0b3RoZXJfcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYob3RoZXJfZGV2KTtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAob3RoZXJfcG9ydF9wcml2KVxcbitcXHRcXHRcXHRyZXR1cm4gb3RoZXJfcG9ydF9wcml2LVxcdTAwM2VmZGI7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiBwb3J0X3ByaXYtXFx1MDAzZWZkYjtcXG5AQCAtNTM3LDYgKzU2NiwxMDMgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsX21jKHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdixcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfYWRkKHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdixcXG4rXFx0XFx0XFx0XFx0ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKVxcbit7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRpZiAoaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGFkZHIpKVxcbitcXHRcXHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfYWRkX3VjKHBvcnRfcHJpdiwgYWRkcik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2FkZF9tYyhwb3J0X3ByaXYsIGFkZHIpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsKHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdixcXG4rXFx0XFx0XFx0XFx0ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKVxcbit7XFxuK1xcdGlmIChpc191bmljYXN0X2V0aGVyX2FkZHIoYWRkcikpXFxuK1xcdFxcdHJldHVybiBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsX3VjKHBvcnRfcHJpdiwgYWRkcik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cmV0dXJuIGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9kZWxfbWMocG9ydF9wcml2LCBhZGRyKTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBkcGFhMl9tYWNfYWRkciAqXFxuK2RwYWEyX3N3aXRjaF9tYWNfYWRkcl9maW5kKHN0cnVjdCBsaXN0X2hlYWQgKmFkZHJfbGlzdCxcXG4rXFx0XFx0XFx0ICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgdTE2IHZpZClcXG4re1xcbitcXHRzdHJ1Y3QgZHBhYTJfbWFjX2FkZHIgKmE7XFxuK1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGEsIGFkZHJfbGlzdCwgbGlzdClcXG4rXFx0XFx0aWYgKGV0aGVyX2FkZHJfZXF1YWwoYS1cXHUwMDNlYWRkciwgYWRkcikgXFx1MDAyNlxcdTAwMjYgYS1cXHUwMDNldmlkID09IHZpZClcXG4rXFx0XFx0XFx0cmV0dXJuIGE7XFxuK1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfbGFnX2ZkYl9hZGQoc3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZyxcXG4rXFx0XFx0XFx0XFx0ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIHUxNiB2aWQpXFxuK3tcXG4rXFx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbGFnLVxcdTAwM2VwcmltYXJ5O1xcbitcXHRzdHJ1Y3QgZHBhYTJfbWFjX2FkZHIgKmE7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2bGFnLVxcdTAwM2VmZGJfbG9jayk7XFxuK1xcbitcXHRhID0gZHBhYTJfc3dpdGNoX21hY19hZGRyX2ZpbmQoXFx1MDAyNmxhZy1cXHUwMDNlZmRicywgYWRkciwgdmlkKTtcXG4rXFx0aWYgKGEpIHtcXG4rXFx0XFx0cmVmY291bnRfaW5jKFxcdTAwMjZhLVxcdTAwM2VyZWZjb3VudCk7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRhID0ga3phbGxvYyhzaXplb2YoKmEpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFhKSB7XFxuK1xcdFxcdGVyciA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfYWRkKHBvcnRfcHJpdiwgYWRkcik7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0a2ZyZWUoYSk7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRldGhlcl9hZGRyX2NvcHkoYS1cXHUwMDNlYWRkciwgYWRkcik7XFxuK1xcdGEtXFx1MDAzZXZpZCA9IHZpZDtcXG4rXFx0cmVmY291bnRfc2V0KFxcdTAwMjZhLVxcdTAwM2VyZWZjb3VudCwgMSk7XFxuK1xcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmEtXFx1MDAzZWxpc3QsIFxcdTAwMjZsYWctXFx1MDAzZWZkYnMpO1xcbitcXG4rb3V0OlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmxhZy1cXHUwMDNlZmRiX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZHBhYTJfc3dpdGNoX2xhZ19mZGJfZGVsKHN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWcsXFxuK1xcdFxcdFxcdFxcdCAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgdTE2IHZpZClcXG4re1xcbitcXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBsYWctXFx1MDAzZXByaW1hcnk7XFxuK1xcdHN0cnVjdCBkcGFhMl9tYWNfYWRkciAqYTtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmxhZy1cXHUwMDNlZmRiX2xvY2spO1xcbitcXG4rXFx0YSA9IGRwYWEyX3N3aXRjaF9tYWNfYWRkcl9maW5kKFxcdTAwMjZsYWctXFx1MDAzZWZkYnMsIGFkZHIsIHZpZCk7XFxuK1xcdGlmICghYSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRpZiAoIXJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2YS1cXHUwMDNlcmVmY291bnQpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGxpc3RfZGVsKFxcdTAwMjZhLVxcdTAwM2VsaXN0KTtcXG4rXFx0a2ZyZWUoYSk7XFxuK1xcbitcXHRkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsKHBvcnRfcHJpdiwgYWRkcik7XFxuK1xcbitvdXQ6XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2bGFnLVxcdTAwM2VmZGJfbG9jayk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9wb3J0X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKVxcbiB7XFxuQEAgLTE0ODUsNiArMTYxMSwzMyBAQCBib29sIGRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXHRyZXR1cm4gbmV0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzID09IFxcdTAwMjZkcGFhMl9zd2l0Y2hfcG9ydF9vcHM7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIGRwYWEyX3N3aXRjaF9mb3JlaWduX2Rldl9jaGVjayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZm9yZWlnbl9kZXYpXFxuK3tcXG4rXFx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFx0c3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3ID0gcG9ydF9wcml2LVxcdTAwM2VldGhzd19kYXRhO1xcbitcXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpvdGhlcl9wb3J0O1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGlmIChuZXRpZl9pc19icmlkZ2VfbWFzdGVyKGZvcmVpZ25fZGV2KSlcXG4rXFx0XFx0aWYgKHBvcnRfcHJpdi1cXHUwMDNlZmRiLVxcdTAwM2VicmlkZ2VfZGV2ID09IGZvcmVpZ25fZGV2KVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAobmV0aWZfaXNfYnJpZGdlX3BvcnQoZm9yZWlnbl9kZXYpKSB7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBldGhzdy1cXHUwMDNlc3dfYXR0ci5udW1faWZzOyBpKyspIHtcXG4rXFx0XFx0XFx0b3RoZXJfcG9ydCA9IGV0aHN3LVxcdTAwM2Vwb3J0c1tpXTtcXG4rXFxuK1xcdFxcdFxcdGlmICghb3RoZXJfcG9ydClcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdGlmIChkcGFhMl9zd2l0Y2hfcG9ydF9vZmZsb2Fkc19icmlkZ2VfcG9ydChvdGhlcl9wb3J0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBmb3JlaWduX2RldikpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9jb25uZWN0X21hYyhzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYpXFxuIHtcXG4gXFx0c3RydWN0IGZzbF9tY19kZXZpY2UgKmRwc3dfcG9ydF9kZXYsICpkcG1hY19kZXY7XFxuQEAgLTE4NjAsNTEgKzIwMTMsMzIgQEAgaW50IGRwYWEyX3N3aXRjaF9wb3J0X3ZsYW5zX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgIHZsYW4tXFx1MDAzZWNoYW5nZWQpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2xvb2t1cF9hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBpc191YyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXFxuLXtcXG4tXFx0c3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmxpc3QgPSAoaXNfdWMpID8gXFx1MDAyNm5ldGRldi1cXHUwMDNldWMgOiBcXHUwMDI2bmV0ZGV2LVxcdTAwM2VtYztcXG4tXFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcXG4tXFxuLVxcdG5ldGlmX2FkZHJfbG9ja19iaChuZXRkZXYpO1xcbi1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGhhLCBcXHUwMDI2bGlzdC1cXHUwMDNlbGlzdCwgbGlzdCkge1xcbi1cXHRcXHRpZiAoZXRoZXJfYWRkcl9lcXVhbChoYS1cXHUwMDNlYWRkciwgYWRkcikpIHtcXG4tXFx0XFx0XFx0bmV0aWZfYWRkcl91bmxvY2tfYmgobmV0ZGV2KTtcXG4tXFx0XFx0XFx0cmV0dXJuIDE7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbi1cXHRuZXRpZl9hZGRyX3VubG9ja19iaChuZXRkZXYpO1xcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4gc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9tZGJfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmpfcG9ydF9tZGIgKm1kYilcXG4ge1xcbiBcXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbi1cXHRpbnQgZXJyO1xcbitcXHRzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqbGFnO1xcbiBcXG4tXFx0LyogQ2hlY2sgaWYgYWRkcmVzcyBpcyBhbHJlYWR5IHNldCBvbiB0aGlzIHBvcnQgKi9cXG4tXFx0aWYgKGRwYWEyX3N3aXRjaF9wb3J0X2xvb2t1cF9hZGRyZXNzKG5ldGRldiwgMCwgbWRiLVxcdTAwM2VhZGRyKSlcXG4tXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuLVxcbi1cXHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfYWRkX21jKHBvcnRfcHJpdiwgbWRiLVxcdTAwM2VhZGRyKTtcXG4tXFx0aWYgKGVycilcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4tXFxuLVxcdGVyciA9IGRldl9tY19hZGQobmV0ZGV2LCBtZGItXFx1MDAzZWFkZHIpO1xcbi1cXHRpZiAoZXJyKSB7XFxuLVxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwiZGV2X21jX2FkZCBlcnIgJWRcXFxcblxcXCIsIGVycik7XFxuLVxcdFxcdGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9kZWxfbWMocG9ydF9wcml2LCBtZGItXFx1MDAzZWFkZHIpO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gZXJyO1xcbitcXHRsYWcgPSBydG5sX2RlcmVmZXJlbmNlKHBvcnRfcHJpdi1cXHUwMDNlbGFnKTtcXG4rXFx0aWYgKGxhZylcXG4rXFx0XFx0cmV0dXJuIGRwYWEyX3N3aXRjaF9sYWdfZmRiX2FkZChsYWcsIG1kYi1cXHUwMDNlYWRkciwgbWRiLVxcdTAwM2V2aWQpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJldHVybiBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfYWRkKHBvcnRfcHJpdiwgbWRiLVxcdTAwM2VhZGRyKTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9vYmpfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLVxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmogKm9iailcXG4rc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9vYmpfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGNvbnN0IHZvaWQgKmN0eCxcXG4rXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X29iaiAqb2JqLFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4ge1xcbitcXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0aWYgKGN0eCBcXHUwMDI2XFx1MDAyNiBjdHggIT0gcG9ydF9wcml2KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfb2ZmbG9hZHNfYnJpZGdlX3BvcnQocG9ydF9wcml2LCBvYmotXFx1MDAzZW9yaWdfZGV2KSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4gXFx0c3dpdGNoIChvYmotXFx1MDAzZWlkKSB7XFxuIFxcdGNhc2UgU1dJVENIREVWX09CSl9JRF9QT1JUX1ZMQU46XFxuIFxcdFxcdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X3ZsYW5zX2FkZChuZXRkZXYsXFxuQEAgLTIwMDAsMjkgKzIxMzQsMjkgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9tZGJfZGVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmpfcG9ydF9tZGIgKm1kYilcXG4ge1xcbiBcXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbi1cXHRpbnQgZXJyO1xcbi1cXG4tXFx0aWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9sb29rdXBfYWRkcmVzcyhuZXRkZXYsIDAsIG1kYi1cXHUwMDNlYWRkcikpXFxuLVxcdFxcdHJldHVybiAtRU5PRU5UO1xcbi1cXG4tXFx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2RlbF9tYyhwb3J0X3ByaXYsIG1kYi1cXHUwMDNlYWRkcik7XFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdHJldHVybiBlcnI7XFxuK1xcdHN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWc7XFxuIFxcbi1cXHRlcnIgPSBkZXZfbWNfZGVsKG5ldGRldiwgbWRiLVxcdTAwM2VhZGRyKTtcXG4tXFx0aWYgKGVycikge1xcbi1cXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcImRldl9tY19kZWwgZXJyICVkXFxcXG5cXFwiLCBlcnIpO1xcbi1cXHRcXHRyZXR1cm4gZXJyO1xcbi1cXHR9XFxuK1xcdGxhZyA9IHJ0bmxfZGVyZWZlcmVuY2UocG9ydF9wcml2LVxcdTAwM2VsYWcpO1xcbitcXHRpZiAobGFnKVxcbitcXHRcXHRkcGFhMl9zd2l0Y2hfbGFnX2ZkYl9kZWwobGFnLCBtZGItXFx1MDAzZWFkZHIsIG1kYi1cXHUwMDNldmlkKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsKHBvcnRfcHJpdiwgbWRiLVxcdTAwM2VhZGRyKTtcXG4gXFxuLVxcdHJldHVybiBlcnI7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X29ial9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9vYmpfZGVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGNvbnN0IHZvaWQgKmN0eCxcXG4gXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X29iaiAqb2JqKVxcbiB7XFxuK1xcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuIFxcdGludCBlcnI7XFxuIFxcbitcXHRpZiAoY3R4IFxcdTAwMjZcXHUwMDI2IGN0eCAhPSBwb3J0X3ByaXYpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9vZmZsb2Fkc19icmlkZ2VfcG9ydChwb3J0X3ByaXYsIG9iai1cXHUwMDNlb3JpZ19kZXYpKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbiBcXHRzd2l0Y2ggKG9iai1cXHUwMDNlaWQpIHtcXG4gXFx0Y2FzZSBTV0lUQ0hERVZfT0JKX0lEX1BPUlRfVkxBTjpcXG4gXFx0XFx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfdmxhbnNfZGVsKG5ldGRldiwgU1dJVENIREVWX09CSl9QT1JUX1ZMQU4ob2JqKSk7XFxuQEAgLTIwNDgsNiArMjE4MiwyMSBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2F0dHJfc2V0X2V2ZW50KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdHJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7XFxuIH1cXG4gXFxuK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqXFxuK2RwYWEyX3N3aXRjaF9wb3J0X3RvX2JyaWRnZV9wb3J0KHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdilcXG4re1xcbitcXHRzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqbGFnO1xcbitcXG4rXFx0aWYgKCFwb3J0X3ByaXYtXFx1MDAzZWZkYi1cXHUwMDNlYnJpZGdlX2RldilcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRsYWcgPSBydG5sX2RlcmVmZXJlbmNlKHBvcnRfcHJpdi1cXHUwMDNlbGFnKTtcXG4rXFx0aWYgKGxhZylcXG4rXFx0XFx0cmV0dXJuIGxhZy1cXHUwMDNlYm9uZF9kZXY7XFxuK1xcbitcXHRyZXR1cm4gcG9ydF9wcml2LVxcdTAwM2VuZXRkZXY7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfYnJpZGdlX2pvaW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRfZGV2aWNlICp1cHBlcl9kZXYsXFxuIFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuQEAgLTIwNTUsNiArMjIwNCw3IEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfYnJpZGdlX2pvaW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gXFx0c3RydWN0IGRwYWEyX3N3aXRjaF9mZGIgKm9sZF9mZGIgPSBwb3J0X3ByaXYtXFx1MDAzZWZkYjtcXG4gXFx0c3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3ID0gcG9ydF9wcml2LVxcdTAwM2VldGhzd19kYXRhO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqYnJwb3J0X2RldjtcXG4gXFx0Ym9vbCBsZWFybl9lbmE7XFxuIFxcdGludCBlcnI7XFxuIFxcbkBAIC0yMDY2LDcgKzIyMTYsOCBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2JyaWRnZV9qb2luKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdGRwYWEyX3N3aXRjaF9wb3J0X3NldF9mZGIocG9ydF9wcml2LCB1cHBlcl9kZXYsIHRydWUpO1xcbiBcXG4gXFx0LyogSW5oZXJpdCB0aGUgaW5pdGlhbCBicmlkZ2UgcG9ydCBsZWFybmluZyBzdGF0ZSAqL1xcbi1cXHRsZWFybl9lbmEgPSBicl9wb3J0X2ZsYWdfaXNfc2V0KG5ldGRldiwgQlJfTEVBUk5JTkcpO1xcbitcXHRicnBvcnRfZGV2ID0gZHBhYTJfc3dpdGNoX3BvcnRfdG9fYnJpZGdlX3BvcnQocG9ydF9wcml2KTtcXG4rXFx0bGVhcm5fZW5hID0gYnJfcG9ydF9mbGFnX2lzX3NldChicnBvcnRfZGV2LCBCUl9MRUFSTklORyk7XFxuIFxcdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X3NldF9sZWFybmluZyhwb3J0X3ByaXYsIGxlYXJuX2VuYSk7XFxuIFxcdHBvcnRfcHJpdi1cXHUwMDNlbGVhcm5fZW5hID0gbGVhcm5fZW5hO1xcbiBcXG5AQCAtMjA4MCw4ICsyMjMxLDExIEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfYnJpZGdlX2pvaW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJfZWdyZXNzX2Zsb29kO1xcbiBcXG4tXFx0ZXJyID0gc3dpdGNoZGV2X2JyaWRnZV9wb3J0X29mZmxvYWQobmV0ZGV2LCBuZXRkZXYsIE5VTEwsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBOVUxMLCBOVUxMLCBmYWxzZSwgZXh0YWNrKTtcXG4rXFx0YnJwb3J0X2RldiA9IGRwYWEyX3N3aXRjaF9wb3J0X3RvX2JyaWRnZV9wb3J0KHBvcnRfcHJpdik7XFxuK1xcdGVyciA9IHN3aXRjaGRldl9icmlkZ2VfcG9ydF9vZmZsb2FkKGJycG9ydF9kZXYsIG5ldGRldiwgcG9ydF9wcml2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmRwYWEyX3N3aXRjaF9wb3J0X3N3aXRjaGRldl9uYixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZkcGFhMl9zd2l0Y2hfcG9ydF9zd2l0Y2hkZXZfYmxvY2tpbmdfbmIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBmYWxzZSwgZXh0YWNrKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJfc3dpdGNoZGV2X29mZmxvYWQ7XFxuIFxcbkBAIC0yMTE1LDcgKzIyNjksMjIgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9yZXN0b3JlX3J4dmxhbihzdHJ1Y3QgbmV0X2RldmljZSAqdmRldiwgaW50IHZpZCwgdm9cXG4gXFxuIHN0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9wb3J0X3ByZV9icmlkZ2VfbGVhdmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4ge1xcbi1cXHRzd2l0Y2hkZXZfYnJpZGdlX3BvcnRfdW5vZmZsb2FkKG5ldGRldiwgTlVMTCwgTlVMTCwgTlVMTCk7XFxuK1xcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdHN0cnVjdCBldGhzd19jb3JlICpldGhzdyA9IHBvcnRfcHJpdi1cXHUwMDNlZXRoc3dfZGF0YTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmJycG9ydF9kZXY7XFxuK1xcbitcXHRicnBvcnRfZGV2ID0gZHBhYTJfc3dpdGNoX3BvcnRfdG9fYnJpZGdlX3BvcnQocG9ydF9wcml2KTtcXG4rXFx0aWYgKCFicnBvcnRfZGV2KVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzd2l0Y2hkZXZfYnJpZGdlX3BvcnRfdW5vZmZsb2FkKGJycG9ydF9kZXYsIHBvcnRfcHJpdixcXG4rXFx0XFx0XFx0XFx0XFx0XFx1MDAyNmRwYWEyX3N3aXRjaF9wb3J0X3N3aXRjaGRldl9uYixcXG4rXFx0XFx0XFx0XFx0XFx0XFx1MDAyNmRwYWEyX3N3aXRjaF9wb3J0X3N3aXRjaGRldl9ibG9ja2luZ19uYik7XFxuK1xcbitcXHQvKiBNYWtlIHN1cmUgdGhhdCBhbnkgRkRCIGFkZC9kZWwgb3BlcmF0aW9ucyBhcmUgY29tcGxldGVkIGJlZm9yZSB0aGVcXG4rXFx0ICogYnJpZGdlIGxheW91dCBjaGFuZ2VzXFxuK1xcdCAqL1xcbitcXHRmbHVzaF93b3JrcXVldWUoZXRoc3ctXFx1MDAzZXdvcmtxdWV1ZSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfYnJpZGdlX2xlYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuQEAgLTIxNzcsMzAgKzIzNDYsNTMgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9icmlkZ2VfbGVhdmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0XFx0XFx0XFx0XFx0ICBmYWxzZSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnRcXG4rZHBhYTJfc3dpdGNoX2hhdmVfdmxhbl91cHBlcihzdHJ1Y3QgbmV0X2RldmljZSAqdXBwZXJfZGV2LFxcbitcXHRcXHRcXHQgICAgIF9fYWx3YXlzX3VudXNlZCBzdHJ1Y3QgbmV0ZGV2X25lc3RlZF9wcml2ICpwcml2KVxcbit7XFxuK1xcdHJldHVybiBpc192bGFuX2Rldih1cHBlcl9kZXYpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wcmV2ZW50X2JyaWRnaW5nX3dpdGhfODAyMXFfdXBwZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4ge1xcbi1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqdXBwZXJfZGV2O1xcbi1cXHRzdHJ1Y3QgbGlzdF9oZWFkICppdGVyO1xcbitcXHRzdHJ1Y3QgbmV0ZGV2X25lc3RlZF9wcml2IHByaXYgPSB7fTtcXG4gXFxuIFxcdC8qIFJDVSByZWFkIGxvY2sgbm90IG5lY2Vzc2FyeSBiZWNhdXNlIHdlIGhhdmUgd3JpdGUtc2lkZSBwcm90ZWN0aW9uXFxuLVxcdCAqIChydG5sX211dGV4KSwgaG93ZXZlciBhIG5vbi1yY3UgaXRlcmF0b3IgZG9lcyBub3QgZXhpc3QuXFxuK1xcdCAqIChydG5sX211dGV4KSwgaG93ZXZlciBhIG5vbi1yY3UgaXRlcmF0b3IgZG9lcyBub3QgZXhpc3QuIFdhbGsgdGhlXFxuK1xcdCAqIGVudGlyZSB1cHBlciBjaGFpbiBzbyB0aGF0IGEgVkxBTiBkZXZpY2Ugc3RhY2tlZCBvbiBhIGludGVybWVkaWF0ZVxcbitcXHQgKiBib25kIGlzIGNhdWdodCB0b28uXFxuIFxcdCAqL1xcbi1cXHRuZXRkZXZfZm9yX2VhY2hfdXBwZXJfZGV2X3JjdShuZXRkZXYsIHVwcGVyX2RldiwgaXRlcilcXG4tXFx0XFx0aWYgKGlzX3ZsYW5fZGV2KHVwcGVyX2RldikpXFxuLVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0aWYgKG5ldGRldl93YWxrX2FsbF91cHBlcl9kZXZfcmN1KG5ldGRldiwgZHBhYTJfc3dpdGNoX2hhdmVfdmxhbl91cHBlcixcXG4rXFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2cHJpdikpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9jaGVja19kcHN3X2luc3RhbmNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0ZGV2X25lc3RlZF9wcml2ICpwcml2KVxcbit7XFxuK1xcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IChzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICopcHJpdi1cXHUwMDNlZGF0YTtcXG4rXFx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqb3RoZXJfcHJpdiA9IG5ldGRldl9wcml2KGRldik7XFxuK1xcbitcXHRpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhkZXYpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChvdGhlcl9wcml2LVxcdTAwM2VldGhzd19kYXRhID09IHBvcnRfcHJpdi1cXHUwMDNlZXRoc3dfZGF0YSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4gMTtcXG4rfVxcbitcXG4gc3RhdGljIGludFxcbiBkcGFhMl9zd2l0Y2hfcHJlY2hhbmdldXBwZXJfc2FuaXR5X2NoZWNrcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlICp1cHBlcl9kZXYsXFxuIFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuIFxcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuLVxcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKm90aGVyX3BvcnRfcHJpdjtcXG4tXFx0c3RydWN0IG5ldF9kZXZpY2UgKm90aGVyX2RldjtcXG4tXFx0c3RydWN0IGxpc3RfaGVhZCAqaXRlcjtcXG4rXFx0c3RydWN0IG5ldGRldl9uZXN0ZWRfcHJpdiBkYXRhID0ge1xcbitcXHRcXHQuZGF0YSA9ICh2b2lkICopcG9ydF9wcml2LFxcbitcXHR9O1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0aWYgKCFicl92bGFuX2VuYWJsZWQodXBwZXJfZGV2KSkge1xcbkBAIC0yMjE1LDYgKzI0MDcsNzAgQEAgZHBhYTJfc3dpdGNoX3ByZWNoYW5nZXVwcGVyX3Nhbml0eV9jaGVja3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbiBcXG4rXFx0ZXJyID0gbmV0ZGV2X3dhbGtfYWxsX2xvd2VyX2Rldih1cHBlcl9kZXYsXFxuK1xcdFxcdFxcdFxcdFxcdGRwYWEyX3N3aXRjaF9jaGVja19kcHN3X2luc3RhbmNlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHUwMDI2ZGF0YSk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIkludGVyZmFjZSBmcm9tIGEgZGlmZmVyZW50IERQU1cgaXMgaW4gdGhlIGJyaWRnZSBhbHJlYWR5XFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcHJlX2xhZ19qb2luKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKnVwcGVyX2RldixcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0ZGV2X2xhZ191cHBlcl9pbmZvICppbmZvLFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4re1xcbitcXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHRzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3cgPSBwb3J0X3ByaXYtXFx1MDAzZWV0aHN3X2RhdGE7XFxuK1xcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKm90aGVyX3BvcnRfcHJpdjtcXG4rXFx0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZyA9IE5VTEw7XFxuK1xcdHN0cnVjdCBkcHN3X2xhZ19jZmcgY2ZnID0gezB9O1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqb3RoZXJfZGV2O1xcbitcXHRpbnQgaSwgbnVtX2lmcyA9IDAsIGVycjtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZCAqaXRlcjtcXG4rXFxuK1xcdGlmICghKGV0aHN3LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IEVUSFNXX0ZFQVRVUkVfTEFHX09GRkxPQUQpKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJMQUcgb2ZmbG9hZCBpcyBzdXBwb3J0ZWQgb25seSBmb3IgRFBTVyBcXHUwMDNlPSB2OC4xM1xcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChpbmZvLVxcdTAwM2V0eF90eXBlICE9IE5FVERFVl9MQUdfVFhfVFlQRV9IQVNIKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJDYW4gb25seSBvZmZsb2FkIExBRyB1c2luZyBoYXNoIFRYIHR5cGVcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoaW5mby1cXHUwMDNlaGFzaF90eXBlICE9IE5FVERFVl9MQUdfSEFTSF9MMjMpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkNhbiBvbmx5IG9mZmxvYWQgTDIrTDMgVHggaGFzaFxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfaGFzX21hYyhwb3J0X3ByaXYpKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJPbmx5IHN3aXRjaCBpbnRlcmZhY2VzIGNvbm5lY3RlZCB0byBNQUNzIGNhbiBiZSB1bmRlciBhIExBR1xcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHZsYW5fdXNlc19kZXYodXBwZXJfZGV2KSkge1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICBcXFwiQ2Fubm90IGpvaW4gYSBMQUcgdXBwZXIgdGhhdCBoYXMgYSBWTEFOXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGV0aHN3LVxcdTAwM2Vzd19hdHRyLm51bV9pZnM7IGkrKykge1xcbitcXHRcXHRpZiAoIWV0aHN3LVxcdTAwM2VsYWdzW2ldLmluX3VzZSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGlmIChldGhzdy1cXHUwMDNlbGFnc1tpXS5ib25kX2RldiAhPSB1cHBlcl9kZXYpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRsYWcgPSBcXHUwMDI2ZXRoc3ctXFx1MDAzZWxhZ3NbaV07XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbiBcXHRuZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KHVwcGVyX2Rldiwgb3RoZXJfZGV2LCBpdGVyKSB7XFxuIFxcdFxcdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrKG90aGVyX2RldikpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbkBAIC0yMjIyLDkgKzI0NzgsMjQ4IEBAIGRwYWEyX3N3aXRjaF9wcmVjaGFuZ2V1cHBlcl9zYW5pdHlfY2hlY2tzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdG90aGVyX3BvcnRfcHJpdiA9IG5ldGRldl9wcml2KG90aGVyX2Rldik7XFxuIFxcdFxcdGlmIChvdGhlcl9wb3J0X3ByaXYtXFx1MDAzZWV0aHN3X2RhdGEgIT0gcG9ydF9wcml2LVxcdTAwM2VldGhzd19kYXRhKSB7XFxuIFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuLVxcdFxcdFxcdFxcdFxcdCAgIFxcXCJJbnRlcmZhY2UgZnJvbSBhIGRpZmZlcmVudCBEUFNXIGlzIGluIHRoZSBicmlkZ2UgYWxyZWFkeVxcXCIpO1xcbitcXHRcXHRcXHRcXHRcXHQgICBcXFwiSW50ZXJmYWNlIGZyb20gYSBkaWZmZXJlbnQgRFBTVyBpcyBpbiB0aGUgYm9uZCBhbHJlYWR5XFxcIik7XFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHR9XFxuK1xcbitcXHRcXHRjZmcuaWZfaWRbbnVtX2lmcysrXSA9IG90aGVyX3BvcnRfcHJpdi1cXHUwMDNlaWR4O1xcbitcXG4rXFx0XFx0aWYgKG51bV9pZnMgXFx1MDAzZT0gRFBTV19NQVhfTEFHX0lGUykge1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXFwiQ2Fubm90IGFkZCBtb3JlIHRoYW4gOCBEUEFBMiBzd2l0Y2ggcG9ydHMgdW5kZXIgdGhlIHNhbWUgYm9uZFxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRpZiAobGFnKSB7XFxuK1xcdFxcdGNmZy5ncm91cF9pZCA9IGxhZy1cXHUwMDNlaWQ7XFxuK1xcdFxcdGNmZy5pZl9pZFtudW1faWZzKytdID0gcG9ydF9wcml2LVxcdTAwM2VpZHg7XFxuK1xcdFxcdGNmZy5udW1faWZzID0gbnVtX2lmcztcXG4rXFx0XFx0Y2ZnLnBoYXNlID0gRFBTV19MQUdfU0VUX1BIQVNFX0NIRUNLO1xcbitcXG4rXFx0XFx0ZXJyID0gZHBzd19sYWdfc2V0KGV0aHN3LVxcdTAwM2VtY19pbywgMCwgZXRoc3ctXFx1MDAzZWRwc3dfaGFuZGxlLCBcXHUwMDI2Y2ZnKTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXFwiQ2Fubm90IG9mZmxvYWQgTEFHIGNvbmZpZ3VyYXRpb25cXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBkcGFhMl9zd2l0Y2hfcG9ydF9zZXRfbGFnX2dyb3VwKHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3cgPSBwb3J0X3ByaXYtXFx1MDAzZWV0aHN3X2RhdGE7XFxuK1xcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKm90aGVyX3BvcnRfcHJpdiA9IE5VTEw7XFxuK1xcdHN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWcgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqb3RoZXJfbGFnO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqb3RoZXJfZGV2O1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkICppdGVyO1xcbitcXG4rXFx0bmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX2Rldihib25kX2Rldiwgb3RoZXJfZGV2LCBpdGVyKSB7XFxuK1xcdFxcdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrKG90aGVyX2RldikpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0b3RoZXJfcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYob3RoZXJfZGV2KTtcXG4rXFx0XFx0b3RoZXJfbGFnID0gcnRubF9kZXJlZmVyZW5jZShvdGhlcl9wb3J0X3ByaXYtXFx1MDAzZWxhZyk7XFxuK1xcdFxcdGlmICghb3RoZXJfbGFnKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGlmIChvdGhlcl9sYWctXFx1MDAzZWJvbmRfZGV2ID09IGJvbmRfZGV2KSB7XFxuK1xcdFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihwb3J0X3ByaXYtXFx1MDAzZWxhZywgb3RoZXJfbGFnKTtcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFRoaXMgaXMgdGhlIGZpcnN0IGludGVyZmFjZSB0byBiZSBhZGRlZCB1bmRlciBhIGJvbmQgZGV2aWNlLiBGaW5kIGFuXFxuK1xcdCAqIHVudXNlZCBMQUcgZ3JvdXAuIE5vIG5lZWQgdG8gY2hlY2sgZm9yIE5VTEwgc2luY2UgdGhlcmUgYXJlIHRoZSBzYW1lXFxuK1xcdCAqIGFtb3VudCBvZiBEUFNXIHBvcnRzIGFzIExBRyBncm91cHMsIG1lYW5pbmcgdGhhdCBlYWNoIHBvcnQgY2FuIGhhdmVcXG4rXFx0ICogaXRzIG93biBMQUcgZ3JvdXAuXFxuK1xcdCAqL1xcbitcXHRsYWcgPSBkcGFhMl9zd2l0Y2hfbGFnX2dldF91bnVzZWQoZXRoc3cpO1xcbitcXHRsYWctXFx1MDAzZWluX3VzZSA9IHRydWU7XFxuK1xcdGxhZy1cXHUwMDNlYm9uZF9kZXYgPSBib25kX2RldjtcXG4rXFx0bGFnLVxcdTAwM2VwcmltYXJ5ID0gcG9ydF9wcml2O1xcbitcXHRyY3VfYXNzaWduX3BvaW50ZXIocG9ydF9wcml2LVxcdTAwM2VsYWcsIGxhZyk7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIGRwYWEyX3N3aXRjaF9wb3J0X2luX2xhZyhzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWc7XFxuK1xcbitcXHRpZiAoIXBvcnRfcHJpdilcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0bGFnID0gcnRubF9kZXJlZmVyZW5jZShwb3J0X3ByaXYtXFx1MDAzZWxhZyk7XFxuK1xcdHJldHVybiBsYWcgXFx1MDAyNlxcdTAwMjYgbGFnLVxcdTAwM2Vib25kX2RldiA9PSBib25kX2RldjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfc2V0X2xhZ19jZmcoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCB1OCBsYWdfaWQsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3cpXFxuK3tcXG4rXFx0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZyA9IFxcdTAwMjZldGhzdy1cXHUwMDNlbGFnc1tsYWdfaWQgLSAxXTtcXG4rXFx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcHJpbWFyeSwgKnBvcnRfcHJpdjtcXG4rXFx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqbmV3X3ByaW1hcnkgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgZHBzd19sYWdfY2ZnIGNmZyA9IHswfTtcXG4rXFx0c3RydWN0IGRwYWEyX21hY19hZGRyICphO1xcbitcXHR1OCBudW1faWZzID0gMDtcXG4rXFx0aW50IGVyciwgaTtcXG4rXFxuK1xcdGNmZy5ncm91cF9pZCA9IGxhZ19pZDtcXG4rXFxuK1xcdC8qIERldGVybWluZSB0aGUgcHJpbWFyeSBwb3J0LiBUaGUgY2FsbGVyIGNsZWFycyAtXFx1MDAzZWxhZyBvbiB0aGUgcG9ydCB0aGF0XFxuK1xcdCAqIGlzIGxlYXZpbmcsIHNvIGEgTlVMTCAtXFx1MDAzZWxhZyBvbiB0aGUgY3VycmVudCBwcmltYXJ5IG1lYW5zIGl0IGlzIHRoZVxcbitcXHQgKiBvbmUgbGVhdmluZzogZWxlY3QgdGhlIGZpcnN0IHJlbWFpbmluZyBtZW1iZXIgYXMgdGhlIG5ldyBwcmltYXJ5LlxcbitcXHQgKiBPdGhlcndpc2Uga2VlcCB0aGUgY3VycmVudCBwcmltYXJ5LlxcbitcXHQgKi9cXG4rXFx0aWYgKHJ0bmxfZGVyZWZlcmVuY2UobGFnLVxcdTAwM2VwcmltYXJ5LVxcdTAwM2VsYWcpKSB7XFxuK1xcdFxcdHByaW1hcnkgPSBsYWctXFx1MDAzZXByaW1hcnk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHByaW1hcnkgPSBOVUxMO1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZXRoc3ctXFx1MDAzZXN3X2F0dHIubnVtX2lmczsgaSsrKSB7XFxuK1xcdFxcdFxcdGlmIChkcGFhMl9zd2l0Y2hfcG9ydF9pbl9sYWcoZXRoc3ctXFx1MDAzZXBvcnRzW2ldLCBib25kX2RldikpIHtcXG4rXFx0XFx0XFx0XFx0bmV3X3ByaW1hcnkgPSBldGhzdy1cXHUwMDNlcG9ydHNbaV07XFxuK1xcdFxcdFxcdFxcdHByaW1hcnkgPSBuZXdfcHJpbWFyeTtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHQvKiBCdWlsZCB0aGUgaW50ZXJmYWNlIGxpc3QsIGFsd2F5cyBwbGFjaW5nIHRoZSBwcmltYXJ5IGZpcnN0ICovXFxuK1xcdGlmIChwcmltYXJ5KVxcbitcXHRcXHRjZmcuaWZfaWRbbnVtX2lmcysrXSA9IHByaW1hcnktXFx1MDAzZWlkeDtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGV0aHN3LVxcdTAwM2Vzd19hdHRyLm51bV9pZnM7IGkrKykge1xcbitcXHRcXHRwb3J0X3ByaXYgPSBldGhzdy1cXHUwMDNlcG9ydHNbaV07XFxuK1xcdFxcdGlmIChwb3J0X3ByaXYgPT0gcHJpbWFyeSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfaW5fbGFnKHBvcnRfcHJpdiwgYm9uZF9kZXYpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGNmZy5pZl9pZFtudW1faWZzKytdID0gcG9ydF9wcml2LVxcdTAwM2VpZHg7XFxuK1xcdH1cXG4rXFx0Y2ZnLm51bV9pZnMgPSBudW1faWZzO1xcbitcXG4rXFx0LyogTm8gbW9yZSBpbnRlcmZhY2VzIHVuZGVyIHRoaXMgTEFHIGdyb3VwLCBtYXJrIGl0IGFzIG5vdCBpbiB1c2UuIFdhaXRcXG4rXFx0ICogZm9yIGEgZ3JhY2UgcGVyaW9kIHNvIHRoYXQgYW55IHJlYWRlcnMgb2YgdGhlIGxhZyBzdHJ1Y3R1cmUgZmluaXNoZWQuXFxuK1xcdCAqL1xcbitcXHRpZiAoIW51bV9pZnMpIHtcXG4rXFx0XFx0c3luY2hyb25pemVfbmV0KCk7XFxuK1xcbitcXHRcXHRsYWctXFx1MDAzZWJvbmRfZGV2ID0gTlVMTDtcXG4rXFx0XFx0bGFnLVxcdTAwM2VwcmltYXJ5ID0gTlVMTDtcXG4rXFx0XFx0bGFnLVxcdTAwM2Vpbl91c2UgPSBmYWxzZTtcXG4rXFx0fVxcbitcXG4rXFx0LyogV2hlbiB0aGUgcHJpbWFyeSBjaGFuZ2VzLCBtaWdyYXRlIHRoZSBGREIgZW50cmllcyBmcm9tIHRoZSBvbGRcXG4rXFx0ICogcHJpbWFyeSB0byB0aGUgbmV3IG9uZTogcmVtb3ZlIHRoZW0gYmVmb3JlIHJlY29uZmlndXJpbmcgdGhlIExBRyBpblxcbitcXHQgKiBoYXJkd2FyZSBhbmQgcmUtYWRkIHRoZW0gb24gdGhlIG5ldyBwcmltYXJ5IGFmdGVyd2FyZHMuIFdlIGRvIG5vdFxcbitcXHQgKiB0b3VjaCBhbnkgcmVmY291bnRpbmcgc2luY2UgdGhlIGludGVudGlvbiBpcyB0byBjaGFuZ2UgdGhlIEhXIGVudHJ5LFxcbitcXHQgKiBub3QgdGhlIHBhcmFsbGVsIHNvZnR3YXJlIHRyYWNraW5nLlxcbitcXHQgKi9cXG4rXFx0aWYgKG5ld19wcmltYXJ5KSB7XFxuK1xcdFxcdG11dGV4X2xvY2soXFx1MDAyNmxhZy1cXHUwMDNlZmRiX2xvY2spO1xcbitcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGEsIFxcdTAwMjZsYWctXFx1MDAzZWZkYnMsIGxpc3QpXFxuK1xcdFxcdFxcdGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9kZWwobGFnLVxcdTAwM2VwcmltYXJ5LCBhLVxcdTAwM2VhZGRyKTtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsYWctXFx1MDAzZWZkYl9sb2NrKTtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gZHBzd19sYWdfc2V0KGV0aHN3LVxcdTAwM2VtY19pbywgMCwgZXRoc3ctXFx1MDAzZWRwc3dfaGFuZGxlLCBcXHUwMDI2Y2ZnKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGlmIChuZXdfcHJpbWFyeSkge1xcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZsYWctXFx1MDAzZWZkYl9sb2NrKTtcXG4rXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShhLCBcXHUwMDI2bGFnLVxcdTAwM2VmZGJzLCBsaXN0KSB7XFxuK1xcdFxcdFxcdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9hZGQobmV3X3ByaW1hcnksIGEtXFx1MDAzZWFkZHIpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRuZXRkZXZfZXJyKG5ld19wcmltYXJ5LVxcdTAwM2VuZXRkZXYsIFxcXCJVbmFibGUgdG8gbWlncmF0ZSBGREJcXFxcblxcXCIpO1xcbitcXHRcXHR9XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bGFnLVxcdTAwM2VmZGJfbG9jayk7XFxuK1xcbitcXHRcXHRzeW5jaHJvbml6ZV9uZXQoKTtcXG4rXFx0XFx0bGFnLVxcdTAwM2VwcmltYXJ5ID0gbmV3X3ByaW1hcnk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2JvbmRfam9pbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldGRldl9sYWdfdXBwZXJfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4re1xcbitcXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHRzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3cgPSBwb3J0X3ByaXYtXFx1MDAzZWV0aHN3X2RhdGE7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpicmlkZ2VfZGV2O1xcbitcXHRzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqbGFnO1xcbitcXHRpbnQgZXJyID0gMDtcXG4rXFx0dTggbGFnX2lkO1xcbitcXG4rXFx0LyogU2V0dXAgdGhlIHBvcnRfcHJpdi1cXHUwMDNlbGFnIHBvaW50ZXIgZm9yIHRoaXMgc3dpdGNoIHBvcnQgKi9cXG4rXFx0ZHBhYTJfc3dpdGNoX3BvcnRfc2V0X2xhZ19ncm91cChwb3J0X3ByaXYsIGJvbmRfZGV2KTtcXG4rXFxuK1xcdC8qIENyZWF0ZSB0aGUgTEFHIGNvbmZpZ3VyYXRpb24gYW5kIGFwcGx5IGl0IGluIE1DICovXFxuK1xcdGxhZyA9IHJ0bmxfZGVyZWZlcmVuY2UocG9ydF9wcml2LVxcdTAwM2VsYWcpO1xcbitcXHRsYWdfaWQgPSBsYWctXFx1MDAzZWlkO1xcbitcXHRlcnIgPSBkcGFhMl9zd2l0Y2hfc2V0X2xhZ19jZmcoYm9uZF9kZXYsIGxhZ19pZCwgZXRoc3cpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGVycl9sYWdfY2ZnO1xcbitcXG4rXFx0LyogSWYgdGhlIGJvbmQgZGV2aWNlIGlzIGEgc3dpdGNoIHBvcnQsIGpvaW4gdGhlIGJyaWRnZSBhcyB3ZWxsICovXFxuK1xcdGJyaWRnZV9kZXYgPSBuZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9nZXQoYm9uZF9kZXYpO1xcbitcXHRpZiAoIWJyaWRnZV9kZXYgfHwgIW5ldGlmX2lzX2JyaWRnZV9tYXN0ZXIoYnJpZGdlX2RldikpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfYnJpZGdlX2pvaW4obmV0ZGV2LCBicmlkZ2VfZGV2LCBleHRhY2spO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGVycl9sYWdfY2ZnO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rXFxuK2Vycl9sYWdfY2ZnOlxcbitcXHRyY3VfYXNzaWduX3BvaW50ZXIocG9ydF9wcml2LVxcdTAwM2VsYWcsIE5VTEwpO1xcbitcXHRkcGFhMl9zd2l0Y2hfc2V0X2xhZ19jZmcoYm9uZF9kZXYsIGxhZ19pZCwgZXRoc3cpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9ib25kX2xlYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqYnJpZGdlX2RldiA9IG5ldGRldl9tYXN0ZXJfdXBwZXJfZGV2X2dldChib25kX2Rldik7XFxuK1xcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdHN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWcgPSBydG5sX2RlcmVmZXJlbmNlKHBvcnRfcHJpdi1cXHUwMDNlbGFnKTtcXG4rXFx0c3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3ID0gcG9ydF9wcml2LVxcdTAwM2VldGhzd19kYXRhO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqYnJwZGV2O1xcbitcXHRib29sIGxlYXJuX2VuYTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGlmICghbGFnKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIFJlY3JlYXRlIHRoZSBMQUcgY29uZmlndXJhdGlvbiBmb3IgdGhlIExBRyBncm91cCB0aGF0IHdlIGxlZnQuICovXFxuK1xcdHJjdV9hc3NpZ25fcG9pbnRlcihwb3J0X3ByaXYtXFx1MDAzZWxhZywgTlVMTCk7XFxuK1xcdGRwYWEyX3N3aXRjaF9zZXRfbGFnX2NmZyhib25kX2RldiwgbGFnLVxcdTAwM2VpZCwgZXRoc3cpO1xcbitcXG4rXFx0aWYgKGJyaWRnZV9kZXYgXFx1MDAyNlxcdTAwMjYgbmV0aWZfaXNfYnJpZGdlX21hc3RlcihicmlkZ2VfZGV2KSkge1xcbitcXHRcXHQvKiBNYWtlIHN1cmUgdGhhdCB0aGUgbmV3IHByaW1hcnkgaW5oZXJpdHMgdGhlIGxlYXJuaW5nIHN0YXRlICovXFxuK1xcdFxcdGlmIChsYWctXFx1MDAzZXByaW1hcnkpIHtcXG4rXFx0XFx0XFx0YnJwZGV2ID0gZHBhYTJfc3dpdGNoX3BvcnRfdG9fYnJpZGdlX3BvcnQobGFnLVxcdTAwM2VwcmltYXJ5KTtcXG4rXFx0XFx0XFx0bGVhcm5fZW5hID0gYnJfcG9ydF9mbGFnX2lzX3NldChicnBkZXYsIEJSX0xFQVJOSU5HKTtcXG4rXFx0XFx0XFx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfc2V0X2xlYXJuaW5nKGxhZy1cXHUwMDNlcHJpbWFyeSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBsZWFybl9lbmEpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRcXHRsYWctXFx1MDAzZXByaW1hcnktXFx1MDAzZWxlYXJuX2VuYSA9IGxlYXJuX2VuYTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0LyogSW4gY2FzZSB0aGUgYm9uZCBpcyBhIGJyaWRnZSBwb3J0LCBsZWF2ZSB0aGUgdXBwZXIgYnJpZGdlIGFzXFxuK1xcdFxcdCAqIHdlbGwuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyZXR1cm4gZHBhYTJfc3dpdGNoX3BvcnRfYnJpZGdlX2xlYXZlKG5ldGRldik7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC0yMjM0LDggKzI3MjksOCBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X3ByZWNoYW5nZXVwcGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0ZGV2X25vdGlmaWVyX2NoYW5nZXVwcGVyX2luZm8gKmluZm8pXFxuIHtcXG4gXFx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2O1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqdXBwZXJfZGV2LCAqYnI7XFxuIFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaztcXG4tXFx0c3RydWN0IG5ldF9kZXZpY2UgKnVwcGVyX2RldjtcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrKG5ldGRldikpXFxuQEAgLTIyNTIsNiArMjc0NywyNCBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X3ByZWNoYW5nZXVwcGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcbiBcXHRcXHRpZiAoIWluZm8tXFx1MDAzZWxpbmtpbmcpXFxuIFxcdFxcdFxcdGRwYWEyX3N3aXRjaF9wb3J0X3ByZV9icmlkZ2VfbGVhdmUobmV0ZGV2KTtcXG4rXFx0fSBlbHNlIGlmIChuZXRpZl9pc19sYWdfbWFzdGVyKHVwcGVyX2RldikpIHtcXG4rXFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VsaW5raW5nKSB7XFxuK1xcdFxcdFxcdGlmIChuZXRpZl9pc19icmlkZ2VfcG9ydCh1cHBlcl9kZXYpKVxcbitcXHRcXHRcXHRcXHRkcGFhMl9zd2l0Y2hfcG9ydF9wcmVfYnJpZGdlX2xlYXZlKG5ldGRldik7XFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAobmV0aWZfaXNfYnJpZGdlX3BvcnQodXBwZXJfZGV2KSkge1xcbitcXHRcXHRcXHRiciA9IG5ldGRldl9tYXN0ZXJfdXBwZXJfZGV2X2dldCh1cHBlcl9kZXYpO1xcbitcXHRcXHRcXHRlcnIgPSBkcGFhMl9zd2l0Y2hfcHJlY2hhbmdldXBwZXJfc2FuaXR5X2NoZWNrcyhuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGJyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRleHRhY2spO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRyZXR1cm4gZHBhYTJfc3dpdGNoX3ByZV9sYWdfam9pbihuZXRkZXYsIHVwcGVyX2RldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IGluZm8tXFx1MDAzZXVwcGVyX2luZm8sIGV4dGFjayk7XFxuIFxcdH0gZWxzZSBpZiAoaXNfdmxhbl9kZXYodXBwZXJfZGV2KSkge1xcbiBcXHRcXHRwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbiBcXHRcXHRpZiAocG9ydF9wcml2LVxcdTAwM2VmZGItXFx1MDAzZWJyaWRnZV9kZXYpIHtcXG5AQCAtMjI4Myw2ICsyNzk2LDgwIEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfY2hhbmdldXBwZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBleHRhY2spO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHJldHVybiBkcGFhMl9zd2l0Y2hfcG9ydF9icmlkZ2VfbGVhdmUobmV0ZGV2KTtcXG4rXFx0fSBlbHNlIGlmIChuZXRpZl9pc19sYWdfbWFzdGVyKHVwcGVyX2RldikpIHtcXG4rXFx0XFx0aWYgKGluZm8tXFx1MDAzZWxpbmtpbmcpXFxuK1xcdFxcdFxcdHJldHVybiBkcGFhMl9zd2l0Y2hfcG9ydF9ib25kX2pvaW4obmV0ZGV2LCB1cHBlcl9kZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGluZm8tXFx1MDAzZXVwcGVyX2luZm8sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGV4dGFjayk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cmV0dXJuIGRwYWEyX3N3aXRjaF9wb3J0X2JvbmRfbGVhdmUobmV0ZGV2LCB1cHBlcl9kZXYpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbitkcGFhMl9zd2l0Y2hfbGFnX3ByZWNoYW5nZXVwcGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBuZXRkZXZfbm90aWZpZXJfY2hhbmdldXBwZXJfaW5mbyAqaW5mbylcXG4re1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbG93ZXI7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0aWYgKCFuZXRpZl9pc19sYWdfbWFzdGVyKG5ldGRldikpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0bmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX2RldihuZXRkZXYsIGxvd2VyLCBpdGVyKSB7XFxuK1xcdFxcdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrKGxvd2VyKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9wcmVjaGFuZ2V1cHBlcihsb3dlciwgaW5mbyk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4rZHBhYTJfc3dpdGNoX2xhZ19jaGFuZ2V1cHBlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRkZXZfbm90aWZpZXJfY2hhbmdldXBwZXJfaW5mbyAqaW5mbylcXG4re1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbG93ZXI7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0aWYgKCFuZXRpZl9pc19sYWdfbWFzdGVyKG5ldGRldikpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0bmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX2RldihuZXRkZXYsIGxvd2VyLCBpdGVyKSB7XFxuK1xcdFxcdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrKGxvd2VyKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9jaGFuZ2V1cHBlcihsb3dlciwgaW5mbyk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK2RwYWEyX3N3aXRjaF9wb3J0X2NoYW5nZWxvd2Vyc3RhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldGRldl9sYWdfbG93ZXJfc3RhdGVfaW5mbyAqbGluZm8pXFxuK3tcXG4rXFx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3ID0gcG9ydF9wcml2LVxcdTAwM2VldGhzd19kYXRhO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0aWYgKCFydG5sX2RlcmVmZXJlbmNlKHBvcnRfcHJpdi1cXHUwMDNlbGFnKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRlcnIgPSBkcHN3X2lmX3NldF9sYWdfc3RhdGUoZXRoc3ctXFx1MDAzZW1jX2lvLCAwLCBldGhzdy1cXHUwMDNlZHBzd19oYW5kbGUsXFxuK1xcdFxcdFxcdFxcdCAgICBwb3J0X3ByaXYtXFx1MDAzZWlkeCwgbGluZm8tXFx1MDAzZXR4X2VuYWJsZWQgPyAxIDogMCk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJkcHN3X2lmX3NldF9sYWdfc3RhdGUoKSA9ICVkXFxcXG5cXFwiLCBlcnIpO1xcbitcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMjI5Miw2ICsyODc5LDcgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9uZXRkZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXFxuIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xcbitcXHRzdHJ1Y3QgbmV0ZGV2X25vdGlmaWVyX2NoYW5nZWxvd2Vyc3RhdGVfaW5mbyAqaW5mbztcXG4gXFx0aW50IGVyciA9IDA7XFxuIFxcbiBcXHRzd2l0Y2ggKGV2ZW50KSB7XFxuQEAgLTIzMDAsMTMgKzI4ODgsMjkgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9uZXRkZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0cmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8oZXJyKTtcXG4gXFxuK1xcdFxcdGVyciA9IGRwYWEyX3N3aXRjaF9sYWdfcHJlY2hhbmdldXBwZXIobmV0ZGV2LCBwdHIpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gbm90aWZpZXJfZnJvbV9lcnJubyhlcnIpO1xcbitcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgTkVUREVWX0NIQU5HRVVQUEVSOlxcbiBcXHRcXHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9jaGFuZ2V1cHBlcihuZXRkZXYsIHB0cik7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdHJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7XFxuIFxcbitcXHRcXHRlcnIgPSBkcGFhMl9zd2l0Y2hfbGFnX2NoYW5nZXVwcGVyKG5ldGRldiwgcHRyKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8oZXJyKTtcXG4rXFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE5FVERFVl9DSEFOR0VMT1dFUlNUQVRFOlxcbitcXHRcXHRpbmZvID0gcHRyO1xcbitcXHRcXHRpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhuZXRkZXYpKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X2NoYW5nZWxvd2Vyc3RhdGUobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgaW5mby1cXHUwMDNlbG93ZXJfc3RhdGVfaW5mbyk7XFxuK1xcdFxcdHJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiBOT1RJRllfRE9ORTtcXG5AQCAtMjMxNiw4MCArMjkyMCw5NyBAQCBzdHJ1Y3QgZXRoc3dfc3dpdGNoZGV2X2V2ZW50X3dvcmsge1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yaztcXG4gXFx0c3RydWN0IHN3aXRjaGRldl9ub3RpZmllcl9mZGJfaW5mbyBmZGJfaW5mbztcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2O1xcbiBcXHR1bnNpZ25lZCBsb25nIGV2ZW50O1xcbitcXHR1MTYgdmlkO1xcbiB9O1xcbiBcXG4gc3RhdGljIHZvaWQgZHBhYTJfc3dpdGNoX2V2ZW50X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiB7XFxuIFxcdHN0cnVjdCBldGhzd19zd2l0Y2hkZXZfZXZlbnRfd29yayAqc3dpdGNoZGV2X3dvcmsgPVxcbiBcXHRcXHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IGV0aHN3X3N3aXRjaGRldl9ldmVudF93b3JrLCB3b3JrKTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2ID0gc3dpdGNoZGV2X3dvcmstXFx1MDAzZW9yaWdfZGV2O1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc3dpdGNoZGV2X3dvcmstXFx1MDAzZWRldjtcXG4rXFx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gXFx0c3RydWN0IHN3aXRjaGRldl9ub3RpZmllcl9mZGJfaW5mbyAqZmRiX2luZm87XFxuK1xcdHN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWc7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHRydG5sX2xvY2soKTtcXG4gXFx0ZmRiX2luZm8gPSBcXHUwMDI2c3dpdGNoZGV2X3dvcmstXFx1MDAzZWZkYl9pbmZvO1xcbiBcXG4rXFx0LyogVGhlIGxhZyBzdHJ1Y3R1cmVzIGFyZSBmcmVlZCBvbmx5IGZyb20gZHBhYTJfc3dpdGNoX3JlbW92ZSgpLCB3aGljaFxcbitcXHQgKiBmaXJzdCBmbHVzaGVzIHRoaXMgd29ya3F1ZXVlLCBzbyB0aGUgcG9pbnRlciBzdGF5cyB2YWxpZCBmb3IgdGhlXFxuK1xcdCAqIGxpZmV0aW1lIG9mIHRoZSB3b3JrIGl0ZW0uIE9ubHkgdGhlIGRlcmVmZXJlbmNlIG5lZWRzIHRoZSBSQ1VcXG4rXFx0ICogcmVhZC1zaWRlIGxvY2s7IHRoZSBGREIgaGVscGVycyBiZWxvdyBjYW4gc2xlZXAgYW5kIG11c3QgcnVuIG91dHNpZGVcXG4rXFx0ICogb2YgaXQuXFxuK1xcdCAqL1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdGxhZyA9IHJjdV9kZXJlZmVyZW5jZShwb3J0X3ByaXYtXFx1MDAzZWxhZyk7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4gXFx0c3dpdGNoIChzd2l0Y2hkZXZfd29yay1cXHUwMDNlZXZlbnQpIHtcXG4gXFx0Y2FzZSBTV0lUQ0hERVZfRkRCX0FERF9UT19ERVZJQ0U6XFxuLVxcdFxcdGlmICghZmRiX2luZm8tXFx1MDAzZWFkZGVkX2J5X3VzZXIgfHwgZmRiX2luZm8tXFx1MDAzZWlzX2xvY2FsKVxcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0aWYgKGlzX3VuaWNhc3RfZXRoZXJfYWRkcihmZGJfaW5mby1cXHUwMDNlYWRkcikpXFxuLVxcdFxcdFxcdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9hZGRfdWMobmV0ZGV2X3ByaXYoZGV2KSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgZmRiX2luZm8tXFx1MDAzZWFkZHIpO1xcbitcXHRcXHRpZiAobGFnKVxcbitcXHRcXHRcXHRlcnIgPSBkcGFhMl9zd2l0Y2hfbGFnX2ZkYl9hZGQobGFnLCBmZGJfaW5mby1cXHUwMDNlYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN3aXRjaGRldl93b3JrLVxcdTAwM2V2aWQpO1xcbiBcXHRcXHRlbHNlXFxuLVxcdFxcdFxcdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9hZGRfbWMobmV0ZGV2X3ByaXYoZGV2KSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgZmRiX2luZm8tXFx1MDAzZWFkZHIpO1xcbitcXHRcXHRcXHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfYWRkKHBvcnRfcHJpdixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ZmRiX2luZm8tXFx1MDAzZWFkZHIpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ZmRiX2luZm8tXFx1MDAzZW9mZmxvYWRlZCA9IHRydWU7XFxuLVxcdFxcdGNhbGxfc3dpdGNoZGV2X25vdGlmaWVycyhTV0lUQ0hERVZfRkRCX09GRkxPQURFRCwgZGV2LFxcbitcXHRcXHRjYWxsX3N3aXRjaGRldl9ub3RpZmllcnMoU1dJVENIREVWX0ZEQl9PRkZMT0FERUQsIG9yaWdfZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmZkYl9pbmZvLVxcdTAwM2VpbmZvLCBOVUxMKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgU1dJVENIREVWX0ZEQl9ERUxfVE9fREVWSUNFOlxcbi1cXHRcXHRpZiAoIWZkYl9pbmZvLVxcdTAwM2VhZGRlZF9ieV91c2VyIHx8IGZkYl9pbmZvLVxcdTAwM2Vpc19sb2NhbClcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGlmIChpc191bmljYXN0X2V0aGVyX2FkZHIoZmRiX2luZm8tXFx1MDAzZWFkZHIpKVxcbi1cXHRcXHRcXHRkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsX3VjKG5ldGRldl9wcml2KGRldiksIGZkYl9pbmZvLVxcdTAwM2VhZGRyKTtcXG4rXFx0XFx0aWYgKGxhZylcXG4rXFx0XFx0XFx0ZHBhYTJfc3dpdGNoX2xhZ19mZGJfZGVsKGxhZywgZmRiX2luZm8tXFx1MDAzZWFkZHIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBzd2l0Y2hkZXZfd29yay1cXHUwMDNldmlkKTtcXG4gXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsX21jKG5ldGRldl9wcml2KGRldiksIGZkYl9pbmZvLVxcdTAwM2VhZGRyKTtcXG4rXFx0XFx0XFx0ZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2RlbChwb3J0X3ByaXYsIGZkYl9pbmZvLVxcdTAwM2VhZGRyKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFxuLVxcdHJ0bmxfdW5sb2NrKCk7XFxuIFxcdGtmcmVlKHN3aXRjaGRldl93b3JrLVxcdTAwM2VmZGJfaW5mby5hZGRyKTtcXG4gXFx0a2ZyZWUoc3dpdGNoZGV2X3dvcmspO1xcbiBcXHRkZXZfcHV0KGRldik7XFxuK1xcdGRldl9wdXQob3JpZ19kZXYpO1xcbiB9XFxuIFxcbi0vKiBDYWxsZWQgdW5kZXIgcmN1X3JlYWRfbG9jaygpICovXFxuLXN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG4tXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxcbitzdGF0aWMgaW50XFxuK2RwYWEyX3N3aXRjaF9wb3J0X2ZkYl9ldmVudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2LFxcbitcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBldmVudCwgY29uc3Qgdm9pZCAqY3R4LFxcbitcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9ub3RpZmllcl9mZGJfaW5mbyAqZmRiX2luZm8pXFxuIHtcXG4tXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHN3aXRjaGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xcbiBcXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiBcXHRzdHJ1Y3QgZXRoc3dfc3dpdGNoZGV2X2V2ZW50X3dvcmsgKnN3aXRjaGRldl93b3JrO1xcbi1cXHRzdHJ1Y3Qgc3dpdGNoZGV2X25vdGlmaWVyX2ZkYl9pbmZvICpmZGJfaW5mbyA9IHB0cjtcXG4gXFx0c3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3ID0gcG9ydF9wcml2LVxcdTAwM2VldGhzd19kYXRhO1xcbiBcXG4tXFx0aWYgKGV2ZW50ID09IFNXSVRDSERFVl9QT1JUX0FUVFJfU0VUKVxcbi1cXHRcXHRyZXR1cm4gZHBhYTJfc3dpdGNoX3BvcnRfYXR0cl9zZXRfZXZlbnQoZGV2LCBwdHIpO1xcbitcXHRpZiAoY3R4IFxcdTAwMjZcXHUwMDI2IGN0eCAhPSBwb3J0X3ByaXYpXFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0aWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2soZGV2KSlcXG4tXFx0XFx0cmV0dXJuIE5PVElGWV9ET05FO1xcbitcXHQvKiBGb3IgdGhlIG1vbWVudCwgZG8gbm90aGluZyB3aXRoIGVudHJpZXMgdG93YXJkcyBmb3JlaWduIGRldmljZXMgKi9cXG4rXFx0aWYgKGRwYWEyX3N3aXRjaF9mb3JlaWduX2Rldl9jaGVjayhkZXYsIG9yaWdfZGV2KSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAoIWZkYl9pbmZvLVxcdTAwM2VhZGRlZF9ieV91c2VyIHx8IGZkYl9pbmZvLVxcdTAwM2Vpc19sb2NhbClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRzd2l0Y2hkZXZfd29yayA9IGt6YWxsb2Nfb2JqKCpzd2l0Y2hkZXZfd29yaywgR0ZQX0FUT01JQyk7XFxuIFxcdGlmICghc3dpdGNoZGV2X3dvcmspXFxuLVxcdFxcdHJldHVybiBOT1RJRllfQkFEO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdElOSVRfV09SSyhcXHUwMDI2c3dpdGNoZGV2X3dvcmstXFx1MDAzZXdvcmssIGRwYWEyX3N3aXRjaF9ldmVudF93b3JrKTtcXG4gXFx0c3dpdGNoZGV2X3dvcmstXFx1MDAzZWRldiA9IGRldjtcXG4gXFx0c3dpdGNoZGV2X3dvcmstXFx1MDAzZWV2ZW50ID0gZXZlbnQ7XFxuK1xcdHN3aXRjaGRldl93b3JrLVxcdTAwM2VvcmlnX2RldiA9IG9yaWdfZGV2O1xcbitcXHRzd2l0Y2hkZXZfd29yay1cXHUwMDNldmlkID0gZmRiX2luZm8tXFx1MDAzZXZpZDtcXG4gXFxuIFxcdHN3aXRjaCAoZXZlbnQpIHtcXG4gXFx0Y2FzZSBTV0lUQ0hERVZfRkRCX0FERF9UT19ERVZJQ0U6XFxuIFxcdGNhc2UgU1dJVENIREVWX0ZEQl9ERUxfVE9fREVWSUNFOlxcbi1cXHRcXHRtZW1jcHkoXFx1MDAyNnN3aXRjaGRldl93b3JrLVxcdTAwM2VmZGJfaW5mbywgcHRyLFxcbitcXHRcXHRtZW1jcHkoXFx1MDAyNnN3aXRjaGRldl93b3JrLVxcdTAwM2VmZGJfaW5mbywgZmRiX2luZm8sXFxuIFxcdFxcdCAgICAgICBzaXplb2Yoc3dpdGNoZGV2X3dvcmstXFx1MDAzZWZkYl9pbmZvKSk7XFxuIFxcdFxcdHN3aXRjaGRldl93b3JrLVxcdTAwM2VmZGJfaW5mby5hZGRyID0ga3phbGxvYyhFVEhfQUxFTiwgR0ZQX0FUT01JQyk7XFxuIFxcdFxcdGlmICghc3dpdGNoZGV2X3dvcmstXFx1MDAzZWZkYl9pbmZvLmFkZHIpXFxuQEAgLTI0MDAsNTIgKzMwMjEsNjEgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbiBcXG4gXFx0XFx0LyogVGFrZSBhIHJlZmVyZW5jZSBvbiB0aGUgZGV2aWNlIHRvIGF2b2lkIGJlaW5nIGZyZWVkLiAqL1xcbiBcXHRcXHRkZXZfaG9sZChkZXYpO1xcbitcXHRcXHRkZXZfaG9sZChvcmlnX2Rldik7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRrZnJlZShzd2l0Y2hkZXZfd29yayk7XFxuLVxcdFxcdHJldHVybiBOT1RJRllfRE9ORTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuIFxcdHF1ZXVlX3dvcmsoZXRoc3ctXFx1MDAzZXdvcmtxdWV1ZSwgXFx1MDAyNnN3aXRjaGRldl93b3JrLVxcdTAwM2V3b3JrKTtcXG4gXFxuLVxcdHJldHVybiBOT1RJRllfRE9ORTtcXG4rXFx0cmV0dXJuIDA7XFxuIFxcbiBlcnJfYWRkcl9hbGxvYzpcXG4gXFx0a2ZyZWUoc3dpdGNoZGV2X3dvcmspO1xcbi1cXHRyZXR1cm4gTk9USUZZX0JBRDtcXG4rXFx0cmV0dXJuIC1FTk9NRU07XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfb2JqX2V2ZW50KHVuc2lnbmVkIGxvbmcgZXZlbnQsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHN3aXRjaGRldl9ub3RpZmllcl9wb3J0X29ial9pbmZvICpwb3J0X29ial9pbmZvKVxcbisvKiBDYWxsZWQgdW5kZXIgcmN1X3JlYWRfbG9jaygpICovXFxuK3N0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG4rXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxcbiB7XFxuLVxcdGludCBlcnIgPSAtRU9QTk9UU1VQUDtcXG4tXFxuLVxcdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrKG5ldGRldikpXFxuLVxcdFxcdHJldHVybiBOT1RJRllfRE9ORTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHN3aXRjaGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xcbitcXHRpbnQgZXJyO1xcbiBcXG4gXFx0c3dpdGNoIChldmVudCkge1xcbi1cXHRjYXNlIFNXSVRDSERFVl9QT1JUX09CSl9BREQ6XFxuLVxcdFxcdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X29ial9hZGQobmV0ZGV2LCBwb3J0X29ial9pbmZvLVxcdTAwM2VvYmopO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0Y2FzZSBTV0lUQ0hERVZfUE9SVF9PQkpfREVMOlxcbi1cXHRcXHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9vYmpfZGVsKG5ldGRldiwgcG9ydF9vYmpfaW5mby1cXHUwMDNlb2JqKTtcXG4tXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgU1dJVENIREVWX1BPUlRfQVRUUl9TRVQ6XFxuK1xcdFxcdHJldHVybiBkcGFhMl9zd2l0Y2hfcG9ydF9hdHRyX3NldF9ldmVudChkZXYsIHB0cik7XFxuK1xcdGNhc2UgU1dJVENIREVWX0ZEQl9BRERfVE9fREVWSUNFOlxcbitcXHRjYXNlIFNXSVRDSERFVl9GREJfREVMX1RPX0RFVklDRTpcXG4rXFx0XFx0ZXJyID0gc3dpdGNoZGV2X2hhbmRsZV9mZGJfZXZlbnRfdG9fZGV2aWNlKGRldiwgZXZlbnQsIHB0cixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBkcGFhMl9zd2l0Y2hfZm9yZWlnbl9kZXZfY2hlY2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9ldmVudCk7XFxuK1xcdFxcdHJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBOT1RJRllfRE9ORTtcXG4gXFx0fVxcbi1cXG4tXFx0cG9ydF9vYmpfaW5mby1cXHUwMDNlaGFuZGxlZCA9IHRydWU7XFxuLVxcdHJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfYmxvY2tpbmdfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc3dpdGNoZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7XFxuK1xcdGludCBlcnI7XFxuIFxcbiBcXHRzd2l0Y2ggKGV2ZW50KSB7XFxuIFxcdGNhc2UgU1dJVENIREVWX1BPUlRfT0JKX0FERDpcXG4rXFx0XFx0ZXJyID0gc3dpdGNoZGV2X2hhbmRsZV9wb3J0X29ial9hZGQoZGV2LCBwdHIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBkcGFhMl9zd2l0Y2hfcG9ydF9vYmpfYWRkKTtcXG4rXFx0XFx0cmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8oZXJyKTtcXG4gXFx0Y2FzZSBTV0lUQ0hERVZfUE9SVF9PQkpfREVMOlxcbi1cXHRcXHRyZXR1cm4gZHBhYTJfc3dpdGNoX3BvcnRfb2JqX2V2ZW50KGV2ZW50LCBkZXYsIHB0cik7XFxuK1xcdFxcdGVyciA9IHN3aXRjaGRldl9oYW5kbGVfcG9ydF9vYmpfZGVsKGRldiwgcHRyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgZHBhYTJfc3dpdGNoX3BvcnRfb2JqX2RlbCk7XFxuK1xcdFxcdHJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7XFxuIFxcdGNhc2UgU1dJVENIREVWX1BPUlRfQVRUUl9TRVQ6XFxuIFxcdFxcdHJldHVybiBkcGFhMl9zd2l0Y2hfcG9ydF9hdHRyX3NldF9ldmVudChkZXYsIHB0cik7XFxuIFxcdH1cXG5AQCAtMjQ5MCwxOSArMzEyMCwyMiBAQCBzdGF0aWMgdm9pZCBkcGFhMl9zd2l0Y2hfcngoc3RydWN0IGRwYWEyX3N3aXRjaF9mcSAqZnEsXFxuIFxcdGRtYV9hZGRyX3QgYWRkciA9IGRwYWEyX2ZkX2dldF9hZGRyKGZkKTtcXG4gXFx0c3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3ID0gZnEtXFx1MDAzZWV0aHN3O1xcbiBcXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXY7XFxuK1xcdHN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWc7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XFxuIFxcdHN0cnVjdCB2bGFuX2V0aGhkciAqaGRyO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiBcXHR1MTYgdmxhbl90Y2ksIHZpZDtcXG4gXFx0aW50IGlmX2lkLCBlcnI7XFxuIFxcdHZvaWQgKnZhZGRyO1xcbitcXHR1NjQgZmxjO1xcbiBcXG4gXFx0dmFkZHIgPSBkcGFhMl9pb3ZhX3RvX3ZpcnQoZXRoc3ctXFx1MDAzZWlvbW11X2RvbWFpbiwgYWRkcik7XFxuIFxcdGRtYV91bm1hcF9wYWdlKGV0aHN3LVxcdTAwM2VkZXYsIGFkZHIsIERQQUEyX1NXSVRDSF9SWF9CVUZfU0laRSxcXG4gXFx0XFx0ICAgICAgIERNQV9GUk9NX0RFVklDRSk7XFxuIFxcbiBcXHQvKiBnZXQgc3dpdGNoIGluZ3Jlc3MgaW50ZXJmYWNlIElEICovXFxuLVxcdGlmX2lkID0gdXBwZXJfMzJfYml0cyhkcGFhMl9mZF9nZXRfZmxjKGZkKSkgXFx1MDAyNiAweDAwMDBGRkZGO1xcbitcXHRmbGMgPSBkcGFhMl9mZF9nZXRfZmxjKGZkKTtcXG4rXFx0aWZfaWQgPSBEUEFBMl9FVEhTV19GTENfSUZfSUQoZmxjKTtcXG4gXFx0aWYgKGlmX2lkIFxcdTAwM2U9IGV0aHN3LVxcdTAwM2Vzd19hdHRyLm51bV9pZnMpIHtcXG4gXFx0XFx0ZGV2X2VycihldGhzdy1cXHUwMDNlZGV2LCBcXFwiRnJhbWUgcmVjZWl2ZWQgZnJvbSB1bmtub3duIGludGVyZmFjZSFcXFxcblxcXCIpO1xcbiBcXHRcXHRnb3RvIGVycl9mcmVlX2ZkO1xcbkBAIC0yNTQxLDEyICszMTc0LDIwIEBAIHN0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9yeChzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZxICpmcSxcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRza2ItXFx1MDAzZWRldiA9IG5ldGRldjtcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXG4rXFx0bGFnID0gcmN1X2RlcmVmZXJlbmNlKHBvcnRfcHJpdi1cXHUwMDNlbGFnKTtcXG4rXFx0aWYgKERQQUEyX0VUSFNXX0ZMQ19JTVBSRUNJU0VfSUZfSUQoZmxjKSBcXHUwMDI2XFx1MDAyNiBsYWcpXFxuK1xcdFxcdHNrYi1cXHUwMDNlZGV2ID0gbGFnLVxcdTAwM2Vib25kX2RldjtcXG4rXFx0ZWxzZVxcbitcXHRcXHRza2ItXFx1MDAzZWRldiA9IG5ldGRldjtcXG4gXFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgc2tiLVxcdTAwM2VkZXYpO1xcbiBcXG4gXFx0LyogU2V0dXAgdGhlIG9mZmxvYWRfZndkX21hcmsgb25seSBpZiB0aGUgcG9ydCBpcyB1bmRlciBhIGJyaWRnZSAqL1xcbiBcXHRza2ItXFx1MDAzZW9mZmxvYWRfZndkX21hcmsgPSAhIShwb3J0X3ByaXYtXFx1MDAzZWZkYi1cXHUwMDNlYnJpZGdlX2Rldik7XFxuIFxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuIFxcdG5ldGlmX3JlY2VpdmVfc2tiKHNrYik7XFxuIFxcbiBcXHRyZXR1cm47XFxuQEAgLTI1NjEsNiArMzIwMiw5IEBAIHN0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9kZXRlY3RfZmVhdHVyZXMoc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3KVxcbiBcXG4gXFx0aWYgKGV0aHN3LVxcdTAwM2VtYWpvciBcXHUwMDNlIDggfHwgKGV0aHN3LVxcdTAwM2VtYWpvciA9PSA4IFxcdTAwMjZcXHUwMDI2IGV0aHN3LVxcdTAwM2VtaW5vciBcXHUwMDNlPSA2KSlcXG4gXFx0XFx0ZXRoc3ctXFx1MDAzZWZlYXR1cmVzIHw9IEVUSFNXX0ZFQVRVUkVfTUFDX0FERFI7XFxuK1xcbitcXHRpZiAoZXRoc3ctXFx1MDAzZW1ham9yIFxcdTAwM2UgOCB8fCAoZXRoc3ctXFx1MDAzZW1ham9yID09IDggXFx1MDAyNlxcdTAwMjYgZXRoc3ctXFx1MDAzZW1pbm9yIFxcdTAwM2U9IDEzKSlcXG4rXFx0XFx0ZXRoc3ctXFx1MDAzZWZlYXR1cmVzIHw9IEVUSFNXX0ZFQVRVUkVfTEFHX09GRkxPQUQ7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3NldHVwX2ZxcyhzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3cpXFxuQEAgLTMxOTUsMTcgKzM4MzksMTUgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfaW5pdChzdHJ1Y3QgZnNsX21jX2RldmljZSAqc3dfZGV2KVxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi0vKiBBZGQgYW4gQUNMIHRvIHJlZGlyZWN0IGZyYW1lcyB3aXRoIHNwZWNpZmljIGRlc3RpbmF0aW9uIE1BQyBhZGRyZXNzIHRvXFxuLSAqIGNvbnRyb2wgaW50ZXJmYWNlXFxuLSAqL1xcbisvKiBBZGQgYW4gQUNMIHRvIHJlZGlyZWN0IGZyYW1lcyB0byBjb250cm9sIGludGVyZmFjZSBiYXNlZCBvbiB0aGUgZHN0IE1BQyAqL1xcbiBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X3RyYXBfbWFjX2FkZHIoc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2LFxcbi1cXHRcXHRcXHRcXHRcXHQgICBjb25zdCBjaGFyICptYWMpXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHU4ICptYWMsIGNvbnN0IHU4ICptYXNrKVxcbiB7XFxuIFxcdHN0cnVjdCBkcGFhMl9zd2l0Y2hfYWNsX2VudHJ5IGFjbF9lbnRyeSA9IHswfTtcXG4gXFxuIFxcdC8qIE1hdGNoIG9uIHRoZSBkZXN0aW5hdGlvbiBNQUMgYWRkcmVzcyAqL1xcbiBcXHRldGhlcl9hZGRyX2NvcHkoYWNsX2VudHJ5LmtleS5tYXRjaC5sMl9kZXN0X21hYywgbWFjKTtcXG4tXFx0ZXRoX2Jyb2FkY2FzdF9hZGRyKGFjbF9lbnRyeS5rZXkubWFzay5sMl9kZXN0X21hYyk7XFxuK1xcdGV0aGVyX2FkZHJfY29weShhY2xfZW50cnkua2V5Lm1hc2subDJfZGVzdF9tYWMsIG1hc2spO1xcbiBcXG4gXFx0LyogVHJhcCB0byBDUFUgKi9cXG4gXFx0YWNsX2VudHJ5LmNmZy5wcmVjZWRlbmNlID0gMDtcXG5AQCAtMzIxNiw3ICszODU4LDggQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF90cmFwX21hY19hZGRyKHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdixcXG4gXFxuIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfaW5pdChzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYsIHUxNiBwb3J0KVxcbiB7XFxuLVxcdGNvbnN0IGNoYXIgc3RwYVtFVEhfQUxFTl0gPSB7MHgwMSwgMHg4MCwgMHhjMiwgMHgwMCwgMHgwMCwgMHgwMH07XFxuK1xcdGNvbnN0IHU4IGxsX21hY1tFVEhfQUxFTl0gPSB7MHgwMSwgMHg4MCwgMHhjMiwgMHgwMCwgMHgwMCwgMHgwMH07XFxuK1xcdGNvbnN0IHU4IGxsX21hc2tbRVRIX0FMRU5dID0gezB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjB9O1xcbiBcXHRzdHJ1Y3Qgc3dpdGNoZGV2X29ial9wb3J0X3ZsYW4gdmxhbiA9IHtcXG4gXFx0XFx0Lm9iai5pZCA9IFNXSVRDSERFVl9PQkpfSURfUE9SVF9WTEFOLFxcbiBcXHRcXHQudmlkID0gREVGQVVMVF9WTEFOX0lELFxcbkBAIC0zMjkxLDcgKzM5MzQsNyBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2luaXQoc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2LCB1MTYgcG9ydClcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuLVxcdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X3RyYXBfbWFjX2FkZHIocG9ydF9wcml2LCBzdHBhKTtcXG4rXFx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfdHJhcF9tYWNfYWRkcihwb3J0X3ByaXYsIGxsX21hYywgbGxfbWFzayk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbkBAIC0zMzMxLDYgKzM5NzQsOSBAQCBzdGF0aWMgdm9pZCBkcGFhMl9zd2l0Y2hfcmVtb3ZlKHN0cnVjdCBmc2xfbWNfZGV2aWNlICpzd19kZXYpXFxuIFxcdGRldiA9IFxcdTAwMjZzd19kZXYtXFx1MDAzZWRldjtcXG4gXFx0ZXRoc3cgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcXG4gXFxuK1xcdC8qIE1ha2Ugc3VyZSB0aGF0IGFsbCBldmVudHMgd2VyZSBoYW5kbGVkIGJlZm9yZSB3ZSBrZnJlZSBhbnl0aGluZyAqL1xcbitcXHRmbHVzaF93b3JrcXVldWUoZXRoc3ctXFx1MDAzZXdvcmtxdWV1ZSk7XFxuK1xcbiBcXHRkcGFhMl9zd2l0Y2hfdGVhcmRvd25faXJxcyhzd19kZXYpO1xcbiBcXG4gXFx0ZHBzd19kaXNhYmxlKGV0aHN3LVxcdTAwM2VtY19pbywgMCwgZXRoc3ctXFx1MDAzZWRwc3dfaGFuZGxlKTtcXG5AQCAtMzM0NCwxMiArMzk5MCwxNSBAQCBzdGF0aWMgdm9pZCBkcGFhMl9zd2l0Y2hfcmVtb3ZlKHN0cnVjdCBmc2xfbWNfZGV2aWNlICpzd19kZXYpXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBEUEFBMl9TV0lUQ0hfUlhfTlVNX0ZRUzsgaSsrKVxcbiBcXHRcXHRuZXRpZl9uYXBpX2RlbChcXHUwMDI2ZXRoc3ctXFx1MDAzZWZxW2ldLm5hcGkpO1xcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGV0aHN3LVxcdTAwM2Vzd19hdHRyLm51bV9pZnM7IGkrKylcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGV0aHN3LVxcdTAwM2Vzd19hdHRyLm51bV9pZnM7IGkrKykge1xcbiBcXHRcXHRkcGFhMl9zd2l0Y2hfcmVtb3ZlX3BvcnQoZXRoc3csIGkpO1xcbitcXHRcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZldGhzdy1cXHUwMDNlbGFnc1tpXS5mZGJfbG9jayk7XFxuK1xcdH1cXG4gXFxuIFxcdGtmcmVlKGV0aHN3LVxcdTAwM2VmZGJzKTtcXG4gXFx0a2ZyZWUoZXRoc3ctXFx1MDAzZWZpbHRlcl9ibG9ja3MpO1xcbiBcXHRrZnJlZShldGhzdy1cXHUwMDNlcG9ydHMpO1xcbitcXHRrZnJlZShldGhzdy1cXHUwMDNlbGFncyk7XFxuIFxcbiBcXHRkcGFhMl9zd2l0Y2hfdGVhcmRvd24oc3dfZGV2KTtcXG4gXFxuQEAgLTMzNzcsNiArNDAyNiw3IEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3Byb2JlX3BvcnQoc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3LFxcbiBcXHRwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihwb3J0X25ldGRldik7XFxuIFxcdHBvcnRfcHJpdi1cXHUwMDNlbmV0ZGV2ID0gcG9ydF9uZXRkZXY7XFxuIFxcdHBvcnRfcHJpdi1cXHUwMDNlZXRoc3dfZGF0YSA9IGV0aHN3O1xcbitcXHRyY3VfYXNzaWduX3BvaW50ZXIocG9ydF9wcml2LVxcdTAwM2VsYWcsIE5VTEwpO1xcbiBcXG4gXFx0bXV0ZXhfaW5pdChcXHUwMDI2cG9ydF9wcml2LVxcdTAwM2VtYWNfbG9jayk7XFxuIFxcbkBAIC0zNDg0LDYgKzQxMzQsMjEgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcHJvYmUoc3RydWN0IGZzbF9tY19kZXZpY2UgKnN3X2RldilcXG4gXFx0XFx0Z290byBlcnJfZnJlZV9mZGJzO1xcbiBcXHR9XFxuIFxcbitcXHRldGhzdy1cXHUwMDNlbGFncyA9IGtjYWxsb2MoZXRoc3ctXFx1MDAzZXN3X2F0dHIubnVtX2lmcywgc2l6ZW9mKCpldGhzdy1cXHUwMDNlbGFncyksXFxuK1xcdFxcdFxcdCAgICAgIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWV0aHN3LVxcdTAwM2VsYWdzKSB7XFxuK1xcdFxcdGVyciA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWVfZmlsdGVyO1xcbitcXHR9XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBldGhzdy1cXHUwMDNlc3dfYXR0ci5udW1faWZzOyBpKyspIHtcXG4rXFx0XFx0ZXRoc3ctXFx1MDAzZWxhZ3NbaV0uYm9uZF9kZXYgPSBOVUxMO1xcbitcXHRcXHRldGhzdy1cXHUwMDNlbGFnc1tpXS5ldGhzdyA9IGV0aHN3O1xcbitcXHRcXHRldGhzdy1cXHUwMDNlbGFnc1tpXS5pZCA9IGkgKyAxO1xcbitcXHRcXHRldGhzdy1cXHUwMDNlbGFnc1tpXS5pbl91c2UgPSAwO1xcbitcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZldGhzdy1cXHUwMDNlbGFnc1tpXS5mZGJfbG9jayk7XFxuK1xcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZldGhzdy1cXHUwMDNlbGFnc1tpXS5mZGJzKTtcXG4rXFx0fVxcbitcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGV0aHN3LVxcdTAwM2Vzd19hdHRyLm51bV9pZnM7IGkrKykge1xcbiBcXHRcXHRlcnIgPSBkcGFhMl9zd2l0Y2hfcHJvYmVfcG9ydChldGhzdywgaSk7XFxuIFxcdFxcdGlmIChlcnIpXFxuQEAgLTM1MzAsNiArNDE5NSwxMCBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wcm9iZShzdHJ1Y3QgZnNsX21jX2RldmljZSAqc3dfZGV2KVxcbiBlcnJfZnJlZV9uZXRkZXY6XFxuIFxcdGZvciAoaS0tOyBpIFxcdTAwM2U9IDA7IGktLSlcXG4gXFx0XFx0ZHBhYTJfc3dpdGNoX3JlbW92ZV9wb3J0KGV0aHN3LCBpKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGV0aHN3LVxcdTAwM2Vzd19hdHRyLm51bV9pZnM7IGkrKylcXG4rXFx0XFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2ZXRoc3ctXFx1MDAzZWxhZ3NbaV0uZmRiX2xvY2spO1xcbitcXHRrZnJlZShldGhzdy1cXHUwMDNlbGFncyk7XFxuK2Vycl9mcmVlX2ZpbHRlcjpcXG4gXFx0a2ZyZWUoZXRoc3ctXFx1MDAzZWZpbHRlcl9ibG9ja3MpO1xcbiBlcnJfZnJlZV9mZGJzOlxcbiBcXHRrZnJlZShldGhzdy1cXHUwMDNlZmRicyk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guaFxcbmluZGV4IDQyYjNjYTczZjU1ZDU0Li42M2I3MDJiMDAwMGMyZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItc3dpdGNoLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItc3dpdGNoLmhcXG5AQCAtNDEsNyArNDEsOCBAQFxcbiAjZGVmaW5lIEVUSFNXX01BWF9GUkFNRV9MRU5HVEhcXHQoRFBBQTJfTUZMIC0gVkxBTl9FVEhfSExFTiAtIEVUSF9GQ1NfTEVOKVxcbiAjZGVmaW5lIEVUSFNXX0wyX01BWF9GUk0obXR1KVxcdCgobXR1KSArIFZMQU5fRVRIX0hMRU4gKyBFVEhfRkNTX0xFTilcXG4gXFxuLSNkZWZpbmUgRVRIU1dfRkVBVFVSRV9NQUNfQUREUlxcdEJJVCgwKVxcbisjZGVmaW5lIEVUSFNXX0ZFQVRVUkVfTUFDX0FERFJcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBFVEhTV19GRUFUVVJFX0xBR19PRkZMT0FEXFx0QklUKDEpXFxuIFxcbiAvKiBOdW1iZXIgb2YgcmVjZWl2ZSBxdWV1ZXMgKG9uZSBSWCBhbmQgb25lIFRYX0NPTkYpICovXFxuICNkZWZpbmUgRFBBQTJfU1dJVENIX1JYX05VTV9GUVNcXHQyXFxuQEAgLTg2LDYgKzg3LDkgQEBcXG4gXFxuICNkZWZpbmUgRFBBQTJfRVRIU1dfUE9SVF9BQ0xfQ01EX0JVRl9TSVpFXFx0MjU2XFxuIFxcbisjZGVmaW5lIERQQUEyX0VUSFNXX0ZMQ19JRl9JRChmbGMpXFx0XFx0KCgoZmxjKSBcXHUwMDNlXFx1MDAzZSAzMikgXFx1MDAyNiBHRU5NQVNLKDE1LCAwKSlcXG4rI2RlZmluZSBEUEFBMl9FVEhTV19GTENfSU1QUkVDSVNFX0lGX0lEKGZsYylcXHQoKGZsYykgXFx1MDAyNiBCSVRfVUxMKDYzKSlcXG4rXFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZHBhYTJfc3dpdGNoX3BvcnRfZXRodG9vbF9vcHM7XFxuIFxcbiBzdHJ1Y3QgZXRoc3dfY29yZTtcXG5AQCAtOTksMTIgKzEwMywzMCBAQCBzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZxIHtcXG4gXFx0dTMyIGZxaWQ7XFxuIH07XFxuIFxcbitzdHJ1Y3QgZHBhYTJfbWFjX2FkZHIge1xcbitcXHR1bnNpZ25lZCBjaGFyIGFkZHJbRVRIX0FMRU5dO1xcbitcXHR1MTYgdmlkO1xcbitcXHRyZWZjb3VudF90IHJlZmNvdW50O1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuK307XFxuK1xcbiBzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZkYiB7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlXFx0KmJyaWRnZV9kZXY7XFxuIFxcdHUxNlxcdFxcdFxcdGZkYl9pZDtcXG4gXFx0Ym9vbFxcdFxcdFxcdGluX3VzZTtcXG4gfTtcXG4gXFxuK3N0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnIHtcXG4rXFx0c3RydWN0IGV0aHN3X2NvcmVcXHQqZXRoc3c7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlXFx0KmJvbmRfZGV2O1xcbitcXHRib29sXFx0XFx0XFx0aW5fdXNlO1xcbitcXHR1OFxcdFxcdFxcdGlkO1xcbitcXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2XFx0KnByaW1hcnk7XFxuK1xcdC8qIFByb3RlY3RzIHRoZSBsaXN0IG9mIGZkYnMgaW5zdGFsbGVkIG9uIHRoaXMgTEFHICovXFxuK1xcdHN0cnVjdCBtdXRleFxcdFxcdGZkYl9sb2NrO1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0ZmRicztcXG4rfTtcXG4rXFxuIHN0cnVjdCBkcGFhMl9zd2l0Y2hfYWNsX2VudHJ5IHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuIFxcdHUxNlxcdFxcdFxcdHByaW87XFxuQEAgLTE2Myw2ICsxODUsOCBAQCBzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2IHtcXG4gXFx0c3RydWN0IGRwYWEyX21hY1xcdCptYWM7XFxuIFxcdC8qIFByb3RlY3RzIGFnYWluc3QgY2hhbmdlcyB0byBwb3J0X3ByaXYtXFx1MDAzZW1hYyAqL1xcbiBcXHRzdHJ1Y3QgbXV0ZXhcXHRcXHRtYWNfbG9jaztcXG4rXFxuK1xcdHN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnIF9fcmN1ICpsYWc7XFxuIH07XFxuIFxcbiAvKiBTd2l0Y2ggZGF0YSAqL1xcbkBAIC0xOTAsNiArMjE0LDggQEAgc3RydWN0IGV0aHN3X2NvcmUge1xcbiBcXHRzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZkYlxcdFxcdCpmZGJzO1xcbiBcXHRzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZpbHRlcl9ibG9jayAqZmlsdGVyX2Jsb2NrcztcXG4gXFx0dTE2XFx0XFx0XFx0XFx0bWlycm9yX3BvcnQ7XFxuK1xcbitcXHRzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZ1xcdFxcdCpsYWdzO1xcbiB9O1xcbiBcXG4gc3RhdGljIGlubGluZSBpbnQgZHBhYTJfc3dpdGNoX2dldF9pbmRleChzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3csXFxuQEAgLTI3NCw0ICszMDAsMTggQEAgaW50IGRwYWEyX3N3aXRjaF9ibG9ja19vZmZsb2FkX21pcnJvcihzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZpbHRlcl9ibG9jayAqYmxvY2ssXFxuIFxcbiBpbnQgZHBhYTJfc3dpdGNoX2Jsb2NrX3Vub2ZmbG9hZF9taXJyb3Ioc3RydWN0IGRwYWEyX3N3aXRjaF9maWx0ZXJfYmxvY2sgKmJsb2NrLFxcbiBcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYpO1xcbitcXG4rc3RhdGljIGlubGluZSBib29sXFxuK2RwYWEyX3N3aXRjaF9wb3J0X29mZmxvYWRzX2JyaWRnZV9wb3J0KHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZyA9IHJjdV9kZXJlZmVyZW5jZV9ydG5sKHBvcnRfcHJpdi1cXHUwMDNlbGFnKTtcXG4rXFxuK1xcdGlmIChsYWcgXFx1MDAyNlxcdTAwMjYgbGFnLVxcdTAwM2Vib25kX2RldiA9PSBkZXYpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRpZiAocG9ydF9wcml2LVxcdTAwM2VuZXRkZXYgPT0gZGV2KVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiAjZW5kaWZcXHQvKiBfX0VUSFNXX0ggKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwc3ctY21kLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBzdy1jbWQuaFxcbmluZGV4IDM5N2Q1NWYyYmQ5OTUwLi45YTIwNTVjNjQ5ODNjZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBzdy1jbWQuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LWNtZC5oXFxuQEAgLTEyLDcgKzEyLDcgQEBcXG4gXFxuIC8qIERQU1cgVmVyc2lvbiAqL1xcbiAjZGVmaW5lIERQU1dfVkVSX01BSk9SXFx0XFx0OFxcbi0jZGVmaW5lIERQU1dfVkVSX01JTk9SXFx0XFx0OVxcbisjZGVmaW5lIERQU1dfVkVSX01JTk9SXFx0XFx0MTNcXG4gXFxuICNkZWZpbmUgRFBTV19DTURfQkFTRV9WRVJTSU9OXFx0MVxcbiAjZGVmaW5lIERQU1dfQ01EX1ZFUlNJT05fMlxcdDJcXG5AQCAtOTIsMTEgKzkyLDE0IEBAXFxuICNkZWZpbmUgRFBTV19DTURJRF9DVFJMX0lGX1NFVF9QT09MUyAgICAgICAgRFBTV19DTURfSUQoMHgwQTEpXFxuICNkZWZpbmUgRFBTV19DTURJRF9DVFJMX0lGX0VOQUJMRSAgICAgICAgICAgRFBTV19DTURfSUQoMHgwQTIpXFxuICNkZWZpbmUgRFBTV19DTURJRF9DVFJMX0lGX0RJU0FCTEUgICAgICAgICAgRFBTV19DTURfSUQoMHgwQTMpXFxuKyNkZWZpbmUgRFBTV19DTURJRF9TRVRfTEFHICAgICAgICAgICAgICAgICAgRFBTV19DTURfVjIoMHgwQTQpXFxuICNkZWZpbmUgRFBTV19DTURJRF9DVFJMX0lGX1NFVF9RVUVVRSAgICAgICAgRFBTV19DTURfSUQoMHgwQTYpXFxuIFxcbiAjZGVmaW5lIERQU1dfQ01ESURfU0VUX0VHUkVTU19GTE9PRCAgICAgICAgIERQU1dfQ01EX0lEKDB4MEFDKVxcbiAjZGVmaW5lIERQU1dfQ01ESURfSUZfU0VUX0xFQVJOSU5HX01PREUgICAgIERQU1dfQ01EX0lEKDB4MEFEKVxcbiBcXG4rI2RlZmluZSBEUFNXX0NNRElEX0lGX1NFVF9MQUdfU1RBVEUgICAgICAgICBEUFNXX0NNRF9JRCgweDBCMClcXG4rXFxuIC8qIE1hY3JvcyBmb3IgYWNjZXNzaW5nIGNvbW1hbmQgZmllbGRzIHNtYWxsZXIgdGhhbiAxYnl0ZSAqL1xcbiAjZGVmaW5lIERQU1dfTUFTSyhmaWVsZCkgICAgICAgIFxcXFxcXG4gXFx0R0VOTUFTSyhEUFNXXyMjZmllbGQjI19TSElGVCArIERQU1dfIyNmaWVsZCMjX1NJWkUgLSAxLCBcXFxcXFxuQEAgLTU1Miw1ICs1NTUsMTggQEAgc3RydWN0IGRwc3dfY21kX2lmX3JlZmxlY3Rpb24ge1xcbiBcXHQvKiBvbmx5IDIgYml0cyBmcm9tIHRoZSBMU0IgKi9cXG4gXFx0dTggZmlsdGVyO1xcbiB9O1xcbitcXG4rc3RydWN0IGRwc3dfY21kX2xhZyB7XFxuK1xcdHU4IGdyb3VwX2lkO1xcbitcXHR1OCBudW1faWZzO1xcbitcXHR1OCBwYWRbNl07XFxuK1xcdHU4IGlmX2lkW0RQU1dfTUFYX0xBR19JRlNdO1xcbitcXHR1OCBwaGFzZTtcXG4rfTtcXG4rXFxuK3N0cnVjdCBkcHN3X2NtZF9pZl9zZXRfbGFnX3N0YXRlIHtcXG4rXFx0X19sZTE2IGlmX2lkO1xcbitcXHR1OCB0eF9lbmFibGVkO1xcbit9O1xcbiAjcHJhZ21hIHBhY2socG9wKVxcbiAjZW5kaWYgLyogX19GU0xfRFBTV19DTURfSCAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBzdy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwc3cuY1xcbmluZGV4IGFiOTIxZDc1ZGViMmU4Li5mNzVjYmRjZTQyYmEyZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBzdy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwc3cuY1xcbkBAIC0xNjU5LDMgKzE2NTksNjMgQEAgaW50IGRwc3dfaWZfcmVtb3ZlX3JlZmxlY3Rpb24oc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHUzMiBjbWRfZmxhZ3MsIHUxNiB0b2tlbixcXG4gXFxuIFxcdHJldHVybiBtY19zZW5kX2NvbW1hbmQobWNfaW8sIFxcdTAwMjZjbWQpO1xcbiB9XFxuK1xcbisvKipcXG4rICogZHBzd19sYWdfc2V0KCkgLSBTZXQgTEFHIGNvbmZpZ3VyYXRpb25cXG4rICogQG1jX2lvOlxcdFBvaW50ZXIgdG8gTUMgcG9ydGFsJ3MgSS9PIG9iamVjdFxcbisgKiBAY21kX2ZsYWdzOlxcdENvbW1hbmQgZmxhZ3M7IG9uZSBvciBtb3JlIG9mICdNQ19DTURfRkxBR18nXFxuKyAqIEB0b2tlbjpcXHRUb2tlbiBvZiBEUFNXIG9iamVjdFxcbisgKiBAY2ZnOlxcdHBvaW50ZXIgdG8gTEFHIGNvbmZpZ3VyYXRpb25cXG4rICpcXG4rICogUmV0dXJuOiAgICcwJyBvbiBTdWNjZXNzOyBFcnJvciBjb2RlIG90aGVyd2lzZS5cXG4rICovXFxuK2ludCBkcHN3X2xhZ19zZXQoc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHUzMiBjbWRfZmxhZ3MsIHUxNiB0b2tlbixcXG4rXFx0XFx0IGNvbnN0IHN0cnVjdCBkcHN3X2xhZ19jZmcgKmNmZylcXG4re1xcbitcXHRzdHJ1Y3QgZnNsX21jX2NvbW1hbmQgY21kID0geyAwIH07XFxuK1xcdHN0cnVjdCBkcHN3X2NtZF9sYWcgKmNtZF9wYXJhbXM7XFxuK1xcdGludCBpID0gMDtcXG4rXFxuK1xcdGNtZC5oZWFkZXIgPSBtY19lbmNvZGVfY21kX2hlYWRlcihEUFNXX0NNRElEX1NFVF9MQUcsIGNtZF9mbGFncywgdG9rZW4pO1xcbitcXG4rXFx0aWYgKGNmZy1cXHUwMDNlbnVtX2lmcyBcXHUwMDNlIERQU1dfTUFYX0xBR19JRlMpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGNtZF9wYXJhbXMgPSAoc3RydWN0IGRwc3dfY21kX2xhZyAqKWNtZC5wYXJhbXM7XFxuK1xcdGNtZF9wYXJhbXMtXFx1MDAzZWdyb3VwX2lkID0gY2ZnLVxcdTAwM2Vncm91cF9pZDtcXG4rXFx0Y21kX3BhcmFtcy1cXHUwMDNlbnVtX2lmcyA9IGNmZy1cXHUwMDNlbnVtX2lmcztcXG4rXFx0Y21kX3BhcmFtcy1cXHUwMDNlcGhhc2UgPSBjZmctXFx1MDAzZXBoYXNlO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNmZy1cXHUwMDNlbnVtX2lmczsgaSsrKVxcbitcXHRcXHRjbWRfcGFyYW1zLVxcdTAwM2VpZl9pZFtpXSA9IGNmZy1cXHUwMDNlaWZfaWRbaV07XFxuK1xcbitcXHRyZXR1cm4gbWNfc2VuZF9jb21tYW5kKG1jX2lvLCBcXHUwMDI2Y21kKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGRwc3dfaWZfc2V0X2xhZ19zdGF0ZSgpIC0gQ2hhbmdlIHBlciBwb3J0IExBRyBzdGF0ZVxcbisgKiBAbWNfaW86ICAgICAgUG9pbnRlciB0byBNQyBwb3J0YWwncyBJL08gb2JqZWN0XFxuKyAqIEBjbWRfZmxhZ3M6ICBDb21tYW5kIGZsYWdzOyBvbmUgb3IgbW9yZSBvZiAnTUNfQ01EX0ZMQUdfJ1xcbisgKiBAdG9rZW46ICAgICAgVG9rZW4gb2YgRFBTVyBvYmplY3RcXG4rICogQGlmX2lkOiAgICAgIElEIG9mIHRoZSBzd2l0Y2ggaW50ZXJmYWNlXFxuKyAqIEB0eF9lbmFibGVkOiBWYWx1ZSBvZiB0aGUgcGVyIHBvcnQgTEFHIHN0YXRlXFxuKyAqICAgICAtIDAgaWYgdGhlIGludGVyZmFjZSB3aWxsIG5vdCBiZSBhY3RpdmUgYXMgcGFydCBvZiB0aGUgTEFHIGdyb3VwXFxuKyAqICAgICAtIDEgaWYgdGhlIGludGVyZmFjZSB3aWxsIGJlIGFjdGl2ZSBpbiB0aGUgTEFHIGdyb3VwXFxuKyAqXFxuKyAqIFJldHVybjogICAnMCcgb24gU3VjY2VzczsgRXJyb3IgY29kZSBvdGhlcndpc2UuXFxuKyAqL1xcbitpbnQgZHBzd19pZl9zZXRfbGFnX3N0YXRlKHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLCB1MzIgY21kX2ZsYWdzLCB1MTYgdG9rZW4sXFxuK1xcdFxcdFxcdCAgdTE2IGlmX2lkLCB1OCB0eF9lbmFibGVkKVxcbit7XFxuK1xcdHN0cnVjdCBkcHN3X2NtZF9pZl9zZXRfbGFnX3N0YXRlICpjbWRfcGFyYW1zO1xcbitcXHRzdHJ1Y3QgZnNsX21jX2NvbW1hbmQgY21kID0geyAwIH07XFxuK1xcbitcXHRjbWQuaGVhZGVyID0gbWNfZW5jb2RlX2NtZF9oZWFkZXIoRFBTV19DTURJRF9JRl9TRVRfTEFHX1NUQVRFLFxcbitcXHRcXHRcXHRcXHRcXHQgIGNtZF9mbGFncywgdG9rZW4pO1xcbitcXG4rXFx0Y21kX3BhcmFtcyA9IChzdHJ1Y3QgZHBzd19jbWRfaWZfc2V0X2xhZ19zdGF0ZSAqKWNtZC5wYXJhbXM7XFxuK1xcdGNtZF9wYXJhbXMtXFx1MDAzZWlmX2lkID0gY3B1X3RvX2xlMTYoaWZfaWQpO1xcbitcXHRjbWRfcGFyYW1zLVxcdTAwM2V0eF9lbmFibGVkID0gdHhfZW5hYmxlZDtcXG4rXFxuK1xcdHJldHVybiBtY19zZW5kX2NvbW1hbmQobWNfaW8sIFxcdTAwMjZjbWQpO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBzdy5oXFxuaW5kZXggYjkwYmQzNjNmNDdhMTkuLjg5ZjAyNjdkZThlOWJkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBzdy5oXFxuQEAgLTIwLDYgKzIwLDggQEAgc3RydWN0IGZzbF9tY19pbztcXG4gXFxuICNkZWZpbmUgRFBTV19NQVhfSUZcXHRcXHQ2NFxcbiBcXG4rI2RlZmluZSBEUFNXX01BWF9MQUdfSUZTXFx0OFxcbitcXG4gaW50IGRwc3dfb3BlbihzdHJ1Y3QgZnNsX21jX2lvICptY19pbywgdTMyIGNtZF9mbGFncywgaW50IGRwc3dfaWQsIHUxNiAqdG9rZW4pO1xcbiBcXG4gaW50IGRwc3dfY2xvc2Uoc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHUzMiBjbWRfZmxhZ3MsIHUxNiB0b2tlbik7XFxuQEAgLTc4OCw0ICs3OTAsMzIgQEAgaW50IGRwc3dfaWZfYWRkX3JlZmxlY3Rpb24oc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHUzMiBjbWRfZmxhZ3MsIHUxNiB0b2tlbixcXG4gXFxuIGludCBkcHN3X2lmX3JlbW92ZV9yZWZsZWN0aW9uKHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLCB1MzIgY21kX2ZsYWdzLCB1MTYgdG9rZW4sXFxuIFxcdFxcdFxcdCAgICAgIHUxNiBpZl9pZCwgY29uc3Qgc3RydWN0IGRwc3dfcmVmbGVjdGlvbl9jZmcgKmNmZyk7XFxuK1xcbisvKiBMaW5rIEFnZ3JlZ2F0aW9uIEdyb3VwIGNvbmZpZ3VyYXRpb24gKi9cXG4rXFxuKyNkZWZpbmUgRFBTV19MQUdfU0VUX1BIQVNFX0FQUExZIDBcXG4rI2RlZmluZSBEUFNXX0xBR19TRVRfUEhBU0VfQ0hFQ0sgMVxcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBkcHN3X2xhZ19jZmcgLSBDb25maWd1cmF0aW9uIHN0cnVjdHVyZSBmb3IgYSBMQUcgZ3JvdXBcXG4rICogQGdyb3VwX2lkOiBMaW5rIGFnZ3JlZ2F0aW9uIGdyb3VwIElELiBWYWxpZCB2YWx1ZXMgYXJlIGluIHRoZVxcbisgKiBbMSwgRFBTV19NQVhfTEFHX0lGU10gcmFuZ2UuXFxuKyAqIEBudW1faWZzOiBOdW1iZXIgb2YgaW50ZXJmYWNlcyBpbiB0aGlzIExBRyBncm91cCwgdmFsaWQgcmFuZ2UgaXNcXG4rICogWzAsIERQU1dfTUFYX0xBR19JRlNdLlxcbisgKiBAaWZfaWQ6IEFycmF5IGNvbnRhaW5pbmcgdGhlIGludGVyZmFjZSBJRHMgb2YgdGhlIHBvcnRzIHBhcnQgb2YgYSBMQUcgZ3JvdXBcXG4rICogQHBoYXNlOiBVc2UgRFBTV19MQUdfU0VUX1BIQVNFX0FQUExZIGZvciBMQUcgY29uZmlndXJhdGlvbiBwcm9jZXNzaW5nIG9yXFxuKyAqIERQU1dfTEFHX1NFVF9QSEFTRV9DSEVDSyBmb3IgTEFHIGNvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbi5cXG4rICovXFxuK3N0cnVjdCBkcHN3X2xhZ19jZmcge1xcbitcXHR1OCBncm91cF9pZDtcXG4rXFx0dTggbnVtX2lmcztcXG4rXFx0dTggaWZfaWRbRFBTV19NQVhfTEFHX0lGU107XFxuK1xcdHU4IHBoYXNlO1xcbit9O1xcbitcXG4raW50IGRwc3dfbGFnX3NldChzdHJ1Y3QgZnNsX21jX2lvICptY19pbywgdTMyIGNtZF9mbGFncywgdTE2IHRva2VuLFxcbitcXHRcXHQgY29uc3Qgc3RydWN0IGRwc3dfbGFnX2NmZyAqY2ZnKTtcXG4rXFxuK2ludCBkcHN3X2lmX3NldF9sYWdfc3RhdGUoc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHUzMiBjbWRfZmxhZ3MsIHUxNiB0b2tlbixcXG4rXFx0XFx0XFx0ICB1MTYgaWZfaWQsIHU4IHR4X2VuYWJsZWQpO1xcbiAjZW5kaWYgLyogX19GU0xfRFBTV19IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjUyOjEyLjExMjQ5MzUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjE1NjM2ODE0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEZyZWVzY2FsZSBEUEFBMiBzd2l0Y2ggZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItc3dpdGNoLmMpIHRvIGFkZCBMQUcgb2ZmbG9hZCBzdXBwb3J0LiBUaGlzIGRyaXZlciBkZXBlbmRzIG9uIHRoZSBmc2wtbWMgYnVzIChGU0xfTUNfQlVTKSwgd2hpY2ggaXMgc3BlY2lmaWMgdG8gTlhQIFFvcklRIERQQUEyIGhhcmR3YXJlIChBUkNIX0xBWUVSU0NBUEUpLiBUaGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoaXMgaGFyZHdhcmUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWQ4OTc5YzdhNWZiYTNlZTRkZjJmMTVmYmJiZjEwYzc0OGQxNGU5N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVuIDI5IDExOjUyOjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXN3aXRjaC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXN3aXRjaC5jXG5pbmRleCA4NThiYTg0NGFjNTE2NC4uODMyMGIyNmMzZjcyNmUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItc3dpdGNoLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guY1xuQEAgLTI1LDYgKzI1LDkgQEBcbiBcbiAjZGVmaW5lIERFRkFVTFRfVkxBTl9JRFx0XHRcdDFcbiBcbitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGRwYWEyX3N3aXRjaF9wb3J0X3N3aXRjaGRldl9uYjtcbitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGRwYWEyX3N3aXRjaF9wb3J0X3N3aXRjaGRldl9ibG9ja2luZ19uYjtcbitcbiBzdGF0aWMgdTE2IGRwYWEyX3N3aXRjaF9wb3J0X2dldF9mZGJfaWQoc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2KVxuIHtcbiBcdHJldHVybiBwb3J0X3ByaXYtXHUwMDNlZmRiLVx1MDAzZWZkYl9pZDtcbkBAIC01MSw2ICs1NCwxNyBAQCBkcGFhMl9zd2l0Y2hfZmlsdGVyX2Jsb2NrX2dldF91bnVzZWQoc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3KVxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuK3N0YXRpYyBzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqXG4rZHBhYTJfc3dpdGNoX2xhZ19nZXRfdW51c2VkKHN0cnVjdCBldGhzd19jb3JlICpldGhzdylcbit7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGV0aHN3LVx1MDAzZXN3X2F0dHIubnVtX2lmczsgaSsrKVxuK1x0XHRpZiAoIWV0aHN3LVx1MDAzZWxhZ3NbaV0uaW5fdXNlKVxuK1x0XHRcdHJldHVybiBcdTAwMjZldGhzdy1cdTAwM2VsYWdzW2ldO1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuIHN0YXRpYyBib29sIGRwYWEyX3N3aXRjaF9mZGJfaW5fdXNlX2J5X290aGVycyhzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3csXG4gXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBkcGFhMl9zd2l0Y2hfZmRiICpmZGIsXG4gXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKmV4Y2VwdClcbkBAIC03MSw5ICs4NSw5IEBAIHN0YXRpYyBzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZkYiAqXG4gZHBhYTJfc3dpdGNoX2ZkYl9mb3Jfam9pbihzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYsXG4gXHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqdXBwZXJfZGV2KVxuIHtcbi1cdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKm90aGVyX3BvcnRfcHJpdjtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICpvdGhlcl9kZXY7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkICppdGVyO1xuK1x0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqb3RoZXJfcG9ydF9wcml2ID0gTlVMTDtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpvdGhlcl9kZXYsICpvdGhlcl9kZXYyO1xuK1x0c3RydWN0IGxpc3RfaGVhZCAqaXRlciwgKml0ZXIyO1xuIFxuIFx0LyogVGhlIGJlbG93IGNhbGwgdG8gbmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX2RldigpIGRlbWFuZHMgdGhlIFJUTkwgbG9ja1xuIFx0ICogYmVpbmcgaGVsZC4gQXNzZXJ0IG9uIGl0IHNvIHRoYXQgaXQncyBlYXNpZXIgdG8gY2F0Y2ggbmV3IGNvZGVcbkBAIC04MiwxNyArOTYsMzIgQEAgZHBhYTJfc3dpdGNoX2ZkYl9mb3Jfam9pbihzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYsXG4gXHRBU1NFUlRfUlROTCgpO1xuIFxuIFx0LyogSWYgcGFydCBvZiBhIGJyaWRnZSwgdXNlIHRoZSBGREIgb2YgdGhlIGZpcnN0IGRwYWEyIHN3aXRjaCBpbnRlcmZhY2Vcbi1cdCAqIHRvIGJlIHByZXNlbnQgaW4gdGhhdCBicmlkZ2VcbitcdCAqIHRvIGJlIHByZXNlbnQgaW4gdGhhdCBicmlkZ2UuIFRoZSBzZWFyY2ggZGVzY2VuZHMgb25lIGxldmVsIHRocm91Z2hcbitcdCAqIGEgYnJpZGdlZCBib25kJ3MgbG93ZXJzIGFzIHdlbGwuXG4gXHQgKi9cbiBcdG5ldGRldl9mb3JfZWFjaF9sb3dlcl9kZXYodXBwZXJfZGV2LCBvdGhlcl9kZXYsIGl0ZXIpIHtcbi1cdFx0aWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2sob3RoZXJfZGV2KSlcbi1cdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKG5ldGlmX2lzX2xhZ19tYXN0ZXIob3RoZXJfZGV2KSkge1xuK1x0XHRcdG5ldGRldl9mb3JfZWFjaF9sb3dlcl9kZXYob3RoZXJfZGV2LCBvdGhlcl9kZXYyLCBpdGVyMikge1xuK1x0XHRcdFx0aWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2sob3RoZXJfZGV2MikpXG4rXHRcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRpZiAob3RoZXJfZGV2ID09IHBvcnRfcHJpdi1cdTAwM2VuZXRkZXYpXG4tXHRcdFx0Y29udGludWU7XG4rXHRcdFx0XHRpZiAob3RoZXJfZGV2MiA9PSBwb3J0X3ByaXYtXHUwMDNlbmV0ZGV2KVxuK1x0XHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0b3RoZXJfcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYob3RoZXJfZGV2KTtcbi1cdFx0cmV0dXJuIG90aGVyX3BvcnRfcHJpdi1cdTAwM2VmZGI7XG4rXHRcdFx0XHRvdGhlcl9wb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihvdGhlcl9kZXYyKTtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcdFx0fSBlbHNlIHtcbitcdFx0XHRpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhvdGhlcl9kZXYpKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXG4rXHRcdFx0aWYgKG90aGVyX2RldiA9PSBwb3J0X3ByaXYtXHUwMDNlbmV0ZGV2KVxuK1x0XHRcdFx0Y29udGludWU7XG4rXG4rXHRcdFx0b3RoZXJfcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYob3RoZXJfZGV2KTtcbitcdFx0fVxuK1x0XHRpZiAob3RoZXJfcG9ydF9wcml2KVxuK1x0XHRcdHJldHVybiBvdGhlcl9wb3J0X3ByaXYtXHUwMDNlZmRiO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHBvcnRfcHJpdi1cdTAwM2VmZGI7XG5AQCAtNTM3LDYgKzU2NiwxMDMgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsX21jKHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdixcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuK3N0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2FkZChzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYsXG4rXHRcdFx0XHQgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXG4re1xuK1x0aW50IGVycjtcbitcbitcdGlmIChpc191bmljYXN0X2V0aGVyX2FkZHIoYWRkcikpXG4rXHRcdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9hZGRfdWMocG9ydF9wcml2LCBhZGRyKTtcbitcdGVsc2VcbitcdFx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2FkZF9tYyhwb3J0X3ByaXYsIGFkZHIpO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsKHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdixcbitcdFx0XHRcdCAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcilcbit7XG4rXHRpZiAoaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGFkZHIpKVxuK1x0XHRyZXR1cm4gZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2RlbF91Yyhwb3J0X3ByaXYsIGFkZHIpO1xuK1x0ZWxzZVxuK1x0XHRyZXR1cm4gZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2RlbF9tYyhwb3J0X3ByaXYsIGFkZHIpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IGRwYWEyX21hY19hZGRyICpcbitkcGFhMl9zd2l0Y2hfbWFjX2FkZHJfZmluZChzdHJ1Y3QgbGlzdF9oZWFkICphZGRyX2xpc3QsXG4rXHRcdFx0ICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgdTE2IHZpZClcbit7XG4rXHRzdHJ1Y3QgZHBhYTJfbWFjX2FkZHIgKmE7XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGEsIGFkZHJfbGlzdCwgbGlzdClcbitcdFx0aWYgKGV0aGVyX2FkZHJfZXF1YWwoYS1cdTAwM2VhZGRyLCBhZGRyKSBcdTAwMjZcdTAwMjYgYS1cdTAwM2V2aWQgPT0gdmlkKVxuK1x0XHRcdHJldHVybiBhO1xuK1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX2xhZ19mZGJfYWRkKHN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWcsXG4rXHRcdFx0XHQgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgdTE2IHZpZClcbit7XG4rXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBsYWctXHUwMDNlcHJpbWFyeTtcbitcdHN0cnVjdCBkcGFhMl9tYWNfYWRkciAqYTtcbitcdGludCBlcnIgPSAwO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZsYWctXHUwMDNlZmRiX2xvY2spO1xuK1xuK1x0YSA9IGRwYWEyX3N3aXRjaF9tYWNfYWRkcl9maW5kKFx1MDAyNmxhZy1cdTAwM2VmZGJzLCBhZGRyLCB2aWQpO1xuK1x0aWYgKGEpIHtcbitcdFx0cmVmY291bnRfaW5jKFx1MDAyNmEtXHUwMDNlcmVmY291bnQpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGEgPSBremFsbG9jKHNpemVvZigqYSksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFhKSB7XG4rXHRcdGVyciA9IC1FTk9NRU07XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2FkZChwb3J0X3ByaXYsIGFkZHIpO1xuK1x0aWYgKGVycikge1xuK1x0XHRrZnJlZShhKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRldGhlcl9hZGRyX2NvcHkoYS1cdTAwM2VhZGRyLCBhZGRyKTtcbitcdGEtXHUwMDNldmlkID0gdmlkO1xuK1x0cmVmY291bnRfc2V0KFx1MDAyNmEtXHUwMDNlcmVmY291bnQsIDEpO1xuK1x0bGlzdF9hZGRfdGFpbChcdTAwMjZhLVx1MDAzZWxpc3QsIFx1MDAyNmxhZy1cdTAwM2VmZGJzKTtcbitcbitvdXQ6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2bGFnLVx1MDAzZWZkYl9sb2NrKTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9sYWdfZmRiX2RlbChzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqbGFnLFxuK1x0XHRcdFx0ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCB1MTYgdmlkKVxuK3tcbitcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IGxhZy1cdTAwM2VwcmltYXJ5O1xuK1x0c3RydWN0IGRwYWEyX21hY19hZGRyICphO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZsYWctXHUwMDNlZmRiX2xvY2spO1xuK1xuK1x0YSA9IGRwYWEyX3N3aXRjaF9tYWNfYWRkcl9maW5kKFx1MDAyNmxhZy1cdTAwM2VmZGJzLCBhZGRyLCB2aWQpO1xuK1x0aWYgKCFhKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlmICghcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmEtXHUwMDNlcmVmY291bnQpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGxpc3RfZGVsKFx1MDAyNmEtXHUwMDNlbGlzdCk7XG4rXHRrZnJlZShhKTtcbitcbitcdGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9kZWwocG9ydF9wcml2LCBhZGRyKTtcbitcbitvdXQ6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2bGFnLVx1MDAzZWZkYl9sb2NrKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgZHBhYTJfc3dpdGNoX3BvcnRfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpXG4ge1xuQEAgLTE0ODUsNiArMTYxMSwzMyBAQCBib29sIGRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0cmV0dXJuIG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzID09IFx1MDAyNmRwYWEyX3N3aXRjaF9wb3J0X29wcztcbiB9XG4gXG4rc3RhdGljIGJvb2wgZHBhYTJfc3dpdGNoX2ZvcmVpZ25fZGV2X2NoZWNrKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpmb3JlaWduX2Rldilcbit7XG4rXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0c3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3ID0gcG9ydF9wcml2LVx1MDAzZWV0aHN3X2RhdGE7XG4rXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpvdGhlcl9wb3J0O1xuK1x0aW50IGk7XG4rXG4rXHRpZiAobmV0aWZfaXNfYnJpZGdlX21hc3Rlcihmb3JlaWduX2RldikpXG4rXHRcdGlmIChwb3J0X3ByaXYtXHUwMDNlZmRiLVx1MDAzZWJyaWRnZV9kZXYgPT0gZm9yZWlnbl9kZXYpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKG5ldGlmX2lzX2JyaWRnZV9wb3J0KGZvcmVpZ25fZGV2KSkge1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBldGhzdy1cdTAwM2Vzd19hdHRyLm51bV9pZnM7IGkrKykge1xuK1x0XHRcdG90aGVyX3BvcnQgPSBldGhzdy1cdTAwM2Vwb3J0c1tpXTtcbitcbitcdFx0XHRpZiAoIW90aGVyX3BvcnQpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRpZiAoZHBhYTJfc3dpdGNoX3BvcnRfb2ZmbG9hZHNfYnJpZGdlX3BvcnQob3RoZXJfcG9ydCxcbitcdFx0XHRcdFx0XHRcdFx0ICAgZm9yZWlnbl9kZXYpKVxuK1x0XHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9jb25uZWN0X21hYyhzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYpXG4ge1xuIFx0c3RydWN0IGZzbF9tY19kZXZpY2UgKmRwc3dfcG9ydF9kZXYsICpkcG1hY19kZXY7XG5AQCAtMTg2MCw1MSArMjAxMywzMiBAQCBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfdmxhbnNfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdCAgdmxhbi1cdTAwM2VjaGFuZ2VkKTtcbiB9XG4gXG4tc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9sb29rdXBfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgaXNfdWMsXG4tXHRcdFx0XHRcdCAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKVxuLXtcbi1cdHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpsaXN0ID0gKGlzX3VjKSA/IFx1MDAyNm5ldGRldi1cdTAwM2V1YyA6IFx1MDAyNm5ldGRldi1cdTAwM2VtYztcbi1cdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XG4tXG4tXHRuZXRpZl9hZGRyX2xvY2tfYmgobmV0ZGV2KTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkoaGEsIFx1MDAyNmxpc3QtXHUwMDNlbGlzdCwgbGlzdCkge1xuLVx0XHRpZiAoZXRoZXJfYWRkcl9lcXVhbChoYS1cdTAwM2VhZGRyLCBhZGRyKSkge1xuLVx0XHRcdG5ldGlmX2FkZHJfdW5sb2NrX2JoKG5ldGRldik7XG4tXHRcdFx0cmV0dXJuIDE7XG4tXHRcdH1cbi1cdH1cbi1cdG5ldGlmX2FkZHJfdW5sb2NrX2JoKG5ldGRldik7XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4gc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9tZGJfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfbWRiICptZGIpXG4ge1xuIFx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbi1cdGludCBlcnI7XG4rXHRzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqbGFnO1xuIFxuLVx0LyogQ2hlY2sgaWYgYWRkcmVzcyBpcyBhbHJlYWR5IHNldCBvbiB0aGlzIHBvcnQgKi9cbi1cdGlmIChkcGFhMl9zd2l0Y2hfcG9ydF9sb29rdXBfYWRkcmVzcyhuZXRkZXYsIDAsIG1kYi1cdTAwM2VhZGRyKSlcbi1cdFx0cmV0dXJuIC1FRVhJU1Q7XG4tXG4tXHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfYWRkX21jKHBvcnRfcHJpdiwgbWRiLVx1MDAzZWFkZHIpO1xuLVx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbi1cbi1cdGVyciA9IGRldl9tY19hZGQobmV0ZGV2LCBtZGItXHUwMDNlYWRkcik7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcImRldl9tY19hZGQgZXJyICVkXFxuXCIsIGVycik7XG4tXHRcdGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9kZWxfbWMocG9ydF9wcml2LCBtZGItXHUwMDNlYWRkcik7XG4tXHR9XG4tXG4tXHRyZXR1cm4gZXJyO1xuK1x0bGFnID0gcnRubF9kZXJlZmVyZW5jZShwb3J0X3ByaXYtXHUwMDNlbGFnKTtcbitcdGlmIChsYWcpXG4rXHRcdHJldHVybiBkcGFhMl9zd2l0Y2hfbGFnX2ZkYl9hZGQobGFnLCBtZGItXHUwMDNlYWRkciwgbWRiLVx1MDAzZXZpZCk7XG4rXHRlbHNlXG4rXHRcdHJldHVybiBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfYWRkKHBvcnRfcHJpdiwgbWRiLVx1MDAzZWFkZHIpO1xuIH1cbiBcbi1zdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X29ial9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi1cdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmogKm9iailcbitzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X29ial9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgY29uc3Qgdm9pZCAqY3R4LFxuK1x0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X29iaiAqb2JqLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuK1x0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcdGludCBlcnI7XG4gXG4rXHRpZiAoY3R4IFx1MDAyNlx1MDAyNiBjdHggIT0gcG9ydF9wcml2KVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfb2ZmbG9hZHNfYnJpZGdlX3BvcnQocG9ydF9wcml2LCBvYmotXHUwMDNlb3JpZ19kZXYpKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4gXHRzd2l0Y2ggKG9iai1cdTAwM2VpZCkge1xuIFx0Y2FzZSBTV0lUQ0hERVZfT0JKX0lEX1BPUlRfVkxBTjpcbiBcdFx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfdmxhbnNfYWRkKG5ldGRldixcbkBAIC0yMDAwLDI5ICsyMTM0LDI5IEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfbWRiX2RlbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X29ial9wb3J0X21kYiAqbWRiKVxuIHtcbiBcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4tXHRpbnQgZXJyO1xuLVxuLVx0aWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9sb29rdXBfYWRkcmVzcyhuZXRkZXYsIDAsIG1kYi1cdTAwM2VhZGRyKSlcbi1cdFx0cmV0dXJuIC1FTk9FTlQ7XG4tXG4tXHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsX21jKHBvcnRfcHJpdiwgbWRiLVx1MDAzZWFkZHIpO1xuLVx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbitcdHN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWc7XG4gXG4tXHRlcnIgPSBkZXZfbWNfZGVsKG5ldGRldiwgbWRiLVx1MDAzZWFkZHIpO1xuLVx0aWYgKGVycikge1xuLVx0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJkZXZfbWNfZGVsIGVyciAlZFxcblwiLCBlcnIpO1xuLVx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuK1x0bGFnID0gcnRubF9kZXJlZmVyZW5jZShwb3J0X3ByaXYtXHUwMDNlbGFnKTtcbitcdGlmIChsYWcpXG4rXHRcdGRwYWEyX3N3aXRjaF9sYWdfZmRiX2RlbChsYWcsIG1kYi1cdTAwM2VhZGRyLCBtZGItXHUwMDNldmlkKTtcbitcdGVsc2VcbitcdFx0ZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2RlbChwb3J0X3ByaXYsIG1kYi1cdTAwM2VhZGRyKTtcbiBcbi1cdHJldHVybiBlcnI7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9vYmpfZGVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9vYmpfZGVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGNvbnN0IHZvaWQgKmN0eCxcbiBcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmogKm9iailcbiB7XG4rXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0aW50IGVycjtcbiBcbitcdGlmIChjdHggXHUwMDI2XHUwMDI2IGN0eCAhPSBwb3J0X3ByaXYpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9vZmZsb2Fkc19icmlkZ2VfcG9ydChwb3J0X3ByaXYsIG9iai1cdTAwM2VvcmlnX2RldikpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbiBcdHN3aXRjaCAob2JqLVx1MDAzZWlkKSB7XG4gXHRjYXNlIFNXSVRDSERFVl9PQkpfSURfUE9SVF9WTEFOOlxuIFx0XHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF92bGFuc19kZWwobmV0ZGV2LCBTV0lUQ0hERVZfT0JKX1BPUlRfVkxBTihvYmopKTtcbkBAIC0yMDQ4LDYgKzIxODIsMjEgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9hdHRyX3NldF9ldmVudChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0cmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8oZXJyKTtcbiB9XG4gXG4rc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpcbitkcGFhMl9zd2l0Y2hfcG9ydF90b19icmlkZ2VfcG9ydChzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYpXG4re1xuK1x0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZztcbitcbitcdGlmICghcG9ydF9wcml2LVx1MDAzZWZkYi1cdTAwM2VicmlkZ2VfZGV2KVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdGxhZyA9IHJ0bmxfZGVyZWZlcmVuY2UocG9ydF9wcml2LVx1MDAzZWxhZyk7XG4rXHRpZiAobGFnKVxuK1x0XHRyZXR1cm4gbGFnLVx1MDAzZWJvbmRfZGV2O1xuK1xuK1x0cmV0dXJuIHBvcnRfcHJpdi1cdTAwM2VuZXRkZXY7XG4rfVxuK1xuIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfYnJpZGdlX2pvaW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlICp1cHBlcl9kZXYsXG4gXHRcdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG5AQCAtMjA1NSw2ICsyMjA0LDcgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9icmlkZ2Vfam9pbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcdHN0cnVjdCBkcGFhMl9zd2l0Y2hfZmRiICpvbGRfZmRiID0gcG9ydF9wcml2LVx1MDAzZWZkYjtcbiBcdHN0cnVjdCBldGhzd19jb3JlICpldGhzdyA9IHBvcnRfcHJpdi1cdTAwM2VldGhzd19kYXRhO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmJycG9ydF9kZXY7XG4gXHRib29sIGxlYXJuX2VuYTtcbiBcdGludCBlcnI7XG4gXG5AQCAtMjA2Niw3ICsyMjE2LDggQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9icmlkZ2Vfam9pbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0ZHBhYTJfc3dpdGNoX3BvcnRfc2V0X2ZkYihwb3J0X3ByaXYsIHVwcGVyX2RldiwgdHJ1ZSk7XG4gXG4gXHQvKiBJbmhlcml0IHRoZSBpbml0aWFsIGJyaWRnZSBwb3J0IGxlYXJuaW5nIHN0YXRlICovXG4tXHRsZWFybl9lbmEgPSBicl9wb3J0X2ZsYWdfaXNfc2V0KG5ldGRldiwgQlJfTEVBUk5JTkcpO1xuK1x0YnJwb3J0X2RldiA9IGRwYWEyX3N3aXRjaF9wb3J0X3RvX2JyaWRnZV9wb3J0KHBvcnRfcHJpdik7XG4rXHRsZWFybl9lbmEgPSBicl9wb3J0X2ZsYWdfaXNfc2V0KGJycG9ydF9kZXYsIEJSX0xFQVJOSU5HKTtcbiBcdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X3NldF9sZWFybmluZyhwb3J0X3ByaXYsIGxlYXJuX2VuYSk7XG4gXHRwb3J0X3ByaXYtXHUwMDNlbGVhcm5fZW5hID0gbGVhcm5fZW5hO1xuIFxuQEAgLTIwODAsOCArMjIzMSwxMSBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2JyaWRnZV9qb2luKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9lZ3Jlc3NfZmxvb2Q7XG4gXG4tXHRlcnIgPSBzd2l0Y2hkZXZfYnJpZGdlX3BvcnRfb2ZmbG9hZChuZXRkZXYsIG5ldGRldiwgTlVMTCxcbi1cdFx0XHRcdFx0ICAgIE5VTEwsIE5VTEwsIGZhbHNlLCBleHRhY2spO1xuK1x0YnJwb3J0X2RldiA9IGRwYWEyX3N3aXRjaF9wb3J0X3RvX2JyaWRnZV9wb3J0KHBvcnRfcHJpdik7XG4rXHRlcnIgPSBzd2l0Y2hkZXZfYnJpZGdlX3BvcnRfb2ZmbG9hZChicnBvcnRfZGV2LCBuZXRkZXYsIHBvcnRfcHJpdixcbitcdFx0XHRcdFx0ICAgIFx1MDAyNmRwYWEyX3N3aXRjaF9wb3J0X3N3aXRjaGRldl9uYixcbitcdFx0XHRcdFx0ICAgIFx1MDAyNmRwYWEyX3N3aXRjaF9wb3J0X3N3aXRjaGRldl9ibG9ja2luZ19uYixcbitcdFx0XHRcdFx0ICAgIGZhbHNlLCBleHRhY2spO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfc3dpdGNoZGV2X29mZmxvYWQ7XG4gXG5AQCAtMjExNSw3ICsyMjY5LDIyIEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfcmVzdG9yZV9yeHZsYW4oc3RydWN0IG5ldF9kZXZpY2UgKnZkZXYsIGludCB2aWQsIHZvXG4gXG4gc3RhdGljIHZvaWQgZHBhYTJfc3dpdGNoX3BvcnRfcHJlX2JyaWRnZV9sZWF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbi1cdHN3aXRjaGRldl9icmlkZ2VfcG9ydF91bm9mZmxvYWQobmV0ZGV2LCBOVUxMLCBOVUxMLCBOVUxMKTtcbitcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3cgPSBwb3J0X3ByaXYtXHUwMDNlZXRoc3dfZGF0YTtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpicnBvcnRfZGV2O1xuK1xuK1x0YnJwb3J0X2RldiA9IGRwYWEyX3N3aXRjaF9wb3J0X3RvX2JyaWRnZV9wb3J0KHBvcnRfcHJpdik7XG4rXHRpZiAoIWJycG9ydF9kZXYpXG4rXHRcdHJldHVybjtcbitcbitcdHN3aXRjaGRldl9icmlkZ2VfcG9ydF91bm9mZmxvYWQoYnJwb3J0X2RldiwgcG9ydF9wcml2LFxuK1x0XHRcdFx0XHRcdTAwMjZkcGFhMl9zd2l0Y2hfcG9ydF9zd2l0Y2hkZXZfbmIsXG4rXHRcdFx0XHRcdFx1MDAyNmRwYWEyX3N3aXRjaF9wb3J0X3N3aXRjaGRldl9ibG9ja2luZ19uYik7XG4rXG4rXHQvKiBNYWtlIHN1cmUgdGhhdCBhbnkgRkRCIGFkZC9kZWwgb3BlcmF0aW9ucyBhcmUgY29tcGxldGVkIGJlZm9yZSB0aGVcbitcdCAqIGJyaWRnZSBsYXlvdXQgY2hhbmdlc1xuK1x0ICovXG4rXHRmbHVzaF93b3JrcXVldWUoZXRoc3ctXHUwMDNld29ya3F1ZXVlKTtcbiB9XG4gXG4gc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9icmlkZ2VfbGVhdmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbkBAIC0yMTc3LDMwICsyMzQ2LDUzIEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfYnJpZGdlX2xlYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRcdFx0XHRcdCAgZmFsc2UpO1xuIH1cbiBcbitzdGF0aWMgaW50XG4rZHBhYTJfc3dpdGNoX2hhdmVfdmxhbl91cHBlcihzdHJ1Y3QgbmV0X2RldmljZSAqdXBwZXJfZGV2LFxuK1x0XHRcdCAgICAgX19hbHdheXNfdW51c2VkIHN0cnVjdCBuZXRkZXZfbmVzdGVkX3ByaXYgKnByaXYpXG4re1xuK1x0cmV0dXJuIGlzX3ZsYW5fZGV2KHVwcGVyX2Rldik7XG4rfVxuK1xuIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3ByZXZlbnRfYnJpZGdpbmdfd2l0aF84MDIxcV91cHBlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICp1cHBlcl9kZXY7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkICppdGVyO1xuK1x0c3RydWN0IG5ldGRldl9uZXN0ZWRfcHJpdiBwcml2ID0ge307XG4gXG4gXHQvKiBSQ1UgcmVhZCBsb2NrIG5vdCBuZWNlc3NhcnkgYmVjYXVzZSB3ZSBoYXZlIHdyaXRlLXNpZGUgcHJvdGVjdGlvblxuLVx0ICogKHJ0bmxfbXV0ZXgpLCBob3dldmVyIGEgbm9uLXJjdSBpdGVyYXRvciBkb2VzIG5vdCBleGlzdC5cbitcdCAqIChydG5sX211dGV4KSwgaG93ZXZlciBhIG5vbi1yY3UgaXRlcmF0b3IgZG9lcyBub3QgZXhpc3QuIFdhbGsgdGhlXG4rXHQgKiBlbnRpcmUgdXBwZXIgY2hhaW4gc28gdGhhdCBhIFZMQU4gZGV2aWNlIHN0YWNrZWQgb24gYSBpbnRlcm1lZGlhdGVcbitcdCAqIGJvbmQgaXMgY2F1Z2h0IHRvby5cbiBcdCAqL1xuLVx0bmV0ZGV2X2Zvcl9lYWNoX3VwcGVyX2Rldl9yY3UobmV0ZGV2LCB1cHBlcl9kZXYsIGl0ZXIpXG4tXHRcdGlmIChpc192bGFuX2Rldih1cHBlcl9kZXYpKVxuLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdGlmIChuZXRkZXZfd2Fsa19hbGxfdXBwZXJfZGV2X3JjdShuZXRkZXYsIGRwYWEyX3N3aXRjaF9oYXZlX3ZsYW5fdXBwZXIsXG4rXHRcdFx0XHRcdCAgXHUwMDI2cHJpdikpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9jaGVja19kcHN3X2luc3RhbmNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0ZGV2X25lc3RlZF9wcml2ICpwcml2KVxuK3tcbitcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IChzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICopcHJpdi1cdTAwM2VkYXRhO1xuK1x0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqb3RoZXJfcHJpdiA9IG5ldGRldl9wcml2KGRldik7XG4rXG4rXHRpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhkZXYpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChvdGhlcl9wcml2LVx1MDAzZWV0aHN3X2RhdGEgPT0gcG9ydF9wcml2LVx1MDAzZWV0aHN3X2RhdGEpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIDE7XG4rfVxuK1xuIHN0YXRpYyBpbnRcbiBkcGFhMl9zd2l0Y2hfcHJlY2hhbmdldXBwZXJfc2FuaXR5X2NoZWNrcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlICp1cHBlcl9kZXYsXG4gXHRcdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4tXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpvdGhlcl9wb3J0X3ByaXY7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqb3RoZXJfZGV2O1xuLVx0c3RydWN0IGxpc3RfaGVhZCAqaXRlcjtcbitcdHN0cnVjdCBuZXRkZXZfbmVzdGVkX3ByaXYgZGF0YSA9IHtcbitcdFx0LmRhdGEgPSAodm9pZCAqKXBvcnRfcHJpdixcbitcdH07XG4gXHRpbnQgZXJyO1xuIFxuIFx0aWYgKCFicl92bGFuX2VuYWJsZWQodXBwZXJfZGV2KSkge1xuQEAgLTIyMTUsNiArMjQwNyw3MCBAQCBkcGFhMl9zd2l0Y2hfcHJlY2hhbmdldXBwZXJfc2FuaXR5X2NoZWNrcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuK1x0ZXJyID0gbmV0ZGV2X3dhbGtfYWxsX2xvd2VyX2Rldih1cHBlcl9kZXYsXG4rXHRcdFx0XHRcdGRwYWEyX3N3aXRjaF9jaGVja19kcHN3X2luc3RhbmNlLFxuK1x0XHRcdFx0XHRcdTAwMjZkYXRhKTtcbitcdGlmIChlcnIpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdCAgIFwiSW50ZXJmYWNlIGZyb20gYSBkaWZmZXJlbnQgRFBTVyBpcyBpbiB0aGUgYnJpZGdlIGFscmVhZHlcIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3ByZV9sYWdfam9pbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqdXBwZXJfZGV2LFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0ZGV2X2xhZ191cHBlcl9pbmZvICppbmZvLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHN0cnVjdCBldGhzd19jb3JlICpldGhzdyA9IHBvcnRfcHJpdi1cdTAwM2VldGhzd19kYXRhO1xuK1x0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqb3RoZXJfcG9ydF9wcml2O1xuK1x0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZyA9IE5VTEw7XG4rXHRzdHJ1Y3QgZHBzd19sYWdfY2ZnIGNmZyA9IHswfTtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpvdGhlcl9kZXY7XG4rXHRpbnQgaSwgbnVtX2lmcyA9IDAsIGVycjtcbitcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7XG4rXG4rXHRpZiAoIShldGhzdy1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgRVRIU1dfRkVBVFVSRV9MQUdfT0ZGTE9BRCkpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdCAgIFwiTEFHIG9mZmxvYWQgaXMgc3VwcG9ydGVkIG9ubHkgZm9yIERQU1cgXHUwMDNlPSB2OC4xM1wiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKGluZm8tXHUwMDNldHhfdHlwZSAhPSBORVRERVZfTEFHX1RYX1RZUEVfSEFTSCkge1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJDYW4gb25seSBvZmZsb2FkIExBRyB1c2luZyBoYXNoIFRYIHR5cGVcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmIChpbmZvLVx1MDAzZWhhc2hfdHlwZSAhPSBORVRERVZfTEFHX0hBU0hfTDIzKSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwiQ2FuIG9ubHkgb2ZmbG9hZCBMMitMMyBUeCBoYXNoXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X2hhc19tYWMocG9ydF9wcml2KSkge1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJPbmx5IHN3aXRjaCBpbnRlcmZhY2VzIGNvbm5lY3RlZCB0byBNQUNzIGNhbiBiZSB1bmRlciBhIExBR1wiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRpZiAodmxhbl91c2VzX2Rldih1cHBlcl9kZXYpKSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICBcIkNhbm5vdCBqb2luIGEgTEFHIHVwcGVyIHRoYXQgaGFzIGEgVkxBTlwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZXRoc3ctXHUwMDNlc3dfYXR0ci5udW1faWZzOyBpKyspIHtcbitcdFx0aWYgKCFldGhzdy1cdTAwM2VsYWdzW2ldLmluX3VzZSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKGV0aHN3LVx1MDAzZWxhZ3NbaV0uYm9uZF9kZXYgIT0gdXBwZXJfZGV2KVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRsYWcgPSBcdTAwMjZldGhzdy1cdTAwM2VsYWdzW2ldO1xuK1x0XHRicmVhaztcbitcdH1cbitcbiBcdG5ldGRldl9mb3JfZWFjaF9sb3dlcl9kZXYodXBwZXJfZGV2LCBvdGhlcl9kZXYsIGl0ZXIpIHtcbiBcdFx0aWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2sob3RoZXJfZGV2KSlcbiBcdFx0XHRjb250aW51ZTtcbkBAIC0yMjIyLDkgKzI0NzgsMjQ4IEBAIGRwYWEyX3N3aXRjaF9wcmVjaGFuZ2V1cHBlcl9zYW5pdHlfY2hlY2tzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdG90aGVyX3BvcnRfcHJpdiA9IG5ldGRldl9wcml2KG90aGVyX2Rldik7XG4gXHRcdGlmIChvdGhlcl9wb3J0X3ByaXYtXHUwMDNlZXRoc3dfZGF0YSAhPSBwb3J0X3ByaXYtXHUwMDNlZXRoc3dfZGF0YSkge1xuIFx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4tXHRcdFx0XHRcdCAgIFwiSW50ZXJmYWNlIGZyb20gYSBkaWZmZXJlbnQgRFBTVyBpcyBpbiB0aGUgYnJpZGdlIGFscmVhZHlcIik7XG4rXHRcdFx0XHRcdCAgIFwiSW50ZXJmYWNlIGZyb20gYSBkaWZmZXJlbnQgRFBTVyBpcyBpbiB0aGUgYm9uZCBhbHJlYWR5XCIpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4rXG4rXHRcdGNmZy5pZl9pZFtudW1faWZzKytdID0gb3RoZXJfcG9ydF9wcml2LVx1MDAzZWlkeDtcbitcbitcdFx0aWYgKG51bV9pZnMgXHUwMDNlPSBEUFNXX01BWF9MQUdfSUZTKSB7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdFx0ICAgXCJDYW5ub3QgYWRkIG1vcmUgdGhhbiA4IERQQUEyIHN3aXRjaCBwb3J0cyB1bmRlciB0aGUgc2FtZSBib25kXCIpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRpZiAobGFnKSB7XG4rXHRcdGNmZy5ncm91cF9pZCA9IGxhZy1cdTAwM2VpZDtcbitcdFx0Y2ZnLmlmX2lkW251bV9pZnMrK10gPSBwb3J0X3ByaXYtXHUwMDNlaWR4O1xuK1x0XHRjZmcubnVtX2lmcyA9IG51bV9pZnM7XG4rXHRcdGNmZy5waGFzZSA9IERQU1dfTEFHX1NFVF9QSEFTRV9DSEVDSztcbitcbitcdFx0ZXJyID0gZHBzd19sYWdfc2V0KGV0aHN3LVx1MDAzZW1jX2lvLCAwLCBldGhzdy1cdTAwM2VkcHN3X2hhbmRsZSwgXHUwMDI2Y2ZnKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHRcdCAgIFwiQ2Fubm90IG9mZmxvYWQgTEFHIGNvbmZpZ3VyYXRpb25cIik7XG4rXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgZHBhYTJfc3dpdGNoX3BvcnRfc2V0X2xhZ19ncm91cChzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYsXG4rXHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXG4re1xuK1x0c3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3ID0gcG9ydF9wcml2LVx1MDAzZWV0aHN3X2RhdGE7XG4rXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpvdGhlcl9wb3J0X3ByaXYgPSBOVUxMO1xuK1x0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZyA9IE5VTEw7XG4rXHRzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqb3RoZXJfbGFnO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm90aGVyX2RldjtcbitcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7XG4rXG4rXHRuZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KGJvbmRfZGV2LCBvdGhlcl9kZXYsIGl0ZXIpIHtcbitcdFx0aWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2sob3RoZXJfZGV2KSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0b3RoZXJfcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYob3RoZXJfZGV2KTtcbitcdFx0b3RoZXJfbGFnID0gcnRubF9kZXJlZmVyZW5jZShvdGhlcl9wb3J0X3ByaXYtXHUwMDNlbGFnKTtcbitcdFx0aWYgKCFvdGhlcl9sYWcpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGlmIChvdGhlcl9sYWctXHUwMDNlYm9uZF9kZXYgPT0gYm9uZF9kZXYpIHtcbitcdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIocG9ydF9wcml2LVx1MDAzZWxhZywgb3RoZXJfbGFnKTtcbitcdFx0XHRyZXR1cm47XG4rXHRcdH1cbitcdH1cbitcbitcdC8qIFRoaXMgaXMgdGhlIGZpcnN0IGludGVyZmFjZSB0byBiZSBhZGRlZCB1bmRlciBhIGJvbmQgZGV2aWNlLiBGaW5kIGFuXG4rXHQgKiB1bnVzZWQgTEFHIGdyb3VwLiBObyBuZWVkIHRvIGNoZWNrIGZvciBOVUxMIHNpbmNlIHRoZXJlIGFyZSB0aGUgc2FtZVxuK1x0ICogYW1vdW50IG9mIERQU1cgcG9ydHMgYXMgTEFHIGdyb3VwcywgbWVhbmluZyB0aGF0IGVhY2ggcG9ydCBjYW4gaGF2ZVxuK1x0ICogaXRzIG93biBMQUcgZ3JvdXAuXG4rXHQgKi9cbitcdGxhZyA9IGRwYWEyX3N3aXRjaF9sYWdfZ2V0X3VudXNlZChldGhzdyk7XG4rXHRsYWctXHUwMDNlaW5fdXNlID0gdHJ1ZTtcbitcdGxhZy1cdTAwM2Vib25kX2RldiA9IGJvbmRfZGV2O1xuK1x0bGFnLVx1MDAzZXByaW1hcnkgPSBwb3J0X3ByaXY7XG4rXHRyY3VfYXNzaWduX3BvaW50ZXIocG9ydF9wcml2LVx1MDAzZWxhZywgbGFnKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgZHBhYTJfc3dpdGNoX3BvcnRfaW5fbGFnKHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdixcbitcdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxuK3tcbitcdHN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWc7XG4rXG4rXHRpZiAoIXBvcnRfcHJpdilcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0bGFnID0gcnRubF9kZXJlZmVyZW5jZShwb3J0X3ByaXYtXHUwMDNlbGFnKTtcbitcdHJldHVybiBsYWcgXHUwMDI2XHUwMDI2IGxhZy1cdTAwM2Vib25kX2RldiA9PSBib25kX2Rldjtcbit9XG4rXG4rc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfc2V0X2xhZ19jZmcoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCB1OCBsYWdfaWQsXG4rXHRcdFx0XHQgICAgc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3KVxuK3tcbitcdHN0cnVjdCBkcGFhMl9zd2l0Y2hfbGFnICpsYWcgPSBcdTAwMjZldGhzdy1cdTAwM2VsYWdzW2xhZ19pZCAtIDFdO1xuK1x0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcHJpbWFyeSwgKnBvcnRfcHJpdjtcbitcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKm5ld19wcmltYXJ5ID0gTlVMTDtcbitcdHN0cnVjdCBkcHN3X2xhZ19jZmcgY2ZnID0gezB9O1xuK1x0c3RydWN0IGRwYWEyX21hY19hZGRyICphO1xuK1x0dTggbnVtX2lmcyA9IDA7XG4rXHRpbnQgZXJyLCBpO1xuK1xuK1x0Y2ZnLmdyb3VwX2lkID0gbGFnX2lkO1xuK1xuK1x0LyogRGV0ZXJtaW5lIHRoZSBwcmltYXJ5IHBvcnQuIFRoZSBjYWxsZXIgY2xlYXJzIC1cdTAwM2VsYWcgb24gdGhlIHBvcnQgdGhhdFxuK1x0ICogaXMgbGVhdmluZywgc28gYSBOVUxMIC1cdTAwM2VsYWcgb24gdGhlIGN1cnJlbnQgcHJpbWFyeSBtZWFucyBpdCBpcyB0aGVcbitcdCAqIG9uZSBsZWF2aW5nOiBlbGVjdCB0aGUgZmlyc3QgcmVtYWluaW5nIG1lbWJlciBhcyB0aGUgbmV3IHByaW1hcnkuXG4rXHQgKiBPdGhlcndpc2Uga2VlcCB0aGUgY3VycmVudCBwcmltYXJ5LlxuK1x0ICovXG4rXHRpZiAocnRubF9kZXJlZmVyZW5jZShsYWctXHUwMDNlcHJpbWFyeS1cdTAwM2VsYWcpKSB7XG4rXHRcdHByaW1hcnkgPSBsYWctXHUwMDNlcHJpbWFyeTtcbitcdH0gZWxzZSB7XG4rXHRcdHByaW1hcnkgPSBOVUxMO1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBldGhzdy1cdTAwM2Vzd19hdHRyLm51bV9pZnM7IGkrKykge1xuK1x0XHRcdGlmIChkcGFhMl9zd2l0Y2hfcG9ydF9pbl9sYWcoZXRoc3ctXHUwMDNlcG9ydHNbaV0sIGJvbmRfZGV2KSkge1xuK1x0XHRcdFx0bmV3X3ByaW1hcnkgPSBldGhzdy1cdTAwM2Vwb3J0c1tpXTtcbitcdFx0XHRcdHByaW1hcnkgPSBuZXdfcHJpbWFyeTtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1xuK1x0LyogQnVpbGQgdGhlIGludGVyZmFjZSBsaXN0LCBhbHdheXMgcGxhY2luZyB0aGUgcHJpbWFyeSBmaXJzdCAqL1xuK1x0aWYgKHByaW1hcnkpXG4rXHRcdGNmZy5pZl9pZFtudW1faWZzKytdID0gcHJpbWFyeS1cdTAwM2VpZHg7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBldGhzdy1cdTAwM2Vzd19hdHRyLm51bV9pZnM7IGkrKykge1xuK1x0XHRwb3J0X3ByaXYgPSBldGhzdy1cdTAwM2Vwb3J0c1tpXTtcbitcdFx0aWYgKHBvcnRfcHJpdiA9PSBwcmltYXJ5KVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X2luX2xhZyhwb3J0X3ByaXYsIGJvbmRfZGV2KSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0Y2ZnLmlmX2lkW251bV9pZnMrK10gPSBwb3J0X3ByaXYtXHUwMDNlaWR4O1xuK1x0fVxuK1x0Y2ZnLm51bV9pZnMgPSBudW1faWZzO1xuK1xuK1x0LyogTm8gbW9yZSBpbnRlcmZhY2VzIHVuZGVyIHRoaXMgTEFHIGdyb3VwLCBtYXJrIGl0IGFzIG5vdCBpbiB1c2UuIFdhaXRcbitcdCAqIGZvciBhIGdyYWNlIHBlcmlvZCBzbyB0aGF0IGFueSByZWFkZXJzIG9mIHRoZSBsYWcgc3RydWN0dXJlIGZpbmlzaGVkLlxuK1x0ICovXG4rXHRpZiAoIW51bV9pZnMpIHtcbitcdFx0c3luY2hyb25pemVfbmV0KCk7XG4rXG4rXHRcdGxhZy1cdTAwM2Vib25kX2RldiA9IE5VTEw7XG4rXHRcdGxhZy1cdTAwM2VwcmltYXJ5ID0gTlVMTDtcbitcdFx0bGFnLVx1MDAzZWluX3VzZSA9IGZhbHNlO1xuK1x0fVxuK1xuK1x0LyogV2hlbiB0aGUgcHJpbWFyeSBjaGFuZ2VzLCBtaWdyYXRlIHRoZSBGREIgZW50cmllcyBmcm9tIHRoZSBvbGRcbitcdCAqIHByaW1hcnkgdG8gdGhlIG5ldyBvbmU6IHJlbW92ZSB0aGVtIGJlZm9yZSByZWNvbmZpZ3VyaW5nIHRoZSBMQUcgaW5cbitcdCAqIGhhcmR3YXJlIGFuZCByZS1hZGQgdGhlbSBvbiB0aGUgbmV3IHByaW1hcnkgYWZ0ZXJ3YXJkcy4gV2UgZG8gbm90XG4rXHQgKiB0b3VjaCBhbnkgcmVmY291bnRpbmcgc2luY2UgdGhlIGludGVudGlvbiBpcyB0byBjaGFuZ2UgdGhlIEhXIGVudHJ5LFxuK1x0ICogbm90IHRoZSBwYXJhbGxlbCBzb2Z0d2FyZSB0cmFja2luZy5cbitcdCAqL1xuK1x0aWYgKG5ld19wcmltYXJ5KSB7XG4rXHRcdG11dGV4X2xvY2soXHUwMDI2bGFnLVx1MDAzZWZkYl9sb2NrKTtcbitcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShhLCBcdTAwMjZsYWctXHUwMDNlZmRicywgbGlzdClcbitcdFx0XHRkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsKGxhZy1cdTAwM2VwcmltYXJ5LCBhLVx1MDAzZWFkZHIpO1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bGFnLVx1MDAzZWZkYl9sb2NrKTtcbitcdH1cbitcbitcdGVyciA9IGRwc3dfbGFnX3NldChldGhzdy1cdTAwM2VtY19pbywgMCwgZXRoc3ctXHUwMDNlZHBzd19oYW5kbGUsIFx1MDAyNmNmZyk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0aWYgKG5ld19wcmltYXJ5KSB7XG4rXHRcdG11dGV4X2xvY2soXHUwMDI2bGFnLVx1MDAzZWZkYl9sb2NrKTtcbitcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShhLCBcdTAwMjZsYWctXHUwMDNlZmRicywgbGlzdCkge1xuK1x0XHRcdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9hZGQobmV3X3ByaW1hcnksIGEtXHUwMDNlYWRkcik7XG4rXHRcdFx0aWYgKGVycilcbitcdFx0XHRcdG5ldGRldl9lcnIobmV3X3ByaW1hcnktXHUwMDNlbmV0ZGV2LCBcIlVuYWJsZSB0byBtaWdyYXRlIEZEQlxcblwiKTtcbitcdFx0fVxuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bGFnLVx1MDAzZWZkYl9sb2NrKTtcbitcbitcdFx0c3luY2hyb25pemVfbmV0KCk7XG4rXHRcdGxhZy1cdTAwM2VwcmltYXJ5ID0gbmV3X3ByaW1hcnk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9ib25kX2pvaW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG5ldGRldl9sYWdfdXBwZXJfaW5mbyAqaW5mbyxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHN0cnVjdCBldGhzd19jb3JlICpldGhzdyA9IHBvcnRfcHJpdi1cdTAwM2VldGhzd19kYXRhO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmJyaWRnZV9kZXY7XG4rXHRzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqbGFnO1xuK1x0aW50IGVyciA9IDA7XG4rXHR1OCBsYWdfaWQ7XG4rXG4rXHQvKiBTZXR1cCB0aGUgcG9ydF9wcml2LVx1MDAzZWxhZyBwb2ludGVyIGZvciB0aGlzIHN3aXRjaCBwb3J0ICovXG4rXHRkcGFhMl9zd2l0Y2hfcG9ydF9zZXRfbGFnX2dyb3VwKHBvcnRfcHJpdiwgYm9uZF9kZXYpO1xuK1xuK1x0LyogQ3JlYXRlIHRoZSBMQUcgY29uZmlndXJhdGlvbiBhbmQgYXBwbHkgaXQgaW4gTUMgKi9cbitcdGxhZyA9IHJ0bmxfZGVyZWZlcmVuY2UocG9ydF9wcml2LVx1MDAzZWxhZyk7XG4rXHRsYWdfaWQgPSBsYWctXHUwMDNlaWQ7XG4rXHRlcnIgPSBkcGFhMl9zd2l0Y2hfc2V0X2xhZ19jZmcoYm9uZF9kZXYsIGxhZ19pZCwgZXRoc3cpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJfbGFnX2NmZztcbitcbitcdC8qIElmIHRoZSBib25kIGRldmljZSBpcyBhIHN3aXRjaCBwb3J0LCBqb2luIHRoZSBicmlkZ2UgYXMgd2VsbCAqL1xuK1x0YnJpZGdlX2RldiA9IG5ldGRldl9tYXN0ZXJfdXBwZXJfZGV2X2dldChib25kX2Rldik7XG4rXHRpZiAoIWJyaWRnZV9kZXYgfHwgIW5ldGlmX2lzX2JyaWRnZV9tYXN0ZXIoYnJpZGdlX2RldikpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfYnJpZGdlX2pvaW4obmV0ZGV2LCBicmlkZ2VfZGV2LCBleHRhY2spO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJfbGFnX2NmZztcbitcbitcdHJldHVybiBlcnI7XG4rXG4rZXJyX2xhZ19jZmc6XG4rXHRyY3VfYXNzaWduX3BvaW50ZXIocG9ydF9wcml2LVx1MDAzZWxhZywgTlVMTCk7XG4rXHRkcGFhMl9zd2l0Y2hfc2V0X2xhZ19jZmcoYm9uZF9kZXYsIGxhZ19pZCwgZXRoc3cpO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9ib25kX2xlYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldilcbit7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqYnJpZGdlX2RldiA9IG5ldGRldl9tYXN0ZXJfdXBwZXJfZGV2X2dldChib25kX2Rldik7XG4rXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZyA9IHJ0bmxfZGVyZWZlcmVuY2UocG9ydF9wcml2LVx1MDAzZWxhZyk7XG4rXHRzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3cgPSBwb3J0X3ByaXYtXHUwMDNlZXRoc3dfZGF0YTtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpicnBkZXY7XG4rXHRib29sIGxlYXJuX2VuYTtcbitcdGludCBlcnI7XG4rXG4rXHRpZiAoIWxhZylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBSZWNyZWF0ZSB0aGUgTEFHIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBMQUcgZ3JvdXAgdGhhdCB3ZSBsZWZ0LiAqL1xuK1x0cmN1X2Fzc2lnbl9wb2ludGVyKHBvcnRfcHJpdi1cdTAwM2VsYWcsIE5VTEwpO1xuK1x0ZHBhYTJfc3dpdGNoX3NldF9sYWdfY2ZnKGJvbmRfZGV2LCBsYWctXHUwMDNlaWQsIGV0aHN3KTtcbitcbitcdGlmIChicmlkZ2VfZGV2IFx1MDAyNlx1MDAyNiBuZXRpZl9pc19icmlkZ2VfbWFzdGVyKGJyaWRnZV9kZXYpKSB7XG4rXHRcdC8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBuZXcgcHJpbWFyeSBpbmhlcml0cyB0aGUgbGVhcm5pbmcgc3RhdGUgKi9cbitcdFx0aWYgKGxhZy1cdTAwM2VwcmltYXJ5KSB7XG4rXHRcdFx0YnJwZGV2ID0gZHBhYTJfc3dpdGNoX3BvcnRfdG9fYnJpZGdlX3BvcnQobGFnLVx1MDAzZXByaW1hcnkpO1xuK1x0XHRcdGxlYXJuX2VuYSA9IGJyX3BvcnRfZmxhZ19pc19zZXQoYnJwZGV2LCBCUl9MRUFSTklORyk7XG4rXHRcdFx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfc2V0X2xlYXJuaW5nKGxhZy1cdTAwM2VwcmltYXJ5LFxuK1x0XHRcdFx0XHRcdFx0ICAgICBsZWFybl9lbmEpO1xuK1x0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHRcdGxhZy1cdTAwM2VwcmltYXJ5LVx1MDAzZWxlYXJuX2VuYSA9IGxlYXJuX2VuYTtcbitcdFx0fVxuK1xuK1x0XHQvKiBJbiBjYXNlIHRoZSBib25kIGlzIGEgYnJpZGdlIHBvcnQsIGxlYXZlIHRoZSB1cHBlciBicmlkZ2UgYXNcbitcdFx0ICogd2VsbC5cbitcdFx0ICovXG4rXHRcdHJldHVybiBkcGFhMl9zd2l0Y2hfcG9ydF9icmlkZ2VfbGVhdmUobmV0ZGV2KTtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuQEAgLTIyMzQsOCArMjcyOSw4IEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfcHJlY2hhbmdldXBwZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHRcdFx0ICAgIHN0cnVjdCBuZXRkZXZfbm90aWZpZXJfY2hhbmdldXBwZXJfaW5mbyAqaW5mbylcbiB7XG4gXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXY7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqdXBwZXJfZGV2LCAqYnI7XG4gXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2s7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqdXBwZXJfZGV2O1xuIFx0aW50IGVycjtcbiBcbiBcdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrKG5ldGRldikpXG5AQCAtMjI1Miw2ICsyNzQ3LDI0IEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfcHJlY2hhbmdldXBwZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcbiBcdFx0aWYgKCFpbmZvLVx1MDAzZWxpbmtpbmcpXG4gXHRcdFx0ZHBhYTJfc3dpdGNoX3BvcnRfcHJlX2JyaWRnZV9sZWF2ZShuZXRkZXYpO1xuK1x0fSBlbHNlIGlmIChuZXRpZl9pc19sYWdfbWFzdGVyKHVwcGVyX2RldikpIHtcbitcdFx0aWYgKCFpbmZvLVx1MDAzZWxpbmtpbmcpIHtcbitcdFx0XHRpZiAobmV0aWZfaXNfYnJpZGdlX3BvcnQodXBwZXJfZGV2KSlcbitcdFx0XHRcdGRwYWEyX3N3aXRjaF9wb3J0X3ByZV9icmlkZ2VfbGVhdmUobmV0ZGV2KTtcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuK1xuK1x0XHRpZiAobmV0aWZfaXNfYnJpZGdlX3BvcnQodXBwZXJfZGV2KSkge1xuK1x0XHRcdGJyID0gbmV0ZGV2X21hc3Rlcl91cHBlcl9kZXZfZ2V0KHVwcGVyX2Rldik7XG4rXHRcdFx0ZXJyID0gZHBhYTJfc3dpdGNoX3ByZWNoYW5nZXVwcGVyX3Nhbml0eV9jaGVja3MobmV0ZGV2LFxuK1x0XHRcdFx0XHRcdFx0XHRcdGJyLFxuK1x0XHRcdFx0XHRcdFx0XHRcdGV4dGFjayk7XG4rXHRcdFx0aWYgKGVycilcbitcdFx0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbitcbitcdFx0cmV0dXJuIGRwYWEyX3N3aXRjaF9wcmVfbGFnX2pvaW4obmV0ZGV2LCB1cHBlcl9kZXYsXG4rXHRcdFx0XHRcdFx0IGluZm8tXHUwMDNldXBwZXJfaW5mbywgZXh0YWNrKTtcbiBcdH0gZWxzZSBpZiAoaXNfdmxhbl9kZXYodXBwZXJfZGV2KSkge1xuIFx0XHRwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0XHRpZiAocG9ydF9wcml2LVx1MDAzZWZkYi1cdTAwM2VicmlkZ2VfZGV2KSB7XG5AQCAtMjI4Myw2ICsyNzk2LDgwIEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfY2hhbmdldXBwZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHRcdFx0XHRcdCAgICAgZXh0YWNrKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdHJldHVybiBkcGFhMl9zd2l0Y2hfcG9ydF9icmlkZ2VfbGVhdmUobmV0ZGV2KTtcbitcdH0gZWxzZSBpZiAobmV0aWZfaXNfbGFnX21hc3Rlcih1cHBlcl9kZXYpKSB7XG4rXHRcdGlmIChpbmZvLVx1MDAzZWxpbmtpbmcpXG4rXHRcdFx0cmV0dXJuIGRwYWEyX3N3aXRjaF9wb3J0X2JvbmRfam9pbihuZXRkZXYsIHVwcGVyX2RldixcbitcdFx0XHRcdFx0XHRcdCAgIGluZm8tXHUwMDNldXBwZXJfaW5mbyxcbitcdFx0XHRcdFx0XHRcdCAgIGV4dGFjayk7XG4rXHRcdGVsc2VcbitcdFx0XHRyZXR1cm4gZHBhYTJfc3dpdGNoX3BvcnRfYm9uZF9sZWF2ZShuZXRkZXYsIHVwcGVyX2Rldik7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludFxuK2RwYWEyX3N3aXRjaF9sYWdfcHJlY2hhbmdldXBwZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdHN0cnVjdCBuZXRkZXZfbm90aWZpZXJfY2hhbmdldXBwZXJfaW5mbyAqaW5mbylcbit7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbG93ZXI7XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkICppdGVyO1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRpZiAoIW5ldGlmX2lzX2xhZ19tYXN0ZXIobmV0ZGV2KSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRuZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KG5ldGRldiwgbG93ZXIsIGl0ZXIpIHtcbitcdFx0aWYgKCFkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2sobG93ZXIpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9wcmVjaGFuZ2V1cHBlcihsb3dlciwgaW5mbyk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbitkcGFhMl9zd2l0Y2hfbGFnX2NoYW5nZXVwcGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0ICAgICBzdHJ1Y3QgbmV0ZGV2X25vdGlmaWVyX2NoYW5nZXVwcGVyX2luZm8gKmluZm8pXG4re1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmxvd2VyO1xuK1x0c3RydWN0IGxpc3RfaGVhZCAqaXRlcjtcbitcdGludCBlcnIgPSAwO1xuK1xuK1x0aWYgKCFuZXRpZl9pc19sYWdfbWFzdGVyKG5ldGRldikpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0bmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX2RldihuZXRkZXYsIGxvd2VyLCBpdGVyKSB7XG4rXHRcdGlmICghZHBhYTJfc3dpdGNoX3BvcnRfZGV2X2NoZWNrKGxvd2VyKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfY2hhbmdldXBwZXIobG93ZXIsIGluZm8pO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludFxuK2RwYWEyX3N3aXRjaF9wb3J0X2NoYW5nZWxvd2Vyc3RhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdCAgIHN0cnVjdCBuZXRkZXZfbGFnX2xvd2VyX3N0YXRlX2luZm8gKmxpbmZvKVxuK3tcbitcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3cgPSBwb3J0X3ByaXYtXHUwMDNlZXRoc3dfZGF0YTtcbitcdGludCBlcnI7XG4rXG4rXHRpZiAoIXJ0bmxfZGVyZWZlcmVuY2UocG9ydF9wcml2LVx1MDAzZWxhZykpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0ZXJyID0gZHBzd19pZl9zZXRfbGFnX3N0YXRlKGV0aHN3LVx1MDAzZW1jX2lvLCAwLCBldGhzdy1cdTAwM2VkcHN3X2hhbmRsZSxcbitcdFx0XHRcdCAgICBwb3J0X3ByaXYtXHUwMDNlaWR4LCBsaW5mby1cdTAwM2V0eF9lbmFibGVkID8gMSA6IDApO1xuK1x0aWYgKGVycikge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJkcHN3X2lmX3NldF9sYWdfc3RhdGUoKSA9ICVkXFxuXCIsIGVycik7XG4rXHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0yMjkyLDYgKzI4NzksNyBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X25ldGRldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuIFx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7XG4rXHRzdHJ1Y3QgbmV0ZGV2X25vdGlmaWVyX2NoYW5nZWxvd2Vyc3RhdGVfaW5mbyAqaW5mbztcbiBcdGludCBlcnIgPSAwO1xuIFxuIFx0c3dpdGNoIChldmVudCkge1xuQEAgLTIzMDAsMTMgKzI4ODgsMjkgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9uZXRkZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gbm90aWZpZXJfZnJvbV9lcnJubyhlcnIpO1xuIFxuK1x0XHRlcnIgPSBkcGFhMl9zd2l0Y2hfbGFnX3ByZWNoYW5nZXVwcGVyKG5ldGRldiwgcHRyKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gbm90aWZpZXJfZnJvbV9lcnJubyhlcnIpO1xuK1xuIFx0XHRicmVhaztcbiBcdGNhc2UgTkVUREVWX0NIQU5HRVVQUEVSOlxuIFx0XHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9jaGFuZ2V1cHBlcihuZXRkZXYsIHB0cik7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8oZXJyKTtcbiBcbitcdFx0ZXJyID0gZHBhYTJfc3dpdGNoX2xhZ19jaGFuZ2V1cHBlcihuZXRkZXYsIHB0cik7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8oZXJyKTtcbitcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIE5FVERFVl9DSEFOR0VMT1dFUlNUQVRFOlxuK1x0XHRpbmZvID0gcHRyO1xuK1x0XHRpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhuZXRkZXYpKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9jaGFuZ2Vsb3dlcnN0YXRlKG5ldGRldixcbitcdFx0XHRcdFx0XHRcdCBpbmZvLVx1MDAzZWxvd2VyX3N0YXRlX2luZm8pO1xuK1x0XHRyZXR1cm4gbm90aWZpZXJfZnJvbV9lcnJubyhlcnIpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIE5PVElGWV9ET05FO1xuQEAgLTIzMTYsODAgKzI5MjAsOTcgQEAgc3RydWN0IGV0aHN3X3N3aXRjaGRldl9ldmVudF93b3JrIHtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuIFx0c3RydWN0IHN3aXRjaGRldl9ub3RpZmllcl9mZGJfaW5mbyBmZGJfaW5mbztcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXY7XG4gXHR1bnNpZ25lZCBsb25nIGV2ZW50O1xuK1x0dTE2IHZpZDtcbiB9O1xuIFxuIHN0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9ldmVudF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgZXRoc3dfc3dpdGNoZGV2X2V2ZW50X3dvcmsgKnN3aXRjaGRldl93b3JrID1cbiBcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBldGhzd19zd2l0Y2hkZXZfZXZlbnRfd29yaywgd29yayk7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYgPSBzd2l0Y2hkZXZfd29yay1cdTAwM2VvcmlnX2RldjtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBzd2l0Y2hkZXZfd29yay1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0c3RydWN0IHN3aXRjaGRldl9ub3RpZmllcl9mZGJfaW5mbyAqZmRiX2luZm87XG4rXHRzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyAqbGFnO1xuIFx0aW50IGVycjtcbiBcbi1cdHJ0bmxfbG9jaygpO1xuIFx0ZmRiX2luZm8gPSBcdTAwMjZzd2l0Y2hkZXZfd29yay1cdTAwM2VmZGJfaW5mbztcbiBcbitcdC8qIFRoZSBsYWcgc3RydWN0dXJlcyBhcmUgZnJlZWQgb25seSBmcm9tIGRwYWEyX3N3aXRjaF9yZW1vdmUoKSwgd2hpY2hcbitcdCAqIGZpcnN0IGZsdXNoZXMgdGhpcyB3b3JrcXVldWUsIHNvIHRoZSBwb2ludGVyIHN0YXlzIHZhbGlkIGZvciB0aGVcbitcdCAqIGxpZmV0aW1lIG9mIHRoZSB3b3JrIGl0ZW0uIE9ubHkgdGhlIGRlcmVmZXJlbmNlIG5lZWRzIHRoZSBSQ1VcbitcdCAqIHJlYWQtc2lkZSBsb2NrOyB0aGUgRkRCIGhlbHBlcnMgYmVsb3cgY2FuIHNsZWVwIGFuZCBtdXN0IHJ1biBvdXRzaWRlXG4rXHQgKiBvZiBpdC5cbitcdCAqL1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0bGFnID0gcmN1X2RlcmVmZXJlbmNlKHBvcnRfcHJpdi1cdTAwM2VsYWcpO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4gXHRzd2l0Y2ggKHN3aXRjaGRldl93b3JrLVx1MDAzZWV2ZW50KSB7XG4gXHRjYXNlIFNXSVRDSERFVl9GREJfQUREX1RPX0RFVklDRTpcbi1cdFx0aWYgKCFmZGJfaW5mby1cdTAwM2VhZGRlZF9ieV91c2VyIHx8IGZkYl9pbmZvLVx1MDAzZWlzX2xvY2FsKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRpZiAoaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGZkYl9pbmZvLVx1MDAzZWFkZHIpKVxuLVx0XHRcdGVyciA9IGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9hZGRfdWMobmV0ZGV2X3ByaXYoZGV2KSxcbi1cdFx0XHRcdFx0XHRcdCAgIGZkYl9pbmZvLVx1MDAzZWFkZHIpO1xuK1x0XHRpZiAobGFnKVxuK1x0XHRcdGVyciA9IGRwYWEyX3N3aXRjaF9sYWdfZmRiX2FkZChsYWcsIGZkYl9pbmZvLVx1MDAzZWFkZHIsXG4rXHRcdFx0XHRcdFx0ICAgICAgIHN3aXRjaGRldl93b3JrLVx1MDAzZXZpZCk7XG4gXHRcdGVsc2Vcbi1cdFx0XHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfYWRkX21jKG5ldGRldl9wcml2KGRldiksXG4tXHRcdFx0XHRcdFx0XHQgICBmZGJfaW5mby1cdTAwM2VhZGRyKTtcbitcdFx0XHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfYWRkKHBvcnRfcHJpdixcbitcdFx0XHRcdFx0XHRcdGZkYl9pbmZvLVx1MDAzZWFkZHIpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRmZGJfaW5mby1cdTAwM2VvZmZsb2FkZWQgPSB0cnVlO1xuLVx0XHRjYWxsX3N3aXRjaGRldl9ub3RpZmllcnMoU1dJVENIREVWX0ZEQl9PRkZMT0FERUQsIGRldixcbitcdFx0Y2FsbF9zd2l0Y2hkZXZfbm90aWZpZXJzKFNXSVRDSERFVl9GREJfT0ZGTE9BREVELCBvcmlnX2RldixcbiBcdFx0XHRcdFx0IFx1MDAyNmZkYl9pbmZvLVx1MDAzZWluZm8sIE5VTEwpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgU1dJVENIREVWX0ZEQl9ERUxfVE9fREVWSUNFOlxuLVx0XHRpZiAoIWZkYl9pbmZvLVx1MDAzZWFkZGVkX2J5X3VzZXIgfHwgZmRiX2luZm8tXHUwMDNlaXNfbG9jYWwpXG4tXHRcdFx0YnJlYWs7XG4tXHRcdGlmIChpc191bmljYXN0X2V0aGVyX2FkZHIoZmRiX2luZm8tXHUwMDNlYWRkcikpXG4tXHRcdFx0ZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2RlbF91YyhuZXRkZXZfcHJpdihkZXYpLCBmZGJfaW5mby1cdTAwM2VhZGRyKTtcbitcdFx0aWYgKGxhZylcbitcdFx0XHRkcGFhMl9zd2l0Y2hfbGFnX2ZkYl9kZWwobGFnLCBmZGJfaW5mby1cdTAwM2VhZGRyLFxuK1x0XHRcdFx0XHRcdCBzd2l0Y2hkZXZfd29yay1cdTAwM2V2aWQpO1xuIFx0XHRlbHNlXG4tXHRcdFx0ZHBhYTJfc3dpdGNoX3BvcnRfZmRiX2RlbF9tYyhuZXRkZXZfcHJpdihkZXYpLCBmZGJfaW5mby1cdTAwM2VhZGRyKTtcbitcdFx0XHRkcGFhMl9zd2l0Y2hfcG9ydF9mZGJfZGVsKHBvcnRfcHJpdiwgZmRiX2luZm8tXHUwMDNlYWRkcik7XG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuLVx0cnRubF91bmxvY2soKTtcbiBcdGtmcmVlKHN3aXRjaGRldl93b3JrLVx1MDAzZWZkYl9pbmZvLmFkZHIpO1xuIFx0a2ZyZWUoc3dpdGNoZGV2X3dvcmspO1xuIFx0ZGV2X3B1dChkZXYpO1xuK1x0ZGV2X3B1dChvcmlnX2Rldik7XG4gfVxuIFxuLS8qIENhbGxlZCB1bmRlciByY3VfcmVhZF9sb2NrKCkgKi9cbi1zdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wb3J0X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4tXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXG4rc3RhdGljIGludFxuK2RwYWEyX3N3aXRjaF9wb3J0X2ZkYl9ldmVudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYsXG4rXHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIGNvbnN0IHZvaWQgKmN0eCxcbitcdFx0XHQgICAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9ub3RpZmllcl9mZGJfaW5mbyAqZmRiX2luZm8pXG4ge1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHN3aXRjaGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xuIFx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdHN0cnVjdCBldGhzd19zd2l0Y2hkZXZfZXZlbnRfd29yayAqc3dpdGNoZGV2X3dvcms7XG4tXHRzdHJ1Y3Qgc3dpdGNoZGV2X25vdGlmaWVyX2ZkYl9pbmZvICpmZGJfaW5mbyA9IHB0cjtcbiBcdHN0cnVjdCBldGhzd19jb3JlICpldGhzdyA9IHBvcnRfcHJpdi1cdTAwM2VldGhzd19kYXRhO1xuIFxuLVx0aWYgKGV2ZW50ID09IFNXSVRDSERFVl9QT1JUX0FUVFJfU0VUKVxuLVx0XHRyZXR1cm4gZHBhYTJfc3dpdGNoX3BvcnRfYXR0cl9zZXRfZXZlbnQoZGV2LCBwdHIpO1xuK1x0aWYgKGN0eCBcdTAwMjZcdTAwMjYgY3R4ICE9IHBvcnRfcHJpdilcbitcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhkZXYpKVxuLVx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4rXHQvKiBGb3IgdGhlIG1vbWVudCwgZG8gbm90aGluZyB3aXRoIGVudHJpZXMgdG93YXJkcyBmb3JlaWduIGRldmljZXMgKi9cbitcdGlmIChkcGFhMl9zd2l0Y2hfZm9yZWlnbl9kZXZfY2hlY2soZGV2LCBvcmlnX2RldikpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKCFmZGJfaW5mby1cdTAwM2VhZGRlZF9ieV91c2VyIHx8IGZkYl9pbmZvLVx1MDAzZWlzX2xvY2FsKVxuK1x0XHRyZXR1cm4gMDtcbiBcbiBcdHN3aXRjaGRldl93b3JrID0ga3phbGxvY19vYmooKnN3aXRjaGRldl93b3JrLCBHRlBfQVRPTUlDKTtcbiBcdGlmICghc3dpdGNoZGV2X3dvcmspXG4tXHRcdHJldHVybiBOT1RJRllfQkFEO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdElOSVRfV09SSyhcdTAwMjZzd2l0Y2hkZXZfd29yay1cdTAwM2V3b3JrLCBkcGFhMl9zd2l0Y2hfZXZlbnRfd29yayk7XG4gXHRzd2l0Y2hkZXZfd29yay1cdTAwM2VkZXYgPSBkZXY7XG4gXHRzd2l0Y2hkZXZfd29yay1cdTAwM2VldmVudCA9IGV2ZW50O1xuK1x0c3dpdGNoZGV2X3dvcmstXHUwMDNlb3JpZ19kZXYgPSBvcmlnX2RldjtcbitcdHN3aXRjaGRldl93b3JrLVx1MDAzZXZpZCA9IGZkYl9pbmZvLVx1MDAzZXZpZDtcbiBcbiBcdHN3aXRjaCAoZXZlbnQpIHtcbiBcdGNhc2UgU1dJVENIREVWX0ZEQl9BRERfVE9fREVWSUNFOlxuIFx0Y2FzZSBTV0lUQ0hERVZfRkRCX0RFTF9UT19ERVZJQ0U6XG4tXHRcdG1lbWNweShcdTAwMjZzd2l0Y2hkZXZfd29yay1cdTAwM2VmZGJfaW5mbywgcHRyLFxuK1x0XHRtZW1jcHkoXHUwMDI2c3dpdGNoZGV2X3dvcmstXHUwMDNlZmRiX2luZm8sIGZkYl9pbmZvLFxuIFx0XHQgICAgICAgc2l6ZW9mKHN3aXRjaGRldl93b3JrLVx1MDAzZWZkYl9pbmZvKSk7XG4gXHRcdHN3aXRjaGRldl93b3JrLVx1MDAzZWZkYl9pbmZvLmFkZHIgPSBremFsbG9jKEVUSF9BTEVOLCBHRlBfQVRPTUlDKTtcbiBcdFx0aWYgKCFzd2l0Y2hkZXZfd29yay1cdTAwM2VmZGJfaW5mby5hZGRyKVxuQEAgLTI0MDAsNTIgKzMwMjEsNjEgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuIFxuIFx0XHQvKiBUYWtlIGEgcmVmZXJlbmNlIG9uIHRoZSBkZXZpY2UgdG8gYXZvaWQgYmVpbmcgZnJlZWQuICovXG4gXHRcdGRldl9ob2xkKGRldik7XG4rXHRcdGRldl9ob2xkKG9yaWdfZGV2KTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRrZnJlZShzd2l0Y2hkZXZfd29yayk7XG4tXHRcdHJldHVybiBOT1RJRllfRE9ORTtcbitcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4gXHRxdWV1ZV93b3JrKGV0aHN3LVx1MDAzZXdvcmtxdWV1ZSwgXHUwMDI2c3dpdGNoZGV2X3dvcmstXHUwMDNld29yayk7XG4gXG4tXHRyZXR1cm4gTk9USUZZX0RPTkU7XG4rXHRyZXR1cm4gMDtcbiBcbiBlcnJfYWRkcl9hbGxvYzpcbiBcdGtmcmVlKHN3aXRjaGRldl93b3JrKTtcbi1cdHJldHVybiBOT1RJRllfQkFEO1xuK1x0cmV0dXJuIC1FTk9NRU07XG4gfVxuIFxuLXN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfb2JqX2V2ZW50KHVuc2lnbmVkIGxvbmcgZXZlbnQsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc3dpdGNoZGV2X25vdGlmaWVyX3BvcnRfb2JqX2luZm8gKnBvcnRfb2JqX2luZm8pXG4rLyogQ2FsbGVkIHVuZGVyIHJjdV9yZWFkX2xvY2soKSAqL1xuK3N0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcbiB7XG4tXHRpbnQgZXJyID0gLUVPUE5PVFNVUFA7XG4tXG4tXHRpZiAoIWRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayhuZXRkZXYpKVxuLVx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc3dpdGNoZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7XG4rXHRpbnQgZXJyO1xuIFxuIFx0c3dpdGNoIChldmVudCkge1xuLVx0Y2FzZSBTV0lUQ0hERVZfUE9SVF9PQkpfQUREOlxuLVx0XHRlcnIgPSBkcGFhMl9zd2l0Y2hfcG9ydF9vYmpfYWRkKG5ldGRldiwgcG9ydF9vYmpfaW5mby1cdTAwM2VvYmopO1xuLVx0XHRicmVhaztcbi1cdGNhc2UgU1dJVENIREVWX1BPUlRfT0JKX0RFTDpcbi1cdFx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfb2JqX2RlbChuZXRkZXYsIHBvcnRfb2JqX2luZm8tXHUwMDNlb2JqKTtcbi1cdFx0YnJlYWs7XG4rXHRjYXNlIFNXSVRDSERFVl9QT1JUX0FUVFJfU0VUOlxuK1x0XHRyZXR1cm4gZHBhYTJfc3dpdGNoX3BvcnRfYXR0cl9zZXRfZXZlbnQoZGV2LCBwdHIpO1xuK1x0Y2FzZSBTV0lUQ0hERVZfRkRCX0FERF9UT19ERVZJQ0U6XG4rXHRjYXNlIFNXSVRDSERFVl9GREJfREVMX1RPX0RFVklDRTpcbitcdFx0ZXJyID0gc3dpdGNoZGV2X2hhbmRsZV9mZGJfZXZlbnRfdG9fZGV2aWNlKGRldiwgZXZlbnQsIHB0cixcbitcdFx0XHRcdFx0XHRcdCAgIGRwYWEyX3N3aXRjaF9wb3J0X2Rldl9jaGVjayxcbitcdFx0XHRcdFx0XHRcdCAgIGRwYWEyX3N3aXRjaF9mb3JlaWduX2Rldl9jaGVjayxcbitcdFx0XHRcdFx0XHRcdCAgIGRwYWEyX3N3aXRjaF9wb3J0X2ZkYl9ldmVudCk7XG4rXHRcdHJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4gXHR9XG4tXG4tXHRwb3J0X29ial9pbmZvLVx1MDAzZWhhbmRsZWQgPSB0cnVlO1xuLVx0cmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8oZXJyKTtcbiB9XG4gXG4gc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9ibG9ja2luZ19ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuIFx0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBzd2l0Y2hkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcbitcdGludCBlcnI7XG4gXG4gXHRzd2l0Y2ggKGV2ZW50KSB7XG4gXHRjYXNlIFNXSVRDSERFVl9QT1JUX09CSl9BREQ6XG4rXHRcdGVyciA9IHN3aXRjaGRldl9oYW5kbGVfcG9ydF9vYmpfYWRkKGRldiwgcHRyLFxuK1x0XHRcdFx0XHRcdCAgICBkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2ssXG4rXHRcdFx0XHRcdFx0ICAgIGRwYWEyX3N3aXRjaF9wb3J0X29ial9hZGQpO1xuK1x0XHRyZXR1cm4gbm90aWZpZXJfZnJvbV9lcnJubyhlcnIpO1xuIFx0Y2FzZSBTV0lUQ0hERVZfUE9SVF9PQkpfREVMOlxuLVx0XHRyZXR1cm4gZHBhYTJfc3dpdGNoX3BvcnRfb2JqX2V2ZW50KGV2ZW50LCBkZXYsIHB0cik7XG4rXHRcdGVyciA9IHN3aXRjaGRldl9oYW5kbGVfcG9ydF9vYmpfZGVsKGRldiwgcHRyLFxuK1x0XHRcdFx0XHRcdCAgICBkcGFhMl9zd2l0Y2hfcG9ydF9kZXZfY2hlY2ssXG4rXHRcdFx0XHRcdFx0ICAgIGRwYWEyX3N3aXRjaF9wb3J0X29ial9kZWwpO1xuK1x0XHRyZXR1cm4gbm90aWZpZXJfZnJvbV9lcnJubyhlcnIpO1xuIFx0Y2FzZSBTV0lUQ0hERVZfUE9SVF9BVFRSX1NFVDpcbiBcdFx0cmV0dXJuIGRwYWEyX3N3aXRjaF9wb3J0X2F0dHJfc2V0X2V2ZW50KGRldiwgcHRyKTtcbiBcdH1cbkBAIC0yNDkwLDE5ICszMTIwLDIyIEBAIHN0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9yeChzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZxICpmcSxcbiBcdGRtYV9hZGRyX3QgYWRkciA9IGRwYWEyX2ZkX2dldF9hZGRyKGZkKTtcbiBcdHN0cnVjdCBldGhzd19jb3JlICpldGhzdyA9IGZxLVx1MDAzZWV0aHN3O1xuIFx0c3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2O1xuK1x0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZztcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4gXHRzdHJ1Y3Qgdmxhbl9ldGhoZHIgKmhkcjtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXHR1MTYgdmxhbl90Y2ksIHZpZDtcbiBcdGludCBpZl9pZCwgZXJyO1xuIFx0dm9pZCAqdmFkZHI7XG4rXHR1NjQgZmxjO1xuIFxuIFx0dmFkZHIgPSBkcGFhMl9pb3ZhX3RvX3ZpcnQoZXRoc3ctXHUwMDNlaW9tbXVfZG9tYWluLCBhZGRyKTtcbiBcdGRtYV91bm1hcF9wYWdlKGV0aHN3LVx1MDAzZWRldiwgYWRkciwgRFBBQTJfU1dJVENIX1JYX0JVRl9TSVpFLFxuIFx0XHQgICAgICAgRE1BX0ZST01fREVWSUNFKTtcbiBcbiBcdC8qIGdldCBzd2l0Y2ggaW5ncmVzcyBpbnRlcmZhY2UgSUQgKi9cbi1cdGlmX2lkID0gdXBwZXJfMzJfYml0cyhkcGFhMl9mZF9nZXRfZmxjKGZkKSkgXHUwMDI2IDB4MDAwMEZGRkY7XG4rXHRmbGMgPSBkcGFhMl9mZF9nZXRfZmxjKGZkKTtcbitcdGlmX2lkID0gRFBBQTJfRVRIU1dfRkxDX0lGX0lEKGZsYyk7XG4gXHRpZiAoaWZfaWQgXHUwMDNlPSBldGhzdy1cdTAwM2Vzd19hdHRyLm51bV9pZnMpIHtcbiBcdFx0ZGV2X2VycihldGhzdy1cdTAwM2VkZXYsIFwiRnJhbWUgcmVjZWl2ZWQgZnJvbSB1bmtub3duIGludGVyZmFjZSFcXG5cIik7XG4gXHRcdGdvdG8gZXJyX2ZyZWVfZmQ7XG5AQCAtMjU0MSwxMiArMzE3NCwyMCBAQCBzdGF0aWMgdm9pZCBkcGFhMl9zd2l0Y2hfcngoc3RydWN0IGRwYWEyX3N3aXRjaF9mcSAqZnEsXG4gXHRcdH1cbiBcdH1cbiBcbi1cdHNrYi1cdTAwM2VkZXYgPSBuZXRkZXY7XG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXG4rXHRsYWcgPSByY3VfZGVyZWZlcmVuY2UocG9ydF9wcml2LVx1MDAzZWxhZyk7XG4rXHRpZiAoRFBBQTJfRVRIU1dfRkxDX0lNUFJFQ0lTRV9JRl9JRChmbGMpIFx1MDAyNlx1MDAyNiBsYWcpXG4rXHRcdHNrYi1cdTAwM2VkZXYgPSBsYWctXHUwMDNlYm9uZF9kZXY7XG4rXHRlbHNlXG4rXHRcdHNrYi1cdTAwM2VkZXYgPSBuZXRkZXY7XG4gXHRza2ItXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHNrYi1cdTAwM2VkZXYpO1xuIFxuIFx0LyogU2V0dXAgdGhlIG9mZmxvYWRfZndkX21hcmsgb25seSBpZiB0aGUgcG9ydCBpcyB1bmRlciBhIGJyaWRnZSAqL1xuIFx0c2tiLVx1MDAzZW9mZmxvYWRfZndkX21hcmsgPSAhIShwb3J0X3ByaXYtXHUwMDNlZmRiLVx1MDAzZWJyaWRnZV9kZXYpO1xuIFxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4gXHRuZXRpZl9yZWNlaXZlX3NrYihza2IpO1xuIFxuIFx0cmV0dXJuO1xuQEAgLTI1NjEsNiArMzIwMiw5IEBAIHN0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9kZXRlY3RfZmVhdHVyZXMoc3RydWN0IGV0aHN3X2NvcmUgKmV0aHN3KVxuIFxuIFx0aWYgKGV0aHN3LVx1MDAzZW1ham9yIFx1MDAzZSA4IHx8IChldGhzdy1cdTAwM2VtYWpvciA9PSA4IFx1MDAyNlx1MDAyNiBldGhzdy1cdTAwM2VtaW5vciBcdTAwM2U9IDYpKVxuIFx0XHRldGhzdy1cdTAwM2VmZWF0dXJlcyB8PSBFVEhTV19GRUFUVVJFX01BQ19BRERSO1xuK1xuK1x0aWYgKGV0aHN3LVx1MDAzZW1ham9yIFx1MDAzZSA4IHx8IChldGhzdy1cdTAwM2VtYWpvciA9PSA4IFx1MDAyNlx1MDAyNiBldGhzdy1cdTAwM2VtaW5vciBcdTAwM2U9IDEzKSlcbitcdFx0ZXRoc3ctXHUwMDNlZmVhdHVyZXMgfD0gRVRIU1dfRkVBVFVSRV9MQUdfT0ZGTE9BRDtcbiB9XG4gXG4gc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfc2V0dXBfZnFzKHN0cnVjdCBldGhzd19jb3JlICpldGhzdylcbkBAIC0zMTk1LDE3ICszODM5LDE1IEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX2luaXQoc3RydWN0IGZzbF9tY19kZXZpY2UgKnN3X2RldilcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLS8qIEFkZCBhbiBBQ0wgdG8gcmVkaXJlY3QgZnJhbWVzIHdpdGggc3BlY2lmaWMgZGVzdGluYXRpb24gTUFDIGFkZHJlc3MgdG9cbi0gKiBjb250cm9sIGludGVyZmFjZVxuLSAqL1xuKy8qIEFkZCBhbiBBQ0wgdG8gcmVkaXJlY3QgZnJhbWVzIHRvIGNvbnRyb2wgaW50ZXJmYWNlIGJhc2VkIG9uIHRoZSBkc3QgTUFDICovXG4gc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF90cmFwX21hY19hZGRyKHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdixcbi1cdFx0XHRcdFx0ICAgY29uc3QgY2hhciAqbWFjKVxuK1x0XHRcdFx0XHQgICBjb25zdCB1OCAqbWFjLCBjb25zdCB1OCAqbWFzaylcbiB7XG4gXHRzdHJ1Y3QgZHBhYTJfc3dpdGNoX2FjbF9lbnRyeSBhY2xfZW50cnkgPSB7MH07XG4gXG4gXHQvKiBNYXRjaCBvbiB0aGUgZGVzdGluYXRpb24gTUFDIGFkZHJlc3MgKi9cbiBcdGV0aGVyX2FkZHJfY29weShhY2xfZW50cnkua2V5Lm1hdGNoLmwyX2Rlc3RfbWFjLCBtYWMpO1xuLVx0ZXRoX2Jyb2FkY2FzdF9hZGRyKGFjbF9lbnRyeS5rZXkubWFzay5sMl9kZXN0X21hYyk7XG4rXHRldGhlcl9hZGRyX2NvcHkoYWNsX2VudHJ5LmtleS5tYXNrLmwyX2Rlc3RfbWFjLCBtYXNrKTtcbiBcbiBcdC8qIFRyYXAgdG8gQ1BVICovXG4gXHRhY2xfZW50cnkuY2ZnLnByZWNlZGVuY2UgPSAwO1xuQEAgLTMyMTYsNyArMzg1OCw4IEBAIHN0YXRpYyBpbnQgZHBhYTJfc3dpdGNoX3BvcnRfdHJhcF9tYWNfYWRkcihzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2ICpwb3J0X3ByaXYsXG4gXG4gc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9pbml0KHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiwgdTE2IHBvcnQpXG4ge1xuLVx0Y29uc3QgY2hhciBzdHBhW0VUSF9BTEVOXSA9IHsweDAxLCAweDgwLCAweGMyLCAweDAwLCAweDAwLCAweDAwfTtcbitcdGNvbnN0IHU4IGxsX21hY1tFVEhfQUxFTl0gPSB7MHgwMSwgMHg4MCwgMHhjMiwgMHgwMCwgMHgwMCwgMHgwMH07XG4rXHRjb25zdCB1OCBsbF9tYXNrW0VUSF9BTEVOXSA9IHsweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGYwfTtcbiBcdHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfdmxhbiB2bGFuID0ge1xuIFx0XHQub2JqLmlkID0gU1dJVENIREVWX09CSl9JRF9QT1JUX1ZMQU4sXG4gXHRcdC52aWQgPSBERUZBVUxUX1ZMQU5fSUQsXG5AQCAtMzI5MSw3ICszOTM0LDcgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcG9ydF9pbml0KHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdiwgdTE2IHBvcnQpXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfdHJhcF9tYWNfYWRkcihwb3J0X3ByaXYsIHN0cGEpO1xuK1x0ZXJyID0gZHBhYTJfc3dpdGNoX3BvcnRfdHJhcF9tYWNfYWRkcihwb3J0X3ByaXYsIGxsX21hYywgbGxfbWFzayk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuQEAgLTMzMzEsNiArMzk3NCw5IEBAIHN0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9yZW1vdmUoc3RydWN0IGZzbF9tY19kZXZpY2UgKnN3X2RldilcbiBcdGRldiA9IFx1MDAyNnN3X2Rldi1cdTAwM2VkZXY7XG4gXHRldGhzdyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuIFxuK1x0LyogTWFrZSBzdXJlIHRoYXQgYWxsIGV2ZW50cyB3ZXJlIGhhbmRsZWQgYmVmb3JlIHdlIGtmcmVlIGFueXRoaW5nICovXG4rXHRmbHVzaF93b3JrcXVldWUoZXRoc3ctXHUwMDNld29ya3F1ZXVlKTtcbitcbiBcdGRwYWEyX3N3aXRjaF90ZWFyZG93bl9pcnFzKHN3X2Rldik7XG4gXG4gXHRkcHN3X2Rpc2FibGUoZXRoc3ctXHUwMDNlbWNfaW8sIDAsIGV0aHN3LVx1MDAzZWRwc3dfaGFuZGxlKTtcbkBAIC0zMzQ0LDEyICszOTkwLDE1IEBAIHN0YXRpYyB2b2lkIGRwYWEyX3N3aXRjaF9yZW1vdmUoc3RydWN0IGZzbF9tY19kZXZpY2UgKnN3X2RldilcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIERQQUEyX1NXSVRDSF9SWF9OVU1fRlFTOyBpKyspXG4gXHRcdG5ldGlmX25hcGlfZGVsKFx1MDAyNmV0aHN3LVx1MDAzZWZxW2ldLm5hcGkpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZXRoc3ctXHUwMDNlc3dfYXR0ci5udW1faWZzOyBpKyspXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBldGhzdy1cdTAwM2Vzd19hdHRyLm51bV9pZnM7IGkrKykge1xuIFx0XHRkcGFhMl9zd2l0Y2hfcmVtb3ZlX3BvcnQoZXRoc3csIGkpO1xuK1x0XHRtdXRleF9kZXN0cm95KFx1MDAyNmV0aHN3LVx1MDAzZWxhZ3NbaV0uZmRiX2xvY2spO1xuK1x0fVxuIFxuIFx0a2ZyZWUoZXRoc3ctXHUwMDNlZmRicyk7XG4gXHRrZnJlZShldGhzdy1cdTAwM2VmaWx0ZXJfYmxvY2tzKTtcbiBcdGtmcmVlKGV0aHN3LVx1MDAzZXBvcnRzKTtcbitcdGtmcmVlKGV0aHN3LVx1MDAzZWxhZ3MpO1xuIFxuIFx0ZHBhYTJfc3dpdGNoX3RlYXJkb3duKHN3X2Rldik7XG4gXG5AQCAtMzM3Nyw2ICs0MDI2LDcgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcHJvYmVfcG9ydChzdHJ1Y3QgZXRoc3dfY29yZSAqZXRoc3csXG4gXHRwb3J0X3ByaXYgPSBuZXRkZXZfcHJpdihwb3J0X25ldGRldik7XG4gXHRwb3J0X3ByaXYtXHUwMDNlbmV0ZGV2ID0gcG9ydF9uZXRkZXY7XG4gXHRwb3J0X3ByaXYtXHUwMDNlZXRoc3dfZGF0YSA9IGV0aHN3O1xuK1x0cmN1X2Fzc2lnbl9wb2ludGVyKHBvcnRfcHJpdi1cdTAwM2VsYWcsIE5VTEwpO1xuIFxuIFx0bXV0ZXhfaW5pdChcdTAwMjZwb3J0X3ByaXYtXHUwMDNlbWFjX2xvY2spO1xuIFxuQEAgLTM0ODQsNiArNDEzNCwyMSBAQCBzdGF0aWMgaW50IGRwYWEyX3N3aXRjaF9wcm9iZShzdHJ1Y3QgZnNsX21jX2RldmljZSAqc3dfZGV2KVxuIFx0XHRnb3RvIGVycl9mcmVlX2ZkYnM7XG4gXHR9XG4gXG4rXHRldGhzdy1cdTAwM2VsYWdzID0ga2NhbGxvYyhldGhzdy1cdTAwM2Vzd19hdHRyLm51bV9pZnMsIHNpemVvZigqZXRoc3ctXHUwMDNlbGFncyksXG4rXHRcdFx0ICAgICAgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWV0aHN3LVx1MDAzZWxhZ3MpIHtcbitcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0Z290byBlcnJfZnJlZV9maWx0ZXI7XG4rXHR9XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBldGhzdy1cdTAwM2Vzd19hdHRyLm51bV9pZnM7IGkrKykge1xuK1x0XHRldGhzdy1cdTAwM2VsYWdzW2ldLmJvbmRfZGV2ID0gTlVMTDtcbitcdFx0ZXRoc3ctXHUwMDNlbGFnc1tpXS5ldGhzdyA9IGV0aHN3O1xuK1x0XHRldGhzdy1cdTAwM2VsYWdzW2ldLmlkID0gaSArIDE7XG4rXHRcdGV0aHN3LVx1MDAzZWxhZ3NbaV0uaW5fdXNlID0gMDtcbitcdFx0bXV0ZXhfaW5pdChcdTAwMjZldGhzdy1cdTAwM2VsYWdzW2ldLmZkYl9sb2NrKTtcbitcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZXRoc3ctXHUwMDNlbGFnc1tpXS5mZGJzKTtcbitcdH1cbitcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGV0aHN3LVx1MDAzZXN3X2F0dHIubnVtX2lmczsgaSsrKSB7XG4gXHRcdGVyciA9IGRwYWEyX3N3aXRjaF9wcm9iZV9wb3J0KGV0aHN3LCBpKTtcbiBcdFx0aWYgKGVycilcbkBAIC0zNTMwLDYgKzQxOTUsMTAgQEAgc3RhdGljIGludCBkcGFhMl9zd2l0Y2hfcHJvYmUoc3RydWN0IGZzbF9tY19kZXZpY2UgKnN3X2RldilcbiBlcnJfZnJlZV9uZXRkZXY6XG4gXHRmb3IgKGktLTsgaSBcdTAwM2U9IDA7IGktLSlcbiBcdFx0ZHBhYTJfc3dpdGNoX3JlbW92ZV9wb3J0KGV0aHN3LCBpKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGV0aHN3LVx1MDAzZXN3X2F0dHIubnVtX2lmczsgaSsrKVxuK1x0XHRtdXRleF9kZXN0cm95KFx1MDAyNmV0aHN3LVx1MDAzZWxhZ3NbaV0uZmRiX2xvY2spO1xuK1x0a2ZyZWUoZXRoc3ctXHUwMDNlbGFncyk7XG4rZXJyX2ZyZWVfZmlsdGVyOlxuIFx0a2ZyZWUoZXRoc3ctXHUwMDNlZmlsdGVyX2Jsb2Nrcyk7XG4gZXJyX2ZyZWVfZmRiczpcbiBcdGtmcmVlKGV0aHN3LVx1MDAzZWZkYnMpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guaFxuaW5kZXggNDJiM2NhNzNmNTVkNTQuLjYzYjcwMmIwMDAwYzJlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXN3aXRjaC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItc3dpdGNoLmhcbkBAIC00MSw3ICs0MSw4IEBAXG4gI2RlZmluZSBFVEhTV19NQVhfRlJBTUVfTEVOR1RIXHQoRFBBQTJfTUZMIC0gVkxBTl9FVEhfSExFTiAtIEVUSF9GQ1NfTEVOKVxuICNkZWZpbmUgRVRIU1dfTDJfTUFYX0ZSTShtdHUpXHQoKG10dSkgKyBWTEFOX0VUSF9ITEVOICsgRVRIX0ZDU19MRU4pXG4gXG4tI2RlZmluZSBFVEhTV19GRUFUVVJFX01BQ19BRERSXHRCSVQoMClcbisjZGVmaW5lIEVUSFNXX0ZFQVRVUkVfTUFDX0FERFJcdFx0QklUKDApXG4rI2RlZmluZSBFVEhTV19GRUFUVVJFX0xBR19PRkZMT0FEXHRCSVQoMSlcbiBcbiAvKiBOdW1iZXIgb2YgcmVjZWl2ZSBxdWV1ZXMgKG9uZSBSWCBhbmQgb25lIFRYX0NPTkYpICovXG4gI2RlZmluZSBEUEFBMl9TV0lUQ0hfUlhfTlVNX0ZRU1x0MlxuQEAgLTg2LDYgKzg3LDkgQEBcbiBcbiAjZGVmaW5lIERQQUEyX0VUSFNXX1BPUlRfQUNMX0NNRF9CVUZfU0laRVx0MjU2XG4gXG4rI2RlZmluZSBEUEFBMl9FVEhTV19GTENfSUZfSUQoZmxjKVx0XHQoKChmbGMpIFx1MDAzZVx1MDAzZSAzMikgXHUwMDI2IEdFTk1BU0soMTUsIDApKVxuKyNkZWZpbmUgRFBBQTJfRVRIU1dfRkxDX0lNUFJFQ0lTRV9JRl9JRChmbGMpXHQoKGZsYykgXHUwMDI2IEJJVF9VTEwoNjMpKVxuK1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZHBhYTJfc3dpdGNoX3BvcnRfZXRodG9vbF9vcHM7XG4gXG4gc3RydWN0IGV0aHN3X2NvcmU7XG5AQCAtOTksMTIgKzEwMywzMCBAQCBzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZxIHtcbiBcdHUzMiBmcWlkO1xuIH07XG4gXG4rc3RydWN0IGRwYWEyX21hY19hZGRyIHtcbitcdHVuc2lnbmVkIGNoYXIgYWRkcltFVEhfQUxFTl07XG4rXHR1MTYgdmlkO1xuK1x0cmVmY291bnRfdCByZWZjb3VudDtcbitcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbit9O1xuK1xuIHN0cnVjdCBkcGFhMl9zd2l0Y2hfZmRiIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlXHQqYnJpZGdlX2RldjtcbiBcdHUxNlx0XHRcdGZkYl9pZDtcbiBcdGJvb2xcdFx0XHRpbl91c2U7XG4gfTtcbiBcbitzdHJ1Y3QgZHBhYTJfc3dpdGNoX2xhZyB7XG4rXHRzdHJ1Y3QgZXRoc3dfY29yZVx0KmV0aHN3O1xuK1x0c3RydWN0IG5ldF9kZXZpY2VcdCpib25kX2RldjtcbitcdGJvb2xcdFx0XHRpbl91c2U7XG4rXHR1OFx0XHRcdGlkO1xuK1x0c3RydWN0IGV0aHN3X3BvcnRfcHJpdlx0KnByaW1hcnk7XG4rXHQvKiBQcm90ZWN0cyB0aGUgbGlzdCBvZiBmZGJzIGluc3RhbGxlZCBvbiB0aGlzIExBRyAqL1xuK1x0c3RydWN0IG11dGV4XHRcdGZkYl9sb2NrO1xuK1x0c3RydWN0IGxpc3RfaGVhZFx0ZmRicztcbit9O1xuK1xuIHN0cnVjdCBkcGFhMl9zd2l0Y2hfYWNsX2VudHJ5IHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG4gXHR1MTZcdFx0XHRwcmlvO1xuQEAgLTE2Myw2ICsxODUsOCBAQCBzdHJ1Y3QgZXRoc3dfcG9ydF9wcml2IHtcbiBcdHN0cnVjdCBkcGFhMl9tYWNcdCptYWM7XG4gXHQvKiBQcm90ZWN0cyBhZ2FpbnN0IGNoYW5nZXMgdG8gcG9ydF9wcml2LVx1MDAzZW1hYyAqL1xuIFx0c3RydWN0IG11dGV4XHRcdG1hY19sb2NrO1xuK1xuK1x0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgX19yY3UgKmxhZztcbiB9O1xuIFxuIC8qIFN3aXRjaCBkYXRhICovXG5AQCAtMTkwLDYgKzIxNCw4IEBAIHN0cnVjdCBldGhzd19jb3JlIHtcbiBcdHN0cnVjdCBkcGFhMl9zd2l0Y2hfZmRiXHRcdCpmZGJzO1xuIFx0c3RydWN0IGRwYWEyX3N3aXRjaF9maWx0ZXJfYmxvY2sgKmZpbHRlcl9ibG9ja3M7XG4gXHR1MTZcdFx0XHRcdG1pcnJvcl9wb3J0O1xuK1xuK1x0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWdcdFx0KmxhZ3M7XG4gfTtcbiBcbiBzdGF0aWMgaW5saW5lIGludCBkcGFhMl9zd2l0Y2hfZ2V0X2luZGV4KHN0cnVjdCBldGhzd19jb3JlICpldGhzdyxcbkBAIC0yNzQsNCArMzAwLDE4IEBAIGludCBkcGFhMl9zd2l0Y2hfYmxvY2tfb2ZmbG9hZF9taXJyb3Ioc3RydWN0IGRwYWEyX3N3aXRjaF9maWx0ZXJfYmxvY2sgKmJsb2NrLFxuIFxuIGludCBkcGFhMl9zd2l0Y2hfYmxvY2tfdW5vZmZsb2FkX21pcnJvcihzdHJ1Y3QgZHBhYTJfc3dpdGNoX2ZpbHRlcl9ibG9jayAqYmxvY2ssXG4gXHRcdFx0XHRcdHN0cnVjdCBldGhzd19wb3J0X3ByaXYgKnBvcnRfcHJpdik7XG4rXG4rc3RhdGljIGlubGluZSBib29sXG4rZHBhYTJfc3dpdGNoX3BvcnRfb2ZmbG9hZHNfYnJpZGdlX3BvcnQoc3RydWN0IGV0aHN3X3BvcnRfcHJpdiAqcG9ydF9wcml2LFxuK1x0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4re1xuK1x0c3RydWN0IGRwYWEyX3N3aXRjaF9sYWcgKmxhZyA9IHJjdV9kZXJlZmVyZW5jZV9ydG5sKHBvcnRfcHJpdi1cdTAwM2VsYWcpO1xuK1xuK1x0aWYgKGxhZyBcdTAwMjZcdTAwMjYgbGFnLVx1MDAzZWJvbmRfZGV2ID09IGRldilcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRpZiAocG9ydF9wcml2LVx1MDAzZW5ldGRldiA9PSBkZXYpXG4rXHRcdHJldHVybiB0cnVlO1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiAjZW5kaWZcdC8qIF9fRVRIU1dfSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LWNtZC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwc3ctY21kLmhcbmluZGV4IDM5N2Q1NWYyYmQ5OTUwLi45YTIwNTVjNjQ5ODNjZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LWNtZC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBzdy1jbWQuaFxuQEAgLTEyLDcgKzEyLDcgQEBcbiBcbiAvKiBEUFNXIFZlcnNpb24gKi9cbiAjZGVmaW5lIERQU1dfVkVSX01BSk9SXHRcdDhcbi0jZGVmaW5lIERQU1dfVkVSX01JTk9SXHRcdDlcbisjZGVmaW5lIERQU1dfVkVSX01JTk9SXHRcdDEzXG4gXG4gI2RlZmluZSBEUFNXX0NNRF9CQVNFX1ZFUlNJT05cdDFcbiAjZGVmaW5lIERQU1dfQ01EX1ZFUlNJT05fMlx0MlxuQEAgLTkyLDExICs5MiwxNCBAQFxuICNkZWZpbmUgRFBTV19DTURJRF9DVFJMX0lGX1NFVF9QT09MUyAgICAgICAgRFBTV19DTURfSUQoMHgwQTEpXG4gI2RlZmluZSBEUFNXX0NNRElEX0NUUkxfSUZfRU5BQkxFICAgICAgICAgICBEUFNXX0NNRF9JRCgweDBBMilcbiAjZGVmaW5lIERQU1dfQ01ESURfQ1RSTF9JRl9ESVNBQkxFICAgICAgICAgIERQU1dfQ01EX0lEKDB4MEEzKVxuKyNkZWZpbmUgRFBTV19DTURJRF9TRVRfTEFHICAgICAgICAgICAgICAgICAgRFBTV19DTURfVjIoMHgwQTQpXG4gI2RlZmluZSBEUFNXX0NNRElEX0NUUkxfSUZfU0VUX1FVRVVFICAgICAgICBEUFNXX0NNRF9JRCgweDBBNilcbiBcbiAjZGVmaW5lIERQU1dfQ01ESURfU0VUX0VHUkVTU19GTE9PRCAgICAgICAgIERQU1dfQ01EX0lEKDB4MEFDKVxuICNkZWZpbmUgRFBTV19DTURJRF9JRl9TRVRfTEVBUk5JTkdfTU9ERSAgICAgRFBTV19DTURfSUQoMHgwQUQpXG4gXG4rI2RlZmluZSBEUFNXX0NNRElEX0lGX1NFVF9MQUdfU1RBVEUgICAgICAgICBEUFNXX0NNRF9JRCgweDBCMClcbitcbiAvKiBNYWNyb3MgZm9yIGFjY2Vzc2luZyBjb21tYW5kIGZpZWxkcyBzbWFsbGVyIHRoYW4gMWJ5dGUgKi9cbiAjZGVmaW5lIERQU1dfTUFTSyhmaWVsZCkgICAgICAgIFxcXG4gXHRHRU5NQVNLKERQU1dfIyNmaWVsZCMjX1NISUZUICsgRFBTV18jI2ZpZWxkIyNfU0laRSAtIDEsIFxcXG5AQCAtNTUyLDUgKzU1NSwxOCBAQCBzdHJ1Y3QgZHBzd19jbWRfaWZfcmVmbGVjdGlvbiB7XG4gXHQvKiBvbmx5IDIgYml0cyBmcm9tIHRoZSBMU0IgKi9cbiBcdHU4IGZpbHRlcjtcbiB9O1xuK1xuK3N0cnVjdCBkcHN3X2NtZF9sYWcge1xuK1x0dTggZ3JvdXBfaWQ7XG4rXHR1OCBudW1faWZzO1xuK1x0dTggcGFkWzZdO1xuK1x0dTggaWZfaWRbRFBTV19NQVhfTEFHX0lGU107XG4rXHR1OCBwaGFzZTtcbit9O1xuK1xuK3N0cnVjdCBkcHN3X2NtZF9pZl9zZXRfbGFnX3N0YXRlIHtcbitcdF9fbGUxNiBpZl9pZDtcbitcdHU4IHR4X2VuYWJsZWQ7XG4rfTtcbiAjcHJhZ21hIHBhY2socG9wKVxuICNlbmRpZiAvKiBfX0ZTTF9EUFNXX0NNRF9IICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwc3cuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LmNcbmluZGV4IGFiOTIxZDc1ZGViMmU4Li5mNzVjYmRjZTQyYmEyZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LmNcbkBAIC0xNjU5LDMgKzE2NTksNjMgQEAgaW50IGRwc3dfaWZfcmVtb3ZlX3JlZmxlY3Rpb24oc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHUzMiBjbWRfZmxhZ3MsIHUxNiB0b2tlbixcbiBcbiBcdHJldHVybiBtY19zZW5kX2NvbW1hbmQobWNfaW8sIFx1MDAyNmNtZCk7XG4gfVxuK1xuKy8qKlxuKyAqIGRwc3dfbGFnX3NldCgpIC0gU2V0IExBRyBjb25maWd1cmF0aW9uXG4rICogQG1jX2lvOlx0UG9pbnRlciB0byBNQyBwb3J0YWwncyBJL08gb2JqZWN0XG4rICogQGNtZF9mbGFnczpcdENvbW1hbmQgZmxhZ3M7IG9uZSBvciBtb3JlIG9mICdNQ19DTURfRkxBR18nXG4rICogQHRva2VuOlx0VG9rZW4gb2YgRFBTVyBvYmplY3RcbisgKiBAY2ZnOlx0cG9pbnRlciB0byBMQUcgY29uZmlndXJhdGlvblxuKyAqXG4rICogUmV0dXJuOiAgICcwJyBvbiBTdWNjZXNzOyBFcnJvciBjb2RlIG90aGVyd2lzZS5cbisgKi9cbitpbnQgZHBzd19sYWdfc2V0KHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLCB1MzIgY21kX2ZsYWdzLCB1MTYgdG9rZW4sXG4rXHRcdCBjb25zdCBzdHJ1Y3QgZHBzd19sYWdfY2ZnICpjZmcpXG4re1xuK1x0c3RydWN0IGZzbF9tY19jb21tYW5kIGNtZCA9IHsgMCB9O1xuK1x0c3RydWN0IGRwc3dfY21kX2xhZyAqY21kX3BhcmFtcztcbitcdGludCBpID0gMDtcbitcbitcdGNtZC5oZWFkZXIgPSBtY19lbmNvZGVfY21kX2hlYWRlcihEUFNXX0NNRElEX1NFVF9MQUcsIGNtZF9mbGFncywgdG9rZW4pO1xuK1xuK1x0aWYgKGNmZy1cdTAwM2VudW1faWZzIFx1MDAzZSBEUFNXX01BWF9MQUdfSUZTKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRjbWRfcGFyYW1zID0gKHN0cnVjdCBkcHN3X2NtZF9sYWcgKiljbWQucGFyYW1zO1xuK1x0Y21kX3BhcmFtcy1cdTAwM2Vncm91cF9pZCA9IGNmZy1cdTAwM2Vncm91cF9pZDtcbitcdGNtZF9wYXJhbXMtXHUwMDNlbnVtX2lmcyA9IGNmZy1cdTAwM2VudW1faWZzO1xuK1x0Y21kX3BhcmFtcy1cdTAwM2VwaGFzZSA9IGNmZy1cdTAwM2VwaGFzZTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNmZy1cdTAwM2VudW1faWZzOyBpKyspXG4rXHRcdGNtZF9wYXJhbXMtXHUwMDNlaWZfaWRbaV0gPSBjZmctXHUwMDNlaWZfaWRbaV07XG4rXG4rXHRyZXR1cm4gbWNfc2VuZF9jb21tYW5kKG1jX2lvLCBcdTAwMjZjbWQpO1xuK31cbitcbisvKipcbisgKiBkcHN3X2lmX3NldF9sYWdfc3RhdGUoKSAtIENoYW5nZSBwZXIgcG9ydCBMQUcgc3RhdGVcbisgKiBAbWNfaW86ICAgICAgUG9pbnRlciB0byBNQyBwb3J0YWwncyBJL08gb2JqZWN0XG4rICogQGNtZF9mbGFnczogIENvbW1hbmQgZmxhZ3M7IG9uZSBvciBtb3JlIG9mICdNQ19DTURfRkxBR18nXG4rICogQHRva2VuOiAgICAgIFRva2VuIG9mIERQU1cgb2JqZWN0XG4rICogQGlmX2lkOiAgICAgIElEIG9mIHRoZSBzd2l0Y2ggaW50ZXJmYWNlXG4rICogQHR4X2VuYWJsZWQ6IFZhbHVlIG9mIHRoZSBwZXIgcG9ydCBMQUcgc3RhdGVcbisgKiAgICAgLSAwIGlmIHRoZSBpbnRlcmZhY2Ugd2lsbCBub3QgYmUgYWN0aXZlIGFzIHBhcnQgb2YgdGhlIExBRyBncm91cFxuKyAqICAgICAtIDEgaWYgdGhlIGludGVyZmFjZSB3aWxsIGJlIGFjdGl2ZSBpbiB0aGUgTEFHIGdyb3VwXG4rICpcbisgKiBSZXR1cm46ICAgJzAnIG9uIFN1Y2Nlc3M7IEVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuKyAqL1xuK2ludCBkcHN3X2lmX3NldF9sYWdfc3RhdGUoc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHUzMiBjbWRfZmxhZ3MsIHUxNiB0b2tlbixcbitcdFx0XHQgIHUxNiBpZl9pZCwgdTggdHhfZW5hYmxlZClcbit7XG4rXHRzdHJ1Y3QgZHBzd19jbWRfaWZfc2V0X2xhZ19zdGF0ZSAqY21kX3BhcmFtcztcbitcdHN0cnVjdCBmc2xfbWNfY29tbWFuZCBjbWQgPSB7IDAgfTtcbitcbitcdGNtZC5oZWFkZXIgPSBtY19lbmNvZGVfY21kX2hlYWRlcihEUFNXX0NNRElEX0lGX1NFVF9MQUdfU1RBVEUsXG4rXHRcdFx0XHRcdCAgY21kX2ZsYWdzLCB0b2tlbik7XG4rXG4rXHRjbWRfcGFyYW1zID0gKHN0cnVjdCBkcHN3X2NtZF9pZl9zZXRfbGFnX3N0YXRlICopY21kLnBhcmFtcztcbitcdGNtZF9wYXJhbXMtXHUwMDNlaWZfaWQgPSBjcHVfdG9fbGUxNihpZl9pZCk7XG4rXHRjbWRfcGFyYW1zLVx1MDAzZXR4X2VuYWJsZWQgPSB0eF9lbmFibGVkO1xuK1xuK1x0cmV0dXJuIG1jX3NlbmRfY29tbWFuZChtY19pbywgXHUwMDI2Y21kKTtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwc3cuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LmhcbmluZGV4IGI5MGJkMzYzZjQ3YTE5Li44OWYwMjY3ZGU4ZTliZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcHN3LmhcbkBAIC0yMCw2ICsyMCw4IEBAIHN0cnVjdCBmc2xfbWNfaW87XG4gXG4gI2RlZmluZSBEUFNXX01BWF9JRlx0XHQ2NFxuIFxuKyNkZWZpbmUgRFBTV19NQVhfTEFHX0lGU1x0OFxuK1xuIGludCBkcHN3X29wZW4oc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHUzMiBjbWRfZmxhZ3MsIGludCBkcHN3X2lkLCB1MTYgKnRva2VuKTtcbiBcbiBpbnQgZHBzd19jbG9zZShzdHJ1Y3QgZnNsX21jX2lvICptY19pbywgdTMyIGNtZF9mbGFncywgdTE2IHRva2VuKTtcbkBAIC03ODgsNCArNzkwLDMyIEBAIGludCBkcHN3X2lmX2FkZF9yZWZsZWN0aW9uKHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLCB1MzIgY21kX2ZsYWdzLCB1MTYgdG9rZW4sXG4gXG4gaW50IGRwc3dfaWZfcmVtb3ZlX3JlZmxlY3Rpb24oc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHUzMiBjbWRfZmxhZ3MsIHUxNiB0b2tlbixcbiBcdFx0XHQgICAgICB1MTYgaWZfaWQsIGNvbnN0IHN0cnVjdCBkcHN3X3JlZmxlY3Rpb25fY2ZnICpjZmcpO1xuK1xuKy8qIExpbmsgQWdncmVnYXRpb24gR3JvdXAgY29uZmlndXJhdGlvbiAqL1xuK1xuKyNkZWZpbmUgRFBTV19MQUdfU0VUX1BIQVNFX0FQUExZIDBcbisjZGVmaW5lIERQU1dfTEFHX1NFVF9QSEFTRV9DSEVDSyAxXG4rXG4rLyoqXG4rICogc3RydWN0IGRwc3dfbGFnX2NmZyAtIENvbmZpZ3VyYXRpb24gc3RydWN0dXJlIGZvciBhIExBRyBncm91cFxuKyAqIEBncm91cF9pZDogTGluayBhZ2dyZWdhdGlvbiBncm91cCBJRC4gVmFsaWQgdmFsdWVzIGFyZSBpbiB0aGVcbisgKiBbMSwgRFBTV19NQVhfTEFHX0lGU10gcmFuZ2UuXG4rICogQG51bV9pZnM6IE51bWJlciBvZiBpbnRlcmZhY2VzIGluIHRoaXMgTEFHIGdyb3VwLCB2YWxpZCByYW5nZSBpc1xuKyAqIFswLCBEUFNXX01BWF9MQUdfSUZTXS5cbisgKiBAaWZfaWQ6IEFycmF5IGNvbnRhaW5pbmcgdGhlIGludGVyZmFjZSBJRHMgb2YgdGhlIHBvcnRzIHBhcnQgb2YgYSBMQUcgZ3JvdXBcbisgKiBAcGhhc2U6IFVzZSBEUFNXX0xBR19TRVRfUEhBU0VfQVBQTFkgZm9yIExBRyBjb25maWd1cmF0aW9uIHByb2Nlc3Npbmcgb3JcbisgKiBEUFNXX0xBR19TRVRfUEhBU0VfQ0hFQ0sgZm9yIExBRyBjb25maWd1cmF0aW9uIHZhbGlkYXRpb24uXG4rICovXG4rc3RydWN0IGRwc3dfbGFnX2NmZyB7XG4rXHR1OCBncm91cF9pZDtcbitcdHU4IG51bV9pZnM7XG4rXHR1OCBpZl9pZFtEUFNXX01BWF9MQUdfSUZTXTtcbitcdHU4IHBoYXNlO1xuK307XG4rXG4raW50IGRwc3dfbGFnX3NldChzdHJ1Y3QgZnNsX21jX2lvICptY19pbywgdTMyIGNtZF9mbGFncywgdTE2IHRva2VuLFxuK1x0XHQgY29uc3Qgc3RydWN0IGRwc3dfbGFnX2NmZyAqY2ZnKTtcbitcbitpbnQgZHBzd19pZl9zZXRfbGFnX3N0YXRlKHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLCB1MzIgY21kX2ZsYWdzLCB1MTYgdG9rZW4sXG4rXHRcdFx0ICB1MTYgaWZfaWQsIHU4IHR4X2VuYWJsZWQpO1xuICNlbmRpZiAvKiBfX0ZTTF9EUFNXX0ggKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjUyOjEyLjExMjQ5ODM2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMxNjYzMDU0NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgRFBBQTIgTEFHIE9mZmxvYWQgQ29kZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBMaW5rIEFnZ3JlZ2F0aW9uIEdyb3VwIChMQUcpIG9mZmxvYWQgc3VwcG9ydCB0byB0aGUgRnJlZXNjYWxlIERQQUEyIHN3aXRjaCBkcml2ZXIsIHdoaWNoIGlzIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guY2AuIEl0J3MgaW1wbGVtZW50aW5nIG5ldyBmdW5jdGlvbnMgbGlrZSBgZHBhYTJfc3dpdGNoX2xhZ19nZXRfdW51c2VkYCwgYGRwYWEyX3N3aXRjaF9sYWdfZmRiX2FkZGAsIGFuZCBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIG9uZXMgbGlrZSBgZHBhYTJfc3dpdGNoX3BvcnRfbmV0ZGV2aWNlX2V2ZW50YCB0byBoYW5kbGUgYE5FVERFVl9DSEFOR0VVUFBFUmAgYW5kIGBORVRERVZfQ0hBTkdFTE9XRVJTVEFURWAuIFRoZSBjb3JlIG9mIHRoZSBkcml2ZXIgc2VlbXMgdG8gYmUgaW50ZXJhY3RpbmcgZGlyZWN0bHkgd2l0aCB0aGUgaGFyZHdhcmUsIGEgRnJlZXNjYWxlIERQQUEyIHN3aXRjaC5cblxuTXkgZmlyc3QgdGhvdWdodCBpcywgY2FuIEkgZXZlbiAqdGVzdCogdGhpcyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGlzIGRyaXZlciBpcyBzcGVjaWZpYyB0byB0aGUgRFBBQTIgYXJjaGl0ZWN0dXJlLCB0eXBpY2FsbHkgZm91bmQgb24gQVJNNjQtYmFzZWQgTlhQIExheWVyc2NhcGUgU29Dcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBpbiBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSAoR0NFKSwgd2hpY2ggYXJlIG15IHVzdWFsIHRlc3RpbmcgZ3JvdW5kcy5cblxuVGhlIGBkcGFhMl9zd2l0Y2hfcHJvYmVgIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgZGV2aWNlIG1hdGNoaW5nIHRoZSBmc2wtbWMgYnVzIGlzIGRldGVjdGVkLiBOb3csIHRoZSBmc2wtbWMgYnVzIGlzIGEgTlhQLXNwZWNpZmljIGJ1cy4gSSBoYXZlIHRvIHNlZSBpZiB0aGVyZSdzIGFueSBzb2Z0d2FyZSBlbXVsYXRpb24gb2YgdGhhdCBidXMgd2l0aGluIFFFTVUuIFVzdWFsbHksIEknZCBjaGVjayBhIHN0YW5kYXJkIHN5emthbGxlciBzZXR1cCwgYnV0IEkgZG91YnQgaXQgaGFzIGFueSBOWFAtc3BlY2lmaWMgZW11bGF0aW9uLlxuXG5JJ2xsIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gQXJlIGBDT05GSUdfRlNMX01DX0JVU2AgYW5kIGBDT05GSUdfRlNMX0RQQUEyX1NXSVRDSGAgZXZlbiBlbmFibGluZyBhbnl0aGluZyBtZWFuaW5nZnVsIHdpdGhvdXQgdGhlIGFjdHVhbCBoYXJkd2FyZT8gU2luY2Ugc3l6a2FsbGVyIGlzbid0IHNldCB1cCBmb3IgTlhQIGhhcmR3YXJlLCB0aGUgcXVlc3Rpb24gaXMsIGhvdyBjYW4gSSBldmVuIHJlYWNoIHRoaXMgY29kZT9cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBpbiBgZHBhYTItc3dpdGNoLmNgLiBBaCwgeWVzLCBpdCAqZGVwZW5kcyBvbiogYEZTTF9NQ19CVVNgIGFuZCBgRlNMX0RQQUEyX1NXSVRDSGAuIFNvLCBpdCBsb29rcyBsaWtlIGBkcGFhMl9zd2l0Y2hfcHJvYmVgICpyZXF1aXJlcyogdGhlIGZzbC1tYyBidXMgdG8gYmUgcHJlc2VudCB0byBydW4uIFRoZSBmc2wtbWMgYnVzIGRldmljZXMgYXJlIHR5cGljYWxseSBwb3B1bGF0ZWQgYnkgdGhlIGZpcm13YXJlIG9yIHRoZSBkZXZpY2UgdHJlZSBvbiBhbiBOWFAgU29DLlxuXG5Pa2F5LCBJIHRoaW5rIEkgaGF2ZSBpdC4gSXQncyBlc3NlbnRpYWxseSBpbXBvc3NpYmxlIHRvIHJlYWNoIHRoaXMgY29kZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHQ0UgKndpdGhvdXQqIHNwZWNpZmljIGhhcmR3YXJlIGVtdWxhdGlvbiBvZiB0aGUgZnNsLW1jIGJ1cyBhbmQgRFBBQTIgaGFyZHdhcmUuIFRoaXMgd291bGQgbWVhbiBJIHdvdWxkIGhhdmUgdG8gY3JlYXRlIGN1c3RvbSBlbXVsYXRpb24gc3BlY2lmaWMgdG8gdGhlIERQQUEyIGhhcmR3YXJlIHRvIHJlYWNoIHRoaXMgbmV3IGNvZGUsIHdoaWNoIGlzIGJleW9uZCB0aGUgc2NvcGUgb2YgYSBzdGFuZGFyZCBmdXp6aW5nIGVmZm9ydC5cblxuTGV0J3MgZG91YmxlLWNoZWNrLiBJJ2xsIHVzZSBgZ3JlcHBlcmAgdG8gc2VhcmNoIHRocm91Z2ggYGRyaXZlcnMvYCBhbmQgYHRvb2xzL2AgZm9yIG1lbnRpb25zIG9mIGBmc2wtbWNgIG9yIGBkcGFhMmAgdG8gc2VlIGlmIHRoZXJlJ3MgKmFueSogbW9jayBpbXBsZW1lbnRhdGlvbiBvciBhbnkgc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGUgZGV2aWNlLCBidXQgSSBhbSBub3QgdmVyeSBob3BlZnVsLiBUaGlzIHBhdGNoIHNob3VsZCB0aGVyZWZvcmUgaGF2ZSBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxNjYsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMTo1MjoyNS4yNzg4MDcyODVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcwNjM2NDYzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmc2wtbWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9idXMvS2NvbmZpZz0yNDI9Y29uZmlnIERBOFhYX01TVFBSSVxcbi0tXFxuZHJpdmVycy9idXMvS2NvbmZpZy0yNDktXFxuZHJpdmVycy9idXMvS2NvbmZpZzoyNTA6c291cmNlIFxcXCJkcml2ZXJzL2J1cy9mc2wtbWMvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL2J1cy9LY29uZmlnLTI1MS1zb3VyY2UgXFxcImRyaXZlcnMvYnVzL21oaS9LY29uZmlnXFxcIlxcbi0tXFxuZHJpdmVycy9idXMvTWFrZWZpbGU9MTE9b2JqLSQoQ09ORklHX01PWFRFVClcXHRcXHQrPSBtb3h0ZXQub1xcbmRyaXZlcnMvYnVzL01ha2VmaWxlLTEyLVxcbmRyaXZlcnMvYnVzL01ha2VmaWxlOjEzOiMgRFBBQTIgZnNsLW1jIGJ1c1xcbmRyaXZlcnMvYnVzL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19GU0xfTUNfQlVTKVxcdCs9IGZzbC1tYy9cXG5kcml2ZXJzL2J1cy9NYWtlZmlsZS0xNS1cXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9LY29uZmlnLTItI1xcbmRyaXZlcnMvYnVzL2ZzbC1tYy9LY29uZmlnOjM6IyBEUEFBMiBmc2wtbWMgYnVzXFxuZHJpdmVycy9idXMvZnNsLW1jL0tjb25maWctNC0jXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvS2NvbmZpZz04PWNvbmZpZyBGU0xfTUNfQlVTXFxuZHJpdmVycy9idXMvZnNsLW1jL0tjb25maWc6OTpcXHRib29sIFxcXCJRb3JJUSBEUEFBMiBmc2wtbWMgYnVzIGRyaXZlclxcXCJcXG5kcml2ZXJzL2J1cy9mc2wtbWMvS2NvbmZpZy0xMC1cXHRkZXBlbmRzIG9uIE9GIFxcdTAwMjZcXHUwMDI2IChBUkNIX0xBWUVSU0NBUEUgfHwgKENPTVBJTEVfVEVTVCBcXHUwMDI2XFx1MDAyNiAoQVJNIHx8IEFSTTY0IHx8IFg4Nl9MT0NBTF9BUElDIHx8IFBQQykpKVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL0tjb25maWctMTMtXFx0ICBEcml2ZXIgdG8gZW5hYmxlIHRoZSBidXMgaW5mcmFzdHJ1Y3R1cmUgZm9yIHRoZSBRb3JJUSBEUEFBMlxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9LY29uZmlnOjE0OlxcdCAgYXJjaGl0ZWN0dXJlLiAgVGhlIGZzbC1tYyBidXMgZHJpdmVyIGhhbmRsZXMgZGlzY292ZXJ5IG9mXFxuZHJpdmVycy9idXMvZnNsLW1jL0tjb25maWctMTUtXFx0ICBEUEFBMiBvYmplY3RzICh3aGljaCBhcmUgcmVwcmVzZW50ZWQgYXMgTGludXggZGV2aWNlcykgYW5kXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvTWFrZWZpbGU9Nz1vYmotJChDT05GSUdfRlNMX01DX0JVUykgKz0gbWMtYnVzLWRyaXZlci5vXFxuZHJpdmVycy9idXMvZnNsLW1jL01ha2VmaWxlLTgtXFxuZHJpdmVycy9idXMvZnNsLW1jL01ha2VmaWxlOjk6bWMtYnVzLWRyaXZlci1vYmpzIDo9IGZzbC1tYy1idXMubyBcXFxcXFxuZHJpdmVycy9idXMvZnNsLW1jL01ha2VmaWxlLTEwLVxcdFxcdCAgICAgIG1jLXN5cy5vIFxcXFxcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9NYWtlZmlsZS0xNS1cXHRcXHQgICAgICBkcHJjLWRyaXZlci5vIFxcXFxcXG5kcml2ZXJzL2J1cy9mc2wtbWMvTWFrZWZpbGU6MTY6XFx0XFx0ICAgICAgZnNsLW1jLWFsbG9jYXRvci5vIFxcXFxcXG5kcml2ZXJzL2J1cy9mc2wtbWMvTWFrZWZpbGU6MTc6XFx0XFx0ICAgICAgZnNsLW1jLW1zaS5vIFxcXFxcXG5kcml2ZXJzL2J1cy9mc2wtbWMvTWFrZWZpbGUtMTgtXFx0XFx0ICAgICAgZHBtY3AubyBcXFxcXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvTWFrZWZpbGUtMjEtIyBNQyB1c2Vyc3BhY2Ugc3VwcG9ydFxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9NYWtlZmlsZToyMjpvYmotJChDT05GSUdfRlNMX01DX1VBUElfU1VQUE9SVCkgKz0gZnNsLW1jLXVhcGkub1xcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwYnAuYy04LVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcGJwLmM6OTojaW5jbHVkZSBcXFwiZnNsLW1jLXByaXZhdGUuaFxcXCJcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHBicC5jLTEwLVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwY29uLmMtOC1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHBjb24uYzo5OiNpbmNsdWRlIFxcXCJmc2wtbWMtcHJpdmF0ZS5oXFxcIlxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcGNvbi5jLTEwLVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwbWNwLmMtOC1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHBtY3AuYzo5OiNpbmNsdWRlIFxcXCJmc2wtbWMtcHJpdmF0ZS5oXFxcIlxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcG1jcC5jLTEwLVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtMTUtXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM6MTY6I2luY2x1ZGUgXFxcImZzbC1tYy1wcml2YXRlLmhcXFwiXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtMTctXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYz02OD1zdGF0aWMgaW50IF9fZnNsX21jX2RldmljZV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtNzktICpcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYzo4MDogKiBAbWNfYnVzX2RldjogcG9pbnRlciB0byB0aGUgZnNsLW1jIGRldmljZSB0aGF0IHJlcHJlc2VudHMgYSBEUFJDIG9iamVjdFxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTgxLSAqIEBvYmpfZGVzY19hcnJheTogYXJyYXkgb2Ygb2JqZWN0IGRlc2NyaXB0b3JzIGZvciBjaGlsZCBvYmplY3RzIGN1cnJlbnRseVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM9MTIzPXN0cnVjdCBmc2xfbWNfZGV2aWNlICpmc2xfbWNfZGV2aWNlX2xvb2t1cChzdHJ1Y3QgZnNsX21jX29ial9kZXNjICpvYmpfZGVzYyxcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTEzNi0gKlxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jOjEzNzogKiBAbWNfZGV2OiBwb2ludGVyIHRvIHRoZSBmc2wtbWMgZGV2aWNlIGZvciBhIGdpdmVuIE1DIG9iamVjdFxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTEzOC0gKiBAb2JqX2Rlc2M6IHBvaW50ZXIgdG8gdGhlIE1DIG9iamVjdCdzIGRlc2NyaXB0b3IgaW4gdGhlIE1DXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtMTM5LSAqXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM6MTQwOiAqIElmIHRoZSBwbHVnZ2VkIHN0YXRlIGhhcyBjaGFuZ2VkIGZyb20gdW5wbHVnZ2VkIHRvIHBsdWdnZWQsIHRoZSBmc2wtbWNcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYy0xNDEtICogZGV2aWNlIGlzIGJvdW5kIHRvIHRoZSBjb3JyZXNwb25kaW5nIGRldmljZSBkcml2ZXIuXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM6MTQyOiAqIElmIHRoZSBwbHVnZ2VkIHN0YXRlIGhhcyBjaGFuZ2VkIGZyb20gcGx1Z2dlZCB0byB1bnBsdWdnZWQsIHRoZSBmc2wtbWNcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYy0xNDMtICogZGV2aWNlIGlzIHVuYm91bmQgZnJvbSB0aGUgY29ycmVzcG9uZGluZyBkZXZpY2UgZHJpdmVyLlxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM9MTY5PXN0YXRpYyB2b2lkIGZzbF9tY19vYmpfZGV2aWNlX2FkZChzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfYnVzX2RldixcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTE5Mi0gKlxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jOjE5MzogKiBAbWNfYnVzX2RldjogcG9pbnRlciB0byB0aGUgZnNsLW1jIGRldmljZSB0aGF0IHJlcHJlc2VudHMgYSBEUFJDIG9iamVjdFxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTE5NC0gKiBAb2JqX2Rlc2NfYXJyYXk6IGFycmF5IG9mIGRldmljZSBkZXNjcmlwdG9ycyBmb3IgY2hpbGQgZGV2aWNlcyBjdXJyZW50bHlcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jPTIwMj1zdGF0aWMgdm9pZCBkcHJjX2FkZF9uZXdfZGV2aWNlcyhzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfYnVzX2RldixcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTIyOC0gKlxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jOjIyOTogKiBAbWNfYnVzX2RldjogcG9pbnRlciB0byB0aGUgZnNsLW1jIGRldmljZSB0aGF0IHJlcHJlc2VudHMgYSBEUFJDIG9iamVjdFxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTIzMC0gKiBAYWxsb2NfaW50ZXJydXB0czogaWYgdHJ1ZSB0aGUgZnVuY3Rpb24gYWxsb2NhdGVzIHRoZSBpbnRlcnJ1cHQgcG9vbCxcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jPTI0NT1pbnQgZHByY19zY2FuX29iamVjdHMoc3RydWN0IGZzbF9tY19kZXZpY2UgKm1jX2J1c19kZXYsXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYy0zNTYtICpcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYzozNTc6ICogQG1jX2J1c19kZXY6IHBvaW50ZXIgdG8gdGhlIGZzbC1tYyBkZXZpY2UgdGhhdCByZXByZXNlbnRzIGEgRFBSQyBvYmplY3RcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYy0zNTgtICogQGFsbG9jX2ludGVycnVwdHM6IGlmIHRydWUgdGhlIGZ1bmN0aW9uIGFsbG9jYXRlcyB0aGUgaW50ZXJydXB0IHBvb2wsXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYz01NzI9c3RhdGljIGludCBkcHJjX3NldHVwX2lycShzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfZGV2KVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtNjAxLSAqXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM6NjAyOiAqIEBtY19kZXY6IFBvaW50ZXIgdG8gZnNsLW1jIGRldmljZSByZXByZXNlbnRpbmcgYSBEUFJDXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtNjAzLSAqXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYz03MTE9RVhQT1JUX1NZTUJPTF9HUEwoZHByY19zZXR1cCk7XFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYy03MTUtICpcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYzo3MTY6ICogQG1jX2RldjogUG9pbnRlciB0byBmc2wtbWMgZGV2aWNlIHJlcHJlc2VudGluZyBhIERQUkNcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYy03MTctICpcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jPTc1OD1zdGF0aWMgdm9pZCBkcHJjX3RlYXJkb3duX2lycShzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfZGV2KVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtNzcxLSAqXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM6NzcyOiAqIEBtY19kZXY6IFBvaW50ZXIgdG8gZnNsLW1jIGRldmljZSByZXByZXNlbnRpbmcgdGhlIERQUkNcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYy03NzMtICpcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jPTgxNT1FWFBPUlRfU1lNQk9MX0dQTChkcHJjX2NsZWFudXApO1xcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtODE5LSAqXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM6ODIwOiAqIEBtY19kZXY6IFBvaW50ZXIgdG8gZnNsLW1jIGRldmljZSByZXByZXNlbnRpbmcgdGhlIERQUkNcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYy04MjEtICpcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLmMtOS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy5jOjEwOiNpbmNsdWRlIFxcXCJmc2wtbWMtcHJpdmF0ZS5oXFxcIlxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLmMtMTEtXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTItLypcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jOjM6ICogZnNsLW1jIG9iamVjdCBhbGxvY2F0b3IgZHJpdmVyXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYy00LSAqXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTEyLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM6MTM6I2luY2x1ZGUgXFxcImZzbC1tYy1wcml2YXRlLmhcXFwiXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYy0xNC1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jPTE1PXN0YXRpYyBib29sIF9fbXVzdF9jaGVjayBmc2xfbWNfaXNfYWxsb2NhdGFibGUoc3RydWN0IGZzbF9tY19kZXZpY2UgKm1jX2RldilcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtMjMtICogZnNsX21jX3Jlc291cmNlX3Bvb2xfYWRkX2RldmljZSAtIGFkZCBhbGxvY2F0YWJsZSBvYmplY3QgdG8gYSByZXNvdXJjZVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM6MjQ6ICogcG9vbCBvZiBhIGdpdmVuIGZzbC1tYyBidXNcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTI1LSAqXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYzoyNjogKiBAbWNfYnVzOiBwb2ludGVyIHRvIHRoZSBmc2wtbWMgYnVzXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYy0yNy0gKiBAcG9vbF90eXBlOiBwb29sIHR5cGVcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jOjI4OiAqIEBtY19kZXY6IHBvaW50ZXIgdG8gYWxsb2NhdGFibGUgZnNsLW1jIGRldmljZVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtMjktICovXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYz0zMD1zdGF0aWMgaW50IF9fbXVzdF9jaGVjayBmc2xfbWNfcmVzb3VyY2VfcG9vbF9hZGRfZGV2aWNlKHN0cnVjdCBmc2xfbWNfYnVzXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTkxLSAqXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYzo5MjogKiBAbWNfZGV2OiBwb2ludGVyIHRvIGFsbG9jYXRhYmxlIGZzbC1tYyBkZXZpY2VcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTkzLSAqXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYzo5NDogKiBJdCBwZXJtYW5lbnRseSByZW1vdmVzIGFuIGFsbG9jYXRhYmxlIGZzbC1tYyBkZXZpY2UgZnJvbSB0aGUgcmVzb3VyY2VcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTk1LSAqIHBvb2wuIEl0J3MgYW4gZXJyb3IgaWYgdGhlIGRldmljZSBpcyBpbiB1c2UuXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jPTI1ND1FWFBPUlRfU1lNQk9MX0dQTChmc2xfbWNfcmVzb3VyY2VfZnJlZSk7XFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTI1Ni0vKipcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jOjI1NzogKiBmc2xfbWNfb2JqZWN0X2FsbG9jYXRlIC0gQWxsb2NhdGVzIGFuIGZzbC1tYyBvYmplY3Qgb2YgdGhlIGdpdmVuXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYzoyNTg6ICogcG9vbCB0eXBlIGZyb20gYSBnaXZlbiBmc2wtbWMgYnVzIGluc3RhbmNlXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYy0yNTktICpcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jOjI2MDogKiBAbWNfZGV2OiBmc2wtbWMgZGV2aWNlIHdoaWNoIGlzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGVcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTI2MS0gKiBhbGxvY2F0ZWQgb2JqZWN0XFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jPTMyMj1FWFBPUlRfU1lNQk9MX0dQTChmc2xfbWNfb2JqZWN0X2FsbG9jYXRlKTtcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtMzI0LS8qKlxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM6MzI1OiAqIGZzbF9tY19vYmplY3RfZnJlZSAtIFJldHVybnMgYW4gZnNsLW1jIG9iamVjdCB0byB0aGUgcmVzb3VyY2VcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTMyNi0gKiBwb29sIHdoZXJlIGl0IGNhbWUgZnJvbS5cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jOjMyNzogKiBAbWNfYWRldjogUG9pbnRlciB0byB0aGUgZnNsLW1jIGRldmljZVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtMzI4LSAqL1xcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYz0zNDM9RVhQT1JUX1NZTUJPTF9HUEwoZnNsX21jX29iamVjdF9mcmVlKTtcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtMzUxLS8qXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYzozNTI6ICogSW5pdGlhbGl6ZSB0aGUgaW50ZXJydXB0IHBvb2wgYXNzb2NpYXRlZCB3aXRoIGFuIGZzbC1tYyBidXMuXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYy0zNTMtICogSXQgYWxsb2NhdGVzIGEgYmxvY2sgb2YgSVJRcyBmcm9tIHRoZSBHSUMtSVRTLlxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYz00MTE9RVhQT1JUX1NZTUJPTF9HUEwoZnNsX21jX3BvcHVsYXRlX2lycV9wb29sKTtcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtNDEzLS8qXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYzo0MTQ6ICogVGVhcmRvd24gdGhlIGludGVycnVwdCBwb29sIGFzc29jaWF0ZWQgd2l0aCBhbiBmc2wtbWMgYnVzLlxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtNDE1LSAqIEl0IGZyZWVzIHRoZSBJUlFzIHRoYXQgd2VyZSBhbGxvY2F0ZWQgdG8gdGhlIHBvb2wsIGJhY2sgdG8gdGhlIEdJQy1JVFMuXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jPTQzOD1FWFBPUlRfU1lNQk9MX0dQTChmc2xfbWNfY2xlYW51cF9pcnFfcG9vbCk7XFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTQ0MC0vKlxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM6NDQxOiAqIEFsbG9jYXRlIHRoZSBJUlFzIHJlcXVpcmVkIGJ5IGEgZ2l2ZW4gZnNsLW1jIGRldmljZS5cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTQ0Mi0gKi9cXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM9NTA2PUVYUE9SVF9TWU1CT0xfR1BMKGZzbF9tY19hbGxvY2F0ZV9pcnFzKTtcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmMtNTA4LS8qXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYzo1MDk6ICogRnJlZXMgdGhlIElSUXMgdGhhdCB3ZXJlIGFsbG9jYXRlZCBmb3IgYW4gZnNsLW1jIGRldmljZS5cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTUxMC0gKi9cXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM9NTYyPXN0YXRpYyBpbnQgZnNsX21jX2FsbG9jYXRvcl9wcm9iZShzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfZGV2KVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYy01ODUtXFx0ZGV2X2RiZyhcXHUwMDI2bWNfZGV2LVxcdTAwM2VkZXYsXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1hbGxvY2F0b3IuYzo1ODY6XFx0XFx0XFxcIkFsbG9jYXRhYmxlIGZzbC1tYyBkZXZpY2UgYm91bmQgdG8gZnNsX21jX2FsbG9jYXRvciBkcml2ZXJcXFwiKTtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTU4Ny1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYWxsb2NhdG9yLmM9NTk0PXN0YXRpYyB2b2lkIGZzbF9tY19hbGxvY2F0b3JfcmVtb3ZlKHN0cnVjdCBmc2xfbWNfZGV2aWNlICptY19kZXYpXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTYwNC1cXHRkZXZfZGJnKFxcdTAwMjZtY19kZXYtXFx1MDAzZWRldixcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jOjYwNTpcXHRcXHRcXFwiQWxsb2NhdGFibGUgZnNsLW1jIGRldmljZSB1bmJvdW5kIGZyb20gZnNsX21jX2FsbG9jYXRvciBkcml2ZXJcXFwiKTtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWFsbG9jYXRvci5jLTYwNi19XFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEwLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTE6I2RlZmluZSBwcl9mbXQoZm10KSBcXFwiZnNsLW1jOiBcXFwiIGZtdFxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTItXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTI1LVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MjY6I2luY2x1ZGUgXFxcImZzbC1tYy1wcml2YXRlLmhcXFwiXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0yNy1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTI4LS8qXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoyOTogKiBEZWZhdWx0IERNQSBtYXNrIGZvciBkZXZpY2VzIG9uIGEgZnNsLW1jIGJ1c1xcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMzAtICovXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTMzPXN0YXRpYyBzdHJ1Y3QgZnNsX21jX3ZlcnNpb24gbWNfdmVyc2lvbjtcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMzYtICogc3RydWN0IGZzbF9tYyAtIFByaXZhdGUgZGF0YSBvZiBhIFxcXCJmc2wscW9yaXEtbWNcXFwiIHBsYXRmb3JtIGRldmljZVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6Mzc6ICogQHJvb3RfbWNfYnVzX2RldjogZnNsLW1jIGRldmljZSByZXByZXNlbnRpbmcgdGhlIHJvb3QgRFBSQ1xcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMzgtICogQG51bV90cmFuc2xhdGlvbl9yYW5nZXM6IG51bWJlciBvZiBlbnRyaWVzIGluIGFkZHJfdHJhbnNsYXRpb25fcmFuZ2VzXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTgwPXN0YXRpYyBwaHlzX2FkZHJfdCBtY19wb3J0YWxfYmFzZV9waHlzX2FkZHI7XFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTgzLSAqIGZzbF9tY19idXNfbWF0Y2ggLSBkZXZpY2UgdG8gZHJpdmVyIG1hdGNoaW5nIGNhbGxiYWNrXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzo4NDogKiBAZGV2OiB0aGUgZnNsLW1jIGRldmljZSB0byBtYXRjaCBhZ2FpbnN0XFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzo4NTogKiBAZHJ2OiB0aGUgZGV2aWNlIGRyaXZlciB0byBzZWFyY2ggZm9yIG1hdGNoaW5nIGZzbC1tYyBvYmplY3QgdHlwZVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtODYtICogc3RydWN0dXJlc1xcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0xMzk9c3RhdGljIGludCBmc2xfbWNfYnVzX3VldmVudChjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudilcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTQyLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTQzOlxcdGlmIChhZGRfdWV2ZW50X3ZhcihlbnYsIFxcXCJNT0RBTElBUz1mc2wtbWM6diUwOFhkJXNcXFwiLFxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTQ0LVxcdFxcdFxcdCAgIG1jX2Rldi1cXHUwMDNlb2JqX2Rlc2MudmVuZG9yLFxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0yMTQ9c3RhdGljIHNzaXplX3QgbW9kYWxpYXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0yMTgtXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoyMTk6XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiZnNsLW1jOnYlMDhYZCVzXFxcXG5cXFwiLCBtY19kZXYtXFx1MDAzZW9ial9kZXNjLnZlbmRvcixcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTIyMC1cXHRcXHRcXHRtY19kZXYtXFx1MDAzZW9ial9kZXNjLnR5cGUpO1xcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0zMjY9Y29uc3Qgc3RydWN0IGJ1c190eXBlIGZzbF9tY19idXNfdHlwZSA9IHtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjMyNzpcXHQubmFtZSA9IFxcXCJmc2wtbWNcXFwiLFxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMzI4LVxcdC5kcml2ZXJfb3ZlcnJpZGUgPSB0cnVlLFxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz00OTk9c3RhdGljIGludCBtY19nZXRfdmVyc2lvbihzdHJ1Y3QgZnNsX21jX2lvICptY19pbyxcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtNTI4LSAqXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzo1Mjk6ICogUmV0dXJuOlxcdG1jIHZlcnNpb24gd2hlbiBjYWxsZWQgYWZ0ZXIgZnNsLW1jLWJ1cyBwcm9iZTsgTlVMTCBvdGhlcndpc2UuXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy01MzAtICovXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTYzMj1zdGF0aWMgaW50IGZzbF9tY19kZXZpY2VfZ2V0X21taW9fcmVnaW9ucyhzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfZGV2LFxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy03MTAtXFx0XFx0cmVnaW9uc1tpXS5lbmQgPSByZWdpb25zW2ldLnN0YXJ0ICsgcmVnaW9uX2Rlc2Muc2l6ZSAtIDE7XFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzo3MTE6XFx0XFx0cmVnaW9uc1tpXS5uYW1lID0gXFxcImZzbC1tYyBvYmplY3QgTU1JTyByZWdpb25cXFwiO1xcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtNzEyLVxcdFxcdHJlZ2lvbnNbaV0uZmxhZ3MgPSByZWdpb25fZGVzYy5mbGFncyBcXHUwMDI2IElPUkVTT1VSQ0VfQklUUztcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9NzM3PXN0YXRpYyB2b2lkIGZzbF9tY19kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTc0OS0vKlxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6NzUwOiAqIEFkZCBhIG5ld2x5IGRpc2NvdmVyZWQgZnNsLW1jIGRldmljZSB0byBiZSB2aXNpYmxlIGluIExpbnV4XFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy03NTEtICovXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTg4Mj1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGZzbF9tY19uYjtcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtODg0LS8qKlxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6ODg1OiAqIGZzbF9tY19kZXZpY2VfcmVtb3ZlIC0gUmVtb3ZlIGFuIGZzbC1tYyBkZXZpY2UgZnJvbSBiZWluZyB2aXNpYmxlIHRvXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy04ODYtICogTGludXhcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTg4Ny0gKlxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6ODg4OiAqIEBtY19kZXY6IFBvaW50ZXIgdG8gYW4gZnNsLW1jIGRldmljZVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtODg5LSAqL1xcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz05MDA9c3RydWN0IGZzbF9tY19kZXZpY2UgKmZzbF9tY19nZXRfZW5kcG9pbnQoc3RydWN0IGZzbF9tY19kZXZpY2UgKm1jX2RldixcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtOTM2LVxcdCAqIGludGVycm9nYXRpbmcgdGhlIGZpcm13YXJlLiBUaGlzIGlzIHRoZSBjYXNlIHdoZW4gdGhlIGRldmljZSB3YXMgbm90XFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzo5Mzc6XFx0ICogeWV0IGRpc2NvdmVyZWQgYnkgdGhlIGZzbC1tYyBidXMsIHRodXMgdGhlIGxvb2t1cCByZXR1cm5lZCBOVUxMLlxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtOTM4LVxcdCAqIEZvcmNlIGEgcmVzY2FuIG9mIHRoZSBkZXZpY2VzIGluIHRoaXMgY29udGFpbmVyIGFuZCByZXRyeSB0aGUgbG9va3VwLlxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0xMDA1PXN0YXRpYyBpbnQgZnNsX21jX2Zpcm13YXJlX2NoZWNrKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEwMTMtXFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LFxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTAxNDpcXHRcXHRcXHRcXFwiZnNsLW1jOiBEUEwgcHJvY2Vzc2luZyB3YXMgbm90IHN0YXJ0ZWQsIERQQUEyIHdpbGwgbm90IHdvcmshXFxcXG5cXFwiKTtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEwMTUtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMDIwLVxcdFxcdGRldl9kYmcoXFx1MDAyNnBkZXYtXFx1MDAzZWRldixcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjEwMjE6XFx0XFx0XFx0XFxcImZzbC1tYzogRFBMIHByb2Nlc3NpbmcgaW4gcHJvZ3Jlc3MsIGRlZmVyIHByb2JlXFxcXG5cXFwiKTtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEwMjItXFx0XFx0cmV0dXJuIC1FUFJPQkVfREVGRVI7XFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEwMjctXFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LFxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTAyODpcXHRcXHRcXHRcXFwiZnNsLW1jOiBNQyBib290IGNvbXBsZXRlZCB3aXRoIGVycm9yIDB4JXhcXFxcblxcXCIsIG1jcyk7XFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMDI5LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1tc2kuYy0xNS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLW1zaS5jOjE2OiNpbmNsdWRlIFxcXCJmc2wtbWMtcHJpdmF0ZS5oXFxcIlxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtbXNpLmMtMTctXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLXByaXZhdGUuaD01ODI9c3RydWN0IGZzbF9tY191YXBpIHtcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtcHJpdmF0ZS5oLTU5MS0gKiBzdHJ1Y3QgZnNsX21jX2J1cyAtIGxvZ2ljYWwgYnVzIHRoYXQgY29ycmVzcG9uZHMgdG8gYSBwaHlzaWNhbCBEUFJDXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1wcml2YXRlLmg6NTkyOiAqIEBtY19kZXY6IGZzbC1tYyBkZXZpY2UgZm9yIHRoZSBidXMgZGV2aWNlIGl0c2VsZi5cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLXByaXZhdGUuaC01OTMtICogQHJlc291cmNlX3Bvb2xzOiBhcnJheSBvZiByZXNvdXJjZSBwb29scyAob25lIHBvb2wgcGVyIHJlc291cmNlIHR5cGUpXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLXVhcGkuYy0xMy1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLXVhcGkuYzoxNDojaW5jbHVkZSBcXFwiZnNsLW1jLXByaXZhdGUuaFxcXCJcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLXVhcGkuYy0xNS1cXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9tYy1pby5jLTktXFxuZHJpdmVycy9idXMvZnNsLW1jL21jLWlvLmM6MTA6I2luY2x1ZGUgXFxcImZzbC1tYy1wcml2YXRlLmhcXFwiXFxuZHJpdmVycy9idXMvZnNsLW1jL21jLWlvLmMtMTEtXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvbWMtc3lzLmMtMTYtXFxuZHJpdmVycy9idXMvZnNsLW1jL21jLXN5cy5jOjE3OiNpbmNsdWRlIFxcXCJmc2wtbWMtcHJpdmF0ZS5oXFxcIlxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9tYy1zeXMuYy0xOC1cXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9vYmotYXBpLmMtOC1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvb2JqLWFwaS5jOjk6I2luY2x1ZGUgXFxcImZzbC1tYy1wcml2YXRlLmhcXFwiXFxuZHJpdmVycy9idXMvZnNsLW1jL29iai1hcGkuYy0xMC1cXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NhYW0vS2NvbmZpZz0xNzg9Y29uZmlnIENSWVBUT19ERVZfRlNMX0RQQUEyX0NBQU1cXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NhYW0vS2NvbmZpZy0xOTMtXFx0ICBJdCBoYW5kbGVzIERQU0VDSSBEUEFBMiBvYmplY3RzIHRoYXQgc2l0IG9uIHRoZSBNYW5hZ2VtZW50IENvbXBsZXhcXG5kcml2ZXJzL2NyeXB0by9jYWFtL0tjb25maWc6MTk0OlxcdCAgKE1DKSBmc2wtbWMgYnVzLlxcbmRyaXZlcnMvY3J5cHRvL2NhYW0vS2NvbmZpZy0xOTUtXFxuLS1cXG5kcml2ZXJzL2RtYS9mc2wtZHBhYTItcWRtYS9kcGFhMi1xZG1hLmM9MTUyPWRwYWEyX3FkbWFfcG9wdWxhdGVfZmQodTMyIGZvcm1hdCwgc3RydWN0IGRwYWEyX3FkbWFfY29tcCAqZHBhYTJfY29tcClcXG4tLVxcbmRyaXZlcnMvZG1hL2ZzbC1kcGFhMi1xZG1hL2RwYWEyLXFkbWEuYy0xNjMtXFx0ICogQnlwYXNzIG1lbW9yeSB0cmFuc2xhdGlvbiwgRnJhbWUgbGlzdCBmb3JtYXQsIHNob3J0IGxlbmd0aCBkaXNhYmxlXFxuZHJpdmVycy9kbWEvZnNsLWRwYWEyLXFkbWEvZHBhYTItcWRtYS5jOjE2NDpcXHQgKiB3ZSBuZWVkIHRvIGRpc2FibGUgQk1UIGlmIGZzbC1tYyB1c2UgaW92YSBhZGRyXFxuZHJpdmVycy9kbWEvZnNsLWRwYWEyLXFkbWEvZHBhYTItcWRtYS5jLTE2NS1cXHQgKi9cXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXUuYz0xNjg1PUVYUE9SVF9TWU1CT0xfR1BMKHBjaV9kZXZpY2VfZ3JvdXApO1xcbmRyaXZlcnMvaW9tbXUvaW9tbXUuYy0xNjg2LVxcbmRyaXZlcnMvaW9tbXUvaW9tbXUuYzoxNjg3Oi8qIEdldCB0aGUgSU9NTVUgZ3JvdXAgZm9yIGRldmljZSBvbiBmc2wtbWMgYnVzICovXFxuZHJpdmVycy9pb21tdS9pb21tdS5jLTE2ODgtc3RydWN0IGlvbW11X2dyb3VwICpmc2xfbWNfZGV2aWNlX2dyb3VwKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvc29jL2ZzbC9kcGlvL01ha2VmaWxlLTUtXFxuZHJpdmVycy9zb2MvZnNsL2RwaW8vTWFrZWZpbGU6NjpvYmotJChDT05GSUdfRlNMX01DX0RQSU8pICs9IGZzbC1tYy1kcGlvLm9cXG5kcml2ZXJzL3NvYy9mc2wvZHBpby9NYWtlZmlsZS03LVxcbmRyaXZlcnMvc29jL2ZzbC9kcGlvL01ha2VmaWxlOjg6ZnNsLW1jLWRwaW8tb2JqcyA6PSBkcGlvLm8gcWJtYW4tcG9ydGFsLm8gZHBpby1zZXJ2aWNlLm8gZHBpby1kcml2ZXIub1xcbi0tXFxuZHJpdmVycy9zb2MvZnNsL2RwaW8vZHBpby1zZXJ2aWNlLmM9MjI2PWlycXJldHVybl90IGRwYWEyX2lvX2lycShzdHJ1Y3QgZHBhYTJfaW8gKm9iailcXG4tLVxcbmRyaXZlcnMvc29jL2ZzbC9kcGlvL2RwaW8tc2VydmljZS5jLTI0OS1cXHRcXHR9IGVsc2Uge1xcbmRyaXZlcnMvc29jL2ZzbC9kcGlvL2RwaW8tc2VydmljZS5jOjI1MDpcXHRcXHRcXHRwcl9jcml0KFxcXCJmc2wtbWMtZHBpbzogVW5yZWNvZ25pc2VkL2lnbm9yZWQgRFFSUiBlbnRyeVxcXFxuXFxcIik7XFxuZHJpdmVycy9zb2MvZnNsL2RwaW8vZHBpby1zZXJ2aWNlLmMtMjUxLVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvdmZpby9LY29uZmlnPTk1PXNvdXJjZSBcXFwiZHJpdmVycy92ZmlvL21kZXYvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo5Njpzb3VyY2UgXFxcImRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy05Ny1zb3VyY2UgXFxcImRyaXZlcnMvdmZpby9jZHgvS2NvbmZpZ1xcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9NYWtlZmlsZT0xNj1vYmotJChDT05GSUdfVkZJT19NREVWKSArPSBtZGV2L1xcbmRyaXZlcnMvdmZpby9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfVkZJT19GU0xfTUMpICs9IGZzbC1tYy9cXG5kcml2ZXJzL3ZmaW8vTWFrZWZpbGUtMTgtb2JqLSQoQ09ORklHX1ZGSU9fQ0RYKSArPSBjZHgvXFxuLS1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWc9ND1jb25maWcgVkZJT19GU0xfTUNcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWc6NTpcXHR0cmlzdGF0ZSBcXFwiVkZJTyBzdXBwb3J0IGZvciBRb3JJUSBEUEFBMiBmc2wtbWMgYnVzIGRldmljZXNcXFwiXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnLTYtXFx0c2VsZWN0IEVWRU5URkRcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWctNy1cXHRoZWxwXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnOjg6XFx0ICBEcml2ZXIgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBWRklPIFFvcklRIERQQUEyIGZzbC1tY1xcbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZy05LVxcdCAgKE1hbmFnZW1lbnQgQ29tcGxleCkgZGV2aWNlcy4gVGhpcyBpcyByZXF1aXJlZCB0byBwYXNzdGhyb3VnaFxcbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZzoxMDpcXHQgIGZzbC1tYyBidXMgZGV2aWNlcyB1c2luZyB0aGUgVkZJTyBmcmFtZXdvcmsuXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnLTExLVxcbi0tXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy9NYWtlZmlsZS0yLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvTWFrZWZpbGU6Mzp2ZmlvLWZzbC1tYy15IDo9IHZmaW9fZnNsX21jLm8gdmZpb19mc2xfbWNfaW50ci5vXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19WRklPX0ZTTF9NQykgKz0gdmZpby1mc2wtbWMub1xcbi0tXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jPTQxNj1zdGF0aWMgaW50IHZmaW9fZnNsX21jX2J1c19ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbi0tXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTQzNy1cXHRcXHRpZiAobWNfZHJ2IFxcdTAwMjZcXHUwMDI2IG1jX2RydiAhPSBcXHUwMDI2dmZpb19mc2xfbWNfZHJpdmVyKVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYzo0Mzg6XFx0XFx0XFx0ZGV2X3dhcm4oZGV2LCBcXFwiVkZJT19GU0xfTUM6IE9iamVjdCAlcyBib3VuZCB0byBkcml2ZXIgJXMgd2hpbGUgRFBSQyBib3VuZCB0byB2ZmlvLWZzbC1tY1xcXFxuXFxcIixcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtNDM5LVxcdFxcdFxcdFxcdCBkZXZfbmFtZShkZXYpLCBtY19kcnYtXFx1MDAzZWRyaXZlci5uYW1lKTtcXG4tLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYz01NzU9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgdmZpb19mc2xfbWNfb3BzID0ge1xcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYzo1NzY6XFx0Lm5hbWVcXHRcXHQ9IFxcXCJ2ZmlvLWZzbC1tY1xcXCIsXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTU3Ny1cXHQuaW5pdFxcdFxcdD0gdmZpb19mc2xfbWNfaW5pdF9kZXYsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM9NTkyPXN0YXRpYyBzdHJ1Y3QgZnNsX21jX2RyaXZlciB2ZmlvX2ZzbF9tY19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtNTk1LVxcdC5kcml2ZXJcXHQ9IHtcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM6NTk2OlxcdFxcdC5uYW1lXFx0PSBcXFwidmZpby1mc2wtbWNcXFwiLFxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy01OTctXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6NTI6MjcuOTg1MTgyMDY4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI4MzYzMjE5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBQYXRjaCoqXG5cbk9rYXksIGFmdGVyIHJldmlld2luZyB0aGlzIHBhdGNoLCBoZXJlJ3MgbXkgdGFrZS4gVGhlIGNvZGUgbW9kaWZpY2F0aW9uIHRvdWNoZXMgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guY2AuIFJpZ2h0IGF3YXksIHRoYXQgcmFpc2VzIGEgZmxhZyDigJMgaXQncyBhIGRyaXZlciBmb3IgdGhlIERQQUEyIHN3aXRjaCwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGUgTlhQIFFvcklRIERQQUEyIGFyY2hpdGVjdHVyZSwgd2hpY2ggd2Uga25vdyBpcyBgQVJDSF9MQVlFUlNDQVBFYC4gVGhlIGNvcmUgaXNzdWUgaXMgdGhhdCB0aGUgYGZzbC1tY2AgYnVzLCB3aGljaCB0aGlzIGRyaXZlciBjbGVhcmx5IHJlbGllcyBvbiwgaXMgaGFyZHdhcmUtc3BlY2lmaWMuIFdlJ3JlIG5vdCB0YWxraW5nIGFib3V0IHNvbWV0aGluZyB0aGF0J3MgZWFzaWx5IGVtdWxhdGVkIGluIHN0YW5kYXJkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgZXZlbiBzb21ldGhpbmcgd2Ugc2VlIGluIHN5emthbGxlci5cblxuVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgZHJpdmVyIHJlcXVpcmVzIHRoYXQgc3BlY2lmaWMgaGFyZHdhcmUgYW5kIGl0cyBhc3NvY2lhdGVkIGJ1cyAoYGZzbC1tY2ApLCBpdCdzIGVmZmVjdGl2ZWx5IHVucmVhY2hhYmxlIGluIHRoZSBraW5kIG9mIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3ZSB0eXBpY2FsbHkgdXNlIGZvciBmdXp6aW5nLiBUaGUgbGlrZWxpaG9vZCBvZiBnZW5lcmF0aW5nIGFueSB1c2VmdWwgdGVzdCBjb3ZlcmFnZSBpbiBzdWNoIGEgc2V0dXAgaXMgaW5jcmVkaWJseSBsb3csIGJvcmRlcmluZyBvbiB6ZXJvLlxuXG5TbywgaW4gZ29vZCBjb25zY2llbmNlLCBJJ20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBNeSByYXRpb25hbGUgaXMgY2xlYXI6IHRoaXMgcGF0Y2ggbW9kaWZpZXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgZm9yIHRoZSBGcmVlc2NhbGUgRFBBQTIgc3dpdGNoLCBhbmQgdGhhdCBjb2RlIGlzIGluYWNjZXNzaWJsZSBpbiBvdXIgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBzZXR1cHMgd2l0aG91dCB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlIGVtdWxhdGlvbiwgd2hpY2ggaXNuJ3QgYXZhaWxhYmxlIG9yIGZlYXNpYmxlIGZvciB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjU0OSwiT3V0cHV0VG9rZW5zIjoxNDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6NTI6MzQuMjY4ODE5MzA3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgRnJlZXNjYWxlIERQQUEyIHN3aXRjaCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2guYykgdG8gYWRkIExBRyBvZmZsb2FkIHN1cHBvcnQuIFRoaXMgZHJpdmVyIGRlcGVuZHMgb24gdGhlIGZzbC1tYyBidXMgKEZTTF9NQ19CVVMpLCB3aGljaCBpcyBzcGVjaWZpYyB0byBOWFAgUW9ySVEgRFBBQTIgaGFyZHdhcmUgKEFSQ0hfTEFZRVJTQ0FQRSkuIFRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBoYXJkd2FyZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEZyZWVzY2FsZSBEUEFBMiBzd2l0Y2ggZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItc3dpdGNoLmMpIHRvIGFkZCBMQUcgb2ZmbG9hZCBzdXBwb3J0LiBUaGlzIGRyaXZlciBkZXBlbmRzIG9uIHRoZSBmc2wtbWMgYnVzIChGU0xfTUNfQlVTKSwgd2hpY2ggaXMgc3BlY2lmaWMgdG8gTlhQIFFvcklRIERQQUEyIGhhcmR3YXJlIChBUkNIX0xBWUVSU0NBUEUpLiBUaGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoaXMgaGFyZHdhcmUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflows2gfn[1] Phase: Running StartedAt: 2026-06-29 11:52:46 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2gfn[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-06-29 11:52:46 +0000 UTC FinishedAt: 2026-06-29 11:52:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}