Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp8054089ybi; Thu, 6 Jun 2019 06:03:46 -0700 (PDT) X-Google-Smtp-Source: APXvYqyrSmbkqsAhugLFyesjPJ+ojvrQBuzZ8LhPC3Ac3Xm3tx40+5PC+23Ij5O9Lou7eIR6q9sx X-Received: by 2002:a17:90a:8a10:: with SMTP id w16mr50648327pjn.133.1559826226229; Thu, 06 Jun 2019 06:03:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1559826226; cv=none; d=google.com; s=arc-20160816; b=rLKaWMFqDlMqdqcVhEWk9leNCyCI4GlQTf+ARFDPwxzo8YY+TO46HFfKN3iRJPl6/u jubUwwV7QTvhKy5jdXyw6NR8+Oxv9DbDF5Of4ZnmEMcWGR6R2iZnxo5OW5/5HR7t87AL JJLq8F3vlfWxqTa/9NKoDTA7aiGwbySvrWLuG4dciW8tk6FvmROhZdPoNSmicq8tovwS TQ5lYDgoMEDNzHfbjANnvarqyeMfHlGTQ2GfIRKLoVlFR1JjPirNqtliyzXgB7fXoHhA 3G9ecXfyCbFgwuYSqBUVQuf8ten5HTc8stL6mZ8aVrjbZ2n+1AJqeWM5PU+ucvpTogcB 2nKQ== ARC-Message-Signature: i=1; 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:to:from:dkim-signature; bh=kHbclVOTRqcDs0OuSfV9RCTcOgDem69hv+np2UKsXvI=; b=vE4iZEFvWOw0QsetI9OxrVNs24Wx/vatudTGvmW5duHPRZ7xteNDr5tUw0RYMwPAyO sG62pfTCZrBAkB7mBU8d0mZ28z4PAi4C18kIcgYKueve3EUuO9P3G3OlSzVoPd6rAOx5 MwddRNJj6SrwKa/dy4U2O05SAAQS6X9R+mkBa7kRljYK5Td4RjTfpiKF/B2SzGsOEQBM P7vz7k824rZ3+0urzPzC97UTgyBHg/D9B3TsV1hilo77UJie/RUaNwD4qr4LupA/sUow pqKjY/0NM3cYrvW1fQC1r2fYx105Y2f5B4x/ilpgWH4iLrrDkXf9DZ06P+TQX3ugnJby GjWw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@xilinx.onmicrosoft.com header.s=selector1-xilinx-onmicrosoft-com header.b=fFus9TTC; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w15si1723586ply.68.2019.06.06.06.03.27; Thu, 06 Jun 2019 06:03:46 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@xilinx.onmicrosoft.com header.s=selector1-xilinx-onmicrosoft-com header.b=fFus9TTC; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728471AbfFFMli (ORCPT + 99 others); Thu, 6 Jun 2019 08:41:38 -0400 Received: from mail-eopbgr680056.outbound.protection.outlook.com ([40.107.68.56]:7138 "EHLO NAM04-BN3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727486AbfFFMlg (ORCPT ); Thu, 6 Jun 2019 08:41:36 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xilinx.onmicrosoft.com; s=selector1-xilinx-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=kHbclVOTRqcDs0OuSfV9RCTcOgDem69hv+np2UKsXvI=; b=fFus9TTC4UV9r5kGqs13AGWmddG3M4s/P2JkEf5ERPaNtEYQfUfPZvfB3nyRL0da0Pif6Pjo5OQ+NXM0tkHHDbv6DiTNCRSrKbjZwqtIBho7tR5EdyVqsX4InrGBeEbqgaKuE8tCukjw/Nnlpjym2bI9ucxDQlp5lYEmRb4KzrQ= Received: from CH2PR02MB6088.namprd02.prod.outlook.com (52.132.228.94) by CH2PR02MB6199.namprd02.prod.outlook.com (52.132.229.225) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1965.12; Thu, 6 Jun 2019 12:38:30 +0000 Received: from CH2PR02MB6088.namprd02.prod.outlook.com ([fe80::3cca:e795:ebe2:b366]) by CH2PR02MB6088.namprd02.prod.outlook.com ([fe80::3cca:e795:ebe2:b366%6]) with mapi id 15.20.1943.018; Thu, 6 Jun 2019 12:38:30 +0000 From: Vishal Sagar To: Hans Verkuil , Vishal Sagar , Hyun Kwon , "laurent.pinchart@ideasonboard.com" , "mchehab@kernel.org" , "robh+dt@kernel.org" , "mark.rutland@arm.com" , Michal Simek , "linux-media@vger.kernel.org" , "devicetree@vger.kernel.org" , "sakari.ailus@linux.intel.com" , "hans.verkuil@cisco.com" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , Dinesh Kumar , Sandip Kothari , Luca Ceresoli , Jacopo Mondi Subject: RE: [PATCH v8 2/2] media: v4l: xilinx: Add Xilinx MIPI CSI-2 Rx Subsystem driver Thread-Topic: [PATCH v8 2/2] media: v4l: xilinx: Add Xilinx MIPI CSI-2 Rx Subsystem driver Thread-Index: AQHVGfMaAKfbOTEUHkuDr9l8JJ/e/6aNBNwAgAGILJA= Date: Thu, 6 Jun 2019 12:38:29 +0000 Message-ID: References: <1559555971-193235-1-git-send-email-vishal.sagar@xilinx.com> <1559555971-193235-3-git-send-email-vishal.sagar@xilinx.com> <2a21e26e-35f2-635c-b99f-89e7e100ce11@xs4all.nl> In-Reply-To: <2a21e26e-35f2-635c-b99f-89e7e100ce11@xs4all.nl> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=vsagar@xilinx.com; x-originating-ip: [149.199.50.133] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 92638d00-5ccb-4e65-c4d7-08d6ea7be14c x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020);SRVR:CH2PR02MB6199; x-ms-traffictypediagnostic: CH2PR02MB6199: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:169; x-forefront-prvs: 00603B7EEF x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(136003)(39860400002)(396003)(376002)(346002)(366004)(199004)(189003)(45074003)(13464003)(66946007)(53546011)(55016002)(76176011)(66556008)(6506007)(316002)(229853002)(8936002)(71200400001)(71190400001)(476003)(68736007)(6436002)(66446008)(486006)(26005)(102836004)(7696005)(446003)(11346002)(186003)(2906002)(30864003)(7416002)(64756008)(99286004)(66476007)(73956011)(25786009)(76116006)(305945005)(2501003)(81156014)(66066001)(5660300002)(52536014)(110136005)(3846002)(14454004)(33656002)(478600001)(6116002)(74316002)(2201001)(9686003)(8676002)(6246003)(256004)(53946003)(53936002)(86362001)(7736002)(81166006)(14444005)(921003)(1121003)(579004)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:CH2PR02MB6199;H:CH2PR02MB6088.namprd02.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: xilinx.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: ZX04DitCQ88K0LR9B/GA/qgS4nnxdHcG/KH9yzUxf+OQVNgslsSCidcYoD8EXSCYSbs1F6LBPnm622dJpaUkQLGpqi3soH/op1+Oa/QXG8nNJ6xGWsWKUwGTpcycHUPeBQq7SL2Mx2ZcvIctbSJMKP6GW+Zq9xOB1cYHhzmhGs6UOqwlSott+ttjgrScsRNIyyLV+gnENkKsXnGSSZaEUNExd4dbZl1xOub4GlwnNNInheQm9cGf/Xbt3j2agyNIB0dV6p5ljaDBbHApfQ3ql3hi7DU379fr+o08BEGdqkoEexxeOj4RJrm/FMUVBSjOBWcmVPXim1k0k933hKva24168SZ7fc2vJa1tjfsylgMf7GudFRFkDtcxwzrVmjgNvtQcPwStaf6MmsFAPXsQWoCYRFA2ut3ErFcg0H3DZxo= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-Network-Message-Id: 92638d00-5ccb-4e65-c4d7-08d6ea7be14c X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Jun 2019 12:38:30.0086 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: vsagar@xilinx.com X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR02MB6199 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgSGFucywNCg0KVGhhbmtzIGZvciByZXZpZXdpbmcuDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNz YWdlLS0tLS0NCj4gRnJvbTogSGFucyBWZXJrdWlsIFttYWlsdG86aHZlcmt1aWxAeHM0YWxsLm5s XQ0KPiBTZW50OiBXZWRuZXNkYXksIEp1bmUgMDUsIDIwMTkgNjoxNCBQTQ0KPiBUbzogVmlzaGFs IFNhZ2FyIDx2aXNoYWwuc2FnYXJAeGlsaW54LmNvbT47IEh5dW4gS3dvbiA8aHl1bmtAeGlsaW54 LmNvbT47DQo+IGxhdXJlbnQucGluY2hhcnRAaWRlYXNvbmJvYXJkLmNvbTsgbWNoZWhhYkBrZXJu ZWwub3JnOw0KPiByb2JoK2R0QGtlcm5lbC5vcmc7IG1hcmsucnV0bGFuZEBhcm0uY29tOyBNaWNo YWwgU2ltZWsNCj4gPG1pY2hhbHNAeGlsaW54LmNvbT47IGxpbnV4LW1lZGlhQHZnZXIua2VybmVs Lm9yZzsNCj4gZGV2aWNldHJlZUB2Z2VyLmtlcm5lbC5vcmc7IHNha2FyaS5haWx1c0BsaW51eC5p bnRlbC5jb207DQo+IGhhbnMudmVya3VpbEBjaXNjby5jb207IGxpbnV4LWFybS1rZXJuZWxAbGlz dHMuaW5mcmFkZWFkLm9yZzsgbGludXgtDQo+IGtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7IERpbmVz aCBLdW1hciA8ZGluZXNoa0B4aWxpbnguY29tPjsgU2FuZGlwIEtvdGhhcmkNCj4gPHNhbmRpcGtA eGlsaW54LmNvbT47IEx1Y2EgQ2VyZXNvbGkgPGx1Y2FAbHVjYWNlcmVzb2xpLm5ldD47IEphY29w byBNb25kaQ0KPiA8amFjb3BvQGptb25kaS5vcmc+DQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjgg Mi8yXSBtZWRpYTogdjRsOiB4aWxpbng6IEFkZCBYaWxpbnggTUlQSSBDU0ktMiBSeA0KPiBTdWJz eXN0ZW0gZHJpdmVyDQo+IA0KPiBFWFRFUk5BTCBFTUFJTA0KPiANCj4gSGkgVmlzaGFsLA0KPiAN Cj4gU29tZSBjb21tZW50cyBiZWxvdy4uLg0KPiANCj4gT24gNi8zLzE5IDExOjU5IEFNLCBWaXNo YWwgU2FnYXIgd3JvdGU6DQo+ID4gVGhlIFhpbGlueCBNSVBJIENTSS0yIFJ4IFN1YnN5c3RlbSBz b2Z0IElQIGlzIHVzZWQgdG8gY2FwdHVyZSBpbWFnZXMNCj4gPiBmcm9tIE1JUEkgQ1NJLTIgY2Ft ZXJhIHNlbnNvcnMgYW5kIG91dHB1dCBBWEk0LVN0cmVhbSB2aWRlbyBkYXRhIHJlYWR5DQo+ID4g Zm9yIGltYWdlIHByb2Nlc3NpbmcuIFBsZWFzZSByZWZlciB0byBQRzIzMiBmb3IgZGV0YWlscy4N Cj4gPg0KPiA+IFRoZSBkcml2ZXIgaXMgdXNlZCB0byBzZXQgdGhlIG51bWJlciBvZiBhY3RpdmUg bGFuZXMsIGlmIGVuYWJsZWQNCj4gPiBpbiBoYXJkd2FyZS4gVGhlIENTSTIgUnggY29udHJvbGxl ciBmaWx0ZXJzIG91dCBhbGwgcGFja2V0cyBleGNlcHQgZm9yDQo+ID4gdGhlIHBhY2tldHMgd2l0 aCBkYXRhIHR5cGUgZml4ZWQgaW4gaGFyZHdhcmUuIFJBVzggcGFja2V0cyBhcmUgYWx3YXlzDQo+ ID4gYWxsb3dlZCB0byBwYXNzIHRocm91Z2guDQo+ID4NCj4gPiBJdCBpcyBhbHNvIHVzZWQgdG8g c2V0dXAgYW5kIGhhbmRsZSBpbnRlcnJ1cHRzIGFuZCBlbmFibGUgdGhlIGNvcmUuIEl0DQo+ID4g bG9ncyBhbGwgdGhlIGV2ZW50cyBpbiByZXNwZWN0aXZlIGNvdW50ZXJzIGJldHdlZW4gc3RyZWFt aW5nIG9uIGFuZCBvZmYuDQo+ID4NCj4gPiBUaGUgZHJpdmVyIHN1cHBvcnRzIG9ubHkgdGhlIHZp ZGVvIGZvcm1hdCBicmlkZ2UgZW5hYmxlZCBjb25maWd1cmF0aW9uLg0KPiA+IFNvbWUgZGF0YSB0 eXBlcyBsaWtlIFlVViA0MjIgMTBicGMsIFJBVzE2LCBSQVcyMCBhcmUgc3VwcG9ydGVkIHdoZW4N Cj4gdGhlDQo+ID4gQ1NJIHYyLjAgZmVhdHVyZSBpcyBlbmFibGVkIGluIGRlc2lnbi4gV2hlbiB0 aGUgVkNYIGZlYXR1cmUgaXMgZW5hYmxlZCwNCj4gPiB0aGUgbWF4aW11bSBudW1iZXIgb2Ygdmly dHVhbCBjaGFubmVscyBiZWNvbWVzIDE2IGZyb20gNC4NCj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6 IFZpc2hhbCBTYWdhciA8dmlzaGFsLnNhZ2FyQHhpbGlueC5jb20+DQo+ID4gUmV2aWV3ZWQtYnk6 IEh5dW4gS3dvbiA8aHl1bi5rd29uQHhpbGlueC5jb20+DQo+ID4gLS0tDQo+ID4gdjgNCj4gPiAt IFVzZSBjbGtfYnVsayogQVBJcw0KPiA+IC0gQWRkIGdwaW8gcmVzZXQgZm9yIGFzc2VydGluZyB2 aWRlb19hcmVzZXRuIHdoZW4gc3RyZWFtIGxpbmUgYnVmZmVyIG9jY3Vycw0KPiA+IC0gUmVtb3Zl ZCBzaG9ydCBwYWNrZXQgcmVsYXRlZCBldmVudHMgYW5kIGlycSBoYW5kbGluZw0KPiA+ICAgLSBW NEwyX0VWRU5UX1hMTlhDU0lSWF9TUEtUIGFuZCBWNEwyX0VWRU5UX1hMTlhDU0lSWF9TUEtUX09W Rg0KPiByZW1vdmVkDQo+ID4gLSBSZW1vdmVkIGZyYW1lIGNvdW50ZXIgY29udHJvbA0KPiBWNEwy X0NJRF9YSUxJTlhfTUlQSUNTSVNTX0ZSQU1FX0NPVU5URVINCj4gPiAgIGFuZCB4Y3NpMnJ4c3Nf Z192b2xhdGlsZV9jdHJsKCkNCj4gPiAtIE1pbm9yIGZvcm1hdHRpbmcgZml4ZXMNCj4gPg0KPiA+ IHY3DQo+ID4gLSBObyBjaGFuZ2UNCj4gPg0KPiA+IHY2DQo+ID4gLSBObyBjaGFuZ2UNCj4gPg0K PiA+IHY1DQo+ID4gLSBSZW1vdmVkIGJheWVyIGFuZCB1cGRhdGVkIHJlbGF0ZWQgcGFydHMgbGlr ZSBzZXQgZGVmYXVsdCBmb3JtYXQgYmFzZWQNCj4gPiAgIG9uIEx1Y2EgQ2Vyc29saSdzIGNvbW1l bnRzLg0KPiA+IC0gQWRkZWQgY29ycmVjdCBZVVY0MjIgMTBicGMgbWVkaWEgYnVzIGZvcm1hdA0K PiA+DQo+ID4gdjQNCj4gPiAtIFJlbW92ZWQgaXJxIG1lbWJlciBmcm9tIGNvcmUgc3RydWN0dXJl DQo+ID4gLSBDb25zb2xpZGF0ZWQgSVAgY29uZmlnIHByaW50cyBpbiB4Y3NpMnJ4c3NfbG9nX2lw Y29uZmlnKCkNCj4gPiAtIFJldHVybiAtRUlOVkFMIGluIGNhc2Ugb2YgaW52YWxpZCBpb2N0bA0K PiA+IC0gQ29kZSBmb3JtYXR0aW5nDQo+ID4gLSBBZGRlZCByZXZpZXdlZCBieSBIeXVuIEt3b24N Cj4gPg0KPiA+IHYzDQo+ID4gLSBGaXhlZCBjb21tZW50cyBnaXZlbiBieSBIeXVuLg0KPiA+IC0g UmVtb3ZlZCBEUEhZIDIwMCBNSHogY2xvY2suIFRoaXMgd2lsbCBiZSBjb250cm9sbGVkIGJ5IERQ SFkgZHJpdmVyDQo+ID4gLSBNaW5vciBjb2RlIGZvcm1hdHRpbmcNCj4gPiAtIGVuX2NzaV92MjAg YW5kIHZmYiBtZW1iZXJzIHJlbW92ZWQgZnJvbSBzdHJ1Y3QgYW5kIG1hZGUgbG9jYWwgdG8gZHQN Cj4gcGFyc2luZw0KPiA+IC0gbG9jayBkZXNjcmlwdGlvbiB1cGRhdGVkDQo+ID4gLSBjaGFuZ2Vk IHRvIHJhdGVsaW1pdGVkIHR5cGUgZm9yIGFsbCBkZXYgcHJpbnRzIGluIGlycSBoYW5kbGVyDQo+ ID4gLSBSZW1vdmVkIFlVViA0MjIgMTBicGMgbWVkaWEgZm9ybWF0DQo+ID4NCj4gPiB2Mg0KPiA+ IC0gRml4ZWQgY29tbWVudHMgZ2l2ZW4gYnkgSHl1biBhbmQgU2FrYXJpLg0KPiA+IC0gTWFkZSBh bGwgYml0bWFzayB1c2luZyBCSVQoKSBhbmQgR0VOTUFTSygpDQo+ID4gLSBSZW1vdmVkIHVudXNl ZCBkZWZpbml0aW9ucw0KPiA+IC0gUmVtb3ZlZCBEUEhZIGFjY2Vzcy4gVGhpcyB3aWxsIGJlIGRv bmUgYnkgc2VwYXJhdGUgRFBIWSBQSFkgZHJpdmVyLg0KPiA+IC0gQWRkZWQgc3VwcG9ydCBmb3Ig Q1NJIHYyLjAgZm9yIFlVViA0MjIgMTBicGMsIFJBVzE2LCBSQVcyMCBhbmQgZXh0cmENCj4gPiAg IHZpcnR1YWwgY2hhbm5lbHMNCj4gPiAtIEZpeGVkIHRoZSBwb3J0cyBhcyBzaW5rIGFuZCBzb3Vy Y2UNCj4gPiAtIE5vdyB1c2UgdGhlIHY0bDJmd25vZGUgQVBJIHRvIGdldCBudW1iZXIgb2YgZGF0 YS1sYW5lcw0KPiA+IC0gQWRkZWQgY2xvY2sgZnJhbWV3b3JrIHN1cHBvcnQNCj4gPiAtIFJlbW92 ZWQgdGhlIGNsb3NlKCkgZnVuY3Rpb24NCj4gPiAtIHVwZGF0ZWQgdGhlIHNldCBmb3JtYXQgZnVu Y3Rpb24NCj4gPiAtIHN1cHBvcnQgb25seSBWRkIgZW5hYmxlZCBjb25maWd1cmF0aW9uDQo+ID4N Cj4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS94aWxpbngvS2NvbmZpZyAgICAgICAgICAgfCAg IDEwICsNCj4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS94aWxpbngvTWFrZWZpbGUgICAgICAg ICAgfCAgICAxICsNCj4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS94aWxpbngveGlsaW54LWNz aTJyeHNzLmMgfCAxNDA2DQo+ICsrKysrKysrKysrKysrKysrKysrKysrDQo+ID4gIGluY2x1ZGUv dWFwaS9saW51eC94aWxpbngtdjRsMi1jb250cm9scy5oICAgICAgIHwgICAxMiArDQo+ID4gIGlu Y2x1ZGUvdWFwaS9saW51eC94aWxpbngtdjRsMi1ldmVudHMuaCAgICAgICAgIHwgICAyMSArDQo+ ID4gIDUgZmlsZXMgY2hhbmdlZCwgMTQ1MCBpbnNlcnRpb25zKCspDQo+ID4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3hpbGlueC94aWxpbngtY3NpMnJ4c3MuYw0K PiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS91YXBpL2xpbnV4L3hpbGlueC12NGwyLWV2 ZW50cy5oDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS94aWxp bngvS2NvbmZpZw0KPiBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L0tjb25maWcNCj4g PiBpbmRleCBhMjc3M2FkLi5jZDFhMGZkIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvbWVkaWEv cGxhdGZvcm0veGlsaW54L0tjb25maWcNCj4gPiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3Jt L3hpbGlueC9LY29uZmlnDQo+ID4gQEAgLTEwLDYgKzEwLDE2IEBAIGNvbmZpZyBWSURFT19YSUxJ TlgNCj4gPg0KPiA+ICBpZiBWSURFT19YSUxJTlgNCj4gPg0KPiA+ICtjb25maWcgVklERU9fWElM SU5YX0NTSTJSWFNTDQo+ID4gKyAgICAgdHJpc3RhdGUgIlhpbGlueCBDU0kyIFJ4IFN1YnN5c3Rl bSINCj4gPiArICAgICBoZWxwDQo+ID4gKyAgICAgICBEcml2ZXIgZm9yIFhpbGlueCBNSVBJIENT STIgUnggU3Vic3lzdGVtLiBUaGlzIGlzIGEgVjRMIHN1Yi1kZXZpY2UNCj4gPiArICAgICAgIGJh c2VkIGRyaXZlciB0aGF0IHRha2VzIGlucHV0IGZyb20gQ1NJMiBUeCBzb3VyY2UgYW5kIGNvbnZl cnRzDQo+ID4gKyAgICAgICBpdCBpbnRvIGFuIEFYSTQtU3RyZWFtLiBUaGUgc3Vic3lzdGVtIGNv bXByaXNlcyBvZiBhIENTSTIgUngNCj4gPiArICAgICAgIGNvbnRyb2xsZXIsIERQSFksIGFuIG9w dGlvbmFsIEkyQyBjb250cm9sbGVyIGFuZCBhIFZpZGVvIEZvcm1hdA0KPiA+ICsgICAgICAgQnJp ZGdlLiBUaGUgZHJpdmVyIGlzIHVzZWQgdG8gc2V0IHRoZSBudW1iZXIgb2YgYWN0aXZlIGxhbmVz IGFuZA0KPiA+ICsgICAgICAgZ2V0IHNob3J0IHBhY2tldCBkYXRhLg0KPiA+ICsNCj4gPiAgY29u ZmlnIFZJREVPX1hJTElOWF9UUEcNCj4gPiAgICAgICB0cmlzdGF0ZSAiWGlsaW54IFZpZGVvIFRl c3QgUGF0dGVybiBHZW5lcmF0b3IiDQo+ID4gICAgICAgZGVwZW5kcyBvbiBWSURFT19YSUxJTlgN Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS94aWxpbngvTWFrZWZpbGUN Cj4gYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3hpbGlueC9NYWtlZmlsZQ0KPiA+IGluZGV4IDRj ZGMwYjEuLjYxMTlhMzQgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS94 aWxpbngvTWFrZWZpbGUNCj4gPiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3hpbGlueC9N YWtlZmlsZQ0KPiA+IEBAIC0zLDUgKzMsNiBAQA0KPiA+ICB4aWxpbngtdmlkZW8tb2JqcyArPSB4 aWxpbngtZG1hLm8geGlsaW54LXZpcC5vIHhpbGlueC12aXBwLm8NCj4gPg0KPiA+ICBvYmotJChD T05GSUdfVklERU9fWElMSU5YKSArPSB4aWxpbngtdmlkZW8ubw0KPiA+ICtvYmotJChDT05GSUdf VklERU9fWElMSU5YX0NTSTJSWFNTKSArPSB4aWxpbngtY3NpMnJ4c3Mubw0KPiA+ICBvYmotJChD T05GSUdfVklERU9fWElMSU5YX1RQRykgKz0geGlsaW54LXRwZy5vDQo+ID4gIG9iai0kKENPTkZJ R19WSURFT19YSUxJTlhfVlRDKSArPSB4aWxpbngtdnRjLm8NCj4gPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9tZWRpYS9wbGF0Zm9ybS94aWxpbngveGlsaW54LWNzaTJyeHNzLmMNCj4gYi9kcml2ZXJz L21lZGlhL3BsYXRmb3JtL3hpbGlueC94aWxpbngtY3NpMnJ4c3MuYw0KPiA+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMC4uNTFiYjgwYw0KPiA+IC0tLSAvZGV2L251bGwN Cj4gPiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3hpbGlueC94aWxpbngtY3NpMnJ4c3Mu Yw0KPiA+IEBAIC0wLDAgKzEsMTQwNiBAQA0KPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMCsNCj4gPiArLyoNCj4gPiArICogRHJpdmVyIGZvciBYaWxpbnggTUlQSSBDU0ky IFJ4IFN1YnN5c3RlbQ0KPiA+ICsgKg0KPiA+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTYgLSAyMDE5 IFhpbGlueCwgSW5jLg0KPiA+ICsgKg0KPiA+ICsgKiBDb250YWN0czogVmlzaGFsIFNhZ2FyIDx2 aXNoYWwuc2FnYXJAeGlsaW54LmNvbT4NCj4gPiArICoNCj4gPiArICovDQo+ID4gKyNpbmNsdWRl IDxsaW51eC9jbGsuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQo+ID4gKyNpbmNs dWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1 cHQuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGlu dXgvbXV0ZXguaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L29mLmg+DQo+ID4gKyNpbmNsdWRlIDxs aW51eC9vZl9pcnEuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPg0K PiA+ICsjaW5jbHVkZSA8bGludXgvdjRsMi1zdWJkZXYuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4 L3hpbGlueC12NGwyLWNvbnRyb2xzLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC94aWxpbngtdjRs Mi1ldmVudHMuaD4NCj4gPiArI2luY2x1ZGUgPG1lZGlhL21lZGlhLWVudGl0eS5oPg0KPiA+ICsj aW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4NCj4gPiArI2luY2x1ZGUgPG1lZGlhL3Y0bDIt Y3RybHMuaD4NCj4gPiArI2luY2x1ZGUgPG1lZGlhL3Y0bDItZXZlbnQuaD4NCj4gPiArI2luY2x1 ZGUgPG1lZGlhL3Y0bDItZndub2RlLmg+DQo+ID4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLXN1YmRl di5oPg0KPiA+ICsjaW5jbHVkZSAieGlsaW54LXZpcC5oIg0KPiA+ICsNCj4gPiArLyogUmVnaXN0 ZXIgcmVnaXN0ZXIgbWFwICovDQo+ID4gKyNkZWZpbmUgWENTSV9DQ1JfT0ZGU0VUICAgICAgICAg ICAgICAweDAwDQo+ID4gKyNkZWZpbmUgWENTSV9DQ1JfU09GVFJFU0VUICAgQklUKDEpDQo+ID4g KyNkZWZpbmUgWENTSV9DQ1JfRU5BQkxFICAgICAgICAgICAgICBCSVQoMCkNCj4gPiArDQo+ID4g KyNkZWZpbmUgWENTSV9QQ1JfT0ZGU0VUICAgICAgICAgICAgICAweDA0DQo+ID4gKyNkZWZpbmUg WENTSV9QQ1JfTUFYTEFORVNfTUFTSyAgICAgICBHRU5NQVNLKDQsIDMpDQo+ID4gKyNkZWZpbmUg WENTSV9QQ1JfQUNUTEFORVNfTUFTSyAgICAgICBHRU5NQVNLKDEsIDApDQo+ID4gKw0KPiA+ICsj ZGVmaW5lIFhDU0lfQ1NSX09GRlNFVCAgICAgICAgICAgICAgMHgxMA0KPiA+ICsjZGVmaW5lIFhD U0lfQ1NSX1BLVENOVCAgICAgICAgICAgICAgR0VOTUFTSygzMSwgMTYpDQo+ID4gKyNkZWZpbmUg WENTSV9DU1JfU1BGSUZPRlVMTCAgQklUKDMpDQo+ID4gKyNkZWZpbmUgWENTSV9DU1JfU1BGSUZP TkUgICAgQklUKDIpDQo+ID4gKyNkZWZpbmUgWENTSV9DU1JfU0xCRiAgICAgICAgICAgICAgICBC SVQoMSkNCj4gPiArI2RlZmluZSBYQ1NJX0NTUl9SSVBDRCAgICAgICAgICAgICAgIEJJVCgwKQ0K PiA+ICsNCj4gPiArI2RlZmluZSBYQ1NJX0dJRVJfT0ZGU0VUICAgICAweDIwDQo+ID4gKyNkZWZp bmUgWENTSV9HSUVSX0dJRSAgICAgICAgICAgICAgICBCSVQoMCkNCj4gPiArDQo+ID4gKyNkZWZp bmUgWENTSV9JU1JfT0ZGU0VUICAgICAgICAgICAgICAweDI0DQo+ID4gKyNkZWZpbmUgWENTSV9J RVJfT0ZGU0VUICAgICAgICAgICAgICAweDI4DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhDU0lfSVNS X0ZSICAgICAgICAgIEJJVCgzMSkNCj4gPiArI2RlZmluZSBYQ1NJX0lTUl9WQ1hGRSAgICAgICAg ICAgICAgIEJJVCgzMCkNCj4gPiArI2RlZmluZSBYQ1NJX0lTUl9XQ0MgICAgICAgICBCSVQoMjIp DQo+ID4gKyNkZWZpbmUgWENTSV9JU1JfSUxDICAgICAgICAgQklUKDIxKQ0KPiA+ICsjZGVmaW5l IFhDU0lfSVNSX1NQRklGT0YgICAgIEJJVCgyMCkNCj4gPiArI2RlZmluZSBYQ1NJX0lTUl9TUEZJ Rk9ORSAgICBCSVQoMTkpDQo+ID4gKyNkZWZpbmUgWENTSV9JU1JfU0xCRiAgICAgICAgICAgICAg ICBCSVQoMTgpDQo+ID4gKyNkZWZpbmUgWENTSV9JU1JfU1RPUCAgICAgICAgICAgICAgICBCSVQo MTcpDQo+ID4gKyNkZWZpbmUgWENTSV9JU1JfU09URVJSICAgICAgICAgICAgICBCSVQoMTMpDQo+ ID4gKyNkZWZpbmUgWENTSV9JU1JfU09UU1lOQ0VSUiAgQklUKDEyKQ0KPiA+ICsjZGVmaW5lIFhD U0lfSVNSX0VDQzJCRVJSICAgIEJJVCgxMSkNCj4gPiArI2RlZmluZSBYQ1NJX0lTUl9FQ0MxQkVS UiAgICBCSVQoMTApDQo+ID4gKyNkZWZpbmUgWENTSV9JU1JfQ1JDRVJSICAgICAgICAgICAgICBC SVQoOSkNCj4gPiArI2RlZmluZSBYQ1NJX0lTUl9EQVRBSURFUlIgICBCSVQoOCkNCj4gPiArI2Rl ZmluZSBYQ1NJX0lTUl9WQzNGU1lOQ0VSUiBCSVQoNykNCj4gPiArI2RlZmluZSBYQ1NJX0lTUl9W QzNGTFZMRVJSICBCSVQoNikNCj4gPiArI2RlZmluZSBYQ1NJX0lTUl9WQzJGU1lOQ0VSUiBCSVQo NSkNCj4gPiArI2RlZmluZSBYQ1NJX0lTUl9WQzJGTFZMRVJSICBCSVQoNCkNCj4gPiArI2RlZmlu ZSBYQ1NJX0lTUl9WQzFGU1lOQ0VSUiBCSVQoMykNCj4gPiArI2RlZmluZSBYQ1NJX0lTUl9WQzFG TFZMRVJSICBCSVQoMikNCj4gPiArI2RlZmluZSBYQ1NJX0lTUl9WQzBGU1lOQ0VSUiBCSVQoMSkN Cj4gPiArI2RlZmluZSBYQ1NJX0lTUl9WQzBGTFZMRVJSICBCSVQoMCkNCj4gPiArDQo+ID4gKyNk ZWZpbmUgWENTSV9JTlRSX1BST1RfTUFTSyAgKFhDU0lfSVNSX1ZDM0ZTWU5DRVJSIHwNCj4gWENT SV9JU1JfVkMzRkxWTEVSUiB8XA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBY Q1NJX0lTUl9WQzJGU1lOQ0VSUiB8IFhDU0lfSVNSX1ZDMkZMVkxFUlIgfFwNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgWENTSV9JU1JfVkMxRlNZTkNFUlIgfCBYQ1NJX0lTUl9W QzFGTFZMRVJSIHxcDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDU0lfSVNS X1ZDMEZTWU5DRVJSIHwgWENTSV9JU1JfVkMwRkxWTEVSUiB8XA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBYQ1NJX0lTUl9WQ1hGRSkNCj4gPiArDQo+ID4gKyNkZWZpbmUgWENT SV9JTlRSX1BLVExWTF9NQVNLICAgICAgICAoWENTSV9JU1JfRUNDMkJFUlIgfA0KPiBYQ1NJX0lT Ul9FQ0MxQkVSUiB8XA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1NJX0lT Ul9DUkNFUlIgfCBYQ1NJX0lTUl9EQVRBSURFUlIpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhDU0lf SU5UUl9EUEhZX01BU0sgIChYQ1NJX0lTUl9TT1RFUlIgfA0KPiBYQ1NJX0lTUl9TT1RTWU5DRVJS KQ0KPiA+ICsNCj4gPiArI2RlZmluZSBYQ1NJX0lOVFJfU1BLVF9NQVNLICAoWENTSV9JU1JfU1BG SUZPRiB8IFhDU0lfSVNSX1NQRklGT05FKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBYQ1NJX0lOVFJf RVJSX01BU0sgICAoWENTSV9JU1JfV0NDIHwgWENTSV9JU1JfSUxDIHwNCj4gWENTSV9JU1JfU0xC RiB8XA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1NJX0lTUl9TVE9QKQ0K PiA+ICsNCj4gPiArI2RlZmluZSBYQ1NJX0lOVFJfRlJBTUVSQ1ZEX01BU0sgICAgIChYQ1NJX0lT Ul9GUikNCj4gPiArDQo+ID4gKyNkZWZpbmUgWENTSV9JU1JfQUxMSU5UUl9NQVNLICAgICAgICAo WENTSV9JTlRSX1BST1RfTUFTSyB8DQo+IFhDU0lfSU5UUl9QS1RMVkxfTUFTSyB8XA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1NJX0lOVFJfRFBIWV9NQVNLIHwgWENTSV9J TlRSX1NQS1RfTUFTSyB8XA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1NJ X0lOVFJfRVJSX01BU0sgfCBYQ1NJX0lOVFJfRlJBTUVSQ1ZEX01BU0spDQo+ID4gKw0KPiA+ICsv Kg0KPiA+ICsgKiBSZW1vdmVkIFZDWEZFIG1hc2sgYXMgaXQgZG9lc24ndCBleGlzdCBpbiBJRVIN Cj4gPiArICogUmVtb3ZlZCBTVE9QIHN0YXRlIGlycSBhcyB0aGlzIHdpbGwga2VlcCBkcml2ZXIg aW4gaXJxIGhhbmRsZXIgb25seQ0KPiA+ICsgKi8NCj4gPiArI2RlZmluZSBYQ1NJX0lFUl9JTlRS X01BU0sgICAoWENTSV9JU1JfQUxMSU5UUl9NQVNLICZcDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIH4oWENTSV9JU1JfU1RPUCB8IFhDU0lfSVNSX1ZDWEZFKSkNCj4gPiArDQo+ ID4gKyNkZWZpbmUgWENTSV9TUEtUUl9PRkZTRVQgICAgMHgzMA0KPiA+ICsjZGVmaW5lIFhDU0lf U1BLVFJfREFUQSAgICAgICAgICAgICAgR0VOTUFTSygyMywgOCkNCj4gPiArI2RlZmluZSBYQ1NJ X1NQS1RSX1ZDICAgICAgICAgICAgICAgIEdFTk1BU0soNywgNikNCj4gPiArI2RlZmluZSBYQ1NJ X1NQS1RSX0RUICAgICAgICAgICAgICAgIEdFTk1BU0soNSwgMCkNCj4gPiArDQo+ID4gKyNkZWZp bmUgWENTSV9WQ1hSX09GRlNFVCAgICAgMHgzNA0KPiA+ICsjZGVmaW5lIFhDU0lfVkNYUl9WQ0VS UiAgICAgICAgICAgICAgR0VOTUFTSygyMywgMCkNCj4gPiArI2RlZmluZSBYQ1NJX1ZDWFJfVkNT VEFSVCAgICA0DQo+ID4gKyNkZWZpbmUgWENTSV9WQ1hSX1ZDRU5EICAgICAgICAgICAgICAxNQ0K PiA+ICsjZGVmaW5lIFhDU0lfVkNYUl9GU1lOQ0VSUiAgIEJJVCgxKQ0KPiA+ICsjZGVmaW5lIFhD U0lfVkNYUl9GTFZMRVJSICAgIEJJVCgwKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBYQ1NJX0NMS0lO RlJfT0ZGU0VUICAweDNDDQo+ID4gKyNkZWZpbmUgWENTSV9DTEtJTkZSX1NUT1AgICAgQklUKDEp DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhDU0lfRExYSU5GUl9PRkZTRVQgIDB4NDANCj4gPiArI2Rl ZmluZSBYQ1NJX0RMWElORlJfU1RPUCAgICBCSVQoNSkNCj4gPiArI2RlZmluZSBYQ1NJX0RMWElO RlJfU09URVJSICBCSVQoMSkNCj4gPiArI2RlZmluZSBYQ1NJX0RMWElORlJfU09UU1lOQ0VSUiAg ICAgIEJJVCgwKQ0KPiA+ICsjZGVmaW5lIFhDU0lfTUFYRExfQ09VTlQgICAgIDB4NA0KPiA+ICsN Cj4gPiArI2RlZmluZSBYQ1NJX1ZDWElORjFSX09GRlNFVCAgICAgICAgIDB4NjANCj4gPiArI2Rl ZmluZSBYQ1NJX1ZDWElORjFSX0xJTkVDT1VOVCAgICAgICAgICAgICAgR0VOTUFTSygzMSwgMTYp DQo+ID4gKyNkZWZpbmUgWENTSV9WQ1hJTkYxUl9MSU5FQ09VTlRfU0hJRlQgICAgICAgIDE2DQo+ ID4gKyNkZWZpbmUgWENTSV9WQ1hJTkYxUl9CWVRFQ09VTlQgICAgICAgICAgICAgIEdFTk1BU0so MTUsIDApDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhDU0lfVkNYSU5GMlJfT0ZGU0VUIDB4NjQNCj4g PiArI2RlZmluZSBYQ1NJX1ZDWElORjJSX0RUICAgICBHRU5NQVNLKDUsIDApDQo+ID4gKyNkZWZp bmUgWENTSV9NQVhWQ1hfQ09VTlQgICAgMTYNCj4gPiArDQo+ID4gKy8qDQo+ID4gKyAqIFRoZSBj b3JlIHRha2VzIGxlc3MgdGhhbiAxMDAgdmlkZW8gY2xvY2sgY3ljbGVzIHRvIHJlc2V0Lg0KPiA+ ICsgKiBTbyBjaG9vc2luZyBhIHRpbWVvdXQgdmFsdWUgbGFyZ2VyIHRoYW4gdGhpcy4NCj4gPiAr ICovDQo+ID4gKyNkZWZpbmUgWENTSV9USU1FT1VUX1ZBTCAgICAgMTAwMCAvKiB1cyAqLw0KPiA+ ICsNCj4gPiArLyogTWF4aW11bSBzaG9ydCBwYWNrZXQgZXZlbnRzICovDQo+ID4gKyNkZWZpbmUg WENTSV9NQVhfU1BLVF9FVkVOVCAgNjQNCj4gPiArDQo+ID4gKy8qDQo+ID4gKyAqIFNpbmsgcGFk IGNvbm5lY3RlZCB0byBzZW5zb3Igc291cmNlIHBhZC4NCj4gPiArICogU291cmNlIHBhZCBjb25u ZWN0ZWQgdG8gbmV4dCBtb2R1bGUgbGlrZSBkZW1vc2FpYy4NCj4gPiArICovDQo+ID4gKyNkZWZp bmUgWENTSV9NRURJQV9QQURTICAgICAgICAgICAgICAyDQo+ID4gKyNkZWZpbmUgWENTSV9ERUZB VUxUX1dJRFRIICAgMTkyMA0KPiA+ICsjZGVmaW5lIFhDU0lfREVGQVVMVF9IRUlHSFQgIDEwODAN Cj4gPiArDQo+ID4gKy8qIE1heCBzdHJpbmcgbGVuZ3RoIGZvciBDU0kgRGF0YSB0eXBlIHN0cmlu ZyAqLw0KPiA+ICsjZGVmaW5lIFhDU0lfUFhMRk1UX1NUUkxFTl9NQVggICAgICAgMTYNCj4gPiAr DQo+ID4gKy8qIE1JUEkgQ1NJMiBEYXRhIFR5cGVzIGZyb20gc3BlYyAqLw0KPiA+ICsjZGVmaW5l IFhDU0lfRFRfWVVWNDIyOEIgICAgIDB4MUUNCj4gPiArI2RlZmluZSBYQ1NJX0RUX1lVVjQyMjEw QiAgICAweDFGDQo+ID4gKyNkZWZpbmUgWENTSV9EVF9SR0I0NDQgICAgICAgICAgICAgICAweDIw DQo+ID4gKyNkZWZpbmUgWENTSV9EVF9SR0I1NTUgICAgICAgICAgICAgICAweDIxDQo+ID4gKyNk ZWZpbmUgWENTSV9EVF9SR0I1NjUgICAgICAgICAgICAgICAweDIyDQo+ID4gKyNkZWZpbmUgWENT SV9EVF9SR0I2NjYgICAgICAgICAgICAgICAweDIzDQo+ID4gKyNkZWZpbmUgWENTSV9EVF9SR0I4 ODggICAgICAgICAgICAgICAweDI0DQo+ID4gKyNkZWZpbmUgWENTSV9EVF9SQVc2ICAgICAgICAg MHgyOA0KPiA+ICsjZGVmaW5lIFhDU0lfRFRfUkFXNyAgICAgICAgIDB4MjkNCj4gPiArI2RlZmlu ZSBYQ1NJX0RUX1JBVzggICAgICAgICAweDJBDQo+ID4gKyNkZWZpbmUgWENTSV9EVF9SQVcxMCAg ICAgICAgICAgICAgICAweDJCDQo+ID4gKyNkZWZpbmUgWENTSV9EVF9SQVcxMiAgICAgICAgICAg ICAgICAweDJDDQo+ID4gKyNkZWZpbmUgWENTSV9EVF9SQVcxNCAgICAgICAgICAgICAgICAweDJE DQo+ID4gKyNkZWZpbmUgWENTSV9EVF9SQVcxNiAgICAgICAgICAgICAgICAweDJFDQo+ID4gKyNk ZWZpbmUgWENTSV9EVF9SQVcyMCAgICAgICAgICAgICAgICAweDJGDQo+ID4gKw0KPiA+ICsjZGVm aW5lIFhDU0lfVkNYX1NUQVJUICAgICAgICAgICAgICAgNA0KPiA+ICsjZGVmaW5lIFhDU0lfTUFY X1ZDICAgICAgICAgIDQNCj4gPiArI2RlZmluZSBYQ1NJX01BWF9WQ1ggICAgICAgICAxNg0KPiA+ ICsNCj4gPiArI2RlZmluZSBYQ1NJX05FWFRSRUdfT0ZGU0VUICA0DQo+ID4gKw0KPiA+ICsvKiBU aGVyZSBhcmUgMiBldmVudHMgZnJhbWUgc3luYyBhbmQgZnJhbWUgbGV2ZWwgZXJyb3IgcGVyIFZD ICovDQo+ID4gKyNkZWZpbmUgWENTSV9WQ1hfTlVNX0VWRU5UUyAgKChYQ1NJX01BWF9WQ1ggLSBY Q1NJX01BWF9WQykgKiAyKQ0KPiA+ICsNCj4gPiArLyogTWFjcm8gdG8gcmV0dXJuICJ0cnVlIiBv ciAiZmFsc2UiIHN0cmluZyBpZiBiaXQgaXMgc2V0ICovDQo+ID4gKyNkZWZpbmUgWENTSV9HRVRf QklUU0VUX1NUUih2YWwsIG1hc2spICAgICAgICh2YWwpICYgKG1hc2spID8gInRydWUiIDogImZh bHNlIg0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHN0cnVjdCB4Y3NpMnJ4c3NfZXZlbnQgLSBF dmVudCBsb2cgc3RydWN0dXJlDQo+ID4gKyAqIEBtYXNrOiBFdmVudCBtYXNrDQo+ID4gKyAqIEBu YW1lOiBOYW1lIG9mIHRoZSBldmVudA0KPiA+ICsgKiBAY291bnRlcjogQ291bnQgbnVtYmVyIG9m IGV2ZW50cw0KPiA+ICsgKi8NCj4gPiArc3RydWN0IHhjc2kycnhzc19ldmVudCB7DQo+ID4gKyAg ICAgdTMyIG1hc2s7DQo+ID4gKyAgICAgY29uc3QgY2hhciAqY29uc3QgbmFtZTsNCj4gPiArICAg ICB1bnNpZ25lZCBpbnQgY291bnRlcjsNCj4gPiArfTsNCj4gPiArDQo+ID4gKy8qDQo+ID4gKyAq IHN0cnVjdCB4Y3NpMnJ4c3NfY29yZSAtIENvcmUgY29uZmlndXJhdGlvbiBDU0kyIFJ4IFN1YnN5 c3RlbSBkZXZpY2UNCj4gc3RydWN0dXJlDQo+ID4gKyAqIEBkZXY6IFBsYXRmb3JtIHN0cnVjdHVy ZQ0KPiA+ICsgKiBAaW9tZW06IEJhc2UgYWRkcmVzcyBvZiBzdWJzeXN0ZW0NCj4gPiArICogQGVu YWJsZV9hY3RpdmVfbGFuZXM6IElmIG51bWJlciBvZiBhY3RpdmUgbGFuZXMgY2FuIGJlIG1vZGlm aWVkDQo+ID4gKyAqIEBtYXhfbnVtX2xhbmVzOiBNYXhpbXVtIG51bWJlciBvZiBsYW5lcyBwcmVz ZW50DQo+ID4gKyAqIEBkYXRhdHlwZTogRGF0YSB0eXBlIGZpbHRlcg0KPiA+ICsgKiBAZXZlbnRz OiBTdHJ1Y3R1cmUgdG8gbWFpbnRhaW4gZXZlbnQgbG9ncw0KPiA+ICsgKiBAdmN4X2V2ZW50czog U3RydWN0dXJlIHRvIG1haW50YWluIFZDWCBldmVudCBsb2dzDQo+ID4gKyAqIEBlbl92Y3g6IElm IG1vcmUgdGhhbiA0IFZDIGFyZSBlbmFibGVkDQo+ID4gKyAqIEBjbGtzOiBhcnJheSBvZiBjbG9j a3MNCj4gPiArICogQG51bV9jbGtzOiBudW1iZXIgb2YgY2xvY2tzDQo+ID4gKyAqIEByc3RfZ3Bp bzogcmVzZXQgdG8gdmlkZW9fYXJlc2V0bg0KPiA+ICsgKi8NCj4gPiArc3RydWN0IHhjc2kycnhz c19jb3JlIHsNCj4gPiArICAgICBzdHJ1Y3QgZGV2aWNlICpkZXY7DQo+ID4gKyAgICAgdm9pZCBf X2lvbWVtICppb21lbTsNCj4gPiArICAgICBib29sIGVuYWJsZV9hY3RpdmVfbGFuZXM7DQo+ID4g KyAgICAgdTMyIG1heF9udW1fbGFuZXM7DQo+ID4gKyAgICAgdTMyIGRhdGF0eXBlOw0KPiA+ICsg ICAgIHN0cnVjdCB4Y3NpMnJ4c3NfZXZlbnQgKmV2ZW50czsNCj4gPiArICAgICBzdHJ1Y3QgeGNz aTJyeHNzX2V2ZW50ICp2Y3hfZXZlbnRzOw0KPiA+ICsgICAgIGJvb2wgZW5fdmN4Ow0KPiA+ICsg ICAgIHN0cnVjdCBjbGtfYnVsa19kYXRhICpjbGtzOw0KPiA+ICsgICAgIGludCBudW1fY2xrczsN Cj4gPiArICAgICBzdHJ1Y3QgZ3Bpb19kZXNjICpyc3RfZ3BpbzsNCj4gPiArfTsNCj4gPiArDQo+ ID4gKy8qKg0KPiA+ICsgKiBzdHJ1Y3QgeGNzaTJyeHNzX3N0YXRlIC0gQ1NJMiBSeCBTdWJzeXN0 ZW0gZGV2aWNlIHN0cnVjdHVyZQ0KPiA+ICsgKiBAY29yZTogQ29yZSBzdHJ1Y3R1cmUgZm9yIE1J UEkgQ1NJMiBSeCBTdWJzeXN0ZW0NCj4gPiArICogQHN1YmRldjogVGhlIHY0bDIgc3ViZGV2IHN0 cnVjdHVyZQ0KPiA+ICsgKiBAY3RybF9oYW5kbGVyOiBjb250cm9sIGhhbmRsZXINCj4gPiArICog QGZvcm1hdDogQWN0aXZlIFY0TDIgZm9ybWF0cyBvbiBlYWNoIHBhZA0KPiA+ICsgKiBAZXZlbnQ6 IEhvbGRzIHRoZSBzaG9ydCBwYWNrZXQgZXZlbnQNCj4gPiArICogQGxvY2s6IG11dGV4IGZvciBh Y2Nlc3NpbmcgdGhpcyBzdHJ1Y3R1cmUNCj4gPiArICogQHBhZHM6IG1lZGlhIHBhZHMNCj4gPiAr ICogQHN0cmVhbWluZzogRmxhZyBmb3Igc3RvcmluZyBzdHJlYW1pbmcgc3RhdGUNCj4gPiArICoN Cj4gPiArICogVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIGRldmljZSBkcml2ZXIgcmVsYXRl ZCBwYXJhbWV0ZXJzDQo+ID4gKyAqLw0KPiA+ICtzdHJ1Y3QgeGNzaTJyeHNzX3N0YXRlIHsNCj4g PiArICAgICBzdHJ1Y3QgeGNzaTJyeHNzX2NvcmUgY29yZTsNCj4gPiArICAgICBzdHJ1Y3QgdjRs Ml9zdWJkZXYgc3ViZGV2Ow0KPiA+ICsgICAgIHN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciBjdHJs X2hhbmRsZXI7DQo+ID4gKyAgICAgc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCBmb3JtYXQ7DQo+ ID4gKyAgICAgc3RydWN0IHY0bDJfZXZlbnQgZXZlbnQ7DQo+ID4gKyAgICAgLyogdXNlZCB0byBw cm90ZWN0IGFjY2VzcyB0byB0aGlzIHN0cnVjdCAqLw0KPiA+ICsgICAgIHN0cnVjdCBtdXRleCBs b2NrOw0KPiA+ICsgICAgIHN0cnVjdCBtZWRpYV9wYWQgcGFkc1tYQ1NJX01FRElBX1BBRFNdOw0K PiA+ICsgICAgIGJvb2wgc3RyZWFtaW5nOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIHN0 cnVjdCB4Y3NpMnJ4c3NfZXZlbnQgeGNzaTJyeHNzX2V2ZW50c1tdID0gew0KPiA+ICsgICAgIHsg WENTSV9JU1JfRlIsICJGcmFtZSBSZWNlaXZlZCIsIDAgfSwNCj4gPiArICAgICB7IFhDU0lfSVNS X1ZDWEZFLCAiVkNYIEZyYW1lIEVycm9ycyIsIDAgfSwNCj4gPiArICAgICB7IFhDU0lfSVNSX1dD QywgIldvcmQgQ291bnQgRXJyb3JzIiwgMCB9LA0KPiA+ICsgICAgIHsgWENTSV9JU1JfSUxDLCAi SW52YWxpZCBMYW5lIENvdW50IEVycm9yIiwgMCB9LA0KPiA+ICsgICAgIHsgWENTSV9JU1JfU1BG SUZPRiwgIlNob3J0IFBhY2tldCBGSUZPIE92ZXJGbG93IEVycm9yIiwgMCB9LA0KPiA+ICsgICAg IHsgWENTSV9JU1JfU1BGSUZPTkUsICJTaG9ydCBQYWNrZXQgRklGTyBOb3QgRW1wdHkiLCAwIH0s DQo+ID4gKyAgICAgeyBYQ1NJX0lTUl9TTEJGLCAiU3RyZWFtbGluZSBCdWZmZXIgRnVsbCBFcnJv ciIsIDAgfSwNCj4gPiArICAgICB7IFhDU0lfSVNSX1NUT1AsICJMYW5lIFN0b3AgU3RhdGUiLCAw IH0sDQo+ID4gKyAgICAgeyBYQ1NJX0lTUl9TT1RFUlIsICJTT1QgRXJyb3IiLCAwIH0sDQo+ID4g KyAgICAgeyBYQ1NJX0lTUl9TT1RTWU5DRVJSLCAiU09UIFN5bmMgRXJyb3IiLCAwIH0sDQo+ID4g KyAgICAgeyBYQ1NJX0lTUl9FQ0MyQkVSUiwgIjIgQml0IEVDQyBVbnJlY292ZXJhYmxlIEVycm9y IiwgMCB9LA0KPiA+ICsgICAgIHsgWENTSV9JU1JfRUNDMUJFUlIsICIxIEJpdCBFQ0MgUmVjb3Zl cmFibGUgRXJyb3IiLCAwIH0sDQo+ID4gKyAgICAgeyBYQ1NJX0lTUl9DUkNFUlIsICJDUkMgRXJy b3IiLCAwIH0sDQo+ID4gKyAgICAgeyBYQ1NJX0lTUl9EQVRBSURFUlIsICJEYXRhIElkIEVycm9y IiwgMCB9LA0KPiA+ICsgICAgIHsgWENTSV9JU1JfVkMzRlNZTkNFUlIsICJWaXJ0dWFsIENoYW5u ZWwgMyBGcmFtZSBTeW5jIEVycm9yIiwgMCB9LA0KPiA+ICsgICAgIHsgWENTSV9JU1JfVkMzRkxW TEVSUiwgIlZpcnR1YWwgQ2hhbm5lbCAzIEZyYW1lIExldmVsIEVycm9yIiwgMCB9LA0KPiA+ICsg ICAgIHsgWENTSV9JU1JfVkMyRlNZTkNFUlIsICJWaXJ0dWFsIENoYW5uZWwgMiBGcmFtZSBTeW5j IEVycm9yIiwgMCB9LA0KPiA+ICsgICAgIHsgWENTSV9JU1JfVkMyRkxWTEVSUiwgIlZpcnR1YWwg Q2hhbm5lbCAyIEZyYW1lIExldmVsIEVycm9yIiwgMCB9LA0KPiA+ICsgICAgIHsgWENTSV9JU1Jf VkMxRlNZTkNFUlIsICJWaXJ0dWFsIENoYW5uZWwgMSBGcmFtZSBTeW5jIEVycm9yIiwgMCB9LA0K PiA+ICsgICAgIHsgWENTSV9JU1JfVkMxRkxWTEVSUiwgIlZpcnR1YWwgQ2hhbm5lbCAxIEZyYW1l IExldmVsIEVycm9yIiwgMCB9LA0KPiA+ICsgICAgIHsgWENTSV9JU1JfVkMwRlNZTkNFUlIsICJW aXJ0dWFsIENoYW5uZWwgMCBGcmFtZSBTeW5jIEVycm9yIiwgMCB9LA0KPiA+ICsgICAgIHsgWENT SV9JU1JfVkMwRkxWTEVSUiwgIlZpcnR1YWwgQ2hhbm5lbCAwIEZyYW1lIExldmVsIEVycm9yIiwg MCB9DQo+ID4gK307DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhDU0lfTlVNX0VWRU5UUyAgICAgICAg ICAgICAgQVJSQVlfU0laRSh4Y3NpMnJ4c3NfZXZlbnRzKQ0KPiA+ICsNCj4gPiArc3RhdGljIGNv bnN0IHN0cnVjdCBjbGtfYnVsa19kYXRhIHhjc2kycnhzc19jbGtzW10gPSB7DQo+ID4gKyAgICAg eyAuaWQgPSAibGl0ZV9hY2xrIiB9LA0KPiA+ICsgICAgIHsgLmlkID0gInZpZGVvX2FjbGsiIH0s DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCB4Y3NpMnJ4c3Nfc3Rh dGUgKg0KPiA+ICt0b194Y3NpMnJ4c3NzdGF0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldikN Cj4gPiArew0KPiA+ICsgICAgIHJldHVybiBjb250YWluZXJfb2Yoc3ViZGV2LCBzdHJ1Y3QgeGNz aTJyeHNzX3N0YXRlLCBzdWJkZXYpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBS ZWdpc3RlciByZWxhdGVkIG9wZXJhdGlvbnMNCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbmxpbmUg dTMyIHhjc2kycnhzc19yZWFkKHN0cnVjdCB4Y3NpMnJ4c3NfY29yZSAqeGNzaTJyeHNzLCB1MzIg YWRkcikNCj4gPiArew0KPiA+ICsgICAgIHJldHVybiBpb3JlYWQzMih4Y3NpMnJ4c3MtPmlvbWVt ICsgYWRkcik7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCB4Y3NpMnJ4 c3Nfd3JpdGUoc3RydWN0IHhjc2kycnhzc19jb3JlICp4Y3NpMnJ4c3MsIHUzMiBhZGRyLA0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiB2YWx1ZSkNCj4gPiArew0KPiA+ ICsgICAgIGlvd3JpdGUzMih2YWx1ZSwgeGNzaTJyeHNzLT5pb21lbSArIGFkZHIpOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgeGNzaTJyeHNzX2NscihzdHJ1Y3QgeGNz aTJyeHNzX2NvcmUgKnhjc2kycnhzcywgdTMyIGFkZHIsDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHUzMiBjbHIpDQo+ID4gK3sNCj4gPiArICAgICB4Y3NpMnJ4c3Nfd3JpdGUo eGNzaTJyeHNzLCBhZGRyLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICB4Y3NpMnJ4c3NfcmVh ZCh4Y3NpMnJ4c3MsIGFkZHIpICYgfmNscik7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBp bmxpbmUgdm9pZCB4Y3NpMnJ4c3Nfc2V0KHN0cnVjdCB4Y3NpMnJ4c3NfY29yZSAqeGNzaTJyeHNz LCB1MzIgYWRkciwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHNldCkN Cj4gPiArew0KPiA+ICsgICAgIHhjc2kycnhzc193cml0ZSh4Y3NpMnJ4c3MsIGFkZHIsDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgIHhjc2kycnhzc19yZWFkKHhjc2kycnhzcywgYWRkcikgfCBz ZXQpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogeGNzaTJyeHNzX2Nscl9hbmRf c2V0IC0gQ2xlYXIgYW5kIHNldCB0aGUgcmVnaXN0ZXIgd2l0aCBhIGJpdG1hc2sNCj4gPiArICog QHhjc2kycnhzczogWGlsaW54IE1JUEkgQ1NJMiBSeCBTdWJzeXN0ZW0gc3ViZGV2IGNvcmUgc3Ry dWN0DQo+ID4gKyAqIEBhZGRyOiBhZGRyZXNzIG9mIHJlZ2lzdGVyDQo+ID4gKyAqIEBjbHI6IGJp dG1hc2sgdG8gYmUgY2xlYXJlZA0KPiA+ICsgKiBAc2V0OiBiaXRtYXNrIHRvIGJlIHNldA0KPiA+ ICsgKg0KPiA+ICsgKiBDbGVhciBhIGJpdChzKSBvZiBtYXNrIEBjbHIgaW4gdGhlIHJlZ2lzdGVy IGF0IGFkZHJlc3MgQGFkZHIsIHRoZW4gc2V0DQo+ID4gKyAqIGEgYml0KHMpIG9mIG1hc2sgQHNl dCBpbiB0aGUgcmVnaXN0ZXIgYWZ0ZXIuDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgdm9pZCB4Y3Np MnJ4c3NfY2xyX2FuZF9zZXQoc3RydWN0IHhjc2kycnhzc19jb3JlICp4Y3NpMnJ4c3MsDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgYWRkciwgdTMyIGNsciwgdTMyIHNl dCkNCj4gPiArew0KPiA+ICsgICAgIHUzMiByZWc7DQo+ID4gKw0KPiA+ICsgICAgIHJlZyA9IHhj c2kycnhzc19yZWFkKHhjc2kycnhzcywgYWRkcik7DQo+ID4gKyAgICAgcmVnICY9IH5jbHI7DQo+ ID4gKyAgICAgcmVnIHw9IHNldDsNCj4gPiArICAgICB4Y3NpMnJ4c3Nfd3JpdGUoeGNzaTJyeHNz LCBhZGRyLCByZWcpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCB4Y3NpMnJ4c3Nf ZW5hYmxlKHN0cnVjdCB4Y3NpMnJ4c3NfY29yZSAqY29yZSkNCj4gPiArew0KPiA+ICsgICAgIHhj c2kycnhzc19zZXQoY29yZSwgWENTSV9DQ1JfT0ZGU0VULCBYQ1NJX0NDUl9FTkFCTEUpOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCB4Y3NpMnJ4c3NfZGlzYWJsZShzdHJ1Y3QgeGNz aTJyeHNzX2NvcmUgKmNvcmUpDQo+ID4gK3sNCj4gPiArICAgICB4Y3NpMnJ4c3NfY2xyKGNvcmUs IFhDU0lfQ0NSX09GRlNFVCwgWENTSV9DQ1JfRU5BQkxFKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr c3RhdGljIHZvaWQgeGNzaTJyeHNzX2ludHJfZW5hYmxlKHN0cnVjdCB4Y3NpMnJ4c3NfY29yZSAq Y29yZSkNCj4gPiArew0KPiA+ICsgICAgIHhjc2kycnhzc19jbHIoY29yZSwgWENTSV9HSUVSX09G RlNFVCwgWENTSV9HSUVSX0dJRSk7DQo+ID4gKyAgICAgeGNzaTJyeHNzX3dyaXRlKGNvcmUsIFhD U0lfSUVSX09GRlNFVCwgWENTSV9JRVJfSU5UUl9NQVNLKTsNCj4gPiArICAgICB4Y3NpMnJ4c3Nf c2V0KGNvcmUsIFhDU0lfR0lFUl9PRkZTRVQsIFhDU0lfR0lFUl9HSUUpOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgdm9pZCB4Y3NpMnJ4c3NfaW50cl9kaXNhYmxlKHN0cnVjdCB4Y3NpMnJ4 c3NfY29yZSAqY29yZSkNCj4gPiArew0KPiA+ICsgICAgIHhjc2kycnhzc19jbHIoY29yZSwgWENT SV9JRVJfT0ZGU0VULCBYQ1NJX0lFUl9JTlRSX01BU0spOw0KPiA+ICsgICAgIHhjc2kycnhzc19j bHIoY29yZSwgWENTSV9HSUVSX09GRlNFVCwgWENTSV9HSUVSX0dJRSk7DQo+ID4gK30NCj4gPiAr DQo+ID4gKy8qKg0KPiA+ICsgKiB4Y3NpMnJ4c3NfcmVzZXQgLSBEb2VzIGEgc29mdCByZXNldCBv ZiB0aGUgTUlQSSBDU0kyIFJ4IFN1YnN5c3RlbQ0KPiA+ICsgKiBAY29yZTogQ29yZSBYaWxpbngg Q1NJMiBSeCBTdWJzeXN0ZW0gc3RydWN0dXJlIHBvaW50ZXINCj4gPiArICoNCj4gPiArICogQ29y ZSB0YWtlcyBsZXNzIHRoYW4gMTAwIHZpZGVvIGNsb2NrIGN5Y2xlcyB0byByZXNldC4NCj4gPiAr ICogU28gYSBsYXJnZXIgdGltZW91dCB2YWx1ZSBpcyBjaG9zZW4gZm9yIG1hcmdpbi4NCj4gPiAr ICoNCj4gPiArICogUmV0dXJuOiAwIC0gb24gc3VjY2VzcyBPUiAtRVRJTUUgaWYgcmVzZXQgdGlt ZXMgb3V0DQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50IHhjc2kycnhzc19yZXNldChzdHJ1Y3Qg eGNzaTJyeHNzX2NvcmUgKmNvcmUpDQo+ID4gK3sNCj4gPiArICAgICB1MzIgdGltZW91dCA9IFhD U0lfVElNRU9VVF9WQUw7DQo+ID4gKw0KPiA+ICsgICAgIHhjc2kycnhzc19zZXQoY29yZSwgWENT SV9DQ1JfT0ZGU0VULCBYQ1NJX0NDUl9TT0ZUUkVTRVQpOw0KPiA+ICsNCj4gPiArICAgICB3aGls ZSAoeGNzaTJyeHNzX3JlYWQoY29yZSwgWENTSV9DU1JfT0ZGU0VUKSAmIFhDU0lfQ1NSX1JJUENE KSB7DQo+ID4gKyAgICAgICAgICAgICBpZiAodGltZW91dCA9PSAwKSB7DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgIGRldl9lcnIoY29yZS0+ZGV2LCAic29mdCByZXNldCB0aW1lZCBvdXQhXG4i KTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FVElNRTsNCj4gPiArICAgICAg ICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgICAgICB0aW1lb3V0LS07DQo+ID4gKyAgICAg ICAgICAgICB1ZGVsYXkoMSk7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICB4Y3NpMnJ4 c3NfY2xyKGNvcmUsIFhDU0lfQ0NSX09GRlNFVCwgWENTSV9DQ1JfU09GVFJFU0VUKTsNCj4gPiAr ICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgeGNzaTJyeHNz X3Jlc2V0X2V2ZW50X2NvdW50ZXJzKHN0cnVjdCB4Y3NpMnJ4c3Nfc3RhdGUgKnN0YXRlKQ0KPiA+ ICt7DQo+ID4gKyAgICAgdW5zaWduZWQgaW50IGk7DQo+ID4gKw0KPiA+ICsgICAgIGZvciAoaSA9 IDA7IGkgPCBYQ1NJX05VTV9FVkVOVFM7IGkrKykNCj4gPiArICAgICAgICAgICAgIHN0YXRlLT5j b3JlLmV2ZW50c1tpXS5jb3VudGVyID0gMDsNCj4gPiArDQo+ID4gKyAgICAgaWYgKHN0YXRlLT5j b3JlLmVuX3ZjeCkgew0KPiA+ICsgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IFhDU0lfVkNY X05VTV9FVkVOVFM7IGkrKykNCj4gPiArICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmNvcmUu dmN4X2V2ZW50c1tpXS5jb3VudGVyID0gMDsNCj4gPiArICAgICB9DQo+ID4gK30NCj4gPiArDQo+ ID4gKy8qIFByaW50IGV2ZW50IGNvdW50ZXJzICovDQo+ID4gK3N0YXRpYyB2b2lkIHhjc2kycnhz c19sb2dfY291bnRlcnMoc3RydWN0IHhjc2kycnhzc19zdGF0ZSAqc3RhdGUpDQo+ID4gK3sNCj4g PiArICAgICBzdHJ1Y3QgeGNzaTJyeHNzX2NvcmUgKmNvcmUgPSAmc3RhdGUtPmNvcmU7DQo+ID4g KyAgICAgaW50IGk7DQo+ID4gKw0KPiA+ICsgICAgIGZvciAoaSA9IDA7IGkgPCBYQ1NJX05VTV9F VkVOVFM7IGkrKykgew0KPiA+ICsgICAgICAgICAgICAgaWYgKGNvcmUtPmV2ZW50c1tpXS5jb3Vu dGVyID4gMCkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBkZXZfaW5mbyhjb3JlLT5kZXYs ICIlcyBldmVudHM6ICVkXG4iLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b3JlLT5ldmVudHNbaV0ubmFtZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29yZS0+ZXZlbnRzW2ldLmNvdW50ZXIpOw0KPiA+ICsgICAgICAgICAgICAgfQ0KPiA+ICsgICAg IH0NCj4gPiArDQo+ID4gKyAgICAgaWYgKGNvcmUtPmVuX3ZjeCkgew0KPiA+ICsgICAgICAgICAg ICAgZm9yIChpID0gMDsgaSA8IFhDU0lfVkNYX05VTV9FVkVOVFM7IGkrKykgew0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICBpZiAoY29yZS0+dmN4X2V2ZW50c1tpXS5jb3VudGVyID4gMCkgew0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9pbmZvKGNvcmUtPmRldiwNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVkMgJWQgRnJhbWUgJXMg ZXJyIHZjeCBldmVudHM6ICVkXG4iLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChpIC8gMikgKyBYQ1NJX1ZDWF9TVEFSVCwNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpICYgMSA/ICJTeW5jIiA6ICJMZXZlbCIsDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZS0+dmN4X2V2ZW50c1tpXS5j b3VudGVyKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAgICAg fQ0KPiA+ICsgICAgIH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgeGNzaTJyeHNz X2xvZ19pcGNvbmZpZyhzdHJ1Y3QgeGNzaTJyeHNzX3N0YXRlICpzdGF0ZSkNCj4gPiArew0KPiA+ ICsgICAgIHN0cnVjdCB4Y3NpMnJ4c3NfY29yZSAqY29yZSA9ICZzdGF0ZS0+Y29yZTsNCj4gPiAr DQo+ID4gKyAgICAgZGV2X2RiZyhjb3JlLT5kZXYsICIqKioqKiogWGlsaW54IE1JUEkgQ1NJMiBS eCBTUyBJUCBDb25maWcgKioqKioqXG4iKTsNCj4gPiArICAgICBkZXZfZGJnKGNvcmUtPmRldiwg InZjeCBpcyAlcyIsIGNvcmUtPmVuX3ZjeCA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOw0KPiA+ ICsgICAgIGRldl9kYmcoY29yZS0+ZGV2LCAiRW5hYmxlIGFjdGl2ZSBsYW5lcyBwcm9wZXJ0eSBp cyAlc1xuIiwNCj4gPiArICAgICAgICAgICAgIGNvcmUtPmVuYWJsZV9hY3RpdmVfbGFuZXMgPyAi cHJlc2VudCIgOiAiYWJzZW50Iik7DQo+ID4gKyAgICAgZGV2X2RiZyhjb3JlLT5kZXYsICJNYXgg bGFuZXMgPSAlZCIsIGNvcmUtPm1heF9udW1fbGFuZXMpOw0KPiA+ICsgICAgIGRldl9kYmcoY29y ZS0+ZGV2LCAiUGl4ZWwgZm9ybWF0IHNldCBhcyAweCV4XG4iLCBjb3JlLT5kYXRhdHlwZSk7DQo+ ID4gKyAgICAgZGV2X2RiZyhjb3JlLT5kZXYsDQo+ICIqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqXG4iKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4g KyAqIHhjc2kycnhzc19sb2dfc3RhdHVzIC0gTG9ncyB0aGUgc3RhdHVzIG9mIHRoZSBDU0ktMiBS ZWNlaXZlcg0KPiA+ICsgKiBAc2Q6IFBvaW50ZXIgdG8gVjRMMiBzdWJkZXZpY2Ugc3RydWN0dXJl DQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMgZnVuY3Rpb24gcHJpbnRzIHRoZSBjdXJyZW50IHN0YXR1 cyBvZiBYaWxpbnggTUlQSSBDU0ktMg0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46IDAgb24gc3Vj Y2Vzcw0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCB4Y3NpMnJ4c3NfbG9nX3N0YXR1cyhzdHJ1 Y3QgdjRsMl9zdWJkZXYgKnNkKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHhjc2kycnhzc19z dGF0ZSAqeGNzaTJyeHNzID0gdG9feGNzaTJyeHNzc3RhdGUoc2QpOw0KPiA+ICsgICAgIHN0cnVj dCB4Y3NpMnJ4c3NfY29yZSAqY29yZSA9ICZ4Y3NpMnJ4c3MtPmNvcmU7DQo+ID4gKyAgICAgdW5z aWduZWQgaW50IHJlZywgZGF0YSwgaSwgbWF4X3ZjOw0KPiA+ICsNCj4gPiArICAgICBtdXRleF9s b2NrKCZ4Y3NpMnJ4c3MtPmxvY2spOw0KPiA+ICsNCj4gPiArICAgICB4Y3NpMnJ4c3NfbG9nX2lw Y29uZmlnKHhjc2kycnhzcyk7DQo+ID4gKw0KPiA+ICsgICAgIHhjc2kycnhzc19sb2dfY291bnRl cnMoeGNzaTJyeHNzKTsNCj4gPiArDQo+ID4gKyAgICAgZGV2X2luZm8oY29yZS0+ZGV2LCAiKioq KiogQ29yZSBTdGF0dXMgKioqKipcbiIpOw0KPiA+ICsgICAgIGRhdGEgPSB4Y3NpMnJ4c3NfcmVh ZChjb3JlLCBYQ1NJX0NTUl9PRkZTRVQpOw0KPiA+ICsgICAgIGRldl9pbmZvKGNvcmUtPmRldiwg IlNob3J0IFBhY2tldCBGSUZPIEZ1bGwgPSAlc1xuIiwNCj4gPiArICAgICAgICAgICAgICBYQ1NJ X0dFVF9CSVRTRVRfU1RSKGRhdGEsIFhDU0lfQ1NSX1NQRklGT0ZVTEwpKTsNCj4gPiArICAgICBk ZXZfaW5mbyhjb3JlLT5kZXYsICJTaG9ydCBQYWNrZXQgRklGTyBOb3QgRW1wdHkgPSAlc1xuIiwN Cj4gPiArICAgICAgICAgICAgICBYQ1NJX0dFVF9CSVRTRVRfU1RSKGRhdGEsIFhDU0lfQ1NSX1NQ RklGT05FKSk7DQo+ID4gKyAgICAgZGV2X2luZm8oY29yZS0+ZGV2LCAiU3RyZWFtIGxpbmUgYnVm ZmVyIGZ1bGwgPSAlc1xuIiwNCj4gPiArICAgICAgICAgICAgICBYQ1NJX0dFVF9CSVRTRVRfU1RS KGRhdGEsIFhDU0lfQ1NSX1NMQkYpKTsNCj4gPiArICAgICBkZXZfaW5mbyhjb3JlLT5kZXYsICJT b2Z0IHJlc2V0L0NvcmUgZGlzYWJsZSBpbiBwcm9ncmVzcyA9ICVzXG4iLA0KPiA+ICsgICAgICAg ICAgICAgIFhDU0lfR0VUX0JJVFNFVF9TVFIoZGF0YSwgWENTSV9DU1JfUklQQ0QpKTsNCj4gPiAr DQo+ID4gKyAgICAgLyogQ2xrICYgTGFuZSBJbmZvICAqLw0KPiA+ICsgICAgIGRldl9pbmZvKGNv cmUtPmRldiwgIioqKioqKioqIENsb2NrIExhbmUgSW5mbyAqKioqKioqKipcbiIpOw0KPiA+ICsg ICAgIGRhdGEgPSB4Y3NpMnJ4c3NfcmVhZChjb3JlLCBYQ1NJX0NMS0lORlJfT0ZGU0VUKTsNCj4g PiArICAgICBkZXZfaW5mbyhjb3JlLT5kZXYsICJDbG9jayBMYW5lIGluIFN0b3AgU3RhdGUgPSAl c1xuIiwNCj4gPiArICAgICAgICAgICAgICBYQ1NJX0dFVF9CSVRTRVRfU1RSKGRhdGEsIFhDU0lf Q0xLSU5GUl9TVE9QKSk7DQo+ID4gKw0KPiA+ICsgICAgIGRldl9pbmZvKGNvcmUtPmRldiwgIioq KioqKioqIERhdGEgTGFuZSBJbmZvICoqKioqKioqKlxuIik7DQo+ID4gKyAgICAgZGV2X2luZm8o Y29yZS0+ZGV2LCAiTGFuZVx0U29UIEVycm9yXHRTb1QgU3luYyBFcnJvclx0U3RvcCBTdGF0ZVxu Iik7DQo+ID4gKyAgICAgcmVnID0gWENTSV9ETFhJTkZSX09GRlNFVDsNCj4gPiArICAgICBmb3Ig KGkgPSAwOyBpIDwgWENTSV9NQVhETF9DT1VOVDsgaSsrKSB7DQo+ID4gKyAgICAgICAgICAgICBk YXRhID0geGNzaTJyeHNzX3JlYWQoY29yZSwgcmVnKTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAg ICBkZXZfaW5mbyhjb3JlLT5kZXYsICIlZFx0JXNcdFx0JXNcdFx0JXNcbiIsIGksDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICBYQ1NJX0dFVF9CSVRTRVRfU1RSKGRhdGEsIFhDU0lfRExYSU5G Ul9TT1RFUlIpLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgWENTSV9HRVRfQklUU0VUX1NU UihkYXRhLCBYQ1NJX0RMWElORlJfU09UU1lOQ0VSUiksDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICBYQ1NJX0dFVF9CSVRTRVRfU1RSKGRhdGEsIFhDU0lfRExYSU5GUl9TVE9QKSk7DQo+ID4g Kw0KPiA+ICsgICAgICAgICAgICAgcmVnICs9IFhDU0lfTkVYVFJFR19PRkZTRVQ7DQo+ID4gKyAg ICAgfQ0KPiA+ICsNCj4gPiArICAgICAvKiBWaXJ0dWFsIENoYW5uZWwgSW1hZ2UgSW5mb3JtYXRp b24gKi8NCj4gPiArICAgICBkZXZfaW5mbyhjb3JlLT5kZXYsICIqKioqKioqKioqIFZpcnR1YWwg Q2hhbm5lbCBJbmZvDQo+ICoqKioqKioqKioqKlxuIik7DQo+ID4gKyAgICAgZGV2X2luZm8oY29y ZS0+ZGV2LCAiVkNcdExpbmUgQ291bnRcdEJ5dGUgQ291bnRcdERhdGEgVHlwZVxuIik7DQo+ID4g KyAgICAgaWYgKGNvcmUtPmVuX3ZjeCkNCj4gPiArICAgICAgICAgICAgIG1heF92YyA9IFhDU0lf TUFYX1ZDWDsNCj4gPiArICAgICBlbHNlDQo+ID4gKyAgICAgICAgICAgICBtYXhfdmMgPSBYQ1NJ X01BWF9WQzsNCj4gPiArDQo+ID4gKyAgICAgcmVnID0gWENTSV9WQ1hJTkYxUl9PRkZTRVQ7DQo+ ID4gKyAgICAgZm9yIChpID0gMDsgaSA8IG1heF92YzsgaSsrKSB7DQo+ID4gKyAgICAgICAgICAg ICB1MzIgbGluZV9jb3VudCwgYnl0ZV9jb3VudCwgZGF0YV90eXBlOw0KPiA+ICsNCj4gPiArICAg ICAgICAgICAgIC8qIEdldCBsaW5lIGFuZCBieXRlIGNvdW50IGZyb20gVkNYSU5GUjEgUmVnaXN0 ZXIgKi8NCj4gPiArICAgICAgICAgICAgIGRhdGEgPSB4Y3NpMnJ4c3NfcmVhZChjb3JlLCByZWcp Ow0KPiA+ICsgICAgICAgICAgICAgYnl0ZV9jb3VudCA9IGRhdGEgJiBYQ1NJX1ZDWElORjFSX0JZ VEVDT1VOVDsNCj4gPiArICAgICAgICAgICAgIGxpbmVfY291bnQgPSBkYXRhICYgWENTSV9WQ1hJ TkYxUl9MSU5FQ09VTlQ7DQo+ID4gKyAgICAgICAgICAgICBsaW5lX2NvdW50ID4+PSBYQ1NJX1ZD WElORjFSX0xJTkVDT1VOVF9TSElGVDsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAvKiBHZXQg ZGF0YSB0eXBlIGZyb20gVkNYSU5GUjIgUmVnaXN0ZXIgKi8NCj4gPiArICAgICAgICAgICAgIHJl ZyArPSBYQ1NJX05FWFRSRUdfT0ZGU0VUOw0KPiA+ICsgICAgICAgICAgICAgZGF0YSA9IHhjc2ky cnhzc19yZWFkKGNvcmUsIHJlZyk7DQo+ID4gKyAgICAgICAgICAgICBkYXRhX3R5cGUgPSBkYXRh ICYgWENTSV9WQ1hJTkYyUl9EVDsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICBkZXZfaW5mbyhj b3JlLT5kZXYsICIlZFx0JWRcdFx0JWRcdFx0MHgleFxuIiwgaSwgbGluZV9jb3VudCwNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgIGJ5dGVfY291bnQsIGRhdGFfdHlwZSk7DQo+ID4gKw0KPiA+ ICsgICAgICAgICAgICAgLyogTW92ZSB0byBuZXh0IHBhaXIgb2YgVkMgSW5mbyByZWdpc3RlcnMg Ki8NCj4gPiArICAgICAgICAgICAgIHJlZyArPSBYQ1NJX05FWFRSRUdfT0ZGU0VUOw0KPiA+ICsg ICAgIH0NCj4gPiArDQo+ID4gKyAgICAgbXV0ZXhfdW5sb2NrKCZ4Y3NpMnJ4c3MtPmxvY2spOw0K PiA+ICsNCj4gPiArICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoNCj4gPiAr ICogeGNzaTJyeHNzX3N1YnNjcmliZV9ldmVudCAtIFN1YnNjcmliZSB0byB0aGUgY3VzdG9tIHNo b3J0IHBhY2tldA0KPiA+ICsgKiByZWNlaXZlIGV2ZW50Lg0KPiA+ICsgKiBAc2Q6IFY0TDIgU3Vi IGRldmljZQ0KPiA+ICsgKiBAZmg6IFY0TDIgRmlsZSBIYW5kbGUNCj4gPiArICogQHN1YjogU3Vi Y3JpYmUgZXZlbnQgc3RydWN0dXJlDQo+ID4gKyAqDQo+ID4gKyAqIFRoZXJlIGFyZSB0d28gdHlw ZXMgb2YgZXZlbnRzIHRvIGJlIHN1YnNjcmliZWQuDQo+ID4gKyAqDQo+ID4gKyAqIEZpcnN0IGlz IHRvIHJlZ2lzdGVyIGZvciByZWNlaXZpbmcgYSBnZW5lcmljIHNob3J0IHBhY2tldC4NCj4gPiAr ICogVGhlIGdlbmVyaWMgc2hvcnQgcGFja2V0cyByZWNlaXZlZCBhcmUgcXVldWVkIHVwIGluIGEg RklGTy4NCj4gPiArICogT24gcmVjZXB0aW9uIG9mIGEgZ2VuZXJpYyBzaG9ydCBwYWNrZXQsIGFu IGV2ZW50IHdpbGwgYmUgZ2VuZXJhdGVkDQo+ID4gKyAqIHdpdGggdGhlIHNob3J0IHBhY2tldCBj b250ZW50cyBjb3BpZWQgdG8gaXRzIGRhdGEgYXJlYS4NCj4gPiArICogQXBwbGljYXRpb24gc3Vi c2NyaWJlZCB0byB0aGlzIGV2ZW50IHdpbGwgcG9sbCBmb3IgUE9MTFBSSS4NCj4gPiArICogT24g Z2V0dGluZyB0aGUgZXZlbnQsIHRoZSBhcHAgZGVxdWV1ZXMgdGhlIGV2ZW50IHRvIGdldCB0aGUg c2hvcnQgcGFja2V0DQo+ID4gKyAqIGRhdGEuDQo+ID4gKyAqDQo+ID4gKyAqIFNlY29uZCBpcyB0 byByZWdpc3RlciBmb3IgU2hvcnQgcGFja2V0IEZJRk8gb3ZlcmZsb3cNCj4gPiArICogSW4gY2Fz ZSB0aGUgcmF0ZSBvZiByZWNlaXZpbmcgc2hvcnQgcGFja2V0cyBpcyBoaWdoIGFuZA0KPiA+ICsg KiB0aGUgc2hvcnQgcGFja2V0IEZJRk8gb3ZlcmZsb3dzLCB0aGlzIGV2ZW50IHdpbGwgYmUgdHJp Z2dlcmVkLg0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgZXJyb3JzIG90 aGVyd2lzZQ0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCB4Y3NpMnJ4c3Nfc3Vic2NyaWJlX2V2 ZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgdjRsMl9maCAqZmgsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgdjRsMl9ldmVudF9zdWJzY3JpcHRpb24gKnN1YikNCj4gPiAr ew0KPiA+ICsgICAgIHN0cnVjdCB4Y3NpMnJ4c3Nfc3RhdGUgKnhjc2kycnhzcyA9IHRvX3hjc2ky cnhzc3N0YXRlKHNkKTsNCj4gPiArICAgICBpbnQgcmV0Ow0KPiA+ICsNCj4gPiArICAgICBtdXRl eF9sb2NrKCZ4Y3NpMnJ4c3MtPmxvY2spOw0KPiA+ICsNCj4gPiArICAgICBzd2l0Y2ggKHN1Yi0+ dHlwZSkgew0KPiA+ICsgICAgIGNhc2UgVjRMMl9FVkVOVF9YTE5YQ1NJUlhfU0xCRjoNCj4gPiAr ICAgICAgICAgICAgIHJldCA9IHY0bDJfZXZlbnRfc3Vic2NyaWJlKGZoLCBzdWIsIFhDU0lfTUFY X1NQS1RfRVZFTlQsIE5VTEwpOw0KPiA+ICsgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAg ZGVmYXVsdDoNCj4gPiArICAgICAgICAgICAgIHJldCA9IC1FSU5WQUw7DQo+ID4gKyAgICAgfQ0K PiA+ICsNCj4gPiArICAgICBtdXRleF91bmxvY2soJnhjc2kycnhzcy0+bG9jayk7DQo+ID4gKw0K PiA+ICsgICAgIHJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiB4 Y3NpMnJ4c3NfdW5zdWJzY3JpYmVfZXZlbnQgLSBVbnN1YnNjcmliZSBmcm9tIGFsbCBldmVudHMg cmVnaXN0ZXJlZA0KPiA+ICsgKiBAc2Q6IFY0TDIgU3ViIGRldmljZQ0KPiA+ICsgKiBAZmg6IFY0 TDIgZmlsZSBoYW5kbGUNCj4gPiArICogQHN1YjogcG9pbnRlciB0byBFdmVudCB1bnN1YnNjcmlw dGlvbiBzdHJ1Y3R1cmUNCj4gPiArICoNCj4gPiArICogUmV0dXJuOiB6ZXJvIG9uIHN1Y2Nlc3Ms IGVsc2UgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLg0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCB4 Y3NpMnJ4c3NfdW5zdWJzY3JpYmVfZXZlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHY0bDJfZmggKmZoLA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdjRsMl9ldmVu dF9zdWJzY3JpcHRpb24gKnN1YikNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB4Y3NpMnJ4c3Nf c3RhdGUgKnhjc2kycnhzcyA9IHRvX3hjc2kycnhzc3N0YXRlKHNkKTsNCj4gPiArICAgICBpbnQg cmV0Ow0KPiA+ICsNCj4gPiArICAgICBtdXRleF9sb2NrKCZ4Y3NpMnJ4c3MtPmxvY2spOw0KPiA+ ICsgICAgIHJldCA9IHY0bDJfZXZlbnRfdW5zdWJzY3JpYmUoZmgsIHN1Yik7DQo+ID4gKyAgICAg bXV0ZXhfdW5sb2NrKCZ4Y3NpMnJ4c3MtPmxvY2spOw0KPiA+ICsNCj4gPiArICAgICByZXR1cm4g cmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogeGNzaTJyeHNzX3NfY3RybCAt IFRoaXMgaXMgdXNlZCB0byBzZXQgdGhlIFhpbGlueCBNSVBJIENTSS0yIFY0TDIgY29udHJvbHMN Cj4gPiArICogQGN0cmw6IFY0TDIgY29udHJvbCB0byBiZSBzZXQNCj4gPiArICoNCj4gPiArICog VGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCB0aGUgVjRMMiBjb250cm9scyBmb3IgdGhlIFhp bGlueCBNSVBJDQo+ID4gKyAqIENTSS0yIFJ4IFN1YnN5c3RlbS4gSXQgaXMgdXNlZCB0byBzZXQg dGhlIGFjdGl2ZSBsYW5lcyBpbiB0aGUgc3lzdGVtLg0KPiA+ICsgKiBUaGUgZXZlbnQgY291bnRl cnMgY2FuIGJlIHJlc2V0Lg0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywg ZXJyb3JzIG90aGVyd2lzZQ0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCB4Y3NpMnJ4c3Nfc19j dHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgeGNz aTJyeHNzX3N0YXRlICp4Y3NpMnJ4c3MgPQ0KPiA+ICsgICAgICAgICAgICAgY29udGFpbmVyX29m KGN0cmwtPmhhbmRsZXIsIHN0cnVjdCB4Y3NpMnJ4c3Nfc3RhdGUsDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgY3RybF9oYW5kbGVyKTsNCj4gPiArICAgICBzdHJ1Y3QgeGNzaTJyeHNz X2NvcmUgKmNvcmUgPSAmeGNzaTJyeHNzLT5jb3JlOw0KPiA+ICsgICAgIGludCByZXQgPSAwOw0K PiA+ICsNCj4gPiArICAgICBtdXRleF9sb2NrKCZ4Y3NpMnJ4c3MtPmxvY2spOw0KPiA+ICsNCj4g PiArICAgICBzd2l0Y2ggKGN0cmwtPmlkKSB7DQo+ID4gKyAgICAgY2FzZSBWNEwyX0NJRF9YSUxJ TlhfTUlQSUNTSVNTX0FDVF9MQU5FUzoNCj4gPiArICAgICAgICAgICAgIC8qDQo+ID4gKyAgICAg ICAgICAgICAgKiBUaGlzIHdpbGwgYmUgY2FsbGVkIG9ubHkgd2hlbiAiRW5hYmxlIEFjdGl2ZSBM YW5lcyIgcGFyYW1ldGVyDQo+ID4gKyAgICAgICAgICAgICAgKiBpcyBzZXQgaW4gZGVzaWduDQo+ ID4gKyAgICAgICAgICAgICAgKi8NCj4gPiArICAgICAgICAgICAgIGlmIChjb3JlLT5lbmFibGVf YWN0aXZlX2xhbmVzKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHUzMiBhY3RpdmVfbGFu ZXM7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICB4Y3NpMnJ4c3NfY2xyX2FuZF9z ZXQoY29yZSwgWENTSV9QQ1JfT0ZGU0VULA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgWENTSV9QQ1JfQUNUTEFORVNfTUFTSywNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0cmwtPnZhbCAtIDEpOw0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAvKg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgKiBUaGlz IGRlbGF5IGlzIHRvIGFsbG93IHRoZSB2YWx1ZSB0byByZWZsZWN0IGFzIHdyaXRlDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAqIGFuZCByZWFkIHBhdGhzIGFyZSBkaWZmZXJlbnQuDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAqLw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICB1ZGVs YXkoMSk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZV9sYW5lcyA9IHhjc2kycnhz c19yZWFkKGNvcmUsIFhDU0lfUENSX09GRlNFVCk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAg IGFjdGl2ZV9sYW5lcyAmPSBYQ1NJX1BDUl9BQ1RMQU5FU19NQVNLOw0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICBhY3RpdmVfbGFuZXMrKzsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgaWYg KGFjdGl2ZV9sYW5lcyAhPSBjdHJsLT52YWwpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZGV2X2luZm8oY29yZS0+ZGV2LCAiUnhCeXRlQ2xrSFMgYWJzZW50XG4iKTsNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgZGV2X2RiZyhjb3JlLT5kZXYsICJhY3RpdmUgbGFuZXMgPSAl ZFxuIiwgY3RybC0+dmFsKTsNCj4gPiArICAgICAgICAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgIHJldCA9IC1FSU5WQUw7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4g KyAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICBjYXNlIFY0TDJfQ0lEX1hJTElOWF9NSVBJ Q1NJU1NfUkVTRVRfQ09VTlRFUlM6DQo+ID4gKyAgICAgICAgICAgICB4Y3NpMnJ4c3NfcmVzZXRf ZXZlbnRfY291bnRlcnMoeGNzaTJyeHNzKTsNCj4gPiArICAgICAgICAgICAgIGJyZWFrOw0KPiA+ ICsgICAgIGRlZmF1bHQ6DQo+ID4gKyAgICAgICAgICAgICByZXQgPSAtRUlOVkFMOw0KPiA+ICsg ICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBtdXRleF91 bmxvY2soJnhjc2kycnhzcy0+bG9jayk7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiByZXQ7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgeGNzaTJyeHNzX3N0YXJ0X3N0cmVhbShzdHJ1 Y3QgeGNzaTJyeHNzX3N0YXRlICpzdGF0ZSkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB4Y3Np MnJ4c3NfY29yZSAqY29yZSA9ICZzdGF0ZS0+Y29yZTsNCj4gPiArICAgICBpbnQgcmV0ID0gMDsN Cj4gPiArDQo+ID4gKyAgICAgeGNzaTJyeHNzX2VuYWJsZShjb3JlKTsNCj4gPiArDQo+ID4gKyAg ICAgcmV0ID0geGNzaTJyeHNzX3Jlc2V0KGNvcmUpOw0KPiA+ICsgICAgIGlmIChyZXQgPCAwKSB7 DQo+ID4gKyAgICAgICAgICAgICBzdGF0ZS0+c3RyZWFtaW5nID0gZmFsc2U7DQo+ID4gKyAgICAg ICAgICAgICByZXR1cm4gcmV0Ow0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgeGNzaTJy eHNzX2ludHJfZW5hYmxlKGNvcmUpOw0KPiA+ICsgICAgIHN0YXRlLT5zdHJlYW1pbmcgPSB0cnVl Ow0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0 aWMgdm9pZCB4Y3NpMnJ4c3Nfc3RvcF9zdHJlYW0oc3RydWN0IHhjc2kycnhzc19zdGF0ZSAqc3Rh dGUpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgeGNzaTJyeHNzX2NvcmUgKmNvcmUgPSAmc3Rh dGUtPmNvcmU7DQo+ID4gKw0KPiA+ICsgICAgIHhjc2kycnhzc19pbnRyX2Rpc2FibGUoY29yZSk7 DQo+ID4gKyAgICAgeGNzaTJyeHNzX2Rpc2FibGUoY29yZSk7DQo+ID4gKyAgICAgc3RhdGUtPnN0 cmVhbWluZyA9IGZhbHNlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogeGNzaTJy eHNzX2lycV9oYW5kbGVyIC0gSW50ZXJydXB0IGhhbmRsZXIgZm9yIENTSS0yDQo+ID4gKyAqIEBp cnE6IElSUSBudW1iZXINCj4gPiArICogQGRldl9pZDogUG9pbnRlciB0byBkZXZpY2Ugc3RhdGUN Cj4gPiArICoNCj4gPiArICogSW4gdGhlIGludGVycnVwdCBoYW5kbGVyLCBhIGxpc3Qgb2YgZXZl bnQgY291bnRlcnMgYXJlIHVwZGF0ZWQgZm9yDQo+ID4gKyAqIGNvcnJlc3BvbmRpbmcgaW50ZXJy dXB0cy4gVGhpcyBpcyB1c2VmdWwgdG8gZ2V0IHN0YXR1cyAvIGRlYnVnLg0KPiA+ICsgKiBJZiB0 aGUgc2hvcnQgcGFja2V0IEZJRk8gbm90IGVtcHR5IG9yIG92ZXJmbG93IGludGVycnVwdCBpcyBy ZWNlaXZlZA0KPiA+ICsgKiBjYXB0dXJlIHRoZSBzaG9ydCBwYWNrZXQgYW5kIG5vdGlmeSBvZiBl dmVudCBvY2N1cnJlbmNlDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjogSVJRX0hBTkRMRUQgYWZ0 ZXIgaGFuZGxpbmcgaW50ZXJydXB0cw0KPiA+ICsgKiAgICAgICAgIElSUV9OT05FIGlzIG5vIGlu dGVycnVwdHMNCj4gPiArICovDQo+ID4gK3N0YXRpYyBpcnFyZXR1cm5fdCB4Y3NpMnJ4c3NfaXJx X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0 IHhjc2kycnhzc19zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IHhjc2kycnhzc19zdGF0ZSAqKWRldl9p ZDsNCj4gPiArICAgICBzdHJ1Y3QgeGNzaTJyeHNzX2NvcmUgKmNvcmUgPSAmc3RhdGUtPmNvcmU7 DQo+ID4gKyAgICAgdTMyIHN0YXR1czsNCj4gPiArDQo+ID4gKyAgICAgc3RhdHVzID0geGNzaTJy eHNzX3JlYWQoY29yZSwgWENTSV9JU1JfT0ZGU0VUKSAmDQo+IFhDU0lfSVNSX0FMTElOVFJfTUFT SzsNCj4gPiArICAgICBkZXZfZGJnX3JhdGVsaW1pdGVkKGNvcmUtPmRldiwgImludGVycnVwdCBz dGF0dXMgPSAweCUwOHhcbiIsIHN0YXR1cyk7DQo+ID4gKw0KPiA+ICsgICAgIGlmICghc3RhdHVz KQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIElSUV9OT05FOw0KPiA+ICsNCj4gPiArICAgICAv KiBSZWNlaXZlZCBhIHNob3J0IHBhY2tldCAqLw0KPiA+ICsgICAgIGlmIChzdGF0dXMgJiBYQ1NJ X0lTUl9TUEZJRk9ORSkgew0KPiA+ICsgICAgICAgICAgICAgZGV2X2RiZ19yYXRlbGltaXRlZChj b3JlLT5kZXYsICJTaG9ydCBwYWNrZXQgPSAweCUwOHhcbiIsDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHhjc2kycnhzc19yZWFkKGNvcmUsIFhDU0lfU1BLVFJfT0ZGU0VU KSk7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAvKiBTaG9ydCBwYWNrZXQgRklGTyBv dmVyZmxvdyAqLw0KPiA+ICsgICAgIGlmIChzdGF0dXMgJiBYQ1NJX0lTUl9TUEZJRk9GKQ0KPiA+ ICsgICAgICAgICAgICAgZGV2X2FsZXJ0X3JhdGVsaW1pdGVkKGNvcmUtPmRldiwgIlNob3J0IHBh Y2tldCBGSUZPIG92ZXJmbG93ZWRcbiIpOw0KPiA+ICsNCj4gPiArICAgICAvKg0KPiA+ICsgICAg ICAqIFN0cmVhbSBsaW5lIGJ1ZmZlciBmdWxsDQo+ID4gKyAgICAgICogVGhpcyBtZWFucyB0aGVy ZSBpcyBhIGJhY2twcmVzc3VyZSBmcm9tIGRvd25zdHJlYW0gSVANCj4gPiArICAgICAgKi8NCj4g PiArICAgICBpZiAoc3RhdHVzICYgWENTSV9JU1JfU0xCRikgew0KPiA+ICsgICAgICAgICAgICAg ZGV2X2FsZXJ0X3JhdGVsaW1pdGVkKGNvcmUtPmRldiwgIlN0cmVhbSBMaW5lIEJ1ZmZlciBGdWxs IVxuIik7DQo+ID4gKyAgICAgICAgICAgICBpZiAoY29yZS0+cnN0X2dwaW8pIHsNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgZ3Bpb2Rfc2V0X3ZhbHVlKGNvcmUtPnJzdF9ncGlvLCAxKTsNCj4g PiArICAgICAgICAgICAgICAgICAgICAgLyogbWluaW11bSA0MCBkcGh5X2Nsa18yMDBNIGN5Y2xl cyAqLw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBuZGVsYXkoMjUwKTsNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgZ3Bpb2Rfc2V0X3ZhbHVlKGNvcmUtPnJzdF9ncGlvLCAwKTsNCj4gPiAr ICAgICAgICAgICAgIH0NCj4gPiArICAgICAgICAgICAgIHhjc2kycnhzc19zdG9wX3N0cmVhbShz dGF0ZSk7DQo+ID4gKyAgICAgICAgICAgICBtZW1zZXQoJnN0YXRlLT5ldmVudCwgMCwgc2l6ZW9m KHN0YXRlLT5ldmVudCkpOw0KPiA+ICsgICAgICAgICAgICAgc3RhdGUtPmV2ZW50LnR5cGUgPSBW NEwyX0VWRU5UX1hMTlhDU0lSWF9TTEJGOw0KPiA+ICsgICAgICAgICAgICAgdjRsMl9zdWJkZXZf bm90aWZ5X2V2ZW50KCZzdGF0ZS0+c3ViZGV2LCAmc3RhdGUtPmV2ZW50KTsNCj4gPiArICAgICB9 DQo+ID4gKw0KPiA+ICsgICAgIC8qIEluY3JlbWVudCBldmVudCBjb3VudGVycyAqLw0KPiA+ICsg ICAgIGlmIChzdGF0dXMgJiBYQ1NJX0lTUl9BTExJTlRSX01BU0spIHsNCj4gPiArICAgICAgICAg ICAgIHVuc2lnbmVkIGludCBpOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgIGZvciAoaSA9IDA7 IGkgPCBYQ1NJX05VTV9FVkVOVFM7IGkrKykgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBp ZiAoIShzdGF0dXMgJiBjb3JlLT5ldmVudHNbaV0ubWFzaykpDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29udGludWU7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGNvcmUt PmV2ZW50c1tpXS5jb3VudGVyKys7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGRldl9kYmdf cmF0ZWxpbWl0ZWQoY29yZS0+ZGV2LCAiJXM6ICVkXG4iLA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUtPmV2ZW50c1tpXS5uYW1lLA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUtPmV2ZW50c1tpXS5jb3Vu dGVyKTsNCj4gPiArICAgICAgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgICAgICBpZiAo c3RhdHVzICYgWENTSV9JU1JfVkNYRkUgJiYgY29yZS0+ZW5fdmN4KSB7DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgIHUzMiB2Y3hzdGF0dXM7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICB2Y3hzdGF0dXMgPSB4Y3NpMnJ4c3NfcmVhZChjb3JlLCBYQ1NJX1ZDWFJfT0ZGU0VUKTsN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgdmN4c3RhdHVzICY9IFhDU0lfVkNYUl9WQ0VSUjsN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IFhDU0lfVkNYX05VTV9F VkVOVFM7IGkrKykgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHZj eHN0YXR1cyAmIGNvcmUtPnZjeF9ldmVudHNbaV0ubWFzaykpDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb3JlLT52Y3hfZXZlbnRzW2ldLmNvdW50ZXIrKzsNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICB4Y3NpMnJ4c3Nfd3JpdGUo Y29yZSwgWENTSV9WQ1hSX09GRlNFVCwgdmN4c3RhdHVzKTsNCj4gPiArICAgICAgICAgICAgIH0N Cj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIHhjc2kycnhzc193cml0ZShjb3JlLCBYQ1NJ X0lTUl9PRkZTRVQsIHN0YXR1cyk7DQo+ID4gKyAgICAgcmV0dXJuIElSUV9IQU5ETEVEOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogeGNzaTJyeHNzX3Nfc3RyZWFtIC0gSXQgaXMg dXNlZCB0byBzdGFydC9zdG9wIHRoZSBzdHJlYW1pbmcuDQo+ID4gKyAqIEBzZDogVjRMMiBTdWIg ZGV2aWNlDQo+ID4gKyAqIEBlbmFibGU6IEZsYWcgKFRydWUgLyBGYWxzZSkNCj4gPiArICoNCj4g PiArICogVGhpcyBmdW5jdGlvbiBjb250cm9scyB0aGUgc3RhcnQgb3Igc3RvcCBvZiBzdHJlYW1p bmcgZm9yIHRoZQ0KPiA+ICsgKiBYaWxpbnggTUlQSSBDU0ktMiBSeCBTdWJzeXN0ZW0uDQo+ID4g KyAqDQo+ID4gKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBlcnJvcnMgb3RoZXJ3aXNlDQo+ID4g KyAqLw0KPiA+ICtzdGF0aWMgaW50IHhjc2kycnhzc19zX3N0cmVhbShzdHJ1Y3QgdjRsMl9zdWJk ZXYgKnNkLCBpbnQgZW5hYmxlKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHhjc2kycnhzc19z dGF0ZSAqeGNzaTJyeHNzID0gdG9feGNzaTJyeHNzc3RhdGUoc2QpOw0KPiA+ICsgICAgIGludCBy ZXQgPSAwOw0KPiA+ICsNCj4gPiArICAgICBtdXRleF9sb2NrKCZ4Y3NpMnJ4c3MtPmxvY2spOw0K PiA+ICsNCj4gPiArICAgICBpZiAoZW5hYmxlKSB7DQo+ID4gKyAgICAgICAgICAgICBpZiAoIXhj c2kycnhzcy0+c3RyZWFtaW5nKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIC8qIHJlc2V0 IHRoZSBldmVudCBjb3VudGVycyAqLw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICB4Y3NpMnJ4 c3NfcmVzZXRfZXZlbnRfY291bnRlcnMoeGNzaTJyeHNzKTsNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgcmV0ID0geGNzaTJyeHNzX3N0YXJ0X3N0cmVhbSh4Y3NpMnJ4c3MpOw0KPiA+ICsgICAg ICAgICAgICAgfQ0KPiA+ICsgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICBpZiAoeGNz aTJyeHNzLT5zdHJlYW1pbmcpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGdw aW9fZGVzYyAqcnN0ID0geGNzaTJyeHNzLT5jb3JlLnJzdF9ncGlvOw0KPiA+ICsNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgaWYgKHJzdCkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChyc3QsIDEpOw0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVzbGVlcF9yYW5nZSgxLCAyKTsNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAocnN0LCAwKTsNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICB4Y3NpMnJ4 c3Nfc3RvcF9zdHJlYW0oeGNzaTJyeHNzKTsNCj4gPiArICAgICAgICAgICAgIH0NCj4gPiArICAg ICB9DQo+ID4gKw0KPiA+ICsgICAgIG11dGV4X3VubG9jaygmeGNzaTJyeHNzLT5sb2NrKTsNCj4g PiArICAgICByZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IHY0 bDJfbWJ1c19mcmFtZWZtdCAqDQo+ID4gK19feGNzaTJyeHNzX2dldF9wYWRfZm9ybWF0KHN0cnVj dCB4Y3NpMnJ4c3Nfc3RhdGUgKnhjc2kycnhzcywNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IHY0bDJfc3ViZGV2X3BhZF9jb25maWcgKmNmZywNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgaW50IHBhZCwgdTMyIHdoaWNoKQ0KPiA+ICt7DQo+ID4gKyAg ICAgc3dpdGNoICh3aGljaCkgew0KPiA+ICsgICAgIGNhc2UgVjRMMl9TVUJERVZfRk9STUFUX1RS WToNCj4gPiArICAgICAgICAgICAgIHJldHVybiB2NGwyX3N1YmRldl9nZXRfdHJ5X2Zvcm1hdCgm eGNzaTJyeHNzLT5zdWJkZXYsIGNmZywgcGFkKTsNCj4gPiArICAgICBjYXNlIFY0TDJfU1VCREVW X0ZPUk1BVF9BQ1RJVkU6DQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gJnhjc2kycnhzcy0+Zm9y bWF0Ow0KPiA+ICsgICAgIGRlZmF1bHQ6DQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gTlVMTDsN Cj4gPiArICAgICB9DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiB4Y3NpMnJ4c3Nf Z2V0X2Zvcm1hdCAtIEdldCB0aGUgcGFkIGZvcm1hdA0KPiA+ICsgKiBAc2Q6IFBvaW50ZXIgdG8g VjRMMiBTdWIgZGV2aWNlIHN0cnVjdHVyZQ0KPiA+ICsgKiBAY2ZnOiBQb2ludGVyIHRvIHN1YiBk ZXZpY2UgcGFkIGluZm9ybWF0aW9uIHN0cnVjdHVyZQ0KPiA+ICsgKiBAZm10OiBQb2ludGVyIHRv IHBhZCBsZXZlbCBtZWRpYSBidXMgZm9ybWF0DQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMgZnVuY3Rp b24gaXMgdXNlZCB0byBnZXQgdGhlIHBhZCBmb3JtYXQgaW5mb3JtYXRpb24uDQo+ID4gKyAqDQo+ ID4gKyAqIFJldHVybjogMCBvbiBzdWNjZXNzDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50IHhj c2kycnhzc19nZXRfZm9ybWF0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHY0bDJfc3ViZGV2X3BhZF9jb25maWcgKmNmZywN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfZm9y bWF0ICpmbXQpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgeGNzaTJyeHNzX3N0YXRlICp4Y3Np MnJ4c3MgPSB0b194Y3NpMnJ4c3NzdGF0ZShzZCk7DQo+ID4gKw0KPiA+ICsgICAgIG11dGV4X2xv Y2soJnhjc2kycnhzcy0+bG9jayk7DQo+ID4gKyAgICAgZm10LT5mb3JtYXQgPSAqX194Y3NpMnJ4 c3NfZ2V0X3BhZF9mb3JtYXQoeGNzaTJyeHNzLCBjZmcsIGZtdC0+cGFkLA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtdC0+d2hpY2gpOw0KPiA+ ICsgICAgIG11dGV4X3VubG9jaygmeGNzaTJyeHNzLT5sb2NrKTsNCj4gPiArDQo+ID4gKyAgICAg cmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiB4Y3NpMnJ4c3Nfc2V0 X2Zvcm1hdCAtIFRoaXMgaXMgdXNlZCB0byBzZXQgdGhlIHBhZCBmb3JtYXQNCj4gPiArICogQHNk OiBQb2ludGVyIHRvIFY0TDIgU3ViIGRldmljZSBzdHJ1Y3R1cmUNCj4gPiArICogQGNmZzogUG9p bnRlciB0byBzdWIgZGV2aWNlIHBhZCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUNCj4gPiArICogQGZt dDogUG9pbnRlciB0byBwYWQgbGV2ZWwgbWVkaWEgYnVzIGZvcm1hdA0KPiA+ICsgKg0KPiA+ICsg KiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IHRoZSBwYWQgZm9ybWF0LiBTaW5jZSB0aGUg cGFkIGZvcm1hdCBpcyBmaXhlZA0KPiA+ICsgKiBpbiBoYXJkd2FyZSwgaXQgY2FuJ3QgYmUgbW9k aWZpZWQgb24gcnVuIHRpbWUuIFNvIHdoZW4gYSBmb3JtYXQgc2V0IGlzDQo+ID4gKyAqIHJlcXVl c3RlZCBieSBhcHBsaWNhdGlvbiwgYWxsIHBhcmFtZXRlcnMgZXhjZXB0IHRoZSBmb3JtYXQgdHlw ZSBpcyBzYXZlZA0KPiA+ICsgKiBmb3IgdGhlIHBhZCBhbmQgdGhlIG9yaWdpbmFsIHBhZCBmb3Jt YXQgaXMgc2VudCBiYWNrIHRvIHRoZSBhcHBsaWNhdGlvbi4NCj4gPiArICoNCj4gPiArICogUmV0 dXJuOiAwIG9uIHN1Y2Nlc3MNCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQgeGNzaTJyeHNzX3Nl dF9mb3JtYXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX2NvbmZpZyAqY2ZnLA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgKmZtdCkN Cj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB4Y3NpMnJ4c3Nfc3RhdGUgKnhjc2kycnhzcyA9IHRv X3hjc2kycnhzc3N0YXRlKHNkKTsNCj4gPiArICAgICBzdHJ1Y3QgeGNzaTJyeHNzX2NvcmUgKmNv cmUgPSAmeGNzaTJyeHNzLT5jb3JlOw0KPiA+ICsgICAgIHN0cnVjdCB2NGwyX21idXNfZnJhbWVm bXQgKl9fZm9ybWF0Ow0KPiA+ICsgICAgIHUzMiBjb2RlOw0KPiA+ICsNCj4gPiArICAgICAvKiBv bmx5IHNpbmsgcGFkIGZvcm1hdCBjYW4gYmUgdXBkYXRlZCAqLw0KPiA+ICsgICAgIG11dGV4X2xv Y2soJnhjc2kycnhzcy0+bG9jayk7DQo+ID4gKw0KPiA+ICsgICAgIC8qDQo+ID4gKyAgICAgICog T25seSB0aGUgZm9ybWF0LT5jb2RlIHBhcmFtZXRlciBtYXR0ZXJzIGZvciBDU0kgYXMgdGhlDQo+ ID4gKyAgICAgICogQ1NJIGZvcm1hdCBjYW5ub3QgYmUgY2hhbmdlZCBhdCBydW50aW1lLg0KPiA+ ICsgICAgICAqIEVuc3VyZSB0aGF0IGZvcm1hdCB0byBzZXQgaXMgY29waWVkIHRvIG92ZXIgdG8g Q1NJIHBhZCBmb3JtYXQNCj4gPiArICAgICAgKi8NCj4gPiArICAgICBfX2Zvcm1hdCA9IF9feGNz aTJyeHNzX2dldF9wYWRfZm9ybWF0KHhjc2kycnhzcywgY2ZnLA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm10LT5wYWQsIGZtdC0+d2hpY2gpOw0KPiA+ ICsNCj4gPiArICAgICAvKiBTYXZlIHRoZSBwYWQgZm9ybWF0IGNvZGUgKi8NCj4gPiArICAgICBj b2RlID0gX19mb3JtYXQtPmNvZGU7DQo+ID4gKw0KPiA+ICsgICAgIC8qDQo+ID4gKyAgICAgICog UkFXOCBpcyBzdXBwb3J0ZWQgaW4gYWxsIGRhdGF0eXBlcy4gU28gaWYgcmVxdWVzdGVkIG1lZGlh IGJ1cyBmb3JtYXQNCj4gPiArICAgICAgKiBpcyBvZiBSQVc4IHR5cGUsIHRoZW4gYWxsb3cgdG8g YmUgc2V0LiBJbiBjYXNlIGNvcmUgaXMgY29uZmlndXJlZCB0bw0KPiA+ICsgICAgICAqIG90aGVy IFJBVywgWVVWNDIyIDgvMTAgb3IgUkdCODg4LCBzZXQgYXBwcm9wcmlhdGUgbWVkaWEgYnVzDQo+ IGZvcm1hdC4NCj4gPiArICAgICAgKi8NCj4gPiArICAgICBpZiAoKGZtdC0+Zm9ybWF0LmNvZGUg PT0gTUVESUFfQlVTX0ZNVF9TQkdHUjhfMVg4IHx8DQo+ID4gKyAgICAgICAgICBmbXQtPmZvcm1h dC5jb2RlID09IE1FRElBX0JVU19GTVRfU0dCUkc4XzFYOCB8fA0KPiA+ICsgICAgICAgICAgZm10 LT5mb3JtYXQuY29kZSA9PSBNRURJQV9CVVNfRk1UX1NHUkJHOF8xWDggfHwNCj4gPiArICAgICAg ICAgIGZtdC0+Zm9ybWF0LmNvZGUgPT0gTUVESUFfQlVTX0ZNVF9TUkdHQjhfMVg4KSB8fA0KPiA+ ICsgICAgICAgICAoY29yZS0+ZGF0YXR5cGUgPT0gWENTSV9EVF9SQVcxMCAmJg0KPiA+ICsgICAg ICAgICAgKGZtdC0+Zm9ybWF0LmNvZGUgPT0gTUVESUFfQlVTX0ZNVF9TQkdHUjEwXzFYMTAgfHwN Cj4gPiArICAgICAgICAgICBmbXQtPmZvcm1hdC5jb2RlID09IE1FRElBX0JVU19GTVRfU0dCUkcx MF8xWDEwIHx8DQo+ID4gKyAgICAgICAgICAgZm10LT5mb3JtYXQuY29kZSA9PSBNRURJQV9CVVNf Rk1UX1NHUkJHMTBfMVgxMCB8fA0KPiA+ICsgICAgICAgICAgIGZtdC0+Zm9ybWF0LmNvZGUgPT0g TUVESUFfQlVTX0ZNVF9TUkdHQjEwXzFYMTApKSB8fA0KPiA+ICsgICAgICAgICAoY29yZS0+ZGF0 YXR5cGUgPT0gWENTSV9EVF9SQVcxMiAmJg0KPiA+ICsgICAgICAgICAgKGZtdC0+Zm9ybWF0LmNv ZGUgPT0gTUVESUFfQlVTX0ZNVF9TQkdHUjEyXzFYMTIgfHwNCj4gPiArICAgICAgICAgICBmbXQt PmZvcm1hdC5jb2RlID09IE1FRElBX0JVU19GTVRfU0dCUkcxMl8xWDEyIHx8DQo+ID4gKyAgICAg ICAgICAgZm10LT5mb3JtYXQuY29kZSA9PSBNRURJQV9CVVNfRk1UX1NHUkJHMTJfMVgxMiB8fA0K PiA+ICsgICAgICAgICAgIGZtdC0+Zm9ybWF0LmNvZGUgPT0gTUVESUFfQlVTX0ZNVF9TUkdHQjEy XzFYMTIpKSB8fA0KPiA+ICsgICAgICAgICAoY29yZS0+ZGF0YXR5cGUgPT0gWENTSV9EVF9SQVcx NCAmJg0KPiA+ICsgICAgICAgICAgKGZtdC0+Zm9ybWF0LmNvZGUgPT0gTUVESUFfQlVTX0ZNVF9T QkdHUjE0XzFYMTQgfHwNCj4gPiArICAgICAgICAgICBmbXQtPmZvcm1hdC5jb2RlID09IE1FRElB X0JVU19GTVRfU0dCUkcxNF8xWDE0IHx8DQo+ID4gKyAgICAgICAgICAgZm10LT5mb3JtYXQuY29k ZSA9PSBNRURJQV9CVVNfRk1UX1NHUkJHMTRfMVgxNCB8fA0KPiA+ICsgICAgICAgICAgIGZtdC0+ Zm9ybWF0LmNvZGUgPT0gTUVESUFfQlVTX0ZNVF9TUkdHQjE0XzFYMTQpKSB8fA0KPiA+ICsgICAg ICAgICAoY29yZS0+ZGF0YXR5cGUgPT0gWENTSV9EVF9SQVcxNiAmJg0KPiA+ICsgICAgICAgICAg KGZtdC0+Zm9ybWF0LmNvZGUgPT0gTUVESUFfQlVTX0ZNVF9TQkdHUjE2XzFYMTYgfHwNCj4gPiAr ICAgICAgICAgICBmbXQtPmZvcm1hdC5jb2RlID09IE1FRElBX0JVU19GTVRfU0dCUkcxNl8xWDE2 IHx8DQo+ID4gKyAgICAgICAgICAgZm10LT5mb3JtYXQuY29kZSA9PSBNRURJQV9CVVNfRk1UX1NH UkJHMTZfMVgxNiB8fA0KPiA+ICsgICAgICAgICAgIGZtdC0+Zm9ybWF0LmNvZGUgPT0gTUVESUFf QlVTX0ZNVF9TUkdHQjE2XzFYMTYpKSB8fA0KPiA+ICsgICAgICAgICAoY29yZS0+ZGF0YXR5cGUg PT0gWENTSV9EVF9ZVVY0MjI4QiAmJg0KPiA+ICsgICAgICAgICAgZm10LT5mb3JtYXQuY29kZSA9 PSBNRURJQV9CVVNfRk1UX1VZVlk4XzFYMTYpIHx8DQo+ID4gKyAgICAgICAgIChjb3JlLT5kYXRh dHlwZSA9PSBYQ1NJX0RUX1lVVjQyMjEwQiAmJg0KPiA+ICsgICAgICAgICAgZm10LT5mb3JtYXQu Y29kZSA9PSBNRURJQV9CVVNfRk1UX1VZVlkxMF8xWDIwKSB8fA0KPiA+ICsgICAgICAgICAoY29y ZS0+ZGF0YXR5cGUgPT0gWENTSV9EVF9SR0I4ODggJiYNCj4gPiArICAgICAgICAgIGZtdC0+Zm9y bWF0LmNvZGUgPT0gTUVESUFfQlVTX0ZNVF9SQkc4ODhfMVgyNCkpIHsNCj4gPiArICAgICAgICAg ICAgIC8qIENvcHkgb3ZlciB0aGUgZm9ybWF0IHRvIGJlIHNldCAqLw0KPiA+ICsgICAgICAgICAg ICAgKl9fZm9ybWF0ID0gZm10LT5mb3JtYXQ7DQo+ID4gKyAgICAgfSBlbHNlIHsNCj4gPiArICAg ICAgICAgICAgIC8qIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHBhZCBmb3JtYXQgY29kZSAqLw0KPiA+ ICsgICAgICAgICAgICAgZm10LT5mb3JtYXQuY29kZSA9IGNvZGU7DQo+ID4gKyAgICAgICAgICAg ICBfX2Zvcm1hdC0+Y29kZSA9IGNvZGU7DQo+ID4gKyAgICAgICAgICAgICBfX2Zvcm1hdC0+d2lk dGggPSBmbXQtPmZvcm1hdC53aWR0aDsNCj4gPiArICAgICAgICAgICAgIF9fZm9ybWF0LT5oZWln aHQgPSBmbXQtPmZvcm1hdC5oZWlnaHQ7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBt dXRleF91bmxvY2soJnhjc2kycnhzcy0+bG9jayk7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiAw Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogeGNzaTJyeHNzX29wZW4gLSBDYWxs ZWQgb24gdjRsMl9vcGVuKCkNCj4gPiArICogQHNkOiBQb2ludGVyIHRvIFY0TDIgc3ViIGRldmlj ZSBzdHJ1Y3R1cmUNCj4gPiArICogQGZoOiBQb2ludGVyIHRvIFY0TDIgRmlsZSBoYW5kbGUNCj4g PiArICoNCj4gPiArICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb24gdjRsMl9vcGVuKCkuIEl0 IHNldHMgdGhlIGRlZmF1bHQgZm9ybWF0DQo+ID4gKyAqIGZvciBib3RoIHBhZHMuDQo+ID4gKyAq DQo+ID4gKyAqIFJldHVybjogMCBvbiBzdWNjZXNzDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50 IHhjc2kycnhzc19vcGVuKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IHY0bDJfc3ViZGV2X2ZoICpmaCkNCj4gPiArew0KPiA+ICsgICAg IHN0cnVjdCB4Y3NpMnJ4c3Nfc3RhdGUgKnhjc2kycnhzcyA9IHRvX3hjc2kycnhzc3N0YXRlKHNk KTsNCj4gPiArICAgICBzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICpmb3JtYXQ7DQo+ID4gKyAg ICAgdW5zaWduZWQgaW50IGk7DQo+ID4gKw0KPiA+ICsgICAgIGZvciAoaSA9IDA7IGkgPCBYQ1NJ X01FRElBX1BBRFM7IGkrKykgew0KPiA+ICsgICAgICAgICAgICAgZm9ybWF0ID0gdjRsMl9zdWJk ZXZfZ2V0X3RyeV9mb3JtYXQoc2QsIGZoLT5wYWQsIGkpOw0KPiA+ICsgICAgICAgICAgICAgKmZv cm1hdCA9IHhjc2kycnhzcy0+Zm9ybWF0Ow0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAg cmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ ID4gKyAqIE1lZGlhIE9wZXJhdGlvbnMNCj4gPiArICovDQo+ID4gKw0KPiA+ICtzdGF0aWMgY29u c3Qgc3RydWN0IG1lZGlhX2VudGl0eV9vcGVyYXRpb25zIHhjc2kycnhzc19tZWRpYV9vcHMgPSB7 DQo+ID4gKyAgICAgLmxpbmtfdmFsaWRhdGUgPSB2NGwyX3N1YmRldl9saW5rX3ZhbGlkYXRlDQo+ ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfY3RybF9vcHMgeGNz aTJyeHNzX2N0cmxfb3BzID0gew0KPiA+ICsgICAgIC5zX2N0cmwgPSB4Y3NpMnJ4c3Nfc19jdHJs DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IHY0bDJfY3RybF9jb25maWcgeGNz aTJyeHNzX2N0cmxzW10gPSB7DQo+ID4gKyAgICAgew0KPiA+ICsgICAgICAgICAgICAgLm9wcyAg ICA9ICZ4Y3NpMnJ4c3NfY3RybF9vcHMsDQo+ID4gKyAgICAgICAgICAgICAuaWQgICAgID0gVjRM Ml9DSURfWElMSU5YX01JUElDU0lTU19BQ1RfTEFORVMsDQo+ID4gKyAgICAgICAgICAgICAubmFt ZSAgID0gIkFjdGl2ZSBMYW5lcyIsDQo+ID4gKyAgICAgICAgICAgICAudHlwZSAgID0gVjRMMl9D VFJMX1RZUEVfSU5URUdFUiwNCj4gPiArICAgICAgICAgICAgIC5taW4gICAgPSAxLA0KPiA+ICsg ICAgICAgICAgICAgLm1heCAgICA9IDQsDQo+ID4gKyAgICAgICAgICAgICAuc3RlcCAgID0gMSwN Cj4gPiArICAgICAgICAgICAgIC5kZWYgICAgPSAxLA0KPiA+ICsgICAgIH0sIHsNCj4gPiArICAg ICAgICAgICAgIC5vcHMgICAgPSAmeGNzaTJyeHNzX2N0cmxfb3BzLA0KPiA+ICsgICAgICAgICAg ICAgLmlkICAgICA9IFY0TDJfQ0lEX1hJTElOWF9NSVBJQ1NJU1NfUkVTRVRfQ09VTlRFUlMsDQo+ ID4gKyAgICAgICAgICAgICAubmFtZSAgID0gIlJlc2V0IENvdW50ZXJzIiwNCj4gPiArICAgICAg ICAgICAgIC50eXBlICAgPSBWNEwyX0NUUkxfVFlQRV9CVVRUT04sDQo+ID4gKyAgICAgICAgICAg ICAubWluICAgID0gMCwNCj4gPiArICAgICAgICAgICAgIC5tYXggICAgPSAxLA0KPiA+ICsgICAg ICAgICAgICAgLnN0ZXAgICA9IDEsDQo+ID4gKyAgICAgICAgICAgICAuZGVmICAgID0gMCwNCj4g PiArICAgICAgICAgICAgIC5mbGFncyAgPSBWNEwyX0NUUkxfRkxBR19XUklURV9PTkxZLA0KPiA+ ICsgICAgIH0NCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9z dWJkZXZfY29yZV9vcHMgeGNzaTJyeHNzX2NvcmVfb3BzID0gew0KPiA+ICsgICAgIC5sb2dfc3Rh dHVzID0geGNzaTJyeHNzX2xvZ19zdGF0dXMsDQo+ID4gKyAgICAgLnN1YnNjcmliZV9ldmVudCA9 IHhjc2kycnhzc19zdWJzY3JpYmVfZXZlbnQsDQo+ID4gKyAgICAgLnVuc3Vic2NyaWJlX2V2ZW50 ID0geGNzaTJyeHNzX3Vuc3Vic2NyaWJlX2V2ZW50DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0 aWMgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyB4Y3NpMnJ4c3NfdmlkZW9fb3BzID0gew0K PiA+ICsgICAgIC5zX3N0cmVhbSA9IHhjc2kycnhzc19zX3N0cmVhbQ0KPiA+ICt9Ow0KPiA+ICsN Cj4gPiArc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl9wYWRfb3BzIHhjc2kycnhzc19wYWRfb3Bz ID0gew0KPiA+ICsgICAgIC5nZXRfZm10ID0geGNzaTJyeHNzX2dldF9mb3JtYXQsDQo+ID4gKyAg ICAgLnNldF9mbXQgPSB4Y3NpMnJ4c3Nfc2V0X2Zvcm1hdCwNCj4gPiArfTsNCj4gPiArDQo+ID4g K3N0YXRpYyBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIHhjc2kycnhzc19vcHMgPSB7DQo+ID4gKyAg ICAgLmNvcmUgPSAmeGNzaTJyeHNzX2NvcmVfb3BzLA0KPiA+ICsgICAgIC52aWRlbyA9ICZ4Y3Np MnJ4c3NfdmlkZW9fb3BzLA0KPiA+ICsgICAgIC5wYWQgPSAmeGNzaTJyeHNzX3BhZF9vcHMNCj4g PiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfaW50ZXJu YWxfb3BzIHhjc2kycnhzc19pbnRlcm5hbF9vcHMgPSB7DQo+ID4gKyAgICAgLm9wZW4gPSB4Y3Np MnJ4c3Nfb3BlbiwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHhjc2kycnhzc19z ZXRfZGVmYXVsdF9mb3JtYXQoc3RydWN0IHhjc2kycnhzc19zdGF0ZSAqc3RhdGUpDQo+ID4gK3sN Cj4gPiArICAgICBzdHJ1Y3QgeGNzaTJyeHNzX2NvcmUgKmNvcmUgPSAmc3RhdGUtPmNvcmU7DQo+ ID4gKw0KPiA+ICsgICAgIG1lbXNldCgmc3RhdGUtPmZvcm1hdCwgMCwgc2l6ZW9mKHN0YXRlLT5m b3JtYXQpKTsNCj4gPiArDQo+ID4gKyAgICAgc3dpdGNoIChjb3JlLT5kYXRhdHlwZSkgew0KPiA+ ICsgICAgIGNhc2UgWENTSV9EVF9ZVVY0MjI4QjoNCj4gPiArICAgICAgICAgICAgIHN0YXRlLT5m b3JtYXQuY29kZSA9IE1FRElBX0JVU19GTVRfVVlWWThfMVgxNjsNCj4gPiArICAgICAgICAgICAg IGJyZWFrOw0KPiA+ICsgICAgIGNhc2UgWENTSV9EVF9SR0I4ODg6DQo+ID4gKyAgICAgICAgICAg ICBzdGF0ZS0+Zm9ybWF0LmNvZGUgPSBNRURJQV9CVVNfRk1UX1JCRzg4OF8xWDI0Ow0KPiA+ICsg ICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgY2FzZSBYQ1NJX0RUX1lVVjQyMjEwQjoNCj4g PiArICAgICAgICAgICAgIHN0YXRlLT5mb3JtYXQuY29kZSA9IE1FRElBX0JVU19GTVRfVVlWWTEw XzFYMjA7DQo+ID4gKyAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICBjYXNlIFhDU0lfRFRf UkFXMTA6DQo+ID4gKyAgICAgICAgICAgICBzdGF0ZS0+Zm9ybWF0LmNvZGUgPSBNRURJQV9CVVNf Rk1UX1NSR0dCMTBfMVgxMDsNCj4gPiArICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgIGNh c2UgWENTSV9EVF9SQVcxMjoNCj4gPiArICAgICAgICAgICAgIHN0YXRlLT5mb3JtYXQuY29kZSA9 IE1FRElBX0JVU19GTVRfU1JHR0IxMl8xWDEyOw0KPiA+ICsgICAgICAgICAgICAgYnJlYWs7DQo+ ID4gKyAgICAgY2FzZSBYQ1NJX0RUX1JBVzE0Og0KPiA+ICsgICAgICAgICAgICAgc3RhdGUtPmZv cm1hdC5jb2RlID0gTUVESUFfQlVTX0ZNVF9TUkdHQjE0XzFYMTQ7DQo+ID4gKyAgICAgICAgICAg ICBicmVhazsNCj4gPiArICAgICBjYXNlIFhDU0lfRFRfUkFXMTY6DQo+ID4gKyAgICAgICAgICAg ICBzdGF0ZS0+Zm9ybWF0LmNvZGUgPSBNRURJQV9CVVNfRk1UX1NSR0dCMTZfMVgxNjsNCj4gPiAr ICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgIGNhc2UgWENTSV9EVF9SQVc4Og0KPiA+ICsg ICAgIGNhc2UgWENTSV9EVF9SR0I0NDQ6DQo+ID4gKyAgICAgY2FzZSBYQ1NJX0RUX1JHQjU1NToN Cj4gPiArICAgICBjYXNlIFhDU0lfRFRfUkdCNTY1Og0KPiA+ICsgICAgIGNhc2UgWENTSV9EVF9S R0I2NjY6DQo+ID4gKyAgICAgICAgICAgICBzdGF0ZS0+Zm9ybWF0LmNvZGUgPSBNRURJQV9CVVNf Rk1UX1NSR0dCOF8xWDg7DQo+ID4gKyAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICB9DQo+ ID4gKw0KPiA+ICsgICAgIHN0YXRlLT5mb3JtYXQuZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7DQo+ ID4gKyAgICAgc3RhdGUtPmZvcm1hdC5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0I7 DQo+ID4gKyAgICAgc3RhdGUtPmZvcm1hdC53aWR0aCA9IFhDU0lfREVGQVVMVF9XSURUSDsNCj4g PiArICAgICBzdGF0ZS0+Zm9ybWF0LmhlaWdodCA9IFhDU0lfREVGQVVMVF9IRUlHSFQ7DQo+ID4g Kw0KPiA+ICsgICAgIGRldl9kYmcoY29yZS0+ZGV2LCAiZGVmYXVsdCBtZWRpYWJ1cyBmb3JtYXQg PSAweCV4IiwNCj4gPiArICAgICAgICAgICAgIHN0YXRlLT5mb3JtYXQuY29kZSk7DQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgeGNzaTJyeHNzX3BhcnNlX29mKHN0cnVjdCB4Y3NpMnJ4 c3Nfc3RhdGUgKnhjc2kycnhzcykNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB4Y3NpMnJ4c3Nf Y29yZSAqY29yZSA9ICZ4Y3NpMnJ4c3MtPmNvcmU7DQo+ID4gKyAgICAgc3RydWN0IGRldmljZV9u b2RlICpub2RlID0geGNzaTJyeHNzLT5jb3JlLmRldi0+b2Zfbm9kZTsNCj4gPiArICAgICBzdHJ1 Y3QgZGV2aWNlX25vZGUgKnBvcnRzID0gTlVMTDsNCj4gPiArICAgICBzdHJ1Y3QgZGV2aWNlX25v ZGUgKnBvcnQgPSBOVUxMOw0KPiA+ICsgICAgIHVuc2lnbmVkIGludCBucG9ydHMsIGlycTsNCj4g PiArICAgICBib29sIGVuX2NzaV92MjAsIHZmYjsNCj4gPiArICAgICBpbnQgcmV0Ow0KPiA+ICsN Cj4gPiArICAgICBlbl9jc2lfdjIwID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKG5vZGUsICJ4bG54 LGVuLWNzaS12Mi0wIik7DQo+ID4gKyAgICAgaWYgKGVuX2NzaV92MjApDQo+ID4gKyAgICAgICAg ICAgICBjb3JlLT5lbl92Y3ggPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobm9kZSwgInhsbngsZW4t dmN4Iik7DQo+ID4gKw0KPiA+ICsgICAgIGNvcmUtPmVuYWJsZV9hY3RpdmVfbGFuZXMgPQ0KPiA+ ICsgICAgICAgICAgICAgb2ZfcHJvcGVydHlfcmVhZF9ib29sKG5vZGUsICJ4bG54LGVuLWFjdGl2 ZS1sYW5lcyIpOw0KPiA+ICsNCj4gPiArICAgICByZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihu b2RlLCAieGxueCxjc2ktcHhsLWZvcm1hdCIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJmNvcmUtPmRhdGF0eXBlKTsNCj4gPiArICAgICBpZiAocmV0IDwgMCkgew0KPiA+ ICsgICAgICAgICAgICAgZGV2X2Vycihjb3JlLT5kZXYsICJtaXNzaW5nIHhsbngsY3NpLXB4bC1m b3JtYXQgcHJvcGVydHlcbiIpOw0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gPiAr ICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIHN3aXRjaCAoY29yZS0+ZGF0YXR5cGUpIHsNCj4gPiAr ICAgICBjYXNlIFhDU0lfRFRfWVVWNDIyOEI6DQo+ID4gKyAgICAgY2FzZSBYQ1NJX0RUX1JHQjQ0 NDoNCj4gPiArICAgICBjYXNlIFhDU0lfRFRfUkdCNTU1Og0KPiA+ICsgICAgIGNhc2UgWENTSV9E VF9SR0I1NjU6DQo+ID4gKyAgICAgY2FzZSBYQ1NJX0RUX1JHQjY2NjoNCj4gPiArICAgICBjYXNl IFhDU0lfRFRfUkdCODg4Og0KPiA+ICsgICAgIGNhc2UgWENTSV9EVF9SQVc2Og0KPiA+ICsgICAg IGNhc2UgWENTSV9EVF9SQVc3Og0KPiA+ICsgICAgIGNhc2UgWENTSV9EVF9SQVc4Og0KPiA+ICsg ICAgIGNhc2UgWENTSV9EVF9SQVcxMDoNCj4gPiArICAgICBjYXNlIFhDU0lfRFRfUkFXMTI6DQo+ ID4gKyAgICAgY2FzZSBYQ1NJX0RUX1JBVzE0Og0KPiA+ICsgICAgICAgICAgICAgYnJlYWs7DQo+ ID4gKyAgICAgY2FzZSBYQ1NJX0RUX1lVVjQyMjEwQjoNCj4gPiArICAgICBjYXNlIFhDU0lfRFRf UkFXMTY6DQo+ID4gKyAgICAgY2FzZSBYQ1NJX0RUX1JBVzIwOg0KPiA+ICsgICAgICAgICAgICAg aWYgKCFlbl9jc2lfdjIwKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU5W QUw7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGRldl9kYmcoY29yZS0+ZGV2LCAiZW5hYmxl IGNzaSB2MiBmb3IgdGhpcyBwaXhlbCBmb3JtYXQiKTsNCj4gPiArICAgICAgICAgICAgIH0NCj4g PiArICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgIGRlZmF1bHQ6DQo+ID4gKyAgICAgICAg ICAgICByZXQgPSAtRUlOVkFMOw0KPiA+ICsgICAgIH0NCj4gPiArICAgICBpZiAocmV0IDwgMCkg ew0KPiA+ICsgICAgICAgICAgICAgZGV2X2Vycihjb3JlLT5kZXYsICJpbnZhbGlkIGNzaS1weGwt Zm9ybWF0IHByb3BlcnR5IVxuIik7DQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiA+ ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgdmZiID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKG5v ZGUsICJ4bG54LHZmYiIpOw0KPiA+ICsgICAgIGlmICghdmZiKSB7DQo+ID4gKyAgICAgICAgICAg ICBkZXZfZXJyKGNvcmUtPmRldiwgImZhaWxlZCBhcyBWRkIgaXMgZGlzYWJsZWQhXG4iKTsNCj4g PiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4g KyAgICAgcG9ydHMgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShub2RlLCAicG9ydHMiKTsNCj4gPiAr ICAgICBpZiAoIXBvcnRzKQ0KPiA+ICsgICAgICAgICAgICAgcG9ydHMgPSBub2RlOw0KPiA+ICsN Cj4gPiArICAgICBucG9ydHMgPSAwOw0KPiA+ICsgICAgIGZvcl9lYWNoX2NoaWxkX29mX25vZGUo cG9ydHMsIHBvcnQpIHsNCj4gPiArICAgICAgICAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZW5k cG9pbnQ7DQo+ID4gKyAgICAgICAgICAgICBzdHJ1Y3QgdjRsMl9md25vZGVfZW5kcG9pbnQgdjRs ZW5kcG9pbnQ7DQo+ID4gKyAgICAgICAgICAgICBpbnQgcmV0Ow0KPiA+ICsNCj4gPiArICAgICAg ICAgICAgIGlmICghcG9ydC0+bmFtZSB8fCBvZl9ub2RlX2NtcChwb3J0LT5uYW1lLCAicG9ydCIp KQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCj4gPiArDQo+ID4gKyAgICAg ICAgICAgICBlbmRwb2ludCA9IG9mX2dldF9uZXh0X2NoaWxkKHBvcnQsIE5VTEwpOw0KPiA+ICsg ICAgICAgICAgICAgaWYgKCFlbmRwb2ludCkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBk ZXZfZXJyKGNvcmUtPmRldiwgIk5vIHBvcnQgYXRcbiIpOw0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gLUVJTlZBTDsNCj4gPiArICAgICAgICAgICAgIH0NCj4gPiArDQo+ID4gKyAg ICAgICAgICAgICAvKg0KPiA+ICsgICAgICAgICAgICAgICogc2luY2UgZmlyc3QgcG9ydCBpcyBz aW5rIHBvcnQgYW5kIGl0IGNvbnRhaW5zDQo+ID4gKyAgICAgICAgICAgICAgKiBhbGwgaW5mbyBh Ym91dCBkYXRhLWxhbmVzIGFuZCBjZmEtcGF0dGVybiwNCj4gPiArICAgICAgICAgICAgICAqIGRv bid0IHBhcnNlIHNlY29uZCBwb3J0IGJ1dCBvbmx5IGNoZWNrIGlmIGV4aXN0cw0KPiA+ICsgICAg ICAgICAgICAgICovDQo+ID4gKyAgICAgICAgICAgICBpZiAobnBvcnRzID09IFhWSVBfUEFEX1NP VVJDRSkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBkZXZfZGJnKGNvcmUtPmRldiwgIm5v IG5lZWQgdG8gcGFyc2Ugc291cmNlIHBvcnQiKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAg bnBvcnRzKys7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIG9mX25vZGVfcHV0KGVuZHBvaW50 KTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQo+ID4gKyAgICAgICAgICAg ICB9DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgcmV0ID0gdjRsMl9md25vZGVfZW5kcG9pbnRf cGFyc2Uob2ZfZndub2RlX2hhbmRsZShlbmRwb2ludCksDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdjRsZW5kcG9pbnQpOw0KPiA+ICsgICAgICAg ICAgICAgb2Zfbm9kZV9wdXQoZW5kcG9pbnQpOw0KPiA+ICsgICAgICAgICAgICAgaWYgKHJldCkN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gKyAgICAg ICAgICAgICBkZXZfZGJnKGNvcmUtPmRldiwgIiVzIDogcG9ydCAlZCBidXMgdHlwZSA9ICVkXG4i LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgbnBvcnRzLCB2NGxlbmRwb2lu dC5idXNfdHlwZSk7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgaWYgKHY0bGVuZHBvaW50LmJ1 c190eXBlID09IFY0TDJfTUJVU19DU0kyX0RQSFkpIHsNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgZGV2X2RiZyhjb3JlLT5kZXYsICIlcyA6IGJhc2UucG9ydCA9ICVkIGJhc2UuaWQgPSAlZFxu IiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgdjRsZW5kcG9p bnQuYmFzZS5wb3J0LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY0bGVuZHBv aW50LmJhc2UuaWQpOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgZGV2X2RiZyhj b3JlLT5kZXYsICIlcyA6IG1pcGkgbnVtYmVyIGxhbmVzID0gJWRcbiIsDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdjRsZW5kcG9pbnQuYnVzLm1pcGlfY3NpMi5udW1fZGF0YV9sYW5lcyk7DQo+ID4g Kw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBjb3JlLT5tYXhfbnVtX2xhbmVzID0NCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2NGxlbmRwb2ludC5idXMubWlwaV9jc2kyLm51 bV9kYXRhX2xhbmVzOw0KPiA+ICsgICAgICAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICAg ICAgIC8qIENvdW50IHRoZSBudW1iZXIgb2YgcG9ydHMuICovDQo+ID4gKyAgICAgICAgICAgICBu cG9ydHMrKzsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIGlmIChucG9ydHMgIT0gWENT SV9NRURJQV9QQURTKSB7DQo+ID4gKyAgICAgICAgICAgICBkZXZfZXJyKGNvcmUtPmRldiwgImlu dmFsaWQgbnVtYmVyIG9mIHBvcnRzICV1XG4iLCBucG9ydHMpOw0KPiA+ICsgICAgICAgICAgICAg cmV0dXJuIC1FSU5WQUw7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAvKiBSZWdpc3Rl ciBpbnRlcnJ1cHQgaGFuZGxlciAqLw0KPiA+ICsgICAgIGlycSA9IGlycV9vZl9wYXJzZV9hbmRf bWFwKG5vZGUsIDApOw0KPiA+ICsgICAgIHJldCA9IGRldm1fcmVxdWVzdF9pcnEoY29yZS0+ZGV2 LCBpcnEsIHhjc2kycnhzc19pcnFfaGFuZGxlciwNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgIElSUUZfU0hBUkVELCAieGlsaW54LWNzaTJyeHNzIiwgeGNzaTJyeHNzKTsNCj4gPiAr ICAgICBpZiAocmV0KSB7DQo+ID4gKyAgICAgICAgICAgICBkZXZfZXJyKGNvcmUtPmRldiwgIkVy ciA9ICVkIEludGVycnVwdCBoYW5kbGVyIHJlZyBmYWlsZWQhXG4iLA0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICByZXQpOw0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gPiArICAg ICB9DQo+ID4gKw0KPiA+ICsgICAgIHhjc2kycnhzc19sb2dfaXBjb25maWcoeGNzaTJyeHNzKTsN Cj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBp bnQgeGNzaTJyeHNzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ID4gK3sN Cj4gPiArICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldjsNCj4gPiArICAgICBzdHJ1Y3Qg eGNzaTJyeHNzX3N0YXRlICp4Y3NpMnJ4c3M7DQo+ID4gKyAgICAgc3RydWN0IHhjc2kycnhzc19j b3JlICpjb3JlOw0KPiA+ICsgICAgIHN0cnVjdCByZXNvdXJjZSAqcmVzOw0KPiA+ICsgICAgIGlu dCByZXQsIG51bV9jdHJscywgaTsNCj4gPiArDQo+ID4gKyAgICAgeGNzaTJyeHNzID0gZGV2bV9r emFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqeGNzaTJyeHNzKSwgR0ZQX0tFUk5FTCk7DQo+ID4g KyAgICAgaWYgKCF4Y3NpMnJ4c3MpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsN Cj4gPiArDQo+ID4gKyAgICAgY29yZSA9ICZ4Y3NpMnJ4c3MtPmNvcmU7DQo+ID4gKyAgICAgY29y ZS0+ZGV2ID0gJnBkZXYtPmRldjsNCj4gPiArDQo+ID4gKyAgICAgY29yZS0+Y2xrcyA9IGRldm1f a21lbWR1cChjb3JlLT5kZXYsIHhjc2kycnhzc19jbGtzLA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZW9mKHhjc2kycnhzc19jbGtzKSwgR0ZQX0tFUk5FTCk7DQo+ID4g KyAgICAgaWYgKCFjb3JlLT5jbGtzKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07 DQo+ID4gKw0KPiA+ICsgICAgIC8qIFJlc2V0IEdQSU8gKi8NCj4gPiArICAgICBjb3JlLT5yc3Rf Z3BpbyA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKGNvcmUtPmRldiwgInJlc2V0IiwNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9EX09VVF9I SUdIKTsNCj4gPiArICAgICBpZiAoSVNfRVJSKGNvcmUtPnJzdF9ncGlvKSkgew0KPiA+ICsgICAg ICAgICAgICAgaWYgKFBUUl9FUlIoY29yZS0+cnN0X2dwaW8pICE9IC1FUFJPQkVfREVGRVIpDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoY29yZS0+ZGV2LCAiVmlkZW8gUmVzZXQg R1BJTyBub3Qgc2V0dXAgaW4gRFQiKTsNCj4gPiArICAgICAgICAgICAgIHJldHVybiBQVFJfRVJS KGNvcmUtPnJzdF9ncGlvKTsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIG11dGV4X2lu aXQoJnhjc2kycnhzcy0+bG9jayk7DQo+ID4gKw0KPiA+ICsgICAgIHJldCA9IHhjc2kycnhzc19w YXJzZV9vZih4Y3NpMnJ4c3MpOw0KPiA+ICsgICAgIGlmIChyZXQgPCAwKQ0KPiA+ICsgICAgICAg ICAgICAgcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gKyAgICAgcmVzID0gcGxhdGZvcm1fZ2V0X3Jl c291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsNCj4gPiArICAgICBjb3JlLT5pb21lbSA9 IGRldm1faW9yZW1hcF9yZXNvdXJjZShjb3JlLT5kZXYsIHJlcyk7DQo+ID4gKyAgICAgaWYgKElT X0VSUihjb3JlLT5pb21lbSkpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gUFRSX0VSUihjb3Jl LT5pb21lbSk7DQo+ID4gKw0KPiA+ICsgICAgIGNvcmUtPm51bV9jbGtzID0gQVJSQVlfU0laRSh4 Y3NpMnJ4c3NfY2xrcyk7DQo+ID4gKw0KPiA+ICsgICAgIHJldCA9IGNsa19idWxrX2dldChjb3Jl LT5kZXYsIGNvcmUtPm51bV9jbGtzLCBjb3JlLT5jbGtzKTsNCj4gPiArICAgICBpZiAocmV0KQ0K PiA+ICsgICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gKyAgICAgcmV0ID0gY2xr X2J1bGtfcHJlcGFyZV9lbmFibGUoY29yZS0+bnVtX2Nsa3MsIGNvcmUtPmNsa3MpOw0KPiA+ICsg ICAgIGlmIChyZXQpDQo+ID4gKyAgICAgICAgICAgICBnb3RvIGVycl9jbGtfcHV0Ow0KPiA+ICsN Cj4gPiArICAgICBpZiAoeGNzaTJyeHNzLT5jb3JlLnJzdF9ncGlvKSB7DQo+ID4gKyAgICAgICAg ICAgICBncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoeGNzaTJyeHNzLT5jb3JlLnJzdF9ncGlvLCAx KTsNCj4gPiArICAgICAgICAgICAgIC8qIG1pbmltdW0gb2YgNDAgZHBoeV9jbGtfMjAwTSBjeWNs ZXMgKi8NCj4gPiArICAgICAgICAgICAgIHVzbGVlcF9yYW5nZSgxLCAyKTsNCj4gPiArICAgICAg ICAgICAgIGdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcCh4Y3NpMnJ4c3MtPmNvcmUucnN0X2dwaW8s IDApOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgeGNzaTJyeHNzX3Jlc2V0KGNvcmUp Ow0KPiA+ICsNCj4gPiArICAgICBjb3JlLT5ldmVudHMgPSAoc3RydWN0IHhjc2kycnhzc19ldmVu dCAqKSZ4Y3NpMnJ4c3NfZXZlbnRzOw0KPiA+ICsNCj4gPiArICAgICBpZiAoY29yZS0+ZW5fdmN4 KSB7DQo+ID4gKyAgICAgICAgICAgICB1MzIgYWxsb2Nfc2l6ZTsNCj4gPiArDQo+ID4gKyAgICAg ICAgICAgICBhbGxvY19zaXplID0gc2l6ZW9mKHN0cnVjdCB4Y3NpMnJ4c3NfZXZlbnQpICoNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1NJX1ZDWF9OVU1fRVZFTlRTOw0KPiA+ICsg ICAgICAgICAgICAgY29yZS0+dmN4X2V2ZW50cyA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBh bGxvY19zaXplLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBHRlBfS0VSTkVMKTsNCj4gPiArICAgICAgICAgICAgIGlmICghY29yZS0+dmN4X2V2ZW50 cykgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBtdXRleF9kZXN0cm95KCZ4Y3NpMnJ4c3Mt PmxvY2spOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICByZXQgPSAtRU5PTUVNOw0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICBnb3RvIGVycl9jbGtfZGlzYWJsZTsNCj4gPiArICAgICAgICAg ICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgWENTSV9WQ1hf TlVNX0VWRU5UUzsgaSsrKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBjb3JlLT52Y3hfZXZl bnRzW2ldLm1hc2sgPSAxIDw8IGk7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAvKiBJ bml0aWFsaXplIFY0TDIgc3ViZGV2aWNlIGFuZCBtZWRpYSBlbnRpdHkgKi8NCj4gPiArICAgICB4 Y3NpMnJ4c3MtPnBhZHNbWFZJUF9QQURfU0lOS10uZmxhZ3MgPSBNRURJQV9QQURfRkxfU0lOSzsN Cj4gPiArICAgICB4Y3NpMnJ4c3MtPnBhZHNbWFZJUF9QQURfU09VUkNFXS5mbGFncyA9IE1FRElB X1BBRF9GTF9TT1VSQ0U7DQo+ID4gKw0KPiA+ICsgICAgIC8qIEluaXRpYWxpemUgdGhlIGRlZmF1 bHQgZm9ybWF0ICovDQo+ID4gKyAgICAgeGNzaTJyeHNzX3NldF9kZWZhdWx0X2Zvcm1hdCh4Y3Np MnJ4c3MpOw0KPiA+ICsNCj4gPiArICAgICAvKiBJbml0aWFsaXplIFY0TDIgc3ViZGV2aWNlIGFu ZCBtZWRpYSBlbnRpdHkgKi8NCj4gPiArICAgICBzdWJkZXYgPSAmeGNzaTJyeHNzLT5zdWJkZXY7 DQo+ID4gKyAgICAgdjRsMl9zdWJkZXZfaW5pdChzdWJkZXYsICZ4Y3NpMnJ4c3Nfb3BzKTsNCj4g PiArICAgICBzdWJkZXYtPmRldiA9ICZwZGV2LT5kZXY7DQo+ID4gKyAgICAgc3ViZGV2LT5pbnRl cm5hbF9vcHMgPSAmeGNzaTJyeHNzX2ludGVybmFsX29wczsNCj4gPiArICAgICBzdHJsY3B5KHN1 YmRldi0+bmFtZSwgZGV2X25hbWUoJnBkZXYtPmRldiksIHNpemVvZihzdWJkZXYtPm5hbWUpKTsN Cj4gDQo+IFVzZSBzdHJzY3B5Lg0KPiANCg0KTm90ZWQuIEkgd2lsbCB1cGRhdGUgaW4gbmV4dCB2 ZXJpc29uLg0KDQo+ID4gKyAgICAgc3ViZGV2LT5mbGFncyB8PSBWNEwyX1NVQkRFVl9GTF9IQVNf RVZFTlRTIHwNCj4gVjRMMl9TVUJERVZfRkxfSEFTX0RFVk5PREU7DQo+ID4gKyAgICAgc3ViZGV2 LT5lbnRpdHkub3BzID0gJnhjc2kycnhzc19tZWRpYV9vcHM7DQo+ID4gKyAgICAgdjRsMl9zZXRf c3ViZGV2ZGF0YShzdWJkZXYsIHhjc2kycnhzcyk7DQo+ID4gKw0KPiA+ICsgICAgIHJldCA9IG1l ZGlhX2VudGl0eV9wYWRzX2luaXQoJnN1YmRldi0+ZW50aXR5LCBYQ1NJX01FRElBX1BBRFMsDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Y3NpMnJ4c3MtPnBhZHMpOw0K PiA+ICsgICAgIGlmIChyZXQgPCAwKQ0KPiA+ICsgICAgICAgICAgICAgZ290byBlcnJvcjsNCj4g PiArDQo+ID4gKyAgICAgLyoNCj4gPiArICAgICAgKiBJbiBjYXNlIHRoZSBFbmFibGUgQWN0aXZl IExhbmVzIGNvbmZpZyBwYXJhbWV0ZXIgaXMgbm90IHNldCwNCj4gPiArICAgICAgKiBkeW5hbWlj IGxhbmUgcmVjb25maWd1cmF0aW9uIGlzIG5vdCBhbGxvd2VkLg0KPiA+ICsgICAgICAqIFNvIFY0 TDJfQ0lEX1hJTElOWF9NSVBJQ1NJU1NfQUNUX0xBTkVTIGN0cmwgd2lsbCBub3QgYmUgcmVnaXN0 ZXJlZC4NCj4gPiArICAgICAgKiBBY2NvcmRpbmdseSBhbGxvY2F0ZSB0aGUgbnVtYmVyIG9mIGNv bnRyb2xzDQo+ID4gKyAgICAgICovDQo+ID4gKyAgICAgbnVtX2N0cmxzID0gQVJSQVlfU0laRSh4 Y3NpMnJ4c3NfY3RybHMpOw0KPiA+ICsNCj4gPiArICAgICBpZiAoIWNvcmUtPmVuYWJsZV9hY3Rp dmVfbGFuZXMpDQo+ID4gKyAgICAgICAgICAgICBudW1fY3RybHMtLTsNCj4gPiArDQo+ID4gKyAg ICAgdjRsMl9jdHJsX2hhbmRsZXJfaW5pdCgmeGNzaTJyeHNzLT5jdHJsX2hhbmRsZXIsIG51bV9j dHJscyk7DQo+ID4gKyAgICAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoeGNzaTJyeHNzX2N0 cmxzKTsgaSsrKSB7DQo+ID4gKyAgICAgICAgICAgICBzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsOw0K PiA+ICsNCj4gPiArICAgICAgICAgICAgIGlmICh4Y3NpMnJ4c3NfY3RybHNbaV0uaWQgPT0NCj4g PiArICAgICAgICAgICAgICAgICAgICAgVjRMMl9DSURfWElMSU5YX01JUElDU0lTU19BQ1RfTEFO RVMpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb3JlLT5lbmFibGVfYWN0aXZl X2xhbmVzKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRG9uJ3QgcmVn aXN0ZXIgY29udHJvbCAqLw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9k YmcoY29yZS0+ZGV2LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IlNraXAgYWN0aXZlIGxhbmUgY29udHJvbFxuIik7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29udGludWU7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIH0NCj4gPiArICAg ICAgICAgICAgICAgICAgICAgeGNzaTJyeHNzX2N0cmxzW2ldLm1heCA9IGNvcmUtPm1heF9udW1f bGFuZXM7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHhjc2kycnhzc19jdHJsc1tpXS5kZWYg PSBjb3JlLT5tYXhfbnVtX2xhbmVzOw0KPiA+ICsgICAgICAgICAgICAgfQ0KPiA+ICsNCj4gPiAr ICAgICAgICAgICAgIGRldl9kYmcoY29yZS0+ZGV2LCAiJWQgY3RybCA9IDB4JXhcbiIsIGksDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgIHhjc2kycnhzc19jdHJsc1tpXS5pZCk7DQo+ID4gKyAg ICAgICAgICAgICBjdHJsID0gdjRsMl9jdHJsX25ld19jdXN0b20oJnhjc2kycnhzcy0+Y3RybF9o YW5kbGVyLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ4 Y3NpMnJ4c3NfY3RybHNbaV0sIE5VTEwpOw0KPiA+ICsgICAgICAgICAgICAgaWYgKCFjdHJsKSB7 DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoY29yZS0+ZGV2LCAiRmFpbGVkIGZv ciAlcyBjdHJsXG4iLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhjc2kycnhz c19jdHJsc1tpXS5uYW1lKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsN Cj4gPiArICAgICAgICAgICAgIH0NCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIGlmICh4 Y3NpMnJ4c3MtPmN0cmxfaGFuZGxlci5lcnJvcikgew0KPiA+ICsgICAgICAgICAgICAgZGV2X2Vy cihjb3JlLT5kZXYsICJmYWlsZWQgdG8gYWRkIGNvbnRyb2xzXG4iKTsNCj4gPiArICAgICAgICAg ICAgIHJldCA9IHhjc2kycnhzcy0+Y3RybF9oYW5kbGVyLmVycm9yOw0KPiA+ICsgICAgICAgICAg ICAgZ290byBlcnJvcjsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIHN1YmRldi0+Y3Ry bF9oYW5kbGVyID0gJnhjc2kycnhzcy0+Y3RybF9oYW5kbGVyOw0KPiA+ICsgICAgIHJldCA9IHY0 bDJfY3RybF9oYW5kbGVyX3NldHVwKCZ4Y3NpMnJ4c3MtPmN0cmxfaGFuZGxlcik7DQo+ID4gKyAg ICAgaWYgKHJldCA8IDApIHsNCj4gPiArICAgICAgICAgICAgIGRldl9lcnIoY29yZS0+ZGV2LCAi ZmFpbGVkIHRvIHNldCBjb250cm9sc1xuIik7DQo+ID4gKyAgICAgICAgICAgICBnb3RvIGVycm9y Ow0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgcGxhdGZvcm1fc2V0X2RydmRhdGEocGRl diwgeGNzaTJyeHNzKTsNCj4gPiArDQo+ID4gKyAgICAgcmV0ID0gdjRsMl9hc3luY19yZWdpc3Rl cl9zdWJkZXYoc3ViZGV2KTsNCj4gPiArICAgICBpZiAocmV0IDwgMCkgew0KPiA+ICsgICAgICAg ICAgICAgZGV2X2Vycihjb3JlLT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgc3ViZGV2XG4iKTsN Cj4gPiArICAgICAgICAgICAgIGdvdG8gZXJyb3I7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiAr ICAgICBkZXZfaW5mbyhjb3JlLT5kZXYsICJYaWxpbnggQ1NJMiBSeCBTdWJzeXN0ZW0gZGV2aWNl IGZvdW5kIVxuIik7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiAwOw0KPiA+ICtlcnJvcjoNCj4g PiArICAgICB2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKCZ4Y3NpMnJ4c3MtPmN0cmxfaGFuZGxlcik7 DQo+ID4gKyAgICAgbWVkaWFfZW50aXR5X2NsZWFudXAoJnN1YmRldi0+ZW50aXR5KTsNCj4gPiAr ICAgICBtdXRleF9kZXN0cm95KCZ4Y3NpMnJ4c3MtPmxvY2spOw0KPiA+ICtlcnJfY2xrX2Rpc2Fi bGU6DQo+ID4gKyAgICAgY2xrX2J1bGtfZGlzYWJsZV91bnByZXBhcmUoY29yZS0+bnVtX2Nsa3Ms IGNvcmUtPmNsa3MpOw0KPiA+ICtlcnJfY2xrX3B1dDoNCj4gPiArICAgICBjbGtfYnVsa19wdXQo Y29yZS0+bnVtX2Nsa3MsIGNvcmUtPmNsa3MpOw0KPiA+ICsgICAgIHJldHVybiByZXQ7DQo+ID4g K30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgeGNzaTJyeHNzX3JlbW92ZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHhjc2kycnhzc19zdGF0 ZSAqeGNzaTJyeHNzID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7DQo+ID4gKyAgICAgc3Ry dWN0IHhjc2kycnhzc19jb3JlICpjb3JlID0gJnhjc2kycnhzcy0+Y29yZTsNCj4gPiArICAgICBz dHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldiA9ICZ4Y3NpMnJ4c3MtPnN1YmRldjsNCj4gPiArDQo+ ID4gKyAgICAgdjRsMl9hc3luY191bnJlZ2lzdGVyX3N1YmRldihzdWJkZXYpOw0KPiA+ICsgICAg IHY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoJnhjc2kycnhzcy0+Y3RybF9oYW5kbGVyKTsNCj4gPiAr ICAgICBtZWRpYV9lbnRpdHlfY2xlYW51cCgmc3ViZGV2LT5lbnRpdHkpOw0KPiA+ICsgICAgIG11 dGV4X2Rlc3Ryb3koJnhjc2kycnhzcy0+bG9jayk7DQo+ID4gKyAgICAgY2xrX2J1bGtfZGlzYWJs ZV91bnByZXBhcmUoY29yZS0+bnVtX2Nsa3MsIGNvcmUtPmNsa3MpOw0KPiA+ICsgICAgIGNsa19i dWxrX3B1dChjb3JlLT5udW1fY2xrcywgY29yZS0+Y2xrcyk7DQo+ID4gKw0KPiA+ICsgICAgIHJl dHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2Rldmlj ZV9pZCB4Y3NpMnJ4c3Nfb2ZfaWRfdGFibGVbXSA9IHsNCj4gPiArICAgICB7IC5jb21wYXRpYmxl ID0gInhsbngsbWlwaS1jc2kyLXJ4LXN1YnN5c3RlbS00LjAiLH0sDQo+ID4gKyAgICAgeyB9DQo+ ID4gK307DQo+ID4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHhjc2kycnhzc19vZl9pZF90YWJs ZSk7DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB4Y3NpMnJ4c3Nf ZHJpdmVyID0gew0KPiA+ICsgICAgIC5kcml2ZXIgPSB7DQo+ID4gKyAgICAgICAgICAgICAubmFt ZSAgICAgICAgICAgPSAieGlsaW54LWNzaTJyeHNzIiwNCj4gPiArICAgICAgICAgICAgIC5vZl9t YXRjaF90YWJsZSA9IHhjc2kycnhzc19vZl9pZF90YWJsZSwNCj4gPiArICAgICB9LA0KPiA+ICsg ICAgIC5wcm9iZSAgICAgICAgICAgICAgICAgID0geGNzaTJyeHNzX3Byb2JlLA0KPiA+ICsgICAg IC5yZW1vdmUgICAgICAgICAgICAgICAgID0geGNzaTJyeHNzX3JlbW92ZSwNCj4gPiArfTsNCj4g PiArDQo+ID4gK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoeGNzaTJyeHNzX2RyaXZlcik7DQo+ID4g Kw0KPiA+ICtNT0RVTEVfQVVUSE9SKCJWaXNoYWwgU2FnYXIgPHZzYWdhckB4aWxpbnguY29tPiIp Ow0KPiA+ICtNT0RVTEVfREVTQ1JJUFRJT04oIlhpbGlueCBNSVBJIENTSTIgUnggU3Vic3lzdGVt IERyaXZlciIpOw0KPiA+ICtNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7DQo+ID4gZGlmZiAtLWdp dCBhL2luY2x1ZGUvdWFwaS9saW51eC94aWxpbngtdjRsMi1jb250cm9scy5oDQo+IGIvaW5jbHVk ZS91YXBpL2xpbnV4L3hpbGlueC12NGwyLWNvbnRyb2xzLmgNCj4gPiBpbmRleCBiNjQ0MWZlLi5m MDIzNjIzIDEwMDY0NA0KPiA+IC0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC94aWxpbngtdjRsMi1j b250cm9scy5oDQo+ID4gKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3hpbGlueC12NGwyLWNvbnRy b2xzLmgNCj4gPiBAQCAtNzEsNCArNzEsMTYgQEANCj4gPiAgLyogTm9pc2UgbGV2ZWwgKi8NCj4g PiAgI2RlZmluZSBWNEwyX0NJRF9YSUxJTlhfVFBHX05PSVNFX0dBSU4gICAgICAgICAgICAgICAo VjRMMl9DSURfWElMSU5YX1RQRw0KPiArIDE3KQ0KPiA+DQo+ID4gKy8qDQo+ID4gKyAqIFhpbGlu eCBNSVBJIENTSTIgUnggU3Vic3lzdGVtDQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArLyogQmFzZSBJ RCAqLw0KPiA+ICsjZGVmaW5lIFY0TDJfQ0lEX1hJTElOWF9NSVBJQ1NJU1MgICAgICAgICAgICAo VjRMMl9DSURfVVNFUl9CQVNFICsgMHhjMDgwKQ0KPiANCj4gRm9yIHByaXZhdGUgY29udHJvbHMg eW91IG5lZWQgdG8gcmVzZXJ2ZSBhIHJhbmdlIGluIGluY2x1ZGUvdWFwaS9saW51eC92NGwyLQ0K PiBjb250cm9scy5oLg0KPiBTZWUgZS5nLiBWNEwyX0NJRF9VU0VSX0lNWF9CQVNFLg0KPiANCg0K SSBoYWQgZm9sbG93ZWQgaG93IHRoaXMgd2FzIGRvbmUgZm9yIFY0TDJfQ0lEX1hJTElOWF9UUEcu DQpJIHdpbGwgY2hhbmdlIGl0IGluIG5leHQgdmVyc2lvbi4NCg0KPiA+ICsNCj4gPiArLyogQWN0 aXZlIExhbmVzICovDQo+ID4gKyNkZWZpbmUgVjRMMl9DSURfWElMSU5YX01JUElDU0lTU19BQ1Rf TEFORVMNCj4gKFY0TDJfQ0lEX1hJTElOWF9NSVBJQ1NJU1MgKyAxKQ0KPiA+ICsvKiBSZXNldCBh bGwgZXZlbnQgY291bnRlcnMgKi8NCj4gPiArI2RlZmluZSBWNEwyX0NJRF9YSUxJTlhfTUlQSUNT SVNTX1JFU0VUX0NPVU5URVJTDQo+IChWNEwyX0NJRF9YSUxJTlhfTUlQSUNTSVNTICsgMikNCj4g DQo+IFBsZWFzZSBpbXByb3ZlIGEgYml0IG9uIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSBjb250 cm9scy4gV2hhdCBhcmUgdGhleQ0KPiB1c2VkIGZvciwgd2hlbiBjYW4geW91IHVzZSB0aGVtPyBJ LmUuIEkgc3VzcGVjdCBjaGFuZ2luZyBhY3RpdmUgbGFuZXMgd2hpbGUNCj4gc3RyZWFtaW5nIGlz IHByb2JhYmx5IGEgYmFkIGlkZWEgKGFuZCBkbyB5b3UgY2hlY2sgZm9yIHRoYXQ/KS4NCj4gDQo+ IFRoaXMgaXMgdGhlIG9ubHkgZG9jdW1lbnRhdGlvbiB0aGVyZSB3aWxsIGJlIGZvciB0aGVzZSBj b250cm9scywgc28ga2VlcA0KPiBpbiBtaW5kIHRoZSBwb29yIGVuZC11c2VyIHdobyBoYXMgdG8g dW5kZXJzdGFuZCBob3cgdG8gdXNlIHRoZW0uDQo+IA0KDQpJIHdpbGwgYWRkIG1vcmUgZG9jdW1l bnRhdGlvbiBhYm91dCB0aGVzZSBjb250cm9scy4NCg0KPiA+ICsNCj4gPiAgI2VuZGlmIC8qIF9f VUFQSV9YSUxJTlhfVjRMMl9DT05UUk9MU19IX18gKi8NCj4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVk ZS91YXBpL2xpbnV4L3hpbGlueC12NGwyLWV2ZW50cy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3hp bGlueC0NCj4gdjRsMi1ldmVudHMuaA0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5k ZXggMDAwMDAwMC4uMmFhMzU3Yw0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9pbmNsdWRl L3VhcGkvbGludXgveGlsaW54LXY0bDItZXZlbnRzLmgNCj4gPiBAQCAtMCwwICsxLDIxIEBADQo+ ID4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovDQo+ID4gKy8qDQo+ID4g KyAqIFhpbGlueCBWNEwyIEV2ZW50cw0KPiA+ICsgKg0KPiA+ICsgKiBDb3B5cmlnaHQgKEMpIDIw MTkgWGlsaW54LCBJbmMuDQo+ID4gKyAqDQo+ID4gKyAqIENvbnRhY3RzOiBWaXNoYWwgU2FnYXIg PHZpc2hhbC5zYWdhckB4aWxpbnguY29tPg0KPiA+ICsgKg0KPiA+ICsgKi8NCj4gPiArDQo+ID4g KyNpZm5kZWYgX19VQVBJX1hJTElOWF9WNEwyX0VWRU5UU19IX18NCj4gPiArI2RlZmluZSBfX1VB UElfWElMSU5YX1Y0TDJfRVZFTlRTX0hfXw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPGxpbnV4L3Zp ZGVvZGV2Mi5oPg0KPiA+ICsNCj4gPiArLyogWGlsaW54IENTSTIgUmVjZWl2ZXIgZXZlbnRzICov DQo+ID4gKyNkZWZpbmUgVjRMMl9FVkVOVF9YTE5YQ1NJUlhfQ0xBU1MgICAoVjRMMl9FVkVOVF9Q UklWQVRFX1NUQVJUIHwNCj4gMHgxMDApDQo+IA0KPiBVZ2x5IHByZWZpeC4gVjRMMl9FVkVOVF9Y SUxJTlhfQ1NJUlhfQ0xBU1MgbG9va3MgbXVjaCBiZXR0ZXIuDQo+IA0KDQpPayBJIHdpbGwgdXBk YXRlIHRoZSBuYW1lIHRvIHVzZSBWNEwyX0VWRU5UX1hJTElOWF9DU0lSWF9DTEFTUy4NCg0KPiBB bHNvIHVzZSAweDIwMCBpbnN0ZWFkIG9mIDB4MTAwLiAweDEwMCBpcyBhbHJlYWR5IGluIHVzZSBi eSBvbWFwMy4NCj4gDQoNCk5vdGVkLg0KDQo+ID4gKy8qIFN0cmVhbSBMaW5lIEJ1ZmZlciBmdWxs ICovDQo+ID4gKyNkZWZpbmUgVjRMMl9FVkVOVF9YTE5YQ1NJUlhfU0xCRiAgICAoVjRMMl9FVkVO VF9YTE5YQ1NJUlhfQ0xBU1MgfA0KPiAweDEpDQo+IA0KPiBUaGlzIG5lZWRzIHRvIGJlIGRvY3Vt ZW50ZWQgYSBsb3QgYmV0dGVyOiB3aGF0IGRvZXMgdGhlIGV2ZW50IG1lYW4/IHdoYXQNCj4gc2hv dWxkIHVzZXJzcGFjZSBkbyBpZiB0aGlzIGV2ZW50IGFycml2ZXM/DQo+IA0KDQpOb3RlZC4gSSB3 aWxsIGRvY3VtZW50IHRoaXMgYmV0dGVyIGluIG5leHQgdmVyc2lvbi4NCg0KPiA+ICsNCj4gPiAr I2VuZGlmIC8qIF9fVUFQSV9YSUxJTlhfVjRMMl9FVkVOVFNfSF9fICovDQo+ID4NCj4gDQo+IEkg d291bGQgcHJvYmFibHkgYWxzbyBjb21iaW5lIHRoZXNlIHR3byBwdWJsaWMgaGVhZGVycyBpbnRv IG9uZToNCj4gDQo+IGluY2x1ZGUvdWFwaS9saW51eC94aWxpbngtY3NpMnJ4c3MuaA0KPiANCj4g SXQncyBvdmVya2lsbCBJTUhPIHRvIGhhdmUgdHdvIGhlYWRlcnMgZm9yIHRoaXMuDQo+IA0KDQpP ayBJIHdpbGwgY29uc29saWRhdGUgaXQgaW50byBhIHNpbmdsZSB4aWxpbngtY3NpMnJ4c3MuaCBo ZWFkZXIgZmlsZS4NCg0KPiBSZWdhcmRzLA0KPiANCj4gICAgICAgICBIYW5zDQoNClJlZ2FyZHMN ClZpc2hhbCBTYWdhcg0K