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=-13.0 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, NICE_REPLY_A,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 35714C433E0 for ; Mon, 3 Aug 2020 16:11:59 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id EEDD720738 for ; Mon, 3 Aug 2020 16:11:58 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=microchip.com header.i=@microchip.com header.b="h8IenkH7"; dkim=pass (1024-bit key) header.d=microchiptechnology.onmicrosoft.com header.i=@microchiptechnology.onmicrosoft.com header.b="Og7U0kBr" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727022AbgHCQL7 (ORCPT ); Mon, 3 Aug 2020 12:11:59 -0400 Received: from esa6.microchip.iphmx.com ([216.71.154.253]:37967 "EHLO esa6.microchip.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725945AbgHCQL7 (ORCPT ); Mon, 3 Aug 2020 12:11:59 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1596471117; x=1628007117; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=2wSH3AM77kOznlWn2VplGhLp7tpda/3RkxocX9kD4Ic=; b=h8IenkH7+zukWBNYFYNQn3kqy4u3FF/R/gnSe4JEnRklvqg2kfZhDept 11EirYopq0Ahzzw/+uMOcDKwQWYnVdgm8cPd0hchFMnHS10m2dTnlncqZ V5UwSmT1grc/lAtqSeF4FIBYQUSK5RKwdQwT+XBX2YFirJkrImk5zbJzz dG2oWDaMSmvm+5NVjXIIpWn+bplgDsTMEU2GsKOHB2D++/WG+HlX34vAY IPcQNj9hfLldego8qlzj8wfF7JvuOlzcM5yYYE7wBiuD6LRWQGSuA+TD6 saUAm0hoSpvA1xInzN+CXzLQ6vX66XspyTzmaX0NmUSYP9ELg/pnZdRLX Q==; IronPort-SDR: cIiewXEQks3l3rZXEqv8xSMi0EG1dss/g0cacz2Phep89/KVBM62X4nBTn6n6sYNElAeSn4mVx a0tPkZZlubuBK2+kcCFySkkfVRh7Vt6dMAP1EGELT2py1lMGvjknBEfoJVN1Hz3pcjdj/3F8y8 tHLWK3cd9Ye2v2m8I0buSljfiUNSexCkvABcc+mj654UPyrodEnGbOMzatfwP6tQESYsgEW3ao QUjv36Q7rpjU4R/Ia3KSUVGt4/zax8jQ7BexMr+m+2ib19pamCR6BB4FjwTSYfyz21r1g63dqn yUQ= X-IronPort-AV: E=Sophos;i="5.75,430,1589266800"; d="scan'208";a="21580723" Received: from smtpout.microchip.com (HELO email.microchip.com) ([198.175.253.82]) by esa6.microchip.iphmx.com with ESMTP/TLS/AES256-SHA256; 03 Aug 2020 09:11:56 -0700 Received: from chn-vm-ex01.mchp-main.com (10.10.85.143) by chn-vm-ex02.mchp-main.com (10.10.85.144) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1979.3; Mon, 3 Aug 2020 09:11:51 -0700 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (10.10.215.89) by email.microchip.com (10.10.87.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1979.3 via Frontend Transport; Mon, 3 Aug 2020 09:11:51 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FtUtRLs7ml7DOS01gg2BygbUqWOqzs+QPlEyjfXyv87XSFH+OUsFau9M+f1uM8iw+6sS9RIBvN3KpKL+WY2Kg5vsQ/4WCvYNQNz1xZx26eF8LU9bKf0aC0IA8i9xsxXxdiep/NENBztEnsNogzWuMrDrU7+apumm35mv/RTtovuGwyWwnby8ruhMbiiLaPkb5krdVY8878LWby+FhRAD9ARpCXlZnq4LIaWZHF5OVEm+gMpZiXXS0nbORXtWohr6gpdbdxAD2uZQIrNcOtFwpDSaIrOChlrU4z3I7eYHn3nk173w6FxPcjEYmmkRFjHSMrsFrX0jXuhrBxgfxlff7Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=2wSH3AM77kOznlWn2VplGhLp7tpda/3RkxocX9kD4Ic=; b=O3WMwUBu4aO7xbKqs/0eaF6ldMMmGbRfTCBpHOTP3Bc5ICvahGqB038TLufrUFc3ATslz7gfIILIJx/mFVKa165kwHVd4Qd5eEjHUlGHhK1gcENHRfP7y7r5r54yWEEsGAvth1JwIFBVUisCgJlMO60ZXY92zv7OPwHd74VRALBas4mK7MienONAVEAAe86VZGi5jbWt2yaXNCgakLMeCNBUp0Q9pGBNLgOYTqJd9L+ZHIaD8t1/musXPqNfatf8fbLPM4MwYajfe351yVIClalsI+5RRS81gFHwRvd/n2rpQ4/QHnx3+Gr1ShmmfF0PLeQiHBreIsvJz9dD4gUh6A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microchip.com; dmarc=pass action=none header.from=microchip.com; dkim=pass header.d=microchip.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microchiptechnology.onmicrosoft.com; s=selector2-microchiptechnology-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=2wSH3AM77kOznlWn2VplGhLp7tpda/3RkxocX9kD4Ic=; b=Og7U0kBr1KmBWnaqXGPXmr19K7VmYnfnJWXoK9/psr8dnqjmw74PEEYPM6DFb5EZCx5AY7Dk1AVFaem4Scfb5ToU0kCBUS1wvlss7VjRRoqYAy1XV7s6DGKFUXDNh8csJlBJ++6fSvytZ4p4r7udE50tNO/tU1IvUoE8rEpZ6K8= Received: from SN6PR11MB3504.namprd11.prod.outlook.com (2603:10b6:805:d0::17) by SA0PR11MB4670.namprd11.prod.outlook.com (2603:10b6:806:9a::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3239.19; Mon, 3 Aug 2020 16:11:54 +0000 Received: from SN6PR11MB3504.namprd11.prod.outlook.com ([fe80::c83b:2062:4e59:8ebf]) by SN6PR11MB3504.namprd11.prod.outlook.com ([fe80::c83b:2062:4e59:8ebf%7]) with mapi id 15.20.3239.021; Mon, 3 Aug 2020 16:11:54 +0000 From: To: , , , , CC: , , , , , , Subject: Re: [PATCH v3 2/2] ASoC: mchp-spdiftx: add driver for S/PDIF TX Controller Thread-Topic: [PATCH v3 2/2] ASoC: mchp-spdiftx: add driver for S/PDIF TX Controller Thread-Index: AQHWaW7S2+5bt8xHIEK/JZnGw+kle6kmWw8AgAAzrYA= Date: Mon, 3 Aug 2020 16:11:54 +0000 Message-ID: References: <20200803081851.102570-1-codrin.ciubotariu@microchip.com> <20200803081851.102570-2-codrin.ciubotariu@microchip.com> <4d009743-733a-9578-71b2-d320fdca9331@microchip.com> In-Reply-To: <4d009743-733a-9578-71b2-d320fdca9331@microchip.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 authentication-results: microchip.com; dkim=none (message not signed) header.d=none;microchip.com; dmarc=none action=none header.from=microchip.com; x-originating-ip: [84.232.220.208] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: f6858f85-e40a-4bc1-93fb-08d837c7f05a x-ms-traffictypediagnostic: SA0PR11MB4670: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-bypassexternaltag: True x-ms-oob-tlc-oobclassifiers: OLM:538; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: hqPkDLNjqjKV81Xv7HTQA9DhcwO1try3JLpgPM6uVOjtAzqkO5SuThq91KK3v59d8F6jM3LbWUPKmv2NzMNNBAhd/IwlyygbkTcIqfpMBUW3NKmFpFvaXJbFZa6jKlHTvcdLgcWS1TYLYIKNxVbpmF7PkPLnOozR3J1tQn4Wfb3oQuOBCygUjKouBFL/vctNUb2+qYor5BE/WMB2iQYrRp4GK3DgKXYT1WwWnJA6aLFoH/F9Ibd4qE3dZycFCAgPr0nWnGTO4hDcPINoQFJeCEWNdswgp/DLGRwVuts7gO7AZ9gaTTqtRXKU1uO5eT/Gzi6nVFX45tNadba5QDGVotJ9K0/ANZfdHjX42lUMXYR1yQbKeBAoAFvHLGYu7z+U x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN6PR11MB3504.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(346002)(39860400002)(366004)(376002)(396003)(136003)(54906003)(71200400001)(5660300002)(26005)(91956017)(76116006)(66476007)(36756003)(2906002)(31686004)(7416002)(6512007)(64756008)(2616005)(186003)(6506007)(30864003)(110136005)(316002)(8936002)(478600001)(83380400001)(86362001)(6486002)(66556008)(66946007)(66446008)(8676002)(31696002)(4326008)(53546011)(43740500002)(559001)(579004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata: QOWj1/8o0EgYFxLGLWJtxuOfDBZ7ycG052swHow92M4NWTNE+OP3Ex5mHk5+heKDnzbERtQeygm4L5st/Xk6Se3N7rsald9/CtnLslyC21WQ1CzJ5LHytam1Pe/VvDri1ZT7gZAGAlj5B8xKTsvGdmKJLECK4YjeA/7nC6VRzgfkTfPeWOm8oGxAzKFmV9GQUhZtDjXjHf1aYhZcr6HGn6VQfwcDIf7FR40aZ1b4omv2cvSBVpXaQijn8cHR5zec5cAVaJwVNoBMes/k/9IjLgC8cIZC26mUy9vwnXaWJplj8f9wYpWT1Co0FRfJuNk/VlKmYzcxO5Ocv4/JvLNt4LykpERGLV+iCsuqhKpNYOrZjKlpLdbdp7sNbILgYq2arcoOxOHJE4HWa9omp+A7pQdExd8E9IdOmhfsfpqH/xbcnJbioEM8xOWsoJz0oqh8g12VYzPDT3RVU6dKT7xJoWLUMKkIJhWUYbfZKgHaXIyUSrloPCJZAJPiMCwlZgUpxuKOOUaqKywHpqZDFLf1crl1wjbqbnPbNr3UcIy8nnrgu4AjkyPzJV4oZNqK6U58Tchmhj2I/jGiwUbrXehVfFgp9sFKjbrho2l4kwLyXrqKJdB5PaAzLJxcE5Rd+m5rti6WUHJW1zklWBTbsxljhw== Content-Type: text/plain; charset="utf-8" Content-ID: <40F6A7602678F947BC3AF7180183BDDF@namprd11.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SN6PR11MB3504.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f6858f85-e40a-4bc1-93fb-08d837c7f05a X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Aug 2020 16:11:54.2085 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3f4057f3-b418-4d4e-ba84-d55b4e897d88 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: QbuF5hsVDtzJa3dVBQNPaVlBC6MKlTz75Ztypl4WYM5FehWVOrWRGejCVhjowcgCwXxia4Xn1KsSz4W7Y8A8D8q/nr2ICH/xWv1xb+XaTkI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR11MB4670 Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org T24gMDMuMDguMjAyMCAxNjowNiwgQ2xhdWRpdSBCZXpuZWEgLSBNMTgwNjMgd3JvdGU6DQo+IA0K PiANCj4gT24gMDMuMDguMjAyMCAxMToxOCwgQ29kcmluIENpdWJvdGFyaXUgd3JvdGU6DQo+PiBU aGUgbmV3IFNQRElGIFRYIGNvbnRyb2xsZXIgaXMgYSBzZXJpYWwgcG9ydCBjb21wbGlhbnQgd2l0 aCB0aGUgSUVDLQ0KPj4gNjA5NTggc3RhbmRhcmQuIEl0IGFsc28gc3VwcG9ydHMgcHJvZ3JhbW1h YmxlIFVzZXIgRGF0YSBhbmQgQ2hhbm5lbA0KPj4gU3RhdHVzIGZpZWxkcy4NCj4+DQo+PiBUaGlz IElQIGlzIGVtYmVkZGVkIGluIE1pY3JvY2hpcCdzIHNhbWE3ZzUgU29DLg0KPj4NCj4+IFNpZ25l ZC1vZmYtYnk6IENvZHJpbiBDaXVib3Rhcml1IDxjb2RyaW4uY2l1Ym90YXJpdUBtaWNyb2NoaXAu Y29tPg0KPj4gLS0tDQo+Pg0KPj4gQ2hhbmdlcyBpbiB2MiwgdjM6DQo+PiAgIC0gbm9uZTsNCj4+ DQo+PiAgIHNvdW5kL3NvYy9hdG1lbC9LY29uZmlnICAgICAgICB8ICAxMiArDQo+PiAgIHNvdW5k L3NvYy9hdG1lbC9NYWtlZmlsZSAgICAgICB8ICAgMiArDQo+PiAgIHNvdW5kL3NvYy9hdG1lbC9t Y2hwLXNwZGlmdHguYyB8IDg2NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4+ ICAgMyBmaWxlcyBjaGFuZ2VkLCA4NzggaW5zZXJ0aW9ucygrKQ0KPj4gICBjcmVhdGUgbW9kZSAx MDA2NDQgc291bmQvc29jL2F0bWVsL21jaHAtc3BkaWZ0eC5jDQo+Pg0KPj4gZGlmZiAtLWdpdCBh L3NvdW5kL3NvYy9hdG1lbC9LY29uZmlnIGIvc291bmQvc29jL2F0bWVsL0tjb25maWcNCj4+IGlu ZGV4IDcxZjJkNDIxODhjNC4uOTNiZWI3ZDY3MGEzIDEwMDY0NA0KPj4gLS0tIGEvc291bmQvc29j L2F0bWVsL0tjb25maWcNCj4+ICsrKyBiL3NvdW5kL3NvYy9hdG1lbC9LY29uZmlnDQo+PiBAQCAt MTMyLDQgKzEzMiwxNiBAQCBjb25maWcgU05EX01DSFBfU09DX0kyU19NQ0MNCj4+ICAgCSAgYW5k IHN1cHBvcnRzIGEgVGltZSBEaXZpc2lvbiBNdWx0aXBsZXhlZCAoVERNKSBpbnRlcmZhY2Ugd2l0 aA0KPj4gICAJICBleHRlcm5hbCBtdWx0aS1jaGFubmVsIGF1ZGlvIGNvZGVjcy4NCj4+ICAgDQo+ PiArY29uZmlnIFNORF9NQ0hQX1NPQ19TUERJRlRYDQo+PiArCXRyaXN0YXRlICJNaWNyb2NoaXAg QVNvQyBkcml2ZXIgZm9yIGJvYXJkcyB1c2luZyBTL1BESUYgVFgiDQo+PiArCWRlcGVuZHMgb24g T0YgJiYgKEFSQ0hfQVQ5MSB8fCBDT01QSUxFX1RFU1QpDQo+PiArCXNlbGVjdCBTTkRfU09DX0dF TkVSSUNfRE1BRU5HSU5FX1BDTQ0KPj4gKwlzZWxlY3QgUkVHTUFQX01NSU8NCj4+ICsJaGVscA0K Pj4gKwkgIFNheSBZIG9yIE0gaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIE1pY3JvY2hp cCBTL1BESUYgVFggQVNvYw0KPj4gKwkgIGRyaXZlciBvbiB0aGUgZm9sbG93aW5nIE1pY3JvY2hp cCBwbGF0Zm9ybXM6DQo+PiArCSAgLSBzYW1hN2c1DQo+PiArDQo+PiArCSAgVGhpcyBTL1BESUYg VFggZHJpdmVyIGlzIGNvbXBsaWFudCB3aXRoIElFQy02MDk1OCBzdGFuZGFyZCBhbmQNCj4+ICsJ ICBpbmNsdWRlcyBwcm9ncmFtYWJsZSBVc2VyIERhdGEgYW5kIENoYW5uZWwgU3RhdHVzIGZpZWxk cy4NCj4+ICAgZW5kaWYNCj4+IGRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXRtZWwvTWFrZWZpbGUg Yi9zb3VuZC9zb2MvYXRtZWwvTWFrZWZpbGUNCj4+IGluZGV4IGM3ZDI5ODk3OTFiZS4uM2ZkODlh MDA2M2RmIDEwMDY0NA0KPj4gLS0tIGEvc291bmQvc29jL2F0bWVsL01ha2VmaWxlDQo+PiArKysg Yi9zb3VuZC9zb2MvYXRtZWwvTWFrZWZpbGUNCj4+IEBAIC01LDYgKzUsNyBAQCBzbmQtc29jLWF0 bWVsLXBjbS1kbWEtb2JqcyA6PSBhdG1lbC1wY20tZG1hLm8NCj4+ICAgc25kLXNvYy1hdG1lbF9z c2NfZGFpLW9ianMgOj0gYXRtZWxfc3NjX2RhaS5vDQo+PiAgIHNuZC1zb2MtYXRtZWwtaTJzLW9i anMgOj0gYXRtZWwtaTJzLm8NCj4+ICAgc25kLXNvYy1tY2hwLWkycy1tY2Mtb2JqcyA6PSBtY2hw LWkycy1tY2Mubw0KPj4gK3NuZC1zb2MtbWNocC1zcGRpZnR4LW9ianMgOj0gbWNocC1zcGRpZnR4 Lm8NCj4+ICAgDQo+PiAgICMgcGRjIGFuZCBkbWEgbmVlZCB0byBib3RoIGJlIGJ1aWx0LWluIGlm IGFueSB1c2VyIG9mDQo+PiAgICMgc3NjIGlzIGJ1aWx0LWluLg0KPj4gQEAgLTE3LDYgKzE4LDcg QEAgZW5kaWYNCj4+ICAgb2JqLSQoQ09ORklHX1NORF9BVE1FTF9TT0NfU1NDKSArPSBzbmQtc29j LWF0bWVsX3NzY19kYWkubw0KPj4gICBvYmotJChDT05GSUdfU05EX0FUTUVMX1NPQ19JMlMpICs9 IHNuZC1zb2MtYXRtZWwtaTJzLm8NCj4+ICAgb2JqLSQoQ09ORklHX1NORF9NQ0hQX1NPQ19JMlNf TUNDKSArPSBzbmQtc29jLW1jaHAtaTJzLW1jYy5vDQo+PiArb2JqLSQoQ09ORklHX1NORF9NQ0hQ X1NPQ19TUERJRlRYKSArPSBzbmQtc29jLW1jaHAtc3BkaWZ0eC5vDQo+PiAgIA0KPj4gICAjIEFU OTEgTWFjaGluZSBTdXBwb3J0DQo+PiAgIHNuZC1zb2Mtc2FtOWcyMC13bTg3MzEtb2JqcyA6PSBz YW05ZzIwX3dtODczMS5vDQo+PiBkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F0bWVsL21jaHAtc3Bk aWZ0eC5jIGIvc291bmQvc29jL2F0bWVsL21jaHAtc3BkaWZ0eC5jDQo+PiBuZXcgZmlsZSBtb2Rl IDEwMDY0NA0KPj4gaW5kZXggMDAwMDAwMDAwMDAwLi43MzhmNjc4ODIxMmUNCj4+IC0tLSAvZGV2 L251bGwNCj4+ICsrKyBiL3NvdW5kL3NvYy9hdG1lbC9tY2hwLXNwZGlmdHguYw0KPj4gQEAgLTAs MCArMSw4NjQgQEANCj4+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KPj4g Ky8vDQo+PiArLy8gRHJpdmVyIGZvciBNaWNyb2NoaXAgUy9QRElGIFRYIENvbnRyb2xsZXINCj4+ ICsvLw0KPj4gKy8vIENvcHlyaWdodCAoQykgMjAyMCBNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMu IGFuZCBpdHMgc3Vic2lkaWFyaWVzDQo+PiArLy8NCj4+ICsvLyBBdXRob3I6IENvZHJpbiBDaXVi b3Rhcml1IDxjb2RyaW4uY2l1Ym90YXJpdUBtaWNyb2NoaXAuY29tPg0KPj4gKw0KPj4gKyNpbmNs dWRlIDxsaW51eC9jbGsuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgvaW8uaD4NCj4+ICsjaW5jbHVk ZSA8bGludXgvbW9kdWxlLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+DQo+PiAr DQo+PiArI2luY2x1ZGUgPHNvdW5kL2Fzb3VuZGVmLmg+DQo+PiArI2luY2x1ZGUgPHNvdW5kL2Rt YWVuZ2luZV9wY20uaD4NCj4+ICsjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPg0KPj4gKyNp bmNsdWRlIDxzb3VuZC9zb2MuaD4NCj4+ICsNCj4+ICsvKg0KPj4gKyAqIC0tLS0gUy9QRElGIFRy YW5zbWl0dGVyIENvbnRyb2xsZXIgUmVnaXN0ZXIgbWFwIC0tLS0NCj4+ICsgKi8NCj4+ICsjZGVm aW5lIFNQRElGVFhfQ1IJCQkweDAwCS8qIENvbnRyb2wgUmVnaXN0ZXIgKi8NCj4+ICsjZGVmaW5l IFNQRElGVFhfTVIJCQkweDA0CS8qIE1vZGUgUmVnaXN0ZXIgKi8NCj4gDQo+IFRoaXMgcmVnaXN0 ZXIgaXMgcmVhZC93cml0ZSBlaXRoZXIgaW4gYXRvbWljIGFuZCBub24tYXRvbWljIGNvbnRleHRl cyBidXQNCj4gbm90IHByb3RlY3RlZCBldmVyeXdoZXJlIHRoZSBzYW1lIHdheS4NCg0KSSBvbmx5 IG5lZWQgdGhlIFRYRU4gYml0IGZyb20gdGhpcyByZWdpc3RlciBpbiBhbiBhdG9taWMgY29udGV4 dCwgdGhpcyANCmlzIHdoeSB0aGVyZSBhcmUgYWxzbyBub24tYXRvbWljIGNvbnRleHRzLg0KDQo+ IA0KPj4gKyNkZWZpbmUgU1BESUZUWF9DRFIJCQkweDBDCS8qIENvbW1vbiBEYXRhIFJlZ2lzdGVy ICovDQo+PiArDQo+PiArI2RlZmluZSBTUERJRlRYX0lFUgkJCTB4MTQJLyogSW50ZXJydXB0IEVu YWJsZSBSZWdpc3RlciAqLw0KPj4gKyNkZWZpbmUgU1BESUZUWF9JRFIJCQkweDE4CS8qIEludGVy cnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQo+PiArI2RlZmluZSBTUERJRlRYX0lNUgkJCTB4MUMJ LyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCj4+ICsjZGVmaW5lIFNQRElGVFhfSVNSCQkJ MHgyMAkvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQo+PiArDQo+PiArI2RlZmluZSBT UERJRlRYX0NIMVVEKHJlZykJKDB4NTAgKyAocmVnKSAqIDQpCS8qIFVzZXIgRGF0YSAxIFJlZ2lz dGVyIHggKi8NCj4+ICsjZGVmaW5lIFNQRElGVFhfQ0gxUyhyZWcpCSgweDgwICsgKHJlZykgKiA0 KQkvKiBDaGFubmVsIFN0YXR1cyAxIFJlZ2lzdGVyIHggKi8NCj4+ICsNCj4+ICsjZGVmaW5lIFNQ RElGVFhfVkVSU0lPTgkJCTB4RjANCj4+ICsNCj4+ICsvKg0KPj4gKyAqIC0tLS0gQ29udHJvbCBS ZWdpc3RlciAoV3JpdGUtb25seSkgLS0tLQ0KPj4gKyAqLw0KPj4gKyNkZWZpbmUgU1BESUZUWF9D Ul9TV1JTVAkJQklUKDApCS8qIFNvZnR3YXJlIFJlc2V0ICovDQo+PiArI2RlZmluZSBTUERJRlRY X0NSX0ZDTFIJCQlCSVQoMSkJLyogRklGTyBjbGVhciAqLw0KPj4gKw0KPj4gKy8qDQo+PiArICog LS0tLSBNb2RlIFJlZ2lzdGVyIChSZWFkL1dyaXRlKSAtLS0tDQo+PiArICovDQo+PiArLyogVHJh bnNtaXQgRW5hYmxlICovDQo+PiArI2RlZmluZSBTUERJRlRYX01SX1RYRU5fTUFTSwkJR0VOTUFT SygwLCAwKQ0KPj4gKyNkZWZpbmUgU1BESUZUWF9NUl9UWEVOX0RJU0FCTEUJCSgwIDw8IDApDQo+ PiArI2RlZmluZSBTUERJRlRYX01SX1RYRU5fRU5BQkxFCQkoMSA8PCAwKQ0KPj4gKw0KPj4gKy8q IE11bHRpY2hhbm5lbCBUcmFuc2ZlciAqLw0KPj4gKyNkZWZpbmUgU1BESUZUWF9NUl9NVUxUSUNI X01BU0sJCUdFTkFNU0soMSwgMSkNCj4+ICsjZGVmaW5lIFNQRElGVFhfTVJfTVVMVElDSF9NT05P CQkoMCA8PCAxKQ0KPj4gKyNkZWZpbmUgU1BESUZUWF9NUl9NVUxUSUNIX0RVQUwJCSgxIDw8IDEp DQo+PiArDQo+PiArLyogRGF0YSBXb3JkIEVuZGlhbiBNb2RlICovDQo+PiArI2RlZmluZSBTUERJ RlRYX01SX0VORElBTl9NQVNLCQlHRU5NQVNLKDIsIDIpDQo+PiArI2RlZmluZSBTUERJRlRYX01S X0VORElBTl9MSVRUTEUJKDAgPDwgMikNCj4+ICsjZGVmaW5lIFNQRElGVFhfTVJfRU5ESUFOX0JJ RwkJKDEgPDwgMikNCj4+ICsNCj4+ICsvKiBEYXRhIEp1c3RpZmljYXRpb24gKi8NCj4+ICsjZGVm aW5lIFNQRElGVFhfTVJfSlVTVElGWV9NQVNLCQlHRU5NQVNLKDMsIDMpDQo+PiArI2RlZmluZSBT UERJRlRYX01SX0pVU1RJRllfTFNCCQkoMCA8PCAzKQ0KPj4gKyNkZWZpbmUgU1BESUZUWF9NUl9K VVNUSUZZX01TQgkJKDEgPDwgMykNCj4+ICsNCj4+ICsvKiBDb21tb24gQXVkaW8gUmVnaXN0ZXIg VHJhbnNmZXIgTW9kZSAqLw0KPj4gKyNkZWZpbmUgU1BESUZUWF9NUl9DTU9ERV9NQVNLCQkJR0VO TUFTSyg1LCA0KQ0KPj4gKyNkZWZpbmUgU1BESUZUWF9NUl9DTU9ERV9JTkRFWF9BQ0NFU1MJCSgw IDw8IDQpDQo+PiArI2RlZmluZSBTUERJRlRYX01SX0NNT0RFX1RPR0dMRV9BQ0NFU1MJCSgxIDw8 IDQpDQo+PiArI2RlZmluZSBTUERJRlRYX01SX0NNT0RFX0lOVEVSTFZEX0FDQ0VTUwkoMiA8PCA0 KQ0KPj4gKw0KPj4gKy8qIFZhbGlkIEJpdHMgcGVyIFNhbXBsZSAqLw0KPj4gKyNkZWZpbmUgU1BE SUZUWF9NUl9WQlBTX01BU0sJCUdFTk1BU0soMTMsIDgpDQo+PiArI2RlZmluZSBTUERJRlRYX01S X1ZCUFMoYnBzKQkJKCgoYnBzKSA8PCA4KSAmIFNQRElGVFhfTVJfVkJQU19NQVNLKQ0KPj4gKw0K Pj4gKy8qIENodW5rIFNpemUgKi8NCj4+ICsjZGVmaW5lIFNQRElGVFhfTVJfQ0hVTktfTUFTSwkJ R0VOTUFTSygxOSwgMTYpDQo+PiArI2RlZmluZSBTUERJRlRYX01SX0NIVU5LKHNpemUpCQkoKChz aXplKSA8PCAxNikgJiBTUERJRlRYX01SX0NIVU5LX01BU0spDQo+PiArDQo+PiArLyogVmFsaWRp dHkgQml0cyBmb3IgQ2hhbm5lbHMgMSBhbmQgMiAqLw0KPj4gKyNkZWZpbmUgU1BESUZUWF9NUl9W QUxJRDEJCQlCSVQoMjQpDQo+PiArI2RlZmluZSBTUERJRlRYX01SX1ZBTElEMgkJCUJJVCgyNSkN Cj4+ICsNCj4+ICsvKiBEaXNhYmxlIE51bGwgRnJhbWUgb24gdW5kZXJycnVuICovDQo+PiArI2Rl ZmluZSBTUERJRlRYX01SX0RORlJfTUFTSwkJR0VOTUFTSygyNywgMjcpDQo+PiArI2RlZmluZSBT UERJRlRYX01SX0RORlJfSU5WQUxJRAkJKDAgPDwgMjcpDQo+PiArI2RlZmluZSBTUERJRlRYX01S X0RORlJfVkFMSUQJCSgxIDw8IDI3KQ0KPj4gKw0KPj4gKy8qIEJ5dGVzIHBlciBTYW1wbGUgKi8N Cj4+ICsjZGVmaW5lIFNQRElGVFhfTVJfQlBTX01BU0sJCUdFTk1BU0soMjksIDI4KQ0KPj4gKyNk ZWZpbmUgU1BESUZUWF9NUl9CUFMoYnl0ZXMpIFwNCj4+ICsJKCgoKGJ5dGVzKSAtIDEpIDw8IDI4 KSAmIFNQRElGVFhfTVJfQlBTX01BU0spDQo+PiArDQo+PiArLyoNCj4+ICsgKiAtLS0tIEludGVy cnVwdCBFbmFibGUvRGlzYWJsZS9NYXNrL1N0YXR1cyBSZWdpc3RlciAoV3JpdGUvUmVhZC1vbmx5 KSAtLS0tDQo+PiArICovDQo+PiArI2RlZmluZSBTUERJRlRYX0lSX1RYUkRZCQlCSVQoMCkNCj4+ ICsjZGVmaW5lIFNQRElGVFhfSVJfVFhFTVBUWQkJQklUKDEpDQo+PiArI2RlZmluZSBTUERJRlRY X0lSX1RYRlVMTAkJQklUKDIpDQo+PiArI2RlZmluZSBTUERJRlRYX0lSX1RYQ0hVTksJCUJJVCgz KQ0KPj4gKyNkZWZpbmUgU1BESUZUWF9JUl9UWFVEUgkJQklUKDQpDQo+PiArI2RlZmluZSBTUERJ RlRYX0lSX1RYT1ZSCQlCSVQoNSkNCj4+ICsjZGVmaW5lIFNQRElGVFhfSVJfQ1NSRFkJCUJJVCg2 KQ0KPj4gKyNkZWZpbmUgU1BESUZUWF9JUl9VRFJEWQkJQklUKDcpDQo+PiArI2RlZmluZSBTUERJ RlRYX0lSX1RYUkRZQ0goY2gpCQlCSVQoKGNoKSArIDgpDQo+PiArI2RlZmluZSBTUERJRlRYX0lS X1NFQ0UJCQlCSVQoMTApDQo+PiArI2RlZmluZSBTUERJRlRYX0lSX1RYVURSQ0goY2gpCQlCSVQo KGNoKSArIDExKQ0KPj4gKyNkZWZpbmUgU1BESUZUWF9JUl9CRU5ECQkJQklUKDEzKQ0KPj4gKw0K Pj4gK3N0YXRpYyBib29sIG1jaHBfc3BkaWZ0eF9yZWFkYWJsZV9yZWcoc3RydWN0IGRldmljZSAq ZGV2LCB1bnNpZ25lZCBpbnQgcmVnKQ0KPj4gK3sNCj4+ICsJc3dpdGNoIChyZWcpIHsNCj4+ICsJ Y2FzZSBTUERJRlRYX01SOg0KPj4gKwljYXNlIFNQRElGVFhfSU1SOg0KPj4gKwljYXNlIFNQRElG VFhfSVNSOg0KPj4gKwljYXNlIFNQRElGVFhfQ0gxVUQoMCk6DQo+PiArCWNhc2UgU1BESUZUWF9D SDFVRCgxKToNCj4+ICsJY2FzZSBTUERJRlRYX0NIMVVEKDIpOg0KPj4gKwljYXNlIFNQRElGVFhf Q0gxVUQoMyk6DQo+PiArCWNhc2UgU1BESUZUWF9DSDFVRCg0KToNCj4+ICsJY2FzZSBTUERJRlRY X0NIMVVEKDUpOg0KPj4gKwljYXNlIFNQRElGVFhfQ0gxUygwKToNCj4+ICsJY2FzZSBTUERJRlRY X0NIMVMoMSk6DQo+PiArCWNhc2UgU1BESUZUWF9DSDFTKDIpOg0KPj4gKwljYXNlIFNQRElGVFhf Q0gxUygzKToNCj4+ICsJY2FzZSBTUERJRlRYX0NIMVMoNCk6DQo+PiArCWNhc2UgU1BESUZUWF9D SDFTKDUpOg0KPj4gKwkJcmV0dXJuIHRydWU7DQo+PiArCWRlZmF1bHQ6DQo+PiArCQlyZXR1cm4g ZmFsc2U7DQo+PiArCX0NCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGJvb2wgbWNocF9zcGRpZnR4 X3dyaXRlYWJsZV9yZWcoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcmVnKQ0KPj4g K3sNCj4+ICsJc3dpdGNoIChyZWcpIHsNCj4+ICsJY2FzZSBTUERJRlRYX0NSOg0KPj4gKwljYXNl IFNQRElGVFhfTVI6DQo+PiArCWNhc2UgU1BESUZUWF9DRFI6DQo+PiArCWNhc2UgU1BESUZUWF9J RVI6DQo+PiArCWNhc2UgU1BESUZUWF9JRFI6DQo+PiArCWNhc2UgU1BESUZUWF9DSDFVRCgwKToN Cj4+ICsJY2FzZSBTUERJRlRYX0NIMVVEKDEpOg0KPj4gKwljYXNlIFNQRElGVFhfQ0gxVUQoMik6 DQo+PiArCWNhc2UgU1BESUZUWF9DSDFVRCgzKToNCj4+ICsJY2FzZSBTUERJRlRYX0NIMVVEKDQp Og0KPj4gKwljYXNlIFNQRElGVFhfQ0gxVUQoNSk6DQo+PiArCWNhc2UgU1BESUZUWF9DSDFTKDAp Og0KPj4gKwljYXNlIFNQRElGVFhfQ0gxUygxKToNCj4+ICsJY2FzZSBTUERJRlRYX0NIMVMoMik6 DQo+PiArCWNhc2UgU1BESUZUWF9DSDFTKDMpOg0KPj4gKwljYXNlIFNQRElGVFhfQ0gxUyg0KToN Cj4+ICsJY2FzZSBTUERJRlRYX0NIMVMoNSk6DQo+PiArCQlyZXR1cm4gdHJ1ZTsNCj4+ICsJZGVm YXVsdDoNCj4+ICsJCXJldHVybiBmYWxzZTsNCj4+ICsJfQ0KPj4gK30NCj4+ICsNCj4+ICtzdGF0 aWMgYm9vbCBtY2hwX3NwZGlmdHhfcHJlY2lvdXNfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5z aWduZWQgaW50IHJlZykNCj4+ICt7DQo+PiArCXN3aXRjaCAocmVnKSB7DQo+PiArCWNhc2UgU1BE SUZUWF9DRFI6DQo+PiArCWNhc2UgU1BESUZUWF9JU1I6DQo+PiArCQlyZXR1cm4gdHJ1ZTsNCj4+ ICsJZGVmYXVsdDoNCj4+ICsJCXJldHVybiBmYWxzZTsNCj4+ICsJfQ0KPj4gK30NCj4+ICsNCj4+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgbWNocF9zcGRpZnR4X3JlZ21hcF9j b25maWcgPSB7DQo+PiArCS5yZWdfYml0cyA9IDMyLA0KPj4gKwkucmVnX3N0cmlkZSA9IDQsDQo+ PiArCS52YWxfYml0cyA9IDMyLA0KPj4gKwkubWF4X3JlZ2lzdGVyID0gU1BESUZUWF9WRVJTSU9O LA0KPj4gKwkucmVhZGFibGVfcmVnID0gbWNocF9zcGRpZnR4X3JlYWRhYmxlX3JlZywNCj4+ICsJ LndyaXRlYWJsZV9yZWcgPSBtY2hwX3NwZGlmdHhfd3JpdGVhYmxlX3JlZywNCj4+ICsJLnByZWNp b3VzX3JlZyA9IG1jaHBfc3BkaWZ0eF9wcmVjaW91c19yZWcsDQo+PiArfTsNCj4+ICsNCj4+ICsj ZGVmaW5lIFNQRElGVFhfR0NMS19SQVRJTwkxMjgNCj4+ICsNCj4+ICsjZGVmaW5lIFNQRElGVFhf Q1NfQklUUwkJMTkyDQo+PiArI2RlZmluZSBTUERJRlRYX1VEX0JJVFMJCTE5Mg0KPj4gKw0KPj4g K3N0cnVjdCBtY2hwX3NwZGlmdHhfbWl4ZXJfY29udHJvbCB7DQo+PiArCXVuc2lnbmVkIGNoYXIJ CQkJY2hfc3RhdFtTUERJRlRYX0NTX0JJVFMgLyA4XTsNCj4+ICsJdW5zaWduZWQgY2hhcgkJCQl1 c2VyX2RhdGFbU1BESUZUWF9VRF9CSVRTIC8gOF07DQo+PiArCXNwaW5sb2NrX3QJCQkJbG9jazsN Cj4+ICt9Ow0KPj4gKw0KPj4gK3N0cnVjdCBtY2hwX3NwZGlmdHhfZGV2IHsNCj4+ICsJc3RydWN0 IG1jaHBfc3BkaWZ0eF9taXhlcl9jb250cm9sCWNvbnRyb2w7DQo+PiArCXN0cnVjdCBzbmRfZG1h ZW5naW5lX2RhaV9kbWFfZGF0YQlwbGF5YmFjazsNCj4+ICsJc3RydWN0IGRldmljZQkJCQkqZGV2 Ow0KPj4gKwlzdHJ1Y3QgcmVnbWFwCQkJCSpyZWdtYXA7DQo+PiArCXN0cnVjdCBjbGsJCQkJKnBj bGs7DQo+PiArCXN0cnVjdCBjbGsJCQkJKmdjbGs7DQo+PiArCXVuc2lnbmVkIGludAkJCQlmbXQ7 DQo+PiArCWNvbnN0IHN0cnVjdCBtY2hwX2kyc19jYXBzCQkqY2FwczsNCj4+ICsJaW50CQkJCQln Y2xrX2VuYWJsZWQ6MTsNCj4+ICt9Ow0KPj4gKw0KPj4gK3N0YXRpYyBpbmxpbmUgaW50IG1jaHBf c3BkaWZ0eF9pc19ydW5uaW5nKHN0cnVjdCBtY2hwX3NwZGlmdHhfZGV2ICpkZXYpDQo+PiArew0K Pj4gKwl1MzIgbXI7DQo+PiArDQo+PiArCXJlZ21hcF9yZWFkKGRldi0+cmVnbWFwLCBTUERJRlRY X01SLCAmbXIpOw0KPj4gKwlyZXR1cm4gISEobXIgJiBTUERJRlRYX01SX1RYRU5fRU5BQkxFKTsN Cj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQgbWNocF9zcGRpZnR4X2NoYW5uZWxfc3RhdHVz X3dyaXRlKHN0cnVjdCBtY2hwX3NwZGlmdHhfZGV2ICpkZXYpDQo+PiArew0KPj4gKwlzdHJ1Y3Qg bWNocF9zcGRpZnR4X21peGVyX2NvbnRyb2wgKmN0cmwgPSAmZGV2LT5jb250cm9sOw0KPj4gKwl1 MzIgdmFsOw0KPj4gKwlpbnQgaTsNCj4+ICsNCj4+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJ WkUoY3RybC0+Y2hfc3RhdCkgLyA0OyBpKyspIHsNCj4+ICsJCXZhbCA9IChjdHJsLT5jaF9zdGF0 WyhpICogNCkgKyAwXSA8PCAwKSB8DQo+PiArCQkgICAgICAoY3RybC0+Y2hfc3RhdFsoaSAqIDQp ICsgMV0gPDwgOCkgfA0KPj4gKwkJICAgICAgKGN0cmwtPmNoX3N0YXRbKGkgKiA0KSArIDJdIDw8 IDE2KSB8DQo+PiArCQkgICAgICAoY3RybC0+Y2hfc3RhdFsoaSAqIDQpICsgM10gPDwgMjQpOw0K Pj4gKw0KPj4gKwkJcmVnbWFwX3dyaXRlKGRldi0+cmVnbWFwLCBTUERJRlRYX0NIMVMoaSksIHZh bCk7DQo+PiArCX0NCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQgbWNocF9zcGRpZnR4X3Vz ZXJfZGF0YV93cml0ZShzdHJ1Y3QgbWNocF9zcGRpZnR4X2RldiAqZGV2KQ0KPj4gK3sNCj4+ICsJ c3RydWN0IG1jaHBfc3BkaWZ0eF9taXhlcl9jb250cm9sICpjdHJsID0gJmRldi0+Y29udHJvbDsN Cj4+ICsJdTMyIHZhbDsNCj4+ICsJaW50IGk7DQo+PiArDQo+PiArCWZvciAoaSA9IDA7IGkgPCBB UlJBWV9TSVpFKGN0cmwtPnVzZXJfZGF0YSkgLyA0OyBpKyspIHsNCj4+ICsJCXZhbCA9IChjdHJs LT51c2VyX2RhdGFbKGkgKiA0KSArIDBdIDw8IDApIHwNCj4+ICsJCSAgICAgIChjdHJsLT51c2Vy X2RhdGFbKGkgKiA0KSArIDFdIDw8IDgpIHwNCj4+ICsJCSAgICAgIChjdHJsLT51c2VyX2RhdGFb KGkgKiA0KSArIDJdIDw8IDE2KSB8DQo+PiArCQkgICAgICAoY3RybC0+dXNlcl9kYXRhWyhpICog NCkgKyAzXSA8PCAyNCk7DQo+PiArDQo+PiArCQlyZWdtYXBfd3JpdGUoZGV2LT5yZWdtYXAsIFNQ RElGVFhfQ0gxVUQoaSksIHZhbCk7DQo+PiArCX0NCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGly cXJldHVybl90IG1jaHBfc3BkaWZ0eF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQ0K Pj4gK3sNCj4+ICsJc3RydWN0IG1jaHBfc3BkaWZ0eF9kZXYgKmRldiA9IGRldl9pZDsNCj4+ICsJ c3RydWN0IG1jaHBfc3BkaWZ0eF9taXhlcl9jb250cm9sICpjdHJsID0gJmRldi0+Y29udHJvbDsN Cj4+ICsJdTMyIHNyLCBpbXIsIHBlbmRpbmcsIGlkciA9IDA7DQo+PiArDQo+PiArCXJlZ21hcF9y ZWFkKGRldi0+cmVnbWFwLCBTUERJRlRYX0lTUiwgJnNyKTsNCj4+ICsJcmVnbWFwX3JlYWQoZGV2 LT5yZWdtYXAsIFNQRElGVFhfSU1SLCAmaW1yKTsNCj4+ICsJcGVuZGluZyA9IHNyICYgaW1yOw0K Pj4gKw0KPj4gKwlpZiAoIXBlbmRpbmcpDQo+PiArCQlyZXR1cm4gSVJRX05PTkU7DQo+PiArDQo+ PiArCWlmIChwZW5kaW5nICYgU1BESUZUWF9JUl9UWFVEUikgew0KPj4gKwkJZGV2X3dhcm4oZGV2 LT5kZXYsICJ1bmRlcmZsb3cgZGV0ZWN0ZWRcbiIpOw0KPj4gKwkJaWRyIHw9IFNQRElGVFhfSVJf VFhVRFI7DQo+PiArCX0NCj4+ICsNCj4+ICsJaWYgKHBlbmRpbmcgJiBTUERJRlRYX0lSX1RYT1ZS KSB7DQo+PiArCQlkZXZfd2FybihkZXYtPmRldiwgIm92ZXJmbG93IGRldGVjdGVkXG4iKTsNCj4+ ICsJCWlkciB8PSBTUERJRlRYX0lSX1RYT1ZSOw0KPj4gKwl9DQo+PiArDQo+PiArCWlmIChwZW5k aW5nICYgU1BESUZUWF9JUl9VRFJEWSkgew0KPj4gKwkJc3Bpbl9sb2NrKCZjdHJsLT5sb2NrKTsN Cj4+ICsJCW1jaHBfc3BkaWZ0eF91c2VyX2RhdGFfd3JpdGUoZGV2KTsNCj4+ICsJCXNwaW5fdW5s b2NrKCZjdHJsLT5sb2NrKTsNCj4+ICsJCWlkciB8PSBTUERJRlRYX0lSX1VEUkRZOw0KPj4gKwl9 DQo+PiArDQo+PiArCWlmIChwZW5kaW5nICYgU1BESUZUWF9JUl9DU1JEWSkgew0KPj4gKwkJc3Bp bl9sb2NrKCZjdHJsLT5sb2NrKTsNCj4+ICsJCW1jaHBfc3BkaWZ0eF9jaGFubmVsX3N0YXR1c193 cml0ZShkZXYpOw0KPj4gKwkJc3Bpbl91bmxvY2soJmN0cmwtPmxvY2spOw0KPj4gKwkJaWRyIHw9 IFNQRElGVFhfSVJfQ1NSRFk7DQo+PiArCX0NCj4+ICsNCj4+ICsJcmVnbWFwX3dyaXRlKGRldi0+ cmVnbWFwLCBTUERJRlRYX0lEUiwgaWRyKTsNCj4+ICsNCj4+ICsJcmV0dXJuIElSUV9IQU5ETEVE Ow0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IG1jaHBfc3BkaWZ0eF9kYWlfc3RhcnR1cChz dHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwNCj4+ICsJCQkJICAgIHN0cnVjdCBz bmRfc29jX2RhaSAqZGFpKQ0KPj4gK3sNCj4+ICsJc3RydWN0IG1jaHBfc3BkaWZ0eF9kZXYgKmRl diA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKGRhaSk7DQo+PiArCWludCBlcnI7DQo+PiArDQo+ PiArCWVyciA9IGNsa19wcmVwYXJlX2VuYWJsZShkZXYtPnBjbGspOw0KPj4gKwlpZiAoZXJyKSB7 DQo+PiArCQlkZXZfZXJyKGRldi0+ZGV2LA0KPj4gKwkJCSJmYWlsZWQgdG8gZW5hYmxlIHRoZSBw ZXJpcGhlcmFsIGNsb2NrOiAlZFxuIiwgZXJyKTsNCj4+ICsJCXJldHVybiBlcnI7DQo+PiArCX0N Cj4+ICsNCj4+ICsJLyogU29mdHdhcmUgcmVzZXQgdGhlIElQICovDQo+PiArCXJlZ21hcF93cml0 ZShkZXYtPnJlZ21hcCwgU1BESUZUWF9DUiwNCj4+ICsJCSAgICAgU1BESUZUWF9DUl9TV1JTVCB8 IFNQRElGVFhfQ1JfRkNMUik7DQo+PiArDQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ ICtzdGF0aWMgdm9pZCBtY2hwX3NwZGlmdHhfZGFpX3NodXRkb3duKHN0cnVjdCBzbmRfcGNtX3N1 YnN0cmVhbSAqc3Vic3RyZWFtLA0KPj4gKwkJCQkgICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRh aSkNCj4+ICt7DQo+PiArCXN0cnVjdCBtY2hwX3NwZGlmdHhfZGV2ICpkZXYgPSBzbmRfc29jX2Rh aV9nZXRfZHJ2ZGF0YShkYWkpOw0KPj4gKw0KPj4gKwkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8N Cj4+ICsJcmVnbWFwX3dyaXRlKGRldi0+cmVnbWFwLCBTUERJRlRYX0lEUiwgMHhmZmZmZmZmZik7 DQo+PiArDQo+PiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShkZXYtPnBjbGspOw0KPj4gK30NCj4+ ICsNCj4+ICtzdGF0aWMgaW50IG1jaHBfc3BkaWZ0eF90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1 YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kLA0KPj4gKwkJCQlzdHJ1Y3Qgc25kX3NvY19kYWkg KmRhaSkNCj4+ICt7DQo+PiArCXN0cnVjdCBtY2hwX3NwZGlmdHhfZGV2ICpkZXYgPSBzbmRfc29j X2RhaV9nZXRfZHJ2ZGF0YShkYWkpOw0KPj4gKwlzdHJ1Y3QgbWNocF9zcGRpZnR4X21peGVyX2Nv bnRyb2wgKmN0cmwgPSAmZGV2LT5jb250cm9sOw0KPj4gKwl1MzIgbXI7DQo+PiArCWludCBydW5u aW5nOw0KPj4gKwlpbnQgcmV0Ow0KPj4gKw0KPj4gKwkvKiBkbyBub3Qgc3RhcnQvc3RvcCB3aGls ZSBjaGFubmVsIHN0YXR1cyBvciB1c2VyIGRhdGEgaXMgdXBkYXRlZCAqLw0KPj4gKwlzcGluX2xv Y2soJmN0cmwtPmxvY2spOw0KPj4gKwlyZWdtYXBfcmVhZChkZXYtPnJlZ21hcCwgU1BESUZUWF9N UiwgJm1yKTsNCj4gDQo+IEhlcmUsIGF0b21pYywgZm9yIGluc3RhbmNlLg0KDQpUaGlzIGlzIHdo ZXJlIEkgY2hlY2sgYW5kIGNoYW5nZSBmb3IgVFhFTi4gVGhlIElQIG11c3Qgbm90IGJlIHN0YXJ0 ZWQgDQp3aGlsZSB0aGUgdXNlcnNwYWNlIHVwZGF0ZXMgdGhlIFNQRElGVFhfQ0gxVUR4IG9yIFNQ RElGVFhfQ0gxU3ggcmVnaXN0ZXJzLg0KDQo+IA0KPj4gKwlydW5uaW5nID0gISEobXIgJiBTUERJ RlRYX01SX1RYRU5fRU5BQkxFKTsNCj4+ICsNCj4+ICsJc3dpdGNoIChjbWQpIHsNCj4+ICsJY2Fz ZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoNCj4+ICsJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9S RVNVTUU6DQo+PiArCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToNCj4+ICsJ CWlmICghcnVubmluZykgew0KPj4gKwkJCW1yICY9IH5TUERJRlRYX01SX1RYRU5fTUFTSzsNCj4+ ICsJCQltciB8PSBTUERJRlRYX01SX1RYRU5fRU5BQkxFOw0KPj4gKwkJfQ0KPj4gKwkJYnJlYWs7 DQo+PiArCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoNCj4+ICsJY2FzZSBTTkRSVl9QQ01f VFJJR0dFUl9TVVNQRU5EOg0KPj4gKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6 DQo+PiArCQlpZiAocnVubmluZykgew0KPj4gKwkJCW1yICY9IH5TUERJRlRYX01SX1RYRU5fTUFT SzsNCj4+ICsJCQltciB8PSBTUERJRlRYX01SX1RYRU5fRElTQUJMRTsNCj4+ICsJCX0NCj4+ICsJ CWJyZWFrOw0KPj4gKwlkZWZhdWx0Og0KPj4gKwkJc3Bpbl91bmxvY2soJmN0cmwtPmxvY2spOw0K Pj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+PiArCX0NCj4+ICsNCj4+ICsJcmV0ID0gcmVnbWFwX3dy aXRlKGRldi0+cmVnbWFwLCBTUERJRlRYX01SLCBtcik7DQo+PiArCXNwaW5fdW5sb2NrKCZjdHJs LT5sb2NrKTsNCj4+ICsJaWYgKHJldCkgew0KPj4gKwkJZGV2X2VycihkZXYtPmRldiwgInVuYWJs ZSB0byBkaXNhYmxlIFRYOiAlZFxuIiwgcmV0KTsNCj4+ICsJCXJldHVybiByZXQ7DQo+PiArCX0N Cj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgbWNocF9z cGRpZnR4X2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwNCj4+ ICsJCQkJICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywNCj4+ICsJCQkJICBzdHJ1 Y3Qgc25kX3NvY19kYWkgKmRhaSkNCj4+ICt7DQo+PiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ PiArCXN0cnVjdCBtY2hwX3NwZGlmdHhfZGV2ICpkZXYgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0 YShkYWkpOw0KPj4gKwlzdHJ1Y3QgbWNocF9zcGRpZnR4X21peGVyX2NvbnRyb2wgKmN0cmwgPSAm ZGV2LT5jb250cm9sOw0KPj4gKwl1MzIgbXI7DQo+PiArCXVuc2lnbmVkIGludCBicHMgPSBwYXJh bXNfcGh5c2ljYWxfd2lkdGgocGFyYW1zKSAvIDg7DQo+PiArCWludCByZXQ7DQo+PiArDQo+PiAr CWRldl9kYmcoZGV2LT5kZXYsICIlcygpIHJhdGU9JXUgZm9ybWF0PSUjeCB3aWR0aD0ldSBjaGFu bmVscz0ldVxuIiwNCj4+ICsJCV9fZnVuY19fLCBwYXJhbXNfcmF0ZShwYXJhbXMpLCBwYXJhbXNf Zm9ybWF0KHBhcmFtcyksDQo+PiArCQlwYXJhbXNfd2lkdGgocGFyYW1zKSwgcGFyYW1zX2NoYW5u ZWxzKHBhcmFtcykpOw0KPj4gKw0KPj4gKwlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZf UENNX1NUUkVBTV9DQVBUVVJFKSB7DQo+PiArCQlkZXZfZXJyKGRldi0+ZGV2LCAiQ2FwdHVyZSBp cyBub3Qgc3VwcG9ydGVkXG4iKTsNCj4+ICsJCXJldHVybiAtRUlOVkFMOw0KPj4gKwl9DQo+PiAr DQo+PiArCXJlZ21hcF9yZWFkKGRldi0+cmVnbWFwLCBTUERJRlRYX01SLCAmbXIpOw0KPiANCj4g SGVyZSBub24tYXRvbWljLg0KDQpUWEVOIGlzIG5vdCB0b3V0Y2hlZCBoZXJlIGFuZCBod19wYXJh bXMoKSBhbmQgdHJpZ2dlcigpIGNhbGxiYWNrcyBjYW4ndCANCmJlIGNhbGxlZCBhdCB0aGUgc2Ft ZSB0aW1lLiBUaGUgY29uY3VyZW5jeSBjYW4gYmUgb25seSB3aXRoIHRoZSBjb250cm9scyANCmZ1 bmN0aW9ucywgd2hvIGRvbid0IHRvdWNoIHRoZSBTUERJRlRYX01SIHJlZ2lzdGVyIGF0IGFsbC4N Cg0KPiANCj4+ICsNCj4+ICsJaWYgKG1yICYgU1BESUZUWF9NUl9UWEVOX0VOQUJMRSkgew0KPj4g KwkJZGV2X2VycihkZXYtPmRldiwgIlBDTSBhbHJlYWR5IHJ1bm5pbmdcbiIpOw0KPj4gKwkJcmV0 dXJuIC1FQlVTWTsNCj4+ICsJfQ0KPj4gKw0KPj4gKwkvKiBEZWZhdWx0czogVG9nZ2xlIG1vZGUs IGp1c3RpZnkgdG8gTFNCLCBjaHVua3NpemUgMSAqLw0KPj4gKwltciA9IFNQRElGVFhfTVJfQ01P REVfVE9HR0xFX0FDQ0VTUyB8IFNQRElGVFhfTVJfSlVTVElGWV9MU0I7DQo+PiArCWRldi0+cGxh eWJhY2subWF4YnVyc3QgPSAxOw0KPj4gKwlzd2l0Y2ggKHBhcmFtc19jaGFubmVscyhwYXJhbXMp KSB7DQo+PiArCWNhc2UgMToNCj4+ICsJCW1yIHw9IFNQRElGVFhfTVJfTVVMVElDSF9NT05POw0K Pj4gKwkJYnJlYWs7DQo+PiArCWNhc2UgMjoNCj4+ICsJCW1yIHw9IFNQRElGVFhfTVJfTVVMVElD SF9EVUFMOw0KPj4gKwkJaWYgKGJwcyA+IDIpDQo+PiArCQkJZGV2LT5wbGF5YmFjay5tYXhidXJz dCA9IDI7DQo+PiArCQlicmVhazsNCj4+ICsJZGVmYXVsdDoNCj4+ICsJCWRldl9lcnIoZGV2LT5k ZXYsICJ1bnN1cHBvcnRlZCBudW1iZXIgb2YgY2hhbm5lbHM6ICVkXG4iLA0KPj4gKwkJCXBhcmFt c19jaGFubmVscyhwYXJhbXMpKTsNCj4+ICsJCXJldHVybiAtRUlOVkFMOw0KPj4gKwl9DQo+PiAr CW1yIHw9IFNQRElGVFhfTVJfQ0hVTksoZGV2LT5wbGF5YmFjay5tYXhidXJzdCk7DQo+PiArDQo+ PiArCXN3aXRjaCAocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSB7DQo+PiArCWNhc2UgU05EUlZfUENN X0ZPUk1BVF9TODoNCj4+ICsJCW1yIHw9IFNQRElGVFhfTVJfVkJQUyg4KTsNCj4+ICsJCWJyZWFr Ow0KPj4gKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0JFOg0KPj4gKwkJbXIgfD0gU1BESUZU WF9NUl9FTkRJQU5fQklHOw0KPj4gKwkJZmFsbHRocm91Z2g7DQo+PiArCWNhc2UgU05EUlZfUENN X0ZPUk1BVF9TMTZfTEU6DQo+PiArCQltciB8PSBTUERJRlRYX01SX1ZCUFMoMTYpOw0KPj4gKwkJ YnJlYWs7DQo+PiArCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMThfM0JFOg0KPj4gKwkJbXIgfD0g U1BESUZUWF9NUl9FTkRJQU5fQklHOw0KPj4gKwkJZmFsbHRocm91Z2g7DQo+PiArCWNhc2UgU05E UlZfUENNX0ZPUk1BVF9TMThfM0xFOg0KPj4gKwkJbXIgfD0gU1BESUZUWF9NUl9WQlBTKDE4KTsN Cj4+ICsJCWJyZWFrOw0KPj4gKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzIwXzNCRToNCj4+ICsJ CW1yIHw9IFNQRElGVFhfTVJfRU5ESUFOX0JJRzsNCj4+ICsJCWZhbGx0aHJvdWdoOw0KPj4gKwlj YXNlIFNORFJWX1BDTV9GT1JNQVRfUzIwXzNMRToNCj4+ICsJCW1yIHw9IFNQRElGVFhfTVJfVkJQ UygyMCk7DQo+PiArCQlicmVhazsNCj4+ICsJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF8zQkU6 DQo+PiArCQltciB8PSBTUERJRlRYX01SX0VORElBTl9CSUc7DQo+PiArCQlmYWxsdGhyb3VnaDsN Cj4+ICsJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF8zTEU6DQo+PiArCQltciB8PSBTUERJRlRY X01SX1ZCUFMoMjQpOw0KPj4gKwkJYnJlYWs7DQo+PiArCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9T MjRfQkU6DQo+PiArCQltciB8PSBTUERJRlRYX01SX0VORElBTl9CSUc7DQo+PiArCQlmYWxsdGhy b3VnaDsNCj4+ICsJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRToNCj4+ICsJCW1yIHw9IFNQ RElGVFhfTVJfVkJQUygyNCk7DQo+PiArCQlicmVhazsNCj4+ICsJY2FzZSBTTkRSVl9QQ01fRk9S TUFUX1MzMl9CRToNCj4+ICsJCW1yIHw9IFNQRElGVFhfTVJfRU5ESUFOX0JJRzsNCj4+ICsJCWZh bGx0aHJvdWdoOw0KPj4gKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFOg0KPj4gKwkJbXIg fD0gU1BESUZUWF9NUl9WQlBTKDMyKTsNCj4+ICsJCWJyZWFrOw0KPj4gKwlkZWZhdWx0Og0KPj4g KwkJZGV2X2VycihkZXYtPmRldiwgInVuc3VwcG9ydGVkIFBDTSBmb3JtYXQ6ICVkXG4iLA0KPj4g KwkJCXBhcmFtc19mb3JtYXQocGFyYW1zKSk7DQo+PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4+ICsJ fQ0KPj4gKw0KPj4gKwltciB8PSBTUERJRlRYX01SX0JQUyhicHMpOw0KPj4gKw0KPj4gKwlzcGlu X2xvY2tfaXJxc2F2ZSgmY3RybC0+bG9jaywgZmxhZ3MpOw0KPj4gKwljdHJsLT5jaF9zdGF0WzNd ICY9IH5JRUM5NThfQUVTM19DT05fRlM7DQo+PiArCXN3aXRjaCAocGFyYW1zX3JhdGUocGFyYW1z KSkgew0KPj4gKwljYXNlIDIyMDUwOg0KPj4gKwkJY3RybC0+Y2hfc3RhdFszXSB8PSBJRUM5NThf QUVTM19DT05fRlNfMjIwNTA7DQo+PiArCQlicmVhazsNCj4+ICsJY2FzZSAyNDAwMDoNCj4+ICsJ CWN0cmwtPmNoX3N0YXRbM10gfD0gSUVDOTU4X0FFUzNfQ09OX0ZTXzI0MDAwOw0KPj4gKwkJYnJl YWs7DQo+PiArCWNhc2UgMzIwMDA6DQo+PiArCQljdHJsLT5jaF9zdGF0WzNdIHw9IElFQzk1OF9B RVMzX0NPTl9GU18zMjAwMDsNCj4+ICsJCWJyZWFrOw0KPj4gKwljYXNlIDQ0MTAwOg0KPj4gKwkJ Y3RybC0+Y2hfc3RhdFszXSB8PSBJRUM5NThfQUVTM19DT05fRlNfNDQxMDA7DQo+PiArCQlicmVh azsNCj4+ICsJY2FzZSA0ODAwMDoNCj4+ICsJCWN0cmwtPmNoX3N0YXRbM10gfD0gSUVDOTU4X0FF UzNfQ09OX0ZTXzQ4MDAwOw0KPj4gKwkJYnJlYWs7DQo+PiArCWNhc2UgODgyMDA6DQo+PiArCQlj dHJsLT5jaF9zdGF0WzNdIHw9IElFQzk1OF9BRVMzX0NPTl9GU184ODIwMDsNCj4+ICsJCWJyZWFr Ow0KPj4gKwljYXNlIDk2MDAwOg0KPj4gKwkJY3RybC0+Y2hfc3RhdFszXSB8PSBJRUM5NThfQUVT M19DT05fRlNfOTYwMDA7DQo+PiArCQlicmVhazsNCj4+ICsJY2FzZSAxNzY0MDA6DQo+PiArCQlj dHJsLT5jaF9zdGF0WzNdIHw9IElFQzk1OF9BRVMzX0NPTl9GU18xNzY0MDA7DQo+PiArCQlicmVh azsNCj4+ICsJY2FzZSAxOTIwMDA6DQo+PiArCQljdHJsLT5jaF9zdGF0WzNdIHw9IElFQzk1OF9B RVMzX0NPTl9GU18xOTIwMDA7DQo+PiArCQlicmVhazsNCj4+ICsJY2FzZSA4MDAwOg0KPj4gKwlj YXNlIDExMDI1Og0KPj4gKwljYXNlIDE2MDAwOg0KPj4gKwljYXNlIDY0MDAwOg0KPj4gKwkJY3Ry bC0+Y2hfc3RhdFszXSB8PSBJRUM5NThfQUVTM19DT05fRlNfTk9USUQ7DQo+PiArCQlicmVhazsN Cj4+ICsJZGVmYXVsdDoNCj4+ICsJCWRldl9lcnIoZGV2LT5kZXYsICJ1bnN1cHBvcnRlZCBzYW1w bGUgZnJlcXVlbmN5OiAldVxuIiwNCj4+ICsJCQlwYXJhbXNfcmF0ZShwYXJhbXMpKTsNCj4+ICsJ CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0cmwtPmxvY2ssIGZsYWdzKTsNCj4+ICsJCXJldHVy biAtRUlOVkFMOw0KPj4gKwl9DQo+PiArCW1jaHBfc3BkaWZ0eF9jaGFubmVsX3N0YXR1c193cml0 ZShkZXYpOw0KPj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHJsLT5sb2NrLCBmbGFncyk7 DQo+PiArCW1yIHw9IFNQRElGVFhfTVJfVkFMSUQxIHwgU1BESUZUWF9NUl9WQUxJRDI7DQo+PiAr DQo+PiArCWlmIChkZXYtPmdjbGtfZW5hYmxlZCkgew0KPj4gKwkJY2xrX2Rpc2FibGVfdW5wcmVw YXJlKGRldi0+Z2Nsayk7DQo+PiArCQlkZXYtPmdjbGtfZW5hYmxlZCA9IDA7DQo+PiArCX0NCj4+ ICsJcmV0ID0gY2xrX3NldF9yYXRlKGRldi0+Z2NsaywgcGFyYW1zX3JhdGUocGFyYW1zKSAqDQo+ PiArCQkJCSAgICAgIFNQRElGVFhfR0NMS19SQVRJTyk7DQo+PiArCWlmIChyZXQpIHsNCj4+ICsJ CWRldl9lcnIoZGV2LT5kZXYsDQo+PiArCQkJInVuYWJsZSB0byBjaGFuZ2UgZ2NsayByYXRlIHRv OiByYXRlICV1ICogcmF0aW8gJXVcbiIsDQo+PiArCQkJcGFyYW1zX3JhdGUocGFyYW1zKSwgU1BE SUZUWF9HQ0xLX1JBVElPKTsNCj4+ICsJCXJldHVybiByZXQ7DQo+PiArCX0NCj4+ICsJcmV0ID0g Y2xrX3ByZXBhcmVfZW5hYmxlKGRldi0+Z2Nsayk7DQo+PiArCWlmIChyZXQpIHsNCj4+ICsJCWRl dl9lcnIoZGV2LT5kZXYsICJ1bmFibGUgdG8gZW5hYmxlIGdjbGs6ICVkXG4iLCByZXQpOw0KPj4g KwkJcmV0dXJuIHJldDsNCj4+ICsJfQ0KPj4gKwlkZXYtPmdjbGtfZW5hYmxlZCA9IDE7DQo+PiAr CWRldl9kYmcoZGV2LT5kZXYsICIlcygpOiBHQ0xLIHNldCB0byAlZFxuIiwgX19mdW5jX18sDQo+ PiArCQlwYXJhbXNfcmF0ZShwYXJhbXMpICogU1BESUZUWF9HQ0xLX1JBVElPKTsNCj4+ICsNCj4+ ICsJLyogRW5hYmxlIGludGVycnVwdHMgKi8NCj4+ICsJcmVnbWFwX3dyaXRlKGRldi0+cmVnbWFw LCBTUERJRlRYX0lFUiwNCj4+ICsJCSAgICAgU1BESUZUWF9JUl9UWFVEUiB8IFNQRElGVFhfSVJf VFhPVlIpOw0KPj4gKw0KPj4gKwlyZWdtYXBfd3JpdGUoZGV2LT5yZWdtYXAsIFNQRElGVFhfTVIs IG1yKTsNCj4gDQo+IFNhbWUgaGVyZS4NCg0KSSBleHBsYWluZWQgYWJvdmUuIEV2ZW4gaWYgTVIg cmVnaXN0ZXIgaXMgY2hhbmdlZCBoZXJlLCB0aGUgVFhFTiBiaXQgaXMgDQpub3QgY2hhbmdlZCBh bmQgdGhlIHByZXZpb3VzIHZhbHVlIGlzIGtlcHQuDQoNClRoZSBwdXJwb3NlIG9mIHRoaXMgbG9j ayBpcyB0byBhc3N1cmUgdGhhdCB0aGUgSVAgd29uJ3QgY2hhbmdlIGl0cyBzdGF0ZSANCihUWEVO IGNoYW5nZWQpIHdoaWxlIFNQRElGVFhfQ0gxVUR4IG9yIFNQRElGVFhfQ0gxU3ggcmVnaXN0ZXJz IGFyZSANCnVwZGF0ZWQuIFRoZSBsb2NrIGlzIG5vdCB0byBwcm90ZWN0IGFsbCB0aGUgdmFsdWVz IGZyb20gdGhlIE1SIHJlZ2lzdGVyLiANCklmIHlvdSBmb3VuZCBhIGNhc2UgaW4gd2hpY2ggdGhp cyBpcyBub3QgYWNoaWV2ZWQsIHBsZWFzZSBsZXQgbWUga25vdy4NCg0KVGhhbmsgeW91IGZvciB5 b3VyIHJldmlldyENCg0KQmVzdCByZWdhcmRzLA0KQ29kcmluDQoNCj4gDQo+PiArDQo+PiArCXJl dHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IG1jaHBfc3BkaWZ0eF9od19mcmVl KHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLA0KPj4gKwkJCQlzdHJ1Y3Qgc25k X3NvY19kYWkgKmRhaSkNCj4+ICt7DQo+PiArCXN0cnVjdCBtY2hwX3NwZGlmdHhfZGV2ICpkZXYg PSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShkYWkpOw0KPj4gKw0KPj4gKwlyZWdtYXBfd3JpdGUo ZGV2LT5yZWdtYXAsIFNQRElGVFhfSURSLA0KPj4gKwkJICAgICBTUERJRlRYX0lSX1RYVURSIHwg U1BESUZUWF9JUl9UWE9WUik7DQo+PiArCWlmIChkZXYtPmdjbGtfZW5hYmxlZCkgew0KPj4gKwkJ Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRldi0+Z2Nsayk7DQo+PiArCQlkZXYtPmdjbGtfZW5hYmxl ZCA9IDA7DQo+PiArCX0NCj4+ICsNCj4+ICsJcmV0dXJuIHJlZ21hcF93cml0ZShkZXYtPnJlZ21h cCwgU1BESUZUWF9DUiwNCj4+ICsJCQkgICAgU1BESUZUWF9DUl9TV1JTVCB8IFNQRElGVFhfQ1Jf RkNMUik7DQo+PiArfQ0KPj4gKw0KPj4gKw0KPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3Nv Y19kYWlfb3BzIG1jaHBfc3BkaWZ0eF9kYWlfb3BzID0gew0KPj4gKwkuc3RhcnR1cAk9IG1jaHBf c3BkaWZ0eF9kYWlfc3RhcnR1cCwNCj4+ICsJLnNodXRkb3duCT0gbWNocF9zcGRpZnR4X2RhaV9z aHV0ZG93biwNCj4+ICsJLnRyaWdnZXIJPSBtY2hwX3NwZGlmdHhfdHJpZ2dlciwNCj4+ICsJLmh3 X3BhcmFtcwk9IG1jaHBfc3BkaWZ0eF9od19wYXJhbXMsDQo+PiArCS5od19mcmVlCT0gbWNocF9z cGRpZnR4X2h3X2ZyZWUsDQo+PiArfTsNCj4+ICsNCj4+ICsjZGVmaW5lIE1DSFBfU1BESUZUWF9S QVRFUwlTTkRSVl9QQ01fUkFURV84MDAwXzE5MjAwMA0KPj4gKw0KPj4gKyNkZWZpbmUgTUNIUF9T UERJRlRYX0ZPUk1BVFMJKFNORFJWX1BDTV9GTVRCSVRfUzggfAkJXA0KPj4gKwkJCQkgU05EUlZf UENNX0ZNVEJJVF9TMTZfTEUgfAlcDQo+PiArCQkJCSBTTkRSVl9QQ01fRk1UQklUX1UxNl9CRSB8 CVwNCj4+ICsJCQkJIFNORFJWX1BDTV9GTVRCSVRfUzE4XzNMRSB8CVwNCj4+ICsJCQkJIFNORFJW X1BDTV9GTVRCSVRfUzE4XzNCRSB8CVwNCj4+ICsJCQkJIFNORFJWX1BDTV9GTVRCSVRfUzIwXzNM RSB8CVwNCj4+ICsJCQkJIFNORFJWX1BDTV9GTVRCSVRfUzIwXzNCRSB8CVwNCj4+ICsJCQkJIFNO RFJWX1BDTV9GTVRCSVRfUzI0XzNMRSB8CVwNCj4+ICsJCQkJIFNORFJWX1BDTV9GTVRCSVRfUzI0 XzNCRSB8CVwNCj4+ICsJCQkJIFNORFJWX1BDTV9GTVRCSVRfUzI0X0xFIHwJXA0KPj4gKwkJCQkg U05EUlZfUENNX0ZNVEJJVF9TMjRfQkUgfAlcDQo+PiArCQkJCSBTTkRSVl9QQ01fRk1UQklUX1Mz Ml9MRSB8CVwNCj4+ICsJCQkJIFNORFJWX1BDTV9GTVRCSVRfUzMyX0JFCVwNCj4+ICsJCQkJICkN Cj4+ICsNCj4+ICtzdGF0aWMgaW50IG1jaHBfc3BkaWZ0eF9pbmZvKHN0cnVjdCBzbmRfa2NvbnRy b2wgKmtjb250cm9sLA0KPj4gKwkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5m bykNCj4+ICt7DQo+PiArCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9JRUM5NTg7 DQo+PiArCXVpbmZvLT5jb3VudCA9IDE7DQo+PiArDQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ ICsNCj4+ICtzdGF0aWMgaW50IG1jaHBfc3BkaWZ0eF9jc19nZXQoc3RydWN0IHNuZF9rY29udHJv bCAqa2NvbnRyb2wsDQo+PiArCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnV2 YWx1ZSkNCj4+ICt7DQo+PiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+PiArCXN0cnVjdCBzbmRf c29jX2RhaSAqZGFpID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOw0KPj4gKwlzdHJ1Y3Qg bWNocF9zcGRpZnR4X2RldiAqZGV2ID0gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoZGFpKTsNCj4+ ICsJc3RydWN0IG1jaHBfc3BkaWZ0eF9taXhlcl9jb250cm9sICpjdHJsID0gJmRldi0+Y29udHJv bDsNCj4+ICsNCj4+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmN0cmwtPmxvY2ssIGZsYWdzKTsNCj4+ ICsJbWVtY3B5KHV2YWx1ZS0+dmFsdWUuaWVjOTU4LnN0YXR1cywgY3RybC0+Y2hfc3RhdCwNCj4+ ICsJICAgICAgIHNpemVvZihjdHJsLT5jaF9zdGF0KSk7DQo+PiArCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJmN0cmwtPmxvY2ssIGZsYWdzKTsNCj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0K Pj4gKw0KPj4gK3N0YXRpYyBpbnQgbWNocF9zcGRpZnR4X2NzX3B1dChzdHJ1Y3Qgc25kX2tjb250 cm9sICprY29udHJvbCwNCj4+ICsJCQkgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAq dXZhbHVlKQ0KPj4gK3sNCj4+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsNCj4+ICsJc3RydWN0IHNu ZF9zb2NfZGFpICpkYWkgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7DQo+PiArCXN0cnVj dCBtY2hwX3NwZGlmdHhfZGV2ICpkZXYgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShkYWkpOw0K Pj4gKwlzdHJ1Y3QgbWNocF9zcGRpZnR4X21peGVyX2NvbnRyb2wgKmN0cmwgPSAmZGV2LT5jb250 cm9sOw0KPj4gKwlpbnQgY2hhbmdlZCA9IDA7DQo+PiArCWludCBpOw0KPj4gKw0KPj4gKwlzcGlu X2xvY2tfaXJxc2F2ZSgmY3RybC0+bG9jaywgZmxhZ3MpOw0KPj4gKwlmb3IgKGkgPSAwOyBpIDwg QVJSQVlfU0laRShjdHJsLT5jaF9zdGF0KTsgaSsrKSB7DQo+PiArCQlpZiAoY3RybC0+Y2hfc3Rh dFtpXSAhPSB1dmFsdWUtPnZhbHVlLmllYzk1OC5zdGF0dXNbaV0pDQo+PiArCQkJY2hhbmdlZCA9 IDE7DQo+PiArCQljdHJsLT5jaF9zdGF0W2ldID0gdXZhbHVlLT52YWx1ZS5pZWM5NTguc3RhdHVz W2ldOw0KPj4gKwl9DQo+PiArDQo+PiArCWlmIChjaGFuZ2VkKSB7DQo+PiArCQkvKiBkb24ndCBl bmFibGUgSVAgd2hpbGUgd2UgY29weSB0aGUgY2hhbm5lbCBzdGF0dXMgKi8NCj4+ICsJCWlmICht Y2hwX3NwZGlmdHhfaXNfcnVubmluZyhkZXYpKSB7DQo+PiArCQkJLyoNCj4+ICsJCQkgKiBpZiBT UERJRiBpcyBydW5uaW5nLCB3YWl0IGZvciBpbnRlcnJ1cHQgdG8gd3JpdGUNCj4+ICsJCQkgKiBj aGFubmVsIHN0YXR1cw0KPj4gKwkJCSAqLw0KPj4gKwkJCXJlZ21hcF93cml0ZShkZXYtPnJlZ21h cCwgU1BESUZUWF9JRVIsDQo+PiArCQkJCSAgICAgU1BESUZUWF9JUl9DU1JEWSk7DQo+PiArCQl9 IGVsc2Ugew0KPj4gKwkJCW1jaHBfc3BkaWZ0eF9jaGFubmVsX3N0YXR1c193cml0ZShkZXYpOw0K Pj4gKwkJfQ0KPj4gKwl9DQo+PiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0cmwtPmxvY2ss IGZsYWdzKTsNCj4+ICsNCj4+ICsJcmV0dXJuIGNoYW5nZWQ7DQo+PiArfQ0KPj4gKw0KPj4gK3N0 YXRpYyBpbnQgbWNocF9zcGRpZnR4X2NzX21hc2soc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRy b2wsDQo+PiArCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnV2YWx1ZSkNCj4+ICt7DQo+ PiArCW1lbXNldCh1dmFsdWUtPnZhbHVlLmllYzk1OC5zdGF0dXMsIDB4ZmYsDQo+PiArCSAgICAg ICBzaXplb2YodXZhbHVlLT52YWx1ZS5pZWM5NTguc3RhdHVzKSk7DQo+PiArDQo+PiArCXJldHVy biAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IG1jaHBfc3BkaWZ0eF9zdWJjb2RlX2dl dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwNCj4+ICsJCQkJICAgIHN0cnVjdCBzbmRf Y3RsX2VsZW1fdmFsdWUgKnV2YWx1ZSkNCj4+ICt7DQo+PiArCXN0cnVjdCBzbmRfc29jX2RhaSAq ZGFpID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOw0KPj4gKwlzdHJ1Y3QgbWNocF9zcGRp ZnR4X2RldiAqZGV2ID0gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoZGFpKTsNCj4+ICsJc3RydWN0 IG1jaHBfc3BkaWZ0eF9taXhlcl9jb250cm9sICpjdHJsID0gJmRldi0+Y29udHJvbDsNCj4+ICsJ dW5zaWduZWQgbG9uZyBmbGFnczsNCj4+ICsNCj4+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmN0cmwt PmxvY2ssIGZsYWdzKTsNCj4+ICsJbWVtY3B5KHV2YWx1ZS0+dmFsdWUuaWVjOTU4LnN1YmNvZGUs IGN0cmwtPnVzZXJfZGF0YSwNCj4+ICsJICAgICAgIHNpemVvZihjdHJsLT51c2VyX2RhdGEpKTsN Cj4+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3RybC0+bG9jaywgZmxhZ3MpOw0KPj4gKw0K Pj4gKwlyZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBtY2hwX3NwZGlmdHhf c3ViY29kZV9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsDQo+PiArCQkJCSAgICBz dHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1dmFsdWUpDQo+PiArew0KPj4gKwl1bnNpZ25lZCBs b25nIGZsYWdzOw0KPj4gKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSA9IHNuZF9rY29udHJvbF9j aGlwKGtjb250cm9sKTsNCj4+ICsJc3RydWN0IG1jaHBfc3BkaWZ0eF9kZXYgKmRldiA9IHNuZF9z b2NfZGFpX2dldF9kcnZkYXRhKGRhaSk7DQo+PiArCXN0cnVjdCBtY2hwX3NwZGlmdHhfbWl4ZXJf Y29udHJvbCAqY3RybCA9ICZkZXYtPmNvbnRyb2w7DQo+PiArCWludCBjaGFuZ2VkID0gMDsNCj4+ ICsJaW50IGk7DQo+PiArDQo+PiArCXNwaW5fbG9ja19pcnFzYXZlKCZjdHJsLT5sb2NrLCBmbGFn cyk7DQo+PiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGN0cmwtPnVzZXJfZGF0YSk7IGkr Kykgew0KPj4gKwkJaWYgKGN0cmwtPnVzZXJfZGF0YVtpXSAhPSB1dmFsdWUtPnZhbHVlLmllYzk1 OC5zdWJjb2RlW2ldKQ0KPj4gKwkJCWNoYW5nZWQgPSAxOw0KPj4gKw0KPj4gKwkJY3RybC0+dXNl cl9kYXRhW2ldID0gdXZhbHVlLT52YWx1ZS5pZWM5NTguc3ViY29kZVtpXTsNCj4+ICsJfQ0KPj4g KwlpZiAoY2hhbmdlZCkgew0KPj4gKwkJaWYgKG1jaHBfc3BkaWZ0eF9pc19ydW5uaW5nKGRldikp IHsNCj4+ICsJCQkvKg0KPj4gKwkJCSAqIGlmIFNQRElGIGlzIHJ1bm5pbmcsIHdhaXQgZm9yIGlu dGVycnVwdCB0byB3cml0ZQ0KPj4gKwkJCSAqIHVzZXIgZGF0YQ0KPj4gKwkJCSAqLw0KPj4gKwkJ CXJlZ21hcF93cml0ZShkZXYtPnJlZ21hcCwgU1BESUZUWF9JRVIsDQo+PiArCQkJCSAgICAgU1BE SUZUWF9JUl9VRFJEWSk7DQo+PiArCQl9IGVsc2Ugew0KPj4gKwkJCW1jaHBfc3BkaWZ0eF91c2Vy X2RhdGFfd3JpdGUoZGV2KTsNCj4+ICsJCX0NCj4+ICsJfQ0KPj4gKwlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZjdHJsLT5sb2NrLCBmbGFncyk7DQo+PiArDQo+PiArCXJldHVybiBjaGFuZ2VkOw0K Pj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgbWNocF9zcGRp ZnR4X2N0cmxzW10gPSB7DQo+PiArCS8qIENoYW5uZWwgc3RhdHVzIGNvbnRyb2xsZXIgKi8NCj4+ ICsJew0KPj4gKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfUENNLA0KPj4gKwkJLm5h bWUgPSBTTkRSVl9DVExfTkFNRV9JRUM5NTgoIiIsIFBMQVlCQUNLLCBERUZBVUxUKSwNCj4+ICsJ CS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFIHwNCj4+ICsJCQlTTkRS Vl9DVExfRUxFTV9BQ0NFU1NfVk9MQVRJTEUsDQo+PiArCQkuaW5mbyA9IG1jaHBfc3BkaWZ0eF9p bmZvLA0KPj4gKwkJLmdldCA9IG1jaHBfc3BkaWZ0eF9jc19nZXQsDQo+PiArCQkucHV0ID0gbWNo cF9zcGRpZnR4X2NzX3B1dCwNCj4+ICsJfSwNCj4+ICsJew0KPj4gKwkJLmlmYWNlID0gU05EUlZf Q1RMX0VMRU1fSUZBQ0VfUENNLA0KPj4gKwkJLm5hbWUgPSBTTkRSVl9DVExfTkFNRV9JRUM5NTgo IiIsIFBMQVlCQUNLLCBNQVNLKSwNCj4+ICsJCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NF U1NfUkVBRCwNCj4+ICsJCQlTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVk9MQVRJTEUsDQo+PiArCQku aW5mbyA9IG1jaHBfc3BkaWZ0eF9pbmZvLA0KPj4gKwkJLmdldCA9IG1jaHBfc3BkaWZ0eF9jc19t YXNrLA0KPj4gKwl9LA0KPj4gKwkvKiBVc2VyIGJpdHMgY29udHJvbGxlciAqLw0KPj4gKwl7DQo+ PiArCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9QQ00sDQo+PiArCQkubmFtZSA9ICJJ RUM5NTggU3ViY29kZSBQbGF5YmFjayBEZWZhdWx0IiwNCj4+ICsJCS5hY2Nlc3MgPSBTTkRSVl9D VExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFLA0KPj4gKwkJLmluZm8gPSBtY2hwX3NwZGlmdHhfaW5m bywNCj4+ICsJCS5nZXQgPSBtY2hwX3NwZGlmdHhfc3ViY29kZV9nZXQsDQo+PiArCQkucHV0ID0g bWNocF9zcGRpZnR4X3N1YmNvZGVfcHV0LA0KPj4gKwl9LA0KPj4gK307DQo+PiArDQo+PiArc3Rh dGljIGludCBtY2hwX3NwZGlmdHhfZGFpX3Byb2JlKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQ0K Pj4gK3sNCj4+ICsJc3RydWN0IG1jaHBfc3BkaWZ0eF9kZXYgKmRldiA9IHNuZF9zb2NfZGFpX2dl dF9kcnZkYXRhKGRhaSk7DQo+PiArDQo+PiArCXNuZF9zb2NfZGFpX2luaXRfZG1hX2RhdGEoZGFp LCAmZGV2LT5wbGF5YmFjaywgTlVMTCk7DQo+PiArDQo+PiArCS8qIEFkZCBjb250cm9scyAqLw0K Pj4gKwlzbmRfc29jX2FkZF9kYWlfY29udHJvbHMoZGFpLCBtY2hwX3NwZGlmdHhfY3RybHMsDQo+ PiArCQkJCSBBUlJBWV9TSVpFKG1jaHBfc3BkaWZ0eF9jdHJscykpOw0KPj4gKw0KPj4gKwlyZXR1 cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9kcml2ZXIg bWNocF9zcGRpZnR4X2RhaSA9IHsNCj4+ICsJLm5hbWUgPSAibWNocC1zcGRpZnR4IiwNCj4+ICsJ LnByb2JlCT0gbWNocF9zcGRpZnR4X2RhaV9wcm9iZSwNCj4+ICsJLnBsYXliYWNrID0gew0KPj4g KwkJLnN0cmVhbV9uYW1lID0gIlMvUERJRiBUWCBQbGF5YmFjayIsDQo+PiArCQkuY2hhbm5lbHNf bWluID0gMSwNCj4+ICsJCS5jaGFubmVsc19tYXggPSAyLA0KPj4gKwkJLnJhdGVzID0gTUNIUF9T UERJRlRYX1JBVEVTLA0KPj4gKwkJLmZvcm1hdHMgPSBNQ0hQX1NQRElGVFhfRk9STUFUUywNCj4+ ICsJfSwNCj4+ICsJLm9wcyA9ICZtY2hwX3NwZGlmdHhfZGFpX29wcywNCj4+ICt9Ow0KPj4gKw0K Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnRfZHJpdmVyIG1jaHBfc3Bk aWZ0eF9jb21wb25lbnQgPSB7DQo+PiArCS5uYW1lCQk9ICJtY2hwLXNwZGlmdHgiLA0KPj4gK307 DQo+PiArDQo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbWNocF9zcGRpZnR4 X2R0X2lkc1tdID0gew0KPj4gKwl7DQo+PiArCQkuY29tcGF0aWJsZSA9ICJtaWNyb2NoaXAsc2Ft YTdnNS1zcGRpZnR4IiwNCj4+ICsJfSwNCj4+ICsJeyAvKiBzZW50aW5lbCAqLyB9DQo+PiArfTsN Cj4+ICsNCj4+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtY2hwX3NwZGlmdHhfZHRfaWRzKTsN Cj4+ICtzdGF0aWMgaW50IG1jaHBfc3BkaWZ0eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQ0KPj4gK3sNCj4+ICsJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHBkZXYtPmRldi5v Zl9ub2RlOw0KPj4gKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsNCj4+ICsJc3Ry dWN0IG1jaHBfc3BkaWZ0eF9kZXYgKmRldjsNCj4+ICsJc3RydWN0IHJlc291cmNlICptZW07DQo+ PiArCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsNCj4+ICsJdm9pZCBfX2lvbWVtICpiYXNlOw0KPj4g KwlzdHJ1Y3QgbWNocF9zcGRpZnR4X21peGVyX2NvbnRyb2wgKmN0cmw7DQo+PiArCWludCBpcnE7 DQo+PiArCWludCBlcnI7DQo+PiArDQo+PiArCS8qIEdldCBtZW1vcnkgZm9yIGRyaXZlciBkYXRh LiAqLw0KPj4gKwlkZXYgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpkZXYpLCBH RlBfS0VSTkVMKTsNCj4+ICsJaWYgKCFkZXYpDQo+PiArCQlyZXR1cm4gLUVOT01FTTsNCj4+ICsN Cj4+ICsJLyogR2V0IGhhcmR3YXJlIGNhcGFiaWxpdGllcy4gKi8NCj4+ICsJbWF0Y2ggPSBvZl9t YXRjaF9ub2RlKG1jaHBfc3BkaWZ0eF9kdF9pZHMsIG5wKTsNCj4+ICsJaWYgKG1hdGNoKQ0KPj4g KwkJZGV2LT5jYXBzID0gbWF0Y2gtPmRhdGE7DQo+PiArDQo+PiArCS8qIE1hcCBJL08gcmVnaXN0 ZXJzLiAqLw0KPj4gKwliYXNlID0gZGV2bV9wbGF0Zm9ybV9nZXRfYW5kX2lvcmVtYXBfcmVzb3Vy Y2UocGRldiwgMCwgJm1lbSk7DQo+PiArCWlmIChJU19FUlIoYmFzZSkpDQo+PiArCQlyZXR1cm4g UFRSX0VSUihiYXNlKTsNCj4+ICsNCj4+ICsJcmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9tbWlv KCZwZGV2LT5kZXYsIGJhc2UsDQo+PiArCQkJCSAgICAgICAmbWNocF9zcGRpZnR4X3JlZ21hcF9j b25maWcpOw0KPj4gKwlpZiAoSVNfRVJSKHJlZ21hcCkpDQo+PiArCQlyZXR1cm4gUFRSX0VSUihy ZWdtYXApOw0KPj4gKw0KPj4gKwkvKiBSZXF1ZXN0IElSUSAqLw0KPj4gKwlpcnEgPSBwbGF0Zm9y bV9nZXRfaXJxKHBkZXYsIDApOw0KPj4gKwlpZiAoaXJxIDwgMCkNCj4+ICsJCXJldHVybiBpcnE7 DQo+PiArDQo+PiArCWVyciA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgaXJxLCBtY2hw X3NwZGlmdHhfaW50ZXJydXB0LCAwLA0KPj4gKwkJCSAgICAgICBkZXZfbmFtZSgmcGRldi0+ZGV2 KSwgZGV2KTsNCj4+ICsJaWYgKGVycikNCj4+ICsJCXJldHVybiBlcnI7DQo+PiArDQo+PiArCS8q IEdldCB0aGUgcGVyaXBoZXJhbCBjbG9jayAqLw0KPj4gKwlkZXYtPnBjbGsgPSBkZXZtX2Nsa19n ZXQoJnBkZXYtPmRldiwgInBjbGsiKTsNCj4+ICsJaWYgKElTX0VSUihkZXYtPnBjbGspKSB7DQo+ PiArCQllcnIgPSBQVFJfRVJSKGRldi0+cGNsayk7DQo+PiArCQlkZXZfZXJyKCZwZGV2LT5kZXYs DQo+PiArCQkJImZhaWxlZCB0byBnZXQgdGhlIHBlcmlwaGVyYWwgY2xvY2s6ICVkXG4iLCBlcnIp Ow0KPj4gKwkJcmV0dXJuIGVycjsNCj4+ICsJfQ0KPj4gKw0KPj4gKwkvKiBHZXQgdGhlIGdlbmVy aWMgY2xvY2sgKi8NCj4+ICsJZGV2LT5nY2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJn Y2xrIik7DQo+PiArCWlmIChJU19FUlIoZGV2LT5nY2xrKSkgew0KPj4gKwkJZXJyID0gUFRSX0VS UihkZXYtPmdjbGspOw0KPj4gKwkJZGV2X2VycigmcGRldi0+ZGV2LA0KPj4gKwkJCSJmYWlsZWQg dG8gZ2V0IHRoZSBQTUMgZ2VuZXJpYyBjbG9jazogJWRcbiIsIGVycik7DQo+PiArCQlyZXR1cm4g ZXJyOw0KPj4gKwl9DQo+PiArDQo+PiArCWN0cmwgPSAmZGV2LT5jb250cm9sOw0KPj4gKwlzcGlu X2xvY2tfaW5pdCgmY3RybC0+bG9jayk7DQo+PiArDQo+PiArCS8qIEluaXQgY2hhbm5lbCBzdGF0 dXMgKi8NCj4+ICsJY3RybC0+Y2hfc3RhdFswXSA9IElFQzk1OF9BRVMwX0NPTl9OT1RfQ09QWVJJ R0hUIHwNCj4+ICsJCQkgICBJRUM5NThfQUVTMF9DT05fRU1QSEFTSVNfTk9ORTsNCj4+ICsNCj4+ ICsJZGV2LT5kZXYgPSAmcGRldi0+ZGV2Ow0KPj4gKwlkZXYtPnJlZ21hcCA9IHJlZ21hcDsNCj4+ ICsJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGV2KTsNCj4+ICsNCj4+ICsJZGV2LT5wbGF5 YmFjay5hZGRyID0gKGRtYV9hZGRyX3QpbWVtLT5zdGFydCArIFNQRElGVFhfQ0RSOw0KPj4gKwlk ZXYtPnBsYXliYWNrLmFkZHJfd2lkdGggPSBETUFfU0xBVkVfQlVTV0lEVEhfNF9CWVRFUzsNCj4+ ICsNCj4+ICsJZXJyID0gZGV2bV9zbmRfZG1hZW5naW5lX3BjbV9yZWdpc3RlcigmcGRldi0+ZGV2 LCBOVUxMLCAwKTsNCj4+ICsJaWYgKGVycikgew0KPj4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAi ZmFpbGVkIHRvIHJlZ2lzdGVyIFBNQzogJWRcbiIsIGVycik7DQo+PiArCQlyZXR1cm4gZXJyOw0K Pj4gKwl9DQo+PiArDQo+PiArCWVyciA9IGRldm1fc25kX3NvY19yZWdpc3Rlcl9jb21wb25lbnQo JnBkZXYtPmRldiwNCj4+ICsJCQkJCSAgICAgICZtY2hwX3NwZGlmdHhfY29tcG9uZW50LA0KPj4g KwkJCQkJICAgICAgJm1jaHBfc3BkaWZ0eF9kYWksIDEpOw0KPj4gKwlpZiAoZXJyKSB7DQo+PiAr CQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgY29tcG9uZW50OiAlZFxu IiwgZXJyKTsNCj4+ICsJCXJldHVybiBlcnI7DQo+PiArCX0NCj4+ICsNCj4+ICsJcmV0dXJuIDA7 DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1jaHBfc3Bk aWZ0eF9kcml2ZXIgPSB7DQo+PiArCS5wcm9iZQk9IG1jaHBfc3BkaWZ0eF9wcm9iZSwNCj4+ICsJ LmRyaXZlcgk9IHsNCj4+ICsJCS5uYW1lCT0gIm1jaHBfc3BkaWZ0eCIsDQo+PiArCQkub2ZfbWF0 Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIobWNocF9zcGRpZnR4X2R0X2lkcyksDQo+PiArCX0sDQo+ PiArfTsNCj4+ICsNCj4+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG1jaHBfc3BkaWZ0eF9kcml2 ZXIpOw0KPj4gKw0KPj4gK01PRFVMRV9BVVRIT1IoIkNvZHJpbiBDaXVib3Rhcml1IDxjb2RyaW4u Y2l1Ym90YXJpdUBtaWNyb2NoaXAuY29tPiIpOw0KPj4gK01PRFVMRV9ERVNDUklQVElPTigiTWlj cm9jaGlwIFMvUERJRiBUWCBDb250cm9sbGVyIERyaXZlciIpOw0KPj4gK01PRFVMRV9MSUNFTlNF KCJHUEwgdjIiKTsNCg0K