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=-9.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 4E915C43464 for ; Fri, 18 Sep 2020 03:57:57 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E395A235FA for ; Fri, 18 Sep 2020 03:57:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726565AbgIRD5z (ORCPT ); Thu, 17 Sep 2020 23:57:55 -0400 Received: from 60-251-196-230.HINET-IP.hinet.net ([60.251.196.230]:52659 "EHLO ironport.ite.com.tw" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726269AbgIRD5z (ORCPT ); Thu, 17 Sep 2020 23:57:55 -0400 X-Greylist: delayed 429 seconds by postgrey-1.27 at vger.kernel.org; Thu, 17 Sep 2020 23:57:52 EDT IronPort-SDR: QRvZBk8mJqjBl2kmRODkwg1Gd8jbXSClV0CB7oMCDYrNlrPmzMt/vJK/BY0PJemqPINqu5GlvF O1bkQnDicTAg== Received: from unknown (HELO mse.ite.com.tw) ([192.168.35.30]) by ironport.ite.com.tw with ESMTP; 18 Sep 2020 11:50:42 +0800 Received: from CSBMAIL1.internal.ite.com.tw (csbmail1.internal.ite.com.tw [192.168.65.58]) by mse.ite.com.tw with ESMTP id 08I3oaaU006752; Fri, 18 Sep 2020 11:50:36 +0800 (GMT-8) (envelope-from allen.chen@ite.com.tw) Received: from CSBMAIL1.internal.ite.com.tw (192.168.65.58) by CSBMAIL1.internal.ite.com.tw (192.168.65.58) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Fri, 18 Sep 2020 11:50:36 +0800 Received: from CSBMAIL1.internal.ite.com.tw ([fe80::2cba:f37c:ac09:f33f]) by CSBMAIL1.internal.ite.com.tw ([fe80::2cba:f37c:ac09:f33f%22]) with mapi id 15.01.1713.004; Fri, 18 Sep 2020 11:50:36 +0800 From: CC: , , , , , , , , , , , , , , , , , , , Subject: RE: [PATCH v3] drm/bridge: add it6505 driver Thread-Topic: [PATCH v3] drm/bridge: add it6505 driver Thread-Index: AQHWgmF3Zki6rF4XSEGSgvwHyhwxDqlt1R/Q Date: Fri, 18 Sep 2020 03:50:35 +0000 Message-ID: References: <20200904021029.365700-1-allen.chen@ite.com.tw> In-Reply-To: <20200904021029.365700-1-allen.chen@ite.com.tw> Accept-Language: en-US Content-Language: zh-TW X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [192.168.70.14] x-tm-snts-smtp: C936F51C2F39EDF77F20DAE34C3C3A0714BF4F01EA62D9D2486BB6AA6ECD21E12000:8 Content-Type: text/plain; charset="big5" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MAIL: mse.ite.com.tw 08I3oaaU006752 To: unlisted-recipients:; (no To-header on input) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SXQgaGFzIGJlZW4gYWJvdXQgdHdvIHdlZWtzIHNpbmNlIEkgcG9zdGVkIHYzIGFuZCBoYXZlbid0 IGhlYXJkIGFueXRoaW5nLg0KQ29uc2lkZXIgdGhpcyBhIGdlbnRsZSBwaW5nLg0KDQpJZiB0aGVy ZSBpcyBzb21ldGhpbmcgbmVlZCB0byBmaXguIEkgd2lsbCBmaXggYW5kIHVwc3RyZWFtIGFnYWlu Lg0KDQpUaGFua3MuDQoNCi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBBbGxlbiBD aGVuICizr6xmpnQpIA0KU2VudDogRnJpZGF5LCBTZXB0ZW1iZXIgMDQsIDIwMjAgMTA6MTAgQU0N CkNjOiBBbGxlbiBDaGVuICizr6xmpnQpOyBLZW5uZXRoIEh1bmcgKKx4rmGt2yk7IEphdS1DaGlo IFRzZW5nICi0v6xMtLwpOyBIZXJtZXMgV3UgKKdkqM6nuyk7IFBpLUhzdW4gU2hpaDsgSml0YW8g U2hpOyBZaWx1biBMaW47IEhlcm1lcyBXdSAop2Sozqe7KTsga2VybmVsIHRlc3Qgcm9ib3Q7IEFu ZHJ6ZWogSGFqZGE7IE5laWwgQXJtc3Ryb25nOyBMYXVyZW50IFBpbmNoYXJ0OyBKb25hcyBLYXJs bWFuOyBKZXJuZWogU2tyYWJlYzsgRGF2aWQgQWlybGllOyBEYW5pZWwgVmV0dGVyOyBNYXR0aGlh cyBCcnVnZ2VyOyBvcGVuIGxpc3Q7IG9wZW4gbGlzdDpEUk0gRFJJVkVSUzsgbW9kZXJhdGVkIGxp c3Q6QVJNL01lZGlhdGVrIFNvQyBzdXBwb3J0OyBtb2RlcmF0ZWQgbGlzdDpBUk0vTWVkaWF0ZWsg U29DIHN1cHBvcnQNClN1YmplY3Q6IFtQQVRDSCB2M10gZHJtL2JyaWRnZTogYWRkIGl0NjUwNSBk cml2ZXINCg0KVGhpcyBhZGRzIHN1cHBvcnQgZm9yIHRoZSBpVEUgSVQ2NTA1Lg0KVGhpcyBkZXZp Y2UgY2FuIGNvbnZlcnQgRFBJIHNpZ25hbCB0byBEUCBvdXRwdXQuDQoNCkZyb206IEFsbGVuIENo ZW4gPGFsbGVuLmNoZW5AaXRlLmNvbS50dz4NClNpZ25lZC1vZmYtYnk6IEppdGFvIFNoaSA8aml0 YW8uc2hpQG1lZGlhdGVrLmNvbT4NClNpZ25lZC1vZmYtYnk6IFBpLUhzdW4gU2hpaCA8cGloc3Vu QGNocm9taXVtLm9yZz4NClNpZ25lZC1vZmYtYnk6IFlpbHVuIExpbiA8eWxsaW5AZ29vZ2xlLmNv bT4NClNpZ25lZC1vZmYtYnk6IEhlcm1lcyBXdSA8aGVybWVzLnd1QGl0ZS5jb20udHc+DQpTaWdu ZWQtb2ZmLWJ5OiBBbGxlbiBDaGVuIDxhbGxlbi5jaGVuQGl0ZS5jb20udHc+DQpSZXBvcnRlZC1i eToga2VybmVsIHRlc3Qgcm9ib3QgPGxrcEBpbnRlbC5jb20+DQotLS0NCiBkcml2ZXJzL2dwdS9k cm0vYnJpZGdlL0tjb25maWcgICAgICB8ICAgIDcgKw0KIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uv TWFrZWZpbGUgICAgIHwgICAgMSArDQogZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pdGUtaXQ2NTA1 LmMgfCAzMzM4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKw0KIDMgZmlsZXMgY2hhbmdlZCwg MzM0NiBpbnNlcnRpb25zKCspDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9i cmlkZ2UvaXRlLWl0NjUwNS5jDQoNCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdl L0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcNCmluZGV4IDNlMTFhZjRl OWY2M2UuLmYyMWRjZTNmYWJlYjkgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdl L0tjb25maWcNCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZw0KQEAgLTYxLDYg KzYxLDEzIEBAIGNvbmZpZyBEUk1fTE9OVElVTV9MVDk2MTENCiAJICBIRE1JIHNpZ25hbHMNCiAJ ICBQbGVhc2Ugc2F5IFkgaWYgeW91IGhhdmUgc3VjaCBoYXJkd2FyZS4NCiANCitjb25maWcgRFJN X0lURV9JVDY1MDUNCisJdHJpc3RhdGUgIklURSBJVDY1MDUgRGlzcGxheVBvcnQgYnJpZGdlIg0K KwlkZXBlbmRzIG9uIE9GDQorCXNlbGVjdCBEUk1fS01TX0hFTFBFUg0KKwloZWxwDQorCSAgSVRF IElUNjUwNSBEaXNwbGF5UG9ydCBicmlkZ2UgY2hpcCBkcml2ZXIuDQorDQogY29uZmlnIERSTV9M VkRTX0NPREVDDQogCXRyaXN0YXRlICJUcmFuc3BhcmVudCBMVkRTIGVuY29kZXJzIGFuZCBkZWNv ZGVycyBzdXBwb3J0Ig0KIAlkZXBlbmRzIG9uIE9GDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2JyaWRnZS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUNCmlu ZGV4IGM1ODlhNmE3Y2JlMWQuLjhhMTE4ZmQ5MDFhZDcgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL2dw dS9kcm0vYnJpZGdlL01ha2VmaWxlDQorKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2Vm aWxlDQpAQCAtMyw2ICszLDcgQEAgb2JqLSQoQ09ORklHX0RSTV9DRE5TX0RTSSkgKz0gY2Rucy1k c2kubw0KIG9iai0kKENPTkZJR19EUk1fQ0hST05URUxfQ0g3MDMzKSArPSBjaHJvbnRlbC1jaDcw MzMubw0KIG9iai0kKENPTkZJR19EUk1fRElTUExBWV9DT05ORUNUT1IpICs9IGRpc3BsYXktY29u bmVjdG9yLm8NCiBvYmotJChDT05GSUdfRFJNX0xPTlRJVU1fTFQ5NjExKSArPSBsb250aXVtLWx0 OTYxMS5vDQorb2JqLSQoQ09ORklHX0RSTV9JVEVfSVQ2NTA1KSArPSBpdGUtaXQ2NTA1Lm8NCiBv YmotJChDT05GSUdfRFJNX0xWRFNfQ09ERUMpICs9IGx2ZHMtY29kZWMubw0KIG9iai0kKENPTkZJ R19EUk1fTUVHQUNISVBTX1NURFBYWFhYX0dFX0I4NTBWM19GVykgKz0gbWVnYWNoaXBzLXN0ZHB4 eHh4LWdlLWI4NTB2My1mdy5vDQogb2JqLSQoQ09ORklHX0RSTV9OWFBfUFROMzQ2MCkgKz0gbnhw LXB0bjM0NjAubw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvaXRlLWl0NjUw NS5jIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pdGUtaXQ2NTA1LmMNCm5ldyBmaWxlIG1vZGUg MTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAwLi4wZWQxOTY3MzQzMWVlDQotLS0gL2Rldi9udWxs DQorKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2l0ZS1pdDY1MDUuYw0KQEAgLTAsMCArMSwz MzM4IEBADQorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNE LTItQ2xhdXNlKQ0KKy8qDQorICogQ29weXJpZ2h0IChjKSAyMDIwLCBUaGUgTGludXggRm91bmRh dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKi8NCisjaW5jbHVkZSA8bGludXgvYml0cy5o Pg0KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4N CisjaW5jbHVkZSA8bGludXgvZXJyLmg+DQorI2luY2x1ZGUgPGxpbnV4L2V4dGNvbi5oPg0KKyNp bmNsdWRlIDxsaW51eC9mcy5oPg0KKyNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+DQor I2luY2x1ZGUgPGxpbnV4L2kyYy5oPg0KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4NCisj aW5jbHVkZSA8bGludXgva2VybmVsLmg+DQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KKyNp bmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+DQorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPg0K KyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4NCisjaW5jbHVkZSA8bGludXgv dHlwZXMuaD4NCisjaW5jbHVkZSA8bGludXgvd2FpdC5oPg0KKw0KKyNpbmNsdWRlIDxjcnlwdG8v aGFzaC5oPg0KKyNpbmNsdWRlIDxjcnlwdG8vc2hhLmg+DQorDQorI2luY2x1ZGUgPGRybS9kcm1f YXRvbWljX2hlbHBlci5oPg0KKyNpbmNsdWRlIDxkcm0vZHJtX2JyaWRnZS5oPg0KKyNpbmNsdWRl IDxkcm0vZHJtX2NydGMuaD4NCisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPg0KKyNp bmNsdWRlIDxkcm0vZHJtX2RwX2hlbHBlci5oPg0KKyNpbmNsdWRlIDxkcm0vZHJtX2VkaWQuaD4N CisjaW5jbHVkZSA8ZHJtL2RybV9oZGNwLmg+DQorI2luY2x1ZGUgPGRybS9kcm1fcHJpbnQuaD4N CisjaW5jbHVkZSA8ZHJtL2RybV9wcm9iZV9oZWxwZXIuaD4NCisNCisjaW5jbHVkZSA8c291bmQv aGRtaS1jb2RlYy5oPg0KKw0KKyNkZWZpbmUgUkVHX0lDX1ZFUiAweDA0DQorDQorI2RlZmluZSBS RUdfUkVTRVRfQ1RSTCAweDA1DQorI2RlZmluZSBWSURFT19SRVNFVCBCSVQoMCkNCisjZGVmaW5l IEFVRElPX1JFU0VUIEJJVCgxKQ0KKyNkZWZpbmUgQUxMX0xPR0lDX1JFU0VUIEJJVCgyKQ0KKyNk ZWZpbmUgQVVYX1JFU0VUIEJJVCgzKQ0KKyNkZWZpbmUgSERDUF9SRVNFVCBCSVQoNCkNCisNCisj ZGVmaW5lIElOVF9TVEFUVVNfMDEgMHgwNg0KKyNkZWZpbmUgSU5UX01BU0tfMDEgMHgwOQ0KKyNk ZWZpbmUgSU5UX0hQRF9DSEFOR0UgQklUKDApDQorI2RlZmluZSBJTlRfUkVDRUlWRV9IUERfSVJR IEJJVCgxKQ0KKyNkZWZpbmUgSU5UX1NDRFRfQ0hBTkdFIEJJVCgyKQ0KKyNkZWZpbmUgSU5UX0hE Q1BfRkFJTCBCSVQoMykNCisjZGVmaW5lIElOVF9IRENQX0RPTkUgQklUKDQpDQorDQorI2RlZmlu ZSBJTlRfU1RBVFVTXzAyIDB4MDcNCisjZGVmaW5lIElOVF9NQVNLXzAyIDB4MEENCisjZGVmaW5l IElOVF9BVVhfQ01EX0ZBSUwgQklUKDApDQorI2RlZmluZSBJTlRfSERDUF9LU1ZfQ0hFQ0sgQklU KDEpDQorI2RlZmluZSBJTlRfQVVESU9fRklGT19FUlJPUiBCSVQoMikNCisNCisjZGVmaW5lIElO VF9TVEFUVVNfMDMgMHgwOA0KKyNkZWZpbmUgSU5UX01BU0tfMDMgMHgwQg0KKyNkZWZpbmUgSU5U X0xJTktfVFJBSU5fRkFJTCBCSVQoNCkNCisjZGVmaW5lIElOVF9WSURfRklGT19FUlJPUiBCSVQo NSkNCisjZGVmaW5lIElOVF9JT19MQVRDSF9GSUZPX09WRVJGTE9XIEJJVCg3KQ0KKw0KKyNkZWZp bmUgUkVHX1NZU1RFTV9TVFMgMHgwRA0KKyNkZWZpbmUgSU5UX1NUUyBCSVQoMCkNCisjZGVmaW5l IEhQRF9TVFMgQklUKDEpDQorI2RlZmluZSBWSURFT19TVEIgQklUKDIpDQorDQorI2RlZmluZSBS RUdfTElOS19UUkFJTl9TVFMgMHgwRQ0KKyNkZWZpbmUgTElOS19TVEFURV9DUiBCSVQoMikNCisj ZGVmaW5lIExJTktfU1RBVEVfRVEgQklUKDMpDQorI2RlZmluZSBMSU5LX1NUQVRFX05PUlAgQklU KDQpDQorDQorI2RlZmluZSBSRUdfQkFOS19TRUwgMHgwRg0KKyNkZWZpbmUgUkVHX0NMS19DVFJM MCAweDEwDQorI2RlZmluZSBNX1BDTEtfREVMQVkgMHgwMw0KKw0KKyNkZWZpbmUgUkVHX0FVWF9P UFQgMHgxMQ0KKyNkZWZpbmUgQVVYX0FVVE9fUlNUIEJJVCgwKQ0KKyNkZWZpbmUgQVVYX0ZJWF9G UkVRIEJJVCgzKQ0KKw0KKyNkZWZpbmUgUkVHX0RBVEFfQ1RSTDAgMHgxMg0KKyNkZWZpbmUgVklE RU9fTEFUQ0hfRURHRSBCSVQoNCkNCisjZGVmaW5lIEVOQUJMRV9QQ0xLX0NPVU5URVIgQklUKDcp DQorDQorI2RlZmluZSBSRUdfUENMS19DT1VOVEVSX1ZBTFVFIDB4MTMNCisNCisjZGVmaW5lIFJF R181MDFfRklGT19DVFJMIDB4MTUNCisjZGVmaW5lIFJTVF81MDFfRklGTyBCSVQoMSkNCisNCisj ZGVmaW5lIFJFR19UUkFJTl9DVFJMMCAweDE2DQorI2RlZmluZSBGT1JDRV9MQlIgQklUKDApDQor I2RlZmluZSBMQU5FX0NPVU5UX01BU0sgMHgwNg0KKyNkZWZpbmUgTEFORV9TV0FQIEJJVCgzKQ0K KyNkZWZpbmUgU1BSRUFEX0FNUF81IEJJVCg0KQ0KKyNkZWZpbmUgRk9SQ0VfQ1JfRE9ORSBCSVQo NSkNCisjZGVmaW5lIEZPUkNFX0VRX0RPTkUgQklUKDYpDQorDQorI2RlZmluZSBSRUdfVFJBSU5f Q1RSTDEgMHgxNw0KKyNkZWZpbmUgQVVUT19UUkFJTiBCSVQoMCkNCisjZGVmaW5lIE1BTlVBTF9U UkFJTiBCSVQoMSkNCisjZGVmaW5lIEZPUkNFX1JFVFJBSU4gQklUKDIpDQorDQorI2RlZmluZSBS RUdfQVVYX0NUUkwgMHgyMw0KKyNkZWZpbmUgQ0xSX0VESURfRklGTyBCSVQoMCkNCisjZGVmaW5l IEFVWF9VU0VSX01PREUgQklUKDEpDQorI2RlZmluZSBBVVhfTk9fU0VHTUVOVF9XUiBCSVQoNikN CisjZGVmaW5lIEFVWF9FTl9GSUZPX1JFQUQgQklUKDcpDQorDQorI2RlZmluZSBSRUdfQVVYX0FE Ul8wXzcgMHgyNA0KKyNkZWZpbmUgUkVHX0FVWF9BRFJfOF8xNSAweDI1DQorI2RlZmluZSBSRUdf QVVYX0FEUl8xNl8xOSAweDI2DQorI2RlZmluZSBSRUdfQVVYX09VVF9EQVRBMCAweDI3DQorDQor I2RlZmluZSBSRUdfQVVYX0NNRF9SRVEgMHgyQg0KKyNkZWZpbmUgQVVYX0JVU1kgQklUKDUpDQor DQorI2RlZmluZSBSRUdfQVVYX0RBVEFfMF83IDB4MkMNCisjZGVmaW5lIFJFR19BVVhfREFUQV84 XzE1IDB4MkQNCisjZGVmaW5lIFJFR19BVVhfREFUQV8xNl8yMyAweDJFDQorI2RlZmluZSBSRUdf QVVYX0RBVEFfMjRfMzEgMHgyRg0KKw0KKyNkZWZpbmUgUkVHX0FVWF9EQVRBX0ZJRk8gMHgyRg0K Kw0KKyNkZWZpbmUgUkVHX0FVWF9FUlJPUl9TVFMgMHg5Rg0KKyNkZWZpbmUgTV9BVVhfUkVRX0ZB SUwgMHgwMw0KKw0KKyNkZWZpbmUgUkVHX0hEQ1BfQ1RSTDEgMHgzOA0KKyNkZWZpbmUgSERDUF9D UF9FTkFCTEUgQklUKDApDQorDQorI2RlZmluZSBSRUdfSERDUF9UUklHR0VSIDB4MzkNCisjZGVm aW5lIEhEQ1BfVFJJR0dFUl9TVEFSVCAgQklUKDApDQorI2RlZmluZSBIRENQX1RSSUdHRVJfQ1BJ UlEgIEJJVCgxKQ0KKyNkZWZpbmUgSERDUF9UUklHR0VSX0tTVl9ET05FICBCSVQoNCkNCisjZGVm aW5lIEhEQ1BfVFJJR0dFUl9LU1ZfRkFJTCBCSVQoNSkNCisNCisjZGVmaW5lIFJFR19IRENQX0NU UkwyIDB4M0ENCisjZGVmaW5lIEhEQ1BfQU5fU0VMIEJJVCgwKQ0KKyNkZWZpbmUgSERDUF9BTl9H RU4gQklUKDEpDQorI2RlZmluZSBIRENQX0hXX0hQRElSUV9BQ1QgQklUKDIpDQorI2RlZmluZSBI RENQX0VOX00wX1JFQUQgQklUKDUpDQorDQorI2RlZmluZSBSRUdfTTBfMF83IDB4NEMNCisjZGVm aW5lIFJFR19BTl8wXzcgMHg0Qw0KKyNkZWZpbmUgUkVHX1NQX0NUUkwwIDB4NTgNCisjZGVmaW5l IFJFR19JUF9DVFJMMSAweDU5DQorI2RlZmluZSBSRUdfSVBfQ1RSTDIgMHg1QQ0KKw0KKyNkZWZp bmUgUkVHX0xJTktfRFJWIDB4NUMNCisjZGVmaW5lIERSVl9IUyBCSVQoMSkNCisNCisjZGVmaW5l IFJFR19EUlZfTE5fREFUQV9TRUwgMHg1RA0KKw0KKyNkZWZpbmUgUkVHX0FVWCAweDVFDQorDQor I2RlZmluZSBSRUdfVklEX0JVU19DVFJMMCAweDYwDQorI2RlZmluZSBJTl9ERFIgQklUKDIpDQor I2RlZmluZSBERFJfQ0QgKDB4MDEgPDwgNikNCisNCisjZGVmaW5lIFJFR19WSURfQlVTX0NUUkwx IDB4NjENCisjZGVmaW5lIFRYX0ZJRk9fUkVTRVQgQklUKDEpDQorDQorI2RlZmluZSBSRUdfSU5Q VVRfQ1RSTCAweEEwDQorI2RlZmluZSBJTlBVVF9IU1lOQ19QT0wgQklUKDApDQorI2RlZmluZSBJ TlBVVF9WU1lOQ19QT0wgQklUKDIpDQorI2RlZmluZSBJTlBVVF9JTlRFUkxBQ0VEIEJJVCg0KQ0K Kw0KKyNkZWZpbmUgUkVHX0lOUFVUX0hUT1RBTCAweEExDQorI2RlZmluZSBSRUdfSU5QVVRfSEFD VElWRV9TVEFSVCAweEEzDQorI2RlZmluZSBSRUdfSU5QVVRfSEFDVElWRV9XSURUSCAweEE1DQor I2RlZmluZSBSRUdfSU5QVVRfSEZST05UX1BPUkNIIDB4QTcNCisjZGVmaW5lIFJFR19JTlBVVF9I U1lOQ19XSURUSCAweEE5DQorI2RlZmluZSBSRUdfSU5QVVRfVlRPVEFMIDB4QUINCisjZGVmaW5l IFJFR19JTlBVVF9WQUNUSVZFX1NUQVJUIDB4QUQNCisjZGVmaW5lIFJFR19JTlBVVF9WQUNUSVZF X1dJRFRIIDB4QUYNCisjZGVmaW5lIFJFR19JTlBVVF9WRlJPTlRfUE9SQ0ggMHhCMQ0KKyNkZWZp bmUgUkVHX0lOUFVUX1ZTWU5DX1dJRFRIIDB4QjMNCisNCisjZGVmaW5lIFJFR19BVURJT19TUkNf Q1RSTCAweEI4DQorI2RlZmluZSBNX0FVRElPX0kyU19FTiAweDBGDQorI2RlZmluZSBFTl9JMlMw IEJJVCgwKQ0KKyNkZWZpbmUgRU5fSTJTMSBCSVQoMSkNCisjZGVmaW5lIEVOX0kyUzIgQklUKDIp DQorI2RlZmluZSBFTl9JMlMzIEJJVCgzKQ0KKyNkZWZpbmUgQVVESU9fRklGT19SRVNFVCBCSVQo NykNCisNCisjZGVmaW5lIFJFR19BVURJT19GTVQgMHhCOQ0KKyNkZWZpbmUgUkVHX0FVRElPX0ZJ Rk9fU0VMIDB4QkENCisNCisjZGVmaW5lIFJFR19BVURJT19DVFJMMCAweEJCDQorI2RlZmluZSBB VURJT19GVUxMX1BLVCBCSVQoNCkNCisjZGVmaW5lIEFVRElPXzE2Ql9CT1VORCBCSVQoNSkNCisN CisjZGVmaW5lIFJFR19BVURJT19DVFJMMSAweEJDDQorI2RlZmluZSBSRUdfQVVESU9fSU5QVVRf RlJFUSAweEJFDQorDQorI2RlZmluZSBSRUdfSUVDOTU4X1NUUzAgMHhCRg0KKyNkZWZpbmUgUkVH X0lFQzk1OF9TVFMxIDB4QzANCisjZGVmaW5lIFJFR19JRUM5NThfU1RTMiAweEMxDQorI2RlZmlu ZSBSRUdfSUVDOTU4X1NUUzMgMHhDMg0KKyNkZWZpbmUgUkVHX0lFQzk1OF9TVFM0IDB4QzMNCisN CisjZGVmaW5lIFJFR19IUERfSVJRX1RJTUUgMHhDOQ0KKyNkZWZpbmUgUkVHX0FVWF9ERUJVR19N T0RFIDB4Q0ENCisjZGVmaW5lIFJFR19BVVhfT1BUMiAweENCDQorI2RlZmluZSBSRUdfSERDUF9P UFQgMHhDRQ0KKyNkZWZpbmUgUkVHX1VTRVJfRFJWX1BSRSAweENGDQorDQorI2RlZmluZSBSRUdf REFUQV9NVVRFX0NUUkwgMHhEMw0KKyNkZWZpbmUgRU5BQkxFX0VOSEFOQ0VEX0ZSQU1FIEJJVCgw KQ0KKyNkZWZpbmUgRU5BQkxFX0FVVE9fVklERU9fRklGT19SRVNFVCBCSVQoMSkNCisjZGVmaW5l IEVOX1ZJRF9NVVRFIEJJVCg0KQ0KKyNkZWZpbmUgRU5fQVVEX01VVEUgQklUKDUpDQorDQorI2Rl ZmluZSBSRUdfVElNRV9TVE1QX0NUUkwgMHhENA0KKyNkZWZpbmUgRU5fRU5IQU5DRV9WSURfU1RN UCBCSVQoMCkNCisjZGVmaW5lIEVOX0VOSEFOQ0VfQVVEX1NUTVAgQklUKDIpDQorI2RlZmluZSBN X1NUQU1QX1NURVAgMHgzMA0KKyNkZWZpbmUgRU5fU1NDX0dBVCBCSVQoNikNCisNCisjZGVmaW5l IFJFR19JTkZPRlJBTUVfQ1RSTCAweEU4DQorI2RlZmluZSBFTl9BVklfUEtUIEJJVCgwKQ0KKyNk ZWZpbmUgRU5fQVVEX1BLVCBCSVQoMSkNCisjZGVmaW5lIEVOX01QR19QS1QgQklUKDIpDQorI2Rl ZmluZSBFTl9HRU5fUEtUIEJJVCgzKQ0KKyNkZWZpbmUgRU5fVklEX1RJTUVfU1RNUCBCSVQoNCkN CisjZGVmaW5lIEVOX0FVRF9USU1FX1NUTVAgQklUKDUpDQorI2RlZmluZSBFTl9WSURfQ1RSTF9Q S1QgKEVOX0FWSV9QS1QgfCBFTl9WSURfVElNRV9TVE1QKQ0KKyNkZWZpbmUgRU5fQVVEX0NUUkxf UEtUIChFTl9BVURfUEtUIHwgRU5fQVVEX1RJTUVfU1RNUCkNCisNCisjZGVmaW5lIFJFR19BVURJ T19OXzBfNyAweERFDQorI2RlZmluZSBSRUdfQVVESU9fTl84XzE1IDB4REYNCisjZGVmaW5lIFJF R19BVURJT19OXzE2XzIzIDB4RTANCisNCisjZGVmaW5lIFJFR19BVklfSU5GT19EQjEgMHhFOQ0K KyNkZWZpbmUgUkVHX0FWSV9JTkZPX0RCMiAweEVBDQorI2RlZmluZSBSRUdfQVZJX0lORk9fREIz IDB4RUINCisjZGVmaW5lIFJFR19BVklfSU5GT19EQjQgMHhFQw0KKyNkZWZpbmUgUkVHX0FWSV9J TkZPX0RCNSAweEVEDQorI2RlZmluZSBSRUdfQVZJX0lORk9fU1VNIDB4RjYNCisNCisjZGVmaW5l IFJFR19BVURfSU5GT0ZSQU1fREIxIDB4RjcNCisjZGVmaW5lIFJFR19BVURfSU5GT0ZSQU1fREIy IDB4RjgNCisjZGVmaW5lIFJFR19BVURfSU5GT0ZSQU1fREIzIDB4RjkNCisjZGVmaW5lIFJFR19B VURfSU5GT0ZSQU1fREI0IDB4RkENCisjZGVmaW5lIFJFR19BVURfSU5GT0ZSQU1fU1VNIDB4RkIN CisNCisvKiB0aGUgZm9sbG93aW5nIHNpeCByZWdpc3RlcnMgYXJlIGluIGJhbmsxICovDQorI2Rl ZmluZSBSRUdfRFJWXzBfREJfODAwX01WIDB4N0UNCisjZGVmaW5lIFJFR19QUkVfMF9EQl84MDBf TVYgMHg3Rg0KKyNkZWZpbmUgUkVHX1BSRV8zUDVfREJfODAwX01WIDB4ODENCisjZGVmaW5lIFJF R19TU0NfQ1RSTDAgMHg4OA0KKyNkZWZpbmUgUkVHX1NTQ19DVFJMMSAweDg5DQorI2RlZmluZSBS RUdfU1NDX0NUUkwyIDB4OEENCisNCisjZGVmaW5lIFJCUiBEUF9MSU5LX0JXXzFfNjINCisjZGVm aW5lIEhCUiBEUF9MSU5LX0JXXzJfNw0KKyNkZWZpbmUgSEJSMiBEUF9MSU5LX0JXXzVfNA0KKyNk ZWZpbmUgSEJSMyBEUF9MSU5LX0JXXzhfMQ0KKw0KKy8qIFZlbmRvciBvcHRpb24gKi8NCisjZGVm aW5lIEhEQ1BfREVTSVJFRCAxDQorI2RlZmluZSBNQVhfTEFORV9DT1VOVCA0DQorI2RlZmluZSBN QVhfTElOS19SQVRFIEhCUg0KKyNkZWZpbmUgQVVUT19UUkFJTl9SRVRSWSAzDQorI2RlZmluZSBN QVhfSERDUF9ET1dOX1NUUkVBTV9DT1VOVCAxMA0KKyNkZWZpbmUgTUFYX0NSX0xFVkVMIDB4MDMN CisjZGVmaW5lIE1BWF9FUV9MRVZFTCAweDAzDQorI2RlZmluZSBBVVhfV0FJVF9USU1FT1VUX01T IDE1DQorI2RlZmluZSBBVVhfRklGT19NQVhfU0laRSAzMg0KKyNkZWZpbmUgUElYRUxfQ0xLX0RF TEFZIDENCisjZGVmaW5lIFBJWEVMX0NMS19JTlZFUlNFIDANCisjZGVmaW5lIEFESlVTVF9QSEFT RV9USFJFU0hPTEQgODAwMDANCisjZGVmaW5lIERQSV9QSVhFTF9DTEtfTUFYIDk1MDAwDQorI2Rl ZmluZSBIRENQX1NIQTFfRklGT19MRU4gKE1BWF9IRENQX0RPV05fU1RSRUFNX0NPVU5UICogNSAr IDEwKQ0KKyNkZWZpbmUgREVGQVVMVF9QV1JfT04gMA0KKyNkZWZpbmUgREVGQVVMVF9EUlZfSE9M RCAwDQorDQorI2RlZmluZSBBVURJT19TRUxFQ1QgSTJTDQorI2RlZmluZSBBVURJT19UWVBFIExQ Q00NCisjZGVmaW5lIEFVRElPX1NBTVBMRV9SQVRFIFNBTVBMRV9SQVRFXzQ4Sw0KKyNkZWZpbmUg QVVESU9fQ0hBTk5FTF9DT1VOVCAyDQorDQorLyoNCisgKiAwOiBTdGFuZGFyZCBJMlMNCisgKiAx OiAzMmJpdCBJMlMNCisgKi8NCisjZGVmaW5lIEkyU19JTlBVVF9GT1JNQVQgMQ0KKw0KKy8qDQor ICogMDogTGVmdC1qdXN0aWZpZWQNCisgKiAxOiBSaWdodC1qdXN0aWZpZWQNCisgKi8NCisjZGVm aW5lIEkyU19KVVNUSUZJRUQgMA0KKw0KKy8qDQorICogMDogRGF0YSBkZWxheSAxVCBjb3JyZXNw b25kIHRvIFdTDQorICogMTogTm8gZGF0YSBkZWxheSBjb3JyZXNwb25kIHRvIFdTDQorICovDQor I2RlZmluZSBJMlNfREFUQV9ERUxBWSAwDQorDQorLyoNCisgKiAwOiBMZWZ0IGNoYW5uZWwNCisg KiAxOiBSaWdodCBjaGFubmVsDQorICovDQorI2RlZmluZSBJMlNfV1NfQ0hBTk5FTCAwDQorDQor LyoNCisgKiAwOiBNU0Igc2hpZnQgZmlyc3QNCisgKiAxOiBMU0Igc2hpZnQgZmlyc3QNCisgKi8N CisjZGVmaW5lIEkyU19EQVRBX1NFUVVFTkNFIDANCisNCisvKg0KKyAqIEF1ZGlvIFNhbXBsZSBX b3JkIExlbmd0aA0KKyAqIFdPUkRfTEVOR1RIXzE2QklUDQorICogV09SRF9MRU5HVEhfMThCSVQN CisgKiBXT1JEX0xFTkdUSF8yMEJJVA0KKyAqIFdPUkRfTEVOR1RIXzI0QklUDQorICovDQorI2Rl ZmluZSBBVURJT19XT1JEX0xFTkdUSCBXT1JEX0xFTkdUSF8yNEJJVA0KKw0KK2VudW0gYXV4X2Nt ZF90eXBlIHsNCisJQ01EX0FVWF9OQVRJVkVfUkVBRCA9IDB4MCwNCisJQ01EX0FVWF9OQVRJVkVf V1JJVEUgPSAweDUsDQorCUNNRF9BVVhfSTJDX0VESURfUkVBRCA9IDB4QiwNCit9Ow0KKw0KK2Vu dW0gYXV4X2NtZF9yZXBseSB7DQorCVJFUExZX0FDSywNCisJUkVQTFlfTkFDSywNCisJUkVQTFlf REVGRVIsDQorfTsNCisNCitlbnVtIGxpbmtfdHJhaW5fc3RhdHVzIHsNCisJTElOS19JRExFLA0K KwlMSU5LX0JVU1ksDQorCUxJTktfT0ssDQorfTsNCisNCitlbnVtIGhkY3Bfc3RhdGUgew0KKwlI RENQX0FVVEhfSURMRSwNCisJSERDUF9BVVRIX0dPSU5HLA0KKwlIRENQX0FVVEhfRE9ORSwNCit9 Ow0KKw0KK3N0cnVjdCBpdDY1MDVfcGxhdGZvcm1fZGF0YSB7DQorCXN0cnVjdCByZWd1bGF0b3Ig KnB3cjE4Ow0KKwlzdHJ1Y3QgcmVndWxhdG9yICpvdmRkOw0KKwlzdHJ1Y3QgZ3Bpb19kZXNjICpn cGlvZF9yZXNldDsNCit9Ow0KKw0KK2VudW0gaXQ2NTA1X2F1ZGlvX3NlbGVjdCB7DQorCUkyUyA9 IDAsDQorCVNQRElGLA0KK307DQorDQorZW51bSBpdDY1MDVfYXVkaW9fc2FtcGxlX3JhdGUgew0K KwlTQU1QTEVfUkFURV8yNEsgPSAweDYsDQorCVNBTVBMRV9SQVRFXzMySyA9IDB4MywNCisJU0FN UExFX1JBVEVfNDhLID0gMHgyLA0KKwlTQU1QTEVfUkFURV85NksgPSAweEEsDQorCVNBTVBMRV9S QVRFXzE5MksgPSAweEUsDQorCVNBTVBMRV9SQVRFXzQ0XzFLID0gMHgwLA0KKwlTQU1QTEVfUkFU RV84OF8ySyA9IDB4OCwNCisJU0FNUExFX1JBVEVfMTc2XzRLID0gMHhDLA0KK307DQorDQorZW51 bSBpdDY1MDVfYXVkaW9fdHlwZSB7DQorCUxQQ00gPSAwLA0KKwlOTFBDTSwNCisJRFNTLA0KK307 DQorDQorZW51bSBpdDY1MDVfYXVkaW9fd29yZF9sZW5ndGggew0KKwlXT1JEX0xFTkdUSF8xNkJJ VCA9IDAsDQorCVdPUkRfTEVOR1RIXzE4QklULA0KKwlXT1JEX0xFTkdUSF8yMEJJVCwNCisJV09S RF9MRU5HVEhfMjRCSVQsDQorfTsNCisNCitzdHJ1Y3QgaXQ2NTA1X2F1ZGlvX2RhdGEgew0KKwll bnVtIGl0NjUwNV9hdWRpb19zZWxlY3Qgc2VsZWN0Ow0KKwllbnVtIGl0NjUwNV9hdWRpb19zYW1w bGVfcmF0ZSBzYW1wbGVfcmF0ZTsNCisJZW51bSBpdDY1MDVfYXVkaW9fdHlwZSB0eXBlOw0KKwll bnVtIGl0NjUwNV9hdWRpb193b3JkX2xlbmd0aCB3b3JkX2xlbmd0aDsNCisJdTggY2hhbm5lbF9j b3VudDsNCisJdTggaTJzX2lucHV0X2Zvcm1hdDsNCisJdTggaTJzX2p1c3RpZmllZDsNCisJdTgg aTJzX2RhdGFfZGVsYXk7DQorCXU4IGkyc193c19jaGFubmVsOw0KKwl1OCBpMnNfZGF0YV9zZXF1 ZW5jZTsNCit9Ow0KKw0KK3N0cnVjdCBpdDY1MDVfYXVkaW9fc2FtcGxlX3JhdGVfbWFwIHsNCisJ ZW51bSBpdDY1MDVfYXVkaW9fc2FtcGxlX3JhdGUgcmF0ZTsNCisJaW50IHNhbXBsZV9yYXRlX3Zh bHVlOw0KK307DQorDQorc3RydWN0IGl0NjUwNV9kcm1fZHBfbGluayB7DQorCXVuc2lnbmVkIGNo YXIgcmV2aXNpb247DQorCXVuc2lnbmVkIGludCByYXRlOw0KKwl1bnNpZ25lZCBpbnQgbnVtX2xh bmVzOw0KKwl1bnNpZ25lZCBsb25nIGNhcGFiaWxpdGllczsNCit9Ow0KKw0KK3N0cnVjdCBpdDY1 MDUgew0KKwlzdHJ1Y3QgZHJtX2RwX2F1eCBhdXg7DQorCXN0cnVjdCBkcm1fYnJpZGdlIGJyaWRn ZTsNCisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsNCisJc3RydWN0IGVkaWQgKmVkaWQ7DQor CXN0cnVjdCBkcm1fY29ubmVjdG9yIGNvbm5lY3RvcjsNCisJc3RydWN0IGl0NjUwNV9kcm1fZHBf bGluayBsaW5rOw0KKwlzdHJ1Y3QgaXQ2NTA1X3BsYXRmb3JtX2RhdGEgcGRhdGE7DQorCXN0cnVj dCBtdXRleCBleHRjb25fbG9jazsNCisJc3RydWN0IG11dGV4IG1vZGVfbG9jazsNCisJc3RydWN0 IG11dGV4IGF1eF9sb2NrOw0KKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7DQorCXN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlIHZpZGVvX2luZm87DQorCXN0cnVjdCBub3RpZmllcl9ibG9jayBldmVudF9u YjsNCisJc3RydWN0IGV4dGNvbl9kZXYgKmV4dGNvbjsNCisJc3RydWN0IHdvcmtfc3RydWN0IGV4 dGNvbl93cTsNCisJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBjb25uZWN0b3Jfc3RhdHVzOw0K KwllbnVtIGxpbmtfdHJhaW5fc3RhdHVzIGxpbmtfc3RhdGU7DQorCXN0cnVjdCB3b3JrX3N0cnVj dCBsaW5rX3dvcmtzOw0KKwl1OCBkcGNkW0RQX1JFQ0VJVkVSX0NBUF9TSVpFXTsNCisJdTggbGFu ZV9jb3VudDsNCisJdTggbGlua19yYXRlX2J3X2NvZGU7DQorCXU4IHNpbmtfY291bnQ7DQorCWJv b2wgc3RlcF90cmFpbjsNCisJYm9vbCBicmFuY2hfZGV2aWNlOw0KKwlib29sIGVuYWJsZV9zc2M7 DQorCWJvb2wgbGFuZV9zd2FwX2Rpc2FibGVkOw0KKwlib29sIGxhbmVfc3dhcDsNCisJYm9vbCBw b3dlcmVkOw0KKwl1MzIgYWZlX3NldHRpbmc7DQorCWVudW0gaGRjcF9zdGF0ZSBoZGNwX3N0YXR1 czsNCisJc3RydWN0IGRlbGF5ZWRfd29yayBoZGNwX3dvcms7DQorCXN0cnVjdCB3b3JrX3N0cnVj dCBoZGNwX3dhaXRfa3N2X2xpc3Q7DQorCXN0cnVjdCBjb21wbGV0aW9uIHdhaXRfZWRpZF9jb21w bGV0ZTsNCisJdTggYXV0b190cmFpbl9yZXRyeTsNCisJYm9vbCBoZGNwX2Rlc2lyZWQ7DQorCWJv b2wgaXNfcmVwZWF0ZXI7DQorCXU4IGhkY3BfZG93bl9zdHJlYW1fY291bnQ7DQorCXU4IGJrc3Zz W0RSTV9IRENQX0tTVl9MRU5dOw0KKwl1OCBzaGExX2lucHV0W0hEQ1BfU0hBMV9GSUZPX0xFTl07 DQorCWJvb2wgZW5hYmxlX2VuaGFuY2VkX2ZyYW1lOw0KKwloZG1pX2NvZGVjX3BsdWdnZWRfY2Ig cGx1Z2dlZF9jYjsNCisJc3RydWN0IGRldmljZSAqY29kZWNfZGV2Ow0KKwlzdHJ1Y3QgZGVsYXll ZF93b3JrIGRlbGF5ZWRfYXVkaW87DQorCXN0cnVjdCBpdDY1MDVfYXVkaW9fZGF0YSBhdWRpbzsN CisNCisJLyogaXQ2NTA1IGRyaXZlciBob2xkIG9wdGlvbiAqLw0KKwlib29sIGVuYWJsZV9kcnZf aG9sZDsNCit9Ow0KKw0KK3N0cnVjdCBpdDY1MDVfc3RlcF90cmFpbl9wYXJhIHsNCisJdTggdm9s dGFnZV9zd2luZ1tNQVhfTEFORV9DT1VOVF07DQorCXU4IHByZV9lbXBoYXNpc1tNQVhfTEFORV9D T1VOVF07DQorfTsNCisNCisvKg0KKyAqIFZlbmRvciBvcHRpb24gYWZlIHNldHRpbmdzIGZvciBk aWZmZXJlbnQgcGxhdGZvcm1zDQorICogMDogZm9yIGJpdGxhbmQgMTBlLCBxdWFudGEgemRlDQor ICogMTogZm9yIGdvb2dsZSBrdWt1aSBwMS9wMiwgaHVhcWluIGtyYW5lDQorICovDQorDQorc3Rh dGljIHU4IGNvbnN0IGFmZV9zZXR0aW5nX3RhYmxlW11bM10gPSB7DQorCXsweDgyLCAweDAwLCAw eEE2fSwNCisJezB4OTMsIDB4MkEsIDB4ODV9DQorfTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0 IGl0NjUwNV9hdWRpb19zYW1wbGVfcmF0ZV9tYXAgYXVkaW9fc2FtcGxlX3JhdGVfbWFwW10gPSB7 DQorCXtTQU1QTEVfUkFURV8yNEssIDI0MDAwfSwNCisJe1NBTVBMRV9SQVRFXzMySywgMzIwMDB9 LA0KKwl7U0FNUExFX1JBVEVfNDhLLCA0ODAwMH0sDQorCXtTQU1QTEVfUkFURV85NkssIDk2MDAw fSwNCisJe1NBTVBMRV9SQVRFXzE5MkssIDE5MjAwMH0sDQorCXtTQU1QTEVfUkFURV80NF8xSywg NDQxMDB9LA0KKwl7U0FNUExFX1JBVEVfODhfMkssIDg4MjAwfSwNCisJe1NBTVBMRV9SQVRFXzE3 Nl80SywgMTc2NDAwfSwNCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX3Jhbmdl IGl0NjUwNV9icmlkZ2Vfdm9sYXRpbGVfcmFuZ2VzW10gPSB7DQorCXsgLnJhbmdlX21pbiA9IDAs IC5yYW5nZV9tYXggPSAweEZGIH0sDQorfTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21h cF9hY2Nlc3NfdGFibGUgaXQ2NTA1X2JyaWRnZV92b2xhdGlsZV90YWJsZSA9IHsNCisJLnllc19y YW5nZXMgPSBpdDY1MDVfYnJpZGdlX3ZvbGF0aWxlX3JhbmdlcywNCisJLm5feWVzX3JhbmdlcyA9 IEFSUkFZX1NJWkUoaXQ2NTA1X2JyaWRnZV92b2xhdGlsZV9yYW5nZXMpLA0KK307DQorDQorc3Rh dGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIGl0NjUwNV9yZWdtYXBfY29uZmlnID0gew0K KwkucmVnX2JpdHMgPSA4LA0KKwkudmFsX2JpdHMgPSA4LA0KKwkudm9sYXRpbGVfdGFibGUgPSAm aXQ2NTA1X2JyaWRnZV92b2xhdGlsZV90YWJsZSwNCisJLmNhY2hlX3R5cGUgPSBSRUdDQUNIRV9O T05FLA0KK307DQorDQorc3RhdGljIGludCBpdDY1MDVfcmVhZChzdHJ1Y3QgaXQ2NTA1ICppdDY1 MDUsIHVuc2lnbmVkIGludCByZWdfYWRkcikNCit7DQorCXVuc2lnbmVkIGludCB2YWx1ZTsNCisJ aW50IGVycjsNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQor DQorCWVyciA9IHJlZ21hcF9yZWFkKGl0NjUwNS0+cmVnbWFwLCByZWdfYWRkciwgJnZhbHVlKTsN CisJaWYgKGVyciA8IDApIHsNCisJCURSTV9ERVZfRVJST1IoZGV2LCAicmVhZCBmYWlsZWQgcmVn WzB4JXhdIGVycjogJWQiLCByZWdfYWRkciwNCisJCQkgICAgICBlcnIpOw0KKwkJcmV0dXJuIGVy cjsNCisJfQ0KKw0KKwlyZXR1cm4gdmFsdWU7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXQ2NTA1X3dy aXRlKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwgdW5zaWduZWQgaW50IHJlZ19hZGRyLA0KKwkJICAg ICAgdW5zaWduZWQgaW50IHJlZ192YWwpDQorew0KKwlpbnQgZXJyOw0KKwlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisNCisJZXJyID0gcmVnbWFwX3dyaXRlKGl0 NjUwNS0+cmVnbWFwLCByZWdfYWRkciwgcmVnX3ZhbCk7DQorDQorCWlmIChlcnIgPCAwKSB7DQor CQlEUk1fREVWX0VSUk9SKGRldiwgIndyaXRlIGZhaWxlZCByZWdbMHgleF0gPSAweCV4IGVyciA9 ICVkIiwNCisJCQkgICAgICByZWdfYWRkciwgcmVnX3ZhbCwgZXJyKTsNCisJCXJldHVybiBlcnI7 DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXQ2NTA1X3NldF9iaXRz KHN0cnVjdCBpdDY1MDUgKml0NjUwNSwgdW5zaWduZWQgaW50IHJlZywNCisJCQkgdW5zaWduZWQg aW50IG1hc2ssIHVuc2lnbmVkIGludCB2YWx1ZSkNCit7DQorCWludCBlcnI7DQorCXN0cnVjdCBk ZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKw0KKwllcnIgPSByZWdtYXBfdXBk YXRlX2JpdHMoaXQ2NTA1LT5yZWdtYXAsIHJlZywgbWFzaywgdmFsdWUpOw0KKwlpZiAoZXJyIDwg MCkgew0KKwkJRFJNX0RFVl9FUlJPUigNCisJCQlkZXYsICJ3cml0ZSByZWdbMHgleF0gPSAweCV4 IG1hc2sgPSAweCV4IGZhaWxlZCBlcnIgJWQiLA0KKwkJCXJlZywgdmFsdWUsIG1hc2ssIGVycik7 DQorCQlyZXR1cm4gZXJyOw0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgdm9p ZCBpdDY1MDVfZGVidWdfcHJpbnQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1LCB1bnNpZ25lZCBpbnQg cmVnLA0KKwkJCSAgICAgY29uc3QgY2hhciAqcHJlZml4KQ0KK3sNCisJc3RydWN0IGRldmljZSAq ZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQorCWludCB2YWw7DQorDQorCWlmIChsaWtlbHko IShfX2RybV9kZWJ1ZyAmIERSTV9VVF9EUklWRVIpKSkNCisJCXJldHVybjsNCisNCisJdmFsID0g aXQ2NTA1X3JlYWQoaXQ2NTA1LCByZWcpOw0KKwlpZiAodmFsIDwgMCkNCisJCURSTV9ERVZfREVC VUdfRFJJVkVSKGRldiwgIiVzIHJlZ1slMDJ4XSByZWFkIGVycm9yICglZCkiLA0KKwkJCQkgICAg IHByZWZpeCwgcmVnLCB2YWwpOw0KKwllbHNlDQorCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYs ICIlcyByZWdbJTAyeF0gPSAweCUwMngiLCBwcmVmaXgsIHJlZywNCisJCQkJICAgICB2YWwpOw0K K30NCisNCitzdGF0aWMgaW50IGl0NjUwNV9kcGNkX3JlYWQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1 LCB1bnNpZ25lZCBsb25nIG9mZnNldCkNCit7DQorCXU4IHZhbHVlOw0KKwlpbnQgcmV0Ow0KKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisNCisJcmV0ID0gZHJt X2RwX2RwY2RfcmVhZGIoJml0NjUwNS0+YXV4LCBvZmZzZXQsICZ2YWx1ZSk7DQorCWlmIChyZXQg PCAwKSB7DQorCQlEUk1fREVWX0VSUk9SKGRldiwgIkRQQ0QgcmVhZCBmYWlsZWQgWzB4JWx4XSBy ZXQ6ICVkIiwgb2Zmc2V0LA0KKwkJCSAgICAgIHJldCk7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQor CXJldHVybiB2YWx1ZTsNCit9DQorDQorc3RhdGljIGludCBpdDY1MDVfZHBjZF93cml0ZShzdHJ1 Y3QgaXQ2NTA1ICppdDY1MDUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LA0KKwkJCSAgICAgdW5zaWdu ZWQgbG9uZyBkYXRhaW4pDQorew0KKwlpbnQgcmV0Ow0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAm aXQ2NTA1LT5jbGllbnQtPmRldjsNCisNCisJcmV0ID0gZHJtX2RwX2RwY2Rfd3JpdGViKCZpdDY1 MDUtPmF1eCwgb2Zmc2V0LCBkYXRhaW4pOw0KKwlpZiAocmV0IDwgMCkgew0KKwkJRFJNX0RFVl9F UlJPUihkZXYsICJEUENEIHdyaXRlIGZhaWxlZCBbMHglbHhdIHJldDogJWQiLCBvZmZzZXQsDQor CQkJICAgICAgcmV0KTsNCisJCXJldHVybiByZXQ7DQorCX0NCisJcmV0dXJuIDA7DQorfQ0KKw0K K3N0YXRpYyBpbnQgaXQ2NTA1X2dldF9kcGNkKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwgaW50IG9m ZnNldCwgdTggKmRwY2QsIGludCBudW0pDQorew0KKwlpbnQgcmV0Ow0KKwlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisNCisJcmV0ID0gZHJtX2RwX2RwY2RfcmVh ZCgmaXQ2NTA1LT5hdXgsIG9mZnNldCwgZHBjZCwgbnVtKTsNCisNCisJaWYgKHJldCA8IDApDQor CQlyZXR1cm4gcmV0Ow0KKw0KKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJyZXQgPSAlZCBE UENEWzB4JXhdID0gMHglKnBoIiwgcmV0LCBvZmZzZXQsDQorCQkJICAgICBudW0sIGRwY2QpOw0K Kw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X2R1bXAoc3RydWN0IGl0 NjUwNSAqaXQ2NTA1KQ0KK3sNCisJdW5zaWduZWQgaW50IGksIGo7DQorCXU4IHJlZ3NbMTZdOw0K KwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisNCisJZm9yIChp ID0gMDsgaSA8PSAweGZmOyBpICs9IDE2KSB7DQorCQlmb3IgKGogPSAwOyBqIDwgMTY7IGorKykN CisJCQlyZWdzW2pdID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBpICsgaik7DQorDQorCQlEUk1fREVW X0RFQlVHX0RSSVZFUihkZXYsICJbMHglMDJ4XSA9ICUxNnBoIiwgaSwgcmVncyk7DQorCX0NCit9 DQorDQorc3RhdGljIGJvb2wgaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0dXMoc3RydWN0IGl0NjUw NSAqaXQ2NTA1KQ0KK3sNCisJaW50IHJlZ18wZDsNCisNCisJcmVnXzBkID0gaXQ2NTA1X3JlYWQo aXQ2NTA1LCBSRUdfU1lTVEVNX1NUUyk7DQorDQorCWlmIChyZWdfMGQgPCAwKQ0KKwkJcmV0dXJu IGZhbHNlOw0KKw0KKwlyZXR1cm4gISEocmVnXzBkICYgSFBEX1NUUyk7DQorfQ0KKw0KK3N0YXRp YyBpbnQgaXQ2NTA1X3JlYWRfd29yZChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUsIHVuc2lnbmVkIGlu dCByZWcpDQorew0KKwlpbnQgdmFsMCwgdmFsMTsNCisNCisJdmFsMCA9IGl0NjUwNV9yZWFkKGl0 NjUwNSwgcmVnKTsNCisJaWYgKHZhbDAgPCAwKQ0KKwkJcmV0dXJuIHZhbDA7DQorDQorCXZhbDEg PSBpdDY1MDVfcmVhZChpdDY1MDUsIHJlZyArIDEpOw0KKwlpZiAodmFsMSA8IDApDQorCQlyZXR1 cm4gdmFsMTsNCisNCisJcmV0dXJuICh2YWwxIDw8IDgpIHwgdmFsMDsNCit9DQorDQorc3RhdGlj IHZvaWQgaXQ2NTA1X2NhbGNfdmlkZW9faW5mbyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0K KwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisJaW50IGhzeW5j X3BvbCwgdnN5bmNfcG9sLCBpbnRlcmxhY2VkOw0KKwlpbnQgaHRvdGFsLCBoZGVzLCBoZGV3LCBo ZnBoLCBoc3luY3c7DQorCWludCB2dG90YWwsIHZkZXMsIHZkZXcsIHZmcGgsIHZzeW5jdzsNCisJ aW50IHJkZGF0YSwgaSwgcGNsaywgc3VtID0gMDsNCisNCisJdXNsZWVwX3JhbmdlKDEwMDAwLCAx NTAwMCk7DQorCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19CQU5LX1NFTCwgMHgwMCk7DQorCXJk ZGF0YSA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX0lOUFVUX0NUUkwpOw0KKwloc3luY19wb2wg PSByZGRhdGEgJiBJTlBVVF9IU1lOQ19QT0w7DQorCXZzeW5jX3BvbCA9IChyZGRhdGEgJiBJTlBV VF9WU1lOQ19QT0wpID4+IDI7DQorCWludGVybGFjZWQgPSAocmRkYXRhICYgSU5QVVRfSU5URVJM QUNFRCkgPj4gNDsNCisNCisJaHRvdGFsID0gaXQ2NTA1X3JlYWRfd29yZChpdDY1MDUsIFJFR19J TlBVVF9IVE9UQUwpICYgMHgxRkZGOw0KKwloZGVzID0gaXQ2NTA1X3JlYWRfd29yZChpdDY1MDUs IFJFR19JTlBVVF9IQUNUSVZFX1NUQVJUKSAmIDB4MUZGRjsNCisJaGRldyA9IGl0NjUwNV9yZWFk X3dvcmQoaXQ2NTA1LCBSRUdfSU5QVVRfSEFDVElWRV9XSURUSCkgJiAweDFGRkY7DQorCWhmcGgg PSBpdDY1MDVfcmVhZF93b3JkKGl0NjUwNSwgUkVHX0lOUFVUX0hGUk9OVF9QT1JDSCkgJiAweDFG RkY7DQorCWhzeW5jdyA9IGl0NjUwNV9yZWFkX3dvcmQoaXQ2NTA1LCBSRUdfSU5QVVRfSFNZTkNf V0lEVEgpICYgMHgxRkZGOw0KKw0KKwl2dG90YWwgPSBpdDY1MDVfcmVhZF93b3JkKGl0NjUwNSwg UkVHX0lOUFVUX1ZUT1RBTCkgJiAweEZGRjsNCisJdmRlcyA9IGl0NjUwNV9yZWFkX3dvcmQoaXQ2 NTA1LCBSRUdfSU5QVVRfVkFDVElWRV9TVEFSVCkgJiAweEZGRjsNCisJdmRldyA9IGl0NjUwNV9y ZWFkX3dvcmQoaXQ2NTA1LCBSRUdfSU5QVVRfVkFDVElWRV9XSURUSCkgJiAweEZGRjsNCisJdmZw aCA9IGl0NjUwNV9yZWFkX3dvcmQoaXQ2NTA1LCBSRUdfSU5QVVRfVkZST05UX1BPUkNIKSAmIDB4 RkZGOw0KKwl2c3luY3cgPSBpdDY1MDVfcmVhZF93b3JkKGl0NjUwNSwgUkVHX0lOUFVUX1ZTWU5D X1dJRFRIKSAmIDB4RkZGOw0KKw0KKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJoc3luY19w b2w6JWQsIHZzeW5jX3BvbDolZCwgaW50ZXJsYWNlZDolZCIsDQorCQkJICAgICBoc3luY19wb2ws IHZzeW5jX3BvbCwgaW50ZXJsYWNlZCk7DQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImhh Y3RpdmVfc3RhcnQ6JWQsIHZhY3RpdmVfc3RhcnQ6JWQiLA0KKwkJCSAgICAgaGRlcywgdmRlcyk7 DQorDQorCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7DQorCQlpdDY1MDVfc2V0X2JpdHMoaXQ2 NTA1LCBSRUdfREFUQV9DVFJMMCwgRU5BQkxFX1BDTEtfQ09VTlRFUiwNCisJCQkJRU5BQkxFX1BD TEtfQ09VTlRFUik7DQorCQl1c2xlZXBfcmFuZ2UoMTAwMDAsIDE1MDAwKTsNCisJCWl0NjUwNV9z ZXRfYml0cyhpdDY1MDUsIFJFR19EQVRBX0NUUkwwLCBFTkFCTEVfUENMS19DT1VOVEVSLA0KKwkJ CQkweDAwKTsNCisJCXJkZGF0YSA9IGl0NjUwNV9yZWFkX3dvcmQoaXQ2NTA1LCBSRUdfUENMS19D T1VOVEVSX1ZBTFVFKSAmDQorCQkJIDB4RkZGOw0KKw0KKwkJc3VtICs9IHJkZGF0YTsNCisJfQ0K Kw0KKwlpZiAoc3VtID09IDApIHsNCisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImNhbGMg dmlkZW8gdGltaW5nIGVycm9yIik7DQorCQlyZXR1cm47DQorCX0NCisNCisJc3VtIC89IDEwOw0K KwlwY2xrID0gMTM1MDAgKiAyMDQ4IC8gc3VtOw0KKwlpdDY1MDUtPnZpZGVvX2luZm8uY2xvY2sg PSBwY2xrOw0KKwlpdDY1MDUtPnZpZGVvX2luZm8uaGRpc3BsYXkgPSBoZGV3Ow0KKwlpdDY1MDUt PnZpZGVvX2luZm8uaHN5bmNfc3RhcnQgPSBoZGV3ICsgaGZwaDsNCisJaXQ2NTA1LT52aWRlb19p bmZvLmhzeW5jX2VuZCA9IGhkZXcgKyBoZnBoICsgaHN5bmN3Ow0KKwlpdDY1MDUtPnZpZGVvX2lu Zm8uaHRvdGFsID0gaHRvdGFsOw0KKwlpdDY1MDUtPnZpZGVvX2luZm8udmRpc3BsYXkgPSB2ZGV3 Ow0KKwlpdDY1MDUtPnZpZGVvX2luZm8udnN5bmNfc3RhcnQgPSB2ZGV3ICsgdmZwaDsNCisJaXQ2 NTA1LT52aWRlb19pbmZvLnZzeW5jX2VuZCA9IHZkZXcgKyB2ZnBoICsgdnN5bmN3Ow0KKwlpdDY1 MDUtPnZpZGVvX2luZm8udnRvdGFsID0gdnRvdGFsOw0KKw0KKwlEUk1fREVWX0RFQlVHX0RSSVZF UihkZXYsIERSTV9NT0RFX0ZNVCwNCisJCQkgICAgIERSTV9NT0RFX0FSRygmaXQ2NTA1LT52aWRl b19pbmZvKSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXQ2NTA1X2RybV9kcF9saW5rX3Byb2JlKHN0 cnVjdCBkcm1fZHBfYXV4ICphdXgsDQorCQkJCSAgICBzdHJ1Y3QgaXQ2NTA1X2RybV9kcF9saW5r ICpsaW5rKQ0KK3sNCisJdTggdmFsdWVzWzNdOw0KKwlpbnQgZXJyOw0KKw0KKwltZW1zZXQobGlu aywgMCwgc2l6ZW9mKCpsaW5rKSk7DQorDQorCWVyciA9IGRybV9kcF9kcGNkX3JlYWQoYXV4LCBE UF9EUENEX1JFViwgdmFsdWVzLCBzaXplb2YodmFsdWVzKSk7DQorCWlmIChlcnIgPCAwKQ0KKwkJ cmV0dXJuIGVycjsNCisNCisJbGluay0+cmV2aXNpb24gPSB2YWx1ZXNbMF07DQorCWxpbmstPnJh dGUgPSBkcm1fZHBfYndfY29kZV90b19saW5rX3JhdGUodmFsdWVzWzFdKTsNCisJbGluay0+bnVt X2xhbmVzID0gdmFsdWVzWzJdICYgRFBfTUFYX0xBTkVfQ09VTlRfTUFTSzsNCisNCisJaWYgKHZh bHVlc1syXSAmIERQX0VOSEFOQ0VEX0ZSQU1FX0NBUCkNCisJCWxpbmstPmNhcGFiaWxpdGllcyA9 IDE7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IGl0NjUwNV9kcm1fZHBfbGlu a19wb3dlcl91cChzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LA0KKwkJCQkgICAgICAgc3RydWN0IGl0 NjUwNV9kcm1fZHBfbGluayAqbGluaykNCit7DQorCXU4IHZhbHVlOw0KKwlpbnQgZXJyOw0KKw0K KwkvKiBEUF9TRVRfUE9XRVIgcmVnaXN0ZXIgaXMgb25seSBhdmFpbGFibGUgb24gRFBDRCB2MS4x IGFuZCBsYXRlciAqLw0KKwlpZiAobGluay0+cmV2aXNpb24gPCAweDExKQ0KKwkJcmV0dXJuIDA7 DQorDQorCWVyciA9IGRybV9kcF9kcGNkX3JlYWRiKGF1eCwgRFBfU0VUX1BPV0VSLCAmdmFsdWUp Ow0KKwlpZiAoZXJyIDwgMCkNCisJCXJldHVybiBlcnI7DQorDQorCXZhbHVlICY9IH5EUF9TRVRf UE9XRVJfTUFTSzsNCisJdmFsdWUgfD0gRFBfU0VUX1BPV0VSX0QwOw0KKw0KKwllcnIgPSBkcm1f ZHBfZHBjZF93cml0ZWIoYXV4LCBEUF9TRVRfUE9XRVIsIHZhbHVlKTsNCisJaWYgKGVyciA8IDAp DQorCQlyZXR1cm4gZXJyOw0KKw0KKwkvKg0KKwkgKiBBY2NvcmRpbmcgdG8gdGhlIERQIDEuMSBz cGVjaWZpY2F0aW9uLCBhICJTaW5rIERldmljZSBtdXN0IGV4aXQgdGhlDQorCSAqIHBvd2VyIHNh dmluZyBzdGF0ZSB3aXRoaW4gMSBtcyIgKFNlY3Rpb24gMi41LjMuMSwgVGFibGUgNS01MiwgIlNp bmsNCisJICogQ29udHJvbCBGaWVsZCIgKHJlZ2lzdGVyIDB4NjAwKS4NCisJICovDQorCXVzbGVl cF9yYW5nZSgxMDAwLCAyMDAwKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2b2lk IGl0NjUwNV9jbGVhcl9pbnQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJaXQ2NTA1X3dy aXRlKGl0NjUwNSwgUkVHX0JBTktfU0VMLCAweDAwKTsNCisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwg SU5UX1NUQVRVU18wMSwgMHhGRik7DQorCWl0NjUwNV93cml0ZShpdDY1MDUsIElOVF9TVEFUVVNf MDIsIDB4RkYpOw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBJTlRfU1RBVFVTXzAzLCAweEZGKTsN Cit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X2ludF9tYXNrX2VuYWJsZShzdHJ1Y3QgaXQ2NTA1 ICppdDY1MDUpDQorew0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQkFOS19TRUwsIDB4MDAp Ow0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBJTlRfTUFTS18wMSwgMHgxRik7DQorCWl0NjUwNV93 cml0ZShpdDY1MDUsIElOVF9NQVNLXzAyLCAweDA3KTsNCisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwg SU5UX01BU0tfMDMsIDB4QjApOw0KK30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVfaW50X21hc2tf ZGlzYWJsZShzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1 LCBSRUdfQkFOS19TRUwsIDB4MDApOw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBJTlRfTUFTS18w MSwgMHgwMCk7DQorCWl0NjUwNV93cml0ZShpdDY1MDUsIElOVF9NQVNLXzAyLCAweDAwKTsNCisJ aXQ2NTA1X3dyaXRlKGl0NjUwNSwgSU5UX01BU0tfMDMsIDB4MDApOw0KK30NCisNCitzdGF0aWMg dm9pZCBpdDY1MDVfbGFuZV90ZXJtaW5hdGlvbl9vbihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQor ew0KKwlpbnQgcmVnY2Y7DQorDQorCXJlZ2NmID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBSRUdfVVNF Ul9EUlZfUFJFKTsNCisNCisJaWYgKHJlZ2NmID09IDB4RjApDQorCQlpdDY1MDVfc2V0X2JpdHMo aXQ2NTA1LCBSRUdfRFJWX0xOX0RBVEFfU0VMLCAweDgwLCAweDAwKTsNCisNCisJaWYgKHJlZ2Nm ID09IDB4NzApIHsNCisJCWlmIChpdDY1MDUtPmxhbmVfc3dhcCkgew0KKwkJCXN3aXRjaCAoaXQ2 NTA1LT5sYW5lX2NvdW50KSB7DQorCQkJY2FzZSAxOg0KKwkJCWNhc2UgMjoNCisJCQkJaXQ2NTA1 X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RSVl9MTl9EQVRBX1NFTCwNCisJCQkJCQkweDBDLCAweDA4 KTsNCisJCQkJYnJlYWs7DQorCQkJZGVmYXVsdDoNCisJCQkJaXQ2NTA1X3NldF9iaXRzKGl0NjUw NSwgUkVHX0RSVl9MTl9EQVRBX1NFTCwNCisJCQkJCQkweDBDLCAweDBDKTsNCisJCQkJYnJlYWs7 DQorCQkJfQ0KKwkJfSBlbHNlIHsNCisJCQlzd2l0Y2ggKGl0NjUwNS0+bGFuZV9jb3VudCkgew0K KwkJCWNhc2UgMToNCisJCQljYXNlIDI6DQorCQkJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJF R19EUlZfTE5fREFUQV9TRUwsDQorCQkJCQkJMHgwQywgMHgwNCk7DQorCQkJCWJyZWFrOw0KKwkJ CWRlZmF1bHQ6DQorCQkJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19EUlZfTE5fREFUQV9T RUwsDQorCQkJCQkJMHgwQywgMHgwQyk7DQorCQkJCWJyZWFrOw0KKwkJCX0NCisJCX0NCisJfQ0K K30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVfbGFuZV90ZXJtaW5hdGlvbl9vZmYoc3RydWN0IGl0 NjUwNSAqaXQ2NTA1KQ0KK3sNCisJaW50IHJlZ2NmOw0KKw0KKwlyZWdjZiA9IGl0NjUwNV9yZWFk KGl0NjUwNSwgUkVHX1VTRVJfRFJWX1BSRSk7DQorDQorCWlmIChyZWdjZiA9PSAweEYwKQ0KKwkJ aXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RSVl9MTl9EQVRBX1NFTCwgMHg4MCwgMHg4MCk7 DQorDQorCWlmIChyZWdjZiA9PSAweDcwKQ0KKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVH X0RSVl9MTl9EQVRBX1NFTCwgMHgwQywgMHgwMCk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUw NV9sYW5lX3Bvd2VyX29uKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCWl0NjUwNV9zZXRf Yml0cyhpdDY1MDUsIFJFR19MSU5LX0RSViwgMHhGMSwNCisJCQkoaXQ2NTA1LT5sYW5lX3N3YXAg Pw0KKwkJCQkgR0VOTUFTSyg3LCA4IC0gaXQ2NTA1LT5sYW5lX2NvdW50KSA6DQorCQkJCSBHRU5N QVNLKDMgKyBpdDY1MDUtPmxhbmVfY291bnQsIDQpKSB8DQorCQkJCTB4MDEpOw0KK30NCisNCitz dGF0aWMgdm9pZCBpdDY1MDVfbGFuZV9wb3dlcl9vZmYoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0K K3sNCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0xJTktfRFJWLCAweEYwLCAweDAwKTsN Cit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X2xhbmVfb2ZmKHN0cnVjdCBpdDY1MDUgKml0NjUw NSkNCit7DQorCWl0NjUwNV9sYW5lX3Bvd2VyX29mZihpdDY1MDUpOw0KKwlpdDY1MDVfbGFuZV90 ZXJtaW5hdGlvbl9vZmYoaXQ2NTA1KTsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X2F1eF90 ZXJtaW5hdGlvbl9vbihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlpbnQgcmVnY2Y7DQor DQorCXJlZ2NmID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBSRUdfVVNFUl9EUlZfUFJFKTsNCisNCisJ aWYgKHJlZ2NmID09IDB4RjApDQorCQlpdDY1MDVfbGFuZV90ZXJtaW5hdGlvbl9vbihpdDY1MDUp Ow0KKw0KKwlpZiAocmVnY2YgPT0gMHg3MCkNCisJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJF R19EUlZfTE5fREFUQV9TRUwsIDB4ODAsIDB4ODApOw0KK30NCisNCitzdGF0aWMgdm9pZCBpdDY1 MDVfYXV4X3Bvd2VyX29uKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCWl0NjUwNV9zZXRf Yml0cyhpdDY1MDUsIFJFR19BVVgsIDB4MDIsIDB4MDIpOw0KK30NCisNCitzdGF0aWMgdm9pZCBp dDY1MDVfYXV4X29uKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCWl0NjUwNV9hdXhfcG93 ZXJfb24oaXQ2NTA1KTsNCisJaXQ2NTA1X2F1eF90ZXJtaW5hdGlvbl9vbihpdDY1MDUpOw0KK30N CisNCitzdGF0aWMgdm9pZCBpdDY1MDVfYXV4X3Jlc2V0KHN0cnVjdCBpdDY1MDUgKml0NjUwNSkN Cit7DQorCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19SRVNFVF9DVFJMLCBBVVhfUkVTRVQs IEFVWF9SRVNFVCk7DQorCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19SRVNFVF9DVFJMLCBB VVhfUkVTRVQsIDB4MDApOw0KK30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVfcmVzZXRfbG9naWMo c3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJcmVnbWFwX3dyaXRlKGl0NjUwNS0+cmVnbWFw LCBSRUdfUkVTRVRfQ1RSTCwgQUxMX0xPR0lDX1JFU0VUKTsNCisJdXNsZWVwX3JhbmdlKDEwMDAs IDE1MDApOw0KK30NCisNCitzdGF0aWMgYm9vbCBpdDY1MDVfYXV4X29wX2ZpbmlzaGVkKHN0cnVj dCBpdDY1MDUgKml0NjUwNSkNCit7DQorCWludCByZWcyYiA9IGl0NjUwNV9yZWFkKGl0NjUwNSwg UkVHX0FVWF9DTURfUkVRKTsNCisNCisJaWYgKHJlZzJiIDwgMCkNCisJCXJldHVybiBmYWxzZTsN CisNCisJcmV0dXJuIChyZWcyYiAmIEFVWF9CVVNZKSA9PSAwOw0KK30NCisNCitzdGF0aWMgaW50 IGl0NjUwNV9hdXhfd2FpdChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlpbnQgc3RhdHVz Ow0KKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1 MDUtPmNsaWVudC0+ZGV2Ow0KKw0KKwl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZp ZXMoQVVYX1dBSVRfVElNRU9VVF9NUykgKyAxOw0KKw0KKwl3aGlsZSAoIWl0NjUwNV9hdXhfb3Bf ZmluaXNoZWQoaXQ2NTA1KSkgew0KKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkp IHsNCisJCQlEUk1fREVWX0VSUk9SKGRldiwgIlRpbWVkIG91dCB3YWl0aW5nIEFVWCB0byBmaW5p c2giKTsNCisJCQlyZXR1cm4gLUVUSU1FRE9VVDsNCisJCX0NCisJCXVzbGVlcF9yYW5nZSgxMDAw LCAyMDAwKTsNCisJfQ0KKw0KKwlzdGF0dXMgPSBpdDY1MDVfcmVhZChpdDY1MDUsIFJFR19BVVhf RVJST1JfU1RTKTsNCisJaWYgKHN0YXR1cyA8IDApIHsNCisJCURSTV9ERVZfRVJST1IoZGV2LCAi RmFpbGVkIHRvIHJlYWQgQVVYIGNoYW5uZWw6ICVkIiwgc3RhdHVzKTsNCisJCXJldHVybiBzdGF0 dXM7DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBzc2l6ZV90IGl0NjUwNV9h dXhfb3BlcmF0aW9uKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwNCisJCQkJICAgIGVudW0gYXV4X2Nt ZF90eXBlIGNtZCwNCisJCQkJICAgIHVuc2lnbmVkIGludCBhZGRyZXNzLCB1OCAqYnVmZmVyLA0K KwkJCQkgICAgc2l6ZV90IHNpemUsIGVudW0gYXV4X2NtZF9yZXBseSAqcmVwbHkpDQorew0KKwlp bnQgaSwgcmV0Ow0KKwlib29sIGF1eF93cml0ZV9jaGVjayA9IGZhbHNlOw0KKw0KKwlpZiAoIWl0 NjUwNV9nZXRfc2lua19ocGRfc3RhdHVzKGl0NjUwNSkpDQorCQlyZXR1cm4gLUVJTzsNCisNCisJ Lyogc2V0IEFVWCB1c2VyIG1vZGUgKi8NCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0FV WF9DVFJMLCBBVVhfVVNFUl9NT0RFLCBBVVhfVVNFUl9NT0RFKTsNCisNCithdXhfb3Bfc3RhcnQ6 DQorCWlmIChjbWQgPT0gQ01EX0FVWF9JMkNfRURJRF9SRUFEKSB7DQorCQkvKiBBVVggRURJRCBG SUZPIGhhcyBtYXggbGVuZ3RoIG9mIEFVWF9GSUZPX01BWF9TSVpFIGJ5dGVzLiAqLw0KKwkJc2l6 ZSA9IG1pbl90KHNpemVfdCwgc2l6ZSwgQVVYX0ZJRk9fTUFYX1NJWkUpOw0KKwkJLyogRW5hYmxl IEFVWCBGSUZPIHJlYWQgYmFjayBhbmQgY2xlYXIgRklGTyAqLw0KKwkJaXQ2NTA1X3NldF9iaXRz KGl0NjUwNSwgUkVHX0FVWF9DVFJMLA0KKwkJCQlBVVhfRU5fRklGT19SRUFEIHwgQ0xSX0VESURf RklGTywNCisJCQkJQVVYX0VOX0ZJRk9fUkVBRCB8IENMUl9FRElEX0ZJRk8pOw0KKw0KKwkJaXQ2 NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0FVWF9DVFJMLA0KKwkJCQlBVVhfRU5fRklGT19SRUFE IHwgQ0xSX0VESURfRklGTywNCisJCQkJQVVYX0VOX0ZJRk9fUkVBRCk7DQorCX0gZWxzZSB7DQor CQkvKiBUaGUgRFAgQVVYIHRyYW5zbWl0IGJ1ZmZlciBoYXMgNCBieXRlcy4gKi8NCisJCXNpemUg PSBtaW5fdChzaXplX3QsIHNpemUsIDQpOw0KKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVH X0FVWF9DVFJMLCBBVVhfTk9fU0VHTUVOVF9XUiwNCisJCQkJQVVYX05PX1NFR01FTlRfV1IpOw0K Kwl9DQorDQorCS8qIFN0YXJ0IEFkZHJlc3NbNzowXSAqLw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1 LCBSRUdfQVVYX0FEUl8wXzcsIChhZGRyZXNzID4+IDApICYgMHhGRik7DQorCS8qIFN0YXJ0IEFk ZHJlc3NbMTU6OF0gKi8NCisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVWF9BRFJfOF8xNSwg KGFkZHJlc3MgPj4gOCkgJiAweEZGKTsNCisJLyogV3JpdGVOdW1bMzowXStTdGFydEFkclsxOTox Nl0gKi8NCisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVWF9BRFJfMTZfMTksDQorCQkgICAg ICgoYWRkcmVzcyA+PiAxNikgJiAweDBGKSB8ICgoc2l6ZSAtIDEpIDw8IDQpKTsNCisNCisJaWYg KGNtZCA9PSBDTURfQVVYX05BVElWRV9XUklURSkNCisJCXJlZ21hcF9idWxrX3dyaXRlKGl0NjUw NS0+cmVnbWFwLCBSRUdfQVVYX09VVF9EQVRBMCwgYnVmZmVyLA0KKwkJCQkgIHNpemUpOw0KKw0K KwkvKiBBdXggRmlyZSAqLw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVYX0NNRF9SRVEs IGNtZCk7DQorDQorCXJldCA9IGl0NjUwNV9hdXhfd2FpdChpdDY1MDUpOw0KKwlpZiAocmV0IDwg MCkNCisJCWdvdG8gYXV4X29wX2VycjsNCisNCisJcmV0ID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBS RUdfQVVYX0VSUk9SX1NUUyk7DQorCWlmIChyZXQgPCAwKQ0KKwkJZ290byBhdXhfb3BfZXJyOw0K Kw0KKwlzd2l0Y2ggKChyZXQgPj4gNikgJiAweDMpIHsNCisJY2FzZSAwOg0KKwkJKnJlcGx5ID0g UkVQTFlfQUNLOw0KKwkJYnJlYWs7DQorCWNhc2UgMToNCisJCSpyZXBseSA9IFJFUExZX0RFRkVS Ow0KKwkJcmV0ID0gLUVBR0FJTjsNCisJCWdvdG8gYXV4X29wX2VycjsNCisJY2FzZSAyOg0KKwkJ KnJlcGx5ID0gUkVQTFlfTkFDSzsNCisJCXJldCA9IC1FSU87DQorCQlnb3RvIGF1eF9vcF9lcnI7 DQorCWNhc2UgMzoNCisJCXJldCA9IC1FVElNRURPVVQ7DQorCQlnb3RvIGF1eF9vcF9lcnI7DQor CX0NCisNCisJLyogUmVhZCBiYWNrIE5hdGl2ZSBXcml0ZSBkYXRhICovDQorCWlmIChjbWQgPT0g Q01EX0FVWF9OQVRJVkVfV1JJVEUpIHsNCisJCWF1eF93cml0ZV9jaGVjayA9IHRydWU7DQorCQlj bWQgPSBDTURfQVVYX05BVElWRV9SRUFEOw0KKwkJZ290byBhdXhfb3Bfc3RhcnQ7DQorCX0NCisN CisJaWYgKGNtZCA9PSBDTURfQVVYX0kyQ19FRElEX1JFQUQpIHsNCisJCWZvciAoaSA9IDA7IGkg PCBzaXplOyBpKyspIHsNCisJCQlyZXQgPSBpdDY1MDVfcmVhZChpdDY1MDUsIFJFR19BVVhfREFU QV9GSUZPKTsNCisJCQlpZiAocmV0IDwgMCkNCisJCQkJZ290byBhdXhfb3BfZXJyOw0KKwkJCWJ1 ZmZlcltpXSA9IHJldDsNCisJCX0NCisJfSBlbHNlIHsNCisJCWZvciAoaSA9IDA7IGkgPCBzaXpl OyBpKyspIHsNCisJCQlyZXQgPSBpdDY1MDVfcmVhZChpdDY1MDUsIFJFR19BVVhfREFUQV8wXzcg KyBpKTsNCisJCQlpZiAocmV0IDwgMCkNCisJCQkJZ290byBhdXhfb3BfZXJyOw0KKw0KKwkJCWlm IChhdXhfd3JpdGVfY2hlY2sgJiYgYnVmZmVyW3NpemUgLSAxIC0gaV0gIT0gcmV0KSB7DQorCQkJ CXJldCA9IC1FSU5WQUw7DQorCQkJCWdvdG8gYXV4X29wX2VycjsNCisJCQl9DQorDQorCQkJYnVm ZmVyW3NpemUgLSAxIC0gaV0gPSByZXQ7DQorCQl9DQorCX0NCisNCisJcmV0ID0gaTsNCisNCith dXhfb3BfZXJyOg0KKwlpZiAoY21kID09IENNRF9BVVhfSTJDX0VESURfUkVBRCkgew0KKwkJLyog Y2xlYXIgQVVYIEZJRk8gKi8NCisJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19BVVhfQ1RS TCwNCisJCQkJQVVYX0VOX0ZJRk9fUkVBRCB8IENMUl9FRElEX0ZJRk8sDQorCQkJCUFVWF9FTl9G SUZPX1JFQUQgfCBDTFJfRURJRF9GSUZPKTsNCisJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJF R19BVVhfQ1RSTCwNCisJCQkJQVVYX0VOX0ZJRk9fUkVBRCB8IENMUl9FRElEX0ZJRk8sIDB4MDAp Ow0KKwl9DQorDQorCS8qIExlYXZlIEFVWCB1c2VyIG1vZGUgKi8NCisJaXQ2NTA1X3NldF9iaXRz KGl0NjUwNSwgUkVHX0FVWF9DVFJMLCBBVVhfVVNFUl9NT0RFLCAwKTsNCisNCisJcmV0dXJuIHJl dDsNCit9DQorDQorc3RhdGljIHNzaXplX3QgaXQ2NTA1X2F1eF9kb190cmFuc2ZlcihzdHJ1Y3Qg aXQ2NTA1ICppdDY1MDUsDQorCQkJCSAgICAgIGVudW0gYXV4X2NtZF90eXBlIGNtZCwNCisJCQkJ ICAgICAgdW5zaWduZWQgaW50IGFkZHJlc3MsIHU4ICpidWZmZXIsDQorCQkJCSAgICAgIHNpemVf dCBzaXplLCBlbnVtIGF1eF9jbWRfcmVwbHkgKnJlcGx5KQ0KK3sNCisJaW50IGksIHJldF9zaXpl LCByZXQgPSAwLCByZXF1ZXN0X3NpemU7DQorDQorCW11dGV4X2xvY2soJml0NjUwNS0+YXV4X2xv Y2spOw0KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSArPSA0KSB7DQorCQlyZXF1ZXN0X3NpemUg PSBtaW4oKGludClzaXplIC0gaSwgNCk7DQorCQlyZXRfc2l6ZSA9IGl0NjUwNV9hdXhfb3BlcmF0 aW9uKGl0NjUwNSwgY21kLCBhZGRyZXNzICsgaSwNCisJCQkJCQlidWZmZXIgKyBpLCByZXF1ZXN0 X3NpemUsDQorCQkJCQkJcmVwbHkpOw0KKwkJaWYgKHJldF9zaXplIDwgMCkgew0KKwkJCXJldCA9 IHJldF9zaXplOw0KKwkJCWdvdG8gYXV4X29wX2VycjsNCisJCX0NCisNCisJCXJldCArPSByZXRf c2l6ZTsNCisJfQ0KKw0KK2F1eF9vcF9lcnI6DQorCW11dGV4X3VubG9jaygmaXQ2NTA1LT5hdXhf bG9jayk7DQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBzc2l6ZV90IGl0NjUwNV9hdXhf dHJhbnNmZXIoc3RydWN0IGRybV9kcF9hdXggKmF1eCwNCisJCQkJICAgc3RydWN0IGRybV9kcF9h dXhfbXNnICptc2cpDQorew0KKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBjb250YWluZXJfb2Yo YXV4LCBzdHJ1Y3QgaXQ2NTA1LCBhdXgpOw0KKwl1OCBjbWQ7DQorCWJvb2wgaXNfaTJjID0gISht c2ctPnJlcXVlc3QgJiBEUF9BVVhfTkFUSVZFX1dSSVRFKTsNCisJaW50IHJldDsNCisJZW51bSBh dXhfY21kX3JlcGx5IHJlcGx5Ow0KKw0KKwkvKiBJVDY1MDUgZG9lc24ndCBzdXBwb3J0IGFyYml0 cmFyeSBJMkMgcmVhZCAvIHdyaXRlLiAqLw0KKwlpZiAoaXNfaTJjKQ0KKwkJcmV0dXJuIC1FSU5W QUw7DQorDQorCXN3aXRjaCAobXNnLT5yZXF1ZXN0KSB7DQorCWNhc2UgRFBfQVVYX05BVElWRV9S RUFEOg0KKwkJY21kID0gQ01EX0FVWF9OQVRJVkVfUkVBRDsNCisJCWJyZWFrOw0KKwljYXNlIERQ X0FVWF9OQVRJVkVfV1JJVEU6DQorCQljbWQgPSBDTURfQVVYX05BVElWRV9XUklURTsNCisJCWJy ZWFrOw0KKwlkZWZhdWx0Og0KKwkJcmV0dXJuIC1FSU5WQUw7DQorCX0NCisNCisJcmV0ID0gaXQ2 NTA1X2F1eF9kb190cmFuc2ZlcihpdDY1MDUsIGNtZCwgbXNnLT5hZGRyZXNzLCBtc2ctPmJ1ZmZl ciwNCisJCQkJICAgICBtc2ctPnNpemUsICZyZXBseSk7DQorCWlmIChyZXQgPCAwKQ0KKwkJcmV0 dXJuIHJldDsNCisNCisJc3dpdGNoIChyZXBseSkgew0KKwljYXNlIFJFUExZX0FDSzoNCisJCW1z Zy0+cmVwbHkgPSBEUF9BVVhfTkFUSVZFX1JFUExZX0FDSzsNCisJCWJyZWFrOw0KKwljYXNlIFJF UExZX05BQ0s6DQorCQltc2ctPnJlcGx5ID0gRFBfQVVYX05BVElWRV9SRVBMWV9OQUNLOw0KKwkJ YnJlYWs7DQorCWNhc2UgUkVQTFlfREVGRVI6DQorCQltc2ctPnJlcGx5ID0gRFBfQVVYX05BVElW RV9SRVBMWV9ERUZFUjsNCisJCWJyZWFrOw0KKwl9DQorDQorCXJldHVybiByZXQ7DQorfQ0KKw0K K3N0YXRpYyBpbnQgaXQ2NTA1X2dldF9lZGlkX2Jsb2NrKHZvaWQgKmRhdGEsIHU4ICpidWYsIHVu c2lnbmVkIGludCBibG9jaywNCisJCQkJIHNpemVfdCBsZW4pDQorew0KKwlzdHJ1Y3QgaXQ2NTA1 ICppdDY1MDUgPSBkYXRhOw0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQt PmRldjsNCisJZW51bSBhdXhfY21kX3JlcGx5IHJlcGx5Ow0KKwlpbnQgb2Zmc2V0LCByZXQsIGF1 eF9yZXRyeSA9IDEwMDsNCisNCisJaXQ2NTA1X2F1eF9yZXNldChpdDY1MDUpOw0KKwlEUk1fREVW X0RFQlVHX0RSSVZFUihkZXYsICJibG9jayBudW1iZXIgPSAlZCIsIGJsb2NrKTsNCisNCisJZm9y IChvZmZzZXQgPSAwOyBvZmZzZXQgPCBFRElEX0xFTkdUSDspIHsNCisJCXJldCA9IGl0NjUwNV9h dXhfZG9fdHJhbnNmZXIoaXQ2NTA1LCBDTURfQVVYX0kyQ19FRElEX1JFQUQsDQorCQkJCQkgICAg IGJsb2NrICogRURJRF9MRU5HVEggKyBvZmZzZXQsDQorCQkJCQkgICAgIGJ1ZiArIG9mZnNldCwg OCwgJnJlcGx5KTsNCisNCisJCWlmIChyZXQgPCAwICYmIHJldCAhPSAtRUFHQUlOKQ0KKwkJCXJl dHVybiByZXQ7DQorDQorCQlzd2l0Y2ggKHJlcGx5KSB7DQorCQljYXNlIFJFUExZX0FDSzoNCisJ CQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJbMHglMDJ4XTogJThwaCIsIG9mZnNldCwNCisJ CQkJCSAgICAgYnVmICsgb2Zmc2V0KTsNCisJCQlvZmZzZXQgKz0gODsNCisJCQlhdXhfcmV0cnkg PSAxMDA7DQorCQkJYnJlYWs7DQorCQljYXNlIFJFUExZX05BQ0s6DQorCQkJcmV0dXJuIC1FSU87 DQorCQljYXNlIFJFUExZX0RFRkVSOg0KKwkJCW1zbGVlcCgyMCk7DQorCQkJaWYgKCEoLS1hdXhf cmV0cnkpKQ0KKwkJCQlyZXR1cm4gLUVJTzsNCisJCX0NCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9 DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X3ZhcmlhYmxlX2NvbmZpZyhzdHJ1Y3QgaXQ2NTA1ICpp dDY1MDUpDQorew0KKwlpdDY1MDUtPmxpbmtfcmF0ZV9id19jb2RlID0gSEJSOw0KKwlpdDY1MDUt PmxhbmVfY291bnQgPSBNQVhfTEFORV9DT1VOVDsNCisJaXQ2NTA1LT5saW5rX3N0YXRlID0gTElO S19JRExFOw0KKwlpdDY1MDUtPmhkY3BfZGVzaXJlZCA9IEhEQ1BfREVTSVJFRDsNCisJaXQ2NTA1 LT5hdXRvX3RyYWluX3JldHJ5ID0gQVVUT19UUkFJTl9SRVRSWTsNCisJaXQ2NTA1LT5hdWRpby5z ZWxlY3QgPSBBVURJT19TRUxFQ1Q7DQorCWl0NjUwNS0+YXVkaW8uc2FtcGxlX3JhdGUgPSBBVURJ T19TQU1QTEVfUkFURTsNCisJaXQ2NTA1LT5hdWRpby5jaGFubmVsX2NvdW50ID0gQVVESU9fQ0hB Tk5FTF9DT1VOVDsNCisJaXQ2NTA1LT5hdWRpby50eXBlID0gQVVESU9fVFlQRTsNCisJaXQ2NTA1 LT5hdWRpby5pMnNfaW5wdXRfZm9ybWF0ID0gSTJTX0lOUFVUX0ZPUk1BVDsNCisJaXQ2NTA1LT5h dWRpby5pMnNfanVzdGlmaWVkID0gSTJTX0pVU1RJRklFRDsNCisJaXQ2NTA1LT5hdWRpby5pMnNf ZGF0YV9kZWxheSA9IEkyU19EQVRBX0RFTEFZOw0KKwlpdDY1MDUtPmF1ZGlvLmkyc193c19jaGFu bmVsID0gSTJTX1dTX0NIQU5ORUw7DQorCWl0NjUwNS0+YXVkaW8uaTJzX2RhdGFfc2VxdWVuY2Ug PSBJMlNfREFUQV9TRVFVRU5DRTsNCisJaXQ2NTA1LT5hdWRpby53b3JkX2xlbmd0aCA9IEFVRElP X1dPUkRfTEVOR1RIOw0KKwltZW1zZXQoaXQ2NTA1LT5zaGExX2lucHV0LCAwLCBzaXplb2YoaXQ2 NTA1LT5zaGExX2lucHV0KSk7DQorCW1lbXNldChpdDY1MDUtPmJrc3ZzLCAwLCBzaXplb2YoaXQ2 NTA1LT5ia3N2cykpOw0KK30NCisNCitzdGF0aWMgaW50IGl0NjUwNV9zZW5kX3ZpZGVvX2luZm9m cmFtZShzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUsDQorCQkJCSAgICAgICBzdHJ1Y3QgaGRtaV9hdmlf aW5mb2ZyYW1lICpmcmFtZSkNCit7DQorCXU4IGJ1ZmZlcltIRE1JX0lORk9GUkFNRV9IRUFERVJf U0laRSArIEhETUlfQVZJX0lORk9GUkFNRV9TSVpFXTsNCisJaW50IGVycjsNCisJc3RydWN0IGRl dmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQorDQorCWVyciA9IGhkbWlfYXZpX2lu Zm9mcmFtZV9wYWNrKGZyYW1lLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsNCisJaWYgKGVyciA8 IDApIHsNCisJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHBhY2sgQVZJIGluZm9mcmFt ZTogJWQiLCBlcnIpOw0KKwkJcmV0dXJuIGVycjsNCisJfQ0KKw0KKwllcnIgPSBpdDY1MDVfc2V0 X2JpdHMoaXQ2NTA1LCBSRUdfSU5GT0ZSQU1FX0NUUkwsIEVOX0FWSV9QS1QsIDB4MDApOw0KKwlp ZiAoZXJyKQ0KKwkJcmV0dXJuIGVycjsNCisNCisJZXJyID0gcmVnbWFwX2J1bGtfd3JpdGUoaXQ2 NTA1LT5yZWdtYXAsIFJFR19BVklfSU5GT19EQjEsDQorCQkJCWJ1ZmZlciArIEhETUlfSU5GT0ZS QU1FX0hFQURFUl9TSVpFLA0KKwkJCQlmcmFtZS0+bGVuZ3RoKTsNCisJaWYgKGVycikNCisJCXJl dHVybiBlcnI7DQorDQorCWVyciA9IGl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19JTkZPRlJB TUVfQ1RSTCwgRU5fQVZJX1BLVCwNCisJCQkgICAgICBFTl9BVklfUEtUKTsNCisJaWYgKGVycikN CisJCXJldHVybiBlcnI7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgdm9pZCBpdDY1 MDVfZ2V0X2V4dGNvbl9wcm9wZXJ0eShzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlpbnQg ZXJyOw0KKwl1bmlvbiBleHRjb25fcHJvcGVydHlfdmFsdWUgcHJvcGVydHk7DQorCXN0cnVjdCBk ZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKw0KKwlpZiAoaXQ2NTA1LT5leHRj b24gJiYgIWl0NjUwNS0+bGFuZV9zd2FwX2Rpc2FibGVkKSB7DQorCQllcnIgPSBleHRjb25fZ2V0 X3Byb3BlcnR5KGl0NjUwNS0+ZXh0Y29uLCBFWFRDT05fRElTUF9EUCwNCisJCQkJCSAgRVhUQ09O X1BST1BfVVNCX1RZUEVDX1BPTEFSSVRZLA0KKwkJCQkJICAmcHJvcGVydHkpOw0KKwkJaWYgKGVy cikgew0KKwkJCURSTV9ERVZfRVJST1IoZGV2LCAiZ2V0IHByb3BlcnR5IGZhaWwhIik7DQorCQkJ cmV0dXJuOw0KKwkJfQ0KKwkJaXQ2NTA1LT5sYW5lX3N3YXAgPSBwcm9wZXJ0eS5pbnR2YWw7DQor CX0NCit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X2Nsa19waGFzZV9hZGp1c3RtZW50KHN0cnVj dCBpdDY1MDUgKml0NjUwNSwNCisJCQkJCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpt b2RlKQ0KK3sNCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0NMS19DVFJMMCwgTV9QQ0xL X0RFTEFZLA0KKwkJbW9kZS0+Y2xvY2sgPCBBREpVU1RfUEhBU0VfVEhSRVNIT0xEID8gUElYRUxf Q0xLX0RFTEFZIDogMCk7DQorCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19EQVRBX0NUUkww LCBWSURFT19MQVRDSF9FREdFLA0KKwkJCVBJWEVMX0NMS19JTlZFUlNFIDw8IDQpOw0KK30NCisN CitzdGF0aWMgdm9pZCBpdDY1MDVfaW5pdChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlp dDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQkFOS19TRUwsIDB4MDApOw0KKwlpdDY1MDVfd3JpdGUo aXQ2NTA1LCBSRUdfQVVYX09QVCwgQVVYX0FVVE9fUlNUIHwgQVVYX0ZJWF9GUkVRKTsNCisJaXQ2 NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVWF9DVFJMLCBBVVhfTk9fU0VHTUVOVF9XUik7DQorCWl0 NjUwNV93cml0ZShpdDY1MDUsIFJFR19IRENQX0NUUkwyLCBIRENQX0FOX1NFTCB8IEhEQ1BfSFdf SFBESVJRX0FDVCk7DQorCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19WSURfQlVTX0NUUkwwLCBJ Tl9ERFIgfCBERFJfQ0QpOw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfVklEX0JVU19DVFJM MSwgMHgwMSk7DQorCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURJT19DVFJMMCwgQVVESU9f MTZCX0JPVU5EKTsNCisNCisJLyogY2hpcCBpbnRlcm5hbCBzZXR0aW5nLCBkb24ndCBtb2RpZnkg Ki8NCisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0hQRF9JUlFfVElNRSwgMHhGNSk7DQorCWl0 NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVVhfREVCVUdfTU9ERSwgMHg0RCk7DQorCWl0NjUwNV93 cml0ZShpdDY1MDUsIFJFR19BVVhfT1BUMiwgMHgxNyk7DQorCWl0NjUwNV93cml0ZShpdDY1MDUs IFJFR19IRENQX09QVCwgMHg2MCk7DQorCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19EQVRBX01V VEVfQ1RSTCwNCisJCSAgICAgRU5fVklEX01VVEUgfCBFTl9BVURfTVVURSB8IEVOQUJMRV9BVVRP X1ZJREVPX0ZJRk9fUkVTRVQpOw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfVElNRV9TVE1Q X0NUUkwsDQorCQkgICAgIEVOX1NTQ19HQVQgfCBFTl9FTkhBTkNFX1ZJRF9TVE1QIHwgRU5fRU5I QU5DRV9BVURfU1RNUCk7DQorCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19JTkZPRlJBTUVfQ1RS TCwgMHgwMCk7DQorCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19CQU5LX1NFTCwgMHgwMSk7DQor CWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19EUlZfMF9EQl84MDBfTVYsDQorCQkgICAgIGFmZV9z ZXR0aW5nX3RhYmxlW2l0NjUwNS0+YWZlX3NldHRpbmddWzBdKTsNCisJaXQ2NTA1X3dyaXRlKGl0 NjUwNSwgUkVHX1BSRV8wX0RCXzgwMF9NViwNCisJCSAgICAgYWZlX3NldHRpbmdfdGFibGVbaXQ2 NTA1LT5hZmVfc2V0dGluZ11bMV0pOw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfUFJFXzNQ NV9EQl84MDBfTVYsDQorCQkgICAgIGFmZV9zZXR0aW5nX3RhYmxlW2l0NjUwNS0+YWZlX3NldHRp bmddWzJdKTsNCisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX1NTQ19DVFJMMCwgMHg5RSk7DQor CWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19TU0NfQ1RSTDEsIDB4MUMpOw0KKwlpdDY1MDVfd3Jp dGUoaXQ2NTA1LCBSRUdfU1NDX0NUUkwyLCAweDQyKTsNCisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwg UkVHX0JBTktfU0VMLCAweDAwKTsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X3ZpZGVvX2Rp c2FibGUoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUw NSwgUkVHX0RBVEFfTVVURV9DVFJMLCBFTl9WSURfTVVURSwgRU5fVklEX01VVEUpOw0KKwlpdDY1 MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfSU5GT0ZSQU1FX0NUUkwsIEVOX1ZJRF9DVFJMX1BLVCwg MHgwMCk7DQorCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19SRVNFVF9DVFJMLCBWSURFT19S RVNFVCwgVklERU9fUkVTRVQpOw0KK30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVfdmlkZW9fcmVz ZXQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwg UkVHX0RBVEFfTVVURV9DVFJMLCBFTl9WSURfTVVURSwgRU5fVklEX01VVEUpOw0KKwlpdDY1MDVf c2V0X2JpdHMoaXQ2NTA1LCBSRUdfSU5GT0ZSQU1FX0NUUkwsIEVOX1ZJRF9DVFJMX1BLVCwgMHgw MCk7DQorCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19SRVNFVF9DVFJMLCBWSURFT19SRVNF VCwgVklERU9fUkVTRVQpOw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfNTAxX0ZJRk9f Q1RSTCwgUlNUXzUwMV9GSUZPLCBSU1RfNTAxX0ZJRk8pOw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2 NTA1LCBSRUdfNTAxX0ZJRk9fQ1RSTCwgUlNUXzUwMV9GSUZPLCAweDAwKTsNCisJaXQ2NTA1X3Nl dF9iaXRzKGl0NjUwNSwgUkVHX1JFU0VUX0NUUkwsIFZJREVPX1JFU0VULCAweDAwKTsNCit9DQor DQorc3RhdGljIHZvaWQgaXQ2NTA1X3VwZGF0ZV92aWRlb19wYXJhbWV0ZXIoc3RydWN0IGl0NjUw NSAqaXQ2NTA1LA0KKwkJCQkJICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkN Cit7DQorCWl0NjUwNV9jbGtfcGhhc2VfYWRqdXN0bWVudChpdDY1MDUsIG1vZGUpOw0KKwlpdDY1 MDVfdmlkZW9fZGlzYWJsZShpdDY1MDUpOw0KK30NCisNCitzdGF0aWMgYm9vbCBpdDY1MDVfYXVk aW9faW5wdXQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJaW50IHJlZzA1LCByZWdiZTsN CisNCisJcmVnMDUgPSBpdDY1MDVfcmVhZChpdDY1MDUsIFJFR19SRVNFVF9DVFJMKTsNCisJaXQ2 NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1JFU0VUX0NUUkwsIEFVRElPX1JFU0VULCAweDAwKTsN CisJdXNsZWVwX3JhbmdlKDMwMDAsIDQwMDApOw0KKwlyZWdiZSA9IGl0NjUwNV9yZWFkKGl0NjUw NSwgUkVHX0FVRElPX0lOUFVUX0ZSRVEpOw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfUkVT RVRfQ1RSTCwgcmVnMDUpOw0KKw0KKwlyZXR1cm4gcmVnYmUgIT0gMHhGRjsNCit9DQorDQorc3Rh dGljIHZvaWQgaXQ2NTA1X3NldHVwX2F1ZGlvX2NoYW5uZWxfc3RhdHVzKHN0cnVjdCBpdDY1MDUg Kml0NjUwNSkNCit7DQorCWVudW0gaXQ2NTA1X2F1ZGlvX3NhbXBsZV9yYXRlIHNhbXBsZV9yYXRl ID0gaXQ2NTA1LT5hdWRpby5zYW1wbGVfcmF0ZTsNCisJdTggYXVkaW9fd29yZF9sZW5ndGhfbWFw W10gPSB7IDB4MDIsIDB4MDQsIDB4MDMsIDB4MEIgfTsNCisNCisJLyogQ2hhbm5lbCBTdGF0dXMg Ki8NCisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0lFQzk1OF9TVFMwLCBpdDY1MDUtPmF1ZGlv LnR5cGUgPDwgMSk7DQorCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19JRUM5NThfU1RTMSwgMHgw MCk7DQorCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19JRUM5NThfU1RTMiwgMHgwMCk7DQorCWl0 NjUwNV93cml0ZShpdDY1MDUsIFJFR19JRUM5NThfU1RTMywgc2FtcGxlX3JhdGUpOw0KKwlpdDY1 MDVfd3JpdGUoaXQ2NTA1LCBSRUdfSUVDOTU4X1NUUzQsICh+c2FtcGxlX3JhdGUgPDwgNCkgfA0K KwkJICAgICBhdWRpb193b3JkX2xlbmd0aF9tYXBbaXQ2NTA1LT5hdWRpby53b3JkX2xlbmd0aF0p Ow0KK30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVfc2V0dXBfYXVkaW9fZm9ybWF0KHN0cnVjdCBp dDY1MDUgKml0NjUwNSkNCit7DQorCS8qIEkyUyBNT0RFICovDQorCWl0NjUwNV93cml0ZShpdDY1 MDUsIFJFR19BVURJT19GTVQsDQorCQkgICAgIChpdDY1MDUtPmF1ZGlvLndvcmRfbGVuZ3RoIDw8 IDUpIHwNCisJCSAgICAgKGl0NjUwNS0+YXVkaW8uaTJzX2RhdGFfc2VxdWVuY2UgPDwgNCkgfA0K KwkJICAgICAoaXQ2NTA1LT5hdWRpby5pMnNfd3NfY2hhbm5lbCA8PCAzKSB8DQorCQkgICAgIChp dDY1MDUtPmF1ZGlvLmkyc19kYXRhX2RlbGF5IDw8IDIpIHwNCisJCSAgICAgKGl0NjUwNS0+YXVk aW8uaTJzX2p1c3RpZmllZCA8PCAxKSB8DQorCQkgICAgIGl0NjUwNS0+YXVkaW8uaTJzX2lucHV0 X2Zvcm1hdCk7DQorCWlmIChpdDY1MDUtPmF1ZGlvLnNlbGVjdCA9PSBTUERJRikgew0KKwkJaXQ2 NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRElPX0ZJRk9fU0VMLCAweDAwKTsNCisJCS8qIDB4MzAg PSAxMjgqRlMgKi8NCisJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19BVVhfT1BULCAweEYw LCAweDMwKTsNCisJfSBlbHNlIHsNCisJCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURJT19G SUZPX1NFTCwgMHhFNCk7DQorCX0NCisNCisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRElP X0NUUkwwLCAweDIwKTsNCisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRElPX0NUUkwxLCAw eDAwKTsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X2VuYWJsZV9hdWRpb19zb3VyY2Uoc3Ry dWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJdW5zaWduZWQgaW50IGF1ZGlvX3NvdXJjZV9jb3Vu dDsNCisNCisJYXVkaW9fc291cmNlX2NvdW50ID0gQklUKERJVl9ST1VORF9VUChpdDY1MDUtPmF1 ZGlvLmNoYW5uZWxfY291bnQsIDIpKQ0KKwkJCQkgLSAxOw0KKw0KKwlhdWRpb19zb3VyY2VfY291 bnQgfD0gaXQ2NTA1LT5hdWRpby5zZWxlY3QgPDwgNDsNCisNCisJaXQ2NTA1X3dyaXRlKGl0NjUw NSwgUkVHX0FVRElPX1NSQ19DVFJMLCBhdWRpb19zb3VyY2VfY291bnQpOw0KK30NCisNCitzdGF0 aWMgdm9pZCBpdDY1MDVfZW5hYmxlX2F1ZGlvX2luZm9mcmFtZShzdHJ1Y3QgaXQ2NTA1ICppdDY1 MDUpDQorew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisJ dTggYXVkaW9faW5mb19jYVtdID0geyAweDAwLCAweDAwLCAweDAxLCAweDAzLCAweDA3LCAweDBC LCAweDBGLCAweDFGIH07DQorDQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImluZm9mcmFt ZSBjaGFubmVsX2FsbG9jYXRpb246MHglMDJ4IiwNCisJCQkgICAgIGF1ZGlvX2luZm9fY2FbaXQ2 NTA1LT5hdWRpby5jaGFubmVsX2NvdW50IC0gMV0pOw0KKw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1 LCBSRUdfQVVEX0lORk9GUkFNX0RCMSwgaXQ2NTA1LT5hdWRpby5jaGFubmVsX2NvdW50DQorCQkg ICAgIC0gMSk7DQorCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURfSU5GT0ZSQU1fREIyLCAw eDAwKTsNCisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRF9JTkZPRlJBTV9EQjMsDQorCQkg ICAgIGF1ZGlvX2luZm9fY2FbaXQ2NTA1LT5hdWRpby5jaGFubmVsX2NvdW50IC0gMV0pOw0KKwlp dDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVEX0lORk9GUkFNX0RCNCwgMHgwMCk7DQorCWl0NjUw NV93cml0ZShpdDY1MDUsIFJFR19BVURfSU5GT0ZSQU1fU1VNLCAweDAwKTsNCisNCisJLyogRW5h YmxlIEF1ZGlvIEluZm9GcmFtZSAqLw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfSU5G T0ZSQU1FX0NUUkwsIEVOX0FVRF9DVFJMX1BLVCwNCisJCQlFTl9BVURfQ1RSTF9QS1QpOw0KK30N CisNCitzdGF0aWMgdm9pZCBpdDY1MDVfZGlzYWJsZV9hdWRpbyhzdHJ1Y3QgaXQ2NTA1ICppdDY1 MDUpDQorew0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfREFUQV9NVVRFX0NUUkwsIEVO X0FVRF9NVVRFLCBFTl9BVURfTVVURSk7DQorCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19B VURJT19TUkNfQ1RSTCwgTV9BVURJT19JMlNfRU4sIDB4MDApOw0KKwlpdDY1MDVfc2V0X2JpdHMo aXQ2NTA1LCBSRUdfSU5GT0ZSQU1FX0NUUkwsIEVOX0FVRF9DVFJMX1BLVCwgMHgwMCk7DQorCWl0 NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19SRVNFVF9DVFJMLCBBVURJT19SRVNFVCwgQVVESU9f UkVTRVQpOw0KK30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVfZW5hYmxlX2F1ZGlvKHN0cnVjdCBp dDY1MDUgKml0NjUwNSkNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVu dC0+ZGV2Ow0KKwlpbnQgcmVnYmU7DQorDQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInN0 YXJ0Iik7DQorCWl0NjUwNV9kaXNhYmxlX2F1ZGlvKGl0NjUwNSk7DQorDQorCWl0NjUwNV9zZXR1 cF9hdWRpb19jaGFubmVsX3N0YXR1cyhpdDY1MDUpOw0KKwlpdDY1MDVfc2V0dXBfYXVkaW9fZm9y bWF0KGl0NjUwNSk7DQorCWl0NjUwNV9lbmFibGVfYXVkaW9fc291cmNlKGl0NjUwNSk7DQorCWl0 NjUwNV9lbmFibGVfYXVkaW9faW5mb2ZyYW1lKGl0NjUwNSk7DQorDQorCWl0NjUwNV93cml0ZShp dDY1MDUsIFJFR19BVURJT19OXzBfNywgMHgwMCk7DQorCWl0NjUwNV93cml0ZShpdDY1MDUsIFJF R19BVURJT19OXzhfMTUsIDB4ODApOw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVESU9f Tl8xNl8yMywgMHgwMCk7DQorDQorCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19BVURJT19T UkNfQ1RSTCwgQVVESU9fRklGT19SRVNFVCwNCisJCQlBVURJT19GSUZPX1JFU0VUKTsNCisJaXQ2 NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0FVRElPX1NSQ19DVFJMLCBBVURJT19GSUZPX1JFU0VU LCAweDAwKTsNCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1JFU0VUX0NUUkwsIEFVRElP X1JFU0VULCAweDAwKTsNCisJcmVnYmUgPSBpdDY1MDVfcmVhZChpdDY1MDUsIFJFR19BVURJT19J TlBVVF9GUkVRKTsNCisJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAicmVnYmU6MHglMDJ4IGF1 ZGlvIGlucHV0IGZzOiAlZC4lZCBrSHoiLA0KKwkJCSAgICAgcmVnYmUsIDY3NTAgLyByZWdiZSwg KDY3NTAgJSByZWdiZSkgKiAxMCAvIHJlZ2JlKTsNCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwg UkVHX0RBVEFfTVVURV9DVFJMLCBFTl9BVURfTVVURSwgMHgwMCk7DQorfQ0KKw0KK3N0YXRpYyBi b29sIGl0NjUwNV91c2Vfc3RlcF90cmFpbl9jaGVjayhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQor ew0KKwlpZiAoaXQ2NTA1LT5saW5rLnJldmlzaW9uID49IDB4MTIpDQorCQlyZXR1cm4gaXQ2NTA1 LT5kcGNkW0RQX1RSQUlOSU5HX0FVWF9SRF9JTlRFUlZBTF0gPj0gMHgwMTsNCisNCisJcmV0dXJu IHRydWU7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9wYXJzZV9saW5rX2NhcGFiaWxpdGll cyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2 NTA1LT5jbGllbnQtPmRldjsNCisJc3RydWN0IGl0NjUwNV9kcm1fZHBfbGluayAqbGluayA9ICZp dDY1MDUtPmxpbms7DQorCWludCBiY2FwczsNCisNCisJaWYgKGl0NjUwNS0+ZHBjZFswXSA9PSAw KSB7DQorCQlpdDY1MDVfYXV4X29uKGl0NjUwNSk7DQorCQlpdDY1MDVfZ2V0X2RwY2QoaXQ2NTA1 LCBEUF9EUENEX1JFViwgaXQ2NTA1LT5kcGNkLA0KKwkJCQlBUlJBWV9TSVpFKGl0NjUwNS0+ZHBj ZCkpOw0KKwl9DQorDQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIkRQQ0QgUmV2LjogJWQu JWQiLA0KKwkJCSAgICAgbGluay0+cmV2aXNpb24gPj4gNCwgbGluay0+cmV2aXNpb24gJiAweDBG KTsNCisNCisJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiU2luayBtYXggbGluayByYXRlOiAl ZC4lMDJkIEdicHMgcGVyIGxhbmUiLA0KKwkJCSAgICAgbGluay0+cmF0ZSAvIDEwMDAwMCwgbGlu ay0+cmF0ZSAvIDEwMDAgJSAxMDApOw0KKw0KKwlpdDY1MDUtPmxpbmtfcmF0ZV9id19jb2RlID0g ZHJtX2RwX2xpbmtfcmF0ZV90b19id19jb2RlKGxpbmstPnJhdGUpOw0KKwlEUk1fREVWX0RFQlVH X0RSSVZFUihkZXYsICJsaW5rIHJhdGUgYncgY29kZToweCUwMngiLA0KKwkJCSAgICAgaXQ2NTA1 LT5saW5rX3JhdGVfYndfY29kZSk7DQorCWl0NjUwNS0+bGlua19yYXRlX2J3X2NvZGUgPSBtaW4o KGludClpdDY1MDUtPmxpbmtfcmF0ZV9id19jb2RlLA0KKwkJCQkJTUFYX0xJTktfUkFURSk7DQor DQorCWl0NjUwNS0+bGFuZV9jb3VudCA9IGxpbmstPm51bV9sYW5lczsNCisJRFJNX0RFVl9ERUJV R19EUklWRVIoZGV2LCAiU2luayBzdXBwb3J0ICVkIGxhbmVzIHRyYWluaW5nIiwNCisJCQkgICAg IGl0NjUwNS0+bGFuZV9jb3VudCk7DQorCWl0NjUwNS0+bGFuZV9jb3VudCA9IG1pbigoaW50KWl0 NjUwNS0+bGFuZV9jb3VudCwgTUFYX0xBTkVfQ09VTlQpOw0KKw0KKwlpdDY1MDUtPmJyYW5jaF9k ZXZpY2UgPSBkcm1fZHBfaXNfYnJhbmNoKGl0NjUwNS0+ZHBjZCk7DQorCURSTV9ERVZfREVCVUdf RFJJVkVSKGRldiwgIlNpbmsgJXNicmFuY2ggZGV2aWNlIiwNCisJCQkgICAgIGl0NjUwNS0+YnJh bmNoX2RldmljZSA/ICIiIDogIk5vdCAiKTsNCisNCisJaXQ2NTA1LT5lbmFibGVfZW5oYW5jZWRf ZnJhbWUgPSAhIWxpbmstPmNhcGFiaWxpdGllczsNCisJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2 LCAiU2luayAlc1N1cHBvcnQgRW5oYW5jZWQgRnJhbWluZyIsDQorCQkJICAgICBpdDY1MDUtPmVu YWJsZV9lbmhhbmNlZF9mcmFtZSA/ICIiIDogIk5vdCAiKTsNCisNCisJaXQ2NTA1LT5lbmFibGVf c3NjID0gISEoaXQ2NTA1LT5kcGNkW0RQX01BWF9ET1dOU1BSRUFEXSAmDQorCQkJCURQX01BWF9E T1dOU1BSRUFEXzBfNSk7DQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIk1heGltdW0gRG93 bi1TcHJlYWQ6ICVzLCAlc3N1cHBvcnQgU1NDISIsDQorCQkJICAgICBpdDY1MDUtPmVuYWJsZV9z c2MgPyAiMC41IiA6ICIwIiwNCisJCQkgICAgIGl0NjUwNS0+ZW5hYmxlX3NzYyA/ICIiIDogIk5v dCAiKTsNCisNCisJaXQ2NTA1LT5zdGVwX3RyYWluID0gaXQ2NTA1X3VzZV9zdGVwX3RyYWluX2No ZWNrKGl0NjUwNSk7DQorCWlmIChpdDY1MDUtPnN0ZXBfdHJhaW4pDQorCQlEUk1fREVWX0RFQlVH X0RSSVZFUihkZXYsICJhdXRvIHRyYWluIGZhaWwsIHdpbGwgc3RlcCB0cmFpbiIpOw0KKw0KKwli Y2FwcyA9IGl0NjUwNV9kcGNkX3JlYWQoaXQ2NTA1LCBEUF9BVVhfSERDUF9CQ0FQUyk7DQorCURS TV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImJjYXBzOjB4JTAyeCIsIGJjYXBzKTsNCisJaWYgKGJj YXBzICYgRFBfQkNBUFNfSERDUF9DQVBBQkxFKSB7DQorCQlpdDY1MDUtPmlzX3JlcGVhdGVyID0g ISEoYmNhcHMgJiBEUF9CQ0FQU19SRVBFQVRFUl9QUkVTRU5UKTsNCisJCURSTV9ERVZfREVCVUdf RFJJVkVSKGRldiwgIlN1cHBvcnQgSERDUCEgRG93bnN0cmVhbSBpcyAlcyEiLA0KKwkJCQkgICAg IGl0NjUwNS0+aXNfcmVwZWF0ZXIgPyAicmVwZWF0ZXIiIDoNCisJCQkJICAgICAicmVjZWl2ZXIi KTsNCisJfSBlbHNlIHsNCisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIlNpbmsgbm90IHN1 cHBvcnQgSERDUCEiKTsNCisJCWl0NjUwNS0+aGRjcF9kZXNpcmVkID0gZmFsc2U7DQorCX0NCisJ RFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiSERDUCAlcyIsDQorCQkJICAgICBpdDY1MDUtPmhk Y3BfZGVzaXJlZCA/ICJkZXNpcmVkIiA6ICJ1bmRlc2lyZWQiKTsNCit9DQorDQorc3RhdGljIHZv aWQgaXQ2NTA1X3NldHVwX3NzYyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlpdDY1MDVf c2V0X2JpdHMoaXQ2NTA1LCBSRUdfVFJBSU5fQ1RSTDAsIFNQUkVBRF9BTVBfNSwNCisJCQlpdDY1 MDUtPmVuYWJsZV9zc2MgPyBTUFJFQURfQU1QXzUgOiAweDAwKTsNCisJaWYgKGl0NjUwNS0+ZW5h YmxlX3NzYykgew0KKwkJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0JBTktfU0VMLCAweDAxKTsN CisJCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19TU0NfQ1RSTDAsIDB4OUUpOw0KKwkJaXQ2NTA1 X3dyaXRlKGl0NjUwNSwgUkVHX1NTQ19DVFJMMSwgMHgxQyk7DQorCQlpdDY1MDVfd3JpdGUoaXQ2 NTA1LCBSRUdfU1NDX0NUUkwyLCAweDQyKTsNCisJCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19C QU5LX1NFTCwgMHgwMCk7DQorCQlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfU1BfQ1RSTDAsIDB4 MDcpOw0KKwkJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0lQX0NUUkwxLCAweDI5KTsNCisJCWl0 NjUwNV93cml0ZShpdDY1MDUsIFJFR19JUF9DVFJMMiwgMHgwMyk7DQorCQkvKiBTdGFtcCBJbnRl cnJ1cHQgU3RlcCAqLw0KKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1RJTUVfU1RNUF9D VFJMLCBNX1NUQU1QX1NURVAsDQorCQkJCTB4MTApOw0KKwkJaXQ2NTA1X2RwY2Rfd3JpdGUoaXQ2 NTA1LCBEUF9ET1dOU1BSRUFEX0NUUkwsDQorCQkJCSAgRFBfU1BSRUFEX0FNUF8wXzUpOw0KKwl9 IGVsc2Ugew0KKwkJaXQ2NTA1X2RwY2Rfd3JpdGUoaXQ2NTA1LCBEUF9ET1dOU1BSRUFEX0NUUkws IDB4MDApOw0KKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1RJTUVfU1RNUF9DVFJMLCBN X1NUQU1QX1NURVAsDQorCQkJCTB4MDApOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdm9p ZCBpdDY1MDVfbGlua19yYXRlX3NldHVwKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCWl0 NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19UUkFJTl9DVFJMMCwgRk9SQ0VfTEJSLA0KKwkJCShp dDY1MDUtPmxpbmtfcmF0ZV9id19jb2RlID09IFJCUikgPyBGT1JDRV9MQlIgOiAweDAwKTsNCisJ aXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0xJTktfRFJWLCBEUlZfSFMsDQorCQkJKGl0NjUw NS0+bGlua19yYXRlX2J3X2NvZGUgPT0gUkJSKSA/IDB4MDAgOiBEUlZfSFMpOw0KK30NCisNCitz dGF0aWMgdm9pZCBpdDY1MDVfbGFuZV9jb3VudF9zZXR1cChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUp DQorew0KKwlpdDY1MDVfZ2V0X2V4dGNvbl9wcm9wZXJ0eShpdDY1MDUpOw0KKwlpdDY1MDVfc2V0 X2JpdHMoaXQ2NTA1LCBSRUdfVFJBSU5fQ1RSTDAsIExBTkVfU1dBUCwNCisJCQlpdDY1MDUtPmxh bmVfc3dhcCA/IExBTkVfU1dBUCA6IDB4MDApOw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBS RUdfVFJBSU5fQ1RSTDAsIExBTkVfQ09VTlRfTUFTSywNCisJCQkoaXQ2NTA1LT5sYW5lX2NvdW50 IC0gMSkgPDwgMSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9saW5rX3RyYWluaW5nX3Nl dHVwKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZp dDY1MDUtPmNsaWVudC0+ZGV2Ow0KKw0KKwlpZiAoaXQ2NTA1LT5lbmFibGVfZW5oYW5jZWRfZnJh bWUpDQorCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfREFUQV9NVVRFX0NUUkwsDQorCQkJ CUVOQUJMRV9FTkhBTkNFRF9GUkFNRSwgRU5BQkxFX0VOSEFOQ0VEX0ZSQU1FKTsNCisNCisJaXQ2 NTA1X2xpbmtfcmF0ZV9zZXR1cChpdDY1MDUpOw0KKwlpdDY1MDVfbGFuZV9jb3VudF9zZXR1cChp dDY1MDUpOw0KKwlpdDY1MDVfc2V0dXBfc3NjKGl0NjUwNSk7DQorCURSTV9ERVZfREVCVUdfRFJJ VkVSKGRldiwNCisJCQkgICAgICIlcywgJWQgbGFuZXMsICVzYWJsZSBzc2MsICVzYWJsZSBlbmhh bmNlZCBmcmFtZSIsDQorCQkJICAgICBpdDY1MDUtPmxpbmtfcmF0ZV9id19jb2RlICE9IFJCUiA/ ICJIQlIiIDogIlJCUiIsDQorCQkJICAgICBpdDY1MDUtPmxhbmVfY291bnQsDQorCQkJICAgICBp dDY1MDUtPmVuYWJsZV9zc2MgPyAiZW4iIDogImRpcyIsDQorCQkJICAgICBpdDY1MDUtPmVuYWJs ZV9lbmhhbmNlZF9mcmFtZSA/ICJlbiIgOiAiZGlzIik7DQorfQ0KKw0KK3N0YXRpYyBib29sIGl0 NjUwNV9saW5rX3N0YXJ0X2F1dG9fdHJhaW4oc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJ aW50IHRpbWVvdXQgPSA1MDAsIGxpbmtfdHJhaW5pbmdfc3RhdGU7DQorCWJvb2wgc3RhdGUgPSBm YWxzZTsNCisNCisJbXV0ZXhfbG9jaygmaXQ2NTA1LT5hdXhfbG9jayk7DQorCWl0NjUwNV9zZXRf Yml0cyhpdDY1MDUsIFJFR19UUkFJTl9DVFJMMCwNCisJCQkJRk9SQ0VfQ1JfRE9ORSB8IEZPUkNF X0VRX0RPTkUsIDB4MDApOw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfVFJBSU5fQ1RSTDEs IEZPUkNFX1JFVFJBSU4pOw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfVFJBSU5fQ1RSTDEs IEFVVE9fVFJBSU4pOw0KKw0KKwl3aGlsZSAodGltZW91dCA+IDApIHsNCisJCXVzbGVlcF9yYW5n ZSgxMDAwLCAyMDAwKTsNCisJCWxpbmtfdHJhaW5pbmdfc3RhdGUgPSBpdDY1MDVfcmVhZChpdDY1 MDUsIFJFR19MSU5LX1RSQUlOX1NUUyk7DQorDQorCQlpZiAoKGxpbmtfdHJhaW5pbmdfc3RhdGUg PiAwKSAmJg0KKwkJICAgIChsaW5rX3RyYWluaW5nX3N0YXRlICYgTElOS19TVEFURV9OT1JQKSkg ew0KKwkJCXN0YXRlID0gdHJ1ZTsNCisJCQlnb3RvIHVubG9jazsNCisJCX0NCisNCisJCXRpbWVv dXQtLTsNCisJfQ0KK3VubG9jazoNCisJbXV0ZXhfdW5sb2NrKCZpdDY1MDUtPmF1eF9sb2NrKTsN CisNCisJcmV0dXJuIHN0YXRlOw0KK30NCisNCitzdGF0aWMgaW50IGl0NjUwNV9kcm1fZHBfbGlu a19jb25maWd1cmUoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJdTggdmFsdWVzWzJdOw0K KwlpbnQgZXJyOw0KKwlzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4ID0gJml0NjUwNS0+YXV4Ow0KKw0K Kwl2YWx1ZXNbMF0gPSBpdDY1MDUtPmxpbmtfcmF0ZV9id19jb2RlOw0KKwl2YWx1ZXNbMV0gPSBp dDY1MDUtPmxhbmVfY291bnQ7DQorDQorCWlmIChpdDY1MDUtPmVuYWJsZV9lbmhhbmNlZF9mcmFt ZSkNCisJCXZhbHVlc1sxXSB8PSBEUF9MQU5FX0NPVU5UX0VOSEFOQ0VEX0ZSQU1FX0VOOw0KKw0K KwllcnIgPSBkcm1fZHBfZHBjZF93cml0ZShhdXgsIERQX0xJTktfQldfU0VULCB2YWx1ZXMsIHNp emVvZih2YWx1ZXMpKTsNCisJaWYgKGVyciA8IDApDQorCQlyZXR1cm4gZXJyOw0KKw0KKwlyZXR1 cm4gMDsNCit9DQorDQorc3RhdGljIGJvb2wgaXQ2NTA1X2NoZWNrX3ZvbHRhZ2Vfc3dpbmdfbWF4 KHU4IGxhbmVfdm9sdGFnZV9zd2luZ19wcmVfZW1waGFzaXMpDQorew0KKwlyZXR1cm4gKChsYW5l X3ZvbHRhZ2Vfc3dpbmdfcHJlX2VtcGhhc2lzICYgMHgwMykgPT0gTUFYX0NSX0xFVkVMKTsNCit9 DQorDQorc3RhdGljIGJvb2wgaXQ2NTA1X2NoZWNrX3ByZV9lbXBoYXNpc19tYXgodTggbGFuZV92 b2x0YWdlX3N3aW5nX3ByZV9lbXBoYXNpcykNCit7DQorCXJldHVybiAoKGxhbmVfdm9sdGFnZV9z d2luZ19wcmVfZW1waGFzaXMgJiAweDAzKSA9PSBNQVhfRVFfTEVWRUwpOw0KK30NCisNCitzdGF0 aWMgYm9vbCBpdDY1MDVfY2hlY2tfbWF4X3ZvbHRhZ2Vfc3dpbmdfcmVhY2hlZCh1OCAqbGFuZV92 b2x0YWdlX3N3aW5nLA0KKwkJCQkJCSAgIHU4IGxhbmVfY291bnQpDQorew0KKwl1OCBpOw0KKw0K Kwlmb3IgKGkgPSAwOyBpIDwgbGFuZV9jb3VudDsgaSsrKSB7DQorCQlpZiAobGFuZV92b2x0YWdl X3N3aW5nW2ldICYgRFBfVFJBSU5fTUFYX1NXSU5HX1JFQUNIRUQpDQorCQkJcmV0dXJuIHRydWU7 DQorCX0NCisNCisJcmV0dXJuIGZhbHNlOw0KK30NCisNCitzdGF0aWMgYm9vbCBpdDY1MDVfc3Rl cF90cmFpbl9sYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzX3NldCgNCisJc3RydWN0IGl0NjUwNSAq aXQ2NTA1LA0KKwlzdHJ1Y3QgaXQ2NTA1X3N0ZXBfdHJhaW5fcGFyYSAqbGFuZV92b2x0YWdlX3By ZV9lbXBoYXNpcywNCisJdTggKmxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXNfc2V0KQ0KK3sNCisJ dTggaTsNCisNCisJZm9yIChpID0gMDsgaSA8IGl0NjUwNS0+bGFuZV9jb3VudDsgaSsrKSB7DQor CQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzLT52b2x0YWdlX3N3aW5nW2ldICY9IDB4MDM7DQor CQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzX3NldFtpXSA9DQorCQkJbGFuZV92b2x0YWdlX3By ZV9lbXBoYXNpcy0+dm9sdGFnZV9zd2luZ1tpXTsNCisJCWlmIChpdDY1MDVfY2hlY2tfdm9sdGFn ZV9zd2luZ19tYXgoDQorCQkJICAgIGxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnZvbHRhZ2Vf c3dpbmdbaV0pKQ0KKwkJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXNfc2V0W2ldIHw9DQorCQkJ CURQX1RSQUlOX01BWF9TV0lOR19SRUFDSEVEOw0KKw0KKwkJbGFuZV92b2x0YWdlX3ByZV9lbXBo YXNpcy0+cHJlX2VtcGhhc2lzW2ldICY9IDB4MDM7DQorCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhh c2lzX3NldFtpXSB8PQ0KKwkJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnByZV9lbXBoYXNp c1tpXQ0KKwkJCTw8IERQX1RSQUlOX1BSRV9FTVBIQVNJU19TSElGVDsNCisJCWlmIChpdDY1MDVf Y2hlY2tfcHJlX2VtcGhhc2lzX21heCgNCisJCQkgICAgbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNp cy0+cHJlX2VtcGhhc2lzW2ldKSkNCisJCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzX3NldFtp XSB8PQ0KKwkJCQlEUF9UUkFJTl9NQVhfUFJFX0VNUEhBU0lTX1JFQUNIRUQ7DQorCQlpdDY1MDVf ZHBjZF93cml0ZShpdDY1MDUsIERQX1RSQUlOSU5HX0xBTkUwX1NFVCArIGksDQorCQkJCSAgbGFu ZV92b2x0YWdlX3ByZV9lbXBoYXNpc19zZXRbaV0pOw0KKw0KKwkJaWYgKGxhbmVfdm9sdGFnZV9w cmVfZW1waGFzaXNfc2V0W2ldICE9DQorCQkgICAgaXQ2NTA1X2RwY2RfcmVhZChpdDY1MDUsIERQ X1RSQUlOSU5HX0xBTkUwX1NFVCArIGkpKQ0KKwkJCXJldHVybiBmYWxzZTsNCisJfQ0KKw0KKwly ZXR1cm4gdHJ1ZTsNCit9DQorDQorc3RhdGljIGJvb2wNCitpdDY1MDVfc3RlcF9jcl90cmFpbihz dHJ1Y3QgaXQ2NTA1ICppdDY1MDUsDQorCQkgICAgIHN0cnVjdCBpdDY1MDVfc3RlcF90cmFpbl9w YXJhICpsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzKQ0KK3sNCisJdTggbG9vcF9jb3VudCA9IDAs IGkgPSAwLCBqOw0KKwl1OCBsaW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXSA9IHsgMCB9 Ow0KKwl1OCBsYW5lX2xldmVsX2NvbmZpZ1tNQVhfTEFORV9DT1VOVF0gPSB7IDAgfTsNCisJaW50 IHByZV9lbXBoYXNpc19hZGp1c3QgPSAtMSwgdm9sdGFnZV9zd2luZ19hZGp1c3QgPSAtMTsNCisN CisJaXQ2NTA1X2RwY2Rfd3JpdGUoaXQ2NTA1LCBEUF9ET1dOU1BSRUFEX0NUUkwsDQorCQkJICBp dDY1MDUtPmVuYWJsZV9zc2MgPyBEUF9TUFJFQURfQU1QXzBfNSA6IDB4MDApOw0KKwlpdDY1MDVf ZHBjZF93cml0ZShpdDY1MDUsIERQX1RSQUlOSU5HX1BBVFRFUk5fU0VULA0KKwkJCSAgRFBfVFJB SU5JTkdfUEFUVEVSTl8xKTsNCisNCisJd2hpbGUgKGxvb3BfY291bnQgPCA1ICYmIGkgPCAxMCkg ew0KKwkJaSsrOw0KKwkJaWYgKCFpdDY1MDVfc3RlcF90cmFpbl9sYW5lX3ZvbHRhZ2VfcHJlX2Vt cGhhc2lzX3NldCgNCisJCQkgICAgaXQ2NTA1LCBsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzLA0K KwkJCSAgICBsYW5lX2xldmVsX2NvbmZpZykpDQorCQkJY29udGludWU7DQorCQlkcm1fZHBfbGlu a190cmFpbl9jbG9ja19yZWNvdmVyeV9kZWxheShpdDY1MDUtPmRwY2QpOw0KKwkJZHJtX2RwX2Rw Y2RfcmVhZF9saW5rX3N0YXR1cygmaXQ2NTA1LT5hdXgsIGxpbmtfc3RhdHVzKTsNCisNCisJCWlm IChkcm1fZHBfY2xvY2tfcmVjb3Zlcnlfb2sobGlua19zdGF0dXMsIGl0NjUwNS0+bGFuZV9jb3Vu dCkpIHsNCisJCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfVFJBSU5fQ1RSTDAsIEZPUkNF X0NSX0RPTkUsDQorCQkJCQlGT1JDRV9DUl9ET05FKTsNCisJCQlyZXR1cm4gdHJ1ZTsNCisJCX0N CisJCURSTV9ERVZfREVCVUdfRFJJVkVSKCZpdDY1MDUtPmNsaWVudC0+ZGV2LCAiY3Igbm90IGRv bmUiKTsNCisNCisJCWlmIChpdDY1MDVfY2hlY2tfbWF4X3ZvbHRhZ2Vfc3dpbmdfcmVhY2hlZChs YW5lX2xldmVsX2NvbmZpZywNCisJCQkJCQkJICAgaXQ2NTA1LT5sYW5lX2NvdW50KSkNCisJCQln b3RvIGNyX3RyYWluX2ZhaWw7DQorDQorCQlmb3IgKGogPSAwOyBqIDwgaXQ2NTA1LT5sYW5lX2Nv dW50OyBqKyspIHsNCisJCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzLT52b2x0YWdlX3N3aW5n W2pdID0NCisJCQkJZHJtX2RwX2dldF9hZGp1c3RfcmVxdWVzdF92b2x0YWdlKGxpbmtfc3RhdHVz LA0KKwkJCQkJCQkJICBqKSA+Pg0KKwkJCQlEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX1NISUZUOw0K KwkJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnByZV9lbXBoYXNpc1tqXSA9DQorCQkJCWRy bV9kcF9nZXRfYWRqdXN0X3JlcXVlc3RfcHJlX2VtcGhhc2lzKA0KKwkJCQkJbGlua19zdGF0dXMs IGopID4+DQorCQkJCURQX1RSQUlOX1BSRV9FTVBIQVNJU19TSElGVDsNCisJCQlpZiAoKHZvbHRh Z2Vfc3dpbmdfYWRqdXN0ID09DQorCQkJICAgICBsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzLT52 b2x0YWdlX3N3aW5nW2pdKSAmJg0KKwkJCSAgICAocHJlX2VtcGhhc2lzX2FkanVzdCA9PQ0KKwkJ CSAgICAgbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcy0+cHJlX2VtcGhhc2lzW2pdKSkgew0KKwkJ CQlsb29wX2NvdW50Kys7DQorCQkJCWNvbnRpbnVlOw0KKwkJCX0NCisNCisJCQl2b2x0YWdlX3N3 aW5nX2FkanVzdCA9DQorCQkJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnZvbHRhZ2Vfc3dp bmdbal07DQorCQkJcHJlX2VtcGhhc2lzX2FkanVzdCA9DQorCQkJCWxhbmVfdm9sdGFnZV9wcmVf ZW1waGFzaXMtPnByZV9lbXBoYXNpc1tqXTsNCisJCQlsb29wX2NvdW50ID0gMDsNCisNCisJCQlp ZiAodm9sdGFnZV9zd2luZ19hZGp1c3QgKyBwcmVfZW1waGFzaXNfYWRqdXN0ID4NCisJCQkgICAg TUFYX0VRX0xFVkVMKQ0KKwkJCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzLT52b2x0YWdlX3N3 aW5nW2pdID0NCisJCQkJCU1BWF9FUV9MRVZFTCAtDQorCQkJCQlsYW5lX3ZvbHRhZ2VfcHJlX2Vt cGhhc2lzDQorCQkJCQkJLT5wcmVfZW1waGFzaXNbal07DQorCQl9DQorCX0NCisNCitjcl90cmFp bl9mYWlsOg0KKwlpdDY1MDVfZHBjZF93cml0ZShpdDY1MDUsIERQX1RSQUlOSU5HX1BBVFRFUk5f U0VULA0KKwkJCSAgRFBfVFJBSU5JTkdfUEFUVEVSTl9ESVNBQkxFKTsNCisNCisJcmV0dXJuIGZh bHNlOw0KK30NCisNCitzdGF0aWMgYm9vbA0KK2l0NjUwNV9zdGVwX2VxX3RyYWluKHN0cnVjdCBp dDY1MDUgKml0NjUwNSwNCisJCSAgICAgc3RydWN0IGl0NjUwNV9zdGVwX3RyYWluX3BhcmEgKmxh bmVfdm9sdGFnZV9wcmVfZW1waGFzaXMpDQorew0KKwl1OCBsb29wX2NvdW50ID0gMCwgaSwgbGlu a19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV0gPSB7IDAgfTsNCisJdTggbGFuZV9sZXZlbF9j b25maWdbTUFYX0xBTkVfQ09VTlRdID0geyAwIH07DQorDQorCWl0NjUwNV9kcGNkX3dyaXRlKGl0 NjUwNSwgRFBfVFJBSU5JTkdfUEFUVEVSTl9TRVQsDQorCQkJICBEUF9UUkFJTklOR19QQVRURVJO XzIpOw0KKw0KKwl3aGlsZSAobG9vcF9jb3VudCA8IDYpIHsNCisJCWxvb3BfY291bnQrKzsNCisN CisJCWlmICghaXQ2NTA1X3N0ZXBfdHJhaW5fbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpc19zZXQo DQorCQkJICAgIGl0NjUwNSwgbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcywNCisJCQkgICAgbGFu ZV9sZXZlbF9jb25maWcpKQ0KKwkJCWNvbnRpbnVlOw0KKw0KKwkJZHJtX2RwX2xpbmtfdHJhaW5f Y2hhbm5lbF9lcV9kZWxheShpdDY1MDUtPmRwY2QpOw0KKwkJZHJtX2RwX2RwY2RfcmVhZF9saW5r X3N0YXR1cygmaXQ2NTA1LT5hdXgsIGxpbmtfc3RhdHVzKTsNCisNCisJCWlmICghZHJtX2RwX2Ns b2NrX3JlY292ZXJ5X29rKGxpbmtfc3RhdHVzLCBpdDY1MDUtPmxhbmVfY291bnQpKQ0KKwkJCWdv dG8gZXFfdHJhaW5fZmFpbDsNCisNCisJCWlmIChkcm1fZHBfY2hhbm5lbF9lcV9vayhsaW5rX3N0 YXR1cywgaXQ2NTA1LT5sYW5lX2NvdW50KSkgew0KKwkJCWl0NjUwNV9kcGNkX3dyaXRlKGl0NjUw NSwgRFBfVFJBSU5JTkdfUEFUVEVSTl9TRVQsDQorCQkJCQkgIERQX1RSQUlOSU5HX1BBVFRFUk5f RElTQUJMRSk7DQorCQkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1RSQUlOX0NUUkwwLCBG T1JDRV9FUV9ET05FLA0KKwkJCQkJRk9SQ0VfRVFfRE9ORSk7DQorCQkJcmV0dXJuIHRydWU7DQor CQl9DQorCQlEUk1fREVWX0RFQlVHX0RSSVZFUigmaXQ2NTA1LT5jbGllbnQtPmRldiwgImVxIG5v dCBkb25lIik7DQorDQorCQlmb3IgKGkgPSAwOyBpIDwgaXQ2NTA1LT5sYW5lX2NvdW50OyBpKysp IHsNCisJCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzLT52b2x0YWdlX3N3aW5nW2ldID0NCisJ CQkJZHJtX2RwX2dldF9hZGp1c3RfcmVxdWVzdF92b2x0YWdlKGxpbmtfc3RhdHVzLA0KKwkJCQkJ CQkJICBpKSA+Pg0KKwkJCQlEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX1NISUZUOw0KKwkJCWxhbmVf dm9sdGFnZV9wcmVfZW1waGFzaXMtPnByZV9lbXBoYXNpc1tpXSA9DQorCQkJCWRybV9kcF9nZXRf YWRqdXN0X3JlcXVlc3RfcHJlX2VtcGhhc2lzKA0KKwkJCQkJbGlua19zdGF0dXMsIGkpID4+DQor CQkJCURQX1RSQUlOX1BSRV9FTVBIQVNJU19TSElGVDsNCisNCisJCQlpZiAobGFuZV92b2x0YWdl X3ByZV9lbXBoYXNpcy0+dm9sdGFnZV9zd2luZ1tpXSArDQorCQkJCSAgICBsYW5lX3ZvbHRhZ2Vf cHJlX2VtcGhhc2lzLT5wcmVfZW1waGFzaXNbaV0gPg0KKwkJCSAgICBNQVhfRVFfTEVWRUwpDQor CQkJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnZvbHRhZ2Vfc3dpbmdbaV0gPQ0KKwkJCQkJ MHgwMyAtIGxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMNCisJCQkJCQkgICAgICAgLT5wcmVfZW1w aGFzaXNbaV07DQorCQl9DQorCX0NCisNCitlcV90cmFpbl9mYWlsOg0KKwlpdDY1MDVfZHBjZF93 cml0ZShpdDY1MDUsIERQX1RSQUlOSU5HX1BBVFRFUk5fU0VULA0KKwkJCSAgRFBfVFJBSU5JTkdf UEFUVEVSTl9ESVNBQkxFKTsNCisJcmV0dXJuIGZhbHNlOw0KK30NCisNCitzdGF0aWMgYm9vbCBp dDY1MDVfbGlua19zdGFydF9zdGVwX3RyYWluKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQor CWludCBlcnI7DQorCXN0cnVjdCBpdDY1MDVfc3RlcF90cmFpbl9wYXJhIGxhbmVfdm9sdGFnZV9w cmVfZW1waGFzaXMgPSB7DQorCQkudm9sdGFnZV9zd2luZyA9IHsgMCB9LA0KKwkJLnByZV9lbXBo YXNpcyA9IHsgMCB9LA0KKwl9Ow0KKw0KKwlEUk1fREVWX0RFQlVHX0RSSVZFUigmaXQ2NTA1LT5j bGllbnQtPmRldiwgInN0YXJ0Iik7DQorCWVyciA9IGl0NjUwNV9kcm1fZHBfbGlua19jb25maWd1 cmUoaXQ2NTA1KTsNCisNCisJaWYgKGVyciA8IDApDQorCQlyZXR1cm4gZmFsc2U7DQorCWlmICgh aXQ2NTA1X3N0ZXBfY3JfdHJhaW4oaXQ2NTA1LCAmbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcykp DQorCQlyZXR1cm4gZmFsc2U7DQorCWlmICghaXQ2NTA1X3N0ZXBfZXFfdHJhaW4oaXQ2NTA1LCAm bGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcykpDQorCQlyZXR1cm4gZmFsc2U7DQorCXJldHVybiB0 cnVlOw0KK30NCisNCitzdGF0aWMgYm9vbCBpdDY1MDVfZ2V0X3ZpZGVvX3N0YXR1cyhzdHJ1Y3Qg aXQ2NTA1ICppdDY1MDUpDQorew0KKwlpbnQgcmVnXzBkOw0KKw0KKwlyZWdfMGQgPSBpdDY1MDVf cmVhZChpdDY1MDUsIFJFR19TWVNURU1fU1RTKTsNCisNCisJaWYgKHJlZ18wZCA8IDApDQorCQly ZXR1cm4gZmFsc2U7DQorDQorCXJldHVybiAhIShyZWdfMGQgJiBWSURFT19TVEIpOw0KK30NCisN CitzdGF0aWMgdm9pZCBpdDY1MDVfcmVzZXRfaGRjcChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQor ew0KKwlpdDY1MDUtPmhkY3Bfc3RhdHVzID0gSERDUF9BVVRIX0lETEU7DQorCS8qIERpc2FibGUg Q1BfRGVzaXJlZCAqLw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfSERDUF9DVFJMMSwg SERDUF9DUF9FTkFCTEUsIDB4MDApOw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfUkVT RVRfQ1RSTCwgSERDUF9SRVNFVCwgSERDUF9SRVNFVCk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0 NjUwNV9zdGFydF9oZGNwKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCXN0cnVjdCBkZXZp Y2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKw0KKwlEUk1fREVWX0RFQlVHX0RSSVZF UihkZXYsICJzdGFydCIpOw0KKwlpdDY1MDVfcmVzZXRfaGRjcChpdDY1MDUpOw0KKwlxdWV1ZV9k ZWxheWVkX3dvcmsoc3lzdGVtX3dxLCAmaXQ2NTA1LT5oZGNwX3dvcmssDQorCQkJICAgbXNlY3Nf dG9famlmZmllcygyNDAwKSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9zdG9wX2hkY3Ao c3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJaXQ2NTA1X3Jlc2V0X2hkY3AoaXQ2NTA1KTsN CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmaXQ2NTA1LT5oZGNwX3dvcmspOw0KK30NCisNCitzdGF0 aWMgYm9vbCBpdDY1MDVfaGRjcF9pc19rc3ZfdmFsaWQodTggKmtzdikNCit7DQorCWludCBpLCBv bmVzID0gMDsNCisNCisJLyogS1NWIGhhcyAyMCAxJ3MgYW5kIDIwIDAncyAqLw0KKwlmb3IgKGkg PSAwOyBpIDwgRFJNX0hEQ1BfS1NWX0xFTjsgaSsrKQ0KKwkJb25lcyArPSBod2VpZ2h0OChrc3Zb aV0pOw0KKwlpZiAob25lcyAhPSAyMCkNCisJCXJldHVybiBmYWxzZTsNCisJcmV0dXJuIHRydWU7 DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9oZGNwX3BhcnQxX2F1dGgoc3RydWN0IGl0NjUw NSAqaXQ2NTA1KQ0KK3sNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5k ZXY7DQorCXU4IGhkY3BfYmNhcHM7DQorDQorCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19S RVNFVF9DVFJMLCBIRENQX1JFU0VULCAweDAwKTsNCisJLyogRGlzYWJsZSBDUF9EZXNpcmVkICov DQorCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX0NUUkwxLCBIRENQX0NQX0VOQUJM RSwgMHgwMCk7DQorDQorCXVzbGVlcF9yYW5nZSgxMDAwLCAxNTAwKTsNCisJaGRjcF9iY2FwcyA9 IGl0NjUwNV9kcGNkX3JlYWQoaXQ2NTA1LCBEUF9BVVhfSERDUF9CQ0FQUyk7DQorCURSTV9ERVZf REVCVUdfRFJJVkVSKGRldiwgIkRQQ0RbMHg2ODAyOF06IDB4JTAyeCIsDQorCQkJICAgICBoZGNw X2JjYXBzKTsNCisNCisJaWYgKCFoZGNwX2JjYXBzKQ0KKwkJcmV0dXJuOw0KKw0KKwkvKiBjbGVh ciB0aGUgcmVwZWF0ZXIgTGlzdCBDaGsgRG9uZSBhbmQgZmFpbCBiaXQgKi8NCisJaXQ2NTA1X3Nl dF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfVFJJR0dFUiwNCisJCQlIRENQX1RSSUdHRVJfS1NWX0RP TkUgfCBIRENQX1RSSUdHRVJfS1NWX0ZBSUwsDQorCQkJMHgwMCk7DQorDQorCS8qIEVuYWJsZSBB biBHZW5lcmF0b3IgKi8NCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfQ1RSTDIs IEhEQ1BfQU5fR0VOLCBIRENQX0FOX0dFTik7DQorCS8qIGRlbGF5MW1zKDEwKTsqLw0KKwl1c2xl ZXBfcmFuZ2UoMTAwMDAsIDE1MDAwKTsNCisJLyogU3RvcCBBbiBHZW5lcmF0b3IgKi8NCisJaXQ2 NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfQ1RSTDIsIEhEQ1BfQU5fR0VOLCAweDAwKTsN CisNCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfQ1RSTDEsIEhEQ1BfQ1BfRU5B QkxFLCBIRENQX0NQX0VOQUJMRSk7DQorDQorCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19I RENQX1RSSUdHRVIsIEhEQ1BfVFJJR0dFUl9TVEFSVCwNCisJCQlIRENQX1RSSUdHRVJfU1RBUlQp Ow0KKw0KKwlpdDY1MDUtPmhkY3Bfc3RhdHVzID0gSERDUF9BVVRIX0dPSU5HOw0KK30NCisNCitz dGF0aWMgaW50IGl0NjUwNV9zaGExX2RpZ2VzdChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUsIHU4ICpz aGExX2lucHV0LA0KKwkJCSAgICAgIHVuc2lnbmVkIGludCBzaXplLCB1OCAqb3V0cHV0X2F2KQ0K K3sNCisJc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2M7DQorCXN0cnVjdCBjcnlwdG9fc2hhc2ggKnRm bTsNCisJaW50IGVycjsNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5k ZXY7DQorDQorCXRmbSA9IGNyeXB0b19hbGxvY19zaGFzaCgic2hhMSIsIDAsIDApOw0KKwlpZiAo SVNfRVJSKHRmbSkpIHsNCisJCURSTV9ERVZfRVJST1IoZGV2LCAiY3J5cHRvX2FsbG9jX3NoYXNo IHNoYTEgZmFpbGVkIik7DQorCQlyZXR1cm4gUFRSX0VSUih0Zm0pOw0KKwl9DQorCWRlc2MgPSBr emFsbG9jKHNpemVvZigqZGVzYykgKyBjcnlwdG9fc2hhc2hfZGVzY3NpemUodGZtKSwgR0ZQX0tF Uk5FTCk7DQorCWlmICghZGVzYykgew0KKwkJY3J5cHRvX2ZyZWVfc2hhc2godGZtKTsNCisJCXJl dHVybiAtRU5PTUVNOw0KKwl9DQorDQorCWRlc2MtPnRmbSA9IHRmbTsNCisJZXJyID0gY3J5cHRv X3NoYXNoX2RpZ2VzdChkZXNjLCBzaGExX2lucHV0LCBzaXplLCBvdXRwdXRfYXYpOw0KKwlpZiAo ZXJyKQ0KKwkJRFJNX0RFVl9FUlJPUihkZXYsICJjcnlwdG9fc2hhc2hfZGlnZXN0IHNoYTEgZmFp bGVkIik7DQorDQorCWNyeXB0b19mcmVlX3NoYXNoKHRmbSk7DQorCWtmcmVlKGRlc2MpOw0KKwly ZXR1cm4gZXJyOw0KK30NCisNCitzdGF0aWMgaW50IGl0NjUwNV9zZXR1cF9zaGExX2lucHV0KHN0 cnVjdCBpdDY1MDUgKml0NjUwNSwgdTggKnNoYTFfaW5wdXQpDQorew0KKwlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisJdTggYmluZm9bMl07DQorCWludCBkb3du X3N0cmVhbV9jb3VudCwgaSwgZXJyLCBtc2dfY291bnQgPSAwOw0KKw0KKwllcnIgPSBpdDY1MDVf Z2V0X2RwY2QoaXQ2NTA1LCBEUF9BVVhfSERDUF9CSU5GTywgYmluZm8sDQorCQkJICAgICAgQVJS QVlfU0laRShiaW5mbykpOw0KKw0KKwlpZiAoZXJyIDwgMCkgew0KKwkJRFJNX0RFVl9FUlJPUihk ZXYsICJSZWFkIGJpbmZvIHZhbHVlIEZhaWwiKTsNCisJCXJldHVybiBlcnI7DQorCX0NCisNCisJ ZG93bl9zdHJlYW1fY291bnQgPSBiaW5mb1swXSAmIDB4N0Y7DQorCURSTV9ERVZfREVCVUdfRFJJ VkVSKGRldiwgImJpbmZvOjB4JSpwaCIsIChpbnQpQVJSQVlfU0laRShiaW5mbyksDQorCQkJICAg ICBiaW5mbyk7DQorDQorCWlmICgoYmluZm9bMF0gJiBCSVQoNykpIHx8IChiaW5mb1sxXSAmIEJJ VCgzKSkpIHsNCisJCURSTV9ERVZfRVJST1IoZGV2LCAiSERDUCBtYXggY2FzY2FkZSBkZXZpY2Ug ZXhjZWVkIik7DQorCQlyZXR1cm4gMDsNCisJfQ0KKw0KKwlpZiAoIWRvd25fc3RyZWFtX2NvdW50 IHx8DQorCSAgICAoZG93bl9zdHJlYW1fY291bnQgPiBNQVhfSERDUF9ET1dOX1NUUkVBTV9DT1VO VCkpIHsNCisJCURSTV9ERVZfRVJST1IoZGV2LCAiSERDUCBkb3duIHN0cmVhbSBjb3VudCBFcnJv ciAlZCIsDQorCQkJICAgICAgZG93bl9zdHJlYW1fY291bnQpOw0KKwkJcmV0dXJuIDA7DQorCX0N CisNCisJZm9yIChpID0gMDsgaSA8IGRvd25fc3RyZWFtX2NvdW50OyBpKyspIHsNCisJCWVyciA9 IGl0NjUwNV9nZXRfZHBjZChpdDY1MDUsIERQX0FVWF9IRENQX0tTVl9GSUZPICsNCisJCQkJICAg ICAgKGkgJSAzKSAqIERSTV9IRENQX0tTVl9MRU4sDQorCQkJCSAgICAgIHNoYTFfaW5wdXQgKyBt c2dfY291bnQsDQorCQkJCSAgICAgIERSTV9IRENQX0tTVl9MRU4pOw0KKw0KKwkJaWYgKGVyciA8 IDApDQorCQkJcmV0dXJuIGVycjsNCisNCisJCW1zZ19jb3VudCArPSA1Ow0KKwl9DQorDQorCWl0 NjUwNS0+aGRjcF9kb3duX3N0cmVhbV9jb3VudCA9IGRvd25fc3RyZWFtX2NvdW50Ow0KKwlzaGEx X2lucHV0W21zZ19jb3VudCsrXSA9IGJpbmZvWzBdOw0KKwlzaGExX2lucHV0W21zZ19jb3VudCsr XSA9IGJpbmZvWzFdOw0KKw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfSERDUF9DVFJM MiwgSERDUF9FTl9NMF9SRUFELA0KKwkJCUhEQ1BfRU5fTTBfUkVBRCk7DQorDQorCWVyciA9IHJl Z21hcF9idWxrX3JlYWQoaXQ2NTA1LT5yZWdtYXAsIFJFR19NMF8wXzcsDQorCQkJICAgICAgIHNo YTFfaW5wdXQgKyBtc2dfY291bnQsIDgpOw0KKw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBS RUdfSERDUF9DVFJMMiwgSERDUF9FTl9NMF9SRUFELCAweDAwKTsNCisNCisJaWYgKGVyciA8IDAp IHsNCisJCURSTV9ERVZfRVJST1IoZGV2LCAiIFdhcm5pbmcsIFJlYWQgTSB2YWx1ZSBGYWlsIik7 DQorCQlyZXR1cm4gZXJyOw0KKwl9DQorDQorCW1zZ19jb3VudCArPSA4Ow0KKw0KKwlyZXR1cm4g bXNnX2NvdW50Ow0KK30NCisNCitzdGF0aWMgYm9vbCBpdDY1MDVfaGRjcF9wYXJ0Ml9rc3ZsaXN0 X2NoZWNrKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9 ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKwl1OCBhdls1XVs0XSwgYnZbNV1bNF07DQorCWludCBp LCBlcnI7DQorDQorCWkgPSBpdDY1MDVfc2V0dXBfc2hhMV9pbnB1dChpdDY1MDUsIGl0NjUwNS0+ c2hhMV9pbnB1dCk7DQorCWlmIChpIDw9IDApIHsNCisJCURSTV9ERVZfRVJST1IoZGV2LCAiU0hB LTEgSW5wdXQgbGVuZ3RoIGVycm9yICVkIiwgaSk7DQorCQlyZXR1cm4gZmFsc2U7DQorCX0NCisN CisJaXQ2NTA1X3NoYTFfZGlnZXN0KGl0NjUwNSwgaXQ2NTA1LT5zaGExX2lucHV0LCBpLCAodTgg Kilhdik7DQorDQorCWVyciA9IGl0NjUwNV9nZXRfZHBjZChpdDY1MDUsIERQX0FVWF9IRENQX1Zf UFJJTUUoMCksICh1OCAqKWJ2LA0KKwkJCSAgICAgIHNpemVvZihidikpOw0KKw0KKwlpZiAoZXJy IDwgMCkgew0KKwkJRFJNX0RFVl9FUlJPUihkZXYsICJSZWFkIFYnIHZhbHVlIEZhaWwiKTsNCisJ CXJldHVybiBmYWxzZTsNCisJfQ0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQ0KKwkJaWYg KChidltpXVszXSAhPSBhdltpXVswXSkgfHwgKGJ2W2ldWzJdICE9IGF2W2ldWzFdKSB8fA0KKwkJ ICAgIChidltpXVsxXSAhPSBhdltpXVsyXSkgfHwgKGJ2W2ldWzBdICE9IGF2W2ldWzNdKSkNCisJ CQlyZXR1cm4gZmFsc2U7DQorDQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIlYnIGFsbCBt YXRjaCEhIik7DQorCXJldHVybiB0cnVlOw0KK30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVfaGRj cF93YWl0X2tzdl9saXN0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCit7DQorCXN0cnVjdCBp dDY1MDUgKml0NjUwNSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXQ2NTA1LA0KKwkJCQkJ ICAgICBoZGNwX3dhaXRfa3N2X2xpc3QpOw0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1 LT5jbGllbnQtPmRldjsNCisJdW5zaWduZWQgaW50IHRpbWVvdXQgPSA1MDAwOw0KKwl1OCBic3Rh dHVzID0gMDsNCisJYm9vbCBrc3ZfbGlzdF9jaGVjazsNCisNCisJdGltZW91dCAvPSAyMDsNCisJ d2hpbGUgKHRpbWVvdXQgPiAwKSB7DQorCQlpZiAoIWl0NjUwNV9nZXRfc2lua19ocGRfc3RhdHVz KGl0NjUwNSkpDQorCQkJcmV0dXJuOw0KKw0KKwkJYnN0YXR1cyA9IGl0NjUwNV9kcGNkX3JlYWQo aXQ2NTA1LCBEUF9BVVhfSERDUF9CU1RBVFVTKTsNCisNCisJCWlmIChic3RhdHVzICYgRFBfQlNU QVRVU19SRUFEWSkNCisJCQlicmVhazsNCisNCisJCW1zbGVlcCgyMCk7DQorCQl0aW1lb3V0LS07 DQorCX0NCisNCisJaWYgKHRpbWVvdXQgPT0gMCkgew0KKwkJRFJNX0RFVl9ERUJVR19EUklWRVIo ZGV2LCAidGltZW91dCBhbmQga3N2IGxpc3Qgd2FpdCBmYWlsZWQiKTsNCisJCWdvdG8gdGltZW91 dDsNCisJfQ0KKw0KKwlrc3ZfbGlzdF9jaGVjayA9IGl0NjUwNV9oZGNwX3BhcnQyX2tzdmxpc3Rf Y2hlY2soaXQ2NTA1KTsNCisJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAia3N2IGxpc3QgcmVh ZHksIGtzdiBsaXN0IGNoZWNrICVzIiwNCisJCQkgICAgIGtzdl9saXN0X2NoZWNrID8gInBhc3Mi IDogImZhaWwiKTsNCisJaWYgKGtzdl9saXN0X2NoZWNrKSB7DQorCQlpdDY1MDVfc2V0X2JpdHMo aXQ2NTA1LCBSRUdfSERDUF9UUklHR0VSLA0KKwkJCQlIRENQX1RSSUdHRVJfS1NWX0RPTkUsIEhE Q1BfVFJJR0dFUl9LU1ZfRE9ORSk7DQorCQlyZXR1cm47DQorCX0NCit0aW1lb3V0Og0KKwlpdDY1 MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfSERDUF9UUklHR0VSLA0KKwkJCUhEQ1BfVFJJR0dFUl9L U1ZfRE9ORSB8IEhEQ1BfVFJJR0dFUl9LU1ZfRkFJTCwNCisJCQlIRENQX1RSSUdHRVJfS1NWX0RP TkUgfCBIRENQX1RSSUdHRVJfS1NWX0ZBSUwpOw0KK30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVf aGRjcF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCit7DQorCXN0cnVjdCBpdDY1MDUg Kml0NjUwNSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXQ2NTA1LA0KKwkJCQkJICAgICBo ZGNwX3dvcmsud29yayk7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ ZGV2Ow0KKwlpbnQgcmV0Ow0KKwl1OCBsaW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXSA9 IHsgMCB9Ow0KKw0KKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJzdGFydCIpOw0KKw0KKwlp ZiAoIWl0NjUwNV9nZXRfc2lua19ocGRfc3RhdHVzKGl0NjUwNSkpDQorCQlyZXR1cm47DQorDQor CXJldCA9IGRybV9kcF9kcGNkX3JlYWRfbGlua19zdGF0dXMoJml0NjUwNS0+YXV4LCBsaW5rX3N0 YXR1cyk7DQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInJldDogJWQgbGlua19zdGF0dXM6 ICUqcGgiLCByZXQsDQorCQkJICAgICAoaW50KXNpemVvZihsaW5rX3N0YXR1cyksIGxpbmtfc3Rh dHVzKTsNCisNCisJaWYgKChyZXQgPCAwKSB8fCAhZHJtX2RwX2NoYW5uZWxfZXFfb2sobGlua19z dGF0dXMsIGl0NjUwNS0+bGFuZV9jb3VudCkNCisJICAgIHx8ICFpdDY1MDVfZ2V0X3ZpZGVvX3N0 YXR1cyhpdDY1MDUpKSB7DQorCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJsaW5rIHRyYWlu IG5vdCBkb25lIG9yIG5vIHZpZGVvIik7DQorCQlyZXR1cm47DQorCX0NCisNCisJcmV0ID0gaXQ2 NTA1X2dldF9kcGNkKGl0NjUwNSwgRFBfQVVYX0hEQ1BfQktTViwgaXQ2NTA1LT5ia3N2cywNCisJ CQkgICAgICBBUlJBWV9TSVpFKGl0NjUwNS0+YmtzdnMpKTsNCisJaWYgKHJldCA8IDApIHsNCisJ CURSTV9ERVZfRVJST1IoZGV2LCAiZmFpbCB0byBnZXQgYmtzdiAgcmV0OiAlZCIsIHJldCk7DQor CQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfSERDUF9UUklHR0VSLA0KKwkJCQlIRENQX1RS SUdHRVJfS1NWX0ZBSUwsIEhEQ1BfVFJJR0dFUl9LU1ZfRkFJTCk7DQorCX0NCisNCisJRFJNX0RF Vl9ERUJVR19EUklWRVIoZGV2LCAiYmtzdiA9IDB4JSpwaCIsDQorCQkJICAgICAoaW50KUFSUkFZ X1NJWkUoaXQ2NTA1LT5ia3N2cyksIGl0NjUwNS0+YmtzdnMpOw0KKw0KKwlpZiAoIWl0NjUwNV9o ZGNwX2lzX2tzdl92YWxpZChpdDY1MDUtPmJrc3ZzKSkgew0KKwkJRFJNX0RFVl9FUlJPUihkZXYs ICJEaXNwbGF5IFBvcnQgYmtzdiBub3QgdmFsaWQiKTsNCisJCWl0NjUwNV9zZXRfYml0cyhpdDY1 MDUsIFJFR19IRENQX1RSSUdHRVIsDQorCQkJCUhEQ1BfVFJJR0dFUl9LU1ZfRkFJTCwgSERDUF9U UklHR0VSX0tTVl9GQUlMKTsNCisJfQ0KKw0KKwlpdDY1MDVfaGRjcF9wYXJ0MV9hdXRoKGl0NjUw NSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9zaG93X2hkY3BfaW5mbyhzdHJ1Y3QgaXQ2 NTA1ICppdDY1MDUpDQorew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQt PmRldjsNCisJaW50IGk7DQorCXU4ICpzaGExID0gaXQ2NTA1LT5zaGExX2lucHV0Ow0KKw0KKwlE Uk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJoZGNwX3N0YXR1czogJWQgaXNfcmVwZWF0ZXI6ICVk IiwNCisJCQkgICAgIGl0NjUwNS0+aGRjcF9zdGF0dXMsIGl0NjUwNS0+aXNfcmVwZWF0ZXIpOw0K KwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJia3N2ID0gMHglKnBoIiwNCisJCQkgICAgIChp bnQpQVJSQVlfU0laRShpdDY1MDUtPmJrc3ZzKSwgaXQ2NTA1LT5ia3N2cyk7DQorDQorCWlmIChp dDY1MDUtPmlzX3JlcGVhdGVyKSB7DQorCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJoZGNw X2Rvd25fc3RyZWFtX2NvdW50OiAlZCIsDQorCQkJCSAgICAgaXQ2NTA1LT5oZGNwX2Rvd25fc3Ry ZWFtX2NvdW50KTsNCisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInNoYTFfaW5wdXQ6IDB4 JSpwaCIsDQorCQkJCSAgICAgKGludClBUlJBWV9TSVpFKGl0NjUwNS0+c2hhMV9pbnB1dCksDQor CQkJCSAgICAgaXQ2NTA1LT5zaGExX2lucHV0KTsNCisJCWZvciAoaSA9IDA7IGkgPCBpdDY1MDUt PmhkY3BfZG93bl9zdHJlYW1fY291bnQ7IGkrKykgew0KKwkJCURSTV9ERVZfREVCVUdfRFJJVkVS KGRldiwgIktTVl8lZCA9IDB4JSpwaCIsIGksDQorCQkJCQkgICAgIERSTV9IRENQX0tTVl9MRU4s IHNoYTEpOw0KKwkJCXNoYTEgKz0gRFJNX0hEQ1BfS1NWX0xFTjsNCisJCX0NCisJCURSTV9ERVZf REVCVUdfRFJJVkVSKGRldiwgImJpbmZvOiAweCUycGggTTA6IDB4JThwaCIsDQorCQkJCSAgICAg c2hhMSwgc2hhMSArIDIpOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9zdG9wX2xp bmtfdHJhaW4oc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJaXQ2NTA1LT5saW5rX3N0YXRl ID0gTElOS19JRExFOw0KKwljYW5jZWxfd29ya19zeW5jKCZpdDY1MDUtPmxpbmtfd29ya3MpOw0K KwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfVFJBSU5fQ1RSTDEsIEZPUkNFX1JFVFJBSU4pOw0K K30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVfbGlua190cmFpbl9vayhzdHJ1Y3QgaXQ2NTA1ICpp dDY1MDUpDQorew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsN CisNCisJaXQ2NTA1LT5saW5rX3N0YXRlID0gTElOS19PSzsNCisJLyogZGlzYWxiZSBtdXRlIGVu YWJsZSBhdmkgaW5mbyBmcmFtZSAqLw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfREFU QV9NVVRFX0NUUkwsIEVOX1ZJRF9NVVRFLCAweDAwKTsNCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUw NSwgUkVHX0lORk9GUkFNRV9DVFJMLA0KKwkJCUVOX1ZJRF9DVFJMX1BLVCwgRU5fVklEX0NUUkxf UEtUKTsNCisNCisJaWYgKGl0NjUwNV9hdWRpb19pbnB1dChpdDY1MDUpKSB7DQorCQlEUk1fREVW X0RFQlVHX0RSSVZFUihkZXYsICJFbmFibGUgYXVkaW8hIik7DQorCQlpdDY1MDVfZW5hYmxlX2F1 ZGlvKGl0NjUwNSk7DQorCX0NCisNCisJaWYgKGl0NjUwNS0+aGRjcF9kZXNpcmVkKQ0KKwkJaXQ2 NTA1X3N0YXJ0X2hkY3AoaXQ2NTA1KTsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X2xpbmtf c3RlcF90cmFpbl9wcm9jZXNzKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCXN0cnVjdCBk ZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKwlpbnQgcmV0LCBpLCBzdGVwX3Jl dHJ5ID0gMzsNCisNCisJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiU3RhcnQgc3RlcCB0cmFp biIpOw0KKw0KKwlpZiAoaXQ2NTA1LT5zaW5rX2NvdW50ID09IDApIHsNCisJCURSTV9ERVZfREVC VUdfRFJJVkVSKGRldiwgIml0NjUwNS0+c2lua19jb3VudDolZCwgZm9yY2UgZXEiLA0KKwkJCQkg ICAgIGl0NjUwNS0+c2lua19jb3VudCk7DQorCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LAlSRUdf VFJBSU5fQ1RSTDAsIEZPUkNFX0VRX0RPTkUsDQorCQkJCUZPUkNFX0VRX0RPTkUpOw0KKwkJcmV0 dXJuOw0KKwl9DQorDQorCWlmICghaXQ2NTA1LT5zdGVwX3RyYWluKSB7DQorCQlEUk1fREVWX0RF QlVHX0RSSVZFUihkZXYsICJub3Qgc3VwcG9ydCBzdGVwIHRyYWluIik7DQorCQlyZXR1cm47DQor CX0NCisNCisJLyogc2V0cCB0cmFpbmluZyBzdGFydCBoZXJlICovDQorCWZvciAoaSA9IDA7IGkg PCBzdGVwX3JldHJ5OyBpKyspIHsNCisJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19UUkFJ Tl9DVFJMMCwNCisJCQkJRk9SQ0VfQ1JfRE9ORSB8IEZPUkNFX0VRX0RPTkUsIDB4MDApOw0KKwkJ aXQ2NTA1X2RwY2Rfd3JpdGUoaXQ2NTA1LCBEUF9UUkFJTklOR19QQVRURVJOX1NFVCwNCisJCQkJ ICBEUF9UUkFJTklOR19QQVRURVJOX0RJU0FCTEUpOw0KKwkJcmV0ID0gaXQ2NTA1X2xpbmtfc3Rh cnRfc3RlcF90cmFpbihpdDY1MDUpOw0KKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAic3Rl cCB0cmFpbiAlcywgcmV0cnk6JWQgdGltZXMiLA0KKwkJCQkgICAgIHJldCA/ICJwYXNzIiA6ICJm YWlsZWQiLCBpICsgMSk7DQorCQlpZiAocmV0KSB7DQorCQkJaXQ2NTA1X2xpbmtfdHJhaW5fb2so aXQ2NTA1KTsNCisJCQlyZXR1cm47DQorCQl9DQorCX0NCisNCisJRFJNX0RFVl9ERUJVR19EUklW RVIoZGV2LCAidHJhaW5pbmcgZmFpbCIpOw0KKwlpdDY1MDUtPmxpbmtfc3RhdGUgPSBMSU5LX0lE TEU7DQorCWl0NjUwNV92aWRlb19yZXNldChpdDY1MDUpOw0KK30NCisNCitzdGF0aWMgdm9pZCBp dDY1MDVfbGlua190cmFpbmluZ193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCit7DQor CXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXQ2NTA1 LCBsaW5rX3dvcmtzKTsNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5k ZXY7DQorCWludCByZXQ7DQorDQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIml0NjUwNS0+ c2lua19jb3VudDogJWQiLA0KKwkJCSAgICAgaXQ2NTA1LT5zaW5rX2NvdW50KTsNCisNCisJaWYg KCFpdDY1MDVfZ2V0X3NpbmtfaHBkX3N0YXR1cyhpdDY1MDUpKQ0KKwkJcmV0dXJuOw0KKw0KKwlp dDY1MDVfbGlua190cmFpbmluZ19zZXR1cChpdDY1MDUpOw0KKwlpdDY1MDVfcmVzZXRfaGRjcChp dDY1MDUpOw0KKwlpdDY1MDVfYXV4X3Jlc2V0KGl0NjUwNSk7DQorDQorCWlmIChpdDY1MDUtPmF1 dG9fdHJhaW5fcmV0cnkgPCAxKSB7DQorCQlpdDY1MDVfbGlua19zdGVwX3RyYWluX3Byb2Nlc3Mo aXQ2NTA1KTsNCisJCXJldHVybjsNCisJfQ0KKw0KKwlyZXQgPSBpdDY1MDVfbGlua19zdGFydF9h dXRvX3RyYWluKGl0NjUwNSk7DQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImF1dG8gdHJh aW4gJXMsIGF1dG9fdHJhaW5fcmV0cnk6ICVkIiwNCisJCQkgICAgIHJldCA/ICJwYXNzIiA6ICJm YWlsZWQiLCBpdDY1MDUtPmF1dG9fdHJhaW5fcmV0cnkpOw0KKwlpdDY1MDUtPmF1dG9fdHJhaW5f cmV0cnktLTsNCisNCisJaWYgKHJldCkgew0KKwkJaXQ2NTA1X2xpbmtfdHJhaW5fb2soaXQ2NTA1 KTsNCisJCXJldHVybjsNCisJfQ0KKw0KKwlpdDY1MDVfZHVtcChpdDY1MDUpOw0KK30NCisNCitz dGF0aWMgdm9pZCBpdDY1MDVfcGx1Z2dlZF9zdGF0dXNfdG9fY29kZWMoc3RydWN0IGl0NjUwNSAq aXQ2NTA1KQ0KK3sNCisJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBzdGF0dXMgPSBpdDY1MDUt PmNvbm5lY3Rvcl9zdGF0dXM7DQorDQorCWlmIChpdDY1MDUtPnBsdWdnZWRfY2IgJiYgaXQ2NTA1 LT5jb2RlY19kZXYpDQorCQlpdDY1MDUtPnBsdWdnZWRfY2IoaXQ2NTA1LT5jb2RlY19kZXYsDQor CQkJCSAgIHN0YXR1cyA9PSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCk7DQorfQ0KKw0KK3N0 YXRpYyBpbnQgaXQ2NTA1X3Byb2Nlc3NfaHBkX2lycShzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQor ew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisJaW50IHJl dCwgZHBjZF9zaW5rX2NvdW50LCBkcF9pcnFfdmVjdG9yLCBic3RhdHVzOw0KKwl1OCBsaW5rX3N0 YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXTsNCisNCisJaWYgKCFpdDY1MDVfZ2V0X3NpbmtfaHBk X3N0YXR1cyhpdDY1MDUpKSB7DQorCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJIUERfSVJR IEhQRCBsb3ciKTsNCisJCWl0NjUwNS0+c2lua19jb3VudCA9IDA7DQorCQlyZXR1cm4gMDsNCisJ fQ0KKw0KKwlyZXQgPSBpdDY1MDVfZHBjZF9yZWFkKGl0NjUwNSwgRFBfU0lOS19DT1VOVCk7DQor CWlmIChyZXQgPCAwKQ0KKwkJcmV0dXJuIHJldDsNCisNCisJZHBjZF9zaW5rX2NvdW50ID0gRFBf R0VUX1NJTktfQ09VTlQocmV0KTsNCisJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiZHBjZF9z aW5rX2NvdW50OiAlZCBpdDY1MDUtPnNpbmtfY291bnQ6JWQiLA0KKwkJCSAgICAgZHBjZF9zaW5r X2NvdW50LCBpdDY1MDUtPnNpbmtfY291bnQpOw0KKw0KKwlpZiAoaXQ2NTA1LT5icmFuY2hfZGV2 aWNlICYmIGRwY2Rfc2lua19jb3VudCAhPSBpdDY1MDUtPnNpbmtfY291bnQpIHsNCisJCW1lbXNl dChpdDY1MDUtPmRwY2QsIDAsIHNpemVvZihpdDY1MDUtPmRwY2QpKTsNCisJCWl0NjUwNS0+c2lu a19jb3VudCA9IGRwY2Rfc2lua19jb3VudDsNCisJCWtmcmVlKGl0NjUwNS0+ZWRpZCk7DQorCQlp dDY1MDUtPmVkaWQgPSBOVUxMOw0KKwkJaXQ2NTA1X3Jlc2V0X2xvZ2ljKGl0NjUwNSk7DQorCQlp dDY1MDVfaW50X21hc2tfZW5hYmxlKGl0NjUwNSk7DQorCQlpdDY1MDVfaW5pdChpdDY1MDUpOw0K KwkJcmV0dXJuIDA7DQorCX0NCisNCisJZHBfaXJxX3ZlY3RvciA9IGl0NjUwNV9kcGNkX3JlYWQo aXQ2NTA1LCBEUF9ERVZJQ0VfU0VSVklDRV9JUlFfVkVDVE9SKTsNCisJaWYgKGRwX2lycV92ZWN0 b3IgPCAwKQ0KKwkJcmV0dXJuIGRwX2lycV92ZWN0b3I7DQorDQorCURSTV9ERVZfREVCVUdfRFJJ VkVSKGRldiwgImRwX2lycV92ZWN0b3IgPSAweCUwMngiLCBkcF9pcnFfdmVjdG9yKTsNCisNCisJ aWYgKGRwX2lycV92ZWN0b3IgJiBEUF9DUF9JUlEpIHsNCisJCWl0NjUwNV9zZXRfYml0cyhpdDY1 MDUsIFJFR19IRENQX1RSSUdHRVIsIEhEQ1BfVFJJR0dFUl9DUElSUSwNCisJCQkJSERDUF9UUklH R0VSX0NQSVJRKTsNCisNCisJCWJzdGF0dXMgPSBpdDY1MDVfZHBjZF9yZWFkKGl0NjUwNSwgRFBf QVVYX0hEQ1BfQlNUQVRVUyk7DQorCQlpZiAoYnN0YXR1cyA8IDApDQorCQkJcmV0dXJuIGJzdGF0 dXM7DQorDQorCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJCc3RhdHVzID0gMHglMDJ4Iiwg YnN0YXR1cyk7DQorCX0NCisNCisJcmV0ID0gZHJtX2RwX2RwY2RfcmVhZF9saW5rX3N0YXR1cygm aXQ2NTA1LT5hdXgsIGxpbmtfc3RhdHVzKTsNCisJaWYgKHJldCA8IDApIHsNCisJCURSTV9ERVZf RVJST1IoZGV2LCAiRmFpbCB0byByZWFkIGxpbmsgc3RhdHVzIHJldDogJWQiLA0KKwkJCSAgICAg IHJldCk7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRl diwgImxpbmsgc3RhdHVzID0gMHglKnBoIiwNCisJCQkgICAgIChpbnQpQVJSQVlfU0laRShsaW5r X3N0YXR1cyksIGxpbmtfc3RhdHVzKTsNCisNCisJaWYgKCFkcm1fZHBfY2hhbm5lbF9lcV9vayhs aW5rX3N0YXR1cywgaXQ2NTA1LT5sYW5lX2NvdW50KSkgew0KKwkJaXQ2NTA1LT5hdXRvX3RyYWlu X3JldHJ5ID0gQVVUT19UUkFJTl9SRVRSWTsNCisJCWl0NjUwNV92aWRlb19yZXNldChpdDY1MDUp Ow0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVfY2hlY2tf cmVnMDYoc3RydWN0IGl0NjUwNSAqaXQ2NTA1LCB1bnNpZ25lZCBpbnQgcmVnMDYpDQorew0KKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisJYm9vbCBkYXRhOw0K Kw0KKwlpZiAocmVnMDYgJiBJTlRfSFBEX0NIQU5HRSkgew0KKwkJZGF0YSA9IGl0NjUwNV9nZXRf c2lua19ocGRfc3RhdHVzKGl0NjUwNSk7DQorCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJo cGQgY2hhbmdlIGludGVycnVwdCwgY2hhbmdlIHRvICVzIiwNCisJCQkJICAgICBkYXRhID8gImhp Z2giIDogImxvdyIpOw0KKw0KKwkJZHJtX2hlbHBlcl9ocGRfaXJxX2V2ZW50KGl0NjUwNS0+Y29u bmVjdG9yLmRldik7DQorCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJpdDY1MDUtPnNpbmtf Y291bnQ6ICVkIiwNCisJCQkJICAgICBpdDY1MDUtPnNpbmtfY291bnQpOw0KKw0KKwkJaWYgKGRh dGEpIHsNCisJCQl3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJml0NjUwNS0+d2FpdF9lZGlk X2NvbXBsZXRlLA0KKwkJCQkJCSAgICBtc2Vjc190b19qaWZmaWVzKDYwMDApKTsNCisJCQlpdDY1 MDVfbGFuZV90ZXJtaW5hdGlvbl9vbihpdDY1MDUpOw0KKwkJCWl0NjUwNV9sYW5lX3Bvd2VyX29u KGl0NjUwNSk7DQorDQorCQkJLyoNCisJCQkgKiBmb3Igc29tZSBkb25nbGUgd2hpY2ggaXNzdWUg SFBEX2lycQ0KKwkJCSAqIHdoZW4gc2luayBjb3VudCBjaGFuZ2UgZnJvbSAgMC0+MQ0KKwkJCSAq IGl0NjUwNSBub3QgYWJsZSB0byByZWNlaXZlIEhQRF9JUlENCisJCQkgKiBpZiBIVyBuZXZlciBn byBpbnRvIHRyYWluaWcgZG9uZQ0KKwkJCSAqLw0KKw0KKwkJCWlmIChpdDY1MDUtPmJyYW5jaF9k ZXZpY2UgJiYgaXQ2NTA1LT5zaW5rX2NvdW50ID09IDApDQorCQkJCXNjaGVkdWxlX3dvcmsoJml0 NjUwNS0+bGlua193b3Jrcyk7DQorDQorCQkJaWYgKCFpdDY1MDVfZ2V0X3ZpZGVvX3N0YXR1cyhp dDY1MDUpKQ0KKwkJCQlpdDY1MDVfdmlkZW9fcmVzZXQoaXQ2NTA1KTsNCisNCisJCQlpdDY1MDVf Y2FsY192aWRlb19pbmZvKGl0NjUwNSk7DQorCQl9IGVsc2Ugew0KKwkJCWtmcmVlKGl0NjUwNS0+ ZWRpZCk7DQorCQkJaXQ2NTA1LT5lZGlkID0gTlVMTDsNCisJCQltZW1zZXQoaXQ2NTA1LT5kcGNk LCAwLCBzaXplb2YoaXQ2NTA1LT5kcGNkKSk7DQorDQorCQkJaWYgKGl0NjUwNS0+aGRjcF9kZXNp cmVkKQ0KKwkJCQlpdDY1MDVfc3RvcF9oZGNwKGl0NjUwNSk7DQorDQorCQkJaXQ2NTA1X3ZpZGVv X2Rpc2FibGUoaXQ2NTA1KTsNCisJCQlpdDY1MDVfZGlzYWJsZV9hdWRpbyhpdDY1MDUpOw0KKwkJ CWl0NjUwNV9zdG9wX2xpbmtfdHJhaW4oaXQ2NTA1KTsNCisJCQlpdDY1MDVfbGFuZV9vZmYoaXQ2 NTA1KTsNCisJCQlyZXR1cm47DQorCQl9DQorCX0NCisNCisJaWYgKHJlZzA2ICYgSU5UX1JFQ0VJ VkVfSFBEX0lSUSkgew0KKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiaHBkX2lycSBpbnRl cnJ1cHQiKTsNCisNCisJCWlmIChpdDY1MDVfcHJvY2Vzc19ocGRfaXJxKGl0NjUwNSkgPCAwKQ0K KwkJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInByb2Nlc3MgaHBkX2lycSBmYWlsISIpOw0K Kwl9DQorDQorCWlmIChyZWcwNiAmIElOVF9TQ0RUX0NIQU5HRSkgew0KKwkJZGF0YSA9IGl0NjUw NV9nZXRfdmlkZW9fc3RhdHVzKGl0NjUwNSk7DQorCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYs ICJ2aWRlbyBzdGFibGUgY2hhbmdlIGludGVycnVwdCwgJXMiLA0KKwkJCQkgICAgIGRhdGEgPyAi c3RhYmxlIiA6ICJ1bnN0YWJsZSIpOw0KKwkJaXQ2NTA1X2NhbGNfdmlkZW9faW5mbyhpdDY1MDUp Ow0KKw0KKwkJaWYgKGRhdGEpDQorCQkJc2NoZWR1bGVfd29yaygmaXQ2NTA1LT5saW5rX3dvcmtz KTsNCisJfQ0KKw0KKwlpZiAocmVnMDYgJiBJTlRfSERDUF9ET05FKSB7DQorCQlEUk1fREVWX0RF QlVHX0RSSVZFUihkZXYsICJoZGNwIGRvbmUgaW50ZXJydXB0Iik7DQorCQlpdDY1MDUtPmhkY3Bf c3RhdHVzID0gSERDUF9BVVRIX0RPTkU7DQorCQlpdDY1MDVfc2hvd19oZGNwX2luZm8oaXQ2NTA1 KTsNCisJfQ0KKw0KKwlpZiAocmVnMDYgJiBJTlRfSERDUF9GQUlMKSB7DQorCQlEUk1fREVWX0RF QlVHX0RSSVZFUihkZXYsICJoZGNwIGZhaWwgaW50ZXJydXB0Iik7DQorCQlpdDY1MDUtPmhkY3Bf c3RhdHVzID0gSERDUF9BVVRIX0lETEU7DQorCQlpdDY1MDVfc2hvd19oZGNwX2luZm8oaXQ2NTA1 KTsNCisJCWl0NjUwNV9zdGFydF9oZGNwKGl0NjUwNSk7DQorCX0NCit9DQorDQorc3RhdGljIHZv aWQgaXQ2NTA1X2NoZWNrX3JlZzA3KHN0cnVjdCBpdDY1MDUgKml0NjUwNSwgdW5zaWduZWQgaW50 IHJlZzA3KQ0KK3sNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7 DQorDQorCWlmIChyZWcwNyAmIElOVF9BVVhfQ01EX0ZBSUwpDQorCQlEUk1fREVWX0RFQlVHX0RS SVZFUihkZXYsICJBVVggUEMgUmVxdWVzdCBGYWlsIEludGVycnVwdCIpOw0KKw0KKwlpZiAocmVn MDcgJiBJTlRfSERDUF9LU1ZfQ0hFQ0spIHsNCisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwg IkhEQ1AgZXZlbnQgSW50ZXJydXB0Iik7DQorCQlzY2hlZHVsZV93b3JrKCZpdDY1MDUtPmhkY3Bf d2FpdF9rc3ZfbGlzdCk7DQorCX0NCisNCisJaWYgKHJlZzA3ICYgSU5UX0FVRElPX0ZJRk9fRVJS T1IpIHsNCisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImF1ZGlvIGZpZm8gZXJyb3IgSW50 ZXJydXB0Iik7DQorDQorCQlpZiAoaXQ2NTA1X2F1ZGlvX2lucHV0KGl0NjUwNSkpDQorCQkJaXQ2 NTA1X2VuYWJsZV9hdWRpbyhpdDY1MDUpOw0KKwl9DQorDQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0 NjUwNV9jaGVja19yZWcwOChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUsIHVuc2lnbmVkIGludCByZWcw OCkNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKw0K KwlpZiAocmVnMDggJiBJTlRfTElOS19UUkFJTl9GQUlMKSB7DQorCQlEUk1fREVWX0RFQlVHX0RS SVZFUihkZXYsICJsaW5rIHRyYWluaW5nIGZhaWwgaW50ZXJydXB0Iik7DQorCQlzY2hlZHVsZV93 b3JrKCZpdDY1MDUtPmxpbmtfd29ya3MpOw0KKwl9DQorDQorCWlmIChyZWcwOCAmIElOVF9WSURf RklGT19FUlJPUikgew0KKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAidmlkZW8gZmlmbyBv dmVyZmxvdyBpbnRlcnJ1cHQiKTsNCisJCWl0NjUwNS0+YXV0b190cmFpbl9yZXRyeSA9IEFVVE9f VFJBSU5fUkVUUlk7DQorCQlmbHVzaF93b3JrKCZpdDY1MDUtPmxpbmtfd29ya3MpOw0KKwkJaXQ2 NTA1X3N0b3BfaGRjcChpdDY1MDUpOw0KKwkJaXQ2NTA1X3ZpZGVvX3Jlc2V0KGl0NjUwNSk7DQor CX0NCisNCisJaWYgKHJlZzA4ICYgSU5UX0lPX0xBVENIX0ZJRk9fT1ZFUkZMT1cpIHsNCisJCURS TV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIklPIGxhdGNoIGZpZm8gb3ZlcmZsb3cgaW50ZXJydXB0 Iik7DQorCQlpdDY1MDUtPmF1dG9fdHJhaW5fcmV0cnkgPSBBVVRPX1RSQUlOX1JFVFJZOw0KKwkJ Zmx1c2hfd29yaygmaXQ2NTA1LT5saW5rX3dvcmtzKTsNCisJCWl0NjUwNV9zdG9wX2hkY3AoaXQ2 NTA1KTsNCisJCWl0NjUwNV92aWRlb19yZXNldChpdDY1MDUpOw0KKwl9DQorfQ0KKw0KK3N0YXRp YyBpcnFyZXR1cm5fdCBpdDY1MDVfaW50X3RocmVhZGVkX2hhbmRsZXIoaW50IHVudXNlZCwgdm9p ZCAqZGF0YSkNCit7DQorCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGRhdGE7DQorCXN0cnVjdCBk ZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKwlpbnQgcmVnMDYsIHJlZzA3LCBy ZWcwODsNCisNCisJbXNsZWVwKDEwMCk7DQorCW11dGV4X2xvY2soJml0NjUwNS0+ZXh0Y29uX2xv Y2spOw0KKw0KKwlpZiAoaXQ2NTA1LT5lbmFibGVfZHJ2X2hvbGQgfHwgIWl0NjUwNS0+cG93ZXJl ZCkNCisJCWdvdG8gdW5sb2NrOw0KKw0KKwlyZWcwNiA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgSU5U X1NUQVRVU18wMSk7DQorCXJlZzA3ID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBJTlRfU1RBVFVTXzAy KTsNCisJcmVnMDggPSBpdDY1MDVfcmVhZChpdDY1MDUsIElOVF9TVEFUVVNfMDMpOw0KKw0KKwlp dDY1MDVfd3JpdGUoaXQ2NTA1LCBJTlRfU1RBVFVTXzAxLCByZWcwNik7DQorCWl0NjUwNV93cml0 ZShpdDY1MDUsIElOVF9TVEFUVVNfMDIsIHJlZzA3KTsNCisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwg SU5UX1NUQVRVU18wMywgcmVnMDgpOw0KKw0KKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJy ZWcwNiA9IDB4JTAyeCIsIHJlZzA2KTsNCisJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAicmVn MDcgPSAweCUwMngiLCByZWcwNyk7DQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInJlZzA4 ID0gMHglMDJ4IiwgcmVnMDgpOw0KKwlpdDY1MDVfZGVidWdfcHJpbnQoaXQ2NTA1LCBSRUdfU1lT VEVNX1NUUywgIiIpOw0KKw0KKwlpZiAocmVnMDYgIT0gMCkNCisJCWl0NjUwNV9jaGVja19yZWcw NihpdDY1MDUsIHJlZzA2KTsNCisNCisJaWYgKHJlZzA3ICE9IDApDQorCQlpdDY1MDVfY2hlY2tf cmVnMDcoaXQ2NTA1LCByZWcwNyk7DQorDQorCWlmIChyZWcwOCAhPSAwKQ0KKwkJaXQ2NTA1X2No ZWNrX3JlZzA4KGl0NjUwNSwgcmVnMDgpOw0KKw0KK3VubG9jazoNCisJbXV0ZXhfdW5sb2NrKCZp dDY1MDUtPmV4dGNvbl9sb2NrKTsNCisNCisJcmV0dXJuIElSUV9IQU5ETEVEOw0KK30NCisNCitz dGF0aWMgaW50IGl0NjUwNV9wb3dlcm9uKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCXN0 cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKwlzdHJ1Y3QgaXQ2NTA1 X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gJml0NjUwNS0+cGRhdGE7DQorCWludCBlcnI7DQorDQor CWlmIChpdDY1MDUtPnBvd2VyZWQpIHsNCisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIml0 NjUwNSBhbHJlYWR5IHBvd2VyZWQgb24iKTsNCisJCXJldHVybiAwOw0KKwl9DQorDQorCWlmIChw ZGF0YS0+cHdyMTgpIHsNCisJCWVyciA9IHJlZ3VsYXRvcl9lbmFibGUocGRhdGEtPnB3cjE4KTsN CisJCWlmIChlcnIpIHsNCisJCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJGYWlsZWQgdG8g ZW5hYmxlIFZERDE4OiAlZCIsDQorCQkJCQkgICAgIGVycik7DQorCQkJcmV0dXJuIGVycjsNCisJ CX0NCisJfQ0KKw0KKwlpZiAocGRhdGEtPm92ZGQpIHsNCisJCS8qIHRpbWUgaW50ZXJ2YWwgYmV0 d2VlbiBJVkREIGFuZCBPVkREIGF0IGxlYXN0IGJlIDFtcyAqLw0KKwkJdXNsZWVwX3JhbmdlKDEw MDAsIDIwMDApOw0KKwkJZXJyID0gcmVndWxhdG9yX2VuYWJsZShwZGF0YS0+b3ZkZCk7DQorCQlp ZiAoZXJyKSB7DQorCQkJcmVndWxhdG9yX2Rpc2FibGUocGRhdGEtPnB3cjE4KTsNCisJCQlyZXR1 cm4gZXJyOw0KKwkJfQ0KKwl9DQorCS8qIHRpbWUgaW50ZXJ2YWwgYmV0d2VlbiBPVkREIGFuZCBT WVNSU1ROIGF0IGxlYXN0IGJlIDEwbXMgKi8NCisJaWYgKHBkYXRhLT5ncGlvZF9yZXNldCkgew0K KwkJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7DQorCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xl ZXAocGRhdGEtPmdwaW9kX3Jlc2V0LCAwKTsNCisJCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsN CisJCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChwZGF0YS0+Z3Bpb2RfcmVzZXQsIDEpOw0KKwkJ dXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7DQorCX0NCisNCisJaXQ2NTA1X3Jlc2V0X2xvZ2lj KGl0NjUwNSk7DQorCWl0NjUwNV9pbnRfbWFza19lbmFibGUoaXQ2NTA1KTsNCisJaXQ2NTA1X2lu aXQoaXQ2NTA1KTsNCisJaXQ2NTA1X2xhbmVfb2ZmKGl0NjUwNSk7DQorDQorCWl0NjUwNS0+cG93 ZXJlZCA9IHRydWU7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IGl0NjUwNV9w b3dlcm9mZihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYg PSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisJc3RydWN0IGl0NjUwNV9wbGF0Zm9ybV9kYXRhICpw ZGF0YSA9ICZpdDY1MDUtPnBkYXRhOw0KKwlpbnQgZXJyOw0KKw0KKwlpZiAoIWl0NjUwNS0+cG93 ZXJlZCkgew0KKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAicG93ZXIgaGFkIGJlZW4gYWxy ZWFkeSBvZmYiKTsNCisJCXJldHVybiAwOw0KKwl9DQorDQorCWlmIChwZGF0YS0+Z3Bpb2RfcmVz ZXQpDQorCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAocGRhdGEtPmdwaW9kX3Jlc2V0LCAwKTsN CisNCisJaWYgKHBkYXRhLT5wd3IxOCkgew0KKwkJZXJyID0gcmVndWxhdG9yX2Rpc2FibGUocGRh dGEtPnB3cjE4KTsNCisJCWlmIChlcnIpDQorCQkJcmV0dXJuIGVycjsNCisJfQ0KKw0KKwlpZiAo cGRhdGEtPm92ZGQpIHsNCisJCWVyciA9IHJlZ3VsYXRvcl9kaXNhYmxlKHBkYXRhLT5vdmRkKTsN CisJCWlmIChlcnIpDQorCQkJcmV0dXJuIGVycjsNCisJfQ0KKw0KKwlpdDY1MDUtPnBvd2VyZWQg PSBmYWxzZTsNCisJa2ZyZWUoaXQ2NTA1LT5lZGlkKTsNCisJaXQ2NTA1LT5lZGlkID0gTlVMTDsN CisJaXQ2NTA1LT5zaW5rX2NvdW50ID0gMDsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRp YyBpbmxpbmUgc3RydWN0IGl0NjUwNSAqY29ubmVjdG9yX3RvX2l0NjUwNShzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqYykNCit7DQorCXJldHVybiBjb250YWluZXJfb2YoYywgc3RydWN0IGl0NjUwNSwg Y29ubmVjdG9yKTsNCit9DQorDQorc3RhdGljIGludCBpdDY1MDVfZ2V0X21vZGVzKHN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3IpDQorew0KKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBj b25uZWN0b3JfdG9faXQ2NTA1KGNvbm5lY3Rvcik7DQorCWludCBlcnIsIG51bV9tb2RlcyA9IDAs IGk7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKw0KKwlp ZiAoaXQ2NTA1LT5lZGlkKQ0KKwkJcmV0dXJuIGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uZWN0b3Is IGl0NjUwNS0+ZWRpZCk7DQorDQorCW11dGV4X2xvY2soJml0NjUwNS0+bW9kZV9sb2NrKTsNCisJ cmVpbml0X2NvbXBsZXRpb24oJml0NjUwNS0+d2FpdF9lZGlkX2NvbXBsZXRlKTsNCisNCisJZm9y IChpID0gMDsgaSA8IDM7IGkrKykgew0KKwkJaWYgKCFpdDY1MDVfZ2V0X3NpbmtfaHBkX3N0YXR1 cyhpdDY1MDUpKQ0KKwkJCWdvdG8gdW5sb2NrOw0KKw0KKwkJaXQ2NTA1LT5lZGlkID0gZHJtX2Rv X2dldF9lZGlkKCZpdDY1MDUtPmNvbm5lY3RvciwNCisJCQkJCSAgICAgICBpdDY1MDVfZ2V0X2Vk aWRfYmxvY2ssIGl0NjUwNSk7DQorDQorCQlpZiAoaXQ2NTA1LT5lZGlkKQ0KKwkJCWJyZWFrOw0K Kwl9DQorCWlmICghaXQ2NTA1LT5lZGlkKSB7DQorCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxl ZCB0byByZWFkIEVESUQiKTsNCisJCW51bV9tb2RlcyA9IC1FSU87DQorCQlnb3RvIHVubG9jazsN CisJfQ0KKw0KKwllcnIgPSBkcm1fY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5l Y3RvciwgaXQ2NTA1LT5lZGlkKTsNCisJaWYgKGVycikgew0KKwkJRFJNX0RFVl9FUlJPUihkZXYs ICJGYWlsZWQgdG8gdXBkYXRlIEVESUQgcHJvcGVydHk6ICVkIiwgZXJyKTsNCisJCW51bV9tb2Rl cyA9IGVycjsNCisJCWdvdG8gdW5sb2NrOw0KKwl9DQorDQorCW51bV9tb2RlcyA9IGRybV9hZGRf ZWRpZF9tb2Rlcyhjb25uZWN0b3IsIGl0NjUwNS0+ZWRpZCk7DQorDQordW5sb2NrOg0KKwljb21w bGV0ZSgmaXQ2NTA1LT53YWl0X2VkaWRfY29tcGxldGUpOw0KKwltdXRleF91bmxvY2soJml0NjUw NS0+bW9kZV9sb2NrKTsNCisNCisJcmV0dXJuIG51bV9tb2RlczsNCit9DQorDQorc3RhdGljIGNv bnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyBpdDY1MDVfY29ubmVjdG9yX2hl bHBlcl9mdW5jcyA9IHsNCisJLmdldF9tb2RlcyA9IGl0NjUwNV9nZXRfbW9kZXMsDQorfTsNCisN CitzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBpdDY1MDVfZGV0ZWN0KHN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3IsDQorCQkJCQkgICAgICAgYm9vbCBmb3JjZSkNCit7DQor CXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGNvbm5lY3Rvcl90b19pdDY1MDUoY29ubmVjdG9yKTsN CisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQorCWVudW0gZHJt X2Nvbm5lY3Rvcl9zdGF0dXMgc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7 DQorDQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIml0NjUwNS0+c2lua19jb3VudDolZCBw b3dlcmVkOiVkIiwNCisJCQkgICAgIGl0NjUwNS0+c2lua19jb3VudCwgaXQ2NTA1LT5wb3dlcmVk KTsNCisNCisJbXV0ZXhfbG9jaygmaXQ2NTA1LT5tb2RlX2xvY2spOw0KKw0KKwlpZiAoIWl0NjUw NS0+cG93ZXJlZCkNCisJCWdvdG8gdW5sb2NrOw0KKw0KKwlpZiAoaXQ2NTA1LT5lbmFibGVfZHJ2 X2hvbGQpIHsNCisJCXN0YXR1cyA9IGl0NjUwNV9nZXRfc2lua19ocGRfc3RhdHVzKGl0NjUwNSkg Pw0KKwkJCQkJY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQgOg0KKwkJCQkJY29ubmVjdG9yX3N0 YXR1c19kaXNjb25uZWN0ZWQ7DQorCQlnb3RvIHVubG9jazsNCisJfQ0KKw0KKwlpZiAoaXQ2NTA1 X2dldF9zaW5rX2hwZF9zdGF0dXMoaXQ2NTA1KSkgew0KKwkJaXQ2NTA1X2F1eF9vbihpdDY1MDUp Ow0KKwkJaXQ2NTA1X2RybV9kcF9saW5rX3Byb2JlKCZpdDY1MDUtPmF1eCwgJml0NjUwNS0+bGlu ayk7DQorCQlpdDY1MDVfZHJtX2RwX2xpbmtfcG93ZXJfdXAoJml0NjUwNS0+YXV4LCAmaXQ2NTA1 LT5saW5rKTsNCisJCWl0NjUwNS0+YXV0b190cmFpbl9yZXRyeSA9IEFVVE9fVFJBSU5fUkVUUlk7 DQorDQorCQlpZiAoaXQ2NTA1LT5kcGNkWzBdID09IDApIHsNCisJCQlpdDY1MDVfZ2V0X2RwY2Qo aXQ2NTA1LCBEUF9EUENEX1JFViwgaXQ2NTA1LT5kcGNkLA0KKwkJCQkJQVJSQVlfU0laRShpdDY1 MDUtPmRwY2QpKTsNCisJCQlpdDY1MDVfdmFyaWFibGVfY29uZmlnKGl0NjUwNSk7DQorCQkJaXQ2 NTA1X3BhcnNlX2xpbmtfY2FwYWJpbGl0aWVzKGl0NjUwNSk7DQorCQl9DQorDQorCQlpdDY1MDUt PnNpbmtfY291bnQgPSBEUF9HRVRfU0lOS19DT1VOVChpdDY1MDVfZHBjZF9yZWFkKGl0NjUwNSwN CisJCQkJCQkgICAgICAgRFBfU0lOS19DT1VOVCkpOw0KKwkJRFJNX0RFVl9ERUJVR19EUklWRVIo ZGV2LCAiaXQ2NTA1LT5zaW5rX2NvdW50OiVkIGJyYW5jaDolZCIsDQorCQkJCSAgICAgaXQ2NTA1 LT5zaW5rX2NvdW50LCBpdDY1MDUtPmJyYW5jaF9kZXZpY2UpOw0KKw0KKwkJaWYgKGl0NjUwNS0+ YnJhbmNoX2RldmljZSkgew0KKwkJCXN0YXR1cyA9IChpdDY1MDUtPnNpbmtfY291bnQgIT0gMCkg Pw0KKwkJCQkgY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQgOg0KKwkJCQkgY29ubmVjdG9yX3N0 YXR1c19kaXNjb25uZWN0ZWQ7DQorCQl9IGVsc2Ugew0KKwkJCXN0YXR1cyA9IGNvbm5lY3Rvcl9z dGF0dXNfY29ubmVjdGVkOw0KKwkJfQ0KKwl9IGVsc2Ugew0KKwkJaXQ2NTA1LT5zaW5rX2NvdW50 ID0gMDsNCisJCW1lbXNldChpdDY1MDUtPmRwY2QsIDAsIHNpemVvZihpdDY1MDUtPmRwY2QpKTsN CisJfQ0KKw0KK3VubG9jazoNCisJaWYgKGl0NjUwNS0+Y29ubmVjdG9yX3N0YXR1cyAhPSBzdGF0 dXMpIHsNCisJCWl0NjUwNS0+Y29ubmVjdG9yX3N0YXR1cyA9IHN0YXR1czsNCisJCWl0NjUwNV9w bHVnZ2VkX3N0YXR1c190b19jb2RlYyhpdDY1MDUpOw0KKwl9DQorDQorCW11dGV4X3VubG9jaygm aXQ2NTA1LT5tb2RlX2xvY2spOw0KKw0KKwlyZXR1cm4gc3RhdHVzOw0KK30NCisNCitzdGF0aWMg Y29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3MgaXQ2NTA1X2Nvbm5lY3Rvcl9mdW5jcyA9 IHsNCisJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9k ZXMsDQorCS5kZXRlY3QgPSBpdDY1MDVfZGV0ZWN0LA0KKwkuZGVzdHJveSA9IGRybV9jb25uZWN0 b3JfY2xlYW51cCwNCisJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0 LA0KKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rv cl9kdXBsaWNhdGVfc3RhdGUsDQorCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNf aGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlLA0KK307DQorDQorc3RhdGljIGludCBpdDY1 MDVfZXh0Y29uX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwNCisJCQkJICB1 bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpDQorew0KKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1 MDUgPSBjb250YWluZXJfb2Yoc2VsZiwgc3RydWN0IGl0NjUwNSwgZXZlbnRfbmIpOw0KKw0KKwlz Y2hlZHVsZV93b3JrKCZpdDY1MDUtPmV4dGNvbl93cSk7DQorCXJldHVybiBOT1RJRllfRE9ORTsN Cit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X2V4dGNvbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVj dCAqd29yaykNCit7DQorCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGNvbnRhaW5lcl9vZih3b3Jr LCBzdHJ1Y3QgaXQ2NTA1LCBleHRjb25fd3EpOw0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2 NTA1LT5jbGllbnQtPmRldjsNCisJaW50IHN0YXRlID0gZXh0Y29uX2dldF9zdGF0ZShpdDY1MDUt PmV4dGNvbiwgRVhUQ09OX0RJU1BfRFApOw0KKwl1bnNpZ25lZCBpbnQgcHdyb2ZmcmV0cnkgPSAw Ow0KKw0KKwlpZiAoaXQ2NTA1LT5lbmFibGVfZHJ2X2hvbGQpDQorCQlyZXR1cm47DQorDQorCW11 dGV4X2xvY2soJml0NjUwNS0+ZXh0Y29uX2xvY2spOw0KKw0KKwlEUk1fREVWX0RFQlVHX0RSSVZF UihkZXYsICJFWFRDT05fRElTUF9EUCA9IDB4JTAyeCIsIHN0YXRlKTsNCisJaWYgKHN0YXRlID4g MCkgew0KKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAic3RhcnQgdG8gcG93ZXIgb24iKTsN CisJCW1zbGVlcCgxMDApOw0KKwkJaXQ2NTA1X3Bvd2Vyb24oaXQ2NTA1KTsNCisJfSBlbHNlIHsN CisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInN0YXJ0IHRvIHBvd2VyIG9mZiIpOw0KKwkJ d2hpbGUgKGl0NjUwNV9wb3dlcm9mZihpdDY1MDUpICYmIHB3cm9mZnJldHJ5KysgPCA1KSB7DQor CQkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAicG93ZXIgb2ZmIGZhaWwgJWQgdGltZXMiLA0K KwkJCQkJICAgICBwd3JvZmZyZXRyeSk7DQorCQl9DQorDQorCQlkcm1faGVscGVyX2hwZF9pcnFf ZXZlbnQoaXQ2NTA1LT5jb25uZWN0b3IuZGV2KTsNCisJCW1lbXNldChpdDY1MDUtPmRwY2QsIDAs IHNpemVvZihpdDY1MDUtPmRwY2QpKTsNCisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInBv d2VyIG9mZiBpdDY1MDUgc3VjY2VzcyEiKTsNCisJfQ0KKw0KKwltdXRleF91bmxvY2soJml0NjUw NS0+ZXh0Y29uX2xvY2spOw0KK30NCisNCitzdGF0aWMgaW50IGl0NjUwNV91c2Vfbm90aWZpZXJf bW9kdWxlKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCWludCByZXQ7DQorCXN0cnVjdCBk ZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKw0KKwlpdDY1MDUtPmV2ZW50X25i Lm5vdGlmaWVyX2NhbGwgPSBpdDY1MDVfZXh0Y29uX25vdGlmaWVyOw0KKwlJTklUX1dPUksoJml0 NjUwNS0+ZXh0Y29uX3dxLCBpdDY1MDVfZXh0Y29uX3dvcmspOw0KKwlyZXQgPSBkZXZtX2V4dGNv bl9yZWdpc3Rlcl9ub3RpZmllcigmaXQ2NTA1LT5jbGllbnQtPmRldiwNCisJCQkJCSAgICBpdDY1 MDUtPmV4dGNvbiwgRVhUQ09OX0RJU1BfRFAsDQorCQkJCQkgICAgJml0NjUwNS0+ZXZlbnRfbmIp Ow0KKwlpZiAocmV0KSB7DQorCQlEUk1fREVWX0VSUk9SKGRldiwgImZhaWxlZCB0byByZWdpc3Rl ciBub3RpZmllciBmb3IgRFAiKTsNCisJCXJldHVybiByZXQ7DQorCX0NCisNCisJc2NoZWR1bGVf d29yaygmaXQ2NTA1LT5leHRjb25fd3EpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGlj IHZvaWQgaXQ2NTA1X3JlbW92ZV9ub3RpZmllcl9tb2R1bGUoc3RydWN0IGl0NjUwNSAqaXQ2NTA1 KQ0KK3sNCisJaWYgKGl0NjUwNS0+ZXh0Y29uKSB7DQorCQlkZXZtX2V4dGNvbl91bnJlZ2lzdGVy X25vdGlmaWVyKCZpdDY1MDUtPmNsaWVudC0+ZGV2LA0KKwkJCQkJCWl0NjUwNS0+ZXh0Y29uLAlF WFRDT05fRElTUF9EUCwNCisJCQkJCQkmaXQ2NTA1LT5ldmVudF9uYik7DQorDQorCQlmbHVzaF93 b3JrKCZpdDY1MDUtPmV4dGNvbl93cSk7DQorCX0NCit9DQorDQorc3RhdGljIHZvaWQgX19tYXli ZV91bnVzZWQgaXQ2NTA1X2RlbGF5ZWRfYXVkaW8oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0K K3sNCisJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBp dDY1MDUsDQorCQkJCQkgICAgIGRlbGF5ZWRfYXVkaW8ud29yayk7DQorDQorCURSTV9ERVZfREVC VUdfRFJJVkVSKCZpdDY1MDUtPmNsaWVudC0+ZGV2LCAic3RhcnQiKTsNCisNCisJaWYgKCFpdDY1 MDUtPnBvd2VyZWQpDQorCQlyZXR1cm47DQorDQorCWlmICghaXQ2NTA1LT5lbmFibGVfZHJ2X2hv bGQpDQorCQlpdDY1MDVfZW5hYmxlX2F1ZGlvKGl0NjUwNSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQg X19tYXliZV91bnVzZWQgaXQ2NTA1X2F1ZGlvX3NldHVwX2h3X3BhcmFtcyhzdHJ1Y3QgaXQ2NTA1 ICppdDY1MDUsDQorCQkJCQlzdHJ1Y3QgaGRtaV9jb2RlY19wYXJhbXMgKnBhcmFtcykNCit7DQor CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKwlpbnQgaSA9IDA7 DQorDQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIiVzICVkIEh6LCAlZCBiaXQsICVkIGNo YW5uZWxzXG4iLCBfX2Z1bmNfXywNCisJCQkgICAgIHBhcmFtcy0+c2FtcGxlX3JhdGUsIHBhcmFt cy0+c2FtcGxlX3dpZHRoLA0KKwkJCSAgICAgcGFyYW1zLT5jZWEuY2hhbm5lbHMpOw0KKw0KKwlp ZiAoIWl0NjUwNS0+YnJpZGdlLmVuY29kZXIpDQorCQlyZXR1cm4gLUVOT0RFVjsNCisNCisJaWYg KHBhcmFtcy0+Y2VhLmNoYW5uZWxzIDw9IDEgfHwgcGFyYW1zLT5jZWEuY2hhbm5lbHMgPiA4KSB7 DQorCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJjaGFubmVsIG51bWJlcjogJWQgbm90IHN1 cHBvcnQiLA0KKwkJCQkgICAgIGl0NjUwNS0+YXVkaW8uY2hhbm5lbF9jb3VudCk7DQorCQlyZXR1 cm4gLUVJTlZBTDsNCisJfQ0KKw0KKwlpdDY1MDUtPmF1ZGlvLmNoYW5uZWxfY291bnQgPSBwYXJh bXMtPmNlYS5jaGFubmVsczsNCisNCisJd2hpbGUgKGkgPCBBUlJBWV9TSVpFKGF1ZGlvX3NhbXBs ZV9yYXRlX21hcCkgJiYNCisJICAgICAgIHBhcmFtcy0+c2FtcGxlX3JhdGUgIT0NCisJCSAgICAg ICBhdWRpb19zYW1wbGVfcmF0ZV9tYXBbaV0uc2FtcGxlX3JhdGVfdmFsdWUpIHsNCisJCWkrKzsN CisJfQ0KKwlpZiAoaSA9PSBBUlJBWV9TSVpFKGF1ZGlvX3NhbXBsZV9yYXRlX21hcCkpIHsNCisJ CURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInNhbXBsZSByYXRlOiAlZCBIeiBub3Qgc3VwcG9y dCIsDQorCQkJCSAgICAgcGFyYW1zLT5zYW1wbGVfcmF0ZSk7DQorCQlyZXR1cm4gLUVJTlZBTDsN CisJfQ0KKwlpdDY1MDUtPmF1ZGlvLnNhbXBsZV9yYXRlID0gYXVkaW9fc2FtcGxlX3JhdGVfbWFw W2ldLnJhdGU7DQorDQorCXN3aXRjaCAocGFyYW1zLT5zYW1wbGVfd2lkdGgpIHsNCisJY2FzZSAx NjoNCisJCWl0NjUwNS0+YXVkaW8ud29yZF9sZW5ndGggPSBXT1JEX0xFTkdUSF8xNkJJVDsNCisJ CWJyZWFrOw0KKwljYXNlIDE4Og0KKwkJaXQ2NTA1LT5hdWRpby53b3JkX2xlbmd0aCA9IFdPUkRf TEVOR1RIXzE4QklUOw0KKwkJYnJlYWs7DQorCWNhc2UgMjA6DQorCQlpdDY1MDUtPmF1ZGlvLndv cmRfbGVuZ3RoID0gV09SRF9MRU5HVEhfMjBCSVQ7DQorCQlicmVhazsNCisJY2FzZSAyNDoNCisJ Y2FzZSAzMjoNCisJCWl0NjUwNS0+YXVkaW8ud29yZF9sZW5ndGggPSBXT1JEX0xFTkdUSF8yNEJJ VDsNCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAi d29yZGxlbmd0aDogJWQgYml0IG5vdCBzdXBwb3J0IiwNCisJCQkJICAgICBwYXJhbXMtPnNhbXBs ZV93aWR0aCk7DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQor DQorc3RhdGljIHZvaWQgX19tYXliZV91bnVzZWQgaXQ2NTA1X2F1ZGlvX3NodXRkb3duKHN0cnVj dCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkNCit7DQorCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9 IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KKw0KKwlpZiAoaXQ2NTA1LT5wb3dlcmVkKQ0KKwkJaXQ2 NTA1X2Rpc2FibGVfYXVkaW8oaXQ2NTA1KTsNCit9DQorDQorc3RhdGljIGludCBfX21heWJlX3Vu dXNlZCBpdDY1MDVfYXVkaW9faG9va19wbHVnZ2VkX2NiKHN0cnVjdCBkZXZpY2UgKmRldiwNCisJ CQkJCQkgICAgICAgdm9pZCAqZGF0YSwNCisJCQkJCQkgICAgICAgaGRtaV9jb2RlY19wbHVnZ2Vk X2NiIGZuLA0KKwkJCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlICpjb2RlY19kZXYpDQorew0KKwlz dHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBkYXRhOw0KKw0KKwlpdDY1MDUtPnBsdWdnZWRfY2IgPSBm bjsNCisJaXQ2NTA1LT5jb2RlY19kZXYgPSBjb2RlY19kZXY7DQorCWl0NjUwNV9wbHVnZ2VkX3N0 YXR1c190b19jb2RlYyhpdDY1MDUpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGlu bGluZSBzdHJ1Y3QgaXQ2NTA1ICpicmlkZ2VfdG9faXQ2NTA1KHN0cnVjdCBkcm1fYnJpZGdlICpi cmlkZ2UpDQorew0KKwlyZXR1cm4gY29udGFpbmVyX29mKGJyaWRnZSwgc3RydWN0IGl0NjUwNSwg YnJpZGdlKTsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X2JyaWRnZV9tb2RlX3NldChzdHJ1 Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLA0KKwkJCQkgICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqbW9kZSwNCisJCQkJICAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVz dGVkX21vZGUpDQorew0KKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBicmlkZ2VfdG9faXQ2NTA1 KGJyaWRnZSk7DQorCXN0cnVjdCBoZG1pX2F2aV9pbmZvZnJhbWUgZnJhbWU7DQorCWludCBlcnI7 DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKw0KKwlpZiAo V0FSTl9PTighaXQ2NTA1LT5wb3dlcmVkKSkNCisJCXJldHVybjsNCisNCisJbXV0ZXhfbG9jaygm aXQ2NTA1LT5tb2RlX2xvY2spOw0KKw0KKwllcnIgPSBkcm1faGRtaV9hdmlfaW5mb2ZyYW1lX2Zy b21fZGlzcGxheV9tb2RlKCZmcmFtZSwNCisJCQkJCQkgICAgICAgJml0NjUwNS0+Y29ubmVjdG9y LA0KKwkJCQkJCSAgICAgICBhZGp1c3RlZF9tb2RlKTsNCisJaWYgKGVycikgew0KKwkJRFJNX0RF Vl9FUlJPUihkZXYsICJGYWlsZWQgdG8gc2V0dXAgQVZJIGluZm9mcmFtZTogJWQiLCBlcnIpOw0K KwkJZ290byB1bmxvY2s7DQorCX0NCisNCisJaXQ2NTA1X3VwZGF0ZV92aWRlb19wYXJhbWV0ZXIo aXQ2NTA1LCBhZGp1c3RlZF9tb2RlKTsNCisNCisJZXJyID0gaXQ2NTA1X3NlbmRfdmlkZW9faW5m b2ZyYW1lKGl0NjUwNSwgJmZyYW1lKTsNCisJaWYgKGVycikNCisJCURSTV9ERVZfRVJST1IoZGV2 LCAiRmFpbGVkIHRvIHNlbmQgQVZJIGluZm9mcmFtZTogJWQiLCBlcnIpOw0KKw0KK3VubG9jazoN CisJbXV0ZXhfdW5sb2NrKCZpdDY1MDUtPm1vZGVfbG9jayk7DQorfQ0KKw0KK3N0YXRpYyBpbnQg aXQ2NTA1X2JyaWRnZV9hdHRhY2goc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwNCisJCQkJZW51 bSBkcm1fYnJpZGdlX2F0dGFjaF9mbGFncyBmbGFncykNCit7DQorCXN0cnVjdCBpdDY1MDUgKml0 NjUwNSA9IGJyaWRnZV90b19pdDY1MDUoYnJpZGdlKTsNCisJc3RydWN0IGRldmljZSAqZGV2ID0g Jml0NjUwNS0+Y2xpZW50LT5kZXY7DQorCWludCBlcnI7DQorDQorCWlmICghYnJpZGdlLT5lbmNv ZGVyKSB7DQorCQlEUk1fREVWX0VSUk9SKGRldiwgIlBhcmVudCBlbmNvZGVyIG9iamVjdCBub3Qg Zm91bmQiKTsNCisJCXJldHVybiAtRU5PREVWOw0KKwl9DQorDQorCWVyciA9IGRybV9jb25uZWN0 b3JfaW5pdChicmlkZ2UtPmRldiwgJml0NjUwNS0+Y29ubmVjdG9yLA0KKwkJCQkgJml0NjUwNV9j b25uZWN0b3JfZnVuY3MsDQorCQkJCSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQpOw0K KwlpZiAoZXJyIDwgMCkgew0KKwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gaW5pdGlh bGl6ZSBjb25uZWN0b3I6ICVkIiwgZXJyKTsNCisJCXJldHVybiBlcnI7DQorCX0NCisNCisJZHJt X2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZpdDY1MDUtPmNvbm5lY3RvciwNCisJCQkJICZpdDY1MDVf Y29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7DQorDQorCWl0NjUwNS0+Y29ubmVjdG9yLnBvbGxlZCA9 IERSTV9DT05ORUNUT1JfUE9MTF9IUEQ7DQorDQorCWVyciA9IGRybV9jb25uZWN0b3JfYXR0YWNo X2VuY29kZXIoJml0NjUwNS0+Y29ubmVjdG9yLCBicmlkZ2UtPmVuY29kZXIpOw0KKwlpZiAoZXJy IDwgMCkgew0KKwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gbGluayB1cCBjb25uZWN0 b3IgdG8gZW5jb2RlcjogJWQiLA0KKwkJCSAgICAgIGVycik7DQorCQlnb3RvIGNsZWFudXBfY29u bmVjdG9yOw0KKwl9DQorDQorCWVyciA9IGRybV9jb25uZWN0b3JfcmVnaXN0ZXIoJml0NjUwNS0+ Y29ubmVjdG9yKTsNCisJaWYgKGVyciA8IDApIHsNCisJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFp bGVkIHRvIHJlZ2lzdGVyIGNvbm5lY3RvcjogJWQiLCBlcnIpOw0KKwkJZ290byBjbGVhbnVwX2Nv bm5lY3RvcjsNCisJfQ0KKw0KKwlpZiAoaXQ2NTA1LT5leHRjb24pIHsNCisJCWVyciA9IGl0NjUw NV91c2Vfbm90aWZpZXJfbW9kdWxlKGl0NjUwNSk7DQorCQlpZiAoZXJyIDwgMCkgew0KKwkJCWRy bV9jb25uZWN0b3JfdW5yZWdpc3RlcigmaXQ2NTA1LT5jb25uZWN0b3IpOw0KKwkJCWdvdG8gY2xl YW51cF9jb25uZWN0b3I7DQorCQl9DQorCX0NCisNCisJcmV0dXJuIDA7DQorDQorY2xlYW51cF9j b25uZWN0b3I6DQorCWRybV9jb25uZWN0b3JfY2xlYW51cCgmaXQ2NTA1LT5jb25uZWN0b3IpOw0K KwlyZXR1cm4gZXJyOw0KK30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVfYnJpZGdlX2RldGFjaChz dHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQ0KK3sNCisJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0g YnJpZGdlX3RvX2l0NjUwNShicmlkZ2UpOw0KKw0KKwlmbHVzaF93b3JrKCZpdDY1MDUtPmxpbmtf d29ya3MpOw0KKwlpdDY1MDVfcmVtb3ZlX25vdGlmaWVyX21vZHVsZShpdDY1MDUpOw0KKwlkcm1f Y29ubmVjdG9yX3VucmVnaXN0ZXIoJml0NjUwNS0+Y29ubmVjdG9yKTsNCisJZHJtX2Nvbm5lY3Rv cl9jbGVhbnVwKCZpdDY1MDUtPmNvbm5lY3Rvcik7DQorfQ0KKw0KK3N0YXRpYyBlbnVtIGRybV9t b2RlX3N0YXR1cw0KK2l0NjUwNV9icmlkZ2VfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2JyaWRnZSAq YnJpZGdlLA0KKwkJCSBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfaW5mbyAqaW5mbywNCisJCQkg Y29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpDQorew0KKwlzdHJ1Y3QgaXQ2NTA1 ICppdDY1MDUgPSBicmlkZ2VfdG9faXQ2NTA1KGJyaWRnZSk7DQorDQorCWlmIChtb2RlLT5mbGFn cyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKQ0KKwkJcmV0dXJuIE1PREVfTk9fSU5URVJMQUNF Ow0KKw0KKwlpZiAobW9kZS0+Y2xvY2sgPiBEUElfUElYRUxfQ0xLX01BWCkNCisJCXJldHVybiBN T0RFX0NMT0NLX0hJR0g7DQorDQorCWl0NjUwNS0+dmlkZW9faW5mby5jbG9jayA9IG1vZGUtPmNs b2NrOw0KKw0KKwlyZXR1cm4gTU9ERV9PSzsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X2Jy aWRnZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkNCit7DQorCXN0cnVjdCBpdDY1 MDUgKml0NjUwNSA9IGJyaWRnZV90b19pdDY1MDUoYnJpZGdlKTsNCisNCisJaXQ2NTA1X2ludF9t YXNrX2VuYWJsZShpdDY1MDUpOw0KKwlpdDY1MDVfdmlkZW9fcmVzZXQoaXQ2NTA1KTsNCit9DQor DQorc3RhdGljIHZvaWQgaXQ2NTA1X2JyaWRnZV9kaXNhYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpi cmlkZ2UpDQorew0KKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBicmlkZ2VfdG9faXQ2NTA1KGJy aWRnZSk7DQorDQorCWlmIChpdDY1MDUtPnBvd2VyZWQpDQorCQlpdDY1MDVfdmlkZW9fZGlzYWJs ZShpdDY1MDUpOw0KK30NCisNCitzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cw0KK2l0 NjUwNV9icmlkZ2VfZGV0ZWN0KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpDQorew0KKwlzdHJ1 Y3QgaXQ2NTA1ICppdDY1MDUgPSBicmlkZ2VfdG9faXQ2NTA1KGJyaWRnZSk7DQorDQorCXJldHVy biBpdDY1MDVfZGV0ZWN0KCZpdDY1MDUtPmNvbm5lY3RvciwgMCk7DQorfQ0KKw0KK3N0YXRpYyBz dHJ1Y3QgZWRpZCAqaXQ2NTA1X2JyaWRnZV9nZXRfZWRpZChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJp ZGdlLA0KKwkJCQkJICAgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikNCit7DQorCXN0 cnVjdCBpdDY1MDUgKml0NjUwNSA9IGJyaWRnZV90b19pdDY1MDUoYnJpZGdlKTsNCisJc3RydWN0 IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQorCXN0cnVjdCBlZGlkICplZGlk Ow0KKw0KKwllZGlkID0gZHJtX2RvX2dldF9lZGlkKCZpdDY1MDUtPmNvbm5lY3RvciwgaXQ2NTA1 X2dldF9lZGlkX2Jsb2NrLA0KKwkJCSAgICAgICBpdDY1MDUpOw0KKw0KKwlpZiAoIWVkaWQpIHsN CisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImZhaWxlZCB0byBnZXQgZWRpZCEiKTsNCisJ CXJldHVybiBOVUxMOw0KKwl9DQorDQorCXJldHVybiBlZGlkOw0KK30NCisNCitzdGF0aWMgY29u c3Qgc3RydWN0IGRybV9icmlkZ2VfZnVuY3MgaXQ2NTA1X2JyaWRnZV9mdW5jcyA9IHsNCisJLmF0 dGFjaCA9IGl0NjUwNV9icmlkZ2VfYXR0YWNoLA0KKwkuZGV0YWNoID0gaXQ2NTA1X2JyaWRnZV9k ZXRhY2gsDQorCS5tb2RlX3ZhbGlkID0gaXQ2NTA1X2JyaWRnZV9tb2RlX3ZhbGlkLA0KKwkubW9k ZV9zZXQgPSBpdDY1MDVfYnJpZGdlX21vZGVfc2V0LA0KKwkuZW5hYmxlID0gaXQ2NTA1X2JyaWRn ZV9lbmFibGUsDQorCS5kaXNhYmxlID0gaXQ2NTA1X2JyaWRnZV9kaXNhYmxlLA0KKwkuZGV0ZWN0 ID0gaXQ2NTA1X2JyaWRnZV9kZXRlY3QsDQorCS5nZXRfZWRpZCA9IGl0NjUwNV9icmlkZ2VfZ2V0 X2VkaWQsDQorfTsNCisNCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQDQorDQorc3RhdGljIGludCBp dDY1MDVfYnJpZGdlX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpDQorew0KKwlzdHJ1Y3QgaXQ2 NTA1ICppdDY1MDUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCisNCisJcmV0dXJuIGl0NjUwNV9w b3dlcm9uKGl0NjUwNSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXQ2NTA1X2JyaWRnZV9zdXNwZW5k KHN0cnVjdCBkZXZpY2UgKmRldikNCit7DQorCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGRldl9n ZXRfZHJ2ZGF0YShkZXYpOw0KKw0KKwlyZXR1cm4gaXQ2NTA1X3Bvd2Vyb2ZmKGl0NjUwNSk7DQor fQ0KKw0KK3N0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhpdDY1MDVfYnJpZGdlX3BtX29wcywgaXQ2 NTA1X2JyaWRnZV9zdXNwZW5kLA0KKwkJCSBpdDY1MDVfYnJpZGdlX3Jlc3VtZSk7DQorDQorI2Vu ZGlmDQorDQorc3RhdGljIGludCBpdDY1MDVfaW5pdF9wZGF0YShzdHJ1Y3QgaXQ2NTA1ICppdDY1 MDUpDQorew0KKwlzdHJ1Y3QgaXQ2NTA1X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gJml0NjUwNS0+ cGRhdGE7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKw0K KwkvKiAxLjBWIGRpZ2l0YWwgY29yZSBwb3dlciByZWd1bGF0b3IgICovDQorCXBkYXRhLT5wd3Ix OCA9IGRldm1fcmVndWxhdG9yX2dldChkZXYsICJwd3IxOCIpOw0KKwlpZiAoSVNfRVJSKHBkYXRh LT5wd3IxOCkpIHsNCisJCURSTV9ERVZfRVJST1IoZGV2LCAicHdyMTggcmVndWxhdG9yIG5vdCBm b3VuZCIpOw0KKwkJcmV0dXJuIFBUUl9FUlIocGRhdGEtPnB3cjE4KTsNCisJfQ0KKw0KKwlwZGF0 YS0+b3ZkZCA9IGRldm1fcmVndWxhdG9yX2dldChkZXYsICJvdmRkIik7DQorCWlmIChJU19FUlIo cGRhdGEtPm92ZGQpKSB7DQorCQlEUk1fREVWX0VSUk9SKGRldiwgIm92ZGQgcmVndWxhdG9yIG5v dCBmb3VuZCIpOw0KKwkJcmV0dXJuIFBUUl9FUlIocGRhdGEtPm92ZGQpOw0KKwl9DQorDQorCXBk YXRhLT5ncGlvZF9yZXNldCA9IGRldm1fZ3Bpb2RfZ2V0KGRldiwgInJlc2V0IiwgR1BJT0RfT1VU X0hJR0gpOw0KKwlpZiAoSVNfRVJSKHBkYXRhLT5ncGlvZF9yZXNldCkpIHsNCisJCURSTV9ERVZf RVJST1IoZGV2LCAiZ3Bpb2RfcmVzZXQgZ3BpbyBub3QgZm91bmQiKTsNCisJCXJldHVybiBQVFJf RVJSKHBkYXRhLT5ncGlvZF9yZXNldCk7DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0 YXRpYyB2b2lkIGl0NjUwNV9wYXJzZV9kdChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisJdTMyICphZmVfc2V0 dGluZyA9ICZpdDY1MDUtPmFmZV9zZXR0aW5nOw0KKw0KKwlpdDY1MDUtPmxhbmVfc3dhcF9kaXNh YmxlZCA9DQorCQlkZXZpY2VfcHJvcGVydHlfcmVhZF9ib29sKGRldiwgIm5vLWxhbmVzd2FwIik7 DQorDQorCWlmIChpdDY1MDUtPmxhbmVfc3dhcF9kaXNhYmxlZCkNCisJCWl0NjUwNS0+bGFuZV9z d2FwID0gZmFsc2U7DQorDQorCWlmIChkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LCAiYWZl LXNldHRpbmciLCBhZmVfc2V0dGluZykgPT0gMCkgew0KKwkJaWYgKCphZmVfc2V0dGluZyA+PSBB UlJBWV9TSVpFKGFmZV9zZXR0aW5nX3RhYmxlKSkgew0KKwkJCURSTV9ERVZfRVJST1IoZGV2LCAi YWZlIHNldHRpbmcgZXJyb3IsIHVzZSBkZWZhdWx0Iik7DQorCQkJKmFmZV9zZXR0aW5nID0gMDsN CisJCX0NCisJfSBlbHNlIHsNCisJCSphZmVfc2V0dGluZyA9IDA7DQorCX0NCisJRFJNX0RFVl9E RUJVR19EUklWRVIoZGV2LCAidXNpbmcgYWZlX3NldHRpbmc6ICVkIiwgKmFmZV9zZXR0aW5nKTsN Cit9DQorDQorc3RhdGljIHNzaXplX3QgcHJpbnRfdGltaW5nX3Nob3coc3RydWN0IGRldmljZSAq ZGV2LA0KKwkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikNCit7 DQorCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KKwlzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqdmlkID0gJml0NjUwNS0+dmlkZW9faW5mbzsNCisJY2hhciAq c3RyID0gYnVmLCAqZW5kID0gYnVmICsgUEFHRV9TSVpFOw0KKw0KKwlpdDY1MDVfY2FsY192aWRl b19pbmZvKGl0NjUwNSk7DQorCXN0ciArPSBzY25wcmludGYoc3RyLCBlbmQgLSBzdHIsICItLS12 aWRlbyB0aW1pbmctLS1cbiIpOw0KKwlzdHIgKz0gc2NucHJpbnRmKHN0ciwgZW5kIC0gc3RyLCAi UENMSzolZC4lMDNkTUh6XG4iLA0KKwkJCSB2aWQtPmNsb2NrIC8gMTAwMCwgdmlkLT5jbG9jayAl IDEwMDApOw0KKwlzdHIgKz0gc2NucHJpbnRmKHN0ciwgZW5kIC0gc3RyLCAiSFRvdGFsOiVkXG4i LCB2aWQtPmh0b3RhbCk7DQorCXN0ciArPSBzY25wcmludGYoc3RyLCBlbmQgLSBzdHIsICJIQWN0 aXZlOiVkXG4iLCB2aWQtPmhkaXNwbGF5KTsNCisJc3RyICs9IHNjbnByaW50ZihzdHIsIGVuZCAt IHN0ciwgIkhGcm9udFBvcmNoOiVkXG4iLA0KKwkJCSB2aWQtPmhzeW5jX3N0YXJ0IC0gdmlkLT5o ZGlzcGxheSk7DQorCXN0ciArPSBzY25wcmludGYoc3RyLCBlbmQgLSBzdHIsICJIU3luY1dpZHRo OiVkXG4iLA0KKwkJCSB2aWQtPmhzeW5jX2VuZCAtIHZpZC0+aHN5bmNfc3RhcnQpOw0KKwlzdHIg Kz0gc2NucHJpbnRmKHN0ciwgZW5kIC0gc3RyLCAiSEJhY2tQb3JjaDolZFxuIiwNCisJCQkgdmlk LT5odG90YWwgLSB2aWQtPmhzeW5jX2VuZCk7DQorCXN0ciArPSBzY25wcmludGYoc3RyLCBlbmQg LSBzdHIsICJWVG90YWw6JWRcbiIsIHZpZC0+dnRvdGFsKTsNCisJc3RyICs9IHNjbnByaW50Zihz dHIsIGVuZCAtIHN0ciwgIlZBY3RpdmU6JWRcbiIsIHZpZC0+dmRpc3BsYXkpOw0KKwlzdHIgKz0g c2NucHJpbnRmKHN0ciwgZW5kIC0gc3RyLCAiVkZyb250UG9yY2g6JWRcbiIsDQorCQkJIHZpZC0+ dnN5bmNfc3RhcnQgLSB2aWQtPnZkaXNwbGF5KTsNCisJc3RyICs9IHNjbnByaW50ZihzdHIsIGVu ZCAtIHN0ciwgIlZTeW5jV2lkdGg6JWRcbiIsDQorCQkJIHZpZC0+dnN5bmNfZW5kIC0gdmlkLT52 c3luY19zdGFydCk7DQorCXN0ciArPSBzY25wcmludGYoc3RyLCBlbmQgLSBzdHIsICJWQmFja1Bv cmNoOiVkXG4iLA0KKwkJCSB2aWQtPnZ0b3RhbCAtIHZpZC0+dnN5bmNfZW5kKTsNCisNCisJcmV0 dXJuIHN0ciAtIGJ1ZjsNCit9DQorDQorc3RhdGljIHNzaXplX3QgZm9yY2VfcHdyb25vZmZfc3Rv cmUoc3RydWN0IGRldmljZSAqZGV2LA0KKwkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUg KmF0dHIsDQorCQkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkNCit7DQorCXN0 cnVjdCBpdDY1MDUgKml0NjUwNSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KKwlpbnQgcHdyOw0K Kw0KKwlpZiAoa3N0cnRvaW50KGJ1ZiwgMTAsICZwd3IpIDwgMCkNCisJCXJldHVybiAtRUlOVkFM Ow0KKw0KKwlpZiAocHdyKQ0KKwkJaXQ2NTA1X3Bvd2Vyb24oaXQ2NTA1KTsNCisJZWxzZQ0KKwkJ aXQ2NTA1X3Bvd2Vyb2ZmKGl0NjUwNSk7DQorDQorCXJldHVybiBjb3VudDsNCit9DQorDQorc3Rh dGljIHNzaXplX3QgZW5hYmxlX2Rydl9ob2xkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LA0KKwkJ CQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikNCit7DQorCXN0 cnVjdCBpdDY1MDUgKml0NjUwNSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KKw0KKwlyZXR1cm4g c2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIGl0NjUwNS0+ZW5hYmxlX2Rydl9ob2xk KTsNCit9DQorDQorc3RhdGljIHNzaXplX3QgZW5hYmxlX2Rydl9ob2xkX3N0b3JlKHN0cnVjdCBk ZXZpY2UgKmRldiwNCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwNCisJ CQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkNCit7DQorCXN0cnVjdCBpdDY1 MDUgKml0NjUwNSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KKwl1bnNpZ25lZCBpbnQgZHJ2X2hv bGQ7DQorDQorCWlmIChrc3RydG9pbnQoYnVmLCAxMCwgJmRydl9ob2xkKSA8IDApDQorCQlyZXR1 cm4gLUVJTlZBTDsNCisNCisJaXQ2NTA1LT5lbmFibGVfZHJ2X2hvbGQgPSAhIWRydl9ob2xkOw0K Kw0KKwlpZiAoaXQ2NTA1LT5lbmFibGVfZHJ2X2hvbGQpIHsNCisJCWl0NjUwNV9pbnRfbWFza19k aXNhYmxlKGl0NjUwNSk7DQorCX0gZWxzZSB7DQorCQlpdDY1MDVfY2xlYXJfaW50KGl0NjUwNSk7 DQorCQlpdDY1MDVfaW50X21hc2tfZW5hYmxlKGl0NjUwNSk7DQorDQorCQlpZiAoaXQ2NTA1LT5w b3dlcmVkKSB7DQorCQkJaXQ2NTA1LT5jb25uZWN0b3Jfc3RhdHVzID0NCisJCQkJCWl0NjUwNV9n ZXRfc2lua19ocGRfc3RhdHVzKGl0NjUwNSkgPw0KKwkJCQkJY29ubmVjdG9yX3N0YXR1c19jb25u ZWN0ZWQgOg0KKwkJCQkJY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7DQorCQl9IGVsc2Ug ew0KKwkJCWl0NjUwNS0+Y29ubmVjdG9yX3N0YXR1cyA9DQorCQkJCQljb25uZWN0b3Jfc3RhdHVz X2Rpc2Nvbm5lY3RlZDsNCisJCX0NCisJfQ0KKwlyZXR1cm4gY291bnQ7DQorfQ0KKw0KK3N0YXRp YyBERVZJQ0VfQVRUUl9STyhwcmludF90aW1pbmcpOw0KK3N0YXRpYyBERVZJQ0VfQVRUUl9XTyhm b3JjZV9wd3Jvbm9mZik7DQorc3RhdGljIERFVklDRV9BVFRSX1JXKGVuYWJsZV9kcnZfaG9sZCk7 DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKml0NjUwNV9hdHRyc1tdID0gew0K KwkmZGV2X2F0dHJfcHJpbnRfdGltaW5nLmF0dHIsDQorCSZkZXZfYXR0cl9mb3JjZV9wd3Jvbm9m Zi5hdHRyLA0KKwkmZGV2X2F0dHJfZW5hYmxlX2Rydl9ob2xkLmF0dHIsDQorCU5VTEwsDQorfTsN CisNCitzdGF0aWMgdm9pZCBpdDY1MDVfc2h1dGRvd24oc3RydWN0IGkyY19jbGllbnQgKmNsaWVu dCkNCit7DQorCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGRldl9nZXRfZHJ2ZGF0YSgmY2xpZW50 LT5kZXYpOw0KKw0KKwlrZnJlZShpdDY1MDUtPmVkaWQpOw0KKwlpdDY1MDUtPmVkaWQgPSBOVUxM Ow0KKw0KKwlpZiAoaXQ2NTA1LT5wb3dlcmVkKQ0KKwkJaXQ2NTA1X2xhbmVfb2ZmKGl0NjUwNSk7 DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXQ2NTA1X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAq Y2xpZW50LA0KKwkJCSAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpDQorew0KKwlz dHJ1Y3QgaXQ2NTA1ICppdDY1MDU7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjbGllbnQtPmRl djsNCisJc3RydWN0IGV4dGNvbl9kZXYgKmV4dGNvbjsNCisJaW50IGVyciwgaW50cF9pcnE7DQor DQorCWl0NjUwNSA9IGRldm1fa3phbGxvYygmY2xpZW50LT5kZXYsIHNpemVvZigqaXQ2NTA1KSwg R0ZQX0tFUk5FTCk7DQorCWlmICghaXQ2NTA1KQ0KKwkJcmV0dXJuIC1FTk9NRU07DQorDQorCW11 dGV4X2luaXQoJml0NjUwNS0+ZXh0Y29uX2xvY2spOw0KKwltdXRleF9pbml0KCZpdDY1MDUtPm1v ZGVfbG9jayk7DQorCW11dGV4X2luaXQoJml0NjUwNS0+YXV4X2xvY2spOw0KKw0KKwlpdDY1MDUt PmJyaWRnZS5vZl9ub2RlID0gY2xpZW50LT5kZXYub2Zfbm9kZTsNCisJaXQ2NTA1LT5jb25uZWN0 b3Jfc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7DQorCWl0NjUwNS0+Y2xp ZW50ID0gY2xpZW50Ow0KKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBpdDY1MDUpOw0KKw0K KwkvKiBnZXQgZXh0Y29uIGRldmljZSBmcm9tIERUUyAqLw0KKwlleHRjb24gPSBleHRjb25fZ2V0 X2VkZXZfYnlfcGhhbmRsZShkZXYsIDApOw0KKwlpZiAoUFRSX0VSUihleHRjb24pID09IC1FUFJP QkVfREVGRVIpDQorCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsNCisJaWYgKElTX0VSUihleHRjb24p KSB7DQorCQlEUk1fREVWX0VSUk9SKGRldiwgImNhbiBub3QgZ2V0IGV4dGNvbiBkZXZpY2UhIik7 DQorCQlyZXR1cm4gUFRSX0VSUihleHRjb24pOw0KKwl9DQorDQorCWl0NjUwNS0+ZXh0Y29uID0g ZXh0Y29uOw0KKw0KKwlpdDY1MDUtPnJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfaTJjKGNsaWVu dCwgJml0NjUwNV9yZWdtYXBfY29uZmlnKTsNCisJaWYgKElTX0VSUihpdDY1MDUtPnJlZ21hcCkp IHsNCisJCURSTV9ERVZfRVJST1IoZGV2LCAicmVnbWFwIGkyYyBpbml0IGZhaWxlZCIpOw0KKwkJ ZXJyID0gUFRSX0VSUihpdDY1MDUtPnJlZ21hcCk7DQorCQlyZXR1cm4gZXJyOw0KKwl9DQorDQor CWVyciA9IGl0NjUwNV9pbml0X3BkYXRhKGl0NjUwNSk7DQorCWlmIChlcnIpIHsNCisJCURSTV9E RVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgcGRhdGE6ICVkIiwgZXJyKTsNCisJ CXJldHVybiBlcnI7DQorCX0NCisNCisJaXQ2NTA1X3BhcnNlX2R0KGl0NjUwNSk7DQorDQorCWlu dHBfaXJxID0gY2xpZW50LT5pcnE7DQorDQorCWlmICghaW50cF9pcnEpIHsNCisJCURSTV9ERVZf RVJST1IoZGV2LCAiRmFpbGVkIHRvIGdldCBJTlRQIElSUSIpOw0KKwkJZXJyID0gLUVOT0RFVjsN CisJCXJldHVybiBlcnI7DQorCX0NCisNCisJZXJyID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2ly cSgmY2xpZW50LT5kZXYsIGludHBfaXJxLCBOVUxMLA0KKwkJCQkJaXQ2NTA1X2ludF90aHJlYWRl ZF9oYW5kbGVyLA0KKwkJCQkJSVJRRl9UUklHR0VSX0xPVyB8IElSUUZfT05FU0hPVCwNCisJCQkJ CSJpdDY1MDUtaW50cCIsIGl0NjUwNSk7DQorCWlmIChlcnIpIHsNCisJCURSTV9ERVZfRVJST1Io ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgSU5UUCB0aHJlYWRlZCBJUlE6ICVkIiwNCisJCQkgICAg ICBlcnIpOw0KKwkJcmV0dXJuIGVycjsNCisJfQ0KKw0KKwkvKiBSZWdpc3RlciBhdXggY2hhbm5l bCAqLw0KKwlpdDY1MDUtPmF1eC5uYW1lID0gIkRQLUFVWCI7DQorCWl0NjUwNS0+YXV4LmRldiA9 IGRldjsNCisJaXQ2NTA1LT5hdXgudHJhbnNmZXIgPSBpdDY1MDVfYXV4X3RyYW5zZmVyOw0KKw0K KwllcnIgPSBkcm1fZHBfYXV4X3JlZ2lzdGVyKCZpdDY1MDUtPmF1eCk7DQorCWlmIChlcnIgPCAw KSB7DQorCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBhdXg6ICVkIiwg ZXJyKTsNCisJCXJldHVybiBlcnI7DQorCX0NCisNCisJSU5JVF9XT1JLKCZpdDY1MDUtPmxpbmtf d29ya3MsIGl0NjUwNV9saW5rX3RyYWluaW5nX3dvcmspOw0KKwlJTklUX1dPUksoJml0NjUwNS0+ aGRjcF93YWl0X2tzdl9saXN0LCBpdDY1MDVfaGRjcF93YWl0X2tzdl9saXN0KTsNCisJSU5JVF9E RUxBWUVEX1dPUksoJml0NjUwNS0+aGRjcF93b3JrLCBpdDY1MDVfaGRjcF93b3JrKTsNCisJaW5p dF9jb21wbGV0aW9uKCZpdDY1MDUtPndhaXRfZWRpZF9jb21wbGV0ZSk7DQorCWl0NjUwNS0+cG93 ZXJlZCA9IGZhbHNlOw0KKwlpdDY1MDUtPmVuYWJsZV9kcnZfaG9sZCA9IERFRkFVTFRfRFJWX0hP TEQ7DQorDQorCWlmIChERUZBVUxUX1BXUl9PTikNCisJCWl0NjUwNV9wb3dlcm9uKGl0NjUwNSk7 DQorDQorCWVyciA9IHN5c2ZzX2NyZWF0ZV9maWxlcygmY2xpZW50LT5kZXYua29iaiwgaXQ2NTA1 X2F0dHJzKTsNCisJaWYgKGVycikgew0KKwkJZHJtX2RwX2F1eF91bnJlZ2lzdGVyKCZpdDY1MDUt PmF1eCk7DQorCQlyZXR1cm4gZXJyOw0KKwl9DQorDQorCWl0NjUwNS0+YnJpZGdlLmZ1bmNzID0g Jml0NjUwNV9icmlkZ2VfZnVuY3M7DQorCWRybV9icmlkZ2VfYWRkKCZpdDY1MDUtPmJyaWRnZSk7 DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IGl0NjUwNV9pMmNfcmVtb3ZlKHN0 cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpDQorew0KKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBp MmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsNCisNCisJZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVy KCZpdDY1MDUtPmNvbm5lY3Rvcik7DQorCWRybV9jb25uZWN0b3JfY2xlYW51cCgmaXQ2NTA1LT5j b25uZWN0b3IpOw0KKwlkcm1fYnJpZGdlX3JlbW92ZSgmaXQ2NTA1LT5icmlkZ2UpOw0KKwlkcm1f ZHBfYXV4X3VucmVnaXN0ZXIoJml0NjUwNS0+YXV4KTsNCisJc3lzZnNfcmVtb3ZlX2ZpbGVzKCZj bGllbnQtPmRldi5rb2JqLCBpdDY1MDVfYXR0cnMpOw0KKwlpdDY1MDVfcG93ZXJvZmYoaXQ2NTA1 KTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2Rldmlj ZV9pZCBpdDY1MDVfaWRbXSA9IHsNCisJeyAiaXQ2NTA1IiwgMCB9LA0KKwl7IH0NCit9Ow0KKw0K K01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBpdDY1MDVfaWQpOw0KKw0KK3N0YXRpYyBjb25zdCBz dHJ1Y3Qgb2ZfZGV2aWNlX2lkIGl0NjUwNV9vZl9tYXRjaFtdID0gew0KKwl7IC5jb21wYXRpYmxl ID0gIml0ZSxpdDY1MDUiIH0sDQorCXsgfQ0KK307DQorDQorc3RhdGljIHN0cnVjdCBpMmNfZHJp dmVyIGl0NjUwNV9pMmNfZHJpdmVyID0gew0KKwkuZHJpdmVyID0gew0KKwkJLm5hbWUgPSAiaXQ2 NTA1IiwNCisJCS5vZl9tYXRjaF90YWJsZSA9IGl0NjUwNV9vZl9tYXRjaCwNCisjaWZkZWYgQ09O RklHX1BNX1NMRUVQDQorCQkucG0gPSAmaXQ2NTA1X2JyaWRnZV9wbV9vcHMsDQorI2VuZGlmDQor CX0sDQorCS5wcm9iZSA9IGl0NjUwNV9pMmNfcHJvYmUsDQorCS5yZW1vdmUgPSBpdDY1MDVfaTJj X3JlbW92ZSwNCisJLnNodXRkb3duID0gaXQ2NTA1X3NodXRkb3duLA0KKwkuaWRfdGFibGUgPSBp dDY1MDVfaWQsDQorfTsNCisNCittb2R1bGVfaTJjX2RyaXZlcihpdDY1MDVfaTJjX2RyaXZlcik7 DQorDQorTU9EVUxFX0FVVEhPUigiQWxsZW4gQ2hlbiA8YWxsZW4uY2hlbkBpdGUuY29tLnR3PiIp Ow0KK01PRFVMRV9ERVNDUklQVElPTigiSVQ2NTA1IERpc3BsYXlQb3J0IFRyYW5zbWl0dGVyIGRy aXZlciIpOw0KK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsNCi0tIA0KMi4yNS4xDQoNCg==