Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 379A8C6FA8E for ; Thu, 2 Mar 2023 10:51:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230074AbjCBKvL (ORCPT ); Thu, 2 Mar 2023 05:51:11 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37482 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229592AbjCBKvI (ORCPT ); Thu, 2 Mar 2023 05:51:08 -0500 Received: from madras.collabora.co.uk (madras.collabora.co.uk [IPv6:2a00:1098:0:82:1000:25:2eeb:e5ab]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 201882ED57; Thu, 2 Mar 2023 02:51:03 -0800 (PST) Received: from [IPv6:2a00:23c6:c311:3401:45a5:b946:dcd1:2820] (unknown [IPv6:2a00:23c6:c311:3401:45a5:b946:dcd1:2820]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: martyn) by madras.collabora.co.uk (Postfix) with ESMTPSA id 592CA6602EB0; Thu, 2 Mar 2023 10:51:01 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1677754261; bh=rl+Ib2QV9qvQMd8RW6RlMKobcf14SjX+BqKk/GcP51g=; h=Subject:From:To:Cc:Date:In-Reply-To:References:From; b=WmzE0YrQy2oE7zqx7P27egBCSgEzFmV2H+ZtWuYAwuTO3BxFQnOITGAWsae4Au+mN FpCXR9DzqOkuPSRaD7E3Wd1uMMi9fe1eJGVkektQHXro6Ji12GRalTgilZgZ2RrSGe EqvsZGsjbAwH5OOUIPh6psS7vCaS1ARIaD4/J+c9c+oHLnSLbeJBiq+CiTuQ6/l66Z 5L8f0Cb/PV9K8idS0As2Ca7DfQOuyMvAH8GipLlK6JbHu4uxIjcAhDxAjeKtb40lUi HCLd6e8TdaRwa2z2lsZMPYpJP3bxsQXV8QLxUg8IeaiLSqQnDwIAiM09wxcCuNSEAc yaxEGnnfhH2/A== Message-ID: <7b38387acdd2c4c6eb1590f5732af4478fb93d4f.camel@collabora.com> Subject: Re: [PATCH v2 2/3] remoteproc: k4-m4: Add a remoteproc driver for M4F subsystem From: Martyn Welch To: Mathieu Poirier Cc: Bjorn Andersson , Philipp Zabel , kernel@collabora.com, Hari Nagalla , linux-kernel@vger.kernel.org, linux-remoteproc@vger.kernel.org Date: Thu, 02 Mar 2023 10:50:58 +0000 In-Reply-To: References: <20230301111323.1532479-1-martyn.welch@collabora.com> <20230301111323.1532479-3-martyn.welch@collabora.com> Organization: Collabora Ltd. Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 User-Agent: Evolution 3.46.3-1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org T24gV2VkLCAyMDIzLTAzLTAxIGF0IDExOjE5IC0wNzAwLCBNYXRoaWV1IFBvaXJpZXIgd3JvdGU6 Cj4gSGkgTWFydHluLAo+IAo+IE9uIFdlZCwgMSBNYXIgMjAyMyBhdCAwNDoxMywgTWFydHluIFdl bGNoCj4gPG1hcnR5bi53ZWxjaEBjb2xsYWJvcmEuY29tPiB3cm90ZToKPiA+IAo+ID4gRnJvbTog SGFyaSBOYWdhbGxhIDxobmFnYWxsYUB0aS5jb20+Cj4gPiAKPiA+IFRoZSBBTTY0eCBTb0Mgb2Yg VEkgSzMgZmFtaWx5IGhhcyBhIENvcnRleMKgIE00RiBjb3JlIGluIHRoZSBNQ1UKPiA+IGRvbWFp bi4gVGhpcyBjb3JlIGlzIHR5cGljYWxseSB1c2VkIGZvciBzYWZldHkgYXBwbGljYXRpb25zIGlu IGEKPiA+IHN0YW5kCj4gPiBhbG9uZSBtb2RlLiBIb3dldmVyLCBzb21lIGFwcGxpY2F0aW9uIChu b24gc2FmZXR5IHJlbGF0ZWQpIG1heSB3YW50Cj4gPiB0bwo+ID4gdXNlIHRoZSBNNEYgY29yZSBh cyBhIGdlbmVyaWMgcmVtb3RlIHByb2Nlc3NvciB3aXRoIElQQyB0byB0aGUgaG9zdAo+ID4gcHJv Y2Vzc29yLiBUaGUgTTRGIGNvcmUgaGFzIGludGVybmFsIElSQU0gYW5kIERSQU0gbWVtb3JpZXMg YW5kIGFyZQo+ID4gZXhwb3NlZCB0byB0aGUgc3lzdGVtIGJ1cyBmb3IgY29kZSBhbmQgZGF0YSBs b2FkaW5nLgo+ID4gCj4gPiBBIHJlbW90ZXByb2MgZHJpdmVyIGlzIGFkZGVkIHRvIHN1cHBvcnQg dGhpcyBzdWJzeXN0ZW0gdG8gYmUgYWJsZQo+ID4gdG8KPiA+IGxvYWQgYW5kIGJvb3QgTTRGIGNv cmUuIExvYWRpbmcgaW5jbHVkZXMgdG8gTTRGIGludGVybmFsIG1lbW9yaWVzCj4gPiBhbmQKPiA+ IHRvIGFueSBwcmVkZWZpbmVkIGV4dGVybmFsIGNvZGUvZGF0YSBtZW1vcnkuIFRoZSBjYXJ2ZW91 dHMgZm9yCj4gPiBleHRlcm5hbAo+ID4gY29udGlndW91cyBtZW1vcnkgaXMgZGVmaW5lZCBpbiB0 aGUgTTRGIGRldmljZSBub2RlIGFuZCBzaG91bGQKPiA+IG1hdGNoCj4gPiB3aXRoIHRoZSBleHRl cm5hbCBtZW1vcnkgZGVjbGFyYXRpb25zIGluIHRoZSBNNEYgaW1hZ2UgYmluYXJ5LiBUaGUKPiA+ IE00Rgo+ID4gc3Vic3lzdGVtIGhhcyB0d28gcmVzZXRzLiBPbmUgcmVzZXQgaXMgZm9yIHRoZSBl bnRpcmUgc3Vic3lzdGVtIGkuZQo+ID4gaW5jbHVkaW5nIHRoZSBpbnRlcm5hbCBtZW1vcmllcyBh bmQgdGhlciBvdGhlciwgYSBsb2NhbCByZXNldCBpcwo+ID4gb25seQo+ID4gZm9yIHRoZSBNNEYg cHJvY2Vzc2luZyBjb3JlLiBGb3IgbG9hZGluZyB0aGUgaW1hZ2UgcmVtb3RlIHByb2Nlc3Nvcgo+ ID4gZHJpdmVyCj4gPiBmaXJzdCByZWxlYXNlcyB0aGUgc3Vic3lzdGVtIHJlc2V0LCBsb2FkcyB0 aGUgZmlybXdhcmUgaW1hZ2UgYW5kCj4gPiB0aGVuCj4gPiByZWxlYXNlcyB0aGUgbG9jYWwgcmVz ZXQgdG8gbGV0IHRoZSBNNEYgcHJvY2Vzc2luZyBjb3JlIHRvIHJ1bi4KPiA+IAo+ID4gU2lnbmVk LW9mZi1ieTogSGFyaSBOYWdhbGxhIDxobmFnYWxsYUB0aS5jb20+Cj4gPiBbTWFydHluIFdlbGNo OiBBZGRyZXNzIG1pbm9yIHJldmlldyBjb21tZW50c10KPiA+IFNpZ25lZC1vZmYtYnk6IE1hcnR5 biBXZWxjaCA8bWFydHluLndlbGNoQGNvbGxhYm9yYS5jb20+Cj4gPiAtLS0KPiA+IAo+ID4gQ2hh bmdlcyBzaW5jZSB2MToKPiA+IMKgLSBBZGRyZXNzZWQgbWlub3IgcmV2aWV3IGNvbW1lbnRzIChy ZWZhY3RvcmluZyBjb21wbGV0ZWQgaW4KPiA+IHNlcGFyYXRlCj4gPiDCoMKgIHBhdGNoKQo+ID4g Cj4gCj4gU2V2ZXJhbCBvZiBteSBjb21tZW50cywgYm90aCBpbiB0aGUgcHJldmlvdXMgYW5kIHRo aXMgcGF0Y2gsIGhhdmUKPiBiZWVuCj4gaWdub3JlZC7CoCBBcyBzdWNoIEkgYW0gZHJvcHBpbmcg dGhpcyBwYXRjaHNldC7CoCBJIGFtIGFsc28gZXhwZWN0aW5nIGEKPiBwcm9wZXIgY292ZXIgbGV0 dGVyIGZvciB0aGUgbmV4dCByZXZpc2lvbi4KPiAKCkhpIE1hdGhpZXUsCgpTb3JyeSBJIG11c3Qg aGF2ZSBtaXNzZWQgYSBmZXcuIEknbGwgZ28gYmFjayBhbmQgbG9vayBhZ2Fpbi4KCkFsc28sIHNv cnJ5IGZvciB0aGUgbWlzc2luZyBjb3ZlciBsZXR0ZXIgLSBJIHByZXBhcmVkIG9uZSwgYnV0IGl0 IHNlZW1zCnRoYXQgbXkgdXN1YWwgaW5jYW50YXRpb24gb2YgZ2l0IHNlbmQtZW1haWwgaGFzIGZh aWxlZCB0byBzZW5kIHRoYXQgdG8KdGhlIGFkZHJlc3NlcyBJJ2QgZXhwZWN0ZWQuCgpNYXJ0eW4K Cj4gPiDCoGRyaXZlcnMvcmVtb3RlcHJvYy9LY29uZmlnwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB8wqAgMTMgKwo+ID4gwqBkcml2ZXJzL3JlbW90ZXByb2MvTWFrZWZpbGXCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAxICsKPiA+IMKgZHJpdmVycy9yZW1vdGVwcm9jL3RpX2sz X200X3JlbW90ZXByb2MuYyB8IDg5OQo+ID4gKysrKysrKysrKysrKysrKysrKysrKysKPiA+IMKg MyBmaWxlcyBjaGFuZ2VkLCA5MTMgaW5zZXJ0aW9ucygrKQo+ID4gwqBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9yZW1vdGVwcm9jL3RpX2szX200X3JlbW90ZXByb2MuYwo+ID4gCj4gPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWcKPiA+IGIvZHJpdmVycy9yZW1vdGVw cm9jL0tjb25maWcKPiA+IGluZGV4IGE4NTBlOWY0ODZkZC4uZmY2NWI3M2Q3ZTU5IDEwMDY0NAo+ ID4gLS0tIGEvZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWcKPiA+ICsrKyBiL2RyaXZlcnMvcmVt b3RlcHJvYy9LY29uZmlnCj4gPiBAQCAtMzM5LDYgKzMzOSwxOSBAQCBjb25maWcgVElfSzNfRFNQ X1JFTU9URVBST0MKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoCBJdCdzIHNhZmUgdG8gc2F5IE4gaGVy ZSBpZiB5b3UncmUgbm90IGludGVyZXN0ZWQgaW4KPiA+IHV0aWxpemluZwo+ID4gwqDCoMKgwqDC oMKgwqDCoMKgIHRoZSBEU1Agc2xhdmUgcHJvY2Vzc29ycy4KPiA+IAo+ID4gK2NvbmZpZyBUSV9L M19NNF9SRU1PVEVQUk9DCj4gPiArwqDCoMKgwqDCoMKgIHRyaXN0YXRlICJUSSBLMyBNNCByZW1v dGVwcm9jIHN1cHBvcnQiCj4gPiArwqDCoMKgwqDCoMKgIGRlcGVuZHMgb24gQVJDSF9LMwo+ID4g K8KgwqDCoMKgwqDCoCBzZWxlY3QgTUFJTEJPWAo+ID4gK8KgwqDCoMKgwqDCoCBzZWxlY3QgT01B UDJQTFVTX01CT1gKPiA+ICvCoMKgwqDCoMKgwqAgaGVscAo+ID4gK8KgwqDCoMKgwqDCoMKgwqAg U2F5IG0gaGVyZSB0byBzdXBwb3J0IFRJJ3MgTTQgcmVtb3RlIHByb2Nlc3NvciBzdWJzeXN0ZW1z Cj4gPiArwqDCoMKgwqDCoMKgwqDCoCBvbiB2YXJpb3VzIFRJIEszIGZhbWlseSBvZiBTb0NzIHRo cm91Z2ggdGhlIHJlbW90ZQo+ID4gcHJvY2Vzc29yCj4gPiArwqDCoMKgwqDCoMKgwqDCoCBmcmFt ZXdvcmsuCj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqDCoCBJdCdzIHNhZmUgdG8gc2F5IE4gaGVy ZSBpZiB5b3UncmUgbm90IGludGVyZXN0ZWQgaW4KPiA+IHV0aWxpemluZwo+ID4gK8KgwqDCoMKg wqDCoMKgwqAgYSByZW1vdGUgcHJvY2Vzc29yLgo+ID4gKwo+ID4gwqBjb25maWcgVElfSzNfUjVf UkVNT1RFUFJPQwo+ID4gwqDCoMKgwqDCoMKgwqAgdHJpc3RhdGUgIlRJIEszIFI1IHJlbW90ZXBy b2Mgc3VwcG9ydCIKPiA+IMKgwqDCoMKgwqDCoMKgIGRlcGVuZHMgb24gQVJDSF9LMwo+ID4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvcmVtb3RlcHJvYy9NYWtlZmlsZQo+ID4gYi9kcml2ZXJzL3JlbW90 ZXByb2MvTWFrZWZpbGUKPiA+IGluZGV4IDkxMzE0YTliNDNjZS4uNWZmNGUyZmVlNGFiIDEwMDY0 NAo+ID4gLS0tIGEvZHJpdmVycy9yZW1vdGVwcm9jL01ha2VmaWxlCj4gPiArKysgYi9kcml2ZXJz L3JlbW90ZXByb2MvTWFrZWZpbGUKPiA+IEBAIC0zNyw1ICszNyw2IEBAIG9iai0kKENPTkZJR19T VF9SRU1PVEVQUk9DKcKgwqDCoMKgwqDCoMKgwqDCoMKgICs9Cj4gPiBzdF9yZW1vdGVwcm9jLm8K PiA+IMKgb2JqLSQoQ09ORklHX1NUX1NMSU1fUkVNT1RFUFJPQynCoMKgwqDCoMKgwqAgKz0gc3Rf c2xpbV9ycHJvYy5vCj4gPiDCoG9iai0kKENPTkZJR19TVE0zMl9SUFJPQynCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCArPSBzdG0zMl9ycHJvYy5vCj4gPiDCoG9iai0kKENPTkZJR19USV9LM19E U1BfUkVNT1RFUFJPQynCoMKgwqDCoCArPSB0aV9rM19kc3BfcmVtb3RlcHJvYy5vCj4gPiArb2Jq LSQoQ09ORklHX1RJX0szX000X1JFTU9URVBST0MpwqDCoMKgwqDCoCArPSB0aV9rM19tNF9yZW1v dGVwcm9jLm8KPiA+IMKgb2JqLSQoQ09ORklHX1RJX0szX1I1X1JFTU9URVBST0MpwqDCoMKgwqDC oCArPSB0aV9rM19yNV9yZW1vdGVwcm9jLm8KPiA+IMKgb2JqLSQoQ09ORklHX1hMTlhfUjVfUkVN T1RFUFJPQynCoMKgwqDCoMKgwqAgKz0geGxueF9yNV9yZW1vdGVwcm9jLm8KPiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL3JlbW90ZXByb2MvdGlfazNfbTRfcmVtb3RlcHJvYy5jCj4gPiBiL2RyaXZl cnMvcmVtb3RlcHJvYy90aV9rM19tNF9yZW1vdGVwcm9jLmMKPiA+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjY2MzAxZWI2OWY2Zgo+ID4gLS0tIC9kZXYvbnVs bAo+ID4gKysrIGIvZHJpdmVycy9yZW1vdGVwcm9jL3RpX2szX200X3JlbW90ZXByb2MuYwo+ID4g QEAgLTAsMCArMSw4OTkgQEAKPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MC1vbmx5Cj4gPiArLyoKPiA+ICsgKiBUSSBLMyBDb3J0ZXgtTTQgUmVtb3RlIFByb2Nlc3Nvcihz KSBkcml2ZXIKPiA+ICsgKgo+ID4gKyAqIENvcHlyaWdodCAoQykgMjAyMSBUZXhhcyBJbnN0cnVt ZW50cyBJbmNvcnBvcmF0ZWQgLQo+ID4gaHR0cHM6Ly93d3cudGkuY29tLwo+ID4gKyAqwqDCoMKg wqAgSGFyaSBOYWdhbGxhIDxobmFnYWxsYUB0aS5jb20+Cj4gPiArICovCj4gPiArCj4gPiArI2lu Y2x1ZGUgPGxpbnV4L2lvLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L21haWxib3hfY2xpZW50Lmg+ Cj4gPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9vZl9k ZXZpY2UuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfcmVzZXJ2ZWRfbWVtLmg+Cj4gPiArI2lu Y2x1ZGUgPGxpbnV4L29tYXAtbWFpbGJveC5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9y bV9kZXZpY2UuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvcmVtb3RlcHJvYy5oPgo+ID4gKyNpbmNs dWRlIDxsaW51eC9yZXNldC5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4gPiArCj4g PiArI2luY2x1ZGUgIm9tYXBfcmVtb3RlcHJvYy5oIgo+ID4gKyNpbmNsdWRlICJyZW1vdGVwcm9j X2ludGVybmFsLmgiCj4gPiArI2luY2x1ZGUgInRpX3NjaV9wcm9jLmgiCj4gPiArCj4gPiArI2Rl ZmluZSBLRVlTVE9ORV9SUFJPQ19MT0NBTF9BRERSRVNTX01BU0vCoMKgwqDCoMKgIChTWl8xNk0g LSAxKQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIHN0cnVjdCBrM19tNF9tZW0gLSBpbnRlcm5hbCBt ZW1vcnkgc3RydWN0dXJlCj4gPiArICogQGNwdV9hZGRyOiBNUFUgdmlydHVhbCBhZGRyZXNzIG9m IHRoZSBtZW1vcnkgcmVnaW9uCj4gPiArICogQGJ1c19hZGRyOiBCdXMgYWRkcmVzcyB1c2VkIHRv IGFjY2VzcyB0aGUgbWVtb3J5IHJlZ2lvbgo+ID4gKyAqIEBkZXZfYWRkcjogRGV2aWNlIGFkZHJl c3Mgb2YgdGhlIG1lbW9yeSByZWdpb24gZnJvbSBEU1Agdmlldwo+ID4gKyAqIEBzaXplOiBTaXpl IG9mIHRoZSBtZW1vcnkgcmVnaW9uCj4gPiArICovCj4gPiArc3RydWN0IGszX200X21lbSB7Cj4g PiArwqDCoMKgwqDCoMKgIHZvaWQgX19pb21lbSAqY3B1X2FkZHI7Cj4gPiArwqDCoMKgwqDCoMKg IHBoeXNfYWRkcl90IGJ1c19hZGRyOwo+ID4gK8KgwqDCoMKgwqDCoCB1MzIgZGV2X2FkZHI7Cj4g PiArwqDCoMKgwqDCoMKgIHNpemVfdCBzaXplOwo+ID4gK307Cj4gPiArCj4gPiArLyoqCj4gPiAr ICogc3RydWN0IGszX200X21lbV9kYXRhIC0gbWVtb3J5IGRlZmluaXRpb25zIGZvciBhIERTUAo+ ID4gKyAqIEBuYW1lOiBuYW1lIGZvciB0aGlzIG1lbW9yeSBlbnRyeQo+ID4gKyAqIEBkZXZfYWRk cjogZGV2aWNlIGFkZHJlc3MgZm9yIHRoZSBtZW1vcnkgZW50cnkKPiA+ICsgKi8KPiA+ICtzdHJ1 Y3QgazNfbTRfbWVtX2RhdGEgewo+ID4gK8KgwqDCoMKgwqDCoCBjb25zdCBjaGFyICpuYW1lOwo+ ID4gK8KgwqDCoMKgwqDCoCBjb25zdCB1MzIgZGV2X2FkZHI7Cj4gPiArfTsKPiA+ICsKPiA+ICsv KioKPiA+ICsgKiBzdHJ1Y3QgazNfbTRfZGV2X2RhdGEgLSBkZXZpY2UgZGF0YSBzdHJ1Y3R1cmUg Zm9yIGEgRFNQCj4gPiArICogQG1lbXM6IHBvaW50ZXIgdG8gbWVtb3J5IGRlZmluaXRpb25zIGZv ciBhIERTUAo+ID4gKyAqIEBudW1fbWVtczogbnVtYmVyIG9mIG1lbW9yeSByZWdpb25zIGluIEBt ZW1zCj4gPiArICogQGJvb3RfYWxpZ25fYWRkcjogYm9vdCB2ZWN0b3IgYWRkcmVzcyBhbGlnbm1l bnQgZ3JhbnVsYXJpdHkKPiA+ICsgKiBAdXNlc19scmVzZXQ6IGZsYWcgdG8gZGVub3RlIHRoZSBu ZWVkIGZvciBsb2NhbCByZXNldAo+ID4gbWFuYWdlbWVudAo+ID4gKyAqLwo+ID4gK3N0cnVjdCBr M19tNF9kZXZfZGF0YSB7Cj4gPiArwqDCoMKgwqDCoMKgIGNvbnN0IHN0cnVjdCBrM19tNF9tZW1f ZGF0YSAqbWVtczsKPiA+ICvCoMKgwqDCoMKgwqAgdTMyIG51bV9tZW1zOwo+ID4gK8KgwqDCoMKg wqDCoCB1MzIgYm9vdF9hbGlnbl9hZGRyOwo+ID4gK8KgwqDCoMKgwqDCoCBib29sIHVzZXNfbHJl c2V0Owo+ID4gK307Cj4gPiArCj4gPiArLyoqCj4gPiArICogc3RydWN0IGszX200X3Jwcm9jIC0g azMgTTQgcmVtb3RlIHByb2Nlc3NvciBkcml2ZXIgc3RydWN0dXJlCj4gPiArICogQGRldjogY2Fj aGVkIGRldmljZSBwb2ludGVyCj4gPiArICogQHJwcm9jOiByZW1vdGVwcm9jIGRldmljZSBoYW5k bGUKPiA+ICsgKiBAbWVtOiBpbnRlcm5hbCBtZW1vcnkgcmVnaW9ucyBkYXRhCj4gPiArICogQG51 bV9tZW1zOiBudW1iZXIgb2YgaW50ZXJuYWwgbWVtb3J5IHJlZ2lvbnMKPiA+ICsgKiBAcm1lbTog cmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMgZGF0YQo+ID4gKyAqIEBudW1fcm1lbXM6IG51bWJlciBv ZiByZXNlcnZlZCBtZW1vcnkgcmVnaW9ucwo+ID4gKyAqIEByZXNldDogcmVzZXQgY29udHJvbCBo YW5kbGUKPiA+ICsgKiBAZGF0YTogcG9pbnRlciB0byBNNC1zcGVjaWZpYyBkZXZpY2UgZGF0YQo+ ID4gKyAqIEB0c3A6IFRJLVNDSSBwcm9jZXNzb3IgY29udHJvbCBoYW5kbGUKPiA+ICsgKiBAdGlf c2NpOiBUSS1TQ0kgaGFuZGxlCj4gPiArICogQHRpX3NjaV9pZDogVEktU0NJIGRldmljZSBpZGVu dGlmaWVyCj4gPiArICogQG1ib3g6IG1haWxib3ggY2hhbm5lbCBoYW5kbGUKPiA+ICsgKiBAY2xp ZW50OiBtYWlsYm94IGNsaWVudCB0byByZXF1ZXN0IHRoZSBtYWlsYm94IGNoYW5uZWwKPiA+ICsg KiBAaXBjX29ubHk6IGZsYWcgdG8gaW5kaWNhdGUgSVBDLW9ubHkgbW9kZQo+ID4gKyAqLwo+ID4g K3N0cnVjdCBrM19tNF9ycHJvYyB7Cj4gPiArwqDCoMKgwqDCoMKgIHN0cnVjdCBkZXZpY2UgKmRl djsKPiA+ICvCoMKgwqDCoMKgwqAgc3RydWN0IHJwcm9jICpycHJvYzsKPiA+ICvCoMKgwqDCoMKg wqAgc3RydWN0IGszX200X21lbSAqbWVtOwo+ID4gK8KgwqDCoMKgwqDCoCBpbnQgbnVtX21lbXM7 Cj4gPiArwqDCoMKgwqDCoMKgIHN0cnVjdCBrM19tNF9tZW0gKnJtZW07Cj4gPiArwqDCoMKgwqDC oMKgIGludCBudW1fcm1lbXM7Cj4gPiArwqDCoMKgwqDCoMKgIHN0cnVjdCByZXNldF9jb250cm9s ICpyZXNldDsKPiA+ICvCoMKgwqDCoMKgwqAgY29uc3Qgc3RydWN0IGszX200X2Rldl9kYXRhICpk YXRhOwo+ID4gK8KgwqDCoMKgwqDCoCBzdHJ1Y3QgdGlfc2NpX3Byb2MgKnRzcDsKPiA+ICvCoMKg wqDCoMKgwqAgY29uc3Qgc3RydWN0IHRpX3NjaV9oYW5kbGUgKnRpX3NjaTsKPiA+ICvCoMKgwqDC oMKgwqAgdTMyIHRpX3NjaV9pZDsKPiA+ICvCoMKgwqDCoMKgwqAgc3RydWN0IG1ib3hfY2hhbiAq bWJveDsKPiA+ICvCoMKgwqDCoMKgwqAgc3RydWN0IG1ib3hfY2xpZW50IGNsaWVudDsKPiA+ICvC oMKgwqDCoMKgwqAgYm9vbCBpcGNfb25seTsKPiA+ICt9Owo+ID4gKwo+ID4gKy8qKgo+ID4gKyAq IGszX200X3Jwcm9jX21ib3hfY2FsbGJhY2soKSAtIGluYm91bmQgbWFpbGJveCBtZXNzYWdlIGhh bmRsZXIKPiA+ICsgKiBAY2xpZW50OiBtYWlsYm94IGNsaWVudCBwb2ludGVyIHVzZWQgZm9yIHJl cXVlc3RpbmcgdGhlIG1haWxib3gKPiA+IGNoYW5uZWwKPiA+ICsgKiBAZGF0YTogbWFpbGJveCBw YXlsb2FkCj4gPiArICoKPiA+ICsgKiBUaGlzIGhhbmRsZXIgaXMgaW52b2tlZCBieSB0aGUgT01B UCBtYWlsYm94IGRyaXZlciB3aGVuZXZlciBhCj4gPiBtYWlsYm94Cj4gPiArICogbWVzc2FnZSBp cyByZWNlaXZlZC4gVXN1YWxseSwgdGhlIG1haWxib3ggcGF5bG9hZCBzaW1wbHkKPiA+IGNvbnRh aW5zCj4gPiArICogdGhlIGluZGV4IG9mIHRoZSB2aXJ0cXVldWUgdGhhdCBpcyBraWNrZWQgYnkg dGhlIHJlbW90ZQo+ID4gcHJvY2Vzc29yLAo+ID4gKyAqIGFuZCB3ZSBsZXQgcmVtb3RlcHJvYyBj b3JlIGhhbmRsZSBpdC4KPiA+ICsgKgo+ID4gKyAqIEluIGFkZGl0aW9uIHRvIHZpcnRxdWV1ZSBp bmRpY2VzLCB3ZSBhbHNvIGhhdmUgc29tZSBvdXQtb2YtYmFuZAo+ID4gdmFsdWVzCj4gPiArICog dGhhdCBpbmRpY2F0ZSBkaWZmZXJlbnQgZXZlbnRzLiBUaG9zZSB2YWx1ZXMgYXJlIGRlbGliZXJh dGVseQo+ID4gdmVyeQo+ID4gKyAqIGxhcmdlIHNvIHRoZXkgZG9uJ3QgY29pbmNpZGUgd2l0aCB2 aXJ0cXVldWUgaW5kaWNlcy4KPiA+ICsgKi8KPiA+ICtzdGF0aWMgdm9pZCBrM19tNF9ycHJvY19t Ym94X2NhbGxiYWNrKHN0cnVjdCBtYm94X2NsaWVudCAqY2xpZW50LAo+ID4gdm9pZCAqZGF0YSkK PiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgIHN0cnVjdCBrM19tNF9ycHJvYyAqa3Byb2MgPSBjb250 YWluZXJfb2YoY2xpZW50LCBzdHJ1Y3QKPiA+IGszX200X3Jwcm9jLAo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjbGllbnQpOwo+ID4gK8KgwqDCoMKgwqDCoCBz dHJ1Y3QgZGV2aWNlICpkZXYgPSBrcHJvYy0+cnByb2MtPmRldi5wYXJlbnQ7Cj4gPiArwqDCoMKg wqDCoMKgIGNvbnN0IGNoYXIgKm5hbWUgPSBrcHJvYy0+cnByb2MtPm5hbWU7Cj4gPiArwqDCoMKg wqDCoMKgIHUzMiBtc2cgPSBvbWFwX21ib3hfbWVzc2FnZShkYXRhKTsKPiA+ICsKPiA+ICvCoMKg wqDCoMKgwqAgZGV2X2RiZyhkZXYsICJtYm94IG1zZzogMHgleFxuIiwgbXNnKTsKPiA+ICsKPiA+ ICvCoMKgwqDCoMKgwqAgc3dpdGNoIChtc2cpIHsKPiA+ICvCoMKgwqDCoMKgwqAgY2FzZSBSUF9N Qk9YX0NSQVNIOgo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyoKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiByZW1vdGVwcm9jIGRldGVjdGVkIGFuIGV4Y2Vw dGlvbiwgYnV0IGVycm9yCj4gPiByZWNvdmVyeSBpcyBub3QKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgKiBzdXBwb3J0ZWQuIFNvLCBqdXN0IGxvZyB0aGlzIGZvciBub3cKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGRldl9lcnIoZGV2LCAiSzMgTTQgcnByb2MgJXMgY3Jhc2hlZFxuIiwgbmFt ZSk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPiA+ICvCoMKgwqDC oMKgwqAgY2FzZSBSUF9NQk9YX0VDSE9fUkVQTFk6Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBkZXZfaW5mbyhkZXYsICJyZWNlaXZlZCBlY2hvIHJlcGx5IGZyb20gJXNcbiIsCj4g PiBuYW1lKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+ID4gK8Kg wqDCoMKgwqDCoCBkZWZhdWx0Ogo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyog c2lsZW50bHkgaGFuZGxlIGFsbCBvdGhlciB2YWxpZCBtZXNzYWdlcyAqLwo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKG1zZyA+PSBSUF9NQk9YX1JFQURZICYmIG1zZyA8IFJQ X01CT1hfRU5EX01TRykKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCByZXR1cm47Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAobXNn ID4ga3Byb2MtPnJwcm9jLT5tYXhfbm90aWZ5aWQpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZXZfZGJnKGRldiwgImRyb3BwaW5nIHVua25vd24g bWVzc2FnZQo+ID4gMHgleCIsIG1zZyk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgfQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogbXNnIGNvbnRhaW5zIHRo ZSBpbmRleCBvZiB0aGUgdHJpZ2dlcmVkIHZyaW5nICovCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBpZiAocnByb2NfdnFfaW50ZXJydXB0KGtwcm9jLT5ycHJvYywgbXNnKSA9PQo+ ID4gSVJRX05PTkUpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgZGV2X2RiZyhkZXYsICJubyBtZXNzYWdlIHdhcyBmb3VuZCBpbiB2cWlkCj4gPiAlZFxu IiwgbXNnKTsKPiA+ICvCoMKgwqDCoMKgwqAgfQo+ID4gK30KPiA+ICsKPiA+ICsvKgo+ID4gKyAq IEtpY2sgdGhlIHJlbW90ZSBwcm9jZXNzb3IgdG8gbm90aWZ5IGFib3V0IHBlbmRpbmcgdW5wcm9j ZXNzZWQKPiA+IG1lc3NhZ2VzLgo+ID4gKyAqIFRoZSB2cWlkIHVzYWdlIGlzIG5vdCB1c2VkIGFu ZCBpcyBpbmNvbnNlcXVlbnRpYWwsIGFzIHRoZSBraWNrCj4gPiBpcyBwZXJmb3JtZWQKPiA+ICsg KiB0aHJvdWdoIGEgc2ltdWxhdGVkIEdQSU8gKGEgYml0IGluIGFuIElQQyBpbnRlcnJ1cHQtdHJp Z2dlcmluZwo+ID4gcmVnaXN0ZXIpLAo+ID4gKyAqIHRoZSByZW1vdGUgcHJvY2Vzc29yIGlzIGV4 cGVjdGVkIHRvIHByb2Nlc3MgYm90aCBpdHMgVHggYW5kIFJ4Cj4gPiB2aXJ0cXVldWVzLgo+ID4g KyAqLwo+ID4gK3N0YXRpYyB2b2lkIGszX200X3Jwcm9jX2tpY2soc3RydWN0IHJwcm9jICpycHJv YywgaW50IHZxaWQpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoCBzdHJ1Y3QgazNfbTRfcnByb2Mg Kmtwcm9jID0gcnByb2MtPnByaXY7Cj4gPiArwqDCoMKgwqDCoMKgIHN0cnVjdCBkZXZpY2UgKmRl diA9IHJwcm9jLT5kZXYucGFyZW50Owo+ID4gK8KgwqDCoMKgwqDCoCBtYm94X21zZ190IG1zZyA9 IChtYm94X21zZ190KXZxaWQ7Cj4gPiArwqDCoMKgwqDCoMKgIGludCByZXQ7Cj4gPiArCj4gPiAr wqDCoMKgwqDCoMKgIC8qIHNlbmQgdGhlIGluZGV4IG9mIHRoZSB0cmlnZ2VyZWQgdmlydHF1ZXVl IGluIHRoZSBtYWlsYm94Cj4gPiBwYXlsb2FkICovCj4gPiArwqDCoMKgwqDCoMKgIHJldCA9IG1i b3hfc2VuZF9tZXNzYWdlKGtwcm9jLT5tYm94LCAodm9pZCAqKW1zZyk7Cj4gPiArwqDCoMKgwqDC oMKgIGlmIChyZXQgPCAwKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2X2Vy cihkZXYsICJmYWlsZWQgdG8gc2VuZCBtYWlsYm94IG1lc3NhZ2UsCj4gPiBzdGF0dXMgPSAlZFxu IiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQp Owo+ID4gK30KPiA+ICsKPiA+ICsvKiBQdXQgdGhlIE00IHByb2Nlc3NvciBpbnRvIHJlc2V0ICov Cj4gPiArc3RhdGljIGludCBrM19tNF9ycHJvY19yZXNldChzdHJ1Y3QgazNfbTRfcnByb2MgKmtw cm9jKQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqAgc3RydWN0IGRldmljZSAqZGV2ID0ga3Byb2Mt PmRldjsKPiA+ICvCoMKgwqDCoMKgwqAgaW50IHJldDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAg cmV0ID0gcmVzZXRfY29udHJvbF9hc3NlcnQoa3Byb2MtPnJlc2V0KTsKPiA+ICvCoMKgwqDCoMKg wqAgaWYgKHJldCkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2X2Vycihk ZXYsICJsb2NhbC1yZXNldCBhc3NlcnQgZmFpbGVkLCByZXQgPQo+ID4gJWRcbiIsIHJldCk7Cj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+ID4gK8KgwqDCoMKg wqDCoCB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIGlmIChrcHJvYy0+ZGF0YS0+dXNlc19scmVz ZXQpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+ID4gKwo+ ID4gK8KgwqDCoMKgwqDCoCByZXQgPSBrcHJvYy0+dGlfc2NpLT5vcHMuZGV2X29wcy5wdXRfZGV2 aWNlKGtwcm9jLT50aV9zY2ksCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBrcHJvYy0KPiA+ID50aV9zY2lfaWQpOwo+ID4gK8KgwqDCoMKgwqDCoCBpZiAo cmV0KSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKGRldiwgIm1v ZHVsZS1yZXNldCBhc3NlcnQgZmFpbGVkLCByZXQgPQo+ID4gJWRcbiIsIHJldCk7Cj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAocmVzZXRfY29udHJvbF9kZWFzc2VydChrcHJv Yy0+cmVzZXQpKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGRldl93YXJuKGRldiwgImxvY2FsLXJlc2V0IGRlYXNzZXJ0IGJhY2sKPiA+IGZhaWxlZFxu Iik7Cj4gPiArwqDCoMKgwqDCoMKgIH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgcmV0dXJuIHJl dDsKPiA+ICt9Cj4gPiArCj4gPiArLyogUmVsZWFzZSB0aGUgTTQgcHJvY2Vzc29yIGZyb20gcmVz ZXQgKi8KPiA+ICtzdGF0aWMgaW50IGszX200X3Jwcm9jX3JlbGVhc2Uoc3RydWN0IGszX200X3Jw cm9jICprcHJvYykKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgIHN0cnVjdCBkZXZpY2UgKmRldiA9 IGtwcm9jLT5kZXY7Cj4gPiArwqDCoMKgwqDCoMKgIGludCByZXQ7Cj4gPiArCj4gPiArwqDCoMKg wqDCoMKgIGlmIChrcHJvYy0+ZGF0YS0+dXNlc19scmVzZXQpCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBnb3RvIGxyZXNldDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgcmV0ID0g a3Byb2MtPnRpX3NjaS0+b3BzLmRldl9vcHMuZ2V0X2RldmljZShrcHJvYy0+dGlfc2NpLAo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAga3Byb2MtCj4gPiA+ dGlfc2NpX2lkKTsKPiA+ICvCoMKgwqDCoMKgwqAgaWYgKHJldCkgewo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgZGV2X2VycihkZXYsICJtb2R1bGUtcmVzZXQgZGVhc3NlcnQgZmFp bGVkLCByZXQgPQo+ID4gJWRcbiIsIHJldCk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCByZXR1cm4gcmV0Owo+ID4gK8KgwqDCoMKgwqDCoCB9Cj4gPiArCj4gPiArwqDCoMKgwqDC oMKgIGRldl9pbmZvKGRldiwgInJlbGVhc2VkIG00IHJlc2V0XG4iKTsKPiA+ICsKPiA+ICtscmVz ZXQ6Cj4gPiArwqDCoMKgwqDCoMKgIHJldCA9IHJlc2V0X2NvbnRyb2xfZGVhc3NlcnQoa3Byb2Mt PnJlc2V0KTsKPiA+ICvCoMKgwqDCoMKgwqAgaWYgKHJldCkgewo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgZGV2X2VycihkZXYsICJsb2NhbC1yZXNldCBkZWFzc2VydCBmYWlsZWQs IHJldCA9Cj4gPiAlZFxuIiwgcmV0KTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGlmIChrcHJvYy0+dGlfc2NpLT5vcHMuZGV2X29wcy5wdXRfZGV2aWNlKGtwcm9jLQo+ID4gPnRp X3NjaSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGtwcm9jLQo+ID4gPnRpX3NjaV9pZCkpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2X3dhcm4oZGV2LCAibW9kdWxlLXJlc2V0IGFz c2VydCBiYWNrCj4gPiBmYWlsZWRcbiIpOwo+ID4gK8KgwqDCoMKgwqDCoCB9Cj4gPiArCj4gPiAr wqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgazNf bTRfcnByb2NfcmVxdWVzdF9tYm94KHN0cnVjdCBycHJvYyAqcnByb2MpCj4gPiArewo+ID4gK8Kg wqDCoMKgwqDCoCBzdHJ1Y3QgazNfbTRfcnByb2MgKmtwcm9jID0gcnByb2MtPnByaXY7Cj4gPiAr wqDCoMKgwqDCoMKgIHN0cnVjdCBtYm94X2NsaWVudCAqY2xpZW50ID0gJmtwcm9jLT5jbGllbnQ7 Cj4gPiArwqDCoMKgwqDCoMKgIHN0cnVjdCBkZXZpY2UgKmRldiA9IGtwcm9jLT5kZXY7Cj4gPiAr wqDCoMKgwqDCoMKgIGludCByZXQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIGNsaWVudC0+ZGV2 ID0gZGV2Owo+ID4gK8KgwqDCoMKgwqDCoCBjbGllbnQtPnR4X2RvbmUgPSBOVUxMOwo+ID4gK8Kg wqDCoMKgwqDCoCBjbGllbnQtPnJ4X2NhbGxiYWNrID0gazNfbTRfcnByb2NfbWJveF9jYWxsYmFj azsKPiA+ICvCoMKgwqDCoMKgwqAgY2xpZW50LT50eF9ibG9jayA9IGZhbHNlOwo+ID4gK8KgwqDC oMKgwqDCoCBjbGllbnQtPmtub3dzX3R4ZG9uZSA9IGZhbHNlOwo+ID4gKwo+ID4gK8KgwqDCoMKg wqDCoCBrcHJvYy0+bWJveCA9IG1ib3hfcmVxdWVzdF9jaGFubmVsKGNsaWVudCwgMCk7Cj4gPiAr wqDCoMKgwqDCoMKgIGlmIChJU19FUlIoa3Byb2MtPm1ib3gpKSB7Cj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCByZXQgPSAtRUJVU1k7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBkZXZfZXJyKGRldiwgIm1ib3hfcmVxdWVzdF9jaGFubmVsIGZhaWxlZDogJWxkXG4i LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFBUUl9F UlIoa3Byb2MtPm1ib3gpKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVy biByZXQ7Cj4gPiArwqDCoMKgwqDCoMKgIH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgLyoKPiA+ ICvCoMKgwqDCoMKgwqDCoCAqIFBpbmcgdGhlIHJlbW90ZSBwcm9jZXNzb3IsIHRoaXMgaXMgb25s eSBmb3Igc2FuaXR5LXNha2UKPiA+IGZvciBub3c7Cj4gPiArwqDCoMKgwqDCoMKgwqAgKiB0aGVy ZSBpcyBubyBmdW5jdGlvbmFsIGVmZmVjdCB3aGF0c29ldmVyLgo+ID4gK8KgwqDCoMKgwqDCoMKg ICoKPiA+ICvCoMKgwqDCoMKgwqDCoCAqIE5vdGUgdGhhdCB0aGUgcmVwbHkgd2lsbCBfbm90XyBh cnJpdmUgaW1tZWRpYXRlbHk6IHRoaXMKPiA+IG1lc3NhZ2UKPiA+ICvCoMKgwqDCoMKgwqDCoCAq IHdpbGwgd2FpdCBpbiB0aGUgbWFpbGJveCBmaWZvIHVudGlsIHRoZSByZW1vdGUgcHJvY2Vzc29y Cj4gPiBpcyBib290ZWQuCj4gPiArwqDCoMKgwqDCoMKgwqAgKi8KPiA+ICvCoMKgwqDCoMKgwqAg cmV0ID0gbWJveF9zZW5kX21lc3NhZ2Uoa3Byb2MtPm1ib3gsICh2b2lkCj4gPiAqKVJQX01CT1hf RUNIT19SRVFVRVNUKTsKPiA+ICvCoMKgwqDCoMKgwqAgaWYgKHJldCA8IDApIHsKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRldl9lcnIoZGV2LCAibWJveF9zZW5kX21lc3NhZ2Ug ZmFpbGVkOiAlZFxuIiwKPiA+IHJldCk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBtYm94X2ZyZWVfY2hhbm5lbChrcHJvYy0+bWJveCk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+ID4gK8KgwqDCoMKgwqDCoCB9Cj4gPiArCj4gPiArwqDC oMKgwqDCoMKgIHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICsvKgo+ID4gKyAqIFRoZSBNNEYg Y29yZXMgaGF2ZSBhIGxvY2FsIHJlc2V0IHRoYXQgYWZmZWN0cyBvbmx5IHRoZSBDUFUsIGFuZAo+ ID4gYQo+ID4gKyAqIGdlbmVyaWMgbW9kdWxlIHJlc2V0IHRoYXQgcG93ZXJzIG9uIHRoZSBkZXZp Y2UgYW5kIGFsbG93cyB0aGUKPiA+IE00IGludGVybmFsCj4gPiArICogbWVtb3JpZXMgdG8gYmUg YWNjZXNzZWQgd2hpbGUgdGhlIGxvY2FsIHJlc2V0IGlzIGFzc2VydGVkLiBUaGlzCj4gPiBmdW5j dGlvbiBpcwo+ID4gKyAqIHVzZWQgdG8gcmVsZWFzZSB0aGUgZ2xvYmFsIHJlc2V0IG9uIE00RiB0 byBhbGxvdyBsb2FkaW5nIGludG8KPiA+IHRoZSBNNEYKPiA+ICsgKiBpbnRlcm5hbCBSQU1zLiBU aGUgLnByZXBhcmUoKSBvcHMgaXMgaW52b2tlZCBieSByZW1vdGVwcm9jIGNvcmUKPiA+IGJlZm9y ZSBhbnkKPiA+ICsgKiBmaXJtd2FyZSBsb2FkaW5nLCBhbmQgaXMgZm9sbG93ZWQgYnkgdGhlIC5z dGFydCgpIG9wcyBhZnRlcgo+ID4gbG9hZGluZyB0bwo+ID4gKyAqIGFjdHVhbGx5IGxldCB0aGUg TTRGIGNvcmUgcnVuLgo+ID4gKyAqLwo+ID4gK3N0YXRpYyBpbnQgazNfbTRfcnByb2NfcHJlcGFy ZShzdHJ1Y3QgcnByb2MgKnJwcm9jKQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqAgc3RydWN0IGsz X200X3Jwcm9jICprcHJvYyA9IHJwcm9jLT5wcml2Owo+ID4gK8KgwqDCoMKgwqDCoCBzdHJ1Y3Qg ZGV2aWNlICpkZXYgPSBrcHJvYy0+ZGV2Owo+ID4gK8KgwqDCoMKgwqDCoCBpbnQgcmV0Owo+ID4g Kwo+ID4gK8KgwqDCoMKgwqDCoCAvKiBJUEMtb25seSBtb2RlIGRvZXMgbm90IHJlcXVpcmUgdGhl IGNvcmUgdG8gYmUgcmVsZWFzZWQKPiA+IGZyb20gcmVzZXQgKi8KPiA+ICvCoMKgwqDCoMKgwqAg aWYgKGtwcm9jLT5pcGNfb25seSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJl dHVybiAwOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCByZXQgPSBrcHJvYy0+dGlfc2NpLT5vcHMu ZGV2X29wcy5nZXRfZGV2aWNlKGtwcm9jLT50aV9zY2ksCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBrcHJvYy0KPiA+ID50aV9zY2lfaWQpOwo+ID4gK8Kg wqDCoMKgwqDCoCBpZiAocmV0KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2 X2VycihkZXYsICJtb2R1bGUtcmVzZXQgZGVhc3NlcnQgZmFpbGVkLCBjYW5ub3QKPiA+IGVuYWJs ZSBpbnRlcm5hbCBSQU0gbG9hZGluZywgcmV0ID0gJWRcbiIsCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0KTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKg wqAgcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiArLyoKPiA+ICsgKiBUaGlzIGZ1bmN0aW9u IGltcGxlbWVudHMgdGhlIC51bnByZXBhcmUoKSBvcHMgYW5kIHBlcmZvcm1zIHRoZQo+ID4gY29t cGxpbWVudGFyeQo+ID4gKyAqIG9wZXJhdGlvbnMgdG8gdGhhdCBvZiB0aGUgLnByZXBhcmUoKSBv cHMuIFRoZSBmdW5jdGlvbiBpcyB1c2VkCj4gPiB0byBhc3NlcnQgdGhlCj4gPiArICogZ2xvYmFs IHJlc2V0IG9uIGFwcGxpY2FibGUgTTRGIGNvcmVzLiBUaGlzIGNvbXBsZXRlcyB0aGUgc2Vjb25k Cj4gPiBwb3J0aW9uIG9mCj4gPiArICogcG93ZXJpbmcgZG93biB0aGUgTTRGIGNvcmVzLiBUaGUg Y29yZXMgdGhlbXNlbHZlcyBhcmUgb25seQo+ID4gaGFsdGVkIGluIHRoZQo+ID4gKyAqIC5zdG9w KCkgY2FsbGJhY2sgdGhyb3VnaCB0aGUgbG9jYWwgcmVzZXQsIGFuZCB0aGUgLnVucHJlcGFyZSgp Cj4gPiBvcHMgaXMgaW52b2tlZAo+ID4gKyAqIGJ5IHRoZSByZW1vdGVwcm9jIGNvcmUgYWZ0ZXIg dGhlIHJlbW90ZXByb2MgaXMgc3RvcHBlZCB0bwo+ID4gYmFsYW5jZSB0aGUgZ2xvYmFsCj4gPiAr ICogcmVzZXQuCj4gPiArICovCj4gPiArc3RhdGljIGludCBrM19tNF9ycHJvY191bnByZXBhcmUo c3RydWN0IHJwcm9jICpycHJvYykKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgIHN0cnVjdCBrM19t NF9ycHJvYyAqa3Byb2MgPSBycHJvYy0+cHJpdjsKPiA+ICvCoMKgwqDCoMKgwqAgc3RydWN0IGRl dmljZSAqZGV2ID0ga3Byb2MtPmRldjsKPiA+ICvCoMKgwqDCoMKgwqAgaW50IHJldDsKPiA+ICsK PiA+ICvCoMKgwqDCoMKgwqAgLyogZG8gbm90IHB1dCBiYWNrIHRoZSBjb3JlcyBpbnRvIHJlc2V0 IGluIElQQy1vbmx5IG1vZGUgKi8KPiA+ICvCoMKgwqDCoMKgwqAgaWYgKGtwcm9jLT5pcGNfb25s eSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAwOwo+ID4gKwo+ID4g K8KgwqDCoMKgwqDCoCByZXQgPSBrcHJvYy0+dGlfc2NpLT5vcHMuZGV2X29wcy5wdXRfZGV2aWNl KGtwcm9jLT50aV9zY2ksCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBrcHJvYy0KPiA+ID50aV9zY2lfaWQpOwo+ID4gK8KgwqDCoMKgwqDCoCBpZiAocmV0 KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2X2VycihkZXYsICJtb2R1bGUt cmVzZXQgYXNzZXJ0IGZhaWxlZCwgcmV0ID0KPiA+ICVkXG4iLCByZXQpOwo+ID4gKwo+ID4gK8Kg wqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+ICsvKgo+ID4gKyAqIFBvd2Vy IHVwIHRoZSBNNEYgcmVtb3RlIHByb2Nlc3Nvci4KPiA+ICsgKgo+ID4gKyAqIFRoaXMgZnVuY3Rp b24gd2lsbCBiZSBpbnZva2VkIG9ubHkgYWZ0ZXIgdGhlIGZpcm13YXJlIGZvciB0aGlzCj4gPiBy cHJvYwo+ID4gKyAqIHdhcyBsb2FkZWQsIHBhcnNlZCBzdWNjZXNzZnVsbHksIGFuZCBhbGwgb2Yg aXRzIHJlc291cmNlCj4gPiByZXF1aXJlbWVudHMKPiA+ICsgKiB3ZXJlIG1ldC4KPiA+ICsgKi8K PiA+ICtzdGF0aWMgaW50IGszX200X3Jwcm9jX3N0YXJ0KHN0cnVjdCBycHJvYyAqcnByb2MpCj4g PiArewo+ID4gK8KgwqDCoMKgwqDCoCBzdHJ1Y3QgazNfbTRfcnByb2MgKmtwcm9jID0gcnByb2Mt PnByaXY7Cj4gPiArwqDCoMKgwqDCoMKgIHN0cnVjdCBkZXZpY2UgKmRldiA9IGtwcm9jLT5kZXY7 Cj4gPiArwqDCoMKgwqDCoMKgIHUzMiBib290X2FkZHI7Cj4gPiArwqDCoMKgwqDCoMKgIGludCBy ZXQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIGlmIChrcHJvYy0+aXBjX29ubHkpIHsKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRldl9lcnIoZGV2LCAiJXMgY2Fubm90IGJlIGlu dm9rZWQgaW4gSVBDLW9ubHkKPiA+IG1vZGVcbiIsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgX19mdW5jX18pOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4gPiArwqDCoMKgwqDCoMKgIH0KPiA+ICsKPiA+ ICvCoMKgwqDCoMKgwqAgcmV0ID0gazNfbTRfcnByb2NfcmVxdWVzdF9tYm94KHJwcm9jKTsKPiA+ ICvCoMKgwqDCoMKgwqAgaWYgKHJldCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHJldHVybiByZXQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIGJvb3RfYWRkciA9IHJwcm9jLT5i b290YWRkcjsKPiA+ICvCoMKgwqDCoMKgwqAgcmV0ID0gazNfbTRfcnByb2NfcmVsZWFzZShrcHJv Yyk7Cj4gPiArwqDCoMKgwqDCoMKgIGlmIChyZXQpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBnb3RvIHB1dF9tYm94Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCByZXR1cm4gMDsK PiA+ICsKPiA+ICtwdXRfbWJveDoKPiA+ICvCoMKgwqDCoMKgwqAgbWJveF9mcmVlX2NoYW5uZWwo a3Byb2MtPm1ib3gpOwo+ID4gK8KgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsK PiA+ICsvKgo+ID4gKyAqIFN0b3AgdGhlIE00IHJlbW90ZSBwcm9jZXNzb3IuCj4gPiArICoKPiA+ ICsgKiBUaGlzIGZ1bmN0aW9uIHB1dHMgdGhlIE00IHByb2Nlc3NvciBpbnRvIHJlc2V0LCBhbmQg ZmluaXNoZXMKPiA+IHByb2Nlc3NpbmcKPiA+ICsgKiBvZiBhbnkgcGVuZGluZyBtZXNzYWdlcy4K PiA+ICsgKi8KPiA+ICtzdGF0aWMgaW50IGszX200X3Jwcm9jX3N0b3Aoc3RydWN0IHJwcm9jICpy cHJvYykKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgIHN0cnVjdCBrM19tNF9ycHJvYyAqa3Byb2Mg PSBycHJvYy0+cHJpdjsKPiA+ICvCoMKgwqDCoMKgwqAgc3RydWN0IGRldmljZSAqZGV2ID0ga3By b2MtPmRldjsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgaWYgKGtwcm9jLT5pcGNfb25seSkgewo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2X2VycihkZXYsICIlcyBjYW5ub3Qg YmUgaW52b2tlZCBpbiBJUEMtb25seQo+ID4gbW9kZVxuIiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBfX2Z1bmNfXyk7Cj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPiA+ICvCoMKgwqDCoMKgwqAgfQo+ID4g Kwo+ID4gK8KgwqDCoMKgwqDCoCBtYm94X2ZyZWVfY2hhbm5lbChrcHJvYy0+bWJveCk7Cj4gPiAr Cj4gPiArwqDCoMKgwqDCoMKgIGszX200X3Jwcm9jX3Jlc2V0KGtwcm9jKTsKPiA+ICsKPiA+ICvC oMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gKy8qCj4gPiArICogQXR0YWNo IHRvIGEgcnVubmluZyBNNCByZW1vdGUgcHJvY2Vzc29yIChJUEMtb25seSBtb2RlKQo+ID4gKyAq Cj4gPiArICogVGhpcyBycHJvYyBhdHRhY2ggY2FsbGJhY2sgb25seSBuZWVkcyB0byByZXF1ZXN0 IHRoZSBtYWlsYm94LAo+ID4gdGhlIHJlbW90ZQo+ID4gKyAqIHByb2Nlc3NvciBpcyBhbHJlYWR5 IGJvb3RlZCwgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBpc3N1ZSBhbnkKPiA+IFRJLVNDSQo+ID4g KyAqIGNvbW1hbmRzIHRvIGJvb3QgdGhlIE00IGNvcmUuCj4gPiArICovCj4gPiArc3RhdGljIGlu dCBrM19tNF9ycHJvY19hdHRhY2goc3RydWN0IHJwcm9jICpycHJvYykKPiA+ICt7Cj4gPiArwqDC oMKgwqDCoMKgIHN0cnVjdCBrM19tNF9ycHJvYyAqa3Byb2MgPSBycHJvYy0+cHJpdjsKPiA+ICvC oMKgwqDCoMKgwqAgc3RydWN0IGRldmljZSAqZGV2ID0ga3Byb2MtPmRldjsKPiA+ICvCoMKgwqDC oMKgwqAgaW50IHJldDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgaWYgKCFrcHJvYy0+aXBjX29u bHkgfHwgcnByb2MtPnN0YXRlICE9IFJQUk9DX0RFVEFDSEVEKSB7Cj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKGRldiwgIk00IGlzIGV4cGVjdGVkIHRvIGJlIGluIElQ Qy1vbmx5IG1vZGUKPiA+IGFuZCBSUFJPQ19ERVRBQ0hFRCBzdGF0ZVxuIik7Cj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPiA+ICvCoMKgwqDCoMKgwqAg fQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCByZXQgPSBrM19tNF9ycHJvY19yZXF1ZXN0X21ib3go cnByb2MpOwo+ID4gK8KgwqDCoMKgwqDCoCBpZiAocmV0KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgZGV2X2Vycihk ZXYsICJNNCBpbml0aWFsaXplZCBpbiBJUEMtb25seSBtb2RlXG4iKTsKPiA+ICvCoMKgwqDCoMKg wqAgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gKy8qCj4gPiArICogRGV0YWNoIGZyb20gYSBy dW5uaW5nIE00IHJlbW90ZSBwcm9jZXNzb3IgKElQQy1vbmx5IG1vZGUpCj4gPiArICoKPiA+ICsg KiBUaGlzIHJwcm9jIGRldGFjaCBjYWxsYmFjayBwZXJmb3JtcyB0aGUgb3Bwb3NpdGUgb3BlcmF0 aW9uIHRvCj4gPiBhdHRhY2ggY2FsbGJhY2sKPiA+ICsgKiBhbmQgb25seSBuZWVkcyB0byByZWxl YXNlIHRoZSBtYWlsYm94LCB0aGUgTTQgY29yZSBpcyBub3QKPiA+IHN0b3BwZWQgYW5kIHdpbGwK PiA+ICsgKiBiZSBsZWZ0IHRvIGNvbnRpbnVlIHRvIHJ1biBpdHMgYm9vdGVkIGZpcm13YXJlLgo+ ID4gKyAqLwo+ID4gK3N0YXRpYyBpbnQgazNfbTRfcnByb2NfZGV0YWNoKHN0cnVjdCBycHJvYyAq cnByb2MpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoCBzdHJ1Y3QgazNfbTRfcnByb2MgKmtwcm9j ID0gcnByb2MtPnByaXY7Cj4gPiArwqDCoMKgwqDCoMKgIHN0cnVjdCBkZXZpY2UgKmRldiA9IGtw cm9jLT5kZXY7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIGlmICgha3Byb2MtPmlwY19vbmx5IHx8 IHJwcm9jLT5zdGF0ZSAhPSBSUFJPQ19BVFRBQ0hFRCkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgZGV2X2VycihkZXYsICJNNCBpcyBleHBlY3RlZCB0byBiZSBpbiBJUEMtb25s eSBtb2RlCj4gPiBhbmQgUlBST0NfQVRUQUNIRUQgc3RhdGVcbiIpOwo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4gPiArwqDCoMKgwqDCoMKgIH0KPiA+ ICsKPiA+ICvCoMKgwqDCoMKgwqAgbWJveF9mcmVlX2NoYW5uZWwoa3Byb2MtPm1ib3gpOwo+ID4g K8KgwqDCoMKgwqDCoCBkZXZfZXJyKGRldiwgIk00IGRlaW5pdGlhbGl6ZWQgaW4gSVBDLW9ubHkg bW9kZVxuIik7Cj4gPiArwqDCoMKgwqDCoMKgIHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICsv Kgo+ID4gKyAqIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgLmdldF9sb2FkZWRfcnNjX3Rh YmxlKCkgY2FsbGJhY2sKPiA+IGFuZCBpcyB1c2VkCj4gPiArICogdG8gcHJvdmlkZSB0aGUgcmVz b3VyY2UgdGFibGUgZm9yIGEgYm9vdGVkIE00IGluIElQQy1vbmx5IG1vZGUuCj4gPiBUaGUgSzMg TTQKPiA+ICsgKiBmaXJtd2FyZXMgZm9sbG93IGEgZGVzaWduLWJ5LWNvbnRyYWN0IGFwcHJvYWNo IGFuZCBhcmUgZXhwZWN0ZWQKPiA+IHRvIGhhdmUgdGhlCj4gPiArICogcmVzb3VyY2UgdGFibGUg YXQgdGhlIGJhc2Ugb2YgdGhlIEREUiByZWdpb24gcmVzZXJ2ZWQgZm9yCj4gPiBmaXJtd2FyZSB1 c2FnZS4KPiA+ICsgKiBUaGlzIHByb3ZpZGVzIGZsZXhpYmlsaXR5IGZvciB0aGUgcmVtb3RlIHBy b2Nlc3NvciB0byBiZSBib290ZWQKPiA+IGJ5IGRpZmZlcmVudAo+ID4gKyAqIGJvb3Rsb2FkZXJz IHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSB0aGUgYWJpbGl0eSB0byBwdWJsaXNoIHRoZQo+ID4g cmVzb3VyY2UgdGFibGUKPiA+ICsgKiBhZGRyZXNzIGFuZCBzaXplIHRocm91Z2ggYSBEVCBwcm9w ZXJ0eS4KPiA+ICsgKi8KPiA+ICtzdGF0aWMgc3RydWN0IHJlc291cmNlX3RhYmxlICprM19tNF9n ZXRfbG9hZGVkX3JzY190YWJsZShzdHJ1Y3QKPiA+IHJwcm9jICpycHJvYywKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplX3QKPiA+ ICpyc2NfdGFibGVfc3opCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoCBzdHJ1Y3QgazNfbTRfcnBy b2MgKmtwcm9jID0gcnByb2MtPnByaXY7Cj4gPiArwqDCoMKgwqDCoMKgIHN0cnVjdCBkZXZpY2Ug KmRldiA9IGtwcm9jLT5kZXY7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIGlmICgha3Byb2MtPnJt ZW1bMF0uY3B1X2FkZHIpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRldl9l cnIoZGV2LCAibWVtb3J5LXJlZ2lvbiAjMSBkb2VzIG5vdCBleGlzdCwKPiA+IGxvYWRlZCByc2Mg dGFibGUgY2FuJ3QgYmUgZm91bmQiKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ID4gK8KgwqDCoMKgwqDCoCB9Cj4gPiArCj4gPiAr wqDCoMKgwqDCoMKgIC8qCj4gPiArwqDCoMKgwqDCoMKgwqAgKiBOT1RFOiBUaGUgcmVzb3VyY2Ug dGFibGUgc2l6ZSBpcyBjdXJyZW50bHkgaGFyZC1jb2RlZCB0bwo+ID4gYSBtYXhpbXVtCj4gPiAr wqDCoMKgwqDCoMKgwqAgKiBvZiAyNTYgYnl0ZXMuIFRoZSBtb3N0IGNvbW1vbiByZXNvdXJjZSB0 YWJsZSB1c2FnZSBmb3IKPiA+IEszIGZpcm13YXJlcwo+ID4gK8KgwqDCoMKgwqDCoMKgICogaXMg dG8gb25seSBoYXZlIHRoZSB2ZGV2IHJlc291cmNlIGVudHJ5IGFuZCBhbiBvcHRpb25hbAo+ID4g dHJhY2UgZW50cnkuCj4gPiArwqDCoMKgwqDCoMKgwqAgKiBUaGUgZXhhY3Qgc2l6ZSBjb3VsZCBi ZSBjb21wdXRlZCBiYXNlZCBvbiByZXNvdXJjZSB0YWJsZQo+ID4gYWRkcmVzcywgYnV0Cj4gPiAr wqDCoMKgwqDCoMKgwqAgKiB0aGUgaGFyZC1jb2RlZCB2YWx1ZSBzdWZmaWNlcyB0byBzdXBwb3J0 IHRoZSBJUEMtb25seQo+ID4gbW9kZS4KPiA+ICvCoMKgwqDCoMKgwqDCoCAqLwo+ID4gK8KgwqDC oMKgwqDCoCAqcnNjX3RhYmxlX3N6ID0gMjU2Owo+ID4gK8KgwqDCoMKgwqDCoCByZXR1cm4gKHN0 cnVjdCByZXNvdXJjZV90YWJsZSAqKWtwcm9jLT5ybWVtWzBdLmNwdV9hZGRyOwo+ID4gK30KPiA+ ICsKPiA+ICsvKgo+ID4gKyAqIEN1c3RvbSBmdW5jdGlvbiB0byB0cmFuc2xhdGUgYSBNNCBkZXZp Y2UgYWRkcmVzcyAoaW50ZXJuYWwgUkFNcwo+ID4gb25seSkgdG8gYQo+ID4gKyAqIGtlcm5lbCB2 aXJ0dWFsIGFkZHJlc3MuwqAgVGhlIE00cyBjYW4gYWNjZXNzIHRoZWlyIFJBTXMgYXQKPiA+IGVp dGhlciBhbiBpbnRlcm5hbAo+ID4gKyAqIGFkZHJlc3MgdmlzaWJsZSBvbmx5IGZyb20gYSBNNCwg b3IgYXQgdGhlIFNvQy1sZXZlbCBidXMKPiA+IGFkZHJlc3MuIEJvdGggdGhlc2UKPiA+ICsgKiBh ZGRyZXNzZXMgbmVlZCB0byBiZSBsb29rZWQgdGhyb3VnaCBmb3IgdHJhbnNsYXRpb24uIFRoZQo+ ID4gdHJhbnNsYXRlZCBhZGRyZXNzZXMKPiA+ICsgKiBjYW4gYmUgdXNlZCBlaXRoZXIgYnkgdGhl IHJlbW90ZXByb2MgY29yZSBmb3IgbG9hZGluZyAod2hlbgo+ID4gdXNpbmcga2VybmVsCj4gPiAr ICogcmVtb3RlcHJvYyBsb2FkZXIpLCBvciBieSBhbnkgcnBtc2cgYnVzIGRyaXZlcnMuCj4gPiAr ICovCj4gPiArc3RhdGljIHZvaWQgKmszX200X3Jwcm9jX2RhX3RvX3ZhKHN0cnVjdCBycHJvYyAq cnByb2MsIHU2NCBkYSwKPiA+IHNpemVfdCBsZW4sIGJvb2wgKmlzX2lvbWVtKQo+ID4gK3sKPiA+ ICvCoMKgwqDCoMKgwqAgc3RydWN0IGszX200X3Jwcm9jICprcHJvYyA9IHJwcm9jLT5wcml2Owo+ ID4gK8KgwqDCoMKgwqDCoCB2b2lkIF9faW9tZW0gKnZhID0gTlVMTDsKPiA+ICvCoMKgwqDCoMKg wqAgcGh5c19hZGRyX3QgYnVzX2FkZHI7Cj4gPiArwqDCoMKgwqDCoMKgIHUzMiBkZXZfYWRkciwg b2Zmc2V0Owo+ID4gK8KgwqDCoMKgwqDCoCBzaXplX3Qgc2l6ZTsKPiA+ICvCoMKgwqDCoMKgwqAg aW50IGk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIGlmIChsZW4gPT0gMCkKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBOVUxMOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDC oCBmb3IgKGkgPSAwOyBpIDwga3Byb2MtPm51bV9tZW1zOyBpKyspIHsKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGJ1c19hZGRyID0ga3Byb2MtPm1lbVtpXS5idXNfYWRkcjsKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRldl9hZGRyID0ga3Byb2MtPm1lbVtpXS5k ZXZfYWRkcjsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNpemUgPSBrcHJvYy0+ bWVtW2ldLnNpemU7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAo ZGEgPCBLRVlTVE9ORV9SUFJPQ19MT0NBTF9BRERSRVNTX01BU0spIHsKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBoYW5kbGUgTTQtdmlldyBhZGRy ZXNzZXMgKi8KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBpZiAoZGEgPj0gZGV2X2FkZHIgJiYKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICgoZGEgKyBsZW4pIDw9IChkZXZfYWRkciArIHNpemUp KSkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBvZmZzZXQgPSBkYSAtIGRldl9hZGRyOwo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2YSA9IGtwcm9j LT5tZW1baV0uY3B1X2FkZHIgKwo+ID4gb2Zmc2V0Owo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gKF9fZm9yY2Ug dm9pZCAqKXZhOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIH0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0gZWxzZSB7Cj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogaGFuZGxlIFNvQy12 aWV3IGFkZHJlc3NlcyAqLwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGlmIChkYSA+PSBidXNfYWRkciAmJgo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKGRhICsgbGVuKSA8PSAoYnVzX2FkZHIg KyBzaXplKSkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBvZmZzZXQgPSBkYSAtIGJ1c19hZGRyOwo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2YSA9 IGtwcm9jLT5tZW1baV0uY3B1X2FkZHIgKwo+ID4gb2Zmc2V0Owo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gKF9f Zm9yY2Ugdm9pZCAqKXZhOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIH0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPiA+ICvCoMKg wqDCoMKgwqAgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCAvKiBoYW5kbGUgc3RhdGljIEREUiBy ZXNlcnZlZCBtZW1vcnkgcmVnaW9ucyAqLwo+ID4gK8KgwqDCoMKgwqDCoCBmb3IgKGkgPSAwOyBp IDwga3Byb2MtPm51bV9ybWVtczsgaSsrKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBkZXZfYWRkciA9IGtwcm9jLT5ybWVtW2ldLmRldl9hZGRyOwo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgc2l6ZSA9IGtwcm9jLT5ybWVtW2ldLnNpemU7Cj4gPiArCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoZGEgPj0gZGV2X2FkZHIgJiYgKChkYSAr IGxlbikgPD0gKGRldl9hZGRyICsKPiA+IHNpemUpKSkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9mZnNldCA9IGRhIC0gZGV2X2FkZHI7Cj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdmEgPSBrcHJvYy0+ cm1lbVtpXS5jcHVfYWRkciArIG9mZnNldDsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gKF9fZm9yY2Ugdm9pZCAqKXZhOwo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+ID4gK8KgwqDCoMKgwqDCoCB9Cj4gPiArCj4gPiAr wqDCoMKgwqDCoMKgIHJldHVybiBOVUxMOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qg c3RydWN0IHJwcm9jX29wcyBrM19tNF9ycHJvY19vcHMgPSB7Cj4gPiArwqDCoMKgwqDCoMKgIC5z dGFydMKgwqDCoMKgwqDCoMKgwqDCoCA9IGszX200X3Jwcm9jX3N0YXJ0LAo+ID4gK8KgwqDCoMKg wqDCoCAuc3RvcMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gazNfbTRfcnByb2Nfc3RvcCwKPiA+ICvC oMKgwqDCoMKgwqAgLmF0dGFjaMKgwqDCoMKgwqDCoMKgwqAgPSBrM19tNF9ycHJvY19hdHRhY2gs Cj4gPiArwqDCoMKgwqDCoMKgIC5kZXRhY2jCoMKgwqDCoMKgwqDCoMKgID0gazNfbTRfcnByb2Nf ZGV0YWNoLAo+ID4gK8KgwqDCoMKgwqDCoCAua2lja8KgwqDCoMKgwqDCoMKgwqDCoMKgID0gazNf bTRfcnByb2Nfa2ljaywKPiA+ICvCoMKgwqDCoMKgwqAgLmRhX3RvX3ZhwqDCoMKgwqDCoMKgID0g azNfbTRfcnByb2NfZGFfdG9fdmEsCj4gPiArwqDCoMKgwqDCoMKgIC5nZXRfbG9hZGVkX3JzY190 YWJsZSA9IGszX200X2dldF9sb2FkZWRfcnNjX3RhYmxlLAo+ID4gK307Cj4gPiArCj4gPiArc3Rh dGljIGludCBrM19tNF9ycHJvY19vZl9nZXRfbWVtb3JpZXMoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZQo+ID4gKnBkZXYsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGszX200X3Jwcm9jICpr cHJvYykKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgIGNvbnN0IHN0cnVjdCBrM19tNF9kZXZfZGF0 YSAqZGF0YSA9IGtwcm9jLT5kYXRhOwo+ID4gK8KgwqDCoMKgwqDCoCBzdHJ1Y3QgZGV2aWNlICpk ZXYgPSAmcGRldi0+ZGV2Owo+ID4gK8KgwqDCoMKgwqDCoCBzdHJ1Y3QgcmVzb3VyY2UgKnJlczsK PiA+ICvCoMKgwqDCoMKgwqAgaW50IG51bV9tZW1zID0gMDsKPiA+ICvCoMKgwqDCoMKgwqAgaW50 IGk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIG51bV9tZW1zID0ga3Byb2MtPmRhdGEtPm51bV9t ZW1zOwo+ID4gK8KgwqDCoMKgwqDCoCBrcHJvYy0+bWVtID0gZGV2bV9rY2FsbG9jKGtwcm9jLT5k ZXYsIG51bV9tZW1zLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZW9mKCprcHJvYy0+bWVtKSwgR0ZQX0tFUk5F TCk7Cj4gPiArwqDCoMKgwqDCoMKgIGlmICgha3Byb2MtPm1lbSkKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PTUVNOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCBm b3IgKGkgPSAwOyBpIDwgbnVtX21lbXM7IGkrKykgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LAo+ID4gSU9S RVNPVVJDRV9NRU0sCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZGF0YS0KPiA+ID5tZW1zW2ldLm5hbWUpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaWYgKCFyZXMpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBkZXZfZXJyKGRldiwgImZvdW5kIG5vIG1lbW9yeSByZXNvdXJjZSBmb3IKPiA+ ICVzXG4iLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBkYXRhLT5tZW1zW2ldLm5hbWUpOwo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgaWYgKCFkZXZtX3JlcXVlc3RfbWVtX3JlZ2lvbihkZXYsIHJlcy0+c3RhcnQsCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVzb3VyY2Vfc2l6ZShyZXMpLAo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRldl9uYW1lKGRldikpKSB7Cj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2X2VycihkZXYsICJjb3VsZCBu b3QgcmVxdWVzdCAlcyByZWdpb24KPiA+IGZvciByZXNvdXJjZVxuIiwKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGF0YS0+ bWVtc1tpXS5uYW1lKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCByZXR1cm4gLUVCVVNZOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg fQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAga3Byb2MtPm1lbVtpXS5j cHVfYWRkciA9IGRldm1faW9yZW1hcF93YyhkZXYsIHJlcy0KPiA+ID5zdGFydCwKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+ID4gcmVz b3VyY2Vfc2l6ZShyZXMpKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICgh a3Byb2MtPm1lbVtpXS5jcHVfYWRkcikgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIG1hcCAlcyBtZW1vcnlc biIsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGRhdGEtPm1lbXNbaV0ubmFtZSk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9NRU07Cj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBr cHJvYy0+bWVtW2ldLmJ1c19hZGRyID0gcmVzLT5zdGFydDsKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGtwcm9jLT5tZW1baV0uZGV2X2FkZHIgPSBkYXRhLT5tZW1zW2ldLmRldl9h ZGRyOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAga3Byb2MtPm1lbVtpXS5zaXpl ID0gcmVzb3VyY2Vfc2l6ZShyZXMpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgZGV2X2RiZyhkZXYsICJtZW1vcnkgJThzOiBidXMgYWRkciAlcGEgc2l6ZSAweCV6eAo+ ID4gdmEgJXBLIGRhIDB4JXhcbiIsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgZGF0YS0+bWVtc1tpXS5uYW1lLCAma3Byb2MtCj4gPiA+bWVtW2ldLmJ1 c19hZGRyLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGtwcm9jLT5tZW1baV0uc2l6ZSwga3Byb2MtPm1lbVtpXS5jcHVfYWRkciwKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBrcHJvYy0+bWVtW2ldLmRldl9h ZGRyKTsKPiA+ICvCoMKgwqDCoMKgwqAgfQo+ID4gK8KgwqDCoMKgwqDCoCBrcHJvYy0+bnVtX21l bXMgPSBudW1fbWVtczsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4gPiArfQo+ ID4gKwo+ID4gK3N0YXRpYyBpbnQgazNfbTRfcmVzZXJ2ZWRfbWVtX2luaXQoc3RydWN0IGszX200 X3Jwcm9jICprcHJvYykKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgIHN0cnVjdCBkZXZpY2UgKmRl diA9IGtwcm9jLT5kZXY7Cj4gPiArwqDCoMKgwqDCoMKgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAg PSBkZXYtPm9mX25vZGU7Cj4gPiArwqDCoMKgwqDCoMKgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcm1l bV9ucDsKPiA+ICvCoMKgwqDCoMKgwqAgc3RydWN0IHJlc2VydmVkX21lbSAqcm1lbTsKPiA+ICvC oMKgwqDCoMKgwqAgaW50IG51bV9ybWVtczsKPiA+ICvCoMKgwqDCoMKgwqAgaW50IHJldCwgaTsK PiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgbnVtX3JtZW1zID0gb2ZfcHJvcGVydHlfY291bnRfZWxl bXNfb2Zfc2l6ZShucCwgIm1lbW9yeS0KPiA+IHJlZ2lvbiIsCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+ID4gc2l6ZW9mKHBoYW5kbGUpKTsKPiA+ICvC oMKgwqDCoMKgwqAgaWYgKG51bV9ybWVtcyA8PSAwKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBkZXZfZXJyKGRldiwgImRldmljZSBkb2VzIG5vdCByZXNlcnZlZCBtZW1vcnkK PiA+IHJlZ2lvbnMsIHJldCA9ICVkXG4iLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIG51bV9ybWVtcyk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPiA+ICvCoMKgwqDCoMKgwqAgfQo+ID4gK8KgwqDCoMKg wqDCoCBpZiAobnVtX3JtZW1zIDwgMikgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZGV2X2VycihkZXYsICJkZXZpY2UgbmVlZHMgYXQgbGVhc3QgdHdvIG1lbW9yeQo+ID4gcmVn aW9ucyB0byBiZSBkZWZpbmVkLCBudW0gPSAlZFxuIiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBudW1fcm1lbXMpOwo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4gPiArwqDCoMKgwqDCoMKgIH0KPiA+ICsK PiA+ICvCoMKgwqDCoMKgwqAgLyogdXNlIHJlc2VydmVkIG1lbW9yeSByZWdpb24gMCBmb3IgdnJp bmcgRE1BIGFsbG9jYXRpb25zCj4gPiAqLwo+ID4gK8KgwqDCoMKgwqDCoCByZXQgPSBvZl9yZXNl cnZlZF9tZW1fZGV2aWNlX2luaXRfYnlfaWR4KGRldiwgbnAsIDApOwo+ID4gK8KgwqDCoMKgwqDC oCBpZiAocmV0KSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKGRl diwgImRldmljZSBjYW5ub3QgaW5pdGlhbGl6ZSBETUEgcG9vbCwKPiA+IHJldCA9ICVkXG4iLAo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldCk7Cj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+ID4gK8KgwqDCoMKg wqDCoCB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIG51bV9ybWVtcy0tOwo+ID4gK8KgwqDCoMKg wqDCoCBrcHJvYy0+cm1lbSA9IGtjYWxsb2MobnVtX3JtZW1zLCBzaXplb2YoKmtwcm9jLT5ybWVt KSwKPiA+IEdGUF9LRVJORUwpOwo+ID4gK8KgwqDCoMKgwqDCoCBpZiAoIWtwcm9jLT5ybWVtKSB7 Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSAtRU5PTUVNOwo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byByZWxlYXNlX3JtZW07Cj4gPiArwqDCoMKg wqDCoMKgIH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgLyogdXNlIHJlbWFpbmluZyByZXNlcnZl ZCBtZW1vcnkgcmVnaW9ucyBmb3Igc3RhdGljCj4gPiBjYXJ2ZW91dHMgKi8KPiA+ICvCoMKgwqDC oMKgwqAgZm9yIChpID0gMDsgaSA8IG51bV9ybWVtczsgaSsrKSB7Cj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBybWVtX25wID0gb2ZfcGFyc2VfcGhhbmRsZShucCwgIm1lbW9yeS1y ZWdpb24iLCBpICsKPiA+IDEpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYg KCFybWVtX25wKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgcmV0ID0gLUVJTlZBTDsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBnb3RvIHVubWFwX3JtZW07Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBybWVtID0g b2ZfcmVzZXJ2ZWRfbWVtX2xvb2t1cChybWVtX25wKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGlmICghcm1lbSkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIG9mX25vZGVfcHV0KHJtZW1fbnApOwo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IC1FSU5WQUw7Cj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byB1bm1hcF9ybWVtOwo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgb2Zfbm9kZV9wdXQocm1lbV9ucCk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBrcHJvYy0+cm1lbVtpXS5idXNfYWRkciA9IHJtZW0tPmJhc2U7Cj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiA2NC1iaXQgYWRkcmVzcyByZWdpb25z IGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkCj4gPiAqLwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAga3Byb2MtPnJtZW1baV0uZGV2X2FkZHIgPSAodTMyKXJtZW0tPmJhc2U7Cj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBrcHJvYy0+cm1lbVtpXS5zaXplID0gcm1lbS0+ c2l6ZTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGtwcm9jLT5ybWVtW2ldLmNw dV9hZGRyID0gaW9yZW1hcF93YyhybWVtLT5iYXNlLAo+ID4gcm1lbS0+c2l6ZSk7Cj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoIWtwcm9jLT5ybWVtW2ldLmNwdV9hZGRyKSB7 Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2X2Vy cihkZXYsICJmYWlsZWQgdG8gbWFwIHJlc2VydmVkCj4gPiBtZW1vcnkjJWQgYXQgJXBhIG9mIHNp emUgJXBhXG4iLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBpICsgMSwgJnJtZW0tPmJhc2UsICZybWVtLT5zaXplKTsKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSAtRU5P TUVNOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdv dG8gdW5tYXBfcm1lbTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPiA+ICsK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRldl9kYmcoZGV2LCAicmVzZXJ2ZWQg bWVtb3J5JWQ6IGJ1cyBhZGRyICVwYSBzaXplCj4gPiAweCV6eCB2YSAlcEsgZGEgMHgleFxuIiwK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpICsgMSwg Jmtwcm9jLT5ybWVtW2ldLmJ1c19hZGRyLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGtwcm9jLT5ybWVtW2ldLnNpemUsIGtwcm9jLQo+ID4gPnJtZW1b aV0uY3B1X2FkZHIsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAga3Byb2MtPnJtZW1baV0uZGV2X2FkZHIpOwo+ID4gK8KgwqDCoMKgwqDCoCB9Cj4gPiAr wqDCoMKgwqDCoMKgIGtwcm9jLT5udW1fcm1lbXMgPSBudW1fcm1lbXM7Cj4gPiArCj4gPiArwqDC oMKgwqDCoMKgIHJldHVybiAwOwo+ID4gKwo+ID4gK3VubWFwX3JtZW06Cj4gPiArwqDCoMKgwqDC oMKgIGZvciAoaS0tOyBpID49IDA7IGktLSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGlvdW5tYXAoa3Byb2MtPnJtZW1baV0uY3B1X2FkZHIpOwo+ID4gK8KgwqDCoMKgwqDCoCBr ZnJlZShrcHJvYy0+cm1lbSk7Cj4gPiArcmVsZWFzZV9ybWVtOgo+ID4gK8KgwqDCoMKgwqDCoCBv Zl9yZXNlcnZlZF9tZW1fZGV2aWNlX3JlbGVhc2Uoa3Byb2MtPmRldik7Cj4gPiArwqDCoMKgwqDC oMKgIHJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIGszX200X3Jlc2Vy dmVkX21lbV9leGl0KHN0cnVjdCBrM19tNF9ycHJvYyAqa3Byb2MpCj4gPiArewo+ID4gK8KgwqDC oMKgwqDCoCBpbnQgaTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgZm9yIChpID0gMDsgaSA8IGtw cm9jLT5udW1fcm1lbXM7IGkrKykKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlv dW5tYXAoa3Byb2MtPnJtZW1baV0uY3B1X2FkZHIpOwo+ID4gK8KgwqDCoMKgwqDCoCBrZnJlZShr cHJvYy0+cm1lbSk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIG9mX3Jlc2VydmVkX21lbV9kZXZp Y2VfcmVsZWFzZShrcHJvYy0+ZGV2KTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHN0cnVjdCB0 aV9zY2lfcHJvYyAqazNfbTRfcnByb2Nfb2ZfZ2V0X3RzcChzdHJ1Y3QgZGV2aWNlCj4gPiAqZGV2 LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25zdCBzdHJ1 Y3QKPiA+IHRpX3NjaV9oYW5kbGUgKnNjaSkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgIHN0cnVj dCB0aV9zY2lfcHJvYyAqdHNwOwo+ID4gK8KgwqDCoMKgwqDCoCB1MzIgdGVtcFsyXTsKPiA+ICvC oMKgwqDCoMKgwqAgaW50IHJldDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgcmV0ID0gb2ZfcHJv cGVydHlfcmVhZF91MzJfYXJyYXkoZGV2LT5vZl9ub2RlLCAidGksc2NpLQo+ID4gcHJvYy1pZHMi LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0ZW1wLCAyKTsKPiA+ICvCoMKgwqDCoMKgwqAg aWYgKHJldCA8IDApCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gRVJS X1BUUihyZXQpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCB0c3AgPSBremFsbG9jKHNpemVvZigq dHNwKSwgR0ZQX0tFUk5FTCk7Cj4gPiArwqDCoMKgwqDCoMKgIGlmICghdHNwKQo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gPiArCj4g PiArwqDCoMKgwqDCoMKgIHRzcC0+ZGV2ID0gZGV2Owo+ID4gK8KgwqDCoMKgwqDCoCB0c3AtPnNj aSA9IHNjaTsKPiA+ICvCoMKgwqDCoMKgwqAgdHNwLT5vcHMgPSAmc2NpLT5vcHMucHJvY19vcHM7 Cj4gPiArwqDCoMKgwqDCoMKgIHRzcC0+cHJvY19pZCA9IHRlbXBbMF07Cj4gPiArwqDCoMKgwqDC oMKgIHRzcC0+aG9zdF9pZCA9IHRlbXBbMV07Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIHJldHVy biB0c3A7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgazNfbTRfcnByb2NfcHJvYmUoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgIHN0cnVj dCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4gPiArwqDCoMKgwqDCoMKgIHN0cnVjdCBkZXZp Y2Vfbm9kZSAqbnAgPSBkZXYtPm9mX25vZGU7Cj4gPiArwqDCoMKgwqDCoMKgIGNvbnN0IHN0cnVj dCBrM19tNF9kZXZfZGF0YSAqZGF0YTsKPiA+ICvCoMKgwqDCoMKgwqAgc3RydWN0IGszX200X3Jw cm9jICprcHJvYzsKPiA+ICvCoMKgwqDCoMKgwqAgc3RydWN0IHJwcm9jICpycHJvYzsKPiA+ICvC oMKgwqDCoMKgwqAgY29uc3QgY2hhciAqZndfbmFtZTsKPiA+ICvCoMKgwqDCoMKgwqAgYm9vbCBy X3N0YXRlID0gZmFsc2U7Cj4gPiArwqDCoMKgwqDCoMKgIGJvb2wgcF9zdGF0ZSA9IGZhbHNlOwo+ ID4gK8KgwqDCoMKgwqDCoCBpbnQgcmV0ID0gMDsKPiA+ICvCoMKgwqDCoMKgwqAgaW50IHJldDE7 Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIGRhdGEgPSBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEo ZGV2KTsKPiA+ICvCoMKgwqDCoMKgwqAgaWYgKCFkYXRhKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9ERVY7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIHJldCA9 IHJwcm9jX29mX3BhcnNlX2Zpcm13YXJlKGRldiwgMCwgJmZ3X25hbWUpOwo+ID4gK8KgwqDCoMKg wqDCoCBpZiAocmV0KSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZXZfZXJy KGRldiwgImZhaWxlZCB0byBwYXJzZSBmaXJtd2FyZS1uYW1lCj4gPiBwcm9wZXJ0eSwgcmV0ID0g JWRcbiIsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cmV0KTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4gPiAr wqDCoMKgwqDCoMKgIH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgcnByb2MgPSBycHJvY19hbGxv YyhkZXYsIGRldl9uYW1lKGRldiksICZrM19tNF9ycHJvY19vcHMsCj4gPiBmd19uYW1lLAo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6 ZW9mKCprcHJvYykpOwo+ID4gK8KgwqDCoMKgwqDCoCBpZiAoIXJwcm9jKQo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9NRU07Cj4gPiArCj4gPiArwqDCoMKgwqDC oMKgIHJwcm9jLT5oYXNfaW9tbXUgPSBmYWxzZTsKPiA+ICvCoMKgwqDCoMKgwqAgcnByb2MtPnJl Y292ZXJ5X2Rpc2FibGVkID0gdHJ1ZTsKPiA+ICvCoMKgwqDCoMKgwqAgaWYgKGRhdGEtPnVzZXNf bHJlc2V0KSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBycHJvYy0+b3BzLT5w cmVwYXJlID0gazNfbTRfcnByb2NfcHJlcGFyZTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHJwcm9jLT5vcHMtPnVucHJlcGFyZSA9IGszX200X3Jwcm9jX3VucHJlcGFyZTsKPiA+ ICvCoMKgwqDCoMKgwqAgfQo+ID4gK8KgwqDCoMKgwqDCoCBrcHJvYyA9IHJwcm9jLT5wcml2Owo+ ID4gK8KgwqDCoMKgwqDCoCBrcHJvYy0+cnByb2MgPSBycHJvYzsKPiA+ICvCoMKgwqDCoMKgwqAg a3Byb2MtPmRldiA9IGRldjsKPiA+ICvCoMKgwqDCoMKgwqAga3Byb2MtPmRhdGEgPSBkYXRhOwo+ ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCBrcHJvYy0+dGlfc2NpID0gdGlfc2NpX2dldF9ieV9waGFu ZGxlKG5wLCAidGksc2NpIik7Cj4gPiArwqDCoMKgwqDCoMKgIGlmIChJU19FUlIoa3Byb2MtPnRp X3NjaSkpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IFBUUl9FUlIo a3Byb2MtPnRpX3NjaSk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAocmV0 ICE9IC1FUFJPQkVfREVGRVIpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgdGktc2NpIGhhbmRsZSwK PiA+IHJldCA9ICVkXG4iLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgfQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAga3Byb2MtPnRpX3Nj aSA9IE5VTEw7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGZyZWVfcnBy b2M7Cj4gPiArwqDCoMKgwqDCoMKgIH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgcmV0ID0gb2Zf cHJvcGVydHlfcmVhZF91MzIobnAsICJ0aSxzY2ktZGV2LWlkIiwgJmtwcm9jLQo+ID4gPnRpX3Nj aV9pZCk7Cj4gPiArwqDCoMKgwqDCoMKgIGlmIChyZXQpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGRldl9lcnIoZGV2LCAibWlzc2luZyAndGksc2NpLWRldi1pZCcgcHJvcGVy dHlcbiIpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBwdXRfc2NpOwo+ ID4gK8KgwqDCoMKgwqDCoCB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIGtwcm9jLT5yZXNldCA9 IGRldm1fcmVzZXRfY29udHJvbF9nZXRfZXhjbHVzaXZlKGRldiwgTlVMTCk7Cj4gPiArwqDCoMKg wqDCoMKgIGlmIChJU19FUlIoa3Byb2MtPnJlc2V0KSkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcmV0ID0gUFRSX0VSUihrcHJvYy0+cmVzZXQpOwo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IHJlc2V0LCBzdGF0 dXMgPSAlZFxuIiwKPiA+IHJldCk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBn b3RvIHB1dF9zY2k7Cj4gPiArwqDCoMKgwqDCoMKgIH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAg a3Byb2MtPnRzcCA9IGszX200X3Jwcm9jX29mX2dldF90c3AoZGV2LCBrcHJvYy0+dGlfc2NpKTsK PiA+ICvCoMKgwqDCoMKgwqAgaWYgKElTX0VSUihrcHJvYy0+dHNwKSkgewo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2X2VycihkZXYsICJmYWlsZWQgdG8gY29uc3RydWN0IHRp LXNjaSBwcm9jCj4gPiBjb250cm9sLCByZXQgPSAlZFxuIiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcmV0ID0gUFRSX0VSUihrcHJvYy0+dHNwKTsKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGdvdG8gcHV0X3NjaTsKPiA+ICvCoMKgwqDCoMKgwqAgfQo+ID4gKwo+ ID4gK8KgwqDCoMKgwqDCoCByZXQgPSB0aV9zY2lfcHJvY19yZXF1ZXN0KGtwcm9jLT50c3ApOwo+ ID4gK8KgwqDCoMKgwqDCoCBpZiAocmV0IDwgMCkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgZGV2X2VycihkZXYsICJ0aV9zY2lfcHJvY19yZXF1ZXN0IGZhaWxlZCwgcmV0ID0K PiA+ICVkXG4iLCByZXQpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBm cmVlX3RzcDsKPiA+ICvCoMKgwqDCoMKgwqAgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCByZXQg PSBrM19tNF9ycHJvY19vZl9nZXRfbWVtb3JpZXMocGRldiwga3Byb2MpOwo+ID4gK8KgwqDCoMKg wqDCoCBpZiAocmV0KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byByZWxl YXNlX3RzcDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgcmV0ID0gazNfbTRfcmVzZXJ2ZWRfbWVt X2luaXQoa3Byb2MpOwo+ID4gK8KgwqDCoMKgwqDCoCBpZiAocmV0KSB7Cj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKGRldiwgInJlc2VydmVkIG1lbW9yeSBpbml0IGZh aWxlZCwgcmV0ID0KPiA+ICVkXG4iLCByZXQpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgZ290byByZWxlYXNlX3RzcDsKPiA+ICvCoMKgwqDCoMKgwqAgfQo+ID4gKwo+ID4gK8Kg wqDCoMKgwqDCoCByZXQgPSBrcHJvYy0+dGlfc2NpLT5vcHMuZGV2X29wcy5pc19vbihrcHJvYy0+ dGlfc2NpLAo+ID4ga3Byb2MtPnRpX3NjaV9pZCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgJnJfc3RhdGUsICZwX3N0YXRlKTsKPiA+ICvCoMKgwqDCoMKgwqAgaWYgKHJl dCkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2X2VycihkZXYsICJmYWls ZWQgdG8gZ2V0IGluaXRpYWwgc3RhdGUsIG1vZGUKPiA+IGNhbm5vdCBiZSBkZXRlcm1pbmVkLCBy ZXQgPSAlZFxuIiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCByZXQpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byByZWxlYXNl X21lbTsKPiA+ICvCoMKgwqDCoMKgwqAgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCAvKiBjb25m aWd1cmUgZGV2aWNlcyBmb3IgZWl0aGVyIHJlbW90ZXByb2Mgb3IgSVBDLW9ubHkgbW9kZQo+ID4g Ki8KPiA+ICvCoMKgwqDCoMKgwqAgaWYgKHBfc3RhdGUpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGRldl9lcnIoZGV2LCAiY29uZmlndXJlZCBNNCBmb3IgSVBDLW9ubHkgbW9k ZVxuIik7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBycHJvYy0+c3RhdGUgPSBS UFJPQ19ERVRBQ0hFRDsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGtwcm9jLT5p cGNfb25seSA9IHRydWU7Cj4gPiArwqDCoMKgwqDCoMKgIH0gZWxzZSB7Cj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKGRldiwgImNvbmZpZ3VyZWQgTTQgZm9yIHJlbW90 ZXByb2MKPiA+IG1vZGVcbiIpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyoK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBlbnN1cmUgdGhlIE00IGxvY2Fs IHJlc2V0IGlzIGFzc2VydGVkIHRvIGVuc3VyZQo+ID4gdGhlIGNvcmUKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBkb2Vzbid0IGV4ZWN1dGUgYm9ndXMgY29kZSBpbiAucHJl cGFyZSgpIHdoZW4KPiA+IHRoZSBtb2R1bGUKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgKiByZXNldCBpcyByZWxlYXNlZC4KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgKi8KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChkYXRhLT51c2Vz X2xyZXNldCkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHJldCA9IHJlc2V0X2NvbnRyb2xfc3RhdHVzKGtwcm9jLT5yZXNldCk7Cj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHJldCA8IDApIHsKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IHJlc2V0Cj4gPiBzdGF0dXMsIHN0YXR1 cyA9ICVkXG4iLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0KTsKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBy ZWxlYXNlX21lbTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB9IGVsc2UgaWYgKHJldCA9PSAwKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRldl93YXJuKGRldiwgImxvY2Fs IHJlc2V0IGlzCj4gPiBkZWFzc2VydGVkIGZvciBkZXZpY2VcbiIpOwo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBrM19tNF9y cHJvY19yZXNldChrcHJvYyk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgfQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+ID4gK8Kg wqDCoMKgwqDCoCB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIHJldCA9IHJwcm9jX2FkZChycHJv Yyk7Cj4gPiArwqDCoMKgwqDCoMKgIGlmIChyZXQpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFkZCByZWdpc3RlciBkZXZpY2Ugd2l0 aAo+ID4gcmVtb3RlcHJvYyBjb3JlLCBzdGF0dXMgPSAlZFxuIiwKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQpOwo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgZ290byByZWxlYXNlX21lbTsKPiA+ICvCoMKgwqDCoMKgwqAgfQo+ID4g Kwo+ID4gK8KgwqDCoMKgwqDCoCBwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBrcHJvYyk7Cj4g PiArCj4gPiArwqDCoMKgwqDCoMKgIHJldHVybiAwOwo+ID4gKwo+ID4gK3JlbGVhc2VfbWVtOgo+ ID4gK8KgwqDCoMKgwqDCoCBrM19tNF9yZXNlcnZlZF9tZW1fZXhpdChrcHJvYyk7Cj4gPiArcmVs ZWFzZV90c3A6Cj4gPiArwqDCoMKgwqDCoMKgIHJldDEgPSB0aV9zY2lfcHJvY19yZWxlYXNlKGtw cm9jLT50c3ApOwo+ID4gK8KgwqDCoMKgwqDCoCBpZiAocmV0MSkKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlbGVhc2UgcHJvYywgcmV0 ID0gJWRcbiIsCj4gPiByZXQxKTsKPiA+ICtmcmVlX3RzcDoKPiA+ICvCoMKgwqDCoMKgwqAga2Zy ZWUoa3Byb2MtPnRzcCk7Cj4gPiArcHV0X3NjaToKPiA+ICvCoMKgwqDCoMKgwqAgcmV0MSA9IHRp X3NjaV9wdXRfaGFuZGxlKGtwcm9jLT50aV9zY2kpOwo+ID4gK8KgwqDCoMKgwqDCoCBpZiAocmV0 MSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRldl9lcnIoZGV2LCAiZmFpbGVk IHRvIHB1dCB0aV9zY2kgaGFuZGxlLCByZXQgPQo+ID4gJWRcbiIsIHJldDEpOwo+ID4gK2ZyZWVf cnByb2M6Cj4gPiArwqDCoMKgwqDCoMKgIHJwcm9jX2ZyZWUocnByb2MpOwo+ID4gK8KgwqDCoMKg wqDCoCByZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGszX200X3Jwcm9j X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ID4gK3sKPiA+ICvCoMKgwqDC oMKgwqAgc3RydWN0IGszX200X3Jwcm9jICprcHJvYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBk ZXYpOwo+ID4gK8KgwqDCoMKgwqDCoCBzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Owo+ ID4gK8KgwqDCoMKgwqDCoCBpbnQgcmV0Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCBycHJvY19k ZWwoa3Byb2MtPnJwcm9jKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgcmV0ID0gdGlfc2NpX3By b2NfcmVsZWFzZShrcHJvYy0+dHNwKTsKPiA+ICvCoMKgwqDCoMKgwqAgaWYgKHJldCkKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlbGVh c2UgcHJvYywgcmV0ID0gJWRcbiIsCj4gPiByZXQpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCBr ZnJlZShrcHJvYy0+dHNwKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgcmV0ID0gdGlfc2NpX3B1 dF9oYW5kbGUoa3Byb2MtPnRpX3NjaSk7Cj4gPiArwqDCoMKgwqDCoMKgIGlmIChyZXQpCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKGRldiwgImZhaWxlZCB0byBwdXQg dGlfc2NpIGhhbmRsZSwgcmV0ID0KPiA+ICVkXG4iLCByZXQpOwo+ID4gKwo+ID4gK8KgwqDCoMKg wqDCoCBrM19tNF9yZXNlcnZlZF9tZW1fZXhpdChrcHJvYyk7Cj4gPiArwqDCoMKgwqDCoMKgIHJw cm9jX2ZyZWUoa3Byb2MtPnJwcm9jKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgcmV0dXJuIDA7 Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgazNfbTRfbWVtX2RhdGEgYW02 NF9tNF9tZW1zW10gPSB7Cj4gPiArwqDCoMKgwqDCoMKgIHsgLm5hbWUgPSAiaXJhbSIsIC5kZXZf YWRkciA9IDB4MCB9LAo+ID4gK8KgwqDCoMKgwqDCoCB7IC5uYW1lID0gImRyYW0iLCAuZGV2X2Fk ZHIgPSAweDMwMDAwIH0sCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGsz X200X2Rldl9kYXRhIGFtNjRfbTRfZGF0YSA9IHsKPiA+ICvCoMKgwqDCoMKgwqAgLm1lbXMgPSBh bTY0X200X21lbXMsCj4gPiArwqDCoMKgwqDCoMKgIC5udW1fbWVtcyA9IEFSUkFZX1NJWkUoYW02 NF9tNF9tZW1zKSwKPiA+ICvCoMKgwqDCoMKgwqAgLmJvb3RfYWxpZ25fYWRkciA9IFNaXzFLLAo+ ID4gK8KgwqDCoMKgwqDCoCAudXNlc19scmVzZXQgPSB0cnVlLAo+ID4gK307Cj4gPiArCj4gPiAr c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgazNfbTRfb2ZfbWF0Y2hbXSA9IHsKPiA+ ICvCoMKgwqDCoMKgwqAgeyAuY29tcGF0aWJsZSA9ICJ0aSxhbTY0LW00ZnNzIiwgLmRhdGEgPSAm YW02NF9tNF9kYXRhLCB9LAo+ID4gK8KgwqDCoMKgwqDCoCB7IC8qIHNlbnRpbmVsICovIH0sCj4g PiArfTsKPiA+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBrM19tNF9vZl9tYXRjaCk7Cj4gPiAr Cj4gPiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgazNfbTRfcnByb2NfZHJpdmVyID0g ewo+ID4gK8KgwqDCoMKgwqDCoCAucHJvYmXCoCA9IGszX200X3Jwcm9jX3Byb2JlLAo+ID4gK8Kg wqDCoMKgwqDCoCAucmVtb3ZlID0gazNfbTRfcnByb2NfcmVtb3ZlLAo+ID4gK8KgwqDCoMKgwqDC oCAuZHJpdmVyID0gewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLm5hbWUgPSAi azMtbTQtcnByb2MiLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLm9mX21hdGNo X3RhYmxlID0gazNfbTRfb2ZfbWF0Y2gsCj4gPiArwqDCoMKgwqDCoMKgIH0sCj4gPiArfTsKPiA+ ICsKPiA+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGszX200X3Jwcm9jX2RyaXZlcik7Cj4gPiAr Cj4gPiArTU9EVUxFX0FVVEhPUigiSGFyaSBOYWdhbGxhIDxobmFnYWxsYUB0aS5jb20+Iik7Cj4g PiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo+ID4gK01PRFVMRV9ERVNDUklQVElPTigiVEkg SzMgTTQgUmVtb3RlcHJvYyBkcml2ZXIiKTsKPiA+IC0tCj4gPiAyLjM5LjEKPiA+IAo=