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=-7.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS 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 D5BD7C43381 for ; Thu, 7 Mar 2019 05:38:11 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 6415920652 for ; Thu, 7 Mar 2019 05:38:11 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=cadence.com header.i=@cadence.com header.b="QxgGKlnW"; dkim=pass (1024-bit key) header.d=cadence.com header.i=@cadence.com header.b="MDb3X3bi" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726477AbfCGFiJ (ORCPT ); Thu, 7 Mar 2019 00:38:09 -0500 Received: from mx0b-0014ca01.pphosted.com ([208.86.201.193]:58540 "EHLO mx0a-0014ca01.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726059AbfCGFiJ (ORCPT ); Thu, 7 Mar 2019 00:38:09 -0500 Received: from pps.filterd (m0042333.ppops.net [127.0.0.1]) by mx0b-0014ca01.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id x275XYaQ030590; Wed, 6 Mar 2019 21:37:36 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cadence.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-transfer-encoding : mime-version; s=proofpoint; bh=qAi85vplxFC92WEtey/bikv8elzkfEuZo1+SoyfsfZg=; b=QxgGKlnWhreIpqul9rYJJrQX629C87OrutcizmpaEqWeEUFfAPzuMp7tMUvOVEcS/uu9 YggBZSKSWW8WrSCbpGWKxarpcTFm43Fv71pN2Np8Nv8Js3bBPkJkWKwWSdqsGZqJeYCN naQs082FsOuh7H0siBrKNEkG9LLxmIavlepV0yrRhAmETpao3UU02IoiY4zK3jA877JG lCz10TztrWbQXNykl+V5vpcEStJrZgGof+OqFpe8irXNlgNAsxKT0aeb7D85xO1ATGuq Nyfjsi1px2dvxDQwQx0t77xKAWy9w6awGPRlU8vYRxY7QYWmVzYSi3xfxt8hu01G2OF7 hw== Authentication-Results: cadence.com; spf=pass smtp.mailfrom=pawell@cadence.com Received: from nam05-dm3-obe.outbound.protection.outlook.com (mail-dm3nam05lp2055.outbound.protection.outlook.com [104.47.49.55]) by mx0b-0014ca01.pphosted.com with ESMTP id 2qyp9yy6uy-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Wed, 06 Mar 2019 21:37:36 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cadence.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qAi85vplxFC92WEtey/bikv8elzkfEuZo1+SoyfsfZg=; b=MDb3X3bi+vIp/r9WXkjjt64FrDsYmcEIx1PjR1RLgoAskoccj+duQDvvSn9fhnwU5pDpH51m8D5AXxoRw0+MaTcG+HEJG/McF5q7xnmC0LOAqai/aWJRbX2fojAaAvfWC5xGW0/iUHh6FDNcx30/oxqTPhn70pSnTDtMPKqLvg4= Received: from BYAPR07MB4709.namprd07.prod.outlook.com (52.135.204.159) by BYAPR07MB4312.namprd07.prod.outlook.com (52.135.223.146) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1665.19; Thu, 7 Mar 2019 05:37:33 +0000 Received: from BYAPR07MB4709.namprd07.prod.outlook.com ([fe80::2dae:f6be:5a31:3bc8]) by BYAPR07MB4709.namprd07.prod.outlook.com ([fe80::2dae:f6be:5a31:3bc8%4]) with mapi id 15.20.1665.021; Thu, 7 Mar 2019 05:37:33 +0000 From: Pawel Laszczak To: Roger Quadros , "devicetree@vger.kernel.org" CC: "gregkh@linuxfoundation.org" , "felipe.balbi@linux.intel.com" , "mark.rutland@arm.com" , "linux-usb@vger.kernel.org" , "hdegoede@redhat.com" , "heikki.krogerus@linux.intel.com" , "andy.shevchenko@gmail.com" , "robh+dt@kernel.org" , "linux-kernel@vger.kernel.org" , "jbergsagel@ti.com" , "nsekhar@ti.com" , "nm@ti.com" , Suresh Punnoose , "peter.chen@nxp.com" , Rahul Kumar Subject: RE: [PATCH v4 5/6] usb:cdns3 Add Cadence USB3 DRD Driver Thread-Topic: [PATCH v4 5/6] usb:cdns3 Add Cadence USB3 DRD Driver Thread-Index: AQHUxJ4VnRX9klsPV0GCGU5zGXPUXqXosICAgBMq2xA= Date: Thu, 7 Mar 2019 05:37:33 +0000 Message-ID: References: <1550173514-23573-1-git-send-email-pawell@cadence.com> <1550173514-23573-6-git-send-email-pawell@cadence.com> <3af305e0-40bf-28cc-48d5-4afa241e7899@ti.com> In-Reply-To: <3af305e0-40bf-28cc-48d5-4afa241e7899@ti.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-dg-tag-bcast: x-dg-ref: PG1ldGE+PGF0IG5tPSJib2R5LnR4dCIgcD0iYzpcdXNlcnNccGF3ZWxsXGFwcGRhdGFccm9hbWluZ1wwOWQ4NDliNi0zMmQzLTRhNDAtODVlZS02Yjg0YmEyOWUzNWJcbXNnc1xtc2ctMTczZDk4OGUtNDA5Yi0xMWU5LTg3MzAtMWM0ZDcwMWRmYmE0XGFtZS10ZXN0XDE3M2Q5ODhmLTQwOWItMTFlOS04NzMwLTFjNGQ3MDFkZmJhNGJvZHkudHh0IiBzej0iNTk5MDkiIHQ9IjEzMTk2NDEwNjQ3NjUxMzUzMCIgaD0iNjhGL2ZpVEdKUUpnT29YWEhzZ1lCWURRcXN3PSIgaWQ9IiIgYmw9IjAiIGJvPSIxIi8+PC9tZXRhPg== x-dg-paste: x-dg-rorf: x-originating-ip: [185.217.253.59] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 8e2b8661-fd62-433c-0732-08d6a2beff85 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(2017052603328)(7153060)(7193020);SRVR:BYAPR07MB4312; x-ms-traffictypediagnostic: BYAPR07MB4312: x-microsoft-exchange-diagnostics: 1;BYAPR07MB4312;20:AcDiNtHfmLELATZ6vbUCanRP1wVy2jDrnpuTp9EaGGcW+ClbPoyltuVDr5xG/onrJqACi4G4x6kVNKirnby5szZandwPrmRAx6jmqSju2EYEu/sZnyAFdyQOGug42MXQrZ5OIe/rERIB/IUq04G9H/GsFRC4/Riu3CzrgCJAqaAgDpJz6nkzEVS6bDJ7wCmRz0YqjAZ5kZgxxdMydwwAkTe6VUb9Ur84WJkzTWwI/+0QtJYrgVbzcWh3RhP3OOAP x-microsoft-antispam-prvs: x-forefront-prvs: 096943F07A x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(366004)(39850400004)(396003)(136003)(346002)(376002)(199004)(189003)(36092001)(51444003)(8676002)(86362001)(110136005)(53936002)(14444005)(106356001)(14454004)(446003)(8936002)(476003)(256004)(486006)(2906002)(107886003)(7736002)(305945005)(5660300002)(74316002)(229853002)(105586002)(97736004)(7416002)(25786009)(52536013)(6436002)(55016002)(9686003)(53946003)(6246003)(11346002)(478600001)(68736007)(76176011)(99286004)(71200400001)(71190400001)(26005)(81156014)(316002)(30864003)(81166006)(4326008)(54906003)(6116002)(102836004)(6506007)(66066001)(2501003)(33656002)(186003)(7696005)(3846002)(579004)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:BYAPR07MB4312;H:BYAPR07MB4709.namprd07.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: cadence.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: XADBDUaf9KvCzEgtVuqG8tHyga0g283CI2llpNEH0Tel1XDx8vtTTuplRUD48jhj0L9tOKCJ8r0/WnD/WgPOQ7UADLWJ/yS1GwLhgxYMdI5OK3n+eQcAMhSQegkhdXDYIj+ujT4mmvj2sPHDotLjWdSDbJfWfJOr6irqtNVWV+OmxOml+/vOpRctXhJrR+izkEdCJPekdx6iBJRDAhDCJu8lyYan1ogZxYSE4iPIPlQrNz5dFMOcRzvLJTF8vzFhKONh171QKKcNgXqSBamLcnAoX3KqIYN37jRaAtAWrse7GYHCRd65B2P3r3tuj6jJwbrrRBgMmowKXHPvtYbLypQ3ZNANumendnttKZqfguAWA4j2mvkhivBd1NCVbaJ2DUsiFvOs8qXlKEFkX3l/+Pd9rwRHbL0B76oLMU/oSjQ= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: cadence.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8e2b8661-fd62-433c-0732-08d6a2beff85 X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Mar 2019 05:37:33.1186 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: d36035c5-6ce6-4662-a3dc-e762e61ae4c9 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR07MB4312 X-Proofpoint-SPF-Result: pass X-Proofpoint-SPF-Record: v=spf1 include:_spf.salesforce.com include:mktomail.com include:spf-0014ca01.pphosted.com include:spf.protection.outlook.com include:auth.msgapp.com include:spf.mandrillapp.com ~all X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:,, definitions=2019-03-07_02:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_check_notspam policy=outbound_check score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1810050000 definitions=main-1903070039 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGksDQoNCj5QYXdlbCwNCj4NCj5PbiAxNC8wMi8yMDE5IDIxOjQ1LCBQYXdlbCBMYXN6Y3phayB3 cm90ZToNCj4+IFRoaXMgcGF0Y2ggaW50cm9kdWNlIG5ldyBDYWRlbmNlIFVTQlNTIERSRCBkcml2 ZXIgdG8gbGludXgga2VybmVsLg0KPj4NCj4+IFRoZSBDYWRlbmNlIFVTQlNTIERSRCBEcml2ZXIg aXMgYSBoaWdobHkgY29uZmlndXJhYmxlIElQIENvcmUgd2hpY2hpDQo+PiBjYW4gYmUgaW5zdGFu dGlhdGVkIGFzIER1YWwtUm9sZSBEZXZpY2UgKERSRCksIFBlcmlwaGVyYWwgT25seSBhbmQNCj4+ IEhvc3QgT25seSAoWEhDSSljb25maWd1cmF0aW9ucy4NCj4+DQo+PiBUaGUgY3VycmVudCBkcml2 ZXIgaGFzIGJlZW4gdmFsaWRhdGVkIHdpdGggRlBHQSBidXJuZWQuIFdlIGhhdmUgc3VwcG9ydA0K Pj4gZm9yIFBDSWUgYnVzLCB3aGljaCBpcyB1c2VkIG9uIEZQR0EgcHJvdG90eXBpbmcuDQo+Pg0K Pj4gVGhlIGhvc3Qgc2lkZSBvZiBVU0JTUy1EUkQgY29udHJvbGxlciBpcyBjb21wbGlhbmNlIHdp dGggWEhDSQ0KPj4gc3BlY2lmaWNhdGlvbiwgc28gaXQgd29ya3Mgd2l0aCBzdGFuZGFyZCBYSENJ IGxpbnV4IGRyaXZlci4NCj4+DQo+PiBTaWduZWQtb2ZmLWJ5OiBQYXdlbCBMYXN6Y3phayA8cGF3 ZWxsQGNhZGVuY2UuY29tPg0KPj4gLS0tDQo+PiAgZHJpdmVycy91c2IvS2NvbmZpZyAgICAgICAg ICAgICAgICB8ICAgIDIgKw0KPj4gIGRyaXZlcnMvdXNiL01ha2VmaWxlICAgICAgICAgICAgICAg fCAgICAyICsNCj4+ICBkcml2ZXJzL3VzYi9jZG5zMy9LY29uZmlnICAgICAgICAgIHwgICA0NCAr DQo+PiAgZHJpdmVycy91c2IvY2RuczMvTWFrZWZpbGUgICAgICAgICB8ICAgMTQgKw0KPj4gIGRy aXZlcnMvdXNiL2NkbnMzL2NkbnMzLXBjaS13cmFwLmMgfCAgMTU1ICsrKw0KPj4gIGRyaXZlcnMv dXNiL2NkbnMzL2NvcmUuYyAgICAgICAgICAgfCAgNDAzICsrKysrKw0KPj4gIGRyaXZlcnMvdXNi L2NkbnMzL2NvcmUuaCAgICAgICAgICAgfCAgMTE2ICsrDQo+PiAgZHJpdmVycy91c2IvY2RuczMv ZGVidWcuaCAgICAgICAgICB8ICAxNjggKysrDQo+PiAgZHJpdmVycy91c2IvY2RuczMvZGVidWdm cy5jICAgICAgICB8ICAxNjQgKysrDQo+PiAgZHJpdmVycy91c2IvY2RuczMvZHJkLmMgICAgICAg ICAgICB8ICAzNjUgKysrKysNCj4+ICBkcml2ZXJzL3VzYi9jZG5zMy9kcmQuaCAgICAgICAgICAg IHwgIDE2MiArKysNCj4+ICBkcml2ZXJzL3VzYi9jZG5zMy9lcDAuYyAgICAgICAgICAgIHwgIDkw NyArKysrKysrKysrKysrDQo+PiAgZHJpdmVycy91c2IvY2RuczMvZ2FkZ2V0LWV4cG9ydC5oICB8 ICAgMjggKw0KPj4gIGRyaXZlcnMvdXNiL2NkbnMzL2dhZGdldC5jICAgICAgICAgfCAyMDAzICsr KysrKysrKysrKysrKysrKysrKysrKysrKysNCj4+ICBkcml2ZXJzL3VzYi9jZG5zMy9nYWRnZXQu aCAgICAgICAgIHwgMTIwNyArKysrKysrKysrKysrKysrKw0KPj4gIGRyaXZlcnMvdXNiL2NkbnMz L2hvc3QtZXhwb3J0LmggICAgfCAgIDI4ICsNCj4+ICBkcml2ZXJzL3VzYi9jZG5zMy9ob3N0LmMg ICAgICAgICAgIHwgICA3MiArDQo+PiAgZHJpdmVycy91c2IvY2RuczMvdHJhY2UuYyAgICAgICAg ICB8ICAgMjMgKw0KPj4gIGRyaXZlcnMvdXNiL2NkbnMzL3RyYWNlLmggICAgICAgICAgfCAgNDA0 ICsrKysrKw0KPj4gIDE5IGZpbGVzIGNoYW5nZWQsIDYyNjcgaW5zZXJ0aW9ucygrKQ0KPj4gIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9jZG5zMy9LY29uZmlnDQo+PiAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL2NkbnMzL01ha2VmaWxlDQo+PiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvdXNiL2NkbnMzL2NkbnMzLXBjaS13cmFwLmMNCj4+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy91c2IvY2RuczMvY29yZS5jDQo+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvdXNiL2NkbnMzL2NvcmUuaA0KPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3Vz Yi9jZG5zMy9kZWJ1Zy5oDQo+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL2NkbnMz L2RlYnVnZnMuYw0KPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9jZG5zMy9kcmQu Yw0KPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9jZG5zMy9kcmQuaA0KPj4gIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9jZG5zMy9lcDAuYw0KPj4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL3VzYi9jZG5zMy9nYWRnZXQtZXhwb3J0LmgNCj4+ICBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy91c2IvY2RuczMvZ2FkZ2V0LmMNCj4+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy91c2IvY2RuczMvZ2FkZ2V0LmgNCj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy91c2IvY2RuczMvaG9zdC1leHBvcnQuaA0KPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL3VzYi9jZG5zMy9ob3N0LmMNCj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2Iv Y2RuczMvdHJhY2UuYw0KPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9jZG5zMy90 cmFjZS5oDQo+Pg0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL0tjb25maWcgYi9kcml2ZXJz L3VzYi9LY29uZmlnDQo+PiBpbmRleCA5ODdmYzViYTYzMjEuLjVmOTMzNDAxOWQwNCAxMDA2NDQN Cj4+IC0tLSBhL2RyaXZlcnMvdXNiL0tjb25maWcNCj4+ICsrKyBiL2RyaXZlcnMvdXNiL0tjb25m aWcNCj4+IEBAIC0xMTIsNiArMTEyLDggQEAgc291cmNlICJkcml2ZXJzL3VzYi91c2JpcC9LY29u ZmlnIg0KPj4NCj4+ICBlbmRpZg0KPj4NCj4+ICtzb3VyY2UgImRyaXZlcnMvdXNiL2NkbnMzL0tj b25maWciDQo+PiArDQo+PiAgc291cmNlICJkcml2ZXJzL3VzYi9tdHUzL0tjb25maWciDQo+Pg0K Pj4gIHNvdXJjZSAiZHJpdmVycy91c2IvbXVzYi9LY29uZmlnIg0KPj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvdXNiL01ha2VmaWxlIGIvZHJpdmVycy91c2IvTWFrZWZpbGUNCj4+IGluZGV4IDdkMWI4 YzgyYjIwOC4uYWIxMjViOTY2Y2FjIDEwMDY0NA0KPj4gLS0tIGEvZHJpdmVycy91c2IvTWFrZWZp bGUNCj4+ICsrKyBiL2RyaXZlcnMvdXNiL01ha2VmaWxlDQo+PiBAQCAtMTIsNiArMTIsOCBAQCBv YmotJChDT05GSUdfVVNCX0RXQzMpCQkrPSBkd2MzLw0KPj4gIG9iai0kKENPTkZJR19VU0JfRFdD MikJCSs9IGR3YzIvDQo+PiAgb2JqLSQoQ09ORklHX1VTQl9JU1AxNzYwKQkrPSBpc3AxNzYwLw0K Pj4NCj4+ICtvYmotJChDT05GSUdfVVNCX0NETlMzKQkJKz0gY2RuczMvDQo+PiArDQo+PiAgb2Jq LSQoQ09ORklHX1VTQl9NT04pCQkrPSBtb24vDQo+PiAgb2JqLSQoQ09ORklHX1VTQl9NVFUzKQkJ Kz0gbXR1My8NCj4+DQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2RuczMvS2NvbmZpZyBi L2RyaXZlcnMvdXNiL2NkbnMzL0tjb25maWcNCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+PiBp bmRleCAwMDAwMDAwMDAwMDAuLjI3Y2IzZDhkYmUzZA0KPj4gLS0tIC9kZXYvbnVsbA0KPj4gKysr IGIvZHJpdmVycy91c2IvY2RuczMvS2NvbmZpZw0KPj4gQEAgLTAsMCArMSw0NCBAQA0KPj4gK2Nv bmZpZyBVU0JfQ0ROUzMNCj4+ICsJdHJpc3RhdGUgIkNhZGVuY2UgVVNCMyBEdWFsLVJvbGUgQ29u dHJvbGxlciINCj4+ICsJZGVwZW5kcyBvbiBVU0JfU1VQUE9SVCAmJiAoVVNCIHx8IFVTQl9HQURH RVQpICYmIEhBU19ETUENCj4+ICsJaGVscA0KPj4gKwkgIFNheSBZIGhlcmUgaWYgeW91ciBzeXN0 ZW0gaGFzIGEgY2FkZW5jZSBVU0IzIGR1YWwtcm9sZSBjb250cm9sbGVyLg0KPj4gKwkgIEl0IHN1 cHBvcnRzOiBkdWFsLXJvbGUgc3dpdGNoLCBIb3N0LW9ubHksIGFuZCBQZXJpcGhlcmFsLW9ubHku DQo+PiArDQo+PiArCSAgSWYgeW91IGNob29zZSB0byBidWlsZCB0aGlzIGRyaXZlciBpcyBhIGR5 bmFtaWNhbGx5IGxpbmtlZA0KPj4gKwkgIGFzIG1vZHVsZSwgdGhlIG1vZHVsZSB3aWxsIGJlIGNh bGxlZCBjZG5zMy5rby4NCj4+ICsNCj4+ICtpZiBVU0JfQ0ROUzMNCj4+ICsNCj4+ICtjb25maWcg VVNCX0NETlMzX0dBREdFVA0KPj4gKyAgICAgICAgYm9vbCAiQ2FkZW5jZSBVU0IzIGRldmljZSBj b250cm9sbGVyIg0KPj4gKyAgICAgICAgZGVwZW5kcyBvbiBVU0JfR0FER0VUDQo+PiArICAgICAg ICBoZWxwDQo+PiArICAgICAgICAgIFNheSBZIGhlcmUgdG8gZW5hYmxlIGRldmljZSBjb250cm9s bGVyIGZ1bmN0aW9uYWxpdHkgb2YgdGhlDQo+PiArICAgICAgICAgIGNhZGVuY2UgVVNCU1MtREVW IGRyaXZlci4NCj4NCj4iQ2FkZW5jZSIgPw0KPg0KPj4gKw0KPj4gKyAgICAgICAgICBUaGlzIGNv bnRyb2xsZXIgc3VwcG9ydHMgRkYsIEhTIGFuZCBTUyBtb2RlLiBJdCBkb2Vzbid0IHN1cHBvcnQN Cj4+ICsgICAgICAgICAgTFMgYW5kIFNTUCBtb2RlLg0KPj4gKw0KPj4gK2NvbmZpZyBVU0JfQ0RO UzNfSE9TVA0KPj4gKyAgICAgICAgYm9vbCAiQ2FkZW5jZSBVU0IzIGhvc3QgY29udHJvbGxlciIN Cj4+ICsgICAgICAgIGRlcGVuZHMgb24gVVNCX1hIQ0lfSENEDQo+PiArICAgICAgICBoZWxwDQo+ PiArICAgICAgICAgIFNheSBZIGhlcmUgdG8gZW5hYmxlIGhvc3QgY29udHJvbGxlciBmdW5jdGlv bmFsaXR5IG9mIHRoZQ0KPj4gKyAgICAgICAgICBjYWRlbmNlIGRyaXZlci4NCj4+ICsNCj4+ICsg ICAgICAgICAgSG9zdCBjb250cm9sbGVyIGlzIGNvbXBsaWFudCB3aXRoIFhIQ0kgc28gaXQgd2ls bCB1c2UNCj4+ICsgICAgICAgICAgc3RhbmRhcmQgWEhDSSBkcml2ZXIuDQo+PiArDQo+PiArY29u ZmlnIFVTQl9DRE5TM19QQ0lfV1JBUA0KPj4gKwl0cmlzdGF0ZSAiQ2FkZW5jZSBVU0IzIHN1cHBv cnQgb24gUENJZS1iYXNlZCBwbGF0Zm9ybXMiDQo+PiArCWRlcGVuZHMgb24gVVNCX1BDSSAmJiBB Q1BJDQo+PiArCWRlZmF1bHQgVVNCX0NETlMzDQo+PiArCWhlbHANCj4+ICsJICBJZiB5b3UncmUg dXNpbmcgdGhlIFVTQlNTIENvcmUgSVAgd2l0aCBhIFBDSWUsIHBsZWFzZSBzYXkNCj4+ICsJICAn WScgb3IgJ00nIGhlcmUuDQo+PiArDQo+PiArCSAgSWYgeW91IGNob29zZSB0byBidWlsZCB0aGlz IGRyaXZlciBhcyBtb2R1bGUgaXQgd2lsbA0KPj4gKwkgIGJlIGR5bmFtaWNhbGx5IGxpbmtlZCBh bmQgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNkbnMzLXBjaS5rbw0KPj4gKw0KPj4gK2VuZGlmDQo+ PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2RuczMvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9j ZG5zMy9NYWtlZmlsZQ0KPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4+IGluZGV4IDAwMDAwMDAw MDAwMC4uOGY5NDM4NTkzMzc1DQo+PiAtLS0gL2Rldi9udWxsDQo+PiArKysgYi9kcml2ZXJzL3Vz Yi9jZG5zMy9NYWtlZmlsZQ0KPj4gQEAgLTAsMCArMSwxNCBAQA0KPj4gKyMgU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjANCj4+ICsjIGRlZmluZV90cmFjZS5oIG5lZWRzIHRvIGtub3cg aG93IHRvIGZpbmQgb3VyIGhlYWRlcg0KPj4gK0NGTEFHU190cmFjZS5vCQkJCTo9IC1JJChzcmMp DQo+PiArDQo+PiArY2RuczMteQkJCQkJOj0gY29yZS5vIGRyZC5vIHRyYWNlLm8NCj4+ICsNCj4+ ICtvYmotJChDT05GSUdfVVNCX0NETlMzKQkJCSs9IGNkbnMzLm8NCj4+ICtpZm5lcSAoJChDT05G SUdfREVCVUdfRlMpLCkNCj4+ICsJY2RuczMteQkJCQkrPSBkZWJ1Z2ZzLm8NCj4+ICtlbmRpZg0K Pj4gKw0KPj4gK2NkbnMzLSQoQ09ORklHX1VTQl9DRE5TM19HQURHRVQpCSs9IGdhZGdldC5vIGVw MC5vDQo+PiArY2RuczMtJChDT05GSUdfVVNCX0NETlMzX0hPU1QpCQkrPSBob3N0Lm8NCj4+ICtv YmotJChDT05GSUdfVVNCX0NETlMzX1BDSV9XUkFQKQkrPSBjZG5zMy1wY2ktd3JhcC5vDQo+PiBk aWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2RuczMvY2RuczMtcGNpLXdyYXAuYyBiL2RyaXZlcnMv dXNiL2NkbnMzL2NkbnMzLXBjaS13cmFwLmMNCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+PiBp bmRleCAwMDAwMDAwMDAwMDAuLmQwYjJkM2Q5Yjk4Mw0KPj4gLS0tIC9kZXYvbnVsbA0KPj4gKysr IGIvZHJpdmVycy91c2IvY2RuczMvY2RuczMtcGNpLXdyYXAuYw0KPj4gQEAgLTAsMCArMSwxNTUg QEANCj4+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KPj4gKy8qDQo+PiAr ICogQ2FkZW5jZSBVU0JTUyBQQ0kgR2x1ZSBkcml2ZXINCj4+ICsgKg0KPj4gKyAqIENvcHlyaWdo dCAoQykgMjAxOCBDYWRlbmNlLg0KPg0KPjIwMTgtMjAxOT8NCj4NCj4+ICsgKg0KPj4gKyAqIEF1 dGhvcjogUGF3ZWwgTGFzemN6YWsgPHBhd2VsbEBjYWRlbmNlLmNvbT4NCj4+ICsgKi8NCj4+ICsN Cj4+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L21vZHVs ZS5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgvcGxh dGZvcm1fZGV2aWNlLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+DQo+PiAr I2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4NCj4+ICsNCj4+ICtzdHJ1Y3QgY2RuczNfd3JhcCB7DQo+ PiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRfZGV2Ow0KPj4gKwlzdHJ1Y3QgcGNpX2Rl diAqaGdfZGV2Ow0KPj4gKwlzdHJ1Y3QgcmVzb3VyY2UgZGV2X3Jlc1s0XTsNCj4+ICt9Ow0KPj4g Kw0KPj4gK3N0cnVjdCBjZG5zM193cmFwIHdyYXA7DQo+PiArDQo+PiArI2RlZmluZSBSRVNfSVJR X0lECQkwDQo+PiArI2RlZmluZSBSRVNfSE9TVF9JRAkJMQ0KPj4gKyNkZWZpbmUgUkVTX0RFVl9J RAkJMg0KPj4gKyNkZWZpbmUgUkVTX0RSRF9JRAkJMw0KPj4gKw0KPj4gKyNkZWZpbmUgUENJX0JB Ul9IT1NUCQkwDQo+PiArI2RlZmluZSBQQ0lfQkFSX0RFVgkJMg0KPj4gKyNkZWZpbmUgUENJX0JB Ul9PVEcJCTQNCj4+ICsNCj4+ICsjZGVmaW5lIFBDSV9ERVZfRk5fSE9TVF9ERVZJQ0UJMA0KPj4g KyNkZWZpbmUgUENJX0RFVl9GTl9PVEcJCTENCj4+ICsNCj4+ICsjZGVmaW5lIFBDSV9EUklWRVJf TkFNRQkJImNkbnMzLXBjaS11c2JzcyINCj4+ICsjZGVmaW5lIFBMQVRfRFJJVkVSX05BTUUJImNk bnMtdXNiMyINCj4+ICsNCj4+ICsjZGVmaW5lIENETlNfVkVORE9SX0lEIDB4MTdjZA0KPj4gKyNk ZWZpbmUgQ0ROU19ERVZJQ0VfSUQgMHgwMTAwDQo+PiArDQo+PiArLyoqDQo+PiArICogY2RuczNf cGNpX3Byb2JlIC0gUHJvYmUgZnVuY3Rpb24gZm9yIENhZGVuY2UgVVNCIHdyYXBwZXIgZHJpdmVy DQo+PiArICogQHBkZXY6IHBsYXRmb3JtIGRldmljZSBvYmplY3QNCj4+ICsgKiBAaWQ6IHBjaSBk ZXZpY2UgaWQNCj4+ICsgKg0KPj4gKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG90aGVyd2lzZSBu ZWdhdGl2ZSBlcnJubw0KPj4gKyAqLw0KPj4gK3N0YXRpYyBpbnQgY2RuczNfcGNpX3Byb2JlKHN0 cnVjdCBwY2lfZGV2ICpwZGV2LA0KPj4gKwkJCSAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lk ICppZCkNCj4+ICt7DQo+PiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaW5mbyBwbGF0X2luZm87 DQo+PiArCXN0cnVjdCBjZG5zM193cmFwICp3cmFwOw0KPj4gKwlzdHJ1Y3QgcmVzb3VyY2UgKnJl czsNCj4+ICsJaW50IGVycjsNCj4+ICsNCj4+ICsJLyoNCj4+ICsJICogZm9yIEdBREdFVC9IT1NU IFBDSSAoZGV2Zm4pIGZ1bmN0aW9uIG51bWJlciBpcyAwLA0KPj4gKwkgKiBmb3IgT1RHIFBDSSAo ZGV2Zm4pIGZ1bmN0aW9uIG51bWJlciBpcyAxDQo+PiArCSAqLw0KPj4gKwlpZiAoIWlkIHx8IHBk ZXYtPmRldmZuICE9IFBDSV9ERVZfRk5fSE9TVF9ERVZJQ0UpDQo+PiArCQlyZXR1cm4gLUVJTlZB TDsNCj4+ICsNCj4+ICsJZXJyID0gcGNpbV9lbmFibGVfZGV2aWNlKHBkZXYpOw0KPj4gKwlpZiAo ZXJyKSB7DQo+PiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJFbmFibGluZyBQQ0kgZGV2aWNlIGhh cyBmYWlsZWQgJWRcbiIsIGVycik7DQo+PiArCQlyZXR1cm4gZXJyOw0KPj4gKwl9DQo+PiArDQo+ PiArCXBjaV9zZXRfbWFzdGVyKHBkZXYpOw0KPj4gKwl3cmFwID0gZGV2bV9remFsbG9jKCZwZGV2 LT5kZXYsIHNpemVvZigqd3JhcCksIEdGUF9LRVJORUwpOw0KPj4gKwlpZiAoIXdyYXApIHsNCj4+ ICsJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnlcbiIpOw0K Pj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+PiArCX0NCj4+ICsNCj4+ICsJLyogZnVuY3Rpb24gMDog aG9zdChCQVJfMCkgKyBkZXZpY2UoQkFSXzEpICsgb3RnKEJBUl8yKSkuICovDQo+PiArCW1lbXNl dCh3cmFwLT5kZXZfcmVzLCAweDAwLA0KPj4gKwkgICAgICAgc2l6ZW9mKHN0cnVjdCByZXNvdXJj ZSkgKiBBUlJBWV9TSVpFKHdyYXAtPmRldl9yZXMpKTsNCj4+ICsJZGV2X2RiZygmcGRldi0+ZGV2 LCAiSW5pdGlhbGl6ZSBEZXZpY2UgcmVzb3VyY2VzXG4iKTsNCj4+ICsJcmVzID0gd3JhcC0+ZGV2 X3JlczsNCj4+ICsNCj4+ICsJcmVzW1JFU19ERVZfSURdLnN0YXJ0ID0gcGNpX3Jlc291cmNlX3N0 YXJ0KHBkZXYsIFBDSV9CQVJfREVWKTsNCj4+ICsJcmVzW1JFU19ERVZfSURdLmVuZCA9ICAgcGNp X3Jlc291cmNlX2VuZChwZGV2LCBQQ0lfQkFSX0RFVik7DQo+PiArCXJlc1tSRVNfREVWX0lEXS5u YW1lID0gImRldiI7DQo+PiArCXJlc1tSRVNfREVWX0lEXS5mbGFncyA9IElPUkVTT1VSQ0VfTUVN Ow0KPj4gKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJVU0JTUy1ERVYgcGh5c2ljYWwgYmFzZSBhZGRy OiAlcGFcbiIsDQo+PiArCQkmcmVzW1JFU19ERVZfSURdLnN0YXJ0KTsNCj4+ICsNCj4+ICsJcmVz W1JFU19IT1NUX0lEXS5zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBQQ0lfQkFSX0hP U1QpOw0KPj4gKwlyZXNbUkVTX0hPU1RfSURdLmVuZCA9IHBjaV9yZXNvdXJjZV9lbmQocGRldiwg UENJX0JBUl9IT1NUKTsNCj4+ICsJcmVzW1JFU19IT1NUX0lEXS5uYW1lID0gInhoY2kiOw0KPj4g KwlyZXNbUkVTX0hPU1RfSURdLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07DQo+PiArCWRldl9kYmco JnBkZXYtPmRldiwgIlVTQlNTLVhIQ0kgcGh5c2ljYWwgYmFzZSBhZGRyOiAlcGFcbiIsDQo+PiAr CQkmcmVzW1JFU19IT1NUX0lEXS5zdGFydCk7DQo+PiArDQo+PiArCXJlc1tSRVNfRFJEX0lEXS5z dGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBQQ0lfQkFSX09URyk7DQo+PiArCXJlc1tS RVNfRFJEX0lEXS5lbmQgPSAgIHBjaV9yZXNvdXJjZV9lbmQocGRldiwgUENJX0JBUl9PVEcpOw0K Pj4gKwlyZXNbUkVTX0RSRF9JRF0ubmFtZSA9ICJvdGciOw0KPj4gKwlyZXNbUkVTX0RSRF9JRF0u ZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsNCj4+ICsJZGV2X2RiZygmcGRldi0+ZGV2LCAiVVNCU1Mt RFJEIHBoeXNpY2FsIGJhc2UgYWRkcjogJXBhXG4iLA0KPj4gKwkJJnJlc1tSRVNfRFJEX0lEXS5z dGFydCk7DQo+PiArDQo+PiArCS8qIEludGVycnVwdCBjb21tb24gZm9yIGJvdGggZGV2aWNlIGFu ZCBYSENJICovDQo+PiArCXdyYXAtPmRldl9yZXNbUkVTX0lSUV9JRF0uc3RhcnQgPSBwZGV2LT5p cnE7DQo+PiArCXdyYXAtPmRldl9yZXNbUkVTX0lSUV9JRF0ubmFtZSA9ICJjZG5zMy1pcnEiOw0K Pj4gKwl3cmFwLT5kZXZfcmVzW1JFU19JUlFfSURdLmZsYWdzID0gSU9SRVNPVVJDRV9JUlE7DQo+ PiArDQo+PiArCS8qIHNldCB1cCBwbGF0Zm9ybSBkZXZpY2UgaW5mbyAqLw0KPj4gKwltZW1zZXQo JnBsYXRfaW5mbywgMCwgc2l6ZW9mKHBsYXRfaW5mbykpOw0KPj4gKwlwbGF0X2luZm8ucGFyZW50 ID0gJnBkZXYtPmRldjsNCj4+ICsJcGxhdF9pbmZvLmZ3bm9kZSA9IHBkZXYtPmRldi5md25vZGU7 DQo+PiArCXBsYXRfaW5mby5uYW1lID0gUExBVF9EUklWRVJfTkFNRTsNCj4+ICsJcGxhdF9pbmZv LmlkID0gcGRldi0+ZGV2Zm47DQo+PiArCXBsYXRfaW5mby5yZXMgPSB3cmFwLT5kZXZfcmVzOw0K Pj4gKwlwbGF0X2luZm8ubnVtX3JlcyA9IEFSUkFZX1NJWkUod3JhcC0+ZGV2X3Jlcyk7DQo+PiAr CXBsYXRfaW5mby5kbWFfbWFzayA9IHBkZXYtPmRtYV9tYXNrOw0KPj4gKw0KPj4gKwkvKiByZWdp c3RlciBwbGF0Zm9ybSBkZXZpY2UgKi8NCj4+ICsJd3JhcC0+cGxhdF9kZXYgPSBwbGF0Zm9ybV9k ZXZpY2VfcmVnaXN0ZXJfZnVsbCgmcGxhdF9pbmZvKTsNCj4+ICsJaWYgKElTX0VSUih3cmFwLT5w bGF0X2RldikpDQo+PiArCQlyZXR1cm4gUFRSX0VSUih3cmFwLT5wbGF0X2Rldik7DQo+PiArDQo+ PiArCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB3cmFwKTsNCj4+ICsNCj4+ICsJcmV0dXJuIGVycjsN Cj4+ICt9DQo+PiArDQo+PiArdm9pZCBjZG5zM19wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpw ZGV2KQ0KPj4gK3sNCj4+ICsJc3RydWN0IGNkbnMzX3dyYXAgKndyYXAgPSAoc3RydWN0IGNkbnMz X3dyYXAgKilwY2lfZ2V0X2RydmRhdGEocGRldik7DQo+PiArDQo+PiArCXBsYXRmb3JtX2Rldmlj ZV91bnJlZ2lzdGVyKHdyYXAtPnBsYXRfZGV2KTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGNv bnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGNkbnMzX3BjaV9pZHNbXSA9IHsNCj4+ICsJeyBQQ0lf REVWSUNFKENETlNfVkVORE9SX0lELCBDRE5TX0RFVklDRV9JRCksIH0sDQo+PiArCXsgMCwgfQ0K Pj4gK307DQo+PiArDQo+PiArc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGNkbnMzX3BjaV9kcml2 ZXIgPSB7DQo+PiArCS5uYW1lID0gUENJX0RSSVZFUl9OQU1FLA0KPj4gKwkuaWRfdGFibGUgPSBj ZG5zM19wY2lfaWRzLA0KPj4gKwkucHJvYmUgPSBjZG5zM19wY2lfcHJvYmUsDQo+PiArCS5yZW1v dmUgPSBjZG5zM19wY2lfcmVtb3ZlLA0KPj4gK307DQo+PiArDQo+PiArbW9kdWxlX3BjaV9kcml2 ZXIoY2RuczNfcGNpX2RyaXZlcik7DQo+PiArTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGNkbnMz X3BjaV9pZHMpOw0KPj4gKw0KPj4gK01PRFVMRV9BVVRIT1IoIlBhd2VsIExhc3pjemFrIDxwYXdl bGxAY2FkZW5jZS5jb20+Iik7DQo+PiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOw0KPj4gK01P RFVMRV9ERVNDUklQVElPTigiQ2FkZW5jZSBVU0JTUyBQQ0kgd3JhcHBlcnIiKTsNCj4+ICsNCj4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jZG5zMy9jb3JlLmMgYi9kcml2ZXJzL3VzYi9jZG5z My9jb3JlLmMNCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+PiBpbmRleCAwMDAwMDAwMDAwMDAu LmFhMmY2MzI0MWRhYg0KPj4gLS0tIC9kZXYvbnVsbA0KPj4gKysrIGIvZHJpdmVycy91c2IvY2Ru czMvY29yZS5jDQo+PiBAQCAtMCwwICsxLDQwMyBAQA0KPj4gKy8vIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wDQo+PiArLyoNCj4+ICsgKiBDYWRlbmNlIFVTQlNTIERSRCBEcml2ZXIu DQo+PiArICoNCj4+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTggQ2FkZW5jZS4NCj4+ICsgKiBDb3B5 cmlnaHQgKEMpIDIwMTctMjAxOCBOWFANCj4+ICsgKg0KPj4gKyAqIEF1dGhvcjogUGV0ZXIgQ2hl biA8cGV0ZXIuY2hlbkBueHAuY29tPg0KPj4gKyAqICAgICAgICAgUGF3ZWwgTGFzemN6YWsgPHBh d2VsbEBjYWRlbmNlLmNvbT4NCj4+ICsgKi8NCj4+ICsNCj4+ICsjaW5jbHVkZSA8bGludXgvbW9k dWxlLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KPj4gKyNpbmNsdWRlIDxsaW51 eC9wbGF0Zm9ybV9kZXZpY2UuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+DQo+ PiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUu aD4NCj4+ICsNCj4+ICsjaW5jbHVkZSAiZ2FkZ2V0LmgiDQo+PiArI2luY2x1ZGUgImNvcmUuaCIN Cj4+ICsjaW5jbHVkZSAiaG9zdC1leHBvcnQuaCINCj4+ICsjaW5jbHVkZSAiZ2FkZ2V0LWV4cG9y dC5oIg0KPj4gKyNpbmNsdWRlICJkcmQuaCINCj4+ICsjaW5jbHVkZSAiZGVidWcuaCINCj4+ICsN Cj4+ICtzdGF0aWMgaW5saW5lDQo+PiArc3RydWN0IGNkbnMzX3JvbGVfZHJpdmVyICpjZG5zM19n ZXRfY3VycmVudF9yb2xlX2RyaXZlcihzdHJ1Y3QgY2RuczMgKmNkbnMpDQo+PiArew0KPj4gKwlX QVJOX09OKGNkbnMtPnJvbGUgPj0gQ0ROUzNfUk9MRV9FTkQgfHwgIWNkbnMtPnJvbGVzW2NkbnMt PnJvbGVdKTsNCj4+ICsJcmV0dXJuIGNkbnMtPnJvbGVzW2NkbnMtPnJvbGVdOw0KPj4gK30NCj4+ ICsNCj4+ICtzdGF0aWMgaW50IGNkbnMzX3JvbGVfc3RhcnQoc3RydWN0IGNkbnMzICpjZG5zLCBl bnVtIGNkbnMzX3JvbGVzIHJvbGUpDQo+PiArew0KPj4gKwlpbnQgcmV0Ow0KPj4gKw0KPj4gKwlp ZiAoV0FSTl9PTihyb2xlID49IENETlMzX1JPTEVfRU5EKSkNCj4+ICsJCXJldHVybiAwOw0KPj4g Kw0KPj4gKwlpZiAoIWNkbnMtPnJvbGVzW3JvbGVdKQ0KPj4gKwkJcmV0dXJuIC1FTlhJTzsNCj4+ ICsNCj4+ICsJaWYgKGNkbnMtPnJvbGVzW3JvbGVdLT5zdGF0ZSA9PSBDRE5TM19ST0xFX1NUQVRF X0FDVElWRSkNCj4+ICsJCXJldHVybiAwOw0KPj4gKw0KPj4gKwltdXRleF9sb2NrKCZjZG5zLT5t dXRleCk7DQo+PiArCWNkbnMtPnJvbGUgPSByb2xlOw0KPj4gKwlyZXQgPSBjZG5zLT5yb2xlc1ty b2xlXS0+c3RhcnQoY2Rucyk7DQo+PiArCWlmICghcmV0KQ0KPj4gKwkJY2Rucy0+cm9sZXNbcm9s ZV0tPnN0YXRlID0gQ0ROUzNfUk9MRV9TVEFURV9BQ1RJVkU7DQo+PiArCW11dGV4X3VubG9jaygm Y2Rucy0+bXV0ZXgpOw0KPj4gKwlyZXR1cm4gcmV0Ow0KPj4gK30NCj4+ICsNCj4+ICt2b2lkIGNk bnMzX3JvbGVfc3RvcChzdHJ1Y3QgY2RuczMgKmNkbnMpDQo+PiArew0KPj4gKwllbnVtIGNkbnMz X3JvbGVzIHJvbGUgPSBjZG5zLT5yb2xlOw0KPj4gKw0KPj4gKwlpZiAocm9sZSA+PSBDRE5TM19S T0xFX0VORCkgew0KPj4gKwkJV0FSTl9PTihyb2xlID4gQ0ROUzNfUk9MRV9FTkQpOw0KPj4gKwkJ cmV0dXJuOw0KPj4gKwl9DQo+PiArDQo+PiArCWlmIChjZG5zLT5yb2xlc1tyb2xlXS0+c3RhdGUg PT0gQ0ROUzNfUk9MRV9TVEFURV9JTkFDVElWRSkNCj4+ICsJCXJldHVybjsNCj4+ICsNCj4+ICsJ bXV0ZXhfbG9jaygmY2Rucy0+bXV0ZXgpOw0KPj4gKwljZG5zLT5yb2xlc1tyb2xlXS0+c3RvcChj ZG5zKTsNCj4+ICsJY2Rucy0+cm9sZXNbcm9sZV0tPnN0YXRlID0gQ0ROUzNfUk9MRV9TVEFURV9J TkFDVElWRTsNCj4+ICsJbXV0ZXhfdW5sb2NrKCZjZG5zLT5tdXRleCk7DQo+PiArfQ0KPj4gKw0K Pj4gKy8qDQo+PiArICogY2Rucy0+cm9sZSBnZXRzIGZyb20gY2RuczNfZ2V0X2luaXRpYWxfcm9s ZSwgYW5kIHRoaXMgQVBJIHRlbGxzIHJvbGUgYXQgdGhlDQo+PiArICogcnVudGltZS4NCj4+ICsg KiBJZiBib3RoIHJvbGVzIGFyZSBzdXBwb3J0ZWQsIHRoZSByb2xlIGlzIHNlbGVjdGVkIGJhc2Vk IG9uIHZidXMvaWQuDQo+PiArICogSXQgY291bGQgYmUgcmVhZCBmcm9tIE9URyByZWdpc3RlciBv ciBleHRlcm5hbCBjb25uZWN0b3IuDQo+PiArICogSWYgb25seSBzaW5nbGUgcm9sZSBpcyBzdXBw b3J0ZWQsIG9ubHkgb25lIHJvbGUgc3RydWN0dXJlDQo+PiArICogaXMgYWxsb2NhdGVkLCBjZG5z LT5yb2xlc1tDRE5TM19ST0xFX0hPU1RdIG9yIGNkbnMtPnJvbGVzW0NETlMzX1JPTEVfR0FER0VU XS4NCj4+ICsgKi8NCj4+ICtzdGF0aWMgZW51bSBjZG5zM19yb2xlcyBjZG5zM19nZXRfaW5pdGlh bF9yb2xlKHN0cnVjdCBjZG5zMyAqY2RucykNCj4+ICt7DQo+PiArCWlmIChjZG5zLT5yb2xlc1tD RE5TM19ST0xFX0hPU1RdICYmIGNkbnMtPnJvbGVzW0NETlMzX1JPTEVfR0FER0VUXSkgew0KPj4g KwkJaWYgKGNkbnMzX2lzX2hvc3QoY2RucykpDQo+PiArCQkJcmV0dXJuIENETlMzX1JPTEVfSE9T VDsNCj4+ICsJCWlmIChjZG5zM19pc19kZXZpY2UoY2RucykpDQo+PiArCQkJcmV0dXJuIENETlMz X1JPTEVfR0FER0VUOw0KPj4gKwl9DQo+PiArCXJldHVybiBjZG5zLT5yb2xlc1tDRE5TM19ST0xF X0hPU1RdDQo+PiArCQk/IENETlMzX1JPTEVfSE9TVA0KPj4gKwkJOiBDRE5TM19ST0xFX0dBREdF VDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQgY2RuczNfZXhpdF9yb2xlcyhzdHJ1Y3Qg Y2RuczMgKmNkbnMpDQo+PiArew0KPj4gKwljZG5zM19yb2xlX3N0b3AoY2Rucyk7DQo+PiArCWNk bnMzX2RyZF9leGl0KGNkbnMpOw0KPj4gK30NCj4+ICsNCj4+ICsvKioNCj4+ICsgKiBjZG5zM19j b3JlX2luaXRfcm9sZSAtIGluaXRpYWxpemUgcm9sZSBvZiBvcGVyYXRpb24NCj4+ICsgKiBAY2Ru czogUG9pbnRlciB0byBjZG5zMyBzdHJ1Y3R1cmUNCj4+ICsgKg0KPj4gKyAqIFJldHVybnMgMCBv biBzdWNjZXNzIG90aGVyd2lzZSBuZWdhdGl2ZSBlcnJubw0KPj4gKyAqLw0KPj4gK3N0YXRpYyBp bnQgY2RuczNfY29yZV9pbml0X3JvbGUoc3RydWN0IGNkbnMzICpjZG5zKQ0KPj4gK3sNCj4+ICsJ c3RydWN0IGRldmljZSAqZGV2ID0gY2Rucy0+ZGV2Ow0KPj4gKwllbnVtIHVzYl9kcl9tb2RlIGJl c3RfZHJfbW9kZTsNCj4+ICsJZW51bSB1c2JfZHJfbW9kZSBkcl9tb2RlOw0KPj4gKwlpbnQgcmV0 ID0gMDsNCj4+ICsNCj4+ICsJZHJfbW9kZSA9IHVzYl9nZXRfZHJfbW9kZShkZXYpOw0KPj4gKwlj ZG5zLT5yb2xlID0gQ0ROUzNfUk9MRV9FTkQ7DQo+PiArDQo+PiArCS8qDQo+PiArCSAqIElmIGRy aXZlciBjYW4ndCByZWFkIG1vZGUgYnkgbWVhbnMgb2YgdXNiX2dldF9kcl9tZG9lIGZ1bmN0aW9u IHRoZW4NCj4NCj5zL21kb2UvbW9kZQ0KPg0KPj4gKwkgKiBjaG9vc2VzIG1vZGUgYWNjb3JkaW5n IHdpdGggS2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoaXMgc2V0dGluZw0KPj4gKwkgKiBjYW4gYmUg cmVzdHJpY3RlZCBsYXRlciBkZXBlbmRpbmcgb24gc3RyYXAgcGluIGNvbmZpZ3VyYXRpb24uDQo+ PiArCSAqLw0KPj4gKwlpZiAoZHJfbW9kZSA9PSBVU0JfRFJfTU9ERV9VTktOT1dOKSB7DQo+PiAr CQlpZiAoSVNfRU5BQkxFRChDT05GSUdfVVNCX0NETlMzX0hPU1QpICYmDQo+PiArCQkgICAgSVNf RU5BQkxFRChDT05GSUdfVVNCX0NETlMzX0dBREdFVCkpDQo+PiArCQkJZHJfbW9kZSA9IFVTQl9E Ul9NT0RFX09URzsNCj4+ICsJCWVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX1VTQl9DRE5TM19I T1NUKSkNCj4+ICsJCQlkcl9tb2RlID0gVVNCX0RSX01PREVfSE9TVDsNCj4+ICsJCWVsc2UgaWYg KElTX0VOQUJMRUQoQ09ORklHX1VTQl9DRE5TM19HQURHRVQpKQ0KPj4gKwkJCWRyX21vZGUgPSBV U0JfRFJfTU9ERV9QRVJJUEhFUkFMOw0KPj4gKwl9DQo+PiArDQo+PiArCWJlc3RfZHJfbW9kZSA9 IFVTQl9EUl9NT0RFX09URzsNCj4NCj5NaWdodCBiZSB3b3J0aCBtZW50aW9uaW5nIHRoYXQgY2Ru cy0+ZHJfbW9kZSBpcyBzdHJhcCBjb25maWd1cmF0aW9uDQo+YXQgdGhpcyBwb2ludC4NCkkgYWRk ZWQgc3VjaCBpbmZvcm1hdGlvbi4gSXQgY291bGQgaGVscCBpbiB1bmRlcnN0YW5kaW5nIGNvZGUu DQo+DQo+V2hhdCBleGFjdGx5IGFyZSB3ZSB0cnlpbmcgdG8gZG8gaGVyZT8NCj5NeSBndWVzcyBp cyB0aGF0IGNob29zZW4gZHJfbW9kZSBjYW4gYmUgZXF1YWwgdG8gb3Igc3Vic2V0IG9mIHN0cmFw IGNvbmZpZ3VyYXRpb24/DQo+DQpXZSBoYXZlIHRocmVlIHBvc3NpYmlsaXR5IHJlZ2FyZGluZyBk cl9tb2RlOg0KMS4gSXQgY2FuIGJlIHJlYWQgZnJvbSBzdHJhcCBiaXRzDQoyLiB3ZSBoYXZlIGtl cm5lbCBjb25maWd1cmF0aW9uIA0KMy4gd2UgY2FuIHJlYWQgaXQgZnJvbSBkdHMuIA0KDQpJIGFz c3VtZSB0aGF0IGRyaXZlciBzaG91bGQgc2VsZWN0IGRyX21vZGUgY29uc2lkZXJpbmcgdGhlc2Ug dGhyZWUgc2V0dGluZ3MuIA0KDQo+RG9lcyB0aGlzIHdvcms/DQoNCj4NCj4JaWYgKGNkbnMtPmRy X21vZGUgIT0gVVNCX0RSX01PREVfT1RHKSB7DQo+CQlpZiAoY2Rucy0+ZHJfbW9kZSAhPSBkcl9t b2RlKSB7DQo+CQkJZGV2X2VycihkZXYsICJJbmNvcnJlY3QgZHJfbW9kZSBjb25maWd1cmF0aW9u OiBzdHJhcCAlZDogcmVxdWVzdGVkICVkXG4iLA0KPgkJCQljZG5zLT5kcl9tb2RlLCBkcl9tb2Rl KTsNCj4JCX0NCj4JfQ0KPg0KPkF0IHRoaXMgcG9pbnQsIGRyX21vZGUgY29udGFpbnMgdGhlIG1v ZGUgd2UgbmVlZCB0byB1c2UuDQoNCkkgZG9uJ3QgdW5kZXJzdGFuZC4gRG8geW91IHdhbnQgdG8g cmVwbGFjZSBiZWxvdyBibG9jayB3aXRoIGFib3ZlIGNvbmRpdGlvbiA/DQpJZiB5ZXMsIHdoYXQg d2l0aCBjYXNlIGNkbnMtPmRyX21vZGUgPSAgVVNCX0RSX01PREVfT1RHIChzdHJhcCBjb25maWd1 cmF0aW9uKQ0KYW5kIGRyX21vZGUgPSBVU0JfRFJfTU9ERV9IT1NUIChLZXJuZWwgY29uZmlndXJh dGlvbikuIA0KSSB0aGluayB0aGF0IGluIHRoaXMgY2FzZSBkcml2ZXIgc2hvdWxkIGxpbWl0IGNk bnMtPmRyX21vZGUgdG8gVVNCX0RSX01PREVfSE9TVCANCmJlY2F1c2UgZ2FkZ2V0IGRyaXZlciBp cyBkaXNhYmxlZC4gIA0KT2YgY291cnNlIHdlIGNhbiBhbHNvIGNvbnNpZGVyIHN1Y2ggY2FzZSBh cyBpbmNvcnJlY3Qga2VybmVsIGNvbmZpZ3VyYXRpb24uDQoNCj4NCj4+ICsNCj4+ICsJaWYgKGRy X21vZGUgPT0gVVNCX0RSX01PREVfT1RHKSB7DQo+PiArCQliZXN0X2RyX21vZGUgPSBjZG5zLT5k cl9tb2RlOw0KPj4gKwl9IGVsc2UgaWYgKGNkbnMtPmRyX21vZGUgPT0gVVNCX0RSX01PREVfT1RH KSB7DQo+PiArCQliZXN0X2RyX21vZGUgPSBkcl9tb2RlOw0KPj4gKwl9IGVsc2UgaWYgKGNkbnMt PmRyX21vZGUgIT0gZHJfbW9kZSkgew0KPj4gKwkJZGV2X2VycihkZXYsICJJbmNvcnJlY3QgRFJE IGNvbmZpZ3VyYXRpb25cbiIpOw0KPj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+PiArCX0NCj4+ICsN Cj4+ICsJZHJfbW9kZSA9IGJlc3RfZHJfbW9kZTsNCj4+ICsNCj4+ICsJaWYgKGRyX21vZGUgPT0g VVNCX0RSX01PREVfT1RHIHx8IGRyX21vZGUgPT0gVVNCX0RSX01PREVfSE9TVCkgew0KPj4gKwkJ cmV0ID0gY2RuczNfaG9zdF9pbml0KGNkbnMpOw0KPj4gKwkJaWYgKHJldCkgew0KPj4gKwkJCWRl dl9lcnIoZGV2LCAiSG9zdCBpbml0aWFsaXphdGlvbiBmYWlsZWQgd2l0aCAlZFxuIiwNCj4+ICsJ CQkJcmV0KTsNCj4+ICsJCQlnb3RvIGVycjsNCj4+ICsJCX0NCj4+ICsJfQ0KPj4gKw0KPj4gKwlp ZiAoZHJfbW9kZSA9PSBVU0JfRFJfTU9ERV9PVEcgfHwgZHJfbW9kZSA9PSBVU0JfRFJfTU9ERV9Q RVJJUEhFUkFMKSB7DQo+PiArCQlyZXQgPSBjZG5zM19nYWRnZXRfaW5pdChjZG5zKTsNCj4+ICsJ CWlmIChyZXQpIHsNCj4+ICsJCQlkZXZfZXJyKGRldiwgIkRldmljZSBpbml0aWFsaXphdGlvbiBm YWlsZWQgd2l0aCAlZFxuIiwNCj4+ICsJCQkJcmV0KTsNCj4+ICsJCQlnb3RvIGVycjsNCj4+ICsJ CX0NCj4+ICsJfT4gKw0KPj4gKwljZG5zLT5kZXNpcmVkX2RyX21vZGUgPSBkcl9tb2RlOw0KPj4g KwljZG5zLT5kcl9tb2RlID0gZHJfbW9kZTsNCj4+ICsJLyoNCj4+ICsJICogZHJfbW9kZSBjb3Vs ZCBiZSBjaGFuZ2Ugc28gRFJEIG11c3QgdXBkYXRlIGNvbnRyb2xsZXINCj4NCj4iZGVzaXJlZF9k cl9tb2RlIG1pZ2h0IGhhdmUgY2hhbmdlZCBzbyB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgY29udHJv bGxlciBjb25maWd1cmF0aW9uIj8NCg0KU291bmRzIGJldHRlci4gDQoNCj4NCj4+ICsJICogY29u ZmlndXJhdGlvbg0KPj4gKwkgKi8NCj4+ICsJcmV0ID0gY2RuczNfZHJkX3VwZGF0ZV9tb2RlKGNk bnMpOw0KPj4gKwlpZiAocmV0KQ0KPj4gKwkJZ290byBlcnI7DQo+PiArDQo+PiArCWNkbnMtPnJv bGUgPSBjZG5zM19nZXRfaW5pdGlhbF9yb2xlKGNkbnMpOw0KPj4gKw0KPj4gKwlyZXQgPSBjZG5z M19yb2xlX3N0YXJ0KGNkbnMsIGNkbnMtPnJvbGUpOw0KPj4gKwlpZiAocmV0KSB7DQo+PiArCQlk ZXZfZXJyKGRldiwgImNhbid0IHN0YXJ0ICVzIHJvbGVcbiIsDQo+PiArCQkJY2RuczNfZ2V0X2N1 cnJlbnRfcm9sZV9kcml2ZXIoY2RucyktPm5hbWUpOw0KPj4gKwkJZ290byBlcnI7DQo+PiArCX0N Cj4+ICsNCj4+ICsJcmV0dXJuIHJldDsNCj4+ICtlcnI6DQo+PiArCWNkbnMzX2V4aXRfcm9sZXMo Y2Rucyk7DQo+PiArCXJldHVybiByZXQ7DQo+PiArfQ0KPj4gKw0KPj4gKy8qKg0KPj4gKyAqIGNk c24zX2dldF9yZWFsX3JvbGUgLSBnZXQgcmVhbCByb2xlIG9mIGNvbnRyb2xsZXIgYmFzZWQgb24g aGFyZHdhcmUgc2V0dGluZ3MuDQo+PiArICogQGNkbnM6IFBvaW50ZXIgdG8gY2RuczMgc3RydWN0 dXJlDQo+PiArICoNCj4+ICsgKiBSZXR1cm5zIHJvbGUNCj4+ICsgKi8NCj4+ICtlbnVtIGNkbnMz X3JvbGVzIGNkc24zX2dldF9yZWFsX3JvbGUoc3RydWN0IGNkbnMzICpjZG5zKQ0KPj4gK3sNCj4+ ICsJZW51bSBjZG5zM19yb2xlcyByb2xlID0gQ0ROUzNfUk9MRV9FTkQ7DQo+PiArDQo+PiArCWlm IChjZG5zLT5jdXJyZW50X2RyX21vZGUgPT0gVVNCX0RSX01PREVfT1RHKSB7DQo+PiArCQlpZiAo Y2RuczNfZ2V0X2lkKGNkbnMpKQ0KPj4gKwkJCXJvbGUgPSBDRE5TM19ST0xFX0dBREdFVDsNCj4+ ICsJCWVsc2UNCj4+ICsJCQlyb2xlID0gQ0ROUzNfUk9MRV9IT1NUOw0KPj4gKwl9IGVsc2Ugew0K Pj4gKwkJaWYgKGNkbnMzX2lzX2hvc3QoY2RucykpDQo+PiArCQkJcm9sZSA9IENETlMzX1JPTEVf SE9TVDsNCj4+ICsJCWlmIChjZG5zM19pc19kZXZpY2UoY2RucykpDQo+PiArCQkJcm9sZSA9IENE TlMzX1JPTEVfR0FER0VUOw0KPj4gKwl9DQo+PiArDQo+PiArCXJldHVybiByb2xlOw0KPj4gK30N Cj4+ICsNCj4+ICsvKioNCj4+ICsgKiBjZG5zM19yb2xlX3N3aXRjaCAtIHdvcmsgcXVldWUgaGFu ZGxlciBmb3Igcm9sZSBzd2l0Y2gNCj4+ICsgKg0KPj4gKyAqIEB3b3JrOiB3b3JrIHF1ZXVlIGl0 ZW0gc3RydWN0dXJlDQo+PiArICoNCj4+ICsgKiBIYW5kbGVzIGJlbG93IGV2ZW50czoNCj4+ICsg KiAtIFJvbGUgc3dpdGNoIGZvciBkdWFsLXJvbGUgZGV2aWNlcw0KPj4gKyAqIC0gQ0ROUzNfUk9M RV9HQURHRVQgPC0tPiBDRE5TM19ST0xFX0VORCBmb3IgcGVyaXBoZXJhbC1vbmx5IGRldmljZXMN Cj4+ICsgKi8NCj4+ICtzdGF0aWMgdm9pZCBjZG5zM19yb2xlX3N3aXRjaChzdHJ1Y3Qgd29ya19z dHJ1Y3QgKndvcmspDQo+PiArew0KPj4gKwllbnVtIGNkbnMzX3JvbGVzIHJvbGUgPSBDRE5TM19S T0xFX0VORDsNCj4+ICsJc3RydWN0IGNkbnMzX3JvbGVfZHJpdmVyICpyb2xlX2RydjsNCj4+ICsJ ZW51bSBjZG5zM19yb2xlcyBjdXJyZW50X3JvbGU7DQo+PiArCXN0cnVjdCBjZG5zMyAqY2RuczsN Cj4+ICsJaW50IHJldCA9IDA7DQo+PiArDQo+PiArCWNkbnMgPSBjb250YWluZXJfb2Yod29yaywg c3RydWN0IGNkbnMzLCByb2xlX3N3aXRjaF93cSk7DQo+PiArDQo+PiArCS8qIER1cmluZyBzd2l0 Y2hpbmcgY2Rucy0+cm9sZSBjYW4gYmUgZGlmZmVyZW50IHRoZW4gcm9sZSAqLw0KPnMvdGhlbi90 aGFuDQo+DQo+VGhlIGNvbW1lbnQgaXMgYSBiaXQgbWlzbGVhZGluZy4gVGhlIHB1cnBvc2Ugb2Yg dGhpcyBzd2l0Y2ggZnVuY3Rpb24NCj5pcyB0byBkbyBhIHN3aXRjaCBpZiB0aGUgcm9sZSBuZWVk cyB0byBiZSBjaGFuZ2VkLg0KPg0KPj4gKwlyb2xlID0gY2RzbjNfZ2V0X3JlYWxfcm9sZShjZG5z KTsNCj4+ICsNCj4+ICsJcm9sZV9kcnYgPSBjZG5zM19nZXRfY3VycmVudF9yb2xlX2RyaXZlcihj ZG5zKTsNCj4+ICsNCj4+ICsJcG1fcnVudGltZV9nZXRfc3luYyhjZG5zLT5kZXYpOw0KPg0KPnBt X3J1bnRpbWVfZ2V0X3N5bmMoKSBtdXN0IGJlIG1vdmVkIHRvIGJlZm9yZSBjZHNuM19nZXRfcmVh bF9yb2xlKCkgYXMgdGhhdCBmdW5jdGlvbg0KPmFjY2Vzc2VzIGEgZGV2aWNlIHJlZ2lzdGVyLg0K DQpPay4NCj4NCj4+ICsNCj4+ICsJLyogRGlzYWJsZSBjdXJyZW50IHJvbGUuIFRoaXMgc3RhdGUg Y2FuIGJlIGZvcmNlZCBmcm9tIHVzZXIgc3BhY2UuICovDQo+LyogRGlzYWJsZSBjdXJyZW50IHJv bGUgaWYgcmVxdXJlc3RlZCBmcm9tIGRlYnVnZnMgKi8/DQo+DQo+PiArCWlmIChjZG5zLT5kZWJ1 Z19kaXNhYmxlICYmIHJvbGVfZHJ2LT5zdGF0ZSA9PSBDRE5TM19ST0xFX1NUQVRFX0FDVElWRSkg ew0KPj4gKwkJY2RuczNfcm9sZV9zdG9wKGNkbnMpOw0KPj4gKwkJZ290byBleGl0Ow0KPj4gKwl9 DQo+PiArDQo+PiArCS8qIERvIG5vdGhpbmcgaWYgbm90aGluZyBjaGFuZ2VkICovDQo+PiArCWlm IChjZG5zLT5yb2xlID09IHJvbGUgJiYgcm9sZV9kcnYtPnN0YXRlID09IENETlMzX1JPTEVfU1RB VEVfQUNUSVZFKQ0KPj4gKwkJZ290byBleGl0Ow0KPj4gKw0KPj4gKwljZG5zM19yb2xlX3N0b3Ao Y2Rucyk7DQo+PiArDQo+PiArCXJvbGUgPSBjZHNuM19nZXRfcmVhbF9yb2xlKGNkbnMpOw0KPg0K PllvdSBhbHJlYWR5IGRpZCBjZG5zM19nZXRfcmVhbF9yb2xlIGJlZm9yZS4gVGhpcyBpcyByZWR1 bmRhbnQuDQpJJ20gbm90IHN1cmUuIEkgcmVtZW1iZXIgdGhhdCBpdCBoYXMgYmVlbiBhZGRlZCBm b3Igc29tZSByZWFzb24sIGJ1dCBJIGNhbid0ICByZW1lbWJlciB0aGlzIGNhc2UuIA0KSSBuZWVk IHRvIGNoZWNrIHRoaXMuDQogDQo+PiArDQo+PiArCWN1cnJlbnRfcm9sZSA9IGNkbnMtPnJvbGU7 DQo+PiArCWRldl9kYmcoY2Rucy0+ZGV2LCAiU3dpdGNoaW5nIHJvbGUiKTsNCj4+ICsNCj4+ICsJ cmV0ID0gY2RuczNfcm9sZV9zdGFydChjZG5zLCByb2xlKTsNCj4+ICsJaWYgKHJldCkgew0KPj4g KwkJLyogQmFjayB0byBjdXJyZW50IHJvbGUgKi8NCj4+ICsJCWRldl9lcnIoY2Rucy0+ZGV2LCAi c2V0ICVkIGhhcyBmYWlsZWQsIGJhY2sgdG8gJWRcbiIsDQo+PiArCQkJcm9sZSwgY3VycmVudF9y b2xlKTsNCj4+ICsJCWNkbnMzX3JvbGVfc3RhcnQoY2RucywgY3VycmVudF9yb2xlKTsNCj4NCj5O ZWVkIHRvIGNoZWNrIHJldHVybiB2YWx1ZSBoZXJlIGFzIHdlbGw/IEFuZCBjb21wbGFpbiBsb3Vk IGlmIHRoYXQgZmFpbHMgdG9vLg0KPg0KT2suDQoNCj4+ICsJfQ0KPj4gK2V4aXQ6DQo+PiArCXBt X3J1bnRpbWVfcHV0X3N5bmMoY2Rucy0+ZGV2KTsNCj4+ICt9DQo+PiArDQo+PiArLyoqDQo+PiAr ICogY2RuczNfcHJvYmUgLSBwcm9iZSBmb3IgY2RuczMgY29yZSBkZXZpY2UNCj4+ICsgKiBAcGRl djogUG9pbnRlciB0byBjZG5zMyBjb3JlIHBsYXRmb3JtIGRldmljZQ0KPj4gKyAqDQo+PiArICog UmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3RoZXJ3aXNlIG5lZ2F0aXZlIGVycm5vDQo+PiArICovDQo+ PiArc3RhdGljIGludCBjZG5zM19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0K Pj4gK3sNCj4+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsNCj4+ICsJc3RydWN0 IHJlc291cmNlCSpyZXM7DQo+PiArCXN0cnVjdCBjZG5zMyAqY2RuczsNCj4+ICsJdm9pZCBfX2lv bWVtICpyZWdzOw0KPj4gKwlpbnQgcmV0Ow0KPj4gKw0KPj4gKwljZG5zID0gZGV2bV9remFsbG9j KGRldiwgc2l6ZW9mKCpjZG5zKSwgR0ZQX0tFUk5FTCk7DQo+PiArCWlmICghY2RucykNCj4+ICsJ CXJldHVybiAtRU5PTUVNOw0KPj4gKw0KPj4gKwljZG5zLT5kZXYgPSBkZXY7DQo+PiArDQo+PiAr CXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGNkbnMpOw0KPj4gKw0KPj4gKwlyZXMgPSBwbGF0 Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOw0KPj4gKwlpZiAoIXJl cykgew0KPj4gKwkJZGV2X2VycihkZXYsICJtaXNzaW5nIElSUVxuIik7DQo+PiArCQlyZXR1cm4g LUVOT0RFVjsNCj4+ICsJfQ0KPj4gKwljZG5zLT5pcnEgPSByZXMtPnN0YXJ0Ow0KPj4gKw0KPj4g KwljZG5zLT54aGNpX3Jlc1swXSA9ICpyZXM7DQo+PiArDQo+PiArCS8qDQo+PiArCSAqIFJlcXVl c3QgbWVtb3J5IHJlZ2lvbg0KPj4gKwkgKiByZWdpb24tMDogeEhDSQ0KPj4gKwkgKiByZWdpb24t MTogUGVyaXBoZXJhbA0KPj4gKwkgKiByZWdpb24tMjogT1RHIHJlZ2lzdGVycw0KPj4gKwkgKi8N Cj4+ICsJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNF X01FTSwgInhoY2kiKTsNCj4+ICsJaWYgKCFyZXMpDQo+PiArCQlyZXR1cm4gLUVOWElPOw0KPj4g Kw0KPj4gKwljZG5zLT54aGNpX3Jlc1sxXSA9ICpyZXM7DQo+PiArDQo+PiArCXJlcyA9IHBsYXRm b3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJkZXYiKTsNCj4+ ICsJcmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7DQo+PiArCWlmIChJU19F UlIocmVncykpDQo+PiArCQlyZXR1cm4gUFRSX0VSUihyZWdzKTsNCj4+ICsJY2Rucy0+ZGV2X3Jl Z3MJPSByZWdzOw0KPj4gKw0KPj4gKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1l KHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAib3RnIik7DQo+PiArCWlmICghcmVzKQ0KPj4gKwkJcmV0 dXJuIC1FTlhJTzsNCj4+ICsNCj4+ICsJY2Rucy0+b3RnX3JlcyA9ICpyZXM7DQo+PiArDQo+PiAr CW11dGV4X2luaXQoJmNkbnMtPm11dGV4KTsNCj4+ICsNCj4+ICsJY2Rucy0+cGh5ID0gZGV2bV9w aHlfb3B0aW9uYWxfZ2V0KGRldiwgImNkbnMzLHVzYnBoeSIpOw0KPj4gKwlpZiAoSVNfRVJSKGNk bnMtPnBoeSkpDQo+PiArCQlyZXR1cm4gUFRSX0VSUihjZG5zLT5waHkpOw0KPj4gKw0KPj4gKwlw aHlfaW5pdChjZG5zLT5waHkpOw0KPj4gKw0KPj4gKwlJTklUX1dPUksoJmNkbnMtPnJvbGVfc3dp dGNoX3dxLCBjZG5zM19yb2xlX3N3aXRjaCk7DQo+PiArDQo+PiArCXJldCA9IGNkbnMzX2RyZF9p bml0KGNkbnMpOw0KPj4gKwlpZiAocmV0KQ0KPj4gKwkJZ290byBlcnI7DQo+PiArDQo+PiArCXJl dCA9IGNkbnMzX2NvcmVfaW5pdF9yb2xlKGNkbnMpOw0KPj4gKwlpZiAocmV0KQ0KPj4gKwkJZ290 byBlcnI7DQo+PiArDQo+PiArCWNkbnMzX2RlYnVnZnNfaW5pdChjZG5zKTsNCj4+ICsJZGV2aWNl X3NldF93YWtldXBfY2FwYWJsZShkZXYsIHRydWUpOw0KPj4gKwlwbV9ydW50aW1lX3NldF9hY3Rp dmUoZGV2KTsNCj4+ICsJcG1fcnVudGltZV9lbmFibGUoZGV2KTsNCj4+ICsNCj4+ICsJLyoNCj4+ ICsJICogVGhlIGNvbnRyb2xsZXIgbmVlZHMgbGVzcyB0aW1lIGJldHdlZW4gYnVzIGFuZCBjb250 cm9sbGVyIHN1c3BlbmQsDQo+PiArCSAqIGFuZCB3ZSBhbHNvIG5lZWRzIGEgc21hbGwgZGVsYXkg dG8gYXZvaWQgZnJlcXVlbnRseSBlbnRlcmluZyBsb3cNCj4+ICsJICogcG93ZXIgbW9kZS4NCj4+ ICsJICovDQo+PiArCXBtX3J1bnRpbWVfc2V0X2F1dG9zdXNwZW5kX2RlbGF5KGRldiwgMjApOw0K Pj4gKwlwbV9ydW50aW1lX21hcmtfbGFzdF9idXN5KGRldik7DQo+PiArCXBtX3J1bnRpbWVfdXNl X2F1dG9zdXNwZW5kKGRldik7DQo+PiArCWRldl9kYmcoZGV2LCAiQ2FkZW5jZSBVU0IzIGNvcmU6 IHByb2JlIHN1Y2NlZWRcbiIpOw0KPj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ICsNCj4+ICtlcnI6 DQo+PiArCXBoeV9leGl0KGNkbnMtPnBoeSk7DQo+PiArCXJldHVybiByZXQ7DQo+PiArfQ0KPj4g Kw0KPj4gKy8qKg0KPj4gKyAqIGNkbnMzX3JlbW92ZSAtIHVuYmluZCBkcmQgZHJpdmVyIGFuZCBj bGVhbiB1cA0KPj4gKyAqIEBwZGV2OiBQb2ludGVyIHRvIExpbnV4IHBsYXRmb3JtIGRldmljZQ0K Pj4gKyAqDQo+PiArICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3RoZXJ3aXNlIG5lZ2F0aXZlIGVy cm5vDQo+PiArICovDQo+PiArc3RhdGljIGludCBjZG5zM19yZW1vdmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldikNCj4+ICt7DQo+PiArCXN0cnVjdCBjZG5zMyAqY2RucyA9IHBsYXRmb3Jt X2dldF9kcnZkYXRhKHBkZXYpOw0KPj4gKw0KPj4gKwlwbV9ydW50aW1lX2dldF9zeW5jKCZwZGV2 LT5kZXYpOw0KPj4gKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7DQo+PiArCXBtX3J1 bnRpbWVfcHV0X25vaWRsZSgmcGRldi0+ZGV2KTsNCj4NCj5JJ20gbm90IHN1cmUgaWYgdGhpcyBp cyBoYW5kbGVkIHJpZ2h0Lg0KPllvdSBhcmUgc3RpbGwgYWNjZXNzaW5nIHRoZSBkZXZpY2UgaW4g YmVsb3cgY25kczNfKigpIGNhbGxzLg0KPg0KPj4gKwljZG5zM19kZWJ1Z2ZzX2V4aXQoY2Rucyk7 DQo+PiArCWNkbnMzX2V4aXRfcm9sZXMoY2Rucyk7PiArCXBoeV9leGl0KGNkbnMtPnBoeSk7DQo+ DQo+SXMgdGhlIGRldmljZSBpcyBpbiBydW50aW1lIHN1c3BlbmRlZCBzdGF0ZSBhdCB0aGlzIHBv aW50Pw0KPg0KPj4gKwlyZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArI2lmZGVmIENPTkZJR19P Rg0KPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX2NkbnMzX21hdGNoW10g PSB7DQo+PiArCXsgLmNvbXBhdGlibGUgPSAiY2Rucyx1c2IzLTEuMC4wIiB9LA0KPj4gKwl7IC5j b21wYXRpYmxlID0gImNkbnMsdXNiMy0xLjAuMSIgfSwNCj4+ICsJeyB9LA0KPj4gK307DQo+PiAr TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgb2ZfY2RuczNfbWF0Y2gpOw0KPj4gKyNlbmRpZg0KPj4g Kw0KPj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGNkbnMzX2RyaXZlciA9IHsNCj4+ ICsJLnByb2JlCQk9IGNkbnMzX3Byb2JlLA0KPj4gKwkucmVtb3ZlCQk9IGNkbnMzX3JlbW92ZSwN Cj4+ICsJLmRyaXZlcgkJPSB7DQo+PiArCQkubmFtZQk9ICJjZG5zLXVzYjMiLA0KPj4gKwkJLm9m X21hdGNoX3RhYmxlCT0gb2ZfbWF0Y2hfcHRyKG9mX2NkbnMzX21hdGNoKSwNCj4+ICsJfSwNCj4+ ICt9Ow0KPj4gKw0KPj4gK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoY2RuczNfZHJpdmVyKTsNCj4+ ICsNCj4+ICtNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmNkbnMzIik7DQo+PiArTU9EVUxFX0FVVEhP UigiUGF3ZWwgTGFzemN6YWsgPHBhd2VsbEBjYWRlbmNlLmNvbT4iKTsNCj4+ICtNT0RVTEVfTElD RU5TRSgiR1BMIHYyIik7DQo+PiArTU9EVUxFX0RFU0NSSVBUSU9OKCJDYWRlbmNlIFVTQjMgRFJE IENvbnRyb2xsZXIgRHJpdmVyIik7DQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2RuczMv Y29yZS5oIGIvZHJpdmVycy91c2IvY2RuczMvY29yZS5oDQo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0 NA0KPj4gaW5kZXggMDAwMDAwMDAwMDAwLi5mYjRiMzkyMDYxNTgNCj4+IC0tLSAvZGV2L251bGwN Cj4+ICsrKyBiL2RyaXZlcnMvdXNiL2NkbnMzL2NvcmUuaA0KPj4gQEAgLTAsMCArMSwxMTYgQEAN Cj4+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KPj4gKy8qDQo+PiAr ICogQ2FkZW5jZSBVU0JTUyBEUkQgSGVhZGVyIEZpbGUuDQo+PiArICoNCj4+ICsgKiBDb3B5cmln aHQgKEMpIDIwMTctMjAxOCBOWFANCj4+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTggQ2FkZW5jZS4N Cj4+ICsgKg0KPj4gKyAqIEF1dGhvcnM6IFBldGVyIENoZW4gPHBldGVyLmNoZW5AbnhwLmNvbT4N Cj4+ICsgKiAgICAgICAgICBQYXdlbCBMYXN6Y3phayA8cGF3ZWxsQGNhZGVuY2UuY29tPg0KPj4g KyAqLw0KPj4gKyNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+DQo+PiArDQo+PiArI2lmbmRlZiBf X0xJTlVYX0NETlMzX0NPUkVfSA0KPj4gKyNkZWZpbmUgX19MSU5VWF9DRE5TM19DT1JFX0gNCj4+ ICsNCj4+ICtzdHJ1Y3QgY2RuczM7DQo+PiArZW51bSBjZG5zM19yb2xlcyB7DQo+PiArCUNETlMz X1JPTEVfSE9TVCA9IDAsDQo+PiArCUNETlMzX1JPTEVfR0FER0VULA0KPj4gKwlDRE5TM19ST0xF X0VORCwNCj4+ICt9Ow0KPj4gKw0KPj4gKy8qKg0KPj4gKyAqIHN0cnVjdCBjZG5zM19yb2xlX2Ry aXZlciAtIGhvc3QvZ2FkZ2V0IHJvbGUgZHJpdmVyDQo+PiArICogQHN0YXJ0OiBzdGFydCB0aGlz IHJvbGUNCj4+ICsgKiBAc3RvcDogc3RvcCB0aGlzIHJvbGUNCj4+ICsgKiBAc3VzcGVuZDogc3Vz cGVuZCBjYWxsYmFjayBmb3IgdGhpcyByb2xlDQo+PiArICogQHJlc3VtZTogcmVzdW1lIGNhbGxi YWNrIGZvciB0aGlzIHJvbGUNCj4+ICsgKiBAaXJxOiBpcnEgaGFuZGxlciBmb3IgdGhpcyByb2xl DQo+PiArICogQG5hbWU6IHJvbGUgbmFtZSBzdHJpbmcgKGhvc3QvZ2FkZ2V0KQ0KPj4gKyAqIEBz dGF0ZTogY3VycmVudCBzdGF0ZQ0KPj4gKyAqLw0KPj4gK3N0cnVjdCBjZG5zM19yb2xlX2RyaXZl ciB7DQo+PiArCWludCAoKnN0YXJ0KShzdHJ1Y3QgY2RuczMgKmNkbnMpOw0KPj4gKwl2b2lkICgq c3RvcCkoc3RydWN0IGNkbnMzICpjZG5zKTsNCj4+ICsJaW50ICgqc3VzcGVuZCkoc3RydWN0IGNk bnMzICpjZG5zLCBib29sIGRvX3dha2V1cCk7DQo+PiArCWludCAoKnJlc3VtZSkoc3RydWN0IGNk bnMzICpjZG5zLCBib29sIGhpYmVybmF0ZWQpOw0KPj4gKwljb25zdCBjaGFyICpuYW1lOw0KPj4g KyNkZWZpbmUgQ0ROUzNfUk9MRV9TVEFURV9JTkFDVElWRQkwDQo+PiArI2RlZmluZSBDRE5TM19S T0xFX1NUQVRFX0FDVElWRQkJMQ0KPj4gKwlpbnQgc3RhdGU7DQo+PiArfTsNCj4+ICsNCj4+ICsj ZGVmaW5lIENETlMzX1hIQ0lfUkVTT1VSQ0VTX05VTQkyDQo+PiArLyoqDQo+PiArICogc3RydWN0 IGNkbnMzIC0gUmVwcmVzZW50YXRpb24gb2YgQ2FkZW5jZSBVU0IzIERSRCBjb250cm9sbGVyLg0K Pj4gKyAqIEBkZXY6IHBvaW50ZXIgdG8gQ2FkZW5jZSBkZXZpY2Ugc3RydWN0DQo+PiArICogQHho Y2lfcmVnczogcG9pbnRlciB0byBiYXNlIG9mIHhoY2kgcmVnaXN0ZXJzDQo+PiArICogQHhoY2lf cmVzOiB0aGUgcmVzb3VyY2UgZm9yIHhoY2kNCj4+ICsgKiBAZGV2X3JlZ3M6IHBvaW50ZXIgdG8g YmFzZSBvZiBkZXYgcmVnaXN0ZXJzDQo+PiArICogQG90Z19yZWdzOiBwb2ludGVyIHRvIGJhc2Ug b2Ygb3RnIHJlZ2lzdGVycw0KPj4gKyAqIEBpcnE6IGlycSBudW1iZXIgZm9yIGNvbnRyb2xsZXIN Cj4+ICsgKiBAcm9sZXM6IGFycmF5IG9mIHN1cHBvcnRlZCByb2xlcyBmb3IgdGhpcyBjb250cm9s bGVyDQo+PiArICogQHJvbGU6IGN1cnJlbnQgcm9sZQ0KPj4gKyAqIEBob3N0X2RldjogdGhlIGNo aWxkIGhvc3QgZGV2aWNlIHBvaW50ZXIgZm9yIGNkbnMzIGNvcmUNCj4+ICsgKiBAZ2FkZ2V0X2Rl djogdGhlIGNoaWxkIGdhZGdldCBkZXZpY2UgcG9pbnRlciBmb3IgY2RuczMgY29yZQ0KPj4gKyAq IEB1c2I6IHBoeSBmb3IgdGhpcyBjb250cm9sbGVyDQo+PiArICogQHJvbGVfc3dpdGNoX3dxOiB3 b3JrIHF1ZXVlIGl0ZW0gZm9yIHJvbGUgc3dpdGNoDQo+PiArICogQGluX2xwbTogdGhlIGNvbnRy b2xsZXIgaW4gbG93IHBvd2VyIG1vZGUNCj4+ICsgKiBAd2FrZXVwX2ludDogdGhlIHdha2V1cCBp bnRlcnJ1cHQNCj4+ICsgKiBAbXV0ZXg6IHRoZSBtdXRleCBmb3IgY29uY3VycmVudCBjb2RlIGF0 IGRyaXZlcg0KPj4gKyAqIEBkcl9tb2RlOiBzdXBwb3J0ZWQgbW9kZSBvZiBvcGVyYXRpb24gaXQg Y2FuIGJlIG9ubHkgSG9zdCwgb25seSBEZXZpY2UNCj4+ICsgKiAgICAgICAgICAgb3IgT1RHIG1v ZGUgdGhhdCBhbGxvdyB0byBzd2l0Y2ggYmV0d2VlbiBEZXZpY2UgYW5kIEhvc3QgbW9kZS4NCj4+ ICsgKiAgICAgICAgICAgVGhpcyBmaWVsZCBiYXNlZCBvbiBmaXJtd2FyZSBzZXR0aW5nLCBrZXJu ZWwgY29uZmlndXJhdGlvbg0KPj4gKyAqICAgICAgICAgICBhbmQgaGFyZHdhcmUgY29uZmlndXJh dGlvbi4NCj4+ICsgKiBAY3VycmVudF9kcl9tb2RlOiBjdXJyZW50IG1vZGUgb2Ygb3BlcmF0aW9u IHdoZW4gaW4gZHVhbC1yb2xlIG1vZGUNCj4+ICsgKiBAZGVzaXJlZF9kcl9tb2RlOiBkZXNpcmVk IG1vZGUgb2Ygb3BlcmF0aW9uIHdoZW4gaW4gZHVhbC1yb2xlIG1vZGUuDQo+PiArICogICAgICAg ICAgIFRoaXMgdmFsdWUgY2FuIGJlIGNoYW5nZWQgZHVyaW5nIHJ1bnRpbWUuDQo+PiArICogICAg ICAgICAgIEF2YWlsYWJsZSBvcHRpb25zIGRlcGVuZHMgb24gIGRyX21vZGU6DQo+PiArICogICAg ICAgICAgIGRyX21vZGUgICAgICAgICAgICAgICAgIHwgIGRlc2lyZWRfZHJfbW9kZSBhbmQgY3Vy cmVudF9kcl9tb2RlDQo+PiArICogICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4+ICsgKiAgICAgICAgICAg VVNCX0RSX01PREVfSE9TVCAgICAgICAgfCBvbmx5IFVTQl9EUl9NT0RFX0hPU1QNCj4+ICsgKiAg ICAgICAgICAgVVNCX0RSX01PREVfUEVSSVBIRVJBTCAgfCBvbmx5IFVTQl9EUl9NT0RFX1BFUklQ SEVSQUwNCj4+ICsgKiAgICAgICAgICAgVVNCX0RSX01PREVfT1RHICAgICAgICAgfCBvbmx5IFVT Ql9EUl9NT0RFX0hPU1QNCj4+ICsgKiAgICAgICAgICAgVVNCX0RSX01PREVfT1RHICAgICAgICAg fCBvbmx5IFVTQl9EUl9NT0RFX1BFUklQSEVSQUwNCj4+ICsgKiAgICAgICAgICAgVVNCX0RSX01P REVfT1RHICAgICAgICAgfCBVU0JfRFJfTU9ERV9PVEcNCj4NCj5MYXN0IDMgbGluZXMgc2hvdWxk IGJlIHJlZHVjZWQgdG8NCj4NCj4JCVVTQl9EUl9NT0RFX09URyAgICAgICAgIHwgVVNCX0RSX01P REVfT1RHLCBVU0JfRFJfTU9ERV9IT1NUIG9yDQo+CQkJCQl8IFVTQl9EUl9NT0RFX1BFUklQSEVS QUwNCj4NCg0KT2suDQoNCj4+ICsgKg0KPj4gKyAqICAgICAgICAgICBEZXNpcmVkX2RyX3JvbGUg Y2FuIGJlIGNoYW5nZWQgYnkgbWVhbnMgb2YgZGVidWdmcy4NCj4+ICsgKiBAcm9vdDogZGVidWdm cyByb290IGZvbGRlciBwb2ludGVyDQo+PiArICogQGRlYnVnX2Rpc2FibGU6DQo+PiArICovDQo+ PiArc3RydWN0IGNkbnMzIHsNCj4+ICsJc3RydWN0IGRldmljZQkJCSpkZXY7DQo+PiArCXZvaWQg X19pb21lbQkJCSp4aGNpX3JlZ3M7DQo+PiArCXN0cnVjdCByZXNvdXJjZQkJCXhoY2lfcmVzW0NE TlMzX1hIQ0lfUkVTT1VSQ0VTX05VTV07DQo+PiArCXN0cnVjdCBjZG5zM191c2JfcmVncyBfX2lv bWVtCSpkZXZfcmVnczsNCj4+ICsNCj4+ICsJc3RydWN0IHJlc291cmNlCQkJb3RnX3JlczsNCj4+ ICsJc3RydWN0IGNkbnMzX290Z19sZWdhY3lfcmVncwkqb3RnX3YwX3JlZ3M7DQo+PiArCXN0cnVj dCBjZG5zM19vdGdfcmVncwkJKm90Z192MV9yZWdzOw0KPj4gKwlzdHJ1Y3QgY2RuczNfb3RnX2Nv bW1vbl9yZWdzCSpvdGdfcmVnczsNCj4+ICsjZGVmaW5lIENETlMzX0NPTlRST0xMRVJfVjAJMA0K Pj4gKyNkZWZpbmUgQ0ROUzNfQ09OVFJPTExFUl9WMQkxDQo+PiArCXUzMgkJCQl2ZXJzaW9uOw0K Pj4gKw0KPj4gKwlpbnQJCQkJaXJxOw0KPj4gKwlzdHJ1Y3QgY2RuczNfcm9sZV9kcml2ZXIJKnJv bGVzW0NETlMzX1JPTEVfRU5EXTsNCj4+ICsJZW51bSBjZG5zM19yb2xlcwkJcm9sZTsNCj4+ICsJ c3RydWN0IHBsYXRmb3JtX2RldmljZQkJKmhvc3RfZGV2Ow0KPj4gKwlzdHJ1Y3QgY2RuczNfZGV2 aWNlCQkqZ2FkZ2V0X2RldjsNCj4+ICsJc3RydWN0IHBoeQkJCSpwaHk7DQo+PiArCXN0cnVjdCB3 b3JrX3N0cnVjdAkJcm9sZV9zd2l0Y2hfd3E7DQo+PiArCWludAkJCQlpbl9scG06MTsNCj4+ICsJ aW50CQkJCXdha2V1cF9pbnQ6MTsNCj4+ICsJLyogbXV0ZXh0IHVzZWQgaW4gd29ya3F1ZXVlKi8N Cj4+ICsJc3RydWN0IG11dGV4CQkJbXV0ZXg7DQo+PiArCWVudW0gdXNiX2RyX21vZGUJCWRyX21v ZGU7DQo+PiArCWVudW0gdXNiX2RyX21vZGUJCWN1cnJlbnRfZHJfbW9kZTsNCj4+ICsJZW51bSB1 c2JfZHJfbW9kZQkJZGVzaXJlZF9kcl9tb2RlOw0KPj4gKwlzdHJ1Y3QgZGVudHJ5CQkJKnJvb3Q7 DQo+PiArCWludAkJCQlkZWJ1Z19kaXNhYmxlOjE7DQo+PiArfTsNCj4+ICsNCj4+ICt2b2lkIGNk bnMzX3JvbGVfc3RvcChzdHJ1Y3QgY2RuczMgKmNkbnMpOw0KPj4gKw0KPj4gKyNlbmRpZiAvKiBf X0xJTlVYX0NETlMzX0NPUkVfSCAqLw0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NkbnMz L2RlYnVnLmggYi9kcml2ZXJzL3VzYi9jZG5zMy9kZWJ1Zy5oDQo+PiBuZXcgZmlsZSBtb2RlIDEw MDY0NA0KPj4gaW5kZXggMDAwMDAwMDAwMDAwLi4xOTI5ZWRiM2E1MjENCj4+IC0tLSAvZGV2L251 bGwNCj4+ICsrKyBiL2RyaXZlcnMvdXNiL2NkbnMzL2RlYnVnLmgNCj4+IEBAIC0wLDAgKzEsMTY4 IEBADQo+PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8NCj4+ICsvKg0K Pj4gKyAqIENhZGVuY2UgVVNCU1MgRFJEIERyaXZlci4NCj4+ICsgKiBEZWJ1ZyBoZWFkZXIgZmls ZS4NCj4+ICsgKg0KPj4gKyAqIENvcHlyaWdodCAoQykgMjAxOCBDYWRlbmNlLg0KPj4gKyAqDQo+ PiArICogQXV0aG9yOiBQYXdlbCBMYXN6Y3phayA8cGF3ZWxsQGNhZGVuY2UuY29tPg0KPj4gKyAq Lw0KPj4gKyNpZm5kZWYgX19MSU5VWF9DRE5TM19ERUJVRw0KPj4gKyNkZWZpbmUgX19MSU5VWF9D RE5TM19ERUJVRw0KPj4gKw0KPj4gKyNpbmNsdWRlICJjb3JlLmgiDQo+PiArDQo+PiArc3RhdGlj IGlubGluZSBjaGFyICpjZG5zM19kZWNvZGVfdXNiX2lycShjaGFyICpzdHIsDQo+PiArCQkJCQkg ZW51bSB1c2JfZGV2aWNlX3NwZWVkIHNwZWVkLA0KPj4gKwkJCQkJIHUzMiB1c2JfaXN0cykNCj4+ ICt7DQo+PiArCWludCByZXQ7DQo+PiArDQo+PiArCXJldCA9IHNwcmludGYoc3RyLCAiSVJRICUw OHggPSAiLCB1c2JfaXN0cyk7DQo+PiArDQo+PiArCWlmICh1c2JfaXN0cyAmIChVU0JfSVNUU19D T04ySSB8IFVTQl9JU1RTX0NPTkkpKSB7DQo+PiArCQlyZXQgKz0gc3ByaW50ZihzdHIgKyByZXQs ICJDb25uZWN0aW9uICVzXG4iLA0KPj4gKwkJCSAgICAgICB1c2Jfc3BlZWRfc3RyaW5nKHNwZWVk KSk7DQo+PiArCX0NCj4+ICsJaWYgKHVzYl9pc3RzICYgVVNCX0lTVFNfQ09OMkkgfHwgdXNiX2lz dHMgJiBVU0JfSVNUU19DT05JKQ0KPj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAiRGlz Y29ubmVjdGlvbiAiKTsNCj4+ICsJaWYgKHVzYl9pc3RzICYgVVNCX0lTVFNfTDJFTlRJKQ0KPj4g KwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAic3VzcGVuZGVkICIpOw0KPj4gKw0KPj4gKwlp ZiAodXNiX2lzdHMgJiBVU0JfSVNUU19MMkVYVEkpDQo+PiArCQlyZXQgKz0gc3ByaW50ZihzdHIg KyByZXQsICJMMiBleGl0ICIpOw0KPj4gKwlpZiAodXNiX2lzdHMgJiBVU0JfSVNUU19VM0VYVEkp DQo+PiArCQlyZXQgKz0gc3ByaW50ZihzdHIgKyByZXQsICJVMyBleGl0ICIpOw0KPj4gKwlpZiAo dXNiX2lzdHMgJiBVU0JfSVNUU19VV1JFU0kpDQo+PiArCQlyZXQgKz0gc3ByaW50ZihzdHIgKyBy ZXQsICJXYXJtIFJlc2V0ICIpOw0KPj4gKwlpZiAodXNiX2lzdHMgJiBVU0JfSVNUU19VSFJFU0kp DQo+PiArCQlyZXQgKz0gc3ByaW50ZihzdHIgKyByZXQsICJIb3QgUmVzZXQgIik7DQo+PiArCWlm ICh1c2JfaXN0cyAmIFVTQl9JU1RTX1UyUkVTSSkNCj4+ICsJCXJldCArPSBzcHJpbnRmKHN0ciAr IHJldCwgIlJlc2V0Iik7DQo+PiArDQo+PiArCXJldHVybiBzdHI7DQo+PiArfQ0KPj4gKw0KPj4g K3N0YXRpYyBpbmxpbmUgIGNoYXIgKmNkbnMzX2RlY29kZV9lcF9pcnEoY2hhciAqc3RyLA0KPj4g KwkJCQkJIHUzMiBlcF9zdHMsDQo+PiArCQkJCQkgY29uc3QgY2hhciAqZXBfbmFtZSkNCj4+ICt7 DQo+PiArCWludCByZXQ7DQo+PiArDQo+PiArCXJldCA9IHNwcmludGYoc3RyLCAiSVJRIGZvciAl czogJTA4eCAiLCBlcF9uYW1lLCBlcF9zdHMpOw0KPj4gKw0KPj4gKwlpZiAoZXBfc3RzICYgRVBf U1RTX1NFVFVQKQ0KPj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAiU0VUVVAgIik7DQo+ PiArCWlmIChlcF9zdHMgJiBFUF9TVFNfSU9DKQ0KPj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsg cmV0LCAiSU9DICIpOw0KPj4gKwlpZiAoZXBfc3RzICYgRVBfU1RTX0lTUCkNCj4+ICsJCXJldCAr PSBzcHJpbnRmKHN0ciArIHJldCwgIklTUCAiKTsNCj4+ICsJaWYgKGVwX3N0cyAmIEVQX1NUU19E RVNDTUlTKQ0KPj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAiREVTQ01JUyAiKTsNCj4+ ICsJaWYgKGVwX3N0cyAmIEVQX1NUU19TVFJFQU1SKQ0KPj4gKwkJcmV0ICs9IHNwcmludGYoc3Ry ICsgcmV0LCAiU1RSRUFNUiAiKTsNCj4+ICsJaWYgKGVwX3N0cyAmIEVQX1NUU19NRF9FWElUKQ0K Pj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAiTURfRVhJVCAiKTsNCj4+ICsJaWYgKGVw X3N0cyAmIEVQX1NUU19UUkJFUlIpDQo+PiArCQlyZXQgKz0gc3ByaW50ZihzdHIgKyByZXQsICJU UkJFUlIgIik7DQo+PiArCWlmIChlcF9zdHMgJiBFUF9TVFNfTlJEWSkNCj4+ICsJCXJldCArPSBz cHJpbnRmKHN0ciArIHJldCwgIk5SRFkgIik7DQo+PiArCWlmIChlcF9zdHMgJiBFUF9TVFNfUFJJ TUUpDQo+PiArCQlyZXQgKz0gc3ByaW50ZihzdHIgKyByZXQsICJQUklNRSAiKTsNCj4+ICsJaWYg KGVwX3N0cyAmIEVQX1NUU19TSURFUlIpDQo+PiArCQlyZXQgKz0gc3ByaW50ZihzdHIgKyByZXQs ICJTSURFUlJUICIpOw0KPj4gKwlpZiAoZXBfc3RzICYgRVBfU1RTX09VVFNNTSkNCj4+ICsJCXJl dCArPSBzcHJpbnRmKHN0ciArIHJldCwgIk9VVFNNTSAiKTsNCj4+ICsJaWYgKGVwX3N0cyAmIEVQ X1NUU19JU09FUlIpDQo+PiArCQlyZXQgKz0gc3ByaW50ZihzdHIgKyByZXQsICJJU09FUlIgIik7 DQo+PiArCWlmIChlcF9zdHMgJiBFUF9TVFNfSU9UKQ0KPj4gKwkJcmV0ICs9IHNwcmludGYoc3Ry ICsgcmV0LCAiSU9UICIpOw0KPj4gKw0KPj4gKwlyZXR1cm4gc3RyOw0KPj4gK30NCj4+ICsNCj4+ ICtzdGF0aWMgaW5saW5lIGNoYXIgKmNkbnMzX2RlY29kZV9lcHhfaXJxKGNoYXIgKnN0ciwNCj4+ ICsJCQkJCSBjaGFyICplcF9uYW1lLA0KPj4gKwkJCQkJIHUzMiBlcF9zdHMpDQo+PiArew0KPj4g KwlyZXR1cm4gY2RuczNfZGVjb2RlX2VwX2lycShzdHIsIGVwX3N0cywgZXBfbmFtZSk7DQo+PiAr fQ0KPj4gKw0KPj4gK3N0YXRpYyBpbmxpbmUgY2hhciAqY2RuczNfZGVjb2RlX2VwMF9pcnEoY2hh ciAqc3RyLA0KPj4gKwkJCQkJIGludCBkaXIsDQo+PiArCQkJCQkgdTMyIGVwX3N0cykNCj4+ICt7 DQo+PiArCXJldHVybiBjZG5zM19kZWNvZGVfZXBfaXJxKHN0ciwgZXBfc3RzLA0KPj4gKwkJCQkg ICBkaXIgPyAiZXAwSU4iIDogImVwME9VVCIpOw0KPj4gK30NCj4+ICsNCj4+ICsvKioNCj4+ICsg KiBEZWJ1ZyBhIHRyYW5zZmVyIHJpbmcuDQo+PiArICoNCj4+ICsgKiBQcmludHMgb3V0IGFsbCBU UkJzIGluIHRoZSBlbmRwb2ludCByaW5nLCBldmVuIHRob3NlIGFmdGVyIHRoZSBMaW5rIFRSQi4N Cj4+ICsgKi4NCj4+ICsgKi8NCj4+ICtzdGF0aWMgaW5saW5lIGNoYXIgKmNkbnMzX2RiZ19yaW5n KHN0cnVjdCBjZG5zM19lbmRwb2ludCAqcHJpdl9lcCwNCj4+ICsJCQkJICAgc3RydWN0IGNkbnMz X3RyYiAqcmluZywgY2hhciAqc3RyKQ0KPj4gK3sNCj4+ICsJZG1hX2FkZHJfdCBhZGRyID0gcHJp dl9lcC0+dHJiX3Bvb2xfZG1hOw0KPj4gKwlzdHJ1Y3QgY2RuczNfdHJiICp0cmI7DQo+PiArCWlu dCB0cmJfcGVyX3NlY3RvcjsNCj4+ICsJaW50IHJldCA9IDA7DQo+PiArCWludCBpOw0KPj4gKw0K Pj4gKwl0cmJfcGVyX3NlY3RvciA9IEdFVF9UUkJTX1BFUl9TRUdNRU5UKHByaXZfZXAtPnR5cGUp Ow0KPj4gKw0KPj4gKwl0cmIgPSAmcHJpdl9lcC0+dHJiX3Bvb2xbcHJpdl9lcC0+ZGVxdWV1ZV07 DQo+PiArCXJldCArPSBzcHJpbnRmKHN0ciArIHJldCwgIlxuXHRcdFJpbmcgY29udGVudHMgZm9y ICVzOiIsIHByaXZfZXAtPm5hbWUpOw0KPj4gKw0KPj4gKwlyZXQgKz0gc3ByaW50ZihzdHIgKyBy ZXQsDQo+PiArCQkgICAgICAgIlxuXHRcdFJpbmcgZGVxIGluZGV4OiAlZCwgdHJiOiAlcCAodmly dCksIDB4JWxseCAoZG1hKVxuIiwNCj4+ICsJCSAgICAgICBwcml2X2VwLT5kZXF1ZXVlLCB0cmIs DQo+PiArCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyljZG5zM190cmJfdmlydF90b19kbWEo cHJpdl9lcCwgdHJiKSk7DQo+PiArDQo+PiArCXRyYiA9ICZwcml2X2VwLT50cmJfcG9vbFtwcml2 X2VwLT5lbnF1ZXVlXTsNCj4+ICsJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LA0KPj4gKwkJICAg ICAgICJcdFx0UmluZyBlbnEgaW5kZXg6ICVkLCB0cmI6ICVwICh2aXJ0KSwgMHglbGx4IChkbWEp XG4iLA0KPj4gKwkJICAgICAgIHByaXZfZXAtPmVucXVldWUsIHRyYiwNCj4+ICsJCSAgICAgICAo dW5zaWduZWQgbG9uZyBsb25nKWNkbnMzX3RyYl92aXJ0X3RvX2RtYShwcml2X2VwLCB0cmIpKTsN Cj4+ICsNCj4+ICsJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LA0KPj4gKwkJICAgICAgICJcdFx0 ZnJlZSB0cmJzOiAlZCwgQ0NTPSVkLCBQQ1M9JWRcbiIsDQo+PiArCQkgICAgICAgcHJpdl9lcC0+ ZnJlZV90cmJzLCBwcml2X2VwLT5jY3MsIHByaXZfZXAtPnBjcyk7DQo+PiArDQo+PiArCWlmICh0 cmJfcGVyX3NlY3RvciA+IFRSQlNfUEVSX1NFR01FTlQpDQo+PiArCQl0cmJfcGVyX3NlY3RvciA9 IFRSQlNfUEVSX1NFR01FTlQ7DQo+PiArDQo+PiArCWlmICh0cmJfcGVyX3NlY3RvciA+IFRSQlNf UEVSX1NFR01FTlQpIHsNCj4+ICsJCXNwcmludGYoc3RyICsgcmV0LCAiXHRcdFRvIGJpZyB0cmFu c2ZlciByaW5nICVkXG4iLA0KPj4gKwkJCXRyYl9wZXJfc2VjdG9yKTsNCj4+ICsJCXJldHVybiBz dHI7DQo+PiArCX0NCj4+ICsNCj4+ICsJZm9yIChpID0gMDsgaSA8IHRyYl9wZXJfc2VjdG9yOyAr K2kpIHsNCj4+ICsJCXRyYiA9ICZyaW5nW2ldOw0KPj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsg cmV0LA0KPj4gKwkJCSJcdFx0QCVwYWQgJTA4eCAlMDh4ICUwOHhcbiIsICZhZGRyLA0KPj4gKwkJ CWxlMzJfdG9fY3B1KHRyYi0+YnVmZmVyKSwNCj4+ICsJCQlsZTMyX3RvX2NwdSh0cmItPmxlbmd0 aCksDQo+PiArCQkJbGUzMl90b19jcHUodHJiLT5jb250cm9sKSk7DQo+PiArCQlhZGRyICs9IHNp emVvZigqdHJiKTsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlyZXR1cm4gc3RyOw0KPj4gK30NCj4+ICsN Cj4+ICt2b2lkIGNkbnMzX2RiZyhzdHJ1Y3QgY2RuczNfZGV2aWNlICpwcml2X2RldiwgY29uc3Qg Y2hhciAqZm10LCAuLi4pOw0KPj4gKw0KPj4gKyNpZmRlZiBDT05GSUdfREVCVUdfRlMNCj4+ICt2 b2lkIGNkbnMzX2RlYnVnZnNfaW5pdChzdHJ1Y3QgY2RuczMgKmNkbnMpOw0KPj4gK3ZvaWQgY2Ru czNfZGVidWdmc19leGl0KHN0cnVjdCBjZG5zMyAqY2Rucyk7DQo+PiArI2Vsc2UNCj4+ICt2b2lk IGNkbnMzX2RlYnVnZnNfaW5pdChzdHJ1Y3QgY2RuczMgKmNkbnMpOw0KPj4gK3sgIH0NCj4+ICt2 b2lkIGNkbnMzX2RlYnVnZnNfZXhpdChzdHJ1Y3QgY2RuczMgKmNkbnMpOw0KPj4gK3sgIH0NCj4+ ICsjZW5kaWYNCj4+ICsNCj4+ICsjZW5kaWYgLypfX0xJTlVYX0NETlMzX0RFQlVHKi8NCj4+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jZG5zMy9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL3VzYi9jZG5z My9kZWJ1Z2ZzLmMNCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+PiBpbmRleCAwMDAwMDAwMDAw MDAuLmQ4ZmNkOTBkMDViMw0KPj4gLS0tIC9kZXYvbnVsbA0KPj4gKysrIGIvZHJpdmVycy91c2Iv Y2RuczMvZGVidWdmcy5jDQo+PiBAQCAtMCwwICsxLDE2NCBAQA0KPj4gKy8vIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wDQo+PiArLyoNCj4+ICsgKiBDYWRlbmNlIFVTQlNTIERSRCBD b250cm9sbGVyIERlYnVnRlMgZmlsZXIuDQo+PiArICoNCj4+ICsgKiBDb3B5cmlnaHQgKEMpIDIw MTggQ2FkZW5jZS4NCj4+ICsgKg0KPj4gKyAqIEF1dGhvcjogUGF3ZWwgTGFzemN6YWsgPHBhd2Vs bEBjYWRlbmNlLmNvbT4NCj4+ICsgKi8NCj4+ICsNCj4+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMu aD4NCj4+ICsjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9z ZXFfZmlsZS5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+DQo+PiArDQo+PiArI2lu Y2x1ZGUgImNvcmUuaCINCj4+ICsjaW5jbHVkZSAiZ2FkZ2V0LmgiDQo+PiArI2luY2x1ZGUgImRy ZC5oIg0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgY2RuczNfbW9kZV9zaG93KHN0cnVjdCBzZXFfZmls ZSAqcywgdm9pZCAqdW51c2VkKQ0KPj4gK3sNCj4+ICsJc3RydWN0IGNkbnMzICpjZG5zID0gcy0+ cHJpdmF0ZTsNCj4+ICsNCj4+ICsJc3dpdGNoIChjZG5zLT5jdXJyZW50X2RyX21vZGUpIHsNCj4+ ICsJY2FzZSBVU0JfRFJfTU9ERV9IT1NUOg0KPj4gKwkJc2VxX3B1dHMocywgImhvc3RcbiIpOw0K Pj4gKwkJYnJlYWs7DQo+PiArCWNhc2UgVVNCX0RSX01PREVfUEVSSVBIRVJBTDoNCj4+ICsJCXNl cV9wdXRzKHMsICJkZXZpY2VcbiIpOw0KPj4gKwkJYnJlYWs7DQo+PiArCWNhc2UgVVNCX0RSX01P REVfT1RHOg0KPj4gKwkJc2VxX3B1dHMocywgIm90Z1xuIik7DQo+PiArCQlicmVhazsNCj4+ICsJ ZGVmYXVsdDoNCj4+ICsJCXNlcV9wdXRzKHMsICJVTktOT1dOIG1vZGVcbiIpOw0KPj4gKwl9DQo+ PiArDQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGNkbnMzX21v ZGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkNCj4+ICt7DQo+ PiArCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBjZG5zM19tb2RlX3Nob3csIGlub2RlLT5pX3By aXZhdGUpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgc3NpemVfdCBjZG5zM19tb2RlX3dyaXRl KHN0cnVjdCBmaWxlICpmaWxlLA0KPj4gKwkJCQljb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwNCj4+ ICsJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpDQo+PiArew0KPj4gKwlzdHJ1Y3Qgc2Vx X2ZpbGUJICpzID0gZmlsZS0+cHJpdmF0ZV9kYXRhOw0KPj4gKwlzdHJ1Y3QgY2RuczMgKmNkbnMg PSBzLT5wcml2YXRlOw0KPj4gKwl1MzIgbW9kZSA9IFVTQl9EUl9NT0RFX1VOS05PV047DQo+PiAr CWNoYXIgYnVmWzMyXTsNCj4+ICsNCj4+ICsJaWYgKGNvcHlfZnJvbV91c2VyKCZidWYsIHVidWYs IG1pbl90KHNpemVfdCwgc2l6ZW9mKGJ1ZikgLSAxLCBjb3VudCkpKQ0KPj4gKwkJcmV0dXJuIC1F RkFVTFQ7DQo+PiArDQo+PiArCWlmICghc3RybmNtcChidWYsICJob3N0IiwgNCkpIHsNCj4+ICsJ CWlmIChjZG5zLT5kcl9tb2RlID09IFVTQl9EUl9NT0RFX0hPU1QgfHwNCj4+ICsJCSAgICBjZG5z LT5kcl9tb2RlID09IFVTQl9EUl9NT0RFX09URykgew0KPj4gKwkJCW1vZGUgPSBVU0JfRFJfTU9E RV9IT1NUOw0KPj4gKwkJfQ0KPj4gKwl9DQo+PiArDQo+PiArCWlmICghc3RybmNtcChidWYsICJk ZXZpY2UiLCA2KSkNCj4+ICsJCWlmIChjZG5zLT5kcl9tb2RlID09IFVTQl9EUl9NT0RFX1BFUklQ SEVSQUwgfHwNCj4+ICsJCSAgICBjZG5zLT5kcl9tb2RlID09IFVTQl9EUl9NT0RFX09URykNCj4+ ICsJCQltb2RlID0gVVNCX0RSX01PREVfUEVSSVBIRVJBTDsNCj4+ICsNCj4+ICsJaWYgKCFzdHJu Y21wKGJ1ZiwgIm90ZyIsIDMpICYmIGNkbnMtPmRyX21vZGUgPT0gVVNCX0RSX01PREVfT1RHKQ0K Pj4gKwkJbW9kZSA9IFVTQl9EUl9NT0RFX09URzsNCj4+ICsNCj4+ICsJaWYgKG1vZGUgPT0gVVNC X0RSX01PREVfVU5LTk9XTikgew0KPj4gKwkJZGV2X2VycihjZG5zLT5kZXYsICJGYWlsZWQ6IGlu Y29ycmVjdCBtb2RlIHNldHRpbmdcbiIpOw0KPj4gKwkJcmV0dXJuIC1FRkFVTFQ7DQo+PiArCX0N Cj4+ICsNCj4+ICsJaWYgKGNkbnMtPmN1cnJlbnRfZHJfbW9kZSAhPSBtb2RlKSB7DQo+PiArCQlj ZG5zLT5kZXNpcmVkX2RyX21vZGUgPSBtb2RlOw0KPj4gKwkJY2Rucy0+ZGVidWdfZGlzYWJsZSA9 IDA7DQo+SW5zdGVhZCBvZiBmb3JjaW5nIGRlYnVnX2Rpc2FibGUgaGVyZSBtYXliZSB5b3UgaG91 bGQgY2hlY2sgaWYgaXQgaXMgc2V0DQo+YW5kIGNvbXBsYWluIHRoYXQgbW9kZSBjYW4ndCBiZSBj aGFuZ2VkIHdoZW4gZGVidWdfZGlzYWJsZSBpcyBzZXQ/DQoNCk9rLCBJIHdpbGwgY2hhbmdlIHRo aXMuIA0KPg0KPj4gKwkJY2RuczNfcm9sZV9zdG9wKGNkbnMpOw0KPj4gKwkJY2RuczNfZHJkX3Vw ZGF0ZV9tb2RlKGNkbnMpOw0KPg0KPk5lZWQgdG8gY2hlY2sgcmV0dXJuIHZhbHVlLg0KDQpPaywN Cg0KPg0KPj4gKwkJcXVldWVfd29yayhzeXN0ZW1fZnJlZXphYmxlX3dxLCAmY2Rucy0+cm9sZV9z d2l0Y2hfd3EpOw0KPj4gKwl9DQo+PiArDQo+PiArCXJldHVybiBjb3VudDsNCj4+ICt9DQo+PiAr DQo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2RuczNfbW9kZV9mb3Bz ID0gew0KPj4gKwkub3BlbgkJCT0gY2RuczNfbW9kZV9vcGVuLA0KPj4gKwkud3JpdGUJCQk9IGNk bnMzX21vZGVfd3JpdGUsDQo+PiArCS5yZWFkCQkJPSBzZXFfcmVhZCwNCj4+ICsJLmxsc2VlawkJ CT0gc2VxX2xzZWVrLA0KPj4gKwkucmVsZWFzZQkJPSBzaW5nbGVfcmVsZWFzZSwNCj4+ICt9Ow0K Pj4gKw0KPj4gK3N0YXRpYyBpbnQgY2RuczNfZGlzYWJsZV9zaG93KHN0cnVjdCBzZXFfZmlsZSAq cywgdm9pZCAqdW51c2VkKQ0KPj4gK3sNCj4+ICsJc3RydWN0IGNkbnMzICpjZG5zID0gcy0+cHJp dmF0ZTsNCj4+ICsNCj4+ICsJaWYgKCFjZG5zLT5kZWJ1Z19kaXNhYmxlKQ0KPj4gKwkJc2VxX3B1 dHMocywgIjBcbiIpOw0KPj4gKwllbHNlDQo+PiArCQlzZXFfcHV0cyhzLCAiMVxuIik7DQo+PiAr DQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgc3NpemVfdCBjZG5zM19k aXNhYmxlX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLA0KPj4gKwkJCQkgICBjb25zdCBjaGFyIF9f dXNlciAqdWJ1ZiwNCj4+ICsJCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpDQo+PiAr ew0KPj4gKwlzdHJ1Y3Qgc2VxX2ZpbGUJICpzID0gZmlsZS0+cHJpdmF0ZV9kYXRhOw0KPj4gKwlz dHJ1Y3QgY2RuczMgKmNkbnMgPSBzLT5wcml2YXRlOw0KPj4gKwlib29sIGRpc2FibGU7DQo+PiAr CWNoYXIgYnVmWzE2XTsNCj4+ICsNCj4+ICsJaWYgKGNvcHlfZnJvbV91c2VyKCZidWYsIHVidWYs IG1pbl90KHNpemVfdCwgc2l6ZW9mKGJ1ZikgLSAxLCBjb3VudCkpKQ0KPj4gKwkJcmV0dXJuIC1F RkFVTFQ7DQo+PiArDQo+PiArCWlmIChrc3RydG9ib29sKGJ1ZiwgJmRpc2FibGUpKSB7DQo+PiAr CQlkZXZfZXJyKGNkbnMtPmRldiwgIndyb25nIHNldHRpbmdcbiIpOw0KPj4gKwkJcmV0dXJuIC1F SU5WQUw7DQo+PiArCX0NCj4+ICsNCj4+ICsJaWYgKGRpc2FibGUgIT0gY2Rucy0+ZGVidWdfZGlz YWJsZSkgew0KPj4gKwkJY2Rucy0+ZGVidWdfZGlzYWJsZSA9IGRpc2FibGU7DQo+PiArCQlxdWV1 ZV93b3JrKHN5c3RlbV9mcmVlemFibGVfd3EsICZjZG5zLT5yb2xlX3N3aXRjaF93cSk7DQo+DQo+ V2hhdCBpcyB0aGUgcHVycG9zZSBvZiB0aGlzIGRpc2FibGUgZGVidWdmcyBmaWxlPw0KPlRvIHN0 b3AgdGhlIGN1cnJlbnRseSBhY3RpdmUgcm9sZT8NCg0KR2VuZXJhbGx5IGl0IHdhcyBhZGRlZCBm b3IgdGVzdGluZyBwdXJwb3NlLiBZZXMgaXQncyBkaXNhYmxlIHRoZSBjdXJyZW50IGFjdGl2ZSBy b2xlLiANCkkgdXNlZCBpdCBmb3IgdGVzdGluZyBsb2FkaW5nL3VubG9hZGluZyBkcml2ZXIuICAN CkFsc28gc29tZXRpbWUgSSB1c2VkIGl0IHRvIHRha2UgbG9nIGZyb20gdHJhY2Ugd2hlbiBJJ20g d29ya2luZyByZW1vdGVseS4gDQoNCg0KPg0KPj4gKwl9DQo+PiArDQo+PiArCXJldHVybiBjb3Vu dDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBjZG5zM19kaXNhYmxlX29wZW4oc3RydWN0 IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpDQo+PiArew0KPj4gKwlyZXR1cm4gc2lu Z2xlX29wZW4oZmlsZSwgY2RuczNfZGlzYWJsZV9zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsNCj4+ ICt9DQo+PiArDQo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2RuczNf ZGlzYWJsZV9mb3BzID0gew0KPj4gKwkub3BlbgkJCT0gY2RuczNfZGlzYWJsZV9vcGVuLA0KPj4g Kwkud3JpdGUJCQk9IGNkbnMzX2Rpc2FibGVfd3JpdGUsDQo+PiArCS5yZWFkCQkJPSBzZXFfcmVh ZCwNCj4+ICsJLmxsc2VlawkJCT0gc2VxX2xzZWVrLA0KPj4gKwkucmVsZWFzZQkJPSBzaW5nbGVf cmVsZWFzZSwNCj4+ICt9Ow0KPj4gKw0KPj4gK3ZvaWQgY2RuczNfZGVidWdmc19pbml0KHN0cnVj dCBjZG5zMyAqY2RucykNCj4+ICt7DQo+PiArCXN0cnVjdCBkZW50cnkgKnJvb3Q7DQo+PiArDQo+ PiArCXJvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGV2X25hbWUoY2Rucy0+ZGV2KSwgTlVMTCk7 DQo+PiArCWNkbnMtPnJvb3QgPSByb290Ow0KPj4gKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfVVNC X0NETlMzX0dBREdFVCkgJiYNCj4+ICsJICAgIElTX0VOQUJMRUQoQ09ORklHX1VTQl9DRE5TM19I T1NUKSkNCj4+ICsJCWRlYnVnZnNfY3JlYXRlX2ZpbGUoIm1vZGUiLCAwNjQ0LCByb290LCBjZG5z LA0KPj4gKwkJCQkgICAgJmNkbnMzX21vZGVfZm9wcyk7DQo+PiArDQo+PiArCWRlYnVnZnNfY3Jl YXRlX2ZpbGUoImRpc2FibGUiLCAwNjQ0LCByb290LCBjZG5zLA0KPj4gKwkJCSAgICAmY2RuczNf ZGlzYWJsZV9mb3BzKTsNCj4+ICt9DQo+PiArDQo+PiArdm9pZCBjZG5zM19kZWJ1Z2ZzX2V4aXQo c3RydWN0IGNkbnMzICpjZG5zKQ0KPj4gK3sNCj4+ICsJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZl KGNkbnMtPnJvb3QpOw0KPj4gK30NCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jZG5zMy9k cmQuYyBiL2RyaXZlcnMvdXNiL2NkbnMzL2RyZC5jDQo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0K Pj4gaW5kZXggMDAwMDAwMDAwMDAwLi4zZTU2MzM4Y2Q3YjkNCj4+IC0tLSAvZGV2L251bGwNCj4+ ICsrKyBiL2RyaXZlcnMvdXNiL2NkbnMzL2RyZC5jDQo+PiBAQCAtMCwwICsxLDM2NSBAQA0KPj4g Ky8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQo+PiArLyoNCj4+ICsgKiBDYWRl bmNlIFVTQlNTIERSRCBEcml2ZXIuDQo+PiArICoNCj4+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTgg Q2FkZW5jZS4NCj4+ICsgKg0KPj4gKyAqIEF1dGhvcjogUGF3ZWwgTGFzemN6YWsgPHBhd2VsbEBj YWRlbmNlLmNvbQ0KPj4gKyAqDQo+PiArICovDQo+PiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5o Pg0KPj4gKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgv ZGVsYXkuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPg0KPj4gKw0KPj4gKyNpbmNs dWRlICJnYWRnZXQuaCINCj4+ICsjaW5jbHVkZSAiZHJkLmgiDQo+PiArI2luY2x1ZGUgImNvcmUu aCINCj4+ICsNCj4+ICtzdGF0aWMgaW50IGNkbnMzX2RyZF9zd2l0Y2hfZ2FkZ2V0KHN0cnVjdCBj ZG5zMyAqY2RucywgaW50IG9uKTsNCj4+ICtzdGF0aWMgaW50IGNkbnMzX2RyZF9zd2l0Y2hfaG9z dChzdHJ1Y3QgY2RuczMgKmNkbnMsIGludCBvbik7DQo+PiArDQo+PiArLyoqDQo+PiArICogY2Ru czNfc2V0X21vZGUgLSBjaGFuZ2UgbW9kZSBvZiBPVEcgQ29yZQ0KPj4gKyAqIEBjZG5zOiBwb2lu dGVyIHRvIGNvbnRleHQgc3RydWN0dXJlDQo+PiArICogQG1vZGU6IHNlbGVjdGVkIG1vZGUgZnJv bSBjZG5zX3JvbGUNCj4+ICsgKg0KPj4gKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG90aGVyd2lz ZSBuZWdhdGl2ZSBlcnJubw0KPj4gKyAqLw0KPj4gK2ludCBjZG5zM19zZXRfbW9kZShzdHJ1Y3Qg Y2RuczMgKmNkbnMsIGVudW0gdXNiX2RyX21vZGUgbW9kZSkNCj4+ICt7DQo+PiArCWludCByZXQg PSAwOw0KPj4gKwl1MzIgcmVnOw0KPj4gKw0KPj4gKwljZG5zLT5jdXJyZW50X2RyX21vZGUgPSBt b2RlOw0KPj4gKw0KPj4gKwlzd2l0Y2ggKG1vZGUpIHsNCj4+ICsJY2FzZSBVU0JfRFJfTU9ERV9Q RVJJUEhFUkFMOg0KPj4gKwkJZGV2X2luZm8oY2Rucy0+ZGV2LCAiU2V0IGNvbnRyb2xsZXIgdG8g R2FkZ2V0IG1vZGVcbiIpOw0KPg0KPmRldl9kYmcoKT8NCj4NCj4+ICsJCXJldCA9IGNkbnMzX2Ry ZF9zd2l0Y2hfZ2FkZ2V0KGNkbnMsIDEpOw0KPj4gKwkJYnJlYWs7DQo+PiArCWNhc2UgVVNCX0RS X01PREVfSE9TVDoNCj4+ICsJCWRldl9pbmZvKGNkbnMtPmRldiwgIlNldCBjb250cm9sbGVyIHRv IEhvc3QgbW9kZVxuIik7DQo+DQo+ZGV2X2RiZygpDQo+DQo+PiArCQlyZXQgPSBjZG5zM19kcmRf c3dpdGNoX2hvc3QoY2RucywgMSk7DQo+PiArCQlicmVhazsNCj4+ICsJY2FzZSBVU0JfRFJfTU9E RV9PVEc6DQo+PiArCQlkZXZfaW5mbyhjZG5zLT5kZXYsICJTZXQgY29udHJvbGxlciB0byBPVEcg bW9kZVxuIik7DQo+DQo+ZGV2X2RiZygpDQo+DQo+PiArCQlpZiAoY2Rucy0+dmVyc2lvbiA9PSBD RE5TM19DT05UUk9MTEVSX1YxKSB7DQo+PiArCQkJcmVnID0gcmVhZGwoJmNkbnMtPm90Z192MV9y ZWdzLT5vdmVycmlkZSk7DQo+PiArCQkJcmVnIHw9IE9WRVJSSURFX0lEUFVMTFVQOw0KPj4gKwkJ CXdyaXRlbChyZWcsICZjZG5zLT5vdGdfdjFfcmVncy0+b3ZlcnJpZGUpOw0KPj4gKwkJfSBlbHNl IHsNCj4+ICsJCQlyZWcgPSByZWFkbCgmY2Rucy0+b3RnX3YwX3JlZ3MtPmN0cmwxKTsNCj4+ICsJ CQlyZWcgfD0gT1ZFUlJJREVfSURQVUxMVVBfVjA7DQo+PiArCQkJd3JpdGVsKHJlZywgJmNkbnMt Pm90Z192MF9yZWdzLT5jdHJsMSk7DQo+PiArCQl9DQo+PiArDQo+DQo+RG9uJ3QgeW91IGhhdmUg dG8gY2xlYXIgSURQVUxMVVAgd2hlbiB5b3Ugc3dpdGNoIHRvIFBFUklQSEVSQUwgb3IgSE9TVCBt b2RlPw0KTm8gSSBkb24ndCBoYXZlIHRvLg0KSW50IHRoaXMgcGxhY2UgT1ZFUlJJREVfSURQVUxM VVAgIC0gZnJvbSBzcGVjOiAiSUQgUGluIFNhbXBsZSBFbmFibGU6IEFjdGl2ZSBIaWdoLiBTaWdu YWwgdGhhdCBlbmFibGVzIHRoZSBzYW1wbGluZyBvZiB0aGUgYW5hbG9nIElEIGxpbmUuIg0KDQo+ DQo+PiArCQkvKg0KPj4gKwkJICogSGFyZHdhcmUgc3BlY2lmaWNhdGlvbiBzYXlzOiAiSURfVkFM VUUgbXVzdCBiZSB2YWxpZCB3aXRoaW4NCj4+ICsJCSAqIDUwbXMgYWZ0ZXIgaWRwdWxsdXAgaXMg c2V0IHRvICcxIiBzbyBkcml2ZXIgbXVzdCB3YWl0DQo+PiArCQkgKiA1MG1zIGJlZm9yZSByZWFk aW5nIHRoaXMgcGluLg0KPj4gKwkJICovDQo+PiArCQl1c2xlZXBfcmFuZ2UoNTAwMDAsIDYwMDAw KTsNCj4+ICsJCWJyZWFrOw0KPj4gKwlkZWZhdWx0Og0KPj4gKwkJY2Rucy0+Y3VycmVudF9kcl9t b2RlID0gVVNCX0RSX01PREVfVU5LTk9XTjsNCj4+ICsJCWRldl9lcnIoY2Rucy0+ZGV2LCAiVW5z dXBwb3J0ZWQgbW9kZSBvZiBvcGVyYXRpb24gJWRcbiIsIG1vZGUpOw0KPj4gKwkJcmV0dXJuIC1F SU5WQUw7DQo+PiArCX0NCj4+ICsNCj4+ICsJcmV0dXJuIHJldDsNCj4+ICt9DQo+PiArDQo+PiAr aW50IGNkbnMzX2dldF9pZChzdHJ1Y3QgY2RuczMgKmNkbnMpDQo+PiArew0KPj4gKwlpbnQgaWQ7 DQo+PiArDQo+PiArCWlkID0gcmVhZGwoJmNkbnMtPm90Z19yZWdzLT5zdHMpICYgT1RHU1RTX0lE X1ZBTFVFOw0KPj4gKwlkZXZfZGJnKGNkbnMtPmRldiwgIk9URyBJRDogJWQiLCBpZCk7DQo+PiAr CXJldHVybiBpZDsNCj4+ICt9DQo+PiArDQo+PiAraW50IGNkbnMzX2lzX2hvc3Qoc3RydWN0IGNk bnMzICpjZG5zKQ0KPj4gK3sNCj4+ICsJaWYgKGNkbnMtPmN1cnJlbnRfZHJfbW9kZSA9PSBVU0Jf RFJfTU9ERV9IT1NUKQ0KPj4gKwkJcmV0dXJuIDE7DQo+DQo+ZG9uJ3QgeW91IGhhdmUgdG8gcmV0 dXJuIDAgaWYgY3VycmVudF9kcl9tb2RlID09IFVTQl9EUl9NT0RFX1BFUklQSEVSQUw/DQoNCiJy ZXR1cm4gMCIgaXMgZmV3IGxpbmVzIGJlbG93LiAgDQoNCj4NCj4+ICsJZWxzZSBpZiAoIWNkbnMz X2dldF9pZChjZG5zKSkNCj4+ICsJCXJldHVybiAxOw0KPj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ ICt9DQo+PiArDQo+PiAraW50IGNkbnMzX2lzX2RldmljZShzdHJ1Y3QgY2RuczMgKmNkbnMpDQo+ PiArew0KPj4gKwlpZiAoY2Rucy0+Y3VycmVudF9kcl9tb2RlID09IFVTQl9EUl9NT0RFX1BFUklQ SEVSQUwpDQo+PiArCQlyZXR1cm4gMTsNCj4NCj5kb24ndCB5b3UgaGF2ZSB0byByZXR1cm4gMCBp ZiBjdXJyZW50X2RyX21vZGUgPT0gVVNCX0RSX01PREVfSE9TVD8NCg0KInJldHVybiAwIiBpcyBm ZXcgbGluZXMgYmVsb3cuICANCj4NCj4+ICsJZWxzZSBpZiAoY2Rucy0+Y3VycmVudF9kcl9tb2Rl ID09IFVTQl9EUl9NT0RFX09URykNCj4+ICsJCWlmIChjZG5zM19nZXRfaWQoY2RucykpDQo+PiAr CQkJcmV0dXJuIDE7DQo+PiArDQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICsvKioN Cj4+ICsgKiBjZG5zM19vdGdfZGlzYWJsZV9pcnEgLSBEaXNhYmxlIGFsbCBPVEcgaW50ZXJydXB0 cw0KPj4gKyAqIEBjZG5zOiBQb2ludGVyIHRvIGNvbnRyb2xsZXIgY29udGV4dCBzdHJ1Y3R1cmUN Cj4+ICsgKi8NCj4+ICtzdGF0aWMgdm9pZCBjZG5zM19vdGdfZGlzYWJsZV9pcnEoc3RydWN0IGNk bnMzICpjZG5zKQ0KPj4gK3sNCj4+ICsJd3JpdGVsKDAsICZjZG5zLT5vdGdfcmVncy0+aWVuKTsN Cj4+ICt9DQo+PiArDQo+PiArLyoqDQo+PiArICogY2RuczNfb3RnX2VuYWJsZV9pcnEgLSBlbmFi bGUgaWQgYW5kIHNlc3NfdmFsaWQgaW50ZXJydXB0cw0KPj4gKyAqIEBjZG5zOiBQb2ludGVyIHRv IGNvbnRyb2xsZXIgY29udGV4dCBzdHJ1Y3R1cmUNCj4+ICsgKi8NCj4+ICtzdGF0aWMgdm9pZCBj ZG5zM19vdGdfZW5hYmxlX2lycShzdHJ1Y3QgY2RuczMgKmNkbnMpDQo+PiArew0KPj4gKwl3cml0 ZWwoT1RHSUVOX0lEX0NIQU5HRV9JTlQgfCBPVEdJRU5fVkJVU1ZBTElEX1JJU0VfSU5UIHwNCj4+ ICsJICAgICAgIE9UR0lFTl9WQlVTVkFMSURfRkFMTF9JTlQsICZjZG5zLT5vdGdfcmVncy0+aWVu KTsNCj4+ICt9DQo+PiArDQo+PiArLyoqDQo+PiArICogY2RuczNfZHJkX3N3aXRjaF9ob3N0IC0g c3RhcnQvc3RvcCBob3N0DQo+PiArICogQGNkbnM6IFBvaW50ZXIgdG8gY29udHJvbGxlciBjb250 ZXh0IHN0cnVjdHVyZQ0KPj4gKyAqIEBvbjogMSBmb3Igc3RhcnQsIDAgZm9yIHN0b3ANCj4+ICsg Kg0KPj4gKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG90aGVyd2lzZSBuZWdhdGl2ZSBlcnJubw0K Pj4gKyAqLw0KPj4gK3N0YXRpYyBpbnQgY2RuczNfZHJkX3N3aXRjaF9ob3N0KHN0cnVjdCBjZG5z MyAqY2RucywgaW50IG9uKQ0KPj4gK3sNCj4+ICsJaW50IHJldDsNCj4+ICsJdTMyIHJlZyA9IE9U R0NNRF9PVEdfRElTOw0KPj4gKw0KPj4gKwkvKiBzd2l0Y2ggT1RHIGNvcmUgKi8NCj4+ICsJaWYg KG9uKSB7DQo+PiArCQl3cml0ZWwoT1RHQ01EX0hPU1RfQlVTX1JFUSB8IHJlZywgJmNkbnMtPm90 Z19yZWdzLT5jbWQpOw0KPj4gKw0KPj4gKwkJZGV2X2RiZyhjZG5zLT5kZXYsICJXYWl0aW5nIGZv ciBIb3N0IG1vZGUgaXMgdHVybmVkIG9uXG4iKTsNCj5zL2Zvci90aWxsDQo+DQo+PiArCQlyZXQg PSBjZG5zM19oYW5kc2hha2UoJmNkbnMtPm90Z19yZWdzLT5zdHMsIE9UR1NUU19YSENJX1JFQURZ LA0KPj4gKwkJCQkgICAgICBPVEdTVFNfWEhDSV9SRUFEWSwgMTAwMDAwKTsNCj4+ICsNCj4+ICsJ CWlmIChyZXQpDQo+PiArCQkJcmV0dXJuIHJldDsNCj4+ICsJfSBlbHNlIHsNCj4+ICsJCXVzbGVl cF9yYW5nZSgzMCwgNDApOw0KPj4gKwkJd3JpdGVsKE9UR0NNRF9IT1NUX0JVU19EUk9QIHwgT1RH Q01EX0RFVl9CVVNfRFJPUCB8DQo+PiArCQkgICAgICAgT1RHQ01EX0RFVl9QT1dFUl9PRkYgfCBP VEdDTURfSE9TVF9QT1dFUl9PRkYsDQo+PiArCQkgICAgICAgJmNkbnMtPm90Z19yZWdzLT5jbWQp Ow0KPj4gKwkJdXNsZWVwX3JhbmdlKDMwMDAsIDQwMDApOw0KPg0KPndoeSBkbyB5b3UgbmVlZCBk ZWxheXMgYmVmb3JlIGFuZCBhZnRlciB0aGUgd3JpdGU/DQpJIHRoaW5rIHRoYXQgdGhlIGZpcnN0 IGl0IGlzIG5vdCBuZWNlc3NhcnkuIEknbSBnb2luZyB0byByZW1vdmUgaXQuIA0KVGhlIHNlY29u ZCBJJ20gZ29pbmcgdG8gcmVwbGFjZSB3aXRoIA0KCQljZG5zM19oYW5kc2hha2UoJmNkbnMtPm90 Z19yZWdzLT5zdGF0ZSwNCgkJCQlPVEdTVEFURV9IT1NUX1NUQVRFX01BU0ssDQoJCQkJMCwgMjAw MDAwMCk7DQpJdCBzaG91bGQgZW5zdXJlIGFzIHNob3J0IGFzIHBvc3NpYmxlIGRlbGF5IHRvIGFs bG93IERSRCB0cmFuc2l0IHRvIEhfSURMRSBzdGF0ZS4gDQoNCj4+ICsJfQ0KPj4gKw0KPj4gKwly ZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArLyoqDQo+PiArICogY2RuczNfZHJkX3N3aXRjaF9n YWRnZXQgLSBzdGFydC9zdG9wIGdhZGdldA0KPj4gKyAqIEBjZG5zOiBQb2ludGVyIHRvIGNvbnRy b2xsZXIgY29udGV4dCBzdHJ1Y3R1cmUNCj4+ICsgKiBAb246IDEgZm9yIHN0YXJ0LCAwIGZvciBz dG9wDQo+PiArICoNCj4+ICsgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvdGhlcndpc2UgbmVnYXRp dmUgZXJybm8NCj4+ICsgKi8NCj4+ICtzdGF0aWMgaW50IGNkbnMzX2RyZF9zd2l0Y2hfZ2FkZ2V0 KHN0cnVjdCBjZG5zMyAqY2RucywgaW50IG9uKQ0KPj4gK3sNCj4+ICsJaW50IHJldDsNCj4+ICsJ dTMyIHJlZyA9IE9UR0NNRF9PVEdfRElTOw0KPj4gKw0KPj4gKwkvKiBzd2l0Y2ggT1RHIGNvcmUg Ki8NCj4+ICsJaWYgKG9uKSB7DQo+PiArCQl3cml0ZWwoT1RHQ01EX0RFVl9CVVNfUkVRIHwgcmVn LCAmY2Rucy0+b3RnX3JlZ3MtPmNtZCk7DQo+PiArDQo+PiArCQlkZXZfZGJnKGNkbnMtPmRldiwg IldhaXRpbmcgZm9yIERldmljZSBtb2RlIGlzIHR1cm5lZCBvblxuIik7DQo+DQo+cy9mb3IvdGls bA0KPg0KPj4gKw0KPj4gKwkJcmV0ID0gY2RuczNfaGFuZHNoYWtlKCZjZG5zLT5vdGdfcmVncy0+ c3RzLCBPVEdTVFNfREVWX1JFQURZLA0KPj4gKwkJCQkgICAgICBPVEdTVFNfREVWX1JFQURZLCAx MDAwMDApOw0KPj4gKw0KPj4gKwkJaWYgKHJldCkNCj4+ICsJCQlyZXR1cm4gcmV0Ow0KPj4gKwl9 IGVsc2Ugew0KPj4gKwkJLyoNCj4+ICsJCSAqIGRyaXZlciBzaG91bGQgd2FpdCBhdCBsZWFzdCAx MHVzIGFmdGVyIGRpc2FibGluZyBEZXZpY2UNCj4+ICsJCSAqIGJlZm9yZSB0dXJuaW5nLW9mZiBE ZXZpY2UgKERFVl9CVVNfRFJPUCkNCj4+ICsJCSAqLw0KPj4gKwkJdXNsZWVwX3JhbmdlKDIwLCAz MCk7DQo+PiArCQl3cml0ZWwoT1RHQ01EX0hPU1RfQlVTX0RST1AgfCBPVEdDTURfREVWX0JVU19E Uk9QIHwNCj4+ICsJCSAgICAgICBPVEdDTURfREVWX1BPV0VSX09GRiB8IE9UR0NNRF9IT1NUX1BP V0VSX09GRiwNCj4+ICsJCSAgICAgICAmY2Rucy0+b3RnX3JlZ3MtPmNtZCk7DQo+PiArCQl1c2xl ZXBfcmFuZ2UoMzAwMCwgNDAwMCk7DQo+DQo+d2h5IGRvIHlvdSBuZWVkIGEgZGVsYXkgYWZ0ZXIg dGhlIHdyaXRlPw0KSXQncyB0aW1lIHJlcXVpcmVkIGZvciBwcm9wZXIgdHJhbnNpdGlvbiB0byBE RVZfSURMRSBzdGF0ZS4gDQo+DQo+PiArCX0NCj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0K Pj4gKw0KPj4gKy8qKg0KPj4gKyAqIGNkbnMzX2luaXRfb3RnX21vZGUgLSBpbml0aWFsaXplIGRy ZCBjb250cm9sbGVyDQo+PiArICogQGNkbnM6IFBvaW50ZXIgdG8gY29udHJvbGxlciBjb250ZXh0 IHN0cnVjdHVyZQ0KPj4gKyAqDQo+PiArICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3RoZXJ3aXNl IG5lZ2F0aXZlIGVycm5vDQo+PiArICovDQo+PiArc3RhdGljIGludCBjZG5zM19pbml0X290Z19t b2RlKHN0cnVjdCBjZG5zMyAqY2RucykNCj4+ICt7DQo+PiArCWludCByZXQgPSAwOw0KPj4gKw0K Pj4gKwljZG5zM19vdGdfZGlzYWJsZV9pcnEoY2Rucyk7DQo+PiArCS8qIGNsZWFyIGFsbCBpbnRl cnJ1cHRzICovDQo+PiArCXdyaXRlbCh+MCwgJmNkbnMtPm90Z19yZWdzLT5pdmVjdCk7DQo+PiAr DQo+PiArCXJldCA9IGNkbnMzX3NldF9tb2RlKGNkbnMsIFVTQl9EUl9NT0RFX09URyk7DQo+PiAr CWlmIChyZXQpDQo+PiArCQlyZXR1cm4gcmV0Ow0KPj4gKw0KPj4gKwlpZiAoY2RuczNfaXNfaG9z dChjZG5zKSkNCj4+ICsJCXJldCA9IGNkbnMzX2RyZF9zd2l0Y2hfaG9zdChjZG5zLCAxKTsNCj4+ ICsJZWxzZQ0KPj4gKwkJcmV0ID0gY2RuczNfZHJkX3N3aXRjaF9nYWRnZXQoY2RucywgMSk7DQo+ PiArDQo+PiArCWlmIChyZXQpDQo+PiArCQlyZXR1cm4gcmV0Ow0KPj4gKw0KPj4gKwljZG5zM19v dGdfZW5hYmxlX2lycShjZG5zKTsNCj4NCj5TY2hlZHVsZSBzd2l0Y2ggd29ya3F1ZXVlIHRvIGRl YWwgd2l0aCB1cGRhdGVkIElEIHN0YXRlPw0KDQpTY2hlZHVsZSBpcyBhZGRlZCBpbiBjZG5zM19k cmRfaXJxLiANCkRyaXZlciBzaG91bGQgcmVjZWl2ZSBpbnRlcnJ1cHQuIA0KIA0KPg0KPj4gKwly ZXR1cm4gcmV0Ow0KPj4gK30NCj4+ICsNCj4+ICsvKioNCj4+ICsgKiBjZG5zM19kcmRfdXBkYXRl X21vZGUgLSBpbml0aWFsaXplIG1vZGUgb2Ygb3BlcmF0aW9uDQo+PiArICogQGNkbnM6IFBvaW50 ZXIgdG8gY29udHJvbGxlciBjb250ZXh0IHN0cnVjdHVyZQ0KPj4gKyAqDQo+PiArICogUmV0dXJu cyAwIG9uIHN1Y2Nlc3Mgb3RoZXJ3aXNlIG5lZ2F0aXZlIGVycm5vDQo+PiArICovDQo+PiAraW50 IGNkbnMzX2RyZF91cGRhdGVfbW9kZShzdHJ1Y3QgY2RuczMgKmNkbnMpDQo+PiArew0KPj4gKwlp bnQgcmV0ID0gMDsNCj4+ICsNCj4+ICsJaWYgKGNkbnMtPmRlc2lyZWRfZHJfbW9kZSA9PSBjZG5z LT5jdXJyZW50X2RyX21vZGUpDQo+PiArCQlyZXR1cm4gcmV0Ow0KPj4gKw0KPj4gKwljZG5zM19k cmRfc3dpdGNoX2dhZGdldChjZG5zLCAwKTsNCj4+ICsJY2RuczNfZHJkX3N3aXRjaF9ob3N0KGNk bnMsIDApOw0KPg0KPldoeSBhcmUgeW91IHN0b3BwaW5nIGdhZGdldC9ob3N0IGhlcmU/DQo+T25l IG9yIGJvdGggb2YgbWlnaHQgbm90IGhhdmUgYmVlbiBzdGFydGVkLg0KDQpUaGVzZSBmdW5jdGlv bnMgb3BlcmF0ZSBvbmx5IG9uIE9URyByZWdpc3RlcnMuIEl0J3MgYWNjb3JkaW5nIHdpdGggDQpD RE5TMyBEUkQgc3BlY2lmaWNhdGlvbi4gDQpUaGV5IGRvbid0IHN0b3AgZ2FkZ2V0L2hvc3QsIGJ1 dCBvbmx5IHNldDoNCkhPU1RfQlVTX0RST1A9MQ0KSE9TVF9QT1dFUl9PRj0xDQpERVZfQlVTX0RS T1A9MQ0KREVWX1BPV0VSX09GRj0xDQoNCkRyaXZlciBtdXN0IHNldCB0aGVzZSBiaXRzIGJlZm9y ZSByZWNvbmZpZ3VyaW5nIERSRC4gDQo+DQo+PiArDQo+PiArCXN3aXRjaCAoY2Rucy0+ZGVzaXJl ZF9kcl9tb2RlKSB7DQo+PiArCWNhc2UgVVNCX0RSX01PREVfUEVSSVBIRVJBTDoNCj4+ICsJCXJl dCA9IGNkbnMzX3NldF9tb2RlKGNkbnMsIFVTQl9EUl9NT0RFX1BFUklQSEVSQUwpOw0KPj4gKwkJ YnJlYWs7DQo+PiArCWNhc2UgVVNCX0RSX01PREVfSE9TVDoNCj4+ICsJCXJldCA9IGNkbnMzX3Nl dF9tb2RlKGNkbnMsIFVTQl9EUl9NT0RFX0hPU1QpOw0KPj4gKwkJYnJlYWs7DQo+PiArCWNhc2Ug VVNCX0RSX01PREVfT1RHOg0KPj4gKwkJcmV0ID0gY2RuczNfaW5pdF9vdGdfbW9kZShjZG5zKTsN Cj4+ICsJCWJyZWFrOw0KPj4gKwlkZWZhdWx0Og0KPj4gKwkJZGV2X2VycihjZG5zLT5kZXYsICJV bnN1cHBvcnRlZCBtb2RlIG9mIG9wZXJhdGlvbiAlZFxuIiwNCj4+ICsJCQljZG5zLT5kcl9tb2Rl KTsNCj4+ICsJCXJldHVybiAtRUlOVkFMOw0KPj4gKwl9DQo+PiArDQo+PiArCXJldHVybiByZXQ7 DQo+PiArfQ0KPj4gKw0KPj4gKy8qKg0KPj4gKyAqIGNkbnMzX2RyZF9pcnEgLSBpbnRlcnJ1cHQg aGFuZGxlciBmb3IgT1RHIGV2ZW50cw0KPj4gKyAqDQo+PiArICogQGlycTogaXJxIG51bWJlciBm b3IgY2RuczMgY29yZSBkZXZpY2UNCj4+ICsgKiBAZGF0YTogc3RydWN0dXJlIG9mIGNkbnMzDQo+ PiArICoNCj4+ICsgKiBSZXR1cm5zIElSUV9IQU5ETEVEIG9yIElSUV9OT05FDQo+PiArICovDQo+ PiArc3RhdGljIGlycXJldHVybl90IGNkbnMzX2RyZF9pcnEoaW50IGlycSwgdm9pZCAqZGF0YSkN Cj4+ICt7DQo+PiArCWlycXJldHVybl90IHJldCA9IElSUV9OT05FOw0KPj4gKwlzdHJ1Y3QgY2Ru czMgKmNkbnMgPSBkYXRhOw0KPj4gKwl1MzIgcmVnOw0KPj4gKw0KPj4gKwlpZiAoY2Rucy0+ZHJf bW9kZSAhPSBVU0JfRFJfTU9ERV9PVEcpDQo+PiArCQlyZXR1cm4gcmV0Ow0KPj4gKw0KPj4gKwly ZWcgPSByZWFkbCgmY2Rucy0+b3RnX3JlZ3MtPml2ZWN0KTsNCj4+ICsNCj4+ICsJaWYgKCFyZWcp DQo+PiArCQlyZXR1cm4gcmV0Ow0KPj4gKw0KPj4gKwlpZiAocmVnICYgT1RHSUVOX0lEX0NIQU5H RV9JTlQpIHsNCj4+ICsJCWRldl9kYmcoY2Rucy0+ZGV2LCAiT1RHIElSUTogbmV3IElEOiAlZFxu IiwNCj4+ICsJCQljZG5zM19nZXRfaWQoY2RucykpOw0KPj4gKw0KPj4gKwkJcXVldWVfd29yayhz eXN0ZW1fZnJlZXphYmxlX3dxLCAmY2Rucy0+cm9sZV9zd2l0Y2hfd3EpOw0KPj4gKw0KPj4gKwkJ cmV0ID0gSVJRX0hBTkRMRUQ7DQo+PiArCX0NCj4+ICsNCj4+ICsJd3JpdGVsKH4wLCAmY2Rucy0+ b3RnX3JlZ3MtPml2ZWN0KTsNCj4+ICsJcmV0dXJuIHJldDsNCj4+ICt9DQo+PiArDQo+PiAraW50 IGNkbnMzX2RyZF9pbml0KHN0cnVjdCBjZG5zMyAqY2RucykNCj4+ICt7DQo+PiArCXZvaWQgX19p b21lbSAqcmVnczsNCj4+ICsJaW50IHJldCA9IDA7DQo+PiArCXUzMiBzdGF0ZTsNCj4+ICsNCj4+ ICsJcmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShjZG5zLT5kZXYsICZjZG5zLT5vdGdfcmVz KTsNCj4+ICsJaWYgKElTX0VSUihyZWdzKSkNCj4+ICsJCXJldHVybiBQVFJfRVJSKHJlZ3MpOw0K Pj4gKw0KPj4gKwkvKiBEZXRlY3Rpb24gb2YgRFJEIHZlcnNpb24uIENvbnRyb2xsZXIgaGFzIGJl ZW4gcmVsZWFzZWQNCj4+ICsJICogaW4gdHdvIHZlcnNpb25zLiBCb3RoIGFyZSBzaW1pbGFyLCBi dXQgdGhleSBoYXZlIHNhbWUgY2hhbmdlcw0KPj4gKwkgKiBpbiByZWdpc3RlciBtYXBzLg0KPj4g KwkgKiBUaGUgZmlyc3QgcmVnaXN0ZXIgaW4gb2xkIHZlcnNpb24gaXMgY29tbWFuZCByZWdpc3Rl ciBhbmQgaXQncyByZWFkDQo+PiArCSAqIG9ubHksIHNvIGRyaXZlciBzaG91bGQgcmVhZCAwIGZy b20gaXQuIE9uIHRoZSBvdGhlciBoYW5kLCBpbiB2MQ0KPj4gKwkgKiB0aGUgZmlyc3QgcmVnaXN0 ZXIgY29udGFpbnMgZGV2aWNlIElEIG51bWJlciB3aGljaCBpcyBub3Qgc2V0IHRvIDAuDQo+PiAr CSAqIERyaXZlciB1c2VzIHRoaXMgZmFjdCB0byBkZXRlY3QgdGhlIHByb3BlciB2ZXJzaW9uIG9m DQo+PiArCSAqIGNvbnRyb2xsZXIuDQo+PiArCSAqLw0KPj4gKwljZG5zLT5vdGdfdjBfcmVncyA9 IHJlZ3M7DQo+PiArCWlmICghcmVhZGwoJmNkbnMtPm90Z192MF9yZWdzLT5jbWQpKSB7DQo+PiAr CQljZG5zLT52ZXJzaW9uICA9IENETlMzX0NPTlRST0xMRVJfVjA7DQo+PiArCQljZG5zLT5vdGdf djFfcmVncyA9IE5VTEw7DQo+PiArCQljZG5zLT5vdGdfcmVncyA9IHJlZ3M7DQo+PiArCQlkZXZf aW5mbyhjZG5zLT5kZXYsICJEUkQgdmVyc2lvbiB2MCAoJTA4eClcbiIsDQo+PiArCQkJIHJlYWRs KCZjZG5zLT5vdGdfdjBfcmVncy0+dmVyc2lvbikpOw0KPj4gKwl9IGVsc2Ugew0KPj4gKwkJY2Ru cy0+b3RnX3YwX3JlZ3MgPSBOVUxMOw0KPj4gKwkJY2Rucy0+b3RnX3YxX3JlZ3MgPSByZWdzOw0K Pj4gKwkJY2Rucy0+b3RnX3JlZ3MgPSAodm9pZCAqKSZjZG5zLT5vdGdfdjFfcmVncy0+Y21kOw0K Pj4gKwkJY2Rucy0+dmVyc2lvbiAgPSBDRE5TM19DT05UUk9MTEVSX1YxOw0KPj4gKwkJZGV2X2lu Zm8oY2Rucy0+ZGV2LCAiRFJEIHZlcnNpb24gdjEgKElEOiAlMDh4LCByZXY6ICUwOHgpXG4iLA0K Pj4gKwkJCSByZWFkbCgmY2Rucy0+b3RnX3YxX3JlZ3MtPmRpZCksDQo+PiArCQkJIHJlYWRsKCZj ZG5zLT5vdGdfdjFfcmVncy0+cmlkKSk7DQo+PiArCX0NCj4+ICsNCj4+ICsJc3RhdGUgPSBPVEdT VFNfU1RSQVAocmVhZGwoJmNkbnMtPm90Z19yZWdzLT5zdHMpKTsNCj4+ICsNCj4+ICsJLyogVXBk YXRlIGRyX21vZGUgYWNjb3JkaW5nIHRvIFNUUkFQIGNvbmZpZ3VyYXRpb24uICovDQo+PiArCWNk bnMtPmRyX21vZGUgPSBVU0JfRFJfTU9ERV9PVEc7DQo+PiArCWlmIChzdGF0ZSA9PSBPVEdTVFNf U1RSQVBfSE9TVCkgew0KPj4gKwkJZGV2X2luZm8oY2Rucy0+ZGV2LCAiQ29udHJvbGxlciBzdHJh cHBlZCB0byBIT1NUXG4iKTsNCj4+ICsJCWNkbnMtPmRyX21vZGUgPSBVU0JfRFJfTU9ERV9IT1NU Ow0KPj4gKwl9IGVsc2UgaWYgKHN0YXRlID09IE9UR1NUU19TVFJBUF9HQURHRVQpIHsNCj4+ICsJ CWRldl9pbmZvKGNkbnMtPmRldiwgIkNvbnRyb2xsZXIgc3RyYXBwZWQgdG8gUEVSSVBIRVJBTFxu Iik7DQo+PiArCQljZG5zLT5kcl9tb2RlID0gVVNCX0RSX01PREVfUEVSSVBIRVJBTDsNCj4+ICsJ fQ0KPj4gKw0KPj4gKwljZG5zLT5kZXNpcmVkX2RyX21vZGUgPSBjZG5zLT5kcl9tb2RlOw0KPj4g KwljZG5zLT5jdXJyZW50X2RyX21vZGUgPSBVU0JfRFJfTU9ERV9VTktOT1dOOw0KPj4gKw0KPj4g KwlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGNkbnMtPmRldiwgY2Rucy0+aXJxLCBj ZG5zM19kcmRfaXJxLA0KPj4gKwkJCQkJTlVMTCwgSVJRRl9TSEFSRUQsDQo+PiArCQkJCQlkZXZf bmFtZShjZG5zLT5kZXYpLCBjZG5zKTsNCj4+ICsNCj4+ICsJaWYgKHJldCkNCj4+ICsJCXJldHVy biByZXQ7DQo+PiArDQo+PiArCXN0YXRlID0gcmVhZGwoJmNkbnMtPm90Z19yZWdzLT5zdHMpOw0K Pj4gKwlpZiAoT1RHU1RTX09UR19OUkRZKHN0YXRlKSAhPSAwKSB7DQo+PiArCQlkZXZfZXJyKGNk bnMtPmRldiwgIkNhZGVuY2UgVVNCMyBPVEcgZGV2aWNlIG5vdCByZWFkeVxuIik7DQo+PiArCQly ZXR1cm4gLUVOT0RFVjsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlyZXQgPSBjZG5zM19kcmRfdXBkYXRl X21vZGUoY2Rucyk7DQo+PiArDQo+PiArCXJldHVybiByZXQ7DQo+PiArfQ0KPj4gKw0KPj4gK2lu dCBjZG5zM19kcmRfZXhpdChzdHJ1Y3QgY2RuczMgKmNkbnMpDQo+PiArew0KPj4gKwlyZXR1cm4g Y2RuczNfZHJkX3N3aXRjaF9ob3N0KGNkbnMsIDApOw0KPg0KPldoeSBvbmx5IHN0b3BwaW5nIGhv c3Q/DQpjZG5zM19kcmRfc3dpdGNoX2dhZGdldChjZG5zLCAwKSAgbWFrZSAgdGhlIHNhbWUgYXMg Y2RuczNfZHJkX3N3aXRjaF9ob3N0KGNkbnMsIDApLiANCkl0J3Mgb25seSBzZXQgc29tZSBiaXRz IGluIE9UR19DTUQgcmVnaXN0ZXIsIHRvIGZvcmNlIHRyYW5zaXRpb24gdG8gSURMRSBzdGF0ZS4N Cj4NCj5JIHRoaW5rIHdlIG5lZWQgdG8gc3RvcCBhY3RpdmUgcm9sZSwgZGlzYWJsZSBJUlEgZ2Vu ZXJhdGlvbiBhbmQgZnJlZSBpcnE/DQpTdG9wIGFjdGl2ZSByb2xlIGlzIGludm9rZWQgaW4gY29y ZS5jIGZpbGUgZnJvbSBjZG5zM19yZW1vdmUgLT5jZG5zM19leGl0X3JvbGVzDQoNCj4NCj4+ICt9 DQo+DQo+PHNuaXA+DQo+DQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2RuczMvZ2FkZ2V0 LmMgYi9kcml2ZXJzL3VzYi9jZG5zMy9nYWRnZXQuYw0KPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQN Cj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uN2Y3ZjI0ZWUzYzRiDQo+PiAtLS0gL2Rldi9udWxsDQo+ PiArKysgYi9kcml2ZXJzL3VzYi9jZG5zMy9nYWRnZXQuYw0KPj4gQEAgLTAsMCArMSwyMDAzIEBA DQo+PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCj4+ICsvKg0KPj4gKyAq IENhZGVuY2UgVVNCU1MgRFJEIERyaXZlciAtIGdhZGdldCBzaWRlLg0KPj4gKyAqDQo+PiArICog Q29weXJpZ2h0IChDKSAyMDE4IENhZGVuY2UgRGVzaWduIFN5c3RlbXMuDQo+PiArICogQ29weXJp Z2h0IChDKSAyMDE3LTIwMTggTlhQDQo+PiArICoNCj4+ICsgKiBBdXRob3JzOiBQYXdlbCBKZXog PHBqZXpAY2FkZW5jZS5jb20+LA0KPj4gKyAqICAgICAgICAgIFBhd2VsIExhc3pjemFrIDxwYXdl bGxAY2FkZW5jZS5jb20+DQo+PiArICoJICAgIFBldGVyIENoZW4gPHBldGVyLmNoZW5AbnhwLmNv bT4NCj4+ICsgKi8NCj4+ICsNCj4NCj48c25pcD4NCj4NCj4+ICsNCj4+ICtzdGF0aWMgdm9pZCBj ZG5zM19nYWRnZXRfZGlzYWJsZShzdHJ1Y3QgY2RuczMgKmNkbnMpDQo+PiArew0KPj4gKwlzdHJ1 Y3QgY2RuczNfZGV2aWNlICpwcml2X2RldjsNCj4+ICsNCj4+ICsJcHJpdl9kZXYgPSBjZG5zLT5n YWRnZXRfZGV2Ow0KPj4gKw0KPj4gKwlpZiAocHJpdl9kZXYtPmdhZGdldF9kcml2ZXIpDQo+PiAr CQlwcml2X2Rldi0+Z2FkZ2V0X2RyaXZlci0+ZGlzY29ubmVjdCgmcHJpdl9kZXYtPmdhZGdldCk7 PiArDQo+PiArCXVzYl9nYWRnZXRfZGlzY29ubmVjdCgmcHJpdl9kZXYtPmdhZGdldCk7DQo+PiAr CXByaXZfZGV2LT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfVU5LTk9XTjsNCj4+ICt9DQo+PiAr DQo+PiArdm9pZCBjZG5zM19nYWRnZXRfZXhpdChzdHJ1Y3QgY2RuczMgKmNkbnMpDQo+PiArew0K Pj4gKwlzdHJ1Y3QgY2RuczNfZGV2aWNlICpwcml2X2RldjsNCj4+ICsNCj4+ICsJcHJpdl9kZXYg PSBjZG5zLT5nYWRnZXRfZGV2Ow0KPj4gKw0KPj4gKwljZG5zM19nYWRnZXRfZGlzYWJsZShjZG5z KTsNCj4+ICsNCj4+ICsJZGV2bV9mcmVlX2lycShjZG5zLT5kZXYsIGNkbnMtPmlycSwgY2Rucyk7 DQo+PiArDQo+PiArCXBtX3J1bnRpbWVfbWFya19sYXN0X2J1c3koY2Rucy0+ZGV2KTsNCj4+ICsJ cG1fcnVudGltZV9wdXRfYXV0b3N1c3BlbmQoY2Rucy0+ZGV2KTsNCj4+ICsNCj4+ICsJdXNiX2Rl bF9nYWRnZXRfdWRjKCZwcml2X2Rldi0+Z2FkZ2V0KTsNCj4+ICsNCj4+ICsJY2RuczNfZnJlZV9h bGxfZXBzKHByaXZfZGV2KTsNCj4+ICsNCj4+ICsJZG1hX2ZyZWVfY29oZXJlbnQocHJpdl9kZXYt PnN5c2RldiwgOCwgcHJpdl9kZXYtPnNldHVwX2J1ZiwNCj4+ICsJCQkgIHByaXZfZGV2LT5zZXR1 cF9kbWEpOw0KPj4gKw0KPj4gKwlrZnJlZShwcml2X2Rldi0+emxwX2J1Zik7DQo+PiArCWtmcmVl KHByaXZfZGV2KTsNCj4+ICsJY2Rucy0+Z2FkZ2V0X2RldiA9IE5VTEw7DQo+PiArfQ0KPj4gKw0K Pj4gK3N0YXRpYyBpbnQgY2RuczNfZ2FkZ2V0X3N0YXJ0KHN0cnVjdCBjZG5zMyAqY2RucykNCj4+ ICt7DQo+PiArCXN0cnVjdCBjZG5zM19kZXZpY2UgKnByaXZfZGV2Ow0KPj4gKwl1MzIgbWF4X3Nw ZWVkOw0KPj4gKwlpbnQgcmV0Ow0KPj4gKw0KPj4gKwlwcml2X2RldiA9IGt6YWxsb2Moc2l6ZW9m KCpwcml2X2RldiksIEdGUF9LRVJORUwpOw0KPj4gKwlpZiAoIXByaXZfZGV2KQ0KPj4gKwkJcmV0 dXJuIC1FTk9NRU07DQo+PiArDQo+PiArCWNkbnMtPmdhZGdldF9kZXYgPSBwcml2X2RldjsNCj4+ ICsJcHJpdl9kZXYtPnN5c2RldiA9IGNkbnMtPmRldjsNCj4+ICsJcHJpdl9kZXYtPmRldiA9IGNk bnMtPmRldjsNCj4+ICsJcHJpdl9kZXYtPnJlZ3MgPSBjZG5zLT5kZXZfcmVnczsNCj4+ICsNCj4+ ICsJbWF4X3NwZWVkID0gdXNiX2dldF9tYXhpbXVtX3NwZWVkKGNkbnMtPmRldik7DQo+PiArDQo+ PiArCS8qIENoZWNrIHRoZSBtYXhpbXVtX3NwZWVkIHBhcmFtZXRlciAqLw0KPj4gKwlzd2l0Y2gg KG1heF9zcGVlZCkgew0KPj4gKwljYXNlIFVTQl9TUEVFRF9GVUxMOg0KPj4gKwljYXNlIFVTQl9T UEVFRF9ISUdIOg0KPj4gKwljYXNlIFVTQl9TUEVFRF9TVVBFUjoNCj4+ICsJCWJyZWFrOw0KPj4g KwlkZWZhdWx0Og0KPj4gKwkJZGV2X2VycihjZG5zLT5kZXYsICJpbnZhbGlkIG1heGltdW1fc3Bl ZWQgcGFyYW1ldGVyICVkXG4iLA0KPj4gKwkJCW1heF9zcGVlZCk7DQo+PiArCQkvKiBmYWxsIHRo cm91Z2ggKi8NCj4+ICsJY2FzZSBVU0JfU1BFRURfVU5LTk9XTjoNCj4+ICsJCS8qIGRlZmF1bHQg dG8gc3VwZXJzcGVlZCAqLw0KPj4gKwkJbWF4X3NwZWVkID0gVVNCX1NQRUVEX1NVUEVSOw0KPj4g KwkJYnJlYWs7DQo+PiArCX0NCj4+ICsNCj4+ICsJLyogZmlsbCBnYWRnZXQgZmllbGRzICovDQo+ PiArCXByaXZfZGV2LT5nYWRnZXQubWF4X3NwZWVkID0gbWF4X3NwZWVkOw0KPj4gKwlwcml2X2Rl di0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX1VOS05PV047DQo+PiArCXByaXZfZGV2LT5nYWRn ZXQub3BzID0gJmNkbnMzX2dhZGdldF9vcHM7DQo+PiArCXByaXZfZGV2LT5nYWRnZXQubmFtZSA9 ICJ1c2Itc3MtZ2FkZ2V0IjsNCj4+ICsJcHJpdl9kZXYtPmdhZGdldC5zZ19zdXBwb3J0ZWQgPSAx Ow0KPj4gKw0KPj4gKwlzcGluX2xvY2tfaW5pdCgmcHJpdl9kZXYtPmxvY2spOw0KPj4gKwlJTklU X1dPUksoJnByaXZfZGV2LT5wZW5kaW5nX3N0YXR1c193cSwNCj4+ICsJCSAgY2RuczNfcGVuZGlu Z19zZXR1cF9zdGF0dXNfaGFuZGxlcik7DQo+PiArDQo+PiArCS8qIGluaXRpYWxpemUgZW5kcG9p bnQgY29udGFpbmVyICovDQo+PiArCUlOSVRfTElTVF9IRUFEKCZwcml2X2Rldi0+Z2FkZ2V0LmVw X2xpc3QpOw0KPj4gKw0KPj4gKwlyZXQgPSBjZG5zM19pbml0X2Vwcyhwcml2X2Rldik7DQo+PiAr CWlmIChyZXQpIHsNCj4+ICsJCWRldl9lcnIocHJpdl9kZXYtPmRldiwgIkZhaWxlZCB0byBjcmVh dGUgZW5kcG9pbnRzXG4iKTsNCj4+ICsJCWdvdG8gZXJyMTsNCj4+ICsJfQ0KPj4gKw0KPj4gKwkv KiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHNldHVwIHBhY2tldCBidWZmZXIgKi8NCj4+ICsJcHJpdl9k ZXYtPnNldHVwX2J1ZiA9IGRtYV9hbGxvY19jb2hlcmVudChwcml2X2Rldi0+c3lzZGV2LCA4LA0K Pj4gKwkJCQkJCSAmcHJpdl9kZXYtPnNldHVwX2RtYSwgR0ZQX0RNQSk7DQo+PiArCWlmICghcHJp dl9kZXYtPnNldHVwX2J1Zikgew0KPj4gKwkJZGV2X2Vycihwcml2X2Rldi0+ZGV2LCAiRmFpbGVk IHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgU0VUVVAgYnVmZmVyXG4iKTsNCj4+ICsJCXJldCA9IC1F Tk9NRU07DQo+PiArCQlnb3RvIGVycjI7DQo+PiArCX0NCj4+ICsNCj4+ICsJcHJpdl9kZXYtPmRl dl92ZXIgPSByZWFkbCgmcHJpdl9kZXYtPnJlZ3MtPnVzYl9jYXA2KTsNCj4+ICsJZGV2X2RiZyhw cml2X2Rldi0+ZGV2LCAiRGV2aWNlIENvbnRyb2xsZXIgdmVyc2lvbjogJTA4eFxuIiwNCj4+ICsJ CXJlYWRsKCZwcml2X2Rldi0+cmVncy0+dXNiX2NhcDYpKTsNCj4+ICsJZGV2X2RiZyhwcml2X2Rl di0+ZGV2LCAiVVNCIENhcGFiaWxpdGllczo6ICUwOHhcbiIsDQo+PiArCQlyZWFkbCgmcHJpdl9k ZXYtPnJlZ3MtPnVzYl9jYXAxKSk7DQo+PiArCWRldl9kYmcocHJpdl9kZXYtPmRldiwgIk9uLUNo aXAgbWVtb3J5IGNuZmlndXJhdGlvbjogJTA4eFxuIiwNCj4+ICsJCXJlYWRsKCZwcml2X2Rldi0+ cmVncy0+dXNiX2NhcDIpKTsNCj4+ICsNCj4+ICsJcHJpdl9kZXYtPnpscF9idWYgPSBremFsbG9j KENETlMzX0VQX1pMUF9CVUZfU0laRSwgR0ZQX0tFUk5FTCk7DQo+PiArCWlmICghcHJpdl9kZXYt PnpscF9idWYpIHsNCj4+ICsJCXJldCA9IC1FTk9NRU07DQo+PiArCQlnb3RvIGVycjM7DQo+PiAr CX0NCj4+ICsNCj4+ICsJLyogYWRkIFVTQiBnYWRnZXQgZGV2aWNlICovDQo+PiArCXJldCA9IHVz Yl9hZGRfZ2FkZ2V0X3VkYyhwcml2X2Rldi0+ZGV2LCAmcHJpdl9kZXYtPmdhZGdldCk7DQo+PiAr CWlmIChyZXQgPCAwKSB7DQo+PiArCQlkZXZfZXJyKHByaXZfZGV2LT5kZXYsDQo+PiArCQkJIkZh aWxlZCB0byByZWdpc3RlciBVU0IgZGV2aWNlIGNvbnRyb2xsZXJcbiIpOw0KPj4gKwkJZ290byBl cnI0Ow0KPj4gKwl9DQo+PiArDQo+PiArCXJldHVybiAwOw0KPj4gK2VycjQ6DQo+PiArCWtmcmVl KHByaXZfZGV2LT56bHBfYnVmKTsNCj4+ICtlcnIzOg0KPj4gKwlkbWFfZnJlZV9jb2hlcmVudChw cml2X2Rldi0+c3lzZGV2LCA4LCBwcml2X2Rldi0+c2V0dXBfYnVmLA0KPj4gKwkJCSAgcHJpdl9k ZXYtPnNldHVwX2RtYSk7DQo+PiArZXJyMjoNCj4+ICsJY2RuczNfZnJlZV9hbGxfZXBzKHByaXZf ZGV2KTsNCj4+ICtlcnIxOg0KPj4gKwljZG5zLT5nYWRnZXRfZGV2ID0gTlVMTDsNCj4+ICsJcmV0 dXJuIHJldDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBfX2NkbnMzX2dhZGdldF9pbml0 KHN0cnVjdCBjZG5zMyAqY2RucykNCj4+ICt7DQo+PiArCXN0cnVjdCBjZG5zM19kZXZpY2UgKnBy aXZfZGV2Ow0KPj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KPj4gKwlpbnQgcmV0ID0gMDsNCj4+ ICsNCj4+ICsJcmV0ID0gY2RuczNfZ2FkZ2V0X3N0YXJ0KGNkbnMpOw0KPj4gKwlpZiAocmV0KQ0K Pj4gKwkJcmV0dXJuIHJldDsNCj4+ICsNCj4+ICsJcHJpdl9kZXYgPSBjZG5zLT5nYWRnZXRfZGV2 Ow0KPj4gKwlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGNkbnMtPmRldiwgY2Rucy0+ aXJxLA0KPj4gKwkJCQkJY2RuczNfZGV2aWNlX2lycV9oYW5kbGVyLA0KPj4gKwkJCQkJY2RuczNf ZGV2aWNlX3RocmVhZF9pcnFfaGFuZGxlciwNCj4+ICsJCQkJCUlSUUZfU0hBUkVELCBkZXZfbmFt ZShjZG5zLT5kZXYpLCBjZG5zKTsNCj4+ICsJaWYgKHJldCkNCj4+ICsJCWdvdG8gZXJyMDsNCj4+ ICsNCj4+ICsJcG1fcnVudGltZV9nZXRfc3luYyhjZG5zLT5kZXYpOw0KPnBtX3J1bnRpbWVfZ2V0 X3N5bmMoKSBzaG91bGQgYmUgZG9uZSBiZWZvcmUgY2RuczNfZ2FkZ2V0X3N0YXJ0KCkNCk9rLg0K Pg0KPj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdl9kZXYtPmxvY2ssIGZsYWdzKTsNCj4+ICsJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdl9kZXYtPmxvY2ssIGZsYWdzKTsNCj4NCj5SZWR1 bmRhbnQgc3BpbmxvY2sgdXNhZ2U/DQo+DQo+PiArCXJldHVybiAwOw0KPj4gK2VycjA6DQo+PiAr CWNkbnMzX2dhZGdldF9leGl0KGNkbnMpOw0KPj4gKwlyZXR1cm4gcmV0Ow0KPj4gK30NCj4+ICsN Cj4+ICtzdGF0aWMgaW50IGNkbnMzX2dhZGdldF9zdXNwZW5kKHN0cnVjdCBjZG5zMyAqY2Rucywg Ym9vbCBkb193YWtldXApDQo+PiArew0KPj4gKwljZG5zM19nYWRnZXRfZGlzYWJsZShjZG5zKTsN Cj4NCj5Eb2VzIHRoaXMgZW5zdXJlIGdhZGdldCBjb250cm9sbGVyIGlzIHN0b3BwZWQ/DQoNClll cy4gDQo+DQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGNkbnMz X2dhZGdldF9yZXN1bWUoc3RydWN0IGNkbnMzICpjZG5zLCBib29sIGhpYmVybmF0ZWQpDQo+PiAr ew0KPj4gKwlzdHJ1Y3QgY2RuczNfZGV2aWNlICpwcml2X2RldjsNCj4+ICsJdW5zaWduZWQgbG9u ZyBmbGFnczsNCj4+ICsNCj4+ICsJcHJpdl9kZXYgPSBjZG5zLT5nYWRnZXRfZGV2Ow0KPj4gKwlz cGluX2xvY2tfaXJxc2F2ZSgmcHJpdl9kZXYtPmxvY2ssIGZsYWdzKTsNCj4+ICsNCj4+ICsJaWYg KCFwcml2X2Rldi0+Z2FkZ2V0X2RyaXZlcikgew0KPj4gKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmcHJpdl9kZXYtPmxvY2ssIGZsYWdzKTsNCj4+ICsJCXJldHVybiAwOw0KPj4gKwl9DQo+PiAr DQo+PiArCWNkbnMzX2dhZGdldF9jb25maWcocHJpdl9kZXYpOw0KPj4gKwlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZwcml2X2Rldi0+bG9jaywgZmxhZ3MpOw0KPj4gKwlyZXR1cm4gMDsNCj4+ICt9 DQo+PiArDQo+PiArLyoqDQo+PiArICogY2RuczNfZ2FkZ2V0X2luaXQgLSBpbml0aWFsaXplIGRl dmljZSBzdHJ1Y3R1cmUNCj4+ICsgKg0KPj4gKyAqIGNkbnM6IGNkbnMzIGluc3RhbmNlDQo+PiAr ICoNCj4+ICsgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBnYWRnZXQuDQo+PiArICov DQo+PiAraW50IGNkbnMzX2dhZGdldF9pbml0KHN0cnVjdCBjZG5zMyAqY2RucykNCj4+ICt7DQo+ PiArCXN0cnVjdCBjZG5zM19yb2xlX2RyaXZlciAqcmRydjsNCj4+ICsNCj4+ICsJcmRydiA9IGRl dm1fa3phbGxvYyhjZG5zLT5kZXYsIHNpemVvZigqcmRydiksIEdGUF9LRVJORUwpOw0KPj4gKwlp ZiAoIXJkcnYpDQo+PiArCQlyZXR1cm4gLUVOT01FTTsNCj4+ICsNCj4+ICsJcmRydi0+c3RhcnQJ PSBfX2NkbnMzX2dhZGdldF9pbml0Ow0KPj4gKwlyZHJ2LT5zdG9wCT0gY2RuczNfZ2FkZ2V0X2V4 aXQ7DQo+PiArCXJkcnYtPnN1c3BlbmQJPSBjZG5zM19nYWRnZXRfc3VzcGVuZDsNCj4+ICsJcmRy di0+cmVzdW1lCT0gY2RuczNfZ2FkZ2V0X3Jlc3VtZTsNCj4+ICsJcmRydi0+c3RhdGUJPSBDRE5T M19ST0xFX1NUQVRFX0lOQUNUSVZFOw0KPj4gKwlyZHJ2LT5uYW1lCT0gImdhZGdldCI7DQo+PiAr CWNkbnMtPnJvbGVzW0NETlMzX1JPTEVfR0FER0VUXSA9IHJkcnY7DQo+PiArDQo+PiArCXJldHVy biAwOw0KPj4gK30NCj4NCj48c25pcD4NCj4NCj4tLQ0KPmNoZWVycywNCj4tcm9nZXINCj5UZXhh cyBJbnN0cnVtZW50cyBGaW5sYW5kIE95LCBQb3Jra2FsYW5rYXR1IDIyLCAwMDE4MCBIZWxzaW5r aS4NCj5ZLXR1bm51cy9CdXNpbmVzcyBJRDogMDYxNTUyMS00LiBLb3RpcGFpa2thL0RvbWljaWxl OiBIZWxzaW5raQ0KDQpDaGVlcnMsDQpQYXdlbA0K From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v4,5/6] usb:cdns3 Add Cadence USB3 DRD Driver From: Pawel Laszczak Message-Id: Date: Thu, 7 Mar 2019 05:37:33 +0000 To: Roger Quadros , "devicetree@vger.kernel.org" Cc: "gregkh@linuxfoundation.org" , "felipe.balbi@linux.intel.com" , "mark.rutland@arm.com" , "linux-usb@vger.kernel.org" , "hdegoede@redhat.com" , "heikki.krogerus@linux.intel.com" , "andy.shevchenko@gmail.com" , "robh+dt@kernel.org" , "linux-kernel@vger.kernel.org" , "jbergsagel@ti.com" , "nsekhar@ti.com" , "nm@ti.com" , Suresh Punnoose , "peter.chen@nxp.com" , Rahul Kumar List-ID: SGksDQoNCj5QYXdlbCwNCj4NCj5PbiAxNC8wMi8yMDE5IDIxOjQ1LCBQYXdlbCBMYXN6Y3phayB3 cm90ZToNCj4+IFRoaXMgcGF0Y2ggaW50cm9kdWNlIG5ldyBDYWRlbmNlIFVTQlNTIERSRCBkcml2 ZXIgdG8gbGludXgga2VybmVsLg0KPj4NCj4+IFRoZSBDYWRlbmNlIFVTQlNTIERSRCBEcml2ZXIg aXMgYSBoaWdobHkgY29uZmlndXJhYmxlIElQIENvcmUgd2hpY2hpDQo+PiBjYW4gYmUgaW5zdGFu dGlhdGVkIGFzIER1YWwtUm9sZSBEZXZpY2UgKERSRCksIFBlcmlwaGVyYWwgT25seSBhbmQNCj4+ IEhvc3QgT25seSAoWEhDSSljb25maWd1cmF0aW9ucy4NCj4+DQo+PiBUaGUgY3VycmVudCBkcml2 ZXIgaGFzIGJlZW4gdmFsaWRhdGVkIHdpdGggRlBHQSBidXJuZWQuIFdlIGhhdmUgc3VwcG9ydA0K Pj4gZm9yIFBDSWUgYnVzLCB3aGljaCBpcyB1c2VkIG9uIEZQR0EgcHJvdG90eXBpbmcuDQo+Pg0K Pj4gVGhlIGhvc3Qgc2lkZSBvZiBVU0JTUy1EUkQgY29udHJvbGxlciBpcyBjb21wbGlhbmNlIHdp dGggWEhDSQ0KPj4gc3BlY2lmaWNhdGlvbiwgc28gaXQgd29ya3Mgd2l0aCBzdGFuZGFyZCBYSENJ IGxpbnV4IGRyaXZlci4NCj4+DQo+PiBTaWduZWQtb2ZmLWJ5OiBQYXdlbCBMYXN6Y3phayA8cGF3 ZWxsQGNhZGVuY2UuY29tPg0KPj4gLS0tDQo+PiAgZHJpdmVycy91c2IvS2NvbmZpZyAgICAgICAg ICAgICAgICB8ICAgIDIgKw0KPj4gIGRyaXZlcnMvdXNiL01ha2VmaWxlICAgICAgICAgICAgICAg fCAgICAyICsNCj4+ICBkcml2ZXJzL3VzYi9jZG5zMy9LY29uZmlnICAgICAgICAgIHwgICA0NCAr DQo+PiAgZHJpdmVycy91c2IvY2RuczMvTWFrZWZpbGUgICAgICAgICB8ICAgMTQgKw0KPj4gIGRy aXZlcnMvdXNiL2NkbnMzL2NkbnMzLXBjaS13cmFwLmMgfCAgMTU1ICsrKw0KPj4gIGRyaXZlcnMv dXNiL2NkbnMzL2NvcmUuYyAgICAgICAgICAgfCAgNDAzICsrKysrKw0KPj4gIGRyaXZlcnMvdXNi L2NkbnMzL2NvcmUuaCAgICAgICAgICAgfCAgMTE2ICsrDQo+PiAgZHJpdmVycy91c2IvY2RuczMv ZGVidWcuaCAgICAgICAgICB8ICAxNjggKysrDQo+PiAgZHJpdmVycy91c2IvY2RuczMvZGVidWdm cy5jICAgICAgICB8ICAxNjQgKysrDQo+PiAgZHJpdmVycy91c2IvY2RuczMvZHJkLmMgICAgICAg ICAgICB8ICAzNjUgKysrKysNCj4+ICBkcml2ZXJzL3VzYi9jZG5zMy9kcmQuaCAgICAgICAgICAg IHwgIDE2MiArKysNCj4+ICBkcml2ZXJzL3VzYi9jZG5zMy9lcDAuYyAgICAgICAgICAgIHwgIDkw NyArKysrKysrKysrKysrDQo+PiAgZHJpdmVycy91c2IvY2RuczMvZ2FkZ2V0LWV4cG9ydC5oICB8 ICAgMjggKw0KPj4gIGRyaXZlcnMvdXNiL2NkbnMzL2dhZGdldC5jICAgICAgICAgfCAyMDAzICsr KysrKysrKysrKysrKysrKysrKysrKysrKysNCj4+ICBkcml2ZXJzL3VzYi9jZG5zMy9nYWRnZXQu aCAgICAgICAgIHwgMTIwNyArKysrKysrKysrKysrKysrKw0KPj4gIGRyaXZlcnMvdXNiL2NkbnMz L2hvc3QtZXhwb3J0LmggICAgfCAgIDI4ICsNCj4+ICBkcml2ZXJzL3VzYi9jZG5zMy9ob3N0LmMg ICAgICAgICAgIHwgICA3MiArDQo+PiAgZHJpdmVycy91c2IvY2RuczMvdHJhY2UuYyAgICAgICAg ICB8ICAgMjMgKw0KPj4gIGRyaXZlcnMvdXNiL2NkbnMzL3RyYWNlLmggICAgICAgICAgfCAgNDA0 ICsrKysrKw0KPj4gIDE5IGZpbGVzIGNoYW5nZWQsIDYyNjcgaW5zZXJ0aW9ucygrKQ0KPj4gIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9jZG5zMy9LY29uZmlnDQo+PiAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL2NkbnMzL01ha2VmaWxlDQo+PiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvdXNiL2NkbnMzL2NkbnMzLXBjaS13cmFwLmMNCj4+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy91c2IvY2RuczMvY29yZS5jDQo+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvdXNiL2NkbnMzL2NvcmUuaA0KPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3Vz Yi9jZG5zMy9kZWJ1Zy5oDQo+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL2NkbnMz L2RlYnVnZnMuYw0KPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9jZG5zMy9kcmQu Yw0KPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9jZG5zMy9kcmQuaA0KPj4gIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9jZG5zMy9lcDAuYw0KPj4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL3VzYi9jZG5zMy9nYWRnZXQtZXhwb3J0LmgNCj4+ICBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy91c2IvY2RuczMvZ2FkZ2V0LmMNCj4+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy91c2IvY2RuczMvZ2FkZ2V0LmgNCj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy91c2IvY2RuczMvaG9zdC1leHBvcnQuaA0KPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL3VzYi9jZG5zMy9ob3N0LmMNCj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2Iv Y2RuczMvdHJhY2UuYw0KPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9jZG5zMy90 cmFjZS5oDQo+Pg0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL0tjb25maWcgYi9kcml2ZXJz L3VzYi9LY29uZmlnDQo+PiBpbmRleCA5ODdmYzViYTYzMjEuLjVmOTMzNDAxOWQwNCAxMDA2NDQN Cj4+IC0tLSBhL2RyaXZlcnMvdXNiL0tjb25maWcNCj4+ICsrKyBiL2RyaXZlcnMvdXNiL0tjb25m aWcNCj4+IEBAIC0xMTIsNiArMTEyLDggQEAgc291cmNlICJkcml2ZXJzL3VzYi91c2JpcC9LY29u ZmlnIg0KPj4NCj4+ICBlbmRpZg0KPj4NCj4+ICtzb3VyY2UgImRyaXZlcnMvdXNiL2NkbnMzL0tj b25maWciDQo+PiArDQo+PiAgc291cmNlICJkcml2ZXJzL3VzYi9tdHUzL0tjb25maWciDQo+Pg0K Pj4gIHNvdXJjZSAiZHJpdmVycy91c2IvbXVzYi9LY29uZmlnIg0KPj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvdXNiL01ha2VmaWxlIGIvZHJpdmVycy91c2IvTWFrZWZpbGUNCj4+IGluZGV4IDdkMWI4 YzgyYjIwOC4uYWIxMjViOTY2Y2FjIDEwMDY0NA0KPj4gLS0tIGEvZHJpdmVycy91c2IvTWFrZWZp bGUNCj4+ICsrKyBiL2RyaXZlcnMvdXNiL01ha2VmaWxlDQo+PiBAQCAtMTIsNiArMTIsOCBAQCBv YmotJChDT05GSUdfVVNCX0RXQzMpCQkrPSBkd2MzLw0KPj4gIG9iai0kKENPTkZJR19VU0JfRFdD MikJCSs9IGR3YzIvDQo+PiAgb2JqLSQoQ09ORklHX1VTQl9JU1AxNzYwKQkrPSBpc3AxNzYwLw0K Pj4NCj4+ICtvYmotJChDT05GSUdfVVNCX0NETlMzKQkJKz0gY2RuczMvDQo+PiArDQo+PiAgb2Jq LSQoQ09ORklHX1VTQl9NT04pCQkrPSBtb24vDQo+PiAgb2JqLSQoQ09ORklHX1VTQl9NVFUzKQkJ Kz0gbXR1My8NCj4+DQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2RuczMvS2NvbmZpZyBi L2RyaXZlcnMvdXNiL2NkbnMzL0tjb25maWcNCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+PiBp bmRleCAwMDAwMDAwMDAwMDAuLjI3Y2IzZDhkYmUzZA0KPj4gLS0tIC9kZXYvbnVsbA0KPj4gKysr IGIvZHJpdmVycy91c2IvY2RuczMvS2NvbmZpZw0KPj4gQEAgLTAsMCArMSw0NCBAQA0KPj4gK2Nv bmZpZyBVU0JfQ0ROUzMNCj4+ICsJdHJpc3RhdGUgIkNhZGVuY2UgVVNCMyBEdWFsLVJvbGUgQ29u dHJvbGxlciINCj4+ICsJZGVwZW5kcyBvbiBVU0JfU1VQUE9SVCAmJiAoVVNCIHx8IFVTQl9HQURH RVQpICYmIEhBU19ETUENCj4+ICsJaGVscA0KPj4gKwkgIFNheSBZIGhlcmUgaWYgeW91ciBzeXN0 ZW0gaGFzIGEgY2FkZW5jZSBVU0IzIGR1YWwtcm9sZSBjb250cm9sbGVyLg0KPj4gKwkgIEl0IHN1 cHBvcnRzOiBkdWFsLXJvbGUgc3dpdGNoLCBIb3N0LW9ubHksIGFuZCBQZXJpcGhlcmFsLW9ubHku DQo+PiArDQo+PiArCSAgSWYgeW91IGNob29zZSB0byBidWlsZCB0aGlzIGRyaXZlciBpcyBhIGR5 bmFtaWNhbGx5IGxpbmtlZA0KPj4gKwkgIGFzIG1vZHVsZSwgdGhlIG1vZHVsZSB3aWxsIGJlIGNh bGxlZCBjZG5zMy5rby4NCj4+ICsNCj4+ICtpZiBVU0JfQ0ROUzMNCj4+ICsNCj4+ICtjb25maWcg VVNCX0NETlMzX0dBREdFVA0KPj4gKyAgICAgICAgYm9vbCAiQ2FkZW5jZSBVU0IzIGRldmljZSBj b250cm9sbGVyIg0KPj4gKyAgICAgICAgZGVwZW5kcyBvbiBVU0JfR0FER0VUDQo+PiArICAgICAg ICBoZWxwDQo+PiArICAgICAgICAgIFNheSBZIGhlcmUgdG8gZW5hYmxlIGRldmljZSBjb250cm9s bGVyIGZ1bmN0aW9uYWxpdHkgb2YgdGhlDQo+PiArICAgICAgICAgIGNhZGVuY2UgVVNCU1MtREVW IGRyaXZlci4NCj4NCj4iQ2FkZW5jZSIgPw0KPg0KPj4gKw0KPj4gKyAgICAgICAgICBUaGlzIGNv bnRyb2xsZXIgc3VwcG9ydHMgRkYsIEhTIGFuZCBTUyBtb2RlLiBJdCBkb2Vzbid0IHN1cHBvcnQN Cj4+ICsgICAgICAgICAgTFMgYW5kIFNTUCBtb2RlLg0KPj4gKw0KPj4gK2NvbmZpZyBVU0JfQ0RO UzNfSE9TVA0KPj4gKyAgICAgICAgYm9vbCAiQ2FkZW5jZSBVU0IzIGhvc3QgY29udHJvbGxlciIN Cj4+ICsgICAgICAgIGRlcGVuZHMgb24gVVNCX1hIQ0lfSENEDQo+PiArICAgICAgICBoZWxwDQo+ PiArICAgICAgICAgIFNheSBZIGhlcmUgdG8gZW5hYmxlIGhvc3QgY29udHJvbGxlciBmdW5jdGlv bmFsaXR5IG9mIHRoZQ0KPj4gKyAgICAgICAgICBjYWRlbmNlIGRyaXZlci4NCj4+ICsNCj4+ICsg ICAgICAgICAgSG9zdCBjb250cm9sbGVyIGlzIGNvbXBsaWFudCB3aXRoIFhIQ0kgc28gaXQgd2ls bCB1c2UNCj4+ICsgICAgICAgICAgc3RhbmRhcmQgWEhDSSBkcml2ZXIuDQo+PiArDQo+PiArY29u ZmlnIFVTQl9DRE5TM19QQ0lfV1JBUA0KPj4gKwl0cmlzdGF0ZSAiQ2FkZW5jZSBVU0IzIHN1cHBv cnQgb24gUENJZS1iYXNlZCBwbGF0Zm9ybXMiDQo+PiArCWRlcGVuZHMgb24gVVNCX1BDSSAmJiBB Q1BJDQo+PiArCWRlZmF1bHQgVVNCX0NETlMzDQo+PiArCWhlbHANCj4+ICsJICBJZiB5b3UncmUg dXNpbmcgdGhlIFVTQlNTIENvcmUgSVAgd2l0aCBhIFBDSWUsIHBsZWFzZSBzYXkNCj4+ICsJICAn WScgb3IgJ00nIGhlcmUuDQo+PiArDQo+PiArCSAgSWYgeW91IGNob29zZSB0byBidWlsZCB0aGlz IGRyaXZlciBhcyBtb2R1bGUgaXQgd2lsbA0KPj4gKwkgIGJlIGR5bmFtaWNhbGx5IGxpbmtlZCBh bmQgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNkbnMzLXBjaS5rbw0KPj4gKw0KPj4gK2VuZGlmDQo+ PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2RuczMvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9j ZG5zMy9NYWtlZmlsZQ0KPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4+IGluZGV4IDAwMDAwMDAw MDAwMC4uOGY5NDM4NTkzMzc1DQo+PiAtLS0gL2Rldi9udWxsDQo+PiArKysgYi9kcml2ZXJzL3Vz Yi9jZG5zMy9NYWtlZmlsZQ0KPj4gQEAgLTAsMCArMSwxNCBAQA0KPj4gKyMgU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjANCj4+ICsjIGRlZmluZV90cmFjZS5oIG5lZWRzIHRvIGtub3cg aG93IHRvIGZpbmQgb3VyIGhlYWRlcg0KPj4gK0NGTEFHU190cmFjZS5vCQkJCTo9IC1JJChzcmMp DQo+PiArDQo+PiArY2RuczMteQkJCQkJOj0gY29yZS5vIGRyZC5vIHRyYWNlLm8NCj4+ICsNCj4+ ICtvYmotJChDT05GSUdfVVNCX0NETlMzKQkJCSs9IGNkbnMzLm8NCj4+ICtpZm5lcSAoJChDT05G SUdfREVCVUdfRlMpLCkNCj4+ICsJY2RuczMteQkJCQkrPSBkZWJ1Z2ZzLm8NCj4+ICtlbmRpZg0K Pj4gKw0KPj4gK2NkbnMzLSQoQ09ORklHX1VTQl9DRE5TM19HQURHRVQpCSs9IGdhZGdldC5vIGVw MC5vDQo+PiArY2RuczMtJChDT05GSUdfVVNCX0NETlMzX0hPU1QpCQkrPSBob3N0Lm8NCj4+ICtv YmotJChDT05GSUdfVVNCX0NETlMzX1BDSV9XUkFQKQkrPSBjZG5zMy1wY2ktd3JhcC5vDQo+PiBk aWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2RuczMvY2RuczMtcGNpLXdyYXAuYyBiL2RyaXZlcnMv dXNiL2NkbnMzL2NkbnMzLXBjaS13cmFwLmMNCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+PiBp bmRleCAwMDAwMDAwMDAwMDAuLmQwYjJkM2Q5Yjk4Mw0KPj4gLS0tIC9kZXYvbnVsbA0KPj4gKysr IGIvZHJpdmVycy91c2IvY2RuczMvY2RuczMtcGNpLXdyYXAuYw0KPj4gQEAgLTAsMCArMSwxNTUg QEANCj4+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KPj4gKy8qDQo+PiAr ICogQ2FkZW5jZSBVU0JTUyBQQ0kgR2x1ZSBkcml2ZXINCj4+ICsgKg0KPj4gKyAqIENvcHlyaWdo dCAoQykgMjAxOCBDYWRlbmNlLg0KPg0KPjIwMTgtMjAxOT8NCj4NCj4+ICsgKg0KPj4gKyAqIEF1 dGhvcjogUGF3ZWwgTGFzemN6YWsgPHBhd2VsbEBjYWRlbmNlLmNvbT4NCj4+ICsgKi8NCj4+ICsN Cj4+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L21vZHVs ZS5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgvcGxh dGZvcm1fZGV2aWNlLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+DQo+PiAr I2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4NCj4+ICsNCj4+ICtzdHJ1Y3QgY2RuczNfd3JhcCB7DQo+ PiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRfZGV2Ow0KPj4gKwlzdHJ1Y3QgcGNpX2Rl diAqaGdfZGV2Ow0KPj4gKwlzdHJ1Y3QgcmVzb3VyY2UgZGV2X3Jlc1s0XTsNCj4+ICt9Ow0KPj4g Kw0KPj4gK3N0cnVjdCBjZG5zM193cmFwIHdyYXA7DQo+PiArDQo+PiArI2RlZmluZSBSRVNfSVJR X0lECQkwDQo+PiArI2RlZmluZSBSRVNfSE9TVF9JRAkJMQ0KPj4gKyNkZWZpbmUgUkVTX0RFVl9J RAkJMg0KPj4gKyNkZWZpbmUgUkVTX0RSRF9JRAkJMw0KPj4gKw0KPj4gKyNkZWZpbmUgUENJX0JB Ul9IT1NUCQkwDQo+PiArI2RlZmluZSBQQ0lfQkFSX0RFVgkJMg0KPj4gKyNkZWZpbmUgUENJX0JB Ul9PVEcJCTQNCj4+ICsNCj4+ICsjZGVmaW5lIFBDSV9ERVZfRk5fSE9TVF9ERVZJQ0UJMA0KPj4g KyNkZWZpbmUgUENJX0RFVl9GTl9PVEcJCTENCj4+ICsNCj4+ICsjZGVmaW5lIFBDSV9EUklWRVJf TkFNRQkJImNkbnMzLXBjaS11c2JzcyINCj4+ICsjZGVmaW5lIFBMQVRfRFJJVkVSX05BTUUJImNk bnMtdXNiMyINCj4+ICsNCj4+ICsjZGVmaW5lIENETlNfVkVORE9SX0lEIDB4MTdjZA0KPj4gKyNk ZWZpbmUgQ0ROU19ERVZJQ0VfSUQgMHgwMTAwDQo+PiArDQo+PiArLyoqDQo+PiArICogY2RuczNf cGNpX3Byb2JlIC0gUHJvYmUgZnVuY3Rpb24gZm9yIENhZGVuY2UgVVNCIHdyYXBwZXIgZHJpdmVy DQo+PiArICogQHBkZXY6IHBsYXRmb3JtIGRldmljZSBvYmplY3QNCj4+ICsgKiBAaWQ6IHBjaSBk ZXZpY2UgaWQNCj4+ICsgKg0KPj4gKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG90aGVyd2lzZSBu ZWdhdGl2ZSBlcnJubw0KPj4gKyAqLw0KPj4gK3N0YXRpYyBpbnQgY2RuczNfcGNpX3Byb2JlKHN0 cnVjdCBwY2lfZGV2ICpwZGV2LA0KPj4gKwkJCSAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lk ICppZCkNCj4+ICt7DQo+PiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaW5mbyBwbGF0X2luZm87 DQo+PiArCXN0cnVjdCBjZG5zM193cmFwICp3cmFwOw0KPj4gKwlzdHJ1Y3QgcmVzb3VyY2UgKnJl czsNCj4+ICsJaW50IGVycjsNCj4+ICsNCj4+ICsJLyoNCj4+ICsJICogZm9yIEdBREdFVC9IT1NU IFBDSSAoZGV2Zm4pIGZ1bmN0aW9uIG51bWJlciBpcyAwLA0KPj4gKwkgKiBmb3IgT1RHIFBDSSAo ZGV2Zm4pIGZ1bmN0aW9uIG51bWJlciBpcyAxDQo+PiArCSAqLw0KPj4gKwlpZiAoIWlkIHx8IHBk ZXYtPmRldmZuICE9IFBDSV9ERVZfRk5fSE9TVF9ERVZJQ0UpDQo+PiArCQlyZXR1cm4gLUVJTlZB TDsNCj4+ICsNCj4+ICsJZXJyID0gcGNpbV9lbmFibGVfZGV2aWNlKHBkZXYpOw0KPj4gKwlpZiAo ZXJyKSB7DQo+PiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJFbmFibGluZyBQQ0kgZGV2aWNlIGhh cyBmYWlsZWQgJWRcbiIsIGVycik7DQo+PiArCQlyZXR1cm4gZXJyOw0KPj4gKwl9DQo+PiArDQo+ PiArCXBjaV9zZXRfbWFzdGVyKHBkZXYpOw0KPj4gKwl3cmFwID0gZGV2bV9remFsbG9jKCZwZGV2 LT5kZXYsIHNpemVvZigqd3JhcCksIEdGUF9LRVJORUwpOw0KPj4gKwlpZiAoIXdyYXApIHsNCj4+ ICsJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnlcbiIpOw0K Pj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+PiArCX0NCj4+ICsNCj4+ICsJLyogZnVuY3Rpb24gMDog aG9zdChCQVJfMCkgKyBkZXZpY2UoQkFSXzEpICsgb3RnKEJBUl8yKSkuICovDQo+PiArCW1lbXNl dCh3cmFwLT5kZXZfcmVzLCAweDAwLA0KPj4gKwkgICAgICAgc2l6ZW9mKHN0cnVjdCByZXNvdXJj ZSkgKiBBUlJBWV9TSVpFKHdyYXAtPmRldl9yZXMpKTsNCj4+ICsJZGV2X2RiZygmcGRldi0+ZGV2 LCAiSW5pdGlhbGl6ZSBEZXZpY2UgcmVzb3VyY2VzXG4iKTsNCj4+ICsJcmVzID0gd3JhcC0+ZGV2 X3JlczsNCj4+ICsNCj4+ICsJcmVzW1JFU19ERVZfSURdLnN0YXJ0ID0gcGNpX3Jlc291cmNlX3N0 YXJ0KHBkZXYsIFBDSV9CQVJfREVWKTsNCj4+ICsJcmVzW1JFU19ERVZfSURdLmVuZCA9ICAgcGNp X3Jlc291cmNlX2VuZChwZGV2LCBQQ0lfQkFSX0RFVik7DQo+PiArCXJlc1tSRVNfREVWX0lEXS5u YW1lID0gImRldiI7DQo+PiArCXJlc1tSRVNfREVWX0lEXS5mbGFncyA9IElPUkVTT1VSQ0VfTUVN Ow0KPj4gKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJVU0JTUy1ERVYgcGh5c2ljYWwgYmFzZSBhZGRy OiAlcGFcbiIsDQo+PiArCQkmcmVzW1JFU19ERVZfSURdLnN0YXJ0KTsNCj4+ICsNCj4+ICsJcmVz W1JFU19IT1NUX0lEXS5zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBQQ0lfQkFSX0hP U1QpOw0KPj4gKwlyZXNbUkVTX0hPU1RfSURdLmVuZCA9IHBjaV9yZXNvdXJjZV9lbmQocGRldiwg UENJX0JBUl9IT1NUKTsNCj4+ICsJcmVzW1JFU19IT1NUX0lEXS5uYW1lID0gInhoY2kiOw0KPj4g KwlyZXNbUkVTX0hPU1RfSURdLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07DQo+PiArCWRldl9kYmco JnBkZXYtPmRldiwgIlVTQlNTLVhIQ0kgcGh5c2ljYWwgYmFzZSBhZGRyOiAlcGFcbiIsDQo+PiAr CQkmcmVzW1JFU19IT1NUX0lEXS5zdGFydCk7DQo+PiArDQo+PiArCXJlc1tSRVNfRFJEX0lEXS5z dGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBQQ0lfQkFSX09URyk7DQo+PiArCXJlc1tS RVNfRFJEX0lEXS5lbmQgPSAgIHBjaV9yZXNvdXJjZV9lbmQocGRldiwgUENJX0JBUl9PVEcpOw0K Pj4gKwlyZXNbUkVTX0RSRF9JRF0ubmFtZSA9ICJvdGciOw0KPj4gKwlyZXNbUkVTX0RSRF9JRF0u ZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsNCj4+ICsJZGV2X2RiZygmcGRldi0+ZGV2LCAiVVNCU1Mt RFJEIHBoeXNpY2FsIGJhc2UgYWRkcjogJXBhXG4iLA0KPj4gKwkJJnJlc1tSRVNfRFJEX0lEXS5z dGFydCk7DQo+PiArDQo+PiArCS8qIEludGVycnVwdCBjb21tb24gZm9yIGJvdGggZGV2aWNlIGFu ZCBYSENJICovDQo+PiArCXdyYXAtPmRldl9yZXNbUkVTX0lSUV9JRF0uc3RhcnQgPSBwZGV2LT5p cnE7DQo+PiArCXdyYXAtPmRldl9yZXNbUkVTX0lSUV9JRF0ubmFtZSA9ICJjZG5zMy1pcnEiOw0K Pj4gKwl3cmFwLT5kZXZfcmVzW1JFU19JUlFfSURdLmZsYWdzID0gSU9SRVNPVVJDRV9JUlE7DQo+ PiArDQo+PiArCS8qIHNldCB1cCBwbGF0Zm9ybSBkZXZpY2UgaW5mbyAqLw0KPj4gKwltZW1zZXQo JnBsYXRfaW5mbywgMCwgc2l6ZW9mKHBsYXRfaW5mbykpOw0KPj4gKwlwbGF0X2luZm8ucGFyZW50 ID0gJnBkZXYtPmRldjsNCj4+ICsJcGxhdF9pbmZvLmZ3bm9kZSA9IHBkZXYtPmRldi5md25vZGU7 DQo+PiArCXBsYXRfaW5mby5uYW1lID0gUExBVF9EUklWRVJfTkFNRTsNCj4+ICsJcGxhdF9pbmZv LmlkID0gcGRldi0+ZGV2Zm47DQo+PiArCXBsYXRfaW5mby5yZXMgPSB3cmFwLT5kZXZfcmVzOw0K Pj4gKwlwbGF0X2luZm8ubnVtX3JlcyA9IEFSUkFZX1NJWkUod3JhcC0+ZGV2X3Jlcyk7DQo+PiAr CXBsYXRfaW5mby5kbWFfbWFzayA9IHBkZXYtPmRtYV9tYXNrOw0KPj4gKw0KPj4gKwkvKiByZWdp c3RlciBwbGF0Zm9ybSBkZXZpY2UgKi8NCj4+ICsJd3JhcC0+cGxhdF9kZXYgPSBwbGF0Zm9ybV9k ZXZpY2VfcmVnaXN0ZXJfZnVsbCgmcGxhdF9pbmZvKTsNCj4+ICsJaWYgKElTX0VSUih3cmFwLT5w bGF0X2RldikpDQo+PiArCQlyZXR1cm4gUFRSX0VSUih3cmFwLT5wbGF0X2Rldik7DQo+PiArDQo+ PiArCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB3cmFwKTsNCj4+ICsNCj4+ICsJcmV0dXJuIGVycjsN Cj4+ICt9DQo+PiArDQo+PiArdm9pZCBjZG5zM19wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpw ZGV2KQ0KPj4gK3sNCj4+ICsJc3RydWN0IGNkbnMzX3dyYXAgKndyYXAgPSAoc3RydWN0IGNkbnMz X3dyYXAgKilwY2lfZ2V0X2RydmRhdGEocGRldik7DQo+PiArDQo+PiArCXBsYXRmb3JtX2Rldmlj ZV91bnJlZ2lzdGVyKHdyYXAtPnBsYXRfZGV2KTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGNv bnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGNkbnMzX3BjaV9pZHNbXSA9IHsNCj4+ICsJeyBQQ0lf REVWSUNFKENETlNfVkVORE9SX0lELCBDRE5TX0RFVklDRV9JRCksIH0sDQo+PiArCXsgMCwgfQ0K Pj4gK307DQo+PiArDQo+PiArc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGNkbnMzX3BjaV9kcml2 ZXIgPSB7DQo+PiArCS5uYW1lID0gUENJX0RSSVZFUl9OQU1FLA0KPj4gKwkuaWRfdGFibGUgPSBj ZG5zM19wY2lfaWRzLA0KPj4gKwkucHJvYmUgPSBjZG5zM19wY2lfcHJvYmUsDQo+PiArCS5yZW1v dmUgPSBjZG5zM19wY2lfcmVtb3ZlLA0KPj4gK307DQo+PiArDQo+PiArbW9kdWxlX3BjaV9kcml2 ZXIoY2RuczNfcGNpX2RyaXZlcik7DQo+PiArTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGNkbnMz X3BjaV9pZHMpOw0KPj4gKw0KPj4gK01PRFVMRV9BVVRIT1IoIlBhd2VsIExhc3pjemFrIDxwYXdl bGxAY2FkZW5jZS5jb20+Iik7DQo+PiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOw0KPj4gK01P RFVMRV9ERVNDUklQVElPTigiQ2FkZW5jZSBVU0JTUyBQQ0kgd3JhcHBlcnIiKTsNCj4+ICsNCj4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jZG5zMy9jb3JlLmMgYi9kcml2ZXJzL3VzYi9jZG5z My9jb3JlLmMNCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+PiBpbmRleCAwMDAwMDAwMDAwMDAu LmFhMmY2MzI0MWRhYg0KPj4gLS0tIC9kZXYvbnVsbA0KPj4gKysrIGIvZHJpdmVycy91c2IvY2Ru czMvY29yZS5jDQo+PiBAQCAtMCwwICsxLDQwMyBAQA0KPj4gKy8vIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wDQo+PiArLyoNCj4+ICsgKiBDYWRlbmNlIFVTQlNTIERSRCBEcml2ZXIu DQo+PiArICoNCj4+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTggQ2FkZW5jZS4NCj4+ICsgKiBDb3B5 cmlnaHQgKEMpIDIwMTctMjAxOCBOWFANCj4+ICsgKg0KPj4gKyAqIEF1dGhvcjogUGV0ZXIgQ2hl biA8cGV0ZXIuY2hlbkBueHAuY29tPg0KPj4gKyAqICAgICAgICAgUGF3ZWwgTGFzemN6YWsgPHBh d2VsbEBjYWRlbmNlLmNvbT4NCj4+ICsgKi8NCj4+ICsNCj4+ICsjaW5jbHVkZSA8bGludXgvbW9k dWxlLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KPj4gKyNpbmNsdWRlIDxsaW51 eC9wbGF0Zm9ybV9kZXZpY2UuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+DQo+ PiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUu aD4NCj4+ICsNCj4+ICsjaW5jbHVkZSAiZ2FkZ2V0LmgiDQo+PiArI2luY2x1ZGUgImNvcmUuaCIN Cj4+ICsjaW5jbHVkZSAiaG9zdC1leHBvcnQuaCINCj4+ICsjaW5jbHVkZSAiZ2FkZ2V0LWV4cG9y dC5oIg0KPj4gKyNpbmNsdWRlICJkcmQuaCINCj4+ICsjaW5jbHVkZSAiZGVidWcuaCINCj4+ICsN Cj4+ICtzdGF0aWMgaW5saW5lDQo+PiArc3RydWN0IGNkbnMzX3JvbGVfZHJpdmVyICpjZG5zM19n ZXRfY3VycmVudF9yb2xlX2RyaXZlcihzdHJ1Y3QgY2RuczMgKmNkbnMpDQo+PiArew0KPj4gKwlX QVJOX09OKGNkbnMtPnJvbGUgPj0gQ0ROUzNfUk9MRV9FTkQgfHwgIWNkbnMtPnJvbGVzW2NkbnMt PnJvbGVdKTsNCj4+ICsJcmV0dXJuIGNkbnMtPnJvbGVzW2NkbnMtPnJvbGVdOw0KPj4gK30NCj4+ ICsNCj4+ICtzdGF0aWMgaW50IGNkbnMzX3JvbGVfc3RhcnQoc3RydWN0IGNkbnMzICpjZG5zLCBl bnVtIGNkbnMzX3JvbGVzIHJvbGUpDQo+PiArew0KPj4gKwlpbnQgcmV0Ow0KPj4gKw0KPj4gKwlp ZiAoV0FSTl9PTihyb2xlID49IENETlMzX1JPTEVfRU5EKSkNCj4+ICsJCXJldHVybiAwOw0KPj4g Kw0KPj4gKwlpZiAoIWNkbnMtPnJvbGVzW3JvbGVdKQ0KPj4gKwkJcmV0dXJuIC1FTlhJTzsNCj4+ ICsNCj4+ICsJaWYgKGNkbnMtPnJvbGVzW3JvbGVdLT5zdGF0ZSA9PSBDRE5TM19ST0xFX1NUQVRF X0FDVElWRSkNCj4+ICsJCXJldHVybiAwOw0KPj4gKw0KPj4gKwltdXRleF9sb2NrKCZjZG5zLT5t dXRleCk7DQo+PiArCWNkbnMtPnJvbGUgPSByb2xlOw0KPj4gKwlyZXQgPSBjZG5zLT5yb2xlc1ty b2xlXS0+c3RhcnQoY2Rucyk7DQo+PiArCWlmICghcmV0KQ0KPj4gKwkJY2Rucy0+cm9sZXNbcm9s ZV0tPnN0YXRlID0gQ0ROUzNfUk9MRV9TVEFURV9BQ1RJVkU7DQo+PiArCW11dGV4X3VubG9jaygm Y2Rucy0+bXV0ZXgpOw0KPj4gKwlyZXR1cm4gcmV0Ow0KPj4gK30NCj4+ICsNCj4+ICt2b2lkIGNk bnMzX3JvbGVfc3RvcChzdHJ1Y3QgY2RuczMgKmNkbnMpDQo+PiArew0KPj4gKwllbnVtIGNkbnMz X3JvbGVzIHJvbGUgPSBjZG5zLT5yb2xlOw0KPj4gKw0KPj4gKwlpZiAocm9sZSA+PSBDRE5TM19S T0xFX0VORCkgew0KPj4gKwkJV0FSTl9PTihyb2xlID4gQ0ROUzNfUk9MRV9FTkQpOw0KPj4gKwkJ cmV0dXJuOw0KPj4gKwl9DQo+PiArDQo+PiArCWlmIChjZG5zLT5yb2xlc1tyb2xlXS0+c3RhdGUg PT0gQ0ROUzNfUk9MRV9TVEFURV9JTkFDVElWRSkNCj4+ICsJCXJldHVybjsNCj4+ICsNCj4+ICsJ bXV0ZXhfbG9jaygmY2Rucy0+bXV0ZXgpOw0KPj4gKwljZG5zLT5yb2xlc1tyb2xlXS0+c3RvcChj ZG5zKTsNCj4+ICsJY2Rucy0+cm9sZXNbcm9sZV0tPnN0YXRlID0gQ0ROUzNfUk9MRV9TVEFURV9J TkFDVElWRTsNCj4+ICsJbXV0ZXhfdW5sb2NrKCZjZG5zLT5tdXRleCk7DQo+PiArfQ0KPj4gKw0K Pj4gKy8qDQo+PiArICogY2Rucy0+cm9sZSBnZXRzIGZyb20gY2RuczNfZ2V0X2luaXRpYWxfcm9s ZSwgYW5kIHRoaXMgQVBJIHRlbGxzIHJvbGUgYXQgdGhlDQo+PiArICogcnVudGltZS4NCj4+ICsg KiBJZiBib3RoIHJvbGVzIGFyZSBzdXBwb3J0ZWQsIHRoZSByb2xlIGlzIHNlbGVjdGVkIGJhc2Vk IG9uIHZidXMvaWQuDQo+PiArICogSXQgY291bGQgYmUgcmVhZCBmcm9tIE9URyByZWdpc3RlciBv ciBleHRlcm5hbCBjb25uZWN0b3IuDQo+PiArICogSWYgb25seSBzaW5nbGUgcm9sZSBpcyBzdXBw b3J0ZWQsIG9ubHkgb25lIHJvbGUgc3RydWN0dXJlDQo+PiArICogaXMgYWxsb2NhdGVkLCBjZG5z LT5yb2xlc1tDRE5TM19ST0xFX0hPU1RdIG9yIGNkbnMtPnJvbGVzW0NETlMzX1JPTEVfR0FER0VU XS4NCj4+ICsgKi8NCj4+ICtzdGF0aWMgZW51bSBjZG5zM19yb2xlcyBjZG5zM19nZXRfaW5pdGlh bF9yb2xlKHN0cnVjdCBjZG5zMyAqY2RucykNCj4+ICt7DQo+PiArCWlmIChjZG5zLT5yb2xlc1tD RE5TM19ST0xFX0hPU1RdICYmIGNkbnMtPnJvbGVzW0NETlMzX1JPTEVfR0FER0VUXSkgew0KPj4g KwkJaWYgKGNkbnMzX2lzX2hvc3QoY2RucykpDQo+PiArCQkJcmV0dXJuIENETlMzX1JPTEVfSE9T VDsNCj4+ICsJCWlmIChjZG5zM19pc19kZXZpY2UoY2RucykpDQo+PiArCQkJcmV0dXJuIENETlMz X1JPTEVfR0FER0VUOw0KPj4gKwl9DQo+PiArCXJldHVybiBjZG5zLT5yb2xlc1tDRE5TM19ST0xF X0hPU1RdDQo+PiArCQk/IENETlMzX1JPTEVfSE9TVA0KPj4gKwkJOiBDRE5TM19ST0xFX0dBREdF VDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQgY2RuczNfZXhpdF9yb2xlcyhzdHJ1Y3Qg Y2RuczMgKmNkbnMpDQo+PiArew0KPj4gKwljZG5zM19yb2xlX3N0b3AoY2Rucyk7DQo+PiArCWNk bnMzX2RyZF9leGl0KGNkbnMpOw0KPj4gK30NCj4+ICsNCj4+ICsvKioNCj4+ICsgKiBjZG5zM19j b3JlX2luaXRfcm9sZSAtIGluaXRpYWxpemUgcm9sZSBvZiBvcGVyYXRpb24NCj4+ICsgKiBAY2Ru czogUG9pbnRlciB0byBjZG5zMyBzdHJ1Y3R1cmUNCj4+ICsgKg0KPj4gKyAqIFJldHVybnMgMCBv biBzdWNjZXNzIG90aGVyd2lzZSBuZWdhdGl2ZSBlcnJubw0KPj4gKyAqLw0KPj4gK3N0YXRpYyBp bnQgY2RuczNfY29yZV9pbml0X3JvbGUoc3RydWN0IGNkbnMzICpjZG5zKQ0KPj4gK3sNCj4+ICsJ c3RydWN0IGRldmljZSAqZGV2ID0gY2Rucy0+ZGV2Ow0KPj4gKwllbnVtIHVzYl9kcl9tb2RlIGJl c3RfZHJfbW9kZTsNCj4+ICsJZW51bSB1c2JfZHJfbW9kZSBkcl9tb2RlOw0KPj4gKwlpbnQgcmV0 ID0gMDsNCj4+ICsNCj4+ICsJZHJfbW9kZSA9IHVzYl9nZXRfZHJfbW9kZShkZXYpOw0KPj4gKwlj ZG5zLT5yb2xlID0gQ0ROUzNfUk9MRV9FTkQ7DQo+PiArDQo+PiArCS8qDQo+PiArCSAqIElmIGRy aXZlciBjYW4ndCByZWFkIG1vZGUgYnkgbWVhbnMgb2YgdXNiX2dldF9kcl9tZG9lIGZ1bmN0aW9u IHRoZW4NCj4NCj5zL21kb2UvbW9kZQ0KPg0KPj4gKwkgKiBjaG9vc2VzIG1vZGUgYWNjb3JkaW5n IHdpdGggS2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoaXMgc2V0dGluZw0KPj4gKwkgKiBjYW4gYmUg cmVzdHJpY3RlZCBsYXRlciBkZXBlbmRpbmcgb24gc3RyYXAgcGluIGNvbmZpZ3VyYXRpb24uDQo+ PiArCSAqLw0KPj4gKwlpZiAoZHJfbW9kZSA9PSBVU0JfRFJfTU9ERV9VTktOT1dOKSB7DQo+PiAr CQlpZiAoSVNfRU5BQkxFRChDT05GSUdfVVNCX0NETlMzX0hPU1QpICYmDQo+PiArCQkgICAgSVNf RU5BQkxFRChDT05GSUdfVVNCX0NETlMzX0dBREdFVCkpDQo+PiArCQkJZHJfbW9kZSA9IFVTQl9E Ul9NT0RFX09URzsNCj4+ICsJCWVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX1VTQl9DRE5TM19I T1NUKSkNCj4+ICsJCQlkcl9tb2RlID0gVVNCX0RSX01PREVfSE9TVDsNCj4+ICsJCWVsc2UgaWYg KElTX0VOQUJMRUQoQ09ORklHX1VTQl9DRE5TM19HQURHRVQpKQ0KPj4gKwkJCWRyX21vZGUgPSBV U0JfRFJfTU9ERV9QRVJJUEhFUkFMOw0KPj4gKwl9DQo+PiArDQo+PiArCWJlc3RfZHJfbW9kZSA9 IFVTQl9EUl9NT0RFX09URzsNCj4NCj5NaWdodCBiZSB3b3J0aCBtZW50aW9uaW5nIHRoYXQgY2Ru cy0+ZHJfbW9kZSBpcyBzdHJhcCBjb25maWd1cmF0aW9uDQo+YXQgdGhpcyBwb2ludC4NCkkgYWRk ZWQgc3VjaCBpbmZvcm1hdGlvbi4gSXQgY291bGQgaGVscCBpbiB1bmRlcnN0YW5kaW5nIGNvZGUu DQo+DQo+V2hhdCBleGFjdGx5IGFyZSB3ZSB0cnlpbmcgdG8gZG8gaGVyZT8NCj5NeSBndWVzcyBp cyB0aGF0IGNob29zZW4gZHJfbW9kZSBjYW4gYmUgZXF1YWwgdG8gb3Igc3Vic2V0IG9mIHN0cmFw IGNvbmZpZ3VyYXRpb24/DQo+DQpXZSBoYXZlIHRocmVlIHBvc3NpYmlsaXR5IHJlZ2FyZGluZyBk cl9tb2RlOg0KMS4gSXQgY2FuIGJlIHJlYWQgZnJvbSBzdHJhcCBiaXRzDQoyLiB3ZSBoYXZlIGtl cm5lbCBjb25maWd1cmF0aW9uIA0KMy4gd2UgY2FuIHJlYWQgaXQgZnJvbSBkdHMuIA0KDQpJIGFz c3VtZSB0aGF0IGRyaXZlciBzaG91bGQgc2VsZWN0IGRyX21vZGUgY29uc2lkZXJpbmcgdGhlc2Ug dGhyZWUgc2V0dGluZ3MuIA0KDQo+RG9lcyB0aGlzIHdvcms/DQoNCj4NCj4JaWYgKGNkbnMtPmRy X21vZGUgIT0gVVNCX0RSX01PREVfT1RHKSB7DQo+CQlpZiAoY2Rucy0+ZHJfbW9kZSAhPSBkcl9t b2RlKSB7DQo+CQkJZGV2X2VycihkZXYsICJJbmNvcnJlY3QgZHJfbW9kZSBjb25maWd1cmF0aW9u OiBzdHJhcCAlZDogcmVxdWVzdGVkICVkXG4iLA0KPgkJCQljZG5zLT5kcl9tb2RlLCBkcl9tb2Rl KTsNCj4JCX0NCj4JfQ0KPg0KPkF0IHRoaXMgcG9pbnQsIGRyX21vZGUgY29udGFpbnMgdGhlIG1v ZGUgd2UgbmVlZCB0byB1c2UuDQoNCkkgZG9uJ3QgdW5kZXJzdGFuZC4gRG8geW91IHdhbnQgdG8g cmVwbGFjZSBiZWxvdyBibG9jayB3aXRoIGFib3ZlIGNvbmRpdGlvbiA/DQpJZiB5ZXMsIHdoYXQg d2l0aCBjYXNlIGNkbnMtPmRyX21vZGUgPSAgVVNCX0RSX01PREVfT1RHIChzdHJhcCBjb25maWd1 cmF0aW9uKQ0KYW5kIGRyX21vZGUgPSBVU0JfRFJfTU9ERV9IT1NUIChLZXJuZWwgY29uZmlndXJh dGlvbikuIA0KSSB0aGluayB0aGF0IGluIHRoaXMgY2FzZSBkcml2ZXIgc2hvdWxkIGxpbWl0IGNk bnMtPmRyX21vZGUgdG8gVVNCX0RSX01PREVfSE9TVCANCmJlY2F1c2UgZ2FkZ2V0IGRyaXZlciBp cyBkaXNhYmxlZC4gIA0KT2YgY291cnNlIHdlIGNhbiBhbHNvIGNvbnNpZGVyIHN1Y2ggY2FzZSBh cyBpbmNvcnJlY3Qga2VybmVsIGNvbmZpZ3VyYXRpb24uDQoNCj4NCj4+ICsNCj4+ICsJaWYgKGRy X21vZGUgPT0gVVNCX0RSX01PREVfT1RHKSB7DQo+PiArCQliZXN0X2RyX21vZGUgPSBjZG5zLT5k cl9tb2RlOw0KPj4gKwl9IGVsc2UgaWYgKGNkbnMtPmRyX21vZGUgPT0gVVNCX0RSX01PREVfT1RH KSB7DQo+PiArCQliZXN0X2RyX21vZGUgPSBkcl9tb2RlOw0KPj4gKwl9IGVsc2UgaWYgKGNkbnMt PmRyX21vZGUgIT0gZHJfbW9kZSkgew0KPj4gKwkJZGV2X2VycihkZXYsICJJbmNvcnJlY3QgRFJE IGNvbmZpZ3VyYXRpb25cbiIpOw0KPj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+PiArCX0NCj4+ICsN Cj4+ICsJZHJfbW9kZSA9IGJlc3RfZHJfbW9kZTsNCj4+ICsNCj4+ICsJaWYgKGRyX21vZGUgPT0g VVNCX0RSX01PREVfT1RHIHx8IGRyX21vZGUgPT0gVVNCX0RSX01PREVfSE9TVCkgew0KPj4gKwkJ cmV0ID0gY2RuczNfaG9zdF9pbml0KGNkbnMpOw0KPj4gKwkJaWYgKHJldCkgew0KPj4gKwkJCWRl dl9lcnIoZGV2LCAiSG9zdCBpbml0aWFsaXphdGlvbiBmYWlsZWQgd2l0aCAlZFxuIiwNCj4+ICsJ CQkJcmV0KTsNCj4+ICsJCQlnb3RvIGVycjsNCj4+ICsJCX0NCj4+ICsJfQ0KPj4gKw0KPj4gKwlp ZiAoZHJfbW9kZSA9PSBVU0JfRFJfTU9ERV9PVEcgfHwgZHJfbW9kZSA9PSBVU0JfRFJfTU9ERV9Q RVJJUEhFUkFMKSB7DQo+PiArCQlyZXQgPSBjZG5zM19nYWRnZXRfaW5pdChjZG5zKTsNCj4+ICsJ CWlmIChyZXQpIHsNCj4+ICsJCQlkZXZfZXJyKGRldiwgIkRldmljZSBpbml0aWFsaXphdGlvbiBm YWlsZWQgd2l0aCAlZFxuIiwNCj4+ICsJCQkJcmV0KTsNCj4+ICsJCQlnb3RvIGVycjsNCj4+ICsJ CX0NCj4+ICsJfT4gKw0KPj4gKwljZG5zLT5kZXNpcmVkX2RyX21vZGUgPSBkcl9tb2RlOw0KPj4g KwljZG5zLT5kcl9tb2RlID0gZHJfbW9kZTsNCj4+ICsJLyoNCj4+ICsJICogZHJfbW9kZSBjb3Vs ZCBiZSBjaGFuZ2Ugc28gRFJEIG11c3QgdXBkYXRlIGNvbnRyb2xsZXINCj4NCj4iZGVzaXJlZF9k cl9tb2RlIG1pZ2h0IGhhdmUgY2hhbmdlZCBzbyB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgY29udHJv bGxlciBjb25maWd1cmF0aW9uIj8NCg0KU291bmRzIGJldHRlci4gDQoNCj4NCj4+ICsJICogY29u ZmlndXJhdGlvbg0KPj4gKwkgKi8NCj4+ICsJcmV0ID0gY2RuczNfZHJkX3VwZGF0ZV9tb2RlKGNk bnMpOw0KPj4gKwlpZiAocmV0KQ0KPj4gKwkJZ290byBlcnI7DQo+PiArDQo+PiArCWNkbnMtPnJv bGUgPSBjZG5zM19nZXRfaW5pdGlhbF9yb2xlKGNkbnMpOw0KPj4gKw0KPj4gKwlyZXQgPSBjZG5z M19yb2xlX3N0YXJ0KGNkbnMsIGNkbnMtPnJvbGUpOw0KPj4gKwlpZiAocmV0KSB7DQo+PiArCQlk ZXZfZXJyKGRldiwgImNhbid0IHN0YXJ0ICVzIHJvbGVcbiIsDQo+PiArCQkJY2RuczNfZ2V0X2N1 cnJlbnRfcm9sZV9kcml2ZXIoY2RucyktPm5hbWUpOw0KPj4gKwkJZ290byBlcnI7DQo+PiArCX0N Cj4+ICsNCj4+ICsJcmV0dXJuIHJldDsNCj4+ICtlcnI6DQo+PiArCWNkbnMzX2V4aXRfcm9sZXMo Y2Rucyk7DQo+PiArCXJldHVybiByZXQ7DQo+PiArfQ0KPj4gKw0KPj4gKy8qKg0KPj4gKyAqIGNk c24zX2dldF9yZWFsX3JvbGUgLSBnZXQgcmVhbCByb2xlIG9mIGNvbnRyb2xsZXIgYmFzZWQgb24g aGFyZHdhcmUgc2V0dGluZ3MuDQo+PiArICogQGNkbnM6IFBvaW50ZXIgdG8gY2RuczMgc3RydWN0 dXJlDQo+PiArICoNCj4+ICsgKiBSZXR1cm5zIHJvbGUNCj4+ICsgKi8NCj4+ICtlbnVtIGNkbnMz X3JvbGVzIGNkc24zX2dldF9yZWFsX3JvbGUoc3RydWN0IGNkbnMzICpjZG5zKQ0KPj4gK3sNCj4+ ICsJZW51bSBjZG5zM19yb2xlcyByb2xlID0gQ0ROUzNfUk9MRV9FTkQ7DQo+PiArDQo+PiArCWlm IChjZG5zLT5jdXJyZW50X2RyX21vZGUgPT0gVVNCX0RSX01PREVfT1RHKSB7DQo+PiArCQlpZiAo Y2RuczNfZ2V0X2lkKGNkbnMpKQ0KPj4gKwkJCXJvbGUgPSBDRE5TM19ST0xFX0dBREdFVDsNCj4+ ICsJCWVsc2UNCj4+ICsJCQlyb2xlID0gQ0ROUzNfUk9MRV9IT1NUOw0KPj4gKwl9IGVsc2Ugew0K Pj4gKwkJaWYgKGNkbnMzX2lzX2hvc3QoY2RucykpDQo+PiArCQkJcm9sZSA9IENETlMzX1JPTEVf SE9TVDsNCj4+ICsJCWlmIChjZG5zM19pc19kZXZpY2UoY2RucykpDQo+PiArCQkJcm9sZSA9IENE TlMzX1JPTEVfR0FER0VUOw0KPj4gKwl9DQo+PiArDQo+PiArCXJldHVybiByb2xlOw0KPj4gK30N Cj4+ICsNCj4+ICsvKioNCj4+ICsgKiBjZG5zM19yb2xlX3N3aXRjaCAtIHdvcmsgcXVldWUgaGFu ZGxlciBmb3Igcm9sZSBzd2l0Y2gNCj4+ICsgKg0KPj4gKyAqIEB3b3JrOiB3b3JrIHF1ZXVlIGl0 ZW0gc3RydWN0dXJlDQo+PiArICoNCj4+ICsgKiBIYW5kbGVzIGJlbG93IGV2ZW50czoNCj4+ICsg KiAtIFJvbGUgc3dpdGNoIGZvciBkdWFsLXJvbGUgZGV2aWNlcw0KPj4gKyAqIC0gQ0ROUzNfUk9M RV9HQURHRVQgPC0tPiBDRE5TM19ST0xFX0VORCBmb3IgcGVyaXBoZXJhbC1vbmx5IGRldmljZXMN Cj4+ICsgKi8NCj4+ICtzdGF0aWMgdm9pZCBjZG5zM19yb2xlX3N3aXRjaChzdHJ1Y3Qgd29ya19z dHJ1Y3QgKndvcmspDQo+PiArew0KPj4gKwllbnVtIGNkbnMzX3JvbGVzIHJvbGUgPSBDRE5TM19S T0xFX0VORDsNCj4+ICsJc3RydWN0IGNkbnMzX3JvbGVfZHJpdmVyICpyb2xlX2RydjsNCj4+ICsJ ZW51bSBjZG5zM19yb2xlcyBjdXJyZW50X3JvbGU7DQo+PiArCXN0cnVjdCBjZG5zMyAqY2RuczsN Cj4+ICsJaW50IHJldCA9IDA7DQo+PiArDQo+PiArCWNkbnMgPSBjb250YWluZXJfb2Yod29yaywg c3RydWN0IGNkbnMzLCByb2xlX3N3aXRjaF93cSk7DQo+PiArDQo+PiArCS8qIER1cmluZyBzd2l0 Y2hpbmcgY2Rucy0+cm9sZSBjYW4gYmUgZGlmZmVyZW50IHRoZW4gcm9sZSAqLw0KPnMvdGhlbi90 aGFuDQo+DQo+VGhlIGNvbW1lbnQgaXMgYSBiaXQgbWlzbGVhZGluZy4gVGhlIHB1cnBvc2Ugb2Yg dGhpcyBzd2l0Y2ggZnVuY3Rpb24NCj5pcyB0byBkbyBhIHN3aXRjaCBpZiB0aGUgcm9sZSBuZWVk cyB0byBiZSBjaGFuZ2VkLg0KPg0KPj4gKwlyb2xlID0gY2RzbjNfZ2V0X3JlYWxfcm9sZShjZG5z KTsNCj4+ICsNCj4+ICsJcm9sZV9kcnYgPSBjZG5zM19nZXRfY3VycmVudF9yb2xlX2RyaXZlcihj ZG5zKTsNCj4+ICsNCj4+ICsJcG1fcnVudGltZV9nZXRfc3luYyhjZG5zLT5kZXYpOw0KPg0KPnBt X3J1bnRpbWVfZ2V0X3N5bmMoKSBtdXN0IGJlIG1vdmVkIHRvIGJlZm9yZSBjZHNuM19nZXRfcmVh bF9yb2xlKCkgYXMgdGhhdCBmdW5jdGlvbg0KPmFjY2Vzc2VzIGEgZGV2aWNlIHJlZ2lzdGVyLg0K DQpPay4NCj4NCj4+ICsNCj4+ICsJLyogRGlzYWJsZSBjdXJyZW50IHJvbGUuIFRoaXMgc3RhdGUg Y2FuIGJlIGZvcmNlZCBmcm9tIHVzZXIgc3BhY2UuICovDQo+LyogRGlzYWJsZSBjdXJyZW50IHJv bGUgaWYgcmVxdXJlc3RlZCBmcm9tIGRlYnVnZnMgKi8/DQo+DQo+PiArCWlmIChjZG5zLT5kZWJ1 Z19kaXNhYmxlICYmIHJvbGVfZHJ2LT5zdGF0ZSA9PSBDRE5TM19ST0xFX1NUQVRFX0FDVElWRSkg ew0KPj4gKwkJY2RuczNfcm9sZV9zdG9wKGNkbnMpOw0KPj4gKwkJZ290byBleGl0Ow0KPj4gKwl9 DQo+PiArDQo+PiArCS8qIERvIG5vdGhpbmcgaWYgbm90aGluZyBjaGFuZ2VkICovDQo+PiArCWlm IChjZG5zLT5yb2xlID09IHJvbGUgJiYgcm9sZV9kcnYtPnN0YXRlID09IENETlMzX1JPTEVfU1RB VEVfQUNUSVZFKQ0KPj4gKwkJZ290byBleGl0Ow0KPj4gKw0KPj4gKwljZG5zM19yb2xlX3N0b3Ao Y2Rucyk7DQo+PiArDQo+PiArCXJvbGUgPSBjZHNuM19nZXRfcmVhbF9yb2xlKGNkbnMpOw0KPg0K PllvdSBhbHJlYWR5IGRpZCBjZG5zM19nZXRfcmVhbF9yb2xlIGJlZm9yZS4gVGhpcyBpcyByZWR1 bmRhbnQuDQpJJ20gbm90IHN1cmUuIEkgcmVtZW1iZXIgdGhhdCBpdCBoYXMgYmVlbiBhZGRlZCBm b3Igc29tZSByZWFzb24sIGJ1dCBJIGNhbid0ICByZW1lbWJlciB0aGlzIGNhc2UuIA0KSSBuZWVk IHRvIGNoZWNrIHRoaXMuDQogDQo+PiArDQo+PiArCWN1cnJlbnRfcm9sZSA9IGNkbnMtPnJvbGU7 DQo+PiArCWRldl9kYmcoY2Rucy0+ZGV2LCAiU3dpdGNoaW5nIHJvbGUiKTsNCj4+ICsNCj4+ICsJ cmV0ID0gY2RuczNfcm9sZV9zdGFydChjZG5zLCByb2xlKTsNCj4+ICsJaWYgKHJldCkgew0KPj4g KwkJLyogQmFjayB0byBjdXJyZW50IHJvbGUgKi8NCj4+ICsJCWRldl9lcnIoY2Rucy0+ZGV2LCAi c2V0ICVkIGhhcyBmYWlsZWQsIGJhY2sgdG8gJWRcbiIsDQo+PiArCQkJcm9sZSwgY3VycmVudF9y b2xlKTsNCj4+ICsJCWNkbnMzX3JvbGVfc3RhcnQoY2RucywgY3VycmVudF9yb2xlKTsNCj4NCj5O ZWVkIHRvIGNoZWNrIHJldHVybiB2YWx1ZSBoZXJlIGFzIHdlbGw/IEFuZCBjb21wbGFpbiBsb3Vk IGlmIHRoYXQgZmFpbHMgdG9vLg0KPg0KT2suDQoNCj4+ICsJfQ0KPj4gK2V4aXQ6DQo+PiArCXBt X3J1bnRpbWVfcHV0X3N5bmMoY2Rucy0+ZGV2KTsNCj4+ICt9DQo+PiArDQo+PiArLyoqDQo+PiAr ICogY2RuczNfcHJvYmUgLSBwcm9iZSBmb3IgY2RuczMgY29yZSBkZXZpY2UNCj4+ICsgKiBAcGRl djogUG9pbnRlciB0byBjZG5zMyBjb3JlIHBsYXRmb3JtIGRldmljZQ0KPj4gKyAqDQo+PiArICog UmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3RoZXJ3aXNlIG5lZ2F0aXZlIGVycm5vDQo+PiArICovDQo+ PiArc3RhdGljIGludCBjZG5zM19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0K Pj4gK3sNCj4+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsNCj4+ICsJc3RydWN0 IHJlc291cmNlCSpyZXM7DQo+PiArCXN0cnVjdCBjZG5zMyAqY2RuczsNCj4+ICsJdm9pZCBfX2lv bWVtICpyZWdzOw0KPj4gKwlpbnQgcmV0Ow0KPj4gKw0KPj4gKwljZG5zID0gZGV2bV9remFsbG9j KGRldiwgc2l6ZW9mKCpjZG5zKSwgR0ZQX0tFUk5FTCk7DQo+PiArCWlmICghY2RucykNCj4+ICsJ CXJldHVybiAtRU5PTUVNOw0KPj4gKw0KPj4gKwljZG5zLT5kZXYgPSBkZXY7DQo+PiArDQo+PiAr CXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGNkbnMpOw0KPj4gKw0KPj4gKwlyZXMgPSBwbGF0 Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOw0KPj4gKwlpZiAoIXJl cykgew0KPj4gKwkJZGV2X2VycihkZXYsICJtaXNzaW5nIElSUVxuIik7DQo+PiArCQlyZXR1cm4g LUVOT0RFVjsNCj4+ICsJfQ0KPj4gKwljZG5zLT5pcnEgPSByZXMtPnN0YXJ0Ow0KPj4gKw0KPj4g KwljZG5zLT54aGNpX3Jlc1swXSA9ICpyZXM7DQo+PiArDQo+PiArCS8qDQo+PiArCSAqIFJlcXVl c3QgbWVtb3J5IHJlZ2lvbg0KPj4gKwkgKiByZWdpb24tMDogeEhDSQ0KPj4gKwkgKiByZWdpb24t MTogUGVyaXBoZXJhbA0KPj4gKwkgKiByZWdpb24tMjogT1RHIHJlZ2lzdGVycw0KPj4gKwkgKi8N Cj4+ICsJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNF X01FTSwgInhoY2kiKTsNCj4+ICsJaWYgKCFyZXMpDQo+PiArCQlyZXR1cm4gLUVOWElPOw0KPj4g Kw0KPj4gKwljZG5zLT54aGNpX3Jlc1sxXSA9ICpyZXM7DQo+PiArDQo+PiArCXJlcyA9IHBsYXRm b3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJkZXYiKTsNCj4+ ICsJcmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7DQo+PiArCWlmIChJU19F UlIocmVncykpDQo+PiArCQlyZXR1cm4gUFRSX0VSUihyZWdzKTsNCj4+ICsJY2Rucy0+ZGV2X3Jl Z3MJPSByZWdzOw0KPj4gKw0KPj4gKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1l KHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAib3RnIik7DQo+PiArCWlmICghcmVzKQ0KPj4gKwkJcmV0 dXJuIC1FTlhJTzsNCj4+ICsNCj4+ICsJY2Rucy0+b3RnX3JlcyA9ICpyZXM7DQo+PiArDQo+PiAr CW11dGV4X2luaXQoJmNkbnMtPm11dGV4KTsNCj4+ICsNCj4+ICsJY2Rucy0+cGh5ID0gZGV2bV9w aHlfb3B0aW9uYWxfZ2V0KGRldiwgImNkbnMzLHVzYnBoeSIpOw0KPj4gKwlpZiAoSVNfRVJSKGNk bnMtPnBoeSkpDQo+PiArCQlyZXR1cm4gUFRSX0VSUihjZG5zLT5waHkpOw0KPj4gKw0KPj4gKwlw aHlfaW5pdChjZG5zLT5waHkpOw0KPj4gKw0KPj4gKwlJTklUX1dPUksoJmNkbnMtPnJvbGVfc3dp dGNoX3dxLCBjZG5zM19yb2xlX3N3aXRjaCk7DQo+PiArDQo+PiArCXJldCA9IGNkbnMzX2RyZF9p bml0KGNkbnMpOw0KPj4gKwlpZiAocmV0KQ0KPj4gKwkJZ290byBlcnI7DQo+PiArDQo+PiArCXJl dCA9IGNkbnMzX2NvcmVfaW5pdF9yb2xlKGNkbnMpOw0KPj4gKwlpZiAocmV0KQ0KPj4gKwkJZ290 byBlcnI7DQo+PiArDQo+PiArCWNkbnMzX2RlYnVnZnNfaW5pdChjZG5zKTsNCj4+ICsJZGV2aWNl X3NldF93YWtldXBfY2FwYWJsZShkZXYsIHRydWUpOw0KPj4gKwlwbV9ydW50aW1lX3NldF9hY3Rp dmUoZGV2KTsNCj4+ICsJcG1fcnVudGltZV9lbmFibGUoZGV2KTsNCj4+ICsNCj4+ICsJLyoNCj4+ ICsJICogVGhlIGNvbnRyb2xsZXIgbmVlZHMgbGVzcyB0aW1lIGJldHdlZW4gYnVzIGFuZCBjb250 cm9sbGVyIHN1c3BlbmQsDQo+PiArCSAqIGFuZCB3ZSBhbHNvIG5lZWRzIGEgc21hbGwgZGVsYXkg dG8gYXZvaWQgZnJlcXVlbnRseSBlbnRlcmluZyBsb3cNCj4+ICsJICogcG93ZXIgbW9kZS4NCj4+ ICsJICovDQo+PiArCXBtX3J1bnRpbWVfc2V0X2F1dG9zdXNwZW5kX2RlbGF5KGRldiwgMjApOw0K Pj4gKwlwbV9ydW50aW1lX21hcmtfbGFzdF9idXN5KGRldik7DQo+PiArCXBtX3J1bnRpbWVfdXNl X2F1dG9zdXNwZW5kKGRldik7DQo+PiArCWRldl9kYmcoZGV2LCAiQ2FkZW5jZSBVU0IzIGNvcmU6 IHByb2JlIHN1Y2NlZWRcbiIpOw0KPj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ICsNCj4+ICtlcnI6 DQo+PiArCXBoeV9leGl0KGNkbnMtPnBoeSk7DQo+PiArCXJldHVybiByZXQ7DQo+PiArfQ0KPj4g Kw0KPj4gKy8qKg0KPj4gKyAqIGNkbnMzX3JlbW92ZSAtIHVuYmluZCBkcmQgZHJpdmVyIGFuZCBj bGVhbiB1cA0KPj4gKyAqIEBwZGV2OiBQb2ludGVyIHRvIExpbnV4IHBsYXRmb3JtIGRldmljZQ0K Pj4gKyAqDQo+PiArICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3RoZXJ3aXNlIG5lZ2F0aXZlIGVy cm5vDQo+PiArICovDQo+PiArc3RhdGljIGludCBjZG5zM19yZW1vdmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldikNCj4+ICt7DQo+PiArCXN0cnVjdCBjZG5zMyAqY2RucyA9IHBsYXRmb3Jt X2dldF9kcnZkYXRhKHBkZXYpOw0KPj4gKw0KPj4gKwlwbV9ydW50aW1lX2dldF9zeW5jKCZwZGV2 LT5kZXYpOw0KPj4gKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7DQo+PiArCXBtX3J1 bnRpbWVfcHV0X25vaWRsZSgmcGRldi0+ZGV2KTsNCj4NCj5JJ20gbm90IHN1cmUgaWYgdGhpcyBp cyBoYW5kbGVkIHJpZ2h0Lg0KPllvdSBhcmUgc3RpbGwgYWNjZXNzaW5nIHRoZSBkZXZpY2UgaW4g YmVsb3cgY25kczNfKigpIGNhbGxzLg0KPg0KPj4gKwljZG5zM19kZWJ1Z2ZzX2V4aXQoY2Rucyk7 DQo+PiArCWNkbnMzX2V4aXRfcm9sZXMoY2Rucyk7PiArCXBoeV9leGl0KGNkbnMtPnBoeSk7DQo+ DQo+SXMgdGhlIGRldmljZSBpcyBpbiBydW50aW1lIHN1c3BlbmRlZCBzdGF0ZSBhdCB0aGlzIHBv aW50Pw0KPg0KPj4gKwlyZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArI2lmZGVmIENPTkZJR19P Rg0KPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX2NkbnMzX21hdGNoW10g PSB7DQo+PiArCXsgLmNvbXBhdGlibGUgPSAiY2Rucyx1c2IzLTEuMC4wIiB9LA0KPj4gKwl7IC5j b21wYXRpYmxlID0gImNkbnMsdXNiMy0xLjAuMSIgfSwNCj4+ICsJeyB9LA0KPj4gK307DQo+PiAr TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgb2ZfY2RuczNfbWF0Y2gpOw0KPj4gKyNlbmRpZg0KPj4g Kw0KPj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGNkbnMzX2RyaXZlciA9IHsNCj4+ ICsJLnByb2JlCQk9IGNkbnMzX3Byb2JlLA0KPj4gKwkucmVtb3ZlCQk9IGNkbnMzX3JlbW92ZSwN Cj4+ICsJLmRyaXZlcgkJPSB7DQo+PiArCQkubmFtZQk9ICJjZG5zLXVzYjMiLA0KPj4gKwkJLm9m X21hdGNoX3RhYmxlCT0gb2ZfbWF0Y2hfcHRyKG9mX2NkbnMzX21hdGNoKSwNCj4+ICsJfSwNCj4+ ICt9Ow0KPj4gKw0KPj4gK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoY2RuczNfZHJpdmVyKTsNCj4+ ICsNCj4+ICtNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmNkbnMzIik7DQo+PiArTU9EVUxFX0FVVEhP UigiUGF3ZWwgTGFzemN6YWsgPHBhd2VsbEBjYWRlbmNlLmNvbT4iKTsNCj4+ICtNT0RVTEVfTElD RU5TRSgiR1BMIHYyIik7DQo+PiArTU9EVUxFX0RFU0NSSVBUSU9OKCJDYWRlbmNlIFVTQjMgRFJE IENvbnRyb2xsZXIgRHJpdmVyIik7DQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2RuczMv Y29yZS5oIGIvZHJpdmVycy91c2IvY2RuczMvY29yZS5oDQo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0 NA0KPj4gaW5kZXggMDAwMDAwMDAwMDAwLi5mYjRiMzkyMDYxNTgNCj4+IC0tLSAvZGV2L251bGwN Cj4+ICsrKyBiL2RyaXZlcnMvdXNiL2NkbnMzL2NvcmUuaA0KPj4gQEAgLTAsMCArMSwxMTYgQEAN Cj4+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KPj4gKy8qDQo+PiAr ICogQ2FkZW5jZSBVU0JTUyBEUkQgSGVhZGVyIEZpbGUuDQo+PiArICoNCj4+ICsgKiBDb3B5cmln aHQgKEMpIDIwMTctMjAxOCBOWFANCj4+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTggQ2FkZW5jZS4N Cj4+ICsgKg0KPj4gKyAqIEF1dGhvcnM6IFBldGVyIENoZW4gPHBldGVyLmNoZW5AbnhwLmNvbT4N Cj4+ICsgKiAgICAgICAgICBQYXdlbCBMYXN6Y3phayA8cGF3ZWxsQGNhZGVuY2UuY29tPg0KPj4g KyAqLw0KPj4gKyNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+DQo+PiArDQo+PiArI2lmbmRlZiBf X0xJTlVYX0NETlMzX0NPUkVfSA0KPj4gKyNkZWZpbmUgX19MSU5VWF9DRE5TM19DT1JFX0gNCj4+ ICsNCj4+ICtzdHJ1Y3QgY2RuczM7DQo+PiArZW51bSBjZG5zM19yb2xlcyB7DQo+PiArCUNETlMz X1JPTEVfSE9TVCA9IDAsDQo+PiArCUNETlMzX1JPTEVfR0FER0VULA0KPj4gKwlDRE5TM19ST0xF X0VORCwNCj4+ICt9Ow0KPj4gKw0KPj4gKy8qKg0KPj4gKyAqIHN0cnVjdCBjZG5zM19yb2xlX2Ry aXZlciAtIGhvc3QvZ2FkZ2V0IHJvbGUgZHJpdmVyDQo+PiArICogQHN0YXJ0OiBzdGFydCB0aGlz IHJvbGUNCj4+ICsgKiBAc3RvcDogc3RvcCB0aGlzIHJvbGUNCj4+ICsgKiBAc3VzcGVuZDogc3Vz cGVuZCBjYWxsYmFjayBmb3IgdGhpcyByb2xlDQo+PiArICogQHJlc3VtZTogcmVzdW1lIGNhbGxi YWNrIGZvciB0aGlzIHJvbGUNCj4+ICsgKiBAaXJxOiBpcnEgaGFuZGxlciBmb3IgdGhpcyByb2xl DQo+PiArICogQG5hbWU6IHJvbGUgbmFtZSBzdHJpbmcgKGhvc3QvZ2FkZ2V0KQ0KPj4gKyAqIEBz dGF0ZTogY3VycmVudCBzdGF0ZQ0KPj4gKyAqLw0KPj4gK3N0cnVjdCBjZG5zM19yb2xlX2RyaXZl ciB7DQo+PiArCWludCAoKnN0YXJ0KShzdHJ1Y3QgY2RuczMgKmNkbnMpOw0KPj4gKwl2b2lkICgq c3RvcCkoc3RydWN0IGNkbnMzICpjZG5zKTsNCj4+ICsJaW50ICgqc3VzcGVuZCkoc3RydWN0IGNk bnMzICpjZG5zLCBib29sIGRvX3dha2V1cCk7DQo+PiArCWludCAoKnJlc3VtZSkoc3RydWN0IGNk bnMzICpjZG5zLCBib29sIGhpYmVybmF0ZWQpOw0KPj4gKwljb25zdCBjaGFyICpuYW1lOw0KPj4g KyNkZWZpbmUgQ0ROUzNfUk9MRV9TVEFURV9JTkFDVElWRQkwDQo+PiArI2RlZmluZSBDRE5TM19S T0xFX1NUQVRFX0FDVElWRQkJMQ0KPj4gKwlpbnQgc3RhdGU7DQo+PiArfTsNCj4+ICsNCj4+ICsj ZGVmaW5lIENETlMzX1hIQ0lfUkVTT1VSQ0VTX05VTQkyDQo+PiArLyoqDQo+PiArICogc3RydWN0 IGNkbnMzIC0gUmVwcmVzZW50YXRpb24gb2YgQ2FkZW5jZSBVU0IzIERSRCBjb250cm9sbGVyLg0K Pj4gKyAqIEBkZXY6IHBvaW50ZXIgdG8gQ2FkZW5jZSBkZXZpY2Ugc3RydWN0DQo+PiArICogQHho Y2lfcmVnczogcG9pbnRlciB0byBiYXNlIG9mIHhoY2kgcmVnaXN0ZXJzDQo+PiArICogQHhoY2lf cmVzOiB0aGUgcmVzb3VyY2UgZm9yIHhoY2kNCj4+ICsgKiBAZGV2X3JlZ3M6IHBvaW50ZXIgdG8g YmFzZSBvZiBkZXYgcmVnaXN0ZXJzDQo+PiArICogQG90Z19yZWdzOiBwb2ludGVyIHRvIGJhc2Ug b2Ygb3RnIHJlZ2lzdGVycw0KPj4gKyAqIEBpcnE6IGlycSBudW1iZXIgZm9yIGNvbnRyb2xsZXIN Cj4+ICsgKiBAcm9sZXM6IGFycmF5IG9mIHN1cHBvcnRlZCByb2xlcyBmb3IgdGhpcyBjb250cm9s bGVyDQo+PiArICogQHJvbGU6IGN1cnJlbnQgcm9sZQ0KPj4gKyAqIEBob3N0X2RldjogdGhlIGNo aWxkIGhvc3QgZGV2aWNlIHBvaW50ZXIgZm9yIGNkbnMzIGNvcmUNCj4+ICsgKiBAZ2FkZ2V0X2Rl djogdGhlIGNoaWxkIGdhZGdldCBkZXZpY2UgcG9pbnRlciBmb3IgY2RuczMgY29yZQ0KPj4gKyAq IEB1c2I6IHBoeSBmb3IgdGhpcyBjb250cm9sbGVyDQo+PiArICogQHJvbGVfc3dpdGNoX3dxOiB3 b3JrIHF1ZXVlIGl0ZW0gZm9yIHJvbGUgc3dpdGNoDQo+PiArICogQGluX2xwbTogdGhlIGNvbnRy b2xsZXIgaW4gbG93IHBvd2VyIG1vZGUNCj4+ICsgKiBAd2FrZXVwX2ludDogdGhlIHdha2V1cCBp bnRlcnJ1cHQNCj4+ICsgKiBAbXV0ZXg6IHRoZSBtdXRleCBmb3IgY29uY3VycmVudCBjb2RlIGF0 IGRyaXZlcg0KPj4gKyAqIEBkcl9tb2RlOiBzdXBwb3J0ZWQgbW9kZSBvZiBvcGVyYXRpb24gaXQg Y2FuIGJlIG9ubHkgSG9zdCwgb25seSBEZXZpY2UNCj4+ICsgKiAgICAgICAgICAgb3IgT1RHIG1v ZGUgdGhhdCBhbGxvdyB0byBzd2l0Y2ggYmV0d2VlbiBEZXZpY2UgYW5kIEhvc3QgbW9kZS4NCj4+ ICsgKiAgICAgICAgICAgVGhpcyBmaWVsZCBiYXNlZCBvbiBmaXJtd2FyZSBzZXR0aW5nLCBrZXJu ZWwgY29uZmlndXJhdGlvbg0KPj4gKyAqICAgICAgICAgICBhbmQgaGFyZHdhcmUgY29uZmlndXJh dGlvbi4NCj4+ICsgKiBAY3VycmVudF9kcl9tb2RlOiBjdXJyZW50IG1vZGUgb2Ygb3BlcmF0aW9u IHdoZW4gaW4gZHVhbC1yb2xlIG1vZGUNCj4+ICsgKiBAZGVzaXJlZF9kcl9tb2RlOiBkZXNpcmVk IG1vZGUgb2Ygb3BlcmF0aW9uIHdoZW4gaW4gZHVhbC1yb2xlIG1vZGUuDQo+PiArICogICAgICAg ICAgIFRoaXMgdmFsdWUgY2FuIGJlIGNoYW5nZWQgZHVyaW5nIHJ1bnRpbWUuDQo+PiArICogICAg ICAgICAgIEF2YWlsYWJsZSBvcHRpb25zIGRlcGVuZHMgb24gIGRyX21vZGU6DQo+PiArICogICAg ICAgICAgIGRyX21vZGUgICAgICAgICAgICAgICAgIHwgIGRlc2lyZWRfZHJfbW9kZSBhbmQgY3Vy cmVudF9kcl9tb2RlDQo+PiArICogICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4+ICsgKiAgICAgICAgICAg VVNCX0RSX01PREVfSE9TVCAgICAgICAgfCBvbmx5IFVTQl9EUl9NT0RFX0hPU1QNCj4+ICsgKiAg ICAgICAgICAgVVNCX0RSX01PREVfUEVSSVBIRVJBTCAgfCBvbmx5IFVTQl9EUl9NT0RFX1BFUklQ SEVSQUwNCj4+ICsgKiAgICAgICAgICAgVVNCX0RSX01PREVfT1RHICAgICAgICAgfCBvbmx5IFVT Ql9EUl9NT0RFX0hPU1QNCj4+ICsgKiAgICAgICAgICAgVVNCX0RSX01PREVfT1RHICAgICAgICAg fCBvbmx5IFVTQl9EUl9NT0RFX1BFUklQSEVSQUwNCj4+ICsgKiAgICAgICAgICAgVVNCX0RSX01P REVfT1RHICAgICAgICAgfCBVU0JfRFJfTU9ERV9PVEcNCj4NCj5MYXN0IDMgbGluZXMgc2hvdWxk IGJlIHJlZHVjZWQgdG8NCj4NCj4JCVVTQl9EUl9NT0RFX09URyAgICAgICAgIHwgVVNCX0RSX01P REVfT1RHLCBVU0JfRFJfTU9ERV9IT1NUIG9yDQo+CQkJCQl8IFVTQl9EUl9NT0RFX1BFUklQSEVS QUwNCj4NCg0KT2suDQoNCj4+ICsgKg0KPj4gKyAqICAgICAgICAgICBEZXNpcmVkX2RyX3JvbGUg Y2FuIGJlIGNoYW5nZWQgYnkgbWVhbnMgb2YgZGVidWdmcy4NCj4+ICsgKiBAcm9vdDogZGVidWdm cyByb290IGZvbGRlciBwb2ludGVyDQo+PiArICogQGRlYnVnX2Rpc2FibGU6DQo+PiArICovDQo+ PiArc3RydWN0IGNkbnMzIHsNCj4+ICsJc3RydWN0IGRldmljZQkJCSpkZXY7DQo+PiArCXZvaWQg X19pb21lbQkJCSp4aGNpX3JlZ3M7DQo+PiArCXN0cnVjdCByZXNvdXJjZQkJCXhoY2lfcmVzW0NE TlMzX1hIQ0lfUkVTT1VSQ0VTX05VTV07DQo+PiArCXN0cnVjdCBjZG5zM191c2JfcmVncyBfX2lv bWVtCSpkZXZfcmVnczsNCj4+ICsNCj4+ICsJc3RydWN0IHJlc291cmNlCQkJb3RnX3JlczsNCj4+ ICsJc3RydWN0IGNkbnMzX290Z19sZWdhY3lfcmVncwkqb3RnX3YwX3JlZ3M7DQo+PiArCXN0cnVj dCBjZG5zM19vdGdfcmVncwkJKm90Z192MV9yZWdzOw0KPj4gKwlzdHJ1Y3QgY2RuczNfb3RnX2Nv bW1vbl9yZWdzCSpvdGdfcmVnczsNCj4+ICsjZGVmaW5lIENETlMzX0NPTlRST0xMRVJfVjAJMA0K Pj4gKyNkZWZpbmUgQ0ROUzNfQ09OVFJPTExFUl9WMQkxDQo+PiArCXUzMgkJCQl2ZXJzaW9uOw0K Pj4gKw0KPj4gKwlpbnQJCQkJaXJxOw0KPj4gKwlzdHJ1Y3QgY2RuczNfcm9sZV9kcml2ZXIJKnJv bGVzW0NETlMzX1JPTEVfRU5EXTsNCj4+ICsJZW51bSBjZG5zM19yb2xlcwkJcm9sZTsNCj4+ICsJ c3RydWN0IHBsYXRmb3JtX2RldmljZQkJKmhvc3RfZGV2Ow0KPj4gKwlzdHJ1Y3QgY2RuczNfZGV2 aWNlCQkqZ2FkZ2V0X2RldjsNCj4+ICsJc3RydWN0IHBoeQkJCSpwaHk7DQo+PiArCXN0cnVjdCB3 b3JrX3N0cnVjdAkJcm9sZV9zd2l0Y2hfd3E7DQo+PiArCWludAkJCQlpbl9scG06MTsNCj4+ICsJ aW50CQkJCXdha2V1cF9pbnQ6MTsNCj4+ICsJLyogbXV0ZXh0IHVzZWQgaW4gd29ya3F1ZXVlKi8N Cj4+ICsJc3RydWN0IG11dGV4CQkJbXV0ZXg7DQo+PiArCWVudW0gdXNiX2RyX21vZGUJCWRyX21v ZGU7DQo+PiArCWVudW0gdXNiX2RyX21vZGUJCWN1cnJlbnRfZHJfbW9kZTsNCj4+ICsJZW51bSB1 c2JfZHJfbW9kZQkJZGVzaXJlZF9kcl9tb2RlOw0KPj4gKwlzdHJ1Y3QgZGVudHJ5CQkJKnJvb3Q7 DQo+PiArCWludAkJCQlkZWJ1Z19kaXNhYmxlOjE7DQo+PiArfTsNCj4+ICsNCj4+ICt2b2lkIGNk bnMzX3JvbGVfc3RvcChzdHJ1Y3QgY2RuczMgKmNkbnMpOw0KPj4gKw0KPj4gKyNlbmRpZiAvKiBf X0xJTlVYX0NETlMzX0NPUkVfSCAqLw0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NkbnMz L2RlYnVnLmggYi9kcml2ZXJzL3VzYi9jZG5zMy9kZWJ1Zy5oDQo+PiBuZXcgZmlsZSBtb2RlIDEw MDY0NA0KPj4gaW5kZXggMDAwMDAwMDAwMDAwLi4xOTI5ZWRiM2E1MjENCj4+IC0tLSAvZGV2L251 bGwNCj4+ICsrKyBiL2RyaXZlcnMvdXNiL2NkbnMzL2RlYnVnLmgNCj4+IEBAIC0wLDAgKzEsMTY4 IEBADQo+PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8NCj4+ICsvKg0K Pj4gKyAqIENhZGVuY2UgVVNCU1MgRFJEIERyaXZlci4NCj4+ICsgKiBEZWJ1ZyBoZWFkZXIgZmls ZS4NCj4+ICsgKg0KPj4gKyAqIENvcHlyaWdodCAoQykgMjAxOCBDYWRlbmNlLg0KPj4gKyAqDQo+ PiArICogQXV0aG9yOiBQYXdlbCBMYXN6Y3phayA8cGF3ZWxsQGNhZGVuY2UuY29tPg0KPj4gKyAq Lw0KPj4gKyNpZm5kZWYgX19MSU5VWF9DRE5TM19ERUJVRw0KPj4gKyNkZWZpbmUgX19MSU5VWF9D RE5TM19ERUJVRw0KPj4gKw0KPj4gKyNpbmNsdWRlICJjb3JlLmgiDQo+PiArDQo+PiArc3RhdGlj IGlubGluZSBjaGFyICpjZG5zM19kZWNvZGVfdXNiX2lycShjaGFyICpzdHIsDQo+PiArCQkJCQkg ZW51bSB1c2JfZGV2aWNlX3NwZWVkIHNwZWVkLA0KPj4gKwkJCQkJIHUzMiB1c2JfaXN0cykNCj4+ ICt7DQo+PiArCWludCByZXQ7DQo+PiArDQo+PiArCXJldCA9IHNwcmludGYoc3RyLCAiSVJRICUw OHggPSAiLCB1c2JfaXN0cyk7DQo+PiArDQo+PiArCWlmICh1c2JfaXN0cyAmIChVU0JfSVNUU19D T04ySSB8IFVTQl9JU1RTX0NPTkkpKSB7DQo+PiArCQlyZXQgKz0gc3ByaW50ZihzdHIgKyByZXQs ICJDb25uZWN0aW9uICVzXG4iLA0KPj4gKwkJCSAgICAgICB1c2Jfc3BlZWRfc3RyaW5nKHNwZWVk KSk7DQo+PiArCX0NCj4+ICsJaWYgKHVzYl9pc3RzICYgVVNCX0lTVFNfQ09OMkkgfHwgdXNiX2lz dHMgJiBVU0JfSVNUU19DT05JKQ0KPj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAiRGlz Y29ubmVjdGlvbiAiKTsNCj4+ICsJaWYgKHVzYl9pc3RzICYgVVNCX0lTVFNfTDJFTlRJKQ0KPj4g KwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAic3VzcGVuZGVkICIpOw0KPj4gKw0KPj4gKwlp ZiAodXNiX2lzdHMgJiBVU0JfSVNUU19MMkVYVEkpDQo+PiArCQlyZXQgKz0gc3ByaW50ZihzdHIg KyByZXQsICJMMiBleGl0ICIpOw0KPj4gKwlpZiAodXNiX2lzdHMgJiBVU0JfSVNUU19VM0VYVEkp DQo+PiArCQlyZXQgKz0gc3ByaW50ZihzdHIgKyByZXQsICJVMyBleGl0ICIpOw0KPj4gKwlpZiAo dXNiX2lzdHMgJiBVU0JfSVNUU19VV1JFU0kpDQo+PiArCQlyZXQgKz0gc3ByaW50ZihzdHIgKyBy ZXQsICJXYXJtIFJlc2V0ICIpOw0KPj4gKwlpZiAodXNiX2lzdHMgJiBVU0JfSVNUU19VSFJFU0kp DQo+PiArCQlyZXQgKz0gc3ByaW50ZihzdHIgKyByZXQsICJIb3QgUmVzZXQgIik7DQo+PiArCWlm ICh1c2JfaXN0cyAmIFVTQl9JU1RTX1UyUkVTSSkNCj4+ICsJCXJldCArPSBzcHJpbnRmKHN0ciAr IHJldCwgIlJlc2V0Iik7DQo+PiArDQo+PiArCXJldHVybiBzdHI7DQo+PiArfQ0KPj4gKw0KPj4g K3N0YXRpYyBpbmxpbmUgIGNoYXIgKmNkbnMzX2RlY29kZV9lcF9pcnEoY2hhciAqc3RyLA0KPj4g KwkJCQkJIHUzMiBlcF9zdHMsDQo+PiArCQkJCQkgY29uc3QgY2hhciAqZXBfbmFtZSkNCj4+ICt7 DQo+PiArCWludCByZXQ7DQo+PiArDQo+PiArCXJldCA9IHNwcmludGYoc3RyLCAiSVJRIGZvciAl czogJTA4eCAiLCBlcF9uYW1lLCBlcF9zdHMpOw0KPj4gKw0KPj4gKwlpZiAoZXBfc3RzICYgRVBf U1RTX1NFVFVQKQ0KPj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAiU0VUVVAgIik7DQo+ PiArCWlmIChlcF9zdHMgJiBFUF9TVFNfSU9DKQ0KPj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsg cmV0LCAiSU9DICIpOw0KPj4gKwlpZiAoZXBfc3RzICYgRVBfU1RTX0lTUCkNCj4+ICsJCXJldCAr PSBzcHJpbnRmKHN0ciArIHJldCwgIklTUCAiKTsNCj4+ICsJaWYgKGVwX3N0cyAmIEVQX1NUU19E RVNDTUlTKQ0KPj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAiREVTQ01JUyAiKTsNCj4+ ICsJaWYgKGVwX3N0cyAmIEVQX1NUU19TVFJFQU1SKQ0KPj4gKwkJcmV0ICs9IHNwcmludGYoc3Ry ICsgcmV0LCAiU1RSRUFNUiAiKTsNCj4+ICsJaWYgKGVwX3N0cyAmIEVQX1NUU19NRF9FWElUKQ0K Pj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAiTURfRVhJVCAiKTsNCj4+ICsJaWYgKGVw X3N0cyAmIEVQX1NUU19UUkJFUlIpDQo+PiArCQlyZXQgKz0gc3ByaW50ZihzdHIgKyByZXQsICJU UkJFUlIgIik7DQo+PiArCWlmIChlcF9zdHMgJiBFUF9TVFNfTlJEWSkNCj4+ICsJCXJldCArPSBz cHJpbnRmKHN0ciArIHJldCwgIk5SRFkgIik7DQo+PiArCWlmIChlcF9zdHMgJiBFUF9TVFNfUFJJ TUUpDQo+PiArCQlyZXQgKz0gc3ByaW50ZihzdHIgKyByZXQsICJQUklNRSAiKTsNCj4+ICsJaWYg KGVwX3N0cyAmIEVQX1NUU19TSURFUlIpDQo+PiArCQlyZXQgKz0gc3ByaW50ZihzdHIgKyByZXQs ICJTSURFUlJUICIpOw0KPj4gKwlpZiAoZXBfc3RzICYgRVBfU1RTX09VVFNNTSkNCj4+ICsJCXJl dCArPSBzcHJpbnRmKHN0ciArIHJldCwgIk9VVFNNTSAiKTsNCj4+ICsJaWYgKGVwX3N0cyAmIEVQ X1NUU19JU09FUlIpDQo+PiArCQlyZXQgKz0gc3ByaW50ZihzdHIgKyByZXQsICJJU09FUlIgIik7 DQo+PiArCWlmIChlcF9zdHMgJiBFUF9TVFNfSU9UKQ0KPj4gKwkJcmV0ICs9IHNwcmludGYoc3Ry ICsgcmV0LCAiSU9UICIpOw0KPj4gKw0KPj4gKwlyZXR1cm4gc3RyOw0KPj4gK30NCj4+ICsNCj4+ ICtzdGF0aWMgaW5saW5lIGNoYXIgKmNkbnMzX2RlY29kZV9lcHhfaXJxKGNoYXIgKnN0ciwNCj4+ ICsJCQkJCSBjaGFyICplcF9uYW1lLA0KPj4gKwkJCQkJIHUzMiBlcF9zdHMpDQo+PiArew0KPj4g KwlyZXR1cm4gY2RuczNfZGVjb2RlX2VwX2lycShzdHIsIGVwX3N0cywgZXBfbmFtZSk7DQo+PiAr fQ0KPj4gKw0KPj4gK3N0YXRpYyBpbmxpbmUgY2hhciAqY2RuczNfZGVjb2RlX2VwMF9pcnEoY2hh ciAqc3RyLA0KPj4gKwkJCQkJIGludCBkaXIsDQo+PiArCQkJCQkgdTMyIGVwX3N0cykNCj4+ICt7 DQo+PiArCXJldHVybiBjZG5zM19kZWNvZGVfZXBfaXJxKHN0ciwgZXBfc3RzLA0KPj4gKwkJCQkg ICBkaXIgPyAiZXAwSU4iIDogImVwME9VVCIpOw0KPj4gK30NCj4+ICsNCj4+ICsvKioNCj4+ICsg KiBEZWJ1ZyBhIHRyYW5zZmVyIHJpbmcuDQo+PiArICoNCj4+ICsgKiBQcmludHMgb3V0IGFsbCBU UkJzIGluIHRoZSBlbmRwb2ludCByaW5nLCBldmVuIHRob3NlIGFmdGVyIHRoZSBMaW5rIFRSQi4N Cj4+ICsgKi4NCj4+ICsgKi8NCj4+ICtzdGF0aWMgaW5saW5lIGNoYXIgKmNkbnMzX2RiZ19yaW5n KHN0cnVjdCBjZG5zM19lbmRwb2ludCAqcHJpdl9lcCwNCj4+ICsJCQkJICAgc3RydWN0IGNkbnMz X3RyYiAqcmluZywgY2hhciAqc3RyKQ0KPj4gK3sNCj4+ICsJZG1hX2FkZHJfdCBhZGRyID0gcHJp dl9lcC0+dHJiX3Bvb2xfZG1hOw0KPj4gKwlzdHJ1Y3QgY2RuczNfdHJiICp0cmI7DQo+PiArCWlu dCB0cmJfcGVyX3NlY3RvcjsNCj4+ICsJaW50IHJldCA9IDA7DQo+PiArCWludCBpOw0KPj4gKw0K Pj4gKwl0cmJfcGVyX3NlY3RvciA9IEdFVF9UUkJTX1BFUl9TRUdNRU5UKHByaXZfZXAtPnR5cGUp Ow0KPj4gKw0KPj4gKwl0cmIgPSAmcHJpdl9lcC0+dHJiX3Bvb2xbcHJpdl9lcC0+ZGVxdWV1ZV07 DQo+PiArCXJldCArPSBzcHJpbnRmKHN0ciArIHJldCwgIlxuXHRcdFJpbmcgY29udGVudHMgZm9y ICVzOiIsIHByaXZfZXAtPm5hbWUpOw0KPj4gKw0KPj4gKwlyZXQgKz0gc3ByaW50ZihzdHIgKyBy ZXQsDQo+PiArCQkgICAgICAgIlxuXHRcdFJpbmcgZGVxIGluZGV4OiAlZCwgdHJiOiAlcCAodmly dCksIDB4JWxseCAoZG1hKVxuIiwNCj4+ICsJCSAgICAgICBwcml2X2VwLT5kZXF1ZXVlLCB0cmIs DQo+PiArCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyljZG5zM190cmJfdmlydF90b19kbWEo cHJpdl9lcCwgdHJiKSk7DQo+PiArDQo+PiArCXRyYiA9ICZwcml2X2VwLT50cmJfcG9vbFtwcml2 X2VwLT5lbnF1ZXVlXTsNCj4+ICsJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LA0KPj4gKwkJICAg ICAgICJcdFx0UmluZyBlbnEgaW5kZXg6ICVkLCB0cmI6ICVwICh2aXJ0KSwgMHglbGx4IChkbWEp XG4iLA0KPj4gKwkJICAgICAgIHByaXZfZXAtPmVucXVldWUsIHRyYiwNCj4+ICsJCSAgICAgICAo dW5zaWduZWQgbG9uZyBsb25nKWNkbnMzX3RyYl92aXJ0X3RvX2RtYShwcml2X2VwLCB0cmIpKTsN Cj4+ICsNCj4+ICsJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LA0KPj4gKwkJICAgICAgICJcdFx0 ZnJlZSB0cmJzOiAlZCwgQ0NTPSVkLCBQQ1M9JWRcbiIsDQo+PiArCQkgICAgICAgcHJpdl9lcC0+ ZnJlZV90cmJzLCBwcml2X2VwLT5jY3MsIHByaXZfZXAtPnBjcyk7DQo+PiArDQo+PiArCWlmICh0 cmJfcGVyX3NlY3RvciA+IFRSQlNfUEVSX1NFR01FTlQpDQo+PiArCQl0cmJfcGVyX3NlY3RvciA9 IFRSQlNfUEVSX1NFR01FTlQ7DQo+PiArDQo+PiArCWlmICh0cmJfcGVyX3NlY3RvciA+IFRSQlNf UEVSX1NFR01FTlQpIHsNCj4+ICsJCXNwcmludGYoc3RyICsgcmV0LCAiXHRcdFRvIGJpZyB0cmFu c2ZlciByaW5nICVkXG4iLA0KPj4gKwkJCXRyYl9wZXJfc2VjdG9yKTsNCj4+ICsJCXJldHVybiBz dHI7DQo+PiArCX0NCj4+ICsNCj4+ICsJZm9yIChpID0gMDsgaSA8IHRyYl9wZXJfc2VjdG9yOyAr K2kpIHsNCj4+ICsJCXRyYiA9ICZyaW5nW2ldOw0KPj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsg cmV0LA0KPj4gKwkJCSJcdFx0QCVwYWQgJTA4eCAlMDh4ICUwOHhcbiIsICZhZGRyLA0KPj4gKwkJ CWxlMzJfdG9fY3B1KHRyYi0+YnVmZmVyKSwNCj4+ICsJCQlsZTMyX3RvX2NwdSh0cmItPmxlbmd0 aCksDQo+PiArCQkJbGUzMl90b19jcHUodHJiLT5jb250cm9sKSk7DQo+PiArCQlhZGRyICs9IHNp emVvZigqdHJiKTsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlyZXR1cm4gc3RyOw0KPj4gK30NCj4+ICsN Cj4+ICt2b2lkIGNkbnMzX2RiZyhzdHJ1Y3QgY2RuczNfZGV2aWNlICpwcml2X2RldiwgY29uc3Qg Y2hhciAqZm10LCAuLi4pOw0KPj4gKw0KPj4gKyNpZmRlZiBDT05GSUdfREVCVUdfRlMNCj4+ICt2 b2lkIGNkbnMzX2RlYnVnZnNfaW5pdChzdHJ1Y3QgY2RuczMgKmNkbnMpOw0KPj4gK3ZvaWQgY2Ru czNfZGVidWdmc19leGl0KHN0cnVjdCBjZG5zMyAqY2Rucyk7DQo+PiArI2Vsc2UNCj4+ICt2b2lk IGNkbnMzX2RlYnVnZnNfaW5pdChzdHJ1Y3QgY2RuczMgKmNkbnMpOw0KPj4gK3sgIH0NCj4+ICt2 b2lkIGNkbnMzX2RlYnVnZnNfZXhpdChzdHJ1Y3QgY2RuczMgKmNkbnMpOw0KPj4gK3sgIH0NCj4+ ICsjZW5kaWYNCj4+ICsNCj4+ICsjZW5kaWYgLypfX0xJTlVYX0NETlMzX0RFQlVHKi8NCj4+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jZG5zMy9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL3VzYi9jZG5z My9kZWJ1Z2ZzLmMNCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+PiBpbmRleCAwMDAwMDAwMDAw MDAuLmQ4ZmNkOTBkMDViMw0KPj4gLS0tIC9kZXYvbnVsbA0KPj4gKysrIGIvZHJpdmVycy91c2Iv Y2RuczMvZGVidWdmcy5jDQo+PiBAQCAtMCwwICsxLDE2NCBAQA0KPj4gKy8vIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wDQo+PiArLyoNCj4+ICsgKiBDYWRlbmNlIFVTQlNTIERSRCBD b250cm9sbGVyIERlYnVnRlMgZmlsZXIuDQo+PiArICoNCj4+ICsgKiBDb3B5cmlnaHQgKEMpIDIw MTggQ2FkZW5jZS4NCj4+ICsgKg0KPj4gKyAqIEF1dGhvcjogUGF3ZWwgTGFzemN6YWsgPHBhd2Vs bEBjYWRlbmNlLmNvbT4NCj4+ICsgKi8NCj4+ICsNCj4+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMu aD4NCj4+ICsjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9z ZXFfZmlsZS5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+DQo+PiArDQo+PiArI2lu Y2x1ZGUgImNvcmUuaCINCj4+ICsjaW5jbHVkZSAiZ2FkZ2V0LmgiDQo+PiArI2luY2x1ZGUgImRy ZC5oIg0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgY2RuczNfbW9kZV9zaG93KHN0cnVjdCBzZXFfZmls ZSAqcywgdm9pZCAqdW51c2VkKQ0KPj4gK3sNCj4+ICsJc3RydWN0IGNkbnMzICpjZG5zID0gcy0+ cHJpdmF0ZTsNCj4+ICsNCj4+ICsJc3dpdGNoIChjZG5zLT5jdXJyZW50X2RyX21vZGUpIHsNCj4+ ICsJY2FzZSBVU0JfRFJfTU9ERV9IT1NUOg0KPj4gKwkJc2VxX3B1dHMocywgImhvc3RcbiIpOw0K Pj4gKwkJYnJlYWs7DQo+PiArCWNhc2UgVVNCX0RSX01PREVfUEVSSVBIRVJBTDoNCj4+ICsJCXNl cV9wdXRzKHMsICJkZXZpY2VcbiIpOw0KPj4gKwkJYnJlYWs7DQo+PiArCWNhc2UgVVNCX0RSX01P REVfT1RHOg0KPj4gKwkJc2VxX3B1dHMocywgIm90Z1xuIik7DQo+PiArCQlicmVhazsNCj4+ICsJ ZGVmYXVsdDoNCj4+ICsJCXNlcV9wdXRzKHMsICJVTktOT1dOIG1vZGVcbiIpOw0KPj4gKwl9DQo+ PiArDQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGNkbnMzX21v ZGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkNCj4+ICt7DQo+ PiArCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBjZG5zM19tb2RlX3Nob3csIGlub2RlLT5pX3By aXZhdGUpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgc3NpemVfdCBjZG5zM19tb2RlX3dyaXRl KHN0cnVjdCBmaWxlICpmaWxlLA0KPj4gKwkJCQljb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwNCj4+ ICsJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpDQo+PiArew0KPj4gKwlzdHJ1Y3Qgc2Vx X2ZpbGUJICpzID0gZmlsZS0+cHJpdmF0ZV9kYXRhOw0KPj4gKwlzdHJ1Y3QgY2RuczMgKmNkbnMg PSBzLT5wcml2YXRlOw0KPj4gKwl1MzIgbW9kZSA9IFVTQl9EUl9NT0RFX1VOS05PV047DQo+PiAr CWNoYXIgYnVmWzMyXTsNCj4+ICsNCj4+ICsJaWYgKGNvcHlfZnJvbV91c2VyKCZidWYsIHVidWYs IG1pbl90KHNpemVfdCwgc2l6ZW9mKGJ1ZikgLSAxLCBjb3VudCkpKQ0KPj4gKwkJcmV0dXJuIC1F RkFVTFQ7DQo+PiArDQo+PiArCWlmICghc3RybmNtcChidWYsICJob3N0IiwgNCkpIHsNCj4+ICsJ CWlmIChjZG5zLT5kcl9tb2RlID09IFVTQl9EUl9NT0RFX0hPU1QgfHwNCj4+ICsJCSAgICBjZG5z LT5kcl9tb2RlID09IFVTQl9EUl9NT0RFX09URykgew0KPj4gKwkJCW1vZGUgPSBVU0JfRFJfTU9E RV9IT1NUOw0KPj4gKwkJfQ0KPj4gKwl9DQo+PiArDQo+PiArCWlmICghc3RybmNtcChidWYsICJk ZXZpY2UiLCA2KSkNCj4+ICsJCWlmIChjZG5zLT5kcl9tb2RlID09IFVTQl9EUl9NT0RFX1BFUklQ SEVSQUwgfHwNCj4+ICsJCSAgICBjZG5zLT5kcl9tb2RlID09IFVTQl9EUl9NT0RFX09URykNCj4+ ICsJCQltb2RlID0gVVNCX0RSX01PREVfUEVSSVBIRVJBTDsNCj4+ICsNCj4+ICsJaWYgKCFzdHJu Y21wKGJ1ZiwgIm90ZyIsIDMpICYmIGNkbnMtPmRyX21vZGUgPT0gVVNCX0RSX01PREVfT1RHKQ0K Pj4gKwkJbW9kZSA9IFVTQl9EUl9NT0RFX09URzsNCj4+ICsNCj4+ICsJaWYgKG1vZGUgPT0gVVNC X0RSX01PREVfVU5LTk9XTikgew0KPj4gKwkJZGV2X2VycihjZG5zLT5kZXYsICJGYWlsZWQ6IGlu Y29ycmVjdCBtb2RlIHNldHRpbmdcbiIpOw0KPj4gKwkJcmV0dXJuIC1FRkFVTFQ7DQo+PiArCX0N Cj4+ICsNCj4+ICsJaWYgKGNkbnMtPmN1cnJlbnRfZHJfbW9kZSAhPSBtb2RlKSB7DQo+PiArCQlj ZG5zLT5kZXNpcmVkX2RyX21vZGUgPSBtb2RlOw0KPj4gKwkJY2Rucy0+ZGVidWdfZGlzYWJsZSA9 IDA7DQo+SW5zdGVhZCBvZiBmb3JjaW5nIGRlYnVnX2Rpc2FibGUgaGVyZSBtYXliZSB5b3UgaG91 bGQgY2hlY2sgaWYgaXQgaXMgc2V0DQo+YW5kIGNvbXBsYWluIHRoYXQgbW9kZSBjYW4ndCBiZSBj aGFuZ2VkIHdoZW4gZGVidWdfZGlzYWJsZSBpcyBzZXQ/DQoNCk9rLCBJIHdpbGwgY2hhbmdlIHRo aXMuIA0KPg0KPj4gKwkJY2RuczNfcm9sZV9zdG9wKGNkbnMpOw0KPj4gKwkJY2RuczNfZHJkX3Vw ZGF0ZV9tb2RlKGNkbnMpOw0KPg0KPk5lZWQgdG8gY2hlY2sgcmV0dXJuIHZhbHVlLg0KDQpPaywN Cg0KPg0KPj4gKwkJcXVldWVfd29yayhzeXN0ZW1fZnJlZXphYmxlX3dxLCAmY2Rucy0+cm9sZV9z d2l0Y2hfd3EpOw0KPj4gKwl9DQo+PiArDQo+PiArCXJldHVybiBjb3VudDsNCj4+ICt9DQo+PiAr DQo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2RuczNfbW9kZV9mb3Bz ID0gew0KPj4gKwkub3BlbgkJCT0gY2RuczNfbW9kZV9vcGVuLA0KPj4gKwkud3JpdGUJCQk9IGNk bnMzX21vZGVfd3JpdGUsDQo+PiArCS5yZWFkCQkJPSBzZXFfcmVhZCwNCj4+ICsJLmxsc2VlawkJ CT0gc2VxX2xzZWVrLA0KPj4gKwkucmVsZWFzZQkJPSBzaW5nbGVfcmVsZWFzZSwNCj4+ICt9Ow0K Pj4gKw0KPj4gK3N0YXRpYyBpbnQgY2RuczNfZGlzYWJsZV9zaG93KHN0cnVjdCBzZXFfZmlsZSAq cywgdm9pZCAqdW51c2VkKQ0KPj4gK3sNCj4+ICsJc3RydWN0IGNkbnMzICpjZG5zID0gcy0+cHJp dmF0ZTsNCj4+ICsNCj4+ICsJaWYgKCFjZG5zLT5kZWJ1Z19kaXNhYmxlKQ0KPj4gKwkJc2VxX3B1 dHMocywgIjBcbiIpOw0KPj4gKwllbHNlDQo+PiArCQlzZXFfcHV0cyhzLCAiMVxuIik7DQo+PiAr DQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgc3NpemVfdCBjZG5zM19k aXNhYmxlX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLA0KPj4gKwkJCQkgICBjb25zdCBjaGFyIF9f dXNlciAqdWJ1ZiwNCj4+ICsJCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpDQo+PiAr ew0KPj4gKwlzdHJ1Y3Qgc2VxX2ZpbGUJICpzID0gZmlsZS0+cHJpdmF0ZV9kYXRhOw0KPj4gKwlz dHJ1Y3QgY2RuczMgKmNkbnMgPSBzLT5wcml2YXRlOw0KPj4gKwlib29sIGRpc2FibGU7DQo+PiAr CWNoYXIgYnVmWzE2XTsNCj4+ICsNCj4+ICsJaWYgKGNvcHlfZnJvbV91c2VyKCZidWYsIHVidWYs IG1pbl90KHNpemVfdCwgc2l6ZW9mKGJ1ZikgLSAxLCBjb3VudCkpKQ0KPj4gKwkJcmV0dXJuIC1F RkFVTFQ7DQo+PiArDQo+PiArCWlmIChrc3RydG9ib29sKGJ1ZiwgJmRpc2FibGUpKSB7DQo+PiAr CQlkZXZfZXJyKGNkbnMtPmRldiwgIndyb25nIHNldHRpbmdcbiIpOw0KPj4gKwkJcmV0dXJuIC1F SU5WQUw7DQo+PiArCX0NCj4+ICsNCj4+ICsJaWYgKGRpc2FibGUgIT0gY2Rucy0+ZGVidWdfZGlz YWJsZSkgew0KPj4gKwkJY2Rucy0+ZGVidWdfZGlzYWJsZSA9IGRpc2FibGU7DQo+PiArCQlxdWV1 ZV93b3JrKHN5c3RlbV9mcmVlemFibGVfd3EsICZjZG5zLT5yb2xlX3N3aXRjaF93cSk7DQo+DQo+ V2hhdCBpcyB0aGUgcHVycG9zZSBvZiB0aGlzIGRpc2FibGUgZGVidWdmcyBmaWxlPw0KPlRvIHN0 b3AgdGhlIGN1cnJlbnRseSBhY3RpdmUgcm9sZT8NCg0KR2VuZXJhbGx5IGl0IHdhcyBhZGRlZCBm b3IgdGVzdGluZyBwdXJwb3NlLiBZZXMgaXQncyBkaXNhYmxlIHRoZSBjdXJyZW50IGFjdGl2ZSBy b2xlLiANCkkgdXNlZCBpdCBmb3IgdGVzdGluZyBsb2FkaW5nL3VubG9hZGluZyBkcml2ZXIuICAN CkFsc28gc29tZXRpbWUgSSB1c2VkIGl0IHRvIHRha2UgbG9nIGZyb20gdHJhY2Ugd2hlbiBJJ20g d29ya2luZyByZW1vdGVseS4gDQoNCg0KPg0KPj4gKwl9DQo+PiArDQo+PiArCXJldHVybiBjb3Vu dDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBjZG5zM19kaXNhYmxlX29wZW4oc3RydWN0 IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpDQo+PiArew0KPj4gKwlyZXR1cm4gc2lu Z2xlX29wZW4oZmlsZSwgY2RuczNfZGlzYWJsZV9zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsNCj4+ ICt9DQo+PiArDQo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2RuczNf ZGlzYWJsZV9mb3BzID0gew0KPj4gKwkub3BlbgkJCT0gY2RuczNfZGlzYWJsZV9vcGVuLA0KPj4g Kwkud3JpdGUJCQk9IGNkbnMzX2Rpc2FibGVfd3JpdGUsDQo+PiArCS5yZWFkCQkJPSBzZXFfcmVh ZCwNCj4+ICsJLmxsc2VlawkJCT0gc2VxX2xzZWVrLA0KPj4gKwkucmVsZWFzZQkJPSBzaW5nbGVf cmVsZWFzZSwNCj4+ICt9Ow0KPj4gKw0KPj4gK3ZvaWQgY2RuczNfZGVidWdmc19pbml0KHN0cnVj dCBjZG5zMyAqY2RucykNCj4+ICt7DQo+PiArCXN0cnVjdCBkZW50cnkgKnJvb3Q7DQo+PiArDQo+ PiArCXJvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGV2X25hbWUoY2Rucy0+ZGV2KSwgTlVMTCk7 DQo+PiArCWNkbnMtPnJvb3QgPSByb290Ow0KPj4gKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfVVNC X0NETlMzX0dBREdFVCkgJiYNCj4+ICsJICAgIElTX0VOQUJMRUQoQ09ORklHX1VTQl9DRE5TM19I T1NUKSkNCj4+ICsJCWRlYnVnZnNfY3JlYXRlX2ZpbGUoIm1vZGUiLCAwNjQ0LCByb290LCBjZG5z LA0KPj4gKwkJCQkgICAgJmNkbnMzX21vZGVfZm9wcyk7DQo+PiArDQo+PiArCWRlYnVnZnNfY3Jl YXRlX2ZpbGUoImRpc2FibGUiLCAwNjQ0LCByb290LCBjZG5zLA0KPj4gKwkJCSAgICAmY2RuczNf ZGlzYWJsZV9mb3BzKTsNCj4+ICt9DQo+PiArDQo+PiArdm9pZCBjZG5zM19kZWJ1Z2ZzX2V4aXQo c3RydWN0IGNkbnMzICpjZG5zKQ0KPj4gK3sNCj4+ICsJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZl KGNkbnMtPnJvb3QpOw0KPj4gK30NCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jZG5zMy9k cmQuYyBiL2RyaXZlcnMvdXNiL2NkbnMzL2RyZC5jDQo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0K Pj4gaW5kZXggMDAwMDAwMDAwMDAwLi4zZTU2MzM4Y2Q3YjkNCj4+IC0tLSAvZGV2L251bGwNCj4+ ICsrKyBiL2RyaXZlcnMvdXNiL2NkbnMzL2RyZC5jDQo+PiBAQCAtMCwwICsxLDM2NSBAQA0KPj4g Ky8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQo+PiArLyoNCj4+ICsgKiBDYWRl bmNlIFVTQlNTIERSRCBEcml2ZXIuDQo+PiArICoNCj4+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTgg Q2FkZW5jZS4NCj4+ICsgKg0KPj4gKyAqIEF1dGhvcjogUGF3ZWwgTGFzemN6YWsgPHBhd2VsbEBj YWRlbmNlLmNvbQ0KPj4gKyAqDQo+PiArICovDQo+PiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5o Pg0KPj4gKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgv ZGVsYXkuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPg0KPj4gKw0KPj4gKyNpbmNs dWRlICJnYWRnZXQuaCINCj4+ICsjaW5jbHVkZSAiZHJkLmgiDQo+PiArI2luY2x1ZGUgImNvcmUu aCINCj4+ICsNCj4+ICtzdGF0aWMgaW50IGNkbnMzX2RyZF9zd2l0Y2hfZ2FkZ2V0KHN0cnVjdCBj ZG5zMyAqY2RucywgaW50IG9uKTsNCj4+ICtzdGF0aWMgaW50IGNkbnMzX2RyZF9zd2l0Y2hfaG9z dChzdHJ1Y3QgY2RuczMgKmNkbnMsIGludCBvbik7DQo+PiArDQo+PiArLyoqDQo+PiArICogY2Ru czNfc2V0X21vZGUgLSBjaGFuZ2UgbW9kZSBvZiBPVEcgQ29yZQ0KPj4gKyAqIEBjZG5zOiBwb2lu dGVyIHRvIGNvbnRleHQgc3RydWN0dXJlDQo+PiArICogQG1vZGU6IHNlbGVjdGVkIG1vZGUgZnJv bSBjZG5zX3JvbGUNCj4+ICsgKg0KPj4gKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG90aGVyd2lz ZSBuZWdhdGl2ZSBlcnJubw0KPj4gKyAqLw0KPj4gK2ludCBjZG5zM19zZXRfbW9kZShzdHJ1Y3Qg Y2RuczMgKmNkbnMsIGVudW0gdXNiX2RyX21vZGUgbW9kZSkNCj4+ICt7DQo+PiArCWludCByZXQg PSAwOw0KPj4gKwl1MzIgcmVnOw0KPj4gKw0KPj4gKwljZG5zLT5jdXJyZW50X2RyX21vZGUgPSBt b2RlOw0KPj4gKw0KPj4gKwlzd2l0Y2ggKG1vZGUpIHsNCj4+ICsJY2FzZSBVU0JfRFJfTU9ERV9Q RVJJUEhFUkFMOg0KPj4gKwkJZGV2X2luZm8oY2Rucy0+ZGV2LCAiU2V0IGNvbnRyb2xsZXIgdG8g R2FkZ2V0IG1vZGVcbiIpOw0KPg0KPmRldl9kYmcoKT8NCj4NCj4+ICsJCXJldCA9IGNkbnMzX2Ry ZF9zd2l0Y2hfZ2FkZ2V0KGNkbnMsIDEpOw0KPj4gKwkJYnJlYWs7DQo+PiArCWNhc2UgVVNCX0RS X01PREVfSE9TVDoNCj4+ICsJCWRldl9pbmZvKGNkbnMtPmRldiwgIlNldCBjb250cm9sbGVyIHRv IEhvc3QgbW9kZVxuIik7DQo+DQo+ZGV2X2RiZygpDQo+DQo+PiArCQlyZXQgPSBjZG5zM19kcmRf c3dpdGNoX2hvc3QoY2RucywgMSk7DQo+PiArCQlicmVhazsNCj4+ICsJY2FzZSBVU0JfRFJfTU9E RV9PVEc6DQo+PiArCQlkZXZfaW5mbyhjZG5zLT5kZXYsICJTZXQgY29udHJvbGxlciB0byBPVEcg bW9kZVxuIik7DQo+DQo+ZGV2X2RiZygpDQo+DQo+PiArCQlpZiAoY2Rucy0+dmVyc2lvbiA9PSBD RE5TM19DT05UUk9MTEVSX1YxKSB7DQo+PiArCQkJcmVnID0gcmVhZGwoJmNkbnMtPm90Z192MV9y ZWdzLT5vdmVycmlkZSk7DQo+PiArCQkJcmVnIHw9IE9WRVJSSURFX0lEUFVMTFVQOw0KPj4gKwkJ CXdyaXRlbChyZWcsICZjZG5zLT5vdGdfdjFfcmVncy0+b3ZlcnJpZGUpOw0KPj4gKwkJfSBlbHNl IHsNCj4+ICsJCQlyZWcgPSByZWFkbCgmY2Rucy0+b3RnX3YwX3JlZ3MtPmN0cmwxKTsNCj4+ICsJ CQlyZWcgfD0gT1ZFUlJJREVfSURQVUxMVVBfVjA7DQo+PiArCQkJd3JpdGVsKHJlZywgJmNkbnMt Pm90Z192MF9yZWdzLT5jdHJsMSk7DQo+PiArCQl9DQo+PiArDQo+DQo+RG9uJ3QgeW91IGhhdmUg dG8gY2xlYXIgSURQVUxMVVAgd2hlbiB5b3Ugc3dpdGNoIHRvIFBFUklQSEVSQUwgb3IgSE9TVCBt b2RlPw0KTm8gSSBkb24ndCBoYXZlIHRvLg0KSW50IHRoaXMgcGxhY2UgT1ZFUlJJREVfSURQVUxM VVAgIC0gZnJvbSBzcGVjOiAiSUQgUGluIFNhbXBsZSBFbmFibGU6IEFjdGl2ZSBIaWdoLiBTaWdu YWwgdGhhdCBlbmFibGVzIHRoZSBzYW1wbGluZyBvZiB0aGUgYW5hbG9nIElEIGxpbmUuIg0KDQo+ DQo+PiArCQkvKg0KPj4gKwkJICogSGFyZHdhcmUgc3BlY2lmaWNhdGlvbiBzYXlzOiAiSURfVkFM VUUgbXVzdCBiZSB2YWxpZCB3aXRoaW4NCj4+ICsJCSAqIDUwbXMgYWZ0ZXIgaWRwdWxsdXAgaXMg c2V0IHRvICcxIiBzbyBkcml2ZXIgbXVzdCB3YWl0DQo+PiArCQkgKiA1MG1zIGJlZm9yZSByZWFk aW5nIHRoaXMgcGluLg0KPj4gKwkJICovDQo+PiArCQl1c2xlZXBfcmFuZ2UoNTAwMDAsIDYwMDAw KTsNCj4+ICsJCWJyZWFrOw0KPj4gKwlkZWZhdWx0Og0KPj4gKwkJY2Rucy0+Y3VycmVudF9kcl9t b2RlID0gVVNCX0RSX01PREVfVU5LTk9XTjsNCj4+ICsJCWRldl9lcnIoY2Rucy0+ZGV2LCAiVW5z dXBwb3J0ZWQgbW9kZSBvZiBvcGVyYXRpb24gJWRcbiIsIG1vZGUpOw0KPj4gKwkJcmV0dXJuIC1F SU5WQUw7DQo+PiArCX0NCj4+ICsNCj4+ICsJcmV0dXJuIHJldDsNCj4+ICt9DQo+PiArDQo+PiAr aW50IGNkbnMzX2dldF9pZChzdHJ1Y3QgY2RuczMgKmNkbnMpDQo+PiArew0KPj4gKwlpbnQgaWQ7 DQo+PiArDQo+PiArCWlkID0gcmVhZGwoJmNkbnMtPm90Z19yZWdzLT5zdHMpICYgT1RHU1RTX0lE X1ZBTFVFOw0KPj4gKwlkZXZfZGJnKGNkbnMtPmRldiwgIk9URyBJRDogJWQiLCBpZCk7DQo+PiAr CXJldHVybiBpZDsNCj4+ICt9DQo+PiArDQo+PiAraW50IGNkbnMzX2lzX2hvc3Qoc3RydWN0IGNk bnMzICpjZG5zKQ0KPj4gK3sNCj4+ICsJaWYgKGNkbnMtPmN1cnJlbnRfZHJfbW9kZSA9PSBVU0Jf RFJfTU9ERV9IT1NUKQ0KPj4gKwkJcmV0dXJuIDE7DQo+DQo+ZG9uJ3QgeW91IGhhdmUgdG8gcmV0 dXJuIDAgaWYgY3VycmVudF9kcl9tb2RlID09IFVTQl9EUl9NT0RFX1BFUklQSEVSQUw/DQoNCiJy ZXR1cm4gMCIgaXMgZmV3IGxpbmVzIGJlbG93LiAgDQoNCj4NCj4+ICsJZWxzZSBpZiAoIWNkbnMz X2dldF9pZChjZG5zKSkNCj4+ICsJCXJldHVybiAxOw0KPj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ ICt9DQo+PiArDQo+PiAraW50IGNkbnMzX2lzX2RldmljZShzdHJ1Y3QgY2RuczMgKmNkbnMpDQo+ PiArew0KPj4gKwlpZiAoY2Rucy0+Y3VycmVudF9kcl9tb2RlID09IFVTQl9EUl9NT0RFX1BFUklQ SEVSQUwpDQo+PiArCQlyZXR1cm4gMTsNCj4NCj5kb24ndCB5b3UgaGF2ZSB0byByZXR1cm4gMCBp ZiBjdXJyZW50X2RyX21vZGUgPT0gVVNCX0RSX01PREVfSE9TVD8NCg0KInJldHVybiAwIiBpcyBm ZXcgbGluZXMgYmVsb3cuICANCj4NCj4+ICsJZWxzZSBpZiAoY2Rucy0+Y3VycmVudF9kcl9tb2Rl ID09IFVTQl9EUl9NT0RFX09URykNCj4+ICsJCWlmIChjZG5zM19nZXRfaWQoY2RucykpDQo+PiAr CQkJcmV0dXJuIDE7DQo+PiArDQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICsvKioN Cj4+ICsgKiBjZG5zM19vdGdfZGlzYWJsZV9pcnEgLSBEaXNhYmxlIGFsbCBPVEcgaW50ZXJydXB0 cw0KPj4gKyAqIEBjZG5zOiBQb2ludGVyIHRvIGNvbnRyb2xsZXIgY29udGV4dCBzdHJ1Y3R1cmUN Cj4+ICsgKi8NCj4+ICtzdGF0aWMgdm9pZCBjZG5zM19vdGdfZGlzYWJsZV9pcnEoc3RydWN0IGNk bnMzICpjZG5zKQ0KPj4gK3sNCj4+ICsJd3JpdGVsKDAsICZjZG5zLT5vdGdfcmVncy0+aWVuKTsN Cj4+ICt9DQo+PiArDQo+PiArLyoqDQo+PiArICogY2RuczNfb3RnX2VuYWJsZV9pcnEgLSBlbmFi bGUgaWQgYW5kIHNlc3NfdmFsaWQgaW50ZXJydXB0cw0KPj4gKyAqIEBjZG5zOiBQb2ludGVyIHRv IGNvbnRyb2xsZXIgY29udGV4dCBzdHJ1Y3R1cmUNCj4+ICsgKi8NCj4+ICtzdGF0aWMgdm9pZCBj ZG5zM19vdGdfZW5hYmxlX2lycShzdHJ1Y3QgY2RuczMgKmNkbnMpDQo+PiArew0KPj4gKwl3cml0 ZWwoT1RHSUVOX0lEX0NIQU5HRV9JTlQgfCBPVEdJRU5fVkJVU1ZBTElEX1JJU0VfSU5UIHwNCj4+ ICsJICAgICAgIE9UR0lFTl9WQlVTVkFMSURfRkFMTF9JTlQsICZjZG5zLT5vdGdfcmVncy0+aWVu KTsNCj4+ICt9DQo+PiArDQo+PiArLyoqDQo+PiArICogY2RuczNfZHJkX3N3aXRjaF9ob3N0IC0g c3RhcnQvc3RvcCBob3N0DQo+PiArICogQGNkbnM6IFBvaW50ZXIgdG8gY29udHJvbGxlciBjb250 ZXh0IHN0cnVjdHVyZQ0KPj4gKyAqIEBvbjogMSBmb3Igc3RhcnQsIDAgZm9yIHN0b3ANCj4+ICsg Kg0KPj4gKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG90aGVyd2lzZSBuZWdhdGl2ZSBlcnJubw0K Pj4gKyAqLw0KPj4gK3N0YXRpYyBpbnQgY2RuczNfZHJkX3N3aXRjaF9ob3N0KHN0cnVjdCBjZG5z MyAqY2RucywgaW50IG9uKQ0KPj4gK3sNCj4+ICsJaW50IHJldDsNCj4+ICsJdTMyIHJlZyA9IE9U R0NNRF9PVEdfRElTOw0KPj4gKw0KPj4gKwkvKiBzd2l0Y2ggT1RHIGNvcmUgKi8NCj4+ICsJaWYg KG9uKSB7DQo+PiArCQl3cml0ZWwoT1RHQ01EX0hPU1RfQlVTX1JFUSB8IHJlZywgJmNkbnMtPm90 Z19yZWdzLT5jbWQpOw0KPj4gKw0KPj4gKwkJZGV2X2RiZyhjZG5zLT5kZXYsICJXYWl0aW5nIGZv ciBIb3N0IG1vZGUgaXMgdHVybmVkIG9uXG4iKTsNCj5zL2Zvci90aWxsDQo+DQo+PiArCQlyZXQg PSBjZG5zM19oYW5kc2hha2UoJmNkbnMtPm90Z19yZWdzLT5zdHMsIE9UR1NUU19YSENJX1JFQURZ LA0KPj4gKwkJCQkgICAgICBPVEdTVFNfWEhDSV9SRUFEWSwgMTAwMDAwKTsNCj4+ICsNCj4+ICsJ CWlmIChyZXQpDQo+PiArCQkJcmV0dXJuIHJldDsNCj4+ICsJfSBlbHNlIHsNCj4+ICsJCXVzbGVl cF9yYW5nZSgzMCwgNDApOw0KPj4gKwkJd3JpdGVsKE9UR0NNRF9IT1NUX0JVU19EUk9QIHwgT1RH Q01EX0RFVl9CVVNfRFJPUCB8DQo+PiArCQkgICAgICAgT1RHQ01EX0RFVl9QT1dFUl9PRkYgfCBP VEdDTURfSE9TVF9QT1dFUl9PRkYsDQo+PiArCQkgICAgICAgJmNkbnMtPm90Z19yZWdzLT5jbWQp Ow0KPj4gKwkJdXNsZWVwX3JhbmdlKDMwMDAsIDQwMDApOw0KPg0KPndoeSBkbyB5b3UgbmVlZCBk ZWxheXMgYmVmb3JlIGFuZCBhZnRlciB0aGUgd3JpdGU/DQpJIHRoaW5rIHRoYXQgdGhlIGZpcnN0 IGl0IGlzIG5vdCBuZWNlc3NhcnkuIEknbSBnb2luZyB0byByZW1vdmUgaXQuIA0KVGhlIHNlY29u ZCBJJ20gZ29pbmcgdG8gcmVwbGFjZSB3aXRoIA0KCQljZG5zM19oYW5kc2hha2UoJmNkbnMtPm90 Z19yZWdzLT5zdGF0ZSwNCgkJCQlPVEdTVEFURV9IT1NUX1NUQVRFX01BU0ssDQoJCQkJMCwgMjAw MDAwMCk7DQpJdCBzaG91bGQgZW5zdXJlIGFzIHNob3J0IGFzIHBvc3NpYmxlIGRlbGF5IHRvIGFs bG93IERSRCB0cmFuc2l0IHRvIEhfSURMRSBzdGF0ZS4gDQoNCj4+ICsJfQ0KPj4gKw0KPj4gKwly ZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArLyoqDQo+PiArICogY2RuczNfZHJkX3N3aXRjaF9n YWRnZXQgLSBzdGFydC9zdG9wIGdhZGdldA0KPj4gKyAqIEBjZG5zOiBQb2ludGVyIHRvIGNvbnRy b2xsZXIgY29udGV4dCBzdHJ1Y3R1cmUNCj4+ICsgKiBAb246IDEgZm9yIHN0YXJ0LCAwIGZvciBz dG9wDQo+PiArICoNCj4+ICsgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvdGhlcndpc2UgbmVnYXRp dmUgZXJybm8NCj4+ICsgKi8NCj4+ICtzdGF0aWMgaW50IGNkbnMzX2RyZF9zd2l0Y2hfZ2FkZ2V0 KHN0cnVjdCBjZG5zMyAqY2RucywgaW50IG9uKQ0KPj4gK3sNCj4+ICsJaW50IHJldDsNCj4+ICsJ dTMyIHJlZyA9IE9UR0NNRF9PVEdfRElTOw0KPj4gKw0KPj4gKwkvKiBzd2l0Y2ggT1RHIGNvcmUg Ki8NCj4+ICsJaWYgKG9uKSB7DQo+PiArCQl3cml0ZWwoT1RHQ01EX0RFVl9CVVNfUkVRIHwgcmVn LCAmY2Rucy0+b3RnX3JlZ3MtPmNtZCk7DQo+PiArDQo+PiArCQlkZXZfZGJnKGNkbnMtPmRldiwg IldhaXRpbmcgZm9yIERldmljZSBtb2RlIGlzIHR1cm5lZCBvblxuIik7DQo+DQo+cy9mb3IvdGls bA0KPg0KPj4gKw0KPj4gKwkJcmV0ID0gY2RuczNfaGFuZHNoYWtlKCZjZG5zLT5vdGdfcmVncy0+ c3RzLCBPVEdTVFNfREVWX1JFQURZLA0KPj4gKwkJCQkgICAgICBPVEdTVFNfREVWX1JFQURZLCAx MDAwMDApOw0KPj4gKw0KPj4gKwkJaWYgKHJldCkNCj4+ICsJCQlyZXR1cm4gcmV0Ow0KPj4gKwl9 IGVsc2Ugew0KPj4gKwkJLyoNCj4+ICsJCSAqIGRyaXZlciBzaG91bGQgd2FpdCBhdCBsZWFzdCAx MHVzIGFmdGVyIGRpc2FibGluZyBEZXZpY2UNCj4+ICsJCSAqIGJlZm9yZSB0dXJuaW5nLW9mZiBE ZXZpY2UgKERFVl9CVVNfRFJPUCkNCj4+ICsJCSAqLw0KPj4gKwkJdXNsZWVwX3JhbmdlKDIwLCAz MCk7DQo+PiArCQl3cml0ZWwoT1RHQ01EX0hPU1RfQlVTX0RST1AgfCBPVEdDTURfREVWX0JVU19E Uk9QIHwNCj4+ICsJCSAgICAgICBPVEdDTURfREVWX1BPV0VSX09GRiB8IE9UR0NNRF9IT1NUX1BP V0VSX09GRiwNCj4+ICsJCSAgICAgICAmY2Rucy0+b3RnX3JlZ3MtPmNtZCk7DQo+PiArCQl1c2xl ZXBfcmFuZ2UoMzAwMCwgNDAwMCk7DQo+DQo+d2h5IGRvIHlvdSBuZWVkIGEgZGVsYXkgYWZ0ZXIg dGhlIHdyaXRlPw0KSXQncyB0aW1lIHJlcXVpcmVkIGZvciBwcm9wZXIgdHJhbnNpdGlvbiB0byBE RVZfSURMRSBzdGF0ZS4gDQo+DQo+PiArCX0NCj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0K Pj4gKw0KPj4gKy8qKg0KPj4gKyAqIGNkbnMzX2luaXRfb3RnX21vZGUgLSBpbml0aWFsaXplIGRy ZCBjb250cm9sbGVyDQo+PiArICogQGNkbnM6IFBvaW50ZXIgdG8gY29udHJvbGxlciBjb250ZXh0 IHN0cnVjdHVyZQ0KPj4gKyAqDQo+PiArICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3RoZXJ3aXNl IG5lZ2F0aXZlIGVycm5vDQo+PiArICovDQo+PiArc3RhdGljIGludCBjZG5zM19pbml0X290Z19t b2RlKHN0cnVjdCBjZG5zMyAqY2RucykNCj4+ICt7DQo+PiArCWludCByZXQgPSAwOw0KPj4gKw0K Pj4gKwljZG5zM19vdGdfZGlzYWJsZV9pcnEoY2Rucyk7DQo+PiArCS8qIGNsZWFyIGFsbCBpbnRl cnJ1cHRzICovDQo+PiArCXdyaXRlbCh+MCwgJmNkbnMtPm90Z19yZWdzLT5pdmVjdCk7DQo+PiAr DQo+PiArCXJldCA9IGNkbnMzX3NldF9tb2RlKGNkbnMsIFVTQl9EUl9NT0RFX09URyk7DQo+PiAr CWlmIChyZXQpDQo+PiArCQlyZXR1cm4gcmV0Ow0KPj4gKw0KPj4gKwlpZiAoY2RuczNfaXNfaG9z dChjZG5zKSkNCj4+ICsJCXJldCA9IGNkbnMzX2RyZF9zd2l0Y2hfaG9zdChjZG5zLCAxKTsNCj4+ ICsJZWxzZQ0KPj4gKwkJcmV0ID0gY2RuczNfZHJkX3N3aXRjaF9nYWRnZXQoY2RucywgMSk7DQo+ PiArDQo+PiArCWlmIChyZXQpDQo+PiArCQlyZXR1cm4gcmV0Ow0KPj4gKw0KPj4gKwljZG5zM19v dGdfZW5hYmxlX2lycShjZG5zKTsNCj4NCj5TY2hlZHVsZSBzd2l0Y2ggd29ya3F1ZXVlIHRvIGRl YWwgd2l0aCB1cGRhdGVkIElEIHN0YXRlPw0KDQpTY2hlZHVsZSBpcyBhZGRlZCBpbiBjZG5zM19k cmRfaXJxLiANCkRyaXZlciBzaG91bGQgcmVjZWl2ZSBpbnRlcnJ1cHQuIA0KIA0KPg0KPj4gKwly ZXR1cm4gcmV0Ow0KPj4gK30NCj4+ICsNCj4+ICsvKioNCj4+ICsgKiBjZG5zM19kcmRfdXBkYXRl X21vZGUgLSBpbml0aWFsaXplIG1vZGUgb2Ygb3BlcmF0aW9uDQo+PiArICogQGNkbnM6IFBvaW50 ZXIgdG8gY29udHJvbGxlciBjb250ZXh0IHN0cnVjdHVyZQ0KPj4gKyAqDQo+PiArICogUmV0dXJu cyAwIG9uIHN1Y2Nlc3Mgb3RoZXJ3aXNlIG5lZ2F0aXZlIGVycm5vDQo+PiArICovDQo+PiAraW50 IGNkbnMzX2RyZF91cGRhdGVfbW9kZShzdHJ1Y3QgY2RuczMgKmNkbnMpDQo+PiArew0KPj4gKwlp bnQgcmV0ID0gMDsNCj4+ICsNCj4+ICsJaWYgKGNkbnMtPmRlc2lyZWRfZHJfbW9kZSA9PSBjZG5z LT5jdXJyZW50X2RyX21vZGUpDQo+PiArCQlyZXR1cm4gcmV0Ow0KPj4gKw0KPj4gKwljZG5zM19k cmRfc3dpdGNoX2dhZGdldChjZG5zLCAwKTsNCj4+ICsJY2RuczNfZHJkX3N3aXRjaF9ob3N0KGNk bnMsIDApOw0KPg0KPldoeSBhcmUgeW91IHN0b3BwaW5nIGdhZGdldC9ob3N0IGhlcmU/DQo+T25l IG9yIGJvdGggb2YgbWlnaHQgbm90IGhhdmUgYmVlbiBzdGFydGVkLg0KDQpUaGVzZSBmdW5jdGlv bnMgb3BlcmF0ZSBvbmx5IG9uIE9URyByZWdpc3RlcnMuIEl0J3MgYWNjb3JkaW5nIHdpdGggDQpD RE5TMyBEUkQgc3BlY2lmaWNhdGlvbi4gDQpUaGV5IGRvbid0IHN0b3AgZ2FkZ2V0L2hvc3QsIGJ1 dCBvbmx5IHNldDoNCkhPU1RfQlVTX0RST1A9MQ0KSE9TVF9QT1dFUl9PRj0xDQpERVZfQlVTX0RS T1A9MQ0KREVWX1BPV0VSX09GRj0xDQoNCkRyaXZlciBtdXN0IHNldCB0aGVzZSBiaXRzIGJlZm9y ZSByZWNvbmZpZ3VyaW5nIERSRC4gDQo+DQo+PiArDQo+PiArCXN3aXRjaCAoY2Rucy0+ZGVzaXJl ZF9kcl9tb2RlKSB7DQo+PiArCWNhc2UgVVNCX0RSX01PREVfUEVSSVBIRVJBTDoNCj4+ICsJCXJl dCA9IGNkbnMzX3NldF9tb2RlKGNkbnMsIFVTQl9EUl9NT0RFX1BFUklQSEVSQUwpOw0KPj4gKwkJ YnJlYWs7DQo+PiArCWNhc2UgVVNCX0RSX01PREVfSE9TVDoNCj4+ICsJCXJldCA9IGNkbnMzX3Nl dF9tb2RlKGNkbnMsIFVTQl9EUl9NT0RFX0hPU1QpOw0KPj4gKwkJYnJlYWs7DQo+PiArCWNhc2Ug VVNCX0RSX01PREVfT1RHOg0KPj4gKwkJcmV0ID0gY2RuczNfaW5pdF9vdGdfbW9kZShjZG5zKTsN Cj4+ICsJCWJyZWFrOw0KPj4gKwlkZWZhdWx0Og0KPj4gKwkJZGV2X2VycihjZG5zLT5kZXYsICJV bnN1cHBvcnRlZCBtb2RlIG9mIG9wZXJhdGlvbiAlZFxuIiwNCj4+ICsJCQljZG5zLT5kcl9tb2Rl KTsNCj4+ICsJCXJldHVybiAtRUlOVkFMOw0KPj4gKwl9DQo+PiArDQo+PiArCXJldHVybiByZXQ7 DQo+PiArfQ0KPj4gKw0KPj4gKy8qKg0KPj4gKyAqIGNkbnMzX2RyZF9pcnEgLSBpbnRlcnJ1cHQg aGFuZGxlciBmb3IgT1RHIGV2ZW50cw0KPj4gKyAqDQo+PiArICogQGlycTogaXJxIG51bWJlciBm b3IgY2RuczMgY29yZSBkZXZpY2UNCj4+ICsgKiBAZGF0YTogc3RydWN0dXJlIG9mIGNkbnMzDQo+ PiArICoNCj4+ICsgKiBSZXR1cm5zIElSUV9IQU5ETEVEIG9yIElSUV9OT05FDQo+PiArICovDQo+ PiArc3RhdGljIGlycXJldHVybl90IGNkbnMzX2RyZF9pcnEoaW50IGlycSwgdm9pZCAqZGF0YSkN Cj4+ICt7DQo+PiArCWlycXJldHVybl90IHJldCA9IElSUV9OT05FOw0KPj4gKwlzdHJ1Y3QgY2Ru czMgKmNkbnMgPSBkYXRhOw0KPj4gKwl1MzIgcmVnOw0KPj4gKw0KPj4gKwlpZiAoY2Rucy0+ZHJf bW9kZSAhPSBVU0JfRFJfTU9ERV9PVEcpDQo+PiArCQlyZXR1cm4gcmV0Ow0KPj4gKw0KPj4gKwly ZWcgPSByZWFkbCgmY2Rucy0+b3RnX3JlZ3MtPml2ZWN0KTsNCj4+ICsNCj4+ICsJaWYgKCFyZWcp DQo+PiArCQlyZXR1cm4gcmV0Ow0KPj4gKw0KPj4gKwlpZiAocmVnICYgT1RHSUVOX0lEX0NIQU5H RV9JTlQpIHsNCj4+ICsJCWRldl9kYmcoY2Rucy0+ZGV2LCAiT1RHIElSUTogbmV3IElEOiAlZFxu IiwNCj4+ICsJCQljZG5zM19nZXRfaWQoY2RucykpOw0KPj4gKw0KPj4gKwkJcXVldWVfd29yayhz eXN0ZW1fZnJlZXphYmxlX3dxLCAmY2Rucy0+cm9sZV9zd2l0Y2hfd3EpOw0KPj4gKw0KPj4gKwkJ cmV0ID0gSVJRX0hBTkRMRUQ7DQo+PiArCX0NCj4+ICsNCj4+ICsJd3JpdGVsKH4wLCAmY2Rucy0+ b3RnX3JlZ3MtPml2ZWN0KTsNCj4+ICsJcmV0dXJuIHJldDsNCj4+ICt9DQo+PiArDQo+PiAraW50 IGNkbnMzX2RyZF9pbml0KHN0cnVjdCBjZG5zMyAqY2RucykNCj4+ICt7DQo+PiArCXZvaWQgX19p b21lbSAqcmVnczsNCj4+ICsJaW50IHJldCA9IDA7DQo+PiArCXUzMiBzdGF0ZTsNCj4+ICsNCj4+ ICsJcmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShjZG5zLT5kZXYsICZjZG5zLT5vdGdfcmVz KTsNCj4+ICsJaWYgKElTX0VSUihyZWdzKSkNCj4+ICsJCXJldHVybiBQVFJfRVJSKHJlZ3MpOw0K Pj4gKw0KPj4gKwkvKiBEZXRlY3Rpb24gb2YgRFJEIHZlcnNpb24uIENvbnRyb2xsZXIgaGFzIGJl ZW4gcmVsZWFzZWQNCj4+ICsJICogaW4gdHdvIHZlcnNpb25zLiBCb3RoIGFyZSBzaW1pbGFyLCBi dXQgdGhleSBoYXZlIHNhbWUgY2hhbmdlcw0KPj4gKwkgKiBpbiByZWdpc3RlciBtYXBzLg0KPj4g KwkgKiBUaGUgZmlyc3QgcmVnaXN0ZXIgaW4gb2xkIHZlcnNpb24gaXMgY29tbWFuZCByZWdpc3Rl ciBhbmQgaXQncyByZWFkDQo+PiArCSAqIG9ubHksIHNvIGRyaXZlciBzaG91bGQgcmVhZCAwIGZy b20gaXQuIE9uIHRoZSBvdGhlciBoYW5kLCBpbiB2MQ0KPj4gKwkgKiB0aGUgZmlyc3QgcmVnaXN0 ZXIgY29udGFpbnMgZGV2aWNlIElEIG51bWJlciB3aGljaCBpcyBub3Qgc2V0IHRvIDAuDQo+PiAr CSAqIERyaXZlciB1c2VzIHRoaXMgZmFjdCB0byBkZXRlY3QgdGhlIHByb3BlciB2ZXJzaW9uIG9m DQo+PiArCSAqIGNvbnRyb2xsZXIuDQo+PiArCSAqLw0KPj4gKwljZG5zLT5vdGdfdjBfcmVncyA9 IHJlZ3M7DQo+PiArCWlmICghcmVhZGwoJmNkbnMtPm90Z192MF9yZWdzLT5jbWQpKSB7DQo+PiAr CQljZG5zLT52ZXJzaW9uICA9IENETlMzX0NPTlRST0xMRVJfVjA7DQo+PiArCQljZG5zLT5vdGdf djFfcmVncyA9IE5VTEw7DQo+PiArCQljZG5zLT5vdGdfcmVncyA9IHJlZ3M7DQo+PiArCQlkZXZf aW5mbyhjZG5zLT5kZXYsICJEUkQgdmVyc2lvbiB2MCAoJTA4eClcbiIsDQo+PiArCQkJIHJlYWRs KCZjZG5zLT5vdGdfdjBfcmVncy0+dmVyc2lvbikpOw0KPj4gKwl9IGVsc2Ugew0KPj4gKwkJY2Ru cy0+b3RnX3YwX3JlZ3MgPSBOVUxMOw0KPj4gKwkJY2Rucy0+b3RnX3YxX3JlZ3MgPSByZWdzOw0K Pj4gKwkJY2Rucy0+b3RnX3JlZ3MgPSAodm9pZCAqKSZjZG5zLT5vdGdfdjFfcmVncy0+Y21kOw0K Pj4gKwkJY2Rucy0+dmVyc2lvbiAgPSBDRE5TM19DT05UUk9MTEVSX1YxOw0KPj4gKwkJZGV2X2lu Zm8oY2Rucy0+ZGV2LCAiRFJEIHZlcnNpb24gdjEgKElEOiAlMDh4LCByZXY6ICUwOHgpXG4iLA0K Pj4gKwkJCSByZWFkbCgmY2Rucy0+b3RnX3YxX3JlZ3MtPmRpZCksDQo+PiArCQkJIHJlYWRsKCZj ZG5zLT5vdGdfdjFfcmVncy0+cmlkKSk7DQo+PiArCX0NCj4+ICsNCj4+ICsJc3RhdGUgPSBPVEdT VFNfU1RSQVAocmVhZGwoJmNkbnMtPm90Z19yZWdzLT5zdHMpKTsNCj4+ICsNCj4+ICsJLyogVXBk YXRlIGRyX21vZGUgYWNjb3JkaW5nIHRvIFNUUkFQIGNvbmZpZ3VyYXRpb24uICovDQo+PiArCWNk bnMtPmRyX21vZGUgPSBVU0JfRFJfTU9ERV9PVEc7DQo+PiArCWlmIChzdGF0ZSA9PSBPVEdTVFNf U1RSQVBfSE9TVCkgew0KPj4gKwkJZGV2X2luZm8oY2Rucy0+ZGV2LCAiQ29udHJvbGxlciBzdHJh cHBlZCB0byBIT1NUXG4iKTsNCj4+ICsJCWNkbnMtPmRyX21vZGUgPSBVU0JfRFJfTU9ERV9IT1NU Ow0KPj4gKwl9IGVsc2UgaWYgKHN0YXRlID09IE9UR1NUU19TVFJBUF9HQURHRVQpIHsNCj4+ICsJ CWRldl9pbmZvKGNkbnMtPmRldiwgIkNvbnRyb2xsZXIgc3RyYXBwZWQgdG8gUEVSSVBIRVJBTFxu Iik7DQo+PiArCQljZG5zLT5kcl9tb2RlID0gVVNCX0RSX01PREVfUEVSSVBIRVJBTDsNCj4+ICsJ fQ0KPj4gKw0KPj4gKwljZG5zLT5kZXNpcmVkX2RyX21vZGUgPSBjZG5zLT5kcl9tb2RlOw0KPj4g KwljZG5zLT5jdXJyZW50X2RyX21vZGUgPSBVU0JfRFJfTU9ERV9VTktOT1dOOw0KPj4gKw0KPj4g KwlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGNkbnMtPmRldiwgY2Rucy0+aXJxLCBj ZG5zM19kcmRfaXJxLA0KPj4gKwkJCQkJTlVMTCwgSVJRRl9TSEFSRUQsDQo+PiArCQkJCQlkZXZf bmFtZShjZG5zLT5kZXYpLCBjZG5zKTsNCj4+ICsNCj4+ICsJaWYgKHJldCkNCj4+ICsJCXJldHVy biByZXQ7DQo+PiArDQo+PiArCXN0YXRlID0gcmVhZGwoJmNkbnMtPm90Z19yZWdzLT5zdHMpOw0K Pj4gKwlpZiAoT1RHU1RTX09UR19OUkRZKHN0YXRlKSAhPSAwKSB7DQo+PiArCQlkZXZfZXJyKGNk bnMtPmRldiwgIkNhZGVuY2UgVVNCMyBPVEcgZGV2aWNlIG5vdCByZWFkeVxuIik7DQo+PiArCQly ZXR1cm4gLUVOT0RFVjsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlyZXQgPSBjZG5zM19kcmRfdXBkYXRl X21vZGUoY2Rucyk7DQo+PiArDQo+PiArCXJldHVybiByZXQ7DQo+PiArfQ0KPj4gKw0KPj4gK2lu dCBjZG5zM19kcmRfZXhpdChzdHJ1Y3QgY2RuczMgKmNkbnMpDQo+PiArew0KPj4gKwlyZXR1cm4g Y2RuczNfZHJkX3N3aXRjaF9ob3N0KGNkbnMsIDApOw0KPg0KPldoeSBvbmx5IHN0b3BwaW5nIGhv c3Q/DQpjZG5zM19kcmRfc3dpdGNoX2dhZGdldChjZG5zLCAwKSAgbWFrZSAgdGhlIHNhbWUgYXMg Y2RuczNfZHJkX3N3aXRjaF9ob3N0KGNkbnMsIDApLiANCkl0J3Mgb25seSBzZXQgc29tZSBiaXRz IGluIE9UR19DTUQgcmVnaXN0ZXIsIHRvIGZvcmNlIHRyYW5zaXRpb24gdG8gSURMRSBzdGF0ZS4N Cj4NCj5JIHRoaW5rIHdlIG5lZWQgdG8gc3RvcCBhY3RpdmUgcm9sZSwgZGlzYWJsZSBJUlEgZ2Vu ZXJhdGlvbiBhbmQgZnJlZSBpcnE/DQpTdG9wIGFjdGl2ZSByb2xlIGlzIGludm9rZWQgaW4gY29y ZS5jIGZpbGUgZnJvbSBjZG5zM19yZW1vdmUgLT5jZG5zM19leGl0X3JvbGVzDQoNCj4NCj4+ICt9 DQo+DQo+PHNuaXA+DQo+DQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2RuczMvZ2FkZ2V0 LmMgYi9kcml2ZXJzL3VzYi9jZG5zMy9nYWRnZXQuYw0KPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQN Cj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uN2Y3ZjI0ZWUzYzRiDQo+PiAtLS0gL2Rldi9udWxsDQo+ PiArKysgYi9kcml2ZXJzL3VzYi9jZG5zMy9nYWRnZXQuYw0KPj4gQEAgLTAsMCArMSwyMDAzIEBA DQo+PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCj4+ICsvKg0KPj4gKyAq IENhZGVuY2UgVVNCU1MgRFJEIERyaXZlciAtIGdhZGdldCBzaWRlLg0KPj4gKyAqDQo+PiArICog Q29weXJpZ2h0IChDKSAyMDE4IENhZGVuY2UgRGVzaWduIFN5c3RlbXMuDQo+PiArICogQ29weXJp Z2h0IChDKSAyMDE3LTIwMTggTlhQDQo+PiArICoNCj4+ICsgKiBBdXRob3JzOiBQYXdlbCBKZXog PHBqZXpAY2FkZW5jZS5jb20+LA0KPj4gKyAqICAgICAgICAgIFBhd2VsIExhc3pjemFrIDxwYXdl bGxAY2FkZW5jZS5jb20+DQo+PiArICoJICAgIFBldGVyIENoZW4gPHBldGVyLmNoZW5AbnhwLmNv bT4NCj4+ICsgKi8NCj4+ICsNCj4NCj48c25pcD4NCj4NCj4+ICsNCj4+ICtzdGF0aWMgdm9pZCBj ZG5zM19nYWRnZXRfZGlzYWJsZShzdHJ1Y3QgY2RuczMgKmNkbnMpDQo+PiArew0KPj4gKwlzdHJ1 Y3QgY2RuczNfZGV2aWNlICpwcml2X2RldjsNCj4+ICsNCj4+ICsJcHJpdl9kZXYgPSBjZG5zLT5n YWRnZXRfZGV2Ow0KPj4gKw0KPj4gKwlpZiAocHJpdl9kZXYtPmdhZGdldF9kcml2ZXIpDQo+PiAr CQlwcml2X2Rldi0+Z2FkZ2V0X2RyaXZlci0+ZGlzY29ubmVjdCgmcHJpdl9kZXYtPmdhZGdldCk7 PiArDQo+PiArCXVzYl9nYWRnZXRfZGlzY29ubmVjdCgmcHJpdl9kZXYtPmdhZGdldCk7DQo+PiAr CXByaXZfZGV2LT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfVU5LTk9XTjsNCj4+ICt9DQo+PiAr DQo+PiArdm9pZCBjZG5zM19nYWRnZXRfZXhpdChzdHJ1Y3QgY2RuczMgKmNkbnMpDQo+PiArew0K Pj4gKwlzdHJ1Y3QgY2RuczNfZGV2aWNlICpwcml2X2RldjsNCj4+ICsNCj4+ICsJcHJpdl9kZXYg PSBjZG5zLT5nYWRnZXRfZGV2Ow0KPj4gKw0KPj4gKwljZG5zM19nYWRnZXRfZGlzYWJsZShjZG5z KTsNCj4+ICsNCj4+ICsJZGV2bV9mcmVlX2lycShjZG5zLT5kZXYsIGNkbnMtPmlycSwgY2Rucyk7 DQo+PiArDQo+PiArCXBtX3J1bnRpbWVfbWFya19sYXN0X2J1c3koY2Rucy0+ZGV2KTsNCj4+ICsJ cG1fcnVudGltZV9wdXRfYXV0b3N1c3BlbmQoY2Rucy0+ZGV2KTsNCj4+ICsNCj4+ICsJdXNiX2Rl bF9nYWRnZXRfdWRjKCZwcml2X2Rldi0+Z2FkZ2V0KTsNCj4+ICsNCj4+ICsJY2RuczNfZnJlZV9h bGxfZXBzKHByaXZfZGV2KTsNCj4+ICsNCj4+ICsJZG1hX2ZyZWVfY29oZXJlbnQocHJpdl9kZXYt PnN5c2RldiwgOCwgcHJpdl9kZXYtPnNldHVwX2J1ZiwNCj4+ICsJCQkgIHByaXZfZGV2LT5zZXR1 cF9kbWEpOw0KPj4gKw0KPj4gKwlrZnJlZShwcml2X2Rldi0+emxwX2J1Zik7DQo+PiArCWtmcmVl KHByaXZfZGV2KTsNCj4+ICsJY2Rucy0+Z2FkZ2V0X2RldiA9IE5VTEw7DQo+PiArfQ0KPj4gKw0K Pj4gK3N0YXRpYyBpbnQgY2RuczNfZ2FkZ2V0X3N0YXJ0KHN0cnVjdCBjZG5zMyAqY2RucykNCj4+ ICt7DQo+PiArCXN0cnVjdCBjZG5zM19kZXZpY2UgKnByaXZfZGV2Ow0KPj4gKwl1MzIgbWF4X3Nw ZWVkOw0KPj4gKwlpbnQgcmV0Ow0KPj4gKw0KPj4gKwlwcml2X2RldiA9IGt6YWxsb2Moc2l6ZW9m KCpwcml2X2RldiksIEdGUF9LRVJORUwpOw0KPj4gKwlpZiAoIXByaXZfZGV2KQ0KPj4gKwkJcmV0 dXJuIC1FTk9NRU07DQo+PiArDQo+PiArCWNkbnMtPmdhZGdldF9kZXYgPSBwcml2X2RldjsNCj4+ ICsJcHJpdl9kZXYtPnN5c2RldiA9IGNkbnMtPmRldjsNCj4+ICsJcHJpdl9kZXYtPmRldiA9IGNk bnMtPmRldjsNCj4+ICsJcHJpdl9kZXYtPnJlZ3MgPSBjZG5zLT5kZXZfcmVnczsNCj4+ICsNCj4+ ICsJbWF4X3NwZWVkID0gdXNiX2dldF9tYXhpbXVtX3NwZWVkKGNkbnMtPmRldik7DQo+PiArDQo+ PiArCS8qIENoZWNrIHRoZSBtYXhpbXVtX3NwZWVkIHBhcmFtZXRlciAqLw0KPj4gKwlzd2l0Y2gg KG1heF9zcGVlZCkgew0KPj4gKwljYXNlIFVTQl9TUEVFRF9GVUxMOg0KPj4gKwljYXNlIFVTQl9T UEVFRF9ISUdIOg0KPj4gKwljYXNlIFVTQl9TUEVFRF9TVVBFUjoNCj4+ICsJCWJyZWFrOw0KPj4g KwlkZWZhdWx0Og0KPj4gKwkJZGV2X2VycihjZG5zLT5kZXYsICJpbnZhbGlkIG1heGltdW1fc3Bl ZWQgcGFyYW1ldGVyICVkXG4iLA0KPj4gKwkJCW1heF9zcGVlZCk7DQo+PiArCQkvKiBmYWxsIHRo cm91Z2ggKi8NCj4+ICsJY2FzZSBVU0JfU1BFRURfVU5LTk9XTjoNCj4+ICsJCS8qIGRlZmF1bHQg dG8gc3VwZXJzcGVlZCAqLw0KPj4gKwkJbWF4X3NwZWVkID0gVVNCX1NQRUVEX1NVUEVSOw0KPj4g KwkJYnJlYWs7DQo+PiArCX0NCj4+ICsNCj4+ICsJLyogZmlsbCBnYWRnZXQgZmllbGRzICovDQo+ PiArCXByaXZfZGV2LT5nYWRnZXQubWF4X3NwZWVkID0gbWF4X3NwZWVkOw0KPj4gKwlwcml2X2Rl di0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX1VOS05PV047DQo+PiArCXByaXZfZGV2LT5nYWRn ZXQub3BzID0gJmNkbnMzX2dhZGdldF9vcHM7DQo+PiArCXByaXZfZGV2LT5nYWRnZXQubmFtZSA9 ICJ1c2Itc3MtZ2FkZ2V0IjsNCj4+ICsJcHJpdl9kZXYtPmdhZGdldC5zZ19zdXBwb3J0ZWQgPSAx Ow0KPj4gKw0KPj4gKwlzcGluX2xvY2tfaW5pdCgmcHJpdl9kZXYtPmxvY2spOw0KPj4gKwlJTklU X1dPUksoJnByaXZfZGV2LT5wZW5kaW5nX3N0YXR1c193cSwNCj4+ICsJCSAgY2RuczNfcGVuZGlu Z19zZXR1cF9zdGF0dXNfaGFuZGxlcik7DQo+PiArDQo+PiArCS8qIGluaXRpYWxpemUgZW5kcG9p bnQgY29udGFpbmVyICovDQo+PiArCUlOSVRfTElTVF9IRUFEKCZwcml2X2Rldi0+Z2FkZ2V0LmVw X2xpc3QpOw0KPj4gKw0KPj4gKwlyZXQgPSBjZG5zM19pbml0X2Vwcyhwcml2X2Rldik7DQo+PiAr CWlmIChyZXQpIHsNCj4+ICsJCWRldl9lcnIocHJpdl9kZXYtPmRldiwgIkZhaWxlZCB0byBjcmVh dGUgZW5kcG9pbnRzXG4iKTsNCj4+ICsJCWdvdG8gZXJyMTsNCj4+ICsJfQ0KPj4gKw0KPj4gKwkv KiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHNldHVwIHBhY2tldCBidWZmZXIgKi8NCj4+ICsJcHJpdl9k ZXYtPnNldHVwX2J1ZiA9IGRtYV9hbGxvY19jb2hlcmVudChwcml2X2Rldi0+c3lzZGV2LCA4LA0K Pj4gKwkJCQkJCSAmcHJpdl9kZXYtPnNldHVwX2RtYSwgR0ZQX0RNQSk7DQo+PiArCWlmICghcHJp dl9kZXYtPnNldHVwX2J1Zikgew0KPj4gKwkJZGV2X2Vycihwcml2X2Rldi0+ZGV2LCAiRmFpbGVk IHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgU0VUVVAgYnVmZmVyXG4iKTsNCj4+ICsJCXJldCA9IC1F Tk9NRU07DQo+PiArCQlnb3RvIGVycjI7DQo+PiArCX0NCj4+ICsNCj4+ICsJcHJpdl9kZXYtPmRl dl92ZXIgPSByZWFkbCgmcHJpdl9kZXYtPnJlZ3MtPnVzYl9jYXA2KTsNCj4+ICsJZGV2X2RiZyhw cml2X2Rldi0+ZGV2LCAiRGV2aWNlIENvbnRyb2xsZXIgdmVyc2lvbjogJTA4eFxuIiwNCj4+ICsJ CXJlYWRsKCZwcml2X2Rldi0+cmVncy0+dXNiX2NhcDYpKTsNCj4+ICsJZGV2X2RiZyhwcml2X2Rl di0+ZGV2LCAiVVNCIENhcGFiaWxpdGllczo6ICUwOHhcbiIsDQo+PiArCQlyZWFkbCgmcHJpdl9k ZXYtPnJlZ3MtPnVzYl9jYXAxKSk7DQo+PiArCWRldl9kYmcocHJpdl9kZXYtPmRldiwgIk9uLUNo aXAgbWVtb3J5IGNuZmlndXJhdGlvbjogJTA4eFxuIiwNCj4+ICsJCXJlYWRsKCZwcml2X2Rldi0+ cmVncy0+dXNiX2NhcDIpKTsNCj4+ICsNCj4+ICsJcHJpdl9kZXYtPnpscF9idWYgPSBremFsbG9j KENETlMzX0VQX1pMUF9CVUZfU0laRSwgR0ZQX0tFUk5FTCk7DQo+PiArCWlmICghcHJpdl9kZXYt PnpscF9idWYpIHsNCj4+ICsJCXJldCA9IC1FTk9NRU07DQo+PiArCQlnb3RvIGVycjM7DQo+PiAr CX0NCj4+ICsNCj4+ICsJLyogYWRkIFVTQiBnYWRnZXQgZGV2aWNlICovDQo+PiArCXJldCA9IHVz Yl9hZGRfZ2FkZ2V0X3VkYyhwcml2X2Rldi0+ZGV2LCAmcHJpdl9kZXYtPmdhZGdldCk7DQo+PiAr CWlmIChyZXQgPCAwKSB7DQo+PiArCQlkZXZfZXJyKHByaXZfZGV2LT5kZXYsDQo+PiArCQkJIkZh aWxlZCB0byByZWdpc3RlciBVU0IgZGV2aWNlIGNvbnRyb2xsZXJcbiIpOw0KPj4gKwkJZ290byBl cnI0Ow0KPj4gKwl9DQo+PiArDQo+PiArCXJldHVybiAwOw0KPj4gK2VycjQ6DQo+PiArCWtmcmVl KHByaXZfZGV2LT56bHBfYnVmKTsNCj4+ICtlcnIzOg0KPj4gKwlkbWFfZnJlZV9jb2hlcmVudChw cml2X2Rldi0+c3lzZGV2LCA4LCBwcml2X2Rldi0+c2V0dXBfYnVmLA0KPj4gKwkJCSAgcHJpdl9k ZXYtPnNldHVwX2RtYSk7DQo+PiArZXJyMjoNCj4+ICsJY2RuczNfZnJlZV9hbGxfZXBzKHByaXZf ZGV2KTsNCj4+ICtlcnIxOg0KPj4gKwljZG5zLT5nYWRnZXRfZGV2ID0gTlVMTDsNCj4+ICsJcmV0 dXJuIHJldDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBfX2NkbnMzX2dhZGdldF9pbml0 KHN0cnVjdCBjZG5zMyAqY2RucykNCj4+ICt7DQo+PiArCXN0cnVjdCBjZG5zM19kZXZpY2UgKnBy aXZfZGV2Ow0KPj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KPj4gKwlpbnQgcmV0ID0gMDsNCj4+ ICsNCj4+ICsJcmV0ID0gY2RuczNfZ2FkZ2V0X3N0YXJ0KGNkbnMpOw0KPj4gKwlpZiAocmV0KQ0K Pj4gKwkJcmV0dXJuIHJldDsNCj4+ICsNCj4+ICsJcHJpdl9kZXYgPSBjZG5zLT5nYWRnZXRfZGV2 Ow0KPj4gKwlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGNkbnMtPmRldiwgY2Rucy0+ aXJxLA0KPj4gKwkJCQkJY2RuczNfZGV2aWNlX2lycV9oYW5kbGVyLA0KPj4gKwkJCQkJY2RuczNf ZGV2aWNlX3RocmVhZF9pcnFfaGFuZGxlciwNCj4+ICsJCQkJCUlSUUZfU0hBUkVELCBkZXZfbmFt ZShjZG5zLT5kZXYpLCBjZG5zKTsNCj4+ICsJaWYgKHJldCkNCj4+ICsJCWdvdG8gZXJyMDsNCj4+ ICsNCj4+ICsJcG1fcnVudGltZV9nZXRfc3luYyhjZG5zLT5kZXYpOw0KPnBtX3J1bnRpbWVfZ2V0 X3N5bmMoKSBzaG91bGQgYmUgZG9uZSBiZWZvcmUgY2RuczNfZ2FkZ2V0X3N0YXJ0KCkNCk9rLg0K Pg0KPj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdl9kZXYtPmxvY2ssIGZsYWdzKTsNCj4+ICsJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdl9kZXYtPmxvY2ssIGZsYWdzKTsNCj4NCj5SZWR1 bmRhbnQgc3BpbmxvY2sgdXNhZ2U/DQo+DQo+PiArCXJldHVybiAwOw0KPj4gK2VycjA6DQo+PiAr CWNkbnMzX2dhZGdldF9leGl0KGNkbnMpOw0KPj4gKwlyZXR1cm4gcmV0Ow0KPj4gK30NCj4+ICsN Cj4+ICtzdGF0aWMgaW50IGNkbnMzX2dhZGdldF9zdXNwZW5kKHN0cnVjdCBjZG5zMyAqY2Rucywg Ym9vbCBkb193YWtldXApDQo+PiArew0KPj4gKwljZG5zM19nYWRnZXRfZGlzYWJsZShjZG5zKTsN Cj4NCj5Eb2VzIHRoaXMgZW5zdXJlIGdhZGdldCBjb250cm9sbGVyIGlzIHN0b3BwZWQ/DQoNClll cy4gDQo+DQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGNkbnMz X2dhZGdldF9yZXN1bWUoc3RydWN0IGNkbnMzICpjZG5zLCBib29sIGhpYmVybmF0ZWQpDQo+PiAr ew0KPj4gKwlzdHJ1Y3QgY2RuczNfZGV2aWNlICpwcml2X2RldjsNCj4+ICsJdW5zaWduZWQgbG9u ZyBmbGFnczsNCj4+ICsNCj4+ICsJcHJpdl9kZXYgPSBjZG5zLT5nYWRnZXRfZGV2Ow0KPj4gKwlz cGluX2xvY2tfaXJxc2F2ZSgmcHJpdl9kZXYtPmxvY2ssIGZsYWdzKTsNCj4+ICsNCj4+ICsJaWYg KCFwcml2X2Rldi0+Z2FkZ2V0X2RyaXZlcikgew0KPj4gKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmcHJpdl9kZXYtPmxvY2ssIGZsYWdzKTsNCj4+ICsJCXJldHVybiAwOw0KPj4gKwl9DQo+PiAr DQo+PiArCWNkbnMzX2dhZGdldF9jb25maWcocHJpdl9kZXYpOw0KPj4gKwlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZwcml2X2Rldi0+bG9jaywgZmxhZ3MpOw0KPj4gKwlyZXR1cm4gMDsNCj4+ICt9 DQo+PiArDQo+PiArLyoqDQo+PiArICogY2RuczNfZ2FkZ2V0X2luaXQgLSBpbml0aWFsaXplIGRl dmljZSBzdHJ1Y3R1cmUNCj4+ICsgKg0KPj4gKyAqIGNkbnM6IGNkbnMzIGluc3RhbmNlDQo+PiAr ICoNCj4+ICsgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBnYWRnZXQuDQo+PiArICov DQo+PiAraW50IGNkbnMzX2dhZGdldF9pbml0KHN0cnVjdCBjZG5zMyAqY2RucykNCj4+ICt7DQo+ PiArCXN0cnVjdCBjZG5zM19yb2xlX2RyaXZlciAqcmRydjsNCj4+ICsNCj4+ICsJcmRydiA9IGRl dm1fa3phbGxvYyhjZG5zLT5kZXYsIHNpemVvZigqcmRydiksIEdGUF9LRVJORUwpOw0KPj4gKwlp ZiAoIXJkcnYpDQo+PiArCQlyZXR1cm4gLUVOT01FTTsNCj4+ICsNCj4+ICsJcmRydi0+c3RhcnQJ PSBfX2NkbnMzX2dhZGdldF9pbml0Ow0KPj4gKwlyZHJ2LT5zdG9wCT0gY2RuczNfZ2FkZ2V0X2V4 aXQ7DQo+PiArCXJkcnYtPnN1c3BlbmQJPSBjZG5zM19nYWRnZXRfc3VzcGVuZDsNCj4+ICsJcmRy di0+cmVzdW1lCT0gY2RuczNfZ2FkZ2V0X3Jlc3VtZTsNCj4+ICsJcmRydi0+c3RhdGUJPSBDRE5T M19ST0xFX1NUQVRFX0lOQUNUSVZFOw0KPj4gKwlyZHJ2LT5uYW1lCT0gImdhZGdldCI7DQo+PiAr CWNkbnMtPnJvbGVzW0NETlMzX1JPTEVfR0FER0VUXSA9IHJkcnY7DQo+PiArDQo+PiArCXJldHVy biAwOw0KPj4gK30NCj4NCj48c25pcD4NCj4NCj4tLQ0KPmNoZWVycywNCj4tcm9nZXINCj5UZXhh cyBJbnN0cnVtZW50cyBGaW5sYW5kIE95LCBQb3Jra2FsYW5rYXR1IDIyLCAwMDE4MCBIZWxzaW5r aS4NCj5ZLXR1bm51cy9CdXNpbmVzcyBJRDogMDYxNTUyMS00LiBLb3RpcGFpa2thL0RvbWljaWxl OiBIZWxzaW5raQ0KDQpDaGVlcnMsDQpQYXdlbAo=