Name: series-workflowpvhmk Phase: Failed StartedAt: 2026-07-27 22:45:53 +0000 UTC FinishedAt: 2026-07-27 23:06:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpvhmk[0] Phase: Succeeded StartedAt: 2026-07-27 22:45:53 +0000 UTC FinishedAt: 2026-07-27 23:06:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpvhmk[0].run-triage Phase: Succeeded StartedAt: 2026-07-27 22:45:53 +0000 UTC FinishedAt: 2026-07-27 23:06:29 +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+CgkJCTx0ZD4yMDI2LzA3LzI3IDIzOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1pY3JvY2hpcCBLU1o4NDYzIERTQSBzd2l0Y2gsIGluY2x1ZGluZyBJUlEsIFBUUCwgYW5kIGEgbmV3IERTQSB0YWcgcHJvdG9jb2wuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgZm9yIGFuIFNQSS9NRElPLWNvbm5lY3RlZCBzd2l0Y2ggdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gV2l0aG91dCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUsIHRoZSBkcml2ZXIgY2Fubm90IHByb2JlLCBhbmQgdGhlIGFkZGVkIGNvZGUgKGluY2x1ZGluZyB0aGUgRFNBIHRhZ2dlcikgaXMgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIzOjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDNmYWViM2EwZjBhYjQyOWQ2NGNiZTM5NGNmZTlhZmQwZGIzNjhmM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDI3IDIzOjA1OjMwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmNcbmluZGV4IGM0Yzc2OTAyOGEyMGM5Li45NDFhZTlmNjZmNzBiYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguY1xuQEAgLTM2LDYgJiM0MzszNiwxMyBAQFxuICNpbmNsdWRlIFwmIzM0O2tzejhfcmVnLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc3o4LmhcJiMzNDtcbiBcbiYjNDM7LypcbiYjNDM7ICogV2UgdXNlIG9ubHkgdGhlIGhpZ2gtYnl0ZSAoc28gb2RkIGFkZHJlc3Nlcykgb2YgdGhlIDE2LWJpdHMgcmVnaXN0ZXJzIHRvIGZpdFxuJiM0MzsgKiBpbiB0aGUgY29tbW9uIElSUSBmcmFtZXdvcmtcbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgS1NaODQ2M19SRUdfSVNSXHRcdFx0MHgxOTFcbiYjNDM7I2RlZmluZSBLU1o4NDYzX1JFR19JRVJcdFx0XHQweDE5M1xuJiM0MztcbiAvKiBrc3o4OHgzX2RyaXZlX3N0cmVuZ3RocyAtIERyaXZlIHN0cmVuZ3RoIG1hcHBpbmcgZm9yIEtTWjg4NjMsIEtTWjg4NzMsIC4uXG4gICpcdFx0XHQgICAgIHZhcmlhbnRzLlxuICAqIFRoaXMgdmFsdWVzIGFyZSBkb2N1bWVudGVkIGluIEtTWjg4NzMgYW5kIEtTWjg4NjMgZGF0YXNoZWV0cy5cbkBAIC0xODEsNiAmIzQzOzE4OCw2OSBAQCBzdGF0aWMgaW50IGtzejhfcG1lX3B3cml0ZTgoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsIGludCBvZmZzZXQsIHU4IGRhdFxuIFx0cmV0dXJuIGtzejhfaW5kX3dyaXRlOChkZXYsIHRhYmxlLCAodTgpKG9mZnNldCksIGRhdGEpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQga3N6ODQ2M19pcnFfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3N6X2lycSAqa2lycSA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpO1xuJiM0MztcbiYjNDM7XHRraXJxLVx1MDAzZW1hc2tlZCBcdTAwMjY9IH5CSVQoZC1cdTAwM2Vod2lycSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGtzejg0NjNfaXJxX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3N6X2lycSAqa2lycSA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpO1xuJiM0MztcbiYjNDM7XHRraXJxLVx1MDAzZW1hc2tlZCB8PSBCSVQoZC1cdTAwM2Vod2lycSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXJxX2NoaXAga3N6ODQ2M19pcnFfY2hpcCA9IHtcbiYjNDM7XHQubmFtZVx0XHRcdD0gXCYjMzQ7a3N6ODQ2My1pcnFcJiMzNDssXG4mIzQzO1x0LmlycV9tYXNrXHRcdD0ga3N6ODQ2M19pcnFfbWFzayxcbiYjNDM7XHQuaXJxX3VubWFza1x0XHQ9IGtzejg0NjNfaXJxX3VubWFzayxcbiYjNDM7XHQuaXJxX2J1c19sb2NrXHRcdD0ga3N6X2lycV9idXNfbG9jayxcbiYjNDM7XHQuaXJxX2J1c19zeW5jX3VubG9ja1x0PSBrc3pfaXJxX2J1c19zeW5jX3VubG9jayxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQga3N6ODQ2M19pcnFfZG9tYWluX21hcChzdHJ1Y3QgaXJxX2RvbWFpbiAqZCxcbiYjNDM7XHRcdFx0XHQgIHVuc2lnbmVkIGludCBpcnEsIGlycV9od19udW1iZXJfdCBod2lycSlcbiYjNDM7e1xuJiM0MztcdGlycV9zZXRfY2hpcF9kYXRhKGlycSwgZC1cdTAwM2Vob3N0X2RhdGEpO1xuJiM0MztcdGlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsIFx1MDAyNmtzejg0NjNfaXJxX2NoaXAsIGhhbmRsZV9sZXZlbF9pcnEpO1xuJiM0MztcdGlycV9zZXRfbm9wcm9iZShpcnEpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBrc3o4NDYzX2lycV9kb21haW5fb3BzID0ge1xuJiM0MztcdC5tYXBcdD0ga3N6ODQ2M19pcnFfZG9tYWluX21hcCxcbiYjNDM7XHQueGxhdGVcdD0gaXJxX2RvbWFpbl94bGF0ZV90d29jZWxsLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBrc3o4NDYzX2dpcnFfc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrc3pfaXJxICpnaXJxID0gXHUwMDI2ZGV2LVx1MDAzZWdpcnE7XG4mIzQzO1xuJiM0MztcdGdpcnEtXHUwMDNlbmlycXMgPSA4O1xuJiM0MztcdGdpcnEtXHUwMDNlcmVnX21hc2sgPSBLU1o4NDYzX1JFR19JRVI7XG4mIzQzO1x0Z2lycS1cdTAwM2VyZWdfc3RhdHVzID0gS1NaODQ2M19SRUdfSVNSO1xuJiM0MztcdGdpcnEtXHUwMDNlbWFza2VkID0gMDtcbiYjNDM7XHRzbnByaW50ZihnaXJxLVx1MDAzZW5hbWUsIHNpemVvZihnaXJxLVx1MDAzZW5hbWUpLCBcJiMzNDtrc3o4NDYzLWdpcnFcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRnaXJxLVx1MDAzZWlycV9udW0gPSBkZXYtXHUwMDNlaXJxO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4ga3N6X2lycV9jb21tb25fc2V0dXAoZGV2LCBnaXJxLCBcdTAwMjZrc3o4NDYzX2lycV9kb21haW5fb3BzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBrc3o4NDYzX3Jlc2V0X3N3aXRjaChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0a3N6X2NmZyhkZXYsIEtTWjg0NjNfUkVHX1NXX1JFU0VULFxuJiM0MztcdFx0S1NaODQ2M19HTE9CQUxfU09GVFdBUkVfUkVTRVQgfCBLU1o4NDYzX1BUUF9TT0ZUV0FSRV9SRVNFVCxcbiYjNDM7XHRcdHRydWUpO1xuJiM0MztcdGtzel9jZmcoZGV2LCBLU1o4NDYzX1JFR19TV19SRVNFVCxcbiYjNDM7XHRcdEtTWjg0NjNfR0xPQkFMX1NPRlRXQVJFX1JFU0VUIHwgS1NaODQ2M19QVFBfU09GVFdBUkVfUkVTRVQsXG4mIzQzO1x0XHRmYWxzZSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBrc3o4X3Jlc2V0X3N3aXRjaChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuIHtcbiBcdGlmIChrc3pfaXNfa3N6ODh4MyhkZXYpKSB7XG5AQCAtMTg5LDExICYjNDM7MjU5LDYgQEAgc3RhdGljIGludCBrc3o4X3Jlc2V0X3N3aXRjaChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuIFx0XHRcdEtTWjg4NjNfR0xPQkFMX1NPRlRXQVJFX1JFU0VUIHwgS1NaODg2M19QQ1NfUkVTRVQsIHRydWUpO1xuIFx0XHRrc3pfY2ZnKGRldiwgS1NaODg2M19SRUdfU1dfUkVTRVQsXG4gXHRcdFx0S1NaODg2M19HTE9CQUxfU09GVFdBUkVfUkVTRVQgfCBLU1o4ODYzX1BDU19SRVNFVCwgZmFsc2UpO1xuLVx0fSBlbHNlIGlmIChrc3pfaXNfa3N6ODQ2MyhkZXYpKSB7XG4tXHRcdGtzel9jZmcoZGV2LCBLU1o4NDYzX1JFR19TV19SRVNFVCxcbi1cdFx0XHRLU1o4NDYzX0dMT0JBTF9TT0ZUV0FSRV9SRVNFVCwgdHJ1ZSk7XG4tXHRcdGtzel9jZmcoZGV2LCBLU1o4NDYzX1JFR19TV19SRVNFVCxcbi1cdFx0XHRLU1o4NDYzX0dMT0JBTF9TT0ZUV0FSRV9SRVNFVCwgZmFsc2UpO1xuIFx0fSBlbHNlIHtcbiBcdFx0LyogcmVzZXQgc3dpdGNoICovXG4gXHRcdGtzel93cml0ZTgoZGV2LCBSRUdfUE9XRVJfTUFOQUdFTUVOVF8xLFxuQEAgLTIwMjYsNiAmIzQzOzIwOTEsNTAgQEAgc3RhdGljIHZvaWQga3N6ODh4M19jb25maWdfcm1paV9jbGsoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbiBcdFx0S1NaODhYM19QT1JUM19STUlJX0NMS19JTlRFUk5BTCwgcm1paV9jbGtfaW50ZXJuYWwpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQga3N6ODQ2M19jb25maWdfY3B1X3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4mIzQzO1x0c3RydWN0IGtzel9wb3J0ICpwO1xuJiM0MztcdHU4IGZpYmVyX3BvcnRzID0gMDtcbiYjNDM7XHRjb25zdCB1MzIgKm1hc2tzO1xuJiM0MztcdGNvbnN0IHUxNiAqcmVncztcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0bWFza3MgPSBkZXYtXHUwMDNlaW5mby1cdTAwM2VtYXNrcztcbiYjNDM7XHRyZWdzID0gZGV2LVx1MDAzZWluZm8tXHUwMDNlcmVncztcbiYjNDM7XG4mIzQzO1x0a3N6X2NmZyhkZXYsIHJlZ3NbU19UQUlMX1RBR19DVFJMXSwgbWFza3NbU1dfVEFJTF9UQUdfRU5BQkxFXSwgdHJ1ZSk7XG4mIzQzO1xuJiM0MztcdGtzejhfcG9ydF9zZXR1cChkZXYsIGRldi1cdTAwM2VjcHVfcG9ydCwgdHJ1ZSk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldi1cdTAwM2VwaHlfcG9ydF9jbnQ7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0a3N6X3BvcnRfc3RwX3N0YXRlX3NldChkcywgaSwgQlJfU1RBVEVfRElTQUJMRUQpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXYtXHUwMDNlcGh5X3BvcnRfY250OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cCA9IFx1MDAyNmRldi1cdTAwM2Vwb3J0c1tpXTtcbiYjNDM7XHRcdGtzel9wb3J0X2NmZyhkZXYsIGksIHJlZ3NbUF9TVFBfQ1RSTF0sIFBPUlRfRk9SQ0VfRkxPV19DVFJMLFxuJiM0MztcdFx0XHQgICAgIHAtXHUwMDNlZmliZXIpO1xuJiM0MztcdFx0aWYgKHAtXHUwMDNlZmliZXIpXG4mIzQzO1x0XHRcdGZpYmVyX3BvcnRzIHw9ICgxIFx1MDAzY1x1MDAzYyBpKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFNldHVwIGZpYmVyIHBvcnRzLiAqL1xuJiM0MztcdGlmIChmaWJlcl9wb3J0cykge1xuJiM0MztcdFx0ZmliZXJfcG9ydHMgXHUwMDI2PSAzO1xuJiM0MztcdFx0cmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSwgS1NaODQ2M19SRUdfQ0ZHX0NUUkwsXG4mIzQzO1x0XHRcdFx0ICAgZmliZXJfcG9ydHMgXHUwMDNjXHUwMDNjIFBPUlRfQ09QUEVSX01PREVfUyxcbiYjNDM7XHRcdFx0XHQgICAwKTtcbiYjNDM7XHRcdHJlZ21hcF91cGRhdGVfYml0cyhrc3pfcmVnbWFwXzE2KGRldiksIEtTWjg0NjNfUkVHX0RTUF9DVFJMXzYsXG4mIzQzO1x0XHRcdFx0ICAgQ09QUEVSX1JFQ0VJVkVfQURKVVNUTUVOVCwgMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBUdXJuIG9mZiBQVFAgZnVuY3Rpb24gYXMgdGhlIHN3aXRjaCBlbmFibGVzIGl0IGJ5IGRlZmF1bHQgKi9cbiYjNDM7XHRyZWdtYXBfdXBkYXRlX2JpdHMoa3N6X3JlZ21hcF8xNihkZXYpLCBLU1o4NDYzX1BUUF9NU0dfQ09ORjEsXG4mIzQzO1x0XHRcdCAgIFBUUF9FTkFCTEUsIDApO1xuJiM0MztcdHJlZ21hcF91cGRhdGVfYml0cyhrc3pfcmVnbWFwXzE2KGRldiksIEtTWjg0NjNfUFRQX0NMS19DVFJMLFxuJiM0MztcdFx0XHQgICBQVFBfQ0xLX0VOQUJMRSwgMCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQga3N6OF9jb25maWdfY3B1X3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIHtcbiBcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuQEAgLTIwMzMsNyAmIzQzOzIxNDIsNiBAQCBzdGF0aWMgdm9pZCBrc3o4X2NvbmZpZ19jcHVfcG9ydChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRjb25zdCB1MzIgKm1hc2tzO1xuIFx0Y29uc3QgdTE2ICpyZWdzO1xuIFx0dTggcmVtb3RlO1xuLVx0dTggZmliZXJfcG9ydHMgPSAwO1xuIFx0aW50IGk7XG4gXG4gXHRtYXNrcyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZW1hc2tzO1xuQEAgLTIwNjQsMzIgJiM0MzsyMTcyLDYgQEAgc3RhdGljIHZvaWQga3N6OF9jb25maWdfY3B1X3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0XHRlbHNlXG4gXHRcdFx0a3N6X3BvcnRfY2ZnKGRldiwgaSwgcmVnc1tQX1NUUF9DVFJMXSxcbiBcdFx0XHRcdCAgICAgUE9SVF9GT1JDRV9GTE9XX0NUUkwsIGZhbHNlKTtcbi1cdFx0aWYgKHAtXHUwMDNlZmliZXIpXG4tXHRcdFx0ZmliZXJfcG9ydHMgfD0gKDEgXHUwMDNjXHUwMDNjIGkpO1xuLVx0fVxuLVx0aWYgKGtzel9pc19rc3o4NDYzKGRldikpIHtcbi1cdFx0LyogU2V0dXAgZmliZXIgcG9ydHMuICovXG4tXHRcdGlmIChmaWJlcl9wb3J0cykge1xuLVx0XHRcdGZpYmVyX3BvcnRzIFx1MDAyNj0gMztcbi1cdFx0XHRyZWdtYXBfdXBkYXRlX2JpdHMoa3N6X3JlZ21hcF8xNihkZXYpLFxuLVx0XHRcdFx0XHQgICBLU1o4NDYzX1JFR19DRkdfQ1RSTCxcbi1cdFx0XHRcdFx0ICAgZmliZXJfcG9ydHMgXHUwMDNjXHUwMDNjIFBPUlRfQ09QUEVSX01PREVfUyxcbi1cdFx0XHRcdFx0ICAgMCk7XG4tXHRcdFx0cmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSxcbi1cdFx0XHRcdFx0ICAgS1NaODQ2M19SRUdfRFNQX0NUUkxfNixcbi1cdFx0XHRcdFx0ICAgQ09QUEVSX1JFQ0VJVkVfQURKVVNUTUVOVCwgMCk7XG4tXHRcdH1cbi1cbi1cdFx0LyogVHVybiBvZmYgUFRQIGZ1bmN0aW9uIGFzIHRoZSBzd2l0Y2gmIzM5O3MgcHJvcHJpZXRhcnkgd2F5IG9mXG4tXHRcdCAqIGhhbmRsaW5nIHRpbWVzdGFtcCBpcyBub3Qgc3VwcG9ydGVkIGluIGN1cnJlbnQgTGludXggUFRQXG4tXHRcdCAqIHN0YWNrIGltcGxlbWVudGF0aW9uLlxuLVx0XHQgKi9cbi1cdFx0cmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSxcbi1cdFx0XHRcdCAgIEtTWjg0NjNfUFRQX01TR19DT05GMSxcbi1cdFx0XHRcdCAgIFBUUF9FTkFCTEUsIDApO1xuLVx0XHRyZWdtYXBfdXBkYXRlX2JpdHMoa3N6X3JlZ21hcF8xNihkZXYpLFxuLVx0XHRcdFx0ICAgS1NaODQ2M19QVFBfQ0xLX0NUUkwsXG4tXHRcdFx0XHQgICBQVFBfQ0xLX0VOQUJMRSwgMCk7XG4gXHR9XG4gfVxuIFxuQEAgLTIzMDAsNiAmIzQzOzIzODIsMTUwIEBAIHN0YXRpYyB2b2lkIGtzejg4eHhfcl9taWJfc3RhdHM2NChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNm1pYi1cdTAwM2VzdGF0czY0X2xvY2spO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBrc3o4NDYzX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuJiM0MztcdHUxNiBzdG9ybV9tYXNrLCBzdG9ybV9yYXRlO1xuJiM0MztcdHN0cnVjdCBrc3pfcG9ydCAqcDtcbiYjNDM7XHRjb25zdCB1MTYgKnJlZ3M7XG4mIzQzO1x0aW50IGksIHJldDtcbiYjNDM7XG4mIzQzO1x0cmVncyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZXJlZ3M7XG4mIzQzO1xuJiM0MztcdGRldi1cdTAwM2V2bGFuX2NhY2hlID0gZGV2bV9rY2FsbG9jKGRldi1cdTAwM2VkZXYsIHNpemVvZihzdHJ1Y3Qgdmxhbl90YWJsZSksXG4mIzQzO1x0XHRcdFx0ICAgICAgIGRldi1cdTAwM2VpbmZvLVx1MDAzZW51bV92bGFucywgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFkZXYtXHUwMDNldmxhbl9jYWNoZSlcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrc3o4NDYzX3Jlc2V0X3N3aXRjaChkZXYpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoZHMtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gcmVzZXQgc3dpdGNoXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBzZXQgYnJvYWRjYXN0IHN0b3JtIHByb3RlY3Rpb24gMTAlIHJhdGUgKi9cbiYjNDM7XHRzdG9ybV9tYXNrID0gQlJPQURDQVNUX1NUT1JNX1JBVEU7XG4mIzQzO1x0c3Rvcm1fcmF0ZSA9IChCUk9BRENBU1RfU1RPUk1fVkFMVUUgKiBCUk9BRENBU1RfU1RPUk1fUFJPVF9SQVRFKSAvIDEwMDtcbiYjNDM7XHRzdG9ybV9tYXNrID0gc3dhYjE2KHN0b3JtX21hc2spO1xuJiM0MztcdHN0b3JtX3JhdGUgPSBzd2FiMTYoc3Rvcm1fcmF0ZSk7XG4mIzQzO1x0cmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSwgcmVnc1tTX0JST0FEQ0FTVF9DVFJMXSxcbiYjNDM7XHRcdFx0ICAgc3Rvcm1fbWFzaywgc3Rvcm1fcmF0ZSk7XG4mIzQzO1xuJiM0MztcdGtzejg0NjNfY29uZmlnX2NwdV9wb3J0KGRzKTtcbiYjNDM7XG4mIzQzO1x0a3N6OF9lbmFibGVfc3RwX2FkZHIoZGV2KTtcbiYjNDM7XG4mIzQzO1x0ZHMtXHUwMDNlbnVtX3R4X3F1ZXVlcyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZW51bV90eF9xdWV1ZXM7XG4mIzQzO1xuJiM0MztcdHJlZ21hcF91cGRhdGVfYml0cyhrc3pfcmVnbWFwXzgoZGV2KSwgcmVnc1tTX01VTFRJQ0FTVF9DVFJMXSxcbiYjNDM7XHRcdFx0ICAgTVVMVElDQVNUX1NUT1JNX0RJU0FCTEUsIE1VTFRJQ0FTVF9TVE9STV9ESVNBQkxFKTtcbiYjNDM7XG4mIzQzO1x0a3N6X2luaXRfbWliX3RpbWVyKGRldik7XG4mIzQzO1xuJiM0MztcdGRzLVx1MDAzZWNvbmZpZ3VyZV92bGFuX3doaWxlX25vdF9maWx0ZXJpbmcgPSBmYWxzZTtcbiYjNDM7XHRkcy1cdTAwM2Vkc2NwX3ByaW9fbWFwcGluZ19pc19nbG9iYWwgPSB0cnVlO1xuJiM0MztcdGRzLVx1MDAzZW10dV9lbmZvcmNlbWVudF9pbmdyZXNzID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0LyogV2UgcmVseSBvbiBzb2Z0d2FyZSB1bnRhZ2dpbmcgb24gdGhlIENQVSBwb3J0LCBzbyB0aGF0IHdlXG4mIzQzO1x0ICogY2FuIHN1cHBvcnQgYm90aCB0YWdnZWQgYW5kIHVudGFnZ2VkIFZMQU5zXG4mIzQzO1x0ICovXG4mIzQzO1x0ZHMtXHUwMDNldW50YWdfYnJpZGdlX3B2aWQgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHQvKiBWTEFOIGZpbHRlcmluZyBpcyBwYXJ0bHkgY29udHJvbGxlZCBieSB0aGUgZ2xvYmFsIFZMQU5cbiYjNDM7XHQgKiBFbmFibGUgZmxhZ1xuJiM0MztcdCAqL1xuJiM0MztcdGRzLVx1MDAzZXZsYW5fZmlsdGVyaW5nX2lzX2dsb2JhbCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdC8qIEVuYWJsZSBhdXRvbWF0aWMgZmFzdCBhZ2luZyB3aGVuIGxpbmsgY2hhbmdlZCBkZXRlY3RlZC4gKi9cbiYjNDM7XHRrc3pfY2ZnKGRldiwgU19MSU5LX0FHSU5HX0NUUkwsIFNXX0xJTktfQVVUT19BR0lORywgdHJ1ZSk7XG4mIzQzO1xuJiM0MztcdC8qIEVuYWJsZSBhZ2dyZXNzaXZlIGJhY2sgb2ZmIGFsZ29yaXRobSBpbiBoYWxmIGR1cGxleCBtb2RlLiAqL1xuJiM0MztcdHJldCA9IGtzel9ybXc4KGRldiwgUkVHX1NXX0NUUkxfMSwgU1dfQUdHUl9CQUNLT0ZGLCBTV19BR0dSX0JBQ0tPRkYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE1ha2Ugc3VyZSB1bmljYXN0IFZMQU4gYm91bmRhcnkgaXMgc2V0IGFzIGRlZmF1bHQgYW5kXG4mIzQzO1x0ICogZW5hYmxlIG5vIGV4Y2Vzc2l2ZSBjb2xsaXNpb24gZHJvcC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXQgPSBrc3pfcm13OChkZXYsIFJFR19TV19DVFJMXzIsXG4mIzQzO1x0XHQgICAgICAgVU5JQ0FTVF9WTEFOX0JPVU5EQVJZIHwgTk9fRVhDX0NPTExJU0lPTl9EUk9QLFxuJiM0MztcdFx0ICAgICAgIFVOSUNBU1RfVkxBTl9CT1VOREFSWSB8IE5PX0VYQ19DT0xMSVNJT05fRFJPUCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGtzel9jZmcoZGV2LCBTX1JFUExBQ0VfVklEX0NUUkwsIFNXX1JFUExBQ0VfVklELCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdGtzel9jZmcoZGV2LCBTX01JUlJPUl9DVFJMLCBTV19NSVJST1JfUlhfVFgsIGZhbHNlKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgKGRldi1cdTAwM2VpbmZvLVx1MDAzZW51bV92bGFucyAvIDQpOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGtzejhfcl92bGFuX2VudHJpZXMoZGV2LCBpKTtcbiYjNDM7XG4mIzQzO1x0LyogU3RhcnQgd2l0aCBsZWFybmluZyBkaXNhYmxlZCBvbiBzdGFuZGFsb25lIHVzZXIgcG9ydHMsIGFuZCBlbmFibGVkXG4mIzQzO1x0ICogb24gdGhlIENQVSBwb3J0LiBJbiBsYWNrIG9mIG90aGVyIGZpbmVyIG1lY2hhbmlzbXMsIGxlYXJuaW5nIG9uIHRoZVxuJiM0MztcdCAqIENQVSBwb3J0IHdpbGwgYXZvaWQgZmxvb2RpbmcgYnJpZGdlIGxvY2FsIGFkZHJlc3NlcyBvbiB0aGUgbmV0d29ya1xuJiM0MztcdCAqIGluIHNvbWUgY2FzZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0cCA9IFx1MDAyNmRldi1cdTAwM2Vwb3J0c1tkZXYtXHUwMDNlY3B1X3BvcnRdO1xuJiM0MztcdHAtXHUwMDNlbGVhcm5pbmcgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRpZiAoZGV2LVx1MDAzZWlycSBcdTAwM2UgMCkge1xuJiM0MztcdFx0cmV0ID0ga3N6ODQ2M19naXJxX3NldHVwKGRldik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IGtzejg0NjNfcHRwX2lycV9zZXR1cChkcyk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIGZyZWVfZ2lycTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKGRzKTtcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRyZXQpO1xuJiM0MztcdFx0XHRnb3RvIGZyZWVfcHRwX2lycTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGtzel9tZGlvX3JlZ2lzdGVyKGRldik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMCkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgdGhlIG1kaW9cJiMzNDspO1xuJiM0MztcdFx0Z290byBwdHBfY2xvY2tfdW5yZWdpc3RlcjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGtzel9kY2JfaW5pdChkZXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIHB0cF9jbG9ja191bnJlZ2lzdGVyO1xuJiM0MztcbiYjNDM7XHQvKiBzdGFydCBzd2l0Y2ggKi9cbiYjNDM7XHRyZWdtYXBfdXBkYXRlX2JpdHMoa3N6X3JlZ21hcF84KGRldiksIHJlZ3NbU19TVEFSVF9DVFJMXSxcbiYjNDM7XHRcdFx0ICAgU1dfU1RBUlQsIFNXX1NUQVJUKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztwdHBfY2xvY2tfdW5yZWdpc3RlcjpcbiYjNDM7XHRpZiAoZGV2LVx1MDAzZWlycSBcdTAwM2UgMClcbiYjNDM7XHRcdGtzel9wdHBfY2xvY2tfdW5yZWdpc3Rlcihkcyk7XG4mIzQzO2ZyZWVfcHRwX2lycTpcbiYjNDM7XHRpZiAoZGV2LVx1MDAzZWlycSBcdTAwM2UgMClcbiYjNDM7XHRcdGtzejg0NjNfcHRwX2lycV9mcmVlKGRzKTtcbiYjNDM7ZnJlZV9naXJxOlxuJiM0MztcdGlmIChkZXYtXHUwMDNlaXJxIFx1MDAzZSAwKVxuJiM0MztcdFx0a3N6X2lycV9mcmVlKFx1MDAyNmRldi1cdTAwM2VnaXJxKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQga3N6ODQ2M190ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0aWYgKGRldi1cdTAwM2VpcnEgXHUwMDNlIDApIHtcbiYjNDM7XHRcdGtzel9wdHBfY2xvY2tfdW5yZWdpc3Rlcihkcyk7XG4mIzQzO1x0XHRrc3o4NDYzX3B0cF9pcnFfZnJlZShkcyk7XG4mIzQzO1x0XHRrc3pfaXJxX2ZyZWUoXHUwMDI2ZGV2LVx1MDAzZWdpcnEpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBrc3o4OHgzX2RyaXZlX3N0cmVuZ3RoX3dyaXRlKCkgLSBTZXQgdGhlIGRyaXZlIHN0cmVuZ3RoIGNvbmZpZ3VyYXRpb24gZm9yXG4gICpcdFx0XHRcdCAgICBLU1o4ODYzIGNvbXBhdGlibGUgY2hpcCB2YXJpYW50cy5cbkBAIC0yNDQ1LDEwICYjNDM7MjY3MSw2IEBAIHN0YXRpYyBpbnQga3N6OF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHQvKiBzZXQgYnJvYWRjYXN0IHN0b3JtIHByb3RlY3Rpb24gMTAlIHJhdGUgKi9cbiBcdHN0b3JtX21hc2sgPSBCUk9BRENBU1RfU1RPUk1fUkFURTtcbiBcdHN0b3JtX3JhdGUgPSAoQlJPQURDQVNUX1NUT1JNX1ZBTFVFICogQlJPQURDQVNUX1NUT1JNX1BST1RfUkFURSkgLyAxMDA7XG4tXHRpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSkge1xuLVx0XHRzdG9ybV9tYXNrID0gc3dhYjE2KHN0b3JtX21hc2spO1xuLVx0XHRzdG9ybV9yYXRlID0gc3dhYjE2KHN0b3JtX3JhdGUpO1xuLVx0fVxuIFx0cmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSwgcmVnc1tTX0JST0FEQ0FTVF9DVFJMXSxcbiBcdFx0XHQgICBzdG9ybV9tYXNrLCBzdG9ybV9yYXRlKTtcbiBcbkBAIC0yNDk5LDcgJiM0MzsyNzIxLDcgQEAgc3RhdGljIGludCBrc3o4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcbiBcdGtzel9jZmcoZGV2LCBTX01JUlJPUl9DVFJMLCBTV19NSVJST1JfUlhfVFgsIGZhbHNlKTtcbiBcbi1cdGlmICgha3N6X2lzX2tzejg4eDMoZGV2KSBcdTAwMjZcdTAwMjYgIWtzel9pc19rc3o4NDYzKGRldikpXG4mIzQzO1x0aWYgKCFrc3pfaXNfa3N6ODh4MyhkZXYpKVxuIFx0XHRrc3pfY2ZnKGRldiwgUkVHX1NXX0NUUkxfMTksIFNXX0lOU19UQUdfRU5BQkxFLCB0cnVlKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIChkZXYtXHUwMDNlaW5mby1cdTAwM2VudW1fdmxhbnMgLyA0KTsgaSYjNDM7JiM0MzspXG5AQCAtMjYyMyw2ICYjNDM7Mjg0NSw5IEBAIHN0YXRpYyB1MzIga3N6OF9nZXRfcG9ydF9hZGRyKGludCBwb3J0LCBpbnQgb2Zmc2V0KVxuIFxuIHN0YXRpYyB1MzIga3N6ODQ2M19nZXRfcG9ydF9hZGRyKGludCBwb3J0LCBpbnQgb2Zmc2V0KVxuIHtcbiYjNDM7XHRpZiAob2Zmc2V0IFx1MDAzZT0gS1NaODQ2M19QVFBfQ0xLX0NUUkwpXG4mIzQzO1x0XHRyZXR1cm4gb2Zmc2V0ICYjNDM7IDB4MjAgKiBwb3J0O1xuJiM0MztcbiBcdHJldHVybiBvZmZzZXQgJiM0MzsgMHgxOCAqIHBvcnQ7XG4gfVxuIFxuQEAgLTI3NTUsNyAmIzQzOzI5ODAsNyBAQCBzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGtzejg0NjNfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4gXHRcdFx0XHRcdFx0ICAgICAgaW50IHBvcnQsXG4gXHRcdFx0XHRcdFx0ICAgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIG1wKVxuIHtcbi1cdHJldHVybiBEU0FfVEFHX1BST1RPX0tTWjk4OTM7XG4mIzQzO1x0cmV0dXJuIERTQV9UQUdfUFJPVE9fS1NaODQ2MztcbiB9XG4gXG4gc3RhdGljIGludCBrc3o4NDYzX2Nvbm5lY3RfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbkBAIC0yNzYzLDcgJiM0MzsyOTg4LDcgQEAgc3RhdGljIGludCBrc3o4NDYzX2Nvbm5lY3RfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbiB7XG4gXHRzdHJ1Y3Qga3N6X3RhZ2dlcl9kYXRhICp0YWdnZXJfZGF0YTtcbiBcbi1cdGlmIChwcm90byAhPSBEU0FfVEFHX1BST1RPX0tTWjk4OTMpXG4mIzQzO1x0aWYgKHByb3RvICE9IERTQV9UQUdfUFJPVE9fS1NaODQ2MylcbiBcdFx0cmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7XG4gXG4gXHR0YWdnZXJfZGF0YSA9IGtzel90YWdnZXJfZGF0YShkcyk7XG5AQCAtMjg4OSw4ICYjNDM7MzExNCw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfZGV2X29wcyBrc3o4OHh4X2Rldl9vcHMgPSB7XG4gY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGtzejg0NjNfc3dpdGNoX29wcyA9IHtcbiBcdC5nZXRfdGFnX3Byb3RvY29sXHQ9IGtzejg0NjNfZ2V0X3RhZ19wcm90b2NvbCxcbiBcdC5jb25uZWN0X3RhZ19wcm90b2NvbCAgID0ga3N6ODQ2M19jb25uZWN0X3RhZ19wcm90b2NvbCxcbi1cdC5zZXR1cFx0XHRcdD0ga3N6OF9zZXR1cCxcbi1cdC50ZWFyZG93blx0XHQ9IGtzel90ZWFyZG93bixcbiYjNDM7XHQuc2V0dXBcdFx0XHQ9IGtzejg0NjNfc2V0dXAsXG4mIzQzO1x0LnRlYXJkb3duXHRcdD0ga3N6ODQ2M190ZWFyZG93bixcbiBcdC5waHlfcmVhZFx0XHQ9IGtzejg0NjNfcGh5X3JlYWQxNixcbiBcdC5waHlfd3JpdGVcdFx0PSBrc3o4NDYzX3BoeV93cml0ZTE2LFxuIFx0LnBoeWxpbmtfZ2V0X2NhcHNcdD0ga3N6OF9waHlsaW5rX2dldF9jYXBzLFxuQEAgLTI5MTgsOSAmIzQzOzMxNDMsOSBAQCBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODQ2M19zd2l0Y2hfb3BzID0ge1xuIFx0LnBvcnRfbWF4X210dVx0XHQ9IGtzejg4eHhfbWF4X210dSxcbiBcdC5zdXNwZW5kXHRcdD0ga3N6X3N1c3BlbmQsXG4gXHQucmVzdW1lXHRcdFx0PSBrc3pfcmVzdW1lLFxuLVx0LmdldF90c19pbmZvXHRcdD0ga3N6X2dldF90c19pbmZvLFxuJiM0MztcdC5nZXRfdHNfaW5mb1x0XHQ9IGtzejg0NjNfZ2V0X3RzX2luZm8sXG4gXHQucG9ydF9od3RzdGFtcF9nZXRcdD0ga3N6X2h3dHN0YW1wX2dldCxcbi1cdC5wb3J0X2h3dHN0YW1wX3NldFx0PSBrc3pfaHd0c3RhbXBfc2V0LFxuJiM0MztcdC5wb3J0X2h3dHN0YW1wX3NldFx0PSBrc3o4NDYzX2h3dHN0YW1wX3NldCxcbiBcdC5wb3J0X3R4dHN0YW1wXHRcdD0ga3N6X3BvcnRfdHh0c3RhbXAsXG4gXHQucG9ydF9yeHRzdGFtcFx0XHQ9IGtzel9wb3J0X3J4dHN0YW1wLFxuIFx0LnBvcnRfc2V0dXBfdGNcdFx0PSBrc3o4X3NldHVwX3RjLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OF9yZWcuaCBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OF9yZWcuaFxuaW5kZXggOTgxYWI0NDFkOWI3MTkuLjZiYzUxMWRhMWY3ZGRkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4X3JlZy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejhfcmVnLmhcbkBAIC03ODYsNiAmIzQzOzc4Niw3IEBAXG4gI2RlZmluZSBLU1o4NDYzX1JFR19TV19SRVNFVFx0XHQweDEyNlxuIFxuICNkZWZpbmUgS1NaODQ2M19HTE9CQUxfU09GVFdBUkVfUkVTRVRcdEJJVCgwKVxuJiM0MzsjZGVmaW5lIEtTWjg0NjNfUFRQX1NPRlRXQVJFX1JFU0VUXHRCSVQoMilcbiBcbiAjZGVmaW5lIEtTWjg0NjNfUFRQX0NMS19DVFJMXHRcdDB4NjAwXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uY1xuaW5kZXggNjdhYjZkZGI5ZTUzZjIuLmZmMWJlNTQwYjU0NmZhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jXG5AQCAtMjQxOSwxNCAmIzQzOzI0MTksMTQgQEAgc3RhdGljIHZvaWQga3N6X2lycV91bm1hc2soc3RydWN0IGlycV9kYXRhICpkKVxuIFx0a2lycS1cdTAwM2VtYXNrZWQgXHUwMDI2PSB+QklUKGQtXHUwMDNlaHdpcnEpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBrc3pfaXJxX2J1c19sb2NrKHN0cnVjdCBpcnFfZGF0YSAqZClcbiYjNDM7dm9pZCBrc3pfaXJxX2J1c19sb2NrKHN0cnVjdCBpcnFfZGF0YSAqZClcbiB7XG4gXHRzdHJ1Y3Qga3N6X2lycSAqa2lycSAgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2a2lycS1cdTAwM2VkZXYtXHUwMDNlbG9ja19pcnEpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBrc3pfaXJxX2J1c19zeW5jX3VubG9jayhzdHJ1Y3QgaXJxX2RhdGEgKmQpXG4mIzQzO3ZvaWQga3N6X2lycV9idXNfc3luY191bmxvY2soc3RydWN0IGlycV9kYXRhICpkKVxuIHtcbiBcdHN0cnVjdCBrc3pfaXJxICpraXJxICA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpO1xuIFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGtpcnEtXHUwMDNlZGV2O1xuQEAgLTI1MDQsMTQgJiM0MzsyNTA0LDE1IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBrc3pfaXJxX3RocmVhZF9mbihpbnQgaXJxLCB2b2lkICpkZXZfaWQpXG4gXHRyZXR1cm4gKG5oYW5kbGVkIFx1MDAzZSAwID8gSVJRX0hBTkRMRUQgOiBJUlFfTk9ORSk7XG4gfVxuIFxuLXN0YXRpYyBpbnQga3N6X2lycV9jb21tb25fc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgc3RydWN0IGtzel9pcnEgKmtpcnEpXG4mIzQzO2ludCBrc3pfaXJxX2NvbW1vbl9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBzdHJ1Y3Qga3N6X2lycSAqa2lycSxcbiYjNDM7XHRcdFx0IGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyAqb3BzKVxuIHtcbiBcdGludCByZXQsIG47XG4gXG4gXHRraXJxLVx1MDAzZWRldiA9IGRldjtcbiBcbi1cdGtpcnEtXHUwMDNlZG9tYWluID0gaXJxX2RvbWFpbl9jcmVhdGVfc2ltcGxlKGRldl9md25vZGUoZGV2LVx1MDAzZWRldiksIGtpcnEtXHUwMDNlbmlycXMsIDAsXG4tXHRcdFx0XHRcdFx0XHUwMDI2a3N6X2lycV9kb21haW5fb3BzLCBraXJxKTtcbiYjNDM7XHRraXJxLVx1MDAzZWRvbWFpbiA9IGlycV9kb21haW5fY3JlYXRlX3NpbXBsZShkZXZfZndub2RlKGRldi1cdTAwM2VkZXYpLFxuJiM0MztcdFx0XHRcdFx0XHRraXJxLVx1MDAzZW5pcnFzLCAwLCBvcHMsIGtpcnEpO1xuIFx0aWYgKCFraXJxLVx1MDAzZWRvbWFpbilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMjU0Myw3ICYjNDM7MjU0NCw3IEBAIGludCBrc3pfZ2lycV9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuIFxuIFx0Z2lycS1cdTAwM2VpcnFfbnVtID0gZGV2LVx1MDAzZWlycTtcbiBcbi1cdHJldHVybiBrc3pfaXJxX2NvbW1vbl9zZXR1cChkZXYsIGdpcnEpO1xuJiM0MztcdHJldHVybiBrc3pfaXJxX2NvbW1vbl9zZXR1cChkZXYsIGdpcnEsIFx1MDAyNmtzel9pcnFfZG9tYWluX29wcyk7XG4gfVxuIFxuIGludCBrc3pfcGlycV9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1OCBwKVxuQEAgLTI1NjAsNyAmIzQzOzI1NjEsNyBAQCBpbnQga3N6X3BpcnFfc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggcClcbiBcdGlmICghcGlycS1cdTAwM2VpcnFfbnVtKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdHJldHVybiBrc3pfaXJxX2NvbW1vbl9zZXR1cChkZXYsIHBpcnEpO1xuJiM0MztcdHJldHVybiBrc3pfaXJxX2NvbW1vbl9zZXR1cChkZXYsIHBpcnEsIFx1MDAyNmtzel9pcnFfZG9tYWluX29wcyk7XG4gfVxuIFxuIHZvaWQga3N6X3RlYXJkb3duKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oXG5pbmRleCBhY2FmNzBlNmYzOTNjOS4uY2JlOTg0OTQ1NzhjMzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmhcbkBAIC04LDYgJiM0Mzs4LDcgQEBcbiAjZGVmaW5lIF9fS1NaX0NPTU1PTl9IXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFkb21haW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Bjcy9wY3MteHBjcy5oXHUwMDNlXG5AQCAtMTkzLDYgJiM0MzsxOTQsNyBAQCBzdHJ1Y3Qga3N6X3BvcnQge1xuIFx0c3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgdHN0YW1wX2NvbmZpZztcbiBcdGJvb2wgaHd0c190eF9lbjtcbiBcdGJvb2wgaHd0c19yeF9lbjtcbiYjNDM7XHRib29sIGxhc3RfdHhfaXNfcGRlbGF5cmVzcDtcbiBcdHN0cnVjdCBrc3pfaXJxIHB0cGlycTtcbiBcdHN0cnVjdCBrc3pfcHRwX2lycSBwdHBtc2dfaXJxWzNdO1xuIFx0a3RpbWVfdCB0c3RhbXBfbXNnO1xuQEAgLTUwOCw2ICYjNDM7NTEwLDEwIEBAIGludCBrc3pfc3dfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbCk7XG4gaW50IGtzel9wYXJlbnRfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnbnVtKTtcbiBpbnQga3N6X3BhcmVudF9tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnbnVtLCB1MTYgdmFsKTtcbiBpbnQga3N6X21kaW9fcmVnaXN0ZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldik7XG4mIzQzO3ZvaWQga3N6X2lycV9idXNfbG9jayhzdHJ1Y3QgaXJxX2RhdGEgKmQpO1xuJiM0Mzt2b2lkIGtzel9pcnFfYnVzX3N5bmNfdW5sb2NrKHN0cnVjdCBpcnFfZGF0YSAqZCk7XG4mIzQzO2ludCBrc3pfaXJxX2NvbW1vbl9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBzdHJ1Y3Qga3N6X2lycSAqa2lycSxcbiYjNDM7XHRcdFx0IGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyAqb3BzKTtcbiBpbnQga3N6X3BpcnFfc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggcCk7XG4gaW50IGtzel9naXJxX3NldHVwKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpO1xuIHZvaWQga3N6X2lycV9mcmVlKHN0cnVjdCBrc3pfaXJxICpraXJxKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jXG5pbmRleCA4Yjk4MDM5MzIwYWRkYS4uOWQ4Yjc4Njg3ZjUzMTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmNcbkBAIC0zMiw2ICYjNDM7MzIsMTUgQEBcbiBcbiAjZGVmaW5lIEtTWl9QVFBfSU5UX1NUQVJUIDEzXG4gXG4mIzQzOy8qXG4mIzQzOyAqIFBUUCBpbnRlcnJ1cHQgYml0IGlzIHRoZSBiaXQgMTIgb2YgdGhlIDE2LWJpdHMgSVNSL0lFUi4gQnV0IGtzel9jb21tb24uYyBvbmx5XG4mIzQzOyAqIGFjY2Vzc2VzIHRoZSBoaWdoLWJ5dGUgb2YgdGhlc2UgcmVnaXN0ZXJzIHNvIHRoZSBQVFAgaW50ZXJydXB0IGJpdCBiZWNvbWVzIDQuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIEtTWjg0NjNfU1JDX1BUUF9JTlRcdFx0NFxuJiM0MzsjZGVmaW5lIEtTWjg0NjNfUFRQX1BPUlQxX0lOVF9TVEFSVFx0MTJcbiYjNDM7I2RlZmluZSBLU1o4NDYzX1BUUF9QT1JUMl9JTlRfU1RBUlRcdDE0XG4mIzQzOyNkZWZpbmUgS1NaODQ2M19QVFBfSU5UX1NUQVJUXHRcdEtTWjg0NjNfUFRQX1BPUlQxX0lOVF9TVEFSVFxuJiM0MztcbiBzdGF0aWMgaW50IGtzel9wdHBfdG91X2dwaW8oc3RydWN0IGtzel9kZXZpY2UgKmRldilcbiB7XG4gXHRpbnQgcmV0O1xuQEAgLTI4OCw2ICYjNDM7Mjk3LDMxIEBAIHN0YXRpYyBpbnQga3N6X3B0cF9lbmFibGVfbW9kZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuIFx0XHRcdCB0YWdfZW4gPyBQVFBfRU5BQkxFIDogMCk7XG4gfVxuIFxuJiM0MztpbnQga3N6ODQ2M19nZXRfdHNfaW5mbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0XHRzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqdHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbiYjNDM7XHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YTtcbiYjNDM7XG4mIzQzO1x0cHRwX2RhdGEgPSBcdTAwMjZkZXYtXHUwMDNlcHRwX2RhdGE7XG4mIzQzO1xuJiM0MztcdGlmICghcHRwX2RhdGEtXHUwMDNlY2xvY2spXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0dHMtXHUwMDNlc29fdGltZXN0YW1waW5nID0gU09GX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRSB8XG4mIzQzO1x0XHRcdCAgICAgIFNPRl9USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkUgfFxuJiM0MztcdFx0XHQgICAgICBTT0ZfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRTtcbiYjNDM7XG4mIzQzO1x0dHMtXHUwMDNldHhfdHlwZXMgPSBCSVQoSFdUU1RBTVBfVFhfT0ZGKSB8IEJJVChIV1RTVEFNUF9UWF9PTik7XG4mIzQzO1xuJiM0MztcdHRzLVx1MDAzZXJ4X2ZpbHRlcnMgPSBCSVQoSFdUU1RBTVBfRklMVEVSX05PTkUpIHxcbiYjNDM7XHRcdFx0IEJJVChIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX0VWRU5UKTtcbiYjNDM7XG4mIzQzO1x0dHMtXHUwMDNlcGhjX2luZGV4ID0gcHRwX2Nsb2NrX2luZGV4KHB0cF9kYXRhLVx1MDAzZWNsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gLyogVGhlIGZ1bmN0aW9uIGlzIHJldHVybiBiYWNrIHRoZSBjYXBhYmlsaXR5IG9mIHRpbWVzdGFtcGluZyBmZWF0dXJlIHdoZW5cbiAgKiByZXF1ZXN0ZWQgdGhyb3VnaCBldGh0b29sIC1UIFx1MDAzY2ludGVyZmFjZVx1MDAzZSB1dGlsaXR5XG4gICovXG5AQCAtMzMyLDYgJiM0MzszNjYsNzIgQEAgaW50IGtzel9od3RzdGFtcF9nZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBrc3o4NDYzX3NldF9od3RzdGFtcF9jb25maWcoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IGtzel9wb3J0ICpwcnQsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCB1MTYgKnJlZ3MgPSBkZXYtXHUwMDNlaW5mby1cdTAwM2VyZWdzO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChjb25maWctXHUwMDNlZmxhZ3MpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChjb25maWctXHUwMDNldHhfdHlwZSkge1xuJiM0MztcdGNhc2UgSFdUU1RBTVBfVFhfT0ZGOlxuJiM0MztcdFx0cHJ0LVx1MDAzZXB0cG1zZ19pcnFbS1NaODQ2M19TWU5DX01TR10udHNfZW4gID0gZmFsc2U7XG4mIzQzO1x0XHRwcnQtXHUwMDNlcHRwbXNnX2lycVtLU1o4NDYzX1hEUkVRX1BEUkVTX01TR10udHNfZW4gPSBmYWxzZTtcbiYjNDM7XHRcdHBydC1cdTAwM2Vod3RzX3R4X2VuID0gZmFsc2U7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEhXVFNUQU1QX1RYX09OOlxuJiM0MztcdFx0cHJ0LVx1MDAzZXB0cG1zZ19pcnFbS1NaODQ2M19TWU5DX01TR10udHNfZW4gID0gdHJ1ZTtcbiYjNDM7XHRcdHBydC1cdTAwM2VwdHBtc2dfaXJxW0tTWjg0NjNfWERSRVFfUERSRVNfTVNHXS50c19lbiA9IHRydWU7XG4mIzQzO1x0XHRwcnQtXHUwMDNlaHd0c190eF9lbiA9IHRydWU7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0ga3N6X3JtdzE2KGRldiwgcmVnc1tQVFBfTVNHX0NPTkYxXSwgUFRQXzFTVEVQLCAwKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRVJBTkdFO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChjb25maWctXHUwMDNlcnhfZmlsdGVyKSB7XG4mIzQzO1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfTk9ORTpcbiYjNDM7XHRcdHBydC1cdTAwM2Vod3RzX3J4X2VuID0gZmFsc2U7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfRVZFTlQ6XG4mIzQzO1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX1NZTkM6XG4mIzQzO1x0XHRjb25maWctXHUwMDNlcnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9FVkVOVDtcbiYjNDM7XHRcdHBydC1cdTAwM2Vod3RzX3J4X2VuID0gdHJ1ZTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRjb25maWctXHUwMDNlcnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX05PTkU7XG4mIzQzO1x0XHRyZXR1cm4gLUVSQU5HRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBrc3pfcHRwX2VuYWJsZV9tb2RlKGRldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBrc3o4NDYzX2h3dHN0YW1wX3NldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0XHQgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZyxcbiYjNDM7XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuJiM0MztcdHN0cnVjdCBrc3pfcG9ydCAqcHJ0O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHBydCA9IFx1MDAyNmRldi1cdTAwM2Vwb3J0c1twb3J0XTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0ga3N6ODQ2M19zZXRfaHd0c3RhbXBfY29uZmlnKGRldiwgcHJ0LCBjb25maWcpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRwcnQtXHUwMDNldHN0YW1wX2NvbmZpZyA9ICpjb25maWc7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQga3N6X3NldF9od3RzdGFtcF9jb25maWcoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiBcdFx0XHRcdCAgIHN0cnVjdCBrc3pfcG9ydCAqcHJ0LFxuIFx0XHRcdFx0ICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZylcbkBAIC01NjIsNiAmIzQzOzY2MiwzMSBAQCBzdGF0aWMgdm9pZCBrc3pfcHRwX3R4dHN0YW1wX3NrYihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuIFx0c2tiX2NvbXBsZXRlX3R4X3RpbWVzdGFtcChza2IsIFx1MDAyNmh3dHN0YW1wcyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBrc3o4NDYzX3NldF9wZGVsYXlyZXNwX2ZsYWcoc3RydWN0IGtzel9wb3J0ICpwcnQsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHB0cF9oZWFkZXIgKmhkcjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgdHlwZTtcbiYjNDM7XHR1OCBwdHBfbXNnX3R5cGU7XG4mIzQzO1xuJiM0MztcdGlmICgha3N6X2lzX2tzejg0NjMocHJ0LVx1MDAzZWtzel9kZXYpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAoc2tiX2xpbmVhcml6ZShza2IpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHR0eXBlID0gcHRwX2NsYXNzaWZ5X3Jhdyhza2IpO1xuJiM0MztcdGlmICh0eXBlID09IFBUUF9DTEFTU19OT05FKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRoZHIgPSBwdHBfcGFyc2VfaGVhZGVyKHNrYiwgdHlwZSk7XG4mIzQzO1x0aWYgKCFoZHIpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHB0cF9tc2dfdHlwZSA9IHB0cF9nZXRfbXNndHlwZShoZHIsIHR5cGUpO1xuJiM0MztcdHBydC1cdTAwM2VsYXN0X3R4X2lzX3BkZWxheXJlc3AgPSAocHRwX21zZ190eXBlID09IFBUUF9NU0dUWVBFX1BERUxBWV9SRVNQKTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIGtzel9wb3J0X2RlZmVycmVkX3htaXQoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaylcbiB7XG4gXHRzdHJ1Y3Qga3N6X2RlZmVycmVkX3htaXRfd29yayAqeG1pdF93b3JrID0gd29ya190b194bWl0X3dvcmsod29yayk7XG5AQCAtNTc4LDYgJiM0Mzs3MDMsOCBAQCB2b2lkIGtzel9wb3J0X2RlZmVycmVkX3htaXQoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaylcbiBcbiBcdHJlaW5pdF9jb21wbGV0aW9uKFx1MDAyNnBydC1cdTAwM2V0c3RhbXBfbXNnX2NvbXApO1xuIFxuJiM0MztcdGtzejg0NjNfc2V0X3BkZWxheXJlc3BfZmxhZyhwcnQsIHNrYik7XG4mIzQzO1xuIFx0ZHNhX2VucXVldWVfc2tiKHNrYiwgc2tiLVx1MDAzZWRldik7XG4gXG4gXHRrc3pfcHRwX3R4dHN0YW1wX3NrYihkZXYsIHBydCwgY2xvbmUpO1xuQEAgLTk0NCw4ICYjNDM7MTA3MSw5IEBAIGludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdC8qIEN1cnJlbnRseSBvbmx5IFAyUCBtb2RlIGlzIHN1cHBvcnRlZC4gV2hlbiA4MDJfMUFTIGJpdCBpcyBzZXQsIGl0XG4gXHQgKiBmb3J3YXJkcyBhbGwgUFRQIHBhY2tldHMgdG8gaG9zdCBwb3J0IGFuZCBub25lIHRvIG90aGVyIHBvcnRzLlxuIFx0ICovXG4tXHRyZXQgPSBrc3pfcm13MTYoZGV2LCByZWdzW1BUUF9NU0dfQ09ORjFdLCBQVFBfVENfUDJQIHwgUFRQXzgwMl8xQVMsXG4tXHRcdFx0UFRQX1RDX1AyUCB8IFBUUF84MDJfMUFTKTtcbiYjNDM7XHRyZXQgPSBrc3pfcm13MTYoZGV2LCByZWdzW1BUUF9NU0dfQ09ORjFdLFxuJiM0MztcdFx0XHRQVFBfVENfUDJQIHwgUFRQXzgwMl8xQVMgfCBQVFBfRVRIX0VOQUJMRSxcbiYjNDM7XHRcdFx0UFRQX1RDX1AyUCB8IFBUUF84MDJfMUFTIHwgUFRQX0VUSF9FTkFCTEUpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC05NjksNyAmIzQzOzEwOTcsMjIgQEAgdm9pZCBrc3pfcHRwX2Nsb2NrX3VucmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFxuIHN0YXRpYyBpbnQga3N6X3JlYWRfdHMoc3RydWN0IGtzel9wb3J0ICpwb3J0LCB1MTYgcmVnLCB1MzIgKnRzKVxuIHtcbi1cdHJldHVybiBrc3pfcmVhZDMyKHBvcnQtXHUwMDNla3N6X2RldiwgcmVnLCB0cyk7XG4mIzQzO1x0dTE2IHRzX3JlZyA9IHJlZztcbiYjNDM7XG4mIzQzO1x0LyoqXG4mIzQzO1x0ICogT24gS1NaODQ2MyBEUkVRIGFuZCBEUkVTUCB0aW1lc3RhbXBzIHNoYXJlIG9uZSBpbnRlcnJ1cHQgbGluZVxuJiM0MztcdCAqIHNvIHdlIGhhdmUgdG8gY2hlY2sgdGhlIG5hdHVyZSBvZiB0aGUgbGF0ZXN0IGV2ZW50IHNlbnQgdG8ga25vd1xuJiM0MztcdCAqIHdoZXJlIHRoZSB0aW1lc3RhbXAgaXMgbG9jYXRlZFxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChrc3pfaXNfa3N6ODQ2Myhwb3J0LVx1MDAzZWtzel9kZXYpKSB7XG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3Qga3N6X2Rldl9vcHMgKm9wcyA9IHBvcnQtXHUwMDNla3N6X2Rldi1cdTAwM2VkZXZfb3BzO1xuJiM0MztcbiYjNDM7XHRcdGlmIChwb3J0LVx1MDAzZWxhc3RfdHhfaXNfcGRlbGF5cmVzcCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICB0c19yZWcgPT0gb3BzLVx1MDAzZWdldF9wb3J0X2FkZHIocG9ydC1cdTAwM2VudW0sIEtTWjg0NjNfUkVHX1BPUlRfRFJFUV9UUykpXG4mIzQzO1x0XHRcdHRzX3JlZyAmIzQzOz0gS1NaODQ2M19EUkVTUF9UU19PRkZTRVQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4ga3N6X3JlYWQzMihwb3J0LVx1MDAzZWtzel9kZXYsIHRzX3JlZywgdHMpO1xuIH1cbiBcbiBzdGF0aWMgaXJxcmV0dXJuX3Qga3N6X3B0cF9tc2dfdGhyZWFkX2ZuKGludCBpcnEsIHZvaWQgKmRldl9pZClcbkBAIC0xMTI5LDYgJiM0MzsxMjcyLDEyOCBAQCBzdGF0aWMgaW50IGtzel9wdHBfbXNnX2lycV9zZXR1cChzdHJ1Y3Qga3N6X3BvcnQgKnBvcnQsIHU4IG4pXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBrc3o4NDYzX3B0cF9wb3J0X2lycV9zZXR1cChzdHJ1Y3Qga3N6X2lycSAqcHRwaXJxLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBrc3pfcG9ydCAqcG9ydCwgaW50IGh3X2lycSlcbiYjNDM7e1xuJiM0MztcdHUxNiB0c19yZWdbXSA9IHtLU1o4NDYzX1JFR19QT1JUX1NZTkNfVFMsIEtTWjg0NjNfUkVHX1BPUlRfRFJFUV9UU307XG4mIzQzO1x0c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBuYW1lW10gPSB7XCYjMzQ7c3luYy1tc2dcJiMzNDssIFwmIzM0O2RlbGF5LW1zZ1wmIzM0O307XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGtzel9kZXZfb3BzICpvcHMgPSBwb3J0LVx1MDAzZWtzel9kZXYtXHUwMDNlZGV2X29wcztcbiYjNDM7XHRzdHJ1Y3Qga3N6X3B0cF9pcnEgKnB0cG1zZ19pcnE7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aW5pdF9jb21wbGV0aW9uKFx1MDAyNnBvcnQtXHUwMDNldHN0YW1wX21zZ19jb21wKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgMjsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHB0cG1zZ19pcnEgPSBcdTAwMjZwb3J0LVx1MDAzZXB0cG1zZ19pcnFbaV07XG4mIzQzO1x0XHRwdHBtc2dfaXJxLVx1MDAzZW51bSA9IGlycV9jcmVhdGVfbWFwcGluZyhwdHBpcnEtXHUwMDNlZG9tYWluLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIGh3X2lycSAmIzQzOyBpKTtcbiYjNDM7XHRcdGlmICghcHRwbXNnX2lycS1cdTAwM2VudW0pIHtcbiYjNDM7XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdFx0Z290byByZWxlYXNlX21zZ19pcnE7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cHRwbXNnX2lycS1cdTAwM2Vwb3J0ID0gcG9ydDtcbiYjNDM7XHRcdHB0cG1zZ19pcnEtXHUwMDNldHNfcmVnID0gb3BzLVx1MDAzZWdldF9wb3J0X2FkZHIocG9ydC1cdTAwM2VudW0sIHRzX3JlZ1tpXSk7XG4mIzQzO1xuJiM0MztcdFx0c3Ryc2NweShwdHBtc2dfaXJxLVx1MDAzZW5hbWUsIG5hbWVbaV0pO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHB0cG1zZ19pcnEtXHUwMDNlbnVtLCBOVUxMLFxuJiM0MztcdFx0XHRcdFx0ICAga3N6X3B0cF9tc2dfdGhyZWFkX2ZuLCBJUlFGX09ORVNIT1QsXG4mIzQzO1x0XHRcdFx0XHQgICBwdHBtc2dfaXJxLVx1MDAzZW5hbWUsIHB0cG1zZ19pcnEpO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRpcnFfZGlzcG9zZV9tYXBwaW5nKHB0cG1zZ19pcnEtXHUwMDNlbnVtKTtcbiYjNDM7XHRcdFx0Z290byByZWxlYXNlX21zZ19pcnE7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO3JlbGVhc2VfbXNnX2lycTpcbiYjNDM7XHR3aGlsZSAoaS0tKVxuJiM0MztcdFx0a3N6X3B0cF9tc2dfaXJxX2ZyZWUocG9ydCwgaSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGtzejg0NjNfcHRwX3BvcnRfaXJxX3RlYXJkb3duKHN0cnVjdCBrc3pfcG9ydCAqcG9ydClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAyOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGtzel9wdHBfbXNnX2lycV9mcmVlKHBvcnQsIGkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQga3N6ODQ2M19wdHBfaXJxX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuJiM0MztcdHN0cnVjdCBrc3pfcG9ydCAqcG9ydDEsICpwb3J0MjtcbiYjNDM7XHRzdHJ1Y3Qga3N6X2lycSAqcHRwaXJxO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHBvcnQxID0gXHUwMDI2ZGV2LVx1MDAzZXBvcnRzWzBdO1xuJiM0MztcdHBvcnQyID0gXHUwMDI2ZGV2LVx1MDAzZXBvcnRzWzFdO1xuJiM0MztcdHB0cGlycSA9IFx1MDAyNnBvcnQxLVx1MDAzZXB0cGlycTtcbiYjNDM7XG4mIzQzO1x0cHRwaXJxLVx1MDAzZWlycV9udW0gPSBpcnFfZmluZF9tYXBwaW5nKGRldi1cdTAwM2VnaXJxLmRvbWFpbixcbiYjNDM7XHRcdFx0XHRcdCAgIEtTWjg0NjNfU1JDX1BUUF9JTlQpO1xuJiM0MztcdGlmICghcHRwaXJxLVx1MDAzZWlycV9udW0pXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cHRwaXJxLVx1MDAzZWRldiA9IGRldjtcbiYjNDM7XHRwdHBpcnEtXHUwMDNlbmlycXMgPSA0O1xuJiM0MztcdHB0cGlycS1cdTAwM2VyZWdfbWFzayA9IEtTWjg0NjNfUFRQX1RTX0lFUjtcbiYjNDM7XHRwdHBpcnEtXHUwMDNlcmVnX3N0YXR1cyA9IEtTWjg0NjNfUFRQX1RTX0lTUjtcbiYjNDM7XHRwdHBpcnEtXHUwMDNlaXJxMF9vZmZzZXQgPSBLU1o4NDYzX1BUUF9JTlRfU1RBUlQ7XG4mIzQzO1x0c25wcmludGYocHRwaXJxLVx1MDAzZW5hbWUsIHNpemVvZihwdHBpcnEtXHUwMDNlbmFtZSksIFwmIzM0O3B0cC1pcnFcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRwdHBpcnEtXHUwMDNlZG9tYWluID0gaXJxX2RvbWFpbl9jcmVhdGVfbGluZWFyKGRldl9md25vZGUoZGV2LVx1MDAzZWRldiksXG4mIzQzO1x0XHRcdFx0XHRcdCAgcHRwaXJxLVx1MDAzZW5pcnFzLFxuJiM0MztcdFx0XHRcdFx0XHQgIFx1MDAyNmtzel9wdHBfaXJxX2RvbWFpbl9vcHMsXG4mIzQzO1x0XHRcdFx0XHRcdCAgcHRwaXJxKTtcbiYjNDM7XHRpZiAoIXB0cGlycS1cdTAwM2Vkb21haW4pXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0ga3N6ODQ2M19wdHBfcG9ydF9pcnFfc2V0dXAocHRwaXJxLCBwb3J0MSxcbiYjNDM7XHRcdFx0XHRcdCBLU1o4NDYzX1BUUF9QT1JUMV9JTlRfU1RBUlQgLSBLU1o4NDYzX1BUUF9JTlRfU1RBUlQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIHJlbGVhc2VfZG9tYWluO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrc3o4NDYzX3B0cF9wb3J0X2lycV9zZXR1cChwdHBpcnEsIHBvcnQyLFxuJiM0MztcdFx0XHRcdFx0IEtTWjg0NjNfUFRQX1BPUlQyX0lOVF9TVEFSVCAtIEtTWjg0NjNfUFRQX0lOVF9TVEFSVCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZnJlZV9wb3J0MTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEocHRwaXJxLVx1MDAzZWlycV9udW0sIE5VTEwsIGtzel9wdHBfaXJxX3RocmVhZF9mbixcbiYjNDM7XHRcdFx0XHQgICBJUlFGX09ORVNIT1QsIHB0cGlycS1cdTAwM2VuYW1lLCBwdHBpcnEpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGZyZWVfcG9ydDI7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZnJlZV9wb3J0MjpcbiYjNDM7XHRrc3o4NDYzX3B0cF9wb3J0X2lycV90ZWFyZG93bihwb3J0Mik7XG4mIzQzO2ZyZWVfcG9ydDE6XG4mIzQzO1x0a3N6ODQ2M19wdHBfcG9ydF9pcnFfdGVhcmRvd24ocG9ydDEpO1xuJiM0MztyZWxlYXNlX2RvbWFpbjpcbiYjNDM7XHRpcnFfZG9tYWluX3JlbW92ZShwdHBpcnEtXHUwMDNlZG9tYWluKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBrc3o4NDYzX3B0cF9pcnFfZnJlZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbiYjNDM7XHRzdHJ1Y3Qga3N6X3BvcnQgKnBvcnQxID0gXHUwMDI2ZGV2LVx1MDAzZXBvcnRzWzBdO1xuJiM0MztcdHN0cnVjdCBrc3pfcG9ydCAqcG9ydDIgPSBcdTAwMjZkZXYtXHUwMDNlcG9ydHNbMV07XG4mIzQzO1x0c3RydWN0IGtzel9pcnEgKnB0cGlycSA9IFx1MDAyNnBvcnQxLVx1MDAzZXB0cGlycTtcbiYjNDM7XG4mIzQzO1x0ZnJlZV9pcnEocHRwaXJxLVx1MDAzZWlycV9udW0sIHB0cGlycSk7XG4mIzQzO1x0a3N6ODQ2M19wdHBfcG9ydF9pcnFfdGVhcmRvd24ocG9ydDIpO1xuJiM0MztcdGtzejg0NjNfcHRwX3BvcnRfaXJxX3RlYXJkb3duKHBvcnQxKTtcbiYjNDM7XHRpcnFfZG9tYWluX3JlbW92ZShwdHBpcnEtXHUwMDNlZG9tYWluKTtcbiYjNDM7fVxuJiM0MztcbiBpbnQga3N6X3B0cF9pcnFfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCB1OCBwKVxuIHtcbiBcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmhcbmluZGV4IDMwODZlNTE5YjFiNjQxLi43MDY3ZWM5YmQxZTZmMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaFxuQEAgLTM5LDE3ICYjNDM7MzksMjQgQEAgdm9pZCBrc3pfcHRwX2Nsb2NrX3VucmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcbiBcbiBpbnQga3N6X2dldF90c19pbmZvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdCAgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqdHMpO1xuJiM0MztpbnQga3N6ODQ2M19nZXRfdHNfaW5mbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0XHRzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqdHMpO1xuIGludCBrc3pfaHd0c3RhbXBfZ2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdCAgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZyk7XG4gaW50IGtzel9od3RzdGFtcF9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0ICAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY29uZmlnLFxuIFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4mIzQzO2ludCBrc3o4NDYzX2h3dHN0YW1wX3NldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0XHQgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZyxcbiYjNDM7XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4gdm9pZCBrc3pfcG9ydF90eHRzdGFtcChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiB2b2lkIGtzel9wb3J0X2RlZmVycmVkX3htaXQoc3RydWN0IGt0aHJlYWRfd29yayAqd29yayk7XG4gYm9vbCBrc3pfcG9ydF9yeHRzdGFtcChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHQgICAgICAgdW5zaWduZWQgaW50IHR5cGUpO1xuIGludCBrc3pfcHRwX2lycV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIHU4IHApO1xuIHZvaWQga3N6X3B0cF9pcnFfZnJlZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIHU4IHApO1xuJiM0MztpbnQga3N6ODQ2M19wdHBfaXJxX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XG4mIzQzO3ZvaWQga3N6ODQ2M19wdHBfaXJxX2ZyZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcbiBcbiAjZWxzZVxuIFxuQEAgLTcyLDExICYjNDM7NzksMjAgQEAgc3RhdGljIGlubGluZSBpbnQga3N6X3B0cF9pcnFfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCB1OCBwKVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrc3pfcHRwX2lycV9mcmVlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgdTggcCkge31cbiBcbiYjNDM7c3RhdGljIGlubGluZSBpbnQga3N6ODQ2M19wdHBfaXJxX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQga3N6ODQ2M19wdHBfaXJxX2ZyZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKSB7fVxuJiM0MztcbiAjZGVmaW5lIGtzel9nZXRfdHNfaW5mbyBOVUxMXG4mIzQzOyNkZWZpbmUga3N6ODQ2M19nZXRfdHNfaW5mbyBOVUxMXG4gXG4gI2RlZmluZSBrc3pfaHd0c3RhbXBfZ2V0IE5VTExcbiBcbiAjZGVmaW5lIGtzel9od3RzdGFtcF9zZXQgTlVMTFxuJiM0MzsjZGVmaW5lIGtzejg0NjNfaHd0c3RhbXBfc2V0IE5VTExcbiBcbiAjZGVmaW5lIGtzel9wb3J0X3J4dHN0YW1wIE5VTExcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmhcbmluZGV4IGVhYjlhZWNiN2ZhOGE1Li42NWVhODU3N2FmNzU1OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cF9yZWcuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwX3JlZy5oXG5AQCAtMTIxLDYgJiM0MzsxMjEsMTIgQEBcbiAjZGVmaW5lIFJFR19QVFBfUE9SVF9TWU5DX1RTXHRcdDB4MEMwQ1xuICNkZWZpbmUgUkVHX1BUUF9QT1JUX1BEUkVTUF9UU1x0XHQweDBDMTBcbiBcbiYjNDM7I2RlZmluZSBLU1o4NDYzX1JFR19QT1JUX0RSRVFfVFNcdDB4MDY0OFxuJiM0MzsjZGVmaW5lIEtTWjg0NjNfUkVHX1BPUlRfU1lOQ19UU1x0MHgwNjRDXG4mIzQzOyNkZWZpbmUgS1NaODQ2M19SRUdfUE9SVF9EUkVTUF9UU1x0MHgwNjUwXG4mIzQzOyNkZWZpbmUgS1NaODQ2M19QVFBfVFNfSVNSXHRcdDB4MDY4Q1xuJiM0MzsjZGVmaW5lIEtTWjg0NjNfUFRQX1RTX0lFUlx0XHQweDA2OEVcbiYjNDM7XG4gI2RlZmluZSBSRUdfUFRQX1BPUlRfVFhfSU5UX1NUQVRVU19fMlx0MHgwQzE0XG4gI2RlZmluZSBSRUdfUFRQX1BPUlRfVFhfSU5UX0VOQUJMRV9fMlx0MHgwQzE2XG4gXG5AQCAtMTMxLDQgJiM0MzsxMzcsOCBAQFxuICNkZWZpbmUgS1NaX1hEUkVRX01TR1x0XHRcdDFcbiAjZGVmaW5lIEtTWl9QRFJFU19NU0dcdFx0XHQwXG4gXG4mIzQzOyNkZWZpbmUgS1NaODQ2M19EUkVTUF9UU19PRkZTRVRcdFx0KEtTWjg0NjNfUkVHX1BPUlRfRFJFU1BfVFMgLSBLU1o4NDYzX1JFR19QT1JUX0RSRVFfVFMpXG4mIzQzOyNkZWZpbmUgS1NaODQ2M19TWU5DX01TR1x0XHQwXG4mIzQzOyNkZWZpbmUgS1NaODQ2M19YRFJFUV9QRFJFU19NU0dcdFx0MVxuJiM0MztcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kc2EuaCBiL2luY2x1ZGUvbmV0L2RzYS5oXG5pbmRleCA4YzE2ZWYyM2NjMTAyYS4uNmY3ZjVjMTdiNTMyMDggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9kc2EuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvZHNhLmhcbkBAIC01OSw2ICYjNDM7NTksNyBAQCBzdHJ1Y3QgdGNfYWN0aW9uO1xuICNkZWZpbmUgRFNBX1RBR19QUk9UT19NWExfR1NXMVhYX1ZBTFVFXHRcdDMxXG4gI2RlZmluZSBEU0FfVEFHX1BST1RPX01YTDg2Ml9WQUxVRVx0XHQzMlxuICNkZWZpbmUgRFNBX1RBR19QUk9UT19ORVRDX1ZBTFVFXHRcdDMzXG4mIzQzOyNkZWZpbmUgRFNBX1RBR19QUk9UT19LU1o4NDYzX1ZBTFVFXHRcdDM0XG4gXG4gZW51bSBkc2FfdGFnX3Byb3RvY29sIHtcbiBcdERTQV9UQUdfUFJPVE9fTk9ORVx0XHQ9IERTQV9UQUdfUFJPVE9fTk9ORV9WQUxVRSxcbkBAIC05NSw2ICYjNDM7OTYsNyBAQCBlbnVtIGRzYV90YWdfcHJvdG9jb2wge1xuIFx0RFNBX1RBR19QUk9UT19NWExfR1NXMVhYXHQ9IERTQV9UQUdfUFJPVE9fTVhMX0dTVzFYWF9WQUxVRSxcbiBcdERTQV9UQUdfUFJPVE9fTVhMODYyXHRcdD0gRFNBX1RBR19QUk9UT19NWEw4NjJfVkFMVUUsXG4gXHREU0FfVEFHX1BST1RPX05FVENcdFx0PSBEU0FfVEFHX1BST1RPX05FVENfVkFMVUUsXG4mIzQzO1x0RFNBX1RBR19QUk9UT19LU1o4NDYzXHRcdD0gRFNBX1RBR19QUk9UT19LU1o4NDYzX1ZBTFVFLFxuIH07XG4gXG4gc3RydWN0IGRzYV9zd2l0Y2g7XG5kaWZmIC0tZ2l0IGEvbmV0L2RzYS90YWdfa3N6LmMgYi9uZXQvZHNhL3RhZ19rc3ouY1xuaW5kZXggNjdmYTg5ZjEwMmUwNzAuLmI0ZDcwYmE5MzBkY2JlIDEwMDY0NFxuLS0tIGEvbmV0L2RzYS90YWdfa3N6LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kc2EvdGFnX2tzei5jXG5AQCAtMTIsNiAmIzQzOzEyLDcgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDt0YWcuaFwmIzM0O1xuIFxuJiM0MzsjZGVmaW5lIEtTWjg0NjNfTkFNRSBcJiMzNDtrc3o4NDYzXCYjMzQ7XG4gI2RlZmluZSBLU1o4Nzk1X05BTUUgXCYjMzQ7a3N6ODc5NVwmIzM0O1xuICNkZWZpbmUgS1NaOTQ3N19OQU1FIFwmIzM0O2tzejk0NzdcJiMzNDtcbiAjZGVmaW5lIEtTWjk4OTNfTkFNRSBcJiMzNDtrc3o5ODkzXCYjMzQ7XG5AQCAtMTAzLDcyICYjNDM7MTA0LDYgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICprc3pfY29tbW9uX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIHNrYjtcbiB9XG4gXG4tLypcbi0gKiBGb3IgSW5ncmVzcyAoSG9zdCAtXHUwMDNlIEtTWjg3OTUpLCAxIGJ5dGUgaXMgYWRkZWQgYmVmb3JlIEZDUy5cbi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi0gKiBEQSg2Ynl0ZXMpfFNBKDZieXRlcyl8Li4uLnxEYXRhKG5ieXRlcyl8dGFnKDFieXRlKXxGQ1MoNGJ5dGVzKVxuLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLSAqIHRhZyA6IGVhY2ggYml0IHJlcHJlc2VudHMgcG9ydCAoZWcsIDB4MDE9cG9ydDEsIDB4MDI9cG9ydDIsIDB4MTA9cG9ydDUpXG4tICpcbi0gKiBGb3IgRWdyZXNzIChLU1o4Nzk1IC1cdTAwM2UgSG9zdCksIDEgYnl0ZSBpcyBhZGRlZCBiZWZvcmUgRkNTLlxuLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLSAqIERBKDZieXRlcyl8U0EoNmJ5dGVzKXwuLi4ufERhdGEobmJ5dGVzKXx0YWcwKDFieXRlKXxGQ1MoNGJ5dGVzKVxuLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLSAqIHRhZzAgOiB6ZXJvLWJhc2VkIHZhbHVlIHJlcHJlc2VudHMgcG9ydFxuLSAqXHQgIChlZywgMHgwPXBvcnQxLCAweDI9cG9ydDMsIDB4Mz1wb3J0NClcbi0gKi9cbi1cbi0jZGVmaW5lIEtTWjg3OTVfVEFJTF9UQUdfRUdfUE9SVF9NXHRHRU5NQVNLKDEsIDApXG4tI2RlZmluZSBLU1o4Nzk1X1RBSUxfVEFHX09WRVJSSURFXHRCSVQoNilcbi0jZGVmaW5lIEtTWjg3OTVfVEFJTF9UQUdfTE9PS1VQXHRcdEJJVCg3KVxuLVxuLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqa3N6ODc5NV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4te1xuLVx0c3RydWN0IGV0aGhkciAqaGRyO1xuLVx0dTggKnRhZztcbi1cbi1cdGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwgXHUwMDI2XHUwMDI2IHNrYl9jaGVja3N1bV9oZWxwKHNrYikpIHtcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4tXHRcdHJldHVybiBOVUxMO1xuLVx0fVxuLVxuLVx0LyogVGFnIGVuY29kaW5nICovXG4tXHR0YWcgPSBza2JfcHV0KHNrYiwgS1NaX0lOR1JFU1NfVEFHX0xFTik7XG4tXHRoZHIgPSBza2JfZXRoX2hkcihza2IpO1xuLVxuLVx0KnRhZyA9IGRzYV94bWl0X3BvcnRfbWFzayhza2IsIGRldik7XG4tXHRpZiAoaXNfbGlua19sb2NhbF9ldGhlcl9hZGRyKGhkci1cdTAwM2VoX2Rlc3QpKVxuLVx0XHQqdGFnIHw9IEtTWjg3OTVfVEFJTF9UQUdfT1ZFUlJJREU7XG4tXG4tXHRyZXR1cm4gc2tiO1xuLX1cbi1cbi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmtzejg3OTVfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4te1xuLVx0dTggKnRhZztcbi1cbi1cdGlmIChza2JfbGluZWFyaXplKHNrYikpIHtcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4tXHRcdHJldHVybiBOVUxMO1xuLVx0fVxuLVxuLVx0dGFnID0gc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gS1NaX0VHUkVTU19UQUdfTEVOO1xuLVxuLVx0cmV0dXJuIGtzel9jb21tb25fcmN2KHNrYiwgZGV2LCB0YWdbMF0gXHUwMDI2IEtTWjg3OTVfVEFJTF9UQUdfRUdfUE9SVF9NLFxuLVx0XHRcdCAgICAgIEtTWl9FR1JFU1NfVEFHX0xFTik7XG4tfVxuLVxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMga3N6ODc5NV9uZXRkZXZfb3BzID0ge1xuLVx0Lm5hbWVcdD0gS1NaODc5NV9OQU1FLFxuLVx0LnByb3RvXHQ9IERTQV9UQUdfUFJPVE9fS1NaODc5NSxcbi1cdC54bWl0XHQ9IGtzejg3OTVfeG1pdCxcbi1cdC5yY3ZcdD0ga3N6ODc5NV9yY3YsXG4tXHQubmVlZGVkX3RhaWxyb29tID0gS1NaX0lOR1JFU1NfVEFHX0xFTixcbi19O1xuLVxuLURTQV9UQUdfRFJJVkVSKGtzejg3OTVfbmV0ZGV2X29wcyk7XG4tTU9EVUxFX0FMSUFTX0RTQV9UQUdfRFJJVkVSKERTQV9UQUdfUFJPVE9fS1NaODc5NSwgS1NaODc5NV9OQU1FKTtcbi1cbiAvKlxuICAqIEZvciBJbmdyZXNzIChIb3N0IC1cdTAwM2UgS1NaOTQ3NyksIDIvNiBieXRlcyBhcmUgYWRkZWQgYmVmb3JlIEZDUy5cbiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkBAIC0yODQsNiAmIzQzOzIxOSwzNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmtzel9kZWZlcl94bWl0KHN0cnVjdCBkc2FfcG9ydCAqZHAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqa3N6X2NvbW1vbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGJvb2wgZG9fdHN0YW1wLFxuJiM0MztcdFx0XHRcdCAgICAgICB1OCBwcmlvLFxuJiM0MztcdFx0XHRcdCAgICAgICB1OCBvdmVycmlkZV9tYXNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV91c2VyX3RvX3BvcnQoZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgZXRoaGRyICpoZHI7XG4mIzQzO1x0dTggKnRhZztcbiYjNDM7XG4mIzQzO1x0aWYgKHNrYi1cdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCBcdTAwMjZcdTAwMjYgc2tiX2NoZWNrc3VtX2hlbHAoc2tiKSkge1xuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFRhZyBlbmNvZGluZyAqL1xuJiM0MztcdGlmIChkb190c3RhbXApXG4mIzQzO1x0XHRrc3pfeG1pdF90aW1lc3RhbXAoZHAsIHNrYik7XG4mIzQzO1xuJiM0MztcdHRhZyA9IHNrYl9wdXQoc2tiLCBLU1pfSU5HUkVTU19UQUdfTEVOKTtcbiYjNDM7XHRoZHIgPSBza2JfZXRoX2hkcihza2IpO1xuJiM0MztcbiYjNDM7XHQqdGFnID0gZHNhX3htaXRfcG9ydF9tYXNrKHNrYiwgZGV2KTtcbiYjNDM7XHQqdGFnIHw9IHByaW87XG4mIzQzO1xuJiM0MztcdGlmIChpc19saW5rX2xvY2FsX2V0aGVyX2FkZHIoaGRyLVx1MDAzZWhfZGVzdCkpXG4mIzQzO1x0XHQqdGFnIHw9IG92ZXJyaWRlX21hc2s7XG4mIzQzO1xuJiM0MztcdHJldHVybiBrc3pfZGVmZXJfeG1pdChkcCwgc2tiKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmtzejk0NzdfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuQEAgLTM1MywzNyAmIzQzOzMxOSw2OSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIGtzejk0NzdfbmV0ZGV2X29wcyA9IHtcbiBEU0FfVEFHX0RSSVZFUihrc3o5NDc3X25ldGRldl9vcHMpO1xuIE1PRFVMRV9BTElBU19EU0FfVEFHX0RSSVZFUihEU0FfVEFHX1BST1RPX0tTWjk0NzcsIEtTWjk0NzdfTkFNRSk7XG4gXG4tI2RlZmluZSBLU1o5ODkzX1RBSUxfVEFHX1BSSU9cdFx0R0VOTUFTSyg0LCAzKVxuLSNkZWZpbmUgS1NaOTg5M19UQUlMX1RBR19PVkVSUklERVx0QklUKDUpXG4tI2RlZmluZSBLU1o5ODkzX1RBSUxfVEFHX0xPT0tVUFx0XHRCSVQoNilcbiYjNDM7LypcbiYjNDM7ICogRm9yIEluZ3Jlc3MgKEhvc3QgLVx1MDAzZSBLU1o4Nzk1KSwgMSBieXRlIGlzIGFkZGVkIGJlZm9yZSBGQ1MuXG4mIzQzOyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MzsgKiBEQSg2Ynl0ZXMpfFNBKDZieXRlcyl8Li4uLnxEYXRhKG5ieXRlcyl8dGFnKDFieXRlKXxGQ1MoNGJ5dGVzKVxuJiM0MzsgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7ICogdGFnIDogZWFjaCBiaXQgcmVwcmVzZW50cyBwb3J0IChlZywgMHgwMT1wb3J0MSwgMHgwMj1wb3J0MiwgMHgxMD1wb3J0NSlcbiYjNDM7ICpcbiYjNDM7ICogRm9yIEVncmVzcyAoS1NaODc5NSAtXHUwMDNlIEhvc3QpLCAxIGJ5dGUgaXMgYWRkZWQgYmVmb3JlIEZDUy5cbiYjNDM7ICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzOyAqIERBKDZieXRlcyl8U0EoNmJ5dGVzKXwuLi4ufERhdGEobmJ5dGVzKXx0YWcwKDFieXRlKXxGQ1MoNGJ5dGVzKVxuJiM0MzsgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7ICogdGFnMCA6IHplcm8tYmFzZWQgdmFsdWUgcmVwcmVzZW50cyBwb3J0XG4mIzQzOyAqXHQgIChlZywgMHgwPXBvcnQxLCAweDI9cG9ydDMsIDB4Mz1wb3J0NClcbiYjNDM7ICovXG4gXG4tc3RhdGljIHN0cnVjdCBza19idWZmICprc3o5ODkzX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuJiM0MzsjZGVmaW5lIEtTWjg3OTVfVEFJTF9UQUdfRUdfUE9SVF9NXHRHRU5NQVNLKDEsIDApXG4mIzQzOyNkZWZpbmUgS1NaODc5NV9UQUlMX1RBR19PVkVSUklERVx0QklUKDYpXG4mIzQzOyNkZWZpbmUgS1NaODc5NV9UQUlMX1RBR19MT09LVVBcdFx0QklUKDcpXG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmtzejg3OTVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGtzel9jb21tb25feG1pdChza2IsIGRldiwgZmFsc2UsIDAsIEtTWjg3OTVfVEFJTF9UQUdfT1ZFUlJJREUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmtzejg3OTVfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuLVx0dTE2IHF1ZXVlX21hcHBpbmcgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcbi1cdHU4IHByaW8gPSBuZXRkZXZfdHhxX3RvX3RjKGRldiwgcXVldWVfbWFwcGluZyk7XG4tXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3VzZXJfdG9fcG9ydChkZXYpO1xuLVx0c3RydWN0IGV0aGhkciAqaGRyO1xuIFx0dTggKnRhZztcbiBcbi1cdGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwgXHUwMDI2XHUwMDI2IHNrYl9jaGVja3N1bV9oZWxwKHNrYikpIHtcbiYjNDM7XHRpZiAoc2tiX2xpbmVhcml6ZShza2IpKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiBcbi1cdC8qIFRhZyBlbmNvZGluZyAqL1xuLVx0a3N6X3htaXRfdGltZXN0YW1wKGRwLCBza2IpO1xuJiM0MztcdHRhZyA9IHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtIEtTWl9FR1JFU1NfVEFHX0xFTjtcbiBcbi1cdHRhZyA9IHNrYl9wdXQoc2tiLCBLU1pfSU5HUkVTU19UQUdfTEVOKTtcbi1cdGhkciA9IHNrYl9ldGhfaGRyKHNrYik7XG4mIzQzO1x0cmV0dXJuIGtzel9jb21tb25fcmN2KHNrYiwgZGV2LCB0YWdbMF0gXHUwMDI2IEtTWjg3OTVfVEFJTF9UQUdfRUdfUE9SVF9NLFxuJiM0MztcdFx0XHQgICAgICBLU1pfRUdSRVNTX1RBR19MRU4pO1xuJiM0Mzt9XG4gXG4tXHQqdGFnID0gZHNhX3htaXRfcG9ydF9tYXNrKHNrYiwgZGV2KTtcbi1cdCp0YWcgfD0gRklFTERfUFJFUChLU1o5ODkzX1RBSUxfVEFHX1BSSU8sIHByaW8pO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIGtzejg3OTVfbmV0ZGV2X29wcyA9IHtcbiYjNDM7XHQubmFtZVx0PSBLU1o4Nzk1X05BTUUsXG4mIzQzO1x0LnByb3RvXHQ9IERTQV9UQUdfUFJPVE9fS1NaODc5NSxcbiYjNDM7XHQueG1pdFx0PSBrc3o4Nzk1X3htaXQsXG4mIzQzO1x0LnJjdlx0PSBrc3o4Nzk1X3JjdixcbiYjNDM7XHQubmVlZGVkX3RhaWxyb29tID0gS1NaX0lOR1JFU1NfVEFHX0xFTixcbiYjNDM7fTtcbiBcbi1cdGlmIChpc19saW5rX2xvY2FsX2V0aGVyX2FkZHIoaGRyLVx1MDAzZWhfZGVzdCkpXG4tXHRcdCp0YWcgfD0gS1NaOTg5M19UQUlMX1RBR19PVkVSUklERTtcbiYjNDM7RFNBX1RBR19EUklWRVIoa3N6ODc5NV9uZXRkZXZfb3BzKTtcbiYjNDM7TU9EVUxFX0FMSUFTX0RTQV9UQUdfRFJJVkVSKERTQV9UQUdfUFJPVE9fS1NaODc5NSwgS1NaODc5NV9OQU1FKTtcbiBcbi1cdHJldHVybiBrc3pfZGVmZXJfeG1pdChkcCwgc2tiKTtcbiYjNDM7I2RlZmluZSBLU1o5ODkzX1RBSUxfVEFHX1BSSU9cdFx0R0VOTUFTSyg0LCAzKVxuJiM0MzsjZGVmaW5lIEtTWjk4OTNfVEFJTF9UQUdfT1ZFUlJJREVcdEJJVCg1KVxuJiM0MzsjZGVmaW5lIEtTWjk4OTNfVEFJTF9UQUdfTE9PS1VQXHRcdEJJVCg2KVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBza19idWZmICprc3o5ODkzX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdHUxNiBxdWV1ZV9tYXBwaW5nID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7XG4mIzQzO1x0dTggcHJpbyA9IG5ldGRldl90eHFfdG9fdGMoZGV2LCBxdWV1ZV9tYXBwaW5nKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGtzel9jb21tb25feG1pdChza2IsIGRldiwgdHJ1ZSxcbiYjNDM7XHRcdFx0ICAgICAgIEZJRUxEX1BSRVAoS1NaOTg5M19UQUlMX1RBR19QUklPLCBwcmlvKSxcbiYjNDM7XHRcdFx0ICAgICAgIEtTWjk4OTNfVEFJTF9UQUdfT1ZFUlJJREUpO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIGtzejk4OTNfbmV0ZGV2X29wcyA9IHtcbkBAIC0zOTksNiAmIzQzOzM5Nyw3MCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIGtzejk4OTNfbmV0ZGV2X29wcyA9IHtcbiBEU0FfVEFHX0RSSVZFUihrc3o5ODkzX25ldGRldl9vcHMpO1xuIE1PRFVMRV9BTElBU19EU0FfVEFHX0RSSVZFUihEU0FfVEFHX1BST1RPX0tTWjk4OTMsIEtTWjk4OTNfTkFNRSk7XG4gXG4mIzQzOyNkZWZpbmUgS1NaODQ2M19UQUlMX1RBR19QUklPXHRcdEdFTk1BU0soNCwgMylcbiYjNDM7I2RlZmluZSBLU1o4NDYzX1RBSUxfVEFHX0VHX1BPUlRfTVx0R0VOTUFTSygyLCAwKVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBza19idWZmICprc3o4NDYzX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdHUxNiBxdWV1ZV9tYXBwaW5nID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7XG4mIzQzO1x0dTggcHJpbyA9IG5ldGRldl90eHFfdG9fdGMoZGV2LCBxdWV1ZV9tYXBwaW5nKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGtzel9jb21tb25feG1pdChza2IsIGRldiwgZmFsc2UsXG4mIzQzO1x0XHRcdCAgICAgICBGSUVMRF9QUkVQKEtTWjg0NjNfVEFJTF9UQUdfUFJJTywgcHJpbyksXG4mIzQzO1x0XHRcdCAgICAgICAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBza19idWZmICprc3o4NDYzX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IGxlbiA9IEtTWl9FR1JFU1NfVEFHX0xFTjtcbiYjNDM7XHRzdHJ1Y3QgcHRwX2hlYWRlciAqcHRwX2hkcjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcHRwX2NsYXNzO1xuJiM0MztcdHVuc2lnbmVkIGludCBwb3J0O1xuJiM0MztcdGt0aW1lX3QgdHM7XG4mIzQzO1x0dTggKnRhZztcbiYjNDM7XG4mIzQzO1x0aWYgKHNrYl9saW5lYXJpemUoc2tiKSkge1xuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdEtTWl9TS0JfQ0Ioc2tiKS1cdTAwM2V0c3RhbXAgPSAwO1xuJiM0MztcbiYjNDM7XHQvKiBUYWcgZGVjb2RpbmcgKi9cbiYjNDM7XHR0YWcgPSBza2JfdGFpbF9wb2ludGVyKHNrYikgLSBLU1pfRUdSRVNTX1RBR19MRU47XG4mIzQzO1x0cG9ydCA9IHRhZ1swXSBcdTAwMjYgS1NaODQ2M19UQUlMX1RBR19FR19QT1JUX007XG4mIzQzO1xuJiM0MztcdF9fc2tiX3B1c2goc2tiLCBFVEhfSExFTik7XG4mIzQzO1x0cHRwX2NsYXNzID0gcHRwX2NsYXNzaWZ5X3Jhdyhza2IpO1xuJiM0MztcdF9fc2tiX3B1bGwoc2tiLCBFVEhfSExFTik7XG4mIzQzO1x0aWYgKHB0cF9jbGFzcyA9PSBQVFBfQ0xBU1NfTk9ORSlcbiYjNDM7XHRcdGdvdG8gY29tbW9uX3JjdjtcbiYjNDM7XG4mIzQzO1x0cHRwX2hkciA9IHB0cF9wYXJzZV9oZWFkZXIoc2tiLCBwdHBfY2xhc3MpO1xuJiM0MztcdGlmIChwdHBfaGRyKSB7XG4mIzQzO1x0XHR0cyA9IGtzel9kZWNvZGVfdHN0YW1wKGdldF91bmFsaWduZWRfYmUzMihcdTAwMjZwdHBfaGRyLVx1MDAzZXJlc2VydmVkMikpO1xuJiM0MztcdFx0S1NaX1NLQl9DQihza2IpLVx1MDAzZXRzdGFtcCA9IHRzO1xuJiM0MztcdFx0cHRwX2hkci1cdTAwM2VyZXNlcnZlZDIgPSAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO2NvbW1vbl9yY3Y6XG4mIzQzO1x0cmV0dXJuIGtzel9jb21tb25fcmN2KHNrYiwgZGV2LCBwb3J0LCBsZW4pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIGtzejg0NjNfbmV0ZGV2X29wcyA9IHtcbiYjNDM7XHQubmFtZVx0PSBLU1o4NDYzX05BTUUsXG4mIzQzO1x0LnByb3RvXHQ9IERTQV9UQUdfUFJPVE9fS1NaODQ2MyxcbiYjNDM7XHQueG1pdFx0PSBrc3o4NDYzX3htaXQsXG4mIzQzO1x0LnJjdlx0PSBrc3o4NDYzX3JjdixcbiYjNDM7XHQuY29ubmVjdCA9IGtzel9jb25uZWN0LFxuJiM0MztcdC5kaXNjb25uZWN0ID0ga3N6X2Rpc2Nvbm5lY3QsXG4mIzQzO1x0Lm5lZWRlZF90YWlscm9vbSA9IEtTWl9JTkdSRVNTX1RBR19MRU4sXG4mIzQzO307XG4mIzQzO1xuJiM0MztEU0FfVEFHX0RSSVZFUihrc3o4NDYzX25ldGRldl9vcHMpO1xuJiM0MztNT0RVTEVfQUxJQVNfRFNBX1RBR19EUklWRVIoRFNBX1RBR19QUk9UT19LU1o4NDYzLCBLU1o4NDYzX05BTUUpO1xuJiM0MztcbiAvKiBGb3IgeG1pdCwgMi82IGJ5dGVzIGFyZSBhZGRlZCBiZWZvcmUgRkNTLlxuICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAqIERBKDZieXRlcyl8U0EoNmJ5dGVzKXwuLi4ufERhdGEobmJ5dGVzKXx0cyg0Ynl0ZXMpfHRhZzAoMWJ5dGUpfHRhZzEoMWJ5dGUpfFxuQEAgLTQ3MSw2ICYjNDM7NTMzLDcgQEAgRFNBX1RBR19EUklWRVIobGFuOTM3eF9uZXRkZXZfb3BzKTtcbiBNT0RVTEVfQUxJQVNfRFNBX1RBR19EUklWRVIoRFNBX1RBR19QUk9UT19MQU45MzdYLCBMQU45MzdYX05BTUUpO1xuIFxuIHN0YXRpYyBzdHJ1Y3QgZHNhX3RhZ19kcml2ZXIgKmRzYV90YWdfZHJpdmVyX2FycmF5W10gPSB7XG4mIzQzO1x0XHUwMDI2RFNBX1RBR19EUklWRVJfTkFNRShrc3o4NDYzX25ldGRldl9vcHMpLFxuIFx0XHUwMDI2RFNBX1RBR19EUklWRVJfTkFNRShrc3o4Nzk1X25ldGRldl9vcHMpLFxuIFx0XHUwMDI2RFNBX1RBR19EUklWRVJfTkFNRShrc3o5NDc3X25ldGRldl9vcHMpLFxuIFx0XHUwMDI2RFNBX1RBR19EUklWRVJfTkFNRShrc3o5ODkzX25ldGRldl9vcHMpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIzOjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNaWNyb2NoaXAgS1NaODQ2MyBEU0Egc3dpdGNoLCBpbmNsdWRpbmcgSVJRLCBQVFAsIGFuZCBhIG5ldyBEU0EgdGFnIHByb3RvY29sLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGZvciBhbiBTUEkvTURJTy1jb25uZWN0ZWQgc3dpdGNoIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFdpdGhvdXQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlLCB0aGUgZHJpdmVyIGNhbm5vdCBwcm9iZSwgYW5kIHRoZSBhZGRlZCBjb2RlIChpbmNsdWRpbmcgdGhlIERTQSB0YWdnZXIpIGlzIHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAzZmFlYjNhMGYwYWI0MjlkNjRjYmUzOTRjZmU5YWZkMGRiMzY4ZjMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyNyAyMzowNTozMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMKaW5kZXggYzRjNzY5MDI4YTIwYzkuLjk0MWFlOWY2NmY3MGJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYwpAQCAtMzYsNiAmIzQzOzM2LDEzIEBACiAjaW5jbHVkZSAmIzM0O2tzejhfcmVnLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrc3o4LmgmIzM0OwogCiYjNDM7LyoKJiM0MzsgKiBXZSB1c2Ugb25seSB0aGUgaGlnaC1ieXRlIChzbyBvZGQgYWRkcmVzc2VzKSBvZiB0aGUgMTYtYml0cyByZWdpc3RlcnMgdG8gZml0CiYjNDM7ICogaW4gdGhlIGNvbW1vbiBJUlEgZnJhbWV3b3JrCiYjNDM7ICovCiYjNDM7I2RlZmluZSBLU1o4NDYzX1JFR19JU1IJCQkweDE5MQomIzQzOyNkZWZpbmUgS1NaODQ2M19SRUdfSUVSCQkJMHgxOTMKJiM0MzsKIC8qIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzIC0gRHJpdmUgc3RyZW5ndGggbWFwcGluZyBmb3IgS1NaODg2MywgS1NaODg3MywgLi4KICAqCQkJICAgICB2YXJpYW50cy4KICAqIFRoaXMgdmFsdWVzIGFyZSBkb2N1bWVudGVkIGluIEtTWjg4NzMgYW5kIEtTWjg4NjMgZGF0YXNoZWV0cy4KQEAgLTE4MSw2ICYjNDM7MTg4LDY5IEBAIHN0YXRpYyBpbnQga3N6OF9wbWVfcHdyaXRlOChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgaW50IG9mZnNldCwgdTggZGF0CiAJcmV0dXJuIGtzejhfaW5kX3dyaXRlOChkZXYsIHRhYmxlLCAodTgpKG9mZnNldCksIGRhdGEpOwogfQogCiYjNDM7c3RhdGljIHZvaWQga3N6ODQ2M19pcnFfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3N6X2lycSAqa2lycSA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwomIzQzOwomIzQzOwlraXJxLSZndDttYXNrZWQgJmFtcDs9IH5CSVQoZC0mZ3Q7aHdpcnEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBrc3o4NDYzX2lycV91bm1hc2soc3RydWN0IGlycV9kYXRhICpkKQomIzQzO3sKJiM0MzsJc3RydWN0IGtzel9pcnEgKmtpcnEgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKJiM0MzsKJiM0MzsJa2lycS0mZ3Q7bWFza2VkIHw9IEJJVChkLSZndDtod2lycSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXJxX2NoaXAga3N6ODQ2M19pcnFfY2hpcCA9IHsKJiM0MzsJLm5hbWUJCQk9ICYjMzQ7a3N6ODQ2My1pcnEmIzM0OywKJiM0MzsJLmlycV9tYXNrCQk9IGtzejg0NjNfaXJxX21hc2ssCiYjNDM7CS5pcnFfdW5tYXNrCQk9IGtzejg0NjNfaXJxX3VubWFzaywKJiM0MzsJLmlycV9idXNfbG9jawkJPSBrc3pfaXJxX2J1c19sb2NrLAomIzQzOwkuaXJxX2J1c19zeW5jX3VubG9jawk9IGtzel9pcnFfYnVzX3N5bmNfdW5sb2NrLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBrc3o4NDYzX2lycV9kb21haW5fbWFwKHN0cnVjdCBpcnFfZG9tYWluICpkLAomIzQzOwkJCQkgIHVuc2lnbmVkIGludCBpcnEsIGlycV9od19udW1iZXJfdCBod2lycSkKJiM0Mzt7CiYjNDM7CWlycV9zZXRfY2hpcF9kYXRhKGlycSwgZC0mZ3Q7aG9zdF9kYXRhKTsKJiM0MzsJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKGlycSwgJmFtcDtrc3o4NDYzX2lycV9jaGlwLCBoYW5kbGVfbGV2ZWxfaXJxKTsKJiM0MzsJaXJxX3NldF9ub3Byb2JlKGlycSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGlycV9kb21haW5fb3BzIGtzejg0NjNfaXJxX2RvbWFpbl9vcHMgPSB7CiYjNDM7CS5tYXAJPSBrc3o4NDYzX2lycV9kb21haW5fbWFwLAomIzQzOwkueGxhdGUJPSBpcnFfZG9tYWluX3hsYXRlX3R3b2NlbGwsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IGtzejg0NjNfZ2lycV9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGtzel9pcnEgKmdpcnEgPSAmYW1wO2Rldi0mZ3Q7Z2lycTsKJiM0MzsKJiM0MzsJZ2lycS0mZ3Q7bmlycXMgPSA4OwomIzQzOwlnaXJxLSZndDtyZWdfbWFzayA9IEtTWjg0NjNfUkVHX0lFUjsKJiM0MzsJZ2lycS0mZ3Q7cmVnX3N0YXR1cyA9IEtTWjg0NjNfUkVHX0lTUjsKJiM0MzsJZ2lycS0mZ3Q7bWFza2VkID0gMDsKJiM0MzsJc25wcmludGYoZ2lycS0mZ3Q7bmFtZSwgc2l6ZW9mKGdpcnEtJmd0O25hbWUpLCAmIzM0O2tzejg0NjMtZ2lycSYjMzQ7KTsKJiM0MzsKJiM0MzsJZ2lycS0mZ3Q7aXJxX251bSA9IGRldi0mZ3Q7aXJxOwomIzQzOwomIzQzOwlyZXR1cm4ga3N6X2lycV9jb21tb25fc2V0dXAoZGV2LCBnaXJxLCAmYW1wO2tzejg0NjNfaXJxX2RvbWFpbl9vcHMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGtzejg0NjNfcmVzZXRfc3dpdGNoKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwlrc3pfY2ZnKGRldiwgS1NaODQ2M19SRUdfU1dfUkVTRVQsCiYjNDM7CQlLU1o4NDYzX0dMT0JBTF9TT0ZUV0FSRV9SRVNFVCB8IEtTWjg0NjNfUFRQX1NPRlRXQVJFX1JFU0VULAomIzQzOwkJdHJ1ZSk7CiYjNDM7CWtzel9jZmcoZGV2LCBLU1o4NDYzX1JFR19TV19SRVNFVCwKJiM0MzsJCUtTWjg0NjNfR0xPQkFMX1NPRlRXQVJFX1JFU0VUIHwgS1NaODQ2M19QVFBfU09GVFdBUkVfUkVTRVQsCiYjNDM7CQlmYWxzZSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQga3N6OF9yZXNldF9zd2l0Y2goc3RydWN0IGtzel9kZXZpY2UgKmRldikKIHsKIAlpZiAoa3N6X2lzX2tzejg4eDMoZGV2KSkgewpAQCAtMTg5LDExICYjNDM7MjU5LDYgQEAgc3RhdGljIGludCBrc3o4X3Jlc2V0X3N3aXRjaChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KQogCQkJS1NaODg2M19HTE9CQUxfU09GVFdBUkVfUkVTRVQgfCBLU1o4ODYzX1BDU19SRVNFVCwgdHJ1ZSk7CiAJCWtzel9jZmcoZGV2LCBLU1o4ODYzX1JFR19TV19SRVNFVCwKIAkJCUtTWjg4NjNfR0xPQkFMX1NPRlRXQVJFX1JFU0VUIHwgS1NaODg2M19QQ1NfUkVTRVQsIGZhbHNlKTsKLQl9IGVsc2UgaWYgKGtzel9pc19rc3o4NDYzKGRldikpIHsKLQkJa3N6X2NmZyhkZXYsIEtTWjg0NjNfUkVHX1NXX1JFU0VULAotCQkJS1NaODQ2M19HTE9CQUxfU09GVFdBUkVfUkVTRVQsIHRydWUpOwotCQlrc3pfY2ZnKGRldiwgS1NaODQ2M19SRUdfU1dfUkVTRVQsCi0JCQlLU1o4NDYzX0dMT0JBTF9TT0ZUV0FSRV9SRVNFVCwgZmFsc2UpOwogCX0gZWxzZSB7CiAJCS8qIHJlc2V0IHN3aXRjaCAqLwogCQlrc3pfd3JpdGU4KGRldiwgUkVHX1BPV0VSX01BTkFHRU1FTlRfMSwKQEAgLTIwMjYsNiAmIzQzOzIwOTEsNTAgQEAgc3RhdGljIHZvaWQga3N6ODh4M19jb25maWdfcm1paV9jbGsoc3RydWN0IGtzel9kZXZpY2UgKmRldikKIAkJS1NaODhYM19QT1JUM19STUlJX0NMS19JTlRFUk5BTCwgcm1paV9jbGtfaW50ZXJuYWwpOwogfQogCiYjNDM7c3RhdGljIHZvaWQga3N6ODQ2M19jb25maWdfY3B1X3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQomIzQzO3sKJiM0MzsJc3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLSZndDtwcml2OwomIzQzOwlzdHJ1Y3Qga3N6X3BvcnQgKnA7CiYjNDM7CXU4IGZpYmVyX3BvcnRzID0gMDsKJiM0MzsJY29uc3QgdTMyICptYXNrczsKJiM0MzsJY29uc3QgdTE2ICpyZWdzOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJbWFza3MgPSBkZXYtJmd0O2luZm8tJmd0O21hc2tzOwomIzQzOwlyZWdzID0gZGV2LSZndDtpbmZvLSZndDtyZWdzOwomIzQzOwomIzQzOwlrc3pfY2ZnKGRldiwgcmVnc1tTX1RBSUxfVEFHX0NUUkxdLCBtYXNrc1tTV19UQUlMX1RBR19FTkFCTEVdLCB0cnVlKTsKJiM0MzsKJiM0MzsJa3N6OF9wb3J0X3NldHVwKGRldiwgZGV2LSZndDtjcHVfcG9ydCwgdHJ1ZSk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBkZXYtJmd0O3BoeV9wb3J0X2NudDsgaSYjNDM7JiM0MzspCiYjNDM7CQlrc3pfcG9ydF9zdHBfc3RhdGVfc2V0KGRzLCBpLCBCUl9TVEFURV9ESVNBQkxFRCk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBkZXYtJmd0O3BoeV9wb3J0X2NudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXAgPSAmYW1wO2Rldi0mZ3Q7cG9ydHNbaV07CiYjNDM7CQlrc3pfcG9ydF9jZmcoZGV2LCBpLCByZWdzW1BfU1RQX0NUUkxdLCBQT1JUX0ZPUkNFX0ZMT1dfQ1RSTCwKJiM0MzsJCQkgICAgIHAtJmd0O2ZpYmVyKTsKJiM0MzsJCWlmIChwLSZndDtmaWJlcikKJiM0MzsJCQlmaWJlcl9wb3J0cyB8PSAoMSAmbHQ7Jmx0OyBpKTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTZXR1cCBmaWJlciBwb3J0cy4gKi8KJiM0MzsJaWYgKGZpYmVyX3BvcnRzKSB7CiYjNDM7CQlmaWJlcl9wb3J0cyAmYW1wOz0gMzsKJiM0MzsJCXJlZ21hcF91cGRhdGVfYml0cyhrc3pfcmVnbWFwXzE2KGRldiksIEtTWjg0NjNfUkVHX0NGR19DVFJMLAomIzQzOwkJCQkgICBmaWJlcl9wb3J0cyAmbHQ7Jmx0OyBQT1JUX0NPUFBFUl9NT0RFX1MsCiYjNDM7CQkJCSAgIDApOwomIzQzOwkJcmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSwgS1NaODQ2M19SRUdfRFNQX0NUUkxfNiwKJiM0MzsJCQkJICAgQ09QUEVSX1JFQ0VJVkVfQURKVVNUTUVOVCwgMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogVHVybiBvZmYgUFRQIGZ1bmN0aW9uIGFzIHRoZSBzd2l0Y2ggZW5hYmxlcyBpdCBieSBkZWZhdWx0ICovCiYjNDM7CXJlZ21hcF91cGRhdGVfYml0cyhrc3pfcmVnbWFwXzE2KGRldiksIEtTWjg0NjNfUFRQX01TR19DT05GMSwKJiM0MzsJCQkgICBQVFBfRU5BQkxFLCAwKTsKJiM0MzsJcmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSwgS1NaODQ2M19QVFBfQ0xLX0NUUkwsCiYjNDM7CQkJICAgUFRQX0NMS19FTkFCTEUsIDApOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGtzejhfY29uZmlnX2NwdV9wb3J0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIHsKIAlzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtJmd0O3ByaXY7CkBAIC0yMDMzLDcgJiM0MzsyMTQyLDYgQEAgc3RhdGljIHZvaWQga3N6OF9jb25maWdfY3B1X3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogCWNvbnN0IHUzMiAqbWFza3M7CiAJY29uc3QgdTE2ICpyZWdzOwogCXU4IHJlbW90ZTsKLQl1OCBmaWJlcl9wb3J0cyA9IDA7CiAJaW50IGk7CiAKIAltYXNrcyA9IGRldi0mZ3Q7aW5mby0mZ3Q7bWFza3M7CkBAIC0yMDY0LDMyICYjNDM7MjE3Miw2IEBAIHN0YXRpYyB2b2lkIGtzejhfY29uZmlnX2NwdV9wb3J0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIAkJZWxzZQogCQkJa3N6X3BvcnRfY2ZnKGRldiwgaSwgcmVnc1tQX1NUUF9DVFJMXSwKIAkJCQkgICAgIFBPUlRfRk9SQ0VfRkxPV19DVFJMLCBmYWxzZSk7Ci0JCWlmIChwLSZndDtmaWJlcikKLQkJCWZpYmVyX3BvcnRzIHw9ICgxICZsdDsmbHQ7IGkpOwotCX0KLQlpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSkgewotCQkvKiBTZXR1cCBmaWJlciBwb3J0cy4gKi8KLQkJaWYgKGZpYmVyX3BvcnRzKSB7Ci0JCQlmaWJlcl9wb3J0cyAmYW1wOz0gMzsKLQkJCXJlZ21hcF91cGRhdGVfYml0cyhrc3pfcmVnbWFwXzE2KGRldiksCi0JCQkJCSAgIEtTWjg0NjNfUkVHX0NGR19DVFJMLAotCQkJCQkgICBmaWJlcl9wb3J0cyAmbHQ7Jmx0OyBQT1JUX0NPUFBFUl9NT0RFX1MsCi0JCQkJCSAgIDApOwotCQkJcmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSwKLQkJCQkJICAgS1NaODQ2M19SRUdfRFNQX0NUUkxfNiwKLQkJCQkJICAgQ09QUEVSX1JFQ0VJVkVfQURKVVNUTUVOVCwgMCk7Ci0JCX0KLQotCQkvKiBUdXJuIG9mZiBQVFAgZnVuY3Rpb24gYXMgdGhlIHN3aXRjaCYjMzk7cyBwcm9wcmlldGFyeSB3YXkgb2YKLQkJICogaGFuZGxpbmcgdGltZXN0YW1wIGlzIG5vdCBzdXBwb3J0ZWQgaW4gY3VycmVudCBMaW51eCBQVFAKLQkJICogc3RhY2sgaW1wbGVtZW50YXRpb24uCi0JCSAqLwotCQlyZWdtYXBfdXBkYXRlX2JpdHMoa3N6X3JlZ21hcF8xNihkZXYpLAotCQkJCSAgIEtTWjg0NjNfUFRQX01TR19DT05GMSwKLQkJCQkgICBQVFBfRU5BQkxFLCAwKTsKLQkJcmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSwKLQkJCQkgICBLU1o4NDYzX1BUUF9DTEtfQ1RSTCwKLQkJCQkgICBQVFBfQ0xLX0VOQUJMRSwgMCk7CiAJfQogfQogCkBAIC0yMzAwLDYgJiM0MzsyMzgyLDE1MCBAQCBzdGF0aWMgdm9pZCBrc3o4OHh4X3JfbWliX3N0YXRzNjQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpCiAJc3Bpbl91bmxvY2soJmFtcDttaWItJmd0O3N0YXRzNjRfbG9jayk7CiB9CiAKJiM0MztzdGF0aWMgaW50IGtzejg0NjNfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQomIzQzO3sKJiM0MzsJc3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLSZndDtwcml2OwomIzQzOwl1MTYgc3Rvcm1fbWFzaywgc3Rvcm1fcmF0ZTsKJiM0MzsJc3RydWN0IGtzel9wb3J0ICpwOwomIzQzOwljb25zdCB1MTYgKnJlZ3M7CiYjNDM7CWludCBpLCByZXQ7CiYjNDM7CiYjNDM7CXJlZ3MgPSBkZXYtJmd0O2luZm8tJmd0O3JlZ3M7CiYjNDM7CiYjNDM7CWRldi0mZ3Q7dmxhbl9jYWNoZSA9IGRldm1fa2NhbGxvYyhkZXYtJmd0O2Rldiwgc2l6ZW9mKHN0cnVjdCB2bGFuX3RhYmxlKSwKJiM0MzsJCQkJICAgICAgIGRldi0mZ3Q7aW5mby0mZ3Q7bnVtX3ZsYW5zLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFkZXYtJmd0O3ZsYW5fY2FjaGUpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcmV0ID0ga3N6ODQ2M19yZXNldF9zd2l0Y2goZGV2KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2Vycihkcy0mZ3Q7ZGV2LCAmIzM0O2ZhaWxlZCB0byByZXNldCBzd2l0Y2hcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogc2V0IGJyb2FkY2FzdCBzdG9ybSBwcm90ZWN0aW9uIDEwJSByYXRlICovCiYjNDM7CXN0b3JtX21hc2sgPSBCUk9BRENBU1RfU1RPUk1fUkFURTsKJiM0MzsJc3Rvcm1fcmF0ZSA9IChCUk9BRENBU1RfU1RPUk1fVkFMVUUgKiBCUk9BRENBU1RfU1RPUk1fUFJPVF9SQVRFKSAvIDEwMDsKJiM0MzsJc3Rvcm1fbWFzayA9IHN3YWIxNihzdG9ybV9tYXNrKTsKJiM0MzsJc3Rvcm1fcmF0ZSA9IHN3YWIxNihzdG9ybV9yYXRlKTsKJiM0MzsJcmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSwgcmVnc1tTX0JST0FEQ0FTVF9DVFJMXSwKJiM0MzsJCQkgICBzdG9ybV9tYXNrLCBzdG9ybV9yYXRlKTsKJiM0MzsKJiM0MzsJa3N6ODQ2M19jb25maWdfY3B1X3BvcnQoZHMpOwomIzQzOwomIzQzOwlrc3o4X2VuYWJsZV9zdHBfYWRkcihkZXYpOwomIzQzOwomIzQzOwlkcy0mZ3Q7bnVtX3R4X3F1ZXVlcyA9IGRldi0mZ3Q7aW5mby0mZ3Q7bnVtX3R4X3F1ZXVlczsKJiM0MzsKJiM0MzsJcmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfOChkZXYpLCByZWdzW1NfTVVMVElDQVNUX0NUUkxdLAomIzQzOwkJCSAgIE1VTFRJQ0FTVF9TVE9STV9ESVNBQkxFLCBNVUxUSUNBU1RfU1RPUk1fRElTQUJMRSk7CiYjNDM7CiYjNDM7CWtzel9pbml0X21pYl90aW1lcihkZXYpOwomIzQzOwomIzQzOwlkcy0mZ3Q7Y29uZmlndXJlX3ZsYW5fd2hpbGVfbm90X2ZpbHRlcmluZyA9IGZhbHNlOwomIzQzOwlkcy0mZ3Q7ZHNjcF9wcmlvX21hcHBpbmdfaXNfZ2xvYmFsID0gdHJ1ZTsKJiM0MzsJZHMtJmd0O210dV9lbmZvcmNlbWVudF9pbmdyZXNzID0gdHJ1ZTsKJiM0MzsKJiM0MzsJLyogV2UgcmVseSBvbiBzb2Z0d2FyZSB1bnRhZ2dpbmcgb24gdGhlIENQVSBwb3J0LCBzbyB0aGF0IHdlCiYjNDM7CSAqIGNhbiBzdXBwb3J0IGJvdGggdGFnZ2VkIGFuZCB1bnRhZ2dlZCBWTEFOcwomIzQzOwkgKi8KJiM0MzsJZHMtJmd0O3VudGFnX2JyaWRnZV9wdmlkID0gdHJ1ZTsKJiM0MzsKJiM0MzsJLyogVkxBTiBmaWx0ZXJpbmcgaXMgcGFydGx5IGNvbnRyb2xsZWQgYnkgdGhlIGdsb2JhbCBWTEFOCiYjNDM7CSAqIEVuYWJsZSBmbGFnCiYjNDM7CSAqLwomIzQzOwlkcy0mZ3Q7dmxhbl9maWx0ZXJpbmdfaXNfZ2xvYmFsID0gdHJ1ZTsKJiM0MzsKJiM0MzsJLyogRW5hYmxlIGF1dG9tYXRpYyBmYXN0IGFnaW5nIHdoZW4gbGluayBjaGFuZ2VkIGRldGVjdGVkLiAqLwomIzQzOwlrc3pfY2ZnKGRldiwgU19MSU5LX0FHSU5HX0NUUkwsIFNXX0xJTktfQVVUT19BR0lORywgdHJ1ZSk7CiYjNDM7CiYjNDM7CS8qIEVuYWJsZSBhZ2dyZXNzaXZlIGJhY2sgb2ZmIGFsZ29yaXRobSBpbiBoYWxmIGR1cGxleCBtb2RlLiAqLwomIzQzOwlyZXQgPSBrc3pfcm13OChkZXYsIFJFR19TV19DVFJMXzEsIFNXX0FHR1JfQkFDS09GRiwgU1dfQUdHUl9CQUNLT0ZGKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE1ha2Ugc3VyZSB1bmljYXN0IFZMQU4gYm91bmRhcnkgaXMgc2V0IGFzIGRlZmF1bHQgYW5kCiYjNDM7CSAqIGVuYWJsZSBubyBleGNlc3NpdmUgY29sbGlzaW9uIGRyb3AuCiYjNDM7CSAqLwomIzQzOwlyZXQgPSBrc3pfcm13OChkZXYsIFJFR19TV19DVFJMXzIsCiYjNDM7CQkgICAgICAgVU5JQ0FTVF9WTEFOX0JPVU5EQVJZIHwgTk9fRVhDX0NPTExJU0lPTl9EUk9QLAomIzQzOwkJICAgICAgIFVOSUNBU1RfVkxBTl9CT1VOREFSWSB8IE5PX0VYQ19DT0xMSVNJT05fRFJPUCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlrc3pfY2ZnKGRldiwgU19SRVBMQUNFX1ZJRF9DVFJMLCBTV19SRVBMQUNFX1ZJRCwgZmFsc2UpOwomIzQzOwomIzQzOwlrc3pfY2ZnKGRldiwgU19NSVJST1JfQ1RSTCwgU1dfTUlSUk9SX1JYX1RYLCBmYWxzZSk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyAoZGV2LSZndDtpbmZvLSZndDtudW1fdmxhbnMgLyA0KTsgaSYjNDM7JiM0MzspCiYjNDM7CQlrc3o4X3Jfdmxhbl9lbnRyaWVzKGRldiwgaSk7CiYjNDM7CiYjNDM7CS8qIFN0YXJ0IHdpdGggbGVhcm5pbmcgZGlzYWJsZWQgb24gc3RhbmRhbG9uZSB1c2VyIHBvcnRzLCBhbmQgZW5hYmxlZAomIzQzOwkgKiBvbiB0aGUgQ1BVIHBvcnQuIEluIGxhY2sgb2Ygb3RoZXIgZmluZXIgbWVjaGFuaXNtcywgbGVhcm5pbmcgb24gdGhlCiYjNDM7CSAqIENQVSBwb3J0IHdpbGwgYXZvaWQgZmxvb2RpbmcgYnJpZGdlIGxvY2FsIGFkZHJlc3NlcyBvbiB0aGUgbmV0d29yawomIzQzOwkgKiBpbiBzb21lIGNhc2VzLgomIzQzOwkgKi8KJiM0MzsJcCA9ICZhbXA7ZGV2LSZndDtwb3J0c1tkZXYtJmd0O2NwdV9wb3J0XTsKJiM0MzsJcC0mZ3Q7bGVhcm5pbmcgPSB0cnVlOwomIzQzOwomIzQzOwlpZiAoZGV2LSZndDtpcnEgJmd0OyAwKSB7CiYjNDM7CQlyZXQgPSBrc3o4NDYzX2dpcnFfc2V0dXAoZGV2KTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCXJldCA9IGtzejg0NjNfcHRwX2lycV9zZXR1cChkcyk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gZnJlZV9naXJxOwomIzQzOwomIzQzOwkJcmV0ID0ga3N6X3B0cF9jbG9ja19yZWdpc3Rlcihkcyk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJZGV2X2VycihkZXYtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrOiAlZFxuJiMzNDssCiYjNDM7CQkJCXJldCk7CiYjNDM7CQkJZ290byBmcmVlX3B0cF9pcnE7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0ga3N6X21kaW9fcmVnaXN0ZXIoZGV2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApIHsKJiM0MzsJCWRldl9lcnIoZGV2LSZndDtkZXYsICYjMzQ7ZmFpbGVkIHRvIHJlZ2lzdGVyIHRoZSBtZGlvJiMzNDspOwomIzQzOwkJZ290byBwdHBfY2xvY2tfdW5yZWdpc3RlcjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBrc3pfZGNiX2luaXQoZGV2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gcHRwX2Nsb2NrX3VucmVnaXN0ZXI7CiYjNDM7CiYjNDM7CS8qIHN0YXJ0IHN3aXRjaCAqLwomIzQzOwlyZWdtYXBfdXBkYXRlX2JpdHMoa3N6X3JlZ21hcF84KGRldiksIHJlZ3NbU19TVEFSVF9DVFJMXSwKJiM0MzsJCQkgICBTV19TVEFSVCwgU1dfU1RBUlQpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztwdHBfY2xvY2tfdW5yZWdpc3RlcjoKJiM0MzsJaWYgKGRldi0mZ3Q7aXJxICZndDsgMCkKJiM0MzsJCWtzel9wdHBfY2xvY2tfdW5yZWdpc3Rlcihkcyk7CiYjNDM7ZnJlZV9wdHBfaXJxOgomIzQzOwlpZiAoZGV2LSZndDtpcnEgJmd0OyAwKQomIzQzOwkJa3N6ODQ2M19wdHBfaXJxX2ZyZWUoZHMpOwomIzQzO2ZyZWVfZ2lycToKJiM0MzsJaWYgKGRldi0mZ3Q7aXJxICZndDsgMCkKJiM0MzsJCWtzel9pcnFfZnJlZSgmYW1wO2Rldi0mZ3Q7Z2lycSk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGtzejg0NjNfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQomIzQzO3sKJiM0MzsJc3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLSZndDtwcml2OwomIzQzOwomIzQzOwlpZiAoZGV2LSZndDtpcnEgJmd0OyAwKSB7CiYjNDM7CQlrc3pfcHRwX2Nsb2NrX3VucmVnaXN0ZXIoZHMpOwomIzQzOwkJa3N6ODQ2M19wdHBfaXJxX2ZyZWUoZHMpOwomIzQzOwkJa3N6X2lycV9mcmVlKCZhbXA7ZGV2LSZndDtnaXJxKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIC8qKgogICoga3N6ODh4M19kcml2ZV9zdHJlbmd0aF93cml0ZSgpIC0gU2V0IHRoZSBkcml2ZSBzdHJlbmd0aCBjb25maWd1cmF0aW9uIGZvcgogICoJCQkJICAgIEtTWjg4NjMgY29tcGF0aWJsZSBjaGlwIHZhcmlhbnRzLgpAQCAtMjQ0NSwxMCAmIzQzOzI2NzEsNiBAQCBzdGF0aWMgaW50IGtzejhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogCS8qIHNldCBicm9hZGNhc3Qgc3Rvcm0gcHJvdGVjdGlvbiAxMCUgcmF0ZSAqLwogCXN0b3JtX21hc2sgPSBCUk9BRENBU1RfU1RPUk1fUkFURTsKIAlzdG9ybV9yYXRlID0gKEJST0FEQ0FTVF9TVE9STV9WQUxVRSAqIEJST0FEQ0FTVF9TVE9STV9QUk9UX1JBVEUpIC8gMTAwOwotCWlmIChrc3pfaXNfa3N6ODQ2MyhkZXYpKSB7Ci0JCXN0b3JtX21hc2sgPSBzd2FiMTYoc3Rvcm1fbWFzayk7Ci0JCXN0b3JtX3JhdGUgPSBzd2FiMTYoc3Rvcm1fcmF0ZSk7Ci0JfQogCXJlZ21hcF91cGRhdGVfYml0cyhrc3pfcmVnbWFwXzE2KGRldiksIHJlZ3NbU19CUk9BRENBU1RfQ1RSTF0sCiAJCQkgICBzdG9ybV9tYXNrLCBzdG9ybV9yYXRlKTsKIApAQCAtMjQ5OSw3ICYjNDM7MjcyMSw3IEBAIHN0YXRpYyBpbnQga3N6OF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiAKIAlrc3pfY2ZnKGRldiwgU19NSVJST1JfQ1RSTCwgU1dfTUlSUk9SX1JYX1RYLCBmYWxzZSk7CiAKLQlpZiAoIWtzel9pc19rc3o4OHgzKGRldikgJmFtcDsmYW1wOyAha3N6X2lzX2tzejg0NjMoZGV2KSkKJiM0MzsJaWYgKCFrc3pfaXNfa3N6ODh4MyhkZXYpKQogCQlrc3pfY2ZnKGRldiwgUkVHX1NXX0NUUkxfMTksIFNXX0lOU19UQUdfRU5BQkxFLCB0cnVlKTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyAoZGV2LSZndDtpbmZvLSZndDtudW1fdmxhbnMgLyA0KTsgaSYjNDM7JiM0MzspCkBAIC0yNjIzLDYgJiM0MzsyODQ1LDkgQEAgc3RhdGljIHUzMiBrc3o4X2dldF9wb3J0X2FkZHIoaW50IHBvcnQsIGludCBvZmZzZXQpCiAKIHN0YXRpYyB1MzIga3N6ODQ2M19nZXRfcG9ydF9hZGRyKGludCBwb3J0LCBpbnQgb2Zmc2V0KQogewomIzQzOwlpZiAob2Zmc2V0ICZndDs9IEtTWjg0NjNfUFRQX0NMS19DVFJMKQomIzQzOwkJcmV0dXJuIG9mZnNldCAmIzQzOyAweDIwICogcG9ydDsKJiM0MzsKIAlyZXR1cm4gb2Zmc2V0ICYjNDM7IDB4MTggKiBwb3J0OwogfQogCkBAIC0yNzU1LDcgJiM0MzsyOTgwLDcgQEAgc3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBrc3o4NDYzX2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLAogCQkJCQkJICAgICAgaW50IHBvcnQsCiAJCQkJCQkgICAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXApCiB7Ci0JcmV0dXJuIERTQV9UQUdfUFJPVE9fS1NaOTg5MzsKJiM0MzsJcmV0dXJuIERTQV9UQUdfUFJPVE9fS1NaODQ2MzsKIH0KIAogc3RhdGljIGludCBrc3o4NDYzX2Nvbm5lY3RfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywKQEAgLTI3NjMsNyAmIzQzOzI5ODgsNyBAQCBzdGF0aWMgaW50IGtzejg0NjNfY29ubmVjdF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLAogewogCXN0cnVjdCBrc3pfdGFnZ2VyX2RhdGEgKnRhZ2dlcl9kYXRhOwogCi0JaWYgKHByb3RvICE9IERTQV9UQUdfUFJPVE9fS1NaOTg5MykKJiM0MzsJaWYgKHByb3RvICE9IERTQV9UQUdfUFJPVE9fS1NaODQ2MykKIAkJcmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7CiAKIAl0YWdnZXJfZGF0YSA9IGtzel90YWdnZXJfZGF0YShkcyk7CkBAIC0yODg5LDggJiM0MzszMTE0LDggQEAgY29uc3Qgc3RydWN0IGtzel9kZXZfb3BzIGtzejg4eHhfZGV2X29wcyA9IHsKIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBrc3o4NDYzX3N3aXRjaF9vcHMgPSB7CiAJLmdldF90YWdfcHJvdG9jb2wJPSBrc3o4NDYzX2dldF90YWdfcHJvdG9jb2wsCiAJLmNvbm5lY3RfdGFnX3Byb3RvY29sICAgPSBrc3o4NDYzX2Nvbm5lY3RfdGFnX3Byb3RvY29sLAotCS5zZXR1cAkJCT0ga3N6OF9zZXR1cCwKLQkudGVhcmRvd24JCT0ga3N6X3RlYXJkb3duLAomIzQzOwkuc2V0dXAJCQk9IGtzejg0NjNfc2V0dXAsCiYjNDM7CS50ZWFyZG93bgkJPSBrc3o4NDYzX3RlYXJkb3duLAogCS5waHlfcmVhZAkJPSBrc3o4NDYzX3BoeV9yZWFkMTYsCiAJLnBoeV93cml0ZQkJPSBrc3o4NDYzX3BoeV93cml0ZTE2LAogCS5waHlsaW5rX2dldF9jYXBzCT0ga3N6OF9waHlsaW5rX2dldF9jYXBzLApAQCAtMjkxOCw5ICYjNDM7MzE0Myw5IEBAIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBrc3o4NDYzX3N3aXRjaF9vcHMgPSB7CiAJLnBvcnRfbWF4X210dQkJPSBrc3o4OHh4X21heF9tdHUsCiAJLnN1c3BlbmQJCT0ga3N6X3N1c3BlbmQsCiAJLnJlc3VtZQkJCT0ga3N6X3Jlc3VtZSwKLQkuZ2V0X3RzX2luZm8JCT0ga3N6X2dldF90c19pbmZvLAomIzQzOwkuZ2V0X3RzX2luZm8JCT0ga3N6ODQ2M19nZXRfdHNfaW5mbywKIAkucG9ydF9od3RzdGFtcF9nZXQJPSBrc3pfaHd0c3RhbXBfZ2V0LAotCS5wb3J0X2h3dHN0YW1wX3NldAk9IGtzel9od3RzdGFtcF9zZXQsCiYjNDM7CS5wb3J0X2h3dHN0YW1wX3NldAk9IGtzejg0NjNfaHd0c3RhbXBfc2V0LAogCS5wb3J0X3R4dHN0YW1wCQk9IGtzel9wb3J0X3R4dHN0YW1wLAogCS5wb3J0X3J4dHN0YW1wCQk9IGtzel9wb3J0X3J4dHN0YW1wLAogCS5wb3J0X3NldHVwX3RjCQk9IGtzejhfc2V0dXBfdGMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejhfcmVnLmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejhfcmVnLmgKaW5kZXggOTgxYWI0NDFkOWI3MTkuLjZiYzUxMWRhMWY3ZGRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejhfcmVnLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4X3JlZy5oCkBAIC03ODYsNiAmIzQzOzc4Niw3IEBACiAjZGVmaW5lIEtTWjg0NjNfUkVHX1NXX1JFU0VUCQkweDEyNgogCiAjZGVmaW5lIEtTWjg0NjNfR0xPQkFMX1NPRlRXQVJFX1JFU0VUCUJJVCgwKQomIzQzOyNkZWZpbmUgS1NaODQ2M19QVFBfU09GVFdBUkVfUkVTRVQJQklUKDIpCiAKICNkZWZpbmUgS1NaODQ2M19QVFBfQ0xLX0NUUkwJCTB4NjAwCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMKaW5kZXggNjdhYjZkZGI5ZTUzZjIuLmZmMWJlNTQwYjU0NmZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYwpAQCAtMjQxOSwxNCAmIzQzOzI0MTksMTQgQEAgc3RhdGljIHZvaWQga3N6X2lycV91bm1hc2soc3RydWN0IGlycV9kYXRhICpkKQogCWtpcnEtJmd0O21hc2tlZCAmYW1wOz0gfkJJVChkLSZndDtod2lycSk7CiB9CiAKLXN0YXRpYyB2b2lkIGtzel9pcnFfYnVzX2xvY2soc3RydWN0IGlycV9kYXRhICpkKQomIzQzO3ZvaWQga3N6X2lycV9idXNfbG9jayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJc3RydWN0IGtzel9pcnEgKmtpcnEgID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAKIAltdXRleF9sb2NrKCZhbXA7a2lycS0mZ3Q7ZGV2LSZndDtsb2NrX2lycSk7CiB9CiAKLXN0YXRpYyB2b2lkIGtzel9pcnFfYnVzX3N5bmNfdW5sb2NrKHN0cnVjdCBpcnFfZGF0YSAqZCkKJiM0Mzt2b2lkIGtzel9pcnFfYnVzX3N5bmNfdW5sb2NrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlzdHJ1Y3Qga3N6X2lycSAqa2lycSAgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKIAlzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0ga2lycS0mZ3Q7ZGV2OwpAQCAtMjUwNCwxNCAmIzQzOzI1MDQsMTUgQEAgc3RhdGljIGlycXJldHVybl90IGtzel9pcnFfdGhyZWFkX2ZuKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIAlyZXR1cm4gKG5oYW5kbGVkICZndDsgMCA/IElSUV9IQU5ETEVEIDogSVJRX05PTkUpOwogfQogCi1zdGF0aWMgaW50IGtzel9pcnFfY29tbW9uX3NldHVwKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHN0cnVjdCBrc3pfaXJxICpraXJxKQomIzQzO2ludCBrc3pfaXJxX2NvbW1vbl9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBzdHJ1Y3Qga3N6X2lycSAqa2lycSwKJiM0MzsJCQkgY29uc3Qgc3RydWN0IGlycV9kb21haW5fb3BzICpvcHMpCiB7CiAJaW50IHJldCwgbjsKIAogCWtpcnEtJmd0O2RldiA9IGRldjsKIAotCWtpcnEtJmd0O2RvbWFpbiA9IGlycV9kb21haW5fY3JlYXRlX3NpbXBsZShkZXZfZndub2RlKGRldi0mZ3Q7ZGV2KSwga2lycS0mZ3Q7bmlycXMsIDAsCi0JCQkJCQkmYW1wO2tzel9pcnFfZG9tYWluX29wcywga2lycSk7CiYjNDM7CWtpcnEtJmd0O2RvbWFpbiA9IGlycV9kb21haW5fY3JlYXRlX3NpbXBsZShkZXZfZndub2RlKGRldi0mZ3Q7ZGV2KSwKJiM0MzsJCQkJCQlraXJxLSZndDtuaXJxcywgMCwgb3BzLCBraXJxKTsKIAlpZiAoIWtpcnEtJmd0O2RvbWFpbikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTI1NDMsNyAmIzQzOzI1NDQsNyBAQCBpbnQga3N6X2dpcnFfc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldikKIAogCWdpcnEtJmd0O2lycV9udW0gPSBkZXYtJmd0O2lycTsKIAotCXJldHVybiBrc3pfaXJxX2NvbW1vbl9zZXR1cChkZXYsIGdpcnEpOwomIzQzOwlyZXR1cm4ga3N6X2lycV9jb21tb25fc2V0dXAoZGV2LCBnaXJxLCAmYW1wO2tzel9pcnFfZG9tYWluX29wcyk7CiB9CiAKIGludCBrc3pfcGlycV9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1OCBwKQpAQCAtMjU2MCw3ICYjNDM7MjU2MSw3IEBAIGludCBrc3pfcGlycV9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1OCBwKQogCWlmICghcGlycS0mZ3Q7aXJxX251bSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXR1cm4ga3N6X2lycV9jb21tb25fc2V0dXAoZGV2LCBwaXJxKTsKJiM0MzsJcmV0dXJuIGtzel9pcnFfY29tbW9uX3NldHVwKGRldiwgcGlycSwgJmFtcDtrc3pfaXJxX2RvbWFpbl9vcHMpOwogfQogCiB2b2lkIGtzel90ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oCmluZGV4IGFjYWY3MGU2ZjM5M2M5Li5jYmU5ODQ5NDU3OGMzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmgKQEAgLTgsNiAmIzQzOzgsNyBAQAogI2RlZmluZSBfX0tTWl9DT01NT05fSAogCiAjaW5jbHVkZSAmbHQ7bGludXgvZXRoZXJkZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaXJxZG9tYWluLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbXV0ZXguaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wY3MvcGNzLXhwY3MuaCZndDsKQEAgLTE5Myw2ICYjNDM7MTk0LDcgQEAgc3RydWN0IGtzel9wb3J0IHsKIAlzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyB0c3RhbXBfY29uZmlnOwogCWJvb2wgaHd0c190eF9lbjsKIAlib29sIGh3dHNfcnhfZW47CiYjNDM7CWJvb2wgbGFzdF90eF9pc19wZGVsYXlyZXNwOwogCXN0cnVjdCBrc3pfaXJxIHB0cGlycTsKIAlzdHJ1Y3Qga3N6X3B0cF9pcnEgcHRwbXNnX2lycVszXTsKIAlrdGltZV90IHRzdGFtcF9tc2c7CkBAIC01MDgsNiAmIzQzOzUxMCwxMCBAQCBpbnQga3N6X3N3X21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWdudW0sIHUxNiB2YWwpOwogaW50IGtzel9wYXJlbnRfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnbnVtKTsKIGludCBrc3pfcGFyZW50X21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWdudW0sIHUxNiB2YWwpOwogaW50IGtzel9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpOwomIzQzO3ZvaWQga3N6X2lycV9idXNfbG9jayhzdHJ1Y3QgaXJxX2RhdGEgKmQpOwomIzQzO3ZvaWQga3N6X2lycV9idXNfc3luY191bmxvY2soc3RydWN0IGlycV9kYXRhICpkKTsKJiM0MztpbnQga3N6X2lycV9jb21tb25fc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgc3RydWN0IGtzel9pcnEgKmtpcnEsCiYjNDM7CQkJIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyAqb3BzKTsKIGludCBrc3pfcGlycV9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1OCBwKTsKIGludCBrc3pfZ2lycV9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KTsKIHZvaWQga3N6X2lycV9mcmVlKHN0cnVjdCBrc3pfaXJxICpraXJxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMKaW5kZXggOGI5ODAzOTMyMGFkZGEuLjlkOGI3ODY4N2Y1MzE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYwpAQCAtMzIsNiAmIzQzOzMyLDE1IEBACiAKICNkZWZpbmUgS1NaX1BUUF9JTlRfU1RBUlQgMTMKIAomIzQzOy8qCiYjNDM7ICogUFRQIGludGVycnVwdCBiaXQgaXMgdGhlIGJpdCAxMiBvZiB0aGUgMTYtYml0cyBJU1IvSUVSLiBCdXQga3N6X2NvbW1vbi5jIG9ubHkKJiM0MzsgKiBhY2Nlc3NlcyB0aGUgaGlnaC1ieXRlIG9mIHRoZXNlIHJlZ2lzdGVycyBzbyB0aGUgUFRQIGludGVycnVwdCBiaXQgYmVjb21lcyA0LgomIzQzOyAqLwomIzQzOyNkZWZpbmUgS1NaODQ2M19TUkNfUFRQX0lOVAkJNAomIzQzOyNkZWZpbmUgS1NaODQ2M19QVFBfUE9SVDFfSU5UX1NUQVJUCTEyCiYjNDM7I2RlZmluZSBLU1o4NDYzX1BUUF9QT1JUMl9JTlRfU1RBUlQJMTQKJiM0MzsjZGVmaW5lIEtTWjg0NjNfUFRQX0lOVF9TVEFSVAkJS1NaODQ2M19QVFBfUE9SVDFfSU5UX1NUQVJUCiYjNDM7CiBzdGF0aWMgaW50IGtzel9wdHBfdG91X2dwaW8oc3RydWN0IGtzel9kZXZpY2UgKmRldikKIHsKIAlpbnQgcmV0OwpAQCAtMjg4LDYgJiM0MzsyOTcsMzEgQEAgc3RhdGljIGludCBrc3pfcHRwX2VuYWJsZV9tb2RlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpCiAJCQkgdGFnX2VuID8gUFRQX0VOQUJMRSA6IDApOwogfQogCiYjNDM7aW50IGtzejg0NjNfZ2V0X3RzX2luZm8oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCQlzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqdHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtJmd0O3ByaXY7CiYjNDM7CXN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhOwomIzQzOwomIzQzOwlwdHBfZGF0YSA9ICZhbXA7ZGV2LSZndDtwdHBfZGF0YTsKJiM0MzsKJiM0MzsJaWYgKCFwdHBfZGF0YS0mZ3Q7Y2xvY2spCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJdHMtJmd0O3NvX3RpbWVzdGFtcGluZyA9IFNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUgfAomIzQzOwkJCSAgICAgIFNPRl9USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkUgfAomIzQzOwkJCSAgICAgIFNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFOwomIzQzOwomIzQzOwl0cy0mZ3Q7dHhfdHlwZXMgPSBCSVQoSFdUU1RBTVBfVFhfT0ZGKSB8IEJJVChIV1RTVEFNUF9UWF9PTik7CiYjNDM7CiYjNDM7CXRzLSZndDtyeF9maWx0ZXJzID0gQklUKEhXVFNUQU1QX0ZJTFRFUl9OT05FKSB8CiYjNDM7CQkJIEJJVChIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX0VWRU5UKTsKJiM0MzsKJiM0MzsJdHMtJmd0O3BoY19pbmRleCA9IHB0cF9jbG9ja19pbmRleChwdHBfZGF0YS0mZ3Q7Y2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKiBUaGUgZnVuY3Rpb24gaXMgcmV0dXJuIGJhY2sgdGhlIGNhcGFiaWxpdHkgb2YgdGltZXN0YW1waW5nIGZlYXR1cmUgd2hlbgogICogcmVxdWVzdGVkIHRocm91Z2ggZXRodG9vbCAtVCAmbHQ7aW50ZXJmYWNlJmd0OyB1dGlsaXR5CiAgKi8KQEAgLTMzMiw2ICYjNDM7MzY2LDcyIEBAIGludCBrc3pfaHd0c3RhbXBfZ2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IGtzejg0NjNfc2V0X2h3dHN0YW1wX2NvbmZpZyhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LAomIzQzOwkJCQkgICAgICAgc3RydWN0IGtzel9wb3J0ICpwcnQsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY29uZmlnKQomIzQzO3sKJiM0MzsJY29uc3QgdTE2ICpyZWdzID0gZGV2LSZndDtpbmZvLSZndDtyZWdzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoY29uZmlnLSZndDtmbGFncykKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlzd2l0Y2ggKGNvbmZpZy0mZ3Q7dHhfdHlwZSkgewomIzQzOwljYXNlIEhXVFNUQU1QX1RYX09GRjoKJiM0MzsJCXBydC0mZ3Q7cHRwbXNnX2lycVtLU1o4NDYzX1NZTkNfTVNHXS50c19lbiAgPSBmYWxzZTsKJiM0MzsJCXBydC0mZ3Q7cHRwbXNnX2lycVtLU1o4NDYzX1hEUkVRX1BEUkVTX01TR10udHNfZW4gPSBmYWxzZTsKJiM0MzsJCXBydC0mZ3Q7aHd0c190eF9lbiA9IGZhbHNlOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgSFdUU1RBTVBfVFhfT046CiYjNDM7CQlwcnQtJmd0O3B0cG1zZ19pcnFbS1NaODQ2M19TWU5DX01TR10udHNfZW4gID0gdHJ1ZTsKJiM0MzsJCXBydC0mZ3Q7cHRwbXNnX2lycVtLU1o4NDYzX1hEUkVRX1BEUkVTX01TR10udHNfZW4gPSB0cnVlOwomIzQzOwkJcHJ0LSZndDtod3RzX3R4X2VuID0gdHJ1ZTsKJiM0MzsKJiM0MzsJCXJldCA9IGtzel9ybXcxNihkZXYsIHJlZ3NbUFRQX01TR19DT05GMV0sIFBUUF8xU1RFUCwgMCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRVJBTkdFOwomIzQzOwl9CiYjNDM7CiYjNDM7CXN3aXRjaCAoY29uZmlnLSZndDtyeF9maWx0ZXIpIHsKJiM0MzsJY2FzZSBIV1RTVEFNUF9GSUxURVJfTk9ORToKJiM0MzsJCXBydC0mZ3Q7aHd0c19yeF9lbiA9IGZhbHNlOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9FVkVOVDoKJiM0MzsJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX1NZTkM6CiYjNDM7CQljb25maWctJmd0O3J4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfRVZFTlQ7CiYjNDM7CQlwcnQtJmd0O2h3dHNfcnhfZW4gPSB0cnVlOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQljb25maWctJmd0O3J4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9OT05FOwomIzQzOwkJcmV0dXJuIC1FUkFOR0U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGtzel9wdHBfZW5hYmxlX21vZGUoZGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGtzejg0NjNfaHd0c3RhbXBfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiYjNDM7CQkJIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcsCiYjNDM7CQkJIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy0mZ3Q7cHJpdjsKJiM0MzsJc3RydWN0IGtzel9wb3J0ICpwcnQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXBydCA9ICZhbXA7ZGV2LSZndDtwb3J0c1twb3J0XTsKJiM0MzsKJiM0MzsJcmV0ID0ga3N6ODQ2M19zZXRfaHd0c3RhbXBfY29uZmlnKGRldiwgcHJ0LCBjb25maWcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcHJ0LSZndDt0c3RhbXBfY29uZmlnID0gKmNvbmZpZzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBrc3pfc2V0X2h3dHN0YW1wX2NvbmZpZyhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LAogCQkJCSAgIHN0cnVjdCBrc3pfcG9ydCAqcHJ0LAogCQkJCSAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcpCkBAIC01NjIsNiAmIzQzOzY2MiwzMSBAQCBzdGF0aWMgdm9pZCBrc3pfcHRwX3R4dHN0YW1wX3NrYihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LAogCXNrYl9jb21wbGV0ZV90eF90aW1lc3RhbXAoc2tiLCAmYW1wO2h3dHN0YW1wcyk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBrc3o4NDYzX3NldF9wZGVsYXlyZXNwX2ZsYWcoc3RydWN0IGtzel9wb3J0ICpwcnQsCiYjNDM7CQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IHB0cF9oZWFkZXIgKmhkcjsKJiM0MzsJdW5zaWduZWQgaW50IHR5cGU7CiYjNDM7CXU4IHB0cF9tc2dfdHlwZTsKJiM0MzsKJiM0MzsJaWYgKCFrc3pfaXNfa3N6ODQ2MyhwcnQtJmd0O2tzel9kZXYpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoc2tiX2xpbmVhcml6ZShza2IpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl0eXBlID0gcHRwX2NsYXNzaWZ5X3Jhdyhza2IpOwomIzQzOwlpZiAodHlwZSA9PSBQVFBfQ0xBU1NfTk9ORSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaGRyID0gcHRwX3BhcnNlX2hlYWRlcihza2IsIHR5cGUpOwomIzQzOwlpZiAoIWhkcikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcHRwX21zZ190eXBlID0gcHRwX2dldF9tc2d0eXBlKGhkciwgdHlwZSk7CiYjNDM7CXBydC0mZ3Q7bGFzdF90eF9pc19wZGVsYXlyZXNwID0gKHB0cF9tc2dfdHlwZSA9PSBQVFBfTVNHVFlQRV9QREVMQVlfUkVTUCk7CiYjNDM7fQomIzQzOwogdm9pZCBrc3pfcG9ydF9kZWZlcnJlZF94bWl0KHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspCiB7CiAJc3RydWN0IGtzel9kZWZlcnJlZF94bWl0X3dvcmsgKnhtaXRfd29yayA9IHdvcmtfdG9feG1pdF93b3JrKHdvcmspOwpAQCAtNTc4LDYgJiM0Mzs3MDMsOCBAQCB2b2lkIGtzel9wb3J0X2RlZmVycmVkX3htaXQoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaykKIAogCXJlaW5pdF9jb21wbGV0aW9uKCZhbXA7cHJ0LSZndDt0c3RhbXBfbXNnX2NvbXApOwogCiYjNDM7CWtzejg0NjNfc2V0X3BkZWxheXJlc3BfZmxhZyhwcnQsIHNrYik7CiYjNDM7CiAJZHNhX2VucXVldWVfc2tiKHNrYiwgc2tiLSZndDtkZXYpOwogCiAJa3N6X3B0cF90eHRzdGFtcF9za2IoZGV2LCBwcnQsIGNsb25lKTsKQEAgLTk0NCw4ICYjNDM7MTA3MSw5IEBAIGludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIAkvKiBDdXJyZW50bHkgb25seSBQMlAgbW9kZSBpcyBzdXBwb3J0ZWQuIFdoZW4gODAyXzFBUyBiaXQgaXMgc2V0LCBpdAogCSAqIGZvcndhcmRzIGFsbCBQVFAgcGFja2V0cyB0byBob3N0IHBvcnQgYW5kIG5vbmUgdG8gb3RoZXIgcG9ydHMuCiAJICovCi0JcmV0ID0ga3N6X3JtdzE2KGRldiwgcmVnc1tQVFBfTVNHX0NPTkYxXSwgUFRQX1RDX1AyUCB8IFBUUF84MDJfMUFTLAotCQkJUFRQX1RDX1AyUCB8IFBUUF84MDJfMUFTKTsKJiM0MzsJcmV0ID0ga3N6X3JtdzE2KGRldiwgcmVnc1tQVFBfTVNHX0NPTkYxXSwKJiM0MzsJCQlQVFBfVENfUDJQIHwgUFRQXzgwMl8xQVMgfCBQVFBfRVRIX0VOQUJMRSwKJiM0MzsJCQlQVFBfVENfUDJQIHwgUFRQXzgwMl8xQVMgfCBQVFBfRVRIX0VOQUJMRSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAtOTY5LDcgJiM0MzsxMDk3LDIyIEBAIHZvaWQga3N6X3B0cF9jbG9ja191bnJlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIAogc3RhdGljIGludCBrc3pfcmVhZF90cyhzdHJ1Y3Qga3N6X3BvcnQgKnBvcnQsIHUxNiByZWcsIHUzMiAqdHMpCiB7Ci0JcmV0dXJuIGtzel9yZWFkMzIocG9ydC0mZ3Q7a3N6X2RldiwgcmVnLCB0cyk7CiYjNDM7CXUxNiB0c19yZWcgPSByZWc7CiYjNDM7CiYjNDM7CS8qKgomIzQzOwkgKiBPbiBLU1o4NDYzIERSRVEgYW5kIERSRVNQIHRpbWVzdGFtcHMgc2hhcmUgb25lIGludGVycnVwdCBsaW5lCiYjNDM7CSAqIHNvIHdlIGhhdmUgdG8gY2hlY2sgdGhlIG5hdHVyZSBvZiB0aGUgbGF0ZXN0IGV2ZW50IHNlbnQgdG8ga25vdwomIzQzOwkgKiB3aGVyZSB0aGUgdGltZXN0YW1wIGlzIGxvY2F0ZWQKJiM0MzsJICovCiYjNDM7CWlmIChrc3pfaXNfa3N6ODQ2Myhwb3J0LSZndDtrc3pfZGV2KSkgewomIzQzOwkJY29uc3Qgc3RydWN0IGtzel9kZXZfb3BzICpvcHMgPSBwb3J0LSZndDtrc3pfZGV2LSZndDtkZXZfb3BzOwomIzQzOwomIzQzOwkJaWYgKHBvcnQtJmd0O2xhc3RfdHhfaXNfcGRlbGF5cmVzcCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgdHNfcmVnID09IG9wcy0mZ3Q7Z2V0X3BvcnRfYWRkcihwb3J0LSZndDtudW0sIEtTWjg0NjNfUkVHX1BPUlRfRFJFUV9UUykpCiYjNDM7CQkJdHNfcmVnICYjNDM7PSBLU1o4NDYzX0RSRVNQX1RTX09GRlNFVDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4ga3N6X3JlYWQzMihwb3J0LSZndDtrc3pfZGV2LCB0c19yZWcsIHRzKTsKIH0KIAogc3RhdGljIGlycXJldHVybl90IGtzel9wdHBfbXNnX3RocmVhZF9mbihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCkBAIC0xMTI5LDYgJiM0MzsxMjcyLDEyOCBAQCBzdGF0aWMgaW50IGtzel9wdHBfbXNnX2lycV9zZXR1cChzdHJ1Y3Qga3N6X3BvcnQgKnBvcnQsIHU4IG4pCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfcG9ydF9pcnFfc2V0dXAoc3RydWN0IGtzel9pcnEgKnB0cGlycSwKJiM0MzsJCQkJICAgICAgc3RydWN0IGtzel9wb3J0ICpwb3J0LCBpbnQgaHdfaXJxKQomIzQzO3sKJiM0MzsJdTE2IHRzX3JlZ1tdID0ge0tTWjg0NjNfUkVHX1BPUlRfU1lOQ19UUywgS1NaODQ2M19SRUdfUE9SVF9EUkVRX1RTfTsKJiM0MzsJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBuYW1lW10gPSB7JiMzNDtzeW5jLW1zZyYjMzQ7LCAmIzM0O2RlbGF5LW1zZyYjMzQ7fTsKJiM0MzsJY29uc3Qgc3RydWN0IGtzel9kZXZfb3BzICpvcHMgPSBwb3J0LSZndDtrc3pfZGV2LSZndDtkZXZfb3BzOwomIzQzOwlzdHJ1Y3Qga3N6X3B0cF9pcnEgKnB0cG1zZ19pcnE7CiYjNDM7CWludCByZXQ7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpbml0X2NvbXBsZXRpb24oJmFtcDtwb3J0LSZndDt0c3RhbXBfbXNnX2NvbXApOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgMjsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXB0cG1zZ19pcnEgPSAmYW1wO3BvcnQtJmd0O3B0cG1zZ19pcnFbaV07CiYjNDM7CQlwdHBtc2dfaXJxLSZndDtudW0gPSBpcnFfY3JlYXRlX21hcHBpbmcocHRwaXJxLSZndDtkb21haW4sCiYjNDM7CQkJCQkJICAgICBod19pcnEgJiM0MzsgaSk7CiYjNDM7CQlpZiAoIXB0cG1zZ19pcnEtJmd0O251bSkgewomIzQzOwkJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQkJZ290byByZWxlYXNlX21zZ19pcnE7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlwdHBtc2dfaXJxLSZndDtwb3J0ID0gcG9ydDsKJiM0MzsJCXB0cG1zZ19pcnEtJmd0O3RzX3JlZyA9IG9wcy0mZ3Q7Z2V0X3BvcnRfYWRkcihwb3J0LSZndDtudW0sIHRzX3JlZ1tpXSk7CiYjNDM7CiYjNDM7CQlzdHJzY3B5KHB0cG1zZ19pcnEtJmd0O25hbWUsIG5hbWVbaV0pOwomIzQzOwomIzQzOwkJcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEocHRwbXNnX2lycS0mZ3Q7bnVtLCBOVUxMLAomIzQzOwkJCQkJICAga3N6X3B0cF9tc2dfdGhyZWFkX2ZuLCBJUlFGX09ORVNIT1QsCiYjNDM7CQkJCQkgICBwdHBtc2dfaXJxLSZndDtuYW1lLCBwdHBtc2dfaXJxKTsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQlpcnFfZGlzcG9zZV9tYXBwaW5nKHB0cG1zZ19pcnEtJmd0O251bSk7CiYjNDM7CQkJZ290byByZWxlYXNlX21zZ19pcnE7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7cmVsZWFzZV9tc2dfaXJxOgomIzQzOwl3aGlsZSAoaS0tKQomIzQzOwkJa3N6X3B0cF9tc2dfaXJxX2ZyZWUocG9ydCwgaSk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGtzejg0NjNfcHRwX3BvcnRfaXJxX3RlYXJkb3duKHN0cnVjdCBrc3pfcG9ydCAqcG9ydCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgMjsgaSYjNDM7JiM0MzspCiYjNDM7CQlrc3pfcHRwX21zZ19pcnFfZnJlZShwb3J0LCBpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGtzejg0NjNfcHRwX2lycV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtJmd0O3ByaXY7CiYjNDM7CXN0cnVjdCBrc3pfcG9ydCAqcG9ydDEsICpwb3J0MjsKJiM0MzsJc3RydWN0IGtzel9pcnEgKnB0cGlycTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcG9ydDEgPSAmYW1wO2Rldi0mZ3Q7cG9ydHNbMF07CiYjNDM7CXBvcnQyID0gJmFtcDtkZXYtJmd0O3BvcnRzWzFdOwomIzQzOwlwdHBpcnEgPSAmYW1wO3BvcnQxLSZndDtwdHBpcnE7CiYjNDM7CiYjNDM7CXB0cGlycS0mZ3Q7aXJxX251bSA9IGlycV9maW5kX21hcHBpbmcoZGV2LSZndDtnaXJxLmRvbWFpbiwKJiM0MzsJCQkJCSAgIEtTWjg0NjNfU1JDX1BUUF9JTlQpOwomIzQzOwlpZiAoIXB0cGlycS0mZ3Q7aXJxX251bSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlwdHBpcnEtJmd0O2RldiA9IGRldjsKJiM0MzsJcHRwaXJxLSZndDtuaXJxcyA9IDQ7CiYjNDM7CXB0cGlycS0mZ3Q7cmVnX21hc2sgPSBLU1o4NDYzX1BUUF9UU19JRVI7CiYjNDM7CXB0cGlycS0mZ3Q7cmVnX3N0YXR1cyA9IEtTWjg0NjNfUFRQX1RTX0lTUjsKJiM0MzsJcHRwaXJxLSZndDtpcnEwX29mZnNldCA9IEtTWjg0NjNfUFRQX0lOVF9TVEFSVDsKJiM0MzsJc25wcmludGYocHRwaXJxLSZndDtuYW1lLCBzaXplb2YocHRwaXJxLSZndDtuYW1lKSwgJiMzNDtwdHAtaXJxJiMzNDspOwomIzQzOwomIzQzOwlwdHBpcnEtJmd0O2RvbWFpbiA9IGlycV9kb21haW5fY3JlYXRlX2xpbmVhcihkZXZfZndub2RlKGRldi0mZ3Q7ZGV2KSwKJiM0MzsJCQkJCQkgIHB0cGlycS0mZ3Q7bmlycXMsCiYjNDM7CQkJCQkJICAmYW1wO2tzel9wdHBfaXJxX2RvbWFpbl9vcHMsCiYjNDM7CQkJCQkJICBwdHBpcnEpOwomIzQzOwlpZiAoIXB0cGlycS0mZ3Q7ZG9tYWluKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJldCA9IGtzejg0NjNfcHRwX3BvcnRfaXJxX3NldHVwKHB0cGlycSwgcG9ydDEsCiYjNDM7CQkJCQkgS1NaODQ2M19QVFBfUE9SVDFfSU5UX1NUQVJUIC0gS1NaODQ2M19QVFBfSU5UX1NUQVJUKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gcmVsZWFzZV9kb21haW47CiYjNDM7CiYjNDM7CXJldCA9IGtzejg0NjNfcHRwX3BvcnRfaXJxX3NldHVwKHB0cGlycSwgcG9ydDIsCiYjNDM7CQkJCQkgS1NaODQ2M19QVFBfUE9SVDJfSU5UX1NUQVJUIC0gS1NaODQ2M19QVFBfSU5UX1NUQVJUKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZnJlZV9wb3J0MTsKJiM0MzsKJiM0MzsJcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEocHRwaXJxLSZndDtpcnFfbnVtLCBOVUxMLCBrc3pfcHRwX2lycV90aHJlYWRfZm4sCiYjNDM7CQkJCSAgIElSUUZfT05FU0hPVCwgcHRwaXJxLSZndDtuYW1lLCBwdHBpcnEpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBmcmVlX3BvcnQyOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztmcmVlX3BvcnQyOgomIzQzOwlrc3o4NDYzX3B0cF9wb3J0X2lycV90ZWFyZG93bihwb3J0Mik7CiYjNDM7ZnJlZV9wb3J0MToKJiM0MzsJa3N6ODQ2M19wdHBfcG9ydF9pcnFfdGVhcmRvd24ocG9ydDEpOwomIzQzO3JlbGVhc2VfZG9tYWluOgomIzQzOwlpcnFfZG9tYWluX3JlbW92ZShwdHBpcnEtJmd0O2RvbWFpbik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQga3N6ODQ2M19wdHBfaXJxX2ZyZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQomIzQzO3sKJiM0MzsJc3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLSZndDtwcml2OwomIzQzOwlzdHJ1Y3Qga3N6X3BvcnQgKnBvcnQxID0gJmFtcDtkZXYtJmd0O3BvcnRzWzBdOwomIzQzOwlzdHJ1Y3Qga3N6X3BvcnQgKnBvcnQyID0gJmFtcDtkZXYtJmd0O3BvcnRzWzFdOwomIzQzOwlzdHJ1Y3Qga3N6X2lycSAqcHRwaXJxID0gJmFtcDtwb3J0MS0mZ3Q7cHRwaXJxOwomIzQzOwomIzQzOwlmcmVlX2lycShwdHBpcnEtJmd0O2lycV9udW0sIHB0cGlycSk7CiYjNDM7CWtzejg0NjNfcHRwX3BvcnRfaXJxX3RlYXJkb3duKHBvcnQyKTsKJiM0MzsJa3N6ODQ2M19wdHBfcG9ydF9pcnFfdGVhcmRvd24ocG9ydDEpOwomIzQzOwlpcnFfZG9tYWluX3JlbW92ZShwdHBpcnEtJmd0O2RvbWFpbik7CiYjNDM7fQomIzQzOwogaW50IGtzel9wdHBfaXJxX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgdTggcCkKIHsKIAlzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtJmd0O3ByaXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaCBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oCmluZGV4IDMwODZlNTE5YjFiNjQxLi43MDY3ZWM5YmQxZTZmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmgKQEAgLTM5LDE3ICYjNDM7MzksMjQgQEAgdm9pZCBrc3pfcHRwX2Nsb2NrX3VucmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTsKIAogaW50IGtzel9nZXRfdHNfaW5mbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCQkgICAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKnRzKTsKJiM0MztpbnQga3N6ODQ2M19nZXRfdHNfaW5mbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAomIzQzOwkJCXN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICp0cyk7CiBpbnQga3N6X2h3dHN0YW1wX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCQkgICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcpOwogaW50IGtzel9od3RzdGFtcF9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKIAkJICAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY29uZmlnLAogCQkgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7CiYjNDM7aW50IGtzejg0NjNfaHd0c3RhbXBfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiYjNDM7CQkJIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcsCiYjNDM7CQkJIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7CiB2b2lkIGtzel9wb3J0X3R4dHN0YW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCBrc3pfcG9ydF9kZWZlcnJlZF94bWl0KHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspOwogYm9vbCBrc3pfcG9ydF9yeHRzdGFtcChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgICAgdW5zaWduZWQgaW50IHR5cGUpOwogaW50IGtzel9wdHBfaXJxX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgdTggcCk7CiB2b2lkIGtzel9wdHBfaXJxX2ZyZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCB1OCBwKTsKJiM0MztpbnQga3N6ODQ2M19wdHBfaXJxX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7CiYjNDM7dm9pZCBrc3o4NDYzX3B0cF9pcnFfZnJlZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpOwogCiAjZWxzZQogCkBAIC03MiwxMSAmIzQzOzc5LDIwIEBAIHN0YXRpYyBpbmxpbmUgaW50IGtzel9wdHBfaXJxX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgdTggcCkKIAogc3RhdGljIGlubGluZSB2b2lkIGtzel9wdHBfaXJxX2ZyZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCB1OCBwKSB7fQogCiYjNDM7c3RhdGljIGlubGluZSBpbnQga3N6ODQ2M19wdHBfaXJxX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQga3N6ODQ2M19wdHBfaXJxX2ZyZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKSB7fQomIzQzOwogI2RlZmluZSBrc3pfZ2V0X3RzX2luZm8gTlVMTAomIzQzOyNkZWZpbmUga3N6ODQ2M19nZXRfdHNfaW5mbyBOVUxMCiAKICNkZWZpbmUga3N6X2h3dHN0YW1wX2dldCBOVUxMCiAKICNkZWZpbmUga3N6X2h3dHN0YW1wX3NldCBOVUxMCiYjNDM7I2RlZmluZSBrc3o4NDYzX2h3dHN0YW1wX3NldCBOVUxMCiAKICNkZWZpbmUga3N6X3BvcnRfcnh0c3RhbXAgTlVMTAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmgKaW5kZXggZWFiOWFlY2I3ZmE4YTUuLjY1ZWE4NTc3YWY3NTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwX3JlZy5oCkBAIC0xMjEsNiAmIzQzOzEyMSwxMiBAQAogI2RlZmluZSBSRUdfUFRQX1BPUlRfU1lOQ19UUwkJMHgwQzBDCiAjZGVmaW5lIFJFR19QVFBfUE9SVF9QRFJFU1BfVFMJCTB4MEMxMAogCiYjNDM7I2RlZmluZSBLU1o4NDYzX1JFR19QT1JUX0RSRVFfVFMJMHgwNjQ4CiYjNDM7I2RlZmluZSBLU1o4NDYzX1JFR19QT1JUX1NZTkNfVFMJMHgwNjRDCiYjNDM7I2RlZmluZSBLU1o4NDYzX1JFR19QT1JUX0RSRVNQX1RTCTB4MDY1MAomIzQzOyNkZWZpbmUgS1NaODQ2M19QVFBfVFNfSVNSCQkweDA2OEMKJiM0MzsjZGVmaW5lIEtTWjg0NjNfUFRQX1RTX0lFUgkJMHgwNjhFCiYjNDM7CiAjZGVmaW5lIFJFR19QVFBfUE9SVF9UWF9JTlRfU1RBVFVTX18yCTB4MEMxNAogI2RlZmluZSBSRUdfUFRQX1BPUlRfVFhfSU5UX0VOQUJMRV9fMgkweDBDMTYKIApAQCAtMTMxLDQgJiM0MzsxMzcsOCBAQAogI2RlZmluZSBLU1pfWERSRVFfTVNHCQkJMQogI2RlZmluZSBLU1pfUERSRVNfTVNHCQkJMAogCiYjNDM7I2RlZmluZSBLU1o4NDYzX0RSRVNQX1RTX09GRlNFVAkJKEtTWjg0NjNfUkVHX1BPUlRfRFJFU1BfVFMgLSBLU1o4NDYzX1JFR19QT1JUX0RSRVFfVFMpCiYjNDM7I2RlZmluZSBLU1o4NDYzX1NZTkNfTVNHCQkwCiYjNDM7I2RlZmluZSBLU1o4NDYzX1hEUkVRX1BEUkVTX01TRwkJMQomIzQzOwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kc2EuaCBiL2luY2x1ZGUvbmV0L2RzYS5oCmluZGV4IDhjMTZlZjIzY2MxMDJhLi42ZjdmNWMxN2I1MzIwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvZHNhLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvZHNhLmgKQEAgLTU5LDYgJiM0Mzs1OSw3IEBAIHN0cnVjdCB0Y19hY3Rpb247CiAjZGVmaW5lIERTQV9UQUdfUFJPVE9fTVhMX0dTVzFYWF9WQUxVRQkJMzEKICNkZWZpbmUgRFNBX1RBR19QUk9UT19NWEw4NjJfVkFMVUUJCTMyCiAjZGVmaW5lIERTQV9UQUdfUFJPVE9fTkVUQ19WQUxVRQkJMzMKJiM0MzsjZGVmaW5lIERTQV9UQUdfUFJPVE9fS1NaODQ2M19WQUxVRQkJMzQKIAogZW51bSBkc2FfdGFnX3Byb3RvY29sIHsKIAlEU0FfVEFHX1BST1RPX05PTkUJCT0gRFNBX1RBR19QUk9UT19OT05FX1ZBTFVFLApAQCAtOTUsNiAmIzQzOzk2LDcgQEAgZW51bSBkc2FfdGFnX3Byb3RvY29sIHsKIAlEU0FfVEFHX1BST1RPX01YTF9HU1cxWFgJPSBEU0FfVEFHX1BST1RPX01YTF9HU1cxWFhfVkFMVUUsCiAJRFNBX1RBR19QUk9UT19NWEw4NjIJCT0gRFNBX1RBR19QUk9UT19NWEw4NjJfVkFMVUUsCiAJRFNBX1RBR19QUk9UT19ORVRDCQk9IERTQV9UQUdfUFJPVE9fTkVUQ19WQUxVRSwKJiM0MzsJRFNBX1RBR19QUk9UT19LU1o4NDYzCQk9IERTQV9UQUdfUFJPVE9fS1NaODQ2M19WQUxVRSwKIH07CiAKIHN0cnVjdCBkc2Ffc3dpdGNoOwpkaWZmIC0tZ2l0IGEvbmV0L2RzYS90YWdfa3N6LmMgYi9uZXQvZHNhL3RhZ19rc3ouYwppbmRleCA2N2ZhODlmMTAyZTA3MC4uYjRkNzBiYTkzMGRjYmUgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvdGFnX2tzei5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kc2EvdGFnX2tzei5jCkBAIC0xMiw2ICYjNDM7MTIsNyBAQAogCiAjaW5jbHVkZSAmIzM0O3RhZy5oJiMzNDsKIAomIzQzOyNkZWZpbmUgS1NaODQ2M19OQU1FICYjMzQ7a3N6ODQ2MyYjMzQ7CiAjZGVmaW5lIEtTWjg3OTVfTkFNRSAmIzM0O2tzejg3OTUmIzM0OwogI2RlZmluZSBLU1o5NDc3X05BTUUgJiMzNDtrc3o5NDc3JiMzNDsKICNkZWZpbmUgS1NaOTg5M19OQU1FICYjMzQ7a3N6OTg5MyYjMzQ7CkBAIC0xMDMsNzIgJiM0MzsxMDQsNiBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmtzel9jb21tb25fcmN2KHN0cnVjdCBza19idWZmICpza2IsCiAJcmV0dXJuIHNrYjsKIH0KIAotLyoKLSAqIEZvciBJbmdyZXNzIChIb3N0IC0mZ3Q7IEtTWjg3OTUpLCAxIGJ5dGUgaXMgYWRkZWQgYmVmb3JlIEZDUy4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogREEoNmJ5dGVzKXxTQSg2Ynl0ZXMpfC4uLi58RGF0YShuYnl0ZXMpfHRhZygxYnl0ZSl8RkNTKDRieXRlcykKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogdGFnIDogZWFjaCBiaXQgcmVwcmVzZW50cyBwb3J0IChlZywgMHgwMT1wb3J0MSwgMHgwMj1wb3J0MiwgMHgxMD1wb3J0NSkKLSAqCi0gKiBGb3IgRWdyZXNzIChLU1o4Nzk1IC0mZ3Q7IEhvc3QpLCAxIGJ5dGUgaXMgYWRkZWQgYmVmb3JlIEZDUy4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogREEoNmJ5dGVzKXxTQSg2Ynl0ZXMpfC4uLi58RGF0YShuYnl0ZXMpfHRhZzAoMWJ5dGUpfEZDUyg0Ynl0ZXMpCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIHRhZzAgOiB6ZXJvLWJhc2VkIHZhbHVlIHJlcHJlc2VudHMgcG9ydAotICoJICAoZWcsIDB4MD1wb3J0MSwgMHgyPXBvcnQzLCAweDM9cG9ydDQpCi0gKi8KLQotI2RlZmluZSBLU1o4Nzk1X1RBSUxfVEFHX0VHX1BPUlRfTQlHRU5NQVNLKDEsIDApCi0jZGVmaW5lIEtTWjg3OTVfVEFJTF9UQUdfT1ZFUlJJREUJQklUKDYpCi0jZGVmaW5lIEtTWjg3OTVfVEFJTF9UQUdfTE9PS1VQCQlCSVQoNykKLQotc3RhdGljIHN0cnVjdCBza19idWZmICprc3o4Nzk1X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZXRoaGRyICpoZHI7Ci0JdTggKnRhZzsKLQotCWlmIChza2ItJmd0O2lwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMICZhbXA7JmFtcDsgc2tiX2NoZWNrc3VtX2hlbHAoc2tiKSkgewotCQlrZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JLyogVGFnIGVuY29kaW5nICovCi0JdGFnID0gc2tiX3B1dChza2IsIEtTWl9JTkdSRVNTX1RBR19MRU4pOwotCWhkciA9IHNrYl9ldGhfaGRyKHNrYik7Ci0KLQkqdGFnID0gZHNhX3htaXRfcG9ydF9tYXNrKHNrYiwgZGV2KTsKLQlpZiAoaXNfbGlua19sb2NhbF9ldGhlcl9hZGRyKGhkci0mZ3Q7aF9kZXN0KSkKLQkJKnRhZyB8PSBLU1o4Nzk1X1RBSUxfVEFHX09WRVJSSURFOwotCi0JcmV0dXJuIHNrYjsKLX0KLQotc3RhdGljIHN0cnVjdCBza19idWZmICprc3o4Nzk1X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXU4ICp0YWc7Ci0KLQlpZiAoc2tiX2xpbmVhcml6ZShza2IpKSB7Ci0JCWtmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQl0YWcgPSBza2JfdGFpbF9wb2ludGVyKHNrYikgLSBLU1pfRUdSRVNTX1RBR19MRU47Ci0KLQlyZXR1cm4ga3N6X2NvbW1vbl9yY3Yoc2tiLCBkZXYsIHRhZ1swXSAmYW1wOyBLU1o4Nzk1X1RBSUxfVEFHX0VHX1BPUlRfTSwKLQkJCSAgICAgIEtTWl9FR1JFU1NfVEFHX0xFTik7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMga3N6ODc5NV9uZXRkZXZfb3BzID0gewotCS5uYW1lCT0gS1NaODc5NV9OQU1FLAotCS5wcm90bwk9IERTQV9UQUdfUFJPVE9fS1NaODc5NSwKLQkueG1pdAk9IGtzejg3OTVfeG1pdCwKLQkucmN2CT0ga3N6ODc5NV9yY3YsCi0JLm5lZWRlZF90YWlscm9vbSA9IEtTWl9JTkdSRVNTX1RBR19MRU4sCi19OwotCi1EU0FfVEFHX0RSSVZFUihrc3o4Nzk1X25ldGRldl9vcHMpOwotTU9EVUxFX0FMSUFTX0RTQV9UQUdfRFJJVkVSKERTQV9UQUdfUFJPVE9fS1NaODc5NSwgS1NaODc5NV9OQU1FKTsKLQogLyoKICAqIEZvciBJbmdyZXNzIChIb3N0IC0mZ3Q7IEtTWjk0NzcpLCAyLzYgYnl0ZXMgYXJlIGFkZGVkIGJlZm9yZSBGQ1MuCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI4NCw2ICYjNDM7MjE5LDM3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqa3N6X2RlZmVyX3htaXQoc3RydWN0IGRzYV9wb3J0ICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlyZXR1cm4gTlVMTDsKIH0KIAomIzQzO3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqa3N6X2NvbW1vbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkgICAgICAgYm9vbCBkb190c3RhbXAsCiYjNDM7CQkJCSAgICAgICB1OCBwcmlvLAomIzQzOwkJCQkgICAgICAgdTggb3ZlcnJpZGVfbWFzaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfdXNlcl90b19wb3J0KGRldik7CiYjNDM7CXN0cnVjdCBldGhoZHIgKmhkcjsKJiM0MzsJdTggKnRhZzsKJiM0MzsKJiM0MzsJaWYgKHNrYi0mZ3Q7aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwgJmFtcDsmYW1wOyBza2JfY2hlY2tzdW1faGVscChza2IpKSB7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFRhZyBlbmNvZGluZyAqLwomIzQzOwlpZiAoZG9fdHN0YW1wKQomIzQzOwkJa3N6X3htaXRfdGltZXN0YW1wKGRwLCBza2IpOwomIzQzOwomIzQzOwl0YWcgPSBza2JfcHV0KHNrYiwgS1NaX0lOR1JFU1NfVEFHX0xFTik7CiYjNDM7CWhkciA9IHNrYl9ldGhfaGRyKHNrYik7CiYjNDM7CiYjNDM7CSp0YWcgPSBkc2FfeG1pdF9wb3J0X21hc2soc2tiLCBkZXYpOwomIzQzOwkqdGFnIHw9IHByaW87CiYjNDM7CiYjNDM7CWlmIChpc19saW5rX2xvY2FsX2V0aGVyX2FkZHIoaGRyLSZndDtoX2Rlc3QpKQomIzQzOwkJKnRhZyB8PSBvdmVycmlkZV9tYXNrOwomIzQzOwomIzQzOwlyZXR1cm4ga3N6X2RlZmVyX3htaXQoZHAsIHNrYik7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCBza19idWZmICprc3o5NDc3X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTM1MywzNyAmIzQzOzMxOSw2OSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIGtzejk0NzdfbmV0ZGV2X29wcyA9IHsKIERTQV9UQUdfRFJJVkVSKGtzejk0NzdfbmV0ZGV2X29wcyk7CiBNT0RVTEVfQUxJQVNfRFNBX1RBR19EUklWRVIoRFNBX1RBR19QUk9UT19LU1o5NDc3LCBLU1o5NDc3X05BTUUpOwogCi0jZGVmaW5lIEtTWjk4OTNfVEFJTF9UQUdfUFJJTwkJR0VOTUFTSyg0LCAzKQotI2RlZmluZSBLU1o5ODkzX1RBSUxfVEFHX09WRVJSSURFCUJJVCg1KQotI2RlZmluZSBLU1o5ODkzX1RBSUxfVEFHX0xPT0tVUAkJQklUKDYpCiYjNDM7LyoKJiM0MzsgKiBGb3IgSW5ncmVzcyAoSG9zdCAtJmd0OyBLU1o4Nzk1KSwgMSBieXRlIGlzIGFkZGVkIGJlZm9yZSBGQ1MuCiYjNDM7ICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7ICogREEoNmJ5dGVzKXxTQSg2Ynl0ZXMpfC4uLi58RGF0YShuYnl0ZXMpfHRhZygxYnl0ZSl8RkNTKDRieXRlcykKJiM0MzsgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MzsgKiB0YWcgOiBlYWNoIGJpdCByZXByZXNlbnRzIHBvcnQgKGVnLCAweDAxPXBvcnQxLCAweDAyPXBvcnQyLCAweDEwPXBvcnQ1KQomIzQzOyAqCiYjNDM7ICogRm9yIEVncmVzcyAoS1NaODc5NSAtJmd0OyBIb3N0KSwgMSBieXRlIGlzIGFkZGVkIGJlZm9yZSBGQ1MuCiYjNDM7ICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7ICogREEoNmJ5dGVzKXxTQSg2Ynl0ZXMpfC4uLi58RGF0YShuYnl0ZXMpfHRhZzAoMWJ5dGUpfEZDUyg0Ynl0ZXMpCiYjNDM7ICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7ICogdGFnMCA6IHplcm8tYmFzZWQgdmFsdWUgcmVwcmVzZW50cyBwb3J0CiYjNDM7ICoJICAoZWcsIDB4MD1wb3J0MSwgMHgyPXBvcnQzLCAweDM9cG9ydDQpCiYjNDM7ICovCiAKLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqa3N6OTg5M194bWl0KHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7I2RlZmluZSBLU1o4Nzk1X1RBSUxfVEFHX0VHX1BPUlRfTQlHRU5NQVNLKDEsIDApCiYjNDM7I2RlZmluZSBLU1o4Nzk1X1RBSUxfVEFHX09WRVJSSURFCUJJVCg2KQomIzQzOyNkZWZpbmUgS1NaODc5NV9UQUlMX1RBR19MT09LVVAJCUJJVCg3KQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqa3N6ODc5NV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4ga3N6X2NvbW1vbl94bWl0KHNrYiwgZGV2LCBmYWxzZSwgMCwgS1NaODc5NV9UQUlMX1RBR19PVkVSUklERSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqa3N6ODc5NV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQl1MTYgcXVldWVfbWFwcGluZyA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwotCXU4IHByaW8gPSBuZXRkZXZfdHhxX3RvX3RjKGRldiwgcXVldWVfbWFwcGluZyk7Ci0Jc3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV91c2VyX3RvX3BvcnQoZGV2KTsKLQlzdHJ1Y3QgZXRoaGRyICpoZHI7CiAJdTggKnRhZzsKIAotCWlmIChza2ItJmd0O2lwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMICZhbXA7JmFtcDsgc2tiX2NoZWNrc3VtX2hlbHAoc2tiKSkgewomIzQzOwlpZiAoc2tiX2xpbmVhcml6ZShza2IpKSB7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQkvKiBUYWcgZW5jb2RpbmcgKi8KLQlrc3pfeG1pdF90aW1lc3RhbXAoZHAsIHNrYik7CiYjNDM7CXRhZyA9IHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtIEtTWl9FR1JFU1NfVEFHX0xFTjsKIAotCXRhZyA9IHNrYl9wdXQoc2tiLCBLU1pfSU5HUkVTU19UQUdfTEVOKTsKLQloZHIgPSBza2JfZXRoX2hkcihza2IpOwomIzQzOwlyZXR1cm4ga3N6X2NvbW1vbl9yY3Yoc2tiLCBkZXYsIHRhZ1swXSAmYW1wOyBLU1o4Nzk1X1RBSUxfVEFHX0VHX1BPUlRfTSwKJiM0MzsJCQkgICAgICBLU1pfRUdSRVNTX1RBR19MRU4pOwomIzQzO30KIAotCSp0YWcgPSBkc2FfeG1pdF9wb3J0X21hc2soc2tiLCBkZXYpOwotCSp0YWcgfD0gRklFTERfUFJFUChLU1o5ODkzX1RBSUxfVEFHX1BSSU8sIHByaW8pOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMga3N6ODc5NV9uZXRkZXZfb3BzID0gewomIzQzOwkubmFtZQk9IEtTWjg3OTVfTkFNRSwKJiM0MzsJLnByb3RvCT0gRFNBX1RBR19QUk9UT19LU1o4Nzk1LAomIzQzOwkueG1pdAk9IGtzejg3OTVfeG1pdCwKJiM0MzsJLnJjdgk9IGtzejg3OTVfcmN2LAomIzQzOwkubmVlZGVkX3RhaWxyb29tID0gS1NaX0lOR1JFU1NfVEFHX0xFTiwKJiM0Mzt9OwogCi0JaWYgKGlzX2xpbmtfbG9jYWxfZXRoZXJfYWRkcihoZHItJmd0O2hfZGVzdCkpCi0JCSp0YWcgfD0gS1NaOTg5M19UQUlMX1RBR19PVkVSUklERTsKJiM0MztEU0FfVEFHX0RSSVZFUihrc3o4Nzk1X25ldGRldl9vcHMpOwomIzQzO01PRFVMRV9BTElBU19EU0FfVEFHX0RSSVZFUihEU0FfVEFHX1BST1RPX0tTWjg3OTUsIEtTWjg3OTVfTkFNRSk7CiAKLQlyZXR1cm4ga3N6X2RlZmVyX3htaXQoZHAsIHNrYik7CiYjNDM7I2RlZmluZSBLU1o5ODkzX1RBSUxfVEFHX1BSSU8JCUdFTk1BU0soNCwgMykKJiM0MzsjZGVmaW5lIEtTWjk4OTNfVEFJTF9UQUdfT1ZFUlJJREUJQklUKDUpCiYjNDM7I2RlZmluZSBLU1o5ODkzX1RBSUxfVEFHX0xPT0tVUAkJQklUKDYpCiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBza19idWZmICprc3o5ODkzX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwl1MTYgcXVldWVfbWFwcGluZyA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwomIzQzOwl1OCBwcmlvID0gbmV0ZGV2X3R4cV90b190YyhkZXYsIHF1ZXVlX21hcHBpbmcpOwomIzQzOwomIzQzOwlyZXR1cm4ga3N6X2NvbW1vbl94bWl0KHNrYiwgZGV2LCB0cnVlLAomIzQzOwkJCSAgICAgICBGSUVMRF9QUkVQKEtTWjk4OTNfVEFJTF9UQUdfUFJJTywgcHJpbyksCiYjNDM7CQkJICAgICAgIEtTWjk4OTNfVEFJTF9UQUdfT1ZFUlJJREUpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIGtzejk4OTNfbmV0ZGV2X29wcyA9IHsKQEAgLTM5OSw2ICYjNDM7Mzk3LDcwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMga3N6OTg5M19uZXRkZXZfb3BzID0gewogRFNBX1RBR19EUklWRVIoa3N6OTg5M19uZXRkZXZfb3BzKTsKIE1PRFVMRV9BTElBU19EU0FfVEFHX0RSSVZFUihEU0FfVEFHX1BST1RPX0tTWjk4OTMsIEtTWjk4OTNfTkFNRSk7CiAKJiM0MzsjZGVmaW5lIEtTWjg0NjNfVEFJTF9UQUdfUFJJTwkJR0VOTUFTSyg0LCAzKQomIzQzOyNkZWZpbmUgS1NaODQ2M19UQUlMX1RBR19FR19QT1JUX00JR0VOTUFTSygyLCAwKQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqa3N6ODQ2M194bWl0KHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJdTE2IHF1ZXVlX21hcHBpbmcgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKJiM0MzsJdTggcHJpbyA9IG5ldGRldl90eHFfdG9fdGMoZGV2LCBxdWV1ZV9tYXBwaW5nKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGtzel9jb21tb25feG1pdChza2IsIGRldiwgZmFsc2UsCiYjNDM7CQkJICAgICAgIEZJRUxEX1BSRVAoS1NaODQ2M19UQUlMX1RBR19QUklPLCBwcmlvKSwKJiM0MzsJCQkgICAgICAgMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqa3N6ODQ2M19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBsZW4gPSBLU1pfRUdSRVNTX1RBR19MRU47CiYjNDM7CXN0cnVjdCBwdHBfaGVhZGVyICpwdHBfaGRyOwomIzQzOwl1bnNpZ25lZCBpbnQgcHRwX2NsYXNzOwomIzQzOwl1bnNpZ25lZCBpbnQgcG9ydDsKJiM0MzsJa3RpbWVfdCB0czsKJiM0MzsJdTggKnRhZzsKJiM0MzsKJiM0MzsJaWYgKHNrYl9saW5lYXJpemUoc2tiKSkgewomIzQzOwkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlLU1pfU0tCX0NCKHNrYiktJmd0O3RzdGFtcCA9IDA7CiYjNDM7CiYjNDM7CS8qIFRhZyBkZWNvZGluZyAqLwomIzQzOwl0YWcgPSBza2JfdGFpbF9wb2ludGVyKHNrYikgLSBLU1pfRUdSRVNTX1RBR19MRU47CiYjNDM7CXBvcnQgPSB0YWdbMF0gJmFtcDsgS1NaODQ2M19UQUlMX1RBR19FR19QT1JUX007CiYjNDM7CiYjNDM7CV9fc2tiX3B1c2goc2tiLCBFVEhfSExFTik7CiYjNDM7CXB0cF9jbGFzcyA9IHB0cF9jbGFzc2lmeV9yYXcoc2tiKTsKJiM0MzsJX19za2JfcHVsbChza2IsIEVUSF9ITEVOKTsKJiM0MzsJaWYgKHB0cF9jbGFzcyA9PSBQVFBfQ0xBU1NfTk9ORSkKJiM0MzsJCWdvdG8gY29tbW9uX3JjdjsKJiM0MzsKJiM0MzsJcHRwX2hkciA9IHB0cF9wYXJzZV9oZWFkZXIoc2tiLCBwdHBfY2xhc3MpOwomIzQzOwlpZiAocHRwX2hkcikgewomIzQzOwkJdHMgPSBrc3pfZGVjb2RlX3RzdGFtcChnZXRfdW5hbGlnbmVkX2JlMzIoJmFtcDtwdHBfaGRyLSZndDtyZXNlcnZlZDIpKTsKJiM0MzsJCUtTWl9TS0JfQ0Ioc2tiKS0mZ3Q7dHN0YW1wID0gdHM7CiYjNDM7CQlwdHBfaGRyLSZndDtyZXNlcnZlZDIgPSAwOwomIzQzOwl9CiYjNDM7CiYjNDM7Y29tbW9uX3JjdjoKJiM0MzsJcmV0dXJuIGtzel9jb21tb25fcmN2KHNrYiwgZGV2LCBwb3J0LCBsZW4pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIGtzejg0NjNfbmV0ZGV2X29wcyA9IHsKJiM0MzsJLm5hbWUJPSBLU1o4NDYzX05BTUUsCiYjNDM7CS5wcm90bwk9IERTQV9UQUdfUFJPVE9fS1NaODQ2MywKJiM0MzsJLnhtaXQJPSBrc3o4NDYzX3htaXQsCiYjNDM7CS5yY3YJPSBrc3o4NDYzX3JjdiwKJiM0MzsJLmNvbm5lY3QgPSBrc3pfY29ubmVjdCwKJiM0MzsJLmRpc2Nvbm5lY3QgPSBrc3pfZGlzY29ubmVjdCwKJiM0MzsJLm5lZWRlZF90YWlscm9vbSA9IEtTWl9JTkdSRVNTX1RBR19MRU4sCiYjNDM7fTsKJiM0MzsKJiM0MztEU0FfVEFHX0RSSVZFUihrc3o4NDYzX25ldGRldl9vcHMpOwomIzQzO01PRFVMRV9BTElBU19EU0FfVEFHX0RSSVZFUihEU0FfVEFHX1BST1RPX0tTWjg0NjMsIEtTWjg0NjNfTkFNRSk7CiYjNDM7CiAvKiBGb3IgeG1pdCwgMi82IGJ5dGVzIGFyZSBhZGRlZCBiZWZvcmUgRkNTLgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBEQSg2Ynl0ZXMpfFNBKDZieXRlcyl8Li4uLnxEYXRhKG5ieXRlcyl8dHMoNGJ5dGVzKXx0YWcwKDFieXRlKXx0YWcxKDFieXRlKXwKQEAgLTQ3MSw2ICYjNDM7NTMzLDcgQEAgRFNBX1RBR19EUklWRVIobGFuOTM3eF9uZXRkZXZfb3BzKTsKIE1PRFVMRV9BTElBU19EU0FfVEFHX0RSSVZFUihEU0FfVEFHX1BST1RPX0xBTjkzN1gsIExBTjkzN1hfTkFNRSk7CiAKIHN0YXRpYyBzdHJ1Y3QgZHNhX3RhZ19kcml2ZXIgKmRzYV90YWdfZHJpdmVyX2FycmF5W10gPSB7CiYjNDM7CSZhbXA7RFNBX1RBR19EUklWRVJfTkFNRShrc3o4NDYzX25ldGRldl9vcHMpLAogCSZhbXA7RFNBX1RBR19EUklWRVJfTkFNRShrc3o4Nzk1X25ldGRldl9vcHMpLAogCSZhbXA7RFNBX1RBR19EUklWRVJfTkFNRShrc3o5NDc3X25ldGRldl9vcHMpLAogCSZhbXA7RFNBX1RBR19EUklWRVJfTkFNRShrc3o5ODkzX25ldGRldl9vcHMpLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTM3OAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDQ0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIEZ1enphYmlsaXR5IG9mIHRoZSBLU1o4NDYzIFN3aXRjaCBTdXBwb3J0IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBLU1o4NDYzIHN3aXRjaCBmZWF0dXJlcywgc3BlY2lmaWNhbGx5IHRoZSBJUlEsIFBUUCwgYW5kIERTQSB0YWcgcHJvdG9jb2wuIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZXMgYXJlIGluIHRoZSB1c3VhbCBwbGFjZXM6IGBrc3o4LmNgLCBga3N6X2NvbW1vbi5jYCwgYGtzel9wdHAuY2AsIGBuZXQvZHNhL3RhZ19rc3ouY2AsIGFsbCByZWxhdGVkIHRvIHRoaXMgTWljcm9jaGlwIEtTWjg0NjMgRFNBIHN3aXRjaCBkcml2ZXIuIEl0IGFkZHMgYSBuZXcgYERTQV9UQUdfUFJPVE9fS1NaODQ2M2AsIElSUSwgYW5kIFBUUCBzdXBwb3J0IOKAkyBuaWNlLiBCdXQgdGhlIG1pbGxpb24tZG9sbGFyIHF1ZXN0aW9uIGlzOiBjYW4gdGhpcyBiZSAqcmVhY2hlZCogZWZmZWN0aXZlbHkgZm9yIGZ1enppbmc/CgpOb3JtYWxseSwgRFNBIHN3aXRjaGVzIHJlcXVpcmUgdGhlIHJlYWwgaGFyZHdhcmUgY29ubmVjdGlvbiwgbGlrZSBJMkMsIFNQSSwgb3IgTURJTywgdG8gdGhlIHN3aXRjaCBjaGlwLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nLCAmIzM0O0NhbiB0aGlzIGJlIGVtdWxhdGVkIGluIFFFTVU/JiMzNDsgSG1tLCBubywgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoZSBLU1o4NDYzLiBPa2F5LCBidXQgY2FuIGl0IGJlICpmdXp6ZWQqPyBMZXQmIzM5O3Mgc2VlLi4uCgpJJiMzOTttIHJlbWVtYmVyaW5nIHRoZSBwcm9tcHQgYWJvdXQgV29ydGhGdXp6aW5nIGFuZCB3aGF0JiMzOTtzIGV4cGxpY2l0bHkgZXhjbHVkZWQuIFNwZWNpZmljYWxseSwgJiMzNDt2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSYjMzQ7LiBBbHJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBCdXQgd2hhdCBhYm91dCBEU0Egc3dpdGNoZXMgY29ubmVjdGVkIHZpYSBNRElPIG9yIFNQST8gVGhpcyBpcyB0aGUgY29yZSBpc3N1ZS4KCkNhbiBTeXprYWxsZXIgZnV6eiBNRElPL1NQSSBkZXZpY2VzPyBJICp0aGluayogU3l6a2FsbGVyIGNhbiBmdXp6IEkyQy9TUEkgdmlhIGAvZGV2L2kyYy0qYCBhbmQgYC9kZXYvc3BpZGV2YCwgYnV0IHRoYXQgcmVxdWlyZXMgdGhlIGRldmljZSB0byBiZSBwcm9iZWQuIFRoYXQmIzM5O3MgdGhlIGNydXggb2YgdGhlIHByb2JsZW0uIFdhaXQsIGRvZXMgU3l6a2FsbGVyICpoYXZlKiBzb21lIGtpbmQgb2YgSTJDL1NQSSBpbmplY3Rpb24/IE5vLCBJIHRoaW5rIGl0IHVzZXMgdmlydHVhbCBkZXZpY2VzIG9yIG1vY2tzLCBidXQgZm9yIERTQSBzd2l0Y2hlcywgdGhhdCYjMzk7cyB0eXBpY2FsbHkgZGlmZmljdWx0IHVubGVzcyB0aGVyZSYjMzk7cyBhIGdvb2QgbW9jayBpbXBsZW1lbnRhdGlvbi4KClNvLCB0aGUga2V5IGlzIHRvIHNlZSBpZiB3ZSBjYW4gdHJpZ2dlciBhbnkgb2YgdGhlIGtleSBmdW5jdGlvbnMgaW4gdGhpcyBkcml2ZXIsIGxpa2UgYGtzejg0NjNfc2V0dXBgIG9yIGBrc3o4NDYzX3htaXRgLiBJJiMzOTtsbCBkbyBhIHF1aWNrIHNlYXJjaCBpbiB0aGUga2VybmVsIHNvdXJjZSB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW4gb2J2aW91cyB3YXkgdG8gcmVhY2ggdGhlbS4gR290dGEgZmlndXJlIG91dCBpZiB0aGVyZSBpcyBhIHBhdGggdG8gZ2V0IHRoaXMgY29kZSB0byBleGVjdXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tzejg0NjMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDU0NCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWljcm9jaGlwLGtzei55YW1sPTEzPXByb3BlcnRpZXM6XG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWljcm9jaGlwLGtzei55YW1sLTE3LSAgICBlbnVtOlxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWljcm9jaGlwLGtzei55YW1sOjE4OiAgICAgIC0gbWljcm9jaGlwLGtzejg0NjNcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21pY3JvY2hpcCxrc3oueWFtbC0xOS0gICAgICAtIG1pY3JvY2hpcCxrc3o4NzY1XG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWljcm9jaGlwLGtzei55YW1sPTExNT1hbGxPZjpcbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9taWNyb2NoaXAsa3N6LnlhbWwtMTUzLSAgICAgICAgICBjb250YWluczpcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21pY3JvY2hpcCxrc3oueWFtbDoxNTQ6ICAgICAgICAgICAgY29uc3Q6IG1pY3JvY2hpcCxrc3o4NDYzXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9taWNyb2NoaXAsa3N6LnlhbWwtMTU1LSAgICB0aGVuOlxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTE4ND1zdGF0aWMgaW50IGtzejhfcG1lX3B3cml0ZTgoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsIGludCBvZmZzZXQsIHU4IGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMTkwLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MTkxOnN0YXRpYyB2b2lkIGtzejg0NjNfaXJxX21hc2soc3RydWN0IGlycV9kYXRhICpkKVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMTkyLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xOTctXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoxOTg6c3RhdGljIHZvaWQga3N6ODQ2M19pcnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZClcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTE5OS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjA0LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MjA1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaXJxX2NoaXAga3N6ODQ2M19pcnFfY2hpcCA9IHtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjIwNjpcdC5uYW1lXHRcdFx0PSBcJiMzNDtrc3o4NDYzLWlycVwmIzM0OyxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjIwNzpcdC5pcnFfbWFza1x0XHQ9IGtzejg0NjNfaXJxX21hc2ssXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyMDg6XHQuaXJxX3VubWFza1x0XHQ9IGtzejg0NjNfaXJxX3VubWFzayxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTIwOS1cdC5pcnFfYnVzX2xvY2tcdFx0PSBrc3pfaXJxX2J1c19sb2NrLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTIxMi1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjIxMzpzdGF0aWMgaW50IGtzejg0NjNfaXJxX2RvbWFpbl9tYXAoc3RydWN0IGlycV9kb21haW4gKmQsXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yMTQtXHRcdFx0XHQgIHVuc2lnbmVkIGludCBpcnEsIGlycV9od19udW1iZXJfdCBod2lycSlcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yMTYtXHRpcnFfc2V0X2NoaXBfZGF0YShpcnEsIGQtXHUwMDNlaG9zdF9kYXRhKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjIxNzpcdGlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsIFx1MDAyNmtzejg0NjNfaXJxX2NoaXAsIGhhbmRsZV9sZXZlbF9pcnEpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjE4LVx0aXJxX3NldF9ub3Byb2JlKGlycSk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjIyLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MjIzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgaXJxX2RvbWFpbl9vcHMga3N6ODQ2M19pcnFfZG9tYWluX29wcyA9IHtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjIyNDpcdC5tYXBcdD0ga3N6ODQ2M19pcnFfZG9tYWluX21hcCxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTIyNS1cdC54bGF0ZVx0PSBpcnFfZG9tYWluX3hsYXRlX3R3b2NlbGwsXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjI3LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MjI4OnN0YXRpYyBpbnQga3N6ODQ2M19naXJxX3NldHVwKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yMjkte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTIzNS1cdGdpcnEtXHUwMDNlbWFza2VkID0gMDtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjIzNjpcdHNucHJpbnRmKGdpcnEtXHUwMDNlbmFtZSwgc2l6ZW9mKGdpcnEtXHUwMDNlbmFtZSksIFwmIzM0O2tzejg0NjMtZ2lycVwmIzM0Oyk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yMzctXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjM5LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MjQwOlx0cmV0dXJuIGtzel9pcnFfY29tbW9uX3NldHVwKGRldiwgZ2lycSwgXHUwMDI2a3N6ODQ2M19pcnFfZG9tYWluX29wcyk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yNDEtfVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjQyLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MjQzOnN0YXRpYyBpbnQga3N6ODQ2M19yZXNldF9zd2l0Y2goc3RydWN0IGtzel9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI0NC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9MzI2PXN0YXRpYyBpbnQga3N6OF9wb3J0X3F1ZXVlX3NwbGl0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LCBpbnQgcXVldWVzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTM0OS1cdFx0XHRyZXR1cm4gcmV0O1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MzUwOlx0fSBlbHNlIGlmIChrc3pfaXNfa3N6ODQ2MyhkZXYpKSB7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0zNTEtXHRcdG1hc2tfNHEgPSBLU1o4ODczX1BPUlRfNFFVRVVFX1NQTElUX0VOO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTE0ODk9c3RhdGljIHZvaWQga3N6OF9jZmdfcG9ydF9tZW1iZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsIHU4IG1lbWJlcilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xNDkzLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MTQ5NDpcdGlmIChrc3pfaXNfa3N6ODQ2MyhkZXYpKVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMTQ5NS1cdFx0b2Zmc2V0ID0gUDFDUjI7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9MTUwMj1zdGF0aWMgdm9pZCBrc3o4X2ZsdXNoX2R5bl9tYWNfdGFibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xNTI2LVx0fVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MTUyNzpcdGlmIChrc3pfaXNfa3N6ODQ2MyhkZXYpKSB7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xNTI4LVx0XHRyZWcgPSBLU1o4NDYzX0ZMVVNIX1RBQkxFX0NUUkw7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9MTY4OT1zdGF0aWMgdm9pZCBrc3o4X3BvcnRfZW5hYmxlX3B2aWQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsIGJvb2wgc3RhdGUpXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xNjkwLXtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjE2OTE6XHRpZiAoa3N6X2lzX2tzejg4eDMoZGV2KSB8fCBrc3pfaXNfa3N6ODQ2MyhkZXYpKSB7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xNjkyLVx0XHRpbnQgcmVnID0gUkVHX1NXX0lOU0VSVF9TUkNfUFZJRDtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTE2OTMtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoxNjk0Olx0XHRpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSlcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTE2OTUtXHRcdFx0cmVnID0gS1NaODQ2M19SRUdfU1dfQ1RSTF85O1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTE4MDg9c3RhdGljIGludCBrc3o4X3BvcnRfbWlycm9yX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTE4MTQtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoxODE1Olx0aWYgKGtzel9pc19rc3o4NDYzKGRldikpXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xODE2LVx0XHRvZmZzZXQgPSBQMUNSMjtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYz0xODM1PXN0YXRpYyB2b2lkIGtzejhfcG9ydF9taXJyb3JfZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMTg0MS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjE4NDI6XHRpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSlcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTE4NDMtXHRcdG9mZnNldCA9IFAxQ1IyO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTE4NTgtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoxODU5OnN0YXRpYyB1OCBrc3o4NDYzX3RjX2N0cmwoaW50IHBvcnQsIGludCBxdWV1ZSlcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTE4NjAte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTE4ODk9c3RhdGljIGludCBrc3o4OHgzX3RjX2V0c19hZGQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMTkwNC1cdFx0cmVnID0gS1NaODg3M19UWFFfU1BMSVRfQ1RSTF9SRUcocG9ydCwgcXVldWUpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MTkwNTpcdFx0aWYgKGtzel9pc19rc3o4NDYzKGRldikpXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoxOTA2Olx0XHRcdHJlZyA9IGtzejg0NjNfdGNfY3RybChwb3J0LCBxdWV1ZSk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xOTA3LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTE5MzA9c3RhdGljIGludCBrc3o4OHgzX3RjX2V0c19kZWwoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMTk0MS1cdFx0cmVnID0gS1NaODg3M19UWFFfU1BMSVRfQ1RSTF9SRUcocG9ydCwgcXVldWUpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MTk0MjpcdFx0aWYgKGtzel9pc19rc3o4NDYzKGRldikpXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoxOTQzOlx0XHRcdHJlZyA9IGtzejg0NjNfdGNfY3RybChwb3J0LCBxdWV1ZSk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xOTQ0LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTE5NTc9c3RhdGljIGludCBrc3o4X3RjX3NldHVwX3FkaXNjX2V0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTE5NjItXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoxOTYzOlx0aWYgKCEoa3N6X2lzX2tzejg4eDMoZGV2KSB8fCBrc3pfaXNfa3N6ODQ2MyhkZXYpKSlcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTE5NjQtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYz0yMDI4PXN0YXRpYyB2b2lkIGtzejhfcG9ydF9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgYm9vbCBjcHVfcG9ydClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yMDM5LVx0b2Zmc2V0ID0gUF9CQ0FTVF9TVE9STV9DVFJMO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MjA0MDpcdGlmIChrc3pfaXNfa3N6ODQ2MyhkZXYpKVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjA0MS1cdFx0b2Zmc2V0ID0gUDFDUjE7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjA0Ny1cdG9mZnNldCA9IFBfODAyXzFQX0NUUkw7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyMDQ4Olx0aWYgKGtzel9pc19rc3o4NDYzKGRldikpXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yMDQ5LVx0XHRvZmZzZXQgPSBQMUNSMjtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYz0yMDc5PXN0YXRpYyB2b2lkIGtzejg4eDNfY29uZmlnX3JtaWlfY2xrKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjA5My1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjIwOTQ6c3RhdGljIHZvaWQga3N6ODQ2M19jb25maWdfY3B1X3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjA5NS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9MjMzNj1zdGF0aWMgdm9pZCBrc3o4OHh4X3JfbWliX3N0YXRzNjQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjM4NC1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjIzODU6c3RhdGljIGludCBrc3o4NDYzX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTIzODYte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTIzOTktXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyNDAwOlx0cmV0ID0ga3N6ODQ2M19yZXNldF9zd2l0Y2goZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI0MDEtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjQxMy1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjI0MTQ6XHRrc3o4NDYzX2NvbmZpZ19jcHVfcG9ydChkcyk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yNDE1LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI0NzItXHRpZiAoZGV2LVx1MDAzZWlycSBcdTAwM2UgMCkge1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MjQ3MzpcdFx0cmV0ID0ga3N6ODQ2M19naXJxX3NldHVwKGRldik7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yNDc0LVx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI0NzYtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyNDc3Olx0XHRyZXQgPSBrc3o4NDYzX3B0cF9pcnFfc2V0dXAoZHMpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjQ3OC1cdFx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yNTA5LVx0aWYgKGRldi1cdTAwM2VpcnEgXHUwMDNlIDApXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyNTEwOlx0XHRrc3o4NDYzX3B0cF9pcnFfZnJlZShkcyk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yNTExLWZyZWVfZ2lycTpcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yNTE3LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MjUxODpzdGF0aWMgdm9pZCBrc3o4NDYzX3RlYXJkb3duKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI1MTkte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI1MjMtXHRcdGtzel9wdHBfY2xvY2tfdW5yZWdpc3Rlcihkcyk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyNTI0Olx0XHRrc3o4NDYzX3B0cF9pcnFfZnJlZShkcyk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yNTI1LVx0XHRrc3pfaXJxX2ZyZWUoXHUwMDI2ZGV2LVx1MDAzZWdpcnEpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTI4NDE9c3RhdGljIHUzMiBrc3o4X2dldF9wb3J0X2FkZHIoaW50IHBvcnQsIGludCBvZmZzZXQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjg0NS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjI4NDY6c3RhdGljIHUzMiBrc3o4NDYzX2dldF9wb3J0X2FkZHIoaW50IHBvcnQsIGludCBvZmZzZXQpXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yODQ3LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yODUzLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6Mjg1NDpzdGF0aWMgdTE2IGtzejg0NjNfZ2V0X3BoeV9hZGRyKHUxNiBwaHksIHUxNiByZWcsIHUxNiBvZmZzZXQpXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yODU1LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yODU4LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6Mjg1OTpzdGF0aWMgaW50IGtzejg0NjNfcl9waHkoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTE2IHBoeSwgdTE2IHJlZywgdTE2ICp2YWwpXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yODYwLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yODY4LVx0Y2FzZSBNSUlfUEhZU0lEMTpcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjI4Njk6XHRcdHN3X3JlZyA9IGtzejg0NjNfZ2V0X3BoeV9hZGRyKHBoeSwgMCwgUEhZMUlIUik7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yODcwLVx0XHRicmVhaztcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI4NzEtXHRjYXNlIE1JSV9QSFlTSUQyOlxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6Mjg3MjpcdFx0c3dfcmVnID0ga3N6ODQ2M19nZXRfcGh5X2FkZHIocGh5LCAwLCBQSFkxSUxSKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI4NzMtXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI4NzctXHRjYXNlIE1JSV9MUEE6XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyODc4Olx0XHRzd19yZWcgPSBrc3o4NDYzX2dldF9waHlfYWRkcihwaHksIHJlZywgUDFNQkNSKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI4NzktXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI4OTgtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyODk5OnN0YXRpYyBpbnQga3N6ODQ2M19waHlfcmVhZDE2KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IGFkZHIsIGludCByZWcpXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yOTAwLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yOTA0LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MjkwNTpcdHJldCA9IGtzejg0NjNfcl9waHkoZGV2LCBhZGRyLCByZWcsIFx1MDAyNnZhbCk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yOTA2LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yOTExLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MjkxMjpzdGF0aWMgaW50IGtzejg0NjNfd19waHkoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTE2IHBoeSwgdTE2IHJlZywgdTE2IHZhbClcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI5MTMte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI5MjUtXHRjYXNlIE1JSV9BRFZFUlRJU0U6XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyOTI2Olx0XHRzd19yZWcgPSBrc3o4NDYzX2dldF9waHlfYWRkcihwaHksIHJlZywgUDFNQkNSKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI5MjctXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI5MzktXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyOTQwOnN0YXRpYyBpbnQga3N6ODQ2M19waHlfd3JpdGUxNihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBhZGRyLCBpbnQgcmVnLCB1MTYgdmFsKVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjk0MS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjk0NC1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjI5NDU6XHRyZXQgPSBrc3o4NDYzX3dfcGh5KGRldiwgYWRkciwgcmVnLCB2YWwpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjk0Ni1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9Mjk3MD1zdGF0aWMgaW50IGtzejhfc3dpdGNoX2luaXQoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yOTc4LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6Mjk3OTpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGtzejg0NjNfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yOTgwLVx0XHRcdFx0XHRcdCAgICAgIGludCBwb3J0LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI5ODUtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyOTg2OnN0YXRpYyBpbnQga3N6ODQ2M19jb25uZWN0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yOTg3LVx0XHRcdFx0XHRlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG8pXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9MzA2Nz1jb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzIGtzejhfcGh5bGlua19tYWNfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTMwNzQtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzozMDc1OmNvbnN0IHN0cnVjdCBrc3pfZGV2X29wcyBrc3o4NDYzX2Rldl9vcHMgPSB7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzozMDc2Olx0LmdldF9wb3J0X2FkZHIgPSBrc3o4NDYzX2dldF9wb3J0X2FkZHIsXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0zMDc3LVx0LmNmZ19wb3J0X21lbWJlciA9IGtzejhfY2ZnX3BvcnRfbWVtYmVyLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTMxMDA9Y29uc3Qgc3RydWN0IGtzel9kZXZfb3BzIGtzejg4eHhfZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0zMTEzLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MzExNDpjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODQ2M19zd2l0Y2hfb3BzID0ge1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MzExNTpcdC5nZXRfdGFnX3Byb3RvY29sXHQ9IGtzejg0NjNfZ2V0X3RhZ19wcm90b2NvbCxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjMxMTY6XHQuY29ubmVjdF90YWdfcHJvdG9jb2wgICA9IGtzejg0NjNfY29ubmVjdF90YWdfcHJvdG9jb2wsXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzozMTE3Olx0LnNldHVwXHRcdFx0PSBrc3o4NDYzX3NldHVwLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MzExODpcdC50ZWFyZG93blx0XHQ9IGtzejg0NjNfdGVhcmRvd24sXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzozMTE5Olx0LnBoeV9yZWFkXHRcdD0ga3N6ODQ2M19waHlfcmVhZDE2LFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MzEyMDpcdC5waHlfd3JpdGVcdFx0PSBrc3o4NDYzX3BoeV93cml0ZTE2LFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMzEyMS1cdC5waHlsaW5rX2dldF9jYXBzXHQ9IGtzejhfcGh5bGlua19nZXRfY2Fwcyxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0zMTQ1LVx0LnJlc3VtZVx0XHRcdD0ga3N6X3Jlc3VtZSxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjMxNDY6XHQuZ2V0X3RzX2luZm9cdFx0PSBrc3o4NDYzX2dldF90c19pbmZvLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMzE0Ny1cdC5wb3J0X2h3dHN0YW1wX2dldFx0PSBrc3pfaHd0c3RhbXBfZ2V0LFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MzE0ODpcdC5wb3J0X2h3dHN0YW1wX3NldFx0PSBrc3o4NDYzX2h3dHN0YW1wX3NldCxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTMxNDktXHQucG9ydF90eHRzdGFtcFx0XHQ9IGtzel9wb3J0X3R4dHN0YW1wLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5oLTE0LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4Lmg6MTU6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBrc3pfZGV2X29wcyBrc3o4NDYzX2Rldl9vcHM7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguaC0xNi1leHRlcm4gY29uc3Qgc3RydWN0IGtzel9kZXZfb3BzIGtzejg3eHhfZGV2X29wcztcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguaD0xOT1leHRlcm4gY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyBrc3o4X3BoeWxpbmtfbWFjX29wcztcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5oOjIwOmV4dGVybiBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODQ2M19zd2l0Y2hfb3BzO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmgtMjEtZXh0ZXJuIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBrc3o4N3h4X3N3aXRjaF9vcHM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM9MTk1PWludCBrc3pfcGh5bGlua19tYWNfZW5hYmxlX3R4X2xwaShzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0yMDAtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzoyMDE6c3RhdGljIGNvbnN0IHUxNiBrc3o4NDYzX3JlZ3NbXSA9IHtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTIwMi1cdFtSRUdfU1dfTUFDX0FERFJdXHRcdD0gMHgxMCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0yMjctXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzoyMjg6c3RhdGljIGNvbnN0IHUzMiBrc3o4NDYzX21hc2tzW10gPSB7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0yMjktXHRbUE9SVF84MDJfMVBfUkVNQVBQSU5HXVx0XHQ9IEJJVCgzKSxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0yNDktXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzoyNTA6c3RhdGljIHU4IGtzejg0NjNfc2hpZnRzW10gPSB7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0yNTEtXHRbVkxBTl9UQUJMRV9NRU1CRVJTSElQX1NdXHQ9IDE2LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jPTExNDE9Y29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTExNTEtXHRcdC5udW1faXBtcyA9IDQsXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzoxMTUyOlx0XHQub3BzID0gXHUwMDI2a3N6ODQ2M19kZXZfb3BzLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM6MTE1MzpcdFx0LnN3aXRjaF9vcHMgPSBcdTAwMjZrc3o4NDYzX3N3aXRjaF9vcHMsXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0xMTU0LVx0XHQucGh5bGlua19tYWNfb3BzID0gXHUwMDI2a3N6ODh4M19waHlsaW5rX21hY19vcHMsXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMTE1Ny1cdFx0LnJlZ19taWJfY250ID0gTUlCX0NPVU5URVJfTlVNLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM6MTE1ODpcdFx0LnJlZ3MgPSBrc3o4NDYzX3JlZ3MsXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzoxMTU5Olx0XHQubWFza3MgPSBrc3o4NDYzX21hc2tzLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM6MTE2MDpcdFx0LnNoaWZ0cyA9IGtzejg0NjNfc2hpZnRzLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMTE2MS1cdFx0LnN1cHBvcnRzX21paSA9IHtmYWxzZSwgZmFsc2UsIHRydWV9LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jPTM1NjY9aW50IGtzel9zd2l0Y2hfbWFjYWRkcl9nZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0zNjAxLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgRVRIX0FMRU47IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzozNjAyOlx0XHRpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSkge1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMzYwMy1cdFx0XHR1MTYgYWRkcjE2ID0gKCh1MTYpYWRkcltpXSBcdTAwM2NcdTAwM2MgOCkgfCBhZGRyW2kgJiM0MzsgMV07XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM9MzgyMz1pbnQga3N6X2RyaXZlX3N0cmVuZ3RoX3dyaXRlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMzg2MS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jOjM4NjI6c3RhdGljIGludCBrc3o4NDYzX2NvbmZpZ3VyZV9zdHJhcHNfc3BpKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0zODYzLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0zODg4LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM6Mzg4OTpzdGF0aWMgaW50IGtzejg0NjNfcmVsZWFzZV9zdHJhcHNfc3BpKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0zODkwLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYz0zODk0PWludCBrc3pfc3dpdGNoX3JlZ2lzdGVyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMzkwOC1cdGlmIChkZXYtXHUwMDNlcmVzZXRfZ3Bpbykge1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM6MzkwOTpcdFx0aWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGRldi1cdTAwM2VkZXYtXHUwMDNlb2Zfbm9kZSwgXCYjMzQ7bWljcm9jaGlwLGtzejg0NjNcJiMzNDspKSB7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzozOTEwOlx0XHRcdHJldCA9IGtzejg0NjNfY29uZmlndXJlX3N0cmFwc19zcGkoZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTM5MTEtXHRcdFx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0zOTE5LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM6MzkyMDpcdFx0aWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGRldi1cdTAwM2VkZXYtXHUwMDNlb2Zfbm9kZSwgXCYjMzQ7bWljcm9jaGlwLGtzejg0NjNcJiMzNDspKSB7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzozOTIxOlx0XHRcdHJldCA9IGtzejg0NjNfcmVsZWFzZV9zdHJhcHNfc3BpKGRldik7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0zOTIyLVx0XHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmg9NTYzPXN0YXRpYyBpbmxpbmUgc3RydWN0IHJlZ21hcCAqa3N6X3JlZ21hcF8zMihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oLTU2Ny1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oOjU2ODpzdGF0aWMgaW5saW5lIGJvb2wga3N6X2lzX2tzejg0NjMoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oLTU2OS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmg9Nzk1PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19rc3o4KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmgtNzk3LVx0cmV0dXJuIGtzel9pc19rc3o4N3h4KGRldikgfHwga3N6X2lzX2tzejg4eDMoZGV2KSB8fFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmg6Nzk4Olx0ICAgICAgIGtzel9pc184ODk1X2ZhbWlseShkZXYpIHx8IGtzel9pc19rc3o4NDYzKGRldik7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaC03OTktfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oPTgwMT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfa3N6ODh4eChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oLTgwMy1cdHJldHVybiBrc3pfaXNfa3N6ODh4MyhkZXYpIHx8IGtzel9pc184ODk1X2ZhbWlseShkZXYpIHx8XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaDo4MDQ6XHQgICAgICAga3N6X2lzX2tzejg0NjMoZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oLTgwNS19XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmg9ODM3PXN0YXRpYyBpbmxpbmUgYm9vbCBrc3pfaXNfc2dtaWlfcG9ydChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaC0xMDM2LVx0XHQucGFkX2JpdHMgPSAocmVncGFkKSxcdFx0XHRcdFx0XFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oOjEwMzc6XHRcdC5yZWFkID0ga3N6ODQ2M19zcGlfcmVhZCxcdFx0XHRcdFxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaDoxMDM4Olx0XHQud3JpdGUgPSBrc3o4NDYzX3NwaV93cml0ZSxcdFx0XHRcdFxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaC0xMDM5LVx0XHQubWF4X3JlZ2lzdGVyID0gQklUKHJlZ2JpdHMpIC0gMSxcdFx0XHRcXFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2RjYi5jPTk2PXN0YXRpYyB2b2lkIGtzel9nZXRfZGVmYXVsdF9wb3J0X3ByaW9fcmVnKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCAqcmVnLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2RjYi5jLTEwMi1cdFx0KnNoaWZ0ID0gX19iZl9zaGYoS1NaOF9QT1JUX0JBU0VEX1BSSU9fTSk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9kY2IuYzoxMDM6XHRcdGlmIChrc3pfaXNfa3N6ODQ2MyhkZXYpKVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfZGNiLmMtMTA0LVx0XHRcdCpyZWcgPSBLU1o4NDYzX1JFR19QT1JUXzFfQ1RSTF8wO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2RjYi5jPTEyMj1zdGF0aWMgdm9pZCBrc3pfZ2V0X2RzY3BfcHJpb19yZWcoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50ICpyZWcsXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfZGNiLmMtMTI4LVx0XHQqbWFzayA9IEdFTk1BU0soMSwgMCk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9kY2IuYzoxMjk6XHR9IGVsc2UgaWYgKGtzel9pc19rc3o4OHgzKGRldikgfHwga3N6X2lzX2tzejg0NjMoZGV2KSkge1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfZGNiLmMtMTMwLVx0XHQqcmVnID0gS1NaODhYM19SRUdfVE9TX0RTQ1BfQ1RSTDtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9kY2IuYy0xMzItXHRcdCptYXNrID0gR0VOTUFTSygxLCAwKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2RjYi5jOjEzMzpcdFx0aWYgKGtzel9pc19rc3o4NDYzKGRldikpXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9kY2IuYy0xMzQtXHRcdFx0KnJlZyA9IEtTWjg0NjNfUkVHX1RPU19EU0NQX0NUUkw7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfZGNiLmM9MTUyPXN0YXRpYyB2b2lkIGtzel9nZXRfYXBwdHJ1c3RfbWFwX2FuZF9yZWcoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9kY2IuYy0xNTktXHRcdCptYXNrID0gS1NaOF9QT1JUX0RJRkZTRVJWX0VOQUJMRSB8IEtTWjhfUE9SVF84MDJfMVBfRU5BQkxFO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfZGNiLmM6MTYwOlx0XHRpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSlcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2RjYi5jLTE2MS1cdFx0XHQqcmVnID0gS1NaODQ2M19SRUdfUE9SVF8xX0NUUkxfMDtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYz0yNzE9c3RhdGljIGludCBrc3pfcHRwX2VuYWJsZV9tb2RlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMjk5LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmM6MzAwOmludCBrc3o4NDYzX2dldF90c19pbmZvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy0zMDEtXHRcdFx0c3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKnRzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jPTM1Nz1pbnQga3N6X2h3dHN0YW1wX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTM2OC1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jOjM2OTpzdGF0aWMgaW50IGtzejg0NjNfc2V0X2h3dHN0YW1wX2NvbmZpZyhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMzcwLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBrc3pfcG9ydCAqcHJ0LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTQxNS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jOjQxNjppbnQga3N6ODQ2M19od3RzdGFtcF9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTQxNy1cdFx0XHQgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZyxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy00MjUtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYzo0MjY6XHRyZXQgPSBrc3o4NDYzX3NldF9od3RzdGFtcF9jb25maWcoZGV2LCBwcnQsIGNvbmZpZyk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy00MjctXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jPTY0Nz1zdGF0aWMgdm9pZCBrc3pfcHRwX3R4dHN0YW1wX3NrYihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTY2NC1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jOjY2NTpzdGF0aWMgdm9pZCBrc3o4NDYzX3NldF9wZGVsYXlyZXNwX2ZsYWcoc3RydWN0IGtzel9wb3J0ICpwcnQsXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy02NjYtXHRcdFx0XHRcdHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtNjcxLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmM6NjcyOlx0aWYgKCFrc3pfaXNfa3N6ODQ2MyhwcnQtXHUwMDNla3N6X2RldikpXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy02NzMtXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYz02OTA9dm9pZCBrc3pfcG9ydF9kZWZlcnJlZF94bWl0KHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtNzA1LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmM6NzA2Olx0a3N6ODQ2M19zZXRfcGRlbGF5cmVzcF9mbGFnKHBydCwgc2tiKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTcwNy1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYz0xMDk4PXN0YXRpYyBpbnQga3N6X3JlYWRfdHMoc3RydWN0IGtzel9wb3J0ICpwb3J0LCB1MTYgcmVnLCB1MzIgKnRzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTExMDYtXHQgKi9cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jOjExMDc6XHRpZiAoa3N6X2lzX2tzejg0NjMocG9ydC1cdTAwM2Vrc3pfZGV2KSkge1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMTEwOC1cdFx0Y29uc3Qgc3RydWN0IGtzel9kZXZfb3BzICpvcHMgPSBwb3J0LVx1MDAzZWtzel9kZXYtXHUwMDNlZGV2X29wcztcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYz0xMjQ1PXN0YXRpYyBpbnQga3N6X3B0cF9tc2dfaXJxX3NldHVwKHN0cnVjdCBrc3pfcG9ydCAqcG9ydCwgdTggbilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy0xMjc0LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmM6MTI3NTpzdGF0aWMgaW50IGtzejg0NjNfcHRwX3BvcnRfaXJxX3NldHVwKHN0cnVjdCBrc3pfaXJxICpwdHBpcnEsXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy0xMjc2LVx0XHRcdFx0ICAgICAgc3RydWN0IGtzel9wb3J0ICpwb3J0LCBpbnQgaHdfaXJxKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTEzMTgtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYzoxMzE5OnN0YXRpYyB2b2lkIGtzejg0NjNfcHRwX3BvcnRfaXJxX3RlYXJkb3duKHN0cnVjdCBrc3pfcG9ydCAqcG9ydClcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTEzMjAte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTEzMjYtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYzoxMzI3OmludCBrc3o4NDYzX3B0cF9pcnFfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMTMyOC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMTM1Ni1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jOjEzNTc6XHRyZXQgPSBrc3o4NDYzX3B0cF9wb3J0X2lycV9zZXR1cChwdHBpcnEsIHBvcnQxLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMTM1OC1cdFx0XHRcdFx0IEtTWjg0NjNfUFRQX1BPUlQxX0lOVF9TVEFSVCAtIEtTWjg0NjNfUFRQX0lOVF9TVEFSVCk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMTM2MS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jOjEzNjI6XHRyZXQgPSBrc3o4NDYzX3B0cF9wb3J0X2lycV9zZXR1cChwdHBpcnEsIHBvcnQyLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMTM2My1cdFx0XHRcdFx0IEtTWjg0NjNfUFRQX1BPUlQyX0lOVF9TVEFSVCAtIEtTWjg0NjNfUFRQX0lOVF9TVEFSVCk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMTM3NC1mcmVlX3BvcnQyOlxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmM6MTM3NTpcdGtzejg0NjNfcHRwX3BvcnRfaXJxX3RlYXJkb3duKHBvcnQyKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTEzNzYtZnJlZV9wb3J0MTpcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jOjEzNzc6XHRrc3o4NDYzX3B0cF9wb3J0X2lycV90ZWFyZG93bihwb3J0MSk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy0xMzc4LXJlbGVhc2VfZG9tYWluOlxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTEzODMtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYzoxMzg0OnZvaWQga3N6ODQ2M19wdHBfaXJxX2ZyZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMTM4NS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMTM5MS1cdGZyZWVfaXJxKHB0cGlycS1cdTAwM2VpcnFfbnVtLCBwdHBpcnEpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmM6MTM5MjpcdGtzejg0NjNfcHRwX3BvcnRfaXJxX3RlYXJkb3duKHBvcnQyKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jOjEzOTM6XHRrc3o4NDYzX3B0cF9wb3J0X2lycV90ZWFyZG93bihwb3J0MSk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy0xMzk0LVx0aXJxX2RvbWFpbl9yZW1vdmUocHRwaXJxLVx1MDAzZWRvbWFpbik7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg9NDA9aW50IGtzel9nZXRfdHNfaW5mbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmgtNDEtXHRcdCAgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqdHMpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg6NDI6aW50IGtzejg0NjNfZ2V0X3RzX2luZm8oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oLTQzLVx0XHRcdHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICp0cyk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg9NDY9aW50IGtzel9od3RzdGFtcF9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC00OC1cdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg6NDk6aW50IGtzejg0NjNfaHd0c3RhbXBfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC01MC1cdFx0XHQgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZyxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaD01Nz12b2lkIGtzel9wdHBfaXJxX2ZyZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCB1OCBwKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oOjU4OmludCBrc3o4NDYzX3B0cF9pcnFfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oOjU5OnZvaWQga3N6ODQ2M19wdHBfaXJxX2ZyZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oLTYwLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oPTgwPXN0YXRpYyBpbmxpbmUgdm9pZCBrc3pfcHRwX2lycV9mcmVlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgdTggcCkge31cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oLTgxLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg6ODI6c3RhdGljIGlubGluZSBpbnQga3N6ODQ2M19wdHBfaXJxX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oLTgzLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC04Ni1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oOjg3OnN0YXRpYyBpbmxpbmUgdm9pZCBrc3o4NDYzX3B0cF9pcnFfZnJlZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpIHt9XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC04OC1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oLTg5LSNkZWZpbmUga3N6X2dldF90c19pbmZvIE5VTExcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oOjkwOiNkZWZpbmUga3N6ODQ2M19nZXRfdHNfaW5mbyBOVUxMXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC05MS1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC05NC0jZGVmaW5lIGtzel9od3RzdGFtcF9zZXQgTlVMTFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg6OTU6I2RlZmluZSBrc3o4NDYzX2h3dHN0YW1wX3NldCBOVUxMXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC05Ni1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYz00MT1LU1pfUkVHTUFQX1RBQkxFKGtzejk0NzcsIDMyLCBLU1o5NDc3X1NQSV9BRERSX1NISUZULFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jLTQzLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmM6NDQ6c3RhdGljIHUxNiBrc3o4NDYzX3JlZyh1MTYgcmVnLCBzaXplX3Qgc2l6ZSlcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jLTQ1LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYy02MC1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jOjYxOnN0YXRpYyBpbnQga3N6ODQ2M19zcGlfcmVhZCh2b2lkICpjb250ZXh0LFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmMtNjItXHRcdFx0ICAgIGNvbnN0IHZvaWQgKnJlZywgc2l6ZV90IHJlZ19zaXplLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jLTczLVx0bWVtY3B5KFx1MDAyNmNtZCwgcmVnLCBzaXplb2YodTE2KSk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYzo3NDpcdGNtZCA9IGtzejg0NjNfcmVnKGNtZCwgdmFsX3NpemUpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmMtNzUtXHQvKiBTUEkgY29tbWFuZCB1c2VzIGJpZy1lbmRpYW4gZm9ybWF0LiAqL1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jLTk2LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmM6OTc6c3RhdGljIGludCBrc3o4NDYzX3NwaV93cml0ZSh2b2lkICpjb250ZXh0LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgY291bnQpXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYy05OC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmMtMTA4LVx0bWVtY3B5KFx1MDAyNmNtZCwgZGF0YSwgc2l6ZW9mKHUxNikpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmM6MTA5Olx0Y21kID0ga3N6ODQ2M19yZWcoY21kLCB2YWxfc2l6ZSk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYy0xMTAtXHRjbWQgfD0gKDEgXHUwMDNjXHUwMDNjIChLU1o4NDYzX1NQSV9BRERSX1NISUZUICYjNDM7IEtTWjg0NjNfU1BJX1RVUk5BUk9VTkRfU0hJRlQpKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYy0xMzMtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYzoxMzQ6S1NaODQ2M19SRUdNQVBfVEFCTEUoa3N6ODQ2MywgS1NaODQ2M19TUElfQUREUl9TSElGVCwgMCxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jLTEzNS1cdFx0ICAgICBLU1o4NDYzX1NQSV9BRERSX0FMSUdOKTtcbi0tXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzQ0OAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDUwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIEZ1enphYmlsaXR5IG9mIGEgRFNBIFN3aXRjaCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHRvdWNoZXMgYSBmZXcgZmlsZXM6IGBrc3o4LmNgLCBga3N6X2NvbW1vbi5jYCwgYGtzel9wdHAuY2AsIGFuZCBgdGFnX2tzei5jYC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciBJIGNhbiBldmVuICpyZWFjaCogdGhpcyBjb2RlIHdpdGhpbiB0aGUgUUVNVSBlbnZpcm9ubWVudC4gRFNBIHN3aXRjaGVzLCBpbiBnZW5lcmFsLCBuZWVkIGEgaGFyZHdhcmUgZGV2aWNlIHRvIGJlIHByb2JlZC4gVGhlIE1pY3JvY2hpcCBkcml2ZXJzIGFyZSBga3N6X3NwaS5jYCwgYGtzel9pMmMuY2AsIG9yIGBrc3pfbWRpby5jYC4KCk5vdywgbGV0JiMzOTtzIHNlZSwgd2hhdCBkb2VzIHRoZSBwcm9tcHQgc2F5PyAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSYjMzQ7LiBJdCBkb2VzbiYjMzk7dCAqZXhwbGljaXRseSogbWVudGlvbiBEU0Egc3dpdGNoZXMsIGJ1dCB0aGVzZSB1c3VhbGx5IGNvbm5lY3QgdmlhIFNQSS9JMkMvTURJTy4KClRoZSByZWFsIHF1ZXN0aW9uIGlzOiBDYW4gc3l6a2FsbGVyIGVmZmVjdGl2ZWx5IGZ1enogU1BJL0kyQy9NRElPIGRldmljZXMgaW4gYSB3YXkgdGhhdCB3b3VsZCBhbGxvdyBtZSB0byByZWFjaCBhbmQgdGVzdCB0aGUgcmVsZXZhbnQgY29kZSBwYXRocz8gSSBrbm93IHN5emthbGxlciBoYXMgc29tZSBsaW1pdGVkIHN1cHBvcnQgZm9yIEkyQyBhbmQgU1BJIHRocm91Z2ggYC9kZXYvaTJjLSpgIGFuZCBgL2Rldi9zcGlkZXZgLCBidXQgaXQmIzM5O3Mgbm90IHN0cmFpZ2h0Zm9yd2FyZCB0byBpbnN0YW50aWF0ZSBhICpzcGVjaWZpYyogZHJpdmVyIHVubGVzcyB0aGVyZSYjMzk7cyBhIG1vY2sgb3IgYSB2aXJ0dWFsIGRldmljZSBhdmFpbGFibGUuCgpIYW5nIG9uLi4uIGRvZXMgc3l6a2FsbGVyIGhhdmUgc29tZXRoaW5nIGxpa2UgYHN5el9pMmNfc2V0dXBgPyBOb3BlLCBub3RoaW5nIGxpa2UgdGhhdC4gSXQgaGFzIGBzeXpfdXNiX2Nvbm5lY3RgLCBgc3l6XzgwMjExX2luamVjdF9mcmFtZWAsIGV0Yy4sIGJ1dCBub3RoaW5nIGRpcmVjdGx5IHRhcmdldGVkIGF0IHNldHRpbmcgdXAgYSBzcGVjaWZpYyBJMkMgb3IgU1BJIGRldmljZS4KCk9rYXksIHNvIHdoYXQgYWJvdXQgdXNpbmcgYG5ldGxpbmtgIHRvIGNvbmZpZ3VyZSB0aGUgRFNBIHN3aXRjaD8gVGhhdCBjb3VsZCB3b3JrICppZiogdGhlIHN3aXRjaCBpcyBhbHJlYWR5IHByb2JlZC4gSW4gUUVNVSwgdGhhdCYjMzk7cyB1bmxpa2VseSB3aXRob3V0IGEgZGV2aWNlIHRyZWUgb3ZlcmxheSBvciBzb21lIGNsZXZlciB0cmlja2VyeS4gRG9lcyBzeXprYWxsZXIgb2ZmZXIgYW4gZWFzeSB3YXkgdG8gaW5qZWN0IGRldmljZSB0cmVlIG5vZGVzIG9yIHVzZSBgc3l6X2Rldm1lbWAgdG8gZmFrZSBkZXZpY2VzPyBIbW0sIEkgZG9uJiMzOTt0IHRoaW5rIGl0IGhhcyBhICpnZW5lcmljKiBtZXRob2QgZm9yIHByb2JpbmcgSTJDL1NQSSBkZXZpY2VzIHVubGVzcyB0aGV5JiMzOTtyZSBwcmVzZW50IGluIHRoZSBkZWZhdWx0IFFFTVUgZGV2aWNlIHRyZWUuIEFuZCB0aGVzZSBhbG1vc3QgY2VydGFpbmx5IHdvbiYjMzk7dCBiZSB0aGVyZS4KCkNvdWxkIHNvbWV0aGluZyBsaWtlIGBkc2FfbG9vcGAgd29yaz8gV2VsbCwgYGRzYV9sb29wYCBpcyBhIG1vY2sgRFNBIHN3aXRjaCwgYnV0IHRoaXMgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IGZvciB0aGUgYGtzejg0NjNgLCBhIHBhcnRpY3VsYXIgTWljcm9jaGlwIHN3aXRjaCwgc28gdXNpbmcgYSBnZW5lcmljIG1vY2sgd29uJiMzOTt0IHRlc3QgdGhlIG5ldyBjb2RlLgoKUmlnaHQsIHRpbWUgdG8gdGFrZSBhIHF1aWNrIHBlZWsgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgYHN5el9gIHBzZXVkby1zeXNjYWxscyBzcGVjaWZpY2FsbHkgZm9yIFNQSSBvciBJMkMgZGV2aWNlcyB0aGF0IEkmIzM5O20gb3Zlcmxvb2tpbmcuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N5el8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzeXMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDU3OAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDgxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZ1enphYmlsaXR5IG9mIHRoZSBLU1o4NDYzIERyaXZlcioqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IEkgY2FuJiMzOTt0IGp1c3QgYGdyZXBwZXJgIHRocm91Z2ggYHN5cy9gIG9yIGFueXRoaW5nIGNvbnRhaW5pbmcgJiMzNDtzeXpfJiMzNDsgYmVjYXVzZSB0aG9zZSBhcmUgU3l6a2FsbGVyJiMzOTtzIHBzZXVkby1zeXNjYWxscywgbm90IGtlcm5lbCBjb2RlLiBJIG5lZWQgdG8gcmVseSBvbiBteSBleGlzdGluZyBrbm93bGVkZ2Ugb3IgdXNlIGByZWFkLWZpbGVgIGlmIG5lY2Vzc2FyeSwgYnV0IEkgZG9uJiMzOTt0IHRoaW5rIEkmIzM5O2xsIG5lZWQgaXQgdGhpcyB0aW1lLiBUaGUgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIHRoZSBga3N6ODQ2M2AgZHJpdmVyIGlzIGV2ZW4gZnV6emFibGUuCgpOZXR3b3JrIGRyaXZlcnMgZm9yIHNwZWNpZmljIGhhcmR3YXJlIGFyZSB1c3VhbGx5IHVucmVhY2hhYmxlIGluIFFFTVUgYmVjYXVzZSB0aGUgaGFyZHdhcmUgaXNuJiMzOTt0IHByZXNlbnQuIEJ1dCwgYG5ldC9kc2EvdGFnX2tzei5jYCBjb250YWlucyBhIHRhZ2dpbmcgcHJvdG9jb2wuIElzICp0aGF0KiBhY2Nlc3NpYmxlPyBEU0EgdGFnZ2luZyBwcm90b2NvbHMgYXJlIHVzZWQgd2hlbiBhIERTQSBzd2l0Y2ggaXMgYXR0YWNoZWQuIElmIHRoZXJlJiMzOTtzIG5vIERTQSBzd2l0Y2gsIHRoZXJlJiMzOTtzIG5vIHRhZ2dpbmcgcHJvdG9jb2wuIENhbiBhIHVzZXIsIHBlcmhhcHMsIGNyZWF0ZSBhIGR1bW15IG5ldHdvcmsgZGV2aWNlIGFuZCBzZXQgaXRzIERTQSB0YWcgcHJvdG9jb2w/IE5vLCBiZWNhdXNlIERTQSB0YWcgcHJvdG9jb2xzIGFyZSBzZXQgYnkgdGhlIERTQSBjb3JlIHVwb24gc3dpdGNoIHByb2JlLCBzbyB0aGVyZSYjMzk7cyBubyB3YXkgdG8gZG8gdGhpcyBhdCB1c2VyIHNwYWNlLgoKSXMgdGhlcmUgYW55IHZpcnR1YWwgRFNBIHN3aXRjaD8gYGRzYV9sb29wYCBpcyBvbmUsIGJ1dCBpdCB1c2VzIGBEU0FfVEFHX1BST1RPX05PTkVgIG9yIGBEU0FfVEFHX1BST1RPX0RTQWAuIENhbiBhIHVzZXItc3BhY2UgcHJvZ3JhbSB0cmlnZ2VyIGBrc3o4NDYzX3htaXRgIG9yIGBrc3o4NDYzX3JjdmA/IExldCYjMzk7cyBzZWUgaWYgSSBjYW4gY29uZmlndXJlIGBkc2FfbG9vcGAgdG8gdXNlIHRoZSBga3N6ODQ2M2AgdGFnIHByb3RvY29sLiBObywgaXQgbG9va3MgbGlrZSBgZHNhX2xvb3BgIGVpdGhlciBoYXJkY29kZXMgdGhlIHByb3RvY29sIG9yIGl0JiMzOTtzIGZpeGVkLCBzbyB0aGF0JiMzOTtzIG5vdCBnb2luZyB0byB3b3JrLgoKRG9lcyBTeXprYWxsZXIgZXZlbiAqaGF2ZSogYSBgZHNhX2xvb3BgIGluc3RhbmNlPyBObywgaXQgdXN1YWxseSBkb2VzbiYjMzk7dCBmdXp6IHNwZWNpZmljIERTQSB0YWdnZXJzIHVubGVzcyB0aGV5IGNhbiBiZSBhdHRhY2hlZCB0byBhIGR1bW15IGRldmljZS4gQ2FuIEkgYXR0YWNoIGEgRFNBIHRhZ2dlciB0byBhIHZldGggb3IgZHVtbXkgZGV2aWNlIHVzaW5nIGEgbmV0bGluayBjb21tYW5kPyBObywgRFNBIGlzIHN0cmljdGx5IGZvciBEU0Egc3dpdGNoIHRyZWVzLgoKQWxyaWdodCwgdGltZSB0byBldmFsdWF0ZSBpZiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpcyBhcHByb3ByaWF0ZSBoZXJlLiBUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBhIEtTWjg0NjMgc3dpdGNoIGluIHRoZSBNaWNyb2NoaXAgRFNBIGRyaXZlci4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciBmb3IgYW4gU1BJL0kyQy9NRElPIGNvbm5lY3RlZCBzd2l0Y2guIFNpbmNlIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSB0aGUgS1NaODQ2MyBzd2l0Y2gsIHRoZSBkcml2ZXImIzM5O3MgYHByb2JlYCBmdW5jdGlvbiB3aWxsIG5ldmVyIHN1Y2NlZWQsIGFuZCB0aGUgc3dpdGNoIHdpbGwgbmV2ZXIgYmUgcmVnaXN0ZXJlZC4gVGhlcmVmb3JlLCB0aGUgY29kZSBpbiBga3N6LmNgLCBga3N6X3B0cC5jYCwgYGtzel9jb21tb24uY2AsIGFuZCBgdGFnX2tzei5jYCAod2hpY2ggaXMgb25seSB1c2VkIHdoZW4gdGhlIHN3aXRjaCBpcyByZWdpc3RlcmVkKSBpcyB1bnJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIHRob3VnaCwgYWJvdXQgYHRhZ19rc3ouY2AuIElzIHRoZXJlICphbnkqIHdheSB0byBmb3JjZSBhIG5ldHdvcmsgaW50ZXJmYWNlIHRvIHVzZSBhIHNwZWNpZmljIERTQSB0YWdnZXI/IEluIGBuZXQvZHNhL3RhZy5jYCBvciBgbmV0L2RzYS9kc2EuY2AsIHRoZSB0YWdnZXIgYXNzaWdubWVudCBpcyBiYXNlZCBvbiB0aGUgc3dpdGNoIHRyZWUuIFRoZXJlIG1pZ2h0IGJlIGEgc3lzZnMgb3IgbmV0bGluayBhdHRyaWJ1dGUgdG8gY2hhbmdlIHRoZSBEU0EgdGFnZ2VyIG9mIGEgc3dpdGNoIHRyZWUsIGJ1dCBhZ2FpbiwgSSAqbmVlZCogYSBzd2l0Y2ggdHJlZSB0byBleGlzdC4gQ2FuIFN5emthbGxlciBjcmVhdGUgYSBzd2l0Y2ggdHJlZT8gVGhlcmUmIzM5O3MgYGRzYV9sb29wYCwgd2hpY2ggaXMgYSBtb2NrIERTQSBzd2l0Y2ggdGhhdCBjYW4gYmUgcHJvYmVkLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGBkc2FfbG9vcGAgaXMgZW5hYmxlZCBpbiBTeXprYWxsZXIuIEV2ZW4gaWYgaXQgKmlzKiBlbmFibGVkLCBjYW4gaXQgYWN0dWFsbHkgdXNlIHRoZSBga3N6ODQ2M2AgdGFnZ2VyPyBMZXQmIzM5O3MgY2hlY2sgdGhlIGBkc2FfbG9vcGAgY29kZS4gSXQmIzM5O3MgbG9va2luZyBwcmV0dHkgZGltLCBidXQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RzYV9sb29wJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kc2EvZHNhLnJzdD0xNTk9YWxsIGF0dGFjaGVkIHN3aXRjaCBwb3J0cyBtdXN0IGJlIGRvd24gd2hpbGUgZG9pbmcgdGhpcykuXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZHNhL2RzYS5yc3QtMTYwLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RzYS9kc2EucnN0OjE2MTpJdCBpcyBkZXNpcmFibGUgdGhhdCBhbGwgdGFnZ2luZyBwcm90b2NvbHMgYXJlIHRlc3RhYmxlIHdpdGggdGhlIGBgZHNhX2xvb3BgYFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RzYS9kc2EucnN0LTE2Mi1tb2NrdXAgZHJpdmVyLCB3aGljaCBjYW4gYmUgYXR0YWNoZWQgdG8gYW55IG5ldHdvcmsgaW50ZXJmYWNlLiBUaGUgZ29hbCBpcyB0aGF0XG4tLVxuZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlPTM9YmNtLXNmMi1vYmpzXHRcdFx0Oj0gYmNtX3NmMi5vIGJjbV9zZjJfY2ZwLm9cbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19ORVRfRFNBX0xPT1ApXHQmIzQzOz0gZHNhX2xvb3Aub1xuZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlLTUtb2JqLSQoQ09ORklHX05FVF9EU0FfS1M4OTk1KSBcdCYjNDM7PSBrczg5OTUub1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI0LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjU6c3RydWN0IGRzYV9sb29wX3ZsYW4ge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjYtXHR1MTYgbWVtYmVycztcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yOS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMwOnN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEtXHRjaGFyIG5hbWVbRVRIX0dTVFJJTkdfTEVOXTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1OmVudW0gZHNhX2xvb3BfbWliX2NvdW50ZXJzIHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM2LVx0RFNBX0xPT1BfUEhZX1JFQURfT0ssXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDItXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MzpzdHJ1Y3QgZHNhX2xvb3BfcG9ydCB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NDpcdHN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkgbWliW19fRFNBX0xPT1BfQ05UX01BWF07XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NS1cdHUxNiBwdmlkO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDk6c3RydWN0IGRzYV9sb29wX3ByaXYge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTAtXHRzdHJ1Y3QgbWlpX2J1c1x0KmJ1cztcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxLVx0dW5zaWduZWQgaW50XHRwb3J0X2Jhc2U7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MjpcdHN0cnVjdCBkc2FfbG9vcF92bGFuIHZsYW5zW1ZMQU5fTl9WSURdO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTMtXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTQ6XHRzdHJ1Y3QgZHNhX2xvb3BfcG9ydCBwb3J0c1tEU0FfTUFYX1BPUlRTXTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTU1LX07XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01Ni1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjU3OnN0cnVjdCBkc2FfbG9vcF9wZGF0YSB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01OC1cdC8qIE11c3QgYmUgZmlyc3QsIHN1Y2ggdGhhdCBkc2FfcmVnaXN0ZXJfc3dpdGNoKCkgY2FuIGFjY2VzcyB0aGlzXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNjYtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo2NzpzdGF0aWMgc3RydWN0IGRzYV9sb29wX21pYl9lbnRyeSBkc2FfbG9vcF9taWJzW10gPSB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy02OC1cdFtEU0FfTE9PUF9QSFlfUkVBRF9PS11cdD0geyBcJiMzNDtwaHlfcmVhZF9va1wmIzM0OywgfSxcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz03NT1zdGF0aWMgc3RydWN0IG1kaW9fZGV2aWNlICpzd2l0Y2hfbWRpb2RldjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTc2LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Nzc6ZW51bSBkc2FfbG9vcF9kZXZsaW5rX3Jlc291cmNlX2lkIHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTc4LVx0RFNBX0xPT1BfREVWTElOS19QQVJBTV9JRF9OT05FLCAgLyogREVWTElOS19SRVNPVVJDRV9JRF9QQVJFTlRfVE9QICovXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtODEtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo4MjpzdGF0aWMgdTY0IGRzYV9sb29wX2RldmxpbmtfdnR1X2dldCh2b2lkICpwcml2KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtODMte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6ODQ6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtODUtXHR1bnNpZ25lZCBpbnQgaSwgY291bnQgPSAwO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6ODY6XHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiAqdmw7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy04Ny1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy05Ni1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjk3OnN0YXRpYyBpbnQgZHNhX2xvb3Bfc2V0dXBfZGV2bGlua19yZXNvdXJjZXMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtOTgte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtOTktXHRzdHJ1Y3QgZGV2bGlua19yZXNvdXJjZV9zaXplX3BhcmFtcyBzaXplX3BhcmFtcztcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEwMDpcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcyA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMDEtXHRpbnQgZXJyO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTExNS1cdFx0XHRcdFx0ICAgICAgRFNBX0xPT1BfREVWTElOS19QQVJBTV9JRF9WVFUsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxMTY6XHRcdFx0XHRcdCAgICAgIGRzYV9sb29wX2RldmxpbmtfdnR1X2dldCwgcHMpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTE3LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTEyNC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEyNTpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGRzYV9sb29wX2dldF9wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMjYtXHRcdFx0XHRcdFx0ICAgaW50IHBvcnQsXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTMzLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTM0OnN0YXRpYyBpbnQgZHNhX2xvb3Bfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTM1LXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEzNjpcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcyA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzctXHR1bnNpZ25lZCBpbnQgaTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzktXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkcy1cdTAwM2VudW1fcG9ydHM7IGkmIzQzOyYjNDM7KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTQwOlx0XHRtZW1jcHkocHMtXHUwMDNlcG9ydHNbaV0ubWliLCBkc2FfbG9vcF9taWJzLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTQxOlx0XHQgICAgICAgc2l6ZW9mKGRzYV9sb29wX21pYnMpKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0Mi1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNDQtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDU6XHRyZXR1cm4gZHNhX2xvb3Bfc2V0dXBfZGV2bGlua19yZXNvdXJjZXMoZHMpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTQ2LX1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0Ny1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE0ODpzdGF0aWMgdm9pZCBkc2FfbG9vcF90ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNDkte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE1Mi1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE1MzpzdGF0aWMgaW50IGRzYV9sb29wX2dldF9zc2V0X2NvdW50KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBzc2V0KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTU0LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNjAtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNjE6c3RhdGljIHZvaWQgZHNhX2xvb3BfZ2V0X3N0cmluZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE2Mi1cdFx0XHRcdCB1MzIgc3RyaW5nc2V0LCB1aW50OF90ICpkYXRhKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTYzLXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE2NDpcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcyA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNjUtXHR1bnNpZ25lZCBpbnQgaTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNzMtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNzQ6c3RhdGljIHZvaWQgZHNhX2xvb3BfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE3NS1cdFx0XHRcdCAgICAgICB1aW50NjRfdCAqZGF0YSlcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE3Ni17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNzc6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTc4LVx0dW5zaWduZWQgaW50IGk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTgzLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTg0OnN0YXRpYyBpbnQgZHNhX2xvb3BfcGh5X3JlYWQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHJlZ251bSlcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE4NS17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxODY6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTg3LVx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHBzLVx1MDAzZWJ1cztcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xOTgtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxOTk6c3RhdGljIGludCBkc2FfbG9vcF9waHlfd3JpdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIwMC1cdFx0XHQgICAgICBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMDEte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjAyOlx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIwMy1cdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cdTAwM2VidXM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjE0LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjE1OnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF9icmlkZ2Vfam9pbihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjE2LVx0XHRcdFx0ICAgICBzdHJ1Y3QgZHNhX2JyaWRnZSBicmlkZ2UsXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjI1LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjI2OnN0YXRpYyB2b2lkIGRzYV9sb29wX3BvcnRfYnJpZGdlX2xlYXZlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMjctXHRcdFx0XHQgICAgICAgc3RydWN0IGRzYV9icmlkZ2UgYnJpZGdlKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIzMi1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjIzMzpzdGF0aWMgdm9pZCBkc2FfbG9vcF9wb3J0X3N0cF9zdGF0ZV9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIzNC1cdFx0XHRcdFx0dTggc3RhdGUpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjM5LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjQwOnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF92bGFuX2ZpbHRlcmluZyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjQxLVx0XHRcdFx0XHRib29sIHZsYW5fZmlsdGVyaW5nLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI0OS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1MDpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfdmxhbl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI1MS1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmpfcG9ydF92bGFuICp2bGFuLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI1NS1cdGJvb2wgcHZpZCA9IHZsYW4tXHUwMDNlZmxhZ3MgXHUwMDI2IEJSSURHRV9WTEFOX0lORk9fUFZJRDtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1NjpcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcyA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNTctXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHMtXHUwMDNlYnVzO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjU4Olx0c3RydWN0IGRzYV9sb29wX3ZsYW4gKnZsO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjU5LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI4Mi1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI4MzpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI4NC1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmpfcG9ydF92bGFuICp2bGFuKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI4Ni1cdGJvb2wgdW50YWdnZWQgPSB2bGFuLVx1MDAzZWZsYWdzIFx1MDAyNiBCUklER0VfVkxBTl9JTkZPX1VOVEFHR0VEO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Mjg3Olx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI4OC1cdHUxNiBwdmlkID0gcHMtXHUwMDNlcG9ydHNbcG9ydF0ucHZpZDtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI4OS1cdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cdTAwM2VidXM7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyOTA6XHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiAqdmw7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yOTEtXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEwLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzExOnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF9jaGFuZ2VfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMTItXHRcdFx0XHQgICAgaW50IG5ld19tdHUpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMTMte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzE0Olx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzE1LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMyMC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMyMTpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfbWF4X210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzIyLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMjUtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMjY6c3RhdGljIHZvaWQgZHNhX2xvb3BfcGh5bGlua19nZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHNhLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMyNy1cdFx0XHRcdCAgICAgIHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMzMy1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNDpzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGRzYV9sb29wX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNTpcdC5nZXRfdGFnX3Byb3RvY29sXHQ9IGRzYV9sb29wX2dldF9wcm90b2NvbCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNjpcdC5zZXR1cFx0XHRcdD0gZHNhX2xvb3Bfc2V0dXAsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMzc6XHQudGVhcmRvd25cdFx0PSBkc2FfbG9vcF90ZWFyZG93bixcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzODpcdC5nZXRfc3RyaW5nc1x0XHQ9IGRzYV9sb29wX2dldF9zdHJpbmdzLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzM5Olx0LmdldF9ldGh0b29sX3N0YXRzXHQ9IGRzYV9sb29wX2dldF9ldGh0b29sX3N0YXRzLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQwOlx0LmdldF9zc2V0X2NvdW50XHRcdD0gZHNhX2xvb3BfZ2V0X3NzZXRfY291bnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDE6XHQuZ2V0X2V0aHRvb2xfcGh5X3N0YXRzXHQ9IGRzYV9sb29wX2dldF9ldGh0b29sX3N0YXRzLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQyOlx0LnBoeV9yZWFkXHRcdD0gZHNhX2xvb3BfcGh5X3JlYWQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDM6XHQucGh5X3dyaXRlXHRcdD0gZHNhX2xvb3BfcGh5X3dyaXRlLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQ0Olx0LnBvcnRfYnJpZGdlX2pvaW5cdD0gZHNhX2xvb3BfcG9ydF9icmlkZ2Vfam9pbixcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NTpcdC5wb3J0X2JyaWRnZV9sZWF2ZVx0PSBkc2FfbG9vcF9wb3J0X2JyaWRnZV9sZWF2ZSxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NjpcdC5wb3J0X3N0cF9zdGF0ZV9zZXRcdD0gZHNhX2xvb3BfcG9ydF9zdHBfc3RhdGVfc2V0LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQ3Olx0LnBvcnRfdmxhbl9maWx0ZXJpbmdcdD0gZHNhX2xvb3BfcG9ydF92bGFuX2ZpbHRlcmluZyxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0ODpcdC5wb3J0X3ZsYW5fYWRkXHRcdD0gZHNhX2xvb3BfcG9ydF92bGFuX2FkZCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0OTpcdC5wb3J0X3ZsYW5fZGVsXHRcdD0gZHNhX2xvb3BfcG9ydF92bGFuX2RlbCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1MDpcdC5wb3J0X2NoYW5nZV9tdHVcdD0gZHNhX2xvb3BfcG9ydF9jaGFuZ2VfbXR1LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzUxOlx0LnBvcnRfbWF4X210dVx0XHQ9IGRzYV9sb29wX3BvcnRfbWF4X210dSxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1MjpcdC5waHlsaW5rX2dldF9jYXBzXHQ9IGRzYV9sb29wX3BoeWxpbmtfZ2V0X2NhcHMsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNTMtfTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM1NC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1NTpzdGF0aWMgaW50IGRzYV9sb29wX2Rydl9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNTYte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzU3Olx0c3RydWN0IGRzYV9sb29wX3BkYXRhICpwZGF0YSA9IG1kaW9kZXYtXHUwMDNlZGV2LnBsYXRmb3JtX2RhdGE7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTg6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHM7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNTktXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzgyLVx0ZHMtXHUwMDNlZGV2ID0gXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozODM6XHRkcy1cdTAwM2VvcHMgPSBcdTAwMjZkc2FfbG9vcF9kcml2ZXI7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zODQtXHRkcy1cdTAwM2Vwcml2ID0gcHM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzk2LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Mzk3OnN0YXRpYyB2b2lkIGRzYV9sb29wX2Rydl9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzk4LXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM5OS1cdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRldl9nZXRfZHJ2ZGF0YShcdTAwMjZtZGlvZGV2LVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MDA6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHM7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MDEtXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDEwLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDExOnN0YXRpYyB2b2lkIGRzYV9sb29wX2Rydl9zaHV0ZG93bihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MTIte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQyMi1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQyMzpzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIGRzYV9sb29wX2RydiA9IHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQyNC1cdC5tZGlvZHJ2LmRyaXZlclx0PSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDI2LVx0fSxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQyNzpcdC5wcm9iZVx0PSBkc2FfbG9vcF9kcnZfcHJvYmUsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Mjg6XHQucmVtb3ZlXHQ9IGRzYV9sb29wX2Rydl9yZW1vdmUsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Mjk6XHQuc2h1dGRvd24gPSBkc2FfbG9vcF9kcnZfc2h1dGRvd24sXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzAtfTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQzMS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQzMjpzdGF0aWMgaW50IGRzYV9sb29wX2J1c19tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzMtXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydilcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQzNC17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MzU6XHRyZXR1cm4gZHJ2ID09IFx1MDAyNmRzYV9sb29wX2Rydi5tZGlvZHJ2LmRyaXZlcjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQzNi19XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzctXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Mzg6c3RhdGljIHZvaWQgZHNhX2xvb3BfcGh5ZGV2c191bnJlZ2lzdGVyKHZvaWQpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00Mzkte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ0NS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ0NjpzdGF0aWMgaW50IF9faW5pdCBkc2FfbG9vcF9jcmVhdGVfc3dpdGNoX21kaW9kZXYodm9pZClcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ0Ny17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NDg6XHRzdGF0aWMgc3RydWN0IGRzYV9sb29wX3BkYXRhIGRzYV9sb29wX3BkYXRhID0ge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDQ5LVx0XHQuY2QgPSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDcwLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDcxOlx0c3dpdGNoX21kaW9kZXYtXHUwMDNlYnVzX21hdGNoID0gZHNhX2xvb3BfYnVzX21hdGNoO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDcyOlx0c3dpdGNoX21kaW9kZXYtXHUwMDNlZGV2LnBsYXRmb3JtX2RhdGEgPSBcdTAwMjZkc2FfbG9vcF9wZGF0YTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3My1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00ODEtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0ODI6c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfaW5pdCh2b2lkKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDgzLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00ODYtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0ODc6XHRyZXQgPSBkc2FfbG9vcF9jcmVhdGVfc3dpdGNoX21kaW9kZXYoKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4OC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDkzLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDk0Olx0cmV0ID0gbWRpb19kcml2ZXJfcmVnaXN0ZXIoXHUwMDI2ZHNhX2xvb3BfZHJ2KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ5NS1cdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5NjpcdFx0ZHNhX2xvb3BfcGh5ZGV2c191bnJlZ2lzdGVyKCk7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTctXHRcdG1kaW9fZGV2aWNlX3JlbW92ZShzd2l0Y2hfbWRpb2Rldik7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTAyLX1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwMzptb2R1bGVfaW5pdChkc2FfbG9vcF9pbml0KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwNC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwNTpzdGF0aWMgdm9pZCBfX2V4aXQgZHNhX2xvb3BfZXhpdCh2b2lkKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTA2LXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwNzpcdG1kaW9fZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2ZHNhX2xvb3BfZHJ2KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwODpcdGRzYV9sb29wX3BoeWRldnNfdW5yZWdpc3RlcigpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTA5LVx0bWRpb19kZXZpY2VfcmVtb3ZlKHN3aXRjaF9tZGlvZGV2KTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MTEtfVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTEyOm1vZHVsZV9leGl0KGRzYV9sb29wX2V4aXQpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTEzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyODU1CgkJCQkJCQlvdXRwdXQ6IDExMwoJCQkJCQkJdGhvdWdodHM6IDExMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgS1NaODQ2MyBEcml2ZXIgUGF0Y2ggZm9yIEZ1enppbmcgRmVhc2liaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCwgYWRkaW5nIHN1cHBvcnQgZm9yIHRoZSBNaWNyb2NoaXAgS1NaODQ2MyBEU0Egc3dpdGNoLCBpcyBzb21ldGhpbmcgd2UgY2FuIGV2ZW4gdG91Y2ggd2l0aGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4gVGhlIGBkc2FfbG9vcGAgZnVuY3Rpb24gYW5kIGhvdyBpdCB1c2VzIHRoZSBEU0EgdGFnIHByb3RvY29sIGlzIHRoZSBmaXJzdCBwbGFjZSBJIHN0YXJ0LiBJIGtub3cgYGRzYV9sb29wX2dldF9wcm90b2NvbGAgaXMgaW52b2x2ZWQsIGFuZCBJIGltbWVkaWF0ZWx5IGNoZWNrIGlmIGl0JiMzOTtzIGNvbmZpZ3VyYWJsZSB0byB1c2UgYERTQV9UQUdfUFJPVE9fS1NaODQ2M2AuIE5vcGUsIGl0JiMzOTtzIGhhcmRjb2RlZCB0byBgRFNBX1RBR19QUk9UT19OT05FYC4gU28gdGhhdCYjMzk7cyBhIGRlYWQgZW5kLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0cmlnZ2VycyBga3N6ODQ2M194bWl0YCBvciBga3N6ODQ2M19yY3ZgLiBUaGV5IHJlbHkgb24gdGhlIERTQSB0YWdnZXIuIFRoZSB0YWdnZXIgYXR0YWNoZXMgdG8gYSBuZXR3b3JrIGRldmljZSAqb25seSogaWYgYSBEU0Egc3dpdGNoIHJlcXVlc3RzIGl0LiAgU2luY2UgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoZSBLU1o4NDYzIHN3aXRjaCwgdGhlIGRyaXZlciYjMzk7cyBgcHJvYmVgIGZ1bmN0aW9uIHdvbiYjMzk7dCBzdWNjZWVkLiBUaGUgc3dpdGNoIHdvbiYjMzk7dCByZWdpc3RlciwgYW5kIHRoZSB0YWdnZXIgd2lsbCBuZXZlciBiZSB1c2VkLiBUaGF0JiMzOTtzIGEgcHJldHR5IHN0cm9uZyBpbmRpY2F0b3IgdGhhdCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBRRU1VIHNldHVwLgoKQ291bGQgc3l6a2FsbGVyIGluamVjdCBzb21ldGhpbmc/IEEgZmFrZSBkZXZpY2UgdHJlZSBub2RlLCBtYXliZSwgb3IgdXNlIGBzeXpfZGV2bWVtYCB0byBmYWtlIHRoZSBTUEkvTURJTyBkZXZpY2U/ICBOb3QgbGlrZWx5LiBTeXprYWxsZXIgZG9lc24mIzM5O3QgaGF2ZSBhIGdvb2QgZ2VuZXJpYyB3YXkgdG8gZmFrZSBTUEkvSTJDIGRldmljZXMgcHJvYmVkIHZpYSBkZXZpY2UgdHJlZSB1bmxlc3MgYSBzcGVjaWZpYyBgc3l6X2AgcHNldWRvLXN5c2NhbGwgZXhpc3RzLCBhbmQgdGhlcmUmIzM5O3Mgbm8gc3VjaCB0aGluZyBmb3IgdGhpcy4KCkFuZCB0aGUgcHJvbXB0IGV4cGxpY2l0bHkgY2FsbHMgb3V0IHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCBkcml2ZXJzLCBTbWFydE5JQ3MsIG9yIEdQVXMgcmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBRRU1VLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljICpTUEkvTURJTyogc3dpdGNoIGRyaXZlci4gSXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoaXMgZmFsbHMgcmlnaHQgaW50byB0aGF0IHNhbWUgdW5yZWFjaGFibGUgY2F0ZWdvcnkuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrLiBDYW4gYSBuZXRsaW5rIGNvbW1hbmQgc29tZWhvdyBjcmVhdGUgYSBkdW1teSBpbnRlcmZhY2UgYW5kIGF0dGFjaCB0aGUgRFNBIHRhZ2dlciB0byBpdD8gTm8sIHRoYXQmIzM5O3Mgbm90IGhvdyBpdCB3b3Jrcy4gRFNBIHRhZ2dlcnMgYXJlIG1hbmFnZWQgYnkgdGhlIERTQSBjb3JlLCBhdHRhY2hlZCB0byB0aGUgKm1hc3RlciogbmV0d29yayBkZXZpY2Ugb2YgYSBEU0Egc3dpdGNoIHRyZWUuIE5vIERTQSBzd2l0Y2ggdHJlZT8gTm8gdGFnZ2VyLiBObyBkcml2ZXIgcHJvYmUsIG5vIHRyZWUuIFRoZSBLU1o4NDYzIGRyaXZlciB3b24mIzM5O3QgcHJvYmUgd2l0aG91dCB0aGUgaGFyZHdhcmUuCgpMZXQmIzM5O3MgZG8gYSBjb21wbGV0ZSBzd2VlcDogIGBrc3pfaXJxX2J1c19sb2NrYCBhbmQgYGtzel9pcnFfYnVzX3N5bmNfdW5sb2NrYCBhcmUgZXhwb3J0ZWQsIGJ1dCBvbmx5IHVzZWQgYnkgdGhlIEtTWiBzd2l0Y2ggZHJpdmVycy4gU2FtZSB3aXRoIGBrc3o4NDYzX2dldF90c19pbmZvYCwgYGtzejg0NjNfaHd0c3RhbXBfc2V0YCwgYW5kIGBrc3o4NDYzX3B0cF9pcnFfc2V0dXBgIC0gYWxsIHBhcnQgb2YgdGhlIEtTWiBkcml2ZXIuIEFuZCBgRFNBX1RBR19QUk9UT19LU1o4NDYzYCBpcyBleGNsdXNpdmVseSBmb3IgdGhhdCBkcml2ZXIuCgpTbywgdGhlIGVudGlyZSBwYXRjaCBpcyBoYXJkd2FyZS1zcGVjaWZpYyBhbmQgdW5yZWFjaGFibGUgaW4gUUVNVS4gSSYjMzk7bSBnb2luZyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgYmVjYXVzZSBpdCYjMzk7cyBhIGhhcmR3YXJlLXNwZWNpZmljIERTQSBzd2l0Y2ggZHJpdmVyIChNaWNyb2NoaXAgS1NaODQ2MykgY29ubmVjdGVkIHZpYSBTUEkvTURJTyB0aGF0IGlzbiYjMzk7dCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUuCgpMZXQgbWUganVzdCBtYWtlIHN1cmUgdGhlIHJlYXNvbmluZyBpcyBjbGVhcjogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgTWljcm9jaGlwIEtTWjg0NjMgRFNBIHN3aXRjaCwgaW5jbHVkaW5nIElSUSwgUFRQLCBhbmQgYSBuZXcgRFNBIHRhZyBwcm90b2NvbC4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciBmb3IgYW4gU1BJL01ESU8tY29ubmVjdGVkIHN3aXRjaCB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBXaXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSwgdGhlIGRyaXZlciBjYW5ub3QgcHJvYmUsIGFuZCB0aGUgYWRkZWQgY29kZSAoaW5jbHVkaW5nIHRoZSBEU0EgdGFnZ2VyKSBpcyB1bnJlYWNoYWJsZS4mIzM0OwoKT25lIGxhc3QgY2hlY2suIExldCYjMzk7cyBtYWtlIHN1cmUgSSBkaWRuJiMzOTt0IG1pc3MgYW55dGhpbmcuIFRoZSBwYXRjaCBtb2RpZmllcyBga3N6X2lycV9jb21tb25fc2V0dXBgIGluIGBrc3pfY29tbW9uLmNgIHRvIHRha2UgYW4gYG9wc2Agc3RydWN0IC0gdGhhdCYjMzk7cyBqdXN0IGEgcmVmYWN0b3JpbmcgKmZvciogdGhlIEtTWiBkcml2ZXIuIGBrc3pfcHRwLmNgIGlzIGFsbCBLU1o4NDYzIHNwZWNpZmljIFBUUCBmdW5jdGlvbnMsIGFuZCBgdGFnX2tzei5jYCBoYXMgYGtzejg0NjNfbmV0ZGV2X29wc2AgYW5kIGBrc3o4NDYzX3htaXRgL2ByY3ZgLgoKWXVwLCBpdCYjMzk7cyBhbGwgc3RyaWN0bHkgdGllZCB0byB0aGUgS1NaODQ2MyBoYXJkd2FyZS4gSSYjMzk7bSBjb25maWRlbnQuIFJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNaWNyb2NoaXAgS1NaODQ2MyBEU0Egc3dpdGNoLCBpbmNsdWRpbmcgSVJRLCBQVFAsIGFuZCBhIG5ldyBEU0EgdGFnIHByb3RvY29sLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGZvciBhbiBTUEkvTURJTy1jb25uZWN0ZWQgc3dpdGNoIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFdpdGhvdXQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlLCB0aGUgZHJpdmVyIGNhbm5vdCBwcm9iZSwgYW5kIHRoZSBhZGRlZCBjb2RlIChpbmNsdWRpbmcgdGhlIERTQSB0YWdnZXIpIGlzIHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgTWljcm9jaGlwIEtTWjg0NjMgRFNBIHN3aXRjaCwgaW5jbHVkaW5nIElSUSwgUFRQLCBhbmQgYSBuZXcgRFNBIHRhZyBwcm90b2NvbC4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciBmb3IgYW4gU1BJL01ESU8tY29ubmVjdGVkIHN3aXRjaCB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBXaXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSwgdGhlIGRyaXZlciBjYW5ub3QgcHJvYmUsIGFuZCB0aGUgYWRkZWQgY29kZSAoaW5jbHVkaW5nIHRoZSBEU0EgdGFnZ2VyKSBpcyB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMzowNTozMi4xNDY4NTk3NzVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQ3NTUwMzcwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgTWljcm9jaGlwIEtTWjg0NjMgRFNBIHN3aXRjaCwgaW5jbHVkaW5nIElSUSwgUFRQLCBhbmQgYSBuZXcgRFNBIHRhZyBwcm90b2NvbC4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciBmb3IgYW4gU1BJL01ESU8tY29ubmVjdGVkIHN3aXRjaCB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBXaXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSwgdGhlIGRyaXZlciBjYW5ub3QgcHJvYmUsIGFuZCB0aGUgYWRkZWQgY29kZSAoaW5jbHVkaW5nIHRoZSBEU0EgdGFnZ2VyKSBpcyB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIzOjA1OjMyLjE0Njg2NjA2NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQwNjczNzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDNmYWViM2EwZjBhYjQyOWQ2NGNiZTM5NGNmZTlhZmQwZGIzNjhmM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyNyAyMzowNTozMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jXFxuaW5kZXggYzRjNzY5MDI4YTIwYzkuLjk0MWFlOWY2NmY3MGJhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmNcXG5AQCAtMzYsNiArMzYsMTMgQEBcXG4gI2luY2x1ZGUgXFxcImtzejhfcmVnLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJrc3o4LmhcXFwiXFxuIFxcbisvKlxcbisgKiBXZSB1c2Ugb25seSB0aGUgaGlnaC1ieXRlIChzbyBvZGQgYWRkcmVzc2VzKSBvZiB0aGUgMTYtYml0cyByZWdpc3RlcnMgdG8gZml0XFxuKyAqIGluIHRoZSBjb21tb24gSVJRIGZyYW1ld29ya1xcbisgKi9cXG4rI2RlZmluZSBLU1o4NDYzX1JFR19JU1JcXHRcXHRcXHQweDE5MVxcbisjZGVmaW5lIEtTWjg0NjNfUkVHX0lFUlxcdFxcdFxcdDB4MTkzXFxuK1xcbiAvKiBrc3o4OHgzX2RyaXZlX3N0cmVuZ3RocyAtIERyaXZlIHN0cmVuZ3RoIG1hcHBpbmcgZm9yIEtTWjg4NjMsIEtTWjg4NzMsIC4uXFxuICAqXFx0XFx0XFx0ICAgICB2YXJpYW50cy5cXG4gICogVGhpcyB2YWx1ZXMgYXJlIGRvY3VtZW50ZWQgaW4gS1NaODg3MyBhbmQgS1NaODg2MyBkYXRhc2hlZXRzLlxcbkBAIC0xODEsNiArMTg4LDY5IEBAIHN0YXRpYyBpbnQga3N6OF9wbWVfcHdyaXRlOChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgaW50IG9mZnNldCwgdTggZGF0XFxuIFxcdHJldHVybiBrc3o4X2luZF93cml0ZTgoZGV2LCB0YWJsZSwgKHU4KShvZmZzZXQpLCBkYXRhKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQga3N6ODQ2M19pcnFfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpXFxuK3tcXG4rXFx0c3RydWN0IGtzel9pcnEgKmtpcnEgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTtcXG4rXFxuK1xcdGtpcnEtXFx1MDAzZW1hc2tlZCBcXHUwMDI2PSB+QklUKGQtXFx1MDAzZWh3aXJxKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQga3N6ODQ2M19pcnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZClcXG4re1xcbitcXHRzdHJ1Y3Qga3N6X2lycSAqa2lycSA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpO1xcbitcXG4rXFx0a2lycS1cXHUwMDNlbWFza2VkIHw9IEJJVChkLVxcdTAwM2Vod2lycSk7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXJxX2NoaXAga3N6ODQ2M19pcnFfY2hpcCA9IHtcXG4rXFx0Lm5hbWVcXHRcXHRcXHQ9IFxcXCJrc3o4NDYzLWlycVxcXCIsXFxuK1xcdC5pcnFfbWFza1xcdFxcdD0ga3N6ODQ2M19pcnFfbWFzayxcXG4rXFx0LmlycV91bm1hc2tcXHRcXHQ9IGtzejg0NjNfaXJxX3VubWFzayxcXG4rXFx0LmlycV9idXNfbG9ja1xcdFxcdD0ga3N6X2lycV9idXNfbG9jayxcXG4rXFx0LmlycV9idXNfc3luY191bmxvY2tcXHQ9IGtzel9pcnFfYnVzX3N5bmNfdW5sb2NrLFxcbit9O1xcbitcXG4rc3RhdGljIGludCBrc3o4NDYzX2lycV9kb21haW5fbWFwKHN0cnVjdCBpcnFfZG9tYWluICpkLFxcbitcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBpcnEsIGlycV9od19udW1iZXJfdCBod2lycSlcXG4re1xcbitcXHRpcnFfc2V0X2NoaXBfZGF0YShpcnEsIGQtXFx1MDAzZWhvc3RfZGF0YSk7XFxuK1xcdGlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsIFxcdTAwMjZrc3o4NDYzX2lycV9jaGlwLCBoYW5kbGVfbGV2ZWxfaXJxKTtcXG4rXFx0aXJxX3NldF9ub3Byb2JlKGlycSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBrc3o4NDYzX2lycV9kb21haW5fb3BzID0ge1xcbitcXHQubWFwXFx0PSBrc3o4NDYzX2lycV9kb21haW5fbWFwLFxcbitcXHQueGxhdGVcXHQ9IGlycV9kb21haW5feGxhdGVfdHdvY2VsbCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQga3N6ODQ2M19naXJxX3NldHVwKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGtzel9pcnEgKmdpcnEgPSBcXHUwMDI2ZGV2LVxcdTAwM2VnaXJxO1xcbitcXG4rXFx0Z2lycS1cXHUwMDNlbmlycXMgPSA4O1xcbitcXHRnaXJxLVxcdTAwM2VyZWdfbWFzayA9IEtTWjg0NjNfUkVHX0lFUjtcXG4rXFx0Z2lycS1cXHUwMDNlcmVnX3N0YXR1cyA9IEtTWjg0NjNfUkVHX0lTUjtcXG4rXFx0Z2lycS1cXHUwMDNlbWFza2VkID0gMDtcXG4rXFx0c25wcmludGYoZ2lycS1cXHUwMDNlbmFtZSwgc2l6ZW9mKGdpcnEtXFx1MDAzZW5hbWUpLCBcXFwia3N6ODQ2My1naXJxXFxcIik7XFxuK1xcbitcXHRnaXJxLVxcdTAwM2VpcnFfbnVtID0gZGV2LVxcdTAwM2VpcnE7XFxuK1xcbitcXHRyZXR1cm4ga3N6X2lycV9jb21tb25fc2V0dXAoZGV2LCBnaXJxLCBcXHUwMDI2a3N6ODQ2M19pcnFfZG9tYWluX29wcyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQga3N6ODQ2M19yZXNldF9zd2l0Y2goc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4re1xcbitcXHRrc3pfY2ZnKGRldiwgS1NaODQ2M19SRUdfU1dfUkVTRVQsXFxuK1xcdFxcdEtTWjg0NjNfR0xPQkFMX1NPRlRXQVJFX1JFU0VUIHwgS1NaODQ2M19QVFBfU09GVFdBUkVfUkVTRVQsXFxuK1xcdFxcdHRydWUpO1xcbitcXHRrc3pfY2ZnKGRldiwgS1NaODQ2M19SRUdfU1dfUkVTRVQsXFxuK1xcdFxcdEtTWjg0NjNfR0xPQkFMX1NPRlRXQVJFX1JFU0VUIHwgS1NaODQ2M19QVFBfU09GVFdBUkVfUkVTRVQsXFxuK1xcdFxcdGZhbHNlKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQga3N6OF9yZXNldF9zd2l0Y2goc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4ge1xcbiBcXHRpZiAoa3N6X2lzX2tzejg4eDMoZGV2KSkge1xcbkBAIC0xODksMTEgKzI1OSw2IEBAIHN0YXRpYyBpbnQga3N6OF9yZXNldF9zd2l0Y2goc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4gXFx0XFx0XFx0S1NaODg2M19HTE9CQUxfU09GVFdBUkVfUkVTRVQgfCBLU1o4ODYzX1BDU19SRVNFVCwgdHJ1ZSk7XFxuIFxcdFxcdGtzel9jZmcoZGV2LCBLU1o4ODYzX1JFR19TV19SRVNFVCxcXG4gXFx0XFx0XFx0S1NaODg2M19HTE9CQUxfU09GVFdBUkVfUkVTRVQgfCBLU1o4ODYzX1BDU19SRVNFVCwgZmFsc2UpO1xcbi1cXHR9IGVsc2UgaWYgKGtzel9pc19rc3o4NDYzKGRldikpIHtcXG4tXFx0XFx0a3N6X2NmZyhkZXYsIEtTWjg0NjNfUkVHX1NXX1JFU0VULFxcbi1cXHRcXHRcXHRLU1o4NDYzX0dMT0JBTF9TT0ZUV0FSRV9SRVNFVCwgdHJ1ZSk7XFxuLVxcdFxcdGtzel9jZmcoZGV2LCBLU1o4NDYzX1JFR19TV19SRVNFVCxcXG4tXFx0XFx0XFx0S1NaODQ2M19HTE9CQUxfU09GVFdBUkVfUkVTRVQsIGZhbHNlKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0LyogcmVzZXQgc3dpdGNoICovXFxuIFxcdFxcdGtzel93cml0ZTgoZGV2LCBSRUdfUE9XRVJfTUFOQUdFTUVOVF8xLFxcbkBAIC0yMDI2LDYgKzIwOTEsNTAgQEAgc3RhdGljIHZvaWQga3N6ODh4M19jb25maWdfcm1paV9jbGsoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4gXFx0XFx0S1NaODhYM19QT1JUM19STUlJX0NMS19JTlRFUk5BTCwgcm1paV9jbGtfaW50ZXJuYWwpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBrc3o4NDYzX2NvbmZpZ19jcHVfcG9ydChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuK3tcXG4rXFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3Qga3N6X3BvcnQgKnA7XFxuK1xcdHU4IGZpYmVyX3BvcnRzID0gMDtcXG4rXFx0Y29uc3QgdTMyICptYXNrcztcXG4rXFx0Y29uc3QgdTE2ICpyZWdzO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdG1hc2tzID0gZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VtYXNrcztcXG4rXFx0cmVncyA9IGRldi1cXHUwMDNlaW5mby1cXHUwMDNlcmVncztcXG4rXFxuK1xcdGtzel9jZmcoZGV2LCByZWdzW1NfVEFJTF9UQUdfQ1RSTF0sIG1hc2tzW1NXX1RBSUxfVEFHX0VOQUJMRV0sIHRydWUpO1xcbitcXG4rXFx0a3N6OF9wb3J0X3NldHVwKGRldiwgZGV2LVxcdTAwM2VjcHVfcG9ydCwgdHJ1ZSk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZGV2LVxcdTAwM2VwaHlfcG9ydF9jbnQ7IGkrKylcXG4rXFx0XFx0a3N6X3BvcnRfc3RwX3N0YXRlX3NldChkcywgaSwgQlJfU1RBVEVfRElTQUJMRUQpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRldi1cXHUwMDNlcGh5X3BvcnRfY250OyBpKyspIHtcXG4rXFx0XFx0cCA9IFxcdTAwMjZkZXYtXFx1MDAzZXBvcnRzW2ldO1xcbitcXHRcXHRrc3pfcG9ydF9jZmcoZGV2LCBpLCByZWdzW1BfU1RQX0NUUkxdLCBQT1JUX0ZPUkNFX0ZMT1dfQ1RSTCxcXG4rXFx0XFx0XFx0ICAgICBwLVxcdTAwM2VmaWJlcik7XFxuK1xcdFxcdGlmIChwLVxcdTAwM2VmaWJlcilcXG4rXFx0XFx0XFx0ZmliZXJfcG9ydHMgfD0gKDEgXFx1MDAzY1xcdTAwM2MgaSk7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFNldHVwIGZpYmVyIHBvcnRzLiAqL1xcbitcXHRpZiAoZmliZXJfcG9ydHMpIHtcXG4rXFx0XFx0ZmliZXJfcG9ydHMgXFx1MDAyNj0gMztcXG4rXFx0XFx0cmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSwgS1NaODQ2M19SRUdfQ0ZHX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgIGZpYmVyX3BvcnRzIFxcdTAwM2NcXHUwMDNjIFBPUlRfQ09QUEVSX01PREVfUyxcXG4rXFx0XFx0XFx0XFx0ICAgMCk7XFxuK1xcdFxcdHJlZ21hcF91cGRhdGVfYml0cyhrc3pfcmVnbWFwXzE2KGRldiksIEtTWjg0NjNfUkVHX0RTUF9DVFJMXzYsXFxuK1xcdFxcdFxcdFxcdCAgIENPUFBFUl9SRUNFSVZFX0FESlVTVE1FTlQsIDApO1xcbitcXHR9XFxuK1xcbitcXHQvKiBUdXJuIG9mZiBQVFAgZnVuY3Rpb24gYXMgdGhlIHN3aXRjaCBlbmFibGVzIGl0IGJ5IGRlZmF1bHQgKi9cXG4rXFx0cmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSwgS1NaODQ2M19QVFBfTVNHX0NPTkYxLFxcbitcXHRcXHRcXHQgICBQVFBfRU5BQkxFLCAwKTtcXG4rXFx0cmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSwgS1NaODQ2M19QVFBfQ0xLX0NUUkwsXFxuK1xcdFxcdFxcdCAgIFBUUF9DTEtfRU5BQkxFLCAwKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQga3N6OF9jb25maWdfY3B1X3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiB7XFxuIFxcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cXHUwMDNlcHJpdjtcXG5AQCAtMjAzMyw3ICsyMTQyLDYgQEAgc3RhdGljIHZvaWQga3N6OF9jb25maWdfY3B1X3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHRjb25zdCB1MzIgKm1hc2tzO1xcbiBcXHRjb25zdCB1MTYgKnJlZ3M7XFxuIFxcdHU4IHJlbW90ZTtcXG4tXFx0dTggZmliZXJfcG9ydHMgPSAwO1xcbiBcXHRpbnQgaTtcXG4gXFxuIFxcdG1hc2tzID0gZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VtYXNrcztcXG5AQCAtMjA2NCwzMiArMjE3Miw2IEBAIHN0YXRpYyB2b2lkIGtzejhfY29uZmlnX2NwdV9wb3J0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRrc3pfcG9ydF9jZmcoZGV2LCBpLCByZWdzW1BfU1RQX0NUUkxdLFxcbiBcXHRcXHRcXHRcXHQgICAgIFBPUlRfRk9SQ0VfRkxPV19DVFJMLCBmYWxzZSk7XFxuLVxcdFxcdGlmIChwLVxcdTAwM2VmaWJlcilcXG4tXFx0XFx0XFx0ZmliZXJfcG9ydHMgfD0gKDEgXFx1MDAzY1xcdTAwM2MgaSk7XFxuLVxcdH1cXG4tXFx0aWYgKGtzel9pc19rc3o4NDYzKGRldikpIHtcXG4tXFx0XFx0LyogU2V0dXAgZmliZXIgcG9ydHMuICovXFxuLVxcdFxcdGlmIChmaWJlcl9wb3J0cykge1xcbi1cXHRcXHRcXHRmaWJlcl9wb3J0cyBcXHUwMDI2PSAzO1xcbi1cXHRcXHRcXHRyZWdtYXBfdXBkYXRlX2JpdHMoa3N6X3JlZ21hcF8xNihkZXYpLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBLU1o4NDYzX1JFR19DRkdfQ1RSTCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgZmliZXJfcG9ydHMgXFx1MDAzY1xcdTAwM2MgUE9SVF9DT1BQRVJfTU9ERV9TLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAwKTtcXG4tXFx0XFx0XFx0cmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgS1NaODQ2M19SRUdfRFNQX0NUUkxfNixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgQ09QUEVSX1JFQ0VJVkVfQURKVVNUTUVOVCwgMCk7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdC8qIFR1cm4gb2ZmIFBUUCBmdW5jdGlvbiBhcyB0aGUgc3dpdGNoJ3MgcHJvcHJpZXRhcnkgd2F5IG9mXFxuLVxcdFxcdCAqIGhhbmRsaW5nIHRpbWVzdGFtcCBpcyBub3Qgc3VwcG9ydGVkIGluIGN1cnJlbnQgTGludXggUFRQXFxuLVxcdFxcdCAqIHN0YWNrIGltcGxlbWVudGF0aW9uLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0cmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSxcXG4tXFx0XFx0XFx0XFx0ICAgS1NaODQ2M19QVFBfTVNHX0NPTkYxLFxcbi1cXHRcXHRcXHRcXHQgICBQVFBfRU5BQkxFLCAwKTtcXG4tXFx0XFx0cmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSxcXG4tXFx0XFx0XFx0XFx0ICAgS1NaODQ2M19QVFBfQ0xLX0NUUkwsXFxuLVxcdFxcdFxcdFxcdCAgIFBUUF9DTEtfRU5BQkxFLCAwKTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC0yMzAwLDYgKzIzODIsMTUwIEBAIHN0YXRpYyB2b2lkIGtzejg4eHhfcl9taWJfc3RhdHM2NChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcXG4gXFx0c3Bpbl91bmxvY2soXFx1MDAyNm1pYi1cXHUwMDNlc3RhdHM2NF9sb2NrKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBrc3o4NDYzX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4re1xcbitcXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXFx1MDAzZXByaXY7XFxuK1xcdHUxNiBzdG9ybV9tYXNrLCBzdG9ybV9yYXRlO1xcbitcXHRzdHJ1Y3Qga3N6X3BvcnQgKnA7XFxuK1xcdGNvbnN0IHUxNiAqcmVncztcXG4rXFx0aW50IGksIHJldDtcXG4rXFxuK1xcdHJlZ3MgPSBkZXYtXFx1MDAzZWluZm8tXFx1MDAzZXJlZ3M7XFxuK1xcbitcXHRkZXYtXFx1MDAzZXZsYW5fY2FjaGUgPSBkZXZtX2tjYWxsb2MoZGV2LVxcdTAwM2VkZXYsIHNpemVvZihzdHJ1Y3Qgdmxhbl90YWJsZSksXFxuK1xcdFxcdFxcdFxcdCAgICAgICBkZXYtXFx1MDAzZWluZm8tXFx1MDAzZW51bV92bGFucywgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghZGV2LVxcdTAwM2V2bGFuX2NhY2hlKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHJldCA9IGtzejg0NjNfcmVzZXRfc3dpdGNoKGRldik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2Vycihkcy1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIHJlc2V0IHN3aXRjaFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIHNldCBicm9hZGNhc3Qgc3Rvcm0gcHJvdGVjdGlvbiAxMCUgcmF0ZSAqL1xcbitcXHRzdG9ybV9tYXNrID0gQlJPQURDQVNUX1NUT1JNX1JBVEU7XFxuK1xcdHN0b3JtX3JhdGUgPSAoQlJPQURDQVNUX1NUT1JNX1ZBTFVFICogQlJPQURDQVNUX1NUT1JNX1BST1RfUkFURSkgLyAxMDA7XFxuK1xcdHN0b3JtX21hc2sgPSBzd2FiMTYoc3Rvcm1fbWFzayk7XFxuK1xcdHN0b3JtX3JhdGUgPSBzd2FiMTYoc3Rvcm1fcmF0ZSk7XFxuK1xcdHJlZ21hcF91cGRhdGVfYml0cyhrc3pfcmVnbWFwXzE2KGRldiksIHJlZ3NbU19CUk9BRENBU1RfQ1RSTF0sXFxuK1xcdFxcdFxcdCAgIHN0b3JtX21hc2ssIHN0b3JtX3JhdGUpO1xcbitcXG4rXFx0a3N6ODQ2M19jb25maWdfY3B1X3BvcnQoZHMpO1xcbitcXG4rXFx0a3N6OF9lbmFibGVfc3RwX2FkZHIoZGV2KTtcXG4rXFxuK1xcdGRzLVxcdTAwM2VudW1fdHhfcXVldWVzID0gZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VudW1fdHhfcXVldWVzO1xcbitcXG4rXFx0cmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfOChkZXYpLCByZWdzW1NfTVVMVElDQVNUX0NUUkxdLFxcbitcXHRcXHRcXHQgICBNVUxUSUNBU1RfU1RPUk1fRElTQUJMRSwgTVVMVElDQVNUX1NUT1JNX0RJU0FCTEUpO1xcbitcXG4rXFx0a3N6X2luaXRfbWliX3RpbWVyKGRldik7XFxuK1xcbitcXHRkcy1cXHUwMDNlY29uZmlndXJlX3ZsYW5fd2hpbGVfbm90X2ZpbHRlcmluZyA9IGZhbHNlO1xcbitcXHRkcy1cXHUwMDNlZHNjcF9wcmlvX21hcHBpbmdfaXNfZ2xvYmFsID0gdHJ1ZTtcXG4rXFx0ZHMtXFx1MDAzZW10dV9lbmZvcmNlbWVudF9pbmdyZXNzID0gdHJ1ZTtcXG4rXFxuK1xcdC8qIFdlIHJlbHkgb24gc29mdHdhcmUgdW50YWdnaW5nIG9uIHRoZSBDUFUgcG9ydCwgc28gdGhhdCB3ZVxcbitcXHQgKiBjYW4gc3VwcG9ydCBib3RoIHRhZ2dlZCBhbmQgdW50YWdnZWQgVkxBTnNcXG4rXFx0ICovXFxuK1xcdGRzLVxcdTAwM2V1bnRhZ19icmlkZ2VfcHZpZCA9IHRydWU7XFxuK1xcbitcXHQvKiBWTEFOIGZpbHRlcmluZyBpcyBwYXJ0bHkgY29udHJvbGxlZCBieSB0aGUgZ2xvYmFsIFZMQU5cXG4rXFx0ICogRW5hYmxlIGZsYWdcXG4rXFx0ICovXFxuK1xcdGRzLVxcdTAwM2V2bGFuX2ZpbHRlcmluZ19pc19nbG9iYWwgPSB0cnVlO1xcbitcXG4rXFx0LyogRW5hYmxlIGF1dG9tYXRpYyBmYXN0IGFnaW5nIHdoZW4gbGluayBjaGFuZ2VkIGRldGVjdGVkLiAqL1xcbitcXHRrc3pfY2ZnKGRldiwgU19MSU5LX0FHSU5HX0NUUkwsIFNXX0xJTktfQVVUT19BR0lORywgdHJ1ZSk7XFxuK1xcbitcXHQvKiBFbmFibGUgYWdncmVzc2l2ZSBiYWNrIG9mZiBhbGdvcml0aG0gaW4gaGFsZiBkdXBsZXggbW9kZS4gKi9cXG4rXFx0cmV0ID0ga3N6X3JtdzgoZGV2LCBSRUdfU1dfQ1RSTF8xLCBTV19BR0dSX0JBQ0tPRkYsIFNXX0FHR1JfQkFDS09GRik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBNYWtlIHN1cmUgdW5pY2FzdCBWTEFOIGJvdW5kYXJ5IGlzIHNldCBhcyBkZWZhdWx0IGFuZFxcbitcXHQgKiBlbmFibGUgbm8gZXhjZXNzaXZlIGNvbGxpc2lvbiBkcm9wLlxcbitcXHQgKi9cXG4rXFx0cmV0ID0ga3N6X3JtdzgoZGV2LCBSRUdfU1dfQ1RSTF8yLFxcbitcXHRcXHQgICAgICAgVU5JQ0FTVF9WTEFOX0JPVU5EQVJZIHwgTk9fRVhDX0NPTExJU0lPTl9EUk9QLFxcbitcXHRcXHQgICAgICAgVU5JQ0FTVF9WTEFOX0JPVU5EQVJZIHwgTk9fRVhDX0NPTExJU0lPTl9EUk9QKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGtzel9jZmcoZGV2LCBTX1JFUExBQ0VfVklEX0NUUkwsIFNXX1JFUExBQ0VfVklELCBmYWxzZSk7XFxuK1xcbitcXHRrc3pfY2ZnKGRldiwgU19NSVJST1JfQ1RSTCwgU1dfTUlSUk9SX1JYX1RYLCBmYWxzZSk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgKGRldi1cXHUwMDNlaW5mby1cXHUwMDNlbnVtX3ZsYW5zIC8gNCk7IGkrKylcXG4rXFx0XFx0a3N6OF9yX3ZsYW5fZW50cmllcyhkZXYsIGkpO1xcbitcXG4rXFx0LyogU3RhcnQgd2l0aCBsZWFybmluZyBkaXNhYmxlZCBvbiBzdGFuZGFsb25lIHVzZXIgcG9ydHMsIGFuZCBlbmFibGVkXFxuK1xcdCAqIG9uIHRoZSBDUFUgcG9ydC4gSW4gbGFjayBvZiBvdGhlciBmaW5lciBtZWNoYW5pc21zLCBsZWFybmluZyBvbiB0aGVcXG4rXFx0ICogQ1BVIHBvcnQgd2lsbCBhdm9pZCBmbG9vZGluZyBicmlkZ2UgbG9jYWwgYWRkcmVzc2VzIG9uIHRoZSBuZXR3b3JrXFxuK1xcdCAqIGluIHNvbWUgY2FzZXMuXFxuK1xcdCAqL1xcbitcXHRwID0gXFx1MDAyNmRldi1cXHUwMDNlcG9ydHNbZGV2LVxcdTAwM2VjcHVfcG9ydF07XFxuK1xcdHAtXFx1MDAzZWxlYXJuaW5nID0gdHJ1ZTtcXG4rXFxuK1xcdGlmIChkZXYtXFx1MDAzZWlycSBcXHUwMDNlIDApIHtcXG4rXFx0XFx0cmV0ID0ga3N6ODQ2M19naXJxX3NldHVwKGRldik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHRyZXQgPSBrc3o4NDYzX3B0cF9pcnFfc2V0dXAoZHMpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIGZyZWVfZ2lycTtcXG4rXFxuK1xcdFxcdHJldCA9IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoZHMpO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdGRldl9lcnIoZGV2LVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0cmV0KTtcXG4rXFx0XFx0XFx0Z290byBmcmVlX3B0cF9pcnE7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0ga3N6X21kaW9fcmVnaXN0ZXIoZGV2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYtXFx1MDAzZWRldiwgXFxcImZhaWxlZCB0byByZWdpc3RlciB0aGUgbWRpb1xcXCIpO1xcbitcXHRcXHRnb3RvIHB0cF9jbG9ja191bnJlZ2lzdGVyO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBrc3pfZGNiX2luaXQoZGV2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBwdHBfY2xvY2tfdW5yZWdpc3RlcjtcXG4rXFxuK1xcdC8qIHN0YXJ0IHN3aXRjaCAqL1xcbitcXHRyZWdtYXBfdXBkYXRlX2JpdHMoa3N6X3JlZ21hcF84KGRldiksIHJlZ3NbU19TVEFSVF9DVFJMXSxcXG4rXFx0XFx0XFx0ICAgU1dfU1RBUlQsIFNXX1NUQVJUKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rcHRwX2Nsb2NrX3VucmVnaXN0ZXI6XFxuK1xcdGlmIChkZXYtXFx1MDAzZWlycSBcXHUwMDNlIDApXFxuK1xcdFxcdGtzel9wdHBfY2xvY2tfdW5yZWdpc3Rlcihkcyk7XFxuK2ZyZWVfcHRwX2lycTpcXG4rXFx0aWYgKGRldi1cXHUwMDNlaXJxIFxcdTAwM2UgMClcXG4rXFx0XFx0a3N6ODQ2M19wdHBfaXJxX2ZyZWUoZHMpO1xcbitmcmVlX2dpcnE6XFxuK1xcdGlmIChkZXYtXFx1MDAzZWlycSBcXHUwMDNlIDApXFxuK1xcdFxcdGtzel9pcnFfZnJlZShcXHUwMDI2ZGV2LVxcdTAwM2VnaXJxKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGtzejg0NjNfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbit7XFxuK1xcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4rXFxuK1xcdGlmIChkZXYtXFx1MDAzZWlycSBcXHUwMDNlIDApIHtcXG4rXFx0XFx0a3N6X3B0cF9jbG9ja191bnJlZ2lzdGVyKGRzKTtcXG4rXFx0XFx0a3N6ODQ2M19wdHBfaXJxX2ZyZWUoZHMpO1xcbitcXHRcXHRrc3pfaXJxX2ZyZWUoXFx1MDAyNmRldi1cXHUwMDNlZ2lycSk7XFxuK1xcdH1cXG4rfVxcbitcXG4gLyoqXFxuICAqIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhfd3JpdGUoKSAtIFNldCB0aGUgZHJpdmUgc3RyZW5ndGggY29uZmlndXJhdGlvbiBmb3JcXG4gICpcXHRcXHRcXHRcXHQgICAgS1NaODg2MyBjb21wYXRpYmxlIGNoaXAgdmFyaWFudHMuXFxuQEAgLTI0NDUsMTAgKzI2NzEsNiBAQCBzdGF0aWMgaW50IGtzejhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHQvKiBzZXQgYnJvYWRjYXN0IHN0b3JtIHByb3RlY3Rpb24gMTAlIHJhdGUgKi9cXG4gXFx0c3Rvcm1fbWFzayA9IEJST0FEQ0FTVF9TVE9STV9SQVRFO1xcbiBcXHRzdG9ybV9yYXRlID0gKEJST0FEQ0FTVF9TVE9STV9WQUxVRSAqIEJST0FEQ0FTVF9TVE9STV9QUk9UX1JBVEUpIC8gMTAwO1xcbi1cXHRpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSkge1xcbi1cXHRcXHRzdG9ybV9tYXNrID0gc3dhYjE2KHN0b3JtX21hc2spO1xcbi1cXHRcXHRzdG9ybV9yYXRlID0gc3dhYjE2KHN0b3JtX3JhdGUpO1xcbi1cXHR9XFxuIFxcdHJlZ21hcF91cGRhdGVfYml0cyhrc3pfcmVnbWFwXzE2KGRldiksIHJlZ3NbU19CUk9BRENBU1RfQ1RSTF0sXFxuIFxcdFxcdFxcdCAgIHN0b3JtX21hc2ssIHN0b3JtX3JhdGUpO1xcbiBcXG5AQCAtMjQ5OSw3ICsyNzIxLDcgQEAgc3RhdGljIGludCBrc3o4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFxuIFxcdGtzel9jZmcoZGV2LCBTX01JUlJPUl9DVFJMLCBTV19NSVJST1JfUlhfVFgsIGZhbHNlKTtcXG4gXFxuLVxcdGlmICgha3N6X2lzX2tzejg4eDMoZGV2KSBcXHUwMDI2XFx1MDAyNiAha3N6X2lzX2tzejg0NjMoZGV2KSlcXG4rXFx0aWYgKCFrc3pfaXNfa3N6ODh4MyhkZXYpKVxcbiBcXHRcXHRrc3pfY2ZnKGRldiwgUkVHX1NXX0NUUkxfMTksIFNXX0lOU19UQUdfRU5BQkxFLCB0cnVlKTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyAoZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VudW1fdmxhbnMgLyA0KTsgaSsrKVxcbkBAIC0yNjIzLDYgKzI4NDUsOSBAQCBzdGF0aWMgdTMyIGtzejhfZ2V0X3BvcnRfYWRkcihpbnQgcG9ydCwgaW50IG9mZnNldClcXG4gXFxuIHN0YXRpYyB1MzIga3N6ODQ2M19nZXRfcG9ydF9hZGRyKGludCBwb3J0LCBpbnQgb2Zmc2V0KVxcbiB7XFxuK1xcdGlmIChvZmZzZXQgXFx1MDAzZT0gS1NaODQ2M19QVFBfQ0xLX0NUUkwpXFxuK1xcdFxcdHJldHVybiBvZmZzZXQgKyAweDIwICogcG9ydDtcXG4rXFxuIFxcdHJldHVybiBvZmZzZXQgKyAweDE4ICogcG9ydDtcXG4gfVxcbiBcXG5AQCAtMjc1NSw3ICsyOTgwLDcgQEAgc3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBrc3o4NDYzX2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBpbnQgcG9ydCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIG1wKVxcbiB7XFxuLVxcdHJldHVybiBEU0FfVEFHX1BST1RPX0tTWjk4OTM7XFxuK1xcdHJldHVybiBEU0FfVEFHX1BST1RPX0tTWjg0NjM7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQga3N6ODQ2M19jb25uZWN0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuQEAgLTI3NjMsNyArMjk4OCw3IEBAIHN0YXRpYyBpbnQga3N6ODQ2M19jb25uZWN0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuIHtcXG4gXFx0c3RydWN0IGtzel90YWdnZXJfZGF0YSAqdGFnZ2VyX2RhdGE7XFxuIFxcbi1cXHRpZiAocHJvdG8gIT0gRFNBX1RBR19QUk9UT19LU1o5ODkzKVxcbitcXHRpZiAocHJvdG8gIT0gRFNBX1RBR19QUk9UT19LU1o4NDYzKVxcbiBcXHRcXHRyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDtcXG4gXFxuIFxcdHRhZ2dlcl9kYXRhID0ga3N6X3RhZ2dlcl9kYXRhKGRzKTtcXG5AQCAtMjg4OSw4ICszMTE0LDggQEAgY29uc3Qgc3RydWN0IGtzel9kZXZfb3BzIGtzejg4eHhfZGV2X29wcyA9IHtcXG4gY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGtzejg0NjNfc3dpdGNoX29wcyA9IHtcXG4gXFx0LmdldF90YWdfcHJvdG9jb2xcXHQ9IGtzejg0NjNfZ2V0X3RhZ19wcm90b2NvbCxcXG4gXFx0LmNvbm5lY3RfdGFnX3Byb3RvY29sICAgPSBrc3o4NDYzX2Nvbm5lY3RfdGFnX3Byb3RvY29sLFxcbi1cXHQuc2V0dXBcXHRcXHRcXHQ9IGtzejhfc2V0dXAsXFxuLVxcdC50ZWFyZG93blxcdFxcdD0ga3N6X3RlYXJkb3duLFxcbitcXHQuc2V0dXBcXHRcXHRcXHQ9IGtzejg0NjNfc2V0dXAsXFxuK1xcdC50ZWFyZG93blxcdFxcdD0ga3N6ODQ2M190ZWFyZG93bixcXG4gXFx0LnBoeV9yZWFkXFx0XFx0PSBrc3o4NDYzX3BoeV9yZWFkMTYsXFxuIFxcdC5waHlfd3JpdGVcXHRcXHQ9IGtzejg0NjNfcGh5X3dyaXRlMTYsXFxuIFxcdC5waHlsaW5rX2dldF9jYXBzXFx0PSBrc3o4X3BoeWxpbmtfZ2V0X2NhcHMsXFxuQEAgLTI5MTgsOSArMzE0Myw5IEBAIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBrc3o4NDYzX3N3aXRjaF9vcHMgPSB7XFxuIFxcdC5wb3J0X21heF9tdHVcXHRcXHQ9IGtzejg4eHhfbWF4X210dSxcXG4gXFx0LnN1c3BlbmRcXHRcXHQ9IGtzel9zdXNwZW5kLFxcbiBcXHQucmVzdW1lXFx0XFx0XFx0PSBrc3pfcmVzdW1lLFxcbi1cXHQuZ2V0X3RzX2luZm9cXHRcXHQ9IGtzel9nZXRfdHNfaW5mbyxcXG4rXFx0LmdldF90c19pbmZvXFx0XFx0PSBrc3o4NDYzX2dldF90c19pbmZvLFxcbiBcXHQucG9ydF9od3RzdGFtcF9nZXRcXHQ9IGtzel9od3RzdGFtcF9nZXQsXFxuLVxcdC5wb3J0X2h3dHN0YW1wX3NldFxcdD0ga3N6X2h3dHN0YW1wX3NldCxcXG4rXFx0LnBvcnRfaHd0c3RhbXBfc2V0XFx0PSBrc3o4NDYzX2h3dHN0YW1wX3NldCxcXG4gXFx0LnBvcnRfdHh0c3RhbXBcXHRcXHQ9IGtzel9wb3J0X3R4dHN0YW1wLFxcbiBcXHQucG9ydF9yeHRzdGFtcFxcdFxcdD0ga3N6X3BvcnRfcnh0c3RhbXAsXFxuIFxcdC5wb3J0X3NldHVwX3RjXFx0XFx0PSBrc3o4X3NldHVwX3RjLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejhfcmVnLmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejhfcmVnLmhcXG5pbmRleCA5ODFhYjQ0MWQ5YjcxOS4uNmJjNTExZGExZjdkZGQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4X3JlZy5oXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4X3JlZy5oXFxuQEAgLTc4Niw2ICs3ODYsNyBAQFxcbiAjZGVmaW5lIEtTWjg0NjNfUkVHX1NXX1JFU0VUXFx0XFx0MHgxMjZcXG4gXFxuICNkZWZpbmUgS1NaODQ2M19HTE9CQUxfU09GVFdBUkVfUkVTRVRcXHRCSVQoMClcXG4rI2RlZmluZSBLU1o4NDYzX1BUUF9TT0ZUV0FSRV9SRVNFVFxcdEJJVCgyKVxcbiBcXG4gI2RlZmluZSBLU1o4NDYzX1BUUF9DTEtfQ1RSTFxcdFxcdDB4NjAwXFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jXFxuaW5kZXggNjdhYjZkZGI5ZTUzZjIuLmZmMWJlNTQwYjU0NmZhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmNcXG5AQCAtMjQxOSwxNCArMjQxOSwxNCBAQCBzdGF0aWMgdm9pZCBrc3pfaXJxX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpXFxuIFxcdGtpcnEtXFx1MDAzZW1hc2tlZCBcXHUwMDI2PSB+QklUKGQtXFx1MDAzZWh3aXJxKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQga3N6X2lycV9idXNfbG9jayhzdHJ1Y3QgaXJxX2RhdGEgKmQpXFxuK3ZvaWQga3N6X2lycV9idXNfbG9jayhzdHJ1Y3QgaXJxX2RhdGEgKmQpXFxuIHtcXG4gXFx0c3RydWN0IGtzel9pcnEgKmtpcnEgID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7XFxuIFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZraXJxLVxcdTAwM2VkZXYtXFx1MDAzZWxvY2tfaXJxKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQga3N6X2lycV9idXNfc3luY191bmxvY2soc3RydWN0IGlycV9kYXRhICpkKVxcbit2b2lkIGtzel9pcnFfYnVzX3N5bmNfdW5sb2NrKHN0cnVjdCBpcnFfZGF0YSAqZClcXG4ge1xcbiBcXHRzdHJ1Y3Qga3N6X2lycSAqa2lycSAgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTtcXG4gXFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGtpcnEtXFx1MDAzZWRldjtcXG5AQCAtMjUwNCwxNCArMjUwNCwxNSBAQCBzdGF0aWMgaXJxcmV0dXJuX3Qga3N6X2lycV90aHJlYWRfZm4oaW50IGlycSwgdm9pZCAqZGV2X2lkKVxcbiBcXHRyZXR1cm4gKG5oYW5kbGVkIFxcdTAwM2UgMCA/IElSUV9IQU5ETEVEIDogSVJRX05PTkUpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGtzel9pcnFfY29tbW9uX3NldHVwKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHN0cnVjdCBrc3pfaXJxICpraXJxKVxcbitpbnQga3N6X2lycV9jb21tb25fc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgc3RydWN0IGtzel9pcnEgKmtpcnEsXFxuK1xcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgaXJxX2RvbWFpbl9vcHMgKm9wcylcXG4ge1xcbiBcXHRpbnQgcmV0LCBuO1xcbiBcXG4gXFx0a2lycS1cXHUwMDNlZGV2ID0gZGV2O1xcbiBcXG4tXFx0a2lycS1cXHUwMDNlZG9tYWluID0gaXJxX2RvbWFpbl9jcmVhdGVfc2ltcGxlKGRldl9md25vZGUoZGV2LVxcdTAwM2VkZXYpLCBraXJxLVxcdTAwM2VuaXJxcywgMCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmtzel9pcnFfZG9tYWluX29wcywga2lycSk7XFxuK1xcdGtpcnEtXFx1MDAzZWRvbWFpbiA9IGlycV9kb21haW5fY3JlYXRlX3NpbXBsZShkZXZfZndub2RlKGRldi1cXHUwMDNlZGV2KSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0a2lycS1cXHUwMDNlbmlycXMsIDAsIG9wcywga2lycSk7XFxuIFxcdGlmICgha2lycS1cXHUwMDNlZG9tYWluKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuQEAgLTI1NDMsNyArMjU0NCw3IEBAIGludCBrc3pfZ2lycV9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbiBcXG4gXFx0Z2lycS1cXHUwMDNlaXJxX251bSA9IGRldi1cXHUwMDNlaXJxO1xcbiBcXG4tXFx0cmV0dXJuIGtzel9pcnFfY29tbW9uX3NldHVwKGRldiwgZ2lycSk7XFxuK1xcdHJldHVybiBrc3pfaXJxX2NvbW1vbl9zZXR1cChkZXYsIGdpcnEsIFxcdTAwMjZrc3pfaXJxX2RvbWFpbl9vcHMpO1xcbiB9XFxuIFxcbiBpbnQga3N6X3BpcnFfc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggcClcXG5AQCAtMjU2MCw3ICsyNTYxLDcgQEAgaW50IGtzel9waXJxX3NldHVwKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHApXFxuIFxcdGlmICghcGlycS1cXHUwMDNlaXJxX251bSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRyZXR1cm4ga3N6X2lycV9jb21tb25fc2V0dXAoZGV2LCBwaXJxKTtcXG4rXFx0cmV0dXJuIGtzel9pcnFfY29tbW9uX3NldHVwKGRldiwgcGlycSwgXFx1MDAyNmtzel9pcnFfZG9tYWluX29wcyk7XFxuIH1cXG4gXFxuIHZvaWQga3N6X3RlYXJkb3duKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaFxcbmluZGV4IGFjYWY3MGU2ZjM5M2M5Li5jYmU5ODQ5NDU3OGMzNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oXFxuQEAgLTgsNiArOCw3IEBAXFxuICNkZWZpbmUgX19LU1pfQ09NTU9OX0hcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaXJxZG9tYWluLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L211dGV4LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY3MvcGNzLXhwY3MuaFxcdTAwM2VcXG5AQCAtMTkzLDYgKzE5NCw3IEBAIHN0cnVjdCBrc3pfcG9ydCB7XFxuIFxcdHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnIHRzdGFtcF9jb25maWc7XFxuIFxcdGJvb2wgaHd0c190eF9lbjtcXG4gXFx0Ym9vbCBod3RzX3J4X2VuO1xcbitcXHRib29sIGxhc3RfdHhfaXNfcGRlbGF5cmVzcDtcXG4gXFx0c3RydWN0IGtzel9pcnEgcHRwaXJxO1xcbiBcXHRzdHJ1Y3Qga3N6X3B0cF9pcnEgcHRwbXNnX2lycVszXTtcXG4gXFx0a3RpbWVfdCB0c3RhbXBfbXNnO1xcbkBAIC01MDgsNiArNTEwLDEwIEBAIGludCBrc3pfc3dfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbCk7XFxuIGludCBrc3pfcGFyZW50X21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IHJlZ251bSk7XFxuIGludCBrc3pfcGFyZW50X21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWdudW0sIHUxNiB2YWwpO1xcbiBpbnQga3N6X21kaW9fcmVnaXN0ZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldik7XFxuK3ZvaWQga3N6X2lycV9idXNfbG9jayhzdHJ1Y3QgaXJxX2RhdGEgKmQpO1xcbit2b2lkIGtzel9pcnFfYnVzX3N5bmNfdW5sb2NrKHN0cnVjdCBpcnFfZGF0YSAqZCk7XFxuK2ludCBrc3pfaXJxX2NvbW1vbl9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBzdHJ1Y3Qga3N6X2lycSAqa2lycSxcXG4rXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyAqb3BzKTtcXG4gaW50IGtzel9waXJxX3NldHVwKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHApO1xcbiBpbnQga3N6X2dpcnFfc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldik7XFxuIHZvaWQga3N6X2lycV9mcmVlKHN0cnVjdCBrc3pfaXJxICpraXJxKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuY1xcbmluZGV4IDhiOTgwMzkzMjBhZGRhLi45ZDhiNzg2ODdmNTMxOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jXFxuQEAgLTMyLDYgKzMyLDE1IEBAXFxuIFxcbiAjZGVmaW5lIEtTWl9QVFBfSU5UX1NUQVJUIDEzXFxuIFxcbisvKlxcbisgKiBQVFAgaW50ZXJydXB0IGJpdCBpcyB0aGUgYml0IDEyIG9mIHRoZSAxNi1iaXRzIElTUi9JRVIuIEJ1dCBrc3pfY29tbW9uLmMgb25seVxcbisgKiBhY2Nlc3NlcyB0aGUgaGlnaC1ieXRlIG9mIHRoZXNlIHJlZ2lzdGVycyBzbyB0aGUgUFRQIGludGVycnVwdCBiaXQgYmVjb21lcyA0LlxcbisgKi9cXG4rI2RlZmluZSBLU1o4NDYzX1NSQ19QVFBfSU5UXFx0XFx0NFxcbisjZGVmaW5lIEtTWjg0NjNfUFRQX1BPUlQxX0lOVF9TVEFSVFxcdDEyXFxuKyNkZWZpbmUgS1NaODQ2M19QVFBfUE9SVDJfSU5UX1NUQVJUXFx0MTRcXG4rI2RlZmluZSBLU1o4NDYzX1BUUF9JTlRfU1RBUlRcXHRcXHRLU1o4NDYzX1BUUF9QT1JUMV9JTlRfU1RBUlRcXG4rXFxuIHN0YXRpYyBpbnQga3N6X3B0cF90b3VfZ3BpbyhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbiB7XFxuIFxcdGludCByZXQ7XFxuQEAgLTI4OCw2ICsyOTcsMzEgQEAgc3RhdGljIGludCBrc3pfcHRwX2VuYWJsZV9tb2RlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuIFxcdFxcdFxcdCB0YWdfZW4gPyBQVFBfRU5BQkxFIDogMCk7XFxuIH1cXG4gXFxuK2ludCBrc3o4NDYzX2dldF90c19pbmZvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICp0cylcXG4re1xcbitcXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXFx1MDAzZXByaXY7XFxuK1xcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhO1xcbitcXG4rXFx0cHRwX2RhdGEgPSBcXHUwMDI2ZGV2LVxcdTAwM2VwdHBfZGF0YTtcXG4rXFxuK1xcdGlmICghcHRwX2RhdGEtXFx1MDAzZWNsb2NrKVxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFxuK1xcdHRzLVxcdTAwM2Vzb190aW1lc3RhbXBpbmcgPSBTT0ZfVElNRVNUQU1QSU5HX1RYX0hBUkRXQVJFIHxcXG4rXFx0XFx0XFx0ICAgICAgU09GX1RJTUVTVEFNUElOR19SWF9IQVJEV0FSRSB8XFxuK1xcdFxcdFxcdCAgICAgIFNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFO1xcbitcXG4rXFx0dHMtXFx1MDAzZXR4X3R5cGVzID0gQklUKEhXVFNUQU1QX1RYX09GRikgfCBCSVQoSFdUU1RBTVBfVFhfT04pO1xcbitcXG4rXFx0dHMtXFx1MDAzZXJ4X2ZpbHRlcnMgPSBCSVQoSFdUU1RBTVBfRklMVEVSX05PTkUpIHxcXG4rXFx0XFx0XFx0IEJJVChIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX0VWRU5UKTtcXG4rXFxuK1xcdHRzLVxcdTAwM2VwaGNfaW5kZXggPSBwdHBfY2xvY2tfaW5kZXgocHRwX2RhdGEtXFx1MDAzZWNsb2NrKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAvKiBUaGUgZnVuY3Rpb24gaXMgcmV0dXJuIGJhY2sgdGhlIGNhcGFiaWxpdHkgb2YgdGltZXN0YW1waW5nIGZlYXR1cmUgd2hlblxcbiAgKiByZXF1ZXN0ZWQgdGhyb3VnaCBldGh0b29sIC1UIFxcdTAwM2NpbnRlcmZhY2VcXHUwMDNlIHV0aWxpdHlcXG4gICovXFxuQEAgLTMzMiw2ICszNjYsNzIgQEAgaW50IGtzel9od3RzdGFtcF9nZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQga3N6ODQ2M19zZXRfaHd0c3RhbXBfY29uZmlnKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qga3N6X3BvcnQgKnBydCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcpXFxuK3tcXG4rXFx0Y29uc3QgdTE2ICpyZWdzID0gZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VyZWdzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKGNvbmZpZy1cXHUwMDNlZmxhZ3MpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0c3dpdGNoIChjb25maWctXFx1MDAzZXR4X3R5cGUpIHtcXG4rXFx0Y2FzZSBIV1RTVEFNUF9UWF9PRkY6XFxuK1xcdFxcdHBydC1cXHUwMDNlcHRwbXNnX2lycVtLU1o4NDYzX1NZTkNfTVNHXS50c19lbiAgPSBmYWxzZTtcXG4rXFx0XFx0cHJ0LVxcdTAwM2VwdHBtc2dfaXJxW0tTWjg0NjNfWERSRVFfUERSRVNfTVNHXS50c19lbiA9IGZhbHNlO1xcbitcXHRcXHRwcnQtXFx1MDAzZWh3dHNfdHhfZW4gPSBmYWxzZTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgSFdUU1RBTVBfVFhfT046XFxuK1xcdFxcdHBydC1cXHUwMDNlcHRwbXNnX2lycVtLU1o4NDYzX1NZTkNfTVNHXS50c19lbiAgPSB0cnVlO1xcbitcXHRcXHRwcnQtXFx1MDAzZXB0cG1zZ19pcnFbS1NaODQ2M19YRFJFUV9QRFJFU19NU0ddLnRzX2VuID0gdHJ1ZTtcXG4rXFx0XFx0cHJ0LVxcdTAwM2Vod3RzX3R4X2VuID0gdHJ1ZTtcXG4rXFxuK1xcdFxcdHJldCA9IGtzel9ybXcxNihkZXYsIHJlZ3NbUFRQX01TR19DT05GMV0sIFBUUF8xU1RFUCwgMCk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuK1xcdH1cXG4rXFxuK1xcdHN3aXRjaCAoY29uZmlnLVxcdTAwM2VyeF9maWx0ZXIpIHtcXG4rXFx0Y2FzZSBIV1RTVEFNUF9GSUxURVJfTk9ORTpcXG4rXFx0XFx0cHJ0LVxcdTAwM2Vod3RzX3J4X2VuID0gZmFsc2U7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfRVZFTlQ6XFxuK1xcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9TWU5DOlxcbitcXHRcXHRjb25maWctXFx1MDAzZXJ4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfRVZFTlQ7XFxuK1xcdFxcdHBydC1cXHUwMDNlaHd0c19yeF9lbiA9IHRydWU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRjb25maWctXFx1MDAzZXJ4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9OT05FO1xcbitcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGtzel9wdHBfZW5hYmxlX21vZGUoZGV2KTtcXG4rfVxcbitcXG4raW50IGtzejg0NjNfaHd0c3RhbXBfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdCBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY29uZmlnLFxcbitcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbit7XFxuK1xcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4rXFx0c3RydWN0IGtzel9wb3J0ICpwcnQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRwcnQgPSBcXHUwMDI2ZGV2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFxuK1xcdHJldCA9IGtzejg0NjNfc2V0X2h3dHN0YW1wX2NvbmZpZyhkZXYsIHBydCwgY29uZmlnKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHBydC1cXHUwMDNldHN0YW1wX2NvbmZpZyA9ICpjb25maWc7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBrc3pfc2V0X2h3dHN0YW1wX2NvbmZpZyhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga3N6X3BvcnQgKnBydCxcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZylcXG5AQCAtNTYyLDYgKzY2MiwzMSBAQCBzdGF0aWMgdm9pZCBrc3pfcHRwX3R4dHN0YW1wX3NrYihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbiBcXHRza2JfY29tcGxldGVfdHhfdGltZXN0YW1wKHNrYiwgXFx1MDAyNmh3dHN0YW1wcyk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGtzejg0NjNfc2V0X3BkZWxheXJlc3BfZmxhZyhzdHJ1Y3Qga3N6X3BvcnQgKnBydCxcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3QgcHRwX2hlYWRlciAqaGRyO1xcbitcXHR1bnNpZ25lZCBpbnQgdHlwZTtcXG4rXFx0dTggcHRwX21zZ190eXBlO1xcbitcXG4rXFx0aWYgKCFrc3pfaXNfa3N6ODQ2MyhwcnQtXFx1MDAzZWtzel9kZXYpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAoc2tiX2xpbmVhcml6ZShza2IpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR0eXBlID0gcHRwX2NsYXNzaWZ5X3Jhdyhza2IpO1xcbitcXHRpZiAodHlwZSA9PSBQVFBfQ0xBU1NfTk9ORSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aGRyID0gcHRwX3BhcnNlX2hlYWRlcihza2IsIHR5cGUpO1xcbitcXHRpZiAoIWhkcilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cHRwX21zZ190eXBlID0gcHRwX2dldF9tc2d0eXBlKGhkciwgdHlwZSk7XFxuK1xcdHBydC1cXHUwMDNlbGFzdF90eF9pc19wZGVsYXlyZXNwID0gKHB0cF9tc2dfdHlwZSA9PSBQVFBfTVNHVFlQRV9QREVMQVlfUkVTUCk7XFxuK31cXG4rXFxuIHZvaWQga3N6X3BvcnRfZGVmZXJyZWRfeG1pdChzdHJ1Y3Qga3RocmVhZF93b3JrICp3b3JrKVxcbiB7XFxuIFxcdHN0cnVjdCBrc3pfZGVmZXJyZWRfeG1pdF93b3JrICp4bWl0X3dvcmsgPSB3b3JrX3RvX3htaXRfd29yayh3b3JrKTtcXG5AQCAtNTc4LDYgKzcwMyw4IEBAIHZvaWQga3N6X3BvcnRfZGVmZXJyZWRfeG1pdChzdHJ1Y3Qga3RocmVhZF93b3JrICp3b3JrKVxcbiBcXG4gXFx0cmVpbml0X2NvbXBsZXRpb24oXFx1MDAyNnBydC1cXHUwMDNldHN0YW1wX21zZ19jb21wKTtcXG4gXFxuK1xcdGtzejg0NjNfc2V0X3BkZWxheXJlc3BfZmxhZyhwcnQsIHNrYik7XFxuK1xcbiBcXHRkc2FfZW5xdWV1ZV9za2Ioc2tiLCBza2ItXFx1MDAzZWRldik7XFxuIFxcbiBcXHRrc3pfcHRwX3R4dHN0YW1wX3NrYihkZXYsIHBydCwgY2xvbmUpO1xcbkBAIC05NDQsOCArMTA3MSw5IEBAIGludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFx0LyogQ3VycmVudGx5IG9ubHkgUDJQIG1vZGUgaXMgc3VwcG9ydGVkLiBXaGVuIDgwMl8xQVMgYml0IGlzIHNldCwgaXRcXG4gXFx0ICogZm9yd2FyZHMgYWxsIFBUUCBwYWNrZXRzIHRvIGhvc3QgcG9ydCBhbmQgbm9uZSB0byBvdGhlciBwb3J0cy5cXG4gXFx0ICovXFxuLVxcdHJldCA9IGtzel9ybXcxNihkZXYsIHJlZ3NbUFRQX01TR19DT05GMV0sIFBUUF9UQ19QMlAgfCBQVFBfODAyXzFBUyxcXG4tXFx0XFx0XFx0UFRQX1RDX1AyUCB8IFBUUF84MDJfMUFTKTtcXG4rXFx0cmV0ID0ga3N6X3JtdzE2KGRldiwgcmVnc1tQVFBfTVNHX0NPTkYxXSxcXG4rXFx0XFx0XFx0UFRQX1RDX1AyUCB8IFBUUF84MDJfMUFTIHwgUFRQX0VUSF9FTkFCTEUsXFxuK1xcdFxcdFxcdFBUUF9UQ19QMlAgfCBQVFBfODAyXzFBUyB8IFBUUF9FVEhfRU5BQkxFKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuQEAgLTk2OSw3ICsxMDk3LDIyIEBAIHZvaWQga3N6X3B0cF9jbG9ja191bnJlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFxuIHN0YXRpYyBpbnQga3N6X3JlYWRfdHMoc3RydWN0IGtzel9wb3J0ICpwb3J0LCB1MTYgcmVnLCB1MzIgKnRzKVxcbiB7XFxuLVxcdHJldHVybiBrc3pfcmVhZDMyKHBvcnQtXFx1MDAzZWtzel9kZXYsIHJlZywgdHMpO1xcbitcXHR1MTYgdHNfcmVnID0gcmVnO1xcbitcXG4rXFx0LyoqXFxuK1xcdCAqIE9uIEtTWjg0NjMgRFJFUSBhbmQgRFJFU1AgdGltZXN0YW1wcyBzaGFyZSBvbmUgaW50ZXJydXB0IGxpbmVcXG4rXFx0ICogc28gd2UgaGF2ZSB0byBjaGVjayB0aGUgbmF0dXJlIG9mIHRoZSBsYXRlc3QgZXZlbnQgc2VudCB0byBrbm93XFxuK1xcdCAqIHdoZXJlIHRoZSB0aW1lc3RhbXAgaXMgbG9jYXRlZFxcbitcXHQgKi9cXG4rXFx0aWYgKGtzel9pc19rc3o4NDYzKHBvcnQtXFx1MDAzZWtzel9kZXYpKSB7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBrc3pfZGV2X29wcyAqb3BzID0gcG9ydC1cXHUwMDNla3N6X2Rldi1cXHUwMDNlZGV2X29wcztcXG4rXFxuK1xcdFxcdGlmIChwb3J0LVxcdTAwM2VsYXN0X3R4X2lzX3BkZWxheXJlc3AgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIHRzX3JlZyA9PSBvcHMtXFx1MDAzZWdldF9wb3J0X2FkZHIocG9ydC1cXHUwMDNlbnVtLCBLU1o4NDYzX1JFR19QT1JUX0RSRVFfVFMpKVxcbitcXHRcXHRcXHR0c19yZWcgKz0gS1NaODQ2M19EUkVTUF9UU19PRkZTRVQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBrc3pfcmVhZDMyKHBvcnQtXFx1MDAzZWtzel9kZXYsIHRzX3JlZywgdHMpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaXJxcmV0dXJuX3Qga3N6X3B0cF9tc2dfdGhyZWFkX2ZuKGludCBpcnEsIHZvaWQgKmRldl9pZClcXG5AQCAtMTEyOSw2ICsxMjcyLDEyOCBAQCBzdGF0aWMgaW50IGtzel9wdHBfbXNnX2lycV9zZXR1cChzdHJ1Y3Qga3N6X3BvcnQgKnBvcnQsIHU4IG4pXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfcG9ydF9pcnFfc2V0dXAoc3RydWN0IGtzel9pcnEgKnB0cGlycSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGtzel9wb3J0ICpwb3J0LCBpbnQgaHdfaXJxKVxcbit7XFxuK1xcdHUxNiB0c19yZWdbXSA9IHtLU1o4NDYzX1JFR19QT1JUX1NZTkNfVFMsIEtTWjg0NjNfUkVHX1BPUlRfRFJFUV9UU307XFxuK1xcdHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbmFtZVtdID0ge1xcXCJzeW5jLW1zZ1xcXCIsIFxcXCJkZWxheS1tc2dcXFwifTtcXG4rXFx0Y29uc3Qgc3RydWN0IGtzel9kZXZfb3BzICpvcHMgPSBwb3J0LVxcdTAwM2Vrc3pfZGV2LVxcdTAwM2VkZXZfb3BzO1xcbitcXHRzdHJ1Y3Qga3N6X3B0cF9pcnEgKnB0cG1zZ19pcnE7XFxuK1xcdGludCByZXQ7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aW5pdF9jb21wbGV0aW9uKFxcdTAwMjZwb3J0LVxcdTAwM2V0c3RhbXBfbXNnX2NvbXApO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDI7IGkrKykge1xcbitcXHRcXHRwdHBtc2dfaXJxID0gXFx1MDAyNnBvcnQtXFx1MDAzZXB0cG1zZ19pcnFbaV07XFxuK1xcdFxcdHB0cG1zZ19pcnEtXFx1MDAzZW51bSA9IGlycV9jcmVhdGVfbWFwcGluZyhwdHBpcnEtXFx1MDAzZWRvbWFpbixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBod19pcnEgKyBpKTtcXG4rXFx0XFx0aWYgKCFwdHBtc2dfaXJxLVxcdTAwM2VudW0pIHtcXG4rXFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0XFx0Z290byByZWxlYXNlX21zZ19pcnE7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHB0cG1zZ19pcnEtXFx1MDAzZXBvcnQgPSBwb3J0O1xcbitcXHRcXHRwdHBtc2dfaXJxLVxcdTAwM2V0c19yZWcgPSBvcHMtXFx1MDAzZWdldF9wb3J0X2FkZHIocG9ydC1cXHUwMDNlbnVtLCB0c19yZWdbaV0pO1xcbitcXG4rXFx0XFx0c3Ryc2NweShwdHBtc2dfaXJxLVxcdTAwM2VuYW1lLCBuYW1lW2ldKTtcXG4rXFxuK1xcdFxcdHJldCA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHB0cG1zZ19pcnEtXFx1MDAzZW51bSwgTlVMTCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAga3N6X3B0cF9tc2dfdGhyZWFkX2ZuLCBJUlFGX09ORVNIT1QsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHB0cG1zZ19pcnEtXFx1MDAzZW5hbWUsIHB0cG1zZ19pcnEpO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdGlycV9kaXNwb3NlX21hcHBpbmcocHRwbXNnX2lycS1cXHUwMDNlbnVtKTtcXG4rXFx0XFx0XFx0Z290byByZWxlYXNlX21zZ19pcnE7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbityZWxlYXNlX21zZ19pcnE6XFxuK1xcdHdoaWxlIChpLS0pXFxuK1xcdFxcdGtzel9wdHBfbXNnX2lycV9mcmVlKHBvcnQsIGkpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQga3N6ODQ2M19wdHBfcG9ydF9pcnFfdGVhcmRvd24oc3RydWN0IGtzel9wb3J0ICpwb3J0KVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDI7IGkrKylcXG4rXFx0XFx0a3N6X3B0cF9tc2dfaXJxX2ZyZWUocG9ydCwgaSk7XFxuK31cXG4rXFxuK2ludCBrc3o4NDYzX3B0cF9pcnFfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbit7XFxuK1xcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4rXFx0c3RydWN0IGtzel9wb3J0ICpwb3J0MSwgKnBvcnQyO1xcbitcXHRzdHJ1Y3Qga3N6X2lycSAqcHRwaXJxO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cG9ydDEgPSBcXHUwMDI2ZGV2LVxcdTAwM2Vwb3J0c1swXTtcXG4rXFx0cG9ydDIgPSBcXHUwMDI2ZGV2LVxcdTAwM2Vwb3J0c1sxXTtcXG4rXFx0cHRwaXJxID0gXFx1MDAyNnBvcnQxLVxcdTAwM2VwdHBpcnE7XFxuK1xcbitcXHRwdHBpcnEtXFx1MDAzZWlycV9udW0gPSBpcnFfZmluZF9tYXBwaW5nKGRldi1cXHUwMDNlZ2lycS5kb21haW4sXFxuK1xcdFxcdFxcdFxcdFxcdCAgIEtTWjg0NjNfU1JDX1BUUF9JTlQpO1xcbitcXHRpZiAoIXB0cGlycS1cXHUwMDNlaXJxX251bSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRwdHBpcnEtXFx1MDAzZWRldiA9IGRldjtcXG4rXFx0cHRwaXJxLVxcdTAwM2VuaXJxcyA9IDQ7XFxuK1xcdHB0cGlycS1cXHUwMDNlcmVnX21hc2sgPSBLU1o4NDYzX1BUUF9UU19JRVI7XFxuK1xcdHB0cGlycS1cXHUwMDNlcmVnX3N0YXR1cyA9IEtTWjg0NjNfUFRQX1RTX0lTUjtcXG4rXFx0cHRwaXJxLVxcdTAwM2VpcnEwX29mZnNldCA9IEtTWjg0NjNfUFRQX0lOVF9TVEFSVDtcXG4rXFx0c25wcmludGYocHRwaXJxLVxcdTAwM2VuYW1lLCBzaXplb2YocHRwaXJxLVxcdTAwM2VuYW1lKSwgXFxcInB0cC1pcnFcXFwiKTtcXG4rXFxuK1xcdHB0cGlycS1cXHUwMDNlZG9tYWluID0gaXJxX2RvbWFpbl9jcmVhdGVfbGluZWFyKGRldl9md25vZGUoZGV2LVxcdTAwM2VkZXYpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIHB0cGlycS1cXHUwMDNlbmlycXMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmtzel9wdHBfaXJxX2RvbWFpbl9vcHMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgcHRwaXJxKTtcXG4rXFx0aWYgKCFwdHBpcnEtXFx1MDAzZWRvbWFpbilcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRyZXQgPSBrc3o4NDYzX3B0cF9wb3J0X2lycV9zZXR1cChwdHBpcnEsIHBvcnQxLFxcbitcXHRcXHRcXHRcXHRcXHQgS1NaODQ2M19QVFBfUE9SVDFfSU5UX1NUQVJUIC0gS1NaODQ2M19QVFBfSU5UX1NUQVJUKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byByZWxlYXNlX2RvbWFpbjtcXG4rXFxuK1xcdHJldCA9IGtzejg0NjNfcHRwX3BvcnRfaXJxX3NldHVwKHB0cGlycSwgcG9ydDIsXFxuK1xcdFxcdFxcdFxcdFxcdCBLU1o4NDYzX1BUUF9QT1JUMl9JTlRfU1RBUlQgLSBLU1o4NDYzX1BUUF9JTlRfU1RBUlQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGZyZWVfcG9ydDE7XFxuK1xcbitcXHRyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShwdHBpcnEtXFx1MDAzZWlycV9udW0sIE5VTEwsIGtzel9wdHBfaXJxX3RocmVhZF9mbixcXG4rXFx0XFx0XFx0XFx0ICAgSVJRRl9PTkVTSE9ULCBwdHBpcnEtXFx1MDAzZW5hbWUsIHB0cGlycSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZnJlZV9wb3J0MjtcXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rZnJlZV9wb3J0MjpcXG4rXFx0a3N6ODQ2M19wdHBfcG9ydF9pcnFfdGVhcmRvd24ocG9ydDIpO1xcbitmcmVlX3BvcnQxOlxcbitcXHRrc3o4NDYzX3B0cF9wb3J0X2lycV90ZWFyZG93bihwb3J0MSk7XFxuK3JlbGVhc2VfZG9tYWluOlxcbitcXHRpcnFfZG9tYWluX3JlbW92ZShwdHBpcnEtXFx1MDAzZWRvbWFpbik7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbit2b2lkIGtzejg0NjNfcHRwX2lycV9mcmVlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4re1xcbitcXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXFx1MDAzZXByaXY7XFxuK1xcdHN0cnVjdCBrc3pfcG9ydCAqcG9ydDEgPSBcXHUwMDI2ZGV2LVxcdTAwM2Vwb3J0c1swXTtcXG4rXFx0c3RydWN0IGtzel9wb3J0ICpwb3J0MiA9IFxcdTAwMjZkZXYtXFx1MDAzZXBvcnRzWzFdO1xcbitcXHRzdHJ1Y3Qga3N6X2lycSAqcHRwaXJxID0gXFx1MDAyNnBvcnQxLVxcdTAwM2VwdHBpcnE7XFxuK1xcbitcXHRmcmVlX2lycShwdHBpcnEtXFx1MDAzZWlycV9udW0sIHB0cGlycSk7XFxuK1xcdGtzejg0NjNfcHRwX3BvcnRfaXJxX3RlYXJkb3duKHBvcnQyKTtcXG4rXFx0a3N6ODQ2M19wdHBfcG9ydF9pcnFfdGVhcmRvd24ocG9ydDEpO1xcbitcXHRpcnFfZG9tYWluX3JlbW92ZShwdHBpcnEtXFx1MDAzZWRvbWFpbik7XFxuK31cXG4rXFxuIGludCBrc3pfcHRwX2lycV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIHU4IHApXFxuIHtcXG4gXFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVxcdTAwM2Vwcml2O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaCBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oXFxuaW5kZXggMzA4NmU1MTliMWI2NDEuLjcwNjdlYzliZDFlNmYyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmhcXG5AQCAtMzksMTcgKzM5LDI0IEBAIHZvaWQga3N6X3B0cF9jbG9ja191bnJlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XFxuIFxcbiBpbnQga3N6X2dldF90c19pbmZvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdFxcdCAgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqdHMpO1xcbitpbnQga3N6ODQ2M19nZXRfdHNfaW5mbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbitcXHRcXHRcXHRzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqdHMpO1xcbiBpbnQga3N6X2h3dHN0YW1wX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXHRcXHQgICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcpO1xcbiBpbnQga3N6X2h3dHN0YW1wX3NldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXHRcXHQgICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcsXFxuIFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4raW50IGtzejg0NjNfaHd0c3RhbXBfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdCBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY29uZmlnLFxcbitcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4gdm9pZCBrc3pfcG9ydF90eHRzdGFtcChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4gdm9pZCBrc3pfcG9ydF9kZWZlcnJlZF94bWl0KHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspO1xcbiBib29sIGtzel9wb3J0X3J4dHN0YW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgdHlwZSk7XFxuIGludCBrc3pfcHRwX2lycV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIHU4IHApO1xcbiB2b2lkIGtzel9wdHBfaXJxX2ZyZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCB1OCBwKTtcXG4raW50IGtzejg0NjNfcHRwX2lycV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xcbit2b2lkIGtzejg0NjNfcHRwX2lycV9mcmVlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XFxuIFxcbiAjZWxzZVxcbiBcXG5AQCAtNzIsMTEgKzc5LDIwIEBAIHN0YXRpYyBpbmxpbmUgaW50IGtzel9wdHBfaXJxX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgdTggcClcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrc3pfcHRwX2lycV9mcmVlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgdTggcCkge31cXG4gXFxuK3N0YXRpYyBpbmxpbmUgaW50IGtzejg0NjNfcHRwX2lycV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBrc3o4NDYzX3B0cF9pcnFfZnJlZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpIHt9XFxuK1xcbiAjZGVmaW5lIGtzel9nZXRfdHNfaW5mbyBOVUxMXFxuKyNkZWZpbmUga3N6ODQ2M19nZXRfdHNfaW5mbyBOVUxMXFxuIFxcbiAjZGVmaW5lIGtzel9od3RzdGFtcF9nZXQgTlVMTFxcbiBcXG4gI2RlZmluZSBrc3pfaHd0c3RhbXBfc2V0IE5VTExcXG4rI2RlZmluZSBrc3o4NDYzX2h3dHN0YW1wX3NldCBOVUxMXFxuIFxcbiAjZGVmaW5lIGtzel9wb3J0X3J4dHN0YW1wIE5VTExcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cF9yZWcuaCBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cF9yZWcuaFxcbmluZGV4IGVhYjlhZWNiN2ZhOGE1Li42NWVhODU3N2FmNzU1OCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmhcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmhcXG5AQCAtMTIxLDYgKzEyMSwxMiBAQFxcbiAjZGVmaW5lIFJFR19QVFBfUE9SVF9TWU5DX1RTXFx0XFx0MHgwQzBDXFxuICNkZWZpbmUgUkVHX1BUUF9QT1JUX1BEUkVTUF9UU1xcdFxcdDB4MEMxMFxcbiBcXG4rI2RlZmluZSBLU1o4NDYzX1JFR19QT1JUX0RSRVFfVFNcXHQweDA2NDhcXG4rI2RlZmluZSBLU1o4NDYzX1JFR19QT1JUX1NZTkNfVFNcXHQweDA2NENcXG4rI2RlZmluZSBLU1o4NDYzX1JFR19QT1JUX0RSRVNQX1RTXFx0MHgwNjUwXFxuKyNkZWZpbmUgS1NaODQ2M19QVFBfVFNfSVNSXFx0XFx0MHgwNjhDXFxuKyNkZWZpbmUgS1NaODQ2M19QVFBfVFNfSUVSXFx0XFx0MHgwNjhFXFxuK1xcbiAjZGVmaW5lIFJFR19QVFBfUE9SVF9UWF9JTlRfU1RBVFVTX18yXFx0MHgwQzE0XFxuICNkZWZpbmUgUkVHX1BUUF9QT1JUX1RYX0lOVF9FTkFCTEVfXzJcXHQweDBDMTZcXG4gXFxuQEAgLTEzMSw0ICsxMzcsOCBAQFxcbiAjZGVmaW5lIEtTWl9YRFJFUV9NU0dcXHRcXHRcXHQxXFxuICNkZWZpbmUgS1NaX1BEUkVTX01TR1xcdFxcdFxcdDBcXG4gXFxuKyNkZWZpbmUgS1NaODQ2M19EUkVTUF9UU19PRkZTRVRcXHRcXHQoS1NaODQ2M19SRUdfUE9SVF9EUkVTUF9UUyAtIEtTWjg0NjNfUkVHX1BPUlRfRFJFUV9UUylcXG4rI2RlZmluZSBLU1o4NDYzX1NZTkNfTVNHXFx0XFx0MFxcbisjZGVmaW5lIEtTWjg0NjNfWERSRVFfUERSRVNfTVNHXFx0XFx0MVxcbitcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RzYS5oIGIvaW5jbHVkZS9uZXQvZHNhLmhcXG5pbmRleCA4YzE2ZWYyM2NjMTAyYS4uNmY3ZjVjMTdiNTMyMDggMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvZHNhLmhcXG4rKysgYi9pbmNsdWRlL25ldC9kc2EuaFxcbkBAIC01OSw2ICs1OSw3IEBAIHN0cnVjdCB0Y19hY3Rpb247XFxuICNkZWZpbmUgRFNBX1RBR19QUk9UT19NWExfR1NXMVhYX1ZBTFVFXFx0XFx0MzFcXG4gI2RlZmluZSBEU0FfVEFHX1BST1RPX01YTDg2Ml9WQUxVRVxcdFxcdDMyXFxuICNkZWZpbmUgRFNBX1RBR19QUk9UT19ORVRDX1ZBTFVFXFx0XFx0MzNcXG4rI2RlZmluZSBEU0FfVEFHX1BST1RPX0tTWjg0NjNfVkFMVUVcXHRcXHQzNFxcbiBcXG4gZW51bSBkc2FfdGFnX3Byb3RvY29sIHtcXG4gXFx0RFNBX1RBR19QUk9UT19OT05FXFx0XFx0PSBEU0FfVEFHX1BST1RPX05PTkVfVkFMVUUsXFxuQEAgLTk1LDYgKzk2LDcgQEAgZW51bSBkc2FfdGFnX3Byb3RvY29sIHtcXG4gXFx0RFNBX1RBR19QUk9UT19NWExfR1NXMVhYXFx0PSBEU0FfVEFHX1BST1RPX01YTF9HU1cxWFhfVkFMVUUsXFxuIFxcdERTQV9UQUdfUFJPVE9fTVhMODYyXFx0XFx0PSBEU0FfVEFHX1BST1RPX01YTDg2Ml9WQUxVRSxcXG4gXFx0RFNBX1RBR19QUk9UT19ORVRDXFx0XFx0PSBEU0FfVEFHX1BST1RPX05FVENfVkFMVUUsXFxuK1xcdERTQV9UQUdfUFJPVE9fS1NaODQ2M1xcdFxcdD0gRFNBX1RBR19QUk9UT19LU1o4NDYzX1ZBTFVFLFxcbiB9O1xcbiBcXG4gc3RydWN0IGRzYV9zd2l0Y2g7XFxuZGlmZiAtLWdpdCBhL25ldC9kc2EvdGFnX2tzei5jIGIvbmV0L2RzYS90YWdfa3N6LmNcXG5pbmRleCA2N2ZhODlmMTAyZTA3MC4uYjRkNzBiYTkzMGRjYmUgMTAwNjQ0XFxuLS0tIGEvbmV0L2RzYS90YWdfa3N6LmNcXG4rKysgYi9uZXQvZHNhL3RhZ19rc3ouY1xcbkBAIC0xMiw2ICsxMiw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwidGFnLmhcXFwiXFxuIFxcbisjZGVmaW5lIEtTWjg0NjNfTkFNRSBcXFwia3N6ODQ2M1xcXCJcXG4gI2RlZmluZSBLU1o4Nzk1X05BTUUgXFxcImtzejg3OTVcXFwiXFxuICNkZWZpbmUgS1NaOTQ3N19OQU1FIFxcXCJrc3o5NDc3XFxcIlxcbiAjZGVmaW5lIEtTWjk4OTNfTkFNRSBcXFwia3N6OTg5M1xcXCJcXG5AQCAtMTAzLDcyICsxMDQsNiBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmtzel9jb21tb25fcmN2KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHJldHVybiBza2I7XFxuIH1cXG4gXFxuLS8qXFxuLSAqIEZvciBJbmdyZXNzIChIb3N0IC1cXHUwMDNlIEtTWjg3OTUpLCAxIGJ5dGUgaXMgYWRkZWQgYmVmb3JlIEZDUy5cXG4tICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuLSAqIERBKDZieXRlcyl8U0EoNmJ5dGVzKXwuLi4ufERhdGEobmJ5dGVzKXx0YWcoMWJ5dGUpfEZDUyg0Ynl0ZXMpXFxuLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbi0gKiB0YWcgOiBlYWNoIGJpdCByZXByZXNlbnRzIHBvcnQgKGVnLCAweDAxPXBvcnQxLCAweDAyPXBvcnQyLCAweDEwPXBvcnQ1KVxcbi0gKlxcbi0gKiBGb3IgRWdyZXNzIChLU1o4Nzk1IC1cXHUwMDNlIEhvc3QpLCAxIGJ5dGUgaXMgYWRkZWQgYmVmb3JlIEZDUy5cXG4tICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuLSAqIERBKDZieXRlcyl8U0EoNmJ5dGVzKXwuLi4ufERhdGEobmJ5dGVzKXx0YWcwKDFieXRlKXxGQ1MoNGJ5dGVzKVxcbi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4tICogdGFnMCA6IHplcm8tYmFzZWQgdmFsdWUgcmVwcmVzZW50cyBwb3J0XFxuLSAqXFx0ICAoZWcsIDB4MD1wb3J0MSwgMHgyPXBvcnQzLCAweDM9cG9ydDQpXFxuLSAqL1xcbi1cXG4tI2RlZmluZSBLU1o4Nzk1X1RBSUxfVEFHX0VHX1BPUlRfTVxcdEdFTk1BU0soMSwgMClcXG4tI2RlZmluZSBLU1o4Nzk1X1RBSUxfVEFHX09WRVJSSURFXFx0QklUKDYpXFxuLSNkZWZpbmUgS1NaODc5NV9UQUlMX1RBR19MT09LVVBcXHRcXHRCSVQoNylcXG4tXFxuLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqa3N6ODc5NV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLXtcXG4tXFx0c3RydWN0IGV0aGhkciAqaGRyO1xcbi1cXHR1OCAqdGFnO1xcbi1cXG4tXFx0aWYgKHNrYi1cXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwgXFx1MDAyNlxcdTAwMjYgc2tiX2NoZWNrc3VtX2hlbHAoc2tiKSkge1xcbi1cXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcdH1cXG4tXFxuLVxcdC8qIFRhZyBlbmNvZGluZyAqL1xcbi1cXHR0YWcgPSBza2JfcHV0KHNrYiwgS1NaX0lOR1JFU1NfVEFHX0xFTik7XFxuLVxcdGhkciA9IHNrYl9ldGhfaGRyKHNrYik7XFxuLVxcbi1cXHQqdGFnID0gZHNhX3htaXRfcG9ydF9tYXNrKHNrYiwgZGV2KTtcXG4tXFx0aWYgKGlzX2xpbmtfbG9jYWxfZXRoZXJfYWRkcihoZHItXFx1MDAzZWhfZGVzdCkpXFxuLVxcdFxcdCp0YWcgfD0gS1NaODc5NV9UQUlMX1RBR19PVkVSUklERTtcXG4tXFxuLVxcdHJldHVybiBza2I7XFxuLX1cXG4tXFxuLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqa3N6ODc5NV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4te1xcbi1cXHR1OCAqdGFnO1xcbi1cXG4tXFx0aWYgKHNrYl9saW5lYXJpemUoc2tiKSkge1xcbi1cXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcdH1cXG4tXFxuLVxcdHRhZyA9IHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtIEtTWl9FR1JFU1NfVEFHX0xFTjtcXG4tXFxuLVxcdHJldHVybiBrc3pfY29tbW9uX3Jjdihza2IsIGRldiwgdGFnWzBdIFxcdTAwMjYgS1NaODc5NV9UQUlMX1RBR19FR19QT1JUX00sXFxuLVxcdFxcdFxcdCAgICAgIEtTWl9FR1JFU1NfVEFHX0xFTik7XFxuLX1cXG4tXFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMga3N6ODc5NV9uZXRkZXZfb3BzID0ge1xcbi1cXHQubmFtZVxcdD0gS1NaODc5NV9OQU1FLFxcbi1cXHQucHJvdG9cXHQ9IERTQV9UQUdfUFJPVE9fS1NaODc5NSxcXG4tXFx0LnhtaXRcXHQ9IGtzejg3OTVfeG1pdCxcXG4tXFx0LnJjdlxcdD0ga3N6ODc5NV9yY3YsXFxuLVxcdC5uZWVkZWRfdGFpbHJvb20gPSBLU1pfSU5HUkVTU19UQUdfTEVOLFxcbi19O1xcbi1cXG4tRFNBX1RBR19EUklWRVIoa3N6ODc5NV9uZXRkZXZfb3BzKTtcXG4tTU9EVUxFX0FMSUFTX0RTQV9UQUdfRFJJVkVSKERTQV9UQUdfUFJPVE9fS1NaODc5NSwgS1NaODc5NV9OQU1FKTtcXG4tXFxuIC8qXFxuICAqIEZvciBJbmdyZXNzIChIb3N0IC1cXHUwMDNlIEtTWjk0NzcpLCAyLzYgYnl0ZXMgYXJlIGFkZGVkIGJlZm9yZSBGQ1MuXFxuICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbkBAIC0yODQsNiArMjE5LDM3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqa3N6X2RlZmVyX3htaXQoc3RydWN0IGRzYV9wb3J0ICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG4gXFxuK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqa3N6X2NvbW1vbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICAgYm9vbCBkb190c3RhbXAsXFxuK1xcdFxcdFxcdFxcdCAgICAgICB1OCBwcmlvLFxcbitcXHRcXHRcXHRcXHQgICAgICAgdTggb3ZlcnJpZGVfbWFzaylcXG4re1xcbitcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3VzZXJfdG9fcG9ydChkZXYpO1xcbitcXHRzdHJ1Y3QgZXRoaGRyICpoZHI7XFxuK1xcdHU4ICp0YWc7XFxuK1xcbitcXHRpZiAoc2tiLVxcdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCBcXHUwMDI2XFx1MDAyNiBza2JfY2hlY2tzdW1faGVscChza2IpKSB7XFxuK1xcdFxcdGtmcmVlX3NrYihza2IpO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbitcXG4rXFx0LyogVGFnIGVuY29kaW5nICovXFxuK1xcdGlmIChkb190c3RhbXApXFxuK1xcdFxcdGtzel94bWl0X3RpbWVzdGFtcChkcCwgc2tiKTtcXG4rXFxuK1xcdHRhZyA9IHNrYl9wdXQoc2tiLCBLU1pfSU5HUkVTU19UQUdfTEVOKTtcXG4rXFx0aGRyID0gc2tiX2V0aF9oZHIoc2tiKTtcXG4rXFxuK1xcdCp0YWcgPSBkc2FfeG1pdF9wb3J0X21hc2soc2tiLCBkZXYpO1xcbitcXHQqdGFnIHw9IHByaW87XFxuK1xcbitcXHRpZiAoaXNfbGlua19sb2NhbF9ldGhlcl9hZGRyKGhkci1cXHUwMDNlaF9kZXN0KSlcXG4rXFx0XFx0KnRhZyB8PSBvdmVycmlkZV9tYXNrO1xcbitcXG4rXFx0cmV0dXJuIGtzel9kZWZlcl94bWl0KGRwLCBza2IpO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmtzejk0NzdfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcbkBAIC0zNTMsMzcgKzMxOSw2OSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIGtzejk0NzdfbmV0ZGV2X29wcyA9IHtcXG4gRFNBX1RBR19EUklWRVIoa3N6OTQ3N19uZXRkZXZfb3BzKTtcXG4gTU9EVUxFX0FMSUFTX0RTQV9UQUdfRFJJVkVSKERTQV9UQUdfUFJPVE9fS1NaOTQ3NywgS1NaOTQ3N19OQU1FKTtcXG4gXFxuLSNkZWZpbmUgS1NaOTg5M19UQUlMX1RBR19QUklPXFx0XFx0R0VOTUFTSyg0LCAzKVxcbi0jZGVmaW5lIEtTWjk4OTNfVEFJTF9UQUdfT1ZFUlJJREVcXHRCSVQoNSlcXG4tI2RlZmluZSBLU1o5ODkzX1RBSUxfVEFHX0xPT0tVUFxcdFxcdEJJVCg2KVxcbisvKlxcbisgKiBGb3IgSW5ncmVzcyAoSG9zdCAtXFx1MDAzZSBLU1o4Nzk1KSwgMSBieXRlIGlzIGFkZGVkIGJlZm9yZSBGQ1MuXFxuKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbisgKiBEQSg2Ynl0ZXMpfFNBKDZieXRlcyl8Li4uLnxEYXRhKG5ieXRlcyl8dGFnKDFieXRlKXxGQ1MoNGJ5dGVzKVxcbisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rICogdGFnIDogZWFjaCBiaXQgcmVwcmVzZW50cyBwb3J0IChlZywgMHgwMT1wb3J0MSwgMHgwMj1wb3J0MiwgMHgxMD1wb3J0NSlcXG4rICpcXG4rICogRm9yIEVncmVzcyAoS1NaODc5NSAtXFx1MDAzZSBIb3N0KSwgMSBieXRlIGlzIGFkZGVkIGJlZm9yZSBGQ1MuXFxuKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbisgKiBEQSg2Ynl0ZXMpfFNBKDZieXRlcyl8Li4uLnxEYXRhKG5ieXRlcyl8dGFnMCgxYnl0ZSl8RkNTKDRieXRlcylcXG4rICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuKyAqIHRhZzAgOiB6ZXJvLWJhc2VkIHZhbHVlIHJlcHJlc2VudHMgcG9ydFxcbisgKlxcdCAgKGVnLCAweDA9cG9ydDEsIDB4Mj1wb3J0MywgMHgzPXBvcnQ0KVxcbisgKi9cXG4gXFxuLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqa3N6OTg5M194bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbisjZGVmaW5lIEtTWjg3OTVfVEFJTF9UQUdfRUdfUE9SVF9NXFx0R0VOTUFTSygxLCAwKVxcbisjZGVmaW5lIEtTWjg3OTVfVEFJTF9UQUdfT1ZFUlJJREVcXHRCSVQoNilcXG4rI2RlZmluZSBLU1o4Nzk1X1RBSUxfVEFHX0xPT0tVUFxcdFxcdEJJVCg3KVxcbitcXG4rc3RhdGljIHN0cnVjdCBza19idWZmICprc3o4Nzk1X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4re1xcbitcXHRyZXR1cm4ga3N6X2NvbW1vbl94bWl0KHNrYiwgZGV2LCBmYWxzZSwgMCwgS1NaODc5NV9UQUlMX1RBR19PVkVSUklERSk7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqa3N6ODc5NV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcbi1cXHR1MTYgcXVldWVfbWFwcGluZyA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpO1xcbi1cXHR1OCBwcmlvID0gbmV0ZGV2X3R4cV90b190YyhkZXYsIHF1ZXVlX21hcHBpbmcpO1xcbi1cXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3VzZXJfdG9fcG9ydChkZXYpO1xcbi1cXHRzdHJ1Y3QgZXRoaGRyICpoZHI7XFxuIFxcdHU4ICp0YWc7XFxuIFxcbi1cXHRpZiAoc2tiLVxcdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCBcXHUwMDI2XFx1MDAyNiBza2JfY2hlY2tzdW1faGVscChza2IpKSB7XFxuK1xcdGlmIChza2JfbGluZWFyaXplKHNrYikpIHtcXG4gXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHR9XFxuIFxcbi1cXHQvKiBUYWcgZW5jb2RpbmcgKi9cXG4tXFx0a3N6X3htaXRfdGltZXN0YW1wKGRwLCBza2IpO1xcbitcXHR0YWcgPSBza2JfdGFpbF9wb2ludGVyKHNrYikgLSBLU1pfRUdSRVNTX1RBR19MRU47XFxuIFxcbi1cXHR0YWcgPSBza2JfcHV0KHNrYiwgS1NaX0lOR1JFU1NfVEFHX0xFTik7XFxuLVxcdGhkciA9IHNrYl9ldGhfaGRyKHNrYik7XFxuK1xcdHJldHVybiBrc3pfY29tbW9uX3Jjdihza2IsIGRldiwgdGFnWzBdIFxcdTAwMjYgS1NaODc5NV9UQUlMX1RBR19FR19QT1JUX00sXFxuK1xcdFxcdFxcdCAgICAgIEtTWl9FR1JFU1NfVEFHX0xFTik7XFxuK31cXG4gXFxuLVxcdCp0YWcgPSBkc2FfeG1pdF9wb3J0X21hc2soc2tiLCBkZXYpO1xcbi1cXHQqdGFnIHw9IEZJRUxEX1BSRVAoS1NaOTg5M19UQUlMX1RBR19QUklPLCBwcmlvKTtcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBkc2FfZGV2aWNlX29wcyBrc3o4Nzk1X25ldGRldl9vcHMgPSB7XFxuK1xcdC5uYW1lXFx0PSBLU1o4Nzk1X05BTUUsXFxuK1xcdC5wcm90b1xcdD0gRFNBX1RBR19QUk9UT19LU1o4Nzk1LFxcbitcXHQueG1pdFxcdD0ga3N6ODc5NV94bWl0LFxcbitcXHQucmN2XFx0PSBrc3o4Nzk1X3JjdixcXG4rXFx0Lm5lZWRlZF90YWlscm9vbSA9IEtTWl9JTkdSRVNTX1RBR19MRU4sXFxuK307XFxuIFxcbi1cXHRpZiAoaXNfbGlua19sb2NhbF9ldGhlcl9hZGRyKGhkci1cXHUwMDNlaF9kZXN0KSlcXG4tXFx0XFx0KnRhZyB8PSBLU1o5ODkzX1RBSUxfVEFHX09WRVJSSURFO1xcbitEU0FfVEFHX0RSSVZFUihrc3o4Nzk1X25ldGRldl9vcHMpO1xcbitNT0RVTEVfQUxJQVNfRFNBX1RBR19EUklWRVIoRFNBX1RBR19QUk9UT19LU1o4Nzk1LCBLU1o4Nzk1X05BTUUpO1xcbiBcXG4tXFx0cmV0dXJuIGtzel9kZWZlcl94bWl0KGRwLCBza2IpO1xcbisjZGVmaW5lIEtTWjk4OTNfVEFJTF9UQUdfUFJJT1xcdFxcdEdFTk1BU0soNCwgMylcXG4rI2RlZmluZSBLU1o5ODkzX1RBSUxfVEFHX09WRVJSSURFXFx0QklUKDUpXFxuKyNkZWZpbmUgS1NaOTg5M19UQUlMX1RBR19MT09LVVBcXHRcXHRCSVQoNilcXG4rXFxuK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqa3N6OTg5M194bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbit7XFxuK1xcdHUxNiBxdWV1ZV9tYXBwaW5nID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7XFxuK1xcdHU4IHByaW8gPSBuZXRkZXZfdHhxX3RvX3RjKGRldiwgcXVldWVfbWFwcGluZyk7XFxuK1xcbitcXHRyZXR1cm4ga3N6X2NvbW1vbl94bWl0KHNrYiwgZGV2LCB0cnVlLFxcbitcXHRcXHRcXHQgICAgICAgRklFTERfUFJFUChLU1o5ODkzX1RBSUxfVEFHX1BSSU8sIHByaW8pLFxcbitcXHRcXHRcXHQgICAgICAgS1NaOTg5M19UQUlMX1RBR19PVkVSUklERSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMga3N6OTg5M19uZXRkZXZfb3BzID0ge1xcbkBAIC0zOTksNiArMzk3LDcwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMga3N6OTg5M19uZXRkZXZfb3BzID0ge1xcbiBEU0FfVEFHX0RSSVZFUihrc3o5ODkzX25ldGRldl9vcHMpO1xcbiBNT0RVTEVfQUxJQVNfRFNBX1RBR19EUklWRVIoRFNBX1RBR19QUk9UT19LU1o5ODkzLCBLU1o5ODkzX05BTUUpO1xcbiBcXG4rI2RlZmluZSBLU1o4NDYzX1RBSUxfVEFHX1BSSU9cXHRcXHRHRU5NQVNLKDQsIDMpXFxuKyNkZWZpbmUgS1NaODQ2M19UQUlMX1RBR19FR19QT1JUX01cXHRHRU5NQVNLKDIsIDApXFxuK1xcbitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmtzejg0NjNfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4re1xcbitcXHR1MTYgcXVldWVfbWFwcGluZyA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpO1xcbitcXHR1OCBwcmlvID0gbmV0ZGV2X3R4cV90b190YyhkZXYsIHF1ZXVlX21hcHBpbmcpO1xcbitcXG4rXFx0cmV0dXJuIGtzel9jb21tb25feG1pdChza2IsIGRldiwgZmFsc2UsXFxuK1xcdFxcdFxcdCAgICAgICBGSUVMRF9QUkVQKEtTWjg0NjNfVEFJTF9UQUdfUFJJTywgcHJpbyksXFxuK1xcdFxcdFxcdCAgICAgICAwKTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBza19idWZmICprc3o4NDYzX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBsZW4gPSBLU1pfRUdSRVNTX1RBR19MRU47XFxuK1xcdHN0cnVjdCBwdHBfaGVhZGVyICpwdHBfaGRyO1xcbitcXHR1bnNpZ25lZCBpbnQgcHRwX2NsYXNzO1xcbitcXHR1bnNpZ25lZCBpbnQgcG9ydDtcXG4rXFx0a3RpbWVfdCB0cztcXG4rXFx0dTggKnRhZztcXG4rXFxuK1xcdGlmIChza2JfbGluZWFyaXplKHNrYikpIHtcXG4rXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuK1xcbitcXHRLU1pfU0tCX0NCKHNrYiktXFx1MDAzZXRzdGFtcCA9IDA7XFxuK1xcbitcXHQvKiBUYWcgZGVjb2RpbmcgKi9cXG4rXFx0dGFnID0gc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gS1NaX0VHUkVTU19UQUdfTEVOO1xcbitcXHRwb3J0ID0gdGFnWzBdIFxcdTAwMjYgS1NaODQ2M19UQUlMX1RBR19FR19QT1JUX007XFxuK1xcbitcXHRfX3NrYl9wdXNoKHNrYiwgRVRIX0hMRU4pO1xcbitcXHRwdHBfY2xhc3MgPSBwdHBfY2xhc3NpZnlfcmF3KHNrYik7XFxuK1xcdF9fc2tiX3B1bGwoc2tiLCBFVEhfSExFTik7XFxuK1xcdGlmIChwdHBfY2xhc3MgPT0gUFRQX0NMQVNTX05PTkUpXFxuK1xcdFxcdGdvdG8gY29tbW9uX3JjdjtcXG4rXFxuK1xcdHB0cF9oZHIgPSBwdHBfcGFyc2VfaGVhZGVyKHNrYiwgcHRwX2NsYXNzKTtcXG4rXFx0aWYgKHB0cF9oZHIpIHtcXG4rXFx0XFx0dHMgPSBrc3pfZGVjb2RlX3RzdGFtcChnZXRfdW5hbGlnbmVkX2JlMzIoXFx1MDAyNnB0cF9oZHItXFx1MDAzZXJlc2VydmVkMikpO1xcbitcXHRcXHRLU1pfU0tCX0NCKHNrYiktXFx1MDAzZXRzdGFtcCA9IHRzO1xcbitcXHRcXHRwdHBfaGRyLVxcdTAwM2VyZXNlcnZlZDIgPSAwO1xcbitcXHR9XFxuK1xcbitjb21tb25fcmN2OlxcbitcXHRyZXR1cm4ga3N6X2NvbW1vbl9yY3Yoc2tiLCBkZXYsIHBvcnQsIGxlbik7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMga3N6ODQ2M19uZXRkZXZfb3BzID0ge1xcbitcXHQubmFtZVxcdD0gS1NaODQ2M19OQU1FLFxcbitcXHQucHJvdG9cXHQ9IERTQV9UQUdfUFJPVE9fS1NaODQ2MyxcXG4rXFx0LnhtaXRcXHQ9IGtzejg0NjNfeG1pdCxcXG4rXFx0LnJjdlxcdD0ga3N6ODQ2M19yY3YsXFxuK1xcdC5jb25uZWN0ID0ga3N6X2Nvbm5lY3QsXFxuK1xcdC5kaXNjb25uZWN0ID0ga3N6X2Rpc2Nvbm5lY3QsXFxuK1xcdC5uZWVkZWRfdGFpbHJvb20gPSBLU1pfSU5HUkVTU19UQUdfTEVOLFxcbit9O1xcbitcXG4rRFNBX1RBR19EUklWRVIoa3N6ODQ2M19uZXRkZXZfb3BzKTtcXG4rTU9EVUxFX0FMSUFTX0RTQV9UQUdfRFJJVkVSKERTQV9UQUdfUFJPVE9fS1NaODQ2MywgS1NaODQ2M19OQU1FKTtcXG4rXFxuIC8qIEZvciB4bWl0LCAyLzYgYnl0ZXMgYXJlIGFkZGVkIGJlZm9yZSBGQ1MuXFxuICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbiAgKiBEQSg2Ynl0ZXMpfFNBKDZieXRlcyl8Li4uLnxEYXRhKG5ieXRlcyl8dHMoNGJ5dGVzKXx0YWcwKDFieXRlKXx0YWcxKDFieXRlKXxcXG5AQCAtNDcxLDYgKzUzMyw3IEBAIERTQV9UQUdfRFJJVkVSKGxhbjkzN3hfbmV0ZGV2X29wcyk7XFxuIE1PRFVMRV9BTElBU19EU0FfVEFHX0RSSVZFUihEU0FfVEFHX1BST1RPX0xBTjkzN1gsIExBTjkzN1hfTkFNRSk7XFxuIFxcbiBzdGF0aWMgc3RydWN0IGRzYV90YWdfZHJpdmVyICpkc2FfdGFnX2RyaXZlcl9hcnJheVtdID0ge1xcbitcXHRcXHUwMDI2RFNBX1RBR19EUklWRVJfTkFNRShrc3o4NDYzX25ldGRldl9vcHMpLFxcbiBcXHRcXHUwMDI2RFNBX1RBR19EUklWRVJfTkFNRShrc3o4Nzk1X25ldGRldl9vcHMpLFxcbiBcXHRcXHUwMDI2RFNBX1RBR19EUklWRVJfTkFNRShrc3o5NDc3X25ldGRldl9vcHMpLFxcbiBcXHRcXHUwMDI2RFNBX1RBR19EUklWRVJfTkFNRShrc3o5ODkzX25ldGRldl9vcHMpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMzowNTozMy4wODg0MDEzOTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0NDUzMzk1NDMwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgTWljcm9jaGlwIEtTWjg0NjMgRFNBIHN3aXRjaCwgaW5jbHVkaW5nIElSUSwgUFRQLCBhbmQgYSBuZXcgRFNBIHRhZyBwcm90b2NvbC4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciBmb3IgYW4gU1BJL01ESU8tY29ubmVjdGVkIHN3aXRjaCB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBXaXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSwgdGhlIGRyaXZlciBjYW5ub3QgcHJvYmUsIGFuZCB0aGUgYWRkZWQgY29kZSAoaW5jbHVkaW5nIHRoZSBEU0EgdGFnZ2VyKSBpcyB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAzZmFlYjNhMGYwYWI0MjlkNjRjYmUzOTRjZmU5YWZkMGRiMzY4ZjNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAyMzowNTozMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmNcbmluZGV4IGM0Yzc2OTAyOGEyMGM5Li45NDFhZTlmNjZmNzBiYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguY1xuQEAgLTM2LDYgKzM2LDEzIEBAXG4gI2luY2x1ZGUgXCJrc3o4X3JlZy5oXCJcbiAjaW5jbHVkZSBcImtzejguaFwiXG4gXG4rLypcbisgKiBXZSB1c2Ugb25seSB0aGUgaGlnaC1ieXRlIChzbyBvZGQgYWRkcmVzc2VzKSBvZiB0aGUgMTYtYml0cyByZWdpc3RlcnMgdG8gZml0XG4rICogaW4gdGhlIGNvbW1vbiBJUlEgZnJhbWV3b3JrXG4rICovXG4rI2RlZmluZSBLU1o4NDYzX1JFR19JU1JcdFx0XHQweDE5MVxuKyNkZWZpbmUgS1NaODQ2M19SRUdfSUVSXHRcdFx0MHgxOTNcbitcbiAvKiBrc3o4OHgzX2RyaXZlX3N0cmVuZ3RocyAtIERyaXZlIHN0cmVuZ3RoIG1hcHBpbmcgZm9yIEtTWjg4NjMsIEtTWjg4NzMsIC4uXG4gICpcdFx0XHQgICAgIHZhcmlhbnRzLlxuICAqIFRoaXMgdmFsdWVzIGFyZSBkb2N1bWVudGVkIGluIEtTWjg4NzMgYW5kIEtTWjg4NjMgZGF0YXNoZWV0cy5cbkBAIC0xODEsNiArMTg4LDY5IEBAIHN0YXRpYyBpbnQga3N6OF9wbWVfcHdyaXRlOChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgaW50IG9mZnNldCwgdTggZGF0XG4gXHRyZXR1cm4ga3N6OF9pbmRfd3JpdGU4KGRldiwgdGFibGUsICh1OCkob2Zmc2V0KSwgZGF0YSk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGtzejg0NjNfaXJxX21hc2soc3RydWN0IGlycV9kYXRhICpkKVxuK3tcbitcdHN0cnVjdCBrc3pfaXJxICpraXJxID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7XG4rXG4rXHRraXJxLVx1MDAzZW1hc2tlZCBcdTAwMjY9IH5CSVQoZC1cdTAwM2Vod2lycSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGtzejg0NjNfaXJxX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpXG4re1xuK1x0c3RydWN0IGtzel9pcnEgKmtpcnEgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTtcbitcbitcdGtpcnEtXHUwMDNlbWFza2VkIHw9IEJJVChkLVx1MDAzZWh3aXJxKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfY2hpcCBrc3o4NDYzX2lycV9jaGlwID0ge1xuK1x0Lm5hbWVcdFx0XHQ9IFwia3N6ODQ2My1pcnFcIixcbitcdC5pcnFfbWFza1x0XHQ9IGtzejg0NjNfaXJxX21hc2ssXG4rXHQuaXJxX3VubWFza1x0XHQ9IGtzejg0NjNfaXJxX3VubWFzayxcbitcdC5pcnFfYnVzX2xvY2tcdFx0PSBrc3pfaXJxX2J1c19sb2NrLFxuK1x0LmlycV9idXNfc3luY191bmxvY2tcdD0ga3N6X2lycV9idXNfc3luY191bmxvY2ssXG4rfTtcbitcbitzdGF0aWMgaW50IGtzejg0NjNfaXJxX2RvbWFpbl9tYXAoc3RydWN0IGlycV9kb21haW4gKmQsXG4rXHRcdFx0XHQgIHVuc2lnbmVkIGludCBpcnEsIGlycV9od19udW1iZXJfdCBod2lycSlcbit7XG4rXHRpcnFfc2V0X2NoaXBfZGF0YShpcnEsIGQtXHUwMDNlaG9zdF9kYXRhKTtcbitcdGlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsIFx1MDAyNmtzejg0NjNfaXJxX2NoaXAsIGhhbmRsZV9sZXZlbF9pcnEpO1xuK1x0aXJxX3NldF9ub3Byb2JlKGlycSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBrc3o4NDYzX2lycV9kb21haW5fb3BzID0ge1xuK1x0Lm1hcFx0PSBrc3o4NDYzX2lycV9kb21haW5fbWFwLFxuK1x0LnhsYXRlXHQ9IGlycV9kb21haW5feGxhdGVfdHdvY2VsbCxcbit9O1xuK1xuK3N0YXRpYyBpbnQga3N6ODQ2M19naXJxX3NldHVwKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4re1xuK1x0c3RydWN0IGtzel9pcnEgKmdpcnEgPSBcdTAwMjZkZXYtXHUwMDNlZ2lycTtcbitcbitcdGdpcnEtXHUwMDNlbmlycXMgPSA4O1xuK1x0Z2lycS1cdTAwM2VyZWdfbWFzayA9IEtTWjg0NjNfUkVHX0lFUjtcbitcdGdpcnEtXHUwMDNlcmVnX3N0YXR1cyA9IEtTWjg0NjNfUkVHX0lTUjtcbitcdGdpcnEtXHUwMDNlbWFza2VkID0gMDtcbitcdHNucHJpbnRmKGdpcnEtXHUwMDNlbmFtZSwgc2l6ZW9mKGdpcnEtXHUwMDNlbmFtZSksIFwia3N6ODQ2My1naXJxXCIpO1xuK1xuK1x0Z2lycS1cdTAwM2VpcnFfbnVtID0gZGV2LVx1MDAzZWlycTtcbitcbitcdHJldHVybiBrc3pfaXJxX2NvbW1vbl9zZXR1cChkZXYsIGdpcnEsIFx1MDAyNmtzejg0NjNfaXJxX2RvbWFpbl9vcHMpO1xuK31cbitcbitzdGF0aWMgaW50IGtzejg0NjNfcmVzZXRfc3dpdGNoKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4re1xuK1x0a3N6X2NmZyhkZXYsIEtTWjg0NjNfUkVHX1NXX1JFU0VULFxuK1x0XHRLU1o4NDYzX0dMT0JBTF9TT0ZUV0FSRV9SRVNFVCB8IEtTWjg0NjNfUFRQX1NPRlRXQVJFX1JFU0VULFxuK1x0XHR0cnVlKTtcbitcdGtzel9jZmcoZGV2LCBLU1o4NDYzX1JFR19TV19SRVNFVCxcbitcdFx0S1NaODQ2M19HTE9CQUxfU09GVFdBUkVfUkVTRVQgfCBLU1o4NDYzX1BUUF9TT0ZUV0FSRV9SRVNFVCxcbitcdFx0ZmFsc2UpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQga3N6OF9yZXNldF9zd2l0Y2goc3RydWN0IGtzel9kZXZpY2UgKmRldilcbiB7XG4gXHRpZiAoa3N6X2lzX2tzejg4eDMoZGV2KSkge1xuQEAgLTE4OSwxMSArMjU5LDYgQEAgc3RhdGljIGludCBrc3o4X3Jlc2V0X3N3aXRjaChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuIFx0XHRcdEtTWjg4NjNfR0xPQkFMX1NPRlRXQVJFX1JFU0VUIHwgS1NaODg2M19QQ1NfUkVTRVQsIHRydWUpO1xuIFx0XHRrc3pfY2ZnKGRldiwgS1NaODg2M19SRUdfU1dfUkVTRVQsXG4gXHRcdFx0S1NaODg2M19HTE9CQUxfU09GVFdBUkVfUkVTRVQgfCBLU1o4ODYzX1BDU19SRVNFVCwgZmFsc2UpO1xuLVx0fSBlbHNlIGlmIChrc3pfaXNfa3N6ODQ2MyhkZXYpKSB7XG4tXHRcdGtzel9jZmcoZGV2LCBLU1o4NDYzX1JFR19TV19SRVNFVCxcbi1cdFx0XHRLU1o4NDYzX0dMT0JBTF9TT0ZUV0FSRV9SRVNFVCwgdHJ1ZSk7XG4tXHRcdGtzel9jZmcoZGV2LCBLU1o4NDYzX1JFR19TV19SRVNFVCxcbi1cdFx0XHRLU1o4NDYzX0dMT0JBTF9TT0ZUV0FSRV9SRVNFVCwgZmFsc2UpO1xuIFx0fSBlbHNlIHtcbiBcdFx0LyogcmVzZXQgc3dpdGNoICovXG4gXHRcdGtzel93cml0ZTgoZGV2LCBSRUdfUE9XRVJfTUFOQUdFTUVOVF8xLFxuQEAgLTIwMjYsNiArMjA5MSw1MCBAQCBzdGF0aWMgdm9pZCBrc3o4OHgzX2NvbmZpZ19ybWlpX2NsayhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuIFx0XHRLU1o4OFgzX1BPUlQzX1JNSUlfQ0xLX0lOVEVSTkFMLCBybWlpX2Nsa19pbnRlcm5hbCk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGtzejg0NjNfY29uZmlnX2NwdV9wb3J0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbit7XG4rXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBrc3pfcG9ydCAqcDtcbitcdHU4IGZpYmVyX3BvcnRzID0gMDtcbitcdGNvbnN0IHUzMiAqbWFza3M7XG4rXHRjb25zdCB1MTYgKnJlZ3M7XG4rXHRpbnQgaTtcbitcbitcdG1hc2tzID0gZGV2LVx1MDAzZWluZm8tXHUwMDNlbWFza3M7XG4rXHRyZWdzID0gZGV2LVx1MDAzZWluZm8tXHUwMDNlcmVncztcbitcbitcdGtzel9jZmcoZGV2LCByZWdzW1NfVEFJTF9UQUdfQ1RSTF0sIG1hc2tzW1NXX1RBSUxfVEFHX0VOQUJMRV0sIHRydWUpO1xuK1xuK1x0a3N6OF9wb3J0X3NldHVwKGRldiwgZGV2LVx1MDAzZWNwdV9wb3J0LCB0cnVlKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldi1cdTAwM2VwaHlfcG9ydF9jbnQ7IGkrKylcbitcdFx0a3N6X3BvcnRfc3RwX3N0YXRlX3NldChkcywgaSwgQlJfU1RBVEVfRElTQUJMRUQpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGV2LVx1MDAzZXBoeV9wb3J0X2NudDsgaSsrKSB7XG4rXHRcdHAgPSBcdTAwMjZkZXYtXHUwMDNlcG9ydHNbaV07XG4rXHRcdGtzel9wb3J0X2NmZyhkZXYsIGksIHJlZ3NbUF9TVFBfQ1RSTF0sIFBPUlRfRk9SQ0VfRkxPV19DVFJMLFxuK1x0XHRcdCAgICAgcC1cdTAwM2VmaWJlcik7XG4rXHRcdGlmIChwLVx1MDAzZWZpYmVyKVxuK1x0XHRcdGZpYmVyX3BvcnRzIHw9ICgxIFx1MDAzY1x1MDAzYyBpKTtcbitcdH1cbitcbitcdC8qIFNldHVwIGZpYmVyIHBvcnRzLiAqL1xuK1x0aWYgKGZpYmVyX3BvcnRzKSB7XG4rXHRcdGZpYmVyX3BvcnRzIFx1MDAyNj0gMztcbitcdFx0cmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSwgS1NaODQ2M19SRUdfQ0ZHX0NUUkwsXG4rXHRcdFx0XHQgICBmaWJlcl9wb3J0cyBcdTAwM2NcdTAwM2MgUE9SVF9DT1BQRVJfTU9ERV9TLFxuK1x0XHRcdFx0ICAgMCk7XG4rXHRcdHJlZ21hcF91cGRhdGVfYml0cyhrc3pfcmVnbWFwXzE2KGRldiksIEtTWjg0NjNfUkVHX0RTUF9DVFJMXzYsXG4rXHRcdFx0XHQgICBDT1BQRVJfUkVDRUlWRV9BREpVU1RNRU5ULCAwKTtcbitcdH1cbitcbitcdC8qIFR1cm4gb2ZmIFBUUCBmdW5jdGlvbiBhcyB0aGUgc3dpdGNoIGVuYWJsZXMgaXQgYnkgZGVmYXVsdCAqL1xuK1x0cmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSwgS1NaODQ2M19QVFBfTVNHX0NPTkYxLFxuK1x0XHRcdCAgIFBUUF9FTkFCTEUsIDApO1xuK1x0cmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSwgS1NaODQ2M19QVFBfQ0xLX0NUUkwsXG4rXHRcdFx0ICAgUFRQX0NMS19FTkFCTEUsIDApO1xuK31cbitcbiBzdGF0aWMgdm9pZCBrc3o4X2NvbmZpZ19jcHVfcG9ydChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4ge1xuIFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG5AQCAtMjAzMyw3ICsyMTQyLDYgQEAgc3RhdGljIHZvaWQga3N6OF9jb25maWdfY3B1X3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0Y29uc3QgdTMyICptYXNrcztcbiBcdGNvbnN0IHUxNiAqcmVncztcbiBcdHU4IHJlbW90ZTtcbi1cdHU4IGZpYmVyX3BvcnRzID0gMDtcbiBcdGludCBpO1xuIFxuIFx0bWFza3MgPSBkZXYtXHUwMDNlaW5mby1cdTAwM2VtYXNrcztcbkBAIC0yMDY0LDMyICsyMTcyLDYgQEAgc3RhdGljIHZvaWQga3N6OF9jb25maWdfY3B1X3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0XHRlbHNlXG4gXHRcdFx0a3N6X3BvcnRfY2ZnKGRldiwgaSwgcmVnc1tQX1NUUF9DVFJMXSxcbiBcdFx0XHRcdCAgICAgUE9SVF9GT1JDRV9GTE9XX0NUUkwsIGZhbHNlKTtcbi1cdFx0aWYgKHAtXHUwMDNlZmliZXIpXG4tXHRcdFx0ZmliZXJfcG9ydHMgfD0gKDEgXHUwMDNjXHUwMDNjIGkpO1xuLVx0fVxuLVx0aWYgKGtzel9pc19rc3o4NDYzKGRldikpIHtcbi1cdFx0LyogU2V0dXAgZmliZXIgcG9ydHMuICovXG4tXHRcdGlmIChmaWJlcl9wb3J0cykge1xuLVx0XHRcdGZpYmVyX3BvcnRzIFx1MDAyNj0gMztcbi1cdFx0XHRyZWdtYXBfdXBkYXRlX2JpdHMoa3N6X3JlZ21hcF8xNihkZXYpLFxuLVx0XHRcdFx0XHQgICBLU1o4NDYzX1JFR19DRkdfQ1RSTCxcbi1cdFx0XHRcdFx0ICAgZmliZXJfcG9ydHMgXHUwMDNjXHUwMDNjIFBPUlRfQ09QUEVSX01PREVfUyxcbi1cdFx0XHRcdFx0ICAgMCk7XG4tXHRcdFx0cmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSxcbi1cdFx0XHRcdFx0ICAgS1NaODQ2M19SRUdfRFNQX0NUUkxfNixcbi1cdFx0XHRcdFx0ICAgQ09QUEVSX1JFQ0VJVkVfQURKVVNUTUVOVCwgMCk7XG4tXHRcdH1cbi1cbi1cdFx0LyogVHVybiBvZmYgUFRQIGZ1bmN0aW9uIGFzIHRoZSBzd2l0Y2gncyBwcm9wcmlldGFyeSB3YXkgb2Zcbi1cdFx0ICogaGFuZGxpbmcgdGltZXN0YW1wIGlzIG5vdCBzdXBwb3J0ZWQgaW4gY3VycmVudCBMaW51eCBQVFBcbi1cdFx0ICogc3RhY2sgaW1wbGVtZW50YXRpb24uXG4tXHRcdCAqL1xuLVx0XHRyZWdtYXBfdXBkYXRlX2JpdHMoa3N6X3JlZ21hcF8xNihkZXYpLFxuLVx0XHRcdFx0ICAgS1NaODQ2M19QVFBfTVNHX0NPTkYxLFxuLVx0XHRcdFx0ICAgUFRQX0VOQUJMRSwgMCk7XG4tXHRcdHJlZ21hcF91cGRhdGVfYml0cyhrc3pfcmVnbWFwXzE2KGRldiksXG4tXHRcdFx0XHQgICBLU1o4NDYzX1BUUF9DTEtfQ1RSTCxcbi1cdFx0XHRcdCAgIFBUUF9DTEtfRU5BQkxFLCAwKTtcbiBcdH1cbiB9XG4gXG5AQCAtMjMwMCw2ICsyMzgyLDE1MCBAQCBzdGF0aWMgdm9pZCBrc3o4OHh4X3JfbWliX3N0YXRzNjQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpXG4gXHRzcGluX3VubG9jayhcdTAwMjZtaWItXHUwMDNlc3RhdHM2NF9sb2NrKTtcbiB9XG4gXG4rc3RhdGljIGludCBrc3o4NDYzX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbit7XG4rXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbitcdHUxNiBzdG9ybV9tYXNrLCBzdG9ybV9yYXRlO1xuK1x0c3RydWN0IGtzel9wb3J0ICpwO1xuK1x0Y29uc3QgdTE2ICpyZWdzO1xuK1x0aW50IGksIHJldDtcbitcbitcdHJlZ3MgPSBkZXYtXHUwMDNlaW5mby1cdTAwM2VyZWdzO1xuK1xuK1x0ZGV2LVx1MDAzZXZsYW5fY2FjaGUgPSBkZXZtX2tjYWxsb2MoZGV2LVx1MDAzZWRldiwgc2l6ZW9mKHN0cnVjdCB2bGFuX3RhYmxlKSxcbitcdFx0XHRcdCAgICAgICBkZXYtXHUwMDNlaW5mby1cdTAwM2VudW1fdmxhbnMsIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFkZXYtXHUwMDNldmxhbl9jYWNoZSlcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRyZXQgPSBrc3o4NDYzX3Jlc2V0X3N3aXRjaChkZXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKGRzLVx1MDAzZWRldiwgXCJmYWlsZWQgdG8gcmVzZXQgc3dpdGNoXFxuXCIpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0Lyogc2V0IGJyb2FkY2FzdCBzdG9ybSBwcm90ZWN0aW9uIDEwJSByYXRlICovXG4rXHRzdG9ybV9tYXNrID0gQlJPQURDQVNUX1NUT1JNX1JBVEU7XG4rXHRzdG9ybV9yYXRlID0gKEJST0FEQ0FTVF9TVE9STV9WQUxVRSAqIEJST0FEQ0FTVF9TVE9STV9QUk9UX1JBVEUpIC8gMTAwO1xuK1x0c3Rvcm1fbWFzayA9IHN3YWIxNihzdG9ybV9tYXNrKTtcbitcdHN0b3JtX3JhdGUgPSBzd2FiMTYoc3Rvcm1fcmF0ZSk7XG4rXHRyZWdtYXBfdXBkYXRlX2JpdHMoa3N6X3JlZ21hcF8xNihkZXYpLCByZWdzW1NfQlJPQURDQVNUX0NUUkxdLFxuK1x0XHRcdCAgIHN0b3JtX21hc2ssIHN0b3JtX3JhdGUpO1xuK1xuK1x0a3N6ODQ2M19jb25maWdfY3B1X3BvcnQoZHMpO1xuK1xuK1x0a3N6OF9lbmFibGVfc3RwX2FkZHIoZGV2KTtcbitcbitcdGRzLVx1MDAzZW51bV90eF9xdWV1ZXMgPSBkZXYtXHUwMDNlaW5mby1cdTAwM2VudW1fdHhfcXVldWVzO1xuK1xuK1x0cmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfOChkZXYpLCByZWdzW1NfTVVMVElDQVNUX0NUUkxdLFxuK1x0XHRcdCAgIE1VTFRJQ0FTVF9TVE9STV9ESVNBQkxFLCBNVUxUSUNBU1RfU1RPUk1fRElTQUJMRSk7XG4rXG4rXHRrc3pfaW5pdF9taWJfdGltZXIoZGV2KTtcbitcbitcdGRzLVx1MDAzZWNvbmZpZ3VyZV92bGFuX3doaWxlX25vdF9maWx0ZXJpbmcgPSBmYWxzZTtcbitcdGRzLVx1MDAzZWRzY3BfcHJpb19tYXBwaW5nX2lzX2dsb2JhbCA9IHRydWU7XG4rXHRkcy1cdTAwM2VtdHVfZW5mb3JjZW1lbnRfaW5ncmVzcyA9IHRydWU7XG4rXG4rXHQvKiBXZSByZWx5IG9uIHNvZnR3YXJlIHVudGFnZ2luZyBvbiB0aGUgQ1BVIHBvcnQsIHNvIHRoYXQgd2VcbitcdCAqIGNhbiBzdXBwb3J0IGJvdGggdGFnZ2VkIGFuZCB1bnRhZ2dlZCBWTEFOc1xuK1x0ICovXG4rXHRkcy1cdTAwM2V1bnRhZ19icmlkZ2VfcHZpZCA9IHRydWU7XG4rXG4rXHQvKiBWTEFOIGZpbHRlcmluZyBpcyBwYXJ0bHkgY29udHJvbGxlZCBieSB0aGUgZ2xvYmFsIFZMQU5cbitcdCAqIEVuYWJsZSBmbGFnXG4rXHQgKi9cbitcdGRzLVx1MDAzZXZsYW5fZmlsdGVyaW5nX2lzX2dsb2JhbCA9IHRydWU7XG4rXG4rXHQvKiBFbmFibGUgYXV0b21hdGljIGZhc3QgYWdpbmcgd2hlbiBsaW5rIGNoYW5nZWQgZGV0ZWN0ZWQuICovXG4rXHRrc3pfY2ZnKGRldiwgU19MSU5LX0FHSU5HX0NUUkwsIFNXX0xJTktfQVVUT19BR0lORywgdHJ1ZSk7XG4rXG4rXHQvKiBFbmFibGUgYWdncmVzc2l2ZSBiYWNrIG9mZiBhbGdvcml0aG0gaW4gaGFsZiBkdXBsZXggbW9kZS4gKi9cbitcdHJldCA9IGtzel9ybXc4KGRldiwgUkVHX1NXX0NUUkxfMSwgU1dfQUdHUl9CQUNLT0ZGLCBTV19BR0dSX0JBQ0tPRkYpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qXG4rXHQgKiBNYWtlIHN1cmUgdW5pY2FzdCBWTEFOIGJvdW5kYXJ5IGlzIHNldCBhcyBkZWZhdWx0IGFuZFxuK1x0ICogZW5hYmxlIG5vIGV4Y2Vzc2l2ZSBjb2xsaXNpb24gZHJvcC5cbitcdCAqL1xuK1x0cmV0ID0ga3N6X3JtdzgoZGV2LCBSRUdfU1dfQ1RSTF8yLFxuK1x0XHQgICAgICAgVU5JQ0FTVF9WTEFOX0JPVU5EQVJZIHwgTk9fRVhDX0NPTExJU0lPTl9EUk9QLFxuK1x0XHQgICAgICAgVU5JQ0FTVF9WTEFOX0JPVU5EQVJZIHwgTk9fRVhDX0NPTExJU0lPTl9EUk9QKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRrc3pfY2ZnKGRldiwgU19SRVBMQUNFX1ZJRF9DVFJMLCBTV19SRVBMQUNFX1ZJRCwgZmFsc2UpO1xuK1xuK1x0a3N6X2NmZyhkZXYsIFNfTUlSUk9SX0NUUkwsIFNXX01JUlJPUl9SWF9UWCwgZmFsc2UpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgKGRldi1cdTAwM2VpbmZvLVx1MDAzZW51bV92bGFucyAvIDQpOyBpKyspXG4rXHRcdGtzejhfcl92bGFuX2VudHJpZXMoZGV2LCBpKTtcbitcbitcdC8qIFN0YXJ0IHdpdGggbGVhcm5pbmcgZGlzYWJsZWQgb24gc3RhbmRhbG9uZSB1c2VyIHBvcnRzLCBhbmQgZW5hYmxlZFxuK1x0ICogb24gdGhlIENQVSBwb3J0LiBJbiBsYWNrIG9mIG90aGVyIGZpbmVyIG1lY2hhbmlzbXMsIGxlYXJuaW5nIG9uIHRoZVxuK1x0ICogQ1BVIHBvcnQgd2lsbCBhdm9pZCBmbG9vZGluZyBicmlkZ2UgbG9jYWwgYWRkcmVzc2VzIG9uIHRoZSBuZXR3b3JrXG4rXHQgKiBpbiBzb21lIGNhc2VzLlxuK1x0ICovXG4rXHRwID0gXHUwMDI2ZGV2LVx1MDAzZXBvcnRzW2Rldi1cdTAwM2VjcHVfcG9ydF07XG4rXHRwLVx1MDAzZWxlYXJuaW5nID0gdHJ1ZTtcbitcbitcdGlmIChkZXYtXHUwMDNlaXJxIFx1MDAzZSAwKSB7XG4rXHRcdHJldCA9IGtzejg0NjNfZ2lycV9zZXR1cChkZXYpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdHJldCA9IGtzejg0NjNfcHRwX2lycV9zZXR1cChkcyk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byBmcmVlX2dpcnE7XG4rXG4rXHRcdHJldCA9IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoZHMpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcIkZhaWxlZCB0byByZWdpc3RlciBQVFAgY2xvY2s6ICVkXFxuXCIsXG4rXHRcdFx0XHRyZXQpO1xuK1x0XHRcdGdvdG8gZnJlZV9wdHBfaXJxO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXQgPSBrc3pfbWRpb19yZWdpc3RlcihkZXYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMCkge1xuK1x0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsIFwiZmFpbGVkIHRvIHJlZ2lzdGVyIHRoZSBtZGlvXCIpO1xuK1x0XHRnb3RvIHB0cF9jbG9ja191bnJlZ2lzdGVyO1xuK1x0fVxuK1xuK1x0cmV0ID0ga3N6X2RjYl9pbml0KGRldik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIHB0cF9jbG9ja191bnJlZ2lzdGVyO1xuK1xuK1x0Lyogc3RhcnQgc3dpdGNoICovXG4rXHRyZWdtYXBfdXBkYXRlX2JpdHMoa3N6X3JlZ21hcF84KGRldiksIHJlZ3NbU19TVEFSVF9DVFJMXSxcbitcdFx0XHQgICBTV19TVEFSVCwgU1dfU1RBUlQpO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rcHRwX2Nsb2NrX3VucmVnaXN0ZXI6XG4rXHRpZiAoZGV2LVx1MDAzZWlycSBcdTAwM2UgMClcbitcdFx0a3N6X3B0cF9jbG9ja191bnJlZ2lzdGVyKGRzKTtcbitmcmVlX3B0cF9pcnE6XG4rXHRpZiAoZGV2LVx1MDAzZWlycSBcdTAwM2UgMClcbitcdFx0a3N6ODQ2M19wdHBfaXJxX2ZyZWUoZHMpO1xuK2ZyZWVfZ2lycTpcbitcdGlmIChkZXYtXHUwMDNlaXJxIFx1MDAzZSAwKVxuK1x0XHRrc3pfaXJxX2ZyZWUoXHUwMDI2ZGV2LVx1MDAzZWdpcnEpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIHZvaWQga3N6ODQ2M190ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4re1xuK1x0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4rXG4rXHRpZiAoZGV2LVx1MDAzZWlycSBcdTAwM2UgMCkge1xuK1x0XHRrc3pfcHRwX2Nsb2NrX3VucmVnaXN0ZXIoZHMpO1xuK1x0XHRrc3o4NDYzX3B0cF9pcnFfZnJlZShkcyk7XG4rXHRcdGtzel9pcnFfZnJlZShcdTAwMjZkZXYtXHUwMDNlZ2lycSk7XG4rXHR9XG4rfVxuK1xuIC8qKlxuICAqIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhfd3JpdGUoKSAtIFNldCB0aGUgZHJpdmUgc3RyZW5ndGggY29uZmlndXJhdGlvbiBmb3JcbiAgKlx0XHRcdFx0ICAgIEtTWjg4NjMgY29tcGF0aWJsZSBjaGlwIHZhcmlhbnRzLlxuQEAgLTI0NDUsMTAgKzI2NzEsNiBAQCBzdGF0aWMgaW50IGtzejhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0Lyogc2V0IGJyb2FkY2FzdCBzdG9ybSBwcm90ZWN0aW9uIDEwJSByYXRlICovXG4gXHRzdG9ybV9tYXNrID0gQlJPQURDQVNUX1NUT1JNX1JBVEU7XG4gXHRzdG9ybV9yYXRlID0gKEJST0FEQ0FTVF9TVE9STV9WQUxVRSAqIEJST0FEQ0FTVF9TVE9STV9QUk9UX1JBVEUpIC8gMTAwO1xuLVx0aWYgKGtzel9pc19rc3o4NDYzKGRldikpIHtcbi1cdFx0c3Rvcm1fbWFzayA9IHN3YWIxNihzdG9ybV9tYXNrKTtcbi1cdFx0c3Rvcm1fcmF0ZSA9IHN3YWIxNihzdG9ybV9yYXRlKTtcbi1cdH1cbiBcdHJlZ21hcF91cGRhdGVfYml0cyhrc3pfcmVnbWFwXzE2KGRldiksIHJlZ3NbU19CUk9BRENBU1RfQ1RSTF0sXG4gXHRcdFx0ICAgc3Rvcm1fbWFzaywgc3Rvcm1fcmF0ZSk7XG4gXG5AQCAtMjQ5OSw3ICsyNzIxLDcgQEAgc3RhdGljIGludCBrc3o4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcbiBcdGtzel9jZmcoZGV2LCBTX01JUlJPUl9DVFJMLCBTV19NSVJST1JfUlhfVFgsIGZhbHNlKTtcbiBcbi1cdGlmICgha3N6X2lzX2tzejg4eDMoZGV2KSBcdTAwMjZcdTAwMjYgIWtzel9pc19rc3o4NDYzKGRldikpXG4rXHRpZiAoIWtzel9pc19rc3o4OHgzKGRldikpXG4gXHRcdGtzel9jZmcoZGV2LCBSRUdfU1dfQ1RSTF8xOSwgU1dfSU5TX1RBR19FTkFCTEUsIHRydWUpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgKGRldi1cdTAwM2VpbmZvLVx1MDAzZW51bV92bGFucyAvIDQpOyBpKyspXG5AQCAtMjYyMyw2ICsyODQ1LDkgQEAgc3RhdGljIHUzMiBrc3o4X2dldF9wb3J0X2FkZHIoaW50IHBvcnQsIGludCBvZmZzZXQpXG4gXG4gc3RhdGljIHUzMiBrc3o4NDYzX2dldF9wb3J0X2FkZHIoaW50IHBvcnQsIGludCBvZmZzZXQpXG4ge1xuK1x0aWYgKG9mZnNldCBcdTAwM2U9IEtTWjg0NjNfUFRQX0NMS19DVFJMKVxuK1x0XHRyZXR1cm4gb2Zmc2V0ICsgMHgyMCAqIHBvcnQ7XG4rXG4gXHRyZXR1cm4gb2Zmc2V0ICsgMHgxOCAqIHBvcnQ7XG4gfVxuIFxuQEAgLTI3NTUsNyArMjk4MCw3IEBAIHN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2wga3N6ODQ2M19nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbiBcdFx0XHRcdFx0XHQgICAgICBpbnQgcG9ydCxcbiBcdFx0XHRcdFx0XHQgICAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXApXG4ge1xuLVx0cmV0dXJuIERTQV9UQUdfUFJPVE9fS1NaOTg5MztcbitcdHJldHVybiBEU0FfVEFHX1BST1RPX0tTWjg0NjM7XG4gfVxuIFxuIHN0YXRpYyBpbnQga3N6ODQ2M19jb25uZWN0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5AQCAtMjc2Myw3ICsyOTg4LDcgQEAgc3RhdGljIGludCBrc3o4NDYzX2Nvbm5lY3RfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbiB7XG4gXHRzdHJ1Y3Qga3N6X3RhZ2dlcl9kYXRhICp0YWdnZXJfZGF0YTtcbiBcbi1cdGlmIChwcm90byAhPSBEU0FfVEFHX1BST1RPX0tTWjk4OTMpXG4rXHRpZiAocHJvdG8gIT0gRFNBX1RBR19QUk9UT19LU1o4NDYzKVxuIFx0XHRyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDtcbiBcbiBcdHRhZ2dlcl9kYXRhID0ga3N6X3RhZ2dlcl9kYXRhKGRzKTtcbkBAIC0yODg5LDggKzMxMTQsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2Rldl9vcHMga3N6ODh4eF9kZXZfb3BzID0ge1xuIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBrc3o4NDYzX3N3aXRjaF9vcHMgPSB7XG4gXHQuZ2V0X3RhZ19wcm90b2NvbFx0PSBrc3o4NDYzX2dldF90YWdfcHJvdG9jb2wsXG4gXHQuY29ubmVjdF90YWdfcHJvdG9jb2wgICA9IGtzejg0NjNfY29ubmVjdF90YWdfcHJvdG9jb2wsXG4tXHQuc2V0dXBcdFx0XHQ9IGtzejhfc2V0dXAsXG4tXHQudGVhcmRvd25cdFx0PSBrc3pfdGVhcmRvd24sXG4rXHQuc2V0dXBcdFx0XHQ9IGtzejg0NjNfc2V0dXAsXG4rXHQudGVhcmRvd25cdFx0PSBrc3o4NDYzX3RlYXJkb3duLFxuIFx0LnBoeV9yZWFkXHRcdD0ga3N6ODQ2M19waHlfcmVhZDE2LFxuIFx0LnBoeV93cml0ZVx0XHQ9IGtzejg0NjNfcGh5X3dyaXRlMTYsXG4gXHQucGh5bGlua19nZXRfY2Fwc1x0PSBrc3o4X3BoeWxpbmtfZ2V0X2NhcHMsXG5AQCAtMjkxOCw5ICszMTQzLDkgQEAgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGtzejg0NjNfc3dpdGNoX29wcyA9IHtcbiBcdC5wb3J0X21heF9tdHVcdFx0PSBrc3o4OHh4X21heF9tdHUsXG4gXHQuc3VzcGVuZFx0XHQ9IGtzel9zdXNwZW5kLFxuIFx0LnJlc3VtZVx0XHRcdD0ga3N6X3Jlc3VtZSxcbi1cdC5nZXRfdHNfaW5mb1x0XHQ9IGtzel9nZXRfdHNfaW5mbyxcbitcdC5nZXRfdHNfaW5mb1x0XHQ9IGtzejg0NjNfZ2V0X3RzX2luZm8sXG4gXHQucG9ydF9od3RzdGFtcF9nZXRcdD0ga3N6X2h3dHN0YW1wX2dldCxcbi1cdC5wb3J0X2h3dHN0YW1wX3NldFx0PSBrc3pfaHd0c3RhbXBfc2V0LFxuK1x0LnBvcnRfaHd0c3RhbXBfc2V0XHQ9IGtzejg0NjNfaHd0c3RhbXBfc2V0LFxuIFx0LnBvcnRfdHh0c3RhbXBcdFx0PSBrc3pfcG9ydF90eHRzdGFtcCxcbiBcdC5wb3J0X3J4dHN0YW1wXHRcdD0ga3N6X3BvcnRfcnh0c3RhbXAsXG4gXHQucG9ydF9zZXR1cF90Y1x0XHQ9IGtzejhfc2V0dXBfdGMsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4X3JlZy5oIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4X3JlZy5oXG5pbmRleCA5ODFhYjQ0MWQ5YjcxOS4uNmJjNTExZGExZjdkZGQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejhfcmVnLmhcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OF9yZWcuaFxuQEAgLTc4Niw2ICs3ODYsNyBAQFxuICNkZWZpbmUgS1NaODQ2M19SRUdfU1dfUkVTRVRcdFx0MHgxMjZcbiBcbiAjZGVmaW5lIEtTWjg0NjNfR0xPQkFMX1NPRlRXQVJFX1JFU0VUXHRCSVQoMClcbisjZGVmaW5lIEtTWjg0NjNfUFRQX1NPRlRXQVJFX1JFU0VUXHRCSVQoMilcbiBcbiAjZGVmaW5lIEtTWjg0NjNfUFRQX0NMS19DVFJMXHRcdDB4NjAwXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uY1xuaW5kZXggNjdhYjZkZGI5ZTUzZjIuLmZmMWJlNTQwYjU0NmZhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmNcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jXG5AQCAtMjQxOSwxNCArMjQxOSwxNCBAQCBzdGF0aWMgdm9pZCBrc3pfaXJxX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpXG4gXHRraXJxLVx1MDAzZW1hc2tlZCBcdTAwMjY9IH5CSVQoZC1cdTAwM2Vod2lycSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGtzel9pcnFfYnVzX2xvY2soc3RydWN0IGlycV9kYXRhICpkKVxuK3ZvaWQga3N6X2lycV9idXNfbG9jayhzdHJ1Y3QgaXJxX2RhdGEgKmQpXG4ge1xuIFx0c3RydWN0IGtzel9pcnEgKmtpcnEgID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmtpcnEtXHUwMDNlZGV2LVx1MDAzZWxvY2tfaXJxKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQga3N6X2lycV9idXNfc3luY191bmxvY2soc3RydWN0IGlycV9kYXRhICpkKVxuK3ZvaWQga3N6X2lycV9idXNfc3luY191bmxvY2soc3RydWN0IGlycV9kYXRhICpkKVxuIHtcbiBcdHN0cnVjdCBrc3pfaXJxICpraXJxICA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpO1xuIFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGtpcnEtXHUwMDNlZGV2O1xuQEAgLTI1MDQsMTQgKzI1MDQsMTUgQEAgc3RhdGljIGlycXJldHVybl90IGtzel9pcnFfdGhyZWFkX2ZuKGludCBpcnEsIHZvaWQgKmRldl9pZClcbiBcdHJldHVybiAobmhhbmRsZWQgXHUwMDNlIDAgPyBJUlFfSEFORExFRCA6IElSUV9OT05FKTtcbiB9XG4gXG4tc3RhdGljIGludCBrc3pfaXJxX2NvbW1vbl9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBzdHJ1Y3Qga3N6X2lycSAqa2lycSlcbitpbnQga3N6X2lycV9jb21tb25fc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgc3RydWN0IGtzel9pcnEgKmtpcnEsXG4rXHRcdFx0IGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyAqb3BzKVxuIHtcbiBcdGludCByZXQsIG47XG4gXG4gXHRraXJxLVx1MDAzZWRldiA9IGRldjtcbiBcbi1cdGtpcnEtXHUwMDNlZG9tYWluID0gaXJxX2RvbWFpbl9jcmVhdGVfc2ltcGxlKGRldl9md25vZGUoZGV2LVx1MDAzZWRldiksIGtpcnEtXHUwMDNlbmlycXMsIDAsXG4tXHRcdFx0XHRcdFx0XHUwMDI2a3N6X2lycV9kb21haW5fb3BzLCBraXJxKTtcbitcdGtpcnEtXHUwMDNlZG9tYWluID0gaXJxX2RvbWFpbl9jcmVhdGVfc2ltcGxlKGRldl9md25vZGUoZGV2LVx1MDAzZWRldiksXG4rXHRcdFx0XHRcdFx0a2lycS1cdTAwM2VuaXJxcywgMCwgb3BzLCBraXJxKTtcbiBcdGlmICgha2lycS1cdTAwM2Vkb21haW4pXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTI1NDMsNyArMjU0NCw3IEBAIGludCBrc3pfZ2lycV9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuIFxuIFx0Z2lycS1cdTAwM2VpcnFfbnVtID0gZGV2LVx1MDAzZWlycTtcbiBcbi1cdHJldHVybiBrc3pfaXJxX2NvbW1vbl9zZXR1cChkZXYsIGdpcnEpO1xuK1x0cmV0dXJuIGtzel9pcnFfY29tbW9uX3NldHVwKGRldiwgZ2lycSwgXHUwMDI2a3N6X2lycV9kb21haW5fb3BzKTtcbiB9XG4gXG4gaW50IGtzel9waXJxX3NldHVwKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHApXG5AQCAtMjU2MCw3ICsyNTYxLDcgQEAgaW50IGtzel9waXJxX3NldHVwKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHApXG4gXHRpZiAoIXBpcnEtXHUwMDNlaXJxX251bSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRyZXR1cm4ga3N6X2lycV9jb21tb25fc2V0dXAoZGV2LCBwaXJxKTtcbitcdHJldHVybiBrc3pfaXJxX2NvbW1vbl9zZXR1cChkZXYsIHBpcnEsIFx1MDAyNmtzel9pcnFfZG9tYWluX29wcyk7XG4gfVxuIFxuIHZvaWQga3N6X3RlYXJkb3duKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oXG5pbmRleCBhY2FmNzBlNmYzOTNjOS4uY2JlOTg0OTQ1NzhjMzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmhcbkBAIC04LDYgKzgsNyBAQFxuICNkZWZpbmUgX19LU1pfQ09NTU9OX0hcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaXJxZG9tYWluLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wY3MvcGNzLXhwY3MuaFx1MDAzZVxuQEAgLTE5Myw2ICsxOTQsNyBAQCBzdHJ1Y3Qga3N6X3BvcnQge1xuIFx0c3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgdHN0YW1wX2NvbmZpZztcbiBcdGJvb2wgaHd0c190eF9lbjtcbiBcdGJvb2wgaHd0c19yeF9lbjtcbitcdGJvb2wgbGFzdF90eF9pc19wZGVsYXlyZXNwO1xuIFx0c3RydWN0IGtzel9pcnEgcHRwaXJxO1xuIFx0c3RydWN0IGtzel9wdHBfaXJxIHB0cG1zZ19pcnFbM107XG4gXHRrdGltZV90IHRzdGFtcF9tc2c7XG5AQCAtNTA4LDYgKzUxMCwxMCBAQCBpbnQga3N6X3N3X21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWdudW0sIHUxNiB2YWwpO1xuIGludCBrc3pfcGFyZW50X21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IHJlZ251bSk7XG4gaW50IGtzel9wYXJlbnRfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbCk7XG4gaW50IGtzel9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpO1xuK3ZvaWQga3N6X2lycV9idXNfbG9jayhzdHJ1Y3QgaXJxX2RhdGEgKmQpO1xuK3ZvaWQga3N6X2lycV9idXNfc3luY191bmxvY2soc3RydWN0IGlycV9kYXRhICpkKTtcbitpbnQga3N6X2lycV9jb21tb25fc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgc3RydWN0IGtzel9pcnEgKmtpcnEsXG4rXHRcdFx0IGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyAqb3BzKTtcbiBpbnQga3N6X3BpcnFfc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggcCk7XG4gaW50IGtzel9naXJxX3NldHVwKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpO1xuIHZvaWQga3N6X2lycV9mcmVlKHN0cnVjdCBrc3pfaXJxICpraXJxKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jXG5pbmRleCA4Yjk4MDM5MzIwYWRkYS4uOWQ4Yjc4Njg3ZjUzMTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuY1xuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmNcbkBAIC0zMiw2ICszMiwxNSBAQFxuIFxuICNkZWZpbmUgS1NaX1BUUF9JTlRfU1RBUlQgMTNcbiBcbisvKlxuKyAqIFBUUCBpbnRlcnJ1cHQgYml0IGlzIHRoZSBiaXQgMTIgb2YgdGhlIDE2LWJpdHMgSVNSL0lFUi4gQnV0IGtzel9jb21tb24uYyBvbmx5XG4rICogYWNjZXNzZXMgdGhlIGhpZ2gtYnl0ZSBvZiB0aGVzZSByZWdpc3RlcnMgc28gdGhlIFBUUCBpbnRlcnJ1cHQgYml0IGJlY29tZXMgNC5cbisgKi9cbisjZGVmaW5lIEtTWjg0NjNfU1JDX1BUUF9JTlRcdFx0NFxuKyNkZWZpbmUgS1NaODQ2M19QVFBfUE9SVDFfSU5UX1NUQVJUXHQxMlxuKyNkZWZpbmUgS1NaODQ2M19QVFBfUE9SVDJfSU5UX1NUQVJUXHQxNFxuKyNkZWZpbmUgS1NaODQ2M19QVFBfSU5UX1NUQVJUXHRcdEtTWjg0NjNfUFRQX1BPUlQxX0lOVF9TVEFSVFxuK1xuIHN0YXRpYyBpbnQga3N6X3B0cF90b3VfZ3BpbyhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuIHtcbiBcdGludCByZXQ7XG5AQCAtMjg4LDYgKzI5NywzMSBAQCBzdGF0aWMgaW50IGtzel9wdHBfZW5hYmxlX21vZGUoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbiBcdFx0XHQgdGFnX2VuID8gUFRQX0VOQUJMRSA6IDApO1xuIH1cbiBcbitpbnQga3N6ODQ2M19nZXRfdHNfaW5mbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuK1x0XHRcdHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICp0cylcbit7XG4rXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhO1xuK1xuK1x0cHRwX2RhdGEgPSBcdTAwMjZkZXYtXHUwMDNlcHRwX2RhdGE7XG4rXG4rXHRpZiAoIXB0cF9kYXRhLVx1MDAzZWNsb2NrKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdHRzLVx1MDAzZXNvX3RpbWVzdGFtcGluZyA9IFNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUgfFxuK1x0XHRcdCAgICAgIFNPRl9USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkUgfFxuK1x0XHRcdCAgICAgIFNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFO1xuK1xuK1x0dHMtXHUwMDNldHhfdHlwZXMgPSBCSVQoSFdUU1RBTVBfVFhfT0ZGKSB8IEJJVChIV1RTVEFNUF9UWF9PTik7XG4rXG4rXHR0cy1cdTAwM2VyeF9maWx0ZXJzID0gQklUKEhXVFNUQU1QX0ZJTFRFUl9OT05FKSB8XG4rXHRcdFx0IEJJVChIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX0VWRU5UKTtcbitcbitcdHRzLVx1MDAzZXBoY19pbmRleCA9IHB0cF9jbG9ja19pbmRleChwdHBfZGF0YS1cdTAwM2VjbG9jayk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLyogVGhlIGZ1bmN0aW9uIGlzIHJldHVybiBiYWNrIHRoZSBjYXBhYmlsaXR5IG9mIHRpbWVzdGFtcGluZyBmZWF0dXJlIHdoZW5cbiAgKiByZXF1ZXN0ZWQgdGhyb3VnaCBldGh0b29sIC1UIFx1MDAzY2ludGVyZmFjZVx1MDAzZSB1dGlsaXR5XG4gICovXG5AQCAtMzMyLDYgKzM2Niw3MiBAQCBpbnQga3N6X2h3dHN0YW1wX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQga3N6ODQ2M19zZXRfaHd0c3RhbXBfY29uZmlnKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IGtzel9wb3J0ICpwcnQsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZylcbit7XG4rXHRjb25zdCB1MTYgKnJlZ3MgPSBkZXYtXHUwMDNlaW5mby1cdTAwM2VyZWdzO1xuK1x0aW50IHJldDtcbitcbitcdGlmIChjb25maWctXHUwMDNlZmxhZ3MpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0c3dpdGNoIChjb25maWctXHUwMDNldHhfdHlwZSkge1xuK1x0Y2FzZSBIV1RTVEFNUF9UWF9PRkY6XG4rXHRcdHBydC1cdTAwM2VwdHBtc2dfaXJxW0tTWjg0NjNfU1lOQ19NU0ddLnRzX2VuICA9IGZhbHNlO1xuK1x0XHRwcnQtXHUwMDNlcHRwbXNnX2lycVtLU1o4NDYzX1hEUkVRX1BEUkVTX01TR10udHNfZW4gPSBmYWxzZTtcbitcdFx0cHJ0LVx1MDAzZWh3dHNfdHhfZW4gPSBmYWxzZTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEhXVFNUQU1QX1RYX09OOlxuK1x0XHRwcnQtXHUwMDNlcHRwbXNnX2lycVtLU1o4NDYzX1NZTkNfTVNHXS50c19lbiAgPSB0cnVlO1xuK1x0XHRwcnQtXHUwMDNlcHRwbXNnX2lycVtLU1o4NDYzX1hEUkVRX1BEUkVTX01TR10udHNfZW4gPSB0cnVlO1xuK1x0XHRwcnQtXHUwMDNlaHd0c190eF9lbiA9IHRydWU7XG4rXG4rXHRcdHJldCA9IGtzel9ybXcxNihkZXYsIHJlZ3NbUFRQX01TR19DT05GMV0sIFBUUF8xU1RFUCwgMCk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVSQU5HRTtcbitcdH1cbitcbitcdHN3aXRjaCAoY29uZmlnLVx1MDAzZXJ4X2ZpbHRlcikge1xuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfTk9ORTpcbitcdFx0cHJ0LVx1MDAzZWh3dHNfcnhfZW4gPSBmYWxzZTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfRVZFTlQ6XG4rXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfU1lOQzpcbitcdFx0Y29uZmlnLVx1MDAzZXJ4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfRVZFTlQ7XG4rXHRcdHBydC1cdTAwM2Vod3RzX3J4X2VuID0gdHJ1ZTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRjb25maWctXHUwMDNlcnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX05PTkU7XG4rXHRcdHJldHVybiAtRVJBTkdFO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGtzel9wdHBfZW5hYmxlX21vZGUoZGV2KTtcbit9XG4rXG4raW50IGtzejg0NjNfaHd0c3RhbXBfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4rXHRcdFx0IHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcsXG4rXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbit7XG4rXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBrc3pfcG9ydCAqcHJ0O1xuK1x0aW50IHJldDtcbitcbitcdHBydCA9IFx1MDAyNmRldi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcbitcdHJldCA9IGtzejg0NjNfc2V0X2h3dHN0YW1wX2NvbmZpZyhkZXYsIHBydCwgY29uZmlnKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRwcnQtXHUwMDNldHN0YW1wX2NvbmZpZyA9ICpjb25maWc7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBrc3pfc2V0X2h3dHN0YW1wX2NvbmZpZyhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0ICAgc3RydWN0IGtzel9wb3J0ICpwcnQsXG4gXHRcdFx0XHQgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY29uZmlnKVxuQEAgLTU2Miw2ICs2NjIsMzEgQEAgc3RhdGljIHZvaWQga3N6X3B0cF90eHRzdGFtcF9za2Ioc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiBcdHNrYl9jb21wbGV0ZV90eF90aW1lc3RhbXAoc2tiLCBcdTAwMjZod3RzdGFtcHMpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBrc3o4NDYzX3NldF9wZGVsYXlyZXNwX2ZsYWcoc3RydWN0IGtzel9wb3J0ICpwcnQsXG4rXHRcdFx0XHRcdHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IHB0cF9oZWFkZXIgKmhkcjtcbitcdHVuc2lnbmVkIGludCB0eXBlO1xuK1x0dTggcHRwX21zZ190eXBlO1xuK1xuK1x0aWYgKCFrc3pfaXNfa3N6ODQ2MyhwcnQtXHUwMDNla3N6X2RldikpXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChza2JfbGluZWFyaXplKHNrYikpXG4rXHRcdHJldHVybjtcbitcbitcdHR5cGUgPSBwdHBfY2xhc3NpZnlfcmF3KHNrYik7XG4rXHRpZiAodHlwZSA9PSBQVFBfQ0xBU1NfTk9ORSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0aGRyID0gcHRwX3BhcnNlX2hlYWRlcihza2IsIHR5cGUpO1xuK1x0aWYgKCFoZHIpXG4rXHRcdHJldHVybjtcbitcbitcdHB0cF9tc2dfdHlwZSA9IHB0cF9nZXRfbXNndHlwZShoZHIsIHR5cGUpO1xuK1x0cHJ0LVx1MDAzZWxhc3RfdHhfaXNfcGRlbGF5cmVzcCA9IChwdHBfbXNnX3R5cGUgPT0gUFRQX01TR1RZUEVfUERFTEFZX1JFU1ApO1xuK31cbitcbiB2b2lkIGtzel9wb3J0X2RlZmVycmVkX3htaXQoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaylcbiB7XG4gXHRzdHJ1Y3Qga3N6X2RlZmVycmVkX3htaXRfd29yayAqeG1pdF93b3JrID0gd29ya190b194bWl0X3dvcmsod29yayk7XG5AQCAtNTc4LDYgKzcwMyw4IEBAIHZvaWQga3N6X3BvcnRfZGVmZXJyZWRfeG1pdChzdHJ1Y3Qga3RocmVhZF93b3JrICp3b3JrKVxuIFxuIFx0cmVpbml0X2NvbXBsZXRpb24oXHUwMDI2cHJ0LVx1MDAzZXRzdGFtcF9tc2dfY29tcCk7XG4gXG4rXHRrc3o4NDYzX3NldF9wZGVsYXlyZXNwX2ZsYWcocHJ0LCBza2IpO1xuK1xuIFx0ZHNhX2VucXVldWVfc2tiKHNrYiwgc2tiLVx1MDAzZWRldik7XG4gXG4gXHRrc3pfcHRwX3R4dHN0YW1wX3NrYihkZXYsIHBydCwgY2xvbmUpO1xuQEAgLTk0NCw4ICsxMDcxLDkgQEAgaW50IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0LyogQ3VycmVudGx5IG9ubHkgUDJQIG1vZGUgaXMgc3VwcG9ydGVkLiBXaGVuIDgwMl8xQVMgYml0IGlzIHNldCwgaXRcbiBcdCAqIGZvcndhcmRzIGFsbCBQVFAgcGFja2V0cyB0byBob3N0IHBvcnQgYW5kIG5vbmUgdG8gb3RoZXIgcG9ydHMuXG4gXHQgKi9cbi1cdHJldCA9IGtzel9ybXcxNihkZXYsIHJlZ3NbUFRQX01TR19DT05GMV0sIFBUUF9UQ19QMlAgfCBQVFBfODAyXzFBUyxcbi1cdFx0XHRQVFBfVENfUDJQIHwgUFRQXzgwMl8xQVMpO1xuK1x0cmV0ID0ga3N6X3JtdzE2KGRldiwgcmVnc1tQVFBfTVNHX0NPTkYxXSxcbitcdFx0XHRQVFBfVENfUDJQIHwgUFRQXzgwMl8xQVMgfCBQVFBfRVRIX0VOQUJMRSxcbitcdFx0XHRQVFBfVENfUDJQIHwgUFRQXzgwMl8xQVMgfCBQVFBfRVRIX0VOQUJMRSk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTk2OSw3ICsxMDk3LDIyIEBAIHZvaWQga3N6X3B0cF9jbG9ja191bnJlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcbiBzdGF0aWMgaW50IGtzel9yZWFkX3RzKHN0cnVjdCBrc3pfcG9ydCAqcG9ydCwgdTE2IHJlZywgdTMyICp0cylcbiB7XG4tXHRyZXR1cm4ga3N6X3JlYWQzMihwb3J0LVx1MDAzZWtzel9kZXYsIHJlZywgdHMpO1xuK1x0dTE2IHRzX3JlZyA9IHJlZztcbitcbitcdC8qKlxuK1x0ICogT24gS1NaODQ2MyBEUkVRIGFuZCBEUkVTUCB0aW1lc3RhbXBzIHNoYXJlIG9uZSBpbnRlcnJ1cHQgbGluZVxuK1x0ICogc28gd2UgaGF2ZSB0byBjaGVjayB0aGUgbmF0dXJlIG9mIHRoZSBsYXRlc3QgZXZlbnQgc2VudCB0byBrbm93XG4rXHQgKiB3aGVyZSB0aGUgdGltZXN0YW1wIGlzIGxvY2F0ZWRcbitcdCAqL1xuK1x0aWYgKGtzel9pc19rc3o4NDYzKHBvcnQtXHUwMDNla3N6X2RldikpIHtcbitcdFx0Y29uc3Qgc3RydWN0IGtzel9kZXZfb3BzICpvcHMgPSBwb3J0LVx1MDAzZWtzel9kZXYtXHUwMDNlZGV2X29wcztcbitcbitcdFx0aWYgKHBvcnQtXHUwMDNlbGFzdF90eF9pc19wZGVsYXlyZXNwIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgdHNfcmVnID09IG9wcy1cdTAwM2VnZXRfcG9ydF9hZGRyKHBvcnQtXHUwMDNlbnVtLCBLU1o4NDYzX1JFR19QT1JUX0RSRVFfVFMpKVxuK1x0XHRcdHRzX3JlZyArPSBLU1o4NDYzX0RSRVNQX1RTX09GRlNFVDtcbitcdH1cbitcbitcdHJldHVybiBrc3pfcmVhZDMyKHBvcnQtXHUwMDNla3N6X2RldiwgdHNfcmVnLCB0cyk7XG4gfVxuIFxuIHN0YXRpYyBpcnFyZXR1cm5fdCBrc3pfcHRwX21zZ190aHJlYWRfZm4oaW50IGlycSwgdm9pZCAqZGV2X2lkKVxuQEAgLTExMjksNiArMTI3MiwxMjggQEAgc3RhdGljIGludCBrc3pfcHRwX21zZ19pcnFfc2V0dXAoc3RydWN0IGtzel9wb3J0ICpwb3J0LCB1OCBuKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rc3RhdGljIGludCBrc3o4NDYzX3B0cF9wb3J0X2lycV9zZXR1cChzdHJ1Y3Qga3N6X2lycSAqcHRwaXJxLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGtzel9wb3J0ICpwb3J0LCBpbnQgaHdfaXJxKVxuK3tcbitcdHUxNiB0c19yZWdbXSA9IHtLU1o4NDYzX1JFR19QT1JUX1NZTkNfVFMsIEtTWjg0NjNfUkVHX1BPUlRfRFJFUV9UU307XG4rXHRzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG5hbWVbXSA9IHtcInN5bmMtbXNnXCIsIFwiZGVsYXktbXNnXCJ9O1xuK1x0Y29uc3Qgc3RydWN0IGtzel9kZXZfb3BzICpvcHMgPSBwb3J0LVx1MDAzZWtzel9kZXYtXHUwMDNlZGV2X29wcztcbitcdHN0cnVjdCBrc3pfcHRwX2lycSAqcHRwbXNnX2lycTtcbitcdGludCByZXQ7XG4rXHRpbnQgaTtcbitcbitcdGluaXRfY29tcGxldGlvbihcdTAwMjZwb3J0LVx1MDAzZXRzdGFtcF9tc2dfY29tcCk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAyOyBpKyspIHtcbitcdFx0cHRwbXNnX2lycSA9IFx1MDAyNnBvcnQtXHUwMDNlcHRwbXNnX2lycVtpXTtcbitcdFx0cHRwbXNnX2lycS1cdTAwM2VudW0gPSBpcnFfY3JlYXRlX21hcHBpbmcocHRwaXJxLVx1MDAzZWRvbWFpbixcbitcdFx0XHRcdFx0XHQgICAgIGh3X2lycSArIGkpO1xuK1x0XHRpZiAoIXB0cG1zZ19pcnEtXHUwMDNlbnVtKSB7XG4rXHRcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0XHRnb3RvIHJlbGVhc2VfbXNnX2lycTtcbitcdFx0fVxuK1xuK1x0XHRwdHBtc2dfaXJxLVx1MDAzZXBvcnQgPSBwb3J0O1xuK1x0XHRwdHBtc2dfaXJxLVx1MDAzZXRzX3JlZyA9IG9wcy1cdTAwM2VnZXRfcG9ydF9hZGRyKHBvcnQtXHUwMDNlbnVtLCB0c19yZWdbaV0pO1xuK1xuK1x0XHRzdHJzY3B5KHB0cG1zZ19pcnEtXHUwMDNlbmFtZSwgbmFtZVtpXSk7XG4rXG4rXHRcdHJldCA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHB0cG1zZ19pcnEtXHUwMDNlbnVtLCBOVUxMLFxuK1x0XHRcdFx0XHQgICBrc3pfcHRwX21zZ190aHJlYWRfZm4sIElSUUZfT05FU0hPVCxcbitcdFx0XHRcdFx0ICAgcHRwbXNnX2lycS1cdTAwM2VuYW1lLCBwdHBtc2dfaXJxKTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdGlycV9kaXNwb3NlX21hcHBpbmcocHRwbXNnX2lycS1cdTAwM2VudW0pO1xuK1x0XHRcdGdvdG8gcmVsZWFzZV9tc2dfaXJxO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbitcbityZWxlYXNlX21zZ19pcnE6XG4rXHR3aGlsZSAoaS0tKVxuK1x0XHRrc3pfcHRwX21zZ19pcnFfZnJlZShwb3J0LCBpKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGtzejg0NjNfcHRwX3BvcnRfaXJxX3RlYXJkb3duKHN0cnVjdCBrc3pfcG9ydCAqcG9ydClcbit7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDI7IGkrKylcbitcdFx0a3N6X3B0cF9tc2dfaXJxX2ZyZWUocG9ydCwgaSk7XG4rfVxuK1xuK2ludCBrc3o4NDYzX3B0cF9pcnFfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuK3tcbitcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuK1x0c3RydWN0IGtzel9wb3J0ICpwb3J0MSwgKnBvcnQyO1xuK1x0c3RydWN0IGtzel9pcnEgKnB0cGlycTtcbitcdGludCByZXQ7XG4rXG4rXHRwb3J0MSA9IFx1MDAyNmRldi1cdTAwM2Vwb3J0c1swXTtcbitcdHBvcnQyID0gXHUwMDI2ZGV2LVx1MDAzZXBvcnRzWzFdO1xuK1x0cHRwaXJxID0gXHUwMDI2cG9ydDEtXHUwMDNlcHRwaXJxO1xuK1xuK1x0cHRwaXJxLVx1MDAzZWlycV9udW0gPSBpcnFfZmluZF9tYXBwaW5nKGRldi1cdTAwM2VnaXJxLmRvbWFpbixcbitcdFx0XHRcdFx0ICAgS1NaODQ2M19TUkNfUFRQX0lOVCk7XG4rXHRpZiAoIXB0cGlycS1cdTAwM2VpcnFfbnVtKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHB0cGlycS1cdTAwM2VkZXYgPSBkZXY7XG4rXHRwdHBpcnEtXHUwMDNlbmlycXMgPSA0O1xuK1x0cHRwaXJxLVx1MDAzZXJlZ19tYXNrID0gS1NaODQ2M19QVFBfVFNfSUVSO1xuK1x0cHRwaXJxLVx1MDAzZXJlZ19zdGF0dXMgPSBLU1o4NDYzX1BUUF9UU19JU1I7XG4rXHRwdHBpcnEtXHUwMDNlaXJxMF9vZmZzZXQgPSBLU1o4NDYzX1BUUF9JTlRfU1RBUlQ7XG4rXHRzbnByaW50ZihwdHBpcnEtXHUwMDNlbmFtZSwgc2l6ZW9mKHB0cGlycS1cdTAwM2VuYW1lKSwgXCJwdHAtaXJxXCIpO1xuK1xuK1x0cHRwaXJxLVx1MDAzZWRvbWFpbiA9IGlycV9kb21haW5fY3JlYXRlX2xpbmVhcihkZXZfZndub2RlKGRldi1cdTAwM2VkZXYpLFxuK1x0XHRcdFx0XHRcdCAgcHRwaXJxLVx1MDAzZW5pcnFzLFxuK1x0XHRcdFx0XHRcdCAgXHUwMDI2a3N6X3B0cF9pcnFfZG9tYWluX29wcyxcbitcdFx0XHRcdFx0XHQgIHB0cGlycSk7XG4rXHRpZiAoIXB0cGlycS1cdTAwM2Vkb21haW4pXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cmV0ID0ga3N6ODQ2M19wdHBfcG9ydF9pcnFfc2V0dXAocHRwaXJxLCBwb3J0MSxcbitcdFx0XHRcdFx0IEtTWjg0NjNfUFRQX1BPUlQxX0lOVF9TVEFSVCAtIEtTWjg0NjNfUFRQX0lOVF9TVEFSVCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIHJlbGVhc2VfZG9tYWluO1xuK1xuK1x0cmV0ID0ga3N6ODQ2M19wdHBfcG9ydF9pcnFfc2V0dXAocHRwaXJxLCBwb3J0MixcbitcdFx0XHRcdFx0IEtTWjg0NjNfUFRQX1BPUlQyX0lOVF9TVEFSVCAtIEtTWjg0NjNfUFRQX0lOVF9TVEFSVCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGZyZWVfcG9ydDE7XG4rXG4rXHRyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShwdHBpcnEtXHUwMDNlaXJxX251bSwgTlVMTCwga3N6X3B0cF9pcnFfdGhyZWFkX2ZuLFxuK1x0XHRcdFx0ICAgSVJRRl9PTkVTSE9ULCBwdHBpcnEtXHUwMDNlbmFtZSwgcHRwaXJxKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZnJlZV9wb3J0MjtcbitcbitcdHJldHVybiAwO1xuK1xuK2ZyZWVfcG9ydDI6XG4rXHRrc3o4NDYzX3B0cF9wb3J0X2lycV90ZWFyZG93bihwb3J0Mik7XG4rZnJlZV9wb3J0MTpcbitcdGtzejg0NjNfcHRwX3BvcnRfaXJxX3RlYXJkb3duKHBvcnQxKTtcbityZWxlYXNlX2RvbWFpbjpcbitcdGlycV9kb21haW5fcmVtb3ZlKHB0cGlycS1cdTAwM2Vkb21haW4pO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rdm9pZCBrc3o4NDYzX3B0cF9pcnFfZnJlZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4re1xuK1x0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4rXHRzdHJ1Y3Qga3N6X3BvcnQgKnBvcnQxID0gXHUwMDI2ZGV2LVx1MDAzZXBvcnRzWzBdO1xuK1x0c3RydWN0IGtzel9wb3J0ICpwb3J0MiA9IFx1MDAyNmRldi1cdTAwM2Vwb3J0c1sxXTtcbitcdHN0cnVjdCBrc3pfaXJxICpwdHBpcnEgPSBcdTAwMjZwb3J0MS1cdTAwM2VwdHBpcnE7XG4rXG4rXHRmcmVlX2lycShwdHBpcnEtXHUwMDNlaXJxX251bSwgcHRwaXJxKTtcbitcdGtzejg0NjNfcHRwX3BvcnRfaXJxX3RlYXJkb3duKHBvcnQyKTtcbitcdGtzejg0NjNfcHRwX3BvcnRfaXJxX3RlYXJkb3duKHBvcnQxKTtcbitcdGlycV9kb21haW5fcmVtb3ZlKHB0cGlycS1cdTAwM2Vkb21haW4pO1xuK31cbitcbiBpbnQga3N6X3B0cF9pcnFfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCB1OCBwKVxuIHtcbiBcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmhcbmluZGV4IDMwODZlNTE5YjFiNjQxLi43MDY3ZWM5YmQxZTZmMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaFxuQEAgLTM5LDE3ICszOSwyNCBAQCB2b2lkIGtzel9wdHBfY2xvY2tfdW5yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xuIFxuIGludCBrc3pfZ2V0X3RzX2luZm8oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0ICAgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICp0cyk7XG4raW50IGtzejg0NjNfZ2V0X3RzX2luZm8oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbitcdFx0XHRzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqdHMpO1xuIGludCBrc3pfaHd0c3RhbXBfZ2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdCAgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZyk7XG4gaW50IGtzel9od3RzdGFtcF9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0ICAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY29uZmlnLFxuIFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4raW50IGtzejg0NjNfaHd0c3RhbXBfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4rXHRcdFx0IHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcsXG4rXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4gdm9pZCBrc3pfcG9ydF90eHRzdGFtcChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiB2b2lkIGtzel9wb3J0X2RlZmVycmVkX3htaXQoc3RydWN0IGt0aHJlYWRfd29yayAqd29yayk7XG4gYm9vbCBrc3pfcG9ydF9yeHRzdGFtcChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHQgICAgICAgdW5zaWduZWQgaW50IHR5cGUpO1xuIGludCBrc3pfcHRwX2lycV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIHU4IHApO1xuIHZvaWQga3N6X3B0cF9pcnFfZnJlZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIHU4IHApO1xuK2ludCBrc3o4NDYzX3B0cF9pcnFfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcbit2b2lkIGtzejg0NjNfcHRwX2lycV9mcmVlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XG4gXG4gI2Vsc2VcbiBcbkBAIC03MiwxMSArNzksMjAgQEAgc3RhdGljIGlubGluZSBpbnQga3N6X3B0cF9pcnFfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCB1OCBwKVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrc3pfcHRwX2lycV9mcmVlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgdTggcCkge31cbiBcbitzdGF0aWMgaW5saW5lIGludCBrc3o4NDYzX3B0cF9pcnFfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQga3N6ODQ2M19wdHBfaXJxX2ZyZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKSB7fVxuK1xuICNkZWZpbmUga3N6X2dldF90c19pbmZvIE5VTExcbisjZGVmaW5lIGtzejg0NjNfZ2V0X3RzX2luZm8gTlVMTFxuIFxuICNkZWZpbmUga3N6X2h3dHN0YW1wX2dldCBOVUxMXG4gXG4gI2RlZmluZSBrc3pfaHd0c3RhbXBfc2V0IE5VTExcbisjZGVmaW5lIGtzejg0NjNfaHd0c3RhbXBfc2V0IE5VTExcbiBcbiAjZGVmaW5lIGtzel9wb3J0X3J4dHN0YW1wIE5VTExcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmhcbmluZGV4IGVhYjlhZWNiN2ZhOGE1Li42NWVhODU3N2FmNzU1OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cF9yZWcuaFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwX3JlZy5oXG5AQCAtMTIxLDYgKzEyMSwxMiBAQFxuICNkZWZpbmUgUkVHX1BUUF9QT1JUX1NZTkNfVFNcdFx0MHgwQzBDXG4gI2RlZmluZSBSRUdfUFRQX1BPUlRfUERSRVNQX1RTXHRcdDB4MEMxMFxuIFxuKyNkZWZpbmUgS1NaODQ2M19SRUdfUE9SVF9EUkVRX1RTXHQweDA2NDhcbisjZGVmaW5lIEtTWjg0NjNfUkVHX1BPUlRfU1lOQ19UU1x0MHgwNjRDXG4rI2RlZmluZSBLU1o4NDYzX1JFR19QT1JUX0RSRVNQX1RTXHQweDA2NTBcbisjZGVmaW5lIEtTWjg0NjNfUFRQX1RTX0lTUlx0XHQweDA2OENcbisjZGVmaW5lIEtTWjg0NjNfUFRQX1RTX0lFUlx0XHQweDA2OEVcbitcbiAjZGVmaW5lIFJFR19QVFBfUE9SVF9UWF9JTlRfU1RBVFVTX18yXHQweDBDMTRcbiAjZGVmaW5lIFJFR19QVFBfUE9SVF9UWF9JTlRfRU5BQkxFX18yXHQweDBDMTZcbiBcbkBAIC0xMzEsNCArMTM3LDggQEBcbiAjZGVmaW5lIEtTWl9YRFJFUV9NU0dcdFx0XHQxXG4gI2RlZmluZSBLU1pfUERSRVNfTVNHXHRcdFx0MFxuIFxuKyNkZWZpbmUgS1NaODQ2M19EUkVTUF9UU19PRkZTRVRcdFx0KEtTWjg0NjNfUkVHX1BPUlRfRFJFU1BfVFMgLSBLU1o4NDYzX1JFR19QT1JUX0RSRVFfVFMpXG4rI2RlZmluZSBLU1o4NDYzX1NZTkNfTVNHXHRcdDBcbisjZGVmaW5lIEtTWjg0NjNfWERSRVFfUERSRVNfTVNHXHRcdDFcbitcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kc2EuaCBiL2luY2x1ZGUvbmV0L2RzYS5oXG5pbmRleCA4YzE2ZWYyM2NjMTAyYS4uNmY3ZjVjMTdiNTMyMDggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9kc2EuaFxuKysrIGIvaW5jbHVkZS9uZXQvZHNhLmhcbkBAIC01OSw2ICs1OSw3IEBAIHN0cnVjdCB0Y19hY3Rpb247XG4gI2RlZmluZSBEU0FfVEFHX1BST1RPX01YTF9HU1cxWFhfVkFMVUVcdFx0MzFcbiAjZGVmaW5lIERTQV9UQUdfUFJPVE9fTVhMODYyX1ZBTFVFXHRcdDMyXG4gI2RlZmluZSBEU0FfVEFHX1BST1RPX05FVENfVkFMVUVcdFx0MzNcbisjZGVmaW5lIERTQV9UQUdfUFJPVE9fS1NaODQ2M19WQUxVRVx0XHQzNFxuIFxuIGVudW0gZHNhX3RhZ19wcm90b2NvbCB7XG4gXHREU0FfVEFHX1BST1RPX05PTkVcdFx0PSBEU0FfVEFHX1BST1RPX05PTkVfVkFMVUUsXG5AQCAtOTUsNiArOTYsNyBAQCBlbnVtIGRzYV90YWdfcHJvdG9jb2wge1xuIFx0RFNBX1RBR19QUk9UT19NWExfR1NXMVhYXHQ9IERTQV9UQUdfUFJPVE9fTVhMX0dTVzFYWF9WQUxVRSxcbiBcdERTQV9UQUdfUFJPVE9fTVhMODYyXHRcdD0gRFNBX1RBR19QUk9UT19NWEw4NjJfVkFMVUUsXG4gXHREU0FfVEFHX1BST1RPX05FVENcdFx0PSBEU0FfVEFHX1BST1RPX05FVENfVkFMVUUsXG4rXHREU0FfVEFHX1BST1RPX0tTWjg0NjNcdFx0PSBEU0FfVEFHX1BST1RPX0tTWjg0NjNfVkFMVUUsXG4gfTtcbiBcbiBzdHJ1Y3QgZHNhX3N3aXRjaDtcbmRpZmYgLS1naXQgYS9uZXQvZHNhL3RhZ19rc3ouYyBiL25ldC9kc2EvdGFnX2tzei5jXG5pbmRleCA2N2ZhODlmMTAyZTA3MC4uYjRkNzBiYTkzMGRjYmUgMTAwNjQ0XG4tLS0gYS9uZXQvZHNhL3RhZ19rc3ouY1xuKysrIGIvbmV0L2RzYS90YWdfa3N6LmNcbkBAIC0xMiw2ICsxMiw3IEBAXG4gXG4gI2luY2x1ZGUgXCJ0YWcuaFwiXG4gXG4rI2RlZmluZSBLU1o4NDYzX05BTUUgXCJrc3o4NDYzXCJcbiAjZGVmaW5lIEtTWjg3OTVfTkFNRSBcImtzejg3OTVcIlxuICNkZWZpbmUgS1NaOTQ3N19OQU1FIFwia3N6OTQ3N1wiXG4gI2RlZmluZSBLU1o5ODkzX05BTUUgXCJrc3o5ODkzXCJcbkBAIC0xMDMsNzIgKzEwNCw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqa3N6X2NvbW1vbl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiBza2I7XG4gfVxuIFxuLS8qXG4tICogRm9yIEluZ3Jlc3MgKEhvc3QgLVx1MDAzZSBLU1o4Nzk1KSwgMSBieXRlIGlzIGFkZGVkIGJlZm9yZSBGQ1MuXG4tICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4tICogREEoNmJ5dGVzKXxTQSg2Ynl0ZXMpfC4uLi58RGF0YShuYnl0ZXMpfHRhZygxYnl0ZSl8RkNTKDRieXRlcylcbi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi0gKiB0YWcgOiBlYWNoIGJpdCByZXByZXNlbnRzIHBvcnQgKGVnLCAweDAxPXBvcnQxLCAweDAyPXBvcnQyLCAweDEwPXBvcnQ1KVxuLSAqXG4tICogRm9yIEVncmVzcyAoS1NaODc5NSAtXHUwMDNlIEhvc3QpLCAxIGJ5dGUgaXMgYWRkZWQgYmVmb3JlIEZDUy5cbi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi0gKiBEQSg2Ynl0ZXMpfFNBKDZieXRlcyl8Li4uLnxEYXRhKG5ieXRlcyl8dGFnMCgxYnl0ZSl8RkNTKDRieXRlcylcbi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi0gKiB0YWcwIDogemVyby1iYXNlZCB2YWx1ZSByZXByZXNlbnRzIHBvcnRcbi0gKlx0ICAoZWcsIDB4MD1wb3J0MSwgMHgyPXBvcnQzLCAweDM9cG9ydDQpXG4tICovXG4tXG4tI2RlZmluZSBLU1o4Nzk1X1RBSUxfVEFHX0VHX1BPUlRfTVx0R0VOTUFTSygxLCAwKVxuLSNkZWZpbmUgS1NaODc5NV9UQUlMX1RBR19PVkVSUklERVx0QklUKDYpXG4tI2RlZmluZSBLU1o4Nzk1X1RBSUxfVEFHX0xPT0tVUFx0XHRCSVQoNylcbi1cbi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmtzejg3OTVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLXtcbi1cdHN0cnVjdCBldGhoZHIgKmhkcjtcbi1cdHU4ICp0YWc7XG4tXG4tXHRpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMIFx1MDAyNlx1MDAyNiBza2JfY2hlY2tzdW1faGVscChza2IpKSB7XG4tXHRcdGtmcmVlX3NrYihza2IpO1xuLVx0XHRyZXR1cm4gTlVMTDtcbi1cdH1cbi1cbi1cdC8qIFRhZyBlbmNvZGluZyAqL1xuLVx0dGFnID0gc2tiX3B1dChza2IsIEtTWl9JTkdSRVNTX1RBR19MRU4pO1xuLVx0aGRyID0gc2tiX2V0aF9oZHIoc2tiKTtcbi1cbi1cdCp0YWcgPSBkc2FfeG1pdF9wb3J0X21hc2soc2tiLCBkZXYpO1xuLVx0aWYgKGlzX2xpbmtfbG9jYWxfZXRoZXJfYWRkcihoZHItXHUwMDNlaF9kZXN0KSlcbi1cdFx0KnRhZyB8PSBLU1o4Nzk1X1RBSUxfVEFHX09WRVJSSURFO1xuLVxuLVx0cmV0dXJuIHNrYjtcbi19XG4tXG4tc3RhdGljIHN0cnVjdCBza19idWZmICprc3o4Nzk1X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLXtcbi1cdHU4ICp0YWc7XG4tXG4tXHRpZiAoc2tiX2xpbmVhcml6ZShza2IpKSB7XG4tXHRcdGtmcmVlX3NrYihza2IpO1xuLVx0XHRyZXR1cm4gTlVMTDtcbi1cdH1cbi1cbi1cdHRhZyA9IHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtIEtTWl9FR1JFU1NfVEFHX0xFTjtcbi1cbi1cdHJldHVybiBrc3pfY29tbW9uX3Jjdihza2IsIGRldiwgdGFnWzBdIFx1MDAyNiBLU1o4Nzk1X1RBSUxfVEFHX0VHX1BPUlRfTSxcbi1cdFx0XHQgICAgICBLU1pfRUdSRVNTX1RBR19MRU4pO1xuLX1cbi1cbi1zdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIGtzejg3OTVfbmV0ZGV2X29wcyA9IHtcbi1cdC5uYW1lXHQ9IEtTWjg3OTVfTkFNRSxcbi1cdC5wcm90b1x0PSBEU0FfVEFHX1BST1RPX0tTWjg3OTUsXG4tXHQueG1pdFx0PSBrc3o4Nzk1X3htaXQsXG4tXHQucmN2XHQ9IGtzejg3OTVfcmN2LFxuLVx0Lm5lZWRlZF90YWlscm9vbSA9IEtTWl9JTkdSRVNTX1RBR19MRU4sXG4tfTtcbi1cbi1EU0FfVEFHX0RSSVZFUihrc3o4Nzk1X25ldGRldl9vcHMpO1xuLU1PRFVMRV9BTElBU19EU0FfVEFHX0RSSVZFUihEU0FfVEFHX1BST1RPX0tTWjg3OTUsIEtTWjg3OTVfTkFNRSk7XG4tXG4gLypcbiAgKiBGb3IgSW5ncmVzcyAoSG9zdCAtXHUwMDNlIEtTWjk0NzcpLCAyLzYgYnl0ZXMgYXJlIGFkZGVkIGJlZm9yZSBGQ1MuXG4gICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5AQCAtMjg0LDYgKzIxOSwzNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmtzel9kZWZlcl94bWl0KHN0cnVjdCBkc2FfcG9ydCAqZHAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4rc3RhdGljIHN0cnVjdCBza19idWZmICprc3pfY29tbW9uX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0ICAgICAgIGJvb2wgZG9fdHN0YW1wLFxuK1x0XHRcdFx0ICAgICAgIHU4IHByaW8sXG4rXHRcdFx0XHQgICAgICAgdTggb3ZlcnJpZGVfbWFzaylcbit7XG4rXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3VzZXJfdG9fcG9ydChkZXYpO1xuK1x0c3RydWN0IGV0aGhkciAqaGRyO1xuK1x0dTggKnRhZztcbitcbitcdGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwgXHUwMDI2XHUwMDI2IHNrYl9jaGVja3N1bV9oZWxwKHNrYikpIHtcbitcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuK1xuK1x0LyogVGFnIGVuY29kaW5nICovXG4rXHRpZiAoZG9fdHN0YW1wKVxuK1x0XHRrc3pfeG1pdF90aW1lc3RhbXAoZHAsIHNrYik7XG4rXG4rXHR0YWcgPSBza2JfcHV0KHNrYiwgS1NaX0lOR1JFU1NfVEFHX0xFTik7XG4rXHRoZHIgPSBza2JfZXRoX2hkcihza2IpO1xuK1xuK1x0KnRhZyA9IGRzYV94bWl0X3BvcnRfbWFzayhza2IsIGRldik7XG4rXHQqdGFnIHw9IHByaW87XG4rXG4rXHRpZiAoaXNfbGlua19sb2NhbF9ldGhlcl9hZGRyKGhkci1cdTAwM2VoX2Rlc3QpKVxuK1x0XHQqdGFnIHw9IG92ZXJyaWRlX21hc2s7XG4rXG4rXHRyZXR1cm4ga3N6X2RlZmVyX3htaXQoZHAsIHNrYik7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqa3N6OTQ3N194bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG5AQCAtMzUzLDM3ICszMTksNjkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2FfZGV2aWNlX29wcyBrc3o5NDc3X25ldGRldl9vcHMgPSB7XG4gRFNBX1RBR19EUklWRVIoa3N6OTQ3N19uZXRkZXZfb3BzKTtcbiBNT0RVTEVfQUxJQVNfRFNBX1RBR19EUklWRVIoRFNBX1RBR19QUk9UT19LU1o5NDc3LCBLU1o5NDc3X05BTUUpO1xuIFxuLSNkZWZpbmUgS1NaOTg5M19UQUlMX1RBR19QUklPXHRcdEdFTk1BU0soNCwgMylcbi0jZGVmaW5lIEtTWjk4OTNfVEFJTF9UQUdfT1ZFUlJJREVcdEJJVCg1KVxuLSNkZWZpbmUgS1NaOTg5M19UQUlMX1RBR19MT09LVVBcdFx0QklUKDYpXG4rLypcbisgKiBGb3IgSW5ncmVzcyAoSG9zdCAtXHUwMDNlIEtTWjg3OTUpLCAxIGJ5dGUgaXMgYWRkZWQgYmVmb3JlIEZDUy5cbisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbisgKiBEQSg2Ynl0ZXMpfFNBKDZieXRlcyl8Li4uLnxEYXRhKG5ieXRlcyl8dGFnKDFieXRlKXxGQ1MoNGJ5dGVzKVxuKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyAqIHRhZyA6IGVhY2ggYml0IHJlcHJlc2VudHMgcG9ydCAoZWcsIDB4MDE9cG9ydDEsIDB4MDI9cG9ydDIsIDB4MTA9cG9ydDUpXG4rICpcbisgKiBGb3IgRWdyZXNzIChLU1o4Nzk1IC1cdTAwM2UgSG9zdCksIDEgYnl0ZSBpcyBhZGRlZCBiZWZvcmUgRkNTLlxuKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyAqIERBKDZieXRlcyl8U0EoNmJ5dGVzKXwuLi4ufERhdGEobmJ5dGVzKXx0YWcwKDFieXRlKXxGQ1MoNGJ5dGVzKVxuKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyAqIHRhZzAgOiB6ZXJvLWJhc2VkIHZhbHVlIHJlcHJlc2VudHMgcG9ydFxuKyAqXHQgIChlZywgMHgwPXBvcnQxLCAweDI9cG9ydDMsIDB4Mz1wb3J0NClcbisgKi9cbiBcbi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmtzejk4OTNfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4rI2RlZmluZSBLU1o4Nzk1X1RBSUxfVEFHX0VHX1BPUlRfTVx0R0VOTUFTSygxLCAwKVxuKyNkZWZpbmUgS1NaODc5NV9UQUlMX1RBR19PVkVSUklERVx0QklUKDYpXG4rI2RlZmluZSBLU1o4Nzk1X1RBSUxfVEFHX0xPT0tVUFx0XHRCSVQoNylcbitcbitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmtzejg3OTVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3tcbitcdHJldHVybiBrc3pfY29tbW9uX3htaXQoc2tiLCBkZXYsIGZhbHNlLCAwLCBLU1o4Nzk1X1RBSUxfVEFHX09WRVJSSURFKTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBza19idWZmICprc3o4Nzk1X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbi1cdHUxNiBxdWV1ZV9tYXBwaW5nID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7XG4tXHR1OCBwcmlvID0gbmV0ZGV2X3R4cV90b190YyhkZXYsIHF1ZXVlX21hcHBpbmcpO1xuLVx0c3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV91c2VyX3RvX3BvcnQoZGV2KTtcbi1cdHN0cnVjdCBldGhoZHIgKmhkcjtcbiBcdHU4ICp0YWc7XG4gXG4tXHRpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMIFx1MDAyNlx1MDAyNiBza2JfY2hlY2tzdW1faGVscChza2IpKSB7XG4rXHRpZiAoc2tiX2xpbmVhcml6ZShza2IpKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiBcbi1cdC8qIFRhZyBlbmNvZGluZyAqL1xuLVx0a3N6X3htaXRfdGltZXN0YW1wKGRwLCBza2IpO1xuK1x0dGFnID0gc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gS1NaX0VHUkVTU19UQUdfTEVOO1xuIFxuLVx0dGFnID0gc2tiX3B1dChza2IsIEtTWl9JTkdSRVNTX1RBR19MRU4pO1xuLVx0aGRyID0gc2tiX2V0aF9oZHIoc2tiKTtcbitcdHJldHVybiBrc3pfY29tbW9uX3Jjdihza2IsIGRldiwgdGFnWzBdIFx1MDAyNiBLU1o4Nzk1X1RBSUxfVEFHX0VHX1BPUlRfTSxcbitcdFx0XHQgICAgICBLU1pfRUdSRVNTX1RBR19MRU4pO1xuK31cbiBcbi1cdCp0YWcgPSBkc2FfeG1pdF9wb3J0X21hc2soc2tiLCBkZXYpO1xuLVx0KnRhZyB8PSBGSUVMRF9QUkVQKEtTWjk4OTNfVEFJTF9UQUdfUFJJTywgcHJpbyk7XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBkc2FfZGV2aWNlX29wcyBrc3o4Nzk1X25ldGRldl9vcHMgPSB7XG4rXHQubmFtZVx0PSBLU1o4Nzk1X05BTUUsXG4rXHQucHJvdG9cdD0gRFNBX1RBR19QUk9UT19LU1o4Nzk1LFxuK1x0LnhtaXRcdD0ga3N6ODc5NV94bWl0LFxuK1x0LnJjdlx0PSBrc3o4Nzk1X3JjdixcbitcdC5uZWVkZWRfdGFpbHJvb20gPSBLU1pfSU5HUkVTU19UQUdfTEVOLFxuK307XG4gXG4tXHRpZiAoaXNfbGlua19sb2NhbF9ldGhlcl9hZGRyKGhkci1cdTAwM2VoX2Rlc3QpKVxuLVx0XHQqdGFnIHw9IEtTWjk4OTNfVEFJTF9UQUdfT1ZFUlJJREU7XG4rRFNBX1RBR19EUklWRVIoa3N6ODc5NV9uZXRkZXZfb3BzKTtcbitNT0RVTEVfQUxJQVNfRFNBX1RBR19EUklWRVIoRFNBX1RBR19QUk9UT19LU1o4Nzk1LCBLU1o4Nzk1X05BTUUpO1xuIFxuLVx0cmV0dXJuIGtzel9kZWZlcl94bWl0KGRwLCBza2IpO1xuKyNkZWZpbmUgS1NaOTg5M19UQUlMX1RBR19QUklPXHRcdEdFTk1BU0soNCwgMylcbisjZGVmaW5lIEtTWjk4OTNfVEFJTF9UQUdfT1ZFUlJJREVcdEJJVCg1KVxuKyNkZWZpbmUgS1NaOTg5M19UQUlMX1RBR19MT09LVVBcdFx0QklUKDYpXG4rXG4rc3RhdGljIHN0cnVjdCBza19idWZmICprc3o5ODkzX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3tcbitcdHUxNiBxdWV1ZV9tYXBwaW5nID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7XG4rXHR1OCBwcmlvID0gbmV0ZGV2X3R4cV90b190YyhkZXYsIHF1ZXVlX21hcHBpbmcpO1xuK1xuK1x0cmV0dXJuIGtzel9jb21tb25feG1pdChza2IsIGRldiwgdHJ1ZSxcbitcdFx0XHQgICAgICAgRklFTERfUFJFUChLU1o5ODkzX1RBSUxfVEFHX1BSSU8sIHByaW8pLFxuK1x0XHRcdCAgICAgICBLU1o5ODkzX1RBSUxfVEFHX09WRVJSSURFKTtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBkc2FfZGV2aWNlX29wcyBrc3o5ODkzX25ldGRldl9vcHMgPSB7XG5AQCAtMzk5LDYgKzM5Nyw3MCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIGtzejk4OTNfbmV0ZGV2X29wcyA9IHtcbiBEU0FfVEFHX0RSSVZFUihrc3o5ODkzX25ldGRldl9vcHMpO1xuIE1PRFVMRV9BTElBU19EU0FfVEFHX0RSSVZFUihEU0FfVEFHX1BST1RPX0tTWjk4OTMsIEtTWjk4OTNfTkFNRSk7XG4gXG4rI2RlZmluZSBLU1o4NDYzX1RBSUxfVEFHX1BSSU9cdFx0R0VOTUFTSyg0LCAzKVxuKyNkZWZpbmUgS1NaODQ2M19UQUlMX1RBR19FR19QT1JUX01cdEdFTk1BU0soMiwgMClcbitcbitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmtzejg0NjNfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4re1xuK1x0dTE2IHF1ZXVlX21hcHBpbmcgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcbitcdHU4IHByaW8gPSBuZXRkZXZfdHhxX3RvX3RjKGRldiwgcXVldWVfbWFwcGluZyk7XG4rXG4rXHRyZXR1cm4ga3N6X2NvbW1vbl94bWl0KHNrYiwgZGV2LCBmYWxzZSxcbitcdFx0XHQgICAgICAgRklFTERfUFJFUChLU1o4NDYzX1RBSUxfVEFHX1BSSU8sIHByaW8pLFxuK1x0XHRcdCAgICAgICAwKTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBza19idWZmICprc3o4NDYzX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3tcbitcdHVuc2lnbmVkIGludCBsZW4gPSBLU1pfRUdSRVNTX1RBR19MRU47XG4rXHRzdHJ1Y3QgcHRwX2hlYWRlciAqcHRwX2hkcjtcbitcdHVuc2lnbmVkIGludCBwdHBfY2xhc3M7XG4rXHR1bnNpZ25lZCBpbnQgcG9ydDtcbitcdGt0aW1lX3QgdHM7XG4rXHR1OCAqdGFnO1xuK1xuK1x0aWYgKHNrYl9saW5lYXJpemUoc2tiKSkge1xuK1x0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4rXG4rXHRLU1pfU0tCX0NCKHNrYiktXHUwMDNldHN0YW1wID0gMDtcbitcbitcdC8qIFRhZyBkZWNvZGluZyAqL1xuK1x0dGFnID0gc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gS1NaX0VHUkVTU19UQUdfTEVOO1xuK1x0cG9ydCA9IHRhZ1swXSBcdTAwMjYgS1NaODQ2M19UQUlMX1RBR19FR19QT1JUX007XG4rXG4rXHRfX3NrYl9wdXNoKHNrYiwgRVRIX0hMRU4pO1xuK1x0cHRwX2NsYXNzID0gcHRwX2NsYXNzaWZ5X3Jhdyhza2IpO1xuK1x0X19za2JfcHVsbChza2IsIEVUSF9ITEVOKTtcbitcdGlmIChwdHBfY2xhc3MgPT0gUFRQX0NMQVNTX05PTkUpXG4rXHRcdGdvdG8gY29tbW9uX3JjdjtcbitcbitcdHB0cF9oZHIgPSBwdHBfcGFyc2VfaGVhZGVyKHNrYiwgcHRwX2NsYXNzKTtcbitcdGlmIChwdHBfaGRyKSB7XG4rXHRcdHRzID0ga3N6X2RlY29kZV90c3RhbXAoZ2V0X3VuYWxpZ25lZF9iZTMyKFx1MDAyNnB0cF9oZHItXHUwMDNlcmVzZXJ2ZWQyKSk7XG4rXHRcdEtTWl9TS0JfQ0Ioc2tiKS1cdTAwM2V0c3RhbXAgPSB0cztcbitcdFx0cHRwX2hkci1cdTAwM2VyZXNlcnZlZDIgPSAwO1xuK1x0fVxuK1xuK2NvbW1vbl9yY3Y6XG4rXHRyZXR1cm4ga3N6X2NvbW1vbl9yY3Yoc2tiLCBkZXYsIHBvcnQsIGxlbik7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMga3N6ODQ2M19uZXRkZXZfb3BzID0ge1xuK1x0Lm5hbWVcdD0gS1NaODQ2M19OQU1FLFxuK1x0LnByb3RvXHQ9IERTQV9UQUdfUFJPVE9fS1NaODQ2MyxcbitcdC54bWl0XHQ9IGtzejg0NjNfeG1pdCxcbitcdC5yY3ZcdD0ga3N6ODQ2M19yY3YsXG4rXHQuY29ubmVjdCA9IGtzel9jb25uZWN0LFxuK1x0LmRpc2Nvbm5lY3QgPSBrc3pfZGlzY29ubmVjdCxcbitcdC5uZWVkZWRfdGFpbHJvb20gPSBLU1pfSU5HUkVTU19UQUdfTEVOLFxuK307XG4rXG4rRFNBX1RBR19EUklWRVIoa3N6ODQ2M19uZXRkZXZfb3BzKTtcbitNT0RVTEVfQUxJQVNfRFNBX1RBR19EUklWRVIoRFNBX1RBR19QUk9UT19LU1o4NDYzLCBLU1o4NDYzX05BTUUpO1xuK1xuIC8qIEZvciB4bWl0LCAyLzYgYnl0ZXMgYXJlIGFkZGVkIGJlZm9yZSBGQ1MuXG4gICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICogREEoNmJ5dGVzKXxTQSg2Ynl0ZXMpfC4uLi58RGF0YShuYnl0ZXMpfHRzKDRieXRlcyl8dGFnMCgxYnl0ZSl8dGFnMSgxYnl0ZSl8XG5AQCAtNDcxLDYgKzUzMyw3IEBAIERTQV9UQUdfRFJJVkVSKGxhbjkzN3hfbmV0ZGV2X29wcyk7XG4gTU9EVUxFX0FMSUFTX0RTQV9UQUdfRFJJVkVSKERTQV9UQUdfUFJPVE9fTEFOOTM3WCwgTEFOOTM3WF9OQU1FKTtcbiBcbiBzdGF0aWMgc3RydWN0IGRzYV90YWdfZHJpdmVyICpkc2FfdGFnX2RyaXZlcl9hcnJheVtdID0ge1xuK1x0XHUwMDI2RFNBX1RBR19EUklWRVJfTkFNRShrc3o4NDYzX25ldGRldl9vcHMpLFxuIFx0XHUwMDI2RFNBX1RBR19EUklWRVJfTkFNRShrc3o4Nzk1X25ldGRldl9vcHMpLFxuIFx0XHUwMDI2RFNBX1RBR19EUklWRVJfTkFNRShrc3o5NDc3X25ldGRldl9vcHMpLFxuIFx0XHUwMDI2RFNBX1RBR19EUklWRVJfTkFNRShrc3o5ODkzX25ldGRldl9vcHMpLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjM6MDU6MzMuMDg4NDAzMTkzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkzMDI4ODk2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBc3Nlc3NpbmcgdGhlIEZ1enphYmlsaXR5IG9mIHRoZSBLU1o4NDYzIFN3aXRjaCBTdXBwb3J0IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgS1NaODQ2MyBzd2l0Y2ggZmVhdHVyZXMsIHNwZWNpZmljYWxseSB0aGUgSVJRLCBQVFAsIGFuZCBEU0EgdGFnIHByb3RvY29sLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2VzIGFyZSBpbiB0aGUgdXN1YWwgcGxhY2VzOiBga3N6OC5jYCwgYGtzel9jb21tb24uY2AsIGBrc3pfcHRwLmNgLCBgbmV0L2RzYS90YWdfa3N6LmNgLCBhbGwgcmVsYXRlZCB0byB0aGlzIE1pY3JvY2hpcCBLU1o4NDYzIERTQSBzd2l0Y2ggZHJpdmVyLiBJdCBhZGRzIGEgbmV3IGBEU0FfVEFHX1BST1RPX0tTWjg0NjNgLCBJUlEsIGFuZCBQVFAgc3VwcG9ydCDigJMgbmljZS4gQnV0IHRoZSBtaWxsaW9uLWRvbGxhciBxdWVzdGlvbiBpczogY2FuIHRoaXMgYmUgKnJlYWNoZWQqIGVmZmVjdGl2ZWx5IGZvciBmdXp6aW5nP1xuXG5Ob3JtYWxseSwgRFNBIHN3aXRjaGVzIHJlcXVpcmUgdGhlIHJlYWwgaGFyZHdhcmUgY29ubmVjdGlvbiwgbGlrZSBJMkMsIFNQSSwgb3IgTURJTywgdG8gdGhlIHN3aXRjaCBjaGlwLiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsIFwiQ2FuIHRoaXMgYmUgZW11bGF0ZWQgaW4gUUVNVT9cIiBIbW0sIG5vLCBRRU1VIGRvZXNuJ3QgZW11bGF0ZSB0aGUgS1NaODQ2My4gT2theSwgYnV0IGNhbiBpdCBiZSAqZnV6emVkKj8gTGV0J3Mgc2VlLi4uXG5cbkknbSByZW1lbWJlcmluZyB0aGUgcHJvbXB0IGFib3V0IFdvcnRoRnV6emluZyBhbmQgd2hhdCdzIGV4cGxpY2l0bHkgZXhjbHVkZWQuIFNwZWNpZmljYWxseSwgXCJ2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVVwiLiBBbHJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBCdXQgd2hhdCBhYm91dCBEU0Egc3dpdGNoZXMgY29ubmVjdGVkIHZpYSBNRElPIG9yIFNQST8gVGhpcyBpcyB0aGUgY29yZSBpc3N1ZS5cblxuQ2FuIFN5emthbGxlciBmdXp6IE1ESU8vU1BJIGRldmljZXM/IEkgKnRoaW5rKiBTeXprYWxsZXIgY2FuIGZ1enogSTJDL1NQSSB2aWEgYC9kZXYvaTJjLSpgIGFuZCBgL2Rldi9zcGlkZXZgLCBidXQgdGhhdCByZXF1aXJlcyB0aGUgZGV2aWNlIHRvIGJlIHByb2JlZC4gVGhhdCdzIHRoZSBjcnV4IG9mIHRoZSBwcm9ibGVtLiBXYWl0LCBkb2VzIFN5emthbGxlciAqaGF2ZSogc29tZSBraW5kIG9mIEkyQy9TUEkgaW5qZWN0aW9uPyBObywgSSB0aGluayBpdCB1c2VzIHZpcnR1YWwgZGV2aWNlcyBvciBtb2NrcywgYnV0IGZvciBEU0Egc3dpdGNoZXMsIHRoYXQncyB0eXBpY2FsbHkgZGlmZmljdWx0IHVubGVzcyB0aGVyZSdzIGEgZ29vZCBtb2NrIGltcGxlbWVudGF0aW9uLlxuXG5TbywgdGhlIGtleSBpcyB0byBzZWUgaWYgd2UgY2FuIHRyaWdnZXIgYW55IG9mIHRoZSBrZXkgZnVuY3Rpb25zIGluIHRoaXMgZHJpdmVyLCBsaWtlIGBrc3o4NDYzX3NldHVwYCBvciBga3N6ODQ2M194bWl0YC4gSSdsbCBkbyBhIHF1aWNrIHNlYXJjaCBpbiB0aGUga2VybmVsIHNvdXJjZSB0byBzZWUgaWYgdGhlcmUncyBhbiBvYnZpb3VzIHdheSB0byByZWFjaCB0aGVtLiBHb3R0YSBmaWd1cmUgb3V0IGlmIHRoZXJlIGlzIGEgcGF0aCB0byBnZXQgdGhpcyBjb2RlIHRvIGV4ZWN1dGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5Mzc4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjM6MDU6NDAuMDE4Njk0OTUzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNTQyODQzNzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3N6ODQ2M1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDU0NCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWljcm9jaGlwLGtzei55YW1sPTEzPXByb3BlcnRpZXM6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9taWNyb2NoaXAsa3N6LnlhbWwtMTctICAgIGVudW06XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWljcm9jaGlwLGtzei55YW1sOjE4OiAgICAgIC0gbWljcm9jaGlwLGtzejg0NjNcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9taWNyb2NoaXAsa3N6LnlhbWwtMTktICAgICAgLSBtaWNyb2NoaXAsa3N6ODc2NVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWljcm9jaGlwLGtzei55YW1sPTExNT1hbGxPZjpcXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21pY3JvY2hpcCxrc3oueWFtbC0xNTMtICAgICAgICAgIGNvbnRhaW5zOlxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21pY3JvY2hpcCxrc3oueWFtbDoxNTQ6ICAgICAgICAgICAgY29uc3Q6IG1pY3JvY2hpcCxrc3o4NDYzXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWljcm9jaGlwLGtzei55YW1sLTE1NS0gICAgdGhlbjpcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTE4ND1zdGF0aWMgaW50IGtzejhfcG1lX3B3cml0ZTgoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsIGludCBvZmZzZXQsIHU4IGRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xOTAtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MTkxOnN0YXRpYyB2b2lkIGtzejg0NjNfaXJxX21hc2soc3RydWN0IGlycV9kYXRhICpkKVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTE5Mi17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xOTctXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MTk4OnN0YXRpYyB2b2lkIGtzejg0NjNfaXJxX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMTk5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTIwNC1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyMDU6c3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfY2hpcCBrc3o4NDYzX2lycV9jaGlwID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjIwNjpcXHQubmFtZVxcdFxcdFxcdD0gXFxcImtzejg0NjMtaXJxXFxcIixcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyMDc6XFx0LmlycV9tYXNrXFx0XFx0PSBrc3o4NDYzX2lycV9tYXNrLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjIwODpcXHQuaXJxX3VubWFza1xcdFxcdD0ga3N6ODQ2M19pcnFfdW5tYXNrLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTIwOS1cXHQuaXJxX2J1c19sb2NrXFx0XFx0PSBrc3pfaXJxX2J1c19sb2NrLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjEyLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjIxMzpzdGF0aWMgaW50IGtzejg0NjNfaXJxX2RvbWFpbl9tYXAoc3RydWN0IGlycV9kb21haW4gKmQsXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjE0LVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGlycSwgaXJxX2h3X251bWJlcl90IGh3aXJxKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjE2LVxcdGlycV9zZXRfY2hpcF9kYXRhKGlycSwgZC1cXHUwMDNlaG9zdF9kYXRhKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyMTc6XFx0aXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKGlycSwgXFx1MDAyNmtzejg0NjNfaXJxX2NoaXAsIGhhbmRsZV9sZXZlbF9pcnEpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTIxOC1cXHRpcnFfc2V0X25vcHJvYmUoaXJxKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTIyMi1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyMjM6c3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBrc3o4NDYzX2lycV9kb21haW5fb3BzID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjIyNDpcXHQubWFwXFx0PSBrc3o4NDYzX2lycV9kb21haW5fbWFwLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTIyNS1cXHQueGxhdGVcXHQ9IGlycV9kb21haW5feGxhdGVfdHdvY2VsbCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTIyNy1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyMjg6c3RhdGljIGludCBrc3o4NDYzX2dpcnFfc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yMjkte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjM1LVxcdGdpcnEtXFx1MDAzZW1hc2tlZCA9IDA7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MjM2OlxcdHNucHJpbnRmKGdpcnEtXFx1MDAzZW5hbWUsIHNpemVvZihnaXJxLVxcdTAwM2VuYW1lKSwgXFxcImtzejg0NjMtZ2lycVxcXCIpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTIzNy1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTIzOS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyNDA6XFx0cmV0dXJuIGtzel9pcnFfY29tbW9uX3NldHVwKGRldiwgZ2lycSwgXFx1MDAyNmtzejg0NjNfaXJxX2RvbWFpbl9vcHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI0MS19XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjQyLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjI0MzpzdGF0aWMgaW50IGtzejg0NjNfcmVzZXRfc3dpdGNoKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjQ0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTMyNj1zdGF0aWMgaW50IGtzejhfcG9ydF9xdWV1ZV9zcGxpdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgaW50IHF1ZXVlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTM0OS1cXHRcXHRcXHRyZXR1cm4gcmV0O1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjM1MDpcXHR9IGVsc2UgaWYgKGtzel9pc19rc3o4NDYzKGRldikpIHtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0zNTEtXFx0XFx0bWFza180cSA9IEtTWjg4NzNfUE9SVF80UVVFVUVfU1BMSVRfRU47XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYz0xNDg5PXN0YXRpYyB2b2lkIGtzejhfY2ZnX3BvcnRfbWVtYmVyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LCB1OCBtZW1iZXIpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xNDkzLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjE0OTQ6XFx0aWYgKGtzel9pc19rc3o4NDYzKGRldikpXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMTQ5NS1cXHRcXHRvZmZzZXQgPSBQMUNSMjtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTE1MDI9c3RhdGljIHZvaWQga3N6OF9mbHVzaF9keW5fbWFjX3RhYmxlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xNTI2LVxcdH1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoxNTI3OlxcdGlmIChrc3pfaXNfa3N6ODQ2MyhkZXYpKSB7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMTUyOC1cXHRcXHRyZWcgPSBLU1o4NDYzX0ZMVVNIX1RBQkxFX0NUUkw7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYz0xNjg5PXN0YXRpYyB2b2lkIGtzejhfcG9ydF9lbmFibGVfcHZpZChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgYm9vbCBzdGF0ZSlcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xNjkwLXtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoxNjkxOlxcdGlmIChrc3pfaXNfa3N6ODh4MyhkZXYpIHx8IGtzel9pc19rc3o4NDYzKGRldikpIHtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xNjkyLVxcdFxcdGludCByZWcgPSBSRUdfU1dfSU5TRVJUX1NSQ19QVklEO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTE2OTMtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MTY5NDpcXHRcXHRpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSlcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xNjk1LVxcdFxcdFxcdHJlZyA9IEtTWjg0NjNfUkVHX1NXX0NUUkxfOTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTE4MDg9c3RhdGljIGludCBrc3o4X3BvcnRfbWlycm9yX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMTgxNC1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoxODE1OlxcdGlmIChrc3pfaXNfa3N6ODQ2MyhkZXYpKVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTE4MTYtXFx0XFx0b2Zmc2V0ID0gUDFDUjI7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYz0xODM1PXN0YXRpYyB2b2lkIGtzejhfcG9ydF9taXJyb3JfZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xODQxLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjE4NDI6XFx0aWYgKGtzel9pc19rc3o4NDYzKGRldikpXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMTg0My1cXHRcXHRvZmZzZXQgPSBQMUNSMjtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTE4NTgtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MTg1OTpzdGF0aWMgdTgga3N6ODQ2M190Y19jdHJsKGludCBwb3J0LCBpbnQgcXVldWUpXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMTg2MC17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYz0xODg5PXN0YXRpYyBpbnQga3N6ODh4M190Y19ldHNfYWRkKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMTkwNC1cXHRcXHRyZWcgPSBLU1o4ODczX1RYUV9TUExJVF9DVFJMX1JFRyhwb3J0LCBxdWV1ZSk7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MTkwNTpcXHRcXHRpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSlcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoxOTA2OlxcdFxcdFxcdHJlZyA9IGtzejg0NjNfdGNfY3RybChwb3J0LCBxdWV1ZSk7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMTkwNy1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTE5MzA9c3RhdGljIGludCBrc3o4OHgzX3RjX2V0c19kZWwoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xOTQxLVxcdFxcdHJlZyA9IEtTWjg4NzNfVFhRX1NQTElUX0NUUkxfUkVHKHBvcnQsIHF1ZXVlKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoxOTQyOlxcdFxcdGlmIChrc3pfaXNfa3N6ODQ2MyhkZXYpKVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjE5NDM6XFx0XFx0XFx0cmVnID0ga3N6ODQ2M190Y19jdHJsKHBvcnQsIHF1ZXVlKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xOTQ0LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9MTk1Nz1zdGF0aWMgaW50IGtzejhfdGNfc2V0dXBfcWRpc2NfZXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xOTYyLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjE5NjM6XFx0aWYgKCEoa3N6X2lzX2tzejg4eDMoZGV2KSB8fCBrc3pfaXNfa3N6ODQ2MyhkZXYpKSlcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xOTY0LVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTIwMjg9c3RhdGljIHZvaWQga3N6OF9wb3J0X3NldHVwKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LCBib29sIGNwdV9wb3J0KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjAzOS1cXHRvZmZzZXQgPSBQX0JDQVNUX1NUT1JNX0NUUkw7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MjA0MDpcXHRpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSlcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yMDQxLVxcdFxcdG9mZnNldCA9IFAxQ1IxO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjA0Ny1cXHRvZmZzZXQgPSBQXzgwMl8xUF9DVFJMO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjIwNDg6XFx0aWYgKGtzel9pc19rc3o4NDYzKGRldikpXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjA0OS1cXHRcXHRvZmZzZXQgPSBQMUNSMjtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTIwNzk9c3RhdGljIHZvaWQga3N6ODh4M19jb25maWdfcm1paV9jbGsoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTIwOTMtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MjA5NDpzdGF0aWMgdm9pZCBrc3o4NDYzX2NvbmZpZ19jcHVfcG9ydChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjA5NS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYz0yMzM2PXN0YXRpYyB2b2lkIGtzejg4eHhfcl9taWJfc3RhdHM2NChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTIzODQtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MjM4NTpzdGF0aWMgaW50IGtzejg0NjNfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTIzODYte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjM5OS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyNDAwOlxcdHJldCA9IGtzejg0NjNfcmVzZXRfc3dpdGNoKGRldik7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjQwMS1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yNDEzLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjI0MTQ6XFx0a3N6ODQ2M19jb25maWdfY3B1X3BvcnQoZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI0MTUtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yNDcyLVxcdGlmIChkZXYtXFx1MDAzZWlycSBcXHUwMDNlIDApIHtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyNDczOlxcdFxcdHJldCA9IGtzejg0NjNfZ2lycV9zZXR1cChkZXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI0NzQtXFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI0NzYtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MjQ3NzpcXHRcXHRyZXQgPSBrc3o4NDYzX3B0cF9pcnFfc2V0dXAoZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI0NzgtXFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI1MDktXFx0aWYgKGRldi1cXHUwMDNlaXJxIFxcdTAwM2UgMClcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyNTEwOlxcdFxcdGtzejg0NjNfcHRwX2lycV9mcmVlKGRzKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yNTExLWZyZWVfZ2lycTpcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI1MTctXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MjUxODpzdGF0aWMgdm9pZCBrc3o4NDYzX3RlYXJkb3duKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yNTE5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI1MjMtXFx0XFx0a3N6X3B0cF9jbG9ja191bnJlZ2lzdGVyKGRzKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyNTI0OlxcdFxcdGtzejg0NjNfcHRwX2lycV9mcmVlKGRzKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yNTI1LVxcdFxcdGtzel9pcnFfZnJlZShcXHUwMDI2ZGV2LVxcdTAwM2VnaXJxKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTI4NDE9c3RhdGljIHUzMiBrc3o4X2dldF9wb3J0X2FkZHIoaW50IHBvcnQsIGludCBvZmZzZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yODQ1LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjI4NDY6c3RhdGljIHUzMiBrc3o4NDYzX2dldF9wb3J0X2FkZHIoaW50IHBvcnQsIGludCBvZmZzZXQpXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjg0Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yODUzLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjI4NTQ6c3RhdGljIHUxNiBrc3o4NDYzX2dldF9waHlfYWRkcih1MTYgcGh5LCB1MTYgcmVnLCB1MTYgb2Zmc2V0KVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI4NTUte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjg1OC1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyODU5OnN0YXRpYyBpbnQga3N6ODQ2M19yX3BoeShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1MTYgcGh5LCB1MTYgcmVnLCB1MTYgKnZhbClcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yODYwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI4NjgtXFx0Y2FzZSBNSUlfUEhZU0lEMTpcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyODY5OlxcdFxcdHN3X3JlZyA9IGtzejg0NjNfZ2V0X3BoeV9hZGRyKHBoeSwgMCwgUEhZMUlIUik7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjg3MC1cXHRcXHRicmVhaztcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yODcxLVxcdGNhc2UgTUlJX1BIWVNJRDI6XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6Mjg3MjpcXHRcXHRzd19yZWcgPSBrc3o4NDYzX2dldF9waHlfYWRkcihwaHksIDAsIFBIWTFJTFIpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI4NzMtXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yODc3LVxcdGNhc2UgTUlJX0xQQTpcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyODc4OlxcdFxcdHN3X3JlZyA9IGtzejg0NjNfZ2V0X3BoeV9hZGRyKHBoeSwgcmVnLCBQMU1CQ1IpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI4NzktXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yODk4LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjI4OTk6c3RhdGljIGludCBrc3o4NDYzX3BoeV9yZWFkMTYoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgYWRkciwgaW50IHJlZylcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yOTAwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI5MDQtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MjkwNTpcXHRyZXQgPSBrc3o4NDYzX3JfcGh5KGRldiwgYWRkciwgcmVnLCBcXHUwMDI2dmFsKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yOTA2LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yOTExLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjI5MTI6c3RhdGljIGludCBrc3o4NDYzX3dfcGh5KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHUxNiBwaHksIHUxNiByZWcsIHUxNiB2YWwpXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjkxMy17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yOTI1LVxcdGNhc2UgTUlJX0FEVkVSVElTRTpcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyOTI2OlxcdFxcdHN3X3JlZyA9IGtzejg0NjNfZ2V0X3BoeV9hZGRyKHBoeSwgcmVnLCBQMU1CQ1IpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI5MjctXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yOTM5LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjI5NDA6c3RhdGljIGludCBrc3o4NDYzX3BoeV93cml0ZTE2KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IGFkZHIsIGludCByZWcsIHUxNiB2YWwpXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjk0MS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yOTQ0LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjI5NDU6XFx0cmV0ID0ga3N6ODQ2M193X3BoeShkZXYsIGFkZHIsIHJlZywgdmFsKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yOTQ2LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYz0yOTcwPXN0YXRpYyBpbnQga3N6OF9zd2l0Y2hfaW5pdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjk3OC1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyOTc5OnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2wga3N6ODQ2M19nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yOTgwLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGludCBwb3J0LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjk4NS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyOTg2OnN0YXRpYyBpbnQga3N6ODQ2M19jb25uZWN0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjk4Ny1cXHRcXHRcXHRcXHRcXHRlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG8pXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYz0zMDY3PWNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMga3N6OF9waHlsaW5rX21hY19vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0zMDc0LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjMwNzU6Y29uc3Qgc3RydWN0IGtzel9kZXZfb3BzIGtzejg0NjNfZGV2X29wcyA9IHtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzozMDc2OlxcdC5nZXRfcG9ydF9hZGRyID0ga3N6ODQ2M19nZXRfcG9ydF9hZGRyLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTMwNzctXFx0LmNmZ19wb3J0X21lbWJlciA9IGtzejhfY2ZnX3BvcnRfbWVtYmVyLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9MzEwMD1jb25zdCBzdHJ1Y3Qga3N6X2Rldl9vcHMga3N6ODh4eF9kZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMzExMy1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzozMTE0OmNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBrc3o4NDYzX3N3aXRjaF9vcHMgPSB7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MzExNTpcXHQuZ2V0X3RhZ19wcm90b2NvbFxcdD0ga3N6ODQ2M19nZXRfdGFnX3Byb3RvY29sLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjMxMTY6XFx0LmNvbm5lY3RfdGFnX3Byb3RvY29sICAgPSBrc3o4NDYzX2Nvbm5lY3RfdGFnX3Byb3RvY29sLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjMxMTc6XFx0LnNldHVwXFx0XFx0XFx0PSBrc3o4NDYzX3NldHVwLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjMxMTg6XFx0LnRlYXJkb3duXFx0XFx0PSBrc3o4NDYzX3RlYXJkb3duLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjMxMTk6XFx0LnBoeV9yZWFkXFx0XFx0PSBrc3o4NDYzX3BoeV9yZWFkMTYsXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MzEyMDpcXHQucGh5X3dyaXRlXFx0XFx0PSBrc3o4NDYzX3BoeV93cml0ZTE2LFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTMxMjEtXFx0LnBoeWxpbmtfZ2V0X2NhcHNcXHQ9IGtzejhfcGh5bGlua19nZXRfY2FwcyxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTMxNDUtXFx0LnJlc3VtZVxcdFxcdFxcdD0ga3N6X3Jlc3VtZSxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzozMTQ2OlxcdC5nZXRfdHNfaW5mb1xcdFxcdD0ga3N6ODQ2M19nZXRfdHNfaW5mbyxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0zMTQ3LVxcdC5wb3J0X2h3dHN0YW1wX2dldFxcdD0ga3N6X2h3dHN0YW1wX2dldCxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzozMTQ4OlxcdC5wb3J0X2h3dHN0YW1wX3NldFxcdD0ga3N6ODQ2M19od3RzdGFtcF9zZXQsXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMzE0OS1cXHQucG9ydF90eHRzdGFtcFxcdFxcdD0ga3N6X3BvcnRfdHh0c3RhbXAsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguaC0xNC1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguaDoxNTpleHRlcm4gY29uc3Qgc3RydWN0IGtzel9kZXZfb3BzIGtzejg0NjNfZGV2X29wcztcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguaC0xNi1leHRlcm4gY29uc3Qgc3RydWN0IGtzel9kZXZfb3BzIGtzejg3eHhfZGV2X29wcztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5oPTE5PWV4dGVybiBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzIGtzejhfcGh5bGlua19tYWNfb3BzO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5oOjIwOmV4dGVybiBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODQ2M19zd2l0Y2hfb3BzO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5oLTIxLWV4dGVybiBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODd4eF9zd2l0Y2hfb3BzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM9MTk1PWludCBrc3pfcGh5bGlua19tYWNfZW5hYmxlX3R4X2xwaShzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTIwMC1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzoyMDE6c3RhdGljIGNvbnN0IHUxNiBrc3o4NDYzX3JlZ3NbXSA9IHtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0yMDItXFx0W1JFR19TV19NQUNfQUREUl1cXHRcXHQ9IDB4MTAsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0yMjctXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM6MjI4OnN0YXRpYyBjb25zdCB1MzIga3N6ODQ2M19tYXNrc1tdID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTIyOS1cXHRbUE9SVF84MDJfMVBfUkVNQVBQSU5HXVxcdFxcdD0gQklUKDMpLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMjQ5LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jOjI1MDpzdGF0aWMgdTgga3N6ODQ2M19zaGlmdHNbXSA9IHtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0yNTEtXFx0W1ZMQU5fVEFCTEVfTUVNQkVSU0hJUF9TXVxcdD0gMTYsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYz0xMTQxPWNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTExNTEtXFx0XFx0Lm51bV9pcG1zID0gNCxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzoxMTUyOlxcdFxcdC5vcHMgPSBcXHUwMDI2a3N6ODQ2M19kZXZfb3BzLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jOjExNTM6XFx0XFx0LnN3aXRjaF9vcHMgPSBcXHUwMDI2a3N6ODQ2M19zd2l0Y2hfb3BzLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTExNTQtXFx0XFx0LnBoeWxpbmtfbWFjX29wcyA9IFxcdTAwMjZrc3o4OHgzX3BoeWxpbmtfbWFjX29wcyxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTExNTctXFx0XFx0LnJlZ19taWJfY250ID0gTUlCX0NPVU5URVJfTlVNLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jOjExNTg6XFx0XFx0LnJlZ3MgPSBrc3o4NDYzX3JlZ3MsXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM6MTE1OTpcXHRcXHQubWFza3MgPSBrc3o4NDYzX21hc2tzLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jOjExNjA6XFx0XFx0LnNoaWZ0cyA9IGtzejg0NjNfc2hpZnRzLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTExNjEtXFx0XFx0LnN1cHBvcnRzX21paSA9IHtmYWxzZSwgZmFsc2UsIHRydWV9LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM9MzU2Nj1pbnQga3N6X3N3aXRjaF9tYWNhZGRyX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMzYwMS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgRVRIX0FMRU47IGkrKykge1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jOjM2MDI6XFx0XFx0aWYgKGtzel9pc19rc3o4NDYzKGRldikpIHtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0zNjAzLVxcdFxcdFxcdHUxNiBhZGRyMTYgPSAoKHUxNilhZGRyW2ldIFxcdTAwM2NcXHUwMDNjIDgpIHwgYWRkcltpICsgMV07XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYz0zODIzPWludCBrc3pfZHJpdmVfc3RyZW5ndGhfd3JpdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTM4NjEtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM6Mzg2MjpzdGF0aWMgaW50IGtzejg0NjNfY29uZmlndXJlX3N0cmFwc19zcGkoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0zODYzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTM4ODgtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM6Mzg4OTpzdGF0aWMgaW50IGtzejg0NjNfcmVsZWFzZV9zdHJhcHNfc3BpKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMzg5MC17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYz0zODk0PWludCBrc3pfc3dpdGNoX3JlZ2lzdGVyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0zOTA4LVxcdGlmIChkZXYtXFx1MDAzZXJlc2V0X2dwaW8pIHtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzozOTA5OlxcdFxcdGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShkZXYtXFx1MDAzZWRldi1cXHUwMDNlb2Zfbm9kZSwgXFxcIm1pY3JvY2hpcCxrc3o4NDYzXFxcIikpIHtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzozOTEwOlxcdFxcdFxcdHJldCA9IGtzejg0NjNfY29uZmlndXJlX3N0cmFwc19zcGkoZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0zOTExLVxcdFxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0zOTE5LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jOjM5MjA6XFx0XFx0aWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGRldi1cXHUwMDNlZGV2LVxcdTAwM2VvZl9ub2RlLCBcXFwibWljcm9jaGlwLGtzejg0NjNcXFwiKSkge1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jOjM5MjE6XFx0XFx0XFx0cmV0ID0ga3N6ODQ2M19yZWxlYXNlX3N0cmFwc19zcGkoZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0zOTIyLVxcdFxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaD01NjM9c3RhdGljIGlubGluZSBzdHJ1Y3QgcmVnbWFwICprc3pfcmVnbWFwXzMyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaC01NjctXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmg6NTY4OnN0YXRpYyBpbmxpbmUgYm9vbCBrc3pfaXNfa3N6ODQ2MyhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oLTU2OS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaD03OTU9c3RhdGljIGlubGluZSBib29sIGlzX2tzejgoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oLTc5Ny1cXHRyZXR1cm4ga3N6X2lzX2tzejg3eHgoZGV2KSB8fCBrc3pfaXNfa3N6ODh4MyhkZXYpIHx8XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmg6Nzk4OlxcdCAgICAgICBrc3pfaXNfODg5NV9mYW1pbHkoZGV2KSB8fCBrc3pfaXNfa3N6ODQ2MyhkZXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oLTc5OS19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaD04MDE9c3RhdGljIGlubGluZSBib29sIGlzX2tzejg4eHgoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oLTgwMy1cXHRyZXR1cm4ga3N6X2lzX2tzejg4eDMoZGV2KSB8fCBrc3pfaXNfODg5NV9mYW1pbHkoZGV2KSB8fFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oOjgwNDpcXHQgICAgICAga3N6X2lzX2tzejg0NjMoZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaC04MDUtfVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmg9ODM3PXN0YXRpYyBpbmxpbmUgYm9vbCBrc3pfaXNfc2dtaWlfcG9ydChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oLTEwMzYtXFx0XFx0LnBhZF9iaXRzID0gKHJlZ3BhZCksXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oOjEwMzc6XFx0XFx0LnJlYWQgPSBrc3o4NDYzX3NwaV9yZWFkLFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaDoxMDM4OlxcdFxcdC53cml0ZSA9IGtzejg0NjNfc3BpX3dyaXRlLFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaC0xMDM5LVxcdFxcdC5tYXhfcmVnaXN0ZXIgPSBCSVQocmVnYml0cykgLSAxLFxcdFxcdFxcdFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2RjYi5jPTk2PXN0YXRpYyB2b2lkIGtzel9nZXRfZGVmYXVsdF9wb3J0X3ByaW9fcmVnKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCAqcmVnLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfZGNiLmMtMTAyLVxcdFxcdCpzaGlmdCA9IF9fYmZfc2hmKEtTWjhfUE9SVF9CQVNFRF9QUklPX00pO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2RjYi5jOjEwMzpcXHRcXHRpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSlcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9kY2IuYy0xMDQtXFx0XFx0XFx0KnJlZyA9IEtTWjg0NjNfUkVHX1BPUlRfMV9DVFJMXzA7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9kY2IuYz0xMjI9c3RhdGljIHZvaWQga3N6X2dldF9kc2NwX3ByaW9fcmVnKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCAqcmVnLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfZGNiLmMtMTI4LVxcdFxcdCptYXNrID0gR0VOTUFTSygxLCAwKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9kY2IuYzoxMjk6XFx0fSBlbHNlIGlmIChrc3pfaXNfa3N6ODh4MyhkZXYpIHx8IGtzel9pc19rc3o4NDYzKGRldikpIHtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9kY2IuYy0xMzAtXFx0XFx0KnJlZyA9IEtTWjg4WDNfUkVHX1RPU19EU0NQX0NUUkw7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9kY2IuYy0xMzItXFx0XFx0Km1hc2sgPSBHRU5NQVNLKDEsIDApO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2RjYi5jOjEzMzpcXHRcXHRpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSlcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9kY2IuYy0xMzQtXFx0XFx0XFx0KnJlZyA9IEtTWjg0NjNfUkVHX1RPU19EU0NQX0NUUkw7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9kY2IuYz0xNTI9c3RhdGljIHZvaWQga3N6X2dldF9hcHB0cnVzdF9tYXBfYW5kX3JlZyhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfZGNiLmMtMTU5LVxcdFxcdCptYXNrID0gS1NaOF9QT1JUX0RJRkZTRVJWX0VOQUJMRSB8IEtTWjhfUE9SVF84MDJfMVBfRU5BQkxFO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2RjYi5jOjE2MDpcXHRcXHRpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSlcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9kY2IuYy0xNjEtXFx0XFx0XFx0KnJlZyA9IEtTWjg0NjNfUkVHX1BPUlRfMV9DVFJMXzA7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYz0yNzE9c3RhdGljIGludCBrc3pfcHRwX2VuYWJsZV9tb2RlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy0yOTktXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmM6MzAwOmludCBrc3o4NDYzX2dldF90c19pbmZvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMzAxLVxcdFxcdFxcdHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICp0cylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jPTM1Nz1pbnQga3N6X2h3dHN0YW1wX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMzY4LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jOjM2OTpzdGF0aWMgaW50IGtzejg0NjNfc2V0X2h3dHN0YW1wX2NvbmZpZyhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTM3MC1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGtzel9wb3J0ICpwcnQsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy00MTUtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmM6NDE2OmludCBrc3o4NDYzX2h3dHN0YW1wX3NldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTQxNy1cXHRcXHRcXHQgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZyxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTQyNS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYzo0MjY6XFx0cmV0ID0ga3N6ODQ2M19zZXRfaHd0c3RhbXBfY29uZmlnKGRldiwgcHJ0LCBjb25maWcpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTQyNy1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmM9NjQ3PXN0YXRpYyB2b2lkIGtzel9wdHBfdHh0c3RhbXBfc2tiKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy02NjQtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmM6NjY1OnN0YXRpYyB2b2lkIGtzejg0NjNfc2V0X3BkZWxheXJlc3BfZmxhZyhzdHJ1Y3Qga3N6X3BvcnQgKnBydCxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy02NjYtXFx0XFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTY3MS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYzo2NzI6XFx0aWYgKCFrc3pfaXNfa3N6ODQ2MyhwcnQtXFx1MDAzZWtzel9kZXYpKVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTY3My1cXHRcXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYz02OTA9dm9pZCBrc3pfcG9ydF9kZWZlcnJlZF94bWl0KHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy03MDUtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmM6NzA2OlxcdGtzejg0NjNfc2V0X3BkZWxheXJlc3BfZmxhZyhwcnQsIHNrYik7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtNzA3LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmM9MTA5OD1zdGF0aWMgaW50IGtzel9yZWFkX3RzKHN0cnVjdCBrc3pfcG9ydCAqcG9ydCwgdTE2IHJlZywgdTMyICp0cylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTExMDYtXFx0ICovXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmM6MTEwNzpcXHRpZiAoa3N6X2lzX2tzejg0NjMocG9ydC1cXHUwMDNla3N6X2RldikpIHtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy0xMTA4LVxcdFxcdGNvbnN0IHN0cnVjdCBrc3pfZGV2X29wcyAqb3BzID0gcG9ydC1cXHUwMDNla3N6X2Rldi1cXHUwMDNlZGV2X29wcztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jPTEyNDU9c3RhdGljIGludCBrc3pfcHRwX21zZ19pcnFfc2V0dXAoc3RydWN0IGtzel9wb3J0ICpwb3J0LCB1OCBuKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMTI3NC1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYzoxMjc1OnN0YXRpYyBpbnQga3N6ODQ2M19wdHBfcG9ydF9pcnFfc2V0dXAoc3RydWN0IGtzel9pcnEgKnB0cGlycSxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy0xMjc2LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBrc3pfcG9ydCAqcG9ydCwgaW50IGh3X2lycSlcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTEzMTgtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmM6MTMxOTpzdGF0aWMgdm9pZCBrc3o4NDYzX3B0cF9wb3J0X2lycV90ZWFyZG93bihzdHJ1Y3Qga3N6X3BvcnQgKnBvcnQpXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMTMyMC17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy0xMzI2LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jOjEzMjc6aW50IGtzejg0NjNfcHRwX2lycV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMTMyOC17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy0xMzU2LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jOjEzNTc6XFx0cmV0ID0ga3N6ODQ2M19wdHBfcG9ydF9pcnFfc2V0dXAocHRwaXJxLCBwb3J0MSxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy0xMzU4LVxcdFxcdFxcdFxcdFxcdCBLU1o4NDYzX1BUUF9QT1JUMV9JTlRfU1RBUlQgLSBLU1o4NDYzX1BUUF9JTlRfU1RBUlQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMTM2MS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYzoxMzYyOlxcdHJldCA9IGtzejg0NjNfcHRwX3BvcnRfaXJxX3NldHVwKHB0cGlycSwgcG9ydDIsXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMTM2My1cXHRcXHRcXHRcXHRcXHQgS1NaODQ2M19QVFBfUE9SVDJfSU5UX1NUQVJUIC0gS1NaODQ2M19QVFBfSU5UX1NUQVJUKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTEzNzQtZnJlZV9wb3J0MjpcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYzoxMzc1OlxcdGtzejg0NjNfcHRwX3BvcnRfaXJxX3RlYXJkb3duKHBvcnQyKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy0xMzc2LWZyZWVfcG9ydDE6XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmM6MTM3NzpcXHRrc3o4NDYzX3B0cF9wb3J0X2lycV90ZWFyZG93bihwb3J0MSk7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMTM3OC1yZWxlYXNlX2RvbWFpbjpcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTEzODMtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmM6MTM4NDp2b2lkIGtzejg0NjNfcHRwX2lycV9mcmVlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy0xMzg1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTEzOTEtXFx0ZnJlZV9pcnEocHRwaXJxLVxcdTAwM2VpcnFfbnVtLCBwdHBpcnEpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jOjEzOTI6XFx0a3N6ODQ2M19wdHBfcG9ydF9pcnFfdGVhcmRvd24ocG9ydDIpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jOjEzOTM6XFx0a3N6ODQ2M19wdHBfcG9ydF9pcnFfdGVhcmRvd24ocG9ydDEpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTEzOTQtXFx0aXJxX2RvbWFpbl9yZW1vdmUocHRwaXJxLVxcdTAwM2Vkb21haW4pO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg9NDA9aW50IGtzel9nZXRfdHNfaW5mbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oLTQxLVxcdFxcdCAgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqdHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oOjQyOmludCBrc3o4NDYzX2dldF90c19pbmZvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmgtNDMtXFx0XFx0XFx0c3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKnRzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oPTQ2PWludCBrc3pfaHd0c3RhbXBfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC00OC1cXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg6NDk6aW50IGtzejg0NjNfaHd0c3RhbXBfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmgtNTAtXFx0XFx0XFx0IHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaD01Nz12b2lkIGtzel9wdHBfaXJxX2ZyZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCB1OCBwKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaDo1ODppbnQga3N6ODQ2M19wdHBfaXJxX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg6NTk6dm9pZCBrc3o4NDYzX3B0cF9pcnFfZnJlZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oLTYwLVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg9ODA9c3RhdGljIGlubGluZSB2b2lkIGtzel9wdHBfaXJxX2ZyZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCB1OCBwKSB7fVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oLTgxLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oOjgyOnN0YXRpYyBpbmxpbmUgaW50IGtzejg0NjNfcHRwX2lycV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmgtODMte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmgtODYtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg6ODc6c3RhdGljIGlubGluZSB2b2lkIGtzejg0NjNfcHRwX2lycV9mcmVlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykge31cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC04OC1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC04OS0jZGVmaW5lIGtzel9nZXRfdHNfaW5mbyBOVUxMXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg6OTA6I2RlZmluZSBrc3o4NDYzX2dldF90c19pbmZvIE5VTExcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC05MS1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oLTk0LSNkZWZpbmUga3N6X2h3dHN0YW1wX3NldCBOVUxMXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg6OTU6I2RlZmluZSBrc3o4NDYzX2h3dHN0YW1wX3NldCBOVUxMXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmgtOTYtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYz00MT1LU1pfUkVHTUFQX1RBQkxFKGtzejk0NzcsIDMyLCBLU1o5NDc3X1NQSV9BRERSX1NISUZULFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmMtNDMtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmM6NDQ6c3RhdGljIHUxNiBrc3o4NDYzX3JlZyh1MTYgcmVnLCBzaXplX3Qgc2l6ZSlcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYy00NS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYy02MC1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYzo2MTpzdGF0aWMgaW50IGtzejg0NjNfc3BpX3JlYWQodm9pZCAqY29udGV4dCxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYy02Mi1cXHRcXHRcXHQgICAgY29uc3Qgdm9pZCAqcmVnLCBzaXplX3QgcmVnX3NpemUsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYy03My1cXHRtZW1jcHkoXFx1MDAyNmNtZCwgcmVnLCBzaXplb2YodTE2KSk7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmM6NzQ6XFx0Y21kID0ga3N6ODQ2M19yZWcoY21kLCB2YWxfc2l6ZSk7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmMtNzUtXFx0LyogU1BJIGNvbW1hbmQgdXNlcyBiaWctZW5kaWFuIGZvcm1hdC4gKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jLTk2LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jOjk3OnN0YXRpYyBpbnQga3N6ODQ2M19zcGlfd3JpdGUodm9pZCAqY29udGV4dCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGNvdW50KVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jLTk4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jLTEwOC1cXHRtZW1jcHkoXFx1MDAyNmNtZCwgZGF0YSwgc2l6ZW9mKHUxNikpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jOjEwOTpcXHRjbWQgPSBrc3o4NDYzX3JlZyhjbWQsIHZhbF9zaXplKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYy0xMTAtXFx0Y21kIHw9ICgxIFxcdTAwM2NcXHUwMDNjIChLU1o4NDYzX1NQSV9BRERSX1NISUZUICsgS1NaODQ2M19TUElfVFVSTkFST1VORF9TSElGVCkpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmMtMTMzLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jOjEzNDpLU1o4NDYzX1JFR01BUF9UQUJMRShrc3o4NDYzLCBLU1o4NDYzX1NQSV9BRERSX1NISUZULCAwLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jLTEzNS1cXHRcXHQgICAgIEtTWjg0NjNfU1BJX0FERFJfQUxJR04pO1xcbi0tXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIzOjA1OjQzLjM3Mjk4NjI5NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxMTY3NjkyOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIHRoZSBGdXp6YWJpbGl0eSBvZiBhIERTQSBTd2l0Y2ggUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIHRvdWNoZXMgYSBmZXcgZmlsZXM6IGBrc3o4LmNgLCBga3N6X2NvbW1vbi5jYCwgYGtzel9wdHAuY2AsIGFuZCBgdGFnX2tzei5jYC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciBJIGNhbiBldmVuICpyZWFjaCogdGhpcyBjb2RlIHdpdGhpbiB0aGUgUUVNVSBlbnZpcm9ubWVudC4gRFNBIHN3aXRjaGVzLCBpbiBnZW5lcmFsLCBuZWVkIGEgaGFyZHdhcmUgZGV2aWNlIHRvIGJlIHByb2JlZC4gVGhlIE1pY3JvY2hpcCBkcml2ZXJzIGFyZSBga3N6X3NwaS5jYCwgYGtzel9pMmMuY2AsIG9yIGBrc3pfbWRpby5jYC5cblxuTm93LCBsZXQncyBzZWUsIHdoYXQgZG9lcyB0aGUgcHJvbXB0IHNheT8gXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVVcIi4gSXQgZG9lc24ndCAqZXhwbGljaXRseSogbWVudGlvbiBEU0Egc3dpdGNoZXMsIGJ1dCB0aGVzZSB1c3VhbGx5IGNvbm5lY3QgdmlhIFNQSS9JMkMvTURJTy5cblxuVGhlIHJlYWwgcXVlc3Rpb24gaXM6IENhbiBzeXprYWxsZXIgZWZmZWN0aXZlbHkgZnV6eiBTUEkvSTJDL01ESU8gZGV2aWNlcyBpbiBhIHdheSB0aGF0IHdvdWxkIGFsbG93IG1lIHRvIHJlYWNoIGFuZCB0ZXN0IHRoZSByZWxldmFudCBjb2RlIHBhdGhzPyBJIGtub3cgc3l6a2FsbGVyIGhhcyBzb21lIGxpbWl0ZWQgc3VwcG9ydCBmb3IgSTJDIGFuZCBTUEkgdGhyb3VnaCBgL2Rldi9pMmMtKmAgYW5kIGAvZGV2L3NwaWRldmAsIGJ1dCBpdCdzIG5vdCBzdHJhaWdodGZvcndhcmQgdG8gaW5zdGFudGlhdGUgYSAqc3BlY2lmaWMqIGRyaXZlciB1bmxlc3MgdGhlcmUncyBhIG1vY2sgb3IgYSB2aXJ0dWFsIGRldmljZSBhdmFpbGFibGUuXG5cbkhhbmcgb24uLi4gZG9lcyBzeXprYWxsZXIgaGF2ZSBzb21ldGhpbmcgbGlrZSBgc3l6X2kyY19zZXR1cGA/IE5vcGUsIG5vdGhpbmcgbGlrZSB0aGF0LiBJdCBoYXMgYHN5el91c2JfY29ubmVjdGAsIGBzeXpfODAyMTFfaW5qZWN0X2ZyYW1lYCwgZXRjLiwgYnV0IG5vdGhpbmcgZGlyZWN0bHkgdGFyZ2V0ZWQgYXQgc2V0dGluZyB1cCBhIHNwZWNpZmljIEkyQyBvciBTUEkgZGV2aWNlLlxuXG5Pa2F5LCBzbyB3aGF0IGFib3V0IHVzaW5nIGBuZXRsaW5rYCB0byBjb25maWd1cmUgdGhlIERTQSBzd2l0Y2g/IFRoYXQgY291bGQgd29yayAqaWYqIHRoZSBzd2l0Y2ggaXMgYWxyZWFkeSBwcm9iZWQuIEluIFFFTVUsIHRoYXQncyB1bmxpa2VseSB3aXRob3V0IGEgZGV2aWNlIHRyZWUgb3ZlcmxheSBvciBzb21lIGNsZXZlciB0cmlja2VyeS4gRG9lcyBzeXprYWxsZXIgb2ZmZXIgYW4gZWFzeSB3YXkgdG8gaW5qZWN0IGRldmljZSB0cmVlIG5vZGVzIG9yIHVzZSBgc3l6X2Rldm1lbWAgdG8gZmFrZSBkZXZpY2VzPyBIbW0sIEkgZG9uJ3QgdGhpbmsgaXQgaGFzIGEgKmdlbmVyaWMqIG1ldGhvZCBmb3IgcHJvYmluZyBJMkMvU1BJIGRldmljZXMgdW5sZXNzIHRoZXkncmUgcHJlc2VudCBpbiB0aGUgZGVmYXVsdCBRRU1VIGRldmljZSB0cmVlLiBBbmQgdGhlc2UgYWxtb3N0IGNlcnRhaW5seSB3b24ndCBiZSB0aGVyZS5cblxuQ291bGQgc29tZXRoaW5nIGxpa2UgYGRzYV9sb29wYCB3b3JrPyBXZWxsLCBgZHNhX2xvb3BgIGlzIGEgbW9jayBEU0Egc3dpdGNoLCBidXQgdGhpcyBwYXRjaCBpcyBzcGVjaWZpY2FsbHkgZm9yIHRoZSBga3N6ODQ2M2AsIGEgcGFydGljdWxhciBNaWNyb2NoaXAgc3dpdGNoLCBzbyB1c2luZyBhIGdlbmVyaWMgbW9jayB3b24ndCB0ZXN0IHRoZSBuZXcgY29kZS5cblxuUmlnaHQsIHRpbWUgdG8gdGFrZSBhIHF1aWNrIHBlZWsgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgYHN5el9gIHBzZXVkby1zeXNjYWxscyBzcGVjaWZpY2FsbHkgZm9yIFNQSSBvciBJMkMgZGV2aWNlcyB0aGF0IEknbSBvdmVybG9va2luZy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzQ0OCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMzowNTo1MS40ODk3NTg2NDdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MDQ4MDM3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzeXpfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInN5cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIzOjA1OjUxLjU5NDgxNTgyNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNDcxMTk3NjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnV6emFiaWxpdHkgb2YgdGhlIEtTWjg0NjMgRHJpdmVyKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBJIGNhbid0IGp1c3QgYGdyZXBwZXJgIHRocm91Z2ggYHN5cy9gIG9yIGFueXRoaW5nIGNvbnRhaW5pbmcgXCJzeXpfXCIgYmVjYXVzZSB0aG9zZSBhcmUgU3l6a2FsbGVyJ3MgcHNldWRvLXN5c2NhbGxzLCBub3Qga2VybmVsIGNvZGUuIEkgbmVlZCB0byByZWx5IG9uIG15IGV4aXN0aW5nIGtub3dsZWRnZSBvciB1c2UgYHJlYWQtZmlsZWAgaWYgbmVjZXNzYXJ5LCBidXQgSSBkb24ndCB0aGluayBJJ2xsIG5lZWQgaXQgdGhpcyB0aW1lLiBUaGUgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIHRoZSBga3N6ODQ2M2AgZHJpdmVyIGlzIGV2ZW4gZnV6emFibGUuXG5cbk5ldHdvcmsgZHJpdmVycyBmb3Igc3BlY2lmaWMgaGFyZHdhcmUgYXJlIHVzdWFsbHkgdW5yZWFjaGFibGUgaW4gUUVNVSBiZWNhdXNlIHRoZSBoYXJkd2FyZSBpc24ndCBwcmVzZW50LiBCdXQsIGBuZXQvZHNhL3RhZ19rc3ouY2AgY29udGFpbnMgYSB0YWdnaW5nIHByb3RvY29sLiBJcyAqdGhhdCogYWNjZXNzaWJsZT8gRFNBIHRhZ2dpbmcgcHJvdG9jb2xzIGFyZSB1c2VkIHdoZW4gYSBEU0Egc3dpdGNoIGlzIGF0dGFjaGVkLiBJZiB0aGVyZSdzIG5vIERTQSBzd2l0Y2gsIHRoZXJlJ3Mgbm8gdGFnZ2luZyBwcm90b2NvbC4gQ2FuIGEgdXNlciwgcGVyaGFwcywgY3JlYXRlIGEgZHVtbXkgbmV0d29yayBkZXZpY2UgYW5kIHNldCBpdHMgRFNBIHRhZyBwcm90b2NvbD8gTm8sIGJlY2F1c2UgRFNBIHRhZyBwcm90b2NvbHMgYXJlIHNldCBieSB0aGUgRFNBIGNvcmUgdXBvbiBzd2l0Y2ggcHJvYmUsIHNvIHRoZXJlJ3Mgbm8gd2F5IHRvIGRvIHRoaXMgYXQgdXNlciBzcGFjZS5cblxuSXMgdGhlcmUgYW55IHZpcnR1YWwgRFNBIHN3aXRjaD8gYGRzYV9sb29wYCBpcyBvbmUsIGJ1dCBpdCB1c2VzIGBEU0FfVEFHX1BST1RPX05PTkVgIG9yIGBEU0FfVEFHX1BST1RPX0RTQWAuIENhbiBhIHVzZXItc3BhY2UgcHJvZ3JhbSB0cmlnZ2VyIGBrc3o4NDYzX3htaXRgIG9yIGBrc3o4NDYzX3JjdmA/IExldCdzIHNlZSBpZiBJIGNhbiBjb25maWd1cmUgYGRzYV9sb29wYCB0byB1c2UgdGhlIGBrc3o4NDYzYCB0YWcgcHJvdG9jb2wuIE5vLCBpdCBsb29rcyBsaWtlIGBkc2FfbG9vcGAgZWl0aGVyIGhhcmRjb2RlcyB0aGUgcHJvdG9jb2wgb3IgaXQncyBmaXhlZCwgc28gdGhhdCdzIG5vdCBnb2luZyB0byB3b3JrLlxuXG5Eb2VzIFN5emthbGxlciBldmVuICpoYXZlKiBhIGBkc2FfbG9vcGAgaW5zdGFuY2U/IE5vLCBpdCB1c3VhbGx5IGRvZXNuJ3QgZnV6eiBzcGVjaWZpYyBEU0EgdGFnZ2VycyB1bmxlc3MgdGhleSBjYW4gYmUgYXR0YWNoZWQgdG8gYSBkdW1teSBkZXZpY2UuIENhbiBJIGF0dGFjaCBhIERTQSB0YWdnZXIgdG8gYSB2ZXRoIG9yIGR1bW15IGRldmljZSB1c2luZyBhIG5ldGxpbmsgY29tbWFuZD8gTm8sIERTQSBpcyBzdHJpY3RseSBmb3IgRFNBIHN3aXRjaCB0cmVlcy5cblxuQWxyaWdodCwgdGltZSB0byBldmFsdWF0ZSBpZiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpcyBhcHByb3ByaWF0ZSBoZXJlLiBUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBhIEtTWjg0NjMgc3dpdGNoIGluIHRoZSBNaWNyb2NoaXAgRFNBIGRyaXZlci4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciBmb3IgYW4gU1BJL0kyQy9NRElPIGNvbm5lY3RlZCBzd2l0Y2guIFNpbmNlIFFFTVUgZG9lc24ndCBlbXVsYXRlIHRoZSBLU1o4NDYzIHN3aXRjaCwgdGhlIGRyaXZlcidzIGBwcm9iZWAgZnVuY3Rpb24gd2lsbCBuZXZlciBzdWNjZWVkLCBhbmQgdGhlIHN3aXRjaCB3aWxsIG5ldmVyIGJlIHJlZ2lzdGVyZWQuIFRoZXJlZm9yZSwgdGhlIGNvZGUgaW4gYGtzei5jYCwgYGtzel9wdHAuY2AsIGBrc3pfY29tbW9uLmNgLCBhbmQgYHRhZ19rc3ouY2AgKHdoaWNoIGlzIG9ubHkgdXNlZCB3aGVuIHRoZSBzd2l0Y2ggaXMgcmVnaXN0ZXJlZCkgaXMgdW5yZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LlxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIHRob3VnaCwgYWJvdXQgYHRhZ19rc3ouY2AuIElzIHRoZXJlICphbnkqIHdheSB0byBmb3JjZSBhIG5ldHdvcmsgaW50ZXJmYWNlIHRvIHVzZSBhIHNwZWNpZmljIERTQSB0YWdnZXI/IEluIGBuZXQvZHNhL3RhZy5jYCBvciBgbmV0L2RzYS9kc2EuY2AsIHRoZSB0YWdnZXIgYXNzaWdubWVudCBpcyBiYXNlZCBvbiB0aGUgc3dpdGNoIHRyZWUuIFRoZXJlIG1pZ2h0IGJlIGEgc3lzZnMgb3IgbmV0bGluayBhdHRyaWJ1dGUgdG8gY2hhbmdlIHRoZSBEU0EgdGFnZ2VyIG9mIGEgc3dpdGNoIHRyZWUsIGJ1dCBhZ2FpbiwgSSAqbmVlZCogYSBzd2l0Y2ggdHJlZSB0byBleGlzdC4gQ2FuIFN5emthbGxlciBjcmVhdGUgYSBzd2l0Y2ggdHJlZT8gVGhlcmUncyBgZHNhX2xvb3BgLCB3aGljaCBpcyBhIG1vY2sgRFNBIHN3aXRjaCB0aGF0IGNhbiBiZSBwcm9iZWQuIExldCdzIG1ha2Ugc3VyZSBgZHNhX2xvb3BgIGlzIGVuYWJsZWQgaW4gU3l6a2FsbGVyLiBFdmVuIGlmIGl0ICppcyogZW5hYmxlZCwgY2FuIGl0IGFjdHVhbGx5IHVzZSB0aGUgYGtzejg0NjNgIHRhZ2dlcj8gTGV0J3MgY2hlY2sgdGhlIGBkc2FfbG9vcGAgY29kZS4gSXQncyBsb29raW5nIHByZXR0eSBkaW0sIGJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NTc4LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIzOjA2OjAyLjA2NjAxNTEyMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTAwMTE0MDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRzYV9sb29wXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kc2EvZHNhLnJzdD0xNTk9YWxsIGF0dGFjaGVkIHN3aXRjaCBwb3J0cyBtdXN0IGJlIGRvd24gd2hpbGUgZG9pbmcgdGhpcykuXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RzYS9kc2EucnN0LTE2MC1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZHNhL2RzYS5yc3Q6MTYxOkl0IGlzIGRlc2lyYWJsZSB0aGF0IGFsbCB0YWdnaW5nIHByb3RvY29scyBhcmUgdGVzdGFibGUgd2l0aCB0aGUgYGBkc2FfbG9vcGBgXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RzYS9kc2EucnN0LTE2Mi1tb2NrdXAgZHJpdmVyLCB3aGljaCBjYW4gYmUgYXR0YWNoZWQgdG8gYW55IG5ldHdvcmsgaW50ZXJmYWNlLiBUaGUgZ29hbCBpcyB0aGF0XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU9Mz1iY20tc2YyLW9ianNcXHRcXHRcXHQ6PSBiY21fc2YyLm8gYmNtX3NmMl9jZnAub1xcbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19ORVRfRFNBX0xPT1ApXFx0Kz0gZHNhX2xvb3Aub1xcbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZS01LW9iai0kKENPTkZJR19ORVRfRFNBX0tTODk5NSkgXFx0Kz0ga3M4OTk1Lm9cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1OnN0cnVjdCBkc2FfbG9vcF92bGFuIHtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNi1cXHR1MTYgbWVtYmVycztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI5LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMwOnN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMxLVxcdGNoYXIgbmFtZVtFVEhfR1NUUklOR19MRU5dO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzQtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzU6ZW51bSBkc2FfbG9vcF9taWJfY291bnRlcnMge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM2LVxcdERTQV9MT09QX1BIWV9SRUFEX09LLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDItXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDM6c3RydWN0IGRzYV9sb29wX3BvcnQge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ0OlxcdHN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkgbWliW19fRFNBX0xPT1BfQ05UX01BWF07XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDUtXFx0dTE2IHB2aWQ7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0OTpzdHJ1Y3QgZHNhX2xvb3BfcHJpdiB7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTAtXFx0c3RydWN0IG1paV9idXNcXHQqYnVzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxLVxcdHVuc2lnbmVkIGludFxcdHBvcnRfYmFzZTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MjpcXHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiB2bGFuc1tWTEFOX05fVklEXTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01My1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjU0OlxcdHN0cnVjdCBkc2FfbG9vcF9wb3J0IHBvcnRzW0RTQV9NQVhfUE9SVFNdO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTU1LX07XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTc6c3RydWN0IGRzYV9sb29wX3BkYXRhIHtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01OC1cXHQvKiBNdXN0IGJlIGZpcnN0LCBzdWNoIHRoYXQgZHNhX3JlZ2lzdGVyX3N3aXRjaCgpIGNhbiBhY2Nlc3MgdGhpc1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNjYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Njc6c3RhdGljIHN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkgZHNhX2xvb3BfbWlic1tdID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTY4LVxcdFtEU0FfTE9PUF9QSFlfUkVBRF9PS11cXHQ9IHsgXFxcInBoeV9yZWFkX29rXFxcIiwgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTc1PXN0YXRpYyBzdHJ1Y3QgbWRpb19kZXZpY2UgKnN3aXRjaF9tZGlvZGV2O1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTc2LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjc3OmVudW0gZHNhX2xvb3BfZGV2bGlua19yZXNvdXJjZV9pZCB7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNzgtXFx0RFNBX0xPT1BfREVWTElOS19QQVJBTV9JRF9OT05FLCAgLyogREVWTElOS19SRVNPVVJDRV9JRF9QQVJFTlRfVE9QICovXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy04MS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo4MjpzdGF0aWMgdTY0IGRzYV9sb29wX2RldmxpbmtfdnR1X2dldCh2b2lkICpwcml2KVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTgzLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo4NDpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTg1LVxcdHVuc2lnbmVkIGludCBpLCBjb3VudCA9IDA7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6ODY6XFx0c3RydWN0IGRzYV9sb29wX3ZsYW4gKnZsO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTg3LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtOTYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6OTc6c3RhdGljIGludCBkc2FfbG9vcF9zZXR1cF9kZXZsaW5rX3Jlc291cmNlcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtOTgte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTk5LVxcdHN0cnVjdCBkZXZsaW5rX3Jlc291cmNlX3NpemVfcGFyYW1zIHNpemVfcGFyYW1zO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEwMDpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMDEtXFx0aW50IGVycjtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTExNS1cXHRcXHRcXHRcXHRcXHQgICAgICBEU0FfTE9PUF9ERVZMSU5LX1BBUkFNX0lEX1ZUVSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxMTY6XFx0XFx0XFx0XFx0XFx0ICAgICAgZHNhX2xvb3BfZGV2bGlua192dHVfZ2V0LCBwcyk7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTE3LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTI0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEyNTpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGRzYV9sb29wX2dldF9wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTI2LVxcdFxcdFxcdFxcdFxcdFxcdCAgIGludCBwb3J0LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTMzLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEzNDpzdGF0aWMgaW50IGRzYV9sb29wX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzUte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEzNjpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzctXFx0dW5zaWduZWQgaW50IGk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzktXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRzLVxcdTAwM2VudW1fcG9ydHM7IGkrKylcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDA6XFx0XFx0bWVtY3B5KHBzLVxcdTAwM2Vwb3J0c1tpXS5taWIsIGRzYV9sb29wX21pYnMsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTQxOlxcdFxcdCAgICAgICBzaXplb2YoZHNhX2xvb3BfbWlicykpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0NC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDU6XFx0cmV0dXJuIGRzYV9sb29wX3NldHVwX2RldmxpbmtfcmVzb3VyY2VzKGRzKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNDYtfVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0Ny1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDg6c3RhdGljIHZvaWQgZHNhX2xvb3BfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0OS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNTItXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTUzOnN0YXRpYyBpbnQgZHNhX2xvb3BfZ2V0X3NzZXRfY291bnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHNzZXQpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTU0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE2MC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNjE6c3RhdGljIHZvaWQgZHNhX2xvb3BfZ2V0X3N0cmluZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNjItXFx0XFx0XFx0XFx0IHUzMiBzdHJpbmdzZXQsIHVpbnQ4X3QgKmRhdGEpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTYzLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNjQ6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTY1LVxcdHVuc2lnbmVkIGludCBpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTczLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE3NDpzdGF0aWMgdm9pZCBkc2FfbG9vcF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE3NS1cXHRcXHRcXHRcXHQgICAgICAgdWludDY0X3QgKmRhdGEpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTc2LXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNzc6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTc4LVxcdHVuc2lnbmVkIGludCBpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTgzLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE4NDpzdGF0aWMgaW50IGRzYV9sb29wX3BoeV9yZWFkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCByZWdudW0pXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTg1LXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxODY6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTg3LVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTk4LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE5OTpzdGF0aWMgaW50IGRzYV9sb29wX3BoeV93cml0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIwMC1cXHRcXHRcXHQgICAgICBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjAxLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyMDI6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjAzLVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjE0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjIxNTpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfYnJpZGdlX2pvaW4oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMTYtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZHNhX2JyaWRnZSBicmlkZ2UsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMjUtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjI2OnN0YXRpYyB2b2lkIGRzYV9sb29wX3BvcnRfYnJpZGdlX2xlYXZlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjI3LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZHNhX2JyaWRnZSBicmlkZ2UpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMzItXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjMzOnN0YXRpYyB2b2lkIGRzYV9sb29wX3BvcnRfc3RwX3N0YXRlX3NldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIzNC1cXHRcXHRcXHRcXHRcXHR1OCBzdGF0ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIzOS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyNDA6c3RhdGljIGludCBkc2FfbG9vcF9wb3J0X3ZsYW5fZmlsdGVyaW5nKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjQxLVxcdFxcdFxcdFxcdFxcdGJvb2wgdmxhbl9maWx0ZXJpbmcsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNDktXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjUwOnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF92bGFuX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI1MS1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfdmxhbiAqdmxhbixcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI1NS1cXHRib29sIHB2aWQgPSB2bGFuLVxcdTAwM2VmbGFncyBcXHUwMDI2IEJSSURHRV9WTEFOX0lORk9fUFZJRDtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyNTY6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjU3LVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1ODpcXHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiAqdmw7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjU5LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjgyLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI4MzpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODQtXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X29ial9wb3J0X3ZsYW4gKnZsYW4pXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODYtXFx0Ym9vbCB1bnRhZ2dlZCA9IHZsYW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19VTlRBR0dFRDtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyODc6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjg4LVxcdHUxNiBwdmlkID0gcHMtXFx1MDAzZXBvcnRzW3BvcnRdLnB2aWQ7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjg5LVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI5MDpcXHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiAqdmw7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjkxLVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEwLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMxMTpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfY2hhbmdlX210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMxMi1cXHRcXHRcXHRcXHQgICAgaW50IG5ld19tdHUpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEzLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMTQ6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnByaXYgPSBkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMTUtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMjAtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzIxOnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF9tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzIyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMyNS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMjY6c3RhdGljIHZvaWQgZHNhX2xvb3BfcGh5bGlua19nZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHNhLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMjctXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMzMtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzM0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgZHNhX2xvb3BfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNTpcXHQuZ2V0X3RhZ19wcm90b2NvbFxcdD0gZHNhX2xvb3BfZ2V0X3Byb3RvY29sLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNjpcXHQuc2V0dXBcXHRcXHRcXHQ9IGRzYV9sb29wX3NldHVwLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNzpcXHQudGVhcmRvd25cXHRcXHQ9IGRzYV9sb29wX3RlYXJkb3duLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzODpcXHQuZ2V0X3N0cmluZ3NcXHRcXHQ9IGRzYV9sb29wX2dldF9zdHJpbmdzLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzOTpcXHQuZ2V0X2V0aHRvb2xfc3RhdHNcXHQ9IGRzYV9sb29wX2dldF9ldGh0b29sX3N0YXRzLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0MDpcXHQuZ2V0X3NzZXRfY291bnRcXHRcXHQ9IGRzYV9sb29wX2dldF9zc2V0X2NvdW50LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0MTpcXHQuZ2V0X2V0aHRvb2xfcGh5X3N0YXRzXFx0PSBkc2FfbG9vcF9nZXRfZXRodG9vbF9zdGF0cyxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDI6XFx0LnBoeV9yZWFkXFx0XFx0PSBkc2FfbG9vcF9waHlfcmVhZCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDM6XFx0LnBoeV93cml0ZVxcdFxcdD0gZHNhX2xvb3BfcGh5X3dyaXRlLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NDpcXHQucG9ydF9icmlkZ2Vfam9pblxcdD0gZHNhX2xvb3BfcG9ydF9icmlkZ2Vfam9pbixcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDU6XFx0LnBvcnRfYnJpZGdlX2xlYXZlXFx0PSBkc2FfbG9vcF9wb3J0X2JyaWRnZV9sZWF2ZSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDY6XFx0LnBvcnRfc3RwX3N0YXRlX3NldFxcdD0gZHNhX2xvb3BfcG9ydF9zdHBfc3RhdGVfc2V0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NzpcXHQucG9ydF92bGFuX2ZpbHRlcmluZ1xcdD0gZHNhX2xvb3BfcG9ydF92bGFuX2ZpbHRlcmluZyxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDg6XFx0LnBvcnRfdmxhbl9hZGRcXHRcXHQ9IGRzYV9sb29wX3BvcnRfdmxhbl9hZGQsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQ5OlxcdC5wb3J0X3ZsYW5fZGVsXFx0XFx0PSBkc2FfbG9vcF9wb3J0X3ZsYW5fZGVsLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1MDpcXHQucG9ydF9jaGFuZ2VfbXR1XFx0PSBkc2FfbG9vcF9wb3J0X2NoYW5nZV9tdHUsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzUxOlxcdC5wb3J0X21heF9tdHVcXHRcXHQ9IGRzYV9sb29wX3BvcnRfbWF4X210dSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTI6XFx0LnBoeWxpbmtfZ2V0X2NhcHNcXHQ9IGRzYV9sb29wX3BoeWxpbmtfZ2V0X2NhcHMsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzUzLX07XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1NTpzdGF0aWMgaW50IGRzYV9sb29wX2Rydl9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU2LXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTc6XFx0c3RydWN0IGRzYV9sb29wX3BkYXRhICpwZGF0YSA9IG1kaW9kZXYtXFx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1ODpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHM7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU5LVxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM4Mi1cXHRkcy1cXHUwMDNlZGV2ID0gXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozODM6XFx0ZHMtXFx1MDAzZW9wcyA9IFxcdTAwMjZkc2FfbG9vcF9kcml2ZXI7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzg0LVxcdGRzLVxcdTAwM2Vwcml2ID0gcHM7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zOTYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Mzk3OnN0YXRpYyB2b2lkIGRzYV9sb29wX2Rydl9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM5OC17XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzk5LVxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRldl9nZXRfZHJ2ZGF0YShcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MDA6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQwMS1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQxMC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MTE6c3RhdGljIHZvaWQgZHNhX2xvb3BfZHJ2X3NodXRkb3duKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MTIte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDIyLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQyMzpzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIGRzYV9sb29wX2RydiA9IHtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjQtXFx0Lm1kaW9kcnYuZHJpdmVyXFx0PSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjYtXFx0fSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Mjc6XFx0LnByb2JlXFx0PSBkc2FfbG9vcF9kcnZfcHJvYmUsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDI4OlxcdC5yZW1vdmVcXHQ9IGRzYV9sb29wX2Rydl9yZW1vdmUsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDI5OlxcdC5zaHV0ZG93biA9IGRzYV9sb29wX2Rydl9zaHV0ZG93bixcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzAtfTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzEtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDMyOnN0YXRpYyBpbnQgZHNhX2xvb3BfYnVzX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzMtXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydilcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzQte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQzNTpcXHRyZXR1cm4gZHJ2ID09IFxcdTAwMjZkc2FfbG9vcF9kcnYubWRpb2Rydi5kcml2ZXI7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDM2LX1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzctXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDM4OnN0YXRpYyB2b2lkIGRzYV9sb29wX3BoeWRldnNfdW5yZWdpc3Rlcih2b2lkKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQzOS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NDUtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDQ2OnN0YXRpYyBpbnQgX19pbml0IGRzYV9sb29wX2NyZWF0ZV9zd2l0Y2hfbWRpb2Rldih2b2lkKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ0Ny17XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDQ4OlxcdHN0YXRpYyBzdHJ1Y3QgZHNhX2xvb3BfcGRhdGEgZHNhX2xvb3BfcGRhdGEgPSB7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDQ5LVxcdFxcdC5jZCA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3MC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NzE6XFx0c3dpdGNoX21kaW9kZXYtXFx1MDAzZWJ1c19tYXRjaCA9IGRzYV9sb29wX2J1c19tYXRjaDtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NzI6XFx0c3dpdGNoX21kaW9kZXYtXFx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhID0gXFx1MDAyNmRzYV9sb29wX3BkYXRhO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3My1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4MS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0ODI6c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfaW5pdCh2b2lkKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4My17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00ODYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDg3OlxcdHJldCA9IGRzYV9sb29wX2NyZWF0ZV9zd2l0Y2hfbWRpb2RldigpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4OC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDkzLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5NDpcXHRyZXQgPSBtZGlvX2RyaXZlcl9yZWdpc3RlcihcXHUwMDI2ZHNhX2xvb3BfZHJ2KTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTUtXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5NjpcXHRcXHRkc2FfbG9vcF9waHlkZXZzX3VucmVnaXN0ZXIoKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTctXFx0XFx0bWRpb19kZXZpY2VfcmVtb3ZlKHN3aXRjaF9tZGlvZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwMi19XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTAzOm1vZHVsZV9pbml0KGRzYV9sb29wX2luaXQpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwNC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MDU6c3RhdGljIHZvaWQgX19leGl0IGRzYV9sb29wX2V4aXQodm9pZClcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MDYte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwNzpcXHRtZGlvX2RyaXZlcl91bnJlZ2lzdGVyKFxcdTAwMjZkc2FfbG9vcF9kcnYpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwODpcXHRkc2FfbG9vcF9waHlkZXZzX3VucmVnaXN0ZXIoKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MDktXFx0bWRpb19kZXZpY2VfcmVtb3ZlKHN3aXRjaF9tZGlvZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxMS19XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTEyOm1vZHVsZV9leGl0KGRzYV9sb29wX2V4aXQpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjM6MDY6MDUuMTY2MTM0NzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjQ1NjE4MDcwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBLU1o4NDYzIERyaXZlciBQYXRjaCBmb3IgRnV6emluZyBGZWFzaWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCwgYWRkaW5nIHN1cHBvcnQgZm9yIHRoZSBNaWNyb2NoaXAgS1NaODQ2MyBEU0Egc3dpdGNoLCBpcyBzb21ldGhpbmcgd2UgY2FuIGV2ZW4gdG91Y2ggd2l0aGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4gVGhlIGBkc2FfbG9vcGAgZnVuY3Rpb24gYW5kIGhvdyBpdCB1c2VzIHRoZSBEU0EgdGFnIHByb3RvY29sIGlzIHRoZSBmaXJzdCBwbGFjZSBJIHN0YXJ0LiBJIGtub3cgYGRzYV9sb29wX2dldF9wcm90b2NvbGAgaXMgaW52b2x2ZWQsIGFuZCBJIGltbWVkaWF0ZWx5IGNoZWNrIGlmIGl0J3MgY29uZmlndXJhYmxlIHRvIHVzZSBgRFNBX1RBR19QUk9UT19LU1o4NDYzYC4gTm9wZSwgaXQncyBoYXJkY29kZWQgdG8gYERTQV9UQUdfUFJPVE9fTk9ORWAuIFNvIHRoYXQncyBhIGRlYWQgZW5kLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRyaWdnZXJzIGBrc3o4NDYzX3htaXRgIG9yIGBrc3o4NDYzX3JjdmAuIFRoZXkgcmVseSBvbiB0aGUgRFNBIHRhZ2dlci4gVGhlIHRhZ2dlciBhdHRhY2hlcyB0byBhIG5ldHdvcmsgZGV2aWNlICpvbmx5KiBpZiBhIERTQSBzd2l0Y2ggcmVxdWVzdHMgaXQuICBTaW5jZSBRRU1VIGRvZXNuJ3QgZW11bGF0ZSB0aGUgS1NaODQ2MyBzd2l0Y2gsIHRoZSBkcml2ZXIncyBgcHJvYmVgIGZ1bmN0aW9uIHdvbid0IHN1Y2NlZWQuIFRoZSBzd2l0Y2ggd29uJ3QgcmVnaXN0ZXIsIGFuZCB0aGUgdGFnZ2VyIHdpbGwgbmV2ZXIgYmUgdXNlZC4gVGhhdCdzIGEgcHJldHR5IHN0cm9uZyBpbmRpY2F0b3IgdGhhdCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBRRU1VIHNldHVwLlxuXG5Db3VsZCBzeXprYWxsZXIgaW5qZWN0IHNvbWV0aGluZz8gQSBmYWtlIGRldmljZSB0cmVlIG5vZGUsIG1heWJlLCBvciB1c2UgYHN5el9kZXZtZW1gIHRvIGZha2UgdGhlIFNQSS9NRElPIGRldmljZT8gIE5vdCBsaWtlbHkuIFN5emthbGxlciBkb2Vzbid0IGhhdmUgYSBnb29kIGdlbmVyaWMgd2F5IHRvIGZha2UgU1BJL0kyQyBkZXZpY2VzIHByb2JlZCB2aWEgZGV2aWNlIHRyZWUgdW5sZXNzIGEgc3BlY2lmaWMgYHN5el9gIHBzZXVkby1zeXNjYWxsIGV4aXN0cywgYW5kIHRoZXJlJ3Mgbm8gc3VjaCB0aGluZyBmb3IgdGhpcy5cblxuQW5kIHRoZSBwcm9tcHQgZXhwbGljaXRseSBjYWxscyBvdXQgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoIGRyaXZlcnMsIFNtYXJ0TklDcywgb3IgR1BVcyByZXF1aXJpbmcgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgKlNQSS9NRElPKiBzd2l0Y2ggZHJpdmVyLiBJdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhpcyBmYWxscyByaWdodCBpbnRvIHRoYXQgc2FtZSB1bnJlYWNoYWJsZSBjYXRlZ29yeS5cblxuQWxyaWdodCwgbGV0J3MgZG91YmxlLWNoZWNrLiBDYW4gYSBuZXRsaW5rIGNvbW1hbmQgc29tZWhvdyBjcmVhdGUgYSBkdW1teSBpbnRlcmZhY2UgYW5kIGF0dGFjaCB0aGUgRFNBIHRhZ2dlciB0byBpdD8gTm8sIHRoYXQncyBub3QgaG93IGl0IHdvcmtzLiBEU0EgdGFnZ2VycyBhcmUgbWFuYWdlZCBieSB0aGUgRFNBIGNvcmUsIGF0dGFjaGVkIHRvIHRoZSAqbWFzdGVyKiBuZXR3b3JrIGRldmljZSBvZiBhIERTQSBzd2l0Y2ggdHJlZS4gTm8gRFNBIHN3aXRjaCB0cmVlPyBObyB0YWdnZXIuIE5vIGRyaXZlciBwcm9iZSwgbm8gdHJlZS4gVGhlIEtTWjg0NjMgZHJpdmVyIHdvbid0IHByb2JlIHdpdGhvdXQgdGhlIGhhcmR3YXJlLlxuXG5MZXQncyBkbyBhIGNvbXBsZXRlIHN3ZWVwOiAgYGtzel9pcnFfYnVzX2xvY2tgIGFuZCBga3N6X2lycV9idXNfc3luY191bmxvY2tgIGFyZSBleHBvcnRlZCwgYnV0IG9ubHkgdXNlZCBieSB0aGUgS1NaIHN3aXRjaCBkcml2ZXJzLiBTYW1lIHdpdGggYGtzejg0NjNfZ2V0X3RzX2luZm9gLCBga3N6ODQ2M19od3RzdGFtcF9zZXRgLCBhbmQgYGtzejg0NjNfcHRwX2lycV9zZXR1cGAgLSBhbGwgcGFydCBvZiB0aGUgS1NaIGRyaXZlci4gQW5kIGBEU0FfVEFHX1BST1RPX0tTWjg0NjNgIGlzIGV4Y2x1c2l2ZWx5IGZvciB0aGF0IGRyaXZlci5cblxuU28sIHRoZSBlbnRpcmUgcGF0Y2ggaXMgaGFyZHdhcmUtc3BlY2lmaWMgYW5kIHVucmVhY2hhYmxlIGluIFFFTVUuIEknbSBnb2luZyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgYmVjYXVzZSBpdCdzIGEgaGFyZHdhcmUtc3BlY2lmaWMgRFNBIHN3aXRjaCBkcml2ZXIgKE1pY3JvY2hpcCBLU1o4NDYzKSBjb25uZWN0ZWQgdmlhIFNQSS9NRElPIHRoYXQgaXNuJ3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlLlxuXG5MZXQgbWUganVzdCBtYWtlIHN1cmUgdGhlIHJlYXNvbmluZyBpcyBjbGVhcjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgTWljcm9jaGlwIEtTWjg0NjMgRFNBIHN3aXRjaCwgaW5jbHVkaW5nIElSUSwgUFRQLCBhbmQgYSBuZXcgRFNBIHRhZyBwcm90b2NvbC4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciBmb3IgYW4gU1BJL01ESU8tY29ubmVjdGVkIHN3aXRjaCB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBXaXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSwgdGhlIGRyaXZlciBjYW5ub3QgcHJvYmUsIGFuZCB0aGUgYWRkZWQgY29kZSAoaW5jbHVkaW5nIHRoZSBEU0EgdGFnZ2VyKSBpcyB1bnJlYWNoYWJsZS5cIlxuXG5PbmUgbGFzdCBjaGVjay4gTGV0J3MgbWFrZSBzdXJlIEkgZGlkbid0IG1pc3MgYW55dGhpbmcuIFRoZSBwYXRjaCBtb2RpZmllcyBga3N6X2lycV9jb21tb25fc2V0dXBgIGluIGBrc3pfY29tbW9uLmNgIHRvIHRha2UgYW4gYG9wc2Agc3RydWN0IC0gdGhhdCdzIGp1c3QgYSByZWZhY3RvcmluZyAqZm9yKiB0aGUgS1NaIGRyaXZlci4gYGtzel9wdHAuY2AgaXMgYWxsIEtTWjg0NjMgc3BlY2lmaWMgUFRQIGZ1bmN0aW9ucywgYW5kIGB0YWdfa3N6LmNgIGhhcyBga3N6ODQ2M19uZXRkZXZfb3BzYCBhbmQgYGtzejg0NjNfeG1pdGAvYHJjdmAuXG5cbll1cCwgaXQncyBhbGwgc3RyaWN0bHkgdGllZCB0byB0aGUgS1NaODQ2MyBoYXJkd2FyZS4gSSdtIGNvbmZpZGVudC4gUmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mjg1NSwiT3V0cHV0VG9rZW5zIjoxMTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIzOjA2OjE3LjYyMjMxOTUxMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1pY3JvY2hpcCBLU1o4NDYzIERTQSBzd2l0Y2gsIGluY2x1ZGluZyBJUlEsIFBUUCwgYW5kIGEgbmV3IERTQSB0YWcgcHJvdG9jb2wuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgZm9yIGFuIFNQSS9NRElPLWNvbm5lY3RlZCBzd2l0Y2ggdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gV2l0aG91dCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUsIHRoZSBkcml2ZXIgY2Fubm90IHByb2JlLCBhbmQgdGhlIGFkZGVkIGNvZGUgKGluY2x1ZGluZyB0aGUgRFNBIHRhZ2dlcikgaXMgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNaWNyb2NoaXAgS1NaODQ2MyBEU0Egc3dpdGNoLCBpbmNsdWRpbmcgSVJRLCBQVFAsIGFuZCBhIG5ldyBEU0EgdGFnIHByb3RvY29sLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGZvciBhbiBTUEkvTURJTy1jb25uZWN0ZWQgc3dpdGNoIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFdpdGhvdXQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlLCB0aGUgZHJpdmVyIGNhbm5vdCBwcm9iZSwgYW5kIHRoZSBhZGRlZCBjb2RlIChpbmNsdWRpbmcgdGhlIERTQSB0YWdnZXIpIGlzIHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpvhmk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-27 22:45:53 +0000 UTC FinishedAt: 2026-07-27 23:06:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIzOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1pY3JvY2hpcCBLU1o4NDYzIERTQSBzd2l0Y2gsIGluY2x1ZGluZyBJUlEsIFBUUCwgYW5kIGEgbmV3IERTQSB0YWcgcHJvdG9jb2wuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgZm9yIGFuIFNQSS9NRElPLWNvbm5lY3RlZCBzd2l0Y2ggdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gV2l0aG91dCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUsIHRoZSBkcml2ZXIgY2Fubm90IHByb2JlLCBhbmQgdGhlIGFkZGVkIGNvZGUgKGluY2x1ZGluZyB0aGUgRFNBIHRhZ2dlcikgaXMgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIzOjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDNmYWViM2EwZjBhYjQyOWQ2NGNiZTM5NGNmZTlhZmQwZGIzNjhmM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDI3IDIzOjA1OjMwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmNcbmluZGV4IGM0Yzc2OTAyOGEyMGM5Li45NDFhZTlmNjZmNzBiYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguY1xuQEAgLTM2LDYgJiM0MzszNiwxMyBAQFxuICNpbmNsdWRlIFwmIzM0O2tzejhfcmVnLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc3o4LmhcJiMzNDtcbiBcbiYjNDM7LypcbiYjNDM7ICogV2UgdXNlIG9ubHkgdGhlIGhpZ2gtYnl0ZSAoc28gb2RkIGFkZHJlc3Nlcykgb2YgdGhlIDE2LWJpdHMgcmVnaXN0ZXJzIHRvIGZpdFxuJiM0MzsgKiBpbiB0aGUgY29tbW9uIElSUSBmcmFtZXdvcmtcbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgS1NaODQ2M19SRUdfSVNSXHRcdFx0MHgxOTFcbiYjNDM7I2RlZmluZSBLU1o4NDYzX1JFR19JRVJcdFx0XHQweDE5M1xuJiM0MztcbiAvKiBrc3o4OHgzX2RyaXZlX3N0cmVuZ3RocyAtIERyaXZlIHN0cmVuZ3RoIG1hcHBpbmcgZm9yIEtTWjg4NjMsIEtTWjg4NzMsIC4uXG4gICpcdFx0XHQgICAgIHZhcmlhbnRzLlxuICAqIFRoaXMgdmFsdWVzIGFyZSBkb2N1bWVudGVkIGluIEtTWjg4NzMgYW5kIEtTWjg4NjMgZGF0YXNoZWV0cy5cbkBAIC0xODEsNiAmIzQzOzE4OCw2OSBAQCBzdGF0aWMgaW50IGtzejhfcG1lX3B3cml0ZTgoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsIGludCBvZmZzZXQsIHU4IGRhdFxuIFx0cmV0dXJuIGtzejhfaW5kX3dyaXRlOChkZXYsIHRhYmxlLCAodTgpKG9mZnNldCksIGRhdGEpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQga3N6ODQ2M19pcnFfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3N6X2lycSAqa2lycSA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpO1xuJiM0MztcbiYjNDM7XHRraXJxLVx1MDAzZW1hc2tlZCBcdTAwMjY9IH5CSVQoZC1cdTAwM2Vod2lycSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGtzejg0NjNfaXJxX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3N6X2lycSAqa2lycSA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpO1xuJiM0MztcbiYjNDM7XHRraXJxLVx1MDAzZW1hc2tlZCB8PSBCSVQoZC1cdTAwM2Vod2lycSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXJxX2NoaXAga3N6ODQ2M19pcnFfY2hpcCA9IHtcbiYjNDM7XHQubmFtZVx0XHRcdD0gXCYjMzQ7a3N6ODQ2My1pcnFcJiMzNDssXG4mIzQzO1x0LmlycV9tYXNrXHRcdD0ga3N6ODQ2M19pcnFfbWFzayxcbiYjNDM7XHQuaXJxX3VubWFza1x0XHQ9IGtzejg0NjNfaXJxX3VubWFzayxcbiYjNDM7XHQuaXJxX2J1c19sb2NrXHRcdD0ga3N6X2lycV9idXNfbG9jayxcbiYjNDM7XHQuaXJxX2J1c19zeW5jX3VubG9ja1x0PSBrc3pfaXJxX2J1c19zeW5jX3VubG9jayxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQga3N6ODQ2M19pcnFfZG9tYWluX21hcChzdHJ1Y3QgaXJxX2RvbWFpbiAqZCxcbiYjNDM7XHRcdFx0XHQgIHVuc2lnbmVkIGludCBpcnEsIGlycV9od19udW1iZXJfdCBod2lycSlcbiYjNDM7e1xuJiM0MztcdGlycV9zZXRfY2hpcF9kYXRhKGlycSwgZC1cdTAwM2Vob3N0X2RhdGEpO1xuJiM0MztcdGlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsIFx1MDAyNmtzejg0NjNfaXJxX2NoaXAsIGhhbmRsZV9sZXZlbF9pcnEpO1xuJiM0MztcdGlycV9zZXRfbm9wcm9iZShpcnEpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBrc3o4NDYzX2lycV9kb21haW5fb3BzID0ge1xuJiM0MztcdC5tYXBcdD0ga3N6ODQ2M19pcnFfZG9tYWluX21hcCxcbiYjNDM7XHQueGxhdGVcdD0gaXJxX2RvbWFpbl94bGF0ZV90d29jZWxsLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBrc3o4NDYzX2dpcnFfc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrc3pfaXJxICpnaXJxID0gXHUwMDI2ZGV2LVx1MDAzZWdpcnE7XG4mIzQzO1xuJiM0MztcdGdpcnEtXHUwMDNlbmlycXMgPSA4O1xuJiM0MztcdGdpcnEtXHUwMDNlcmVnX21hc2sgPSBLU1o4NDYzX1JFR19JRVI7XG4mIzQzO1x0Z2lycS1cdTAwM2VyZWdfc3RhdHVzID0gS1NaODQ2M19SRUdfSVNSO1xuJiM0MztcdGdpcnEtXHUwMDNlbWFza2VkID0gMDtcbiYjNDM7XHRzbnByaW50ZihnaXJxLVx1MDAzZW5hbWUsIHNpemVvZihnaXJxLVx1MDAzZW5hbWUpLCBcJiMzNDtrc3o4NDYzLWdpcnFcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRnaXJxLVx1MDAzZWlycV9udW0gPSBkZXYtXHUwMDNlaXJxO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4ga3N6X2lycV9jb21tb25fc2V0dXAoZGV2LCBnaXJxLCBcdTAwMjZrc3o4NDYzX2lycV9kb21haW5fb3BzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBrc3o4NDYzX3Jlc2V0X3N3aXRjaChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0a3N6X2NmZyhkZXYsIEtTWjg0NjNfUkVHX1NXX1JFU0VULFxuJiM0MztcdFx0S1NaODQ2M19HTE9CQUxfU09GVFdBUkVfUkVTRVQgfCBLU1o4NDYzX1BUUF9TT0ZUV0FSRV9SRVNFVCxcbiYjNDM7XHRcdHRydWUpO1xuJiM0MztcdGtzel9jZmcoZGV2LCBLU1o4NDYzX1JFR19TV19SRVNFVCxcbiYjNDM7XHRcdEtTWjg0NjNfR0xPQkFMX1NPRlRXQVJFX1JFU0VUIHwgS1NaODQ2M19QVFBfU09GVFdBUkVfUkVTRVQsXG4mIzQzO1x0XHRmYWxzZSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBrc3o4X3Jlc2V0X3N3aXRjaChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuIHtcbiBcdGlmIChrc3pfaXNfa3N6ODh4MyhkZXYpKSB7XG5AQCAtMTg5LDExICYjNDM7MjU5LDYgQEAgc3RhdGljIGludCBrc3o4X3Jlc2V0X3N3aXRjaChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuIFx0XHRcdEtTWjg4NjNfR0xPQkFMX1NPRlRXQVJFX1JFU0VUIHwgS1NaODg2M19QQ1NfUkVTRVQsIHRydWUpO1xuIFx0XHRrc3pfY2ZnKGRldiwgS1NaODg2M19SRUdfU1dfUkVTRVQsXG4gXHRcdFx0S1NaODg2M19HTE9CQUxfU09GVFdBUkVfUkVTRVQgfCBLU1o4ODYzX1BDU19SRVNFVCwgZmFsc2UpO1xuLVx0fSBlbHNlIGlmIChrc3pfaXNfa3N6ODQ2MyhkZXYpKSB7XG4tXHRcdGtzel9jZmcoZGV2LCBLU1o4NDYzX1JFR19TV19SRVNFVCxcbi1cdFx0XHRLU1o4NDYzX0dMT0JBTF9TT0ZUV0FSRV9SRVNFVCwgdHJ1ZSk7XG4tXHRcdGtzel9jZmcoZGV2LCBLU1o4NDYzX1JFR19TV19SRVNFVCxcbi1cdFx0XHRLU1o4NDYzX0dMT0JBTF9TT0ZUV0FSRV9SRVNFVCwgZmFsc2UpO1xuIFx0fSBlbHNlIHtcbiBcdFx0LyogcmVzZXQgc3dpdGNoICovXG4gXHRcdGtzel93cml0ZTgoZGV2LCBSRUdfUE9XRVJfTUFOQUdFTUVOVF8xLFxuQEAgLTIwMjYsNiAmIzQzOzIwOTEsNTAgQEAgc3RhdGljIHZvaWQga3N6ODh4M19jb25maWdfcm1paV9jbGsoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbiBcdFx0S1NaODhYM19QT1JUM19STUlJX0NMS19JTlRFUk5BTCwgcm1paV9jbGtfaW50ZXJuYWwpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQga3N6ODQ2M19jb25maWdfY3B1X3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4mIzQzO1x0c3RydWN0IGtzel9wb3J0ICpwO1xuJiM0MztcdHU4IGZpYmVyX3BvcnRzID0gMDtcbiYjNDM7XHRjb25zdCB1MzIgKm1hc2tzO1xuJiM0MztcdGNvbnN0IHUxNiAqcmVncztcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0bWFza3MgPSBkZXYtXHUwMDNlaW5mby1cdTAwM2VtYXNrcztcbiYjNDM7XHRyZWdzID0gZGV2LVx1MDAzZWluZm8tXHUwMDNlcmVncztcbiYjNDM7XG4mIzQzO1x0a3N6X2NmZyhkZXYsIHJlZ3NbU19UQUlMX1RBR19DVFJMXSwgbWFza3NbU1dfVEFJTF9UQUdfRU5BQkxFXSwgdHJ1ZSk7XG4mIzQzO1xuJiM0MztcdGtzejhfcG9ydF9zZXR1cChkZXYsIGRldi1cdTAwM2VjcHVfcG9ydCwgdHJ1ZSk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldi1cdTAwM2VwaHlfcG9ydF9jbnQ7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0a3N6X3BvcnRfc3RwX3N0YXRlX3NldChkcywgaSwgQlJfU1RBVEVfRElTQUJMRUQpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXYtXHUwMDNlcGh5X3BvcnRfY250OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cCA9IFx1MDAyNmRldi1cdTAwM2Vwb3J0c1tpXTtcbiYjNDM7XHRcdGtzel9wb3J0X2NmZyhkZXYsIGksIHJlZ3NbUF9TVFBfQ1RSTF0sIFBPUlRfRk9SQ0VfRkxPV19DVFJMLFxuJiM0MztcdFx0XHQgICAgIHAtXHUwMDNlZmliZXIpO1xuJiM0MztcdFx0aWYgKHAtXHUwMDNlZmliZXIpXG4mIzQzO1x0XHRcdGZpYmVyX3BvcnRzIHw9ICgxIFx1MDAzY1x1MDAzYyBpKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFNldHVwIGZpYmVyIHBvcnRzLiAqL1xuJiM0MztcdGlmIChmaWJlcl9wb3J0cykge1xuJiM0MztcdFx0ZmliZXJfcG9ydHMgXHUwMDI2PSAzO1xuJiM0MztcdFx0cmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSwgS1NaODQ2M19SRUdfQ0ZHX0NUUkwsXG4mIzQzO1x0XHRcdFx0ICAgZmliZXJfcG9ydHMgXHUwMDNjXHUwMDNjIFBPUlRfQ09QUEVSX01PREVfUyxcbiYjNDM7XHRcdFx0XHQgICAwKTtcbiYjNDM7XHRcdHJlZ21hcF91cGRhdGVfYml0cyhrc3pfcmVnbWFwXzE2KGRldiksIEtTWjg0NjNfUkVHX0RTUF9DVFJMXzYsXG4mIzQzO1x0XHRcdFx0ICAgQ09QUEVSX1JFQ0VJVkVfQURKVVNUTUVOVCwgMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBUdXJuIG9mZiBQVFAgZnVuY3Rpb24gYXMgdGhlIHN3aXRjaCBlbmFibGVzIGl0IGJ5IGRlZmF1bHQgKi9cbiYjNDM7XHRyZWdtYXBfdXBkYXRlX2JpdHMoa3N6X3JlZ21hcF8xNihkZXYpLCBLU1o4NDYzX1BUUF9NU0dfQ09ORjEsXG4mIzQzO1x0XHRcdCAgIFBUUF9FTkFCTEUsIDApO1xuJiM0MztcdHJlZ21hcF91cGRhdGVfYml0cyhrc3pfcmVnbWFwXzE2KGRldiksIEtTWjg0NjNfUFRQX0NMS19DVFJMLFxuJiM0MztcdFx0XHQgICBQVFBfQ0xLX0VOQUJMRSwgMCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQga3N6OF9jb25maWdfY3B1X3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIHtcbiBcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuQEAgLTIwMzMsNyAmIzQzOzIxNDIsNiBAQCBzdGF0aWMgdm9pZCBrc3o4X2NvbmZpZ19jcHVfcG9ydChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRjb25zdCB1MzIgKm1hc2tzO1xuIFx0Y29uc3QgdTE2ICpyZWdzO1xuIFx0dTggcmVtb3RlO1xuLVx0dTggZmliZXJfcG9ydHMgPSAwO1xuIFx0aW50IGk7XG4gXG4gXHRtYXNrcyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZW1hc2tzO1xuQEAgLTIwNjQsMzIgJiM0MzsyMTcyLDYgQEAgc3RhdGljIHZvaWQga3N6OF9jb25maWdfY3B1X3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0XHRlbHNlXG4gXHRcdFx0a3N6X3BvcnRfY2ZnKGRldiwgaSwgcmVnc1tQX1NUUF9DVFJMXSxcbiBcdFx0XHRcdCAgICAgUE9SVF9GT1JDRV9GTE9XX0NUUkwsIGZhbHNlKTtcbi1cdFx0aWYgKHAtXHUwMDNlZmliZXIpXG4tXHRcdFx0ZmliZXJfcG9ydHMgfD0gKDEgXHUwMDNjXHUwMDNjIGkpO1xuLVx0fVxuLVx0aWYgKGtzel9pc19rc3o4NDYzKGRldikpIHtcbi1cdFx0LyogU2V0dXAgZmliZXIgcG9ydHMuICovXG4tXHRcdGlmIChmaWJlcl9wb3J0cykge1xuLVx0XHRcdGZpYmVyX3BvcnRzIFx1MDAyNj0gMztcbi1cdFx0XHRyZWdtYXBfdXBkYXRlX2JpdHMoa3N6X3JlZ21hcF8xNihkZXYpLFxuLVx0XHRcdFx0XHQgICBLU1o4NDYzX1JFR19DRkdfQ1RSTCxcbi1cdFx0XHRcdFx0ICAgZmliZXJfcG9ydHMgXHUwMDNjXHUwMDNjIFBPUlRfQ09QUEVSX01PREVfUyxcbi1cdFx0XHRcdFx0ICAgMCk7XG4tXHRcdFx0cmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSxcbi1cdFx0XHRcdFx0ICAgS1NaODQ2M19SRUdfRFNQX0NUUkxfNixcbi1cdFx0XHRcdFx0ICAgQ09QUEVSX1JFQ0VJVkVfQURKVVNUTUVOVCwgMCk7XG4tXHRcdH1cbi1cbi1cdFx0LyogVHVybiBvZmYgUFRQIGZ1bmN0aW9uIGFzIHRoZSBzd2l0Y2gmIzM5O3MgcHJvcHJpZXRhcnkgd2F5IG9mXG4tXHRcdCAqIGhhbmRsaW5nIHRpbWVzdGFtcCBpcyBub3Qgc3VwcG9ydGVkIGluIGN1cnJlbnQgTGludXggUFRQXG4tXHRcdCAqIHN0YWNrIGltcGxlbWVudGF0aW9uLlxuLVx0XHQgKi9cbi1cdFx0cmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSxcbi1cdFx0XHRcdCAgIEtTWjg0NjNfUFRQX01TR19DT05GMSxcbi1cdFx0XHRcdCAgIFBUUF9FTkFCTEUsIDApO1xuLVx0XHRyZWdtYXBfdXBkYXRlX2JpdHMoa3N6X3JlZ21hcF8xNihkZXYpLFxuLVx0XHRcdFx0ICAgS1NaODQ2M19QVFBfQ0xLX0NUUkwsXG4tXHRcdFx0XHQgICBQVFBfQ0xLX0VOQUJMRSwgMCk7XG4gXHR9XG4gfVxuIFxuQEAgLTIzMDAsNiAmIzQzOzIzODIsMTUwIEBAIHN0YXRpYyB2b2lkIGtzejg4eHhfcl9taWJfc3RhdHM2NChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNm1pYi1cdTAwM2VzdGF0czY0X2xvY2spO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBrc3o4NDYzX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuJiM0MztcdHUxNiBzdG9ybV9tYXNrLCBzdG9ybV9yYXRlO1xuJiM0MztcdHN0cnVjdCBrc3pfcG9ydCAqcDtcbiYjNDM7XHRjb25zdCB1MTYgKnJlZ3M7XG4mIzQzO1x0aW50IGksIHJldDtcbiYjNDM7XG4mIzQzO1x0cmVncyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZXJlZ3M7XG4mIzQzO1xuJiM0MztcdGRldi1cdTAwM2V2bGFuX2NhY2hlID0gZGV2bV9rY2FsbG9jKGRldi1cdTAwM2VkZXYsIHNpemVvZihzdHJ1Y3Qgdmxhbl90YWJsZSksXG4mIzQzO1x0XHRcdFx0ICAgICAgIGRldi1cdTAwM2VpbmZvLVx1MDAzZW51bV92bGFucywgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFkZXYtXHUwMDNldmxhbl9jYWNoZSlcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrc3o4NDYzX3Jlc2V0X3N3aXRjaChkZXYpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoZHMtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gcmVzZXQgc3dpdGNoXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBzZXQgYnJvYWRjYXN0IHN0b3JtIHByb3RlY3Rpb24gMTAlIHJhdGUgKi9cbiYjNDM7XHRzdG9ybV9tYXNrID0gQlJPQURDQVNUX1NUT1JNX1JBVEU7XG4mIzQzO1x0c3Rvcm1fcmF0ZSA9IChCUk9BRENBU1RfU1RPUk1fVkFMVUUgKiBCUk9BRENBU1RfU1RPUk1fUFJPVF9SQVRFKSAvIDEwMDtcbiYjNDM7XHRzdG9ybV9tYXNrID0gc3dhYjE2KHN0b3JtX21hc2spO1xuJiM0MztcdHN0b3JtX3JhdGUgPSBzd2FiMTYoc3Rvcm1fcmF0ZSk7XG4mIzQzO1x0cmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSwgcmVnc1tTX0JST0FEQ0FTVF9DVFJMXSxcbiYjNDM7XHRcdFx0ICAgc3Rvcm1fbWFzaywgc3Rvcm1fcmF0ZSk7XG4mIzQzO1xuJiM0MztcdGtzejg0NjNfY29uZmlnX2NwdV9wb3J0KGRzKTtcbiYjNDM7XG4mIzQzO1x0a3N6OF9lbmFibGVfc3RwX2FkZHIoZGV2KTtcbiYjNDM7XG4mIzQzO1x0ZHMtXHUwMDNlbnVtX3R4X3F1ZXVlcyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZW51bV90eF9xdWV1ZXM7XG4mIzQzO1xuJiM0MztcdHJlZ21hcF91cGRhdGVfYml0cyhrc3pfcmVnbWFwXzgoZGV2KSwgcmVnc1tTX01VTFRJQ0FTVF9DVFJMXSxcbiYjNDM7XHRcdFx0ICAgTVVMVElDQVNUX1NUT1JNX0RJU0FCTEUsIE1VTFRJQ0FTVF9TVE9STV9ESVNBQkxFKTtcbiYjNDM7XG4mIzQzO1x0a3N6X2luaXRfbWliX3RpbWVyKGRldik7XG4mIzQzO1xuJiM0MztcdGRzLVx1MDAzZWNvbmZpZ3VyZV92bGFuX3doaWxlX25vdF9maWx0ZXJpbmcgPSBmYWxzZTtcbiYjNDM7XHRkcy1cdTAwM2Vkc2NwX3ByaW9fbWFwcGluZ19pc19nbG9iYWwgPSB0cnVlO1xuJiM0MztcdGRzLVx1MDAzZW10dV9lbmZvcmNlbWVudF9pbmdyZXNzID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0LyogV2UgcmVseSBvbiBzb2Z0d2FyZSB1bnRhZ2dpbmcgb24gdGhlIENQVSBwb3J0LCBzbyB0aGF0IHdlXG4mIzQzO1x0ICogY2FuIHN1cHBvcnQgYm90aCB0YWdnZWQgYW5kIHVudGFnZ2VkIFZMQU5zXG4mIzQzO1x0ICovXG4mIzQzO1x0ZHMtXHUwMDNldW50YWdfYnJpZGdlX3B2aWQgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHQvKiBWTEFOIGZpbHRlcmluZyBpcyBwYXJ0bHkgY29udHJvbGxlZCBieSB0aGUgZ2xvYmFsIFZMQU5cbiYjNDM7XHQgKiBFbmFibGUgZmxhZ1xuJiM0MztcdCAqL1xuJiM0MztcdGRzLVx1MDAzZXZsYW5fZmlsdGVyaW5nX2lzX2dsb2JhbCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdC8qIEVuYWJsZSBhdXRvbWF0aWMgZmFzdCBhZ2luZyB3aGVuIGxpbmsgY2hhbmdlZCBkZXRlY3RlZC4gKi9cbiYjNDM7XHRrc3pfY2ZnKGRldiwgU19MSU5LX0FHSU5HX0NUUkwsIFNXX0xJTktfQVVUT19BR0lORywgdHJ1ZSk7XG4mIzQzO1xuJiM0MztcdC8qIEVuYWJsZSBhZ2dyZXNzaXZlIGJhY2sgb2ZmIGFsZ29yaXRobSBpbiBoYWxmIGR1cGxleCBtb2RlLiAqL1xuJiM0MztcdHJldCA9IGtzel9ybXc4KGRldiwgUkVHX1NXX0NUUkxfMSwgU1dfQUdHUl9CQUNLT0ZGLCBTV19BR0dSX0JBQ0tPRkYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE1ha2Ugc3VyZSB1bmljYXN0IFZMQU4gYm91bmRhcnkgaXMgc2V0IGFzIGRlZmF1bHQgYW5kXG4mIzQzO1x0ICogZW5hYmxlIG5vIGV4Y2Vzc2l2ZSBjb2xsaXNpb24gZHJvcC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXQgPSBrc3pfcm13OChkZXYsIFJFR19TV19DVFJMXzIsXG4mIzQzO1x0XHQgICAgICAgVU5JQ0FTVF9WTEFOX0JPVU5EQVJZIHwgTk9fRVhDX0NPTExJU0lPTl9EUk9QLFxuJiM0MztcdFx0ICAgICAgIFVOSUNBU1RfVkxBTl9CT1VOREFSWSB8IE5PX0VYQ19DT0xMSVNJT05fRFJPUCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGtzel9jZmcoZGV2LCBTX1JFUExBQ0VfVklEX0NUUkwsIFNXX1JFUExBQ0VfVklELCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdGtzel9jZmcoZGV2LCBTX01JUlJPUl9DVFJMLCBTV19NSVJST1JfUlhfVFgsIGZhbHNlKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgKGRldi1cdTAwM2VpbmZvLVx1MDAzZW51bV92bGFucyAvIDQpOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGtzejhfcl92bGFuX2VudHJpZXMoZGV2LCBpKTtcbiYjNDM7XG4mIzQzO1x0LyogU3RhcnQgd2l0aCBsZWFybmluZyBkaXNhYmxlZCBvbiBzdGFuZGFsb25lIHVzZXIgcG9ydHMsIGFuZCBlbmFibGVkXG4mIzQzO1x0ICogb24gdGhlIENQVSBwb3J0LiBJbiBsYWNrIG9mIG90aGVyIGZpbmVyIG1lY2hhbmlzbXMsIGxlYXJuaW5nIG9uIHRoZVxuJiM0MztcdCAqIENQVSBwb3J0IHdpbGwgYXZvaWQgZmxvb2RpbmcgYnJpZGdlIGxvY2FsIGFkZHJlc3NlcyBvbiB0aGUgbmV0d29ya1xuJiM0MztcdCAqIGluIHNvbWUgY2FzZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0cCA9IFx1MDAyNmRldi1cdTAwM2Vwb3J0c1tkZXYtXHUwMDNlY3B1X3BvcnRdO1xuJiM0MztcdHAtXHUwMDNlbGVhcm5pbmcgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRpZiAoZGV2LVx1MDAzZWlycSBcdTAwM2UgMCkge1xuJiM0MztcdFx0cmV0ID0ga3N6ODQ2M19naXJxX3NldHVwKGRldik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IGtzejg0NjNfcHRwX2lycV9zZXR1cChkcyk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIGZyZWVfZ2lycTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKGRzKTtcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRyZXQpO1xuJiM0MztcdFx0XHRnb3RvIGZyZWVfcHRwX2lycTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGtzel9tZGlvX3JlZ2lzdGVyKGRldik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMCkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgdGhlIG1kaW9cJiMzNDspO1xuJiM0MztcdFx0Z290byBwdHBfY2xvY2tfdW5yZWdpc3RlcjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGtzel9kY2JfaW5pdChkZXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIHB0cF9jbG9ja191bnJlZ2lzdGVyO1xuJiM0MztcbiYjNDM7XHQvKiBzdGFydCBzd2l0Y2ggKi9cbiYjNDM7XHRyZWdtYXBfdXBkYXRlX2JpdHMoa3N6X3JlZ21hcF84KGRldiksIHJlZ3NbU19TVEFSVF9DVFJMXSxcbiYjNDM7XHRcdFx0ICAgU1dfU1RBUlQsIFNXX1NUQVJUKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztwdHBfY2xvY2tfdW5yZWdpc3RlcjpcbiYjNDM7XHRpZiAoZGV2LVx1MDAzZWlycSBcdTAwM2UgMClcbiYjNDM7XHRcdGtzel9wdHBfY2xvY2tfdW5yZWdpc3Rlcihkcyk7XG4mIzQzO2ZyZWVfcHRwX2lycTpcbiYjNDM7XHRpZiAoZGV2LVx1MDAzZWlycSBcdTAwM2UgMClcbiYjNDM7XHRcdGtzejg0NjNfcHRwX2lycV9mcmVlKGRzKTtcbiYjNDM7ZnJlZV9naXJxOlxuJiM0MztcdGlmIChkZXYtXHUwMDNlaXJxIFx1MDAzZSAwKVxuJiM0MztcdFx0a3N6X2lycV9mcmVlKFx1MDAyNmRldi1cdTAwM2VnaXJxKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQga3N6ODQ2M190ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0aWYgKGRldi1cdTAwM2VpcnEgXHUwMDNlIDApIHtcbiYjNDM7XHRcdGtzel9wdHBfY2xvY2tfdW5yZWdpc3Rlcihkcyk7XG4mIzQzO1x0XHRrc3o4NDYzX3B0cF9pcnFfZnJlZShkcyk7XG4mIzQzO1x0XHRrc3pfaXJxX2ZyZWUoXHUwMDI2ZGV2LVx1MDAzZWdpcnEpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBrc3o4OHgzX2RyaXZlX3N0cmVuZ3RoX3dyaXRlKCkgLSBTZXQgdGhlIGRyaXZlIHN0cmVuZ3RoIGNvbmZpZ3VyYXRpb24gZm9yXG4gICpcdFx0XHRcdCAgICBLU1o4ODYzIGNvbXBhdGlibGUgY2hpcCB2YXJpYW50cy5cbkBAIC0yNDQ1LDEwICYjNDM7MjY3MSw2IEBAIHN0YXRpYyBpbnQga3N6OF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHQvKiBzZXQgYnJvYWRjYXN0IHN0b3JtIHByb3RlY3Rpb24gMTAlIHJhdGUgKi9cbiBcdHN0b3JtX21hc2sgPSBCUk9BRENBU1RfU1RPUk1fUkFURTtcbiBcdHN0b3JtX3JhdGUgPSAoQlJPQURDQVNUX1NUT1JNX1ZBTFVFICogQlJPQURDQVNUX1NUT1JNX1BST1RfUkFURSkgLyAxMDA7XG4tXHRpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSkge1xuLVx0XHRzdG9ybV9tYXNrID0gc3dhYjE2KHN0b3JtX21hc2spO1xuLVx0XHRzdG9ybV9yYXRlID0gc3dhYjE2KHN0b3JtX3JhdGUpO1xuLVx0fVxuIFx0cmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSwgcmVnc1tTX0JST0FEQ0FTVF9DVFJMXSxcbiBcdFx0XHQgICBzdG9ybV9tYXNrLCBzdG9ybV9yYXRlKTtcbiBcbkBAIC0yNDk5LDcgJiM0MzsyNzIxLDcgQEAgc3RhdGljIGludCBrc3o4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcbiBcdGtzel9jZmcoZGV2LCBTX01JUlJPUl9DVFJMLCBTV19NSVJST1JfUlhfVFgsIGZhbHNlKTtcbiBcbi1cdGlmICgha3N6X2lzX2tzejg4eDMoZGV2KSBcdTAwMjZcdTAwMjYgIWtzel9pc19rc3o4NDYzKGRldikpXG4mIzQzO1x0aWYgKCFrc3pfaXNfa3N6ODh4MyhkZXYpKVxuIFx0XHRrc3pfY2ZnKGRldiwgUkVHX1NXX0NUUkxfMTksIFNXX0lOU19UQUdfRU5BQkxFLCB0cnVlKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIChkZXYtXHUwMDNlaW5mby1cdTAwM2VudW1fdmxhbnMgLyA0KTsgaSYjNDM7JiM0MzspXG5AQCAtMjYyMyw2ICYjNDM7Mjg0NSw5IEBAIHN0YXRpYyB1MzIga3N6OF9nZXRfcG9ydF9hZGRyKGludCBwb3J0LCBpbnQgb2Zmc2V0KVxuIFxuIHN0YXRpYyB1MzIga3N6ODQ2M19nZXRfcG9ydF9hZGRyKGludCBwb3J0LCBpbnQgb2Zmc2V0KVxuIHtcbiYjNDM7XHRpZiAob2Zmc2V0IFx1MDAzZT0gS1NaODQ2M19QVFBfQ0xLX0NUUkwpXG4mIzQzO1x0XHRyZXR1cm4gb2Zmc2V0ICYjNDM7IDB4MjAgKiBwb3J0O1xuJiM0MztcbiBcdHJldHVybiBvZmZzZXQgJiM0MzsgMHgxOCAqIHBvcnQ7XG4gfVxuIFxuQEAgLTI3NTUsNyAmIzQzOzI5ODAsNyBAQCBzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGtzejg0NjNfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4gXHRcdFx0XHRcdFx0ICAgICAgaW50IHBvcnQsXG4gXHRcdFx0XHRcdFx0ICAgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIG1wKVxuIHtcbi1cdHJldHVybiBEU0FfVEFHX1BST1RPX0tTWjk4OTM7XG4mIzQzO1x0cmV0dXJuIERTQV9UQUdfUFJPVE9fS1NaODQ2MztcbiB9XG4gXG4gc3RhdGljIGludCBrc3o4NDYzX2Nvbm5lY3RfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbkBAIC0yNzYzLDcgJiM0MzsyOTg4LDcgQEAgc3RhdGljIGludCBrc3o4NDYzX2Nvbm5lY3RfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbiB7XG4gXHRzdHJ1Y3Qga3N6X3RhZ2dlcl9kYXRhICp0YWdnZXJfZGF0YTtcbiBcbi1cdGlmIChwcm90byAhPSBEU0FfVEFHX1BST1RPX0tTWjk4OTMpXG4mIzQzO1x0aWYgKHByb3RvICE9IERTQV9UQUdfUFJPVE9fS1NaODQ2MylcbiBcdFx0cmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7XG4gXG4gXHR0YWdnZXJfZGF0YSA9IGtzel90YWdnZXJfZGF0YShkcyk7XG5AQCAtMjg4OSw4ICYjNDM7MzExNCw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfZGV2X29wcyBrc3o4OHh4X2Rldl9vcHMgPSB7XG4gY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGtzejg0NjNfc3dpdGNoX29wcyA9IHtcbiBcdC5nZXRfdGFnX3Byb3RvY29sXHQ9IGtzejg0NjNfZ2V0X3RhZ19wcm90b2NvbCxcbiBcdC5jb25uZWN0X3RhZ19wcm90b2NvbCAgID0ga3N6ODQ2M19jb25uZWN0X3RhZ19wcm90b2NvbCxcbi1cdC5zZXR1cFx0XHRcdD0ga3N6OF9zZXR1cCxcbi1cdC50ZWFyZG93blx0XHQ9IGtzel90ZWFyZG93bixcbiYjNDM7XHQuc2V0dXBcdFx0XHQ9IGtzejg0NjNfc2V0dXAsXG4mIzQzO1x0LnRlYXJkb3duXHRcdD0ga3N6ODQ2M190ZWFyZG93bixcbiBcdC5waHlfcmVhZFx0XHQ9IGtzejg0NjNfcGh5X3JlYWQxNixcbiBcdC5waHlfd3JpdGVcdFx0PSBrc3o4NDYzX3BoeV93cml0ZTE2LFxuIFx0LnBoeWxpbmtfZ2V0X2NhcHNcdD0ga3N6OF9waHlsaW5rX2dldF9jYXBzLFxuQEAgLTI5MTgsOSAmIzQzOzMxNDMsOSBAQCBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODQ2M19zd2l0Y2hfb3BzID0ge1xuIFx0LnBvcnRfbWF4X210dVx0XHQ9IGtzejg4eHhfbWF4X210dSxcbiBcdC5zdXNwZW5kXHRcdD0ga3N6X3N1c3BlbmQsXG4gXHQucmVzdW1lXHRcdFx0PSBrc3pfcmVzdW1lLFxuLVx0LmdldF90c19pbmZvXHRcdD0ga3N6X2dldF90c19pbmZvLFxuJiM0MztcdC5nZXRfdHNfaW5mb1x0XHQ9IGtzejg0NjNfZ2V0X3RzX2luZm8sXG4gXHQucG9ydF9od3RzdGFtcF9nZXRcdD0ga3N6X2h3dHN0YW1wX2dldCxcbi1cdC5wb3J0X2h3dHN0YW1wX3NldFx0PSBrc3pfaHd0c3RhbXBfc2V0LFxuJiM0MztcdC5wb3J0X2h3dHN0YW1wX3NldFx0PSBrc3o4NDYzX2h3dHN0YW1wX3NldCxcbiBcdC5wb3J0X3R4dHN0YW1wXHRcdD0ga3N6X3BvcnRfdHh0c3RhbXAsXG4gXHQucG9ydF9yeHRzdGFtcFx0XHQ9IGtzel9wb3J0X3J4dHN0YW1wLFxuIFx0LnBvcnRfc2V0dXBfdGNcdFx0PSBrc3o4X3NldHVwX3RjLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OF9yZWcuaCBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OF9yZWcuaFxuaW5kZXggOTgxYWI0NDFkOWI3MTkuLjZiYzUxMWRhMWY3ZGRkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4X3JlZy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejhfcmVnLmhcbkBAIC03ODYsNiAmIzQzOzc4Niw3IEBAXG4gI2RlZmluZSBLU1o4NDYzX1JFR19TV19SRVNFVFx0XHQweDEyNlxuIFxuICNkZWZpbmUgS1NaODQ2M19HTE9CQUxfU09GVFdBUkVfUkVTRVRcdEJJVCgwKVxuJiM0MzsjZGVmaW5lIEtTWjg0NjNfUFRQX1NPRlRXQVJFX1JFU0VUXHRCSVQoMilcbiBcbiAjZGVmaW5lIEtTWjg0NjNfUFRQX0NMS19DVFJMXHRcdDB4NjAwXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uY1xuaW5kZXggNjdhYjZkZGI5ZTUzZjIuLmZmMWJlNTQwYjU0NmZhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jXG5AQCAtMjQxOSwxNCAmIzQzOzI0MTksMTQgQEAgc3RhdGljIHZvaWQga3N6X2lycV91bm1hc2soc3RydWN0IGlycV9kYXRhICpkKVxuIFx0a2lycS1cdTAwM2VtYXNrZWQgXHUwMDI2PSB+QklUKGQtXHUwMDNlaHdpcnEpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBrc3pfaXJxX2J1c19sb2NrKHN0cnVjdCBpcnFfZGF0YSAqZClcbiYjNDM7dm9pZCBrc3pfaXJxX2J1c19sb2NrKHN0cnVjdCBpcnFfZGF0YSAqZClcbiB7XG4gXHRzdHJ1Y3Qga3N6X2lycSAqa2lycSAgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2a2lycS1cdTAwM2VkZXYtXHUwMDNlbG9ja19pcnEpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBrc3pfaXJxX2J1c19zeW5jX3VubG9jayhzdHJ1Y3QgaXJxX2RhdGEgKmQpXG4mIzQzO3ZvaWQga3N6X2lycV9idXNfc3luY191bmxvY2soc3RydWN0IGlycV9kYXRhICpkKVxuIHtcbiBcdHN0cnVjdCBrc3pfaXJxICpraXJxICA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpO1xuIFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGtpcnEtXHUwMDNlZGV2O1xuQEAgLTI1MDQsMTQgJiM0MzsyNTA0LDE1IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBrc3pfaXJxX3RocmVhZF9mbihpbnQgaXJxLCB2b2lkICpkZXZfaWQpXG4gXHRyZXR1cm4gKG5oYW5kbGVkIFx1MDAzZSAwID8gSVJRX0hBTkRMRUQgOiBJUlFfTk9ORSk7XG4gfVxuIFxuLXN0YXRpYyBpbnQga3N6X2lycV9jb21tb25fc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgc3RydWN0IGtzel9pcnEgKmtpcnEpXG4mIzQzO2ludCBrc3pfaXJxX2NvbW1vbl9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBzdHJ1Y3Qga3N6X2lycSAqa2lycSxcbiYjNDM7XHRcdFx0IGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyAqb3BzKVxuIHtcbiBcdGludCByZXQsIG47XG4gXG4gXHRraXJxLVx1MDAzZWRldiA9IGRldjtcbiBcbi1cdGtpcnEtXHUwMDNlZG9tYWluID0gaXJxX2RvbWFpbl9jcmVhdGVfc2ltcGxlKGRldl9md25vZGUoZGV2LVx1MDAzZWRldiksIGtpcnEtXHUwMDNlbmlycXMsIDAsXG4tXHRcdFx0XHRcdFx0XHUwMDI2a3N6X2lycV9kb21haW5fb3BzLCBraXJxKTtcbiYjNDM7XHRraXJxLVx1MDAzZWRvbWFpbiA9IGlycV9kb21haW5fY3JlYXRlX3NpbXBsZShkZXZfZndub2RlKGRldi1cdTAwM2VkZXYpLFxuJiM0MztcdFx0XHRcdFx0XHRraXJxLVx1MDAzZW5pcnFzLCAwLCBvcHMsIGtpcnEpO1xuIFx0aWYgKCFraXJxLVx1MDAzZWRvbWFpbilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMjU0Myw3ICYjNDM7MjU0NCw3IEBAIGludCBrc3pfZ2lycV9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuIFxuIFx0Z2lycS1cdTAwM2VpcnFfbnVtID0gZGV2LVx1MDAzZWlycTtcbiBcbi1cdHJldHVybiBrc3pfaXJxX2NvbW1vbl9zZXR1cChkZXYsIGdpcnEpO1xuJiM0MztcdHJldHVybiBrc3pfaXJxX2NvbW1vbl9zZXR1cChkZXYsIGdpcnEsIFx1MDAyNmtzel9pcnFfZG9tYWluX29wcyk7XG4gfVxuIFxuIGludCBrc3pfcGlycV9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1OCBwKVxuQEAgLTI1NjAsNyAmIzQzOzI1NjEsNyBAQCBpbnQga3N6X3BpcnFfc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggcClcbiBcdGlmICghcGlycS1cdTAwM2VpcnFfbnVtKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdHJldHVybiBrc3pfaXJxX2NvbW1vbl9zZXR1cChkZXYsIHBpcnEpO1xuJiM0MztcdHJldHVybiBrc3pfaXJxX2NvbW1vbl9zZXR1cChkZXYsIHBpcnEsIFx1MDAyNmtzel9pcnFfZG9tYWluX29wcyk7XG4gfVxuIFxuIHZvaWQga3N6X3RlYXJkb3duKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oXG5pbmRleCBhY2FmNzBlNmYzOTNjOS4uY2JlOTg0OTQ1NzhjMzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmhcbkBAIC04LDYgJiM0Mzs4LDcgQEBcbiAjZGVmaW5lIF9fS1NaX0NPTU1PTl9IXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFkb21haW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Bjcy9wY3MteHBjcy5oXHUwMDNlXG5AQCAtMTkzLDYgJiM0MzsxOTQsNyBAQCBzdHJ1Y3Qga3N6X3BvcnQge1xuIFx0c3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgdHN0YW1wX2NvbmZpZztcbiBcdGJvb2wgaHd0c190eF9lbjtcbiBcdGJvb2wgaHd0c19yeF9lbjtcbiYjNDM7XHRib29sIGxhc3RfdHhfaXNfcGRlbGF5cmVzcDtcbiBcdHN0cnVjdCBrc3pfaXJxIHB0cGlycTtcbiBcdHN0cnVjdCBrc3pfcHRwX2lycSBwdHBtc2dfaXJxWzNdO1xuIFx0a3RpbWVfdCB0c3RhbXBfbXNnO1xuQEAgLTUwOCw2ICYjNDM7NTEwLDEwIEBAIGludCBrc3pfc3dfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbCk7XG4gaW50IGtzel9wYXJlbnRfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnbnVtKTtcbiBpbnQga3N6X3BhcmVudF9tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnbnVtLCB1MTYgdmFsKTtcbiBpbnQga3N6X21kaW9fcmVnaXN0ZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldik7XG4mIzQzO3ZvaWQga3N6X2lycV9idXNfbG9jayhzdHJ1Y3QgaXJxX2RhdGEgKmQpO1xuJiM0Mzt2b2lkIGtzel9pcnFfYnVzX3N5bmNfdW5sb2NrKHN0cnVjdCBpcnFfZGF0YSAqZCk7XG4mIzQzO2ludCBrc3pfaXJxX2NvbW1vbl9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBzdHJ1Y3Qga3N6X2lycSAqa2lycSxcbiYjNDM7XHRcdFx0IGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyAqb3BzKTtcbiBpbnQga3N6X3BpcnFfc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggcCk7XG4gaW50IGtzel9naXJxX3NldHVwKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpO1xuIHZvaWQga3N6X2lycV9mcmVlKHN0cnVjdCBrc3pfaXJxICpraXJxKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jXG5pbmRleCA4Yjk4MDM5MzIwYWRkYS4uOWQ4Yjc4Njg3ZjUzMTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmNcbkBAIC0zMiw2ICYjNDM7MzIsMTUgQEBcbiBcbiAjZGVmaW5lIEtTWl9QVFBfSU5UX1NUQVJUIDEzXG4gXG4mIzQzOy8qXG4mIzQzOyAqIFBUUCBpbnRlcnJ1cHQgYml0IGlzIHRoZSBiaXQgMTIgb2YgdGhlIDE2LWJpdHMgSVNSL0lFUi4gQnV0IGtzel9jb21tb24uYyBvbmx5XG4mIzQzOyAqIGFjY2Vzc2VzIHRoZSBoaWdoLWJ5dGUgb2YgdGhlc2UgcmVnaXN0ZXJzIHNvIHRoZSBQVFAgaW50ZXJydXB0IGJpdCBiZWNvbWVzIDQuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIEtTWjg0NjNfU1JDX1BUUF9JTlRcdFx0NFxuJiM0MzsjZGVmaW5lIEtTWjg0NjNfUFRQX1BPUlQxX0lOVF9TVEFSVFx0MTJcbiYjNDM7I2RlZmluZSBLU1o4NDYzX1BUUF9QT1JUMl9JTlRfU1RBUlRcdDE0XG4mIzQzOyNkZWZpbmUgS1NaODQ2M19QVFBfSU5UX1NUQVJUXHRcdEtTWjg0NjNfUFRQX1BPUlQxX0lOVF9TVEFSVFxuJiM0MztcbiBzdGF0aWMgaW50IGtzel9wdHBfdG91X2dwaW8oc3RydWN0IGtzel9kZXZpY2UgKmRldilcbiB7XG4gXHRpbnQgcmV0O1xuQEAgLTI4OCw2ICYjNDM7Mjk3LDMxIEBAIHN0YXRpYyBpbnQga3N6X3B0cF9lbmFibGVfbW9kZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuIFx0XHRcdCB0YWdfZW4gPyBQVFBfRU5BQkxFIDogMCk7XG4gfVxuIFxuJiM0MztpbnQga3N6ODQ2M19nZXRfdHNfaW5mbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0XHRzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqdHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbiYjNDM7XHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YTtcbiYjNDM7XG4mIzQzO1x0cHRwX2RhdGEgPSBcdTAwMjZkZXYtXHUwMDNlcHRwX2RhdGE7XG4mIzQzO1xuJiM0MztcdGlmICghcHRwX2RhdGEtXHUwMDNlY2xvY2spXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0dHMtXHUwMDNlc29fdGltZXN0YW1waW5nID0gU09GX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRSB8XG4mIzQzO1x0XHRcdCAgICAgIFNPRl9USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkUgfFxuJiM0MztcdFx0XHQgICAgICBTT0ZfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRTtcbiYjNDM7XG4mIzQzO1x0dHMtXHUwMDNldHhfdHlwZXMgPSBCSVQoSFdUU1RBTVBfVFhfT0ZGKSB8IEJJVChIV1RTVEFNUF9UWF9PTik7XG4mIzQzO1xuJiM0MztcdHRzLVx1MDAzZXJ4X2ZpbHRlcnMgPSBCSVQoSFdUU1RBTVBfRklMVEVSX05PTkUpIHxcbiYjNDM7XHRcdFx0IEJJVChIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX0VWRU5UKTtcbiYjNDM7XG4mIzQzO1x0dHMtXHUwMDNlcGhjX2luZGV4ID0gcHRwX2Nsb2NrX2luZGV4KHB0cF9kYXRhLVx1MDAzZWNsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gLyogVGhlIGZ1bmN0aW9uIGlzIHJldHVybiBiYWNrIHRoZSBjYXBhYmlsaXR5IG9mIHRpbWVzdGFtcGluZyBmZWF0dXJlIHdoZW5cbiAgKiByZXF1ZXN0ZWQgdGhyb3VnaCBldGh0b29sIC1UIFx1MDAzY2ludGVyZmFjZVx1MDAzZSB1dGlsaXR5XG4gICovXG5AQCAtMzMyLDYgJiM0MzszNjYsNzIgQEAgaW50IGtzel9od3RzdGFtcF9nZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBrc3o4NDYzX3NldF9od3RzdGFtcF9jb25maWcoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IGtzel9wb3J0ICpwcnQsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCB1MTYgKnJlZ3MgPSBkZXYtXHUwMDNlaW5mby1cdTAwM2VyZWdzO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChjb25maWctXHUwMDNlZmxhZ3MpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChjb25maWctXHUwMDNldHhfdHlwZSkge1xuJiM0MztcdGNhc2UgSFdUU1RBTVBfVFhfT0ZGOlxuJiM0MztcdFx0cHJ0LVx1MDAzZXB0cG1zZ19pcnFbS1NaODQ2M19TWU5DX01TR10udHNfZW4gID0gZmFsc2U7XG4mIzQzO1x0XHRwcnQtXHUwMDNlcHRwbXNnX2lycVtLU1o4NDYzX1hEUkVRX1BEUkVTX01TR10udHNfZW4gPSBmYWxzZTtcbiYjNDM7XHRcdHBydC1cdTAwM2Vod3RzX3R4X2VuID0gZmFsc2U7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEhXVFNUQU1QX1RYX09OOlxuJiM0MztcdFx0cHJ0LVx1MDAzZXB0cG1zZ19pcnFbS1NaODQ2M19TWU5DX01TR10udHNfZW4gID0gdHJ1ZTtcbiYjNDM7XHRcdHBydC1cdTAwM2VwdHBtc2dfaXJxW0tTWjg0NjNfWERSRVFfUERSRVNfTVNHXS50c19lbiA9IHRydWU7XG4mIzQzO1x0XHRwcnQtXHUwMDNlaHd0c190eF9lbiA9IHRydWU7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0ga3N6X3JtdzE2KGRldiwgcmVnc1tQVFBfTVNHX0NPTkYxXSwgUFRQXzFTVEVQLCAwKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRVJBTkdFO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChjb25maWctXHUwMDNlcnhfZmlsdGVyKSB7XG4mIzQzO1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfTk9ORTpcbiYjNDM7XHRcdHBydC1cdTAwM2Vod3RzX3J4X2VuID0gZmFsc2U7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfRVZFTlQ6XG4mIzQzO1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX1NZTkM6XG4mIzQzO1x0XHRjb25maWctXHUwMDNlcnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9FVkVOVDtcbiYjNDM7XHRcdHBydC1cdTAwM2Vod3RzX3J4X2VuID0gdHJ1ZTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRjb25maWctXHUwMDNlcnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX05PTkU7XG4mIzQzO1x0XHRyZXR1cm4gLUVSQU5HRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBrc3pfcHRwX2VuYWJsZV9tb2RlKGRldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBrc3o4NDYzX2h3dHN0YW1wX3NldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0XHQgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZyxcbiYjNDM7XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuJiM0MztcdHN0cnVjdCBrc3pfcG9ydCAqcHJ0O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHBydCA9IFx1MDAyNmRldi1cdTAwM2Vwb3J0c1twb3J0XTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0ga3N6ODQ2M19zZXRfaHd0c3RhbXBfY29uZmlnKGRldiwgcHJ0LCBjb25maWcpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRwcnQtXHUwMDNldHN0YW1wX2NvbmZpZyA9ICpjb25maWc7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQga3N6X3NldF9od3RzdGFtcF9jb25maWcoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiBcdFx0XHRcdCAgIHN0cnVjdCBrc3pfcG9ydCAqcHJ0LFxuIFx0XHRcdFx0ICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZylcbkBAIC01NjIsNiAmIzQzOzY2MiwzMSBAQCBzdGF0aWMgdm9pZCBrc3pfcHRwX3R4dHN0YW1wX3NrYihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuIFx0c2tiX2NvbXBsZXRlX3R4X3RpbWVzdGFtcChza2IsIFx1MDAyNmh3dHN0YW1wcyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBrc3o4NDYzX3NldF9wZGVsYXlyZXNwX2ZsYWcoc3RydWN0IGtzel9wb3J0ICpwcnQsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHB0cF9oZWFkZXIgKmhkcjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgdHlwZTtcbiYjNDM7XHR1OCBwdHBfbXNnX3R5cGU7XG4mIzQzO1xuJiM0MztcdGlmICgha3N6X2lzX2tzejg0NjMocHJ0LVx1MDAzZWtzel9kZXYpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAoc2tiX2xpbmVhcml6ZShza2IpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHR0eXBlID0gcHRwX2NsYXNzaWZ5X3Jhdyhza2IpO1xuJiM0MztcdGlmICh0eXBlID09IFBUUF9DTEFTU19OT05FKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRoZHIgPSBwdHBfcGFyc2VfaGVhZGVyKHNrYiwgdHlwZSk7XG4mIzQzO1x0aWYgKCFoZHIpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHB0cF9tc2dfdHlwZSA9IHB0cF9nZXRfbXNndHlwZShoZHIsIHR5cGUpO1xuJiM0MztcdHBydC1cdTAwM2VsYXN0X3R4X2lzX3BkZWxheXJlc3AgPSAocHRwX21zZ190eXBlID09IFBUUF9NU0dUWVBFX1BERUxBWV9SRVNQKTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIGtzel9wb3J0X2RlZmVycmVkX3htaXQoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaylcbiB7XG4gXHRzdHJ1Y3Qga3N6X2RlZmVycmVkX3htaXRfd29yayAqeG1pdF93b3JrID0gd29ya190b194bWl0X3dvcmsod29yayk7XG5AQCAtNTc4LDYgJiM0Mzs3MDMsOCBAQCB2b2lkIGtzel9wb3J0X2RlZmVycmVkX3htaXQoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaylcbiBcbiBcdHJlaW5pdF9jb21wbGV0aW9uKFx1MDAyNnBydC1cdTAwM2V0c3RhbXBfbXNnX2NvbXApO1xuIFxuJiM0MztcdGtzejg0NjNfc2V0X3BkZWxheXJlc3BfZmxhZyhwcnQsIHNrYik7XG4mIzQzO1xuIFx0ZHNhX2VucXVldWVfc2tiKHNrYiwgc2tiLVx1MDAzZWRldik7XG4gXG4gXHRrc3pfcHRwX3R4dHN0YW1wX3NrYihkZXYsIHBydCwgY2xvbmUpO1xuQEAgLTk0NCw4ICYjNDM7MTA3MSw5IEBAIGludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdC8qIEN1cnJlbnRseSBvbmx5IFAyUCBtb2RlIGlzIHN1cHBvcnRlZC4gV2hlbiA4MDJfMUFTIGJpdCBpcyBzZXQsIGl0XG4gXHQgKiBmb3J3YXJkcyBhbGwgUFRQIHBhY2tldHMgdG8gaG9zdCBwb3J0IGFuZCBub25lIHRvIG90aGVyIHBvcnRzLlxuIFx0ICovXG4tXHRyZXQgPSBrc3pfcm13MTYoZGV2LCByZWdzW1BUUF9NU0dfQ09ORjFdLCBQVFBfVENfUDJQIHwgUFRQXzgwMl8xQVMsXG4tXHRcdFx0UFRQX1RDX1AyUCB8IFBUUF84MDJfMUFTKTtcbiYjNDM7XHRyZXQgPSBrc3pfcm13MTYoZGV2LCByZWdzW1BUUF9NU0dfQ09ORjFdLFxuJiM0MztcdFx0XHRQVFBfVENfUDJQIHwgUFRQXzgwMl8xQVMgfCBQVFBfRVRIX0VOQUJMRSxcbiYjNDM7XHRcdFx0UFRQX1RDX1AyUCB8IFBUUF84MDJfMUFTIHwgUFRQX0VUSF9FTkFCTEUpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC05NjksNyAmIzQzOzEwOTcsMjIgQEAgdm9pZCBrc3pfcHRwX2Nsb2NrX3VucmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFxuIHN0YXRpYyBpbnQga3N6X3JlYWRfdHMoc3RydWN0IGtzel9wb3J0ICpwb3J0LCB1MTYgcmVnLCB1MzIgKnRzKVxuIHtcbi1cdHJldHVybiBrc3pfcmVhZDMyKHBvcnQtXHUwMDNla3N6X2RldiwgcmVnLCB0cyk7XG4mIzQzO1x0dTE2IHRzX3JlZyA9IHJlZztcbiYjNDM7XG4mIzQzO1x0LyoqXG4mIzQzO1x0ICogT24gS1NaODQ2MyBEUkVRIGFuZCBEUkVTUCB0aW1lc3RhbXBzIHNoYXJlIG9uZSBpbnRlcnJ1cHQgbGluZVxuJiM0MztcdCAqIHNvIHdlIGhhdmUgdG8gY2hlY2sgdGhlIG5hdHVyZSBvZiB0aGUgbGF0ZXN0IGV2ZW50IHNlbnQgdG8ga25vd1xuJiM0MztcdCAqIHdoZXJlIHRoZSB0aW1lc3RhbXAgaXMgbG9jYXRlZFxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChrc3pfaXNfa3N6ODQ2Myhwb3J0LVx1MDAzZWtzel9kZXYpKSB7XG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3Qga3N6X2Rldl9vcHMgKm9wcyA9IHBvcnQtXHUwMDNla3N6X2Rldi1cdTAwM2VkZXZfb3BzO1xuJiM0MztcbiYjNDM7XHRcdGlmIChwb3J0LVx1MDAzZWxhc3RfdHhfaXNfcGRlbGF5cmVzcCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICB0c19yZWcgPT0gb3BzLVx1MDAzZWdldF9wb3J0X2FkZHIocG9ydC1cdTAwM2VudW0sIEtTWjg0NjNfUkVHX1BPUlRfRFJFUV9UUykpXG4mIzQzO1x0XHRcdHRzX3JlZyAmIzQzOz0gS1NaODQ2M19EUkVTUF9UU19PRkZTRVQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4ga3N6X3JlYWQzMihwb3J0LVx1MDAzZWtzel9kZXYsIHRzX3JlZywgdHMpO1xuIH1cbiBcbiBzdGF0aWMgaXJxcmV0dXJuX3Qga3N6X3B0cF9tc2dfdGhyZWFkX2ZuKGludCBpcnEsIHZvaWQgKmRldl9pZClcbkBAIC0xMTI5LDYgJiM0MzsxMjcyLDEyOCBAQCBzdGF0aWMgaW50IGtzel9wdHBfbXNnX2lycV9zZXR1cChzdHJ1Y3Qga3N6X3BvcnQgKnBvcnQsIHU4IG4pXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBrc3o4NDYzX3B0cF9wb3J0X2lycV9zZXR1cChzdHJ1Y3Qga3N6X2lycSAqcHRwaXJxLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBrc3pfcG9ydCAqcG9ydCwgaW50IGh3X2lycSlcbiYjNDM7e1xuJiM0MztcdHUxNiB0c19yZWdbXSA9IHtLU1o4NDYzX1JFR19QT1JUX1NZTkNfVFMsIEtTWjg0NjNfUkVHX1BPUlRfRFJFUV9UU307XG4mIzQzO1x0c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBuYW1lW10gPSB7XCYjMzQ7c3luYy1tc2dcJiMzNDssIFwmIzM0O2RlbGF5LW1zZ1wmIzM0O307XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGtzel9kZXZfb3BzICpvcHMgPSBwb3J0LVx1MDAzZWtzel9kZXYtXHUwMDNlZGV2X29wcztcbiYjNDM7XHRzdHJ1Y3Qga3N6X3B0cF9pcnEgKnB0cG1zZ19pcnE7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aW5pdF9jb21wbGV0aW9uKFx1MDAyNnBvcnQtXHUwMDNldHN0YW1wX21zZ19jb21wKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgMjsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHB0cG1zZ19pcnEgPSBcdTAwMjZwb3J0LVx1MDAzZXB0cG1zZ19pcnFbaV07XG4mIzQzO1x0XHRwdHBtc2dfaXJxLVx1MDAzZW51bSA9IGlycV9jcmVhdGVfbWFwcGluZyhwdHBpcnEtXHUwMDNlZG9tYWluLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIGh3X2lycSAmIzQzOyBpKTtcbiYjNDM7XHRcdGlmICghcHRwbXNnX2lycS1cdTAwM2VudW0pIHtcbiYjNDM7XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdFx0Z290byByZWxlYXNlX21zZ19pcnE7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cHRwbXNnX2lycS1cdTAwM2Vwb3J0ID0gcG9ydDtcbiYjNDM7XHRcdHB0cG1zZ19pcnEtXHUwMDNldHNfcmVnID0gb3BzLVx1MDAzZWdldF9wb3J0X2FkZHIocG9ydC1cdTAwM2VudW0sIHRzX3JlZ1tpXSk7XG4mIzQzO1xuJiM0MztcdFx0c3Ryc2NweShwdHBtc2dfaXJxLVx1MDAzZW5hbWUsIG5hbWVbaV0pO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHB0cG1zZ19pcnEtXHUwMDNlbnVtLCBOVUxMLFxuJiM0MztcdFx0XHRcdFx0ICAga3N6X3B0cF9tc2dfdGhyZWFkX2ZuLCBJUlFGX09ORVNIT1QsXG4mIzQzO1x0XHRcdFx0XHQgICBwdHBtc2dfaXJxLVx1MDAzZW5hbWUsIHB0cG1zZ19pcnEpO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRpcnFfZGlzcG9zZV9tYXBwaW5nKHB0cG1zZ19pcnEtXHUwMDNlbnVtKTtcbiYjNDM7XHRcdFx0Z290byByZWxlYXNlX21zZ19pcnE7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO3JlbGVhc2VfbXNnX2lycTpcbiYjNDM7XHR3aGlsZSAoaS0tKVxuJiM0MztcdFx0a3N6X3B0cF9tc2dfaXJxX2ZyZWUocG9ydCwgaSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGtzejg0NjNfcHRwX3BvcnRfaXJxX3RlYXJkb3duKHN0cnVjdCBrc3pfcG9ydCAqcG9ydClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAyOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGtzel9wdHBfbXNnX2lycV9mcmVlKHBvcnQsIGkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQga3N6ODQ2M19wdHBfaXJxX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuJiM0MztcdHN0cnVjdCBrc3pfcG9ydCAqcG9ydDEsICpwb3J0MjtcbiYjNDM7XHRzdHJ1Y3Qga3N6X2lycSAqcHRwaXJxO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHBvcnQxID0gXHUwMDI2ZGV2LVx1MDAzZXBvcnRzWzBdO1xuJiM0MztcdHBvcnQyID0gXHUwMDI2ZGV2LVx1MDAzZXBvcnRzWzFdO1xuJiM0MztcdHB0cGlycSA9IFx1MDAyNnBvcnQxLVx1MDAzZXB0cGlycTtcbiYjNDM7XG4mIzQzO1x0cHRwaXJxLVx1MDAzZWlycV9udW0gPSBpcnFfZmluZF9tYXBwaW5nKGRldi1cdTAwM2VnaXJxLmRvbWFpbixcbiYjNDM7XHRcdFx0XHRcdCAgIEtTWjg0NjNfU1JDX1BUUF9JTlQpO1xuJiM0MztcdGlmICghcHRwaXJxLVx1MDAzZWlycV9udW0pXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cHRwaXJxLVx1MDAzZWRldiA9IGRldjtcbiYjNDM7XHRwdHBpcnEtXHUwMDNlbmlycXMgPSA0O1xuJiM0MztcdHB0cGlycS1cdTAwM2VyZWdfbWFzayA9IEtTWjg0NjNfUFRQX1RTX0lFUjtcbiYjNDM7XHRwdHBpcnEtXHUwMDNlcmVnX3N0YXR1cyA9IEtTWjg0NjNfUFRQX1RTX0lTUjtcbiYjNDM7XHRwdHBpcnEtXHUwMDNlaXJxMF9vZmZzZXQgPSBLU1o4NDYzX1BUUF9JTlRfU1RBUlQ7XG4mIzQzO1x0c25wcmludGYocHRwaXJxLVx1MDAzZW5hbWUsIHNpemVvZihwdHBpcnEtXHUwMDNlbmFtZSksIFwmIzM0O3B0cC1pcnFcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRwdHBpcnEtXHUwMDNlZG9tYWluID0gaXJxX2RvbWFpbl9jcmVhdGVfbGluZWFyKGRldl9md25vZGUoZGV2LVx1MDAzZWRldiksXG4mIzQzO1x0XHRcdFx0XHRcdCAgcHRwaXJxLVx1MDAzZW5pcnFzLFxuJiM0MztcdFx0XHRcdFx0XHQgIFx1MDAyNmtzel9wdHBfaXJxX2RvbWFpbl9vcHMsXG4mIzQzO1x0XHRcdFx0XHRcdCAgcHRwaXJxKTtcbiYjNDM7XHRpZiAoIXB0cGlycS1cdTAwM2Vkb21haW4pXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0ga3N6ODQ2M19wdHBfcG9ydF9pcnFfc2V0dXAocHRwaXJxLCBwb3J0MSxcbiYjNDM7XHRcdFx0XHRcdCBLU1o4NDYzX1BUUF9QT1JUMV9JTlRfU1RBUlQgLSBLU1o4NDYzX1BUUF9JTlRfU1RBUlQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIHJlbGVhc2VfZG9tYWluO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrc3o4NDYzX3B0cF9wb3J0X2lycV9zZXR1cChwdHBpcnEsIHBvcnQyLFxuJiM0MztcdFx0XHRcdFx0IEtTWjg0NjNfUFRQX1BPUlQyX0lOVF9TVEFSVCAtIEtTWjg0NjNfUFRQX0lOVF9TVEFSVCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZnJlZV9wb3J0MTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEocHRwaXJxLVx1MDAzZWlycV9udW0sIE5VTEwsIGtzel9wdHBfaXJxX3RocmVhZF9mbixcbiYjNDM7XHRcdFx0XHQgICBJUlFGX09ORVNIT1QsIHB0cGlycS1cdTAwM2VuYW1lLCBwdHBpcnEpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGZyZWVfcG9ydDI7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZnJlZV9wb3J0MjpcbiYjNDM7XHRrc3o4NDYzX3B0cF9wb3J0X2lycV90ZWFyZG93bihwb3J0Mik7XG4mIzQzO2ZyZWVfcG9ydDE6XG4mIzQzO1x0a3N6ODQ2M19wdHBfcG9ydF9pcnFfdGVhcmRvd24ocG9ydDEpO1xuJiM0MztyZWxlYXNlX2RvbWFpbjpcbiYjNDM7XHRpcnFfZG9tYWluX3JlbW92ZShwdHBpcnEtXHUwMDNlZG9tYWluKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBrc3o4NDYzX3B0cF9pcnFfZnJlZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbiYjNDM7XHRzdHJ1Y3Qga3N6X3BvcnQgKnBvcnQxID0gXHUwMDI2ZGV2LVx1MDAzZXBvcnRzWzBdO1xuJiM0MztcdHN0cnVjdCBrc3pfcG9ydCAqcG9ydDIgPSBcdTAwMjZkZXYtXHUwMDNlcG9ydHNbMV07XG4mIzQzO1x0c3RydWN0IGtzel9pcnEgKnB0cGlycSA9IFx1MDAyNnBvcnQxLVx1MDAzZXB0cGlycTtcbiYjNDM7XG4mIzQzO1x0ZnJlZV9pcnEocHRwaXJxLVx1MDAzZWlycV9udW0sIHB0cGlycSk7XG4mIzQzO1x0a3N6ODQ2M19wdHBfcG9ydF9pcnFfdGVhcmRvd24ocG9ydDIpO1xuJiM0MztcdGtzejg0NjNfcHRwX3BvcnRfaXJxX3RlYXJkb3duKHBvcnQxKTtcbiYjNDM7XHRpcnFfZG9tYWluX3JlbW92ZShwdHBpcnEtXHUwMDNlZG9tYWluKTtcbiYjNDM7fVxuJiM0MztcbiBpbnQga3N6X3B0cF9pcnFfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCB1OCBwKVxuIHtcbiBcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmhcbmluZGV4IDMwODZlNTE5YjFiNjQxLi43MDY3ZWM5YmQxZTZmMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaFxuQEAgLTM5LDE3ICYjNDM7MzksMjQgQEAgdm9pZCBrc3pfcHRwX2Nsb2NrX3VucmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcbiBcbiBpbnQga3N6X2dldF90c19pbmZvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdCAgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqdHMpO1xuJiM0MztpbnQga3N6ODQ2M19nZXRfdHNfaW5mbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0XHRzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqdHMpO1xuIGludCBrc3pfaHd0c3RhbXBfZ2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdCAgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZyk7XG4gaW50IGtzel9od3RzdGFtcF9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0ICAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY29uZmlnLFxuIFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4mIzQzO2ludCBrc3o4NDYzX2h3dHN0YW1wX3NldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0XHQgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZyxcbiYjNDM7XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4gdm9pZCBrc3pfcG9ydF90eHRzdGFtcChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiB2b2lkIGtzel9wb3J0X2RlZmVycmVkX3htaXQoc3RydWN0IGt0aHJlYWRfd29yayAqd29yayk7XG4gYm9vbCBrc3pfcG9ydF9yeHRzdGFtcChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHQgICAgICAgdW5zaWduZWQgaW50IHR5cGUpO1xuIGludCBrc3pfcHRwX2lycV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIHU4IHApO1xuIHZvaWQga3N6X3B0cF9pcnFfZnJlZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIHU4IHApO1xuJiM0MztpbnQga3N6ODQ2M19wdHBfaXJxX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XG4mIzQzO3ZvaWQga3N6ODQ2M19wdHBfaXJxX2ZyZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcbiBcbiAjZWxzZVxuIFxuQEAgLTcyLDExICYjNDM7NzksMjAgQEAgc3RhdGljIGlubGluZSBpbnQga3N6X3B0cF9pcnFfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCB1OCBwKVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrc3pfcHRwX2lycV9mcmVlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgdTggcCkge31cbiBcbiYjNDM7c3RhdGljIGlubGluZSBpbnQga3N6ODQ2M19wdHBfaXJxX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQga3N6ODQ2M19wdHBfaXJxX2ZyZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKSB7fVxuJiM0MztcbiAjZGVmaW5lIGtzel9nZXRfdHNfaW5mbyBOVUxMXG4mIzQzOyNkZWZpbmUga3N6ODQ2M19nZXRfdHNfaW5mbyBOVUxMXG4gXG4gI2RlZmluZSBrc3pfaHd0c3RhbXBfZ2V0IE5VTExcbiBcbiAjZGVmaW5lIGtzel9od3RzdGFtcF9zZXQgTlVMTFxuJiM0MzsjZGVmaW5lIGtzejg0NjNfaHd0c3RhbXBfc2V0IE5VTExcbiBcbiAjZGVmaW5lIGtzel9wb3J0X3J4dHN0YW1wIE5VTExcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmhcbmluZGV4IGVhYjlhZWNiN2ZhOGE1Li42NWVhODU3N2FmNzU1OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cF9yZWcuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwX3JlZy5oXG5AQCAtMTIxLDYgJiM0MzsxMjEsMTIgQEBcbiAjZGVmaW5lIFJFR19QVFBfUE9SVF9TWU5DX1RTXHRcdDB4MEMwQ1xuICNkZWZpbmUgUkVHX1BUUF9QT1JUX1BEUkVTUF9UU1x0XHQweDBDMTBcbiBcbiYjNDM7I2RlZmluZSBLU1o4NDYzX1JFR19QT1JUX0RSRVFfVFNcdDB4MDY0OFxuJiM0MzsjZGVmaW5lIEtTWjg0NjNfUkVHX1BPUlRfU1lOQ19UU1x0MHgwNjRDXG4mIzQzOyNkZWZpbmUgS1NaODQ2M19SRUdfUE9SVF9EUkVTUF9UU1x0MHgwNjUwXG4mIzQzOyNkZWZpbmUgS1NaODQ2M19QVFBfVFNfSVNSXHRcdDB4MDY4Q1xuJiM0MzsjZGVmaW5lIEtTWjg0NjNfUFRQX1RTX0lFUlx0XHQweDA2OEVcbiYjNDM7XG4gI2RlZmluZSBSRUdfUFRQX1BPUlRfVFhfSU5UX1NUQVRVU19fMlx0MHgwQzE0XG4gI2RlZmluZSBSRUdfUFRQX1BPUlRfVFhfSU5UX0VOQUJMRV9fMlx0MHgwQzE2XG4gXG5AQCAtMTMxLDQgJiM0MzsxMzcsOCBAQFxuICNkZWZpbmUgS1NaX1hEUkVRX01TR1x0XHRcdDFcbiAjZGVmaW5lIEtTWl9QRFJFU19NU0dcdFx0XHQwXG4gXG4mIzQzOyNkZWZpbmUgS1NaODQ2M19EUkVTUF9UU19PRkZTRVRcdFx0KEtTWjg0NjNfUkVHX1BPUlRfRFJFU1BfVFMgLSBLU1o4NDYzX1JFR19QT1JUX0RSRVFfVFMpXG4mIzQzOyNkZWZpbmUgS1NaODQ2M19TWU5DX01TR1x0XHQwXG4mIzQzOyNkZWZpbmUgS1NaODQ2M19YRFJFUV9QRFJFU19NU0dcdFx0MVxuJiM0MztcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kc2EuaCBiL2luY2x1ZGUvbmV0L2RzYS5oXG5pbmRleCA4YzE2ZWYyM2NjMTAyYS4uNmY3ZjVjMTdiNTMyMDggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9kc2EuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvZHNhLmhcbkBAIC01OSw2ICYjNDM7NTksNyBAQCBzdHJ1Y3QgdGNfYWN0aW9uO1xuICNkZWZpbmUgRFNBX1RBR19QUk9UT19NWExfR1NXMVhYX1ZBTFVFXHRcdDMxXG4gI2RlZmluZSBEU0FfVEFHX1BST1RPX01YTDg2Ml9WQUxVRVx0XHQzMlxuICNkZWZpbmUgRFNBX1RBR19QUk9UT19ORVRDX1ZBTFVFXHRcdDMzXG4mIzQzOyNkZWZpbmUgRFNBX1RBR19QUk9UT19LU1o4NDYzX1ZBTFVFXHRcdDM0XG4gXG4gZW51bSBkc2FfdGFnX3Byb3RvY29sIHtcbiBcdERTQV9UQUdfUFJPVE9fTk9ORVx0XHQ9IERTQV9UQUdfUFJPVE9fTk9ORV9WQUxVRSxcbkBAIC05NSw2ICYjNDM7OTYsNyBAQCBlbnVtIGRzYV90YWdfcHJvdG9jb2wge1xuIFx0RFNBX1RBR19QUk9UT19NWExfR1NXMVhYXHQ9IERTQV9UQUdfUFJPVE9fTVhMX0dTVzFYWF9WQUxVRSxcbiBcdERTQV9UQUdfUFJPVE9fTVhMODYyXHRcdD0gRFNBX1RBR19QUk9UT19NWEw4NjJfVkFMVUUsXG4gXHREU0FfVEFHX1BST1RPX05FVENcdFx0PSBEU0FfVEFHX1BST1RPX05FVENfVkFMVUUsXG4mIzQzO1x0RFNBX1RBR19QUk9UT19LU1o4NDYzXHRcdD0gRFNBX1RBR19QUk9UT19LU1o4NDYzX1ZBTFVFLFxuIH07XG4gXG4gc3RydWN0IGRzYV9zd2l0Y2g7XG5kaWZmIC0tZ2l0IGEvbmV0L2RzYS90YWdfa3N6LmMgYi9uZXQvZHNhL3RhZ19rc3ouY1xuaW5kZXggNjdmYTg5ZjEwMmUwNzAuLmI0ZDcwYmE5MzBkY2JlIDEwMDY0NFxuLS0tIGEvbmV0L2RzYS90YWdfa3N6LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kc2EvdGFnX2tzei5jXG5AQCAtMTIsNiAmIzQzOzEyLDcgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDt0YWcuaFwmIzM0O1xuIFxuJiM0MzsjZGVmaW5lIEtTWjg0NjNfTkFNRSBcJiMzNDtrc3o4NDYzXCYjMzQ7XG4gI2RlZmluZSBLU1o4Nzk1X05BTUUgXCYjMzQ7a3N6ODc5NVwmIzM0O1xuICNkZWZpbmUgS1NaOTQ3N19OQU1FIFwmIzM0O2tzejk0NzdcJiMzNDtcbiAjZGVmaW5lIEtTWjk4OTNfTkFNRSBcJiMzNDtrc3o5ODkzXCYjMzQ7XG5AQCAtMTAzLDcyICYjNDM7MTA0LDYgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICprc3pfY29tbW9uX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIHNrYjtcbiB9XG4gXG4tLypcbi0gKiBGb3IgSW5ncmVzcyAoSG9zdCAtXHUwMDNlIEtTWjg3OTUpLCAxIGJ5dGUgaXMgYWRkZWQgYmVmb3JlIEZDUy5cbi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi0gKiBEQSg2Ynl0ZXMpfFNBKDZieXRlcyl8Li4uLnxEYXRhKG5ieXRlcyl8dGFnKDFieXRlKXxGQ1MoNGJ5dGVzKVxuLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLSAqIHRhZyA6IGVhY2ggYml0IHJlcHJlc2VudHMgcG9ydCAoZWcsIDB4MDE9cG9ydDEsIDB4MDI9cG9ydDIsIDB4MTA9cG9ydDUpXG4tICpcbi0gKiBGb3IgRWdyZXNzIChLU1o4Nzk1IC1cdTAwM2UgSG9zdCksIDEgYnl0ZSBpcyBhZGRlZCBiZWZvcmUgRkNTLlxuLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLSAqIERBKDZieXRlcyl8U0EoNmJ5dGVzKXwuLi4ufERhdGEobmJ5dGVzKXx0YWcwKDFieXRlKXxGQ1MoNGJ5dGVzKVxuLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLSAqIHRhZzAgOiB6ZXJvLWJhc2VkIHZhbHVlIHJlcHJlc2VudHMgcG9ydFxuLSAqXHQgIChlZywgMHgwPXBvcnQxLCAweDI9cG9ydDMsIDB4Mz1wb3J0NClcbi0gKi9cbi1cbi0jZGVmaW5lIEtTWjg3OTVfVEFJTF9UQUdfRUdfUE9SVF9NXHRHRU5NQVNLKDEsIDApXG4tI2RlZmluZSBLU1o4Nzk1X1RBSUxfVEFHX09WRVJSSURFXHRCSVQoNilcbi0jZGVmaW5lIEtTWjg3OTVfVEFJTF9UQUdfTE9PS1VQXHRcdEJJVCg3KVxuLVxuLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqa3N6ODc5NV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4te1xuLVx0c3RydWN0IGV0aGhkciAqaGRyO1xuLVx0dTggKnRhZztcbi1cbi1cdGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwgXHUwMDI2XHUwMDI2IHNrYl9jaGVja3N1bV9oZWxwKHNrYikpIHtcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4tXHRcdHJldHVybiBOVUxMO1xuLVx0fVxuLVxuLVx0LyogVGFnIGVuY29kaW5nICovXG4tXHR0YWcgPSBza2JfcHV0KHNrYiwgS1NaX0lOR1JFU1NfVEFHX0xFTik7XG4tXHRoZHIgPSBza2JfZXRoX2hkcihza2IpO1xuLVxuLVx0KnRhZyA9IGRzYV94bWl0X3BvcnRfbWFzayhza2IsIGRldik7XG4tXHRpZiAoaXNfbGlua19sb2NhbF9ldGhlcl9hZGRyKGhkci1cdTAwM2VoX2Rlc3QpKVxuLVx0XHQqdGFnIHw9IEtTWjg3OTVfVEFJTF9UQUdfT1ZFUlJJREU7XG4tXG4tXHRyZXR1cm4gc2tiO1xuLX1cbi1cbi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmtzejg3OTVfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4te1xuLVx0dTggKnRhZztcbi1cbi1cdGlmIChza2JfbGluZWFyaXplKHNrYikpIHtcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4tXHRcdHJldHVybiBOVUxMO1xuLVx0fVxuLVxuLVx0dGFnID0gc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gS1NaX0VHUkVTU19UQUdfTEVOO1xuLVxuLVx0cmV0dXJuIGtzel9jb21tb25fcmN2KHNrYiwgZGV2LCB0YWdbMF0gXHUwMDI2IEtTWjg3OTVfVEFJTF9UQUdfRUdfUE9SVF9NLFxuLVx0XHRcdCAgICAgIEtTWl9FR1JFU1NfVEFHX0xFTik7XG4tfVxuLVxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMga3N6ODc5NV9uZXRkZXZfb3BzID0ge1xuLVx0Lm5hbWVcdD0gS1NaODc5NV9OQU1FLFxuLVx0LnByb3RvXHQ9IERTQV9UQUdfUFJPVE9fS1NaODc5NSxcbi1cdC54bWl0XHQ9IGtzejg3OTVfeG1pdCxcbi1cdC5yY3ZcdD0ga3N6ODc5NV9yY3YsXG4tXHQubmVlZGVkX3RhaWxyb29tID0gS1NaX0lOR1JFU1NfVEFHX0xFTixcbi19O1xuLVxuLURTQV9UQUdfRFJJVkVSKGtzejg3OTVfbmV0ZGV2X29wcyk7XG4tTU9EVUxFX0FMSUFTX0RTQV9UQUdfRFJJVkVSKERTQV9UQUdfUFJPVE9fS1NaODc5NSwgS1NaODc5NV9OQU1FKTtcbi1cbiAvKlxuICAqIEZvciBJbmdyZXNzIChIb3N0IC1cdTAwM2UgS1NaOTQ3NyksIDIvNiBieXRlcyBhcmUgYWRkZWQgYmVmb3JlIEZDUy5cbiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkBAIC0yODQsNiAmIzQzOzIxOSwzNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmtzel9kZWZlcl94bWl0KHN0cnVjdCBkc2FfcG9ydCAqZHAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqa3N6X2NvbW1vbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGJvb2wgZG9fdHN0YW1wLFxuJiM0MztcdFx0XHRcdCAgICAgICB1OCBwcmlvLFxuJiM0MztcdFx0XHRcdCAgICAgICB1OCBvdmVycmlkZV9tYXNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV91c2VyX3RvX3BvcnQoZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgZXRoaGRyICpoZHI7XG4mIzQzO1x0dTggKnRhZztcbiYjNDM7XG4mIzQzO1x0aWYgKHNrYi1cdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCBcdTAwMjZcdTAwMjYgc2tiX2NoZWNrc3VtX2hlbHAoc2tiKSkge1xuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFRhZyBlbmNvZGluZyAqL1xuJiM0MztcdGlmIChkb190c3RhbXApXG4mIzQzO1x0XHRrc3pfeG1pdF90aW1lc3RhbXAoZHAsIHNrYik7XG4mIzQzO1xuJiM0MztcdHRhZyA9IHNrYl9wdXQoc2tiLCBLU1pfSU5HUkVTU19UQUdfTEVOKTtcbiYjNDM7XHRoZHIgPSBza2JfZXRoX2hkcihza2IpO1xuJiM0MztcbiYjNDM7XHQqdGFnID0gZHNhX3htaXRfcG9ydF9tYXNrKHNrYiwgZGV2KTtcbiYjNDM7XHQqdGFnIHw9IHByaW87XG4mIzQzO1xuJiM0MztcdGlmIChpc19saW5rX2xvY2FsX2V0aGVyX2FkZHIoaGRyLVx1MDAzZWhfZGVzdCkpXG4mIzQzO1x0XHQqdGFnIHw9IG92ZXJyaWRlX21hc2s7XG4mIzQzO1xuJiM0MztcdHJldHVybiBrc3pfZGVmZXJfeG1pdChkcCwgc2tiKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmtzejk0NzdfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuQEAgLTM1MywzNyAmIzQzOzMxOSw2OSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIGtzejk0NzdfbmV0ZGV2X29wcyA9IHtcbiBEU0FfVEFHX0RSSVZFUihrc3o5NDc3X25ldGRldl9vcHMpO1xuIE1PRFVMRV9BTElBU19EU0FfVEFHX0RSSVZFUihEU0FfVEFHX1BST1RPX0tTWjk0NzcsIEtTWjk0NzdfTkFNRSk7XG4gXG4tI2RlZmluZSBLU1o5ODkzX1RBSUxfVEFHX1BSSU9cdFx0R0VOTUFTSyg0LCAzKVxuLSNkZWZpbmUgS1NaOTg5M19UQUlMX1RBR19PVkVSUklERVx0QklUKDUpXG4tI2RlZmluZSBLU1o5ODkzX1RBSUxfVEFHX0xPT0tVUFx0XHRCSVQoNilcbiYjNDM7LypcbiYjNDM7ICogRm9yIEluZ3Jlc3MgKEhvc3QgLVx1MDAzZSBLU1o4Nzk1KSwgMSBieXRlIGlzIGFkZGVkIGJlZm9yZSBGQ1MuXG4mIzQzOyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MzsgKiBEQSg2Ynl0ZXMpfFNBKDZieXRlcyl8Li4uLnxEYXRhKG5ieXRlcyl8dGFnKDFieXRlKXxGQ1MoNGJ5dGVzKVxuJiM0MzsgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7ICogdGFnIDogZWFjaCBiaXQgcmVwcmVzZW50cyBwb3J0IChlZywgMHgwMT1wb3J0MSwgMHgwMj1wb3J0MiwgMHgxMD1wb3J0NSlcbiYjNDM7ICpcbiYjNDM7ICogRm9yIEVncmVzcyAoS1NaODc5NSAtXHUwMDNlIEhvc3QpLCAxIGJ5dGUgaXMgYWRkZWQgYmVmb3JlIEZDUy5cbiYjNDM7ICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzOyAqIERBKDZieXRlcyl8U0EoNmJ5dGVzKXwuLi4ufERhdGEobmJ5dGVzKXx0YWcwKDFieXRlKXxGQ1MoNGJ5dGVzKVxuJiM0MzsgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7ICogdGFnMCA6IHplcm8tYmFzZWQgdmFsdWUgcmVwcmVzZW50cyBwb3J0XG4mIzQzOyAqXHQgIChlZywgMHgwPXBvcnQxLCAweDI9cG9ydDMsIDB4Mz1wb3J0NClcbiYjNDM7ICovXG4gXG4tc3RhdGljIHN0cnVjdCBza19idWZmICprc3o5ODkzX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuJiM0MzsjZGVmaW5lIEtTWjg3OTVfVEFJTF9UQUdfRUdfUE9SVF9NXHRHRU5NQVNLKDEsIDApXG4mIzQzOyNkZWZpbmUgS1NaODc5NV9UQUlMX1RBR19PVkVSUklERVx0QklUKDYpXG4mIzQzOyNkZWZpbmUgS1NaODc5NV9UQUlMX1RBR19MT09LVVBcdFx0QklUKDcpXG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmtzejg3OTVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGtzel9jb21tb25feG1pdChza2IsIGRldiwgZmFsc2UsIDAsIEtTWjg3OTVfVEFJTF9UQUdfT1ZFUlJJREUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmtzejg3OTVfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuLVx0dTE2IHF1ZXVlX21hcHBpbmcgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcbi1cdHU4IHByaW8gPSBuZXRkZXZfdHhxX3RvX3RjKGRldiwgcXVldWVfbWFwcGluZyk7XG4tXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3VzZXJfdG9fcG9ydChkZXYpO1xuLVx0c3RydWN0IGV0aGhkciAqaGRyO1xuIFx0dTggKnRhZztcbiBcbi1cdGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwgXHUwMDI2XHUwMDI2IHNrYl9jaGVja3N1bV9oZWxwKHNrYikpIHtcbiYjNDM7XHRpZiAoc2tiX2xpbmVhcml6ZShza2IpKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiBcbi1cdC8qIFRhZyBlbmNvZGluZyAqL1xuLVx0a3N6X3htaXRfdGltZXN0YW1wKGRwLCBza2IpO1xuJiM0MztcdHRhZyA9IHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtIEtTWl9FR1JFU1NfVEFHX0xFTjtcbiBcbi1cdHRhZyA9IHNrYl9wdXQoc2tiLCBLU1pfSU5HUkVTU19UQUdfTEVOKTtcbi1cdGhkciA9IHNrYl9ldGhfaGRyKHNrYik7XG4mIzQzO1x0cmV0dXJuIGtzel9jb21tb25fcmN2KHNrYiwgZGV2LCB0YWdbMF0gXHUwMDI2IEtTWjg3OTVfVEFJTF9UQUdfRUdfUE9SVF9NLFxuJiM0MztcdFx0XHQgICAgICBLU1pfRUdSRVNTX1RBR19MRU4pO1xuJiM0Mzt9XG4gXG4tXHQqdGFnID0gZHNhX3htaXRfcG9ydF9tYXNrKHNrYiwgZGV2KTtcbi1cdCp0YWcgfD0gRklFTERfUFJFUChLU1o5ODkzX1RBSUxfVEFHX1BSSU8sIHByaW8pO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIGtzejg3OTVfbmV0ZGV2X29wcyA9IHtcbiYjNDM7XHQubmFtZVx0PSBLU1o4Nzk1X05BTUUsXG4mIzQzO1x0LnByb3RvXHQ9IERTQV9UQUdfUFJPVE9fS1NaODc5NSxcbiYjNDM7XHQueG1pdFx0PSBrc3o4Nzk1X3htaXQsXG4mIzQzO1x0LnJjdlx0PSBrc3o4Nzk1X3JjdixcbiYjNDM7XHQubmVlZGVkX3RhaWxyb29tID0gS1NaX0lOR1JFU1NfVEFHX0xFTixcbiYjNDM7fTtcbiBcbi1cdGlmIChpc19saW5rX2xvY2FsX2V0aGVyX2FkZHIoaGRyLVx1MDAzZWhfZGVzdCkpXG4tXHRcdCp0YWcgfD0gS1NaOTg5M19UQUlMX1RBR19PVkVSUklERTtcbiYjNDM7RFNBX1RBR19EUklWRVIoa3N6ODc5NV9uZXRkZXZfb3BzKTtcbiYjNDM7TU9EVUxFX0FMSUFTX0RTQV9UQUdfRFJJVkVSKERTQV9UQUdfUFJPVE9fS1NaODc5NSwgS1NaODc5NV9OQU1FKTtcbiBcbi1cdHJldHVybiBrc3pfZGVmZXJfeG1pdChkcCwgc2tiKTtcbiYjNDM7I2RlZmluZSBLU1o5ODkzX1RBSUxfVEFHX1BSSU9cdFx0R0VOTUFTSyg0LCAzKVxuJiM0MzsjZGVmaW5lIEtTWjk4OTNfVEFJTF9UQUdfT1ZFUlJJREVcdEJJVCg1KVxuJiM0MzsjZGVmaW5lIEtTWjk4OTNfVEFJTF9UQUdfTE9PS1VQXHRcdEJJVCg2KVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBza19idWZmICprc3o5ODkzX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdHUxNiBxdWV1ZV9tYXBwaW5nID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7XG4mIzQzO1x0dTggcHJpbyA9IG5ldGRldl90eHFfdG9fdGMoZGV2LCBxdWV1ZV9tYXBwaW5nKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGtzel9jb21tb25feG1pdChza2IsIGRldiwgdHJ1ZSxcbiYjNDM7XHRcdFx0ICAgICAgIEZJRUxEX1BSRVAoS1NaOTg5M19UQUlMX1RBR19QUklPLCBwcmlvKSxcbiYjNDM7XHRcdFx0ICAgICAgIEtTWjk4OTNfVEFJTF9UQUdfT1ZFUlJJREUpO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIGtzejk4OTNfbmV0ZGV2X29wcyA9IHtcbkBAIC0zOTksNiAmIzQzOzM5Nyw3MCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIGtzejk4OTNfbmV0ZGV2X29wcyA9IHtcbiBEU0FfVEFHX0RSSVZFUihrc3o5ODkzX25ldGRldl9vcHMpO1xuIE1PRFVMRV9BTElBU19EU0FfVEFHX0RSSVZFUihEU0FfVEFHX1BST1RPX0tTWjk4OTMsIEtTWjk4OTNfTkFNRSk7XG4gXG4mIzQzOyNkZWZpbmUgS1NaODQ2M19UQUlMX1RBR19QUklPXHRcdEdFTk1BU0soNCwgMylcbiYjNDM7I2RlZmluZSBLU1o4NDYzX1RBSUxfVEFHX0VHX1BPUlRfTVx0R0VOTUFTSygyLCAwKVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBza19idWZmICprc3o4NDYzX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdHUxNiBxdWV1ZV9tYXBwaW5nID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7XG4mIzQzO1x0dTggcHJpbyA9IG5ldGRldl90eHFfdG9fdGMoZGV2LCBxdWV1ZV9tYXBwaW5nKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGtzel9jb21tb25feG1pdChza2IsIGRldiwgZmFsc2UsXG4mIzQzO1x0XHRcdCAgICAgICBGSUVMRF9QUkVQKEtTWjg0NjNfVEFJTF9UQUdfUFJJTywgcHJpbyksXG4mIzQzO1x0XHRcdCAgICAgICAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBza19idWZmICprc3o4NDYzX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IGxlbiA9IEtTWl9FR1JFU1NfVEFHX0xFTjtcbiYjNDM7XHRzdHJ1Y3QgcHRwX2hlYWRlciAqcHRwX2hkcjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcHRwX2NsYXNzO1xuJiM0MztcdHVuc2lnbmVkIGludCBwb3J0O1xuJiM0MztcdGt0aW1lX3QgdHM7XG4mIzQzO1x0dTggKnRhZztcbiYjNDM7XG4mIzQzO1x0aWYgKHNrYl9saW5lYXJpemUoc2tiKSkge1xuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdEtTWl9TS0JfQ0Ioc2tiKS1cdTAwM2V0c3RhbXAgPSAwO1xuJiM0MztcbiYjNDM7XHQvKiBUYWcgZGVjb2RpbmcgKi9cbiYjNDM7XHR0YWcgPSBza2JfdGFpbF9wb2ludGVyKHNrYikgLSBLU1pfRUdSRVNTX1RBR19MRU47XG4mIzQzO1x0cG9ydCA9IHRhZ1swXSBcdTAwMjYgS1NaODQ2M19UQUlMX1RBR19FR19QT1JUX007XG4mIzQzO1xuJiM0MztcdF9fc2tiX3B1c2goc2tiLCBFVEhfSExFTik7XG4mIzQzO1x0cHRwX2NsYXNzID0gcHRwX2NsYXNzaWZ5X3Jhdyhza2IpO1xuJiM0MztcdF9fc2tiX3B1bGwoc2tiLCBFVEhfSExFTik7XG4mIzQzO1x0aWYgKHB0cF9jbGFzcyA9PSBQVFBfQ0xBU1NfTk9ORSlcbiYjNDM7XHRcdGdvdG8gY29tbW9uX3JjdjtcbiYjNDM7XG4mIzQzO1x0cHRwX2hkciA9IHB0cF9wYXJzZV9oZWFkZXIoc2tiLCBwdHBfY2xhc3MpO1xuJiM0MztcdGlmIChwdHBfaGRyKSB7XG4mIzQzO1x0XHR0cyA9IGtzel9kZWNvZGVfdHN0YW1wKGdldF91bmFsaWduZWRfYmUzMihcdTAwMjZwdHBfaGRyLVx1MDAzZXJlc2VydmVkMikpO1xuJiM0MztcdFx0S1NaX1NLQl9DQihza2IpLVx1MDAzZXRzdGFtcCA9IHRzO1xuJiM0MztcdFx0cHRwX2hkci1cdTAwM2VyZXNlcnZlZDIgPSAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO2NvbW1vbl9yY3Y6XG4mIzQzO1x0cmV0dXJuIGtzel9jb21tb25fcmN2KHNrYiwgZGV2LCBwb3J0LCBsZW4pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIGtzejg0NjNfbmV0ZGV2X29wcyA9IHtcbiYjNDM7XHQubmFtZVx0PSBLU1o4NDYzX05BTUUsXG4mIzQzO1x0LnByb3RvXHQ9IERTQV9UQUdfUFJPVE9fS1NaODQ2MyxcbiYjNDM7XHQueG1pdFx0PSBrc3o4NDYzX3htaXQsXG4mIzQzO1x0LnJjdlx0PSBrc3o4NDYzX3JjdixcbiYjNDM7XHQuY29ubmVjdCA9IGtzel9jb25uZWN0LFxuJiM0MztcdC5kaXNjb25uZWN0ID0ga3N6X2Rpc2Nvbm5lY3QsXG4mIzQzO1x0Lm5lZWRlZF90YWlscm9vbSA9IEtTWl9JTkdSRVNTX1RBR19MRU4sXG4mIzQzO307XG4mIzQzO1xuJiM0MztEU0FfVEFHX0RSSVZFUihrc3o4NDYzX25ldGRldl9vcHMpO1xuJiM0MztNT0RVTEVfQUxJQVNfRFNBX1RBR19EUklWRVIoRFNBX1RBR19QUk9UT19LU1o4NDYzLCBLU1o4NDYzX05BTUUpO1xuJiM0MztcbiAvKiBGb3IgeG1pdCwgMi82IGJ5dGVzIGFyZSBhZGRlZCBiZWZvcmUgRkNTLlxuICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAqIERBKDZieXRlcyl8U0EoNmJ5dGVzKXwuLi4ufERhdGEobmJ5dGVzKXx0cyg0Ynl0ZXMpfHRhZzAoMWJ5dGUpfHRhZzEoMWJ5dGUpfFxuQEAgLTQ3MSw2ICYjNDM7NTMzLDcgQEAgRFNBX1RBR19EUklWRVIobGFuOTM3eF9uZXRkZXZfb3BzKTtcbiBNT0RVTEVfQUxJQVNfRFNBX1RBR19EUklWRVIoRFNBX1RBR19QUk9UT19MQU45MzdYLCBMQU45MzdYX05BTUUpO1xuIFxuIHN0YXRpYyBzdHJ1Y3QgZHNhX3RhZ19kcml2ZXIgKmRzYV90YWdfZHJpdmVyX2FycmF5W10gPSB7XG4mIzQzO1x0XHUwMDI2RFNBX1RBR19EUklWRVJfTkFNRShrc3o4NDYzX25ldGRldl9vcHMpLFxuIFx0XHUwMDI2RFNBX1RBR19EUklWRVJfTkFNRShrc3o4Nzk1X25ldGRldl9vcHMpLFxuIFx0XHUwMDI2RFNBX1RBR19EUklWRVJfTkFNRShrc3o5NDc3X25ldGRldl9vcHMpLFxuIFx0XHUwMDI2RFNBX1RBR19EUklWRVJfTkFNRShrc3o5ODkzX25ldGRldl9vcHMpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIzOjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNaWNyb2NoaXAgS1NaODQ2MyBEU0Egc3dpdGNoLCBpbmNsdWRpbmcgSVJRLCBQVFAsIGFuZCBhIG5ldyBEU0EgdGFnIHByb3RvY29sLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGZvciBhbiBTUEkvTURJTy1jb25uZWN0ZWQgc3dpdGNoIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFdpdGhvdXQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlLCB0aGUgZHJpdmVyIGNhbm5vdCBwcm9iZSwgYW5kIHRoZSBhZGRlZCBjb2RlIChpbmNsdWRpbmcgdGhlIERTQSB0YWdnZXIpIGlzIHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAzZmFlYjNhMGYwYWI0MjlkNjRjYmUzOTRjZmU5YWZkMGRiMzY4ZjMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyNyAyMzowNTozMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMKaW5kZXggYzRjNzY5MDI4YTIwYzkuLjk0MWFlOWY2NmY3MGJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYwpAQCAtMzYsNiAmIzQzOzM2LDEzIEBACiAjaW5jbHVkZSAmIzM0O2tzejhfcmVnLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrc3o4LmgmIzM0OwogCiYjNDM7LyoKJiM0MzsgKiBXZSB1c2Ugb25seSB0aGUgaGlnaC1ieXRlIChzbyBvZGQgYWRkcmVzc2VzKSBvZiB0aGUgMTYtYml0cyByZWdpc3RlcnMgdG8gZml0CiYjNDM7ICogaW4gdGhlIGNvbW1vbiBJUlEgZnJhbWV3b3JrCiYjNDM7ICovCiYjNDM7I2RlZmluZSBLU1o4NDYzX1JFR19JU1IJCQkweDE5MQomIzQzOyNkZWZpbmUgS1NaODQ2M19SRUdfSUVSCQkJMHgxOTMKJiM0MzsKIC8qIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzIC0gRHJpdmUgc3RyZW5ndGggbWFwcGluZyBmb3IgS1NaODg2MywgS1NaODg3MywgLi4KICAqCQkJICAgICB2YXJpYW50cy4KICAqIFRoaXMgdmFsdWVzIGFyZSBkb2N1bWVudGVkIGluIEtTWjg4NzMgYW5kIEtTWjg4NjMgZGF0YXNoZWV0cy4KQEAgLTE4MSw2ICYjNDM7MTg4LDY5IEBAIHN0YXRpYyBpbnQga3N6OF9wbWVfcHdyaXRlOChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgaW50IG9mZnNldCwgdTggZGF0CiAJcmV0dXJuIGtzejhfaW5kX3dyaXRlOChkZXYsIHRhYmxlLCAodTgpKG9mZnNldCksIGRhdGEpOwogfQogCiYjNDM7c3RhdGljIHZvaWQga3N6ODQ2M19pcnFfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3N6X2lycSAqa2lycSA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwomIzQzOwomIzQzOwlraXJxLSZndDttYXNrZWQgJmFtcDs9IH5CSVQoZC0mZ3Q7aHdpcnEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBrc3o4NDYzX2lycV91bm1hc2soc3RydWN0IGlycV9kYXRhICpkKQomIzQzO3sKJiM0MzsJc3RydWN0IGtzel9pcnEgKmtpcnEgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKJiM0MzsKJiM0MzsJa2lycS0mZ3Q7bWFza2VkIHw9IEJJVChkLSZndDtod2lycSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXJxX2NoaXAga3N6ODQ2M19pcnFfY2hpcCA9IHsKJiM0MzsJLm5hbWUJCQk9ICYjMzQ7a3N6ODQ2My1pcnEmIzM0OywKJiM0MzsJLmlycV9tYXNrCQk9IGtzejg0NjNfaXJxX21hc2ssCiYjNDM7CS5pcnFfdW5tYXNrCQk9IGtzejg0NjNfaXJxX3VubWFzaywKJiM0MzsJLmlycV9idXNfbG9jawkJPSBrc3pfaXJxX2J1c19sb2NrLAomIzQzOwkuaXJxX2J1c19zeW5jX3VubG9jawk9IGtzel9pcnFfYnVzX3N5bmNfdW5sb2NrLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBrc3o4NDYzX2lycV9kb21haW5fbWFwKHN0cnVjdCBpcnFfZG9tYWluICpkLAomIzQzOwkJCQkgIHVuc2lnbmVkIGludCBpcnEsIGlycV9od19udW1iZXJfdCBod2lycSkKJiM0Mzt7CiYjNDM7CWlycV9zZXRfY2hpcF9kYXRhKGlycSwgZC0mZ3Q7aG9zdF9kYXRhKTsKJiM0MzsJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKGlycSwgJmFtcDtrc3o4NDYzX2lycV9jaGlwLCBoYW5kbGVfbGV2ZWxfaXJxKTsKJiM0MzsJaXJxX3NldF9ub3Byb2JlKGlycSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGlycV9kb21haW5fb3BzIGtzejg0NjNfaXJxX2RvbWFpbl9vcHMgPSB7CiYjNDM7CS5tYXAJPSBrc3o4NDYzX2lycV9kb21haW5fbWFwLAomIzQzOwkueGxhdGUJPSBpcnFfZG9tYWluX3hsYXRlX3R3b2NlbGwsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IGtzejg0NjNfZ2lycV9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGtzel9pcnEgKmdpcnEgPSAmYW1wO2Rldi0mZ3Q7Z2lycTsKJiM0MzsKJiM0MzsJZ2lycS0mZ3Q7bmlycXMgPSA4OwomIzQzOwlnaXJxLSZndDtyZWdfbWFzayA9IEtTWjg0NjNfUkVHX0lFUjsKJiM0MzsJZ2lycS0mZ3Q7cmVnX3N0YXR1cyA9IEtTWjg0NjNfUkVHX0lTUjsKJiM0MzsJZ2lycS0mZ3Q7bWFza2VkID0gMDsKJiM0MzsJc25wcmludGYoZ2lycS0mZ3Q7bmFtZSwgc2l6ZW9mKGdpcnEtJmd0O25hbWUpLCAmIzM0O2tzejg0NjMtZ2lycSYjMzQ7KTsKJiM0MzsKJiM0MzsJZ2lycS0mZ3Q7aXJxX251bSA9IGRldi0mZ3Q7aXJxOwomIzQzOwomIzQzOwlyZXR1cm4ga3N6X2lycV9jb21tb25fc2V0dXAoZGV2LCBnaXJxLCAmYW1wO2tzejg0NjNfaXJxX2RvbWFpbl9vcHMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGtzejg0NjNfcmVzZXRfc3dpdGNoKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwlrc3pfY2ZnKGRldiwgS1NaODQ2M19SRUdfU1dfUkVTRVQsCiYjNDM7CQlLU1o4NDYzX0dMT0JBTF9TT0ZUV0FSRV9SRVNFVCB8IEtTWjg0NjNfUFRQX1NPRlRXQVJFX1JFU0VULAomIzQzOwkJdHJ1ZSk7CiYjNDM7CWtzel9jZmcoZGV2LCBLU1o4NDYzX1JFR19TV19SRVNFVCwKJiM0MzsJCUtTWjg0NjNfR0xPQkFMX1NPRlRXQVJFX1JFU0VUIHwgS1NaODQ2M19QVFBfU09GVFdBUkVfUkVTRVQsCiYjNDM7CQlmYWxzZSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQga3N6OF9yZXNldF9zd2l0Y2goc3RydWN0IGtzel9kZXZpY2UgKmRldikKIHsKIAlpZiAoa3N6X2lzX2tzejg4eDMoZGV2KSkgewpAQCAtMTg5LDExICYjNDM7MjU5LDYgQEAgc3RhdGljIGludCBrc3o4X3Jlc2V0X3N3aXRjaChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KQogCQkJS1NaODg2M19HTE9CQUxfU09GVFdBUkVfUkVTRVQgfCBLU1o4ODYzX1BDU19SRVNFVCwgdHJ1ZSk7CiAJCWtzel9jZmcoZGV2LCBLU1o4ODYzX1JFR19TV19SRVNFVCwKIAkJCUtTWjg4NjNfR0xPQkFMX1NPRlRXQVJFX1JFU0VUIHwgS1NaODg2M19QQ1NfUkVTRVQsIGZhbHNlKTsKLQl9IGVsc2UgaWYgKGtzel9pc19rc3o4NDYzKGRldikpIHsKLQkJa3N6X2NmZyhkZXYsIEtTWjg0NjNfUkVHX1NXX1JFU0VULAotCQkJS1NaODQ2M19HTE9CQUxfU09GVFdBUkVfUkVTRVQsIHRydWUpOwotCQlrc3pfY2ZnKGRldiwgS1NaODQ2M19SRUdfU1dfUkVTRVQsCi0JCQlLU1o4NDYzX0dMT0JBTF9TT0ZUV0FSRV9SRVNFVCwgZmFsc2UpOwogCX0gZWxzZSB7CiAJCS8qIHJlc2V0IHN3aXRjaCAqLwogCQlrc3pfd3JpdGU4KGRldiwgUkVHX1BPV0VSX01BTkFHRU1FTlRfMSwKQEAgLTIwMjYsNiAmIzQzOzIwOTEsNTAgQEAgc3RhdGljIHZvaWQga3N6ODh4M19jb25maWdfcm1paV9jbGsoc3RydWN0IGtzel9kZXZpY2UgKmRldikKIAkJS1NaODhYM19QT1JUM19STUlJX0NMS19JTlRFUk5BTCwgcm1paV9jbGtfaW50ZXJuYWwpOwogfQogCiYjNDM7c3RhdGljIHZvaWQga3N6ODQ2M19jb25maWdfY3B1X3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQomIzQzO3sKJiM0MzsJc3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLSZndDtwcml2OwomIzQzOwlzdHJ1Y3Qga3N6X3BvcnQgKnA7CiYjNDM7CXU4IGZpYmVyX3BvcnRzID0gMDsKJiM0MzsJY29uc3QgdTMyICptYXNrczsKJiM0MzsJY29uc3QgdTE2ICpyZWdzOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJbWFza3MgPSBkZXYtJmd0O2luZm8tJmd0O21hc2tzOwomIzQzOwlyZWdzID0gZGV2LSZndDtpbmZvLSZndDtyZWdzOwomIzQzOwomIzQzOwlrc3pfY2ZnKGRldiwgcmVnc1tTX1RBSUxfVEFHX0NUUkxdLCBtYXNrc1tTV19UQUlMX1RBR19FTkFCTEVdLCB0cnVlKTsKJiM0MzsKJiM0MzsJa3N6OF9wb3J0X3NldHVwKGRldiwgZGV2LSZndDtjcHVfcG9ydCwgdHJ1ZSk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBkZXYtJmd0O3BoeV9wb3J0X2NudDsgaSYjNDM7JiM0MzspCiYjNDM7CQlrc3pfcG9ydF9zdHBfc3RhdGVfc2V0KGRzLCBpLCBCUl9TVEFURV9ESVNBQkxFRCk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBkZXYtJmd0O3BoeV9wb3J0X2NudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXAgPSAmYW1wO2Rldi0mZ3Q7cG9ydHNbaV07CiYjNDM7CQlrc3pfcG9ydF9jZmcoZGV2LCBpLCByZWdzW1BfU1RQX0NUUkxdLCBQT1JUX0ZPUkNFX0ZMT1dfQ1RSTCwKJiM0MzsJCQkgICAgIHAtJmd0O2ZpYmVyKTsKJiM0MzsJCWlmIChwLSZndDtmaWJlcikKJiM0MzsJCQlmaWJlcl9wb3J0cyB8PSAoMSAmbHQ7Jmx0OyBpKTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTZXR1cCBmaWJlciBwb3J0cy4gKi8KJiM0MzsJaWYgKGZpYmVyX3BvcnRzKSB7CiYjNDM7CQlmaWJlcl9wb3J0cyAmYW1wOz0gMzsKJiM0MzsJCXJlZ21hcF91cGRhdGVfYml0cyhrc3pfcmVnbWFwXzE2KGRldiksIEtTWjg0NjNfUkVHX0NGR19DVFJMLAomIzQzOwkJCQkgICBmaWJlcl9wb3J0cyAmbHQ7Jmx0OyBQT1JUX0NPUFBFUl9NT0RFX1MsCiYjNDM7CQkJCSAgIDApOwomIzQzOwkJcmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSwgS1NaODQ2M19SRUdfRFNQX0NUUkxfNiwKJiM0MzsJCQkJICAgQ09QUEVSX1JFQ0VJVkVfQURKVVNUTUVOVCwgMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogVHVybiBvZmYgUFRQIGZ1bmN0aW9uIGFzIHRoZSBzd2l0Y2ggZW5hYmxlcyBpdCBieSBkZWZhdWx0ICovCiYjNDM7CXJlZ21hcF91cGRhdGVfYml0cyhrc3pfcmVnbWFwXzE2KGRldiksIEtTWjg0NjNfUFRQX01TR19DT05GMSwKJiM0MzsJCQkgICBQVFBfRU5BQkxFLCAwKTsKJiM0MzsJcmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSwgS1NaODQ2M19QVFBfQ0xLX0NUUkwsCiYjNDM7CQkJICAgUFRQX0NMS19FTkFCTEUsIDApOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGtzejhfY29uZmlnX2NwdV9wb3J0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIHsKIAlzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtJmd0O3ByaXY7CkBAIC0yMDMzLDcgJiM0MzsyMTQyLDYgQEAgc3RhdGljIHZvaWQga3N6OF9jb25maWdfY3B1X3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogCWNvbnN0IHUzMiAqbWFza3M7CiAJY29uc3QgdTE2ICpyZWdzOwogCXU4IHJlbW90ZTsKLQl1OCBmaWJlcl9wb3J0cyA9IDA7CiAJaW50IGk7CiAKIAltYXNrcyA9IGRldi0mZ3Q7aW5mby0mZ3Q7bWFza3M7CkBAIC0yMDY0LDMyICYjNDM7MjE3Miw2IEBAIHN0YXRpYyB2b2lkIGtzejhfY29uZmlnX2NwdV9wb3J0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIAkJZWxzZQogCQkJa3N6X3BvcnRfY2ZnKGRldiwgaSwgcmVnc1tQX1NUUF9DVFJMXSwKIAkJCQkgICAgIFBPUlRfRk9SQ0VfRkxPV19DVFJMLCBmYWxzZSk7Ci0JCWlmIChwLSZndDtmaWJlcikKLQkJCWZpYmVyX3BvcnRzIHw9ICgxICZsdDsmbHQ7IGkpOwotCX0KLQlpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSkgewotCQkvKiBTZXR1cCBmaWJlciBwb3J0cy4gKi8KLQkJaWYgKGZpYmVyX3BvcnRzKSB7Ci0JCQlmaWJlcl9wb3J0cyAmYW1wOz0gMzsKLQkJCXJlZ21hcF91cGRhdGVfYml0cyhrc3pfcmVnbWFwXzE2KGRldiksCi0JCQkJCSAgIEtTWjg0NjNfUkVHX0NGR19DVFJMLAotCQkJCQkgICBmaWJlcl9wb3J0cyAmbHQ7Jmx0OyBQT1JUX0NPUFBFUl9NT0RFX1MsCi0JCQkJCSAgIDApOwotCQkJcmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSwKLQkJCQkJICAgS1NaODQ2M19SRUdfRFNQX0NUUkxfNiwKLQkJCQkJICAgQ09QUEVSX1JFQ0VJVkVfQURKVVNUTUVOVCwgMCk7Ci0JCX0KLQotCQkvKiBUdXJuIG9mZiBQVFAgZnVuY3Rpb24gYXMgdGhlIHN3aXRjaCYjMzk7cyBwcm9wcmlldGFyeSB3YXkgb2YKLQkJICogaGFuZGxpbmcgdGltZXN0YW1wIGlzIG5vdCBzdXBwb3J0ZWQgaW4gY3VycmVudCBMaW51eCBQVFAKLQkJICogc3RhY2sgaW1wbGVtZW50YXRpb24uCi0JCSAqLwotCQlyZWdtYXBfdXBkYXRlX2JpdHMoa3N6X3JlZ21hcF8xNihkZXYpLAotCQkJCSAgIEtTWjg0NjNfUFRQX01TR19DT05GMSwKLQkJCQkgICBQVFBfRU5BQkxFLCAwKTsKLQkJcmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSwKLQkJCQkgICBLU1o4NDYzX1BUUF9DTEtfQ1RSTCwKLQkJCQkgICBQVFBfQ0xLX0VOQUJMRSwgMCk7CiAJfQogfQogCkBAIC0yMzAwLDYgJiM0MzsyMzgyLDE1MCBAQCBzdGF0aWMgdm9pZCBrc3o4OHh4X3JfbWliX3N0YXRzNjQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpCiAJc3Bpbl91bmxvY2soJmFtcDttaWItJmd0O3N0YXRzNjRfbG9jayk7CiB9CiAKJiM0MztzdGF0aWMgaW50IGtzejg0NjNfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQomIzQzO3sKJiM0MzsJc3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLSZndDtwcml2OwomIzQzOwl1MTYgc3Rvcm1fbWFzaywgc3Rvcm1fcmF0ZTsKJiM0MzsJc3RydWN0IGtzel9wb3J0ICpwOwomIzQzOwljb25zdCB1MTYgKnJlZ3M7CiYjNDM7CWludCBpLCByZXQ7CiYjNDM7CiYjNDM7CXJlZ3MgPSBkZXYtJmd0O2luZm8tJmd0O3JlZ3M7CiYjNDM7CiYjNDM7CWRldi0mZ3Q7dmxhbl9jYWNoZSA9IGRldm1fa2NhbGxvYyhkZXYtJmd0O2Rldiwgc2l6ZW9mKHN0cnVjdCB2bGFuX3RhYmxlKSwKJiM0MzsJCQkJICAgICAgIGRldi0mZ3Q7aW5mby0mZ3Q7bnVtX3ZsYW5zLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFkZXYtJmd0O3ZsYW5fY2FjaGUpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcmV0ID0ga3N6ODQ2M19yZXNldF9zd2l0Y2goZGV2KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2Vycihkcy0mZ3Q7ZGV2LCAmIzM0O2ZhaWxlZCB0byByZXNldCBzd2l0Y2hcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogc2V0IGJyb2FkY2FzdCBzdG9ybSBwcm90ZWN0aW9uIDEwJSByYXRlICovCiYjNDM7CXN0b3JtX21hc2sgPSBCUk9BRENBU1RfU1RPUk1fUkFURTsKJiM0MzsJc3Rvcm1fcmF0ZSA9IChCUk9BRENBU1RfU1RPUk1fVkFMVUUgKiBCUk9BRENBU1RfU1RPUk1fUFJPVF9SQVRFKSAvIDEwMDsKJiM0MzsJc3Rvcm1fbWFzayA9IHN3YWIxNihzdG9ybV9tYXNrKTsKJiM0MzsJc3Rvcm1fcmF0ZSA9IHN3YWIxNihzdG9ybV9yYXRlKTsKJiM0MzsJcmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSwgcmVnc1tTX0JST0FEQ0FTVF9DVFJMXSwKJiM0MzsJCQkgICBzdG9ybV9tYXNrLCBzdG9ybV9yYXRlKTsKJiM0MzsKJiM0MzsJa3N6ODQ2M19jb25maWdfY3B1X3BvcnQoZHMpOwomIzQzOwomIzQzOwlrc3o4X2VuYWJsZV9zdHBfYWRkcihkZXYpOwomIzQzOwomIzQzOwlkcy0mZ3Q7bnVtX3R4X3F1ZXVlcyA9IGRldi0mZ3Q7aW5mby0mZ3Q7bnVtX3R4X3F1ZXVlczsKJiM0MzsKJiM0MzsJcmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfOChkZXYpLCByZWdzW1NfTVVMVElDQVNUX0NUUkxdLAomIzQzOwkJCSAgIE1VTFRJQ0FTVF9TVE9STV9ESVNBQkxFLCBNVUxUSUNBU1RfU1RPUk1fRElTQUJMRSk7CiYjNDM7CiYjNDM7CWtzel9pbml0X21pYl90aW1lcihkZXYpOwomIzQzOwomIzQzOwlkcy0mZ3Q7Y29uZmlndXJlX3ZsYW5fd2hpbGVfbm90X2ZpbHRlcmluZyA9IGZhbHNlOwomIzQzOwlkcy0mZ3Q7ZHNjcF9wcmlvX21hcHBpbmdfaXNfZ2xvYmFsID0gdHJ1ZTsKJiM0MzsJZHMtJmd0O210dV9lbmZvcmNlbWVudF9pbmdyZXNzID0gdHJ1ZTsKJiM0MzsKJiM0MzsJLyogV2UgcmVseSBvbiBzb2Z0d2FyZSB1bnRhZ2dpbmcgb24gdGhlIENQVSBwb3J0LCBzbyB0aGF0IHdlCiYjNDM7CSAqIGNhbiBzdXBwb3J0IGJvdGggdGFnZ2VkIGFuZCB1bnRhZ2dlZCBWTEFOcwomIzQzOwkgKi8KJiM0MzsJZHMtJmd0O3VudGFnX2JyaWRnZV9wdmlkID0gdHJ1ZTsKJiM0MzsKJiM0MzsJLyogVkxBTiBmaWx0ZXJpbmcgaXMgcGFydGx5IGNvbnRyb2xsZWQgYnkgdGhlIGdsb2JhbCBWTEFOCiYjNDM7CSAqIEVuYWJsZSBmbGFnCiYjNDM7CSAqLwomIzQzOwlkcy0mZ3Q7dmxhbl9maWx0ZXJpbmdfaXNfZ2xvYmFsID0gdHJ1ZTsKJiM0MzsKJiM0MzsJLyogRW5hYmxlIGF1dG9tYXRpYyBmYXN0IGFnaW5nIHdoZW4gbGluayBjaGFuZ2VkIGRldGVjdGVkLiAqLwomIzQzOwlrc3pfY2ZnKGRldiwgU19MSU5LX0FHSU5HX0NUUkwsIFNXX0xJTktfQVVUT19BR0lORywgdHJ1ZSk7CiYjNDM7CiYjNDM7CS8qIEVuYWJsZSBhZ2dyZXNzaXZlIGJhY2sgb2ZmIGFsZ29yaXRobSBpbiBoYWxmIGR1cGxleCBtb2RlLiAqLwomIzQzOwlyZXQgPSBrc3pfcm13OChkZXYsIFJFR19TV19DVFJMXzEsIFNXX0FHR1JfQkFDS09GRiwgU1dfQUdHUl9CQUNLT0ZGKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE1ha2Ugc3VyZSB1bmljYXN0IFZMQU4gYm91bmRhcnkgaXMgc2V0IGFzIGRlZmF1bHQgYW5kCiYjNDM7CSAqIGVuYWJsZSBubyBleGNlc3NpdmUgY29sbGlzaW9uIGRyb3AuCiYjNDM7CSAqLwomIzQzOwlyZXQgPSBrc3pfcm13OChkZXYsIFJFR19TV19DVFJMXzIsCiYjNDM7CQkgICAgICAgVU5JQ0FTVF9WTEFOX0JPVU5EQVJZIHwgTk9fRVhDX0NPTExJU0lPTl9EUk9QLAomIzQzOwkJICAgICAgIFVOSUNBU1RfVkxBTl9CT1VOREFSWSB8IE5PX0VYQ19DT0xMSVNJT05fRFJPUCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlrc3pfY2ZnKGRldiwgU19SRVBMQUNFX1ZJRF9DVFJMLCBTV19SRVBMQUNFX1ZJRCwgZmFsc2UpOwomIzQzOwomIzQzOwlrc3pfY2ZnKGRldiwgU19NSVJST1JfQ1RSTCwgU1dfTUlSUk9SX1JYX1RYLCBmYWxzZSk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyAoZGV2LSZndDtpbmZvLSZndDtudW1fdmxhbnMgLyA0KTsgaSYjNDM7JiM0MzspCiYjNDM7CQlrc3o4X3Jfdmxhbl9lbnRyaWVzKGRldiwgaSk7CiYjNDM7CiYjNDM7CS8qIFN0YXJ0IHdpdGggbGVhcm5pbmcgZGlzYWJsZWQgb24gc3RhbmRhbG9uZSB1c2VyIHBvcnRzLCBhbmQgZW5hYmxlZAomIzQzOwkgKiBvbiB0aGUgQ1BVIHBvcnQuIEluIGxhY2sgb2Ygb3RoZXIgZmluZXIgbWVjaGFuaXNtcywgbGVhcm5pbmcgb24gdGhlCiYjNDM7CSAqIENQVSBwb3J0IHdpbGwgYXZvaWQgZmxvb2RpbmcgYnJpZGdlIGxvY2FsIGFkZHJlc3NlcyBvbiB0aGUgbmV0d29yawomIzQzOwkgKiBpbiBzb21lIGNhc2VzLgomIzQzOwkgKi8KJiM0MzsJcCA9ICZhbXA7ZGV2LSZndDtwb3J0c1tkZXYtJmd0O2NwdV9wb3J0XTsKJiM0MzsJcC0mZ3Q7bGVhcm5pbmcgPSB0cnVlOwomIzQzOwomIzQzOwlpZiAoZGV2LSZndDtpcnEgJmd0OyAwKSB7CiYjNDM7CQlyZXQgPSBrc3o4NDYzX2dpcnFfc2V0dXAoZGV2KTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCXJldCA9IGtzejg0NjNfcHRwX2lycV9zZXR1cChkcyk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gZnJlZV9naXJxOwomIzQzOwomIzQzOwkJcmV0ID0ga3N6X3B0cF9jbG9ja19yZWdpc3Rlcihkcyk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJZGV2X2VycihkZXYtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrOiAlZFxuJiMzNDssCiYjNDM7CQkJCXJldCk7CiYjNDM7CQkJZ290byBmcmVlX3B0cF9pcnE7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0ga3N6X21kaW9fcmVnaXN0ZXIoZGV2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApIHsKJiM0MzsJCWRldl9lcnIoZGV2LSZndDtkZXYsICYjMzQ7ZmFpbGVkIHRvIHJlZ2lzdGVyIHRoZSBtZGlvJiMzNDspOwomIzQzOwkJZ290byBwdHBfY2xvY2tfdW5yZWdpc3RlcjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBrc3pfZGNiX2luaXQoZGV2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gcHRwX2Nsb2NrX3VucmVnaXN0ZXI7CiYjNDM7CiYjNDM7CS8qIHN0YXJ0IHN3aXRjaCAqLwomIzQzOwlyZWdtYXBfdXBkYXRlX2JpdHMoa3N6X3JlZ21hcF84KGRldiksIHJlZ3NbU19TVEFSVF9DVFJMXSwKJiM0MzsJCQkgICBTV19TVEFSVCwgU1dfU1RBUlQpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztwdHBfY2xvY2tfdW5yZWdpc3RlcjoKJiM0MzsJaWYgKGRldi0mZ3Q7aXJxICZndDsgMCkKJiM0MzsJCWtzel9wdHBfY2xvY2tfdW5yZWdpc3Rlcihkcyk7CiYjNDM7ZnJlZV9wdHBfaXJxOgomIzQzOwlpZiAoZGV2LSZndDtpcnEgJmd0OyAwKQomIzQzOwkJa3N6ODQ2M19wdHBfaXJxX2ZyZWUoZHMpOwomIzQzO2ZyZWVfZ2lycToKJiM0MzsJaWYgKGRldi0mZ3Q7aXJxICZndDsgMCkKJiM0MzsJCWtzel9pcnFfZnJlZSgmYW1wO2Rldi0mZ3Q7Z2lycSk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGtzejg0NjNfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQomIzQzO3sKJiM0MzsJc3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLSZndDtwcml2OwomIzQzOwomIzQzOwlpZiAoZGV2LSZndDtpcnEgJmd0OyAwKSB7CiYjNDM7CQlrc3pfcHRwX2Nsb2NrX3VucmVnaXN0ZXIoZHMpOwomIzQzOwkJa3N6ODQ2M19wdHBfaXJxX2ZyZWUoZHMpOwomIzQzOwkJa3N6X2lycV9mcmVlKCZhbXA7ZGV2LSZndDtnaXJxKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIC8qKgogICoga3N6ODh4M19kcml2ZV9zdHJlbmd0aF93cml0ZSgpIC0gU2V0IHRoZSBkcml2ZSBzdHJlbmd0aCBjb25maWd1cmF0aW9uIGZvcgogICoJCQkJICAgIEtTWjg4NjMgY29tcGF0aWJsZSBjaGlwIHZhcmlhbnRzLgpAQCAtMjQ0NSwxMCAmIzQzOzI2NzEsNiBAQCBzdGF0aWMgaW50IGtzejhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogCS8qIHNldCBicm9hZGNhc3Qgc3Rvcm0gcHJvdGVjdGlvbiAxMCUgcmF0ZSAqLwogCXN0b3JtX21hc2sgPSBCUk9BRENBU1RfU1RPUk1fUkFURTsKIAlzdG9ybV9yYXRlID0gKEJST0FEQ0FTVF9TVE9STV9WQUxVRSAqIEJST0FEQ0FTVF9TVE9STV9QUk9UX1JBVEUpIC8gMTAwOwotCWlmIChrc3pfaXNfa3N6ODQ2MyhkZXYpKSB7Ci0JCXN0b3JtX21hc2sgPSBzd2FiMTYoc3Rvcm1fbWFzayk7Ci0JCXN0b3JtX3JhdGUgPSBzd2FiMTYoc3Rvcm1fcmF0ZSk7Ci0JfQogCXJlZ21hcF91cGRhdGVfYml0cyhrc3pfcmVnbWFwXzE2KGRldiksIHJlZ3NbU19CUk9BRENBU1RfQ1RSTF0sCiAJCQkgICBzdG9ybV9tYXNrLCBzdG9ybV9yYXRlKTsKIApAQCAtMjQ5OSw3ICYjNDM7MjcyMSw3IEBAIHN0YXRpYyBpbnQga3N6OF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiAKIAlrc3pfY2ZnKGRldiwgU19NSVJST1JfQ1RSTCwgU1dfTUlSUk9SX1JYX1RYLCBmYWxzZSk7CiAKLQlpZiAoIWtzel9pc19rc3o4OHgzKGRldikgJmFtcDsmYW1wOyAha3N6X2lzX2tzejg0NjMoZGV2KSkKJiM0MzsJaWYgKCFrc3pfaXNfa3N6ODh4MyhkZXYpKQogCQlrc3pfY2ZnKGRldiwgUkVHX1NXX0NUUkxfMTksIFNXX0lOU19UQUdfRU5BQkxFLCB0cnVlKTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyAoZGV2LSZndDtpbmZvLSZndDtudW1fdmxhbnMgLyA0KTsgaSYjNDM7JiM0MzspCkBAIC0yNjIzLDYgJiM0MzsyODQ1LDkgQEAgc3RhdGljIHUzMiBrc3o4X2dldF9wb3J0X2FkZHIoaW50IHBvcnQsIGludCBvZmZzZXQpCiAKIHN0YXRpYyB1MzIga3N6ODQ2M19nZXRfcG9ydF9hZGRyKGludCBwb3J0LCBpbnQgb2Zmc2V0KQogewomIzQzOwlpZiAob2Zmc2V0ICZndDs9IEtTWjg0NjNfUFRQX0NMS19DVFJMKQomIzQzOwkJcmV0dXJuIG9mZnNldCAmIzQzOyAweDIwICogcG9ydDsKJiM0MzsKIAlyZXR1cm4gb2Zmc2V0ICYjNDM7IDB4MTggKiBwb3J0OwogfQogCkBAIC0yNzU1LDcgJiM0MzsyOTgwLDcgQEAgc3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBrc3o4NDYzX2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLAogCQkJCQkJICAgICAgaW50IHBvcnQsCiAJCQkJCQkgICAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXApCiB7Ci0JcmV0dXJuIERTQV9UQUdfUFJPVE9fS1NaOTg5MzsKJiM0MzsJcmV0dXJuIERTQV9UQUdfUFJPVE9fS1NaODQ2MzsKIH0KIAogc3RhdGljIGludCBrc3o4NDYzX2Nvbm5lY3RfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywKQEAgLTI3NjMsNyAmIzQzOzI5ODgsNyBAQCBzdGF0aWMgaW50IGtzejg0NjNfY29ubmVjdF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLAogewogCXN0cnVjdCBrc3pfdGFnZ2VyX2RhdGEgKnRhZ2dlcl9kYXRhOwogCi0JaWYgKHByb3RvICE9IERTQV9UQUdfUFJPVE9fS1NaOTg5MykKJiM0MzsJaWYgKHByb3RvICE9IERTQV9UQUdfUFJPVE9fS1NaODQ2MykKIAkJcmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7CiAKIAl0YWdnZXJfZGF0YSA9IGtzel90YWdnZXJfZGF0YShkcyk7CkBAIC0yODg5LDggJiM0MzszMTE0LDggQEAgY29uc3Qgc3RydWN0IGtzel9kZXZfb3BzIGtzejg4eHhfZGV2X29wcyA9IHsKIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBrc3o4NDYzX3N3aXRjaF9vcHMgPSB7CiAJLmdldF90YWdfcHJvdG9jb2wJPSBrc3o4NDYzX2dldF90YWdfcHJvdG9jb2wsCiAJLmNvbm5lY3RfdGFnX3Byb3RvY29sICAgPSBrc3o4NDYzX2Nvbm5lY3RfdGFnX3Byb3RvY29sLAotCS5zZXR1cAkJCT0ga3N6OF9zZXR1cCwKLQkudGVhcmRvd24JCT0ga3N6X3RlYXJkb3duLAomIzQzOwkuc2V0dXAJCQk9IGtzejg0NjNfc2V0dXAsCiYjNDM7CS50ZWFyZG93bgkJPSBrc3o4NDYzX3RlYXJkb3duLAogCS5waHlfcmVhZAkJPSBrc3o4NDYzX3BoeV9yZWFkMTYsCiAJLnBoeV93cml0ZQkJPSBrc3o4NDYzX3BoeV93cml0ZTE2LAogCS5waHlsaW5rX2dldF9jYXBzCT0ga3N6OF9waHlsaW5rX2dldF9jYXBzLApAQCAtMjkxOCw5ICYjNDM7MzE0Myw5IEBAIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBrc3o4NDYzX3N3aXRjaF9vcHMgPSB7CiAJLnBvcnRfbWF4X210dQkJPSBrc3o4OHh4X21heF9tdHUsCiAJLnN1c3BlbmQJCT0ga3N6X3N1c3BlbmQsCiAJLnJlc3VtZQkJCT0ga3N6X3Jlc3VtZSwKLQkuZ2V0X3RzX2luZm8JCT0ga3N6X2dldF90c19pbmZvLAomIzQzOwkuZ2V0X3RzX2luZm8JCT0ga3N6ODQ2M19nZXRfdHNfaW5mbywKIAkucG9ydF9od3RzdGFtcF9nZXQJPSBrc3pfaHd0c3RhbXBfZ2V0LAotCS5wb3J0X2h3dHN0YW1wX3NldAk9IGtzel9od3RzdGFtcF9zZXQsCiYjNDM7CS5wb3J0X2h3dHN0YW1wX3NldAk9IGtzejg0NjNfaHd0c3RhbXBfc2V0LAogCS5wb3J0X3R4dHN0YW1wCQk9IGtzel9wb3J0X3R4dHN0YW1wLAogCS5wb3J0X3J4dHN0YW1wCQk9IGtzel9wb3J0X3J4dHN0YW1wLAogCS5wb3J0X3NldHVwX3RjCQk9IGtzejhfc2V0dXBfdGMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejhfcmVnLmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejhfcmVnLmgKaW5kZXggOTgxYWI0NDFkOWI3MTkuLjZiYzUxMWRhMWY3ZGRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejhfcmVnLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4X3JlZy5oCkBAIC03ODYsNiAmIzQzOzc4Niw3IEBACiAjZGVmaW5lIEtTWjg0NjNfUkVHX1NXX1JFU0VUCQkweDEyNgogCiAjZGVmaW5lIEtTWjg0NjNfR0xPQkFMX1NPRlRXQVJFX1JFU0VUCUJJVCgwKQomIzQzOyNkZWZpbmUgS1NaODQ2M19QVFBfU09GVFdBUkVfUkVTRVQJQklUKDIpCiAKICNkZWZpbmUgS1NaODQ2M19QVFBfQ0xLX0NUUkwJCTB4NjAwCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMKaW5kZXggNjdhYjZkZGI5ZTUzZjIuLmZmMWJlNTQwYjU0NmZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYwpAQCAtMjQxOSwxNCAmIzQzOzI0MTksMTQgQEAgc3RhdGljIHZvaWQga3N6X2lycV91bm1hc2soc3RydWN0IGlycV9kYXRhICpkKQogCWtpcnEtJmd0O21hc2tlZCAmYW1wOz0gfkJJVChkLSZndDtod2lycSk7CiB9CiAKLXN0YXRpYyB2b2lkIGtzel9pcnFfYnVzX2xvY2soc3RydWN0IGlycV9kYXRhICpkKQomIzQzO3ZvaWQga3N6X2lycV9idXNfbG9jayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJc3RydWN0IGtzel9pcnEgKmtpcnEgID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAKIAltdXRleF9sb2NrKCZhbXA7a2lycS0mZ3Q7ZGV2LSZndDtsb2NrX2lycSk7CiB9CiAKLXN0YXRpYyB2b2lkIGtzel9pcnFfYnVzX3N5bmNfdW5sb2NrKHN0cnVjdCBpcnFfZGF0YSAqZCkKJiM0Mzt2b2lkIGtzel9pcnFfYnVzX3N5bmNfdW5sb2NrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlzdHJ1Y3Qga3N6X2lycSAqa2lycSAgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKIAlzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0ga2lycS0mZ3Q7ZGV2OwpAQCAtMjUwNCwxNCAmIzQzOzI1MDQsMTUgQEAgc3RhdGljIGlycXJldHVybl90IGtzel9pcnFfdGhyZWFkX2ZuKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIAlyZXR1cm4gKG5oYW5kbGVkICZndDsgMCA/IElSUV9IQU5ETEVEIDogSVJRX05PTkUpOwogfQogCi1zdGF0aWMgaW50IGtzel9pcnFfY29tbW9uX3NldHVwKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHN0cnVjdCBrc3pfaXJxICpraXJxKQomIzQzO2ludCBrc3pfaXJxX2NvbW1vbl9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBzdHJ1Y3Qga3N6X2lycSAqa2lycSwKJiM0MzsJCQkgY29uc3Qgc3RydWN0IGlycV9kb21haW5fb3BzICpvcHMpCiB7CiAJaW50IHJldCwgbjsKIAogCWtpcnEtJmd0O2RldiA9IGRldjsKIAotCWtpcnEtJmd0O2RvbWFpbiA9IGlycV9kb21haW5fY3JlYXRlX3NpbXBsZShkZXZfZndub2RlKGRldi0mZ3Q7ZGV2KSwga2lycS0mZ3Q7bmlycXMsIDAsCi0JCQkJCQkmYW1wO2tzel9pcnFfZG9tYWluX29wcywga2lycSk7CiYjNDM7CWtpcnEtJmd0O2RvbWFpbiA9IGlycV9kb21haW5fY3JlYXRlX3NpbXBsZShkZXZfZndub2RlKGRldi0mZ3Q7ZGV2KSwKJiM0MzsJCQkJCQlraXJxLSZndDtuaXJxcywgMCwgb3BzLCBraXJxKTsKIAlpZiAoIWtpcnEtJmd0O2RvbWFpbikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTI1NDMsNyAmIzQzOzI1NDQsNyBAQCBpbnQga3N6X2dpcnFfc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldikKIAogCWdpcnEtJmd0O2lycV9udW0gPSBkZXYtJmd0O2lycTsKIAotCXJldHVybiBrc3pfaXJxX2NvbW1vbl9zZXR1cChkZXYsIGdpcnEpOwomIzQzOwlyZXR1cm4ga3N6X2lycV9jb21tb25fc2V0dXAoZGV2LCBnaXJxLCAmYW1wO2tzel9pcnFfZG9tYWluX29wcyk7CiB9CiAKIGludCBrc3pfcGlycV9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1OCBwKQpAQCAtMjU2MCw3ICYjNDM7MjU2MSw3IEBAIGludCBrc3pfcGlycV9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1OCBwKQogCWlmICghcGlycS0mZ3Q7aXJxX251bSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXR1cm4ga3N6X2lycV9jb21tb25fc2V0dXAoZGV2LCBwaXJxKTsKJiM0MzsJcmV0dXJuIGtzel9pcnFfY29tbW9uX3NldHVwKGRldiwgcGlycSwgJmFtcDtrc3pfaXJxX2RvbWFpbl9vcHMpOwogfQogCiB2b2lkIGtzel90ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oCmluZGV4IGFjYWY3MGU2ZjM5M2M5Li5jYmU5ODQ5NDU3OGMzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmgKQEAgLTgsNiAmIzQzOzgsNyBAQAogI2RlZmluZSBfX0tTWl9DT01NT05fSAogCiAjaW5jbHVkZSAmbHQ7bGludXgvZXRoZXJkZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaXJxZG9tYWluLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbXV0ZXguaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wY3MvcGNzLXhwY3MuaCZndDsKQEAgLTE5Myw2ICYjNDM7MTk0LDcgQEAgc3RydWN0IGtzel9wb3J0IHsKIAlzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyB0c3RhbXBfY29uZmlnOwogCWJvb2wgaHd0c190eF9lbjsKIAlib29sIGh3dHNfcnhfZW47CiYjNDM7CWJvb2wgbGFzdF90eF9pc19wZGVsYXlyZXNwOwogCXN0cnVjdCBrc3pfaXJxIHB0cGlycTsKIAlzdHJ1Y3Qga3N6X3B0cF9pcnEgcHRwbXNnX2lycVszXTsKIAlrdGltZV90IHRzdGFtcF9tc2c7CkBAIC01MDgsNiAmIzQzOzUxMCwxMCBAQCBpbnQga3N6X3N3X21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWdudW0sIHUxNiB2YWwpOwogaW50IGtzel9wYXJlbnRfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnbnVtKTsKIGludCBrc3pfcGFyZW50X21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWdudW0sIHUxNiB2YWwpOwogaW50IGtzel9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpOwomIzQzO3ZvaWQga3N6X2lycV9idXNfbG9jayhzdHJ1Y3QgaXJxX2RhdGEgKmQpOwomIzQzO3ZvaWQga3N6X2lycV9idXNfc3luY191bmxvY2soc3RydWN0IGlycV9kYXRhICpkKTsKJiM0MztpbnQga3N6X2lycV9jb21tb25fc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgc3RydWN0IGtzel9pcnEgKmtpcnEsCiYjNDM7CQkJIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyAqb3BzKTsKIGludCBrc3pfcGlycV9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1OCBwKTsKIGludCBrc3pfZ2lycV9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KTsKIHZvaWQga3N6X2lycV9mcmVlKHN0cnVjdCBrc3pfaXJxICpraXJxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMKaW5kZXggOGI5ODAzOTMyMGFkZGEuLjlkOGI3ODY4N2Y1MzE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYwpAQCAtMzIsNiAmIzQzOzMyLDE1IEBACiAKICNkZWZpbmUgS1NaX1BUUF9JTlRfU1RBUlQgMTMKIAomIzQzOy8qCiYjNDM7ICogUFRQIGludGVycnVwdCBiaXQgaXMgdGhlIGJpdCAxMiBvZiB0aGUgMTYtYml0cyBJU1IvSUVSLiBCdXQga3N6X2NvbW1vbi5jIG9ubHkKJiM0MzsgKiBhY2Nlc3NlcyB0aGUgaGlnaC1ieXRlIG9mIHRoZXNlIHJlZ2lzdGVycyBzbyB0aGUgUFRQIGludGVycnVwdCBiaXQgYmVjb21lcyA0LgomIzQzOyAqLwomIzQzOyNkZWZpbmUgS1NaODQ2M19TUkNfUFRQX0lOVAkJNAomIzQzOyNkZWZpbmUgS1NaODQ2M19QVFBfUE9SVDFfSU5UX1NUQVJUCTEyCiYjNDM7I2RlZmluZSBLU1o4NDYzX1BUUF9QT1JUMl9JTlRfU1RBUlQJMTQKJiM0MzsjZGVmaW5lIEtTWjg0NjNfUFRQX0lOVF9TVEFSVAkJS1NaODQ2M19QVFBfUE9SVDFfSU5UX1NUQVJUCiYjNDM7CiBzdGF0aWMgaW50IGtzel9wdHBfdG91X2dwaW8oc3RydWN0IGtzel9kZXZpY2UgKmRldikKIHsKIAlpbnQgcmV0OwpAQCAtMjg4LDYgJiM0MzsyOTcsMzEgQEAgc3RhdGljIGludCBrc3pfcHRwX2VuYWJsZV9tb2RlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpCiAJCQkgdGFnX2VuID8gUFRQX0VOQUJMRSA6IDApOwogfQogCiYjNDM7aW50IGtzejg0NjNfZ2V0X3RzX2luZm8oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCQlzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqdHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtJmd0O3ByaXY7CiYjNDM7CXN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhOwomIzQzOwomIzQzOwlwdHBfZGF0YSA9ICZhbXA7ZGV2LSZndDtwdHBfZGF0YTsKJiM0MzsKJiM0MzsJaWYgKCFwdHBfZGF0YS0mZ3Q7Y2xvY2spCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJdHMtJmd0O3NvX3RpbWVzdGFtcGluZyA9IFNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUgfAomIzQzOwkJCSAgICAgIFNPRl9USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkUgfAomIzQzOwkJCSAgICAgIFNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFOwomIzQzOwomIzQzOwl0cy0mZ3Q7dHhfdHlwZXMgPSBCSVQoSFdUU1RBTVBfVFhfT0ZGKSB8IEJJVChIV1RTVEFNUF9UWF9PTik7CiYjNDM7CiYjNDM7CXRzLSZndDtyeF9maWx0ZXJzID0gQklUKEhXVFNUQU1QX0ZJTFRFUl9OT05FKSB8CiYjNDM7CQkJIEJJVChIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX0VWRU5UKTsKJiM0MzsKJiM0MzsJdHMtJmd0O3BoY19pbmRleCA9IHB0cF9jbG9ja19pbmRleChwdHBfZGF0YS0mZ3Q7Y2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKiBUaGUgZnVuY3Rpb24gaXMgcmV0dXJuIGJhY2sgdGhlIGNhcGFiaWxpdHkgb2YgdGltZXN0YW1waW5nIGZlYXR1cmUgd2hlbgogICogcmVxdWVzdGVkIHRocm91Z2ggZXRodG9vbCAtVCAmbHQ7aW50ZXJmYWNlJmd0OyB1dGlsaXR5CiAgKi8KQEAgLTMzMiw2ICYjNDM7MzY2LDcyIEBAIGludCBrc3pfaHd0c3RhbXBfZ2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IGtzejg0NjNfc2V0X2h3dHN0YW1wX2NvbmZpZyhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LAomIzQzOwkJCQkgICAgICAgc3RydWN0IGtzel9wb3J0ICpwcnQsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY29uZmlnKQomIzQzO3sKJiM0MzsJY29uc3QgdTE2ICpyZWdzID0gZGV2LSZndDtpbmZvLSZndDtyZWdzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoY29uZmlnLSZndDtmbGFncykKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlzd2l0Y2ggKGNvbmZpZy0mZ3Q7dHhfdHlwZSkgewomIzQzOwljYXNlIEhXVFNUQU1QX1RYX09GRjoKJiM0MzsJCXBydC0mZ3Q7cHRwbXNnX2lycVtLU1o4NDYzX1NZTkNfTVNHXS50c19lbiAgPSBmYWxzZTsKJiM0MzsJCXBydC0mZ3Q7cHRwbXNnX2lycVtLU1o4NDYzX1hEUkVRX1BEUkVTX01TR10udHNfZW4gPSBmYWxzZTsKJiM0MzsJCXBydC0mZ3Q7aHd0c190eF9lbiA9IGZhbHNlOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgSFdUU1RBTVBfVFhfT046CiYjNDM7CQlwcnQtJmd0O3B0cG1zZ19pcnFbS1NaODQ2M19TWU5DX01TR10udHNfZW4gID0gdHJ1ZTsKJiM0MzsJCXBydC0mZ3Q7cHRwbXNnX2lycVtLU1o4NDYzX1hEUkVRX1BEUkVTX01TR10udHNfZW4gPSB0cnVlOwomIzQzOwkJcHJ0LSZndDtod3RzX3R4X2VuID0gdHJ1ZTsKJiM0MzsKJiM0MzsJCXJldCA9IGtzel9ybXcxNihkZXYsIHJlZ3NbUFRQX01TR19DT05GMV0sIFBUUF8xU1RFUCwgMCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRVJBTkdFOwomIzQzOwl9CiYjNDM7CiYjNDM7CXN3aXRjaCAoY29uZmlnLSZndDtyeF9maWx0ZXIpIHsKJiM0MzsJY2FzZSBIV1RTVEFNUF9GSUxURVJfTk9ORToKJiM0MzsJCXBydC0mZ3Q7aHd0c19yeF9lbiA9IGZhbHNlOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9FVkVOVDoKJiM0MzsJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX1NZTkM6CiYjNDM7CQljb25maWctJmd0O3J4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfRVZFTlQ7CiYjNDM7CQlwcnQtJmd0O2h3dHNfcnhfZW4gPSB0cnVlOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQljb25maWctJmd0O3J4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9OT05FOwomIzQzOwkJcmV0dXJuIC1FUkFOR0U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGtzel9wdHBfZW5hYmxlX21vZGUoZGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGtzejg0NjNfaHd0c3RhbXBfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiYjNDM7CQkJIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcsCiYjNDM7CQkJIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy0mZ3Q7cHJpdjsKJiM0MzsJc3RydWN0IGtzel9wb3J0ICpwcnQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXBydCA9ICZhbXA7ZGV2LSZndDtwb3J0c1twb3J0XTsKJiM0MzsKJiM0MzsJcmV0ID0ga3N6ODQ2M19zZXRfaHd0c3RhbXBfY29uZmlnKGRldiwgcHJ0LCBjb25maWcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcHJ0LSZndDt0c3RhbXBfY29uZmlnID0gKmNvbmZpZzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBrc3pfc2V0X2h3dHN0YW1wX2NvbmZpZyhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LAogCQkJCSAgIHN0cnVjdCBrc3pfcG9ydCAqcHJ0LAogCQkJCSAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcpCkBAIC01NjIsNiAmIzQzOzY2MiwzMSBAQCBzdGF0aWMgdm9pZCBrc3pfcHRwX3R4dHN0YW1wX3NrYihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LAogCXNrYl9jb21wbGV0ZV90eF90aW1lc3RhbXAoc2tiLCAmYW1wO2h3dHN0YW1wcyk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBrc3o4NDYzX3NldF9wZGVsYXlyZXNwX2ZsYWcoc3RydWN0IGtzel9wb3J0ICpwcnQsCiYjNDM7CQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IHB0cF9oZWFkZXIgKmhkcjsKJiM0MzsJdW5zaWduZWQgaW50IHR5cGU7CiYjNDM7CXU4IHB0cF9tc2dfdHlwZTsKJiM0MzsKJiM0MzsJaWYgKCFrc3pfaXNfa3N6ODQ2MyhwcnQtJmd0O2tzel9kZXYpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoc2tiX2xpbmVhcml6ZShza2IpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl0eXBlID0gcHRwX2NsYXNzaWZ5X3Jhdyhza2IpOwomIzQzOwlpZiAodHlwZSA9PSBQVFBfQ0xBU1NfTk9ORSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaGRyID0gcHRwX3BhcnNlX2hlYWRlcihza2IsIHR5cGUpOwomIzQzOwlpZiAoIWhkcikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcHRwX21zZ190eXBlID0gcHRwX2dldF9tc2d0eXBlKGhkciwgdHlwZSk7CiYjNDM7CXBydC0mZ3Q7bGFzdF90eF9pc19wZGVsYXlyZXNwID0gKHB0cF9tc2dfdHlwZSA9PSBQVFBfTVNHVFlQRV9QREVMQVlfUkVTUCk7CiYjNDM7fQomIzQzOwogdm9pZCBrc3pfcG9ydF9kZWZlcnJlZF94bWl0KHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspCiB7CiAJc3RydWN0IGtzel9kZWZlcnJlZF94bWl0X3dvcmsgKnhtaXRfd29yayA9IHdvcmtfdG9feG1pdF93b3JrKHdvcmspOwpAQCAtNTc4LDYgJiM0Mzs3MDMsOCBAQCB2b2lkIGtzel9wb3J0X2RlZmVycmVkX3htaXQoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaykKIAogCXJlaW5pdF9jb21wbGV0aW9uKCZhbXA7cHJ0LSZndDt0c3RhbXBfbXNnX2NvbXApOwogCiYjNDM7CWtzejg0NjNfc2V0X3BkZWxheXJlc3BfZmxhZyhwcnQsIHNrYik7CiYjNDM7CiAJZHNhX2VucXVldWVfc2tiKHNrYiwgc2tiLSZndDtkZXYpOwogCiAJa3N6X3B0cF90eHRzdGFtcF9za2IoZGV2LCBwcnQsIGNsb25lKTsKQEAgLTk0NCw4ICYjNDM7MTA3MSw5IEBAIGludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIAkvKiBDdXJyZW50bHkgb25seSBQMlAgbW9kZSBpcyBzdXBwb3J0ZWQuIFdoZW4gODAyXzFBUyBiaXQgaXMgc2V0LCBpdAogCSAqIGZvcndhcmRzIGFsbCBQVFAgcGFja2V0cyB0byBob3N0IHBvcnQgYW5kIG5vbmUgdG8gb3RoZXIgcG9ydHMuCiAJICovCi0JcmV0ID0ga3N6X3JtdzE2KGRldiwgcmVnc1tQVFBfTVNHX0NPTkYxXSwgUFRQX1RDX1AyUCB8IFBUUF84MDJfMUFTLAotCQkJUFRQX1RDX1AyUCB8IFBUUF84MDJfMUFTKTsKJiM0MzsJcmV0ID0ga3N6X3JtdzE2KGRldiwgcmVnc1tQVFBfTVNHX0NPTkYxXSwKJiM0MzsJCQlQVFBfVENfUDJQIHwgUFRQXzgwMl8xQVMgfCBQVFBfRVRIX0VOQUJMRSwKJiM0MzsJCQlQVFBfVENfUDJQIHwgUFRQXzgwMl8xQVMgfCBQVFBfRVRIX0VOQUJMRSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAtOTY5LDcgJiM0MzsxMDk3LDIyIEBAIHZvaWQga3N6X3B0cF9jbG9ja191bnJlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIAogc3RhdGljIGludCBrc3pfcmVhZF90cyhzdHJ1Y3Qga3N6X3BvcnQgKnBvcnQsIHUxNiByZWcsIHUzMiAqdHMpCiB7Ci0JcmV0dXJuIGtzel9yZWFkMzIocG9ydC0mZ3Q7a3N6X2RldiwgcmVnLCB0cyk7CiYjNDM7CXUxNiB0c19yZWcgPSByZWc7CiYjNDM7CiYjNDM7CS8qKgomIzQzOwkgKiBPbiBLU1o4NDYzIERSRVEgYW5kIERSRVNQIHRpbWVzdGFtcHMgc2hhcmUgb25lIGludGVycnVwdCBsaW5lCiYjNDM7CSAqIHNvIHdlIGhhdmUgdG8gY2hlY2sgdGhlIG5hdHVyZSBvZiB0aGUgbGF0ZXN0IGV2ZW50IHNlbnQgdG8ga25vdwomIzQzOwkgKiB3aGVyZSB0aGUgdGltZXN0YW1wIGlzIGxvY2F0ZWQKJiM0MzsJICovCiYjNDM7CWlmIChrc3pfaXNfa3N6ODQ2Myhwb3J0LSZndDtrc3pfZGV2KSkgewomIzQzOwkJY29uc3Qgc3RydWN0IGtzel9kZXZfb3BzICpvcHMgPSBwb3J0LSZndDtrc3pfZGV2LSZndDtkZXZfb3BzOwomIzQzOwomIzQzOwkJaWYgKHBvcnQtJmd0O2xhc3RfdHhfaXNfcGRlbGF5cmVzcCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgdHNfcmVnID09IG9wcy0mZ3Q7Z2V0X3BvcnRfYWRkcihwb3J0LSZndDtudW0sIEtTWjg0NjNfUkVHX1BPUlRfRFJFUV9UUykpCiYjNDM7CQkJdHNfcmVnICYjNDM7PSBLU1o4NDYzX0RSRVNQX1RTX09GRlNFVDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4ga3N6X3JlYWQzMihwb3J0LSZndDtrc3pfZGV2LCB0c19yZWcsIHRzKTsKIH0KIAogc3RhdGljIGlycXJldHVybl90IGtzel9wdHBfbXNnX3RocmVhZF9mbihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCkBAIC0xMTI5LDYgJiM0MzsxMjcyLDEyOCBAQCBzdGF0aWMgaW50IGtzel9wdHBfbXNnX2lycV9zZXR1cChzdHJ1Y3Qga3N6X3BvcnQgKnBvcnQsIHU4IG4pCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfcG9ydF9pcnFfc2V0dXAoc3RydWN0IGtzel9pcnEgKnB0cGlycSwKJiM0MzsJCQkJICAgICAgc3RydWN0IGtzel9wb3J0ICpwb3J0LCBpbnQgaHdfaXJxKQomIzQzO3sKJiM0MzsJdTE2IHRzX3JlZ1tdID0ge0tTWjg0NjNfUkVHX1BPUlRfU1lOQ19UUywgS1NaODQ2M19SRUdfUE9SVF9EUkVRX1RTfTsKJiM0MzsJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBuYW1lW10gPSB7JiMzNDtzeW5jLW1zZyYjMzQ7LCAmIzM0O2RlbGF5LW1zZyYjMzQ7fTsKJiM0MzsJY29uc3Qgc3RydWN0IGtzel9kZXZfb3BzICpvcHMgPSBwb3J0LSZndDtrc3pfZGV2LSZndDtkZXZfb3BzOwomIzQzOwlzdHJ1Y3Qga3N6X3B0cF9pcnEgKnB0cG1zZ19pcnE7CiYjNDM7CWludCByZXQ7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpbml0X2NvbXBsZXRpb24oJmFtcDtwb3J0LSZndDt0c3RhbXBfbXNnX2NvbXApOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgMjsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXB0cG1zZ19pcnEgPSAmYW1wO3BvcnQtJmd0O3B0cG1zZ19pcnFbaV07CiYjNDM7CQlwdHBtc2dfaXJxLSZndDtudW0gPSBpcnFfY3JlYXRlX21hcHBpbmcocHRwaXJxLSZndDtkb21haW4sCiYjNDM7CQkJCQkJICAgICBod19pcnEgJiM0MzsgaSk7CiYjNDM7CQlpZiAoIXB0cG1zZ19pcnEtJmd0O251bSkgewomIzQzOwkJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQkJZ290byByZWxlYXNlX21zZ19pcnE7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlwdHBtc2dfaXJxLSZndDtwb3J0ID0gcG9ydDsKJiM0MzsJCXB0cG1zZ19pcnEtJmd0O3RzX3JlZyA9IG9wcy0mZ3Q7Z2V0X3BvcnRfYWRkcihwb3J0LSZndDtudW0sIHRzX3JlZ1tpXSk7CiYjNDM7CiYjNDM7CQlzdHJzY3B5KHB0cG1zZ19pcnEtJmd0O25hbWUsIG5hbWVbaV0pOwomIzQzOwomIzQzOwkJcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEocHRwbXNnX2lycS0mZ3Q7bnVtLCBOVUxMLAomIzQzOwkJCQkJICAga3N6X3B0cF9tc2dfdGhyZWFkX2ZuLCBJUlFGX09ORVNIT1QsCiYjNDM7CQkJCQkgICBwdHBtc2dfaXJxLSZndDtuYW1lLCBwdHBtc2dfaXJxKTsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQlpcnFfZGlzcG9zZV9tYXBwaW5nKHB0cG1zZ19pcnEtJmd0O251bSk7CiYjNDM7CQkJZ290byByZWxlYXNlX21zZ19pcnE7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7cmVsZWFzZV9tc2dfaXJxOgomIzQzOwl3aGlsZSAoaS0tKQomIzQzOwkJa3N6X3B0cF9tc2dfaXJxX2ZyZWUocG9ydCwgaSk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGtzejg0NjNfcHRwX3BvcnRfaXJxX3RlYXJkb3duKHN0cnVjdCBrc3pfcG9ydCAqcG9ydCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgMjsgaSYjNDM7JiM0MzspCiYjNDM7CQlrc3pfcHRwX21zZ19pcnFfZnJlZShwb3J0LCBpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGtzejg0NjNfcHRwX2lycV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtJmd0O3ByaXY7CiYjNDM7CXN0cnVjdCBrc3pfcG9ydCAqcG9ydDEsICpwb3J0MjsKJiM0MzsJc3RydWN0IGtzel9pcnEgKnB0cGlycTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcG9ydDEgPSAmYW1wO2Rldi0mZ3Q7cG9ydHNbMF07CiYjNDM7CXBvcnQyID0gJmFtcDtkZXYtJmd0O3BvcnRzWzFdOwomIzQzOwlwdHBpcnEgPSAmYW1wO3BvcnQxLSZndDtwdHBpcnE7CiYjNDM7CiYjNDM7CXB0cGlycS0mZ3Q7aXJxX251bSA9IGlycV9maW5kX21hcHBpbmcoZGV2LSZndDtnaXJxLmRvbWFpbiwKJiM0MzsJCQkJCSAgIEtTWjg0NjNfU1JDX1BUUF9JTlQpOwomIzQzOwlpZiAoIXB0cGlycS0mZ3Q7aXJxX251bSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlwdHBpcnEtJmd0O2RldiA9IGRldjsKJiM0MzsJcHRwaXJxLSZndDtuaXJxcyA9IDQ7CiYjNDM7CXB0cGlycS0mZ3Q7cmVnX21hc2sgPSBLU1o4NDYzX1BUUF9UU19JRVI7CiYjNDM7CXB0cGlycS0mZ3Q7cmVnX3N0YXR1cyA9IEtTWjg0NjNfUFRQX1RTX0lTUjsKJiM0MzsJcHRwaXJxLSZndDtpcnEwX29mZnNldCA9IEtTWjg0NjNfUFRQX0lOVF9TVEFSVDsKJiM0MzsJc25wcmludGYocHRwaXJxLSZndDtuYW1lLCBzaXplb2YocHRwaXJxLSZndDtuYW1lKSwgJiMzNDtwdHAtaXJxJiMzNDspOwomIzQzOwomIzQzOwlwdHBpcnEtJmd0O2RvbWFpbiA9IGlycV9kb21haW5fY3JlYXRlX2xpbmVhcihkZXZfZndub2RlKGRldi0mZ3Q7ZGV2KSwKJiM0MzsJCQkJCQkgIHB0cGlycS0mZ3Q7bmlycXMsCiYjNDM7CQkJCQkJICAmYW1wO2tzel9wdHBfaXJxX2RvbWFpbl9vcHMsCiYjNDM7CQkJCQkJICBwdHBpcnEpOwomIzQzOwlpZiAoIXB0cGlycS0mZ3Q7ZG9tYWluKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJldCA9IGtzejg0NjNfcHRwX3BvcnRfaXJxX3NldHVwKHB0cGlycSwgcG9ydDEsCiYjNDM7CQkJCQkgS1NaODQ2M19QVFBfUE9SVDFfSU5UX1NUQVJUIC0gS1NaODQ2M19QVFBfSU5UX1NUQVJUKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gcmVsZWFzZV9kb21haW47CiYjNDM7CiYjNDM7CXJldCA9IGtzejg0NjNfcHRwX3BvcnRfaXJxX3NldHVwKHB0cGlycSwgcG9ydDIsCiYjNDM7CQkJCQkgS1NaODQ2M19QVFBfUE9SVDJfSU5UX1NUQVJUIC0gS1NaODQ2M19QVFBfSU5UX1NUQVJUKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZnJlZV9wb3J0MTsKJiM0MzsKJiM0MzsJcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEocHRwaXJxLSZndDtpcnFfbnVtLCBOVUxMLCBrc3pfcHRwX2lycV90aHJlYWRfZm4sCiYjNDM7CQkJCSAgIElSUUZfT05FU0hPVCwgcHRwaXJxLSZndDtuYW1lLCBwdHBpcnEpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBmcmVlX3BvcnQyOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztmcmVlX3BvcnQyOgomIzQzOwlrc3o4NDYzX3B0cF9wb3J0X2lycV90ZWFyZG93bihwb3J0Mik7CiYjNDM7ZnJlZV9wb3J0MToKJiM0MzsJa3N6ODQ2M19wdHBfcG9ydF9pcnFfdGVhcmRvd24ocG9ydDEpOwomIzQzO3JlbGVhc2VfZG9tYWluOgomIzQzOwlpcnFfZG9tYWluX3JlbW92ZShwdHBpcnEtJmd0O2RvbWFpbik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQga3N6ODQ2M19wdHBfaXJxX2ZyZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQomIzQzO3sKJiM0MzsJc3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLSZndDtwcml2OwomIzQzOwlzdHJ1Y3Qga3N6X3BvcnQgKnBvcnQxID0gJmFtcDtkZXYtJmd0O3BvcnRzWzBdOwomIzQzOwlzdHJ1Y3Qga3N6X3BvcnQgKnBvcnQyID0gJmFtcDtkZXYtJmd0O3BvcnRzWzFdOwomIzQzOwlzdHJ1Y3Qga3N6X2lycSAqcHRwaXJxID0gJmFtcDtwb3J0MS0mZ3Q7cHRwaXJxOwomIzQzOwomIzQzOwlmcmVlX2lycShwdHBpcnEtJmd0O2lycV9udW0sIHB0cGlycSk7CiYjNDM7CWtzejg0NjNfcHRwX3BvcnRfaXJxX3RlYXJkb3duKHBvcnQyKTsKJiM0MzsJa3N6ODQ2M19wdHBfcG9ydF9pcnFfdGVhcmRvd24ocG9ydDEpOwomIzQzOwlpcnFfZG9tYWluX3JlbW92ZShwdHBpcnEtJmd0O2RvbWFpbik7CiYjNDM7fQomIzQzOwogaW50IGtzel9wdHBfaXJxX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgdTggcCkKIHsKIAlzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtJmd0O3ByaXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaCBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oCmluZGV4IDMwODZlNTE5YjFiNjQxLi43MDY3ZWM5YmQxZTZmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmgKQEAgLTM5LDE3ICYjNDM7MzksMjQgQEAgdm9pZCBrc3pfcHRwX2Nsb2NrX3VucmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTsKIAogaW50IGtzel9nZXRfdHNfaW5mbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCQkgICAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKnRzKTsKJiM0MztpbnQga3N6ODQ2M19nZXRfdHNfaW5mbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAomIzQzOwkJCXN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICp0cyk7CiBpbnQga3N6X2h3dHN0YW1wX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCQkgICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcpOwogaW50IGtzel9od3RzdGFtcF9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKIAkJICAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY29uZmlnLAogCQkgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7CiYjNDM7aW50IGtzejg0NjNfaHd0c3RhbXBfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiYjNDM7CQkJIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcsCiYjNDM7CQkJIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7CiB2b2lkIGtzel9wb3J0X3R4dHN0YW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCBrc3pfcG9ydF9kZWZlcnJlZF94bWl0KHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspOwogYm9vbCBrc3pfcG9ydF9yeHRzdGFtcChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgICAgdW5zaWduZWQgaW50IHR5cGUpOwogaW50IGtzel9wdHBfaXJxX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgdTggcCk7CiB2b2lkIGtzel9wdHBfaXJxX2ZyZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCB1OCBwKTsKJiM0MztpbnQga3N6ODQ2M19wdHBfaXJxX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7CiYjNDM7dm9pZCBrc3o4NDYzX3B0cF9pcnFfZnJlZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpOwogCiAjZWxzZQogCkBAIC03MiwxMSAmIzQzOzc5LDIwIEBAIHN0YXRpYyBpbmxpbmUgaW50IGtzel9wdHBfaXJxX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgdTggcCkKIAogc3RhdGljIGlubGluZSB2b2lkIGtzel9wdHBfaXJxX2ZyZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCB1OCBwKSB7fQogCiYjNDM7c3RhdGljIGlubGluZSBpbnQga3N6ODQ2M19wdHBfaXJxX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQga3N6ODQ2M19wdHBfaXJxX2ZyZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKSB7fQomIzQzOwogI2RlZmluZSBrc3pfZ2V0X3RzX2luZm8gTlVMTAomIzQzOyNkZWZpbmUga3N6ODQ2M19nZXRfdHNfaW5mbyBOVUxMCiAKICNkZWZpbmUga3N6X2h3dHN0YW1wX2dldCBOVUxMCiAKICNkZWZpbmUga3N6X2h3dHN0YW1wX3NldCBOVUxMCiYjNDM7I2RlZmluZSBrc3o4NDYzX2h3dHN0YW1wX3NldCBOVUxMCiAKICNkZWZpbmUga3N6X3BvcnRfcnh0c3RhbXAgTlVMTAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmgKaW5kZXggZWFiOWFlY2I3ZmE4YTUuLjY1ZWE4NTc3YWY3NTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwX3JlZy5oCkBAIC0xMjEsNiAmIzQzOzEyMSwxMiBAQAogI2RlZmluZSBSRUdfUFRQX1BPUlRfU1lOQ19UUwkJMHgwQzBDCiAjZGVmaW5lIFJFR19QVFBfUE9SVF9QRFJFU1BfVFMJCTB4MEMxMAogCiYjNDM7I2RlZmluZSBLU1o4NDYzX1JFR19QT1JUX0RSRVFfVFMJMHgwNjQ4CiYjNDM7I2RlZmluZSBLU1o4NDYzX1JFR19QT1JUX1NZTkNfVFMJMHgwNjRDCiYjNDM7I2RlZmluZSBLU1o4NDYzX1JFR19QT1JUX0RSRVNQX1RTCTB4MDY1MAomIzQzOyNkZWZpbmUgS1NaODQ2M19QVFBfVFNfSVNSCQkweDA2OEMKJiM0MzsjZGVmaW5lIEtTWjg0NjNfUFRQX1RTX0lFUgkJMHgwNjhFCiYjNDM7CiAjZGVmaW5lIFJFR19QVFBfUE9SVF9UWF9JTlRfU1RBVFVTX18yCTB4MEMxNAogI2RlZmluZSBSRUdfUFRQX1BPUlRfVFhfSU5UX0VOQUJMRV9fMgkweDBDMTYKIApAQCAtMTMxLDQgJiM0MzsxMzcsOCBAQAogI2RlZmluZSBLU1pfWERSRVFfTVNHCQkJMQogI2RlZmluZSBLU1pfUERSRVNfTVNHCQkJMAogCiYjNDM7I2RlZmluZSBLU1o4NDYzX0RSRVNQX1RTX09GRlNFVAkJKEtTWjg0NjNfUkVHX1BPUlRfRFJFU1BfVFMgLSBLU1o4NDYzX1JFR19QT1JUX0RSRVFfVFMpCiYjNDM7I2RlZmluZSBLU1o4NDYzX1NZTkNfTVNHCQkwCiYjNDM7I2RlZmluZSBLU1o4NDYzX1hEUkVRX1BEUkVTX01TRwkJMQomIzQzOwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kc2EuaCBiL2luY2x1ZGUvbmV0L2RzYS5oCmluZGV4IDhjMTZlZjIzY2MxMDJhLi42ZjdmNWMxN2I1MzIwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvZHNhLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvZHNhLmgKQEAgLTU5LDYgJiM0Mzs1OSw3IEBAIHN0cnVjdCB0Y19hY3Rpb247CiAjZGVmaW5lIERTQV9UQUdfUFJPVE9fTVhMX0dTVzFYWF9WQUxVRQkJMzEKICNkZWZpbmUgRFNBX1RBR19QUk9UT19NWEw4NjJfVkFMVUUJCTMyCiAjZGVmaW5lIERTQV9UQUdfUFJPVE9fTkVUQ19WQUxVRQkJMzMKJiM0MzsjZGVmaW5lIERTQV9UQUdfUFJPVE9fS1NaODQ2M19WQUxVRQkJMzQKIAogZW51bSBkc2FfdGFnX3Byb3RvY29sIHsKIAlEU0FfVEFHX1BST1RPX05PTkUJCT0gRFNBX1RBR19QUk9UT19OT05FX1ZBTFVFLApAQCAtOTUsNiAmIzQzOzk2LDcgQEAgZW51bSBkc2FfdGFnX3Byb3RvY29sIHsKIAlEU0FfVEFHX1BST1RPX01YTF9HU1cxWFgJPSBEU0FfVEFHX1BST1RPX01YTF9HU1cxWFhfVkFMVUUsCiAJRFNBX1RBR19QUk9UT19NWEw4NjIJCT0gRFNBX1RBR19QUk9UT19NWEw4NjJfVkFMVUUsCiAJRFNBX1RBR19QUk9UT19ORVRDCQk9IERTQV9UQUdfUFJPVE9fTkVUQ19WQUxVRSwKJiM0MzsJRFNBX1RBR19QUk9UT19LU1o4NDYzCQk9IERTQV9UQUdfUFJPVE9fS1NaODQ2M19WQUxVRSwKIH07CiAKIHN0cnVjdCBkc2Ffc3dpdGNoOwpkaWZmIC0tZ2l0IGEvbmV0L2RzYS90YWdfa3N6LmMgYi9uZXQvZHNhL3RhZ19rc3ouYwppbmRleCA2N2ZhODlmMTAyZTA3MC4uYjRkNzBiYTkzMGRjYmUgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvdGFnX2tzei5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kc2EvdGFnX2tzei5jCkBAIC0xMiw2ICYjNDM7MTIsNyBAQAogCiAjaW5jbHVkZSAmIzM0O3RhZy5oJiMzNDsKIAomIzQzOyNkZWZpbmUgS1NaODQ2M19OQU1FICYjMzQ7a3N6ODQ2MyYjMzQ7CiAjZGVmaW5lIEtTWjg3OTVfTkFNRSAmIzM0O2tzejg3OTUmIzM0OwogI2RlZmluZSBLU1o5NDc3X05BTUUgJiMzNDtrc3o5NDc3JiMzNDsKICNkZWZpbmUgS1NaOTg5M19OQU1FICYjMzQ7a3N6OTg5MyYjMzQ7CkBAIC0xMDMsNzIgJiM0MzsxMDQsNiBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmtzel9jb21tb25fcmN2KHN0cnVjdCBza19idWZmICpza2IsCiAJcmV0dXJuIHNrYjsKIH0KIAotLyoKLSAqIEZvciBJbmdyZXNzIChIb3N0IC0mZ3Q7IEtTWjg3OTUpLCAxIGJ5dGUgaXMgYWRkZWQgYmVmb3JlIEZDUy4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogREEoNmJ5dGVzKXxTQSg2Ynl0ZXMpfC4uLi58RGF0YShuYnl0ZXMpfHRhZygxYnl0ZSl8RkNTKDRieXRlcykKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogdGFnIDogZWFjaCBiaXQgcmVwcmVzZW50cyBwb3J0IChlZywgMHgwMT1wb3J0MSwgMHgwMj1wb3J0MiwgMHgxMD1wb3J0NSkKLSAqCi0gKiBGb3IgRWdyZXNzIChLU1o4Nzk1IC0mZ3Q7IEhvc3QpLCAxIGJ5dGUgaXMgYWRkZWQgYmVmb3JlIEZDUy4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogREEoNmJ5dGVzKXxTQSg2Ynl0ZXMpfC4uLi58RGF0YShuYnl0ZXMpfHRhZzAoMWJ5dGUpfEZDUyg0Ynl0ZXMpCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIHRhZzAgOiB6ZXJvLWJhc2VkIHZhbHVlIHJlcHJlc2VudHMgcG9ydAotICoJICAoZWcsIDB4MD1wb3J0MSwgMHgyPXBvcnQzLCAweDM9cG9ydDQpCi0gKi8KLQotI2RlZmluZSBLU1o4Nzk1X1RBSUxfVEFHX0VHX1BPUlRfTQlHRU5NQVNLKDEsIDApCi0jZGVmaW5lIEtTWjg3OTVfVEFJTF9UQUdfT1ZFUlJJREUJQklUKDYpCi0jZGVmaW5lIEtTWjg3OTVfVEFJTF9UQUdfTE9PS1VQCQlCSVQoNykKLQotc3RhdGljIHN0cnVjdCBza19idWZmICprc3o4Nzk1X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZXRoaGRyICpoZHI7Ci0JdTggKnRhZzsKLQotCWlmIChza2ItJmd0O2lwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMICZhbXA7JmFtcDsgc2tiX2NoZWNrc3VtX2hlbHAoc2tiKSkgewotCQlrZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JLyogVGFnIGVuY29kaW5nICovCi0JdGFnID0gc2tiX3B1dChza2IsIEtTWl9JTkdSRVNTX1RBR19MRU4pOwotCWhkciA9IHNrYl9ldGhfaGRyKHNrYik7Ci0KLQkqdGFnID0gZHNhX3htaXRfcG9ydF9tYXNrKHNrYiwgZGV2KTsKLQlpZiAoaXNfbGlua19sb2NhbF9ldGhlcl9hZGRyKGhkci0mZ3Q7aF9kZXN0KSkKLQkJKnRhZyB8PSBLU1o4Nzk1X1RBSUxfVEFHX09WRVJSSURFOwotCi0JcmV0dXJuIHNrYjsKLX0KLQotc3RhdGljIHN0cnVjdCBza19idWZmICprc3o4Nzk1X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXU4ICp0YWc7Ci0KLQlpZiAoc2tiX2xpbmVhcml6ZShza2IpKSB7Ci0JCWtmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQl0YWcgPSBza2JfdGFpbF9wb2ludGVyKHNrYikgLSBLU1pfRUdSRVNTX1RBR19MRU47Ci0KLQlyZXR1cm4ga3N6X2NvbW1vbl9yY3Yoc2tiLCBkZXYsIHRhZ1swXSAmYW1wOyBLU1o4Nzk1X1RBSUxfVEFHX0VHX1BPUlRfTSwKLQkJCSAgICAgIEtTWl9FR1JFU1NfVEFHX0xFTik7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMga3N6ODc5NV9uZXRkZXZfb3BzID0gewotCS5uYW1lCT0gS1NaODc5NV9OQU1FLAotCS5wcm90bwk9IERTQV9UQUdfUFJPVE9fS1NaODc5NSwKLQkueG1pdAk9IGtzejg3OTVfeG1pdCwKLQkucmN2CT0ga3N6ODc5NV9yY3YsCi0JLm5lZWRlZF90YWlscm9vbSA9IEtTWl9JTkdSRVNTX1RBR19MRU4sCi19OwotCi1EU0FfVEFHX0RSSVZFUihrc3o4Nzk1X25ldGRldl9vcHMpOwotTU9EVUxFX0FMSUFTX0RTQV9UQUdfRFJJVkVSKERTQV9UQUdfUFJPVE9fS1NaODc5NSwgS1NaODc5NV9OQU1FKTsKLQogLyoKICAqIEZvciBJbmdyZXNzIChIb3N0IC0mZ3Q7IEtTWjk0NzcpLCAyLzYgYnl0ZXMgYXJlIGFkZGVkIGJlZm9yZSBGQ1MuCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI4NCw2ICYjNDM7MjE5LDM3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqa3N6X2RlZmVyX3htaXQoc3RydWN0IGRzYV9wb3J0ICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlyZXR1cm4gTlVMTDsKIH0KIAomIzQzO3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqa3N6X2NvbW1vbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkgICAgICAgYm9vbCBkb190c3RhbXAsCiYjNDM7CQkJCSAgICAgICB1OCBwcmlvLAomIzQzOwkJCQkgICAgICAgdTggb3ZlcnJpZGVfbWFzaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfdXNlcl90b19wb3J0KGRldik7CiYjNDM7CXN0cnVjdCBldGhoZHIgKmhkcjsKJiM0MzsJdTggKnRhZzsKJiM0MzsKJiM0MzsJaWYgKHNrYi0mZ3Q7aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwgJmFtcDsmYW1wOyBza2JfY2hlY2tzdW1faGVscChza2IpKSB7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFRhZyBlbmNvZGluZyAqLwomIzQzOwlpZiAoZG9fdHN0YW1wKQomIzQzOwkJa3N6X3htaXRfdGltZXN0YW1wKGRwLCBza2IpOwomIzQzOwomIzQzOwl0YWcgPSBza2JfcHV0KHNrYiwgS1NaX0lOR1JFU1NfVEFHX0xFTik7CiYjNDM7CWhkciA9IHNrYl9ldGhfaGRyKHNrYik7CiYjNDM7CiYjNDM7CSp0YWcgPSBkc2FfeG1pdF9wb3J0X21hc2soc2tiLCBkZXYpOwomIzQzOwkqdGFnIHw9IHByaW87CiYjNDM7CiYjNDM7CWlmIChpc19saW5rX2xvY2FsX2V0aGVyX2FkZHIoaGRyLSZndDtoX2Rlc3QpKQomIzQzOwkJKnRhZyB8PSBvdmVycmlkZV9tYXNrOwomIzQzOwomIzQzOwlyZXR1cm4ga3N6X2RlZmVyX3htaXQoZHAsIHNrYik7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCBza19idWZmICprc3o5NDc3X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTM1MywzNyAmIzQzOzMxOSw2OSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIGtzejk0NzdfbmV0ZGV2X29wcyA9IHsKIERTQV9UQUdfRFJJVkVSKGtzejk0NzdfbmV0ZGV2X29wcyk7CiBNT0RVTEVfQUxJQVNfRFNBX1RBR19EUklWRVIoRFNBX1RBR19QUk9UT19LU1o5NDc3LCBLU1o5NDc3X05BTUUpOwogCi0jZGVmaW5lIEtTWjk4OTNfVEFJTF9UQUdfUFJJTwkJR0VOTUFTSyg0LCAzKQotI2RlZmluZSBLU1o5ODkzX1RBSUxfVEFHX09WRVJSSURFCUJJVCg1KQotI2RlZmluZSBLU1o5ODkzX1RBSUxfVEFHX0xPT0tVUAkJQklUKDYpCiYjNDM7LyoKJiM0MzsgKiBGb3IgSW5ncmVzcyAoSG9zdCAtJmd0OyBLU1o4Nzk1KSwgMSBieXRlIGlzIGFkZGVkIGJlZm9yZSBGQ1MuCiYjNDM7ICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7ICogREEoNmJ5dGVzKXxTQSg2Ynl0ZXMpfC4uLi58RGF0YShuYnl0ZXMpfHRhZygxYnl0ZSl8RkNTKDRieXRlcykKJiM0MzsgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MzsgKiB0YWcgOiBlYWNoIGJpdCByZXByZXNlbnRzIHBvcnQgKGVnLCAweDAxPXBvcnQxLCAweDAyPXBvcnQyLCAweDEwPXBvcnQ1KQomIzQzOyAqCiYjNDM7ICogRm9yIEVncmVzcyAoS1NaODc5NSAtJmd0OyBIb3N0KSwgMSBieXRlIGlzIGFkZGVkIGJlZm9yZSBGQ1MuCiYjNDM7ICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7ICogREEoNmJ5dGVzKXxTQSg2Ynl0ZXMpfC4uLi58RGF0YShuYnl0ZXMpfHRhZzAoMWJ5dGUpfEZDUyg0Ynl0ZXMpCiYjNDM7ICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7ICogdGFnMCA6IHplcm8tYmFzZWQgdmFsdWUgcmVwcmVzZW50cyBwb3J0CiYjNDM7ICoJICAoZWcsIDB4MD1wb3J0MSwgMHgyPXBvcnQzLCAweDM9cG9ydDQpCiYjNDM7ICovCiAKLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqa3N6OTg5M194bWl0KHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7I2RlZmluZSBLU1o4Nzk1X1RBSUxfVEFHX0VHX1BPUlRfTQlHRU5NQVNLKDEsIDApCiYjNDM7I2RlZmluZSBLU1o4Nzk1X1RBSUxfVEFHX09WRVJSSURFCUJJVCg2KQomIzQzOyNkZWZpbmUgS1NaODc5NV9UQUlMX1RBR19MT09LVVAJCUJJVCg3KQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqa3N6ODc5NV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4ga3N6X2NvbW1vbl94bWl0KHNrYiwgZGV2LCBmYWxzZSwgMCwgS1NaODc5NV9UQUlMX1RBR19PVkVSUklERSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqa3N6ODc5NV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQl1MTYgcXVldWVfbWFwcGluZyA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwotCXU4IHByaW8gPSBuZXRkZXZfdHhxX3RvX3RjKGRldiwgcXVldWVfbWFwcGluZyk7Ci0Jc3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV91c2VyX3RvX3BvcnQoZGV2KTsKLQlzdHJ1Y3QgZXRoaGRyICpoZHI7CiAJdTggKnRhZzsKIAotCWlmIChza2ItJmd0O2lwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMICZhbXA7JmFtcDsgc2tiX2NoZWNrc3VtX2hlbHAoc2tiKSkgewomIzQzOwlpZiAoc2tiX2xpbmVhcml6ZShza2IpKSB7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQkvKiBUYWcgZW5jb2RpbmcgKi8KLQlrc3pfeG1pdF90aW1lc3RhbXAoZHAsIHNrYik7CiYjNDM7CXRhZyA9IHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtIEtTWl9FR1JFU1NfVEFHX0xFTjsKIAotCXRhZyA9IHNrYl9wdXQoc2tiLCBLU1pfSU5HUkVTU19UQUdfTEVOKTsKLQloZHIgPSBza2JfZXRoX2hkcihza2IpOwomIzQzOwlyZXR1cm4ga3N6X2NvbW1vbl9yY3Yoc2tiLCBkZXYsIHRhZ1swXSAmYW1wOyBLU1o4Nzk1X1RBSUxfVEFHX0VHX1BPUlRfTSwKJiM0MzsJCQkgICAgICBLU1pfRUdSRVNTX1RBR19MRU4pOwomIzQzO30KIAotCSp0YWcgPSBkc2FfeG1pdF9wb3J0X21hc2soc2tiLCBkZXYpOwotCSp0YWcgfD0gRklFTERfUFJFUChLU1o5ODkzX1RBSUxfVEFHX1BSSU8sIHByaW8pOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMga3N6ODc5NV9uZXRkZXZfb3BzID0gewomIzQzOwkubmFtZQk9IEtTWjg3OTVfTkFNRSwKJiM0MzsJLnByb3RvCT0gRFNBX1RBR19QUk9UT19LU1o4Nzk1LAomIzQzOwkueG1pdAk9IGtzejg3OTVfeG1pdCwKJiM0MzsJLnJjdgk9IGtzejg3OTVfcmN2LAomIzQzOwkubmVlZGVkX3RhaWxyb29tID0gS1NaX0lOR1JFU1NfVEFHX0xFTiwKJiM0Mzt9OwogCi0JaWYgKGlzX2xpbmtfbG9jYWxfZXRoZXJfYWRkcihoZHItJmd0O2hfZGVzdCkpCi0JCSp0YWcgfD0gS1NaOTg5M19UQUlMX1RBR19PVkVSUklERTsKJiM0MztEU0FfVEFHX0RSSVZFUihrc3o4Nzk1X25ldGRldl9vcHMpOwomIzQzO01PRFVMRV9BTElBU19EU0FfVEFHX0RSSVZFUihEU0FfVEFHX1BST1RPX0tTWjg3OTUsIEtTWjg3OTVfTkFNRSk7CiAKLQlyZXR1cm4ga3N6X2RlZmVyX3htaXQoZHAsIHNrYik7CiYjNDM7I2RlZmluZSBLU1o5ODkzX1RBSUxfVEFHX1BSSU8JCUdFTk1BU0soNCwgMykKJiM0MzsjZGVmaW5lIEtTWjk4OTNfVEFJTF9UQUdfT1ZFUlJJREUJQklUKDUpCiYjNDM7I2RlZmluZSBLU1o5ODkzX1RBSUxfVEFHX0xPT0tVUAkJQklUKDYpCiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBza19idWZmICprc3o5ODkzX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwl1MTYgcXVldWVfbWFwcGluZyA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwomIzQzOwl1OCBwcmlvID0gbmV0ZGV2X3R4cV90b190YyhkZXYsIHF1ZXVlX21hcHBpbmcpOwomIzQzOwomIzQzOwlyZXR1cm4ga3N6X2NvbW1vbl94bWl0KHNrYiwgZGV2LCB0cnVlLAomIzQzOwkJCSAgICAgICBGSUVMRF9QUkVQKEtTWjk4OTNfVEFJTF9UQUdfUFJJTywgcHJpbyksCiYjNDM7CQkJICAgICAgIEtTWjk4OTNfVEFJTF9UQUdfT1ZFUlJJREUpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIGtzejk4OTNfbmV0ZGV2X29wcyA9IHsKQEAgLTM5OSw2ICYjNDM7Mzk3LDcwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMga3N6OTg5M19uZXRkZXZfb3BzID0gewogRFNBX1RBR19EUklWRVIoa3N6OTg5M19uZXRkZXZfb3BzKTsKIE1PRFVMRV9BTElBU19EU0FfVEFHX0RSSVZFUihEU0FfVEFHX1BST1RPX0tTWjk4OTMsIEtTWjk4OTNfTkFNRSk7CiAKJiM0MzsjZGVmaW5lIEtTWjg0NjNfVEFJTF9UQUdfUFJJTwkJR0VOTUFTSyg0LCAzKQomIzQzOyNkZWZpbmUgS1NaODQ2M19UQUlMX1RBR19FR19QT1JUX00JR0VOTUFTSygyLCAwKQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqa3N6ODQ2M194bWl0KHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJdTE2IHF1ZXVlX21hcHBpbmcgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKJiM0MzsJdTggcHJpbyA9IG5ldGRldl90eHFfdG9fdGMoZGV2LCBxdWV1ZV9tYXBwaW5nKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGtzel9jb21tb25feG1pdChza2IsIGRldiwgZmFsc2UsCiYjNDM7CQkJICAgICAgIEZJRUxEX1BSRVAoS1NaODQ2M19UQUlMX1RBR19QUklPLCBwcmlvKSwKJiM0MzsJCQkgICAgICAgMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqa3N6ODQ2M19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBsZW4gPSBLU1pfRUdSRVNTX1RBR19MRU47CiYjNDM7CXN0cnVjdCBwdHBfaGVhZGVyICpwdHBfaGRyOwomIzQzOwl1bnNpZ25lZCBpbnQgcHRwX2NsYXNzOwomIzQzOwl1bnNpZ25lZCBpbnQgcG9ydDsKJiM0MzsJa3RpbWVfdCB0czsKJiM0MzsJdTggKnRhZzsKJiM0MzsKJiM0MzsJaWYgKHNrYl9saW5lYXJpemUoc2tiKSkgewomIzQzOwkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlLU1pfU0tCX0NCKHNrYiktJmd0O3RzdGFtcCA9IDA7CiYjNDM7CiYjNDM7CS8qIFRhZyBkZWNvZGluZyAqLwomIzQzOwl0YWcgPSBza2JfdGFpbF9wb2ludGVyKHNrYikgLSBLU1pfRUdSRVNTX1RBR19MRU47CiYjNDM7CXBvcnQgPSB0YWdbMF0gJmFtcDsgS1NaODQ2M19UQUlMX1RBR19FR19QT1JUX007CiYjNDM7CiYjNDM7CV9fc2tiX3B1c2goc2tiLCBFVEhfSExFTik7CiYjNDM7CXB0cF9jbGFzcyA9IHB0cF9jbGFzc2lmeV9yYXcoc2tiKTsKJiM0MzsJX19za2JfcHVsbChza2IsIEVUSF9ITEVOKTsKJiM0MzsJaWYgKHB0cF9jbGFzcyA9PSBQVFBfQ0xBU1NfTk9ORSkKJiM0MzsJCWdvdG8gY29tbW9uX3JjdjsKJiM0MzsKJiM0MzsJcHRwX2hkciA9IHB0cF9wYXJzZV9oZWFkZXIoc2tiLCBwdHBfY2xhc3MpOwomIzQzOwlpZiAocHRwX2hkcikgewomIzQzOwkJdHMgPSBrc3pfZGVjb2RlX3RzdGFtcChnZXRfdW5hbGlnbmVkX2JlMzIoJmFtcDtwdHBfaGRyLSZndDtyZXNlcnZlZDIpKTsKJiM0MzsJCUtTWl9TS0JfQ0Ioc2tiKS0mZ3Q7dHN0YW1wID0gdHM7CiYjNDM7CQlwdHBfaGRyLSZndDtyZXNlcnZlZDIgPSAwOwomIzQzOwl9CiYjNDM7CiYjNDM7Y29tbW9uX3JjdjoKJiM0MzsJcmV0dXJuIGtzel9jb21tb25fcmN2KHNrYiwgZGV2LCBwb3J0LCBsZW4pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIGtzejg0NjNfbmV0ZGV2X29wcyA9IHsKJiM0MzsJLm5hbWUJPSBLU1o4NDYzX05BTUUsCiYjNDM7CS5wcm90bwk9IERTQV9UQUdfUFJPVE9fS1NaODQ2MywKJiM0MzsJLnhtaXQJPSBrc3o4NDYzX3htaXQsCiYjNDM7CS5yY3YJPSBrc3o4NDYzX3JjdiwKJiM0MzsJLmNvbm5lY3QgPSBrc3pfY29ubmVjdCwKJiM0MzsJLmRpc2Nvbm5lY3QgPSBrc3pfZGlzY29ubmVjdCwKJiM0MzsJLm5lZWRlZF90YWlscm9vbSA9IEtTWl9JTkdSRVNTX1RBR19MRU4sCiYjNDM7fTsKJiM0MzsKJiM0MztEU0FfVEFHX0RSSVZFUihrc3o4NDYzX25ldGRldl9vcHMpOwomIzQzO01PRFVMRV9BTElBU19EU0FfVEFHX0RSSVZFUihEU0FfVEFHX1BST1RPX0tTWjg0NjMsIEtTWjg0NjNfTkFNRSk7CiYjNDM7CiAvKiBGb3IgeG1pdCwgMi82IGJ5dGVzIGFyZSBhZGRlZCBiZWZvcmUgRkNTLgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBEQSg2Ynl0ZXMpfFNBKDZieXRlcyl8Li4uLnxEYXRhKG5ieXRlcyl8dHMoNGJ5dGVzKXx0YWcwKDFieXRlKXx0YWcxKDFieXRlKXwKQEAgLTQ3MSw2ICYjNDM7NTMzLDcgQEAgRFNBX1RBR19EUklWRVIobGFuOTM3eF9uZXRkZXZfb3BzKTsKIE1PRFVMRV9BTElBU19EU0FfVEFHX0RSSVZFUihEU0FfVEFHX1BST1RPX0xBTjkzN1gsIExBTjkzN1hfTkFNRSk7CiAKIHN0YXRpYyBzdHJ1Y3QgZHNhX3RhZ19kcml2ZXIgKmRzYV90YWdfZHJpdmVyX2FycmF5W10gPSB7CiYjNDM7CSZhbXA7RFNBX1RBR19EUklWRVJfTkFNRShrc3o4NDYzX25ldGRldl9vcHMpLAogCSZhbXA7RFNBX1RBR19EUklWRVJfTkFNRShrc3o4Nzk1X25ldGRldl9vcHMpLAogCSZhbXA7RFNBX1RBR19EUklWRVJfTkFNRShrc3o5NDc3X25ldGRldl9vcHMpLAogCSZhbXA7RFNBX1RBR19EUklWRVJfTkFNRShrc3o5ODkzX25ldGRldl9vcHMpLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTM3OAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDQ0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIEZ1enphYmlsaXR5IG9mIHRoZSBLU1o4NDYzIFN3aXRjaCBTdXBwb3J0IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBLU1o4NDYzIHN3aXRjaCBmZWF0dXJlcywgc3BlY2lmaWNhbGx5IHRoZSBJUlEsIFBUUCwgYW5kIERTQSB0YWcgcHJvdG9jb2wuIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZXMgYXJlIGluIHRoZSB1c3VhbCBwbGFjZXM6IGBrc3o4LmNgLCBga3N6X2NvbW1vbi5jYCwgYGtzel9wdHAuY2AsIGBuZXQvZHNhL3RhZ19rc3ouY2AsIGFsbCByZWxhdGVkIHRvIHRoaXMgTWljcm9jaGlwIEtTWjg0NjMgRFNBIHN3aXRjaCBkcml2ZXIuIEl0IGFkZHMgYSBuZXcgYERTQV9UQUdfUFJPVE9fS1NaODQ2M2AsIElSUSwgYW5kIFBUUCBzdXBwb3J0IOKAkyBuaWNlLiBCdXQgdGhlIG1pbGxpb24tZG9sbGFyIHF1ZXN0aW9uIGlzOiBjYW4gdGhpcyBiZSAqcmVhY2hlZCogZWZmZWN0aXZlbHkgZm9yIGZ1enppbmc/CgpOb3JtYWxseSwgRFNBIHN3aXRjaGVzIHJlcXVpcmUgdGhlIHJlYWwgaGFyZHdhcmUgY29ubmVjdGlvbiwgbGlrZSBJMkMsIFNQSSwgb3IgTURJTywgdG8gdGhlIHN3aXRjaCBjaGlwLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nLCAmIzM0O0NhbiB0aGlzIGJlIGVtdWxhdGVkIGluIFFFTVU/JiMzNDsgSG1tLCBubywgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoZSBLU1o4NDYzLiBPa2F5LCBidXQgY2FuIGl0IGJlICpmdXp6ZWQqPyBMZXQmIzM5O3Mgc2VlLi4uCgpJJiMzOTttIHJlbWVtYmVyaW5nIHRoZSBwcm9tcHQgYWJvdXQgV29ydGhGdXp6aW5nIGFuZCB3aGF0JiMzOTtzIGV4cGxpY2l0bHkgZXhjbHVkZWQuIFNwZWNpZmljYWxseSwgJiMzNDt2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSYjMzQ7LiBBbHJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBCdXQgd2hhdCBhYm91dCBEU0Egc3dpdGNoZXMgY29ubmVjdGVkIHZpYSBNRElPIG9yIFNQST8gVGhpcyBpcyB0aGUgY29yZSBpc3N1ZS4KCkNhbiBTeXprYWxsZXIgZnV6eiBNRElPL1NQSSBkZXZpY2VzPyBJICp0aGluayogU3l6a2FsbGVyIGNhbiBmdXp6IEkyQy9TUEkgdmlhIGAvZGV2L2kyYy0qYCBhbmQgYC9kZXYvc3BpZGV2YCwgYnV0IHRoYXQgcmVxdWlyZXMgdGhlIGRldmljZSB0byBiZSBwcm9iZWQuIFRoYXQmIzM5O3MgdGhlIGNydXggb2YgdGhlIHByb2JsZW0uIFdhaXQsIGRvZXMgU3l6a2FsbGVyICpoYXZlKiBzb21lIGtpbmQgb2YgSTJDL1NQSSBpbmplY3Rpb24/IE5vLCBJIHRoaW5rIGl0IHVzZXMgdmlydHVhbCBkZXZpY2VzIG9yIG1vY2tzLCBidXQgZm9yIERTQSBzd2l0Y2hlcywgdGhhdCYjMzk7cyB0eXBpY2FsbHkgZGlmZmljdWx0IHVubGVzcyB0aGVyZSYjMzk7cyBhIGdvb2QgbW9jayBpbXBsZW1lbnRhdGlvbi4KClNvLCB0aGUga2V5IGlzIHRvIHNlZSBpZiB3ZSBjYW4gdHJpZ2dlciBhbnkgb2YgdGhlIGtleSBmdW5jdGlvbnMgaW4gdGhpcyBkcml2ZXIsIGxpa2UgYGtzejg0NjNfc2V0dXBgIG9yIGBrc3o4NDYzX3htaXRgLiBJJiMzOTtsbCBkbyBhIHF1aWNrIHNlYXJjaCBpbiB0aGUga2VybmVsIHNvdXJjZSB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW4gb2J2aW91cyB3YXkgdG8gcmVhY2ggdGhlbS4gR290dGEgZmlndXJlIG91dCBpZiB0aGVyZSBpcyBhIHBhdGggdG8gZ2V0IHRoaXMgY29kZSB0byBleGVjdXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tzejg0NjMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDU0NCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWljcm9jaGlwLGtzei55YW1sPTEzPXByb3BlcnRpZXM6XG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWljcm9jaGlwLGtzei55YW1sLTE3LSAgICBlbnVtOlxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWljcm9jaGlwLGtzei55YW1sOjE4OiAgICAgIC0gbWljcm9jaGlwLGtzejg0NjNcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21pY3JvY2hpcCxrc3oueWFtbC0xOS0gICAgICAtIG1pY3JvY2hpcCxrc3o4NzY1XG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWljcm9jaGlwLGtzei55YW1sPTExNT1hbGxPZjpcbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9taWNyb2NoaXAsa3N6LnlhbWwtMTUzLSAgICAgICAgICBjb250YWluczpcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21pY3JvY2hpcCxrc3oueWFtbDoxNTQ6ICAgICAgICAgICAgY29uc3Q6IG1pY3JvY2hpcCxrc3o4NDYzXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9taWNyb2NoaXAsa3N6LnlhbWwtMTU1LSAgICB0aGVuOlxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTE4ND1zdGF0aWMgaW50IGtzejhfcG1lX3B3cml0ZTgoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsIGludCBvZmZzZXQsIHU4IGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMTkwLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MTkxOnN0YXRpYyB2b2lkIGtzejg0NjNfaXJxX21hc2soc3RydWN0IGlycV9kYXRhICpkKVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMTkyLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xOTctXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoxOTg6c3RhdGljIHZvaWQga3N6ODQ2M19pcnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZClcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTE5OS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjA0LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MjA1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaXJxX2NoaXAga3N6ODQ2M19pcnFfY2hpcCA9IHtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjIwNjpcdC5uYW1lXHRcdFx0PSBcJiMzNDtrc3o4NDYzLWlycVwmIzM0OyxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjIwNzpcdC5pcnFfbWFza1x0XHQ9IGtzejg0NjNfaXJxX21hc2ssXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyMDg6XHQuaXJxX3VubWFza1x0XHQ9IGtzejg0NjNfaXJxX3VubWFzayxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTIwOS1cdC5pcnFfYnVzX2xvY2tcdFx0PSBrc3pfaXJxX2J1c19sb2NrLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTIxMi1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjIxMzpzdGF0aWMgaW50IGtzejg0NjNfaXJxX2RvbWFpbl9tYXAoc3RydWN0IGlycV9kb21haW4gKmQsXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yMTQtXHRcdFx0XHQgIHVuc2lnbmVkIGludCBpcnEsIGlycV9od19udW1iZXJfdCBod2lycSlcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yMTYtXHRpcnFfc2V0X2NoaXBfZGF0YShpcnEsIGQtXHUwMDNlaG9zdF9kYXRhKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjIxNzpcdGlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsIFx1MDAyNmtzejg0NjNfaXJxX2NoaXAsIGhhbmRsZV9sZXZlbF9pcnEpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjE4LVx0aXJxX3NldF9ub3Byb2JlKGlycSk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjIyLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MjIzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgaXJxX2RvbWFpbl9vcHMga3N6ODQ2M19pcnFfZG9tYWluX29wcyA9IHtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjIyNDpcdC5tYXBcdD0ga3N6ODQ2M19pcnFfZG9tYWluX21hcCxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTIyNS1cdC54bGF0ZVx0PSBpcnFfZG9tYWluX3hsYXRlX3R3b2NlbGwsXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjI3LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MjI4OnN0YXRpYyBpbnQga3N6ODQ2M19naXJxX3NldHVwKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yMjkte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTIzNS1cdGdpcnEtXHUwMDNlbWFza2VkID0gMDtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjIzNjpcdHNucHJpbnRmKGdpcnEtXHUwMDNlbmFtZSwgc2l6ZW9mKGdpcnEtXHUwMDNlbmFtZSksIFwmIzM0O2tzejg0NjMtZ2lycVwmIzM0Oyk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yMzctXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjM5LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MjQwOlx0cmV0dXJuIGtzel9pcnFfY29tbW9uX3NldHVwKGRldiwgZ2lycSwgXHUwMDI2a3N6ODQ2M19pcnFfZG9tYWluX29wcyk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yNDEtfVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjQyLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MjQzOnN0YXRpYyBpbnQga3N6ODQ2M19yZXNldF9zd2l0Y2goc3RydWN0IGtzel9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI0NC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9MzI2PXN0YXRpYyBpbnQga3N6OF9wb3J0X3F1ZXVlX3NwbGl0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LCBpbnQgcXVldWVzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTM0OS1cdFx0XHRyZXR1cm4gcmV0O1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MzUwOlx0fSBlbHNlIGlmIChrc3pfaXNfa3N6ODQ2MyhkZXYpKSB7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0zNTEtXHRcdG1hc2tfNHEgPSBLU1o4ODczX1BPUlRfNFFVRVVFX1NQTElUX0VOO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTE0ODk9c3RhdGljIHZvaWQga3N6OF9jZmdfcG9ydF9tZW1iZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsIHU4IG1lbWJlcilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xNDkzLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MTQ5NDpcdGlmIChrc3pfaXNfa3N6ODQ2MyhkZXYpKVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMTQ5NS1cdFx0b2Zmc2V0ID0gUDFDUjI7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9MTUwMj1zdGF0aWMgdm9pZCBrc3o4X2ZsdXNoX2R5bl9tYWNfdGFibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xNTI2LVx0fVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MTUyNzpcdGlmIChrc3pfaXNfa3N6ODQ2MyhkZXYpKSB7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xNTI4LVx0XHRyZWcgPSBLU1o4NDYzX0ZMVVNIX1RBQkxFX0NUUkw7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9MTY4OT1zdGF0aWMgdm9pZCBrc3o4X3BvcnRfZW5hYmxlX3B2aWQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsIGJvb2wgc3RhdGUpXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xNjkwLXtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjE2OTE6XHRpZiAoa3N6X2lzX2tzejg4eDMoZGV2KSB8fCBrc3pfaXNfa3N6ODQ2MyhkZXYpKSB7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xNjkyLVx0XHRpbnQgcmVnID0gUkVHX1NXX0lOU0VSVF9TUkNfUFZJRDtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTE2OTMtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoxNjk0Olx0XHRpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSlcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTE2OTUtXHRcdFx0cmVnID0gS1NaODQ2M19SRUdfU1dfQ1RSTF85O1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTE4MDg9c3RhdGljIGludCBrc3o4X3BvcnRfbWlycm9yX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTE4MTQtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoxODE1Olx0aWYgKGtzel9pc19rc3o4NDYzKGRldikpXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xODE2LVx0XHRvZmZzZXQgPSBQMUNSMjtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYz0xODM1PXN0YXRpYyB2b2lkIGtzejhfcG9ydF9taXJyb3JfZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMTg0MS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjE4NDI6XHRpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSlcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTE4NDMtXHRcdG9mZnNldCA9IFAxQ1IyO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTE4NTgtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoxODU5OnN0YXRpYyB1OCBrc3o4NDYzX3RjX2N0cmwoaW50IHBvcnQsIGludCBxdWV1ZSlcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTE4NjAte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTE4ODk9c3RhdGljIGludCBrc3o4OHgzX3RjX2V0c19hZGQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMTkwNC1cdFx0cmVnID0gS1NaODg3M19UWFFfU1BMSVRfQ1RSTF9SRUcocG9ydCwgcXVldWUpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MTkwNTpcdFx0aWYgKGtzel9pc19rc3o4NDYzKGRldikpXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoxOTA2Olx0XHRcdHJlZyA9IGtzejg0NjNfdGNfY3RybChwb3J0LCBxdWV1ZSk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xOTA3LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTE5MzA9c3RhdGljIGludCBrc3o4OHgzX3RjX2V0c19kZWwoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMTk0MS1cdFx0cmVnID0gS1NaODg3M19UWFFfU1BMSVRfQ1RSTF9SRUcocG9ydCwgcXVldWUpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MTk0MjpcdFx0aWYgKGtzel9pc19rc3o4NDYzKGRldikpXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoxOTQzOlx0XHRcdHJlZyA9IGtzejg0NjNfdGNfY3RybChwb3J0LCBxdWV1ZSk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xOTQ0LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTE5NTc9c3RhdGljIGludCBrc3o4X3RjX3NldHVwX3FkaXNjX2V0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTE5NjItXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoxOTYzOlx0aWYgKCEoa3N6X2lzX2tzejg4eDMoZGV2KSB8fCBrc3pfaXNfa3N6ODQ2MyhkZXYpKSlcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTE5NjQtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYz0yMDI4PXN0YXRpYyB2b2lkIGtzejhfcG9ydF9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgYm9vbCBjcHVfcG9ydClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yMDM5LVx0b2Zmc2V0ID0gUF9CQ0FTVF9TVE9STV9DVFJMO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MjA0MDpcdGlmIChrc3pfaXNfa3N6ODQ2MyhkZXYpKVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjA0MS1cdFx0b2Zmc2V0ID0gUDFDUjE7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjA0Ny1cdG9mZnNldCA9IFBfODAyXzFQX0NUUkw7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyMDQ4Olx0aWYgKGtzel9pc19rc3o4NDYzKGRldikpXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yMDQ5LVx0XHRvZmZzZXQgPSBQMUNSMjtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYz0yMDc5PXN0YXRpYyB2b2lkIGtzejg4eDNfY29uZmlnX3JtaWlfY2xrKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjA5My1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjIwOTQ6c3RhdGljIHZvaWQga3N6ODQ2M19jb25maWdfY3B1X3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjA5NS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9MjMzNj1zdGF0aWMgdm9pZCBrc3o4OHh4X3JfbWliX3N0YXRzNjQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjM4NC1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjIzODU6c3RhdGljIGludCBrc3o4NDYzX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTIzODYte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTIzOTktXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyNDAwOlx0cmV0ID0ga3N6ODQ2M19yZXNldF9zd2l0Y2goZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI0MDEtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjQxMy1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjI0MTQ6XHRrc3o4NDYzX2NvbmZpZ19jcHVfcG9ydChkcyk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yNDE1LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI0NzItXHRpZiAoZGV2LVx1MDAzZWlycSBcdTAwM2UgMCkge1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MjQ3MzpcdFx0cmV0ID0ga3N6ODQ2M19naXJxX3NldHVwKGRldik7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yNDc0LVx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI0NzYtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyNDc3Olx0XHRyZXQgPSBrc3o4NDYzX3B0cF9pcnFfc2V0dXAoZHMpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjQ3OC1cdFx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yNTA5LVx0aWYgKGRldi1cdTAwM2VpcnEgXHUwMDNlIDApXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyNTEwOlx0XHRrc3o4NDYzX3B0cF9pcnFfZnJlZShkcyk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yNTExLWZyZWVfZ2lycTpcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yNTE3LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MjUxODpzdGF0aWMgdm9pZCBrc3o4NDYzX3RlYXJkb3duKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI1MTkte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI1MjMtXHRcdGtzel9wdHBfY2xvY2tfdW5yZWdpc3Rlcihkcyk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyNTI0Olx0XHRrc3o4NDYzX3B0cF9pcnFfZnJlZShkcyk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yNTI1LVx0XHRrc3pfaXJxX2ZyZWUoXHUwMDI2ZGV2LVx1MDAzZWdpcnEpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTI4NDE9c3RhdGljIHUzMiBrc3o4X2dldF9wb3J0X2FkZHIoaW50IHBvcnQsIGludCBvZmZzZXQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjg0NS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjI4NDY6c3RhdGljIHUzMiBrc3o4NDYzX2dldF9wb3J0X2FkZHIoaW50IHBvcnQsIGludCBvZmZzZXQpXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yODQ3LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yODUzLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6Mjg1NDpzdGF0aWMgdTE2IGtzejg0NjNfZ2V0X3BoeV9hZGRyKHUxNiBwaHksIHUxNiByZWcsIHUxNiBvZmZzZXQpXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yODU1LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yODU4LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6Mjg1OTpzdGF0aWMgaW50IGtzejg0NjNfcl9waHkoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTE2IHBoeSwgdTE2IHJlZywgdTE2ICp2YWwpXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yODYwLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yODY4LVx0Y2FzZSBNSUlfUEhZU0lEMTpcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjI4Njk6XHRcdHN3X3JlZyA9IGtzejg0NjNfZ2V0X3BoeV9hZGRyKHBoeSwgMCwgUEhZMUlIUik7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yODcwLVx0XHRicmVhaztcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI4NzEtXHRjYXNlIE1JSV9QSFlTSUQyOlxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6Mjg3MjpcdFx0c3dfcmVnID0ga3N6ODQ2M19nZXRfcGh5X2FkZHIocGh5LCAwLCBQSFkxSUxSKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI4NzMtXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI4NzctXHRjYXNlIE1JSV9MUEE6XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyODc4Olx0XHRzd19yZWcgPSBrc3o4NDYzX2dldF9waHlfYWRkcihwaHksIHJlZywgUDFNQkNSKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI4NzktXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI4OTgtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyODk5OnN0YXRpYyBpbnQga3N6ODQ2M19waHlfcmVhZDE2KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IGFkZHIsIGludCByZWcpXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yOTAwLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yOTA0LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MjkwNTpcdHJldCA9IGtzejg0NjNfcl9waHkoZGV2LCBhZGRyLCByZWcsIFx1MDAyNnZhbCk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yOTA2LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yOTExLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MjkxMjpzdGF0aWMgaW50IGtzejg0NjNfd19waHkoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTE2IHBoeSwgdTE2IHJlZywgdTE2IHZhbClcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI5MTMte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI5MjUtXHRjYXNlIE1JSV9BRFZFUlRJU0U6XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyOTI2Olx0XHRzd19yZWcgPSBrc3o4NDYzX2dldF9waHlfYWRkcihwaHksIHJlZywgUDFNQkNSKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI5MjctXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI5MzktXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyOTQwOnN0YXRpYyBpbnQga3N6ODQ2M19waHlfd3JpdGUxNihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBhZGRyLCBpbnQgcmVnLCB1MTYgdmFsKVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjk0MS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjk0NC1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjI5NDU6XHRyZXQgPSBrc3o4NDYzX3dfcGh5KGRldiwgYWRkciwgcmVnLCB2YWwpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjk0Ni1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9Mjk3MD1zdGF0aWMgaW50IGtzejhfc3dpdGNoX2luaXQoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yOTc4LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6Mjk3OTpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGtzejg0NjNfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yOTgwLVx0XHRcdFx0XHRcdCAgICAgIGludCBwb3J0LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI5ODUtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyOTg2OnN0YXRpYyBpbnQga3N6ODQ2M19jb25uZWN0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yOTg3LVx0XHRcdFx0XHRlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG8pXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9MzA2Nz1jb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzIGtzejhfcGh5bGlua19tYWNfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTMwNzQtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzozMDc1OmNvbnN0IHN0cnVjdCBrc3pfZGV2X29wcyBrc3o4NDYzX2Rldl9vcHMgPSB7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzozMDc2Olx0LmdldF9wb3J0X2FkZHIgPSBrc3o4NDYzX2dldF9wb3J0X2FkZHIsXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0zMDc3LVx0LmNmZ19wb3J0X21lbWJlciA9IGtzejhfY2ZnX3BvcnRfbWVtYmVyLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTMxMDA9Y29uc3Qgc3RydWN0IGtzel9kZXZfb3BzIGtzejg4eHhfZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0zMTEzLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MzExNDpjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODQ2M19zd2l0Y2hfb3BzID0ge1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MzExNTpcdC5nZXRfdGFnX3Byb3RvY29sXHQ9IGtzejg0NjNfZ2V0X3RhZ19wcm90b2NvbCxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjMxMTY6XHQuY29ubmVjdF90YWdfcHJvdG9jb2wgICA9IGtzejg0NjNfY29ubmVjdF90YWdfcHJvdG9jb2wsXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzozMTE3Olx0LnNldHVwXHRcdFx0PSBrc3o4NDYzX3NldHVwLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MzExODpcdC50ZWFyZG93blx0XHQ9IGtzejg0NjNfdGVhcmRvd24sXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzozMTE5Olx0LnBoeV9yZWFkXHRcdD0ga3N6ODQ2M19waHlfcmVhZDE2LFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MzEyMDpcdC5waHlfd3JpdGVcdFx0PSBrc3o4NDYzX3BoeV93cml0ZTE2LFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMzEyMS1cdC5waHlsaW5rX2dldF9jYXBzXHQ9IGtzejhfcGh5bGlua19nZXRfY2Fwcyxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0zMTQ1LVx0LnJlc3VtZVx0XHRcdD0ga3N6X3Jlc3VtZSxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjMxNDY6XHQuZ2V0X3RzX2luZm9cdFx0PSBrc3o4NDYzX2dldF90c19pbmZvLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMzE0Ny1cdC5wb3J0X2h3dHN0YW1wX2dldFx0PSBrc3pfaHd0c3RhbXBfZ2V0LFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MzE0ODpcdC5wb3J0X2h3dHN0YW1wX3NldFx0PSBrc3o4NDYzX2h3dHN0YW1wX3NldCxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTMxNDktXHQucG9ydF90eHRzdGFtcFx0XHQ9IGtzel9wb3J0X3R4dHN0YW1wLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5oLTE0LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4Lmg6MTU6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBrc3pfZGV2X29wcyBrc3o4NDYzX2Rldl9vcHM7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguaC0xNi1leHRlcm4gY29uc3Qgc3RydWN0IGtzel9kZXZfb3BzIGtzejg3eHhfZGV2X29wcztcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguaD0xOT1leHRlcm4gY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyBrc3o4X3BoeWxpbmtfbWFjX29wcztcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5oOjIwOmV4dGVybiBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODQ2M19zd2l0Y2hfb3BzO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmgtMjEtZXh0ZXJuIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBrc3o4N3h4X3N3aXRjaF9vcHM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM9MTk1PWludCBrc3pfcGh5bGlua19tYWNfZW5hYmxlX3R4X2xwaShzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0yMDAtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzoyMDE6c3RhdGljIGNvbnN0IHUxNiBrc3o4NDYzX3JlZ3NbXSA9IHtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTIwMi1cdFtSRUdfU1dfTUFDX0FERFJdXHRcdD0gMHgxMCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0yMjctXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzoyMjg6c3RhdGljIGNvbnN0IHUzMiBrc3o4NDYzX21hc2tzW10gPSB7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0yMjktXHRbUE9SVF84MDJfMVBfUkVNQVBQSU5HXVx0XHQ9IEJJVCgzKSxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0yNDktXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzoyNTA6c3RhdGljIHU4IGtzejg0NjNfc2hpZnRzW10gPSB7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0yNTEtXHRbVkxBTl9UQUJMRV9NRU1CRVJTSElQX1NdXHQ9IDE2LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jPTExNDE9Y29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTExNTEtXHRcdC5udW1faXBtcyA9IDQsXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzoxMTUyOlx0XHQub3BzID0gXHUwMDI2a3N6ODQ2M19kZXZfb3BzLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM6MTE1MzpcdFx0LnN3aXRjaF9vcHMgPSBcdTAwMjZrc3o4NDYzX3N3aXRjaF9vcHMsXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0xMTU0LVx0XHQucGh5bGlua19tYWNfb3BzID0gXHUwMDI2a3N6ODh4M19waHlsaW5rX21hY19vcHMsXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMTE1Ny1cdFx0LnJlZ19taWJfY250ID0gTUlCX0NPVU5URVJfTlVNLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM6MTE1ODpcdFx0LnJlZ3MgPSBrc3o4NDYzX3JlZ3MsXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzoxMTU5Olx0XHQubWFza3MgPSBrc3o4NDYzX21hc2tzLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM6MTE2MDpcdFx0LnNoaWZ0cyA9IGtzejg0NjNfc2hpZnRzLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMTE2MS1cdFx0LnN1cHBvcnRzX21paSA9IHtmYWxzZSwgZmFsc2UsIHRydWV9LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jPTM1NjY9aW50IGtzel9zd2l0Y2hfbWFjYWRkcl9nZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0zNjAxLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgRVRIX0FMRU47IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzozNjAyOlx0XHRpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSkge1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMzYwMy1cdFx0XHR1MTYgYWRkcjE2ID0gKCh1MTYpYWRkcltpXSBcdTAwM2NcdTAwM2MgOCkgfCBhZGRyW2kgJiM0MzsgMV07XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM9MzgyMz1pbnQga3N6X2RyaXZlX3N0cmVuZ3RoX3dyaXRlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMzg2MS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jOjM4NjI6c3RhdGljIGludCBrc3o4NDYzX2NvbmZpZ3VyZV9zdHJhcHNfc3BpKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0zODYzLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0zODg4LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM6Mzg4OTpzdGF0aWMgaW50IGtzejg0NjNfcmVsZWFzZV9zdHJhcHNfc3BpKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0zODkwLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYz0zODk0PWludCBrc3pfc3dpdGNoX3JlZ2lzdGVyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMzkwOC1cdGlmIChkZXYtXHUwMDNlcmVzZXRfZ3Bpbykge1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM6MzkwOTpcdFx0aWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGRldi1cdTAwM2VkZXYtXHUwMDNlb2Zfbm9kZSwgXCYjMzQ7bWljcm9jaGlwLGtzejg0NjNcJiMzNDspKSB7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzozOTEwOlx0XHRcdHJldCA9IGtzejg0NjNfY29uZmlndXJlX3N0cmFwc19zcGkoZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTM5MTEtXHRcdFx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0zOTE5LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM6MzkyMDpcdFx0aWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGRldi1cdTAwM2VkZXYtXHUwMDNlb2Zfbm9kZSwgXCYjMzQ7bWljcm9jaGlwLGtzejg0NjNcJiMzNDspKSB7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzozOTIxOlx0XHRcdHJldCA9IGtzejg0NjNfcmVsZWFzZV9zdHJhcHNfc3BpKGRldik7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0zOTIyLVx0XHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmg9NTYzPXN0YXRpYyBpbmxpbmUgc3RydWN0IHJlZ21hcCAqa3N6X3JlZ21hcF8zMihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oLTU2Ny1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oOjU2ODpzdGF0aWMgaW5saW5lIGJvb2wga3N6X2lzX2tzejg0NjMoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oLTU2OS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmg9Nzk1PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19rc3o4KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmgtNzk3LVx0cmV0dXJuIGtzel9pc19rc3o4N3h4KGRldikgfHwga3N6X2lzX2tzejg4eDMoZGV2KSB8fFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmg6Nzk4Olx0ICAgICAgIGtzel9pc184ODk1X2ZhbWlseShkZXYpIHx8IGtzel9pc19rc3o4NDYzKGRldik7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaC03OTktfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oPTgwMT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfa3N6ODh4eChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oLTgwMy1cdHJldHVybiBrc3pfaXNfa3N6ODh4MyhkZXYpIHx8IGtzel9pc184ODk1X2ZhbWlseShkZXYpIHx8XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaDo4MDQ6XHQgICAgICAga3N6X2lzX2tzejg0NjMoZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oLTgwNS19XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmg9ODM3PXN0YXRpYyBpbmxpbmUgYm9vbCBrc3pfaXNfc2dtaWlfcG9ydChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaC0xMDM2LVx0XHQucGFkX2JpdHMgPSAocmVncGFkKSxcdFx0XHRcdFx0XFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oOjEwMzc6XHRcdC5yZWFkID0ga3N6ODQ2M19zcGlfcmVhZCxcdFx0XHRcdFxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaDoxMDM4Olx0XHQud3JpdGUgPSBrc3o4NDYzX3NwaV93cml0ZSxcdFx0XHRcdFxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaC0xMDM5LVx0XHQubWF4X3JlZ2lzdGVyID0gQklUKHJlZ2JpdHMpIC0gMSxcdFx0XHRcXFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2RjYi5jPTk2PXN0YXRpYyB2b2lkIGtzel9nZXRfZGVmYXVsdF9wb3J0X3ByaW9fcmVnKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCAqcmVnLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2RjYi5jLTEwMi1cdFx0KnNoaWZ0ID0gX19iZl9zaGYoS1NaOF9QT1JUX0JBU0VEX1BSSU9fTSk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9kY2IuYzoxMDM6XHRcdGlmIChrc3pfaXNfa3N6ODQ2MyhkZXYpKVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfZGNiLmMtMTA0LVx0XHRcdCpyZWcgPSBLU1o4NDYzX1JFR19QT1JUXzFfQ1RSTF8wO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2RjYi5jPTEyMj1zdGF0aWMgdm9pZCBrc3pfZ2V0X2RzY3BfcHJpb19yZWcoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50ICpyZWcsXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfZGNiLmMtMTI4LVx0XHQqbWFzayA9IEdFTk1BU0soMSwgMCk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9kY2IuYzoxMjk6XHR9IGVsc2UgaWYgKGtzel9pc19rc3o4OHgzKGRldikgfHwga3N6X2lzX2tzejg0NjMoZGV2KSkge1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfZGNiLmMtMTMwLVx0XHQqcmVnID0gS1NaODhYM19SRUdfVE9TX0RTQ1BfQ1RSTDtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9kY2IuYy0xMzItXHRcdCptYXNrID0gR0VOTUFTSygxLCAwKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2RjYi5jOjEzMzpcdFx0aWYgKGtzel9pc19rc3o4NDYzKGRldikpXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9kY2IuYy0xMzQtXHRcdFx0KnJlZyA9IEtTWjg0NjNfUkVHX1RPU19EU0NQX0NUUkw7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfZGNiLmM9MTUyPXN0YXRpYyB2b2lkIGtzel9nZXRfYXBwdHJ1c3RfbWFwX2FuZF9yZWcoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9kY2IuYy0xNTktXHRcdCptYXNrID0gS1NaOF9QT1JUX0RJRkZTRVJWX0VOQUJMRSB8IEtTWjhfUE9SVF84MDJfMVBfRU5BQkxFO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfZGNiLmM6MTYwOlx0XHRpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSlcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2RjYi5jLTE2MS1cdFx0XHQqcmVnID0gS1NaODQ2M19SRUdfUE9SVF8xX0NUUkxfMDtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYz0yNzE9c3RhdGljIGludCBrc3pfcHRwX2VuYWJsZV9tb2RlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMjk5LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmM6MzAwOmludCBrc3o4NDYzX2dldF90c19pbmZvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy0zMDEtXHRcdFx0c3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKnRzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jPTM1Nz1pbnQga3N6X2h3dHN0YW1wX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTM2OC1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jOjM2OTpzdGF0aWMgaW50IGtzejg0NjNfc2V0X2h3dHN0YW1wX2NvbmZpZyhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMzcwLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBrc3pfcG9ydCAqcHJ0LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTQxNS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jOjQxNjppbnQga3N6ODQ2M19od3RzdGFtcF9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTQxNy1cdFx0XHQgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZyxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy00MjUtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYzo0MjY6XHRyZXQgPSBrc3o4NDYzX3NldF9od3RzdGFtcF9jb25maWcoZGV2LCBwcnQsIGNvbmZpZyk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy00MjctXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jPTY0Nz1zdGF0aWMgdm9pZCBrc3pfcHRwX3R4dHN0YW1wX3NrYihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTY2NC1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jOjY2NTpzdGF0aWMgdm9pZCBrc3o4NDYzX3NldF9wZGVsYXlyZXNwX2ZsYWcoc3RydWN0IGtzel9wb3J0ICpwcnQsXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy02NjYtXHRcdFx0XHRcdHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtNjcxLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmM6NjcyOlx0aWYgKCFrc3pfaXNfa3N6ODQ2MyhwcnQtXHUwMDNla3N6X2RldikpXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy02NzMtXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYz02OTA9dm9pZCBrc3pfcG9ydF9kZWZlcnJlZF94bWl0KHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtNzA1LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmM6NzA2Olx0a3N6ODQ2M19zZXRfcGRlbGF5cmVzcF9mbGFnKHBydCwgc2tiKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTcwNy1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYz0xMDk4PXN0YXRpYyBpbnQga3N6X3JlYWRfdHMoc3RydWN0IGtzel9wb3J0ICpwb3J0LCB1MTYgcmVnLCB1MzIgKnRzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTExMDYtXHQgKi9cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jOjExMDc6XHRpZiAoa3N6X2lzX2tzejg0NjMocG9ydC1cdTAwM2Vrc3pfZGV2KSkge1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMTEwOC1cdFx0Y29uc3Qgc3RydWN0IGtzel9kZXZfb3BzICpvcHMgPSBwb3J0LVx1MDAzZWtzel9kZXYtXHUwMDNlZGV2X29wcztcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYz0xMjQ1PXN0YXRpYyBpbnQga3N6X3B0cF9tc2dfaXJxX3NldHVwKHN0cnVjdCBrc3pfcG9ydCAqcG9ydCwgdTggbilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy0xMjc0LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmM6MTI3NTpzdGF0aWMgaW50IGtzejg0NjNfcHRwX3BvcnRfaXJxX3NldHVwKHN0cnVjdCBrc3pfaXJxICpwdHBpcnEsXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy0xMjc2LVx0XHRcdFx0ICAgICAgc3RydWN0IGtzel9wb3J0ICpwb3J0LCBpbnQgaHdfaXJxKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTEzMTgtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYzoxMzE5OnN0YXRpYyB2b2lkIGtzejg0NjNfcHRwX3BvcnRfaXJxX3RlYXJkb3duKHN0cnVjdCBrc3pfcG9ydCAqcG9ydClcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTEzMjAte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTEzMjYtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYzoxMzI3OmludCBrc3o4NDYzX3B0cF9pcnFfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMTMyOC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMTM1Ni1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jOjEzNTc6XHRyZXQgPSBrc3o4NDYzX3B0cF9wb3J0X2lycV9zZXR1cChwdHBpcnEsIHBvcnQxLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMTM1OC1cdFx0XHRcdFx0IEtTWjg0NjNfUFRQX1BPUlQxX0lOVF9TVEFSVCAtIEtTWjg0NjNfUFRQX0lOVF9TVEFSVCk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMTM2MS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jOjEzNjI6XHRyZXQgPSBrc3o4NDYzX3B0cF9wb3J0X2lycV9zZXR1cChwdHBpcnEsIHBvcnQyLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMTM2My1cdFx0XHRcdFx0IEtTWjg0NjNfUFRQX1BPUlQyX0lOVF9TVEFSVCAtIEtTWjg0NjNfUFRQX0lOVF9TVEFSVCk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMTM3NC1mcmVlX3BvcnQyOlxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmM6MTM3NTpcdGtzejg0NjNfcHRwX3BvcnRfaXJxX3RlYXJkb3duKHBvcnQyKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTEzNzYtZnJlZV9wb3J0MTpcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jOjEzNzc6XHRrc3o4NDYzX3B0cF9wb3J0X2lycV90ZWFyZG93bihwb3J0MSk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy0xMzc4LXJlbGVhc2VfZG9tYWluOlxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTEzODMtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYzoxMzg0OnZvaWQga3N6ODQ2M19wdHBfaXJxX2ZyZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMTM4NS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMTM5MS1cdGZyZWVfaXJxKHB0cGlycS1cdTAwM2VpcnFfbnVtLCBwdHBpcnEpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmM6MTM5MjpcdGtzejg0NjNfcHRwX3BvcnRfaXJxX3RlYXJkb3duKHBvcnQyKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jOjEzOTM6XHRrc3o4NDYzX3B0cF9wb3J0X2lycV90ZWFyZG93bihwb3J0MSk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy0xMzk0LVx0aXJxX2RvbWFpbl9yZW1vdmUocHRwaXJxLVx1MDAzZWRvbWFpbik7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg9NDA9aW50IGtzel9nZXRfdHNfaW5mbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmgtNDEtXHRcdCAgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqdHMpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg6NDI6aW50IGtzejg0NjNfZ2V0X3RzX2luZm8oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oLTQzLVx0XHRcdHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICp0cyk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg9NDY9aW50IGtzel9od3RzdGFtcF9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC00OC1cdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg6NDk6aW50IGtzejg0NjNfaHd0c3RhbXBfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC01MC1cdFx0XHQgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZyxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaD01Nz12b2lkIGtzel9wdHBfaXJxX2ZyZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCB1OCBwKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oOjU4OmludCBrc3o4NDYzX3B0cF9pcnFfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oOjU5OnZvaWQga3N6ODQ2M19wdHBfaXJxX2ZyZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oLTYwLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oPTgwPXN0YXRpYyBpbmxpbmUgdm9pZCBrc3pfcHRwX2lycV9mcmVlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgdTggcCkge31cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oLTgxLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg6ODI6c3RhdGljIGlubGluZSBpbnQga3N6ODQ2M19wdHBfaXJxX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oLTgzLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC04Ni1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oOjg3OnN0YXRpYyBpbmxpbmUgdm9pZCBrc3o4NDYzX3B0cF9pcnFfZnJlZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpIHt9XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC04OC1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oLTg5LSNkZWZpbmUga3N6X2dldF90c19pbmZvIE5VTExcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oOjkwOiNkZWZpbmUga3N6ODQ2M19nZXRfdHNfaW5mbyBOVUxMXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC05MS1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC05NC0jZGVmaW5lIGtzel9od3RzdGFtcF9zZXQgTlVMTFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg6OTU6I2RlZmluZSBrc3o4NDYzX2h3dHN0YW1wX3NldCBOVUxMXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC05Ni1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYz00MT1LU1pfUkVHTUFQX1RBQkxFKGtzejk0NzcsIDMyLCBLU1o5NDc3X1NQSV9BRERSX1NISUZULFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jLTQzLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmM6NDQ6c3RhdGljIHUxNiBrc3o4NDYzX3JlZyh1MTYgcmVnLCBzaXplX3Qgc2l6ZSlcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jLTQ1LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYy02MC1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jOjYxOnN0YXRpYyBpbnQga3N6ODQ2M19zcGlfcmVhZCh2b2lkICpjb250ZXh0LFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmMtNjItXHRcdFx0ICAgIGNvbnN0IHZvaWQgKnJlZywgc2l6ZV90IHJlZ19zaXplLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jLTczLVx0bWVtY3B5KFx1MDAyNmNtZCwgcmVnLCBzaXplb2YodTE2KSk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYzo3NDpcdGNtZCA9IGtzejg0NjNfcmVnKGNtZCwgdmFsX3NpemUpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmMtNzUtXHQvKiBTUEkgY29tbWFuZCB1c2VzIGJpZy1lbmRpYW4gZm9ybWF0LiAqL1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jLTk2LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmM6OTc6c3RhdGljIGludCBrc3o4NDYzX3NwaV93cml0ZSh2b2lkICpjb250ZXh0LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgY291bnQpXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYy05OC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmMtMTA4LVx0bWVtY3B5KFx1MDAyNmNtZCwgZGF0YSwgc2l6ZW9mKHUxNikpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmM6MTA5Olx0Y21kID0ga3N6ODQ2M19yZWcoY21kLCB2YWxfc2l6ZSk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYy0xMTAtXHRjbWQgfD0gKDEgXHUwMDNjXHUwMDNjIChLU1o4NDYzX1NQSV9BRERSX1NISUZUICYjNDM7IEtTWjg0NjNfU1BJX1RVUk5BUk9VTkRfU0hJRlQpKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYy0xMzMtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYzoxMzQ6S1NaODQ2M19SRUdNQVBfVEFCTEUoa3N6ODQ2MywgS1NaODQ2M19TUElfQUREUl9TSElGVCwgMCxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jLTEzNS1cdFx0ICAgICBLU1o4NDYzX1NQSV9BRERSX0FMSUdOKTtcbi0tXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzQ0OAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDUwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIEZ1enphYmlsaXR5IG9mIGEgRFNBIFN3aXRjaCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHRvdWNoZXMgYSBmZXcgZmlsZXM6IGBrc3o4LmNgLCBga3N6X2NvbW1vbi5jYCwgYGtzel9wdHAuY2AsIGFuZCBgdGFnX2tzei5jYC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciBJIGNhbiBldmVuICpyZWFjaCogdGhpcyBjb2RlIHdpdGhpbiB0aGUgUUVNVSBlbnZpcm9ubWVudC4gRFNBIHN3aXRjaGVzLCBpbiBnZW5lcmFsLCBuZWVkIGEgaGFyZHdhcmUgZGV2aWNlIHRvIGJlIHByb2JlZC4gVGhlIE1pY3JvY2hpcCBkcml2ZXJzIGFyZSBga3N6X3NwaS5jYCwgYGtzel9pMmMuY2AsIG9yIGBrc3pfbWRpby5jYC4KCk5vdywgbGV0JiMzOTtzIHNlZSwgd2hhdCBkb2VzIHRoZSBwcm9tcHQgc2F5PyAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSYjMzQ7LiBJdCBkb2VzbiYjMzk7dCAqZXhwbGljaXRseSogbWVudGlvbiBEU0Egc3dpdGNoZXMsIGJ1dCB0aGVzZSB1c3VhbGx5IGNvbm5lY3QgdmlhIFNQSS9JMkMvTURJTy4KClRoZSByZWFsIHF1ZXN0aW9uIGlzOiBDYW4gc3l6a2FsbGVyIGVmZmVjdGl2ZWx5IGZ1enogU1BJL0kyQy9NRElPIGRldmljZXMgaW4gYSB3YXkgdGhhdCB3b3VsZCBhbGxvdyBtZSB0byByZWFjaCBhbmQgdGVzdCB0aGUgcmVsZXZhbnQgY29kZSBwYXRocz8gSSBrbm93IHN5emthbGxlciBoYXMgc29tZSBsaW1pdGVkIHN1cHBvcnQgZm9yIEkyQyBhbmQgU1BJIHRocm91Z2ggYC9kZXYvaTJjLSpgIGFuZCBgL2Rldi9zcGlkZXZgLCBidXQgaXQmIzM5O3Mgbm90IHN0cmFpZ2h0Zm9yd2FyZCB0byBpbnN0YW50aWF0ZSBhICpzcGVjaWZpYyogZHJpdmVyIHVubGVzcyB0aGVyZSYjMzk7cyBhIG1vY2sgb3IgYSB2aXJ0dWFsIGRldmljZSBhdmFpbGFibGUuCgpIYW5nIG9uLi4uIGRvZXMgc3l6a2FsbGVyIGhhdmUgc29tZXRoaW5nIGxpa2UgYHN5el9pMmNfc2V0dXBgPyBOb3BlLCBub3RoaW5nIGxpa2UgdGhhdC4gSXQgaGFzIGBzeXpfdXNiX2Nvbm5lY3RgLCBgc3l6XzgwMjExX2luamVjdF9mcmFtZWAsIGV0Yy4sIGJ1dCBub3RoaW5nIGRpcmVjdGx5IHRhcmdldGVkIGF0IHNldHRpbmcgdXAgYSBzcGVjaWZpYyBJMkMgb3IgU1BJIGRldmljZS4KCk9rYXksIHNvIHdoYXQgYWJvdXQgdXNpbmcgYG5ldGxpbmtgIHRvIGNvbmZpZ3VyZSB0aGUgRFNBIHN3aXRjaD8gVGhhdCBjb3VsZCB3b3JrICppZiogdGhlIHN3aXRjaCBpcyBhbHJlYWR5IHByb2JlZC4gSW4gUUVNVSwgdGhhdCYjMzk7cyB1bmxpa2VseSB3aXRob3V0IGEgZGV2aWNlIHRyZWUgb3ZlcmxheSBvciBzb21lIGNsZXZlciB0cmlja2VyeS4gRG9lcyBzeXprYWxsZXIgb2ZmZXIgYW4gZWFzeSB3YXkgdG8gaW5qZWN0IGRldmljZSB0cmVlIG5vZGVzIG9yIHVzZSBgc3l6X2Rldm1lbWAgdG8gZmFrZSBkZXZpY2VzPyBIbW0sIEkgZG9uJiMzOTt0IHRoaW5rIGl0IGhhcyBhICpnZW5lcmljKiBtZXRob2QgZm9yIHByb2JpbmcgSTJDL1NQSSBkZXZpY2VzIHVubGVzcyB0aGV5JiMzOTtyZSBwcmVzZW50IGluIHRoZSBkZWZhdWx0IFFFTVUgZGV2aWNlIHRyZWUuIEFuZCB0aGVzZSBhbG1vc3QgY2VydGFpbmx5IHdvbiYjMzk7dCBiZSB0aGVyZS4KCkNvdWxkIHNvbWV0aGluZyBsaWtlIGBkc2FfbG9vcGAgd29yaz8gV2VsbCwgYGRzYV9sb29wYCBpcyBhIG1vY2sgRFNBIHN3aXRjaCwgYnV0IHRoaXMgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IGZvciB0aGUgYGtzejg0NjNgLCBhIHBhcnRpY3VsYXIgTWljcm9jaGlwIHN3aXRjaCwgc28gdXNpbmcgYSBnZW5lcmljIG1vY2sgd29uJiMzOTt0IHRlc3QgdGhlIG5ldyBjb2RlLgoKUmlnaHQsIHRpbWUgdG8gdGFrZSBhIHF1aWNrIHBlZWsgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgYHN5el9gIHBzZXVkby1zeXNjYWxscyBzcGVjaWZpY2FsbHkgZm9yIFNQSSBvciBJMkMgZGV2aWNlcyB0aGF0IEkmIzM5O20gb3Zlcmxvb2tpbmcuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N5el8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzeXMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDU3OAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDgxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZ1enphYmlsaXR5IG9mIHRoZSBLU1o4NDYzIERyaXZlcioqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IEkgY2FuJiMzOTt0IGp1c3QgYGdyZXBwZXJgIHRocm91Z2ggYHN5cy9gIG9yIGFueXRoaW5nIGNvbnRhaW5pbmcgJiMzNDtzeXpfJiMzNDsgYmVjYXVzZSB0aG9zZSBhcmUgU3l6a2FsbGVyJiMzOTtzIHBzZXVkby1zeXNjYWxscywgbm90IGtlcm5lbCBjb2RlLiBJIG5lZWQgdG8gcmVseSBvbiBteSBleGlzdGluZyBrbm93bGVkZ2Ugb3IgdXNlIGByZWFkLWZpbGVgIGlmIG5lY2Vzc2FyeSwgYnV0IEkgZG9uJiMzOTt0IHRoaW5rIEkmIzM5O2xsIG5lZWQgaXQgdGhpcyB0aW1lLiBUaGUgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIHRoZSBga3N6ODQ2M2AgZHJpdmVyIGlzIGV2ZW4gZnV6emFibGUuCgpOZXR3b3JrIGRyaXZlcnMgZm9yIHNwZWNpZmljIGhhcmR3YXJlIGFyZSB1c3VhbGx5IHVucmVhY2hhYmxlIGluIFFFTVUgYmVjYXVzZSB0aGUgaGFyZHdhcmUgaXNuJiMzOTt0IHByZXNlbnQuIEJ1dCwgYG5ldC9kc2EvdGFnX2tzei5jYCBjb250YWlucyBhIHRhZ2dpbmcgcHJvdG9jb2wuIElzICp0aGF0KiBhY2Nlc3NpYmxlPyBEU0EgdGFnZ2luZyBwcm90b2NvbHMgYXJlIHVzZWQgd2hlbiBhIERTQSBzd2l0Y2ggaXMgYXR0YWNoZWQuIElmIHRoZXJlJiMzOTtzIG5vIERTQSBzd2l0Y2gsIHRoZXJlJiMzOTtzIG5vIHRhZ2dpbmcgcHJvdG9jb2wuIENhbiBhIHVzZXIsIHBlcmhhcHMsIGNyZWF0ZSBhIGR1bW15IG5ldHdvcmsgZGV2aWNlIGFuZCBzZXQgaXRzIERTQSB0YWcgcHJvdG9jb2w/IE5vLCBiZWNhdXNlIERTQSB0YWcgcHJvdG9jb2xzIGFyZSBzZXQgYnkgdGhlIERTQSBjb3JlIHVwb24gc3dpdGNoIHByb2JlLCBzbyB0aGVyZSYjMzk7cyBubyB3YXkgdG8gZG8gdGhpcyBhdCB1c2VyIHNwYWNlLgoKSXMgdGhlcmUgYW55IHZpcnR1YWwgRFNBIHN3aXRjaD8gYGRzYV9sb29wYCBpcyBvbmUsIGJ1dCBpdCB1c2VzIGBEU0FfVEFHX1BST1RPX05PTkVgIG9yIGBEU0FfVEFHX1BST1RPX0RTQWAuIENhbiBhIHVzZXItc3BhY2UgcHJvZ3JhbSB0cmlnZ2VyIGBrc3o4NDYzX3htaXRgIG9yIGBrc3o4NDYzX3JjdmA/IExldCYjMzk7cyBzZWUgaWYgSSBjYW4gY29uZmlndXJlIGBkc2FfbG9vcGAgdG8gdXNlIHRoZSBga3N6ODQ2M2AgdGFnIHByb3RvY29sLiBObywgaXQgbG9va3MgbGlrZSBgZHNhX2xvb3BgIGVpdGhlciBoYXJkY29kZXMgdGhlIHByb3RvY29sIG9yIGl0JiMzOTtzIGZpeGVkLCBzbyB0aGF0JiMzOTtzIG5vdCBnb2luZyB0byB3b3JrLgoKRG9lcyBTeXprYWxsZXIgZXZlbiAqaGF2ZSogYSBgZHNhX2xvb3BgIGluc3RhbmNlPyBObywgaXQgdXN1YWxseSBkb2VzbiYjMzk7dCBmdXp6IHNwZWNpZmljIERTQSB0YWdnZXJzIHVubGVzcyB0aGV5IGNhbiBiZSBhdHRhY2hlZCB0byBhIGR1bW15IGRldmljZS4gQ2FuIEkgYXR0YWNoIGEgRFNBIHRhZ2dlciB0byBhIHZldGggb3IgZHVtbXkgZGV2aWNlIHVzaW5nIGEgbmV0bGluayBjb21tYW5kPyBObywgRFNBIGlzIHN0cmljdGx5IGZvciBEU0Egc3dpdGNoIHRyZWVzLgoKQWxyaWdodCwgdGltZSB0byBldmFsdWF0ZSBpZiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpcyBhcHByb3ByaWF0ZSBoZXJlLiBUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBhIEtTWjg0NjMgc3dpdGNoIGluIHRoZSBNaWNyb2NoaXAgRFNBIGRyaXZlci4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciBmb3IgYW4gU1BJL0kyQy9NRElPIGNvbm5lY3RlZCBzd2l0Y2guIFNpbmNlIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSB0aGUgS1NaODQ2MyBzd2l0Y2gsIHRoZSBkcml2ZXImIzM5O3MgYHByb2JlYCBmdW5jdGlvbiB3aWxsIG5ldmVyIHN1Y2NlZWQsIGFuZCB0aGUgc3dpdGNoIHdpbGwgbmV2ZXIgYmUgcmVnaXN0ZXJlZC4gVGhlcmVmb3JlLCB0aGUgY29kZSBpbiBga3N6LmNgLCBga3N6X3B0cC5jYCwgYGtzel9jb21tb24uY2AsIGFuZCBgdGFnX2tzei5jYCAod2hpY2ggaXMgb25seSB1c2VkIHdoZW4gdGhlIHN3aXRjaCBpcyByZWdpc3RlcmVkKSBpcyB1bnJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIHRob3VnaCwgYWJvdXQgYHRhZ19rc3ouY2AuIElzIHRoZXJlICphbnkqIHdheSB0byBmb3JjZSBhIG5ldHdvcmsgaW50ZXJmYWNlIHRvIHVzZSBhIHNwZWNpZmljIERTQSB0YWdnZXI/IEluIGBuZXQvZHNhL3RhZy5jYCBvciBgbmV0L2RzYS9kc2EuY2AsIHRoZSB0YWdnZXIgYXNzaWdubWVudCBpcyBiYXNlZCBvbiB0aGUgc3dpdGNoIHRyZWUuIFRoZXJlIG1pZ2h0IGJlIGEgc3lzZnMgb3IgbmV0bGluayBhdHRyaWJ1dGUgdG8gY2hhbmdlIHRoZSBEU0EgdGFnZ2VyIG9mIGEgc3dpdGNoIHRyZWUsIGJ1dCBhZ2FpbiwgSSAqbmVlZCogYSBzd2l0Y2ggdHJlZSB0byBleGlzdC4gQ2FuIFN5emthbGxlciBjcmVhdGUgYSBzd2l0Y2ggdHJlZT8gVGhlcmUmIzM5O3MgYGRzYV9sb29wYCwgd2hpY2ggaXMgYSBtb2NrIERTQSBzd2l0Y2ggdGhhdCBjYW4gYmUgcHJvYmVkLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGBkc2FfbG9vcGAgaXMgZW5hYmxlZCBpbiBTeXprYWxsZXIuIEV2ZW4gaWYgaXQgKmlzKiBlbmFibGVkLCBjYW4gaXQgYWN0dWFsbHkgdXNlIHRoZSBga3N6ODQ2M2AgdGFnZ2VyPyBMZXQmIzM5O3MgY2hlY2sgdGhlIGBkc2FfbG9vcGAgY29kZS4gSXQmIzM5O3MgbG9va2luZyBwcmV0dHkgZGltLCBidXQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RzYV9sb29wJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kc2EvZHNhLnJzdD0xNTk9YWxsIGF0dGFjaGVkIHN3aXRjaCBwb3J0cyBtdXN0IGJlIGRvd24gd2hpbGUgZG9pbmcgdGhpcykuXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZHNhL2RzYS5yc3QtMTYwLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RzYS9kc2EucnN0OjE2MTpJdCBpcyBkZXNpcmFibGUgdGhhdCBhbGwgdGFnZ2luZyBwcm90b2NvbHMgYXJlIHRlc3RhYmxlIHdpdGggdGhlIGBgZHNhX2xvb3BgYFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RzYS9kc2EucnN0LTE2Mi1tb2NrdXAgZHJpdmVyLCB3aGljaCBjYW4gYmUgYXR0YWNoZWQgdG8gYW55IG5ldHdvcmsgaW50ZXJmYWNlLiBUaGUgZ29hbCBpcyB0aGF0XG4tLVxuZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlPTM9YmNtLXNmMi1vYmpzXHRcdFx0Oj0gYmNtX3NmMi5vIGJjbV9zZjJfY2ZwLm9cbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19ORVRfRFNBX0xPT1ApXHQmIzQzOz0gZHNhX2xvb3Aub1xuZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlLTUtb2JqLSQoQ09ORklHX05FVF9EU0FfS1M4OTk1KSBcdCYjNDM7PSBrczg5OTUub1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI0LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjU6c3RydWN0IGRzYV9sb29wX3ZsYW4ge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjYtXHR1MTYgbWVtYmVycztcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yOS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMwOnN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEtXHRjaGFyIG5hbWVbRVRIX0dTVFJJTkdfTEVOXTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1OmVudW0gZHNhX2xvb3BfbWliX2NvdW50ZXJzIHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM2LVx0RFNBX0xPT1BfUEhZX1JFQURfT0ssXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDItXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MzpzdHJ1Y3QgZHNhX2xvb3BfcG9ydCB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NDpcdHN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkgbWliW19fRFNBX0xPT1BfQ05UX01BWF07XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NS1cdHUxNiBwdmlkO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDk6c3RydWN0IGRzYV9sb29wX3ByaXYge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTAtXHRzdHJ1Y3QgbWlpX2J1c1x0KmJ1cztcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxLVx0dW5zaWduZWQgaW50XHRwb3J0X2Jhc2U7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MjpcdHN0cnVjdCBkc2FfbG9vcF92bGFuIHZsYW5zW1ZMQU5fTl9WSURdO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTMtXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTQ6XHRzdHJ1Y3QgZHNhX2xvb3BfcG9ydCBwb3J0c1tEU0FfTUFYX1BPUlRTXTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTU1LX07XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01Ni1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjU3OnN0cnVjdCBkc2FfbG9vcF9wZGF0YSB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01OC1cdC8qIE11c3QgYmUgZmlyc3QsIHN1Y2ggdGhhdCBkc2FfcmVnaXN0ZXJfc3dpdGNoKCkgY2FuIGFjY2VzcyB0aGlzXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNjYtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo2NzpzdGF0aWMgc3RydWN0IGRzYV9sb29wX21pYl9lbnRyeSBkc2FfbG9vcF9taWJzW10gPSB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy02OC1cdFtEU0FfTE9PUF9QSFlfUkVBRF9PS11cdD0geyBcJiMzNDtwaHlfcmVhZF9va1wmIzM0OywgfSxcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz03NT1zdGF0aWMgc3RydWN0IG1kaW9fZGV2aWNlICpzd2l0Y2hfbWRpb2RldjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTc2LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Nzc6ZW51bSBkc2FfbG9vcF9kZXZsaW5rX3Jlc291cmNlX2lkIHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTc4LVx0RFNBX0xPT1BfREVWTElOS19QQVJBTV9JRF9OT05FLCAgLyogREVWTElOS19SRVNPVVJDRV9JRF9QQVJFTlRfVE9QICovXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtODEtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo4MjpzdGF0aWMgdTY0IGRzYV9sb29wX2RldmxpbmtfdnR1X2dldCh2b2lkICpwcml2KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtODMte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6ODQ6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtODUtXHR1bnNpZ25lZCBpbnQgaSwgY291bnQgPSAwO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6ODY6XHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiAqdmw7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy04Ny1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy05Ni1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjk3OnN0YXRpYyBpbnQgZHNhX2xvb3Bfc2V0dXBfZGV2bGlua19yZXNvdXJjZXMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtOTgte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtOTktXHRzdHJ1Y3QgZGV2bGlua19yZXNvdXJjZV9zaXplX3BhcmFtcyBzaXplX3BhcmFtcztcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEwMDpcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcyA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMDEtXHRpbnQgZXJyO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTExNS1cdFx0XHRcdFx0ICAgICAgRFNBX0xPT1BfREVWTElOS19QQVJBTV9JRF9WVFUsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxMTY6XHRcdFx0XHRcdCAgICAgIGRzYV9sb29wX2RldmxpbmtfdnR1X2dldCwgcHMpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTE3LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTEyNC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEyNTpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGRzYV9sb29wX2dldF9wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMjYtXHRcdFx0XHRcdFx0ICAgaW50IHBvcnQsXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTMzLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTM0OnN0YXRpYyBpbnQgZHNhX2xvb3Bfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTM1LXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEzNjpcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcyA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzctXHR1bnNpZ25lZCBpbnQgaTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzktXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkcy1cdTAwM2VudW1fcG9ydHM7IGkmIzQzOyYjNDM7KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTQwOlx0XHRtZW1jcHkocHMtXHUwMDNlcG9ydHNbaV0ubWliLCBkc2FfbG9vcF9taWJzLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTQxOlx0XHQgICAgICAgc2l6ZW9mKGRzYV9sb29wX21pYnMpKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0Mi1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNDQtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDU6XHRyZXR1cm4gZHNhX2xvb3Bfc2V0dXBfZGV2bGlua19yZXNvdXJjZXMoZHMpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTQ2LX1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0Ny1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE0ODpzdGF0aWMgdm9pZCBkc2FfbG9vcF90ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNDkte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE1Mi1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE1MzpzdGF0aWMgaW50IGRzYV9sb29wX2dldF9zc2V0X2NvdW50KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBzc2V0KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTU0LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNjAtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNjE6c3RhdGljIHZvaWQgZHNhX2xvb3BfZ2V0X3N0cmluZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE2Mi1cdFx0XHRcdCB1MzIgc3RyaW5nc2V0LCB1aW50OF90ICpkYXRhKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTYzLXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE2NDpcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcyA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNjUtXHR1bnNpZ25lZCBpbnQgaTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNzMtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNzQ6c3RhdGljIHZvaWQgZHNhX2xvb3BfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE3NS1cdFx0XHRcdCAgICAgICB1aW50NjRfdCAqZGF0YSlcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE3Ni17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNzc6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTc4LVx0dW5zaWduZWQgaW50IGk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTgzLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTg0OnN0YXRpYyBpbnQgZHNhX2xvb3BfcGh5X3JlYWQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHJlZ251bSlcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE4NS17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxODY6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTg3LVx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHBzLVx1MDAzZWJ1cztcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xOTgtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxOTk6c3RhdGljIGludCBkc2FfbG9vcF9waHlfd3JpdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIwMC1cdFx0XHQgICAgICBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMDEte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjAyOlx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIwMy1cdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cdTAwM2VidXM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjE0LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjE1OnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF9icmlkZ2Vfam9pbihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjE2LVx0XHRcdFx0ICAgICBzdHJ1Y3QgZHNhX2JyaWRnZSBicmlkZ2UsXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjI1LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjI2OnN0YXRpYyB2b2lkIGRzYV9sb29wX3BvcnRfYnJpZGdlX2xlYXZlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMjctXHRcdFx0XHQgICAgICAgc3RydWN0IGRzYV9icmlkZ2UgYnJpZGdlKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIzMi1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjIzMzpzdGF0aWMgdm9pZCBkc2FfbG9vcF9wb3J0X3N0cF9zdGF0ZV9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIzNC1cdFx0XHRcdFx0dTggc3RhdGUpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjM5LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjQwOnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF92bGFuX2ZpbHRlcmluZyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjQxLVx0XHRcdFx0XHRib29sIHZsYW5fZmlsdGVyaW5nLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI0OS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1MDpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfdmxhbl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI1MS1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmpfcG9ydF92bGFuICp2bGFuLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI1NS1cdGJvb2wgcHZpZCA9IHZsYW4tXHUwMDNlZmxhZ3MgXHUwMDI2IEJSSURHRV9WTEFOX0lORk9fUFZJRDtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1NjpcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcyA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNTctXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHMtXHUwMDNlYnVzO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjU4Olx0c3RydWN0IGRzYV9sb29wX3ZsYW4gKnZsO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjU5LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI4Mi1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI4MzpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI4NC1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmpfcG9ydF92bGFuICp2bGFuKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI4Ni1cdGJvb2wgdW50YWdnZWQgPSB2bGFuLVx1MDAzZWZsYWdzIFx1MDAyNiBCUklER0VfVkxBTl9JTkZPX1VOVEFHR0VEO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Mjg3Olx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI4OC1cdHUxNiBwdmlkID0gcHMtXHUwMDNlcG9ydHNbcG9ydF0ucHZpZDtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI4OS1cdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cdTAwM2VidXM7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyOTA6XHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiAqdmw7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yOTEtXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEwLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzExOnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF9jaGFuZ2VfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMTItXHRcdFx0XHQgICAgaW50IG5ld19tdHUpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMTMte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzE0Olx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzE1LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMyMC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMyMTpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfbWF4X210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzIyLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMjUtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMjY6c3RhdGljIHZvaWQgZHNhX2xvb3BfcGh5bGlua19nZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHNhLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMyNy1cdFx0XHRcdCAgICAgIHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMzMy1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNDpzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGRzYV9sb29wX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNTpcdC5nZXRfdGFnX3Byb3RvY29sXHQ9IGRzYV9sb29wX2dldF9wcm90b2NvbCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNjpcdC5zZXR1cFx0XHRcdD0gZHNhX2xvb3Bfc2V0dXAsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMzc6XHQudGVhcmRvd25cdFx0PSBkc2FfbG9vcF90ZWFyZG93bixcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzODpcdC5nZXRfc3RyaW5nc1x0XHQ9IGRzYV9sb29wX2dldF9zdHJpbmdzLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzM5Olx0LmdldF9ldGh0b29sX3N0YXRzXHQ9IGRzYV9sb29wX2dldF9ldGh0b29sX3N0YXRzLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQwOlx0LmdldF9zc2V0X2NvdW50XHRcdD0gZHNhX2xvb3BfZ2V0X3NzZXRfY291bnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDE6XHQuZ2V0X2V0aHRvb2xfcGh5X3N0YXRzXHQ9IGRzYV9sb29wX2dldF9ldGh0b29sX3N0YXRzLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQyOlx0LnBoeV9yZWFkXHRcdD0gZHNhX2xvb3BfcGh5X3JlYWQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDM6XHQucGh5X3dyaXRlXHRcdD0gZHNhX2xvb3BfcGh5X3dyaXRlLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQ0Olx0LnBvcnRfYnJpZGdlX2pvaW5cdD0gZHNhX2xvb3BfcG9ydF9icmlkZ2Vfam9pbixcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NTpcdC5wb3J0X2JyaWRnZV9sZWF2ZVx0PSBkc2FfbG9vcF9wb3J0X2JyaWRnZV9sZWF2ZSxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NjpcdC5wb3J0X3N0cF9zdGF0ZV9zZXRcdD0gZHNhX2xvb3BfcG9ydF9zdHBfc3RhdGVfc2V0LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQ3Olx0LnBvcnRfdmxhbl9maWx0ZXJpbmdcdD0gZHNhX2xvb3BfcG9ydF92bGFuX2ZpbHRlcmluZyxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0ODpcdC5wb3J0X3ZsYW5fYWRkXHRcdD0gZHNhX2xvb3BfcG9ydF92bGFuX2FkZCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0OTpcdC5wb3J0X3ZsYW5fZGVsXHRcdD0gZHNhX2xvb3BfcG9ydF92bGFuX2RlbCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1MDpcdC5wb3J0X2NoYW5nZV9tdHVcdD0gZHNhX2xvb3BfcG9ydF9jaGFuZ2VfbXR1LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzUxOlx0LnBvcnRfbWF4X210dVx0XHQ9IGRzYV9sb29wX3BvcnRfbWF4X210dSxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1MjpcdC5waHlsaW5rX2dldF9jYXBzXHQ9IGRzYV9sb29wX3BoeWxpbmtfZ2V0X2NhcHMsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNTMtfTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM1NC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1NTpzdGF0aWMgaW50IGRzYV9sb29wX2Rydl9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNTYte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzU3Olx0c3RydWN0IGRzYV9sb29wX3BkYXRhICpwZGF0YSA9IG1kaW9kZXYtXHUwMDNlZGV2LnBsYXRmb3JtX2RhdGE7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTg6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHM7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNTktXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzgyLVx0ZHMtXHUwMDNlZGV2ID0gXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozODM6XHRkcy1cdTAwM2VvcHMgPSBcdTAwMjZkc2FfbG9vcF9kcml2ZXI7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zODQtXHRkcy1cdTAwM2Vwcml2ID0gcHM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzk2LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Mzk3OnN0YXRpYyB2b2lkIGRzYV9sb29wX2Rydl9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzk4LXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM5OS1cdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRldl9nZXRfZHJ2ZGF0YShcdTAwMjZtZGlvZGV2LVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MDA6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHM7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MDEtXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDEwLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDExOnN0YXRpYyB2b2lkIGRzYV9sb29wX2Rydl9zaHV0ZG93bihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MTIte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQyMi1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQyMzpzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIGRzYV9sb29wX2RydiA9IHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQyNC1cdC5tZGlvZHJ2LmRyaXZlclx0PSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDI2LVx0fSxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQyNzpcdC5wcm9iZVx0PSBkc2FfbG9vcF9kcnZfcHJvYmUsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Mjg6XHQucmVtb3ZlXHQ9IGRzYV9sb29wX2Rydl9yZW1vdmUsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Mjk6XHQuc2h1dGRvd24gPSBkc2FfbG9vcF9kcnZfc2h1dGRvd24sXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzAtfTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQzMS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQzMjpzdGF0aWMgaW50IGRzYV9sb29wX2J1c19tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzMtXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydilcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQzNC17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MzU6XHRyZXR1cm4gZHJ2ID09IFx1MDAyNmRzYV9sb29wX2Rydi5tZGlvZHJ2LmRyaXZlcjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQzNi19XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzctXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Mzg6c3RhdGljIHZvaWQgZHNhX2xvb3BfcGh5ZGV2c191bnJlZ2lzdGVyKHZvaWQpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00Mzkte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ0NS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ0NjpzdGF0aWMgaW50IF9faW5pdCBkc2FfbG9vcF9jcmVhdGVfc3dpdGNoX21kaW9kZXYodm9pZClcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ0Ny17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NDg6XHRzdGF0aWMgc3RydWN0IGRzYV9sb29wX3BkYXRhIGRzYV9sb29wX3BkYXRhID0ge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDQ5LVx0XHQuY2QgPSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDcwLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDcxOlx0c3dpdGNoX21kaW9kZXYtXHUwMDNlYnVzX21hdGNoID0gZHNhX2xvb3BfYnVzX21hdGNoO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDcyOlx0c3dpdGNoX21kaW9kZXYtXHUwMDNlZGV2LnBsYXRmb3JtX2RhdGEgPSBcdTAwMjZkc2FfbG9vcF9wZGF0YTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3My1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00ODEtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0ODI6c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfaW5pdCh2b2lkKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDgzLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00ODYtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0ODc6XHRyZXQgPSBkc2FfbG9vcF9jcmVhdGVfc3dpdGNoX21kaW9kZXYoKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4OC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDkzLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDk0Olx0cmV0ID0gbWRpb19kcml2ZXJfcmVnaXN0ZXIoXHUwMDI2ZHNhX2xvb3BfZHJ2KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ5NS1cdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5NjpcdFx0ZHNhX2xvb3BfcGh5ZGV2c191bnJlZ2lzdGVyKCk7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTctXHRcdG1kaW9fZGV2aWNlX3JlbW92ZShzd2l0Y2hfbWRpb2Rldik7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTAyLX1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwMzptb2R1bGVfaW5pdChkc2FfbG9vcF9pbml0KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwNC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwNTpzdGF0aWMgdm9pZCBfX2V4aXQgZHNhX2xvb3BfZXhpdCh2b2lkKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTA2LXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwNzpcdG1kaW9fZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2ZHNhX2xvb3BfZHJ2KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwODpcdGRzYV9sb29wX3BoeWRldnNfdW5yZWdpc3RlcigpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTA5LVx0bWRpb19kZXZpY2VfcmVtb3ZlKHN3aXRjaF9tZGlvZGV2KTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MTEtfVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTEyOm1vZHVsZV9leGl0KGRzYV9sb29wX2V4aXQpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTEzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyODU1CgkJCQkJCQlvdXRwdXQ6IDExMwoJCQkJCQkJdGhvdWdodHM6IDExMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgS1NaODQ2MyBEcml2ZXIgUGF0Y2ggZm9yIEZ1enppbmcgRmVhc2liaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCwgYWRkaW5nIHN1cHBvcnQgZm9yIHRoZSBNaWNyb2NoaXAgS1NaODQ2MyBEU0Egc3dpdGNoLCBpcyBzb21ldGhpbmcgd2UgY2FuIGV2ZW4gdG91Y2ggd2l0aGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4gVGhlIGBkc2FfbG9vcGAgZnVuY3Rpb24gYW5kIGhvdyBpdCB1c2VzIHRoZSBEU0EgdGFnIHByb3RvY29sIGlzIHRoZSBmaXJzdCBwbGFjZSBJIHN0YXJ0LiBJIGtub3cgYGRzYV9sb29wX2dldF9wcm90b2NvbGAgaXMgaW52b2x2ZWQsIGFuZCBJIGltbWVkaWF0ZWx5IGNoZWNrIGlmIGl0JiMzOTtzIGNvbmZpZ3VyYWJsZSB0byB1c2UgYERTQV9UQUdfUFJPVE9fS1NaODQ2M2AuIE5vcGUsIGl0JiMzOTtzIGhhcmRjb2RlZCB0byBgRFNBX1RBR19QUk9UT19OT05FYC4gU28gdGhhdCYjMzk7cyBhIGRlYWQgZW5kLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0cmlnZ2VycyBga3N6ODQ2M194bWl0YCBvciBga3N6ODQ2M19yY3ZgLiBUaGV5IHJlbHkgb24gdGhlIERTQSB0YWdnZXIuIFRoZSB0YWdnZXIgYXR0YWNoZXMgdG8gYSBuZXR3b3JrIGRldmljZSAqb25seSogaWYgYSBEU0Egc3dpdGNoIHJlcXVlc3RzIGl0LiAgU2luY2UgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoZSBLU1o4NDYzIHN3aXRjaCwgdGhlIGRyaXZlciYjMzk7cyBgcHJvYmVgIGZ1bmN0aW9uIHdvbiYjMzk7dCBzdWNjZWVkLiBUaGUgc3dpdGNoIHdvbiYjMzk7dCByZWdpc3RlciwgYW5kIHRoZSB0YWdnZXIgd2lsbCBuZXZlciBiZSB1c2VkLiBUaGF0JiMzOTtzIGEgcHJldHR5IHN0cm9uZyBpbmRpY2F0b3IgdGhhdCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBRRU1VIHNldHVwLgoKQ291bGQgc3l6a2FsbGVyIGluamVjdCBzb21ldGhpbmc/IEEgZmFrZSBkZXZpY2UgdHJlZSBub2RlLCBtYXliZSwgb3IgdXNlIGBzeXpfZGV2bWVtYCB0byBmYWtlIHRoZSBTUEkvTURJTyBkZXZpY2U/ICBOb3QgbGlrZWx5LiBTeXprYWxsZXIgZG9lc24mIzM5O3QgaGF2ZSBhIGdvb2QgZ2VuZXJpYyB3YXkgdG8gZmFrZSBTUEkvSTJDIGRldmljZXMgcHJvYmVkIHZpYSBkZXZpY2UgdHJlZSB1bmxlc3MgYSBzcGVjaWZpYyBgc3l6X2AgcHNldWRvLXN5c2NhbGwgZXhpc3RzLCBhbmQgdGhlcmUmIzM5O3Mgbm8gc3VjaCB0aGluZyBmb3IgdGhpcy4KCkFuZCB0aGUgcHJvbXB0IGV4cGxpY2l0bHkgY2FsbHMgb3V0IHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCBkcml2ZXJzLCBTbWFydE5JQ3MsIG9yIEdQVXMgcmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBRRU1VLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljICpTUEkvTURJTyogc3dpdGNoIGRyaXZlci4gSXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoaXMgZmFsbHMgcmlnaHQgaW50byB0aGF0IHNhbWUgdW5yZWFjaGFibGUgY2F0ZWdvcnkuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrLiBDYW4gYSBuZXRsaW5rIGNvbW1hbmQgc29tZWhvdyBjcmVhdGUgYSBkdW1teSBpbnRlcmZhY2UgYW5kIGF0dGFjaCB0aGUgRFNBIHRhZ2dlciB0byBpdD8gTm8sIHRoYXQmIzM5O3Mgbm90IGhvdyBpdCB3b3Jrcy4gRFNBIHRhZ2dlcnMgYXJlIG1hbmFnZWQgYnkgdGhlIERTQSBjb3JlLCBhdHRhY2hlZCB0byB0aGUgKm1hc3RlciogbmV0d29yayBkZXZpY2Ugb2YgYSBEU0Egc3dpdGNoIHRyZWUuIE5vIERTQSBzd2l0Y2ggdHJlZT8gTm8gdGFnZ2VyLiBObyBkcml2ZXIgcHJvYmUsIG5vIHRyZWUuIFRoZSBLU1o4NDYzIGRyaXZlciB3b24mIzM5O3QgcHJvYmUgd2l0aG91dCB0aGUgaGFyZHdhcmUuCgpMZXQmIzM5O3MgZG8gYSBjb21wbGV0ZSBzd2VlcDogIGBrc3pfaXJxX2J1c19sb2NrYCBhbmQgYGtzel9pcnFfYnVzX3N5bmNfdW5sb2NrYCBhcmUgZXhwb3J0ZWQsIGJ1dCBvbmx5IHVzZWQgYnkgdGhlIEtTWiBzd2l0Y2ggZHJpdmVycy4gU2FtZSB3aXRoIGBrc3o4NDYzX2dldF90c19pbmZvYCwgYGtzejg0NjNfaHd0c3RhbXBfc2V0YCwgYW5kIGBrc3o4NDYzX3B0cF9pcnFfc2V0dXBgIC0gYWxsIHBhcnQgb2YgdGhlIEtTWiBkcml2ZXIuIEFuZCBgRFNBX1RBR19QUk9UT19LU1o4NDYzYCBpcyBleGNsdXNpdmVseSBmb3IgdGhhdCBkcml2ZXIuCgpTbywgdGhlIGVudGlyZSBwYXRjaCBpcyBoYXJkd2FyZS1zcGVjaWZpYyBhbmQgdW5yZWFjaGFibGUgaW4gUUVNVS4gSSYjMzk7bSBnb2luZyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgYmVjYXVzZSBpdCYjMzk7cyBhIGhhcmR3YXJlLXNwZWNpZmljIERTQSBzd2l0Y2ggZHJpdmVyIChNaWNyb2NoaXAgS1NaODQ2MykgY29ubmVjdGVkIHZpYSBTUEkvTURJTyB0aGF0IGlzbiYjMzk7dCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUuCgpMZXQgbWUganVzdCBtYWtlIHN1cmUgdGhlIHJlYXNvbmluZyBpcyBjbGVhcjogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgTWljcm9jaGlwIEtTWjg0NjMgRFNBIHN3aXRjaCwgaW5jbHVkaW5nIElSUSwgUFRQLCBhbmQgYSBuZXcgRFNBIHRhZyBwcm90b2NvbC4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciBmb3IgYW4gU1BJL01ESU8tY29ubmVjdGVkIHN3aXRjaCB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBXaXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSwgdGhlIGRyaXZlciBjYW5ub3QgcHJvYmUsIGFuZCB0aGUgYWRkZWQgY29kZSAoaW5jbHVkaW5nIHRoZSBEU0EgdGFnZ2VyKSBpcyB1bnJlYWNoYWJsZS4mIzM0OwoKT25lIGxhc3QgY2hlY2suIExldCYjMzk7cyBtYWtlIHN1cmUgSSBkaWRuJiMzOTt0IG1pc3MgYW55dGhpbmcuIFRoZSBwYXRjaCBtb2RpZmllcyBga3N6X2lycV9jb21tb25fc2V0dXBgIGluIGBrc3pfY29tbW9uLmNgIHRvIHRha2UgYW4gYG9wc2Agc3RydWN0IC0gdGhhdCYjMzk7cyBqdXN0IGEgcmVmYWN0b3JpbmcgKmZvciogdGhlIEtTWiBkcml2ZXIuIGBrc3pfcHRwLmNgIGlzIGFsbCBLU1o4NDYzIHNwZWNpZmljIFBUUCBmdW5jdGlvbnMsIGFuZCBgdGFnX2tzei5jYCBoYXMgYGtzejg0NjNfbmV0ZGV2X29wc2AgYW5kIGBrc3o4NDYzX3htaXRgL2ByY3ZgLgoKWXVwLCBpdCYjMzk7cyBhbGwgc3RyaWN0bHkgdGllZCB0byB0aGUgS1NaODQ2MyBoYXJkd2FyZS4gSSYjMzk7bSBjb25maWRlbnQuIFJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNaWNyb2NoaXAgS1NaODQ2MyBEU0Egc3dpdGNoLCBpbmNsdWRpbmcgSVJRLCBQVFAsIGFuZCBhIG5ldyBEU0EgdGFnIHByb3RvY29sLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGZvciBhbiBTUEkvTURJTy1jb25uZWN0ZWQgc3dpdGNoIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFdpdGhvdXQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlLCB0aGUgZHJpdmVyIGNhbm5vdCBwcm9iZSwgYW5kIHRoZSBhZGRlZCBjb2RlIChpbmNsdWRpbmcgdGhlIERTQSB0YWdnZXIpIGlzIHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgTWljcm9jaGlwIEtTWjg0NjMgRFNBIHN3aXRjaCwgaW5jbHVkaW5nIElSUSwgUFRQLCBhbmQgYSBuZXcgRFNBIHRhZyBwcm90b2NvbC4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciBmb3IgYW4gU1BJL01ESU8tY29ubmVjdGVkIHN3aXRjaCB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBXaXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSwgdGhlIGRyaXZlciBjYW5ub3QgcHJvYmUsIGFuZCB0aGUgYWRkZWQgY29kZSAoaW5jbHVkaW5nIHRoZSBEU0EgdGFnZ2VyKSBpcyB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMzowNTozMi4xNDY4NTk3NzVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQ3NTUwMzcwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgTWljcm9jaGlwIEtTWjg0NjMgRFNBIHN3aXRjaCwgaW5jbHVkaW5nIElSUSwgUFRQLCBhbmQgYSBuZXcgRFNBIHRhZyBwcm90b2NvbC4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciBmb3IgYW4gU1BJL01ESU8tY29ubmVjdGVkIHN3aXRjaCB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBXaXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSwgdGhlIGRyaXZlciBjYW5ub3QgcHJvYmUsIGFuZCB0aGUgYWRkZWQgY29kZSAoaW5jbHVkaW5nIHRoZSBEU0EgdGFnZ2VyKSBpcyB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIzOjA1OjMyLjE0Njg2NjA2NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQwNjczNzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDNmYWViM2EwZjBhYjQyOWQ2NGNiZTM5NGNmZTlhZmQwZGIzNjhmM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyNyAyMzowNTozMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jXFxuaW5kZXggYzRjNzY5MDI4YTIwYzkuLjk0MWFlOWY2NmY3MGJhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmNcXG5AQCAtMzYsNiArMzYsMTMgQEBcXG4gI2luY2x1ZGUgXFxcImtzejhfcmVnLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJrc3o4LmhcXFwiXFxuIFxcbisvKlxcbisgKiBXZSB1c2Ugb25seSB0aGUgaGlnaC1ieXRlIChzbyBvZGQgYWRkcmVzc2VzKSBvZiB0aGUgMTYtYml0cyByZWdpc3RlcnMgdG8gZml0XFxuKyAqIGluIHRoZSBjb21tb24gSVJRIGZyYW1ld29ya1xcbisgKi9cXG4rI2RlZmluZSBLU1o4NDYzX1JFR19JU1JcXHRcXHRcXHQweDE5MVxcbisjZGVmaW5lIEtTWjg0NjNfUkVHX0lFUlxcdFxcdFxcdDB4MTkzXFxuK1xcbiAvKiBrc3o4OHgzX2RyaXZlX3N0cmVuZ3RocyAtIERyaXZlIHN0cmVuZ3RoIG1hcHBpbmcgZm9yIEtTWjg4NjMsIEtTWjg4NzMsIC4uXFxuICAqXFx0XFx0XFx0ICAgICB2YXJpYW50cy5cXG4gICogVGhpcyB2YWx1ZXMgYXJlIGRvY3VtZW50ZWQgaW4gS1NaODg3MyBhbmQgS1NaODg2MyBkYXRhc2hlZXRzLlxcbkBAIC0xODEsNiArMTg4LDY5IEBAIHN0YXRpYyBpbnQga3N6OF9wbWVfcHdyaXRlOChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgaW50IG9mZnNldCwgdTggZGF0XFxuIFxcdHJldHVybiBrc3o4X2luZF93cml0ZTgoZGV2LCB0YWJsZSwgKHU4KShvZmZzZXQpLCBkYXRhKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQga3N6ODQ2M19pcnFfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpXFxuK3tcXG4rXFx0c3RydWN0IGtzel9pcnEgKmtpcnEgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTtcXG4rXFxuK1xcdGtpcnEtXFx1MDAzZW1hc2tlZCBcXHUwMDI2PSB+QklUKGQtXFx1MDAzZWh3aXJxKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQga3N6ODQ2M19pcnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZClcXG4re1xcbitcXHRzdHJ1Y3Qga3N6X2lycSAqa2lycSA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpO1xcbitcXG4rXFx0a2lycS1cXHUwMDNlbWFza2VkIHw9IEJJVChkLVxcdTAwM2Vod2lycSk7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXJxX2NoaXAga3N6ODQ2M19pcnFfY2hpcCA9IHtcXG4rXFx0Lm5hbWVcXHRcXHRcXHQ9IFxcXCJrc3o4NDYzLWlycVxcXCIsXFxuK1xcdC5pcnFfbWFza1xcdFxcdD0ga3N6ODQ2M19pcnFfbWFzayxcXG4rXFx0LmlycV91bm1hc2tcXHRcXHQ9IGtzejg0NjNfaXJxX3VubWFzayxcXG4rXFx0LmlycV9idXNfbG9ja1xcdFxcdD0ga3N6X2lycV9idXNfbG9jayxcXG4rXFx0LmlycV9idXNfc3luY191bmxvY2tcXHQ9IGtzel9pcnFfYnVzX3N5bmNfdW5sb2NrLFxcbit9O1xcbitcXG4rc3RhdGljIGludCBrc3o4NDYzX2lycV9kb21haW5fbWFwKHN0cnVjdCBpcnFfZG9tYWluICpkLFxcbitcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBpcnEsIGlycV9od19udW1iZXJfdCBod2lycSlcXG4re1xcbitcXHRpcnFfc2V0X2NoaXBfZGF0YShpcnEsIGQtXFx1MDAzZWhvc3RfZGF0YSk7XFxuK1xcdGlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsIFxcdTAwMjZrc3o4NDYzX2lycV9jaGlwLCBoYW5kbGVfbGV2ZWxfaXJxKTtcXG4rXFx0aXJxX3NldF9ub3Byb2JlKGlycSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBrc3o4NDYzX2lycV9kb21haW5fb3BzID0ge1xcbitcXHQubWFwXFx0PSBrc3o4NDYzX2lycV9kb21haW5fbWFwLFxcbitcXHQueGxhdGVcXHQ9IGlycV9kb21haW5feGxhdGVfdHdvY2VsbCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQga3N6ODQ2M19naXJxX3NldHVwKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGtzel9pcnEgKmdpcnEgPSBcXHUwMDI2ZGV2LVxcdTAwM2VnaXJxO1xcbitcXG4rXFx0Z2lycS1cXHUwMDNlbmlycXMgPSA4O1xcbitcXHRnaXJxLVxcdTAwM2VyZWdfbWFzayA9IEtTWjg0NjNfUkVHX0lFUjtcXG4rXFx0Z2lycS1cXHUwMDNlcmVnX3N0YXR1cyA9IEtTWjg0NjNfUkVHX0lTUjtcXG4rXFx0Z2lycS1cXHUwMDNlbWFza2VkID0gMDtcXG4rXFx0c25wcmludGYoZ2lycS1cXHUwMDNlbmFtZSwgc2l6ZW9mKGdpcnEtXFx1MDAzZW5hbWUpLCBcXFwia3N6ODQ2My1naXJxXFxcIik7XFxuK1xcbitcXHRnaXJxLVxcdTAwM2VpcnFfbnVtID0gZGV2LVxcdTAwM2VpcnE7XFxuK1xcbitcXHRyZXR1cm4ga3N6X2lycV9jb21tb25fc2V0dXAoZGV2LCBnaXJxLCBcXHUwMDI2a3N6ODQ2M19pcnFfZG9tYWluX29wcyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQga3N6ODQ2M19yZXNldF9zd2l0Y2goc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4re1xcbitcXHRrc3pfY2ZnKGRldiwgS1NaODQ2M19SRUdfU1dfUkVTRVQsXFxuK1xcdFxcdEtTWjg0NjNfR0xPQkFMX1NPRlRXQVJFX1JFU0VUIHwgS1NaODQ2M19QVFBfU09GVFdBUkVfUkVTRVQsXFxuK1xcdFxcdHRydWUpO1xcbitcXHRrc3pfY2ZnKGRldiwgS1NaODQ2M19SRUdfU1dfUkVTRVQsXFxuK1xcdFxcdEtTWjg0NjNfR0xPQkFMX1NPRlRXQVJFX1JFU0VUIHwgS1NaODQ2M19QVFBfU09GVFdBUkVfUkVTRVQsXFxuK1xcdFxcdGZhbHNlKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQga3N6OF9yZXNldF9zd2l0Y2goc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4ge1xcbiBcXHRpZiAoa3N6X2lzX2tzejg4eDMoZGV2KSkge1xcbkBAIC0xODksMTEgKzI1OSw2IEBAIHN0YXRpYyBpbnQga3N6OF9yZXNldF9zd2l0Y2goc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4gXFx0XFx0XFx0S1NaODg2M19HTE9CQUxfU09GVFdBUkVfUkVTRVQgfCBLU1o4ODYzX1BDU19SRVNFVCwgdHJ1ZSk7XFxuIFxcdFxcdGtzel9jZmcoZGV2LCBLU1o4ODYzX1JFR19TV19SRVNFVCxcXG4gXFx0XFx0XFx0S1NaODg2M19HTE9CQUxfU09GVFdBUkVfUkVTRVQgfCBLU1o4ODYzX1BDU19SRVNFVCwgZmFsc2UpO1xcbi1cXHR9IGVsc2UgaWYgKGtzel9pc19rc3o4NDYzKGRldikpIHtcXG4tXFx0XFx0a3N6X2NmZyhkZXYsIEtTWjg0NjNfUkVHX1NXX1JFU0VULFxcbi1cXHRcXHRcXHRLU1o4NDYzX0dMT0JBTF9TT0ZUV0FSRV9SRVNFVCwgdHJ1ZSk7XFxuLVxcdFxcdGtzel9jZmcoZGV2LCBLU1o4NDYzX1JFR19TV19SRVNFVCxcXG4tXFx0XFx0XFx0S1NaODQ2M19HTE9CQUxfU09GVFdBUkVfUkVTRVQsIGZhbHNlKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0LyogcmVzZXQgc3dpdGNoICovXFxuIFxcdFxcdGtzel93cml0ZTgoZGV2LCBSRUdfUE9XRVJfTUFOQUdFTUVOVF8xLFxcbkBAIC0yMDI2LDYgKzIwOTEsNTAgQEAgc3RhdGljIHZvaWQga3N6ODh4M19jb25maWdfcm1paV9jbGsoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4gXFx0XFx0S1NaODhYM19QT1JUM19STUlJX0NMS19JTlRFUk5BTCwgcm1paV9jbGtfaW50ZXJuYWwpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBrc3o4NDYzX2NvbmZpZ19jcHVfcG9ydChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuK3tcXG4rXFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3Qga3N6X3BvcnQgKnA7XFxuK1xcdHU4IGZpYmVyX3BvcnRzID0gMDtcXG4rXFx0Y29uc3QgdTMyICptYXNrcztcXG4rXFx0Y29uc3QgdTE2ICpyZWdzO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdG1hc2tzID0gZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VtYXNrcztcXG4rXFx0cmVncyA9IGRldi1cXHUwMDNlaW5mby1cXHUwMDNlcmVncztcXG4rXFxuK1xcdGtzel9jZmcoZGV2LCByZWdzW1NfVEFJTF9UQUdfQ1RSTF0sIG1hc2tzW1NXX1RBSUxfVEFHX0VOQUJMRV0sIHRydWUpO1xcbitcXG4rXFx0a3N6OF9wb3J0X3NldHVwKGRldiwgZGV2LVxcdTAwM2VjcHVfcG9ydCwgdHJ1ZSk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZGV2LVxcdTAwM2VwaHlfcG9ydF9jbnQ7IGkrKylcXG4rXFx0XFx0a3N6X3BvcnRfc3RwX3N0YXRlX3NldChkcywgaSwgQlJfU1RBVEVfRElTQUJMRUQpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRldi1cXHUwMDNlcGh5X3BvcnRfY250OyBpKyspIHtcXG4rXFx0XFx0cCA9IFxcdTAwMjZkZXYtXFx1MDAzZXBvcnRzW2ldO1xcbitcXHRcXHRrc3pfcG9ydF9jZmcoZGV2LCBpLCByZWdzW1BfU1RQX0NUUkxdLCBQT1JUX0ZPUkNFX0ZMT1dfQ1RSTCxcXG4rXFx0XFx0XFx0ICAgICBwLVxcdTAwM2VmaWJlcik7XFxuK1xcdFxcdGlmIChwLVxcdTAwM2VmaWJlcilcXG4rXFx0XFx0XFx0ZmliZXJfcG9ydHMgfD0gKDEgXFx1MDAzY1xcdTAwM2MgaSk7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFNldHVwIGZpYmVyIHBvcnRzLiAqL1xcbitcXHRpZiAoZmliZXJfcG9ydHMpIHtcXG4rXFx0XFx0ZmliZXJfcG9ydHMgXFx1MDAyNj0gMztcXG4rXFx0XFx0cmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSwgS1NaODQ2M19SRUdfQ0ZHX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgIGZpYmVyX3BvcnRzIFxcdTAwM2NcXHUwMDNjIFBPUlRfQ09QUEVSX01PREVfUyxcXG4rXFx0XFx0XFx0XFx0ICAgMCk7XFxuK1xcdFxcdHJlZ21hcF91cGRhdGVfYml0cyhrc3pfcmVnbWFwXzE2KGRldiksIEtTWjg0NjNfUkVHX0RTUF9DVFJMXzYsXFxuK1xcdFxcdFxcdFxcdCAgIENPUFBFUl9SRUNFSVZFX0FESlVTVE1FTlQsIDApO1xcbitcXHR9XFxuK1xcbitcXHQvKiBUdXJuIG9mZiBQVFAgZnVuY3Rpb24gYXMgdGhlIHN3aXRjaCBlbmFibGVzIGl0IGJ5IGRlZmF1bHQgKi9cXG4rXFx0cmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSwgS1NaODQ2M19QVFBfTVNHX0NPTkYxLFxcbitcXHRcXHRcXHQgICBQVFBfRU5BQkxFLCAwKTtcXG4rXFx0cmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSwgS1NaODQ2M19QVFBfQ0xLX0NUUkwsXFxuK1xcdFxcdFxcdCAgIFBUUF9DTEtfRU5BQkxFLCAwKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQga3N6OF9jb25maWdfY3B1X3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiB7XFxuIFxcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cXHUwMDNlcHJpdjtcXG5AQCAtMjAzMyw3ICsyMTQyLDYgQEAgc3RhdGljIHZvaWQga3N6OF9jb25maWdfY3B1X3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHRjb25zdCB1MzIgKm1hc2tzO1xcbiBcXHRjb25zdCB1MTYgKnJlZ3M7XFxuIFxcdHU4IHJlbW90ZTtcXG4tXFx0dTggZmliZXJfcG9ydHMgPSAwO1xcbiBcXHRpbnQgaTtcXG4gXFxuIFxcdG1hc2tzID0gZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VtYXNrcztcXG5AQCAtMjA2NCwzMiArMjE3Miw2IEBAIHN0YXRpYyB2b2lkIGtzejhfY29uZmlnX2NwdV9wb3J0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRrc3pfcG9ydF9jZmcoZGV2LCBpLCByZWdzW1BfU1RQX0NUUkxdLFxcbiBcXHRcXHRcXHRcXHQgICAgIFBPUlRfRk9SQ0VfRkxPV19DVFJMLCBmYWxzZSk7XFxuLVxcdFxcdGlmIChwLVxcdTAwM2VmaWJlcilcXG4tXFx0XFx0XFx0ZmliZXJfcG9ydHMgfD0gKDEgXFx1MDAzY1xcdTAwM2MgaSk7XFxuLVxcdH1cXG4tXFx0aWYgKGtzel9pc19rc3o4NDYzKGRldikpIHtcXG4tXFx0XFx0LyogU2V0dXAgZmliZXIgcG9ydHMuICovXFxuLVxcdFxcdGlmIChmaWJlcl9wb3J0cykge1xcbi1cXHRcXHRcXHRmaWJlcl9wb3J0cyBcXHUwMDI2PSAzO1xcbi1cXHRcXHRcXHRyZWdtYXBfdXBkYXRlX2JpdHMoa3N6X3JlZ21hcF8xNihkZXYpLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBLU1o4NDYzX1JFR19DRkdfQ1RSTCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgZmliZXJfcG9ydHMgXFx1MDAzY1xcdTAwM2MgUE9SVF9DT1BQRVJfTU9ERV9TLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAwKTtcXG4tXFx0XFx0XFx0cmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgS1NaODQ2M19SRUdfRFNQX0NUUkxfNixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgQ09QUEVSX1JFQ0VJVkVfQURKVVNUTUVOVCwgMCk7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdC8qIFR1cm4gb2ZmIFBUUCBmdW5jdGlvbiBhcyB0aGUgc3dpdGNoJ3MgcHJvcHJpZXRhcnkgd2F5IG9mXFxuLVxcdFxcdCAqIGhhbmRsaW5nIHRpbWVzdGFtcCBpcyBub3Qgc3VwcG9ydGVkIGluIGN1cnJlbnQgTGludXggUFRQXFxuLVxcdFxcdCAqIHN0YWNrIGltcGxlbWVudGF0aW9uLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0cmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSxcXG4tXFx0XFx0XFx0XFx0ICAgS1NaODQ2M19QVFBfTVNHX0NPTkYxLFxcbi1cXHRcXHRcXHRcXHQgICBQVFBfRU5BQkxFLCAwKTtcXG4tXFx0XFx0cmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSxcXG4tXFx0XFx0XFx0XFx0ICAgS1NaODQ2M19QVFBfQ0xLX0NUUkwsXFxuLVxcdFxcdFxcdFxcdCAgIFBUUF9DTEtfRU5BQkxFLCAwKTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC0yMzAwLDYgKzIzODIsMTUwIEBAIHN0YXRpYyB2b2lkIGtzejg4eHhfcl9taWJfc3RhdHM2NChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcXG4gXFx0c3Bpbl91bmxvY2soXFx1MDAyNm1pYi1cXHUwMDNlc3RhdHM2NF9sb2NrKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBrc3o4NDYzX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4re1xcbitcXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXFx1MDAzZXByaXY7XFxuK1xcdHUxNiBzdG9ybV9tYXNrLCBzdG9ybV9yYXRlO1xcbitcXHRzdHJ1Y3Qga3N6X3BvcnQgKnA7XFxuK1xcdGNvbnN0IHUxNiAqcmVncztcXG4rXFx0aW50IGksIHJldDtcXG4rXFxuK1xcdHJlZ3MgPSBkZXYtXFx1MDAzZWluZm8tXFx1MDAzZXJlZ3M7XFxuK1xcbitcXHRkZXYtXFx1MDAzZXZsYW5fY2FjaGUgPSBkZXZtX2tjYWxsb2MoZGV2LVxcdTAwM2VkZXYsIHNpemVvZihzdHJ1Y3Qgdmxhbl90YWJsZSksXFxuK1xcdFxcdFxcdFxcdCAgICAgICBkZXYtXFx1MDAzZWluZm8tXFx1MDAzZW51bV92bGFucywgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghZGV2LVxcdTAwM2V2bGFuX2NhY2hlKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHJldCA9IGtzejg0NjNfcmVzZXRfc3dpdGNoKGRldik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2Vycihkcy1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIHJlc2V0IHN3aXRjaFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIHNldCBicm9hZGNhc3Qgc3Rvcm0gcHJvdGVjdGlvbiAxMCUgcmF0ZSAqL1xcbitcXHRzdG9ybV9tYXNrID0gQlJPQURDQVNUX1NUT1JNX1JBVEU7XFxuK1xcdHN0b3JtX3JhdGUgPSAoQlJPQURDQVNUX1NUT1JNX1ZBTFVFICogQlJPQURDQVNUX1NUT1JNX1BST1RfUkFURSkgLyAxMDA7XFxuK1xcdHN0b3JtX21hc2sgPSBzd2FiMTYoc3Rvcm1fbWFzayk7XFxuK1xcdHN0b3JtX3JhdGUgPSBzd2FiMTYoc3Rvcm1fcmF0ZSk7XFxuK1xcdHJlZ21hcF91cGRhdGVfYml0cyhrc3pfcmVnbWFwXzE2KGRldiksIHJlZ3NbU19CUk9BRENBU1RfQ1RSTF0sXFxuK1xcdFxcdFxcdCAgIHN0b3JtX21hc2ssIHN0b3JtX3JhdGUpO1xcbitcXG4rXFx0a3N6ODQ2M19jb25maWdfY3B1X3BvcnQoZHMpO1xcbitcXG4rXFx0a3N6OF9lbmFibGVfc3RwX2FkZHIoZGV2KTtcXG4rXFxuK1xcdGRzLVxcdTAwM2VudW1fdHhfcXVldWVzID0gZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VudW1fdHhfcXVldWVzO1xcbitcXG4rXFx0cmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfOChkZXYpLCByZWdzW1NfTVVMVElDQVNUX0NUUkxdLFxcbitcXHRcXHRcXHQgICBNVUxUSUNBU1RfU1RPUk1fRElTQUJMRSwgTVVMVElDQVNUX1NUT1JNX0RJU0FCTEUpO1xcbitcXG4rXFx0a3N6X2luaXRfbWliX3RpbWVyKGRldik7XFxuK1xcbitcXHRkcy1cXHUwMDNlY29uZmlndXJlX3ZsYW5fd2hpbGVfbm90X2ZpbHRlcmluZyA9IGZhbHNlO1xcbitcXHRkcy1cXHUwMDNlZHNjcF9wcmlvX21hcHBpbmdfaXNfZ2xvYmFsID0gdHJ1ZTtcXG4rXFx0ZHMtXFx1MDAzZW10dV9lbmZvcmNlbWVudF9pbmdyZXNzID0gdHJ1ZTtcXG4rXFxuK1xcdC8qIFdlIHJlbHkgb24gc29mdHdhcmUgdW50YWdnaW5nIG9uIHRoZSBDUFUgcG9ydCwgc28gdGhhdCB3ZVxcbitcXHQgKiBjYW4gc3VwcG9ydCBib3RoIHRhZ2dlZCBhbmQgdW50YWdnZWQgVkxBTnNcXG4rXFx0ICovXFxuK1xcdGRzLVxcdTAwM2V1bnRhZ19icmlkZ2VfcHZpZCA9IHRydWU7XFxuK1xcbitcXHQvKiBWTEFOIGZpbHRlcmluZyBpcyBwYXJ0bHkgY29udHJvbGxlZCBieSB0aGUgZ2xvYmFsIFZMQU5cXG4rXFx0ICogRW5hYmxlIGZsYWdcXG4rXFx0ICovXFxuK1xcdGRzLVxcdTAwM2V2bGFuX2ZpbHRlcmluZ19pc19nbG9iYWwgPSB0cnVlO1xcbitcXG4rXFx0LyogRW5hYmxlIGF1dG9tYXRpYyBmYXN0IGFnaW5nIHdoZW4gbGluayBjaGFuZ2VkIGRldGVjdGVkLiAqL1xcbitcXHRrc3pfY2ZnKGRldiwgU19MSU5LX0FHSU5HX0NUUkwsIFNXX0xJTktfQVVUT19BR0lORywgdHJ1ZSk7XFxuK1xcbitcXHQvKiBFbmFibGUgYWdncmVzc2l2ZSBiYWNrIG9mZiBhbGdvcml0aG0gaW4gaGFsZiBkdXBsZXggbW9kZS4gKi9cXG4rXFx0cmV0ID0ga3N6X3JtdzgoZGV2LCBSRUdfU1dfQ1RSTF8xLCBTV19BR0dSX0JBQ0tPRkYsIFNXX0FHR1JfQkFDS09GRik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBNYWtlIHN1cmUgdW5pY2FzdCBWTEFOIGJvdW5kYXJ5IGlzIHNldCBhcyBkZWZhdWx0IGFuZFxcbitcXHQgKiBlbmFibGUgbm8gZXhjZXNzaXZlIGNvbGxpc2lvbiBkcm9wLlxcbitcXHQgKi9cXG4rXFx0cmV0ID0ga3N6X3JtdzgoZGV2LCBSRUdfU1dfQ1RSTF8yLFxcbitcXHRcXHQgICAgICAgVU5JQ0FTVF9WTEFOX0JPVU5EQVJZIHwgTk9fRVhDX0NPTExJU0lPTl9EUk9QLFxcbitcXHRcXHQgICAgICAgVU5JQ0FTVF9WTEFOX0JPVU5EQVJZIHwgTk9fRVhDX0NPTExJU0lPTl9EUk9QKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGtzel9jZmcoZGV2LCBTX1JFUExBQ0VfVklEX0NUUkwsIFNXX1JFUExBQ0VfVklELCBmYWxzZSk7XFxuK1xcbitcXHRrc3pfY2ZnKGRldiwgU19NSVJST1JfQ1RSTCwgU1dfTUlSUk9SX1JYX1RYLCBmYWxzZSk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgKGRldi1cXHUwMDNlaW5mby1cXHUwMDNlbnVtX3ZsYW5zIC8gNCk7IGkrKylcXG4rXFx0XFx0a3N6OF9yX3ZsYW5fZW50cmllcyhkZXYsIGkpO1xcbitcXG4rXFx0LyogU3RhcnQgd2l0aCBsZWFybmluZyBkaXNhYmxlZCBvbiBzdGFuZGFsb25lIHVzZXIgcG9ydHMsIGFuZCBlbmFibGVkXFxuK1xcdCAqIG9uIHRoZSBDUFUgcG9ydC4gSW4gbGFjayBvZiBvdGhlciBmaW5lciBtZWNoYW5pc21zLCBsZWFybmluZyBvbiB0aGVcXG4rXFx0ICogQ1BVIHBvcnQgd2lsbCBhdm9pZCBmbG9vZGluZyBicmlkZ2UgbG9jYWwgYWRkcmVzc2VzIG9uIHRoZSBuZXR3b3JrXFxuK1xcdCAqIGluIHNvbWUgY2FzZXMuXFxuK1xcdCAqL1xcbitcXHRwID0gXFx1MDAyNmRldi1cXHUwMDNlcG9ydHNbZGV2LVxcdTAwM2VjcHVfcG9ydF07XFxuK1xcdHAtXFx1MDAzZWxlYXJuaW5nID0gdHJ1ZTtcXG4rXFxuK1xcdGlmIChkZXYtXFx1MDAzZWlycSBcXHUwMDNlIDApIHtcXG4rXFx0XFx0cmV0ID0ga3N6ODQ2M19naXJxX3NldHVwKGRldik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHRyZXQgPSBrc3o4NDYzX3B0cF9pcnFfc2V0dXAoZHMpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIGZyZWVfZ2lycTtcXG4rXFxuK1xcdFxcdHJldCA9IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoZHMpO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdGRldl9lcnIoZGV2LVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0cmV0KTtcXG4rXFx0XFx0XFx0Z290byBmcmVlX3B0cF9pcnE7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0ga3N6X21kaW9fcmVnaXN0ZXIoZGV2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYtXFx1MDAzZWRldiwgXFxcImZhaWxlZCB0byByZWdpc3RlciB0aGUgbWRpb1xcXCIpO1xcbitcXHRcXHRnb3RvIHB0cF9jbG9ja191bnJlZ2lzdGVyO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBrc3pfZGNiX2luaXQoZGV2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBwdHBfY2xvY2tfdW5yZWdpc3RlcjtcXG4rXFxuK1xcdC8qIHN0YXJ0IHN3aXRjaCAqL1xcbitcXHRyZWdtYXBfdXBkYXRlX2JpdHMoa3N6X3JlZ21hcF84KGRldiksIHJlZ3NbU19TVEFSVF9DVFJMXSxcXG4rXFx0XFx0XFx0ICAgU1dfU1RBUlQsIFNXX1NUQVJUKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rcHRwX2Nsb2NrX3VucmVnaXN0ZXI6XFxuK1xcdGlmIChkZXYtXFx1MDAzZWlycSBcXHUwMDNlIDApXFxuK1xcdFxcdGtzel9wdHBfY2xvY2tfdW5yZWdpc3Rlcihkcyk7XFxuK2ZyZWVfcHRwX2lycTpcXG4rXFx0aWYgKGRldi1cXHUwMDNlaXJxIFxcdTAwM2UgMClcXG4rXFx0XFx0a3N6ODQ2M19wdHBfaXJxX2ZyZWUoZHMpO1xcbitmcmVlX2dpcnE6XFxuK1xcdGlmIChkZXYtXFx1MDAzZWlycSBcXHUwMDNlIDApXFxuK1xcdFxcdGtzel9pcnFfZnJlZShcXHUwMDI2ZGV2LVxcdTAwM2VnaXJxKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGtzejg0NjNfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbit7XFxuK1xcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4rXFxuK1xcdGlmIChkZXYtXFx1MDAzZWlycSBcXHUwMDNlIDApIHtcXG4rXFx0XFx0a3N6X3B0cF9jbG9ja191bnJlZ2lzdGVyKGRzKTtcXG4rXFx0XFx0a3N6ODQ2M19wdHBfaXJxX2ZyZWUoZHMpO1xcbitcXHRcXHRrc3pfaXJxX2ZyZWUoXFx1MDAyNmRldi1cXHUwMDNlZ2lycSk7XFxuK1xcdH1cXG4rfVxcbitcXG4gLyoqXFxuICAqIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhfd3JpdGUoKSAtIFNldCB0aGUgZHJpdmUgc3RyZW5ndGggY29uZmlndXJhdGlvbiBmb3JcXG4gICpcXHRcXHRcXHRcXHQgICAgS1NaODg2MyBjb21wYXRpYmxlIGNoaXAgdmFyaWFudHMuXFxuQEAgLTI0NDUsMTAgKzI2NzEsNiBAQCBzdGF0aWMgaW50IGtzejhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHQvKiBzZXQgYnJvYWRjYXN0IHN0b3JtIHByb3RlY3Rpb24gMTAlIHJhdGUgKi9cXG4gXFx0c3Rvcm1fbWFzayA9IEJST0FEQ0FTVF9TVE9STV9SQVRFO1xcbiBcXHRzdG9ybV9yYXRlID0gKEJST0FEQ0FTVF9TVE9STV9WQUxVRSAqIEJST0FEQ0FTVF9TVE9STV9QUk9UX1JBVEUpIC8gMTAwO1xcbi1cXHRpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSkge1xcbi1cXHRcXHRzdG9ybV9tYXNrID0gc3dhYjE2KHN0b3JtX21hc2spO1xcbi1cXHRcXHRzdG9ybV9yYXRlID0gc3dhYjE2KHN0b3JtX3JhdGUpO1xcbi1cXHR9XFxuIFxcdHJlZ21hcF91cGRhdGVfYml0cyhrc3pfcmVnbWFwXzE2KGRldiksIHJlZ3NbU19CUk9BRENBU1RfQ1RSTF0sXFxuIFxcdFxcdFxcdCAgIHN0b3JtX21hc2ssIHN0b3JtX3JhdGUpO1xcbiBcXG5AQCAtMjQ5OSw3ICsyNzIxLDcgQEAgc3RhdGljIGludCBrc3o4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFxuIFxcdGtzel9jZmcoZGV2LCBTX01JUlJPUl9DVFJMLCBTV19NSVJST1JfUlhfVFgsIGZhbHNlKTtcXG4gXFxuLVxcdGlmICgha3N6X2lzX2tzejg4eDMoZGV2KSBcXHUwMDI2XFx1MDAyNiAha3N6X2lzX2tzejg0NjMoZGV2KSlcXG4rXFx0aWYgKCFrc3pfaXNfa3N6ODh4MyhkZXYpKVxcbiBcXHRcXHRrc3pfY2ZnKGRldiwgUkVHX1NXX0NUUkxfMTksIFNXX0lOU19UQUdfRU5BQkxFLCB0cnVlKTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyAoZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VudW1fdmxhbnMgLyA0KTsgaSsrKVxcbkBAIC0yNjIzLDYgKzI4NDUsOSBAQCBzdGF0aWMgdTMyIGtzejhfZ2V0X3BvcnRfYWRkcihpbnQgcG9ydCwgaW50IG9mZnNldClcXG4gXFxuIHN0YXRpYyB1MzIga3N6ODQ2M19nZXRfcG9ydF9hZGRyKGludCBwb3J0LCBpbnQgb2Zmc2V0KVxcbiB7XFxuK1xcdGlmIChvZmZzZXQgXFx1MDAzZT0gS1NaODQ2M19QVFBfQ0xLX0NUUkwpXFxuK1xcdFxcdHJldHVybiBvZmZzZXQgKyAweDIwICogcG9ydDtcXG4rXFxuIFxcdHJldHVybiBvZmZzZXQgKyAweDE4ICogcG9ydDtcXG4gfVxcbiBcXG5AQCAtMjc1NSw3ICsyOTgwLDcgQEAgc3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBrc3o4NDYzX2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBpbnQgcG9ydCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIG1wKVxcbiB7XFxuLVxcdHJldHVybiBEU0FfVEFHX1BST1RPX0tTWjk4OTM7XFxuK1xcdHJldHVybiBEU0FfVEFHX1BST1RPX0tTWjg0NjM7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQga3N6ODQ2M19jb25uZWN0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuQEAgLTI3NjMsNyArMjk4OCw3IEBAIHN0YXRpYyBpbnQga3N6ODQ2M19jb25uZWN0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuIHtcXG4gXFx0c3RydWN0IGtzel90YWdnZXJfZGF0YSAqdGFnZ2VyX2RhdGE7XFxuIFxcbi1cXHRpZiAocHJvdG8gIT0gRFNBX1RBR19QUk9UT19LU1o5ODkzKVxcbitcXHRpZiAocHJvdG8gIT0gRFNBX1RBR19QUk9UT19LU1o4NDYzKVxcbiBcXHRcXHRyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDtcXG4gXFxuIFxcdHRhZ2dlcl9kYXRhID0ga3N6X3RhZ2dlcl9kYXRhKGRzKTtcXG5AQCAtMjg4OSw4ICszMTE0LDggQEAgY29uc3Qgc3RydWN0IGtzel9kZXZfb3BzIGtzejg4eHhfZGV2X29wcyA9IHtcXG4gY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGtzejg0NjNfc3dpdGNoX29wcyA9IHtcXG4gXFx0LmdldF90YWdfcHJvdG9jb2xcXHQ9IGtzejg0NjNfZ2V0X3RhZ19wcm90b2NvbCxcXG4gXFx0LmNvbm5lY3RfdGFnX3Byb3RvY29sICAgPSBrc3o4NDYzX2Nvbm5lY3RfdGFnX3Byb3RvY29sLFxcbi1cXHQuc2V0dXBcXHRcXHRcXHQ9IGtzejhfc2V0dXAsXFxuLVxcdC50ZWFyZG93blxcdFxcdD0ga3N6X3RlYXJkb3duLFxcbitcXHQuc2V0dXBcXHRcXHRcXHQ9IGtzejg0NjNfc2V0dXAsXFxuK1xcdC50ZWFyZG93blxcdFxcdD0ga3N6ODQ2M190ZWFyZG93bixcXG4gXFx0LnBoeV9yZWFkXFx0XFx0PSBrc3o4NDYzX3BoeV9yZWFkMTYsXFxuIFxcdC5waHlfd3JpdGVcXHRcXHQ9IGtzejg0NjNfcGh5X3dyaXRlMTYsXFxuIFxcdC5waHlsaW5rX2dldF9jYXBzXFx0PSBrc3o4X3BoeWxpbmtfZ2V0X2NhcHMsXFxuQEAgLTI5MTgsOSArMzE0Myw5IEBAIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBrc3o4NDYzX3N3aXRjaF9vcHMgPSB7XFxuIFxcdC5wb3J0X21heF9tdHVcXHRcXHQ9IGtzejg4eHhfbWF4X210dSxcXG4gXFx0LnN1c3BlbmRcXHRcXHQ9IGtzel9zdXNwZW5kLFxcbiBcXHQucmVzdW1lXFx0XFx0XFx0PSBrc3pfcmVzdW1lLFxcbi1cXHQuZ2V0X3RzX2luZm9cXHRcXHQ9IGtzel9nZXRfdHNfaW5mbyxcXG4rXFx0LmdldF90c19pbmZvXFx0XFx0PSBrc3o4NDYzX2dldF90c19pbmZvLFxcbiBcXHQucG9ydF9od3RzdGFtcF9nZXRcXHQ9IGtzel9od3RzdGFtcF9nZXQsXFxuLVxcdC5wb3J0X2h3dHN0YW1wX3NldFxcdD0ga3N6X2h3dHN0YW1wX3NldCxcXG4rXFx0LnBvcnRfaHd0c3RhbXBfc2V0XFx0PSBrc3o4NDYzX2h3dHN0YW1wX3NldCxcXG4gXFx0LnBvcnRfdHh0c3RhbXBcXHRcXHQ9IGtzel9wb3J0X3R4dHN0YW1wLFxcbiBcXHQucG9ydF9yeHRzdGFtcFxcdFxcdD0ga3N6X3BvcnRfcnh0c3RhbXAsXFxuIFxcdC5wb3J0X3NldHVwX3RjXFx0XFx0PSBrc3o4X3NldHVwX3RjLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejhfcmVnLmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejhfcmVnLmhcXG5pbmRleCA5ODFhYjQ0MWQ5YjcxOS4uNmJjNTExZGExZjdkZGQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4X3JlZy5oXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4X3JlZy5oXFxuQEAgLTc4Niw2ICs3ODYsNyBAQFxcbiAjZGVmaW5lIEtTWjg0NjNfUkVHX1NXX1JFU0VUXFx0XFx0MHgxMjZcXG4gXFxuICNkZWZpbmUgS1NaODQ2M19HTE9CQUxfU09GVFdBUkVfUkVTRVRcXHRCSVQoMClcXG4rI2RlZmluZSBLU1o4NDYzX1BUUF9TT0ZUV0FSRV9SRVNFVFxcdEJJVCgyKVxcbiBcXG4gI2RlZmluZSBLU1o4NDYzX1BUUF9DTEtfQ1RSTFxcdFxcdDB4NjAwXFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jXFxuaW5kZXggNjdhYjZkZGI5ZTUzZjIuLmZmMWJlNTQwYjU0NmZhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmNcXG5AQCAtMjQxOSwxNCArMjQxOSwxNCBAQCBzdGF0aWMgdm9pZCBrc3pfaXJxX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpXFxuIFxcdGtpcnEtXFx1MDAzZW1hc2tlZCBcXHUwMDI2PSB+QklUKGQtXFx1MDAzZWh3aXJxKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQga3N6X2lycV9idXNfbG9jayhzdHJ1Y3QgaXJxX2RhdGEgKmQpXFxuK3ZvaWQga3N6X2lycV9idXNfbG9jayhzdHJ1Y3QgaXJxX2RhdGEgKmQpXFxuIHtcXG4gXFx0c3RydWN0IGtzel9pcnEgKmtpcnEgID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7XFxuIFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZraXJxLVxcdTAwM2VkZXYtXFx1MDAzZWxvY2tfaXJxKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQga3N6X2lycV9idXNfc3luY191bmxvY2soc3RydWN0IGlycV9kYXRhICpkKVxcbit2b2lkIGtzel9pcnFfYnVzX3N5bmNfdW5sb2NrKHN0cnVjdCBpcnFfZGF0YSAqZClcXG4ge1xcbiBcXHRzdHJ1Y3Qga3N6X2lycSAqa2lycSAgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTtcXG4gXFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGtpcnEtXFx1MDAzZWRldjtcXG5AQCAtMjUwNCwxNCArMjUwNCwxNSBAQCBzdGF0aWMgaXJxcmV0dXJuX3Qga3N6X2lycV90aHJlYWRfZm4oaW50IGlycSwgdm9pZCAqZGV2X2lkKVxcbiBcXHRyZXR1cm4gKG5oYW5kbGVkIFxcdTAwM2UgMCA/IElSUV9IQU5ETEVEIDogSVJRX05PTkUpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGtzel9pcnFfY29tbW9uX3NldHVwKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHN0cnVjdCBrc3pfaXJxICpraXJxKVxcbitpbnQga3N6X2lycV9jb21tb25fc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgc3RydWN0IGtzel9pcnEgKmtpcnEsXFxuK1xcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgaXJxX2RvbWFpbl9vcHMgKm9wcylcXG4ge1xcbiBcXHRpbnQgcmV0LCBuO1xcbiBcXG4gXFx0a2lycS1cXHUwMDNlZGV2ID0gZGV2O1xcbiBcXG4tXFx0a2lycS1cXHUwMDNlZG9tYWluID0gaXJxX2RvbWFpbl9jcmVhdGVfc2ltcGxlKGRldl9md25vZGUoZGV2LVxcdTAwM2VkZXYpLCBraXJxLVxcdTAwM2VuaXJxcywgMCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmtzel9pcnFfZG9tYWluX29wcywga2lycSk7XFxuK1xcdGtpcnEtXFx1MDAzZWRvbWFpbiA9IGlycV9kb21haW5fY3JlYXRlX3NpbXBsZShkZXZfZndub2RlKGRldi1cXHUwMDNlZGV2KSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0a2lycS1cXHUwMDNlbmlycXMsIDAsIG9wcywga2lycSk7XFxuIFxcdGlmICgha2lycS1cXHUwMDNlZG9tYWluKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuQEAgLTI1NDMsNyArMjU0NCw3IEBAIGludCBrc3pfZ2lycV9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbiBcXG4gXFx0Z2lycS1cXHUwMDNlaXJxX251bSA9IGRldi1cXHUwMDNlaXJxO1xcbiBcXG4tXFx0cmV0dXJuIGtzel9pcnFfY29tbW9uX3NldHVwKGRldiwgZ2lycSk7XFxuK1xcdHJldHVybiBrc3pfaXJxX2NvbW1vbl9zZXR1cChkZXYsIGdpcnEsIFxcdTAwMjZrc3pfaXJxX2RvbWFpbl9vcHMpO1xcbiB9XFxuIFxcbiBpbnQga3N6X3BpcnFfc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggcClcXG5AQCAtMjU2MCw3ICsyNTYxLDcgQEAgaW50IGtzel9waXJxX3NldHVwKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHApXFxuIFxcdGlmICghcGlycS1cXHUwMDNlaXJxX251bSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRyZXR1cm4ga3N6X2lycV9jb21tb25fc2V0dXAoZGV2LCBwaXJxKTtcXG4rXFx0cmV0dXJuIGtzel9pcnFfY29tbW9uX3NldHVwKGRldiwgcGlycSwgXFx1MDAyNmtzel9pcnFfZG9tYWluX29wcyk7XFxuIH1cXG4gXFxuIHZvaWQga3N6X3RlYXJkb3duKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaFxcbmluZGV4IGFjYWY3MGU2ZjM5M2M5Li5jYmU5ODQ5NDU3OGMzNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oXFxuQEAgLTgsNiArOCw3IEBAXFxuICNkZWZpbmUgX19LU1pfQ09NTU9OX0hcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaXJxZG9tYWluLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L211dGV4LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY3MvcGNzLXhwY3MuaFxcdTAwM2VcXG5AQCAtMTkzLDYgKzE5NCw3IEBAIHN0cnVjdCBrc3pfcG9ydCB7XFxuIFxcdHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnIHRzdGFtcF9jb25maWc7XFxuIFxcdGJvb2wgaHd0c190eF9lbjtcXG4gXFx0Ym9vbCBod3RzX3J4X2VuO1xcbitcXHRib29sIGxhc3RfdHhfaXNfcGRlbGF5cmVzcDtcXG4gXFx0c3RydWN0IGtzel9pcnEgcHRwaXJxO1xcbiBcXHRzdHJ1Y3Qga3N6X3B0cF9pcnEgcHRwbXNnX2lycVszXTtcXG4gXFx0a3RpbWVfdCB0c3RhbXBfbXNnO1xcbkBAIC01MDgsNiArNTEwLDEwIEBAIGludCBrc3pfc3dfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbCk7XFxuIGludCBrc3pfcGFyZW50X21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IHJlZ251bSk7XFxuIGludCBrc3pfcGFyZW50X21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWdudW0sIHUxNiB2YWwpO1xcbiBpbnQga3N6X21kaW9fcmVnaXN0ZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldik7XFxuK3ZvaWQga3N6X2lycV9idXNfbG9jayhzdHJ1Y3QgaXJxX2RhdGEgKmQpO1xcbit2b2lkIGtzel9pcnFfYnVzX3N5bmNfdW5sb2NrKHN0cnVjdCBpcnFfZGF0YSAqZCk7XFxuK2ludCBrc3pfaXJxX2NvbW1vbl9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBzdHJ1Y3Qga3N6X2lycSAqa2lycSxcXG4rXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyAqb3BzKTtcXG4gaW50IGtzel9waXJxX3NldHVwKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHApO1xcbiBpbnQga3N6X2dpcnFfc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldik7XFxuIHZvaWQga3N6X2lycV9mcmVlKHN0cnVjdCBrc3pfaXJxICpraXJxKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuY1xcbmluZGV4IDhiOTgwMzkzMjBhZGRhLi45ZDhiNzg2ODdmNTMxOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jXFxuQEAgLTMyLDYgKzMyLDE1IEBAXFxuIFxcbiAjZGVmaW5lIEtTWl9QVFBfSU5UX1NUQVJUIDEzXFxuIFxcbisvKlxcbisgKiBQVFAgaW50ZXJydXB0IGJpdCBpcyB0aGUgYml0IDEyIG9mIHRoZSAxNi1iaXRzIElTUi9JRVIuIEJ1dCBrc3pfY29tbW9uLmMgb25seVxcbisgKiBhY2Nlc3NlcyB0aGUgaGlnaC1ieXRlIG9mIHRoZXNlIHJlZ2lzdGVycyBzbyB0aGUgUFRQIGludGVycnVwdCBiaXQgYmVjb21lcyA0LlxcbisgKi9cXG4rI2RlZmluZSBLU1o4NDYzX1NSQ19QVFBfSU5UXFx0XFx0NFxcbisjZGVmaW5lIEtTWjg0NjNfUFRQX1BPUlQxX0lOVF9TVEFSVFxcdDEyXFxuKyNkZWZpbmUgS1NaODQ2M19QVFBfUE9SVDJfSU5UX1NUQVJUXFx0MTRcXG4rI2RlZmluZSBLU1o4NDYzX1BUUF9JTlRfU1RBUlRcXHRcXHRLU1o4NDYzX1BUUF9QT1JUMV9JTlRfU1RBUlRcXG4rXFxuIHN0YXRpYyBpbnQga3N6X3B0cF90b3VfZ3BpbyhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbiB7XFxuIFxcdGludCByZXQ7XFxuQEAgLTI4OCw2ICsyOTcsMzEgQEAgc3RhdGljIGludCBrc3pfcHRwX2VuYWJsZV9tb2RlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuIFxcdFxcdFxcdCB0YWdfZW4gPyBQVFBfRU5BQkxFIDogMCk7XFxuIH1cXG4gXFxuK2ludCBrc3o4NDYzX2dldF90c19pbmZvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICp0cylcXG4re1xcbitcXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXFx1MDAzZXByaXY7XFxuK1xcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhO1xcbitcXG4rXFx0cHRwX2RhdGEgPSBcXHUwMDI2ZGV2LVxcdTAwM2VwdHBfZGF0YTtcXG4rXFxuK1xcdGlmICghcHRwX2RhdGEtXFx1MDAzZWNsb2NrKVxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFxuK1xcdHRzLVxcdTAwM2Vzb190aW1lc3RhbXBpbmcgPSBTT0ZfVElNRVNUQU1QSU5HX1RYX0hBUkRXQVJFIHxcXG4rXFx0XFx0XFx0ICAgICAgU09GX1RJTUVTVEFNUElOR19SWF9IQVJEV0FSRSB8XFxuK1xcdFxcdFxcdCAgICAgIFNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFO1xcbitcXG4rXFx0dHMtXFx1MDAzZXR4X3R5cGVzID0gQklUKEhXVFNUQU1QX1RYX09GRikgfCBCSVQoSFdUU1RBTVBfVFhfT04pO1xcbitcXG4rXFx0dHMtXFx1MDAzZXJ4X2ZpbHRlcnMgPSBCSVQoSFdUU1RBTVBfRklMVEVSX05PTkUpIHxcXG4rXFx0XFx0XFx0IEJJVChIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX0VWRU5UKTtcXG4rXFxuK1xcdHRzLVxcdTAwM2VwaGNfaW5kZXggPSBwdHBfY2xvY2tfaW5kZXgocHRwX2RhdGEtXFx1MDAzZWNsb2NrKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAvKiBUaGUgZnVuY3Rpb24gaXMgcmV0dXJuIGJhY2sgdGhlIGNhcGFiaWxpdHkgb2YgdGltZXN0YW1waW5nIGZlYXR1cmUgd2hlblxcbiAgKiByZXF1ZXN0ZWQgdGhyb3VnaCBldGh0b29sIC1UIFxcdTAwM2NpbnRlcmZhY2VcXHUwMDNlIHV0aWxpdHlcXG4gICovXFxuQEAgLTMzMiw2ICszNjYsNzIgQEAgaW50IGtzel9od3RzdGFtcF9nZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQga3N6ODQ2M19zZXRfaHd0c3RhbXBfY29uZmlnKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qga3N6X3BvcnQgKnBydCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcpXFxuK3tcXG4rXFx0Y29uc3QgdTE2ICpyZWdzID0gZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VyZWdzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKGNvbmZpZy1cXHUwMDNlZmxhZ3MpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0c3dpdGNoIChjb25maWctXFx1MDAzZXR4X3R5cGUpIHtcXG4rXFx0Y2FzZSBIV1RTVEFNUF9UWF9PRkY6XFxuK1xcdFxcdHBydC1cXHUwMDNlcHRwbXNnX2lycVtLU1o4NDYzX1NZTkNfTVNHXS50c19lbiAgPSBmYWxzZTtcXG4rXFx0XFx0cHJ0LVxcdTAwM2VwdHBtc2dfaXJxW0tTWjg0NjNfWERSRVFfUERSRVNfTVNHXS50c19lbiA9IGZhbHNlO1xcbitcXHRcXHRwcnQtXFx1MDAzZWh3dHNfdHhfZW4gPSBmYWxzZTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgSFdUU1RBTVBfVFhfT046XFxuK1xcdFxcdHBydC1cXHUwMDNlcHRwbXNnX2lycVtLU1o4NDYzX1NZTkNfTVNHXS50c19lbiAgPSB0cnVlO1xcbitcXHRcXHRwcnQtXFx1MDAzZXB0cG1zZ19pcnFbS1NaODQ2M19YRFJFUV9QRFJFU19NU0ddLnRzX2VuID0gdHJ1ZTtcXG4rXFx0XFx0cHJ0LVxcdTAwM2Vod3RzX3R4X2VuID0gdHJ1ZTtcXG4rXFxuK1xcdFxcdHJldCA9IGtzel9ybXcxNihkZXYsIHJlZ3NbUFRQX01TR19DT05GMV0sIFBUUF8xU1RFUCwgMCk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuK1xcdH1cXG4rXFxuK1xcdHN3aXRjaCAoY29uZmlnLVxcdTAwM2VyeF9maWx0ZXIpIHtcXG4rXFx0Y2FzZSBIV1RTVEFNUF9GSUxURVJfTk9ORTpcXG4rXFx0XFx0cHJ0LVxcdTAwM2Vod3RzX3J4X2VuID0gZmFsc2U7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfRVZFTlQ6XFxuK1xcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9TWU5DOlxcbitcXHRcXHRjb25maWctXFx1MDAzZXJ4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfRVZFTlQ7XFxuK1xcdFxcdHBydC1cXHUwMDNlaHd0c19yeF9lbiA9IHRydWU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRjb25maWctXFx1MDAzZXJ4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9OT05FO1xcbitcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGtzel9wdHBfZW5hYmxlX21vZGUoZGV2KTtcXG4rfVxcbitcXG4raW50IGtzejg0NjNfaHd0c3RhbXBfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdCBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY29uZmlnLFxcbitcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbit7XFxuK1xcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4rXFx0c3RydWN0IGtzel9wb3J0ICpwcnQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRwcnQgPSBcXHUwMDI2ZGV2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFxuK1xcdHJldCA9IGtzejg0NjNfc2V0X2h3dHN0YW1wX2NvbmZpZyhkZXYsIHBydCwgY29uZmlnKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHBydC1cXHUwMDNldHN0YW1wX2NvbmZpZyA9ICpjb25maWc7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBrc3pfc2V0X2h3dHN0YW1wX2NvbmZpZyhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga3N6X3BvcnQgKnBydCxcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZylcXG5AQCAtNTYyLDYgKzY2MiwzMSBAQCBzdGF0aWMgdm9pZCBrc3pfcHRwX3R4dHN0YW1wX3NrYihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbiBcXHRza2JfY29tcGxldGVfdHhfdGltZXN0YW1wKHNrYiwgXFx1MDAyNmh3dHN0YW1wcyk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGtzejg0NjNfc2V0X3BkZWxheXJlc3BfZmxhZyhzdHJ1Y3Qga3N6X3BvcnQgKnBydCxcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3QgcHRwX2hlYWRlciAqaGRyO1xcbitcXHR1bnNpZ25lZCBpbnQgdHlwZTtcXG4rXFx0dTggcHRwX21zZ190eXBlO1xcbitcXG4rXFx0aWYgKCFrc3pfaXNfa3N6ODQ2MyhwcnQtXFx1MDAzZWtzel9kZXYpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAoc2tiX2xpbmVhcml6ZShza2IpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR0eXBlID0gcHRwX2NsYXNzaWZ5X3Jhdyhza2IpO1xcbitcXHRpZiAodHlwZSA9PSBQVFBfQ0xBU1NfTk9ORSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aGRyID0gcHRwX3BhcnNlX2hlYWRlcihza2IsIHR5cGUpO1xcbitcXHRpZiAoIWhkcilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cHRwX21zZ190eXBlID0gcHRwX2dldF9tc2d0eXBlKGhkciwgdHlwZSk7XFxuK1xcdHBydC1cXHUwMDNlbGFzdF90eF9pc19wZGVsYXlyZXNwID0gKHB0cF9tc2dfdHlwZSA9PSBQVFBfTVNHVFlQRV9QREVMQVlfUkVTUCk7XFxuK31cXG4rXFxuIHZvaWQga3N6X3BvcnRfZGVmZXJyZWRfeG1pdChzdHJ1Y3Qga3RocmVhZF93b3JrICp3b3JrKVxcbiB7XFxuIFxcdHN0cnVjdCBrc3pfZGVmZXJyZWRfeG1pdF93b3JrICp4bWl0X3dvcmsgPSB3b3JrX3RvX3htaXRfd29yayh3b3JrKTtcXG5AQCAtNTc4LDYgKzcwMyw4IEBAIHZvaWQga3N6X3BvcnRfZGVmZXJyZWRfeG1pdChzdHJ1Y3Qga3RocmVhZF93b3JrICp3b3JrKVxcbiBcXG4gXFx0cmVpbml0X2NvbXBsZXRpb24oXFx1MDAyNnBydC1cXHUwMDNldHN0YW1wX21zZ19jb21wKTtcXG4gXFxuK1xcdGtzejg0NjNfc2V0X3BkZWxheXJlc3BfZmxhZyhwcnQsIHNrYik7XFxuK1xcbiBcXHRkc2FfZW5xdWV1ZV9za2Ioc2tiLCBza2ItXFx1MDAzZWRldik7XFxuIFxcbiBcXHRrc3pfcHRwX3R4dHN0YW1wX3NrYihkZXYsIHBydCwgY2xvbmUpO1xcbkBAIC05NDQsOCArMTA3MSw5IEBAIGludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFx0LyogQ3VycmVudGx5IG9ubHkgUDJQIG1vZGUgaXMgc3VwcG9ydGVkLiBXaGVuIDgwMl8xQVMgYml0IGlzIHNldCwgaXRcXG4gXFx0ICogZm9yd2FyZHMgYWxsIFBUUCBwYWNrZXRzIHRvIGhvc3QgcG9ydCBhbmQgbm9uZSB0byBvdGhlciBwb3J0cy5cXG4gXFx0ICovXFxuLVxcdHJldCA9IGtzel9ybXcxNihkZXYsIHJlZ3NbUFRQX01TR19DT05GMV0sIFBUUF9UQ19QMlAgfCBQVFBfODAyXzFBUyxcXG4tXFx0XFx0XFx0UFRQX1RDX1AyUCB8IFBUUF84MDJfMUFTKTtcXG4rXFx0cmV0ID0ga3N6X3JtdzE2KGRldiwgcmVnc1tQVFBfTVNHX0NPTkYxXSxcXG4rXFx0XFx0XFx0UFRQX1RDX1AyUCB8IFBUUF84MDJfMUFTIHwgUFRQX0VUSF9FTkFCTEUsXFxuK1xcdFxcdFxcdFBUUF9UQ19QMlAgfCBQVFBfODAyXzFBUyB8IFBUUF9FVEhfRU5BQkxFKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuQEAgLTk2OSw3ICsxMDk3LDIyIEBAIHZvaWQga3N6X3B0cF9jbG9ja191bnJlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFxuIHN0YXRpYyBpbnQga3N6X3JlYWRfdHMoc3RydWN0IGtzel9wb3J0ICpwb3J0LCB1MTYgcmVnLCB1MzIgKnRzKVxcbiB7XFxuLVxcdHJldHVybiBrc3pfcmVhZDMyKHBvcnQtXFx1MDAzZWtzel9kZXYsIHJlZywgdHMpO1xcbitcXHR1MTYgdHNfcmVnID0gcmVnO1xcbitcXG4rXFx0LyoqXFxuK1xcdCAqIE9uIEtTWjg0NjMgRFJFUSBhbmQgRFJFU1AgdGltZXN0YW1wcyBzaGFyZSBvbmUgaW50ZXJydXB0IGxpbmVcXG4rXFx0ICogc28gd2UgaGF2ZSB0byBjaGVjayB0aGUgbmF0dXJlIG9mIHRoZSBsYXRlc3QgZXZlbnQgc2VudCB0byBrbm93XFxuK1xcdCAqIHdoZXJlIHRoZSB0aW1lc3RhbXAgaXMgbG9jYXRlZFxcbitcXHQgKi9cXG4rXFx0aWYgKGtzel9pc19rc3o4NDYzKHBvcnQtXFx1MDAzZWtzel9kZXYpKSB7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBrc3pfZGV2X29wcyAqb3BzID0gcG9ydC1cXHUwMDNla3N6X2Rldi1cXHUwMDNlZGV2X29wcztcXG4rXFxuK1xcdFxcdGlmIChwb3J0LVxcdTAwM2VsYXN0X3R4X2lzX3BkZWxheXJlc3AgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIHRzX3JlZyA9PSBvcHMtXFx1MDAzZWdldF9wb3J0X2FkZHIocG9ydC1cXHUwMDNlbnVtLCBLU1o4NDYzX1JFR19QT1JUX0RSRVFfVFMpKVxcbitcXHRcXHRcXHR0c19yZWcgKz0gS1NaODQ2M19EUkVTUF9UU19PRkZTRVQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBrc3pfcmVhZDMyKHBvcnQtXFx1MDAzZWtzel9kZXYsIHRzX3JlZywgdHMpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaXJxcmV0dXJuX3Qga3N6X3B0cF9tc2dfdGhyZWFkX2ZuKGludCBpcnEsIHZvaWQgKmRldl9pZClcXG5AQCAtMTEyOSw2ICsxMjcyLDEyOCBAQCBzdGF0aWMgaW50IGtzel9wdHBfbXNnX2lycV9zZXR1cChzdHJ1Y3Qga3N6X3BvcnQgKnBvcnQsIHU4IG4pXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfcG9ydF9pcnFfc2V0dXAoc3RydWN0IGtzel9pcnEgKnB0cGlycSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGtzel9wb3J0ICpwb3J0LCBpbnQgaHdfaXJxKVxcbit7XFxuK1xcdHUxNiB0c19yZWdbXSA9IHtLU1o4NDYzX1JFR19QT1JUX1NZTkNfVFMsIEtTWjg0NjNfUkVHX1BPUlRfRFJFUV9UU307XFxuK1xcdHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbmFtZVtdID0ge1xcXCJzeW5jLW1zZ1xcXCIsIFxcXCJkZWxheS1tc2dcXFwifTtcXG4rXFx0Y29uc3Qgc3RydWN0IGtzel9kZXZfb3BzICpvcHMgPSBwb3J0LVxcdTAwM2Vrc3pfZGV2LVxcdTAwM2VkZXZfb3BzO1xcbitcXHRzdHJ1Y3Qga3N6X3B0cF9pcnEgKnB0cG1zZ19pcnE7XFxuK1xcdGludCByZXQ7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aW5pdF9jb21wbGV0aW9uKFxcdTAwMjZwb3J0LVxcdTAwM2V0c3RhbXBfbXNnX2NvbXApO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDI7IGkrKykge1xcbitcXHRcXHRwdHBtc2dfaXJxID0gXFx1MDAyNnBvcnQtXFx1MDAzZXB0cG1zZ19pcnFbaV07XFxuK1xcdFxcdHB0cG1zZ19pcnEtXFx1MDAzZW51bSA9IGlycV9jcmVhdGVfbWFwcGluZyhwdHBpcnEtXFx1MDAzZWRvbWFpbixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBod19pcnEgKyBpKTtcXG4rXFx0XFx0aWYgKCFwdHBtc2dfaXJxLVxcdTAwM2VudW0pIHtcXG4rXFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0XFx0Z290byByZWxlYXNlX21zZ19pcnE7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHB0cG1zZ19pcnEtXFx1MDAzZXBvcnQgPSBwb3J0O1xcbitcXHRcXHRwdHBtc2dfaXJxLVxcdTAwM2V0c19yZWcgPSBvcHMtXFx1MDAzZWdldF9wb3J0X2FkZHIocG9ydC1cXHUwMDNlbnVtLCB0c19yZWdbaV0pO1xcbitcXG4rXFx0XFx0c3Ryc2NweShwdHBtc2dfaXJxLVxcdTAwM2VuYW1lLCBuYW1lW2ldKTtcXG4rXFxuK1xcdFxcdHJldCA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHB0cG1zZ19pcnEtXFx1MDAzZW51bSwgTlVMTCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAga3N6X3B0cF9tc2dfdGhyZWFkX2ZuLCBJUlFGX09ORVNIT1QsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHB0cG1zZ19pcnEtXFx1MDAzZW5hbWUsIHB0cG1zZ19pcnEpO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdGlycV9kaXNwb3NlX21hcHBpbmcocHRwbXNnX2lycS1cXHUwMDNlbnVtKTtcXG4rXFx0XFx0XFx0Z290byByZWxlYXNlX21zZ19pcnE7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbityZWxlYXNlX21zZ19pcnE6XFxuK1xcdHdoaWxlIChpLS0pXFxuK1xcdFxcdGtzel9wdHBfbXNnX2lycV9mcmVlKHBvcnQsIGkpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQga3N6ODQ2M19wdHBfcG9ydF9pcnFfdGVhcmRvd24oc3RydWN0IGtzel9wb3J0ICpwb3J0KVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDI7IGkrKylcXG4rXFx0XFx0a3N6X3B0cF9tc2dfaXJxX2ZyZWUocG9ydCwgaSk7XFxuK31cXG4rXFxuK2ludCBrc3o4NDYzX3B0cF9pcnFfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbit7XFxuK1xcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4rXFx0c3RydWN0IGtzel9wb3J0ICpwb3J0MSwgKnBvcnQyO1xcbitcXHRzdHJ1Y3Qga3N6X2lycSAqcHRwaXJxO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cG9ydDEgPSBcXHUwMDI2ZGV2LVxcdTAwM2Vwb3J0c1swXTtcXG4rXFx0cG9ydDIgPSBcXHUwMDI2ZGV2LVxcdTAwM2Vwb3J0c1sxXTtcXG4rXFx0cHRwaXJxID0gXFx1MDAyNnBvcnQxLVxcdTAwM2VwdHBpcnE7XFxuK1xcbitcXHRwdHBpcnEtXFx1MDAzZWlycV9udW0gPSBpcnFfZmluZF9tYXBwaW5nKGRldi1cXHUwMDNlZ2lycS5kb21haW4sXFxuK1xcdFxcdFxcdFxcdFxcdCAgIEtTWjg0NjNfU1JDX1BUUF9JTlQpO1xcbitcXHRpZiAoIXB0cGlycS1cXHUwMDNlaXJxX251bSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRwdHBpcnEtXFx1MDAzZWRldiA9IGRldjtcXG4rXFx0cHRwaXJxLVxcdTAwM2VuaXJxcyA9IDQ7XFxuK1xcdHB0cGlycS1cXHUwMDNlcmVnX21hc2sgPSBLU1o4NDYzX1BUUF9UU19JRVI7XFxuK1xcdHB0cGlycS1cXHUwMDNlcmVnX3N0YXR1cyA9IEtTWjg0NjNfUFRQX1RTX0lTUjtcXG4rXFx0cHRwaXJxLVxcdTAwM2VpcnEwX29mZnNldCA9IEtTWjg0NjNfUFRQX0lOVF9TVEFSVDtcXG4rXFx0c25wcmludGYocHRwaXJxLVxcdTAwM2VuYW1lLCBzaXplb2YocHRwaXJxLVxcdTAwM2VuYW1lKSwgXFxcInB0cC1pcnFcXFwiKTtcXG4rXFxuK1xcdHB0cGlycS1cXHUwMDNlZG9tYWluID0gaXJxX2RvbWFpbl9jcmVhdGVfbGluZWFyKGRldl9md25vZGUoZGV2LVxcdTAwM2VkZXYpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIHB0cGlycS1cXHUwMDNlbmlycXMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmtzel9wdHBfaXJxX2RvbWFpbl9vcHMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgcHRwaXJxKTtcXG4rXFx0aWYgKCFwdHBpcnEtXFx1MDAzZWRvbWFpbilcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRyZXQgPSBrc3o4NDYzX3B0cF9wb3J0X2lycV9zZXR1cChwdHBpcnEsIHBvcnQxLFxcbitcXHRcXHRcXHRcXHRcXHQgS1NaODQ2M19QVFBfUE9SVDFfSU5UX1NUQVJUIC0gS1NaODQ2M19QVFBfSU5UX1NUQVJUKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byByZWxlYXNlX2RvbWFpbjtcXG4rXFxuK1xcdHJldCA9IGtzejg0NjNfcHRwX3BvcnRfaXJxX3NldHVwKHB0cGlycSwgcG9ydDIsXFxuK1xcdFxcdFxcdFxcdFxcdCBLU1o4NDYzX1BUUF9QT1JUMl9JTlRfU1RBUlQgLSBLU1o4NDYzX1BUUF9JTlRfU1RBUlQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGZyZWVfcG9ydDE7XFxuK1xcbitcXHRyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShwdHBpcnEtXFx1MDAzZWlycV9udW0sIE5VTEwsIGtzel9wdHBfaXJxX3RocmVhZF9mbixcXG4rXFx0XFx0XFx0XFx0ICAgSVJRRl9PTkVTSE9ULCBwdHBpcnEtXFx1MDAzZW5hbWUsIHB0cGlycSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZnJlZV9wb3J0MjtcXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rZnJlZV9wb3J0MjpcXG4rXFx0a3N6ODQ2M19wdHBfcG9ydF9pcnFfdGVhcmRvd24ocG9ydDIpO1xcbitmcmVlX3BvcnQxOlxcbitcXHRrc3o4NDYzX3B0cF9wb3J0X2lycV90ZWFyZG93bihwb3J0MSk7XFxuK3JlbGVhc2VfZG9tYWluOlxcbitcXHRpcnFfZG9tYWluX3JlbW92ZShwdHBpcnEtXFx1MDAzZWRvbWFpbik7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbit2b2lkIGtzejg0NjNfcHRwX2lycV9mcmVlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4re1xcbitcXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXFx1MDAzZXByaXY7XFxuK1xcdHN0cnVjdCBrc3pfcG9ydCAqcG9ydDEgPSBcXHUwMDI2ZGV2LVxcdTAwM2Vwb3J0c1swXTtcXG4rXFx0c3RydWN0IGtzel9wb3J0ICpwb3J0MiA9IFxcdTAwMjZkZXYtXFx1MDAzZXBvcnRzWzFdO1xcbitcXHRzdHJ1Y3Qga3N6X2lycSAqcHRwaXJxID0gXFx1MDAyNnBvcnQxLVxcdTAwM2VwdHBpcnE7XFxuK1xcbitcXHRmcmVlX2lycShwdHBpcnEtXFx1MDAzZWlycV9udW0sIHB0cGlycSk7XFxuK1xcdGtzejg0NjNfcHRwX3BvcnRfaXJxX3RlYXJkb3duKHBvcnQyKTtcXG4rXFx0a3N6ODQ2M19wdHBfcG9ydF9pcnFfdGVhcmRvd24ocG9ydDEpO1xcbitcXHRpcnFfZG9tYWluX3JlbW92ZShwdHBpcnEtXFx1MDAzZWRvbWFpbik7XFxuK31cXG4rXFxuIGludCBrc3pfcHRwX2lycV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIHU4IHApXFxuIHtcXG4gXFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVxcdTAwM2Vwcml2O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaCBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oXFxuaW5kZXggMzA4NmU1MTliMWI2NDEuLjcwNjdlYzliZDFlNmYyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmhcXG5AQCAtMzksMTcgKzM5LDI0IEBAIHZvaWQga3N6X3B0cF9jbG9ja191bnJlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XFxuIFxcbiBpbnQga3N6X2dldF90c19pbmZvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdFxcdCAgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqdHMpO1xcbitpbnQga3N6ODQ2M19nZXRfdHNfaW5mbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbitcXHRcXHRcXHRzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqdHMpO1xcbiBpbnQga3N6X2h3dHN0YW1wX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXHRcXHQgICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcpO1xcbiBpbnQga3N6X2h3dHN0YW1wX3NldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXHRcXHQgICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcsXFxuIFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4raW50IGtzejg0NjNfaHd0c3RhbXBfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdCBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY29uZmlnLFxcbitcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4gdm9pZCBrc3pfcG9ydF90eHRzdGFtcChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4gdm9pZCBrc3pfcG9ydF9kZWZlcnJlZF94bWl0KHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspO1xcbiBib29sIGtzel9wb3J0X3J4dHN0YW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgdHlwZSk7XFxuIGludCBrc3pfcHRwX2lycV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIHU4IHApO1xcbiB2b2lkIGtzel9wdHBfaXJxX2ZyZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCB1OCBwKTtcXG4raW50IGtzejg0NjNfcHRwX2lycV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xcbit2b2lkIGtzejg0NjNfcHRwX2lycV9mcmVlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XFxuIFxcbiAjZWxzZVxcbiBcXG5AQCAtNzIsMTEgKzc5LDIwIEBAIHN0YXRpYyBpbmxpbmUgaW50IGtzel9wdHBfaXJxX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgdTggcClcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrc3pfcHRwX2lycV9mcmVlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgdTggcCkge31cXG4gXFxuK3N0YXRpYyBpbmxpbmUgaW50IGtzejg0NjNfcHRwX2lycV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBrc3o4NDYzX3B0cF9pcnFfZnJlZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpIHt9XFxuK1xcbiAjZGVmaW5lIGtzel9nZXRfdHNfaW5mbyBOVUxMXFxuKyNkZWZpbmUga3N6ODQ2M19nZXRfdHNfaW5mbyBOVUxMXFxuIFxcbiAjZGVmaW5lIGtzel9od3RzdGFtcF9nZXQgTlVMTFxcbiBcXG4gI2RlZmluZSBrc3pfaHd0c3RhbXBfc2V0IE5VTExcXG4rI2RlZmluZSBrc3o4NDYzX2h3dHN0YW1wX3NldCBOVUxMXFxuIFxcbiAjZGVmaW5lIGtzel9wb3J0X3J4dHN0YW1wIE5VTExcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cF9yZWcuaCBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cF9yZWcuaFxcbmluZGV4IGVhYjlhZWNiN2ZhOGE1Li42NWVhODU3N2FmNzU1OCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmhcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmhcXG5AQCAtMTIxLDYgKzEyMSwxMiBAQFxcbiAjZGVmaW5lIFJFR19QVFBfUE9SVF9TWU5DX1RTXFx0XFx0MHgwQzBDXFxuICNkZWZpbmUgUkVHX1BUUF9QT1JUX1BEUkVTUF9UU1xcdFxcdDB4MEMxMFxcbiBcXG4rI2RlZmluZSBLU1o4NDYzX1JFR19QT1JUX0RSRVFfVFNcXHQweDA2NDhcXG4rI2RlZmluZSBLU1o4NDYzX1JFR19QT1JUX1NZTkNfVFNcXHQweDA2NENcXG4rI2RlZmluZSBLU1o4NDYzX1JFR19QT1JUX0RSRVNQX1RTXFx0MHgwNjUwXFxuKyNkZWZpbmUgS1NaODQ2M19QVFBfVFNfSVNSXFx0XFx0MHgwNjhDXFxuKyNkZWZpbmUgS1NaODQ2M19QVFBfVFNfSUVSXFx0XFx0MHgwNjhFXFxuK1xcbiAjZGVmaW5lIFJFR19QVFBfUE9SVF9UWF9JTlRfU1RBVFVTX18yXFx0MHgwQzE0XFxuICNkZWZpbmUgUkVHX1BUUF9QT1JUX1RYX0lOVF9FTkFCTEVfXzJcXHQweDBDMTZcXG4gXFxuQEAgLTEzMSw0ICsxMzcsOCBAQFxcbiAjZGVmaW5lIEtTWl9YRFJFUV9NU0dcXHRcXHRcXHQxXFxuICNkZWZpbmUgS1NaX1BEUkVTX01TR1xcdFxcdFxcdDBcXG4gXFxuKyNkZWZpbmUgS1NaODQ2M19EUkVTUF9UU19PRkZTRVRcXHRcXHQoS1NaODQ2M19SRUdfUE9SVF9EUkVTUF9UUyAtIEtTWjg0NjNfUkVHX1BPUlRfRFJFUV9UUylcXG4rI2RlZmluZSBLU1o4NDYzX1NZTkNfTVNHXFx0XFx0MFxcbisjZGVmaW5lIEtTWjg0NjNfWERSRVFfUERSRVNfTVNHXFx0XFx0MVxcbitcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RzYS5oIGIvaW5jbHVkZS9uZXQvZHNhLmhcXG5pbmRleCA4YzE2ZWYyM2NjMTAyYS4uNmY3ZjVjMTdiNTMyMDggMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvZHNhLmhcXG4rKysgYi9pbmNsdWRlL25ldC9kc2EuaFxcbkBAIC01OSw2ICs1OSw3IEBAIHN0cnVjdCB0Y19hY3Rpb247XFxuICNkZWZpbmUgRFNBX1RBR19QUk9UT19NWExfR1NXMVhYX1ZBTFVFXFx0XFx0MzFcXG4gI2RlZmluZSBEU0FfVEFHX1BST1RPX01YTDg2Ml9WQUxVRVxcdFxcdDMyXFxuICNkZWZpbmUgRFNBX1RBR19QUk9UT19ORVRDX1ZBTFVFXFx0XFx0MzNcXG4rI2RlZmluZSBEU0FfVEFHX1BST1RPX0tTWjg0NjNfVkFMVUVcXHRcXHQzNFxcbiBcXG4gZW51bSBkc2FfdGFnX3Byb3RvY29sIHtcXG4gXFx0RFNBX1RBR19QUk9UT19OT05FXFx0XFx0PSBEU0FfVEFHX1BST1RPX05PTkVfVkFMVUUsXFxuQEAgLTk1LDYgKzk2LDcgQEAgZW51bSBkc2FfdGFnX3Byb3RvY29sIHtcXG4gXFx0RFNBX1RBR19QUk9UT19NWExfR1NXMVhYXFx0PSBEU0FfVEFHX1BST1RPX01YTF9HU1cxWFhfVkFMVUUsXFxuIFxcdERTQV9UQUdfUFJPVE9fTVhMODYyXFx0XFx0PSBEU0FfVEFHX1BST1RPX01YTDg2Ml9WQUxVRSxcXG4gXFx0RFNBX1RBR19QUk9UT19ORVRDXFx0XFx0PSBEU0FfVEFHX1BST1RPX05FVENfVkFMVUUsXFxuK1xcdERTQV9UQUdfUFJPVE9fS1NaODQ2M1xcdFxcdD0gRFNBX1RBR19QUk9UT19LU1o4NDYzX1ZBTFVFLFxcbiB9O1xcbiBcXG4gc3RydWN0IGRzYV9zd2l0Y2g7XFxuZGlmZiAtLWdpdCBhL25ldC9kc2EvdGFnX2tzei5jIGIvbmV0L2RzYS90YWdfa3N6LmNcXG5pbmRleCA2N2ZhODlmMTAyZTA3MC4uYjRkNzBiYTkzMGRjYmUgMTAwNjQ0XFxuLS0tIGEvbmV0L2RzYS90YWdfa3N6LmNcXG4rKysgYi9uZXQvZHNhL3RhZ19rc3ouY1xcbkBAIC0xMiw2ICsxMiw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwidGFnLmhcXFwiXFxuIFxcbisjZGVmaW5lIEtTWjg0NjNfTkFNRSBcXFwia3N6ODQ2M1xcXCJcXG4gI2RlZmluZSBLU1o4Nzk1X05BTUUgXFxcImtzejg3OTVcXFwiXFxuICNkZWZpbmUgS1NaOTQ3N19OQU1FIFxcXCJrc3o5NDc3XFxcIlxcbiAjZGVmaW5lIEtTWjk4OTNfTkFNRSBcXFwia3N6OTg5M1xcXCJcXG5AQCAtMTAzLDcyICsxMDQsNiBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmtzel9jb21tb25fcmN2KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHJldHVybiBza2I7XFxuIH1cXG4gXFxuLS8qXFxuLSAqIEZvciBJbmdyZXNzIChIb3N0IC1cXHUwMDNlIEtTWjg3OTUpLCAxIGJ5dGUgaXMgYWRkZWQgYmVmb3JlIEZDUy5cXG4tICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuLSAqIERBKDZieXRlcyl8U0EoNmJ5dGVzKXwuLi4ufERhdGEobmJ5dGVzKXx0YWcoMWJ5dGUpfEZDUyg0Ynl0ZXMpXFxuLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbi0gKiB0YWcgOiBlYWNoIGJpdCByZXByZXNlbnRzIHBvcnQgKGVnLCAweDAxPXBvcnQxLCAweDAyPXBvcnQyLCAweDEwPXBvcnQ1KVxcbi0gKlxcbi0gKiBGb3IgRWdyZXNzIChLU1o4Nzk1IC1cXHUwMDNlIEhvc3QpLCAxIGJ5dGUgaXMgYWRkZWQgYmVmb3JlIEZDUy5cXG4tICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuLSAqIERBKDZieXRlcyl8U0EoNmJ5dGVzKXwuLi4ufERhdGEobmJ5dGVzKXx0YWcwKDFieXRlKXxGQ1MoNGJ5dGVzKVxcbi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4tICogdGFnMCA6IHplcm8tYmFzZWQgdmFsdWUgcmVwcmVzZW50cyBwb3J0XFxuLSAqXFx0ICAoZWcsIDB4MD1wb3J0MSwgMHgyPXBvcnQzLCAweDM9cG9ydDQpXFxuLSAqL1xcbi1cXG4tI2RlZmluZSBLU1o4Nzk1X1RBSUxfVEFHX0VHX1BPUlRfTVxcdEdFTk1BU0soMSwgMClcXG4tI2RlZmluZSBLU1o4Nzk1X1RBSUxfVEFHX09WRVJSSURFXFx0QklUKDYpXFxuLSNkZWZpbmUgS1NaODc5NV9UQUlMX1RBR19MT09LVVBcXHRcXHRCSVQoNylcXG4tXFxuLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqa3N6ODc5NV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLXtcXG4tXFx0c3RydWN0IGV0aGhkciAqaGRyO1xcbi1cXHR1OCAqdGFnO1xcbi1cXG4tXFx0aWYgKHNrYi1cXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwgXFx1MDAyNlxcdTAwMjYgc2tiX2NoZWNrc3VtX2hlbHAoc2tiKSkge1xcbi1cXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcdH1cXG4tXFxuLVxcdC8qIFRhZyBlbmNvZGluZyAqL1xcbi1cXHR0YWcgPSBza2JfcHV0KHNrYiwgS1NaX0lOR1JFU1NfVEFHX0xFTik7XFxuLVxcdGhkciA9IHNrYl9ldGhfaGRyKHNrYik7XFxuLVxcbi1cXHQqdGFnID0gZHNhX3htaXRfcG9ydF9tYXNrKHNrYiwgZGV2KTtcXG4tXFx0aWYgKGlzX2xpbmtfbG9jYWxfZXRoZXJfYWRkcihoZHItXFx1MDAzZWhfZGVzdCkpXFxuLVxcdFxcdCp0YWcgfD0gS1NaODc5NV9UQUlMX1RBR19PVkVSUklERTtcXG4tXFxuLVxcdHJldHVybiBza2I7XFxuLX1cXG4tXFxuLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqa3N6ODc5NV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4te1xcbi1cXHR1OCAqdGFnO1xcbi1cXG4tXFx0aWYgKHNrYl9saW5lYXJpemUoc2tiKSkge1xcbi1cXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcdH1cXG4tXFxuLVxcdHRhZyA9IHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtIEtTWl9FR1JFU1NfVEFHX0xFTjtcXG4tXFxuLVxcdHJldHVybiBrc3pfY29tbW9uX3Jjdihza2IsIGRldiwgdGFnWzBdIFxcdTAwMjYgS1NaODc5NV9UQUlMX1RBR19FR19QT1JUX00sXFxuLVxcdFxcdFxcdCAgICAgIEtTWl9FR1JFU1NfVEFHX0xFTik7XFxuLX1cXG4tXFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMga3N6ODc5NV9uZXRkZXZfb3BzID0ge1xcbi1cXHQubmFtZVxcdD0gS1NaODc5NV9OQU1FLFxcbi1cXHQucHJvdG9cXHQ9IERTQV9UQUdfUFJPVE9fS1NaODc5NSxcXG4tXFx0LnhtaXRcXHQ9IGtzejg3OTVfeG1pdCxcXG4tXFx0LnJjdlxcdD0ga3N6ODc5NV9yY3YsXFxuLVxcdC5uZWVkZWRfdGFpbHJvb20gPSBLU1pfSU5HUkVTU19UQUdfTEVOLFxcbi19O1xcbi1cXG4tRFNBX1RBR19EUklWRVIoa3N6ODc5NV9uZXRkZXZfb3BzKTtcXG4tTU9EVUxFX0FMSUFTX0RTQV9UQUdfRFJJVkVSKERTQV9UQUdfUFJPVE9fS1NaODc5NSwgS1NaODc5NV9OQU1FKTtcXG4tXFxuIC8qXFxuICAqIEZvciBJbmdyZXNzIChIb3N0IC1cXHUwMDNlIEtTWjk0NzcpLCAyLzYgYnl0ZXMgYXJlIGFkZGVkIGJlZm9yZSBGQ1MuXFxuICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbkBAIC0yODQsNiArMjE5LDM3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqa3N6X2RlZmVyX3htaXQoc3RydWN0IGRzYV9wb3J0ICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG4gXFxuK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqa3N6X2NvbW1vbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICAgYm9vbCBkb190c3RhbXAsXFxuK1xcdFxcdFxcdFxcdCAgICAgICB1OCBwcmlvLFxcbitcXHRcXHRcXHRcXHQgICAgICAgdTggb3ZlcnJpZGVfbWFzaylcXG4re1xcbitcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3VzZXJfdG9fcG9ydChkZXYpO1xcbitcXHRzdHJ1Y3QgZXRoaGRyICpoZHI7XFxuK1xcdHU4ICp0YWc7XFxuK1xcbitcXHRpZiAoc2tiLVxcdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCBcXHUwMDI2XFx1MDAyNiBza2JfY2hlY2tzdW1faGVscChza2IpKSB7XFxuK1xcdFxcdGtmcmVlX3NrYihza2IpO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbitcXG4rXFx0LyogVGFnIGVuY29kaW5nICovXFxuK1xcdGlmIChkb190c3RhbXApXFxuK1xcdFxcdGtzel94bWl0X3RpbWVzdGFtcChkcCwgc2tiKTtcXG4rXFxuK1xcdHRhZyA9IHNrYl9wdXQoc2tiLCBLU1pfSU5HUkVTU19UQUdfTEVOKTtcXG4rXFx0aGRyID0gc2tiX2V0aF9oZHIoc2tiKTtcXG4rXFxuK1xcdCp0YWcgPSBkc2FfeG1pdF9wb3J0X21hc2soc2tiLCBkZXYpO1xcbitcXHQqdGFnIHw9IHByaW87XFxuK1xcbitcXHRpZiAoaXNfbGlua19sb2NhbF9ldGhlcl9hZGRyKGhkci1cXHUwMDNlaF9kZXN0KSlcXG4rXFx0XFx0KnRhZyB8PSBvdmVycmlkZV9tYXNrO1xcbitcXG4rXFx0cmV0dXJuIGtzel9kZWZlcl94bWl0KGRwLCBza2IpO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmtzejk0NzdfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcbkBAIC0zNTMsMzcgKzMxOSw2OSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIGtzejk0NzdfbmV0ZGV2X29wcyA9IHtcXG4gRFNBX1RBR19EUklWRVIoa3N6OTQ3N19uZXRkZXZfb3BzKTtcXG4gTU9EVUxFX0FMSUFTX0RTQV9UQUdfRFJJVkVSKERTQV9UQUdfUFJPVE9fS1NaOTQ3NywgS1NaOTQ3N19OQU1FKTtcXG4gXFxuLSNkZWZpbmUgS1NaOTg5M19UQUlMX1RBR19QUklPXFx0XFx0R0VOTUFTSyg0LCAzKVxcbi0jZGVmaW5lIEtTWjk4OTNfVEFJTF9UQUdfT1ZFUlJJREVcXHRCSVQoNSlcXG4tI2RlZmluZSBLU1o5ODkzX1RBSUxfVEFHX0xPT0tVUFxcdFxcdEJJVCg2KVxcbisvKlxcbisgKiBGb3IgSW5ncmVzcyAoSG9zdCAtXFx1MDAzZSBLU1o4Nzk1KSwgMSBieXRlIGlzIGFkZGVkIGJlZm9yZSBGQ1MuXFxuKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbisgKiBEQSg2Ynl0ZXMpfFNBKDZieXRlcyl8Li4uLnxEYXRhKG5ieXRlcyl8dGFnKDFieXRlKXxGQ1MoNGJ5dGVzKVxcbisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rICogdGFnIDogZWFjaCBiaXQgcmVwcmVzZW50cyBwb3J0IChlZywgMHgwMT1wb3J0MSwgMHgwMj1wb3J0MiwgMHgxMD1wb3J0NSlcXG4rICpcXG4rICogRm9yIEVncmVzcyAoS1NaODc5NSAtXFx1MDAzZSBIb3N0KSwgMSBieXRlIGlzIGFkZGVkIGJlZm9yZSBGQ1MuXFxuKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbisgKiBEQSg2Ynl0ZXMpfFNBKDZieXRlcyl8Li4uLnxEYXRhKG5ieXRlcyl8dGFnMCgxYnl0ZSl8RkNTKDRieXRlcylcXG4rICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuKyAqIHRhZzAgOiB6ZXJvLWJhc2VkIHZhbHVlIHJlcHJlc2VudHMgcG9ydFxcbisgKlxcdCAgKGVnLCAweDA9cG9ydDEsIDB4Mj1wb3J0MywgMHgzPXBvcnQ0KVxcbisgKi9cXG4gXFxuLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqa3N6OTg5M194bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbisjZGVmaW5lIEtTWjg3OTVfVEFJTF9UQUdfRUdfUE9SVF9NXFx0R0VOTUFTSygxLCAwKVxcbisjZGVmaW5lIEtTWjg3OTVfVEFJTF9UQUdfT1ZFUlJJREVcXHRCSVQoNilcXG4rI2RlZmluZSBLU1o4Nzk1X1RBSUxfVEFHX0xPT0tVUFxcdFxcdEJJVCg3KVxcbitcXG4rc3RhdGljIHN0cnVjdCBza19idWZmICprc3o4Nzk1X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4re1xcbitcXHRyZXR1cm4ga3N6X2NvbW1vbl94bWl0KHNrYiwgZGV2LCBmYWxzZSwgMCwgS1NaODc5NV9UQUlMX1RBR19PVkVSUklERSk7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqa3N6ODc5NV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcbi1cXHR1MTYgcXVldWVfbWFwcGluZyA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpO1xcbi1cXHR1OCBwcmlvID0gbmV0ZGV2X3R4cV90b190YyhkZXYsIHF1ZXVlX21hcHBpbmcpO1xcbi1cXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3VzZXJfdG9fcG9ydChkZXYpO1xcbi1cXHRzdHJ1Y3QgZXRoaGRyICpoZHI7XFxuIFxcdHU4ICp0YWc7XFxuIFxcbi1cXHRpZiAoc2tiLVxcdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCBcXHUwMDI2XFx1MDAyNiBza2JfY2hlY2tzdW1faGVscChza2IpKSB7XFxuK1xcdGlmIChza2JfbGluZWFyaXplKHNrYikpIHtcXG4gXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHR9XFxuIFxcbi1cXHQvKiBUYWcgZW5jb2RpbmcgKi9cXG4tXFx0a3N6X3htaXRfdGltZXN0YW1wKGRwLCBza2IpO1xcbitcXHR0YWcgPSBza2JfdGFpbF9wb2ludGVyKHNrYikgLSBLU1pfRUdSRVNTX1RBR19MRU47XFxuIFxcbi1cXHR0YWcgPSBza2JfcHV0KHNrYiwgS1NaX0lOR1JFU1NfVEFHX0xFTik7XFxuLVxcdGhkciA9IHNrYl9ldGhfaGRyKHNrYik7XFxuK1xcdHJldHVybiBrc3pfY29tbW9uX3Jjdihza2IsIGRldiwgdGFnWzBdIFxcdTAwMjYgS1NaODc5NV9UQUlMX1RBR19FR19QT1JUX00sXFxuK1xcdFxcdFxcdCAgICAgIEtTWl9FR1JFU1NfVEFHX0xFTik7XFxuK31cXG4gXFxuLVxcdCp0YWcgPSBkc2FfeG1pdF9wb3J0X21hc2soc2tiLCBkZXYpO1xcbi1cXHQqdGFnIHw9IEZJRUxEX1BSRVAoS1NaOTg5M19UQUlMX1RBR19QUklPLCBwcmlvKTtcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBkc2FfZGV2aWNlX29wcyBrc3o4Nzk1X25ldGRldl9vcHMgPSB7XFxuK1xcdC5uYW1lXFx0PSBLU1o4Nzk1X05BTUUsXFxuK1xcdC5wcm90b1xcdD0gRFNBX1RBR19QUk9UT19LU1o4Nzk1LFxcbitcXHQueG1pdFxcdD0ga3N6ODc5NV94bWl0LFxcbitcXHQucmN2XFx0PSBrc3o4Nzk1X3JjdixcXG4rXFx0Lm5lZWRlZF90YWlscm9vbSA9IEtTWl9JTkdSRVNTX1RBR19MRU4sXFxuK307XFxuIFxcbi1cXHRpZiAoaXNfbGlua19sb2NhbF9ldGhlcl9hZGRyKGhkci1cXHUwMDNlaF9kZXN0KSlcXG4tXFx0XFx0KnRhZyB8PSBLU1o5ODkzX1RBSUxfVEFHX09WRVJSSURFO1xcbitEU0FfVEFHX0RSSVZFUihrc3o4Nzk1X25ldGRldl9vcHMpO1xcbitNT0RVTEVfQUxJQVNfRFNBX1RBR19EUklWRVIoRFNBX1RBR19QUk9UT19LU1o4Nzk1LCBLU1o4Nzk1X05BTUUpO1xcbiBcXG4tXFx0cmV0dXJuIGtzel9kZWZlcl94bWl0KGRwLCBza2IpO1xcbisjZGVmaW5lIEtTWjk4OTNfVEFJTF9UQUdfUFJJT1xcdFxcdEdFTk1BU0soNCwgMylcXG4rI2RlZmluZSBLU1o5ODkzX1RBSUxfVEFHX09WRVJSSURFXFx0QklUKDUpXFxuKyNkZWZpbmUgS1NaOTg5M19UQUlMX1RBR19MT09LVVBcXHRcXHRCSVQoNilcXG4rXFxuK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqa3N6OTg5M194bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbit7XFxuK1xcdHUxNiBxdWV1ZV9tYXBwaW5nID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7XFxuK1xcdHU4IHByaW8gPSBuZXRkZXZfdHhxX3RvX3RjKGRldiwgcXVldWVfbWFwcGluZyk7XFxuK1xcbitcXHRyZXR1cm4ga3N6X2NvbW1vbl94bWl0KHNrYiwgZGV2LCB0cnVlLFxcbitcXHRcXHRcXHQgICAgICAgRklFTERfUFJFUChLU1o5ODkzX1RBSUxfVEFHX1BSSU8sIHByaW8pLFxcbitcXHRcXHRcXHQgICAgICAgS1NaOTg5M19UQUlMX1RBR19PVkVSUklERSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMga3N6OTg5M19uZXRkZXZfb3BzID0ge1xcbkBAIC0zOTksNiArMzk3LDcwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMga3N6OTg5M19uZXRkZXZfb3BzID0ge1xcbiBEU0FfVEFHX0RSSVZFUihrc3o5ODkzX25ldGRldl9vcHMpO1xcbiBNT0RVTEVfQUxJQVNfRFNBX1RBR19EUklWRVIoRFNBX1RBR19QUk9UT19LU1o5ODkzLCBLU1o5ODkzX05BTUUpO1xcbiBcXG4rI2RlZmluZSBLU1o4NDYzX1RBSUxfVEFHX1BSSU9cXHRcXHRHRU5NQVNLKDQsIDMpXFxuKyNkZWZpbmUgS1NaODQ2M19UQUlMX1RBR19FR19QT1JUX01cXHRHRU5NQVNLKDIsIDApXFxuK1xcbitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmtzejg0NjNfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4re1xcbitcXHR1MTYgcXVldWVfbWFwcGluZyA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpO1xcbitcXHR1OCBwcmlvID0gbmV0ZGV2X3R4cV90b190YyhkZXYsIHF1ZXVlX21hcHBpbmcpO1xcbitcXG4rXFx0cmV0dXJuIGtzel9jb21tb25feG1pdChza2IsIGRldiwgZmFsc2UsXFxuK1xcdFxcdFxcdCAgICAgICBGSUVMRF9QUkVQKEtTWjg0NjNfVEFJTF9UQUdfUFJJTywgcHJpbyksXFxuK1xcdFxcdFxcdCAgICAgICAwKTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBza19idWZmICprc3o4NDYzX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBsZW4gPSBLU1pfRUdSRVNTX1RBR19MRU47XFxuK1xcdHN0cnVjdCBwdHBfaGVhZGVyICpwdHBfaGRyO1xcbitcXHR1bnNpZ25lZCBpbnQgcHRwX2NsYXNzO1xcbitcXHR1bnNpZ25lZCBpbnQgcG9ydDtcXG4rXFx0a3RpbWVfdCB0cztcXG4rXFx0dTggKnRhZztcXG4rXFxuK1xcdGlmIChza2JfbGluZWFyaXplKHNrYikpIHtcXG4rXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuK1xcbitcXHRLU1pfU0tCX0NCKHNrYiktXFx1MDAzZXRzdGFtcCA9IDA7XFxuK1xcbitcXHQvKiBUYWcgZGVjb2RpbmcgKi9cXG4rXFx0dGFnID0gc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gS1NaX0VHUkVTU19UQUdfTEVOO1xcbitcXHRwb3J0ID0gdGFnWzBdIFxcdTAwMjYgS1NaODQ2M19UQUlMX1RBR19FR19QT1JUX007XFxuK1xcbitcXHRfX3NrYl9wdXNoKHNrYiwgRVRIX0hMRU4pO1xcbitcXHRwdHBfY2xhc3MgPSBwdHBfY2xhc3NpZnlfcmF3KHNrYik7XFxuK1xcdF9fc2tiX3B1bGwoc2tiLCBFVEhfSExFTik7XFxuK1xcdGlmIChwdHBfY2xhc3MgPT0gUFRQX0NMQVNTX05PTkUpXFxuK1xcdFxcdGdvdG8gY29tbW9uX3JjdjtcXG4rXFxuK1xcdHB0cF9oZHIgPSBwdHBfcGFyc2VfaGVhZGVyKHNrYiwgcHRwX2NsYXNzKTtcXG4rXFx0aWYgKHB0cF9oZHIpIHtcXG4rXFx0XFx0dHMgPSBrc3pfZGVjb2RlX3RzdGFtcChnZXRfdW5hbGlnbmVkX2JlMzIoXFx1MDAyNnB0cF9oZHItXFx1MDAzZXJlc2VydmVkMikpO1xcbitcXHRcXHRLU1pfU0tCX0NCKHNrYiktXFx1MDAzZXRzdGFtcCA9IHRzO1xcbitcXHRcXHRwdHBfaGRyLVxcdTAwM2VyZXNlcnZlZDIgPSAwO1xcbitcXHR9XFxuK1xcbitjb21tb25fcmN2OlxcbitcXHRyZXR1cm4ga3N6X2NvbW1vbl9yY3Yoc2tiLCBkZXYsIHBvcnQsIGxlbik7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMga3N6ODQ2M19uZXRkZXZfb3BzID0ge1xcbitcXHQubmFtZVxcdD0gS1NaODQ2M19OQU1FLFxcbitcXHQucHJvdG9cXHQ9IERTQV9UQUdfUFJPVE9fS1NaODQ2MyxcXG4rXFx0LnhtaXRcXHQ9IGtzejg0NjNfeG1pdCxcXG4rXFx0LnJjdlxcdD0ga3N6ODQ2M19yY3YsXFxuK1xcdC5jb25uZWN0ID0ga3N6X2Nvbm5lY3QsXFxuK1xcdC5kaXNjb25uZWN0ID0ga3N6X2Rpc2Nvbm5lY3QsXFxuK1xcdC5uZWVkZWRfdGFpbHJvb20gPSBLU1pfSU5HUkVTU19UQUdfTEVOLFxcbit9O1xcbitcXG4rRFNBX1RBR19EUklWRVIoa3N6ODQ2M19uZXRkZXZfb3BzKTtcXG4rTU9EVUxFX0FMSUFTX0RTQV9UQUdfRFJJVkVSKERTQV9UQUdfUFJPVE9fS1NaODQ2MywgS1NaODQ2M19OQU1FKTtcXG4rXFxuIC8qIEZvciB4bWl0LCAyLzYgYnl0ZXMgYXJlIGFkZGVkIGJlZm9yZSBGQ1MuXFxuICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbiAgKiBEQSg2Ynl0ZXMpfFNBKDZieXRlcyl8Li4uLnxEYXRhKG5ieXRlcyl8dHMoNGJ5dGVzKXx0YWcwKDFieXRlKXx0YWcxKDFieXRlKXxcXG5AQCAtNDcxLDYgKzUzMyw3IEBAIERTQV9UQUdfRFJJVkVSKGxhbjkzN3hfbmV0ZGV2X29wcyk7XFxuIE1PRFVMRV9BTElBU19EU0FfVEFHX0RSSVZFUihEU0FfVEFHX1BST1RPX0xBTjkzN1gsIExBTjkzN1hfTkFNRSk7XFxuIFxcbiBzdGF0aWMgc3RydWN0IGRzYV90YWdfZHJpdmVyICpkc2FfdGFnX2RyaXZlcl9hcnJheVtdID0ge1xcbitcXHRcXHUwMDI2RFNBX1RBR19EUklWRVJfTkFNRShrc3o4NDYzX25ldGRldl9vcHMpLFxcbiBcXHRcXHUwMDI2RFNBX1RBR19EUklWRVJfTkFNRShrc3o4Nzk1X25ldGRldl9vcHMpLFxcbiBcXHRcXHUwMDI2RFNBX1RBR19EUklWRVJfTkFNRShrc3o5NDc3X25ldGRldl9vcHMpLFxcbiBcXHRcXHUwMDI2RFNBX1RBR19EUklWRVJfTkFNRShrc3o5ODkzX25ldGRldl9vcHMpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMzowNTozMy4wODg0MDEzOTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0NDUzMzk1NDMwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgTWljcm9jaGlwIEtTWjg0NjMgRFNBIHN3aXRjaCwgaW5jbHVkaW5nIElSUSwgUFRQLCBhbmQgYSBuZXcgRFNBIHRhZyBwcm90b2NvbC4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciBmb3IgYW4gU1BJL01ESU8tY29ubmVjdGVkIHN3aXRjaCB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBXaXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSwgdGhlIGRyaXZlciBjYW5ub3QgcHJvYmUsIGFuZCB0aGUgYWRkZWQgY29kZSAoaW5jbHVkaW5nIHRoZSBEU0EgdGFnZ2VyKSBpcyB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAzZmFlYjNhMGYwYWI0MjlkNjRjYmUzOTRjZmU5YWZkMGRiMzY4ZjNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAyMzowNTozMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmNcbmluZGV4IGM0Yzc2OTAyOGEyMGM5Li45NDFhZTlmNjZmNzBiYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguY1xuQEAgLTM2LDYgKzM2LDEzIEBAXG4gI2luY2x1ZGUgXCJrc3o4X3JlZy5oXCJcbiAjaW5jbHVkZSBcImtzejguaFwiXG4gXG4rLypcbisgKiBXZSB1c2Ugb25seSB0aGUgaGlnaC1ieXRlIChzbyBvZGQgYWRkcmVzc2VzKSBvZiB0aGUgMTYtYml0cyByZWdpc3RlcnMgdG8gZml0XG4rICogaW4gdGhlIGNvbW1vbiBJUlEgZnJhbWV3b3JrXG4rICovXG4rI2RlZmluZSBLU1o4NDYzX1JFR19JU1JcdFx0XHQweDE5MVxuKyNkZWZpbmUgS1NaODQ2M19SRUdfSUVSXHRcdFx0MHgxOTNcbitcbiAvKiBrc3o4OHgzX2RyaXZlX3N0cmVuZ3RocyAtIERyaXZlIHN0cmVuZ3RoIG1hcHBpbmcgZm9yIEtTWjg4NjMsIEtTWjg4NzMsIC4uXG4gICpcdFx0XHQgICAgIHZhcmlhbnRzLlxuICAqIFRoaXMgdmFsdWVzIGFyZSBkb2N1bWVudGVkIGluIEtTWjg4NzMgYW5kIEtTWjg4NjMgZGF0YXNoZWV0cy5cbkBAIC0xODEsNiArMTg4LDY5IEBAIHN0YXRpYyBpbnQga3N6OF9wbWVfcHdyaXRlOChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgaW50IG9mZnNldCwgdTggZGF0XG4gXHRyZXR1cm4ga3N6OF9pbmRfd3JpdGU4KGRldiwgdGFibGUsICh1OCkob2Zmc2V0KSwgZGF0YSk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGtzejg0NjNfaXJxX21hc2soc3RydWN0IGlycV9kYXRhICpkKVxuK3tcbitcdHN0cnVjdCBrc3pfaXJxICpraXJxID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7XG4rXG4rXHRraXJxLVx1MDAzZW1hc2tlZCBcdTAwMjY9IH5CSVQoZC1cdTAwM2Vod2lycSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGtzejg0NjNfaXJxX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpXG4re1xuK1x0c3RydWN0IGtzel9pcnEgKmtpcnEgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTtcbitcbitcdGtpcnEtXHUwMDNlbWFza2VkIHw9IEJJVChkLVx1MDAzZWh3aXJxKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfY2hpcCBrc3o4NDYzX2lycV9jaGlwID0ge1xuK1x0Lm5hbWVcdFx0XHQ9IFwia3N6ODQ2My1pcnFcIixcbitcdC5pcnFfbWFza1x0XHQ9IGtzejg0NjNfaXJxX21hc2ssXG4rXHQuaXJxX3VubWFza1x0XHQ9IGtzejg0NjNfaXJxX3VubWFzayxcbitcdC5pcnFfYnVzX2xvY2tcdFx0PSBrc3pfaXJxX2J1c19sb2NrLFxuK1x0LmlycV9idXNfc3luY191bmxvY2tcdD0ga3N6X2lycV9idXNfc3luY191bmxvY2ssXG4rfTtcbitcbitzdGF0aWMgaW50IGtzejg0NjNfaXJxX2RvbWFpbl9tYXAoc3RydWN0IGlycV9kb21haW4gKmQsXG4rXHRcdFx0XHQgIHVuc2lnbmVkIGludCBpcnEsIGlycV9od19udW1iZXJfdCBod2lycSlcbit7XG4rXHRpcnFfc2V0X2NoaXBfZGF0YShpcnEsIGQtXHUwMDNlaG9zdF9kYXRhKTtcbitcdGlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsIFx1MDAyNmtzejg0NjNfaXJxX2NoaXAsIGhhbmRsZV9sZXZlbF9pcnEpO1xuK1x0aXJxX3NldF9ub3Byb2JlKGlycSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBrc3o4NDYzX2lycV9kb21haW5fb3BzID0ge1xuK1x0Lm1hcFx0PSBrc3o4NDYzX2lycV9kb21haW5fbWFwLFxuK1x0LnhsYXRlXHQ9IGlycV9kb21haW5feGxhdGVfdHdvY2VsbCxcbit9O1xuK1xuK3N0YXRpYyBpbnQga3N6ODQ2M19naXJxX3NldHVwKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4re1xuK1x0c3RydWN0IGtzel9pcnEgKmdpcnEgPSBcdTAwMjZkZXYtXHUwMDNlZ2lycTtcbitcbitcdGdpcnEtXHUwMDNlbmlycXMgPSA4O1xuK1x0Z2lycS1cdTAwM2VyZWdfbWFzayA9IEtTWjg0NjNfUkVHX0lFUjtcbitcdGdpcnEtXHUwMDNlcmVnX3N0YXR1cyA9IEtTWjg0NjNfUkVHX0lTUjtcbitcdGdpcnEtXHUwMDNlbWFza2VkID0gMDtcbitcdHNucHJpbnRmKGdpcnEtXHUwMDNlbmFtZSwgc2l6ZW9mKGdpcnEtXHUwMDNlbmFtZSksIFwia3N6ODQ2My1naXJxXCIpO1xuK1xuK1x0Z2lycS1cdTAwM2VpcnFfbnVtID0gZGV2LVx1MDAzZWlycTtcbitcbitcdHJldHVybiBrc3pfaXJxX2NvbW1vbl9zZXR1cChkZXYsIGdpcnEsIFx1MDAyNmtzejg0NjNfaXJxX2RvbWFpbl9vcHMpO1xuK31cbitcbitzdGF0aWMgaW50IGtzejg0NjNfcmVzZXRfc3dpdGNoKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4re1xuK1x0a3N6X2NmZyhkZXYsIEtTWjg0NjNfUkVHX1NXX1JFU0VULFxuK1x0XHRLU1o4NDYzX0dMT0JBTF9TT0ZUV0FSRV9SRVNFVCB8IEtTWjg0NjNfUFRQX1NPRlRXQVJFX1JFU0VULFxuK1x0XHR0cnVlKTtcbitcdGtzel9jZmcoZGV2LCBLU1o4NDYzX1JFR19TV19SRVNFVCxcbitcdFx0S1NaODQ2M19HTE9CQUxfU09GVFdBUkVfUkVTRVQgfCBLU1o4NDYzX1BUUF9TT0ZUV0FSRV9SRVNFVCxcbitcdFx0ZmFsc2UpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQga3N6OF9yZXNldF9zd2l0Y2goc3RydWN0IGtzel9kZXZpY2UgKmRldilcbiB7XG4gXHRpZiAoa3N6X2lzX2tzejg4eDMoZGV2KSkge1xuQEAgLTE4OSwxMSArMjU5LDYgQEAgc3RhdGljIGludCBrc3o4X3Jlc2V0X3N3aXRjaChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuIFx0XHRcdEtTWjg4NjNfR0xPQkFMX1NPRlRXQVJFX1JFU0VUIHwgS1NaODg2M19QQ1NfUkVTRVQsIHRydWUpO1xuIFx0XHRrc3pfY2ZnKGRldiwgS1NaODg2M19SRUdfU1dfUkVTRVQsXG4gXHRcdFx0S1NaODg2M19HTE9CQUxfU09GVFdBUkVfUkVTRVQgfCBLU1o4ODYzX1BDU19SRVNFVCwgZmFsc2UpO1xuLVx0fSBlbHNlIGlmIChrc3pfaXNfa3N6ODQ2MyhkZXYpKSB7XG4tXHRcdGtzel9jZmcoZGV2LCBLU1o4NDYzX1JFR19TV19SRVNFVCxcbi1cdFx0XHRLU1o4NDYzX0dMT0JBTF9TT0ZUV0FSRV9SRVNFVCwgdHJ1ZSk7XG4tXHRcdGtzel9jZmcoZGV2LCBLU1o4NDYzX1JFR19TV19SRVNFVCxcbi1cdFx0XHRLU1o4NDYzX0dMT0JBTF9TT0ZUV0FSRV9SRVNFVCwgZmFsc2UpO1xuIFx0fSBlbHNlIHtcbiBcdFx0LyogcmVzZXQgc3dpdGNoICovXG4gXHRcdGtzel93cml0ZTgoZGV2LCBSRUdfUE9XRVJfTUFOQUdFTUVOVF8xLFxuQEAgLTIwMjYsNiArMjA5MSw1MCBAQCBzdGF0aWMgdm9pZCBrc3o4OHgzX2NvbmZpZ19ybWlpX2NsayhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuIFx0XHRLU1o4OFgzX1BPUlQzX1JNSUlfQ0xLX0lOVEVSTkFMLCBybWlpX2Nsa19pbnRlcm5hbCk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGtzejg0NjNfY29uZmlnX2NwdV9wb3J0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbit7XG4rXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBrc3pfcG9ydCAqcDtcbitcdHU4IGZpYmVyX3BvcnRzID0gMDtcbitcdGNvbnN0IHUzMiAqbWFza3M7XG4rXHRjb25zdCB1MTYgKnJlZ3M7XG4rXHRpbnQgaTtcbitcbitcdG1hc2tzID0gZGV2LVx1MDAzZWluZm8tXHUwMDNlbWFza3M7XG4rXHRyZWdzID0gZGV2LVx1MDAzZWluZm8tXHUwMDNlcmVncztcbitcbitcdGtzel9jZmcoZGV2LCByZWdzW1NfVEFJTF9UQUdfQ1RSTF0sIG1hc2tzW1NXX1RBSUxfVEFHX0VOQUJMRV0sIHRydWUpO1xuK1xuK1x0a3N6OF9wb3J0X3NldHVwKGRldiwgZGV2LVx1MDAzZWNwdV9wb3J0LCB0cnVlKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldi1cdTAwM2VwaHlfcG9ydF9jbnQ7IGkrKylcbitcdFx0a3N6X3BvcnRfc3RwX3N0YXRlX3NldChkcywgaSwgQlJfU1RBVEVfRElTQUJMRUQpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGV2LVx1MDAzZXBoeV9wb3J0X2NudDsgaSsrKSB7XG4rXHRcdHAgPSBcdTAwMjZkZXYtXHUwMDNlcG9ydHNbaV07XG4rXHRcdGtzel9wb3J0X2NmZyhkZXYsIGksIHJlZ3NbUF9TVFBfQ1RSTF0sIFBPUlRfRk9SQ0VfRkxPV19DVFJMLFxuK1x0XHRcdCAgICAgcC1cdTAwM2VmaWJlcik7XG4rXHRcdGlmIChwLVx1MDAzZWZpYmVyKVxuK1x0XHRcdGZpYmVyX3BvcnRzIHw9ICgxIFx1MDAzY1x1MDAzYyBpKTtcbitcdH1cbitcbitcdC8qIFNldHVwIGZpYmVyIHBvcnRzLiAqL1xuK1x0aWYgKGZpYmVyX3BvcnRzKSB7XG4rXHRcdGZpYmVyX3BvcnRzIFx1MDAyNj0gMztcbitcdFx0cmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSwgS1NaODQ2M19SRUdfQ0ZHX0NUUkwsXG4rXHRcdFx0XHQgICBmaWJlcl9wb3J0cyBcdTAwM2NcdTAwM2MgUE9SVF9DT1BQRVJfTU9ERV9TLFxuK1x0XHRcdFx0ICAgMCk7XG4rXHRcdHJlZ21hcF91cGRhdGVfYml0cyhrc3pfcmVnbWFwXzE2KGRldiksIEtTWjg0NjNfUkVHX0RTUF9DVFJMXzYsXG4rXHRcdFx0XHQgICBDT1BQRVJfUkVDRUlWRV9BREpVU1RNRU5ULCAwKTtcbitcdH1cbitcbitcdC8qIFR1cm4gb2ZmIFBUUCBmdW5jdGlvbiBhcyB0aGUgc3dpdGNoIGVuYWJsZXMgaXQgYnkgZGVmYXVsdCAqL1xuK1x0cmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSwgS1NaODQ2M19QVFBfTVNHX0NPTkYxLFxuK1x0XHRcdCAgIFBUUF9FTkFCTEUsIDApO1xuK1x0cmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSwgS1NaODQ2M19QVFBfQ0xLX0NUUkwsXG4rXHRcdFx0ICAgUFRQX0NMS19FTkFCTEUsIDApO1xuK31cbitcbiBzdGF0aWMgdm9pZCBrc3o4X2NvbmZpZ19jcHVfcG9ydChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4ge1xuIFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG5AQCAtMjAzMyw3ICsyMTQyLDYgQEAgc3RhdGljIHZvaWQga3N6OF9jb25maWdfY3B1X3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0Y29uc3QgdTMyICptYXNrcztcbiBcdGNvbnN0IHUxNiAqcmVncztcbiBcdHU4IHJlbW90ZTtcbi1cdHU4IGZpYmVyX3BvcnRzID0gMDtcbiBcdGludCBpO1xuIFxuIFx0bWFza3MgPSBkZXYtXHUwMDNlaW5mby1cdTAwM2VtYXNrcztcbkBAIC0yMDY0LDMyICsyMTcyLDYgQEAgc3RhdGljIHZvaWQga3N6OF9jb25maWdfY3B1X3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0XHRlbHNlXG4gXHRcdFx0a3N6X3BvcnRfY2ZnKGRldiwgaSwgcmVnc1tQX1NUUF9DVFJMXSxcbiBcdFx0XHRcdCAgICAgUE9SVF9GT1JDRV9GTE9XX0NUUkwsIGZhbHNlKTtcbi1cdFx0aWYgKHAtXHUwMDNlZmliZXIpXG4tXHRcdFx0ZmliZXJfcG9ydHMgfD0gKDEgXHUwMDNjXHUwMDNjIGkpO1xuLVx0fVxuLVx0aWYgKGtzel9pc19rc3o4NDYzKGRldikpIHtcbi1cdFx0LyogU2V0dXAgZmliZXIgcG9ydHMuICovXG4tXHRcdGlmIChmaWJlcl9wb3J0cykge1xuLVx0XHRcdGZpYmVyX3BvcnRzIFx1MDAyNj0gMztcbi1cdFx0XHRyZWdtYXBfdXBkYXRlX2JpdHMoa3N6X3JlZ21hcF8xNihkZXYpLFxuLVx0XHRcdFx0XHQgICBLU1o4NDYzX1JFR19DRkdfQ1RSTCxcbi1cdFx0XHRcdFx0ICAgZmliZXJfcG9ydHMgXHUwMDNjXHUwMDNjIFBPUlRfQ09QUEVSX01PREVfUyxcbi1cdFx0XHRcdFx0ICAgMCk7XG4tXHRcdFx0cmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfMTYoZGV2KSxcbi1cdFx0XHRcdFx0ICAgS1NaODQ2M19SRUdfRFNQX0NUUkxfNixcbi1cdFx0XHRcdFx0ICAgQ09QUEVSX1JFQ0VJVkVfQURKVVNUTUVOVCwgMCk7XG4tXHRcdH1cbi1cbi1cdFx0LyogVHVybiBvZmYgUFRQIGZ1bmN0aW9uIGFzIHRoZSBzd2l0Y2gncyBwcm9wcmlldGFyeSB3YXkgb2Zcbi1cdFx0ICogaGFuZGxpbmcgdGltZXN0YW1wIGlzIG5vdCBzdXBwb3J0ZWQgaW4gY3VycmVudCBMaW51eCBQVFBcbi1cdFx0ICogc3RhY2sgaW1wbGVtZW50YXRpb24uXG4tXHRcdCAqL1xuLVx0XHRyZWdtYXBfdXBkYXRlX2JpdHMoa3N6X3JlZ21hcF8xNihkZXYpLFxuLVx0XHRcdFx0ICAgS1NaODQ2M19QVFBfTVNHX0NPTkYxLFxuLVx0XHRcdFx0ICAgUFRQX0VOQUJMRSwgMCk7XG4tXHRcdHJlZ21hcF91cGRhdGVfYml0cyhrc3pfcmVnbWFwXzE2KGRldiksXG4tXHRcdFx0XHQgICBLU1o4NDYzX1BUUF9DTEtfQ1RSTCxcbi1cdFx0XHRcdCAgIFBUUF9DTEtfRU5BQkxFLCAwKTtcbiBcdH1cbiB9XG4gXG5AQCAtMjMwMCw2ICsyMzgyLDE1MCBAQCBzdGF0aWMgdm9pZCBrc3o4OHh4X3JfbWliX3N0YXRzNjQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpXG4gXHRzcGluX3VubG9jayhcdTAwMjZtaWItXHUwMDNlc3RhdHM2NF9sb2NrKTtcbiB9XG4gXG4rc3RhdGljIGludCBrc3o4NDYzX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbit7XG4rXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbitcdHUxNiBzdG9ybV9tYXNrLCBzdG9ybV9yYXRlO1xuK1x0c3RydWN0IGtzel9wb3J0ICpwO1xuK1x0Y29uc3QgdTE2ICpyZWdzO1xuK1x0aW50IGksIHJldDtcbitcbitcdHJlZ3MgPSBkZXYtXHUwMDNlaW5mby1cdTAwM2VyZWdzO1xuK1xuK1x0ZGV2LVx1MDAzZXZsYW5fY2FjaGUgPSBkZXZtX2tjYWxsb2MoZGV2LVx1MDAzZWRldiwgc2l6ZW9mKHN0cnVjdCB2bGFuX3RhYmxlKSxcbitcdFx0XHRcdCAgICAgICBkZXYtXHUwMDNlaW5mby1cdTAwM2VudW1fdmxhbnMsIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFkZXYtXHUwMDNldmxhbl9jYWNoZSlcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRyZXQgPSBrc3o4NDYzX3Jlc2V0X3N3aXRjaChkZXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKGRzLVx1MDAzZWRldiwgXCJmYWlsZWQgdG8gcmVzZXQgc3dpdGNoXFxuXCIpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0Lyogc2V0IGJyb2FkY2FzdCBzdG9ybSBwcm90ZWN0aW9uIDEwJSByYXRlICovXG4rXHRzdG9ybV9tYXNrID0gQlJPQURDQVNUX1NUT1JNX1JBVEU7XG4rXHRzdG9ybV9yYXRlID0gKEJST0FEQ0FTVF9TVE9STV9WQUxVRSAqIEJST0FEQ0FTVF9TVE9STV9QUk9UX1JBVEUpIC8gMTAwO1xuK1x0c3Rvcm1fbWFzayA9IHN3YWIxNihzdG9ybV9tYXNrKTtcbitcdHN0b3JtX3JhdGUgPSBzd2FiMTYoc3Rvcm1fcmF0ZSk7XG4rXHRyZWdtYXBfdXBkYXRlX2JpdHMoa3N6X3JlZ21hcF8xNihkZXYpLCByZWdzW1NfQlJPQURDQVNUX0NUUkxdLFxuK1x0XHRcdCAgIHN0b3JtX21hc2ssIHN0b3JtX3JhdGUpO1xuK1xuK1x0a3N6ODQ2M19jb25maWdfY3B1X3BvcnQoZHMpO1xuK1xuK1x0a3N6OF9lbmFibGVfc3RwX2FkZHIoZGV2KTtcbitcbitcdGRzLVx1MDAzZW51bV90eF9xdWV1ZXMgPSBkZXYtXHUwMDNlaW5mby1cdTAwM2VudW1fdHhfcXVldWVzO1xuK1xuK1x0cmVnbWFwX3VwZGF0ZV9iaXRzKGtzel9yZWdtYXBfOChkZXYpLCByZWdzW1NfTVVMVElDQVNUX0NUUkxdLFxuK1x0XHRcdCAgIE1VTFRJQ0FTVF9TVE9STV9ESVNBQkxFLCBNVUxUSUNBU1RfU1RPUk1fRElTQUJMRSk7XG4rXG4rXHRrc3pfaW5pdF9taWJfdGltZXIoZGV2KTtcbitcbitcdGRzLVx1MDAzZWNvbmZpZ3VyZV92bGFuX3doaWxlX25vdF9maWx0ZXJpbmcgPSBmYWxzZTtcbitcdGRzLVx1MDAzZWRzY3BfcHJpb19tYXBwaW5nX2lzX2dsb2JhbCA9IHRydWU7XG4rXHRkcy1cdTAwM2VtdHVfZW5mb3JjZW1lbnRfaW5ncmVzcyA9IHRydWU7XG4rXG4rXHQvKiBXZSByZWx5IG9uIHNvZnR3YXJlIHVudGFnZ2luZyBvbiB0aGUgQ1BVIHBvcnQsIHNvIHRoYXQgd2VcbitcdCAqIGNhbiBzdXBwb3J0IGJvdGggdGFnZ2VkIGFuZCB1bnRhZ2dlZCBWTEFOc1xuK1x0ICovXG4rXHRkcy1cdTAwM2V1bnRhZ19icmlkZ2VfcHZpZCA9IHRydWU7XG4rXG4rXHQvKiBWTEFOIGZpbHRlcmluZyBpcyBwYXJ0bHkgY29udHJvbGxlZCBieSB0aGUgZ2xvYmFsIFZMQU5cbitcdCAqIEVuYWJsZSBmbGFnXG4rXHQgKi9cbitcdGRzLVx1MDAzZXZsYW5fZmlsdGVyaW5nX2lzX2dsb2JhbCA9IHRydWU7XG4rXG4rXHQvKiBFbmFibGUgYXV0b21hdGljIGZhc3QgYWdpbmcgd2hlbiBsaW5rIGNoYW5nZWQgZGV0ZWN0ZWQuICovXG4rXHRrc3pfY2ZnKGRldiwgU19MSU5LX0FHSU5HX0NUUkwsIFNXX0xJTktfQVVUT19BR0lORywgdHJ1ZSk7XG4rXG4rXHQvKiBFbmFibGUgYWdncmVzc2l2ZSBiYWNrIG9mZiBhbGdvcml0aG0gaW4gaGFsZiBkdXBsZXggbW9kZS4gKi9cbitcdHJldCA9IGtzel9ybXc4KGRldiwgUkVHX1NXX0NUUkxfMSwgU1dfQUdHUl9CQUNLT0ZGLCBTV19BR0dSX0JBQ0tPRkYpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qXG4rXHQgKiBNYWtlIHN1cmUgdW5pY2FzdCBWTEFOIGJvdW5kYXJ5IGlzIHNldCBhcyBkZWZhdWx0IGFuZFxuK1x0ICogZW5hYmxlIG5vIGV4Y2Vzc2l2ZSBjb2xsaXNpb24gZHJvcC5cbitcdCAqL1xuK1x0cmV0ID0ga3N6X3JtdzgoZGV2LCBSRUdfU1dfQ1RSTF8yLFxuK1x0XHQgICAgICAgVU5JQ0FTVF9WTEFOX0JPVU5EQVJZIHwgTk9fRVhDX0NPTExJU0lPTl9EUk9QLFxuK1x0XHQgICAgICAgVU5JQ0FTVF9WTEFOX0JPVU5EQVJZIHwgTk9fRVhDX0NPTExJU0lPTl9EUk9QKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRrc3pfY2ZnKGRldiwgU19SRVBMQUNFX1ZJRF9DVFJMLCBTV19SRVBMQUNFX1ZJRCwgZmFsc2UpO1xuK1xuK1x0a3N6X2NmZyhkZXYsIFNfTUlSUk9SX0NUUkwsIFNXX01JUlJPUl9SWF9UWCwgZmFsc2UpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgKGRldi1cdTAwM2VpbmZvLVx1MDAzZW51bV92bGFucyAvIDQpOyBpKyspXG4rXHRcdGtzejhfcl92bGFuX2VudHJpZXMoZGV2LCBpKTtcbitcbitcdC8qIFN0YXJ0IHdpdGggbGVhcm5pbmcgZGlzYWJsZWQgb24gc3RhbmRhbG9uZSB1c2VyIHBvcnRzLCBhbmQgZW5hYmxlZFxuK1x0ICogb24gdGhlIENQVSBwb3J0LiBJbiBsYWNrIG9mIG90aGVyIGZpbmVyIG1lY2hhbmlzbXMsIGxlYXJuaW5nIG9uIHRoZVxuK1x0ICogQ1BVIHBvcnQgd2lsbCBhdm9pZCBmbG9vZGluZyBicmlkZ2UgbG9jYWwgYWRkcmVzc2VzIG9uIHRoZSBuZXR3b3JrXG4rXHQgKiBpbiBzb21lIGNhc2VzLlxuK1x0ICovXG4rXHRwID0gXHUwMDI2ZGV2LVx1MDAzZXBvcnRzW2Rldi1cdTAwM2VjcHVfcG9ydF07XG4rXHRwLVx1MDAzZWxlYXJuaW5nID0gdHJ1ZTtcbitcbitcdGlmIChkZXYtXHUwMDNlaXJxIFx1MDAzZSAwKSB7XG4rXHRcdHJldCA9IGtzejg0NjNfZ2lycV9zZXR1cChkZXYpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdHJldCA9IGtzejg0NjNfcHRwX2lycV9zZXR1cChkcyk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byBmcmVlX2dpcnE7XG4rXG4rXHRcdHJldCA9IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoZHMpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcIkZhaWxlZCB0byByZWdpc3RlciBQVFAgY2xvY2s6ICVkXFxuXCIsXG4rXHRcdFx0XHRyZXQpO1xuK1x0XHRcdGdvdG8gZnJlZV9wdHBfaXJxO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXQgPSBrc3pfbWRpb19yZWdpc3RlcihkZXYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMCkge1xuK1x0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsIFwiZmFpbGVkIHRvIHJlZ2lzdGVyIHRoZSBtZGlvXCIpO1xuK1x0XHRnb3RvIHB0cF9jbG9ja191bnJlZ2lzdGVyO1xuK1x0fVxuK1xuK1x0cmV0ID0ga3N6X2RjYl9pbml0KGRldik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIHB0cF9jbG9ja191bnJlZ2lzdGVyO1xuK1xuK1x0Lyogc3RhcnQgc3dpdGNoICovXG4rXHRyZWdtYXBfdXBkYXRlX2JpdHMoa3N6X3JlZ21hcF84KGRldiksIHJlZ3NbU19TVEFSVF9DVFJMXSxcbitcdFx0XHQgICBTV19TVEFSVCwgU1dfU1RBUlQpO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rcHRwX2Nsb2NrX3VucmVnaXN0ZXI6XG4rXHRpZiAoZGV2LVx1MDAzZWlycSBcdTAwM2UgMClcbitcdFx0a3N6X3B0cF9jbG9ja191bnJlZ2lzdGVyKGRzKTtcbitmcmVlX3B0cF9pcnE6XG4rXHRpZiAoZGV2LVx1MDAzZWlycSBcdTAwM2UgMClcbitcdFx0a3N6ODQ2M19wdHBfaXJxX2ZyZWUoZHMpO1xuK2ZyZWVfZ2lycTpcbitcdGlmIChkZXYtXHUwMDNlaXJxIFx1MDAzZSAwKVxuK1x0XHRrc3pfaXJxX2ZyZWUoXHUwMDI2ZGV2LVx1MDAzZWdpcnEpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIHZvaWQga3N6ODQ2M190ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4re1xuK1x0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4rXG4rXHRpZiAoZGV2LVx1MDAzZWlycSBcdTAwM2UgMCkge1xuK1x0XHRrc3pfcHRwX2Nsb2NrX3VucmVnaXN0ZXIoZHMpO1xuK1x0XHRrc3o4NDYzX3B0cF9pcnFfZnJlZShkcyk7XG4rXHRcdGtzel9pcnFfZnJlZShcdTAwMjZkZXYtXHUwMDNlZ2lycSk7XG4rXHR9XG4rfVxuK1xuIC8qKlxuICAqIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhfd3JpdGUoKSAtIFNldCB0aGUgZHJpdmUgc3RyZW5ndGggY29uZmlndXJhdGlvbiBmb3JcbiAgKlx0XHRcdFx0ICAgIEtTWjg4NjMgY29tcGF0aWJsZSBjaGlwIHZhcmlhbnRzLlxuQEAgLTI0NDUsMTAgKzI2NzEsNiBAQCBzdGF0aWMgaW50IGtzejhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0Lyogc2V0IGJyb2FkY2FzdCBzdG9ybSBwcm90ZWN0aW9uIDEwJSByYXRlICovXG4gXHRzdG9ybV9tYXNrID0gQlJPQURDQVNUX1NUT1JNX1JBVEU7XG4gXHRzdG9ybV9yYXRlID0gKEJST0FEQ0FTVF9TVE9STV9WQUxVRSAqIEJST0FEQ0FTVF9TVE9STV9QUk9UX1JBVEUpIC8gMTAwO1xuLVx0aWYgKGtzel9pc19rc3o4NDYzKGRldikpIHtcbi1cdFx0c3Rvcm1fbWFzayA9IHN3YWIxNihzdG9ybV9tYXNrKTtcbi1cdFx0c3Rvcm1fcmF0ZSA9IHN3YWIxNihzdG9ybV9yYXRlKTtcbi1cdH1cbiBcdHJlZ21hcF91cGRhdGVfYml0cyhrc3pfcmVnbWFwXzE2KGRldiksIHJlZ3NbU19CUk9BRENBU1RfQ1RSTF0sXG4gXHRcdFx0ICAgc3Rvcm1fbWFzaywgc3Rvcm1fcmF0ZSk7XG4gXG5AQCAtMjQ5OSw3ICsyNzIxLDcgQEAgc3RhdGljIGludCBrc3o4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcbiBcdGtzel9jZmcoZGV2LCBTX01JUlJPUl9DVFJMLCBTV19NSVJST1JfUlhfVFgsIGZhbHNlKTtcbiBcbi1cdGlmICgha3N6X2lzX2tzejg4eDMoZGV2KSBcdTAwMjZcdTAwMjYgIWtzel9pc19rc3o4NDYzKGRldikpXG4rXHRpZiAoIWtzel9pc19rc3o4OHgzKGRldikpXG4gXHRcdGtzel9jZmcoZGV2LCBSRUdfU1dfQ1RSTF8xOSwgU1dfSU5TX1RBR19FTkFCTEUsIHRydWUpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgKGRldi1cdTAwM2VpbmZvLVx1MDAzZW51bV92bGFucyAvIDQpOyBpKyspXG5AQCAtMjYyMyw2ICsyODQ1LDkgQEAgc3RhdGljIHUzMiBrc3o4X2dldF9wb3J0X2FkZHIoaW50IHBvcnQsIGludCBvZmZzZXQpXG4gXG4gc3RhdGljIHUzMiBrc3o4NDYzX2dldF9wb3J0X2FkZHIoaW50IHBvcnQsIGludCBvZmZzZXQpXG4ge1xuK1x0aWYgKG9mZnNldCBcdTAwM2U9IEtTWjg0NjNfUFRQX0NMS19DVFJMKVxuK1x0XHRyZXR1cm4gb2Zmc2V0ICsgMHgyMCAqIHBvcnQ7XG4rXG4gXHRyZXR1cm4gb2Zmc2V0ICsgMHgxOCAqIHBvcnQ7XG4gfVxuIFxuQEAgLTI3NTUsNyArMjk4MCw3IEBAIHN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2wga3N6ODQ2M19nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbiBcdFx0XHRcdFx0XHQgICAgICBpbnQgcG9ydCxcbiBcdFx0XHRcdFx0XHQgICAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXApXG4ge1xuLVx0cmV0dXJuIERTQV9UQUdfUFJPVE9fS1NaOTg5MztcbitcdHJldHVybiBEU0FfVEFHX1BST1RPX0tTWjg0NjM7XG4gfVxuIFxuIHN0YXRpYyBpbnQga3N6ODQ2M19jb25uZWN0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5AQCAtMjc2Myw3ICsyOTg4LDcgQEAgc3RhdGljIGludCBrc3o4NDYzX2Nvbm5lY3RfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbiB7XG4gXHRzdHJ1Y3Qga3N6X3RhZ2dlcl9kYXRhICp0YWdnZXJfZGF0YTtcbiBcbi1cdGlmIChwcm90byAhPSBEU0FfVEFHX1BST1RPX0tTWjk4OTMpXG4rXHRpZiAocHJvdG8gIT0gRFNBX1RBR19QUk9UT19LU1o4NDYzKVxuIFx0XHRyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDtcbiBcbiBcdHRhZ2dlcl9kYXRhID0ga3N6X3RhZ2dlcl9kYXRhKGRzKTtcbkBAIC0yODg5LDggKzMxMTQsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2Rldl9vcHMga3N6ODh4eF9kZXZfb3BzID0ge1xuIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBrc3o4NDYzX3N3aXRjaF9vcHMgPSB7XG4gXHQuZ2V0X3RhZ19wcm90b2NvbFx0PSBrc3o4NDYzX2dldF90YWdfcHJvdG9jb2wsXG4gXHQuY29ubmVjdF90YWdfcHJvdG9jb2wgICA9IGtzejg0NjNfY29ubmVjdF90YWdfcHJvdG9jb2wsXG4tXHQuc2V0dXBcdFx0XHQ9IGtzejhfc2V0dXAsXG4tXHQudGVhcmRvd25cdFx0PSBrc3pfdGVhcmRvd24sXG4rXHQuc2V0dXBcdFx0XHQ9IGtzejg0NjNfc2V0dXAsXG4rXHQudGVhcmRvd25cdFx0PSBrc3o4NDYzX3RlYXJkb3duLFxuIFx0LnBoeV9yZWFkXHRcdD0ga3N6ODQ2M19waHlfcmVhZDE2LFxuIFx0LnBoeV93cml0ZVx0XHQ9IGtzejg0NjNfcGh5X3dyaXRlMTYsXG4gXHQucGh5bGlua19nZXRfY2Fwc1x0PSBrc3o4X3BoeWxpbmtfZ2V0X2NhcHMsXG5AQCAtMjkxOCw5ICszMTQzLDkgQEAgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGtzejg0NjNfc3dpdGNoX29wcyA9IHtcbiBcdC5wb3J0X21heF9tdHVcdFx0PSBrc3o4OHh4X21heF9tdHUsXG4gXHQuc3VzcGVuZFx0XHQ9IGtzel9zdXNwZW5kLFxuIFx0LnJlc3VtZVx0XHRcdD0ga3N6X3Jlc3VtZSxcbi1cdC5nZXRfdHNfaW5mb1x0XHQ9IGtzel9nZXRfdHNfaW5mbyxcbitcdC5nZXRfdHNfaW5mb1x0XHQ9IGtzejg0NjNfZ2V0X3RzX2luZm8sXG4gXHQucG9ydF9od3RzdGFtcF9nZXRcdD0ga3N6X2h3dHN0YW1wX2dldCxcbi1cdC5wb3J0X2h3dHN0YW1wX3NldFx0PSBrc3pfaHd0c3RhbXBfc2V0LFxuK1x0LnBvcnRfaHd0c3RhbXBfc2V0XHQ9IGtzejg0NjNfaHd0c3RhbXBfc2V0LFxuIFx0LnBvcnRfdHh0c3RhbXBcdFx0PSBrc3pfcG9ydF90eHRzdGFtcCxcbiBcdC5wb3J0X3J4dHN0YW1wXHRcdD0ga3N6X3BvcnRfcnh0c3RhbXAsXG4gXHQucG9ydF9zZXR1cF90Y1x0XHQ9IGtzejhfc2V0dXBfdGMsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4X3JlZy5oIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4X3JlZy5oXG5pbmRleCA5ODFhYjQ0MWQ5YjcxOS4uNmJjNTExZGExZjdkZGQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejhfcmVnLmhcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OF9yZWcuaFxuQEAgLTc4Niw2ICs3ODYsNyBAQFxuICNkZWZpbmUgS1NaODQ2M19SRUdfU1dfUkVTRVRcdFx0MHgxMjZcbiBcbiAjZGVmaW5lIEtTWjg0NjNfR0xPQkFMX1NPRlRXQVJFX1JFU0VUXHRCSVQoMClcbisjZGVmaW5lIEtTWjg0NjNfUFRQX1NPRlRXQVJFX1JFU0VUXHRCSVQoMilcbiBcbiAjZGVmaW5lIEtTWjg0NjNfUFRQX0NMS19DVFJMXHRcdDB4NjAwXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uY1xuaW5kZXggNjdhYjZkZGI5ZTUzZjIuLmZmMWJlNTQwYjU0NmZhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmNcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jXG5AQCAtMjQxOSwxNCArMjQxOSwxNCBAQCBzdGF0aWMgdm9pZCBrc3pfaXJxX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpXG4gXHRraXJxLVx1MDAzZW1hc2tlZCBcdTAwMjY9IH5CSVQoZC1cdTAwM2Vod2lycSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGtzel9pcnFfYnVzX2xvY2soc3RydWN0IGlycV9kYXRhICpkKVxuK3ZvaWQga3N6X2lycV9idXNfbG9jayhzdHJ1Y3QgaXJxX2RhdGEgKmQpXG4ge1xuIFx0c3RydWN0IGtzel9pcnEgKmtpcnEgID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmtpcnEtXHUwMDNlZGV2LVx1MDAzZWxvY2tfaXJxKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQga3N6X2lycV9idXNfc3luY191bmxvY2soc3RydWN0IGlycV9kYXRhICpkKVxuK3ZvaWQga3N6X2lycV9idXNfc3luY191bmxvY2soc3RydWN0IGlycV9kYXRhICpkKVxuIHtcbiBcdHN0cnVjdCBrc3pfaXJxICpraXJxICA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpO1xuIFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGtpcnEtXHUwMDNlZGV2O1xuQEAgLTI1MDQsMTQgKzI1MDQsMTUgQEAgc3RhdGljIGlycXJldHVybl90IGtzel9pcnFfdGhyZWFkX2ZuKGludCBpcnEsIHZvaWQgKmRldl9pZClcbiBcdHJldHVybiAobmhhbmRsZWQgXHUwMDNlIDAgPyBJUlFfSEFORExFRCA6IElSUV9OT05FKTtcbiB9XG4gXG4tc3RhdGljIGludCBrc3pfaXJxX2NvbW1vbl9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBzdHJ1Y3Qga3N6X2lycSAqa2lycSlcbitpbnQga3N6X2lycV9jb21tb25fc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgc3RydWN0IGtzel9pcnEgKmtpcnEsXG4rXHRcdFx0IGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyAqb3BzKVxuIHtcbiBcdGludCByZXQsIG47XG4gXG4gXHRraXJxLVx1MDAzZWRldiA9IGRldjtcbiBcbi1cdGtpcnEtXHUwMDNlZG9tYWluID0gaXJxX2RvbWFpbl9jcmVhdGVfc2ltcGxlKGRldl9md25vZGUoZGV2LVx1MDAzZWRldiksIGtpcnEtXHUwMDNlbmlycXMsIDAsXG4tXHRcdFx0XHRcdFx0XHUwMDI2a3N6X2lycV9kb21haW5fb3BzLCBraXJxKTtcbitcdGtpcnEtXHUwMDNlZG9tYWluID0gaXJxX2RvbWFpbl9jcmVhdGVfc2ltcGxlKGRldl9md25vZGUoZGV2LVx1MDAzZWRldiksXG4rXHRcdFx0XHRcdFx0a2lycS1cdTAwM2VuaXJxcywgMCwgb3BzLCBraXJxKTtcbiBcdGlmICgha2lycS1cdTAwM2Vkb21haW4pXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTI1NDMsNyArMjU0NCw3IEBAIGludCBrc3pfZ2lycV9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuIFxuIFx0Z2lycS1cdTAwM2VpcnFfbnVtID0gZGV2LVx1MDAzZWlycTtcbiBcbi1cdHJldHVybiBrc3pfaXJxX2NvbW1vbl9zZXR1cChkZXYsIGdpcnEpO1xuK1x0cmV0dXJuIGtzel9pcnFfY29tbW9uX3NldHVwKGRldiwgZ2lycSwgXHUwMDI2a3N6X2lycV9kb21haW5fb3BzKTtcbiB9XG4gXG4gaW50IGtzel9waXJxX3NldHVwKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHApXG5AQCAtMjU2MCw3ICsyNTYxLDcgQEAgaW50IGtzel9waXJxX3NldHVwKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHApXG4gXHRpZiAoIXBpcnEtXHUwMDNlaXJxX251bSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRyZXR1cm4ga3N6X2lycV9jb21tb25fc2V0dXAoZGV2LCBwaXJxKTtcbitcdHJldHVybiBrc3pfaXJxX2NvbW1vbl9zZXR1cChkZXYsIHBpcnEsIFx1MDAyNmtzel9pcnFfZG9tYWluX29wcyk7XG4gfVxuIFxuIHZvaWQga3N6X3RlYXJkb3duKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oXG5pbmRleCBhY2FmNzBlNmYzOTNjOS4uY2JlOTg0OTQ1NzhjMzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmhcbkBAIC04LDYgKzgsNyBAQFxuICNkZWZpbmUgX19LU1pfQ09NTU9OX0hcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaXJxZG9tYWluLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wY3MvcGNzLXhwY3MuaFx1MDAzZVxuQEAgLTE5Myw2ICsxOTQsNyBAQCBzdHJ1Y3Qga3N6X3BvcnQge1xuIFx0c3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgdHN0YW1wX2NvbmZpZztcbiBcdGJvb2wgaHd0c190eF9lbjtcbiBcdGJvb2wgaHd0c19yeF9lbjtcbitcdGJvb2wgbGFzdF90eF9pc19wZGVsYXlyZXNwO1xuIFx0c3RydWN0IGtzel9pcnEgcHRwaXJxO1xuIFx0c3RydWN0IGtzel9wdHBfaXJxIHB0cG1zZ19pcnFbM107XG4gXHRrdGltZV90IHRzdGFtcF9tc2c7XG5AQCAtNTA4LDYgKzUxMCwxMCBAQCBpbnQga3N6X3N3X21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWdudW0sIHUxNiB2YWwpO1xuIGludCBrc3pfcGFyZW50X21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IHJlZ251bSk7XG4gaW50IGtzel9wYXJlbnRfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbCk7XG4gaW50IGtzel9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpO1xuK3ZvaWQga3N6X2lycV9idXNfbG9jayhzdHJ1Y3QgaXJxX2RhdGEgKmQpO1xuK3ZvaWQga3N6X2lycV9idXNfc3luY191bmxvY2soc3RydWN0IGlycV9kYXRhICpkKTtcbitpbnQga3N6X2lycV9jb21tb25fc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgc3RydWN0IGtzel9pcnEgKmtpcnEsXG4rXHRcdFx0IGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyAqb3BzKTtcbiBpbnQga3N6X3BpcnFfc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggcCk7XG4gaW50IGtzel9naXJxX3NldHVwKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpO1xuIHZvaWQga3N6X2lycV9mcmVlKHN0cnVjdCBrc3pfaXJxICpraXJxKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jXG5pbmRleCA4Yjk4MDM5MzIwYWRkYS4uOWQ4Yjc4Njg3ZjUzMTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuY1xuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmNcbkBAIC0zMiw2ICszMiwxNSBAQFxuIFxuICNkZWZpbmUgS1NaX1BUUF9JTlRfU1RBUlQgMTNcbiBcbisvKlxuKyAqIFBUUCBpbnRlcnJ1cHQgYml0IGlzIHRoZSBiaXQgMTIgb2YgdGhlIDE2LWJpdHMgSVNSL0lFUi4gQnV0IGtzel9jb21tb24uYyBvbmx5XG4rICogYWNjZXNzZXMgdGhlIGhpZ2gtYnl0ZSBvZiB0aGVzZSByZWdpc3RlcnMgc28gdGhlIFBUUCBpbnRlcnJ1cHQgYml0IGJlY29tZXMgNC5cbisgKi9cbisjZGVmaW5lIEtTWjg0NjNfU1JDX1BUUF9JTlRcdFx0NFxuKyNkZWZpbmUgS1NaODQ2M19QVFBfUE9SVDFfSU5UX1NUQVJUXHQxMlxuKyNkZWZpbmUgS1NaODQ2M19QVFBfUE9SVDJfSU5UX1NUQVJUXHQxNFxuKyNkZWZpbmUgS1NaODQ2M19QVFBfSU5UX1NUQVJUXHRcdEtTWjg0NjNfUFRQX1BPUlQxX0lOVF9TVEFSVFxuK1xuIHN0YXRpYyBpbnQga3N6X3B0cF90b3VfZ3BpbyhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuIHtcbiBcdGludCByZXQ7XG5AQCAtMjg4LDYgKzI5NywzMSBAQCBzdGF0aWMgaW50IGtzel9wdHBfZW5hYmxlX21vZGUoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbiBcdFx0XHQgdGFnX2VuID8gUFRQX0VOQUJMRSA6IDApO1xuIH1cbiBcbitpbnQga3N6ODQ2M19nZXRfdHNfaW5mbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuK1x0XHRcdHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICp0cylcbit7XG4rXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhO1xuK1xuK1x0cHRwX2RhdGEgPSBcdTAwMjZkZXYtXHUwMDNlcHRwX2RhdGE7XG4rXG4rXHRpZiAoIXB0cF9kYXRhLVx1MDAzZWNsb2NrKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdHRzLVx1MDAzZXNvX3RpbWVzdGFtcGluZyA9IFNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUgfFxuK1x0XHRcdCAgICAgIFNPRl9USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkUgfFxuK1x0XHRcdCAgICAgIFNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFO1xuK1xuK1x0dHMtXHUwMDNldHhfdHlwZXMgPSBCSVQoSFdUU1RBTVBfVFhfT0ZGKSB8IEJJVChIV1RTVEFNUF9UWF9PTik7XG4rXG4rXHR0cy1cdTAwM2VyeF9maWx0ZXJzID0gQklUKEhXVFNUQU1QX0ZJTFRFUl9OT05FKSB8XG4rXHRcdFx0IEJJVChIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX0VWRU5UKTtcbitcbitcdHRzLVx1MDAzZXBoY19pbmRleCA9IHB0cF9jbG9ja19pbmRleChwdHBfZGF0YS1cdTAwM2VjbG9jayk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLyogVGhlIGZ1bmN0aW9uIGlzIHJldHVybiBiYWNrIHRoZSBjYXBhYmlsaXR5IG9mIHRpbWVzdGFtcGluZyBmZWF0dXJlIHdoZW5cbiAgKiByZXF1ZXN0ZWQgdGhyb3VnaCBldGh0b29sIC1UIFx1MDAzY2ludGVyZmFjZVx1MDAzZSB1dGlsaXR5XG4gICovXG5AQCAtMzMyLDYgKzM2Niw3MiBAQCBpbnQga3N6X2h3dHN0YW1wX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQga3N6ODQ2M19zZXRfaHd0c3RhbXBfY29uZmlnKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IGtzel9wb3J0ICpwcnQsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZylcbit7XG4rXHRjb25zdCB1MTYgKnJlZ3MgPSBkZXYtXHUwMDNlaW5mby1cdTAwM2VyZWdzO1xuK1x0aW50IHJldDtcbitcbitcdGlmIChjb25maWctXHUwMDNlZmxhZ3MpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0c3dpdGNoIChjb25maWctXHUwMDNldHhfdHlwZSkge1xuK1x0Y2FzZSBIV1RTVEFNUF9UWF9PRkY6XG4rXHRcdHBydC1cdTAwM2VwdHBtc2dfaXJxW0tTWjg0NjNfU1lOQ19NU0ddLnRzX2VuICA9IGZhbHNlO1xuK1x0XHRwcnQtXHUwMDNlcHRwbXNnX2lycVtLU1o4NDYzX1hEUkVRX1BEUkVTX01TR10udHNfZW4gPSBmYWxzZTtcbitcdFx0cHJ0LVx1MDAzZWh3dHNfdHhfZW4gPSBmYWxzZTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEhXVFNUQU1QX1RYX09OOlxuK1x0XHRwcnQtXHUwMDNlcHRwbXNnX2lycVtLU1o4NDYzX1NZTkNfTVNHXS50c19lbiAgPSB0cnVlO1xuK1x0XHRwcnQtXHUwMDNlcHRwbXNnX2lycVtLU1o4NDYzX1hEUkVRX1BEUkVTX01TR10udHNfZW4gPSB0cnVlO1xuK1x0XHRwcnQtXHUwMDNlaHd0c190eF9lbiA9IHRydWU7XG4rXG4rXHRcdHJldCA9IGtzel9ybXcxNihkZXYsIHJlZ3NbUFRQX01TR19DT05GMV0sIFBUUF8xU1RFUCwgMCk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVSQU5HRTtcbitcdH1cbitcbitcdHN3aXRjaCAoY29uZmlnLVx1MDAzZXJ4X2ZpbHRlcikge1xuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfTk9ORTpcbitcdFx0cHJ0LVx1MDAzZWh3dHNfcnhfZW4gPSBmYWxzZTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfRVZFTlQ6XG4rXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfU1lOQzpcbitcdFx0Y29uZmlnLVx1MDAzZXJ4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfRVZFTlQ7XG4rXHRcdHBydC1cdTAwM2Vod3RzX3J4X2VuID0gdHJ1ZTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRjb25maWctXHUwMDNlcnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX05PTkU7XG4rXHRcdHJldHVybiAtRVJBTkdFO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGtzel9wdHBfZW5hYmxlX21vZGUoZGV2KTtcbit9XG4rXG4raW50IGtzejg0NjNfaHd0c3RhbXBfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4rXHRcdFx0IHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcsXG4rXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbit7XG4rXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBrc3pfcG9ydCAqcHJ0O1xuK1x0aW50IHJldDtcbitcbitcdHBydCA9IFx1MDAyNmRldi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcbitcdHJldCA9IGtzejg0NjNfc2V0X2h3dHN0YW1wX2NvbmZpZyhkZXYsIHBydCwgY29uZmlnKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRwcnQtXHUwMDNldHN0YW1wX2NvbmZpZyA9ICpjb25maWc7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBrc3pfc2V0X2h3dHN0YW1wX2NvbmZpZyhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0ICAgc3RydWN0IGtzel9wb3J0ICpwcnQsXG4gXHRcdFx0XHQgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY29uZmlnKVxuQEAgLTU2Miw2ICs2NjIsMzEgQEAgc3RhdGljIHZvaWQga3N6X3B0cF90eHRzdGFtcF9za2Ioc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiBcdHNrYl9jb21wbGV0ZV90eF90aW1lc3RhbXAoc2tiLCBcdTAwMjZod3RzdGFtcHMpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBrc3o4NDYzX3NldF9wZGVsYXlyZXNwX2ZsYWcoc3RydWN0IGtzel9wb3J0ICpwcnQsXG4rXHRcdFx0XHRcdHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IHB0cF9oZWFkZXIgKmhkcjtcbitcdHVuc2lnbmVkIGludCB0eXBlO1xuK1x0dTggcHRwX21zZ190eXBlO1xuK1xuK1x0aWYgKCFrc3pfaXNfa3N6ODQ2MyhwcnQtXHUwMDNla3N6X2RldikpXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChza2JfbGluZWFyaXplKHNrYikpXG4rXHRcdHJldHVybjtcbitcbitcdHR5cGUgPSBwdHBfY2xhc3NpZnlfcmF3KHNrYik7XG4rXHRpZiAodHlwZSA9PSBQVFBfQ0xBU1NfTk9ORSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0aGRyID0gcHRwX3BhcnNlX2hlYWRlcihza2IsIHR5cGUpO1xuK1x0aWYgKCFoZHIpXG4rXHRcdHJldHVybjtcbitcbitcdHB0cF9tc2dfdHlwZSA9IHB0cF9nZXRfbXNndHlwZShoZHIsIHR5cGUpO1xuK1x0cHJ0LVx1MDAzZWxhc3RfdHhfaXNfcGRlbGF5cmVzcCA9IChwdHBfbXNnX3R5cGUgPT0gUFRQX01TR1RZUEVfUERFTEFZX1JFU1ApO1xuK31cbitcbiB2b2lkIGtzel9wb3J0X2RlZmVycmVkX3htaXQoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaylcbiB7XG4gXHRzdHJ1Y3Qga3N6X2RlZmVycmVkX3htaXRfd29yayAqeG1pdF93b3JrID0gd29ya190b194bWl0X3dvcmsod29yayk7XG5AQCAtNTc4LDYgKzcwMyw4IEBAIHZvaWQga3N6X3BvcnRfZGVmZXJyZWRfeG1pdChzdHJ1Y3Qga3RocmVhZF93b3JrICp3b3JrKVxuIFxuIFx0cmVpbml0X2NvbXBsZXRpb24oXHUwMDI2cHJ0LVx1MDAzZXRzdGFtcF9tc2dfY29tcCk7XG4gXG4rXHRrc3o4NDYzX3NldF9wZGVsYXlyZXNwX2ZsYWcocHJ0LCBza2IpO1xuK1xuIFx0ZHNhX2VucXVldWVfc2tiKHNrYiwgc2tiLVx1MDAzZWRldik7XG4gXG4gXHRrc3pfcHRwX3R4dHN0YW1wX3NrYihkZXYsIHBydCwgY2xvbmUpO1xuQEAgLTk0NCw4ICsxMDcxLDkgQEAgaW50IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0LyogQ3VycmVudGx5IG9ubHkgUDJQIG1vZGUgaXMgc3VwcG9ydGVkLiBXaGVuIDgwMl8xQVMgYml0IGlzIHNldCwgaXRcbiBcdCAqIGZvcndhcmRzIGFsbCBQVFAgcGFja2V0cyB0byBob3N0IHBvcnQgYW5kIG5vbmUgdG8gb3RoZXIgcG9ydHMuXG4gXHQgKi9cbi1cdHJldCA9IGtzel9ybXcxNihkZXYsIHJlZ3NbUFRQX01TR19DT05GMV0sIFBUUF9UQ19QMlAgfCBQVFBfODAyXzFBUyxcbi1cdFx0XHRQVFBfVENfUDJQIHwgUFRQXzgwMl8xQVMpO1xuK1x0cmV0ID0ga3N6X3JtdzE2KGRldiwgcmVnc1tQVFBfTVNHX0NPTkYxXSxcbitcdFx0XHRQVFBfVENfUDJQIHwgUFRQXzgwMl8xQVMgfCBQVFBfRVRIX0VOQUJMRSxcbitcdFx0XHRQVFBfVENfUDJQIHwgUFRQXzgwMl8xQVMgfCBQVFBfRVRIX0VOQUJMRSk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTk2OSw3ICsxMDk3LDIyIEBAIHZvaWQga3N6X3B0cF9jbG9ja191bnJlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcbiBzdGF0aWMgaW50IGtzel9yZWFkX3RzKHN0cnVjdCBrc3pfcG9ydCAqcG9ydCwgdTE2IHJlZywgdTMyICp0cylcbiB7XG4tXHRyZXR1cm4ga3N6X3JlYWQzMihwb3J0LVx1MDAzZWtzel9kZXYsIHJlZywgdHMpO1xuK1x0dTE2IHRzX3JlZyA9IHJlZztcbitcbitcdC8qKlxuK1x0ICogT24gS1NaODQ2MyBEUkVRIGFuZCBEUkVTUCB0aW1lc3RhbXBzIHNoYXJlIG9uZSBpbnRlcnJ1cHQgbGluZVxuK1x0ICogc28gd2UgaGF2ZSB0byBjaGVjayB0aGUgbmF0dXJlIG9mIHRoZSBsYXRlc3QgZXZlbnQgc2VudCB0byBrbm93XG4rXHQgKiB3aGVyZSB0aGUgdGltZXN0YW1wIGlzIGxvY2F0ZWRcbitcdCAqL1xuK1x0aWYgKGtzel9pc19rc3o4NDYzKHBvcnQtXHUwMDNla3N6X2RldikpIHtcbitcdFx0Y29uc3Qgc3RydWN0IGtzel9kZXZfb3BzICpvcHMgPSBwb3J0LVx1MDAzZWtzel9kZXYtXHUwMDNlZGV2X29wcztcbitcbitcdFx0aWYgKHBvcnQtXHUwMDNlbGFzdF90eF9pc19wZGVsYXlyZXNwIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgdHNfcmVnID09IG9wcy1cdTAwM2VnZXRfcG9ydF9hZGRyKHBvcnQtXHUwMDNlbnVtLCBLU1o4NDYzX1JFR19QT1JUX0RSRVFfVFMpKVxuK1x0XHRcdHRzX3JlZyArPSBLU1o4NDYzX0RSRVNQX1RTX09GRlNFVDtcbitcdH1cbitcbitcdHJldHVybiBrc3pfcmVhZDMyKHBvcnQtXHUwMDNla3N6X2RldiwgdHNfcmVnLCB0cyk7XG4gfVxuIFxuIHN0YXRpYyBpcnFyZXR1cm5fdCBrc3pfcHRwX21zZ190aHJlYWRfZm4oaW50IGlycSwgdm9pZCAqZGV2X2lkKVxuQEAgLTExMjksNiArMTI3MiwxMjggQEAgc3RhdGljIGludCBrc3pfcHRwX21zZ19pcnFfc2V0dXAoc3RydWN0IGtzel9wb3J0ICpwb3J0LCB1OCBuKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rc3RhdGljIGludCBrc3o4NDYzX3B0cF9wb3J0X2lycV9zZXR1cChzdHJ1Y3Qga3N6X2lycSAqcHRwaXJxLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGtzel9wb3J0ICpwb3J0LCBpbnQgaHdfaXJxKVxuK3tcbitcdHUxNiB0c19yZWdbXSA9IHtLU1o4NDYzX1JFR19QT1JUX1NZTkNfVFMsIEtTWjg0NjNfUkVHX1BPUlRfRFJFUV9UU307XG4rXHRzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG5hbWVbXSA9IHtcInN5bmMtbXNnXCIsIFwiZGVsYXktbXNnXCJ9O1xuK1x0Y29uc3Qgc3RydWN0IGtzel9kZXZfb3BzICpvcHMgPSBwb3J0LVx1MDAzZWtzel9kZXYtXHUwMDNlZGV2X29wcztcbitcdHN0cnVjdCBrc3pfcHRwX2lycSAqcHRwbXNnX2lycTtcbitcdGludCByZXQ7XG4rXHRpbnQgaTtcbitcbitcdGluaXRfY29tcGxldGlvbihcdTAwMjZwb3J0LVx1MDAzZXRzdGFtcF9tc2dfY29tcCk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAyOyBpKyspIHtcbitcdFx0cHRwbXNnX2lycSA9IFx1MDAyNnBvcnQtXHUwMDNlcHRwbXNnX2lycVtpXTtcbitcdFx0cHRwbXNnX2lycS1cdTAwM2VudW0gPSBpcnFfY3JlYXRlX21hcHBpbmcocHRwaXJxLVx1MDAzZWRvbWFpbixcbitcdFx0XHRcdFx0XHQgICAgIGh3X2lycSArIGkpO1xuK1x0XHRpZiAoIXB0cG1zZ19pcnEtXHUwMDNlbnVtKSB7XG4rXHRcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0XHRnb3RvIHJlbGVhc2VfbXNnX2lycTtcbitcdFx0fVxuK1xuK1x0XHRwdHBtc2dfaXJxLVx1MDAzZXBvcnQgPSBwb3J0O1xuK1x0XHRwdHBtc2dfaXJxLVx1MDAzZXRzX3JlZyA9IG9wcy1cdTAwM2VnZXRfcG9ydF9hZGRyKHBvcnQtXHUwMDNlbnVtLCB0c19yZWdbaV0pO1xuK1xuK1x0XHRzdHJzY3B5KHB0cG1zZ19pcnEtXHUwMDNlbmFtZSwgbmFtZVtpXSk7XG4rXG4rXHRcdHJldCA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHB0cG1zZ19pcnEtXHUwMDNlbnVtLCBOVUxMLFxuK1x0XHRcdFx0XHQgICBrc3pfcHRwX21zZ190aHJlYWRfZm4sIElSUUZfT05FU0hPVCxcbitcdFx0XHRcdFx0ICAgcHRwbXNnX2lycS1cdTAwM2VuYW1lLCBwdHBtc2dfaXJxKTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdGlycV9kaXNwb3NlX21hcHBpbmcocHRwbXNnX2lycS1cdTAwM2VudW0pO1xuK1x0XHRcdGdvdG8gcmVsZWFzZV9tc2dfaXJxO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbitcbityZWxlYXNlX21zZ19pcnE6XG4rXHR3aGlsZSAoaS0tKVxuK1x0XHRrc3pfcHRwX21zZ19pcnFfZnJlZShwb3J0LCBpKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGtzejg0NjNfcHRwX3BvcnRfaXJxX3RlYXJkb3duKHN0cnVjdCBrc3pfcG9ydCAqcG9ydClcbit7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDI7IGkrKylcbitcdFx0a3N6X3B0cF9tc2dfaXJxX2ZyZWUocG9ydCwgaSk7XG4rfVxuK1xuK2ludCBrc3o4NDYzX3B0cF9pcnFfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuK3tcbitcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuK1x0c3RydWN0IGtzel9wb3J0ICpwb3J0MSwgKnBvcnQyO1xuK1x0c3RydWN0IGtzel9pcnEgKnB0cGlycTtcbitcdGludCByZXQ7XG4rXG4rXHRwb3J0MSA9IFx1MDAyNmRldi1cdTAwM2Vwb3J0c1swXTtcbitcdHBvcnQyID0gXHUwMDI2ZGV2LVx1MDAzZXBvcnRzWzFdO1xuK1x0cHRwaXJxID0gXHUwMDI2cG9ydDEtXHUwMDNlcHRwaXJxO1xuK1xuK1x0cHRwaXJxLVx1MDAzZWlycV9udW0gPSBpcnFfZmluZF9tYXBwaW5nKGRldi1cdTAwM2VnaXJxLmRvbWFpbixcbitcdFx0XHRcdFx0ICAgS1NaODQ2M19TUkNfUFRQX0lOVCk7XG4rXHRpZiAoIXB0cGlycS1cdTAwM2VpcnFfbnVtKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHB0cGlycS1cdTAwM2VkZXYgPSBkZXY7XG4rXHRwdHBpcnEtXHUwMDNlbmlycXMgPSA0O1xuK1x0cHRwaXJxLVx1MDAzZXJlZ19tYXNrID0gS1NaODQ2M19QVFBfVFNfSUVSO1xuK1x0cHRwaXJxLVx1MDAzZXJlZ19zdGF0dXMgPSBLU1o4NDYzX1BUUF9UU19JU1I7XG4rXHRwdHBpcnEtXHUwMDNlaXJxMF9vZmZzZXQgPSBLU1o4NDYzX1BUUF9JTlRfU1RBUlQ7XG4rXHRzbnByaW50ZihwdHBpcnEtXHUwMDNlbmFtZSwgc2l6ZW9mKHB0cGlycS1cdTAwM2VuYW1lKSwgXCJwdHAtaXJxXCIpO1xuK1xuK1x0cHRwaXJxLVx1MDAzZWRvbWFpbiA9IGlycV9kb21haW5fY3JlYXRlX2xpbmVhcihkZXZfZndub2RlKGRldi1cdTAwM2VkZXYpLFxuK1x0XHRcdFx0XHRcdCAgcHRwaXJxLVx1MDAzZW5pcnFzLFxuK1x0XHRcdFx0XHRcdCAgXHUwMDI2a3N6X3B0cF9pcnFfZG9tYWluX29wcyxcbitcdFx0XHRcdFx0XHQgIHB0cGlycSk7XG4rXHRpZiAoIXB0cGlycS1cdTAwM2Vkb21haW4pXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cmV0ID0ga3N6ODQ2M19wdHBfcG9ydF9pcnFfc2V0dXAocHRwaXJxLCBwb3J0MSxcbitcdFx0XHRcdFx0IEtTWjg0NjNfUFRQX1BPUlQxX0lOVF9TVEFSVCAtIEtTWjg0NjNfUFRQX0lOVF9TVEFSVCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIHJlbGVhc2VfZG9tYWluO1xuK1xuK1x0cmV0ID0ga3N6ODQ2M19wdHBfcG9ydF9pcnFfc2V0dXAocHRwaXJxLCBwb3J0MixcbitcdFx0XHRcdFx0IEtTWjg0NjNfUFRQX1BPUlQyX0lOVF9TVEFSVCAtIEtTWjg0NjNfUFRQX0lOVF9TVEFSVCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGZyZWVfcG9ydDE7XG4rXG4rXHRyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShwdHBpcnEtXHUwMDNlaXJxX251bSwgTlVMTCwga3N6X3B0cF9pcnFfdGhyZWFkX2ZuLFxuK1x0XHRcdFx0ICAgSVJRRl9PTkVTSE9ULCBwdHBpcnEtXHUwMDNlbmFtZSwgcHRwaXJxKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZnJlZV9wb3J0MjtcbitcbitcdHJldHVybiAwO1xuK1xuK2ZyZWVfcG9ydDI6XG4rXHRrc3o4NDYzX3B0cF9wb3J0X2lycV90ZWFyZG93bihwb3J0Mik7XG4rZnJlZV9wb3J0MTpcbitcdGtzejg0NjNfcHRwX3BvcnRfaXJxX3RlYXJkb3duKHBvcnQxKTtcbityZWxlYXNlX2RvbWFpbjpcbitcdGlycV9kb21haW5fcmVtb3ZlKHB0cGlycS1cdTAwM2Vkb21haW4pO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rdm9pZCBrc3o4NDYzX3B0cF9pcnFfZnJlZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4re1xuK1x0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4rXHRzdHJ1Y3Qga3N6X3BvcnQgKnBvcnQxID0gXHUwMDI2ZGV2LVx1MDAzZXBvcnRzWzBdO1xuK1x0c3RydWN0IGtzel9wb3J0ICpwb3J0MiA9IFx1MDAyNmRldi1cdTAwM2Vwb3J0c1sxXTtcbitcdHN0cnVjdCBrc3pfaXJxICpwdHBpcnEgPSBcdTAwMjZwb3J0MS1cdTAwM2VwdHBpcnE7XG4rXG4rXHRmcmVlX2lycShwdHBpcnEtXHUwMDNlaXJxX251bSwgcHRwaXJxKTtcbitcdGtzejg0NjNfcHRwX3BvcnRfaXJxX3RlYXJkb3duKHBvcnQyKTtcbitcdGtzejg0NjNfcHRwX3BvcnRfaXJxX3RlYXJkb3duKHBvcnQxKTtcbitcdGlycV9kb21haW5fcmVtb3ZlKHB0cGlycS1cdTAwM2Vkb21haW4pO1xuK31cbitcbiBpbnQga3N6X3B0cF9pcnFfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCB1OCBwKVxuIHtcbiBcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmhcbmluZGV4IDMwODZlNTE5YjFiNjQxLi43MDY3ZWM5YmQxZTZmMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaFxuQEAgLTM5LDE3ICszOSwyNCBAQCB2b2lkIGtzel9wdHBfY2xvY2tfdW5yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xuIFxuIGludCBrc3pfZ2V0X3RzX2luZm8oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0ICAgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICp0cyk7XG4raW50IGtzejg0NjNfZ2V0X3RzX2luZm8oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbitcdFx0XHRzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqdHMpO1xuIGludCBrc3pfaHd0c3RhbXBfZ2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdCAgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZyk7XG4gaW50IGtzel9od3RzdGFtcF9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0ICAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY29uZmlnLFxuIFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4raW50IGtzejg0NjNfaHd0c3RhbXBfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4rXHRcdFx0IHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcsXG4rXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4gdm9pZCBrc3pfcG9ydF90eHRzdGFtcChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiB2b2lkIGtzel9wb3J0X2RlZmVycmVkX3htaXQoc3RydWN0IGt0aHJlYWRfd29yayAqd29yayk7XG4gYm9vbCBrc3pfcG9ydF9yeHRzdGFtcChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHQgICAgICAgdW5zaWduZWQgaW50IHR5cGUpO1xuIGludCBrc3pfcHRwX2lycV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIHU4IHApO1xuIHZvaWQga3N6X3B0cF9pcnFfZnJlZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIHU4IHApO1xuK2ludCBrc3o4NDYzX3B0cF9pcnFfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcbit2b2lkIGtzejg0NjNfcHRwX2lycV9mcmVlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XG4gXG4gI2Vsc2VcbiBcbkBAIC03MiwxMSArNzksMjAgQEAgc3RhdGljIGlubGluZSBpbnQga3N6X3B0cF9pcnFfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCB1OCBwKVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrc3pfcHRwX2lycV9mcmVlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgdTggcCkge31cbiBcbitzdGF0aWMgaW5saW5lIGludCBrc3o4NDYzX3B0cF9pcnFfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQga3N6ODQ2M19wdHBfaXJxX2ZyZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKSB7fVxuK1xuICNkZWZpbmUga3N6X2dldF90c19pbmZvIE5VTExcbisjZGVmaW5lIGtzejg0NjNfZ2V0X3RzX2luZm8gTlVMTFxuIFxuICNkZWZpbmUga3N6X2h3dHN0YW1wX2dldCBOVUxMXG4gXG4gI2RlZmluZSBrc3pfaHd0c3RhbXBfc2V0IE5VTExcbisjZGVmaW5lIGtzejg0NjNfaHd0c3RhbXBfc2V0IE5VTExcbiBcbiAjZGVmaW5lIGtzel9wb3J0X3J4dHN0YW1wIE5VTExcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmhcbmluZGV4IGVhYjlhZWNiN2ZhOGE1Li42NWVhODU3N2FmNzU1OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cF9yZWcuaFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwX3JlZy5oXG5AQCAtMTIxLDYgKzEyMSwxMiBAQFxuICNkZWZpbmUgUkVHX1BUUF9QT1JUX1NZTkNfVFNcdFx0MHgwQzBDXG4gI2RlZmluZSBSRUdfUFRQX1BPUlRfUERSRVNQX1RTXHRcdDB4MEMxMFxuIFxuKyNkZWZpbmUgS1NaODQ2M19SRUdfUE9SVF9EUkVRX1RTXHQweDA2NDhcbisjZGVmaW5lIEtTWjg0NjNfUkVHX1BPUlRfU1lOQ19UU1x0MHgwNjRDXG4rI2RlZmluZSBLU1o4NDYzX1JFR19QT1JUX0RSRVNQX1RTXHQweDA2NTBcbisjZGVmaW5lIEtTWjg0NjNfUFRQX1RTX0lTUlx0XHQweDA2OENcbisjZGVmaW5lIEtTWjg0NjNfUFRQX1RTX0lFUlx0XHQweDA2OEVcbitcbiAjZGVmaW5lIFJFR19QVFBfUE9SVF9UWF9JTlRfU1RBVFVTX18yXHQweDBDMTRcbiAjZGVmaW5lIFJFR19QVFBfUE9SVF9UWF9JTlRfRU5BQkxFX18yXHQweDBDMTZcbiBcbkBAIC0xMzEsNCArMTM3LDggQEBcbiAjZGVmaW5lIEtTWl9YRFJFUV9NU0dcdFx0XHQxXG4gI2RlZmluZSBLU1pfUERSRVNfTVNHXHRcdFx0MFxuIFxuKyNkZWZpbmUgS1NaODQ2M19EUkVTUF9UU19PRkZTRVRcdFx0KEtTWjg0NjNfUkVHX1BPUlRfRFJFU1BfVFMgLSBLU1o4NDYzX1JFR19QT1JUX0RSRVFfVFMpXG4rI2RlZmluZSBLU1o4NDYzX1NZTkNfTVNHXHRcdDBcbisjZGVmaW5lIEtTWjg0NjNfWERSRVFfUERSRVNfTVNHXHRcdDFcbitcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kc2EuaCBiL2luY2x1ZGUvbmV0L2RzYS5oXG5pbmRleCA4YzE2ZWYyM2NjMTAyYS4uNmY3ZjVjMTdiNTMyMDggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9kc2EuaFxuKysrIGIvaW5jbHVkZS9uZXQvZHNhLmhcbkBAIC01OSw2ICs1OSw3IEBAIHN0cnVjdCB0Y19hY3Rpb247XG4gI2RlZmluZSBEU0FfVEFHX1BST1RPX01YTF9HU1cxWFhfVkFMVUVcdFx0MzFcbiAjZGVmaW5lIERTQV9UQUdfUFJPVE9fTVhMODYyX1ZBTFVFXHRcdDMyXG4gI2RlZmluZSBEU0FfVEFHX1BST1RPX05FVENfVkFMVUVcdFx0MzNcbisjZGVmaW5lIERTQV9UQUdfUFJPVE9fS1NaODQ2M19WQUxVRVx0XHQzNFxuIFxuIGVudW0gZHNhX3RhZ19wcm90b2NvbCB7XG4gXHREU0FfVEFHX1BST1RPX05PTkVcdFx0PSBEU0FfVEFHX1BST1RPX05PTkVfVkFMVUUsXG5AQCAtOTUsNiArOTYsNyBAQCBlbnVtIGRzYV90YWdfcHJvdG9jb2wge1xuIFx0RFNBX1RBR19QUk9UT19NWExfR1NXMVhYXHQ9IERTQV9UQUdfUFJPVE9fTVhMX0dTVzFYWF9WQUxVRSxcbiBcdERTQV9UQUdfUFJPVE9fTVhMODYyXHRcdD0gRFNBX1RBR19QUk9UT19NWEw4NjJfVkFMVUUsXG4gXHREU0FfVEFHX1BST1RPX05FVENcdFx0PSBEU0FfVEFHX1BST1RPX05FVENfVkFMVUUsXG4rXHREU0FfVEFHX1BST1RPX0tTWjg0NjNcdFx0PSBEU0FfVEFHX1BST1RPX0tTWjg0NjNfVkFMVUUsXG4gfTtcbiBcbiBzdHJ1Y3QgZHNhX3N3aXRjaDtcbmRpZmYgLS1naXQgYS9uZXQvZHNhL3RhZ19rc3ouYyBiL25ldC9kc2EvdGFnX2tzei5jXG5pbmRleCA2N2ZhODlmMTAyZTA3MC4uYjRkNzBiYTkzMGRjYmUgMTAwNjQ0XG4tLS0gYS9uZXQvZHNhL3RhZ19rc3ouY1xuKysrIGIvbmV0L2RzYS90YWdfa3N6LmNcbkBAIC0xMiw2ICsxMiw3IEBAXG4gXG4gI2luY2x1ZGUgXCJ0YWcuaFwiXG4gXG4rI2RlZmluZSBLU1o4NDYzX05BTUUgXCJrc3o4NDYzXCJcbiAjZGVmaW5lIEtTWjg3OTVfTkFNRSBcImtzejg3OTVcIlxuICNkZWZpbmUgS1NaOTQ3N19OQU1FIFwia3N6OTQ3N1wiXG4gI2RlZmluZSBLU1o5ODkzX05BTUUgXCJrc3o5ODkzXCJcbkBAIC0xMDMsNzIgKzEwNCw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqa3N6X2NvbW1vbl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiBza2I7XG4gfVxuIFxuLS8qXG4tICogRm9yIEluZ3Jlc3MgKEhvc3QgLVx1MDAzZSBLU1o4Nzk1KSwgMSBieXRlIGlzIGFkZGVkIGJlZm9yZSBGQ1MuXG4tICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4tICogREEoNmJ5dGVzKXxTQSg2Ynl0ZXMpfC4uLi58RGF0YShuYnl0ZXMpfHRhZygxYnl0ZSl8RkNTKDRieXRlcylcbi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi0gKiB0YWcgOiBlYWNoIGJpdCByZXByZXNlbnRzIHBvcnQgKGVnLCAweDAxPXBvcnQxLCAweDAyPXBvcnQyLCAweDEwPXBvcnQ1KVxuLSAqXG4tICogRm9yIEVncmVzcyAoS1NaODc5NSAtXHUwMDNlIEhvc3QpLCAxIGJ5dGUgaXMgYWRkZWQgYmVmb3JlIEZDUy5cbi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi0gKiBEQSg2Ynl0ZXMpfFNBKDZieXRlcyl8Li4uLnxEYXRhKG5ieXRlcyl8dGFnMCgxYnl0ZSl8RkNTKDRieXRlcylcbi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi0gKiB0YWcwIDogemVyby1iYXNlZCB2YWx1ZSByZXByZXNlbnRzIHBvcnRcbi0gKlx0ICAoZWcsIDB4MD1wb3J0MSwgMHgyPXBvcnQzLCAweDM9cG9ydDQpXG4tICovXG4tXG4tI2RlZmluZSBLU1o4Nzk1X1RBSUxfVEFHX0VHX1BPUlRfTVx0R0VOTUFTSygxLCAwKVxuLSNkZWZpbmUgS1NaODc5NV9UQUlMX1RBR19PVkVSUklERVx0QklUKDYpXG4tI2RlZmluZSBLU1o4Nzk1X1RBSUxfVEFHX0xPT0tVUFx0XHRCSVQoNylcbi1cbi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmtzejg3OTVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLXtcbi1cdHN0cnVjdCBldGhoZHIgKmhkcjtcbi1cdHU4ICp0YWc7XG4tXG4tXHRpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMIFx1MDAyNlx1MDAyNiBza2JfY2hlY2tzdW1faGVscChza2IpKSB7XG4tXHRcdGtmcmVlX3NrYihza2IpO1xuLVx0XHRyZXR1cm4gTlVMTDtcbi1cdH1cbi1cbi1cdC8qIFRhZyBlbmNvZGluZyAqL1xuLVx0dGFnID0gc2tiX3B1dChza2IsIEtTWl9JTkdSRVNTX1RBR19MRU4pO1xuLVx0aGRyID0gc2tiX2V0aF9oZHIoc2tiKTtcbi1cbi1cdCp0YWcgPSBkc2FfeG1pdF9wb3J0X21hc2soc2tiLCBkZXYpO1xuLVx0aWYgKGlzX2xpbmtfbG9jYWxfZXRoZXJfYWRkcihoZHItXHUwMDNlaF9kZXN0KSlcbi1cdFx0KnRhZyB8PSBLU1o4Nzk1X1RBSUxfVEFHX09WRVJSSURFO1xuLVxuLVx0cmV0dXJuIHNrYjtcbi19XG4tXG4tc3RhdGljIHN0cnVjdCBza19idWZmICprc3o4Nzk1X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLXtcbi1cdHU4ICp0YWc7XG4tXG4tXHRpZiAoc2tiX2xpbmVhcml6ZShza2IpKSB7XG4tXHRcdGtmcmVlX3NrYihza2IpO1xuLVx0XHRyZXR1cm4gTlVMTDtcbi1cdH1cbi1cbi1cdHRhZyA9IHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtIEtTWl9FR1JFU1NfVEFHX0xFTjtcbi1cbi1cdHJldHVybiBrc3pfY29tbW9uX3Jjdihza2IsIGRldiwgdGFnWzBdIFx1MDAyNiBLU1o4Nzk1X1RBSUxfVEFHX0VHX1BPUlRfTSxcbi1cdFx0XHQgICAgICBLU1pfRUdSRVNTX1RBR19MRU4pO1xuLX1cbi1cbi1zdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIGtzejg3OTVfbmV0ZGV2X29wcyA9IHtcbi1cdC5uYW1lXHQ9IEtTWjg3OTVfTkFNRSxcbi1cdC5wcm90b1x0PSBEU0FfVEFHX1BST1RPX0tTWjg3OTUsXG4tXHQueG1pdFx0PSBrc3o4Nzk1X3htaXQsXG4tXHQucmN2XHQ9IGtzejg3OTVfcmN2LFxuLVx0Lm5lZWRlZF90YWlscm9vbSA9IEtTWl9JTkdSRVNTX1RBR19MRU4sXG4tfTtcbi1cbi1EU0FfVEFHX0RSSVZFUihrc3o4Nzk1X25ldGRldl9vcHMpO1xuLU1PRFVMRV9BTElBU19EU0FfVEFHX0RSSVZFUihEU0FfVEFHX1BST1RPX0tTWjg3OTUsIEtTWjg3OTVfTkFNRSk7XG4tXG4gLypcbiAgKiBGb3IgSW5ncmVzcyAoSG9zdCAtXHUwMDNlIEtTWjk0NzcpLCAyLzYgYnl0ZXMgYXJlIGFkZGVkIGJlZm9yZSBGQ1MuXG4gICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5AQCAtMjg0LDYgKzIxOSwzNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmtzel9kZWZlcl94bWl0KHN0cnVjdCBkc2FfcG9ydCAqZHAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4rc3RhdGljIHN0cnVjdCBza19idWZmICprc3pfY29tbW9uX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0ICAgICAgIGJvb2wgZG9fdHN0YW1wLFxuK1x0XHRcdFx0ICAgICAgIHU4IHByaW8sXG4rXHRcdFx0XHQgICAgICAgdTggb3ZlcnJpZGVfbWFzaylcbit7XG4rXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3VzZXJfdG9fcG9ydChkZXYpO1xuK1x0c3RydWN0IGV0aGhkciAqaGRyO1xuK1x0dTggKnRhZztcbitcbitcdGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwgXHUwMDI2XHUwMDI2IHNrYl9jaGVja3N1bV9oZWxwKHNrYikpIHtcbitcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuK1xuK1x0LyogVGFnIGVuY29kaW5nICovXG4rXHRpZiAoZG9fdHN0YW1wKVxuK1x0XHRrc3pfeG1pdF90aW1lc3RhbXAoZHAsIHNrYik7XG4rXG4rXHR0YWcgPSBza2JfcHV0KHNrYiwgS1NaX0lOR1JFU1NfVEFHX0xFTik7XG4rXHRoZHIgPSBza2JfZXRoX2hkcihza2IpO1xuK1xuK1x0KnRhZyA9IGRzYV94bWl0X3BvcnRfbWFzayhza2IsIGRldik7XG4rXHQqdGFnIHw9IHByaW87XG4rXG4rXHRpZiAoaXNfbGlua19sb2NhbF9ldGhlcl9hZGRyKGhkci1cdTAwM2VoX2Rlc3QpKVxuK1x0XHQqdGFnIHw9IG92ZXJyaWRlX21hc2s7XG4rXG4rXHRyZXR1cm4ga3N6X2RlZmVyX3htaXQoZHAsIHNrYik7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqa3N6OTQ3N194bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG5AQCAtMzUzLDM3ICszMTksNjkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2FfZGV2aWNlX29wcyBrc3o5NDc3X25ldGRldl9vcHMgPSB7XG4gRFNBX1RBR19EUklWRVIoa3N6OTQ3N19uZXRkZXZfb3BzKTtcbiBNT0RVTEVfQUxJQVNfRFNBX1RBR19EUklWRVIoRFNBX1RBR19QUk9UT19LU1o5NDc3LCBLU1o5NDc3X05BTUUpO1xuIFxuLSNkZWZpbmUgS1NaOTg5M19UQUlMX1RBR19QUklPXHRcdEdFTk1BU0soNCwgMylcbi0jZGVmaW5lIEtTWjk4OTNfVEFJTF9UQUdfT1ZFUlJJREVcdEJJVCg1KVxuLSNkZWZpbmUgS1NaOTg5M19UQUlMX1RBR19MT09LVVBcdFx0QklUKDYpXG4rLypcbisgKiBGb3IgSW5ncmVzcyAoSG9zdCAtXHUwMDNlIEtTWjg3OTUpLCAxIGJ5dGUgaXMgYWRkZWQgYmVmb3JlIEZDUy5cbisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbisgKiBEQSg2Ynl0ZXMpfFNBKDZieXRlcyl8Li4uLnxEYXRhKG5ieXRlcyl8dGFnKDFieXRlKXxGQ1MoNGJ5dGVzKVxuKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyAqIHRhZyA6IGVhY2ggYml0IHJlcHJlc2VudHMgcG9ydCAoZWcsIDB4MDE9cG9ydDEsIDB4MDI9cG9ydDIsIDB4MTA9cG9ydDUpXG4rICpcbisgKiBGb3IgRWdyZXNzIChLU1o4Nzk1IC1cdTAwM2UgSG9zdCksIDEgYnl0ZSBpcyBhZGRlZCBiZWZvcmUgRkNTLlxuKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyAqIERBKDZieXRlcyl8U0EoNmJ5dGVzKXwuLi4ufERhdGEobmJ5dGVzKXx0YWcwKDFieXRlKXxGQ1MoNGJ5dGVzKVxuKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyAqIHRhZzAgOiB6ZXJvLWJhc2VkIHZhbHVlIHJlcHJlc2VudHMgcG9ydFxuKyAqXHQgIChlZywgMHgwPXBvcnQxLCAweDI9cG9ydDMsIDB4Mz1wb3J0NClcbisgKi9cbiBcbi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmtzejk4OTNfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4rI2RlZmluZSBLU1o4Nzk1X1RBSUxfVEFHX0VHX1BPUlRfTVx0R0VOTUFTSygxLCAwKVxuKyNkZWZpbmUgS1NaODc5NV9UQUlMX1RBR19PVkVSUklERVx0QklUKDYpXG4rI2RlZmluZSBLU1o4Nzk1X1RBSUxfVEFHX0xPT0tVUFx0XHRCSVQoNylcbitcbitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmtzejg3OTVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3tcbitcdHJldHVybiBrc3pfY29tbW9uX3htaXQoc2tiLCBkZXYsIGZhbHNlLCAwLCBLU1o4Nzk1X1RBSUxfVEFHX09WRVJSSURFKTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBza19idWZmICprc3o4Nzk1X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbi1cdHUxNiBxdWV1ZV9tYXBwaW5nID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7XG4tXHR1OCBwcmlvID0gbmV0ZGV2X3R4cV90b190YyhkZXYsIHF1ZXVlX21hcHBpbmcpO1xuLVx0c3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV91c2VyX3RvX3BvcnQoZGV2KTtcbi1cdHN0cnVjdCBldGhoZHIgKmhkcjtcbiBcdHU4ICp0YWc7XG4gXG4tXHRpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMIFx1MDAyNlx1MDAyNiBza2JfY2hlY2tzdW1faGVscChza2IpKSB7XG4rXHRpZiAoc2tiX2xpbmVhcml6ZShza2IpKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiBcbi1cdC8qIFRhZyBlbmNvZGluZyAqL1xuLVx0a3N6X3htaXRfdGltZXN0YW1wKGRwLCBza2IpO1xuK1x0dGFnID0gc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gS1NaX0VHUkVTU19UQUdfTEVOO1xuIFxuLVx0dGFnID0gc2tiX3B1dChza2IsIEtTWl9JTkdSRVNTX1RBR19MRU4pO1xuLVx0aGRyID0gc2tiX2V0aF9oZHIoc2tiKTtcbitcdHJldHVybiBrc3pfY29tbW9uX3Jjdihza2IsIGRldiwgdGFnWzBdIFx1MDAyNiBLU1o4Nzk1X1RBSUxfVEFHX0VHX1BPUlRfTSxcbitcdFx0XHQgICAgICBLU1pfRUdSRVNTX1RBR19MRU4pO1xuK31cbiBcbi1cdCp0YWcgPSBkc2FfeG1pdF9wb3J0X21hc2soc2tiLCBkZXYpO1xuLVx0KnRhZyB8PSBGSUVMRF9QUkVQKEtTWjk4OTNfVEFJTF9UQUdfUFJJTywgcHJpbyk7XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBkc2FfZGV2aWNlX29wcyBrc3o4Nzk1X25ldGRldl9vcHMgPSB7XG4rXHQubmFtZVx0PSBLU1o4Nzk1X05BTUUsXG4rXHQucHJvdG9cdD0gRFNBX1RBR19QUk9UT19LU1o4Nzk1LFxuK1x0LnhtaXRcdD0ga3N6ODc5NV94bWl0LFxuK1x0LnJjdlx0PSBrc3o4Nzk1X3JjdixcbitcdC5uZWVkZWRfdGFpbHJvb20gPSBLU1pfSU5HUkVTU19UQUdfTEVOLFxuK307XG4gXG4tXHRpZiAoaXNfbGlua19sb2NhbF9ldGhlcl9hZGRyKGhkci1cdTAwM2VoX2Rlc3QpKVxuLVx0XHQqdGFnIHw9IEtTWjk4OTNfVEFJTF9UQUdfT1ZFUlJJREU7XG4rRFNBX1RBR19EUklWRVIoa3N6ODc5NV9uZXRkZXZfb3BzKTtcbitNT0RVTEVfQUxJQVNfRFNBX1RBR19EUklWRVIoRFNBX1RBR19QUk9UT19LU1o4Nzk1LCBLU1o4Nzk1X05BTUUpO1xuIFxuLVx0cmV0dXJuIGtzel9kZWZlcl94bWl0KGRwLCBza2IpO1xuKyNkZWZpbmUgS1NaOTg5M19UQUlMX1RBR19QUklPXHRcdEdFTk1BU0soNCwgMylcbisjZGVmaW5lIEtTWjk4OTNfVEFJTF9UQUdfT1ZFUlJJREVcdEJJVCg1KVxuKyNkZWZpbmUgS1NaOTg5M19UQUlMX1RBR19MT09LVVBcdFx0QklUKDYpXG4rXG4rc3RhdGljIHN0cnVjdCBza19idWZmICprc3o5ODkzX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3tcbitcdHUxNiBxdWV1ZV9tYXBwaW5nID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7XG4rXHR1OCBwcmlvID0gbmV0ZGV2X3R4cV90b190YyhkZXYsIHF1ZXVlX21hcHBpbmcpO1xuK1xuK1x0cmV0dXJuIGtzel9jb21tb25feG1pdChza2IsIGRldiwgdHJ1ZSxcbitcdFx0XHQgICAgICAgRklFTERfUFJFUChLU1o5ODkzX1RBSUxfVEFHX1BSSU8sIHByaW8pLFxuK1x0XHRcdCAgICAgICBLU1o5ODkzX1RBSUxfVEFHX09WRVJSSURFKTtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBkc2FfZGV2aWNlX29wcyBrc3o5ODkzX25ldGRldl9vcHMgPSB7XG5AQCAtMzk5LDYgKzM5Nyw3MCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIGtzejk4OTNfbmV0ZGV2X29wcyA9IHtcbiBEU0FfVEFHX0RSSVZFUihrc3o5ODkzX25ldGRldl9vcHMpO1xuIE1PRFVMRV9BTElBU19EU0FfVEFHX0RSSVZFUihEU0FfVEFHX1BST1RPX0tTWjk4OTMsIEtTWjk4OTNfTkFNRSk7XG4gXG4rI2RlZmluZSBLU1o4NDYzX1RBSUxfVEFHX1BSSU9cdFx0R0VOTUFTSyg0LCAzKVxuKyNkZWZpbmUgS1NaODQ2M19UQUlMX1RBR19FR19QT1JUX01cdEdFTk1BU0soMiwgMClcbitcbitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmtzejg0NjNfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4re1xuK1x0dTE2IHF1ZXVlX21hcHBpbmcgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcbitcdHU4IHByaW8gPSBuZXRkZXZfdHhxX3RvX3RjKGRldiwgcXVldWVfbWFwcGluZyk7XG4rXG4rXHRyZXR1cm4ga3N6X2NvbW1vbl94bWl0KHNrYiwgZGV2LCBmYWxzZSxcbitcdFx0XHQgICAgICAgRklFTERfUFJFUChLU1o4NDYzX1RBSUxfVEFHX1BSSU8sIHByaW8pLFxuK1x0XHRcdCAgICAgICAwKTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBza19idWZmICprc3o4NDYzX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3tcbitcdHVuc2lnbmVkIGludCBsZW4gPSBLU1pfRUdSRVNTX1RBR19MRU47XG4rXHRzdHJ1Y3QgcHRwX2hlYWRlciAqcHRwX2hkcjtcbitcdHVuc2lnbmVkIGludCBwdHBfY2xhc3M7XG4rXHR1bnNpZ25lZCBpbnQgcG9ydDtcbitcdGt0aW1lX3QgdHM7XG4rXHR1OCAqdGFnO1xuK1xuK1x0aWYgKHNrYl9saW5lYXJpemUoc2tiKSkge1xuK1x0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4rXG4rXHRLU1pfU0tCX0NCKHNrYiktXHUwMDNldHN0YW1wID0gMDtcbitcbitcdC8qIFRhZyBkZWNvZGluZyAqL1xuK1x0dGFnID0gc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gS1NaX0VHUkVTU19UQUdfTEVOO1xuK1x0cG9ydCA9IHRhZ1swXSBcdTAwMjYgS1NaODQ2M19UQUlMX1RBR19FR19QT1JUX007XG4rXG4rXHRfX3NrYl9wdXNoKHNrYiwgRVRIX0hMRU4pO1xuK1x0cHRwX2NsYXNzID0gcHRwX2NsYXNzaWZ5X3Jhdyhza2IpO1xuK1x0X19za2JfcHVsbChza2IsIEVUSF9ITEVOKTtcbitcdGlmIChwdHBfY2xhc3MgPT0gUFRQX0NMQVNTX05PTkUpXG4rXHRcdGdvdG8gY29tbW9uX3JjdjtcbitcbitcdHB0cF9oZHIgPSBwdHBfcGFyc2VfaGVhZGVyKHNrYiwgcHRwX2NsYXNzKTtcbitcdGlmIChwdHBfaGRyKSB7XG4rXHRcdHRzID0ga3N6X2RlY29kZV90c3RhbXAoZ2V0X3VuYWxpZ25lZF9iZTMyKFx1MDAyNnB0cF9oZHItXHUwMDNlcmVzZXJ2ZWQyKSk7XG4rXHRcdEtTWl9TS0JfQ0Ioc2tiKS1cdTAwM2V0c3RhbXAgPSB0cztcbitcdFx0cHRwX2hkci1cdTAwM2VyZXNlcnZlZDIgPSAwO1xuK1x0fVxuK1xuK2NvbW1vbl9yY3Y6XG4rXHRyZXR1cm4ga3N6X2NvbW1vbl9yY3Yoc2tiLCBkZXYsIHBvcnQsIGxlbik7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMga3N6ODQ2M19uZXRkZXZfb3BzID0ge1xuK1x0Lm5hbWVcdD0gS1NaODQ2M19OQU1FLFxuK1x0LnByb3RvXHQ9IERTQV9UQUdfUFJPVE9fS1NaODQ2MyxcbitcdC54bWl0XHQ9IGtzejg0NjNfeG1pdCxcbitcdC5yY3ZcdD0ga3N6ODQ2M19yY3YsXG4rXHQuY29ubmVjdCA9IGtzel9jb25uZWN0LFxuK1x0LmRpc2Nvbm5lY3QgPSBrc3pfZGlzY29ubmVjdCxcbitcdC5uZWVkZWRfdGFpbHJvb20gPSBLU1pfSU5HUkVTU19UQUdfTEVOLFxuK307XG4rXG4rRFNBX1RBR19EUklWRVIoa3N6ODQ2M19uZXRkZXZfb3BzKTtcbitNT0RVTEVfQUxJQVNfRFNBX1RBR19EUklWRVIoRFNBX1RBR19QUk9UT19LU1o4NDYzLCBLU1o4NDYzX05BTUUpO1xuK1xuIC8qIEZvciB4bWl0LCAyLzYgYnl0ZXMgYXJlIGFkZGVkIGJlZm9yZSBGQ1MuXG4gICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICogREEoNmJ5dGVzKXxTQSg2Ynl0ZXMpfC4uLi58RGF0YShuYnl0ZXMpfHRzKDRieXRlcyl8dGFnMCgxYnl0ZSl8dGFnMSgxYnl0ZSl8XG5AQCAtNDcxLDYgKzUzMyw3IEBAIERTQV9UQUdfRFJJVkVSKGxhbjkzN3hfbmV0ZGV2X29wcyk7XG4gTU9EVUxFX0FMSUFTX0RTQV9UQUdfRFJJVkVSKERTQV9UQUdfUFJPVE9fTEFOOTM3WCwgTEFOOTM3WF9OQU1FKTtcbiBcbiBzdGF0aWMgc3RydWN0IGRzYV90YWdfZHJpdmVyICpkc2FfdGFnX2RyaXZlcl9hcnJheVtdID0ge1xuK1x0XHUwMDI2RFNBX1RBR19EUklWRVJfTkFNRShrc3o4NDYzX25ldGRldl9vcHMpLFxuIFx0XHUwMDI2RFNBX1RBR19EUklWRVJfTkFNRShrc3o4Nzk1X25ldGRldl9vcHMpLFxuIFx0XHUwMDI2RFNBX1RBR19EUklWRVJfTkFNRShrc3o5NDc3X25ldGRldl9vcHMpLFxuIFx0XHUwMDI2RFNBX1RBR19EUklWRVJfTkFNRShrc3o5ODkzX25ldGRldl9vcHMpLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjM6MDU6MzMuMDg4NDAzMTkzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkzMDI4ODk2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBc3Nlc3NpbmcgdGhlIEZ1enphYmlsaXR5IG9mIHRoZSBLU1o4NDYzIFN3aXRjaCBTdXBwb3J0IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgS1NaODQ2MyBzd2l0Y2ggZmVhdHVyZXMsIHNwZWNpZmljYWxseSB0aGUgSVJRLCBQVFAsIGFuZCBEU0EgdGFnIHByb3RvY29sLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2VzIGFyZSBpbiB0aGUgdXN1YWwgcGxhY2VzOiBga3N6OC5jYCwgYGtzel9jb21tb24uY2AsIGBrc3pfcHRwLmNgLCBgbmV0L2RzYS90YWdfa3N6LmNgLCBhbGwgcmVsYXRlZCB0byB0aGlzIE1pY3JvY2hpcCBLU1o4NDYzIERTQSBzd2l0Y2ggZHJpdmVyLiBJdCBhZGRzIGEgbmV3IGBEU0FfVEFHX1BST1RPX0tTWjg0NjNgLCBJUlEsIGFuZCBQVFAgc3VwcG9ydCDigJMgbmljZS4gQnV0IHRoZSBtaWxsaW9uLWRvbGxhciBxdWVzdGlvbiBpczogY2FuIHRoaXMgYmUgKnJlYWNoZWQqIGVmZmVjdGl2ZWx5IGZvciBmdXp6aW5nP1xuXG5Ob3JtYWxseSwgRFNBIHN3aXRjaGVzIHJlcXVpcmUgdGhlIHJlYWwgaGFyZHdhcmUgY29ubmVjdGlvbiwgbGlrZSBJMkMsIFNQSSwgb3IgTURJTywgdG8gdGhlIHN3aXRjaCBjaGlwLiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsIFwiQ2FuIHRoaXMgYmUgZW11bGF0ZWQgaW4gUUVNVT9cIiBIbW0sIG5vLCBRRU1VIGRvZXNuJ3QgZW11bGF0ZSB0aGUgS1NaODQ2My4gT2theSwgYnV0IGNhbiBpdCBiZSAqZnV6emVkKj8gTGV0J3Mgc2VlLi4uXG5cbkknbSByZW1lbWJlcmluZyB0aGUgcHJvbXB0IGFib3V0IFdvcnRoRnV6emluZyBhbmQgd2hhdCdzIGV4cGxpY2l0bHkgZXhjbHVkZWQuIFNwZWNpZmljYWxseSwgXCJ2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVVwiLiBBbHJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBCdXQgd2hhdCBhYm91dCBEU0Egc3dpdGNoZXMgY29ubmVjdGVkIHZpYSBNRElPIG9yIFNQST8gVGhpcyBpcyB0aGUgY29yZSBpc3N1ZS5cblxuQ2FuIFN5emthbGxlciBmdXp6IE1ESU8vU1BJIGRldmljZXM/IEkgKnRoaW5rKiBTeXprYWxsZXIgY2FuIGZ1enogSTJDL1NQSSB2aWEgYC9kZXYvaTJjLSpgIGFuZCBgL2Rldi9zcGlkZXZgLCBidXQgdGhhdCByZXF1aXJlcyB0aGUgZGV2aWNlIHRvIGJlIHByb2JlZC4gVGhhdCdzIHRoZSBjcnV4IG9mIHRoZSBwcm9ibGVtLiBXYWl0LCBkb2VzIFN5emthbGxlciAqaGF2ZSogc29tZSBraW5kIG9mIEkyQy9TUEkgaW5qZWN0aW9uPyBObywgSSB0aGluayBpdCB1c2VzIHZpcnR1YWwgZGV2aWNlcyBvciBtb2NrcywgYnV0IGZvciBEU0Egc3dpdGNoZXMsIHRoYXQncyB0eXBpY2FsbHkgZGlmZmljdWx0IHVubGVzcyB0aGVyZSdzIGEgZ29vZCBtb2NrIGltcGxlbWVudGF0aW9uLlxuXG5TbywgdGhlIGtleSBpcyB0byBzZWUgaWYgd2UgY2FuIHRyaWdnZXIgYW55IG9mIHRoZSBrZXkgZnVuY3Rpb25zIGluIHRoaXMgZHJpdmVyLCBsaWtlIGBrc3o4NDYzX3NldHVwYCBvciBga3N6ODQ2M194bWl0YC4gSSdsbCBkbyBhIHF1aWNrIHNlYXJjaCBpbiB0aGUga2VybmVsIHNvdXJjZSB0byBzZWUgaWYgdGhlcmUncyBhbiBvYnZpb3VzIHdheSB0byByZWFjaCB0aGVtLiBHb3R0YSBmaWd1cmUgb3V0IGlmIHRoZXJlIGlzIGEgcGF0aCB0byBnZXQgdGhpcyBjb2RlIHRvIGV4ZWN1dGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5Mzc4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjM6MDU6NDAuMDE4Njk0OTUzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNTQyODQzNzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3N6ODQ2M1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDU0NCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWljcm9jaGlwLGtzei55YW1sPTEzPXByb3BlcnRpZXM6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9taWNyb2NoaXAsa3N6LnlhbWwtMTctICAgIGVudW06XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWljcm9jaGlwLGtzei55YW1sOjE4OiAgICAgIC0gbWljcm9jaGlwLGtzejg0NjNcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9taWNyb2NoaXAsa3N6LnlhbWwtMTktICAgICAgLSBtaWNyb2NoaXAsa3N6ODc2NVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWljcm9jaGlwLGtzei55YW1sPTExNT1hbGxPZjpcXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21pY3JvY2hpcCxrc3oueWFtbC0xNTMtICAgICAgICAgIGNvbnRhaW5zOlxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21pY3JvY2hpcCxrc3oueWFtbDoxNTQ6ICAgICAgICAgICAgY29uc3Q6IG1pY3JvY2hpcCxrc3o4NDYzXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWljcm9jaGlwLGtzei55YW1sLTE1NS0gICAgdGhlbjpcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTE4ND1zdGF0aWMgaW50IGtzejhfcG1lX3B3cml0ZTgoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsIGludCBvZmZzZXQsIHU4IGRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xOTAtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MTkxOnN0YXRpYyB2b2lkIGtzejg0NjNfaXJxX21hc2soc3RydWN0IGlycV9kYXRhICpkKVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTE5Mi17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xOTctXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MTk4OnN0YXRpYyB2b2lkIGtzejg0NjNfaXJxX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMTk5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTIwNC1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyMDU6c3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfY2hpcCBrc3o4NDYzX2lycV9jaGlwID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjIwNjpcXHQubmFtZVxcdFxcdFxcdD0gXFxcImtzejg0NjMtaXJxXFxcIixcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyMDc6XFx0LmlycV9tYXNrXFx0XFx0PSBrc3o4NDYzX2lycV9tYXNrLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjIwODpcXHQuaXJxX3VubWFza1xcdFxcdD0ga3N6ODQ2M19pcnFfdW5tYXNrLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTIwOS1cXHQuaXJxX2J1c19sb2NrXFx0XFx0PSBrc3pfaXJxX2J1c19sb2NrLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjEyLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjIxMzpzdGF0aWMgaW50IGtzejg0NjNfaXJxX2RvbWFpbl9tYXAoc3RydWN0IGlycV9kb21haW4gKmQsXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjE0LVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGlycSwgaXJxX2h3X251bWJlcl90IGh3aXJxKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjE2LVxcdGlycV9zZXRfY2hpcF9kYXRhKGlycSwgZC1cXHUwMDNlaG9zdF9kYXRhKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyMTc6XFx0aXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKGlycSwgXFx1MDAyNmtzejg0NjNfaXJxX2NoaXAsIGhhbmRsZV9sZXZlbF9pcnEpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTIxOC1cXHRpcnFfc2V0X25vcHJvYmUoaXJxKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTIyMi1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyMjM6c3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBrc3o4NDYzX2lycV9kb21haW5fb3BzID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjIyNDpcXHQubWFwXFx0PSBrc3o4NDYzX2lycV9kb21haW5fbWFwLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTIyNS1cXHQueGxhdGVcXHQ9IGlycV9kb21haW5feGxhdGVfdHdvY2VsbCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTIyNy1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyMjg6c3RhdGljIGludCBrc3o4NDYzX2dpcnFfc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yMjkte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjM1LVxcdGdpcnEtXFx1MDAzZW1hc2tlZCA9IDA7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MjM2OlxcdHNucHJpbnRmKGdpcnEtXFx1MDAzZW5hbWUsIHNpemVvZihnaXJxLVxcdTAwM2VuYW1lKSwgXFxcImtzejg0NjMtZ2lycVxcXCIpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTIzNy1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTIzOS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyNDA6XFx0cmV0dXJuIGtzel9pcnFfY29tbW9uX3NldHVwKGRldiwgZ2lycSwgXFx1MDAyNmtzejg0NjNfaXJxX2RvbWFpbl9vcHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI0MS19XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjQyLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjI0MzpzdGF0aWMgaW50IGtzejg0NjNfcmVzZXRfc3dpdGNoKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjQ0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTMyNj1zdGF0aWMgaW50IGtzejhfcG9ydF9xdWV1ZV9zcGxpdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgaW50IHF1ZXVlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTM0OS1cXHRcXHRcXHRyZXR1cm4gcmV0O1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjM1MDpcXHR9IGVsc2UgaWYgKGtzel9pc19rc3o4NDYzKGRldikpIHtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0zNTEtXFx0XFx0bWFza180cSA9IEtTWjg4NzNfUE9SVF80UVVFVUVfU1BMSVRfRU47XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYz0xNDg5PXN0YXRpYyB2b2lkIGtzejhfY2ZnX3BvcnRfbWVtYmVyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LCB1OCBtZW1iZXIpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xNDkzLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjE0OTQ6XFx0aWYgKGtzel9pc19rc3o4NDYzKGRldikpXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMTQ5NS1cXHRcXHRvZmZzZXQgPSBQMUNSMjtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTE1MDI9c3RhdGljIHZvaWQga3N6OF9mbHVzaF9keW5fbWFjX3RhYmxlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xNTI2LVxcdH1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoxNTI3OlxcdGlmIChrc3pfaXNfa3N6ODQ2MyhkZXYpKSB7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMTUyOC1cXHRcXHRyZWcgPSBLU1o4NDYzX0ZMVVNIX1RBQkxFX0NUUkw7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYz0xNjg5PXN0YXRpYyB2b2lkIGtzejhfcG9ydF9lbmFibGVfcHZpZChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgYm9vbCBzdGF0ZSlcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xNjkwLXtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoxNjkxOlxcdGlmIChrc3pfaXNfa3N6ODh4MyhkZXYpIHx8IGtzel9pc19rc3o4NDYzKGRldikpIHtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xNjkyLVxcdFxcdGludCByZWcgPSBSRUdfU1dfSU5TRVJUX1NSQ19QVklEO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTE2OTMtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MTY5NDpcXHRcXHRpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSlcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xNjk1LVxcdFxcdFxcdHJlZyA9IEtTWjg0NjNfUkVHX1NXX0NUUkxfOTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTE4MDg9c3RhdGljIGludCBrc3o4X3BvcnRfbWlycm9yX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMTgxNC1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoxODE1OlxcdGlmIChrc3pfaXNfa3N6ODQ2MyhkZXYpKVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTE4MTYtXFx0XFx0b2Zmc2V0ID0gUDFDUjI7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYz0xODM1PXN0YXRpYyB2b2lkIGtzejhfcG9ydF9taXJyb3JfZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xODQxLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjE4NDI6XFx0aWYgKGtzel9pc19rc3o4NDYzKGRldikpXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMTg0My1cXHRcXHRvZmZzZXQgPSBQMUNSMjtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTE4NTgtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MTg1OTpzdGF0aWMgdTgga3N6ODQ2M190Y19jdHJsKGludCBwb3J0LCBpbnQgcXVldWUpXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMTg2MC17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYz0xODg5PXN0YXRpYyBpbnQga3N6ODh4M190Y19ldHNfYWRkKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMTkwNC1cXHRcXHRyZWcgPSBLU1o4ODczX1RYUV9TUExJVF9DVFJMX1JFRyhwb3J0LCBxdWV1ZSk7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MTkwNTpcXHRcXHRpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSlcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoxOTA2OlxcdFxcdFxcdHJlZyA9IGtzejg0NjNfdGNfY3RybChwb3J0LCBxdWV1ZSk7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMTkwNy1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTE5MzA9c3RhdGljIGludCBrc3o4OHgzX3RjX2V0c19kZWwoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xOTQxLVxcdFxcdHJlZyA9IEtTWjg4NzNfVFhRX1NQTElUX0NUUkxfUkVHKHBvcnQsIHF1ZXVlKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoxOTQyOlxcdFxcdGlmIChrc3pfaXNfa3N6ODQ2MyhkZXYpKVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjE5NDM6XFx0XFx0XFx0cmVnID0ga3N6ODQ2M190Y19jdHJsKHBvcnQsIHF1ZXVlKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xOTQ0LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9MTk1Nz1zdGF0aWMgaW50IGtzejhfdGNfc2V0dXBfcWRpc2NfZXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xOTYyLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjE5NjM6XFx0aWYgKCEoa3N6X2lzX2tzejg4eDMoZGV2KSB8fCBrc3pfaXNfa3N6ODQ2MyhkZXYpKSlcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0xOTY0LVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTIwMjg9c3RhdGljIHZvaWQga3N6OF9wb3J0X3NldHVwKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LCBib29sIGNwdV9wb3J0KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjAzOS1cXHRvZmZzZXQgPSBQX0JDQVNUX1NUT1JNX0NUUkw7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MjA0MDpcXHRpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSlcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yMDQxLVxcdFxcdG9mZnNldCA9IFAxQ1IxO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjA0Ny1cXHRvZmZzZXQgPSBQXzgwMl8xUF9DVFJMO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjIwNDg6XFx0aWYgKGtzel9pc19rc3o4NDYzKGRldikpXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjA0OS1cXHRcXHRvZmZzZXQgPSBQMUNSMjtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTIwNzk9c3RhdGljIHZvaWQga3N6ODh4M19jb25maWdfcm1paV9jbGsoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTIwOTMtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MjA5NDpzdGF0aWMgdm9pZCBrc3o4NDYzX2NvbmZpZ19jcHVfcG9ydChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjA5NS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYz0yMzM2PXN0YXRpYyB2b2lkIGtzejg4eHhfcl9taWJfc3RhdHM2NChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTIzODQtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MjM4NTpzdGF0aWMgaW50IGtzejg0NjNfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTIzODYte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjM5OS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyNDAwOlxcdHJldCA9IGtzejg0NjNfcmVzZXRfc3dpdGNoKGRldik7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjQwMS1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yNDEzLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjI0MTQ6XFx0a3N6ODQ2M19jb25maWdfY3B1X3BvcnQoZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI0MTUtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yNDcyLVxcdGlmIChkZXYtXFx1MDAzZWlycSBcXHUwMDNlIDApIHtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyNDczOlxcdFxcdHJldCA9IGtzejg0NjNfZ2lycV9zZXR1cChkZXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI0NzQtXFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI0NzYtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MjQ3NzpcXHRcXHRyZXQgPSBrc3o4NDYzX3B0cF9pcnFfc2V0dXAoZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI0NzgtXFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI1MDktXFx0aWYgKGRldi1cXHUwMDNlaXJxIFxcdTAwM2UgMClcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyNTEwOlxcdFxcdGtzejg0NjNfcHRwX2lycV9mcmVlKGRzKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yNTExLWZyZWVfZ2lycTpcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI1MTctXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MjUxODpzdGF0aWMgdm9pZCBrc3o4NDYzX3RlYXJkb3duKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yNTE5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI1MjMtXFx0XFx0a3N6X3B0cF9jbG9ja191bnJlZ2lzdGVyKGRzKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyNTI0OlxcdFxcdGtzejg0NjNfcHRwX2lycV9mcmVlKGRzKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yNTI1LVxcdFxcdGtzel9pcnFfZnJlZShcXHUwMDI2ZGV2LVxcdTAwM2VnaXJxKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTI4NDE9c3RhdGljIHUzMiBrc3o4X2dldF9wb3J0X2FkZHIoaW50IHBvcnQsIGludCBvZmZzZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yODQ1LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjI4NDY6c3RhdGljIHUzMiBrc3o4NDYzX2dldF9wb3J0X2FkZHIoaW50IHBvcnQsIGludCBvZmZzZXQpXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjg0Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yODUzLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjI4NTQ6c3RhdGljIHUxNiBrc3o4NDYzX2dldF9waHlfYWRkcih1MTYgcGh5LCB1MTYgcmVnLCB1MTYgb2Zmc2V0KVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI4NTUte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjg1OC1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyODU5OnN0YXRpYyBpbnQga3N6ODQ2M19yX3BoeShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1MTYgcGh5LCB1MTYgcmVnLCB1MTYgKnZhbClcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yODYwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI4NjgtXFx0Y2FzZSBNSUlfUEhZU0lEMTpcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyODY5OlxcdFxcdHN3X3JlZyA9IGtzejg0NjNfZ2V0X3BoeV9hZGRyKHBoeSwgMCwgUEhZMUlIUik7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjg3MC1cXHRcXHRicmVhaztcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yODcxLVxcdGNhc2UgTUlJX1BIWVNJRDI6XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6Mjg3MjpcXHRcXHRzd19yZWcgPSBrc3o4NDYzX2dldF9waHlfYWRkcihwaHksIDAsIFBIWTFJTFIpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI4NzMtXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yODc3LVxcdGNhc2UgTUlJX0xQQTpcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyODc4OlxcdFxcdHN3X3JlZyA9IGtzejg0NjNfZ2V0X3BoeV9hZGRyKHBoeSwgcmVnLCBQMU1CQ1IpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI4NzktXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yODk4LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjI4OTk6c3RhdGljIGludCBrc3o4NDYzX3BoeV9yZWFkMTYoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgYWRkciwgaW50IHJlZylcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yOTAwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI5MDQtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MjkwNTpcXHRyZXQgPSBrc3o4NDYzX3JfcGh5KGRldiwgYWRkciwgcmVnLCBcXHUwMDI2dmFsKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yOTA2LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yOTExLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjI5MTI6c3RhdGljIGludCBrc3o4NDYzX3dfcGh5KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHUxNiBwaHksIHUxNiByZWcsIHUxNiB2YWwpXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjkxMy17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yOTI1LVxcdGNhc2UgTUlJX0FEVkVSVElTRTpcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyOTI2OlxcdFxcdHN3X3JlZyA9IGtzejg0NjNfZ2V0X3BoeV9hZGRyKHBoeSwgcmVnLCBQMU1CQ1IpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI5MjctXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yOTM5LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjI5NDA6c3RhdGljIGludCBrc3o4NDYzX3BoeV93cml0ZTE2KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IGFkZHIsIGludCByZWcsIHUxNiB2YWwpXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjk0MS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yOTQ0LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjI5NDU6XFx0cmV0ID0ga3N6ODQ2M193X3BoeShkZXYsIGFkZHIsIHJlZywgdmFsKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yOTQ2LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYz0yOTcwPXN0YXRpYyBpbnQga3N6OF9zd2l0Y2hfaW5pdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjk3OC1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyOTc5OnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2wga3N6ODQ2M19nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yOTgwLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGludCBwb3J0LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjk4NS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyOTg2OnN0YXRpYyBpbnQga3N6ODQ2M19jb25uZWN0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjk4Ny1cXHRcXHRcXHRcXHRcXHRlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG8pXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYz0zMDY3PWNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMga3N6OF9waHlsaW5rX21hY19vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0zMDc0LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjMwNzU6Y29uc3Qgc3RydWN0IGtzel9kZXZfb3BzIGtzejg0NjNfZGV2X29wcyA9IHtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzozMDc2OlxcdC5nZXRfcG9ydF9hZGRyID0ga3N6ODQ2M19nZXRfcG9ydF9hZGRyLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTMwNzctXFx0LmNmZ19wb3J0X21lbWJlciA9IGtzejhfY2ZnX3BvcnRfbWVtYmVyLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9MzEwMD1jb25zdCBzdHJ1Y3Qga3N6X2Rldl9vcHMga3N6ODh4eF9kZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMzExMy1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzozMTE0OmNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBrc3o4NDYzX3N3aXRjaF9vcHMgPSB7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MzExNTpcXHQuZ2V0X3RhZ19wcm90b2NvbFxcdD0ga3N6ODQ2M19nZXRfdGFnX3Byb3RvY29sLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjMxMTY6XFx0LmNvbm5lY3RfdGFnX3Byb3RvY29sICAgPSBrc3o4NDYzX2Nvbm5lY3RfdGFnX3Byb3RvY29sLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjMxMTc6XFx0LnNldHVwXFx0XFx0XFx0PSBrc3o4NDYzX3NldHVwLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjMxMTg6XFx0LnRlYXJkb3duXFx0XFx0PSBrc3o4NDYzX3RlYXJkb3duLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjMxMTk6XFx0LnBoeV9yZWFkXFx0XFx0PSBrc3o4NDYzX3BoeV9yZWFkMTYsXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MzEyMDpcXHQucGh5X3dyaXRlXFx0XFx0PSBrc3o4NDYzX3BoeV93cml0ZTE2LFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTMxMjEtXFx0LnBoeWxpbmtfZ2V0X2NhcHNcXHQ9IGtzejhfcGh5bGlua19nZXRfY2FwcyxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTMxNDUtXFx0LnJlc3VtZVxcdFxcdFxcdD0ga3N6X3Jlc3VtZSxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzozMTQ2OlxcdC5nZXRfdHNfaW5mb1xcdFxcdD0ga3N6ODQ2M19nZXRfdHNfaW5mbyxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0zMTQ3LVxcdC5wb3J0X2h3dHN0YW1wX2dldFxcdD0ga3N6X2h3dHN0YW1wX2dldCxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzozMTQ4OlxcdC5wb3J0X2h3dHN0YW1wX3NldFxcdD0ga3N6ODQ2M19od3RzdGFtcF9zZXQsXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMzE0OS1cXHQucG9ydF90eHRzdGFtcFxcdFxcdD0ga3N6X3BvcnRfdHh0c3RhbXAsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguaC0xNC1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguaDoxNTpleHRlcm4gY29uc3Qgc3RydWN0IGtzel9kZXZfb3BzIGtzejg0NjNfZGV2X29wcztcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguaC0xNi1leHRlcm4gY29uc3Qgc3RydWN0IGtzel9kZXZfb3BzIGtzejg3eHhfZGV2X29wcztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5oPTE5PWV4dGVybiBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzIGtzejhfcGh5bGlua19tYWNfb3BzO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5oOjIwOmV4dGVybiBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODQ2M19zd2l0Y2hfb3BzO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5oLTIxLWV4dGVybiBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODd4eF9zd2l0Y2hfb3BzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM9MTk1PWludCBrc3pfcGh5bGlua19tYWNfZW5hYmxlX3R4X2xwaShzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTIwMC1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzoyMDE6c3RhdGljIGNvbnN0IHUxNiBrc3o4NDYzX3JlZ3NbXSA9IHtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0yMDItXFx0W1JFR19TV19NQUNfQUREUl1cXHRcXHQ9IDB4MTAsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0yMjctXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM6MjI4OnN0YXRpYyBjb25zdCB1MzIga3N6ODQ2M19tYXNrc1tdID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTIyOS1cXHRbUE9SVF84MDJfMVBfUkVNQVBQSU5HXVxcdFxcdD0gQklUKDMpLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMjQ5LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jOjI1MDpzdGF0aWMgdTgga3N6ODQ2M19zaGlmdHNbXSA9IHtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0yNTEtXFx0W1ZMQU5fVEFCTEVfTUVNQkVSU0hJUF9TXVxcdD0gMTYsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYz0xMTQxPWNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTExNTEtXFx0XFx0Lm51bV9pcG1zID0gNCxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzoxMTUyOlxcdFxcdC5vcHMgPSBcXHUwMDI2a3N6ODQ2M19kZXZfb3BzLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jOjExNTM6XFx0XFx0LnN3aXRjaF9vcHMgPSBcXHUwMDI2a3N6ODQ2M19zd2l0Y2hfb3BzLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTExNTQtXFx0XFx0LnBoeWxpbmtfbWFjX29wcyA9IFxcdTAwMjZrc3o4OHgzX3BoeWxpbmtfbWFjX29wcyxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTExNTctXFx0XFx0LnJlZ19taWJfY250ID0gTUlCX0NPVU5URVJfTlVNLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jOjExNTg6XFx0XFx0LnJlZ3MgPSBrc3o4NDYzX3JlZ3MsXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM6MTE1OTpcXHRcXHQubWFza3MgPSBrc3o4NDYzX21hc2tzLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jOjExNjA6XFx0XFx0LnNoaWZ0cyA9IGtzejg0NjNfc2hpZnRzLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTExNjEtXFx0XFx0LnN1cHBvcnRzX21paSA9IHtmYWxzZSwgZmFsc2UsIHRydWV9LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM9MzU2Nj1pbnQga3N6X3N3aXRjaF9tYWNhZGRyX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMzYwMS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgRVRIX0FMRU47IGkrKykge1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jOjM2MDI6XFx0XFx0aWYgKGtzel9pc19rc3o4NDYzKGRldikpIHtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0zNjAzLVxcdFxcdFxcdHUxNiBhZGRyMTYgPSAoKHUxNilhZGRyW2ldIFxcdTAwM2NcXHUwMDNjIDgpIHwgYWRkcltpICsgMV07XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYz0zODIzPWludCBrc3pfZHJpdmVfc3RyZW5ndGhfd3JpdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTM4NjEtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM6Mzg2MjpzdGF0aWMgaW50IGtzejg0NjNfY29uZmlndXJlX3N0cmFwc19zcGkoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0zODYzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTM4ODgtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM6Mzg4OTpzdGF0aWMgaW50IGtzejg0NjNfcmVsZWFzZV9zdHJhcHNfc3BpKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMzg5MC17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYz0zODk0PWludCBrc3pfc3dpdGNoX3JlZ2lzdGVyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0zOTA4LVxcdGlmIChkZXYtXFx1MDAzZXJlc2V0X2dwaW8pIHtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzozOTA5OlxcdFxcdGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShkZXYtXFx1MDAzZWRldi1cXHUwMDNlb2Zfbm9kZSwgXFxcIm1pY3JvY2hpcCxrc3o4NDYzXFxcIikpIHtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzozOTEwOlxcdFxcdFxcdHJldCA9IGtzejg0NjNfY29uZmlndXJlX3N0cmFwc19zcGkoZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0zOTExLVxcdFxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0zOTE5LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jOjM5MjA6XFx0XFx0aWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGRldi1cXHUwMDNlZGV2LVxcdTAwM2VvZl9ub2RlLCBcXFwibWljcm9jaGlwLGtzejg0NjNcXFwiKSkge1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jOjM5MjE6XFx0XFx0XFx0cmV0ID0ga3N6ODQ2M19yZWxlYXNlX3N0cmFwc19zcGkoZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0zOTIyLVxcdFxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaD01NjM9c3RhdGljIGlubGluZSBzdHJ1Y3QgcmVnbWFwICprc3pfcmVnbWFwXzMyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaC01NjctXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmg6NTY4OnN0YXRpYyBpbmxpbmUgYm9vbCBrc3pfaXNfa3N6ODQ2MyhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oLTU2OS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaD03OTU9c3RhdGljIGlubGluZSBib29sIGlzX2tzejgoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oLTc5Ny1cXHRyZXR1cm4ga3N6X2lzX2tzejg3eHgoZGV2KSB8fCBrc3pfaXNfa3N6ODh4MyhkZXYpIHx8XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmg6Nzk4OlxcdCAgICAgICBrc3pfaXNfODg5NV9mYW1pbHkoZGV2KSB8fCBrc3pfaXNfa3N6ODQ2MyhkZXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oLTc5OS19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaD04MDE9c3RhdGljIGlubGluZSBib29sIGlzX2tzejg4eHgoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oLTgwMy1cXHRyZXR1cm4ga3N6X2lzX2tzejg4eDMoZGV2KSB8fCBrc3pfaXNfODg5NV9mYW1pbHkoZGV2KSB8fFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oOjgwNDpcXHQgICAgICAga3N6X2lzX2tzejg0NjMoZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaC04MDUtfVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmg9ODM3PXN0YXRpYyBpbmxpbmUgYm9vbCBrc3pfaXNfc2dtaWlfcG9ydChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oLTEwMzYtXFx0XFx0LnBhZF9iaXRzID0gKHJlZ3BhZCksXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oOjEwMzc6XFx0XFx0LnJlYWQgPSBrc3o4NDYzX3NwaV9yZWFkLFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaDoxMDM4OlxcdFxcdC53cml0ZSA9IGtzejg0NjNfc3BpX3dyaXRlLFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaC0xMDM5LVxcdFxcdC5tYXhfcmVnaXN0ZXIgPSBCSVQocmVnYml0cykgLSAxLFxcdFxcdFxcdFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2RjYi5jPTk2PXN0YXRpYyB2b2lkIGtzel9nZXRfZGVmYXVsdF9wb3J0X3ByaW9fcmVnKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCAqcmVnLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfZGNiLmMtMTAyLVxcdFxcdCpzaGlmdCA9IF9fYmZfc2hmKEtTWjhfUE9SVF9CQVNFRF9QUklPX00pO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2RjYi5jOjEwMzpcXHRcXHRpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSlcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9kY2IuYy0xMDQtXFx0XFx0XFx0KnJlZyA9IEtTWjg0NjNfUkVHX1BPUlRfMV9DVFJMXzA7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9kY2IuYz0xMjI9c3RhdGljIHZvaWQga3N6X2dldF9kc2NwX3ByaW9fcmVnKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCAqcmVnLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfZGNiLmMtMTI4LVxcdFxcdCptYXNrID0gR0VOTUFTSygxLCAwKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9kY2IuYzoxMjk6XFx0fSBlbHNlIGlmIChrc3pfaXNfa3N6ODh4MyhkZXYpIHx8IGtzel9pc19rc3o4NDYzKGRldikpIHtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9kY2IuYy0xMzAtXFx0XFx0KnJlZyA9IEtTWjg4WDNfUkVHX1RPU19EU0NQX0NUUkw7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9kY2IuYy0xMzItXFx0XFx0Km1hc2sgPSBHRU5NQVNLKDEsIDApO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2RjYi5jOjEzMzpcXHRcXHRpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSlcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9kY2IuYy0xMzQtXFx0XFx0XFx0KnJlZyA9IEtTWjg0NjNfUkVHX1RPU19EU0NQX0NUUkw7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9kY2IuYz0xNTI9c3RhdGljIHZvaWQga3N6X2dldF9hcHB0cnVzdF9tYXBfYW5kX3JlZyhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfZGNiLmMtMTU5LVxcdFxcdCptYXNrID0gS1NaOF9QT1JUX0RJRkZTRVJWX0VOQUJMRSB8IEtTWjhfUE9SVF84MDJfMVBfRU5BQkxFO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2RjYi5jOjE2MDpcXHRcXHRpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSlcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9kY2IuYy0xNjEtXFx0XFx0XFx0KnJlZyA9IEtTWjg0NjNfUkVHX1BPUlRfMV9DVFJMXzA7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYz0yNzE9c3RhdGljIGludCBrc3pfcHRwX2VuYWJsZV9tb2RlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy0yOTktXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmM6MzAwOmludCBrc3o4NDYzX2dldF90c19pbmZvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMzAxLVxcdFxcdFxcdHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICp0cylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jPTM1Nz1pbnQga3N6X2h3dHN0YW1wX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMzY4LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jOjM2OTpzdGF0aWMgaW50IGtzejg0NjNfc2V0X2h3dHN0YW1wX2NvbmZpZyhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTM3MC1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGtzel9wb3J0ICpwcnQsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy00MTUtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmM6NDE2OmludCBrc3o4NDYzX2h3dHN0YW1wX3NldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTQxNy1cXHRcXHRcXHQgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZyxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTQyNS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYzo0MjY6XFx0cmV0ID0ga3N6ODQ2M19zZXRfaHd0c3RhbXBfY29uZmlnKGRldiwgcHJ0LCBjb25maWcpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTQyNy1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmM9NjQ3PXN0YXRpYyB2b2lkIGtzel9wdHBfdHh0c3RhbXBfc2tiKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy02NjQtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmM6NjY1OnN0YXRpYyB2b2lkIGtzejg0NjNfc2V0X3BkZWxheXJlc3BfZmxhZyhzdHJ1Y3Qga3N6X3BvcnQgKnBydCxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy02NjYtXFx0XFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTY3MS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYzo2NzI6XFx0aWYgKCFrc3pfaXNfa3N6ODQ2MyhwcnQtXFx1MDAzZWtzel9kZXYpKVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTY3My1cXHRcXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYz02OTA9dm9pZCBrc3pfcG9ydF9kZWZlcnJlZF94bWl0KHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy03MDUtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmM6NzA2OlxcdGtzejg0NjNfc2V0X3BkZWxheXJlc3BfZmxhZyhwcnQsIHNrYik7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtNzA3LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmM9MTA5OD1zdGF0aWMgaW50IGtzel9yZWFkX3RzKHN0cnVjdCBrc3pfcG9ydCAqcG9ydCwgdTE2IHJlZywgdTMyICp0cylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTExMDYtXFx0ICovXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmM6MTEwNzpcXHRpZiAoa3N6X2lzX2tzejg0NjMocG9ydC1cXHUwMDNla3N6X2RldikpIHtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy0xMTA4LVxcdFxcdGNvbnN0IHN0cnVjdCBrc3pfZGV2X29wcyAqb3BzID0gcG9ydC1cXHUwMDNla3N6X2Rldi1cXHUwMDNlZGV2X29wcztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jPTEyNDU9c3RhdGljIGludCBrc3pfcHRwX21zZ19pcnFfc2V0dXAoc3RydWN0IGtzel9wb3J0ICpwb3J0LCB1OCBuKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMTI3NC1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYzoxMjc1OnN0YXRpYyBpbnQga3N6ODQ2M19wdHBfcG9ydF9pcnFfc2V0dXAoc3RydWN0IGtzel9pcnEgKnB0cGlycSxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy0xMjc2LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBrc3pfcG9ydCAqcG9ydCwgaW50IGh3X2lycSlcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTEzMTgtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmM6MTMxOTpzdGF0aWMgdm9pZCBrc3o4NDYzX3B0cF9wb3J0X2lycV90ZWFyZG93bihzdHJ1Y3Qga3N6X3BvcnQgKnBvcnQpXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMTMyMC17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy0xMzI2LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jOjEzMjc6aW50IGtzejg0NjNfcHRwX2lycV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMTMyOC17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy0xMzU2LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jOjEzNTc6XFx0cmV0ID0ga3N6ODQ2M19wdHBfcG9ydF9pcnFfc2V0dXAocHRwaXJxLCBwb3J0MSxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy0xMzU4LVxcdFxcdFxcdFxcdFxcdCBLU1o4NDYzX1BUUF9QT1JUMV9JTlRfU1RBUlQgLSBLU1o4NDYzX1BUUF9JTlRfU1RBUlQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMTM2MS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYzoxMzYyOlxcdHJldCA9IGtzejg0NjNfcHRwX3BvcnRfaXJxX3NldHVwKHB0cGlycSwgcG9ydDIsXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMTM2My1cXHRcXHRcXHRcXHRcXHQgS1NaODQ2M19QVFBfUE9SVDJfSU5UX1NUQVJUIC0gS1NaODQ2M19QVFBfSU5UX1NUQVJUKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTEzNzQtZnJlZV9wb3J0MjpcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYzoxMzc1OlxcdGtzejg0NjNfcHRwX3BvcnRfaXJxX3RlYXJkb3duKHBvcnQyKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy0xMzc2LWZyZWVfcG9ydDE6XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmM6MTM3NzpcXHRrc3o4NDYzX3B0cF9wb3J0X2lycV90ZWFyZG93bihwb3J0MSk7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMTM3OC1yZWxlYXNlX2RvbWFpbjpcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTEzODMtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmM6MTM4NDp2b2lkIGtzejg0NjNfcHRwX2lycV9mcmVlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy0xMzg1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTEzOTEtXFx0ZnJlZV9pcnEocHRwaXJxLVxcdTAwM2VpcnFfbnVtLCBwdHBpcnEpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jOjEzOTI6XFx0a3N6ODQ2M19wdHBfcG9ydF9pcnFfdGVhcmRvd24ocG9ydDIpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jOjEzOTM6XFx0a3N6ODQ2M19wdHBfcG9ydF9pcnFfdGVhcmRvd24ocG9ydDEpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTEzOTQtXFx0aXJxX2RvbWFpbl9yZW1vdmUocHRwaXJxLVxcdTAwM2Vkb21haW4pO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg9NDA9aW50IGtzel9nZXRfdHNfaW5mbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oLTQxLVxcdFxcdCAgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqdHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oOjQyOmludCBrc3o4NDYzX2dldF90c19pbmZvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmgtNDMtXFx0XFx0XFx0c3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKnRzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oPTQ2PWludCBrc3pfaHd0c3RhbXBfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC00OC1cXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg6NDk6aW50IGtzejg0NjNfaHd0c3RhbXBfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmgtNTAtXFx0XFx0XFx0IHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaD01Nz12b2lkIGtzel9wdHBfaXJxX2ZyZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCB1OCBwKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaDo1ODppbnQga3N6ODQ2M19wdHBfaXJxX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg6NTk6dm9pZCBrc3o4NDYzX3B0cF9pcnFfZnJlZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oLTYwLVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg9ODA9c3RhdGljIGlubGluZSB2b2lkIGtzel9wdHBfaXJxX2ZyZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCB1OCBwKSB7fVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oLTgxLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oOjgyOnN0YXRpYyBpbmxpbmUgaW50IGtzejg0NjNfcHRwX2lycV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmgtODMte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmgtODYtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg6ODc6c3RhdGljIGlubGluZSB2b2lkIGtzejg0NjNfcHRwX2lycV9mcmVlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykge31cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC04OC1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC04OS0jZGVmaW5lIGtzel9nZXRfdHNfaW5mbyBOVUxMXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg6OTA6I2RlZmluZSBrc3o4NDYzX2dldF90c19pbmZvIE5VTExcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC05MS1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oLTk0LSNkZWZpbmUga3N6X2h3dHN0YW1wX3NldCBOVUxMXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg6OTU6I2RlZmluZSBrc3o4NDYzX2h3dHN0YW1wX3NldCBOVUxMXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmgtOTYtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYz00MT1LU1pfUkVHTUFQX1RBQkxFKGtzejk0NzcsIDMyLCBLU1o5NDc3X1NQSV9BRERSX1NISUZULFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmMtNDMtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmM6NDQ6c3RhdGljIHUxNiBrc3o4NDYzX3JlZyh1MTYgcmVnLCBzaXplX3Qgc2l6ZSlcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYy00NS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYy02MC1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYzo2MTpzdGF0aWMgaW50IGtzejg0NjNfc3BpX3JlYWQodm9pZCAqY29udGV4dCxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYy02Mi1cXHRcXHRcXHQgICAgY29uc3Qgdm9pZCAqcmVnLCBzaXplX3QgcmVnX3NpemUsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYy03My1cXHRtZW1jcHkoXFx1MDAyNmNtZCwgcmVnLCBzaXplb2YodTE2KSk7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmM6NzQ6XFx0Y21kID0ga3N6ODQ2M19yZWcoY21kLCB2YWxfc2l6ZSk7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmMtNzUtXFx0LyogU1BJIGNvbW1hbmQgdXNlcyBiaWctZW5kaWFuIGZvcm1hdC4gKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jLTk2LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jOjk3OnN0YXRpYyBpbnQga3N6ODQ2M19zcGlfd3JpdGUodm9pZCAqY29udGV4dCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGNvdW50KVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jLTk4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jLTEwOC1cXHRtZW1jcHkoXFx1MDAyNmNtZCwgZGF0YSwgc2l6ZW9mKHUxNikpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jOjEwOTpcXHRjbWQgPSBrc3o4NDYzX3JlZyhjbWQsIHZhbF9zaXplKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYy0xMTAtXFx0Y21kIHw9ICgxIFxcdTAwM2NcXHUwMDNjIChLU1o4NDYzX1NQSV9BRERSX1NISUZUICsgS1NaODQ2M19TUElfVFVSTkFST1VORF9TSElGVCkpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmMtMTMzLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jOjEzNDpLU1o4NDYzX1JFR01BUF9UQUJMRShrc3o4NDYzLCBLU1o4NDYzX1NQSV9BRERSX1NISUZULCAwLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jLTEzNS1cXHRcXHQgICAgIEtTWjg0NjNfU1BJX0FERFJfQUxJR04pO1xcbi0tXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIzOjA1OjQzLjM3Mjk4NjI5NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxMTY3NjkyOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIHRoZSBGdXp6YWJpbGl0eSBvZiBhIERTQSBTd2l0Y2ggUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIHRvdWNoZXMgYSBmZXcgZmlsZXM6IGBrc3o4LmNgLCBga3N6X2NvbW1vbi5jYCwgYGtzel9wdHAuY2AsIGFuZCBgdGFnX2tzei5jYC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciBJIGNhbiBldmVuICpyZWFjaCogdGhpcyBjb2RlIHdpdGhpbiB0aGUgUUVNVSBlbnZpcm9ubWVudC4gRFNBIHN3aXRjaGVzLCBpbiBnZW5lcmFsLCBuZWVkIGEgaGFyZHdhcmUgZGV2aWNlIHRvIGJlIHByb2JlZC4gVGhlIE1pY3JvY2hpcCBkcml2ZXJzIGFyZSBga3N6X3NwaS5jYCwgYGtzel9pMmMuY2AsIG9yIGBrc3pfbWRpby5jYC5cblxuTm93LCBsZXQncyBzZWUsIHdoYXQgZG9lcyB0aGUgcHJvbXB0IHNheT8gXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVVcIi4gSXQgZG9lc24ndCAqZXhwbGljaXRseSogbWVudGlvbiBEU0Egc3dpdGNoZXMsIGJ1dCB0aGVzZSB1c3VhbGx5IGNvbm5lY3QgdmlhIFNQSS9JMkMvTURJTy5cblxuVGhlIHJlYWwgcXVlc3Rpb24gaXM6IENhbiBzeXprYWxsZXIgZWZmZWN0aXZlbHkgZnV6eiBTUEkvSTJDL01ESU8gZGV2aWNlcyBpbiBhIHdheSB0aGF0IHdvdWxkIGFsbG93IG1lIHRvIHJlYWNoIGFuZCB0ZXN0IHRoZSByZWxldmFudCBjb2RlIHBhdGhzPyBJIGtub3cgc3l6a2FsbGVyIGhhcyBzb21lIGxpbWl0ZWQgc3VwcG9ydCBmb3IgSTJDIGFuZCBTUEkgdGhyb3VnaCBgL2Rldi9pMmMtKmAgYW5kIGAvZGV2L3NwaWRldmAsIGJ1dCBpdCdzIG5vdCBzdHJhaWdodGZvcndhcmQgdG8gaW5zdGFudGlhdGUgYSAqc3BlY2lmaWMqIGRyaXZlciB1bmxlc3MgdGhlcmUncyBhIG1vY2sgb3IgYSB2aXJ0dWFsIGRldmljZSBhdmFpbGFibGUuXG5cbkhhbmcgb24uLi4gZG9lcyBzeXprYWxsZXIgaGF2ZSBzb21ldGhpbmcgbGlrZSBgc3l6X2kyY19zZXR1cGA/IE5vcGUsIG5vdGhpbmcgbGlrZSB0aGF0LiBJdCBoYXMgYHN5el91c2JfY29ubmVjdGAsIGBzeXpfODAyMTFfaW5qZWN0X2ZyYW1lYCwgZXRjLiwgYnV0IG5vdGhpbmcgZGlyZWN0bHkgdGFyZ2V0ZWQgYXQgc2V0dGluZyB1cCBhIHNwZWNpZmljIEkyQyBvciBTUEkgZGV2aWNlLlxuXG5Pa2F5LCBzbyB3aGF0IGFib3V0IHVzaW5nIGBuZXRsaW5rYCB0byBjb25maWd1cmUgdGhlIERTQSBzd2l0Y2g/IFRoYXQgY291bGQgd29yayAqaWYqIHRoZSBzd2l0Y2ggaXMgYWxyZWFkeSBwcm9iZWQuIEluIFFFTVUsIHRoYXQncyB1bmxpa2VseSB3aXRob3V0IGEgZGV2aWNlIHRyZWUgb3ZlcmxheSBvciBzb21lIGNsZXZlciB0cmlja2VyeS4gRG9lcyBzeXprYWxsZXIgb2ZmZXIgYW4gZWFzeSB3YXkgdG8gaW5qZWN0IGRldmljZSB0cmVlIG5vZGVzIG9yIHVzZSBgc3l6X2Rldm1lbWAgdG8gZmFrZSBkZXZpY2VzPyBIbW0sIEkgZG9uJ3QgdGhpbmsgaXQgaGFzIGEgKmdlbmVyaWMqIG1ldGhvZCBmb3IgcHJvYmluZyBJMkMvU1BJIGRldmljZXMgdW5sZXNzIHRoZXkncmUgcHJlc2VudCBpbiB0aGUgZGVmYXVsdCBRRU1VIGRldmljZSB0cmVlLiBBbmQgdGhlc2UgYWxtb3N0IGNlcnRhaW5seSB3b24ndCBiZSB0aGVyZS5cblxuQ291bGQgc29tZXRoaW5nIGxpa2UgYGRzYV9sb29wYCB3b3JrPyBXZWxsLCBgZHNhX2xvb3BgIGlzIGEgbW9jayBEU0Egc3dpdGNoLCBidXQgdGhpcyBwYXRjaCBpcyBzcGVjaWZpY2FsbHkgZm9yIHRoZSBga3N6ODQ2M2AsIGEgcGFydGljdWxhciBNaWNyb2NoaXAgc3dpdGNoLCBzbyB1c2luZyBhIGdlbmVyaWMgbW9jayB3b24ndCB0ZXN0IHRoZSBuZXcgY29kZS5cblxuUmlnaHQsIHRpbWUgdG8gdGFrZSBhIHF1aWNrIHBlZWsgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgYHN5el9gIHBzZXVkby1zeXNjYWxscyBzcGVjaWZpY2FsbHkgZm9yIFNQSSBvciBJMkMgZGV2aWNlcyB0aGF0IEknbSBvdmVybG9va2luZy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzQ0OCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMzowNTo1MS40ODk3NTg2NDdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MDQ4MDM3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzeXpfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInN5cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIzOjA1OjUxLjU5NDgxNTgyNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNDcxMTk3NjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnV6emFiaWxpdHkgb2YgdGhlIEtTWjg0NjMgRHJpdmVyKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBJIGNhbid0IGp1c3QgYGdyZXBwZXJgIHRocm91Z2ggYHN5cy9gIG9yIGFueXRoaW5nIGNvbnRhaW5pbmcgXCJzeXpfXCIgYmVjYXVzZSB0aG9zZSBhcmUgU3l6a2FsbGVyJ3MgcHNldWRvLXN5c2NhbGxzLCBub3Qga2VybmVsIGNvZGUuIEkgbmVlZCB0byByZWx5IG9uIG15IGV4aXN0aW5nIGtub3dsZWRnZSBvciB1c2UgYHJlYWQtZmlsZWAgaWYgbmVjZXNzYXJ5LCBidXQgSSBkb24ndCB0aGluayBJJ2xsIG5lZWQgaXQgdGhpcyB0aW1lLiBUaGUgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIHRoZSBga3N6ODQ2M2AgZHJpdmVyIGlzIGV2ZW4gZnV6emFibGUuXG5cbk5ldHdvcmsgZHJpdmVycyBmb3Igc3BlY2lmaWMgaGFyZHdhcmUgYXJlIHVzdWFsbHkgdW5yZWFjaGFibGUgaW4gUUVNVSBiZWNhdXNlIHRoZSBoYXJkd2FyZSBpc24ndCBwcmVzZW50LiBCdXQsIGBuZXQvZHNhL3RhZ19rc3ouY2AgY29udGFpbnMgYSB0YWdnaW5nIHByb3RvY29sLiBJcyAqdGhhdCogYWNjZXNzaWJsZT8gRFNBIHRhZ2dpbmcgcHJvdG9jb2xzIGFyZSB1c2VkIHdoZW4gYSBEU0Egc3dpdGNoIGlzIGF0dGFjaGVkLiBJZiB0aGVyZSdzIG5vIERTQSBzd2l0Y2gsIHRoZXJlJ3Mgbm8gdGFnZ2luZyBwcm90b2NvbC4gQ2FuIGEgdXNlciwgcGVyaGFwcywgY3JlYXRlIGEgZHVtbXkgbmV0d29yayBkZXZpY2UgYW5kIHNldCBpdHMgRFNBIHRhZyBwcm90b2NvbD8gTm8sIGJlY2F1c2UgRFNBIHRhZyBwcm90b2NvbHMgYXJlIHNldCBieSB0aGUgRFNBIGNvcmUgdXBvbiBzd2l0Y2ggcHJvYmUsIHNvIHRoZXJlJ3Mgbm8gd2F5IHRvIGRvIHRoaXMgYXQgdXNlciBzcGFjZS5cblxuSXMgdGhlcmUgYW55IHZpcnR1YWwgRFNBIHN3aXRjaD8gYGRzYV9sb29wYCBpcyBvbmUsIGJ1dCBpdCB1c2VzIGBEU0FfVEFHX1BST1RPX05PTkVgIG9yIGBEU0FfVEFHX1BST1RPX0RTQWAuIENhbiBhIHVzZXItc3BhY2UgcHJvZ3JhbSB0cmlnZ2VyIGBrc3o4NDYzX3htaXRgIG9yIGBrc3o4NDYzX3JjdmA/IExldCdzIHNlZSBpZiBJIGNhbiBjb25maWd1cmUgYGRzYV9sb29wYCB0byB1c2UgdGhlIGBrc3o4NDYzYCB0YWcgcHJvdG9jb2wuIE5vLCBpdCBsb29rcyBsaWtlIGBkc2FfbG9vcGAgZWl0aGVyIGhhcmRjb2RlcyB0aGUgcHJvdG9jb2wgb3IgaXQncyBmaXhlZCwgc28gdGhhdCdzIG5vdCBnb2luZyB0byB3b3JrLlxuXG5Eb2VzIFN5emthbGxlciBldmVuICpoYXZlKiBhIGBkc2FfbG9vcGAgaW5zdGFuY2U/IE5vLCBpdCB1c3VhbGx5IGRvZXNuJ3QgZnV6eiBzcGVjaWZpYyBEU0EgdGFnZ2VycyB1bmxlc3MgdGhleSBjYW4gYmUgYXR0YWNoZWQgdG8gYSBkdW1teSBkZXZpY2UuIENhbiBJIGF0dGFjaCBhIERTQSB0YWdnZXIgdG8gYSB2ZXRoIG9yIGR1bW15IGRldmljZSB1c2luZyBhIG5ldGxpbmsgY29tbWFuZD8gTm8sIERTQSBpcyBzdHJpY3RseSBmb3IgRFNBIHN3aXRjaCB0cmVlcy5cblxuQWxyaWdodCwgdGltZSB0byBldmFsdWF0ZSBpZiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpcyBhcHByb3ByaWF0ZSBoZXJlLiBUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBhIEtTWjg0NjMgc3dpdGNoIGluIHRoZSBNaWNyb2NoaXAgRFNBIGRyaXZlci4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciBmb3IgYW4gU1BJL0kyQy9NRElPIGNvbm5lY3RlZCBzd2l0Y2guIFNpbmNlIFFFTVUgZG9lc24ndCBlbXVsYXRlIHRoZSBLU1o4NDYzIHN3aXRjaCwgdGhlIGRyaXZlcidzIGBwcm9iZWAgZnVuY3Rpb24gd2lsbCBuZXZlciBzdWNjZWVkLCBhbmQgdGhlIHN3aXRjaCB3aWxsIG5ldmVyIGJlIHJlZ2lzdGVyZWQuIFRoZXJlZm9yZSwgdGhlIGNvZGUgaW4gYGtzei5jYCwgYGtzel9wdHAuY2AsIGBrc3pfY29tbW9uLmNgLCBhbmQgYHRhZ19rc3ouY2AgKHdoaWNoIGlzIG9ubHkgdXNlZCB3aGVuIHRoZSBzd2l0Y2ggaXMgcmVnaXN0ZXJlZCkgaXMgdW5yZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LlxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIHRob3VnaCwgYWJvdXQgYHRhZ19rc3ouY2AuIElzIHRoZXJlICphbnkqIHdheSB0byBmb3JjZSBhIG5ldHdvcmsgaW50ZXJmYWNlIHRvIHVzZSBhIHNwZWNpZmljIERTQSB0YWdnZXI/IEluIGBuZXQvZHNhL3RhZy5jYCBvciBgbmV0L2RzYS9kc2EuY2AsIHRoZSB0YWdnZXIgYXNzaWdubWVudCBpcyBiYXNlZCBvbiB0aGUgc3dpdGNoIHRyZWUuIFRoZXJlIG1pZ2h0IGJlIGEgc3lzZnMgb3IgbmV0bGluayBhdHRyaWJ1dGUgdG8gY2hhbmdlIHRoZSBEU0EgdGFnZ2VyIG9mIGEgc3dpdGNoIHRyZWUsIGJ1dCBhZ2FpbiwgSSAqbmVlZCogYSBzd2l0Y2ggdHJlZSB0byBleGlzdC4gQ2FuIFN5emthbGxlciBjcmVhdGUgYSBzd2l0Y2ggdHJlZT8gVGhlcmUncyBgZHNhX2xvb3BgLCB3aGljaCBpcyBhIG1vY2sgRFNBIHN3aXRjaCB0aGF0IGNhbiBiZSBwcm9iZWQuIExldCdzIG1ha2Ugc3VyZSBgZHNhX2xvb3BgIGlzIGVuYWJsZWQgaW4gU3l6a2FsbGVyLiBFdmVuIGlmIGl0ICppcyogZW5hYmxlZCwgY2FuIGl0IGFjdHVhbGx5IHVzZSB0aGUgYGtzejg0NjNgIHRhZ2dlcj8gTGV0J3MgY2hlY2sgdGhlIGBkc2FfbG9vcGAgY29kZS4gSXQncyBsb29raW5nIHByZXR0eSBkaW0sIGJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NTc4LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIzOjA2OjAyLjA2NjAxNTEyMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTAwMTE0MDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRzYV9sb29wXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kc2EvZHNhLnJzdD0xNTk9YWxsIGF0dGFjaGVkIHN3aXRjaCBwb3J0cyBtdXN0IGJlIGRvd24gd2hpbGUgZG9pbmcgdGhpcykuXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RzYS9kc2EucnN0LTE2MC1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZHNhL2RzYS5yc3Q6MTYxOkl0IGlzIGRlc2lyYWJsZSB0aGF0IGFsbCB0YWdnaW5nIHByb3RvY29scyBhcmUgdGVzdGFibGUgd2l0aCB0aGUgYGBkc2FfbG9vcGBgXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RzYS9kc2EucnN0LTE2Mi1tb2NrdXAgZHJpdmVyLCB3aGljaCBjYW4gYmUgYXR0YWNoZWQgdG8gYW55IG5ldHdvcmsgaW50ZXJmYWNlLiBUaGUgZ29hbCBpcyB0aGF0XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU9Mz1iY20tc2YyLW9ianNcXHRcXHRcXHQ6PSBiY21fc2YyLm8gYmNtX3NmMl9jZnAub1xcbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19ORVRfRFNBX0xPT1ApXFx0Kz0gZHNhX2xvb3Aub1xcbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZS01LW9iai0kKENPTkZJR19ORVRfRFNBX0tTODk5NSkgXFx0Kz0ga3M4OTk1Lm9cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1OnN0cnVjdCBkc2FfbG9vcF92bGFuIHtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNi1cXHR1MTYgbWVtYmVycztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI5LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMwOnN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMxLVxcdGNoYXIgbmFtZVtFVEhfR1NUUklOR19MRU5dO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzQtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzU6ZW51bSBkc2FfbG9vcF9taWJfY291bnRlcnMge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM2LVxcdERTQV9MT09QX1BIWV9SRUFEX09LLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDItXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDM6c3RydWN0IGRzYV9sb29wX3BvcnQge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ0OlxcdHN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkgbWliW19fRFNBX0xPT1BfQ05UX01BWF07XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDUtXFx0dTE2IHB2aWQ7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0OTpzdHJ1Y3QgZHNhX2xvb3BfcHJpdiB7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTAtXFx0c3RydWN0IG1paV9idXNcXHQqYnVzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxLVxcdHVuc2lnbmVkIGludFxcdHBvcnRfYmFzZTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MjpcXHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiB2bGFuc1tWTEFOX05fVklEXTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01My1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjU0OlxcdHN0cnVjdCBkc2FfbG9vcF9wb3J0IHBvcnRzW0RTQV9NQVhfUE9SVFNdO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTU1LX07XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTc6c3RydWN0IGRzYV9sb29wX3BkYXRhIHtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01OC1cXHQvKiBNdXN0IGJlIGZpcnN0LCBzdWNoIHRoYXQgZHNhX3JlZ2lzdGVyX3N3aXRjaCgpIGNhbiBhY2Nlc3MgdGhpc1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNjYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Njc6c3RhdGljIHN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkgZHNhX2xvb3BfbWlic1tdID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTY4LVxcdFtEU0FfTE9PUF9QSFlfUkVBRF9PS11cXHQ9IHsgXFxcInBoeV9yZWFkX29rXFxcIiwgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTc1PXN0YXRpYyBzdHJ1Y3QgbWRpb19kZXZpY2UgKnN3aXRjaF9tZGlvZGV2O1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTc2LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjc3OmVudW0gZHNhX2xvb3BfZGV2bGlua19yZXNvdXJjZV9pZCB7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNzgtXFx0RFNBX0xPT1BfREVWTElOS19QQVJBTV9JRF9OT05FLCAgLyogREVWTElOS19SRVNPVVJDRV9JRF9QQVJFTlRfVE9QICovXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy04MS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo4MjpzdGF0aWMgdTY0IGRzYV9sb29wX2RldmxpbmtfdnR1X2dldCh2b2lkICpwcml2KVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTgzLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo4NDpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTg1LVxcdHVuc2lnbmVkIGludCBpLCBjb3VudCA9IDA7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6ODY6XFx0c3RydWN0IGRzYV9sb29wX3ZsYW4gKnZsO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTg3LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtOTYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6OTc6c3RhdGljIGludCBkc2FfbG9vcF9zZXR1cF9kZXZsaW5rX3Jlc291cmNlcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtOTgte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTk5LVxcdHN0cnVjdCBkZXZsaW5rX3Jlc291cmNlX3NpemVfcGFyYW1zIHNpemVfcGFyYW1zO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEwMDpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMDEtXFx0aW50IGVycjtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTExNS1cXHRcXHRcXHRcXHRcXHQgICAgICBEU0FfTE9PUF9ERVZMSU5LX1BBUkFNX0lEX1ZUVSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxMTY6XFx0XFx0XFx0XFx0XFx0ICAgICAgZHNhX2xvb3BfZGV2bGlua192dHVfZ2V0LCBwcyk7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTE3LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTI0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEyNTpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGRzYV9sb29wX2dldF9wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTI2LVxcdFxcdFxcdFxcdFxcdFxcdCAgIGludCBwb3J0LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTMzLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEzNDpzdGF0aWMgaW50IGRzYV9sb29wX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzUte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEzNjpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzctXFx0dW5zaWduZWQgaW50IGk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzktXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRzLVxcdTAwM2VudW1fcG9ydHM7IGkrKylcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDA6XFx0XFx0bWVtY3B5KHBzLVxcdTAwM2Vwb3J0c1tpXS5taWIsIGRzYV9sb29wX21pYnMsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTQxOlxcdFxcdCAgICAgICBzaXplb2YoZHNhX2xvb3BfbWlicykpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0NC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDU6XFx0cmV0dXJuIGRzYV9sb29wX3NldHVwX2RldmxpbmtfcmVzb3VyY2VzKGRzKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNDYtfVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0Ny1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDg6c3RhdGljIHZvaWQgZHNhX2xvb3BfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0OS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNTItXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTUzOnN0YXRpYyBpbnQgZHNhX2xvb3BfZ2V0X3NzZXRfY291bnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHNzZXQpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTU0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE2MC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNjE6c3RhdGljIHZvaWQgZHNhX2xvb3BfZ2V0X3N0cmluZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNjItXFx0XFx0XFx0XFx0IHUzMiBzdHJpbmdzZXQsIHVpbnQ4X3QgKmRhdGEpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTYzLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNjQ6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTY1LVxcdHVuc2lnbmVkIGludCBpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTczLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE3NDpzdGF0aWMgdm9pZCBkc2FfbG9vcF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE3NS1cXHRcXHRcXHRcXHQgICAgICAgdWludDY0X3QgKmRhdGEpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTc2LXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNzc6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTc4LVxcdHVuc2lnbmVkIGludCBpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTgzLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE4NDpzdGF0aWMgaW50IGRzYV9sb29wX3BoeV9yZWFkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCByZWdudW0pXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTg1LXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxODY6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTg3LVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTk4LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE5OTpzdGF0aWMgaW50IGRzYV9sb29wX3BoeV93cml0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIwMC1cXHRcXHRcXHQgICAgICBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjAxLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyMDI6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjAzLVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjE0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjIxNTpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfYnJpZGdlX2pvaW4oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMTYtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZHNhX2JyaWRnZSBicmlkZ2UsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMjUtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjI2OnN0YXRpYyB2b2lkIGRzYV9sb29wX3BvcnRfYnJpZGdlX2xlYXZlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjI3LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZHNhX2JyaWRnZSBicmlkZ2UpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMzItXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjMzOnN0YXRpYyB2b2lkIGRzYV9sb29wX3BvcnRfc3RwX3N0YXRlX3NldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIzNC1cXHRcXHRcXHRcXHRcXHR1OCBzdGF0ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIzOS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyNDA6c3RhdGljIGludCBkc2FfbG9vcF9wb3J0X3ZsYW5fZmlsdGVyaW5nKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjQxLVxcdFxcdFxcdFxcdFxcdGJvb2wgdmxhbl9maWx0ZXJpbmcsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNDktXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjUwOnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF92bGFuX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI1MS1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfdmxhbiAqdmxhbixcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI1NS1cXHRib29sIHB2aWQgPSB2bGFuLVxcdTAwM2VmbGFncyBcXHUwMDI2IEJSSURHRV9WTEFOX0lORk9fUFZJRDtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyNTY6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjU3LVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1ODpcXHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiAqdmw7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjU5LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjgyLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI4MzpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODQtXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X29ial9wb3J0X3ZsYW4gKnZsYW4pXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODYtXFx0Ym9vbCB1bnRhZ2dlZCA9IHZsYW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19VTlRBR0dFRDtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyODc6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjg4LVxcdHUxNiBwdmlkID0gcHMtXFx1MDAzZXBvcnRzW3BvcnRdLnB2aWQ7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjg5LVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI5MDpcXHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiAqdmw7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjkxLVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEwLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMxMTpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfY2hhbmdlX210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMxMi1cXHRcXHRcXHRcXHQgICAgaW50IG5ld19tdHUpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEzLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMTQ6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnByaXYgPSBkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMTUtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMjAtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzIxOnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF9tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzIyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMyNS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMjY6c3RhdGljIHZvaWQgZHNhX2xvb3BfcGh5bGlua19nZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHNhLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMjctXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMzMtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzM0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgZHNhX2xvb3BfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNTpcXHQuZ2V0X3RhZ19wcm90b2NvbFxcdD0gZHNhX2xvb3BfZ2V0X3Byb3RvY29sLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNjpcXHQuc2V0dXBcXHRcXHRcXHQ9IGRzYV9sb29wX3NldHVwLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNzpcXHQudGVhcmRvd25cXHRcXHQ9IGRzYV9sb29wX3RlYXJkb3duLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzODpcXHQuZ2V0X3N0cmluZ3NcXHRcXHQ9IGRzYV9sb29wX2dldF9zdHJpbmdzLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzOTpcXHQuZ2V0X2V0aHRvb2xfc3RhdHNcXHQ9IGRzYV9sb29wX2dldF9ldGh0b29sX3N0YXRzLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0MDpcXHQuZ2V0X3NzZXRfY291bnRcXHRcXHQ9IGRzYV9sb29wX2dldF9zc2V0X2NvdW50LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0MTpcXHQuZ2V0X2V0aHRvb2xfcGh5X3N0YXRzXFx0PSBkc2FfbG9vcF9nZXRfZXRodG9vbF9zdGF0cyxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDI6XFx0LnBoeV9yZWFkXFx0XFx0PSBkc2FfbG9vcF9waHlfcmVhZCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDM6XFx0LnBoeV93cml0ZVxcdFxcdD0gZHNhX2xvb3BfcGh5X3dyaXRlLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NDpcXHQucG9ydF9icmlkZ2Vfam9pblxcdD0gZHNhX2xvb3BfcG9ydF9icmlkZ2Vfam9pbixcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDU6XFx0LnBvcnRfYnJpZGdlX2xlYXZlXFx0PSBkc2FfbG9vcF9wb3J0X2JyaWRnZV9sZWF2ZSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDY6XFx0LnBvcnRfc3RwX3N0YXRlX3NldFxcdD0gZHNhX2xvb3BfcG9ydF9zdHBfc3RhdGVfc2V0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NzpcXHQucG9ydF92bGFuX2ZpbHRlcmluZ1xcdD0gZHNhX2xvb3BfcG9ydF92bGFuX2ZpbHRlcmluZyxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDg6XFx0LnBvcnRfdmxhbl9hZGRcXHRcXHQ9IGRzYV9sb29wX3BvcnRfdmxhbl9hZGQsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQ5OlxcdC5wb3J0X3ZsYW5fZGVsXFx0XFx0PSBkc2FfbG9vcF9wb3J0X3ZsYW5fZGVsLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1MDpcXHQucG9ydF9jaGFuZ2VfbXR1XFx0PSBkc2FfbG9vcF9wb3J0X2NoYW5nZV9tdHUsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzUxOlxcdC5wb3J0X21heF9tdHVcXHRcXHQ9IGRzYV9sb29wX3BvcnRfbWF4X210dSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTI6XFx0LnBoeWxpbmtfZ2V0X2NhcHNcXHQ9IGRzYV9sb29wX3BoeWxpbmtfZ2V0X2NhcHMsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzUzLX07XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1NTpzdGF0aWMgaW50IGRzYV9sb29wX2Rydl9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU2LXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTc6XFx0c3RydWN0IGRzYV9sb29wX3BkYXRhICpwZGF0YSA9IG1kaW9kZXYtXFx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1ODpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHM7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU5LVxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM4Mi1cXHRkcy1cXHUwMDNlZGV2ID0gXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozODM6XFx0ZHMtXFx1MDAzZW9wcyA9IFxcdTAwMjZkc2FfbG9vcF9kcml2ZXI7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzg0LVxcdGRzLVxcdTAwM2Vwcml2ID0gcHM7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zOTYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Mzk3OnN0YXRpYyB2b2lkIGRzYV9sb29wX2Rydl9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM5OC17XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzk5LVxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRldl9nZXRfZHJ2ZGF0YShcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MDA6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQwMS1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQxMC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MTE6c3RhdGljIHZvaWQgZHNhX2xvb3BfZHJ2X3NodXRkb3duKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MTIte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDIyLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQyMzpzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIGRzYV9sb29wX2RydiA9IHtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjQtXFx0Lm1kaW9kcnYuZHJpdmVyXFx0PSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjYtXFx0fSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Mjc6XFx0LnByb2JlXFx0PSBkc2FfbG9vcF9kcnZfcHJvYmUsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDI4OlxcdC5yZW1vdmVcXHQ9IGRzYV9sb29wX2Rydl9yZW1vdmUsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDI5OlxcdC5zaHV0ZG93biA9IGRzYV9sb29wX2Rydl9zaHV0ZG93bixcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzAtfTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzEtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDMyOnN0YXRpYyBpbnQgZHNhX2xvb3BfYnVzX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzMtXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydilcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzQte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQzNTpcXHRyZXR1cm4gZHJ2ID09IFxcdTAwMjZkc2FfbG9vcF9kcnYubWRpb2Rydi5kcml2ZXI7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDM2LX1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzctXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDM4OnN0YXRpYyB2b2lkIGRzYV9sb29wX3BoeWRldnNfdW5yZWdpc3Rlcih2b2lkKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQzOS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NDUtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDQ2OnN0YXRpYyBpbnQgX19pbml0IGRzYV9sb29wX2NyZWF0ZV9zd2l0Y2hfbWRpb2Rldih2b2lkKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ0Ny17XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDQ4OlxcdHN0YXRpYyBzdHJ1Y3QgZHNhX2xvb3BfcGRhdGEgZHNhX2xvb3BfcGRhdGEgPSB7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDQ5LVxcdFxcdC5jZCA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3MC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NzE6XFx0c3dpdGNoX21kaW9kZXYtXFx1MDAzZWJ1c19tYXRjaCA9IGRzYV9sb29wX2J1c19tYXRjaDtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NzI6XFx0c3dpdGNoX21kaW9kZXYtXFx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhID0gXFx1MDAyNmRzYV9sb29wX3BkYXRhO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3My1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4MS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0ODI6c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfaW5pdCh2b2lkKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4My17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00ODYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDg3OlxcdHJldCA9IGRzYV9sb29wX2NyZWF0ZV9zd2l0Y2hfbWRpb2RldigpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4OC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDkzLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5NDpcXHRyZXQgPSBtZGlvX2RyaXZlcl9yZWdpc3RlcihcXHUwMDI2ZHNhX2xvb3BfZHJ2KTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTUtXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5NjpcXHRcXHRkc2FfbG9vcF9waHlkZXZzX3VucmVnaXN0ZXIoKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTctXFx0XFx0bWRpb19kZXZpY2VfcmVtb3ZlKHN3aXRjaF9tZGlvZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwMi19XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTAzOm1vZHVsZV9pbml0KGRzYV9sb29wX2luaXQpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwNC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MDU6c3RhdGljIHZvaWQgX19leGl0IGRzYV9sb29wX2V4aXQodm9pZClcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MDYte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwNzpcXHRtZGlvX2RyaXZlcl91bnJlZ2lzdGVyKFxcdTAwMjZkc2FfbG9vcF9kcnYpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwODpcXHRkc2FfbG9vcF9waHlkZXZzX3VucmVnaXN0ZXIoKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MDktXFx0bWRpb19kZXZpY2VfcmVtb3ZlKHN3aXRjaF9tZGlvZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxMS19XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTEyOm1vZHVsZV9leGl0KGRzYV9sb29wX2V4aXQpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjM6MDY6MDUuMTY2MTM0NzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjQ1NjE4MDcwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBLU1o4NDYzIERyaXZlciBQYXRjaCBmb3IgRnV6emluZyBGZWFzaWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCwgYWRkaW5nIHN1cHBvcnQgZm9yIHRoZSBNaWNyb2NoaXAgS1NaODQ2MyBEU0Egc3dpdGNoLCBpcyBzb21ldGhpbmcgd2UgY2FuIGV2ZW4gdG91Y2ggd2l0aGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4gVGhlIGBkc2FfbG9vcGAgZnVuY3Rpb24gYW5kIGhvdyBpdCB1c2VzIHRoZSBEU0EgdGFnIHByb3RvY29sIGlzIHRoZSBmaXJzdCBwbGFjZSBJIHN0YXJ0LiBJIGtub3cgYGRzYV9sb29wX2dldF9wcm90b2NvbGAgaXMgaW52b2x2ZWQsIGFuZCBJIGltbWVkaWF0ZWx5IGNoZWNrIGlmIGl0J3MgY29uZmlndXJhYmxlIHRvIHVzZSBgRFNBX1RBR19QUk9UT19LU1o4NDYzYC4gTm9wZSwgaXQncyBoYXJkY29kZWQgdG8gYERTQV9UQUdfUFJPVE9fTk9ORWAuIFNvIHRoYXQncyBhIGRlYWQgZW5kLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRyaWdnZXJzIGBrc3o4NDYzX3htaXRgIG9yIGBrc3o4NDYzX3JjdmAuIFRoZXkgcmVseSBvbiB0aGUgRFNBIHRhZ2dlci4gVGhlIHRhZ2dlciBhdHRhY2hlcyB0byBhIG5ldHdvcmsgZGV2aWNlICpvbmx5KiBpZiBhIERTQSBzd2l0Y2ggcmVxdWVzdHMgaXQuICBTaW5jZSBRRU1VIGRvZXNuJ3QgZW11bGF0ZSB0aGUgS1NaODQ2MyBzd2l0Y2gsIHRoZSBkcml2ZXIncyBgcHJvYmVgIGZ1bmN0aW9uIHdvbid0IHN1Y2NlZWQuIFRoZSBzd2l0Y2ggd29uJ3QgcmVnaXN0ZXIsIGFuZCB0aGUgdGFnZ2VyIHdpbGwgbmV2ZXIgYmUgdXNlZC4gVGhhdCdzIGEgcHJldHR5IHN0cm9uZyBpbmRpY2F0b3IgdGhhdCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBRRU1VIHNldHVwLlxuXG5Db3VsZCBzeXprYWxsZXIgaW5qZWN0IHNvbWV0aGluZz8gQSBmYWtlIGRldmljZSB0cmVlIG5vZGUsIG1heWJlLCBvciB1c2UgYHN5el9kZXZtZW1gIHRvIGZha2UgdGhlIFNQSS9NRElPIGRldmljZT8gIE5vdCBsaWtlbHkuIFN5emthbGxlciBkb2Vzbid0IGhhdmUgYSBnb29kIGdlbmVyaWMgd2F5IHRvIGZha2UgU1BJL0kyQyBkZXZpY2VzIHByb2JlZCB2aWEgZGV2aWNlIHRyZWUgdW5sZXNzIGEgc3BlY2lmaWMgYHN5el9gIHBzZXVkby1zeXNjYWxsIGV4aXN0cywgYW5kIHRoZXJlJ3Mgbm8gc3VjaCB0aGluZyBmb3IgdGhpcy5cblxuQW5kIHRoZSBwcm9tcHQgZXhwbGljaXRseSBjYWxscyBvdXQgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoIGRyaXZlcnMsIFNtYXJ0TklDcywgb3IgR1BVcyByZXF1aXJpbmcgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgKlNQSS9NRElPKiBzd2l0Y2ggZHJpdmVyLiBJdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhpcyBmYWxscyByaWdodCBpbnRvIHRoYXQgc2FtZSB1bnJlYWNoYWJsZSBjYXRlZ29yeS5cblxuQWxyaWdodCwgbGV0J3MgZG91YmxlLWNoZWNrLiBDYW4gYSBuZXRsaW5rIGNvbW1hbmQgc29tZWhvdyBjcmVhdGUgYSBkdW1teSBpbnRlcmZhY2UgYW5kIGF0dGFjaCB0aGUgRFNBIHRhZ2dlciB0byBpdD8gTm8sIHRoYXQncyBub3QgaG93IGl0IHdvcmtzLiBEU0EgdGFnZ2VycyBhcmUgbWFuYWdlZCBieSB0aGUgRFNBIGNvcmUsIGF0dGFjaGVkIHRvIHRoZSAqbWFzdGVyKiBuZXR3b3JrIGRldmljZSBvZiBhIERTQSBzd2l0Y2ggdHJlZS4gTm8gRFNBIHN3aXRjaCB0cmVlPyBObyB0YWdnZXIuIE5vIGRyaXZlciBwcm9iZSwgbm8gdHJlZS4gVGhlIEtTWjg0NjMgZHJpdmVyIHdvbid0IHByb2JlIHdpdGhvdXQgdGhlIGhhcmR3YXJlLlxuXG5MZXQncyBkbyBhIGNvbXBsZXRlIHN3ZWVwOiAgYGtzel9pcnFfYnVzX2xvY2tgIGFuZCBga3N6X2lycV9idXNfc3luY191bmxvY2tgIGFyZSBleHBvcnRlZCwgYnV0IG9ubHkgdXNlZCBieSB0aGUgS1NaIHN3aXRjaCBkcml2ZXJzLiBTYW1lIHdpdGggYGtzejg0NjNfZ2V0X3RzX2luZm9gLCBga3N6ODQ2M19od3RzdGFtcF9zZXRgLCBhbmQgYGtzejg0NjNfcHRwX2lycV9zZXR1cGAgLSBhbGwgcGFydCBvZiB0aGUgS1NaIGRyaXZlci4gQW5kIGBEU0FfVEFHX1BST1RPX0tTWjg0NjNgIGlzIGV4Y2x1c2l2ZWx5IGZvciB0aGF0IGRyaXZlci5cblxuU28sIHRoZSBlbnRpcmUgcGF0Y2ggaXMgaGFyZHdhcmUtc3BlY2lmaWMgYW5kIHVucmVhY2hhYmxlIGluIFFFTVUuIEknbSBnb2luZyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgYmVjYXVzZSBpdCdzIGEgaGFyZHdhcmUtc3BlY2lmaWMgRFNBIHN3aXRjaCBkcml2ZXIgKE1pY3JvY2hpcCBLU1o4NDYzKSBjb25uZWN0ZWQgdmlhIFNQSS9NRElPIHRoYXQgaXNuJ3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlLlxuXG5MZXQgbWUganVzdCBtYWtlIHN1cmUgdGhlIHJlYXNvbmluZyBpcyBjbGVhcjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgTWljcm9jaGlwIEtTWjg0NjMgRFNBIHN3aXRjaCwgaW5jbHVkaW5nIElSUSwgUFRQLCBhbmQgYSBuZXcgRFNBIHRhZyBwcm90b2NvbC4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciBmb3IgYW4gU1BJL01ESU8tY29ubmVjdGVkIHN3aXRjaCB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBXaXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSwgdGhlIGRyaXZlciBjYW5ub3QgcHJvYmUsIGFuZCB0aGUgYWRkZWQgY29kZSAoaW5jbHVkaW5nIHRoZSBEU0EgdGFnZ2VyKSBpcyB1bnJlYWNoYWJsZS5cIlxuXG5PbmUgbGFzdCBjaGVjay4gTGV0J3MgbWFrZSBzdXJlIEkgZGlkbid0IG1pc3MgYW55dGhpbmcuIFRoZSBwYXRjaCBtb2RpZmllcyBga3N6X2lycV9jb21tb25fc2V0dXBgIGluIGBrc3pfY29tbW9uLmNgIHRvIHRha2UgYW4gYG9wc2Agc3RydWN0IC0gdGhhdCdzIGp1c3QgYSByZWZhY3RvcmluZyAqZm9yKiB0aGUgS1NaIGRyaXZlci4gYGtzel9wdHAuY2AgaXMgYWxsIEtTWjg0NjMgc3BlY2lmaWMgUFRQIGZ1bmN0aW9ucywgYW5kIGB0YWdfa3N6LmNgIGhhcyBga3N6ODQ2M19uZXRkZXZfb3BzYCBhbmQgYGtzejg0NjNfeG1pdGAvYHJjdmAuXG5cbll1cCwgaXQncyBhbGwgc3RyaWN0bHkgdGllZCB0byB0aGUgS1NaODQ2MyBoYXJkd2FyZS4gSSdtIGNvbmZpZGVudC4gUmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mjg1NSwiT3V0cHV0VG9rZW5zIjoxMTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIzOjA2OjE3LjYyMjMxOTUxMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1pY3JvY2hpcCBLU1o4NDYzIERTQSBzd2l0Y2gsIGluY2x1ZGluZyBJUlEsIFBUUCwgYW5kIGEgbmV3IERTQSB0YWcgcHJvdG9jb2wuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgZm9yIGFuIFNQSS9NRElPLWNvbm5lY3RlZCBzd2l0Y2ggdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gV2l0aG91dCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUsIHRoZSBkcml2ZXIgY2Fubm90IHByb2JlLCBhbmQgdGhlIGFkZGVkIGNvZGUgKGluY2x1ZGluZyB0aGUgRFNBIHRhZ2dlcikgaXMgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNaWNyb2NoaXAgS1NaODQ2MyBEU0Egc3dpdGNoLCBpbmNsdWRpbmcgSVJRLCBQVFAsIGFuZCBhIG5ldyBEU0EgdGFnIHByb3RvY29sLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGZvciBhbiBTUEkvTURJTy1jb25uZWN0ZWQgc3dpdGNoIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFdpdGhvdXQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlLCB0aGUgZHJpdmVyIGNhbm5vdCBwcm9iZSwgYW5kIHRoZSBhZGRlZCBjb2RlIChpbmNsdWRpbmcgdGhlIERTQSB0YWdnZXIpIGlzIHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpvhmk[1] Phase: Running StartedAt: 2026-07-27 23:06:29 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpvhmk[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-27 23:06:29 +0000 UTC FinishedAt: 2026-07-27 23:06:36 +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,}