Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp396158ybz; Fri, 1 May 2020 00:39:28 -0700 (PDT) X-Google-Smtp-Source: APiQypJJr69f9K31MHZNUVQea3dFNqxg0xTaXS04wo4wVPGrGe3CWePGmYbmZn9LDLKVNWZHsCF3 X-Received: by 2002:a17:906:8152:: with SMTP id z18mr1967230ejw.4.1588318768248; Fri, 01 May 2020 00:39:28 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1588318768; cv=pass; d=google.com; s=arc-20160816; b=vF+DeoAB5V6UtOILoQSOc4yfBZZApwx9mvwtEOcQSyG3out76W6Pb0SZg8rSddnogW G8AeGzeMXzzH0vxiIS673MIKoQ8jI1GIGlvkoLxHzRLg3XlpiAAI+nusdzMSlLzvbIua ZbazvnRWdpFGLEEfbT6+rnukrSb2Ask+wptr8jfECd2wmkeqZFOJHV1rDyV3S3Zx+ih4 O2HNvQXDo3abuKYDAERl7nWfnUlAiYmKghsyzhi2SKwTW4HguPKf1JO3Ld4ThoPNGlI0 7Ez8/dpxUJU1JlHnEiXBNzMdmct2zfHn6xLL8QooJMLfdMRG1/KKf3rfh3/W6CqohxWP qEzA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from:dkim-signature :dkim-signature; bh=FkW7TF+EWQD5ukNrF2lfdDYU/0X4gN0WsdPO2yU4l+8=; b=oehJFWRwghRSYtDVtVrQ03uyx7DJSqdmiFpR6B9U2U+3B9JI5QkzaIEH3Hvt34UBzp o4vv2gwvRd8ILnFZpJ4Q1vUINyw2yPujHJ5AJ4FeHa6auNImPHQu1T5v0NCoFwjTKwMP WKxRalrTp/X2iJPArGPhn1R9eDT0DzAvFx0V2X0Mxizfl35kSnsP4u6Wjez65uuPMwlx 5ZTRMMiMTMbnEFidK9hReSc/da1C/rycR3JK2McsYYFrATPqe694PAL4skOz12yOdRGw 9B0JGcbKBtWEof16vRYmf27cigIhetXsdWhLYDIxX1du9/1uE4oWwLXrxG2hb8Fvsi7R AmfA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@cadence.com header.s=proofpoint header.b=cJIaKkVg; dkim=pass header.i=@cadence.com header.s=selector2 header.b="YbRNVxW/"; arc=pass (i=1 spf=pass spfdomain=cadence.com dkim=pass dkdomain=cadence.com dmarc=pass fromdomain=cadence.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=cadence.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id w18si1133578edr.474.2020.05.01.00.39.02; Fri, 01 May 2020 00:39:28 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@cadence.com header.s=proofpoint header.b=cJIaKkVg; dkim=pass header.i=@cadence.com header.s=selector2 header.b="YbRNVxW/"; arc=pass (i=1 spf=pass spfdomain=cadence.com dkim=pass dkdomain=cadence.com dmarc=pass fromdomain=cadence.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=cadence.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728370AbgEAHdq (ORCPT + 99 others); Fri, 1 May 2020 03:33:46 -0400 Received: from mx0a-0014ca01.pphosted.com ([208.84.65.235]:14804 "EHLO mx0a-0014ca01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726452AbgEAHdp (ORCPT ); Fri, 1 May 2020 03:33:45 -0400 Received: from pps.filterd (m0042385.ppops.net [127.0.0.1]) by mx0a-0014ca01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 0417R2PI023789; Fri, 1 May 2020 00:33:04 -0700 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=FkW7TF+EWQD5ukNrF2lfdDYU/0X4gN0WsdPO2yU4l+8=; b=cJIaKkVgzl4KX2alKFmh+i2hgks0MfSRo40khroVu+NVEuIhYOivmsWGRwkMk8T9SDpI r4kMSPzhpPw4stHz7yyXsk+orkoIjvImPbDyHS1sv/P0lqdGKqgH2ra7PBLC53+5yaLG PWrHWf5uSVztc5n6ep/dov16+IcPNxJ/N4Kxes3XHwo/eFlj6gc1WVFlvnFfjBXjmABh sGvXwTvy1NPnPGnrLS5pm2ht2GEn3517TKnI/pscZaOn3Urb69a0p9Xw37QNOHA9hBdr pWeDKourBe+5llk+Cjr7I33MjKe2kS58N/OhG2SxnJrk5xItRTnQ86kHj8nSu7jLCxpc Zg== Received: from nam10-bn7-obe.outbound.protection.outlook.com (mail-bn7nam10lp2100.outbound.protection.outlook.com [104.47.70.100]) by mx0a-0014ca01.pphosted.com with ESMTP id 30r7f49j2u-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 01 May 2020 00:33:03 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ZdhAtv52jYJwZIMVk/Ggueda7KSHr3vqM+6hqdu+mBtibg5IT8H+3FE3oNmQxJoPkdL9HXn9IRLZTTSZjTVfdKlfIKIPzm47N3R6ofygshHMyqZdFW0tNm1oDcK+vNedztPKR9iVyfop/mCs5BYdDpv/e91LyqTwym7aTB4GQ/cHHtfJGBwzCJvFyZjpi+rZkBFRd2eg3y4diLhi8NEeX+0AjTdaufSE9iF2A8STyFHgoMNpAef29GZf1DrCt41Fg3DSiDzgi0ywjBBoqDxAj3IgVaTc4vm5NBqgN439K5Qpa1OakKpFlU/32Ktme+o2IKY0PePqQY5+ZpghaaI+pQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=FkW7TF+EWQD5ukNrF2lfdDYU/0X4gN0WsdPO2yU4l+8=; b=EuySSZcxA0gCMihwuSm07+9OJgWLNk/Y8xmXKQ3dZ5rQOEX+9Ztmu5ATWr5jlCJqw6iYQTqVjeeRjcww5hQaU8ixPfZuPsvhUcufz9/CAVVGcp6eaawS69FjM2FyRpJkNMHkaN+r2sea8BsM/c/OVGwYoM9Fn7C/ARSgPDH36nSqOTkm8+oY4W/kA3CUeVzCbkobPFoN0fCM7KsphxUGwTV3pGMO/dtKVzbD2OzoFSa4amwMBLEDR6F5hWRsNKgcY638qufceL8jvP0Byvs3rD02mDjWXU6MHkPZkV9fuAqpt4K22JmEXsHkOsGC57pMrRDRF458fMcltQku4nFqEQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=cadence.com; dmarc=pass action=none header.from=cadence.com; dkim=pass header.d=cadence.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cadence.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=FkW7TF+EWQD5ukNrF2lfdDYU/0X4gN0WsdPO2yU4l+8=; b=YbRNVxW/xxjyWWM28QbmY5eXupnDEB7e6Uy2cEw/UnYSGHafEVYuNiVy8zVMVRoefmcm1DzDA2ELNhEcwoA3nbMPG0LvtMXr7cbV3+Ot22aHQubrgZ+iVRT8SefJC+DN1YzJoeR0d833BWI+AYdjPK5mk9Ze6D4gFRtvktvRgjM= Received: from BYAPR07MB4792.namprd07.prod.outlook.com (2603:10b6:a02:ef::10) by BYAPR07MB5845.namprd07.prod.outlook.com (2603:10b6:a03:136::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2958.20; Fri, 1 May 2020 07:32:58 +0000 Received: from BYAPR07MB4792.namprd07.prod.outlook.com ([fe80::4de2:efa:85ce:62ed]) by BYAPR07MB4792.namprd07.prod.outlook.com ([fe80::4de2:efa:85ce:62ed%5]) with mapi id 15.20.2937.028; Fri, 1 May 2020 07:32:58 +0000 From: Yuti Suresh Amonkar To: "laurent.pinchart@ideasonboard.com" CC: "linux-kernel@vger.kernel.org" , "dri-devel@lists.freedesktop.org" , "devicetree@vger.kernel.org" , "robh+dt@kernel.org" , "maxime@cerno.tech" , "airlied@linux.ie" , "daniel@ffwll.ch" , "mark.rutland@arm.com" , "a.hajda@samsung.com" , "narmstrong@baylibre.com" , "jonas@kwiboo.se" , "jernej.skrabec@siol.net" , "praneeth@ti.com" , "jsarha@ti.com" , "tomi.valkeinen@ti.com" , Milind Parab , Swapnil Kashinath Jakhade Subject: RE: [PATCH v6 2/3] drm: bridge: Add support for Cadence MHDP DPI/DP bridge Thread-Topic: [PATCH v6 2/3] drm: bridge: Add support for Cadence MHDP DPI/DP bridge Thread-Index: AQHV7I7OC211GrpNqUqSCe/gQ+wPLqhEDYmAgE8gAIA= Date: Fri, 1 May 2020 07:32:58 +0000 Message-ID: References: <1582712579-28504-1-git-send-email-yamonkar@cadence.com> <1582712579-28504-3-git-send-email-yamonkar@cadence.com> <20200311222053.GE4863@pendragon.ideasonboard.com> In-Reply-To: <20200311222053.GE4863@pendragon.ideasonboard.com> Accept-Language: en-IN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-dg-ref: PG1ldGE+PGF0IG5tPSJib2R5LnR4dCIgcD0iYzpcdXNlcnNceWFtb25rYXJcYXBwZGF0YVxyb2FtaW5nXDA5ZDg0OWI2LTMyZDMtNGE0MC04NWVlLTZiODRiYTI5ZTM1Ylxtc2dzXG1zZy1kYTQ0MjE0NS04YjdkLTExZWEtYWU3YS0xNGFiYzUzOWE4NjNcYW1lLXRlc3RcZGE0NDIxNDYtOGI3ZC0xMWVhLWFlN2EtMTRhYmM1MzlhODYzYm9keS50eHQiIHN6PSI5ODE2MSIgdD0iMTMyMzI3OTE5MjQ3ODIxMzM0IiBoPSIwcnhkRkZXZ3BlaGhwNHdzWW1MSWsvTy8wMEk9IiBpZD0iIiBibD0iMCIgYm89IjEiLz48L21ldGE+ x-dg-rorf: true authentication-results: ideasonboard.com; dkim=none (message not signed) header.d=none;ideasonboard.com; dmarc=none action=none header.from=cadence.com; x-originating-ip: [59.145.174.78] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: d91b714c-7ec5-4589-bd4a-08d7eda1df0c x-ms-traffictypediagnostic: BYAPR07MB5845: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:949; x-forefront-prvs: 0390DB4BDA x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: zWAzxxGMCv0edKPWFHdxPc/M2eWUIheFUylyRAlqhkS54iiK+2q9NPZI9ThVbhtI6dFbZBqPi5jR2MO75hurRD+TLjhXrAq0XxcnAOH+aYaSvbj0XiO7tFriHXsjO/e4Z8dzTHtREcP7y/sif/Xno/3DWHt8JTly4jTdBJfid19h0KZGANJbyfduVMhachkgdvwq6PDrgiomoDqZZfIw2rza2rj3BEk91TroBQC4z8oNTB8cS7mNcBJxjiK9emBFfWdqrCtP+8NMgaZohJJMJwTIBlcHgOWwNuwU39oqcVbp+c4tLiixVqG0glrihJIIXkhF6/Ur7S3j7tqW7oxsVckeKG5SFO2Ln20Z4tKpouMHvRo+rJTeHbDwVKMEvNDdOr3fsWfTbD2yHVbXAXXoO881HZZge1ggYcEf87XhjhTEjd41LNlzdcofGq7MWHEfvmQt1n65RAZ1spLDYaw3ye4kfcpFPc8o/uVHETgYHWiBsC6Ln56jXJeNFKzTQffKDOwpN7GMUT01Zku9znIw8A== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR07MB4792.namprd07.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(4636009)(346002)(136003)(376002)(366004)(396003)(39860400002)(36092001)(6506007)(7696005)(2906002)(9686003)(107886003)(26005)(55016002)(52536014)(4326008)(186003)(6916009)(316002)(7416002)(71200400001)(8936002)(33656002)(8676002)(76116006)(66946007)(53546011)(66446008)(66556008)(54906003)(66476007)(64756008)(30864003)(5660300002)(86362001)(478600001)(21314003)(559001)(579004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata: FClcig7BAOYgGNlch6wK+Y5ZuJvPxEadudWJQWgPEUEyyLtROPgv5kfVXwQ/ZVOSqUGNIGJCdZLEiAuGNPLYwJSYTlkviVOC7XZEMX+NFwHYkpf1VpsyGGn054rnagmPl4GSO3HjXWugkNNSlKQAOQytzSZGJc9qqLFm7QAtr1tiEyglXlNO2kBCB0vNgRizyaIWa2w5u+NxMeKSViVnayAtKgL2j0/NNIgFMJ16USNemgVShZnNNEIAaGiMsC2qr49Q9mb/1fMTGE6P7J1GwHXmjBUtkd7tUssLX3UivvSyDOf6M+8hESaMbSAXreJjwi3RJhCn87Cqo0rEj9joCHjXXX7uEkRiSw6y/7jXMX1O2va6V+M1kJaMi0PwK1/dpzkwdlY5VE+g8xZK4ShQds2grWtMKdbECAGVLM3KJQAOLEaZOC3FzyyDw3Mve3Z+Y2FJThuDozEt3Ttf0hGk93Gvap/aDzWcmWd/9wJlkKa3mxvh14U9cyfB75qns1C32SO+IzpezTeGESbvSlrawWOd7cnBwsEbc3AG2Sau3FHXkUWxCH+dMKKWnUWsbMw9E3yDiPvZFvUqpPTO1ybQ7kyS8b3IEnOmP+LEv0OtCOK1odHqybZSyYYnKkyyXjik3otC2KQgqccCIho/vSmIxx/IMI74UN3sOQgZCSPLFb9mqcMkTqb4lm+C9uPR0BThANxvwNzufvzsGNnqTsgYVBXSUYpDNvYozv+v7CkVA5CB85fYDdswqx5AmWQ1Y5UE/I4nD9s2XjzUgTdAm/+liyedliL0Dj9mUdnNIeTlAOQ= 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: d91b714c-7ec5-4589-bd4a-08d7eda1df0c X-MS-Exchange-CrossTenant-originalarrivaltime: 01 May 2020 07:32:58.2417 (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-CrossTenant-userprincipalname: BlmY/l11CXXUUn0wEaFwkVBwejqzgFuKKFFo6j3i1OWnaMojcJ1xYvlvMN70ktHzseYc8Cl2XuRbW5jKtmtpkUWDdVImxjrsWfPBHpI2o3g= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR07MB5845 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138,18.0.676 definitions=2020-05-01_02:2020-04-30,2020-05-01 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_check_notspam policy=outbound_check score=0 lowpriorityscore=0 phishscore=0 mlxscore=0 bulkscore=0 priorityscore=1501 malwarescore=0 adultscore=0 mlxlogscore=999 impostorscore=0 clxscore=1011 spamscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2003020000 definitions=main-2005010056 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgTGF1cmVudCwgDQoNClRoYW5rIHlvdSBzbyBtdWNoIGZvciByZXZpZXdpbmcgdGhlIHBhdGNo IGFuZCBwcm92aWRpbmcgdmFsdWFibGUgY29tbWVudHMuIEFwb2xvZ2llcyBmb3IgdGhlIGRlbGF5 ZWQgcmVzcG9uc2UuIFdlIGFyZSB3b3JraW5nIG9uIHlvdXIgcmV2aWV3IGNvbW1lbnRzIGFuZCB3 aWxsIHNlbmQgdGhlIG5leHQgdmVyc2lvbiBvZiB0aGUgZHJpdmVyIGZvciByZXZpZXcgc29vbi4g UGxlYXNlIHNlZSB0aGUgcmVzcG9uc2VzIHRvIGNvbW1lbnRzIGlubGluZSBiZWxvdy4NCg0KVGhh bmtzICYgUmVnYXJkcywNCll1dGkgQW1vbmthcg0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0t LS0tDQo+IEZyb206IExhdXJlbnQgUGluY2hhcnQgPGxhdXJlbnQucGluY2hhcnRAaWRlYXNvbmJv YXJkLmNvbT4NCj4gU2VudDogVGh1cnNkYXksIE1hcmNoIDEyLCAyMDIwIDM6NTENCj4gVG86IFl1 dGkgU3VyZXNoIEFtb25rYXIgPHlhbW9ua2FyQGNhZGVuY2UuY29tPg0KPiBDYzogbGludXgta2Vy bmVsQHZnZXIua2VybmVsLm9yZzsgZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZzsNCj4g ZGV2aWNldHJlZUB2Z2VyLmtlcm5lbC5vcmc7IHJvYmgrZHRAa2VybmVsLm9yZzsgbWF4aW1lQGNl cm5vLnRlY2g7DQo+IGFpcmxpZWRAbGludXguaWU7IGRhbmllbEBmZndsbC5jaDsgbWFyay5ydXRs YW5kQGFybS5jb207DQo+IGEuaGFqZGFAc2Ftc3VuZy5jb207IG5hcm1zdHJvbmdAYmF5bGlicmUu Y29tOyBqb25hc0Brd2lib28uc2U7DQo+IGplcm5lai5za3JhYmVjQHNpb2wubmV0OyBwcmFuZWV0 aEB0aS5jb207IGpzYXJoYUB0aS5jb207DQo+IHRvbWkudmFsa2VpbmVuQHRpLmNvbTsgTWlsaW5k IFBhcmFiIDxtcGFyYWJAY2FkZW5jZS5jb20+OyBTd2FwbmlsDQo+IEthc2hpbmF0aCBKYWtoYWRl IDxzamFraGFkZUBjYWRlbmNlLmNvbT4NCj4gU3ViamVjdDogUmU6IFtQQVRDSCB2NiAyLzNdIGRy bTogYnJpZGdlOiBBZGQgc3VwcG9ydCBmb3IgQ2FkZW5jZSBNSERQDQo+IERQSS9EUCBicmlkZ2UN Cj4gDQo+IEVYVEVSTkFMIE1BSUwNCj4gDQo+IA0KPiBIaSBZdXRpLA0KPiANCj4gVGhhbmsgeW91 IGZvciB0aGUgcGF0Y2guDQo+IA0KPiBPbiBXZWQsIEZlYiAyNiwgMjAyMCBhdCAxMToyMjo1OEFN ICswMTAwLCBZdXRpIEFtb25rYXIgd3JvdGU6DQo+ID4gVGhpcyBwYXRjaCBhZGRzIG5ldyBEUk0g ZHJpdmVyIGZvciBDYWRlbmNlIE1IRFAgRFBUWCBJUCB1c2VkIG9uIEo3MjFlDQo+IFNvQy4NCj4g DQo+IHMvRFJNIGRyaXZlci9EUk0gYnJpZGdlIGRyaXZlci4NCj4gDQo+ID4gTUhEUCBEUFRYIElQ IGlzIHRoZSBjb21wb25lbnQgdGhhdCBjb21wbGllcyB3aXRoIFZFU0EgRGlzcGxheVBvcnQgKERQ KQ0KPiBhbmQNCj4gPiBlbWJlZGRlZCBEaXNwbGF5IFBvcnQgKGVEUCkgc3RhbmRhcmRzLiBJdCBp bnRlZ3JhdGVzIHVDUFUgcnVubmluZyB0aGUNCj4gPiBlbWJlZGRlZCBGaXJtd2FyZShGVykgaW50 ZXJmYWNlZCBvdmVyIEFQQiBpbnRlcmZhY2UuDQo+ID4gQmFzaWNhbGx5LCBpdCB0YWtlcyBhIERQ SSBzdHJlYW0gYXMgaW5wdXQgYW5kIG91dHB1dCBpdCBlbmNvZGVkIGluIERQDQo+IA0KPiBzL291 dHB1dC9vdXRwdXRzLw0KPiANCj4gPiBmb3JtYXQuIEN1cnJlbnRseSwgaXQgc3VwcG9ydHMgb25s eSBTU1QgbW9kZS4NCj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6IFl1dGkgQW1vbmthciA8eWFtb25r YXJAY2FkZW5jZS5jb20+DQo+ID4gU2lnbmVkLW9mZi1ieTogSnlyaSBTYXJoYSA8anNhcmhhQHRp LmNvbT4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBRdWVudGluIFNjaHVseiA8cXVlbnRpbi5zY2h1bHpA ZnJlZS1lbGVjdHJvbnMuY29tPg0KPiA+IFNpZ25lZC1vZmYtYnk6IFN3YXBuaWwgSmFraGFkZSA8 c2pha2hhZGVAY2FkZW5jZS5jb20+DQo+ID4gU2lnbmVkLW9mZi1ieTogVG9taSBWYWxrZWluZW4g PHRvbWkudmFsa2VpbmVuQHRpLmNvbT4NCj4gPiAtLS0NCj4gPiAgZHJpdmVycy9ncHUvZHJtL2Jy aWRnZS9LY29uZmlnICAgICAgICAgIHwgICAxMSArDQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9icmlk Z2UvTWFrZWZpbGUgICAgICAgICB8ICAgIDIgKw0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vYnJpZGdl L2NkbnMtbWhkcC1jb3JlLmMgfCAyMTk2DQo+ICsrKysrKysrKysrKysrKysrKysrKysrDQo+ID4g IGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvY2Rucy1taGRwLWNvcmUuaCB8ICAzODAgKysrKw0KPiA+ ICA0IGZpbGVzIGNoYW5nZWQsIDI1ODkgaW5zZXJ0aW9ucygrKQ0KPiA+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9jZG5zLW1oZHAtY29yZS5jDQo+ID4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2NkbnMtbWhkcC1jb3JlLmgNCj4g Pg0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcNCj4gYi9k cml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcNCj4gPiBpbmRleCAyMGE0MzkxOTljYjguLjNi ZmFiYjc2ZjJiYiAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25m aWcNCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcNCj4gPiBAQCAtMjcs NiArMjcsMTcgQEAgY29uZmlnIERSTV9DRE5TX0RTSQ0KPiA+ICAJICBTdXBwb3J0IENhZGVuY2Ug RFBJIHRvIERTSSBicmlkZ2UuIFRoaXMgaXMgYW4gaW50ZXJuYWwNCj4gPiAgCSAgYnJpZGdlIGFu ZCBpcyBtZWFudCB0byBiZSBkaXJlY3RseSBlbWJlZGRlZCBpbiBhIFNvQy4NCj4gPg0KPiA+ICtj b25maWcgRFJNX0NETlNfTUhEUA0KPiA+ICsJdHJpc3RhdGUgIkNhZGVuY2UgRFBJL0RQIGJyaWRn ZSINCj4gPiArCXNlbGVjdCBEUk1fS01TX0hFTFBFUg0KPiA+ICsJc2VsZWN0IERSTV9QQU5FTF9C UklER0UNCj4gPiArCWRlcGVuZHMgb24gT0YNCj4gPiArCWhlbHANCj4gPiArCSAgU3VwcG9ydCBD YWRlbmNlIERQSSB0byBEUCBicmlkZ2UuIFRoaXMgaXMgYW4gaW50ZXJuYWwNCj4gPiArCSAgYnJp ZGdlIGFuZCBpcyBtZWFudCB0byBiZSBkaXJlY3RseSBlbWJlZGRlZCBpbiBhIFNvQy4NCj4gPiAr CSAgSXQgdGFrZXMgYSBEUEkgc3RyZWFtIGFzIGlucHV0IGFuZCBvdXRwdXQgaXQgZW5jb2RlZA0K PiANCj4gcy9vdXRwdXQvb3V0cHV0cy8NCj4gDQo+ID4gKwkgIGluIERQIGZvcm1hdC4NCj4gPiAr DQo+ID4gIGNvbmZpZyBEUk1fRFVNQl9WR0FfREFDDQo+ID4gIAl0cmlzdGF0ZSAiRHVtYiBWR0Eg REFDIEJyaWRnZSBzdXBwb3J0Ig0KPiA+ICAJZGVwZW5kcyBvbiBPRg0KPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlDQo+IGIvZHJpdmVycy9ncHUvZHJtL2Jy aWRnZS9NYWtlZmlsZQ0KPiA+IGluZGV4IGIwZDVjM2FmMGI1YS4uMmUyYzViZTdjNzE0IDEwMDY0 NA0KPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUNCj4gPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlDQo+ID4gQEAgLTE2LDYgKzE2LDggQEAgb2Jq LSQoQ09ORklHX0RSTV9UT1NISUJBX1RDMzU4NzY4KSArPQ0KPiB0YzM1ODc2OC5vDQo+ID4gIG9i ai0kKENPTkZJR19EUk1fSTJDX0FEVjc1MTEpICs9IGFkdjc1MTEvDQo+ID4gIG9iai0kKENPTkZJ R19EUk1fVElfU042NURTSTg2KSArPSB0aS1zbjY1ZHNpODYubw0KPiA+ICBvYmotJChDT05GSUdf RFJNX1RJX1RGUDQxMCkgKz0gdGktdGZwNDEwLm8NCj4gPiArb2JqLSQoQ09ORklHX0RSTV9DRE5T X01IRFApICs9IGNkbnMtbWhkcC5vDQo+IA0KPiBTaG91bGQgdGhpcyBiZSBrZXB0IGFscGhhYmV0 aWNhbGx5IHNvcnRlZCA/DQo+IA0KPiA+ICtjZG5zLW1oZHAtb2JqcyA6PSBjZG5zLW1oZHAtY29y ZS5vDQo+ID4NCj4gPiAgb2JqLXkgKz0gYW5hbG9naXgvDQo+ID4gIG9iai15ICs9IHN5bm9wc3lz Lw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2NkbnMtbWhkcC1jb3Jl LmMNCj4gYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2NkbnMtbWhkcC1jb3JlLmMNCj4gPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uY2M2NDI4OTNiYWE4DQo+ ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvY2Rucy1t aGRwLWNvcmUuYw0KPiA+IEBAIC0wLDAgKzEsMjE5NiBAQA0KPiA+ICsvLyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMA0KPiA+ICsvKg0KPiA+ICsgKiBDYWRlbmNlIE1IRFAgRFAgYnJp ZGdlIGRyaXZlci4NCj4gPiArICoNCj4gPiArICogQ29weXJpZ2h0OiAyMDE5IENhZGVuY2UgRGVz aWduIFN5c3RlbXMsIEluYy4NCj4gPiArICoNCj4gPiArICogQXV0aG9yOiBRdWVudGluIFNjaHVs eiA8cXVlbnRpbi5zY2h1bHpAZnJlZS1lbGVjdHJvbnMuY29tPg0KPiA+ICsgKi8NCj4gPiArDQo+ ID4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+ DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2Zpcm13 YXJlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9pby5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgv aW9wb2xsLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4NCj4gPiArI2luY2x1ZGUgPGxp bnV4L21vZHVsZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4NCj4gPiArI2luY2x1ZGUg PGxpbnV4L29mX2RldmljZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+DQo+IA0K PiBJIHRoaW5rIG9mX2lycS5oIGlzbid0IG5lZWRlZC4NCj4gDQo+ID4gKyNpbmNsdWRlIDxsaW51 eC9wbGF0Zm9ybV9kZXZpY2UuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4NCj4g PiArI2luY2x1ZGUgPGxpbnV4L3BoeS9waHktZHAuaD4NCj4gDQo+IHBoeSBjb21lcyBiZWZvcmUg cGxhdGZvcm0uDQo+IA0KPiA+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPg0KPiA+ICsNCj4gPiAr I2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPg0KPiA+ICsjaW5jbHVkZSA8ZHJtL2Ry bV9icmlkZ2UuaD4NCj4gPiArI2luY2x1ZGUgPGRybS9kcm1fY29ubmVjdG9yLmg+DQo+ID4gKyNp bmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+DQo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2Rw X2hlbHBlci5oPg0KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9tb2Rlc2V0X2hlbHBlcl92dGFibGVz Lmg+DQo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX3ByaW50Lmg+DQo+ID4gKyNpbmNsdWRlIDxkcm0v ZHJtX3Byb2JlX2hlbHBlci5oPg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPGFzbS91bmFsaWduZWQu aD4NCj4gPiArDQo+ID4gKyNpbmNsdWRlICJjZG5zLW1oZHAtY29yZS5oIg0KPiA+ICsNCj4gPiAr c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbWhkcF9pZHNbXSA9IHsNCj4gPiArCXsg LmNvbXBhdGlibGUgPSAiY2RucyxtaGRwODU0NiIsIH0sDQo+ID4gKwl7IC8qIHNlbnRpbmVsICov IH0NCj4gPiArfTsNCj4gPiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbWhkcF9pZHMpOw0KPiAN Cj4gU21hbGwgZGV0YWlsLCB0aGlzIGlzIHVzdWFsbHkgcHV0IGF0IGF0IG9yIHRvd2FyZHMgdGhl IGVuZCBvZiB0aGUgZmlsZS4NCj4gDQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHUzMiBnZXRf dW5hbGlnbmVkX2JlMjQoY29uc3Qgdm9pZCAqcCkNCj4gPiArew0KPiA+ICsJY29uc3QgdTggKl9w ID0gcDsNCj4gPiArDQo+ID4gKwlyZXR1cm4gX3BbMF0gPDwgMTYgfCBfcFsxXSA8PCA4IHwgX3Bb Ml07DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCBwdXRfdW5hbGlnbmVk X2JlMjQodTMyIHZhbCwgdm9pZCAqcCkNCj4gPiArew0KPiA+ICsJdTggKl9wID0gcDsNCj4gPiAr DQo+ID4gKwlfcFswXSA9IHZhbCA+PiAxNjsNCj4gPiArCV9wWzFdID0gdmFsID4+IDg7DQo+ID4g KwlfcFsyXSA9IHZhbDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBjZG5zX21oZHBf bWFpbGJveF9yZWFkKHN0cnVjdCBjZG5zX21oZHBfZGV2aWNlICptaGRwKQ0KPiA+ICt7DQo+ID4g KwlpbnQgdmFsLCByZXQ7DQo+IA0KPiBJIHdvdWxkIHJlbmFtZSB2YWwgdG8gZW1wdHkuDQo+IA0K PiA+ICsNCj4gPiArCVdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmbWhkcC0+bWJveF9tdXRleCkp Ow0KPiA+ICsNCj4gPiArCXJldCA9IHJlYWR4X3BvbGxfdGltZW91dChyZWFkbCwgbWhkcC0+cmVn cyArDQo+IENETlNfTUFJTEJPWF9FTVBUWSwNCj4gPiArCQkJCSB2YWwsICF2YWwsIE1BSUxCT1hf UkVUUllfVVMsDQo+ID4gKwkJCQkgTUFJTEJPWF9USU1FT1VUX1VTKTsNCj4gDQo+IDIgc2Vjb25k cyBpcyBhbiBhd2Z1bGx5IGxvbmcgYW1vdW50IG9mIHRpbWUgdG8gd2FpdCBmb3IgaW4gYSBwb2xs IGxvb3AsDQo+IGVzcGVjaWFsbHkgd2l0aCBhIGxvY2sgaGVsZC4gSXMgdGhlIGZpcm13YXJlIGlu dGVyZmFjZSAqdGhhdCoNCj4gaW5lZmZpY2llbnQgPyBFdmVyeSBzaW5nbGUgcmVnaXN0ZXIgd3Jp dGUgdGFrZXMgMTAgbWFpbGJveCB3cml0ZXMgKGFuZA0KPiBJJ20gbm90IGV2ZW4gdGFsa2luZyBh Ym91dCByZWdpc3RlciByZWFkcykuIFNvbWVvbmUgcmVhbGx5IG5lZWRzIHRvIGhhdmUNCj4gYSBn b29kIGRpc2N1c3Npb24gd2l0aCB0aGUgZmlybXdhcmUgaW50ZXJmYWNlIGRlc2lnbmVycywgdGhp cyBpcyBwcmV0dHkNCj4gaW5zYW5lLiBOb3RoaW5nIHRoYXQgdGhlIGRyaXZlciBjYW4gaGVscCBv ZiBjb3Vyc2UgOi0oDQo+IA0KDQoyIFNlY29uZCBpcyB0aGUgd29yc3QgY2FzZSB3YWl0IHBlcmlv ZC4gVGhpcyB1bnVzdWFsbHkgbG9uZyB3YWl0IHBlcmlvZCBpbiBmaXJtd2FyZSBpbnRlcmZhY2Ug aXMNCmZvciB3b3JzdCBjYXNlIHJlc3BvbnNlIG9uIGNhYmxlIGZyb20gYSBzbG93IG1vbml0b3Iu IFRoZSB0aW1lb3V0IGlzIGdpdmVuIHN1Y2ggdGhhdCB0aGUgZHJpdmVyDQpkb2VzIG5vdCB3YWl0 IGVuZGxlc3NseSBvbiBhIGZhdWx0eSBjYXNlLiBUaGUgZmlybXdhcmUgaW1wbGVtZW50cyB0aGUg VHgvUnggc2VxdWVuY2VzIHdpdGgNCnRpbWVvdXRzIGFzIHBlciBzcGVjaWZpY2F0aW9uIHdoaWNo IGFyZSBpbiB0aGUgcmFuZ2Ugb2YgNTAwdXMuDQoNCj4gPiArCWlmIChyZXQgPCAwKQ0KPiA+ICsJ CXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHJlYWRsKG1oZHAtPnJlZ3MgKyBDRE5T X01BSUxCT1hfUlhfREFUQSkgJiAweGZmOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50 IGNkbnNfbWhkcF9tYWlsYm94X3dyaXRlKHN0cnVjdCBjZG5zX21oZHBfZGV2aWNlICptaGRwLCB1 OA0KPiB2YWwpDQo+ID4gK3sNCj4gPiArCWludCByZXQsIGZ1bGw7DQo+ID4gKw0KPiA+ICsJV0FS Tl9PTighbXV0ZXhfaXNfbG9ja2VkKCZtaGRwLT5tYm94X211dGV4KSk7DQo+ID4gKw0KPiA+ICsJ cmV0ID0gcmVhZHhfcG9sbF90aW1lb3V0KHJlYWRsLCBtaGRwLT5yZWdzICsgQ0ROU19NQUlMQk9Y X0ZVTEwsDQo+ID4gKwkJCQkgZnVsbCwgIWZ1bGwsIE1BSUxCT1hfUkVUUllfVVMsDQo+ID4gKwkJ CQkgTUFJTEJPWF9USU1FT1VUX1VTKTsNCj4gPiArCWlmIChyZXQgPCAwKQ0KPiA+ICsJCXJldHVy biByZXQ7DQo+ID4gKw0KPiA+ICsJd3JpdGVsKHZhbCwgbWhkcC0+cmVncyArIENETlNfTUFJTEJP WF9UWF9EQVRBKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr c3RhdGljIGludCBjZG5zX21oZHBfbWFpbGJveF92YWxpZGF0ZV9yZWNlaXZlKHN0cnVjdCBjZG5z X21oZHBfZGV2aWNlDQo+ICptaGRwLA0KPiA+ICsJCQkJCSAgICAgIHU4IG1vZHVsZV9pZCwgdTgg b3Bjb2RlLA0KPiA+ICsJCQkJCSAgICAgIHUxNiByZXFfc2l6ZSkNCj4gPiArew0KPiA+ICsJdTMy IG1ib3hfc2l6ZSwgaTsNCj4gPiArCXU4IGhlYWRlcls0XTsNCj4gPiArCWludCByZXQ7DQo+ID4g Kw0KPiA+ICsJLyogcmVhZCB0aGUgaGVhZGVyIG9mIHRoZSBtZXNzYWdlICovDQo+ID4gKwlmb3Ig KGkgPSAwOyBpIDwgNDsgaSsrKSB7DQo+ID4gKwkJcmV0ID0gY2Ruc19taGRwX21haWxib3hfcmVh ZChtaGRwKTsNCj4gPiArCQlpZiAocmV0IDwgMCkNCj4gPiArCQkJcmV0dXJuIHJldDsNCj4gPiAr DQo+ID4gKwkJaGVhZGVyW2ldID0gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCW1ib3hfc2l6 ZSA9IGdldF91bmFsaWduZWRfYmUxNihoZWFkZXIgKyAyKTsNCj4gPiArDQo+ID4gKwlpZiAob3Bj b2RlICE9IGhlYWRlclswXSB8fCBtb2R1bGVfaWQgIT0gaGVhZGVyWzFdIHx8DQo+ID4gKwkgICAg cmVxX3NpemUgIT0gbWJveF9zaXplKSB7DQo+ID4gKwkJLyoNCj4gPiArCQkgKiBJZiB0aGUgbWVz c2FnZSBpbiBtYWlsYm94IGlzIG5vdCB3aGF0IHdlIHdhbnQsIHdlIG5lZWQgdG8NCj4gPiArCQkg KiBjbGVhciB0aGUgbWFpbGJveCBieSByZWFkaW5nIGl0cyBjb250ZW50cy4NCj4gDQo+IENhbiB0 aGlzIGhhcHBlbiBpbiBwcmFjdGljZSwgb3IgZG9lcyBpdCBtZWFuIHRoYXQgc29tZXRoaW5nIHdl bnQNCj4gc2VyaW91c2x5IHdyb25nIGFuZCBldmVyeXRoaW5nIHdpbGwgZXhwbG9kZSA/DQo+IA0K DQpJbiBwcmFjdGljYWwgc2NlbmFyaW8gdGhlIHJlYWQgZnJvbSBleHRlcm5hbCBkaXNwbGF5IGRl dmljZXMgb3ZlciB0aGUgY2FibGUgbWF5IGJlIG1pc2FsaWduZWQuDQpFeGFtcGxlIGNvdWxkIGJl IGEgRURJRCBibG9jayByZWFkIGFmdGVyIHNraXBwaW5nIGZldyBpbml0aWFsIGJ5dGVzLiBUaGlz IGNoZWNrIGlzIGZvciBjbGVhbmluZyB1cA0KYnVmZmVyIGZvciBzdWNoIHJlYWRzLg0KDQo+ID4g KwkJICovDQo+ID4gKwkJZm9yIChpID0gMDsgaSA8IG1ib3hfc2l6ZTsgaSsrKQ0KPiA+ICsJCQlp ZiAoY2Ruc19taGRwX21haWxib3hfcmVhZChtaGRwKSA8IDApDQo+ID4gKwkJCQlicmVhazsNCj4g PiArDQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJu IDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgY2Ruc19taGRwX21haWxib3hfcmVh ZF9yZWNlaXZlKHN0cnVjdCBjZG5zX21oZHBfZGV2aWNlDQo+ICptaGRwLA0KPiA+ICsJCQkJCSAg dTggKmJ1ZmYsIHUxNiBidWZmX3NpemUpDQo+ID4gK3sNCj4gPiArCXUzMiBpOw0KPiA+ICsJaW50 IHJldDsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgYnVmZl9zaXplOyBpKyspIHsNCj4g PiArCQlyZXQgPSBjZG5zX21oZHBfbWFpbGJveF9yZWFkKG1oZHApOw0KPiA+ICsJCWlmIChyZXQg PCAwKQ0KPiA+ICsJCQlyZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArCQlidWZmW2ldID0gcmV0Ow0K PiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0 aWMgaW50IGNkbnNfbWhkcF9tYWlsYm94X3NlbmQoc3RydWN0IGNkbnNfbWhkcF9kZXZpY2UgKm1o ZHAsIHU4DQo+IG1vZHVsZV9pZCwNCj4gPiArCQkJCSAgdTggb3Bjb2RlLCB1MTYgc2l6ZSwgdTgg Km1lc3NhZ2UpDQo+ID4gK3sNCj4gPiArCXU4IGhlYWRlcls0XTsNCj4gPiArCWludCByZXQsIGk7 DQo+ID4gKw0KPiA+ICsJaGVhZGVyWzBdID0gb3Bjb2RlOw0KPiA+ICsJaGVhZGVyWzFdID0gbW9k dWxlX2lkOw0KPiA+ICsJcHV0X3VuYWxpZ25lZF9iZTE2KHNpemUsIGhlYWRlciArIDIpOw0KPiA+ ICsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsNCj4gPiArCQlyZXQgPSBjZG5zX21o ZHBfbWFpbGJveF93cml0ZShtaGRwLCBoZWFkZXJbaV0pOw0KPiA+ICsJCWlmIChyZXQpDQo+ID4g KwkJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IHNp emU7IGkrKykgew0KPiA+ICsJCXJldCA9IGNkbnNfbWhkcF9tYWlsYm94X3dyaXRlKG1oZHAsIG1l c3NhZ2VbaV0pOw0KPiA+ICsJCWlmIChyZXQpDQo+ID4gKwkJCXJldHVybiByZXQ7DQo+ID4gKwl9 DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYw0KPiA+ ICtpbnQgY2Ruc19taGRwX3JlZ19yZWFkKHN0cnVjdCBjZG5zX21oZHBfZGV2aWNlICptaGRwLCB1 MzIgYWRkciwgdTMyDQo+ICp2YWx1ZSkNCj4gDQo+IE5vbmUgb2YgdGhlIGNhbGxlciBvZiB0aGlz IGZ1bmN0aW9uIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUsIHlvdSBjYW4gYXMNCj4gd2VsbCByZW1v dmUgaXQsIGFuZCByZXR1cm4gdGhlIHJlYWQgdmFsdWUgYnkgdmFsdWUgaW5zdGVhZCBvZiB0aHJv dWdoDQo+IHRoZSAqdmFsdWUgcG9pbnRlci4gVGhlcmUncyBubyBwb2ludCBpbiBmYWtpbmcgZXJy b3IgaGFuZGxpbmcuDQo+IA0KPiA+ICt7DQo+ID4gKwl1OCBtc2dbNF0sIHJlc3BbOF07DQo+ID4g KwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCWlmIChhZGRyID09IDApIHsNCj4gPiArCQlyZXQgPSAt RUlOVkFMOw0KPiA+ICsJCWdvdG8gZXJyX3JlZ19yZWFkOw0KPiANCj4gVW5iYWxhbmNlZCBtdXRl eF91bmxvY2soKS4gSSBzZWUgbm8gcmVhc29uIHRvIGNoZWNrIGZvciBhZGRyID09IDAsIHRoZQ0K PiBjYWxsZXIgc2hvdWxkbid0IGRvIHRoYXQuDQo+IA0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXB1 dF91bmFsaWduZWRfYmUzMihhZGRyLCBtc2cpOw0KPiA+ICsNCj4gPiArCW11dGV4X2xvY2soJm1o ZHAtPm1ib3hfbXV0ZXgpOw0KPiA+ICsNCj4gPiArCXJldCA9IGNkbnNfbWhkcF9tYWlsYm94X3Nl bmQobWhkcCwgTUJfTU9EVUxFX0lEX0dFTkVSQUwsDQo+ID4gKwkJCQkgICAgIEdFTkVSQUxfUkVH SVNURVJfUkVBRCwNCj4gPiArCQkJCSAgICAgc2l6ZW9mKG1zZyksIG1zZyk7DQo+ID4gKwlpZiAo cmV0KQ0KPiA+ICsJCWdvdG8gZXJyX3JlZ19yZWFkOw0KPiA+ICsNCj4gPiArCXJldCA9IGNkbnNf bWhkcF9tYWlsYm94X3ZhbGlkYXRlX3JlY2VpdmUobWhkcCwNCj4gTUJfTU9EVUxFX0lEX0dFTkVS QUwsDQo+ID4gKwkJCQkJCSBHRU5FUkFMX1JFR0lTVEVSX1JFQUQsDQo+ID4gKwkJCQkJCSBzaXpl b2YocmVzcCkpOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlnb3RvIGVycl9yZWdfcmVhZDsNCj4g PiArDQo+ID4gKwlyZXQgPSBjZG5zX21oZHBfbWFpbGJveF9yZWFkX3JlY2VpdmUobWhkcCwgcmVz cCwgc2l6ZW9mKHJlc3ApKTsNCj4gPiArCWlmIChyZXQpDQo+ID4gKwkJZ290byBlcnJfcmVnX3Jl YWQ7DQo+ID4gKw0KPiA+ICsJLyogUmV0dXJuZWQgYWRkcmVzcyB2YWx1ZSBzaG91bGQgYmUgdGhl IHNhbWUgYXMgcmVxdWVzdGVkICovDQo+ID4gKwlpZiAobWVtY21wKG1zZywgcmVzcCwgc2l6ZW9m KG1zZykpKSB7DQo+ID4gKwkJcmV0ID0gLUVJTlZBTDsNCj4gPiArCQlnb3RvIGVycl9yZWdfcmVh ZDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkqdmFsdWUgPSBnZXRfdW5hbGlnbmVkX2JlMzIocmVz cCArIDQpOw0KPiA+ICsNCj4gPiArZXJyX3JlZ19yZWFkOg0KPiA+ICsJbXV0ZXhfdW5sb2NrKCZt aGRwLT5tYm94X211dGV4KTsNCj4gPiArCWlmIChyZXQpIHsNCj4gPiArCQlEUk1fREVWX0VSUk9S KG1oZHAtPmRldiwgIkZhaWxlZCB0byByZWFkIHJlZ2lzdGVyLlxuIik7DQo+ID4gKwkJKnZhbHVl ID0gMDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMNCj4gPiAraW50IGNkbnNfbWhkcF9yZWdfd3JpdGUoc3RydWN0IGNkbnNfbWhk cF9kZXZpY2UgKm1oZHAsIHUxNiBhZGRyLA0KPiB1MzIgdmFsKQ0KPiA+ICt7DQo+ID4gKwl1OCBt c2dbNl07DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCXB1dF91bmFsaWduZWRfYmUxNihh ZGRyLCBtc2cpOw0KPiA+ICsJcHV0X3VuYWxpZ25lZF9iZTMyKHZhbCwgbXNnICsgMik7DQo+ID4g Kw0KPiA+ICsJbXV0ZXhfbG9jaygmbWhkcC0+bWJveF9tdXRleCk7DQo+ID4gKw0KPiA+ICsJcmV0 ID0gY2Ruc19taGRwX21haWxib3hfc2VuZChtaGRwLCBNQl9NT0RVTEVfSURfRFBfVFgsDQo+ID4g KwkJCQkgICAgIERQVFhfV1JJVEVfUkVHSVNURVIsIHNpemVvZihtc2cpLCBtc2cpOw0KPiA+ICsN Cj4gPiArCW11dGV4X3VubG9jaygmbWhkcC0+bWJveF9tdXRleCk7DQo+ID4gKw0KPiA+ICsJcmV0 dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljDQo+ID4gK2ludCBjZG5zX21oZHBf cmVnX3dyaXRlX2JpdChzdHJ1Y3QgY2Ruc19taGRwX2RldmljZSAqbWhkcCwgdTE2IGFkZHIsDQo+ ID4gKwkJCSAgICB1OCBzdGFydF9iaXQsIHU4IGJpdHNfbm8sIHUzMiB2YWwpDQo+ID4gK3sNCj4g PiArCXU4IGZpZWxkWzhdOw0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwlwdXRfdW5hbGln bmVkX2JlMTYoYWRkciwgZmllbGQpOw0KPiA+ICsJZmllbGRbMl0gPSBzdGFydF9iaXQ7DQo+ID4g KwlmaWVsZFszXSA9IGJpdHNfbm87DQo+ID4gKwlwdXRfdW5hbGlnbmVkX2JlMzIodmFsLCBmaWVs ZCArIDQpOw0KPiA+ICsNCj4gPiArCW11dGV4X2xvY2soJm1oZHAtPm1ib3hfbXV0ZXgpOw0KPiA+ ICsNCj4gPiArCXJldCA9IGNkbnNfbWhkcF9tYWlsYm94X3NlbmQobWhkcCwgTUJfTU9EVUxFX0lE X0RQX1RYLA0KPiA+ICsJCQkJICAgICBEUFRYX1dSSVRFX0ZJRUxELCBzaXplb2YoZmllbGQpLCBm aWVsZCk7DQo+ID4gKw0KPiA+ICsJbXV0ZXhfdW5sb2NrKCZtaGRwLT5tYm94X211dGV4KTsNCj4g PiArDQo+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMNCj4gPiAr aW50IGNkbnNfbWhkcF9kcGNkX3JlYWQoc3RydWN0IGNkbnNfbWhkcF9kZXZpY2UgKm1oZHAsDQo+ ID4gKwkJCXUzMiBhZGRyLCB1OCAqZGF0YSwgdTE2IGxlbikNCj4gPiArew0KPiA+ICsJdTggbXNn WzVdLCByZWdbNV07DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCXB1dF91bmFsaWduZWRf YmUxNihsZW4sIG1zZyk7DQo+ID4gKwlwdXRfdW5hbGlnbmVkX2JlMjQoYWRkciwgbXNnICsgMik7 DQo+ID4gKw0KPiA+ICsJbXV0ZXhfbG9jaygmbWhkcC0+bWJveF9tdXRleCk7DQo+ID4gKw0KPiA+ ICsJcmV0ID0gY2Ruc19taGRwX21haWxib3hfc2VuZChtaGRwLCBNQl9NT0RVTEVfSURfRFBfVFgs DQo+ID4gKwkJCQkgICAgIERQVFhfUkVBRF9EUENELCBzaXplb2YobXNnKSwgbXNnKTsNCj4gPiAr CWlmIChyZXQpDQo+ID4gKwkJZ290byBlcnJfZHBjZF9yZWFkOw0KPiA+ICsNCj4gPiArCXJldCA9 IGNkbnNfbWhkcF9tYWlsYm94X3ZhbGlkYXRlX3JlY2VpdmUobWhkcCwNCj4gTUJfTU9EVUxFX0lE X0RQX1RYLA0KPiA+ICsJCQkJCQkgRFBUWF9SRUFEX0RQQ0QsDQo+ID4gKwkJCQkJCSBzaXplb2Yo cmVnKSArIGxlbik7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCWdvdG8gZXJyX2RwY2RfcmVhZDsN Cj4gPiArDQo+ID4gKwlyZXQgPSBjZG5zX21oZHBfbWFpbGJveF9yZWFkX3JlY2VpdmUobWhkcCwg cmVnLCBzaXplb2YocmVnKSk7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCWdvdG8gZXJyX2RwY2Rf cmVhZDsNCj4gPiArDQo+ID4gKwlyZXQgPSBjZG5zX21oZHBfbWFpbGJveF9yZWFkX3JlY2VpdmUo bWhkcCwgZGF0YSwgbGVuKTsNCj4gPiArDQo+ID4gK2Vycl9kcGNkX3JlYWQ6DQo+ID4gKwltdXRl eF91bmxvY2soJm1oZHAtPm1ib3hfbXV0ZXgpOw0KPiA+ICsNCj4gPiArCXJldHVybiByZXQ7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYw0KPiA+ICtpbnQgY2Ruc19taGRwX2RwY2Rfd3JpdGUo c3RydWN0IGNkbnNfbWhkcF9kZXZpY2UgKm1oZHAsIHUzMiBhZGRyLA0KPiB1OCB2YWx1ZSkNCj4g PiArew0KPiA+ICsJdTggbXNnWzZdLCByZWdbNV07DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4g PiArCXB1dF91bmFsaWduZWRfYmUxNigxLCBtc2cpOw0KPiA+ICsJcHV0X3VuYWxpZ25lZF9iZTI0 KGFkZHIsIG1zZyArIDIpOw0KPiA+ICsJbXNnWzVdID0gdmFsdWU7DQo+ID4gKw0KPiA+ICsJbXV0 ZXhfbG9jaygmbWhkcC0+bWJveF9tdXRleCk7DQo+ID4gKw0KPiA+ICsJcmV0ID0gY2Ruc19taGRw X21haWxib3hfc2VuZChtaGRwLCBNQl9NT0RVTEVfSURfRFBfVFgsDQo+ID4gKwkJCQkgICAgIERQ VFhfV1JJVEVfRFBDRCwgc2l6ZW9mKG1zZyksIG1zZyk7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJ CWdvdG8gZXJyX2RwY2Rfd3JpdGU7DQo+ID4gKw0KPiA+ICsJcmV0ID0gY2Ruc19taGRwX21haWxi b3hfdmFsaWRhdGVfcmVjZWl2ZShtaGRwLA0KPiBNQl9NT0RVTEVfSURfRFBfVFgsDQo+ID4gKwkJ CQkJCSBEUFRYX1dSSVRFX0RQQ0QsDQo+IHNpemVvZihyZWcpKTsNCj4gPiArCWlmIChyZXQpDQo+ ID4gKwkJZ290byBlcnJfZHBjZF93cml0ZTsNCj4gPiArDQo+ID4gKwlyZXQgPSBjZG5zX21oZHBf bWFpbGJveF9yZWFkX3JlY2VpdmUobWhkcCwgcmVnLCBzaXplb2YocmVnKSk7DQo+ID4gKwlpZiAo cmV0KQ0KPiA+ICsJCWdvdG8gZXJyX2RwY2Rfd3JpdGU7DQo+ID4gKw0KPiA+ICsJaWYgKGFkZHIg IT0gZ2V0X3VuYWxpZ25lZF9iZTI0KHJlZyArIDIpKQ0KPiA+ICsJCXJldCA9IC1FSU5WQUw7DQo+ ID4gKw0KPiA+ICtlcnJfZHBjZF93cml0ZToNCj4gPiArCW11dGV4X3VubG9jaygmbWhkcC0+bWJv eF9tdXRleCk7DQo+ID4gKw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlEUk1fREVWX0VSUk9SKG1o ZHAtPmRldiwgImRwY2Qgd3JpdGUgZmFpbGVkOiAlZFxuIiwNCj4gcmV0KTsNCj4gPiArCXJldHVy biByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYw0KPiA+ICtpbnQgY2Ruc19taGRwX3Nl dF9maXJtd2FyZV9hY3RpdmUoc3RydWN0IGNkbnNfbWhkcF9kZXZpY2UgKm1oZHAsDQo+IGJvb2wg ZW5hYmxlKQ0KPiA+ICt7DQo+ID4gKwl1OCBtc2dbNV07DQo+ID4gKwlpbnQgcmV0LCBpOw0KPiA+ ICsNCj4gPiArCW1zZ1swXSA9IEdFTkVSQUxfTUFJTl9DT05UUk9MOw0KPiA+ICsJbXNnWzFdID0g TUJfTU9EVUxFX0lEX0dFTkVSQUw7DQo+ID4gKwltc2dbMl0gPSAwOw0KPiA+ICsJbXNnWzNdID0g MTsNCj4gPiArCW1zZ1s0XSA9IGVuYWJsZSA/IEZXX0FDVElWRSA6IEZXX1NUQU5EQlk7DQo+ID4g Kw0KPiA+ICsJbXV0ZXhfbG9jaygmbWhkcC0+bWJveF9tdXRleCk7DQo+ID4gKw0KPiA+ICsJZm9y IChpID0gMDsgaSA8IHNpemVvZihtc2cpOyBpKyspIHsNCj4gPiArCQlyZXQgPSBjZG5zX21oZHBf bWFpbGJveF93cml0ZShtaGRwLCBtc2dbaV0pOw0KPiA+ICsJCWlmIChyZXQpDQo+ID4gKwkJCWdv dG8gZXJyX3NldF9maXJtd2FyZV9hY3RpdmU7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogcmVh ZCB0aGUgZmlybXdhcmUgc3RhdGUgKi8NCj4gPiArCWZvciAoaSA9IDA7IGkgPCBzaXplb2YobXNn KTsgaSsrKSAgew0KPiA+ICsJCXJldCA9IGNkbnNfbWhkcF9tYWlsYm94X3JlYWQobWhkcCk7DQo+ ID4gKwkJaWYgKHJldCA8IDApDQo+ID4gKwkJCWdvdG8gZXJyX3NldF9maXJtd2FyZV9hY3RpdmU7 DQo+ID4gKw0KPiA+ICsJCW1zZ1tpXSA9IHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXQg PSAwOw0KPiA+ICsNCj4gPiArZXJyX3NldF9maXJtd2FyZV9hY3RpdmU6DQo+ID4gKwltdXRleF91 bmxvY2soJm1oZHAtPm1ib3hfbXV0ZXgpOw0KPiA+ICsNCj4gPiArCWlmIChyZXQgPCAwKQ0KPiA+ ICsJCURSTV9ERVZfRVJST1IobWhkcC0+ZGV2LCAic2V0IGZpcm13YXJlIGFjdGl2ZQ0KPiBmYWls ZWRcbiIpOw0KPiA+ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljDQo+ ID4gK2ludCBjZG5zX21oZHBfZ2V0X2hwZF9zdGF0dXMoc3RydWN0IGNkbnNfbWhkcF9kZXZpY2Ug Km1oZHApDQo+ID4gK3sNCj4gPiArCXU4IHN0YXR1czsNCj4gPiArCWludCByZXQ7DQo+ID4gKw0K PiA+ICsJbXV0ZXhfbG9jaygmbWhkcC0+bWJveF9tdXRleCk7DQo+ID4gKw0KPiA+ICsJcmV0ID0g Y2Ruc19taGRwX21haWxib3hfc2VuZChtaGRwLCBNQl9NT0RVTEVfSURfRFBfVFgsDQo+ID4gKwkJ CQkgICAgIERQVFhfSFBEX1NUQVRFLCAwLCBOVUxMKTsNCj4gPiArCWlmIChyZXQpDQo+ID4gKwkJ Z290byBlcnJfZ2V0X2hwZDsNCj4gPiArDQo+ID4gKwlyZXQgPSBjZG5zX21oZHBfbWFpbGJveF92 YWxpZGF0ZV9yZWNlaXZlKG1oZHAsDQo+IE1CX01PRFVMRV9JRF9EUF9UWCwNCj4gPiArCQkJCQkJ IERQVFhfSFBEX1NUQVRFLA0KPiA+ICsJCQkJCQkgc2l6ZW9mKHN0YXR1cykpOw0KPiA+ICsJaWYg KHJldCkNCj4gPiArCQlnb3RvIGVycl9nZXRfaHBkOw0KPiA+ICsNCj4gPiArCXJldCA9IGNkbnNf bWhkcF9tYWlsYm94X3JlYWRfcmVjZWl2ZShtaGRwLCAmc3RhdHVzLA0KPiBzaXplb2Yoc3RhdHVz KSk7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCWdvdG8gZXJyX2dldF9ocGQ7DQo+ID4gKw0KPiA+ ICsJbXV0ZXhfdW5sb2NrKCZtaGRwLT5tYm94X211dGV4KTsNCj4gPiArDQo+ID4gKwlyZXR1cm4g c3RhdHVzOw0KPiA+ICsNCj4gPiArZXJyX2dldF9ocGQ6DQo+ID4gKwltdXRleF91bmxvY2soJm1o ZHAtPm1ib3hfbXV0ZXgpOw0KPiA+ICsNCj4gPiArCURSTV9ERVZfRVJST1IobWhkcC0+ZGV2LCAi Z2V0IGhwZCBzdGF0dXMgZmFpbGVkOiAlZFxuIiwgcmV0KTsNCj4gPiArCXJldHVybiByZXQ7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYw0KPiA+ICtpbnQgY2Ruc19taGRwX2dldF9lZGlkX2Js b2NrKHZvaWQgKmRhdGEsIHU4ICplZGlkLA0KPiA+ICsJCQkgICAgIHVuc2lnbmVkIGludCBibG9j aywgc2l6ZV90IGxlbmd0aCkNCj4gPiArew0KPiA+ICsJc3RydWN0IGNkbnNfbWhkcF9kZXZpY2Ug Km1oZHAgPSBkYXRhOw0KPiA+ICsJdTggbXNnWzJdLCByZWdbMl0sIGk7DQo+ID4gKwlpbnQgcmV0 Ow0KPiA+ICsNCj4gPiArCW11dGV4X2xvY2soJm1oZHAtPm1ib3hfbXV0ZXgpOw0KPiA+ICsNCj4g PiArCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsNCj4gPiArCQltc2dbMF0gPSBibG9jayAvIDI7 DQo+ID4gKwkJbXNnWzFdID0gYmxvY2sgJSAyOw0KPiA+ICsNCj4gPiArCQlyZXQgPSBjZG5zX21o ZHBfbWFpbGJveF9zZW5kKG1oZHAsDQo+IE1CX01PRFVMRV9JRF9EUF9UWCwNCj4gPiArCQkJCQkg ICAgIERQVFhfR0VUX0VESUQsIHNpemVvZihtc2cpLA0KPiBtc2cpOw0KPiA+ICsJCWlmIChyZXQp DQo+ID4gKwkJCWNvbnRpbnVlOw0KPiA+ICsNCj4gPiArCQlyZXQgPSBjZG5zX21oZHBfbWFpbGJv eF92YWxpZGF0ZV9yZWNlaXZlKG1oZHAsDQo+ID4gKw0KPiBNQl9NT0RVTEVfSURfRFBfVFgsDQo+ ID4gKwkJCQkJCQkgRFBUWF9HRVRfRURJRCwNCj4gPiArCQkJCQkJCSBzaXplb2YocmVnKSArIGxl bmd0aCk7DQo+ID4gKwkJaWYgKHJldCkNCj4gPiArCQkJY29udGludWU7DQo+ID4gKw0KPiA+ICsJ CXJldCA9IGNkbnNfbWhkcF9tYWlsYm94X3JlYWRfcmVjZWl2ZShtaGRwLCByZWcsDQo+IHNpemVv ZihyZWcpKTsNCj4gPiArCQlpZiAocmV0KQ0KPiA+ICsJCQljb250aW51ZTsNCj4gPiArDQo+ID4g KwkJcmV0ID0gY2Ruc19taGRwX21haWxib3hfcmVhZF9yZWNlaXZlKG1oZHAsIGVkaWQsIGxlbmd0 aCk7DQo+ID4gKwkJaWYgKHJldCkNCj4gPiArCQkJY29udGludWU7DQo+ID4gKw0KPiA+ICsJCWlm IChyZWdbMF0gPT0gbGVuZ3RoICYmIHJlZ1sxXSA9PSBibG9jayAvIDIpDQo+ID4gKwkJCWJyZWFr Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCW11dGV4X3VubG9jaygmbWhkcC0+bWJveF9tdXRleCk7 DQo+ID4gKw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlEUk1fREVWX0VSUk9SKG1oZHAtPmRldiwg ImdldCBibG9ja1slZF0gZWRpZCBmYWlsZWQ6DQo+ICVkXG4iLA0KPiA+ICsJCQkgICAgICBibG9j aywgcmV0KTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz dGF0aWMNCj4gPiAraW50IGNkbnNfbWhkcF9yZWFkX2V2ZW50KHN0cnVjdCBjZG5zX21oZHBfZGV2 aWNlICptaGRwKQ0KPiA+ICt7DQo+ID4gKwl1OCBldmVudCA9IDA7DQo+ID4gKwlpbnQgcmV0Ow0K PiA+ICsNCj4gPiArCW11dGV4X2xvY2soJm1oZHAtPm1ib3hfbXV0ZXgpOw0KPiA+ICsNCj4gPiAr CXJldCA9IGNkbnNfbWhkcF9tYWlsYm94X3NlbmQobWhkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLA0K PiA+ICsJCQkJICAgICBEUFRYX1JFQURfRVZFTlQsIDAsIE5VTEwpOw0KPiA+ICsJaWYgKHJldCkN Cj4gPiArCQlnb3RvIG91dDsNCj4gPiArDQo+ID4gKwlyZXQgPSBjZG5zX21oZHBfbWFpbGJveF92 YWxpZGF0ZV9yZWNlaXZlKG1oZHAsDQo+ID4gKwkJCQkJCSBNQl9NT0RVTEVfSURfRFBfVFgsDQo+ ID4gKwkJCQkJCSBEUFRYX1JFQURfRVZFTlQsDQo+ID4gKwkJCQkJCSBzaXplb2YoZXZlbnQpKTsN Cj4gPiArCWlmIChyZXQgPCAwKQ0KPiA+ICsJCWdvdG8gb3V0Ow0KPiA+ICsNCj4gPiArCXJldCA9 IGNkbnNfbWhkcF9tYWlsYm94X3JlYWRfcmVjZWl2ZShtaGRwLCAmZXZlbnQsDQo+ID4gKwkJCQkJ ICAgICBzaXplb2YoZXZlbnQpKTsNCj4gPiArb3V0Og0KPiA+ICsJbXV0ZXhfdW5sb2NrKCZtaGRw LT5tYm94X211dGV4KTsNCj4gPiArDQo+ID4gKwlpZiAocmV0IDwgMCkNCj4gPiArCQlyZXR1cm4g cmV0Ow0KPiA+ICsNCj4gPiArCXJldHVybiBldmVudDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3Rh dGljDQo+ID4gK2ludCBjZG5zX21oZHBfYWRqdXN0X2x0KHN0cnVjdCBjZG5zX21oZHBfZGV2aWNl ICptaGRwLA0KPiA+ICsJCQl1OCBubGFuZXMsIHUxNiB1ZGVsYXksIHU4ICpsYW5lc19kYXRhLCB1 OA0KPiAqbGlua19zdGF0dXMpDQo+ID4gK3sNCj4gPiArCXU4IHBheWxvYWRbN107DQo+ID4gKwl1 OCBoZHJbNV07IC8qIEZvciBEUENEIHJlYWQgcmVzcG9uc2UgaGVhZGVyICovDQo+ID4gKwl1MzIg YWRkcjsNCj4gPiArCXU4IGNvbnN0IG5yZWdzID0gNjsgLyogUmVnaXN0ZXJzIDB4MjAyLTB4MjA3 ICovDQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCWlmIChubGFuZXMgIT0gNCAmJiBubGFu ZXMgIT0gMiAmJiBubGFuZXMgIT0gMSkgew0KPiA+ICsJCURSTV9ERVZfRVJST1IobWhkcC0+ZGV2 LCAiaW52YWxpZCBudW1iZXIgb2YgbGFuZXM6DQo+ICVkXG4iLA0KPiA+ICsJCQkgICAgICBubGFu ZXMpOw0KPiA+ICsJCXJldCA9IC1FSU5WQUw7DQo+ID4gKwkJZ290byBlcnJfYWRqdXN0X2x0Ow0K PiA+ICsJfQ0KPiA+ICsNCj4gPiArCXBheWxvYWRbMF0gPSBubGFuZXM7DQo+ID4gKwlwdXRfdW5h bGlnbmVkX2JlMTYodWRlbGF5LCBwYXlsb2FkICsgMSk7DQo+ID4gKwltZW1jcHkocGF5bG9hZCAr IDMsIGxhbmVzX2RhdGEsIG5sYW5lcyk7DQo+ID4gKw0KPiA+ICsJbXV0ZXhfbG9jaygmbWhkcC0+ bWJveF9tdXRleCk7DQo+ID4gKw0KPiA+ICsJcmV0ID0gY2Ruc19taGRwX21haWxib3hfc2VuZCht aGRwLCBNQl9NT0RVTEVfSURfRFBfVFgsDQo+ID4gKwkJCQkgICAgIERQVFhfQURKVVNUX0xULA0K PiA+ICsJCQkJICAgICBzaXplb2YocGF5bG9hZCksIHBheWxvYWQpOw0KPiA+ICsJaWYgKHJldCkN Cj4gPiArCQlnb3RvIGVycl9hZGp1c3RfbHQ7DQo+ID4gKw0KPiA+ICsJLyogWWVzLCByZWFkIHRo ZSBEUENEIHJlYWQgY29tbWFuZCByZXNwb25zZSAqLw0KPiA+ICsJcmV0ID0gY2Ruc19taGRwX21h aWxib3hfdmFsaWRhdGVfcmVjZWl2ZShtaGRwLA0KPiBNQl9NT0RVTEVfSURfRFBfVFgsDQo+ID4g KwkJCQkJCSBEUFRYX1JFQURfRFBDRCwNCj4gPiArCQkJCQkJIHNpemVvZihoZHIpICsgbnJlZ3Mp Ow0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlnb3RvIGVycl9hZGp1c3RfbHQ7DQo+ID4gKw0KPiA+ ICsJcmV0ID0gY2Ruc19taGRwX21haWxib3hfcmVhZF9yZWNlaXZlKG1oZHAsIGhkciwgc2l6ZW9m KGhkcikpOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlnb3RvIGVycl9hZGp1c3RfbHQ7DQo+ID4g Kw0KPiA+ICsJYWRkciA9IGdldF91bmFsaWduZWRfYmUyNChoZHIgKyAyKTsNCj4gPiArCWlmIChh ZGRyICE9IERQX0xBTkUwXzFfU1RBVFVTKQ0KPiA+ICsJCWdvdG8gZXJyX2FkanVzdF9sdDsNCj4g PiArDQo+ID4gKwlyZXQgPSBjZG5zX21oZHBfbWFpbGJveF9yZWFkX3JlY2VpdmUobWhkcCwgbGlu a19zdGF0dXMsIG5yZWdzKTsNCj4gPiArDQo+ID4gK2Vycl9hZGp1c3RfbHQ6DQo+ID4gKwltdXRl eF91bmxvY2soJm1oZHAtPm1ib3hfbXV0ZXgpOw0KPiA+ICsNCj4gPiArCWlmIChyZXQpDQo+ID4g KwkJRFJNX0RFVl9FUlJPUihtaGRwLT5kZXYsICJGYWlsZWQgdG8gYWRqdXN0IExpbmsNCj4gVHJh aW5pbmcuXG4iKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ ICsvKioNCj4gPiArICogY2Ruc19taGRwX2xpbmtfcG93ZXJfdXAoKSAtIHBvd2VyIHVwIGEgRGlz cGxheVBvcnQgbGluaw0KPiA+ICsgKiBAYXV4OiBEaXNwbGF5UG9ydCBBVVggY2hhbm5lbA0KPiA+ ICsgKiBAbGluazogcG9pbnRlciB0byBhIHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBsaW5rIGNv bmZpZ3VyYXRpb24NCj4gPiArICoNCj4gPiArICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgYSBu ZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMNCj4g PiAraW50IGNkbnNfbWhkcF9saW5rX3Bvd2VyX3VwKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgsIHN0 cnVjdA0KPiBjZG5zX21oZHBfbGluayAqbGluaykNCj4gPiArew0KPiA+ICsJdTggdmFsdWU7DQo+ ID4gKwlpbnQgZXJyOw0KPiA+ICsNCj4gPiArCS8qIERQX1NFVF9QT1dFUiByZWdpc3RlciBpcyBv bmx5IGF2YWlsYWJsZSBvbiBEUENEIHYxLjEgYW5kIGxhdGVyDQo+ICovDQo+ID4gKwlpZiAobGlu ay0+cmV2aXNpb24gPCAweDExKQ0KPiA+ICsJCXJldHVybiAwOw0KPiA+ICsNCj4gPiArCWVyciA9 IGRybV9kcF9kcGNkX3JlYWRiKGF1eCwgRFBfU0VUX1BPV0VSLCAmdmFsdWUpOw0KPiA+ICsJaWYg KGVyciA8IDApDQo+ID4gKwkJcmV0dXJuIGVycjsNCj4gPiArDQo+ID4gKwl2YWx1ZSAmPSB+RFBf U0VUX1BPV0VSX01BU0s7DQo+ID4gKwl2YWx1ZSB8PSBEUF9TRVRfUE9XRVJfRDA7DQo+ID4gKw0K PiA+ICsJZXJyID0gZHJtX2RwX2RwY2Rfd3JpdGViKGF1eCwgRFBfU0VUX1BPV0VSLCB2YWx1ZSk7 DQo+ID4gKwlpZiAoZXJyIDwgMCkNCj4gPiArCQlyZXR1cm4gZXJyOw0KPiA+ICsNCj4gPiArCS8q DQo+ID4gKwkgKiBBY2NvcmRpbmcgdG8gdGhlIERQIDEuMSBzcGVjaWZpY2F0aW9uLCBhICJTaW5r IERldmljZSBtdXN0IGV4aXQgdGhlDQo+ID4gKwkgKiBwb3dlciBzYXZpbmcgc3RhdGUgd2l0aGlu IDEgbXMiIChTZWN0aW9uIDIuNS4zLjEsIFRhYmxlIDUtNTIsICJTaW5rDQo+ID4gKwkgKiBDb250 cm9sIEZpZWxkIiAocmVnaXN0ZXIgMHg2MDApLg0KPiA+ICsJICovDQo+ID4gKwl1c2xlZXBfcmFu Z2UoMTAwMCwgMjAwMCk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ ID4gKy8qKg0KPiA+ICsgKiBjZG5zX21oZHBfbGlua19wb3dlcl9kb3duKCkgLSBwb3dlciBkb3du IGEgRGlzcGxheVBvcnQgbGluaw0KPiA+ICsgKiBAYXV4OiBEaXNwbGF5UG9ydCBBVVggY2hhbm5l bA0KPiA+ICsgKiBAbGluazogcG9pbnRlciB0byBhIHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBs aW5rIGNvbmZpZ3VyYXRpb24NCj4gPiArICoNCj4gPiArICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mg b3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuDQo+ID4gKyAqLw0KPiA+ICtzdGF0 aWMNCj4gPiAraW50IGNkbnNfbWhkcF9saW5rX3Bvd2VyX2Rvd24oc3RydWN0IGRybV9kcF9hdXgg KmF1eCwNCj4gPiArCQkJICAgICAgc3RydWN0IGNkbnNfbWhkcF9saW5rICpsaW5rKQ0KPiA+ICt7 DQo+ID4gKwl1OCB2YWx1ZTsNCj4gPiArCWludCBlcnI7DQo+ID4gKw0KPiA+ICsJLyogRFBfU0VU X1BPV0VSIHJlZ2lzdGVyIGlzIG9ubHkgYXZhaWxhYmxlIG9uIERQQ0QgdjEuMSBhbmQgbGF0ZXIN Cj4gKi8NCj4gPiArCWlmIChsaW5rLT5yZXZpc2lvbiA8IDB4MTEpDQo+ID4gKwkJcmV0dXJuIDA7 DQo+ID4gKw0KPiA+ICsJZXJyID0gZHJtX2RwX2RwY2RfcmVhZGIoYXV4LCBEUF9TRVRfUE9XRVIs ICZ2YWx1ZSk7DQo+ID4gKwlpZiAoZXJyIDwgMCkNCj4gPiArCQlyZXR1cm4gZXJyOw0KPiA+ICsN Cj4gPiArCXZhbHVlICY9IH5EUF9TRVRfUE9XRVJfTUFTSzsNCj4gPiArCXZhbHVlIHw9IERQX1NF VF9QT1dFUl9EMzsNCj4gPiArDQo+ID4gKwllcnIgPSBkcm1fZHBfZHBjZF93cml0ZWIoYXV4LCBE UF9TRVRfUE9XRVIsIHZhbHVlKTsNCj4gPiArCWlmIChlcnIgPCAwKQ0KPiA+ICsJCXJldHVybiBl cnI7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ ICsgKiBjZG5zX21oZHBfbGlua19jb25maWd1cmUoKSAtIGNvbmZpZ3VyZSBhIERpc3BsYXlQb3J0 IGxpbmsNCj4gPiArICogQGF1eDogRGlzcGxheVBvcnQgQVVYIGNoYW5uZWwNCj4gPiArICogQGxp bms6IHBvaW50ZXIgdG8gYSBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgbGluayBjb25maWd1cmF0 aW9uDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUg ZXJyb3IgY29kZSBvbiBmYWlsdXJlLg0KPiA+ICsgKi8NCj4gPiArc3RhdGljDQo+ID4gK2ludCBj ZG5zX21oZHBfbGlua19jb25maWd1cmUoc3RydWN0IGRybV9kcF9hdXggKmF1eCwNCj4gPiArCQkJ ICAgICBzdHJ1Y3QgY2Ruc19taGRwX2xpbmsgKmxpbmspDQo+ID4gK3sNCj4gPiArCXU4IHZhbHVl c1syXTsNCj4gPiArCWludCBlcnI7DQo+ID4gKw0KPiA+ICsJdmFsdWVzWzBdID0gZHJtX2RwX2xp bmtfcmF0ZV90b19id19jb2RlKGxpbmstPnJhdGUpOw0KPiA+ICsJdmFsdWVzWzFdID0gbGluay0+ bnVtX2xhbmVzOw0KPiA+ICsNCj4gPiArCWlmIChsaW5rLT5jYXBhYmlsaXRpZXMgJiBEUF9MSU5L X0NBUF9FTkhBTkNFRF9GUkFNSU5HKQ0KPiA+ICsJCXZhbHVlc1sxXSB8PSBEUF9MQU5FX0NPVU5U X0VOSEFOQ0VEX0ZSQU1FX0VOOw0KPiA+ICsNCj4gPiArCWVyciA9IGRybV9kcF9kcGNkX3dyaXRl KGF1eCwgRFBfTElOS19CV19TRVQsIHZhbHVlcywNCj4gc2l6ZW9mKHZhbHVlcykpOw0KPiA+ICsJ aWYgKGVyciA8IDApDQo+ID4gKwkJcmV0dXJuIGVycjsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHVuc2lnbmVkIGludCBtaGRwX21heF9saW5rX3Jh dGUoc3RydWN0IGNkbnNfbWhkcF9kZXZpY2UNCj4gKm1oZHApDQo+ID4gK3sNCj4gPiArCXJldHVy biBtaW4obWhkcC0+aG9zdC5saW5rX3JhdGUsIG1oZHAtPnNpbmsubGlua19yYXRlKTsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIHU4IG1oZHBfbWF4X251bV9sYW5lcyhzdHJ1Y3QgY2Ruc19t aGRwX2RldmljZSAqbWhkcCkNCj4gPiArew0KPiA+ICsJcmV0dXJuIG1pbl90KHU4LCBtaGRwLT5z aW5rLmxhbmVzX2NudCwgbWhkcC0+aG9zdC5sYW5lc19jbnQpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtzdGF0aWMgdTggbWhkcF9lcV90cmFpbmluZ19wYXR0ZXJuX3N1cHBvcnRlZChzdHJ1Y3QgY2Ru c19taGRwX2RldmljZQ0KPiAqbWhkcCkNCj4gPiArew0KPiA+ICsJcmV0dXJuIGZscyhtaGRwLT5o b3N0LnBhdHRlcm5fc3VwcCAmIG1oZHAtPnNpbmsucGF0dGVybl9zdXBwKTsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIGJvb2wgbWhkcF9nZXRfc3NjX3N1cHBvcnRlZChzdHJ1Y3QgY2Ruc19t aGRwX2RldmljZSAqbWhkcCkNCj4gPiArew0KPiA+ICsJLyogQ2hlY2sgaWYgU1NDIGlzIHN1cHBv cnRlZCBieSBib3RoIHNpZGVzICovDQo+ID4gKwlyZXR1cm4gKG1oZHAtPmhvc3Quc3NjKSAmJiAo bWhkcC0+c2luay5zc2MpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG1oZHBfZndf YWN0aXZhdGUoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywNCj4gPiArCQkJICAgIHN0cnVjdCBj ZG5zX21oZHBfZGV2aWNlICptaGRwKQ0KPiA+ICt7DQo+ID4gKwl1bnNpZ25lZCBpbnQgcmVnOw0K PiA+ICsJaW50IHJldCA9IDA7DQo+ID4gKw0KPiA+ICsJZGV2X2RiZyhtaGRwLT5kZXYsICIlc1xu IiwgX19mdW5jX18pOw0KPiA+ICsNCj4gPiArCWlmICghZncgfHwgIWZ3LT5kYXRhKSB7DQo+ID4g KwkJZGV2X2VycihtaGRwLT5kZXYsICIlczogTm8gZmlybXdhcmUuXG4iLCBfX2Z1bmNfXyk7DQo+ ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJc3Bpbl9sb2NrKCZt aGRwLT5zdGFydF9sb2NrKTsNCj4gPiArCWlmIChtaGRwLT5od19zdGF0ZSAhPSBNSERQX0hXX0lO QUNUSVZFKSB7DQo+ID4gKwkJc3Bpbl91bmxvY2soJm1oZHAtPnN0YXJ0X2xvY2spOw0KPiA+ICsJ CWlmIChtaGRwLT5od19zdGF0ZSAhPSBNSERQX0hXX1NUT1BQRUQpDQo+ID4gKwkJCWRldl9lcnIo bWhkcC0+ZGV2LCAiJXM6IEJhZCBIVyBzdGF0ZTogJWRcbiIsDQo+ID4gKwkJCQlfX2Z1bmNfXywg bWhkcC0+aHdfc3RhdGUpOw0KPiA+ICsJCXJldHVybiAtRUJVU1k7DQo+ID4gKwl9DQo+ID4gKwlt aGRwLT5od19zdGF0ZSA9IE1IRFBfSFdfTE9BRElORzsNCj4gPiArCXNwaW5fdW5sb2NrKCZtaGRw LT5zdGFydF9sb2NrKTsNCj4gPiArDQo+ID4gKwkvKiBSZWxlYXNlIHVDUFUgcmVzZXQgYW5kIHN0 YWxsIGl0LiAqLw0KPiA+ICsJd3JpdGVsKENETlNfQ1BVX1NUQUxMLCBtaGRwLT5yZWdzICsgQ0RO U19BUEJfQ1RSTCk7DQo+ID4gKw0KPiA+ICsJbWVtY3B5X3RvaW8obWhkcC0+cmVncyArIENETlNf TUhEUF9JTUVNLCBmdy0+ZGF0YSwgZnctDQo+ID5zaXplKTsNCj4gPiArDQo+ID4gKwkvKiBMZWF2 ZSBkZWJ1ZyBtb2RlLCByZWxlYXNlIHN0YWxsICovDQo+ID4gKwl3cml0ZWwoMCwgbWhkcC0+cmVn cyArIENETlNfQVBCX0NUUkwpOw0KPiA+ICsNCj4gPiArCS8qDQo+ID4gKwkgKiBXYWl0IGZvciB0 aGUgS0VFUF9BTElWRSAibWVzc2FnZSIgb24gdGhlIGZpcnN0IDggYml0cy4NCj4gPiArCSAqIFVw ZGF0ZWQgZWFjaCBzY2hlZCAidGljayIgKH4ybXMpDQo+ID4gKwkgKi8NCj4gPiArCXJldCA9IHJl YWRsX3BvbGxfdGltZW91dChtaGRwLT5yZWdzICsgQ0ROU19LRUVQX0FMSVZFLCByZWcsDQo+ID4g KwkJCQkgcmVnICYgQ0ROU19LRUVQX0FMSVZFX01BU0ssIDUwMCwNCj4gPiArCQkJCSBDRE5TX0tF RVBfQUxJVkVfVElNRU9VVCk7DQo+ID4gKwlpZiAocmV0KSB7DQo+ID4gKwkJZGV2X2VycihtaGRw LT5kZXYsDQo+ID4gKwkJCSJkZXZpY2UgZGlkbid0IGdpdmUgYW55IGxpZmUgc2lnbjogcmVnICVk XG4iLCByZWcpOw0KPiA+ICsJCWdvdG8gZXJyb3I7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyog SW5pdCBldmVudHMgdG8gMCBhcyBpdCdzIG5vdCBjbGVhcmVkIGJ5IEZXIGF0IGJvb3QgYnV0IG9u IHJlYWQgKi8NCj4gPiArCXJlYWRsKG1oZHAtPnJlZ3MgKyBDRE5TX1NXX0VWRU5UMCk7DQo+ID4g KwlyZWFkbChtaGRwLT5yZWdzICsgQ0ROU19TV19FVkVOVDEpOw0KPiA+ICsJcmVhZGwobWhkcC0+ cmVncyArIENETlNfU1dfRVZFTlQyKTsNCj4gPiArCXJlYWRsKG1oZHAtPnJlZ3MgKyBDRE5TX1NX X0VWRU5UMyk7DQo+ID4gKw0KPiA+ICsJLyogQWN0aXZhdGUgdUNQVSAqLw0KPiA+ICsJcmV0ID0g Y2Ruc19taGRwX3NldF9maXJtd2FyZV9hY3RpdmUobWhkcCwgdHJ1ZSk7DQo+ID4gKwlpZiAocmV0 KSB7DQo+ID4gKwkJZGV2X2VycihtaGRwLT5kZXYsICIlczogRmFpbGVkIHRvIGFjdGl2YXRlIEZX OiAlZFxuIiwNCj4gPiArCQkJX19mdW5jX18sIHJldCk7DQo+ID4gKwkJZ290byBlcnJvcjsNCj4g PiArCX0NCj4gPiArDQo+ID4gKwlzcGluX2xvY2soJm1oZHAtPnN0YXJ0X2xvY2spOw0KPiA+ICsN Cj4gPiArCW1oZHAtPmh3X3N0YXRlID0gTUhEUF9IV19SRUFEWTsNCj4gPiArDQo+ID4gKwkvKg0K PiA+ICsJICogSGVyZSB3ZSBtdXN0IGtlZXAgdGhlIGxvY2sgd2hpbGUgZW5hYmxpbmcgdGhlIGlu dGVycnVwdHMNCj4gPiArCSAqIHNpbmNlIGl0IHdvdWxkIG90aGVyd2lzZSBiZSBwb3NzaWJsZSB0 aGF0IGludGVycnVwdCBlbmFibGUNCj4gPiArCSAqIGNvZGUgaXMgZXhlY3V0ZWQgYWZ0ZXIgdGhl IGJyaWRnZSBpcyBkZXRhY2hlZC4gVGhlIHNpbWlsYXINCj4gPiArCSAqIHNpdHVhdGlvbiBpcyBu b3QgcG9zc2libGUgaW4gYXR0YWNoKCkvZGV0YWNoKCkgY2FsbGJhY2tzDQo+ID4gKwkgKiBzaW5j ZSB0aGUgaHdfc3RhdGUgY2hhbmdlcyBmcm9tIE1IRFBfSFdfUkVBRFkgdG8NCj4gPiArCSAqIE1I RFBfSFdfU1RPUFBFRCBoYXBwZW5zIG9ubHkgZHVlIHRvIGRyaXZlciByZW1vdmFsIHdoZW4NCj4g PiArCSAqIGJyaWRnZSBzaG91bGQgYWxyZWFkeSBiZSBkZXRhY2hlZC4NCj4gPiArCSAqLw0KPiA+ ICsJaWYgKG1oZHAtPmJyaWRnZV9hdHRhY2hlZCkgew0KPiA+ICsJCS8qIGVuYWJsZSBpbnRlcnJ1 cHRzICovDQo+ID4gKwkJd3JpdGVsKDAsIG1oZHAtPnJlZ3MgKyBDRE5TX0FQQl9JTlRfTUFTSyk7 DQo+ID4gKwkJd3JpdGVsKDAsIG1oZHAtPnJlZ3MgKyBDRE5TX01CX0lOVF9NQVNLKTsNCj4gPiAr CX0NCj4gPiArDQo+ID4gKwlzcGluX3VubG9jaygmbWhkcC0+c3RhcnRfbG9jayk7DQo+ID4gKw0K PiA+ICsJZGV2X2RiZyhtaGRwLT5kZXYsICJEUCBGVyBhY3RpdmF0ZWRcbiIpOw0KPiA+ICsNCj4g PiArCXJldHVybiAwOw0KPiA+ICtlcnJvcjoNCj4gPiArCXNwaW5fbG9jaygmbWhkcC0+c3RhcnRf bG9jayk7DQo+ID4gKwltaGRwLT5od19zdGF0ZSA9IE1IRFBfSFdfSU5BQ1RJVkU7DQo+ID4gKwlz cGluX3VubG9jaygmbWhkcC0+c3RhcnRfbG9jayk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHJldDsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgbWhkcF9md19jYihjb25zdCBzdHJ1Y3Qg ZmlybXdhcmUgKmZ3LCB2b2lkICpjb250ZXh0KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgY2Ruc19t aGRwX2RldmljZSAqbWhkcCA9IGNvbnRleHQ7DQo+ID4gKwlib29sIGJyaWRnZV9hdHRhY2hlZDsN Cj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJZGV2X2RiZyhtaGRwLT5kZXYsICJmaXJtd2Fy ZSBjYWxsYmFja1xuIik7DQo+ID4gKw0KPiA+ICsJcmV0ID0gbWhkcF9md19hY3RpdmF0ZShmdywg bWhkcCk7DQo+ID4gKw0KPiA+ICsJcmVsZWFzZV9maXJtd2FyZShmdyk7DQo+ID4gKw0KPiA+ICsJ aWYgKHJldCkNCj4gPiArCQlyZXR1cm47DQo+ID4gKw0KPiA+ICsJLyoNCj4gPiArCSAqICBYWFgg aG93IHRvIG1ha2Ugc3VyZSB0aGUgYnJpZGdlIGlzIHN0aWxsIGF0dGFjaGVkIHdoZW4NCj4gPiAr CSAqICAgICAgY2FsbGluZyBkcm1fa21zX2hlbHBlcl9ob3RwbHVnX2V2ZW50KCkgYWZ0ZXIgcmVs ZWFzaW5nDQo+ID4gKwkgKiAgICAgIHRoZSBsb2NrPyBXZSBzaG91bGQgbm90IGhvbGQgdGhlIHNw aW4gbG9jayB3aGVuDQo+ID4gKwkgKiAgICAgIGNhbGxpbmcgZHJtX2ttc19oZWxwZXJfaG90cGx1 Z19ldmVudCgpIHNpbmNlIGl0IG1heQ0KPiA+ICsJICogICAgICBjYXVzZSBhIGRlYWQgbG9jay4g RkItZGV2IGNvbnNvbGUgY2FsbHMgZGV0ZWN0IGZyb20gdGhlDQo+ID4gKwkgKiAgICAgIHNhbWUg dGhyZWFkIGp1c3QgZG93biB0aGUgY2FsbCBzdGFjayBzdGFydGVkIGhlcmUuDQo+ID4gKwkgKi8N Cj4gPiArCXNwaW5fbG9jaygmbWhkcC0+c3RhcnRfbG9jayk7DQo+ID4gKwlicmlkZ2VfYXR0YWNo ZWQgPSBtaGRwLT5icmlkZ2VfYXR0YWNoZWQ7DQo+ID4gKwlzcGluX3VubG9jaygmbWhkcC0+c3Rh cnRfbG9jayk7DQo+ID4gKwlpZiAoYnJpZGdlX2F0dGFjaGVkKQ0KPiA+ICsJCWRybV9rbXNfaGVs cGVyX2hvdHBsdWdfZXZlbnQobWhkcC0+YnJpZGdlLmRldik7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyBpbnQgbG9hZF9maXJtd2FyZShzdHJ1Y3QgY2Ruc19taGRwX2RldmljZSAqbWhkcCkN Cj4gDQo+IHMvbG9hZF9maXJtd2FyZS9taGRwX2xvYWRfZmlybXdhcmUvDQo+IA0KPiA+ICt7DQo+ ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCXJldCA9IHJlcXVlc3RfZmlybXdhcmVfbm93YWl0 KFRISVNfTU9EVUxFLCB0cnVlLCBGV19OQU1FLA0KPiBtaGRwLT5kZXYsDQo+ID4gKwkJCQkgICAg ICBHRlBfS0VSTkVMLCBtaGRwLCBtaGRwX2Z3X2NiKTsNCj4gPiArCWlmIChyZXQpIHsNCj4gPiAr CQlkZXZfZXJyKG1oZHAtPmRldiwgImZhaWxlZCB0byBsb2FkIGZpcm13YXJlICglcyksIHJldDoN Cj4gJWRcbiIsDQo+ID4gKwkJCUZXX05BTUUsIHJldCk7DQo+ID4gKwkJcmV0dXJuIHJldDsNCj4g PiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj IHZvaWQgbWhkcF9jaGVja19saW5rKHN0cnVjdCBjZG5zX21oZHBfZGV2aWNlICptaGRwKQ0KPiA+ ICt7DQo+ID4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubiA9ICZtaGRwLT5jb25uZWN0b3I7 DQo+ID4gKwl1OCBzdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV07DQo+ID4gKwlib29sIGhwZF9z dGF0ZTsNCj4gPiArCWludCBocGRfZXZlbnQ7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiAr CS8qIE5vdGhpbmcgdG8gY2hlY2sgaWYgdGhlcmUgaXMgbm8gbGluayAqLw0KPiA+ICsJaWYgKCFt aGRwLT5saW5rX3VwKQ0KPiA+ICsJCXJldHVybjsNCj4gPiArDQo+ID4gKwlocGRfZXZlbnQgPSBj ZG5zX21oZHBfcmVhZF9ldmVudChtaGRwKTsNCj4gPiArDQo+ID4gKwkvKiBHZXRpbmcgZXZlbnQg Yml0cyBmYWlsZWQsIGJhaWwgb3V0ICovDQo+ID4gKwlpZiAoaHBkX2V2ZW50IDwgMCkgew0KPiA+ ICsJCWRldl93YXJuKG1oZHAtPmRldiwgIiVzOiByZWFkIGV2ZW50IGZhaWxlZDogJWRcbiIsDQo+ ID4gKwkJCSBfX2Z1bmNfXywgaHBkX2V2ZW50KTsNCj4gPiArCQlyZXR1cm47DQo+ID4gKwl9DQo+ ID4gKw0KPiA+ICsJaHBkX3N0YXRlID0gISEoaHBkX2V2ZW50ICYgRFBUWF9SRUFEX0VWRU5UX0hQ RF9TVEFURSk7DQo+ID4gKw0KPiA+ICsJLyogTm8gcG9pbnQgdGhlIGNoZWNrIHRoZSBsaW5rIGlm IEhQRCBpcyBkb3duIChjYWJsZSBpcyB1bnBsdWdnZWQpICovDQo+ID4gKwlpZiAoIWhwZF9zdGF0 ZSkNCj4gPiArCQlyZXR1cm47DQo+ID4gKw0KPiA+ICsJLyoNCj4gPiArCSAqIFByZXZlbnQgZGlz cGxheSByZWNvbmZpZ3VyYXRpb24gYmV0d2VlbiBsaW5rIGNoZWNrIGFuZCBsaW5rDQo+ID4gKwkg KiBzdGF0dXMgcHJvcGVydHkgc2V0dGluZy4gV2UgbXVzdCB1c2UgdGhlIGxlZ2FjeSBnaWFudC1s b2NrDQo+ID4gKwkgKiBzaW5jZSBkcm1fY29ubmVjdG9yX3NldF9saW5rX3N0YXR1c19wcm9wZXJ0 eSgpJ3MgZmluZQ0KPiA+ICsJICogZ3JhaW5lZCBEUk0gbG9ja2luZyBpbXBsZW1lbnRhdGlvbiBp cyBicm9rZW4uDQo+ID4gKwkgKi8NCj4gPiArCW11dGV4X2xvY2soJmNvbm4tPmRldi0+bW9kZV9j b25maWcubXV0ZXgpOw0KPiA+ICsNCj4gPiArCS8qIENoZWNrIGlmIHRoZSBsaW5rIGlzIHN0aWxs IHVwICovDQo+ID4gKwlyZXQgPSBkcm1fZHBfZHBjZF9yZWFkX2xpbmtfc3RhdHVzKCZtaGRwLT5h dXgsIHN0YXR1cyk7DQo+ID4gKw0KPiA+ICsJaWYgKHJldCA8IDAgfHwgLyogSWYgZHBjZCByZWFk IGZhaWxzLCBhc3N1bWUgdGhlIGxpbmsgaXMgZG93biB0b28gKi8NCj4gPiArCSAgICAhZHJtX2Rw X2NoYW5uZWxfZXFfb2soc3RhdHVzLCBtaGRwLT5saW5rLm51bV9sYW5lcykgfHwNCj4gPiArCSAg ICAhZHJtX2RwX2Nsb2NrX3JlY292ZXJ5X29rKHN0YXR1cywgbWhkcC0+bGluay5udW1fbGFuZXMp KQ0KPiA+ICsJCS8qIExpbmsgaXMgYnJva2VuLCBpbmRpY2F0ZSBpdCB3aXRoIHRoZSBsaW5rIHN0 YXR1cyBwcm9wZXJ0eSAqLw0KPiA+ICsJCWRybV9jb25uZWN0b3Jfc2V0X2xpbmtfc3RhdHVzX3By b3BlcnR5KGNvbm4sDQo+ID4gKw0KPiBEUk1fTU9ERV9MSU5LX1NUQVRVU19CQUQpOw0KPiA+ICsN Cj4gPiArCW11dGV4X3VubG9jaygmY29ubi0+ZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7DQo+ID4g K30NCj4gPiArDQo+ID4gK3N0YXRpYyBpcnFyZXR1cm5fdCBtaGRwX2lycV9oYW5kbGVyKGludCBp cnEsIHZvaWQgKmRhdGEpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBjZG5zX21oZHBfZGV2aWNlICpt aGRwID0gKHN0cnVjdCBjZG5zX21oZHBfZGV2aWNlDQo+ICopZGF0YTsNCj4gPiArCXUzMiBtYm94 X3N0YXQsIGFwYl9zdGF0LCBzd19ldjAsIHN3X2V2MSwgc3dfZXYyLCBzd19ldjM7DQo+ID4gKwli b29sIGJyaWRnZV9hdHRhY2hlZDsNCj4gPiArDQo+ID4gKwlhcGJfc3RhdCA9IHJlYWRsKG1oZHAt PnJlZ3MgKyBDRE5TX0FQQl9JTlRfU1RBVFVTKTsNCj4gPiArCW1ib3hfc3RhdCA9IHJlYWRsKG1o ZHAtPnJlZ3MgKyBDRE5TX01CX0lOVF9TVEFUVVMpOw0KPiA+ICsJc3dfZXYwID0gcmVhZGwobWhk cC0+cmVncyArIENETlNfU1dfRVZFTlQwKTsNCj4gPiArCXN3X2V2MSA9IHJlYWRsKG1oZHAtPnJl Z3MgKyBDRE5TX1NXX0VWRU5UMSk7DQo+ID4gKwlzd19ldjIgPSByZWFkbChtaGRwLT5yZWdzICsg Q0ROU19TV19FVkVOVDIpOw0KPiA+ICsJc3dfZXYzID0gcmVhZGwobWhkcC0+cmVncyArIENETlNf U1dfRVZFTlQzKTsNCj4gPiArDQo+ID4gKwkvKg0KPiA+ICsJICogIENhbGxpbmcgZHJtX2ttc19o ZWxwZXJfaG90cGx1Z19ldmVudCgpIHdoZW4gbm90IGF0dGFjaGVkDQo+ID4gKwkgKiAgdG8gZHJt IGRldmljZSBjYXVzZXMgYW4gb29wcyBiZWNhdXNlIHRoZSBkcm1fYnJpZGdlLT5kZXYNCj4gPiAr CSAqICBpcyBOVUxMLiBTZWUgbWhkcF9md19jYigpIGNvbW1lbnRzIGZvciBkZXRhaWxzIGFib3V0 IHRoZQ0KPiA+ICsJICogIHByb2JsZW1zIHJlbGF0ZWQgZHJtX2ttc19oZWxwZXJfaG90cGx1Z19l dmVudCgpIGNhbGwuDQo+ID4gKwkgKi8NCj4gPiArCXNwaW5fbG9jaygmbWhkcC0+c3RhcnRfbG9j ayk7DQo+ID4gKwlicmlkZ2VfYXR0YWNoZWQgPSBtaGRwLT5icmlkZ2VfYXR0YWNoZWQ7DQo+ID4g KwlzcGluX3VubG9jaygmbWhkcC0+c3RhcnRfbG9jayk7DQo+ID4gKw0KPiA+ICsJaWYgKGJyaWRn ZV9hdHRhY2hlZCAmJiAoc3dfZXYwICYgQ0ROU19EUFRYX0hQRCkpIHsNCj4gPiArCQltaGRwX2No ZWNrX2xpbmsobWhkcCk7DQo+ID4gKw0KPiA+ICsJCWRybV9rbXNfaGVscGVyX2hvdHBsdWdfZXZl bnQobWhkcC0+YnJpZGdlLmRldik7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIElSUV9I QU5ETEVEOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3NpemVfdCBtaGRwX3RyYW5zZmVy KHN0cnVjdCBkcm1fZHBfYXV4ICphdXgsDQo+ID4gKwkJCSAgICAgc3RydWN0IGRybV9kcF9hdXhf bXNnICptc2cpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBjZG5zX21oZHBfZGV2aWNlICptaGRwID0g ZGV2X2dldF9kcnZkYXRhKGF1eC0+ZGV2KTsNCj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJ aWYgKG1zZy0+cmVxdWVzdCAhPSBEUF9BVVhfTkFUSVZFX1dSSVRFICYmDQo+ID4gKwkgICAgbXNn LT5yZXF1ZXN0ICE9IERQX0FVWF9OQVRJVkVfUkVBRCkNCj4gPiArCQlyZXR1cm4gLUVOT1RTVVBQ Ow0KPiA+ICsNCj4gPiArCWlmIChtc2ctPnJlcXVlc3QgPT0gRFBfQVVYX05BVElWRV9XUklURSkg ew0KPiA+ICsJCWNvbnN0IHU4ICpidWYgPSBtc2ctPmJ1ZmZlcjsNCj4gPiArCQlpbnQgaTsNCj4g PiArDQo+ID4gKwkJZm9yIChpID0gMDsgaSA8IG1zZy0+c2l6ZTsgKytpKSB7DQo+ID4gKwkJCXJl dCA9IGNkbnNfbWhkcF9kcGNkX3dyaXRlKG1oZHAsDQo+ID4gKwkJCQkJCSAgIG1zZy0+YWRkcmVz cyArIGksIGJ1ZltpXSk7DQo+ID4gKwkJCWlmICghcmV0KQ0KPiA+ICsJCQkJY29udGludWU7DQo+ ID4gKw0KPiA+ICsJCQlEUk1fREVWX0VSUk9SKG1oZHAtPmRldiwgIkZhaWxlZCB0byB3cml0ZQ0K PiBEUENEXG4iKTsNCj4gPiArDQo+ID4gKwkJCXJldHVybiByZXQ7DQo+ID4gKwkJfQ0KPiA+ICsJ fSBlbHNlIHsNCj4gPiArCQlyZXQgPSBjZG5zX21oZHBfZHBjZF9yZWFkKG1oZHAsIG1zZy0+YWRk cmVzcywNCj4gPiArCQkJCQkgIG1zZy0+YnVmZmVyLCBtc2ctPnNpemUpOw0KPiA+ICsJCWlmIChy ZXQpIHsNCj4gPiArCQkJRFJNX0RFVl9FUlJPUihtaGRwLT5kZXYsICJGYWlsZWQgdG8gcmVhZA0K PiBEUENEXG4iKTsNCj4gPiArDQo+ID4gKwkJCXJldHVybiByZXQ7DQo+ID4gKwkJfQ0KPiA+ICsJ fQ0KPiA+ICsNCj4gPiArCXJldHVybiBtc2ctPnNpemU7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0 YXRpYyBpbnQgY2Ruc19taGRwX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgY2Ruc19taGRwX2RldmljZSAqbWhkcCA9IGNvbm5l Y3Rvcl90b19taGRwKGNvbm5lY3Rvcik7DQo+ID4gKwlzdHJ1Y3QgZWRpZCAqZWRpZDsNCj4gPiAr CWludCBudW1fbW9kZXM7DQo+ID4gKw0KPiA+ICsJZWRpZCA9IGRybV9kb19nZXRfZWRpZChjb25u ZWN0b3IsIGNkbnNfbWhkcF9nZXRfZWRpZF9ibG9jaywNCj4gbWhkcCk7DQo+IA0KPiBPdXQgb2Yg Y3VyaW9zaXR5LCB3aXRoIHRoZSBtYWlsYm94IGludGVyZmFjZSwgaG93IGxvbmcgZG9lcyBpdCBh Y3R1YWxseQ0KPiB0YWtlIHRvIHJlYWQgdGhlIEVESUQgPw0KPiANCj4gPiArCWlmICghZWRpZCkg ew0KPiA+ICsJCURSTV9ERVZfRVJST1IobWhkcC0+ZGV2LCAiRmFpbGVkIHRvIHJlYWQgRURJRFxu Iik7DQo+ID4gKw0KPiA+ICsJCXJldHVybiAwOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWRybV9j b25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoY29ubmVjdG9yLCBlZGlkKTsNCj4gPiArCW51 bV9tb2RlcyA9IGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uZWN0b3IsIGVkaWQpOw0KPiA+ICsJa2Zy ZWUoZWRpZCk7DQo+ID4gKw0KPiA+ICsJLyoNCj4gPiArCSAqIEhBQ0s6IFdhcm4gYWJvdXQgdW5z dXBwb3J0ZWQgZGlzcGxheSBmb3JtYXRzIHVudGlsIHdlIGRlYWwNCj4gPiArCSAqICAgICAgIHdp dGggdGhlbSBjb3JyZWN0bHkuDQo+ID4gKwkgKi8NCj4gPiArCWlmIChjb25uZWN0b3ItPmRpc3Bs YXlfaW5mby5jb2xvcl9mb3JtYXRzICYmDQo+ID4gKwkgICAgIShjb25uZWN0b3ItPmRpc3BsYXlf aW5mby5jb2xvcl9mb3JtYXRzICYNCj4gPiArCSAgICAgIG1oZHAtPmRpc3BsYXlfZm10LmNvbG9y X2Zvcm1hdCkpDQo+ID4gKwkJZGV2X3dhcm4obWhkcC0+ZGV2LA0KPiA+ICsJCQkgIiVzOiBObyBz dXBwb3J0ZWQgY29sb3JfZm9ybWF0IGZvdW5kICgweCUwOHgpXG4iLA0KPiA+ICsJCQlfX2Z1bmNf XywgY29ubmVjdG9yLT5kaXNwbGF5X2luZm8uY29sb3JfZm9ybWF0cyk7DQo+ID4gKw0KPiA+ICsJ aWYgKGNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmJwYyAmJg0KPiA+ICsJICAgIGNvbm5lY3Rvci0+ ZGlzcGxheV9pbmZvLmJwYyA8IG1oZHAtPmRpc3BsYXlfZm10LmJwYykNCj4gPiArCQlkZXZfd2Fy bihtaGRwLT5kZXYsICIlczogRGlzcGxheSBicGMgb25seSAlZCA8ICVkXG4iLA0KPiA+ICsJCQkg X19mdW5jX18sIGNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmJwYywNCj4gPiArCQkJIG1oZHAtPmRp c3BsYXlfZm10LmJwYyk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIG51bV9tb2RlczsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIGludCBjZG5zX21oZHBfZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uLA0KPiA+ICsJCQkgICAgc3RydWN0IGRybV9tb2Rlc2V0X2FjcXVpcmVfY3R4ICpj dHgsDQo+ID4gKwkJCSAgICBib29sIGZvcmNlKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgY2Ruc19t aGRwX2RldmljZSAqbWhkcCA9IGNvbm5lY3Rvcl90b19taGRwKGNvbm4pOw0KPiA+ICsJYm9vbCBo d19yZWFkeTsNCj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJZGV2X2RiZyhtaGRwLT5kZXYs ICIlc1xuIiwgX19mdW5jX18pOw0KPiA+ICsNCj4gPiArCXNwaW5fbG9jaygmbWhkcC0+c3RhcnRf bG9jayk7DQo+ID4gKw0KPiA+ICsJaHdfcmVhZHkgPSBtaGRwLT5od19zdGF0ZSA9PSBNSERQX0hX X1JFQURZOw0KPiA+ICsNCj4gPiArCXNwaW5fdW5sb2NrKCZtaGRwLT5zdGFydF9sb2NrKTsNCj4g PiArDQo+ID4gKwlpZiAoIWh3X3JlYWR5IHx8IFdBUk5fT04oIW1oZHAtPmJyaWRnZV9hdHRhY2hl ZCkpDQo+ID4gKwkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOw0KPiA+ICsN Cj4gPiArCXJldCA9IGNkbnNfbWhkcF9nZXRfaHBkX3N0YXR1cyhtaGRwKTsNCj4gPiArCWlmIChy ZXQgPiAwKSB7DQo+ID4gKwkJbWhkcC0+cGx1Z2dlZCA9IHRydWU7DQo+ID4gKwkJcmV0dXJuIGNv bm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOw0KPiA+ICsJfQ0KPiA+ICsJaWYgKHJldCA8IDApDQo+ ID4gKwkJZGV2X2VycihtaGRwLT5kZXYsICJGYWlsZWQgdG8gb2J0YWluIEhQRCBzdGF0ZVxuIik7 DQo+ID4gKw0KPiA+ICsJbWhkcC0+cGx1Z2dlZCA9IGZhbHNlOw0KPiA+ICsNCj4gPiArCXJldHVy biBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3Rh dGljDQo+ID4gK2Jvb2wgY2Ruc19taGRwX2JhbmR3aWR0aF9vayhzdHJ1Y3QgY2Ruc19taGRwX2Rl dmljZSAqbWhkcCwNCj4gPiArCQkJICAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpt b2RlLA0KPiA+ICsJCQkgICAgaW50IGxhbmVzLCBpbnQgcmF0ZSkNCj4gPiArew0KPiA+ICsJdTMy IG1heF9idywgcmVxX2J3LCBicHA7DQo+ID4gKw0KPiA+ICsJYnBwID0gY2Ruc19taGRwX2dldF9i cHAoJm1oZHAtPmRpc3BsYXlfZm10KTsNCj4gPiArCXJlcV9idyA9IG1vZGUtPmNsb2NrICogYnBw IC8gODsNCj4gPiArDQo+ID4gKwltYXhfYncgPSBsYW5lcyAqIHJhdGU7DQo+ID4gKw0KPiA+ICsJ aWYgKHJlcV9idyA+IG1heF9idykgew0KPiA+ICsJCWRldl9kYmcobWhkcC0+ZGV2LCAiJXM6ICVz ICgldSAqICV1LzggPSkgJXUgPiAldSAoPSAldSAqDQo+ICV1KVxuIiwNCj4gPiArCQkJX19mdW5j X18sIG1vZGUtPm5hbWUsIG1vZGUtPmNsb2NrLCBicHAsIHJlcV9idywNCj4gPiArCQkJbWF4X2J3 LCBsYW5lcywgcmF0ZSk7DQo+ID4gKw0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArCX0NCj4g PiArDQo+ID4gKwlyZXR1cm4gdHJ1ZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljDQo+ID4g K2VudW0gZHJtX21vZGVfc3RhdHVzIGNkbnNfbWhkcF9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY29u bmVjdG9yDQo+ICpjb25uLA0KPiA+ICsJCQkJCSAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1v ZGUpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBjZG5zX21oZHBfZGV2aWNlICptaGRwID0gY29ubmVj dG9yX3RvX21oZHAoY29ubik7DQo+ID4gKw0KPiA+ICsJaWYgKCFjZG5zX21oZHBfYmFuZHdpZHRo X29rKG1oZHAsIG1vZGUsIG1oZHAtPmhvc3QubGFuZXNfY250LA0KPiA+ICsJCQkJICAgIG1oZHAt Pmhvc3QubGlua19yYXRlKSkNCj4gPiArCQlyZXR1cm4gTU9ERV9DTE9DS19ISUdIOw0KPiA+ICsN Cj4gPiArCXJldHVybiBNT0RFX09LOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qg c3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzDQo+IGNkbnNfbWhkcF9jb25uX2hlbHBl cl9mdW5jcyA9IHsNCj4gPiArCS5kZXRlY3RfY3R4ID0gY2Ruc19taGRwX2RldGVjdCwNCj4gPiAr CS5nZXRfbW9kZXMgPSBjZG5zX21oZHBfZ2V0X21vZGVzLA0KPiA+ICsJLm1vZGVfdmFsaWQgPSBj ZG5zX21oZHBfbW9kZV92YWxpZCwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBz dHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyBjZG5zX21oZHBfY29ubl9mdW5jcyA9IHsNCj4gPiAr CS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLA0K PiA+ICsJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPQ0KPiBkcm1fYXRvbWljX2hlbHBlcl9jb25u ZWN0b3JfZHVwbGljYXRlX3N0YXRlLA0KPiA+ICsJLmF0b21pY19kZXN0cm95X3N0YXRlID0NCj4g ZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUsDQo+ID4gKwkucmVzZXQg PSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQsDQo+ID4gKwkuZGVzdHJveSA9IGRy bV9jb25uZWN0b3JfY2xlYW51cCwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgY2Ru c19taGRwX2F0dGFjaChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQ0KPiA+ICt7DQo+ID4gKwlz dHJ1Y3QgY2Ruc19taGRwX2RldmljZSAqbWhkcCA9IGJyaWRnZV90b19taGRwKGJyaWRnZSk7DQo+ ID4gKwl1MzIgYnVzX2Zvcm1hdCA9IE1FRElBX0JVU19GTVRfUkdCMTIxMjEyXzFYMzY7DQo+ID4g KwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubiA9ICZtaGRwLT5jb25uZWN0b3I7DQo+ID4gKwli b29sIGh3X3JlYWR5Ow0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwlkZXZfZGJnKG1oZHAt PmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7DQo+ID4gKw0KPiA+ICsJaWYgKCZtaGRwLT5icmlkZ2Ug IT0gYnJpZGdlKQ0KPiA+ICsJCXJldHVybiAtRU5PREVWOw0KPiA+ICsNCj4gPiArCWNvbm4tPnBv bGxlZCA9IERSTV9DT05ORUNUT1JfUE9MTF9IUEQ7DQo+ID4gKw0KPiA+ICsJcmV0ID0gZHJtX2Nv bm5lY3Rvcl9pbml0KGJyaWRnZS0+ZGV2LCBjb25uLA0KPiAmY2Ruc19taGRwX2Nvbm5fZnVuY3Ms DQo+ID4gKwkJCQkgRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0KTsNCj4gPiArCWlmIChy ZXQpIHsNCj4gPiArCQlkZXZfZXJyKG1oZHAtPmRldiwgImZhaWxlZCB0byBpbml0IGNvbm5lY3Rv clxuIik7DQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArCX0NCj4gDQo+IEhvdyBhYm91dCBjb252 ZXJ0aW5nIHRvIGNvbm5lY3RvciBicmlkZ2Ugb3BlcmF0aW9ucyBhbmQgYXZvaWRpbmcNCj4gY3Jl YXRpb24gb2YgYSBjb25uZWN0b3IgaW4gdGhpcyBkcml2ZXIgPyBTZWUgdGhlIHJlY2VudCBjaGFu Z2VzIHRvIHRoZQ0KPiBvbWFwZHJtIGRyaXZlciBpbiBtYWlubGluZS4gQXQgdGhlIHZlcnkgbGVh c3QNCj4gDQo+IFlvdSBzaG91bGQgaW1wbGVtZW50IHN1cHBvcnQgZm9yIHRoZSBicmlkZ2UgY29u bmVjdG9yIG9wZXJhdGlvbnMgYW5kDQo+IG1ha2UgY29ubmVjdG9yIGNyZWF0aW9uIG9wdGlvbmFs IChzdXBwb3J0aW5nIHRoZQ0KPiBEUk1fQlJJREdFX0FUVEFDSF9OT19DT05ORUNUT1IgZmxhZyku IEkgd291bGQgZ28gb25lIHN0ZXAgZnVydGhlcg0KPiBhbmQNCj4gb25seSBzdXBwb3J0aW5nIERS TV9CUklER0VfQVRUQUNIX05PX0NPTk5FQ1RPUiwgcmVtb3ZpbmcNCj4gY29ubmVjdG9yDQo+IGNy ZWF0aW9uIGNvbXBsZXRlbHkuDQo+IA0KDQpUaGlzIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRo ZSBuZXcgbW9kZWwgb2YgY29udmVydGluZyB0byBjb25uZWN0b3IgYnJpZGdlIG9wZXJhdGlvbnMu DQpUaGlzIGlzIGJlY2F1c2Ugb2YgdGhlIGRlcGVuZGVuY3kgb24gVElEU1MgZHJpdmVyIHdoaWNo IGhhcyBzb21lIGxpbWl0YXRpb25zIGluIHN1cHBvcnRpbmcNCm5ldyBtb2RlbC4NCg0KPiA+ICsN Cj4gPiArCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZChjb25uLA0KPiAmY2Ruc19taGRwX2Nvbm5f aGVscGVyX2Z1bmNzKTsNCj4gPiArDQo+ID4gKwlyZXQgPSBkcm1fZGlzcGxheV9pbmZvX3NldF9i dXNfZm9ybWF0cygmY29ubi0+ZGlzcGxheV9pbmZvLA0KPiA+ICsJCQkJCSAgICAgICAmYnVzX2Zv cm1hdCwgMSk7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ ICsJY29ubi0+ZGlzcGxheV9pbmZvLmJ1c19mbGFncyA9IG1oZHAtPmNvbm5fYnVzX2ZsYWdzX2Rl ZmF1bHRzOw0KPiA+ICsNCj4gPiArCWlmICghKHN0cmNtcChtaGRwX2lkcy0+Y29tcGF0aWJsZSwg InRpLGo3MjFlLW1oZHA4NTQ2IikpKQ0KPiANCj4gSSB0aGluayB5b3UgbWVhbnQgdG8gY29tcGFy ZSB0aGUgY29tcGF0aWJsZSBzdHJpbmcgb2YgbWhkcC0+ZGV2LCBub3QgdGhlDQo+IGNvbXBhdGli bGUgc3RyaW5nIG9mIHRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgbWhkcF9pZHMgdGFibGUuDQo+IA0K PiA+ICsJLyoNCj4gPiArCSAqIERQIGlzIGludGVybmFsIHRvIEo3IFNvQyBhbmQgd2UgbmVlZCB0 byB1c2UgRFJJVkVfUE9TRURHRQ0KPiA+ICsJICogaW4gdGhlIGRpc3BsYXkgY29udHJvbGxlci4g VGhpcyBpcyBhY2hpZXZlZCBmb3IgdGhlIHRpbWUgYmVpbmcNCj4gPiArCSAqIGJ5IGRlZmluaW5n IFNBTVBMRV9ORUdFREdFIGhlcmUuDQo+ID4gKwkgKi8NCj4gPiArCQljb25uLT5kaXNwbGF5X2lu Zm8uYnVzX2ZsYWdzIHw9DQo+ID4gKw0KPiAJRFJNX0JVU19GTEFHX1BJWERBVEFfU0FNUExFX05F R0VER0UgfA0KPiA+ICsNCj4gCURSTV9CVVNfRkxBR19TWU5DX1NBTVBMRV9ORUdFREdFOw0KPiA+ ICsNCj4gPiArCXJldCA9IGRybV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoY29ubiwgYnJpZGdl LT5lbmNvZGVyKTsNCj4gPiArCWlmIChyZXQpIHsNCj4gPiArCQlkZXZfZXJyKG1oZHAtPmRldiwg ImZhaWxlZCB0byBhdHRhY2ggY29ubmVjdG9yIHRvDQo+IGVuY29kZXJcbiIpOw0KPiA+ICsJCXJl dHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJc3Bpbl9sb2NrKCZtaGRwLT5zdGFydF9s b2NrKTsNCj4gPiArDQo+ID4gKwltaGRwLT5icmlkZ2VfYXR0YWNoZWQgPSB0cnVlOw0KPiA+ICsJ aHdfcmVhZHkgPSBtaGRwLT5od19zdGF0ZSA9PSBNSERQX0hXX1JFQURZOw0KPiA+ICsNCj4gPiAr CXNwaW5fdW5sb2NrKCZtaGRwLT5zdGFydF9sb2NrKTsNCj4gPiArDQo+ID4gKwlpZiAoaHdfcmVh ZHkpIHsNCj4gPiArCQkvKiBlbmFibGUgaW50ZXJydXB0cyAqLw0KPiA+ICsJCXdyaXRlbCgwLCBt aGRwLT5yZWdzICsgQ0ROU19BUEJfSU5UX01BU0spOw0KPiA+ICsJCXdyaXRlbCgwLCBtaGRwLT5y ZWdzICsgQ0ROU19NQl9JTlRfTUFTSyk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbWhkcF9saW5rX3RyYWluaW5nX2luaXQo c3RydWN0IGNkbnNfbWhkcF9kZXZpY2UgKm1oZHApDQo+ID4gK3sNCj4gPiArCXUzMiByZWczMjsN Cj4gPiArCXU4IGk7DQo+ID4gKwl1bmlvbiBwaHlfY29uZmlndXJlX29wdHMgcGh5X2NmZzsNCj4g PiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJZHJtX2RwX2RwY2Rfd3JpdGViKCZtaGRwLT5hdXgs IERQX1RSQUlOSU5HX1BBVFRFUk5fU0VULA0KPiA+ICsJCQkgICBEUF9UUkFJTklOR19QQVRURVJO X0RJU0FCTEUpOw0KPiA+ICsNCj4gPiArCS8qIFJlc2V0IFBIWSBjb25maWd1cmF0aW9uICovDQo+ ID4gKwlyZWczMiA9IENETlNfUEhZX0NPTU1PTl9DT05GSUcgfA0KPiBDRE5TX1BIWV9UUkFJTklO R19UWVBFKDEpOw0KPiA+ICsJaWYgKCFtaGRwLT5ob3N0LnNjcmFtYmxlcikNCj4gPiArCQlyZWcz MiB8PSBDRE5TX1BIWV9TQ1JBTUJMRVJfQllQQVNTOw0KPiA+ICsNCj4gPiArCWNkbnNfbWhkcF9y ZWdfd3JpdGUobWhkcCwgQ0ROU19EUFRYX1BIWV9DT05GSUcsIHJlZzMyKTsNCj4gPiArDQo+ID4g KwljZG5zX21oZHBfcmVnX3dyaXRlKG1oZHAsIENETlNfRFBfRU5ITkNELA0KPiA+ICsJCQkgICAg bWhkcC0+c2luay5lbmhhbmNlZCAmIG1oZHAtPmhvc3QuZW5oYW5jZWQpOw0KPiA+ICsNCj4gPiAr CWNkbnNfbWhkcF9yZWdfd3JpdGUobWhkcCwgQ0ROU19EUF9MQU5FX0VOLA0KPiA+ICsJCQkgICAg Q0ROU19EUF9MQU5FX0VOX0xBTkVTKG1oZHAtDQo+ID5saW5rLm51bV9sYW5lcykpOw0KPiA+ICsN Cj4gPiArCWNkbnNfbWhkcF9saW5rX2NvbmZpZ3VyZSgmbWhkcC0+YXV4LCAmbWhkcC0+bGluayk7 DQo+ID4gKwlwaHlfY2ZnLmRwLmxpbmtfcmF0ZSA9IChtaGRwLT5saW5rLnJhdGUgLyAxMDApOw0K PiA+ICsJcGh5X2NmZy5kcC5sYW5lcyA9IChtaGRwLT5saW5rLm51bV9sYW5lcyk7DQo+ID4gKwlm b3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7DQo+ID4gKwkJcGh5X2NmZy5kcC52b2x0YWdlW2ldID0g MDsNCj4gPiArCQlwaHlfY2ZnLmRwLnByZVtpXSA9IDA7DQo+ID4gKwl9DQo+ID4gKwlwaHlfY2Zn LmRwLnNzYyA9IG1oZHBfZ2V0X3NzY19zdXBwb3J0ZWQobWhkcCk7DQo+ID4gKwlwaHlfY2ZnLmRw LnNldF9sYW5lcyA9IHRydWU7DQo+ID4gKwlwaHlfY2ZnLmRwLnNldF9yYXRlID0gdHJ1ZTsNCj4g PiArCXBoeV9jZmcuZHAuc2V0X3ZvbHRhZ2VzID0gdHJ1ZTsNCj4gPiArCXJldCA9IHBoeV9jb25m aWd1cmUobWhkcC0+cGh5LCAgJnBoeV9jZmcpOw0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCWRl dl9lcnIobWhkcC0+ZGV2LCAiJXM6IHBoeV9jb25maWd1cmUoKSBmYWlsZWQ6ICVkXG4iLA0KPiA+ ICsJCQlfX2Z1bmNfXywgcmV0KTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsN Cj4gPiArCWNkbnNfbWhkcF9yZWdfd3JpdGUobWhkcCwgQ0ROU19EUFRYX1BIWV9DT05GSUcsDQo+ ID4gKwkJCSAgICBDRE5TX1BIWV9DT01NT05fQ09ORklHIHwNCj4gPiArCQkJICAgIENETlNfUEhZ X1RSQUlOSU5HX0VOIHwNCj4gPiArCQkJICAgIENETlNfUEhZX1RSQUlOSU5HX1RZUEUoMSkgfA0K PiA+ICsJCQkgICAgQ0ROU19QSFlfU0NSQU1CTEVSX0JZUEFTUyk7DQo+ID4gKw0KPiA+ICsJZHJt X2RwX2RwY2Rfd3JpdGViKCZtaGRwLT5hdXgsIERQX1RSQUlOSU5HX1BBVFRFUk5fU0VULA0KPiA+ ICsJCQkgICBEUF9UUkFJTklOR19QQVRURVJOXzEgfA0KPiBEUF9MSU5LX1NDUkFNQkxJTkdfRElT QUJMRSk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyB2b2lkIG1oZHBfZ2V0X2FkanVzdF90cmFpbihzdHJ1Y3QgY2Ruc19taGRwX2RldmljZSAqbWhk cCwNCj4gPiArCQkJCSAgdTggbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV0sDQo+ID4g KwkJCQkgIHU4DQo+IGxhbmVzX2RhdGFbQ0ROU19EUF9NQVhfTlVNX0xBTkVTXSwNCj4gPiArCQkJ CSAgdW5pb24gcGh5X2NvbmZpZ3VyZV9vcHRzICpwaHlfY2ZnKQ0KPiA+ICt7DQo+ID4gKwl1bnNp Z25lZCBpbnQgaTsNCj4gPiArCXU4IGFkanVzdCwgbWF4X3ByZV9lbXBoLCBtYXhfdm9sdF9zd2lu ZzsNCj4gPiArCXU4IHNldF92b2x0LCBzZXRfcHJlOw0KPiA+ICsNCj4gPiArCW1heF9wcmVfZW1w aCA9IENETlNfUFJFX0VNUEhBU0lTKG1oZHAtPmhvc3QucHJlX2VtcGhhc2lzKQ0KPiA+ICsJCQkg ICA8PCBEUF9UUkFJTl9QUkVfRU1QSEFTSVNfU0hJRlQ7DQo+ID4gKwltYXhfdm9sdF9zd2luZyA9 IENETlNfVk9MVF9TV0lORyhtaGRwLT5ob3N0LnZvbHRfc3dpbmcpOw0KPiA+ICsNCj4gPiArCWZv ciAoaSA9IDA7IGkgPCBtaGRwLT5saW5rLm51bV9sYW5lczsgaSsrKSB7DQo+ID4gKwkJLyogQ2hl Y2sgaWYgVm9sdGFnZSBzd2luZyBhbmQgcHJlLWVtcGhhc2lzIGFyZSB3aXRoaW4gbGltaXRzDQo+ ICovDQo+ID4gKwkJYWRqdXN0ID0gZHJtX2RwX2dldF9hZGp1c3RfcmVxdWVzdF92b2x0YWdlKGxp bmtfc3RhdHVzLCBpKTsNCj4gPiArCQlzZXRfdm9sdCA9IG1pbl90KHU4LCBhZGp1c3QsIG1heF92 b2x0X3N3aW5nKTsNCj4gPiArDQo+ID4gKwkJYWRqdXN0ID0NCj4gZHJtX2RwX2dldF9hZGp1c3Rf cmVxdWVzdF9wcmVfZW1waGFzaXMobGlua19zdGF0dXMsIGkpOw0KPiA+ICsJCXNldF9wcmUgPSBt aW5fdCh1OCwgYWRqdXN0LCBtYXhfcHJlX2VtcGgpDQo+ID4gKwkJCSAgPj4gRFBfVFJBSU5fUFJF X0VNUEhBU0lTX1NISUZUOw0KPiA+ICsNCj4gPiArCQkvKiBWb2x0YWdlIHN3aW5nIGxldmVsIGFu ZCBwcmUtZW1waGFzaXMgbGV2ZWwgY29tYmluYXRpb24gaXMNCj4gPiArCQkgKiBub3QgYWxsb3dl ZDogbGVhdmluZyBwcmUtZW1waGFzaXMgYXMtaXMsIGFuZCBhZGp1c3RpbmcNCj4gPiArCQkgKiB2 b2x0YWdlIHN3aW5nLg0KPiA+ICsJCSAqLw0KPiA+ICsJCWlmIChzZXRfdm9sdCArIHNldF9wcmUg PiAzKQ0KPiA+ICsJCQlzZXRfdm9sdCA9IDMgLSBzZXRfcHJlOw0KPiA+ICsNCj4gPiArCQlwaHlf Y2ZnLT5kcC52b2x0YWdlW2ldID0gc2V0X3ZvbHQ7DQo+ID4gKwkJbGFuZXNfZGF0YVtpXSA9IHNl dF92b2x0Ow0KPiA+ICsNCj4gPiArCQlpZiAoc2V0X3ZvbHQgPT0gbWF4X3ZvbHRfc3dpbmcpDQo+ ID4gKwkJCWxhbmVzX2RhdGFbaV0gfD0gRFBfVFJBSU5fTUFYX1NXSU5HX1JFQUNIRUQ7DQo+ID4g Kw0KPiA+ICsJCXBoeV9jZmctPmRwLnByZVtpXSA9IHNldF9wcmU7DQo+ID4gKwkJbGFuZXNfZGF0 YVtpXSB8PSAoc2V0X3ByZSA8PA0KPiBEUF9UUkFJTl9QUkVfRU1QSEFTSVNfU0hJRlQpOw0KPiA+ ICsNCj4gPiArCQlpZiAoc2V0X3ByZSA9PSAobWF4X3ByZV9lbXBoID4+DQo+IERQX1RSQUlOX1BS RV9FTVBIQVNJU19TSElGVCkpDQo+ID4gKwkJCWxhbmVzX2RhdGFbaV0gfD0NCj4gRFBfVFJBSU5f TUFYX1BSRV9FTVBIQVNJU19SRUFDSEVEOw0KPiA+ICsJfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz dGF0aWMNCj4gPiArdm9pZCBtaGRwX3NldF9hZGp1c3RfcmVxdWVzdF92b2x0YWdlKHU4DQo+IGxp bmtfc3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJWkVdLA0KPiA+ICsJCQkJICAgICBpbnQgbGFuZSwg dTggdm9sdCkNCj4gPiArew0KPiA+ICsJaW50IGkgPSBEUF9BREpVU1RfUkVRVUVTVF9MQU5FMF8x ICsgKGxhbmUgPj4gMSk7DQo+ID4gKwlpbnQgcyA9ICgobGFuZSAmIDEpID8NCj4gPiArCQkgRFBf QURKVVNUX1ZPTFRBR0VfU1dJTkdfTEFORTFfU0hJRlQgOg0KPiA+ICsJCSBEUF9BREpVU1RfVk9M VEFHRV9TV0lOR19MQU5FMF9TSElGVCk7DQo+ID4gKwlpbnQgaWR4ID0gaSAtIERQX0xBTkUwXzFf U1RBVFVTOw0KPiA+ICsNCj4gPiArCWxpbmtfc3RhdHVzW2lkeF0gJj0gfihEUF9BREpVU1RfVk9M VEFHRV9TV0lOR19MQU5FMF9NQVNLIDw8DQo+IHMpOw0KPiA+ICsJbGlua19zdGF0dXNbaWR4XSB8 PSB2b2x0IDw8IHM7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYw0KPiA+ICt2b2lkIG1oZHBf c2V0X2FkanVzdF9yZXF1ZXN0X3ByZV9lbXBoYXNpcyh1OA0KPiBsaW5rX3N0YXR1c1tEUF9MSU5L X1NUQVRVU19TSVpFXSwNCj4gPiArCQkJCQkgIGludCBsYW5lLCB1OCBwcmVfZW1waGFzaXMpDQo+ ID4gK3sNCj4gPiArCWludCBpID0gRFBfQURKVVNUX1JFUVVFU1RfTEFORTBfMSArIChsYW5lID4+ IDEpOw0KPiA+ICsJaW50IHMgPSAoKGxhbmUgJiAxKSA/DQo+ID4gKwkJIERQX0FESlVTVF9QUkVf RU1QSEFTSVNfTEFORTFfU0hJRlQgOg0KPiA+ICsJCSBEUF9BREpVU1RfUFJFX0VNUEhBU0lTX0xB TkUwX1NISUZUKTsNCj4gPiArCWludCBpZHggPSBpIC0gRFBfTEFORTBfMV9TVEFUVVM7DQo+ID4g Kw0KPiA+ICsJbGlua19zdGF0dXNbaWR4XSAmPSB+KERQX0FESlVTVF9QUkVfRU1QSEFTSVNfTEFO RTBfTUFTSyA8PA0KPiBzKTsNCj4gPiArCWxpbmtfc3RhdHVzW2lkeF0gfD0gcHJlX2VtcGhhc2lz IDw8IHM7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIG1oZHBfYWRqdXN0X3JlcXVl c3RlZF9lcShzdHJ1Y3QgY2Ruc19taGRwX2RldmljZSAqbWhkcCwNCj4gPiArCQkJCSAgICAgdTgg bGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV0pDQo+ID4gK3sNCj4gPiArCXVuc2lnbmVk IGludCBpOw0KPiA+ICsJdTggdm9sdCwgcHJlLCBtYXhfdm9sdCA9IENETlNfVk9MVF9TV0lORyht aGRwLQ0KPiA+aG9zdC52b2x0X3N3aW5nKSwNCj4gPiArCQkgICAgICBtYXhfcHJlID0gQ0ROU19Q UkVfRU1QSEFTSVMobWhkcC0NCj4gPmhvc3QucHJlX2VtcGhhc2lzKTsNCj4gPiArDQo+ID4gKwlm b3IgKGkgPSAwOyBpIDwgbWhkcC0+bGluay5udW1fbGFuZXM7IGkrKykgew0KPiA+ICsJCXZvbHQg PSBkcm1fZHBfZ2V0X2FkanVzdF9yZXF1ZXN0X3ZvbHRhZ2UobGlua19zdGF0dXMsIGkpOw0KPiA+ ICsJCXByZSA9DQo+IGRybV9kcF9nZXRfYWRqdXN0X3JlcXVlc3RfcHJlX2VtcGhhc2lzKGxpbmtf c3RhdHVzLCBpKTsNCj4gPiArCQlpZiAodm9sdCArIHByZSA+IDMpDQo+ID4gKwkJCW1oZHBfc2V0 X2FkanVzdF9yZXF1ZXN0X3ZvbHRhZ2UobGlua19zdGF0dXMsIGksDQo+ID4gKwkJCQkJCQkzIC0g cHJlKTsNCj4gPiArCQlpZiAobWhkcC0+aG9zdC52b2x0X3N3aW5nICYgQ0ROU19GT1JDRV9WT0xU X1NXSU5HKQ0KPiA+ICsJCQltaGRwX3NldF9hZGp1c3RfcmVxdWVzdF92b2x0YWdlKGxpbmtfc3Rh dHVzLCBpLA0KPiA+ICsJCQkJCQkJbWF4X3ZvbHQpOw0KPiA+ICsJCWlmIChtaGRwLT5ob3N0LnBy ZV9lbXBoYXNpcyAmDQo+IENETlNfRk9SQ0VfUFJFX0VNUEhBU0lTKQ0KPiA+ICsNCj4gCW1oZHBf c2V0X2FkanVzdF9yZXF1ZXN0X3ByZV9lbXBoYXNpcyhsaW5rX3N0YXR1cywgaSwNCj4gPiArCQkJ CQkJCSAgICAgbWF4X3ByZSk7DQo+ID4gKwl9DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBi b29sIG1oZHBfbGlua190cmFpbmluZ19jaGFubmVsX2VxKHN0cnVjdCBjZG5zX21oZHBfZGV2aWNl DQo+ICptaGRwLA0KPiA+ICsJCQkJCSAgdTggZXFfdHBzLA0KPiA+ICsJCQkJCSAgdW5zaWduZWQg aW50IHRyYWluaW5nX2ludGVydmFsKQ0KPiA+ICt7DQo+ID4gKwl1OCBsYW5lc19kYXRhW0NETlNf RFBfTUFYX05VTV9MQU5FU10sIGZhaWxfY291bnRlcl9zaG9ydCA9IDA7DQo+ID4gKwl1OCBsaW5r X3N0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXTsNCj4gPiArCXUzMiByZWczMjsNCj4gPiArCXVu aW9uIHBoeV9jb25maWd1cmVfb3B0cyBwaHlfY2ZnOw0KPiA+ICsJaW50IHJldDsNCj4gPiArCWJv b2wgcjsNCj4gPiArDQo+ID4gKwlkZXZfZGJnKG1oZHAtPmRldiwgIlN0YXJ0aW5nIEVRIHBoYXNl XG4iKTsNCj4gPiArDQo+ID4gKwkvKiBFbmFibGUgbGluayB0cmFpbmluZyBUUFNbZXFfdHBzXSBp biBQSFkgKi8NCj4gPiArCXJlZzMyID0gQ0ROU19QSFlfQ09NTU9OX0NPTkZJRyB8IENETlNfUEhZ X1RSQUlOSU5HX0VOIHwNCj4gPiArCQlDRE5TX1BIWV9UUkFJTklOR19UWVBFKGVxX3Rwcyk7DQo+ ID4gKwlpZiAoZXFfdHBzICE9IDQpDQo+ID4gKwkJcmVnMzIgfD0gQ0ROU19QSFlfU0NSQU1CTEVS X0JZUEFTUzsNCj4gPiArCWNkbnNfbWhkcF9yZWdfd3JpdGUobWhkcCwgQ0ROU19EUFRYX1BIWV9D T05GSUcsIHJlZzMyKTsNCj4gPiArDQo+ID4gKwlkcm1fZHBfZHBjZF93cml0ZWIoJm1oZHAtPmF1 eCwgRFBfVFJBSU5JTkdfUEFUVEVSTl9TRVQsDQo+ID4gKwkJCSAgIChlcV90cHMgIT0gNCkgPyBl cV90cHMgfA0KPiBEUF9MSU5LX1NDUkFNQkxJTkdfRElTQUJMRSA6DQo+ID4gKwkJCSAgIENETlNf RFBfVFJBSU5JTkdfUEFUVEVSTl80KTsNCj4gPiArDQo+ID4gKwlkcm1fZHBfZHBjZF9yZWFkX2xp bmtfc3RhdHVzKCZtaGRwLT5hdXgsIGxpbmtfc3RhdHVzKTsNCj4gPiArDQo+ID4gKwlkbyB7DQo+ ID4gKwkJbWhkcF9nZXRfYWRqdXN0X3RyYWluKG1oZHAsIGxpbmtfc3RhdHVzLCBsYW5lc19kYXRh LA0KPiAmcGh5X2NmZyk7DQo+ID4gKwkJcGh5X2NmZy5kcC5sYW5lcyA9IChtaGRwLT5saW5rLm51 bV9sYW5lcyk7DQo+ID4gKwkJcGh5X2NmZy5kcC5zc2MgPSBtaGRwX2dldF9zc2Nfc3VwcG9ydGVk KG1oZHApOw0KPiA+ICsJCXBoeV9jZmcuZHAuc2V0X2xhbmVzID0gZmFsc2U7DQo+ID4gKwkJcGh5 X2NmZy5kcC5zZXRfcmF0ZSA9IGZhbHNlOw0KPiA+ICsJCXBoeV9jZmcuZHAuc2V0X3ZvbHRhZ2Vz ID0gdHJ1ZTsNCj4gPiArCQlyZXQgPSBwaHlfY29uZmlndXJlKG1oZHAtPnBoeSwgICZwaHlfY2Zn KTsNCj4gPiArCQlpZiAocmV0KSB7DQo+ID4gKwkJCWRldl9lcnIobWhkcC0+ZGV2LCAiJXM6IHBo eV9jb25maWd1cmUoKSBmYWlsZWQ6DQo+ICVkXG4iLA0KPiA+ICsJCQkJX19mdW5jX18sIHJldCk7 DQo+ID4gKwkJCWdvdG8gZXJyOw0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJY2Ruc19taGRwX2Fk anVzdF9sdChtaGRwLCBtaGRwLT5saW5rLm51bV9sYW5lcywNCj4gPiArCQkJCSAgICB0cmFpbmlu Z19pbnRlcnZhbCwgbGFuZXNfZGF0YSwgbGlua19zdGF0dXMpOw0KPiA+ICsNCj4gPiArCQlyID0g ZHJtX2RwX2Nsb2NrX3JlY292ZXJ5X29rKGxpbmtfc3RhdHVzLCBtaGRwLQ0KPiA+bGluay5udW1f bGFuZXMpOw0KPiA+ICsJCWlmICghcikNCj4gPiArCQkJZ290byBlcnI7DQo+ID4gKw0KPiA+ICsJ CWlmIChkcm1fZHBfY2hhbm5lbF9lcV9vayhsaW5rX3N0YXR1cywgbWhkcC0NCj4gPmxpbmsubnVt X2xhbmVzKSkgew0KPiA+ICsJCQlkZXZfZGJnKG1oZHAtPmRldiwgIkVRIHBoYXNlIHN1Y2NlZWRl ZFxuIik7DQo+ID4gKwkJCXJldHVybiB0cnVlOw0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJZmFp bF9jb3VudGVyX3Nob3J0Kys7DQo+ID4gKw0KPiA+ICsJCW1oZHBfYWRqdXN0X3JlcXVlc3RlZF9l cShtaGRwLCBsaW5rX3N0YXR1cyk7DQo+ID4gKwl9IHdoaWxlIChmYWlsX2NvdW50ZXJfc2hvcnQg PCA1KTsNCj4gPiArDQo+ID4gK2VycjoNCj4gPiArCWRldl9kYmcobWhkcC0+ZGV2LCAiRVEgcGhh c2UgZmFpbGVkIGZvciAlZCBsYW5lcyBhbmQgJWQgcmF0ZVxuIiwNCj4gPiArCQltaGRwLT5saW5r Lm51bV9sYW5lcywgbWhkcC0+bGluay5yYXRlKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gZmFsc2U7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIG1oZHBfYWRqdXN0X3JlcXVlc3RlZF9j cihzdHJ1Y3QgY2Ruc19taGRwX2RldmljZSAqbWhkcCwNCj4gPiArCQkJCSAgICAgdTggbGlua19z dGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV0sDQo+ID4gKwkJCQkgICAgIHU4ICpyZXFfdm9sdCwg dTggKnJlcV9wcmUpDQo+ID4gK3sNCj4gPiArCWNvbnN0IHUzMiBtYXhfdm9sdCA9IENETlNfVk9M VF9TV0lORyhtaGRwLT5ob3N0LnZvbHRfc3dpbmcpLA0KPiA+ICsJCSAgbWF4X3ByZSA9IENETlNf UFJFX0VNUEhBU0lTKG1oZHAtDQo+ID5ob3N0LnByZV9lbXBoYXNpcyk7DQo+ID4gKwl1bnNpZ25l ZCBpbnQgaTsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbWhkcC0+bGluay5udW1fbGFu ZXM7IGkrKykgew0KPiA+ICsJCXVuc2lnbmVkIGludCB2YWw7DQo+ID4gKw0KPiA+ICsJCXZhbCA9 IG1oZHAtPmhvc3Qudm9sdF9zd2luZyAmIENETlNfRk9SQ0VfVk9MVF9TV0lORyA/DQo+ID4gKwkJ ICAgICAgbWF4X3ZvbHQgOiByZXFfdm9sdFtpXTsNCj4gPiArCQltaGRwX3NldF9hZGp1c3RfcmVx dWVzdF92b2x0YWdlKGxpbmtfc3RhdHVzLCBpLCB2YWwpOw0KPiA+ICsNCj4gPiArCQl2YWwgPSBt aGRwLT5ob3N0LnByZV9lbXBoYXNpcyAmDQo+IENETlNfRk9SQ0VfUFJFX0VNUEhBU0lTID8NCj4g PiArCQkgICAgICBtYXhfcHJlIDogcmVxX3ByZVtpXTsNCj4gPiArCQltaGRwX3NldF9hZGp1c3Rf cmVxdWVzdF9wcmVfZW1waGFzaXMobGlua19zdGF0dXMsIGksIHZhbCk7DQo+ID4gKwl9DQo+ID4g K30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIG1oZHBfdmFsaWRhdGVfY3Ioc3RydWN0IGNkbnNf bWhkcF9kZXZpY2UgKm1oZHAsIGJvb2wNCj4gKmNyX2RvbmUsDQo+ID4gKwkJCSAgICAgYm9vbCAq c2FtZV9iZWZvcmVfYWRqdXN0LCBib29sDQo+ICptYXhfc3dpbmdfcmVhY2hlZCwNCj4gPiArCQkJ ICAgICB1OCBiZWZvcmVfY3JbRFBfTElOS19TVEFUVVNfU0laRV0sDQo+ID4gKwkJCSAgICAgdTgg YWZ0ZXJfY3JbRFBfTElOS19TVEFUVVNfU0laRV0sIHU4ICpyZXFfdm9sdCwNCj4gPiArCQkJICAg ICB1OCAqcmVxX3ByZSkNCj4gPiArew0KPiA+ICsJY29uc3QgdTggbWF4X3ZvbHQgPSBDRE5TX1ZP TFRfU1dJTkcobWhkcC0+aG9zdC52b2x0X3N3aW5nKSwNCj4gPiArCQkgbWF4X3ByZSA9IENETlNf UFJFX0VNUEhBU0lTKG1oZHAtDQo+ID5ob3N0LnByZV9lbXBoYXNpcyk7DQo+IA0KPiBQbGVhc2Ug bWFrZSB0aGF0IHR3byBzZXBhcmF0ZSB2YXJpYWJsZSBkZWNsYXJhdGlvbnMuDQo+IA0KPiA+ICsJ Ym9vbCBzYW1lX3ByZSwgc2FtZV92b2x0Ow0KPiA+ICsJdW5zaWduZWQgaW50IGk7DQo+ID4gKw0K PiA+ICsJKnNhbWVfYmVmb3JlX2FkanVzdCA9IGZhbHNlOw0KPiA+ICsJKm1heF9zd2luZ19yZWFj aGVkID0gZmFsc2U7DQo+ID4gKwkqY3JfZG9uZSA9IGRybV9kcF9jbG9ja19yZWNvdmVyeV9vayhh ZnRlcl9jciwgbWhkcC0NCj4gPmxpbmsubnVtX2xhbmVzKTsNCj4gPiArDQo+ID4gKwlmb3IgKGkg PSAwOyBpIDwgbWhkcC0+bGluay5udW1fbGFuZXM7IGkrKykgew0KPiA+ICsJCXU4IHRtcDsNCj4g DQo+IE5vIHZhcmlhYmxlIG5hbWVkIHRtcCBwbGVhc2UuIElmIHRoZXkncmUgbWVhbnQgdG8gaG9s ZCBhbiBhcmJpdHJhcnkNCj4gcmVnaXN0ZXIgdmFsdWUsIHZhbCBvciB2YWx1ZSBhciBiZXR0ZXIg bmFtZXMuDQo+IA0KPiA+ICsNCj4gPiArCQl0bXAgPSBkcm1fZHBfZ2V0X2FkanVzdF9yZXF1ZXN0 X3ZvbHRhZ2UoYWZ0ZXJfY3IsIGkpOw0KPiA+ICsJCXJlcV92b2x0W2ldID0gbWluX3QodTgsIHRt cCwgbWF4X3ZvbHQpOw0KPiANCj4gWW91IGNhbiB1c2UNCj4gDQo+IAkJcmVnX3ZvbHRbaV0gPSBt aW4odG1wLCBtYXhfdm9sdCk7DQo+IA0KPiBhcyBib3RoIGFyZSBvZiB1OCB0eXBlLiBTYW1lIGJl bG93Lg0KPiANCj4gPiArDQo+ID4gKwkJdG1wID0gZHJtX2RwX2dldF9hZGp1c3RfcmVxdWVzdF9w cmVfZW1waGFzaXMoYWZ0ZXJfY3IsIGkpDQo+ID4+DQo+ID4gKwkJICAgICAgRFBfVFJBSU5fUFJF X0VNUEhBU0lTX1NISUZUOw0KPiA+ICsJCXJlcV9wcmVbaV0gPSBtaW5fdCh1OCwgdG1wLCBtYXhf cHJlKTsNCj4gPiArDQo+ID4gKwkJc2FtZV9wcmUgPSAoYmVmb3JlX2NyW2ldICYNCj4gRFBfVFJB SU5fUFJFX0VNUEhBU0lTX01BU0spID09DQo+ID4gKwkJCSAgIHJlcV9wcmVbaV0gPDwgRFBfVFJB SU5fUFJFX0VNUEhBU0lTX1NISUZUOw0KPiA+ICsJCXNhbWVfdm9sdCA9IChiZWZvcmVfY3JbaV0g Jg0KPiBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX01BU0spID09DQo+ID4gKwkJCSAgICByZXFfdm9s dFtpXTsNCj4gPiArCQlpZiAoc2FtZV9wcmUgJiYgc2FtZV92b2x0KQ0KPiA+ICsJCQkqc2FtZV9i ZWZvcmVfYWRqdXN0ID0gdHJ1ZTsNCj4gPiArDQo+ID4gKwkJLyogMy4xLjUuMiBpbiBEUCBTdGFu ZGFyZCB2MS40LiBUYWJsZSAzLTEgKi8NCj4gPiArCQlpZiAoISpjcl9kb25lICYmIHJlcV92b2x0 W2ldICsgcmVxX3ByZVtpXSA+PSAzKSB7DQo+ID4gKwkJCSptYXhfc3dpbmdfcmVhY2hlZCA9IHRy dWU7DQo+ID4gKwkJCXJldHVybjsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gK30NCj4gPiArDQo+ ID4gK3N0YXRpYyBib29sIG1oZHBfbGlua190cmFpbmluZ19jcihzdHJ1Y3QgY2Ruc19taGRwX2Rl dmljZSAqbWhkcCkNCj4gPiArew0KPiA+ICsJdTggbGFuZXNfZGF0YVtDRE5TX0RQX01BWF9OVU1f TEFORVNdLA0KPiA+ICsJZmFpbF9jb3VudGVyX3Nob3J0ID0gMCwgZmFpbF9jb3VudGVyX2NyX2xv bmcgPSAwOw0KPiA+ICsJdTggbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV07DQo+ID4g Kwlib29sIGNyX2RvbmU7DQo+ID4gKwl1bmlvbiBwaHlfY29uZmlndXJlX29wdHMgcGh5X2NmZzsN Cj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJZGV2X2RiZyhtaGRwLT5kZXYsICJTdGFydGlu ZyBDUiBwaGFzZVxuIik7DQo+ID4gKw0KPiA+ICsJcmV0ID0gbWhkcF9saW5rX3RyYWluaW5nX2lu aXQobWhkcCk7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCWdvdG8gZXJyOw0KPiA+ICsNCj4gPiAr CWRybV9kcF9kcGNkX3JlYWRfbGlua19zdGF0dXMoJm1oZHAtPmF1eCwgbGlua19zdGF0dXMpOw0K PiA+ICsNCj4gPiArCWRvIHsNCj4gPiArCQl1OA0KPiByZXF1ZXN0ZWRfYWRqdXN0X3ZvbHRfc3dp bmdbQ0ROU19EUF9NQVhfTlVNX0xBTkVTXSA9IHt9Ow0KPiA+ICsJCXU4DQo+IHJlcXVlc3RlZF9h ZGp1c3RfcHJlX2VtcGhhc2lzW0NETlNfRFBfTUFYX05VTV9MQU5FU10gPSB7fTsNCj4gPiArCQli b29sIHNhbWVfYmVmb3JlX2FkanVzdCwgbWF4X3N3aW5nX3JlYWNoZWQ7DQo+ID4gKw0KPiA+ICsJ CW1oZHBfZ2V0X2FkanVzdF90cmFpbihtaGRwLCBsaW5rX3N0YXR1cywgbGFuZXNfZGF0YSwNCj4g JnBoeV9jZmcpOw0KPiA+ICsJCXBoeV9jZmcuZHAubGFuZXMgPSAobWhkcC0+bGluay5udW1fbGFu ZXMpOw0KPiA+ICsJCXBoeV9jZmcuZHAuc3NjID0gbWhkcF9nZXRfc3NjX3N1cHBvcnRlZChtaGRw KTsNCj4gPiArCQlwaHlfY2ZnLmRwLnNldF9sYW5lcyA9IGZhbHNlOw0KPiA+ICsJCXBoeV9jZmcu ZHAuc2V0X3JhdGUgPSBmYWxzZTsNCj4gPiArCQlwaHlfY2ZnLmRwLnNldF92b2x0YWdlcyA9IHRy dWU7DQo+ID4gKwkJcmV0ID0gcGh5X2NvbmZpZ3VyZShtaGRwLT5waHksICAmcGh5X2NmZyk7DQo+ ID4gKwkJaWYgKHJldCkgew0KPiA+ICsJCQlkZXZfZXJyKG1oZHAtPmRldiwgIiVzOiBwaHlfY29u ZmlndXJlKCkgZmFpbGVkOg0KPiAlZFxuIiwNCj4gPiArCQkJCV9fZnVuY19fLCByZXQpOw0KPiA+ ICsJCQlnb3RvIGVycjsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCWNkbnNfbWhkcF9hZGp1c3Rf bHQobWhkcCwgbWhkcC0+bGluay5udW1fbGFuZXMsIDEwMCwNCj4gPiArCQkJCSAgICBsYW5lc19k YXRhLCBsaW5rX3N0YXR1cyk7DQo+ID4gKw0KPiA+ICsJCW1oZHBfdmFsaWRhdGVfY3IobWhkcCwg JmNyX2RvbmUsICZzYW1lX2JlZm9yZV9hZGp1c3QsDQo+ID4gKwkJCQkgJm1heF9zd2luZ19yZWFj aGVkLCBsYW5lc19kYXRhLA0KPiBsaW5rX3N0YXR1cywNCj4gPiArCQkJCSByZXF1ZXN0ZWRfYWRq dXN0X3ZvbHRfc3dpbmcsDQo+ID4gKwkJCQkgcmVxdWVzdGVkX2FkanVzdF9wcmVfZW1waGFzaXMp Ow0KPiA+ICsNCj4gPiArCQlpZiAobWF4X3N3aW5nX3JlYWNoZWQpIHsNCj4gPiArCQkJZGV2X2Vy cihtaGRwLT5kZXYsICJDUjogbWF4IHN3aW5nIHJlYWNoZWRcbiIpOw0KPiA+ICsJCQlnb3RvIGVy cjsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCWlmIChjcl9kb25lKSB7DQo+ID4gKwkJCWRldl9k YmcobWhkcC0+ZGV2LCAiQ1IgcGhhc2Ugc3VjY2VlZGVkXG4iKTsNCj4gPiArCQkJcmV0dXJuIHRy dWU7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQkvKiBOb3QgYWxsIENSX0RPTkUgYml0cyBzZXQg Ki8NCj4gPiArCQlmYWlsX2NvdW50ZXJfY3JfbG9uZysrOw0KPiA+ICsNCj4gPiArCQlpZiAoc2Ft ZV9iZWZvcmVfYWRqdXN0KSB7DQo+ID4gKwkJCWZhaWxfY291bnRlcl9zaG9ydCsrOw0KPiA+ICsJ CQljb250aW51ZTsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCWZhaWxfY291bnRlcl9zaG9ydCA9 IDA7DQo+ID4gKwkJLyoNCj4gPiArCQkgKiBWb2x0YWdlIHN3aW5nL3ByZS1lbXBoYXNpcyBhZGp1 c3QgcmVxdWVzdGVkDQo+ID4gKwkJICogZHVyaW5nIENSIHBoYXNlDQo+ID4gKwkJICovDQo+ID4g KwkJbWhkcF9hZGp1c3RfcmVxdWVzdGVkX2NyKG1oZHAsIGxpbmtfc3RhdHVzLA0KPiA+ICsJCQkJ CSByZXF1ZXN0ZWRfYWRqdXN0X3ZvbHRfc3dpbmcsDQo+ID4gKwkJCQkJIHJlcXVlc3RlZF9hZGp1 c3RfcHJlX2VtcGhhc2lzKTsNCj4gPiArCX0gd2hpbGUgKGZhaWxfY291bnRlcl9zaG9ydCA8IDUg JiYgZmFpbF9jb3VudGVyX2NyX2xvbmcgPCAxMCk7DQo+ID4gKw0KPiA+ICtlcnI6DQo+ID4gKwlk ZXZfZGJnKG1oZHAtPmRldiwgIkNSIHBoYXNlIGZhaWxlZCBmb3IgJWQgbGFuZXMgYW5kICVkIHJh dGVcbiIsDQo+ID4gKwkJbWhkcC0+bGluay5udW1fbGFuZXMsIG1oZHAtPmxpbmsucmF0ZSk7DQo+ ID4gKw0KPiA+ICsJcmV0dXJuIGZhbHNlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9p ZCBsb3dlcl9saW5rX3JhdGUoc3RydWN0IGNkbnNfbWhkcF9saW5rICpsaW5rKQ0KPiA+ICt7DQo+ ID4gKwlzd2l0Y2ggKGRybV9kcF9saW5rX3JhdGVfdG9fYndfY29kZShsaW5rLT5yYXRlKSkgew0K PiA+ICsJY2FzZSBEUF9MSU5LX0JXXzJfNzoNCj4gPiArCQlsaW5rLT5yYXRlID0NCj4gZHJtX2Rw X2J3X2NvZGVfdG9fbGlua19yYXRlKERQX0xJTktfQldfMV82Mik7DQo+ID4gKwkJYnJlYWs7DQo+ ID4gKwljYXNlIERQX0xJTktfQldfNV80Og0KPiA+ICsJCWxpbmstPnJhdGUgPQ0KPiBkcm1fZHBf YndfY29kZV90b19saW5rX3JhdGUoRFBfTElOS19CV18yXzcpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ ICsJY2FzZSBEUF9MSU5LX0JXXzhfMToNCj4gPiArCQlsaW5rLT5yYXRlID0NCj4gZHJtX2RwX2J3 X2NvZGVfdG9fbGlua19yYXRlKERQX0xJTktfQldfNV80KTsNCj4gPiArCQlicmVhazsNCj4gPiAr CX0NCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBtaGRwX2xpbmtfdHJhaW5pbmcoc3Ry dWN0IGNkbnNfbWhkcF9kZXZpY2UgKm1oZHAsDQo+ID4gKwkJCSAgICAgIHVuc2lnbmVkIGludCB0 cmFpbmluZ19pbnRlcnZhbCkNCj4gPiArew0KPiA+ICsJdTMyIHJlZzMyOw0KPiA+ICsJY29uc3Qg dTggZXFfdHBzID0gbWhkcF9lcV90cmFpbmluZ19wYXR0ZXJuX3N1cHBvcnRlZChtaGRwKTsNCj4g PiArDQo+ID4gKwl3aGlsZSAoMSkgew0KPiA+ICsJCWlmICghbWhkcF9saW5rX3RyYWluaW5nX2Ny KG1oZHApKSB7DQo+ID4gKwkJCWlmIChkcm1fZHBfbGlua19yYXRlX3RvX2J3X2NvZGUobWhkcC0+ bGluay5yYXRlKQ0KPiAhPQ0KPiA+ICsJCQkgICAgRFBfTElOS19CV18xXzYyKSB7DQo+ID4gKwkJ CQlkZXZfZGJnKG1oZHAtPmRldiwNCj4gPiArCQkJCQkiUmVkdWNpbmcgbGluayByYXRlIGR1cmlu ZyBDUg0KPiBwaGFzZVxuIik7DQo+ID4gKwkJCQlsb3dlcl9saW5rX3JhdGUoJm1oZHAtPmxpbmsp Ow0KPiA+ICsNCj4gPiArCQkJCWNvbnRpbnVlOw0KPiA+ICsJCQl9IGVsc2UgaWYgKG1oZHAtPmxp bmsubnVtX2xhbmVzID4gMSkgew0KPiA+ICsJCQkJZGV2X2RiZyhtaGRwLT5kZXYsDQo+ID4gKwkJ CQkJIlJlZHVjaW5nIGxhbmVzIG51bWJlciBkdXJpbmcgQ1INCj4gcGhhc2VcbiIpOw0KPiA+ICsJ CQkJbWhkcC0+bGluay5udW1fbGFuZXMgPj49IDE7DQo+ID4gKwkJCQltaGRwLT5saW5rLnJhdGUg PQ0KPiBtaGRwX21heF9saW5rX3JhdGUobWhkcCk7DQo+ID4gKw0KPiA+ICsJCQkJY29udGludWU7 DQo+ID4gKwkJCX0NCj4gPiArDQo+ID4gKwkJCWRldl9kYmcobWhkcC0+ZGV2LA0KPiA+ICsJCQkJ IkxpbmsgdHJhaW5pbmcgZmFpbGVkIGR1cmluZyBDUiBwaGFzZVxuIik7DQo+ID4gKwkJCWdvdG8g ZXJyOw0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJaWYgKG1oZHBfbGlua190cmFpbmluZ19jaGFu bmVsX2VxKG1oZHAsIGVxX3RwcywNCj4gPiArCQkJCQkJICB0cmFpbmluZ19pbnRlcnZhbCkpDQo+ ID4gKwkJCWJyZWFrOw0KPiA+ICsNCj4gPiArCQlpZiAobWhkcC0+bGluay5udW1fbGFuZXMgPiAx KSB7DQo+ID4gKwkJCWRldl9kYmcobWhkcC0+ZGV2LA0KPiA+ICsJCQkJIlJlZHVjaW5nIGxhbmVz IG51bWJlciBkdXJpbmcgRVENCj4gcGhhc2VcbiIpOw0KPiA+ICsJCQltaGRwLT5saW5rLm51bV9s YW5lcyA+Pj0gMTsNCj4gPiArDQo+ID4gKwkJCWNvbnRpbnVlOw0KPiA+ICsJCX0gZWxzZSBpZiAo ZHJtX2RwX2xpbmtfcmF0ZV90b19id19jb2RlKG1oZHAtPmxpbmsucmF0ZSkgIT0NCj4gPiArCQkJ ICAgRFBfTElOS19CV18xXzYyKSB7DQo+ID4gKwkJCWRldl9kYmcobWhkcC0+ZGV2LA0KPiA+ICsJ CQkJIlJlZHVjaW5nIGxpbmsgcmF0ZSBkdXJpbmcgRVEgcGhhc2VcbiIpOw0KPiA+ICsJCQlsb3dl cl9saW5rX3JhdGUoJm1oZHAtPmxpbmspOw0KPiA+ICsJCQltaGRwLT5saW5rLm51bV9sYW5lcyA9 DQo+IG1oZHBfbWF4X251bV9sYW5lcyhtaGRwKTsNCj4gPiArDQo+ID4gKwkJCWNvbnRpbnVlOw0K PiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJZGV2X2RiZyhtaGRwLT5kZXYsICJMaW5rIHRyYWluaW5n IGZhaWxlZCBkdXJpbmcgRVENCj4gcGhhc2VcbiIpOw0KPiA+ICsJCWdvdG8gZXJyOw0KPiA+ICsJ fQ0KPiA+ICsNCj4gPiArCWRldl9kYmcobWhkcC0+ZGV2LCAiTGluayB0cmFpbmluZyBzdWNjZXNz ZnVsXG4iKTsNCj4gPiArDQo+ID4gKwlkcm1fZHBfZHBjZF93cml0ZWIoJm1oZHAtPmF1eCwgRFBf VFJBSU5JTkdfUEFUVEVSTl9TRVQsDQo+ID4gKwkJCSAgIG1oZHAtPmhvc3Quc2NyYW1ibGVyID8g MCA6DQo+ID4gKwkJCSAgIERQX0xJTktfU0NSQU1CTElOR19ESVNBQkxFKTsNCj4gPiArDQo+ID4g KwljZG5zX21oZHBfcmVnX3JlYWQobWhkcCwgQ0ROU19EUF9GUkFNRVJfR0xPQkFMX0NPTkZJRywN Cj4gJnJlZzMyKTsNCj4gPiArCXJlZzMyICY9IH5HRU5NQVNLKDEsIDApOw0KPiA+ICsJcmVnMzIg fD0gQ0ROU19EUF9OVU1fTEFORVMobWhkcC0+bGluay5udW1fbGFuZXMpOw0KPiA+ICsJcmVnMzIg fD0gQ0ROU19EUF9XUl9GQUlMSU5HX0VER0VfVlNZTkM7DQo+ID4gKwljZG5zX21oZHBfcmVnX3dy aXRlKG1oZHAsIENETlNfRFBfRlJBTUVSX0dMT0JBTF9DT05GSUcsDQo+IHJlZzMyKTsNCj4gDQo+ IEdpdmVuIGhvdyBleHBlbnNpdmUgcmVhZCBvcGVyYXRpb25zIGFyZSwgeW91IHNob3VsZCBjYWNo ZSB0aGUgdmFsdWUgb2YNCj4gdGhpcyByZWdpc3RlciBpbiB0aGUgY2Ruc19taGRwX2RldmljZSBz dHJ1Y3R1cmUgYW5kIHJlbW92ZSBhbGwgdGhlDQo+IHJlYWRzICh1bmxlc3MgdGhlIHJlZ2lzdGVy IGNvbnRhaW5zIHZvbGF0aWxlIGJpdHMsIGJ1dCB0aGF0IGRvZXNuJ3Qgc2VlbQ0KPiB0byBiZSB0 aGUgY2FzZSkuDQo+IA0KDQpUaGVzZSByZWdpc3RlcnMgZG9lcyBub3QgY29udGFpbiB2b2xhdGls ZSBiaXRzLCBhbmQgY2FuIGJlIGNhY2hlZCwgaG93ZXZlciB3ZSBoYXZlIHRoZXNlDQpyZWdpc3Rl ciByZWFkIG9ubHkgZmV3IHRpbWVzIGluIHRoZSBkcml2ZXIgYW5kIHdoaWNoIGlzIG1pbmltYWwg YW5kIGhlbmNlIHRoaXMgcmVhZCBpcyBub3QNCmNvbnNpZGVyZWQgZXhwZW5zaXZlLg0KDQo+ID4g Kw0KPiA+ICsJLyogUmVzZXQgUEhZIGNvbmZpZyAqLw0KPiA+ICsJcmVnMzIgPSBDRE5TX1BIWV9D T01NT05fQ09ORklHIHwNCj4gQ0ROU19QSFlfVFJBSU5JTkdfVFlQRSgxKTsNCj4gPiArCWlmICgh bWhkcC0+aG9zdC5zY3JhbWJsZXIpDQo+ID4gKwkJcmVnMzIgfD0gQ0ROU19QSFlfU0NSQU1CTEVS X0JZUEFTUzsNCj4gPiArCWNkbnNfbWhkcF9yZWdfd3JpdGUobWhkcCwgQ0ROU19EUFRYX1BIWV9D T05GSUcsIHJlZzMyKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArZXJyOg0KPiA+ICsJ LyogUmVzZXQgUEhZIGNvbmZpZyAqLw0KPiA+ICsJcmVnMzIgPSBDRE5TX1BIWV9DT01NT05fQ09O RklHIHwNCj4gQ0ROU19QSFlfVFJBSU5JTkdfVFlQRSgxKTsNCj4gPiArCWlmICghbWhkcC0+aG9z dC5zY3JhbWJsZXIpDQo+ID4gKwkJcmVnMzIgfD0gQ0ROU19QSFlfU0NSQU1CTEVSX0JZUEFTUzsN Cj4gPiArCWNkbnNfbWhkcF9yZWdfd3JpdGUobWhkcCwgQ0ROU19EUFRYX1BIWV9DT05GSUcsIHJl ZzMyKTsNCj4gPiArDQo+ID4gKwlkcm1fZHBfZHBjZF93cml0ZWIoJm1oZHAtPmF1eCwgRFBfVFJB SU5JTkdfUEFUVEVSTl9TRVQsDQo+ID4gKwkJCSAgIERQX1RSQUlOSU5HX1BBVFRFUk5fRElTQUJM RSk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIC1FSU87DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyB2b2lkIGNkbnNfbWhkcF9kaXNhYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpDQo+ID4g K3sNCj4gPiArCXN0cnVjdCBjZG5zX21oZHBfZGV2aWNlICptaGRwID0gYnJpZGdlX3RvX21oZHAo YnJpZGdlKTsNCj4gPiArCXUzMiByZXNwOw0KPiA+ICsNCj4gPiArCWRldl9kYmcobWhkcC0+ZGV2 LCAiJXNcbiIsIF9fZnVuY19fKTsNCj4gPiArDQo+ID4gKwljZG5zX21oZHBfcmVnX3JlYWQobWhk cCwgQ0ROU19EUF9GUkFNRVJfR0xPQkFMX0NPTkZJRywNCj4gJnJlc3ApOw0KPiA+ICsJcmVzcCAm PSB+Q0ROU19EUF9GUkFNRVJfRU47DQo+ID4gKwlyZXNwIHw9IENETlNfRFBfTk9fVklERU9fTU9E RTsNCj4gPiArCWNkbnNfbWhkcF9yZWdfd3JpdGUobWhkcCwgQ0ROU19EUF9GUkFNRVJfR0xPQkFM X0NPTkZJRywNCj4gcmVzcCk7DQo+ID4gKw0KPiA+ICsJbWhkcC0+bGlua191cCA9IGZhbHNlOw0K PiA+ICsNCj4gPiArCWlmIChtaGRwLT5wbHVnZ2VkKQ0KPiA+ICsJCWNkbnNfbWhkcF9saW5rX3Bv d2VyX2Rvd24oJm1oZHAtPmF1eCwgJm1oZHAtPmxpbmspOw0KPiA+ICsNCj4gPiArCS8qIERpc2Fi bGUgVklGIGNsb2NrIGZvciBzdHJlYW0gMCAqLw0KPiA+ICsJY2Ruc19taGRwX3JlZ19yZWFkKG1o ZHAsIENETlNfRFBUWF9DQVIsICZyZXNwKTsNCj4gDQo+IFNhbWUgaGVyZSwgY2FuIHlvdSBjYWNo ZSB0aGUgdmFsdWUsIG9yIGRvZXMgdGhlIHJlZ2lzdGVyIGNvbnRhaW4NCj4gdm9sYXRpbGUgYml0 cyA/DQo+IA0KPiA+ICsJY2Ruc19taGRwX3JlZ193cml0ZShtaGRwLCBDRE5TX0RQVFhfQ0FSLA0K PiA+ICsJCQkgICAgcmVzcCAmIH4oQ0ROU19WSUZfQ0xLX0VOIHwNCj4gQ0ROU19WSUZfQ0xLX1JT VE4pKTsNCj4gPiArDQo+ID4gKwlpZiAobWhkcC0+b3BzICYmIG1oZHAtPm9wcy0+ZGlzYWJsZSkN Cj4gPiArCQltaGRwLT5vcHMtPmRpc2FibGUobWhkcCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0 YXRpYyB1MzIgZ2V0X3RyYWluaW5nX2ludGVydmFsX3VzKHN0cnVjdCBjZG5zX21oZHBfZGV2aWNl ICptaGRwLA0KPiA+ICsJCQkJICAgIHUzMiBpbnRlcnZhbCkNCj4gPiArew0KPiA+ICsJaWYgKGlu dGVydmFsID09IDApDQo+ID4gKwkJcmV0dXJuIDQwMDsNCj4gPiArCWlmIChpbnRlcnZhbCA8IDUp DQo+ID4gKwkJcmV0dXJuIDQwMDAgPDwgKGludGVydmFsIC0gMSk7DQo+ID4gKwlkZXZfZXJyKG1o ZHAtPmRldiwNCj4gPiArCQkid3JvbmcgdHJhaW5pbmcgaW50ZXJ2YWwgcmV0dXJuZWQgYnkgRFBD RDogJWRcbiIsIGludGVydmFsKTsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtzdGF0aWMgdm9pZCBtaGRwX2ZpbGxfc2lua19jYXBzKHN0cnVjdCBjZG5zX21oZHBfZGV2aWNl ICptaGRwLA0KPiA+ICsJCQkJdTggZHBjZFtEUF9SRUNFSVZFUl9DQVBfU0laRV0pDQo+ID4gK3sN Cj4gPiArCW1oZHAtPnNpbmsubGlua19yYXRlID0gbWhkcC0+bGluay5yYXRlOw0KPiA+ICsJbWhk cC0+c2luay5sYW5lc19jbnQgPSBtaGRwLT5saW5rLm51bV9sYW5lczsNCj4gPiArCW1oZHAtPnNp bmsuZW5oYW5jZWQgPSAhIShtaGRwLT5saW5rLmNhcGFiaWxpdGllcyAmDQo+ID4gKwkJCQkgRFBf TElOS19DQVBfRU5IQU5DRURfRlJBTUlORyk7DQo+ID4gKw0KPiA+ICsJLyogU2V0IFNTQyBzdXBw b3J0ICovDQo+ID4gKwltaGRwLT5zaW5rLnNzYyA9ICEhKGRwY2RbRFBfTUFYX0RPV05TUFJFQURd ICYNCj4gPiArCQkJCSAgRFBfTUFYX0RPV05TUFJFQURfMF81KTsNCj4gPiArDQo+ID4gKwkvKiBT ZXQgVFBTIHN1cHBvcnQgKi8NCj4gPiArCW1oZHAtPnNpbmsucGF0dGVybl9zdXBwID0gQ0ROU19T VVBQT1JUX1RQUygxKSB8DQo+IENETlNfU1VQUE9SVF9UUFMoMik7DQo+ID4gKwlpZiAoZHJtX2Rw X3RwczNfc3VwcG9ydGVkKGRwY2QpKQ0KPiA+ICsJCW1oZHAtPnNpbmsucGF0dGVybl9zdXBwIHw9 IENETlNfU1VQUE9SVF9UUFMoMyk7DQo+ID4gKwlpZiAoZHJtX2RwX3RwczRfc3VwcG9ydGVkKGRw Y2QpKQ0KPiA+ICsJCW1oZHAtPnNpbmsucGF0dGVybl9zdXBwIHw9IENETlNfU1VQUE9SVF9UUFMo NCk7DQo+ID4gKw0KPiA+ICsJLyogU2V0IGZhc3QgbGluayBzdXBwb3J0ICovDQo+ID4gKwltaGRw LT5zaW5rLmZhc3RfbGluayA9ICEhKGRwY2RbRFBfTUFYX0RPV05TUFJFQURdICYNCj4gPiArCQkJ CSAgRFBfTk9fQVVYX0hBTkRTSEFLRV9MSU5LX1RSQUlOSU5HKTsNCj4gPiArfQ0KPiA+ICsNCj4g PiArc3RhdGljIGludCBjZG5zX21oZHBfbGlua191cChzdHJ1Y3QgY2Ruc19taGRwX2RldmljZSAq bWhkcCkNCj4gPiArew0KPiA+ICsJdTMyIHJlc3A7DQo+ID4gKwl1OCBkcGNkW0RQX1JFQ0VJVkVS X0NBUF9TSVpFXSwgYW1wWzJdOw0KPiA+ICsJdTggZXh0X2NhcF9jaGsgPSAwOw0KPiA+ICsJdW5z aWduZWQgaW50IGFkZHI7DQo+ID4gKwlpbnQgZXJyOw0KPiA+ICsNCj4gPiArCWRybV9kcF9kcGNk X3JlYWRiKCZtaGRwLT5hdXgsDQo+IERQX1RSQUlOSU5HX0FVWF9SRF9JTlRFUlZBTCwNCj4gPiAr CQkJICAmZXh0X2NhcF9jaGspOw0KPiA+ICsNCj4gPiArCWlmIChleHRfY2FwX2NoayAmIERQX0VY VEVOREVEX1JFQ0VJVkVSX0NBUF9GSUVMRF9QUkVTRU5UKQ0KPiA+ICsJCWFkZHIgPSBEUF9EUDEz X0RQQ0RfUkVWOw0KPiA+ICsJZWxzZQ0KPiA+ICsJCWFkZHIgPSBEUF9EUENEX1JFVjsNCj4gPiAr DQo+ID4gKwllcnIgPSBkcm1fZHBfZHBjZF9yZWFkKCZtaGRwLT5hdXgsIGFkZHIsIGRwY2QsDQo+ IERQX1JFQ0VJVkVSX0NBUF9TSVpFKTsNCj4gPiArCWlmIChlcnIgPCAwKSB7DQo+ID4gKwkJZGV2 X2VycihtaGRwLT5kZXYsICJGYWlsZWQgdG8gcmVhZCByZWNlaXZlciBjYXBhYmlsaXRpZXNcbiIp Ow0KPiA+ICsJCXJldHVybiBlcnI7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJbWhkcC0+bGluay5y ZXZpc2lvbiA9IGRwY2RbMF07DQo+ID4gKwltaGRwLT5saW5rLnJhdGUgPSBkcm1fZHBfYndfY29k ZV90b19saW5rX3JhdGUoZHBjZFsxXSk7DQo+ID4gKwltaGRwLT5saW5rLm51bV9sYW5lcyA9IGRw Y2RbMl0gJiBEUF9NQVhfTEFORV9DT1VOVF9NQVNLOw0KPiA+ICsNCj4gPiArCWlmIChkcGNkWzJd ICYgRFBfRU5IQU5DRURfRlJBTUVfQ0FQKQ0KPiA+ICsJCW1oZHAtPmxpbmsuY2FwYWJpbGl0aWVz IHw9DQo+IERQX0xJTktfQ0FQX0VOSEFOQ0VEX0ZSQU1JTkc7DQo+ID4gKw0KPiA+ICsJZGV2X2Ri ZyhtaGRwLT5kZXYsICJTZXQgc2luayBkZXZpY2UgcG93ZXIgc3RhdGUgdmlhIERQQ0RcbiIpOw0K PiA+ICsJY2Ruc19taGRwX2xpbmtfcG93ZXJfdXAoJm1oZHAtPmF1eCwgJm1oZHAtPmxpbmspOw0K PiA+ICsJbWRlbGF5KDEwMCk7DQo+ID4gKw0KPiA+ICsJbWhkcF9maWxsX3NpbmtfY2FwcyhtaGRw LCBkcGNkKTsNCj4gPiArDQo+ID4gKwltaGRwLT5saW5rLnJhdGUgPSBtaGRwX21heF9saW5rX3Jh dGUobWhkcCk7DQo+ID4gKwltaGRwLT5saW5rLm51bV9sYW5lcyA9IG1oZHBfbWF4X251bV9sYW5l cyhtaGRwKTsNCj4gPiArDQo+ID4gKwkvKiBEaXNhYmxlIGZyYW1lciBmb3IgbGluayB0cmFpbmlu ZyAqLw0KPiA+ICsJY2Ruc19taGRwX3JlZ19yZWFkKG1oZHAsIENETlNfRFBfRlJBTUVSX0dMT0JB TF9DT05GSUcsDQo+ICZyZXNwKTsNCj4gPiArCXJlc3AgJj0gfkNETlNfRFBfRlJBTUVSX0VOOw0K PiA+ICsJY2Ruc19taGRwX3JlZ193cml0ZShtaGRwLCBDRE5TX0RQX0ZSQU1FUl9HTE9CQUxfQ09O RklHLA0KPiByZXNwKTsNCj4gPiArDQo+ID4gKwkvKiBTcHJlYWQgQU1QIGlmIHJlcXVpcmVkLCBl bmFibGUgOGIvMTBiIGNvZGluZyAqLw0KPiA+ICsJYW1wWzBdID0gbWhkcF9nZXRfc3NjX3N1cHBv cnRlZChtaGRwKSA/IERQX1NQUkVBRF9BTVBfMF81IDoNCj4gMDsNCj4gPiArCWFtcFsxXSA9IERQ X1NFVF9BTlNJXzhCMTBCOw0KPiA+ICsJZHJtX2RwX2RwY2Rfd3JpdGUoJm1oZHAtPmF1eCwgRFBf RE9XTlNQUkVBRF9DVFJMLCBhbXAsDQo+IDIpOw0KPiA+ICsNCj4gPiArCWlmIChtaGRwLT5ob3N0 LmZhc3RfbGluayAmIG1oZHAtPnNpbmsuZmFzdF9saW5rKSB7DQo+ID4gKwkJZGV2X2VycihtaGRw LT5kZXYsICJmYXN0bGluayBub3Qgc3VwcG9ydGVkXG4iKTsNCj4gPiArCQllcnIgPSAtRU5PVFNV UFA7DQo+ID4gKwkJZ290byBlcnJvcjsNCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJY29uc3QgdTMy IGludGVydmFsID0gZHBjZFtEUF9UUkFJTklOR19BVVhfUkRfSU5URVJWQUxdDQo+ICYNCj4gPiAr CQkJCSAgICAgRFBfVFJBSU5JTkdfQVVYX1JEX01BU0s7DQo+ID4gKwkJY29uc3QgdTMyIGludGVy dmFsX3VzID0gZ2V0X3RyYWluaW5nX2ludGVydmFsX3VzKG1oZHAsDQo+ID4gKwkJCQkJCQkJIGlu dGVydmFsKTsNCj4gPiArCQlpZiAoIWludGVydmFsX3VzIHx8DQo+ID4gKwkJICAgIG1oZHBfbGlu a190cmFpbmluZyhtaGRwLCBpbnRlcnZhbF91cykpIHsNCj4gPiArCQkJZGV2X2VycihtaGRwLT5k ZXYsICJMaW5rIHRyYWluaW5nIGZhaWxlZC4NCj4gRXhpdGluZy5cbiIpOw0KPiA+ICsJCQllcnIg PSAtRUlPOw0KPiA+ICsJCQlnb3RvIGVycm9yOw0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ ID4gKwltaGRwLT5saW5rX3VwID0gdHJ1ZTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiAr ZXJyb3I6DQo+ID4gKwlyZXR1cm4gZXJyOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICt1MzIgY2Ruc19t aGRwX2dldF9icHAoc3RydWN0IGNkbnNfbWhkcF9kaXNwbGF5X2ZtdCAqZm10KQ0KPiA+ICt7DQo+ ID4gKwl1MzIgYnBwOw0KPiA+ICsNCj4gPiArCWlmIChmbXQtPnlfb25seSkNCj4gPiArCQlyZXR1 cm4gZm10LT5icGM7DQo+ID4gKw0KPiA+ICsJc3dpdGNoIChmbXQtPmNvbG9yX2Zvcm1hdCkgew0K PiA+ICsJY2FzZSBEUk1fQ09MT1JfRk9STUFUX1JHQjQ0NDoNCj4gPiArCWNhc2UgRFJNX0NPTE9S X0ZPUk1BVF9ZQ1JDQjQ0NDoNCj4gPiArCQlicHAgPSBmbXQtPmJwYyAqIDM7DQo+ID4gKwkJYnJl YWs7DQo+ID4gKwljYXNlIERSTV9DT0xPUl9GT1JNQVRfWUNSQ0I0MjI6DQo+ID4gKwkJYnBwID0g Zm10LT5icGMgKiAyOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBEUk1fQ09MT1JfRk9STUFU X1lDUkNCNDIwOg0KPiA+ICsJCWJwcCA9IGZtdC0+YnBjICogMyAvIDI7DQo+ID4gKwkJYnJlYWs7 DQo+ID4gKwlkZWZhdWx0Og0KPiA+ICsJCWJwcCA9IGZtdC0+YnBjICogMzsNCj4gPiArCQlXQVJO X09OKDEpOw0KPiA+ICsJfQ0KPiA+ICsJcmV0dXJuIGJwcDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr c3RhdGljIGludCBjZG5zX21oZHBfc3N0X2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdl KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgY2Ruc19taGRwX2RldmljZSAqbWhkcCA9IGJyaWRnZV90 b19taGRwKGJyaWRnZSk7DQo+ID4gKwl1MzIgcmF0ZSwgdnMsIHZzX2YsIHJlcXVpcmVkX2JhbmR3 aWR0aCwgYXZhaWxhYmxlX2JhbmR3aWR0aDsNCj4gPiArCXUzMiB0dV9zaXplID0gMzAsIGxpbmVf dGhyZXNoMSwgbGluZV90aHJlc2gyLCBsaW5lX3RocmVzaCA9IDA7DQo+ID4gKwlzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSAqbW9kZTsNCj4gDQo+IFRoaXMgc2hvdWxkIGJlIGNvbnN0Lg0KPiANCj4g PiArCWludCBweGxjbG9jazsNCj4gPiArCXUzMiBicHAsIGJwYywgcHhsZm10Ow0KPiA+ICsNCj4g PiArCXB4bGZtdCA9IG1oZHAtPmRpc3BsYXlfZm10LmNvbG9yX2Zvcm1hdDsNCj4gPiArCWJwYyA9 IG1oZHAtPmRpc3BsYXlfZm10LmJwYzsNCj4gPiArDQo+ID4gKwltb2RlID0gJmJyaWRnZS0+ZW5j b2Rlci0+Y3J0Yy0+c3RhdGUtPm1vZGU7DQo+IA0KPiBZb3Ugc2hvdWxkbid0IHBva2UgZGlyZWN0 bHkgaW4gdGhlIENSVEMgc3RhdGUgbGlrZSB0aGlzLCBpdCdzIG9ubHkgZm9yDQo+IGxlZ2FjeSBo ZWxwZXJzLiBUaGUgcmlnaHQgd2F5LCBmcm9tIGEgS01TIGF0b21pYyBwb2ludCBvZiB2aWV3LCBp cyB0bw0KPiBpbXBsZW1lbnQgdGhlIGF0b21pYyB2ZXJzaW9uIG9mIHRoZSBicmlkZ2UgZW5hYmxl IGFuZCBkaXNhYmxlDQo+IG9wZXJhdGlvbnMsIGFuZCBkbw0KPiANCj4gCWNvbnN0IHN0cnVjdCBk cm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZQ0KPiAJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvcjsNCj4gCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsNCj4gDQo+IAljb25uZWN0b3IgPSBkcm1f YXRvbWljX2dldF9uZXdfY29ubmVjdG9yX2Zvcl9lbmNvZGVyKHN0YXRlLA0KPiAJCQkJCQkJICAg ICBicmlkZ2UtPmVuY29kZXIpOw0KPiAJY3J0YyA9IGRybV9hdG9taWNfZ2V0X25ld19jb25uZWN0 b3Jfc3RhdGUoc3RhdGUsIGNvbm5lY3RvciktPmNydGM7DQo+IAljcnRjX3N0YXRlID0gZHJtX2F0 b21pY19nZXRfbmV3X2NydGNfc3RhdGUoc3RhdGUsIGNydGMpOw0KPiAJbW9kZSA9ICZjcnRjX3N0 YXRlLT5hZGp1c3RlZF9tb2RlOw0KPiANCj4gQXMgeW91IG5lZWQgdGhlIG1vZGUgaW4gdHdvIGRp ZmZlcmVudCBsb2NhdGlvbnMsIGhlcmUgYW5kIGluDQo+IGNkbnNfbWhkcF9jb25maWd1cmVfdmlk ZW8oKSwgSSB3b3VsZCByZXRyaWV2ZSBpdCBpbiBjZG5zX21oZHBfZW5hYmxlKCkNCj4gYW5kIHBh c3MgaXQgdG8gY2Ruc19taGRwX2VuYWJsZSgpLg0KPiANCj4gPiArCXB4bGNsb2NrID0gbW9kZS0+ Y3J0Y19jbG9jazsNCj4gPiArDQo+ID4gKwltaGRwLT5zdHJlYW1faWQgPSAwOw0KPiA+ICsNCj4g PiArCXJhdGUgPSBtaGRwLT5saW5rLnJhdGUgLyAxMDAwOw0KPiA+ICsNCj4gPiArCWJwcCA9IGNk bnNfbWhkcF9nZXRfYnBwKCZtaGRwLT5kaXNwbGF5X2ZtdCk7DQo+ID4gKw0KPiA+ICsJaWYgKCFj ZG5zX21oZHBfYmFuZHdpZHRoX29rKG1oZHAsIG1vZGUsIG1oZHAtDQo+ID5saW5rLm51bV9sYW5l cywNCj4gPiArCQkJCSAgICBtaGRwLT5saW5rLnJhdGUpKSB7DQo+ID4gKwkJZGV2X2VycihtaGRw LT5kZXYsICIlczogTm90IGVub3VnaCBCVyBmb3IgJXMgKCV1IGxhbmVzIGF0DQo+ICV1IE1icHMp XG4iLA0KPiA+ICsJCQlfX2Z1bmNfXywgbW9kZS0+bmFtZSwgbWhkcC0+bGluay5udW1fbGFuZXMs DQo+ID4gKwkJCW1oZHAtPmxpbmsucmF0ZSAvIDEwMCk7DQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7 DQo+ID4gKwl9DQo+IA0KPiBUaGlzIHNob3VsZCBiZSBjYXVnaHQgYXQgYXRvbWljX2NoZWNrIHRp bWUuIFRoZSBlbmFibGUgb3BlcmF0aW9uIG11c3QNCj4gbm90IGZhaWwgZXhjZXB0IGluIHRoZSBj YXNlIG9mIGEgaGFyZHdhcmUgZmFpbHVyZS4NCj4gDQo+ID4gKw0KPiA+ICsJLyogZmluZCBvcHRp bWFsIHR1X3NpemUgKi8NCj4gPiArCXJlcXVpcmVkX2JhbmR3aWR0aCA9IHB4bGNsb2NrICogYnBw IC8gODsNCj4gPiArCWF2YWlsYWJsZV9iYW5kd2lkdGggPSBtaGRwLT5saW5rLm51bV9sYW5lcyAq IHJhdGU7DQo+ID4gKwlkbyB7DQo+ID4gKwkJdHVfc2l6ZSArPSAyOw0KPiA+ICsNCj4gPiArCQl2 c19mID0gdHVfc2l6ZSAqIHJlcXVpcmVkX2JhbmR3aWR0aCAvIGF2YWlsYWJsZV9iYW5kd2lkdGg7 DQo+ID4gKwkJdnMgPSB2c19mIC8gMTAwMDsNCj4gPiArCQl2c19mID0gdnNfZiAlIDEwMDA7DQo+ ID4gKwkJLyogRG93bnNwcmVhZGluZyBpcyB1bnVzZWQgY3VycmVudGx5ICovDQo+ID4gKwl9IHdo aWxlICgodnMgPT0gMSB8fCAoKHZzX2YgPiA4NTAgfHwgdnNfZiA8IDEwMCkgJiYgdnNfZiAhPSAw KSB8fA0KPiA+ICsJCSAgdHVfc2l6ZSAtIHZzIDwgMikgJiYgdHVfc2l6ZSA8IDY0KTsNCj4gPiAr DQo+ID4gKwlpZiAodnMgPiA2NCkgew0KPiA+ICsJCWRldl9lcnIobWhkcC0+ZGV2LA0KPiA+ICsJ CQkiJXM6IE5vIHNwYWNlIGZvciBmcmFtaW5nICVzICgldSBsYW5lcyBhdCAldQ0KPiBNYnBzKVxu IiwNCj4gPiArCQkJX19mdW5jX18sIG1vZGUtPm5hbWUsIG1oZHAtPmxpbmsubnVtX2xhbmVzLA0K PiA+ICsJCQltaGRwLT5saW5rLnJhdGUgLyAxMDApOw0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0K PiA+ICsJfQ0KPiANCj4gU2FtZSBoZXJlLiBZb3UgY2FuIGRvIGFsbCB0aGVzZSBjb21wdXRhdGlv biBpbiB0aGUgLmF0b21pY19jaGVjaygpDQo+IGhhbmRsZXIsIHN1YmNsYXNzIHRoZSBicmlkZ2Ug c3RhdGUsIGFuZCBjYWNoZSB0aGUgdmFsdWVzIGluIHRoZQ0KPiBzdWJjbGFzc2VkIHN0YXRlLg0K PiANCj4gQWxsIHZhbGlkYXRpb24gY2hlY2tzIHRoYXQgYXJlIG5vdCByZWxhdGVkIHRvIGhhcmR3 YXJlIG9wZXJhdGlvbnMgbXVzdA0KPiBiZSBwZXJmb3JtZWQgYXQgYXRvbWljIGNoZWNrIHRpbWUu DQo+IA0KPiA+ICsNCj4gPiArCWNkbnNfbWhkcF9yZWdfd3JpdGUobWhkcCwgQ0ROU19EUF9GUkFN RVJfVFUsDQo+ID4gKwkJCSAgICBDRE5TX0RQX0ZSQU1FUl9UVV9WUyh2cykgfA0KPiA+ICsJCQkg ICAgQ0ROU19EUF9GUkFNRVJfVFVfU0laRSh0dV9zaXplKSB8DQo+ID4gKwkJCSAgICBDRE5TX0RQ X0ZSQU1FUl9UVV9DTlRfUlNUX0VOKTsNCj4gPiArDQo+ID4gKwlsaW5lX3RocmVzaDEgPSAoKHZz ICsgMSkgPDwgNSkgKiA4IC8gYnBwOw0KPiA+ICsJbGluZV90aHJlc2gyID0gKHB4bGNsb2NrIDw8 IDUpIC8gMTAwMCAvIHJhdGUgKiAodnMgKyAxKSAtICgxIDw8IDUpOw0KPiA+ICsJbGluZV90aHJl c2ggPSBsaW5lX3RocmVzaDEgLSBsaW5lX3RocmVzaDIgLyBtaGRwLT5saW5rLm51bV9sYW5lczsN Cj4gPiArCWxpbmVfdGhyZXNoID0gKGxpbmVfdGhyZXNoID4+IDUpICsgMjsNCj4gPiArCWNkbnNf bWhkcF9yZWdfd3JpdGUobWhkcCwgQ0ROU19EUF9MSU5FX1RIUkVTSCgwKSwNCj4gPiArCQkJICAg IGxpbmVfdGhyZXNoICYgR0VOTUFTSyg1LCAwKSk7DQo+ID4gKw0KPiA+ICsJY2Ruc19taGRwX3Jl Z193cml0ZShtaGRwLCBDRE5TX0RQX1NUUkVBTV9DT05GSUdfMigwKSwNCj4gPiArCQkJICAgIENE TlNfRFBfU0MyX1RVX1ZTX0RJRkYoKHR1X3NpemUgLSB2cyA+IDMpID8NCj4gPiArCQkJCQkJICAg MCA6IHR1X3NpemUgLSB2cykpOw0KPiA+ICsNCj4gPiArCWNkbnNfbWhkcF9jb25maWd1cmVfdmlk ZW8oYnJpZGdlKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr dm9pZCBjZG5zX21oZHBfY29uZmlndXJlX3ZpZGVvKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2Up DQo+ID4gK3sNCj4gPiArCXN0cnVjdCBjZG5zX21oZHBfZGV2aWNlICptaGRwID0gYnJpZGdlX3Rv X21oZHAoYnJpZGdlKTsNCj4gDQo+IFlvdSBjYW4gcGFzcyBhIHN0cnVjdCBjZG5zX21oZHBfZGV2 aWNlIHBvaW50ZXIgZGlyZWN0bHkgdG8gdGhpcw0KPiBmdW5jdGlvbi4NCj4gDQo+ID4gKwl1bnNp Z25lZCBpbnQgZHBfZnJhbWVyX3NwID0gMCwgbXNhX2hvcml6b250YWxfMSwNCj4gPiArCQltc2Ff dmVydGljYWxfMSwgYm5kX2hzeW5jMnZzeW5jLCBoc3luYzJ2c3luY19wb2xfY3RybCwNCj4gPiAr CQltaXNjMCA9IDAsIG1pc2MxID0gMCwgcHhsX3JlcHIsDQo+ID4gKwkJZnJvbnRfcG9yY2gsIGJh Y2tfcG9yY2gsIG1zYV9oMCwgbXNhX3YwLCBoc3luYywgdnN5bmMsDQo+ID4gKwkJZHBfdmVydGlj YWxfMTsNCj4gPiArCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOw0KPiA+ICsJdTMyIGJw cCwgYnBjLCBweGxmbXQ7DQo+ID4gKwl1MzIgdG1wOw0KPiANCj4gTm8gdG1wIGhlcmUgZWl0aGVy Lg0KPiANCj4gPiArCXU4IHN0cmVhbV9pZCA9IG1oZHAtPnN0cmVhbV9pZDsNCj4gPiArDQo+ID4g Kwltb2RlID0gJmJyaWRnZS0+ZW5jb2Rlci0+Y3J0Yy0+c3RhdGUtPm1vZGU7DQo+ID4gKw0KPiA+ ICsJcHhsZm10ID0gbWhkcC0+ZGlzcGxheV9mbXQuY29sb3JfZm9ybWF0Ow0KPiA+ICsJYnBjID0g bWhkcC0+ZGlzcGxheV9mbXQuYnBjOw0KPiA+ICsNCj4gPiArCS8qIElmIFlDQkNSIHN1cHBvcnRl ZCBhbmQgc3RyZWFtIG5vdCBTRCwgdXNlIElUVTcwOQ0KPiA+ICsJICogTmVlZCB0byBoYW5kbGUg SVRVIHZlcnNpb24gd2l0aCBZQ0JDUjQyMCB3aGVuIHN1cHBvcnRlZA0KPiA+ICsJICovDQo+ID4g KwlpZiAoKHB4bGZtdCA9PSBEUk1fQ09MT1JfRk9STUFUX1lDUkNCNDQ0IHx8DQo+ID4gKwkgICAg IHB4bGZtdCA9PSBEUk1fQ09MT1JfRk9STUFUX1lDUkNCNDIyKSAmJiBtb2RlLQ0KPiA+Y3J0Y192 ZGlzcGxheSA+PSA3MjApDQo+ID4gKwkJbWlzYzAgPSBEUF9ZQ0JDUl9DT0VGRklDSUVOVFNfSVRV NzA5Ow0KPiA+ICsNCj4gPiArCWJwcCA9IGNkbnNfbWhkcF9nZXRfYnBwKCZtaGRwLT5kaXNwbGF5 X2ZtdCk7DQo+ID4gKw0KPiA+ICsJc3dpdGNoIChweGxmbXQpIHsNCj4gPiArCWNhc2UgRFJNX0NP TE9SX0ZPUk1BVF9SR0I0NDQ6DQo+ID4gKwkJcHhsX3JlcHIgPSBDRE5TX0RQX0ZSQU1FUl9SR0Ig PDwNCj4gQ0ROU19EUF9GUkFNRVJfUFhMX0ZPUk1BVDsNCj4gPiArCQltaXNjMCB8PSBEUF9DT0xP Ul9GT1JNQVRfUkdCOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBEUk1fQ09MT1JfRk9STUFU X1lDUkNCNDQ0Og0KPiA+ICsJCXB4bF9yZXByID0gQ0ROU19EUF9GUkFNRVJfWUNCQ1I0NDQgPDwN Cj4gQ0ROU19EUF9GUkFNRVJfUFhMX0ZPUk1BVDsNCj4gPiArCQltaXNjMCB8PSBEUF9DT0xPUl9G T1JNQVRfWUNiQ3I0NDQgfA0KPiBEUF9URVNUX0RZTkFNSUNfUkFOR0VfQ0VBOw0KPiA+ICsJCWJy ZWFrOw0KPiA+ICsJY2FzZSBEUk1fQ09MT1JfRk9STUFUX1lDUkNCNDIyOg0KPiA+ICsJCXB4bF9y ZXByID0gQ0ROU19EUF9GUkFNRVJfWUNCQ1I0MjIgPDwNCj4gQ0ROU19EUF9GUkFNRVJfUFhMX0ZP Uk1BVDsNCj4gPiArCQltaXNjMCB8PSBEUF9DT0xPUl9GT1JNQVRfWUNiQ3I0MjIgfA0KPiBEUF9U RVNUX0RZTkFNSUNfUkFOR0VfQ0VBOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBEUk1fQ09M T1JfRk9STUFUX1lDUkNCNDIwOg0KPiA+ICsJCXB4bF9yZXByID0gQ0ROU19EUF9GUkFNRVJfWUNC Q1I0MjAgPDwNCj4gQ0ROU19EUF9GUkFNRVJfUFhMX0ZPUk1BVDsNCj4gPiArCQlicmVhazsNCj4g PiArCWRlZmF1bHQ6DQo+ID4gKwkJcHhsX3JlcHIgPSBDRE5TX0RQX0ZSQU1FUl9ZX09OTFkgPDwN Cj4gQ0ROU19EUF9GUkFNRVJfUFhMX0ZPUk1BVDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlzd2l0 Y2ggKGJwYykgew0KPiA+ICsJY2FzZSA2Og0KPiA+ICsJCW1pc2MwIHw9IERQX1RFU1RfQklUX0RF UFRIXzY7DQo+ID4gKwkJcHhsX3JlcHIgfD0gQ0ROU19EUF9GUkFNRVJfNl9CUEM7DQo+ID4gKwkJ YnJlYWs7DQo+ID4gKwljYXNlIDg6DQo+ID4gKwkJbWlzYzAgfD0gRFBfVEVTVF9CSVRfREVQVEhf ODsNCj4gPiArCQlweGxfcmVwciB8PSBDRE5TX0RQX0ZSQU1FUl84X0JQQzsNCj4gPiArCQlicmVh azsNCj4gPiArCWNhc2UgMTA6DQo+ID4gKwkJbWlzYzAgfD0gRFBfVEVTVF9CSVRfREVQVEhfMTA7 DQo+ID4gKwkJcHhsX3JlcHIgfD0gQ0ROU19EUF9GUkFNRVJfMTBfQlBDOw0KPiA+ICsJCWJyZWFr Ow0KPiA+ICsJY2FzZSAxMjoNCj4gPiArCQltaXNjMCB8PSBEUF9URVNUX0JJVF9ERVBUSF8xMjsN Cj4gPiArCQlweGxfcmVwciB8PSBDRE5TX0RQX0ZSQU1FUl8xMl9CUEM7DQo+ID4gKwkJYnJlYWs7 DQo+ID4gKwljYXNlIDE2Og0KPiA+ICsJCW1pc2MwIHw9IERQX1RFU1RfQklUX0RFUFRIXzE2Ow0K PiA+ICsJCXB4bF9yZXByIHw9IENETlNfRFBfRlJBTUVSXzE2X0JQQzsNCj4gPiArCQlicmVhazsN Cj4gPiArCX0NCj4gPiArDQo+ID4gKwlibmRfaHN5bmMydnN5bmMgPSBDRE5TX0lQX0JZUEFTU19W X0lOVEVSRkFDRTsNCj4gPiArCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJM QUNFKQ0KPiA+ICsJCWJuZF9oc3luYzJ2c3luYyB8PSBDRE5TX0lQX0RFVF9JTlRFUkxBQ0VfRk9S TUFUOw0KPiA+ICsNCj4gPiArCWNkbnNfbWhkcF9yZWdfd3JpdGUobWhkcCwgQ0ROU19CTkRfSFNZ TkMyVlNZTkMoc3RyZWFtX2lkKSwNCj4gPiArCQkJICAgIGJuZF9oc3luYzJ2c3luYyk7DQo+ID4g Kw0KPiA+ICsJaHN5bmMydnN5bmNfcG9sX2N0cmwgPSAwOw0KPiA+ICsJaWYgKG1vZGUtPmZsYWdz ICYgRFJNX01PREVfRkxBR19OSFNZTkMpDQo+ID4gKwkJaHN5bmMydnN5bmNfcG9sX2N0cmwgfD0N Cj4gQ0ROU19IMlZfSFNZTkNfUE9MX0FDVElWRV9MT1c7DQo+ID4gKwlpZiAobW9kZS0+ZmxhZ3Mg JiBEUk1fTU9ERV9GTEFHX05WU1lOQykNCj4gPiArCQloc3luYzJ2c3luY19wb2xfY3RybCB8PQ0K PiBDRE5TX0gyVl9WU1lOQ19QT0xfQUNUSVZFX0xPVzsNCj4gPiArCWNkbnNfbWhkcF9yZWdfd3Jp dGUobWhkcCwNCj4gQ0ROU19IU1lOQzJWU1lOQ19QT0xfQ1RSTChzdHJlYW1faWQpLA0KPiA+ICsJ CQkgICAgaHN5bmMydnN5bmNfcG9sX2N0cmwpOw0KPiA+ICsNCj4gPiArCWNkbnNfbWhkcF9yZWdf d3JpdGUobWhkcCwNCj4gQ0ROU19EUF9GUkFNRVJfUFhMX1JFUFIoc3RyZWFtX2lkKSwgcHhsX3Jl cHIpOw0KPiA+ICsNCj4gPiArCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJM QUNFKQ0KPiA+ICsJCWRwX2ZyYW1lcl9zcCB8PSBDRE5TX0RQX0ZSQU1FUl9JTlRFUkxBQ0U7DQo+ ID4gKwlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX05IU1lOQykNCj4gPiArCQlkcF9m cmFtZXJfc3AgfD0gQ0ROU19EUF9GUkFNRVJfSFNZTkNfUE9MX0xPVzsNCj4gPiArCWlmIChtb2Rl LT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTlZTWU5DKQ0KPiA+ICsJCWRwX2ZyYW1lcl9zcCB8PSBD RE5TX0RQX0ZSQU1FUl9WU1lOQ19QT0xfTE9XOw0KPiA+ICsJY2Ruc19taGRwX3JlZ193cml0ZSht aGRwLCBDRE5TX0RQX0ZSQU1FUl9TUChzdHJlYW1faWQpLA0KPiBkcF9mcmFtZXJfc3ApOw0KPiA+ ICsNCj4gPiArCWZyb250X3BvcmNoID0gbW9kZS0+Y3J0Y19oc3luY19zdGFydCAtIG1vZGUtPmNy dGNfaGRpc3BsYXk7DQo+ID4gKwliYWNrX3BvcmNoID0gbW9kZS0+Y3J0Y19odG90YWwgLSBtb2Rl LT5jcnRjX2hzeW5jX2VuZDsNCj4gPiArCWNkbnNfbWhkcF9yZWdfd3JpdGUobWhkcCwNCj4gQ0RO U19EUF9GUk9OVF9CQUNLX1BPUkNIKHN0cmVhbV9pZCksDQo+ID4gKwkJCSAgICBDRE5TX0RQX0ZS T05UX1BPUkNIKGZyb250X3BvcmNoKSB8DQo+ID4gKwkJCSAgICBDRE5TX0RQX0JBQ0tfUE9SQ0go YmFja19wb3JjaCkpOw0KPiA+ICsNCj4gPiArCWNkbnNfbWhkcF9yZWdfd3JpdGUobWhkcCwgQ0RO U19EUF9CWVRFX0NPVU5UKHN0cmVhbV9pZCksDQo+ID4gKwkJCSAgICBtb2RlLT5jcnRjX2hkaXNw bGF5ICogYnBwIC8gOCk7DQo+ID4gKw0KPiA+ICsJbXNhX2gwID0gbW9kZS0+Y3J0Y19odG90YWwg LSBtb2RlLT5jcnRjX2hzeW5jX3N0YXJ0Ow0KPiA+ICsJY2Ruc19taGRwX3JlZ193cml0ZShtaGRw LA0KPiBDRE5TX0RQX01TQV9IT1JJWk9OVEFMXzAoc3RyZWFtX2lkKSwNCj4gPiArCQkJICAgIENE TlNfRFBfTVNBSDBfSF9UT1RBTChtb2RlLT5jcnRjX2h0b3RhbCkgfA0KPiA+ICsJCQkgICAgQ0RO U19EUF9NU0FIMF9IU1lOQ19TVEFSVChtc2FfaDApKTsNCj4gPiArDQo+ID4gKwloc3luYyA9IG1v ZGUtPmNydGNfaHN5bmNfZW5kIC0gbW9kZS0+Y3J0Y19oc3luY19zdGFydDsNCj4gPiArCW1zYV9o b3Jpem9udGFsXzEgPSBDRE5TX0RQX01TQUgxX0hTWU5DX1dJRFRIKGhzeW5jKSB8DQo+ID4gKwkJ CSAgIENETlNfRFBfTVNBSDFfSERJU1BfV0lEVEgobW9kZS0NCj4gPmNydGNfaGRpc3BsYXkpOw0K PiA+ICsJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OSFNZTkMpDQo+ID4gKwkJbXNh X2hvcml6b250YWxfMSB8PSBDRE5TX0RQX01TQUgxX0hTWU5DX1BPTF9MT1c7DQo+ID4gKwljZG5z X21oZHBfcmVnX3dyaXRlKG1oZHAsDQo+IENETlNfRFBfTVNBX0hPUklaT05UQUxfMShzdHJlYW1f aWQpLA0KPiA+ICsJCQkgICAgbXNhX2hvcml6b250YWxfMSk7DQo+ID4gKw0KPiA+ICsJbXNhX3Yw ID0gbW9kZS0+Y3J0Y192dG90YWwgLSBtb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0Ow0KPiA+ICsJY2Ru c19taGRwX3JlZ193cml0ZShtaGRwLA0KPiBDRE5TX0RQX01TQV9WRVJUSUNBTF8wKHN0cmVhbV9p ZCksDQo+ID4gKwkJCSAgICBDRE5TX0RQX01TQVYwX1ZfVE9UQUwobW9kZS0+Y3J0Y192dG90YWwp IHwNCj4gPiArCQkJICAgIENETlNfRFBfTVNBVjBfVlNZTkNfU1RBUlQobXNhX3YwKSk7DQo+ID4g Kw0KPiA+ICsJdnN5bmMgPSBtb2RlLT5jcnRjX3ZzeW5jX2VuZCAtIG1vZGUtPmNydGNfdnN5bmNf c3RhcnQ7DQo+ID4gKwltc2FfdmVydGljYWxfMSA9IENETlNfRFBfTVNBVjFfVlNZTkNfV0lEVEgo dnN5bmMpIHwNCj4gPiArCQkJIENETlNfRFBfTVNBVjFfVkRJU1BfV0lEVEgobW9kZS0NCj4gPmNy dGNfdmRpc3BsYXkpOw0KPiA+ICsJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OVlNZ TkMpDQo+ID4gKwkJbXNhX3ZlcnRpY2FsXzEgfD0gQ0ROU19EUF9NU0FWMV9WU1lOQ19QT0xfTE9X Ow0KPiA+ICsJY2Ruc19taGRwX3JlZ193cml0ZShtaGRwLA0KPiBDRE5TX0RQX01TQV9WRVJUSUNB TF8xKHN0cmVhbV9pZCksDQo+ID4gKwkJCSAgICBtc2FfdmVydGljYWxfMSk7DQo+ID4gKw0KPiA+ ICsJaWYgKChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKSAmJg0KPiA+ICsJ ICAgIG1vZGUtPmNydGNfdnRvdGFsICUgMiA9PSAwKQ0KPiA+ICsJCW1pc2MxID0gRFBfVEVTVF9J TlRFUkxBQ0VEOw0KPiA+ICsJaWYgKG1oZHAtPmRpc3BsYXlfZm10Lnlfb25seSkNCj4gPiArCQlt aXNjMSB8PSBDRE5TX0RQX1RFU1RfQ09MT1JfRk9STUFUX1JBV19ZX09OTFk7DQo+ID4gKwkvKiBV c2UgVlNDIFNEUCBmb3IgWTQyMCAqLw0KPiA+ICsJaWYgKHB4bGZtdCA9PSBEUk1fQ09MT1JfRk9S TUFUX1lDUkNCNDIwKQ0KPiA+ICsJCW1pc2MxID0gQ0ROU19EUF9URVNUX1ZTQ19TRFA7DQo+ID4g Kw0KPiA+ICsJY2Ruc19taGRwX3JlZ193cml0ZShtaGRwLCBDRE5TX0RQX01TQV9NSVNDKHN0cmVh bV9pZCksDQo+ID4gKwkJCSAgICBtaXNjMCB8IChtaXNjMSA8PCA4KSk7DQo+ID4gKw0KPiA+ICsJ Y2Ruc19taGRwX3JlZ193cml0ZShtaGRwLCBDRE5TX0RQX0hPUklaT05UQUwoc3RyZWFtX2lkKSwN Cj4gPiArCQkJICAgIENETlNfRFBfSF9IU1lOQ19XSURUSChoc3luYykgfA0KPiA+ICsJCQkgICAg Q0ROU19EUF9IX0hfVE9UQUwobW9kZS0+Y3J0Y19oZGlzcGxheSkpOw0KPiA+ICsNCj4gPiArCWNk bnNfbWhkcF9yZWdfd3JpdGUobWhkcCwgQ0ROU19EUF9WRVJUSUNBTF8wKHN0cmVhbV9pZCksDQo+ ID4gKwkJCSAgICBDRE5TX0RQX1YwX1ZIRUlHSFQobW9kZS0+Y3J0Y192ZGlzcGxheSkgfA0KPiA+ ICsJCQkgICAgQ0ROU19EUF9WMF9WU1RBUlQobXNhX3YwKSk7DQo+ID4gKw0KPiA+ICsJZHBfdmVy dGljYWxfMSA9IENETlNfRFBfVjFfVlRPVEFMKG1vZGUtPmNydGNfdnRvdGFsKTsNCj4gPiArCWlm ICgobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkgJiYNCj4gPiArCSAgICBt b2RlLT5jcnRjX3Z0b3RhbCAlIDIgPT0gMCkNCj4gPiArCQlkcF92ZXJ0aWNhbF8xIHw9IENETlNf RFBfVjFfVlRPVEFMX0VWRU47DQo+ID4gKw0KPiA+ICsJY2Ruc19taGRwX3JlZ193cml0ZShtaGRw LCBDRE5TX0RQX1ZFUlRJQ0FMXzEoc3RyZWFtX2lkKSwNCj4gZHBfdmVydGljYWxfMSk7DQo+ID4g Kw0KPiA+ICsJY2Ruc19taGRwX3JlZ193cml0ZV9iaXQobWhkcCwgQ0ROU19EUF9WQl9JRChzdHJl YW1faWQpLCAyLCAxLA0KPiA+ICsJCQkJKG1vZGUtPmZsYWdzICYNCj4gRFJNX01PREVfRkxBR19J TlRFUkxBQ0UpID8NCj4gPiArCQkJCUNETlNfRFBfVkJfSURfSU5URVJMQUNFRCA6IDApOw0KPiA+ ICsNCj4gPiArCWNkbnNfbWhkcF9yZWdfcmVhZChtaGRwLCBDRE5TX0RQX0ZSQU1FUl9HTE9CQUxf Q09ORklHLA0KPiAmdG1wKTsNCj4gPiArCXRtcCB8PSBDRE5TX0RQX0ZSQU1FUl9FTjsNCj4gPiAr CXRtcCAmPSB+Q0ROU19EUF9OT19WSURFT19NT0RFOw0KPiA+ICsJY2Ruc19taGRwX3JlZ193cml0 ZShtaGRwLCBDRE5TX0RQX0ZSQU1FUl9HTE9CQUxfQ09ORklHLA0KPiB0bXApOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICt2b2lkIGNkbnNfbWhkcF9lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRn ZSkNCj4gPiArew0KPiA+ICsJc3RydWN0IGNkbnNfbWhkcF9kZXZpY2UgKm1oZHAgPSBicmlkZ2Vf dG9fbWhkcChicmlkZ2UpOw0KPiA+ICsJdTMyIHJlc3A7DQo+ID4gKw0KPiA+ICsJZGV2X2RiZyht aGRwLT5kZXYsICJicmlkZ2UgZW5hYmxlXG4iKTsNCj4gPiArDQo+ID4gKwlpZiAobWhkcC0+b3Bz ICYmIG1oZHAtPm9wcy0+ZW5hYmxlKQ0KPiA+ICsJCW1oZHAtPm9wcy0+ZW5hYmxlKG1oZHApOw0K PiA+ICsNCj4gPiArCS8qIEVuYWJsZSBWSUYgY2xvY2sgZm9yIHN0cmVhbSAwICovDQo+ID4gKwlj ZG5zX21oZHBfcmVnX3JlYWQobWhkcCwgQ0ROU19EUFRYX0NBUiwgJnJlc3ApOw0KPiA+ICsJY2Ru c19taGRwX3JlZ193cml0ZShtaGRwLCBDRE5TX0RQVFhfQ0FSLA0KPiA+ICsJCQkgICAgcmVzcCB8 IENETlNfVklGX0NMS19FTiB8IENETlNfVklGX0NMS19SU1ROKTsNCj4gPiArDQo+ID4gKwlpZiAo IW1oZHAtPmxpbmtfdXApDQo+ID4gKwkJY2Ruc19taGRwX2xpbmtfdXAobWhkcCk7DQo+ID4gKw0K PiA+ICsJY2Ruc19taGRwX3NzdF9lbmFibGUoYnJpZGdlKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr c3RhdGljIHZvaWQgY2Ruc19taGRwX2RldGFjaChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQ0K PiA+ICt7DQo+ID4gKwlzdHJ1Y3QgY2Ruc19taGRwX2RldmljZSAqbWhkcCA9IGJyaWRnZV90b19t aGRwKGJyaWRnZSk7DQo+ID4gKw0KPiA+ICsJZGV2X2RiZyhtaGRwLT5kZXYsICIlc1xuIiwgX19m dW5jX18pOw0KPiA+ICsNCj4gPiArCXNwaW5fbG9jaygmbWhkcC0+c3RhcnRfbG9jayk7DQo+ID4g Kw0KPiA+ICsJbWhkcC0+YnJpZGdlX2F0dGFjaGVkID0gZmFsc2U7DQo+ID4gKw0KPiA+ICsJc3Bp bl91bmxvY2soJm1oZHAtPnN0YXJ0X2xvY2spOw0KPiA+ICsNCj4gPiArCXdyaXRlbCh+MCwgbWhk cC0+cmVncyArIENETlNfQVBCX0lOVF9NQVNLKTsNCj4gPiArCXdyaXRlbCh+MCwgbWhkcC0+cmVn cyArIENETlNfTUJfSU5UX01BU0spOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qg c3RydWN0IGRybV9icmlkZ2VfZnVuY3MgY2Ruc19taGRwX2JyaWRnZV9mdW5jcyA9IHsNCj4gPiAr CS5lbmFibGUgPSBjZG5zX21oZHBfZW5hYmxlLA0KPiA+ICsJLmRpc2FibGUgPSBjZG5zX21oZHBf ZGlzYWJsZSwNCj4gPiArCS5hdHRhY2ggPSBjZG5zX21oZHBfYXR0YWNoLA0KPiA+ICsJLmRldGFj aCA9IGNkbnNfbWhkcF9kZXRhY2gsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG1o ZHBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gPiArew0KPiA+ICsJY29u c3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7DQo+ID4gKwlzdHJ1Y3QgcmVzb3VyY2UgKnJl Z3M7DQo+ID4gKwlzdHJ1Y3QgY2Ruc19taGRwX2RldmljZSAqbWhkcDsNCj4gPiArCXN0cnVjdCBj bGsgKmNsazsNCj4gPiArCWludCByZXQ7DQo+ID4gKwl1bnNpZ25lZCBsb25nIHJhdGU7DQo+ID4g KwlpbnQgaXJxOw0KPiA+ICsJdTMyIGxhbmVzX3Byb3A7DQo+ID4gKwl1bnNpZ25lZCBpbnQgbGlu a19yYXRlOw0KPiA+ICsNCj4gPiArCW1oZHAgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6 ZW9mKHN0cnVjdCBjZG5zX21oZHBfZGV2aWNlKSwNCj4gDQo+IHNpemVvZigqbWhkcCkNCj4gDQo+ ID4gKwkJCSAgICBHRlBfS0VSTkVMKTsNCj4gPiArCWlmICghbWhkcCkNCj4gPiArCQlyZXR1cm4g LUVOT01FTTsNCj4gPiArDQo+ID4gKwljbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgTlVM TCk7DQo+ID4gKwlpZiAoSVNfRVJSKGNsaykpIHsNCj4gPiArCQlkZXZfZXJyKCZwZGV2LT5kZXYs ICJjb3VsZG4ndCBnZXQgY2xrOiAlbGRcbiIsIFBUUl9FUlIoY2xrKSk7DQo+ID4gKwkJcmV0dXJu IFBUUl9FUlIoY2xrKTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwltaGRwLT5jbGsgPSBjbGs7DQo+ ID4gKwltaGRwLT5kZXYgPSAmcGRldi0+ZGV2Ow0KPiA+ICsJbWhkcC0+Y29ubl9idXNfZmxhZ3Nf ZGVmYXVsdHMgPSBEUk1fQlVTX0ZMQUdfREVfSElHSDsNCj4gDQo+IFRoaXMgaXMgc2V0IGhlcmUg YW5kIG5vd2hlcmUgZWxzZS4gSG93IGFib3V0IGhhcmRjb2RpbmcNCj4gRFJNX0JVU19GTEFHX0RF X0hJR0ggaW4gdGhlIGxvY2F0aW9uIHdoZXJlIHRoaXMgZmllbGQgaXMgdXNlZCwgYW5kDQo+IGRy b3BwaW5nIHRoZSBjb25uX2J1c19mbGFnc19kZWZhdWx0cyBmb3Igbm93ID8NCj4gDQo+ID4gKwlt dXRleF9pbml0KCZtaGRwLT5tYm94X211dGV4KTsNCj4gPiArCXNwaW5fbG9ja19pbml0KCZtaGRw LT5zdGFydF9sb2NrKTsNCj4gPiArCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBtaGRwKTsN Cj4gPiArDQo+ID4gKwlkcm1fZHBfYXV4X2luaXQoJm1oZHAtPmF1eCk7DQo+ID4gKwltaGRwLT5h dXguZGV2ID0gJnBkZXYtPmRldjsNCj4gPiArCW1oZHAtPmF1eC50cmFuc2ZlciA9IG1oZHBfdHJh bnNmZXI7DQo+ID4gKw0KPiA+ICsJcmVncyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJ T1JFU09VUkNFX01FTSwgMCk7DQo+ID4gKwltaGRwLT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291 cmNlKCZwZGV2LT5kZXYsIHJlZ3MpOw0KPiANCj4gWW91IGNhbiB1c2UNCj4gDQo+IAltaGRwLT5y ZWdzID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIDApOw0KPiAN Cj4gPiArCWlmIChJU19FUlIobWhkcC0+cmVncykpDQo+ID4gKwkJcmV0dXJuIFBUUl9FUlIobWhk cC0+cmVncyk7DQo+ID4gKw0KPiA+ICsJbWhkcC0+cGh5ID0gZGV2bV9vZl9waHlfZ2V0X2J5X2lu ZGV4KCZwZGV2LT5kZXYsIHBkZXYtDQo+ID5kZXYub2Zfbm9kZSwgMCk7DQo+ID4gKwlpZiAoSVNf RVJSKG1oZHAtPnBoeSkpIHsNCj4gPiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBQSFkgY29u ZmlndXJlZFxuIik7DQo+ID4gKwkJcmV0dXJuIFBUUl9FUlIobWhkcC0+cGh5KTsNCj4gPiArCX0N Cj4gPiArDQo+ID4gKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBtaGRwKTsNCj4gPiArDQo+ ID4gKwljbGtfcHJlcGFyZV9lbmFibGUoY2xrKTsNCj4gDQo+IFlvdSBzaG91bGQgaGFuZGxlIGVy cm9ycy4NCj4gDQo+IE5vdCB2ZXJ5IG5pY2UgZnJvbSBhIHBvd2VyIG1hbmFnZW1lbnQgcG9pbnQg b2YgdmlldyA6LSggQ291bGRuJ3QgdGhpcyBiZQ0KPiBkb25lIGluIHRoZSBydW50aW1lIFBNIHJl c3VtZSBoYW5kbGVyID8NCj4gDQoNClllcywgcG93ZXIgbWFuYWdlbWVudCAoUE0pIGluIGl0c2Vs ZiBpcyBhIGxhcmdlIGZ1bmN0aW9uYWxpdHkgd2hpY2ggd291bGQgZnVuY3Rpb24gYWxvbmcgd2l0 aA0KcnVudGltZSBzdXNwZW5kL3Jlc3VtZSBoYW5kbGVycy4gV2Ugd2lsbCB0YWtlIHVwIHRoZSBQ TSBmdW5jdGlvbnMgaW4gbmV4dCBzdGFnZSBvbmNlIHdlIGhhdmUNCmEgc3RhYmxlIGRyaXZlciBp biB1cHN0cmVhbS4gV2UgYXJlIHBsYW5uaW5nIHRvIGltcGxlbWVudCBkcml2ZXIgb3B0aW1pemF0 aW9uIGZlYXR1cmVzIGluIHRoZQ0KbmV4dCBzdGFnZSBvZiB1cHN0cmVhbWluZy4NCg0KPiA+ICsN Cj4gPiArCW1hdGNoID0gb2ZfbWF0Y2hfZGV2aWNlKG1oZHBfaWRzLCAmcGRldi0+ZGV2KTsNCj4g PiArCWlmICghbWF0Y2gpDQo+ID4gKwkJcmV0dXJuIC1FTk9ERVY7DQo+IA0KPiBIZXJlIHlvdSBs ZWF2ZSB0aGUgY2xvY2sgZW5hYmxlZC4gSnVzdCBtb3ZlIHRoaXMgYmxvY2ssIGluY2x1ZGluZyB0 aGUNCj4gbmV4dCBsaW5lLCBiZWZvcmUgY2xrX3ByZXBhcmVfZW5hYmxlKCkuDQo+IA0KPiA+ICsJ bWhkcC0+b3BzID0gKHN0cnVjdCBtaGRwX3BsYXRmb3JtX29wcyAqKW1hdGNoLT5kYXRhOw0KPiA+ ICsNCj4gPiArCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOw0KPiA+ICsJcmV0ID0gcG1f cnVudGltZV9nZXRfc3luYygmcGRldi0+ZGV2KTsNCj4gPiArCWlmIChyZXQgPCAwKSB7DQo+ID4g KwkJZGV2X2VycigmcGRldi0+ZGV2LCAicG1fcnVudGltZV9nZXRfc3luYyBmYWlsZWRcbiIpOw0K PiA+ICsJCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsNCj4gPiArCQlnb3RvIGNsa19k aXNhYmxlOw0KPiA+ICsJfQ0KPiANCj4gQW5kIG9mIGNvdXJzZSBydW50aW1lIFBNIG5lZWRzIHRv IGJlIGhhbmRsZWQgYXQgcnVudGltZSB0b28sIG5vdCBqdXN0IGF0DQo+IHByb2JlIHRpbWUgOi0p DQo+IA0KPiA+ICsNCj4gPiArCWlmIChtaGRwLT5vcHMgJiYgbWhkcC0+b3BzLT5pbml0KSB7DQo+ ID4gKwkJcmV0ID0gbWhkcC0+b3BzLT5pbml0KG1oZHApOw0KPiA+ICsJCWlmIChyZXQgIT0gMCkg ew0KPiA+ICsJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJNSERQIHBsYXRmb3JtIGluaXRpYWxpemF0 aW9uDQo+IGZhaWxlZDogJWRcbiIsDQo+ID4gKwkJCQlyZXQpOw0KPiA+ICsJCQlnb3RvIHJ1bnRp bWVfcHV0Ow0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyYXRlID0gY2xrX2dldF9y YXRlKGNsayk7DQo+ID4gKwl3cml0ZWwocmF0ZSAlIDEwMDAwMDAsIG1oZHAtPnJlZ3MgKyBDRE5T X1NXX0NMS19MKTsNCj4gPiArCXdyaXRlbChyYXRlIC8gMTAwMDAwMCwgbWhkcC0+cmVncyArIENE TlNfU1dfQ0xLX0gpOw0KPiA+ICsNCj4gPiArCWRldl9kYmcoJnBkZXYtPmRldiwgImZ1bmMgY2xr IHJhdGUgJWx1IEh6XG4iLCByYXRlKTsNCj4gPiArDQo+ID4gKwl3cml0ZWwofjAsIG1oZHAtPnJl Z3MgKyBDRE5TX01CX0lOVF9NQVNLKTsNCj4gPiArCXdyaXRlbCh+MCwgbWhkcC0+cmVncyArIENE TlNfQVBCX0lOVF9NQVNLKTsNCj4gPiArDQo+ID4gKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBk ZXYsIDApOw0KPiA+ICsJcmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShtaGRwLT5kZXYs IGlycSwgTlVMTCwNCj4gbWhkcF9pcnFfaGFuZGxlciwNCj4gPiArCQkJCQlJUlFGX09ORVNIT1Qs ICJtaGRwODU0NiIsDQo+IG1oZHApOw0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCWRldl9lcnIo JnBkZXYtPmRldiwgImNhbm5vdCBpbnN0YWxsIElSUSAlZFxuIiwgaXJxKTsNCj4gPiArCQlyZXQg PSAtRUlPOw0KPiA+ICsJCWdvdG8gcGxhdF9maW5pOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8q IFJlYWQgc291cmNlIGNhcGFiaWxpdGllcywgYmFzZWQgb24gUEhZJ3MgZGV2aWNlIHRyZWUgcHJv cGVydGllcy4gKi8NCj4gPiArCXJldCA9IGRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMigmbWhkcC0+ cGh5LT5kZXYsICJjZG5zLG51bS0NCj4gbGFuZXMiLA0KPiA+ICsJCQkJICAgICAgICYobGFuZXNf cHJvcCkpOw0KPiANCj4gTm8gbmVlZCBmb3IgcGFyZW50aGVzZXMuDQo+IA0KPiBPdWNoLCB5b3Un cmUgcmVhZGluZyBEVCBwcm9wZXJ0aWVzIG9mIGEgZGlmZmVyZW50IG5vZGUsIHRoYXQncyBwcmV0 dHkNCj4gYmFkLiBUaGlzIGRyaXZlciBjYW4ndCBhc3N1bWUgd2hhdCBQSFkgd2lsbCBiZSB1c2Vk LCBhbmQgd2hhdCBEVA0KPiBwcm9wZXJ0aWVzIGl0IHdpbGwgaGF2ZS4gVGhlIG51bWJlciBvZiBs YW5lcyBhbmQgbGluayByYXRlIG5lZWQgdG8gYmUNCj4gcXVlcmllZCBmcm9tIHRoZSBQSFksIHVz aW5nIHRoZSBrZXJuZWwgUEhZIEFQSS4gcGh5X2dldF9idXNfd2lkdGgoKQ0KPiBzZWVtcyB0byBi ZSBhIGNhbmRpZGF0ZSBmb3IgdGhlIG51bWJlciBvZiBsYW5lcy4gRm9yIHRoZSBsaW5rIGZyZXF1 ZW5jeSwNCj4geW91IG1heSBuZWVkIHRvIGV4dGVuZCB0aGUgUEhZIEFQSSwgYnV0IEkgaGF2ZW4n dCByZWFsbHkgbG9va2VkIGF0IGhvdw0KPiB0aGlzIGlzIHVzZWQuDQo+IA0KPiA+ICsJaWYgKHJl dCkNCj4gPiArCQltaGRwLT5ob3N0LmxhbmVzX2NudCA9IENETlNfTEFORV80Ow0KPiA+ICsJZWxz ZQ0KPiA+ICsJCW1oZHAtPmhvc3QubGFuZXNfY250ID0gbGFuZXNfcHJvcDsNCj4gDQo+IElmIG5v dCBmb3IgdGhlIGZhY3QgdGhhdCB5b3Ugc2hvdWxkbid0IHJlYWQgdGhpcyBwcm9wZXJ0eSBmcm9t IERULCB5b3UNCj4gY291bGQgd3JpdGUNCj4gDQo+IAltaGRwLT5ob3N0LmxhbmVzX2NudCA9IENE TlNfTEFORV80Ow0KPiAJZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKCZtaGRwLT5waHktPmRldiwg ImNkbnMsbnVtLWxhbmVzIiwNCj4gCQkJCSAmbGFuZXNfcHJvcCk7DQo+IA0KPiA+ICsNCj4gPiAr CXJldCA9IGRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMigmbWhkcC0+cGh5LT5kZXYsICJjZG5zLG1h eC1iaXQtDQo+IHJhdGUiLA0KPiA+ICsJCQkJICAgICAgICYobGlua19yYXRlKSk7DQo+ID4gKwlp ZiAocmV0KQ0KPiA+ICsJCWxpbmtfcmF0ZSA9DQo+IGRybV9kcF9id19jb2RlX3RvX2xpbmtfcmF0 ZShEUF9MSU5LX0JXXzhfMSk7DQo+ID4gKwllbHNlDQo+ID4gKwkJLyogUEhZIHVzZXMgTWIvcywg RFJNIHVzZXMgdGVucyBvZiBrYi9zLiAqLw0KPiA+ICsJCWxpbmtfcmF0ZSAqPSAxMDA7DQo+ID4g Kw0KPiA+ICsJbWhkcC0+aG9zdC5saW5rX3JhdGUgPSBsaW5rX3JhdGU7DQo+ID4gKwltaGRwLT5o b3N0LnZvbHRfc3dpbmcgPSBDRE5TX1ZPTFRfU1dJTkcoMyk7DQo+ID4gKwltaGRwLT5ob3N0LnBy ZV9lbXBoYXNpcyA9IENETlNfUFJFX0VNUEhBU0lTKDMpOw0KPiA+ICsJbWhkcC0+aG9zdC5wYXR0 ZXJuX3N1cHAgPSBDRE5TX1NVUFBPUlRfVFBTKDEpIHwNCj4gPiArCQkJCSAgQ0ROU19TVVBQT1JU X1RQUygyKSB8DQo+IENETlNfU1VQUE9SVF9UUFMoMykgfA0KPiA+ICsJCQkJICBDRE5TX1NVUFBP UlRfVFBTKDQpOw0KPiA+ICsJbWhkcC0+aG9zdC5sYW5lX21hcHBpbmcgPSBDRE5TX0xBTkVfTUFQ UElOR19OT1JNQUw7DQo+ID4gKwltaGRwLT5ob3N0LmZhc3RfbGluayA9IGZhbHNlOw0KPiA+ICsJ bWhkcC0+aG9zdC5lbmhhbmNlZCA9IHRydWU7DQo+ID4gKwltaGRwLT5ob3N0LnNjcmFtYmxlciA9 IHRydWU7DQo+ID4gKwltaGRwLT5ob3N0LnNzYyA9IGZhbHNlOw0KPiANCj4gSSB3b3VsZCBzcGxp dCBpbnRpYWxpemF0aW9uIG9mIG1oZHAtPmhvc3QgdG8gYSBzZXBhcmF0ZSBmdW5jdGlvbiwgcHJv YmUNCj4gaXMgdG9vIGxhcmdlIGFuZCBoYXJkIHRvIHJlYWQuDQo+IA0KPiA+ICsNCj4gPiArCS8q IFRoZSBvbmx5IGN1cnJlbnRseSBzdXBwb3J0ZWQgZm9ybWF0ICovDQo+ID4gKwltaGRwLT5kaXNw bGF5X2ZtdC55X29ubHkgPSBmYWxzZTsNCj4gPiArCW1oZHAtPmRpc3BsYXlfZm10LmNvbG9yX2Zv cm1hdCA9IERSTV9DT0xPUl9GT1JNQVRfUkdCNDQ0Ow0KPiA+ICsJbWhkcC0+ZGlzcGxheV9mbXQu YnBjID0gODsNCj4gPiArDQo+ID4gKwltaGRwLT5icmlkZ2Uub2Zfbm9kZSA9IHBkZXYtPmRldi5v Zl9ub2RlOw0KPiA+ICsJbWhkcC0+YnJpZGdlLmZ1bmNzID0gJmNkbnNfbWhkcF9icmlkZ2VfZnVu Y3M7DQo+ID4gKw0KPiA+ICsJcmV0ID0gcGh5X2luaXQobWhkcC0+cGh5KTsNCj4gPiArCWlmIChy ZXQpIHsNCj4gPiArCQlkZXZfZXJyKG1oZHAtPmRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIFBI WTogJWRcbiIsIHJldCk7DQo+ID4gKwkJZ290byBydW50aW1lX3B1dDsNCj4gPiArCX0NCj4gPiAr DQo+ID4gKwlyZXQgPSBsb2FkX2Zpcm13YXJlKG1oZHApOw0KPiA+ICsJaWYgKHJldCkNCj4gPiAr CQlnb3RvIHBoeV9leGl0Ow0KPiA+ICsNCj4gPiArCWRybV9icmlkZ2VfYWRkKCZtaGRwLT5icmlk Z2UpOw0KPiANCj4gV2hhdCBpZiBzb21lb25lIHN0YXJ0cyB1c2luZyB0aGUgYnJpZGdlIGJlZm9y ZSB0aGUgZmlybXdhcmUgaXMNCj4gb3BlcmF0aW9uYWwgPyBJdCBzZWVtcyB0aGF0IHlvdSBzaG91 bGQgZGVsYXkgYnJpZGdlIHJlZ2lzdHJhdGlvbiB1bnRpbA0KPiB0aGUgZmlybXdhcmUgaXMgbG9h ZGVkLiBJdCBtYXkgbWFrZSBpdCBwb3NzaWJsZSB0byByZW1vdmUNCj4gYnJpZGdlX2F0dGFjaGVk IGFuZCBzb2x2ZSB0aGUgcHJvYmxlbSB5b3UgbWVudGlvbiBpbiBtaGRwX2Z3X2NiKCkuDQo+IA0K PiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICsNCj4gPiArcGh5X2V4aXQ6DQo+ID4gKwlwaHlf ZXhpdChtaGRwLT5waHkpOw0KPiA+ICtwbGF0X2Zpbmk6DQo+ID4gKwlpZiAobWhkcC0+b3BzICYm IG1oZHAtPm9wcy0+ZXhpdCkNCj4gPiArCQltaGRwLT5vcHMtPmV4aXQobWhkcCk7DQo+ID4gK3J1 bnRpbWVfcHV0Og0KPiA+ICsJcG1fcnVudGltZV9wdXRfc3luYygmcGRldi0+ZGV2KTsNCj4gPiAr CXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsNCj4gPiArY2xrX2Rpc2FibGU6DQo+ID4g KwljbGtfZGlzYWJsZV91bnByZXBhcmUobWhkcC0+Y2xrKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4g cmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtNT0RVTEVfRklSTVdBUkUoRldfTkFNRSk7DQo+IA0K PiBZb3UgY2FuIG1vdmUgdGhpcyB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIHdpdGggdGhlIG90aGVy IE1PRFVMRV8qIG1hY3Jvcy4NCj4gDQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG1oZHBfcmVtb3Zl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBjZG5z X21oZHBfZGV2aWNlICptaGRwID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOw0KPiA+ICsJ dW5zaWduZWQgaW50IHRpbWVvdXQgPSAxMDsNCj4gPiArCWJvb2wgc3RvcF9mdyA9IGZhbHNlOw0K PiA+ICsJaW50IHJldCA9IDA7DQo+ID4gKw0KPiA+ICsJZHJtX2JyaWRnZV9yZW1vdmUoJm1oZHAt PmJyaWRnZSk7DQo+ID4gKw0KPiA+ICt3YWl0X2xvYWRpbmc6DQo+ID4gKwlzcGluX2xvY2soJm1o ZHAtPnN0YXJ0X2xvY2spOw0KPiA+ICsJaWYgKG1oZHAtPmh3X3N0YXRlID09IE1IRFBfSFdfTE9B RElORyAmJiB0aW1lb3V0LS0gPiAwKSB7DQo+ID4gKwkJc3Bpbl91bmxvY2soJm1oZHAtPnN0YXJ0 X2xvY2spOw0KPiA+ICsJCW1zbGVlcCgxMDApOw0KPiA+ICsJCWdvdG8gd2FpdF9sb2FkaW5nOw0K PiA+ICsJfSBlbHNlIGlmIChtaGRwLT5od19zdGF0ZSA9PSBNSERQX0hXX1JFQURZKSB7DQo+ID4g KwkJc3RvcF9mdyA9IHRydWU7DQo+ID4gKwkJdGltZW91dCA9IDE7IC8qIFdlIHdlcmUgc3VjY2Vz c2Z1bCBldmVuIGlmIGNvdW50ZXIgcmVhY2hlZCAwDQo+ICovDQo+ID4gKwl9DQo+ID4gKwltaGRw LT5od19zdGF0ZSA9IE1IRFBfSFdfU1RPUFBFRDsNCj4gPiArCXNwaW5fdW5sb2NrKCZtaGRwLT5z dGFydF9sb2NrKTsNCj4gPiArDQo+ID4gKwlpZiAodGltZW91dCA9PSAwKQ0KPiA+ICsJCWRldl9l cnIobWhkcC0+ZGV2LCAiJXM6IFRpbWVvdXQgd2FpdGluZyBmb3IgZncgbG9hZGluZ1xuIiwNCj4g PiArCQkJX19mdW5jX18pOw0KPiANCj4gSG93IGFib3V0IHVzaW5nIGEgd2FpdCBxdWV1ZSBpbnN0 ZWFkIG9mIHRoaXMgbWFudWFsIGxvb3AgPw0KPiANCj4gPiArDQo+ID4gKwlpZiAoc3RvcF9mdykg ew0KPiA+ICsJCXJldCA9IGNkbnNfbWhkcF9zZXRfZmlybXdhcmVfYWN0aXZlKG1oZHAsIGZhbHNl KTsNCj4gPiArCQlpZiAocmV0KQ0KPiA+ICsJCQlkZXZfZXJyKG1oZHAtPmRldiwgIiVzOiBEZS1h Y3RpdmF0ZSBGVyBmYWlsZWQ6DQo+ICVkXG4iLA0KPiA+ICsJCQkJX19mdW5jX18sIHJldCk7DQo+ ID4gKwl9DQo+ID4gKw0KPiA+ICsJcGh5X2V4aXQobWhkcC0+cGh5KTsNCj4gPiArDQo+ID4gKwlp ZiAobWhkcC0+b3BzICYmIG1oZHAtPm9wcy0+ZXhpdCkNCj4gPiArCQltaGRwLT5vcHMtPmV4aXQo bWhkcCk7DQo+ID4gKw0KPiA+ICsJcG1fcnVudGltZV9wdXRfc3luYygmcGRldi0+ZGV2KTsNCj4g PiArCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsNCj4gPiArDQo+ID4gKwljbGtfZGlz YWJsZV91bnByZXBhcmUobWhkcC0+Y2xrKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtaGRwX2RyaXZl ciA9IHsNCj4gPiArCS5kcml2ZXIJPSB7DQo+ID4gKwkJLm5hbWUJCT0gImNkbnMtbWhkcCIsDQo+ ID4gKwkJLm9mX21hdGNoX3RhYmxlCT0gb2ZfbWF0Y2hfcHRyKG1oZHBfaWRzKSwNCj4gPiArCX0s DQo+ID4gKwkucHJvYmUJPSBtaGRwX3Byb2JlLA0KPiA+ICsJLnJlbW92ZQk9IG1oZHBfcmVtb3Zl LA0KPiA+ICt9Ow0KPiA+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG1oZHBfZHJpdmVyKTsNCj4g PiArDQo+ID4gK01PRFVMRV9BVVRIT1IoIlF1ZW50aW4gU2NodWx6IDxxdWVudGluLnNjaHVsekBm cmVlLQ0KPiBlbGVjdHJvbnMuY29tPiIpOw0KPiA+ICtNT0RVTEVfQVVUSE9SKCJTd2FwbmlsIEph a2hhZGUgPHNqYWtoYWRlQGNhZGVuY2UuY29tPiIpOw0KPiA+ICtNT0RVTEVfREVTQ1JJUFRJT04o IkNhZGVuY2UgTUhEUCBEUCBicmlkZ2UgZHJpdmVyIik7DQo+ID4gK01PRFVMRV9MSUNFTlNFKCJH UEwiKTsNCj4gPiArTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpjZG5zLW1oZHAiKTsNCj4gPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9jZG5zLW1oZHAtY29yZS5oDQo+IGIvZHJp dmVycy9ncHUvZHJtL2JyaWRnZS9jZG5zLW1oZHAtY29yZS5oDQo+ID4gbmV3IGZpbGUgbW9kZSAx MDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLmY4ZGY1NDkxNzgxNg0KPiA+IC0tLSAvZGV2 L251bGwNCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2NkbnMtbWhkcC1jb3JlLmgN Cj4gPiBAQCAtMCwwICsxLDM4MCBAQA0KPiA+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMCAqLw0KPiA+ICsvKg0KPiA+ICsgKiBDYWRlbmNlIE1IRFAgRFAgYnJpZGdlIGRyaXZl ci4NCj4gPiArICoNCj4gPiArICogQ29weXJpZ2h0OiAyMDE5IENhZGVuY2UgRGVzaWduIFN5c3Rl bXMsIEluYy4NCj4gPiArICoNCj4gPiArICogQXV0aG9yOiBRdWVudGluIFNjaHVseiA8cXVlbnRp bi5zY2h1bHpAZnJlZS1lbGVjdHJvbnMuY29tPg0KPiA+ICsgKiAgICAgICAgIFN3YXBuaWwgSmFr aGFkZSA8c2pha2hhZGVAY2FkZW5jZS5jb20+DQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArI2lmbmRl ZiBDRE5TX01IRFBfQ09SRV9IDQo+ID4gKyNkZWZpbmUgQ0ROU19NSERQX0NPUkVfSA0KPiA+ICsN Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fYnJpZGdlLmg+DQo+ID4gKyNpbmNsdWRlIDxkcm0vZHJt X2Nvbm5lY3Rvci5oPg0KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9kcF9oZWxwZXIuaD4NCj4gDQo+ IFlvdSBhbHNvIG5lZWQNCj4gDQo+ICNpbmNsdWRlIDxsaW51eC9iaXRzLmg+DQo+ICNpbmNsdWRl IDxsaW51eC9tdXRleC5oPg0KPiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4NCj4gDQo+IGFu ZCBhIGZvcndhcmQgZGVjbGFyYXRpb24gb2YNCj4gDQo+IHN0cnVjdCBjbGs7DQo+IHN0cnVjdCBk ZXZpY2U7DQo+IHN0cnVjdCBwaHk7DQo+IA0KPiB0byBtYWtlIHN1cmUgdGhpcyBoZWFkZXIgaXMg c2VsZi1jb250YWluZWQuDQo+IA0KPiA+ICsNCj4gPiArLyogUmVnaXN0ZXIgb2Zmc2V0cyAqLw0K PiA+ICsjZGVmaW5lIENETlNfQVBCX0NGRwkJCQkweDAwMDAwDQo+ID4gKyNkZWZpbmUgQ0ROU19B UEJfQ1RSTAkJCQkoQ0ROU19BUEJfQ0ZHICsNCj4gMHgwMCkNCj4gDQo+IEkgd291bGQgZGVmaW5l IHJlZ2lzdGVycyB3aXRoIGEgZnVsbCBhZGRyZXNzOg0KPiANCj4gI2RlZmluZSBDRE5TX0FQQl9D VFJMCQkJCTB4MDAwMA0KPiAuLi4NCj4gI2RlZmluZSBDRE5TX01BSUxCT1hfRlVMTAkJCTB4MDAw OA0KPiAuLi4NCj4gI2RlZmluZSBDRE5TX0RQX0ZSQU1FUl9UVQkJCTB4MjIwOA0KPiANCj4gVXNp bmcgYmFzZXMgYW5kIG9mZnNldHMgZG9lc24ndCBhZGQgbXVjaCwgYnV0IG1ha2VzIGl0IG1vcmUg ZGlmZmljdWx0IHRvDQo+IGZpbmQgdGhlIHJlZ2lzdGVyIG1hY3JvIGZyb20gdGhlIG51bWVyaWNh bCBhZGRyZXNzIHdoZW4gZGVidWdnaW5nLg0KPiANCj4gDQo+ID4gKyNkZWZpbmUgQ0ROU19DUFVf U1RBTEwJCQkJQklUKDMpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIENETlNfTUFJTEJPWF9GVUxMCQkJ KENETlNfQVBCX0NGRyArDQo+IDB4MDgpDQo+ID4gKyNkZWZpbmUgQ0ROU19NQUlMQk9YX0VNUFRZ CQkJKENETlNfQVBCX0NGRyArDQo+IDB4MGMpDQo+ID4gKyNkZWZpbmUgQ0ROU19NQUlMQk9YX1RY X0RBVEEJCQkoQ0ROU19BUEJfQ0ZHICsNCj4gMHgxMCkNCj4gPiArI2RlZmluZSBDRE5TX01BSUxC T1hfUlhfREFUQQkJCShDRE5TX0FQQl9DRkcgKw0KPiAweDE0KQ0KPiA+ICsjZGVmaW5lIENETlNf S0VFUF9BTElWRQkJCQkoQ0ROU19BUEJfQ0ZHICsNCj4gMHgxOCkNCj4gPiArI2RlZmluZSBDRE5T X0tFRVBfQUxJVkVfTUFTSwkJCUdFTk1BU0soNywgMCkNCj4gPiArDQo+ID4gKyNkZWZpbmUgQ0RO U19NQl9JTlRfTUFTSwkJCShDRE5TX0FQQl9DRkcgKw0KPiAweDM0KQ0KPiA+ICsjZGVmaW5lIENE TlNfTUJfSU5UX1NUQVRVUwkJCShDRE5TX0FQQl9DRkcgKw0KPiAweDM4KQ0KPiA+ICsNCj4gPiAr I2RlZmluZSBDRE5TX1NXX0NMS19MCQkJCShDRE5TX0FQQl9DRkcgKw0KPiAweDNjKQ0KPiA+ICsj ZGVmaW5lIENETlNfU1dfQ0xLX0gJCQkJKENETlNfQVBCX0NGRyArDQo+IDB4NDApDQo+ID4gKyNk ZWZpbmUgQ0ROU19TV19FVkVOVDAJCQkJKENETlNfQVBCX0NGRyArDQo+IDB4NDQpDQo+ID4gKyNk ZWZpbmUgQ0ROU19EUFRYX0hQRAkJCQlCSVQoMCkNCj4gPiArDQo+ID4gKyNkZWZpbmUgQ0ROU19T V19FVkVOVDEJCQkJKENETlNfQVBCX0NGRyArDQo+IDB4NDgpDQo+ID4gKyNkZWZpbmUgQ0ROU19T V19FVkVOVDIJCQkJKENETlNfQVBCX0NGRyArDQo+IDB4NGMpDQo+ID4gKyNkZWZpbmUgQ0ROU19T V19FVkVOVDMJCQkJKENETlNfQVBCX0NGRyArDQo+IDB4NTApDQo+ID4gKw0KPiA+ICsjZGVmaW5l IENETlNfQVBCX0lOVF9NQVNLCQkJKENETlNfQVBCX0NGRyArDQo+IDB4NkMpDQo+ID4gKyNkZWZp bmUgQ0ROU19BUEJfSU5UX01BU0tfTUFJTEJPWF9JTlQJCUJJVCgwKQ0KPiA+ICsjZGVmaW5lIENE TlNfQVBCX0lOVF9NQVNLX1NXX0VWRU5UX0lOVAkJQklUKDEpDQo+ID4gKyNkZWZpbmUgQ0ROU19B UEJfSU5UX1NUQVRVUwkJCShDRE5TX0FQQl9DRkcgKw0KPiAweDcwKQ0KPiA+ICsNCj4gPiArI2Rl ZmluZSBDRE5TX0RQVFhfQ0FSCQkJCShDRE5TX0FQQl9DRkcgKw0KPiAweDkwNCkNCj4gPiArI2Rl ZmluZSBDRE5TX1ZJRl9DTEtfRU4JCQkJQklUKDApDQo+ID4gKyNkZWZpbmUgQ0ROU19WSUZfQ0xL X1JTVE4JCQlCSVQoMSkNCj4gPiArDQo+ID4gKyNkZWZpbmUgQ0ROU19TT1VSQ0VfVklERU9fSUYo cykJCQkoMHgwMGIwMCArICgocykgKg0KPiAweDIwKSkNCj4gPiArI2RlZmluZSBDRE5TX0JORF9I U1lOQzJWU1lOQyhzKQ0KPiAJKENETlNfU09VUkNFX1ZJREVPX0lGKHMpICsgXA0KPiA+ICsJCQkJ CQkgMHgwMCkNCj4gPiArI2RlZmluZSBDRE5TX0lQX0RUQ1RfV0lOCQkJR0VOTUFTSygxMSwgMCkN Cj4gPiArI2RlZmluZSBDRE5TX0lQX0RFVF9JTlRFUkxBQ0VfRk9STUFUCQlCSVQoMTIpDQo+ID4g KyNkZWZpbmUgQ0ROU19JUF9CWVBBU1NfVl9JTlRFUkZBQ0UJCUJJVCgxMykNCj4gPiArDQo+ID4g KyNkZWZpbmUgQ0ROU19IU1lOQzJWU1lOQ19QT0xfQ1RSTChzKQ0KPiAJKENETlNfU09VUkNFX1ZJ REVPX0lGKHMpICsgXA0KPiA+ICsJCQkJCQkgMHgxMCkNCj4gPiArI2RlZmluZSBDRE5TX0gyVl9I U1lOQ19QT0xfQUNUSVZFX0xPVwkJQklUKDEpDQo+ID4gKyNkZWZpbmUgQ0ROU19IMlZfVlNZTkNf UE9MX0FDVElWRV9MT1cJCUJJVCgyKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBDRE5TX0RQVFhfUEhZ X0NPTkZJRwkJCTB4MDIwMDANCj4gPiArI2RlZmluZSBDRE5TX1BIWV9UUkFJTklOR19FTgkJCUJJ VCgwKQ0KPiA+ICsjZGVmaW5lIENETlNfUEhZX1RSQUlOSU5HX1RZUEUoeCkJCSgoKHgpICYgR0VO TUFTSygzLA0KPiAwKSkgPDwgMSkNCj4gPiArI2RlZmluZSBDRE5TX1BIWV9TQ1JBTUJMRVJfQllQ QVNTCQlCSVQoNSkNCj4gPiArI2RlZmluZSBDRE5TX1BIWV9FTkNPREVSX0JZUEFTUwkJCUJJVCg2 KQ0KPiA+ICsjZGVmaW5lIENETlNfUEhZX1NLRVdfQllQQVNTCQkJQklUKDcpDQo+ID4gKyNkZWZp bmUgQ0ROU19QSFlfVFJBSU5JTkdfQVVUTwkJCUJJVCg4KQ0KPiA+ICsjZGVmaW5lIENETlNfUEhZ X0xBTkUwX1NLRVcoeCkJCQkoKCh4KSAmIEdFTk1BU0soMiwNCj4gMCkpIDw8IDkpDQo+ID4gKyNk ZWZpbmUgQ0ROU19QSFlfTEFORTFfU0tFVyh4KQkJCSgoKHgpICYgR0VOTUFTSygyLA0KPiAwKSkg PDwgMTIpDQo+ID4gKyNkZWZpbmUgQ0ROU19QSFlfTEFORTJfU0tFVyh4KQkJCSgoKHgpICYgR0VO TUFTSygyLA0KPiAwKSkgPDwgMTUpDQo+ID4gKyNkZWZpbmUgQ0ROU19QSFlfTEFORTNfU0tFVyh4 KQkJCSgoKHgpICYgR0VOTUFTSygyLA0KPiAwKSkgPDwgMTgpDQo+ID4gKyNkZWZpbmUgQ0ROU19Q SFlfQ09NTU9OX0NPTkZJRw0KPiAJKENETlNfUEhZX0xBTkUxX1NLRVcoMSkgfCBcDQo+ID4gKwkJ CQkJCUNETlNfUEhZX0xBTkUyX1NLRVcoMikgfA0KPiBcDQo+ID4gKwkJCQkJCUNETlNfUEhZX0xB TkUzX1NLRVcoMykpDQo+ID4gKyNkZWZpbmUgQ0ROU19QSFlfMTBCSVRfRU4JCQlCSVQoMjEpDQo+ ID4gKw0KPiA+ICsjZGVmaW5lIENETlNfRFBUWF9GUkFNRVIJCQkweDAyMjAwDQo+ID4gKyNkZWZp bmUgQ0ROU19EUF9GUkFNRVJfR0xPQkFMX0NPTkZJRw0KPiAJKENETlNfRFBUWF9GUkFNRVIgKyAw eDAwKQ0KPiA+ICsjZGVmaW5lIENETlNfRFBfTlVNX0xBTkVTKHgpCQkJKCh4KSAtIDEpDQo+ID4g KyNkZWZpbmUgQ0ROU19EUF9NU1RfRU4JCQkJQklUKDIpDQo+ID4gKyNkZWZpbmUgQ0ROU19EUF9G UkFNRVJfRU4JCQlCSVQoMykNCj4gPiArI2RlZmluZSBDRE5TX0RQX1JBVEVfR09WRVJOT1JfRU4J CUJJVCg0KQ0KPiA+ICsjZGVmaW5lIENETlNfRFBfTk9fVklERU9fTU9ERQkJCUJJVCg1KQ0KPiA+ ICsjZGVmaW5lIENETlNfRFBfRElTQUJMRV9QSFlfUlNUCQkJQklUKDYpDQo+ID4gKyNkZWZpbmUg Q0ROU19EUF9XUl9GQUlMSU5HX0VER0VfVlNZTkMJCUJJVCg3KQ0KPiA+ICsNCj4gPiArI2RlZmlu ZSBDRE5TX0RQX0ZSQU1FUl9UVQ0KPiAJKENETlNfRFBUWF9GUkFNRVIgKyAweDA4KQ0KPiA+ICsj ZGVmaW5lIENETlNfRFBfRlJBTUVSX1RVX1NJWkUoeCkJCSgoKHgpICYgR0VOTUFTSyg2LA0KPiAw KSkgPDwgOCkNCj4gPiArI2RlZmluZSBDRE5TX0RQX0ZSQU1FUl9UVV9WUyh4KQkJCSgoeCkgJg0K PiBHRU5NQVNLKDUsIDApKQ0KPiA+ICsjZGVmaW5lIENETlNfRFBfRlJBTUVSX1RVX0NOVF9SU1Rf RU4JCUJJVCgxNSkNCj4gPiArDQo+ID4gKyNkZWZpbmUgQ0ROU19EUFRYX1NUUkVBTShzKQkJCSgw eDAzMDAwICsgKHMpICogMHg4MCkNCj4gPiArI2RlZmluZSBDRE5TX0RQX01TQV9IT1JJWk9OVEFM XzAocykNCj4gCShDRE5TX0RQVFhfU1RSRUFNKHMpICsgMHgwMCkNCj4gPiArI2RlZmluZSBDRE5T X0RQX01TQUgwX0hfVE9UQUwoeCkJCSh4KQ0KPiA+ICsjZGVmaW5lIENETlNfRFBfTVNBSDBfSFNZ TkNfU1RBUlQoeCkJCSgoeCkgPDwgMTYpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIENETlNfRFBfTVNB X0hPUklaT05UQUxfMShzKQ0KPiAJKENETlNfRFBUWF9TVFJFQU0ocykgKyAweDA0KQ0KPiA+ICsj ZGVmaW5lIENETlNfRFBfTVNBSDFfSFNZTkNfV0lEVEgoeCkJCSh4KQ0KPiA+ICsjZGVmaW5lIENE TlNfRFBfTVNBSDFfSFNZTkNfUE9MX0xPVwkJQklUKDE1KQ0KPiA+ICsjZGVmaW5lIENETlNfRFBf TVNBSDFfSERJU1BfV0lEVEgoeCkJCSgoeCkgPDwgMTYpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIENE TlNfRFBfTVNBX1ZFUlRJQ0FMXzAocykNCj4gCShDRE5TX0RQVFhfU1RSRUFNKHMpICsgMHgwOCkN Cj4gPiArI2RlZmluZSBDRE5TX0RQX01TQVYwX1ZfVE9UQUwoeCkJCSh4KQ0KPiA+ICsjZGVmaW5l IENETlNfRFBfTVNBVjBfVlNZTkNfU1RBUlQoeCkJCSgoeCkgPDwgMTYpDQo+ID4gKw0KPiA+ICsj ZGVmaW5lIENETlNfRFBfTVNBX1ZFUlRJQ0FMXzEocykNCj4gCShDRE5TX0RQVFhfU1RSRUFNKHMp ICsgMHgwYykNCj4gPiArI2RlZmluZSBDRE5TX0RQX01TQVYxX1ZTWU5DX1dJRFRIKHgpCQkoeCkN Cj4gPiArI2RlZmluZSBDRE5TX0RQX01TQVYxX1ZTWU5DX1BPTF9MT1cJCUJJVCgxNSkNCj4gPiAr I2RlZmluZSBDRE5TX0RQX01TQVYxX1ZESVNQX1dJRFRIKHgpCQkoKHgpIDw8IDE2KQ0KPiA+ICsN Cj4gPiArI2RlZmluZSBDRE5TX0RQX01TQV9NSVNDKHMpDQo+IAkoQ0ROU19EUFRYX1NUUkVBTShz KSArIDB4MTApDQo+ID4gKyNkZWZpbmUgQ0ROU19EUF9TVFJFQU1fQ09ORklHKHMpDQo+IAkoQ0RO U19EUFRYX1NUUkVBTShzKSArIDB4MTQpDQo+ID4gKyNkZWZpbmUgQ0ROU19EUF9TVFJFQU1fQ09O RklHXzIocykNCj4gCShDRE5TX0RQVFhfU1RSRUFNKHMpICsgMHgyYykNCj4gPiArI2RlZmluZSBD RE5TX0RQX1NDMl9UVV9WU19ESUZGKHgpCQkoKHgpIDw8IDgpDQo+ID4gKw0KPiA+ICsjZGVmaW5l IENETlNfRFBfSE9SSVpPTlRBTChzKQ0KPiAJKENETlNfRFBUWF9TVFJFQU0ocykgKyAweDMwKQ0K PiA+ICsjZGVmaW5lIENETlNfRFBfSF9IU1lOQ19XSURUSCh4KQkJKHgpDQo+ID4gKyNkZWZpbmUg Q0ROU19EUF9IX0hfVE9UQUwoeCkJCQkoKHgpIDw8IDE2KQ0KPiA+ICsNCj4gPiArI2RlZmluZSBD RE5TX0RQX1ZFUlRJQ0FMXzAocykNCj4gCShDRE5TX0RQVFhfU1RSRUFNKHMpICsgMHgzNCkNCj4g PiArI2RlZmluZSBDRE5TX0RQX1YwX1ZIRUlHSFQoeCkJCQkoeCkNCj4gPiArI2RlZmluZSBDRE5T X0RQX1YwX1ZTVEFSVCh4KQkJCSgoeCkgPDwgMTYpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIENETlNf RFBfVkVSVElDQUxfMShzKQ0KPiAJKENETlNfRFBUWF9TVFJFQU0ocykgKyAweDM4KQ0KPiA+ICsj ZGVmaW5lIENETlNfRFBfVjFfVlRPVEFMKHgpCQkJKHgpDQo+ID4gKyNkZWZpbmUgQ0ROU19EUF9W MV9WVE9UQUxfRVZFTgkJCUJJVCgxNikNCj4gPiArDQo+ID4gKyNkZWZpbmUgQ0ROU19EUF9GUkFN RVJfUFhMX1JFUFIocykNCj4gCShDRE5TX0RQVFhfU1RSRUFNKHMpICsgMHg0YykNCj4gPiArI2Rl ZmluZSBDRE5TX0RQX0ZSQU1FUl82X0JQQwkJCUJJVCgwKQ0KPiA+ICsjZGVmaW5lIENETlNfRFBf RlJBTUVSXzhfQlBDCQkJQklUKDEpDQo+ID4gKyNkZWZpbmUgQ0ROU19EUF9GUkFNRVJfMTBfQlBD CQkJQklUKDIpDQo+ID4gKyNkZWZpbmUgQ0ROU19EUF9GUkFNRVJfMTJfQlBDCQkJQklUKDMpDQo+ ID4gKyNkZWZpbmUgQ0ROU19EUF9GUkFNRVJfMTZfQlBDCQkJQklUKDQpDQo+ID4gKyNkZWZpbmUg Q0ROU19EUF9GUkFNRVJfUFhMX0ZPUk1BVAkJMHg4DQo+ID4gKyNkZWZpbmUgQ0ROU19EUF9GUkFN RVJfUkdCCQkJQklUKDApDQo+ID4gKyNkZWZpbmUgQ0ROU19EUF9GUkFNRVJfWUNCQ1I0NDQJCQlC SVQoMSkNCj4gPiArI2RlZmluZSBDRE5TX0RQX0ZSQU1FUl9ZQ0JDUjQyMgkJCUJJVCgyKQ0KPiA+ ICsjZGVmaW5lIENETlNfRFBfRlJBTUVSX1lDQkNSNDIwCQkJQklUKDMpDQo+ID4gKyNkZWZpbmUg Q0ROU19EUF9GUkFNRVJfWV9PTkxZCQkJQklUKDQpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIENETlNf RFBfRlJBTUVSX1NQKHMpDQo+IAkoQ0ROU19EUFRYX1NUUkVBTShzKSArIDB4NTApDQo+ID4gKyNk ZWZpbmUgQ0ROU19EUF9GUkFNRVJfVlNZTkNfUE9MX0xPVwkJQklUKDApDQo+ID4gKyNkZWZpbmUg Q0ROU19EUF9GUkFNRVJfSFNZTkNfUE9MX0xPVwkJQklUKDEpDQo+ID4gKyNkZWZpbmUgQ0ROU19E UF9GUkFNRVJfSU5URVJMQUNFCQlCSVQoMikNCj4gPiArDQo+ID4gKyNkZWZpbmUgQ0ROU19EUF9M SU5FX1RIUkVTSChzKQ0KPiAJKENETlNfRFBUWF9TVFJFQU0ocykgKyAweDY0KQ0KPiA+ICsjZGVm aW5lIENETlNfRFBfQUNUSVZFX0xJTkVfVEhSRVNIKHgpCQkoeCkNCj4gPiArDQo+ID4gKyNkZWZp bmUgQ0ROU19EUF9WQl9JRChzKQkJCShDRE5TX0RQVFhfU1RSRUFNKHMpICsNCj4gMHg2OCkNCj4g PiArI2RlZmluZSBDRE5TX0RQX1ZCX0lEX0lOVEVSTEFDRUQJCUJJVCgyKQ0KPiA+ICsjZGVmaW5l IENETlNfRFBfVkJfSURfQ09NUFJFU1NFRAkJQklUKDYpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIENE TlNfRFBfRlJPTlRfQkFDS19QT1JDSChzKQ0KPiAJKENETlNfRFBUWF9TVFJFQU0ocykgKyAweDc4 KQ0KPiA+ICsjZGVmaW5lIENETlNfRFBfQkFDS19QT1JDSCh4KQkJCSh4KQ0KPiA+ICsjZGVmaW5l IENETlNfRFBfRlJPTlRfUE9SQ0goeCkJCQkoKHgpIDw8IDE2KQ0KPiA+ICsNCj4gPiArI2RlZmlu ZSBDRE5TX0RQX0JZVEVfQ09VTlQocykNCj4gCShDRE5TX0RQVFhfU1RSRUFNKHMpICsgMHg3YykN Cj4gPiArI2RlZmluZSBDRE5TX0RQX0JZVEVfQ09VTlRfQllURVNfSU5fQ0hVTktfU0hJRlQJMTYN Cj4gPiArDQo+ID4gKyNkZWZpbmUgQ0ROU19EUF9NU1RfU1RSRUFNX0NPTkZJRyhzKQ0KPiAJKENE TlNfRFBUWF9TVFJFQU0ocykgKyAweDE0KQ0KPiA+ICsjZGVmaW5lIENETlNfRFBfTVNUX1NUUk1f Q0ZHX1NUUkVBTV9FTgkJQklUKDApDQo+ID4gKyNkZWZpbmUgQ0ROU19EUF9NU1RfU1RSTV9DRkdf Tk9fVklERU8JCUJJVCgxKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBDRE5TX0RQX01TVF9TTE9UX0FM TE9DQVRFKHMpDQo+IAkoQ0ROU19EUFRYX1NUUkVBTShzKSArIDB4NDQpDQo+ID4gKyNkZWZpbmUg Q0ROU19EUF9TX0FMTE9DX1NUQVJUX1NMT1QoeCkJCSh4KQ0KPiA+ICsjZGVmaW5lIENETlNfRFBf U19BTExPQ19FTkRfU0xPVCh4KQkJKCh4KSA8PCA4KQ0KPiA+ICsNCj4gPiArI2RlZmluZSBDRE5T X0RQX1JBVEVfR09WRVJOSU5HKHMpDQo+IAkoQ0ROU19EUFRYX1NUUkVBTShzKSArIDB4NDgpDQo+ ID4gKyNkZWZpbmUgQ0ROU19EUF9SR19UQVJHX0FWX1NMT1RTX1koeCkJCSh4KQ0KPiA+ICsjZGVm aW5lIENETlNfRFBfUkdfVEFSR19BVl9TTE9UU19YKHgpCQkoKHgpIDw8IDQpDQo+ID4gKyNkZWZp bmUgQ0ROU19EUF9SR19FTkFCTEUJCQlCSVQoMTApDQo+ID4gKw0KPiA+ICsjZGVmaW5lIENETlNf RFBfTVRQSF9DT05UUk9MCQkJMHgyMjY0DQo+ID4gKyNkZWZpbmUgQ0ROU19EUF9NVFBIX0VDRl9F TgkJCUJJVCgwKQ0KPiA+ICsjZGVmaW5lIENETlNfRFBfTVRQSF9BQ1RfRU4JCQlCSVQoMSkNCj4g PiArI2RlZmluZSBDRE5TX0RQX01UUEhfTFZQX0VOCQkJQklUKDIpDQo+ID4gKw0KPiA+ICsjZGVm aW5lIENETlNfRFBfTVRQSF9TVEFUVVMJCQkweDIyNkMNCj4gPiArI2RlZmluZSBDRE5TX0RQX01U UEhfQUNUX1NUQVRVUwkJCUJJVCgwKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBDRE5TX0RQVFhfR0xP QkFMCQkJMHgwMjMwMA0KPiA+ICsjZGVmaW5lIENETlNfRFBfTEFORV9FTgkJCQkoQ0ROU19EUFRY X0dMT0JBTA0KPiArIDB4MDApDQo+ID4gKyNkZWZpbmUgQ0ROU19EUF9MQU5FX0VOX0xBTkVTKHgp CQlHRU5NQVNLKCh4KSAtIDEsIDApDQo+ID4gKyNkZWZpbmUgQ0ROU19EUF9FTkhOQ0QJCQkJKENE TlNfRFBUWF9HTE9CQUwNCj4gKyAweDA0KQ0KPiA+ICsNCj4gPiArLyogbWFpbGJveCAqLw0KPiA+ ICsjZGVmaW5lIE1BSUxCT1hfUkVUUllfVVMJCQkxMDAwDQo+ID4gKyNkZWZpbmUgTUFJTEJPWF9U SU1FT1VUX1VTCQkJMjAwMDAwMA0KPiA+ICsNCj4gPiArI2RlZmluZSBNQl9PUENPREVfSUQJCQkJ MA0KPiA+ICsjZGVmaW5lIE1CX01PRFVMRV9JRAkJCQkxDQo+ID4gKyNkZWZpbmUgTUJfU0laRV9N U0JfSUQJCQkJMg0KPiA+ICsjZGVmaW5lIE1CX1NJWkVfTFNCX0lECQkJCTMNCj4gPiArI2RlZmlu ZSBNQl9EQVRBX0lECQkJCTQNCj4gPiArDQo+ID4gKyNkZWZpbmUgTUJfTU9EVUxFX0lEX0RQX1RY CQkJMHgwMQ0KPiA+ICsjZGVmaW5lIE1CX01PRFVMRV9JRF9IRENQX1RYCQkJMHgwNw0KPiA+ICsj ZGVmaW5lIE1CX01PRFVMRV9JRF9IRENQX1JYCQkJMHgwOA0KPiA+ICsjZGVmaW5lIE1CX01PRFVM RV9JRF9IRENQX0dFTkVSQUwJCTB4MDkNCj4gPiArI2RlZmluZSBNQl9NT0RVTEVfSURfR0VORVJB TAkJCTB4MGENCj4gPiArDQo+ID4gKy8qIGZpcm13YXJlIGFuZCBvcGNvZGVzICovDQo+ID4gKyNk ZWZpbmUgRldfTkFNRQ0KPiAJImNhZGVuY2UvbWhkcDg1NDYuYmluIg0KPiA+ICsjZGVmaW5lIENE TlNfTUhEUF9JTUVNCQkJCTB4MTAwMDANCj4gPiArDQo+ID4gKyNkZWZpbmUgR0VORVJBTF9NQUlO X0NPTlRST0wJCQkweDAxDQo+ID4gKyNkZWZpbmUgR0VORVJBTF9URVNUX0VDSE8JCQkweDAyDQo+ ID4gKyNkZWZpbmUgR0VORVJBTF9CVVNfU0VUVElOR1MJCQkweDAzDQo+ID4gKyNkZWZpbmUgR0VO RVJBTF9URVNUX0FDQ0VTUwkJCTB4MDQNCj4gPiArI2RlZmluZSBHRU5FUkFMX1JFR0lTVEVSX1JF QUQJCQkweDA3DQo+ID4gKw0KPiA+ICsjZGVmaW5lIERQVFhfU0VUX1BPV0VSX01ORwkJCTB4MDAN Cj4gPiArI2RlZmluZSBEUFRYX1NFVF9IT1NUX0NBUEFCSUxJVElFUwkJMHgwMQ0KPiA+ICsjZGVm aW5lIERQVFhfR0VUX0VESUQJCQkJMHgwMg0KPiA+ICsjZGVmaW5lIERQVFhfUkVBRF9EUENECQkJ CTB4MDMNCj4gPiArI2RlZmluZSBEUFRYX1dSSVRFX0RQQ0QJCQkJMHgwNA0KPiA+ICsjZGVmaW5l IERQVFhfRU5BQkxFX0VWRU5UCQkJMHgwNQ0KPiA+ICsjZGVmaW5lIERQVFhfV1JJVEVfUkVHSVNU RVIJCQkweDA2DQo+ID4gKyNkZWZpbmUgRFBUWF9SRUFEX1JFR0lTVEVSCQkJMHgwNw0KPiA+ICsj ZGVmaW5lIERQVFhfV1JJVEVfRklFTEQJCQkweDA4DQo+ID4gKyNkZWZpbmUgRFBUWF9UUkFJTklO R19DT05UUk9MCQkJMHgwOQ0KPiA+ICsjZGVmaW5lIERQVFhfUkVBRF9FVkVOVAkJCQkweDBhDQo+ ID4gKyNkZWZpbmUgRFBUWF9SRUFEX0xJTktfU1RBVAkJCTB4MGINCj4gPiArI2RlZmluZSBEUFRY X1NFVF9WSURFTwkJCQkweDBjDQo+ID4gKyNkZWZpbmUgRFBUWF9TRVRfQVVESU8JCQkJMHgwZA0K PiA+ICsjZGVmaW5lIERQVFhfR0VUX0xBU1RfQVVYX1NUQVVTCQkJMHgwZQ0KPiA+ICsjZGVmaW5l IERQVFhfU0VUX0xJTktfQlJFQUtfUE9JTlQJCTB4MGYNCj4gPiArI2RlZmluZSBEUFRYX0ZPUkNF X0xBTkVTCQkJMHgxMA0KPiA+ICsjZGVmaW5lIERQVFhfSFBEX1NUQVRFCQkJCTB4MTENCj4gPiAr I2RlZmluZSBEUFRYX0FESlVTVF9MVAkJCQkweDEyDQo+ID4gKw0KPiA+ICsjZGVmaW5lIEZXX1NU QU5EQlkJCQkJMA0KPiA+ICsjZGVmaW5lIEZXX0FDVElWRQkJCQkxDQo+ID4gKw0KPiA+ICsvKiBI UEQgKi8NCj4gPiArI2RlZmluZSBEUFRYX1JFQURfRVZFTlRfSFBEX1RPX0hJR0ggICAgICAgICAg ICAgQklUKDApDQo+ID4gKyNkZWZpbmUgRFBUWF9SRUFEX0VWRU5UX0hQRF9UT19MT1cgICAgICAg ICAgICAgIEJJVCgxKQ0KPiA+ICsjZGVmaW5lIERQVFhfUkVBRF9FVkVOVF9IUERfUFVMU0UgICAg ICAgICAgICAgICBCSVQoMikNCj4gPiArI2RlZmluZSBEUFRYX1JFQURfRVZFTlRfSFBEX1NUQVRF ICAgICAgICAgICAgICAgQklUKDMpDQo+ID4gKw0KPiA+ICsvKiBnZW5lcmFsICovDQo+ID4gKyNk ZWZpbmUgQ0ROU19EUF9UUkFJTklOR19QQVRURVJOXzQJCTB4Nw0KPiA+ICsNCj4gPiArI2RlZmlu ZSBDRE5TX0tFRVBfQUxJVkVfVElNRU9VVAkJCTIwMDANCj4gPiArDQo+ID4gKyNkZWZpbmUgQ0RO U19MQU5FXzEJCQkJMQ0KPiA+ICsjZGVmaW5lIENETlNfTEFORV8yCQkJCTINCj4gPiArI2RlZmlu ZSBDRE5TX0xBTkVfNAkJCQk0DQo+IA0KPiBUaGVzZSByZWFsbHkgZG9uJ3QgYWRkIGFueXRoaW5n LCBqdXN0IHVzZSAxLCAyIGFuZCA0IGRpcmVjdGx5IGluIHRoZQ0KPiBjb2RlLg0KPiANCj4gPiAr DQo+ID4gKyNkZWZpbmUgQ0ROU19WT0xUX1NXSU5HKHgpCQkJKCh4KSAmIEdFTk1BU0soMSwNCj4g MCkpDQo+ID4gKyNkZWZpbmUgQ0ROU19GT1JDRV9WT0xUX1NXSU5HCQkJQklUKDIpDQo+ID4gKw0K PiA+ICsjZGVmaW5lIENETlNfUFJFX0VNUEhBU0lTKHgpCQkJKCh4KSAmIEdFTk1BU0soMSwNCj4g MCkpDQo+ID4gKyNkZWZpbmUgQ0ROU19GT1JDRV9QUkVfRU1QSEFTSVMJCQlCSVQoMikNCj4gPiAr DQo+ID4gKyNkZWZpbmUgQ0ROU19TVVBQT1JUX1RQUyh4KQkJCUJJVCgoeCkgLSAxKQ0KPiA+ICsN Cj4gPiArI2RlZmluZSBDRE5TX0ZBU1RfTElOS19UUkFJTklORwkJCUJJVCgwKQ0KPiA+ICsNCj4g PiArI2RlZmluZSBDRE5TX0xBTkVfTUFQUElOR19UWVBFX0NfTEFORV8wKHgpCSgoeCkgJiBHRU5N QVNLKDEsDQo+IDApKQ0KPiA+ICsjZGVmaW5lIENETlNfTEFORV9NQVBQSU5HX1RZUEVfQ19MQU5F XzEoeCkJKCh4KSAmIEdFTk1BU0soMywNCj4gMikpDQo+ID4gKyNkZWZpbmUgQ0ROU19MQU5FX01B UFBJTkdfVFlQRV9DX0xBTkVfMih4KQkoKHgpICYgR0VOTUFTSyg1LA0KPiA0KSkNCj4gPiArI2Rl ZmluZSBDRE5TX0xBTkVfTUFQUElOR19UWVBFX0NfTEFORV8zKHgpCSgoeCkgJiBHRU5NQVNLKDcs DQo+IDYpKQ0KPiA+ICsjZGVmaW5lIENETlNfTEFORV9NQVBQSU5HX05PUk1BTAkJMHhlNA0KPiA+ ICsjZGVmaW5lIENETlNfTEFORV9NQVBQSU5HX0ZMSVBQRUQJCTB4MWINCj4gPiArDQo+ID4gKyNk ZWZpbmUgQ0ROU19EUF9NQVhfTlVNX0xBTkVTCQkJNA0KPiA+ICsjZGVmaW5lIENETlNfRFBfVEVT VF9WU0NfU0RQCQkJQklUKDYpIC8qIDEuMysgKi8NCj4gPiArI2RlZmluZSBDRE5TX0RQX1RFU1Rf Q09MT1JfRk9STUFUX1JBV19ZX09OTFkJQklUKDcpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIENETlNf TUhEUF9NQVhfU1RSRUFNUyAgIDQNCj4gPiArDQo+ID4gKyNkZWZpbmUgY29ubmVjdG9yX3RvX21o ZHAoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBjZG5zX21oZHBfZGV2aWNlLA0KPiBjb25uZWN0 b3IpDQo+ID4gKyNkZWZpbmUgYnJpZGdlX3RvX21oZHAoeCkgY29udGFpbmVyX29mKHgsIHN0cnVj dCBjZG5zX21oZHBfZGV2aWNlLA0KPiBicmlkZ2UpDQo+IA0KPiBUaGVzZSB0d28gbWFjcm9zIHNo b3VsZCBnbyBiZWxvdyB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgY2Ruc19taGRwX2RldmljZQ0KPiBz dHJ1Y3R1cmUuDQo+IA0KPiA+ICsNCj4gPiArI2RlZmluZSBEUF9MSU5LX0NBUF9FTkhBTkNFRF9G UkFNSU5HIEJJVCgwKQ0KPiA+ICsNCj4gPiArc3RydWN0IGNkbnNfbWhkcF9saW5rIHsNCj4gPiAr CXVuc2lnbmVkIGNoYXIgcmV2aXNpb247DQo+ID4gKwl1bnNpZ25lZCBpbnQgcmF0ZTsNCj4gPiAr CXVuc2lnbmVkIGludCBudW1fbGFuZXM7DQo+ID4gKwl1bnNpZ25lZCBsb25nIGNhcGFiaWxpdGll czsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCBjZG5zX21oZHBfaG9zdCB7DQo+ID4gKwl1 bnNpZ25lZCBpbnQgbGlua19yYXRlOw0KPiANCj4gSWYgSSdtIG5vdCBtaXN0YWtlbiwgdGhpcyBp cyB0aGUgbWF4aW11bSBsaW5rIHJhdGUsIG5vdCB0aGUgYWN0dWFsIGxpbmsNCj4gcmF0ZS4gU2hv dWxkIGl0IGJlIHJlbmFtZWQgdG8gbWF4X2xpbmtfcmF0ZSA/DQo+IA0KPiA+ICsJdTggbGFuZXNf Y250Ow0KPiA+ICsJdTggdm9sdF9zd2luZzsNCj4gPiArCXU4IHByZV9lbXBoYXNpczsNCj4gPiAr CXU4IHBhdHRlcm5fc3VwcDsNCj4gPiArCXU4IGxhbmVfbWFwcGluZzsNCj4gPiArCXU4IGZhc3Rf bGluayA6IDE7DQo+ID4gKwl1OCBlbmhhbmNlZCA6IDE7DQo+ID4gKwl1OCBzY3JhbWJsZXIgOiAx Ow0KPiA+ICsJdTggc3NjIDogMTsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCBjZG5zX21o ZHBfc2luayB7DQo+ID4gKwl1bnNpZ25lZCBpbnQgbGlua19yYXRlOw0KPiA+ICsJdTggbGFuZXNf Y250Ow0KPiA+ICsJdTggcGF0dGVybl9zdXBwOw0KPiA+ICsJdTggZmFzdF9saW5rIDogMTsNCj4g PiArCXU4IGVuaGFuY2VkIDogMTsNCj4gPiArCXU4IHNzYyA6IDE7DQo+ID4gK307DQo+ID4gKw0K PiA+ICtzdHJ1Y3QgY2Ruc19taGRwX2Rpc3BsYXlfZm10IHsNCj4gPiArCXUzMiBjb2xvcl9mb3Jt YXQ7DQo+ID4gKwl1MzIgYnBjOw0KPiA+ICsJdTggeV9vbmx5IDogMTsNCj4gPiArfTsNCj4gPiAr DQo+ID4gKy8qDQo+ID4gKyAqIFRoZXNlIGVudW1zIHByZXNlbnQgTUhEUCBodyBpbml0aWFsaXph dGlvbiBzdGF0ZQ0KPiA+ICsgKiBMZWdhbCBzdGF0ZSB0cmFuc2l0aW9ucyBhcmU6DQo+ID4gKyAq IE1IRFBfSFdfSU5BQ1RJVkUgPC0+IE1IRFBfSFdfTE9BRElORyAtPiBNSERQX0hXX1JFQURZDQo+ ID4gKyAqICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCj4g PiArICogICAgICAgICctLS0tLS0tLS0tPiBNSERQX0hXX1NUT1BQRUQgPC0tLS0tLS0tJw0KPiA+ ICsgKi8NCj4gPiArZW51bSBtaGRwX2h3X3N0YXRlIHsgTUhEUF9IV19JTkFDVElWRSA9IDAsIC8q IEhXIG5vdCBpbml0aWFsaXplZA0KPiAqLw0KPiA+ICsJCSAgICAgTUhEUF9IV19MT0FESU5HLAkg ICAvKiBIVyBpbml0aWFsaXphdGlvbiBpbg0KPiBwcm9ncmVzcyAqLw0KPiA+ICsJCSAgICAgTUhE UF9IV19SRUFEWSwJICAgLyogSFcgcmVhZHksIEZXIGFjdGl2ZSovDQo+ID4gKwkJICAgICBNSERQ X0hXX1NUT1BQRUQgfTsJICAgLyogRHJpdmVyIHJlbW92YWwgRlcgdG8gYmUNCj4gc3RvcHBlZCAq Lw0KPiANCj4gVGhhdCdzIHdlaXJkIGluZGVudGF0aW9uLCBmb2xsb3dpbmcgdGhlIGtlcm5lbCBj b2Rpbmcgc3R5bGUgaXQgc2hvdWxkDQo+IGJlY29tZQ0KPiANCj4gZW51bSBtaGRwX2h3X3N0YXRl IHsNCj4gCU1IRFBfSFdfSU5BQ1RJVkUgPSAwLAkvKiBIVyBub3QgaW5pdGlhbGl6ZWQgKi8NCj4g CU1IRFBfSFdfTE9BRElORywJLyogSFcgaW5pdGlhbGl6YXRpb24gaW4gcHJvZ3Jlc3MgKi8NCj4g CU1IRFBfSFdfUkVBRFksCQkvKiBIVyByZWFkeSwgRlcgYWN0aXZlKi8NCj4gCU1IRFBfSFdfU1RP UFBFRCwJLyogRHJpdmVyIHJlbW92YWwgRlcgdG8gYmUgc3RvcHBlZCAqLw0KPiB9Ow0KPiANCj4g PiArDQo+ID4gK3N0cnVjdCBjZG5zX21oZHBfZGV2aWNlOw0KPiA+ICsNCj4gPiArc3RydWN0IG1o ZHBfcGxhdGZvcm1fb3BzIHsNCj4gPiArCWludCAoKmluaXQpKHN0cnVjdCBjZG5zX21oZHBfZGV2 aWNlICptaGRwKTsNCj4gPiArCXZvaWQgKCpleGl0KShzdHJ1Y3QgY2Ruc19taGRwX2RldmljZSAq bWhkcCk7DQo+ID4gKwl2b2lkICgqZW5hYmxlKShzdHJ1Y3QgY2Ruc19taGRwX2RldmljZSAqbWhk cCk7DQo+ID4gKwl2b2lkICgqZGlzYWJsZSkoc3RydWN0IGNkbnNfbWhkcF9kZXZpY2UgKm1oZHAp Ow0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IGNkbnNfbWhkcF9kZXZpY2Ugew0KPiA+ICsJ dm9pZCBfX2lvbWVtICpyZWdzOw0KPiA+ICsNCj4gPiArCXN0cnVjdCBkZXZpY2UgKmRldjsNCj4g PiArCXN0cnVjdCBjbGsgKmNsazsNCj4gPiArCXN0cnVjdCBwaHkgKnBoeTsNCj4gPiArDQo+ID4g Kwljb25zdCBzdHJ1Y3QgbWhkcF9wbGF0Zm9ybV9vcHMgKm9wczsNCj4gPiArDQo+ID4gKwkvKiBU aGlzIGlzIHRvIHByb3RlY3QgbWFpbGJveCBjb21tdW5pY2F0aW9ucyB3aXRoIHRoZSBmaXJtd2Fy ZSAqLw0KPiA+ICsJc3RydWN0IG11dGV4IG1ib3hfbXV0ZXg7DQo+ID4gKw0KPiA+ICsJc3RydWN0 IGRybV9jb25uZWN0b3IgY29ubmVjdG9yOw0KPiA+ICsJc3RydWN0IGRybV9icmlkZ2UgYnJpZGdl Ow0KPiA+ICsNCj4gPiArCXN0cnVjdCBjZG5zX21oZHBfbGluayBsaW5rOw0KPiA+ICsJc3RydWN0 IGRybV9kcF9hdXggYXV4Ow0KPiA+ICsNCj4gPiArCXN0cnVjdCBjZG5zX21oZHBfaG9zdCBob3N0 Ow0KPiA+ICsJc3RydWN0IGNkbnNfbWhkcF9zaW5rIHNpbms7DQo+ID4gKwlzdHJ1Y3QgY2Ruc19t aGRwX2Rpc3BsYXlfZm10IGRpc3BsYXlfZm10Ow0KPiA+ICsJczggc3RyZWFtX2lkOw0KPiA+ICsN Cj4gPiArCXU4IGxpbmtfdXAgOiAxOw0KPiA+ICsJdTggcGx1Z2dlZCA6IDE7DQo+ID4gKw0KPiA+ ICsJLyoNCj4gPiArCSAqICJzdGFydF9sb2NrIiBwcm90ZWN0cyB0aGUgYWNjZXNzIHRvIGJyaWRn ZV9hdHRhY2hlZCBhbmQNCj4gPiArCSAqIGh3X3N0YXRlIGRhdGEgbWVtYmVycyB0aGF0IGNvbnRy b2wgdGhlIGRlbGF5ZWQgZmlybXdhcmUNCj4gPiArCSAqIGxvYWRpbmcgYW5kIGF0dGFjaGluZyB0 aGUgYnJpZGdlLiBUaGV5IGFyZSBhY2Nlc3NlZCBmcm9tDQo+ID4gKwkgKiBib3RoIHRoZSBEUk0g Y29yZSBhbmQgbWhkcF9md19jYigpLiBJbiBtb3N0IGNhc2VzIGp1c3QNCj4gPiArCSAqIHByb3Rl Y3RpbmcgdGhlIGRhdGEgbWVtYmVycyBpcyBlbm91Z2gsIGJ1dCB0aGUgaXJxIG1hc2sNCj4gPiAr CSAqIHNldHRpbmcgbmVlZHMgdG8gYmUgcHJvdGVjdGVkIHdoZW4gZW5hYmxpbmcgdGhlIEZXLg0K PiA+ICsJICovDQo+ID4gKwlzcGlubG9ja190IHN0YXJ0X2xvY2s7DQo+ID4gKwl1OCBicmlkZ2Vf YXR0YWNoZWQgOiAxOw0KPiANCj4gRG8gd2UgcmVhbGx5IG5lZWQgdG8gbWFrZSB0aGlzIGEgc2lu Z2xlIGJpdCA/IEhvdyBhYm91dCBhIGJvb2wgPyBTYW1lDQo+IGZvciB0aGUgdHdvIGZsYWdzIGFi b3ZlLiBEb24ndCB0cnkgdG8gb3Zlci1vcHRpbWlzZSwgaW4gdGhlIGVuZCwgZHVlIHRvDQo+IGZp ZWxkIGFsaWdubWVudCwgdGhpcyB3aWxsIGNvbnN1bWUgbW9yZSB0aGFuIG9uZSBiaXQsIGFuZCBh IHNpbmdsZS1iaXQNCj4gdmFsdWUgd2lsbCBiZSBzbG93ZXIgdG8gYWNjZXNzLg0KPiANCj4gPiAr CWVudW0gbWhkcF9od19zdGF0ZSBod19zdGF0ZTsNCj4gPiArCWVudW0gZHJtX2J1c19mbGFncyBj b25uX2J1c19mbGFnc19kZWZhdWx0czsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3UzMiBjZG5zX21o ZHBfZ2V0X2JwcChzdHJ1Y3QgY2Ruc19taGRwX2Rpc3BsYXlfZm10ICpmbXQpOw0KPiA+ICt2b2lk IGNkbnNfbWhkcF9jb25maWd1cmVfdmlkZW8oc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSk7DQo+ ID4gK3ZvaWQgY2Ruc19taGRwX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKTsNCj4g DQo+IEkgZG9uJ3Qgc2VlIGFueSByZWFzb24gdG8gZXhwb3NlIHRob3NlIHRocmVlIGZ1bmN0aW9u cywgdGhleSBzaG91bGQgYmUNCj4gbWFkZSBzdGF0aWMuIFRoYXQgd2lsbCBpbnZvbHZlIHJlb3Jk ZXJpbmcgdGhlbSBpbiB0aGUgLmMgZmlsZSB0byBhdm9pZA0KPiBmb3J3YXJkIGRlY2xhcmF0aW9u cy4NCj4gDQo+ID4gKw0KPiA+ICsjZW5kaWYNCj4gDQo+IC0tDQo+IFJlZ2FyZHMsDQo+IA0KPiBM YXVyZW50IFBpbmNoYXJ0DQo=