From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sameer Goel Subject: Re: [v2 4/6] xen/iommu: smmu-v3: Add Xen specific code to enable the ported driver Date: Thu, 24 May 2018 14:18:07 -0600 Message-ID: References: <20180524004620.23828-1-sameer.goel@linaro.org> <20180524004620.23828-5-sameer.goel@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1fLwgh-0004Qk-CJ for xen-devel@lists.xenproject.org; Thu, 24 May 2018 20:18:15 +0000 Received: by mail-pg0-x241.google.com with SMTP id p21-v6so1265575pgd.11 for ; Thu, 24 May 2018 13:18:11 -0700 (PDT) In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Manish Jaggi , xen-devel@lists.xenproject.org, julien.grall@arm.com Cc: sstabellini@kernel.org, shankerd@codeaurora.org, roger.pau@citrix.com List-Id: xen-devel@lists.xenproject.org Q2FuIHlvdSBwbGVhc2UgcG9pbnQgb3V0IHRoZSBzcGVjaWZpYyBpbnN0YW5jZXM/IFRoaXMgcGF0 Y2ggaXMgbm8gCmRpZmZlcmVudCB0aGFuIHRoZSBsYXN0IHYxIHBhdGNoLiBJIGhhdmUganVzdCBh ZGRlZCB0YXNrbGV0cyB0byBpdC4KCgpPbiAwNS8yMy8yMDE4IDEwOjQ4IFBNLCBNYW5pc2ggSmFn Z2kgd3JvdGU6Cj4gSGkgU2FtZWVyLAo+Cj4gR2VuZXJhbCBDb21tZW50LCBwbGVhc2UgdXNlIGFw cHJvcHJpYXRlIHZhcmlhYmxlIG5hbWVzIGZvciBYWFhfZG9tYWluIAo+IHN0cnVjdHVyZXMgaW4g Y29kZSB3aGljaCBpcyB4ZW4gc3BlY2lmaWMuCj4KPgo+IE9uIDA1LzI0LzIwMTggMDY6MTYgQU0s IFNhbWVlciBHb2VsIHdyb3RlOgo+PiBUaGlzIGRyaXZlciBmb2xsb3dzIGFuIGFwcHJvYWNoIHNp bWlsYXIgdG8gc21tdSBkcml2ZXIuIFRoZSBpbnRlbnQgaGVyZQo+PiBpcyB0byByZXVzZSBhcyBt dWNoIExpbnV4IGNvZGUgYXMgcG9zc2libGUuCj4+IC0gR2x1ZSBjb2RlIGhhcyBiZWVuIGludHJv ZHVjZWQgdG8gYnJpZGdlIHRoZSBBUEkgY2FsbHMuCj4+IC0gQ2FsbGVkIExpbnV4IGZ1bmN0aW9u cyBmcm9tIHRoZSBYZW4gSU9NTVUgZnVuY3Rpb24gY2FsbHMuCj4+IC0gWGVuIG1vZGlmaWNhdGlv bnMgYXJlIHByZWNlZGVkIGJ5IC8qWGVuOiBjb21tZW50ICovCj4+IC0geGVuL2xpbnV4X2NvbXBh dDogQWRkIGEgTGludXggY29tcGF0IGhlYWRlcgo+PiDCoMKgIEZvciBwb3J0aW5nIGZpbGVzIGRp cmVjdGx5IGZyb20gTGludXggaXQgaXMgdXNlZnVsIHRvIGhhdmUgYSAKPj4gZnVuY3Rpb24gbWFw cGluZwo+PiDCoMKgIGRlZmluaXRpb25zIGZyb20gTGludXggdG8gWGVuLiBUaGlzIGZpbGUgYWRk cyBjb21tb24gQVBJIGZ1bmN0aW9ucyAKPj4gYW5kCj4+IMKgwqAgb3RoZXIgZGVmaW5lcyB0aGF0 IGFyZSBuZWVkZWQgZm9yIHBvcnRpbmcgYXJtIFNNTVUgZHJpdmVycy4KPj4KPj4gU2lnbmVkLW9m Zi1ieTogU2FtZWVyIEdvZWwgPHNhbWVlci5nb2VsQGxpbmFyby5vcmc+Cj4+IC0tLQo+PiDCoCB4 ZW4vYXJjaC9hcm0vcDJtLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8 wqDCoCAxICsKPj4gwqAgeGVuL2RyaXZlcnMvS2NvbmZpZ8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB8wqDCoCAyICsKPj4gwqAgeGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJt L0tjb25maWfCoMKgIHzCoMKgIDggKwo+PiDCoCB4ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0v TWFrZWZpbGXCoCB8wqDCoCAxICsKPj4gwqAgeGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL3Nt bXUtdjMuYyB8IDkzNCArKysrKysrKysrKysrKysrKysrKysrKysrLQo+PiDCoCB4ZW4vaW5jbHVk ZS94ZW4vbGludXhfY29tcGF0LmjCoMKgwqDCoMKgwqDCoCB8wqAgODQgKysrCj4+IMKgIDYgZmls ZXMgY2hhbmdlZCwgMTAwMSBpbnNlcnRpb25zKCspLCAyOSBkZWxldGlvbnMoLSkKPj4gwqAgY3Jl YXRlIG1vZGUgMTAwNjQ0IHhlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9LY29uZmlnCj4+IMKg IGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4vaW5jbHVkZS94ZW4vbGludXhfY29tcGF0LmgKPj4KPj4g ZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS9wMm0uYyBiL3hlbi9hcmNoL2FybS9wMm0uYwo+PiBp bmRleCBkNDNjM2FhODk2Li4zOGFhOWYwMGMxIDEwMDY0NAo+PiAtLS0gYS94ZW4vYXJjaC9hcm0v cDJtLmMKPj4gKysrIGIveGVuL2FyY2gvYXJtL3AybS5jCj4+IEBAIC0xNDU0LDYgKzE0NTQsNyBA QCBlcnI6Cj4+IMKgIHN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF92aXJ0X3BhZ2luZ19vbmUodm9p ZCAqZGF0YSkKPj4gwqAgewo+PiDCoMKgwqDCoMKgIHVuc2lnbmVkIGxvbmcgdmFsID0gKHVuc2ln bmVkIGxvbmcpZGF0YTsKPj4gK8KgwqDCoCAvKiBTTU1VdjMgUzIgY2ZnIHZ0Y3IgcmV1c2VzIHRo ZSBmb2xsb3dpbmcgdmFsdWUgKi8KPj4gwqDCoMKgwqDCoCBXUklURV9TWVNSRUczMih2YWwsIFZU Q1JfRUwyKTsKPj4gwqDCoMKgwqDCoCBpc2IoKTsKPj4gwqAgfQo+PiBkaWZmIC0tZ2l0IGEveGVu L2RyaXZlcnMvS2NvbmZpZyBiL3hlbi9kcml2ZXJzL0tjb25maWcKPj4gaW5kZXggZGI5NDM5M2Y0 Ny4uNTljYTAwZjg1MCAxMDA2NDQKPj4gLS0tIGEveGVuL2RyaXZlcnMvS2NvbmZpZwo+PiArKysg Yi94ZW4vZHJpdmVycy9LY29uZmlnCj4+IEBAIC0xNSw0ICsxNSw2IEBAIHNvdXJjZSAiZHJpdmVy cy92aWRlby9LY29uZmlnIgo+PiDCoCBjb25maWcgSEFTX1ZQQ0kKPj4gwqDCoMKgwqDCoCBib29s Cj4+IMKgICtzb3VyY2UgImRyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL0tjb25maWciCj4+ICsKPj4g wqAgZW5kbWVudQo+PiBkaWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL0tj b25maWcgCj4+IGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL0tjb25maWcKPj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMDAwMC4uY2RhODk5ZjYwOAo+PiAtLS0gL2Rl di9udWxsCj4+ICsrKyBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9LY29uZmlnCj4+IEBA IC0wLDAgKzEsOCBAQAo+PiArCj4+ICtjb25maWcgQVJNX1NNTVVfdjMKPj4gK8KgwqDCoCBib29s ICJBUk0gU01NVXYzIFN1cHBvcnQiCj4+ICvCoMKgwqAgZGVwZW5kcyBvbiBBUk1fNjQKPj4gK8Kg wqDCoCBoZWxwCj4+ICvCoMKgwqDCoCBTdXBwb3J0IGZvciBpbXBsZW1lbnRhdGlvbnMgb2YgdGhl IEFSTSBTeXN0ZW0gTU1VIGFyY2hpdGVjdHVyZQo+PiArwqDCoMKgwqAgdmVyc2lvbiAzLgo+PiAr Cj4+IGRpZmYgLS1naXQgYS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vTWFrZWZpbGUgCj4+ IGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL01ha2VmaWxlCj4+IGluZGV4IGY0Y2QyNmUx NWQuLmUxNDczMmI1NWMgMTAwNjQ0Cj4+IC0tLSBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2Fy bS9NYWtlZmlsZQo+PiArKysgYi94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vTWFrZWZpbGUK Pj4gQEAgLTEsMiArMSwzIEBACj4+IMKgIG9iai15ICs9IGlvbW11Lm8KPj4gwqAgb2JqLXkgKz0g c21tdS5vCj4+ICtvYmotJChDT05GSUdfQVJNX1NNTVVfdjMpICs9IHNtbXUtdjMubwo+PiBkaWZm IC0tZ2l0IGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL3NtbXUtdjMuYyAKPj4gYi94ZW4v ZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vc21tdS12My5jCj4+IGluZGV4IGU2N2JhNmM0MGYuLmRm ODE2MjY3ODUgMTAwNjQ0Cj4+IC0tLSBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9zbW11 LXYzLmMKPj4gKysrIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL3NtbXUtdjMuYwo+PiBA QCAtMTgsMjggKzE4LDQxNCBAQAo+PiDCoMKgICogQXV0aG9yOiBXaWxsIERlYWNvbiA8d2lsbC5k ZWFjb25AYXJtLmNvbT4KPj4gwqDCoCAqCj4+IMKgwqAgKiBUaGlzIGRyaXZlciBpcyBwb3dlcmVk IGJ5IGJhZCBjb2ZmZWUgYW5kIGJvbWJheSBtaXguCj4+ICsgKgo+PiArICoKPj4gKyAqIEJhc2Vk IG9uIExpbnV4IGRyaXZlcnMvaW9tbXUvYXJtLXNtbXUtdjMuYwo+PiArICogPT4gY29tbWl0IDdh YTg2MTlhNjZhZWE1MmIxNDVlMDRjYmFiNGY4ZDZhNGU1ZjNmM2IKPj4gKyAqCj4+ICsgKiBYZW4g bW9kaWZpY2F0aW9uczoKPj4gKyAqIFNhbWVlciBHb2VsIDxzYW1lZXIuZ29lbEBsaW5hcm8ub3Jn Pgo+PiArICogQ29weXJpZ2h0IChDKSAyMDE3LCBUaGUgTGludXggRm91bmRhdGlvbiwgQWxsIHJp Z2h0cyByZXNlcnZlZC4KPj4gKyAqCj4+IMKgwqAgKi8KPj4gwqAgLSNpbmNsdWRlIDxsaW51eC9h Y3BpLmg+Cj4+IC0jaW5jbHVkZSA8bGludXgvYWNwaV9pb3J0Lmg+Cj4+IC0jaW5jbHVkZSA8bGlu dXgvZGVsYXkuaD4KPj4gLSNpbmNsdWRlIDxsaW51eC9kbWEtaW9tbXUuaD4KPj4gLSNpbmNsdWRl IDxsaW51eC9lcnIuaD4KPj4gLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KPj4gLSNpbmNs dWRlIDxsaW51eC9pb21tdS5oPgo+PiAtI2luY2x1ZGUgPGxpbnV4L2lvcG9sbC5oPgo+PiAtI2lu Y2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+PiAtI2luY2x1ZGUgPGxpbnV4L21zaS5oPgo+PiAtI2lu Y2x1ZGUgPGxpbnV4L29mLmg+Cj4+IC0jaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgo+PiAt I2luY2x1ZGUgPGxpbnV4L29mX2lvbW11Lmg+Cj4+IC0jaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZv cm0uaD4KPj4gLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KPj4gLSNpbmNsdWRlIDxsaW51eC9wbGF0 Zm9ybV9kZXZpY2UuaD4KPj4gLQo+PiAtI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+Cj4+IC0K Pj4gLSNpbmNsdWRlICJpby1wZ3RhYmxlLmgiCj4+ICsjaW5jbHVkZSA8eGVuL2FjcGkuaD4KPj4g KyNpbmNsdWRlIDx4ZW4vY29uZmlnLmg+Cj4+ICsjaW5jbHVkZSA8eGVuL2RlbGF5Lmg+Cj4+ICsj aW5jbHVkZSA8eGVuL2Vycm5vLmg+Cj4+ICsjaW5jbHVkZSA8eGVuL2Vyci5oPgo+PiArI2luY2x1 ZGUgPHhlbi9pcnEuaD4KPj4gKyNpbmNsdWRlIDx4ZW4vbGliLmg+Cj4+ICsjaW5jbHVkZSA8eGVu L2xpbnV4X2NvbXBhdC5oPgo+PiArI2luY2x1ZGUgPHhlbi9saXN0Lmg+Cj4+ICsjaW5jbHVkZSA8 eGVuL21tLmg+Cj4+ICsjaW5jbHVkZSA8eGVuL3JidHJlZS5oPgo+PiArI2luY2x1ZGUgPHhlbi9z Y2hlZC5oPgo+PiArI2luY2x1ZGUgPHhlbi9zaXplcy5oPgo+PiArI2luY2x1ZGUgPHhlbi92bWFw Lmg+Cj4+ICsjaW5jbHVkZSA8YWNwaS9hY3BpX2lvcnQuaD4KPj4gKyNpbmNsdWRlIDxhc20vYXRv bWljLmg+Cj4+ICsjaW5jbHVkZSA8YXNtL2RldmljZS5oPgo+PiArI2luY2x1ZGUgPGFzbS9pby5o Pgo+PiArI2luY2x1ZGUgPGFzbS9wbGF0Zm9ybS5oPgo+PiArCj4+ICsvKiBBbGlhcyB0byBYZW4g ZGV2aWNlIHRyZWUgaGVscGVycyAqLwo+PiArI2RlZmluZSBkZXZpY2Vfbm9kZSBkdF9kZXZpY2Vf bm9kZQo+PiArI2RlZmluZSBvZl9waGFuZGxlX2FyZ3MgZHRfcGhhbmRsZV9hcmdzCj4+ICsjZGVm aW5lIG9mX2RldmljZV9pZCBkdF9kZXZpY2VfbWF0Y2gKPj4gKyNkZWZpbmUgb2ZfbWF0Y2hfbm9k ZSBkdF9tYXRjaF9ub2RlCj4+ICsjZGVmaW5lIG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCBwbmFt ZSwgb3V0KSAKPj4gKCFkdF9wcm9wZXJ0eV9yZWFkX3UzMihucCwgcG5hbWUsIG91dCkpCj4+ICsj ZGVmaW5lIG9mX3Byb3BlcnR5X3JlYWRfYm9vbCBkdF9wcm9wZXJ0eV9yZWFkX2Jvb2wKPj4gKyNk ZWZpbmUgb2ZfcGFyc2VfcGhhbmRsZV93aXRoX2FyZ3MgZHRfcGFyc2VfcGhhbmRsZV93aXRoX2Fy Z3MKPj4gKwo+PiArLyogWGVuOiBIZWxwZXJzIHRvIGdldCBkZXZpY2UgTU1JTyBhbmQgSVJRcyAq Lwo+PiArc3RydWN0IHJlc291cmNlIHsKPj4gK8KgwqDCoCB1NjQgYWRkcjsKPj4gK8KgwqDCoCB1 NjQgc2l6ZTsKPj4gK8KgwqDCoCB1bnNpZ25lZCBpbnQgdHlwZTsKPj4gK307Cj4+ICsKPj4gKyNk ZWZpbmUgcmVzb3VyY2Vfc2l6ZShyZXMpICgocmVzKS0+c2l6ZSkKPj4gKwo+PiArI2RlZmluZSBw bGF0Zm9ybV9kZXZpY2UgZGV2aWNlCj4+ICsKPj4gKyNkZWZpbmUgSU9SRVNPVVJDRV9NRU0gMAo+ PiArI2RlZmluZSBJT1JFU09VUkNFX0lSUSAxCj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgcmVzb3Vy Y2UgKnBsYXRmb3JtX2dldF9yZXNvdXJjZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIAo+PiAqcGRl diwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHVuc2lnbmVkIGludCB0eXBlLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgaW50IG51bSkKPj4gK3sKPj4gK8KgwqDCoCAvKgo+ PiArwqDCoMKgwqAgKiBUaGUgcmVzb3VyY2UgaXMgb25seSB1c2VkIGJldHdlZW4gMiBjYWxscyBv ZiAKPj4gcGxhdGZvcm1fZ2V0X3Jlc291cmNlLgo+PiArwqDCoMKgwqAgKiBJdCdzIHF1aXRlIHVn bHkgYnV0IGl0J3MgYXZvaWQgdG8gYWRkIHRvbyBtdWNoIGNvZGUgaW4gdGhlIHBhcnQKPj4gK8Kg wqDCoMKgICogaW1wb3J0ZWQgZnJvbSBMaW51eAo+PiArwqDCoMKgwqAgKi8KPj4gK8KgwqDCoCBz dGF0aWMgc3RydWN0IHJlc291cmNlIHJlczsKPj4gK8KgwqDCoCBzdHJ1Y3QgYWNwaV9pb3J0X25v ZGUgKmlvcnRfbm9kZTsKPj4gK8KgwqDCoCBzdHJ1Y3QgYWNwaV9pb3J0X3NtbXVfdjMgKm5vZGVf c21tdV9kYXRhOwo+PiArwqDCoMKgIGludCByZXQgPSAwOwo+PiArCj4+ICvCoMKgwqAgcmVzLnR5 cGUgPSB0eXBlOwo+PiArCj4+ICvCoMKgwqAgc3dpdGNoICh0eXBlKSB7Cj4+ICvCoMKgwqAgY2Fz ZSBJT1JFU09VUkNFX01FTToKPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChwZGV2LT50eXBlID09IERF Vl9BQ1BJKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IDE7Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGlvcnRfbm9kZSA9IHBkZXYtPmFjcGlfbm9kZTsKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgbm9kZV9zbW11X2RhdGEgPQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIChzdHJ1Y3QgYWNwaV9pb3J0X3NtbXVfdjMgKilpb3J0X25vZGUtPm5vZGVfZGF0 YTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAobm9kZV9zbW11X2RhdGEgIT0g TlVMTCkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlcy5hZGRyID0gbm9k ZV9zbW11X2RhdGEtPmJhc2VfYWRkcmVzczsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCByZXMuc2l6ZSA9IFNaXzEyOEs7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcmV0ID0gMDsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+PiArwqDCoMKgwqDCoMKg wqAgfSBlbHNlIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gZHRfZGV2aWNlX2dl dF9hZGRyZXNzKGRldl90b19kdChwZGV2KSwgbnVtLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZyZXMuYWRkciwgJnJlcy5zaXplKTsK Pj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuICgocmV0 KSA/IE5VTEwgOiAmcmVzKTsKPj4gKwo+PiArwqDCoMKgIGNhc2UgSU9SRVNPVVJDRV9JUlE6Cj4+ ICvCoMKgwqDCoMKgwqDCoCAvKiBBQ1BJIGNhc2Ugbm90IGltcGxlbWVudGVkIGFzIHRoZXJlIGlz IG5vIHVzZSBjYXNlIGZvciBpdCAqLwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gcGxhdGZvcm1f Z2V0X2lycShkZXZfdG9fZHQocGRldiksIG51bSk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGlm IChyZXQgPCAwKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gTlVMTDsKPj4gKwo+ PiArwqDCoMKgwqDCoMKgwqAgcmVzLmFkZHIgPSByZXQ7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXMu c2l6ZSA9IDE7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAmcmVzOwo+PiArCj4+ICvC oMKgwqAgZGVmYXVsdDoKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBOVUxMOwo+PiArwqDCoMKg IH0KPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCAKPj4gY29uc3QgY2hhciAqbmFtZSkKPj4gK3sKPj4g K8KgwqDCoCBjb25zdCBzdHJ1Y3QgZHRfcHJvcGVydHkgKmR0cHJvcDsKPj4gK8KgwqDCoCBzdHJ1 Y3QgYWNwaV9pb3J0X25vZGUgKmlvcnRfbm9kZTsKPj4gK8KgwqDCoCBzdHJ1Y3QgYWNwaV9pb3J0 X3NtbXVfdjMgKm5vZGVfc21tdV9kYXRhOwo+PiArwqDCoMKgIGludCByZXQgPSAwOwo+PiArCj4+ ICvCoMKgwqAgaWYgKHBkZXYtPnR5cGUgPT0gREVWX0FDUEkpIHsKPj4gK8KgwqDCoMKgwqDCoMKg IGlvcnRfbm9kZSA9IHBkZXYtPmFjcGlfbm9kZTsKPj4gK8KgwqDCoMKgwqDCoMKgIG5vZGVfc21t dV9kYXRhID0gKHN0cnVjdCBhY3BpX2lvcnRfc21tdV92MyAKPj4gKilpb3J0X25vZGUtPm5vZGVf ZGF0YTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKG5vZGVfc21tdV9kYXRhICE9IE5VTEwp IHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKCFzdHJjbXAobmFtZSwgImV2ZW50cSIp KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IG5vZGVfc21tdV9kYXRh LT5ldmVudF9nc2l2Owo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbHNlIGlmICghc3RyY21w KG5hbWUsICJwcmlxIikpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0g bm9kZV9zbW11X2RhdGEtPnByaV9nc2l2Owo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbHNl IGlmICghc3RyY21wKG5hbWUsICJjbWRxLXN5bmMiKSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCByZXQgPSBub2RlX3NtbXVfZGF0YS0+c3luY19nc2l2Owo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBlbHNlIGlmICghc3RyY21wKG5hbWUsICJnZXJyb3IiKSkKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSBub2RlX3NtbXVfZGF0YS0+Z2Vycl9nc2l2 Owo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbHNlCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcmV0ID0gLUVJTlZBTDsKPj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDC oCB9IGVsc2Ugewo+PiArwqDCoMKgwqDCoMKgwqAgZHRwcm9wID0gZHRfZmluZF9wcm9wZXJ0eShk ZXZfdG9fZHQocGRldiksIAo+PiAiaW50ZXJydXB0LW5hbWVzIiwgTlVMTCk7Cj4+ICvCoMKgwqDC oMKgwqDCoCBpZiAoIWR0cHJvcCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1F SU5WQUw7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmICghZHRwcm9wLT52YWx1ZSkKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9EQVRBOwo+PiArwqDCoMKgIH0KPj4gKwo+ PiArwqDCoMKgIHJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gKy8qCj4+ICsgKiBYZW46IEhlbHBl cnMgZm9yIERNQSBhbGxvY2F0aW9uLiBKdXN0IHRoZSBmdW5jdGlvbiBuYW1lIGlzIHJldXNlZCAK Pj4gZm9yCj4+ICsgKiBwb3J0aW5nIGNvZGUgdGhlc2UgYWxsb2NhdGlvbiBhcmUgbm90IG1hbmFn ZWQgYWxsb2NhdGlvbnMKPj4gKyAqLwo+PiArCj4+ICtzdGF0aWMgdm9pZCAqZG1hbV9hbGxvY19j b2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnApCj4gSSBi ZWxpZXZlIHRoZSBmb3JtYXR0aW5nIG5lZWRzIHRvIGJlIGNoZWNrZWQuCj4+ICt7Cj4+ICvCoMKg wqAgdm9pZCAqdmFkZHI7Cj4+ICvCoMKgwqAgdW5zaWduZWQgbG9uZyBhbGlnbm1lbnQgPSBzaXpl Owo+PiArCj4+ICvCoMKgwqAgLyoKPj4gK8KgwqDCoMKgICogX3h6YWxsb2MgcmVxdWlyZXMgdGhh dCB0aGUgKGFsaWduICYgKGFsaWduIC0xKSkgPSAwLiBNb3N0IG9mIHRoZQo+PiArwqDCoMKgwqAg KiBhbGxvY2F0aW9ucyBpbiBTTU1VIGNvZGUgc2hvdWxkIHNlbmQgdGhlIHJpZ2h0IHZhbHVlIGZv ciAKPj4gc2l6ZS4gSW4KPj4gK8KgwqDCoMKgICogY2FzZSB0aGlzIGlzIG5vdCB0cnVlIHByaW50 IGEgd2FybmluZyBhbmQgYWxpZ24gdG8gdGhlIHNpemUgb2YgYQo+PiArwqDCoMKgwqAgKiAodm9p ZCAqKQo+PiArwqDCoMKgwqAgKi8KPj4gK8KgwqDCoCBpZiAoc2l6ZSAmIChzaXplIC0gMSkpIHsK Pj4gK8KgwqDCoMKgwqDCoMKgIGRldl93YXJuKGRldiwgIkZpeGluZyBhbGlnbm1lbnQgZm9yIHRo ZSBETUEgYnVmZmVyXG4iKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGFsaWdubWVudCA9IHNpemVvZih2 b2lkICopOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIHZhZGRyID0gX3h6YWxsb2Moc2l6 ZSwgYWxpZ25tZW50KTsKPj4gK8KgwqDCoCBpZiAoIXZhZGRyKSB7Cj4+ICvCoMKgwqDCoMKgwqDC oCBkZXZfZXJyKGRldiwgIkRNQSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7Cj4+ICvCoMKgwqDCoMKg wqDCoCByZXR1cm4gTlVMTDsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCAqZG1hX2hhbmRs ZSA9IHZpcnRfdG9fbWFkZHIodmFkZHIpOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIHZhZGRyOwo+ PiArfQo+PiArCj4+ICsKPj4gK3N0YXRpYyB2b2lkIGRtYW1fZnJlZV9jb2hlcmVudChzdHJ1Y3Qg ZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCB2b2lkIAo+PiAqdmFkZHIsCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKPiBzYW1lCj4+ICt7Cj4+ICvCoMKg wqAgeGZyZWUodmFkZHIpOwo+PiArfQo+PiArCj4+ICsvKiBYZW46IFN0dWIgb3V0IERNQSBkb21h aW4gcmVsYXRlZCBmdW5jdGlvbnMgKi8KPj4gKyNkZWZpbmUgaW9tbXVfZ2V0X2RtYV9jb29raWUo ZG9tKSAwCj4+ICsjZGVmaW5lIGlvbW11X3B1dF9kbWFfY29va2llKGRvbSkKPj4gKwo+PiArLyog WGVuOiBTdHViIG91dCBtb2R1bGUgcGFyYW0gcmVsYXRlZCBmdW5jdGlvbiAqLwo+PiArI2RlZmlu ZSBtb2R1bGVfcGFyYW1fbmFtZWQoYSwgYiwgYywgZCkKPj4gKyNkZWZpbmUgTU9EVUxFX1BBUk1f REVTQyhhLCBiKQo+PiArCj4+ICsjZGVmaW5lIGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoZCwg YikgMAo+PiArCj4+ICsjZGVmaW5lIG9mX2RtYV9pc19jb2hlcmVudChuKSAwCj4+ICsKPj4gKyNk ZWZpbmUgTU9EVUxFX0RFVklDRV9UQUJMRSh0eXBlLCBuYW1lKQo+PiArCj4+ICtzdGF0aWMgdm9p ZCBfX2lvbWVtICpkZXZtX2lvcmVtYXBfcmVzb3VyY2Uoc3RydWN0IGRldmljZSAqZGV2LAo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHJlc291 cmNlICpyZXMpCj4+ICt7Cj4+ICvCoMKgwqAgdm9pZCBfX2lvbWVtICpwdHI7Cj4+ICsKPj4gK8Kg wqDCoCBpZiAoIXJlcyB8fCByZXMtPnR5cGUgIT0gSU9SRVNPVVJDRV9NRU0pIHsKPj4gK8KgwqDC oMKgwqDCoMKgIGRldl9lcnIoZGV2LCAiSW52YWxpZCByZXNvdXJjZVxuIik7Cj4+ICvCoMKgwqDC oMKgwqDCoCByZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8Kg wqDCoCBwdHIgPSBpb3JlbWFwX25vY2FjaGUocmVzLT5hZGRyLCByZXMtPnNpemUpOwo+PiArwqDC oMKgIGlmICghcHRyKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKGRldiwKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgImlvcmVtYXAgZmFpbGVkIChhZGRyIDB4JSJQUkl4NjQiIHNpemUg MHglIlBSSXg2NCIpXG4iLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXMtPmFkZHIsIHJl cy0+c2l6ZSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPj4g K8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gcHRyOwo+PiArfQo+PiArCj4+ICsvKiBY ZW46IENvbXBhdGliaWxpdHkgZGVmaW5lIGZvciBpb21tdV9kb21haW5fZ2VvbWV0cnkuKi8KPj4g K3N0cnVjdCBpb21tdV9kb21haW5fZ2VvbWV0cnkgewo+PiArwqDCoMKgIGRtYV9hZGRyX3QgYXBl cnR1cmVfc3RhcnQ7IC8qIEZpcnN0IGFkZHJlc3MgdGhhdCBjYW4gYmUgCj4+IG1hcHBlZMKgwqDC oCAqLwo+PiArwqDCoMKgIGRtYV9hZGRyX3QgYXBlcnR1cmVfZW5kO8KgwqAgLyogTGFzdCBhZGRy ZXNzIHRoYXQgY2FuIGJlIAo+PiBtYXBwZWTCoMKgwqDCoCAqLwo+PiArwqDCoMKgIGJvb2wgZm9y Y2VfYXBlcnR1cmU7wqDCoMKgwqDCoMKgIC8qIERNQSBvbmx5IGFsbG93ZWQgaW4gbWFwcGFibGUg Cj4+IHJhbmdlPyAqLwo+PiArfTsKPj4gKwo+PiArCj4+ICsvKiBYZW46IFR5cGUgZGVmaW5pdGlv bnMgZm9yIGlvbW11X2RvbWFpbiAqLwo+PiArI2RlZmluZSBJT01NVV9ET01BSU5fVU5NQU5BR0VE IDAKPj4gKyNkZWZpbmUgSU9NTVVfRE9NQUlOX0RNQSAxCj4+ICsjZGVmaW5lIElPTU1VX0RPTUFJ Tl9JREVOVElUWSAyCj4+ICsKPj4gKy8qIFhlbjogRHVtbXkgaW9tbXVfZG9tYWluICovCj4+ICtz dHJ1Y3QgaW9tbXVfZG9tYWluIHsKPj4gK8KgwqDCoCAvKiBSdW50aW1lIFNNTVUgY29uZmlndXJh dGlvbiBmb3IgdGhpcyBpb21tdV9kb21haW4gKi8KPj4gK8KgwqDCoCBzdHJ1Y3QgYXJtX3NtbXVf ZG9tYWluwqDCoMKgwqDCoMKgwqAgKnByaXY7Cj4+ICvCoMKgwqAgdW5zaWduZWQgaW50IHR5cGU7 Cj4+ICsKPj4gK8KgwqDCoCAvKiBEdW1teSBjb21wYXRpYmlsaXR5IGRlZmluZXMgKi8KPj4gK8Kg wqDCoCB1bnNpZ25lZCBsb25nIHBnc2l6ZV9iaXRtYXA7Cj4+ICvCoMKgwqAgc3RydWN0IGlvbW11 X2RvbWFpbl9nZW9tZXRyeSBnZW9tZXRyeTsKPj4gKwo+PiArwqDCoMKgIGF0b21pY190IHJlZjsK Pj4gK8KgwqDCoCAvKgo+PiArwqDCoMKgwqAgKiBVc2VkIHRvIGxpbmsgaW9tbXVfZG9tYWluIGNv bnRleHRzIGZvciBhIHNhbWUgZG9tYWluLgo+PiArwqDCoMKgwqAgKiBUaGVyZSBpcyBhdCBsZWFz dCBvbmUgcGVyLVNNTVUgdG8gdXNlZCBieSB0aGUgZG9tYWluLgo+PiArwqDCoMKgwqAgKi8KPj4g K8KgwqDCoCBzdHJ1Y3QgbGlzdF9oZWFkwqDCoMKgwqDCoMKgwqAgbGlzdDsKPj4gK307Cj4+ICsK Pj4gKy8qIFhlbjogRGVzY3JpYmVzIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciBhIFhlbiBkb21h aW4gKi8KPj4gK3N0cnVjdCBhcm1fc21tdV94ZW5fZG9tYWluIHsKPj4gK8KgwqDCoCBzcGlubG9j a190wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsb2NrOwo+PiArwqDCoMKgIC8qIExpc3Qgb2YgaW9t bXUgZG9tYWlucyBhc3NvY2lhdGVkIHRvIHRoaXMgZG9tYWluICovCj4+ICvCoMKgwqAgc3RydWN0 IGxpc3RfaGVhZMKgwqDCoMKgwqDCoMKgIGNvbnRleHRzOwo+PiArfTsKPj4gKwo+PiArLyoKPj4g KyAqIFhlbjogSW5mb3JtYXRpb24gYWJvdXQgZWFjaCBkZXZpY2Ugc3RvcmVkIGluIGRldi0+YXJj aGRhdGEuaW9tbXUKPj4gKyAqCj4+ICsgKiBUaGUgZGV2LT5hcmNoZGF0YS5pb21tdSBzdG9yZXMg dGhlIGlvbW11X2RvbWFpbiAocnVudGltZSAKPj4gY29uZmlndXJhdGlvbiBvZgo+PiArICogdGhl IFNNTVUpLgo+PiArICovCj4+ICtzdHJ1Y3QgYXJtX3NtbXVfeGVuX2RldmljZSB7Cj4+ICvCoMKg wqAgc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluOwo+PiArfTsKPj4gKwo+IEFzIHRoaXMgaXMg YSB4ZW4gc3BlY2lmaWMgY29kZSwgY2FuIHRoZSB2YXJpYWJsZSBuYW1lcyBiZSB1c2VkIAo+IGFw cHJvcHJpYXRlbHkuCj4gUmVwZWF0aW5nIG15IGNvbW1lbnTCoCBmcm9tIGVhcmxpZXIgdmVyc2lv bi4KPiBhIGRvbWFpbiBpc8KgIHVzdWFsbHkgYSBWTSBpbiBYZW4uIFNvIGl0IGlzIGEgYml0IGNv bmZ1c2luZyB0byB1c2UgCj4gZG9tYWluIGZvciBpb21tdV9kb21haW4uCj4+ICsvKgo+PiArICog WGVuOiBpb19wZ3RhYmxlIGNvbXBhdGliaWxpdHkgZGVmaW5lcy4KPj4gKyAqIE1vc3Qgb2YgdGhl c2UgYXJlIHRvIHBvcnQgaW4gdGhlIFMxIHRyYW5zbGF0aW9uIGNvZGUgYXMgaXMuCj4+ICsgKi8K Pj4gK3N0cnVjdCBpb19wZ3RhYmxlX29wcyB7Cj4+ICt9Owo+PiArCj4+ICtzdHJ1Y3QgaW9tbXVf Z2F0aGVyX29wcyB7Cj4+ICvCoMKgwqAgdm9pZCAoKnRsYl9mbHVzaF9hbGwpKHZvaWQgKmNvb2tp ZSk7Cj4+ICvCoMKgwqAgdm9pZCAoKnRsYl9hZGRfZmx1c2gpKHVuc2lnbmVkIGxvbmcgaW92YSwg c2l6ZV90IHNpemUsIHNpemVfdCAKPj4gZ3JhbnVsZSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgYm9vbCBsZWFmLCB2b2lkICpjb29raWUpOwo+PiArwqDCoMKgIHZvaWQg KCp0bGJfc3luYykodm9pZCAqY29va2llKTsKPj4gK307Cj4+ICsKPj4gK3N0cnVjdCBpb19wZ3Rh YmxlX2NmZyB7Cj4+ICvCoMKgwqAgLyoKPj4gK8KgwqDCoMKgICogSU9fUEdUQUJMRV9RVUlSS19B Uk1fTlM6IChBUk0gZm9ybWF0cykgU2V0IE5TIGFuZCBOU1RBQkxFIAo+PiBiaXRzIGluCj4+ICvC oMKgwqDCoCAqwqDCoMKgIHN0YWdlIDEgUFRFcywgZm9yIGhhcmR3YXJlIHdoaWNoIGluc2lzdHMg b24gdmFsaWRhdGluZyB0aGVtCj4+ICvCoMKgwqDCoCAqwqDCoMKgIGV2ZW4gaW7CoMKgwqAgbm9u LXNlY3VyZSBzdGF0ZSB3aGVyZSB0aGV5IHNob3VsZCBub3JtYWxseSBiZSAKPj4gaWdub3JlZC4K Pj4gK8KgwqDCoMKgICoKPj4gK8KgwqDCoMKgICogSU9fUEdUQUJMRV9RVUlSS19OT19QRVJNUzog SWdub3JlIHRoZSBJT01NVV9SRUFELCBJT01NVV9XUklURSAKPj4gYW5kCj4+ICvCoMKgwqDCoCAq wqDCoMKgIElPTU1VX05PRVhFQyBmbGFncyBhbmQgbWFwIGV2ZXJ5dGhpbmcgd2l0aCBmdWxsIGFj Y2VzcywgZm9yCj4+ICvCoMKgwqDCoCAqwqDCoMKgIGhhcmR3YXJlIHdoaWNoIGRvZXMgbm90IGlt cGxlbWVudCB0aGUgcGVybWlzc2lvbnMgb2YgYSBnaXZlbgo+PiArwqDCoMKgwqAgKsKgwqDCoCBm b3JtYXQsIGFuZC9vciByZXF1aXJlcyBzb21lIGZvcm1hdC1zcGVjaWZpYyBkZWZhdWx0IHZhbHVl Lgo+PiArwqDCoMKgwqAgKgo+PiArwqDCoMKgwqAgKiBJT19QR1RBQkxFX1FVSVJLX1RMQklfT05f TUFQOiBJZiB0aGUgZm9ybWF0IGZvcmJpZHMgY2FjaGluZyAKPj4gaW52YWxpZAo+PiArwqDCoMKg wqAgKsKgwqDCoCAodW5tYXBwZWQpIGVudHJpZXMgYnV0IHRoZSBoYXJkd2FyZSBtaWdodCBkbyBz byBhbnl3YXksIAo+PiBwZXJmb3JtCj4+ICvCoMKgwqDCoCAqwqDCoMKgIFRMQiBtYWludGVuYW5j ZSB3aGVuIG1hcHBpbmcgYXMgd2VsbCBhcyB3aGVuIHVubWFwcGluZy4KPj4gK8KgwqDCoMKgICoK Pj4gK8KgwqDCoMKgICogSU9fUEdUQUJMRV9RVUlSS19BUk1fTVRLXzRHQjogKEFSTSB2N3MgZm9y bWF0KSBTZXQgYml0IDkgaW4gYWxsCj4+ICvCoMKgwqDCoCAqwqDCoMKgIFBURXMsIGZvciBNZWRp YXRlayBJT01NVXMgd2hpY2ggdHJlYXQgaXQgYXMgYSAzM3JkIGFkZHJlc3MgCj4+IGJpdAo+PiAr wqDCoMKgwqAgKsKgwqDCoCB3aGVuIHRoZSBTb0MgaXMgaW4gIjRHQiBtb2RlIiBhbmQgdGhleSBj YW4gb25seSBhY2Nlc3MgdGhlIAo+PiBoaWdoCj4+ICvCoMKgwqDCoCAqwqDCoMKgIHJlbWFwIG9m IERSQU0gKDB4MV8wMDAwMDAwMCB0byAweDFfZmZmZmZmZmYpLgo+PiArwqDCoMKgwqAgKgo+PiAr wqDCoMKgwqAgKiBJT19QR1RBQkxFX1FVSVJLX05PX0RNQTogR3VhcmFudGVlcyB0aGF0IHRoZSB0 YWJsZXMgd2lsbCBvbmx5IAo+PiBldmVyCj4+ICvCoMKgwqDCoCAqwqDCoMKgIGJlIGFjY2Vzc2Vk IGJ5IGEgZnVsbHkgY2FjaGUtY29oZXJlbnQgSU9NTVUgb3IgQ1BVIChlLmcuIAo+PiBmb3IgYQo+ PiArwqDCoMKgwqAgKsKgwqDCoCBzb2Z0d2FyZS1lbXVsYXRlZCBJT01NVSksIHN1Y2ggdGhhdCBw YWdldGFibGUgdXBkYXRlcyBuZWVkIAo+PiBub3QKPj4gK8KgwqDCoMKgICrCoMKgwqAgYmUgdHJl YXRlZCBhcyBleHBsaWNpdCBETUEgZGF0YS4KPj4gK8KgwqDCoMKgICovCj4+ICvCoMKgwqAgI2Rl ZmluZSBJT19QR1RBQkxFX1FVSVJLX0FSTV9OU8KgwqDCoMKgwqDCoMKgIEJJVCgwKQo+PiArwqDC oMKgICNkZWZpbmUgSU9fUEdUQUJMRV9RVUlSS19OT19QRVJNU8KgwqDCoCBCSVQoMSkKPj4gK8Kg wqDCoCAjZGVmaW5lIElPX1BHVEFCTEVfUVVJUktfVExCSV9PTl9NQVDCoMKgwqAgQklUKDIpCj4+ ICvCoMKgwqAgI2RlZmluZSBJT19QR1RBQkxFX1FVSVJLX0FSTV9NVEtfNEdCwqDCoMKgIEJJVCgz KQo+PiArwqDCoMKgICNkZWZpbmUgSU9fUEdUQUJMRV9RVUlSS19OT19ETUHCoMKgwqDCoMKgwqDC oCBCSVQoNCkKPj4gK8KgwqDCoCB1bnNpZ25lZCBsb25nwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBx dWlya3M7Cj4+ICvCoMKgwqAgdW5zaWduZWQgbG9uZ8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGdz aXplX2JpdG1hcDsKPj4gK8KgwqDCoCB1bnNpZ25lZCBpbnTCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGlhczsKPj4gK8KgwqDCoCB1bnNpZ25lZCBpbnTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9hczsK Pj4gK8KgwqDCoCBjb25zdCBzdHJ1Y3QgaW9tbXVfZ2F0aGVyX29wc8KgwqDCoCAqdGxiOwo+PiAr wqDCoMKgIHN0cnVjdCBkZXZpY2XCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICppb21tdV9kZXY7Cj4+ ICsKPj4gK8KgwqDCoCAvKiBMb3ctbGV2ZWwgZGF0YSBzcGVjaWZpYyB0byB0aGUgdGFibGUgZm9y bWF0ICovCj4+ICvCoMKgwqAgdW5pb24gewo+PiArwqDCoMKgwqDCoMKgwqAgc3RydWN0IHsKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTY0wqDCoMKgIHR0YnJbMl07Cj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHU2NMKgwqDCoCB0Y3I7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHU2 NMKgwqDCoCBtYWlyWzJdOwo+PiArwqDCoMKgwqDCoMKgwqAgfSBhcm1fbHBhZV9zMV9jZmc7Cj4+ ICsKPj4gK8KgwqDCoMKgwqDCoMKgIHN0cnVjdCB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHU2NMKgwqDCoCB2dHRicjsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTY0wqDCoMKgIHZ0 Y3I7Cj4+ICvCoMKgwqDCoMKgwqDCoCB9IGFybV9scGFlX3MyX2NmZzsKPj4gKwo+PiArwqDCoMKg wqDCoMKgwqAgc3RydWN0IHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTMywqDCoMKgIHR0 YnJbMl07Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUzMsKgwqDCoCB0Y3I7Cj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHUzMsKgwqDCoCBubXJyOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB1MzLCoMKgwqAgcHJycjsKPj4gK8KgwqDCoMKgwqDCoMKgIH0gYXJtX3Y3c19jZmc7Cj4+ ICvCoMKgwqAgfTsKPj4gK307Cj4+ICsKPj4gK2VudW0gaW9fcGd0YWJsZV9mbXQgewo+PiArwqDC oMKgIEFSTV8zMl9MUEFFX1MxLAo+PiArwqDCoMKgIEFSTV8zMl9MUEFFX1MyLAo+PiArwqDCoMKg IEFSTV82NF9MUEFFX1MxLAo+PiArwqDCoMKgIEFSTV82NF9MUEFFX1MyLAo+PiArwqDCoMKgIEFS TV9WN1MsCj4+ICvCoMKgwqAgSU9fUEdUQUJMRV9OVU1fRk1UUywKPj4gK307Cj4+ICsKPj4gKy8q Cj4+ICsgKiBYZW46IFRoZSBwZ3RhYmxlX29wcyBhcmUgdXNlZCBieSB0aGUgUzEgdHJhbnNsYXRp b25zLCBzbyByZXR1cm4gCj4+IHRoZSBkdW1teQo+PiArICogYWRkcmVzcy4KPj4gKyAqLwo+PiAr I2RlZmluZSBhbGxvY19pb19wZ3RhYmxlX29wcyhmLCBjLCBvKSAoKHN0cnVjdCBpb19wZ3RhYmxl X29wcyAqKTB4MSkKPj4gKyNkZWZpbmUgZnJlZV9pb19wZ3RhYmxlX29wcyhvKQo+PiArCj4+ICsv KiBYZW46IERlZmluZSB3cmFwcGVyIGZvciByZXF1ZXN0aW5nIElSUXMgKi8KPj4gKyNkZWZpbmUg SVJRRl9PTkVTSE9UIDAKPj4gKwo+PiArdHlwZWRlZiB2b2lkICgqaXJxX2hhbmRsZXJfdCkoaW50 LCB2b2lkICosIHN0cnVjdCBjcHVfdXNlcl9yZWdzICopOwo+PiArCj4+ICtzdGF0aWMgaW5saW5l IGludCBkZXZtX3JlcXVlc3RfaXJxKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IAo+ PiBpcnEsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaXJxX2hhbmRs ZXJfdCBoYW5kbGVyLCB1bnNpZ25lZCBsb25nIGlycWZsYWdzLAo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0IGNoYXIgKmRldm5hbWUsIHZvaWQgKmRldl9pZCkK Pj4gK3sKPj4gK8KgwqDCoCAvKgo+PiArwqDCoMKgwqAgKiBTTU1VdjMgaW1wbGVtZW50YXRpb24g Y2FuIHN1cHBvcnQgd2lyZWQgaW50ZXJydXB0IG91dHB1dHMgCj4+IHRoYXQgYXJlCj4+ICvCoMKg wqDCoCAqIGVkZ2UtdHJpZ2dlcmVkLiBTZXQgdGhlIGlycSB0eXBlIGFzIHBlciB0aGUgc3BlYy4K Pj4gK8KgwqDCoMKgICovCj4+ICvCoMKgwqAgaXJxX3NldF90eXBlKGlycSwgSVJRX1RZUEVfRURH RV9CT1RIKTsKPj4gK8KgwqDCoCByZXR1cm4gcmVxdWVzdF9pcnEoaXJxLCBpcnFmbGFncywgaGFu ZGxlciwgZGV2bmFtZSwgZGV2X2lkKTsKPj4gK30KPj4gKwo+PiArLyoKPj4gKyAqIFhlbiBkb2Vz IG5vdCBoYXZlIGEgY29uY2VwdCBvZiB0aHJlYWRlZCBpcnEsIGJ1dCB3ZSBjYW4gdXNlIAo+PiB0 YXNrbGV0cyB0bwo+PiArICogYWNoaWV2ZSB0aGUgZGVzaXJlZCBmdW5jdGlvbmFsaXR5IGFzIG5l ZWRlZC4KPj4gKyAqLwo+PiAraW50IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoc3RydWN0IGRl dmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgaXJxLCAKPj4gaXJxX2hhbmRsZXJfdCBoYW5kbGVyLAo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpcnFfaGFuZGxlcl90IHRocmVh ZF9mbiwgdW5zaWduZWQgbG9uZyBpcnFmbGFncywKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgY29uc3QgY2hhciAqZGV2bmFtZSwgdm9pZCAqZGV2X2lkKQo+PiArewo+PiAr wqDCoMKgIHJldHVybiBkZXZtX3JlcXVlc3RfaXJxKGRldiwgaXJxLCB0aHJlYWRfZm4sIGlycWZs YWdzLCBkZXZuYW1lLCAKPj4gZGV2X2lkKTsKPj4gK30KPj4gKwo+PiArLyogWGVuOiBUaGUgbXV0 ZXggaXMgdXNlZCBvbmx5IGR1cmluZyBpbml0aWFsaXphdGlvbiBzbyB0aGUgdHlwZWNhc3QgCj4+ IGlzIHNhZmUgKi8KPj4gKyNkZWZpbmUgbXV0ZXggc3BpbmxvY2sKPj4gKyNkZWZpbmUgbXV0ZXhf aW5pdCBzcGluX2xvY2tfaW5pdAo+PiArI2RlZmluZSBtdXRleF9sb2NrIHNwaW5fbG9jawo+PiAr I2RlZmluZSBtdXRleF91bmxvY2sgc3Bpbl91bmxvY2sKPj4gKwo+PiArI2RlZmluZSByZWFkeF9w b2xsX3RpbWVvdXQob3AsIGFkZHIsIHZhbCwgY29uZCwgc2xlZXBfdXMsIHRpbWVvdXRfdXMpIFwK Pj4gKyh7IFwKPj4gK8KgwqDCoCBzX3RpbWVfdCBkZWFkbGluZSA9IE5PVygpICsgTUlDUk9TRUNT KHRpbWVvdXRfdXMpOyBcCj4+ICvCoMKgwqAgZm9yICg7OykgeyBcCj4+ICvCoMKgwqDCoMKgwqDC oCAodmFsKSA9IG9wKGFkZHIpOyBcCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoY29uZCkgXAo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsgXAo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKE5P VygpID4gZGVhZGxpbmUpIHsgXAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAodmFsKSA9IG9w KGFkZHIpOyBcCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOyBcCj4+ICvCoMKgwqDC oMKgwqDCoCB9IFwKPj4gK8KgwqDCoCB1ZGVsYXkoc2xlZXBfdXMpOyBcCj4+ICvCoMKgwqAgfSBc Cj4+ICvCoMKgwqAgKGNvbmQpID8gMCA6IC1FVElNRURPVVQ7IFwKPj4gK30pCj4+ICsKPj4gKyNk ZWZpbmUgcmVhZGxfcmVsYXhlZF9wb2xsX3RpbWVvdXQoYWRkciwgdmFsLCBjb25kLCBkZWxheV91 cywgCj4+IHRpbWVvdXRfdXMpIFwKPj4gK8KgwqDCoCByZWFkeF9wb2xsX3RpbWVvdXQocmVhZGxf cmVsYXhlZCwgYWRkciwgdmFsLCBjb25kLCBkZWxheV91cywgCj4+IHRpbWVvdXRfdXMpCj4+ICsK Pj4gKyNkZWZpbmUgVkFfQklUUyAwIC8qIE9ubHkgbmVlZGVkIGZvciBTMSB0cmFuc2xhdGlvbnMg Ki8KPj4gwqAgwqAgLyogTU1JTyByZWdpc3RlcnMgKi8KPj4gwqAgI2RlZmluZSBBUk1fU01NVV9J RFIwwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDAKPj4gQEAgLTQzMyw2ICs4MTksNyBAQCBlbnVt IHByaV9yZXNwIHsKPj4gwqDCoMKgwqDCoCBQUklfUkVTUF9TVUNDLAo+PiDCoCB9Owo+PiDCoCAr I2lmIDAgLyogWGVuOiBObyBNU0kgc3VwcG9ydCBpbiB0aGlzIGl0ZXJhdGlvbiAqLwo+PiDCoCBl bnVtIGFybV9zbW11X21zaV9pbmRleCB7Cj4+IMKgwqDCoMKgwqAgRVZUUV9NU0lfSU5ERVgsCj4+ IMKgwqDCoMKgwqAgR0VSUk9SX01TSV9JTkRFWCwKPj4gQEAgLTQ1Nyw2ICs4NDQsNyBAQCBzdGF0 aWMgcGh5c19hZGRyX3QgCj4+IGFybV9zbW11X21zaV9jZmdbQVJNX1NNTVVfTUFYX01TSVNdWzNd ID0gewo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgQVJNX1NNTVVfUFJJUV9JUlFfQ0ZHMiwKPj4gwqDC oMKgwqDCoCB9LAo+PiDCoCB9Owo+PiArI2VuZGlmCj4+IMKgIMKgIHN0cnVjdCBhcm1fc21tdV9j bWRxX2VudCB7Cj4+IMKgwqDCoMKgwqAgLyogQ29tbW9uIGZpZWxkcyAqLwo+PiBAQCAtNTYxLDYg Kzk0OSw4IEBAIHN0cnVjdCBhcm1fc21tdV9zMl9jZmcgewo+PiDCoMKgwqDCoMKgIHUxNsKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2bWlkOwo+PiDCoMKgwqDCoMKgIHU2NMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2dHRicjsKPj4gwqDCoMKgwqDCoCB1NjTCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgdnRjcjsKPj4gK8KgwqDCoCAvKiBYZW46IERvbWFpbiBhc3Nv Y2lhdGVkIHRvIHRoaXMgY29uZmlndXJhdGlvbiAqLwo+PiArwqDCoMKgIHN0cnVjdCBkb21haW7C oMKgwqDCoMKgwqDCoMKgwqDCoMKgICpkb21haW47Cj4+IMKgIH07Cj4+IMKgIMKgIHN0cnVjdCBh cm1fc21tdV9zdHJ0YWJfZW50IHsKPj4gQEAgLTYzNSw5ICsxMDI1LDI1IEBAIHN0cnVjdCBhcm1f c21tdV9kZXZpY2Ugewo+PiDCoMKgwqDCoMKgIHN0cnVjdCBhcm1fc21tdV9zdHJ0YWJfY2ZnwqDC oMKgIHN0cnRhYl9jZmc7Cj4+IMKgIMKgwqDCoMKgwqAgLyogSU9NTVUgY29yZSBjb2RlIGhhbmRs ZSAqLwo+PiArI2lmIDAgLypYZW46IEdlbmVyaWMgaW9tbXVfZGV2aWNlIHJlZiBub3QgbmVlZGVk IGhlcmUgKi8KPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgaW9tbXVfZGV2aWNlwqDCoMKgwqDCoMKgwqAg aW9tbXU7Cj4+ICsjZW5kaWYKPiBJcyBpdCBjbGVhbiB0byBwdXQgI2lmIDAsIGNhbiB0aGlzIGxp bmUgYmUgZGVsZXRlZCBvciB1c2VkIHdpdGggYSAKPiBwcm9wZXIgbWFjcm8KPj4gK8KgwqDCoCAv KiBYZW46IE5lZWQgdG8ga2VlcCBhIGxpc3Qgb2YgU01NVSBkZXZpY2VzICovCj4+ICvCoMKgwqAg c3RydWN0IGxpc3RfaGVhZMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZXZpY2VzOwo+ PiArwqDCoMKgIC8qIFhlbjogVGFza2xldHMgZm9yIGhhbmRsaW5nIGV2dHMvZmF1bHRzIGFuZCBw Y2kgcGFnZSByZXF1ZXN0IAo+PiBJUlFzKi8KPj4gK8KgwqDCoCBzdHJ1Y3QgdGFza2xldMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgZXZ0cV90YXNrbGV0Owo+PiArwqDCoMKgIHN0cnVjdCB0YXNrbGV0 wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwcmlxX3Rhc2tsZXQ7Cj4+ICvCoMKgwqAgc3RydWN0IHRh c2tsZXTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbWJpbmVkX2lycV90YXNrbGV0Owo+PiDCoCB9 Owo+PiDCoCArLyogWGVuOiBLZWVwIGEgbGlzdCBvZiBkZXZpY2VzIGFzc29jaWF0ZWQgd2l0aCB0 aGlzIGRyaXZlciAqLwo+PiArc3RhdGljIERFRklORV9TUElOTE9DSyhhcm1fc21tdV9kZXZpY2Vz X2xvY2spOwo+PiArc3RhdGljIExJU1RfSEVBRChhcm1fc21tdV9kZXZpY2VzKTsKPj4gKy8qIFhl bjogSGVscGVyIGZvciBmaW5kaW5nIGEgZGV2aWNlIHVzaW5nIGZ3bm9kZSAqLwo+PiArc3RhdGlj Cj4+ICtzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICphcm1fc21tdV9nZXRfYnlfZndub2RlKHN0cnVj dCBmd25vZGVfaGFuZGxlIAo+PiAqZndub2RlKTsKPj4gKwo+PiArCj4+IMKgIC8qIFNNTVUgcHJp dmF0ZSBkYXRhIGZvciBlYWNoIG1hc3RlciAqLwo+PiDCoCBzdHJ1Y3QgYXJtX3NtbXVfbWFzdGVy X2RhdGEgewo+PiDCoMKgwqDCoMKgIHN0cnVjdCBhcm1fc21tdV9kZXZpY2XCoMKgwqDCoMKgwqDC oCAqc21tdTsKPj4gQEAgLTEyMzIsNyArMTYzOCw3IEBAIHN0YXRpYyB2b2lkIGFybV9zbW11X2hh bmRsZV9wcHIoc3RydWN0IAo+PiBhcm1fc21tdV9kZXZpY2UgKnNtbXUsIHU2NCAqZXZ0KQo+PiDC oCDCoMKgwqDCoMKgIGRldl9pbmZvKHNtbXUtPmRldiwgInVuZXhwZWN0ZWQgUFJJIHJlcXVlc3Qg cmVjZWl2ZWQ6XG4iKTsKPj4gwqDCoMKgwqDCoCBkZXZfaW5mbyhzbW11LT5kZXYsCj4+IC3CoMKg wqDCoMKgwqDCoMKgICJcdHNpZCAweCUwOHguMHglMDV4OiBbJXUlc10gJXNwcml2aWxlZ2VkICVz JXMlcyBhY2Nlc3MgYXQgCj4+IGlvdmEgMHglMDE2bGx4XG4iLAo+PiArwqDCoMKgwqDCoMKgwqDC oCAiXHRzaWQgMHglMDh4LjB4JTA1eDogWyV1JXNdICVzcHJpdmlsZWdlZCAlcyVzJXMgYWNjZXNz IGF0IAo+PiBpb3ZhICUjIiBQUkl4NjQgIlxuIiwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2lk LCBzc2lkLCBncnBpZCwgbGFzdCA/ICJMIiA6ICIiLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoCBl dnRbMF0gJiBQUklRXzBfUEVSTV9QUklWID8gIiIgOiAidW4iLAo+PiDCoMKgwqDCoMKgwqDCoMKg wqDCoCBldnRbMF0gJiBQUklRXzBfUEVSTV9SRUFEID8gIlIiIDogIiIsCj4+IEBAIC0xMzQyLDEw ICsxNzQ4LDIwIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCAKPj4gYXJtX3NtbXVfY29tYmluZWRfaXJx X3RocmVhZChpbnQgaXJxLCB2b2lkICpkZXYpCj4+IMKgwqDCoMKgwqAgcmV0dXJuIElSUV9IQU5E TEVEOwo+PiDCoCB9Cj4+IMKgICsvKiBYZW46IEZvcndhcmQgZGVmaW5lIGZvciBjb21iaW5lZF9p cnEgdGFza2xldCAqLwo+PiArc3RhdGljIHZvaWQgYXJtX3NtbXVfY29tYmluZWRfaXJxX3Rhc2ts ZXQodW5zaWduZWQgbG9uZyBkZXYpOwo+PiArCj4+IMKgIHN0YXRpYyBpcnFyZXR1cm5fdCBhcm1f c21tdV9jb21iaW5lZF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXYpCj4+IMKgIHsKPj4g K8KgwqDCoCAvKiBYZW46IE5lZWQgYW4gc21tdSByZWZlcmVuY2UgdG8gc2NoZWR1bGUgdGhlIHRh c2tsZXQgKi8KPj4gK8KgwqDCoCBzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11ID0gKHN0cnVj dCBhcm1fc21tdV9kZXZpY2UgKilkZXY7Cj4+ICsKPj4gwqDCoMKgwqDCoCBhcm1fc21tdV9nZXJy b3JfaGFuZGxlcihpcnEsIGRldik7Cj4+IMKgwqDCoMKgwqAgYXJtX3NtbXVfY21kcV9zeW5jX2hh bmRsZXIoaXJxLCBkZXYpOwo+PiArCj4+ICvCoMKgwqAgLypYZW46IE5vIHRocmVhZGVkIGlycS4g U28sIHNjaGVkdWxlIHRoZSByaWdodCB0YXNrbGV0Ki8KPj4gK8KgwqDCoCB0YXNrbGV0X3NjaGVk dWxlKCYoc21tdS0+Y29tYmluZWRfaXJxX3Rhc2tsZXQpKTsKPj4gKwo+PiDCoMKgwqDCoMKgIHJl dHVybiBJUlFfV0FLRV9USFJFQUQ7Cj4+IMKgIH0KPj4gwqAgQEAgLTEzNTgsNiArMTc3NCw2OSBA QCBzdGF0aWMgdm9pZCBfX2FybV9zbW11X3RsYl9zeW5jKHN0cnVjdCAKPj4gYXJtX3NtbXVfZGV2 aWNlICpzbW11KQo+PiDCoMKgwqDCoMKgIGFybV9zbW11X2NtZHFfaXNzdWVfY21kKHNtbXUsICZj bWQpOwo+PiDCoCB9Cj4+IMKgICsvKgo+PiArICogWGVuOiBEZWZpbmUgdGhlIElSUSBoYW5kbGVy cyBhbmQgdGFza2xldHMgZm9yIHhlbi4gVGhlIGxpbnV4IAo+PiBmdW5jdGlvbnMKPj4gKyAqIHdv dWxkIGJlIG1vZGlmaWVkIHRvIHVzZSB0aGUgZnVuY3Rpb25zIGRlZmluZWQgaW4gdGhlIGZvbGxv d2luZyAKPj4gY29kZS4KPj4gKyAqLwo+PiArCj4+ICtzdGF0aWMgdm9pZCBhcm1fc21tdV9ldnRx X3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkZXYpCj4+ICt7Cj4+ICvCoMKgwqAgLyogVGhlIElSUSBu dW1iZXIgaXMgbm90IHJlbGV2ZW50IGZvciB0aGUgZXZ0cSB0aHJlYWQgcHJvY2Vzc2luZyAqLwo+ PiArwqDCoMKgIGFybV9zbW11X2V2dHFfdGhyZWFkKDAsICh2b2lkICopZGV2KTsKPj4gK30KPj4g Kwo+PiArc3RhdGljIHZvaWQgYXJtX3NtbXVfcHJpcV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGV2 KQo+PiArewo+PiArwqDCoMKgIC8qIFRoZSBJUlEgbnVtYmVyIGlzIG5vdCByZWxldmVudCBmb3Ig dGhlIHByaXEgdGhyZWFkIHByb2Nlc3NpbmcgKi8KPj4gK8KgwqDCoCBhcm1fc21tdV9wcmlxX3Ro cmVhZCgwLCAodm9pZCAqKWRldik7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGFybV9zbW11 X2NvbWJpbmVkX2lycV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGV2KQo+PiArewo+PiArwqDCoMKg IC8qIFRoZSBJUlEgbnVtYmVyIGlzIG5vdCByZWxldmVudCBmb3IgdGhlIGNvbWJpbmVkIGlycSBo YW5kbGVyLiovCj4+ICvCoMKgwqAgYXJtX3NtbXVfY29tYmluZWRfaXJxX3RocmVhZCgwLCAodm9p ZCAqKWRldik7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGFybV9zbW11X2V2dHFfdGhyZWFk X3hlbihpbnQgaXJxLCB2b2lkICpkZXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKPj4gK3sKPj4gK8Kg wqDCoCBzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11ID0gKHN0cnVjdCBhcm1fc21tdV9kZXZp Y2UgKilkZXY7Cj4+ICsKPj4gK8KgwqDCoCB0YXNrbGV0X3NjaGVkdWxlKCYoc21tdS0+ZXZ0cV90 YXNrbGV0KSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGFybV9zbW11X3ByaXFfdGhyZWFk X3hlbihpbnQgaXJxLCB2b2lkICpkZXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKPj4gK3sKPj4gK8Kg wqDCoCBzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11ID0gKHN0cnVjdCBhcm1fc21tdV9kZXZp Y2UgKilkZXY7Cj4+ICsKPj4gK8KgwqDCoCB0YXNrbGV0X3NjaGVkdWxlKCYoc21tdS0+cHJpcV90 YXNrbGV0KSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGFybV9zbW11X2NtZHFfc3luY19o YW5kbGVyX3hlbihpbnQgaXJxLCB2b2lkICpkZXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKPj4gK3sK Pj4gK8KgwqDCoCBhcm1fc21tdV9jbWRxX3N5bmNfaGFuZGxlcihpcnEsIGRldik7Cj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyB2b2lkIGFybV9zbW11X2dlcnJvcl9oYW5kbGVyX3hlbihpbnQgaXJxLCB2 b2lkICpkZXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKPj4gK3sKPj4gK8KgwqDCoCBhcm1fc21tdV9n ZXJyb3JfaGFuZGxlcihpcnEsIGRldik7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGFybV9z bW11X2NvbWJpbmVkX2lycV9oYW5kbGVyX3hlbihpbnQgaXJxLCB2b2lkICpkZXYsCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgY3B1X3VzZXJf cmVncyAqcmVncykKPj4gK3sKPj4gK8KgwqDCoCBhcm1fc21tdV9jb21iaW5lZF9pcnFfaGFuZGxl cihpcnEsIGRldik7Cj4+ICt9Cj4+ICsKPj4gKyNkZWZpbmUgYXJtX3NtbXVfZXZ0cV90aHJlYWQg YXJtX3NtbXVfZXZ0cV90aHJlYWRfeGVuCj4+ICsjZGVmaW5lIGFybV9zbW11X3ByaXFfdGhyZWFk IGFybV9zbW11X3ByaXFfdGhyZWFkX3hlbgo+PiArI2RlZmluZSBhcm1fc21tdV9jbWRxX3N5bmNf aGFuZGxlciBhcm1fc21tdV9jbWRxX3N5bmNfaGFuZGxlcl94ZW4KPj4gKyNkZWZpbmUgYXJtX3Nt bXVfZ2Vycm9yX2hhbmRsZXIgYXJtX3NtbXVfZ2Vycm9yX2hhbmRsZXJfeGVuCj4+ICsjZGVmaW5l IGFybV9zbW11X2NvbWJpbmVkX2lycV9oYW5kbGVyIGFybV9zbW11X2NvbWJpbmVkX2lycV9oYW5k bGVyX3hlbgo+PiArCj4+IMKgIHN0YXRpYyB2b2lkIGFybV9zbW11X3RsYl9zeW5jKHZvaWQgKmNv b2tpZSkKPj4gwqAgewo+PiDCoMKgwqDCoMKgIHN0cnVjdCBhcm1fc21tdV9kb21haW4gKnNtbXVf ZG9tYWluID0gY29va2llOwo+PiBAQCAtMTQxNSw2ICsxODk0LDcgQEAgc3RhdGljIGNvbnN0IHN0 cnVjdCBpb21tdV9nYXRoZXJfb3BzIAo+PiBhcm1fc21tdV9nYXRoZXJfb3BzID0gewo+PiDCoMKg wqDCoMKgIC50bGJfc3luY8KgwqDCoCA9IGFybV9zbW11X3RsYl9zeW5jLAo+PiDCoCB9Owo+PiDC oCArI2lmIDAgLypYZW46IFVudXNlZCBmdW5jdGlvbmFsaXR5ICovCj4+IMKgIC8qIElPTU1VIEFQ SSAqLwo+PiDCoCBzdGF0aWMgYm9vbCBhcm1fc21tdV9jYXBhYmxlKGVudW0gaW9tbXVfY2FwIGNh cCkKPj4gwqAgewo+PiBAQCAtMTQyNyw2ICsxOTA3LDcgQEAgc3RhdGljIGJvb2wgYXJtX3NtbXVf Y2FwYWJsZShlbnVtIGlvbW11X2NhcCBjYXApCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4g ZmFsc2U7Cj4+IMKgwqDCoMKgwqAgfQo+PiDCoCB9Cj4+ICsjZW5kaWYKPj4gwqAgwqAgc3RhdGlj IHN0cnVjdCBpb21tdV9kb21haW4gKmFybV9zbW11X2RvbWFpbl9hbGxvYyh1bnNpZ25lZCB0eXBl KQo+PiDCoCB7Cj4+IEBAIC0xNTQ2LDkgKzIwMjcsMTYgQEAgc3RhdGljIGludCBhcm1fc21tdV9k b21haW5fZmluYWxpc2VfczIoc3RydWN0IAo+PiBhcm1fc21tdV9kb21haW4gKnNtbXVfZG9tYWlu LAo+PiDCoMKgwqDCoMKgIGlmICh2bWlkIDwgMCkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVy biB2bWlkOwo+PiDCoCAtwqDCoMKgIGNmZy0+dm1pZMKgwqDCoCA9ICh1MTYpdm1pZDsKPj4gLcKg wqDCoCBjZmctPnZ0dGJywqDCoMKgID0gcGd0YmxfY2ZnLT5hcm1fbHBhZV9zMl9jZmcudnR0YnI7 Cj4+IC3CoMKgwqAgY2ZnLT52dGNywqDCoMKgID0gcGd0YmxfY2ZnLT5hcm1fbHBhZV9zMl9jZmcu dnRjcjsKPj4gK8KgwqDCoCAvKgo+PiArwqDCoMKgwqAgKiBYZW46IEdldCB0aGUgdHRiciBhbmQg dnRjciB2YWx1ZXMKPj4gK8KgwqDCoMKgICogdnR0YnI6IFRoaXMgaXMgYSBzaGFyZWQgdmFsdWUg d2l0aCB0aGUgZG9tYWluIHBhZ2UgdGFibGUKPj4gK8KgwqDCoMKgICogdnRjcjogVGhlIFRDUiBz ZXR0aW5ncyBhcmUgdGhlIHNhbWUgYXMgQ1BVIHNpbmNlIHRoZSBwYWdlCj4+ICvCoMKgwqDCoCAq IHRhYmxlcyBhcmUgc2hhcmVkCj4+ICvCoMKgwqDCoCAqLwo+PiArCj4+ICvCoMKgwqAgY2ZnLT52 bWlkwqDCoMKgID0gdm1pZDsKPj4gK8KgwqDCoCBjZmctPnZ0dGJywqDCoMKgID0gcGFnZV90b19t YWRkcihjZmctPmRvbWFpbi0+YXJjaC5wMm0ucm9vdCk7Cj4+ICvCoMKgwqAgY2ZnLT52dGNywqDC oMKgID0gUkVBRF9TWVNSRUczMihWVENSX0VMMikgJiBTVFJUQUJfU1RFXzJfVlRDUl9NQVNLOwo+ PiDCoMKgwqDCoMKgIHJldHVybiAwOwo+PiDCoCB9Cj4+IMKgIEBAIC0xNjA0LDYgKzIwOTIsNyBA QCBzdGF0aWMgaW50IGFybV9zbW11X2RvbWFpbl9maW5hbGlzZShzdHJ1Y3QgCj4+IGlvbW11X2Rv bWFpbiAqZG9tYWluKQo+PiDCoMKgwqDCoMKgIGlmIChzbW11LT5mZWF0dXJlcyAmIEFSTV9TTU1V X0ZFQVRfQ09IRVJFTkNZKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcGd0YmxfY2ZnLnF1aXJrcyA9 IElPX1BHVEFCTEVfUVVJUktfTk9fRE1BOwo+PiDCoCArwqDCoMKgIC8qIFhlbjogcGd0Ymxfb3Bz IGdldHMgYW4gaW52YWxpZCBhZGRyZXNzICovCj4+IMKgwqDCoMKgwqAgcGd0Ymxfb3BzID0gYWxs b2NfaW9fcGd0YWJsZV9vcHMoZm10LCAmcGd0YmxfY2ZnLCBzbW11X2RvbWFpbik7Cj4+IMKgwqDC oMKgwqAgaWYgKCFwZ3RibF9vcHMpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT01F TTsKPj4gQEAgLTE3MjEsNiArMjIxMCw3IEBAIG91dF91bmxvY2s6Cj4+IMKgwqDCoMKgwqAgcmV0 dXJuIHJldDsKPj4gwqAgfQo+PiDCoCArI2lmIDAgLyogWGVuOiBVbnVzZWQgZnVuY3Rpb25hbGl0 eSAqLwo+IHNhbWUKPj4gwqAgc3RhdGljIGludCBhcm1fc21tdV9tYXAoc3RydWN0IGlvbW11X2Rv bWFpbiAqZG9tYWluLCB1bnNpZ25lZCBsb25nIAo+PiBpb3ZhLAo+PiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBwaHlzX2FkZHJfdCBwYWRkciwgc2l6ZV90IHNpemUsIGludCBwcm90KQo+PiDC oCB7Cj4+IEBAIC0xNzcyLDYgKzIyNjIsNyBAQCBzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlIAo+PiAq YXJtX3NtbXVfZ2V0X2J5X2Z3bm9kZShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKQo+PiDC oMKgwqDCoMKgIHB1dF9kZXZpY2UoZGV2KTsKPj4gwqDCoMKgwqDCoCByZXR1cm4gZGV2ID8gZGV2 X2dldF9kcnZkYXRhKGRldikgOiBOVUxMOwo+PiDCoCB9Cj4+ICsjZW5kaWYKPj4gwqAgwqAgc3Rh dGljIGJvb2wgYXJtX3NtbXVfc2lkX2luX3JhbmdlKHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNt bXUsIAo+PiB1MzIgc2lkKQo+PiDCoCB7Cj4+IEBAIC0xNzgzLDcgKzIyNzQsMTQgQEAgc3RhdGlj IGJvb2wgYXJtX3NtbXVfc2lkX2luX3JhbmdlKHN0cnVjdCAKPj4gYXJtX3NtbXVfZGV2aWNlICpz bW11LCB1MzIgc2lkKQo+PiDCoMKgwqDCoMKgIHJldHVybiBzaWQgPCBsaW1pdDsKPj4gwqAgfQo+ PiDCoCArLyogWGVuOiBVbnVzZWQgKi8KPj4gKyNpZiAwCj4+IMKgIHN0YXRpYyBzdHJ1Y3QgaW9t bXVfb3BzIGFybV9zbW11X29wczsKPj4gKyNlbmRpZgo+PiArCj4+ICsvKiBYZW46IFJlZGVmaW5l IGFybV9zbW11X29wcyB0byB3aGF0IGZ3c3BlYyBzaG91bGQgZXZhbHVhdGUgKi8KPj4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgaW9tbXVfb3BzIGFybV9zbW11X2lvbW11X29wczsKPj4gKyNkZWZpbmUg YXJtX3NtbXVfb3BzIGFybV9zbW11X2lvbW11X29wcwo+PiDCoCDCoCBzdGF0aWMgaW50IGFybV9z bW11X2FkZF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQo+PiDCoCB7Cj4+IEBAIC0xNzkxLDgg KzIyODksMTEgQEAgc3RhdGljIGludCBhcm1fc21tdV9hZGRfZGV2aWNlKHN0cnVjdCBkZXZpY2Ug Cj4+ICpkZXYpCj4+IMKgwqDCoMKgwqAgc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdTsKPj4g wqDCoMKgwqDCoCBzdHJ1Y3QgYXJtX3NtbXVfbWFzdGVyX2RhdGEgKm1hc3RlcjsKPj4gwqDCoMKg wqDCoCBzdHJ1Y3QgaW9tbXVfZndzcGVjICpmd3NwZWMgPSBkZXYtPmlvbW11X2Z3c3BlYzsKPj4g KyNpZiAwIC8qWGVuOiBpb21tdV9ncm91cCBpcyBub3QgbmVlZGVkICovCj4+IMKgwqDCoMKgwqAg c3RydWN0IGlvbW11X2dyb3VwICpncm91cDsKPj4gKyNlbmRpZgo+PiDCoCArwqDCoMKgIC8qIFhl bjogZndzcGVjLT5vcHMgYXJlIG5vdCBuZWVkZWQgKi8KPj4gwqDCoMKgwqDCoCBpZiAoIWZ3c3Bl YyB8fCBmd3NwZWMtPm9wcyAhPSAmYXJtX3NtbXVfb3BzKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAg cmV0dXJuIC1FTk9ERVY7Cj4+IMKgwqDCoMKgwqAgLyoKPj4gQEAgLTE4MzAsNiArMjMzMSwxMSBA QCBzdGF0aWMgaW50IGFybV9zbW11X2FkZF9kZXZpY2Uoc3RydWN0IGRldmljZSAKPj4gKmRldikK Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gwqDCoMKgwqDCoCB9Cj4+IMKgICsvKgo+PiArICog WGVuOiBEbyBub3QgbmVlZCBhbiBpb21tdSBncm91cCBhcyB0aGUgc3RyZWFtIGRhdGEgaXMgY2Fy cmllZCBieSAKPj4gdGhlIFNNTVUKPj4gKyAqIG1hc3RlciBkZXZpY2Ugb2JqZWN0Cj4+ICsgKi8K Pj4gKyNpZiAwCj4+IMKgwqDCoMKgwqAgZ3JvdXAgPSBpb21tdV9ncm91cF9nZXRfZm9yX2Rldihk ZXYpOwo+PiDCoMKgwqDCoMKgIGlmICghSVNfRVJSKGdyb3VwKSkgewo+PiDCoMKgwqDCoMKgwqDC oMKgwqAgaW9tbXVfZ3JvdXBfcHV0KGdyb3VwKTsKPj4gQEAgLTE4MzcsOCArMjM0MywxNiBAQCBz dGF0aWMgaW50IGFybV9zbW11X2FkZF9kZXZpY2Uoc3RydWN0IGRldmljZSAKPj4gKmRldikKPj4g wqDCoMKgwqDCoCB9Cj4+IMKgIMKgwqDCoMKgwqAgcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhncm91 cCk7Cj4+ICsjZW5kaWYKPj4gK8KgwqDCoCByZXR1cm4gMDsKPj4gwqAgfQo+PiDCoCArLyoKPj4g KyAqIFhlbjogV2UgY2FuIHBvdGVudGlhbGx5IHN1cHBvcnQgdGhpcyBmdW5jdGlvbiBhbmQgZGVz dHJveSBhIAo+PiBkZXZpY2UuIFRoaXMKPj4gKyAqIHdpbGwgYmUgcmVsZXZhbnQgZm9yIFBDSSBo b3RwbHVnLiBTbywgd2lsbCBiZSBpbXBsZW1lbnRlZCBhcyAKPj4gbmVlZGVkIGFmdGVyCj4+ICsg KiBwYXNzdGhyb3VnaCBzdXBwb3J0IGlzIGF2YWlsYWJsZS4KPj4gKyAqLwo+PiArI2lmIDAKPj4g wqAgc3RhdGljIHZvaWQgYXJtX3NtbXVfcmVtb3ZlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYp Cj4+IMKgIHsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgaW9tbXVfZndzcGVjICpmd3NwZWMgPSBkZXYt PmlvbW11X2Z3c3BlYzsKPj4gQEAgLTE5NzQsNiArMjQ4OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW9t bXVfb3BzIGFybV9zbW11X29wcyA9IHsKPj4gwqDCoMKgwqDCoCAucHV0X3Jlc3ZfcmVnaW9uc8Kg wqDCoCA9IGFybV9zbW11X3B1dF9yZXN2X3JlZ2lvbnMsCj4+IMKgwqDCoMKgwqAgLnBnc2l6ZV9i aXRtYXDCoMKgwqDCoMKgwqDCoCA9IC0xVUwsIC8qIFJlc3RyaWN0ZWQgZHVyaW5nIGRldmljZSAK Pj4gYXR0YWNoICovCj4+IMKgIH07Cj4+ICsjZW5kaWYKPj4gwqAgwqAgLyogUHJvYmluZyBhbmQg aW5pdGlhbGlzYXRpb24gZnVuY3Rpb25zICovCj4+IMKgIHN0YXRpYyBpbnQgYXJtX3NtbXVfaW5p dF9vbmVfcXVldWUoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSwKPj4gQEAgLTIxODIsNiAr MjY5Nyw3IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfdXBkYXRlX2dicGEoc3RydWN0IAo+PiBhcm1f c21tdV9kZXZpY2UgKnNtbXUsIHUzMiBzZXQsIHUzMiBjbHIpCj4+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMSwgQVJNX1NNTVVfUE9MTF9USU1FT1VUX1VT KTsKPj4gwqAgfQo+PiDCoCArI2lmIDAgLyogWGVuOiBUaGVyZSBpcyBubyBNU0kgc3VwcG9ydCBh cyB5ZXQgKi8KPj4gwqAgc3RhdGljIHZvaWQgYXJtX3NtbXVfZnJlZV9tc2lzKHZvaWQgKmRhdGEp Cj4+IMKgIHsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkYXRhOwo+PiBAQCAt MjI0NywxMiArMjc2MywxNSBAQCBzdGF0aWMgdm9pZCBhcm1fc21tdV9zZXR1cF9tc2lzKHN0cnVj dCAKPj4gYXJtX3NtbXVfZGV2aWNlICpzbW11KQo+PiDCoMKgwqDCoMKgIC8qIEFkZCBjYWxsYmFj ayB0byBmcmVlIE1TSXMgb24gdGVhcmRvd24gKi8KPj4gwqDCoMKgwqDCoCBkZXZtX2FkZF9hY3Rp b24oZGV2LCBhcm1fc21tdV9mcmVlX21zaXMsIGRldik7Cj4+IMKgIH0KPj4gKyNlbmRpZgo+PiDC oCDCoCBzdGF0aWMgdm9pZCBhcm1fc21tdV9zZXR1cF91bmlxdWVfaXJxcyhzdHJ1Y3QgYXJtX3Nt bXVfZGV2aWNlICpzbW11KQo+PiDCoCB7Cj4+IMKgwqDCoMKgwqAgaW50IGlycSwgcmV0Owo+PiDC oCArI2lmIDAgLypYZW46IENhbm5vdCBzZXR1cCBtc2lzIGZvciBub3cgKi8KPj4gwqDCoMKgwqDC oCBhcm1fc21tdV9zZXR1cF9tc2lzKHNtbXUpOwo+PiArI2VuZGlmCj4+IMKgIMKgwqDCoMKgwqAg LyogUmVxdWVzdCBpbnRlcnJ1cHQgbGluZXMgKi8KPj4gwqDCoMKgwqDCoCBpcnEgPSBzbW11LT5l dnRxLnEuaXJxOwo+PiBAQCAtMjMxNiw5ICsyODM1LDEzIEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVf c2V0dXBfaXJxcyhzdHJ1Y3QgCj4+IGFybV9zbW11X2RldmljZSAqc21tdSkKPj4gwqDCoMKgwqDC oMKgwqDCoMKgwqAgKiBDYXZpdW0gVGh1bmRlclgyIGltcGxlbWVudGF0aW9uIGRvZXNuJ3Qgbm90 IHN1cHBvcnQgdW5pcXVlCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgICogaXJxIGxpbmVzLiBVc2Ug c2luZ2xlIGlycSBsaW5lIGZvciBhbGwgdGhlIFNNTVV2MyAKPj4gaW50ZXJydXB0cy4KPj4gwqDC oMKgwqDCoMKgwqDCoMKgwqAgKi8KPj4gLcKgwqDCoMKgwqDCoMKgIHJldCA9IGRldm1fcmVxdWVz dF90aHJlYWRlZF9pcnEoc21tdS0+ZGV2LCBpcnEsCj4+ICvCoMKgwqDCoMKgwqDCoCAvKgo+PiAr wqDCoMKgwqDCoMKgwqDCoCAqIFhlbjogRG9lcyBub3Qgc3VwcG9ydCB0aHJlYWRlZCBpcnFzLCBz byBzZXJpYWxpc2UgdGhlIHNldHVwLgo+PiArwqDCoMKgwqDCoMKgwqDCoCAqIFRoaXMgaXMgdGhl IHNhbWUgZm9yIHByaXMgYW5kIGV2ZW50IGludGVycnVwdCBsaW5lcyBvbiBvdGhlcgo+PiArwqDC oMKgwqDCoMKgwqDCoCAqIHN5c3RlbXMKPj4gK8KgwqDCoMKgwqDCoMKgwqAgKi8KPj4gK8KgwqDC oMKgwqDCoMKgIHJldCA9IGRldm1fcmVxdWVzdF9pcnEoc21tdS0+ZGV2LCBpcnEsCj4+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhcm1fc21tdV9jb21iaW5lZF9p cnFfaGFuZGxlciwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFy bV9zbW11X2NvbWJpbmVkX2lycV90aHJlYWQsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBJUlFGX09ORVNIT1QsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAiYXJtLXNtbXUtdjMtY29tYmluZWQtaXJxIiwgc21tdSk7Cj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAocmV0IDwgMCkKPj4gQEAgLTI0NTIsNiArMjk3NSwxMyBA QCBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9yZXNldChzdHJ1Y3QgCj4+IGFybV9zbW11X2Rl dmljZSAqc21tdSwgYm9vbCBieXBhc3MpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0 Owo+PiDCoMKgwqDCoMKgIH0KPj4gwqAgK8KgwqDCoCAvKiBYZW46IEluaXRpYWxpemUgdGFza2xl dHMgKi8KPj4gK8KgwqDCoCB0YXNrbGV0X2luaXQoJnNtbXUtPmV2dHFfdGFza2xldCwgYXJtX3Nt bXVfZXZ0cV90YXNrbGV0LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAodW5zaWduZWQgbG9u ZylzbW11KTsKPj4gK8KgwqDCoCB0YXNrbGV0X2luaXQoJnNtbXUtPnByaXFfdGFza2xldCwgYXJt X3NtbXVfcHJpcV90YXNrbGV0LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAodW5zaWduZWQg bG9uZylzbW11KTsKPj4gK8KgwqDCoCB0YXNrbGV0X2luaXQoJnNtbXUtPmNvbWJpbmVkX2lycV90 YXNrbGV0LCAKPj4gYXJtX3NtbXVfY29tYmluZWRfaXJxX3Rhc2tsZXQsCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICh1bnNpZ25lZCBsb25nKXNtbXUpOwo+PiDCoCDCoMKgwqDCoMKgIC8qIEVu YWJsZSB0aGUgU01NVSBpbnRlcmZhY2UsIG9yIGVuc3VyZSBieXBhc3MgKi8KPj4gwqDCoMKgwqDC oCBpZiAoIWJ5cGFzcyB8fCBkaXNhYmxlX2J5cGFzcykgewo+PiBAQCAtMjU0Miw4ICszMDcyLDE0 IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX2h3X3Byb2JlKHN0cnVjdCAKPj4gYXJtX3Nt bXVfZGV2aWNlICpzbW11KQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgc21tdS0+ZmVhdHVyZXMgfD0g QVJNX1NNTVVfRkVBVF9TVEFMTFM7Cj4+IMKgwqDCoMKgwqAgfQo+PiDCoCArLyoKPj4gKyAqIFhl bjogQmxvY2sgc3RhZ2UgMSB0cmFuc2xhdGlvbnMuIEJ5IGRvaW5nIHRoaXMgaGVyZSB3ZSBkbyBu b3QgCj4+IG5lZWQgdG8gc2V0IHRoZQo+PiArICogZG9tYWluLT5zdGFnZSBleHBsaWNpdGx5Lgo+ PiArICovCj4+ICsjaWYgMAo+PiDCoMKgwqDCoMKgIGlmIChyZWcgJiBJRFIwX1MxUCkKPj4gwqDC oMKgwqDCoMKgwqDCoMKgIHNtbXUtPmZlYXR1cmVzIHw9IEFSTV9TTU1VX0ZFQVRfVFJBTlNfUzE7 Cj4+ICsjZW5kaWYKPj4gwqAgwqDCoMKgwqDCoCBpZiAocmVnICYgSURSMF9TMlApCj4+IMKgwqDC oMKgwqDCoMKgwqDCoCBzbW11LT5mZWF0dXJlcyB8PSBBUk1fU01NVV9GRUFUX1RSQU5TX1MyOwo+ PiBAQCAtMjYxNiwxMCArMzE1MiwxMiBAQCBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9od19w cm9iZShzdHJ1Y3QgCj4+IGFybV9zbW11X2RldmljZSAqc21tdSkKPj4gwqDCoMKgwqDCoCBpZiAo cmVnICYgSURSNV9HUkFONEspCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBzbW11LT5wZ3NpemVfYml0 bWFwIHw9IFNaXzRLIHwgU1pfMk0gfCBTWl8xRzsKPj4gwqAgKyNpZiAwIC8qIFhlbjogU01NVSBv cHMgZG8gbm90IGhhdmUgYSBwZ3NpemVfYml0bWFwIG1lbWJlciBmb3IgWGVuICovCj4+IMKgwqDC oMKgwqAgaWYgKGFybV9zbW11X29wcy5wZ3NpemVfYml0bWFwID09IC0xVUwpCj4+IMKgwqDCoMKg wqDCoMKgwqDCoCBhcm1fc21tdV9vcHMucGdzaXplX2JpdG1hcCA9IHNtbXUtPnBnc2l6ZV9iaXRt YXA7Cj4+IMKgwqDCoMKgwqAgZWxzZQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgYXJtX3NtbXVfb3Bz LnBnc2l6ZV9iaXRtYXAgfD0gc21tdS0+cGdzaXplX2JpdG1hcDsKPj4gKyNlbmRpZgo+PiDCoCDC oMKgwqDCoMKgIC8qIE91dHB1dCBhZGRyZXNzIHNpemUgKi8KPj4gwqDCoMKgwqDCoCBzd2l0Y2gg KHJlZyAmIElEUjVfT0FTX01BU0sgPDwgSURSNV9PQVNfU0hJRlQpIHsKPj4gQEAgLTI2ODAsNyAr MzIxOCw4IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX2FjcGlfcHJvYmUoc3RydWN0IAo+ PiBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCj4+IMKgwqDCoMKgwqAgc3RydWN0IGRldmljZSAqZGV2 ID0gc21tdS0+ZGV2Owo+PiDCoMKgwqDCoMKgIHN0cnVjdCBhY3BpX2lvcnRfbm9kZSAqbm9kZTsK Pj4gwqAgLcKgwqDCoCBub2RlID0gKihzdHJ1Y3QgYWNwaV9pb3J0X25vZGUgKiopZGV2X2dldF9w bGF0ZGF0YShkZXYpOwo+PiArwqDCoMKgIC8qIFhlbjogTW9kaWZpY2F0aW9uIHRvIGdldCBpb3J0 X25vZGUgKi8KPj4gK8KgwqDCoCBub2RlID0gKHN0cnVjdCBhY3BpX2lvcnRfbm9kZSAqKWRldi0+ YWNwaV9ub2RlOwo+PiDCoCDCoMKgwqDCoMKgIC8qIFJldHJpZXZlIFNNTVV2MyBzcGVjaWZpYyBk YXRhICovCj4+IMKgwqDCoMKgwqAgaW9ydF9zbW11ID0gKHN0cnVjdCBhY3BpX2lvcnRfc21tdV92 MyAqKW5vZGUtPm5vZGVfZGF0YTsKPj4gQEAgLTI3MDMsNyArMzI0Miw3IEBAIHN0YXRpYyBpbmxp bmUgaW50IAo+PiBhcm1fc21tdV9kZXZpY2VfYWNwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2LAo+PiDCoCBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9kdF9wcm9iZShzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSkKPj4gwqAgewo+PiAt wqDCoMKgIHN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4+ICvCoMKgwqAgc3RydWN0 IGRldmljZSAqZGV2ID0gcGRldjsKPj4gwqDCoMKgwqDCoCB1MzIgY2VsbHM7Cj4+IMKgwqDCoMKg wqAgaW50IHJldCA9IC1FSU5WQUw7Cj4+IMKgIEBAIC0yNzE2LDYgKzMyNTUsNyBAQCBzdGF0aWMg aW50IGFybV9zbW11X2RldmljZV9kdF9wcm9iZShzdHJ1Y3QgCj4+IHBsYXRmb3JtX2RldmljZSAq cGRldiwKPj4gwqAgwqDCoMKgwqDCoCBwYXJzZV9kcml2ZXJfb3B0aW9ucyhzbW11KTsKPj4gwqAg K8KgwqDCoCAvKiBYZW46IG9mX2RtYV9pc19jb2hlcmVudCBpcyBhIHN0dWIgdGlsbCBkdCBzdXBw b3J0IGlzIAo+PiBpbnRyb2R1Y2VkICovCj4+IMKgwqDCoMKgwqAgaWYgKG9mX2RtYV9pc19jb2hl cmVudChkZXYtPm9mX25vZGUpKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgc21tdS0+ZmVhdHVyZXMg fD0gQVJNX1NNTVVfRkVBVF9DT0hFUkVOQ1k7Cj4+IMKgIEBAIC0yNzM0LDkgKzMyNzQsMTEgQEAg c3RhdGljIGludCBhcm1fc21tdV9kZXZpY2VfcHJvYmUoc3RydWN0IAo+PiBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYpCj4+IMKgIHsKPj4gwqDCoMKgwqDCoCBpbnQgaXJxLCByZXQ7Cj4+IMKgwqDCoMKg wqAgc3RydWN0IHJlc291cmNlICpyZXM7Cj4+ICsjaWYgMCAvKlhlbjogRG8gbm90IG5lZWQgdG8g c2V0dXAgc3lzZnMgKi8KPj4gwqDCoMKgwqDCoCByZXNvdXJjZV9zaXplX3QgaW9hZGRyOwo+PiAr I2VuZGlmCj4+IMKgwqDCoMKgwqAgc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdTsKPj4gLcKg wqDCoCBzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Owo+PiArwqDCoMKgIHN0cnVjdCBk ZXZpY2UgKmRldiA9IHBkZXY7LyogWGVuOiBkZXYgaXMgaWdub3JlZCAqLwo+PiDCoMKgwqDCoMKg IGJvb2wgYnlwYXNzOwo+PiDCoCDCoMKgwqDCoMKgIHNtbXUgPSBkZXZtX2t6YWxsb2MoZGV2LCBz aXplb2YoKnNtbXUpLCBHRlBfS0VSTkVMKTsKPj4gQEAgLTI3NjMsNyArMzMwNSw5IEBAIHN0YXRp YyBpbnQgYXJtX3NtbXVfZGV2aWNlX3Byb2JlKHN0cnVjdCAKPj4gcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2X2VycihkZXYsICJNTUlPIHJlZ2lvbiB0b28g c21hbGwgKCVwcilcbiIsIHJlcyk7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZB TDsKPj4gwqDCoMKgwqDCoCB9Cj4+ICsjaWYgMCAvKlhlbjogRG8gbm90IG5lZWQgdG8gc2V0dXAg c3lzZnMgKi8KPj4gwqDCoMKgwqDCoCBpb2FkZHIgPSByZXMtPnN0YXJ0Owo+PiArI2VuZGlmCj4+ IMKgIMKgwqDCoMKgwqAgc21tdS0+YmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJl cyk7Cj4+IMKgwqDCoMKgwqAgaWYgKElTX0VSUihzbW11LT5iYXNlKSkKPj4gQEAgLTI4MDIsMTMg KzMzNDYsMTggQEAgc3RhdGljIGludCBhcm1fc21tdV9kZXZpY2VfcHJvYmUoc3RydWN0IAo+PiBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+ PiDCoCDCoMKgwqDCoMKgIC8qIFJlY29yZCBvdXIgcHJpdmF0ZSBkZXZpY2Ugc3RydWN0dXJlICov Cj4+ICvCoMKgwqAgLyogWGVuOiBTTU1VIGlzIG5vdCB0cmVhdGVkIGEgYSBwbGF0Zm9ybSBkZXZp Y2UqLwo+PiArI2lmIDAKPj4gwqDCoMKgwqDCoCBwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBz bW11KTsKPj4gKyNlbmRpZgo+PiDCoCDCoMKgwqDCoMKgIC8qIFJlc2V0IHRoZSBkZXZpY2UgKi8K Pj4gwqDCoMKgwqDCoCByZXQgPSBhcm1fc21tdV9kZXZpY2VfcmVzZXQoc21tdSwgYnlwYXNzKTsK Pj4gwqDCoMKgwqDCoCBpZiAocmV0KQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsK Pj4gwqAgKy8qIFhlbjogTm90IGNyZWF0aW5nIGFuIElPTU1VIGRldmljZSBsaXN0IGZvciBYZW4g Ki8KPj4gKyNpZiAwCj4+IMKgwqDCoMKgwqAgLyogQW5kIHdlJ3JlIHVwLiBHbyBnbyBnbyEgKi8K Pj4gwqDCoMKgwqDCoCByZXQgPSBpb21tdV9kZXZpY2Vfc3lzZnNfYWRkKCZzbW11LT5pb21tdSwg ZGV2LCBOVUxMLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAic21tdTMuJXBhIiwgJmlvYWRkcik7Cj4+IEBAIC0yODQ0LDkgKzMzOTMsMjAgQEAgc3RhdGlj IGludCBhcm1fc21tdV9kZXZpY2VfcHJvYmUoc3RydWN0IAo+PiBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAocmV0KQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCByZXR1cm4gcmV0Owo+PiDCoMKgwqDCoMKgIH0KPj4gKyNlbmRpZgo+PiArwqDCoMKg IC8qCj4+ICvCoMKgwqDCoCAqIFhlbjogS2VlcCBhIGxpc3Qgb2YgYWxsIHByb2JlZCBkZXZpY2Vz LiBUaGlzIHdpbGwgYmUgdXNlZCB0byAKPj4gcXVlcnkKPj4gK8KgwqDCoMKgICogdGhlIHNtbXUg ZGV2aWNlcyBiYXNlZCBvbiB0aGUgZndub2RlLgo+PiArwqDCoMKgwqAgKi8KPj4gK8KgwqDCoCBJ TklUX0xJU1RfSEVBRCgmc21tdS0+ZGV2aWNlcyk7Cj4+ICvCoMKgwqAgc3Bpbl9sb2NrKCZhcm1f c21tdV9kZXZpY2VzX2xvY2spOwo+PiArwqDCoMKgIGxpc3RfYWRkKCZzbW11LT5kZXZpY2VzLCAm YXJtX3NtbXVfZGV2aWNlcyk7Cj4+ICvCoMKgwqAgc3Bpbl91bmxvY2soJmFybV9zbW11X2Rldmlj ZXNfbG9jayk7Cj4+IMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4+IMKgIH0KPj4gwqAgKy8qIFhlbjog VW51c2VkIGZ1bmN0aW9uICovCj4+ICsjaWYgMAo+PiDCoCBzdGF0aWMgaW50IGFybV9zbW11X2Rl dmljZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPj4gwqAgewo+PiDCoMKg wqDCoMKgIHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0 YShwZGV2KTsKPj4gQEAgLTI4NjAsNiArMzQyMCw4IEBAIHN0YXRpYyB2b2lkIGFybV9zbW11X2Rl dmljZV9zaHV0ZG93bihzdHJ1Y3QgCj4+IHBsYXRmb3JtX2RldmljZSAqcGRldikKPj4gwqAgewo+ PiDCoMKgwqDCoMKgIGFybV9zbW11X2RldmljZV9yZW1vdmUocGRldik7Cj4+IMKgIH0KPj4gKyNl bmRpZgo+PiArCj4+IMKgIMKgIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGFybV9z bW11X29mX21hdGNoW10gPSB7Cj4+IMKgwqDCoMKgwqAgeyAuY29tcGF0aWJsZSA9ICJhcm0sc21t dS12MyIsIH0sCj4+IEBAIC0yODY3LDYgKzM0MjksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG9m X2RldmljZV9pZCAKPj4gYXJtX3NtbXVfb2ZfbWF0Y2hbXSA9IHsKPj4gwqAgfTsKPj4gwqAgTU9E VUxFX0RFVklDRV9UQUJMRShvZiwgYXJtX3NtbXVfb2ZfbWF0Y2gpOwo+PiDCoCArI2lmIDAKPj4g wqAgc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXJtX3NtbXVfZHJpdmVyID0gewo+PiDC oMKgwqDCoMKgIC5kcml2ZXLCoMKgwqAgPSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCAubmFtZcKg wqDCoMKgwqDCoMKgID0gImFybS1zbW11LXYzIiwKPj4gQEAgLTI4ODMsMyArMzQ0NiwzMTYgQEAg SU9NTVVfT0ZfREVDTEFSRShhcm1fc21tdXYzLCAiYXJtLHNtbXUtdjMiLCAKPj4gTlVMTCk7Cj4+ IMKgIE1PRFVMRV9ERVNDUklQVElPTigiSU9NTVUgQVBJIGZvciBBUk0gYXJjaGl0ZWN0ZWQgU01N VXYzIAo+PiBpbXBsZW1lbnRhdGlvbnMiKTsKPj4gwqAgTU9EVUxFX0FVVEhPUigiV2lsbCBEZWFj b24gPHdpbGwuZGVhY29uQGFybS5jb20+Iik7Cj4+IMKgIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIi KTsKPj4gKyNlbmRpZgo+PiArCj4+ICsvKioqKiogU3RhcnQgb2YgWGVuIHNwZWNpZmljIGNvZGUg KioqKiovCj4+ICsKPj4gK3N0YXRpYyBpbnQgX19tdXN0X2NoZWNrIGFybV9zbW11X2lvdGxiX2Zs dXNoX2FsbChzdHJ1Y3QgZG9tYWluICpkKQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBhcm1fc21t dV94ZW5fZG9tYWluICpzbW11X2RvbWFpbiA9IGRvbV9pb21tdShkKS0+YXJjaC5wcml2Owo+PiAr wqDCoMKgIHN0cnVjdCBpb21tdV9kb21haW4gKmNmZzsKPj4gKwo+PiArwqDCoMKgIHNwaW5fbG9j aygmc21tdV9kb21haW4tPmxvY2spOwo+PiArwqDCoMKgIGxpc3RfZm9yX2VhY2hfZW50cnkoY2Zn LCAmc21tdV9kb21haW4tPmNvbnRleHRzLCBsaXN0KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCAvKgo+ PiArwqDCoMKgwqDCoMKgwqDCoCAqIE9ubHkgaW52YWxpZGF0ZSB0aGUgY29udGV4dCB3aGVuIFNN TVUgaXMgcHJlc2VudC4KPj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBUaGlzIGlzIGJlY2F1c2UgdGhl IGNvbnRleHQgaW5pdGlhbGl6YXRpb24gaXMgZGVsYXllZAo+PiArwqDCoMKgwqDCoMKgwqDCoCAq IHVudGlsIGEgbWFzdGVyIGhhcyBiZWVuIGFkZGVkLgo+PiArwqDCoMKgwqDCoMKgwqDCoCAqLwo+ PiArwqDCoMKgwqDCoMKgwqAgaWYgKHVubGlrZWx5KCFBQ0NFU1NfT05DRShjZmctPnByaXYtPnNt bXUpKSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29udGludWU7Cj4+ICvCoMKgwqDCoMKg wqDCoCBhcm1fc21tdV90bGJfaW52X2NvbnRleHQoY2ZnLT5wcml2KTsKPj4gK8KgwqDCoCB9Cj4+ ICvCoMKgwqAgc3Bpbl91bmxvY2soJnNtbXVfZG9tYWluLT5sb2NrKTsKPj4gK8KgwqDCoCByZXR1 cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBfX211c3RfY2hlY2sgYXJtX3NtbXVfaW90 bGJfZmx1c2goc3RydWN0IGRvbWFpbiAqZCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBsb25nIGdmbiwKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBpbnQgcGFnZV9j b3VudCkKPj4gK3sKPj4gK8KgwqDCoCByZXR1cm4gYXJtX3NtbXVfaW90bGJfZmx1c2hfYWxsKGQp Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGlvbW11X2RvbWFpbiAqYXJtX3NtbXVfZ2V0 X2RvbWFpbihzdHJ1Y3QgZG9tYWluICpkLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gVGhpcyBpcyByZXR1cm5p bmcgaW9tbXVfZG9tYWluIGFuZCBub3QgYSBkb21haW4uCj4gUGxlYXNlIGNoYW5nZSB0aGUgbmFt ZSBvZiBmdW5jdGlvbi4KPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21h aW47Cj4+ICvCoMKgwqAgc3RydWN0IGFybV9zbW11X3hlbl9kb21haW4gKnhlbl9kb21haW47Cj4g QSBzdWdnZXN0aW9uCj4gMS4gYXMgeW91IGhhdmUgdXNlZCBpbiBhYm92ZSBmdW5jdGlvbiBzbW11 X2RvbWFpbiB2YXJpYWJsZSBmb3IgCj4gYXJtX3NtbXVfeGVuX2RvbWFpbgo+IENhbiBzaW1pbGFy IGxvZ2ljIGJlIHVzZWQgZm9yIGlvbW11X2RvbWFpbi4KPgo+IDIuIFdoZW4gc21tdV9kb21haW4g dmFyaWFibGUgbmFtZSBpcyB1c2VkIGluIGFib3ZlIGZ1bmN0aW9uIHdoeSAKPiB4ZW5fZG9tYWlu IGlzIHVzZWQgaW4gdGhpcyBmdW5jdGlvbi4KPiBJdCBpcyBxdWl0ZSBjb25mdXNpbmcuCj4gbG9n aWNhbGx5IHhlbl9kb21haW4gc2hvdWxkIG1lYW4gYSBWTS4KPj4gK8KgwqDCoCBzdHJ1Y3QgYXJt X3NtbXVfZGV2aWNlICpzbW11Owo+PiArwqDCoMKgIHN0cnVjdCBhcm1fc21tdV9kb21haW4gKnNt bXVfZG9tYWluOwo+IHNtbXVfZG9tYWluIHdhcyB1c2VkIGZvciBhcm1fc21tdV94ZW5fZG9tYWlu Lgo+IGNvbnNpc3RlbmN5IG9mIHZhcmlhYmxlIG5hbWVzIGlzIG5lY2Vzc2FyeSBmb3IgY29kZSBj bGFyaXR5Cj4+ICsKPj4gK8KgwqDCoCB4ZW5fZG9tYWluID0gZG9tX2lvbW11KGQpLT5hcmNoLnBy aXY7Cj4+ICsKPj4gK8KgwqDCoCBzbW11ID0gYXJtX3NtbXVfZ2V0X2J5X2Z3bm9kZShkZXYtPmlv bW11X2Z3c3BlYy0+aW9tbXVfZndub2RlKTsKPj4gK8KgwqDCoCBpZiAoIXNtbXUpCj4+ICvCoMKg wqDCoMKgwqDCoCByZXR1cm4gTlVMTDsKPj4gKwo+PiArwqDCoMKgIC8qCj4+ICvCoMKgwqDCoCAq IExvb3AgdGhyb3VnaCB0aGUgJnhlbl9kb21haW4tPmNvbnRleHRzIHRvIGxvY2F0ZSBhIGNvbnRl eHQKPj4gK8KgwqDCoMKgICogYXNzaWduZWQgdG8gdGhpcyBTTU1VCj4+ICvCoMKgwqDCoCAqLwo+ PiArwqDCoMKgIGxpc3RfZm9yX2VhY2hfZW50cnkoZG9tYWluLCAmeGVuX2RvbWFpbi0+Y29udGV4 dHMsIGxpc3QpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIHNtbXVfZG9tYWluID0gdG9fc21tdV9kb21h aW4oZG9tYWluKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChzbW11X2RvbWFpbi0+c21tdSA9PSBz bW11KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gZG9tYWluOwo+PiArwqDCoMKg IH0KPj4gKwo+PiArwqDCoMKgIHJldHVybiBOVUxMOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9p ZCBhcm1fc21tdV9kZXN0cm95X2lvbW11X2RvbWFpbihzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21h aW4pCj4gc2FtZQo+PiArewo+PiArwqDCoMKgIGxpc3RfZGVsKCZkb21haW4tPmxpc3QpOwo+PiAr wqDCoMKgIGFybV9zbW11X2RvbWFpbl9mcmVlKGRvbWFpbik7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRp YyBpbnQgYXJtX3NtbXVfYXNzaWduX2RldihzdHJ1Y3QgZG9tYWluICpkLCB1OCBkZXZmbiwKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZGV2aWNlICpkZXYs IHUzMiBmbGFnKQo+PiArewo+PiArwqDCoMKgIGludCByZXQgPSAwOwo+PiArwqDCoMKgIHN0cnVj dCBpb21tdV9kb21haW4gKmRvbWFpbjsKPj4gK8KgwqDCoCBzdHJ1Y3QgYXJtX3NtbXVfeGVuX2Rv bWFpbiAqeGVuX2RvbWFpbjsKPiBzYW1lCj4+ICvCoMKgwqAgc3RydWN0IGFybV9zbW11X2RvbWFp biAqYXJtX3NtbXU7Cj4+ICsKPj4gK8KgwqDCoCB4ZW5fZG9tYWluID0gZG9tX2lvbW11KGQpLT5h cmNoLnByaXY7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoIWRldi0+YXJjaGRhdGEuaW9tbXUpIHsKPj4g K8KgwqDCoMKgwqDCoMKgIGRldi0+YXJjaGRhdGEuaW9tbXUgPSB4emFsbG9jKHN0cnVjdCBhcm1f c21tdV94ZW5fZGV2aWNlKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmICghZGV2LT5hcmNoZGF0YS5p b21tdSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9NRU07Cj4+ICvCoMKg wqAgfQo+PiArCj4+ICvCoMKgwqAgcmV0ID0gYXJtX3NtbXVfYWRkX2RldmljZShkZXYpOwo+PiAr wqDCoMKgIGlmIChyZXQpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiArCj4+ICvC oMKgwqAgc3Bpbl9sb2NrKCZ4ZW5fZG9tYWluLT5sb2NrKTsKPj4gKwo+PiArwqDCoMKgIC8qCj4+ ICvCoMKgwqDCoCAqIENoZWNrIHRvIHNlZSBpZiBhbiBpb21tdV9kb21haW4gYWxyZWFkeSBleGlz dHMgZm9yIHRoaXMgeGVuIAo+PiBkb21haW4KPj4gK8KgwqDCoMKgICogdW5kZXIgdGhlIHNhbWUg U01NVQo+PiArwqDCoMKgwqAgKi8KPj4gK8KgwqDCoCBkb21haW4gPSBhcm1fc21tdV9nZXRfZG9t YWluKGQsIGRldik7Cj4+ICvCoMKgwqAgaWYgKCFkb21haW4pIHsKPj4gKwo+PiArwqDCoMKgwqDC oMKgwqAgZG9tYWluID0gYXJtX3NtbXVfZG9tYWluX2FsbG9jKElPTU1VX0RPTUFJTl9ETUEpOwo+ PiArwqDCoMKgwqDCoMKgwqAgaWYgKCFkb21haW4pIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcmV0ID0gLUVOT01FTTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBvdXQ7Cj4+ ICvCoMKgwqDCoMKgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGFybV9zbW11ID0gdG9f c21tdV9kb21haW4oZG9tYWluKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGFybV9zbW11LT5zMl9jZmcu ZG9tYWluID0gZDsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgLyogQ2hhaW4gdGhlIG5ldyBjb250 ZXh0IHRvIHRoZSBkb21haW4gKi8KPj4gK8KgwqDCoMKgwqDCoMKgIGxpc3RfYWRkKCZkb21haW4t Pmxpc3QsICZ4ZW5fZG9tYWluLT5jb250ZXh0cyk7Cj4+ICsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4g K8KgwqDCoCByZXQgPSBhcm1fc21tdV9hdHRhY2hfZGV2KGRvbWFpbiwgZGV2KTsKPj4gK8KgwqDC oCBpZiAocmV0KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoZG9tYWluLT5yZWYuY291bnRlciA9 PSAwKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhcm1fc21tdV9kZXN0cm95X2lvbW11X2Rv bWFpbihkb21haW4pOwo+PiArwqDCoMKgIH0gZWxzZSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBhdG9t aWNfaW5jKCZkb21haW4tPnJlZik7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICtvdXQ6Cj4+ICvCoMKg wqAgc3Bpbl91bmxvY2soJnhlbl9kb21haW4tPmxvY2spOwo+PiArwqDCoMKgIHJldHVybiByZXQ7 Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgYXJtX3NtbXVfZGVhc3NpZ25fZGV2KHN0cnVjdCBk b21haW4gKmQsIHN0cnVjdCBkZXZpY2UgKmRldikKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgaW9t bXVfZG9tYWluICpkb21haW4gPSBhcm1fc21tdV9nZXRfZG9tYWluKGQsIGRldik7Cj4+ICvCoMKg wqAgc3RydWN0IGFybV9zbW11X3hlbl9kb21haW4gKnhlbl9kb21haW47Cj4+ICvCoMKgwqAgc3Ry dWN0IGFybV9zbW11X2RvbWFpbiAqYXJtX3NtbXUgPSB0b19zbW11X2RvbWFpbihkb21haW4pOwo+ IHNhbWUKPj4gKwo+PiArwqDCoMKgIHhlbl9kb21haW4gPSBkb21faW9tbXUoZCktPmFyY2gucHJp djsKPj4gKwo+PiArwqDCoMKgIGlmICghYXJtX3NtbXUgfHwgYXJtX3NtbXUtPnMyX2NmZy5kb21h aW4gIT0gZCkgewo+PiArwqDCoMKgwqDCoMKgwqAgZGV2X2VycihkZXYsICIgbm90IGF0dGFjaGVk IHRvIGRvbWFpbiAlZFxuIiwgZC0+ZG9tYWluX2lkKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVy biAtRVNSQ0g7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgc3Bpbl9sb2NrKCZ4ZW5fZG9t YWluLT5sb2NrKTsKPj4gKwo+PiArwqDCoMKgIGFybV9zbW11X2RldGFjaF9kZXYoZGV2KTsKPj4g K8KgwqDCoCBhdG9taWNfZGVjKCZkb21haW4tPnJlZik7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoZG9t YWluLT5yZWYuY291bnRlciA9PSAwKQo+PiArwqDCoMKgwqDCoMKgwqAgYXJtX3NtbXVfZGVzdHJv eV9pb21tdV9kb21haW4oZG9tYWluKTsKPj4gKwo+PiArwqDCoMKgIHNwaW5fdW5sb2NrKCZ4ZW5f ZG9tYWluLT5sb2NrKTsKPj4gKwo+PiArwqDCoMKgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtz dGF0aWMgaW50IGFybV9zbW11X3JlYXNzaWduX2RldihzdHJ1Y3QgZG9tYWluICpzLCBzdHJ1Y3Qg ZG9tYWluICp0LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTggZGV2Zm4s wqAgc3RydWN0IGRldmljZSAqZGV2KQo+PiArewo+PiArwqDCoMKgIGludCByZXQgPSAwOwo+PiAr Cj4+ICvCoMKgwqAgLyogRG9uJ3QgYWxsb3cgcmVtYXBwaW5nIG9uIG90aGVyIGRvbWFpbiB0aGFu IGh3ZG9tICovCj4+ICvCoMKgwqAgaWYgKHQgJiYgdCAhPSBoYXJkd2FyZV9kb21haW4pCj4+ICvC oMKgwqDCoMKgwqDCoCByZXR1cm4gLUVQRVJNOwo+PiArCj4+ICvCoMKgwqAgaWYgKHQgPT0gcykK Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAwOwo+PiArCj4+ICvCoMKgwqAgcmV0ID0gYXJtX3Nt bXVfZGVhc3NpZ25fZGV2KHMsIGRldik7Cj4+ICvCoMKgwqAgaWYgKHJldCkKPj4gK8KgwqDCoMKg wqDCoMKgIHJldHVybiByZXQ7Cj4+ICsKPj4gK8KgwqDCoCBpZiAodCkgewo+PiArwqDCoMKgwqDC oMKgwqAgLyogTm8gZmxhZ3MgYXJlIGRlZmluZWQgZm9yIEFSTS4gKi8KPj4gK8KgwqDCoMKgwqDC oMKgIHJldCA9IGFybV9zbW11X2Fzc2lnbl9kZXYodCwgZGV2Zm4sIGRldiwgMCk7Cj4+ICvCoMKg wqDCoMKgwqDCoCBpZiAocmV0KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0 Owo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtz dGF0aWMgaW50IGFybV9zbW11X2lvbW11X2RvbWFpbl9pbml0KHN0cnVjdCBkb21haW4gKmQpCj4g V2hlcmUgaXMgaW9tbXVfZG9tYWluIGluaXRpYWxpemVkPwo+IFRoZSBmdW5jdGlvbiBkb2VzIG5v dCB1c2UgYSBpb21tdV9kb21haW4gKiB2YXJpYWJsZQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBh cm1fc21tdV94ZW5fZG9tYWluICp4ZW5fZG9tYWluOwo+PiArCj4+ICvCoMKgwqAgeGVuX2RvbWFp biA9IHh6YWxsb2Moc3RydWN0IGFybV9zbW11X3hlbl9kb21haW4pOwo+PiArwqDCoMKgIGlmICgh eGVuX2RvbWFpbikKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PTUVNOwo+PiArCj4+ICvC oMKgwqAgc3Bpbl9sb2NrX2luaXQoJnhlbl9kb21haW4tPmxvY2spOwo+PiArwqDCoMKgIElOSVRf TElTVF9IRUFEKCZ4ZW5fZG9tYWluLT5jb250ZXh0cyk7Cj4+ICsKPj4gK8KgwqDCoCBkb21faW9t bXUoZCktPmFyY2gucHJpdiA9IHhlbl9kb21haW47Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gMDsK Pj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgX19od2RvbV9pbml0IGFybV9zbW11X2lvbW11X2h3 ZG9tX2luaXQoc3RydWN0IGRvbWFpbiAqZCkKPj4gK3sKPj4gK30KPj4gKwo+PiArc3RhdGljIHZv aWQgYXJtX3NtbXVfaW9tbXVfZG9tYWluX3RlYXJkb3duKHN0cnVjdCBkb21haW4gKmQpCj4+ICt7 Cj4+ICvCoMKgwqAgc3RydWN0IGFybV9zbW11X3hlbl9kb21haW4gKnhlbl9kb21haW4gPSBkb21f aW9tbXUoZCktPmFyY2gucHJpdjsKPj4gKwo+PiArwqDCoMKgIEFTU0VSVChsaXN0X2VtcHR5KCZ4 ZW5fZG9tYWluLT5jb250ZXh0cykpOwo+PiArwqDCoMKgIHhmcmVlKHhlbl9kb21haW4pOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgaW50IF9fbXVzdF9jaGVjayBhcm1fc21tdV9tYXBfcGFnZShzdHJ1 Y3QgZG9tYWluICpkLCB1bnNpZ25lZCAKPj4gbG9uZyBnZm4sCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHVuc2lnbmVkIGxvbmcgbWZuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCj4+ICt7Cj4+ICvC oMKgwqAgcDJtX3R5cGVfdCB0Owo+PiArCj4+ICvCoMKgwqAgLyoKPj4gK8KgwqDCoMKgICogR3Jh bnQgbWFwcGluZ3MgY2FuIGJlIHVzZWQgZm9yIERNQSByZXF1ZXN0cy4gVGhlIGRldl9idXNfYWRk cgo+PiArwqDCoMKgwqAgKiByZXR1cm5lZCBieSB0aGUgaHlwZXJjYWxsIGlzIHRoZSBNRk4gKG5v dCB0aGUgSVBBKS4gRm9yIGRldmljZQo+PiArwqDCoMKgwqAgKiBwcm90ZWN0ZWQgYnkgYW4gSU9N TVUsIFhlbiBuZWVkcyB0byBhZGQgYSAxOjEgbWFwcGluZyBpbiB0aGUgCj4+IGRvbWFpbgo+PiAr wqDCoMKgwqAgKiBwMm0gdG8gYWxsb3cgRE1BIHJlcXVlc3QgdG8gd29yay4KPj4gK8KgwqDCoMKg ICogVGhpcyBpcyBvbmx5IHZhbGlkIHdoZW4gdGhlIGRvbWFpbiBpcyBkaXJlY3RlZCBtYXBwZWQu IEhlbmNlIAo+PiB0aGlzCj4+ICvCoMKgwqDCoCAqIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIHVz ZWQgYnkgZ250dGFiIGNvZGUgd2l0aCBnZm4gPT0gbWZuLgo+PiArwqDCoMKgwqAgKi8KPj4gK8Kg wqDCoCBCVUdfT04oIWlzX2RvbWFpbl9kaXJlY3RfbWFwcGVkKGQpKTsKPj4gK8KgwqDCoCBCVUdf T04obWZuICE9IGdmbik7Cj4+ICsKPj4gK8KgwqDCoCAvKiBXZSBvbmx5IHN1cHBvcnQgcmVhZGFi bGUgYW5kIHdyaXRhYmxlIGZsYWdzICovCj4+ICvCoMKgwqAgaWYgKCEoZmxhZ3MgJiAoSU9NTVVG X3JlYWRhYmxlIHwgSU9NTVVGX3dyaXRhYmxlKSkpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4g LUVJTlZBTDsKPj4gKwo+PiArwqDCoMKgIHQgPSAoZmxhZ3MgJiBJT01NVUZfd3JpdGFibGUpID8g cDJtX2lvbW11X21hcF9ydyA6IAo+PiBwMm1faW9tbXVfbWFwX3JvOwo+PiArCj4+ICvCoMKgwqAg LyoKPj4gK8KgwqDCoMKgICogVGhlIGZ1bmN0aW9uIGd1ZXN0X3BoeXNtYXBfYWRkX2VudHJ5IHJl cGxhY2VzIHRoZSBjdXJyZW50IAo+PiBtYXBwaW5nCj4+ICvCoMKgwqDCoCAqIGlmIHRoZXJlIGlz IGFscmVhZHkgb25lLi4uCj4+ICvCoMKgwqDCoCAqLwo+PiArwqDCoMKgIHJldHVybiBndWVzdF9w aHlzbWFwX2FkZF9lbnRyeShkLCBfZ2ZuKGdmbiksIF9tZm4obWZuKSwgMCwgdCk7Cj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyBpbnQgX19tdXN0X2NoZWNrIGFybV9zbW11X3VubWFwX3BhZ2Uoc3RydWN0 IGRvbWFpbiAqZCwgCj4+IHVuc2lnbmVkIGxvbmcgZ2ZuKQo+PiArewo+PiArwqDCoMKgIC8qCj4+ ICvCoMKgwqDCoCAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgdXNlZCBieSBnbnR0YWIg Y29kZSB3aGVuIHRoZSBkb21haW4KPj4gK8KgwqDCoMKgICogaXMgZGlyZWN0IG1hcHBlZAo+PiAr wqDCoMKgwqAgKi8KPj4gK8KgwqDCoCBpZiAoIWlzX2RvbWFpbl9kaXJlY3RfbWFwcGVkKGQpKQo+ PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4g Z3Vlc3RfcGh5c21hcF9yZW1vdmVfcGFnZShkLCBfZ2ZuKGdmbiksIF9tZm4oZ2ZuKSwgMCk7Cj4+ ICt9Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tbXVfb3BzIGFybV9zbW11X2lvbW11 X29wcyA9IHsKPj4gK8KgwqDCoCAuaW5pdCA9IGFybV9zbW11X2lvbW11X2RvbWFpbl9pbml0LAo+ PiArwqDCoMKgIC5od2RvbV9pbml0ID0gYXJtX3NtbXVfaW9tbXVfaHdkb21faW5pdCwKPj4gK8Kg wqDCoCAudGVhcmRvd24gPSBhcm1fc21tdV9pb21tdV9kb21haW5fdGVhcmRvd24sCj4+ICvCoMKg wqAgLmlvdGxiX2ZsdXNoID0gYXJtX3NtbXVfaW90bGJfZmx1c2gsCj4+ICvCoMKgwqAgLmlvdGxi X2ZsdXNoX2FsbCA9IGFybV9zbW11X2lvdGxiX2ZsdXNoX2FsbCwKPj4gK8KgwqDCoCAuYXNzaWdu X2RldmljZSA9IGFybV9zbW11X2Fzc2lnbl9kZXYsCj4+ICvCoMKgwqAgLnJlYXNzaWduX2Rldmlj ZSA9IGFybV9zbW11X3JlYXNzaWduX2RldiwKPj4gK8KgwqDCoCAubWFwX3BhZ2UgPSBhcm1fc21t dV9tYXBfcGFnZSwKPj4gK8KgwqDCoCAudW5tYXBfcGFnZSA9IGFybV9zbW11X3VubWFwX3BhZ2Us Cj4+ICt9Owo+PiArCj4+ICtzdGF0aWMKPj4gK3N0cnVjdCBhcm1fc21tdV9kZXZpY2UgKmFybV9z bW11X2dldF9ieV9md25vZGUoc3RydWN0IGZ3bm9kZV9oYW5kbGUgCj4+ICpmd25vZGUpCj4+ICt7 Cj4+ICvCoMKgwqAgc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSA9IE5VTEw7Cj4+ICsKPj4g K8KgwqDCoCBzcGluX2xvY2soJmFybV9zbW11X2RldmljZXNfbG9jayk7Cj4+ICvCoMKgwqAgbGlz dF9mb3JfZWFjaF9lbnRyeShzbW11LCAmYXJtX3NtbXVfZGV2aWNlcywgZGV2aWNlcykgewo+PiAr wqDCoMKgwqDCoMKgwqAgaWYgKHNtbXUtPmRldi0+Zndub2RlID09IGZ3bm9kZSkKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKgwqAgfQo+PiArwqDCoMKgIHNwaW5fdW5s b2NrKCZhcm1fc21tdV9kZXZpY2VzX2xvY2spOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIHNtbXU7 Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBfX2luaXQgaW50IGFybV9zbW11X2R0X2luaXQoc3RydWN0 IGR0X2RldmljZV9ub2RlICpkZXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgY29uc3Qgdm9pZCAqZGF0YSkKPj4gK3sKPj4gK8KgwqDCoCBpbnQgcmM7Cj4+ICsKPj4g K8KgwqDCoCAvKgo+PiArwqDCoMKgwqAgKiBFdmVuIGlmIHRoZSBkZXZpY2UgY2FuJ3QgYmUgaW5p dGlhbGl6ZWQsIHdlIGRvbid0IHdhbnQgdG8KPj4gK8KgwqDCoMKgICogZ2l2ZSB0aGUgU01NVSBk ZXZpY2UgdG8gZG9tMC4KPj4gK8KgwqDCoMKgICovCj4+ICvCoMKgwqAgZHRfZGV2aWNlX3NldF91 c2VkX2J5KGRldiwgRE9NSURfWEVOKTsKPj4gKwo+PiArwqDCoMKgIHJjID0gYXJtX3NtbXVfZGV2 aWNlX3Byb2JlKGR0X3RvX2RldihkZXYpKTsKPj4gK8KgwqDCoCBpZiAocmMpCj4+ICvCoMKgwqDC oMKgwqDCoCByZXR1cm4gcmM7Cj4+ICsKPj4gK8KgwqDCoCBpb21tdV9zZXRfb3BzKCZhcm1fc21t dV9pb21tdV9vcHMpOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK0RU X0RFVklDRV9TVEFSVChzbW11djMsICJBUk0gU01NVSBWMyIsIERFVklDRV9JT01NVSkKPj4gK8Kg wqDCoCAuZHRfbWF0Y2ggPSBhcm1fc21tdV9vZl9tYXRjaCwKPj4gK8KgwqDCoCAuaW5pdCA9IGFy bV9zbW11X2R0X2luaXQsCj4+ICtEVF9ERVZJQ0VfRU5ECj4+ICsKPj4gKyNpZmRlZiBDT05GSUdf QUNQSQo+PiArLyogU2V0IHVwIHRoZSBJT01NVSAqLwo+PiArc3RhdGljIGludCBfX2luaXQgYXJt X3NtbXVfYWNwaV9pbml0KGNvbnN0IHZvaWQgKmRhdGEpCj4+ICt7Cj4+ICvCoMKgwqAgaW50IHJj Owo+PiArCj4+ICvCoMKgwqAgcmMgPSBhcm1fc21tdV9kZXZpY2VfcHJvYmUoKHN0cnVjdCBkZXZp Y2UgKilkYXRhKTsKPj4gK8KgwqDCoCBpZiAocmMpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4g cmM7Cj4+ICsKPj4gK8KgwqDCoCBpb21tdV9zZXRfb3BzKCZhcm1fc21tdV9pb21tdV9vcHMpOwo+ PiArwqDCoMKgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtBQ1BJX0RFVklDRV9TVEFSVChhc21t dXYzLCAiQVJNIFNNTVUgVjMiLCBERVZJQ0VfSU9NTVUpCj4+ICvCoMKgwqAgLmNsYXNzX3R5cGUg PSBBQ1BJX0lPUlRfTk9ERV9TTU1VX1YzLAo+PiArwqDCoMKgIC5pbml0ID0gYXJtX3NtbXVfYWNw aV9pbml0LAo+PiArQUNQSV9ERVZJQ0VfRU5ECj4+ICsKPj4gKyNlbmRpZgo+PiBkaWZmIC0tZ2l0 IGEveGVuL2luY2x1ZGUveGVuL2xpbnV4X2NvbXBhdC5oIAo+PiBiL3hlbi9pbmNsdWRlL3hlbi9s aW51eF9jb21wYXQuaAo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwMDAw Li44MDM3YmUwYTNlCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIveGVuL2luY2x1ZGUveGVuL2xp bnV4X2NvbXBhdC5oCj4+IEBAIC0wLDAgKzEsODQgQEAKPj4gKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiogCj4+Cj4+ICsgKiBpbmNsdWRlL3hlbi9saW51eF9jb21wYXQuaAo+PiArICoKPj4gKyAqIENv bXBhdGliaWxpdHkgZGVmaW5lcyBmb3IgcG9ydGluZyBjb2RlIGZyb20gTGludXggdG8gWGVuCj4+ ICsgKgo+PiArICogQ29weXJpZ2h0IChjKSAyMDE3IExpbmFybyBMaW1pdGVkCj4+ICsgKgo+PiAr ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKPj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cj4+ICsgKiB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgo+PiArICog KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPj4gKyAqCj4+ICsgKiBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK Pj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCj4+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuwqAgU2VlIHRoZQo+PiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KPj4gKyAqCj4+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQo+PiArICogYWxvbmcg d2l0aCB0aGlzIHByb2dyYW07IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5z ZXMvPi4KPj4gKyAqLwo+PiArCj4+ICsjaWZuZGVmIF9fWEVOX0xJTlVYX0NPTVBBVF9IX18KPj4g KyNkZWZpbmUgX19YRU5fTElOVVhfQ09NUEFUX0hfXwo+PiArCj4+ICsjaW5jbHVkZSA8YXNtL3R5 cGVzLmg+Cj4+ICsKPj4gK3R5cGVkZWYgcGFkZHJfdCBwaHlzX2FkZHJfdDsKPj4gK3R5cGVkZWYg cGFkZHJfdCBkbWFfYWRkcl90Owo+PiArCj4+ICt0eXBlZGVmIHVuc2lnbmVkIGludCBnZnBfdDsK Pj4gKyNkZWZpbmUgR0ZQX0tFUk5FTCAwCj4+ICsjZGVmaW5lIF9fR0ZQX1pFUk8gMHgwMVUKPj4g Kwo+PiArLyogSGVscGVycyBmb3IgSVJRIGZ1bmN0aW9ucyAqLwo+PiArI2RlZmluZSBmcmVlX2ly cSByZWxlYXNlX2lycQo+PiArCj4+ICtlbnVtIGlycXJldHVybiB7Cj4+ICvCoMKgwqAgSVJRX05P TkUsCj4+ICvCoMKgwqAgSVJRX0hBTkRMRUQsCj4+ICvCoMKgwqAgSVJRX1dBS0VfVEhSRUFELAo+ PiArfTsKPj4gKwo+PiArdHlwZWRlZiBlbnVtIGlycXJldHVybiBpcnFyZXR1cm5fdDsKPj4gKwo+ PiArLyogRGV2aWNlIGxvZ2dlciBmdW5jdGlvbnMgKi8KPj4gKyNkZWZpbmUgZGV2X2RiZyhkZXYs IGZtdCwgLi4uKSBwcmludGsoWEVOTE9HX0RFQlVHIGZtdCwgIyMgX19WQV9BUkdTX18pCj4+ICsj ZGVmaW5lIGRldl9ub3RpY2UoZGV2LCBmbXQsIC4uLikgcHJpbnRrKFhFTkxPR19JTkZPIGZtdCwg IyMgCj4+IF9fVkFfQVJHU19fKQo+PiArI2RlZmluZSBkZXZfd2FybihkZXYsIGZtdCwgLi4uKSBw cmludGsoWEVOTE9HX1dBUk5JTkcgZm10LCAjIyAKPj4gX19WQV9BUkdTX18pCj4+ICsjZGVmaW5l IGRldl9lcnIoZGV2LCBmbXQsIC4uLikgcHJpbnRrKFhFTkxPR19FUlIgZm10LCAjIyBfX1ZBX0FS R1NfXykKPj4gKyNkZWZpbmUgZGV2X2luZm8oZGV2LCBmbXQsIC4uLikgcHJpbnRrKFhFTkxPR19J TkZPIGZtdCwgIyMgX19WQV9BUkdTX18pCj4+ICsKPj4gKyNkZWZpbmUgZGV2X2Vycl9yYXRlbGlt aXRlZChkZXYsIGZtdCwgLi4uKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+ PiArwqDCoMKgwqAgcHJpbnRrKFhFTkxPR19FUlIgZm10LCAjIyBfX1ZBX0FSR1NfXykKPj4gKwo+ PiArI2RlZmluZSBkZXZfbmFtZShkZXYpIGR0X25vZGVfZnVsbF9uYW1lKGRldl90b19kdChkZXYp KQo+PiArCj4+ICsvKiBBbGlhcyB0byBYZW4gYWxsb2NhdGlvbiBoZWxwZXJzICovCj4+ICsjZGVm aW5lIGtmcmVlIHhmcmVlCj4+ICsjZGVmaW5lIGttYWxsb2Moc2l6ZSwgZmxhZ3MpICh7XAo+PiAr wqDCoMKgIHZvaWQgKl9fcmV0X2FsbG9jID0gTlVMTDsgXAo+PiArwqDCoMKgIGlmIChmbGFncyAm IF9fR0ZQX1pFUk8pIFwKPj4gK8KgwqDCoMKgwqDCoMKgIF9fcmV0X2FsbG9jID0gX3h6YWxsb2Mo c2l6ZSwgc2l6ZW9mKHZvaWQgKikpOyBcCj4+ICvCoMKgwqAgZWxzZSBcCj4+ICvCoMKgwqDCoMKg wqDCoCBfX3JldF9hbGxvYyA9IF94bWFsbG9jKHNpemUsIHNpemVvZih2b2lkICopKTsgXAo+PiAr wqDCoMKgIF9fcmV0X2FsbG9jOyBcCj4+ICt9KQo+PiArI2RlZmluZSBremFsbG9jKHNpemUsIGZs YWdzKcKgwqDCoMKgwqDCoMKgIF94emFsbG9jKHNpemUsIHNpemVvZih2b2lkICopKQo+PiArI2Rl ZmluZSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplLCBmbGFncynCoCBfeHphbGxvYyhzaXplLCBzaXpl b2Yodm9pZCAqKSkKPj4gKyNkZWZpbmUga21hbGxvY19hcnJheShzaXplLCBuLCBmbGFncykgKHtc Cj4+ICvCoMKgwqAgdm9pZCAqX19yZXRfYWxsb2MgPSBOVUxMOyBcCj4+ICvCoMKgwqAgaWYgKGZs YWdzICYgX19HRlBfWkVSTykgXAo+PiArwqDCoMKgwqDCoMKgwqAgX19yZXRfYWxsb2MgPSBfeHph bGxvY19hcnJheShzaXplLCBzaXplb2Yodm9pZCAqKSwgbik7IFwKPj4gK8KgwqDCoCBlbHNlIFwK Pj4gK8KgwqDCoMKgwqDCoMKgIF9fcmV0X2FsbG9jID0gX3htYWxsb2NfYXJyYXkoc2l6ZSwgc2l6 ZW9mKHZvaWQgKiksIG4pOyBcCj4+ICvCoMKgwqAgX19yZXRfYWxsb2M7IFwKPj4gK30pCj4+ICsK Pj4gKy8qIEFsaWFzIHRvIFhlbiB0aW1lIGZ1bmN0aW9ucyAqLwo+PiArI2RlZmluZSBrdGltZV90 IHNfdGltZV90Cj4+ICsjZGVmaW5lIGt0aW1lX2dldCgpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IChOT1coKSkKPj4gKyNkZWZpbmUga3RpbWVfYWRkX3VzKHQsaSnCoMKgwqDCoMKgwqAgKHQgKyBN SUNST1NFQ1MoaSkpCj4+ICsjZGVmaW5lIGt0aW1lX2NvbXBhcmUodCxpKcKgwqDCoMKgwqAgKHQg PiAoaSkpCj4+ICsKPj4gKyNlbmRpZiAvKiBfX1hFTl9MSU5VWF9DT01QQVRfSF9fICovCj4KCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwg bWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3Rz LnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs