From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-x52e.google.com (mail-ed1-x52e.google.com [IPv6:2a00:1450:4864:20::52e]) by gabe.freedesktop.org (Postfix) with ESMTPS id 86E1D6E21A for ; Thu, 11 Jul 2019 12:43:46 +0000 (UTC) Received: by mail-ed1-x52e.google.com with SMTP id r12so5658756edo.5 for ; Thu, 11 Jul 2019 05:43:46 -0700 (PDT) Date: Thu, 11 Jul 2019 14:43:41 +0200 From: Daniel Vetter Message-ID: <20190711124341.GL15868@phenom.ffwll.local> References: <20190711103057.25693-1-zbigniew.kempczynski@intel.com> <20190711103057.25693-2-zbigniew.kempczynski@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20190711103057.25693-2-zbigniew.kempczynski@intel.com> Subject: Re: [igt-dev] [PATCH i-g-t v1 1/1] Introduce new method of device selection List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Zbigniew =?utf-8?Q?Kempczy=C5=84ski?= Cc: igt-dev@lists.freedesktop.org, Petri Latvala , Daniel Vetter List-ID: T24gVGh1LCBKdWwgMTEsIDIwMTkgYXQgMTI6MzA6NTdQTSArMDIwMCwgWmJpZ25pZXcgS2VtcGN6 ecWEc2tpIHdyb3RlOgo+IENoYW5nZSBhZGRzIGRldmljZSBzZWxlY3Rpb24gYmFzZWQgb24gaW1w bGVtZW50ZWQgZmlsdGVycy4KPiBEaWZmZXJlbnQgZmlsdGVycyBjYW4gYmUgYWRkZWQgdG8gYWRk cmVzcyBkaWZmZXJlbnQgZGV2aWNlCj4gc2VsZWN0aW9uIHBvc3NpYmlsaXRpZXMuCj4gCj4gTmV3 IGRldmljZSBzZWxlY3Rpb24gdXNlcyAtLWRldmljZSBmaWx0ZXIgb3IgSUdUX0RFVklDRSBlbnZp cm9uZW50Cj4gdmFyaWFibGUuIFNlbGVjdGlvbiBvZiBtYW55IGRldmljZXMgY2FuIGJlIGRvbmUg YnkgdXNpbmcgLS1kZXZpY2UKPiBhcmd1bWVudCBtdWx0aXBsZSB0aW1lcy4gQXMgSUdUX0RFVklD RSBlbnZpcm9tZW50IGNhbiBiZSBzZXQKPiBvbmNlICc7JyBpcyByZWNvZ25pemVkIGFzIGZpbHRl ciBzZXBhcmF0b3IuCj4gCj4gVG9vbCAnbHNncHUnIHdoaWNoIHVzZXMgZGV2aWNlIHNjYW5uaW5n IGZlYXR1cmUgd2FzIGFkZGVkLgo+IAo+IFNpZ25lZC1vZmYtYnk6IFpiaWduaWV3IEtlbXBjennF hHNraSA8emJpZ25pZXcua2VtcGN6eW5za2lAaW50ZWwuY29tPgo+IENjOiBBcmthZGl1c3ogSGls ZXIgPGFya2FkaXVzei5oaWxlckBpbnRlbC5jb20+Cj4gQ2M6IERhbmllbCBWZXR0ZXIgPGRhbmll bEBmZndsbC5jaD4KPiBDYzogUGV0cmkgTGF0dmFsYSA8cGV0cmkubGF0dmFsYUBpbnRlbC5jb20+ Cj4gLS0tCj4gIGRvY3MvbXVsdGktZGV2aWNlLXNlbGVjdGlvbi50eHQgfCAgMTE1ICsrKwoKSW5z dGVhZCBvZiB0ZXh0LCBjYW4gd2Ugc29tZWhvdyBpbnRlZ3JhdGUgaW50byBvdXIgZ3RrZG9jIHN0 dWZmPyBJIGtub3cKZ3RrZG9jIGlzbid0IGFzIGZsZXhpYmxlIGFzIHRoZSBrZXJuZWwgYnkgZmFy LCBidXQgcmFuZG9tIC50eHQgZmlsZXMgaXNuJ3QKYmV0dGVyIGVpdGhlciAuLi4KCj4gIGxpYi9N YWtlZmlsZS5zb3VyY2VzICAgICAgICAgICAgfCAgICAyICsKPiAgbGliL2RybXRlc3QuYyAgICAg ICAgICAgICAgICAgICB8ICAxNTEgKysrLQo+ICBsaWIvZHJtdGVzdC5oICAgICAgICAgICAgICAg ICAgIHwgICAgOSArCj4gIGxpYi9pZ3RfY29yZS5jICAgICAgICAgICAgICAgICAgfCAgIDEzICsK PiAgbGliL2lndF9kZXZpY2Vfc2Nhbi5jICAgICAgICAgICB8IDE0MjUgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwo+ICBsaWIvaWd0X2RldmljZV9zY2FuLmggICAgICAgICAgIHwgICA3 MiArKwo+ICBsaWIvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgIHwgICAgMSArCj4gIHRvb2xz L01ha2VmaWxlLnNvdXJjZXMgICAgICAgICAgfCAgICAxICsKPiAgdG9vbHMvbHNncHUuYyAgICAg ICAgICAgICAgICAgICB8ICAyODUgKysrKysrKwo+ICB0b29scy9tZXNvbi5idWlsZCAgICAgICAg ICAgICAgIHwgICAgMSArCj4gIDExIGZpbGVzIGNoYW5nZWQsIDIwNzMgaW5zZXJ0aW9ucygrKSwg MiBkZWxldGlvbnMoLSkKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRvY3MvbXVsdGktZGV2aWNlLXNl bGVjdGlvbi50eHQKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pZ3RfZGV2aWNlX3NjYW4uYwo+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2lndF9kZXZpY2Vfc2Nhbi5oCj4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCB0b29scy9sc2dwdS5jCgpXcnQgdGhlIGRlc2lnbiBpdHNlbGY6IEkgdGhvdWdodCB0 aGUgbGFzdCBkaXNjdXNzaW9uIG9uIHRoaXMgd2UgYWdyZWVkIG9uCmJhc2luZyB0aGlzIG9uIHVk ZXYgZmlsdGVycy4gTm90IHJlaW52aW50aW5nIGFuIGVudGlyZSBkZXZpY2UKcGFyc2VyL2ZpbHRl ciBvdXJzZWx2ZXMgKHdoaWNoIHRoaXMgZG9lcyBoZXJlKSwgYmVjYXVzZSB0aGF0IG1lYW5zIG1v cmUKd29yayBvbiBhcm0gYW5kIGFueXdoZXJlIGVsc2UuIERvIHdlIGhhdmUgYSBjYXNlIG9mIGxv c3QgaW4gY29tbXVuaWNhdGlvbgpiZXR3ZWVuIGFsbCB0aGUgdmFyaW91cyBtYWlsIHRocmVhZHMg Z29pbmcgb24gaGVyZT8KLURhbmllbAoKPiAKPiBkaWZmIC0tZ2l0IGEvZG9jcy9tdWx0aS1kZXZp Y2Utc2VsZWN0aW9uLnR4dCBiL2RvY3MvbXVsdGktZGV2aWNlLXNlbGVjdGlvbi50eHQKPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwLi41YjEzY2ZjYwo+IC0tLSAvZGV2L251 bGwKPiArKysgYi9kb2NzL211bHRpLWRldmljZS1zZWxlY3Rpb24udHh0Cj4gQEAgLTAsMCArMSwx MTUgQEAKPiArTXVsdGktZGV2aWNlIHNjYW5uaW5nIGFuZCBzZWxlY3Rpb24KPiArLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiArCj4gKzEuIFNjYW5uaW5nCj4gKwo+ICtEZXZp Y2Ugc2VsZWN0aW9uIGlzIGJ1aWxkIGFyb3VuZCBzY2FubmluZyBidXNlcyB1c2luZyB1ZGV2IChQ Q0kgYW5kIHBsYXRmb3JtKSwKPiArZ2F0aGVyaW5nIGluZm9ybWF0aW9uIGFib3V0IG1hdGNoaW5n IGRldmljZXMgYW5kIHVzaW5nIGZpbHRlcnMgb24gZGlzY292ZXJlZAo+ICtkYXRhLgo+ICsKPiAr UENJIHNjYW5uaW5nIGlzIGVhc3kgYW5kIGdpdmVzIGFsbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcg ZGV2aWNlcyAobW9kdWxlIGRvZXNuJ3QKPiArbmVlZCB0byBiZSBsb2FkZWQpLiBQcm9ibGVtcyBv Y2N1cnMgd2hlbiBwbGF0Zm9ybSBkZXZpY2VzIGFyZSB0YWtlbiBpbnRvCj4gK2FjY291bnQuIFNv bWUgb2YgdGhlbSBoYXZlIGFwcHJvcHJpYXRlIGVudHJpZXMgaW4gZGV2aWNlIHRyZWUgKGxpa2UK PiArUmFzcGJlcnJ5IFBpIHZjNCBkcml2ZXIpLCBzbyBkaXNwbGF5aW5nIHRoZW0gd2l0aG91dCBs b2FkZWQgbW9kdWxlIGlzIHBvc3NpYmxlLgo+ICtTdWNoIGRldmljZXMgZXhwb3NlIE9GX0NPTVBB VElCTEVfWCBwcm9wZXJ0aWVzIHdoaWNoIGFyZSBtYXRjaGVkIGFnYWluc3QKPiArYXBwcm9wcmlh dGUgZHJpdmVyLiBTb21lIGRldmljZXMgYXJlIHJlZ2lzdGVyZWQgaW5zaWRlIHBsYXRmb3JtIHRy ZWUgYXQgZHJpdmVyCj4gK2xvYWRpbmcgdGltZSBzbyBkaXNjb3ZlcmluZyBzdWNoIGRldmljZXMg aXMgbm90IHBvc3NpYmxlIHVubGVzcyBkcml2ZXIgaXMgbG9hZGVkLgo+ICsKPiArCj4gKzIuIEZp bHRlcmluZwo+ICsKPiArQWZ0ZXIgc2Nhbm5pbmcgYWxsIGdhdGhlcmVkIGluZm9ybWF0aW9uIGFy ZSBzdG9yZWQgaW4gZGV2aWNlcyBhcnJheS4gRmlsdGVyaW5nCj4gK21lYW5zIGNyZWF0aW5nIGEg dmlldyB0aGF0IG1hdGNoZXMgZmlsdGVyIG9uIGRldmljZXMgYXJyYXkuIEZpbHRlcnMgZGVmaW5l ZAo+ICtvbiBub24tZGlzY292ZXJhYmxlIGRldmljZXMgbG9hZHMgbW9kdWxlIChpZiBub3QgYWxy ZWFkeSBsb2FkZWQpIGFuZCBleGVjdXRlCj4gK2RldmljZSBkaXNjb3ZlcnkgYWdhaW4uCj4gKwo+ ICtVc2luZyAnbHNncHUnIHRvb2wgd2UgY2FuIGdldCBsaXN0IG9mIGRlZmluZWQgZmlsdGVyIHR5 cGVzICgnLWwnIHN3aXRjaCk6Cj4gKy4uLgo+ICtwY2kgICAgICAgcGNpOlt2ZW5kb3I9JTA0eC9u YW1lXVssZGV2aWNlPSUwNHhdWyxjYXJkPSVkXQo+ICsJICB2ZW5kb3IgaXMgaGV4IG51bWJlciBv ciBuYW1lCj4gKy4uLgo+ICsKPiArcGNpIGlzIGZpbHRlciBuYW1lLCBpdCBjYWxscyBmaWx0ZXIg b24gZGV2aWNlcyBhcnJheSB0byBzZWxlY3Qgb25seSBQQ0kKPiArZGV2aWNlcy4gRm9yIGV4YW1w bGU6Cj4gKwo+ICtwY2k6dmVuZG9yPTgwODYKPiArZmluZCBmaXJzdCBwY2kgY2FyZCBvbiB0aGUg YnVzIHdpdGggODA4NiBQQ0kgZGV2aWNlIElECj4gKwo+ICtwY2k6dmVuZG9yPWludGVsCj4gK3Nh bWUgYXMgYWJvdmUgYnV0IHVzZXMgdmVuZG9yIG5hbWUgKHNlZSBsc2dwdSAtdikKPiArCj4gK3Bj aTp2ZW5kb3I9ODA4NixjYXJkPTAKPiArc2FtZSBhcyBhYm92ZSwgY2FyZD0wIGlzIGRlZmF1bHQK PiArCj4gK3BjaTp2ZW5kb3I9aW50ZWwsZGV2aWNlPTEyMzQsY2FyZD0xCj4gK2ZpbmRzIHNlY29u ZCBJbnRlbCBjYXJkIHdoaWNoIGRldmljZSBJRCBpcyAweDEyMzQKPiArCj4gKwo+ICszLiBsc2dw dQo+ICsKPiArVG8gcGxheSB3aXRoIGRldmljZXMgJ2xzZ3B1JyB0b29sIHdhcyB3cml0dGVuLiBJ dCBpcyBtb3N0bHkgd3JhcHBlciB0byBpZ3QKPiArZGV2aWNlcyBzY2FuIGNvZGUgKGlndF9kZXZp Y2Vfc2Nhbi5jKS4KPiArCj4gK0lmIHJ1biB3aXRob3V0IGFyZ3VtZW50cyBpdCBkaXNwbGF5cyBh bGwgcmVjb2duaXplZCBjYXJkcy4KPiArVXNhZ2UgZXhhbXBsZXM6Cj4gKwo+ICsjIGxzZ3B1IC1y YQo+ICtkaXNwbGF5cyBkZXZpY2VzIGluICdzaW1wbGUnIG1vZGUgd2l0aCBvbmx5IGZldyBwcm9w ZXJ0aWVzIGFuZCBhdHRyaWJ1dGVzCj4gKwo+ICsjIGxzZ3B1IC1kCj4gK2Rpc3BsYXlzIGRldmlj ZXMgaW4gJ2RldGFpbCcgbW9kZSwgd2l0aCBhbGwgcHJvcGVydGllcyBhbmQgYXR0cmlidXRlcy4g U29tZQo+ICthdHRyaWJ1dGVzIGFyZSBza2lwcGVkIGJlY2F1c2UgYWNxdWlyaW5nIHZhbHVlIGNh biB0YWtlIGV2ZW4gc2Vjb25kcyAodGhlcmUncwo+ICtzcGVjaWFsIGJsYWNrbGlzdCBoYXNoIHRh YmxlIGluc2lkZSB0aGUgY29kZSkKPiArCj4gKyMgbHNncHUgLXYKPiArZGlzcGxheXMgcmVjb2du aXplZCB2ZW5kb3JzCj4gKwo+ICsjIGxzZ3B1IC1sCj4gK2Rpc3BsYXlzIGRlZmluZWQgZmlsdGVy IHR5cGVzCj4gKwo+ICsjIGxzZ3B1IC1tICd2Z2VtOmNhcmQ9MCcKPiArbWF0Y2hlcyBmaXJzdCB2 Z2VtIGNhcmQgYXQgaW5kZXggMC4gSQo+ICsKPiArCj4gKyMgbHNncHUgLS1kZXZpY2UgJ3BjaTpj YXJkPTA7dmdlbTpjYXJkPTA7dmttczpjYXJkPTAnCj4gK2FuZAo+ICsjIGxzZ3B1IC0tZGV2aWNl ICdwY2k6Y2FyZD0wJyAtLWRldmljZSAndmdlbTpjYXJkPTAnIC0tZGV2aWNlICd2a21zOmNhcmQ9 MCcKPiArYW5kCj4gKyMgZXhwb3J0IElHVF9ERVZJQ0U9J3BjaTpjYXJkPTA7dmdlbTpjYXJkPTA7 dmttczpjYXJkPTAnCj4gKyMgbHNncHUKPiArbWF0Y2hlcyBtdWx0aXBsZSBjYXJkcy4gSUdUX0RF VklDRSB1c2VzICc7JyBzZXBhcmF0ZWQgZmlsdGVyIHN5bnRheCwgaXQgaXMgYWxzbwo+ICtwZXJt aXR0ZWQgaW4gLS1kZXZpY2UgKGZ1bmN0aW9uIHNwbGl0cyBhcmd1bWVudCBhZ2FpbnN0ICc7Jyku Cj4gKwo+ICsKPiArNC4gQ29tcGF0aWJpbGl0eSB3aXRoIGN1cnJlbnQgZGV2aWNlIG9wZW4gQVBJ Cj4gKwo+ICtQcmFjdGljYWxseSBhbGwgSUdUIHRlc3RzIHVzZToKPiAraW50IF9fZHJtX29wZW5f ZHJpdmVyKGludCBjaGlwc2V0KTsKPiAraW50IF9fZHJtX29wZW5fZHJpdmVyX3JlbmRlcihpbnQg Y2hpcHNldCk7Cj4gKwo+ICtBYm92ZSBmdW5jdGlvbnMgd2VyZSBleHRlbmRlZCB0byB1c2UgLS1k ZXZpY2UgLyBlbnYgSUdUX0RFVklDRSBmaWx0ZXJzCj4gKyhpZiBnaXZlbiBkdXJpbmcgSUdUIHRl c3QgcnVuKS4gSWYgbW9yZSB0aGFuIHNpbmdsZSBkZXZpY2Ugd2VyZSBwYXNzZWQKPiArZmlyc3Qg bWF0Y2hpbmcgZmlsdGVyIGFnYWluc3QgY2hpcHNldCBpcyBzZWxlY3RlZC4gVGhpcyBhbGxvd3Mg dGVzdCBsaWtlCj4gK3ByaW1lX3ZnZW0gdG8gd29yaywgZXg6Cj4gKwo+ICsjIC4vcHJpbWVfdmdl bSAtLXIgYmFzaWMtcmVhZCAtLWRldmljZSAncGNpOmNhcmQ9MCcgLS1kZXZpY2UgJ3ZnZW06Y2Fy ZD0wJwo+ICsjIC4vcHJpbWVfdmdlbSAtLXIgYmFzaWMtcmVhZCAtLWRldmljZSAndmdlbTpjYXJk PTAnIC0tZGV2aWNlICdwY2k6Y2FyZD0wJwo+ICsKPiArCj4gKzUuIE5ldyBkZXZpY2Ugc2VsZWN0 aW9uIEFQSQo+ICsKPiArRm9sbG93aW5nIHByb3RvdHlwZXMgZGVmaW5lIG5ldyBBUEk6Cj4gKwo+ ICsvKiBNdWx0aSBkZXZpY2UgQVBJICovCj4gK2ludCBfX2RybV9vcGVuX2NhcmRfd2l0aF9udGhf ZmlsdGVyKGludCBudW0sIGludCBjaGlwc2V0KTsKPiAraW50IF9fZHJtX29wZW5fcmVuZGVyX3dp dGhfbnRoX2ZpbHRlcihpbnQgbnVtLCBpbnQgY2hpcHNldCk7Cj4gKwo+ICtXaGVuIHRlc3QgcmVx dWlyZSBEUklWRVJfSU5URUwgaXQgaGFzIHRvIGJlIHN1cmUgdGhhdCB1c2VyIGRpZG4ndCBwYXNz ZWQKPiArYW5vdGhlciBkZXZpY2UgKHZjNCBmb3IgZXhhbXBsZSkuIFNvIGlmIHVzZXIgcGFzc2Vk IC0tZGV2aWNlIHZjNDpjYXJkPTAKPiArdGhpcyBvcGVuIHdpbGwgZmFpbC4KPiArCj4gK3N0cnVj dCBpZ3RfZGV2aWNlX2NhcmQ7Cj4gK2ludCBfX2RybV9vcGVuX2NhcmQoc3RydWN0IGlndF9kZXZp Y2VfY2FyZCAqY2FyZCk7Cj4gK2ludCBfX2RybV9vcGVuX3JlbmRlcihzdHJ1Y3QgaWd0X2Rldmlj ZV9jYXJkICpjYXJkKTsKPiArCj4gK1RoZXNlIGZ1bmN0aW9ucyBhbGxvd3MgdG8gb3BlbiBkZXZp Y2UgcmVnYXJkbGVzcyBjaGlwIHJlcXVpcmVtZW50Lgo+IGRpZmYgLS1naXQgYS9saWIvTWFrZWZp bGUuc291cmNlcyBiL2xpYi9NYWtlZmlsZS5zb3VyY2VzCj4gaW5kZXggZTE2ZGU4NmUuLmMzODNh ODE3IDEwMDY0NAo+IC0tLSBhL2xpYi9NYWtlZmlsZS5zb3VyY2VzCj4gKysrIGIvbGliL01ha2Vm aWxlLnNvdXJjZXMKPiBAQCAtMjUsNiArMjUsOCBAQCBsaWJfc291cmNlX2xpc3QgPQkgCVwKPiAg CWlndF9kZWJ1Z2ZzLmgJCVwKPiAgCWlndF9kZXZpY2UuYwkJXAo+ICAJaWd0X2RldmljZS5oCQlc Cj4gKwlpZ3RfZGV2aWNlX3NjYW4uYwlcCj4gKwlpZ3RfZGV2aWNlX3NjYW4uaAlcCj4gIAlpZ3Rf YXV4LmMJCVwKPiAgCWlndF9hdXguaAkJXAo+ICAJaWd0X2NvbG9yX2VuY29kaW5nLmMJXAo+IGRp ZmYgLS1naXQgYS9saWIvZHJtdGVzdC5jIGIvbGliL2RybXRlc3QuYwo+IGluZGV4IDI1ZjIwMzUz Li41YTljYWRjMSAxMDA2NDQKPiAtLS0gYS9saWIvZHJtdGVzdC5jCj4gKysrIGIvbGliL2RybXRl c3QuYwo+IEBAIC01NSw2ICs1NSw3IEBACj4gICNpbmNsdWRlICJpZ3RfZ3QuaCIKPiAgI2luY2x1 ZGUgImlndF9rbW9kLmgiCj4gICNpbmNsdWRlICJpZ3Rfc3lzZnMuaCIKPiArI2luY2x1ZGUgImln dF9kZXZpY2Vfc2Nhbi5oIgo+ICAjaW5jbHVkZSAidmVyc2lvbi5oIgo+ICAjaW5jbHVkZSAiY29u ZmlnLmgiCj4gICNpbmNsdWRlICJpbnRlbF9yZWcuaCIKPiBAQCAtMjk2LDI1ICsyOTcsMTcxIEBA IHN0YXRpYyBpbnQgX19vcGVuX2RyaXZlcihjb25zdCBjaGFyICpiYXNlLCBpbnQgb2Zmc2V0LCB1 bnNpZ25lZCBpbnQgY2hpcHNldCkKPiAgCXJldHVybiBfX3NlYXJjaF9hbmRfb3BlbihiYXNlLCBv ZmZzZXQsIGNoaXBzZXQpOwo+ICB9Cj4gIAo+ICtzdGF0aWMgaW50IF9fb3Blbl9kcml2ZXJfZXhh Y3QoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGNoaXBzZXQpCj4gK3sKPiArCXN0YXRp YyBwdGhyZWFkX211dGV4X3QgbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOwo+ICsJ aW50IGZkOwo+ICsKPiArCWZkID0gb3Blbl9kZXZpY2UobmFtZSwgY2hpcHNldCk7Cj4gKwlpZiAo ZmQgIT0gLTEpCj4gKwkJcmV0dXJuIGZkOwo+ICsKPiArCXB0aHJlYWRfbXV0ZXhfbG9jaygmbXV0 ZXgpOwo+ICsJZm9yIChjb25zdCBzdHJ1Y3QgbW9kdWxlICptID0gbW9kdWxlczsgbS0+bW9kdWxl OyBtKyspIHsKPiArCQlpZiAoY2hpcHNldCAmIG0tPmJpdCkgewo+ICsJCQlpZiAobS0+bW9kcHJv YmUpCj4gKwkJCQltLT5tb2Rwcm9iZShtLT5tb2R1bGUpOwo+ICsJCQllbHNlCj4gKwkJCQltb2Rw cm9iZShtLT5tb2R1bGUpOwo+ICsJCX0KPiArCX0KPiArCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZt dXRleCk7Cj4gKwo+ICsJcmV0dXJuIG9wZW5fZGV2aWNlKG5hbWUsIGNoaXBzZXQpOwo+ICt9Cj4g Kwo+ICsvKioKPiArICogX19maW5kX2NhcmRfd2l0aF9jaGlwc2V0Cj4gKyAqIEBjaGlwc2V0OiBj aGlwc2V0IGZvciBjb21wYXJlIHdpdGggY2FyZCBtYXRjaAo+ICsgKiBAY2FyZDogcG9pbnRlciB3 aGVyZSBjYXJkIGluZm9ybWF0aW9uIHdpbGwgYmUgc3RvcmVkCj4gKyAqCj4gKyAqIEZvciBjb21w YXRpYmlsaXR5IG1vZGUgd2hlbiBtdWx0aXBsZSAtLWRldmljZSBhcmd1bWVudCB3ZXJlIHBhc3Nl ZAo+ICsgKiB0aGlzIGZ1bmN0aW9uIHRyaWVzIHRvIGJlIHNtYXJ0IGVub3VnaCB0byBoYW5kbGUg dGVzdHMgd2hpY2ggb3BlbnMKPiArICogbW9yZSB0aGFuIHNpbmdsZSBkZXZpY2UuIEl0IGl0ZXJh dGVzIG92ZXIgZmlsdGVyIGxpc3QgYW5kCj4gKyAqIGNvbXBhcmVzIGNoaXBzZXQgdG8gY2FyZCBj aGlwc2V0IGZvciBmaWx0ZXIgbWF0Y2hlZC4KPiArICoKPiArICogUmV0dXJuczoKPiArICogVHJ1 ZSBpZiBjYXJkIGFjY29yZGluZyB0byBmaWx0ZXJzIGFkZGVkIGFuZCBjaGlwc2V0IHdhcyBmb3Vu ZCwKPiArICogZmFsc2Ugb3Rod2Vyd2lzZS4KPiArICovCj4gK3N0YXRpYyBib29sIF9fZmluZF9j YXJkX3dpdGhfY2hpcHNldChpbnQgY2hpcHNldCwgc3RydWN0IGlndF9kZXZpY2VfY2FyZCAqY2Fy ZCkKPiArewo+ICsJaW50IGksIG4gPSBpZ3RfZGV2aWNlX2ZpbHRlcl9jb3VudCgpOwo+ICsJY29u c3QgY2hhciAqZmlsdGVyOwo+ICsJYm9vbCBtYXRjaDsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwg bjsgaSsrKSB7Cj4gKwkJZmlsdGVyID0gaWd0X2RldmljZV9maWx0ZXJfZ2V0KGkpOwo+ICsJCW1h dGNoID0gaWd0X2RldmljZV9jYXJkX21hdGNoKGZpbHRlciwgY2FyZCk7Cj4gKwkJaWYgKG1hdGNo ICYmIChjYXJkLT5jaGlwc2V0ID09IGNoaXBzZXQgfHwgY2hpcHNldCA9PSBEUklWRVJfQU5ZKSkK PiArCQkJcmV0dXJuIHRydWU7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGZhbHNlOwo+ICt9Cj4gKwo+ ICAvKioKPiAgICogX19kcm1fb3Blbl9kcml2ZXI6Cj4gICAqIEBjaGlwc2V0OiBPUidkIGZsYWdz IGZvciBlYWNoIGNoaXBzZXQgdG8gc2VhcmNoLCBlZy4gI0RSSVZFUl9JTlRFTAo+ICAgKgo+IC0g KiBPcGVuIHRoZSBmaXJzdCBEUk0gZGV2aWNlIHdlIGNhbiBmaW5kLCBzZWFyY2hpbmcgdXAgdG8g MTYgZGV2aWNlIG5vZGVzCj4gKyAqIEZ1bmN0aW9uIG9wZW5zIGRldmljZSB3aXRoIGZvbGxvd2lu ZyBvcmRlcjoKPiArICogMS4gd2hlbiAtLWRldmljZSBhcmd1bWVudHMgYXJlIHByZXNlbnQgZGV2 aWNlIHNjYW5uaW5nIHdpbGwgYmUgZXhlY3V0ZWQsCj4gKyAqIHRoZW4gbWF0Y2hpbmcgY29uc2lk ZXJzIGFsbCBkZXZpY2Ugd2hpY2ggbWF0Y2hlcyBmaWx0ZXIgYXJndW1lbnQgd2lsbCBiZSBzZWxl Y3RlZC4KPiArICogMi4gY29tcGF0aWJpbGl0eSBtb2RlIC0gb3BlbiB0aGUgZmlyc3QgRFJNIGRl dmljZSB3ZSBjYW4gZmluZCwKPiArICogc2VhcmNoaW5nIHVwIHRvIDE2IGRldmljZSBub2Rlcy4K PiAgICoKPiAgICogUmV0dXJuczoKPiAgICogQW4gb3BlbiBEUk0gZmQgb3IgLTEgb24gZXJyb3IK PiAgICovCj4gIGludCBfX2RybV9vcGVuX2RyaXZlcihpbnQgY2hpcHNldCkKPiAgewo+ICsJaW50 IG4gPSBpZ3RfZGV2aWNlX2ZpbHRlcl9jb3VudCgpOwo+ICsKPiArCWlmIChuKSB7Cj4gKwkJYm9v bCBmb3VuZDsKPiArCQlzdHJ1Y3QgaWd0X2RldmljZV9jYXJkIGNhcmQ7Cj4gKwo+ICsJCWZvdW5k ID0gX19maW5kX2NhcmRfd2l0aF9jaGlwc2V0KGNoaXBzZXQsICZjYXJkKTsKPiArCQlpZiAoIWZv dW5kIHx8ICFzdHJsZW4oY2FyZC5jYXJkKSkKPiArCQkJcmV0dXJuIC0xOwo+ICsKPiArCQlyZXR1 cm4gX19vcGVuX2RyaXZlcl9leGFjdChjYXJkLmNhcmQsIGNoaXBzZXQpOwo+ICsJfQo+ICsKPiAg CXJldHVybiBfX29wZW5fZHJpdmVyKCIvZGV2L2RyaS9jYXJkIiwgMCwgY2hpcHNldCk7Cj4gIH0K PiAgCj4gLXN0YXRpYyBpbnQgX19kcm1fb3Blbl9kcml2ZXJfcmVuZGVyKGludCBjaGlwc2V0KQo+ ICtpbnQgX19kcm1fb3Blbl9kcml2ZXJfcmVuZGVyKGludCBjaGlwc2V0KQo+ICB7Cj4gKwlpbnQg biA9IGlndF9kZXZpY2VfZmlsdGVyX2NvdW50KCk7Cj4gKwo+ICsJaWYgKG4pIHsKPiArCQlib29s IGZvdW5kOwo+ICsJCXN0cnVjdCBpZ3RfZGV2aWNlX2NhcmQgY2FyZDsKPiArCj4gKwkJZm91bmQg PSBfX2ZpbmRfY2FyZF93aXRoX2NoaXBzZXQoY2hpcHNldCwgJmNhcmQpOwo+ICsJCWlmICghZm91 bmQgfHwgIXN0cmxlbihjYXJkLnJlbmRlcikpCj4gKwkJCXJldHVybiAtMTsKPiArCj4gKwkJcmV0 dXJuIF9fb3Blbl9kcml2ZXJfZXhhY3QoY2FyZC5yZW5kZXIsIGNoaXBzZXQpOwo+ICsJfQo+ICsK PiAgCXJldHVybiBfX29wZW5fZHJpdmVyKCIvZGV2L2RyaS9yZW5kZXJEIiwgMTI4LCBjaGlwc2V0 KTsKPiAgfQo+ICAKPiArc3RhdGljIGludCBfX2RybV9vcGVuX3dpdGhfbnRoX2ZpbHRlcihpbnQg bnVtLCBpbnQgY2hpcHNldCwgYm9vbCBvcGVuX3JlbmRlcikKPiArewo+ICsJc3RydWN0IGlndF9k ZXZpY2VfY2FyZCBjYXJkOwo+ICsJY29uc3QgY2hhciAqZmlsdGVyLCAqZGV2bmFtZTsKPiArCWJv b2wgbWF0Y2g7Cj4gKwlpbnQgbiA9IGlndF9kZXZpY2VfZmlsdGVyX2NvdW50KCk7Cj4gKwo+ICsJ aWYgKCFuIHx8IG51bSA8IDAgfHwgbnVtID49IG4pIHsKPiArCQlpZ3Rfd2FybigiTm8gZGV2aWNl IGZpbHRlciBudW0gPT0gJWQgcGFzc2VkXG4iLCBudW0pOwo+ICsJCXJldHVybiAtMTsKPiArCX0K PiArCj4gKwlmaWx0ZXIgPSBpZ3RfZGV2aWNlX2ZpbHRlcl9nZXQobnVtKTsKPiArCW1hdGNoID0g aWd0X2RldmljZV9jYXJkX21hdGNoKGZpbHRlciwgJmNhcmQpOwo+ICsJaWYgKCFtYXRjaCkgewo+ ICsJCWlndF93YXJuKCJObyBkZXZpY2UgbWF0Y2ggZmlsdGVyOiAlc1xuIiwgZmlsdGVyKTsKPiAr CQlyZXR1cm4gLTE7Cj4gKwl9Cj4gKwo+ICsJaWYgKGNoaXBzZXQgIT0gY2FyZC5jaGlwc2V0KSB7 Cj4gKwkJaWd0X3dhcm4oIkZpbHRlcmVkIGRldmljZSBkb2Vzbid0IG1hdGNoIGNoaXBzZXQgKCVk ICE9ICVkKVxuIiwKPiArCQkJIGNoaXBzZXQsIGNhcmQuY2hpcHNldCk7Cj4gKwkJcmV0dXJuIC0x Owo+ICsJfQo+ICsJaWYgKCFzdHJsZW4oY2FyZC5jYXJkKSkKPiArCQlyZXR1cm4gLTE7Cj4gKwo+ ICsJZGV2bmFtZSA9IG9wZW5fcmVuZGVyID8gY2FyZC5yZW5kZXIgOiBjYXJkLmNhcmQ7Cj4gKwlp ZiAoIXN0cmxlbihkZXZuYW1lKSkgewo+ICsJCWlndF93YXJuKCJObyAlcyBub2RlIG1hdGNoaW5n IGZpbHRlcjogJXNcbiIsCj4gKwkJCSBvcGVuX3JlbmRlciA/ICJyZW5kZXIiIDogImNhcmQiLCBm aWx0ZXIpOwo+ICsJCXJldHVybiAtMTsKPiArCX0KPiArCXJldHVybiBfX29wZW5fZHJpdmVyX2V4 YWN0KGRldm5hbWUsIGNhcmQuY2hpcHNldCk7Cj4gK30KPiArCj4gK2ludCBfX2RybV9vcGVuX2Nh cmRfd2l0aF9udGhfZmlsdGVyKGludCBudW0sIGludCBjaGlwc2V0KQo+ICt7Cj4gKwlyZXR1cm4g X19kcm1fb3Blbl93aXRoX250aF9maWx0ZXIobnVtLCBjaGlwc2V0LCBmYWxzZSk7Cj4gK30KPiAr Cj4gK2ludCBfX2RybV9vcGVuX3JlbmRlcl93aXRoX250aF9maWx0ZXIoaW50IG51bSwgaW50IGNo aXBzZXQpCj4gK3sKPiArCXJldHVybiBfX2RybV9vcGVuX3dpdGhfbnRoX2ZpbHRlcihudW0sIGNo aXBzZXQsIHRydWUpOwo+ICt9Cj4gKwo+ICtpbnQgX19kcm1fb3Blbl9jYXJkKHN0cnVjdCBpZ3Rf ZGV2aWNlX2NhcmQgKmNhcmQpCj4gK3sKPiArCWlmICghY2FyZCB8fCAhc3RybGVuKGNhcmQtPmNh cmQpKQo+ICsJCXJldHVybiAtMTsKPiArCj4gKwlyZXR1cm4gX19vcGVuX2RyaXZlcl9leGFjdChj YXJkLT5jYXJkLCBjYXJkLT5jaGlwc2V0KTsKPiArfQo+ICsKPiAraW50IF9fZHJtX29wZW5fcmVu ZGVyKHN0cnVjdCBpZ3RfZGV2aWNlX2NhcmQgKmNhcmQpCj4gK3sKPiArCWlmICghY2FyZCB8fCAh c3RybGVuKGNhcmQtPnJlbmRlcikpCj4gKwkJcmV0dXJuIC0xOwo+ICsKPiArCXJldHVybiBfX29w ZW5fZHJpdmVyX2V4YWN0KGNhcmQtPnJlbmRlciwgY2FyZC0+Y2hpcHNldCk7Cj4gK30KPiArCj4g Kwo+ICBzdGF0aWMgaW50IGF0X2V4aXRfZHJtX2ZkID0gLTE7Cj4gIHN0YXRpYyBpbnQgYXRfZXhp dF9kcm1fcmVuZGVyX2ZkID0gLTE7Cj4gIAo+IGRpZmYgLS1naXQgYS9saWIvZHJtdGVzdC5oIGIv bGliL2RybXRlc3QuaAo+IGluZGV4IDZjNGMzODk5Li44ZjU4ODhhOSAxMDA2NDQKPiAtLS0gYS9s aWIvZHJtdGVzdC5oCj4gKysrIGIvbGliL2RybXRlc3QuaAo+IEBAIC00NSw2ICs0NSw3IEBACj4g ICNkZWZpbmUgRFJJVkVSX0FNREdQVQkoMSA8PCA0KQo+ICAjZGVmaW5lIERSSVZFUl9WM0QJKDEg PDwgNSkKPiAgI2RlZmluZSBEUklWRVJfUEFORlJPU1QJKDEgPDwgNikKPiArCj4gIC8qCj4gICAq IEV4Y2x1ZGUgRFJWRVJfVkdFTSBmcm9tIERSSVZFUl9BTlkgc2luY2UgaWYgeW91IHJ1biBvbiBh IHN5c3RlbQo+ICAgKiB3aXRoIHZnZW0gYXMgd2VsbCBhcyBhIHN1cHBvcnRlZCBkcml2ZXIsIHlv dSBjYW4gZW5kIHVwIHdpdGggYQo+IEBAIC03Niw2ICs3NywxNCBAQCBpbnQgZHJtX29wZW5fZHJp dmVyKGludCBjaGlwc2V0KTsKPiAgaW50IGRybV9vcGVuX2RyaXZlcl9tYXN0ZXIoaW50IGNoaXBz ZXQpOwo+ICBpbnQgZHJtX29wZW5fZHJpdmVyX3JlbmRlcihpbnQgY2hpcHNldCk7Cj4gIGludCBf X2RybV9vcGVuX2RyaXZlcihpbnQgY2hpcHNldCk7Cj4gK2ludCBfX2RybV9vcGVuX2RyaXZlcl9y ZW5kZXIoaW50IGNoaXBzZXQpOwo+ICsKPiArLyogTXVsdGkgZGV2aWNlIEFQSSAqLwo+ICtpbnQg X19kcm1fb3Blbl9jYXJkX3dpdGhfbnRoX2ZpbHRlcihpbnQgbnVtLCBpbnQgY2hpcHNldCk7Cj4g K2ludCBfX2RybV9vcGVuX3JlbmRlcl93aXRoX250aF9maWx0ZXIoaW50IG51bSwgaW50IGNoaXBz ZXQpOwo+ICtzdHJ1Y3QgaWd0X2RldmljZV9jYXJkOwo+ICtpbnQgX19kcm1fb3Blbl9jYXJkKHN0 cnVjdCBpZ3RfZGV2aWNlX2NhcmQgKmNhcmQpOwo+ICtpbnQgX19kcm1fb3Blbl9yZW5kZXIoc3Ry dWN0IGlndF9kZXZpY2VfY2FyZCAqY2FyZCk7Cj4gIAo+ICB2b2lkIGdlbV9xdWllc2NlbnRfZ3B1 KGludCBmZCk7Cj4gIAo+IGRpZmYgLS1naXQgYS9saWIvaWd0X2NvcmUuYyBiL2xpYi9pZ3RfY29y ZS5jCj4gaW5kZXggMWNiYjA5ZjkuLjliODUxMTc1IDEwMDY0NAo+IC0tLSBhL2xpYi9pZ3RfY29y ZS5jCj4gKysrIGIvbGliL2lndF9jb3JlLmMKPiBAQCAtNzEsNiArNzEsNyBAQAo+ICAjaW5jbHVk ZSAiaWd0X3N5c3JxLmgiCj4gICNpbmNsdWRlICJpZ3RfcmMuaCIKPiAgI2luY2x1ZGUgImlndF9s aXN0LmgiCj4gKyNpbmNsdWRlICJpZ3RfZGV2aWNlX3NjYW4uaCIKPiAgCj4gICNkZWZpbmUgVU5X X0xPQ0FMX09OTFkKPiAgI2luY2x1ZGUgPGxpYnVud2luZC5oPgo+IEBAIC0zMDQsNiArMzA1LDcg QEAgZW51bSB7Cj4gIAlPUFRfREVCVUcsCj4gIAlPUFRfSU5URVJBQ1RJVkVfREVCVUcsCj4gIAlP UFRfU0tJUF9DUkMsCj4gKwlPUFRfREVWSUNFLAo+ICAJT1BUX0hFTFAgPSAnaCcKPiAgfTsKPiAg Cj4gQEAgLTYyNCw2ICs2MjYsNyBAQCBzdGF0aWMgdm9pZCBwcmludF91c2FnZShjb25zdCBjaGFy ICpoZWxwX3N0ciwgYm9vbCBvdXRwdXRfb25fc3RkZXJyKQo+ICAJCSAgICIgIC0tc2tpcC1jcmMt Y29tcGFyZVxuIgo+ICAJCSAgICIgIC0taGVscC1kZXNjcmlwdGlvblxuIgo+ICAJCSAgICIgIC0t ZGVzY3JpYmVcbiIKPiArCQkgICAiICAtLWRldmljZSBmaWx0ZXJcbiIKPiAgCQkgICAiICAtLWhl bHB8LWhcbiIpOwo+ICAJaWYgKGhlbHBfc3RyKQo+ICAJCWZwcmludGYoZiwgIiVzXG4iLCBoZWxw X3N0cik7Cj4gQEAgLTcyNSw2ICs3MjgsMTEgQEAgc3RhdGljIHZvaWQgY29tbW9uX2luaXRfZW52 KHZvaWQpCj4gIAlpZiAoZW52KSB7Cj4gIAkJX19zZXRfZm9yY2VkX2RyaXZlcihlbnYpOwo+ICAJ fQo+ICsKPiArCWVudiA9IGdldGVudigiSUdUX0RFVklDRSIpOwo+ICsJaWYgKGVudikgewo+ICsJ CWlndF9kZXZpY2VfZmlsdGVyX2FkZChlbnYpOwo+ICsJfQo+ICB9Cj4gIAo+ICBzdGF0aWMgaW50 IGNvbW1vbl9pbml0KGludCAqYXJnYywgY2hhciAqKmFyZ3YsCj4gQEAgLTc0Myw2ICs3NTEsNyBA QCBzdGF0aWMgaW50IGNvbW1vbl9pbml0KGludCAqYXJnYywgY2hhciAqKmFyZ3YsCj4gIAkJeyJk ZWJ1ZyIsICAgICAgICAgICAgIG9wdGlvbmFsX2FyZ3VtZW50LCBOVUxMLCBPUFRfREVCVUd9LAo+ ICAJCXsiaW50ZXJhY3RpdmUtZGVidWciLCBvcHRpb25hbF9hcmd1bWVudCwgTlVMTCwgT1BUX0lO VEVSQUNUSVZFX0RFQlVHfSwKPiAgCQl7InNraXAtY3JjLWNvbXBhcmUiLCAgbm9fYXJndW1lbnQs ICAgICAgIE5VTEwsIE9QVF9TS0lQX0NSQ30sCj4gKwkJeyJkZXZpY2UiLCAgICAgICAgICAgIHJl cXVpcmVkX2FyZ3VtZW50LCBOVUxMLCBPUFRfREVWSUNFfSwKPiAgCQl7ImhlbHAiLCAgICAgICAg ICAgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIE9QVF9IRUxQfSwKPiAgCQl7MCwgMCwgMCwg MH0KPiAgCX07Cj4gQEAgLTg2NSw2ICs4NzQsMTAgQEAgc3RhdGljIGludCBjb21tb25faW5pdChp bnQgKmFyZ2MsIGNoYXIgKiphcmd2LAo+ICAJCWNhc2UgT1BUX1NLSVBfQ1JDOgo+ICAJCQlpZ3Rf c2tpcF9jcmNfY29tcGFyZSA9IHRydWU7Cj4gIAkJCWdvdG8gb3V0Owo+ICsJCWNhc2UgT1BUX0RF VklDRToKPiArCQkJYXNzZXJ0KG9wdGFyZyk7Cj4gKwkJCWlndF9kZXZpY2VfZmlsdGVyX2FkZChv cHRhcmcpOwo+ICsJCQlicmVhazsKPiAgCQljYXNlIE9QVF9IRUxQOgo+ICAJCQlwcmludF91c2Fn ZShoZWxwX3N0ciwgZmFsc2UpOwo+ICAJCQlyZXQgPSAtMTsKPiBkaWZmIC0tZ2l0IGEvbGliL2ln dF9kZXZpY2Vfc2Nhbi5jIGIvbGliL2lndF9kZXZpY2Vfc2Nhbi5jCj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQKPiBpbmRleCAwMDAwMDAwMC4uNmNmMGFlYTYKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIv bGliL2lndF9kZXZpY2Vfc2Nhbi5jCj4gQEAgLTAsMCArMSwxNDI1IEBACj4gKy8qCj4gKyAqIENv cHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24g aXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmlu ZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0 aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICog dGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1 dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs IGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsg Kgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v dGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVk ZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29m dHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRI T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xV RElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ LAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhP TERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElB QklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJ U0UsIEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUg U09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBUSEUgU09GVFdB UkUuCj4gKyAqCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgImlndC5oIgo+ICsjaW5jbHVkZSAiaWd0 X2ttb2QuaCIKPiArI2luY2x1ZGUgImlndF9zeXNmcy5oIgo+ICsjaW5jbHVkZSAiaWd0X2Rldmlj ZS5oIgo+ICsjaW5jbHVkZSAiaWd0X2RldmljZV9zY2FuLmgiCj4gKyNpbmNsdWRlIDxnbGliLmg+ Cj4gKyNpbmNsdWRlIDxsaWJ1ZGV2Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KPiAr I2luY2x1ZGUgPHN5cy9zdGF0Lmg+Cj4gKwo+ICsvLyNkZWZpbmUgREVCVUdfREVWSUNFX1NDQU4K PiArI2lmZGVmIERFQlVHX0RFVklDRV9TQ0FOCj4gKyNkZWZpbmUgREJHKC4uLikgXAo+ICt7IFwK PiArCXN0cnVjdCB0aW1ldmFsIHRtOyBcCj4gKwlnZXR0aW1lb2ZkYXkoJnRtLCBOVUxMKTsgXAo+ ICsJcHJpbnRmKCIlMTBsZC4lMDNsZDogIiwgdG0udHZfc2VjLCB0bS50dl91c2VjKTsgXAo+ICsJ cHJpbnRmKF9fVkFfQVJHU19fKTsgXAo+ICsJfQo+ICsKPiArI2Vsc2UKPiArI2RlZmluZSBEQkco Li4uKSB7fQo+ICsjZW5kaWYKPiArCj4gKyNkZWZpbmUgSUdUX0JVU19QQ0lfRFJJVkVSU19ESVIg Ii9zeXMvYnVzL3BjaS9kcml2ZXJzIgo+ICsjZGVmaW5lIElHVF9EUk1fUEFUSCAiL2Rldi9kcmki Cj4gKwo+ICsvKiBTY2FubmluZyBQQ0kgaXMgc2ltcGxlIGFuZCB3ZWxsIGRlZmluZWQuIFBsYXRm b3JtIGRldmljZXMKPiArICogYXJlIGxpc3RlZCBpbiBkZXZpY2UgdHJlZSBidXQgdW50aWwgZHJp dmVyIGlzIHJlYWxseSBsb2FkZWQKPiArICogd2Ugb25seSAnZXhwZWN0JyB0aGVpciBleGlzdGVu Y2UuCj4gKyAqCj4gKyAqIEZyb20gdGhpcyByZWFzb24gcGxhdGZvcm0gc2Nhbm5pbmcgd2FzIHNl cGFyYXRlZCB0byB0d28KPiArICogZGlzdGluY3Qgc2NhbiB0eXBlcyAtIG5vbi1kaXNjb3ZlcmFi bGUgYW5kIGRpc2NvdmVyYWJsZS4KPiArICoKPiArICogMS4gTm9uLWRpc2NvdmVyYWJsZSBzY2Fu IHR5cGUgY2hlY2tzIG1vZGFsaWFzIGF0dHJpYnV0ZS4KPiArICogU3VjaCBkZXZpY2VzIHdpbGwg b2NjdXIgd2l0aGluIHBsYXRmb3JtIHN1YnN5c3RlbSBvbmx5Cj4gKyAqIGFmdGVyIGRyaXZlciBp cyBsb2FkZWQuIEV4YW1wbGUgYXJlICdwbGF0Zm9ybTp2Z2VtJwo+ICsgKiAncGxhdGZvcm06dmtt cycgYW5kICdwbGF0Zm9ybTpleHlub3MnLgo+ICsgKgo+ICsgKiAyLiBEaXNjb3ZlcmFibGUgc2Nh biB0eXBlIGNoZWNrcyBPRl9DT01QQVRJQkxFXzAgcHJvcGVydHkuCj4gKyAqIFRoaXMgc2ltcGxl IGNoZWNrIHNob3VsZCBiZSBlbm91Z2ggdG8gZGlzcGxheSBwbGF0Zm9ybQo+ICsgKiBncHUgZGVm aW5lZCBpbiBkZXZpY2UgdHJlZSBldmVuIGlmIGRyaXZlciB3YXNuJ3QgYWxyZWFkeQo+ICsgKiBs b2FkZWQuCj4gKyAqLwo+ICtlbnVtIGlndF9kZXZpY2VzX3NjYW5fdHlwZSB7Cj4gKwlJR1RfU0NB Tl9QQ0kgICAgICAgICAgICAgICAgICAgICAgID0gMSwKPiArCUlHVF9TQ0FOX1BMQVRGT1JNX05P Tl9ESVNDT1ZFUkFCTEUgPSAyLAo+ICsJSUdUX1NDQU5fUExBVEZPUk1fRElTQ09WRVJBQkxFICAg ICA9IDMsCj4gK307Cj4gKwo+ICtzdGF0aWMgR0hhc2hUYWJsZSAqYmxhY2tsaXN0X2tleXNfaHQ7 ICAgICAgLy9zeXNhdHRycyB3ZSBkb24ndCB3YW50IHRvIHJlYWQKPiArc3RhdGljIEdIYXNoVGFi bGUgKmdwdV9wY2lfY2xhc3NfaHQ7ICAgICAgIC8vZ3B1IHBjaSBjbGFzc2VzIHdlIGtub3cKPiAr c3RhdGljIEdIYXNoVGFibGUgKmdwdV92ZW5kb3JfaHQ7ICAgICAgICAgIC8vc2VhcmNoIGlkIC0+ IHZlbmRvcl9zcGVjIG1hcHBpbmcKPiArc3RhdGljIEdIYXNoVGFibGUgKmZpbHRlcl9kZWZpbml0 aW9uX2h0OyAgIC8vc3VwcG9ydGVkIGZpbHRlcnMgKHBjaT0uLi4sIGV0Yy4pCj4gKwo+ICsvKiBH ZW5lcmljIG5hbWUtPnZhbHVlIHN0cnVjdCwgdXNlZCB0byBmaWxsIGhhc2ggdGFibGVzICovCj4g K3N0cnVjdCBuYW1lX3ZhbHVlIHsKPiArCWNvbnN0IGNoYXIgKm5hbWU7Cj4gKwlncG9pbnRlciAq dmFsdWU7Cj4gK307Cj4gKwo+ICsvKiBWZW5kb3Igc3BlY2lmaWMgZGF0YSAqLwo+ICtzdHJ1Y3Qg dmVuZG9yX3NwZWMgewo+ICsJZW51bSBpZ3RfZGV2aWNlX3R5cGUgZGV2X3R5cGU7Cj4gKwljb25z dCBjaGFyICp2ZW5kb3I7Cj4gKwljb25zdCBjaGFyICptb2RuYW1lOwo+ICsJY29uc3QgY2hhciAq bW9kb3B0czsKPiArCWNvbnN0IGNoYXIgKm1hdGNoX2RyaXZlcjsgLy9yZXBvcnRlZCBkcml2ZXIg bmFtZSBub3QgYWx3YXlzIGVxdWFsIG1vZHVsZSBuYW1lCj4gKwlpbnQgY2hpcHNldDsKPiArfTsK PiArCj4gKy8qIFNpbmdsZSBpZ3RfZGV2aWNlIGZvdW5kIGluIFBDSSAvIHBsYXRmb3JtIHN1YnN5 c3RlbXMgKi8KPiArc3RydWN0IGlndF9kZXZpY2Ugewo+ICsJY2hhciAqcHJldHR5X25hbWU7Cj4g KwlzdHJ1Y3QgdmVuZG9yX3NwZWMgKnZzOwo+ICsJR0hhc2hUYWJsZSAqcHJvcHNfaHQ7Cj4gKwlH SGFzaFRhYmxlICphdHRyc19odDsKPiArCWNoYXIgKnN5c3BhdGg7Cj4gKwljaGFyICpkcnZwYXRo Owo+ICsJY2hhciAqZHJtX2NhcmRfcGF0aDsKPiArCWNoYXIgKmRybV9yZW5kZXJfcGF0aDsKPiAr CWNoYXIgKnZlbmRvcjsKPiArCWNoYXIgKmRldmljZTsKPiArCWVudW0gaWd0X2RldmljZV90eXBl IGRldl90eXBlOwo+ICt9Owo+ICsKPiArLyogU2Nhbm5lZCBkZXZpY2VzIHN0cnVjdCAqLwo+ICtz dHJ1Y3QgaWd0X2RldmljZXMgewo+ICsJR1B0ckFycmF5ICpkZXZzOwkJLy9hbGwgZ3B1IGRldmlj ZXMgYXJyYXkKPiArCUdQdHJBcnJheSAqdmlldzsJCS8vZmlsdGVyZWQgdmlldwo+ICsJYm9vbCBk ZXZzX3NjYW5uZWQ7Cj4gK307Cj4gKwo+ICsvKiBTY2FubmVkIGRldmljZXMgaG9sZGVyICovCj4g K3N0YXRpYyBzdHJ1Y3QgaWd0X2RldmljZXMgaWd0X2RldnM7Cj4gKwo+ICsvKiBQQ0kgZGV2aWNl IGNsYXNzZXMgd2UgdGFrZSBpbnRvIGFjY291bnQgZHVyaW5nIHNjYW4uCj4gKyAqIEF0dHJpYnV0 ZSBQQ0lfQ0xBU1MgaXMgY29tcGFyZWQgd2l0aCBrZXkgYmVuZWF0aC4gKi8KPiArc3RydWN0IG5h bWVfdmFsdWUgZ3B1X3BjaV9jbGFzc19saXN0W10gPSB7Cj4gKwl7ICIzMDAwMCIsIChncG9pbnRl cikgIlZHQSBjb21wYXRpYmlsZSBjb250cm9sbGVyIiB9LAo+ICsJeyAiMzAxMDAiLCAoZ3BvaW50 ZXIpICJYR0EgY29tcGF0aWJpbGUgY29udHJvbGxlciIgfSwKPiArCXsgIjMwMjAwIiwgKGdwb2lu dGVyKSAiM0QgY29udHJvbGxlciIgfSwKPiArCXsgIjM4MDAwIiwgKGdwb2ludGVyKSAiRGlzcGxh eSBjb250cm9sbGVyIiB9LAo+ICsJeyBOVUxMLCB9LAo+ICt9Owo+ICsKPiArc3RhdGljIHN0cnVj dCB2ZW5kb3Jfc3BlYyB2X2ludGVsICA9IHsgLmRldl90eXBlID0gREVWX1BDSSwKPiArCQkJCSAg ICAgICAudmVuZG9yID0gIkludGVsIiwKPiArCQkJCSAgICAgICAubW9kbmFtZSA9ICJpOTE1IiwK PiArCQkJCSAgICAgICAuY2hpcHNldCA9IERSSVZFUl9JTlRFTAo+ICsJCQkJICAgICB9Owo+ICtz dGF0aWMgc3RydWN0IHZlbmRvcl9zcGVjIHZfYW1kICAgID0geyAuZGV2X3R5cGUgPSBERVZfUENJ LAo+ICsJCQkJICAgICAgIC52ZW5kb3IgPSAiQU1EIiwKPiArCQkJCSAgICAgICAubW9kbmFtZSA9 ICJhbWRncHUiLAo+ICsJCQkJICAgICAgIC5jaGlwc2V0ID0gRFJJVkVSX0FNREdQVQo+ICsJCQkJ ICAgICB9Owo+ICtzdGF0aWMgc3RydWN0IHZlbmRvcl9zcGVjIHZfbnZpZGlhICA9IHsgLmRldl90 eXBlID0gREVWX1BDSSwKPiArCQkJCQkudmVuZG9yID0gIk5WSURJQSIsCj4gKwkJCQkJLm1vZG5h bWUgPSAibnZpZGlhIiwKPiArCQkJCQkuY2hpcHNldCA9IERSSVZFUl9BTlkKPiArCQkJCSAgICAg IH07Cj4gK3N0YXRpYyBzdHJ1Y3QgdmVuZG9yX3NwZWMgdl92Z2VtICAgID0geyAuZGV2X3R5cGUg PSBERVZfUExBVEZPUk1fTk9OX0RJU0NPVkVSQUJMRSwKPiArCQkJCQkudmVuZG9yID0gIlZpcnR1 YWwtR0VNIiwKPiArCQkJCQkubW9kbmFtZSA9ICJ2Z2VtIiwKPiArCQkJCQkuY2hpcHNldCA9IERS SVZFUl9WR0VNCj4gKwkJCQkgICAgICB9Owo+ICtzdGF0aWMgc3RydWN0IHZlbmRvcl9zcGVjIHZf dmttcyAgID0geyAuZGV2X3R5cGUgPSBERVZfUExBVEZPUk1fTk9OX0RJU0NPVkVSQUJMRSwKPiAr CQkJCSAgICAgICAudmVuZG9yID0gIlZpcnR1YWwtS01TIiwKPiArCQkJCSAgICAgICAubW9kbmFt ZSA9ICJ2a21zIiwKPiArCQkJCSAgICAgICAuY2hpcHNldCA9IERSSVZFUl9BTlkKPiArCQkJCSAg ICAgfTsKPiArc3RhdGljIHN0cnVjdCB2ZW5kb3Jfc3BlYyB2X2V4eW5vcyAgPSB7IC5kZXZfdHlw ZSA9IERFVl9QTEFURk9STV9OT05fRElTQ09WRVJBQkxFLAo+ICsJCQkJCS52ZW5kb3IgPSAiU2Ft c3VuZyIsCj4gKwkJCQkJLm1vZG5hbWUgPSAiZXh5bm9zZHJtIiwKPiArCQkJCQkubWF0Y2hfZHJp dmVyID0gImV4eW5vcy1kcm0iLAo+ICsJCQkJCS5jaGlwc2V0ID0gRFJJVkVSX0FOWQo+ICsJCQkJ ICAgICAgfTsKPiArc3RhdGljIHN0cnVjdCB2ZW5kb3Jfc3BlYyB2X3ZjNCAgICA9IHsgLmRldl90 eXBlID0gREVWX1BMQVRGT1JNX0RJU0NPVkVSQUJMRSwKPiArCQkJCSAgICAgICAudmVuZG9yID0g IkJyb2FkY29tIiwKPiArCQkJCSAgICAgICAubW9kbmFtZSA9ICJ2YzQiLAo+ICsJCQkJICAgICAg IC5tYXRjaF9kcml2ZXIgPSAidmM0LWRybSIsCj4gKwkJCQkgICAgICAgLmNoaXBzZXQgPSBEUklW RVJfVkM0Cj4gKwkJCQkgICAgIH07Cj4gKwo+ICsvKiBNYXBwaW5nIHZlbmRvciBpZCA9PiB2ZW5k b3Jfc3BlYyBzaG91bGQgYmUgdW5pcXVlICh2ZW5kb3IgbWF0Y2hpbmcKPiArICogaXMgd3JpdHRl biBhcm91bmQgdGhpcykuCj4gKyAqCj4gKyAqIEtleXMgbXVzdCBiZSBkZWZpbmVkIGFzIGZvbGxv d3M6Cj4gKyAqIFBDSSBkZXZpY2VzOiBQQ0lfU0xPVF9JRCwKPiArICogTm9uLWRpc2NvdmVyYWJs ZSBwbGF0Zm9ybSBkZXZpY2VzOiBNT0RBTElBUywKPiArICogRGlzY292ZXJhYmxlIHBsYXRmb3Jt IGRldmljZXM6IE9GX0NPTVBBVElCTEVfMC4KPiArKi8KPiArc3RydWN0IG5hbWVfdmFsdWUgZ3B1 X3ZlbmRvcl9saXN0W10gPSB7Cj4gKwl7ICI4MDg2IiwgICAgICAgICAgICAgICAgKGdwb2ludGVy KSAmdl9pbnRlbCB9LAo+ICsJeyAiMTAwMiIsICAgICAgICAgICAgICAgIChncG9pbnRlcikgJnZf YW1kIH0sCj4gKwl7ICIxMERFIiwgICAgICAgICAgICAgICAgKGdwb2ludGVyKSAmdl9udmlkaWEg fSwKPiArCXsgInBsYXRmb3JtOnZnZW0iLCAgICAgICAoZ3BvaW50ZXIpICZ2X3ZnZW0gfSwKPiAr CXsgInBsYXRmb3JtOnZrbXMiLCAgICAgICAoZ3BvaW50ZXIpICZ2X3ZrbXMgfSwKPiArCXsgInBs YXRmb3JtOmV4eW5vcy1kcm0iLCAoZ3BvaW50ZXIpICZ2X2V4eW5vcyB9LAo+ICsJeyAiYnJjbSxi Y20yODM1LXZjNCIsICAgIChncG9pbnRlcikgJnZfdmM0IH0sCj4gKwl7IE5VTEwsIH0sCj4gK307 Cj4gKwo+ICsvKiBHZW5lcmljIGhhc2ggdGFibGUgZmlsbCBmdW5jdGlvbiwgcmVxdWlyZXMgbmFt ZSAvIHZhbHVlIHB0cnMgYXJyYXkgKi8KPiArc3RhdGljIHZvaWQgZmlsbF9odChHSGFzaFRhYmxl ICoqaHQsIHN0cnVjdCBuYW1lX3ZhbHVlICpkYXRhKQo+ICt7Cj4gKwlpZiAoKmh0KQo+ICsJCXJl dHVybjsKPiArCj4gKwkqaHQgPSBnX2hhc2hfdGFibGVfbmV3KGdfc3RyX2hhc2gsIGdfc3RyX2Vx dWFsKTsKPiArCWlndF9hc3NlcnQoKmh0KTsKPiArCj4gKwl3aGlsZSAoZGF0YS0+bmFtZSkgewo+ ICsJCWdfaGFzaF90YWJsZV9pbnNlcnQoKmh0LAo+ICsJCQkJICAgIChncG9pbnRlcikgZGF0YS0+ bmFtZSwKPiArCQkJCSAgICBkYXRhLT52YWx1ZSk7Cj4gKwkJZGF0YSsrOwo+ICsJfQo+ICt9Cj4g Kwo+ICsjZGVmaW5lIGdldF92ZW5kb3Jfc3BlYyhwcm9wKSBcCj4gKwlnX2hhc2hfdGFibGVfbG9v a3VwKGdwdV92ZW5kb3JfaHQsIHByb3ApCj4gKwo+ICsvKiBHbyB0aHJvdWdoIHdob2xlIHZlbmRv ciBoYXNoIHRhYmxlIGFuZCBjb21wYXJlIGFnYWluc3QgdmVuZG9yIGZpZWxkLgo+ICsgKiBVc2Vk IG1vc3RseSB3aXRoIHZlbmRvcj0uLi4gZmlsdGVyIHBhcmFtZXRlciB3aGVuIFBDSSBpZCBpcyBu b3QgbWF0Y2hlZC4KPiArKi8KPiArc3RhdGljIGJvb2wgaXNfcGNpX3ZlbmRvcl9uYW1lKGNvbnN0 IGNoYXIgKm5hbWUpCj4gK3sKPiArCWJvb2wgcmV0ID0gZmFsc2U7Cj4gKwlHTGlzdCAqa2V5cyA9 IGdfaGFzaF90YWJsZV9nZXRfa2V5cyhncHVfdmVuZG9yX2h0KTsKPiArCj4gKwlpZiAoIW5hbWUp Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCXdoaWxlIChrZXlzKSB7Cj4gKwkJY2hhciAqayA9 IChjaGFyICopIGtleXMtPmRhdGE7Cj4gKwkJc3RydWN0IHZlbmRvcl9zcGVjICp2cyA9IGdfaGFz aF90YWJsZV9sb29rdXAoZ3B1X3ZlbmRvcl9odCwgayk7Cj4gKwkJa2V5cyA9IGdfbGlzdF9uZXh0 KGtleXMpOwo+ICsKPiArCQlpZiAodnMtPmRldl90eXBlICE9IERFVl9QQ0kpCj4gKwkJCWNvbnRp bnVlOwo+ICsKPiArCQlpZiAoIXN0cmNhc2VjbXAobmFtZSwgdnMtPnZlbmRvcikpIHsKPiArCQkJ cmV0ID0gdHJ1ZTsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsJfQo+ICsJZ19saXN0X2ZyZWUoa2V5 cyk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyogUmVhZGluZyBzeXNhdHRyIHZh bHVlcyBjYW4gdGFrZSB0aW1lIChldmVuIHNlY29uZHMpLAo+ICsgKiB3ZSB3YW50IHRvIGF2b2lk IHJlYWRpbmcgc3VjaCBrZXlzLgo+ICsqLwo+ICtzdGF0aWMgdm9pZCBwb3B1bGF0ZV9ibGFja2xp c3Rfa2V5cyh2b2lkKQo+ICt7Cj4gKwljb25zdCBjaGFyICprZXlzW10gPSB7ICJjb25maWciLCAi bW9kYWxpYXMiLAo+ICsJCQkgICAgICAgInJlc291cmNlIiwKPiArCQkJICAgICAgICJyZXNvdXJj ZTAiLCAicmVzb3VyY2UxIiwgInJlc291cmNlMiIsCj4gKwkJCSAgICAgICAicmVzb3VyY2UzIiwg InJlc291cmNlNCIsICJyZXNvdXJjZTUiLAo+ICsJCQkgICAgICAgInJlc291cmNlMF93YyIsICJy ZXNvdXJjZTFfd2MiLCAicmVzb3VyY2UyX3djIiwKPiArCQkJICAgICAgICJyZXNvdXJjZTNfd2Mi LCAicmVzb3VyY2U0X3djIiwgInJlc291cmNlNV93YyIsCj4gKwkJCSAgICAgICAiZHJpdmVyIiwK PiArCQkJICAgICAgICJ1ZXZlbnQiLCBOVUxMfTsKPiArCWNvbnN0IGNoYXIgKmtleTsKPiArCWlu dCBpID0gMDsKPiArCj4gKwlpZiAoYmxhY2tsaXN0X2tleXNfaHQpCj4gKwkJcmV0dXJuOwo+ICsK PiArCWJsYWNrbGlzdF9rZXlzX2h0ID0gZ19oYXNoX3RhYmxlX25ldyhnX3N0cl9oYXNoLCBnX3N0 cl9lcXVhbCk7Cj4gKwlpZ3RfYXNzZXJ0KGJsYWNrbGlzdF9rZXlzX2h0KTsKPiArCj4gKwl3aGls ZSAoKGtleSA9IGtleXNbaSsrXSkpCj4gKwkJZ19oYXNoX3RhYmxlX2FkZChibGFja2xpc3Rfa2V5 c19odCwgKGdwb2ludGVyKSBrZXkpOwo+ICt9Cj4gKwo+ICsjZGVmaW5lIGlzX29uX2JsYWNrbGlz dChrZXkpIFwKPiArCWdfaGFzaF90YWJsZV9jb250YWlucyhibGFja2xpc3Rfa2V5c19odCwga2V5 KQo+ICsKPiArc3RhdGljIHN0cnVjdCBpZ3RfZGV2aWNlICppZ3RfZGV2aWNlX25ldyh2b2lkKQo+ ICt7Cj4gKwlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2Owo+ICsJZGV2ID0gY2FsbG9jKDEsIHNpemVv ZihzdHJ1Y3QgaWd0X2RldmljZSkpOwo+ICsJaWYgKCFkZXYpCj4gKwkJcmV0dXJuIE5VTEw7Cj4g Kwo+ICsJZGV2LT5hdHRyc19odCA9IGdfaGFzaF90YWJsZV9uZXdfZnVsbChnX3N0cl9oYXNoLCBn X3N0cl9lcXVhbCwKPiArCQkJCQkgICAgICBmcmVlLCBmcmVlKTsKPiArCWRldi0+cHJvcHNfaHQg PSBnX2hhc2hfdGFibGVfbmV3X2Z1bGwoZ19zdHJfaGFzaCwgZ19zdHJfZXF1YWwsCj4gKwkJCQkJ ICAgICAgZnJlZSwgZnJlZSk7Cj4gKwo+ICsJaWYgKGRldi0+YXR0cnNfaHQgJiYgZGV2LT5wcm9w c19odCkKPiArCQlyZXR1cm4gZGV2Owo+ICsKPiArCXJldHVybiBOVUxMOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBpZ3RfZGV2aWNlX2FkZF9wcm9wKHN0cnVjdCBpZ3RfZGV2aWNlICpkZXYsCj4g KwkJCQljb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlKQo+ICt7Cj4gKwlpZiAoIWtl eSB8fCAhdmFsdWUpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWdfaGFzaF90YWJsZV9pbnNlcnQoZGV2 LT5wcm9wc19odCwgc3RyZHVwKGtleSksIHN0cmR1cCh2YWx1ZSkpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBpZ3RfZGV2aWNlX2FkZF9hdHRyKHN0cnVjdCBpZ3RfZGV2aWNlICpkZXYsCj4gKwkJ CQljb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlKQo+ICt7Cj4gKwljb25zdCBjaGFy ICp2ID0gdmFsdWU7Cj4gKwo+ICsJaWYgKCFrZXkpCj4gKwkJcmV0dXJuOwo+ICsKPiArCS8qIEl0 J3MgcG9zc2libGUgd2UgaGF2ZSBzeW1saW5rIGF0IGtleSBmaWxlbmFtZSwgYnV0IHVkZXYKPiAr CSAqIGxpYnJhcnkgcmVzb2x2ZXMgb25seSBmZXcgb2YgdGhlbSAqLwo+ICsJaWYgKCF2KSB7Cj4g KwkJc3RydWN0IHN0YXQgc3Q7Cj4gKwkJY2hhciBwYXRoW1BBVEhfTUFYXTsKPiArCQljaGFyIGxp bmt0b1tQQVRIX01BWF07Cj4gKwkJaW50IGxlbjsKPiArCj4gKwkJc25wcmludGYocGF0aCwgc2l6 ZW9mKHBhdGgpLCAiJXMvJXMiLCBkZXYtPnN5c3BhdGgsIGtleSk7Cj4gKwkJaWYgKGxzdGF0KHBh dGgsICZzdCkgIT0gMCkKPiArCQkJcmV0dXJuOwo+ICsKPiArCQlsZW4gPSByZWFkbGluayhwYXRo LCBsaW5rdG8sIHNpemVvZihsaW5rdG8pKTsKPiArCQlpZiAobGVuIDw9IDAgfHwgbGVuID09IChz c2l6ZV90KSBzaXplb2YobGlua3RvKSkKPiArCQkJcmV0dXJuOwo+ICsJCWxpbmt0b1tsZW5dID0g J1wwJzsKPiArCQl2ID0gc3RycmNocihsaW5rdG8sICcvJyk7Cj4gKwkJaWYgKHYgPT0gTlVMTCkK PiArCQkJcmV0dXJuOwo+ICsJCXYrKzsKPiArCX0KPiArCj4gKwlnX2hhc2hfdGFibGVfaW5zZXJ0 KGRldi0+YXR0cnNfaHQsIHN0cmR1cChrZXkpLCBzdHJkdXAodikpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBzY2FuX3Byb3BzKHN0cnVjdCB1ZGV2X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWd0X2Rl dmljZSAqaWRldikKPiArewo+ICsJc3RydWN0IHVkZXZfbGlzdF9lbnRyeSAqZW50cnk7Cj4gKwo+ ICsJZW50cnkgPSB1ZGV2X2RldmljZV9nZXRfcHJvcGVydGllc19saXN0X2VudHJ5KGRldik7Cj4g Kwl3aGlsZSAoZW50cnkpIHsKPiArCQljb25zdCBjaGFyICpuYW1lID0gdWRldl9saXN0X2VudHJ5 X2dldF9uYW1lKGVudHJ5KTsKPiArCQljb25zdCBjaGFyICp2YWx1ZSA9IHVkZXZfbGlzdF9lbnRy eV9nZXRfdmFsdWUoZW50cnkpOwo+ICsJCWlndF9kZXZpY2VfYWRkX3Byb3AoaWRldiwgbmFtZSwg dmFsdWUpOwo+ICsJCWVudHJ5ID0gdWRldl9saXN0X2VudHJ5X2dldF9uZXh0KGVudHJ5KTsKPiAr CQlEQkcoInByb3A6ICVzLCB2YWw6ICVzXG4iLCBuYW1lLCB2YWx1ZSk7Cj4gKwl9Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIHNjYW5fYXR0cnMoc3RydWN0IHVkZXZfZGV2aWNlICpkZXYsIHN0cnVj dCBpZ3RfZGV2aWNlICppZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgdWRldl9saXN0X2VudHJ5ICplbnRy eTsKPiArCj4gKwllbnRyeSA9IHVkZXZfZGV2aWNlX2dldF9zeXNhdHRyX2xpc3RfZW50cnkoZGV2 KTsKPiArCXdoaWxlIChlbnRyeSkgewo+ICsJCWNvbnN0IGNoYXIgKmtleSA9IHVkZXZfbGlzdF9l bnRyeV9nZXRfbmFtZShlbnRyeSk7Cj4gKwkJY29uc3QgY2hhciAqdmFsdWU7Cj4gKwo+ICsJCWlm IChpc19vbl9ibGFja2xpc3Qoa2V5KSkgewo+ICsJCQllbnRyeSA9IHVkZXZfbGlzdF9lbnRyeV9n ZXRfbmV4dChlbnRyeSk7Cj4gKwkJCWNvbnRpbnVlOwo+ICsJCX0KPiArCj4gKwkJdmFsdWUgPSB1 ZGV2X2RldmljZV9nZXRfc3lzYXR0cl92YWx1ZShkZXYsIGtleSk7Cj4gKwkJaWd0X2RldmljZV9h ZGRfYXR0cihpZGV2LCBrZXksIHZhbHVlKTsKPiArCQllbnRyeSA9IHVkZXZfbGlzdF9lbnRyeV9n ZXRfbmV4dChlbnRyeSk7Cj4gKwkJREJHKCJhdHRyOiAlcywgdmFsOiAlc1xuIiwga2V5LCB2YWx1 ZSk7Cj4gKwl9Cj4gK30KPiArCj4gKyNkZWZpbmUgZ2V0X3Byb3AoZGV2LCBwcm9wKSAoY2hhciAq KSBnX2hhc2hfdGFibGVfbG9va3VwKGRldi0+cHJvcHNfaHQsIHByb3ApCj4gKyNkZWZpbmUgZ2V0 X2F0dHIoZGV2LCBhdHRyKSAoY2hhciAqKSBnX2hhc2hfdGFibGVfbG9va3VwKGRldi0+YXR0cnNf aHQsIGF0dHIpCj4gKyNkZWZpbmUgZ2V0X3Byb3BfcGNpX2lkKGRldikgICAgZ2V0X3Byb3AoZGV2 LCAiUENJX0lEIikKPiArI2RlZmluZSBnZXRfcHJvcF9wY2lfc2xvdChkZXYpICBnZXRfcHJvcChk ZXYsICJQQ0lfU0xPVF9OQU1FIikKPiArI2RlZmluZSBnZXRfcHJvcF9kZXZwYXRoKGRldikgICBn ZXRfcHJvcChkZXYsICJERVZQQVRIIikKPiArI2RlZmluZSBnZXRfcHJvcF9kcml2ZXIoZGV2KSAg ICBnZXRfcHJvcChkZXYsICJEUklWRVIiKQo+ICsjZGVmaW5lIGdldF9wcm9wX21vZGFsaWFzKGRl dikgIGdldF9wcm9wKGRldiwgIk1PREFMSUFTIikKPiArI2RlZmluZSBnZXRfcHJvcF9vZl9jb21w YXRpYmxlXzAoZGV2KSBnZXRfcHJvcChkZXYsICJPRl9DT01QQVRJQkxFXzAiKQo+ICsKPiArLyog R2V0cyBQQ0lfSUQgcHJvcGVydHksIHNwbGl0cyB0byB4eHh4Onl5eXkgYW5kIHN0b3Jlcwo+ICsg KiB4eHh4IHRvIGRldi0+dmVuZG9yIGFuZCB5eXl5IHRvIGRldi0+ZGV2aWNlIGZvcgo+ICsgKiBm YXN0ZXIgYWNjZXNzLgo+ICsgKi8KPiArc3RhdGljIHZvaWQgc2V0X3ZlbmRvcl9kZXZpY2Uoc3Ry dWN0IGlndF9kZXZpY2UgKmRldikKPiArewo+ICsJY29uc3QgY2hhciAqcGNpX2lkID0gZ2V0X3By b3BfcGNpX2lkKGRldik7Cj4gKwlpZiAoIXBjaV9pZCB8fCBzdHJsZW4ocGNpX2lkKSAhPSA5KQo+ ICsJCXJldHVybjsKPiArCWRldi0+dmVuZG9yID0gc3RybmR1cChwY2lfaWQsIDQpOwo+ICsJZGV2 LT5kZXZpY2UgPSBzdHJuZHVwKHBjaV9pZCArIDUsIDQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCBmaW5kX2RybV9wYXRocyhzdHJ1Y3QgaWd0X2RldmljZSAqZGV2LCBib29sIHBsYXRmb3JtX2No ZWNrKQo+ICt7Cj4gKwljaGFyIGRpcm5hbWVbUEFUSF9NQVhdOwo+ICsJRElSICpkaXI7Cj4gKwlj b25zdCBjaGFyICpkcml2ZXIgPSBnZXRfcHJvcF9kcml2ZXIoZGV2KTsKPiArCWNvbnN0IGNoYXIg KmRldnBhdGggPSBnZXRfcHJvcF9kZXZwYXRoKGRldik7Cj4gKwlzdHJ1Y3QgZGlyZW50ICplOwo+ ICsKPiArCS8qIFRoZXJlJ3Mgbm8gRFJJVkVSLCBzbyBubyAvZGV2L2RyaS9jYXJkWCBhbmQgL2Rl di9kcmkvcmVuZGVyRAo+ICsJICogZmlsZXMgZXhpc3RzLiBJZiB0aGVyZSdzIG5vIERFVlBBVEgg dGhlcmUncyBzb21ldGhpbmcgd3JvbmcKPiArCSAqIGFzIHdlbGwuICovCj4gKwlpZiAoIXBsYXRm b3JtX2NoZWNrICYmICghZHJpdmVyIHx8ICFkZXZwYXRoKSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJ c25wcmludGYoZGlybmFtZSwgUEFUSF9NQVgsICIlcy9kcm0iLCBkZXYtPnN5c3BhdGgpOwo+ICsJ ZGlyID0gb3BlbmRpcihkaXJuYW1lKTsKPiArCWlmICghZGlyKQo+ICsJCXJldHVybjsKPiArCj4g Kwl3aGlsZSgoZSA9IHJlYWRkaXIoZGlyKSkpIHsKPiArCQlpbnQgbjsKPiArCQlpZiAoc3NjYW5m KGUtPmRfbmFtZSwgImNhcmQlZCIsICZuKSA9PSAxKQo+ICsJCQlkZXYtPmRybV9jYXJkX3BhdGgg PSBnX3N0cmR1cF9wcmludGYoIiVzLyVzIiwKPiArCQkJCQkJCSAgICAgSUdUX0RSTV9QQVRILAo+ ICsJCQkJCQkJICAgICBlLT5kX25hbWUpOwo+ICsJCWVsc2UgaWYgKHNzY2FuZihlLT5kX25hbWUs ICJyZW5kZXJEJWQiLCAmbikgPT0gMSkKPiArCQkJZGV2LT5kcm1fcmVuZGVyX3BhdGggPSBnX3N0 cmR1cF9wcmludGYoIiVzLyVzIiwKPiArCQkJCQkJCSAgICAgICBJR1RfRFJNX1BBVEgsCj4gKwkJ CQkJCQkgICAgICAgZS0+ZF9uYW1lKTsKPiArCX0KPiArCWNsb3NlZGlyKGRpcik7Cj4gKwo+ICsJ aWYgKGRldi0+ZHJtX2NhcmRfcGF0aCkKPiArCQlEQkcoImNhcmQ6ICVzXG4iLCBkZXYtPmRybV9j YXJkX3BhdGgpOwo+ICsJaWYgKGRldi0+ZHJtX3JlbmRlcl9wYXRoKQo+ICsJCURCRygicmVuZDog JXNcbiIsIGRldi0+ZHJtX3JlbmRlcl9wYXRoKTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgcHJl cGFyZV9zY2FuKHZvaWQpCj4gK3sKPiArCWlmICghaWd0X2RldnMuZGV2cykKPiArCQlpZ3RfZGV2 cy5kZXZzID0gZ19wdHJfYXJyYXlfc2l6ZWRfbmV3KDQpOwo+ICsJaWYgKCFpZ3RfZGV2cy52aWV3 KQo+ICsJCWlndF9kZXZzLnZpZXcgPSBnX3B0cl9hcnJheV9zaXplZF9uZXcoNCk7Cj4gKwo+ICsJ aWYgKCFpZ3RfZGV2cy5kZXZzIHx8ICFpZ3RfZGV2cy52aWV3KQo+ICsJCXJldHVybiBmYWxzZTsK PiArCj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgaXNfdmFsaWRfcGNp X2dwdShjb25zdCBjaGFyICpwcm9wKQo+ICt7Cj4gKwlyZXR1cm4gZ19oYXNoX3RhYmxlX2NvbnRh aW5zKGdwdV9wY2lfY2xhc3NfaHQsIHByb3ApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBpc192 YWxpZF9wbGF0Zm9ybV9ncHUoY29uc3QgY2hhciAqcHJvcCkKPiArewo+ICsJc3RydWN0IHZlbmRv cl9zcGVjICp2cyA9IGdfaGFzaF90YWJsZV9sb29rdXAoZ3B1X3ZlbmRvcl9odCwgcHJvcCk7Cj4g KwlpZiAoIXZzKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwlyZXR1cm4gdnMtPmRldl90eXBl ID09IERFVl9QTEFURk9STV9OT05fRElTQ09WRVJBQkxFIHx8Cj4gKwkJCXZzLT5kZXZfdHlwZSA9 PSBERVZfUExBVEZPUk1fRElTQ09WRVJBQkxFOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBhZGRf cGNpX2dwdShzdHJ1Y3QgaWd0X2RldmljZSAqZGV2KQo+ICt7Cj4gKwlmaW5kX2RybV9wYXRocyhk ZXYsIGZhbHNlKTsKPiArCj4gKwlnX3B0cl9hcnJheV9hZGQoaWd0X2RldnMuZGV2cywgZGV2KTsK PiArCWdfcHRyX2FycmF5X2FkZChpZ3RfZGV2cy52aWV3LCBkZXYpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBhZGRfcGxhdGZvcm1fbm9uX2Rpc2NvdmVyYWJsZV9ncHUoc3RydWN0IGlndF9kZXZp Y2UgKmRldikKPiArewo+ICsJZmluZF9kcm1fcGF0aHMoZGV2LCB0cnVlKTsKPiArCWlmICghZ2V0 X3Byb3BfZHJpdmVyKGRldikpCj4gKwkJaWd0X2RldmljZV9hZGRfcHJvcChkZXYsICJEUklWRVIi LCBkZXYtPnZzLT5tb2RuYW1lKTsKPiArCj4gKwlnX3B0cl9hcnJheV9hZGQoaWd0X2RldnMuZGV2 cywgZGV2KTsKPiArCWdfcHRyX2FycmF5X2FkZChpZ3RfZGV2cy52aWV3LCBkZXYpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCBhZGRfcGxhdGZvcm1fZGlzY292ZXJhYmxlX2dwdShzdHJ1Y3QgaWd0 X2RldmljZSAqZGV2KQo+ICt7Cj4gKwlmaW5kX2RybV9wYXRocyhkZXYsIHRydWUpOwo+ICsJZ19w dHJfYXJyYXlfYWRkKGlndF9kZXZzLmRldnMsIGRldik7Cj4gKwlnX3B0cl9hcnJheV9hZGQoaWd0 X2RldnMudmlldywgZGV2KTsKPiArfQo+ICsKPiArLyogQ2xhc3NpZmllciB0YWJsZS4KPiArICog U2Nhbm5pbmcgdWRldiBkZXZpY2VzIGxvb2tzIHNhbWUgZm9yIHBjaSBhbmQgcGxhdGZvcm0gZGV2 aWNlcywgYnV0IGRpZmZlcnMKPiArICogaW4gbG9naWMgcmVnYXJkaW5nIGFkZGluZyBkZXZpY2Vz IHRvIHRoZSBkZXZpY2UgYXJyYXkuCj4gKyovCj4gK3N0cnVjdCB7Cj4gKwlib29sICgqaXNfdmFs aWQpKGNvbnN0IGNoYXIgKnByb3ApOyAvL2NoZWNrIGlzIGRldmljZSBiZWxvbmdzIHRvIHRoZSBj bGFzcwo+ICsJdm9pZCAoKmFkZCkoc3RydWN0IGlndF9kZXZpY2UgKmRldik7IC8vYWRkIGRldmlj ZSB0byB0aGUgYXJyYXkgYW5kIGF1eCBzdHVmZgo+ICsJdW5zaWduZWQgaW50IGRldl90eXBlOwo+ ICsJY29uc3QgY2hhciAqc3Vic3lzOwo+ICsJY29uc3QgY2hhciAqZmluZHByb3A7Cj4gK30gY2xz W10gPSB7Cj4gKwlbSUdUX1NDQU5fUENJXSA9IHsgLnN1YnN5cyA9ICJwY2kiLAo+ICsJCQkgICAu ZmluZHByb3AgPSAiUENJX0NMQVNTIiwKPiArCQkJICAgLmRldl90eXBlID0gREVWX1BDSSwKPiAr CQkJICAgLmlzX3ZhbGlkID0gaXNfdmFsaWRfcGNpX2dwdSwKPiArCQkJICAgLmFkZCA9IGFkZF9w Y2lfZ3B1LAo+ICsJCQkgfSwKPiArCVtJR1RfU0NBTl9QTEFURk9STV9OT05fRElTQ09WRVJBQkxF XSA9IHsgLnN1YnN5cyA9ICJwbGF0Zm9ybSIsCj4gKwkJCQkJCSAuZmluZHByb3AgPSAiTU9EQUxJ QVMiLAo+ICsJCQkJCQkgLmRldl90eXBlID0gREVWX1BMQVRGT1JNX05PTl9ESVNDT1ZFUkFCTEUs Cj4gKwkJCQkJCSAuaXNfdmFsaWQgPSBpc192YWxpZF9wbGF0Zm9ybV9ncHUsCj4gKwkJCQkJCSAu YWRkID0gYWRkX3BsYXRmb3JtX25vbl9kaXNjb3ZlcmFibGVfZ3B1LAo+ICsJCQkJCSAgICAgICB9 LAo+ICsJW0lHVF9TQ0FOX1BMQVRGT1JNX0RJU0NPVkVSQUJMRV0gPSB7IC5zdWJzeXMgPSAicGxh dGZvcm0iLAo+ICsJCQkJCSAgICAgLmZpbmRwcm9wID0gIk9GX0NPTVBBVElCTEVfMCIsCj4gKwkJ CQkJICAgICAuZGV2X3R5cGUgPSBERVZfUExBVEZPUk1fRElTQ09WRVJBQkxFLAo+ICsJCQkJCSAg ICAgLmlzX3ZhbGlkID0gaXNfdmFsaWRfcGxhdGZvcm1fZ3B1LAo+ICsJCQkJCSAgICAgLmFkZCA9 IGFkZF9wbGF0Zm9ybV9kaXNjb3ZlcmFibGVfZ3B1LAo+ICsJCQkJCSAgIH0sCj4gK307Cj4gKwo+ ICtzdGF0aWMgdm9pZCBzY2FuX2RldmljZXMoZW51bSBpZ3RfZGV2aWNlc19zY2FuX3R5cGUgc2Nh bnR5cGUpCj4gK3sKPiArCXN0cnVjdCB1ZGV2ICp1ZGV2Owo+ICsJc3RydWN0IHVkZXZfZGV2aWNl ICpkZXY7Cj4gKwlzdHJ1Y3QgdWRldl9lbnVtZXJhdGUgKmVudW1lcmF0ZTsKPiArCXN0cnVjdCB1 ZGV2X2xpc3RfZW50cnkgKmRldmljZXMsICpkZXZfbGlzdF9lbnRyeTsKPiArCWludCByZXQ7Cj4g Kwo+ICsJdWRldiA9IHVkZXZfbmV3KCk7Cj4gKwlpZ3RfYXNzZXJ0KHVkZXYpOwo+ICsKPiArCWVu dW1lcmF0ZSA9IHVkZXZfZW51bWVyYXRlX25ldyh1ZGV2KTsKPiArCWlndF9hc3NlcnQoZW51bWVy YXRlKTsKPiArCj4gKwlEQkcoIlNjYW5uaW5nIHN1YnN5c3RlbSAlc1xuIiwgY2xzW3NjYW50eXBl XS5zdWJzeXMpOwo+ICsJcmV0ID0gdWRldl9lbnVtZXJhdGVfYWRkX21hdGNoX3N1YnN5c3RlbShl bnVtZXJhdGUsIGNsc1tzY2FudHlwZV0uc3Vic3lzKTsKPiArCWlndF9hc3NlcnQoIXJldCk7Cj4g Kwo+ICsJcmV0ID0gdWRldl9lbnVtZXJhdGVfc2Nhbl9kZXZpY2VzKGVudW1lcmF0ZSk7Cj4gKwlp Z3RfYXNzZXJ0KCFyZXQpOwo+ICsKPiArCWRldmljZXMgPSB1ZGV2X2VudW1lcmF0ZV9nZXRfbGlz dF9lbnRyeShlbnVtZXJhdGUpOwo+ICsJaWYgKCFkZXZpY2VzKQo+ICsJCXJldHVybjsKPiArCj4g Kwl1ZGV2X2xpc3RfZW50cnlfZm9yZWFjaChkZXZfbGlzdF9lbnRyeSwgZGV2aWNlcykgewo+ICsJ CXN0cnVjdCBpZ3RfZGV2aWNlICppZGV2Owo+ICsJCWNvbnN0IGNoYXIgKnBhdGg7Cj4gKwkJY29u c3QgY2hhciAqcHJvcDsKPiArCj4gKwkJcGF0aCA9IHVkZXZfbGlzdF9lbnRyeV9nZXRfbmFtZShk ZXZfbGlzdF9lbnRyeSk7Cj4gKwkJZGV2ID0gdWRldl9kZXZpY2VfbmV3X2Zyb21fc3lzcGF0aCh1 ZGV2LCBwYXRoKTsKPiArCQlwcm9wID0gdWRldl9kZXZpY2VfZ2V0X3Byb3BlcnR5X3ZhbHVlKGRl diwgY2xzW3NjYW50eXBlXS5maW5kcHJvcCk7Cj4gKwkJaWYgKCFwcm9wIHx8ICFjbHNbc2NhbnR5 cGVdLmlzX3ZhbGlkKHByb3ApKSB7Cj4gKwkJCXVkZXZfZGV2aWNlX3VucmVmKGRldik7Cj4gKwkJ CWNvbnRpbnVlOwo+ICsJCX0KPiArCQlpZGV2ID0gaWd0X2RldmljZV9uZXcoKTsKPiArCQlpZ3Rf YXNzZXJ0KGlkZXYpOwo+ICsKPiArCQlpZGV2LT5kZXZfdHlwZSA9IGNsc1tzY2FudHlwZV0uZGV2 X3R5cGU7Cj4gKwkJaWRldi0+c3lzcGF0aCA9IHN0cmR1cCh1ZGV2X2RldmljZV9nZXRfc3lzcGF0 aChkZXYpKTsKPiArCQlzY2FuX3Byb3BzKGRldiwgaWRldik7Cj4gKwkJc2Nhbl9hdHRycyhkZXYs IGlkZXYpOwo+ICsKPiArCQlzd2l0Y2ggKGlkZXYtPmRldl90eXBlKSB7Cj4gKwkJY2FzZSBERVZf UENJOgo+ICsJCQlzZXRfdmVuZG9yX2RldmljZShpZGV2KTsKPiArCQkJaWRldi0+cHJldHR5X25h bWUgPSBzdHJkdXAoZ2V0X3Byb3BfcGNpX3Nsb3QoaWRldikpOwo+ICsJCQlpZGV2LT52cyA9IGdl dF92ZW5kb3Jfc3BlYyhpZGV2LT52ZW5kb3IpOwo+ICsJCQlicmVhazsKPiArCQlkZWZhdWx0Ogo+ ICsJCQlpZGV2LT5wcmV0dHlfbmFtZSA9IHN0cmR1cChwcm9wKTsKPiArCQkJaWRldi0+dnMgPSBn ZXRfdmVuZG9yX3NwZWMocHJvcCk7Cj4gKwkJfQo+ICsJCWlndF9hc3NlcnQoaWRldi0+dnMpOwo+ ICsKPiArCQljbHNbc2NhbnR5cGVdLmFkZChpZGV2KTsKPiArCQl1ZGV2X2RldmljZV91bnJlZihk ZXYpOwo+ICsJfQo+ICsJdWRldl9lbnVtZXJhdGVfdW5yZWYoZW51bWVyYXRlKTsKPiArCXVkZXZf dW5yZWYodWRldik7Cj4gK30KPiArCj4gK3N0cnVjdCBuYW1lX3ZhbHVlIGZpbHRlcl9kZWZpbml0 aW9uX2xpc3RbXTsKPiArc3RhdGljIHZvaWQgcG9wdWxhdGVfZ3B1X2RhdGEodm9pZCkKPiArewo+ ICsJZmlsbF9odCgmZ3B1X3BjaV9jbGFzc19odCwgJmdwdV9wY2lfY2xhc3NfbGlzdFswXSk7Cj4g KwlmaWxsX2h0KCZncHVfdmVuZG9yX2h0LCAmZ3B1X3ZlbmRvcl9saXN0WzBdKTsKPiArCWZpbGxf aHQoJmZpbHRlcl9kZWZpbml0aW9uX2h0LCAmZmlsdGVyX2RlZmluaXRpb25fbGlzdFswXSk7Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIGlndF9kZXZpY2VfZnJlZShzdHJ1Y3QgaWd0X2RldmljZSAq ZGV2KQo+ICt7Cj4gKwlmcmVlKGRldi0+cHJldHR5X25hbWUpOwo+ICsJZnJlZShkZXYtPmRldmlj ZSk7Cj4gKwlmcmVlKGRldi0+ZHJtX2NhcmRfcGF0aCk7Cj4gKwlmcmVlKGRldi0+ZHJtX3JlbmRl cl9wYXRoKTsKPiArCWZyZWUoZGV2LT5kcnZwYXRoKTsKPiArCWZyZWUoZGV2LT5zeXNwYXRoKTsK PiArCWZyZWUoZGV2LT52ZW5kb3IpOwo+ICsJZ19oYXNoX3RhYmxlX2Rlc3Ryb3koZGV2LT5hdHRy c19odCk7Cj4gKwlnX2hhc2hfdGFibGVfZGVzdHJveShkZXYtPnByb3BzX2h0KTsKPiArfQo+ICsK PiArdm9pZCBpZ3RfZGV2aWNlc19zY2FuKGJvb2wgZm9yY2UpCj4gK3sKPiArCWlmIChmb3JjZSAm JiBpZ3RfZGV2cy5kZXZzX3NjYW5uZWQpIHsKPiArCQlmb3IgKGludCBpID0gMDsgaSA8IGlndF9k ZXZzLmRldnMtPmxlbjsgaSsrKSB7Cj4gKwkJCXN0cnVjdCBpZ3RfZGV2aWNlICpkZXYgPSBnX3B0 cl9hcnJheV9pbmRleChpZ3RfZGV2cy5kZXZzLCBpKTsKPiArCQkJaWd0X2RldmljZV9mcmVlKGRl dik7Cj4gKwkJCWZyZWUoZGV2KTsKPiArCQl9Cj4gKwkJaWd0X2RldnMuZGV2c19zY2FubmVkID0g ZmFsc2U7Cj4gKwkJZ19wdHJfYXJyYXlfZnJlZShpZ3RfZGV2cy52aWV3LCB0cnVlKTsKPiArCQln X3B0cl9hcnJheV9mcmVlKGlndF9kZXZzLmRldnMsIHRydWUpOwo+ICsJCWlndF9kZXZzLnZpZXcg PSBOVUxMOwo+ICsJCWlndF9kZXZzLmRldnMgPSBOVUxMOwo+ICsJfQo+ICsKPiArCWlmIChpZ3Rf ZGV2cy5kZXZzX3NjYW5uZWQpCj4gKwkJcmV0dXJuOwo+ICsKPiArCXBvcHVsYXRlX2JsYWNrbGlz dF9rZXlzKCk7ICAgICAgLy9rZXlzIGZyb20gc3lzYXR0ciB3ZSBza2lwCj4gKwlwb3B1bGF0ZV9n cHVfZGF0YSgpOwo+ICsKPiArCXByZXBhcmVfc2NhbigpOwo+ICsJc2Nhbl9kZXZpY2VzKElHVF9T Q0FOX1BDSSk7Cj4gKwlzY2FuX2RldmljZXMoSUdUX1NDQU5fUExBVEZPUk1fTk9OX0RJU0NPVkVS QUJMRSk7Cj4gKwlzY2FuX2RldmljZXMoSUdUX1NDQU5fUExBVEZPUk1fRElTQ09WRVJBQkxFKTsK PiArCWlndF9kZXZzLmRldnNfc2Nhbm5lZCA9IHRydWU7Cj4gK30KPiArCj4gKyNkZWZpbmUgcHJf c2ltcGxlKGssIHYpIHByaW50ZigiICAgICUtMTZzOiAlc1xuIiwgaywgdikKPiArI2RlZmluZSBw cl9zaW1wbGVfcHJvcChkZXYsIGtleSkgcHJfc2ltcGxlKGtleSwgZ2V0X3Byb3AoZGV2LCBrZXkp KQo+ICsjZGVmaW5lIHByX3NpbXBsZV9hdHRyKGRldiwga2V5KSBwcl9zaW1wbGUoa2V5LCBnZXRf YXR0cihkZXYsIGtleSkpCj4gKwo+ICtzdGF0aWMgdm9pZCBwcmludF92ZW5kb3Ioc3RydWN0IGln dF9kZXZpY2UgKmRldikKPiArewo+ICsJc3RydWN0IHZlbmRvcl9zcGVjICp2cyA9IGRldi0+dnM7 Cj4gKwljaGFyICppbmZvID0gYWxsb2NhKDI1Nik7Cj4gKwo+ICsJc25wcmludGYoaW5mbywgMjU2 LCAiJXMgKCVzLCBtb2R1bGU6ICVzJXMpIiwgZGV2LT52ZW5kb3IsCj4gKwkJIHZzID8gdnMtPnZl bmRvciA6ICJ1bmtub3duIiwKPiArCQkgdnMgPyB2cy0+bW9kbmFtZSA6ICJ1bmtub3duIiwKPiAr CQkgZGV2LT5kcm1fY2FyZF9wYXRoID8gIiIgOiAiIFtub3QgYmluZGVkL2xvYWRlZF0iKTsKPiAr CXByX3NpbXBsZSgidmVuZG9yIiwgaW5mbyk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGlndF9k ZXZzX3ByaW50X3NpbXBsZShHUHRyQXJyYXkgKnZpZXcsCj4gKwkJCQkgIGJvb2wgc2hvd19wcm9w cywgYm9vbCBzaG93X2F0dHJzKQo+ICt7Cj4gKwlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2Owo+ICsJ aW50IGk7Cj4gKwo+ICsJaWYgKCF2aWV3KQo+ICsJCXJldHVybjsKPiArCj4gKwlmb3IgKGkgPSAw OyBpIDwgdmlldy0+bGVuOyBpKyspIHsKPiArCQlkZXYgPSBnX3B0cl9hcnJheV9pbmRleCh2aWV3 LCBpKTsKPiArCQlwcmludGYoIiVzXG4iLCBkZXYtPnByZXR0eV9uYW1lKTsKPiArCQlwcl9zaW1w bGUoInN5c3BhdGgiLCBkZXYtPnN5c3BhdGgpOwo+ICsJCXByX3NpbXBsZSgiZHJtIGNhcmQiLCBk ZXYtPmRybV9jYXJkX3BhdGgpOwo+ICsJCXByX3NpbXBsZSgiZHJtIHJlbmRlciIsIGRldi0+ZHJt X3JlbmRlcl9wYXRoKTsKPiArCj4gKwkJaWYgKHNob3dfcHJvcHMpIHsKPiArCQkJaWYgKGdldF9w cm9wX3BjaV9pZChkZXYpKQo+ICsJCQkJcHJfc2ltcGxlX3Byb3AoZGV2LCAiUENJX0lEIik7Cj4g KwkJCXByX3NpbXBsZV9wcm9wKGRldiwgIkRSSVZFUiIpOwo+ICsJCX0KPiArCj4gKwkJLyogV2Ug c2hvdyBhdHRycyBvbmx5IGZvciBQQ0kgZGV2aWNlcyAqLwo+ICsJCWlmIChzaG93X2F0dHJzICYm IGRldi0+ZGV2X3R5cGUgPT0gREVWX1BDSSkgewo+ICsJCQlwcmludF92ZW5kb3IoZGV2KTsKPiAr CQkJcHJfc2ltcGxlKCJkZXZpY2UiLCBkZXYtPmRldmljZSk7Cj4gKwkJfQo+ICsJfQo+ICt9Cj4g Kwo+ICsjZGVmaW5lIHByX2RldGFpbChrLCB2KSBwcmludGYoIiUtMzJzOiAlc1xuIiwgaywgdikK PiArCj4gK3N0YXRpYyB2b2lkIHByaW50X2h0KEdIYXNoVGFibGUgKmh0KQo+ICt7Cj4gKwlHTGlz dCAqa2V5cyA9IGdfaGFzaF90YWJsZV9nZXRfa2V5cyhodCk7Cj4gKwlrZXlzID0gZ19saXN0X3Nv cnQoa2V5cywgKEdDb21wYXJlRnVuYykgc3RyY21wKTsKPiArCXdoaWxlIChrZXlzKSB7Cj4gKwkJ Y2hhciAqayA9IChjaGFyICopIGtleXMtPmRhdGE7Cj4gKwkJY2hhciAqdiA9IGdfaGFzaF90YWJs ZV9sb29rdXAoaHQsIGspOwo+ICsJCXByX2RldGFpbChrLCB2KTsKPiArCQlrZXlzID0gZ19saXN0 X25leHQoa2V5cyk7Cj4gKwl9Cj4gKwlnX2xpc3RfZnJlZShrZXlzKTsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgaWd0X2RldnNfcHJpbnRfZGV0YWlsKEdQdHJBcnJheSAqdmlldywKPiArCQkJCSAg Ym9vbCBzaG93X3Byb3BzLCBib29sIHNob3dfYXR0cnMpCj4gK3sKPiArCXN0cnVjdCBpZ3RfZGV2 aWNlICpkZXY7Cj4gKwlpbnQgaTsKPiArCSh2b2lkKSBzaG93X3Byb3BzOwo+ICsJKHZvaWQpIHNo b3dfYXR0cnM7Cj4gKwo+ICsJaWYgKCF2aWV3KQo+ICsJCXJldHVybjsKPiArCj4gKwlmb3IgKGkg PSAwOyBpIDwgdmlldy0+bGVuOyBpKyspIHsKPiArCQlkZXYgPSBnX3B0cl9hcnJheV9pbmRleCh2 aWV3LCBpKTsKPiArCQlwcmludGYoIj09PT09PT09PT0gJXMgPT09PT09PT09PVxuIiwgZGV2LT5w cmV0dHlfbmFtZSk7Cj4gKwkJcHJpbnRmKCJbZHJtXVxuIik7Cj4gKwkJcHJfZGV0YWlsKCJjYXJk IGRldmljZSIsIGRldi0+ZHJtX2NhcmRfcGF0aCk7Cj4gKwkJcHJfZGV0YWlsKCJyZW5kZXIgZGV2 aWNlIiwgZGV2LT5kcm1fcmVuZGVyX3BhdGgpOwo+ICsJCXByX2RldGFpbCgic3lzcGF0aCIsIGRl di0+c3lzcGF0aCk7Cj4gKwo+ICsJCXByaW50ZigiXG5bcHJvcGVydGllc11cbiIpOwo+ICsJCXBy aW50X2h0KGRldi0+cHJvcHNfaHQpOwo+ICsJCXByaW50ZigiXG5bYXR0cmlidXRlc11cbiIpOwo+ ICsJCXByaW50X2h0KGRldi0+YXR0cnNfaHQpOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgc3Ry dWN0IHByaW50X2Z1bmMgewo+ICsJdm9pZCAoKnBybikoR1B0ckFycmF5ICosIGJvb2wsIGJvb2wp Owo+ICt9IHByaW50X2Z1bmN0aW9uc1tdID0gewo+ICsJW0lHVF9QUklOVF9TSU1QTEVdID0geyAu cHJuID0gaWd0X2RldnNfcHJpbnRfc2ltcGxlIH0sCj4gKwlbSUdUX1BSSU5UX0RFVEFJTF0gPSB7 IC5wcm4gPSBpZ3RfZGV2c19wcmludF9kZXRhaWwgfSwKPiArfTsKPiArCj4gK3ZvaWQgaWd0X2Rl dmljZXNfcHJpbnQoZW51bSBpZ3RfZGV2aWNlc19wcmludF90eXBlIHByaW50dHlwZSwKPiArCQkg ICAgICAgYm9vbCBzaG93X3Byb3BzLAo+ICsJCSAgICAgICBib29sIHNob3dfYXR0cnMpCj4gK3sK PiArCXByaW50X2Z1bmN0aW9uc1twcmludHR5cGVdLnBybihpZ3RfZGV2cy52aWV3LAo+ICsJCQkJ ICAgICAgIHNob3dfcHJvcHMsIHNob3dfYXR0cnMpOwo+ICt9Cj4gKwo+ICt2b2lkIGlndF9kZXZp Y2VzX3ByaW50X3ZlbmRvcnModm9pZCkKPiArewo+ICsJc3RydWN0IG5hbWVfdmFsdWUgKmxpc3Qg PSAmZ3B1X3ZlbmRvcl9saXN0WzBdOwo+ICsJcHJpbnRmKCJSZWNvZ25pemVkIHZlbmRvcnM6XG4i KTsKPiArCj4gKwlwcmludGYoIiUtMTZzICUtMzJzICUtMzJzICUtMTZzXG4iLCAiRGV2aWNlIHR5 cGUiLCAiaWQiLAo+ICsJICAgICAgICJ2ZW5kb3IiLCAibW9kdWxlIik7Cj4gKwl3aGlsZSAobGlz dC0+bmFtZSkgewo+ICsJCWNoYXIgKmsgPSAoY2hhciAqKSBsaXN0LT5uYW1lOwo+ICsJCXN0cnVj dCB2ZW5kb3Jfc3BlYyAqdnMgPSBnX2hhc2hfdGFibGVfbG9va3VwKGdwdV92ZW5kb3JfaHQsIGsp Owo+ICsJCWlmICh2cy0+ZGV2X3R5cGUgPT0gREVWX1BDSSkKPiArCQkJcHJpbnRmKCIlLTE2cyAl LTMycyAlLTMycyAlLTE2c1xuIiwgInBjaSIsCj4gKwkJCSAgICAgICBrLCB2cy0+dmVuZG9yLCB2 cy0+bW9kbmFtZSk7Cj4gKwkJZWxzZSBpZiAodnMtPmRldl90eXBlID09IERFVl9QTEFURk9STV9O T05fRElTQ09WRVJBQkxFKQo+ICsJCQlwcmludGYoIiUtMTZzICUtMzJzICUtMzJzICUtMTZzXG4i LCAibm9uLWRpc2NvdmVyYWJsZSIsCj4gKwkJCSAgICAgICBrLCB2cy0+dmVuZG9yLCB2cy0+bW9k bmFtZSk7Cj4gKwkJZWxzZSBpZiAodnMtPmRldl90eXBlID09IERFVl9QTEFURk9STV9ESVNDT1ZF UkFCTEUpCj4gKwkJCXByaW50ZigiJS0xNnMgJS0zMnMgJS0zMnMgJS0xNnNcbiIsICJkaXNjb3Zl cmFibGUiLAo+ICsJCQkgICAgICAgaywgdnMtPnZlbmRvciwgdnMtPm1vZG5hbWUpOwo+ICsJCWxp c3QrKzsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIGJvb2wgc3lzX3dyaXRlX2F0dHIoY29uc3Qg Y2hhciAqZGlybmFtZSwgY29uc3QgY2hhciAqYXR0ciwKPiArCQkJICAgY29uc3QgY2hhciAqc3Ry KQo+ICt7Cj4gKwlpbnQgZGlyOwo+ICsKPiArCWRpciA9IG9wZW4oZGlybmFtZSwgT19SRE9OTFkp Owo+ICsJaWYgKGRpciA8IDApCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCWlmIChpZ3Rfc3lz ZnNfcHJpbnRmKGRpciwgYXR0ciwgIiVzIiwgc3RyKSA8IDApIHsKPiArCQlwcmludGYoIkVycm9y LCBjYW4ndCB3cml0ZSB0byAlcywgZXJyOiAlc1xuIiwKPiArCQkgICAgICAgYXR0ciwgc3RyZXJy b3IoZXJybm8pKTsKPiArCQljbG9zZShkaXIpOwo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0KPiAr Cj4gKwljbG9zZShkaXIpOwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiArCj4gK3N0YXRpYyBib29s IGVuc3VyZV9kcml2ZXJfaXNfbG9hZGVkKGNvbnN0IGNoYXIgKm1vZG5hbWUsIGNvbnN0IGNoYXIg Km1vZG9wdHMpCj4gK3sKPiArCWlmICghbW9kbmFtZSkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ ICsJaWYgKCFpZ3Rfa21vZF9pc19sb2FkZWQobW9kbmFtZSkpIHsKPiArCQlpbnQgcmV0Owo+ICsJ CWlndF9kZWJ1ZygiTG9hZGluZyBtb2R1bGUgJXNcbiIsIG1vZG5hbWUpOwo+ICsJCXJldCA9IGln dF9rbW9kX2xvYWQobW9kbmFtZSwgbW9kb3B0cyk7Cj4gKwkJaWYgKHJldCkgewo+ICsJCQlpZ3Rf d2FybigiQ2FuJ3QgbG9hZCBtb2R1bGUgJXNcbiIsIG1vZG5hbWUpOwo+ICsJCQlyZXR1cm4gZmFs c2U7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICsjZGVmaW5l IGVuc3VyZV9kZXZpY2VfaGFzX2RyaXZlcl9sb2FkZWQoZGV2KSBcCj4gKwllbnN1cmVfZHJpdmVy X2lzX2xvYWRlZChkZXYtPnZzLT5tb2RuYW1lLCBkZXYtPnZzLT5tb2RvcHRzKQo+ICsKPiArc3Rh dGljIHN0cnVjdCBpZ3RfZGV2aWNlICppZ3RfZGV2aWNlc19maW5kX3BjaV9pZChjb25zdCBjaGFy ICpwY2lfc2xvdCkKPiArewo+ICsJc3RydWN0IGlndF9kZXZpY2UgKmRldjsKPiArCWludCBpOwo+ ICsJR1B0ckFycmF5ICphcnIgPSBpZ3RfZGV2cy5kZXZzOwo+ICsKPiArCWlmICghcGNpX3Nsb3Qp Cj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IGFyci0+bGVuOyBpKysp IHsKPiArCQlkZXYgPSBnX3B0cl9hcnJheV9pbmRleChhcnIsIGkpOwo+ICsJCWlmIChkZXYtPmRl dl90eXBlICE9IERFVl9QQ0kpCj4gKwkJCWNvbnRpbnVlOwo+ICsJCWlmICghc3RyY21wKHBjaV9z bG90LCBnZXRfcHJvcF9wY2lfc2xvdChkZXYpKSkKPiArCQkJcmV0dXJuIGRldjsKPiArCX0KPiAr Cj4gKwlyZXR1cm4gTlVMTDsKPiArfQo+ICsKPiArYm9vbCBpZ3RfZGV2aWNlX3BjaV91bmJpbmRf bW9kdWxlKGNvbnN0IGNoYXIgKnBjaV9zbG90KQo+ICt7Cj4gKwljaGFyIHBhdGhbUEFUSF9NQVhd Owo+ICsJc3RydWN0IGlndF9kZXZpY2UgKmRldiA9IGlndF9kZXZpY2VzX2ZpbmRfcGNpX2lkKHBj aV9zbG90KTsKPiArCj4gKwlpZiAoIWRldikKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJaWYg KGRldi0+ZGV2X3R5cGUgIT0gREVWX1BDSSkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJaWd0 X2Fzc2VydChkZXYtPnZzKTsKPiArCj4gKwlpZiAoIWVuc3VyZV9kcml2ZXJfaXNfbG9hZGVkKGRl di0+dnMtPm1vZG5hbWUsIGRldi0+dnMtPm1vZG9wdHMpKQo+ICsJCXJldHVybiBmYWxzZTsKPiAr Cj4gKwlpZ3RfaW5mbygiVW5iaW5kaW5nIGRyaXZlciAlcyBvbiAlc1xuIiwgZGV2LT52cy0+bW9k bmFtZSwgcGNpX3Nsb3QpOwo+ICsJc25wcmludGYocGF0aCwgUEFUSF9NQVgsICIlcy8lcyIsIElH VF9CVVNfUENJX0RSSVZFUlNfRElSLAo+ICsJCSBkZXYtPnZzLT5tb2RuYW1lKTsKPiArCj4gKwly ZXR1cm4gc3lzX3dyaXRlX2F0dHIocGF0aCwgInVuYmluZCIsIHBjaV9zbG90KTsKPiArfQo+ICsK PiArYm9vbCBpZ3RfZGV2aWNlX3BjaV9iaW5kX21vZHVsZShjb25zdCBjaGFyICpwY2lfc2xvdCkK PiArewo+ICsJY2hhciBwYXRoW1BBVEhfTUFYXTsKPiArCXN0cnVjdCBpZ3RfZGV2aWNlICpkZXYg PSBpZ3RfZGV2aWNlc19maW5kX3BjaV9pZChwY2lfc2xvdCk7Cj4gKwo+ICsJaWYgKCFkZXYpCj4g KwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCWlmIChkZXYtPmRldl90eXBlICE9IERFVl9QQ0kpCj4g KwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCWlndF9hc3NlcnQoZGV2LT52cyk7Cj4gKwo+ICsJaWYg KCFlbnN1cmVfZHJpdmVyX2lzX2xvYWRlZChkZXYtPnZzLT5tb2RuYW1lLCBkZXYtPnZzLT5tb2Rv cHRzKSkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJaWd0X2luZm8oIkJpbmRpbmcgZHJpdmVy ICVzIHRvICVzXG4iLCBkZXYtPnZzLT5tb2RuYW1lLCBwY2lfc2xvdCk7Cj4gKwlzbnByaW50Zihw YXRoLCBQQVRIX01BWCwgIiVzLyVzIiwgSUdUX0JVU19QQ0lfRFJJVkVSU19ESVIsCj4gKwkJIGRl di0+dnMtPm1vZG5hbWUpOwo+ICsKPiArCXJldHVybiBzeXNfd3JpdGVfYXR0cihwYXRoLCAiYmlu ZCIsIHBjaV9zbG90KTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgcGNpX3JlYmluZF9tb2R1bGUo c3RydWN0IGlndF9kZXZpY2UgKmRldikKPiArewo+ICsJaWYgKGRldiAmJiBkZXYtPmRldl90eXBl ICE9IERFVl9QQ0kpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCWlndF9kZXZpY2VfcGNpX3Vu YmluZF9tb2R1bGUoZ2V0X3Byb3BfcGNpX3Nsb3QoZGV2KSk7Cj4gKwlpZ3RfZGV2aWNlX3BjaV9i aW5kX21vZHVsZShnZXRfcHJvcF9wY2lfc2xvdChkZXYpKTsKPiArCj4gKwlyZXR1cm4gdHJ1ZTsK PiArfQo+ICsKPiArdm9pZCBpZ3RfZGV2aWNlc19iaW5kX21vZHVsZXModm9pZCkKPiArewo+ICsJ c3RydWN0IGlndF9kZXZpY2UgKmRldjsKPiArCWludCBpOwo+ICsJR1B0ckFycmF5ICphcnI7Cj4g KwlwcmludGYoIkJpbmRpbmcgbW9kdWxlcy4uLlxuIik7Cj4gKwo+ICsJYXJyID0gaWd0X2RldnMu ZGV2czsKPiArCWZvciAoaSA9IDA7IGkgPCBhcnItPmxlbjsgaSsrKSB7Cj4gKwkJZGV2ID0gZ19w dHJfYXJyYXlfaW5kZXgoYXJyLCBpKTsKPiArCQlpZiAoIWRldi0+ZHJtX2NhcmRfcGF0aCkgewo+ ICsJCQlwY2lfcmViaW5kX21vZHVsZShkZXYpOwo+ICsJCX0KPiArCX0KPiArfQo+ICsKPiArLyog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSAqLwo+ICsjZGVmaW5lIEZJTFRFUl9TUEVDX05BTUVfTEVOIDMyCj4g KyNkZWZpbmUgRklMVEVSX1NQRUNfREFUQV9MRU4gMjU2Cj4gK3N0cnVjdCBmaWx0ZXJfc3BlYyB7 Cj4gKwljaGFyIG5hbWVbRklMVEVSX1NQRUNfTkFNRV9MRU5dOwo+ICsJY2hhciBkYXRhW0ZJTFRF Ul9TUEVDX0RBVEFfTEVOXTsKPiArfTsKPiArCj4gK3N0cnVjdCBmaWx0ZXJfZnVuYyB7Cj4gKwlH UHRyQXJyYXkgKigqZmlsdGVyX2Z1bmN0aW9uKShzdHJ1Y3QgZmlsdGVyX3NwZWMgKmZzcGVjLAo+ ICsJCQkJICAgICAgc3RydWN0IGZpbHRlcl9mdW5jICpmZnVuYyk7Cj4gKwljb25zdCBjaGFyICpo ZWxwOwo+ICsJY29uc3QgY2hhciAqZGV0YWlsOwo+ICsKPiArCXN0cnVjdCB2ZW5kb3Jfc3BlYyAq dnM7IC8vcG9pbnRlciB0byB2cyAoaWYgYW55KQo+ICt9Owo+ICsKPiArdW5pb24gZmlsdGVyX2Rh dGEgewo+ICsJc3RydWN0IHsKPiArCQljaGFyICpjYXJkOwo+ICsJfSBkcm07Cj4gKwlzdHJ1Y3Qg ewo+ICsJCWNoYXIgKnZlbmRvcjsKPiArCQljaGFyICpkZXZpY2U7Cj4gKwkJY2hhciAqY2FyZDsK PiArCX0gcGNpOwo+ICsJc3RydWN0IHsKPiArCQljaGFyICpjYXJkOwo+ICsJfSBtb2R1bGU7Cj4g KwlzdHJ1Y3Qgewo+ICsJCWNoYXIgKmNhcmQ7Cj4gKwl9IGNvbXBhdGlibGU7Cj4gK307Cj4gKwo+ ICtzdGF0aWMgR0hhc2hUYWJsZSAqc3BsaXRfZmlsdGVyX2RhdGEoY29uc3QgY2hhciAqZGF0YSkK PiArewo+ICsJR0hhc2hUYWJsZSAqaHQgPSBnX2hhc2hfdGFibGVfbmV3X2Z1bGwoZ19zdHJfaGFz aCwgZ19zdHJfZXF1YWwsCj4gKwkJCQkJICAgICAgIGZyZWUsIGZyZWUpOwo+ICsJZ2NoYXIgKipz Owo+ICsJZ2NoYXIgKipzdHJ2ID0gZ19zdHJzcGxpdChkYXRhLCAiLCIsIC0xKTsKPiArCj4gKwlz ID0gc3RydjsKPiArCXdoaWxlICgqcykgewo+ICsJCWNoYXIgKmssICp2Owo+ICsJCXYgPSBzdHJj aHIoKnMsICc9Jyk7Cj4gKwkJaWYgKCF2KSB7Cj4gKwkJCXMrKzsKPiArCQkJY29udGludWU7Cj4g KwkJfQo+ICsJCWsgPSBzdHJuZHVwKCpzLCB2IC0gKCpzKSk7Cj4gKwkJdiA9IHN0cmR1cCh2ICsg MSk7Cj4gKwkJZ19oYXNoX3RhYmxlX2luc2VydChodCwgaywgdik7Cj4gKwkJcysrOwo+ICsJfQo+ ICsJZ19zdHJmcmVldihzdHJ2KTsKPiArCj4gKwlyZXR1cm4gaHQ7Cj4gK30KPiArCj4gK3N0YXRp YyBib29sIGdldF9maWx0ZXJfc3BlYyhjb25zdCBjaGFyICpmaWx0ZXIsIHN0cnVjdCBmaWx0ZXJf c3BlYyAqc3BlYykKPiArewo+ICsJaWYgKCFmaWx0ZXIpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsK PiArCWlmIChzc2NhbmYoZmlsdGVyLCAiJTMxW146XTolMjU1cyIsIHNwZWMtPm5hbWUsIHNwZWMt PmRhdGEpID09IDIpCj4gKwkJcmV0dXJuIHRydWU7Cj4gKwo+ICsJcmV0dXJuIGZhbHNlOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgR1B0ckFycmF5ICpmaWx0ZXJfZHJtKHN0cnVjdCBmaWx0ZXJfc3BlYyAq ZnNwZWMsCj4gKwkJCSAgICAgc3RydWN0IGZpbHRlcl9mdW5jICpmZnVuYykKPiArewo+ICsJR0hh c2hUYWJsZSAqaHQ7Cj4gKwlHUHRyQXJyYXkgKmRldnMsICp2aWV3Owo+ICsJdW5pb24gZmlsdGVy X2RhdGEgZmRhdGE7Cj4gKwlpbnQgY2FyZCA9IC0xOwo+ICsJY2hhciBjYXJkc3RyW05BTUVfTUFY XTsKPiArCj4gKwkodm9pZCkgZmZ1bmM7Cj4gKwlEQkcoImZpbHRlciBkcm1cbiIpOwo+ICsKPiAr CWh0ID0gc3BsaXRfZmlsdGVyX2RhdGEoZnNwZWMtPmRhdGEpOwo+ICsJZmRhdGEuZHJtLmNhcmQg PSBnX2hhc2hfdGFibGVfbG9va3VwKGh0LCAiY2FyZCIpOwo+ICsKPiArCXZpZXcgPSBpZ3RfZGV2 cy52aWV3Owo+ICsJZGV2cyA9IGlndF9kZXZzLmRldnM7Cj4gKwo+ICsJaWYgKGZkYXRhLmRybS5j YXJkKSB7Cj4gKwkJc3NjYW5mKGZkYXRhLmRybS5jYXJkLCAiJWQiLCAmY2FyZCk7Cj4gKwkJaWYg KGNhcmQgPCAwKSB7Cj4gKwkJCWdfaGFzaF90YWJsZV9kZXN0cm95KGh0KTsKPiArCQkJcmV0dXJu IHZpZXc7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXNucHJpbnRmKGNhcmRzdHIsIE5BTUVfTUFYLCAi JXMvY2FyZCVkIiwgSUdUX0RSTV9QQVRILCBjYXJkKTsKPiArCWZvciAoaW50IGkgPSAwOyBpIDwg ZGV2cy0+bGVuOyBpKyspIHsKPiArCQlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2ID0gZ19wdHJfYXJy YXlfaW5kZXgoZGV2cywgaSk7Cj4gKwkJaWYgKGRldi0+ZHJtX2NhcmRfcGF0aCAmJiAhc3RyY21w KGNhcmRzdHIsIGRldi0+ZHJtX2NhcmRfcGF0aCkpIHsKPiArCQkJZ19wdHJfYXJyYXlfYWRkKHZp ZXcsIGRldik7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCX0KPiArCj4gKwlEQkcoIkZpbHRlciBk cm0gdmlldyBzaXplOiAlZFxuIiwgdmlldy0+bGVuKTsKPiArCj4gKwlnX2hhc2hfdGFibGVfZGVz dHJveShodCk7Cj4gKwo+ICsJcmV0dXJuIHZpZXc7Cj4gK30KPiArCj4gK3N0YXRpYyBHUHRyQXJy YXkgKmZpbHRlcl9wY2koc3RydWN0IGZpbHRlcl9zcGVjICpmc3BlYywKPiArCQkJICAgICBzdHJ1 Y3QgZmlsdGVyX2Z1bmMgKmZmdW5jKQo+ICt7Cj4gKwlHSGFzaFRhYmxlICpodDsKPiArCUdQdHJB cnJheSAqZGV2cywgKnZpZXc7Cj4gKwl1bmlvbiBmaWx0ZXJfZGF0YSBmZGF0YTsKPiArCj4gKwlE QkcoImZpbHRlciBwY2lcbiIpOwo+ICsKPiArCSh2b2lkKSBmZnVuYzsKPiArCWh0ID0gc3BsaXRf ZmlsdGVyX2RhdGEoZnNwZWMtPmRhdGEpOwo+ICsJZmRhdGEucGNpLnZlbmRvciA9IGdfaGFzaF90 YWJsZV9sb29rdXAoaHQsICJ2ZW5kb3IiKTsKPiArCWZkYXRhLnBjaS5kZXZpY2UgPSBnX2hhc2hf dGFibGVfbG9va3VwKGh0LCAiZGV2aWNlIik7Cj4gKwlmZGF0YS5wY2kuY2FyZCA9IGdfaGFzaF90 YWJsZV9sb29rdXAoaHQsICJjYXJkIik7Cj4gKwo+ICsJdmlldyA9IGlndF9kZXZzLnZpZXc7Cj4g KwlkZXZzID0gaWd0X2RldnMuZGV2czsKPiArCj4gKwlmb3IgKGludCBpID0gMDsgaSA8IGRldnMt PmxlbjsgaSsrKSB7Cj4gKwkJc3RydWN0IGlndF9kZXZpY2UgKmRldiA9IGdfcHRyX2FycmF5X2lu ZGV4KGRldnMsIGkpOwo+ICsKPiArCQlpZiAoZGV2LT5kZXZfdHlwZSAhPSBERVZfUENJKQo+ICsJ CQljb250aW51ZTsKPiArCj4gKwkJLyogU2tpcCBpZiAndmVuZG9yJyBkb2Vzbid0IG1hdGNoICho ZXggb3IgbmFtZSkgKi8KPiArCQlpZiAoZmRhdGEucGNpLnZlbmRvciAmJgo+ICsJCQkJc3RyY2Fz ZWNtcChmZGF0YS5wY2kudmVuZG9yLCBkZXYtPnZlbmRvcikgJiYKPiArCQkJCSFpc19wY2lfdmVu ZG9yX25hbWUoZmRhdGEucGNpLnZlbmRvcikpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQkvKiBT a2lwIGlmICdkZXZpY2UnIGRvZXNuJ3QgbWF0Y2ggKi8KPiArCQlpZiAoZmRhdGEucGNpLmRldmlj ZSAmJgo+ICsJCQkJc3RyY2FzZWNtcChmZGF0YS5wY2kuZGV2aWNlLCBkZXYtPmRldmljZSkpCj4g KwkJCWNvbnRpbnVlOwo+ICsKPiArCQlnX3B0cl9hcnJheV9hZGQodmlldywgZGV2KTsKPiArCX0K PiArCj4gKwkvKiBMZWF2ZSBvbmx5IG4tdGggZWxlbWVudCBpZiBjYXJkIGlzIHNldCAqLwo+ICsJ aWYgKGZkYXRhLnBjaS5jYXJkKSB7Cj4gKwkJaW50IGNhcmQgPSAtMTsKPiArCQlzc2NhbmYoZmRh dGEucGNpLmNhcmQsICIlZCIsICZjYXJkKTsKPiArCj4gKwkJaWYgKGNhcmQgPj0gMCAmJiBjYXJk IDwgdmlldy0+bGVuKSB7Cj4gKwkJCXN0cnVjdCBpZ3RfZGV2aWNlICpkZXYgPSBnX3B0cl9hcnJh eV9pbmRleCh2aWV3LCBjYXJkKTsKPiArCQkJZ19wdHJfYXJyYXlfcmVtb3ZlX3JhbmdlKHZpZXcs IDAsIHZpZXctPmxlbik7Cj4gKwkJCWdfcHRyX2FycmF5X2FkZCh2aWV3LCBkZXYpOwo+ICsJCX0g ZWxzZSB7Cj4gKwkJCWdfcHRyX2FycmF5X3JlbW92ZV9yYW5nZSh2aWV3LCAwLCB2aWV3LT5sZW4p Owo+ICsJCX0KPiArCX0KPiArCURCRygiRmlsdGVyIHBjaSB2aWV3IHNpemU6ICVkXG4iLCB2aWV3 LT5sZW4pOwo+ICsKPiArCWdfaGFzaF90YWJsZV9kZXN0cm95KGh0KTsKPiArCj4gKwlyZXR1cm4g dmlldzsKPiArfQo+ICsKPiArLyoKPiArICogUmVmcmVzaCB2aWV3IGZpbmRpbmcgZmlyc3QgY2Fy ZCBtYXRjaGluZyB3aXRoCj4gKyAqIHZzLT5tYXRjaF9kcml2ZXIgb3IgdnMtPm1vZG5hbWUgaWYg dnMtPm1hdGNoX2RyaXZlciBpcyBub3Qgc2V0Cj4gKyAqLwo+ICtzdGF0aWMgR1B0ckFycmF5ICpm aWx0ZXJfbW9kdWxlKHN0cnVjdCBmaWx0ZXJfc3BlYyAqZnNwZWMsCj4gKwkJCQlzdHJ1Y3QgZmls dGVyX2Z1bmMgKmZmdW5jKQo+ICt7Cj4gKwlHSGFzaFRhYmxlICpodDsKPiArCUdQdHJBcnJheSAq ZGV2cywgKnZpZXc7Cj4gKwl1bmlvbiBmaWx0ZXJfZGF0YSBmZGF0YTsKPiArCWludCBjYXJkID0g LTE7Cj4gKwljb25zdCBjaGFyICpkcml2ZXIgPSBmZnVuYy0+dnMtPm1hdGNoX2RyaXZlciA/OiBm ZnVuYy0+dnMtPm1vZG5hbWU7Cj4gKwo+ICsJREJHKCJmaWx0ZXIgbW9kdWxlIFslc11cbiIsIGRy aXZlcik7Cj4gKwo+ICsJaHQgPSBzcGxpdF9maWx0ZXJfZGF0YShmc3BlYy0+ZGF0YSk7Cj4gKwlm ZGF0YS5tb2R1bGUuY2FyZCA9IGdfaGFzaF90YWJsZV9sb29rdXAoaHQsICJjYXJkIik7Cj4gKwo+ ICsJdmlldyA9IGlndF9kZXZzLnZpZXc7Cj4gKwlkZXZzID0gaWd0X2RldnMuZGV2czsKPiArCj4g KwlpZiAoZmRhdGEubW9kdWxlLmNhcmQpIHsKPiArCQlzc2NhbmYoZmRhdGEubW9kdWxlLmNhcmQs ICIlZCIsICZjYXJkKTsKPiArCQlpZiAoY2FyZCA8IDApIHsKPiArCQkJZ19oYXNoX3RhYmxlX2Rl c3Ryb3koaHQpOwo+ICsJCQlyZXR1cm4gdmlldzsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJZm9yIChp bnQgaSA9IDA7IGkgPCBkZXZzLT5sZW47IGkrKykgewo+ICsJCWNvbnN0IGNoYXIgKm1vZG5hbWU7 Cj4gKwkJc3RydWN0IGlndF9kZXZpY2UgKmRldiA9IGdfcHRyX2FycmF5X2luZGV4KGRldnMsIGkp Owo+ICsKPiArCQltb2RuYW1lID0gZ2V0X3Byb3BfZHJpdmVyKGRldik7Cj4gKwkJaWYgKCFtb2Ru YW1lKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJaWYgKCFzdHJjbXAobW9kbmFtZSwgZHJpdmVy KSkgewo+ICsJCQlpZiAoIWNhcmQpIHsKPiArCQkJCWdfcHRyX2FycmF5X2FkZCh2aWV3LCBkZXYp Owo+ICsJCQkJYnJlYWs7Cj4gKwkJCX0KPiArCQkJY2FyZC0tOwo+ICsJCX0KPiArCX0KPiArCj4g KwlEQkcoIkZpbHRlciB2aWV3IHNpemU6ICVkXG4iLCB2aWV3LT5sZW4pOwo+ICsKPiArCWdfaGFz aF90YWJsZV9kZXN0cm95KGh0KTsKPiArCj4gKwlyZXR1cm4gdmlldzsKPiArfQo+ICsKPiArc3Rh dGljIGNvbnN0IGNoYXIgKmZpbmRfdmVuZG9yX2lkX2J5X3ZlbmRvcl9zcGVjKHN0cnVjdCB2ZW5k b3Jfc3BlYyAqdnMpCj4gK3sKPiArCXN0cnVjdCBuYW1lX3ZhbHVlICpsaXN0ID0gJmdwdV92ZW5k b3JfbGlzdFswXTsKPiArCj4gKwl3aGlsZSAobGlzdC0+bmFtZSkgewo+ICsJCWlmICgoc3RydWN0 IHZlbmRvcl9zcGVjICopIGxpc3QtPnZhbHVlID09IHZzKQo+ICsJCQlyZXR1cm4gbGlzdC0+bmFt ZTsKPiArCQlsaXN0Kys7Cj4gKwl9Cj4gKwlyZXR1cm4gTlVMTDsKPiArfQo+ICsKPiArc3RhdGlj IEdQdHJBcnJheSAqZmlsdGVyX2NvbXBhdGlibGUoc3RydWN0IGZpbHRlcl9zcGVjICpmc3BlYywK PiArCQkJCSAgICBzdHJ1Y3QgZmlsdGVyX2Z1bmMgKmZmdW5jKQo+ICt7Cj4gKwlHSGFzaFRhYmxl ICpodDsKPiArCUdQdHJBcnJheSAqZGV2cywgKnZpZXc7Cj4gKwl1bmlvbiBmaWx0ZXJfZGF0YSBm ZGF0YTsKPiArCWludCBjYXJkID0gLTE7Cj4gKwljb25zdCBjaGFyICpvZl9jb21wYXRpYmxlID0g ZmluZF92ZW5kb3JfaWRfYnlfdmVuZG9yX3NwZWMoZmZ1bmMtPnZzKTsKPiArCj4gKwlEQkcoImZp bHRlciBjb21wYXRpYmxlWyVzXVxuIiwgb2ZfY29tcGF0aWJsZSk7Cj4gKwo+ICsJaHQgPSBzcGxp dF9maWx0ZXJfZGF0YShmc3BlYy0+ZGF0YSk7Cj4gKwlmZGF0YS5tb2R1bGUuY2FyZCA9IGdfaGFz aF90YWJsZV9sb29rdXAoaHQsICJjYXJkIik7Cj4gKwo+ICsJdmlldyA9IGlndF9kZXZzLnZpZXc7 Cj4gKwlkZXZzID0gaWd0X2RldnMuZGV2czsKPiArCj4gKwlpZiAoZmRhdGEubW9kdWxlLmNhcmQp IHsKPiArCQlzc2NhbmYoZmRhdGEubW9kdWxlLmNhcmQsICIlZCIsICZjYXJkKTsKPiArCQlpZiAo Y2FyZCA8IDApIHsKPiArCQkJZ19oYXNoX3RhYmxlX2Rlc3Ryb3koaHQpOwo+ICsJCQlyZXR1cm4g dmlldzsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJZm9yIChpbnQgaSA9IDA7IGkgPCBkZXZzLT5sZW47 IGkrKykgewo+ICsJCWNvbnN0IGNoYXIgKmNvbXBhdDsKPiArCQlzdHJ1Y3QgaWd0X2RldmljZSAq ZGV2ID0gZ19wdHJfYXJyYXlfaW5kZXgoZGV2cywgaSk7Cj4gKwo+ICsJCWlmICghb2ZfY29tcGF0 aWJsZSkKPiArCQkJYnJlYWs7Cj4gKwo+ICsJCWNvbXBhdCA9IGdldF9wcm9wX29mX2NvbXBhdGli bGVfMChkZXYpOwo+ICsJCWlmIChjb21wYXQgJiYgIXN0cmNtcChjb21wYXQsIG9mX2NvbXBhdGli bGUpKSB7Cj4gKwkJCWlmICghY2FyZCkgewo+ICsJCQkJZ19wdHJfYXJyYXlfYWRkKHZpZXcsIGRl dik7Cj4gKwkJCQlicmVhazsKPiArCQkJfQo+ICsJCQljYXJkLS07Cj4gKwkJfQo+ICsJfQo+ICsK PiArCURCRygiRmlsdGVyIHZpZXcgc2l6ZTogJWRcbiIsIHZpZXctPmxlbik7Cj4gKwo+ICsJZ19o YXNoX3RhYmxlX2Rlc3Ryb3koaHQpOwo+ICsKPiArCXJldHVybiB2aWV3Owo+ICt9Cj4gKwo+ICsK PiArc3RhdGljIHN0cnVjdCBmaWx0ZXJfZnVuYyBmX2RybSA9IHsgLmZpbHRlcl9mdW5jdGlvbiA9 IGZpbHRlcl9kcm0sCj4gKwkJCQkgICAgLmhlbHAgPSAiZHJtOltjYXJkPSVkXSIsCj4gKwkJCQkg ICAgLmRldGFpbCA9ICJjYXJkIGlzIE4tY2FyZCBudW1iZXIgKGZyb20gL2Rldi9kcmkvY2FyZE4p XG4iLAo+ICsJCQkJICB9Owo+ICsKPiArc3RhdGljIHN0cnVjdCBmaWx0ZXJfZnVuYyBmX3BjaSA9 IHsgLmZpbHRlcl9mdW5jdGlvbiA9IGZpbHRlcl9wY2ksCj4gKwkJCQkgICAgLmhlbHAgPSAicGNp Olt2ZW5kb3I9JTA0eC9uYW1lXVssZGV2aWNlPSUwNHhdWyxjYXJkPSVkXSIsCj4gKwkJCQkgICAg LmRldGFpbCA9ICJ2ZW5kb3IgaXMgaGV4IG51bWJlciBvciBuYW1lIiwKPiArCQkJCSAgfTsKPiAr Cj4gK3N0YXRpYyBzdHJ1Y3QgZmlsdGVyX2Z1bmMgZl92Z2VtID0geyAuZmlsdGVyX2Z1bmN0aW9u ID0gZmlsdGVyX21vZHVsZSwKPiArCQkJCSAgICAgLmhlbHAgPSAidmdlbTpbY2FyZD0lZF0iLAo+ ICsJCQkJICAgICAuZGV0YWlsID0gImNhcmQgaXMgbi10aCB2Z2VtIGNhcmQgbnVtYmVyXG4iLAo+ ICsJCQkJICAgICAudnMgPSAmdl92Z2VtLAo+ICsJCQkJICAgfTsKPiArCj4gK3N0YXRpYyBzdHJ1 Y3QgZmlsdGVyX2Z1bmMgZl92a21zID0geyAuZmlsdGVyX2Z1bmN0aW9uID0gZmlsdGVyX21vZHVs ZSwKPiArCQkJCSAgICAgLmhlbHAgPSAidmttczpbY2FyZD0lZF0iLAo+ICsJCQkJICAgICAuZGV0 YWlsID0gImNhcmQgaXMgbi10aCB2a21zIGNhcmQgbnVtYmVyXG4iLAo+ICsJCQkJICAgICAudnMg PSAmdl92a21zLAo+ICsJCQkJICAgfTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZmlsdGVyX2Z1bmMg Zl9leHlub3MgPSB7IC5maWx0ZXJfZnVuY3Rpb24gPSBmaWx0ZXJfbW9kdWxlLAo+ICsJCQkJICAg ICAgIC5oZWxwID0gImV4eW5vczpbY2FyZD0lZF0iLAo+ICsJCQkJICAgICAgIC5kZXRhaWwgPSAi Y2FyZCBpcyBuLXRoIGV4eW5vcy1kcm0gY2FyZCBudW1iZXJcbiIsCj4gKwkJCQkgICAgICAgLnZz ID0gJnZfZXh5bm9zLAo+ICsJCQkJICAgICB9Owo+ICsKPiArc3RhdGljIHN0cnVjdCBmaWx0ZXJf ZnVuYyBmX3ZjNCA9IHsgLmZpbHRlcl9mdW5jdGlvbiA9IGZpbHRlcl9jb21wYXRpYmxlLAo+ICsJ CQkJICAgIC5oZWxwID0gInZjNDpbY2FyZD0lZF0iLAo+ICsJCQkJICAgIC5kZXRhaWwgPSAiY2Fy ZCBpcyBuLXRoIHZjNCBjYXJkIG51bWJlclxuIiwKPiArCQkJCSAgICAudnMgPSAmdl92YzQsCj4g KwkJCQkgIH07Cj4gKwo+ICtzdHJ1Y3QgbmFtZV92YWx1ZSBmaWx0ZXJfZGVmaW5pdGlvbl9saXN0 W10gPSB7Cj4gKwl7ICJkcm0iLCAgICAgKGdwb2ludGVyKSAmZl9kcm0gfSwKPiArCXsgInBjaSIs ICAgICAoZ3BvaW50ZXIpICZmX3BjaSB9LAo+ICsJeyAidmdlbSIsICAgIChncG9pbnRlcikgJmZf dmdlbSB9LAo+ICsJeyAidmttcyIsICAgIChncG9pbnRlcikgJmZfdmttcyB9LAo+ICsJeyAiZXh5 bm9zIiwgIChncG9pbnRlcikgJmZfZXh5bm9zIH0sCj4gKwl7ICJ2YzQiLCAgICAgKGdwb2ludGVy KSAmZl92YzQgfSwKPiArCXsgTlVMTCwgfSwKPiArfTsKPiArCj4gK3ZvaWQgaWd0X2RldmljZV9w cmludF9maWx0ZXJfdHlwZXModm9pZCkKPiArewo+ICsJR0xpc3QgKmtleXMgPSBnX2hhc2hfdGFi bGVfZ2V0X2tleXMoZmlsdGVyX2RlZmluaXRpb25faHQpOwo+ICsKPiArCXByaW50ZigiRmlsdGVy IHR5cGVzOlxuLS0tXG4iKTsKPiArCXByaW50ZigiJS04cyAgJXNcbi0tLVxuIiwgImZpbHRlciIs ICJzeW50YXgiKTsKPiArCXdoaWxlIChrZXlzKSB7Cj4gKwkJY2hhciAqayA9IChjaGFyICopIGtl eXMtPmRhdGE7Cj4gKwkJc3RydWN0IGZpbHRlcl9mdW5jICp2ID0gZ19oYXNoX3RhYmxlX2xvb2t1 cChmaWx0ZXJfZGVmaW5pdGlvbl9odCwgayk7Cj4gKwkJcHJpbnRmKCIlLThzICAlc1xuIiwgaywg di0+aGVscCk7Cj4gKwkJcHJpbnRmKCIlLThzICAlc1xuIiwgIiIsIHYtPmRldGFpbCk7Cj4gKwkJ a2V5cyA9IGdfbGlzdF9uZXh0KGtleXMpOwo+ICsJfQo+ICsJZ19saXN0X2ZyZWUoa2V5cyk7Cj4g K30KPiArCj4gK3N0YXRpYyBHUHRyQXJyYXkgKmRldmljZV9maWx0ZXJzID0gTlVMTDsKPiArCj4g KyNkZWZpbmUgREVWSUNFX0ZJTFRFUl9DSEVDS19BTExPQygpIFwKPiArCWRvIHsgXAo+ICsJCWlm ICghZGV2aWNlX2ZpbHRlcnMpIFwKPiArCQkJZGV2aWNlX2ZpbHRlcnMgPSBnX3B0cl9hcnJheV9u ZXdfZnVsbCgyLCBmcmVlKTsgXAo+ICsJCWlndF9hc3NlcnQoZGV2aWNlX2ZpbHRlcnMpOyBcCj4g Kwl9IHdoaWxlKDApCj4gKwo+ICtpbnQgaWd0X2RldmljZV9maWx0ZXJfY291bnQodm9pZCkKPiAr ewo+ICsJREVWSUNFX0ZJTFRFUl9DSEVDS19BTExPQygpOwo+ICsKPiArCXJldHVybiBkZXZpY2Vf ZmlsdGVycy0+bGVuOwo+ICt9Cj4gKwo+ICtpbnQgaWd0X2RldmljZV9maWx0ZXJfYWRkKGNvbnN0 IGNoYXIgKmZpbHRlcikKPiArewo+ICsJZ2NoYXIgKipzdHJ2LCAqKnM7Cj4gKwlpbnQgYyA9IDA7 Cj4gKwo+ICsJREVWSUNFX0ZJTFRFUl9DSEVDS19BTExPQygpOwo+ICsKPiArCXN0cnYgPSBnX3N0 cnNwbGl0KGZpbHRlciwgIjsiLCAtMSk7Cj4gKwo+ICsJcyA9IHN0cnY7Cj4gKwl3aGlsZSAoKnMp IHsKPiArCQlnX3B0cl9hcnJheV9hZGQoZGV2aWNlX2ZpbHRlcnMsIHN0cmR1cCgqcykpOwo+ICsJ CXMrKzsKPiArCX0KPiArCWdfc3RyZnJlZXYoc3Rydik7Cj4gKwo+ICsJcmV0dXJuIGM7Cj4gK30K PiArCj4gK2NvbnN0IGNoYXIgKmlndF9kZXZpY2VfZmlsdGVyX2dldChpbnQgbnVtKQo+ICt7Cj4g KwlERVZJQ0VfRklMVEVSX0NIRUNLX0FMTE9DKCk7Cj4gKwo+ICsJaWYgKG51bSA8IDAgfHwgbnVt ID49IGRldmljZV9maWx0ZXJzLT5sZW4pCj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwo+ICsJcmV0dXJu IGdfcHRyX2FycmF5X2luZGV4KGRldmljZV9maWx0ZXJzLCBudW0pOwo+ICt9Cj4gKwo+ICsjZGVm aW5lIGRldl9pc19ub25fZGlzY292ZXJhYmxlKHZzKSBcCj4gKwkoKHZzKS0+ZGV2X3R5cGUgPT0g REVWX1BMQVRGT1JNX05PTl9ESVNDT1ZFUkFCTEUpCj4gKwo+ICtib29sIGlndF9kZXZpY2VfZmls dGVyX2FwcGx5KGNvbnN0IGNoYXIgKmZpbHRlcikKPiArewo+ICsJc3RydWN0IGZpbHRlcl9zcGVj IGZzcGVjOwo+ICsJc3RydWN0IGZpbHRlcl9mdW5jICpmZnVuYzsKPiArCWJvb2wgcmV0Owo+ICsK PiArCWlmICghZmlsdGVyKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwlyZXQgPSBnZXRfZmls dGVyX3NwZWMoZmlsdGVyLCAmZnNwZWMpOwo+ICsJaWYgKCFyZXQpIHsKPiArCQlpZ3Rfd2Fybigi Q2FuJ3Qgc3BsaXQgZmlsdGVyIFslc11cbiIsIGZpbHRlcik7Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ ICsJfQo+ICsKPiArCWZmdW5jID0gZ19oYXNoX3RhYmxlX2xvb2t1cChmaWx0ZXJfZGVmaW5pdGlv bl9odCwgZnNwZWMubmFtZSk7Cj4gKwlpZiAoIWZmdW5jKSB7Cj4gKwkJaWd0X3dhcm4oIk5vIGZp bHRlciB3aXRoIG5hbWUgWyVzXVxuIiwgZnNwZWMubmFtZSk7Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ ICsJfQo+ICsKPiArCS8qIENsZWFuIHZpZXcgKi8KPiArCWdfcHRyX2FycmF5X3JlbW92ZV9yYW5n ZShpZ3RfZGV2cy52aWV3LCAwLCBpZ3RfZGV2cy52aWV3LT5sZW4pOwo+ICsKPiArCS8qIExvYWQg bW9kdWxlIG9ubHkgZm9yIG5vbi1kaXNjb3ZlcmFibGUgZGV2aWNlcy4KPiArCSAqIEZvciBkaXNj b3ZlcmFibGVzIC8gUENJIGRlZmVyIHRoaXMgdG8gY2FyZCBtYXRjaCBwYXRoCj4gKwkqLwo+ICsJ aWYgKGZmdW5jLT52cyAmJiBkZXZfaXNfbm9uX2Rpc2NvdmVyYWJsZShmZnVuYy0+dnMpICYmCj4g KwkJCSFpZ3Rfa21vZF9pc19sb2FkZWQoZmZ1bmMtPnZzLT5tb2RuYW1lKSkgewo+ICsJCWlmICgh aWd0X2ttb2RfbG9hZChmZnVuYy0+dnMtPm1vZG5hbWUsIGZmdW5jLT52cy0+bW9kb3B0cykpIHsK PiArCQkJaWd0X2luZm8oIk1vZHVsZSAlcyBsb2FkZWQsIHJlc2Nhbm5pbmcgZGV2aWNlc1xuIiwK PiArCQkJCSBmZnVuYy0+dnMtPm1vZG5hbWUpOwo+ICsJCQlpZ3RfZGV2aWNlc19zY2FuKHRydWUp Owo+ICsJCX0gZWxzZSB7Cj4gKwkJCXJldHVybiBmYWxzZTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJ ZmZ1bmMtPmZpbHRlcl9mdW5jdGlvbigmZnNwZWMsIGZmdW5jKTsKPiArCj4gKwlyZXR1cm4gdHJ1 ZTsKPiArfQo+ICsKPiArYm9vbCBpZ3RfZGV2aWNlX2ZpbHRlcl9hcHBseV9udGgoaW50IG51bSkK PiArewo+ICsJY29uc3QgY2hhciAqZmlsdGVyID0gaWd0X2RldmljZV9maWx0ZXJfZ2V0KG51bSk7 Cj4gKwlpZiAoIWZpbHRlcikKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJcmV0dXJuIGlndF9k ZXZpY2VfZmlsdGVyX2FwcGx5KGZpbHRlcik7Cj4gK30KPiArCj4gKy8qIEZvciBQQ0kgZGV2aWNl cyBsb2FkIG9yIHVuYmluZCAvIGJpbmQgaXMgY2FsbGVkIGluIGNhcmQgbWF0Y2hpbmcgcGF0aC4K PiArICogVGhpcyBpcyBmb3IgJ2xzZ3B1JyB0b29sIHdoaWNoIGRvZXNuJ3Qgd2FudCB0byBtYWtl IG1hZ2ljIGRyaXZlcgo+ICsgKiBsb2FkaW5nIGpvYiBpbiBmaWx0ZXIgYXBwbHkgcGF0aCAoaXQg cmVhbGx5IHdhbnQgdG8gZGlzcGxheSBQQ0kgZGV2aWNlcwo+ICsgKiBpbiB0aGUgc3RhdGUgdGhl eSByZWFsbHkgYXJlKS4KPiArKi8KPiArc3RhdGljIGJvb2wgZW5zdXJlX2RldmljZV9pc19yZWFk eShzdHJ1Y3QgaWd0X2RldmljZSAqZGV2LAo+ICsJCQkJICAgY29uc3QgY2hhciAqZmlsdGVyKQo+ ICt7Cj4gKwlpZiAoZGV2LT5kZXZfdHlwZSAhPSBERVZfUENJICYmCj4gKwkJZGV2LT5kZXZfdHlw ZSAhPSBERVZfUExBVEZPUk1fRElTQ09WRVJBQkxFKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4g KwlpZiAoZGV2LT5kcm1fY2FyZF9wYXRoIHx8IGRldi0+ZHJtX3JlbmRlcl9wYXRoKQo+ICsJCXJl dHVybiB0cnVlOwo+ICsKPiArCS8qIFNvLCB3ZSBoYXZlIFBDSSBkZXZpY2Ugb3IgZGlzY292ZXJh YmxlIGRldmljZSB3aXRob3V0Cj4gKwkgKiBjYXJkL3JlbmRlciBub2RlLCBsZXRzIHRyeSBhdCB0 aGUgYmVnaW5uaW5nIHRvIHNpbXBseQo+ICsJICogbG9hZCB0aGUgbW9kdWxlICovCj4gKwlpZiAo IWVuc3VyZV9kZXZpY2VfaGFzX2RyaXZlcl9sb2FkZWQoZGV2KSkKPiArCQlyZXR1cm4gZmFsc2U7 IC8vb29wcyEKPiArCj4gKwkvKiBSZXNjYW4gZGV2aWNlcywgZmlsdGVyIGFnYWluIGFuZCBnZXQg dGhlIGRldmljZSAqLwo+ICsJaWd0X2RldmljZXNfc2Nhbih0cnVlKTsKPiArCWlmIChpZ3RfZGV2 aWNlX2ZpbHRlcl9hcHBseShmaWx0ZXIpID09IGZhbHNlKQo+ICsJCXJldHVybiBmYWxzZTsKPiAr Cj4gKwlpZiAoIWlndF9kZXZzLnZpZXctPmxlbikKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJ ZGV2ID0gZ19wdHJfYXJyYXlfaW5kZXgoaWd0X2RldnMudmlldywgMCk7Cj4gKwlpZiAoZGV2LT5k cm1fY2FyZF9wYXRoIHx8IGRldi0+ZHJtX3JlbmRlcl9wYXRoKQo+ICsJCXJldHVybiB0cnVlOwo+ ICsKPiArCS8qIEZvciBwbGF0Zm9ybSBkZXZpY2UgdW5iaW5kL2JpbmQgaXMgbm90IHBlcmZvcm1l ZCAqLwo+ICsJaWYgKGRldi0+ZGV2X3R5cGUgPT0gREVWX1BMQVRGT1JNX0RJU0NPVkVSQUJMRSkK PiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJLyogSW4gdGhpcyBtb21lbnQgd2UgbGlrZWx5IGFs cmVhZHkgaGFkIGRyaXZlciBsb2FkZWQsCj4gKwkgKiBidXQgaXQgd2Fzbid0IGJpbmRlZCB0byB0 aGlzIGRldmljZS4gKi8KPiArCWlndF9kZXZpY2VfcGNpX3VuYmluZF9tb2R1bGUoZ2V0X3Byb3Bf cGNpX3Nsb3QoZGV2KSk7Cj4gKwlpZ3RfZGV2aWNlX3BjaV9iaW5kX21vZHVsZShnZXRfcHJvcF9w Y2lfc2xvdChkZXYpKTsKPiArCWlndF9kZXZpY2VzX3NjYW4odHJ1ZSk7Cj4gKwlpZiAoaWd0X2Rl dmljZV9maWx0ZXJfYXBwbHkoZmlsdGVyKSA9PSBmYWxzZSkKPiArCQlyZXR1cm4gZmFsc2U7Cj4g Kwo+ICsJaWYgKCFpZ3RfZGV2cy52aWV3LT5sZW4pCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiAr CWRldiA9IGdfcHRyX2FycmF5X2luZGV4KGlndF9kZXZzLnZpZXcsIDApOwo+ICsJaWYgKGRldi0+ ZHJtX2NhcmRfcGF0aCB8fCBkZXYtPmRybV9yZW5kZXJfcGF0aCkKPiArCQlyZXR1cm4gdHJ1ZTsK PiArCj4gKwlyZXR1cm4gZmFsc2U7Cj4gK30KPiArCj4gKyNkZWZpbmUgc2FmZV9zdHJuY3B5KGRz dCwgc3JjLCBzaXplKSBcCj4gKwlpZiAoc3JjKSBzdHJuY3B5KChkc3QpLCAoc3JjKSwgKHNpemUp KQo+ICsvKgo+ICsgKiBSZXR1cm5zOgo+ICsgKiBmYWxzZSAtIG5vIGNhcmQgcG9pbnRlciB3YXMg cGFzc2VkIG9yIGNhcmQgd2Fzbid0IG1hdGNoZWQsCj4gKyAqIHRydWUgLSBjYXJkIG1hdGNoZWQg YW5kIHJldHVybmVkLgo+ICsgKi8KPiArYm9vbCBpZ3RfZGV2aWNlX2NhcmRfbWF0Y2goY29uc3Qg Y2hhciAqZmlsdGVyLCBzdHJ1Y3QgaWd0X2RldmljZV9jYXJkICpjYXJkKQo+ICt7CQo+ICsJc3Ry dWN0IGlndF9kZXZpY2UgKmRldiA9IE5VTEw7Cj4gKwo+ICsJaWYgKCFjYXJkKQo+ICsJCXJldHVy biBmYWxzZTsKPiArCW1lbXNldChjYXJkLCAwLCBzaXplb2YoKmNhcmQpKTsKPiArCj4gKwlpZ3Rf ZGV2aWNlc19zY2FuKGZhbHNlKTsKPiArCj4gKwlpZiAoaWd0X2RldmljZV9maWx0ZXJfYXBwbHko ZmlsdGVyKSA9PSBmYWxzZSkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJaWYgKCFpZ3RfZGV2 cy52aWV3LT5sZW4pCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCWRldiA9IGdfcHRyX2FycmF5 X2luZGV4KGlndF9kZXZzLnZpZXcsIDApOwo+ICsJaWYgKGRldi0+ZGV2X3R5cGUgPT0gREVWX1BD SSB8fAo+ICsJCWRldi0+ZGV2X3R5cGUgPT0gREVWX1BMQVRGT1JNX0RJU0NPVkVSQUJMRSkgewo+ ICsJCWlmICghZW5zdXJlX2RldmljZV9pc19yZWFkeShkZXYsIGZpbHRlcikpCj4gKwkJCXJldHVy biBmYWxzZTsKPiArCX0KPiArCj4gKwlpZiAoIWlndF9kZXZzLnZpZXctPmxlbikgLy9hZGRpdGlv bmFsIGNoZWNrIGJlY2F1c2UgcmVzY2FuIGNvdWxkIGhhcHBlbgo+ICsJCXJldHVybiBmYWxzZTsK PiArCj4gKwkvKiBXZSB0YWtlIGZpcnN0IG9uZSBpZiBtb3JlIHRoYW4gb25lIGNhcmQgbWF0Y2hl cyBmaWx0ZXIgKi8KPiArCWRldiA9IGdfcHRyX2FycmF5X2luZGV4KGlndF9kZXZzLnZpZXcsIDAp Owo+ICsJY2FyZC0+ZGV2X3R5cGUgPSBkZXYtPmRldl90eXBlOwo+ICsJY2FyZC0+Y2hpcHNldCA9 IGRldi0+dnMtPmNoaXBzZXQ7Cj4gKwlpZiAoZGV2LT5kZXZfdHlwZSA9PSBERVZfUENJKSB7Cj4g KwkJc2FmZV9zdHJuY3B5KGNhcmQtPm1vZHVsZSwgZGV2LT52cy0+bW9kbmFtZSwgTkFNRV9NQVgp Owo+ICsJCXNhZmVfc3RybmNweShjYXJkLT5wY2lfc2xvdCwgZ2V0X3Byb3BfcGNpX3Nsb3QoZGV2 KSwKPiArCQkJUENJX1NMT1RfTEVOR1RIKTsKPiArCX0gZWxzZSB7Cj4gKwkJc2FmZV9zdHJuY3B5 KGNhcmQtPm1vZHVsZSwgZ2V0X3Byb3BfZHJpdmVyKGRldiksIE5BTUVfTUFYKTsKPiArCX0KPiAr CXNhZmVfc3RybmNweShjYXJkLT5jYXJkLCBkZXYtPmRybV9jYXJkX3BhdGgsIE5BTUVfTUFYKTsK PiArCXNhZmVfc3RybmNweShjYXJkLT5yZW5kZXIsIGRldi0+ZHJtX3JlbmRlcl9wYXRoLCBOQU1F X01BWCk7Cj4gKwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvbGliL2lndF9k ZXZpY2Vfc2Nhbi5oIGIvbGliL2lndF9kZXZpY2Vfc2Nhbi5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPiBpbmRleCAwMDAwMDAwMC4uMGUyYWRmMTMKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGli L2lndF9kZXZpY2Vfc2Nhbi5oCj4gQEAgLTAsMCArMSw3MiBAQAo+ICsvKgo+ICsgKiBDb3B5cmln aHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhl cmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBm aWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSBy aWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBz dWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQg dG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVk IHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiAr ICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ug KGluY2x1ZGluZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGlu IGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJl Lgo+ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBX QVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcg QlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiAr ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4g IElOIE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJT IEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gKyAqIExJQUJJTElU WSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBB UklTSU5HCj4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRX QVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ ICsgKgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX19JR1RfREVWSUNFX1NDQU5fSF9fCj4gKyNkZWZp bmUgX19JR1RfREVWSUNFX1NDQU5fSF9fCj4gKwo+ICsjaW5jbHVkZSA8bGltaXRzLmg+Cj4gKyNp bmNsdWRlIDxpZ3QuaD4KPiArCj4gK2VudW0gaWd0X2RldmljZXNfcHJpbnRfdHlwZSB7Cj4gKwlJ R1RfUFJJTlRfU0lNUExFLAo+ICsJSUdUX1BSSU5UX0RFVEFJTCwKPiArfTsKPiArCj4gK2VudW0g aWd0X2RldmljZV90eXBlIHsKPiArCURFVl9QQ0ksCj4gKwlERVZfUExBVEZPUk1fTk9OX0RJU0NP VkVSQUJMRSwKPiArCURFVl9QTEFURk9STV9ESVNDT1ZFUkFCTEUsCj4gK307Cj4gKwo+ICsjZGVm aW5lIFBDSV9TTE9UX0xFTkdUSCAxMwo+ICtzdHJ1Y3QgaWd0X2RldmljZV9jYXJkIHsKPiArCWVu dW0gaWd0X2RldmljZV90eXBlIGRldl90eXBlOwo+ICsJdW5zaWduZWQgaW50IGNoaXBzZXQ7IC8v Y29udGFpbnMgRFJJVkVSX1hYWCB2YWx1ZQo+ICsJY2hhciBtb2R1bGVbTkFNRV9NQVhdOwo+ICsJ Y2hhciBjYXJkW05BTUVfTUFYXTsKPiArCWNoYXIgcmVuZGVyW05BTUVfTUFYXTsKPiArCWNoYXIg cGNpX3Nsb3RbUENJX1NMT1RfTEVOR1RIXTsKPiArfTsKPiArCj4gK3ZvaWQgaWd0X2RldmljZXNf c2Nhbihib29sIGZvcmNlKTsKPiArdm9pZCBpZ3RfZGV2aWNlc19wcmludChlbnVtIGlndF9kZXZp Y2VzX3ByaW50X3R5cGUgcHJpbnR0eXBlLAo+ICsJCSAgICAgICBib29sIHNob3dfcHJvcHMsIGJv b2wgc2hvd19hdHRycyk7Cj4gKwo+ICt2b2lkIGlndF9kZXZpY2VzX3ByaW50X3ZlbmRvcnModm9p ZCk7Cj4gKwo+ICtib29sIGlndF9kZXZpY2VfcGNpX3VuYmluZF9tb2R1bGUoY29uc3QgY2hhciAq cGNpX3Nsb3QpOwo+ICtib29sIGlndF9kZXZpY2VfcGNpX2JpbmRfbW9kdWxlKGNvbnN0IGNoYXIg KnBjaV9zbG90KTsKPiArdm9pZCBpZ3RfZGV2aWNlc19iaW5kX21vZHVsZXModm9pZCk7Cj4gKwo+ ICt2b2lkIGlndF9kZXZpY2VfcHJpbnRfZmlsdGVyX3R5cGVzKHZvaWQpOwo+ICsKPiAraW50IGln dF9kZXZpY2VfZmlsdGVyX2NvdW50KHZvaWQpOwo+ICtpbnQgaWd0X2RldmljZV9maWx0ZXJfYWRk KGNvbnN0IGNoYXIgKmZpbHRlcik7Cj4gK2NvbnN0IGNoYXIgKmlndF9kZXZpY2VfZmlsdGVyX2dl dChpbnQgbnVtKTsKPiArYm9vbCBpZ3RfZGV2aWNlX2ZpbHRlcl9hcHBseShjb25zdCBjaGFyICpm aWx0ZXIpOwo+ICtib29sIGlndF9kZXZpY2VfZmlsdGVyX2FwcGx5X250aChpbnQgbnVtKTsKPiAr Cj4gK2Jvb2wgaWd0X2RldmljZV9jYXJkX21hdGNoKGNvbnN0IGNoYXIgKmZpbHRlciwgc3RydWN0 IGlndF9kZXZpY2VfY2FyZCAqY2FyZCk7Cj4gKwo+ICsjZW5kaWYgLyogX19JR1RfREVWSUNFX1ND QU5fSF9fICovCj4gZGlmZiAtLWdpdCBhL2xpYi9tZXNvbi5idWlsZCBiL2xpYi9tZXNvbi5idWls ZAo+IGluZGV4IDE1NzYyNGU3Li44MjZlYmJlMyAxMDA2NDQKPiAtLS0gYS9saWIvbWVzb24uYnVp bGQKPiArKysgYi9saWIvbWVzb24uYnVpbGQKPiBAQCAtMTAsNiArMTAsNyBAQCBsaWJfc291cmNl cyA9IFsKPiAgCSdpZ3RfY29sb3JfZW5jb2RpbmcuYycsCj4gIAknaWd0X2RlYnVnZnMuYycsCj4g IAknaWd0X2RldmljZS5jJywKPiArCSdpZ3RfZGV2aWNlX3NjYW4uYycsCj4gIAknaWd0X2F1eC5j JywKPiAgCSdpZ3RfZ3B1X3Bvd2VyLmMnLAo+ICAJJ2lndF9ndC5jJywKPiBkaWZmIC0tZ2l0IGEv dG9vbHMvTWFrZWZpbGUuc291cmNlcyBiL3Rvb2xzL01ha2VmaWxlLnNvdXJjZXMKPiBpbmRleCA1 MDcwNmY0MS4uMGU2N2I2NTQgMTAwNjQ0Cj4gLS0tIGEvdG9vbHMvTWFrZWZpbGUuc291cmNlcwo+ ICsrKyBiL3Rvb2xzL01ha2VmaWxlLnNvdXJjZXMKPiBAQCAtMzMsNiArMzMsNyBAQCB0b29sc19w cm9nX2xpc3RzID0JCVwKPiAgCWludGVsX3dhdGVybWFyawkJXAo+ICAJaW50ZWxfZ2VtX2luZm8J CVwKPiAgCWludGVsX2d2dGdfdGVzdCAgICAgXAo+ICsJbHNncHUJCQlcCj4gIAkkKE5VTEwpCj4g IAo+ICBkaXN0X2Jpbl9TQ1JJUFRTID0gaW50ZWxfZ3B1X2FicnQKPiBkaWZmIC0tZ2l0IGEvdG9v bHMvbHNncHUuYyBiL3Rvb2xzL2xzZ3B1LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4 IDAwMDAwMDAwLi5iNzg0Y2E2NQo+IC0tLSAvZGV2L251bGwKPiArKysgYi90b29scy9sc2dwdS5j Cj4gQEAgLTAsMCArMSwyODUgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwg Q29ycG9yYXRpb24KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJl ZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlz IHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdh cmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwg aW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICog YW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25z IHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVj dCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5l eHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1 YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhF IFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJ TkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBU TyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFM TAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFO WSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4g QUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ICsgKiBGUk9N LCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9S IE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiArICoKPiArICovCj4gKwo+ ICsjaW5jbHVkZSAiaWd0X2RldmljZV9zY2FuLmgiCj4gKyNpbmNsdWRlICJpZ3QuaCIKPiArI2lu Y2x1ZGUgPHN5cy9pb2N0bC5oPgo+ICsjaW5jbHVkZSA8ZmNudGwuaD4KPiArI2luY2x1ZGUgPGVy cm5vLmg+Cj4gKyNpbmNsdWRlIDxzdHJpbmcuaD4KPiArI2luY2x1ZGUgPHNpZ25hbC5oPgo+ICsK PiArZW51bSB7Cj4gKwlPUFRfU0hPV19QUk9QUyAgICAgPSAncicsCj4gKwlPUFRfU0hPV19BVFRS UyAgICAgPSAnYScsCj4gKwlPUFRfUFJJTlRfU0lNUExFICAgPSAnaScsCj4gKwlPUFRfUFJJTlRf REVUQUlMICAgPSAnZCcsCj4gKwlPUFRfTElTVF9WRU5ET1JTICAgPSAndicsCj4gKwlPUFRfQklO RF9NT0RVTEVTICAgPSAnQicsCj4gKwlPUFRfVU5CSU5EX01PRFVMRSAgPSAndScsCj4gKwlPUFRf QklORF9NT0RVTEUgICAgPSAnYicsCj4gKwlPUFRfTElTVF9GSUxURVJTICAgPSAnbCcsCj4gKwlP UFRfU0VUX0ZJTFRFUiAgICAgPSAncycsCj4gKwlPUFRfTUFUQ0hfREVWSUNFICAgPSAnbScsCj4g KwlPUFRfREVWSUNFICAgICAgICAgPSAnRCcsCj4gKwlPUFRfSEVMUCAgICAgICAgICAgPSAnaCcK PiArfTsKPiArCj4gK2Jvb2wgZ19zaG93X3Byb3BzOwo+ICtib29sIGdfc2hvd19hdHRyczsKPiAr Ym9vbCBnX3Nob3dfdmVuZG9yczsKPiArYm9vbCBnX2JpbmRfbW9kdWxlczsKPiArY2hhciAqZ19w Y2lfaWQ7Cj4gK2Jvb2wgZ191bmJpbmRfbW9kdWxlOwo+ICtib29sIGdfYmluZF9tb2R1bGU7Cj4g K2Jvb2wgZ19saXN0X2ZpbHRlcnM7Cj4gK2NoYXIgKmdfZmlsdGVyOwo+ICtjaGFyICpnX21hdGNo X2ZpbHRlcjsKPiArYm9vbCBnX2RldmljZTsKPiArYm9vbCBnX2hlbHA7Cj4gKwo+ICtzdGF0aWMg Y29uc3QgY2hhciAqdXNhZ2Vfc3RyID0KPiArCSJ1c2FnZTogbHNncHUgW29wdGlvbnNdXG5cbiIK PiArCSJPcHRpb25zOlxuIgo+ICsJIiAgLXIsIC0tc2hvdy1wcm9wcyAgICAgICAgICAgIFNob3cg ZGV2aWNlIHByb3BlcnRpZXNcbiIKPiArCSIgIC1hLCAtLXNob3ctYXR0cnMgICAgICAgICAgICBT aG93IGRldmljZSBhdHRyaWJ1dGVzXG4iCj4gKwkiICAtaSwgLS1wcmludC1zaW1wbGUgICAgICAg ICAgUHJpbnQgZGV2aWNlcyBhcyBzaW1wbGUgbGlzdCAoZGVmYXVsdClcbiIKPiArCSIgIC1kLCAt LXByaW50LWRldGFpbHMgICAgICAgICBQcmludCBkZXZpY2VzIHdpdGggZGV0YWlsc1xuIgo+ICsJ IiAgLXYsIC0tbGlzdC12ZW5kb3JzICAgICAgICAgIExpc3QgcmVjb2duaXplZCB2ZW5kb3JzXG4i Cj4gKwkiICAtQiwgLS1iaW5kLW1vZHVsZXMgICAgICAgICAgQmluZCBtb2R1bGVzIHRvIHVuYm91 bmQgUENJIGNhcmRzXG4iCj4gKwkiICAtdSwgLS11bmJpbmQtbW9kdWxlIHBjaV9pZCAgVW5iaW5k IG1vZHVsZSBmcm9tIHBjaSBpZCBkZXZpY2VcbiIKPiArCSIgIC1iLCAtLWJpbmQtbW9kdWxlIHBj aV9pZCAgICBCaW5kIG1vZHVsZSB0byBwY2kgaWQgZGV2aWNlXG4iCj4gKwkiICAtbCwgLS1saXN0 LWZpbHRlci10eXBlcyAgICAgTGlzdCByZWdpc3RlcmVkIGRldmljZSBmaWx0ZXJzIHR5cGVzXG4i Cj4gKwkiICAtcywgLS1zZXQtZmlsdGVyIGZpbHRlciAgICAgU2V0IGZpbHRlciBmb3IgcHJvY2Vz c2luZyBkZXZpY2VzXG4iCj4gKwkiICAtbSwgLS1tYXRjaC1kZXZpY2UgZmlsdGVyICAgRmluZCBk ZXZpY2UgbWF0Y2hpbmcgdG8gZmlsdGVyXG4iCj4gKwkiICAtRCwgLS1kZXZpY2UgZmlsdGVyICAg ICAgICAgRGV2aWNlIGZpbHRlciwgY2FuIGJlIGdpdmVuIG11bHRpcGxlIHRpbWVzXG4iCj4gKwki ICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQg ZXhpdFxuIjsKPiArCj4gK3N0YXRpYyB2b2lkIHRlc3RfZGV2aWNlX29wZW4oc3RydWN0IGlndF9k ZXZpY2VfY2FyZCAqY2FyZCkKPiArewo+ICsJaW50IGZkOwo+ICsKPiArCWlmICghY2FyZCkKPiAr CQlyZXR1cm47Cj4gKwo+ICsJZmQgPSBfX2RybV9vcGVuX2NhcmQoY2FyZCk7Cj4gKwlpZiAoZmQg Pj0gMCkgewo+ICsJCXByaW50ZigiRGV2aWNlICVzIHN1Y2Nlc3NmdWxseSBvcGVuZWRcbiIsIGNh cmQtPmNhcmQpOwo+ICsJCWNsb3NlKGZkKTsKPiArCX0gZWxzZSB7Cj4gKwkJaWYgKHN0cmxlbihj YXJkLT5jYXJkKSkKPiArCQkJcHJpbnRmKCJDYW5ub3Qgb3BlbiBjYXJkICVzIGRldmljZVxuIiwg Y2FyZC0+Y2FyZCk7Cj4gKwkJZWxzZQo+ICsJCQlwcmludGYoIkNhbm5vdCBvcGVuIGNhcmQgZGV2 aWNlLCBlbXB0eSBuYW1lXG4iKTsKPiArCX0KPiArCj4gKwlmZCA9IF9fZHJtX29wZW5fcmVuZGVy KGNhcmQpOwo+ICsJaWYgKGZkID49IDApIHsKPiArCQlwcmludGYoIkRldmljZSAlcyBzdWNjZXNz ZnVsbHkgb3BlbmVkXG4iLCBjYXJkLT5yZW5kZXIpOwo+ICsJCWNsb3NlKGZkKTsKPiArCX0gZWxz ZSB7Cj4gKwkJaWYgKHN0cmxlbihjYXJkLT5yZW5kZXIpKQo+ICsJCQlwcmludGYoIkNhbm5vdCBv cGVuIHJlbmRlciAlcyBkZXZpY2VcbiIsIGNhcmQtPnJlbmRlcik7Cj4gKwkJZWxzZQo+ICsJCQlw cmludGYoIkNhbm5vdCBvcGVuIHJlbmRlciBkZXZpY2UsIGVtcHR5IG5hbWVcbiIpOwo+ICsJfQo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBwcmludF9jYXJkKHN0cnVjdCBpZ3RfZGV2aWNlX2NhcmQg KmNhcmQpCj4gK3sKPiArCWlmICghY2FyZCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJc3dpdGNoIChj YXJkLT5kZXZfdHlwZSkgewo+ICsJY2FzZSBERVZfUENJOgo+ICsJCXByaW50ZigiZGV2IHR5cGUg ICAgOiAlc1xuIiwgIlBDSSIpOwo+ICsJCXByaW50ZigiUENJIHNsb3QgICAgOiAlc1xuIiwgY2Fy ZC0+cGNpX3Nsb3QpOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBERVZfUExBVEZPUk1fTk9OX0RJU0NP VkVSQUJMRToKPiArCQlwcmludGYoImRldiB0eXBlICAgIDogJXNcbiIsICJQTEFURk9STSAoTk9O LURJU0NPVkVSQUJMRSkiKTsKPiArCQlicmVhazsKPiArCWNhc2UgREVWX1BMQVRGT1JNX0RJU0NP VkVSQUJMRToKPiArCQlwcmludGYoImRldiB0eXBlICAgIDogJXNcbiIsICJQTEFURk9STSAoRElT Q09WRVJBQkxFKSIpOwo+ICsJCWJyZWFrOwo+ICsJfQo+ICsJcHJpbnRmKCJkcnYgY2hpcHNldCA6 ICV4XG4iLCBjYXJkLT5jaGlwc2V0KTsKPiArCXByaW50ZigiZHJtIGNhcmQgICAgOiAlc1xuIiwg Y2FyZC0+Y2FyZCk7Cj4gKwlwcmludGYoImRybSByZW5kZXIgIDogJXNcbiIsIGNhcmQtPnJlbmRl cik7Cj4gKwlwcmludGYoImRydiBtb2R1bGUgIDogJXNcbiIsIGNhcmQtPm1vZHVsZSk7Cj4gK30K PiArCj4gK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gK3sKPiArCXN0YXRpYyBz dHJ1Y3Qgb3B0aW9uIGxvbmdfb3B0aW9uc1tdID0gewo+ICsJCXsic2hvdy1wcm9wcyIsICAgICAg ICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgT1BUX1NIT1dfUFJPUFN9LAo+ICsJCXsic2hvdy1h dHRycyIsICAgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgT1BUX1NIT1dfQVRUUlN9LAo+ ICsJCXsicHJpbnQtc2ltcGxlIiwgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgT1BUX1BS SU5UX1NJTVBMRX0sCj4gKwkJeyJwcmludC1kZXRhaWwiLCAgICAgIG5vX2FyZ3VtZW50LCAgICAg ICBOVUxMLCBPUFRfUFJJTlRfREVUQUlMfSwKPiArCQl7Imxpc3QtdmVuZG9ycyIsICAgICAgbm9f YXJndW1lbnQsICAgICAgIE5VTEwsIE9QVF9MSVNUX1ZFTkRPUlN9LAo+ICsJCXsiYmluZC1tb2R1 bGVzIiwgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgT1BUX0JJTkRfTU9EVUxFU30sCj4g KwkJeyJ1bmJpbmQtbW9kdWxlIiwgICAgIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCBPUFRfVU5C SU5EX01PRFVMRX0sCj4gKwkJeyJiaW5kLW1vZHVsZSIsICAgICAgIHJlcXVpcmVkX2FyZ3VtZW50 LCBOVUxMLCBPUFRfQklORF9NT0RVTEV9LAo+ICsJCXsibGlzdC1maWx0ZXItdHlwZXMiLCBub19h cmd1bWVudCwgICAgICAgTlVMTCwgT1BUX0xJU1RfRklMVEVSU30sCj4gKwkJeyJzZXQtZmlsdGVy IiwgICAgICAgIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCBPUFRfU0VUX0ZJTFRFUn0sCj4gKwkJ eyJtYXRjaC1kZXZpY2UiLCAgICAgIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCBPUFRfTUFUQ0hf REVWSUNFfSwKPiArCQl7ImRldmljZSIsICAgICAgICAgICAgcmVxdWlyZWRfYXJndW1lbnQsIE5V TEwsIE9QVF9ERVZJQ0V9LAo+ICsJCXsiaGVscCIsICAgICAgICAgICAgICBub19hcmd1bWVudCwg ICAgICAgTlVMTCwgT1BUX0hFTFB9LAo+ICsJCXswLCAwLCAwLCAwfQo+ICsJfTsKPiArCWludCBj LCBpbmRleCA9IDA7Cj4gKwljb25zdCBjaGFyICplbnY7Cj4gKwllbnVtIGlndF9kZXZpY2VzX3By aW50X3R5cGUgcHJpbnR0eXBlID0gSUdUX1BSSU5UX1NJTVBMRTsKPiArCj4gKwl3aGlsZSAoKGMg PSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiUHByYWlkdkJ1OmI6bHM6bTpEOmgiLAo+ICsJCQkJ bG9uZ19vcHRpb25zLCAmaW5kZXgpKSAhPSAtMSkgewo+ICsJCXN3aXRjaChjKSB7Cj4gKwkJY2Fz ZSBPUFRfU0hPV19QUk9QUzoKPiArCQkJZ19zaG93X3Byb3BzID0gdHJ1ZTsKPiArCQkJYnJlYWs7 Cj4gKwkJY2FzZSBPUFRfU0hPV19BVFRSUzoKPiArCQkJZ19zaG93X2F0dHJzID0gdHJ1ZTsKPiAr CQkJYnJlYWs7Cj4gKwkJY2FzZSBPUFRfUFJJTlRfU0lNUExFOgo+ICsJCQlwcmludHR5cGUgPSBJ R1RfUFJJTlRfU0lNUExFOwo+ICsJCQlicmVhazsKPiArCQljYXNlIE9QVF9QUklOVF9ERVRBSUw6 Cj4gKwkJCXByaW50dHlwZSA9IElHVF9QUklOVF9ERVRBSUw7Cj4gKwkJCWJyZWFrOwo+ICsJCWNh c2UgT1BUX0xJU1RfVkVORE9SUzoKPiArCQkJZ19zaG93X3ZlbmRvcnMgPSB0cnVlOwo+ICsJCQli cmVhazsKPiArCQljYXNlIE9QVF9CSU5EX01PRFVMRVM6Cj4gKwkJCWdfYmluZF9tb2R1bGVzID0g dHJ1ZTsKPiArCQkJYnJlYWs7Cj4gKwkJY2FzZSBPUFRfVU5CSU5EX01PRFVMRToKPiArCQkJZ19w Y2lfaWQgPSBzdHJkdXAob3B0YXJnKTsKPiArCQkJZ191bmJpbmRfbW9kdWxlID0gdHJ1ZTsKPiAr CQkJYnJlYWs7Cj4gKwkJY2FzZSBPUFRfQklORF9NT0RVTEU6Cj4gKwkJCWdfcGNpX2lkID0gc3Ry ZHVwKG9wdGFyZyk7Cj4gKwkJCWdfYmluZF9tb2R1bGUgPSB0cnVlOwo+ICsJCQlicmVhazsKPiAr CQljYXNlIE9QVF9TRVRfRklMVEVSOgo+ICsJCQlnX2ZpbHRlciA9IHN0cmR1cChvcHRhcmcpOwo+ ICsJCQlicmVhazsKPiArCQljYXNlIE9QVF9MSVNUX0ZJTFRFUlM6Cj4gKwkJCWdfbGlzdF9maWx0 ZXJzID0gdHJ1ZTsKPiArCQkJYnJlYWs7Cj4gKwkJY2FzZSBPUFRfTUFUQ0hfREVWSUNFOgo+ICsJ CQlnX21hdGNoX2ZpbHRlciA9IHN0cmR1cChvcHRhcmcpOwo+ICsJCQlicmVhazsKPiArCQljYXNl IE9QVF9ERVZJQ0U6Cj4gKwkJCWdfZGV2aWNlID0gdHJ1ZTsKPiArCQkJaWd0X2RldmljZV9maWx0 ZXJfYWRkKG9wdGFyZyk7Cj4gKwkJCWJyZWFrOwo+ICsJCWNhc2UgT1BUX0hFTFA6Cj4gKwkJCWdf aGVscCA9IHRydWU7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCX0KPiArCj4gKwlpZiAoZ19oZWxw KSB7Cj4gKwkJcHJpbnRmKCIlc1xuIiwgdXNhZ2Vfc3RyKTsKPiArCQlleGl0KDApOwo+ICsJfQo+ ICsKPiArCWVudiA9IGdldGVudigiSUdUX0RFVklDRSIpOwo+ICsJaWYgKGVudikgewo+ICsJCWln dF9kZXZpY2VfZmlsdGVyX2FkZChlbnYpOwo+ICsJCWdfZGV2aWNlID0gdHJ1ZTsKPiArCX0KPiAr Cj4gKwlpZ3RfZGV2aWNlc19zY2FuKGZhbHNlKTsKPiArCWlmIChnX3Nob3dfdmVuZG9ycykgewo+ ICsJCWlndF9kZXZpY2VzX3ByaW50X3ZlbmRvcnMoKTsKPiArCQlyZXR1cm4gMDsKPiArCX0KPiAr CWlmIChnX2JpbmRfbW9kdWxlcykgewo+ICsJCWlndF9kZXZpY2VzX2JpbmRfbW9kdWxlcygpOwo+ ICsJCXJldHVybiAwOwo+ICsJfQo+ICsKPiArCWlmIChnX3VuYmluZF9tb2R1bGUpIHsKPiArCQlp Z3RfZGV2aWNlX3BjaV91bmJpbmRfbW9kdWxlKGdfcGNpX2lkKTsKPiArCQlyZXR1cm4gMDsKPiAr CX0KPiArCj4gKwlpZiAoZ19iaW5kX21vZHVsZSkgewo+ICsJCWlndF9kZXZpY2VfcGNpX2JpbmRf bW9kdWxlKGdfcGNpX2lkKTsKPiArCQlyZXR1cm4gMDsKPiArCX0KPiArCj4gKwlpZiAoZ19saXN0 X2ZpbHRlcnMpIHsKPiArCQlpZ3RfZGV2aWNlX3ByaW50X2ZpbHRlcl90eXBlcygpOwo+ICsJCXJl dHVybiAwOwo+ICsJfQo+ICsKPiArCWlmIChnX2ZpbHRlcikgewo+ICsJCWlndF9kZXZpY2VfZmls dGVyX2FwcGx5KGdfZmlsdGVyKTsKPiArCX0KPiArCj4gKwlpZiAoZ19tYXRjaF9maWx0ZXIpIHsK PiArCQlzdHJ1Y3QgaWd0X2RldmljZV9jYXJkIGNhcmQ7Cj4gKwkJaWYgKGlndF9kZXZpY2VfY2Fy ZF9tYXRjaChnX21hdGNoX2ZpbHRlciwgJmNhcmQpKSB7Cj4gKwkJCXByaW50X2NhcmQoJmNhcmQp Owo+ICsJCX0gZWxzZSB7Cj4gKwkJCXByaW50ZigiTm8gZGV2aWNlIG1hdGNoaW5nIGZpbHRlciBb JXNdIGZvdW5kLlxuIiwKPiArCQkJICAgICAgIGdfbWF0Y2hfZmlsdGVyKTsKPiArCQkJcmV0dXJu IDA7Cj4gKwkJfQo+ICsJCXRlc3RfZGV2aWNlX29wZW4oJmNhcmQpOwo+ICsKPiArCQlyZXR1cm4g MDsKPiArCX0KPiArCj4gKwlpZiAoZ19kZXZpY2UpIHsKPiArCQlpbnQgbiA9IGlndF9kZXZpY2Vf ZmlsdGVyX2NvdW50KCk7Cj4gKwkJcHJpbnRmKCI9PT0gRGV2aWNlIGZpbHRlciBsaXN0ID09PVxu Iik7Cj4gKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKPiArCQkJcHJpbnRmKCJbJTJk XTogJXNcbiIsIGksCj4gKwkJCSAgICAgICBpZ3RfZGV2aWNlX2ZpbHRlcl9nZXQoaSkpOwo+ICsJ CQlpZ3RfZGV2aWNlX2ZpbHRlcl9hcHBseV9udGgoaSk7Cj4gKwkJCWlndF9kZXZpY2VzX3ByaW50 KHByaW50dHlwZSwgZ19zaG93X3Byb3BzLCBnX3Nob3dfYXR0cnMpOwo+ICsJCX0KPiArCQlwcmlu dGYoIlxuIik7Cj4gKwo+ICsJCXByaW50ZigiPT09IFRlc3RpbmcgZGV2aWNlIG9wZW4gPT09XG4i KTsKPiArCQlmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewo+ICsJCQlzdHJ1Y3QgaWd0X2Rl dmljZV9jYXJkIGNhcmQ7Cj4gKwkJCWNvbnN0IGNoYXIgKmZpbHRlciA9IGlndF9kZXZpY2VfZmls dGVyX2dldChpKTsKPiArCj4gKwkJCWlmICghaWd0X2RldmljZV9jYXJkX21hdGNoKGZpbHRlciwg JmNhcmQpKQo+ICsJCQkJY29udGludWU7Cj4gKwkJCXByaW50X2NhcmQoJmNhcmQpOwo+ICsJCQl0 ZXN0X2RldmljZV9vcGVuKCZjYXJkKTsKPiArCQkJcHJpbnRmKCItLS1cbiIpOwo+ICsJCX0KPiAr Cj4gKwkJcmV0dXJuIDA7Cj4gKwl9Cj4gKwo+ICsJaWd0X2RldmljZXNfcHJpbnQocHJpbnR0eXBl LCBnX3Nob3dfcHJvcHMsIGdfc2hvd19hdHRycyk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiBk aWZmIC0tZ2l0IGEvdG9vbHMvbWVzb24uYnVpbGQgYi90b29scy9tZXNvbi5idWlsZAo+IGluZGV4 IDZlNzJiMjYzLi45YjNhMmE2OSAxMDA2NDQKPiAtLS0gYS90b29scy9tZXNvbi5idWlsZAo+ICsr KyBiL3Rvb2xzL21lc29uLmJ1aWxkCj4gQEAgLTM2LDYgKzM2LDcgQEAgdG9vbHNfcHJvZ3MgPSBb Cj4gIAknaW50ZWxfZ2VtX2luZm8nLAo+ICAJJ2ludGVsX2d2dGdfdGVzdCcsCj4gIAknZHBjZF9y ZWcnLAo+ICsJJ2xzZ3B1JywKPiAgXQo+ICB0b29sX2RlcHMgPSBpZ3RfZGVwcwo+ICAKPiAtLSAK PiAyLjIxLjAKPiAKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBD b3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2lndC1kZXY=