From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id CFD89C34024 for ; Mon, 17 Feb 2020 17:20:58 +0000 (UTC) Received: from mm01.cs.columbia.edu (mm01.cs.columbia.edu [128.59.11.253]) by mail.kernel.org (Postfix) with ESMTP id 3BE26214D8 for ; Mon, 17 Feb 2020 17:20:58 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3BE26214D8 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kvmarm-bounces@lists.cs.columbia.edu Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 9125E4AF10; Mon, 17 Feb 2020 12:20:57 -0500 (EST) X-Virus-Scanned: at lists.cs.columbia.edu Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id N4uG6WiR7R+7; Mon, 17 Feb 2020 12:20:54 -0500 (EST) Received: from mm01.cs.columbia.edu (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id E8BE84AF4D; Mon, 17 Feb 2020 12:20:54 -0500 (EST) Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 584584AF33 for ; Mon, 17 Feb 2020 12:20:53 -0500 (EST) X-Virus-Scanned: at lists.cs.columbia.edu Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id MQO7PAhL+evI for ; Mon, 17 Feb 2020 12:20:50 -0500 (EST) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 8BF254AF16 for ; Mon, 17 Feb 2020 12:20:50 -0500 (EST) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 063601FB; Mon, 17 Feb 2020 09:20:50 -0800 (PST) Received: from [10.1.196.63] (e123195-lin.cambridge.arm.com [10.1.196.63]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id E088D3F68F; Mon, 17 Feb 2020 09:20:48 -0800 (PST) Subject: Re: [PATCH kvmtool v2] Add emulation for CFI compatible flash memory To: Andre Przywara , Will Deacon , Julien Thierry References: <20200207121941.259157-1-andre.przywara@arm.com> From: Alexandru Elisei Message-ID: <76e1a2fa-c849-c3ea-7436-6f0361954cf5@arm.com> Date: Mon, 17 Feb 2020 17:20:43 +0000 User-Agent: Mozilla/5.0 (X11; Linux aarch64; rv:60.0) Gecko/20100101 Thunderbird/60.9.0 MIME-Version: 1.0 In-Reply-To: <20200207121941.259157-1-andre.przywara@arm.com> Content-Language: en-US Cc: Raphael Gault , Sami Mujawar , linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu X-BeenThere: kvmarm@lists.cs.columbia.edu X-Mailman-Version: 2.1.14 Precedence: list List-Id: Where KVM/ARM decisions are made List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: kvmarm-bounces@lists.cs.columbia.edu Sender: kvmarm-bounces@lists.cs.columbia.edu SGksCgpJIGd1ZXNzIHRoZSBkZXZpY2UgaGFzbid0IGJlZW4gdGVzdGVkIHdpdGggTGludXguIFRo aXMgaXMgd2hhdCBJJ20gZ2V0dGluZyB3aGVuCnRyeWluZyB0byBib290IGEgTGludXggZ3Vlc3Qg dXNpbmcgdGhlIGNvbW1hbmQ6CgokIC4vbGt2bSBydW4gLWM0IC1tNDA5NiAtayAvcGF0aC90by9r ZXJuZWwgLWQgL3BhdGgvdG8vZGlzayAtcCByb290PSIvZGV2L3ZkYTIiIC1GCmZsYXNoLmltZwoK W8KgwqDCoCAwLjY1OTE2N10gcGh5c21hcC1mbGFzaCAyMDAwMDAwLmZsYXNoOiBwaHlzbWFwIHBs YXRmb3JtIGZsYXNoIGRldmljZTogW21lbQoweDAyMDAwMDAwLTB4MDI5ZmZmZmZdClvCoMKgwqAg MC42NjA0NDRdIE51bWJlciBvZiBlcmFzZSByZWdpb25zOiAxClvCoMKgwqAgMC42NjEwMzZdIFBy aW1hcnkgVmVuZG9yIENvbW1hbmQgU2V0OiAwMDAxIChJbnRlbC9TaGFycCBFeHRlbmRlZCkKW8Kg wqDCoCAwLjY2MTY4OF0gUHJpbWFyeSBBbGdvcml0aG0gVGFibGUgYXQgMDAzMQpbwqDCoMKgIDAu NjYyMTY4XSBBbHRlcm5hdGl2ZSBWZW5kb3IgQ29tbWFuZCBTZXQ6IDAwMDAgKE5vbmUpClvCoMKg wqAgMC42NjI3MTFdIE5vIEFsdGVybmF0ZSBBbGdvcml0aG0gVGFibGUKW8KgwqDCoCAwLjY2MzEy MF0gVmNjIE1pbmltdW06wqAgNC41IFYKW8KgwqDCoCAwLjY2MzQ1MF0gVmNjIE1heGltdW06wqAg NS41IFYKW8KgwqDCoCAwLjY2Mzc3OV0gTm8gVnBwIGxpbmUKW8KgwqDCoCAwLjY2NDAzOV0gVHlw aWNhbCBieXRlL3dvcmQgd3JpdGUgdGltZW91dDogMiDCtXMKW8KgwqDCoCAwLjY2NDU5MF0gTWF4 aW11bSBieXRlL3dvcmQgd3JpdGUgdGltZW91dDogMiDCtXMKW8KgwqDCoCAwLjY2NTI0MF0gVHlw aWNhbCBmdWxsIGJ1ZmZlciB3cml0ZSB0aW1lb3V0OiAyIMK1cwpbwqDCoMKgIDAuNjY1Nzc1XSBN YXhpbXVtIGZ1bGwgYnVmZmVyIHdyaXRlIHRpbWVvdXQ6IDIgwrVzClvCoMKgwqAgMC42NjYzNzNd IFR5cGljYWwgYmxvY2sgZXJhc2UgdGltZW91dDogMiBtcwpbwqDCoMKgIDAuNjY2ODI4XSBNYXhp bXVtIGJsb2NrIGVyYXNlIHRpbWVvdXQ6IDIgbXMKW8KgwqDCoCAwLjY2NzI4Ml0gQ2hpcCBlcmFz ZSBub3Qgc3VwcG9ydGVkClvCoMKgwqAgMC42Njc2NTldIERldmljZSBzaXplOiAweDgwMDAwMCBi eXRlcyAoOCBNaUIpClvCoMKgwqAgMC42NjgxMzddIEZsYXNoIERldmljZSBJbnRlcmZhY2UgZGVz Y3JpcHRpb246IDB4MDAwNgpbwqDCoMKgIDAuNjY4Njk3XcKgwqAgLSBVbmtub3duClvCoMKgwqAg MC42Njg5NjNdIE1heC4gYnl0ZXMgaW4gYnVmZmVyIHdyaXRlOiAweDQwClvCoMKgwqAgMC42Njk0 MDddIE51bWJlciBvZiBFcmFzZSBCbG9jayBSZWdpb25zOiAxClvCoMKgwqAgMC42Njk4NjVdwqDC oCBFcmFzZSBSZWdpb24gIzA6IEJsb2NrU2l6ZSAweDgwMDAgYnl0ZXMsIDE2MCBibG9ja3MKW8Kg wqDCoCAwLjY3MjI5OV0gMjAwMDAwMC5mbGFzaDogRm91bmQgMiB4MTYgZGV2aWNlcyBhdCAweDAg aW4gMzItYml0IGJhbmsuCk1hbnVmYWN0dXJlciBJRCAweDAwMDAwMCBDaGlwIElEIDB4MDBmZmZm ClvCoMKgwqAgMC42ODEzMjhdIE5PUiBjaGlwIHRvbyBsYXJnZSB0byBmaXQgaW4gbWFwcGluZy4g QXR0ZW1wdGluZyB0byBjb3BlLi4uClvCoMKgwqAgMC42ODIwNDZdIEludGVsL1NoYXJwIEV4dGVu ZGVkIFF1ZXJ5IFRhYmxlIGF0IDB4MDAzMQpbwqDCoMKgIDAuNjgyNjQ1XSBVc2luZyBidWZmZXIg d3JpdGUgbWV0aG9kClvCoMKgwqAgMC42ODMwMzFdIFN1bSBvZiByZWdpb25zIChhMDAwMDApICE9 IHRvdGFsIHNpemUgb2Ygc2V0IG9mIGludGVybGVhdmVkIGNoaXBzCigxMDAwMDAwKQpbwqDCoMKg IDAuNjgzODU0XSBnZW5fcHJvYmU6IE5vIHN1cHBvcnRlZCBWZW5kb3IgQ29tbWFuZCBTZXQgZm91 bmQKW8KgwqDCoCAwLjY4NDQ0MV0gcGh5c21hcC1mbGFzaCAyMDAwMDAwLmZsYXNoOiBtYXBfcHJv YmUgZmFpbGVkCgpJIGFsc28gZGVmaW5lZCBERUJVR19DRkkgaW4gZHJpdmVycy9tdGQvY2hpcHMv Y2ZpX3Byb2JlLmMuCgpUaGUgRmxhc2ggRGV2aWNlIEludGVyZmFjZSBkZXNjcmlwdGlvbiB0aGF0 IHdlIHByb3ZpZGUgaXMgd3JvbmcsIGl0IHNob3VsZCAweDA1LgpNb3JlIGRldGFpbHMgYmVsb3cu CgpPbiAyLzcvMjAgMTI6MTkgUE0sIEFuZHJlIFByenl3YXJhIHdyb3RlOgo+IEZyb206IFJhcGhh ZWwgR2F1bHQgPHJhcGhhZWwuZ2F1bHRAYXJtLmNvbT4KPgo+IFRoZSBFREsgSUkgVUVGSSBmaXJt d2FyZSBpbXBsZW1lbnRhdGlvbiByZXF1aXJlcyBzb21lIHN0b3JhZ2UgZm9yIHRoZSBFRkkKPiB2 YXJpYWJsZXMsIHdoaWNoIGlzIHR5cGljYWxseSBzb21lIGZsYXNoIHN0b3JhZ2UuCj4gU2luY2Ug dGhpcyBpcyBhbHJlYWR5IHN1cHBvcnRlZCBvbiB0aGUgRURLIElJIHNpZGUsIHdlIGFkZCBhIENG SSBmbGFzaAo+IGVtdWxhdGlvbiB0byBrdm10b29sLgo+IFRoaXMgaXMgYmFja2VkIGJ5IGEgZmls ZSwgc3BlY2lmaWVkIHZpYSB0aGUgLS1mbGFzaCBvciAtRiBjb21tYW5kIGxpbmUKPiBvcHRpb24u IEFueSBmbGFzaCB3cml0ZXMgZG9uZSBieSB0aGUgZ3Vlc3Qgd2lsbCBpbW1lZGlhdGVseSBiZSBy ZWZsZWN0ZWQKPiBpbnRvIHRoaXMgZmlsZSAoa3ZtdG9vbCBtbWFwJ3MgdGhlIGZpbGUpLgo+Cj4g VGhpcyBpbXBsZW1lbnRzIGEgQ0ZJIGZsYXNoIHVzaW5nIHRoZSAiSW50ZWwvU2hhcnAgZXh0ZW5k ZWQgY29tbWFuZAo+IHNldCIsIGFzIHNwZWNpZmllZCBpbjoKPiAtIEpFREVDIEpFU0Q2OC4wMQo+ IC0gSkVERUMgSkVQMTM3Qgo+IC0gSW50ZWwgQXBwbGljYXRpb24gTm90ZSA2NDYKPiBTb21lIGdh cHMgaW4gdGhvc2Ugc3BlY3MgaGF2ZSBiZWVuIGZpbGxlZCBieSBsb29raW5nIGF0IHJlYWwgZGV2 aWNlcyBhbmQKPiBvdGhlciBpbXBsZW1lbnRhdGlvbnMgKFFFTVUsIExpbnV4IGtlcm5lbCBkcml2 ZXIpLgo+Cj4gQXQgdGhlIG1vbWVudCB0aGlzIHJlbGllcyBvbiBEVCB0byBhZHZlcnRpc2UgdGhl IGJhc2UgYWRkcmVzcyBvZiB0aGUKPiBmbGFzaCBtZW1vcnkgKG1hcHBlZCBpbnRvIHRoZSBNTUlP IGFkZHJlc3Mgc3BhY2UpIGFuZCBpcyBvbmx5IGVuYWJsZWQKPiBmb3IgQVJNL0FSTTY0LiBUaGUg ZW11bGF0aW9uIGl0c2VsZiBpcyBhcmNoaXRlY3R1cmUgYWdub3N0aWMsIHRob3VnaC4KPgo+IFRo aXMgaXMgb25lIG1pc3NpbmcgcGllY2UgdG93YXJkIGEgd29ya2luZyBVRUZJIGJvb3Qgd2l0aCBr dm10b29sIG9uCj4gQVJNIGd1ZXN0cywgdGhlIG90aGVyIGlzIHRvIHByb3ZpZGUgd3JpdGFibGUg UENJIEJBUnMsIHdoaWNoIGlzIFdJUC4KPgo+IFNpZ25lZC1vZmYtYnk6IFJhcGhhZWwgR2F1bHQg PHJhcGhhZWwuZ2F1bHRAYXJtLmNvbT4KPiBbQW5kcmU6IHJld3JpdGluZyBhbmQgZml4aW5nXQo+ IFNpZ25lZC1vZmYtYnk6IEFuZHJlIFByenl3cmEgPGFuZHJlLnByenl3YXJhQGFybS5jb20+Cj4g LS0tCj4gSGksCj4KPiBhbiB1cGRhdGUgYWRkcmVzc2luZyBXaWxsJ3MgY29tbWVudHMuIEkgYWRk ZWQgY29hcnNlIGdyYWluZWQgbG9ja2luZwo+IHRvIHRoZSBNTUlPIGhhbmRsZXIsIHRvIHByZXZl bnQgY29uY3VycmVudCB2Q1BVIGFjY2Vzc2VzIGZyb20gbWVzc2luZyB1cAo+IHRoZSBpbnRlcm5h bCBDRkkgZmxhc2ggc3RhdGUgbWFjaGluZS4KPiBJIGFsc28gZm9sZGVkIHRoZSBhY3R1YWwgZmxh c2ggYXJyYXkgcmVhZCBhY2Nlc3MgaW50byB0aGUgTU1JTyBoYW5kbGVyCj4gYW5kIGZpeGVkIHRo ZSBvdGhlciBzbWFsbCBpc3N1ZXMuCj4KPiBDaGVlcnMsCj4gQW5kcmUKPgo+ICBNYWtlZmlsZSAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDYgKwo+ICBhcm0vaW5jbHVkZS9hcm0tY29tbW9u L2t2bS1hcmNoLmggfCAgIDMgKwo+ICBidWlsdGluLXJ1bi5jICAgICAgICAgICAgICAgICAgICAg fCAgIDIgKwo+ICBody9jZmlfZmxhc2guYyAgICAgICAgICAgICAgICAgICAgfCA1NDYgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCj4gIGluY2x1ZGUva3ZtL2t2bS1jb25maWcuaCAgICAg ICAgICB8ICAgMSArCj4gIGluY2x1ZGUva3ZtL3V0aWwuaCAgICAgICAgICAgICAgICB8ICAgNSAr Cj4gIDYgZmlsZXMgY2hhbmdlZCwgNTYzIGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGh3L2NmaV9mbGFzaC5jCj4KPiBkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQo+ IGluZGV4IDM4NjIxMTJjLi43ZWQ2ZmI1ZSAxMDA2NDQKPiAtLS0gYS9NYWtlZmlsZQo+ICsrKyBi L01ha2VmaWxlCj4gQEAgLTE3MCw2ICsxNzAsNyBAQCBpZmVxICgkKEFSQ0gpLCBhcm0pCj4gIAlD RkxBR1MJCSs9IC1tYXJjaD1hcm12Ny1hCj4gIAo+ICAJQVJDSF9XQU5UX0xJQkZEVCA6PSB5Cj4g KwlBUkNIX0hBU19GTEFTSF9NRU0gOj0geQo+ICBlbmRpZgo+ICAKPiAgIyBBUk02NAo+IEBAIC0x ODIsNiArMTgzLDcgQEAgaWZlcSAoJChBUkNIKSwgYXJtNjQpCj4gIAlBUkNIX0lOQ0xVREUJKz0g LUlhcm0vYWFyY2g2NC9pbmNsdWRlCj4gIAo+ICAJQVJDSF9XQU5UX0xJQkZEVCA6PSB5Cj4gKwlB UkNIX0hBU19GTEFTSF9NRU0gOj0geQo+ICBlbmRpZgo+ICAKPiAgaWZlcSAoJChBUkNIKSxtaXBz KQo+IEBAIC0yNjEsNiArMjYzLDEwIEBAIGlmZXEgKHksJChBUkNIX0hBU19GUkFNRUJVRkZFUikp Cj4gIAllbmRpZgo+ICBlbmRpZgo+ICAKPiAraWZlcSAoeSwkKEFSQ0hfSEFTX0ZMQVNIX01FTSkp Cj4gKwlPQkpTCSs9IGh3L2NmaV9mbGFzaC5vCj4gK2VuZGlmCj4gKwo+ICBpZmVxICgkKGNhbGwg dHJ5LWJ1aWxkLCQoU09VUkNFX1pMSUIpLCQoQ0ZMQUdTKSwkKExERkxBR1MpIC1seikseSkKPiAg CUNGTEFHU19EWU5PUFQJKz0gLURDT05GSUdfSEFTX1pMSUIKPiAgCUxJQlNfRFlOT1BUCSs9IC1s ego+IGRpZmYgLS1naXQgYS9hcm0vaW5jbHVkZS9hcm0tY29tbW9uL2t2bS1hcmNoLmggYi9hcm0v aW5jbHVkZS9hcm0tY29tbW9uL2t2bS1hcmNoLmgKPiBpbmRleCBiOWQ0ODZkNS4uMmJiMDg1ZjQg MTAwNjQ0Cj4gLS0tIGEvYXJtL2luY2x1ZGUvYXJtLWNvbW1vbi9rdm0tYXJjaC5oCj4gKysrIGIv YXJtL2luY2x1ZGUvYXJtLWNvbW1vbi9rdm0tYXJjaC5oCj4gQEAgLTIxLDYgKzIxLDkgQEAKPiAg I2RlZmluZSBBUk1fR0lDX0RJU1RfU0laRQkweDEwMDAwCj4gICNkZWZpbmUgQVJNX0dJQ19DUFVJ X1NJWkUJMHgyMDAwMAo+ICAKPiArI2RlZmluZSBBUk1fRkxBU0hfTU1JT19CQVNFCTB4MjAwMDAw MAkJLyogMzIgTUIgKi8KPiArI2RlZmluZSBLVk1fRkxBU0hfTU1JT19CQVNFCUFSTV9GTEFTSF9N TUlPX0JBU0UKPiArCj4gICNkZWZpbmUgQVJNX0lPUE9SVF9TSVpFCQkoQVJNX01NSU9fQVJFQSAt IEFSTV9JT1BPUlRfQVJFQSkKPiAgI2RlZmluZSBBUk1fVklSVElPX01NSU9fU0laRQkoQVJNX0FY SV9BUkVBIC0gKEFSTV9NTUlPX0FSRUEgKyBBUk1fR0lDX1NJWkUpKQo+ICAjZGVmaW5lIEFSTV9Q Q0lfQ0ZHX1NJWkUJKDFVTEwgPDwgMjQpCj4gZGlmZiAtLWdpdCBhL2J1aWx0aW4tcnVuLmMgYi9i dWlsdGluLXJ1bi5jCj4gaW5kZXggZjhkYzZjNzIuLmRmOGM2NzQxIDEwMDY0NAo+IC0tLSBhL2J1 aWx0aW4tcnVuLmMKPiArKysgYi9idWlsdGluLXJ1bi5jCj4gQEAgLTEzOCw2ICsxMzgsOCBAQCB2 b2lkIGt2bV9ydW5fc2V0X3dyYXBwZXJfc2FuZGJveCh2b2lkKQo+ICAJCQkiS2VybmVsIGNvbW1h bmQgbGluZSBhcmd1bWVudHMiKSwJCVwKPiAgCU9QVF9TVFJJTkcoJ2YnLCAiZmlybXdhcmUiLCAm KGNmZyktPmZpcm13YXJlX2ZpbGVuYW1lLCAiZmlybXdhcmUiLFwKPiAgCQkJIkZpcm13YXJlIGlt YWdlIHRvIGJvb3QgaW4gdmlydHVhbCBtYWNoaW5lIiksCVwKPiArCU9QVF9TVFJJTkcoJ0YnLCAi Zmxhc2giLCAmKGNmZyktPmZsYXNoX2ZpbGVuYW1lLCAiZmxhc2giLFwKPiArCQkJIkZsYXNoIGlt YWdlIHRvIHByZXNlbnQgdG8gdmlydHVhbCBtYWNoaW5lIiksCVwKPiAgCQkJCQkJCQkJXAo+ICAJ T1BUX0dST1VQKCJOZXR3b3JraW5nIG9wdGlvbnM6IiksCQkJCVwKPiAgCU9QVF9DQUxMQkFDS19E RUZBVUxUKCduJywgIm5ldHdvcmsiLCBOVUxMLCAibmV0d29yayBwYXJhbXMiLAlcCj4gZGlmZiAt LWdpdCBhL2h3L2NmaV9mbGFzaC5jIGIvaHcvY2ZpX2ZsYXNoLmMKPiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+IGluZGV4IDAwMDAwMDAwLi5kN2MwZTdlOAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9o dy9jZmlfZmxhc2guYwo+IEBAIC0wLDAgKzEsNTQ2IEBACj4gKyNpbmNsdWRlIDxzdGRib29sLmg+ Cj4gKyNpbmNsdWRlIDxzdGRsaWIuaD4KPiArI2luY2x1ZGUgPHN0cmluZy5oPgo+ICsjaW5jbHVk ZSA8bGludXgvYml0b3BzLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KPiArI2luY2x1ZGUg PGxpbnV4L3NpemVzLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+ICsKPiArI2luY2x1 ZGUgImt2bS9rdm0uaCIKPiArI2luY2x1ZGUgImt2bS9rdm0tYXJjaC5oIgo+ICsjaW5jbHVkZSAi a3ZtL2RldmljZXMuaCIKPiArI2luY2x1ZGUgImt2bS9mZHQuaCIKPiArI2luY2x1ZGUgImt2bS9t dXRleC5oIgo+ICsjaW5jbHVkZSAia3ZtL3V0aWwuaCIKPiArCj4gKy8qIFRoZSBFREsyIGRyaXZl ciBoYXJkY29kZXMgdHdvIDE2LWJpdCBjaGlwcyBvbiBhIDMyLWJpdCBidXMuICovCj4gKyNkZWZp bmUgQ0ZJX05SX0ZMQVNIX0NISVBTCQkJMgo+ICsKPiArLyogV2UgYWx3YXlzIGVtdWxhdGUgYSAz MiBiaXQgYnVzIHdpZHRoLiAqLwo+ICsjZGVmaW5lIENGSV9CVVNfV0lEVEgJCQkJNAo+ICsKPiAr LyogVGhlICplZmZlY3RpdmUqIHNpemUgb2YgYW4gZXJhc2UgYmxvY2sgKG92ZXIgYWxsIGNoaXBz KSAqLwo+ICsjZGVmaW5lIEZMQVNIX0JMT0NLX1NJWkUJCQlTWl82NEsKPiArCj4gKyNkZWZpbmUg UFJPR1JBTV9CVUZGX1NJWkVfQklUUwkJCTcKPiArI2RlZmluZSBQUk9HUkFNX0JVRkZfU0laRQkJ CSgxVSA8PCBQUk9HUkFNX0JVRkZfU0laRV9CSVRTKQo+ICsKPiArLyogQ0ZJIGNvbW1hbmRzICov Cj4gKyNkZWZpbmUgQ0ZJX0NNRF9MT0NLX0JMT0NLCQkJMHgwMQo+ICsjZGVmaW5lIENGSV9DTURf QUxURVJOQVRFX1dPUkRfUFJPR1JBTV9TRVRVUAkweDEwCj4gKyNkZWZpbmUgQ0ZJX0NNRF9CTE9D S19FUkFTRV9TRVRVUAkJMHgyMAo+ICsjZGVmaW5lIENGSV9DTURfV09SRF9QUk9HUkFNX1NFVFVQ CQkweDQwCj4gKyNkZWZpbmUgQ0ZJX0NNRF9DTEVBUl9TVEFUVVNfUkVHSVNURVIJCTB4NTAKPiAr I2RlZmluZSBDRklfQ01EX0xPQ0tfQkxPQ0tfU0VUVVAJCTB4NjAKPiArI2RlZmluZSBDRklfQ01E X1JFQURfU1RBVFVTX1JFR0lTVEVSCQkweDcwCj4gKyNkZWZpbmUgQ0ZJX0NNRF9SRUFEX0pFREVD CQkJMHg5MAo+ICsjZGVmaW5lIENGSV9DTURfUkVBRF9DRklfUVVFUlkJCQkweDk4Cj4gKyNkZWZp bmUgQ0ZJX0NNRF9CVUZGRVJFRF9QUk9HUkFNX0NPTkZJUk0JMHhkMAo+ICsjZGVmaW5lIENGSV9D TURfQkxPQ0tfRVJBU0VfQ09ORklSTQkJMHhkMAo+ICsjZGVmaW5lIENGSV9DTURfVU5MT0NLX0JM T0NLCQkJMHhkMAo+ICsjZGVmaW5lIENGSV9DTURfQlVGRkVSRURfUFJPR1JBTV9TRVRVUAkJMHhl OAo+ICsjZGVmaW5lIENGSV9DTURfUkVBRF9BUlJBWQkJCTB4ZmYKPiArCj4gKy8qCj4gKyAqIENG SSBxdWVyeSB0YWJsZSBjb250ZW50cywgYXMgZmFyIGFzIGl0IGlzIGNvbnN0YW50Lgo+ICsgKi8K PiArI2RlZmluZSBDRklfR0VPTV9PRkZTRVQJCQkJMHgyNwo+ICtzdGF0aWMgdTggY2ZpX3F1ZXJ5 X3RhYmxlW10gPSB7Cj4gKwkJLyogb2Zmc2V0IDB4MTA6IENGSSBxdWVyeSBpZGVudGlmaWNhdGlv biBzdHJpbmcgKi8KPiArCSdRJywgJ1InLCAnWScsCQkvKiBJRCBzdHJpbmcgKi8KPiArCTB4MDEs IDB4MDAsCQkvKiBwcmltYXJ5IGNvbW1hbmQgc2V0OiBJbnRlbC9TaGFycCBleHRlbmRlZCAqLwo+ ICsJMHgzMSwgMHgwMCwJCS8qIGFkZHJlc3Mgb2YgcHJpbWFyeSBleHRlbmRlZCBxdWVyeSB0YWJs ZSAqLwo+ICsJMHgwMCwgMHgwMCwJCS8qIGFsdGVybmF0aXZlIGNvbW1hbmQgc2V0OiB1bnVzZWQg Ki8KPiArCTB4MDAsIDB4MDAsCQkvKiBhZGRyZXNzIG9mIGFsdGVybmF0aXZlIGV4dGVuZGVkIHF1 ZXJ5IHRhYmxlKi8KPiArCQkvKiBvZmZzZXQgMHgxYjogc3lzdGVtIGludGVyZmFjZSBpbmZvcm1h dGlvbiAqLwo+ICsJMHg0NSwJCQkvKiBtaW5pbXVtIFZjYyB2b2x0YWdlOiA0LjVWICovCj4gKwkw eDU1LAkJCS8qIG1heGltdW0gVmNjIHZvbHRhZ2U6IDUuNVYgKi8KPiArCTB4MDAsCQkJLyogbWlu aW11bSBWcHAgdm9sdGFnZTogMC4wViAodW51c2VkKSAqLwo+ICsJMHgwMCwJCQkvKiBtYXhpbXVt IFZwcCB2b2x0YWdlOiAwLjBWICoodW51c2VkKSAqLwo+ICsJMHgwMSwJCQkvKiB0aW1lb3V0IGZv ciBzaW5nbGUgd29yZCBwcm9ncmFtOiAyIHVzICovCj4gKwkweDAxLAkJCS8qIHRpbWVvdXQgZm9y IG11bHRpLWJ5dGUgcHJvZ3JhbTogMiB1cyAqLwo+ICsJMHgwMSwJCQkvKiB0aW1lb3V0IGZvciBi bG9jayBlcmFzZTogMiBtcyAqLwo+ICsJMHgwMCwJCQkvKiB0aW1lb3V0IGZvciBmdWxsIGNoaXAg ZXJhc2U6IG5vdCBzdXBwb3J0ZWQgKi8KPiArCTB4MDAsCQkJLyogbWF4IHRpbWVvdXQgZm9yIHNp bmdsZSB3b3JkIHByb2dyYW06IDF4ICovCj4gKwkweDAwLAkJCS8qIG1heCB0aW1lb3V0IGZvciBt dWxpdC1ieXRlIHByb2dyYW06IDF4ICovCj4gKwkweDAwLAkJCS8qIG1heCB0aW1lb3V0IGZvciBi bG9jayBlcmFzZTogMXggKi8KPiArCTB4MDAsCQkJLyogbWF4IHRpbWVvdXQgZm9yIGNoaXAgZXJh c2U6IG5vdCBzdXBwb3J0ZWQgKi8KPiArCQkvKiBvZmZzZXQgMHgyNzogZmxhc2ggZ2VvbWV0cnkg aW5mb3JtYXRpb24gKi8KPiArCTB4MDAsCQkJLyogc2l6ZSBpbiBwb3dlci1vZi0yIGJ5dGVzLCBm aWxsZWQgbGF0ZXIgKi8KPiArCTB4MDYsIDB4MDAsCQkvKiBpbnRlcmZhY2UgZGVzY3JpcHRpb246 IDMyIGFuZCAxNiBiaXRzICovCgpJIGRvbid0IHRoaW5rIHRoaXMgaXMgY29ycmVjdC4gRnJvbSBJ bnRlbCBTdHJhdGFGbGFzaCBFbWJlZGRlZCBNZW1vcnkgKFAzMCkKRmFtaWx5LCB0YWJsZSAzNDoK CiIibiIgc3VjaCB0aGF0IG4rMSBzcGVjaWZpZXMgdGhlIGJpdCBmaWVsZCB0aGF0IHJlcHJlc2Vu dHMgdGhlIGZsYXNoIGRldmljZSB3aWR0aApjYXBhYmlsaXRpZXMgYXMgZGVzY3JpYmVkIGluIHRo ZSB0YWJsZSIuCgpJZiB5b3Ugd2FudCB0byBhZHZlcnRpc2UgMzIgYW5kIDE2IGJpdCB3cml0ZSBj YXBhYmlsaXRpZXMsIGl0IHNob3VsZCBiZSA1IGJlY2F1c2UKNSsxPTYuIFRoaXMgaXMgYWxzbyB0 aGUgdmFsdWUgdGhhdCB0aGUgTGludXgga2VybmVsIGNoZWNrcyBmb3IgKHNlZQppbmNsdWRlL2xp bnV4L210ZC9jZmkuaCwgZGVmaW5lIENGSV9JTlRFUkZBQ0VfWDE2X0JZX1gzMl9BU1lOQyIpLiA2 IGFjdHVhbGx5IG1lYW5zCjMyLCAxNiBhbmQgOCBiaXQgYWNjZXNzZXMuCgpUaGlzIGJlZ3MgYW5v dGhlciBxdWVzdGlvbjogd2h5IGRvIHdlIHN1cHBvcnQgYm90aCAxNiBhbmQgMzIgYml0IGFjY2Vz c2VzIGluc3RlYWQKb2Ygc3VwcG9ydGluZyBvbmx5IDMyIGJpdD8KCj4gKwlQUk9HUkFNX0JVRkZf U0laRV9CSVRTICsgMSAtIENGSV9OUl9GTEFTSF9DSElQUywgMHgwMCwKPiArCQkJCS8qIG51bWJl ciBvZiBtdWx0aS1ieXRlIHdyaXRlcyAqLwoKU2hvdWxkbid0IHRoZSBjb21tZW50IGJlIG1heGlt dW0gbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSB3cml0ZSBidWZmZXI/Cgo+ICsJMHgwMSwJCQkvKiBv bmUgZXJhc2UgYmxvY2sgcmVnaW9uICovCj4gKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiBu dW1iZXIgYW5kIHNpemUgb2YgZXJhc2UgYmxvY2tzLCBmaWxsZWQgKi8KPiArCQkvKiBvZmZzZXQg MHgzMTogSW50ZWwgcHJpbWFyeSBhbGdvcml0aG0gZXh0ZW5kZWQgcXVlcnkgdGFibGUgKi8KPiAr CSdQJywgJ1InLCAnSScsCj4gKwknMScsICcwJywJCS8qIHZlcnNpb24gMS4wICovCj4gKwkweGEw LCAweDAwLCAweDAwLCAweDAwLCAvKiBvcHRpb25hbCBmZWF0dXJlczogaW5zdGFudCBsb2NrICYg cG0tcmVhZCAqLwo+ICsJMHgwMCwJCQkvKiBubyBmdW5jdGlvbnMgYWZ0ZXIgc3VzcGVuZCAqLwo+ ICsJMHgwMSwgMHgwMCwJCS8qIG9ubHkgbG9jayBiaXQgc3VwcG9ydGVkICovCj4gKwkweDUwLAkJ CS8qIGJlc3QgVmNjIHZhbHVlOiA1LjBWICovCj4gKwkweDAwLAkJCS8qIGJlc3QgVnBwIHZhbHVl OiAwLjBWICh1bnVzZWQpICovCj4gKwkweDAxLAkJCS8qIG51bWJlciBvZiBwcm90ZWN0aW9uIHJl Z2lzdGVyIGZpZWxkcyAqLwo+ICsJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwJLyogcHJvdGVjdGlv biBmaWVsZCAxIGRlc2NyaXB0aW9uICovCj4gK307CgpBcyBhbiBhc2lkZSwgSSBmb3VuZCBpdCBp bXBvc3NpYmxlIHRvIHJldmlldyB0aGUgY2ZpX3F1ZXJ5X3RhYmxlIGFycmF5IGluIGl0cwpjdXJy ZW50IGZvcm0uIFRoaXMgaXMgaG93IEkgd3JvdGUgdGhlIGFycmF5IHNvIEkgY291bGQgcmVhZCBp dC4gSSBhbHNvIHRvb2sgdGhlCmxpYmVydHkgdG8gcmVtb3ZlIHRoZSBvZmZzZXQgd2hlbiBpbmRl eGluZyB0aGUgYXJyYXksIG1ha2luZyByZWFkX2NmaSBsZXNzIGVycm9yCnByb25lLCBpbiBteSBv cGluaW9uOgoKZGlmZiAtLWdpdCBhL2h3L2NmaV9mbGFzaC5jIGIvaHcvY2ZpX2ZsYXNoLmMKaW5k ZXggZDdjMGU3ZTgwZDY5Li42NWE5MGUyODhiZTggMTAwNjQ0Ci0tLSBhL2h3L2NmaV9mbGFzaC5j CisrKyBiL2h3L2NmaV9mbGFzaC5jCkBAIC00Niw0NSArNDYsNDMgQEAKwqAgKi8KwqAjZGVmaW5l IENGSV9HRU9NX09GRlNFVMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4MjcKwqBzdGF0aWMgdTggY2ZpX3F1ZXJ5X3RhYmxlW10g PSB7Ci3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIG9mZnNldCAweDEwOiBDRkkgcXVl cnkgaWRlbnRpZmljYXRpb24gc3RyaW5nICovCi3CoMKgwqDCoMKgwqAgJ1EnLCAnUicsICdZJyzC oMKgwqDCoMKgwqDCoMKgwqAgLyogSUQgc3RyaW5nICovCi3CoMKgwqDCoMKgwqAgMHgwMSwgMHgw MCzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogcHJpbWFyeSBjb21tYW5kIHNldDogSW50ZWwv U2hhcnAgZXh0ZW5kZWQgKi8KLcKgwqDCoMKgwqDCoCAweDMxLCAweDAwLMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAvKiBhZGRyZXNzIG9mIHByaW1hcnkgZXh0ZW5kZWQgcXVlcnkgdGFibGUgKi8K LcKgwqDCoMKgwqDCoCAweDAwLCAweDAwLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBhbHRl cm5hdGl2ZSBjb21tYW5kIHNldDogdW51c2VkICovCi3CoMKgwqDCoMKgwqAgMHgwMCwgMHgwMCzC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogYWRkcmVzcyBvZiBhbHRlcm5hdGl2ZSBleHRlbmRl ZCBxdWVyeSB0YWJsZSovCi3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIG9mZnNldCAw eDFiOiBzeXN0ZW0gaW50ZXJmYWNlIGluZm9ybWF0aW9uICovCi3CoMKgwqDCoMKgwqAgMHg0NSzC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogbWluaW11bSBWY2Mgdm9sdGFn ZTogNC41ViAqLwotwqDCoMKgwqDCoMKgIDB4NTUswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIC8qIG1heGltdW0gVmNjIHZvbHRhZ2U6IDUuNVYgKi8KLcKgwqDCoMKgwqDCoCAw eDAwLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBtaW5pbXVtIFZwcCB2 b2x0YWdlOiAwLjBWICh1bnVzZWQpICovCi3CoMKgwqDCoMKgwqAgMHgwMCzCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogbWF4aW11bSBWcHAgdm9sdGFnZTogMC4wViAqKHVu dXNlZCkgKi8KLcKgwqDCoMKgwqDCoCAweDAxLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAvKiB0aW1lb3V0IGZvciBzaW5nbGUgd29yZCBwcm9ncmFtOiAyIHVzICovCi3CoMKg wqDCoMKgwqAgMHgwMSzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogdGlt ZW91dCBmb3IgbXVsdGktYnl0ZSBwcm9ncmFtOiAyIHVzICovCi3CoMKgwqDCoMKgwqAgMHgwMSzC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogdGltZW91dCBmb3IgYmxvY2sg ZXJhc2U6IDIgbXMgKi8KLcKgwqDCoMKgwqDCoCAweDAwLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAvKiB0aW1lb3V0IGZvciBmdWxsIGNoaXAgZXJhc2U6IG5vdCBzdXBwb3J0 ZWQgKi8KLcKgwqDCoMKgwqDCoCAweDAwLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAvKiBtYXggdGltZW91dCBmb3Igc2luZ2xlIHdvcmQgcHJvZ3JhbTogMXggKi8KLcKgwqDC oMKgwqDCoCAweDAwLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBtYXgg dGltZW91dCBmb3IgbXVsaXQtYnl0ZSBwcm9ncmFtOiAxeCAqLwotwqDCoMKgwqDCoMKgIDB4MDAs wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIG1heCB0aW1lb3V0IGZvciBi bG9jayBlcmFzZTogMXggKi8KLcKgwqDCoMKgwqDCoCAweDAwLMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAvKiBtYXggdGltZW91dCBmb3IgY2hpcCBlcmFzZTogbm90IHN1cHBv cnRlZCAqLwotwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBvZmZzZXQgMHgyNzogZmxh c2ggZ2VvbWV0cnkgaW5mb3JtYXRpb24gKi8KLcKgwqDCoMKgwqDCoCAweDAwLMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBzaXplIGluIHBvd2VyLW9mLTIgYnl0ZXMsIGZp bGxlZCBsYXRlciAqLwotwqDCoMKgwqDCoMKgIDB4MDYsIDB4MDAswqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIC8qIGludGVyZmFjZSBkZXNjcmlwdGlvbjogMzIgYW5kIDE2IGJpdHMgKi8KLcKgwqDC oMKgwqDCoCBQUk9HUkFNX0JVRkZfU0laRV9CSVRTICsgMSAtIENGSV9OUl9GTEFTSF9DSElQUywg MHgwMCwKK8KgwqDCoMKgwqDCoCBbMHgxMF0gPSAnUScsICdSJywgJ1knLCAvKiBJRCBzdHJpbmcg Ki8KK8KgwqDCoMKgwqDCoCBbMHgxM10gPSAweDAxLCAweDAwLMKgwqDCoCAvKiBwcmltYXJ5IGNv bW1hbmQgc2V0OiBJbnRlbC9TaGFycCBleHRlbmRlZCAqLworwqDCoMKgwqDCoMKgIFsweDE1XSA9 IDB4MzEsIDB4MDAswqDCoMKgIC8qIGFkZHJlc3Mgb2YgcHJpbWFyeSBleHRlbmRlZCBxdWVyeSB0 YWJsZSAqLworwqDCoMKgwqDCoMKgIFsweDE3XSA9IDB4MDAsIDB4MDAswqDCoMKgIC8qIGFsdGVy bmF0aXZlIGNvbW1hbmQgc2V0OiB1bnVzZWQgKi8KK8KgwqDCoMKgwqDCoCBbMHgxOV0gPSAweDAw LCAweDAwLMKgwqDCoCAvKiBhZGRyZXNzIG9mIGFsdGVybmF0aXZlIGV4dGVuZGVkIHF1ZXJ5IHRh YmxlKi8KK8KgwqDCoMKgwqDCoCAvKiBTeXN0ZW0gaW50ZXJmYWNlIGluZm9ybWF0aW9uICovCivC oMKgwqDCoMKgwqAgWzB4MWJdID0gMHg0NSzCoMKgwqDCoMKgwqDCoMKgwqAgLyogbWluaW11bSBW Y2Mgdm9sdGFnZTogNC41ViAqLworwqDCoMKgwqDCoMKgIFsweDFjXSA9IDB4NTUswqDCoMKgwqDC oMKgwqDCoMKgIC8qIG1heGltdW0gVmNjIHZvbHRhZ2U6IDUuNVYgKi8KK8KgwqDCoMKgwqDCoCBb MHgxZF0gPSAweDAwLMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBtaW5pbXVtIFZwcCB2b2x0YWdlOiAw LjBWICh1bnVzZWQpICovCivCoMKgwqDCoMKgwqAgWzB4MWVdID0gMHgwMCzCoMKgwqDCoMKgwqDC oMKgwqAgLyogbWF4aW11bSBWcHAgdm9sdGFnZTogMC4wViAqKHVudXNlZCkgKi8KK8KgwqDCoMKg wqDCoCBbMHgxZl0gPSAweDAxLMKgwqDCoMKgwqDCoMKgwqDCoCAvKiB0aW1lb3V0IGZvciBzaW5n bGUgd29yZCBwcm9ncmFtOiAyIHVzICovCivCoMKgwqDCoMKgwqAgWzB4MjBdID0gMHgwMSzCoMKg wqDCoMKgwqDCoMKgwqAgLyogdGltZW91dCBmb3IgbXVsdGktYnl0ZSBwcm9ncmFtOiAyIHVzICov CivCoMKgwqDCoMKgwqAgWzB4MjFdID0gMHgwMSzCoMKgwqDCoMKgwqDCoMKgwqAgLyogdGltZW91 dCBmb3IgYmxvY2sgZXJhc2U6IDIgbXMgKi8KK8KgwqDCoMKgwqDCoCBbMHgyMl0gPSAweDAwLMKg wqDCoMKgwqDCoMKgwqDCoCAvKiB0aW1lb3V0IGZvciBmdWxsIGNoaXAgZXJhc2U6IG5vdCBzdXBw b3J0ZWQgKi8KK8KgwqDCoMKgwqDCoCBbMHgyM10gPSAweDAwLMKgwqDCoMKgwqDCoMKgwqDCoCAv KiBtYXggdGltZW91dCBmb3Igc2luZ2xlIHdvcmQgcHJvZ3JhbTogMXggKi8KK8KgwqDCoMKgwqDC oCBbMHgyNF0gPSAweDAwLMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBtYXggdGltZW91dCBmb3IgbXVs aXQtYnl0ZSBwcm9ncmFtOiAxeCAqLworwqDCoMKgwqDCoMKgIFsweDI1XSA9IDB4MDAswqDCoMKg wqDCoMKgwqDCoMKgIC8qIG1heCB0aW1lb3V0IGZvciBibG9jayBlcmFzZTogMXggKi8KK8KgwqDC oMKgwqDCoCBbMHgyNl0gPSAweDAwLMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBtYXggdGltZW91dCBm b3IgY2hpcCBlcmFzZTogbm90IHN1cHBvcnRlZCAqLworwqDCoMKgwqDCoMKgIC8qIEZsYXNoIGdl b21ldHJ5IGluZm9ybWF0aW9uICovCivCoMKgwqDCoMKgwqAgWzB4MjddID0gMHgwMCzCoMKgwqDC oMKgwqDCoMKgwqAgLyogc2l6ZSBpbiBwb3dlci1vZi0yIGJ5dGVzLCBmaWxsZWQgbGF0ZXIgKi8K K8KgwqDCoMKgwqDCoCBbMHgyOF0gPSAweDA2LCAweDAwLMKgwqDCoCAvKiBpbnRlcmZhY2UgZGVz Y3JpcHRpb246IDMyIGFuZCAxNiBiaXRzICovCivCoMKgwqDCoMKgwqAgWzB4MmFdID0gUFJPR1JB TV9CVUZGX1NJWkVfQklUUyArIDEgLSBDRklfTlJfRkxBU0hfQ0hJUFMsIDB4MDAsCsKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8q IG51bWJlciBvZiBtdWx0aS1ieXRlIHdyaXRlcyAqLwotwqDCoMKgwqDCoMKgIDB4MDEswqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIG9uZSBlcmFzZSBibG9jayByZWdpb24g Ki8KLcKgwqDCoMKgwqDCoCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiBudW1iZXIgYW5kIHNp emUgb2YgZXJhc2UgYmxvY2tzLCBmaWxsZWQgKi8KLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgLyogb2Zmc2V0IDB4MzE6IEludGVsIHByaW1hcnkgYWxnb3JpdGhtIGV4dGVuZGVkIHF1ZXJ5 IHRhYmxlICovCi3CoMKgwqDCoMKgwqAgJ1AnLCAnUicsICdJJywKLcKgwqDCoMKgwqDCoCAnMScs ICcwJyzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIHZlcnNpb24gMS4wICovCi3CoMKg wqDCoMKgwqAgMHhhMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogb3B0aW9uYWwgZmVhdHVyZXM6IGlu c3RhbnQgbG9jayAmIHBtLXJlYWQgKi8KLcKgwqDCoMKgwqDCoCAweDAwLMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBubyBmdW5jdGlvbnMgYWZ0ZXIgc3VzcGVuZCAqLwot wqDCoMKgwqDCoMKgIDB4MDEsIDB4MDAswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIG9ubHkg bG9jayBiaXQgc3VwcG9ydGVkICovCi3CoMKgwqDCoMKgwqAgMHg1MCzCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogYmVzdCBWY2MgdmFsdWU6IDUuMFYgKi8KLcKgwqDCoMKg wqDCoCAweDAwLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBiZXN0IFZw cCB2YWx1ZTogMC4wViAodW51c2VkKSAqLwotwqDCoMKgwqDCoMKgIDB4MDEswqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIG51bWJlciBvZiBwcm90ZWN0aW9uIHJlZ2lzdGVy IGZpZWxkcyAqLwotwqDCoMKgwqDCoMKgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIHByb3Rl Y3Rpb24gZmllbGQgMSBkZXNjcmlwdGlvbiAqLworwqDCoMKgwqDCoMKgIFsweDJjXSA9IDB4MDEs wqDCoMKgwqDCoMKgwqDCoMKgIC8qIG9uZSBlcmFzZSBibG9jayByZWdpb24gKi8KK8KgwqDCoMKg wqDCoCBbMHgyZF0gPSAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiBudW1iZXIgYW5kIHNpemUg b2YgZXJhc2UgYmxvY2tzLCBmaWxsZWQgKi8KK8KgwqDCoMKgwqDCoCAvKiBJbnRlbCBwcmltYXJ5 IGFsZ29yaXRobSBleHRlbmRlZCBxdWVyeSB0YWJsZSAqLworwqDCoMKgwqDCoMKgIFsweDMxXSA9 ICdQJywgJ1InLCAnSScsIC8qIElEIHN0cmluZyAqLworwqDCoMKgwqDCoMKgIFsweDM0XSA9ICcx JywgJzAnLMKgwqDCoMKgwqAgLyogdmVyc2lvbiAxLjAgKi8KK8KgwqDCoMKgwqDCoCBbMHgzNl0g PSAweGEwLCAweDAwLCAweDAwLCAweDAwLCAvKiBvcHRpb25hbCBmZWF0dXJlczogaW5zdGFudCBs b2NrICYKcG0tcmVhZCAqLworwqDCoMKgwqDCoMKgIFsweDQwXSA9IDB4MDAswqDCoMKgwqDCoMKg wqDCoMKgIC8qIG5vIGZ1bmN0aW9ucyBhZnRlciBzdXNwZW5kICovCivCoMKgwqDCoMKgwqAgWzB4 NDFdID0gMHgwMSwgMHgwMCzCoMKgwqAgLyogb25seSBsb2NrIGJpdCBzdXBwb3J0ZWQgKi8KLi4u c2tpcHBpbmcuLi4KK8KgwqDCoMKgwqDCoCBbMHgxMF0gPSAnUScsICdSJywgJ1knLCAvKiBJRCBz dHJpbmcgKi8KK8KgwqDCoMKgwqDCoCBbMHgxM10gPSAweDAxLCAweDAwLMKgwqDCoCAvKiBwcmlt YXJ5IGNvbW1hbmQgc2V0OiBJbnRlbC9TaGFycCBleHRlbmRlZCAqLworwqDCoMKgwqDCoMKgIFsw eDE1XSA9IDB4MzEsIDB4MDAswqDCoMKgIC8qIGFkZHJlc3Mgb2YgcHJpbWFyeSBleHRlbmRlZCBx dWVyeSB0YWJsZSAqLworwqDCoMKgwqDCoMKgIFsweDE3XSA9IDB4MDAsIDB4MDAswqDCoMKgIC8q IGFsdGVybmF0aXZlIGNvbW1hbmQgc2V0OiB1bnVzZWQgKi8KK8KgwqDCoMKgwqDCoCBbMHgxOV0g PSAweDAwLCAweDAwLMKgwqDCoCAvKiBhZGRyZXNzIG9mIGFsdGVybmF0aXZlIGV4dGVuZGVkIHF1 ZXJ5IHRhYmxlKi8KK8KgwqDCoMKgwqDCoCAvKiBTeXN0ZW0gaW50ZXJmYWNlIGluZm9ybWF0aW9u ICovCivCoMKgwqDCoMKgwqAgWzB4MWJdID0gMHg0NSzCoMKgwqDCoMKgwqDCoMKgwqAgLyogbWlu aW11bSBWY2Mgdm9sdGFnZTogNC41ViAqLworwqDCoMKgwqDCoMKgIFsweDFjXSA9IDB4NTUswqDC oMKgwqDCoMKgwqDCoMKgIC8qIG1heGltdW0gVmNjIHZvbHRhZ2U6IDUuNVYgKi8KK8KgwqDCoMKg wqDCoCBbMHgxZF0gPSAweDAwLMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBtaW5pbXVtIFZwcCB2b2x0 YWdlOiAwLjBWICh1bnVzZWQpICovCivCoMKgwqDCoMKgwqAgWzB4MWVdID0gMHgwMCzCoMKgwqDC oMKgwqDCoMKgwqAgLyogbWF4aW11bSBWcHAgdm9sdGFnZTogMC4wViAqKHVudXNlZCkgKi8KK8Kg wqDCoMKgwqDCoCBbMHgxZl0gPSAweDAxLMKgwqDCoMKgwqDCoMKgwqDCoCAvKiB0aW1lb3V0IGZv ciBzaW5nbGUgd29yZCBwcm9ncmFtOiAyIHVzICovCivCoMKgwqDCoMKgwqAgWzB4MjBdID0gMHgw MSzCoMKgwqDCoMKgwqDCoMKgwqAgLyogdGltZW91dCBmb3IgbXVsdGktYnl0ZSBwcm9ncmFtOiAy IHVzICovCivCoMKgwqDCoMKgwqAgWzB4MjFdID0gMHgwMSzCoMKgwqDCoMKgwqDCoMKgwqAgLyog dGltZW91dCBmb3IgYmxvY2sgZXJhc2U6IDIgbXMgKi8KK8KgwqDCoMKgwqDCoCBbMHgyMl0gPSAw eDAwLMKgwqDCoMKgwqDCoMKgwqDCoCAvKiB0aW1lb3V0IGZvciBmdWxsIGNoaXAgZXJhc2U6IG5v dCBzdXBwb3J0ZWQgKi8KK8KgwqDCoMKgwqDCoCBbMHgyM10gPSAweDAwLMKgwqDCoMKgwqDCoMKg wqDCoCAvKiBtYXggdGltZW91dCBmb3Igc2luZ2xlIHdvcmQgcHJvZ3JhbTogMXggKi8KK8KgwqDC oMKgwqDCoCBbMHgyNF0gPSAweDAwLMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBtYXggdGltZW91dCBm b3IgbXVsaXQtYnl0ZSBwcm9ncmFtOiAxeCAqLworwqDCoMKgwqDCoMKgIFsweDI1XSA9IDB4MDAs wqDCoMKgwqDCoMKgwqDCoMKgIC8qIG1heCB0aW1lb3V0IGZvciBibG9jayBlcmFzZTogMXggKi8K K8KgwqDCoMKgwqDCoCBbMHgyNl0gPSAweDAwLMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBtYXggdGlt ZW91dCBmb3IgY2hpcCBlcmFzZTogbm90IHN1cHBvcnRlZCAqLworwqDCoMKgwqDCoMKgIC8qIEZs YXNoIGdlb21ldHJ5IGluZm9ybWF0aW9uICovCivCoMKgwqDCoMKgwqAgWzB4MjddID0gMHgwMCzC oMKgwqDCoMKgwqDCoMKgwqAgLyogc2l6ZSBpbiBwb3dlci1vZi0yIGJ5dGVzLCBmaWxsZWQgbGF0 ZXIgKi8KK8KgwqDCoMKgwqDCoCBbMHgyOF0gPSAweDA2LCAweDAwLMKgwqDCoCAvKiBpbnRlcmZh Y2UgZGVzY3JpcHRpb246IDMyIGFuZCAxNiBiaXRzICovCivCoMKgwqDCoMKgwqAgWzB4MmFdID0g UFJPR1JBTV9CVUZGX1NJWkVfQklUUyArIDEgLSBDRklfTlJfRkxBU0hfQ0hJUFMsIDB4MDAsCsKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIC8qIG51bWJlciBvZiBtdWx0aS1ieXRlIHdyaXRlcyAqLwotwqDCoMKgwqDCoMKgIDB4MDEs wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIG9uZSBlcmFzZSBibG9jayBy ZWdpb24gKi8KLcKgwqDCoMKgwqDCoCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiBudW1iZXIg YW5kIHNpemUgb2YgZXJhc2UgYmxvY2tzLCBmaWxsZWQgKi8KLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgLyogb2Zmc2V0IDB4MzE6IEludGVsIHByaW1hcnkgYWxnb3JpdGhtIGV4dGVuZGVk IHF1ZXJ5IHRhYmxlICovCi3CoMKgwqDCoMKgwqAgJ1AnLCAnUicsICdJJywKLcKgwqDCoMKgwqDC oCAnMScsICcwJyzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIHZlcnNpb24gMS4wICov Ci3CoMKgwqDCoMKgwqAgMHhhMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogb3B0aW9uYWwgZmVhdHVy ZXM6IGluc3RhbnQgbG9jayAmIHBtLXJlYWQgKi8KLcKgwqDCoMKgwqDCoCAweDAwLMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBubyBmdW5jdGlvbnMgYWZ0ZXIgc3VzcGVu ZCAqLwotwqDCoMKgwqDCoMKgIDB4MDEsIDB4MDAswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8q IG9ubHkgbG9jayBiaXQgc3VwcG9ydGVkICovCi3CoMKgwqDCoMKgwqAgMHg1MCzCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogYmVzdCBWY2MgdmFsdWU6IDUuMFYgKi8KLcKg wqDCoMKgwqDCoCAweDAwLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBi ZXN0IFZwcCB2YWx1ZTogMC4wViAodW51c2VkKSAqLwotwqDCoMKgwqDCoMKgIDB4MDEswqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIG51bWJlciBvZiBwcm90ZWN0aW9uIHJl Z2lzdGVyIGZpZWxkcyAqLwotwqDCoMKgwqDCoMKgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8q IHByb3RlY3Rpb24gZmllbGQgMSBkZXNjcmlwdGlvbiAqLworwqDCoMKgwqDCoMKgIFsweDJjXSA9 IDB4MDEswqDCoMKgwqDCoMKgwqDCoMKgIC8qIG9uZSBlcmFzZSBibG9jayByZWdpb24gKi8KK8Kg wqDCoMKgwqDCoCBbMHgyZF0gPSAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiBudW1iZXIgYW5k IHNpemUgb2YgZXJhc2UgYmxvY2tzLCBmaWxsZWQgKi8KK8KgwqDCoMKgwqDCoCAvKiBJbnRlbCBw cmltYXJ5IGFsZ29yaXRobSBleHRlbmRlZCBxdWVyeSB0YWJsZSAqLworwqDCoMKgwqDCoMKgIFsw eDMxXSA9ICdQJywgJ1InLCAnSScsIC8qIElEIHN0cmluZyAqLworwqDCoMKgwqDCoMKgIFsweDM0 XSA9ICcxJywgJzAnLMKgwqDCoMKgwqAgLyogdmVyc2lvbiAxLjAgKi8KK8KgwqDCoMKgwqDCoCBb MHgzNl0gPSAweGEwLCAweDAwLCAweDAwLCAweDAwLCAvKiBvcHRpb25hbCBmZWF0dXJlczogaW5z dGFudCBsb2NrICYKcG0tcmVhZCAqLworwqDCoMKgwqDCoMKgIFsweDQwXSA9IDB4MDAswqDCoMKg wqDCoMKgwqDCoMKgIC8qIG5vIGZ1bmN0aW9ucyBhZnRlciBzdXNwZW5kICovCivCoMKgwqDCoMKg wqAgWzB4NDFdID0gMHgwMSwgMHgwMCzCoMKgwqAgLyogb25seSBsb2NrIGJpdCBzdXBwb3J0ZWQg Ki8KK8KgwqDCoMKgwqDCoCBbMHg0M10gPSAweDUwLMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBiZXN0 IFZjYyB2YWx1ZTogNS4wViAqLworwqDCoMKgwqDCoMKgIFsweDQzXSA9IDB4MDAswqDCoMKgwqDC oMKgwqDCoMKgIC8qIGJlc3QgVnBwIHZhbHVlOiAwLjBWICh1bnVzZWQpICovCivCoMKgwqDCoMKg wqAgWzB4NDRdID0gMHgwMSzCoMKgwqDCoMKgwqDCoMKgwqAgLyogbnVtYmVyIG9mIHByb3RlY3Rp b24gcmVnaXN0ZXIgZmllbGRzICovCivCoMKgwqDCoMKgwqAgWzB4NDVdID0gMHgwMCwgMHgwMCwg MHgwMCwgMHgwMCwvKiBwcm90ZWN0aW9uIGZpZWxkIDEgZGVzY3JpcHRpb24gKi8KwqB9OwrCoAot CsKgLyoKwqAgKiBUaG9zZSBzdGF0ZXMgcmVwcmVzZW50IGEgc3Vic2V0IG9mIHRoZSBDRkkgZmxh c2ggc3RhdGUgbWFjaGluZS4KwqAgKi8KQEAgLTE0MSwxMCArMTM5LDcgQEAgc3RhdGljIGludCBu cl9lcmFzZV9ibG9ja3Moc3RydWN0IGNmaV9mbGFzaF9kZXZpY2UgKnNmZGV2KQrCoCAqLwrCoHN0 YXRpYyB1OCByZWFkX2NmaShzdHJ1Y3QgY2ZpX2ZsYXNoX2RldmljZSAqc2ZkZXYsIHU2NCBhZGRy KQrCoHsKLcKgwqDCoMKgwqDCoCBpZiAoYWRkciA8IDB4MTApwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIC8qIENGSSBpbmZvcm1hdGlvbiBzdGFydHMgYXQgMHgxMCAqLwotwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKLQotwqDCoMKgwqDCoMKgIGlmIChhZGRyIC0g MHgxMCA+IHNpemVvZihjZmlfcXVlcnlfdGFibGUpKSB7CivCoMKgwqDCoMKgwqAgaWYgKGFkZHIg PiBzaXplb2YoY2ZpX3F1ZXJ5X3RhYmxlKSkgewrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcHJfZGVidWcoIkNGSSBxdWVyeSByZWFkIGFjY2VzcyBiZXlvbmQgdGhlIGVuZCBvZiB0YWJs ZSIpOwrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIDA7CsKgwqDCoMKgwqDC oMKgIH0KQEAgLTE2Myw3ICsxNTgsNyBAQCBzdGF0aWMgdTggcmVhZF9jZmkoc3RydWN0IGNmaV9m bGFzaF9kZXZpY2UgKnNmZGV2LCB1NjQgYWRkcikKwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHJldHVybiAoKEZMQVNIX0JMT0NLX1NJWkUgLyAyNTYgKSAvIENGSV9OUl9GTEFTSF9DSElQ UykgPj4gODsKwqDCoMKgwqDCoMKgwqAgfQrCoAotwqDCoMKgwqDCoMKgIHJldHVybiBjZmlfcXVl cnlfdGFibGVbYWRkciAtIDB4MTBdOworwqDCoMKgwqDCoMKgIHJldHVybiBjZmlfcXVlcnlfdGFi bGVbYWRkcl07CsKgfQrCoArCoHN0YXRpYyBib29sIGJsb2NrX2lzX2xvY2tlZChzdHJ1Y3QgY2Zp X2ZsYXNoX2RldmljZSAqc2ZkZXYsIHU2NCBhZGRyKQoKVGhhbmtzLApBbGV4Cj4gKwo+ICsKPiAr LyoKPiArICogVGhvc2Ugc3RhdGVzIHJlcHJlc2VudCBhIHN1YnNldCBvZiB0aGUgQ0ZJIGZsYXNo IHN0YXRlIG1hY2hpbmUuCj4gKyAqLwo+ICtlbnVtIGNmaV9mbGFzaF9zdGF0ZSB7Cj4gKwlSRUFE WSwKPiArCUxPQ0tfU0VUVVAsCj4gKwlXUF9TRVRVUCwKPiArCUJQX1NFVFVQLAo+ICsJQlBfTE9B RCwKPiArCUVSQVNFX1NFVFVQLAo+ICt9Owo+ICsKPiArLyoKPiArICogVGhlIGRldmljZSBjYW4g YmUgaW4gc2V2ZXJhbCAqKlJlYWQqKiBtb2Rlcy4KPiArICogV2UgZG9uJ3QgaW1wbGVtZW50IHRo ZSBhc3luY2hyb25vdXMgYnVyc3QgbW9kZS4KPiArICovCj4gK2VudW0gY2ZpX3JlYWRfbW9kZSB7 Cj4gKwlSRUFEX0FSUkFZLAo+ICsJUkVBRF9TVEFUVVMsCj4gKwlSRUFEX0RFVklDRV9JRCwKPiAr CVJFQURfUVVFUlksCj4gK307Cj4gKwo+ICtzdHJ1Y3QgY2ZpX2ZsYXNoX2RldmljZSB7Cj4gKwlz dHJ1Y3QgZGV2aWNlX2hlYWRlcglkZXZfaGRyOwo+ICsJLyogUHJvdGVjdHMgdGhlIENGSSBzdGF0 ZSBtYWNoaW5lIHZhcmlhYmxlcyBpbiB0aGlzIGRhdGEgc3RydWN0dXJlLiAqLwo+ICsJc3RydWN0 IG11dGV4CQltdXRleDsKPiArCXU2NAkJCWJhc2VfYWRkcjsKPiArCXUzMgkJCXNpemU7Cj4gKwo+ ICsJdm9pZAkJCSpmbGFzaF9tZW1vcnk7Cj4gKwl1OAkJCXByb2dyYW1fYnVmZmVyW1BST0dSQU1f QlVGRl9TSVpFICogNF07Cj4gKwl1bnNpZ25lZCBsb25nCQkqbG9ja19ibTsKPiArCXU2NAkJCWxh c3RfYWRkcmVzczsKPiArCXVuc2lnbmVkIGludAkJYnVmZl93cml0dGVuOwo+ICsJdW5zaWduZWQg aW50CQlwcm9ncmFtX2xlbmd0aDsKPiArCj4gKwllbnVtIGNmaV9mbGFzaF9zdGF0ZQlzdGF0ZTsK PiArCWVudW0gY2ZpX3JlYWRfbW9kZQlyZWFkX21vZGU7Cj4gKwl1MTYJCQlyY3I7Cj4gKwl1OAkJ CXNyOwo+ICt9Owo+ICsKPiArc3RhdGljIGludCBucl9lcmFzZV9ibG9ja3Moc3RydWN0IGNmaV9m bGFzaF9kZXZpY2UgKnNmZGV2KQo+ICt7Cj4gKwlyZXR1cm4gc2ZkZXYtPnNpemUgLyBGTEFTSF9C TE9DS19TSVpFOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBDRkkgcXVlcmllcyBhbHdheXMgZGVhbCB3 aXRoIG9uZSBieXRlIG9mIGluZm9ybWF0aW9uLCBwb3NzaWJseSBtaXJyb3JlZAo+ICsgKiB0byBv dGhlciBieXRlcyBvbiB0aGUgYnVzLiBUaGlzIGlzIGRlYWx0IHdpdGggaW4gdGhlIGNhbGxlcnMu Cj4gKyAqIFRoZSBhZGRyZXNzIHByb3ZpZGVkIGlzIHRoZSBvbmUgZm9yIDgtYml0IGFkZHJlc3Np bmcsIGFuZCB3b3VsZCBuZWVkIHRvCj4gKyAqIGJlIGFkanVzdGVkIGZvciB3aWRlciBhY2Nlc3Nl cy4KPiArICovCj4gK3N0YXRpYyB1OCByZWFkX2NmaShzdHJ1Y3QgY2ZpX2ZsYXNoX2RldmljZSAq c2ZkZXYsIHU2NCBhZGRyKQo+ICt7Cj4gKwlpZiAoYWRkciA8IDB4MTApCQkvKiBDRkkgaW5mb3Jt YXRpb24gc3RhcnRzIGF0IDB4MTAgKi8KPiArCQlyZXR1cm4gMDsKPiArCj4gKwlpZiAoYWRkciAt IDB4MTAgPiBzaXplb2YoY2ZpX3F1ZXJ5X3RhYmxlKSkgewo+ICsJCXByX2RlYnVnKCJDRkkgcXVl cnkgcmVhZCBhY2Nlc3MgYmV5b25kIHRoZSBlbmQgb2YgdGFibGUiKTsKPiArCQlyZXR1cm4gMDsK PiArCX0KPiArCj4gKwkvKiBGaXh1cCBkeW5hbWljIGluZm9ybWF0aW9uIGluIHRoZSBnZW9tZXRy eSBwYXJ0IG9mIHRoZSB0YWJsZS4gKi8KPiArCXN3aXRjaCAoYWRkcikgewo+ICsJY2FzZSBDRklf R0VPTV9PRkZTRVQ6CQkvKiBkZXZpY2Ugc2l6ZSBpbiBieXRlcywgcG93ZXIgb2YgdHdvICovCj4g KwkJcmV0dXJuIHBvdzJfc2l6ZShzZmRldi0+c2l6ZSAvIENGSV9OUl9GTEFTSF9DSElQUyk7Cj4g KwljYXNlIENGSV9HRU9NX09GRlNFVCArIDY6CS8qIG51bWJlciBvZiBlcmFzZSBibG9ja3MsIG1p bnVzIG9uZSAqLwo+ICsJCXJldHVybiAobnJfZXJhc2VfYmxvY2tzKHNmZGV2KSAtIDEpICYgMHhm ZjsKPiArCWNhc2UgQ0ZJX0dFT01fT0ZGU0VUICsgNzoKPiArCQlyZXR1cm4gKG5yX2VyYXNlX2Js b2NrcyhzZmRldikgLSAxKSA+PiA4Owo+ICsJY2FzZSBDRklfR0VPTV9PRkZTRVQgKyA4OgkvKiBl cmFzZSBibG9jayBzaXplLCBpbiB1bml0cyBvZiAyNTYgKi8KPiArCQlyZXR1cm4gKChGTEFTSF9C TE9DS19TSVpFIC8gMjU2ICkgLyBDRklfTlJfRkxBU0hfQ0hJUFMpICYgMHhmZjsKPiArCWNhc2Ug Q0ZJX0dFT01fT0ZGU0VUICsgOToKPiArCQlyZXR1cm4gKChGTEFTSF9CTE9DS19TSVpFIC8gMjU2 ICkgLyBDRklfTlJfRkxBU0hfQ0hJUFMpID4+IDg7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGNmaV9x dWVyeV90YWJsZVthZGRyIC0gMHgxMF07Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIGJsb2NrX2lz X2xvY2tlZChzdHJ1Y3QgY2ZpX2ZsYXNoX2RldmljZSAqc2ZkZXYsIHU2NCBhZGRyKQo+ICt7Cj4g KwlpbnQgYmxvY2tfbnIgPSBhZGRyIC8gRkxBU0hfQkxPQ0tfU0laRTsKPiArCj4gKwlyZXR1cm4g dGVzdF9iaXQoYmxvY2tfbnIsIHNmZGV2LT5sb2NrX2JtKTsKPiArfQo+ICsKPiArI2RlZmluZSBE RVZfSURfTUFTSyAweDdmZgo+ICtzdGF0aWMgdTE2IHJlYWRfZGV2X2lkKHN0cnVjdCBjZmlfZmxh c2hfZGV2aWNlICpzZmRldiwgdTY0IGFkZHIpCj4gK3sKPiArCXN3aXRjaCAoKGFkZHIgJiBERVZf SURfTUFTSykgLyBDRklfQlVTX1dJRFRIKSB7Cj4gKwljYXNlIDB4MDoJCQkJLyogdmVuZG9yIElE ICovCj4gKwkJcmV0dXJuIDB4MDAwMDsKPiArCWNhc2UgMHgxOgkJCQkvKiBkZXZpY2UgSUQgKi8K PiArCQlyZXR1cm4gMHhmZmZmOwo+ICsJY2FzZSAweDI6Cj4gKwkJcmV0dXJuIGJsb2NrX2lzX2xv Y2tlZChzZmRldiwgYWRkciAmIH5ERVZfSURfTUFTSyk7Cj4gKwljYXNlIDB4NToKPiArCQlyZXR1 cm4gc2ZkZXYtPnJjcjsKPiArCWRlZmF1bHQ6CQkJLyogSWdub3JlIHRoZSBvdGhlciBlbnRyaWVz LiAqLwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBsb2NrX2Js b2NrKHN0cnVjdCBjZmlfZmxhc2hfZGV2aWNlICpzZmRldiwgdTY0IGFkZHIsIGJvb2wgbG9jaykK PiArewo+ICsJaW50IGJsb2NrX25yID0gYWRkciAvIEZMQVNIX0JMT0NLX1NJWkU7Cj4gKwo+ICsJ aWYgKGxvY2spCj4gKwkJc2V0X2JpdChibG9ja19uciwgc2ZkZXYtPmxvY2tfYm0pOwo+ICsJZWxz ZQo+ICsJCWNsZWFyX2JpdChibG9ja19uciwgc2ZkZXYtPmxvY2tfYm0pOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCB3b3JkX3Byb2dyYW0oc3RydWN0IGNmaV9mbGFzaF9kZXZpY2UgKnNmZGV2LAo+ ICsJCQkgdTY0IGFkZHIsIHZvaWQgKmRhdGEsIGludCBsZW4pCj4gK3sKPiArCWlmIChibG9ja19p c19sb2NrZWQoc2ZkZXYsIGFkZHIpKSB7Cj4gKwkJc2ZkZXYtPnNyIHw9IDB4MTI7Cj4gKwkJcmV0 dXJuOwo+ICsJfQo+ICsKPiArCW1lbWNweShzZmRldi0+Zmxhc2hfbWVtb3J5ICsgYWRkciwgZGF0 YSwgbGVuKTsKPiArfQo+ICsKPiArLyogUmVzZXQgdGhlIHByb2dyYW0gYnVmZmVyIHN0YXRlIHRv IHByZXBhcmUgZm9yIGZvbGxvdy11cCB3cml0ZXMuICovCj4gK3N0YXRpYyB2b2lkIGJ1ZmZlcl9z ZXR1cChzdHJ1Y3QgY2ZpX2ZsYXNoX2RldmljZSAqc2ZkZXYpCj4gK3sKPiArCW1lbXNldChzZmRl di0+cHJvZ3JhbV9idWZmZXIsIDAsIHNpemVvZihzZmRldi0+cHJvZ3JhbV9idWZmZXIpKTsKPiAr CXNmZGV2LT5sYXN0X2FkZHJlc3MgPSB+MFVMTDsKPiArCXNmZGV2LT5idWZmX3dyaXR0ZW4gPSAw Owo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBidWZmZXJfcHJvZ3JhbShzdHJ1Y3QgY2ZpX2ZsYXNo X2RldmljZSAqc2ZkZXYsCj4gKwkJCSAgIHU2NCBhZGRyLCB2b2lkICpidWZmZXIsIGludCBsZW4p Cj4gK3sKPiArCXVuc2lnbmVkIGludCBidWZfYWRkcjsKPiArCj4gKwlpZiAoc2ZkZXYtPmJ1ZmZf d3JpdHRlbiA+PSBzZmRldi0+cHJvZ3JhbV9sZW5ndGgpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsK PiArCS8qCj4gKwkgKiBUaGUgZmlyc3Qgd29yZCB3cml0dGVuIGludG8gdGhlIGJ1ZmZlciBhZnRl ciB0aGUgc2V0dXAgY29tbWFuZAo+ICsJICogaGFwcGVucyB0byBiZSB0aGUgYmFzZSBhZGRyZXNz IGZvciB0aGUgYnVmZmVyLgo+ICsJICogQWxsIHN1YnNlcXVlbnQgd3JpdGVzIG5lZWQgdG8gYmUg d2l0aGluIHRoaXMgYWRkcmVzcyBhbmQgdGhpcwo+ICsJICogYWRkcmVzcyBwbHVzIHRoZSBidWZm ZXIgc2l6ZSwgc28ga2VlcCB0aGlzIHZhbHVlIGFyb3VuZC4KPiArCSAqLwo+ICsJaWYgKHNmZGV2 LT5sYXN0X2FkZHJlc3MgPT0gfjBVTEwpCj4gKwkJc2ZkZXYtPmxhc3RfYWRkcmVzcyA9IGFkZHI7 Cj4gKwo+ICsJaWYgKGFkZHIgPCBzZmRldi0+bGFzdF9hZGRyZXNzKQo+ICsJCXJldHVybiBmYWxz ZTsKPiArCWJ1Zl9hZGRyID0gYWRkciAtIHNmZGV2LT5sYXN0X2FkZHJlc3M7Cj4gKwlpZiAoYnVm X2FkZHIgPj0gUFJPR1JBTV9CVUZGX1NJWkUpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCW1l bWNweShzZmRldi0+cHJvZ3JhbV9idWZmZXIgKyBidWZfYWRkciwgYnVmZmVyLCBsZW4pOwo+ICsJ c2ZkZXYtPmJ1ZmZfd3JpdHRlbisrOwo+ICsKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBidWZmZXJfY29uZmlybShzdHJ1Y3QgY2ZpX2ZsYXNoX2RldmljZSAqc2ZkZXYp Cj4gK3sKPiArCWlmIChibG9ja19pc19sb2NrZWQoc2ZkZXYsIHNmZGV2LT5sYXN0X2FkZHJlc3Mp KSB7Cj4gKwkJc2ZkZXYtPnNyIHw9IDB4MTI7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsJbWVtY3B5 KHNmZGV2LT5mbGFzaF9tZW1vcnkgKyBzZmRldi0+bGFzdF9hZGRyZXNzLAo+ICsJICAgICAgIHNm ZGV2LT5wcm9ncmFtX2J1ZmZlciwKPiArCSAgICAgICBzZmRldi0+YnVmZl93cml0dGVuICogc2l6 ZW9mKHUzMikpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBibG9ja19lcmFzZV9jb25maXJtKHN0 cnVjdCBjZmlfZmxhc2hfZGV2aWNlICpzZmRldiwgdTY0IGFkZHIpCj4gK3sKPiArCWlmIChibG9j a19pc19sb2NrZWQoc2ZkZXYsIGFkZHIpKSB7Cj4gKwkJc2ZkZXYtPnNyIHw9IDB4MTI7Cj4gKwkJ cmV0dXJuOwo+ICsJfQo+ICsKPiArCW1lbXNldChzZmRldi0+Zmxhc2hfbWVtb3J5ICsgYWRkciwg MHhGRiwgRkxBU0hfQkxPQ0tfU0laRSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGNmaV9mbGFz aF9tbWlvKHN0cnVjdCBrdm1fY3B1ICp2Y3B1LAo+ICsJCQkgICB1NjQgYWRkciwgdTggKmRhdGEs IHUzMiBsZW4sIHU4IGlzX3dyaXRlLAo+ICsJCQkgICB2b2lkICpjb250ZXh0KQo+ICt7Cj4gKwlz dHJ1Y3QgY2ZpX2ZsYXNoX2RldmljZSAqc2ZkZXYgPSBjb250ZXh0Owo+ICsJdTY0IGZhZGRyID0g YWRkciAtIHNmZGV2LT5iYXNlX2FkZHI7Cj4gKwl1MzIgdmFsdWU7Cj4gKwo+ICsJaWYgKCFpc193 cml0ZSkgewo+ICsJCXUxNiBjZmlfdmFsdWUgPSAwOwo+ICsKPiArCQltdXRleF9sb2NrKCZzZmRl di0+bXV0ZXgpOwo+ICsKPiArCQlzd2l0Y2ggKHNmZGV2LT5yZWFkX21vZGUpIHsKPiArCQljYXNl IFJFQURfQVJSQVk6Cj4gKwkJCS8qIGp1c3QgY29weSB0aGUgcmVxdWVzdGVkIGJ5dGVzIGZyb20g dGhlIGFycmF5ICovCj4gKwkJCW1lbWNweShkYXRhLCBzZmRldi0+Zmxhc2hfbWVtb3J5ICsgZmFk ZHIsIGxlbik7Cj4gKwkJCWdvdG8gb3V0X3VubG9jazsKPiArCQljYXNlIFJFQURfU1RBVFVTOgo+ ICsJCQljZmlfdmFsdWUgPSBzZmRldi0+c3I7Cj4gKwkJCWJyZWFrOwo+ICsJCWNhc2UgUkVBRF9E RVZJQ0VfSUQ6Cj4gKwkJCWNmaV92YWx1ZSA9IHJlYWRfZGV2X2lkKHNmZGV2LCBmYWRkcik7Cj4g KwkJCWJyZWFrOwo+ICsJCWNhc2UgUkVBRF9RVUVSWToKPiArCQkJY2ZpX3ZhbHVlID0gcmVhZF9j Zmkoc2ZkZXYsIGZhZGRyIC8gQ0ZJX0JVU19XSURUSCk7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiAr CQlzd2l0Y2ggKGxlbikgewo+ICsJCWNhc2UgMToKPiArCQkJKmRhdGEgPSBjZmlfdmFsdWU7Cj4g KwkJCWJyZWFrOwo+ICsJCWNhc2UgODogbWVtc2V0KGRhdGEgKyA0LCAwLCA0KTsKPiArCQkJLyog ZmFsbC10aHJvdWdoICovCj4gKwkJY2FzZSA0Ogo+ICsJCQlpZiAoQ0ZJX05SX0ZMQVNIX0NISVBT ID09IDIpCj4gKwkJCQltZW1jcHkoZGF0YSArIDIsICZjZmlfdmFsdWUsIDIpOwo+ICsJCQllbHNl Cj4gKwkJCQltZW1zZXQoZGF0YSArIDIsIDAsIDIpOwo+ICsJCQkvKiBmYWxsLXRocm91Z2ggKi8K PiArCQljYXNlIDI6Cj4gKwkJCW1lbWNweShkYXRhLCAmY2ZpX3ZhbHVlLCAyKTsKPiArCQkJYnJl YWs7Cj4gKwkJZGVmYXVsdDoKPiArCQkJcHJfZGVidWcoIkNGSSBmbGFzaDogaWxsZWdhbCBhY2Nl c3MgbGVuZ3RoICVkIGZvciByZWFkIG1vZGUgJWQiLAo+ICsJCQkJIGxlbiwgc2ZkZXYtPnJlYWRf bW9kZSk7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCj4gKwkJZ290byBvdXRfdW5sb2NrOwo+ICsJ fQo+ICsKPiArCWlmIChsZW4gPiA0KSB7Cj4gKwkJcHJfaW5mbygiQ0ZJIGZsYXNoOiBNTUlPICVk LWJpdCB3cml0ZSBhY2Nlc3Mgbm90IHN1cHBvcnRlZCIsCj4gKwkJCSBsZW4gKiA4KTsKPiArCQly ZXR1cm47Cj4gKwl9Cj4gKwo+ICsJbWVtY3B5KCZ2YWx1ZSwgZGF0YSwgbGVuKTsKPiArCj4gKwlt dXRleF9sb2NrKCZzZmRldi0+bXV0ZXgpOwo+ICsKPiArCXN3aXRjaCAoc2ZkZXYtPnN0YXRlKSB7 Cj4gKwljYXNlIFJFQURZOgkJCS8qIGhhbmRsZWQgYmVsb3cgKi8KPiArCQlicmVhazsKPiArCj4g KwljYXNlIExPQ0tfU0VUVVA6Cj4gKwkJc3dpdGNoICh2YWx1ZSAmIDB4ZmYpIHsKPiArCQljYXNl IENGSV9DTURfTE9DS19CTE9DSzoKPiArCQkJbG9ja19ibG9jayhzZmRldiwgZmFkZHIsIHRydWUp Owo+ICsJCQlzZmRldi0+cmVhZF9tb2RlID0gUkVBRF9TVEFUVVM7Cj4gKwkJCWJyZWFrOwo+ICsJ CWNhc2UgQ0ZJX0NNRF9VTkxPQ0tfQkxPQ0s6Cj4gKwkJCWxvY2tfYmxvY2soc2ZkZXYsIGZhZGRy LCBmYWxzZSk7Cj4gKwkJCXNmZGV2LT5yZWFkX21vZGUgPSBSRUFEX1NUQVRVUzsKPiArCQkJYnJl YWs7Cj4gKwkJZGVmYXVsdDoKPiArCQkJc2ZkZXYtPnNyIHw9IDB4MzA7Cj4gKwkJCWJyZWFrOwo+ ICsJCX0KPiArCQlzZmRldi0+c3RhdGUgPSBSRUFEWTsKPiArCQlnb3RvIG91dF91bmxvY2s7Cj4g Kwo+ICsJY2FzZSBXUF9TRVRVUDoKPiArCQl3b3JkX3Byb2dyYW0oc2ZkZXYsIGZhZGRyLCBkYXRh LCBsZW4pOwo+ICsJCXNmZGV2LT5yZWFkX21vZGUgPSBSRUFEX1NUQVRVUzsKPiArCQlzZmRldi0+ c3RhdGUgPSBSRUFEWTsKPiArCQlnb3RvIG91dF91bmxvY2s7Cj4gKwo+ICsJY2FzZSBCUF9MT0FE Ogo+ICsJCWlmIChidWZmZXJfcHJvZ3JhbShzZmRldiwgZmFkZHIsIGRhdGEsIGxlbikpCj4gKwkJ CWdvdG8gb3V0X3VubG9jazsKPiArCj4gKwkJaWYgKCh2YWx1ZSAmIDB4RkYpID09IENGSV9DTURf QlVGRkVSRURfUFJPR1JBTV9DT05GSVJNKSB7Cj4gKwkJCWJ1ZmZlcl9jb25maXJtKHNmZGV2KTsK PiArCQkJc2ZkZXYtPnJlYWRfbW9kZSA9IFJFQURfU1RBVFVTOwo+ICsJCX0gZWxzZSB7Cj4gKwkJ CXByX2RlYnVnKCJDRkkgZmxhc2g6IEJQX0xPQUQ6IGV4cGVjdGVkIENPTkZJUk0oMHhkMCksIGdv dCAweCV4IEAgMHglbGx4IiwKPiArCQkJCSB2YWx1ZSwgZmFkZHIpOwo+ICsJCQlzZmRldi0+c3Ig fD0gMHgxMDsKPiArCQl9Cj4gKwkJc2ZkZXYtPnN0YXRlID0gUkVBRFk7Cj4gKwkJZ290byBvdXRf dW5sb2NrOwo+ICsKPiArCWNhc2UgQlBfU0VUVVA6Cj4gKwkJc2ZkZXYtPnByb2dyYW1fbGVuZ3Ro ID0gKHZhbHVlICYgMHhmZmZmKSArIDE7Cj4gKwkJaWYgKHNmZGV2LT5wcm9ncmFtX2xlbmd0aCA+ IFBST0dSQU1fQlVGRl9TSVpFIC8gNCkKPiArCQkJc2ZkZXYtPnByb2dyYW1fbGVuZ3RoID0gUFJP R1JBTV9CVUZGX1NJWkUgLyA0Owo+ICsJCXNmZGV2LT5zdGF0ZSA9IEJQX0xPQUQ7Cj4gKwkJc2Zk ZXYtPnJlYWRfbW9kZSA9IFJFQURfU1RBVFVTOwo+ICsJCWdvdG8gb3V0X3VubG9jazsKPiArCj4g KwljYXNlIEVSQVNFX1NFVFVQOgo+ICsJCWlmICgodmFsdWUgJiAweGZmKSA9PSBDRklfQ01EX0JM T0NLX0VSQVNFX0NPTkZJUk0pCj4gKwkJCWJsb2NrX2VyYXNlX2NvbmZpcm0oc2ZkZXYsIGZhZGRy KTsKPiArCQllbHNlCj4gKwkJCXNmZGV2LT5zciB8PSAweDMwOwo+ICsKPiArCQlzZmRldi0+c3Rh dGUgPSBSRUFEWTsKPiArCQlzZmRldi0+cmVhZF9tb2RlID0gUkVBRF9TVEFUVVM7Cj4gKwkJZ290 byBvdXRfdW5sb2NrOwo+ICsJfQo+ICsKPiArCS8qIHdyaXRlIGNvbW1hbmRzIGluIFJFQURZIHN0 YXRlICovCj4gKwlzd2l0Y2ggKHZhbHVlICYgMHhGRikgewo+ICsJY2FzZSBDRklfQ01EX1JFQURf SkVERUM6Cj4gKwkJc2ZkZXYtPnJlYWRfbW9kZSA9IFJFQURfREVWSUNFX0lEOwo+ICsJCWJyZWFr Owo+ICsJY2FzZSBDRklfQ01EX1JFQURfU1RBVFVTX1JFR0lTVEVSOgo+ICsJCXNmZGV2LT5yZWFk X21vZGUgPSBSRUFEX1NUQVRVUzsKPiArCQlicmVhazsKPiArCWNhc2UgQ0ZJX0NNRF9SRUFEX0NG SV9RVUVSWToKPiArCQlzZmRldi0+cmVhZF9tb2RlID0gUkVBRF9RVUVSWTsKPiArCQlicmVhazsK PiArCWNhc2UgQ0ZJX0NNRF9DTEVBUl9TVEFUVVNfUkVHSVNURVI6Cj4gKwkJc2ZkZXYtPnNyID0g MHg4MDsKPiArCQlicmVhazsKPiArCWNhc2UgQ0ZJX0NNRF9XT1JEX1BST0dSQU1fU0VUVVA6Cj4g KwljYXNlIENGSV9DTURfQUxURVJOQVRFX1dPUkRfUFJPR1JBTV9TRVRVUDoKPiArCQlzZmRldi0+ c3RhdGUgPSBXUF9TRVRVUDsKPiArCQlzZmRldi0+cmVhZF9tb2RlID0gUkVBRF9TVEFUVVM7Cj4g KwkJYnJlYWs7Cj4gKwljYXNlIENGSV9DTURfTE9DS19CTE9DS19TRVRVUDoKPiArCQlzZmRldi0+ c3RhdGUgPSBMT0NLX1NFVFVQOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBDRklfQ01EX0JMT0NLX0VS QVNFX1NFVFVQOgo+ICsJCXNmZGV2LT5zdGF0ZSA9IEVSQVNFX1NFVFVQOwo+ICsJCXNmZGV2LT5y ZWFkX21vZGUgPSBSRUFEX1NUQVRVUzsKPiArCQlicmVhazsKPiArCWNhc2UgQ0ZJX0NNRF9CVUZG RVJFRF9QUk9HUkFNX1NFVFVQOgo+ICsJCWJ1ZmZlcl9zZXR1cChzZmRldik7Cj4gKwkJc2ZkZXYt PnN0YXRlID0gQlBfU0VUVVA7Cj4gKwkJc2ZkZXYtPnJlYWRfbW9kZSA9IFJFQURfU1RBVFVTOwo+ ICsJCWJyZWFrOwo+ICsJY2FzZSBDRklfQ01EX0JVRkZFUkVEX1BST0dSQU1fQ09ORklSTToKPiAr CQlwcl9kZWJ1ZygiQ0ZJIGZsYXNoOiB1bmV4cGVjdGVkIGNvbmZpcm0gY29tbWFuZCAweEQwIik7 Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCXByX2RlYnVnKCJDRkkgZmxhc2g6IHVua25v d24gY29tbWFuZCAweCV4IiwgdmFsdWUpOwo+ICsJCS8qIGZhbGwgdGhyb3VnaCAqLwo+ICsJY2Fz ZSBDRklfQ01EX1JFQURfQVJSQVk6Cj4gKwkJc2ZkZXYtPnJlYWRfbW9kZSA9IFJFQURfQVJSQVk7 Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICtvdXRfdW5sb2NrOgo+ICsJbXV0ZXhfdW5sb2NrKCZz ZmRldi0+bXV0ZXgpOwo+ICt9Cj4gKwo+ICsjaWZkZWYgQ09ORklHX0hBU19MSUJGRFQKPiArc3Rh dGljIHZvaWQgZ2VuZXJhdGVfY2ZpX2ZsYXNoX2ZkdF9ub2RlKHZvaWQgKmZkdCwKPiArCQkJCQlz dHJ1Y3QgZGV2aWNlX2hlYWRlciAqZGV2X2hkciwKPiArCQkJCQl2b2lkICgqZ2VuZXJhdGVfaXJx X3Byb3ApKHZvaWQgKmZkdCwKPiArCQkJCQkJCQkgIHU4IGlycSwKPiArCQkJCQkJCQllbnVtIGly cV90eXBlKSkKPiArewo+ICsJc3RydWN0IGNmaV9mbGFzaF9kZXZpY2UgKnNmZGV2Owo+ICsJdTY0 IHJlZ19wcm9wWzJdOwo+ICsKPiArCXNmZGV2ID0gY29udGFpbmVyX29mKGRldl9oZHIsIHN0cnVj dCBjZmlfZmxhc2hfZGV2aWNlLCBkZXZfaGRyKTsKPiArCXJlZ19wcm9wWzBdID0gY3B1X3RvX2Zk dDY0KHNmZGV2LT5iYXNlX2FkZHIpOwo+ICsJcmVnX3Byb3BbMV0gPSBjcHVfdG9fZmR0NjQoc2Zk ZXYtPnNpemUpOwo+ICsKPiArCV9GRFQoZmR0X2JlZ2luX25vZGUoZmR0LCAiZmxhc2giKSk7Cj4g KwlfRkRUKGZkdF9wcm9wZXJ0eV9jZWxsKGZkdCwgImJhbmstd2lkdGgiLCBDRklfQlVTX1dJRFRI KSk7Cj4gKwlfRkRUKGZkdF9wcm9wZXJ0eV9jZWxsKGZkdCwgIiNhZGRyZXNzLWNlbGxzIiwgMHgx KSk7Cj4gKwlfRkRUKGZkdF9wcm9wZXJ0eV9jZWxsKGZkdCwgIiNzaXplLWNlbGxzIiwgMHgxKSk7 Cj4gKwlfRkRUKGZkdF9wcm9wZXJ0eV9zdHJpbmcoZmR0LCAiY29tcGF0aWJsZSIsICJjZmktZmxh c2giKSk7Cj4gKwlfRkRUKGZkdF9wcm9wZXJ0eV9zdHJpbmcoZmR0LCAibGFiZWwiLCAiU3lzdGVt LWZpcm13YXJlIikpOwo+ICsJX0ZEVChmZHRfcHJvcGVydHkoZmR0LCAicmVnIiwgJnJlZ19wcm9w LCBzaXplb2YocmVnX3Byb3ApKSk7Cj4gKwlfRkRUKGZkdF9lbmRfbm9kZShmZHQpKTsKPiArfQo+ ICsjZWxzZQo+ICsjZGVmaW5lIGdlbmVyYXRlX2NmaV9mbGFzaF9mZHRfbm9kZSBOVUxMCj4gKyNl bmRpZgo+ICsKPiArc3RhdGljIHN0cnVjdCBjZmlfZmxhc2hfZGV2aWNlICpjcmVhdGVfZmxhc2hf ZGV2aWNlX2ZpbGUoc3RydWN0IGt2bSAqa3ZtLAo+ICsJCQkJCQkJIGNvbnN0IGNoYXIgKmZpbGVu YW1lKQo+ICt7Cj4gKwlzdHJ1Y3QgY2ZpX2ZsYXNoX2RldmljZSAqc2ZkZXY7Cj4gKwlzdHJ1Y3Qg c3RhdCBzdGF0YnVmOwo+ICsJdW5zaWduZWQgaW50IHZhbHVlOwo+ICsJaW50IHJldDsKPiArCWlu dCBmZDsKPiArCj4gKwlmZCA9IG9wZW4oZmlsZW5hbWUsIE9fUkRXUik7Cj4gKwlpZiAoZmQgPCAw KQo+ICsJCXJldHVybiBFUlJfUFRSKC1lcnJubyk7Cj4gKwlpZiAoZnN0YXQoZmQsICZzdGF0YnVm KSA8IDApIHsKPiArCQljbG9zZShmZCk7Cj4gKwkJcmV0dXJuIEVSUl9QVFIoLWVycm5vKTsKPiAr CX0KPiArCj4gKwlzZmRldiA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGNmaV9mbGFzaF9kZXZpY2Up KTsKPiArCWlmICghc2ZkZXYpIHsKPiArCQljbG9zZShmZCk7Cj4gKwkJcmV0dXJuIEVSUl9QVFIo LUVOT01FTSk7Cj4gKwl9Cj4gKwo+ICsJc2ZkZXYtPnNpemUgPSAoc3RhdGJ1Zi5zdF9zaXplICsg NDA5NSkgJiB+MHhmZmZVTDsKPiArCXNmZGV2LT5mbGFzaF9tZW1vcnkgPSBtbWFwKE5VTEwsIHN0 YXRidWYuc3Rfc2l6ZSwKPiArCQkJCSAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFS RUQsCj4gKwkJCQkgICBmZCwgMCk7Cj4gKwlpZiAoc2ZkZXYtPmZsYXNoX21lbW9yeSA9PSBNQVBf RkFJTEVEKSB7Cj4gKwkJY2xvc2UoZmQpOwo+ICsJCWZyZWUoc2ZkZXYpOwo+ICsJCXJldHVybiBF UlJfUFRSKC1lcnJubyk7Cj4gKwl9Cj4gKwlzZmRldi0+YmFzZV9hZGRyID0gS1ZNX0ZMQVNIX01N SU9fQkFTRTsKPiArCXNmZGV2LT5zdGF0ZSA9IFJFQURZOwo+ICsJc2ZkZXYtPnJlYWRfbW9kZSA9 IFJFQURfQVJSQVk7Cj4gKwlzZmRldi0+c3IgPSAweDgwOwo+ICsJc2ZkZXYtPnJjciA9IDB4YmZj ZjsKPiArCj4gKwl2YWx1ZSA9IHJvdW5kdXAobnJfZXJhc2VfYmxvY2tzKHNmZGV2KSwgQklUU19Q RVJfTE9ORykgLyA4Owo+ICsJc2ZkZXYtPmxvY2tfYm0gPSBtYWxsb2ModmFsdWUpOwo+ICsJbWVt c2V0KHNmZGV2LT5sb2NrX2JtLCAwLCB2YWx1ZSk7Cj4gKwo+ICsJc2ZkZXYtPmRldl9oZHIuYnVz X3R5cGUgPSBERVZJQ0VfQlVTX01NSU87Cj4gKwlzZmRldi0+ZGV2X2hkci5kYXRhID0gZ2VuZXJh dGVfY2ZpX2ZsYXNoX2ZkdF9ub2RlOwo+ICsJbXV0ZXhfaW5pdCgmc2ZkZXYtPm11dGV4KTsKPiAr CXJldCA9IGRldmljZV9fcmVnaXN0ZXIoJnNmZGV2LT5kZXZfaGRyKTsKPiArCWlmIChyZXQpIHsK PiArCQlmcmVlKHNmZGV2LT5mbGFzaF9tZW1vcnkpOwo+ICsJCWZyZWUoc2ZkZXYpOwo+ICsJCXJl dHVybiBFUlJfUFRSKHJldCk7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0ga3ZtX19yZWdpc3Rlcl9tbWlv KGt2bSwKPiArCQkJCSBzZmRldi0+YmFzZV9hZGRyLCBzZmRldi0+c2l6ZSwKPiArCQkJCSBmYWxz ZSwgY2ZpX2ZsYXNoX21taW8sIHNmZGV2KTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZpY2VfX3Vu cmVnaXN0ZXIoJnNmZGV2LT5kZXZfaGRyKTsKPiArCQlmcmVlKHNmZGV2LT5mbGFzaF9tZW1vcnkp Owo+ICsJCWZyZWUoc2ZkZXYpOwo+ICsJCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gKwl9Cj4gKwo+ ICsJcmV0dXJuIHNmZGV2Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGZsYXNoX19pbml0KHN0cnVj dCBrdm0gKmt2bSkKPiArewo+ICsJc3RydWN0IGNmaV9mbGFzaF9kZXZpY2UgKnNmZGV2Owo+ICsK PiArCWlmICgha3ZtLT5jZmcuZmxhc2hfZmlsZW5hbWUpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJ c2ZkZXYgPSBjcmVhdGVfZmxhc2hfZGV2aWNlX2ZpbGUoa3ZtLCBrdm0tPmNmZy5mbGFzaF9maWxl bmFtZSk7Cj4gKwlpZiAoSVNfRVJSKHNmZGV2KSkKPiArCQlyZXR1cm4gUFRSX0VSUihzZmRldik7 Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArZGV2X2luaXQoZmxhc2hfX2luaXQpOwo+IGRpZmYg LS1naXQgYS9pbmNsdWRlL2t2bS9rdm0tY29uZmlnLmggYi9pbmNsdWRlL2t2bS9rdm0tY29uZmln LmgKPiBpbmRleCBhMDUyYjBiYy4uZjRhOGI4MzEgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9rdm0v a3ZtLWNvbmZpZy5oCj4gKysrIGIvaW5jbHVkZS9rdm0va3ZtLWNvbmZpZy5oCj4gQEAgLTM1LDYg KzM1LDcgQEAgc3RydWN0IGt2bV9jb25maWcgewo+ICAJY29uc3QgY2hhciAqdm1saW51eF9maWxl bmFtZTsKPiAgCWNvbnN0IGNoYXIgKmluaXRyZF9maWxlbmFtZTsKPiAgCWNvbnN0IGNoYXIgKmZp cm13YXJlX2ZpbGVuYW1lOwo+ICsJY29uc3QgY2hhciAqZmxhc2hfZmlsZW5hbWU7Cj4gIAljb25z dCBjaGFyICpjb25zb2xlOwo+ICAJY29uc3QgY2hhciAqZGV2Owo+ICAJY29uc3QgY2hhciAqbmV0 d29yazsKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9rdm0vdXRpbC5oIGIvaW5jbHVkZS9rdm0vdXRp bC5oCj4gaW5kZXggNGNhN2FhOTMuLjVjMzdmMGI3IDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUva3Zt L3V0aWwuaAo+ICsrKyBiL2luY2x1ZGUva3ZtL3V0aWwuaAo+IEBAIC0xMDQsNiArMTA0LDExIEBA IHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByb3VuZHVwX3Bvd19vZl90d28odW5zaWduZWQg bG9uZyB4KQo+ICAJcmV0dXJuIHggPyAxVUwgPDwgZmxzX2xvbmcoeCAtIDEpIDogMDsKPiAgfQo+ ICAKPiArc3RhdGljIGlubGluZSBpbnQgcG93Ml9zaXplKHVuc2lnbmVkIGxvbmcgeCkKPiArewo+ ICsJcmV0dXJuIChzaXplb2YoeCkgKiA4KSAtIF9fYnVpbHRpbl9jbHpsKHggLSAxKTsKPiArfQo+ ICsKPiAgc3RydWN0IGt2bTsKPiAgdm9pZCAqbW1hcF9odWdldGxiZnMoc3RydWN0IGt2bSAqa3Zt LCBjb25zdCBjaGFyICpodGxiZnNfcGF0aCwgdTY0IHNpemUpOwo+ICB2b2lkICptbWFwX2Fub25f b3JfaHVnZXRsYmZzKHN0cnVjdCBrdm0gKmt2bSwgY29uc3QgY2hhciAqaHVnZXRsYmZzX3BhdGgs IHU2NCBzaXplKTsKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18Ka3ZtYXJtIG1haWxpbmcgbGlzdAprdm1hcm1AbGlzdHMuY3MuY29sdW1iaWEuZWR1Cmh0dHBz Oi8vbGlzdHMuY3MuY29sdW1iaWEuZWR1L21haWxtYW4vbGlzdGluZm8va3ZtYXJtCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.3 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 53452C34022 for ; Mon, 17 Feb 2020 17:21:06 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 04BA6208C4 for ; Mon, 17 Feb 2020 17:21:06 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="AGYAWO32" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 04BA6208C4 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date: Message-ID:From:References:To:Subject:Reply-To:Content-ID:Content-Description :Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=LCIjdgfij8pfxjgHOh8Te8ayFsyO/x9AlKyFEUwJYF8=; b=AGYAWO32i1mIcK nJvDaS22pgNq0WPH+ZeKpqxWVIlnjJ7xzqf0qjXgAf3rU107dRSMVxqOOLaNiOxdb/WsUSNCGWIKo pFBOj6aOgvCWtB82WboKr7b6DOm+Y5K7+tgrBQ1S9/1hBGW5+CHMocl864wwL3VJcdxOsfLPrfgBW 6MwffCdBBmNKMsA/iY8TvhFa4mIXfUvM1VlFIwKp4S/jh18Q+WOH4ujTVNIMA/G0xBpEORjJFHyXx wY08B8Ch3blyDsGAdeO0qIVSfkLjdlF+AKnBnMLHxIR8tQ+oVWXYSngkYl74ZVqPUMv1RvnuZJWJz Wlasz9fKDANs2CDr3Htg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1j3k4r-0002hX-Di; Mon, 17 Feb 2020 17:21:01 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1j3k4m-0002gw-D7 for linux-arm-kernel@lists.infradead.org; Mon, 17 Feb 2020 17:20:59 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 063601FB; Mon, 17 Feb 2020 09:20:50 -0800 (PST) Received: from [10.1.196.63] (e123195-lin.cambridge.arm.com [10.1.196.63]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id E088D3F68F; Mon, 17 Feb 2020 09:20:48 -0800 (PST) Subject: Re: [PATCH kvmtool v2] Add emulation for CFI compatible flash memory To: Andre Przywara , Will Deacon , Julien Thierry References: <20200207121941.259157-1-andre.przywara@arm.com> From: Alexandru Elisei Message-ID: <76e1a2fa-c849-c3ea-7436-6f0361954cf5@arm.com> Date: Mon, 17 Feb 2020 17:20:43 +0000 User-Agent: Mozilla/5.0 (X11; Linux aarch64; rv:60.0) Gecko/20100101 Thunderbird/60.9.0 MIME-Version: 1.0 In-Reply-To: <20200207121941.259157-1-andre.przywara@arm.com> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200217_092056_541635_A37FCC1A X-CRM114-Status: GOOD ( 33.18 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Raphael Gault , Sami Mujawar , linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGksCgpJIGd1ZXNzIHRoZSBkZXZpY2UgaGFzbid0IGJlZW4gdGVzdGVkIHdpdGggTGludXguIFRo aXMgaXMgd2hhdCBJJ20gZ2V0dGluZyB3aGVuCnRyeWluZyB0byBib290IGEgTGludXggZ3Vlc3Qg dXNpbmcgdGhlIGNvbW1hbmQ6CgokIC4vbGt2bSBydW4gLWM0IC1tNDA5NiAtayAvcGF0aC90by9r ZXJuZWwgLWQgL3BhdGgvdG8vZGlzayAtcCByb290PSIvZGV2L3ZkYTIiIC1GCmZsYXNoLmltZwoK W8KgwqDCoCAwLjY1OTE2N10gcGh5c21hcC1mbGFzaCAyMDAwMDAwLmZsYXNoOiBwaHlzbWFwIHBs YXRmb3JtIGZsYXNoIGRldmljZTogW21lbQoweDAyMDAwMDAwLTB4MDI5ZmZmZmZdClvCoMKgwqAg MC42NjA0NDRdIE51bWJlciBvZiBlcmFzZSByZWdpb25zOiAxClvCoMKgwqAgMC42NjEwMzZdIFBy aW1hcnkgVmVuZG9yIENvbW1hbmQgU2V0OiAwMDAxIChJbnRlbC9TaGFycCBFeHRlbmRlZCkKW8Kg wqDCoCAwLjY2MTY4OF0gUHJpbWFyeSBBbGdvcml0aG0gVGFibGUgYXQgMDAzMQpbwqDCoMKgIDAu NjYyMTY4XSBBbHRlcm5hdGl2ZSBWZW5kb3IgQ29tbWFuZCBTZXQ6IDAwMDAgKE5vbmUpClvCoMKg wqAgMC42NjI3MTFdIE5vIEFsdGVybmF0ZSBBbGdvcml0aG0gVGFibGUKW8KgwqDCoCAwLjY2MzEy MF0gVmNjIE1pbmltdW06wqAgNC41IFYKW8KgwqDCoCAwLjY2MzQ1MF0gVmNjIE1heGltdW06wqAg NS41IFYKW8KgwqDCoCAwLjY2Mzc3OV0gTm8gVnBwIGxpbmUKW8KgwqDCoCAwLjY2NDAzOV0gVHlw aWNhbCBieXRlL3dvcmQgd3JpdGUgdGltZW91dDogMiDCtXMKW8KgwqDCoCAwLjY2NDU5MF0gTWF4 aW11bSBieXRlL3dvcmQgd3JpdGUgdGltZW91dDogMiDCtXMKW8KgwqDCoCAwLjY2NTI0MF0gVHlw aWNhbCBmdWxsIGJ1ZmZlciB3cml0ZSB0aW1lb3V0OiAyIMK1cwpbwqDCoMKgIDAuNjY1Nzc1XSBN YXhpbXVtIGZ1bGwgYnVmZmVyIHdyaXRlIHRpbWVvdXQ6IDIgwrVzClvCoMKgwqAgMC42NjYzNzNd IFR5cGljYWwgYmxvY2sgZXJhc2UgdGltZW91dDogMiBtcwpbwqDCoMKgIDAuNjY2ODI4XSBNYXhp bXVtIGJsb2NrIGVyYXNlIHRpbWVvdXQ6IDIgbXMKW8KgwqDCoCAwLjY2NzI4Ml0gQ2hpcCBlcmFz ZSBub3Qgc3VwcG9ydGVkClvCoMKgwqAgMC42Njc2NTldIERldmljZSBzaXplOiAweDgwMDAwMCBi eXRlcyAoOCBNaUIpClvCoMKgwqAgMC42NjgxMzddIEZsYXNoIERldmljZSBJbnRlcmZhY2UgZGVz Y3JpcHRpb246IDB4MDAwNgpbwqDCoMKgIDAuNjY4Njk3XcKgwqAgLSBVbmtub3duClvCoMKgwqAg MC42Njg5NjNdIE1heC4gYnl0ZXMgaW4gYnVmZmVyIHdyaXRlOiAweDQwClvCoMKgwqAgMC42Njk0 MDddIE51bWJlciBvZiBFcmFzZSBCbG9jayBSZWdpb25zOiAxClvCoMKgwqAgMC42Njk4NjVdwqDC oCBFcmFzZSBSZWdpb24gIzA6IEJsb2NrU2l6ZSAweDgwMDAgYnl0ZXMsIDE2MCBibG9ja3MKW8Kg wqDCoCAwLjY3MjI5OV0gMjAwMDAwMC5mbGFzaDogRm91bmQgMiB4MTYgZGV2aWNlcyBhdCAweDAg aW4gMzItYml0IGJhbmsuCk1hbnVmYWN0dXJlciBJRCAweDAwMDAwMCBDaGlwIElEIDB4MDBmZmZm ClvCoMKgwqAgMC42ODEzMjhdIE5PUiBjaGlwIHRvbyBsYXJnZSB0byBmaXQgaW4gbWFwcGluZy4g QXR0ZW1wdGluZyB0byBjb3BlLi4uClvCoMKgwqAgMC42ODIwNDZdIEludGVsL1NoYXJwIEV4dGVu ZGVkIFF1ZXJ5IFRhYmxlIGF0IDB4MDAzMQpbwqDCoMKgIDAuNjgyNjQ1XSBVc2luZyBidWZmZXIg d3JpdGUgbWV0aG9kClvCoMKgwqAgMC42ODMwMzFdIFN1bSBvZiByZWdpb25zIChhMDAwMDApICE9 IHRvdGFsIHNpemUgb2Ygc2V0IG9mIGludGVybGVhdmVkIGNoaXBzCigxMDAwMDAwKQpbwqDCoMKg IDAuNjgzODU0XSBnZW5fcHJvYmU6IE5vIHN1cHBvcnRlZCBWZW5kb3IgQ29tbWFuZCBTZXQgZm91 bmQKW8KgwqDCoCAwLjY4NDQ0MV0gcGh5c21hcC1mbGFzaCAyMDAwMDAwLmZsYXNoOiBtYXBfcHJv YmUgZmFpbGVkCgpJIGFsc28gZGVmaW5lZCBERUJVR19DRkkgaW4gZHJpdmVycy9tdGQvY2hpcHMv Y2ZpX3Byb2JlLmMuCgpUaGUgRmxhc2ggRGV2aWNlIEludGVyZmFjZSBkZXNjcmlwdGlvbiB0aGF0 IHdlIHByb3ZpZGUgaXMgd3JvbmcsIGl0IHNob3VsZCAweDA1LgpNb3JlIGRldGFpbHMgYmVsb3cu CgpPbiAyLzcvMjAgMTI6MTkgUE0sIEFuZHJlIFByenl3YXJhIHdyb3RlOgo+IEZyb206IFJhcGhh ZWwgR2F1bHQgPHJhcGhhZWwuZ2F1bHRAYXJtLmNvbT4KPgo+IFRoZSBFREsgSUkgVUVGSSBmaXJt d2FyZSBpbXBsZW1lbnRhdGlvbiByZXF1aXJlcyBzb21lIHN0b3JhZ2UgZm9yIHRoZSBFRkkKPiB2 YXJpYWJsZXMsIHdoaWNoIGlzIHR5cGljYWxseSBzb21lIGZsYXNoIHN0b3JhZ2UuCj4gU2luY2Ug dGhpcyBpcyBhbHJlYWR5IHN1cHBvcnRlZCBvbiB0aGUgRURLIElJIHNpZGUsIHdlIGFkZCBhIENG SSBmbGFzaAo+IGVtdWxhdGlvbiB0byBrdm10b29sLgo+IFRoaXMgaXMgYmFja2VkIGJ5IGEgZmls ZSwgc3BlY2lmaWVkIHZpYSB0aGUgLS1mbGFzaCBvciAtRiBjb21tYW5kIGxpbmUKPiBvcHRpb24u IEFueSBmbGFzaCB3cml0ZXMgZG9uZSBieSB0aGUgZ3Vlc3Qgd2lsbCBpbW1lZGlhdGVseSBiZSBy ZWZsZWN0ZWQKPiBpbnRvIHRoaXMgZmlsZSAoa3ZtdG9vbCBtbWFwJ3MgdGhlIGZpbGUpLgo+Cj4g VGhpcyBpbXBsZW1lbnRzIGEgQ0ZJIGZsYXNoIHVzaW5nIHRoZSAiSW50ZWwvU2hhcnAgZXh0ZW5k ZWQgY29tbWFuZAo+IHNldCIsIGFzIHNwZWNpZmllZCBpbjoKPiAtIEpFREVDIEpFU0Q2OC4wMQo+ IC0gSkVERUMgSkVQMTM3Qgo+IC0gSW50ZWwgQXBwbGljYXRpb24gTm90ZSA2NDYKPiBTb21lIGdh cHMgaW4gdGhvc2Ugc3BlY3MgaGF2ZSBiZWVuIGZpbGxlZCBieSBsb29raW5nIGF0IHJlYWwgZGV2 aWNlcyBhbmQKPiBvdGhlciBpbXBsZW1lbnRhdGlvbnMgKFFFTVUsIExpbnV4IGtlcm5lbCBkcml2 ZXIpLgo+Cj4gQXQgdGhlIG1vbWVudCB0aGlzIHJlbGllcyBvbiBEVCB0byBhZHZlcnRpc2UgdGhl IGJhc2UgYWRkcmVzcyBvZiB0aGUKPiBmbGFzaCBtZW1vcnkgKG1hcHBlZCBpbnRvIHRoZSBNTUlP IGFkZHJlc3Mgc3BhY2UpIGFuZCBpcyBvbmx5IGVuYWJsZWQKPiBmb3IgQVJNL0FSTTY0LiBUaGUg ZW11bGF0aW9uIGl0c2VsZiBpcyBhcmNoaXRlY3R1cmUgYWdub3N0aWMsIHRob3VnaC4KPgo+IFRo aXMgaXMgb25lIG1pc3NpbmcgcGllY2UgdG93YXJkIGEgd29ya2luZyBVRUZJIGJvb3Qgd2l0aCBr dm10b29sIG9uCj4gQVJNIGd1ZXN0cywgdGhlIG90aGVyIGlzIHRvIHByb3ZpZGUgd3JpdGFibGUg UENJIEJBUnMsIHdoaWNoIGlzIFdJUC4KPgo+IFNpZ25lZC1vZmYtYnk6IFJhcGhhZWwgR2F1bHQg PHJhcGhhZWwuZ2F1bHRAYXJtLmNvbT4KPiBbQW5kcmU6IHJld3JpdGluZyBhbmQgZml4aW5nXQo+ IFNpZ25lZC1vZmYtYnk6IEFuZHJlIFByenl3cmEgPGFuZHJlLnByenl3YXJhQGFybS5jb20+Cj4g LS0tCj4gSGksCj4KPiBhbiB1cGRhdGUgYWRkcmVzc2luZyBXaWxsJ3MgY29tbWVudHMuIEkgYWRk ZWQgY29hcnNlIGdyYWluZWQgbG9ja2luZwo+IHRvIHRoZSBNTUlPIGhhbmRsZXIsIHRvIHByZXZl bnQgY29uY3VycmVudCB2Q1BVIGFjY2Vzc2VzIGZyb20gbWVzc2luZyB1cAo+IHRoZSBpbnRlcm5h bCBDRkkgZmxhc2ggc3RhdGUgbWFjaGluZS4KPiBJIGFsc28gZm9sZGVkIHRoZSBhY3R1YWwgZmxh c2ggYXJyYXkgcmVhZCBhY2Nlc3MgaW50byB0aGUgTU1JTyBoYW5kbGVyCj4gYW5kIGZpeGVkIHRo ZSBvdGhlciBzbWFsbCBpc3N1ZXMuCj4KPiBDaGVlcnMsCj4gQW5kcmUKPgo+ICBNYWtlZmlsZSAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDYgKwo+ICBhcm0vaW5jbHVkZS9hcm0tY29tbW9u L2t2bS1hcmNoLmggfCAgIDMgKwo+ICBidWlsdGluLXJ1bi5jICAgICAgICAgICAgICAgICAgICAg fCAgIDIgKwo+ICBody9jZmlfZmxhc2guYyAgICAgICAgICAgICAgICAgICAgfCA1NDYgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCj4gIGluY2x1ZGUva3ZtL2t2bS1jb25maWcuaCAgICAg ICAgICB8ICAgMSArCj4gIGluY2x1ZGUva3ZtL3V0aWwuaCAgICAgICAgICAgICAgICB8ICAgNSAr Cj4gIDYgZmlsZXMgY2hhbmdlZCwgNTYzIGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGh3L2NmaV9mbGFzaC5jCj4KPiBkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQo+ IGluZGV4IDM4NjIxMTJjLi43ZWQ2ZmI1ZSAxMDA2NDQKPiAtLS0gYS9NYWtlZmlsZQo+ICsrKyBi L01ha2VmaWxlCj4gQEAgLTE3MCw2ICsxNzAsNyBAQCBpZmVxICgkKEFSQ0gpLCBhcm0pCj4gIAlD RkxBR1MJCSs9IC1tYXJjaD1hcm12Ny1hCj4gIAo+ICAJQVJDSF9XQU5UX0xJQkZEVCA6PSB5Cj4g KwlBUkNIX0hBU19GTEFTSF9NRU0gOj0geQo+ICBlbmRpZgo+ICAKPiAgIyBBUk02NAo+IEBAIC0x ODIsNiArMTgzLDcgQEAgaWZlcSAoJChBUkNIKSwgYXJtNjQpCj4gIAlBUkNIX0lOQ0xVREUJKz0g LUlhcm0vYWFyY2g2NC9pbmNsdWRlCj4gIAo+ICAJQVJDSF9XQU5UX0xJQkZEVCA6PSB5Cj4gKwlB UkNIX0hBU19GTEFTSF9NRU0gOj0geQo+ICBlbmRpZgo+ICAKPiAgaWZlcSAoJChBUkNIKSxtaXBz KQo+IEBAIC0yNjEsNiArMjYzLDEwIEBAIGlmZXEgKHksJChBUkNIX0hBU19GUkFNRUJVRkZFUikp Cj4gIAllbmRpZgo+ICBlbmRpZgo+ICAKPiAraWZlcSAoeSwkKEFSQ0hfSEFTX0ZMQVNIX01FTSkp Cj4gKwlPQkpTCSs9IGh3L2NmaV9mbGFzaC5vCj4gK2VuZGlmCj4gKwo+ICBpZmVxICgkKGNhbGwg dHJ5LWJ1aWxkLCQoU09VUkNFX1pMSUIpLCQoQ0ZMQUdTKSwkKExERkxBR1MpIC1seikseSkKPiAg CUNGTEFHU19EWU5PUFQJKz0gLURDT05GSUdfSEFTX1pMSUIKPiAgCUxJQlNfRFlOT1BUCSs9IC1s ego+IGRpZmYgLS1naXQgYS9hcm0vaW5jbHVkZS9hcm0tY29tbW9uL2t2bS1hcmNoLmggYi9hcm0v aW5jbHVkZS9hcm0tY29tbW9uL2t2bS1hcmNoLmgKPiBpbmRleCBiOWQ0ODZkNS4uMmJiMDg1ZjQg MTAwNjQ0Cj4gLS0tIGEvYXJtL2luY2x1ZGUvYXJtLWNvbW1vbi9rdm0tYXJjaC5oCj4gKysrIGIv YXJtL2luY2x1ZGUvYXJtLWNvbW1vbi9rdm0tYXJjaC5oCj4gQEAgLTIxLDYgKzIxLDkgQEAKPiAg I2RlZmluZSBBUk1fR0lDX0RJU1RfU0laRQkweDEwMDAwCj4gICNkZWZpbmUgQVJNX0dJQ19DUFVJ X1NJWkUJMHgyMDAwMAo+ICAKPiArI2RlZmluZSBBUk1fRkxBU0hfTU1JT19CQVNFCTB4MjAwMDAw MAkJLyogMzIgTUIgKi8KPiArI2RlZmluZSBLVk1fRkxBU0hfTU1JT19CQVNFCUFSTV9GTEFTSF9N TUlPX0JBU0UKPiArCj4gICNkZWZpbmUgQVJNX0lPUE9SVF9TSVpFCQkoQVJNX01NSU9fQVJFQSAt IEFSTV9JT1BPUlRfQVJFQSkKPiAgI2RlZmluZSBBUk1fVklSVElPX01NSU9fU0laRQkoQVJNX0FY SV9BUkVBIC0gKEFSTV9NTUlPX0FSRUEgKyBBUk1fR0lDX1NJWkUpKQo+ICAjZGVmaW5lIEFSTV9Q Q0lfQ0ZHX1NJWkUJKDFVTEwgPDwgMjQpCj4gZGlmZiAtLWdpdCBhL2J1aWx0aW4tcnVuLmMgYi9i dWlsdGluLXJ1bi5jCj4gaW5kZXggZjhkYzZjNzIuLmRmOGM2NzQxIDEwMDY0NAo+IC0tLSBhL2J1 aWx0aW4tcnVuLmMKPiArKysgYi9idWlsdGluLXJ1bi5jCj4gQEAgLTEzOCw2ICsxMzgsOCBAQCB2 b2lkIGt2bV9ydW5fc2V0X3dyYXBwZXJfc2FuZGJveCh2b2lkKQo+ICAJCQkiS2VybmVsIGNvbW1h bmQgbGluZSBhcmd1bWVudHMiKSwJCVwKPiAgCU9QVF9TVFJJTkcoJ2YnLCAiZmlybXdhcmUiLCAm KGNmZyktPmZpcm13YXJlX2ZpbGVuYW1lLCAiZmlybXdhcmUiLFwKPiAgCQkJIkZpcm13YXJlIGlt YWdlIHRvIGJvb3QgaW4gdmlydHVhbCBtYWNoaW5lIiksCVwKPiArCU9QVF9TVFJJTkcoJ0YnLCAi Zmxhc2giLCAmKGNmZyktPmZsYXNoX2ZpbGVuYW1lLCAiZmxhc2giLFwKPiArCQkJIkZsYXNoIGlt YWdlIHRvIHByZXNlbnQgdG8gdmlydHVhbCBtYWNoaW5lIiksCVwKPiAgCQkJCQkJCQkJXAo+ICAJ T1BUX0dST1VQKCJOZXR3b3JraW5nIG9wdGlvbnM6IiksCQkJCVwKPiAgCU9QVF9DQUxMQkFDS19E RUZBVUxUKCduJywgIm5ldHdvcmsiLCBOVUxMLCAibmV0d29yayBwYXJhbXMiLAlcCj4gZGlmZiAt LWdpdCBhL2h3L2NmaV9mbGFzaC5jIGIvaHcvY2ZpX2ZsYXNoLmMKPiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+IGluZGV4IDAwMDAwMDAwLi5kN2MwZTdlOAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9o dy9jZmlfZmxhc2guYwo+IEBAIC0wLDAgKzEsNTQ2IEBACj4gKyNpbmNsdWRlIDxzdGRib29sLmg+ Cj4gKyNpbmNsdWRlIDxzdGRsaWIuaD4KPiArI2luY2x1ZGUgPHN0cmluZy5oPgo+ICsjaW5jbHVk ZSA8bGludXgvYml0b3BzLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KPiArI2luY2x1ZGUg PGxpbnV4L3NpemVzLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+ICsKPiArI2luY2x1 ZGUgImt2bS9rdm0uaCIKPiArI2luY2x1ZGUgImt2bS9rdm0tYXJjaC5oIgo+ICsjaW5jbHVkZSAi a3ZtL2RldmljZXMuaCIKPiArI2luY2x1ZGUgImt2bS9mZHQuaCIKPiArI2luY2x1ZGUgImt2bS9t dXRleC5oIgo+ICsjaW5jbHVkZSAia3ZtL3V0aWwuaCIKPiArCj4gKy8qIFRoZSBFREsyIGRyaXZl ciBoYXJkY29kZXMgdHdvIDE2LWJpdCBjaGlwcyBvbiBhIDMyLWJpdCBidXMuICovCj4gKyNkZWZp bmUgQ0ZJX05SX0ZMQVNIX0NISVBTCQkJMgo+ICsKPiArLyogV2UgYWx3YXlzIGVtdWxhdGUgYSAz MiBiaXQgYnVzIHdpZHRoLiAqLwo+ICsjZGVmaW5lIENGSV9CVVNfV0lEVEgJCQkJNAo+ICsKPiAr LyogVGhlICplZmZlY3RpdmUqIHNpemUgb2YgYW4gZXJhc2UgYmxvY2sgKG92ZXIgYWxsIGNoaXBz KSAqLwo+ICsjZGVmaW5lIEZMQVNIX0JMT0NLX1NJWkUJCQlTWl82NEsKPiArCj4gKyNkZWZpbmUg UFJPR1JBTV9CVUZGX1NJWkVfQklUUwkJCTcKPiArI2RlZmluZSBQUk9HUkFNX0JVRkZfU0laRQkJ CSgxVSA8PCBQUk9HUkFNX0JVRkZfU0laRV9CSVRTKQo+ICsKPiArLyogQ0ZJIGNvbW1hbmRzICov Cj4gKyNkZWZpbmUgQ0ZJX0NNRF9MT0NLX0JMT0NLCQkJMHgwMQo+ICsjZGVmaW5lIENGSV9DTURf QUxURVJOQVRFX1dPUkRfUFJPR1JBTV9TRVRVUAkweDEwCj4gKyNkZWZpbmUgQ0ZJX0NNRF9CTE9D S19FUkFTRV9TRVRVUAkJMHgyMAo+ICsjZGVmaW5lIENGSV9DTURfV09SRF9QUk9HUkFNX1NFVFVQ CQkweDQwCj4gKyNkZWZpbmUgQ0ZJX0NNRF9DTEVBUl9TVEFUVVNfUkVHSVNURVIJCTB4NTAKPiAr I2RlZmluZSBDRklfQ01EX0xPQ0tfQkxPQ0tfU0VUVVAJCTB4NjAKPiArI2RlZmluZSBDRklfQ01E X1JFQURfU1RBVFVTX1JFR0lTVEVSCQkweDcwCj4gKyNkZWZpbmUgQ0ZJX0NNRF9SRUFEX0pFREVD CQkJMHg5MAo+ICsjZGVmaW5lIENGSV9DTURfUkVBRF9DRklfUVVFUlkJCQkweDk4Cj4gKyNkZWZp bmUgQ0ZJX0NNRF9CVUZGRVJFRF9QUk9HUkFNX0NPTkZJUk0JMHhkMAo+ICsjZGVmaW5lIENGSV9D TURfQkxPQ0tfRVJBU0VfQ09ORklSTQkJMHhkMAo+ICsjZGVmaW5lIENGSV9DTURfVU5MT0NLX0JM T0NLCQkJMHhkMAo+ICsjZGVmaW5lIENGSV9DTURfQlVGRkVSRURfUFJPR1JBTV9TRVRVUAkJMHhl OAo+ICsjZGVmaW5lIENGSV9DTURfUkVBRF9BUlJBWQkJCTB4ZmYKPiArCj4gKy8qCj4gKyAqIENG SSBxdWVyeSB0YWJsZSBjb250ZW50cywgYXMgZmFyIGFzIGl0IGlzIGNvbnN0YW50Lgo+ICsgKi8K PiArI2RlZmluZSBDRklfR0VPTV9PRkZTRVQJCQkJMHgyNwo+ICtzdGF0aWMgdTggY2ZpX3F1ZXJ5 X3RhYmxlW10gPSB7Cj4gKwkJLyogb2Zmc2V0IDB4MTA6IENGSSBxdWVyeSBpZGVudGlmaWNhdGlv biBzdHJpbmcgKi8KPiArCSdRJywgJ1InLCAnWScsCQkvKiBJRCBzdHJpbmcgKi8KPiArCTB4MDEs IDB4MDAsCQkvKiBwcmltYXJ5IGNvbW1hbmQgc2V0OiBJbnRlbC9TaGFycCBleHRlbmRlZCAqLwo+ ICsJMHgzMSwgMHgwMCwJCS8qIGFkZHJlc3Mgb2YgcHJpbWFyeSBleHRlbmRlZCBxdWVyeSB0YWJs ZSAqLwo+ICsJMHgwMCwgMHgwMCwJCS8qIGFsdGVybmF0aXZlIGNvbW1hbmQgc2V0OiB1bnVzZWQg Ki8KPiArCTB4MDAsIDB4MDAsCQkvKiBhZGRyZXNzIG9mIGFsdGVybmF0aXZlIGV4dGVuZGVkIHF1 ZXJ5IHRhYmxlKi8KPiArCQkvKiBvZmZzZXQgMHgxYjogc3lzdGVtIGludGVyZmFjZSBpbmZvcm1h dGlvbiAqLwo+ICsJMHg0NSwJCQkvKiBtaW5pbXVtIFZjYyB2b2x0YWdlOiA0LjVWICovCj4gKwkw eDU1LAkJCS8qIG1heGltdW0gVmNjIHZvbHRhZ2U6IDUuNVYgKi8KPiArCTB4MDAsCQkJLyogbWlu aW11bSBWcHAgdm9sdGFnZTogMC4wViAodW51c2VkKSAqLwo+ICsJMHgwMCwJCQkvKiBtYXhpbXVt IFZwcCB2b2x0YWdlOiAwLjBWICoodW51c2VkKSAqLwo+ICsJMHgwMSwJCQkvKiB0aW1lb3V0IGZv ciBzaW5nbGUgd29yZCBwcm9ncmFtOiAyIHVzICovCj4gKwkweDAxLAkJCS8qIHRpbWVvdXQgZm9y IG11bHRpLWJ5dGUgcHJvZ3JhbTogMiB1cyAqLwo+ICsJMHgwMSwJCQkvKiB0aW1lb3V0IGZvciBi bG9jayBlcmFzZTogMiBtcyAqLwo+ICsJMHgwMCwJCQkvKiB0aW1lb3V0IGZvciBmdWxsIGNoaXAg ZXJhc2U6IG5vdCBzdXBwb3J0ZWQgKi8KPiArCTB4MDAsCQkJLyogbWF4IHRpbWVvdXQgZm9yIHNp bmdsZSB3b3JkIHByb2dyYW06IDF4ICovCj4gKwkweDAwLAkJCS8qIG1heCB0aW1lb3V0IGZvciBt dWxpdC1ieXRlIHByb2dyYW06IDF4ICovCj4gKwkweDAwLAkJCS8qIG1heCB0aW1lb3V0IGZvciBi bG9jayBlcmFzZTogMXggKi8KPiArCTB4MDAsCQkJLyogbWF4IHRpbWVvdXQgZm9yIGNoaXAgZXJh c2U6IG5vdCBzdXBwb3J0ZWQgKi8KPiArCQkvKiBvZmZzZXQgMHgyNzogZmxhc2ggZ2VvbWV0cnkg aW5mb3JtYXRpb24gKi8KPiArCTB4MDAsCQkJLyogc2l6ZSBpbiBwb3dlci1vZi0yIGJ5dGVzLCBm aWxsZWQgbGF0ZXIgKi8KPiArCTB4MDYsIDB4MDAsCQkvKiBpbnRlcmZhY2UgZGVzY3JpcHRpb246 IDMyIGFuZCAxNiBiaXRzICovCgpJIGRvbid0IHRoaW5rIHRoaXMgaXMgY29ycmVjdC4gRnJvbSBJ bnRlbCBTdHJhdGFGbGFzaCBFbWJlZGRlZCBNZW1vcnkgKFAzMCkKRmFtaWx5LCB0YWJsZSAzNDoK CiIibiIgc3VjaCB0aGF0IG4rMSBzcGVjaWZpZXMgdGhlIGJpdCBmaWVsZCB0aGF0IHJlcHJlc2Vu dHMgdGhlIGZsYXNoIGRldmljZSB3aWR0aApjYXBhYmlsaXRpZXMgYXMgZGVzY3JpYmVkIGluIHRo ZSB0YWJsZSIuCgpJZiB5b3Ugd2FudCB0byBhZHZlcnRpc2UgMzIgYW5kIDE2IGJpdCB3cml0ZSBj YXBhYmlsaXRpZXMsIGl0IHNob3VsZCBiZSA1IGJlY2F1c2UKNSsxPTYuIFRoaXMgaXMgYWxzbyB0 aGUgdmFsdWUgdGhhdCB0aGUgTGludXgga2VybmVsIGNoZWNrcyBmb3IgKHNlZQppbmNsdWRlL2xp bnV4L210ZC9jZmkuaCwgZGVmaW5lIENGSV9JTlRFUkZBQ0VfWDE2X0JZX1gzMl9BU1lOQyIpLiA2 IGFjdHVhbGx5IG1lYW5zCjMyLCAxNiBhbmQgOCBiaXQgYWNjZXNzZXMuCgpUaGlzIGJlZ3MgYW5v dGhlciBxdWVzdGlvbjogd2h5IGRvIHdlIHN1cHBvcnQgYm90aCAxNiBhbmQgMzIgYml0IGFjY2Vz c2VzIGluc3RlYWQKb2Ygc3VwcG9ydGluZyBvbmx5IDMyIGJpdD8KCj4gKwlQUk9HUkFNX0JVRkZf U0laRV9CSVRTICsgMSAtIENGSV9OUl9GTEFTSF9DSElQUywgMHgwMCwKPiArCQkJCS8qIG51bWJl ciBvZiBtdWx0aS1ieXRlIHdyaXRlcyAqLwoKU2hvdWxkbid0IHRoZSBjb21tZW50IGJlIG1heGlt dW0gbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSB3cml0ZSBidWZmZXI/Cgo+ICsJMHgwMSwJCQkvKiBv bmUgZXJhc2UgYmxvY2sgcmVnaW9uICovCj4gKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiBu dW1iZXIgYW5kIHNpemUgb2YgZXJhc2UgYmxvY2tzLCBmaWxsZWQgKi8KPiArCQkvKiBvZmZzZXQg MHgzMTogSW50ZWwgcHJpbWFyeSBhbGdvcml0aG0gZXh0ZW5kZWQgcXVlcnkgdGFibGUgKi8KPiAr CSdQJywgJ1InLCAnSScsCj4gKwknMScsICcwJywJCS8qIHZlcnNpb24gMS4wICovCj4gKwkweGEw LCAweDAwLCAweDAwLCAweDAwLCAvKiBvcHRpb25hbCBmZWF0dXJlczogaW5zdGFudCBsb2NrICYg cG0tcmVhZCAqLwo+ICsJMHgwMCwJCQkvKiBubyBmdW5jdGlvbnMgYWZ0ZXIgc3VzcGVuZCAqLwo+ ICsJMHgwMSwgMHgwMCwJCS8qIG9ubHkgbG9jayBiaXQgc3VwcG9ydGVkICovCj4gKwkweDUwLAkJ CS8qIGJlc3QgVmNjIHZhbHVlOiA1LjBWICovCj4gKwkweDAwLAkJCS8qIGJlc3QgVnBwIHZhbHVl OiAwLjBWICh1bnVzZWQpICovCj4gKwkweDAxLAkJCS8qIG51bWJlciBvZiBwcm90ZWN0aW9uIHJl Z2lzdGVyIGZpZWxkcyAqLwo+ICsJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwJLyogcHJvdGVjdGlv biBmaWVsZCAxIGRlc2NyaXB0aW9uICovCj4gK307CgpBcyBhbiBhc2lkZSwgSSBmb3VuZCBpdCBp bXBvc3NpYmxlIHRvIHJldmlldyB0aGUgY2ZpX3F1ZXJ5X3RhYmxlIGFycmF5IGluIGl0cwpjdXJy ZW50IGZvcm0uIFRoaXMgaXMgaG93IEkgd3JvdGUgdGhlIGFycmF5IHNvIEkgY291bGQgcmVhZCBp dC4gSSBhbHNvIHRvb2sgdGhlCmxpYmVydHkgdG8gcmVtb3ZlIHRoZSBvZmZzZXQgd2hlbiBpbmRl eGluZyB0aGUgYXJyYXksIG1ha2luZyByZWFkX2NmaSBsZXNzIGVycm9yCnByb25lLCBpbiBteSBv cGluaW9uOgoKZGlmZiAtLWdpdCBhL2h3L2NmaV9mbGFzaC5jIGIvaHcvY2ZpX2ZsYXNoLmMKaW5k ZXggZDdjMGU3ZTgwZDY5Li42NWE5MGUyODhiZTggMTAwNjQ0Ci0tLSBhL2h3L2NmaV9mbGFzaC5j CisrKyBiL2h3L2NmaV9mbGFzaC5jCkBAIC00Niw0NSArNDYsNDMgQEAKwqAgKi8KwqAjZGVmaW5l IENGSV9HRU9NX09GRlNFVMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4MjcKwqBzdGF0aWMgdTggY2ZpX3F1ZXJ5X3RhYmxlW10g PSB7Ci3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIG9mZnNldCAweDEwOiBDRkkgcXVl cnkgaWRlbnRpZmljYXRpb24gc3RyaW5nICovCi3CoMKgwqDCoMKgwqAgJ1EnLCAnUicsICdZJyzC oMKgwqDCoMKgwqDCoMKgwqAgLyogSUQgc3RyaW5nICovCi3CoMKgwqDCoMKgwqAgMHgwMSwgMHgw MCzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogcHJpbWFyeSBjb21tYW5kIHNldDogSW50ZWwv U2hhcnAgZXh0ZW5kZWQgKi8KLcKgwqDCoMKgwqDCoCAweDMxLCAweDAwLMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAvKiBhZGRyZXNzIG9mIHByaW1hcnkgZXh0ZW5kZWQgcXVlcnkgdGFibGUgKi8K LcKgwqDCoMKgwqDCoCAweDAwLCAweDAwLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBhbHRl cm5hdGl2ZSBjb21tYW5kIHNldDogdW51c2VkICovCi3CoMKgwqDCoMKgwqAgMHgwMCwgMHgwMCzC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogYWRkcmVzcyBvZiBhbHRlcm5hdGl2ZSBleHRlbmRl ZCBxdWVyeSB0YWJsZSovCi3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIG9mZnNldCAw eDFiOiBzeXN0ZW0gaW50ZXJmYWNlIGluZm9ybWF0aW9uICovCi3CoMKgwqDCoMKgwqAgMHg0NSzC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogbWluaW11bSBWY2Mgdm9sdGFn ZTogNC41ViAqLwotwqDCoMKgwqDCoMKgIDB4NTUswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIC8qIG1heGltdW0gVmNjIHZvbHRhZ2U6IDUuNVYgKi8KLcKgwqDCoMKgwqDCoCAw eDAwLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBtaW5pbXVtIFZwcCB2 b2x0YWdlOiAwLjBWICh1bnVzZWQpICovCi3CoMKgwqDCoMKgwqAgMHgwMCzCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogbWF4aW11bSBWcHAgdm9sdGFnZTogMC4wViAqKHVu dXNlZCkgKi8KLcKgwqDCoMKgwqDCoCAweDAxLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAvKiB0aW1lb3V0IGZvciBzaW5nbGUgd29yZCBwcm9ncmFtOiAyIHVzICovCi3CoMKg wqDCoMKgwqAgMHgwMSzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogdGlt ZW91dCBmb3IgbXVsdGktYnl0ZSBwcm9ncmFtOiAyIHVzICovCi3CoMKgwqDCoMKgwqAgMHgwMSzC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogdGltZW91dCBmb3IgYmxvY2sg ZXJhc2U6IDIgbXMgKi8KLcKgwqDCoMKgwqDCoCAweDAwLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAvKiB0aW1lb3V0IGZvciBmdWxsIGNoaXAgZXJhc2U6IG5vdCBzdXBwb3J0 ZWQgKi8KLcKgwqDCoMKgwqDCoCAweDAwLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAvKiBtYXggdGltZW91dCBmb3Igc2luZ2xlIHdvcmQgcHJvZ3JhbTogMXggKi8KLcKgwqDC oMKgwqDCoCAweDAwLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBtYXgg dGltZW91dCBmb3IgbXVsaXQtYnl0ZSBwcm9ncmFtOiAxeCAqLwotwqDCoMKgwqDCoMKgIDB4MDAs wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIG1heCB0aW1lb3V0IGZvciBi bG9jayBlcmFzZTogMXggKi8KLcKgwqDCoMKgwqDCoCAweDAwLMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAvKiBtYXggdGltZW91dCBmb3IgY2hpcCBlcmFzZTogbm90IHN1cHBv cnRlZCAqLwotwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBvZmZzZXQgMHgyNzogZmxh c2ggZ2VvbWV0cnkgaW5mb3JtYXRpb24gKi8KLcKgwqDCoMKgwqDCoCAweDAwLMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBzaXplIGluIHBvd2VyLW9mLTIgYnl0ZXMsIGZp bGxlZCBsYXRlciAqLwotwqDCoMKgwqDCoMKgIDB4MDYsIDB4MDAswqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIC8qIGludGVyZmFjZSBkZXNjcmlwdGlvbjogMzIgYW5kIDE2IGJpdHMgKi8KLcKgwqDC oMKgwqDCoCBQUk9HUkFNX0JVRkZfU0laRV9CSVRTICsgMSAtIENGSV9OUl9GTEFTSF9DSElQUywg MHgwMCwKK8KgwqDCoMKgwqDCoCBbMHgxMF0gPSAnUScsICdSJywgJ1knLCAvKiBJRCBzdHJpbmcg Ki8KK8KgwqDCoMKgwqDCoCBbMHgxM10gPSAweDAxLCAweDAwLMKgwqDCoCAvKiBwcmltYXJ5IGNv bW1hbmQgc2V0OiBJbnRlbC9TaGFycCBleHRlbmRlZCAqLworwqDCoMKgwqDCoMKgIFsweDE1XSA9 IDB4MzEsIDB4MDAswqDCoMKgIC8qIGFkZHJlc3Mgb2YgcHJpbWFyeSBleHRlbmRlZCBxdWVyeSB0 YWJsZSAqLworwqDCoMKgwqDCoMKgIFsweDE3XSA9IDB4MDAsIDB4MDAswqDCoMKgIC8qIGFsdGVy bmF0aXZlIGNvbW1hbmQgc2V0OiB1bnVzZWQgKi8KK8KgwqDCoMKgwqDCoCBbMHgxOV0gPSAweDAw LCAweDAwLMKgwqDCoCAvKiBhZGRyZXNzIG9mIGFsdGVybmF0aXZlIGV4dGVuZGVkIHF1ZXJ5IHRh YmxlKi8KK8KgwqDCoMKgwqDCoCAvKiBTeXN0ZW0gaW50ZXJmYWNlIGluZm9ybWF0aW9uICovCivC oMKgwqDCoMKgwqAgWzB4MWJdID0gMHg0NSzCoMKgwqDCoMKgwqDCoMKgwqAgLyogbWluaW11bSBW Y2Mgdm9sdGFnZTogNC41ViAqLworwqDCoMKgwqDCoMKgIFsweDFjXSA9IDB4NTUswqDCoMKgwqDC oMKgwqDCoMKgIC8qIG1heGltdW0gVmNjIHZvbHRhZ2U6IDUuNVYgKi8KK8KgwqDCoMKgwqDCoCBb MHgxZF0gPSAweDAwLMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBtaW5pbXVtIFZwcCB2b2x0YWdlOiAw LjBWICh1bnVzZWQpICovCivCoMKgwqDCoMKgwqAgWzB4MWVdID0gMHgwMCzCoMKgwqDCoMKgwqDC oMKgwqAgLyogbWF4aW11bSBWcHAgdm9sdGFnZTogMC4wViAqKHVudXNlZCkgKi8KK8KgwqDCoMKg wqDCoCBbMHgxZl0gPSAweDAxLMKgwqDCoMKgwqDCoMKgwqDCoCAvKiB0aW1lb3V0IGZvciBzaW5n bGUgd29yZCBwcm9ncmFtOiAyIHVzICovCivCoMKgwqDCoMKgwqAgWzB4MjBdID0gMHgwMSzCoMKg wqDCoMKgwqDCoMKgwqAgLyogdGltZW91dCBmb3IgbXVsdGktYnl0ZSBwcm9ncmFtOiAyIHVzICov CivCoMKgwqDCoMKgwqAgWzB4MjFdID0gMHgwMSzCoMKgwqDCoMKgwqDCoMKgwqAgLyogdGltZW91 dCBmb3IgYmxvY2sgZXJhc2U6IDIgbXMgKi8KK8KgwqDCoMKgwqDCoCBbMHgyMl0gPSAweDAwLMKg wqDCoMKgwqDCoMKgwqDCoCAvKiB0aW1lb3V0IGZvciBmdWxsIGNoaXAgZXJhc2U6IG5vdCBzdXBw b3J0ZWQgKi8KK8KgwqDCoMKgwqDCoCBbMHgyM10gPSAweDAwLMKgwqDCoMKgwqDCoMKgwqDCoCAv KiBtYXggdGltZW91dCBmb3Igc2luZ2xlIHdvcmQgcHJvZ3JhbTogMXggKi8KK8KgwqDCoMKgwqDC oCBbMHgyNF0gPSAweDAwLMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBtYXggdGltZW91dCBmb3IgbXVs aXQtYnl0ZSBwcm9ncmFtOiAxeCAqLworwqDCoMKgwqDCoMKgIFsweDI1XSA9IDB4MDAswqDCoMKg wqDCoMKgwqDCoMKgIC8qIG1heCB0aW1lb3V0IGZvciBibG9jayBlcmFzZTogMXggKi8KK8KgwqDC oMKgwqDCoCBbMHgyNl0gPSAweDAwLMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBtYXggdGltZW91dCBm b3IgY2hpcCBlcmFzZTogbm90IHN1cHBvcnRlZCAqLworwqDCoMKgwqDCoMKgIC8qIEZsYXNoIGdl b21ldHJ5IGluZm9ybWF0aW9uICovCivCoMKgwqDCoMKgwqAgWzB4MjddID0gMHgwMCzCoMKgwqDC oMKgwqDCoMKgwqAgLyogc2l6ZSBpbiBwb3dlci1vZi0yIGJ5dGVzLCBmaWxsZWQgbGF0ZXIgKi8K K8KgwqDCoMKgwqDCoCBbMHgyOF0gPSAweDA2LCAweDAwLMKgwqDCoCAvKiBpbnRlcmZhY2UgZGVz Y3JpcHRpb246IDMyIGFuZCAxNiBiaXRzICovCivCoMKgwqDCoMKgwqAgWzB4MmFdID0gUFJPR1JB TV9CVUZGX1NJWkVfQklUUyArIDEgLSBDRklfTlJfRkxBU0hfQ0hJUFMsIDB4MDAsCsKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8q IG51bWJlciBvZiBtdWx0aS1ieXRlIHdyaXRlcyAqLwotwqDCoMKgwqDCoMKgIDB4MDEswqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIG9uZSBlcmFzZSBibG9jayByZWdpb24g Ki8KLcKgwqDCoMKgwqDCoCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiBudW1iZXIgYW5kIHNp emUgb2YgZXJhc2UgYmxvY2tzLCBmaWxsZWQgKi8KLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgLyogb2Zmc2V0IDB4MzE6IEludGVsIHByaW1hcnkgYWxnb3JpdGhtIGV4dGVuZGVkIHF1ZXJ5 IHRhYmxlICovCi3CoMKgwqDCoMKgwqAgJ1AnLCAnUicsICdJJywKLcKgwqDCoMKgwqDCoCAnMScs ICcwJyzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIHZlcnNpb24gMS4wICovCi3CoMKg wqDCoMKgwqAgMHhhMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogb3B0aW9uYWwgZmVhdHVyZXM6IGlu c3RhbnQgbG9jayAmIHBtLXJlYWQgKi8KLcKgwqDCoMKgwqDCoCAweDAwLMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBubyBmdW5jdGlvbnMgYWZ0ZXIgc3VzcGVuZCAqLwot wqDCoMKgwqDCoMKgIDB4MDEsIDB4MDAswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIG9ubHkg bG9jayBiaXQgc3VwcG9ydGVkICovCi3CoMKgwqDCoMKgwqAgMHg1MCzCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogYmVzdCBWY2MgdmFsdWU6IDUuMFYgKi8KLcKgwqDCoMKg wqDCoCAweDAwLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBiZXN0IFZw cCB2YWx1ZTogMC4wViAodW51c2VkKSAqLwotwqDCoMKgwqDCoMKgIDB4MDEswqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIG51bWJlciBvZiBwcm90ZWN0aW9uIHJlZ2lzdGVy IGZpZWxkcyAqLwotwqDCoMKgwqDCoMKgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIHByb3Rl Y3Rpb24gZmllbGQgMSBkZXNjcmlwdGlvbiAqLworwqDCoMKgwqDCoMKgIFsweDJjXSA9IDB4MDEs wqDCoMKgwqDCoMKgwqDCoMKgIC8qIG9uZSBlcmFzZSBibG9jayByZWdpb24gKi8KK8KgwqDCoMKg wqDCoCBbMHgyZF0gPSAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiBudW1iZXIgYW5kIHNpemUg b2YgZXJhc2UgYmxvY2tzLCBmaWxsZWQgKi8KK8KgwqDCoMKgwqDCoCAvKiBJbnRlbCBwcmltYXJ5 IGFsZ29yaXRobSBleHRlbmRlZCBxdWVyeSB0YWJsZSAqLworwqDCoMKgwqDCoMKgIFsweDMxXSA9 ICdQJywgJ1InLCAnSScsIC8qIElEIHN0cmluZyAqLworwqDCoMKgwqDCoMKgIFsweDM0XSA9ICcx JywgJzAnLMKgwqDCoMKgwqAgLyogdmVyc2lvbiAxLjAgKi8KK8KgwqDCoMKgwqDCoCBbMHgzNl0g PSAweGEwLCAweDAwLCAweDAwLCAweDAwLCAvKiBvcHRpb25hbCBmZWF0dXJlczogaW5zdGFudCBs b2NrICYKcG0tcmVhZCAqLworwqDCoMKgwqDCoMKgIFsweDQwXSA9IDB4MDAswqDCoMKgwqDCoMKg wqDCoMKgIC8qIG5vIGZ1bmN0aW9ucyBhZnRlciBzdXNwZW5kICovCivCoMKgwqDCoMKgwqAgWzB4 NDFdID0gMHgwMSwgMHgwMCzCoMKgwqAgLyogb25seSBsb2NrIGJpdCBzdXBwb3J0ZWQgKi8KLi4u c2tpcHBpbmcuLi4KK8KgwqDCoMKgwqDCoCBbMHgxMF0gPSAnUScsICdSJywgJ1knLCAvKiBJRCBz dHJpbmcgKi8KK8KgwqDCoMKgwqDCoCBbMHgxM10gPSAweDAxLCAweDAwLMKgwqDCoCAvKiBwcmlt YXJ5IGNvbW1hbmQgc2V0OiBJbnRlbC9TaGFycCBleHRlbmRlZCAqLworwqDCoMKgwqDCoMKgIFsw eDE1XSA9IDB4MzEsIDB4MDAswqDCoMKgIC8qIGFkZHJlc3Mgb2YgcHJpbWFyeSBleHRlbmRlZCBx dWVyeSB0YWJsZSAqLworwqDCoMKgwqDCoMKgIFsweDE3XSA9IDB4MDAsIDB4MDAswqDCoMKgIC8q IGFsdGVybmF0aXZlIGNvbW1hbmQgc2V0OiB1bnVzZWQgKi8KK8KgwqDCoMKgwqDCoCBbMHgxOV0g PSAweDAwLCAweDAwLMKgwqDCoCAvKiBhZGRyZXNzIG9mIGFsdGVybmF0aXZlIGV4dGVuZGVkIHF1 ZXJ5IHRhYmxlKi8KK8KgwqDCoMKgwqDCoCAvKiBTeXN0ZW0gaW50ZXJmYWNlIGluZm9ybWF0aW9u ICovCivCoMKgwqDCoMKgwqAgWzB4MWJdID0gMHg0NSzCoMKgwqDCoMKgwqDCoMKgwqAgLyogbWlu aW11bSBWY2Mgdm9sdGFnZTogNC41ViAqLworwqDCoMKgwqDCoMKgIFsweDFjXSA9IDB4NTUswqDC oMKgwqDCoMKgwqDCoMKgIC8qIG1heGltdW0gVmNjIHZvbHRhZ2U6IDUuNVYgKi8KK8KgwqDCoMKg wqDCoCBbMHgxZF0gPSAweDAwLMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBtaW5pbXVtIFZwcCB2b2x0 YWdlOiAwLjBWICh1bnVzZWQpICovCivCoMKgwqDCoMKgwqAgWzB4MWVdID0gMHgwMCzCoMKgwqDC oMKgwqDCoMKgwqAgLyogbWF4aW11bSBWcHAgdm9sdGFnZTogMC4wViAqKHVudXNlZCkgKi8KK8Kg wqDCoMKgwqDCoCBbMHgxZl0gPSAweDAxLMKgwqDCoMKgwqDCoMKgwqDCoCAvKiB0aW1lb3V0IGZv ciBzaW5nbGUgd29yZCBwcm9ncmFtOiAyIHVzICovCivCoMKgwqDCoMKgwqAgWzB4MjBdID0gMHgw MSzCoMKgwqDCoMKgwqDCoMKgwqAgLyogdGltZW91dCBmb3IgbXVsdGktYnl0ZSBwcm9ncmFtOiAy IHVzICovCivCoMKgwqDCoMKgwqAgWzB4MjFdID0gMHgwMSzCoMKgwqDCoMKgwqDCoMKgwqAgLyog dGltZW91dCBmb3IgYmxvY2sgZXJhc2U6IDIgbXMgKi8KK8KgwqDCoMKgwqDCoCBbMHgyMl0gPSAw eDAwLMKgwqDCoMKgwqDCoMKgwqDCoCAvKiB0aW1lb3V0IGZvciBmdWxsIGNoaXAgZXJhc2U6IG5v dCBzdXBwb3J0ZWQgKi8KK8KgwqDCoMKgwqDCoCBbMHgyM10gPSAweDAwLMKgwqDCoMKgwqDCoMKg wqDCoCAvKiBtYXggdGltZW91dCBmb3Igc2luZ2xlIHdvcmQgcHJvZ3JhbTogMXggKi8KK8KgwqDC oMKgwqDCoCBbMHgyNF0gPSAweDAwLMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBtYXggdGltZW91dCBm b3IgbXVsaXQtYnl0ZSBwcm9ncmFtOiAxeCAqLworwqDCoMKgwqDCoMKgIFsweDI1XSA9IDB4MDAs wqDCoMKgwqDCoMKgwqDCoMKgIC8qIG1heCB0aW1lb3V0IGZvciBibG9jayBlcmFzZTogMXggKi8K K8KgwqDCoMKgwqDCoCBbMHgyNl0gPSAweDAwLMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBtYXggdGlt ZW91dCBmb3IgY2hpcCBlcmFzZTogbm90IHN1cHBvcnRlZCAqLworwqDCoMKgwqDCoMKgIC8qIEZs YXNoIGdlb21ldHJ5IGluZm9ybWF0aW9uICovCivCoMKgwqDCoMKgwqAgWzB4MjddID0gMHgwMCzC oMKgwqDCoMKgwqDCoMKgwqAgLyogc2l6ZSBpbiBwb3dlci1vZi0yIGJ5dGVzLCBmaWxsZWQgbGF0 ZXIgKi8KK8KgwqDCoMKgwqDCoCBbMHgyOF0gPSAweDA2LCAweDAwLMKgwqDCoCAvKiBpbnRlcmZh Y2UgZGVzY3JpcHRpb246IDMyIGFuZCAxNiBiaXRzICovCivCoMKgwqDCoMKgwqAgWzB4MmFdID0g UFJPR1JBTV9CVUZGX1NJWkVfQklUUyArIDEgLSBDRklfTlJfRkxBU0hfQ0hJUFMsIDB4MDAsCsKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIC8qIG51bWJlciBvZiBtdWx0aS1ieXRlIHdyaXRlcyAqLwotwqDCoMKgwqDCoMKgIDB4MDEs wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIG9uZSBlcmFzZSBibG9jayBy ZWdpb24gKi8KLcKgwqDCoMKgwqDCoCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiBudW1iZXIg YW5kIHNpemUgb2YgZXJhc2UgYmxvY2tzLCBmaWxsZWQgKi8KLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgLyogb2Zmc2V0IDB4MzE6IEludGVsIHByaW1hcnkgYWxnb3JpdGhtIGV4dGVuZGVk IHF1ZXJ5IHRhYmxlICovCi3CoMKgwqDCoMKgwqAgJ1AnLCAnUicsICdJJywKLcKgwqDCoMKgwqDC oCAnMScsICcwJyzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIHZlcnNpb24gMS4wICov Ci3CoMKgwqDCoMKgwqAgMHhhMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogb3B0aW9uYWwgZmVhdHVy ZXM6IGluc3RhbnQgbG9jayAmIHBtLXJlYWQgKi8KLcKgwqDCoMKgwqDCoCAweDAwLMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBubyBmdW5jdGlvbnMgYWZ0ZXIgc3VzcGVu ZCAqLwotwqDCoMKgwqDCoMKgIDB4MDEsIDB4MDAswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8q IG9ubHkgbG9jayBiaXQgc3VwcG9ydGVkICovCi3CoMKgwqDCoMKgwqAgMHg1MCzCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogYmVzdCBWY2MgdmFsdWU6IDUuMFYgKi8KLcKg wqDCoMKgwqDCoCAweDAwLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBi ZXN0IFZwcCB2YWx1ZTogMC4wViAodW51c2VkKSAqLwotwqDCoMKgwqDCoMKgIDB4MDEswqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIG51bWJlciBvZiBwcm90ZWN0aW9uIHJl Z2lzdGVyIGZpZWxkcyAqLwotwqDCoMKgwqDCoMKgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8q IHByb3RlY3Rpb24gZmllbGQgMSBkZXNjcmlwdGlvbiAqLworwqDCoMKgwqDCoMKgIFsweDJjXSA9 IDB4MDEswqDCoMKgwqDCoMKgwqDCoMKgIC8qIG9uZSBlcmFzZSBibG9jayByZWdpb24gKi8KK8Kg wqDCoMKgwqDCoCBbMHgyZF0gPSAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiBudW1iZXIgYW5k IHNpemUgb2YgZXJhc2UgYmxvY2tzLCBmaWxsZWQgKi8KK8KgwqDCoMKgwqDCoCAvKiBJbnRlbCBw cmltYXJ5IGFsZ29yaXRobSBleHRlbmRlZCBxdWVyeSB0YWJsZSAqLworwqDCoMKgwqDCoMKgIFsw eDMxXSA9ICdQJywgJ1InLCAnSScsIC8qIElEIHN0cmluZyAqLworwqDCoMKgwqDCoMKgIFsweDM0 XSA9ICcxJywgJzAnLMKgwqDCoMKgwqAgLyogdmVyc2lvbiAxLjAgKi8KK8KgwqDCoMKgwqDCoCBb MHgzNl0gPSAweGEwLCAweDAwLCAweDAwLCAweDAwLCAvKiBvcHRpb25hbCBmZWF0dXJlczogaW5z dGFudCBsb2NrICYKcG0tcmVhZCAqLworwqDCoMKgwqDCoMKgIFsweDQwXSA9IDB4MDAswqDCoMKg wqDCoMKgwqDCoMKgIC8qIG5vIGZ1bmN0aW9ucyBhZnRlciBzdXNwZW5kICovCivCoMKgwqDCoMKg wqAgWzB4NDFdID0gMHgwMSwgMHgwMCzCoMKgwqAgLyogb25seSBsb2NrIGJpdCBzdXBwb3J0ZWQg Ki8KK8KgwqDCoMKgwqDCoCBbMHg0M10gPSAweDUwLMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBiZXN0 IFZjYyB2YWx1ZTogNS4wViAqLworwqDCoMKgwqDCoMKgIFsweDQzXSA9IDB4MDAswqDCoMKgwqDC oMKgwqDCoMKgIC8qIGJlc3QgVnBwIHZhbHVlOiAwLjBWICh1bnVzZWQpICovCivCoMKgwqDCoMKg wqAgWzB4NDRdID0gMHgwMSzCoMKgwqDCoMKgwqDCoMKgwqAgLyogbnVtYmVyIG9mIHByb3RlY3Rp b24gcmVnaXN0ZXIgZmllbGRzICovCivCoMKgwqDCoMKgwqAgWzB4NDVdID0gMHgwMCwgMHgwMCwg MHgwMCwgMHgwMCwvKiBwcm90ZWN0aW9uIGZpZWxkIDEgZGVzY3JpcHRpb24gKi8KwqB9OwrCoAot CsKgLyoKwqAgKiBUaG9zZSBzdGF0ZXMgcmVwcmVzZW50IGEgc3Vic2V0IG9mIHRoZSBDRkkgZmxh c2ggc3RhdGUgbWFjaGluZS4KwqAgKi8KQEAgLTE0MSwxMCArMTM5LDcgQEAgc3RhdGljIGludCBu cl9lcmFzZV9ibG9ja3Moc3RydWN0IGNmaV9mbGFzaF9kZXZpY2UgKnNmZGV2KQrCoCAqLwrCoHN0 YXRpYyB1OCByZWFkX2NmaShzdHJ1Y3QgY2ZpX2ZsYXNoX2RldmljZSAqc2ZkZXYsIHU2NCBhZGRy KQrCoHsKLcKgwqDCoMKgwqDCoCBpZiAoYWRkciA8IDB4MTApwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIC8qIENGSSBpbmZvcm1hdGlvbiBzdGFydHMgYXQgMHgxMCAqLwotwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKLQotwqDCoMKgwqDCoMKgIGlmIChhZGRyIC0g MHgxMCA+IHNpemVvZihjZmlfcXVlcnlfdGFibGUpKSB7CivCoMKgwqDCoMKgwqAgaWYgKGFkZHIg PiBzaXplb2YoY2ZpX3F1ZXJ5X3RhYmxlKSkgewrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcHJfZGVidWcoIkNGSSBxdWVyeSByZWFkIGFjY2VzcyBiZXlvbmQgdGhlIGVuZCBvZiB0YWJs ZSIpOwrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIDA7CsKgwqDCoMKgwqDC oMKgIH0KQEAgLTE2Myw3ICsxNTgsNyBAQCBzdGF0aWMgdTggcmVhZF9jZmkoc3RydWN0IGNmaV9m bGFzaF9kZXZpY2UgKnNmZGV2LCB1NjQgYWRkcikKwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHJldHVybiAoKEZMQVNIX0JMT0NLX1NJWkUgLyAyNTYgKSAvIENGSV9OUl9GTEFTSF9DSElQ UykgPj4gODsKwqDCoMKgwqDCoMKgwqAgfQrCoAotwqDCoMKgwqDCoMKgIHJldHVybiBjZmlfcXVl cnlfdGFibGVbYWRkciAtIDB4MTBdOworwqDCoMKgwqDCoMKgIHJldHVybiBjZmlfcXVlcnlfdGFi bGVbYWRkcl07CsKgfQrCoArCoHN0YXRpYyBib29sIGJsb2NrX2lzX2xvY2tlZChzdHJ1Y3QgY2Zp X2ZsYXNoX2RldmljZSAqc2ZkZXYsIHU2NCBhZGRyKQoKVGhhbmtzLApBbGV4Cj4gKwo+ICsKPiAr LyoKPiArICogVGhvc2Ugc3RhdGVzIHJlcHJlc2VudCBhIHN1YnNldCBvZiB0aGUgQ0ZJIGZsYXNo IHN0YXRlIG1hY2hpbmUuCj4gKyAqLwo+ICtlbnVtIGNmaV9mbGFzaF9zdGF0ZSB7Cj4gKwlSRUFE WSwKPiArCUxPQ0tfU0VUVVAsCj4gKwlXUF9TRVRVUCwKPiArCUJQX1NFVFVQLAo+ICsJQlBfTE9B RCwKPiArCUVSQVNFX1NFVFVQLAo+ICt9Owo+ICsKPiArLyoKPiArICogVGhlIGRldmljZSBjYW4g YmUgaW4gc2V2ZXJhbCAqKlJlYWQqKiBtb2Rlcy4KPiArICogV2UgZG9uJ3QgaW1wbGVtZW50IHRo ZSBhc3luY2hyb25vdXMgYnVyc3QgbW9kZS4KPiArICovCj4gK2VudW0gY2ZpX3JlYWRfbW9kZSB7 Cj4gKwlSRUFEX0FSUkFZLAo+ICsJUkVBRF9TVEFUVVMsCj4gKwlSRUFEX0RFVklDRV9JRCwKPiAr CVJFQURfUVVFUlksCj4gK307Cj4gKwo+ICtzdHJ1Y3QgY2ZpX2ZsYXNoX2RldmljZSB7Cj4gKwlz dHJ1Y3QgZGV2aWNlX2hlYWRlcglkZXZfaGRyOwo+ICsJLyogUHJvdGVjdHMgdGhlIENGSSBzdGF0 ZSBtYWNoaW5lIHZhcmlhYmxlcyBpbiB0aGlzIGRhdGEgc3RydWN0dXJlLiAqLwo+ICsJc3RydWN0 IG11dGV4CQltdXRleDsKPiArCXU2NAkJCWJhc2VfYWRkcjsKPiArCXUzMgkJCXNpemU7Cj4gKwo+ ICsJdm9pZAkJCSpmbGFzaF9tZW1vcnk7Cj4gKwl1OAkJCXByb2dyYW1fYnVmZmVyW1BST0dSQU1f QlVGRl9TSVpFICogNF07Cj4gKwl1bnNpZ25lZCBsb25nCQkqbG9ja19ibTsKPiArCXU2NAkJCWxh c3RfYWRkcmVzczsKPiArCXVuc2lnbmVkIGludAkJYnVmZl93cml0dGVuOwo+ICsJdW5zaWduZWQg aW50CQlwcm9ncmFtX2xlbmd0aDsKPiArCj4gKwllbnVtIGNmaV9mbGFzaF9zdGF0ZQlzdGF0ZTsK PiArCWVudW0gY2ZpX3JlYWRfbW9kZQlyZWFkX21vZGU7Cj4gKwl1MTYJCQlyY3I7Cj4gKwl1OAkJ CXNyOwo+ICt9Owo+ICsKPiArc3RhdGljIGludCBucl9lcmFzZV9ibG9ja3Moc3RydWN0IGNmaV9m bGFzaF9kZXZpY2UgKnNmZGV2KQo+ICt7Cj4gKwlyZXR1cm4gc2ZkZXYtPnNpemUgLyBGTEFTSF9C TE9DS19TSVpFOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBDRkkgcXVlcmllcyBhbHdheXMgZGVhbCB3 aXRoIG9uZSBieXRlIG9mIGluZm9ybWF0aW9uLCBwb3NzaWJseSBtaXJyb3JlZAo+ICsgKiB0byBv dGhlciBieXRlcyBvbiB0aGUgYnVzLiBUaGlzIGlzIGRlYWx0IHdpdGggaW4gdGhlIGNhbGxlcnMu Cj4gKyAqIFRoZSBhZGRyZXNzIHByb3ZpZGVkIGlzIHRoZSBvbmUgZm9yIDgtYml0IGFkZHJlc3Np bmcsIGFuZCB3b3VsZCBuZWVkIHRvCj4gKyAqIGJlIGFkanVzdGVkIGZvciB3aWRlciBhY2Nlc3Nl cy4KPiArICovCj4gK3N0YXRpYyB1OCByZWFkX2NmaShzdHJ1Y3QgY2ZpX2ZsYXNoX2RldmljZSAq c2ZkZXYsIHU2NCBhZGRyKQo+ICt7Cj4gKwlpZiAoYWRkciA8IDB4MTApCQkvKiBDRkkgaW5mb3Jt YXRpb24gc3RhcnRzIGF0IDB4MTAgKi8KPiArCQlyZXR1cm4gMDsKPiArCj4gKwlpZiAoYWRkciAt IDB4MTAgPiBzaXplb2YoY2ZpX3F1ZXJ5X3RhYmxlKSkgewo+ICsJCXByX2RlYnVnKCJDRkkgcXVl cnkgcmVhZCBhY2Nlc3MgYmV5b25kIHRoZSBlbmQgb2YgdGFibGUiKTsKPiArCQlyZXR1cm4gMDsK PiArCX0KPiArCj4gKwkvKiBGaXh1cCBkeW5hbWljIGluZm9ybWF0aW9uIGluIHRoZSBnZW9tZXRy eSBwYXJ0IG9mIHRoZSB0YWJsZS4gKi8KPiArCXN3aXRjaCAoYWRkcikgewo+ICsJY2FzZSBDRklf R0VPTV9PRkZTRVQ6CQkvKiBkZXZpY2Ugc2l6ZSBpbiBieXRlcywgcG93ZXIgb2YgdHdvICovCj4g KwkJcmV0dXJuIHBvdzJfc2l6ZShzZmRldi0+c2l6ZSAvIENGSV9OUl9GTEFTSF9DSElQUyk7Cj4g KwljYXNlIENGSV9HRU9NX09GRlNFVCArIDY6CS8qIG51bWJlciBvZiBlcmFzZSBibG9ja3MsIG1p bnVzIG9uZSAqLwo+ICsJCXJldHVybiAobnJfZXJhc2VfYmxvY2tzKHNmZGV2KSAtIDEpICYgMHhm ZjsKPiArCWNhc2UgQ0ZJX0dFT01fT0ZGU0VUICsgNzoKPiArCQlyZXR1cm4gKG5yX2VyYXNlX2Js b2NrcyhzZmRldikgLSAxKSA+PiA4Owo+ICsJY2FzZSBDRklfR0VPTV9PRkZTRVQgKyA4OgkvKiBl cmFzZSBibG9jayBzaXplLCBpbiB1bml0cyBvZiAyNTYgKi8KPiArCQlyZXR1cm4gKChGTEFTSF9C TE9DS19TSVpFIC8gMjU2ICkgLyBDRklfTlJfRkxBU0hfQ0hJUFMpICYgMHhmZjsKPiArCWNhc2Ug Q0ZJX0dFT01fT0ZGU0VUICsgOToKPiArCQlyZXR1cm4gKChGTEFTSF9CTE9DS19TSVpFIC8gMjU2 ICkgLyBDRklfTlJfRkxBU0hfQ0hJUFMpID4+IDg7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGNmaV9x dWVyeV90YWJsZVthZGRyIC0gMHgxMF07Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIGJsb2NrX2lz X2xvY2tlZChzdHJ1Y3QgY2ZpX2ZsYXNoX2RldmljZSAqc2ZkZXYsIHU2NCBhZGRyKQo+ICt7Cj4g KwlpbnQgYmxvY2tfbnIgPSBhZGRyIC8gRkxBU0hfQkxPQ0tfU0laRTsKPiArCj4gKwlyZXR1cm4g dGVzdF9iaXQoYmxvY2tfbnIsIHNmZGV2LT5sb2NrX2JtKTsKPiArfQo+ICsKPiArI2RlZmluZSBE RVZfSURfTUFTSyAweDdmZgo+ICtzdGF0aWMgdTE2IHJlYWRfZGV2X2lkKHN0cnVjdCBjZmlfZmxh c2hfZGV2aWNlICpzZmRldiwgdTY0IGFkZHIpCj4gK3sKPiArCXN3aXRjaCAoKGFkZHIgJiBERVZf SURfTUFTSykgLyBDRklfQlVTX1dJRFRIKSB7Cj4gKwljYXNlIDB4MDoJCQkJLyogdmVuZG9yIElE ICovCj4gKwkJcmV0dXJuIDB4MDAwMDsKPiArCWNhc2UgMHgxOgkJCQkvKiBkZXZpY2UgSUQgKi8K PiArCQlyZXR1cm4gMHhmZmZmOwo+ICsJY2FzZSAweDI6Cj4gKwkJcmV0dXJuIGJsb2NrX2lzX2xv Y2tlZChzZmRldiwgYWRkciAmIH5ERVZfSURfTUFTSyk7Cj4gKwljYXNlIDB4NToKPiArCQlyZXR1 cm4gc2ZkZXYtPnJjcjsKPiArCWRlZmF1bHQ6CQkJLyogSWdub3JlIHRoZSBvdGhlciBlbnRyaWVz LiAqLwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBsb2NrX2Js b2NrKHN0cnVjdCBjZmlfZmxhc2hfZGV2aWNlICpzZmRldiwgdTY0IGFkZHIsIGJvb2wgbG9jaykK PiArewo+ICsJaW50IGJsb2NrX25yID0gYWRkciAvIEZMQVNIX0JMT0NLX1NJWkU7Cj4gKwo+ICsJ aWYgKGxvY2spCj4gKwkJc2V0X2JpdChibG9ja19uciwgc2ZkZXYtPmxvY2tfYm0pOwo+ICsJZWxz ZQo+ICsJCWNsZWFyX2JpdChibG9ja19uciwgc2ZkZXYtPmxvY2tfYm0pOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCB3b3JkX3Byb2dyYW0oc3RydWN0IGNmaV9mbGFzaF9kZXZpY2UgKnNmZGV2LAo+ ICsJCQkgdTY0IGFkZHIsIHZvaWQgKmRhdGEsIGludCBsZW4pCj4gK3sKPiArCWlmIChibG9ja19p c19sb2NrZWQoc2ZkZXYsIGFkZHIpKSB7Cj4gKwkJc2ZkZXYtPnNyIHw9IDB4MTI7Cj4gKwkJcmV0 dXJuOwo+ICsJfQo+ICsKPiArCW1lbWNweShzZmRldi0+Zmxhc2hfbWVtb3J5ICsgYWRkciwgZGF0 YSwgbGVuKTsKPiArfQo+ICsKPiArLyogUmVzZXQgdGhlIHByb2dyYW0gYnVmZmVyIHN0YXRlIHRv IHByZXBhcmUgZm9yIGZvbGxvdy11cCB3cml0ZXMuICovCj4gK3N0YXRpYyB2b2lkIGJ1ZmZlcl9z ZXR1cChzdHJ1Y3QgY2ZpX2ZsYXNoX2RldmljZSAqc2ZkZXYpCj4gK3sKPiArCW1lbXNldChzZmRl di0+cHJvZ3JhbV9idWZmZXIsIDAsIHNpemVvZihzZmRldi0+cHJvZ3JhbV9idWZmZXIpKTsKPiAr CXNmZGV2LT5sYXN0X2FkZHJlc3MgPSB+MFVMTDsKPiArCXNmZGV2LT5idWZmX3dyaXR0ZW4gPSAw Owo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBidWZmZXJfcHJvZ3JhbShzdHJ1Y3QgY2ZpX2ZsYXNo X2RldmljZSAqc2ZkZXYsCj4gKwkJCSAgIHU2NCBhZGRyLCB2b2lkICpidWZmZXIsIGludCBsZW4p Cj4gK3sKPiArCXVuc2lnbmVkIGludCBidWZfYWRkcjsKPiArCj4gKwlpZiAoc2ZkZXYtPmJ1ZmZf d3JpdHRlbiA+PSBzZmRldi0+cHJvZ3JhbV9sZW5ndGgpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsK PiArCS8qCj4gKwkgKiBUaGUgZmlyc3Qgd29yZCB3cml0dGVuIGludG8gdGhlIGJ1ZmZlciBhZnRl ciB0aGUgc2V0dXAgY29tbWFuZAo+ICsJICogaGFwcGVucyB0byBiZSB0aGUgYmFzZSBhZGRyZXNz IGZvciB0aGUgYnVmZmVyLgo+ICsJICogQWxsIHN1YnNlcXVlbnQgd3JpdGVzIG5lZWQgdG8gYmUg d2l0aGluIHRoaXMgYWRkcmVzcyBhbmQgdGhpcwo+ICsJICogYWRkcmVzcyBwbHVzIHRoZSBidWZm ZXIgc2l6ZSwgc28ga2VlcCB0aGlzIHZhbHVlIGFyb3VuZC4KPiArCSAqLwo+ICsJaWYgKHNmZGV2 LT5sYXN0X2FkZHJlc3MgPT0gfjBVTEwpCj4gKwkJc2ZkZXYtPmxhc3RfYWRkcmVzcyA9IGFkZHI7 Cj4gKwo+ICsJaWYgKGFkZHIgPCBzZmRldi0+bGFzdF9hZGRyZXNzKQo+ICsJCXJldHVybiBmYWxz ZTsKPiArCWJ1Zl9hZGRyID0gYWRkciAtIHNmZGV2LT5sYXN0X2FkZHJlc3M7Cj4gKwlpZiAoYnVm X2FkZHIgPj0gUFJPR1JBTV9CVUZGX1NJWkUpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCW1l bWNweShzZmRldi0+cHJvZ3JhbV9idWZmZXIgKyBidWZfYWRkciwgYnVmZmVyLCBsZW4pOwo+ICsJ c2ZkZXYtPmJ1ZmZfd3JpdHRlbisrOwo+ICsKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBidWZmZXJfY29uZmlybShzdHJ1Y3QgY2ZpX2ZsYXNoX2RldmljZSAqc2ZkZXYp Cj4gK3sKPiArCWlmIChibG9ja19pc19sb2NrZWQoc2ZkZXYsIHNmZGV2LT5sYXN0X2FkZHJlc3Mp KSB7Cj4gKwkJc2ZkZXYtPnNyIHw9IDB4MTI7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsJbWVtY3B5 KHNmZGV2LT5mbGFzaF9tZW1vcnkgKyBzZmRldi0+bGFzdF9hZGRyZXNzLAo+ICsJICAgICAgIHNm ZGV2LT5wcm9ncmFtX2J1ZmZlciwKPiArCSAgICAgICBzZmRldi0+YnVmZl93cml0dGVuICogc2l6 ZW9mKHUzMikpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBibG9ja19lcmFzZV9jb25maXJtKHN0 cnVjdCBjZmlfZmxhc2hfZGV2aWNlICpzZmRldiwgdTY0IGFkZHIpCj4gK3sKPiArCWlmIChibG9j a19pc19sb2NrZWQoc2ZkZXYsIGFkZHIpKSB7Cj4gKwkJc2ZkZXYtPnNyIHw9IDB4MTI7Cj4gKwkJ cmV0dXJuOwo+ICsJfQo+ICsKPiArCW1lbXNldChzZmRldi0+Zmxhc2hfbWVtb3J5ICsgYWRkciwg MHhGRiwgRkxBU0hfQkxPQ0tfU0laRSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGNmaV9mbGFz aF9tbWlvKHN0cnVjdCBrdm1fY3B1ICp2Y3B1LAo+ICsJCQkgICB1NjQgYWRkciwgdTggKmRhdGEs IHUzMiBsZW4sIHU4IGlzX3dyaXRlLAo+ICsJCQkgICB2b2lkICpjb250ZXh0KQo+ICt7Cj4gKwlz dHJ1Y3QgY2ZpX2ZsYXNoX2RldmljZSAqc2ZkZXYgPSBjb250ZXh0Owo+ICsJdTY0IGZhZGRyID0g YWRkciAtIHNmZGV2LT5iYXNlX2FkZHI7Cj4gKwl1MzIgdmFsdWU7Cj4gKwo+ICsJaWYgKCFpc193 cml0ZSkgewo+ICsJCXUxNiBjZmlfdmFsdWUgPSAwOwo+ICsKPiArCQltdXRleF9sb2NrKCZzZmRl di0+bXV0ZXgpOwo+ICsKPiArCQlzd2l0Y2ggKHNmZGV2LT5yZWFkX21vZGUpIHsKPiArCQljYXNl IFJFQURfQVJSQVk6Cj4gKwkJCS8qIGp1c3QgY29weSB0aGUgcmVxdWVzdGVkIGJ5dGVzIGZyb20g dGhlIGFycmF5ICovCj4gKwkJCW1lbWNweShkYXRhLCBzZmRldi0+Zmxhc2hfbWVtb3J5ICsgZmFk ZHIsIGxlbik7Cj4gKwkJCWdvdG8gb3V0X3VubG9jazsKPiArCQljYXNlIFJFQURfU1RBVFVTOgo+ ICsJCQljZmlfdmFsdWUgPSBzZmRldi0+c3I7Cj4gKwkJCWJyZWFrOwo+ICsJCWNhc2UgUkVBRF9E RVZJQ0VfSUQ6Cj4gKwkJCWNmaV92YWx1ZSA9IHJlYWRfZGV2X2lkKHNmZGV2LCBmYWRkcik7Cj4g KwkJCWJyZWFrOwo+ICsJCWNhc2UgUkVBRF9RVUVSWToKPiArCQkJY2ZpX3ZhbHVlID0gcmVhZF9j Zmkoc2ZkZXYsIGZhZGRyIC8gQ0ZJX0JVU19XSURUSCk7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiAr CQlzd2l0Y2ggKGxlbikgewo+ICsJCWNhc2UgMToKPiArCQkJKmRhdGEgPSBjZmlfdmFsdWU7Cj4g KwkJCWJyZWFrOwo+ICsJCWNhc2UgODogbWVtc2V0KGRhdGEgKyA0LCAwLCA0KTsKPiArCQkJLyog ZmFsbC10aHJvdWdoICovCj4gKwkJY2FzZSA0Ogo+ICsJCQlpZiAoQ0ZJX05SX0ZMQVNIX0NISVBT ID09IDIpCj4gKwkJCQltZW1jcHkoZGF0YSArIDIsICZjZmlfdmFsdWUsIDIpOwo+ICsJCQllbHNl Cj4gKwkJCQltZW1zZXQoZGF0YSArIDIsIDAsIDIpOwo+ICsJCQkvKiBmYWxsLXRocm91Z2ggKi8K PiArCQljYXNlIDI6Cj4gKwkJCW1lbWNweShkYXRhLCAmY2ZpX3ZhbHVlLCAyKTsKPiArCQkJYnJl YWs7Cj4gKwkJZGVmYXVsdDoKPiArCQkJcHJfZGVidWcoIkNGSSBmbGFzaDogaWxsZWdhbCBhY2Nl c3MgbGVuZ3RoICVkIGZvciByZWFkIG1vZGUgJWQiLAo+ICsJCQkJIGxlbiwgc2ZkZXYtPnJlYWRf bW9kZSk7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCj4gKwkJZ290byBvdXRfdW5sb2NrOwo+ICsJ fQo+ICsKPiArCWlmIChsZW4gPiA0KSB7Cj4gKwkJcHJfaW5mbygiQ0ZJIGZsYXNoOiBNTUlPICVk LWJpdCB3cml0ZSBhY2Nlc3Mgbm90IHN1cHBvcnRlZCIsCj4gKwkJCSBsZW4gKiA4KTsKPiArCQly ZXR1cm47Cj4gKwl9Cj4gKwo+ICsJbWVtY3B5KCZ2YWx1ZSwgZGF0YSwgbGVuKTsKPiArCj4gKwlt dXRleF9sb2NrKCZzZmRldi0+bXV0ZXgpOwo+ICsKPiArCXN3aXRjaCAoc2ZkZXYtPnN0YXRlKSB7 Cj4gKwljYXNlIFJFQURZOgkJCS8qIGhhbmRsZWQgYmVsb3cgKi8KPiArCQlicmVhazsKPiArCj4g KwljYXNlIExPQ0tfU0VUVVA6Cj4gKwkJc3dpdGNoICh2YWx1ZSAmIDB4ZmYpIHsKPiArCQljYXNl IENGSV9DTURfTE9DS19CTE9DSzoKPiArCQkJbG9ja19ibG9jayhzZmRldiwgZmFkZHIsIHRydWUp Owo+ICsJCQlzZmRldi0+cmVhZF9tb2RlID0gUkVBRF9TVEFUVVM7Cj4gKwkJCWJyZWFrOwo+ICsJ CWNhc2UgQ0ZJX0NNRF9VTkxPQ0tfQkxPQ0s6Cj4gKwkJCWxvY2tfYmxvY2soc2ZkZXYsIGZhZGRy LCBmYWxzZSk7Cj4gKwkJCXNmZGV2LT5yZWFkX21vZGUgPSBSRUFEX1NUQVRVUzsKPiArCQkJYnJl YWs7Cj4gKwkJZGVmYXVsdDoKPiArCQkJc2ZkZXYtPnNyIHw9IDB4MzA7Cj4gKwkJCWJyZWFrOwo+ ICsJCX0KPiArCQlzZmRldi0+c3RhdGUgPSBSRUFEWTsKPiArCQlnb3RvIG91dF91bmxvY2s7Cj4g Kwo+ICsJY2FzZSBXUF9TRVRVUDoKPiArCQl3b3JkX3Byb2dyYW0oc2ZkZXYsIGZhZGRyLCBkYXRh LCBsZW4pOwo+ICsJCXNmZGV2LT5yZWFkX21vZGUgPSBSRUFEX1NUQVRVUzsKPiArCQlzZmRldi0+ c3RhdGUgPSBSRUFEWTsKPiArCQlnb3RvIG91dF91bmxvY2s7Cj4gKwo+ICsJY2FzZSBCUF9MT0FE Ogo+ICsJCWlmIChidWZmZXJfcHJvZ3JhbShzZmRldiwgZmFkZHIsIGRhdGEsIGxlbikpCj4gKwkJ CWdvdG8gb3V0X3VubG9jazsKPiArCj4gKwkJaWYgKCh2YWx1ZSAmIDB4RkYpID09IENGSV9DTURf QlVGRkVSRURfUFJPR1JBTV9DT05GSVJNKSB7Cj4gKwkJCWJ1ZmZlcl9jb25maXJtKHNmZGV2KTsK PiArCQkJc2ZkZXYtPnJlYWRfbW9kZSA9IFJFQURfU1RBVFVTOwo+ICsJCX0gZWxzZSB7Cj4gKwkJ CXByX2RlYnVnKCJDRkkgZmxhc2g6IEJQX0xPQUQ6IGV4cGVjdGVkIENPTkZJUk0oMHhkMCksIGdv dCAweCV4IEAgMHglbGx4IiwKPiArCQkJCSB2YWx1ZSwgZmFkZHIpOwo+ICsJCQlzZmRldi0+c3Ig fD0gMHgxMDsKPiArCQl9Cj4gKwkJc2ZkZXYtPnN0YXRlID0gUkVBRFk7Cj4gKwkJZ290byBvdXRf dW5sb2NrOwo+ICsKPiArCWNhc2UgQlBfU0VUVVA6Cj4gKwkJc2ZkZXYtPnByb2dyYW1fbGVuZ3Ro ID0gKHZhbHVlICYgMHhmZmZmKSArIDE7Cj4gKwkJaWYgKHNmZGV2LT5wcm9ncmFtX2xlbmd0aCA+ IFBST0dSQU1fQlVGRl9TSVpFIC8gNCkKPiArCQkJc2ZkZXYtPnByb2dyYW1fbGVuZ3RoID0gUFJP R1JBTV9CVUZGX1NJWkUgLyA0Owo+ICsJCXNmZGV2LT5zdGF0ZSA9IEJQX0xPQUQ7Cj4gKwkJc2Zk ZXYtPnJlYWRfbW9kZSA9IFJFQURfU1RBVFVTOwo+ICsJCWdvdG8gb3V0X3VubG9jazsKPiArCj4g KwljYXNlIEVSQVNFX1NFVFVQOgo+ICsJCWlmICgodmFsdWUgJiAweGZmKSA9PSBDRklfQ01EX0JM T0NLX0VSQVNFX0NPTkZJUk0pCj4gKwkJCWJsb2NrX2VyYXNlX2NvbmZpcm0oc2ZkZXYsIGZhZGRy KTsKPiArCQllbHNlCj4gKwkJCXNmZGV2LT5zciB8PSAweDMwOwo+ICsKPiArCQlzZmRldi0+c3Rh dGUgPSBSRUFEWTsKPiArCQlzZmRldi0+cmVhZF9tb2RlID0gUkVBRF9TVEFUVVM7Cj4gKwkJZ290 byBvdXRfdW5sb2NrOwo+ICsJfQo+ICsKPiArCS8qIHdyaXRlIGNvbW1hbmRzIGluIFJFQURZIHN0 YXRlICovCj4gKwlzd2l0Y2ggKHZhbHVlICYgMHhGRikgewo+ICsJY2FzZSBDRklfQ01EX1JFQURf SkVERUM6Cj4gKwkJc2ZkZXYtPnJlYWRfbW9kZSA9IFJFQURfREVWSUNFX0lEOwo+ICsJCWJyZWFr Owo+ICsJY2FzZSBDRklfQ01EX1JFQURfU1RBVFVTX1JFR0lTVEVSOgo+ICsJCXNmZGV2LT5yZWFk X21vZGUgPSBSRUFEX1NUQVRVUzsKPiArCQlicmVhazsKPiArCWNhc2UgQ0ZJX0NNRF9SRUFEX0NG SV9RVUVSWToKPiArCQlzZmRldi0+cmVhZF9tb2RlID0gUkVBRF9RVUVSWTsKPiArCQlicmVhazsK PiArCWNhc2UgQ0ZJX0NNRF9DTEVBUl9TVEFUVVNfUkVHSVNURVI6Cj4gKwkJc2ZkZXYtPnNyID0g MHg4MDsKPiArCQlicmVhazsKPiArCWNhc2UgQ0ZJX0NNRF9XT1JEX1BST0dSQU1fU0VUVVA6Cj4g KwljYXNlIENGSV9DTURfQUxURVJOQVRFX1dPUkRfUFJPR1JBTV9TRVRVUDoKPiArCQlzZmRldi0+ c3RhdGUgPSBXUF9TRVRVUDsKPiArCQlzZmRldi0+cmVhZF9tb2RlID0gUkVBRF9TVEFUVVM7Cj4g KwkJYnJlYWs7Cj4gKwljYXNlIENGSV9DTURfTE9DS19CTE9DS19TRVRVUDoKPiArCQlzZmRldi0+ c3RhdGUgPSBMT0NLX1NFVFVQOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBDRklfQ01EX0JMT0NLX0VS QVNFX1NFVFVQOgo+ICsJCXNmZGV2LT5zdGF0ZSA9IEVSQVNFX1NFVFVQOwo+ICsJCXNmZGV2LT5y ZWFkX21vZGUgPSBSRUFEX1NUQVRVUzsKPiArCQlicmVhazsKPiArCWNhc2UgQ0ZJX0NNRF9CVUZG RVJFRF9QUk9HUkFNX1NFVFVQOgo+ICsJCWJ1ZmZlcl9zZXR1cChzZmRldik7Cj4gKwkJc2ZkZXYt PnN0YXRlID0gQlBfU0VUVVA7Cj4gKwkJc2ZkZXYtPnJlYWRfbW9kZSA9IFJFQURfU1RBVFVTOwo+ ICsJCWJyZWFrOwo+ICsJY2FzZSBDRklfQ01EX0JVRkZFUkVEX1BST0dSQU1fQ09ORklSTToKPiAr CQlwcl9kZWJ1ZygiQ0ZJIGZsYXNoOiB1bmV4cGVjdGVkIGNvbmZpcm0gY29tbWFuZCAweEQwIik7 Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCXByX2RlYnVnKCJDRkkgZmxhc2g6IHVua25v d24gY29tbWFuZCAweCV4IiwgdmFsdWUpOwo+ICsJCS8qIGZhbGwgdGhyb3VnaCAqLwo+ICsJY2Fz ZSBDRklfQ01EX1JFQURfQVJSQVk6Cj4gKwkJc2ZkZXYtPnJlYWRfbW9kZSA9IFJFQURfQVJSQVk7 Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICtvdXRfdW5sb2NrOgo+ICsJbXV0ZXhfdW5sb2NrKCZz ZmRldi0+bXV0ZXgpOwo+ICt9Cj4gKwo+ICsjaWZkZWYgQ09ORklHX0hBU19MSUJGRFQKPiArc3Rh dGljIHZvaWQgZ2VuZXJhdGVfY2ZpX2ZsYXNoX2ZkdF9ub2RlKHZvaWQgKmZkdCwKPiArCQkJCQlz dHJ1Y3QgZGV2aWNlX2hlYWRlciAqZGV2X2hkciwKPiArCQkJCQl2b2lkICgqZ2VuZXJhdGVfaXJx X3Byb3ApKHZvaWQgKmZkdCwKPiArCQkJCQkJCQkgIHU4IGlycSwKPiArCQkJCQkJCQllbnVtIGly cV90eXBlKSkKPiArewo+ICsJc3RydWN0IGNmaV9mbGFzaF9kZXZpY2UgKnNmZGV2Owo+ICsJdTY0 IHJlZ19wcm9wWzJdOwo+ICsKPiArCXNmZGV2ID0gY29udGFpbmVyX29mKGRldl9oZHIsIHN0cnVj dCBjZmlfZmxhc2hfZGV2aWNlLCBkZXZfaGRyKTsKPiArCXJlZ19wcm9wWzBdID0gY3B1X3RvX2Zk dDY0KHNmZGV2LT5iYXNlX2FkZHIpOwo+ICsJcmVnX3Byb3BbMV0gPSBjcHVfdG9fZmR0NjQoc2Zk ZXYtPnNpemUpOwo+ICsKPiArCV9GRFQoZmR0X2JlZ2luX25vZGUoZmR0LCAiZmxhc2giKSk7Cj4g KwlfRkRUKGZkdF9wcm9wZXJ0eV9jZWxsKGZkdCwgImJhbmstd2lkdGgiLCBDRklfQlVTX1dJRFRI KSk7Cj4gKwlfRkRUKGZkdF9wcm9wZXJ0eV9jZWxsKGZkdCwgIiNhZGRyZXNzLWNlbGxzIiwgMHgx KSk7Cj4gKwlfRkRUKGZkdF9wcm9wZXJ0eV9jZWxsKGZkdCwgIiNzaXplLWNlbGxzIiwgMHgxKSk7 Cj4gKwlfRkRUKGZkdF9wcm9wZXJ0eV9zdHJpbmcoZmR0LCAiY29tcGF0aWJsZSIsICJjZmktZmxh c2giKSk7Cj4gKwlfRkRUKGZkdF9wcm9wZXJ0eV9zdHJpbmcoZmR0LCAibGFiZWwiLCAiU3lzdGVt LWZpcm13YXJlIikpOwo+ICsJX0ZEVChmZHRfcHJvcGVydHkoZmR0LCAicmVnIiwgJnJlZ19wcm9w LCBzaXplb2YocmVnX3Byb3ApKSk7Cj4gKwlfRkRUKGZkdF9lbmRfbm9kZShmZHQpKTsKPiArfQo+ ICsjZWxzZQo+ICsjZGVmaW5lIGdlbmVyYXRlX2NmaV9mbGFzaF9mZHRfbm9kZSBOVUxMCj4gKyNl bmRpZgo+ICsKPiArc3RhdGljIHN0cnVjdCBjZmlfZmxhc2hfZGV2aWNlICpjcmVhdGVfZmxhc2hf ZGV2aWNlX2ZpbGUoc3RydWN0IGt2bSAqa3ZtLAo+ICsJCQkJCQkJIGNvbnN0IGNoYXIgKmZpbGVu YW1lKQo+ICt7Cj4gKwlzdHJ1Y3QgY2ZpX2ZsYXNoX2RldmljZSAqc2ZkZXY7Cj4gKwlzdHJ1Y3Qg c3RhdCBzdGF0YnVmOwo+ICsJdW5zaWduZWQgaW50IHZhbHVlOwo+ICsJaW50IHJldDsKPiArCWlu dCBmZDsKPiArCj4gKwlmZCA9IG9wZW4oZmlsZW5hbWUsIE9fUkRXUik7Cj4gKwlpZiAoZmQgPCAw KQo+ICsJCXJldHVybiBFUlJfUFRSKC1lcnJubyk7Cj4gKwlpZiAoZnN0YXQoZmQsICZzdGF0YnVm KSA8IDApIHsKPiArCQljbG9zZShmZCk7Cj4gKwkJcmV0dXJuIEVSUl9QVFIoLWVycm5vKTsKPiAr CX0KPiArCj4gKwlzZmRldiA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGNmaV9mbGFzaF9kZXZpY2Up KTsKPiArCWlmICghc2ZkZXYpIHsKPiArCQljbG9zZShmZCk7Cj4gKwkJcmV0dXJuIEVSUl9QVFIo LUVOT01FTSk7Cj4gKwl9Cj4gKwo+ICsJc2ZkZXYtPnNpemUgPSAoc3RhdGJ1Zi5zdF9zaXplICsg NDA5NSkgJiB+MHhmZmZVTDsKPiArCXNmZGV2LT5mbGFzaF9tZW1vcnkgPSBtbWFwKE5VTEwsIHN0 YXRidWYuc3Rfc2l6ZSwKPiArCQkJCSAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFS RUQsCj4gKwkJCQkgICBmZCwgMCk7Cj4gKwlpZiAoc2ZkZXYtPmZsYXNoX21lbW9yeSA9PSBNQVBf RkFJTEVEKSB7Cj4gKwkJY2xvc2UoZmQpOwo+ICsJCWZyZWUoc2ZkZXYpOwo+ICsJCXJldHVybiBF UlJfUFRSKC1lcnJubyk7Cj4gKwl9Cj4gKwlzZmRldi0+YmFzZV9hZGRyID0gS1ZNX0ZMQVNIX01N SU9fQkFTRTsKPiArCXNmZGV2LT5zdGF0ZSA9IFJFQURZOwo+ICsJc2ZkZXYtPnJlYWRfbW9kZSA9 IFJFQURfQVJSQVk7Cj4gKwlzZmRldi0+c3IgPSAweDgwOwo+ICsJc2ZkZXYtPnJjciA9IDB4YmZj ZjsKPiArCj4gKwl2YWx1ZSA9IHJvdW5kdXAobnJfZXJhc2VfYmxvY2tzKHNmZGV2KSwgQklUU19Q RVJfTE9ORykgLyA4Owo+ICsJc2ZkZXYtPmxvY2tfYm0gPSBtYWxsb2ModmFsdWUpOwo+ICsJbWVt c2V0KHNmZGV2LT5sb2NrX2JtLCAwLCB2YWx1ZSk7Cj4gKwo+ICsJc2ZkZXYtPmRldl9oZHIuYnVz X3R5cGUgPSBERVZJQ0VfQlVTX01NSU87Cj4gKwlzZmRldi0+ZGV2X2hkci5kYXRhID0gZ2VuZXJh dGVfY2ZpX2ZsYXNoX2ZkdF9ub2RlOwo+ICsJbXV0ZXhfaW5pdCgmc2ZkZXYtPm11dGV4KTsKPiAr CXJldCA9IGRldmljZV9fcmVnaXN0ZXIoJnNmZGV2LT5kZXZfaGRyKTsKPiArCWlmIChyZXQpIHsK PiArCQlmcmVlKHNmZGV2LT5mbGFzaF9tZW1vcnkpOwo+ICsJCWZyZWUoc2ZkZXYpOwo+ICsJCXJl dHVybiBFUlJfUFRSKHJldCk7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0ga3ZtX19yZWdpc3Rlcl9tbWlv KGt2bSwKPiArCQkJCSBzZmRldi0+YmFzZV9hZGRyLCBzZmRldi0+c2l6ZSwKPiArCQkJCSBmYWxz ZSwgY2ZpX2ZsYXNoX21taW8sIHNmZGV2KTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZpY2VfX3Vu cmVnaXN0ZXIoJnNmZGV2LT5kZXZfaGRyKTsKPiArCQlmcmVlKHNmZGV2LT5mbGFzaF9tZW1vcnkp Owo+ICsJCWZyZWUoc2ZkZXYpOwo+ICsJCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gKwl9Cj4gKwo+ ICsJcmV0dXJuIHNmZGV2Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGZsYXNoX19pbml0KHN0cnVj dCBrdm0gKmt2bSkKPiArewo+ICsJc3RydWN0IGNmaV9mbGFzaF9kZXZpY2UgKnNmZGV2Owo+ICsK PiArCWlmICgha3ZtLT5jZmcuZmxhc2hfZmlsZW5hbWUpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJ c2ZkZXYgPSBjcmVhdGVfZmxhc2hfZGV2aWNlX2ZpbGUoa3ZtLCBrdm0tPmNmZy5mbGFzaF9maWxl bmFtZSk7Cj4gKwlpZiAoSVNfRVJSKHNmZGV2KSkKPiArCQlyZXR1cm4gUFRSX0VSUihzZmRldik7 Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArZGV2X2luaXQoZmxhc2hfX2luaXQpOwo+IGRpZmYg LS1naXQgYS9pbmNsdWRlL2t2bS9rdm0tY29uZmlnLmggYi9pbmNsdWRlL2t2bS9rdm0tY29uZmln LmgKPiBpbmRleCBhMDUyYjBiYy4uZjRhOGI4MzEgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9rdm0v a3ZtLWNvbmZpZy5oCj4gKysrIGIvaW5jbHVkZS9rdm0va3ZtLWNvbmZpZy5oCj4gQEAgLTM1LDYg KzM1LDcgQEAgc3RydWN0IGt2bV9jb25maWcgewo+ICAJY29uc3QgY2hhciAqdm1saW51eF9maWxl bmFtZTsKPiAgCWNvbnN0IGNoYXIgKmluaXRyZF9maWxlbmFtZTsKPiAgCWNvbnN0IGNoYXIgKmZp cm13YXJlX2ZpbGVuYW1lOwo+ICsJY29uc3QgY2hhciAqZmxhc2hfZmlsZW5hbWU7Cj4gIAljb25z dCBjaGFyICpjb25zb2xlOwo+ICAJY29uc3QgY2hhciAqZGV2Owo+ICAJY29uc3QgY2hhciAqbmV0 d29yazsKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9rdm0vdXRpbC5oIGIvaW5jbHVkZS9rdm0vdXRp bC5oCj4gaW5kZXggNGNhN2FhOTMuLjVjMzdmMGI3IDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUva3Zt L3V0aWwuaAo+ICsrKyBiL2luY2x1ZGUva3ZtL3V0aWwuaAo+IEBAIC0xMDQsNiArMTA0LDExIEBA IHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByb3VuZHVwX3Bvd19vZl90d28odW5zaWduZWQg bG9uZyB4KQo+ICAJcmV0dXJuIHggPyAxVUwgPDwgZmxzX2xvbmcoeCAtIDEpIDogMDsKPiAgfQo+ ICAKPiArc3RhdGljIGlubGluZSBpbnQgcG93Ml9zaXplKHVuc2lnbmVkIGxvbmcgeCkKPiArewo+ ICsJcmV0dXJuIChzaXplb2YoeCkgKiA4KSAtIF9fYnVpbHRpbl9jbHpsKHggLSAxKTsKPiArfQo+ ICsKPiAgc3RydWN0IGt2bTsKPiAgdm9pZCAqbW1hcF9odWdldGxiZnMoc3RydWN0IGt2bSAqa3Zt LCBjb25zdCBjaGFyICpodGxiZnNfcGF0aCwgdTY0IHNpemUpOwo+ICB2b2lkICptbWFwX2Fub25f b3JfaHVnZXRsYmZzKHN0cnVjdCBrdm0gKmt2bSwgY29uc3QgY2hhciAqaHVnZXRsYmZzX3BhdGgs IHU2NCBzaXplKTsKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMu aW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2xpbnV4LWFybS1rZXJuZWwK