From mboxrd@z Thu Jan 1 00:00:00 1970 From: Liviu Dudau Subject: Re: [RFC][PATCH 2/2] drm/arm: Add support for Mali Display Processors Date: Tue, 12 Apr 2016 18:13:49 +0100 Message-ID: <20160412171349.GK16063@e106497-lin.cambridge.arm.com> References: <1459527712-9488-1-git-send-email-Liviu.Dudau@arm.com> <1459527712-9488-3-git-send-email-Liviu.Dudau@arm.com> <20160412154757.GG2510@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20160412154757.GG2510@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Dave Airlie , Daniel Stone , David Brown , Brian Starkey , devicetree@vger.kernel.org, LKML , DRI devel List-Id: devicetree@vger.kernel.org T24gVHVlLCBBcHIgMTIsIDIwMTYgYXQgMDU6NDc6NTdQTSArMDIwMCwgRGFuaWVsIFZldHRlciB3 cm90ZToKPiBPbiBGcmksIEFwciAwMSwgMjAxNiBhdCAwNToyMTo1MlBNICswMTAwLCBMaXZpdSBE dWRhdSB3cm90ZToKPiA+IEFkZCBzdXBwb3J0IGZvciB0aGUgbmV3IGZhbWlseSBvZiBEaXNwbGF5 IFByb2Nlc3NvcnMgZnJvbSBBUk0gTHRkLgo+ID4gVGhpcyBjb21taXQgYWRkcyBiYXNpYyBzdXBw b3J0IGZvciBNYWxpIERQNTAwLCBEUDU1MCBhbmQgRFA2NTAKPiA+IHBhcnRzLCB3aXRoIG9ubHkg dGhlIGRpc3BsYXkgZW5naW5lIGJlaW5nIHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50Lgo+ID4gCj4g PiBDYzogRGF2aWQgQnJvd24gPERhdmlkLkJyb3duQGFybS5jb20+Cj4gPiBDYzogQnJpYW4gU3Rh cmtleSA8QnJpYW4uU3RhcmtleUBhcm0uY29tPgo+ID4gCj4gPiBTaWduZWQtb2ZmLWJ5OiBMaXZp dSBEdWRhdSA8TGl2aXUuRHVkYXVAYXJtLmNvbT4KPiAKPiBRdWlja2x5IHNjcm9sbGVkIHRocm91 Z2ggaXQgd2l0aCBhbiBleWUgdG93YXJkcyBhdG9taWMuIExvb2tzIHJlYWwgcHJldHR5LAo+IEkg dGhpbmsgd2UncmUgZ2V0dGluZyBjbG9zZXIgdG8gdGhlIGlkZWFsIHdvcmxkIHdoZXJlIGEgbmV3 IGF0b21pYyBkcml2ZXIKPiBpcyBqdXN0IGh3IHNwZWNpZmljIGNvZGUgcGx1cyBtaW5pbWFsIGFt b3VudHMgb2YgZ2x1ZS4KPiAKPiBCdW5jaCBvZiBjb21tZW50cyBpbmxpbmUgYmVsb3cuCgpUaGFu a3MgZm9yIHJldmlld2luZyB0aGlzIQoKPiAtRGFuaWVsCj4gCj4gPiAtLS0KPiA+ICBkcml2ZXJz L2dwdS9kcm0vYXJtL0tjb25maWcgICAgICAgICB8ICAxNSArCj4gPiAgZHJpdmVycy9ncHUvZHJt L2FybS9NYWtlZmlsZSAgICAgICAgfCAgIDIgKwo+ID4gIGRyaXZlcnMvZ3B1L2RybS9hcm0vbWFs aWRwX2NydGMuYyAgIHwgMjc2ICsrKysrKysrKysrKysKPiA+ICBkcml2ZXJzL2dwdS9kcm0vYXJt L21hbGlkcF9kcnYuYyAgICB8IDQ4NiArKysrKysrKysrKysrKysrKysrKysrCj4gPiAgZHJpdmVy cy9ncHUvZHJtL2FybS9tYWxpZHBfZHJ2LmggICAgfCAgNDkgKysrCj4gPiAgZHJpdmVycy9ncHUv ZHJtL2FybS9tYWxpZHBfaHcuYyAgICAgfCA3NzcgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCj4gPiAgZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfaHcuaCAgICAgfCAxOTIg KysrKysrKysrCj4gPiAgZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfcGxhbmVzLmMgfCAzNDIg KysrKysrKysrKysrKysrKwo+ID4gIGRyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX3JlZ3MuaCAg IHwgMTcyICsrKysrKysrCj4gPiAgOSBmaWxlcyBjaGFuZ2VkLCAyMzExIGluc2VydGlvbnMoKykK PiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfY3J0Yy5j Cj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2Rydi5j Cj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2Rydi5o Cj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2h3LmMK PiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfaHcuaAo+ ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9wbGFuZXMu Ywo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9yZWdz LmgKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hcm0vS2NvbmZpZyBiL2Ry aXZlcnMvZ3B1L2RybS9hcm0vS2NvbmZpZwo+ID4gaW5kZXggZWFlZDQ1NC4uZTViNWI2YiAxMDA2 NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hcm0vS2NvbmZpZwo+ID4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2FybS9LY29uZmlnCj4gPiBAQCAtMjUsMyArMjUsMTggQEAgY29uZmlnIERSTV9I RExDRF9TSE9XX1VOREVSUlVOCj4gPiAgCSAgRW5hYmxlIHRoaXMgb3B0aW9uIHRvIHNob3cgaW4g cmVkIGNvbG91ciB0aGUgcGl4ZWxzIHRoYXQgdGhlCj4gPiAgCSAgSERMQ0QgZGV2aWNlIGRpZCBu b3QgZmV0Y2ggZnJvbSBmcmFtZWJ1ZmZlciBkdWUgdG8gdW5kZXJydW4KPiA+ICAJICBjb25kaXRp b25zLgo+ID4gKwo+ID4gK2NvbmZpZyBEUk1fTUFMSV9ESVNQTEFZCj4gPiArCXRyaXN0YXRlICJB Uk0gTWFsaSBEaXNwbGF5IFByb2Nlc3NvciIKPiA+ICsJZGVwZW5kcyBvbiBEUk0gJiYgT0YgJiYg KEFSTSB8fCBBUk02NCkKPiA+ICsJZGVwZW5kcyBvbiBDT01NT05fQ0xLCj4gPiArCXNlbGVjdCBE Uk1fQVJNCj4gPiArCXNlbGVjdCBEUk1fS01TX0hFTFBFUgo+ID4gKwlzZWxlY3QgRFJNX0tNU19D TUFfSEVMUEVSCj4gPiArCXNlbGVjdCBEUk1fR0VNX0NNQV9IRUxQRVIKPiA+ICsJc2VsZWN0IFZJ REVPTU9ERV9IRUxQRVJTCj4gPiArCWhlbHAKPiA+ICsJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYg eW91IHdhbnQgdG8gY29tcGlsZSB0aGUgQVJNIE1hbGkgRGlzcGxheQo+ID4gKwkgIFByb2Nlc3Nv ciBkcml2ZXIuIEl0IHN1cHBvcnRzIGFsbCB0aGUgdmFyaWFudHMgb2YgdGhlIGhhcmR3YXJlLgo+ ID4gKwo+ID4gKwkgIElmIGNvbXBpbGVkIGFzIGEgbW9kdWxlIGl0IHdpbGwgYmUgY2FsbGVkIG1h bGlkcC4KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXJtL01ha2VmaWxlIGIvZHJp dmVycy9ncHUvZHJtL2FybS9NYWtlZmlsZQo+ID4gaW5kZXggODlkY2I3Yi4uM2U3NmU2YyAxMDA2 NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hcm0vTWFrZWZpbGUKPiA+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9hcm0vTWFrZWZpbGUKPiA+IEBAIC0xLDIgKzEsNCBAQAo+ID4gIGhkbGNkLXkg Oj0gaGRsY2RfZHJ2Lm8gaGRsY2RfY3J0Yy5vCj4gPiAgb2JqLSQoQ09ORklHX0RSTV9IRExDRCkJ Kz0gaGRsY2Qubwo+ID4gK21hbGlkcC15IDo9IG1hbGlkcF9kcnYubyBtYWxpZHBfaHcubyBtYWxp ZHBfcGxhbmVzLm8gbWFsaWRwX2NydGMubwo+ID4gK29iai0kKENPTkZJR19EUk1fTUFMSV9ESVNQ TEFZKQkrPSBtYWxpZHAubwo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFs aWRwX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2NydGMuYwo+ID4gbmV3IGZp bGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAuLmFhNDlmZDQKPiA+IC0tLSAvZGV2L251 bGwKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2NydGMuYwo+ID4gQEAgLTAs MCArMSwyNzYgQEAKPiA+ICsvKgo+ID4gKyAqIChDKSBDT1BZUklHSFQgMjAxNiBBUk0gTGltaXRl ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiA+ICsgKiBBdXRob3I6IExpdml1IER1ZGF1IDxMaXZp dS5EdWRhdUBhcm0uY29tPgo+ID4gKyAqCj4gPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmUgYW5kIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlCj4gPiAr ICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZQo+ID4gKyAqIEZvdW5kYXRpb24sIGFuZCBhbnkgdXNlIGJ5IHlvdSBv ZiB0aGlzIHByb2dyYW0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMKPiA+ICsgKiBvZiBzdWNoIEdO VSBsaWNlbmNlLgo+ID4gKyAqCj4gPiArICogQVJNIE1hbGkgRFA1MDAvRFA1NTAvRFA2NTAgZHJp dmVyIChjcnRjIG9wZXJhdGlvbnMpCj4gPiArICovCj4gPiArCj4gPiArI2luY2x1ZGUgPGRybS9k cm1QLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+Cj4gPiArI2luY2x1ZGUgPGRy bS9kcm1fYXRvbWljX2hlbHBlci5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KPiA+ ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9j bGsuaD4KPiA+ICsjaW5jbHVkZSA8dmlkZW8vdmlkZW9tb2RlLmg+Cj4gPiArCj4gPiArI2luY2x1 ZGUgIm1hbGlkcF9kcnYuaCIKPiA+ICsjaW5jbHVkZSAibWFsaWRwX2h3LmgiCj4gPiArCj4gPiAr c3RhdGljIGJvb2wgbWFsaWRwX2NydGNfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2NydGMgKmNydGMs Cj4gPiArCQkJCSAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAo+ID4gKwkJ CQkgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKPiA+ICt7Cj4gPiAr CXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBjcnRjX3RvX21hbGlkcF9kZXZpY2UoY3J0Yyk7 Cj4gPiArCXN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldiA9IG1hbGlkcC0+ZGV2Owo+ID4g Kwo+ID4gKwkvKgo+ID4gKwkgKiBjaGVjayB0aGF0IHRoZSBoYXJkd2FyZSBjYW4gZHJpdmUgdGhl IHJlcXVpcmVkIGNsb2NrIHJhdGUsCj4gPiArCSAqIGJ1dCBza2lwIHRoZSBjaGVjayBpZiB0aGUg Y2xvY2sgaXMgbWVhbnQgdG8gYmUgZGlzYWJsZWQgKHJlcV9yYXRlID0gMCkKPiA+ICsJICovCj4g PiArCWxvbmcgcmF0ZSwgcmVxX3JhdGUgPSBtb2RlLT5jcnRjX2Nsb2NrICogMTAwMDsKPiA+ICsK PiA+ICsJaWYgKHJlcV9yYXRlKSB7Cj4gPiArCQlyYXRlID0gY2xrX3JvdW5kX3JhdGUoaHdkZXYt Pm1jbGssIHJlcV9yYXRlKTsKPiA+ICsJCWlmIChyYXRlIDwgcmVxX3JhdGUpIHsKPiA+ICsJCQlE Uk1fREVCVUdfRFJJVkVSKCJtY2xrIGNsb2NrIHVuYWJsZSB0byByZWFjaCAlZCBrSHpcbiIsCj4g PiArCQkJCQkgbW9kZS0+Y3J0Y19jbG9jayk7Cj4gPiArCQkJcmV0dXJuIGZhbHNlOwo+ID4gKwkJ fQo+ID4gKwo+ID4gKwkJcmF0ZSA9IGNsa19yb3VuZF9yYXRlKGh3ZGV2LT5weGxjbGssIHJlcV9y YXRlKTsKPiA+ICsJCWlmIChyYXRlICE9IHJlcV9yYXRlKSB7Cj4gPiArCQkJRFJNX0RFQlVHX0RS SVZFUigicHhsY2xrIGRvZXNuJ3Qgc3VwcG9ydCAlbGQgSHpcbiIsCj4gPiArCQkJCQkgcmVxX3Jh dGUpOwo+ID4gKwkJCXJldHVybiBmYWxzZTsKPiA+ICsJCX0KPiA+ICsKPiA+ICsJCWFkanVzdGVk X21vZGUtPmNydGNfY2xvY2sgPSByYXRlIC8gMTAwMDsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1 cm4gdHJ1ZTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgbWFsaWRwX2NydGNfbW9kZV9z ZXRfbm9mYihzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gPiArewo+ID4gKwlzdHJ1Y3QgbWFsaWRw X2RybSAqbWFsaWRwID0gY3J0Y190b19tYWxpZHBfZGV2aWNlKGNydGMpOwo+ID4gKwlzdHJ1Y3Qg bWFsaWRwX2h3X2RldmljZSAqaHdkZXYgPSBtYWxpZHAtPmRldjsKPiA+ICsJc3RydWN0IHZpZGVv bW9kZSB2bTsKPiA+ICsKPiA+ICsJZHJtX2Rpc3BsYXlfbW9kZV90b192aWRlb21vZGUoJmNydGMt PnN0YXRlLT5hZGp1c3RlZF9tb2RlLCAmdm0pOwo+ID4gKwo+ID4gKwkvKiBtY2xrIG5lZWRzIHRv IGJlIHNldCB0byB0aGUgc2FtZSBvciBoaWdoZXIgcmF0ZSB0aGFuIHB4bGNsayAqLwo+ID4gKwlj bGtfc2V0X3JhdGUoaHdkZXYtPm1jbGssIGNydGMtPnN0YXRlLT5hZGp1c3RlZF9tb2RlLmNydGNf Y2xvY2sgKiAxMDAwKTsKPiA+ICsJY2xrX3NldF9yYXRlKGh3ZGV2LT5weGxjbGssIGNydGMtPnN0 YXRlLT5hZGp1c3RlZF9tb2RlLmNydGNfY2xvY2sgKiAxMDAwKTsKPiA+ICsKPiA+ICsJaHdkZXYt Pm1vZGVzZXQoaHdkZXYsICZ2bSk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIG1hbGlk cF9jcnRjX2VuYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gPiArewo+ID4gKwlzdHJ1Y3Qg bWFsaWRwX2RybSAqbWFsaWRwID0gY3J0Y190b19tYWxpZHBfZGV2aWNlKGNydGMpOwo+ID4gKwlz dHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYgPSBtYWxpZHAtPmRldjsKPiA+ICsKPiA+ICsJ Y2xrX3ByZXBhcmVfZW5hYmxlKGh3ZGV2LT5weGxjbGspOwo+ID4gKwlod2Rldi0+bGVhdmVfY29u ZmlnX21vZGUoaHdkZXYpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBtYWxpZHBfY3J0 Y19kaXNhYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiA+ICt7Cj4gPiArCXN0cnVjdCBtYWxp ZHBfZHJtICptYWxpZHAgPSBjcnRjX3RvX21hbGlkcF9kZXZpY2UoY3J0Yyk7Cj4gPiArCXN0cnVj dCBtYWxpZHBfaHdfZGV2aWNlICpod2RldiA9IG1hbGlkcC0+ZGV2Owo+ID4gKwo+ID4gKwlpZiAo Y3J0Yy0+ZW5hYmxlZCkgewo+IAo+IFRoaXMgaW5kaWNhdGVzIGEgc3RhdGUgdHJhY2tpbmcgYnVn IHNvbWV3aGVyZSBpbiB5b3VyIGRyaXZlciAtIGF0b21pYwo+IGd1YXJhbnRlZXMgdG8gb25seSBj YWxsIHlvdXIgZGlzYWJsZSBob29rIGlmIHRoZSBodyBpcyBvbi4gQXNzdW1pbmcgeW91Cj4gY29y cmVjdGx5IGJvb3RzdHJhcCBhdG9taWMgc3RhdGUgb24gZHJpdmVyIGxvYWQgYW5kIG9uIHJlc3Vt ZS4KCkFsc28gaW5kaWNhdGVzIHRoYXQgSSdtIHN0aWxsIG5vdCB2ZXJ5IHN1cmUgb2YgbXkgZ3Jh c3Agb24gdGhlIHdob2xlIGF0b21pYwpzdGF0ZSB0cmFja2luZyBhbmQgSSBhZGQgY2hlY2tzIGp1 c3QgdG8gYmUgc2FmZS4KCj4gCj4gQWxzbyBjcnRjLT5lbmFibGVkIGlzIGxlZ2FjeSBzdGF0ZSwg cGxlYXNlIHVzZSBjcnRjLT5zdGF0ZS0+KiBpbiBhdG9taWMKPiBkcml2ZXJzIGV4Y2x1c2l2ZWx5 Lgo+IAo+IFBsZWFzZSByZW1vdmUgdGhpcyBjaGVjay4KCldpbGwgZG8uCgo+IAo+ID4gKwkJaHdk ZXYtPmVudGVyX2NvbmZpZ19tb2RlKGh3ZGV2KTsKPiA+ICsJCWNsa19kaXNhYmxlX3VucHJlcGFy ZShod2Rldi0+cHhsY2xrKTsKPiA+ICsJfQo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IG1h bGlkcF9jcnRjX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gPiArCQkJCSAg ICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlKQo+ID4gK3sKPiA+ICsJc3RydWN0IG1hbGlk cF9kcm0gKm1hbGlkcCA9IGNydGNfdG9fbWFsaWRwX2RldmljZShjcnRjKTsKPiA+ICsJc3RydWN0 IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2ID0gbWFsaWRwLT5kZXY7Cj4gPiArCXN0cnVjdCBkcm1f cGxhbmUgKnBsYW5lOwo+ID4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwc3RhdGU7Cj4gPiAr CXUzMiByb3RfbWVtX2ZyZWUsIHJvdF9tZW1fdXNhYmxlOwo+ID4gKwlpbnQgcm90YXRlZF9wbGFu ZXMgPSAwOwo+ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiBjaGVjayBpZiB0aGVyZSBpcyBlbm91Z2gg cm90YXRpb24gbWVtb3J5IGF2YWlsYWJsZSBmb3IgcGxhbmVzCj4gPiArCSAqIHRoYXQgbmVlZCA5 MMKwIGFuZCAyNzDCsCByb3RhdGlvbi4gRWFjaCBwbGFuZSBoYXMgc2V0IGl0cyByZXF1aXJlZAo+ ID4gKwkgKiBtZW1vcnkgc2l6ZSBpbiB0aGUgLT5wbGFuZV9jaGVjaygpIGNhbGxiYWNrLCBoZXJl IHdlIG9ubHkgbWFrZQo+ID4gKwkgKiBzdXJlIHRoYXQgdGhlIHN1bXMgYXJlIGxlc3MgdGhhdCB0 aGUgdG90YWwgdXNhYmxlIG1lbW9yeS4KPiA+ICsJICoKPiA+ICsJICogVGhlIHJvdGF0aW9uIG1l bW9yeSBhbGxvY2F0aW9uIGFsZ29yaXRobSAoZm9yIGVhY2ggcGxhbmUpOgo+ID4gKwkgKiAgYS4g SWYgbm8gbW9yZSByb3RhdGVkIHBsYW5lcyBleGlzdCwgYWxsIHJlbWFpbmluZyByb3RhdGUKPiA+ ICsJICogICAgIG1lbW9yeSBpbiB0aGUgYmFuayBpcyBhdmFpbGFibGUgZm9yIHVzZSBieSB0aGUg cGxhbmUuCj4gPiArCSAqICBiLiBJZiBvdGhlciByb3RhdGVkIHBsYW5lcyBleGlzdCwgYW5kIHBs YW5lJ3MgbGF5ZXIgSUQgaXMKPiA+ICsJICogICAgIERFX1ZJREVPMSwgaXQgY2FuIHVzZSBhbGwg dGhlIG1lbW9yeSBmcm9tIGZpcnN0IGJhbmsgaWYKPiA+ICsJICogICAgIHNlY29uZGFyeSByb3Rh dGlvbiBtZW1vcnkgYmFuayBpcyBhdmFpbGFibGUsIG90aGVyd2lzZSBpdCBjYW4KPiA+ICsJICog ICAgIHVzZSB1cCB0byBoYWxmIHRoZSBiYW5rJ3MgbWVtb3J5Lgo+ID4gKwkgKiAgYy4gSWYgb3Ro ZXIgcm90YXRlZCBwbGFuZXMgZXhpc3QsIGFuZCBwbGFuZSdzIGxheWVyIElEIGlzIG5vdAo+ID4g KwkgKiAgICAgREVfVklERU8xLCBpdCBjYW4gdXNlIGhhbGYgb2YgdGhlIGF2YWlsYWJsZSBtZW1v cnkKPiA+ICsJICoKPiA+ICsJICogTm90ZTogdGhpcyBhbGdvcml0aG0gYXNzdW1lcyB0aGF0IHRo ZSBvcmRlciBpbiB3aGljaCB0aGUgcGxhbmVzIGFyZQo+ID4gKwkgKiBjaGVja2VkIGFsd2F5cyBo YXMgREVfVklERU8xIHBsYW5lIGZpcnN0IGluIHRoZSBsaXN0IGlmIGl0IGlzCj4gPiArCSAqIHJv dGF0ZWQuIEJlY2F1c2UgdGhhdCBpcyBob3cgd2UgY3JlYXRlIHRoZSBwbGFuZXMgaW4gdGhlIGZp cnN0Cj4gPiArCSAqIHBsYWNlLCB1bmRlciBjdXJyZW50IERSTSB2ZXJzaW9uIHRoaW5ncyB3b3Jr LCBidXQgaWYgZXZlciB0aGUgb3JkZXIKPiA+ICsJICogaW4gd2hpY2ggZHJtX2F0b21pY19jcnRj X3N0YXRlX2Zvcl9lYWNoX3BsYW5lKCkgaXRlcmF0ZXMgb3ZlciBwbGFuZXMKPiA+ICsJICogY2hh bmdlcywgd2UgbmVlZCB0byBwcmUtc29ydCB0aGUgcGxhbmVzIGJlZm9yZSB2YWxpZGF0aW9uLgo+ ID4gKwkgKi8KPiA+ICsKPiA+ICsJLyogZmlyc3QgY291bnQgdGhlIG51bWJlciBvZiByb3RhdGVk IHBsYW5lcyAqLwo+ID4gKwlkcm1fYXRvbWljX2NydGNfc3RhdGVfZm9yX2VhY2hfcGxhbmUocGxh bmUsIHN0YXRlKSB7Cj4gPiArCQlwc3RhdGUgPSBkcm1fYXRvbWljX2dldF9wbGFuZV9zdGF0ZShz dGF0ZS0+c3RhdGUsIHBsYW5lKTsKPiA+ICsJCWlmIChwc3RhdGUtPnJvdGF0aW9uICYgTUFMSURQ X1JPVEFURURfTUFTSykKPiA+ICsJCQlyb3RhdGVkX3BsYW5lcysrOwo+ID4gKwl9Cj4gPiArCj4g PiArCXJvdF9tZW1fZnJlZSA9IGh3ZGV2LT5yb3RhdGlvbl9tZW1vcnlbMF07Cj4gPiArCS8qCj4g PiArCSAqIGlmIHdlIGhhdmUgbW9yZSB0aGFuIDEgcGxhbmUgdXNpbmcgcm90YXRpb24gbWVtb3J5 LCB1c2UgdGhlIHNlY29uZAo+ID4gKwkgKiBibG9jayBvZiByb3RhdGlvbiBtZW1vcnkgYXMgd2Vs bAo+ID4gKwkgKi8KPiA+ICsJaWYgKHJvdGF0ZWRfcGxhbmVzID4gMSkKPiA+ICsJCXJvdF9tZW1f ZnJlZSArPSBod2Rldi0+cm90YXRpb25fbWVtb3J5WzFdOwo+ID4gKwo+ID4gKwkvKiBub3cgdmFs aWRhdGUgdGhlIHJvdGF0aW9uIG1lbW9yeSByZXF1aXJlbWVudHMgKi8KPiA+ICsJZHJtX2F0b21p Y19jcnRjX3N0YXRlX2Zvcl9lYWNoX3BsYW5lKHBsYW5lLCBzdGF0ZSkgewo+ID4gKwkJc3RydWN0 IG1hbGlkcF9wbGFuZSAqbXAgPSB0b19tYWxpZHBfcGxhbmUocGxhbmUpOwo+ID4gKwo+ID4gKwkJ cHN0YXRlID0gZHJtX2F0b21pY19nZXRfcGxhbmVfc3RhdGUoc3RhdGUtPnN0YXRlLCBwbGFuZSk7 Cj4gPiArCQlpZiAocHN0YXRlLT5yb3RhdGlvbiAmIE1BTElEUF9ST1RBVEVEX01BU0spIHsKPiA+ ICsJCQkvKiBwcm9jZXNzIGN1cnJlbnQgcGxhbmUgKi8KPiA+ICsJCQlyb3RhdGVkX3BsYW5lcy0t Owo+ID4gKwo+ID4gKwkJCWlmICghcm90YXRlZF9wbGFuZXMpIHsKPiA+ICsJCQkJLyogbm8gbW9y ZSByb3RhdGVkIHBsYW5lcywgd2UgY2FuIHVzZSB3aGF0J3MgbGVmdCAqLwo+ID4gKwkJCQlyb3Rf bWVtX3VzYWJsZSA9IHJvdF9tZW1fZnJlZTsKPiA+ICsJCQl9IGVsc2Ugewo+ID4gKwkJCQlpZiAo KG1wLT5sYXllci0+aWQgIT0gREVfVklERU8xKSB8fAo+ID4gKwkJCQkgICAgKGh3ZGV2LT5yb3Rh dGlvbl9tZW1vcnlbMV0gPT0gMCkpCj4gPiArCQkJCQlyb3RfbWVtX3VzYWJsZSA9IHJvdF9tZW1f ZnJlZSAvIDI7Cj4gPiArCQkJCWVsc2UKPiA+ICsJCQkJCXJvdF9tZW1fdXNhYmxlID0gaHdkZXYt PnJvdGF0aW9uX21lbW9yeVswXTsKPiA+ICsJCQl9Cj4gPiArCj4gPiArCQkJcm90X21lbV9mcmVl IC09IHJvdF9tZW1fdXNhYmxlOwo+ID4gKwo+ID4gKwkJCWlmIChtcC0+cm90bWVtX3NpemUgPiBy b3RfbWVtX3VzYWJsZSkKPiA+ICsJCQkJcmV0dXJuIC1FSU5WQUw7Cj4gPiArCQl9Cj4gPiArCX0K PiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIG1hbGlk cF9jcnRjX2F0b21pY19iZWdpbihzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gPiArCQkJCSAgICAg c3RydWN0IGRybV9jcnRjX3N0YXRlICpvbGRfc3RhdGUpCj4gPiArewo+ID4gKwlzdHJ1Y3QgbWFs aWRwX2RybSAqbWFsaWRwID0gY3J0Y190b19tYWxpZHBfZGV2aWNlKGNydGMpOwo+ID4gKwo+ID4g KwlpZiAoY3J0Yy0+c3RhdGUtPmV2ZW50KSB7Cj4gPiArCQlzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJs YW5rX2V2ZW50ICpldmVudCA9IGNydGMtPnN0YXRlLT5ldmVudDsKPiA+ICsJCXVuc2lnbmVkIGxv bmcgZmxhZ3M7Cj4gPiArCj4gPiArCQljcnRjLT5zdGF0ZS0+ZXZlbnQgPSBOVUxMOwo+ID4gKwkJ ZXZlbnQtPnBpcGUgPSBkcm1fY3J0Y19pbmRleChjcnRjKTsKPiA+ICsKPiA+ICsJCVdBUk5fT04o ZHJtX2NydGNfdmJsYW5rX2dldChjcnRjKSAhPSAwKTsKPiA+ICsKPiA+ICsJCXNwaW5fbG9ja19p cnFzYXZlKCZjcnRjLT5kZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKPiA+ICsJCWxpc3RfYWRkX3Rh aWwoJmV2ZW50LT5iYXNlLmxpbmssICZtYWxpZHAtPmV2ZW50X2xpc3QpOwo+ID4gKwkJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7Cj4gPiArCX0K PiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgbWFsaWRwX2NydGNfYXRvbWljX2ZsdXNoKHN0 cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+ICsJCQkJICAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUg Km9sZF9zdGF0ZSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBjcnRj X3RvX21hbGlkcF9kZXZpY2UoY3J0Yyk7Cj4gPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBj cnRjLT5kZXY7Cj4gPiArCWludCByZXQgPSBtYWxpZHBfd2FpdF9jb25maWdfdmFsaWQoZHJtKTsK PiA+ICsKPiA+ICsJaWYgKCFyZXQpIHsKPiA+ICsJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gPiAr CQlzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICplOwo+ID4gKwo+ID4gKwkJc3Bpbl9s b2NrX2lycXNhdmUoJmRybS0+ZXZlbnRfbG9jaywgZmxhZ3MpOwo+ID4gKwkJZSA9IGxpc3RfZmly c3RfZW50cnlfb3JfbnVsbCgmbWFsaWRwLT5ldmVudF9saXN0LCB0eXBlb2YoKmUpLAo+ID4gKwkJ CQkJICAgICBiYXNlLmxpbmspOwo+ID4gKwkJaWYgKGUpIHsKPiA+ICsJCQlsaXN0X2RlbCgmZS0+ YmFzZS5saW5rKTsKPiA+ICsJCQlkcm1fY3J0Y19zZW5kX3ZibGFua19ldmVudCgmbWFsaWRwLT5j cnRjLCBlKTsKPiA+ICsJCQlkcm1fY3J0Y192YmxhbmtfcHV0KCZtYWxpZHAtPmNydGMpOwo+ID4g KwkJfQo+ID4gKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHJtLT5ldmVudF9sb2NrLCBmbGFn cyk7Cj4gPiArCX0gZWxzZSB7Cj4gPiArCQlEUk1fREVCVUdfRFJJVkVSKCJ0aW1lZCBvdXQgd2Fp dGluZyBmb3IgdXBkYXRlZCBjb25maWd1cmF0aW9uXG4iKTsKPiA+ICsJfQo+ID4gK30KPiA+ICsK PiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyBtYWxpZHBfY3J0 Y19oZWxwZXJfZnVuY3MgPSB7Cj4gPiArCS5tb2RlX2ZpeHVwID0gbWFsaWRwX2NydGNfbW9kZV9m aXh1cCwKPiA+ICsJLm1vZGVfc2V0ID0gZHJtX2hlbHBlcl9jcnRjX21vZGVfc2V0LAo+ID4gKwku bW9kZV9zZXRfYmFzZSA9IGRybV9oZWxwZXJfY3J0Y19tb2RlX3NldF9iYXNlLAo+IAo+IEFib3Zl IHR3byBob29rcyBhcmUgdW51c2VkIGJ5IHB1cmUgYXRvbWljIGRyaXZlcnMsIHBsZWFzZSBsZWF2 ZSBhdCBOVUxMLgo+IFlvdSBvbmx5IG5lZWQgbW9kZV9zZXRfbm9mYi4gQWxzbyB3aXRoIHJ1bnRp bWUgUE0gbXkgcmVjb21tZW5kYXRpb24gaXMgdG8KPiBtZXJnZSBtb2RlX3NldF9ub2ZiIGludG8g LT5lbmFibGUgKHRoZXkncmUgb25seSBzcGxpdCBmb3IgYmFja3dhcmRzIGNvbXBhdAo+IHJlYXNv bnMpLgo+IAo+ID4gKwkubW9kZV9zZXRfbm9mYiA9IG1hbGlkcF9jcnRjX21vZGVfc2V0X25vZmIs Cj4gPiArCS5lbmFibGUgPSBtYWxpZHBfY3J0Y19lbmFibGUsCj4gPiArCS5kaXNhYmxlID0gbWFs aWRwX2NydGNfZGlzYWJsZSwKPiA+ICsJLmF0b21pY19jaGVjayA9IG1hbGlkcF9jcnRjX2F0b21p Y19jaGVjaywKPiA+ICsJLmF0b21pY19iZWdpbiA9IG1hbGlkcF9jcnRjX2F0b21pY19iZWdpbiwK PiA+ICsJLmF0b21pY19mbHVzaCA9IG1hbGlkcF9jcnRjX2F0b21pY19mbHVzaCwKPiA+ICt9Owo+ ID4gKwo+ID4gK3N0YXRpYyB2b2lkIG1hbGlkcF9jcnRjX2Rlc3Ryb3koc3RydWN0IGRybV9jcnRj ICpjcnRjKQo+ID4gK3sKPiA+ICsJc3RydWN0IG1hbGlkcF9kcm0gKm1hbGlkcCA9IGNydGNfdG9f bWFsaWRwX2RldmljZShjcnRjKTsKPiA+ICsJc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2 ID0gbWFsaWRwLT5kZXY7Cj4gPiArCj4gPiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShod2Rldi0+ cHhsY2xrKTsKPiA+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGh3ZGV2LT5tY2xrKTsKPiA+ICsJ ZHJtX2NydGNfY2xlYW51cChjcnRjKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBkcm1fY3J0Y19mdW5jcyBtYWxpZHBfY3J0Y19mdW5jcyA9IHsKPiA+ICsJLmRlc3Ryb3kg PSBtYWxpZHBfY3J0Y19kZXN0cm95LAo+ID4gKwkuc2V0X2NvbmZpZyA9IGRybV9hdG9taWNfaGVs cGVyX3NldF9jb25maWcsCj4gPiArCS5wYWdlX2ZsaXAgPSBkcm1fYXRvbWljX2hlbHBlcl9wYWdl X2ZsaXAsCj4gPiArCS5yZXNldCA9IGRybV9hdG9taWNfaGVscGVyX2NydGNfcmVzZXQsCj4gPiAr CS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kdXBsaWNh dGVfc3RhdGUsCj4gPiArCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVy X2NydGNfZGVzdHJveV9zdGF0ZSwKPiA+ICt9Owo+ID4gKwo+ID4gK2ludCBtYWxpZHBfY3J0Y19p bml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4gPiArewo+ID4gKwlzdHJ1Y3QgbWFsaWRwX2Ry bSAqbWFsaWRwID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiA+ICsJc3RydWN0IGRybV9wbGFuZSAqcHJp bWFyeSA9IE5VTEwsICpwbGFuZTsKPiA+ICsJaW50IHJldDsKPiA+ICsKPiA+ICsJZHJtX2Zvcl9l YWNoX3BsYW5lKHBsYW5lLCBkcm0pIHsKPiA+ICsJCWlmIChwbGFuZS0+dHlwZSA9PSBEUk1fUExB TkVfVFlQRV9QUklNQVJZKSB7Cj4gPiArCQkJcHJpbWFyeSA9IHBsYW5lOwo+ID4gKwkJCWJyZWFr Owo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiArCWlmICghcHJpbWFyeSkgewo+ID4gKwkJRFJN X0VSUk9SKCJubyBwcmltYXJ5IHBsYW5lIGZvdW5kXG4iKTsKPiA+ICsJCXJldHVybiAtRUlOVkFM Owo+ID4gKwl9Cj4gPiArCj4gPiArCXJldCA9IGRybV9jcnRjX2luaXRfd2l0aF9wbGFuZXMoZHJt LCAmbWFsaWRwLT5jcnRjLCBwcmltYXJ5LCBOVUxMLAo+ID4gKwkJCQkJJm1hbGlkcF9jcnRjX2Z1 bmNzLCBOVUxMKTsKPiA+ICsKPiA+ICsJaWYgKHJldCkgewo+ID4gKwkJbWFsaWRwX2RlX3BsYW5l c19kZXN0cm95KGRybSk7Cj4gPiArCQlyZXR1cm4gcmV0Owo+ID4gKwl9Cj4gPiArCj4gPiArCWRy bV9jcnRjX2hlbHBlcl9hZGQoJm1hbGlkcC0+Y3J0YywgJm1hbGlkcF9jcnRjX2hlbHBlcl9mdW5j cyk7Cj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vYXJtL21hbGlkcF9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2Rydi5jCj4g PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMC4uZGU0NTk4NAo+ID4gLS0t IC9kZXYvbnVsbAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfZHJ2LmMKPiA+ IEBAIC0wLDAgKzEsNDg2IEBACj4gPiArLyoKPiA+ICsgKiAoQykgQ09QWVJJR0hUIDIwMTYgQVJN IExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gPiArICogQXV0aG9yOiBMaXZpdSBEdWRh dSA8TGl2aXUuRHVkYXVAYXJtLmNvbT4KPiA+ICsgKgo+ID4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlIGFuZCBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZQo+ID4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKPiA+ICsgKiBGb3VuZGF0aW9uLCBhbmQgYW55IHVzZSBi eSB5b3Ugb2YgdGhpcyBwcm9ncmFtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zCj4gPiArICogb2Yg c3VjaCBHTlUgbGljZW5jZS4KPiA+ICsgKgo+ID4gKyAqIEFSTSBNYWxpIERQNTAwL0RQNTUwL0RQ NjUwIEtNUy9EUk0gZHJpdmVyCj4gPiArICovCj4gPiArCj4gPiArI2luY2x1ZGUgPGxpbnV4L21v ZHVsZS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgv Y29tcG9uZW50Lmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgo+ID4gKyNpbmNs dWRlIDxsaW51eC9vZl9ncmFwaC5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9vZl9yZXNlcnZlZF9t ZW0uaD4KPiA+ICsKPiA+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiA+ICsjaW5jbHVkZSA8ZHJt L2RybV9hdG9taWNfaGVscGVyLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgo+ID4g KyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1f ZmJfaGVscGVyLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fZmJfY21hX2hlbHBlci5oPgo+ID4g KyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVyLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9k cm1fb2YuaD4KPiA+ICsKPiA+ICsjaW5jbHVkZSAibWFsaWRwX2Rydi5oIgo+ID4gKyNpbmNsdWRl ICJtYWxpZHBfcmVncy5oIgo+ID4gKyNpbmNsdWRlICJtYWxpZHBfaHcuaCIKPiA+ICsKPiA+ICsj ZGVmaW5lIE1BTElEUF9DT05GX1ZBTElEX1RJTUVPVVQJMjUwCj4gPiArCj4gPiArLyoKPiA+ICsg KiBzZXQgdGhlICJjb25maWcgdmFsaWQiIGJpdCBhbmQgd2FpdCB1bnRpbCB0aGUgaGFyZHdhcmUK PiA+ICsgKiBhY3RzIG9uIGl0Cj4gPiArICovCj4gPiAraW50IG1hbGlkcF93YWl0X2NvbmZpZ192 YWxpZChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ID4gK3sKPiA+ICsJc3RydWN0IG1hbGlkcF9k cm0gKm1hbGlkcCA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gPiArCXN0cnVjdCBtYWxpZHBfaHdfZGV2 aWNlICpod2RldiA9IG1hbGlkcC0+ZGV2Owo+ID4gKwlpbnQgcmV0Owo+ID4gKwo+ID4gKwlod2Rl di0+c2V0X2NvbmZpZ192YWxpZChod2Rldik7Cj4gPiArCS8qIGRvbid0IHdhaXQgZm9yIGNvbmZp Z192YWxpZCBmbGFnIGlmIHdlIGFyZSBpbiBjb25maWcgbW9kZSAqLwo+ID4gKwlpZiAoaHdkZXYt PmluX2NvbmZpZ19tb2RlKGh3ZGV2KSkKPiA+ICsJCXJldHVybiAwOwo+ID4gKwo+ID4gKwlyZXQg PSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChtYWxpZHAtPndxLAo+ID4gKwkJCWF0 b21pY19yZWFkKCZtYWxpZHAtPmNvbmZpZ192YWxpZCkgPT0gMSwKPiA+ICsJCQltc2Vjc190b19q aWZmaWVzKE1BTElEUF9DT05GX1ZBTElEX1RJTUVPVVQpKTsKPiA+ICsKPiA+ICsJcmV0dXJuIChy ZXQgPiAwKSA/IDAgOiAtRVRJTUVET1VUOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBt YWxpZHBfb3V0cHV0X3BvbGxfY2hhbmdlZChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ID4gK3sK PiA+ICsJc3RydWN0IG1hbGlkcF9kcm0gKm1hbGlkcCA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gPiAr Cj4gPiArCWlmIChtYWxpZHAtPmZiZGV2KQo+ID4gKwkJZHJtX2ZiZGV2X2NtYV9ob3RwbHVnX2V2 ZW50KG1hbGlkcC0+ZmJkZXYpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IG1hbGlkcF9h dG9taWNfY29tbWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gPiArCQkJCXN0cnVjdCBkcm1f YXRvbWljX3N0YXRlICpzdGF0ZSwKPiA+ICsJCQkJYm9vbCBhc3luYykKPiA+ICt7Cj4gPiArCS8q Cj4gPiArCSAqIFRvRG86IGludmVzdGlnYXRlIHRoZSBhc3luYyBwYXRoIHRvIG1ha2Ugc3VyZSB0 aGF0Cj4gPiArCSAqIG9wZXJhdGlvbnMgYXJlIHN1Ym1pdHRlZCBjb3JyZWN0bHkgdG8gdGhlIGhh cmR3YXJlLAo+ID4gKwkgKiByYXRoZXIgdGhhbiBpZ25vcmluZyB0aGUgYXN5bmMgcGFyYW0KPiA+ ICsJICovCj4gCj4gVGhpcyBpcyBkZWZpbml0ZWx5IG5vdCBhc3luYyBlbm91Z2ggc2luY2UgaXQn bGwgY29udGFpbiBmdWxsIGZlbmNlIHN0YWxscwo+IGFuZCB2Ymxhbmsgd2FpdHMuIEZvciByZWFs bHkgc2ltcGxlIGhhcmR3YXJlZCBqdXN0IGEgc2NoZWR1bGVfd29yayBpcyBnb29kCj4gZW5vdWdo LiBGb3IgbW9yZSBmYW5jeSBodyB5b3UgbWlnaHQgbmVlZCBtdWx0aXBsZSBxdWV1ZXMgYW5kIHNv bWUgZGVwZW5jeQo+IGhhbmRsaW5nLgo+IAo+IFNob3VsZCBiZSBmaXhlZCBiZWZvcmUgc3VibWl0 dGluZywgc2luY2Ugd2l0aG91dCBpdCBldmVuIGxlZ2FjeSBwYWdlZmxpcAo+IHdvbid0IHdvcmsg Y29ycmVjdGx5IChpdCdzIGVtdWxhdGVkIHVzaW5nIGFzeW5jIGF0b21pYykuCgpZZXMsIEkgbmVl ZCB0byBmaXggdGhhdC4gVGhlIGhhcmR3YXJlIGlzIGRlZmluaXRlbHkgbm90IHNpbXBsZSBzbyBJ IHRvb2sgYQpzaG9ydGN1dCBoZXJlIGluIG9yZGVyIHRvIGdldCB0aGUgZmlyc3QgUkZDIG91dCBp biB0aGUgb3Blbi4KCj4gCj4gPiArCXJldHVybiBkcm1fYXRvbWljX2hlbHBlcl9jb21taXQoZGV2 LCBzdGF0ZSwgZmFsc2UpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRy bV9tb2RlX2NvbmZpZ19mdW5jcyBtYWxpZHBfbW9kZV9jb25maWdfZnVuY3MgPSB7Cj4gPiArCS5m Yl9jcmVhdGUgPSBkcm1fZmJfY21hX2NyZWF0ZSwKPiA+ICsJLm91dHB1dF9wb2xsX2NoYW5nZWQg PSBtYWxpZHBfb3V0cHV0X3BvbGxfY2hhbmdlZCwKPiA+ICsJLmF0b21pY19jaGVjayA9IGRybV9h dG9taWNfaGVscGVyX2NoZWNrLAo+ID4gKwkuYXRvbWljX2NvbW1pdCA9IG1hbGlkcF9hdG9taWNf Y29tbWl0LAo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGludCBtYWxpZHBfZW5hYmxlX3ZibGFu ayhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNpZ25lZCBpbnQgY3J0YykKPiA+ICt7Cj4gPiAr CXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBtYWxpZHBfZGlzYWJsZV92 Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgdW5zaWduZWQgaW50IHBpcGUpCj4gPiArewo+ ID4gK30KPiAKPiBNaWdodCBiZSB3b3J0aCBpdCB0byBjcmVhdGUgYSBwYXRjaCBmb3IgZHJtX2ly cS5jIHRvIG1ha2UKPiBlbmFibGUvZGlzYWJsZV92YmxhbmsgZnVuY3Rpb25zIG9wdGlvbmFsLiBP dG9oIGRvZXMgeW91ciBjaGlwIHJlYWxseSBrZWVwCj4gb24gZ2VuZXJhdGluZyB2YmxhbmsgaXJx cyBhbGwgdGhlIHRpbWUsIHdpdGggbm8gd2F5IHRvIHNodXQgaXQgdXA/IFRoYXQKPiB3b3VsZCBi ZSB0ZXJyaWJsZSBmb3IgcG93ZXIgY29uc3VtcHRpb24gLi4uIEVzcGVjaWFsbHkgc2luY2UgeW91 IGhhdmUgbm8KPiBodyBjb3VudGVyIGVpdGhlci4KCkluaXRpYWxseSBJIGhhZCBjb2RlIGhlcmUg dGhhdCB3YXMgdHVybmluZyBvZmYgdGhlIHZibGFuayBpcnEsIHRoZW4gSSd2ZSByZWFkCnRoZSBj b21tZW50IGluIGRybVAuaCB0aGF0IHRoZSByb3V0aW5lIHNob3VsZCBiZSBhIG5vLW9wIHdoZW4g aGFyZHdhcmUgY291bnRlcnMKYXJlIG1pc3NpbmcsIGhlbmNlIHRoaXMgdmVyc2lvbi4gQXMgZm9y IHRoZSBkaXNwbGF5IHByb2Nlc3NvcjogaXQgd2lsbCBnZW5lcmF0ZQphbiBpbnRlcnJ1cHQgZm9y IGV2ZXJ5IGZpbmlzaGVkIHNjYW5vdXQgY3ljbGUsIGJ1dCBpdCBoYXMgc3VwcG9ydCBmb3IgdmFy aWFibGUKdnN5bmMuIEludGVycnVwdCBjYW4gYmUgZGlzYWJsZWQsIGJ1dCBJJ3ZlIHJlYWQgaW4g dGhlIGRybVAuaCB0aGF0IGl0IGlzIHJlcXVpcmVkCmZvciB0aW1lc3RhbXBpbmcgc3VwcG9ydCB3 aGVuIG9uZSBkb2Vzbid0IGhhdmUgaHcgY291bnRlcnMuCgpJJ20gT0sgd2l0aCBmaXhpbmcgZHJt X2lycS5jIHRvIG5vdCByZXF1aXJlIGVuYWJsZS9kaXNhYmxlX3ZibGFuayBidXQgdGhlbiB0aGUK Y29tbWVudHMgaW4gZHJtUC5oIHdpbGwgYWxzbyBoYXZlIHRvIGNoYW5nZT8KCj4gCj4gPiArCj4g PiArc3RhdGljIGludCBtYWxpZHBfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ID4gK3sK PiA+ICsJaW50IHJldDsKPiA+ICsJc3RydWN0IG1hbGlkcF9kcm0gKm1hbGlkcCA9IGRybS0+ZGV2 X3ByaXZhdGU7Cj4gPiArCXN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldiA9IG1hbGlkcC0+ ZGV2Owo+ID4gKwo+ID4gKwlkcm1fbW9kZV9jb25maWdfaW5pdChkcm0pOwo+ID4gKwo+ID4gKwlk cm0tPm1vZGVfY29uZmlnLm1pbl93aWR0aCA9IGh3ZGV2LT5taW5fbGluZV9zaXplOwo+ID4gKwlk cm0tPm1vZGVfY29uZmlnLm1pbl9oZWlnaHQgPSBod2Rldi0+bWluX2xpbmVfc2l6ZTsKPiA+ICsJ ZHJtLT5tb2RlX2NvbmZpZy5tYXhfd2lkdGggPSBod2Rldi0+bWF4X2xpbmVfc2l6ZTsKPiA+ICsJ ZHJtLT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0ID0gaHdkZXYtPm1heF9saW5lX3NpemU7Cj4gPiAr CWRybS0+bW9kZV9jb25maWcuZnVuY3MgPSAmbWFsaWRwX21vZGVfY29uZmlnX2Z1bmNzOwo+ID4g Kwo+ID4gKwlyZXQgPSBtYWxpZHBfZGVfcGxhbmVzX2luaXQoZHJtKTsKPiA+ICsJaWYgKHJldCA8 IDApIHsKPiA+ICsJCURSTV9FUlJPUigiRmFpbGVkIHRvIGluaXRpYWxpc2UgcGxhbmVzXG4iKTsK PiA+ICsJCWdvdG8gcGxhbmVfaW5pdF9mYWlsOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJldCA9IG1h bGlkcF9jcnRjX2luaXQoZHJtKTsKPiA+ICsJaWYgKHJldCkgewo+ID4gKwkJRFJNX0VSUk9SKCJG YWlsZWQgdG8gaW5pdGlhbGlzZSBDUlRDXG4iKTsKPiA+ICsJCWdvdG8gY3J0Y19pbml0X2ZhaWw7 Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArCj4gPiArY3J0Y19pbml0X2ZhaWw6 Cj4gPiArCW1hbGlkcF9kZV9wbGFuZXNfZGVzdHJveShkcm0pOwo+ID4gK3BsYW5lX2luaXRfZmFp bDoKPiA+ICsJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZHJtKTsKPiA+ICsKPiA+ICsJcmV0dXJu IHJldDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBtYWxpZHBfaXJxX2luaXQoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiA+ICt7Cj4gPiArCWludCBpcnFfZGUsIGlycV9zZSwg cmV0ID0gMDsKPiA+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGRldl9nZXRfZHJ2ZGF0YSgm cGRldi0+ZGV2KTsKPiA+ICsKPiA+ICsJLyogZmV0Y2ggdGhlIGludGVycnVwdHMgZnJvbSBEVCAq Lwo+ID4gKwlpcnFfZGUgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCAiREUiKTsKPiA+ ICsJaWYgKGlycV9kZSA8IDApIHsKPiA+ICsJCURSTV9FUlJPUigibm8gJ0RFJyBJUlEgc3BlY2lm aWVkIVxuIik7Cj4gPiArCQlyZXR1cm4gaXJxX2RlOwo+ID4gKwl9Cj4gPiArCWlycV9zZSA9IHBs YXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJTRSIpOwo+ID4gKwlpZiAoaXJxX3NlIDwgMCkg ewo+ID4gKwkJRFJNX0VSUk9SKCJubyAnU0UnIElSUSBzcGVjaWZpZWQhXG4iKTsKPiA+ICsJCXJl dHVybiBpcnFfc2U7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0ID0gbWFsaWRwX2RlX2lycV9pbml0 KGRybSwgaXJxX2RlKTsKPiA+ICsJaWYgKHJldCkKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCj4g PiArCXJldCA9IG1hbGlkcF9zZV9pcnFfaW5pdChkcm0sIGlycV9zZSk7Cj4gPiArCWlmIChyZXQp IHsKPiA+ICsJCW1hbGlkcF9kZV9pcnFfY2xlYW51cChkcm0pOwo+ID4gKwkJcmV0dXJuIHJldDsK PiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZv aWQgbWFsaWRwX2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ID4gK3sKPiA+ICsJ c3RydWN0IG1hbGlkcF9kcm0gKm1hbGlkcCA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gPiArCj4gPiAr CWRybV9mYmRldl9jbWFfcmVzdG9yZV9tb2RlKG1hbGlkcC0+ZmJkZXYpOwo+ID4gK30KPiA+ICsK PiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzID0gewo+ID4gKwku b3duZXIgPSBUSElTX01PRFVMRSwKPiA+ICsJLm9wZW4gPSBkcm1fb3BlbiwKPiA+ICsJLnJlbGVh c2UgPSBkcm1fcmVsZWFzZSwKPiA+ICsJLnVubG9ja2VkX2lvY3RsID0gZHJtX2lvY3RsLAo+ID4g KyNpZmRlZiBDT05GSUdfQ09NUEFUCj4gPiArCS5jb21wYXRfaW9jdGwgPSBkcm1fY29tcGF0X2lv Y3RsLAo+ID4gKyNlbmRpZgo+ID4gKwkucG9sbCA9IGRybV9wb2xsLAo+ID4gKwkucmVhZCA9IGRy bV9yZWFkLAo+ID4gKwkubGxzZWVrID0gbm9vcF9sbHNlZWssCj4gPiArCS5tbWFwID0gZHJtX2dl bV9jbWFfbW1hcCwKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBt YWxpZHBfZHJpdmVyID0gewo+ID4gKwkuZHJpdmVyX2ZlYXR1cmVzID0gRFJJVkVSX0dFTSB8IERS SVZFUl9NT0RFU0VUIHwgRFJJVkVSX0FUT01JQyB8Cj4gPiArCQkJICAgRFJJVkVSX1BSSU1FLAo+ ID4gKwkubGFzdGNsb3NlID0gbWFsaWRwX2xhc3RjbG9zZSwKPiA+ICsJLmdldF92YmxhbmtfY291 bnRlciA9IGRybV92Ymxhbmtfbm9faHdfY291bnRlciwKPiA+ICsJLmVuYWJsZV92YmxhbmsgPSBt YWxpZHBfZW5hYmxlX3ZibGFuaywKPiA+ICsJLmRpc2FibGVfdmJsYW5rID0gbWFsaWRwX2Rpc2Fi bGVfdmJsYW5rLAo+ID4gKwkuZ2VtX2ZyZWVfb2JqZWN0ID0gZHJtX2dlbV9jbWFfZnJlZV9vYmpl Y3QsCj4gPiArCS5nZW1fdm1fb3BzID0gJmRybV9nZW1fY21hX3ZtX29wcywKPiA+ICsJLmR1bWJf Y3JlYXRlID0gZHJtX2dlbV9jbWFfZHVtYl9jcmVhdGUsCj4gPiArCS5kdW1iX21hcF9vZmZzZXQg PSBkcm1fZ2VtX2NtYV9kdW1iX21hcF9vZmZzZXQsCj4gPiArCS5kdW1iX2Rlc3Ryb3kgPSBkcm1f Z2VtX2R1bWJfZGVzdHJveSwKPiA+ICsJLnByaW1lX2hhbmRsZV90b19mZCA9IGRybV9nZW1fcHJp bWVfaGFuZGxlX3RvX2ZkLAo+ID4gKwkucHJpbWVfZmRfdG9faGFuZGxlID0gZHJtX2dlbV9wcmlt ZV9mZF90b19oYW5kbGUsCj4gPiArCS5nZW1fcHJpbWVfZXhwb3J0ID0gZHJtX2dlbV9wcmltZV9l eHBvcnQsCj4gPiArCS5nZW1fcHJpbWVfaW1wb3J0ID0gZHJtX2dlbV9wcmltZV9pbXBvcnQsCj4g PiArCS5nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlID0gZHJtX2dlbV9jbWFfcHJpbWVfZ2V0X3NnX3Rh YmxlLAo+ID4gKwkuZ2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZSA9IGRybV9nZW1fY21hX3ByaW1l X2ltcG9ydF9zZ190YWJsZSwKPiA+ICsJLmdlbV9wcmltZV92bWFwID0gZHJtX2dlbV9jbWFfcHJp bWVfdm1hcCwKPiA+ICsJLmdlbV9wcmltZV92dW5tYXAgPSBkcm1fZ2VtX2NtYV9wcmltZV92dW5t YXAsCj4gPiArCS5nZW1fcHJpbWVfbW1hcCA9IGRybV9nZW1fY21hX3ByaW1lX21tYXAsCj4gPiAr CS5mb3BzID0gJmZvcHMsCj4gPiArCS5uYW1lID0gIm1hbGktZHAiLAo+ID4gKwkuZGVzYyA9ICJB Uk0gTWFsaSBEaXNwbGF5IFByb2Nlc3NvciBkcml2ZXIiLAo+ID4gKwkuZGF0ZSA9ICIyMDE2MDEw NiIsCj4gPiArCS5tYWpvciA9IDEsCj4gPiArCS5taW5vciA9IDAsCj4gPiArfTsKPiA+ICsKPiA+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAgbWFsaWRwX2RybV9vZl9tYXRjaFtd ID0gewo+ID4gKwl7Cj4gPiArCQkuY29tcGF0aWJsZSA9ICJhcm0sbWFsaS1kcDUwMCIsCj4gPiAr CQkuZGF0YSA9ICZtYWxpZHBfZGV2aWNlW01BTElEUF81MDBdCj4gPiArCX0sCj4gPiArCXsKPiA+ ICsJCS5jb21wYXRpYmxlID0gImFybSxtYWxpLWRwNTUwIiwKPiA+ICsJCS5kYXRhID0gJm1hbGlk cF9kZXZpY2VbTUFMSURQXzU1MF0KPiA+ICsJfSwKPiA+ICsJewo+ID4gKwkJLmNvbXBhdGlibGUg PSAiYXJtLG1hbGktZHA2NTAiLAo+ID4gKwkJLmRhdGEgPSAmbWFsaWRwX2RldmljZVtNQUxJRFBf NjUwXQo+ID4gKwl9LAo+ID4gKwl7fSwKPiA+ICt9Owo+ID4gK01PRFVMRV9ERVZJQ0VfVEFCTEUo b2YsIG1hbGlkcF9kcm1fb2ZfbWF0Y2gpOwo+ID4gKwo+ID4gKyNkZWZpbmUgTUFYX09VVFBVVF9D SEFOTkVMUwkzCj4gPiArCj4gPiArc3RhdGljIGludCBtYWxpZHBfYmluZChzdHJ1Y3QgZGV2aWNl ICpkZXYpCj4gPiArewo+ID4gKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKPiA+ICsJc3RydWN0IGRy bV9kZXZpY2UgKmRybTsKPiA+ICsJc3RydWN0IG1hbGlkcF9kcm0gKm1hbGlkcDsKPiA+ICsJc3Ry dWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2Owo+ID4gKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Cj4gPiArCS8qIG51bWJlciBvZiBsaW5l cyBmb3IgdGhlIFIsIEcgYW5kIEIgb3V0cHV0ICovCj4gPiArCXU4IG91dHB1dF93aWR0aFtNQVhf T1VUUFVUX0NIQU5ORUxTXTsKPiA+ICsJaW50IHJldCA9IDAsIGk7Cj4gPiArCXUzMiB2ZXJzaW9u LCBvdXRfZGVwdGggPSAwOwo+ID4gKwo+ID4gKwltYWxpZHAgPSBkZXZtX2t6YWxsb2MoZGV2LCBz aXplb2YoKm1hbGlkcCksIEdGUF9LRVJORUwpOwo+ID4gKwlpZiAoIW1hbGlkcCkKPiA+ICsJCXJl dHVybiAtRU5PTUVNOwo+ID4gKwo+ID4gKwlod2RldiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVv ZigqaHdkZXYpLCBHRlBfS0VSTkVMKTsKPiA+ICsJaWYgKCFod2RldikKPiA+ICsJCXJldHVybiAt RU5PTUVNOwo+ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiBjb3B5IHRoZSBhc3NvY2lhdGVkIGRhdGEg ZnJvbSBtYWxpZHBfZHJtX29mX21hdGNoIHRvIGF2b2lkCj4gPiArCSAqIGhhdmluZyB0byBrZWVw IGEgcmVmZXJlbmNlIHRvIHRoZSBPRiBub2RlIGFmdGVyIGJpbmRpbmcKPiA+ICsJICovCj4gPiAr CW1lbWNweShod2Rldiwgb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldiksIHNpemVvZigqaHdk ZXYpKTsKPiA+ICsJbWFsaWRwLT5kZXYgPSBod2RldjsKPiA+ICsKPiA+ICsJSU5JVF9MSVNUX0hF QUQoJm1hbGlkcC0+ZXZlbnRfbGlzdCk7Cj4gPiArCj4gPiArCXJlcyA9IHBsYXRmb3JtX2dldF9y ZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Cj4gPiArCWh3ZGV2LT5yZWdzID0gZGV2 bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKPiA+ICsJaWYgKElTX0VSUihod2Rldi0+cmVn cykpIHsKPiA+ICsJCURSTV9FUlJPUigiRmFpbGVkIHRvIG1hcCBjb250cm9sIHJlZ2lzdGVycyBh cmVhXG4iKTsKPiA+ICsJCXJldHVybiBQVFJfRVJSKGh3ZGV2LT5yZWdzKTsKPiA+ICsJfQo+ID4g Kwo+ID4gKwlod2Rldi0+cGNsayA9IGRldm1fY2xrX2dldChkZXYsICJwY2xrIik7Cj4gPiArCWlm IChJU19FUlIoaHdkZXYtPnBjbGspKQo+ID4gKwkJcmV0dXJuIFBUUl9FUlIoaHdkZXYtPnBjbGsp Owo+ID4gKwo+ID4gKwlod2Rldi0+YWNsayA9IGRldm1fY2xrX2dldChkZXYsICJhY2xrIik7Cj4g PiArCWlmIChJU19FUlIoaHdkZXYtPmFjbGspKQo+ID4gKwkJcmV0dXJuIFBUUl9FUlIoaHdkZXYt PmFjbGspOwo+ID4gKwo+ID4gKwlod2Rldi0+bWNsayA9IGRldm1fY2xrX2dldChkZXYsICJtY2xr Iik7Cj4gPiArCWlmIChJU19FUlIoaHdkZXYtPm1jbGspKQo+ID4gKwkJcmV0dXJuIFBUUl9FUlIo aHdkZXYtPm1jbGspOwo+ID4gKwo+ID4gKwlod2Rldi0+cHhsY2xrID0gZGV2bV9jbGtfZ2V0KGRl diwgInB4bGNsayIpOwo+ID4gKwlpZiAoSVNfRVJSKGh3ZGV2LT5weGxjbGspKQo+ID4gKwkJcmV0 dXJuIFBUUl9FUlIoaHdkZXYtPnB4bGNsayk7Cj4gPiArCj4gPiArCS8qIEdldCB0aGUgb3B0aW9u YWwgZnJhbWVidWZmZXIgbWVtb3J5IHJlc291cmNlICovCj4gPiArCXJldCA9IG9mX3Jlc2VydmVk X21lbV9kZXZpY2VfaW5pdChkZXYpOwo+ID4gKwlpZiAocmV0ICYmIHJldCAhPSAtRU5PREVWKQo+ ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsKPiA+ICsJZHJtID0gZHJtX2Rldl9hbGxvYygmbWFsaWRw X2RyaXZlciwgZGV2KTsKPiA+ICsJaWYgKCFkcm0pIHsKPiA+ICsJCXJldCA9IC1FTk9NRU07Cj4g PiArCQlnb3RvIGFsbG9jX2ZhaWw7Cj4gPiArCX0KPiA+ICsKPiA+ICsJLyogRW5hYmxlIEFQQiBj bG9jayBpbiBvcmRlciB0byBnZXQgYWNjZXNzIHRvIHRoZSByZWdpc3RlcnMgKi8KPiA+ICsJY2xr X3ByZXBhcmVfZW5hYmxlKGh3ZGV2LT5wY2xrKTsKPiA+ICsJLyoKPiA+ICsJICogRW5hYmxlIEFY SSBjbG9jayBhbmQgbWFpbiBjbG9jayBzbyB0aGF0IHByZWZldGNoIGNhbiBzdGFydCBvbmNlCj4g PiArCSAqIHRoZSByZWdpc3RlcnMgYXJlIHNldAo+ID4gKwkgKi8KPiA+ICsJY2xrX3ByZXBhcmVf ZW5hYmxlKGh3ZGV2LT5hY2xrKTsKPiA+ICsJY2xrX3ByZXBhcmVfZW5hYmxlKGh3ZGV2LT5tY2xr KTsKPiA+ICsKPiA+ICsJcmV0ID0gaHdkZXYtPnF1ZXJ5X2h3KGh3ZGV2KTsKPiA+ICsJaWYgKHJl dCkgewo+ID4gKwkJRFJNX0VSUk9SKCJJbnZhbGlkIEhXIGNvbmZpZ3VyYXRpb25cbiIpOwo+ID4g KwkJZ290byBxdWVyeV9od19mYWlsOwo+ID4gKwl9Cj4gPiArCj4gPiArCXZlcnNpb24gPSBtYWxp ZHBfaHdfcmVhZChod2RldiwgaHdkZXYtPm1hcC5kY19iYXNlICsgTUFMSURQX0RFX0NPUkVfSUQp Owo+ID4gKwlEUk1fSU5GTygiZm91bmQgQVJNIE1hbGktRFAlM3ggdmVyc2lvbiByJWRwJWRcbiIs IHZlcnNpb24gPj4gMTYsCj4gPiArCQkgKHZlcnNpb24gPj4gMTIpICYgMHhmLCAodmVyc2lvbiA+ PiA4KSAmIDB4Zik7Cj4gPiArCj4gPiArCS8qIHNldCB0aGUgbnVtYmVyIG9mIGxpbmVzIHVzZWQg Zm9yIG91dHB1dCBvZiBSR0IgZGF0YSAqLwo+ID4gKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3U4 X2FycmF5KGRldi0+b2Zfbm9kZSwKPiA+ICsJCQkJCSJhcm0sbWFsaWRwLW91dHB1dC1wb3J0LWxp bmVzIiwKPiA+ICsJCQkJCW91dHB1dF93aWR0aCwgTUFYX09VVFBVVF9DSEFOTkVMUyk7Cj4gPiAr CWlmIChyZXQpCj4gPiArCQlnb3RvIHF1ZXJ5X2h3X2ZhaWw7Cj4gPiArCj4gPiArCWZvciAoaSA9 IDA7IGkgPCBNQVhfT1VUUFVUX0NIQU5ORUxTOyBpKyspCj4gPiArCQlvdXRfZGVwdGggPSAob3V0 X2RlcHRoIDw8IDgpIHwgKG91dHB1dF93aWR0aFtpXSAmIDB4Zik7Cj4gPiArCW1hbGlkcF9od193 cml0ZShod2Rldiwgb3V0X2RlcHRoLCBod2Rldi0+bWFwLm91dF9kZXB0aF9iYXNlKTsKPiA+ICsK PiA+ICsJZHJtLT5kZXZfcHJpdmF0ZSA9IG1hbGlkcDsKPiA+ICsJZGV2X3NldF9kcnZkYXRhKGRl diwgZHJtKTsKPiA+ICsJYXRvbWljX3NldCgmbWFsaWRwLT5jb25maWdfdmFsaWQsIDApOwo+ID4g Kwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZtYWxpZHAtPndxKTsKPiA+ICsKPiA+ICsJcmV0ID0gbWFs aWRwX2luaXQoZHJtKTsKPiA+ICsJaWYgKHJldCA8IDApCj4gPiArCQlnb3RvIGluaXRfZmFpbDsK PiA+ICsKPiA+ICsJcmV0ID0gZHJtX2Rldl9yZWdpc3Rlcihkcm0sIDApOwo+ID4gKwlpZiAocmV0 KQo+ID4gKwkJZ290byByZWdpc3Rlcl9mYWlsOwo+ID4gKwo+ID4gKwkvKiBTZXQgdGhlIENSVEMn cyBwb3J0IHNvIHRoYXQgdGhlIGVuY29kZXIgY29tcG9uZW50IGNhbiBmaW5kIGl0ICovCj4gPiAr CW1hbGlkcC0+Y3J0Yy5wb3J0ID0gb2ZfZ3JhcGhfZ2V0X25leHRfZW5kcG9pbnQoZGV2LT5vZl9u b2RlLCBOVUxMKTsKPiA+ICsKPiA+ICsJcmV0ID0gY29tcG9uZW50X2JpbmRfYWxsKGRldiwgZHJt KTsKPiA+ICsJb2Zfbm9kZV9wdXQobWFsaWRwLT5jcnRjLnBvcnQpOwo+ID4gKwo+ID4gKwlpZiAo cmV0KSB7Cj4gPiArCQlEUk1fRVJST1IoIkZhaWxlZCB0byBiaW5kIGFsbCBjb21wb25lbnRzXG4i KTsKPiA+ICsJCWdvdG8gYmluZF9mYWlsOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJldCA9IGRybV92 YmxhbmtfaW5pdChkcm0sIGRybS0+bW9kZV9jb25maWcubnVtX2NydGMpOwo+ID4gKwlpZiAocmV0 IDwgMCkgewo+ID4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5pdGlhbGlzZSB2YmxhbmtcbiIp Owo+ID4gKwkJZ290byB2YmxhbmtfZmFpbDsKPiA+ICsJfQo+ID4gKwlkcm0tPnZibGFua19kaXNh YmxlX2FsbG93ZWQgPSB0cnVlOwo+ID4gKwo+ID4gKwlyZXQgPSBtYWxpZHBfaXJxX2luaXQocGRl dik7Cj4gPiArCWlmIChyZXQgPCAwKQo+ID4gKwkJZ290byBpcnFfaW5pdF9mYWlsOwo+ID4gKwo+ ID4gKwlkcm1fbW9kZV9jb25maWdfcmVzZXQoZHJtKTsKPiA+ICsKPiA+ICsJZHJtX2hlbHBlcl9k aXNhYmxlX3VudXNlZF9mdW5jdGlvbnMoZHJtKTsKPiA+ICsJbWFsaWRwLT5mYmRldiA9IGRybV9m YmRldl9jbWFfaW5pdChkcm0sIDMyLCBkcm0tPm1vZGVfY29uZmlnLm51bV9jcnRjLAo+ID4gKwkJ CQkJICAgZHJtLT5tb2RlX2NvbmZpZy5udW1fY29ubmVjdG9yKTsKPiA+ICsKPiA+ICsJaWYgKElT X0VSUihtYWxpZHAtPmZiZGV2KSkgewo+ID4gKwkJcmV0ID0gUFRSX0VSUihtYWxpZHAtPmZiZGV2 KTsKPiA+ICsJCW1hbGlkcC0+ZmJkZXYgPSBOVUxMOwo+ID4gKwkJZ290byBmYmRldl9mYWlsOwo+ ID4gKwl9Cj4gPiArCj4gPiArCWRybV9rbXNfaGVscGVyX3BvbGxfaW5pdChkcm0pOwo+ID4gKwly ZXR1cm4gMDsKPiA+ICsKPiA+ICtmYmRldl9mYWlsOgo+ID4gKwltYWxpZHBfc2VfaXJxX2NsZWFu dXAoZHJtKTsKPiA+ICsJbWFsaWRwX2RlX2lycV9jbGVhbnVwKGRybSk7Cj4gPiAraXJxX2luaXRf ZmFpbDoKPiA+ICsJZHJtX3ZibGFua19jbGVhbnVwKGRybSk7Cj4gPiArdmJsYW5rX2ZhaWw6Cj4g PiArCWNvbXBvbmVudF91bmJpbmRfYWxsKGRldiwgZHJtKTsKPiA+ICtiaW5kX2ZhaWw6Cj4gPiAr CWRybV9kZXZfdW5yZWdpc3Rlcihkcm0pOwo+ID4gK3JlZ2lzdGVyX2ZhaWw6Cj4gPiArCW1hbGlk cF9kZV9wbGFuZXNfZGVzdHJveShkcm0pOwo+ID4gKwlkcm1fbW9kZV9jb25maWdfY2xlYW51cChk cm0pOwo+ID4gK2luaXRfZmFpbDoKPiA+ICsJZHJtLT5kZXZfcHJpdmF0ZSA9IE5VTEw7Cj4gPiAr CWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwo+ID4gK3F1ZXJ5X2h3X2ZhaWw6Cj4gPiArCWNs a19kaXNhYmxlX3VucHJlcGFyZShod2Rldi0+bWNsayk7Cj4gPiArCWNsa19kaXNhYmxlX3VucHJl cGFyZShod2Rldi0+YWNsayk7Cj4gPiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShod2Rldi0+cGNs ayk7Cj4gPiArCWRybV9kZXZfdW5yZWYoZHJtKTsKPiA+ICthbGxvY19mYWlsOgo+ID4gKwlvZl9y ZXNlcnZlZF9tZW1fZGV2aWNlX3JlbGVhc2UoZGV2KTsKPiA+ICsKPiA+ICsJcmV0dXJuIHJldDsK PiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgbWFsaWRwX3VuYmluZChzdHJ1Y3QgZGV2aWNl ICpkZXYpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gZGV2X2dldF9kcnZk YXRhKGRldik7Cj4gPiArCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBkcm0tPmRldl9wcml2 YXRlOwo+ID4gKwlzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYgPSBtYWxpZHAtPmRldjsK PiA+ICsKPiA+ICsJaWYgKG1hbGlkcC0+ZmJkZXYpIHsKPiA+ICsJCWRybV9mYmRldl9jbWFfZmlu aShtYWxpZHAtPmZiZGV2KTsKPiA+ICsJCW1hbGlkcC0+ZmJkZXYgPSBOVUxMOwo+ID4gKwl9Cj4g PiArCWRybV9rbXNfaGVscGVyX3BvbGxfZmluaShkcm0pOwo+ID4gKwltYWxpZHBfc2VfaXJxX2Ns ZWFudXAoZHJtKTsKPiA+ICsJbWFsaWRwX2RlX2lycV9jbGVhbnVwKGRybSk7Cj4gPiArCWRybV92 YmxhbmtfY2xlYW51cChkcm0pOwo+ID4gKwljb21wb25lbnRfdW5iaW5kX2FsbChkZXYsIGRybSk7 Cj4gPiArCWRybV9kZXZfdW5yZWdpc3Rlcihkcm0pOwo+ID4gKwltYWxpZHBfZGVfcGxhbmVzX2Rl c3Ryb3koZHJtKTsKPiA+ICsJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZHJtKTsKPiA+ICsJZHJt LT5kZXZfcHJpdmF0ZSA9IE5VTEw7Cj4gPiArCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwo+ ID4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaHdkZXYtPm1jbGspOwo+ID4gKwljbGtfZGlzYWJs ZV91bnByZXBhcmUoaHdkZXYtPmFjbGspOwo+ID4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaHdk ZXYtPnBjbGspOwo+ID4gKwlkcm1fZGV2X3VucmVmKGRybSk7Cj4gPiArCW9mX3Jlc2VydmVkX21l bV9kZXZpY2VfcmVsZWFzZShkZXYpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IGNvbXBvbmVudF9tYXN0ZXJfb3BzIG1hbGlkcF9tYXN0ZXJfb3BzID0gewo+ID4gKwkuYmlu ZCA9IG1hbGlkcF9iaW5kLAo+ID4gKwkudW5iaW5kID0gbWFsaWRwX3VuYmluZCwKPiA+ICt9Owo+ ID4gKwo+ID4gK3N0YXRpYyBpbnQgbWFsaWRwX2NvbXBhcmVfZGV2KHN0cnVjdCBkZXZpY2UgKmRl diwgdm9pZCAqZGF0YSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkYXRh Owo+ID4gKwo+ID4gKwlyZXR1cm4gZGV2LT5vZl9ub2RlID09IG5wOwo+ID4gK30KPiA+ICsKPiA+ ICtzdGF0aWMgaW50IG1hbGlkcF9wbGF0Zm9ybV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQo+ID4gK3sKPiA+ICsJc3RydWN0IGRldmljZV9ub2RlICpwb3J0LCAqZXA7Cj4gPiAr CXN0cnVjdCBjb21wb25lbnRfbWF0Y2ggKm1hdGNoID0gTlVMTDsKPiA+ICsKPiA+ICsJaWYgKCFw ZGV2LT5kZXYub2Zfbm9kZSkKPiA+ICsJCXJldHVybiAtRU5PREVWOwo+ID4gKwo+ID4gKwkvKiB0 aGVyZSBpcyBvbmx5IG9uZSBvdXRwdXQgcG9ydCBpbnNpZGUgZWFjaCBkZXZpY2UsIGZpbmQgaXQg Ki8KPiA+ICsJZXAgPSBvZl9ncmFwaF9nZXRfbmV4dF9lbmRwb2ludChwZGV2LT5kZXYub2Zfbm9k ZSwgTlVMTCk7Cj4gPiArCWlmICghZXApCj4gPiArCQlyZXR1cm4gLUVOT0RFVjsKPiA+ICsKPiA+ ICsJaWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKGVwKSkgewo+ID4gKwkJb2Zfbm9kZV9wdXQo ZXApOwo+ID4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gPiArCX0KPiA+ICsKPiA+ICsJLyogYWRkIHRo ZSByZW1vdGUgZW5jb2RlciBwb3J0IGFzIGNvbXBvbmVudCAqLwo+ID4gKwlwb3J0ID0gb2ZfZ3Jh cGhfZ2V0X3JlbW90ZV9wb3J0X3BhcmVudChlcCk7Cj4gPiArCW9mX25vZGVfcHV0KGVwKTsKPiA+ ICsJaWYgKCFwb3J0IHx8ICFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKHBvcnQpKSB7Cj4gPiArCQlv Zl9ub2RlX3B1dChwb3J0KTsKPiA+ICsJCXJldHVybiAtRUFHQUlOOwo+ID4gKwl9Cj4gPiArCj4g PiArCWNvbXBvbmVudF9tYXRjaF9hZGQoJnBkZXYtPmRldiwgJm1hdGNoLCBtYWxpZHBfY29tcGFy ZV9kZXYsIHBvcnQpOwo+ID4gKwlyZXR1cm4gY29tcG9uZW50X21hc3Rlcl9hZGRfd2l0aF9tYXRj aCgmcGRldi0+ZGV2LCAmbWFsaWRwX21hc3Rlcl9vcHMsCj4gPiArCQkJCQkgICAgICAgbWF0Y2gp Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IG1hbGlkcF9wbGF0Zm9ybV9yZW1vdmUoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiA+ICt7Cj4gPiArCWNvbXBvbmVudF9tYXN0ZXJf ZGVsKCZwZGV2LT5kZXYsICZtYWxpZHBfbWFzdGVyX29wcyk7Cj4gPiArCXJldHVybiAwOwo+ID4g K30KPiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtYWxpZHBfcGxhdGZv cm1fZHJpdmVyID0gewo+ID4gKwkucHJvYmUJCT0gbWFsaWRwX3BsYXRmb3JtX3Byb2JlLAo+ID4g KwkucmVtb3ZlCQk9IG1hbGlkcF9wbGF0Zm9ybV9yZW1vdmUsCj4gPiArCS5kcml2ZXIJPSB7Cj4g PiArCQkubmFtZSA9ICJtYWxpLWRwIiwKPiA+ICsJCS5vZl9tYXRjaF90YWJsZQk9IG1hbGlkcF9k cm1fb2ZfbWF0Y2gsCj4gPiArCX0sCj4gPiArfTsKPiA+ICsKPiA+ICttb2R1bGVfcGxhdGZvcm1f ZHJpdmVyKG1hbGlkcF9wbGF0Zm9ybV9kcml2ZXIpOwo+ID4gKwo+ID4gK01PRFVMRV9BVVRIT1Io Ikxpdml1IER1ZGF1IDxMaXZpdS5EdWRhdUBhcm0uY29tPiIpOwo+ID4gK01PRFVMRV9ERVNDUklQ VElPTigiQVJNIE1hbGkgRFAgRFJNIGRyaXZlciIpOwo+ID4gK01PRFVMRV9MSUNFTlNFKCJHUEwg djIiKTsKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9kcnYuaCBi L2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2Rydi5oCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+ID4gaW5kZXggMDAwMDAwMC4uN2RlMGRhNgo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfZHJ2LmgKPiA+IEBAIC0wLDAgKzEsNDkgQEAKPiA+ ICsvKgo+ID4gKyAqIChDKSBDT1BZUklHSFQgMjAxNiBBUk0gTGltaXRlZC4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KPiA+ICsgKiBBdXRob3I6IExpdml1IER1ZGF1IDxMaXZpdS5EdWRhdUBhcm0uY29t Pgo+ID4gKyAqCj4gPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmUgYW5kIGlzIHBy b3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlCj4gPiArICogR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZQo+ID4gKyAqIEZvdW5kYXRpb24sIGFuZCBhbnkgdXNlIGJ5IHlvdSBvZiB0aGlzIHByb2dyYW0g aXMgc3ViamVjdCB0byB0aGUgdGVybXMKPiA+ICsgKiBvZiBzdWNoIEdOVSBsaWNlbmNlLgo+ID4g KyAqCj4gPiArICogQVJNIE1hbGkgRFA1MDAvRFA1NTAvRFA2NTAgS01TL0RSTSBkcml2ZXIgc3Ry dWN0dXJlcwo+ID4gKyAqLwo+ID4gKwo+ID4gKyNpZm5kZWYgX19NQUxJRFBfRFJWX0hfXwo+ID4g KyNkZWZpbmUgX19NQUxJRFBfRFJWX0hfXwo+ID4gKwo+ID4gKyNpbmNsdWRlIDxsaW51eC9tdXRl eC5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Cj4gPiArI2luY2x1ZGUgIm1hbGlkcF9o dy5oIgo+ID4gKwo+ID4gK3N0cnVjdCBtYWxpZHBfZHJtIHsKPiA+ICsJc3RydWN0IG1hbGlkcF9o d19kZXZpY2UgKmRldjsKPiA+ICsJc3RydWN0IGRybV9mYmRldl9jbWEgKmZiZGV2Owo+ID4gKwlz dHJ1Y3QgbGlzdF9oZWFkIGV2ZW50X2xpc3Q7Cj4gPiArCXN0cnVjdCBkcm1fY3J0YyBjcnRjOwo+ ID4gKwl3YWl0X3F1ZXVlX2hlYWRfdCB3cTsKPiA+ICsJYXRvbWljX3QgY29uZmlnX3ZhbGlkOwo+ ID4gK307Cj4gPiArCj4gPiArI2RlZmluZSBjcnRjX3RvX21hbGlkcF9kZXZpY2UoeCkgY29udGFp bmVyX29mKHgsIHN0cnVjdCBtYWxpZHBfZHJtLCBjcnRjKQo+ID4gKwo+ID4gK3N0cnVjdCBtYWxp ZHBfcGxhbmUgewo+ID4gKwlzdHJ1Y3QgZHJtX3BsYW5lIGJhc2U7Cj4gPiArCXN0cnVjdCBtYWxp ZHBfaHdfZGV2aWNlICpod2RldjsKPiA+ICsJY29uc3Qgc3RydWN0IG1hbGlkcF9sYXllciAqbGF5 ZXI7Cj4gPiArCS8qIHNpemUgb2YgdGhlIHJlcXVpcmVkIHJvdGF0aW9uIG1lbW9yeSB3aGVuIHBs YW5lIGlzIHJvdGF0ZWQgKi8KPiA+ICsJdTMyIHJvdG1lbV9zaXplOwo+ID4gK307Cj4gPiArCj4g PiArI2RlZmluZSB0b19tYWxpZHBfcGxhbmUoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBtYWxp ZHBfcGxhbmUsIGJhc2UpCj4gPiArCj4gPiAraW50IG1hbGlkcF93YWl0X2NvbmZpZ192YWxpZChz dHJ1Y3QgZHJtX2RldmljZSAqZHJtKTsKPiA+ICtpbnQgbWFsaWRwX2RlX3BsYW5lc19pbml0KHN0 cnVjdCBkcm1fZGV2aWNlICpkcm0pOwo+ID4gK3ZvaWQgbWFsaWRwX2RlX3BsYW5lc19kZXN0cm95 KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pOwo+ID4gK2ludCBtYWxpZHBfY3J0Y19pbml0KHN0cnVj dCBkcm1fZGV2aWNlICpkcm0pOwo+ID4gKwo+ID4gKy8qIG9mdGVuIHVzZWQgY29tYmluYXRpb24g b2Ygcm90YXRpb25hbCBiaXRzICovCj4gPiArI2RlZmluZSBNQUxJRFBfUk9UQVRFRF9NQVNLCShC SVQoRFJNX1JPVEFURV85MCkgfCBCSVQoRFJNX1JPVEFURV8yNzApKQo+ID4gKwo+ID4gKyNlbmRp ZiAgLyogX19NQUxJRFBfRFJWX0hfXyAqLwo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9hcm0vbWFsaWRwX2h3LmMgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9ody5jCj4gPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMC4uZTg0MGQ2OQo+ID4gLS0tIC9k ZXYvbnVsbAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfaHcuYwo+ID4gQEAg LTAsMCArMSw3NzcgQEAKPiA+ICsvKgo+ID4gKyAqIChDKSBDT1BZUklHSFQgMjAxNiBBUk0gTGlt aXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiA+ICsgKiBBdXRob3I6IExpdml1IER1ZGF1IDxM aXZpdS5EdWRhdUBhcm0uY29tPgo+ID4gKyAqCj4gPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmUgYW5kIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlCj4g PiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZQo+ID4gKyAqIEZvdW5kYXRpb24sIGFuZCBhbnkgdXNlIGJ5IHlv dSBvZiB0aGlzIHByb2dyYW0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMKPiA+ICsgKiBvZiBzdWNo IEdOVSBsaWNlbmNlLgo+ID4gKyAqCj4gPiArICogQVJNIE1hbGkgRFA1MDAvRFA1NTAvRFA2NTAg aGFyZHdhcmUgbWFuaXB1bGF0aW9uIHJvdXRpbmVzLiBUaGlzIGlzIHdoZXJlCj4gPiArICogdGhl IGRpZmZlcmVuY2UgYmV0d2VlbiB2YXJpb3VzIHZlcnNpb25zIG9mIHRoZSBoYXJkd2FyZSBpcyBi ZWluZyBkZWFsdCB3aXRoCj4gPiArICogaW4gYW4gYXR0ZW1wdCB0byBwcm92aWRlIHRvIHRoZSBy ZXN0IG9mIHRoZSBkcml2ZXIgY29kZSBhIHVuaWZpZWQgdmlldwo+ID4gKyAqLwo+ID4gKwo+ID4g KyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9pby5oPgo+ID4g KyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ID4gKyNpbmNsdWRlIDx2aWRlby92aWRlb21vZGUuaD4K PiA+ICsjaW5jbHVkZSA8dmlkZW8vZGlzcGxheV90aW1pbmcuaD4KPiA+ICsKPiA+ICsjaW5jbHVk ZSAibWFsaWRwX2Rydi5oIgo+ID4gKyNpbmNsdWRlICJtYWxpZHBfaHcuaCIKPiA+ICsjaW5jbHVk ZSAibWFsaWRwX3JlZ3MuaCIKPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG1hbGlkcF9p bnB1dF9mb3JtYXQgbWFsaWRwNTAwX2RlX2Zvcm1hdHNbXSA9IHsKPiA+ICsJLyogICAgbGF5ZXJz IHN1cHBvcnRpbmcgdGhlIGZvcm1hdCwgICAgIGludGVybmFsIGlkLCAgICAgIGZvdXJjYyAqLwo+ ID4gKwl7IERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX0dSQVBISUNTMiwgIDAsIERSTV9G T1JNQVRfQVJHQjIxMDEwMTAgfSwKPiA+ICsJeyBERV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBE RV9HUkFQSElDUzIsICAxLCBEUk1fRk9STUFUX0FCR1IyMTAxMDEwIH0sCj4gPiArCXsgREVfVklE RU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfR1JBUEhJQ1MyLCAgMiwgRFJNX0ZPUk1BVF9BUkdCODg4 OCB9LAo+ID4gKwl7IERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX0dSQVBISUNTMiwgIDMs IERSTV9GT1JNQVRfQUJHUjg4ODggfSwKPiA+ICsJeyBERV9WSURFTzEgfCBERV9HUkFQSElDUzEg fCBERV9HUkFQSElDUzIsICA0LCBEUk1fRk9STUFUX1hSR0I4ODg4IH0sCj4gPiArCXsgREVfVklE RU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfR1JBUEhJQ1MyLCAgNSwgRFJNX0ZPUk1BVF9YQkdSODg4 OCB9LAo+ID4gKwl7IERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX0dSQVBISUNTMiwgIDYs IERSTV9GT1JNQVRfUkdCODg4IH0sCj4gPiArCXsgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwg REVfR1JBUEhJQ1MyLCAgNywgRFJNX0ZPUk1BVF9CR1I4ODggfSwKPiA+ICsJeyBERV9WSURFTzEg fCBERV9HUkFQSElDUzEgfCBERV9HUkFQSElDUzIsICA4LCBEUk1fRk9STUFUX1JHQkE1NTUxIH0s Cj4gPiArCXsgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfR1JBUEhJQ1MyLCAgOSwgRFJN X0ZPUk1BVF9BQkdSMTU1NSB9LAo+ID4gKwl7IERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERF X0dSQVBISUNTMiwgMTAsIERSTV9GT1JNQVRfUkdCNTY1IH0sCj4gPiArCXsgREVfVklERU8xIHwg REVfR1JBUEhJQ1MxIHwgREVfR1JBUEhJQ1MyLCAxMSwgRFJNX0ZPUk1BVF9CR1I1NjUgfSwKPiA+ ICsJeyBERV9WSURFTzEsIDEyLCBEUk1fRk9STUFUX1VZVlkgfSwKPiA+ICsJeyBERV9WSURFTzEs IDEzLCBEUk1fRk9STUFUX1lVWVYgfSwKPiA+ICsJeyBERV9WSURFTzEsIDE0LCBEUk1fRk9STUFU X05WMTIgfSwKPiA+ICsJeyBERV9WSURFTzEsIDE1LCBEUk1fRk9STUFUX1lVVjQyMCB9LAo+ID4g K307Cj4gPiArCj4gPiArI2RlZmluZSBNQUxJRFBfSUQoX19ncm91cCwgX19mb3JtYXQpIFwKPiA+ ICsJKCgoKF9fZ3JvdXApICYgMHg3KSA8PCAzKSB8ICgoX19mb3JtYXQpICYgMHg3KSkKPiA+ICsK PiA+ICsjZGVmaW5lIE1BTElEUF9DT01NT05fRk9STUFUUyBcCj4gPiArCS8qICAgIGxheWVycyBz dXBwb3J0aW5nIHRoZSBmb3JtYXQsICAgICAgaW50ZXJuYWwgaWQsICAgICAgZm91cmNjICovIFwK PiA+ICsJeyBERV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9WSURFTzIsIE1BTElEUF9JRCgw LCAwKSwgRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMCB9LCBcCj4gPiArCXsgREVfVklERU8xIHwgREVf R1JBUEhJQ1MxIHwgREVfVklERU8yLCBNQUxJRFBfSUQoMCwgMSksIERSTV9GT1JNQVRfQUJHUjIx MDEwMTAgfSwgXAo+ID4gKwl7IERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX1ZJREVPMiwg TUFMSURQX0lEKDAsIDIpLCBEUk1fRk9STUFUX1JHQkExMDEwMTAyIH0sIFwKPiA+ICsJeyBERV9W SURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9WSURFTzIsIE1BTElEUF9JRCgwLCAzKSwgRFJNX0ZP Uk1BVF9CR1JBMTAxMDEwMiB9LCBcCj4gPiArCXsgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwg REVfVklERU8yIHwgREVfU01BUlQsIE1BTElEUF9JRCgxLCAwKSwgRFJNX0ZPUk1BVF9BUkdCODg4 OCB9LCBcCj4gPiArCXsgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8yIHwgREVf U01BUlQsIE1BTElEUF9JRCgxLCAxKSwgRFJNX0ZPUk1BVF9BQkdSODg4OCB9LCBcCj4gPiArCXsg REVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8yIHwgREVfU01BUlQsIE1BTElEUF9J RCgxLCAyKSwgRFJNX0ZPUk1BVF9SR0JBODg4OCB9LCBcCj4gPiArCXsgREVfVklERU8xIHwgREVf R1JBUEhJQ1MxIHwgREVfVklERU8yIHwgREVfU01BUlQsIE1BTElEUF9JRCgxLCAzKSwgRFJNX0ZP Uk1BVF9CR1JBODg4OCB9LCBcCj4gPiArCXsgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVf VklERU8yIHwgREVfU01BUlQsIE1BTElEUF9JRCgyLCAwKSwgRFJNX0ZPUk1BVF9YUkdCODg4OCB9 LCBcCj4gPiArCXsgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8yIHwgREVfU01B UlQsIE1BTElEUF9JRCgyLCAxKSwgRFJNX0ZPUk1BVF9YQkdSODg4OCB9LCBcCj4gPiArCXsgREVf VklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8yIHwgREVfU01BUlQsIE1BTElEUF9JRCgy LCAyKSwgRFJNX0ZPUk1BVF9SR0JYODg4OCB9LCBcCj4gPiArCXsgREVfVklERU8xIHwgREVfR1JB UEhJQ1MxIHwgREVfVklERU8yIHwgREVfU01BUlQsIE1BTElEUF9JRCgyLCAzKSwgRFJNX0ZPUk1B VF9CR1JYODg4OCB9LCBcCj4gPiArCXsgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklE RU8yLCBNQUxJRFBfSUQoMywgMCksIERSTV9GT1JNQVRfUkdCODg4IH0sIFwKPiA+ICsJeyBERV9W SURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9WSURFTzIsIE1BTElEUF9JRCgzLCAxKSwgRFJNX0ZP Uk1BVF9CR1I4ODggfSwgXAo+ID4gKwl7IERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX1ZJ REVPMiwgTUFMSURQX0lEKDQsIDApLCBEUk1fRk9STUFUX1JHQkE1NTUxIH0sIFwKPiA+ICsJeyBE RV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9WSURFTzIsIE1BTElEUF9JRCg0LCAxKSwgRFJN X0ZPUk1BVF9BQkdSMTU1NSB9LCBcCj4gPiArCXsgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwg REVfVklERU8yLCBNQUxJRFBfSUQoNCwgMiksIERSTV9GT1JNQVRfUkdCNTY1IH0sCVwKPiA+ICsJ eyBERV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9WSURFTzIsIE1BTElEUF9JRCg0LCAzKSwg RFJNX0ZPUk1BVF9CR1I1NjUgfSwJXAo+ID4gKwl7IERFX1ZJREVPMSB8IERFX1ZJREVPMiwgTUFM SURQX0lEKDUsIDIpLCBEUk1fRk9STUFUX1lVWVYgfSwgXAo+ID4gKwl7IERFX1ZJREVPMSB8IERF X1ZJREVPMiwgTUFMSURQX0lEKDUsIDMpLCBEUk1fRk9STUFUX1VZVlkgfSwgXAo+ID4gKwl7IERF X1ZJREVPMSB8IERFX1ZJREVPMiwgTUFMSURQX0lEKDUsIDYpLCBEUk1fRk9STUFUX05WMTIgfSwg XAo+ID4gKwl7IERFX1ZJREVPMSB8IERFX1ZJREVPMiwgTUFMSURQX0lEKDUsIDcpLCBEUk1fRk9S TUFUX1lVVjQyMCB9Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBtYWxpZHBfaW5wdXRf Zm9ybWF0IG1hbGlkcDU1MF9kZV9mb3JtYXRzW10gPSB7Cj4gPiArCU1BTElEUF9DT01NT05fRk9S TUFUUywKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWFsaWRwX2lucHV0 X2Zvcm1hdCBtYWxpZHA2NTBfZGVfZm9ybWF0c1tdID0gewo+ID4gKwlNQUxJRFBfQ09NTU9OX0ZP Uk1BVFMsCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG1hbGlkcF9sYXll ciBtYWxpZHA1MDBfbGF5ZXJzW10gPSB7Cj4gPiArCXsgREVfVklERU8xLCBNQUxJRFA1MDBfREVf TFZfQkFTRSwgTUFMSURQNTAwX0RFX0xWX1BUUl9CQVNFIH0sCj4gPiArCXsgREVfR1JBUEhJQ1Mx LCBNQUxJRFA1MDBfREVfTEcxX0JBU0UsIE1BTElEUDUwMF9ERV9MRzFfUFRSX0JBU0UgfSwKPiA+ ICsJeyBERV9HUkFQSElDUzIsIE1BTElEUDUwMF9ERV9MRzJfQkFTRSwgTUFMSURQNTAwX0RFX0xH Ml9QVFJfQkFTRSB9LAo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBtYWxp ZHBfbGF5ZXIgbWFsaWRwNTUwX2xheWVyc1tdID0gewo+ID4gKwl7IERFX1ZJREVPMSwgTUFMSURQ NTUwX0RFX0xWMV9CQVNFLCBNQUxJRFA1NTBfREVfTFYxX1BUUl9CQVNFIH0sCj4gPiArCXsgREVf R1JBUEhJQ1MxLCBNQUxJRFA1NTBfREVfTEdfQkFTRSwgTUFMSURQNTUwX0RFX0xHX1BUUl9CQVNF IH0sCj4gPiArCXsgREVfVklERU8yLCBNQUxJRFA1NTBfREVfTFYyX0JBU0UsIE1BTElEUDU1MF9E RV9MVjJfUFRSX0JBU0UgfSwKPiA+ICsJeyBERV9TTUFSVCwgTUFMSURQNTUwX0RFX0xTX0JBU0Us IE1BTElEUDU1MF9ERV9MU19QVFJfQkFTRSB9LAo+ID4gK307Cj4gPiArCj4gPiArI2RlZmluZSBN QUxJRFBfREVfREVGQVVMVF9QUkVGRVRDSF9TVEFSVAk1Cj4gPiArCj4gPiAraW50IG1hbGlkcDUw MF9xdWVyeV9odyhzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYpCj4gPiArewo+ID4gKwl1 MzIgY29uZiA9IG1hbGlkcF9od19yZWFkKGh3ZGV2LCBNQUxJRFA1MDBfQ09ORklHX0lEKTsKPiA+ ICsJdTggbG5fc2l6ZV9tdWx0ID0gKDEgPDwgKChjb25mID4+IDQpICYgMHgxKSk7Cj4gPiArCj4g PiArCWlmIChjb25mICYgTUFMSURQX0hXX0ZFQVRVUkVfRFMpCj4gPiArCQlod2Rldi0+ZmVhdHVy ZXMgfD0gTUFMSURQX0hXX0ZFQVRVUkVfRFM7Cj4gPiArCWh3ZGV2LT5taW5fbGluZV9zaXplID0g MjsKPiA+ICsJaHdkZXYtPm1heF9saW5lX3NpemUgPSBTWl8ySyAqIGxuX3NpemVfbXVsdDsKPiA+ ICsJaHdkZXYtPnJvdGF0aW9uX21lbW9yeVswXSA9IFNaXzFLICogNjQgKiBsbl9zaXplX211bHQ7 Cj4gPiArCWh3ZGV2LT5yb3RhdGlvbl9tZW1vcnlbMV0gPSAwOyAvKiBubyBzZWNvbmQgcm90YXRp b24gbWVtb3J5IGJhbmsgKi8KPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4g K3ZvaWQgbWFsaWRwNTAwX2VudGVyX2NvbmZpZ19tb2RlKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNl ICpod2RldikKPiA+ICt7Cj4gPiArCXUzMiBzdGF0dXMsIGNvdW50ID0gMzA7Cj4gPiArCj4gPiAr CW1hbGlkcF9od19zZXRiaXRzKGh3ZGV2LCBNQUxJRFA1MDBfRENfQ09ORklHX1JFUSwgTUFMSURQ NTAwX0RDX0NPTlRST0wpOwo+ID4gKwl3aGlsZSAoY291bnQpIHsKPiA+ICsJCXN0YXR1cyA9IG1h bGlkcF9od19yZWFkKGh3ZGV2LCBod2Rldi0+bWFwLmRjX2Jhc2UgKyBNQUxJRFBfUkVHX1NUQVRV Uyk7Cj4gPiArCQlpZiAoKHN0YXR1cyAmIE1BTElEUDUwMF9EQ19DT05GSUdfUkVRKSA9PSBNQUxJ RFA1MDBfRENfQ09ORklHX1JFUSkKPiA+ICsJCQlicmVhazsKPiA+ICsJCS8qCj4gPiArCQkgKiBl bnRlcmluZyBjb25maWcgbW9kZSBjYW4gdGFrZSBhcyBsb25nIGFzIHRoZSByZW5kZXJpbmcKPiA+ ICsJCSAqIG9mIGEgZnVsbCBmcmFtZSwgaGVuY2UgdGhlIGxvbmcgc2xlZXAgaGVyZQo+ID4gKwkJ ICovCj4gPiArCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMTAwMDApOwo+ID4gKwkJY291bnQtLTsKPiA+ ICsJfQo+ID4gKwlXQVJOKGNvdW50ID09IDAsICJ0aW1lb3V0IHdoaWxlIGVudGVyaW5nIGNvbmZp ZyBtb2RlIik7Cj4gPiArfQo+ID4gKwo+ID4gK3ZvaWQgbWFsaWRwNTAwX2xlYXZlX2NvbmZpZ19t b2RlKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldikKPiA+ICt7Cj4gPiArCXUzMiBzdGF0 dXMsIGNvdW50ID0gMzA7Cj4gPiArCj4gPiArCW1hbGlkcF9od19jbGVhcmJpdHMoaHdkZXYsIE1B TElEUDUwMF9EQ19DT05GSUdfUkVRLCBNQUxJRFA1MDBfRENfQ09OVFJPTCk7Cj4gPiArCXdoaWxl IChjb3VudCkgewo+ID4gKwkJc3RhdHVzID0gbWFsaWRwX2h3X3JlYWQoaHdkZXYsIGh3ZGV2LT5t YXAuZGNfYmFzZSArIE1BTElEUF9SRUdfU1RBVFVTKTsKPiA+ICsJCWlmICgoc3RhdHVzICYgTUFM SURQNTAwX0RDX0NPTkZJR19SRVEpID09IDApCj4gPiArCQkJYnJlYWs7Cj4gPiArCQl1c2xlZXBf cmFuZ2UoMTAwLCAxMDAwKTsKPiA+ICsJCWNvdW50LS07Cj4gPiArCX0KPiA+ICsJV0FSTihjb3Vu dCA9PSAwLCAidGltZW91dCB3aGlsZSBsZWF2aW5nIGNvbmZpZyBtb2RlIik7Cj4gPiArfQo+ID4g Kwo+ID4gK2Jvb2wgbWFsaWRwNTAwX2luX2NvbmZpZ19tb2RlKHN0cnVjdCBtYWxpZHBfaHdfZGV2 aWNlICpod2RldikKPiA+ICt7Cj4gPiArCXUzMiBzdGF0dXM7Cj4gPiArCj4gPiArCXN0YXR1cyA9 IG1hbGlkcF9od19yZWFkKGh3ZGV2LCBod2Rldi0+bWFwLmRjX2Jhc2UgKyBNQUxJRFBfUkVHX1NU QVRVUyk7Cj4gPiArCWlmICgoc3RhdHVzICYgTUFMSURQNTAwX0RDX0NPTkZJR19SRVEpID09IE1B TElEUDUwMF9EQ19DT05GSUdfUkVRKQo+ID4gKwkJcmV0dXJuIHRydWU7Cj4gPiArCj4gPiArCXJl dHVybiBmYWxzZTsKPiA+ICt9Cj4gPiArCj4gPiArdm9pZCBtYWxpZHA1MDBfc2V0X2NvbmZpZ192 YWxpZChzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYpCj4gPiArewo+ID4gKwltYWxpZHBf aHdfc2V0Yml0cyhod2RldiwgTUFMSURQX0NGR19WQUxJRCwgTUFMSURQNTAwX0NPTkZJR19WQUxJ RCk7Cj4gPiArfQo+ID4gKwo+ID4gK3ZvaWQgbWFsaWRwNTAwX21vZGVzZXQoc3RydWN0IG1hbGlk cF9od19kZXZpY2UgKmh3ZGV2LCBzdHJ1Y3QgdmlkZW9tb2RlICptb2RlKQo+ID4gK3sKPiA+ICsJ dTMyIHZhbCA9IDA7Cj4gPiArCj4gPiArCW1hbGlkcF9od19jbGVhcmJpdHMoaHdkZXYsIE1BTElE UDUwMF9EQ19DTEVBUl9NQVNLLCBNQUxJRFA1MDBfRENfQ09OVFJPTCk7Cj4gPiArCWlmIChtb2Rl LT5mbGFncyAmIERJU1BMQVlfRkxBR1NfSFNZTkNfSElHSCkKPiA+ICsJCXZhbCB8PSBNQUxJRFA1 MDBfSFNZTkNQT0w7Cj4gPiArCWlmIChtb2RlLT5mbGFncyAmIERJU1BMQVlfRkxBR1NfVlNZTkNf SElHSCkKPiA+ICsJCXZhbCB8PSBNQUxJRFA1MDBfVlNZTkNQT0w7Cj4gPiArCXZhbCB8PSBNQUxJ RFBfREVfREVGQVVMVF9QUkVGRVRDSF9TVEFSVDsKPiA+ICsJbWFsaWRwX2h3X3NldGJpdHMoaHdk ZXYsIHZhbCwgTUFMSURQNTAwX0RDX0NPTlRST0wpOwo+ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiBN YWxpLURQNTAwIGVuY29kZXMgdGhlIGJhY2tncm91bmQgY29sb3IgbGlrZSB0aGlzOgo+ID4gKwkg KiAgICAtIHJlZCAgIEAgTUFMSURQNTAwX0JHTkRfQ09MT1JbMTI6MF0KPiA+ICsJICogICAgLSBn cmVlbiBAIE1BTElEUDUwMF9CR05EX0NPTE9SWzI3OjE2XQo+ID4gKwkgKiAgICAtIGJsdWUgIEAg KE1BTElEUDUwMF9CR05EX0NPTE9SICsgNClbMTI6MF0KPiA+ICsJICovCj4gPiArCXZhbCA9ICgo TUFMSURQX0JHTkRfQ09MT1JfRyAmIDB4ZmZmKSA8PCAxNikgfAo+ID4gKwkgICAgICAoTUFMSURQ X0JHTkRfQ09MT1JfUiAmIDB4ZmZmKTsKPiA+ICsJbWFsaWRwX2h3X3dyaXRlKGh3ZGV2LCB2YWws IE1BTElEUDUwMF9CR05EX0NPTE9SKTsKPiA+ICsJbWFsaWRwX2h3X3dyaXRlKGh3ZGV2LCBNQUxJ RFBfQkdORF9DT0xPUl9CLCBNQUxJRFA1MDBfQkdORF9DT0xPUiArIDQpOwo+ID4gKwo+ID4gKwl2 YWwgPSBNQUxJRFBfREVfSF9GUk9OVFBPUkNIKG1vZGUtPmhmcm9udF9wb3JjaCkgfAo+ID4gKwkJ TUFMSURQX0RFX0hfQkFDS1BPUkNIKG1vZGUtPmhiYWNrX3BvcmNoKTsKPiA+ICsJbWFsaWRwX2h3 X3dyaXRlKGh3ZGV2LCB2YWwsIE1BTElEUDUwMF9USU1JTkdTX0JBU0UgKyBNQUxJRFBfREVfSF9U SU1JTkdTKTsKPiA+ICsKPiA+ICsJdmFsID0gTUFMSURQNTAwX0RFX1ZfRlJPTlRQT1JDSChtb2Rl LT52ZnJvbnRfcG9yY2gpIHwKPiA+ICsJCU1BTElEUF9ERV9WX0JBQ0tQT1JDSChtb2RlLT52YmFj a19wb3JjaCk7Cj4gPiArCW1hbGlkcF9od193cml0ZShod2RldiwgdmFsLCBNQUxJRFA1MDBfVElN SU5HU19CQVNFICsgTUFMSURQX0RFX1ZfVElNSU5HUyk7Cj4gPiArCj4gPiArCXZhbCA9IE1BTElE UF9ERV9IX1NZTkNXSURUSChtb2RlLT5oc3luY19sZW4pIHwKPiA+ICsJCU1BTElEUF9ERV9WX1NZ TkNXSURUSChtb2RlLT52c3luY19sZW4pOwo+ID4gKwltYWxpZHBfaHdfd3JpdGUoaHdkZXYsIHZh bCwgTUFMSURQNTAwX1RJTUlOR1NfQkFTRSArIE1BTElEUF9ERV9TWU5DX1dJRFRIKTsKPiA+ICsK PiA+ICsJdmFsID0gTUFMSURQX0RFX0hfQUNUSVZFKG1vZGUtPmhhY3RpdmUpIHwgTUFMSURQX0RF X1ZfQUNUSVZFKG1vZGUtPnZhY3RpdmUpOwo+ID4gKwltYWxpZHBfaHdfd3JpdGUoaHdkZXYsIHZh bCwgTUFMSURQNTAwX1RJTUlOR1NfQkFTRSArIE1BTElEUF9ERV9IVl9BQ1RJVkUpOwo+ID4gKwo+ ID4gKwlpZiAobW9kZS0+ZmxhZ3MgJiBESVNQTEFZX0ZMQUdTX0lOVEVSTEFDRUQpCj4gPiArCQlt YWxpZHBfaHdfc2V0Yml0cyhod2RldiwgTUFMSURQX0RJU1BfRlVOQ19JTEFDRUQsIE1BTElEUF9E RV9ESVNQTEFZX0ZVTkMpOwo+ID4gKwllbHNlCj4gPiArCQltYWxpZHBfaHdfY2xlYXJiaXRzKGh3 ZGV2LCBNQUxJRFBfRElTUF9GVU5DX0lMQUNFRCwgTUFMSURQX0RFX0RJU1BMQVlfRlVOQyk7Cj4g PiArfQo+ID4gKwo+ID4gK2ludCBtYWxpZHA1MDBfcm90bWVtX3JlcXVpcmVkKHN0cnVjdCBtYWxp ZHBfaHdfZGV2aWNlICpod2RldiwgdTE2IHcsIHUxNiBoLCB1MzIgZm10KQo+ID4gK3sKPiA+ICsJ dW5zaWduZWQgaW50IGRlcHRoOwo+ID4gKwlpbnQgYnBwOwo+ID4gKwo+ID4gKwkvKiBSR0I4ODgg b3IgQkdSODg4IGNhbid0IGJlIHJvdGF0ZWQgKi8KPiA+ICsJaWYgKChmbXQgPT0gRFJNX0ZPUk1B VF9SR0I4ODgpIHx8IChmbXQgPT0gRFJNX0ZPUk1BVF9CR1I4ODgpKQo+ID4gKwkJcmV0dXJuIC1F SU5WQUw7Cj4gPiArCj4gPiArCS8qCj4gPiArCSAqIEVhY2ggbGF5ZXIgbmVlZHMgZW5vdWdoIHJv dGF0aW9uIG1lbW9yeSB0byBmaXQgOCBsaW5lcwo+ID4gKwkgKiB3b3J0aCBvZiBwaXhlbCBkYXRh LiBSZXF1aXJlZCBzaXplIGlzIHRoZW46Cj4gPiArCSAqICAgIHNpemUgPSAocm90YXRlZF93aWR0 aCAqIGJwcCAqIDggKSAvIDg7Cj4gPiArCSAqLwo+ID4gKwlkcm1fZmJfZ2V0X2JwcF9kZXB0aChm bXQsICZkZXB0aCwgJmJwcCk7Cj4gPiArCj4gPiArCXJldHVybiB3ICogYnBwOwo+ID4gK30KPiA+ ICsKPiA+ICtzdGF0aWMgaW50IG1hbGlkcDU1MF9xdWVyeV9odyhzdHJ1Y3QgbWFsaWRwX2h3X2Rl dmljZSAqaHdkZXYpCj4gPiArewo+ID4gKwl1MzIgY29uZiA9IG1hbGlkcF9od19yZWFkKGh3ZGV2 LCBNQUxJRFA1NTBfQ09ORklHX0lEKTsKPiA+ICsJdTggbG5fc2l6ZSA9IChjb25mID4+IDQpICYg MHgzLCByc2l6ZTsKPiA+ICsKPiA+ICsJaWYgKGNvbmYgJiBNQUxJRFBfSFdfRkVBVFVSRV9EUykK PiA+ICsJCWh3ZGV2LT5mZWF0dXJlcyB8PSBNQUxJRFBfSFdfRkVBVFVSRV9EUzsKPiA+ICsKPiA+ ICsJaHdkZXYtPm1pbl9saW5lX3NpemUgPSAyOwo+ID4gKwo+ID4gKwlzd2l0Y2ggKGxuX3NpemUp IHsKPiA+ICsJY2FzZSAwOgo+ID4gKwkJaHdkZXYtPm1heF9saW5lX3NpemUgPSBTWl8ySzsKPiA+ ICsJCS8qIHR3byBiYW5rcyBvZiA2NEtCIGZvciByb3RhdGlvbiBtZW1vcnkgKi8KPiA+ICsJCXJz aXplID0gNjQ7Cj4gPiArCQlicmVhazsKPiA+ICsJY2FzZSAxOgo+ID4gKwkJaHdkZXYtPm1heF9s aW5lX3NpemUgPSBTWl80SzsKPiA+ICsJCS8qIHR3byBiYW5rcyBvZiAxMjhLQiBmb3Igcm90YXRp b24gbWVtb3J5ICovCj4gPiArCQlyc2l6ZSA9IDEyODsKPiA+ICsJCWJyZWFrOwo+ID4gKwljYXNl IDI6Cj4gPiArCQlod2Rldi0+bWF4X2xpbmVfc2l6ZSA9IDEyODA7Cj4gPiArCQkvKiB0d28gYmFu a3Mgb2YgNDBLQiBmb3Igcm90YXRpb24gbWVtb3J5ICovCj4gPiArCQlyc2l6ZSA9IDQwOwo+ID4g KwkJYnJlYWs7Cj4gPiArCWNhc2UgMzoKPiA+ICsJCS8qIHJlc2VydmVkIHZhbHVlICovCj4gPiAr CQlod2Rldi0+bWF4X2xpbmVfc2l6ZSA9IDA7Cj4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ICsJ fQo+ID4gKwo+ID4gKwlod2Rldi0+cm90YXRpb25fbWVtb3J5WzBdID0gaHdkZXYtPnJvdGF0aW9u X21lbW9yeVsxXSA9IHJzaXplICogU1pfMUs7Cj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsK PiA+ICt2b2lkIG1hbGlkcDU1MF9lbnRlcl9jb25maWdfbW9kZShzdHJ1Y3QgbWFsaWRwX2h3X2Rl dmljZSAqaHdkZXYpCj4gPiArewo+ID4gKwl1MzIgc3RhdHVzLCBjb3VudCA9IDMwOwo+ID4gKwo+ ID4gKwltYWxpZHBfaHdfc2V0Yml0cyhod2RldiwgTUFMSURQNTUwX0RDX0NPTkZJR19SRVEsIE1B TElEUDU1MF9EQ19DT05UUk9MKTsKPiA+ICsJd2hpbGUgKGNvdW50KSB7Cj4gPiArCQlzdGF0dXMg PSBtYWxpZHBfaHdfcmVhZChod2RldiwgaHdkZXYtPm1hcC5kY19iYXNlICsgTUFMSURQX1JFR19T VEFUVVMpOwo+ID4gKwkJaWYgKChzdGF0dXMgJiBNQUxJRFA1NTBfRENfQ09ORklHX1JFUSkgPT0g TUFMSURQNTUwX0RDX0NPTkZJR19SRVEpCj4gPiArCQkJYnJlYWs7Cj4gPiArCQl1c2xlZXBfcmFu Z2UoMTAwLCAxMDAwKTsKPiA+ICsJCWNvdW50LS07Cj4gPiArCX0KPiA+ICsJV0FSTihjb3VudCA9 PSAwLCAidGltZW91dCB3aGlsZSBlbnRlcmluZyBjb25maWcgbW9kZSIpOwo+ID4gK30KPiA+ICsK PiA+ICt2b2lkIG1hbGlkcDU1MF9sZWF2ZV9jb25maWdfbW9kZShzdHJ1Y3QgbWFsaWRwX2h3X2Rl dmljZSAqaHdkZXYpCj4gPiArewo+ID4gKwl1MzIgc3RhdHVzLCBjb3VudCA9IDMwOwo+ID4gKwo+ ID4gKwltYWxpZHBfaHdfY2xlYXJiaXRzKGh3ZGV2LCBNQUxJRFA1NTBfRENfQ09ORklHX1JFUSwg TUFMSURQNTUwX0RDX0NPTlRST0wpOwo+ID4gKwl3aGlsZSAoY291bnQpIHsKPiA+ICsJCXN0YXR1 cyA9IG1hbGlkcF9od19yZWFkKGh3ZGV2LCBod2Rldi0+bWFwLmRjX2Jhc2UgKyBNQUxJRFBfUkVH X1NUQVRVUyk7Cj4gPiArCQlpZiAoKHN0YXR1cyAmIE1BTElEUDU1MF9EQ19DT05GSUdfUkVRKSA9 PSAwKQo+ID4gKwkJCWJyZWFrOwo+ID4gKwkJdXNsZWVwX3JhbmdlKDEwMCwgMTAwMCk7Cj4gPiAr CQljb3VudC0tOwo+ID4gKwl9Cj4gPiArCVdBUk4oY291bnQgPT0gMCwgInRpbWVvdXQgd2hpbGUg bGVhdmluZyBjb25maWcgbW9kZSIpOwo+ID4gK30KPiA+ICsKPiA+ICtib29sIG1hbGlkcDU1MF9p bl9jb25maWdfbW9kZShzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYpCj4gPiArewo+ID4g Kwl1MzIgc3RhdHVzOwo+ID4gKwo+ID4gKwlzdGF0dXMgPSBtYWxpZHBfaHdfcmVhZChod2Rldiwg aHdkZXYtPm1hcC5kY19iYXNlICsgTUFMSURQX1JFR19TVEFUVVMpOwo+ID4gKwlpZiAoKHN0YXR1 cyAmIE1BTElEUDU1MF9EQ19DT05GSUdfUkVRKSA9PSBNQUxJRFA1NTBfRENfQ09ORklHX1JFUSkK PiA+ICsJCXJldHVybiB0cnVlOwo+ID4gKwo+ID4gKwlyZXR1cm4gZmFsc2U7Cj4gPiArfQo+ID4g Kwo+ID4gK3ZvaWQgbWFsaWRwNTUwX3NldF9jb25maWdfdmFsaWQoc3RydWN0IG1hbGlkcF9od19k ZXZpY2UgKmh3ZGV2KQo+ID4gK3sKPiA+ICsJbWFsaWRwX2h3X3NldGJpdHMoaHdkZXYsIE1BTElE UF9DRkdfVkFMSUQsIE1BTElEUDU1MF9DT05GSUdfVkFMSUQpOwo+ID4gK30KPiA+ICsKPiA+ICt2 b2lkIG1hbGlkcDU1MF9tb2Rlc2V0KHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2Rldiwgc3Ry dWN0IHZpZGVvbW9kZSAqbW9kZSkKPiA+ICt7Cj4gPiArCXUzMiB2YWwgPSBNQUxJRFBfREVfREVG QVVMVF9QUkVGRVRDSF9TVEFSVDsKPiA+ICsKPiA+ICsJbWFsaWRwX2h3X3dyaXRlKGh3ZGV2LCB2 YWwsIE1BTElEUDU1MF9ERV9DT05UUk9MKTsKPiA+ICsJLyoKPiA+ICsJICogTWFsaS1EUDU1MCBh bmQgTWFsaS1EUDY1MCBlbmNvZGUgdGhlIGJhY2tncm91bmQgY29sb3IgbGlrZSB0aGlzOgo+ID4g KwkgKiAgIC0gcmVkICAgQCBNQUxJRFA1NTBfREVfQkdORF9DT0xPUlsyMzoxNl0KPiA+ICsJICog ICAtIGdyZWVuIEAgTUFMSURQNTUwX0RFX0JHTkRfQ09MT1JbMTU6OF0KPiA+ICsJICogICAtIGJs dWUgIEAgTUFMSURQNTUwX0RFX0JHTkRfQ09MT1JbNzowXQo+ID4gKwkgKgo+ID4gKwkgKiBXZSBu ZWVkIHRvIHRydW5jYXRlIHRoZSBsZWFzdCBzaWduaWZpY2FudCA0IGJpdHMgZnJvbSB0aGUgZGVm YXVsdAo+ID4gKwkgKiBNQUxJRFBfQkdORF9DT0xPUl94IHZhbHVlcwo+ID4gKwkgKi8KPiA+ICsJ dmFsID0gKCgoTUFMSURQX0JHTkRfQ09MT1JfUiA+PiA0KSAmIDB4ZmYpIDw8IDE2KSB8Cj4gPiAr CSAgICAgICgoKE1BTElEUF9CR05EX0NPTE9SX0cgPj4gNCkgJiAweGZmKSA8PCA4KSB8Cj4gPiAr CSAgICAgICgoTUFMSURQX0JHTkRfQ09MT1JfQiA+PiA0KSAmIDB4ZmYpOwo+ID4gKwltYWxpZHBf aHdfd3JpdGUoaHdkZXYsIHZhbCwgTUFMSURQNTUwX0RFX0JHTkRfQ09MT1IpOwo+ID4gKwo+ID4g Kwl2YWwgPSBNQUxJRFBfREVfSF9GUk9OVFBPUkNIKG1vZGUtPmhmcm9udF9wb3JjaCkgfAo+ID4g KwkJTUFMSURQX0RFX0hfQkFDS1BPUkNIKG1vZGUtPmhiYWNrX3BvcmNoKTsKPiA+ICsJbWFsaWRw X2h3X3dyaXRlKGh3ZGV2LCB2YWwsIE1BTElEUDU1MF9USU1JTkdTX0JBU0UgKyBNQUxJRFBfREVf SF9USU1JTkdTKTsKPiA+ICsKPiA+ICsJdmFsID0gTUFMSURQNTUwX0RFX1ZfRlJPTlRQT1JDSCht b2RlLT52ZnJvbnRfcG9yY2gpIHwKPiA+ICsJCU1BTElEUF9ERV9WX0JBQ0tQT1JDSChtb2RlLT52 YmFja19wb3JjaCk7Cj4gPiArCW1hbGlkcF9od193cml0ZShod2RldiwgdmFsLCBNQUxJRFA1NTBf VElNSU5HU19CQVNFICsgTUFMSURQX0RFX1ZfVElNSU5HUyk7Cj4gPiArCj4gPiArCXZhbCA9IE1B TElEUF9ERV9IX1NZTkNXSURUSChtb2RlLT5oc3luY19sZW4pIHwKPiA+ICsJCU1BTElEUF9ERV9W X1NZTkNXSURUSChtb2RlLT52c3luY19sZW4pOwo+ID4gKwlpZiAobW9kZS0+ZmxhZ3MgJiBESVNQ TEFZX0ZMQUdTX0hTWU5DX0hJR0gpCj4gPiArCQl2YWwgfD0gTUFMSURQNTUwX0hTWU5DUE9MOwo+ ID4gKwlpZiAobW9kZS0+ZmxhZ3MgJiBESVNQTEFZX0ZMQUdTX1ZTWU5DX0hJR0gpCj4gPiArCQl2 YWwgfD0gTUFMSURQNTUwX1ZTWU5DUE9MOwo+ID4gKwltYWxpZHBfaHdfd3JpdGUoaHdkZXYsIHZh bCwgTUFMSURQNTUwX1RJTUlOR1NfQkFTRSArIE1BTElEUF9ERV9TWU5DX1dJRFRIKTsKPiA+ICsK PiA+ICsJdmFsID0gTUFMSURQX0RFX0hfQUNUSVZFKG1vZGUtPmhhY3RpdmUpIHwgTUFMSURQX0RF X1ZfQUNUSVZFKG1vZGUtPnZhY3RpdmUpOwo+ID4gKwltYWxpZHBfaHdfd3JpdGUoaHdkZXYsIHZh bCwgTUFMSURQNTUwX1RJTUlOR1NfQkFTRSArIE1BTElEUF9ERV9IVl9BQ1RJVkUpOwo+ID4gKwo+ ID4gKwlpZiAobW9kZS0+ZmxhZ3MgJiBESVNQTEFZX0ZMQUdTX0lOVEVSTEFDRUQpCj4gPiArCQlt YWxpZHBfaHdfc2V0Yml0cyhod2RldiwgTUFMSURQX0RJU1BfRlVOQ19JTEFDRUQsIE1BTElEUF9E RV9ESVNQTEFZX0ZVTkMpOwo+ID4gKwllbHNlCj4gPiArCQltYWxpZHBfaHdfY2xlYXJiaXRzKGh3 ZGV2LCBNQUxJRFBfRElTUF9GVU5DX0lMQUNFRCwgTUFMSURQX0RFX0RJU1BMQVlfRlVOQyk7Cj4g PiArfQo+ID4gKwo+ID4gK2ludCBtYWxpZHA1NTBfcm90bWVtX3JlcXVpcmVkKHN0cnVjdCBtYWxp ZHBfaHdfZGV2aWNlICpod2RldiwgdTE2IHcsIHUxNiBoLCB1MzIgZm10KQo+ID4gK3sKPiA+ICsJ dTMyIGJ5dGVzX3Blcl9jb2w7Cj4gPiArCj4gPiArCS8qIHJhdyBSR0I4ODggb3IgQkdSODg4IGNh bid0IGJlIHJvdGF0ZWQgKi8KPiA+ICsJaWYgKChmbXQgPT0gRFJNX0ZPUk1BVF9SR0I4ODgpIHx8 IChmbXQgPT0gRFJNX0ZPUk1BVF9CR1I4ODgpKQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiAr Cj4gPiArCXN3aXRjaCAoZm10KSB7Cj4gPiArCS8qIDggbGluZXMgYXQgNCBieXRlcyBwZXIgcGl4 ZWwgKi8KPiA+ICsJY2FzZSBEUk1fRk9STUFUX0FSR0IyMTAxMDEwOgo+ID4gKwljYXNlIERSTV9G T1JNQVRfQUJHUjIxMDEwMTA6Cj4gPiArCWNhc2UgRFJNX0ZPUk1BVF9SR0JBMTAxMDEwMjoKPiA+ ICsJY2FzZSBEUk1fRk9STUFUX0JHUkExMDEwMTAyOgo+ID4gKwljYXNlIERSTV9GT1JNQVRfQVJH Qjg4ODg6Cj4gPiArCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKPiA+ICsJY2FzZSBEUk1fRk9S TUFUX1JHQkE4ODg4Ogo+ID4gKwljYXNlIERSTV9GT1JNQVRfQkdSQTg4ODg6Cj4gPiArCWNhc2Ug RFJNX0ZPUk1BVF9YUkdCODg4ODoKPiA+ICsJY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4Ogo+ID4g KwljYXNlIERSTV9GT1JNQVRfUkdCWDg4ODg6Cj4gPiArCWNhc2UgRFJNX0ZPUk1BVF9CR1JYODg4 ODoKPiA+ICsJY2FzZSBEUk1fRk9STUFUX1JHQjg4ODoKPiA+ICsJY2FzZSBEUk1fRk9STUFUX0JH Ujg4ODoKPiA+ICsJLyogMTYgbGluZXMgYXQgMiBieXRlcyBwZXIgcGl4ZWwgKi8KPiA+ICsJY2Fz ZSBEUk1fRk9STUFUX1JHQkE1NTUxOgo+ID4gKwljYXNlIERSTV9GT1JNQVRfQUJHUjE1NTU6Cj4g PiArCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6Cj4gPiArCWNhc2UgRFJNX0ZPUk1BVF9CR1I1NjU6 Cj4gPiArCWNhc2UgRFJNX0ZPUk1BVF9VWVZZOgo+ID4gKwljYXNlIERSTV9GT1JNQVRfWVVZVjoK PiA+ICsJCWJ5dGVzX3Blcl9jb2wgPSAzMjsKPiA+ICsJCWJyZWFrOwo+ID4gKwkvKiAxNiBsaW5l cyBhdCAxLjUgYnl0ZXMgcGVyIHBpeGVsICovCj4gPiArCWNhc2UgRFJNX0ZPUk1BVF9OVjEyOgo+ ID4gKwljYXNlIERSTV9GT1JNQVRfWVVWNDIwOgo+ID4gKwkJYnl0ZXNfcGVyX2NvbCA9IDI0Owo+ ID4gKwkJYnJlYWs7Cj4gPiArCWRlZmF1bHQ6Cj4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ICsJ fQo+ID4gKwo+ID4gKwlyZXR1cm4gdyAqIGJ5dGVzX3Blcl9jb2w7Cj4gPiArfQo+ID4gKwo+ID4g K3N0YXRpYyBpbnQgbWFsaWRwNjUwX3F1ZXJ5X2h3KHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpo d2RldikKPiA+ICt7Cj4gPiArCXUzMiBjb25mID0gbWFsaWRwX2h3X3JlYWQoaHdkZXYsIE1BTElE UDU1MF9DT05GSUdfSUQpOwo+ID4gKwl1OCBsbl9zaXplID0gKGNvbmYgPj4gNCkgJiAweDMsIHJz aXplOwo+ID4gKwo+ID4gKwlpZiAoY29uZiAmIE1BTElEUF9IV19GRUFUVVJFX0RTKQo+ID4gKwkJ aHdkZXYtPmZlYXR1cmVzIHw9IE1BTElEUF9IV19GRUFUVVJFX0RTOwo+ID4gKwo+ID4gKwlod2Rl di0+bWluX2xpbmVfc2l6ZSA9IDQ7Cj4gPiArCj4gPiArCXN3aXRjaCAobG5fc2l6ZSkgewo+ID4g KwljYXNlIDA6Cj4gPiArCWNhc2UgMjoKPiA+ICsJCS8qIHJlc2VydmVkIHZhbHVlcyAqLwo+ID4g KwkJaHdkZXYtPm1heF9saW5lX3NpemUgPSAwOwo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiAr CWNhc2UgMToKPiA+ICsJCWh3ZGV2LT5tYXhfbGluZV9zaXplID0gU1pfNEs7Cj4gPiArCQkvKiB0 d28gYmFua3Mgb2YgMTI4S0IgZm9yIHJvdGF0aW9uIG1lbW9yeSAqLwo+ID4gKwkJcnNpemUgPSAx Mjg7Cj4gPiArCQlicmVhazsKPiA+ICsJY2FzZSAzOgo+ID4gKwkJaHdkZXYtPm1heF9saW5lX3Np emUgPSAyNTYwOwo+ID4gKwkJLyogdHdvIGJhbmtzIG9mIDgwS0IgZm9yIHJvdGF0aW9uIG1lbW9y eSAqLwo+ID4gKwkJcnNpemUgPSA4MDsKPiA+ICsJfQo+ID4gKwo+ID4gKwlod2Rldi0+cm90YXRp b25fbWVtb3J5WzBdID0gaHdkZXYtPnJvdGF0aW9uX21lbW9yeVsxXSA9IHJzaXplICogU1pfMUs7 Cj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtjb25zdCBzdHJ1Y3QgbWFsaWRwX2h3 X2RldmljZSBtYWxpZHBfZGV2aWNlW01BTElEUF9NQVhfREVWSUNFU10gPSB7Cj4gPiArCVtNQUxJ RFBfNTAwXSA9IHsKPiA+ICsJCS5tYXAgPSB7Cj4gPiArCQkJLnNlX2Jhc2UgPSBNQUxJRFA1MDBf U0VfQkFTRSwKPiA+ICsJCQkuZGNfYmFzZSA9IE1BTElEUDUwMF9EQ19CQVNFLAo+ID4gKwkJCS5k ZV9pcnFfbWFwID0gewo+ID4gKwkJCQkuaXJxX21hc2sgPSBNQUxJRFBfREVfSVJRX1VOREVSUlVO IHwKPiA+ICsJCQkJCSAgICBNQUxJRFA1MDBfREVfSVJRX0FYSV9FUlIgfAo+ID4gKwkJCQkJICAg IE1BTElEUDUwMF9ERV9JUlFfVlNZTkMgfAo+ID4gKwkJCQkJICAgIE1BTElEUDUwMF9ERV9JUlFf R0xPQkFMLAo+ID4gKwkJCQkudnN5bmNfaXJxID0gTUFMSURQNTAwX0RFX0lSUV9WU1lOQywKPiA+ ICsJCQl9LAo+ID4gKwkJCS5zZV9pcnFfbWFwID0gewo+ID4gKwkJCQkuaXJxX21hc2sgPSBNQUxJ RFA1MDBfU0VfSVJRX0NPTkZfTU9ERSwKPiA+ICsJCQkJLnZzeW5jX2lycSA9IDAsCj4gPiArCQkJ fSwKPiA+ICsJCQkuZGNfaXJxX21hcCA9IHsKPiA+ICsJCQkJLmlycV9tYXNrID0gTUFMSURQNTAw X0RFX0lSUV9DT05GX1ZBTElELAo+ID4gKwkJCQkudnN5bmNfaXJxID0gTUFMSURQNTAwX0RFX0lS UV9DT05GX1ZBTElELAo+ID4gKwkJCX0sCj4gPiArCQkJLmxheWVycyA9IG1hbGlkcDUwMF9sYXll cnMsCj4gPiArCQkJLm5fbGF5ZXJzID0gQVJSQVlfU0laRShtYWxpZHA1MDBfbGF5ZXJzKSwKPiA+ ICsJCQkuaW5wdXRfZm9ybWF0cyA9IG1hbGlkcDUwMF9kZV9mb3JtYXRzLAo+ID4gKwkJCS5uX2lu cHV0X2Zvcm1hdHMgPSBBUlJBWV9TSVpFKG1hbGlkcDUwMF9kZV9mb3JtYXRzKSwKPiA+ICsJCQku b3V0X2RlcHRoX2Jhc2UgPSBNQUxJRFA1MDBfT1VUUFVUX0RFUFRILAo+ID4gKwkJCS5mZWF0dXJl cyA9IDAsCS8qIG5vIENMRUFSSVJRIHJlZ2lzdGVyICovCj4gPiArCQl9LAo+ID4gKwkJLnF1ZXJ5 X2h3ID0gbWFsaWRwNTAwX3F1ZXJ5X2h3LAo+ID4gKwkJLmVudGVyX2NvbmZpZ19tb2RlID0gbWFs aWRwNTAwX2VudGVyX2NvbmZpZ19tb2RlLAo+ID4gKwkJLmxlYXZlX2NvbmZpZ19tb2RlID0gbWFs aWRwNTAwX2xlYXZlX2NvbmZpZ19tb2RlLAo+ID4gKwkJLmluX2NvbmZpZ19tb2RlID0gbWFsaWRw NTAwX2luX2NvbmZpZ19tb2RlLAo+ID4gKwkJLnNldF9jb25maWdfdmFsaWQgPSBtYWxpZHA1MDBf c2V0X2NvbmZpZ192YWxpZCwKPiA+ICsJCS5tb2Rlc2V0ID0gbWFsaWRwNTAwX21vZGVzZXQsCj4g PiArCQkucm90bWVtX3JlcXVpcmVkID0gbWFsaWRwNTAwX3JvdG1lbV9yZXF1aXJlZCwKPiA+ICsJ fSwKPiA+ICsJW01BTElEUF81NTBdID0gewo+ID4gKwkJLm1hcCA9IHsKPiA+ICsJCQkuc2VfYmFz ZSA9IE1BTElEUDU1MF9TRV9CQVNFLAo+ID4gKwkJCS5kY19iYXNlID0gTUFMSURQNTUwX0RDX0JB U0UsCj4gPiArCQkJLmRlX2lycV9tYXAgPSB7Cj4gPiArCQkJCS5pcnFfbWFzayA9IE1BTElEUF9E RV9JUlFfVU5ERVJSVU4gfAo+ID4gKwkJCQkJICAgIE1BTElEUDU1MF9ERV9JUlFfVlNZTkMsCj4g PiArCQkJCS52c3luY19pcnEgPSBNQUxJRFA1NTBfREVfSVJRX1ZTWU5DLAo+ID4gKwkJCX0sCj4g PiArCQkJLnNlX2lycV9tYXAgPSB7Cj4gPiArCQkJCS5pcnFfbWFzayA9IE1BTElEUDU1MF9TRV9J UlFfRU9XIHwKPiA+ICsJCQkJCSAgICBNQUxJRFA1NTBfU0VfSVJRX0FYSV9FUlIsCj4gPiArCQkJ fSwKPiA+ICsJCQkuZGNfaXJxX21hcCA9IHsKPiA+ICsJCQkJLmlycV9tYXNrID0gTUFMSURQNTUw X0RDX0lSUV9DT05GX1ZBTElELAo+ID4gKwkJCQkudnN5bmNfaXJxID0gTUFMSURQNTUwX0RDX0lS UV9DT05GX1ZBTElELAo+ID4gKwkJCX0sCj4gPiArCQkJLmxheWVycyA9IG1hbGlkcDU1MF9sYXll cnMsCj4gPiArCQkJLm5fbGF5ZXJzID0gQVJSQVlfU0laRShtYWxpZHA1NTBfbGF5ZXJzKSwKPiA+ ICsJCQkuaW5wdXRfZm9ybWF0cyA9IG1hbGlkcDU1MF9kZV9mb3JtYXRzLAo+ID4gKwkJCS5uX2lu cHV0X2Zvcm1hdHMgPSBBUlJBWV9TSVpFKG1hbGlkcDU1MF9kZV9mb3JtYXRzKSwKPiA+ICsJCQku b3V0X2RlcHRoX2Jhc2UgPSBNQUxJRFA1NTBfREVfT1VUUFVUX0RFUFRILAo+ID4gKwkJCS5mZWF0 dXJlcyA9IE1BTElEUF9SRUdNQVBfSEFTX0NMRUFSSVJRLAo+ID4gKwkJfSwKPiA+ICsJCS5xdWVy eV9odyA9IG1hbGlkcDU1MF9xdWVyeV9odywKPiA+ICsJCS5lbnRlcl9jb25maWdfbW9kZSA9IG1h bGlkcDU1MF9lbnRlcl9jb25maWdfbW9kZSwKPiA+ICsJCS5sZWF2ZV9jb25maWdfbW9kZSA9IG1h bGlkcDU1MF9sZWF2ZV9jb25maWdfbW9kZSwKPiA+ICsJCS5pbl9jb25maWdfbW9kZSA9IG1hbGlk cDU1MF9pbl9jb25maWdfbW9kZSwKPiA+ICsJCS5zZXRfY29uZmlnX3ZhbGlkID0gbWFsaWRwNTUw X3NldF9jb25maWdfdmFsaWQsCj4gPiArCQkubW9kZXNldCA9IG1hbGlkcDU1MF9tb2Rlc2V0LAo+ ID4gKwkJLnJvdG1lbV9yZXF1aXJlZCA9IG1hbGlkcDU1MF9yb3RtZW1fcmVxdWlyZWQsCj4gPiAr CX0sCj4gPiArCVtNQUxJRFBfNjUwXSA9IHsKPiA+ICsJCS5tYXAgPSB7Cj4gPiArCQkJLnNlX2Jh c2UgPSBNQUxJRFA1NTBfU0VfQkFTRSwKPiA+ICsJCQkuZGNfYmFzZSA9IE1BTElEUDU1MF9EQ19C QVNFLAo+ID4gKwkJCS5kZV9pcnFfbWFwID0gewo+ID4gKwkJCQkuaXJxX21hc2sgPSBNQUxJRFBf REVfSVJRX1VOREVSUlVOIHwKPiA+ICsJCQkJCSAgICBNQUxJRFA2NTBfREVfSVJRX0RSSUZUIHwK PiA+ICsJCQkJCSAgICBNQUxJRFA1NTBfREVfSVJRX1ZTWU5DLAo+ID4gKwkJCQkudnN5bmNfaXJx ID0gTUFMSURQNTUwX0RFX0lSUV9WU1lOQywKPiA+ICsJCQl9LAo+ID4gKwkJCS5zZV9pcnFfbWFw ID0gewo+ID4gKwkJCQkuaXJxX21hc2sgPSBNQUxJRFA1NTBfU0VfSVJRX0VPVyB8Cj4gPiArCQkJ CQkgICAgTUFMSURQNTUwX1NFX0lSUV9BWElfRVJSLAo+ID4gKwkJCX0sCj4gPiArCQkJLmRjX2ly cV9tYXAgPSB7Cj4gPiArCQkJCS5pcnFfbWFzayA9IE1BTElEUDU1MF9EQ19JUlFfQ09ORl9WQUxJ RCwKPiA+ICsJCQkJLnZzeW5jX2lycSA9IE1BTElEUDU1MF9EQ19JUlFfQ09ORl9WQUxJRCwKPiA+ ICsJCQl9LAo+ID4gKwkJCS5sYXllcnMgPSBtYWxpZHA1NTBfbGF5ZXJzLAo+ID4gKwkJCS5uX2xh eWVycyA9IEFSUkFZX1NJWkUobWFsaWRwNTUwX2xheWVycyksCj4gPiArCQkJLmlucHV0X2Zvcm1h dHMgPSBtYWxpZHA2NTBfZGVfZm9ybWF0cywKPiA+ICsJCQkubl9pbnB1dF9mb3JtYXRzID0gQVJS QVlfU0laRShtYWxpZHA2NTBfZGVfZm9ybWF0cyksCj4gPiArCQkJLm91dF9kZXB0aF9iYXNlID0g TUFMSURQNTUwX0RFX09VVFBVVF9ERVBUSCwKPiA+ICsJCQkuZmVhdHVyZXMgPSBNQUxJRFBfUkVH TUFQX0hBU19DTEVBUklSUSwKPiA+ICsJCX0sCj4gPiArCQkucXVlcnlfaHcgPSBtYWxpZHA2NTBf cXVlcnlfaHcsCj4gPiArCQkuZW50ZXJfY29uZmlnX21vZGUgPSBtYWxpZHA1NTBfZW50ZXJfY29u ZmlnX21vZGUsCj4gPiArCQkubGVhdmVfY29uZmlnX21vZGUgPSBtYWxpZHA1NTBfbGVhdmVfY29u ZmlnX21vZGUsCj4gPiArCQkuaW5fY29uZmlnX21vZGUgPSBtYWxpZHA1NTBfaW5fY29uZmlnX21v ZGUsCj4gPiArCQkuc2V0X2NvbmZpZ192YWxpZCA9IG1hbGlkcDU1MF9zZXRfY29uZmlnX3ZhbGlk LAo+ID4gKwkJLm1vZGVzZXQgPSBtYWxpZHA1NTBfbW9kZXNldCwKPiA+ICsJCS5yb3RtZW1fcmVx dWlyZWQgPSBtYWxpZHA1NTBfcm90bWVtX3JlcXVpcmVkLAo+ID4gKwl9LAo+ID4gK307Cj4gPiAr Cj4gPiArdTggbWFsaWRwX2h3X2dldF9mb3JtYXRfaWQoY29uc3Qgc3RydWN0IG1hbGlkcF9od19y ZWdtYXAgKm1hcCwKPiA+ICsJCQkgICB1OCBsYXllcl9pZCwgdTMyIGZvcm1hdCkKPiA+ICt7Cj4g PiArCXU4IGk7Cj4gPiArCj4gPiArCWZvciAoaSA9IDA7IGkgPCBtYXAtPm5faW5wdXRfZm9ybWF0 czsgaSsrKSB7Cj4gPiArCQlpZiAoKChtYXAtPmlucHV0X2Zvcm1hdHNbaV0ubGF5ZXIgJiBsYXll cl9pZCkgPT0gbGF5ZXJfaWQpICYmCj4gPiArCQkgICAgKG1hcC0+aW5wdXRfZm9ybWF0c1tpXS5m b3JtYXQgPT0gZm9ybWF0KSkKPiA+ICsJCQlyZXR1cm4gbWFwLT5pbnB1dF9mb3JtYXRzW2ldLmlk Owo+ID4gKwl9Cj4gPiArCj4gPiArCXJldHVybiAodTgpLTE7Cj4gPiArfQo+ID4gKwo+ID4gKwo+ ID4gK3UzMiBtYWxpZHBfaHdfcmVhZChzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYsIHUz MiByZWcpCj4gPiArewo+ID4gKwl1MzIgdmFsdWUgPSByZWFkbChod2Rldi0+cmVncyArIHJlZyk7 Cj4gPiArCXJldHVybiB2YWx1ZTsKPiA+ICt9Cj4gPiArCj4gPiArdm9pZCBtYWxpZHBfaHdfd3Jp dGUoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2LCB1MzIgdmFsdWUsIHUzMiByZWcpCj4g PiArewo+ID4gKwl3cml0ZWwodmFsdWUsIGh3ZGV2LT5yZWdzICsgcmVnKTsKPiA+ICt9Cj4gPiAr Cj4gPiArdm9pZCBtYWxpZHBfaHdfc2V0Yml0cyhzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdk ZXYsIHUzMiBtYXNrLCB1MzIgcmVnKQo+ID4gK3sKPiA+ICsJdTMyIGRhdGEgPSBtYWxpZHBfaHdf cmVhZChod2RldiwgcmVnKTsKPiA+ICsKPiA+ICsJZGF0YSB8PSBtYXNrOwo+ID4gKwltYWxpZHBf aHdfd3JpdGUoaHdkZXYsIGRhdGEsIHJlZyk7Cj4gPiArfQo+ID4gKwo+ID4gK3ZvaWQgbWFsaWRw X2h3X2NsZWFyYml0cyhzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYsIHUzMiBtYXNrLCB1 MzIgcmVnKQo+ID4gK3sKPiA+ICsJdTMyIGRhdGEgPSBtYWxpZHBfaHdfcmVhZChod2RldiwgcmVn KTsKPiA+ICsKPiA+ICsJZGF0YSAmPSB+bWFzazsKPiA+ICsJbWFsaWRwX2h3X3dyaXRlKGh3ZGV2 LCBkYXRhLCByZWcpOwo+ID4gK30KPiA+ICsKPiA+ICt2b2lkIG1hbGlkcF9od19jbGVhcl9pcnEo c3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2LCB1OCBibG9jaywgdTMyIGlycSkKPiA+ICt7 Cj4gPiArCXUzMiBiYXNlID0gMDsKPiA+ICsKPiA+ICsJc3dpdGNoIChibG9jaykgewo+ID4gKwlj YXNlIE1BTElEUF9ERV9CTE9DSzoKPiA+ICsJCWJhc2UgPSAwOwo+ID4gKwkJYnJlYWs7Cj4gPiAr CWNhc2UgTUFMSURQX1NFX0JMT0NLOgo+ID4gKwkJYmFzZSA9IGh3ZGV2LT5tYXAuc2VfYmFzZTsK PiA+ICsJCWJyZWFrOwo+ID4gKwljYXNlIE1BTElEUF9EQ19CTE9DSzoKPiA+ICsJCWJhc2UgPSBo d2Rldi0+bWFwLmRjX2Jhc2U7Cj4gPiArCQlicmVhazsKPiA+ICsJfQo+ID4gKwo+ID4gKwlpZiAo aHdkZXYtPm1hcC5mZWF0dXJlcyAmIE1BTElEUF9SRUdNQVBfSEFTX0NMRUFSSVJRKQo+ID4gKwkJ bWFsaWRwX2h3X3dyaXRlKGh3ZGV2LCBpcnEsIGJhc2UgKyBNQUxJRFBfUkVHX0NMRUFSSVJRKTsK PiA+ICsJZWxzZQo+ID4gKwkJbWFsaWRwX2h3X3dyaXRlKGh3ZGV2LCBpcnEsIGJhc2UgKyBNQUxJ RFBfUkVHX1NUQVRVUyk7Cj4gPiArfQo+ID4gKwo+ID4gK3ZvaWQgbWFsaWRwX2h3X2Rpc2FibGVf aXJxKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldiwgdTggYmxvY2ssIHUzMiBpcnEpCj4g PiArewo+ID4gKwl1MzIgYmFzZSA9IDA7Cj4gPiArCj4gPiArCXN3aXRjaCAoYmxvY2spIHsKPiA+ ICsJY2FzZSBNQUxJRFBfREVfQkxPQ0s6Cj4gPiArCQliYXNlID0gMDsKPiA+ICsJCWJyZWFrOwo+ ID4gKwljYXNlIE1BTElEUF9TRV9CTE9DSzoKPiA+ICsJCWJhc2UgPSBod2Rldi0+bWFwLnNlX2Jh c2U7Cj4gPiArCQlicmVhazsKPiA+ICsJY2FzZSBNQUxJRFBfRENfQkxPQ0s6Cj4gPiArCQliYXNl ID0gaHdkZXYtPm1hcC5kY19iYXNlOwo+ID4gKwkJYnJlYWs7Cj4gPiArCX0KPiA+ICsKPiA+ICsJ bWFsaWRwX2h3X2NsZWFyYml0cyhod2RldiwgaXJxLCBiYXNlICsgTUFMSURQX1JFR19NQVNLSVJR KTsKPiA+ICt9Cj4gPiArCj4gPiArdm9pZCBtYWxpZHBfaHdfZW5hYmxlX2lycShzdHJ1Y3QgbWFs aWRwX2h3X2RldmljZSAqaHdkZXYsIHU4IGJsb2NrLCB1MzIgaXJxKQo+ID4gK3sKPiA+ICsJdTMy IGJhc2UgPSAwOwo+ID4gKwo+ID4gKwlzd2l0Y2ggKGJsb2NrKSB7Cj4gPiArCWNhc2UgTUFMSURQ X0RFX0JMT0NLOgo+ID4gKwkJYmFzZSA9IDA7Cj4gPiArCQlicmVhazsKPiA+ICsJY2FzZSBNQUxJ RFBfU0VfQkxPQ0s6Cj4gPiArCQliYXNlID0gaHdkZXYtPm1hcC5zZV9iYXNlOwo+ID4gKwkJYnJl YWs7Cj4gPiArCWNhc2UgTUFMSURQX0RDX0JMT0NLOgo+ID4gKwkJYmFzZSA9IGh3ZGV2LT5tYXAu ZGNfYmFzZTsKPiA+ICsJCWJyZWFrOwo+ID4gKwl9Cj4gPiArCj4gPiArCW1hbGlkcF9od19zZXRi aXRzKGh3ZGV2LCBpcnEsIGJhc2UgKyBNQUxJRFBfUkVHX01BU0tJUlEpOwo+ID4gK30KPiA+ICsK PiA+ICtzdGF0aWMgaXJxcmV0dXJuX3QgbWFsaWRwX2RlX2lycShpbnQgaXJxLCB2b2lkICphcmcp Cj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gYXJnOwo+ID4gKwlzdHJ1Y3Qg bWFsaWRwX2RybSAqbWFsaWRwID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiA+ICsJc3RydWN0IG1hbGlk cF9od19kZXZpY2UgKmh3ZGV2Owo+ID4gKwljb25zdCBzdHJ1Y3QgbWFsaWRwX2lycV9tYXAgKmRl Owo+ID4gKwl1MzIgc3RhdHVzLCBtYXNrLCBkY19zdGF0dXM7Cj4gPiArCWlycXJldHVybl90IHJl dCA9IElSUV9OT05FOwo+ID4gKwo+ID4gKwlpZiAoIWRybS0+ZGV2X3ByaXZhdGUpCj4gPiArCQly ZXR1cm4gSVJRX0hBTkRMRUQ7Cj4gPiArCj4gPiArCWh3ZGV2ID0gbWFsaWRwLT5kZXY7Cj4gPiAr CWRlID0gJmh3ZGV2LT5tYXAuZGVfaXJxX21hcDsKPiA+ICsKPiA+ICsJLyogZmlyc3QgaGFuZGxl IHRoZSBjb25maWcgdmFsaWQgSVJRICovCj4gPiArCWRjX3N0YXR1cyA9IG1hbGlkcF9od19yZWFk KGh3ZGV2LCBod2Rldi0+bWFwLmRjX2Jhc2UgKyBNQUxJRFBfUkVHX1NUQVRVUyk7Cj4gPiArCWlm IChkY19zdGF0dXMgJiBod2Rldi0+bWFwLmRjX2lycV9tYXAudnN5bmNfaXJxKSB7Cj4gPiArCQkv KiB3ZSBoYXZlIGEgcGFnZSBmbGlwIGV2ZW50ICovCj4gPiArCQlhdG9taWNfc2V0KCZtYWxpZHAt PmNvbmZpZ192YWxpZCwgMSk7Cj4gPiArCQltYWxpZHBfaHdfY2xlYXJfaXJxKGh3ZGV2LCBNQUxJ RFBfRENfQkxPQ0ssIGRjX3N0YXR1cyk7Cj4gPiArCQlyZXQgPSBJUlFfV0FLRV9USFJFQUQ7Cj4g PiArCX0KPiA+ICsKPiA+ICsJc3RhdHVzID0gbWFsaWRwX2h3X3JlYWQoaHdkZXYsIE1BTElEUF9S RUdfU1RBVFVTKTsKPiA+ICsJaWYgKCEoc3RhdHVzICYgZGUtPmlycV9tYXNrKSkKPiA+ICsJCXJl dHVybiByZXQ7Cj4gPiArCj4gPiArCW1hc2sgPSBtYWxpZHBfaHdfcmVhZChod2RldiwgTUFMSURQ X1JFR19NQVNLSVJRKTsKPiA+ICsJc3RhdHVzICY9IG1hc2s7Cj4gPiArCWlmIChzdGF0dXMgJiBk ZS0+dnN5bmNfaXJxKQo+ID4gKwkJZHJtX2NydGNfaGFuZGxlX3ZibGFuaygmbWFsaWRwLT5jcnRj KTsKPiA+ICsKPiA+ICsJbWFsaWRwX2h3X2NsZWFyX2lycShod2RldiwgTUFMSURQX0RFX0JMT0NL LCBzdGF0dXMpOwo+ID4gKwo+ID4gKwlyZXR1cm4gKHJldCA9PSBJUlFfTk9ORSkgPyBJUlFfSEFO RExFRCA6IHJldDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGlycXJldHVybl90IG1hbGlkcF9k ZV9pcnFfdGhyZWFkX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqYXJnKQo+ID4gK3sKPiA+ICsJc3Ry dWN0IGRybV9kZXZpY2UgKmRybSA9IGFyZzsKPiA+ICsJc3RydWN0IG1hbGlkcF9kcm0gKm1hbGlk cCA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gPiArCj4gPiArCXdha2VfdXAoJm1hbGlkcC0+d3EpOwo+ ID4gKwo+ID4gKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cj4gPiArfQo+ID4gKwo+ID4gK2ludCBtYWxp ZHBfZGVfaXJxX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgaW50IGlycSkKPiA+ICt7Cj4g PiArCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBkcm0tPmRldl9wcml2YXRlOwo+ID4gKwlz dHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYgPSBtYWxpZHAtPmRldjsKPiA+ICsJaW50IHJl dDsKPiA+ICsKPiA+ICsJLyogZW5zdXJlIGludGVycnVwdHMgYXJlIGRpc2FibGVkICovCj4gPiAr CW1hbGlkcF9od19kaXNhYmxlX2lycShod2RldiwgTUFMSURQX0RDX0JMT0NLLCB+MCk7Cj4gPiAr CW1hbGlkcF9od19jbGVhcl9pcnEoaHdkZXYsIE1BTElEUF9EQ19CTE9DSywgfjApOwo+ID4gKwlt YWxpZHBfaHdfZGlzYWJsZV9pcnEoaHdkZXYsIE1BTElEUF9ERV9CTE9DSywgfjApOwo+ID4gKwlt YWxpZHBfaHdfY2xlYXJfaXJxKGh3ZGV2LCBNQUxJRFBfREVfQkxPQ0ssIH4wKTsKPiA+ICsKPiA+ ICsJcmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShkcm0tPmRldiwgaXJxLCBtYWxpZHBf ZGVfaXJxLAo+ID4gKwkJCQkJbWFsaWRwX2RlX2lycV90aHJlYWRfaGFuZGxlciwKPiA+ICsJCQkJ CUlSUUZfU0hBUkVELCAibWFsaWRwLWRlIiwgZHJtKTsKPiA+ICsJaWYgKHJldCA8IDApIHsKPiA+ ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGluc3RhbGwgREUgSVJRIGhhbmRsZXJcbiIpOwo+ID4g KwkJcmV0dXJuIHJldDsKPiA+ICsJfQo+ID4gKwo+ID4gKwkvKiBmaXJzdCBlbmFibGUgdGhlIERD IGJsb2NrIElSUXMgKi8KPiA+ICsJbWFsaWRwX2h3X2VuYWJsZV9pcnEoaHdkZXYsIE1BTElEUF9E Q19CTE9DSywKPiA+ICsJCQkgICAgIGh3ZGV2LT5tYXAuZGNfaXJxX21hcC5pcnFfbWFzayk7Cj4g PiArCj4gPiArCS8qIG5vdyBlbmFibGUgdGhlIERFIGJsb2NrIElSUXMgKi8KPiA+ICsJbWFsaWRw X2h3X2VuYWJsZV9pcnEoaHdkZXYsIE1BTElEUF9ERV9CTE9DSywKPiA+ICsJCQkgICAgIGh3ZGV2 LT5tYXAuZGVfaXJxX21hcC5pcnFfbWFzayk7Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4gK30K PiA+ICsKPiA+ICt2b2lkIG1hbGlkcF9kZV9pcnFfY2xlYW51cChzdHJ1Y3QgZHJtX2RldmljZSAq ZHJtKQo+ID4gK3sKPiA+ICsJc3RydWN0IG1hbGlkcF9kcm0gKm1hbGlkcCA9IGRybS0+ZGV2X3By aXZhdGU7Cj4gPiArCXN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldiA9IG1hbGlkcC0+ZGV2 Owo+ID4gKwo+ID4gKwltYWxpZHBfaHdfZGlzYWJsZV9pcnEoaHdkZXYsIE1BTElEUF9ERV9CTE9D SywKPiA+ICsJCQkgICAgICBod2Rldi0+bWFwLmRlX2lycV9tYXAuaXJxX21hc2spOwo+ID4gKwlt YWxpZHBfaHdfZGlzYWJsZV9pcnEoaHdkZXYsIE1BTElEUF9EQ19CTE9DSywKPiA+ICsJCQkgICAg ICBod2Rldi0+bWFwLmRjX2lycV9tYXAuaXJxX21hc2spOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0 aWMgaXJxcmV0dXJuX3QgbWFsaWRwX3NlX2lycShpbnQgaXJxLCB2b2lkICphcmcpCj4gPiArewo+ ID4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gYXJnOwo+ID4gKwlzdHJ1Y3QgbWFsaWRwX2Ry bSAqbWFsaWRwID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiA+ICsJc3RydWN0IG1hbGlkcF9od19kZXZp Y2UgKmh3ZGV2ID0gbWFsaWRwLT5kZXY7Cj4gPiArCXUzMiBzdGF0dXMsIG1hc2s7Cj4gPiArCj4g PiArCXN0YXR1cyA9IG1hbGlkcF9od19yZWFkKGh3ZGV2LCBod2Rldi0+bWFwLnNlX2Jhc2UgKyBN QUxJRFBfUkVHX1NUQVRVUyk7Cj4gPiArCWlmICghKHN0YXR1cyAmIGh3ZGV2LT5tYXAuc2VfaXJx X21hcC5pcnFfbWFzaykpCj4gPiArCQlyZXR1cm4gSVJRX05PTkU7Cj4gPiArCj4gPiArCW1hc2sg PSBtYWxpZHBfaHdfcmVhZChod2RldiwgaHdkZXYtPm1hcC5zZV9iYXNlICsgTUFMSURQX1JFR19N QVNLSVJRKTsKPiA+ICsJc3RhdHVzID0gbWFsaWRwX2h3X3JlYWQoaHdkZXYsIGh3ZGV2LT5tYXAu c2VfYmFzZSArIE1BTElEUF9SRUdfU1RBVFVTKTsKPiA+ICsJc3RhdHVzICY9IG1hc2s7Cj4gPiAr CS8qIFRvRG86IHN0YXR1cyBkZWNvZGluZyBhbmQgZmlyaW5nIHVwIG9mIFZTWU5DIGFuZCBwYWdl IGZsaXAgZXZlbnRzICovCj4gPiArCj4gPiArCW1hbGlkcF9od19jbGVhcl9pcnEoaHdkZXYsIE1B TElEUF9TRV9CTE9DSywgc3RhdHVzKTsKPiA+ICsJLyogcmV0dXJuIElSUV9XQUtFX1RIUkVBRDsg Ki8KPiA+ICsJcmV0dXJuIElSUV9IQU5ETEVEOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaXJx cmV0dXJuX3QgbWFsaWRwX3NlX2lycV90aHJlYWRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcp Cj4gPiArewo+ID4gKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cj4gPiArfQo+ID4gKwo+ID4gK2ludCBt YWxpZHBfc2VfaXJxX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgaW50IGlycSkKPiA+ICt7 Cj4gPiArCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBkcm0tPmRldl9wcml2YXRlOwo+ID4g KwlzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYgPSBtYWxpZHAtPmRldjsKPiA+ICsJaW50 IHJldDsKPiA+ICsKPiA+ICsJLyogZW5zdXJlIGludGVycnVwdHMgYXJlIGRpc2FibGVkICovCj4g PiArCW1hbGlkcF9od19kaXNhYmxlX2lycShod2RldiwgTUFMSURQX1NFX0JMT0NLLCB+MCk7Cj4g PiArCW1hbGlkcF9od19jbGVhcl9pcnEoaHdkZXYsIE1BTElEUF9TRV9CTE9DSywgfjApOwo+ID4g Kwo+ID4gKwlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRybS0+ZGV2LCBpcnEsIG1h bGlkcF9zZV9pcnEsCj4gPiArCQkJCQltYWxpZHBfc2VfaXJxX3RocmVhZF9oYW5kbGVyLAo+ID4g KwkJCQkJSVJRRl9TSEFSRUQsICJtYWxpZHAtc2UiLCBkcm0pOwo+ID4gKwlpZiAocmV0IDwgMCkg ewo+ID4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5zdGFsbCBTRSBJUlEgaGFuZGxlclxuIik7 Cj4gPiArCQlyZXR1cm4gcmV0Owo+ID4gKwl9Cj4gPiArCj4gPiArCW1hbGlkcF9od19lbmFibGVf aXJxKGh3ZGV2LCBNQUxJRFBfU0VfQkxPQ0ssCj4gPiArCQkJICAgICBod2Rldi0+bWFwLnNlX2ly cV9tYXAuaXJxX21hc2spOwo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiAr dm9pZCBtYWxpZHBfc2VfaXJxX2NsZWFudXAoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKPiA+ICt7 Cj4gPiArCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBkcm0tPmRldl9wcml2YXRlOwo+ID4g KwlzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYgPSBtYWxpZHAtPmRldjsKPiA+ICsKPiA+ ICsJbWFsaWRwX2h3X2Rpc2FibGVfaXJxKGh3ZGV2LCBNQUxJRFBfU0VfQkxPQ0ssCj4gPiArCQkJ ICAgICAgaHdkZXYtPm1hcC5zZV9pcnFfbWFwLmlycV9tYXNrKTsKPiA+ICt9Cj4gPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfaHcuaCBiL2RyaXZlcnMvZ3B1L2RybS9h cm0vbWFsaWRwX2h3LmgKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAw Li4xMjBhMDc5Cj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYXJt L21hbGlkcF9ody5oCj4gPiBAQCAtMCwwICsxLDE5MiBAQAo+ID4gKy8qCj4gPiArICoKPiA+ICsg KiAoQykgQ09QWVJJR0hUIDIwMTMtMjAxNiBBUk0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZl ZC4KPiA+ICsgKgo+ID4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlIGFuZCBpcyBw cm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQo+ID4gKyAqIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUKPiA+ICsgKiBGb3VuZGF0aW9uLCBhbmQgYW55IHVzZSBieSB5b3Ugb2YgdGhpcyBwcm9ncmFt IGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zCj4gPiArICogb2Ygc3VjaCBHTlUgbGljZW5jZS4KPiA+ ICsgKgo+ID4gKyAqIEFSTSBNYWxpIERQIGhhcmR3YXJlIG1hbmlwdWxhdGlvbiByb3V0aW5lcy4K PiA+ICsgKi8KPiA+ICsKPiA+ICsjaWZuZGVmIF9fTUFMSURQX0hXX0hfXwo+ID4gKyNkZWZpbmUg X19NQUxJRFBfSFdfSF9fCj4gPiArCj4gPiArI2luY2x1ZGUgPGRybS9kcm1fZm91cmNjLmg+Cj4g PiArI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgo+ID4gKwo+ID4gK3N0cnVjdCB2aWRlb21vZGU7 Cj4gPiArc3RydWN0IGNsazsKPiA+ICsKPiA+ICsvKiBNYWxpIERQIElQIGJsb2NrcyAqLwo+ID4g K2VudW0gewo+ID4gKwlNQUxJRFBfREVfQkxPQ0sgPSAwLAo+ID4gKwlNQUxJRFBfU0VfQkxPQ0ss Cj4gPiArCU1BTElEUF9EQ19CTE9DSwo+ID4gK307Cj4gPiArCj4gPiArLyogTWFsaSBEUCBsYXll ciBJRHMgKi8KPiA+ICtlbnVtIHsKPiA+ICsJREVfVklERU8xID0gQklUKDApLAo+ID4gKwlERV9H UkFQSElDUzEgPSBCSVQoMSksCj4gPiArCURFX0dSQVBISUNTMiA9IEJJVCgyKSwgLyogdXNlZCBv bmx5IGluIERQNTAwICovCj4gPiArCURFX1ZJREVPMiA9IEJJVCgzKSwKPiA+ICsJREVfU01BUlQg PSBCSVQoNCksCj4gPiArfTsKPiA+ICsKPiA+ICtzdHJ1Y3QgbWFsaWRwX2lucHV0X2Zvcm1hdCB7 Cj4gPiArCXU4IGxheWVyOwkJLyogYml0bWFzayBvZiBsYXllcnMgc3VwcG9ydGluZyBpdCAqLwo+ ID4gKwl1OCBpZDsJCQkvKiB1c2VkIGludGVybmFsbHkgKi8KPiA+ICsJdTMyIGZvcm1hdDsJCS8q IERSTSBmb3VyY2MgKi8KPiA+ICt9Owo+ID4gKwo+ID4gKy8qCj4gPiArICogaGlkZSB0aGUgZGlm ZmVyZW5jZXMgYmV0d2VlbiByZWdpc3RlciBtYXBzCj4gPiArICogYnkgdXNpbmcgYSBjb21tb24g c3RydWN0dXJlIHRvIGhvbGQgdGhlCj4gPiArICogYmFzZSByZWdpc3RlciBvZmZzZXRzCj4gPiAr ICovCj4gPiArCj4gPiArc3RydWN0IG1hbGlkcF9pcnFfbWFwIHsKPiA+ICsJdTMyIGlycV9tYXNr OwkJLyogbWFzayBvZiBJUlFzIHRoYXQgY2FuIGJlIGVuYWJsZWQgaW4gdGhlIGJsb2NrICovCj4g PiArCXUzMiB2c3luY19pcnE7CQkvKiBJUlEgYml0IHVzZWQgZm9yIHNpZ25hbGluZyBkdXJpbmcg VlNZTkMgKi8KPiA+ICt9Owo+ID4gKwo+ID4gK3N0cnVjdCBtYWxpZHBfbGF5ZXIgewo+ID4gKwl1 OCBpZDsJCQkvKiBsYXllciBJRCAqLwo+ID4gKwl1MTYgYmFzZTsJCS8qIGFkZHJlc3Mgb2Zmc2V0 IGZvciB0aGUgcmVnaXN0ZXIgYmFuayAqLwo+ID4gKwl1MTYgcHRyOwkJLyogYWRkcmVzcyBvZmZz ZXQgZm9yIHRoZSBwb2ludGVyIHJlZ2lzdGVyICovCj4gPiArfTsKPiA+ICsKPiA+ICsvKiByZWdt YXAgZmVhdHVyZXMgKi8KPiA+ICsjZGVmaW5lIE1BTElEUF9SRUdNQVBfSEFTX0NMRUFSSVJRCSgx IDw8IDApCj4gPiArCj4gPiArc3RydWN0IG1hbGlkcF9od19yZWdtYXAgewo+ID4gKwkvKiBhZGRy ZXNzIG9mZnNldCBvZiB0aGUgREUgcmVnaXN0ZXIgYmFuayAqLwo+ID4gKwkvKiBpcyBhbHdheXMg MHgwMDAwICovCj4gPiArCS8qIGFkZHJlc3Mgb2Zmc2V0IG9mIHRoZSBTRSByZWdpc3RlcnMgYmFu ayAqLwo+ID4gKwljb25zdCB1MTYgc2VfYmFzZTsKPiA+ICsJLyogYWRkcmVzcyBvZmZzZXQgb2Yg dGhlIERDIHJlZ2lzdGVycyBiYW5rICovCj4gPiArCWNvbnN0IHUxNiBkY19iYXNlOwo+ID4gKwo+ ID4gKwljb25zdCBzdHJ1Y3QgbWFsaWRwX2lycV9tYXAgZGVfaXJxX21hcDsKPiA+ICsJY29uc3Qg c3RydWN0IG1hbGlkcF9pcnFfbWFwIHNlX2lycV9tYXA7Cj4gPiArCWNvbnN0IHN0cnVjdCBtYWxp ZHBfaXJxX21hcCBkY19pcnFfbWFwOwo+ID4gKwo+ID4gKwkvKiBsaXN0IG9mIHN1cHBvcnRlZCBs YXllcnMgKi8KPiA+ICsJY29uc3Qgc3RydWN0IG1hbGlkcF9sYXllciAqbGF5ZXJzOwo+ID4gKwlj b25zdCB1OCBuX2xheWVyczsKPiA+ICsKPiA+ICsJLyogbGlzdCBvZiBzdXBwb3J0ZWQgaW5wdXQg Zm9ybWF0cyBmb3IgZWFjaCBsYXllciAqLwo+ID4gKwljb25zdCBzdHJ1Y3QgbWFsaWRwX2lucHV0 X2Zvcm1hdCAqaW5wdXRfZm9ybWF0czsKPiA+ICsJY29uc3QgdTggbl9pbnB1dF9mb3JtYXRzOwo+ ID4gKwo+ID4gKwkvKiBhZGRyZXNzIG9mZnNldCBmb3IgdGhlIG91dHB1dCBkZXB0aCByZWdpc3Rl ciAqLwo+ID4gKwljb25zdCB1MTYgb3V0X2RlcHRoX2Jhc2U7Cj4gPiArCj4gPiArCS8qIGJpdG1h cCB3aXRoIHJlZ2lzdGVyIG1hcCBmZWF0dXJlcyAqLwo+ID4gKwljb25zdCB1OCBmZWF0dXJlczsK PiA+ICt9Owo+ID4gKwo+ID4gKy8qIGhhcmR3YXJlIGZlYXR1cmVzICovCj4gPiArI2RlZmluZSBN QUxJRFBfSFdfRkVBVFVSRV9EUwkJKDEgPDwgMCkJLyogc3BsaXQgc2NyZWVuICovCj4gPiArCj4g PiArc3RydWN0IG1hbGlkcF9od19kZXZpY2Ugewo+ID4gKwljb25zdCBzdHJ1Y3QgbWFsaWRwX2h3 X3JlZ21hcCBtYXA7Cj4gPiArCXZvaWQgX19pb21lbSAqcmVnczsKPiA+ICsKPiA+ICsJLyogQVBC IGNsb2NrICovCj4gPiArCXN0cnVjdCBjbGsgKnBjbGs7Cj4gPiArCS8qIEFYSSBjbG9jayAqLwo+ ID4gKwlzdHJ1Y3QgY2xrICphY2xrOwo+ID4gKwkvKiBtYWluIGNsb2NrIGZvciBkaXNwbGF5IGNv cmUgKi8KPiA+ICsJc3RydWN0IGNsayAqbWNsazsKPiA+ICsJLyogcGl4ZWwgY2xvY2sgZm9yIGRp c3BsYXkgY29yZSAqLwo+ID4gKwlzdHJ1Y3QgY2xrICpweGxjbGs7Cj4gPiArCj4gPiArCS8qCj4g PiArCSAqIFZhbGlkYXRlIHRoZSBkcml2ZXIgaW5zdGFuY2UgYWdhaW5zdCB0aGUgaGFyZHdhcmUg Yml0cwo+ID4gKwkgKi8KPiA+ICsJaW50ICgqcXVlcnlfaHcpKHN0cnVjdCBtYWxpZHBfaHdfZGV2 aWNlICpod2Rldik7Cj4gPiArCj4gPiArCS8qCj4gPiArCSAqIFNldCB0aGUgaGFyZHdhcmUgaW50 byBjb25maWcgbW9kZSwgcmVhZHkgdG8gYWNjZXB0IG1vZGUgY2hhbmdlcwo+ID4gKwkgKi8KPiA+ ICsJdm9pZCAoKmVudGVyX2NvbmZpZ19tb2RlKShzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdk ZXYpOwo+ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiBUZWxsIGhhcmR3YXJlIHRvIGV4aXQgY29uZmln dXJhdGlvbiBtb2RlCj4gPiArCSAqLwo+ID4gKwl2b2lkICgqbGVhdmVfY29uZmlnX21vZGUpKHN0 cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2Rldik7Cj4gPiArCj4gPiArCS8qCj4gPiArCSAqIFF1 ZXJ5IGlmIGhhcmR3YXJlIGlzIGluIGNvbmZpZ3VyYXRpb24gbW9kZQo+ID4gKwkgKi8KPiA+ICsJ Ym9vbCAoKmluX2NvbmZpZ19tb2RlKShzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYpOwo+ ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiBTZXQgY29uZmlndXJhdGlvbiB2YWxpZCBmbGFnIGZvciBo YXJkd2FyZSBwYXJhbWV0ZXJzIHRoYXQgY2FuCj4gPiArCSAqIGJlIGNoYW5nZWQgb3V0c2lkZSB0 aGUgY29uZmlndXJhdGlvbiBtb2RlLiBIYXJkd2FyZSB3aWxsIHVzZQo+ID4gKwkgKiB0aGUgbmV3 IHNldHRpbmdzIHdoZW4gY29uZmlnIHZhbGlkIGlzIHNldCBhZnRlciB0aGUgZW5kIG9mIHRoZQo+ ID4gKwkgKiBjdXJyZW50IGJ1ZmZlciBzY2Fub3V0Cj4gPiArCSAqLwo+ID4gKwl2b2lkICgqc2V0 X2NvbmZpZ192YWxpZCkoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2KTsKPiA+ICsKPiA+ ICsJLyoKPiA+ICsJICogU2V0IGEgbmV3IG1vZGUgaW4gaGFyZHdhcmUuIFJlcXVpcmVzIHRoZSBo YXJkd2FyZSB0byBiZSBpbgo+ID4gKwkgKiBjb25maWd1cmF0aW9uIG1vZGUgYmVmb3JlIHRoaXMg ZnVuY3Rpb24gaXMgY2FsbGVkLgo+ID4gKwkgKi8KPiA+ICsJdm9pZCAoKm1vZGVzZXQpKHN0cnVj dCBtYWxpZHBfaHdfZGV2aWNlICpod2Rldiwgc3RydWN0IHZpZGVvbW9kZSAqbSk7Cj4gPiArCj4g PiArCS8qCj4gPiArCSAqIENhbGN1bGF0ZSB0aGUgcmVxdWlyZWQgcm90YXRpb24gbWVtb3J5IGdp dmVuIHRoZSBhY3RpdmUgYXJlYQo+ID4gKwkgKiBhbmQgdGhlIGJ1ZmZlciBmb3JtYXQuCj4gPiAr CSAqLwo+ID4gKwlpbnQgKCpyb3RtZW1fcmVxdWlyZWQpKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNl ICpod2RldiwgdTE2IHcsIHUxNiBoLCB1MzIgZm10KTsKPiA+ICsKPiA+ICsJdTggZmVhdHVyZXM7 Cj4gPiArCj4gPiArCXU4IG1pbl9saW5lX3NpemU7Cj4gPiArCXUxNiBtYXhfbGluZV9zaXplOwo+ ID4gKwo+ID4gKwkvKiBzaXplIG9mIG1lbW9yeSB1c2VkIGZvciByb3RhdGluZyBsYXllcnMsIHVw IHRvIHR3byBiYW5rcyBhdmFpbGFibGUgKi8KPiA+ICsJdTMyIHJvdGF0aW9uX21lbW9yeVsyXTsK PiA+ICt9Owo+ID4gKwo+ID4gKy8qIFN1cHBvcnRlZCB2YXJpYW50cyBvZiB0aGUgaGFyZHdhcmUg Ki8KPiA+ICtlbnVtIHsKPiA+ICsJTUFMSURQXzUwMCA9IDAsCj4gPiArCU1BTElEUF81NTAsCj4g PiArCU1BTElEUF82NTAsCj4gPiArCS8qIGtlZXAgdGhlIG5leHQgZW50cnkgbGFzdCAqLwo+ID4g KwlNQUxJRFBfTUFYX0RFVklDRVMKPiA+ICt9Owo+ID4gKwo+ID4gK2V4dGVybiBjb25zdCBzdHJ1 Y3QgbWFsaWRwX2h3X2RldmljZSBtYWxpZHBfZGV2aWNlW01BTElEUF9NQVhfREVWSUNFU107Cj4g PiArCj4gPiArdTMyIG1hbGlkcF9od19yZWFkKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2Rl diwgdTMyIHJlZyk7Cj4gPiArdm9pZCBtYWxpZHBfaHdfd3JpdGUoc3RydWN0IG1hbGlkcF9od19k ZXZpY2UgKmh3ZGV2LCB1MzIgdmFsdWUsIHUzMiByZWcpOwo+ID4gK3ZvaWQgbWFsaWRwX2h3X3Nl dGJpdHMoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2LCB1MzIgbWFzaywgdTMyIHJlZyk7 Cj4gPiArdm9pZCBtYWxpZHBfaHdfY2xlYXJiaXRzKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpo d2RldiwgdTMyIG1hc2ssIHUzMiByZWcpOwo+ID4gK3ZvaWQgbWFsaWRwX2h3X2NsZWFyX2lycShz dHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYsIHU4IGJsb2NrLCB1MzIgaXJxKTsKPiA+ICt2 b2lkIG1hbGlkcF9od19kaXNhYmxlX2lycShzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYs IHU4IGJsb2NrLCB1MzIgaXJxKTsKPiA+ICt2b2lkIG1hbGlkcF9od19lbmFibGVfaXJxKHN0cnVj dCBtYWxpZHBfaHdfZGV2aWNlICpod2RldiwgdTggYmxvY2ssIHUzMiBpcnEpOwo+ID4gKwo+ID4g K2ludCBtYWxpZHBfZGVfaXJxX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgaW50IGlycSk7 Cj4gPiAraW50IG1hbGlkcF9zZV9pcnFfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBpbnQg aXJxKTsKPiA+ICt2b2lkIG1hbGlkcF9kZV9pcnFfY2xlYW51cChzdHJ1Y3QgZHJtX2RldmljZSAq ZHJtKTsKPiA+ICt2b2lkIG1hbGlkcF9zZV9pcnFfY2xlYW51cChzdHJ1Y3QgZHJtX2RldmljZSAq ZHJtKTsKPiA+ICsKPiA+ICt1OCBtYWxpZHBfaHdfZ2V0X2Zvcm1hdF9pZChjb25zdCBzdHJ1Y3Qg bWFsaWRwX2h3X3JlZ21hcCAqbWFwLAo+ID4gKwkJCSAgIHU4IGxheWVyX2lkLCB1MzIgZm9ybWF0 KTsKPiA+ICsKPiA+ICsvKgo+ID4gKyAqIGJhY2tncm91bmQgY29sb3IgY29tcG9uZW50cyBhcmUg ZGVmaW5lZCBhcyAxMmJpdHMgdmFsdWVzLAo+ID4gKyAqIHRoZXkgd2lsbCBiZSBzaGlmdGVkIHJp Z2h0IHdoZW4gc3RvcmVkIG9uIGhhcmR3YXJlIHRoYXQKPiA+ICsgKiBzdXBwb3J0cyBvbmx5IDhi aXRzIHBlciBjaGFubmVsCj4gPiArICovCj4gPiArI2RlZmluZSBNQUxJRFBfQkdORF9DT0xPUl9S CQkweDAwMAo+ID4gKyNkZWZpbmUgTUFMSURQX0JHTkRfQ09MT1JfRwkJMHgwMDAKPiA+ICsjZGVm aW5lIE1BTElEUF9CR05EX0NPTE9SX0IJCTB4MDAwCj4gPiArCj4gPiArI2VuZGlmICAvKiBfX01B TElEUF9IV19IX18gKi8KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlk cF9wbGFuZXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX3BsYW5lcy5jCj4gPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMC4uNmYyMDEwOQo+ID4gLS0tIC9kZXYv bnVsbAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfcGxhbmVzLmMKPiA+IEBA IC0wLDAgKzEsMzQyIEBACj4gPiArLyoKPiA+ICsgKiAoQykgQ09QWVJJR0hUIDIwMTYgQVJNIExp bWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gPiArICogQXV0aG9yOiBMaXZpdSBEdWRhdSA8 TGl2aXUuRHVkYXVAYXJtLmNvbT4KPiA+ICsgKgo+ID4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlIGFuZCBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQo+ ID4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUKPiA+ICsgKiBGb3VuZGF0aW9uLCBhbmQgYW55IHVzZSBieSB5 b3Ugb2YgdGhpcyBwcm9ncmFtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zCj4gPiArICogb2Ygc3Vj aCBHTlUgbGljZW5jZS4KPiA+ICsgKgo+ID4gKyAqIEFSTSBNYWxpIERQIHBsYW5lIG1hbmlwdWxh dGlvbiByb3V0aW5lcy4KPiA+ICsgKi8KPiA+ICsKPiA+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4K PiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+Cj4gPiArI2luY2x1ZGUgPGRy bS9kcm1fZmJfY21hX2hlbHBlci5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVs cGVyLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVyLmg+Cj4gPiArCj4gPiAr I2luY2x1ZGUgIm1hbGlkcF9ody5oIgo+ID4gKyNpbmNsdWRlICJtYWxpZHBfZHJ2LmgiCj4gPiAr Cj4gPiArLyogTGF5ZXIgc3BlY2lmaWMgcmVnaXN0ZXIgb2Zmc2V0cyAqLwo+ID4gKyNkZWZpbmUg TUFMSURQX0xBWUVSX0ZPUk1BVAkJMHgwMDAKPiA+ICsjZGVmaW5lIE1BTElEUF9MQVlFUl9DT05U Uk9MCQkweDAwNAo+ID4gKyNkZWZpbmUgICBMQVlFUl9FTkFCTEUJCQkoMSA8PCAwKQo+ID4gKyNk ZWZpbmUgICBMQVlFUl9ST1RfT0ZGU0VUCQk4Cj4gPiArI2RlZmluZSAgIExBWUVSX0hfRkxJUAkJ CSgxIDw8IDEwKQo+ID4gKyNkZWZpbmUgICBMQVlFUl9WX0ZMSVAJCQkoMSA8PCAxMSkKPiA+ICsj ZGVmaW5lICAgTEFZRVJfUk9UX01BU0sJCSgweGYgPDwgOCkKPiA+ICsjZGVmaW5lIE1BTElEUF9M QVlFUl9TSVpFCQkweDAwYwo+ID4gKyNkZWZpbmUgICBMQVlFUl9IX1ZBTCh4KQkJKCgoeCkgJiAw eDFmZmYpIDw8IDApCj4gPiArI2RlZmluZSAgIExBWUVSX1ZfVkFMKHgpCQkoKCh4KSAmIDB4MWZm ZikgPDwgMTYpCj4gPiArI2RlZmluZSBNQUxJRFBfTEFZRVJfQ09NUF9TSVpFCQkweDAxMAo+ID4g KyNkZWZpbmUgTUFMSURQX0xBWUVSX09GRlNFVAkJMHgwMTQKPiA+ICsjZGVmaW5lIE1BTElEUF9M QVlFUl9TVFJJREUJCTB4MDE4Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgbWFsaWRwX2RlX3BsYW5l X2Rlc3Ryb3koc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCj4gPiArewo+ID4gKwlzdHJ1Y3QgbWFs aWRwX3BsYW5lICptcCA9IHRvX21hbGlkcF9wbGFuZShwbGFuZSk7Cj4gPiArCj4gPiArCWlmICht cC0+YmFzZS5mYikKPiA+ICsJCWRybV9mcmFtZWJ1ZmZlcl91bnJlZmVyZW5jZShtcC0+YmFzZS5m Yik7Cj4gPiArCj4gPiArCWRybV9wbGFuZV9oZWxwZXJfZGlzYWJsZShwbGFuZSk7Cj4gPiArCWRy bV9wbGFuZV9jbGVhbnVwKHBsYW5lKTsKPiA+ICsJZGV2bV9rZnJlZShwbGFuZS0+ZGV2LT5kZXYs IG1wKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBtYWxpZHBfZGVfYXRvbWljX3VwZGF0 ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiA+ICsJCQkJCSBzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMsCj4gPiArCQkJCQkgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCj4gPiArCQkJ CQkgaW50IGNydGNfeCwgaW50IGNydGNfeSwKPiA+ICsJCQkJCSB1bnNpZ25lZCBpbnQgY3J0Y193 LAo+ID4gKwkJCQkJIHVuc2lnbmVkIGludCBjcnRjX2gsCj4gPiArCQkJCQkgdWludDMyX3Qgc3Jj X3gsIHVpbnQzMl90IHNyY195LAo+ID4gKwkJCQkJIHVpbnQzMl90IHNyY193LCB1aW50MzJfdCBz cmNfaCkKPiA+ICt7Cj4gPiArCXJldHVybiBkcm1fYXRvbWljX2hlbHBlcl91cGRhdGVfcGxhbmUo cGxhbmUsIGNydGMsIGZiLCBjcnRjX3gsIGNydGNfeSwKPiA+ICsJCQkJCSAgICAgIGNydGNfdywg Y3J0Y19oLCBzcmNfeCwgc3JjX3ksCj4gPiArCQkJCQkgICAgICBzcmNfdywgc3JjX2gpOwo+ID4g K30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IG1hbGlkcF9kZV9wbGFuZV9hdG9taWNfc2V0X3Byb3Bl cnR5KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ID4gKwkJCQkJICAgICAgIHN0cnVjdCBkcm1f cGxhbmVfc3RhdGUgKnN0YXRlLAo+ID4gKwkJCQkJICAgICAgIHN0cnVjdCBkcm1fcHJvcGVydHkg KnByb3BlcnR5LAo+ID4gKwkJCQkJICAgICAgIHVpbnQ2NF90IHZhbCkKPiA+ICt7Cj4gPiArCXJl dHVybiBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9zZXRfcHJvcGVydHkocGxhbmUsIHByb3BlcnR5 LCB2YWwpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9m dW5jcyBtYWxpZHBfZGVfcGxhbmVfZnVuY3MgPSB7Cj4gPiArCS51cGRhdGVfcGxhbmUgPSBtYWxp ZHBfZGVfYXRvbWljX3VwZGF0ZV9wbGFuZSwKPiA+ICsJLmRpc2FibGVfcGxhbmUgPSBkcm1fYXRv bWljX2hlbHBlcl9kaXNhYmxlX3BsYW5lLAo+ID4gKwkuZGVzdHJveSA9IG1hbGlkcF9kZV9wbGFu ZV9kZXN0cm95LAo+ID4gKwkucmVzZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9yZXNldCwK PiA+ICsJLnNldF9wcm9wZXJ0eSA9IGRybV9hdG9taWNfaGVscGVyX3BsYW5lX3NldF9wcm9wZXJ0 eSwKPiA+ICsJLmF0b21pY19zZXRfcHJvcGVydHkgPSBtYWxpZHBfZGVfcGxhbmVfYXRvbWljX3Nl dF9wcm9wZXJ0eSwKPiA+ICsJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRvbWljX2hl bHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUsCj4gPiArCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9 IGRybV9hdG9taWNfaGVscGVyX3BsYW5lX2Rlc3Ryb3lfc3RhdGUsCj4gPiArfTsKPiA+ICsKPiA+ ICtzdGF0aWMgaW50IG1hbGlkcF9kZV9wbGFuZV9jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZSwKPiA+ICsJCQkJIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQo+ID4gK3sKPiA+ICsJ c3RydWN0IG1hbGlkcF9wbGFuZSAqbXAgPSB0b19tYWxpZHBfcGxhbmUocGxhbmUpOwo+ID4gKwl1 MzIgc3JjX3csIHNyY19oOwo+ID4gKwo+ID4gKwlpZiAoIXN0YXRlLT5jcnRjIHx8ICFzdGF0ZS0+ ZmIpCj4gPiArCQlyZXR1cm4gMDsKPiA+ICsKPiA+ICsJc3JjX3cgPSBzdGF0ZS0+c3JjX3cgPj4g MTY7Cj4gPiArCXNyY19oID0gc3RhdGUtPnNyY19oID4+IDE2Owo+ID4gKwo+ID4gKwlpZiAoKHN0 YXRlLT5jcnRjX3cgPiBtcC0+aHdkZXYtPm1heF9saW5lX3NpemUpIHx8Cj4gPiArCSAgICAoc3Rh dGUtPmNydGNfaCA+IG1wLT5od2Rldi0+bWF4X2xpbmVfc2l6ZSkgfHwKPiA+ICsJICAgIChzdGF0 ZS0+Y3J0Y193IDwgbXAtPmh3ZGV2LT5taW5fbGluZV9zaXplKSB8fAo+ID4gKwkgICAgKHN0YXRl LT5jcnRjX2ggPCBtcC0+aHdkZXYtPm1pbl9saW5lX3NpemUpIHx8Cj4gPiArCSAgICAoc3RhdGUt PmNydGNfdyAhPSBzcmNfdykgfHwgKHN0YXRlLT5jcnRjX2ggIT0gc3JjX2gpKQo+ID4gKwkJcmV0 dXJuIC1FSU5WQUw7Cj4gPiArCj4gPiArCW1wLT5yb3RtZW1fc2l6ZSA9IDA7Cj4gPiArCWlmIChz dGF0ZS0+cm90YXRpb24gJiBNQUxJRFBfUk9UQVRFRF9NQVNLKSB7Cj4gPiArCQlpbnQgdmFsOwo+ ID4gKwo+ID4gKwkJLyogU01BUlQgbGF5ZXIgY2FuJ3QgYmUgcm90YXRlZCAqLwo+ID4gKwkJaWYg KG1wLT5sYXllci0+aWQgPT0gREVfU01BUlQpCj4gPiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4gPiAr Cj4gPiArCQl2YWwgPSBtcC0+aHdkZXYtPnJvdG1lbV9yZXF1aXJlZChtcC0+aHdkZXYsIHN0YXRl LT5jcnRjX2gsCj4gPiArCQkJCQkJIHN0YXRlLT5jcnRjX3csCj4gPiArCQkJCQkJIHN0YXRlLT5m Yi0+cGl4ZWxfZm9ybWF0KTsKPiA+ICsJCWlmICh2YWwgPCAwKQo+ID4gKwkJCXJldHVybiB2YWw7 Cj4gPiArCj4gPiArCQltcC0+cm90bWVtX3NpemUgPSB2YWw7Cj4gPiArCX0KPiA+ICsKPiA+ICsJ cmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIG1hbGlkcF9kZV9wbGFuZV91 cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gPiArCQkJCSAgIHN0cnVjdCBkcm1fcGxh bmVfc3RhdGUgKm9sZF9zdGF0ZSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmpl Y3QgKm9iajsKPiA+ICsJc3RydWN0IG1hbGlkcF9wbGFuZSAqbXA7Cj4gPiArCWNvbnN0IHN0cnVj dCBtYWxpZHBfaHdfcmVnbWFwICptYXA7Cj4gPiArCXU4IGZvcm1hdF9pZDsKPiA+ICsJdTE2IHB0 cjsKPiA+ICsJdTMyIGZvcm1hdCwgc3JjX3csIHNyY19oLCBkZXN0X3csIGRlc3RfaCwgdmFsID0g MDsKPiA+ICsJaW50IG51bV9wbGFuZXMsIGk7Cj4gPiArCj4gPiArCWlmICghcGxhbmUtPnN0YXRl LT5jcnRjIHx8ICFwbGFuZS0+c3RhdGUtPmZiKQo+ID4gKwkJcmV0dXJuOwo+IAo+IElmIHlvdSBo YXZlIGFuIGF0b21pY19kaXNhYmxlIGhvb2sgZm9yIHlvdXIgcGxhbmUgeW91IHNob3VsZG4ndCBu ZWVkIHRoZXNlCj4gY2hlY2tzIGhlcmUgLSBoZWxwZXJzIHdpbGwgb25seSBjYWxsIHlvdSB3aGVu IGFjdHVhbGx5IGVuYWJsaW5nL3VwZGF0aW5nLAo+IGkuZS4gd2hlbiBmYiBhbmQgY3J0YyAhPSBO VUxMLgoKT0ssIEkgd2lsbCByZW1vdmUgdGhlbSwgdGhhbmtzIGZvciBwb2ludGluZyBpdCB0byBt ZS4KCj4gCj4gPiArCj4gPiArCW1wID0gdG9fbWFsaWRwX3BsYW5lKHBsYW5lKTsKPiA+ICsKPiA+ ICsjaWZkZWYgTUFMSURQX0VOQUJMRV9CR05EX0NPTE9SX0FTX1BSSU1BUllfUExBTkUKPiA+ICsJ Lyogc2tpcCB0aGUgcHJpbWFyeSBwbGFuZSwgaXQgaXMgdXNpbmcgdGhlIGJhY2tncm91bmQgY29s b3IgKi8KPiA+ICsJaWYgKCFtcC0+bGF5ZXIgfHwgIW1wLT5sYXllci0+aWQpCj4gPiArCQlyZXR1 cm47Cj4gPiArI2VuZGlmCj4gPiArCj4gPiArCW1hcCA9ICZtcC0+aHdkZXYtPm1hcDsKPiA+ICsJ Zm9ybWF0ID0gcGxhbmUtPnN0YXRlLT5mYi0+cGl4ZWxfZm9ybWF0Owo+ID4gKwlmb3JtYXRfaWQg PSBtYWxpZHBfaHdfZ2V0X2Zvcm1hdF9pZChtYXAsIG1wLT5sYXllci0+aWQsIGZvcm1hdCk7Cj4g PiArCWlmIChmb3JtYXRfaWQgPT0gKHU4KS0xKQo+ID4gKwkJcmV0dXJuOwo+ID4gKwo+ID4gKwlu dW1fcGxhbmVzID0gZHJtX2Zvcm1hdF9udW1fcGxhbmVzKGZvcm1hdCk7Cj4gPiArCj4gPiArCS8q IGNvbnZlcnQgc3JjIHZhbHVlcyBmcm9tIFExNiBmaXhlZCBwb2ludCB0byBpbnRlZ2VyICovCj4g PiArCXNyY193ID0gcGxhbmUtPnN0YXRlLT5zcmNfdyA+PiAxNjsKPiA+ICsJc3JjX2ggPSBwbGFu ZS0+c3RhdGUtPnNyY19oID4+IDE2Owo+ID4gKwlpZiAocGxhbmUtPnN0YXRlLT5yb3RhdGlvbiAm IE1BTElEUF9ST1RBVEVEX01BU0spIHsKPiA+ICsJCWRlc3RfdyA9IHBsYW5lLT5zdGF0ZS0+Y3J0 Y19oOwo+ID4gKwkJZGVzdF9oID0gcGxhbmUtPnN0YXRlLT5jcnRjX3c7Cj4gPiArCX0gZWxzZSB7 Cj4gPiArCQlkZXN0X3cgPSBwbGFuZS0+c3RhdGUtPmNydGNfdzsKPiA+ICsJCWRlc3RfaCA9IHBs YW5lLT5zdGF0ZS0+Y3J0Y19oOwo+ID4gKwl9Cj4gPiArCURSTV9ERUJVR19EUklWRVIoInNyY193 ID0gJWQsIHNyY19oID0gJWQsIGRlc3RfdyA9ICVkLCBkZXN0X2ggPSAlZFxuIiwKPiA+ICsJCQkg c3JjX3csIHNyY19oLCBkZXN0X3csIGRlc3RfaCk7Cj4gPiArCj4gPiArCW1hbGlkcF9od193cml0 ZShtcC0+aHdkZXYsIGZvcm1hdF9pZCwgbXAtPmxheWVyLT5iYXNlKTsKPiA+ICsKPiA+ICsJZm9y IChpID0gMDsgaSA8IG51bV9wbGFuZXM7IGkrKykgewo+ID4gKwkJLyogY2FsY3VsYXRlIHRoZSBv ZmZzZXQgZm9yIHRoZSBsYXllcidzIHBsYW5lIHJlZ2lzdGVycyAqLwo+ID4gKwkJcHRyID0gbXAt PmxheWVyLT5wdHIgKyAoaSA8PCA0KTsKPiA+ICsKPiA+ICsJCW9iaiA9IGRybV9mYl9jbWFfZ2V0 X2dlbV9vYmoocGxhbmUtPnN0YXRlLT5mYiwgaSk7Cj4gPiArCQltYWxpZHBfaHdfd3JpdGUobXAt Pmh3ZGV2LCBsb3dlcl8zMl9iaXRzKG9iai0+cGFkZHIpLCBwdHIpOwo+ID4gKwkJbWFsaWRwX2h3 X3dyaXRlKG1wLT5od2RldiwgdXBwZXJfMzJfYml0cyhvYmotPnBhZGRyKSwgcHRyICsgNCk7Cj4g PiArCQltYWxpZHBfaHdfd3JpdGUobXAtPmh3ZGV2LCBwbGFuZS0+c3RhdGUtPmZiLT5waXRjaGVz W2ldLAo+ID4gKwkJCQltcC0+bGF5ZXItPmJhc2UgKyBNQUxJRFBfTEFZRVJfU1RSSURFKTsKPiA+ ICsJfQo+ID4gKwo+ID4gKwltYWxpZHBfaHdfd3JpdGUobXAtPmh3ZGV2LCBMQVlFUl9IX1ZBTChz cmNfdykgfCBMQVlFUl9WX1ZBTChzcmNfaCksCj4gPiArCQkJbXAtPmxheWVyLT5iYXNlICsgTUFM SURQX0xBWUVSX1NJWkUpOwo+ID4gKwo+ID4gKwltYWxpZHBfaHdfd3JpdGUobXAtPmh3ZGV2LCBM QVlFUl9IX1ZBTChkZXN0X3cpIHwgTEFZRVJfVl9WQUwoZGVzdF9oKSwKPiA+ICsJCQltcC0+bGF5 ZXItPmJhc2UgKyBNQUxJRFBfTEFZRVJfQ09NUF9TSVpFKTsKPiA+ICsKPiA+ICsJbWFsaWRwX2h3 X3dyaXRlKG1wLT5od2RldiwgTEFZRVJfSF9WQUwocGxhbmUtPnN0YXRlLT5jcnRjX3gpIHwKPiA+ ICsJCQlMQVlFUl9WX1ZBTChwbGFuZS0+c3RhdGUtPmNydGNfeSksCj4gPiArCQkJbXAtPmxheWVy LT5iYXNlICsgTUFMSURQX0xBWUVSX09GRlNFVCk7Cj4gPiArCj4gPiArCS8qIGZpcnN0IGNsZWFy IHRoZSByb3RhdGlvbiBiaXRzIGluIHRoZSByZWdpc3RlciAqLwo+ID4gKwltYWxpZHBfaHdfY2xl YXJiaXRzKG1wLT5od2RldiwgTEFZRVJfUk9UX01BU0ssCj4gPiArCQkJICAgIG1wLT5sYXllci0+ YmFzZSArIE1BTElEUF9MQVlFUl9DT05UUk9MKTsKPiA+ICsKPiA+ICsJLyogc2V0dXAgdGhlIHJv dGF0aW9uIGFuZCBheGlzIGZsaXAgYml0cyAqLwo+ID4gKwlpZiAocGxhbmUtPnN0YXRlLT5yb3Rh dGlvbiAmIERSTV9ST1RBVEVfTUFTSykKPiA+ICsJCXZhbCA9IGlsb2cyKHBsYW5lLT5zdGF0ZS0+ cm90YXRpb24gJiBEUk1fUk9UQVRFX01BU0spIDw8IExBWUVSX1JPVF9PRkZTRVQ7Cj4gPiArCWlm IChwbGFuZS0+c3RhdGUtPnJvdGF0aW9uICYgQklUKERSTV9SRUZMRUNUX1gpKQo+ID4gKwkJdmFs IHw9IExBWUVSX1ZfRkxJUDsKPiA+ICsJaWYgKHBsYW5lLT5zdGF0ZS0+cm90YXRpb24gJiBCSVQo RFJNX1JFRkxFQ1RfWSkpCj4gPiArCQl2YWwgfD0gTEFZRVJfSF9GTElQOwo+ID4gKwo+ID4gKwkv KiBzZXQgdGhlICdlbmFibGUgbGF5ZXInIGJpdCAqLwo+ID4gKwl2YWwgfD0gTEFZRVJfRU5BQkxF Owo+ID4gKwo+ID4gKwltYWxpZHBfaHdfc2V0Yml0cyhtcC0+aHdkZXYsIHZhbCwKPiA+ICsJCQkg IG1wLT5sYXllci0+YmFzZSArIE1BTElEUF9MQVlFUl9DT05UUk9MKTsKPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIHZvaWQgbWFsaWRwX2RlX3BsYW5lX2Rpc2FibGUoc3RydWN0IGRybV9wbGFuZSAq cGxhbmUsCj4gPiArCQkJCSAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKPiA+ICt7 Cj4gPiArCXN0cnVjdCBtYWxpZHBfcGxhbmUgKm1wID0gdG9fbWFsaWRwX3BsYW5lKHBsYW5lKTsK PiA+ICsKPiA+ICsJLyogVG9EbzogZmlndXJlIG91dCB0aGUgYXR0YWNoZWQgZnJhbWVidWZmZXIg bGlmZWN5Y2xlICovCj4gCj4gWW91IGRvbid0IG5lZWQgdG8gZmlndXJlIHRoaXMgb3V0LCBhdG9t aWMgaGVscGVycyB3aWxsIHRha2UgY2FyZSBvZiB0aGUgZmIKPiBmb3IgeW91LgoKSXQgaXMgbW9y ZSBpbiBsaW5lIHdpdGggdW4vcGlubmluZyB0aGUgZnJhbWVidWZmZXIgYW5kIG1ha2luZyBzdXJl IHRoYXQgdGhlCmZyYW1lYnVmZmVyIGhhcyBiZWVuIHNjYW5uZWQgb3V0IGJlZm9yZSB1bnJlZi1p bmcgaXQuCgo+IAo+ID4gKwltYWxpZHBfaHdfY2xlYXJiaXRzKG1wLT5od2RldiwgTEFZRVJfRU5B QkxFLAo+ID4gKwkJCSAgICBtcC0+bGF5ZXItPmJhc2UgKyBNQUxJRFBfTEFZRVJfQ09OVFJPTCk7 Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2hlbHBlcl9m dW5jcyBtYWxpZHBfZGVfcGxhbmVfaGVscGVyX2Z1bmNzID0gewo+ID4gKwkucHJlcGFyZV9mYiA9 IE5VTEwsCj4gPiArCS5jbGVhbnVwX2ZiID0gTlVMTCwKPiA+ICsJLmF0b21pY19jaGVjayA9IG1h bGlkcF9kZV9wbGFuZV9jaGVjaywKPiA+ICsJLmF0b21pY191cGRhdGUgPSBtYWxpZHBfZGVfcGxh bmVfdXBkYXRlLAo+ID4gKwkuYXRvbWljX2Rpc2FibGUgPSBtYWxpZHBfZGVfcGxhbmVfZGlzYWJs ZSwKPiA+ICt9Owo+ID4gKwo+ID4gKyNpZmRlZiBNQUxJRFBfRU5BQkxFX0JHTkRfQ09MT1JfQVNf UFJJTUFSWV9QTEFORQo+ID4gK3N0YXRpYyBjb25zdCB1aW50MzJfdCBzYWZlX21vZGVzZXRfZm9y bWF0c1tdID0gewo+ID4gKwlEUk1fRk9STUFUX1hSR0I4ODg4LAo+ID4gKwlEUk1fRk9STUFUX0FS R0I4ODg4LAo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGludCBtYWxpZHBfZGVfY3JlYXRlX3By aW1hcnlfcGxhbmUoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBt YWxpZHBfZHJtICptYWxpZHAgPSBkcm0tPmRldl9wcml2YXRlOwo+ID4gKwlzdHJ1Y3QgbWFsaWRw X3BsYW5lICpwbGFuZTsKPiA+ICsJaW50IHJldDsKPiA+ICsKPiA+ICsJcGxhbmUgPSBkZXZtX2t6 YWxsb2MoZHJtLT5kZXYsIHNpemVvZigqcGxhbmUpLCBHRlBfS0VSTkVMKTsKPiA+ICsJaWYgKCFw bGFuZSkKPiA+ICsJCXJldHVybiAtRU5PTUVNOwo+ID4gKwo+ID4gKwlyZXQgPSBkcm1fdW5pdmVy c2FsX3BsYW5lX2luaXQoZHJtLCAmcGxhbmUtPmJhc2UsIDAsCj4gPiArCQkJCSAgICAgICAmbWFs aWRwX2RlX3BsYW5lX2Z1bmNzLAo+ID4gKwkJCQkgICAgICAgc2FmZV9tb2Rlc2V0X2Zvcm1hdHMs Cj4gPiArCQkJCSAgICAgICBBUlJBWV9TSVpFKHNhZmVfbW9kZXNldF9mb3JtYXRzKSwKPiA+ICsJ CQkJICAgICAgIERSTV9QTEFORV9UWVBFX1BSSU1BUlksIE5VTEwpOwo+ID4gKwlpZiAocmV0KQo+ ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsKPiA+ICsJZHJtX3BsYW5lX2hlbHBlcl9hZGQoJnBsYW5l LT5iYXNlLCAmbWFsaWRwX2RlX3BsYW5lX2hlbHBlcl9mdW5jcyk7Cj4gPiArCXBsYW5lLT5od2Rl diA9IG1hbGlkcC0+ZGV2Owo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArI2VuZGlm Cj4gPiArCj4gPiAraW50IG1hbGlkcF9kZV9wbGFuZXNfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAq ZHJtKQo+ID4gK3sKPiA+ICsJc3RydWN0IG1hbGlkcF9kcm0gKm1hbGlkcCA9IGRybS0+ZGV2X3By aXZhdGU7Cj4gPiArCWNvbnN0IHN0cnVjdCBtYWxpZHBfaHdfcmVnbWFwICptYXAgPSAmbWFsaWRw LT5kZXYtPm1hcDsKPiA+ICsJc3RydWN0IG1hbGlkcF9wbGFuZSAqcGxhbmUgPSBOVUxMOwo+ID4g KwllbnVtIGRybV9wbGFuZV90eXBlIHBsYW5lX3R5cGU7Cj4gPiArCXVuc2lnbmVkIGxvbmcgY3J0 Y3MgPSAxIDw8IGRybS0+bW9kZV9jb25maWcubnVtX2NydGM7Cj4gPiArCXUzMiAqZm9ybWF0czsK PiA+ICsJaW50IHJldCwgaSwgaiwgbjsKPiA+ICsKPiA+ICsjaWZkZWYgTUFMSURQX0VOQUJMRV9C R05EX0NPTE9SX0FTX1BSSU1BUllfUExBTkUKPiA+ICsJcmV0ID0gbWFsaWRwX2RlX2NyZWF0ZV9w cmltYXJ5X3BsYW5lKGRybSk7Cj4gPiArCWlmIChyZXQpCj4gPiArCQlyZXR1cm4gcmV0Owo+ID4g KwlwbGFuZV90eXBlID0gRFJNX1BMQU5FX1RZUEVfT1ZFUkxBWTsKPiA+ICsjZW5kaWYKPiA+ICsK PiA+ICsJZm9ybWF0cyA9IGtjYWxsb2MobWFwLT5uX2lucHV0X2Zvcm1hdHMsIHNpemVvZigqZm9y bWF0cyksIEdGUF9LRVJORUwpOwo+ID4gKwlpZiAoIWZvcm1hdHMpIHsKPiA+ICsJCXJldCA9IC1F Tk9NRU07Cj4gPiArCQlnb3RvIGNsZWFudXA7Cj4gPiArCX0KPiA+ICsKPiA+ICsJZm9yIChpID0g MDsgaSA8IG1hcC0+bl9sYXllcnM7IGkrKykgewo+ID4gKwkJdTggaWQgPSBtYXAtPmxheWVyc1tp XS5pZDsKPiA+ICsKPiA+ICsJCXBsYW5lID0gZGV2bV9remFsbG9jKGRybS0+ZGV2LCBzaXplb2Yo KnBsYW5lKSwgR0ZQX0tFUk5FTCk7Cj4gPiArCQlpZiAoIXBsYW5lKSB7Cj4gPiArCQkJcmV0ID0g LUVOT01FTTsKPiA+ICsJCQlnb3RvIGNsZWFudXA7Cj4gPiArCQl9Cj4gPiArCj4gPiArCQkvKiBi dWlsZCB0aGUgbGlzdCBvZiBEUk0gc3VwcG9ydGVkIGZvcm1hdHMgYmFzZWQgb24gdGhlIG1hcCAq Lwo+ID4gKwkJZm9yIChuID0gMCwgaiA9IDA7ICBqIDwgbWFwLT5uX2lucHV0X2Zvcm1hdHM7IGor Kykgewo+ID4gKwkJCWlmICgobWFwLT5pbnB1dF9mb3JtYXRzW2pdLmxheWVyICYgaWQpID09IGlk KQo+ID4gKwkJCQlmb3JtYXRzW24rK10gPSBtYXAtPmlucHV0X2Zvcm1hdHNbal0uZm9ybWF0Owo+ ID4gKwkJfQo+ID4gKwo+ID4gKyNpZm5kZWYgTUFMSURQX0VOQUJMRV9CR05EX0NPTE9SX0FTX1BS SU1BUllfUExBTkUKPiA+ICsJCXBsYW5lX3R5cGUgPSAoaSA9PSAwKSA/IERSTV9QTEFORV9UWVBF X1BSSU1BUlkgOgo+ID4gKwkJCQkJRFJNX1BMQU5FX1RZUEVfT1ZFUkxBWTsKPiA+ICsjZW5kaWYK PiA+ICsJCXJldCA9IGRybV91bml2ZXJzYWxfcGxhbmVfaW5pdChkcm0sICZwbGFuZS0+YmFzZSwg Y3J0Y3MsCj4gPiArCQkJCQkgICAgICAgJm1hbGlkcF9kZV9wbGFuZV9mdW5jcywgZm9ybWF0cywK PiA+ICsJCQkJCSAgICAgICBuLCBwbGFuZV90eXBlLCBOVUxMKTsKPiA+ICsJCWlmIChyZXQgPCAw KQo+ID4gKwkJCWdvdG8gY2xlYW51cDsKPiA+ICsKPiA+ICsJCWlmICghZHJtLT5tb2RlX2NvbmZp Zy5yb3RhdGlvbl9wcm9wZXJ0eSkgewo+ID4gKwkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBCSVQo RFJNX1JPVEFURV8wKSB8Cj4gPiArCQkJCQkgICAgICBCSVQoRFJNX1JPVEFURV85MCkgfAo+ID4g KwkJCQkJICAgICAgQklUKERSTV9ST1RBVEVfMTgwKSB8Cj4gPiArCQkJCQkgICAgICBCSVQoRFJN X1JPVEFURV8yNzApIHwKPiA+ICsJCQkJCSAgICAgIEJJVChEUk1fUkVGTEVDVF9YKSB8Cj4gPiAr CQkJCQkgICAgICBCSVQoRFJNX1JFRkxFQ1RfWSk7Cj4gPiArCQkJZHJtLT5tb2RlX2NvbmZpZy5y b3RhdGlvbl9wcm9wZXJ0eSA9Cj4gPiArCQkJCWRybV9tb2RlX2NyZWF0ZV9yb3RhdGlvbl9wcm9w ZXJ0eShkcm0sIGZsYWdzKTsKPiA+ICsJCX0KPiA+ICsJCWlmIChkcm0tPm1vZGVfY29uZmlnLnJv dGF0aW9uX3Byb3BlcnR5KQo+ID4gKwkJCWRybV9vYmplY3RfYXR0YWNoX3Byb3BlcnR5KCZwbGFu ZS0+YmFzZS5iYXNlLAo+ID4gKwkJCQkJCSAgIGRybS0+bW9kZV9jb25maWcucm90YXRpb25fcHJv cGVydHksCj4gPiArCQkJCQkJICAgQklUKERSTV9ST1RBVEVfMCkpOwo+ID4gKwo+ID4gKwkJZHJt X3BsYW5lX2hlbHBlcl9hZGQoJnBsYW5lLT5iYXNlLAo+ID4gKwkJCQkgICAgICZtYWxpZHBfZGVf cGxhbmVfaGVscGVyX2Z1bmNzKTsKPiA+ICsJCXBsYW5lLT5od2RldiA9IG1hbGlkcC0+ZGV2Owo+ ID4gKwkJcGxhbmUtPmxheWVyID0gJm1hcC0+bGF5ZXJzW2ldOwo+ID4gKwl9Cj4gPiArCj4gPiAr CWtmcmVlKGZvcm1hdHMpOwo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICsKPiA+ICtjbGVhbnVw Ogo+ID4gKwltYWxpZHBfZGVfcGxhbmVzX2Rlc3Ryb3koZHJtKTsKPiA+ICsJa2ZyZWUoZm9ybWF0 cyk7Cj4gPiArCj4gPiArCXJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3ZvaWQgbWFsaWRw X2RlX3BsYW5lc19kZXN0cm95KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4gPiArewo+ID4gKwlz dHJ1Y3QgZHJtX3BsYW5lICpwLCAqcHQ7Cj4gPiArCj4gPiArCWxpc3RfZm9yX2VhY2hfZW50cnlf c2FmZShwLCBwdCwgJmRybS0+bW9kZV9jb25maWcucGxhbmVfbGlzdCwgaGVhZCkgewo+ID4gKwkJ ZHJtX3BsYW5lX2NsZWFudXAocCk7Cj4gPiArCX0KPiA+ICt9Cj4gPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2FybS9tYWxpZHBfcmVncy5oIGIvZHJpdmVycy9ncHUvZHJtL2FybS9tYWxp ZHBfcmVncy5oCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMC4uNzNm ZWNiMwo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FybS9tYWxp ZHBfcmVncy5oCj4gPiBAQCAtMCwwICsxLDE3MiBAQAo+ID4gKy8qCj4gPiArICogKEMpIENPUFlS SUdIVCAyMDE2IEFSTSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ID4gKyAqIEF1dGhv cjogTGl2aXUgRHVkYXUgPExpdml1LkR1ZGF1QGFybS5jb20+Cj4gPiArICoKPiA+ICsgKiBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZSBhbmQgaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUKPiA+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9u IDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCj4gPiArICogRm91bmRhdGlvbiwg YW5kIGFueSB1c2UgYnkgeW91IG9mIHRoaXMgcHJvZ3JhbSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJt cwo+ID4gKyAqIG9mIHN1Y2ggR05VIGxpY2VuY2UuCj4gPiArICoKPiA+ICsgKiBBUk0gTWFsaSBE UDUwMC9EUDU1MC9EUDY1MCByZWdpc3RlcnMgZGVmaW5pdGlvbi4KPiA+ICsgKi8KPiA+ICsKPiA+ ICsjaWZuZGVmIF9fTUFMSURQX1JFR1NfSF9fCj4gPiArI2RlZmluZSBfX01BTElEUF9SRUdTX0hf Xwo+ID4gKwo+ID4gKy8qCj4gPiArICogYWJicmV2aWF0aW9ucyB1c2VkOgo+ID4gKyAqICAgIC0g REMgLSBkaXNwbGF5IGNvcmUgKGdlbmVyYWwgc2V0dGluZ3MpCj4gPiArICogICAgLSBERSAtIGRp c3BsYXkgZW5naW5lCj4gPiArICogICAgLSBTRSAtIHNjYWxpbmcgZW5naW5lCj4gPiArICovCj4g PiArCj4gPiArLyogaW50ZXJydXB0IGJpdCBtYXNrcyAqLwo+ID4gKyNkZWZpbmUgTUFMSURQX0RF X0lSUV9VTkRFUlJVTgkJCSgxIDw8IDApCj4gPiArCj4gPiArI2RlZmluZSBNQUxJRFA1MDBfREVf SVJRX0FYSV9FUlIJCSgxIDw8IDQpCj4gPiArI2RlZmluZSBNQUxJRFA1MDBfREVfSVJRX1ZTWU5D CQkJKDEgPDwgNSkKPiA+ICsjZGVmaW5lIE1BTElEUDUwMF9ERV9JUlFfUFJPR19MSU5FCQkoMSA8 PCA2KQo+ID4gKyNkZWZpbmUgTUFMSURQNTAwX0RFX0lSUV9TQVRVUkFUSU9OCQkoMSA8PCA3KQo+ ID4gKyNkZWZpbmUgTUFMSURQNTAwX0RFX0lSUV9DT05GX1ZBTElECQkoMSA8PCA4KQo+ID4gKyNk ZWZpbmUgTUFMSURQNTAwX0RFX0lSUV9DT05GX01PREUJCSgxIDw8IDExKQo+ID4gKyNkZWZpbmUg TUFMSURQNTAwX0RFX0lSUV9DT05GX0FDVElWRQkJKDEgPDwgMTcpCj4gPiArI2RlZmluZSBNQUxJ RFA1MDBfREVfSVJRX1BNX0FDVElWRQkJKDEgPDwgMTgpCj4gPiArI2RlZmluZSBNQUxJRFA1MDBf REVfSVJRX1RFU1RNT0RFX0FDVElWRQkoMSA8PCAxOSkKPiA+ICsjZGVmaW5lIE1BTElEUDUwMF9E RV9JUlFfRk9SQ0VfQkxOS19BQ1RJVkUJKDEgPDwgMjQpCj4gPiArI2RlZmluZSBNQUxJRFA1MDBf REVfSVJRX0FYSV9CVVNZCQkoMSA8PCAyOCkKPiA+ICsjZGVmaW5lIE1BTElEUDUwMF9ERV9JUlFf R0xPQkFMCQkJKDEgPDwgMzEpCj4gPiArI2RlZmluZSBNQUxJRFA1MDBfU0VfSVJRX0NPTkZfTU9E RQkJKDEgPDwgMCkKPiA+ICsjZGVmaW5lIE1BTElEUDUwMF9TRV9JUlFfQ09ORl9WQUxJRAkJKDEg PDwgNCkKPiA+ICsjZGVmaW5lIE1BTElEUDUwMF9TRV9JUlFfSU5JVF9CVVNZCQkoMSA8PCA1KQo+ ID4gKyNkZWZpbmUgTUFMSURQNTAwX1NFX0lSUV9BWElfRVJST1IJCSgxIDw8IDgpCj4gPiArI2Rl ZmluZSBNQUxJRFA1MDBfU0VfSVJRX09WRVJSVU4JCSgxIDw8IDkpCj4gPiArI2RlZmluZSBNQUxJ RFA1MDBfU0VfSVJRX1BST0dfTElORTEJCSgxIDw8IDEyKQo+ID4gKyNkZWZpbmUgTUFMSURQNTAw X1NFX0lSUV9QUk9HX0xJTkUyCQkoMSA8PCAxMykKPiA+ICsjZGVmaW5lIE1BTElEUDUwMF9TRV9J UlFfQ09ORl9BQ1RJVkUJCSgxIDw8IDE3KQo+ID4gKyNkZWZpbmUgTUFMSURQNTAwX1NFX0lSUV9Q TV9BQ1RJVkUJCSgxIDw8IDE4KQo+ID4gKyNkZWZpbmUgTUFMSURQNTAwX1NFX0lSUV9BWElfQlVT WQkJKDEgPDwgMjgpCj4gPiArI2RlZmluZSBNQUxJRFA1MDBfU0VfSVJRX0dMT0JBTAkJCSgxIDw8 IDMxKQo+ID4gKwo+ID4gKyNkZWZpbmUgTUFMSURQNTUwX0RFX0lSUV9TQVRVUkFUSU9OCQkoMSA8 PCA4KQo+ID4gKyNkZWZpbmUgTUFMSURQNTUwX0RFX0lSUV9WU1lOQwkJCSgxIDw8IDEyKQo+ID4g KyNkZWZpbmUgTUFMSURQNTUwX0RFX0lSUV9QUk9HX0xJTkUJCSgxIDw8IDEzKQo+ID4gKyNkZWZp bmUgTUFMSURQNTUwX0RFX0lSUV9BWElfRVJSCQkoMSA8PCAxNikKPiA+ICsjZGVmaW5lIE1BTElE UDU1MF9TRV9JUlFfRU9XCQkJKDEgPDwgMCkKPiA+ICsjZGVmaW5lIE1BTElEUDU1MF9TRV9JUlFf QVhJX0VSUgkJKDEgPDwgMTYpCj4gPiArI2RlZmluZSBNQUxJRFA1NTBfRENfSVJRX0NPTkZfVkFM SUQJCSgxIDw8IDApCj4gPiArI2RlZmluZSBNQUxJRFA1NTBfRENfSVJRX0NPTkZfTU9ERQkJKDEg PDwgNCkKPiA+ICsjZGVmaW5lIE1BTElEUDU1MF9EQ19JUlFfQ09ORl9BQ1RJVkUJCSgxIDw8IDE2 KQo+ID4gKyNkZWZpbmUgTUFMSURQNTUwX0RDX0lSUV9ERQkJCSgxIDw8IDIwKQo+ID4gKyNkZWZp bmUgTUFMSURQNTUwX0RDX0lSUV9TRQkJCSgxIDw8IDI0KQo+ID4gKwo+ID4gKyNkZWZpbmUgTUFM SURQNjUwX0RFX0lSUV9EUklGVAkJCSgxIDw8IDQpCj4gPiArCj4gPiArLyogYml0IG1hc2tzIHRo YXQgYXJlIGNvbW1vbiBiZXR3ZWVuIHByb2R1Y3RzICovCj4gPiArI2RlZmluZSAgIE1BTElEUF9D RkdfVkFMSUQJCSgxIDw8IDApCj4gPiArI2RlZmluZSAgIE1BTElEUF9ESVNQX0ZVTkNfSUxBQ0VE CSgxIDw8IDgpCj4gPiArCj4gPiArLyogcmVnaXN0ZXIgb2Zmc2V0cyBmb3IgSVJRIG1hbmFnZW1l bnQgKi8KPiA+ICsjZGVmaW5lIE1BTElEUF9SRUdfU1RBVFVTCQkweDAwMDAwCj4gPiArI2RlZmlu ZSBNQUxJRFBfUkVHX1NFVElSUQkJMHgwMDAwNAo+ID4gKyNkZWZpbmUgTUFMSURQX1JFR19NQVNL SVJRCQkweDAwMDA4Cj4gPiArI2RlZmluZSBNQUxJRFBfUkVHX0NMRUFSSVJRCQkweDAwMDBjCj4g PiArCj4gPiArLyogcmVnaXN0ZXIgb2Zmc2V0cyAqLwo+ID4gKyNkZWZpbmUgTUFMSURQX0RFX0NP UkVfSUQJCTB4MDAwMTgKPiA+ICsjZGVmaW5lIE1BTElEUF9ERV9ESVNQTEFZX0ZVTkMJCTB4MDAw MjAKPiA+ICsKPiA+ICsvKiB0aGVzZSBvZmZzZXRzIGFyZSByZWxhdGl2ZSB0byBNQUxJRFA1eDBf VElNSU5HU19CQVNFICovCj4gPiArI2RlZmluZSBNQUxJRFBfREVfSF9USU1JTkdTCQkweDAKPiA+ ICsjZGVmaW5lIE1BTElEUF9ERV9WX1RJTUlOR1MJCTB4NAo+ID4gKyNkZWZpbmUgTUFMSURQX0RF X1NZTkNfV0lEVEgJCTB4OAo+ID4gKyNkZWZpbmUgTUFMSURQX0RFX0hWX0FDVElWRQkJMHhjCj4g PiArCj4gPiArLyogbWFjcm9zIHRvIHNldCB2YWx1ZXMgaW50byByZWdpc3RlcnMgKi8KPiA+ICsj ZGVmaW5lIE1BTElEUF9ERV9IX0ZST05UUE9SQ0goeCkJKCgoeCkgJiAweGZmZikgPDwgMCkKPiA+ ICsjZGVmaW5lIE1BTElEUF9ERV9IX0JBQ0tQT1JDSCh4KQkoKCh4KSAmIDB4M2ZmKSA8PCAxNikK PiA+ICsjZGVmaW5lIE1BTElEUDUwMF9ERV9WX0ZST05UUE9SQ0goeCkJKCgoeCkgJiAweGZmKSA8 PCAwKQo+ID4gKyNkZWZpbmUgTUFMSURQNTUwX0RFX1ZfRlJPTlRQT1JDSCh4KQkoKCh4KSAmIDB4 ZmZmKSA8PCAwKQo+ID4gKyNkZWZpbmUgTUFMSURQX0RFX1ZfQkFDS1BPUkNIKHgpCSgoKHgpICYg MHhmZikgPDwgMTYpCj4gPiArI2RlZmluZSBNQUxJRFBfREVfSF9TWU5DV0lEVEgoeCkJKCgoeCkg JiAweDNmZikgPDwgMCkKPiA+ICsjZGVmaW5lIE1BTElEUF9ERV9WX1NZTkNXSURUSCh4KQkoKCh4 KSAmIDB4ZmYpIDw8IDE2KQo+ID4gKyNkZWZpbmUgTUFMSURQX0RFX0hfQUNUSVZFKHgpCQkoKCh4 KSAmIDB4MWZmZikgPDwgMCkKPiA+ICsjZGVmaW5lIE1BTElEUF9ERV9WX0FDVElWRSh4KQkJKCgo eCkgJiAweDFmZmYpIDw8IDE2KQo+ID4gKwo+ID4gKy8qIHJlZ2lzdGVyIG9mZnNldHMgYW5kIGJp dHMgc3BlY2lmaWMgdG8gRFA1MDAgKi8KPiA+ICsjZGVmaW5lIE1BTElEUDUwMF9EQ19CQVNFCQkw eDAwMDAwCj4gPiArI2RlZmluZSBNQUxJRFA1MDBfRENfQ09OVFJPTAkJMHgwMDAwYwo+ID4gKyNk ZWZpbmUgICBNQUxJRFA1MDBfRENfQ09ORklHX1JFUQkoMSA8PCAxNykKPiA+ICsjZGVmaW5lICAg TUFMSURQNTAwX0hTWU5DUE9MCQkoMSA8PCAyMCkKPiA+ICsjZGVmaW5lICAgTUFMSURQNTAwX1ZT WU5DUE9MCQkoMSA8PCAyMSkKPiA+ICsjZGVmaW5lICAgTUFMSURQNTAwX0RDX0NMRUFSX01BU0sJ MHgzMDBmZmYKPiA+ICsjZGVmaW5lIE1BTElEUDUwMF9ERV9MSU5FX0NPVU5URVIJMHgwMDAxMAo+ ID4gKyNkZWZpbmUgTUFMSURQNTAwX0RFX0FYSV9DT05UUk9MCTB4MDAwMTQKPiA+ICsjZGVmaW5l IE1BTElEUDUwMF9ERV9TRUNVUkVfQ1RSTAkweDAwMDFjCj4gPiArI2RlZmluZSBNQUxJRFA1MDBf REVfQ0hST01BX0tFWQkJMHgwMDAyNAo+ID4gKyNkZWZpbmUgTUFMSURQNTAwX1RJTUlOR1NfQkFT RQkJMHgwMDAyOAo+ID4gKwo+ID4gKyNkZWZpbmUgTUFMSURQNTAwX0NPTkZJR18zRAkJMHgwMDAz OAo+ID4gKyNkZWZpbmUgTUFMSURQNTAwX0JHTkRfQ09MT1IJCTB4MDAwM2MKPiA+ICsjZGVmaW5l IE1BTElEUDUwMF9PVVRQVVRfREVQVEgJCTB4MDAwNDQKPiA+ICsjZGVmaW5lIE1BTElEUDUwMF9Z VVZfUkdCX0NPRUYJCTB4MDAwNDgKPiA+ICsjZGVmaW5lIE1BTElEUDUwMF9DT0xPUl9BREpfQ09F RgkweDAwMDc4Cj4gPiArI2RlZmluZSBNQUxJRFA1MDBfQ09FRl9UQUJMRV9BRERSCTB4MDAwYTgK PiA+ICsjZGVmaW5lIE1BTElEUDUwMF9DT0VGX1RBQkxFX0RBVEEJMHgwMDBhYwo+ID4gKyNkZWZp bmUgTUFMSURQNTAwX0RFX0xWX0JBU0UJCTB4MDAxMDAKPiA+ICsjZGVmaW5lIE1BTElEUDUwMF9E RV9MVl9QVFJfQkFTRQkweDAwMTI0Cj4gPiArI2RlZmluZSBNQUxJRFA1MDBfREVfTEcxX0JBU0UJ CTB4MDAyMDAKPiA+ICsjZGVmaW5lIE1BTElEUDUwMF9ERV9MRzFfUFRSX0JBU0UJMHgwMDIxYwo+ ID4gKyNkZWZpbmUgTUFMSURQNTAwX0RFX0xHMl9CQVNFCQkweDAwMzAwCj4gPiArI2RlZmluZSBN QUxJRFA1MDBfREVfTEcyX1BUUl9CQVNFCTB4MDAzMWMKPiA+ICsjZGVmaW5lIE1BTElEUDUwMF9T RV9CQVNFCQkweDAwYzAwCj4gPiArI2RlZmluZSBNQUxJRFA1MDBfU0VfUFRSX0JBU0UJCTB4MDBl MGMKPiA+ICsjZGVmaW5lIE1BTElEUDUwMF9EQ19JUlFfQkFTRQkJMHgwMGYwMAo+ID4gKyNkZWZp bmUgTUFMSURQNTAwX0NPTkZJR19WQUxJRAkJMHgwMGYwMAo+ID4gKyNkZWZpbmUgTUFMSURQNTAw X0NPTkZJR19JRAkJMHgwMGZkNAo+ID4gKwo+ID4gKy8qIHJlZ2lzdGVyIG9mZnNldHMgYW5kIGJp dHMgc3BlY2lmaWMgdG8gRFA1NTAvRFA2NTAgKi8KPiA+ICsjZGVmaW5lIE1BTElEUDU1MF9ERV9D T05UUk9MCQkweDAwMDEwCj4gPiArI2RlZmluZSBNQUxJRFA1NTBfREVfTElORV9DT1VOVEVSCTB4 MDAwMTQKPiA+ICsjZGVmaW5lIE1BTElEUDU1MF9ERV9BWElfQ09OVFJPTAkweDAwMDE4Cj4gPiAr I2RlZmluZSBNQUxJRFA1NTBfREVfUU9TCQkweDAwMDFjCj4gPiArI2RlZmluZSBNQUxJRFA1NTBf VElNSU5HU19CQVNFCQkweDAwMDMwCj4gPiArI2RlZmluZSBNQUxJRFA1NTBfSFNZTkNQT0wJCSgx IDw8IDEyKQo+ID4gKyNkZWZpbmUgTUFMSURQNTUwX1ZTWU5DUE9MCQkoMSA8PCAyOCkKPiA+ICsK PiA+ICsjZGVmaW5lIE1BTElEUDU1MF9ERV9ESVNQX1NJREVCQU5ECTB4MDAwNDAKPiA+ICsjZGVm aW5lIE1BTElEUDU1MF9ERV9CR05EX0NPTE9SCQkweDAwMDQ0Cj4gPiArI2RlZmluZSBNQUxJRFA1 NTBfREVfT1VUUFVUX0RFUFRICTB4MDAwNGMKPiA+ICsjZGVmaW5lIE1BTElEUDU1MF9ERV9DT0xP Ul9DT0VGCQkweDAwMDUwCj4gPiArI2RlZmluZSBNQUxJRFA1NTBfREVfQ09FRl9UQUJMRV9BRERS CTB4MDAwODAKPiA+ICsjZGVmaW5lIE1BTElEUDU1MF9ERV9DT0VGX1RBQkxFX0RBVEEJMHgwMDA4 NAo+ID4gKyNkZWZpbmUgTUFMSURQNTUwX0RFX0xWMV9CQVNFCQkweDAwMTAwCj4gPiArI2RlZmlu ZSBNQUxJRFA1NTBfREVfTFYxX1BUUl9CQVNFCTB4MDAxMjQKPiA+ICsjZGVmaW5lIE1BTElEUDU1 MF9ERV9MVjJfQkFTRQkJMHgwMDIwMAo+ID4gKyNkZWZpbmUgTUFMSURQNTUwX0RFX0xWMl9QVFJf QkFTRQkweDAwMjI0Cj4gPiArI2RlZmluZSBNQUxJRFA1NTBfREVfTEdfQkFTRQkJMHgwMDMwMAo+ ID4gKyNkZWZpbmUgTUFMSURQNTUwX0RFX0xHX1BUUl9CQVNFCTB4MDAzMWMKPiA+ICsjZGVmaW5l IE1BTElEUDU1MF9ERV9MU19CQVNFCQkweDAwNDAwCj4gPiArI2RlZmluZSBNQUxJRFA1NTBfREVf TFNfUFRSX0JBU0UJMHgwMDQyYwo+ID4gKyNkZWZpbmUgTUFMSURQNTUwX0RFX1BFUkZfQkFTRQkJ MHgwMDUwMAo+ID4gKyNkZWZpbmUgTUFMSURQNTUwX1NFX0JBU0UJCTB4MDgwMDAKPiA+ICsjZGVm aW5lIE1BTElEUDU1MF9EQ19CQVNFCQkweDBjMDAwCj4gPiArI2RlZmluZSBNQUxJRFA1NTBfRENf Q09OVFJPTAkJMHgwYzAxMAo+ID4gKyNkZWZpbmUgICBNQUxJRFA1NTBfRENfQ09ORklHX1JFUQko MSA8PCAxNikKPiA+ICsjZGVmaW5lIE1BTElEUDU1MF9DT05GSUdfVkFMSUQJCTB4MGMwMTQKPiA+ ICsjZGVmaW5lIE1BTElEUDU1MF9DT05GSUdfSUQJCTB4MGZmZDQKPiA+ICsKPiA+ICsvKgo+ID4g KyAqIFN0YXJ0aW5nIHdpdGggRFA1NTAgdGhlIHJlZ2lzdGVyIG1hcCBibG9ja3MgaGFzIGJlZW4g c3RhbmRhcmRpc2VkIHRvIHRoZQo+ID4gKyAqIGZvbGxvd2luZyBsYXlvdXQ6Cj4gPiArICoKPiA+ ICsgKiAgIE9mZnNldCAgICAgICAgICAgIEJsb2NrIHJlZ2lzdGVycwo+ID4gKyAqICAweDAwMDAw ICAgICAgICAgICAgRGlzcGxheSBFbmdpbmUKPiA+ICsgKiAgMHgwODAwMCAgICAgICAgICAgIFNj YWxpbmcgRW5naW5lCj4gPiArICogIDB4MGMwMDAgICAgICAgICAgICBEaXNwbGF5IENvcmUKPiA+ ICsgKiAgMHgxMDAwMCAgICAgICAgICAgIFNlY3VyZSBjb250cm9sCj4gPiArICoKPiA+ICsgKiBU aGUgb2xkIERQNTAwIElQIG1peGVzIHNvbWUgREMgd2l0aCB0aGUgREUgcmVnaXN0ZXJzLCBoZW5j ZSB0aGUgbmVlZAo+ID4gKyAqIGZvciBhIG1hcHBpbmcgc3RydWN0dXJlLgo+ID4gKyAqLwo+ID4g Kwo+ID4gKyNlbmRpZiAvKiBfX01BTElEUF9SRUdTX0hfXyAqLwo+ID4gLS0gCj4gPiAyLjcuMQo+ ID4gCj4gPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+ ID4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+ID4gZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwo+ID4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9k cmktZGV2ZWwKPiAKPiAtLSAKPiBEYW5pZWwgVmV0dGVyCj4gU29mdHdhcmUgRW5naW5lZXIsIElu dGVsIENvcnBvcmF0aW9uCj4gaHR0cDovL2Jsb2cuZmZ3bGwuY2gKPiAKClRoYW5rcyBhZ2FpbiBm b3IgZmluZGluZyB0aW1lIHRvIHJldmlldyB0aGUgY29kZS4KCkJlc3QgcmVnYXJkcywKTGl2aXUK CgotLSAKPT09PT09PT09PT09PT09PT09PT0KfCBJIHdvdWxkIGxpa2UgdG8gfAp8IGZpeCB0aGUg d29ybGQsICB8CnwgYnV0IHRoZXkncmUgbm90IHwKfCBnaXZpbmcgbWUgdGhlICAgfAogXCBzb3Vy Y2UgY29kZSEgIC8KICAtLS0tLS0tLS0tLS0tLS0KICAgIMKvXF8o44OEKV8vwq8KX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcg bGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==