From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v5,1/2] dmaengine: 8250_mtk_dma: add Mediatek uart DMA support From: Long Cheng Message-Id: <1544700985.28871.26.camel@mhfsdcap03> Date: Thu, 13 Dec 2018 19:36:25 +0800 To: Sean Wang Cc: vkoul@kernel.org, robh+dt@kernel.org, mark.rutland@arm.com, ryder.lee@mediatek.com, Matthias Brugger , dan.j.williams@intel.com, gregkh@linuxfoundation.org, jslaby@suse.com, Sean Wang =?UTF-8?Q?=28=E7=8E=8B=E5=BF=97=E4=BA=98=29?= , dmaengine@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org, srv_heupstream@mediatek.com, yingjoe.chen@mediatek.com, YT Shen , Long Cheng List-ID: T24gVHVlLCAyMDE4LTEyLTExIGF0IDE1OjEyIC0wODAwLCBTZWFuIFdhbmcgd3JvdGU6Cj4gU29y cnkgZm9yIHRoYXQgSSBkaWRuJ3QgaGF2ZSBhIGZ1bGwgcmV2aWV3IGF0IG9uZSB0aW1lIGluIHRo ZSBlYXJsaWVyIHZlcnNpb24KPiAKPiAgICAgICAgT24gTW9uLCBEZWMgMTAsIDIwMTggYXQgOToz NyBQTSBMb25nIENoZW5nCj4gPGxvbmcuY2hlbmdAbWVkaWF0ZWsuY29tPiB3cm90ZToKPiA+Cj4g PiBJbiBETUEgZW5naW5lIGZyYW1ld29yaywgYWRkIDgyNTAgbXRrIGRtYSB0byBzdXBwb3J0IGl0 Lgo+IAo+IEl0IGxvb2tzIGxpa2UgdGhlcmUgYXJlIHN0aWxsIG1hbnkgcm9vbXMgdG8gaW1wcm92 ZSB0aGUgZGVzY3JpcHRpb24sCj4gZXNwZWNpYWxseSBpdCdzIGEgdG90YWxseSBuZXcgZHJpdmVy Lgo+IAo+ID4KPiA+IFNpZ25lZC1vZmYtYnk6IExvbmcgQ2hlbmcgPGxvbmcuY2hlbmdAbWVkaWF0 ZWsuY29tPgo+ID4gLS0tCj4gPiAgZHJpdmVycy9kbWEvbWVkaWF0ZWsvODI1MF9tdGtfZG1hLmMg fCAgODMwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gPiAgZHJpdmVycy9k bWEvbWVkaWF0ZWsvS2NvbmZpZyAgICAgICAgfCAgIDExICsKPiA+ICBkcml2ZXJzL2RtYS9tZWRp YXRlay9NYWtlZmlsZSAgICAgICB8ICAgIDEgKwo+ID4gIDMgZmlsZXMgY2hhbmdlZCwgODQyIGlu c2VydGlvbnMoKykKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9kbWEvbWVkaWF0ZWsv ODI1MF9tdGtfZG1hLmMKPiA+Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvbWVkaWF0ZWsv ODI1MF9tdGtfZG1hLmMgYi9kcml2ZXJzL2RtYS9tZWRpYXRlay84MjUwX210a19kbWEuYwo+ID4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAuLmY3OWQxODAKPiA+IC0tLSAv ZGV2L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvZG1hL21lZGlhdGVrLzgyNTBfbXRrX2RtYS5jCj4g PiBAQCAtMCwwICsxLDgzMCBAQAo+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wCj4gPiArLyoKPiA+ICsgKiBNZWRpYXRlayA4MjUwIERNQSBkcml2ZXIuCj4gCj4gTWVkaWFU ZWsKPiAKPiA+ICsgKgo+ID4gKyAqIENvcHlyaWdodCAoYykgMjAxOCBNZWRpYVRlayBJbmMuCj4g PiArICogQXV0aG9yOiBMb25nIENoZW5nIDxsb25nLmNoZW5nQG1lZGlhdGVrLmNvbT4KPiA+ICsg Ki8KPiA+ICsKPiA+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4 L2RtYWVuZ2luZS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgo+ID4gKyNp bmNsdWRlIDxsaW51eC9lcnIuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvaW5pdC5oPgo+ID4gKyNp bmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvbGlzdC5oPgo+ ID4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxl Lmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L29mX2RtYS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9v Zl9kZXZpY2UuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4gPiAr I2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4K PiA+ICsjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9p b3BvbGwuaD4KPiA+ICsKPiA+ICsjaW5jbHVkZSAiLi4vdmlydC1kbWEuaCIKPiA+ICsKPiA+ICsj ZGVmaW5lIE1US19BUERNQV9ERUZBVUxUX1JFUVVFU1RTICAgICAxMjcKPiA+ICsjZGVmaW5lIE1U S19BUERNQV9DSEFOTkVMUyAgICAgICAgICAgICAoQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRT ICogMikKPiA+ICsKPiA+ICsjZGVmaW5lIFZGRl9FTl9CICAgICAgICAgICAgICAgQklUKDApCj4g PiArI2RlZmluZSBWRkZfU1RPUF9CICAgICAgICAgICAgIEJJVCgwKQo+ID4gKyNkZWZpbmUgVkZG X0ZMVVNIX0IgICAgICAgICAgICBCSVQoMCkKPiA+ICsjZGVmaW5lIFZGRl80R19TVVBQT1JUX0Ig ICAgICAgQklUKDApCj4gPiArI2RlZmluZSBWRkZfUlhfSU5UX0VOMF9CICAgICAgIEJJVCgwKSAg LypyeCB2YWxpZCBzaXplID49ICB2ZmYgdGhyZSovCj4gPiArI2RlZmluZSBWRkZfUlhfSU5UX0VO MV9CICAgICAgIEJJVCgxKQo+ID4gKyNkZWZpbmUgVkZGX1RYX0lOVF9FTl9CICAgICAgICAgICAg ICAgIEJJVCgwKSAgLyp0eCBsZWZ0IHNpemUgPj0gdmZmIHRocmUqLwo+ID4gKyNkZWZpbmUgVkZG X1dBUk1fUlNUX0IgICAgICAgICBCSVQoMCkKPiA+ICsjZGVmaW5lIFZGRl9SWF9JTlRfRkxBR19D TFJfQiAgKEJJVCgwKSB8IEJJVCgxKSkKPiA+ICsjZGVmaW5lIFZGRl9UWF9JTlRfRkxBR19DTFJf QiAgMAo+ID4gKyNkZWZpbmUgVkZGX1NUT1BfQ0xSX0IgICAgICAgICAwCj4gPiArI2RlZmluZSBW RkZfRkxVU0hfQ0xSX0IgICAgICAgICAgICAgICAgMAo+ID4gKyNkZWZpbmUgVkZGX0lOVF9FTl9D TFJfQiAgICAgICAwCj4gPiArI2RlZmluZSBWRkZfNEdfU1VQUE9SVF9DTFJfQiAgIDAKPiA+ICsK PiA+ICsvKiBpbnRlcnJ1cHQgdHJpZ2dlciBsZXZlbCBmb3IgdHggKi8KPiA+ICsjZGVmaW5lIFZG Rl9UWF9USFJFKG4pICAgICAgICAgKChuKSAqIDcgLyA4KQo+ID4gKy8qIGludGVycnVwdCB0cmln Z2VyIGxldmVsIGZvciByeCAqLwo+ID4gKyNkZWZpbmUgVkZGX1JYX1RIUkUobikgICAgICAgICAo KG4pICogMyAvIDQpCj4gPiArCj4gPiArI2RlZmluZSBNVEtfRE1BX1JJTkdfU0laRSAgICAgIDB4 ZmZmZlUKPiA+ICsvKiBpbnZlcnQgdGhpcyBiaXQgd2hlbiB3cmFwIHJpbmcgaGVhZCBhZ2Fpbiov Cj4gPiArI2RlZmluZSBNVEtfRE1BX1JJTkdfV1JBUCAgICAgIDB4MTAwMDBVCj4gPiArCj4gPiAr I2RlZmluZSBWRkZfSU5UX0ZMQUcgICAgICAgICAgIDB4MDAKPiA+ICsjZGVmaW5lIFZGRl9JTlRf RU4gICAgICAgICAgICAgMHgwNAo+ID4gKyNkZWZpbmUgVkZGX0VOICAgICAgICAgICAgICAgICAw eDA4Cj4gPiArI2RlZmluZSBWRkZfUlNUICAgICAgICAgICAgICAgICAgICAgICAgMHgwYwo+ID4g KyNkZWZpbmUgVkZGX1NUT1AgICAgICAgICAgICAgICAweDEwCj4gPiArI2RlZmluZSBWRkZfRkxV U0ggICAgICAgICAgICAgIDB4MTQKPiA+ICsjZGVmaW5lIFZGRl9BRERSICAgICAgICAgICAgICAg MHgxYwo+ID4gKyNkZWZpbmUgVkZGX0xFTiAgICAgICAgICAgICAgICAgICAgICAgIDB4MjQKPiA+ ICsjZGVmaW5lIFZGRl9USFJFICAgICAgICAgICAgICAgMHgyOAo+ID4gKyNkZWZpbmUgVkZGX1dQ VCAgICAgICAgICAgICAgICAgICAgICAgIDB4MmMKPiA+ICsjZGVmaW5lIFZGRl9SUFQgICAgICAg ICAgICAgICAgICAgICAgICAweDMwCj4gPiArLypUWDogdGhlIGJ1ZmZlciBzaXplIEhXIGNhbiBy ZWFkLiBSWDogdGhlIGJ1ZmZlciBzaXplIFNXIGNhbiByZWFkLiovCj4gPiArI2RlZmluZSBWRkZf VkFMSURfU0laRSAgICAgICAgIDB4M2MKPiA+ICsvKlRYOiB0aGUgYnVmZmVyIHNpemUgU1cgY2Fu IHdyaXRlLiBSWDogdGhlIGJ1ZmZlciBzaXplIEhXIGNhbiB3cml0ZS4qLwo+ID4gKyNkZWZpbmUg VkZGX0xFRlRfU0laRSAgICAgICAgICAweDQwCj4gPiArI2RlZmluZSBWRkZfREVCVUdfU1RBVFVT ICAgICAgIDB4NTAKPiA+ICsjZGVmaW5lIFZGRl80R19TVVBQT1JUICAgICAgICAgMHg1NAo+ID4g Kwo+ID4gK3N0cnVjdCBtdGtfZG1hZGV2IHsKPiA+ICsgICAgICAgc3RydWN0IGRtYV9kZXZpY2Ug ZGRldjsKPiA+ICsgICAgICAgdm9pZCBfX2lvbWVtICptZW1fYmFzZVtNVEtfQVBETUFfQ0hBTk5F TFNdOwo+ID4gKyAgICAgICBzcGlubG9ja190IGxvY2s7IC8qIGRtYSBkZXYgbG9jayAqLwo+ID4g KyAgICAgICBzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdGFzazsKPiAKPiB3ZSBjYW4gZHJvcCB0YXNr bGV0IGFuZCBpbnN0ZWFkIGFsbG93cyBkZXNjcmlwdG9ycyB0byBiZSBoYW5kbGVkIGFzCj4gZmFz dCBhcyBwb3NzaWJsZS4KPiBzaW1pbGFyIHN1Z2dlc3Rpb25zIGhhdmUgYmVlbiBtYWRlIGluIHRo ZSBvdGhlciBkbWFlbmdpbmUgWzFdIGFuZCBtdGstaHNkbWEuYwo+IAoKT0ssIGkgd2lsbCByZW1v dmUgdGhlc2UsIGFuZCBpbXByb3ZlIGl0LgoKPiBbMV0gaHR0cHM6Ly9sa21sLm9yZy9sa21sLzIw MTgvMTEvMTEvMTQ2Cj4gCj4gPiArICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgcGVuZGluZzsKPiA+ ICsgICAgICAgc3RydWN0IGNsayAqY2xrOwo+ID4gKyAgICAgICB1bnNpZ25lZCBpbnQgZG1hX3Jl cXVlc3RzOwo+ID4gKyAgICAgICBib29sIHN1cHBvcnRfMzNiaXRzOwo+ID4gKyAgICAgICB1bnNp Z25lZCBpbnQgZG1hX2lycVtNVEtfQVBETUFfQ0hBTk5FTFNdOwo+ID4gKyAgICAgICBzdHJ1Y3Qg bXRrX2NoYW4gKmNoW01US19BUERNQV9DSEFOTkVMU107Cj4gPiArfTsKPiA+ICsKPiA+ICtzdHJ1 Y3QgbXRrX2NoYW4gewo+ID4gKyAgICAgICBzdHJ1Y3QgdmlydF9kbWFfY2hhbiB2YzsKPiA+ICsg ICAgICAgc3RydWN0IGxpc3RfaGVhZCBub2RlOwo+ID4gKyAgICAgICBzdHJ1Y3QgZG1hX3NsYXZl X2NvbmZpZyBjZmc7Cj4gPiArICAgICAgIHZvaWQgX19pb21lbSAqYmFzZTsKPiA+ICsgICAgICAg c3RydWN0IG10a19kbWFfZGVzYyAqZGVzYzsKPiA+ICsKPiA+ICsgICAgICAgYm9vbCBzdG9wOwo+ ID4gKyAgICAgICBib29sIHJlcXVlc3RlZDsKPiA+ICsKPiA+ICsgICAgICAgdW5zaWduZWQgaW50 IHJ4X3N0YXR1czsKPiA+ICt9Owo+ID4gKwo+ID4gK3N0cnVjdCBtdGtfZG1hX3NnIHsKPiA+ICsg ICAgICAgZG1hX2FkZHJfdCBhZGRyOwo+ID4gKyAgICAgICB1bnNpZ25lZCBpbnQgZW47ICAgICAg ICAgICAgICAgIC8qIG51bWJlciBvZiBlbGVtZW50cyAoMjQtYml0KSAqLwo+ID4gKyAgICAgICB1 bnNpZ25lZCBpbnQgZm47ICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBmcmFtZXMgKDE2LWJp dCkgKi8KPiA+ICt9Owo+ID4gKwo+ID4gK3N0cnVjdCBtdGtfZG1hX2Rlc2Mgewo+ID4gKyAgICAg ICBzdHJ1Y3QgdmlydF9kbWFfZGVzYyB2ZDsKPiA+ICsgICAgICAgZW51bSBkbWFfdHJhbnNmZXJf ZGlyZWN0aW9uIGRpcjsKPiA+ICsKPiA+ICsgICAgICAgdW5zaWduZWQgaW50IHNnbGVuOwo+ID4g KyAgICAgICBzdHJ1Y3QgbXRrX2RtYV9zZyBzZ1swXTsKPiA+ICsKPiA+ICsgICAgICAgdW5zaWdu ZWQgaW50IGxlbjsKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10a19k bWFkZXYgKnRvX210a19kbWFfZGV2KHN0cnVjdCBkbWFfZGV2aWNlICpkKQo+ID4gK3sKPiA+ICsg ICAgICAgcmV0dXJuIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgbXRrX2RtYWRldiwgZGRldik7Cj4g PiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10a19jaGFuICp0b19tdGtfZG1h X2NoYW4oc3RydWN0IGRtYV9jaGFuICpjKQo+ID4gK3sKPiA+ICsgICAgICAgcmV0dXJuIGNvbnRh aW5lcl9vZihjLCBzdHJ1Y3QgbXRrX2NoYW4sIHZjLmNoYW4pOwo+ID4gK30KPiA+ICsKPiA+ICtz dGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfZG1hX2Rlc2MgKnRvX210a19kbWFfZGVzYwo+ID4gKyAg ICAgICAoc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0KQo+ID4gK3sKPiA+ICsgICAg ICAgcmV0dXJuIGNvbnRhaW5lcl9vZih0LCBzdHJ1Y3QgbXRrX2RtYV9kZXNjLCB2ZC50eCk7Cj4g PiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIG10a19kbWFfY2hhbl93cml0ZShzdHJ1Y3QgbXRr X2NoYW4gKmMsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50 IHJlZywgdW5zaWduZWQgaW50IHZhbCkKPiA+ICt7Cj4gPiArICAgICAgIHdyaXRlbCh2YWwsIGMt PmJhc2UgKyByZWcpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdW5zaWduZWQgaW50IG10a19k bWFfY2hhbl9yZWFkKHN0cnVjdCBtdGtfY2hhbiAqYywgdW5zaWduZWQgaW50IHJlZykKPiA+ICt7 Cj4gPiArICAgICAgIHJldHVybiByZWFkbChjLT5iYXNlICsgcmVnKTsKPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIHZvaWQgbXRrX2RtYV9kZXNjX2ZyZWUoc3RydWN0IHZpcnRfZG1hX2Rlc2MgKnZk KQo+ID4gK3sKPiA+ICsgICAgICAgc3RydWN0IGRtYV9jaGFuICpjaGFuID0gdmQtPnR4LmNoYW47 Cj4gPiArICAgICAgIHN0cnVjdCBtdGtfY2hhbiAqYyA9IHRvX210a19kbWFfY2hhbihjaGFuKTsK PiA+ICsKPiA+ICsgICAgICAga2ZyZWUoYy0+ZGVzYyk7Cj4gPiArICAgICAgIGMtPmRlc2MgPSBO VUxMOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBtdGtfZG1hX3R4X2ZsdXNoKHN0cnVj dCBkbWFfY2hhbiAqY2hhbikKPiA+ICt7Cj4gCj4gSWYgdGhlIHVzZXIgaXMgb25seSBvbmUsIGxl dCdzIHNwYW4gdGhlIGNvbnRlbnQgaW50byB3aGVyZSB0aGUgdXNlciBpcy4KPiAKPiA+ICsgICAg ICAgc3RydWN0IG10a19jaGFuICpjID0gdG9fbXRrX2RtYV9jaGFuKGNoYW4pOwo+ID4gKwo+ID4g KyAgICAgICBpZiAobXRrX2RtYV9jaGFuX3JlYWQoYywgVkZGX0ZMVVNIKSA9PSAwVSkKPiA+ICsg ICAgICAgICAgICAgICBtdGtfZG1hX2NoYW5fd3JpdGUoYywgVkZGX0ZMVVNILCBWRkZfRkxVU0hf Qik7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIG10a19kbWFfdHhfd3JpdGUoc3RydWN0 IGRtYV9jaGFuICpjaGFuKQo+ID4gK3sKPiAKPiBJZiB0aGUgdXNlciBpcyBvbmx5IG9uZSwgbGV0 J3Mgc3BhbiB0aGUgY29udGVudCBpbnRvIHdoZXJlIHRoZSB1c2VyIGlzLgo+IAo+ID4gKyAgICAg ICBzdHJ1Y3QgbXRrX2NoYW4gKmMgPSB0b19tdGtfZG1hX2NoYW4oY2hhbik7Cj4gPiArICAgICAg IHVuc2lnbmVkIGludCB0eGNvdW50ID0gYy0+ZGVzYy0+bGVuOwo+ID4gKyAgICAgICB1bnNpZ25l ZCBpbnQgbGVuLCBzZW5kLCBsZWZ0LCB3cHQsIHdyYXA7Cj4gPiArCj4gPiArICAgICAgIGxlbiA9 IG10a19kbWFfY2hhbl9yZWFkKGMsIFZGRl9MRU4pOwo+ID4gKwo+ID4gKyAgICAgICB3aGlsZSAo KGxlZnQgPSBtdGtfZG1hX2NoYW5fcmVhZChjLCBWRkZfTEVGVF9TSVpFKSkgPiAwVSkgewo+ID4g KyAgICAgICAgICAgICAgIGlmIChjLT5kZXNjLT5sZW4gPT0gMFUpCj4gCj4gbWVyZ2UgdGhlIGNv bmRpdGlvbiBiYWNrIGludG8gdGhlIGNvbmRpdGlvbiBpbiB3aGlsZQo+IAo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgICAgICAgICAgc2VuZCA9IG1pbl90KHVu c2lnbmVkIGludCwgbGVmdCwgYy0+ZGVzYy0+bGVuKTsKPiA+ICsgICAgICAgICAgICAgICB3cHQg PSBtdGtfZG1hX2NoYW5fcmVhZChjLCBWRkZfV1BUKTsKPiA+ICsgICAgICAgICAgICAgICB3cmFw ID0gd3B0ICYgTVRLX0RNQV9SSU5HX1dSQVAgPyAwVSA6IE1US19ETUFfUklOR19XUkFQOwo+ID4g Kwo+ID4gKyAgICAgICAgICAgICAgIGlmICgod3B0ICYgKGxlbiAtIDFVKSkgKyBzZW5kIDwgbGVu KQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgbXRrX2RtYV9jaGFuX3dyaXRlKGMsIFZGRl9X UFQsIHdwdCArIHNlbmQpOwo+ID4gKyAgICAgICAgICAgICAgIGVsc2UKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgIG10a19kbWFfY2hhbl93cml0ZShjLCBWRkZfV1BULAo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgod3B0ICsgc2VuZCkgJiAobGVuIC0g MVUpKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgd3Jh cCk7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgYy0+ZGVzYy0+bGVuIC09IHNlbmQ7Cj4gCj4g LT5sZW4gY2FuIGJlIHJlbmFtZWQgdG8gLT5hdmFpbF9sZW4gdG8gc2F5IGl0J3MgdmFyaWFibGUg ZHVyaW5nIHRoZSB3b3JrCj4gCj4gPiArICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgaWYgKHR4 Y291bnQgIT0gYy0+ZGVzYy0+bGVuKSB7Cj4gPiArICAgICAgICAgICAgICAgbXRrX2RtYV9jaGFu X3dyaXRlKGMsIFZGRl9JTlRfRU4sIFZGRl9UWF9JTlRfRU5fQik7Cj4gPiArICAgICAgICAgICAg ICAgbXRrX2RtYV90eF9mbHVzaChjaGFuKTsKPiA+ICsgICAgICAgfQo+ID4gK30KPiA+ICsKPiA+ ICtzdGF0aWMgdm9pZCBtdGtfZG1hX3N0YXJ0X3R4KHN0cnVjdCBtdGtfY2hhbiAqYykKPiA+ICt7 Cj4gPiArICAgICAgIGlmIChtdGtfZG1hX2NoYW5fcmVhZChjLCBWRkZfTEVGVF9TSVpFKSA9PSAw VSkKPiA+ICsgICAgICAgICAgICAgICBtdGtfZG1hX2NoYW5fd3JpdGUoYywgVkZGX0lOVF9FTiwg VkZGX1RYX0lOVF9FTl9CKTsKPiA+ICsgICAgICAgZWxzZQo+ID4gKyAgICAgICAgICAgICAgIG10 a19kbWFfdHhfd3JpdGUoJmMtPnZjLmNoYW4pOwo+ID4gKwo+ID4gKyAgICAgICBjLT5zdG9wID0g ZmFsc2U7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIG10a19kbWFfZ2V0X3J4X3NpemUo c3RydWN0IG10a19jaGFuICpjKQo+ID4gK3sKPiAKPiBJZiB0aGUgdXNlciBpcyBvbmx5IG9uZSwg bGV0J3Mgc3BhbiB0aGUgY29udGVudCBpbnRvIHdoZXJlIHRoZSB1c2VyIGlzLgo+IAo+ID4gKyAg ICAgICB1bnNpZ25lZCBpbnQgcnhfc2l6ZSA9IG10a19kbWFfY2hhbl9yZWFkKGMsIFZGRl9MRU4p Owo+ID4gKyAgICAgICB1bnNpZ25lZCBpbnQgcmRwdHIsIHdycHRyLCB3cnJlZywgcmRyZWcsIGNv dW50Owo+IAo+IHRvbyBtdWNoIHZhcmlhYmxlIHNlZW1zIGEgbGl0dGxlIGxvdXN5LCB0d28gdmFy aWFibGVzIGFyZSBlbm91Z2gKPiAKPiB1bnNpZ25lZCBpbnQgcmQsIHdyOwo+IAo+ID4gKwo+ID4g KyAgICAgICByZHJlZyA9IG10a19kbWFfY2hhbl9yZWFkKGMsIFZGRl9SUFQpOwo+ID4gKyAgICAg ICB3cnJlZyA9IG10a19kbWFfY2hhbl9yZWFkKGMsIFZGRl9XUFQpOwo+ID4gKyAgICAgICByZHB0 ciA9IHJkcmVnICYgTVRLX0RNQV9SSU5HX1NJWkU7Cj4gPiArICAgICAgIHdycHRyID0gd3JyZWcg JiBNVEtfRE1BX1JJTkdfU0laRTsKPiAKPiByZCA9IG10a19kbWFfY2hhbl9yZWFkKGMsIFZGRl9S UFQpICYgTVRLX0RNQV9SSU5HX1NJWkU7Cj4gd3IgPSBtdGtfZG1hX2NoYW5fcmVhZChjLCBWRkZf V1BUKSAmIE1US19ETUFfUklOR19TSVpFCj4gCj4gPiArICAgICAgIGNvdW50ID0gKChyZHJlZyBe IHdycmVnKSAmIE1US19ETUFfUklOR19XUkFQKSA/Cj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAod3JwdHIgKyByeF9zaXplIC0gcmRwdHIpIDogKHdycHRyIC0gcmRwdHIpOwo+ID4gKwo+ID4g KyAgICAgICBjLT5yeF9zdGF0dXMgPSBjb3VudDsKPiAKPiBkcm9wIHRoZSB2YXJpYWJsZSBjb3Vu dCBhbmQgaGF2ZSBhIGRpcmVjdCBhc3NpZ25tZW50Cj4gCj4gPiArCj4gPiArICAgICAgIG10a19k bWFfY2hhbl93cml0ZShjLCBWRkZfUlBULCB3cnJlZyk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRp YyB2b2lkIG10a19kbWFfc3RhcnRfcngoc3RydWN0IG10a19jaGFuICpjKQo+ID4gK3sKPiA+ICsg ICAgICAgc3RydWN0IGRtYV9jaGFuICpjaGFuID0gJmMtPnZjLmNoYW47Cj4gPiArICAgICAgIHN0 cnVjdCBtdGtfZG1hZGV2ICptdGtkID0gdG9fbXRrX2RtYV9kZXYoY2hhbi0+ZGV2aWNlKTsKPiA+ ICsgICAgICAgc3RydWN0IG10a19kbWFfZGVzYyAqZCA9IGMtPmRlc2M7Cj4gPiArCj4gPiArICAg ICAgIGlmIChtdGtfZG1hX2NoYW5fcmVhZChjLCBWRkZfVkFMSURfU0laRSkgPT0gMFUpCj4gPiAr ICAgICAgICAgICAgICAgcmV0dXJuOwo+ID4gKwo+ID4gKyAgICAgICBpZiAoZCAmJiB2Y2hhbl9u ZXh0X2Rlc2MoJmMtPnZjKSkgewo+ID4gKyAgICAgICAgICAgICAgIG10a19kbWFfZ2V0X3J4X3Np emUoYyk7Cj4gPiArICAgICAgICAgICAgICAgbGlzdF9kZWwoJmQtPnZkLm5vZGUpOwo+ID4gKyAg ICAgICAgICAgICAgIHZjaGFuX2Nvb2tpZV9jb21wbGV0ZSgmZC0+dmQpOwo+ID4gKyAgICAgICB9 IGVsc2Ugewo+ID4gKyAgICAgICAgICAgICAgIHNwaW5fbG9jaygmbXRrZC0+bG9jayk7Cj4gPiAr ICAgICAgICAgICAgICAgaWYgKGxpc3RfZW1wdHkoJm10a2QtPnBlbmRpbmcpKQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgbGlzdF9hZGRfdGFpbCgmYy0+bm9kZSwgJm10a2QtPnBlbmRpbmcp Owo+ID4gKyAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZtdGtkLT5sb2NrKTsKPiA+ICsgICAg ICAgICAgICAgICB0YXNrbGV0X3NjaGVkdWxlKCZtdGtkLT50YXNrKTsKPiA+ICsgICAgICAgfQo+ ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBtdGtfZG1hX3Jlc2V0KHN0cnVjdCBtdGtfY2hh biAqYykKPiA+ICt7Cj4gCj4gSWYgdGhlIHVzZXIgaXMgb25seSBvbmUsIGxldCdzIHNwYW4gdGhl IGNvbnRlbnQgaW50byB3aGVyZSB0aGUgdXNlciBpcy4KPiAKPiA+ICsgICAgICAgc3RydWN0IG10 a19kbWFkZXYgKm10a2QgPSB0b19tdGtfZG1hX2RldihjLT52Yy5jaGFuLmRldmljZSk7Cj4gPiAr ICAgICAgIHUzMiBzdGF0dXM7Cj4gPiArICAgICAgIGludCByZXQ7Cj4gPiArCj4gPiArICAgICAg IG10a19kbWFfY2hhbl93cml0ZShjLCBWRkZfQUREUiwgMCk7Cj4gPiArICAgICAgIG10a19kbWFf Y2hhbl93cml0ZShjLCBWRkZfVEhSRSwgMCk7Cj4gPiArICAgICAgIG10a19kbWFfY2hhbl93cml0 ZShjLCBWRkZfTEVOLCAwKTsKPiA+ICsgICAgICAgbXRrX2RtYV9jaGFuX3dyaXRlKGMsIFZGRl9S U1QsIFZGRl9XQVJNX1JTVF9CKTsKPiA+ICsKPiA+ICsgICAgICAgcmV0ID0gcmVhZHhfcG9sbF90 aW1lb3V0KHJlYWRsLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+YmFz ZSArIFZGRl9FTiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cywg c3RhdHVzID09IDAsIDEwLCAxMDApOwo+ID4gKyAgICAgICBpZiAocmV0KSB7Cj4gPiArICAgICAg ICAgICAgICAgZGV2X2VycihjLT52Yy5jaGFuLmRldmljZS0+ZGV2LAo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiZG1hIHJlc2V0OiBmYWlsLCB0aW1lb3V0XG4iKTsKPiA+ICsg ICAgICAgICAgICAgICByZXR1cm47Cj4gPiArICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgaWYg KGMtPmNmZy5kaXJlY3Rpb24gPT0gRE1BX0RFVl9UT19NRU0pCj4gPiArICAgICAgICAgICAgICAg bXRrX2RtYV9jaGFuX3dyaXRlKGMsIFZGRl9SUFQsIDApOwo+ID4gKyAgICAgICBlbHNlIGlmIChj LT5jZmcuZGlyZWN0aW9uID09IERNQV9NRU1fVE9fREVWKQo+ID4gKyAgICAgICAgICAgICAgIG10 a19kbWFfY2hhbl93cml0ZShjLCBWRkZfV1BULCAwKTsKPiAKPiB1c2luZyBzd2l0Y2ggYW5kIGNh c2Ugc3RhdGVtZW50Cj4gCj4gPiArCj4gPiArICAgICAgIGlmIChtdGtkLT5zdXBwb3J0XzMzYml0 cykKPiA+ICsgICAgICAgICAgICAgICBtdGtfZG1hX2NoYW5fd3JpdGUoYywgVkZGXzRHX1NVUFBP UlQsIFZGRl80R19TVVBQT1JUX0NMUl9CKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQg bXRrX2RtYV9zdG9wKHN0cnVjdCBtdGtfY2hhbiAqYykKPiAKPiBJZiB0aGUgdXNlciBpcyBvbmx5 IG9uZSwgbGV0J3Mgc3BhbiB0aGUgY29udGVudCBpbnRvIHdoZXJlIHRoZSB1c2VyIGlzLgo+IAo+ ID4gK3sKPiA+ICsgICAgICAgdTMyIHN0YXR1czsKPiA+ICsgICAgICAgaW50IHJldDsKPiA+ICsK PiA+ICsgICAgICAgbXRrX2RtYV9jaGFuX3dyaXRlKGMsIFZGRl9GTFVTSCwgVkZGX0ZMVVNIX0NM Ul9CKTsKPiA+ICsgICAgICAgLyogV2FpdCBmb3IgZmx1c2ggKi8KPiA+ICsgICAgICAgcmV0ID0g cmVhZHhfcG9sbF90aW1lb3V0KHJlYWRsLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYy0+YmFzZSArIFZGRl9GTFVTSCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0YXR1cywKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0 dXMgJiBWRkZfRkxVU0hfQikgIT0gVkZGX0ZMVVNIX0IsCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAxMCwgMTAwKTsKPiA+ICsgICAgICAgaWYgKHJldCkKPiA+ICsgICAgICAg ICAgICAgICBkZXZfZXJyKGMtPnZjLmNoYW4uZGV2aWNlLT5kZXYsCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAiZG1hIHN0b3A6IHBvbGxpbmcgRkxVU0ggZmFpbCwgREVCVUc9MHgleFxuIiwK PiA+ICsgICAgICAgICAgICAgICAgICAgICAgIG10a19kbWFfY2hhbl9yZWFkKGMsIFZGRl9ERUJV R19TVEFUVVMpKTsKPiA+ICsKPiA+ICsgICAgICAgLypzZXQgc3RvcCBhcyAxIC0+IHdhaXQgdW50 aWwgZW4gaXMgMCAtPiBzZXQgc3RvcCBhcyAwKi8KPiA+ICsgICAgICAgbXRrX2RtYV9jaGFuX3dy aXRlKGMsIFZGRl9TVE9QLCBWRkZfU1RPUF9CKTsKPiA+ICsgICAgICAgcmV0ID0gcmVhZHhfcG9s bF90aW1lb3V0KHJlYWRsLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+ YmFzZSArIFZGRl9FTiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1 cywgc3RhdHVzID09IDAsIDEwLCAxMDApOwo+ID4gKyAgICAgICBpZiAocmV0KQo+ID4gKyAgICAg ICAgICAgICAgIGRldl9lcnIoYy0+dmMuY2hhbi5kZXZpY2UtPmRldiwKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICJkbWEgc3RvcDogcG9sbGluZyBWRkZfRU4gZmFpbCwgREVCVUc9MHgleFxu IiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIG10a19kbWFfY2hhbl9yZWFkKGMsIFZGRl9E RUJVR19TVEFUVVMpKTsKPiA+ICsKPiA+ICsgICAgICAgbXRrX2RtYV9jaGFuX3dyaXRlKGMsIFZG Rl9TVE9QLCBWRkZfU1RPUF9DTFJfQik7Cj4gPiArICAgICAgIG10a19kbWFfY2hhbl93cml0ZShj LCBWRkZfSU5UX0VOLCBWRkZfSU5UX0VOX0NMUl9CKTsKPiA+ICsKPiA+ICsgICAgICAgaWYgKGMt PmNmZy5kaXJlY3Rpb24gPT0gRE1BX0RFVl9UT19NRU0pCj4gPiArICAgICAgICAgICAgICAgbXRr X2RtYV9jaGFuX3dyaXRlKGMsIFZGRl9JTlRfRkxBRywgVkZGX1JYX0lOVF9GTEFHX0NMUl9CKTsK PiA+ICsgICAgICAgZWxzZQo+ID4gKyAgICAgICAgICAgICAgIG10a19kbWFfY2hhbl93cml0ZShj LCBWRkZfSU5UX0ZMQUcsIFZGRl9UWF9JTlRfRkxBR19DTFJfQik7Cj4gCj4gdXNpbmcgc3dpdGNo IGFuZCBjYXNlIHN0YXRlbWVudAo+IAo+ID4gKwo+ID4gKyAgICAgICBjLT5zdG9wID0gdHJ1ZTsK PiA+ICt9Cj4gPiArCj4gPiArLyoKPiA+ICsgKiBUaGlzIGNhbGxiYWNrIHNjaGVkdWxlcyBhbGwg cGVuZGluZyBjaGFubmVscy4gV2UgY291bGQgYmUgbW9yZQo+ID4gKyAqIGNsZXZlciBoZXJlIGJ5 IHBvc3Rwb25pbmcgYWxsb2NhdGlvbiBvZiB0aGUgcmVhbCBETUEgY2hhbm5lbHMgdG8KPiA+ICsg KiB0aGlzIHBvaW50LCBhbmQgZnJlZWluZyB0aGVtIHdoZW4gb3VyIHZpcnR1YWwgY2hhbm5lbCBi ZWNvbWVzIGlkbGUuCj4gPiArICoKPiA+ICsgKiBXZSB3b3VsZCB0aGVuIG5lZWQgdG8gZGVhbCB3 aXRoICdhbGwgY2hhbm5lbHMgaW4tdXNlJwo+ID4gKyAqLwo+ID4gK3N0YXRpYyB2b2lkIG10a19k bWFfc2NoZWQodW5zaWduZWQgbG9uZyBkYXRhKQo+ID4gK3sKPiAKPiBBcyBhdCB0aGUgaW5pdGlh bCBiZSBzYWlkLCB0cnkgdG8gbWFrZSBkZXNjcmlwdG9ycyBzdWJtaXQgYXMgZmFzdCBhcwo+IHBv c3NpYmxlIHdpdGhvdXQgaW52b2x2aW5nIGluIGEgdGFza2xldC4gVGhlIHNhbWUgaW1wcm92ZW1l bnQgaGFkIGJlZW4KPiBkb25lIGF0IG10ay1oc2RtYS5jICBzbyB5b3UgY291bGQgaGF2ZSBhIHJl ZmVyZW5jZSB0byBpdCBmaXJzdCBpZiB5b3UKPiBoYXZlIG5vIG11Y2ggaWRlYSBvZiBob3cgdG8g YmVnaW4gdG8gaW1wcm92ZS4KPiAKPiA+ICsgICAgICAgc3RydWN0IG10a19kbWFkZXYgKm10a2Qg PSAoc3RydWN0IG10a19kbWFkZXYgKilkYXRhOwo+ID4gKyAgICAgICBzdHJ1Y3QgdmlydF9kbWFf ZGVzYyAqdmQ7Cj4gPiArICAgICAgIHN0cnVjdCBtdGtfY2hhbiAqYzsKPiA+ICsgICAgICAgdW5z aWduZWQgbG9uZyBmbGFnczsKPiA+ICsgICAgICAgTElTVF9IRUFEKGhlYWQpOwo+ID4gKwo+ID4g KyAgICAgICBzcGluX2xvY2tfaXJxKCZtdGtkLT5sb2NrKTsKPiA+ICsgICAgICAgbGlzdF9zcGxp Y2VfdGFpbF9pbml0KCZtdGtkLT5wZW5kaW5nLCAmaGVhZCk7Cj4gPiArICAgICAgIHNwaW5fdW5s b2NrX2lycSgmbXRrZC0+bG9jayk7Cj4gPiArCj4gPiArICAgICAgIGlmICghbGlzdF9lbXB0eSgm aGVhZCkpIHsKPiA+ICsgICAgICAgICAgICAgICBjID0gbGlzdF9maXJzdF9lbnRyeSgmaGVhZCwg c3RydWN0IG10a19jaGFuLCBub2RlKTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICBzcGluX2xv Y2tfaXJxc2F2ZSgmYy0+dmMubG9jaywgZmxhZ3MpOwo+ID4gKyAgICAgICAgICAgICAgIGlmIChj LT5jZmcuZGlyZWN0aW9uID09IERNQV9ERVZfVE9fTUVNKSB7Cj4gPiArICAgICAgICAgICAgICAg ICAgICAgICBsaXN0X2RlbF9pbml0KCZjLT5ub2RlKTsKPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgIG10a19kbWFfc3RhcnRfcngoYyk7Cj4gPiArICAgICAgICAgICAgICAgfSBlbHNlIGlmIChj LT5jZmcuZGlyZWN0aW9uID09IERNQV9NRU1fVE9fREVWKSB7Cj4gPiArICAgICAgICAgICAgICAg ICAgICAgICB2ZCA9IHZjaGFuX25leHRfZGVzYygmYy0+dmMpOwo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgYy0+ZGVzYyA9IHRvX210a19kbWFfZGVzYygmdmQtPnR4KTsKPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgIGxpc3RfZGVsX2luaXQoJmMtPm5vZGUpOwo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgbXRrX2RtYV9zdGFydF90eChjKTsKPiA+ICsgICAgICAgICAgICAgICB9Cj4g PiArICAgICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYy0+dmMubG9jaywgZmxh Z3MpOwo+ID4gKyAgICAgICB9Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgbXRrX2RtYV9h bGxvY19jaGFuX3Jlc291cmNlcyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCj4gPiArewo+ID4gKyAg ICAgICBzdHJ1Y3QgbXRrX2RtYWRldiAqbXRrZCA9IHRvX210a19kbWFfZGV2KGNoYW4tPmRldmlj ZSk7Cj4gPiArICAgICAgIHN0cnVjdCBtdGtfY2hhbiAqYyA9IHRvX210a19kbWFfY2hhbihjaGFu KTsKPiA+ICsgICAgICAgaW50IHJldCA9IC1FQlVTWTsKPiA+ICsKPiA+ICsgICAgICAgcG1fcnVu dGltZV9nZXRfc3luYyhtdGtkLT5kZGV2LmRldik7Cj4gPiArCj4gPiArICAgICAgIGlmICghbXRr ZC0+Y2hbY2hhbi0+Y2hhbl9pZF0pIHsKPiA+ICsgICAgICAgICAgICAgICBjLT5iYXNlID0gbXRr ZC0+bWVtX2Jhc2VbY2hhbi0+Y2hhbl9pZF0KPiAKPiBtdGtkLT5tZW1fYmFzZSBpcyB1bm5lY2Vz c2FyeSwgd2UgY2FuIGRpcmVjdGx5IGRlY2lkZSBjLT5iYXNlIGluIHRoZQo+IGRyaXZlciBwcm9i ZSBzdGFnZQo+IAo+ID4gKyAgICAgICAgICAgICAgIG10a2QtPmNoW2NoYW4tPmNoYW5faWRdID0g YzsKPiAKPiBtdGtkLT5jaCBpcyBhbHNvIHVubmVjZXNzYXJ5LCB0aGUgY29yZSBhbHdheXMgcGFz cyBzdHJ1Y3QgZG1hX2NoYW4KPiAqY2hhbiB0byBlYWNoIGNhbGxiYWNrIGZ1bmN0aW9uCj4gCj4g PiArICAgICAgICAgICAgICAgcmV0ID0gMTsKPiAKPiByZXQgYmUgMSBzZWVtcyBiZSB3cm9uZwo+ IAo+ID4gKyAgICAgICB9Cj4gPiArICAgICAgIGMtPnJlcXVlc3RlZCA9IGZhbHNlOwo+ID4gKyAg ICAgICBtdGtfZG1hX3Jlc2V0KGMpOwo+ID4gKwo+ID4gKyAgICAgICByZXR1cm4gcmV0Owo+ID4g K30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBtdGtfZG1hX2ZyZWVfY2hhbl9yZXNvdXJjZXMoc3Ry dWN0IGRtYV9jaGFuICpjaGFuKQo+ID4gK3sKPiA+ICsgICAgICAgc3RydWN0IG10a19kbWFkZXYg Km10a2QgPSB0b19tdGtfZG1hX2RldihjaGFuLT5kZXZpY2UpOwo+ID4gKyAgICAgICBzdHJ1Y3Qg bXRrX2NoYW4gKmMgPSB0b19tdGtfZG1hX2NoYW4oY2hhbik7Cj4gPiArCj4gPiArICAgICAgIGlm IChjLT5yZXF1ZXN0ZWQpIHsKPiA+ICsgICAgICAgICAgICAgICBjLT5yZXF1ZXN0ZWQgPSBmYWxz ZTsKPiA+ICsgICAgICAgICAgICAgICBmcmVlX2lycShtdGtkLT5kbWFfaXJxW2NoYW4tPmNoYW5f aWRdLCBjaGFuKTsKPiAKPiBpdCBtYWtlcyBub3QgY29uc2lzdGVudCBiZWNhdXNlIHRoZXJlIGFy ZSBub3QgcmVxdWVzdF9pcnEgcHJlc2VudCBhdAo+IG10a19kbWFfYWxsb2NfY2hhbl9yZXNvdXJj ZXMuIGJ1dCBJJ2QgcHJlZmVyIGEgIGRldm1fcmVxdWVzdF9pcnEgaXMKPiBiZWluZyBkb25lCj4g YXMgdGhlIGRyaXZlciBnb3QgcHJvYmUuCj4gCj4gPiArICAgICAgIH0KPiA+ICsKPiA+ICsgICAg ICAgdGFza2xldF9raWxsKCZtdGtkLT50YXNrKTsKPiA+ICsgICAgICAgdGFza2xldF9raWxsKCZj LT52Yy50YXNrKTsKPiA+ICsKPiA+ICsgICAgICAgYy0+YmFzZSA9IE5VTEw7Cj4gPiArICAgICAg IG10a2QtPmNoW2NoYW4tPmNoYW5faWRdID0gTlVMTDsKPiA+ICsgICAgICAgdmNoYW5fZnJlZV9j aGFuX3Jlc291cmNlcygmYy0+dmMpOwo+ID4gKwo+ID4gKyAgICAgICBwbV9ydW50aW1lX3B1dF9z eW5jKG10a2QtPmRkZXYuZGV2KTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGVudW0gZG1hX3N0 YXR1cyBtdGtfZG1hX3R4X3N0YXR1cyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtYV9jb29raWVfdCBjb29raWUsCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkbWFfdHhf c3RhdGUgKnR4c3RhdGUpCj4gPiArewo+ID4gKyAgICAgICBzdHJ1Y3QgbXRrX2NoYW4gKmMgPSB0 b19tdGtfZG1hX2NoYW4oY2hhbik7Cj4gPiArICAgICAgIGVudW0gZG1hX3N0YXR1cyByZXQ7Cj4g PiArICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gPiArCj4gPiArICAgICAgIGlmICghdHhz dGF0ZSkKPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gRE1BX0VSUk9SOwo+ID4gKwo+ID4gKyAg ICAgICByZXQgPSBkbWFfY29va2llX3N0YXR1cyhjaGFuLCBjb29raWUsIHR4c3RhdGUpOwo+ID4g KyAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmYy0+dmMubG9jaywgZmxhZ3MpOwo+ID4gKyAgICAg ICBpZiAocmV0ID09IERNQV9JTl9QUk9HUkVTUykgewo+ID4gKyAgICAgICAgICAgICAgIGMtPnJ4 X3N0YXR1cyA9IG10a19kbWFfY2hhbl9yZWFkKGMsIFZGRl9SUFQpCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICYgTVRLX0RNQV9SSU5HX1NJWkU7Cj4gPiArICAgICAgICAgICAgICAg ZG1hX3NldF9yZXNpZHVlKHR4c3RhdGUsIGMtPnJ4X3N0YXR1cyk7Cj4gPiArICAgICAgIH0gZWxz ZSBpZiAocmV0ID09IERNQV9DT01QTEVURSAmJiBjLT5jZmcuZGlyZWN0aW9uID09IERNQV9ERVZf VE9fTUVNKSB7Cj4gPiArICAgICAgICAgICAgICAgZG1hX3NldF9yZXNpZHVlKHR4c3RhdGUsIGMt PnJ4X3N0YXR1cyk7Cj4gPiArICAgICAgIH0gZWxzZSB7Cj4gPiArICAgICAgICAgICAgICAgZG1h X3NldF9yZXNpZHVlKHR4c3RhdGUsIDApOwo+ID4gKyAgICAgICB9Cj4gPiArICAgICAgIHNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJmMtPnZjLmxvY2ssIGZsYWdzKTsKPiA+ICsKPiA+ICsgICAgICAg cmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhf ZGVzY3JpcHRvciAqbXRrX2RtYV9wcmVwX3NsYXZlX3NnCj4gPiArICAgICAgIChzdHJ1Y3QgZG1h X2NoYW4gKmNoYW4sIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLAo+ID4gKyAgICAgICB1bnNpZ25l ZCBpbnQgc2dsZW4sICAgICBlbnVtIGRtYV90cmFuc2Zlcl9kaXJlY3Rpb24gZGlyLAo+ID4gKyAg ICAgICB1bnNpZ25lZCBsb25nIHR4X2ZsYWdzLCB2b2lkICpjb250ZXh0KQo+ID4gK3sKPiA+ICsg ICAgICAgc3RydWN0IG10a19jaGFuICpjID0gdG9fbXRrX2RtYV9jaGFuKGNoYW4pOwo+ID4gKyAg ICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnZW50Owo+ID4gKyAgICAgICBzdHJ1Y3QgbXRrX2Rt YV9kZXNjICpkOwo+ID4gKyAgICAgICBzdHJ1Y3QgbXRrX2RtYV9zZyAqc2c7Cj4gPiArICAgICAg IHVuc2lnbmVkIGludCBzaXplLCBpLCBqLCBlbjsKPiA+ICsKPiA+ICsgICAgICAgZW4gPSAxOwo+ ID4gKwo+ID4gKyAgICAgICBpZiAoKGRpciAhPSBETUFfREVWX1RPX01FTSkgJiYKPiA+ICsgICAg ICAgICAgICAgICAoZGlyICE9IERNQV9NRU1fVE9fREVWKSkgewo+ID4gKyAgICAgICAgICAgICAg IGRldl9lcnIoY2hhbi0+ZGV2aWNlLT5kZXYsICJiYWQgZGlyZWN0aW9uXG4iKTsKPiA+ICsgICAg ICAgICAgICAgICByZXR1cm4gTlVMTDsKPiA+ICsgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAv KiBOb3cgYWxsb2NhdGUgYW5kIHNldHVwIHRoZSBkZXNjcmlwdG9yLiAqLwo+ID4gKyAgICAgICBk ID0ga3phbGxvYyhzaXplb2YoKmQpICsgc2dsZW4gKiBzaXplb2YoZC0+c2dbMF0pLCBHRlBfQVRP TUlDKTsKPiA+ICsgICAgICAgaWYgKCFkKQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybiBOVUxM Owo+ID4gKwo+ID4gKyAgICAgICBkLT5kaXIgPSBkaXI7Cj4gPiArCj4gPiArICAgICAgIGogPSAw Owo+ID4gKyAgICAgICBmb3JfZWFjaF9zZyhzZ2wsIHNnZW50LCBzZ2xlbiwgaSkgewo+ID4gKyAg ICAgICAgICAgICAgIGQtPnNnW2pdLmFkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZ2VudCk7Cj4gPiAr ICAgICAgICAgICAgICAgZC0+c2dbal0uZW4gPSBlbjsKPiA+ICsgICAgICAgICAgICAgICBkLT5z Z1tqXS5mbiA9IHNnX2RtYV9sZW4oc2dlbnQpIC8gZW47Cj4gPiArICAgICAgICAgICAgICAgaisr Owo+ID4gKyAgICAgICB9Cj4gPiArCj4gPiArICAgICAgIGQtPnNnbGVuID0gajsKPiA+ICsKPiA+ ICsgICAgICAgaWYgKGRpciA9PSBETUFfTUVNX1RPX0RFVikgewo+ID4gKyAgICAgICAgICAgICAg IGZvciAoc2l6ZSA9IGkgPSAwOyBpIDwgZC0+c2dsZW47IGkrKykgewo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgc2cgPSAmZC0+c2dbaV07Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBz aXplICs9IHNnLT5lbiAqIHNnLT5mbjsKPiA+ICsgICAgICAgICAgICAgICB9Cj4gPiArICAgICAg ICAgICAgICAgZC0+bGVuID0gc2l6ZTsKPiA+ICsgICAgICAgfQo+ID4gKwo+IAo+IFRoZSBkcml2 ZXIgYWx3YXlzIG9ubHkgaGFuZGxlcyBkYXRhIG1vdmUgZm9yIHRoZSBzaW5nbGUgY29udGlndW91 cwo+IGFyZWEsIGJ1dCBpdCBzZWVtcyB0aGUgY2FsbGJhY2sgbXVzdCBwcm92aWRlIHRoZSBzY2F0 dGVyLWdhdGhlcgo+IGZ1bmN0aW9uIHRvIHRoZSBkbWFlZ2luZS4gb3RoZXJ3aXNlLCB3aHkgaXMg dGhlIGNhbGxiYWNrIGJlIGNhbGxlZAo+IGRldmljZV9wcmVwX3NsYXZlX3NnPwo+IAoKYmVjYXVz ZSBpbiA4MjUwIFVBUlQgbmF0aXZlIGNvZGUsIGNhbGwgdGhlIGRldmljZV9wcmVwX3NsYXZlX3Nn LiB3ZSBqdXN0CnVzZSBvbmUgcmluZyBidWZmZXIuCgo+ID4gKyAgICAgICByZXR1cm4gdmNoYW5f dHhfcHJlcCgmYy0+dmMsICZkLT52ZCwgdHhfZmxhZ3MpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0 aWMgdm9pZCBtdGtfZG1hX2lzc3VlX3BlbmRpbmcoc3RydWN0IGRtYV9jaGFuICpjaGFuKQo+ID4g K3sKPiA+ICsgICAgICAgc3RydWN0IG10a19jaGFuICpjID0gdG9fbXRrX2RtYV9jaGFuKGNoYW4p Owo+ID4gKyAgICAgICBzdHJ1Y3QgdmlydF9kbWFfZGVzYyAqdmQ7Cj4gPiArICAgICAgIHN0cnVj dCBtdGtfZG1hZGV2ICptdGtkOwo+ID4gKyAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwo+ID4g Kwo+ID4gKyAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmYy0+dmMubG9jaywgZmxhZ3MpOwo+ID4g KyAgICAgICBpZiAoYy0+Y2ZnLmRpcmVjdGlvbiA9PSBETUFfREVWX1RPX01FTSkgewo+ID4gKyAg ICAgICAgICAgICAgIG10a2QgPSB0b19tdGtfZG1hX2RldihjaGFuLT5kZXZpY2UpOwo+IAo+IG10 a2QgY2FuIGJlIGRyb3BwZWQgYXMgaXQgc2VlbXMgbm8gdXNlcnMKPiAKPiA+ICsgICAgICAgICAg ICAgICBpZiAodmNoYW5faXNzdWVfcGVuZGluZygmYy0+dmMpICYmICFjLT5kZXNjKSB7Cj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICB2ZCA9IHZjaGFuX25leHRfZGVzYygmYy0+dmMpOwo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgYy0+ZGVzYyA9IHRvX210a19kbWFfZGVzYygmdmQtPnR4 KTsKPiA+ICsgICAgICAgICAgICAgICB9Cj4gPiArICAgICAgIH0gZWxzZSBpZiAoYy0+Y2ZnLmRp cmVjdGlvbiA9PSBETUFfTUVNX1RPX0RFVikgewo+ID4gKyAgICAgICAgICAgICAgIGlmICh2Y2hh bl9pc3N1ZV9wZW5kaW5nKCZjLT52YykgJiYgIWMtPmRlc2MpIHsKPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgIHZkID0gdmNoYW5fbmV4dF9kZXNjKCZjLT52Yyk7Cj4gPiArICAgICAgICAgICAg ICAgICAgICAgICBjLT5kZXNjID0gdG9fbXRrX2RtYV9kZXNjKCZ2ZC0+dHgpOwo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgbXRrX2RtYV9zdGFydF90eChjKTsKPiA+ICsgICAgICAgICAgICAg ICB9Cj4gPiArICAgICAgIH0KPiA+ICsgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYy0+ dmMubG9jaywgZmxhZ3MpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaXJxcmV0dXJuX3QgbXRr X2RtYV9yeF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQo+ID4gK3sKPiA+ICsgICAg ICAgc3RydWN0IGRtYV9jaGFuICpjaGFuID0gKHN0cnVjdCBkbWFfY2hhbiAqKWRldl9pZDsKPiA+ ICsgICAgICAgc3RydWN0IG10a19jaGFuICpjID0gdG9fbXRrX2RtYV9jaGFuKGNoYW4pOwo+ID4g KyAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwo+ID4gKwo+ID4gKyAgICAgICBzcGluX2xvY2tf aXJxc2F2ZSgmYy0+dmMubG9jaywgZmxhZ3MpOwo+ID4gKyAgICAgICBtdGtfZG1hX2NoYW5fd3Jp dGUoYywgVkZGX0lOVF9GTEFHLCBWRkZfUlhfSU5UX0ZMQUdfQ0xSX0IpOwo+ID4gKwo+ID4gKyAg ICAgICBtdGtfZG1hX3N0YXJ0X3J4KGMpOwo+ID4gKwo+ID4gKyAgICAgICBzcGluX3VubG9ja19p cnFyZXN0b3JlKCZjLT52Yy5sb2NrLCBmbGFncyk7Cj4gPiArCj4gPiArICAgICAgIHJldHVybiBJ UlFfSEFORExFRDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGlycXJldHVybl90IG10a19kbWFf dHhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKPiA+ICt7Cj4gPiArICAgICAgIHN0 cnVjdCBkbWFfY2hhbiAqY2hhbiA9IChzdHJ1Y3QgZG1hX2NoYW4gKilkZXZfaWQ7Cj4gPiArICAg ICAgIHN0cnVjdCBtdGtfZG1hZGV2ICptdGtkID0gdG9fbXRrX2RtYV9kZXYoY2hhbi0+ZGV2aWNl KTsKPiA+ICsgICAgICAgc3RydWN0IG10a19jaGFuICpjID0gdG9fbXRrX2RtYV9jaGFuKGNoYW4p Owo+ID4gKyAgICAgICBzdHJ1Y3QgbXRrX2RtYV9kZXNjICpkID0gYy0+ZGVzYzsKPiA+ICsgICAg ICAgdW5zaWduZWQgbG9uZyBmbGFnczsKPiA+ICsKPiA+ICsgICAgICAgc3Bpbl9sb2NrX2lycXNh dmUoJmMtPnZjLmxvY2ssIGZsYWdzKTsKPiA+ICsgICAgICAgaWYgKGQtPmxlbiAhPSAwVSkgewo+ ID4gKyAgICAgICAgICAgICAgIGxpc3RfYWRkX3RhaWwoJmMtPm5vZGUsICZtdGtkLT5wZW5kaW5n KTsKPiA+ICsgICAgICAgICAgICAgICB0YXNrbGV0X3NjaGVkdWxlKCZtdGtkLT50YXNrKTsKPiA+ ICsgICAgICAgfSBlbHNlIHsKPiA+ICsgICAgICAgICAgICAgICBsaXN0X2RlbCgmZC0+dmQubm9k ZSk7Cj4gPiArICAgICAgICAgICAgICAgdmNoYW5fY29va2llX2NvbXBsZXRlKCZkLT52ZCk7Cj4g PiArICAgICAgIH0KPiA+ICsgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYy0+dmMubG9j aywgZmxhZ3MpOwo+ID4gKwo+ID4gKyAgICAgICBtdGtfZG1hX2NoYW5fd3JpdGUoYywgVkZGX0lO VF9GTEFHLCBWRkZfVFhfSU5UX0ZMQUdfQ0xSX0IpOwo+ID4gKwo+ID4gKyAgICAgICByZXR1cm4g SVJRX0hBTkRMRUQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgbXRrX2RtYV9zbGF2ZV9j b25maWcoc3RydWN0IGRtYV9jaGFuICpjaGFuLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgZG1hX3NsYXZlX2NvbmZpZyAqY2ZnKQo+ID4gK3sKPiA+ICsgICAgICAg c3RydWN0IG10a19jaGFuICpjID0gdG9fbXRrX2RtYV9jaGFuKGNoYW4pOwo+ID4gKyAgICAgICBz dHJ1Y3QgbXRrX2RtYWRldiAqbXRrZCA9IHRvX210a19kbWFfZGV2KGMtPnZjLmNoYW4uZGV2aWNl KTsKPiA+ICsgICAgICAgaW50IHJldDsKPiA+ICsKPiA+ICsgICAgICAgYy0+Y2ZnID0gKmNmZzsK PiA+ICsKPiA+ICsgICAgICAgaWYgKGNmZy0+ZGlyZWN0aW9uID09IERNQV9ERVZfVE9fTUVNKSB7 Cj4gPiArICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHJ4X2xlbiA9IGNmZy0+c3JjX2FkZHJf d2lkdGggKiAxMDI0Owo+IAo+IGl0IHNlZW1zIHlvdSBzaG91bGQgdXNlIGNmZy0+c3JjX3BvcnRf d2luZG93X3NpemUgYXMgdGhlIGNvbW1lbnRzIGV4cGxhaW5zCj4gCj4gKiBAc3JjX3BvcnRfd2lu ZG93X3NpemU6IFRoZSBsZW5ndGggb2YgdGhlIHJlZ2lzdGVyIGFyZWEgaW4gd29yZHMgdGhlIGRh dGEgbmVlZAo+ICAqIHRvIGJlIGFjY2Vzc2VkIG9uIHRoZSBkZXZpY2Ugc2lkZS4gSXQgaXMgb25s eSB1c2VkIGZvciBkZXZpY2VzIHdoaWNoIGlzIHVzaW5nCj4gICogYW4gYXJlYSBpbnN0ZWFkIG9m IGEgc2luZ2xlIHJlZ2lzdGVyIHRvIHJlY2VpdmUgdGhlIGRhdGEuIFR5cGljYWxseSB0aGUgRE1B Cj4gICogbG9vcHMgaW4gdGhpcyBhcmVhIGluIG9yZGVyIHRvIHRyYW5zZmVyIHRoZSBkYXRhLgo+ ICAqIEBkc3RfcG9ydF93aW5kb3dfc2l6ZTogc2FtZSBhcyBzcmNfcG9ydF93aW5kb3dfc2l6ZSBi dXQgZm9yIHRoZSBkZXN0aW5hdGlvbgo+ICAqIHBvcnQuCj4gCgppbiA4MjUwIFVBUlQgbmF0aXZl IGNvZGUsIHdpbGwgc2V0IHRoZSBwYXJhbWV0ZXIuIGlmIHdhbnQgdG8gbW9kaWZ5CnRoaXMsIGkg dGhpbmsgdGhhdCBtYXliZSBhdCBuZXh0IGtlcm5lbCByZWxlYXNlLCB3ZSBjYW4gbW9kaWZ5IGl0 LiBpCnN1Z2dlc3QgdGhhdCBub3QgbW9kaWZ5IGl0IGF0IHRoaXMgcGF0Y2guIGJlY2F1c2UgaXQg cmVsYXRlIG9mIDgyNTAgdWFydApjb2RlLiB0aGFua3MuCgo+ID4gKwo+ID4gKyAgICAgICAgICAg ICAgIG10a19kbWFfY2hhbl93cml0ZShjLCBWRkZfQUREUiwgY2ZnLT5zcmNfYWRkcik7Cj4gPiAr ICAgICAgICAgICAgICAgbXRrX2RtYV9jaGFuX3dyaXRlKGMsIFZGRl9MRU4sIHJ4X2xlbik7Cj4g PiArICAgICAgICAgICAgICAgbXRrX2RtYV9jaGFuX3dyaXRlKGMsIFZGRl9USFJFLCBWRkZfUlhf VEhSRShyeF9sZW4pKTsKPiA+ICsgICAgICAgICAgICAgICBtdGtfZG1hX2NoYW5fd3JpdGUoYywK PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkZGX0lOVF9FTiwgVkZGX1JY X0lOVF9FTjBfQgo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFZGRl9S WF9JTlRfRU4xX0IpOwo+ID4gKyAgICAgICAgICAgICAgIG10a19kbWFfY2hhbl93cml0ZShjLCBW RkZfSU5UX0ZMQUcsIFZGRl9SWF9JTlRfRkxBR19DTFJfQik7Cj4gPiArICAgICAgICAgICAgICAg bXRrX2RtYV9jaGFuX3dyaXRlKGMsIFZGRl9FTiwgVkZGX0VOX0IpOwo+IAo+IEknZCBwcmVmZXIg dG8gbW92ZSB0aG9zZSBjaGFubmVsIGludGVycnVwdCBlbmFibGVtZW50IHRvCj4gLmRldmljZV9h bGxvY19jaGFuX3Jlc291cmNlcwo+IGFuZCByZWxhdGVkIGRpc2FibGVtZW50IHRvIC5kZXZpY2Vf ZnJlZV9jaGFuX3Jlc291cmNlcwo+IAoKaSB0aGluayB0aGF0LCBmaXJzdCBuZWVkIHNldCB0aGUg Y29uZmlnIHRvIEhXLCBhbmQgdGhlIGVuYWJsZSB0aGUgRE1BLiAKCj4gPiArCj4gPiArICAgICAg ICAgICAgICAgaWYgKCFjLT5yZXF1ZXN0ZWQpIHsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAg IGMtPnJlcXVlc3RlZCA9IHRydWU7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBy ZXF1ZXN0X2lycShtdGtkLT5kbWFfaXJxW2NoYW4tPmNoYW5faWRdLAo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRrX2RtYV9yeF9pbnRlcnJ1cHQsCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUlFGX1RSSUdHRVJfTk9O RSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtCVUlMRF9N T0ROQU1FLCBjaGFuKTsKPiAKPiBJU1IgcmVnaXN0cmF0aW9uIHVzdWFsbHkgaGFwcGVucyBhcyB0 aGUgZHJpdmVyIGdvdCBwcm9iZSwgaXQgY2FuIGdpdmUKPiB0aGUgc3lzdGVtIG1vcmUgZmxleGli aWxpdHkgdG8gbWFuYWdlIHN1Y2ggSVJRIGFmZmluaXR5IG9uIHRoZSBmbHkuCj4gCgppIHdpbGwg bW92ZSB0aGUgcmVxdWVzdCBpcnEgdG8gYWxsb2MgY2hhbm5lbC4KCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICBpZiAocmV0IDwgMCkgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkZXZfZXJyKGNoYW4tPmRldmljZS0+ZGV2LCAiQ2FuJ3QgcmVxdWVzdCByeCBkbWEgSVJR XG4iKTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7 Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICB9Cj4gPiArICAgICAgICAgICAgICAgfQo+ID4g KyAgICAgICB9IGVsc2UgaWYgKGNmZy0+ZGlyZWN0aW9uID09IERNQV9NRU1fVE9fREVWKSAgICB7 Cj4gPiArICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHR4X2xlbiA9IGNmZy0+ZHN0X2FkZHJf d2lkdGggKiAxMDI0Owo+IAo+IERpdHRvIGFzIGFib3ZlLCBpdCBzZWVtcyB5b3Ugc2hvdWxkIHVz ZSBjZmctPmRzdF9wb3J0X3dpbmRvd19zaXplCj4gCj4gPiArCj4gPiArICAgICAgICAgICAgICAg bXRrX2RtYV9jaGFuX3dyaXRlKGMsIFZGRl9BRERSLCBjZmctPmRzdF9hZGRyKTsKPiA+ICsgICAg ICAgICAgICAgICBtdGtfZG1hX2NoYW5fd3JpdGUoYywgVkZGX0xFTiwgdHhfbGVuKTsKPiA+ICsg ICAgICAgICAgICAgICBtdGtfZG1hX2NoYW5fd3JpdGUoYywgVkZGX1RIUkUsIFZGRl9UWF9USFJF KHR4X2xlbikpOwo+ID4gKyAgICAgICAgICAgICAgIG10a19kbWFfY2hhbl93cml0ZShjLCBWRkZf SU5UX0ZMQUcsIFZGRl9UWF9JTlRfRkxBR19DTFJfQik7Cj4gPiArICAgICAgICAgICAgICAgbXRr X2RtYV9jaGFuX3dyaXRlKGMsIFZGRl9FTiwgVkZGX0VOX0IpOwo+IAo+IGRpdHRvLCBJJ2QgcHJl ZmVyIHRvIG1vdmUgdGhvc2UgY2hhbm5lbCBpbnRlcnJ1cHQgZW5hYmxlbWVudCB0bwo+IC5kZXZp Y2VfYWxsb2NfY2hhbl9yZXNvdXJjZXMgYW5kIHJlbGF0ZWQgZGlzYWJsZW1lbnQgdG8KPiAuZGV2 aWNlX2ZyZWVfY2hhbl9yZXNvdXJjZXMKPiAKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICBpZiAo IWMtPnJlcXVlc3RlZCkgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgYy0+cmVxdWVzdGVk ID0gdHJ1ZTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHJlcXVlc3RfaXJxKG10 a2QtPmRtYV9pcnFbY2hhbi0+Y2hhbl9pZF0sCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBtdGtfZG1hX3R4X2ludGVycnVwdCwKPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSUUZfVFJJR0dFUl9OT05FLAo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS0JVSUxEX01PRE5BTUUsIGNoYW4p Owo+IAo+IGRpdHRvLCB3ZSBjYW4gcmVxdWVzdCBJU1Igd2l0aCBkZXZtX3JlcXVlc3RfaXJxIGlu IHRoZSBkcml2ZXIgZ290Cj4gcHJvYmUgYW5kIHRyaW0gdGhlIGMtPnJlcXVlc3QgbWVtYmVyCj4g Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0IDwgMCkgewo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKGNoYW4tPmRldmljZS0+ZGV2LCAiQ2FuJ3Qg cmVxdWVzdCB0eCBkbWEgSVJRXG4iKTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIC1FSU5WQUw7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICB9Cj4gPiArICAg ICAgICAgICAgICAgfQo+ID4gKyAgICAgICB9Cj4gPiArCj4gPiArICAgICAgIGlmIChtdGtkLT5z dXBwb3J0XzMzYml0cykKPiA+ICsgICAgICAgICAgICAgICBtdGtfZG1hX2NoYW5fd3JpdGUoYywg VkZGXzRHX1NVUFBPUlQsIFZGRl80R19TVVBQT1JUX0IpOwo+ID4gKwo+ID4gKyAgICAgICBpZiAo bXRrX2RtYV9jaGFuX3JlYWQoYywgVkZGX0VOKSAhPSBWRkZfRU5fQikgewo+ID4gKyAgICAgICAg ICAgICAgIGRldl9lcnIoY2hhbi0+ZGV2aWNlLT5kZXYsCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAiY29uZmlnIGRtYSBkaXJbJWRdIGZhaWxcbiIsIGNmZy0+ZGlyZWN0aW9uKTsKPiA+ICsg ICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiA+ICsgICAgICAgfQo+ID4gKwo+ID4gKyAg ICAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBtdGtfZG1hX3Rlcm1p bmF0ZV9hbGwoc3RydWN0IGRtYV9jaGFuICpjaGFuKQo+ID4gK3sKPiA+ICsgICAgICAgc3RydWN0 IG10a19jaGFuICpjID0gdG9fbXRrX2RtYV9jaGFuKGNoYW4pOwo+ID4gKyAgICAgICB1bnNpZ25l ZCBsb25nIGZsYWdzOwo+ID4gKwo+ID4gKyAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmYy0+dmMu bG9jaywgZmxhZ3MpOwo+ID4gKyAgICAgICBsaXN0X2RlbF9pbml0KCZjLT5ub2RlKTsKPiA+ICsg ICAgICAgbXRrX2RtYV9zdG9wKGMpOwo+ID4gKyAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZjLT52Yy5sb2NrLCBmbGFncyk7Cj4gPiArCj4gPiArICAgICAgIHJldHVybiAwOwo+ID4gK30K PiA+ICsKPiA+ICtzdGF0aWMgaW50IG10a19kbWFfZGV2aWNlX3BhdXNlKHN0cnVjdCBkbWFfY2hh biAqY2hhbikKPiA+ICt7Cj4gPiArICAgICAgIC8qIGp1c3QgZm9yIGNoZWNrIGNhcHMgcGFzcyAq Lwo+ID4gKyAgICAgICByZXR1cm4gLUVJTlZBTDsKPiAKPiBhbHdheXMgcmV0dXJuIGVycm9yIGNv ZGUgc2VlbXMgbm90IHRoZSBjbGllbnQgZHJpdmVyIHdhbnRzIHVzIHRvIGRvLgo+IAo+IG1heWJl IGlmIHRoZSBoYXJkd2FyZSBkb2Vzbid0IHN1cHBvcnQgcGF1c2UsIHdlIGNhbiBtYWtlIGEgc29m dHdhcmUKPiBwYXVzZSwgdGhhdCB3YWl0cyB1bnRpbCBhbGwgYWN0aXZlIGRlc2NyaXB0b3JzIGlu IGhhcmR3YXJlIGRvbmUsIHRoZW4KPiBkaXNhYmxlIGludGVycnVwdCBhbmQgdGhlbiBzdG9wIGhh bmRsaW5nIHRoZSBmb2xsb3dpbmcgdmQgaW4gdGhlCj4gdmNoYW4uCj4gCj4gPiArfQoKdGhlIGNv ZGUgY2FuJ3QgcnVuLiBqdXN0IGZvciA4MjUwIG5hdGl2ZSBjb2RlIHRvIGNoZWNrIHRoZSBmdW5j dGlvbgpwb2ludGVyLiBpbiB0aGUgZnV0dXJlLCBpZiB0aGUgZnVuY3Rpb24gdXNlZnVsLCB3ZSBj YW4gcmVhbGl6ZS4gdGhhbmtzLgoKPiA+ICsKPiA+ICtzdGF0aWMgaW50IG10a19kbWFfZGV2aWNl X3Jlc3VtZShzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCj4gPiArewo+ID4gKyAgICAgICAvKiBqdXN0 IGZvciBjaGVjayBjYXBzIHBhc3MgKi8KPiA+ICsgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gCj4g c2ltaWxhciB0byB0aGUgYWJvdmUKPiAKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgbXRr X2RtYV9mcmVlKHN0cnVjdCBtdGtfZG1hZGV2ICptdGtkKQo+ID4gK3sKPiA+ICsgICAgICAgdGFz a2xldF9raWxsKCZtdGtkLT50YXNrKTsKPiA+ICsgICAgICAgd2hpbGUgKGxpc3RfZW1wdHkoJm10 a2QtPmRkZXYuY2hhbm5lbHMpID09IDApIHsKPiAhbGlzdF9lbXB0eSgmbXRrZC0+ZGRldi5jaGFu bmVscykKPiA+ICsgICAgICAgICAgICAgICBzdHJ1Y3QgbXRrX2NoYW4gKmMgPSBsaXN0X2ZpcnN0 X2VudHJ5KCZtdGtkLT5kZGV2LmNoYW5uZWxzLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IG10a19jaGFuLCB2Yy5jaGFuLmRldmljZV9ub2RlKTsKPiA+ICsKPiA+ICsgICAgICAg ICAgICAgICBsaXN0X2RlbCgmYy0+dmMuY2hhbi5kZXZpY2Vfbm9kZSk7Cj4gPiArICAgICAgICAg ICAgICAgdGFza2xldF9raWxsKCZjLT52Yy50YXNrKTsKPiA+ICsgICAgICAgICAgICAgICBkZXZt X2tmcmVlKG10a2QtPmRkZXYuZGV2LCBjKTsKPiAKPiBubyBuZWVkIHRvIGNhbGwgZGV2bV9rZnJl ZSwgdGhlIGNvcmUgd291bGQgaGVscCBkbyB0aGlzCj4gCj4gPiArICAgICAgIH0KPiA+ICt9Cj4g PiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRrX3VhcnRfZG1hX21h dGNoW10gPSB7Cj4gPiArICAgICAgIHsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ2NTc3LXVh cnQtZG1hIiwgfSwKPiA+ICsgICAgICAgeyAvKiBzZW50aW5lbCAqLyB9LAo+ID4gK307Cj4gPiAr TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXRrX3VhcnRfZG1hX21hdGNoKTsKPiA+ICsKPiA+ICtz dGF0aWMgaW50IG10a19hcGRtYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ ID4gK3sKPiA+ICsgICAgICAgc3RydWN0IG10a19kbWFkZXYgKm10a2Q7Cj4gPiArICAgICAgIHN0 cnVjdCByZXNvdXJjZSAqcmVzOwo+ID4gKyAgICAgICBzdHJ1Y3QgbXRrX2NoYW4gKmM7Cj4gPiAr ICAgICAgIHVuc2lnbmVkIGludCBpOwo+ID4gKyAgICAgICBpbnQgcmM7Cj4gPiArCj4gPiArICAg ICAgIG10a2QgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCptdGtkKSwgR0ZQX0tF Uk5FTCk7Cj4gPiArICAgICAgIGlmICghbXRrZCkKPiA+ICsgICAgICAgICAgICAgICByZXR1cm4g LUVOT01FTTsKPiA+ICsKPiA+ICsgICAgICAgZm9yIChpID0gMDsgaSA8IE1US19BUERNQV9DSEFO TkVMUzsgaSsrKSB7Cj4gPiArICAgICAgICAgICAgICAgcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291 cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCBpKTsKPiA+ICsgICAgICAgICAgICAgICBpZiAoIXJl cykKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOwo+ID4gKyAgICAg ICAgICAgICAgIG10a2QtPm1lbV9iYXNlW2ldID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2 LT5kZXYsIHJlcyk7Cj4gPiArICAgICAgICAgICAgICAgaWYgKElTX0VSUihtdGtkLT5tZW1fYmFz ZVtpXSkpCj4gPiArICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUFRSX0VSUihtdGtkLT5t ZW1fYmFzZVtpXSk7Cj4gPiArICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgZm9yIChpID0gMDsg aSA8IE1US19BUERNQV9DSEFOTkVMUzsgaSsrKSB7Cj4gPiArICAgICAgICAgICAgICAgbXRrZC0+ ZG1hX2lycVtpXSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgaSk7Cj4gPiArICAgICAgICAgICAg ICAgaWYgKChpbnQpbXRrZC0+ZG1hX2lycVtpXSA8IDApIHsKPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgIGRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgSVJRWyVkXVxuIiwgaSk7 Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiA+ICsgICAgICAg ICAgICAgICB9Cj4gPiArICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgbXRrZC0+Y2xrID0gZGV2 bV9jbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOwo+ID4gKyAgICAgICBpZiAoSVNfRVJSKG10a2Qt PmNsaykpIHsKPiA+ICsgICAgICAgICAgICAgICBkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBjbG9j ayBzcGVjaWZpZWRcbiIpOwo+ID4gKyAgICAgICAgICAgICAgIHJldHVybiBQVFJfRVJSKG10a2Qt PmNsayk7Cj4gPiArICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgaWYgKG9mX3Byb3BlcnR5X3Jl YWRfYm9vbChwZGV2LT5kZXYub2Zfbm9kZSwgImRtYS0zM2JpdHMiKSkgewo+ID4gKyAgICAgICAg ICAgICAgIGRldl9pbmZvKCZwZGV2LT5kZXYsICJTdXBwb3J0IGRtYSAzM2JpdHNcbiIpOwo+ID4g KyAgICAgICAgICAgICAgIG10a2QtPnN1cHBvcnRfMzNiaXRzID0gdHJ1ZTsKPiA+ICsgICAgICAg fQo+ID4gKwo+ID4gKyAgICAgICBpZiAobXRrZC0+c3VwcG9ydF8zM2JpdHMpCj4gPiArICAgICAg ICAgICAgICAgcmMgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KCZwZGV2LT5kZXYsIERNQV9C SVRfTUFTSygzMykpOwo+ID4gKyAgICAgICBlbHNlCj4gPiArICAgICAgICAgICAgICAgcmMgPSBk bWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KCZwZGV2LT5kZXYsIERNQV9CSVRfTUFTSygzMikpOwo+ IAo+ICByYyA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoJnBkZXYtPmRldiwgRE1BX0JJVF9N QVNLKDMyIHwKPiBtdGtkLT5zdXBwb3J0XzMzYml0cykpOwo+IAo+ID4gKyAgICAgICBpZiAocmMp Cj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIHJjOwo+ID4gKwo+ID4gKyAgICAgICBkbWFfY2Fw X3NldChETUFfU0xBVkUsIG10a2QtPmRkZXYuY2FwX21hc2spOwo+ID4gKyAgICAgICBtdGtkLT5k ZGV2LmRldmljZV9hbGxvY19jaGFuX3Jlc291cmNlcyA9IG10a19kbWFfYWxsb2NfY2hhbl9yZXNv dXJjZXM7Cj4gPiArICAgICAgIG10a2QtPmRkZXYuZGV2aWNlX2ZyZWVfY2hhbl9yZXNvdXJjZXMg PSBtdGtfZG1hX2ZyZWVfY2hhbl9yZXNvdXJjZXM7Cj4gPiArICAgICAgIG10a2QtPmRkZXYuZGV2 aWNlX3R4X3N0YXR1cyA9IG10a19kbWFfdHhfc3RhdHVzOwo+ID4gKyAgICAgICBtdGtkLT5kZGV2 LmRldmljZV9pc3N1ZV9wZW5kaW5nID0gbXRrX2RtYV9pc3N1ZV9wZW5kaW5nOwo+ID4gKyAgICAg ICBtdGtkLT5kZGV2LmRldmljZV9wcmVwX3NsYXZlX3NnID0gbXRrX2RtYV9wcmVwX3NsYXZlX3Nn Owo+ID4gKyAgICAgICBtdGtkLT5kZGV2LmRldmljZV9jb25maWcgPSBtdGtfZG1hX3NsYXZlX2Nv bmZpZzsKPiA+ICsgICAgICAgbXRrZC0+ZGRldi5kZXZpY2VfcGF1c2UgPSBtdGtfZG1hX2Rldmlj ZV9wYXVzZTsKPiA+ICsgICAgICAgbXRrZC0+ZGRldi5kZXZpY2VfcmVzdW1lID0gbXRrX2RtYV9k ZXZpY2VfcmVzdW1lOwo+ID4gKyAgICAgICBtdGtkLT5kZGV2LmRldmljZV90ZXJtaW5hdGVfYWxs ID0gbXRrX2RtYV90ZXJtaW5hdGVfYWxsOwo+ID4gKyAgICAgICBtdGtkLT5kZGV2LnNyY19hZGRy X3dpZHRocyA9IEJJVChETUFfU0xBVkVfQlVTV0lEVEhfMV9CWVRFKTsKPiA+ICsgICAgICAgbXRr ZC0+ZGRldi5kc3RfYWRkcl93aWR0aHMgPSBCSVQoRE1BX1NMQVZFX0JVU1dJRFRIXzFfQllURSk7 Cj4gPiArICAgICAgIG10a2QtPmRkZXYuZGlyZWN0aW9ucyA9IEJJVChETUFfREVWX1RPX01FTSkg fCBCSVQoRE1BX01FTV9UT19ERVYpOwo+ID4gKyAgICAgICBtdGtkLT5kZGV2LnJlc2lkdWVfZ3Jh bnVsYXJpdHkgPSBETUFfUkVTSURVRV9HUkFOVUxBUklUWV9TRUdNRU5UOwo+ID4gKyAgICAgICBt dGtkLT5kZGV2LmRldiA9ICZwZGV2LT5kZXY7Cj4gPiArICAgICAgIElOSVRfTElTVF9IRUFEKCZt dGtkLT5kZGV2LmNoYW5uZWxzKTsKPiA+ICsgICAgICAgSU5JVF9MSVNUX0hFQUQoJm10a2QtPnBl bmRpbmcpOwo+ID4gKwo+ID4gKyAgICAgICBzcGluX2xvY2tfaW5pdCgmbXRrZC0+bG9jayk7Cj4g PiArICAgICAgIHRhc2tsZXRfaW5pdCgmbXRrZC0+dGFzaywgbXRrX2RtYV9zY2hlZCwgKHVuc2ln bmVkIGxvbmcpbXRrZCk7Cj4gPiArCj4gPiArICAgICAgIG10a2QtPmRtYV9yZXF1ZXN0cyA9IE1U S19BUERNQV9ERUZBVUxUX1JFUVVFU1RTOwo+ID4gKyAgICAgICBpZiAob2ZfcHJvcGVydHlfcmVh ZF91MzIocGRldi0+ZGV2Lm9mX25vZGUsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiZG1hLXJlcXVlc3RzIiwgJm10a2QtPmRtYV9yZXF1ZXN0cykpIHsKPiA+ICsgICAgICAg ICAgICAgICBkZXZfaW5mbygmcGRldi0+ZGV2LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICJNaXNzaW5nIGRtYS1yZXF1ZXN0cyBwcm9wZXJ0eSwgdXNpbmcgJXUuXG4iLAo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgIE1US19BUERNQV9ERUZBVUxUX1JFUVVFU1RTKTsKPiA+ICsgICAg ICAgfQo+ID4gKwo+ID4gKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgTVRLX0FQRE1BX0NIQU5ORUxT OyBpKyspIHsKPiA+ICsgICAgICAgICAgICAgICBjID0gZGV2bV9remFsbG9jKG10a2QtPmRkZXYu ZGV2LCBzaXplb2YoKmMpLCBHRlBfS0VSTkVMKTsKPiA+ICsgICAgICAgICAgICAgICBpZiAoIWMp Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycl9ub19kbWE7Cj4gPiArCj4gPiAr ICAgICAgICAgICAgICAgYy0+dmMuZGVzY19mcmVlID0gbXRrX2RtYV9kZXNjX2ZyZWU7Cj4gPiAr ICAgICAgICAgICAgICAgdmNoYW5faW5pdCgmYy0+dmMsICZtdGtkLT5kZGV2KTsKPiA+ICsgICAg ICAgICAgICAgICBJTklUX0xJU1RfSEVBRCgmYy0+bm9kZSk7Cj4gPiArICAgICAgIH0KPiA+ICsK PiA+ICsgICAgICAgcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7Cj4gPiArICAgICAgIHBt X3J1bnRpbWVfc2V0X2FjdGl2ZSgmcGRldi0+ZGV2KTsKPiA+ICsKPiA+ICsgICAgICAgcmMgPSBk bWFfYXN5bmNfZGV2aWNlX3JlZ2lzdGVyKCZtdGtkLT5kZGV2KTsKPiA+ICsgICAgICAgaWYgKHJj KQo+ID4gKyAgICAgICAgICAgICAgIGdvdG8gcnBtX2Rpc2FibGU7Cj4gPiArCj4gPiArICAgICAg IHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG10a2QpOwo+ID4gKwo+ID4gKyAgICAgICBpZiAo cGRldi0+ZGV2Lm9mX25vZGUpIHsKPiA+ICsgICAgICAgICAgICAgICAvKiBEZXZpY2UtdHJlZSBE TUEgY29udHJvbGxlciByZWdpc3RyYXRpb24gKi8KPiA+ICsgICAgICAgICAgICAgICByYyA9IG9m X2RtYV9jb250cm9sbGVyX3JlZ2lzdGVyKHBkZXYtPmRldi5vZl9ub2RlLAo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZfZG1hX3hsYXRlX2J5X2No YW5faWQsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBtdGtkKTsKPiA+ICsgICAgICAgICAgICAgICBpZiAocmMpCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICBnb3RvIGRtYV9yZW1vdmU7Cj4gPiArICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAg cmV0dXJuIHJjOwo+ID4gKwo+ID4gK2RtYV9yZW1vdmU6Cj4gPiArICAgICAgIGRtYV9hc3luY19k ZXZpY2VfdW5yZWdpc3RlcigmbXRrZC0+ZGRldik7Cj4gPiArcnBtX2Rpc2FibGU6Cj4gPiArICAg ICAgIHBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKPiA+ICtlcnJfbm9fZG1hOgo+ID4g KyAgICAgICBtdGtfZG1hX2ZyZWUobXRrZCk7Cj4gPiArICAgICAgIHJldHVybiByYzsKPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIGludCBtdGtfYXBkbWFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpCj4gPiArewo+ID4gKyAgICAgICBzdHJ1Y3QgbXRrX2RtYWRldiAqbXRrZCA9 IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwo+ID4gKwo+ID4gKyAgICAgICBpZiAocGRldi0+ ZGV2Lm9mX25vZGUpCj4gPiArICAgICAgICAgICAgICAgb2ZfZG1hX2NvbnRyb2xsZXJfZnJlZShw ZGV2LT5kZXYub2Zfbm9kZSk7Cj4gPiArCj4gPiArICAgICAgIHBtX3J1bnRpbWVfZGlzYWJsZSgm cGRldi0+ZGV2KTsKPiA+ICsgICAgICAgcG1fcnVudGltZV9wdXRfbm9pZGxlKCZwZGV2LT5kZXYp Owo+ID4gKwo+ID4gKyAgICAgICBkbWFfYXN5bmNfZGV2aWNlX3VucmVnaXN0ZXIoJm10a2QtPmRk ZXYpOwo+ID4gKwo+ID4gKyAgICAgICBtdGtfZG1hX2ZyZWUobXRrZCk7Cj4gPiArCj4gPiArICAg ICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICsjaWZkZWYgQ09ORklHX1BNX1NMRUVQCj4g PiArc3RhdGljIGludCBtdGtfZG1hX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQo+ID4gK3sK PiA+ICsgICAgICAgc3RydWN0IG10a19kbWFkZXYgKm10a2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2 KTsKPiA+ICsKPiA+ICsgICAgICAgaWYgKCFwbV9ydW50aW1lX3N1c3BlbmRlZChkZXYpKQo+ID4g KyAgICAgICAgICAgICAgIGNsa19kaXNhYmxlX3VucHJlcGFyZShtdGtkLT5jbGspOwo+ID4gKwo+ ID4gKyAgICAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBtdGtfZG1h X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gPiArewo+ID4gKyAgICAgICBpbnQgcmV0Owo+ ID4gKyAgICAgICBzdHJ1Y3QgbXRrX2RtYWRldiAqbXRrZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYp Owo+ID4gKwo+ID4gKyAgICAgICBpZiAoIXBtX3J1bnRpbWVfc3VzcGVuZGVkKGRldikpIHsKPiA+ ICsgICAgICAgICAgICAgICByZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUobXRrZC0+Y2xrKTsKPiA+ ICsgICAgICAgICAgICAgICBpZiAocmV0KQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIHJldDsKPiA+ICsgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICByZXR1cm4gMDsKPiA+ICt9 Cj4gPiArI2VuZGlmIC8qIENPTkZJR19QTV9TTEVFUCAqLwo+ID4gKwo+ID4gKyNpZmRlZiBDT05G SUdfUE0KPiA+ICtzdGF0aWMgaW50IG10a19kbWFfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZp Y2UgKmRldikKPiA+ICt7Cj4gPiArICAgICAgIHN0cnVjdCBtdGtfZG1hZGV2ICptdGtkID0gZGV2 X2dldF9kcnZkYXRhKGRldik7Cj4gPiArCj4gPiArICAgICAgIGNsa19kaXNhYmxlX3VucHJlcGFy ZShtdGtkLT5jbGspOwo+ID4gKwo+ID4gKyAgICAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIGludCBtdGtfZG1hX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikK PiA+ICt7Cj4gPiArICAgICAgIGludCByZXQ7Cj4gPiArICAgICAgIHN0cnVjdCBtdGtfZG1hZGV2 ICptdGtkID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gPiArCj4gPiArICAgICAgIHJldCA9IGNs a19wcmVwYXJlX2VuYWJsZShtdGtkLT5jbGspOwo+ID4gKyAgICAgICBpZiAocmV0KQo+ID4gKyAg ICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gPiArCj4gPiArICAgICAgIHJldHVybiAwOwo+ID4g K30KPiA+ICsjZW5kaWYgLyogQ09ORklHX1BNICovCj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBkZXZfcG1fb3BzIG10a19kbWFfcG1fb3BzID0gewo+ID4gKyAgICAgICBTRVRfU1lTVEVN X1NMRUVQX1BNX09QUyhtdGtfZG1hX3N1c3BlbmQsIG10a19kbWFfcmVzdW1lKQo+ID4gKyAgICAg ICBTRVRfUlVOVElNRV9QTV9PUFMobXRrX2RtYV9ydW50aW1lX3N1c3BlbmQsCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICBtdGtfZG1hX3J1bnRpbWVfcmVzdW1lLCBOVUxMKQo+ID4gK307 Cj4gPiArCj4gPiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2RtYV9kcml2ZXIg PSB7Cj4gCj4gbXRrX2RtYSBpcyBtdWNoIGdlbmVyYWwgYW5kIGFsbCBmdW5jdGlvbnMgYW5kIHN0 cnVjdHVyZXMgaW4gdGhlIGRyaXZlcgo+IHNob3VsZCBiZSBhbGwgY29uc2lzdGVudC4gIEknZCBw cmVmZXIgdG8gaGF2ZSBhbGwgbmFtaW5nIHN0YXJ0cyB3aXRoCj4gbXRrX3VhcnRfYXBkbWEuCj4g Cgp0aGUgZnVuY3Rpb24gbmFtZSBhbmQgcGFyYW1ldGVycycgbmFtZSwgaSB3aWxsIG1vZGlmeSBp dC4gYnV0IGJlZm9yZSB0aGUKODI1MF9tdGsuYyBhbmQgdGhlIERvYy4gYXJlIHJlY29yZGVkLiBp ZiBtb2RpZnkgZmlsZSBuYW1lIGFuZCBLY29uZmlnLAp3aWxsIGJyaW5nIGFib3V0IHRoZSBkaXNv cmRlci4gaSBzdWdnZXN0IHRoYXQgYWZ0ZXIgdGhlIHBhdGNoIGlzCnJlY29yZGVkLCBtb2RpZnkg dGhpcy4gdGhhbmtzLgoKPiA+ICsgICAgICAgLnByb2JlICA9IG10a19hcGRtYV9wcm9iZSwKPiAK PiBzdWNoICBhcwo+IG10a191YXJ0X2FwZG1hX3Byb2JlCj4gCj4gPiArICAgICAgIC5yZW1vdmUg PSBtdGtfYXBkbWFfcmVtb3ZlLAo+IAo+IG10a191YXJ0X2FwZG1hX3JlbW92ZQo+IAo+ID4gKyAg ICAgICAuZHJpdmVyID0gewo+ID4gKyAgICAgICAgICAgICAgIC5uYW1lICAgICAgICAgICA9IEtC VUlMRF9NT0ROQU1FLAo+ID4gKyAgICAgICAgICAgICAgIC5wbSAgICAgICAgICAgICA9ICZtdGtf ZG1hX3BtX29wcywKPiAKPiBtdGtfdWFydF9hcGRtYV9wbV9vcHMKPiAKPiA+ICsgICAgICAgICAg ICAgICAub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIobXRrX3VhcnRfZG1hX21hdGNoKSwK PiAKPiBtdGtfdWFydF9hcGRtYV9tYXRjaAo+IAo+ID4gKyAgICAgICB9LAo+ID4gK307Cj4gPiAr Cj4gPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihtdGtfZG1hX2RyaXZlcik7Cj4gCj4gbXRrX3Vh cnRfYXBkbWFfZHJpdmVyCj4gCj4gPiArCj4gPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJNZWRpYVRl ayBVQVJUIEFQRE1BIENvbnRyb2xsZXIgRHJpdmVyIik7Cj4gPiArTU9EVUxFX0FVVEhPUigiTG9u ZyBDaGVuZyA8bG9uZy5jaGVuZ0BtZWRpYXRlay5jb20+Iik7Cj4gPiArTU9EVUxFX0xJQ0VOU0Uo IkdQTCB2MiIpOwo+ID4gKwo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL21lZGlhdGVrL0tj b25maWcgYi9kcml2ZXJzL2RtYS9tZWRpYXRlay9LY29uZmlnCj4gPiBpbmRleCAyN2JhYzBiLi5k Mzk5NjI0IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9kbWEvbWVkaWF0ZWsvS2NvbmZpZwo+ID4g KysrIGIvZHJpdmVycy9kbWEvbWVkaWF0ZWsvS2NvbmZpZwo+ID4gQEAgLTEsNCArMSwxNSBAQAo+ ID4KPiA+ICtjb25maWcgRE1BX01US19VQVJUCj4gCj4gTVRLX1VBUlRfQVBETUEgdG8gYWxpZ24g dGhlIG90aGVyIGRyaXZlcnMKPiAKPiA+ICsgICAgICAgdHJpc3RhdGUgIk1lZGlhVGVrIFNvQ3Mg QVBETUEgc3VwcG9ydCBmb3IgVUFSVCIKPiA+ICsgICAgICAgZGVwZW5kcyBvbiBPRiAmJiBTRVJJ QUxfODI1MF9NVDY1NzcKPiA+ICsgICAgICAgc2VsZWN0IERNQV9FTkdJTkUKPiA+ICsgICAgICAg c2VsZWN0IERNQV9WSVJUVUFMX0NIQU5ORUxTCj4gPiArICAgICAgIGhlbHAKPiA+ICsgICAgICAg ICBTdXBwb3J0IGZvciB0aGUgVUFSVCBETUEgZW5naW5lIGZvdW5kIG9uIE1lZGlhVGVrIE1USyBT b0NzLgo+ID4gKyAgICAgICAgIHdoZW4gODI1MCBtdGsgdWFydCBpcyBlbmFibGVkLCBhbmQgaWYg eW91IHdhbnQgdG8gdXNpbmcgRE1BLAo+IAo+IDgyNTAgbXRrIHVhcnQgc2hvdWxkIGJlIGNoYW5n ZWQgdG8gU0VSSUFMXzgyNTBfTVQ2NTc3IHRvIGJlIG1vcmUgaW50dWl0aXZlCj4gCj4gPiArICAg ICAgICAgeW91IGNhbiBlbmFibGUgdGhlIGNvbmZpZy4gdGhlIERNQSBlbmdpbmUganVzdCBvbmx5 IGJlIHVzZWQKPiA+ICsgICAgICAgICB3aXRoIE1lZGlhVGVrIFNvY3MuCj4gCj4gU29Dcwo+IAo+ ID4gKwo+ID4gIGNvbmZpZyBNVEtfSFNETUEKPiA+ICAgICAgICAgdHJpc3RhdGUgIk1lZGlhVGVr IEhpZ2gtU3BlZWQgRE1BIGNvbnRyb2xsZXIgc3VwcG9ydCIKPiA+ICAgICAgICAgZGVwZW5kcyBv biBBUkNIX01FRElBVEVLIHx8IENPTVBJTEVfVEVTVAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv ZG1hL21lZGlhdGVrL01ha2VmaWxlIGIvZHJpdmVycy9kbWEvbWVkaWF0ZWsvTWFrZWZpbGUKPiA+ IGluZGV4IDZlNzc4ZjguLjJmMmVmZDkgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2RtYS9tZWRp YXRlay9NYWtlZmlsZQo+ID4gKysrIGIvZHJpdmVycy9kbWEvbWVkaWF0ZWsvTWFrZWZpbGUKPiA+ IEBAIC0xICsxLDIgQEAKPiA+ICtvYmotJChDT05GSUdfRE1BX01US19VQVJUKSArPSA4MjUwX210 a19kbWEubwo+IAo+IG9iai0kKENPTkZJR19NVEtfVUFSVF9BUERNQSkgKz0gbXRrLXVhcnQtYXBk bWEubwo+IHRvIGFsaWduIHRoZSBvdGhlciBkaXJ2ZXJzCj4gCj4gPiAgb2JqLSQoQ09ORklHX01U S19IU0RNQSkgKz0gbXRrLWhzZG1hLm8KPiA+IC0tCj4gPiAxLjcuOS41Cj4gPgo=