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 Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 59CD9C6FD18 for ; Sun, 23 Apr 2023 22:52:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229991AbjDWWwr (ORCPT ); Sun, 23 Apr 2023 18:52:47 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36076 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229458AbjDWWwp (ORCPT ); Sun, 23 Apr 2023 18:52:45 -0400 Received: from gate2.alliedtelesis.co.nz (gate2.alliedtelesis.co.nz [IPv6:2001:df5:b000:5::4]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 74B0FE7D for ; Sun, 23 Apr 2023 15:52:40 -0700 (PDT) Received: from svr-chch-seg1.atlnz.lc (mmarshal3.atlnz.lc [10.32.18.43]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by gate2.alliedtelesis.co.nz (Postfix) with ESMTPS id 9A59D2C0714; Mon, 24 Apr 2023 10:52:36 +1200 (NZST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=alliedtelesis.co.nz; s=mail181024; t=1682290356; bh=f6VdXVE+CqzafAt2jAinlyZpbYgv7qimEZMDABBYpyM=; h=From:To:CC:Subject:Date:References:In-Reply-To:From; b=1ZkxHLMn86op7NVC2BWOA4gkkhJW0nuFaletgWm2UmFhQxgBKAb9Z0nT9ZBez3maQ M4Yb3NyXbdrBjviK2SqI/Q7vPpnguvUgIrD57d43i7JyOlSAaoKOn2bkhWsoZn4TaP 2tj/DzcG9nTxxQYQbwfV9CcD59efSn0xaJ0+SAFgU2BNFK5e0rUaPeLAypKOL+Mk7z V+NOux+ogAiK9wt2EmvSWRSkZVXWbcU0mfx+qYxM6Nzpx5du4gaEQsKoeT7gbzfkhH 2XyGnovG0WDWLf6c5pT9gI4NRaNKFRj+9d5ZZYSelvk2WJcXlqGGceVCPJhSgfRBJa mqC3FX/o7lXrg== Received: from svr-chch-ex2.atlnz.lc (Not Verified[2001:df5:b000:bc8::76]) by svr-chch-seg1.atlnz.lc with Trustwave SEG (v8,2,6,11305) id ; Mon, 24 Apr 2023 10:52:36 +1200 Received: from svr-chch-ex1.atlnz.lc (2001:df5:b000:bc8::77) by svr-chch-ex2.atlnz.lc (2001:df5:b000:bc8::76) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.2.1118.26; Mon, 24 Apr 2023 10:52:36 +1200 Received: from svr-chch-ex2.atlnz.lc (2001:df5:b000:bc8::76) by svr-chch-ex1.atlnz.lc (2001:df5:b000:bc8:409d:36f5:8899:92e8) with Microsoft SMTP Server (TLS) id 15.0.1497.48; Mon, 24 Apr 2023 10:52:36 +1200 Received: from svr-chch-ex2.atlnz.lc ([fe80::a9eb:c9b7:8b52:9567]) by svr-chch-ex2.atlnz.lc ([fe80::a9eb:c9b7:8b52:9567%15]) with mapi id 15.02.1118.026; Mon, 24 Apr 2023 10:52:35 +1200 From: Chris Packham To: Ibrahim Tilki , "a.zummo@towertech.it" , "alexandre.belloni@bootlin.com" , "jdelvare@suse.com" , "linux@roeck-us.net" , "robh+dt@kernel.org" , "krzysztof.kozlowski+dt@linaro.org" CC: "linux-rtc@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "linux-hwmon@vger.kernel.org" , "devicetree@vger.kernel.org" , "Zeynep Arslanbenzer" Subject: Re: [PATCH v5 1/2] drivers: rtc: add max313xx series rtc driver Thread-Topic: [PATCH v5 1/2] drivers: rtc: add max313xx series rtc driver Thread-Index: AQHZdjZLgX7SA8wzl0CehDF+asRkOg== Date: Sun, 23 Apr 2023 22:52:35 +0000 Message-ID: References: <20230403154342.3108-1-Ibrahim.Tilki@analog.com> <20230403154342.3108-2-Ibrahim.Tilki@analog.com> In-Reply-To: <20230403154342.3108-2-Ibrahim.Tilki@analog.com> Accept-Language: en-NZ, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.33.22.30] Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-SEG-SpamProfiler-Analysis: v=2.3 cv=VfuJw2h9 c=1 sm=1 tr=0 a=Xf/6aR1Nyvzi7BryhOrcLQ==:117 a=xqWC_Br6kY4A:10 a=75chYTbOgJ0A:10 a=IkcTkHD0fZMA:10 a=dKHAf1wccvYA:10 a=gAnH3GRIAAAA:8 a=KpLWW-vq3t3MRPME1sEA:9 a=QEXdDO2ut3YA:10 a=oVHKYsEdi7-vN-J5QA_j:22 X-SEG-SpamProfiler-Score: 0 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgSWJyYWhpbSwNCg0KT24gNC8wNC8yMyAwMzo0MywgSWJyYWhpbSBUaWxraSB3cm90ZToNCj4g QWRkaW5nIHN1cHBvcnQgZm9yIEFuYWxvZyBEZXZpY2VzIE1BWDMxM1hYIHNlcmllcyBSVENzLg0K Pg0KPiBTaWduZWQtb2ZmLWJ5OiBJYnJhaGltIFRpbGtpIDxJYnJhaGltLlRpbGtpQGFuYWxvZy5j b20+DQo+IFNpZ25lZC1vZmYtYnk6IFpleW5lcCBBcnNsYW5iZW56ZXIgPFpleW5lcC5BcnNsYW5i ZW56ZXJAYW5hbG9nLmNvbT4NCg0KSnVzdCB0YWtpbmcgdGhpcyB2ZXJzaW9uIGZvciBhIHNwaW4g b24gbXkgYm9hcmQgd2l0aCB0aGUgTUFYMzEzMzEuIA0KQ29tcGFyZWQgdG8gcGF0Y2hzZXQgMyBJ J20gZmluZGluZyB0aGF0IHRoZSBSVEMgaXNuJ3QgYWN0dWFsbHkgcnVubmluZyANCmFmdGVyIGl0 IGlzIHNldC4gSSBoYXZlbid0IGJlZ3VuIHRvIGRlYnVnIHdoeSB0aGlzIG1pZ2h0IGJlLiBJIHN1 c3BlY3QgDQppdCdzIG5vdCBiZWluZyBlbmFibGVkLg0KDQpIZXJlJ3MgdGhlIHNuaXBwZXQgb2Yg ZHRzIHRoYXQgSSdtIHVzaW5nICh3aGljaCB3b3JrZWQgd2l0aCBwYXRjaHNldCAzKS4NCg0KIMKg wqDCoMKgwqDCoMKgIGkyY0AxIHsNCiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHJ0Y0A2OCB7DQogwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29tcGF0aWJsZSA9ICJhZGksbWF4MzEzMzEi Ow0KIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHJlZyA9IDwweDY4PjsNCiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIH07DQogwqDCoMKgwqDCoMKgwqAgfTsNCg0KQW5kIGhlcmUncyBhbiBl eGFtcGxlIG9mIGl0IG5vdCB3b3JraW5nDQoNCnJvb3RAeDI0MC0yNkdIWG0gfl0jIGRhdGUNCk1v biBBcHIgMjQgMTA6NDk6NTQgVVRDIDIwMjMNCltyb290QHgyNDAtMjZHSFhtIH5dIyBod2Nsb2Nr IC13DQpbcm9vdEB4MjQwLTI2R0hYbSB+XSMgaHdjbG9jayAtcg0KU2F0IEphbsKgIDEgMDA6MDA6 MDAgMjAwMMKgIDAuMDAwMDAwIHNlY29uZHMNCg0KQW5kIGZpbmFsbHkgYSByZWdpc3RlciBkdW1w IHdoaWNoIEknbGwgc3RhcnQgbG9va2luZyBhdCBzaG9ydGx5DQoNCltyb290QHgyNDAtMjZHSFht IH5dIyBpMmNkdW1wIC1mIC15IDIgMHg2OA0KTm8gc2l6ZSBzcGVjaWZpZWQgKHVzaW5nIGJ5dGUt ZGF0YSBhY2Nlc3MpDQogwqDCoMKgwqAgMMKgIDHCoCAywqAgM8KgIDTCoCA1wqAgNsKgIDfCoCA4 wqAgOcKgIGHCoCBiwqAgY8KgIGTCoCBlwqAgZiAwMTIzNDU2Nzg5YWJjZGVmDQowMDogNDAgMDAg MDEgNDMgMDMgMDQgMDQgMDAgMDAgMDAgMDAgMDEgMDEgMDEgMDAgMDAgQC4/Qz8/Py4uLi4/Pz8u Lg0KMTA6IDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAxIC4u Li4uLi4uLi4uLi4uLj8NCjIwOiAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAw MCAwMCAwMCAwMCAuLi4uLi4uLi4uLi4uLi4uDQozMDogMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAg MDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgLi4uLi4uLi4uLi4uLi4uLg0KNDA6IDAwIDAwIDAwIDAw IDAwIDAwIDAwIDAwIDAwIGZmIGZmIGZmIGZmIGZmIGZmIGZmIC4uLi4uLi4uLi4uLi4uLi4NCjUw OiBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAuLi4uLi4u Li4uLi4uLi4uDQo2MDogMDAgMDAgMDAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYg ZmYgZmYgLi4uLi4uLi4uLi4uLi4uLg0KNzA6IGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZm IGZmIGZmIGZmIGZmIGZmIGZmIC4uLi4uLi4uLi4uLi4uLi4NCjgwOiBmZiBmZiBmZiBmZiBmZiBm ZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAuLi4uLi4uLi4uLi4uLi4uDQo5MDogZmYg ZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgLi4uLi4uLi4uLi4u Li4uLg0KYTA6IGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZm IC4uLi4uLi4uLi4uLi4uLi4NCmIwOiBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiBm ZiBmZiBmZiBmZiBmZiAuLi4uLi4uLi4uLi4uLi4uDQpjMDogZmYgZmYgZmYgZmYgZmYgZmYgZmYg ZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgLi4uLi4uLi4uLi4uLi4uLg0KZDA6IGZmIGZmIGZm IGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIC4uLi4uLi4uLi4uLi4uLi4N CmUwOiBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAuLi4u Li4uLi4uLi4uLi4uDQpmMDogZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYg ZmYgZmYgZmYgLi4uLi4uLi4uLi4uLi4uLg0KDQo+IC0tLQ0KPiAgIGRyaXZlcnMvcnRjL0tjb25m aWcgICAgICAgIHwgICAxMSArDQo+ICAgZHJpdmVycy9ydGMvTWFrZWZpbGUgICAgICAgfCAgICAx ICsNCj4gICBkcml2ZXJzL3J0Yy9ydGMtbWF4MzEzeHguYyB8IDEwNTMgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrDQo+ICAgMyBmaWxlcyBjaGFuZ2VkLCAxMDY1IGluc2VydGlv bnMoKykNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ydGMvcnRjLW1heDMxM3h4LmMN Cj4NCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL0tjb25maWcgYi9kcml2ZXJzL3J0Yy9LY29u ZmlnDQo+IGluZGV4IDc1Mzg3MjQwOC4uMjE2MDYxOWVkIDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJz L3J0Yy9LY29uZmlnDQo+ICsrKyBiL2RyaXZlcnMvcnRjL0tjb25maWcNCj4gQEAgLTMyMyw2ICsz MjMsMTcgQEAgY29uZmlnIFJUQ19EUlZfTFA4Nzg4DQo+ICAgCWhlbHANCj4gICAJICBTYXkgWSB0 byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIExQODc4OCBSVEMvQUxBUk0gZHJpdmVyLg0KPiAgIA0K PiArY29uZmlnIFJUQ19EUlZfTUFYMzEzWFgNCj4gKwl0cmlzdGF0ZSAiQW5hbG9nIERldmljZXMg TUFYMzEzWFggUlRDIGRyaXZlciINCj4gKwlkZXBlbmRzIG9uIEkyQw0KPiArCXNlbGVjdCBSRUdN QVBfSTJDDQo+ICsJaGVscA0KPiArCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3Ugd2lsbCBnZXQg c3VwcG9ydCBmb3IgdGhlDQo+ICsJICBBbmFsb2cgRGV2aWNlcyBNQVgzMTNYWCBzZXJpZXMgUlRD IGZhbWlseS4NCj4gKw0KPiArCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBt b2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlDQo+ICsJICB3aWxsIGJlIGNhbGxlZCBydGMtbWF4MzEz eHguDQo+ICsNCj4gICBjb25maWcgUlRDX0RSVl9NQVg2OTAwDQo+ICAgCXRyaXN0YXRlICJNYXhp bSBNQVg2OTAwIg0KPiAgIAloZWxwDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9NYWtlZmls ZSBiL2RyaXZlcnMvcnRjL01ha2VmaWxlDQo+IGluZGV4IGVhNDQ1ZDFlYi4uODgwZGI5OWJlIDEw MDY0NA0KPiAtLS0gYS9kcml2ZXJzL3J0Yy9NYWtlZmlsZQ0KPiArKysgYi9kcml2ZXJzL3J0Yy9N YWtlZmlsZQ0KPiBAQCAtODgsNiArODgsNyBAQCBvYmotJChDT05GSUdfUlRDX0RSVl9NNDFUOTQp CSs9IHJ0Yy1tNDF0OTQubw0KPiAgIG9iai0kKENPTkZJR19SVENfRFJWX000OFQzNSkJKz0gcnRj LW00OHQzNS5vDQo+ICAgb2JqLSQoQ09ORklHX1JUQ19EUlZfTTQ4VDU5KQkrPSBydGMtbTQ4dDU5 Lm8NCj4gICBvYmotJChDT05GSUdfUlRDX0RSVl9NNDhUODYpCSs9IHJ0Yy1tNDh0ODYubw0KPiAr b2JqLSQoQ09ORklHX1JUQ19EUlZfTUFYMzEzWFgpCSs9IHJ0Yy1tYXgzMTN4eC5vDQo+ICAgb2Jq LSQoQ09ORklHX1JUQ19EUlZfTUFYNjkwMCkJKz0gcnRjLW1heDY5MDAubw0KPiAgIG9iai0kKENP TkZJR19SVENfRFJWX01BWDY5MDIpCSs9IHJ0Yy1tYXg2OTAyLm8NCj4gICBvYmotJChDT05GSUdf UlRDX0RSVl9NQVg2OTE2KQkrPSBydGMtbWF4NjkxNi5vDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L3J0Yy9ydGMtbWF4MzEzeHguYyBiL2RyaXZlcnMvcnRjL3J0Yy1tYXgzMTN4eC5jDQo+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMC4uMDQzNTI4ZDdkDQo+IC0tLSAvZGV2 L251bGwNCj4gKysrIGIvZHJpdmVycy9ydGMvcnRjLW1heDMxM3h4LmMNCj4gQEAgLTAsMCArMSwx MDUzIEBADQo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5DQo+ICsv Kg0KPiArICogQW5hbG9nIERldmljZXMgTUFYMzEzWFggc2VyaWVzIEkyQyBSVEMgZHJpdmVyDQo+ ICsgKg0KPiArICogQ29weXJpZ2h0IDIwMjMgQW5hbG9nIERldmljZXMgSW5jLg0KPiArICovDQo+ ICsjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdW5hbGlnbmVkLmg+DQo+ICsjaW5jbHVkZSA8bGludXgv YmNkLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvYml0ZmllbGQuaD4NCj4gKyNpbmNsdWRlIDxsaW51 eC9jbGsuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4NCj4gKyNpbmNsdWRl IDxsaW51eC9od21vbi5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2kyYy5oPg0KPiArI2luY2x1ZGUg PGxpbnV4L3JlZ21hcC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPg0KPiArI2luY2x1ZGUg PGxpbnV4L3V0aWxfbWFjcm9zLmg+DQo+ICsNCj4gKy8qIGNvbW1vbiByZWdpc3RlcnMgKi8NCj4g KyNkZWZpbmUgTUFYMzEzWFhfSU5UX0FMQVJNMQkJQklUKDApDQo+ICsjZGVmaW5lIE1BWDMxM1hY X0hSU19GX0FNX1BNCQlCSVQoNSkNCj4gKyNkZWZpbmUgTUFYMzEzWFhfSFJTX0ZfMTJfMjQJCUJJ VCg2KQ0KPiArI2RlZmluZSBNQVgzMTNYWF9NT05USF9DRU5UVVJZCQlCSVQoNykNCj4gKw0KPiAr I2RlZmluZSBNQVgzMTNYWF9USU1FX1NJWkUJCTB4MDcNCj4gKw0KPiArLyogZGV2aWNlIHNwZWNp ZmljIHJlZ2lzdGVycyAqLw0KPiArI2RlZmluZSBNQVgzMTM0WF9DRkcyX1JFRwkJMHgwMQ0KPiAr I2RlZmluZSBNQVgzMTM0WF9DRkcyX1NFVF9SVEMJCUJJVCgxKQ0KPiArDQo+ICsjZGVmaW5lIE1B WDMxMzQxX1RSSUNLTEVfUkVTX01BU0sJR0VOTUFTSygxLCAwKQ0KPiArI2RlZmluZSBNQVgzMTM0 MV9UUklDS0xFX0RJT0RFX0VOCUJJVCgyKQ0KPiArI2RlZmluZSBNQVgzMTM0MV9UUklDS0xFX0VO QUJMRV9CSVQJQklUKDMpDQo+ICsjZGVmaW5lIE1BWDMxMzQxX1BPV0VSX01HTVRfUkVHCQkweDU2 DQo+ICsjZGVmaW5lIE1BWDMxMzQxX1BPV0VSX01HTVRfVFJJQ0tMRV9CSVQJQklUKDApDQo+ICsN Cj4gKyNkZWZpbmUgTUFYMzEzM1hfVFJJQ0tMRV9SRVNfTUFTSwlHRU5NQVNLKDIsIDEpDQo+ICsj ZGVmaW5lIE1BWDMxMzNYX1RSSUNLTEVfRElPREVfRU4JQklUKDMpDQo+ICsjZGVmaW5lIE1BWDMx MzNYX1RSSUNLTEVfRU5BQkxFX0JJVAlCSVQoMCkNCj4gKw0KPiArI2RlZmluZSBNQVgzMTMyOV9U UklDS0xFX0VOQUJMRV9CSVQJQklUKDcpDQo+ICsjZGVmaW5lIE1BWDMxMzQzX1RSSUNLTEVfRU5B QkxFX01BU0sJR0VOTUFTSyg3LCA0KQ0KPiArI2RlZmluZSBNQVgzMTM0M19UUklDS0xFX0VOQUJM RV9DT0RFCTUNCj4gKyNkZWZpbmUgTUFYMzEzMjlfNDNfVFJJQ0tMRV9SRVNfTUFTSwlHRU5NQVNL KDEsIDApDQo+ICsjZGVmaW5lIE1BWDMxMzI5XzQzX1RSSUNLTEVfRElPREVfRU4JQklUKDIpDQo+ ICsNCj4gKyNkZWZpbmUgTUFYMzEzMjlfQ09ORklHMl9SRUcJCTB4MDQNCj4gKyNkZWZpbmUgTUFY MzEzMjlfQ09ORklHMl9DTEtJTl9FTglCSVQoMikNCj4gKyNkZWZpbmUgTUFYMzEzMjlfQ09ORklH Ml9DTEtJTl9GUkVRCUdFTk1BU0soMSwgMCkNCj4gKw0KPiArI2RlZmluZSBNQVgzMTM0MV80Ml9D T05GSUcxX1JFRwkJMHgwMA0KPiArI2RlZmluZSBNQVgzMTM0MV80Ml9DT05GSUcxX0NMS0lOX0VO CUJJVCg3KQ0KPiArI2RlZmluZSBNQVgzMTM0MV80Ml9DT05GSUcxX0NMS0lOX0ZSRVEJR0VOTUFT Syg1LCA0KQ0KPiArI2RlZmluZSBNQVgzMTM0MV80Ml9DT05GSUcxX09TQ19ESVNBQkxFCUJJVCgz KQ0KPiArI2RlZmluZSBNQVgzMTM0MV80Ml9DT05GSUcxX1NXUlNUCUJJVCgwKQ0KPiArDQo+ICtl bnVtIG1heDMxM3h4X2lkcyB7DQo+ICsJSURfTUFYMzEzMjgsDQo+ICsJSURfTUFYMzEzMjksDQo+ ICsJSURfTUFYMzEzMzEsDQo+ICsJSURfTUFYMzEzMzQsDQo+ICsJSURfTUFYMzEzNDEsDQo+ICsJ SURfTUFYMzEzNDIsDQo+ICsJSURfTUFYMzEzNDMsDQo+ICsJTUFYMzEzWFhfSURfTlINCj4gK307 DQo+ICsNCj4gK3N0cnVjdCBjbGtvdXRfY2ZnIHsNCj4gKwljb25zdCBpbnQgKmZyZXFfYXZhaWw7 DQo+ICsJdTggZnJlcV9zaXplOw0KPiArCXU4IGZyZXFfcG9zOw0KPiArCXU4IHJlZzsNCj4gKwl1 OCBlbl9iaXQ7DQo+ICsJYm9vbCBlbl9pbnZlcnQ7DQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3QgY2hp cF9kZXNjIHsNCj4gKwlzdHJ1Y3QgY2xrb3V0X2NmZyAqY2xrb3V0Ow0KPiArCWNvbnN0IGNoYXIg KmNsa291dF9uYW1lOw0KPiArCXU4IHNlY19yZWc7DQo+ICsJdTggYWxhcm0xX3NlY19yZWc7DQo+ ICsNCj4gKwl1OCBpbnRfZW5fcmVnOw0KPiArCXU4IGludF9zdGF0dXNfcmVnOw0KPiArDQo+ICsJ dTggcmFtX3JlZzsNCj4gKwl1OCByYW1fc2l6ZTsNCj4gKw0KPiArCXU4IHRlbXBfcmVnOw0KPiAr DQo+ICsJdTggdHJpY2tsZV9yZWc7DQo+ICt9Ow0KPiArDQo+ICsjZGVmaW5lIGNsa19od190b19t YXgzMTN4eChfaHcpIGNvbnRhaW5lcl9vZihfaHcsIHN0cnVjdCBtYXgzMTN4eCwgY2xrb3V0KQ0K PiArDQo+ICtzdHJ1Y3QgbWF4MzEzeHggew0KPiArCWVudW0gbWF4MzEzeHhfaWRzIGlkOw0KPiAr CXN0cnVjdCByZWdtYXAgKnJlZ21hcDsNCj4gKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOw0KPiAr CXN0cnVjdCBjbGtfaHcgY2xrb3V0Ow0KPiArCXN0cnVjdCBjbGsgKmNsa2luOw0KPiArCWNvbnN0 IHN0cnVjdCBjaGlwX2Rlc2MgKmNoaXA7DQo+ICsJaW50IGlycTsNCj4gK307DQo+ICsNCj4gK3N0 YXRpYyBjb25zdCBpbnQgbWF4MzEzeHhfY2xraW5fZnJlcVtdID0geyAxLCA1MCwgNjAsIDMyNzY4 IH07DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBpbnQgbWF4MzEzMjhfY2xrb3V0X2ZyZXFbXSA9IHsg MSwgMTAyNCwgNDA5NiwgODE5MiB9Ow0KPiArc3RhdGljIGNvbnN0IGludCBtYXgzMTMyOV9jbGtv dXRfZnJlcVtdID0geyAxLCA0MDk2LCA4MTkyLCAzMjc2OCB9Ow0KPiArc3RhdGljIGNvbnN0IGlu dCBtYXgzMTMzeF9jbGtvdXRfZnJlcVtdID0geyAxLCA2NCwgMTAyNCwgMzI3NjggfTsNCj4gK3N0 YXRpYyBjb25zdCBpbnQgbWF4MzEzNDFfNDJfY2xrb3V0X2ZyZXFbXSA9IHsgMSwgNTAsIDYwLCAz Mjc2OCB9Ow0KPiArc3RhdGljIGNvbnN0IGludCBtYXgzMTM0M19jbGtvdXRfZnJlcVtdID0geyAx LCAyLCA0LCA4LCAxNiwgMzIsIDY0LCAxMjgsIDMyODc1IH07DQo+ICsNCj4gK3N0YXRpYyBzdHJ1 Y3QgY2xrb3V0X2NmZyBtYXgzMTMyOF9jbGtvdXQgPSB7DQo+ICsJLmZyZXFfYXZhaWwgPSBtYXgz MTMyOF9jbGtvdXRfZnJlcSwNCj4gKwkuZnJlcV9zaXplID0gQVJSQVlfU0laRShtYXgzMTMyOF9j bGtvdXRfZnJlcSksDQo+ICsJLmZyZXFfcG9zID0gMywNCj4gKwkucmVnID0gMHgwRSwNCj4gKwku ZW5fYml0ID0gQklUKDMpLA0KPiArCS5lbl9pbnZlcnQgPSB0cnVlLA0KPiArfTsNCj4gKw0KPiAr c3RhdGljIHN0cnVjdCBjbGtvdXRfY2ZnIG1heDMxMzI5X2Nsa291dCA9IHsNCj4gKwkuZnJlcV9h dmFpbCA9IG1heDMxMzI5X2Nsa291dF9mcmVxLA0KPiArCS5mcmVxX3NpemUgPSBBUlJBWV9TSVpF KG1heDMxMzI5X2Nsa291dF9mcmVxKSwNCj4gKwkuZnJlcV9wb3MgPSA1LA0KPiArCS5yZWcgPSAw eDA0LA0KPiArCS5lbl9iaXQgPSBCSVQoNyksDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgc3RydWN0 IGNsa291dF9jZmcgbWF4MzEzM3hfY2xrb3V0ID0gew0KPiArCS5mcmVxX2F2YWlsID0gbWF4MzEz M3hfY2xrb3V0X2ZyZXEsDQo+ICsJLmZyZXFfc2l6ZSA9IEFSUkFZX1NJWkUobWF4MzEzM3hfY2xr b3V0X2ZyZXEpLA0KPiArCS5mcmVxX3BvcyA9IDAsDQo+ICsJLnJlZyA9IDB4MDQsDQo+ICsJLmVu X2JpdCA9IEJJVCgyKSwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBzdHJ1Y3QgY2xrb3V0X2NmZyBt YXgzMTM0MV80Ml9jbGtvdXQgPSB7DQo+ICsJLmZyZXFfYXZhaWwgPSBtYXgzMTM0MV80Ml9jbGtv dXRfZnJlcSwNCj4gKwkuZnJlcV9zaXplID0gQVJSQVlfU0laRShtYXgzMTM0MV80Ml9jbGtvdXRf ZnJlcSksDQo+ICsJLmZyZXFfcG9zID0gMSwNCj4gKwkucmVnID0gMHgwMCwNCj4gKwkuZW5fYml0 ID0gQklUKDYpLA0KPiArCS5lbl9pbnZlcnQgPSB0cnVlLA0KPiArfTsNCj4gKw0KPiArc3RhdGlj IHN0cnVjdCBjbGtvdXRfY2ZnIG1heDMxMzQzX2Nsa291dCA9IHsNCj4gKwkuZnJlcV9hdmFpbCA9 IG1heDMxMzQzX2Nsa291dF9mcmVxLA0KPiArCS5mcmVxX3NpemUgPSBBUlJBWV9TSVpFKG1heDMx MzQzX2Nsa291dF9mcmVxKSwNCj4gKwkuZnJlcV9wb3MgPSAzLA0KPiArCS5yZWcgPSAweDA0LA0K PiArCS5lbl9iaXQgPSBCSVQoNyksDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IGNoaXBfZGVzYyBjaGlwW01BWDMxM1hYX0lEX05SXSA9IHsNCj4gKwlbSURfTUFYMzEzMjhdID0g ew0KPiArCQkuaW50X2VuX3JlZyA9IDB4MEUsDQo+ICsJCS5pbnRfc3RhdHVzX3JlZyA9IDB4MEYs DQo+ICsJCS5zZWNfcmVnID0gMHgwMCwNCj4gKwkJLmFsYXJtMV9zZWNfcmVnID0gMHgwNywNCj4g KwkJLnRlbXBfcmVnID0gMHgxMSwNCj4gKwkJLmNsa291dCA9ICZtYXgzMTMyOF9jbGtvdXQsDQo+ ICsJCS5jbGtvdXRfbmFtZSA9ICJtYXgzMTMyOC1zcXciLA0KPiArCX0sDQo+ICsJW0lEX01BWDMx MzI5XSA9IHsNCj4gKwkJLmludF9lbl9yZWcgPSAweDAxLA0KPiArCQkuaW50X3N0YXR1c19yZWcg PSAweDAwLA0KPiArCQkuc2VjX3JlZyA9IDB4MDYsDQo+ICsJCS5hbGFybTFfc2VjX3JlZyA9IDB4 MEQsDQo+ICsJCS5yYW1fcmVnID0gMHgyMiwNCj4gKwkJLnJhbV9zaXplID0gNjQsDQo+ICsJCS50 cmlja2xlX3JlZyA9IDB4MTksDQo+ICsJCS5jbGtvdXQgPSAmbWF4MzEzMjlfY2xrb3V0LA0KPiAr CQkuY2xrb3V0X25hbWUgPSAibWF4MzEzMjktY2xrb3V0IiwNCj4gKwl9LA0KPiArCVtJRF9NQVgz MTMzMV0gPSB7DQo+ICsJCS5pbnRfZW5fcmVnID0gMHgwMSwNCj4gKwkJLmludF9zdGF0dXNfcmVn ID0gMHgwMCwNCj4gKwkJLnNlY19yZWcgPSAweDA4LA0KPiArCQkuYWxhcm0xX3NlY19yZWcgPSAw eDBGLA0KPiArCQkucmFtX3JlZyA9IDB4MjAsDQo+ICsJCS5yYW1fc2l6ZSA9IDMyLA0KPiArCQku dHJpY2tsZV9yZWcgPSAweDFCLA0KPiArCQkuY2xrb3V0ID0gJm1heDMxMzN4X2Nsa291dCwNCj4g KwkJLmNsa291dF9uYW1lID0gIm1heDMxMzMxLWNsa291dCIsDQo+ICsJfSwNCj4gKwlbSURfTUFY MzEzMzRdID0gew0KPiArCQkuaW50X2VuX3JlZyA9IDB4MDEsDQo+ICsJCS5pbnRfc3RhdHVzX3Jl ZyA9IDB4MDAsDQo+ICsJCS5zZWNfcmVnID0gMHgwOSwNCj4gKwkJLmFsYXJtMV9zZWNfcmVnID0g MHgxMCwNCj4gKwkJLnJhbV9yZWcgPSAweDMwLA0KPiArCQkucmFtX3NpemUgPSAzMiwNCj4gKwkJ LnRyaWNrbGVfcmVnID0gMHgxRSwNCj4gKwkJLmNsa291dCA9ICZtYXgzMTMzeF9jbGtvdXQsDQo+ ICsJCS5jbGtvdXRfbmFtZSA9ICJtYXgzMTMzNC1jbGtvdXQiLA0KPiArCX0sDQo+ICsJW0lEX01B WDMxMzQxXSA9IHsNCj4gKwkJLmludF9lbl9yZWcgPSAweDA0LA0KPiArCQkuaW50X3N0YXR1c19y ZWcgPSAweDA1LA0KPiArCQkuc2VjX3JlZyA9IDB4MDYsDQo+ICsJCS5hbGFybTFfc2VjX3JlZyA9 IDB4MEQsDQo+ICsJCS5yYW1fcmVnID0gMHgxNiwNCj4gKwkJLnJhbV9zaXplID0gNjQsDQo+ICsJ CS50cmlja2xlX3JlZyA9IDB4NTcsDQo+ICsJCS5jbGtvdXQgPSAmbWF4MzEzNDFfNDJfY2xrb3V0 LA0KPiArCQkuY2xrb3V0X25hbWUgPSAibWF4MzEzNDEtY2xrb3V0IiwNCj4gKwl9LA0KPiArCVtJ RF9NQVgzMTM0Ml0gPSB7DQo+ICsJCS5pbnRfZW5fcmVnID0gMHgwNCwNCj4gKwkJLmludF9zdGF0 dXNfcmVnID0gMHgwNSwNCj4gKwkJLnNlY19yZWcgPSAweDA2LA0KPiArCQkuYWxhcm0xX3NlY19y ZWcgPSAweDBELA0KPiArCQkuY2xrb3V0ID0gJm1heDMxMzQxXzQyX2Nsa291dCwNCj4gKwkJLmNs a291dF9uYW1lID0gIm1heDMxMzQyLWNsa291dCIsDQo+ICsJfSwNCj4gKwlbSURfTUFYMzEzNDNd ID0gew0KPiArCQkuaW50X2VuX3JlZyA9IDB4MDEsDQo+ICsJCS5pbnRfc3RhdHVzX3JlZyA9IDB4 MDAsDQo+ICsJCS5zZWNfcmVnID0gMHgwNiwNCj4gKwkJLmFsYXJtMV9zZWNfcmVnID0gMHgwRCwN Cj4gKwkJLnJhbV9yZWcgPSAweDIyLA0KPiArCQkucmFtX3NpemUgPSA2NCwNCj4gKwkJLnRlbXBf cmVnID0gMHgxQSwNCj4gKwkJLnRyaWNrbGVfcmVnID0gMHgxOSwNCj4gKwkJLmNsa291dCA9ICZt YXgzMTM0M19jbGtvdXQsDQo+ICsJCS5jbGtvdXRfbmFtZSA9ICJtYXgzMTM0My1jbGtvIiwNCj4g Kwl9LA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHUzMiBtYXgzMTN4eF90cmlja2xlX29o bXNbXSA9IHsgMzAwMCwgNjAwMCwgMTEwMDAgfTsNCj4gKw0KPiArc3RhdGljIGJvb2wgbWF4MzEz eHhfdm9sYXRpbGVfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJlZykNCj4g K3sNCj4gKwlzdHJ1Y3QgbWF4MzEzeHggKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiAr CWNvbnN0IHN0cnVjdCBjaGlwX2Rlc2MgKmNoaXAgPSBydGMtPmNoaXA7DQo+ICsNCj4gKwkvKiB0 aW1lIGtlZXBpbmcgcmVnaXN0ZXJzICovDQo+ICsJaWYgKHJlZyA+PSBjaGlwLT5zZWNfcmVnICYm IHJlZyA8IGNoaXAtPnNlY19yZWcgKyBNQVgzMTNYWF9USU1FX1NJWkUpDQo+ICsJCXJldHVybiB0 cnVlOw0KPiArDQo+ICsJLyogaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAqLw0KPiArCWlmIChy ZWcgPT0gY2hpcC0+aW50X3N0YXR1c19yZWcpDQo+ICsJCXJldHVybiB0cnVlOw0KPiArDQo+ICsJ LyogdGVtcGVyYXR1cmUgcmVnaXN0ZXJzICovDQo+ICsJcmV0dXJuIGNoaXAtPnRlbXBfcmVnICYm DQo+ICsJCShyZWcgPT0gY2hpcC0+dGVtcF9yZWcgfHwgcmVnID09IGNoaXAtPnRlbXBfcmVnICsg MSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyByZWdt YXBfY29uZmlnID0gew0KPiArCS5yZWdfYml0cyA9IDgsDQo+ICsJLnZhbF9iaXRzID0gOCwNCj4g KwkuY2FjaGVfdHlwZSA9IFJFR0NBQ0hFX1JCVFJFRSwNCj4gKwkudm9sYXRpbGVfcmVnID0gbWF4 MzEzeHhfdm9sYXRpbGVfcmVnLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGludCBtYXgzMTN4eF9n ZXRfaG91cih1OCBob3VyX3JlZykNCj4gK3sNCj4gKwlpbnQgaG91cjsNCj4gKw0KPiArCS8qIDI0 SHIgbW9kZSAqLw0KPiArCWlmICghRklFTERfR0VUKE1BWDMxM1hYX0hSU19GXzEyXzI0LCBob3Vy X3JlZykpDQo+ICsJCXJldHVybiBiY2QyYmluKGhvdXJfcmVnICYgMHgzZik7DQo+ICsNCj4gKwkv KiAxMkhyIG1vZGUgKi8NCj4gKwlob3VyID0gYmNkMmJpbihob3VyX3JlZyAmIDB4MWYpOw0KPiAr CWlmIChob3VyID09IDEyKQ0KPiArCQlob3VyID0gMDsNCj4gKw0KPiArCWlmIChGSUVMRF9HRVQo TUFYMzEzWFhfSFJTX0ZfQU1fUE0sIGhvdXJfcmVnKSkNCj4gKwkJaG91ciArPSAxMjsNCj4gKw0K PiArCXJldHVybiBob3VyOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IG1heDMxM3h4X3JlYWRf dGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdCkNCj4gK3sNCj4gKwlz dHJ1Y3QgbWF4MzEzeHggKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiArCXU4IHJlZ3Nb N107DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCXJldCA9IHJlZ21hcF9idWxrX3JlYWQocnRjLT5y ZWdtYXAsIHJ0Yy0+Y2hpcC0+c2VjX3JlZywgcmVncywgNyk7DQo+ICsJaWYgKHJldCkNCj4gKwkJ cmV0dXJuIHJldDsNCj4gKw0KPiArCXQtPnRtX3NlYyA9IGJjZDJiaW4ocmVnc1swXSAmIDB4N2Yp Ow0KPiArCXQtPnRtX21pbiA9IGJjZDJiaW4ocmVnc1sxXSAmIDB4N2YpOw0KPiArCXQtPnRtX2hv dXIgPSBtYXgzMTN4eF9nZXRfaG91cihyZWdzWzJdKTsNCj4gKwl0LT50bV93ZGF5ID0gYmNkMmJp bihyZWdzWzNdICYgMHgwNykgLSAxOw0KPiArCXQtPnRtX21kYXkgPSBiY2QyYmluKHJlZ3NbNF0g JiAweDNmKTsNCj4gKwl0LT50bV9tb24gPSBiY2QyYmluKHJlZ3NbNV0gJiAweDFmKSAtIDE7DQo+ ICsJdC0+dG1feWVhciA9IGJjZDJiaW4ocmVnc1s2XSkgKyAxMDA7DQo+ICsNCj4gKwlpZiAoRklF TERfR0VUKE1BWDMxM1hYX01PTlRIX0NFTlRVUlksIHJlZ3NbNV0pKQ0KPiArCQl0LT50bV95ZWFy ICs9IDEwMDsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IG1h eDMxM3h4X3ByZV9zZXRfdGltZShzdHJ1Y3QgbWF4MzEzeHggKnJ0YykNCj4gK3sNCj4gKwlpZiAo IXJ0Yy0+Y2xraW4pDQo+ICsJCXJldHVybiAwOw0KPiArDQo+ICsJLyogQ2xraW4gbmVlZHMgdG8g YmUgZGlzYWJsZWQgYmVmb3JlIHNldHRpbmcgdGltZS4gKi8NCj4gKwlzd2l0Y2ggKHJ0Yy0+aWQp IHsNCj4gKwljYXNlIElEX01BWDMxMzQxOg0KPiArCWNhc2UgSURfTUFYMzEzNDI6DQo+ICsJCXJl dHVybiByZWdtYXBfY2xlYXJfYml0cyhydGMtPnJlZ21hcCwNCj4gKwkJCQkJIE1BWDMxMzQxXzQy X0NPTkZJRzFfUkVHLA0KPiArCQkJCQkgTUFYMzEzNDFfNDJfQ09ORklHMV9DTEtJTl9FTik7DQo+ ICsJZGVmYXVsdDoNCj4gKwkJcmV0dXJuIDA7DQo+ICsJfQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMg aW50IG1heDMxM3h4X3Bvc3Rfc2V0X3RpbWUoc3RydWN0IG1heDMxM3h4ICpydGMpDQo+ICt7DQo+ ICsJaW50IHJldDsNCj4gKw0KPiArCXN3aXRjaCAocnRjLT5pZCkgew0KPiArCWNhc2UgSURfTUFY MzEzNDE6DQo+ICsJY2FzZSBJRF9NQVgzMTM0MjoNCj4gKwkJcmV0ID0gcmVnbWFwX3NldF9iaXRz KHJ0Yy0+cmVnbWFwLCBNQVgzMTM0WF9DRkcyX1JFRywNCj4gKwkJCQkgICAgICBNQVgzMTM0WF9D RkcyX1NFVF9SVEMpOw0KPiArCQlpZiAocmV0KQ0KPiArCQkJcmV0dXJuIHJldDsNCj4gKw0KPiAr CQlmc2xlZXAoMTAwMDApOw0KPiArDQo+ICsJCXJldCA9IHJlZ21hcF9jbGVhcl9iaXRzKHJ0Yy0+ cmVnbWFwLCBNQVgzMTM0WF9DRkcyX1JFRywNCj4gKwkJCQkJTUFYMzEzNFhfQ0ZHMl9TRVRfUlRD KTsNCj4gKwkJaWYgKHJldCkNCj4gKwkJCXJldHVybiByZXQ7DQo+ICsNCj4gKwkJaWYgKHJ0Yy0+ Y2xraW4pDQo+ICsJCQlyZXQgPSByZWdtYXBfc2V0X2JpdHMocnRjLT5yZWdtYXAsDQo+ICsJCQkJ CSAgICAgIE1BWDMxMzQxXzQyX0NPTkZJRzFfUkVHLA0KPiArCQkJCQkgICAgICBNQVgzMTM0MV80 Ml9DT05GSUcxX0NMS0lOX0VOKTsNCj4gKw0KPiArCQlicmVhazsNCj4gKwlkZWZhdWx0Og0KPiAr CQlyZXR1cm4gMDsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gcmV0Ow0KPiArfQ0KPiArDQo+ICtz dGF0aWMgaW50IG1heDMxM3h4X3NldF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0 Y190aW1lICp0KQ0KPiArew0KPiArCXN0cnVjdCBtYXgzMTN4eCAqcnRjID0gZGV2X2dldF9kcnZk YXRhKGRldik7DQo+ICsJdTggcmVnc1s3XTsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJcmVnc1sw XSA9IGJpbjJiY2QodC0+dG1fc2VjKTsNCj4gKwlyZWdzWzFdID0gYmluMmJjZCh0LT50bV9taW4p Ow0KPiArCXJlZ3NbMl0gPSBiaW4yYmNkKHQtPnRtX2hvdXIpOw0KPiArCXJlZ3NbM10gPSBiaW4y YmNkKHQtPnRtX3dkYXkgKyAxKTsNCj4gKwlyZWdzWzRdID0gYmluMmJjZCh0LT50bV9tZGF5KTsN Cj4gKwlyZWdzWzVdID0gYmluMmJjZCh0LT50bV9tb24gKyAxKTsNCj4gKwlyZWdzWzZdID0gYmlu MmJjZCh0LT50bV95ZWFyICUgMTAwKTsNCj4gKw0KPiArCWlmICh0LT50bV95ZWFyID49IDIwMCkN Cj4gKwkJcmVnc1s1XSB8PSBGSUVMRF9QUkVQKE1BWDMxM1hYX01PTlRIX0NFTlRVUlksIDEpOw0K PiArDQo+ICsJcmV0ID0gbWF4MzEzeHhfcHJlX3NldF90aW1lKHJ0Yyk7DQo+ICsJaWYgKHJldCkN Cj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiArCXJldCA9IHJlZ21hcF9idWxrX3dyaXRlKHJ0Yy0+ cmVnbWFwLCBydGMtPmNoaXAtPnNlY19yZWcsIHJlZ3MsIDcpOw0KPiArCWlmIChyZXQpDQo+ICsJ CXJldHVybiByZXQ7DQo+ICsNCj4gKwlyZXR1cm4gbWF4MzEzeHhfcG9zdF9zZXRfdGltZShydGMp Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IG1heDMxM3h4X3JlYWRfYWxhcm0oc3RydWN0IGRl dmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3drYWxybSAqdCkNCj4gK3sNCj4gKwlzdHJ1Y3QgbWF4MzEz eHggKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiArCXVuc2lnbmVkIGludCBzdGF0dXMs IGludF9lbjsNCj4gKwlzdHJ1Y3QgcnRjX3RpbWUgdGltZTsNCj4gKwl1OCByZWdzWzZdOw0KPiAr CWludCByZXQ7DQo+ICsNCj4gKwlyZXQgPSByZWdtYXBfYnVsa19yZWFkKHJ0Yy0+cmVnbWFwLCBy dGMtPmNoaXAtPmFsYXJtMV9zZWNfcmVnLCByZWdzLA0KPiArCQkJICAgICAgIHNpemVvZihyZWdz KSk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiArCXQtPnRpbWUudG1f c2VjID0gYmNkMmJpbihyZWdzWzBdICYgMHg3Zik7DQo+ICsJdC0+dGltZS50bV9taW4gPSBiY2Qy YmluKHJlZ3NbMV0gJiAweDdmKTsNCj4gKwl0LT50aW1lLnRtX2hvdXIgPSBiY2QyYmluKHJlZ3Nb Ml0gJiAweDNmKTsNCj4gKwl0LT50aW1lLnRtX21kYXkgPSBiY2QyYmluKHJlZ3NbM10gJiAweDNm KTsNCj4gKwl0LT50aW1lLnRtX21vbiA9IGJjZDJiaW4ocmVnc1s0XSAmIDB4MWYpIC0gMTsNCj4g Kwl0LT50aW1lLnRtX3llYXIgPSBiY2QyYmluKHJlZ3NbNV0pICsgMTAwOw0KPiArDQo+ICsJcmV0 ID0gbWF4MzEzeHhfcmVhZF90aW1lKGRldiwgJnRpbWUpOw0KPiArCWlmIChyZXQpDQo+ICsJCXJl dHVybiByZXQ7DQo+ICsNCj4gKwlpZiAodGltZS50bV95ZWFyID49IDIwMCkNCj4gKwkJdC0+dGlt ZS50bV95ZWFyICs9IDEwMDsNCj4gKw0KPiArCXJldCA9IHJlZ21hcF9yZWFkKHJ0Yy0+cmVnbWFw LCBydGMtPmNoaXAtPmludF9zdGF0dXNfcmVnLCAmc3RhdHVzKTsNCj4gKwlpZiAocmV0KQ0KPiAr CQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJcmV0ID0gcmVnbWFwX3JlYWQocnRjLT5yZWdtYXAsIHJ0 Yy0+Y2hpcC0+aW50X2VuX3JlZywgJmludF9lbik7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJu IHJldDsNCj4gKw0KPiArCXQtPmVuYWJsZWQgPSBGSUVMRF9HRVQoTUFYMzEzWFhfSU5UX0FMQVJN MSwgaW50X2VuKTsNCj4gKwl0LT5wZW5kaW5nID0gRklFTERfR0VUKE1BWDMxM1hYX0lOVF9BTEFS TTEsIHN0YXR1cyk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlu dCBtYXgzMTN4eF9zZXRfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3drYWxy bSAqdCkNCj4gK3sNCj4gKwlzdHJ1Y3QgbWF4MzEzeHggKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShk ZXYpOw0KPiArCXVuc2lnbmVkIGludCByZWc7DQo+ICsJdTggcmVnc1s2XTsNCj4gKwlpbnQgcmV0 Ow0KPiArDQo+ICsJcmVnc1swXSA9IGJpbjJiY2QodC0+dGltZS50bV9zZWMpOw0KPiArCXJlZ3Nb MV0gPSBiaW4yYmNkKHQtPnRpbWUudG1fbWluKTsNCj4gKwlyZWdzWzJdID0gYmluMmJjZCh0LT50 aW1lLnRtX2hvdXIpOw0KPiArCXJlZ3NbM10gPSBiaW4yYmNkKHQtPnRpbWUudG1fbWRheSk7DQo+ ICsJcmVnc1s0XSA9IGJpbjJiY2QodC0+dGltZS50bV9tb24gKyAxKTsNCj4gKwlyZWdzWzVdID0g YmluMmJjZCh0LT50aW1lLnRtX3llYXIgJSAxMDApOw0KPiArDQo+ICsJcmV0ID0gcmVnbWFwX2J1 bGtfd3JpdGUocnRjLT5yZWdtYXAsIHJ0Yy0+Y2hpcC0+YWxhcm0xX3NlY19yZWcsIHJlZ3MsDQo+ ICsJCQkJc2l6ZW9mKHJlZ3MpKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiAr DQo+ICsJcmVnID0gRklFTERfUFJFUChNQVgzMTNYWF9JTlRfQUxBUk0xLCB0LT5lbmFibGVkKTsN Cj4gKwlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocnRjLT5yZWdtYXAsIHJ0Yy0+Y2hpcC0+aW50 X2VuX3JlZywNCj4gKwkJCQkgTUFYMzEzWFhfSU5UX0FMQVJNMSwgcmVnKTsNCj4gKwlpZiAocmV0 KQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJLyogQ2xlYXIgc3RhdHVzIHJlZ2lzdGVyICov DQo+ICsJcmV0dXJuIHJlZ21hcF9yZWFkKHJ0Yy0+cmVnbWFwLCBydGMtPmNoaXAtPmludF9zdGF0 dXNfcmVnLCAmcmVnKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBtYXgzMTN4eF9hbGFybV9p cnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpDQo+ICt7 DQo+ICsJc3RydWN0IG1heDMxM3h4ICpydGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gKw0K PiArCXJldHVybiByZWdtYXBfdXBkYXRlX2JpdHMocnRjLT5yZWdtYXAsIHJ0Yy0+Y2hpcC0+aW50 X2VuX3JlZywNCj4gKwkJCQkgIE1BWDMxM1hYX0lOVF9BTEFSTTEsDQo+ICsJCQkJICBGSUVMRF9Q UkVQKE1BWDMxM1hYX0lOVF9BTEFSTTEsIGVuYWJsZWQpKTsNCj4gK30NCj4gKw0KPiArc3RhdGlj IGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIG1heDMxMzN4X3J0Y19vcHMgPSB7DQo+ICsJLnJl YWRfdGltZQk9IG1heDMxM3h4X3JlYWRfdGltZSwNCj4gKwkuc2V0X3RpbWUJPSBtYXgzMTN4eF9z ZXRfdGltZSwNCj4gKwkucmVhZF9hbGFybQk9IG1heDMxM3h4X3JlYWRfYWxhcm0sDQo+ICsJLnNl dF9hbGFybQk9IG1heDMxM3h4X3NldF9hbGFybSwNCj4gKwkuYWxhcm1faXJxX2VuYWJsZSA9IG1h eDMxM3h4X2FsYXJtX2lycV9lbmFibGUsDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgaXJxcmV0dXJu X3QgbWF4MzEzeHhfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkNCj4gK3sNCj4gKwlzdHJ1Y3Qg bWF4MzEzeHgJKnJ0YyA9IGRldl9pZDsNCj4gKwlzdHJ1Y3QgbXV0ZXggKmxvY2sgPSAmcnRjLT5y dGMtPm9wc19sb2NrOw0KPiArCWludCBzdGF0LCByZXQ7DQo+ICsNCj4gKwltdXRleF9sb2NrKGxv Y2spOw0KPiArCXJldCA9IHJlZ21hcF9yZWFkKHJ0Yy0+cmVnbWFwLCBydGMtPmNoaXAtPmludF9z dGF0dXNfcmVnLCAmc3RhdCk7DQo+ICsJaWYgKHJldCkNCj4gKwkJZ290byBvdXQ7DQo+ICsNCj4g KwlpZiAoRklFTERfR0VUKE1BWDMxM1hYX0lOVF9BTEFSTTEsIHN0YXQpKSB7DQo+ICsJCXJldCA9 IHJlZ21hcF91cGRhdGVfYml0cyhydGMtPnJlZ21hcCwgcnRjLT5jaGlwLT5pbnRfZW5fcmVnLA0K PiArCQkJCQkgTUFYMzEzWFhfSU5UX0FMQVJNMSwgMCk7DQo+ICsJCWlmIChyZXQpDQo+ICsJCQln b3RvIG91dDsNCj4gKw0KPiArCQlydGNfdXBkYXRlX2lycShydGMtPnJ0YywgMSwgUlRDX0FGIHwg UlRDX0lSUUYpOw0KPiArCX0NCj4gKw0KPiArb3V0Og0KPiArCW11dGV4X3VubG9jayhsb2NrKTsN Cj4gKw0KPiArCXJldHVybiBJUlFfSEFORExFRDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBt YXgzMTN4eF9udm1lbV9yZWdfcmVhZCh2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LA0K PiArCQkJCSAgIHZvaWQgKnZhbCwgc2l6ZV90IGJ5dGVzKQ0KPiArew0KPiArCXN0cnVjdCBtYXgz MTN4eCAqcnRjID0gcHJpdjsNCj4gKwl1bnNpZ25lZCBpbnQgcmVnID0gcnRjLT5jaGlwLT5yYW1f cmVnICsgb2Zmc2V0Ow0KPiArDQo+ICsJcmV0dXJuIHJlZ21hcF9idWxrX3JlYWQocnRjLT5yZWdt YXAsIHJlZywgdmFsLCBieXRlcyk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgbWF4MzEzeHhf bnZtZW1fcmVnX3dyaXRlKHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBvZmZzZXQsDQo+ICsJCQkJ ICAgIHZvaWQgKnZhbCwgc2l6ZV90IGJ5dGVzKQ0KPiArew0KPiArCXN0cnVjdCBtYXgzMTN4eCAq cnRjID0gcHJpdjsNCj4gKwl1bnNpZ25lZCBpbnQgcmVnID0gcnRjLT5jaGlwLT5yYW1fcmVnICsg b2Zmc2V0Ow0KPiArDQo+ICsJcmV0dXJuIHJlZ21hcF9idWxrX3dyaXRlKHJ0Yy0+cmVnbWFwLCBy ZWcsIHZhbCwgYnl0ZXMpOw0KPiArfQ0KPiArDQo+ICtzdHJ1Y3QgbnZtZW1fY29uZmlnIG1heDMx M3h4X252bWVtX2NmZyA9IHsNCj4gKwkucmVnX3JlYWQgPSBtYXgzMTN4eF9udm1lbV9yZWdfcmVh ZCwNCj4gKwkucmVnX3dyaXRlID0gbWF4MzEzeHhfbnZtZW1fcmVnX3dyaXRlLA0KPiArCS53b3Jk X3NpemUgPSA4LA0KPiArfTsNCj4gKw0KPiArc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4MzEzeHhf Y2xrb3V0X3JlY2FsY19yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LA0KPiArCQkJCQkJIHVuc2lnbmVk IGxvbmcgcGFyZW50X3JhdGUpDQo+ICt7DQo+ICsJc3RydWN0IG1heDMxM3h4ICpydGMgPSBjbGtf aHdfdG9fbWF4MzEzeHgoaHcpOw0KPiArCWNvbnN0IHN0cnVjdCBjbGtvdXRfY2ZnICpjbGtvdXQg PSBydGMtPmNoaXAtPmNsa291dDsNCj4gKwl1bnNpZ25lZCBpbnQgZnJlcV9tYXNrOw0KPiArCXVu c2lnbmVkIGludCByZWc7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCXJldCA9IHJlZ21hcF9yZWFk KHJ0Yy0+cmVnbWFwLCBjbGtvdXQtPnJlZywgJnJlZyk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0 dXJuIDA7DQo+ICsNCj4gKwlmcmVxX21hc2sgPSBfX3JvdW5kdXBfcG93X29mX3R3byhjbGtvdXQt PmZyZXFfc2l6ZSkgLSAxOw0KPiArDQo+ICsJcmV0dXJuIGNsa291dC0+ZnJlcV9hdmFpbFsocmVn ID4+IGNsa291dC0+ZnJlcV9wb3MpICYgZnJlcV9tYXNrXTsNCj4gK30NCj4gKw0KPiArc3RhdGlj IGxvbmcgbWF4MzEzeHhfY2xrb3V0X3JvdW5kX3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2ln bmVkIGxvbmcgcmF0ZSwNCj4gKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyAqcHJhdGUpDQo+ICt7 DQo+ICsJc3RydWN0IG1heDMxM3h4ICpydGMgPSBjbGtfaHdfdG9fbWF4MzEzeHgoaHcpOw0KPiAr CXN0cnVjdCBjbGtvdXRfY2ZnICpjbGtvdXQgPSBydGMtPmNoaXAtPmNsa291dDsNCj4gKwlpbnQg aW5kZXg7DQo+ICsNCj4gKwlpbmRleCA9IGZpbmRfY2xvc2VzdChyYXRlLCBjbGtvdXQtPmZyZXFf YXZhaWwsIGNsa291dC0+ZnJlcV9zaXplKTsNCj4gKwlyZXR1cm4gY2xrb3V0LT5mcmVxX2F2YWls W2luZGV4XTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBtYXgzMTN4eF9jbGtvdXRfc2V0X3Jh dGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwNCj4gKwkJCQkgICAgdW5z aWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgbWF4MzEzeHggKnJ0YyA9 IGNsa19od190b19tYXgzMTN4eChodyk7DQo+ICsJc3RydWN0IGNsa291dF9jZmcgKmNsa291dCA9 IHJ0Yy0+Y2hpcC0+Y2xrb3V0Ow0KPiArCXVuc2lnbmVkIGludCBmcmVxX21hc2s7DQo+ICsJaW50 IGluZGV4Ow0KPiArDQo+ICsJaW5kZXggPSBmaW5kX2Nsb3Nlc3QocmF0ZSwgY2xrb3V0LT5mcmVx X2F2YWlsLCBjbGtvdXQtPmZyZXFfc2l6ZSk7DQo+ICsJZnJlcV9tYXNrID0gX19yb3VuZHVwX3Bv d19vZl90d28oY2xrb3V0LT5mcmVxX3NpemUpIC0gMTsNCj4gKw0KPiArCXJldHVybiByZWdtYXBf dXBkYXRlX2JpdHMocnRjLT5yZWdtYXAsIGNsa291dC0+cmVnLA0KPiArCQkJCSAgZnJlcV9tYXNr IDw8IGNsa291dC0+ZnJlcV9wb3MsDQo+ICsJCQkJICBpbmRleCA8PCBjbGtvdXQtPmZyZXFfcG9z KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBtYXgzMTN4eF9jbGtvdXRfZW5hYmxlKHN0cnVj dCBjbGtfaHcgKmh3KQ0KPiArew0KPiArCXN0cnVjdCBtYXgzMTN4eCAqcnRjID0gY2xrX2h3X3Rv X21heDMxM3h4KGh3KTsNCj4gKwlzdHJ1Y3QgY2xrb3V0X2NmZyAqY2xrb3V0ID0gcnRjLT5jaGlw LT5jbGtvdXQ7DQo+ICsNCj4gKwlpZiAoY2xrb3V0LT5lbl9pbnZlcnQpDQo+ICsJCXJldHVybiBy ZWdtYXBfY2xlYXJfYml0cyhydGMtPnJlZ21hcCwgY2xrb3V0LT5yZWcsDQo+ICsJCQkJCSBjbGtv dXQtPmVuX2JpdCk7DQo+ICsNCj4gKwlyZXR1cm4gcmVnbWFwX3NldF9iaXRzKHJ0Yy0+cmVnbWFw LCBjbGtvdXQtPnJlZywgIGNsa291dC0+ZW5fYml0KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZv aWQgbWF4MzEzeHhfY2xrb3V0X2Rpc2FibGUoc3RydWN0IGNsa19odyAqaHcpDQo+ICt7DQo+ICsJ c3RydWN0IG1heDMxM3h4ICpydGMgPSBjbGtfaHdfdG9fbWF4MzEzeHgoaHcpOw0KPiArCXN0cnVj dCBjbGtvdXRfY2ZnICpjbGtvdXQgPSBydGMtPmNoaXAtPmNsa291dDsNCj4gKw0KPiArCXN3aXRj aCAocnRjLT5pZCkgew0KPiArCWNhc2UgSURfTUFYMzEzMzE6DQo+ICsJY2FzZSBJRF9NQVgzMTMz NDoNCj4gKwkJaWYgKHJ0Yy0+aXJxID4gMCkgew0KPiArCQkJZGV2X2VycihydGMtPnJ0Yy0+ZGV2 LnBhcmVudCwNCj4gKwkJCQkiY2xrb3V0IGNhbm5vdCBiZSBkaXNhYmxlZCB3aGVuIElSUSBpcyBy ZXF1ZXN0ZWQiKTsNCj4gKwkJCXJldHVybjsNCj4gKwkJfQ0KPiArCQlicmVhazsNCj4gKwlkZWZh dWx0Og0KPiArCQlicmVhazsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoY2xrb3V0LT5lbl9pbnZlcnQp DQo+ICsJCXJlZ21hcF9zZXRfYml0cyhydGMtPnJlZ21hcCwgY2xrb3V0LT5yZWcsIGNsa291dC0+ ZW5fYml0KTsNCj4gKwllbHNlDQo+ICsJCXJlZ21hcF9jbGVhcl9iaXRzKHJ0Yy0+cmVnbWFwLCBj bGtvdXQtPnJlZywgIGNsa291dC0+ZW5fYml0KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBt YXgzMTN4eF9jbGtvdXRfaXNfZW5hYmxlZChzdHJ1Y3QgY2xrX2h3ICpodykNCj4gK3sNCj4gKwlz dHJ1Y3QgbWF4MzEzeHggKnJ0YyA9IGNsa19od190b19tYXgzMTN4eChodyk7DQo+ICsJc3RydWN0 IGNsa291dF9jZmcgKmNsa291dCA9IHJ0Yy0+Y2hpcC0+Y2xrb3V0Ow0KPiArCXVuc2lnbmVkIGlu dCByZWc7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCXJldCA9IHJlZ21hcF9yZWFkKHJ0Yy0+cmVn bWFwLCBjbGtvdXQtPnJlZywgJnJlZyk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsN Cj4gKw0KPiArCXJldHVybiAhIShyZWcgJiBjbGtvdXQtPmVuX2JpdCkgXiBjbGtvdXQtPmVuX2lu dmVydDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3BzIG1heDMxM3h4 X2Nsa291dF9vcHMgPSB7DQo+ICsJLnJlY2FsY19yYXRlID0gbWF4MzEzeHhfY2xrb3V0X3JlY2Fs Y19yYXRlLA0KPiArCS5yb3VuZF9yYXRlID0gbWF4MzEzeHhfY2xrb3V0X3JvdW5kX3JhdGUsDQo+ ICsJLnNldF9yYXRlID0gbWF4MzEzeHhfY2xrb3V0X3NldF9yYXRlLA0KPiArCS5lbmFibGUgPSBt YXgzMTN4eF9jbGtvdXRfZW5hYmxlLA0KPiArCS5kaXNhYmxlID0gbWF4MzEzeHhfY2xrb3V0X2Rp c2FibGUsDQo+ICsJLmlzX2VuYWJsZWQgPSBtYXgzMTN4eF9jbGtvdXRfaXNfZW5hYmxlZCwNCj4g K307DQo+ICsNCj4gK3N0cnVjdCBjbGtfaW5pdF9kYXRhIG1heDMxM3h4X2Nsa19pbml0ID0gew0K PiArCS5uYW1lID0gIm1heDMxM3h4LWNsa291dCIsDQo+ICsJLm9wcyA9ICZtYXgzMTN4eF9jbGtv dXRfb3BzLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGludCBtYXgzMTN4eF9yZWFkX3RlbXAoc3Ry dWN0IGRldmljZSAqZGV2LCBlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlLA0KPiArCQkJICAg ICAgdTMyIGF0dHIsIGludCBjaGFubmVsLCBsb25nICp2YWwpDQo+ICt7DQo+ICsJc3RydWN0IG1h eDMxM3h4ICpydGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gKwl1OCByZWdbMl07DQo+ICsJ czE2IHRlbXA7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCWlmICh0eXBlICE9IGh3bW9uX3RlbXAg fHwgYXR0ciAhPSBod21vbl90ZW1wX2lucHV0KQ0KPiArCQlyZXR1cm4gLUVPUE5PVFNVUFA7DQo+ ICsNCj4gKwlyZXQgPSByZWdtYXBfYnVsa19yZWFkKHJ0Yy0+cmVnbWFwLCBydGMtPmNoaXAtPnRl bXBfcmVnLCByZWcsIDIpOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiByZXQ7DQo+ICsNCj4g Kwl0ZW1wID0gZ2V0X3VuYWxpZ25lZF9iZTE2KHJlZyk7DQo+ICsNCj4gKwkqdmFsID0gKHRlbXAg LyA2NCkgKiAyNTA7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHVt b2RlX3QgbWF4MzEzeHhfaXNfdmlzaWJsZShjb25zdCB2b2lkICpkYXRhLA0KPiArCQkJCSAgIGVu dW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsDQo+ICsJCQkJICAgdTMyIGF0dHIsIGludCBjaGFu bmVsKQ0KPiArew0KPiArCWlmICh0eXBlID09IGh3bW9uX3RlbXAgJiYgYXR0ciA9PSBod21vbl90 ZW1wX2lucHV0KQ0KPiArCQlyZXR1cm4gMDQ0NDsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGh3bW9uX2NoYW5uZWxfaW5mbyAqbWF4MzEzeHhf aW5mb1tdID0gew0KPiArCUhXTU9OX0NIQU5ORUxfSU5GTyh0ZW1wLCBIV01PTl9UX0lOUFVUKSwN Cj4gKwlOVUxMDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGh3bW9uX29wcyBt YXgzMTN4eF9od21vbl9vcHMgPSB7DQo+ICsJLmlzX3Zpc2libGUgPSBtYXgzMTN4eF9pc192aXNp YmxlLA0KPiArCS5yZWFkID0gbWF4MzEzeHhfcmVhZF90ZW1wLA0KPiArfTsNCj4gKw0KPiArc3Rh dGljIGNvbnN0IHN0cnVjdCBod21vbl9jaGlwX2luZm8gbWF4MzEzeHhfY2hpcF9pbmZvID0gew0K PiArCS5vcHMgPSAmbWF4MzEzeHhfaHdtb25fb3BzLA0KPiArCS5pbmZvID0gbWF4MzEzeHhfaW5m bywNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBpbnQgbWF4MzEzeHhfaW5pdChzdHJ1Y3QgbWF4MzEz eHggKnJ0YykNCj4gK3sNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJc3dpdGNoIChydGMtPmlkKSB7 DQo+ICsJY2FzZSBJRF9NQVgzMTM0MToNCj4gKwljYXNlIElEX01BWDMxMzQyOg0KPiArCQlyZXQg PSByZWdtYXBfY2xlYXJfYml0cyhydGMtPnJlZ21hcCwgTUFYMzEzNDFfNDJfQ09ORklHMV9SRUcs DQo+ICsJCQkJCU1BWDMxMzQxXzQyX0NPTkZJRzFfT1NDX0RJU0FCTEUpOw0KPiArCQlpZiAocmV0 KQ0KPiArCQkJcmV0dXJuIHJldDsNCj4gKw0KPiArCQlyZXR1cm4gcmVnbWFwX3NldF9iaXRzKHJ0 Yy0+cmVnbWFwLCBNQVgzMTM0MV80Ml9DT05GSUcxX1JFRywNCj4gKwkJCQkgICAgICAgTUFYMzEz NDFfNDJfQ09ORklHMV9TV1JTVCk7DQo+ICsJZGVmYXVsdDoNCj4gKwkJcmV0dXJuIDA7DQo+ICsJ fQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IG1heDMxM3h4X2Nsa291dF9yZWdpc3RlcihzdHJ1 Y3QgZGV2aWNlICpkZXYpDQo+ICt7DQo+ICsJc3RydWN0IG1heDMxM3h4ICpydGMgPSBkZXZfZ2V0 X2RydmRhdGEoZGV2KTsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJaWYgKCFkZXZpY2VfcHJvcGVy dHlfcHJlc2VudChkZXYsICIjY2xvY2stY2VsbHMiKSkNCj4gKwkJcmV0dXJuIDA7DQo+ICsNCj4g KwltYXgzMTN4eF9jbGtfaW5pdC5uYW1lID0gcnRjLT5jaGlwLT5jbGtvdXRfbmFtZTsNCj4gKwlk ZXZpY2VfcHJvcGVydHlfcmVhZF9zdHJpbmcoZGV2LCAiY2xvY2stb3V0cHV0LW5hbWVzIiwNCj4g KwkJCQkgICAgJm1heDMxM3h4X2Nsa19pbml0Lm5hbWUpOw0KPiArCXJ0Yy0+Y2xrb3V0LmluaXQg PSAmbWF4MzEzeHhfY2xrX2luaXQ7DQo+ICsNCj4gKwlyZXQgPSBkZXZtX2Nsa19od19yZWdpc3Rl cihkZXYsICZydGMtPmNsa291dCk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIGRldl9lcnJf cHJvYmUoZGV2LCByZXQsICJjYW5ub3QgcmVnaXN0ZXIgY2xvY2tcbiIpOw0KPiArDQo+ICsJcmV0 dXJuIGRldm1fb2ZfY2xrX2FkZF9od19wcm92aWRlcihkZXYsIG9mX2Nsa19od19zaW1wbGVfZ2V0 LA0KPiArCQkJCQkgICAmcnRjLT5jbGtvdXQpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IG1h eDMxM3h4X3RyaWNrbGVfY2hhcmdlcl9zZXR1cChzdHJ1Y3QgZGV2aWNlICpkZXYpDQo+ICt7DQo+ ICsJc3RydWN0IG1heDMxM3h4ICpydGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gKwlib29s IHRyaWNrbGVfZGlvZGVfZW47DQo+ICsJdTMyIGNoYXJnZXJfZW4gPSAwOw0KPiArCWludCBpbmRl eCwgcmVnOw0KPiArCXUzMiBvaG1zID0gMDsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJZGV2aWNl X3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgImF1eC12b2x0YWdlLWNoYXJnZWFibGUiLCAmY2hhcmdl cl9lbik7DQo+ICsJc3dpdGNoIChjaGFyZ2VyX2VuKSB7DQo+ICsJY2FzZSAwOg0KPiArCQlyZXR1 cm4gMDsNCj4gKwljYXNlIDE6DQo+ICsJCXRyaWNrbGVfZGlvZGVfZW4gPSAwOw0KPiArCQlicmVh azsNCj4gKwljYXNlIDI6DQo+ICsJCXRyaWNrbGVfZGlvZGVfZW4gPSAxOw0KPiArCQlicmVhazsN Cj4gKwlkZWZhdWx0Og0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwl9DQo+ICsNCj4gKwlkZXZp Y2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LCAidHJpY2tsZS1yZXNpc3Rvci1vaG1zIiwgJm9obXMp Ow0KPiArDQo+ICsJaWYgKCFydGMtPmNoaXAtPnRyaWNrbGVfcmVnKQ0KPiArCQlyZXR1cm4gMDsN Cj4gKw0KPiArCWluZGV4ID0gZmluZF9jbG9zZXN0KG9obXMsIG1heDMxM3h4X3RyaWNrbGVfb2ht cywNCj4gKwkJCSAgICAgQVJSQVlfU0laRShtYXgzMTN4eF90cmlja2xlX29obXMpKSArIDE7DQo+ ICsNCj4gKwlzd2l0Y2ggKHJ0Yy0+aWQpIHsNCj4gKwljYXNlIElEX01BWDMxMzI5Og0KPiArCQly ZWcgPSBGSUVMRF9QUkVQKE1BWDMxMzI5X1RSSUNLTEVfRU5BQkxFX0JJVCwgMSkgfA0KPiArCQkg ICAgICBGSUVMRF9QUkVQKE1BWDMxMzI5XzQzX1RSSUNLTEVfUkVTX01BU0ssIGluZGV4KSB8DQo+ ICsJCSAgICAgIEZJRUxEX1BSRVAoTUFYMzEzMjlfNDNfVFJJQ0tMRV9ESU9ERV9FTiwgdHJpY2ts ZV9kaW9kZV9lbik7DQo+ICsJCWJyZWFrOw0KPiArCWNhc2UgSURfTUFYMzEzMzE6DQo+ICsJY2Fz ZSBJRF9NQVgzMTMzNDoNCj4gKwkJcmVnID0gRklFTERfUFJFUChNQVgzMTMzWF9UUklDS0xFX0VO QUJMRV9CSVQsIDEpIHwNCj4gKwkJICAgICAgRklFTERfUFJFUChNQVgzMTMzWF9UUklDS0xFX1JF U19NQVNLLCBpbmRleCkgfA0KPiArCQkgICAgICBGSUVMRF9QUkVQKE1BWDMxMzNYX1RSSUNLTEVf RElPREVfRU4sIHRyaWNrbGVfZGlvZGVfZW4pOw0KPiArCQlicmVhazsNCj4gKwljYXNlIElEX01B WDMxMzQxOg0KPiArCQlpZiAoaW5kZXggPT0gMSkNCj4gKwkJCWluZGV4ID0gMDsNCj4gKw0KPiAr CQlyZWcgPSBGSUVMRF9QUkVQKE1BWDMxMzQxX1RSSUNLTEVfRU5BQkxFX0JJVCwgMSkgfA0KPiAr CQkgICAgICBGSUVMRF9QUkVQKE1BWDMxMzQxX1RSSUNLTEVfUkVTX01BU0ssIGluZGV4KSB8DQo+ ICsJCSAgICAgIEZJRUxEX1BSRVAoTUFYMzEzNDFfVFJJQ0tMRV9ESU9ERV9FTiwgdHJpY2tsZV9k aW9kZV9lbik7DQo+ICsNCj4gKwkJcmV0ID0gcmVnbWFwX3NldF9iaXRzKHJ0Yy0+cmVnbWFwLCBN QVgzMTM0MV9QT1dFUl9NR01UX1JFRywNCj4gKwkJCQkgICAgICBNQVgzMTM0MV9QT1dFUl9NR01U X1RSSUNLTEVfQklUKTsNCj4gKwkJaWYgKHJldCkNCj4gKwkJCXJldHVybiByZXQ7DQo+ICsNCj4g KwkJYnJlYWs7DQo+ICsJY2FzZSBJRF9NQVgzMTM0MzoNCj4gKwkJcmVnID0gRklFTERfUFJFUChN QVgzMTMyOV80M19UUklDS0xFX1JFU19NQVNLLCBpbmRleCkgfA0KPiArCQkgICAgICBGSUVMRF9Q UkVQKE1BWDMxMzI5XzQzX1RSSUNLTEVfRElPREVfRU4sIHRyaWNrbGVfZGlvZGVfZW4pIHwNCj4g KwkJICAgICAgRklFTERfUFJFUChNQVgzMTM0M19UUklDS0xFX0VOQUJMRV9NQVNLLA0KPiArCQkJ CSBNQVgzMTM0M19UUklDS0xFX0VOQUJMRV9DT0RFKTsNCj4gKwkJYnJlYWs7DQo+ICsJZGVmYXVs dDoNCj4gKwkJcmV0dXJuIC1FT1BOT1RTVVBQOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiByZWdt YXBfd3JpdGUocnRjLT5yZWdtYXAsIHJ0Yy0+Y2hpcC0+dHJpY2tsZV9yZWcsIHJlZyk7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyBpbnQgbWF4MzEzeHhfZmluZF9jbGtpbl9mcmVxX2luZGV4KHN0cnVj dCBjbGsgKmNsaykNCj4gK3sNCj4gKwl1bnNpZ25lZCBsb25nIHJhdGUgPSBjbGtfZ2V0X3JhdGUo Y2xrKTsNCj4gKwlpbnQgZnJlcTsNCj4gKwlpbnQgaTsNCj4gKw0KPiArCWkgPSBmaW5kX2Nsb3Nl c3QocmF0ZSwgbWF4MzEzeHhfY2xraW5fZnJlcSwNCj4gKwkJCSBBUlJBWV9TSVpFKG1heDMxM3h4 X2Nsa2luX2ZyZXEpKTsNCj4gKwlpZiAobWF4MzEzeHhfY2xraW5fZnJlcVtpXSA9PSByYXRlKQ0K PiArCQlyZXR1cm4gaTsNCj4gKw0KPiArCWZvciAoaSA9IEFSUkFZX1NJWkUobWF4MzEzeHhfY2xr aW5fZnJlcSkgLSAxOyBpID49IDA7IGktLSkgew0KPiArCQlmcmVxID0gbWF4MzEzeHhfY2xraW5f ZnJlcVtpXTsNCj4gKwkJaWYgKGZyZXEgPT0gY2xrX3JvdW5kX3JhdGUoY2xrLCBmcmVxKSkNCj4g KwkJCXJldHVybiBpOw0KPiArCX0NCj4gKw0KPiArCS8qIHN1cHBsaWVkIGNsb2NrIGNhbm5vdCBw cm9kdWNlIG9uZSBvZiBkZXNpcmVkIGZyZXF1ZW5jeSByYXRlICovDQo+ICsJcmV0dXJuIC1FTk9E RVY7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgbWF4MzEzeHhfY2xraW5faW5pdChzdHJ1Y3Qg ZGV2aWNlICpkZXYpDQo+ICt7DQo+ICsJc3RydWN0IG1heDMxM3h4ICpydGMgPSBkZXZfZ2V0X2Ry dmRhdGEoZGV2KTsNCj4gKwlpbnQgcmF0ZTsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJcnRjLT5j bGtpbiA9IGRldm1fY2xrX2dldF9lbmFibGVkKGRldiwgTlVMTCk7DQo+ICsJaWYgKElTX0VSUihy dGMtPmNsa2luKSkgew0KPiArCQlpZiAoUFRSX0VSUihydGMtPmNsa2luKSA9PSAtRU5PRU5UKQ0K PiArCQkJcnRjLT5jbGtpbiA9IE5VTEw7DQo+ICsJCWVsc2UNCj4gKwkJCXJldHVybiBkZXZfZXJy X3Byb2JlKGRldiwgUFRSX0VSUihydGMtPmNsa2luKSwNCj4gKwkJCQkJICAgICAiZXJyb3Igd2hp bGUgY2xraW4gc2V0dXBcbiIpOw0KPiArCX0NCj4gKw0KPiArCWlmICghcnRjLT5jbGtpbikgew0K PiArCQlzd2l0Y2ggKHJ0Yy0+aWQpIHsNCj4gKwkJY2FzZSBJRF9NQVgzMTMyOToNCj4gKwkJCXJl dHVybiByZWdtYXBfY2xlYXJfYml0cyhydGMtPnJlZ21hcCwNCj4gKwkJCQkJCSBNQVgzMTMyOV9D T05GSUcyX1JFRywNCj4gKwkJCQkJCSBNQVgzMTMyOV9DT05GSUcyX0NMS0lOX0VOKTsNCj4gKwkJ Y2FzZSBJRF9NQVgzMTM0MToNCj4gKwkJY2FzZSBJRF9NQVgzMTM0MjoNCj4gKwkJCXJldHVybiBy ZWdtYXBfY2xlYXJfYml0cyhydGMtPnJlZ21hcCwNCj4gKwkJCQkJCSBNQVgzMTM0MV80Ml9DT05G SUcxX1JFRywNCj4gKwkJCQkJCSBNQVgzMTM0MV80Ml9DT05GSUcxX0NMS0lOX0VOKTsNCj4gKwkJ ZGVmYXVsdDoNCj4gKwkJCXJldHVybiAwOw0KPiArCQl9DQo+ICsJfQ0KPiArDQo+ICsJcmF0ZSA9 IG1heDMxM3h4X2ZpbmRfY2xraW5fZnJlcV9pbmRleChydGMtPmNsa2luKTsNCj4gKwlpZiAocmF0 ZSA8IDApDQo+ICsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmF0ZSwNCj4gKwkJCQkgICAg ICJjbGtpbiBjYW5ub3QgcHJvZHVjZSByZXF1aXJlZCBmcmVxdWVuY3lcbiIpOw0KPiArDQo+ICsJ cmV0ID0gY2xrX3NldF9yYXRlKHJ0Yy0+Y2xraW4sIG1heDMxM3h4X2Nsa2luX2ZyZXFbcmF0ZV0p Ow0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiByZXQ7DQo+ICsNCj4gKwlzd2l0Y2ggKHJ0Yy0+ aWQpIHsNCj4gKwljYXNlIElEX01BWDMxMzI5Og0KPiArCQlyZXQgPSByZWdtYXBfdXBkYXRlX2Jp dHMocnRjLT5yZWdtYXAsIE1BWDMxMzI5X0NPTkZJRzJfUkVHLA0KPiArCQkJCQkgTUFYMzEzMjlf Q09ORklHMl9DTEtJTl9GUkVRLCByYXRlKTsNCj4gKwkJaWYgKHJldCkNCj4gKwkJCXJldHVybiBy ZXQ7DQo+ICsNCj4gKwkJcmV0dXJuIHJlZ21hcF9zZXRfYml0cyhydGMtPnJlZ21hcCwgTUFYMzEz MjlfQ09ORklHMl9SRUcsDQo+ICsJCQkJICAgICAgIE1BWDMxMzI5X0NPTkZJRzJfQ0xLSU5fRU4p Ow0KPiArCWNhc2UgSURfTUFYMzEzNDE6DQo+ICsJY2FzZSBJRF9NQVgzMTM0MjoNCj4gKwkJcmV0 ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKHJ0Yy0+cmVnbWFwLCBNQVgzMTM0MV80Ml9DT05GSUcxX1JF RywNCj4gKwkJCQkJIE1BWDMxMzQxXzQyX0NPTkZJRzFfQ0xLSU5fRlJFUSwNCj4gKwkJCQkJIEZJ RUxEX1BSRVAoTUFYMzEzNDFfNDJfQ09ORklHMV9DTEtJTl9GUkVRLCByYXRlKSk7DQo+ICsJCWlm IChyZXQpDQo+ICsJCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJCXJldHVybiByZWdtYXBfc2V0X2Jp dHMocnRjLT5yZWdtYXAsIE1BWDMxMzQxXzQyX0NPTkZJRzFfUkVHLA0KPiArCQkJCSAgICAgICBN QVgzMTM0MV80Ml9DT05GSUcxX0NMS0lOX0VOKTsNCj4gKwlkZWZhdWx0Og0KPiArCQlydGMtPmNs a2luID0gTlVMTDsNCj4gKwkJZGV2X3dhcm4oZGV2LCAiZGV2aWNlIGRvZXMgbm90IGhhdmUgY2xv Y2sgaW5wdXRcbiIpOw0KPiArCQlyZXR1cm4gMDsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyBpbnQgbWF4MzEzeHhfaXJxX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpk ZXZuYW1lKQ0KPiArew0KPiArCXN0cnVjdCBtYXgzMTN4eCAqcnRjID0gZGV2X2dldF9kcnZkYXRh KGRldik7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCXN3aXRjaCAocnRjLT5pZCkgew0KPiArCWNh c2UgSURfTUFYMzEzMjg6DQo+ICsJCWJyZWFrOw0KPiArCWNhc2UgSURfTUFYMzEzMzE6DQo+ICsJ Y2FzZSBJRF9NQVgzMTMzNDoNCj4gKwkJaWYgKHJ0Yy0+Y2xrb3V0LmNsaykgew0KPiArCQkJLyoN Cj4gKwkJCSAqIGludGVycnVwdCBtdXhpbmcgZGVwZW5kcyBvbiBjbGtvdXQgc28gZW5hYmxlIGNs a291dA0KPiArCQkJICogaWYgY29uZmlndXJlZCBiZWZvcmUgcmVxdWVzdGluZyBpbnRlcnJ1cHQN Cj4gKwkJCSAqLw0KPiArCQkJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHJ0Yy0+Y2xrb3V0LmNs ayk7DQo+ICsJCQlpZiAocmV0KQ0KPiArCQkJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0 LA0KPiArCQkJCQkJICAgICAiY2Fubm90IGVuYWJsZSBjbGtvdXRcbiIpOw0KPiArCQl9DQo+ICsJ CWJyZWFrOw0KPiArCWRlZmF1bHQ6DQo+ICsJCWlmIChydGMtPmNsa2luKSB7DQo+ICsJCQlpZiAo cnRjLT5jbGtvdXQuY2xrICYmIHJ0Yy0+aXJxID4gMCkNCj4gKwkJCQlyZXR1cm4gZGV2X2Vycl9w cm9iZShkZXYsIC1FT1BOT1RTVVBQLA0KPiArCQkJCQkJICAgICAiaXJxIG5vdCBwb3NzaWJsZSB3 aGVuIGJvdGggY2xraW4gYW5kIGNsa291dCBhcmUgY29uZmlndXJlZFxuIik7DQo+ICsNCj4gKwkJ CWlmIChydGMtPmlycSA8PSAwKQ0KPiArCQkJCWJyZWFrOw0KPiArDQo+ICsJCQkvKiBjbGtvdXQg bmVlZHMgdG8gYmUgZGlzYWJsZWQgZm9yIGludGVycnVwdCAqLw0KPiArCQkJaWYgKHJ0Yy0+Y2hp cC0+Y2xrb3V0LT5lbl9pbnZlcnQpDQo+ICsJCQkJcmV0ID0gcmVnbWFwX3NldF9iaXRzKHJ0Yy0+ cmVnbWFwLA0KPiArCQkJCQkJICAgICAgcnRjLT5jaGlwLT5jbGtvdXQtPnJlZywNCj4gKwkJCQkJ CSAgICAgIHJ0Yy0+Y2hpcC0+Y2xrb3V0LT5lbl9iaXQpOw0KPiArCQkJZWxzZQ0KPiArCQkJCXJl dCA9IHJlZ21hcF9jbGVhcl9iaXRzKHJ0Yy0+cmVnbWFwLA0KPiArCQkJCQkJCXJ0Yy0+Y2hpcC0+ Y2xrb3V0LT5yZWcsDQo+ICsJCQkJCQkJcnRjLT5jaGlwLT5jbGtvdXQtPmVuX2JpdCk7DQo+ICsN Cj4gKwkJCWlmIChyZXQpDQo+ICsJCQkJcmV0dXJuIHJldDsNCj4gKwkJfQ0KPiArCQlicmVhazsN Cj4gKwl9DQo+ICsNCj4gKwlpZiAocnRjLT5pcnEgPiAwKSB7DQo+ICsJCXJldHVybiBkZXZtX3Jl cXVlc3RfdGhyZWFkZWRfaXJxKGRldiwgcnRjLT5pcnEsIE5VTEwsDQo+ICsJCQkJCQkgJm1heDMx M3h4X2lycSwgSVJRRl9PTkVTSE9ULA0KPiArCQkJCQkJIGRldm5hbWUsIHJ0Yyk7DQo+ICsJfSBl bHNlIGlmIChkZXZpY2VfcHJvcGVydHlfcmVhZF9ib29sKGRldiwgIndha2V1cC1zb3VyY2UiKSkg ew0KPiArCQljbGVhcl9iaXQoUlRDX0ZFQVRVUkVfVVBEQVRFX0lOVEVSUlVQVCwgcnRjLT5ydGMt PmZlYXR1cmVzKTsNCj4gKwkJcmV0dXJuIGRldmljZV9pbml0X3dha2V1cChkZXYsIHRydWUpOw0K PiArCX0NCj4gKw0KPiArCWNsZWFyX2JpdChSVENfRkVBVFVSRV9BTEFSTSwgcnRjLT5ydGMtPmZl YXR1cmVzKTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IG1h eDMxM3h4X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsDQo+ICsJCQkgIGNvbnN0IHN0 cnVjdCBpMmNfZGV2aWNlX2lkICppZCkNCj4gK3sNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAm Y2xpZW50LT5kZXY7DQo+ICsJc3RydWN0IG1heDMxM3h4ICptYXgzMTN4eDsNCj4gKwlzdHJ1Y3Qg ZGV2aWNlICpod21vbjsNCj4gKwljb25zdCB2b2lkICptYXRjaDsNCj4gKwlpbnQgcmV0Ow0KPiAr DQo+ICsJbWF4MzEzeHggPSBkZXZtX2t6YWxsb2MoJmNsaWVudC0+ZGV2LCBzaXplb2YoKm1heDMx M3h4KSwgR0ZQX0tFUk5FTCk7DQo+ICsJaWYgKCFtYXgzMTN4eCkNCj4gKwkJcmV0dXJuIC1FTk9N RU07DQo+ICsNCj4gKwlkZXZfc2V0X2RydmRhdGEoJmNsaWVudC0+ZGV2LCBtYXgzMTN4eCk7DQo+ ICsNCj4gKwltYXgzMTN4eC0+cmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoY2xpZW50LCAm cmVnbWFwX2NvbmZpZyk7DQo+ICsJaWYgKElTX0VSUihtYXgzMTN4eC0+cmVnbWFwKSkgew0KPiAr CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIobWF4MzEzeHgtPnJlZ21hcCksDQo+ ICsJCQkJICAgICAicmVnbWFwIGluaXQgZmFpbGVkXG4iKTsNCj4gKwl9DQo+ICsNCj4gKwlpMmNf c2V0X2NsaWVudGRhdGEoY2xpZW50LCBtYXgzMTN4eCk7DQo+ICsNCj4gKwltYXRjaCA9IGRldmlj ZV9nZXRfbWF0Y2hfZGF0YShkZXYpOw0KPiArCWlmIChtYXRjaCkNCj4gKwkJbWF4MzEzeHgtPmNo aXAgPSBtYXRjaDsNCj4gKwllbHNlIGlmIChpZCkNCj4gKwkJbWF4MzEzeHgtPmNoaXAgPSAoc3Ry dWN0IGNoaXBfZGVzYyAqKWlkLT5kcml2ZXJfZGF0YTsNCj4gKwllbHNlDQo+ICsJCXJldHVybiAt RU5PREVWOw0KPiArDQo+ICsJbWF4MzEzeHgtPmlkID0gbWF4MzEzeHgtPmNoaXAgLSBjaGlwOw0K PiArDQo+ICsJcmV0ID0gbWF4MzEzeHhfaW5pdChtYXgzMTN4eCk7DQo+ICsJaWYgKHJldCkNCj4g KwkJcmV0dXJuIHJldDsNCj4gKw0KPiArCW1heDMxM3h4LT5ydGMgPSBkZXZtX3J0Y19hbGxvY2F0 ZV9kZXZpY2UoZGV2KTsNCj4gKwlpZiAoSVNfRVJSKG1heDMxM3h4LT5ydGMpKQ0KPiArCQlyZXR1 cm4gUFRSX0VSUihtYXgzMTN4eC0+cnRjKTsNCj4gKw0KPiArCW1heDMxM3h4LT5ydGMtPm9wcyA9 ICZtYXgzMTMzeF9ydGNfb3BzOw0KPiArCW1heDMxM3h4LT5ydGMtPnJhbmdlX21pbiA9IFJUQ19U SU1FU1RBTVBfQkVHSU5fMjAwMDsNCj4gKwltYXgzMTN4eC0+cnRjLT5yYW5nZV9tYXggPSBSVENf VElNRVNUQU1QX0VORF8yMTk5Ow0KPiArDQo+ICsJcmV0ID0gZGV2bV9ydGNfcmVnaXN0ZXJfZGV2 aWNlKG1heDMxM3h4LT5ydGMpOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiByZXQ7DQo+ICsN Cj4gKwltYXgzMTN4eC0+aXJxID0gY2xpZW50LT5pcnE7DQo+ICsNCj4gKwlyZXQgPSBtYXgzMTN4 eF9jbGtvdXRfcmVnaXN0ZXIoZGV2KTsNCj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1cm4gcmV0Ow0K PiArDQo+ICsJcmV0ID0gbWF4MzEzeHhfY2xraW5faW5pdChkZXYpOw0KPiArCWlmIChyZXQpDQo+ ICsJCXJldHVybiByZXQ7DQo+ICsNCj4gKwkvKiBJUlEgd2lyaW5nIGRlcGVuZHMgb24gdGhlIGNs b2NrIGNvbmZpZ3VyYXRpb24gc28gcGFyc2UgdGhlbSBmaXJzdCAqLw0KPiArCXJldCA9IG1heDMx M3h4X2lycV9pbml0KGRldiwgY2xpZW50LT5uYW1lKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1 cm4gcmV0Ow0KPiArDQo+ICsJaWYgKG1heDMxM3h4LT5jaGlwLT5yYW1fc2l6ZSkgew0KPiArCQlt YXgzMTN4eF9udm1lbV9jZmcuc2l6ZSA9IG1heDMxM3h4LT5jaGlwLT5yYW1fc2l6ZTsNCj4gKwkJ bWF4MzEzeHhfbnZtZW1fY2ZnLnByaXYgPSBtYXgzMTN4eDsNCj4gKw0KPiArCQlyZXQgPSBkZXZt X3J0Y19udm1lbV9yZWdpc3RlcihtYXgzMTN4eC0+cnRjLCAmbWF4MzEzeHhfbnZtZW1fY2ZnKTsN Cj4gKwkJaWYgKHJldCkNCj4gKwkJCWRldl93YXJuKGRldiwgImNhbm5vdCByZWdpc3RlciBydGMg bnZtZW1cbiIpOw0KPiArCX0NCj4gKw0KPiArCWlmIChtYXgzMTN4eC0+Y2hpcC0+dGVtcF9yZWcp IHsNCj4gKwkJaHdtb24gPSBkZXZtX2h3bW9uX2RldmljZV9yZWdpc3Rlcl93aXRoX2luZm8oZGV2 LCBjbGllbnQtPm5hbWUsDQo+ICsJCQkJCQkJICAgICBtYXgzMTN4eCwNCj4gKwkJCQkJCQkgICAg ICZtYXgzMTN4eF9jaGlwX2luZm8sDQo+ICsJCQkJCQkJICAgICBOVUxMKTsNCj4gKwkJaWYgKElT X0VSUihod21vbikpDQo+ICsJCQlkZXZfd2FybihkZXYsICJjYW5ub3QgcmVnaXN0ZXIgaHdtb24g ZGV2aWNlOiAlbGlcbiIsDQo+ICsJCQkJIFBUUl9FUlIoaHdtb24pKTsNCj4gKwl9DQo+ICsNCj4g KwlyZXR1cm4gbWF4MzEzeHhfdHJpY2tsZV9jaGFyZ2VyX3NldHVwKGRldik7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1heDMxM3h4X29mX2lkW10gPSB7 DQo+ICsJeyAuY29tcGF0aWJsZSA9ICJhZGksbWF4MzEzMjgiLCAuZGF0YSA9ICZjaGlwW0lEX01B WDMxMzI4XSB9LA0KPiArCXsgLmNvbXBhdGlibGUgPSAiYWRpLG1heDMxMzI5IiwgLmRhdGEgPSAm Y2hpcFtJRF9NQVgzMTMyOV0gfSwNCj4gKwl7IC5jb21wYXRpYmxlID0gImFkaSxtYXgzMTMzMSIs IC5kYXRhID0gJmNoaXBbSURfTUFYMzEzMzFdIH0sDQo+ICsJeyAuY29tcGF0aWJsZSA9ICJhZGks bWF4MzEzMzQiLCAuZGF0YSA9ICZjaGlwW0lEX01BWDMxMzM0XSB9LA0KPiArCXsgLmNvbXBhdGli bGUgPSAiYWRpLG1heDMxMzQxIiwgLmRhdGEgPSAmY2hpcFtJRF9NQVgzMTM0MV0gfSwNCj4gKwl7 IC5jb21wYXRpYmxlID0gImFkaSxtYXgzMTM0MiIsIC5kYXRhID0gJmNoaXBbSURfTUFYMzEzNDJd IH0sDQo+ICsJeyAuY29tcGF0aWJsZSA9ICJhZGksbWF4MzEzNDMiLCAuZGF0YSA9ICZjaGlwW0lE X01BWDMxMzQzXSB9LA0KPiArCXsgfQ0KPiArfTsNCj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2Ys IG1heDMxM3h4X29mX2lkKTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNl X2lkIG1heDMxM3h4X2lkW10gPSB7DQo+ICsJeyAibWF4MzEzMjgiLCAoa2VybmVsX3Vsb25nX3Qp JmNoaXBbSURfTUFYMzEzMjhdIH0sDQo+ICsJeyAibWF4MzEzMjkiLCAoa2VybmVsX3Vsb25nX3Qp JmNoaXBbSURfTUFYMzEzMjldIH0sDQo+ICsJeyAibWF4MzEzMzEiLCAoa2VybmVsX3Vsb25nX3Qp JmNoaXBbSURfTUFYMzEzMzFdIH0sDQo+ICsJeyAibWF4MzEzMzQiLCAoa2VybmVsX3Vsb25nX3Qp JmNoaXBbSURfTUFYMzEzMzRdIH0sDQo+ICsJeyAibWF4MzEzNDEiLCAoa2VybmVsX3Vsb25nX3Qp JmNoaXBbSURfTUFYMzEzNDFdIH0sDQo+ICsJeyAibWF4MzEzNDIiLCAoa2VybmVsX3Vsb25nX3Qp JmNoaXBbSURfTUFYMzEzNDJdIH0sDQo+ICsJeyAibWF4MzEzNDMiLCAoa2VybmVsX3Vsb25nX3Qp JmNoaXBbSURfTUFYMzEzNDNdIH0sDQo+ICsJeyB9DQo+ICt9Ow0KPiArTU9EVUxFX0RFVklDRV9U QUJMRShpMmMsIG1heDMxM3h4X2lkKTsNCj4gKw0KPiArc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVy IG1heDMxM3h4X2RyaXZlciA9IHsNCj4gKwkuZHJpdmVyID0gew0KPiArCQkubmFtZQk9ICJydGMt bWF4MzEzeHgiLA0KPiArCQkub2ZfbWF0Y2hfdGFibGUgPSBtYXgzMTN4eF9vZl9pZCwNCj4gKwl9 LA0KPiArCS5wcm9iZQkJPSBtYXgzMTN4eF9wcm9iZSwNCj4gKwkuaWRfdGFibGUJPSBtYXgzMTN4 eF9pZCwNCj4gK307DQo+ICttb2R1bGVfaTJjX2RyaXZlcihtYXgzMTN4eF9kcml2ZXIpOw0KPiAr DQo+ICtNT0RVTEVfREVTQ1JJUFRJT04oIkFuYWxvZyBEZXZpY2VzIE1BWDMxM1hYIFJUQ3MiKTsN Cj4gK01PRFVMRV9BVVRIT1IoIlpleW5lcCBBcnNsYW5iZW56ZXIgPFpleW5lcC5BcnNsYW5iZW56 ZXJAYW5hbG9nLmNvbT4iKTsNCj4gK01PRFVMRV9BVVRIT1IoIklicmFoaW0gVGlsa2kgPElicmFo aW0uVGlsa2lAYW5hbG9nLmNvbT4iKTsNCj4gK01PRFVMRV9TT0ZUREVQKCJwcmU6IHJlZ21hcC1p MmMiKTsNCj4gK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsNCj4gK01PRFVMRV9WRVJTSU9OKCIxLjAi KTs=