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=-1.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,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 43DE2C04EB9 for ; Thu, 6 Dec 2018 09:31:43 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 9740620850 for ; Thu, 6 Dec 2018 09:31:42 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=cadence.com header.i=@cadence.com header.b="Nu+p+hGY"; dkim=pass (1024-bit key) header.d=cadence.com header.i=@cadence.com header.b="Mnl7pzfx" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9740620850 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=cadence.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729234AbeLFJbl (ORCPT ); Thu, 6 Dec 2018 04:31:41 -0500 Received: from mx0b-0014ca01.pphosted.com ([208.86.201.193]:42748 "EHLO mx0a-0014ca01.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727575AbeLFJbl (ORCPT ); Thu, 6 Dec 2018 04:31:41 -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 wB69NuDu029179; Thu, 6 Dec 2018 01:31:24 -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=V4H98zTOTpTZtyT+l+EsTFxgxXFfg7BEBjCSD34MsmQ=; b=Nu+p+hGY/0ZRDk60WcBo8XM3lOo3erXBTcm2ulFNZKj9xuaMO6u0XUZf6auA+XDABSZq F6ho6fxh9KGssoRrjKgIjsImGnY43VruD/+PQMwn7QvNdpClC/hgyehEQ6ZJuSdO21NH LGcXxr/kkHj0aYv6hoqaZJn5nwMAaSVu9vtaFDqjFPLXLM7WunHNgeg7bgouarCJkbRt /GqaDQvd899Dfd0XxMIj9STWT+L/qcvP0xO0pmDsRa6N6MHvXGvPc/oBhl3NS4VPwssh /evtKJTEG3fO5g1OS8vjz0pMEN3U1KX6Kw7s130sqx1zvRuuktENP74d2RFfRXpj49/5 LA== Authentication-Results: cadence.com; spf=pass smtp.mailfrom=pawell@cadence.com Received: from nam01-by2-obe.outbound.protection.outlook.com (mail-by2nam01lp2054.outbound.protection.outlook.com [104.47.34.54]) by mx0b-0014ca01.pphosted.com with ESMTP id 2p6w7hs2g6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Thu, 06 Dec 2018 01:31:23 -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=V4H98zTOTpTZtyT+l+EsTFxgxXFfg7BEBjCSD34MsmQ=; b=Mnl7pzfxXUhLbVdCASUS8KJWcNVdykdY5Ueof4tTGhdjFy+Dm7iih+cN6wkCRIKnF3PhswAMThFqYNzT6MwCqcgTNCl2yxFn2kkAdzQzO0+0q+AJLjWN64MCyYSX/Qrzr/JLAI8KiOf8ea4/ST26J8q1OfywbXXM5fR/sEGnbB4= Received: from BN7PR07MB4705.namprd07.prod.outlook.com (52.135.249.160) by BN7PR07MB4755.namprd07.prod.outlook.com (52.135.250.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1404.19; Thu, 6 Dec 2018 09:31:18 +0000 Received: from BN7PR07MB4705.namprd07.prod.outlook.com ([fe80::95fe:23a9:24c4:f93c]) by BN7PR07MB4705.namprd07.prod.outlook.com ([fe80::95fe:23a9:24c4:f93c%3]) with mapi id 15.20.1404.021; Thu, 6 Dec 2018 09:31:18 +0000 From: Pawel Laszczak To: Roger Quadros , Peter Chen CC: "devicetree@vger.kernel.org" , Greg Kroah-Hartman , "linux-usb@vger.kernel.org" , lkml , Alan Douglas , "jbergsagel@ti.com" , "nsekhar@ti.com" , "nm@ti.com" , Suresh Punnoose , "peter.chen@nxp.com" , Pawel Jez , Rahul Kumar Subject: RE: [RFC PATCH v2 04/15] usb:cdns3: Driver initialization code. Thread-Topic: [RFC PATCH v2 04/15] usb:cdns3: Driver initialization code. Thread-Index: AQHUfycKfg2nmnNwYkGzkCY+37gGkqVdQtkAgBEbpICAACBSAIADDJ9g Date: Thu, 6 Dec 2018 09:31:18 +0000 Message-ID: References: <1542535751-16079-1-git-send-email-pawell@cadence.com> <1542535751-16079-5-git-send-email-pawell@cadence.com> <5BF7E5E8.3090406@ti.com> <5C065AEE.4010205@ti.com> In-Reply-To: <5C065AEE.4010205@ti.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-dg-ref: PG1ldGE+PGF0IG5tPSJib2R5LnR4dCIgcD0iYzpcdXNlcnNccGF3ZWxsXGFwcGRhdGFccm9hbWluZ1wwOWQ4NDliNi0zMmQzLTRhNDAtODVlZS02Yjg0YmEyOWUzNWJcbXNnc1xtc2ctYThiZGUwN2UtZjkzOS0xMWU4LTg3MjYtMWM0ZDcwMWRmYmE0XGFtZS10ZXN0XGE4YmRlMDdmLWY5MzktMTFlOC04NzI2LTFjNGQ3MDFkZmJhNGJvZHkudHh0IiBzej0iMTQ0NDQiIHQ9IjEzMTg4NTYyMjc2MjE2Mzc4NSIgaD0idlBIQjlWczZWQTRzclM1ZEJuUzIrMjRPOWxBPSIgaWQ9IiIgYmw9IjAiIGJvPSIxIi8+PC9tZXRhPg== x-dg-rorf: x-originating-ip: [185.217.253.59] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;BN7PR07MB4755;20:iuVkSJmMY3XI1cYQii/Zipoxo+9CovMmIjvJ9jiy5i09If2B0R0ZVd/l4iE5WB0eQi2S4ZR5pLq/zc2NvDpcQuSvtMDvo6xihGeLnIxLOTG2xdhAGxZNYN5tZ3ANu2jhQ2w/OulhBL43voP4TArZ67LrNhi3eX4R6igXL3Ea2G7E6wAAmuBunSCemWZEzB1C6EHUoEVRsvFU9QDIiSA7F+kElih7XnVlhnp8DKzGtE2PfRtx4eXVsrm5LUV7rAZy x-ms-office365-filtering-correlation-id: 21757880-6a63-4e34-f38a-08d65b5d9387 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390098)(7020095)(4652040)(8989299)(5600074)(711020)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020);SRVR:BN7PR07MB4755; x-ms-traffictypediagnostic: BN7PR07MB4755: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(10201501046)(3002001)(93006095)(93001095)(3231455)(999002)(944501520)(52105112)(148016)(149066)(150057)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123562045)(20161123560045)(20161123564045)(201708071742011)(7699051)(76991095);SRVR:BN7PR07MB4755;BCL:0;PCL:0;RULEID:;SRVR:BN7PR07MB4755; x-forefront-prvs: 087894CD3C x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(346002)(376002)(396003)(39860400002)(136003)(366004)(36092001)(199004)(189003)(33656002)(7736002)(305945005)(316002)(476003)(486006)(54906003)(110136005)(74316002)(7416002)(2906002)(186003)(26005)(76176011)(7696005)(6506007)(86362001)(6436002)(102836004)(93886005)(229853002)(9686003)(55016002)(6246003)(14454004)(478600001)(5660300001)(11346002)(446003)(25786009)(106356001)(105586002)(53936002)(68736007)(4326008)(107886003)(39060400002)(256004)(14444005)(81166006)(81156014)(8676002)(71190400001)(71200400001)(6116002)(4744004)(217873002)(66066001)(99286004)(3846002)(97736004)(8936002);DIR:OUT;SFP:1101;SCL:1;SRVR:BN7PR07MB4755;H:BN7PR07MB4705.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-microsoft-antispam-message-info: IiTB9+c/h3B5Oj5CIBdhLT0qsdni8b2QoPYGcSL1z/BSrCY/xGnZ6q6H5HGs1QAw6rG+diG4B5uDn1DioOWrY8CnXFrDn2LsWtE/BhIkR7Szmr3GTnJsCAFViA29WF/I14a7dqgjX5GmthsL6e79iB94mdU9uBd3U/YwrksQ7MMlq6jecTJcrtPkB08QfVohCiL2r3URbY1orQDa58Da5ArVij4+Anb1fgOykGibb4DTGbw8ClYDL09T1NEF8hJVAEPcyKicAZS5GPQJYW3W/pnFac5jv1KPS/YApehvxjaCwjgMuatvhJb9T9zJIxJU9YIj9H8DpBmtqR9HaEjRGlb2rX8DD3nKayDXTl9eaRI= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM 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: 21757880-6a63-4e34-f38a-08d65b5d9387 X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Dec 2018 09:31:18.3369 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: d36035c5-6ce6-4662-a3dc-e762e61ae4c9 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN7PR07MB4755 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=2018-12-06_03:,, 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-1812060085 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGksDQoNCj5PbiAwNC8xMi8xOCAxMDo1MCwgUGV0ZXIgQ2hlbiB3cm90ZToNCj4+Pj4gKyAqIENh ZGVuY2UgVVNCU1MgRFJEIERyaXZlci4NCj4+Pj4gKyAqDQo+Pj4+ICsgKiBDb3B5cmlnaHQgKEMp IDIwMTggQ2FkZW5jZS4NCj4+Pj4gKyAqDQo+Pj4+ICsgKiBBdXRob3I6IFBldGVyIENoZW4gPHBl dGVyLmNoZW5AbnhwLmNvbT4NCj4+Pj4gKyAqICAgICAgICAgUGF3ZWwgTGFzemN6YWsgPHBhd2Vs bEBjYWRlbmNlLmNvbT4NCj4+Pj4gKyAqLw0KPj4+PiArDQo+Pj4+ICsjaW5jbHVkZSA8bGludXgv bW9kdWxlLmg+DQo+Pj4+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+DQo+Pj4+ICsjaW5jbHVk ZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQo+Pj4+ICsjaW5jbHVkZSA8bGludXgvaW50ZXJy dXB0Lmg+DQo+Pj4+ICsjaW5jbHVkZSA8bGludXgvaW8uaD4NCj4+Pj4gKyNpbmNsdWRlIDxsaW51 eC9wbV9ydW50aW1lLmg+DQo+Pj4+ICsNCj4+Pj4gKyNpbmNsdWRlICJnYWRnZXQuaCINCj4+Pj4g KyNpbmNsdWRlICJjb3JlLmgiDQo+Pj4+ICsNCj4+Pj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNk bnMzX3JvbGVfZHJpdmVyICpjZG5zM19nZXRfY3VycmVudF9yb2xlX2RyaXZlcihzdHJ1Y3QgY2Ru czMgKmNkbnMpDQo+Pj4+ICt7DQo+Pj4+ICsgICAgIFdBUk5fT04oY2Rucy0+cm9sZSA+PSBDRE5T M19ST0xFX0VORCB8fCAhY2Rucy0+cm9sZXNbY2Rucy0+cm9sZV0pOw0KPj4+PiArICAgICByZXR1 cm4gY2Rucy0+cm9sZXNbY2Rucy0+cm9sZV07DQo+Pj4+ICt9DQo+Pj4+ICsNCj4+Pj4gK3N0YXRp YyBpbmxpbmUgaW50IGNkbnMzX3JvbGVfc3RhcnQoc3RydWN0IGNkbnMzICpjZG5zLCBlbnVtIGNk bnMzX3JvbGVzIHJvbGUpDQo+Pj4+ICt7DQo+Pj4+ICsgICAgIGludCByZXQ7DQo+Pj4+ICsNCj4+ Pj4gKyAgICAgaWYgKHJvbGUgPj0gQ0ROUzNfUk9MRV9FTkQpDQo+Pj4NCj4+PiBXQVJOX09OKCk/ DQo+Pj4NCj4+Pj4gKyAgICAgICAgICAgICByZXR1cm4gMDsNCj4+Pj4gKw0KPj4+PiArICAgICBp ZiAoIWNkbnMtPnJvbGVzW3JvbGVdKQ0KPj4+PiArICAgICAgICAgICAgIHJldHVybiAtRU5YSU87 DQo+Pj4+ICsNCj4+Pj4gKyAgICAgbXV0ZXhfbG9jaygmY2Rucy0+bXV0ZXgpOw0KPj4+PiArICAg ICBjZG5zLT5yb2xlID0gcm9sZTsNCj4+Pj4gKyAgICAgcmV0ID0gY2Rucy0+cm9sZXNbcm9sZV0t PnN0YXJ0KGNkbnMpOw0KPj4+PiArICAgICBtdXRleF91bmxvY2soJmNkbnMtPm11dGV4KTsNCj4+ Pj4gKyAgICAgcmV0dXJuIHJldDsNCj4+Pj4gK30NCj4+Pj4gKw0KPj4+PiArc3RhdGljIGlubGlu ZSB2b2lkIGNkbnMzX3JvbGVfc3RvcChzdHJ1Y3QgY2RuczMgKmNkbnMpDQo+Pj4+ICt7DQo+Pj4+ ICsgICAgIGVudW0gY2RuczNfcm9sZXMgcm9sZSA9IGNkbnMtPnJvbGU7DQo+Pj4+ICsNCj4+Pj4g KyAgICAgaWYgKHJvbGUgPT0gQ0ROUzNfUk9MRV9FTkQpDQo+Pj4NCj4+PiBXQVJOX09OKHJvbGUg Pj0gQ05EUzNfUk9MRV9FTkQpID8NCj4+Pg0KPj4+PiArICAgICAgICAgICAgIHJldHVybjsNCj4+ Pj4gKw0KPj4+PiArICAgICBtdXRleF9sb2NrKCZjZG5zLT5tdXRleCk7DQo+Pj4+ICsgICAgIGNk bnMtPnJvbGVzW3JvbGVdLT5zdG9wKGNkbnMpOw0KPj4+PiArICAgICBjZG5zLT5yb2xlID0gQ0RO UzNfUk9MRV9FTkQ7DQo+Pj4NCj4+PiBXaHkgY2hhbmdlIHRoZSByb2xlIGhlcmU/IFlvdSBhcmUg anVzdCBzdG9wcGluZyB0aGUgcm9sZSBub3QgY2hhbmdpbmcgaXQuDQo+Pj4gSSB0aGluayBjZG5z LT5yb2xlIHNob3VsZCByZW1haW4gdW5jaGFuZ2VkLCBzbyB3ZSBjYW4gY2FsbCBjZG5zM19yb2xl X3N0YXJ0KCkNCj4+PiBpZiByZXF1aXJlZCB3aXRob3V0IGVycm9yLg0KPj4+DQo+Pg0KPj4gVGhl IGN1cnJlbnQgdmVyc2lvbiBvZiB0aGlzIElQIGhhcyBzb21lIGlzc3VlcyB0byBkZXRlY3QgdmJ1 cyBzdGF0dXMgY29ycmVjdGx5LA0KPj4gd2UgaGF2ZSB0byBmb3JjZSB2YnVzIHN0YXR1cyBhY2Nv cmRpbmdseSwgc28gd2UgbmVlZCBhIHN0YXR1cyB0byBpbmRpY2F0ZQ0KPj4gdmJ1cyBkaXNjb25u ZWN0aW9uLCBhbmQgYWRkIHNvbWUgY29kZSB0byBsZXQgY29udHJvbGxlciBrbm93IHZidXMNCj4+ IHJlbW92YWwsIGluIHRoYXQgY2FzZSwgdGhlIGNvbnRyb2xsZXIncyBzdGF0ZSBtYWNoaW5lIGNh biBiZSBjb3JyZWN0Lg0KPj4gU28sIHdlIGluY3JlYXNlIG9uZSByb2xlICdDRE5TM19ST0xFX0VO RCcgdG8gZm9yIHRoaXMgcHVycG9zZS4NCj4+DQo+PiBDRE5TM19ST0xFX0dBREdFVDogZ2FkZ2V0 IG1vZGUgYW5kIFZCVVMgb24NCj4+IENETlMzX1JPTEVfSE9TVDogaG9zdCBtb2RlIGFuZCBWQlVT IG9uDQo+PiBDRE5TM19ST0xFX0VORDogVkJVUyBvZmYsIGVnIGVpdGhlciBob3N0IG9yIGRldmlj ZSBjYWJsZSBvbiB0aGUgcG9ydC4NCj4+DQo+PiBTbywgd2UgbWF5IHN0YXJ0IHJvbGUgZnJvbSBD RE5TM19ST0xFX0VORCBhdCBwcm9iZSB3aGVuIG5vdGhpbmcgaXMgY29ubmVjdGVkLA0KPj4gYW5k IG5lZWQgdG8gc2V0IHJvbGUgYXMgQ0ROUzNfUk9MRV9FTkQgYXQgLT5zdG9wIGZvciBmdXJ0aGVy IGhhbmRsaW5nIGF0DQo+PiByb2xlIHN3aXRjaCByb3V0aW5lLg0KPg0KPk9LLiBidXQgc3RpbGwg dGhpcyAoY2hhbmdpbmcgdG8gUk9MRV9FTkQpIG11c3QgYmUgbW92ZWQgdG8gdGhlIHJvbGUgc3dp dGNoIHJvdXRpbmUNCj5hbmQgdGhlIGV4cGxhbmF0aW9uIHlvdSBqdXN0IG1lbnRpb25lZCBtdXN0 IGJlIGFkZGVkIHRoZXJlLg0KPg0KPj4NCj4+Pj4gKyAgICAgbXV0ZXhfdW5sb2NrKCZjZG5zLT5t dXRleCk7DQo+Pj4+ICt9DQo+Pj4+ICsNCj4+Pj4gK3N0YXRpYyBlbnVtIGNkbnMzX3JvbGVzIGNk bnMzX2dldF9yb2xlKHN0cnVjdCBjZG5zMyAqY2RucykNCj4+Pj4gK3sNCj4+Pj4gKyAgICAgaWYg KGNkbnMtPnJvbGVzW0NETlMzX1JPTEVfSE9TVF0gJiYgY2Rucy0+cm9sZXNbQ0ROUzNfUk9MRV9H QURHRVRdKSB7DQo+Pj4+ICsgICAgICAgICAgICAgLy9UT0RPOiBpbXBsZW1lbnRzIHNlbGVjdGlu ZyBkZXZpY2UvaG9zdCBtb2RlDQo+Pj4+ICsgICAgICAgICAgICAgcmV0dXJuIENETlMzX1JPTEVf SE9TVDsNCj4+Pj4gKyAgICAgfQ0KPj4+PiArICAgICByZXR1cm4gY2Rucy0+cm9sZXNbQ0ROUzNf Uk9MRV9IT1NUXQ0KPj4+PiArICAgICAgICAgICAgID8gQ0ROUzNfUk9MRV9IT1NUDQo+Pj4+ICsg ICAgICAgICAgICAgOiBDRE5TM19ST0xFX0dBREdFVDsNCj4+Pg0KPj4+IFdoeSBub3QganVzdA0K Pj4+ICAgICAgICAgcmV0dXJuIGNkbnMtPnJvbGU7DQo+Pj4NCj4+PiBJJ20gd29uZGVyaW5nIGlm IHdlIHJlYWxseSBuZWVkIHRoaXMgZnVuY3Rpb24uDQo+Pg0KPj4gY2Rucy0+cm9sZSBnZXRzIGZy b20gY2RuczNfZ2V0X3JvbGUsIGFuZCB0aGlzIEFQSSB0ZWxscyByb2xlIGF0IHRoZSBydW50aW1l Lg0KPj4gSWYgYm90aCByb2xlcyBhcmUgc3VwcG9ydGVkLCB0aGUgcm9sZSBpcyBkZWNpZGVkIGJ5 IGV4dGVybmFsDQo+PiBjb25kaXRpb25zLCBlZywgdmJ1cy9pZA0KPj4gb3IgZXh0ZXJuYWwgY29u bmVjdG9yLiBJZiBvbmx5IHNpbmdsZSByb2xlIGlzIHN1cHBvcnRlZCwgb25seSBvbmUgcm9sZSBz dHJ1Y3R1cmUNCj4+IGlzIGFsbG9jYXRlZCwgY2Rucy0+cm9sZXNbQ0ROUzNfUk9MRV9IT1NUXSBv ciBjZG5zLT5yb2xlc1tDRE5TM19ST0xFX0dBREdFVF0NCj4+DQo+DQo+SG93IGFib3V0IGFkZGlu ZyB0aGlzIGRlc2NyaXB0aW9uIGluIGZ1bmN0aW9uIGRvY3VtZW50YXRpb24uDQoNCk9rLCBJIHdp bGwgZG8gaXQuIA0KPg0KPj4+PiArfQ0KPj4+DQo+Pj4+ICsNCj4+Pj4gKy8qKg0KPj4+PiArICog Y2RuczNfY29yZV9pbml0X3JvbGUgLSBpbml0aWFsaXplIHJvbGUgb2Ygb3BlcmF0aW9uDQo+Pj4+ ICsgKiBAY2RuczogUG9pbnRlciB0byBjZG5zMyBzdHJ1Y3R1cmUNCj4+Pj4gKyAqDQo+Pj4+ICsg KiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvdGhlcndpc2UgbmVnYXRpdmUgZXJybm8NCj4+Pj4gKyAq Lw0KPj4+PiArc3RhdGljIGludCBjZG5zM19jb3JlX2luaXRfcm9sZShzdHJ1Y3QgY2RuczMgKmNk bnMpDQo+Pj4+ICt7DQo+Pj4+ICsgICAgIHN0cnVjdCBkZXZpY2UgKmRldiA9IGNkbnMtPmRldjsN Cj4+Pj4gKyAgICAgZW51bSB1c2JfZHJfbW9kZSBkcl9tb2RlOw0KPj4+PiArDQo+Pj4+ICsgICAg IGRyX21vZGUgPSB1c2JfZ2V0X2RyX21vZGUoZGV2KTsNCj4+Pj4gKyAgICAgY2Rucy0+cm9sZSA9 IENETlMzX1JPTEVfRU5EOw0KPj4+PiArDQo+Pj4+ICsgICAgIC8qDQo+Pj4+ICsgICAgICAqIElm IGRyaXZlciBjYW4ndCByZWFkIG1vZGUgYnkgbWVhbnMgb2YgdXNiX2dldF9kcl9tZG9lIGZ1bmN0 aW9uIHRoZW4NCj4+Pj4gKyAgICAgICogY2hvb3NlcyBtb2RlIGFjY29yZGluZyB3aXRoIEtlcm5l bCBjb25maWd1cmF0aW9uLiBUaGlzIHNldHRpbmcNCj4+Pj4gKyAgICAgICogY2FuIGJlIHJlc3Ry aWN0ZWQgbGF0ZXIgZGVwZW5kaW5nIG9uIHN0cmFwIHBpbiBjb25maWd1cmF0aW9uLg0KPj4+PiAr ICAgICAgKi8NCj4+Pj4gKyAgICAgaWYgKGRyX21vZGUgPT0gVVNCX0RSX01PREVfVU5LTk9XTikg ew0KPj4+PiArICAgICAgICAgICAgIGlmIChJU19FTkFCTEVEKENPTkZJR19VU0JfQ0ROUzNfSE9T VCkgJiYNCj4+Pj4gKyAgICAgICAgICAgICAgICAgSVNfRU5BQkxFRChDT05GSUdfVVNCX0NETlMz X0dBREdFVCkpDQo+Pj4+ICsgICAgICAgICAgICAgICAgICAgICBkcl9tb2RlID0gVVNCX0RSX01P REVfT1RHOw0KPj4+PiArICAgICAgICAgICAgIGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX1VT Ql9DRE5TM19IT1NUKSkNCj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGRyX21vZGUgPSBVU0Jf RFJfTU9ERV9IT1NUOw0KPj4+PiArICAgICAgICAgICAgIGVsc2UgaWYgKElTX0VOQUJMRUQoQ09O RklHX1VTQl9DRE5TM19HQURHRVQpKQ0KPj4+PiArICAgICAgICAgICAgICAgICAgICAgZHJfbW9k ZSA9IFVTQl9EUl9NT0RFX1BFUklQSEVSQUw7DQo+Pj4+ICsgICAgIH0NCj4+Pj4gKw0KPj4+PiAr ICAgICBpZiAoZHJfbW9kZSA9PSBVU0JfRFJfTU9ERV9PVEcgfHwgZHJfbW9kZSA9PSBVU0JfRFJf TU9ERV9IT1NUKSB7DQo+Pj4+ICsgICAgICAgICAgICAgLy9UT0RPOiBpbXBsZW1lbnRzIGhvc3Qg aW5pdGlhbGl6YXRpb24NCj4+Pg0KPj4+ICAgICAgICAgICAgICAgICAvKiBUT0RPOiBBZGQgaG9z dCByb2xlICovID8NCj4+Pg0KPj4+PiArICAgICB9DQo+Pj4+ICsNCj4+Pj4gKyAgICAgaWYgKGRy X21vZGUgPT0gVVNCX0RSX01PREVfT1RHIHx8IGRyX21vZGUgPT0gVVNCX0RSX01PREVfUEVSSVBI RVJBTCkgew0KPj4+PiArICAgICAgICAgICAgIC8vVE9ETzogaW1wbGVtZW50cyBkZXZpY2UgaW5p dGlhbGl6YXRpb24NCj4+Pg0KPj4+ICAgICAgICAgICAgICAgICAvKiBUT0RPOiBBZGQgZGV2aWNl IHJvbGUgKi8gPw0KPj4+DQo+Pg0KPj4gWWVzLCBpdCBuZWVkcyB0byBhbGxvY2F0ZSBjZG5zLT5y b2xlc1tDRE5TM19ST0xFX0hPU1RdIGFuZA0KPj4gY2Rucy0+cm9sZXNbQ0ROUzNfUk9MRV9HQURH RVRdLg0KPj4NCj4+Pj4gKyAgICAgfQ0KPj4+PiArDQo+Pj4+ICsgICAgIGlmICghY2Rucy0+cm9s ZXNbQ0ROUzNfUk9MRV9IT1NUXSAmJiAhY2Rucy0+cm9sZXNbQ0ROUzNfUk9MRV9HQURHRVRdKSB7 DQo+Pj4+ICsgICAgICAgICAgICAgZGV2X2VycihkZXYsICJubyBzdXBwb3J0ZWQgcm9sZXNcbiIp Ow0KPj4+PiArICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOw0KPj4+PiArICAgICB9DQo+Pj4+ ICsNCj4+Pj4gKyAgICAgY2Rucy0+ZHJfbW9kZSA9IGRyX21vZGU7DQo+Pg0KPj4gUGF3ZWwsIHdo eSBkcl9tb2RlIG5lZWRzIHRvIGJlIGludHJvZHVjZWQ/DQo+Pg0KPj4+PiArICAgICByZXR1cm4g MDsNCj4+Pj4gK30NCj4+Pj4gKw0KPj4+PiArLyoqDQo+Pj4+ICsgKiBjZG5zM19pcnEgLSBpbnRl cnJ1cHQgaGFuZGxlciBmb3IgY2RuczMgY29yZSBkZXZpY2UNCj4+Pj4gKyAqDQo+Pj4+ICsgKiBA aXJxOiBpcnEgbnVtYmVyIGZvciBjZG5zMyBjb3JlIGRldmljZQ0KPj4+PiArICogQGRhdGE6IHN0 cnVjdHVyZSBvZiBjZG5zMw0KPj4+PiArICoNCj4+Pj4gKyAqIFJldHVybnMgSVJRX0hBTkRMRUQg b3IgSVJRX05PTkUNCj4+Pj4gKyAqLw0KPj4+PiArc3RhdGljIGlycXJldHVybl90IGNkbnMzX2ly cShpbnQgaXJxLCB2b2lkICpkYXRhKQ0KPj4+PiArew0KPj4+PiArICAgICBzdHJ1Y3QgY2RuczMg KmNkbnMgPSBkYXRhOw0KPj4+PiArICAgICBpcnFyZXR1cm5fdCByZXQgPSBJUlFfTk9ORTsNCj4+ Pj4gKw0KPj4+PiArICAgICAvKiBIYW5kbGUgZGV2aWNlL2hvc3QgaW50ZXJydXB0ICovDQo+Pj4+ ICsgICAgIGlmIChjZG5zLT5yb2xlICE9IENETlMzX1JPTEVfRU5EKQ0KPj4+DQo+Pj4gSXMgaXQg YmVjYXVzZSBvZiB0aGlzIHRoYXQgeW91IG5lZWQgdG8gc2V0IHJvbGUgdG8gRU5EIGF0IHJvbGVf c3RvcD8NCj4+PiBJIHRoaW5rIGl0IGlzIGJldHRlciB0byBhZGQgYSBzdGF0ZSB2YXJpYWJsZSB0 byBzdHJ1Y3QgY2RuczNfcm9sZV9kcml2ZXIsIHNvIHdlIGNhbg0KPj4+IGNoZWNrIGlmIGl0IGlz IGFjdGl2ZSBvciBzdG9wcGVkLg0KPj4+DQo+Pj4gZS5nLg0KPj4+ICAgICAgICAgaWYgKGNkbnMz X2dldF9jdXJyZW50X3JvbGVfZHJpdmVyKGNkbnMpLT5zdGF0ZSA9PSBDRE5TM19ST0xFX1NUQVRF X0FDVElWRSkNCj4+Pg0KPj4+PiArICAgICAgICAgICAgIHJldCA9IGNkbnMzX2dldF9jdXJyZW50 X3JvbGVfZHJpdmVyKGNkbnMpLT5pcnEoY2Rucyk7DQo+Pj4+ICsNCj4+Pj4gKyAgICAgcmV0dXJu IHJldDsNCj4+Pj4gK30NCj4+Pj4gKw0KPj4NCj4+ICBDRE5TM19ST0xFX0VORCBpcyBpbnRyb2R1 Y2VkIGZyb20gYWJvdmUgY29tbWVudHMsIHdlIGRvbid0DQo+PiBuZWVkIGFub3RoZXIgZmxhZyBm b3IgaXQuDQo+PiBJZiBjZG5zLT5yb2xlID09IENETlMzX1JPTEVfRU5ELCBpdCBoYW5kbGVzIFZC VVMgYW5kIElEIGludGVycnVwdC4NCj4+DQo+Pj4+ICtzdGF0aWMgdm9pZCBjZG5zM19yZW1vdmVf cm9sZXMoc3RydWN0IGNkbnMzICpjZG5zKQ0KPj4+DQo+Pj4gU2hvdWxkIHRoaXMgYmUgY2FsbGVk IGNkbnMzX2V4aXRfcm9sZXMoKSB0byBiZSBvcHBvc2l0ZSBvZiBjZG5zM19pbml0X3JvbGVzKCk/ DQo+Pj4NCj4+DQo+PiBJdCBpcyBwbGFuZWQgdG8gY2FsbGVkIHdoZW4gYXQgLT5yZW1vdmUuDQo+ Pj4+ICt7DQo+Pj4+ICsgICAgIC8vVE9ETzogaW1wbGVtZW50cyB0aGlzIGZ1bmN0aW9uDQo+Pj4+ ICt9DQo+Pj4NCj4+Pj4gKw0KPj4+PiArc3RhdGljIGludCBjZG5zM19kb19yb2xlX3N3aXRjaChz dHJ1Y3QgY2RuczMgKmNkbnMsIGVudW0gY2RuczNfcm9sZXMgcm9sZSkNCj4+Pj4gK3sNCj4+Pj4g KyAgICAgZW51bSBjZG5zM19yb2xlcyBjdXJyZW50X3JvbGU7DQo+Pj4+ICsgICAgIGludCByZXQg PSAwOw0KPj4+PiArDQo+Pj4+ICsgICAgIGN1cnJlbnRfcm9sZSA9IGNkbnMtPnJvbGU7DQo+Pj4+ ICsNCj4+Pj4gKyAgICAgaWYgKHJvbGUgPT0gQ0ROUzNfUk9MRV9FTkQpDQo+Pj4+ICsgICAgICAg ICAgICAgcmV0dXJuIDA7DQo+Pj4NCj4+PiByb2xlID09IEVORCBsb29rcyBsaWtlIGVycm9yIHN0 YXRlLiBhbmQgaXQgc2hvdWxkIG5ldmVyIGhhcHBlbi4NCj4+PiBXQVJOIGhlcmU/DQo+Pj4NCj4+ DQo+PiBTZWUgbXkgY29tbWVudHMgYWJvdmUuDQo+Pg0KPj4+PiArDQo+Pj4+ICsgICAgIGRldl9k YmcoY2Rucy0+ZGV2LCAiU3dpdGNoaW5nIHJvbGUiKTsNCj4+Pj4gKw0KPj4+DQo+Pj4gRG9uJ3Qg eW91IGhhdmUgdG8gc3RvcCB0aGUgcHJldmlvdXMgcm9sZSBiZWZvcmUgc3RhcnRpbmcgdGhlIG5l dyByb2xlPw0KPj4+DQo+Pg0KPj4gWWVzLCBpdCBpcyBuZWVkZWQuIFBhd2VsIG1heSBzaW1wbHkg c29tZSBmbG93cyB0byBzdWl0IGhpcyBwbGF0Zm9ybS4NCj4+DQo+Pj4+ICsgICAgIHJldCA9IGNk bnMzX3JvbGVfc3RhcnQoY2Rucywgcm9sZSk7DQo+Pj4+ICsgICAgIGlmIChyZXQpIHsNCj4+Pj4g KyAgICAgICAgICAgICAvKiBCYWNrIHRvIGN1cnJlbnQgcm9sZSAqLw0KPj4+PiArICAgICAgICAg ICAgIGRldl9lcnIoY2Rucy0+ZGV2LCAic2V0ICVkIGhhcyBmYWlsZWQsIGJhY2sgdG8gJWRcbiIs DQo+Pj4+ICsgICAgICAgICAgICAgICAgICAgICByb2xlLCBjdXJyZW50X3JvbGUpOw0KPj4+PiAr ICAgICAgICAgICAgIHJldCA9IGNkbnMzX3JvbGVfc3RhcnQoY2RucywgY3VycmVudF9yb2xlKTsN Cj4+Pj4gKyAgICAgfQ0KPj4+PiArDQo+Pj4+ICsgICAgIHJldHVybiByZXQ7DQo+Pj4+ICt9DQo+ Pj4+ICsNCj4+Pj4gKy8qKg0KPj4+PiArICogY2RuczNfcm9sZV9zd2l0Y2ggLSB3b3JrIHF1ZXVl IGhhbmRsZXIgZm9yIHJvbGUgc3dpdGNoDQo+Pj4+ICsgKg0KPj4+PiArICogQHdvcms6IHdvcmsg cXVldWUgaXRlbSBzdHJ1Y3R1cmUNCj4+Pj4gKyAqDQo+Pj4+ICsgKiBIYW5kbGVzIGJlbG93IGV2 ZW50czoNCj4+Pj4gKyAqIC0gUm9sZSBzd2l0Y2ggZm9yIGR1YWwtcm9sZSBkZXZpY2VzDQo+Pj4+ ICsgKiAtIENETlMzX1JPTEVfR0FER0VUIDwtLT4gQ0ROUzNfUk9MRV9FTkQgZm9yIHBlcmlwaGVy YWwtb25seSBkZXZpY2VzDQo+Pj4+ICsgKi8NCj4+Pj4gK3N0YXRpYyB2b2lkIGNkbnMzX3JvbGVf c3dpdGNoKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCj4+Pj4gK3sNCj4+Pj4gKyAgICAgZW51 bSBjZG5zM19yb2xlcyByb2xlID0gQ0ROUzNfUk9MRV9FTkQ7DQo+Pj4+ICsgICAgIHN0cnVjdCBj ZG5zMyAqY2RuczsNCj4+Pj4gKyAgICAgYm9vbCBkZXZpY2UsIGhvc3Q7DQo+Pj4+ICsNCj4+Pj4g KyAgICAgY2RucyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY2RuczMsIHJvbGVfc3dpdGNo X3dxKTsNCj4+Pj4gKw0KPj4+PiArICAgICAvL1RPRE86IGltcGxlbWVudHMgdGhpcyBmdW5jdGlv bnMuDQo+Pj4+ICsgICAgIC8vaG9zdCA9IGNkbnMzX2lzX2hvc3QoY2Rucyk7DQo+Pj4+ICsgICAg IC8vZGV2aWNlID0gY2RuczNfaXNfZGV2aWNlKGNkbnMpOw0KPj4+PiArICAgICBob3N0ID0gMTsN Cj4+Pj4gKyAgICAgZGV2aWNlID0gMDsNCj4+Pj4gKw0KPj4+PiArICAgICBpZiAoaG9zdCkNCj4+ Pj4gKyAgICAgICAgICAgICByb2xlID0gQ0ROUzNfUk9MRV9IT1NUOw0KPj4+PiArICAgICBlbHNl IGlmIChkZXZpY2UpDQo+Pj4+ICsgICAgICAgICAgICAgcm9sZSA9IENETlMzX1JPTEVfR0FER0VU Ow0KPj4+PiArDQo+Pj4+ICsgICAgIGlmIChjZG5zLT5kZXNpcmVkX2RyX21vZGUgPT0gY2Rucy0+ Y3VycmVudF9kcl9tb2RlICYmDQo+Pj4+ICsgICAgICAgICBjZG5zLT5yb2xlID09IHJvbGUpDQo+ Pj4+ICsgICAgICAgICAgICAgcmV0dXJuOw0KPj4+PiArDQo+Pj4NCj4+PiBJIHRoaW5rIGFsbCB0 aGUgYmVsb3cgY29kZSBjYW4gYmUgbW92ZWQgdG8gY2RuczNfZG9fcm9sZV9zd2l0Y2goKS4NCj4+ Pg0KPj4+PiArICAgICBwbV9ydW50aW1lX2dldF9zeW5jKGNkbnMtPmRldik7DQo+Pj4+ICsgICAg IGNkbnMzX3JvbGVfc3RvcChjZG5zKTsNCj4+Pj4gKw0KPj4+PiArICAgICBpZiAoaG9zdCkgew0K Pj4+PiArICAgICAgICAgICAgIGlmIChjZG5zLT5yb2xlc1tDRE5TM19ST0xFX0hPU1RdKQ0KPj4+ PiArICAgICAgICAgICAgICAgICAgICAgY2RuczNfZG9fcm9sZV9zd2l0Y2goY2RucywgQ0ROUzNf Uk9MRV9IT1NUKTsNCj4+Pj4gKyAgICAgICAgICAgICBwbV9ydW50aW1lX3B1dF9zeW5jKGNkbnMt PmRldik7DQo+Pj4+ICsgICAgICAgICAgICAgcmV0dXJuOw0KPj4+PiArICAgICB9DQo+Pj4+ICsN Cj4+Pj4gKyAgICAgaWYgKGRldmljZSkNCj4+Pj4gKyAgICAgICAgICAgICBjZG5zM19kb19yb2xl X3N3aXRjaChjZG5zLCBDRE5TM19ST0xFX0dBREdFVCk7DQo+Pj4+ICsgICAgIGVsc2UNCj4+Pj4g KyAgICAgICAgICAgICBjZG5zM19kb19yb2xlX3N3aXRjaChjZG5zLCBDRE5TM19ST0xFX0VORCk7 DQo+Pj4+ICsNCj4+Pj4gKyAgICAgcG1fcnVudGltZV9wdXRfc3luYyhjZG5zLT5kZXYpOw0KPj4+ PiArfQ0KPj4+PiArDQo+Pj4+ICsvKioNCj4+Pj4gKyAqIGNkbnMzX3Byb2JlIC0gcHJvYmUgZm9y IGNkbnMzIGNvcmUgZGV2aWNlDQo+Pj4+ICsgKiBAcGRldjogUG9pbnRlciB0byBjZG5zMyBjb3Jl IHBsYXRmb3JtIGRldmljZQ0KPj4+PiArICoNCj4+Pj4gKyAqIFJldHVybnMgMCBvbiBzdWNjZXNz IG90aGVyd2lzZSBuZWdhdGl2ZSBlcnJubw0KPj4+PiArICovDQo+Pj4+ICtzdGF0aWMgaW50IGNk bnMzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+Pj4+ICt7DQo+Pj4+ICsg ICAgIHN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7DQo+Pj4+ICsgICAgIHN0cnVjdCBy ZXNvdXJjZSAqcmVzOw0KPj4+PiArICAgICBzdHJ1Y3QgY2RuczMgKmNkbnM7DQo+Pj4+ICsgICAg IHZvaWQgX19pb21lbSAqcmVnczsNCj4+Pj4gKyAgICAgaW50IHJldDsNCj4+Pj4gKw0KPj4+PiAr ICAgICBjZG5zID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpjZG5zKSwgR0ZQX0tFUk5FTCk7 DQo+Pj4+ICsgICAgIGlmICghY2RucykNCj4+Pj4gKyAgICAgICAgICAgICByZXR1cm4gLUVOT01F TTsNCj4+Pj4gKw0KPj4+PiArICAgICBjZG5zLT5kZXYgPSBkZXY7DQo+Pj4+ICsNCj4+Pj4gKyAg ICAgcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY2Rucyk7DQo+Pj4+ICsNCj4+Pj4gKyAgICAg cmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsNCj4+ Pj4gKyAgICAgaWYgKCFyZXMpIHsNCj4+Pj4gKyAgICAgICAgICAgICBkZXZfZXJyKGRldiwgIm1p c3NpbmcgSVJRXG4iKTsNCj4+Pj4gKyAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsNCj4+Pj4g KyAgICAgfQ0KPj4+PiArICAgICBjZG5zLT5pcnEgPSByZXMtPnN0YXJ0Ow0KPj4+PiArDQo+Pj4+ ICsgICAgIC8qDQo+Pj4+ICsgICAgICAqIFJlcXVlc3QgbWVtb3J5IHJlZ2lvbg0KPj4+PiArICAg ICAgKiByZWdpb24tMDogeEhDSQ0KPj4+PiArICAgICAgKiByZWdpb24tMTogUGVyaXBoZXJhbA0K Pj4+PiArICAgICAgKiByZWdpb24tMjogT1RHIHJlZ2lzdGVycw0KPj4+PiArICAgICAgKi8NCj4+ Pg0KPj4+IFRoZSBtZW1vcnkgcmVnaW9uIG9yZGVyIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBkdC1i aW5kaW5nLg0KPj4+IFRoZXJlIGl0IGlzIE9URywgaG9zdCh4aGNpKSwgZGV2aWNlIChwZXJpcGhl cmFsKS4NCj4+Pg0KPj4+PiArICAgICByZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwg SU9SRVNPVVJDRV9NRU0sIDApOw0KPj4+PiArICAgICByZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291 cmNlKGRldiwgcmVzKTsNCj4+Pj4gKw0KPj4+PiArICAgICBpZiAoSVNfRVJSKHJlZ3MpKQ0KPj4+ PiArICAgICAgICAgICAgIHJldHVybiBQVFJfRVJSKHJlZ3MpOw0KPj4+PiArICAgICBjZG5zLT54 aGNpX3JlZ3MgPSByZWdzOw0KPj4+PiArICAgICBjZG5zLT54aGNpX3JlcyA9IHJlczsNCj4+Pj4g Kw0KPj4+PiArICAgICByZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJD RV9NRU0sIDEpOw0KPj4+PiArICAgICByZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwg cmVzKTsNCj4+Pj4gKyAgICAgaWYgKElTX0VSUihyZWdzKSkNCj4+Pj4gKyAgICAgICAgICAgICBy ZXR1cm4gUFRSX0VSUihyZWdzKTsNCj4+Pj4gKyAgICAgY2Rucy0+ZGV2X3JlZ3MgID0gcmVnczsN Cj4+Pj4gKw0KPj4+PiArICAgICByZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9S RVNPVVJDRV9NRU0sIDIpOw0KPj4+PiArICAgICByZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNl KGRldiwgcmVzKTsNCj4+Pj4gKyAgICAgaWYgKElTX0VSUihyZWdzKSkNCj4+Pj4gKyAgICAgICAg ICAgICByZXR1cm4gUFRSX0VSUihyZWdzKTsNCj4+Pj4gKyAgICAgY2Rucy0+b3RnX3JlZ3MgPSBy ZWdzOw0KPj4+PiArDQo+Pj4+ICsgICAgIG11dGV4X2luaXQoJmNkbnMtPm11dGV4KTsNCj4+Pj4g Kw0KPj4+PiArICAgICBjZG5zLT5waHkgPSBkZXZtX3BoeV9nZXQoZGV2LCAiY2RuczMsdXNicGh5 Iik7DQo+Pj4NCj4+PiAiY2RuczMsdXNicGh5IiBpcyBub3QgZG9jdW1lbnRlZCBpbiBkdC1iaW5k aW5nLg0KPj4+DQo+Pj4+ICsgICAgIGlmIChJU19FUlIoY2Rucy0+cGh5KSkgew0KPj4+PiArICAg ICAgICAgICAgIGRldl9pbmZvKGRldiwgIm5vIGdlbmVyaWMgcGh5IGZvdW5kXG4iKTsNCj4+Pj4g KyAgICAgICAgICAgICBjZG5zLT5waHkgPSBOVUxMOw0KPj4+PiArICAgICAgICAgICAgIC8qDQo+ Pj4+ICsgICAgICAgICAgICAgICogZmFsbCB0aHJvdWdoIGhlcmUhDQo+Pj4+ICsgICAgICAgICAg ICAgICogaWYgbm8gZ2VuZXJpYyBwaHkgZm91bmQsIHBoeSBpbml0DQo+Pj4+ICsgICAgICAgICAg ICAgICogc2hvdWxkIGJlIGRvbmUgdW5kZXIgYm9vdCENCj4+Pj4gKyAgICAgICAgICAgICAgKi8N Cj4+Pg0KPj4+IE5vIHlvdSBzaG91bGRuJ3QgZmFsbCB0aHJvdWdoIGFsd2F5cyBpZiBpdCBpcyBh biBlcnJvciBjb25kaXRpb24uDQo+Pj4gU29tZXRoaW5nIGxpa2UgdGhpcyBzaG91bGQgd29yayBi ZXR0ZXIuDQo+Pj4NCj4+PiAgICAgICAgIGlmIChJU19FUlIoY25kcy0+cGh5KSkgew0KPj4+ICAg ICAgICAgICAgICAgICByZXQgPSBQVFJfRVJSKGNkbnMtPnBoeSk7DQo+Pj4gICAgICAgICAgICAg ICAgIGlmIChyZXQgPT0gLUVOT1NZUyB8fCByZXQgPT0gLUVOT0RFVikgew0KPj4+ICAgICAgICAg ICAgICAgICAgICAgICAgIGNkbnMtPnBoeSA9IE5VTEw7DQo+Pj4gICAgICAgICAgICAgICAgIH0g ZWxzZSBpZiAocmV0ID09IC1FUFJPQkVfREVGRVIpIHsNCj4+PiAgICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gcmV0Ow0KPj4+ICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KPj4+ICAgICAg ICAgICAgICAgICAgICAgICAgIGRldl9lcnIoZGV2LCAibm8gcGh5IGZvdW5kXG4iKTsNCj4+PiAg ICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycjA7DQo+Pj4gICAgICAgICAgICAgICAgIH0N Cj4+PiAgICAgICAgIH0NCj4+Pg0KPj4+IFNvIGlmIFBIWSB3YXMgcHJvdmlkZWQgaW4gRFQsIGFu ZCBQSFkgc3VwcG9ydC9kcml2ZXJzIGlzIHByZXNlbnQNCj4+PiBhbmQgZXJyb3IgY29uZGl0aW9u IG1lYW5zIHNvbWV0aGluZyBpcyB3cm9uZyBhbmQgd2UgaGF2ZSB0byBlcnJvciBvdXQuDQo+Pj4N Cj4+Pj4gKyAgICAgfSBlbHNlIHsNCj4+Pj4gKyAgICAgICAgICAgICBwaHlfaW5pdChjZG5zLT5w aHkpOw0KPj4+PiArICAgICB9DQo+Pj4NCj4+PiBZb3UgY2FuIGRvIHBoeV9pbml0KCkgb3V0c2lk ZSB0aGUgZWxzZS4NCj4+Pg0KPj4+PiArDQo+Pj4+ICsgICAgIHJldCA9IGNkbnMzX2NvcmVfaW5p dF9yb2xlKGNkbnMpOw0KPj4+PiArICAgICBpZiAocmV0KQ0KPj4+PiArICAgICAgICAgICAgIGdv dG8gZXJyMTsNCj4+Pj4gKw0KPj4+PiArICAgICBJTklUX1dPUksoJmNkbnMtPnJvbGVfc3dpdGNo X3dxLCBjZG5zM19yb2xlX3N3aXRjaCk7DQo+Pj4+ICsgICAgIGlmIChyZXQpDQo+Pj4+ICsgICAg ICAgICAgICAgZ290byBlcnIyOw0KPj4+PiArDQo+Pj4+ICsgICAgIGlmIChyZXQpDQo+Pj4+ICsg ICAgICAgICAgICAgZ290byBlcnIyOw0KPj4+PiArDQo+Pj4+ICsgICAgIGNkbnMtPnJvbGUgPSBj ZG5zM19nZXRfcm9sZShjZG5zKTsNCj4+Pg0KPj4+IEkgdGhpbmsgdGhpcyBzaG91bGQgbW92ZSB0 byBjZG5zM19jb3JlX2luaXRfcm9sZSgpLg0KPj4+DQo+Pg0KPj4gSSBhZ3JlZS4NCj4+DQo+Pj4+ ICsNCj4+Pj4gKyAgICAgcmV0ID0gZGV2bV9yZXF1ZXN0X2lycShkZXYsIGNkbnMtPmlycSwgY2Ru czNfaXJxLCBJUlFGX1NIQVJFRCwNCj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBk ZXZfbmFtZShkZXYpLCBjZG5zKTsNCj4+Pj4gKw0KPj4+PiArICAgICBpZiAocmV0KQ0KPj4+PiAr ICAgICAgICAgICAgIGdvdG8gZXJyMjsNCj4+Pg0KPj4+IEhvdyBhYm91dCBtb3ZpbmcgcmVxdWVz dF9pcnEgdG8gYmVmb3JlIGNkc24zX2NvcmVfaW5pdF9yb2xlKCk/DQo+Pj4NCj4+PiBUaGVuIHlv dSBjYW4gbW92ZSBjZG5zM19yb2xlX3N0YXJ0KCkgYXMgd2VsbCB0byBjb3JlX2luaXRfcm9sZSgp Lg0KPj4+DQo+Pg0KPj4gVXN1YWxseSwgd2UgcmVxdWVzdCBpcnEgYWZ0ZXIgaGFyZHdhcmUgaW5p dGlhbGl6YXRpb24gaGFzIGZpbmlzaGVkLCBpZiBub3QsDQo+PiB0aGVyZSBtYXkgdW5leHBlY3Rl ZCBpbnRlcnJ1cHQuDQo+DQo+RG9lc24ndCBrZXJuZWwgd2FybiBpZiBpbnRlcnJ1cHQgaGFwcGVu cyBhbmQgdGhlcmUgaXMgbm8gaGFuZGxlcj8NCj5UbyBhdm9pZCB0aGF0IEkgd2FzIHN1Z2dlc3Rp bmcgdG8gcmVxdWVzdF9pcnEgZmlyc3QuDQo+DQpDaGVlcnMNClBhd2VsDQo=