Received: by 10.223.176.46 with SMTP id f43csp2848314wra; Mon, 22 Jan 2018 04:31:24 -0800 (PST) X-Google-Smtp-Source: AH8x225vFcXqcBxeO3QcaqaflbLJhRGXIZrw7uRHnGejrDHrZPtgUZzRmVryEfYBpQX6cHEW3GcT X-Received: by 10.99.124.24 with SMTP id x24mr7100162pgc.351.1516624284678; Mon, 22 Jan 2018 04:31:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1516624284; cv=none; d=google.com; s=arc-20160816; b=xaJpEocOYhMepWmHJ4dtu6AyLb5eAriwtcNVFq2eIOe8Y+IBZen9uoNmvPMQ8+sMql kbAj29aGv4MweJFaDa4s4upn8JYMrdUXGqONuuFKu16Jh1kl8ZMxHFuqKe66sPucearB Iq57YWFV6mRDcYCtTjOItmjJDugTqUyPFUAp0TUzyaBeM3+Oi9lMJvsWmPtRsIbN8dU3 dqCt4TOZsnTGaQZCriX2aKdMaWKydXufkHWQfD6kktPqDoh4tVcNpCFiVVbjJ05sPLmX 5nhmpp0gjCnB/T+hr0Qre3yf7l64vz1tQ88kthj6sb+cVFsPYNzYP8aToFz6LT301Ctm OO8w== 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 :spamdiagnosticmetadata:spamdiagnosticoutput:content-language :accept-language:in-reply-to:references:message-id:date:thread-index :thread-topic:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=WQx+Ov2ETOyzXtrvajI99439DCC9Lyz+LW6aJ70k7Us=; b=ah0tZ9vry1mbB4GDLy03diKxgOS8LEqm9Sz5mpjTYUN0J7NDbyGkNf/AfHfgMoZkvM 2vy83gCmmFyIBRrqktxqzK1RaNOo72WVBxXQmDlWnK6+1gH28F/1JwiiEa3MWEerM0FW 3RqICwiiGcDHDAGkvILCftADJ3/HcOT2Bc9TvH8EzNlxNGDAbORs3Dp5atipblGQoz9Q Yi3lguPxVjo7sqHctSOGJGWaJnVFJtt7gR/6sUHVjARHI23+jxQ3HubG8hfhywsWjrQE OAQv6Hb/Kn0hsWD9wH4YJDRPD0ySSyevDCoWvfE5ck94gJnTYnsoVCTNNZsT+foUuc2d RHLg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@xilinx.onmicrosoft.com header.s=selector1-xilinx-com header.b=JCDWUq01; 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 p7si124874pfk.8.2018.01.22.04.31.10; Mon, 22 Jan 2018 04:31:24 -0800 (PST) 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-com header.b=JCDWUq01; 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 S1751108AbeAVMaE (ORCPT + 99 others); Mon, 22 Jan 2018 07:30:04 -0500 Received: from mail-sn1nam01on0063.outbound.protection.outlook.com ([104.47.32.63]:59676 "EHLO NAM01-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750955AbeAVMaC (ORCPT ); Mon, 22 Jan 2018 07:30:02 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xilinx.onmicrosoft.com; s=selector1-xilinx-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=WQx+Ov2ETOyzXtrvajI99439DCC9Lyz+LW6aJ70k7Us=; b=JCDWUq01/WAxfCL23ff2LmiSLj1CgxOtO2r2dGovAjdBjm5P3Ufn/t5SR9Wjh4eS/6SSr+utHghvXAqAWnPJb7Qh7vggkC0ttKuuA6W0aQzpmTc7FD4n4b++NLamZ6IcO1aDTmveIsTMHGRTr1Ynv2fJYYIezAq6vR2yxzeJA6k= Received: from BY2PR02MB1411.namprd02.prod.outlook.com (10.162.80.151) by BY2PR02MB363.namprd02.prod.outlook.com (10.141.140.148) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.428.17; Mon, 22 Jan 2018 12:29:52 +0000 Received: from BY2PR02MB1411.namprd02.prod.outlook.com ([10.162.80.151]) by BY2PR02MB1411.namprd02.prod.outlook.com ([10.162.80.151]) with mapi id 15.20.0407.015; Mon, 22 Jan 2018 12:29:52 +0000 From: Naga Sureshkumar Relli To: Miquel RAYNAL CC: "boris.brezillon@free-electrons.com" , "richard@nod.at" , "computersforpeace@gmail.com" , "marek.vasut@gmail.com" , "cyrille.pitchen@wedev4u.fr" , "nagasuresh12@gmail.com" , "linux-kernel@vger.kernel.org" , "linux-mtd@lists.infradead.org" , Punnaiah Choudary Kalluri , Michal Simek , "dwmw2@infradead.org" Subject: RE: [PATCH v9 2/2] mtd: nand: Add support for Arasan NAND Flash Controller Thread-Topic: [PATCH v9 2/2] mtd: nand: Add support for Arasan NAND Flash Controller Thread-Index: AQHTdOHge6dpp5QUXE6udcjXFuiieKNZUp0AgCGUZYA= Date: Mon, 22 Jan 2018 12:29:51 +0000 Message-ID: References: <20171214134445.4985-1-nagasure@xilinx.com> <20171214134445.4985-3-nagasure@xilinx.com> <20171228215528.3ce15bd5@xps13> In-Reply-To: <20171228215528.3ce15bd5@xps13> 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=nagasure@xilinx.com; x-originating-ip: [182.72.145.30] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;BY2PR02MB363;7:6ylslv4drppyB7e+hbpPJbUF85st2/2iW1e3CIMzsUYjbtvMzWwStTXRSIlNT1kanQWmeJokRoptpnzywpqTgRhlaCeK31z04VAQEJgFC911iDjlwAlzT0cydl14l5tvmVH7Bp5pd6wZqlw+5Ec4TbesTkvzjyb1nR+ayEXQDOLbbULJKcxklJuFqLGUGYckIeHid15wnUv0K02Vc2NQD/OpK/MkSEJnwExniN/8BH/KIZcWor2+bOI8mCUCYZ64 x-ms-exchange-antispam-srfa-diagnostics: SSOS;SSOR; x-ms-office365-filtering-correlation-id: e07f9d31-3264-4e95-8c29-08d56193d601 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(7020095)(4652020)(5600026)(4604075)(3008032)(48565401081)(2017052603307)(7153060)(7193020);SRVR:BY2PR02MB363; x-ms-traffictypediagnostic: BY2PR02MB363: x-ld-processed: 657af505-d5df-48d0-8300-c31994686c5c,ExtAddr x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(9452136761055)(85827821059158)(258649278758335)(192813158149592)(58145275503218)(211171220733660); x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(6040501)(2401047)(8121501046)(5005006)(93006095)(93001095)(10201501046)(3002001)(3231023)(2400081)(944501161)(6055026)(6041288)(20161123562045)(20161123564045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(6072148)(201708071742011);SRVR:BY2PR02MB363;BCL:0;PCL:0;RULEID:(100000803101)(100110400095);SRVR:BY2PR02MB363; x-forefront-prvs: 0560A2214D x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(396003)(376002)(346002)(39860400002)(39380400002)(366004)(189003)(199004)(13464003)(52014003)(229853002)(6436002)(54906003)(2950100002)(6916009)(99286004)(5660300001)(55016002)(53936002)(106356001)(53946003)(16200700003)(5890100001)(6306002)(9686003)(97736004)(316002)(3660700001)(2900100001)(6246003)(33656002)(81166006)(81156014)(3280700002)(7696005)(478600001)(966005)(8676002)(86362001)(575784001)(7416002)(7736002)(14454004)(25786009)(76176011)(53546011)(105586002)(59450400001)(6506007)(305945005)(4326008)(102836004)(2906002)(53386004)(77096007)(8936002)(74316002)(68736007)(66066001)(6116002)(3846002)(26005)(39060400002)(559001)(579004)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:BY2PR02MB363;H:BY2PR02MB1411.namprd02.prod.outlook.com;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; received-spf: None (protection.outlook.com: xilinx.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: DMrXlqPYwHPwl8z5ITKZz7sifzrKtS3J0tn/rGzOi+QNP62WZWqwrG84kCZSYa3uGjnnp4D34Dkq9y6RF10hBA== spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM 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: e07f9d31-3264-4e95-8c29-08d56193d601 X-MS-Exchange-CrossTenant-originalarrivaltime: 22 Jan 2018 12:29:51.8805 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR02MB363 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgTWlxdWVsLA0KDQpUaGFua3MgZm9yIHJldmlld2luZyB0aGlzIHBhdGNoIHNlcmllcy4NCg0K PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBNaXF1ZWwgUkFZTkFMIFttYWls dG86bWlxdWVsLnJheW5hbEBmcmVlLWVsZWN0cm9ucy5jb21dDQo+IFNlbnQ6IEZyaWRheSwgRGVj ZW1iZXIgMjksIDIwMTcgMjoyNSBBTQ0KPiBUbzogTmFnYSBTdXJlc2hrdW1hciBSZWxsaSA8bmFn YXN1cmVAeGlsaW54LmNvbT4NCj4gQ2M6IGJvcmlzLmJyZXppbGxvbkBmcmVlLWVsZWN0cm9ucy5j b207IHJpY2hhcmRAbm9kLmF0Ow0KPiBjb21wdXRlcnNmb3JwZWFjZUBnbWFpbC5jb207IG1hcmVr LnZhc3V0QGdtYWlsLmNvbTsNCj4gY3lyaWxsZS5waXRjaGVuQHdlZGV2NHUuZnI7IE5hZ2EgU3Vy ZXNoa3VtYXIgUmVsbGkgPG5hZ2FzdXJlQHhpbGlueC5jb20+Ow0KPiBuYWdhc3VyZXNoMTJAZ21h aWwuY29tOyBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnOyBsaW51eC0NCj4gbXRkQGxpc3Rz LmluZnJhZGVhZC5vcmc7IFB1bm5haWFoIENob3VkYXJ5IEthbGx1cmkgPHB1bm5haWFAeGlsaW54 LmNvbT47DQo+IE1pY2hhbCBTaW1layA8bWljaGFsc0B4aWxpbnguY29tPjsgZHdtdzJAaW5mcmFk ZWFkLm9yZw0KPiBTdWJqZWN0OiBSZTogW1BBVENIIHY5IDIvMl0gbXRkOiBuYW5kOiBBZGQgc3Vw cG9ydCBmb3IgQXJhc2FuIE5BTkQgRmxhc2gNCj4gQ29udHJvbGxlcg0KPiANCj4gSGVsbG8sDQo+ IA0KPiBUaGFua3MgZm9yIGNvbnRyaWJ1dGluZyB0aGlzIGRyaXZlci4NCj4gDQo+IEFzIHlvdSBt YXkga25vdywgdGhlIE5BTkQgZnJhbWV3b3JrIGlzIGN1cnJlbnRseSBtb3ZpbmcgdG8gYW4gaW50 ZXJmYWNlDQo+IGNhbGxlZCAtPmV4ZWNfb3AoKS4gUGxlYXNlIGxvb2sgYXQgdGhlIGwyLW10ZCAt b3IgbGludXgtbmV4dC0gdHJlZSB0byBzZWUgd2hhdCB0aGlzDQo+IGlzIChkcml2ZXJzL210ZC9u YW5kL25hbmRfYmFzZS5jIGlzIHF1aXRlIHdlbGwgZG9jdW1lbnRlZCBhYm91dCB0aGlzDQo+IGlu dGVyZmFjZSkuDQo+IA0KPiBOZXcgZHJpdmVycyBzaG91bGQgZHJvcCB0aGVpciAtPmNtZGZ1bmMo KSAvIC0+Y21kX2N0cmwoKSAvDQo+IC0+cmVhZC93cml0ZV9ieXRlL3dvcmQvYnVmKCkgaW1wbGVt ZW50YXRpb25zIGFuZCBpbnN0ZWFkIHN3aXRjaCB0bw0KPiAtPmV4ZWNfb3AoKS4gSSBrbm93IHRo aXMgaXMgYSBzaWduaWZpY2FudCBhbW91bnQgb2Ygd29yayBidXQgZG8gbm90DQo+IGhlc2l0YXRl IHRvIGFzayBpZiB5b3UgbmVlZCBzb21lIGhlbHAuDQoNCk9rIEkgd2lsbCB1cGRhdGUgdGhlIGRy aXZlciBhcyBwZXIgbmV3IGV4ZWNfb3AoKSB1cGRhdGUuDQpMZXQgbWUgZ28gdGhyb3VnaCB0aGlz IGludGVyZmFjZS4NCj4gDQo+IFlvdSBtYXkgdGFrZSB0aGUgTWFydmVsbCBOQU5EIGNvbnRyb2xs ZXIgZHJpdmVyIGFzIGV4YW1wbGUgb2YgaG93IHRvDQo+IGltcGxlbWVudCBpdCAocmV3b3JrIGFs c28gY3VycmVudGx5IHVuZGVyIHJldmlldyk6DQo+IGh0dHBzOi8vd3d3LnNwaW5pY3MubmV0L2xp c3RzL2FybS1rZXJuZWwvbXNnNjI0MjQ2Lmh0bWwNCk9rLCBJIHdpbGwgdGFrZSBhIGxvb2sgaW50 byB0aGF0IGRyaXZlci4NCg0KPiANCj4gT3RoZXJ3aXNlIHRoZXJlIGFyZSBzb21lIGNvbW1lbnRz IGJlbG93LiBJIGFtIHJlYWxseSBub3QgYSBOQU5EIGdvZCwgc28NCj4gZG9uJ3QgdGFrZSB0aGVt IGFzIHB1cmUgdHJ1dGggOikNClRoYW5rcyBmb3IgcmV2aWV3aW5nIHRoaXMgZHJpdmVyLiANCj4g DQo+IFRoYW5rIHlvdSwNCj4gTWlxdcOobA0KPiANCj4gT24gVGh1LCAxNCBEZWMgMjAxNyAxOTox NDo0NSArMDUzMA0KPiBOYWdhIFN1cmVzaGt1bWFyIFJlbGxpIDxuYWdhLnN1cmVzaGt1bWFyLnJl bGxpQHhpbGlueC5jb20+IHdyb3RlOg0KPiANCj4gPiBBZGRlZCB0aGUgYmFzaWMgZHJpdmVyIGZv ciBBcmFzYW4gTkFORCBGbGFzaCBDb250cm9sbGVyIHVzZWQgaW4gWnlucQ0KPiA+IFVsdHJhU2Nh bGUrIE1QU29DLiBJdCBzdXBwb3J0cyBvbmx5IEh3IEVDQyBhbmQgdXB0byAyNGJpdCBjb3JyZWN0 aW9uLg0KPiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogTmFnYSBTdXJlc2hrdW1hciBSZWxsaSA8bmFn YXN1cmVAeGlsaW54LmNvbT4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBQdW5uYWlhaCBDaG91ZGFyeSBL YWxsdXJpIDxwdW5uYWlhQHhpbGlueC5jb20+DQo+ID4gLS0tDQo+ID4gQ2hhbmdlcyBpbiB2OToN Cj4gPiAgLSBBZGRlZCB0aGUgU1BEWCB0YWdzDQo+ID4gQ2hhbmdlcyBpbiB2ODoNCj4gPiAgLSBJ bXBsZW1lbnRlZCBzZXR1cF9kYXRhX2ludGVyZmFjZSBob29rDQo+ID4gIC0gZml4ZWQgY2hlY2tw YXRjaCAtLXN0cmljdCB3YXJuaW5ncw0KPiA+ICAtIEFkZGVkIGFuZmNfY29uZmlnX2VjYyBpbiBy ZWFkX3BhZ2VfaHdlY2MNCj4gPiAgLSBGaXhlZCByZXR1cm5pbmcgc3RhdHVzIHZhbHVlIGJ5IHJl YWRpbmcgZmxhc2ggc3RhdHVzIGluIHJlYWRfYnl0ZSgpDQo+ID4gICAgaW5zdGVhZCBvZiByZWFk aW5nIHByZXZpb3VzIHZhbHVlLg0KPiA+IENoYW5nZXMgaW4gdjc6DQo+ID4gLSBJbXBsZW1lbnRl ZCBNYXJlayBzdWdnZXN0aW9ucyBhbmQgY29tbWVudHMNCj4gPiAtIENvcnJlY3RlZCB0aGUgYWNy b255bXMgdGhvc2Ugc2hvdWxkIGJlIGluIGNhcHMNCj4gPiAtIE1vZGlmaWVkIGtjb25maWcvTWFr ZSBmaWxlIHRvIGtlZXAgYXJhc2FuIGVudHJ5IGluIHNvcnRlZCBvcmRlcg0KPiA+IC0gQWRkZWQg aXNfdm1sbG9jX2FkZHIgY2hlY2sNCj4gPiAtIFVzZWQgaW9yZWFkL3dyaXRlMzJfcmVwIHZhcmlh bnRzIHRvIGF2b2lkIGNvbXBpbGF0aW9uIGVycm9yIGZvcg0KPiA+IGludGVsIHBsYXRmb3Jtcw0K PiA+IC0gc2VwYXJhdGVkIFBJTyBhbmQgRE1BIG1vZGUgcmVhZC93cml0ZSBmdW5jdGlvbnMNCj4g PiAtIE1pbm9yIGNsZWFudXANCj4gPiBDaG5hZ2VzIGluIHY2Og0KPiA+IC0gQWRkcmVzc2VkIG1v c3Qgb2YgdGhlIEJyaWFuIGFuZCBCb3JpcyBjb21tZW50cw0KPiA+IC0gU2VwYXJhdGVkIHRoZSBu YW5kY2hpcCBmcm9tIHRoZSBuYW5kIGNvbnRyb2xsZXINCj4gPiAtIFJlbW92ZWQgdGhlIGVjYyBs b29rdXAgdGFibGUgZnJvbSBkcml2ZXINCj4gPiAtIE5vdyB1c2UgZnJhbWV3b3JrIG5hbmQgd2Fp dGZ1bmN0aW9uIGFuZCByZWFkb29iDQo+ID4gLSBGaXhlZCB0aGUgY29tcGlsZXIgd2FybmluZw0K PiA+IC0gQWRhcHRlZCB0aGUgbmV3IGZyYW1lb3dyayBjaGFuZ2VzIHJlbGF0ZWQgdG8gZWNjIGFu ZCBvb2JsYXlvdXQNCj4gPiAtIERpc2FibGVkIHRoZSBjbG9ja3MgYWZ0ZXIgdGhlIG5hbmRfcmVl bGFzZQ0KPiA+IC0gTm93IHVzaW5nIG9ubHkgb25lIGNvbXBsZXRpb24gb2JqZWN0DQo+ID4gLSBC b3JpcyBzdWdnZXNzaW9ucyBsaWtlIGFkYXB0aW5nIGNtZF9jdHJsIGFuZCByZXdvcmsgb24gcmVh ZC93cml0ZQ0KPiA+IGJ5dGUgYXJlIG5vdCBpbXBsZW1lbnRlZCBhbmQgaSB3aWxsIHBhdGNoIHRo ZW0gbGF0ZXINCj4gPiAtIEFsc28gY2hlY2tfZXJhc2VkX2VjY19jaHVuayBmb3IgZXJhc2UgYW5k IGNoZWNrIGZvciBpc192bWFsbG9jX2FkZHINCj4gPiB3aWxsIGltcGxlbWVudCBsYXRlciBvbmNl IHRoZSBiYXNpYyBkcml2ZXIgaXMgbWFpbmxpbmVkLg0KPiA+IENoYW5nZXMgaW4gdjU6DQo+ID4g LSBSZW5hbWVkIHRoZSBkcml2ZXIgZmlsZWkgYXMgYXJhc2FuX25hbmQuYw0KPiA+IC0gRml4ZWQg YWxsIGNvbW1lbnRzIHJlbGFxdGVkIGNvZGluZyBzdHlsZQ0KPiA+IC0gRml4ZWQgY29tbWVudHMg cmVsYXRlZCB0byBwcm9wYWdhdGluZyB0aGUgZXJyb3JzDQo+ID4gLSBNb2RpZmllZCB0aGUgYW5m Y193cml0ZV9wYWdlX2h3ZWNjIGFzIHBlciB0aGUgd3JpdGVfcGFnZQ0KPiA+ICAgcHJvdG90eXBl DQo+ID4gQ2hhbmdlcyBpbiB2NDoNCj4gPiAtIEFkZGVkIHN1cHBvcnQgZm9yIG9uZmkgdGltaW5n IG1vZGUgY29uZmlndXJhdGlvbg0KPiA+IC0gQWRkZWQgY2xvY2sgc3VwcHBwb3J0DQo+ID4gLSBB ZGRlZCBzdXBwb3J0IGZvciBtdWx0aXBsZSBjaGlwc2VsZWN0cyBDaGFuZ2VzIGluIHYzOg0KPiA+ IC0gUmVtb3ZlZCB1bnVzZWQgdmFyaWFibGVzDQo+ID4gLSBBdm9pZGVkIGJ1c3kgbG9vcCBhbmQg dXNlZCBqaWZpZXMgYmFzZWQgaW1wbGVtZW50YXRpb24NCj4gPiAtIEZpeGVkIGNvbXBpbGVyIHdh cm5pbmdzICJyaWdodCBzaGlmdCBjb3VudCA+PSB3aWR0aCBvZiB0eXBlIg0KPiA+IC0gUmVtb3Zl ZCB1bm5lZWRlZCBjb2RlaSBhbmQgaW1wcm92ZWQgZXJyb3IgcmVwb3J0aW5nDQo+ID4gLSBBZGRl ZCBvbmZpIHZlcnNpb24gY2hlY2sgdG8gZW5zdXJlIHJlYWRpbmcgdGhlIHZhbGlkIGFkZHJlc3Mg Y3ljbGVzDQo+ID4gQ2hhbmdlcyBpbiB2MjoNCj4gPiAtIEFkZGVkIG1pc3Npbmcgb2YuaCB0byBh dm9pZCBrYnVpbGQgc3lzdGVtIHJlcG9ydCBlcnJvDQo+ID4gLS0tDQo+ID4gIGRyaXZlcnMvbXRk L25hbmQvS2NvbmZpZyAgICAgICB8ICAgIDggKw0KPiA+ICBkcml2ZXJzL210ZC9uYW5kL01ha2Vm aWxlICAgICAgfCAgICAxICsNCj4gPiAgZHJpdmVycy9tdGQvbmFuZC9hcmFzYW5fbmFuZC5jIHwg MTAxOA0KPiA+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysgMyBmaWxl cyBjaGFuZ2VkLCAxMDI3DQo+ID4gaW5zZXJ0aW9ucygrKSBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9tdGQvbmFuZC9hcmFzYW5fbmFuZC5jDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9tdGQvbmFuZC9LY29uZmlnIGIvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnIGluZGV4DQo+ID4g M2YyMDM2ZjMxZGE0Li5iZGM5NzUxMGY3NTggMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9tdGQv bmFuZC9LY29uZmlnDQo+ID4gKysrIGIvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnDQo+ID4gQEAg LTQwLDYgKzQwLDE0IEBAIGNvbmZpZyBNVERfU01fQ09NTU9ODQo+ID4gIAl0cmlzdGF0ZQ0KPiA+ ICAJZGVmYXVsdCBuDQo+ID4NCj4gPiArY29uZmlnIE1URF9OQU5EX0FSQVNBTg0KPiA+ICsJdHJp c3RhdGUgIlN1cHBvcnQgZm9yIEFyYXNhbiBOYW5kIEZsYXNoIGNvbnRyb2xsZXIiDQo+ID4gKwlk ZXBlbmRzIG9uIEhBU19JT01FTQ0KPiA+ICsJZGVwZW5kcyBvbiBIQVNfRE1BDQo+ID4gKwloZWxw DQo+ID4gKwkgIEVuYWJsZXMgdGhlIGRyaXZlciBmb3IgdGhlIEFyYXNhbiBOQU5EIEZsYXNoIGNv bnRyb2xsZXIgb24NCj4gPiArCSAgWnlucSBVbHRyYVNjYWxlKyBNUFNvQy4NCj4gPiArDQo+ID4g IGNvbmZpZyBNVERfTkFORF9ERU5BTEkNCj4gPiAgCXRyaXN0YXRlDQo+ID4NCj4gPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9tdGQvbmFuZC9NYWtlZmlsZSBiL2RyaXZlcnMvbXRkL25hbmQvTWFrZWZp bGUNCj4gPiBpbmRleCA2ZTJkYjcwMGQ5MjMuLmI5Njk2NWE5NWRhZiAxMDA2NDQNCj4gPiAtLS0g YS9kcml2ZXJzL210ZC9uYW5kL01ha2VmaWxlDQo+ID4gKysrIGIvZHJpdmVycy9tdGQvbmFuZC9N YWtlZmlsZQ0KPiA+IEBAIC04LDYgKzgsNyBAQCBvYmotJChDT05GSUdfTVREX05BTkRfRUNDKQkJ Kz0NCj4gPiBuYW5kX2VjYy5vIG9iai0kKENPTkZJR19NVERfTkFORF9CQ0gpCQkrPSBuYW5kX2Jj aC5vDQo+ID4gIG9iai0kKENPTkZJR19NVERfU01fQ09NTU9OKSAJCSs9IHNtX2NvbW1vbi5vDQo+ ID4NCj4gPiArb2JqLSQoQ09ORklHX01URF9OQU5EX0FSQVNBTikJCSs9IGFyYXNhbl9uYW5kLm8N Cj4gPiAgb2JqLSQoQ09ORklHX01URF9OQU5EX0NBRkUpCQkrPSBjYWZlX25hbmQubw0KPiA+ICBv YmotJChDT05GSUdfTVREX05BTkRfQU1TX0RFTFRBKQkrPSBhbXMtZGVsdGEubw0KPiA+ICBvYmot JChDT05GSUdfTVREX05BTkRfREVOQUxJKQkJKz0gZGVuYWxpLm8NCj4gPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9tdGQvbmFuZC9hcmFzYW5fbmFuZC5jDQo+ID4gYi9kcml2ZXJzL210ZC9uYW5kL2Fy YXNhbl9uYW5kLmMgbmV3IGZpbGUgbW9kZSAxMDA2NDQgaW5kZXgNCj4gPiAwMDAwMDAwMDAwMDAu Ljg5YzA2YjcwYjY1ZA0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL210ZC9u YW5kL2FyYXNhbl9uYW5kLmMNCj4gPiBAQCAtMCwwICsxLDEwMTggQEANCj4gPiArLyoNCj4gPiAr ICogQXJhc2FuIE5BTkQgRmxhc2ggQ29udHJvbGxlciBEcml2ZXINCj4gPiArICoNCj4gPiArICog Q29weXJpZ2h0IChDKSAyMDE0IC0gMjAxNyBYaWxpbngsIEluYy4NCj4gPiArICogQXV0aG9yOiBQ dW5uYWlhaCBDaG91ZGFyeSBLYWxsdXJpIDxwdW5uYWlhQHhpbGlueC5jb20+DQo+ID4gKyAqDQo+ ID4gKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQo+ID4gKyAqLw0KPiA+ICsj aW5jbHVkZSA8bGludXgvY2xrLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KPiA+ ICsjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2lu dGVycnVwdC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvaW8tNjQtbm9uYXRvbWljLWxvLWhpLmg+ ICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQu aD4gI2luY2x1ZGUgPGxpbnV4L210ZC9yYXduYW5kLmg+ICNpbmNsdWRlDQo+ID4gKzxsaW51eC9t dGQvcGFydGl0aW9ucy5oPiAjaW5jbHVkZSA8bGludXgvb2YuaD4gI2luY2x1ZGUNCj4gPiArPGxp bnV4L3BsYXRmb3JtX2RldmljZS5oPg0KPiA+ICsNCj4gPiArI2RlZmluZSBEUklWRVJfTkFNRQkJ CSJhcmFzYW5fbmFuZCINCj4gPiArI2RlZmluZSBFVk5UX1RJTUVPVVRfTVNFQwkJMTAwMA0KPiA+ ICsNCj4gPiArI2RlZmluZSBQS1RfT0ZTVAkJCTB4MDANCj4gPiArI2RlZmluZSBNRU1fQUREUjFf T0ZTVAkJCTB4MDQNCj4gPiArI2RlZmluZSBNRU1fQUREUjJfT0ZTVAkJCTB4MDgNCj4gPiArI2Rl ZmluZSBDTURfT0ZTVAkJCTB4MEMNCj4gPiArI2RlZmluZSBQUk9HX09GU1QJCQkweDEwDQo+ID4g KyNkZWZpbmUgSU5UUl9TVFNfRU5fT0ZTVAkJMHgxNA0KPiA+ICsjZGVmaW5lIElOVFJfU0lHX0VO X09GU1QJCTB4MTgNCj4gPiArI2RlZmluZSBJTlRSX1NUU19PRlNUCQkJMHgxQw0KPiA+ICsjZGVm aW5lIFJFQURZX1NUU19PRlNUCQkJMHgyMA0KPiA+ICsjZGVmaW5lIERNQV9BRERSMV9PRlNUCQkJ MHgyNA0KPiA+ICsjZGVmaW5lIEZMQVNIX1NUU19PRlNUCQkJMHgyOA0KPiA+ICsjZGVmaW5lIERB VEFfUE9SVF9PRlNUCQkJMHgzMA0KPiA+ICsjZGVmaW5lIEVDQ19PRlNUCQkJMHgzNA0KPiA+ICsj ZGVmaW5lIEVDQ19FUlJfQ05UX09GU1QJCTB4MzgNCj4gPiArI2RlZmluZSBFQ0NfU1BSX0NNRF9P RlNUCQkweDNDDQo+ID4gKyNkZWZpbmUgRUNDX0VSUl9DTlRfMUJJVF9PRlNUCQkweDQwDQo+ID4g KyNkZWZpbmUgRUNDX0VSUl9DTlRfMkJJVF9PRlNUCQkweDQ0DQo+ID4gKyNkZWZpbmUgRE1BX0FE RFIwX09GU1QJCQkweDUwDQo+ID4gKyNkZWZpbmUgREFUQV9JTlRFUkZBQ0VfT0ZTVAkJMHg2Qw0K PiA+ICsNCj4gPiArI2RlZmluZSBQS1RfQ05UX1NISUZUCQkJMTINCj4gPiArDQo+ID4gKyNkZWZp bmUgRUNDX0VOQUJMRQkJCUJJVCgzMSkNCj4gPiArI2RlZmluZSBETUFfRU5fTUFTSwkJCUdFTk1B U0soMjcsIDI2KQ0KPiA+ICsjZGVmaW5lIERNQV9FTkFCTEUJCQkweDINCj4gPiArI2RlZmluZSBE TUFfRU5fU0hJRlQJCQkyNg0KPiA+ICsjZGVmaW5lIFJFR19QQUdFX1NJWkVfU0hJRlQJCTIzDQo+ ID4gKyNkZWZpbmUgUkVHX1BBR0VfU0laRV81MTIJCTANCj4gPiArI2RlZmluZSBSRUdfUEFHRV9T SVpFXzFLCQk1DQo+ID4gKyNkZWZpbmUgUkVHX1BBR0VfU0laRV8ySwkJMQ0KPiA+ICsjZGVmaW5l IFJFR19QQUdFX1NJWkVfNEsJCTINCj4gPiArI2RlZmluZSBSRUdfUEFHRV9TSVpFXzhLCQkzDQo+ ID4gKyNkZWZpbmUgUkVHX1BBR0VfU0laRV8xNksJCTQNCj4gPiArI2RlZmluZSBDTUQyX1NISUZU CQkJOA0KPiA+ICsjZGVmaW5lIEFERFJfQ1lDTEVTX1NISUZUCQkyOA0KPiA+ICsNCj4gPiArI2Rl ZmluZSBYRkVSX0NPTVBMRVRFCQkJQklUKDIpDQo+ID4gKyNkZWZpbmUgUkVBRF9SRUFEWQkJCUJJ VCgxKQ0KPiA+ICsjZGVmaW5lIFdSSVRFX1JFQURZCQkJQklUKDApDQo+ID4gKyNkZWZpbmUgTUJJ VF9FUlJPUgkJCUJJVCgzKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBQUk9HX1BHUkQJCQlCSVQoMCkN Cj4gPiArI2RlZmluZSBQUk9HX0VSQVNFCQkJQklUKDIpDQo+ID4gKyNkZWZpbmUgUFJPR19TVEFU VVMJCQlCSVQoMykNCj4gPiArI2RlZmluZSBQUk9HX1BHUFJPRwkJCUJJVCg0KQ0KPiA+ICsjZGVm aW5lIFBST0dfUkRJRAkJCUJJVCg2KQ0KPiA+ICsjZGVmaW5lIFBST0dfUkRQQVJBTQkJCUJJVCg3 KQ0KPiA+ICsjZGVmaW5lIFBST0dfUlNUCQkJQklUKDgpDQo+ID4gKyNkZWZpbmUgUFJPR19HRVRf RkVBVFVSRQkJQklUKDkpDQo+ID4gKyNkZWZpbmUgUFJPR19TRVRfRkVBVFVSRQkJQklUKDEwKQ0K PiA+ICsNCj4gPiArI2RlZmluZSBQR19BRERSX1NISUZUCQkJMTYNCj4gPiArI2RlZmluZSBCQ0hf TU9ERV9TSElGVAkJCTI1DQo+ID4gKyNkZWZpbmUgQkNIX0VOX1NISUZUCQkJMjcNCj4gPiArI2Rl ZmluZSBFQ0NfU0laRV9TSElGVAkJCTE2DQo+ID4gKw0KPiA+ICsjZGVmaW5lIE1FTV9BRERSX01B U0sJCQlHRU5NQVNLKDcsIDApDQo+ID4gKyNkZWZpbmUgQkNIX01PREVfTUFTSwkJCUdFTk1BU0so MjcsIDI1KQ0KPiA+ICsNCj4gPiArI2RlZmluZSBDU19NQVNLCQkJCUdFTk1BU0soMzEsIDMwKQ0K PiA+ICsjZGVmaW5lIENTX1NISUZUCQkJMzANCj4gPiArDQo+ID4gKyNkZWZpbmUgUEFHRV9FUlJf Q05UX01BU0sJCUdFTk1BU0soMTYsIDgpDQo+ID4gKyNkZWZpbmUgUEtUX0VSUl9DTlRfTUFTSwkJ R0VOTUFTSyg3LCAwKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBOVkREUl9NT0RFCQkJQklUKDkpDQo+ ID4gKyNkZWZpbmUgTlZERFJfVElNSU5HX01PREVfU0hJRlQJCTMNCj4gPiArDQo+ID4gKyNkZWZp bmUgT05GSV9JRF9MRU4JCQk4DQo+ID4gKyNkZWZpbmUgVEVNUF9CVUZfU0laRQkJCTEwMjQNCj4g PiArI2RlZmluZSBOVkREUl9NT0RFX1BBQ0tFVF9TSVpFCQk4DQo+ID4gKyNkZWZpbmUgU0RSX01P REVfUEFDS0VUX1NJWkUJCTQNCj4gPiArDQo+ID4gKyNkZWZpbmUgT05GSV9EQVRBX0lOVEVSRkFD RV9OVkREUiAgICAgIEJJVCg0KQ0KPiA+ICsjZGVmaW5lIEVWRU5UX01BU0sJKFhGRVJfQ09NUExF VEUgfCBSRUFEX1JFQURZIHwNCj4gV1JJVEVfUkVBRFkNCj4gPiB8IE1CSVRfRVJST1IpICsNCj4g PiArI2RlZmluZSBTRFJfTU9ERV9ERUZMVF9GUkVRCQk4MDAwMDAwMA0KPiA+ICsNCj4gPiArLyoq DQo+ID4gKyAqIHN0cnVjdCBhbmZjX25hbmRfY2hpcCAtIERlZmluZXMgdGhlIG5hbmQgY2hpcCBy ZWxhdGVkIGluZm9ybWF0aW9uDQo+IA0KPiBJIHRoaW5rIHlvdSBzaG91bGQgcy9uYW5kL05BTkQv IHdoZW4gd3JpdGluZyBwbGFpbiBFbmdsaXNoPw0KT2ssIEkgd2lsbCB1cGRhdGUgdGhpcyBpbiBu ZXh0IHBhdGNoLg0KPiANCj4gPiArICogQG5vZGU6CQl1c2VkIHRvIHN0b3JlIE5BTkQgY2hpcHMg aW50byBhIGxpc3QuDQo+ID4gKyAqIEBjaGlwOgkJTkFORCBjaGlwIGluZm9ybWF0aW9uIHN0cnVj dHVyZS4NCj4gPiArICogQGJjaDoJCUJjaCAvIEhhbW1pbmcgbW9kZSBlbmFibGUvZGlzYWJsZS4N Cj4gPiArICogQGJjaG1vZGU6CQlCY2ggbW9kZS4NCj4gPiArICogQGVjY3ZhbDoJCUVjYyBjb25m aWcgdmFsdWUuDQo+ID4gKyAqIEByYWRkcl9jeWNsZXM6CVJvdyBhZGRyZXNzIGN5Y2xlIGluZm9y bWF0aW9uLg0KPiA+ICsgKiBAY2FkZHJfY3ljbGVzOglDb2x1bW4gYWRkcmVzcyBjeWNsZSBpbmZv cm1hdGlvbi4NCj4gPiArICogQHBrdHNpemU6CQlQYWNrZXQgc2l6ZSBmb3IgcmVhZCAvIHdyaXRl IG9wZXJhdGlvbi4NCj4gPiArICogQGNzbnVtOgkJY2hpcHNlbGVjdCBudW1iZXIgdG8gYmUgdXNl ZC4NCj4gPiArICogQHNwa3RzaXplOgkJUGFja2V0IHNpemUgaW4gZGRyIG1vZGUgZm9yIHN0YXR1 cw0KPiA+IG9wZXJhdGlvbi4NCj4gPiArICogQGluZnRpbWV2YWw6CQlEYXRhIGludGVyZmFjZSBh bmQgdGltaW5nIG1vZGUNCj4gPiBpbmZvcm1hdGlvbg0KPiA+ICsgKi8NCj4gPiArc3RydWN0IGFu ZmNfbmFuZF9jaGlwIHsNCj4gPiArCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsNCj4gPiArCXN0cnVj dCBuYW5kX2NoaXAgY2hpcDsNCj4gPiArCWJvb2wgYmNoOw0KPiA+ICsJdTMyIGJjaG1vZGU7DQo+ ID4gKwl1MzIgZWNjdmFsOw0KPiA+ICsJdTE2IHJhZGRyX2N5Y2xlczsNCj4gPiArCXUxNiBjYWRk cl9jeWNsZXM7DQo+ID4gKwl1MzIgcGt0c2l6ZTsNCj4gPiArCWludCBjc251bTsNCj4gPiArCXUz MiBzcGt0c2l6ZTsNCj4gPiArCXUzMiBpbmZ0aW1ldmFsOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiAr LyoqDQo+ID4gKyAqIHN0cnVjdCBhbmZjIC0gRGVmaW5lcyB0aGUgQXJhc2FuIE5BTkQgZmxhc2gg ZHJpdmVyIGluc3RhbmNlDQo+ID4gKyAqIEBjb250cm9sbGVyOgkJYmFzZSBjb250cm9sbGVyIHN0 cnVjdHVyZS4NCj4gPiArICogQGNoaXBzOgkJbGlzdCBvZiBhbGwgbmFuZCBjaGlwcyBhdHRhY2hl ZCB0byB0aGUNCj4gPiBjdHJsZXIuDQo+ID4gKyAqIEBkZXY6CQlQb2ludGVyIHRvIHRoZSBkZXZp Y2Ugc3RydWN0dXJlLg0KPiA+ICsgKiBAYmFzZToJCVZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgTkFO RCBmbGFzaCBkZXZpY2UuDQo+ID4gKyAqIEBjdXJyX2NtZDoJCUN1cnJlbnQgY29tbWFuZCBpc3N1 ZWQuDQo+ID4gKyAqIEBjbGtfc3lzOgkJUG9pbnRlciB0byB0aGUgc3lzdGVtIGNsb2NrLg0KPiA+ ICsgKiBAY2xrX2ZsYXNoOgkJUG9pbnRlciB0byB0aGUgZmxhc2ggY2xvY2suDQo+ID4gKyAqIEBk bWE6CQlEbWEgZW5hYmxlL2Rpc2FibGUuDQo+ID4gKyAqIEBpc3dyaXRlb29iOgkJSWRlbnRpZmll cyBpZiBvb2Igd3JpdGUgb3BlcmF0aW9uIGlzDQo+ID4gcmVxdWlyZWQuDQo+ID4gKyAqIEBidWY6 CQlCdWZmZXIgdXNlZCBmb3IgcmVhZC93cml0ZSBieXRlIG9wZXJhdGlvbnMuDQo+ID4gKyAqIEBp cnE6CQlpcnEgbnVtYmVyDQo+ID4gKyAqIEBidWZzaGlmdDoJCVZhcmlhYmxlIHVzZWQgZm9yIGlu ZGV4aW5nIGJ1ZmZlcg0KPiA+IG9wZXJhdGlvbg0KPiA+ICsgKiBAY3NudW06CQlDaGlwIHNlbGVj dCBudW1iZXIgY3VycmVudGx5IGludXNlLg0KPiA+ICsgKiBAZXZlbnQ6CQlDb21wbGV0aW9uIGV2 ZW50IGZvciBuYW5kIHN0YXR1cyBldmVudHMuDQo+ID4gKyAqIEBzdGF0dXM6CQlTdGF0dXMgb2Yg dGhlIGZsYXNoIGRldmljZQ0KPiA+ICsgKi8NCj4gPiArc3RydWN0IGFuZmMgew0KPiA+ICsJc3Ry dWN0IG5hbmRfaHdfY29udHJvbCBjb250cm9sbGVyOw0KPiA+ICsJc3RydWN0IGxpc3RfaGVhZCBj aGlwczsNCj4gPiArCXN0cnVjdCBkZXZpY2UgKmRldjsNCj4gPiArCXZvaWQgX19pb21lbSAqYmFz ZTsNCj4gPiArCWludCBjdXJyX2NtZDsNCj4gPiArCXN0cnVjdCBjbGsgKmNsa19zeXM7DQo+ID4g KwlzdHJ1Y3QgY2xrICpjbGtfZmxhc2g7DQo+ID4gKwlib29sIGRtYTsNCj4gPiArCWJvb2wgaXN3 cml0ZW9vYjsNCj4gPiArCXU4IGJ1ZltURU1QX0JVRl9TSVpFXTsNCj4gPiArCWludCBpcnE7DQo+ ID4gKwl1MzIgYnVmc2hpZnQ7DQo+ID4gKwlpbnQgY3NudW07DQo+ID4gKwlzdHJ1Y3QgY29tcGxl dGlvbiBldmVudDsNCj4gPiArCWludCBzdGF0dXM7DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0 aWMgaW50IGFuZmNfb29ibGF5b3V0X2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHNlY3Rp b24sDQo+ID4gKwkJCSAgICAgIHN0cnVjdCBtdGRfb29iX3JlZ2lvbiAqb29icmVnaW9uKSB7DQo+ ID4gKwlzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kID0gbXRkX3RvX25hbmQobXRkKTsNCj4gPiArDQo+ ID4gKwlpZiAoc2VjdGlvbikNCj4gPiArCQlyZXR1cm4gLUVSQU5HRTsNCj4gPiArDQo+ID4gKwlv b2JyZWdpb24tPmxlbmd0aCA9IG5hbmQtPmVjYy50b3RhbDsNCj4gPiArCW9vYnJlZ2lvbi0+b2Zm c2V0ID0gbXRkLT5vb2JzaXplIC0gb29icmVnaW9uLT5sZW5ndGg7DQo+ID4gKw0KPiA+ICsJcmV0 dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgYW5mY19vb2JsYXlvdXRfZnJl ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHNlY3Rpb24sDQo+ID4gKwkJCSAgICAgICBzdHJ1 Y3QgbXRkX29vYl9yZWdpb24gKm9vYnJlZ2lvbikgew0KPiA+ICsJc3RydWN0IG5hbmRfY2hpcCAq bmFuZCA9IG10ZF90b19uYW5kKG10ZCk7DQo+ID4gKw0KPiA+ICsJaWYgKHNlY3Rpb24pDQo+ID4g KwkJcmV0dXJuIC1FUkFOR0U7DQo+ID4gKw0KPiA+ICsJb29icmVnaW9uLT5vZmZzZXQgPSAyOw0K PiA+ICsJb29icmVnaW9uLT5sZW5ndGggPSBtdGQtPm9vYnNpemUgLSBuYW5kLT5lY2MudG90YWwg LSAyOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IG10ZF9vb2JsYXlvdXRfb3BzIGFuZmNfb29ibGF5b3V0X29wcyA9IHsNCj4g PiArCS5lY2MgPSBhbmZjX29vYmxheW91dF9lY2MsDQo+ID4gKwkuZnJlZSA9IGFuZmNfb29ibGF5 b3V0X2ZyZWUsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBhbmZj X25hbmRfY2hpcCAqdG9fYW5mY19uYW5kKHN0cnVjdCBuYW5kX2NoaXANCj4gPiAqbmFuZCkgK3sN Cj4gPiArCXJldHVybiBjb250YWluZXJfb2YobmFuZCwgc3RydWN0IGFuZmNfbmFuZF9jaGlwLCBj aGlwKTsgfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgYW5mYyAqdG9fYW5mYyhz dHJ1Y3QgbmFuZF9od19jb250cm9sICpjdHJsKSB7DQo+ID4gKwlyZXR1cm4gY29udGFpbmVyX29m KGN0cmwsIHN0cnVjdCBhbmZjLCBjb250cm9sbGVyKTsgfQ0KPiA+ICsNCj4gPiArc3RhdGljIHU4 IGFuZmNfcGFnZSh1MzIgcGFnZXNpemUpDQo+ID4gK3sNCj4gPiArCXN3aXRjaCAocGFnZXNpemUp IHsNCj4gPiArCWNhc2UgNTEyOg0KPiA+ICsJCXJldHVybiBSRUdfUEFHRV9TSVpFXzUxMjsNCj4g PiArCWNhc2UgMTAyNDoNCj4gPiArCQlyZXR1cm4gUkVHX1BBR0VfU0laRV8xSzsNCj4gPiArCWNh c2UgMjA0ODoNCj4gPiArCQlyZXR1cm4gUkVHX1BBR0VfU0laRV8ySzsNCj4gPiArCWNhc2UgNDA5 NjoNCj4gPiArCQlyZXR1cm4gUkVHX1BBR0VfU0laRV80SzsNCj4gPiArCWNhc2UgODE5MjoNCj4g PiArCQlyZXR1cm4gUkVHX1BBR0VfU0laRV84SzsNCj4gPiArCWNhc2UgMTYzODQ6DQo+IA0KPiBN YXliZSB5b3UgY2FuIHVzZSBtYWNyb3MgbGlrZSBTWl81MTIsIFNaXzFLLCBTWl8ySywgZXRjLCBz ZWUNCj4gaW5jbHVkZS9saW51eC9zaXplcy5oDQpUaGVzZSBhcmUgbm90IHJlYWxseSBwYWdlIHNp emUgdmFsdWVzLg0KSW4gQ01EX1JFR1syNToyM10gd2UgbmVlZCB0byBzcGVjaWZ5IHBhZ2Ugc2l6 ZSBhcyBiZWxvdw0KMDAwOiA1MTItYnl0ZSBQYWdlIHNpemUuDQowMDE6IDJLQiBQYWdlIHNpemUu DQowMTA6IDRLQiBQYWdlIHNpemUuDQowMTE6IDhLQiBQYWdlIHNpemUuDQoxMDA6IDE2S0IgUGFn ZSBzaXplLCBoZW5jZSBmb3IgbmFtaW5nIGNvbnZlbnRpb25zIHdlIHVzZWQgdGhlIGFib3ZlIG1h Y3Jvcy4gDQpNZWFucywgUkVHX1BBR0VfU0laRV81MTIgPSAwLg0KPiANCj4gPiArCQlyZXR1cm4g UkVHX1BBR0VfU0laRV8xNks7DQo+ID4gKwlkZWZhdWx0Og0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJ fQ0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5s aW5lIHZvaWQgYW5mY19lbmFibGVfaW50cnMoc3RydWN0IGFuZmMgKm5mYywgdTMyIHZhbCkgew0K PiA+ICsJd3JpdGVsKHZhbCwgbmZjLT5iYXNlICsgSU5UUl9TVFNfRU5fT0ZTVCk7DQo+ID4gKwl3 cml0ZWwodmFsLCBuZmMtPmJhc2UgKyBJTlRSX1NJR19FTl9PRlNUKTsgfQ0KPiA+ICsNCj4gPiAr c3RhdGljIGlubGluZSB2b2lkIGFuZmNfY29uZmlnX2VjYyhzdHJ1Y3QgYW5mYyAqbmZjLCBpbnQg b24pIHsNCj4gPiArCXUzMiB2YWw7DQo+ID4gKw0KPiA+ICsJdmFsID0gcmVhZGwobmZjLT5iYXNl ICsgQ01EX09GU1QpOw0KPiA+ICsJaWYgKG9uKQ0KPiA+ICsJCXZhbCB8PSBFQ0NfRU5BQkxFOw0K PiA+ICsJZWxzZQ0KPiA+ICsJCXZhbCAmPSB+RUNDX0VOQUJMRTsNCj4gPiArCXdyaXRlbCh2YWws IG5mYy0+YmFzZSArIENNRF9PRlNUKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGlu ZSB2b2lkIGFuZmNfY29uZmlnX2RtYShzdHJ1Y3QgYW5mYyAqbmZjLCBpbnQgb24pIHsNCj4gPiAr CXUzMiB2YWw7DQo+ID4gKw0KPiA+ICsJdmFsID0gcmVhZGwobmZjLT5iYXNlICsgQ01EX09GU1Qp Ow0KPiA+ICsJdmFsICY9IH5ETUFfRU5fTUFTSzsNCj4gPiArCWlmIChvbikNCj4gPiArCQl2YWwg fD0gRE1BX0VOQUJMRSA8PCBETUFfRU5fU0hJRlQ7DQo+ID4gKwl3cml0ZWwodmFsLCBuZmMtPmJh c2UgKyBDTURfT0ZTVCk7DQo+ID4gK30NCj4gDQo+IE5pdHBpY2s6IGJvdGggYW5mY19jb25maWdf ZWNjL2RtYSgpIGZ1bmN0aW9ucyBkbyBzaW1pbGFyIGFjdGlvbnMgYnV0IHRoZSBzeW50YXgNCj4g aXMgZGlmZmVyZW50Lg0KWWVzLCB3ZSBjYW4gbWFrZSBpdCBnZW5lcmljLCBCdXQgdG8gaWRlbnRp Znkgd2hldGhlciB3ZSBhcmUgY29uZmlndXJpbmcgZWNjIG9yIGRtYSwgdGhlc2UgdHdvIGZ1bmN0 aW9ucyBhcmUgYWRkZWQuDQo+IA0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSBpbnQgYW5mY193 YWl0X2Zvcl9ldmVudChzdHJ1Y3QgYW5mYyAqbmZjKSB7DQo+ID4gKwlyZXR1cm4gd2FpdF9mb3Jf Y29tcGxldGlvbl90aW1lb3V0KCZuZmMtPmV2ZW50LA0KPiA+ICsNCj4gPiBtc2Vjc190b19qaWZm aWVzKEVWTlRfVElNRU9VVF9NU0VDKSk7ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHZv aWQgYW5mY19zZXRwa3RzemNudChzdHJ1Y3QgYW5mYyAqbmZjLCB1MzIgcGt0c2l6ZSwNCj4gPiAr CQkJCSAgICB1MzIgcGt0Y291bnQpDQo+ID4gK3sNCj4gPiArCXdyaXRlbChwa3RzaXplIHwgKHBr dGNvdW50IDw8IFBLVF9DTlRfU0hJRlQpLCBuZmMtPmJhc2UgKw0KPiA+IFBLVF9PRlNUKTsgK30N Cj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCBhbmZjX3NldF9lY2NzcGFyZWNtZChzdHJ1 Y3QgYW5mYyAqbmZjLA0KPiA+ICsJCQkJCXN0cnVjdCBhbmZjX25hbmRfY2hpcA0KPiA+ICphY2hp cCwgdTggY21kMSwNCj4gPiArCQkJCQl1OCBjbWQyKQ0KPiA+ICt7DQo+ID4gKwl3cml0ZWwoY21k MSB8IChjbWQyIDw8IENNRDJfU0hJRlQpIHwNCj4gPiArCSAgICAgICAoYWNoaXAtPmNhZGRyX2N5 Y2xlcyA8PCBBRERSX0NZQ0xFU19TSElGVCksDQo+ID4gKwkgICAgICAgbmZjLT5iYXNlICsgRUND X1NQUl9DTURfT0ZTVCk7IH0NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIGFuZmNfc2V0cGFnZWNv bGFkZHIoc3RydWN0IGFuZmMgKm5mYywgdTMyIHBhZ2UsIHUxNiBjb2wpDQo+ID4gK3sNCj4gPiAr CXUzMiB2YWw7DQo+ID4gKw0KPiA+ICsJd3JpdGVsKGNvbCB8IChwYWdlIDw8IFBHX0FERFJfU0hJ RlQpLCBuZmMtPmJhc2UgKw0KPiA+IE1FTV9BRERSMV9PRlNUKTsgKw0KPiA+ICsJdmFsID0gcmVh ZGwobmZjLT5iYXNlICsgTUVNX0FERFIyX09GU1QpOw0KPiA+ICsJdmFsID0gKHZhbCAmIH5NRU1f QUREUl9NQVNLKSB8DQo+ID4gKwkgICAgICAoKHBhZ2UgPj4gUEdfQUREUl9TSElGVCkgJiBNRU1f QUREUl9NQVNLKTsNCj4gPiArCXdyaXRlbCh2YWwsIG5mYy0+YmFzZSArIE1FTV9BRERSMl9PRlNU KTsgfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgYW5mY19wcmVwYXJlX2NtZChzdHJ1Y3QgYW5m YyAqbmZjLCB1OCBjbWQxLCB1OCBjbWQyLCB1OA0KPiA+IGRtYW1vZGUsDQo+ID4gKwkJCSAgICAg dTMyIHBhZ2VzaXplLCB1OCBhZGRyY3ljbGVzKQ0KPiA+ICt7DQo+ID4gKwl1MzIgcmVndmFsOw0K PiA+ICsNCj4gPiArCXJlZ3ZhbCA9IGNtZDEgfCAoY21kMiA8PCBDTUQyX1NISUZUKTsNCj4gPiAr CWlmIChkbWFtb2RlICYmIG5mYy0+ZG1hKQ0KPiA+ICsJCXJlZ3ZhbCB8PSBETUFfRU5BQkxFIDw8 IERNQV9FTl9TSElGVDsNCj4gPiArCXJlZ3ZhbCB8PSBhZGRyY3ljbGVzIDw8IEFERFJfQ1lDTEVT X1NISUZUOw0KPiA+ICsJcmVndmFsIHw9IGFuZmNfcGFnZShwYWdlc2l6ZSkgPDwgUkVHX1BBR0Vf U0laRV9TSElGVDsNCj4gPiArCXdyaXRlbChyZWd2YWwsIG5mYy0+YmFzZSArIENNRF9PRlNUKTsg fQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBhbmZjX3dyaXRlX29vYihzdHJ1Y3QgbXRkX2luZm8g Km10ZCwgc3RydWN0IG5hbmRfY2hpcA0KPiA+ICpjaGlwLA0KPiA+ICsJCQkgIGludCBwYWdlKQ0K PiA+ICt7DQo+ID4gKwlzdHJ1Y3QgYW5mYyAqbmZjID0gdG9fYW5mYyhjaGlwLT5jb250cm9sbGVy KTsNCj4gPiArDQo+ID4gKwluZmMtPmlzd3JpdGVvb2IgPSB0cnVlOw0KPiA+ICsJY2hpcC0+Y21k ZnVuYyhtdGQsIE5BTkRfQ01EX1NFUUlOLCBtdGQtPndyaXRlc2l6ZSwgcGFnZSk7DQo+ID4gKwlj aGlwLT53cml0ZV9idWYobXRkLCBjaGlwLT5vb2JfcG9pLCBtdGQtPm9vYnNpemUpOw0KPiA+ICsJ bmZjLT5pc3dyaXRlb29iID0gZmFsc2U7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIGFuZmNfcndfYnVmX2RtYShzdHJ1Y3QgbXRkX2luZm8g Km10ZCwgdWludDhfdCAqYnVmLCBpbnQNCj4gPiBsZW4sDQo+ID4gKwkJCSAgICBpbnQgb3BlcmF0 aW9uLCB1MzIgcHJvZykNCj4gPiArew0KPiA+ICsJZG1hX2FkZHJfdCBwYWRkcjsNCj4gPiArCXN0 cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGRfdG9fbmFuZChtdGQpOw0KPiA+ICsJc3RydWN0IGFu ZmMgKm5mYyA9IHRvX2FuZmMoY2hpcC0+Y29udHJvbGxlcik7DQo+ID4gKwlzdHJ1Y3QgYW5mY19u YW5kX2NoaXAgKmFjaGlwID0gdG9fYW5mY19uYW5kKGNoaXApOw0KPiA+ICsJdTMyIGVjY2ludHIg PSAwLCBkaXI7DQo+ID4gKwl1MzIgcGt0c2l6ZSA9IGxlbiwgcGt0Y291bnQgPSAxOw0KPiA+ICsN Cj4gPiArCWlmIChuZmMtPmN1cnJfY21kID09IE5BTkRfQ01EX1JFQUQwIHx8DQo+ID4gKwkgICAg KG5mYy0+Y3Vycl9jbWQgPT0gTkFORF9DTURfU0VRSU4gJiYgIW5mYy0+aXN3cml0ZW9vYikpIHsN Cj4gPiArCQlwa3RzaXplID0gYWNoaXAtPnBrdHNpemU7DQo+ID4gKwkJcGt0Y291bnQgPSBESVZf Uk9VTkRfVVAobXRkLT53cml0ZXNpemUsIHBrdHNpemUpOw0KPiA+ICsJfQ0KPiA+ICsJYW5mY19z ZXRwa3RzemNudChuZmMsIHBrdHNpemUsIHBrdGNvdW50KTsNCj4gPiArDQo+ID4gKwlpZiAoIWFj aGlwLT5iY2ggJiYgbmZjLT5jdXJyX2NtZCA9PSBOQU5EX0NNRF9SRUFEMCkNCj4gPiArCQllY2Np bnRyID0gTUJJVF9FUlJPUjsNCj4gPiArDQo+ID4gKwlpZiAob3BlcmF0aW9uKQ0KPiA+ICsJCWRp ciA9IERNQV9GUk9NX0RFVklDRTsNCj4gPiArCWVsc2UNCj4gPiArCQlkaXIgPSBETUFfVE9fREVW SUNFOw0KPiA+ICsNCj4gPiArCXBhZGRyID0gZG1hX21hcF9zaW5nbGUobmZjLT5kZXYsIGJ1Ziwg bGVuLCBkaXIpOw0KPiA+ICsJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKG5mYy0+ZGV2LCBwYWRkcikp IHsNCj4gPiArCQlkZXZfZXJyKG5mYy0+ZGV2LCAiUmVhZCBidWZmZXIgbWFwcGluZyBlcnJvciIp Ow0KPiA+ICsJCXJldHVybjsNCj4gPiArCX0NCj4gPiArCXdyaXRlbChwYWRkciwgbmZjLT5iYXNl ICsgRE1BX0FERFIwX09GU1QpOw0KPiA+ICsJd3JpdGVsKChwYWRkciA+PiAzMiksIG5mYy0+YmFz ZSArIERNQV9BRERSMV9PRlNUKTsNCj4gPiArCWFuZmNfZW5hYmxlX2ludHJzKG5mYywgKFhGRVJf Q09NUExFVEUgfCBlY2NpbnRyKSk7DQo+ID4gKwl3cml0ZWwocHJvZywgbmZjLT5iYXNlICsgUFJP R19PRlNUKTsNCj4gPiArCWFuZmNfd2FpdF9mb3JfZXZlbnQobmZjKTsNCj4gPiArCWRtYV91bm1h cF9zaW5nbGUobmZjLT5kZXYsIHBhZGRyLCBsZW4sIGRpcik7IH0NCj4gPiArDQo+ID4gK3N0YXRp YyB2b2lkIGFuZmNfcndfYnVmX3BpbyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqYnVm LCBpbnQNCj4gPiBsZW4sDQo+ID4gKwkJCSAgICBpbnQgb3BlcmF0aW9uLCBpbnQgcHJvZykNCj4g PiArew0KPiA+ICsJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZF90b19uYW5kKG10ZCk7DQo+ ID4gKwlzdHJ1Y3QgYW5mYyAqbmZjID0gdG9fYW5mYyhjaGlwLT5jb250cm9sbGVyKTsNCj4gPiAr CXN0cnVjdCBhbmZjX25hbmRfY2hpcCAqYWNoaXAgPSB0b19hbmZjX25hbmQoY2hpcCk7DQo+ID4g Kwl1MzIgKmJ1ZnB0ciA9ICh1MzIgKilidWY7DQo+ID4gKwl1MzIgY250ID0gMCwgaW50ciA9IDA7 DQo+ID4gKwl1MzIgcGt0c2l6ZSA9IGxlbiwgcGt0Y291bnQgPSAxOw0KPiA+ICsNCj4gPiArCWFu ZmNfY29uZmlnX2RtYShuZmMsIDApOw0KPiA+ICsNCj4gPiArCWlmIChuZmMtPmN1cnJfY21kID09 IE5BTkRfQ01EX1JFQUQwIHx8DQo+ID4gKwkgICAgKG5mYy0+Y3Vycl9jbWQgPT0gTkFORF9DTURf U0VRSU4gJiYgIW5mYy0+aXN3cml0ZW9vYikpIHsNCj4gPiArCQlwa3RzaXplID0gYWNoaXAtPnBr dHNpemU7DQo+ID4gKwkJcGt0Y291bnQgPSBESVZfUk9VTkRfVVAobXRkLT53cml0ZXNpemUsIHBr dHNpemUpOw0KPiA+ICsJfQ0KPiA+ICsJYW5mY19zZXRwa3RzemNudChuZmMsIHBrdHNpemUsIHBr dGNvdW50KTsNCj4gPiArDQo+ID4gKwlpZiAoIWFjaGlwLT5iY2ggJiYgbmZjLT5jdXJyX2NtZCA9 PSBOQU5EX0NNRF9SRUFEMCkNCj4gPiArCQlpbnRyID0gTUJJVF9FUlJPUjsNCj4gPiArDQo+ID4g KwlpZiAob3BlcmF0aW9uKQ0KPiA+ICsJCWludHIgfD0gUkVBRF9SRUFEWTsNCj4gPiArCWVsc2UN Cj4gPiArCQlpbnRyIHw9IFdSSVRFX1JFQURZOw0KPiA+ICsNCj4gPiArCWFuZmNfZW5hYmxlX2lu dHJzKG5mYywgaW50cik7DQo+ID4gKwl3cml0ZWwocHJvZywgbmZjLT5iYXNlICsgUFJPR19PRlNU KTsNCj4gPiArDQo+ID4gKwl3aGlsZSAoY250IDwgcGt0Y291bnQpIHsNCj4gPiArCQlhbmZjX3dh aXRfZm9yX2V2ZW50KG5mYyk7DQo+ID4gKwkJY250Kys7DQo+ID4gKwkJaWYgKGNudCA9PSBwa3Rj b3VudCkNCj4gPiArCQkJYW5mY19lbmFibGVfaW50cnMobmZjLCBYRkVSX0NPTVBMRVRFKTsNCj4g PiArCQlpZiAob3BlcmF0aW9uKQ0KPiA+ICsJCQlpb3JlYWQzMl9yZXAobmZjLT5iYXNlICsgREFU QV9QT1JUX09GU1QsDQo+ID4gYnVmcHRyLA0KPiA+ICsJCQkJICAgICBwa3RzaXplIC8gNCk7DQo+ ID4gKwkJZWxzZQ0KPiA+ICsJCQlpb3dyaXRlMzJfcmVwKG5mYy0+YmFzZSArIERBVEFfUE9SVF9P RlNULA0KPiA+IGJ1ZnB0ciwNCj4gPiArCQkJCSAgICAgIHBrdHNpemUgLyA0KTsNCj4gPiArCQli dWZwdHIgKz0gKHBrdHNpemUgLyA0KTsNCj4gPiArCQlpZiAoY250IDwgcGt0Y291bnQpDQo+ID4g KwkJCWFuZmNfZW5hYmxlX2ludHJzKG5mYywgaW50cik7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJ YW5mY193YWl0X2Zvcl9ldmVudChuZmMpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9p ZCBhbmZjX3JlYWRfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsIGludA0K PiA+IGxlbikgK3sNCj4gPiArCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGRfdG9fbmFuZCht dGQpOw0KPiA+ICsJc3RydWN0IGFuZmMgKm5mYyA9IHRvX2FuZmMoY2hpcC0+Y29udHJvbGxlcik7 DQo+ID4gKw0KPiA+ICsJaWYgKG5mYy0+ZG1hICYmICFpc192bWFsbG9jX2FkZHIoYnVmKSkNCj4g PiArCQlhbmZjX3J3X2J1Zl9kbWEobXRkLCBidWYsIGxlbiwgMSwgUFJPR19QR1JEKTsNCj4gPiAr CWVsc2UNCj4gPiArCQlhbmZjX3J3X2J1Zl9waW8obXRkLCBidWYsIGxlbiwgMSwgUFJPR19QR1JE KTsNCj4gDQo+IFlvdSBwdXQgMCBvciAxIGluIHRoZSAib3BlcmF0aW9uIiB3aGlsZSB0aGlzIG1l YW5zICJkbyBhIHJlYWQiIG9yICJkbyBhIHdyaXRlIiwNCj4gYm90aCBhbmZjX3J3X2J1Zl9kbWEv cGlvKCkgZnVuY3Rpb25zIHdvdWxkIHByb2JhYmx5IGJlbmVmaXQgdG8gaGF2ZSB0aGlzDQo+IHBh cmFtZXRlciByZW5hbWVkIGFuZCB0dXJuZWQgaW50byBhIGJvb2xlYW4uDQoNCk9rLCBJIHdpbGwg dXBkYXRlIGl0IGluIG5leHQgcGF0Y2guDQo+IA0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg dm9pZCBhbmZjX3dyaXRlX2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdWludDhfdCAq YnVmLA0KPiA+IGludCBsZW4pICt7DQo+ID4gKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRk X3RvX25hbmQobXRkKTsNCj4gPiArCXN0cnVjdCBhbmZjICpuZmMgPSB0b19hbmZjKGNoaXAtPmNv bnRyb2xsZXIpOw0KPiA+ICsNCj4gPiArCWlmIChuZmMtPmRtYSAmJiAhaXNfdm1hbGxvY19hZGRy KGJ1ZikpDQo+ID4gKwkJYW5mY19yd19idWZfZG1hKG10ZCwgKGNoYXIgKilidWYsIGxlbiwgMCwN Cj4gPiBQUk9HX1BHUFJPRyk7DQo+ID4gKwllbHNlDQo+ID4gKwkJYW5mY19yd19idWZfcGlvKG10 ZCwgKGNoYXIgKilidWYsIGxlbiwgMCwNCj4gPiBQUk9HX1BHUFJPRyk7DQo+IA0KPiBJIHRoaW5r IGJvdGggIihjaGFyICopIiBjYXN0cyBhcmUgYWJ1c2l2ZSBhbmQgdGhlIGNvbnN0IHF1YWxpZmll ciBzaG91bGQgcHJvYmFibHkNCj4gcmVtYWluLg0KT2ssIEkgd2lsbCB1cGRhdGUgaXQgaW4gbmV4 dCBwYXRjaC4NCj4gDQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgYW5mY19yZWFkX3Bh Z2VfaHdlY2Moc3RydWN0IG10ZF9pbmZvICptdGQsDQo+ID4gKwkJCQlzdHJ1Y3QgbmFuZF9jaGlw ICpjaGlwLCB1aW50OF90ICpidWYsDQo+ID4gKwkJCQlpbnQgb29iX3JlcXVpcmVkLCBpbnQgcGFn ZSkNCj4gPiArew0KPiA+ICsJdTMyIHZhbDsNCj4gPiArCXN0cnVjdCBhbmZjICpuZmMgPSB0b19h bmZjKGNoaXAtPmNvbnRyb2xsZXIpOw0KPiA+ICsJc3RydWN0IGFuZmNfbmFuZF9jaGlwICphY2hp cCA9IHRvX2FuZmNfbmFuZChjaGlwKTsNCj4gPiArCXU4ICplY2NfY29kZSA9IGNoaXAtPmJ1ZmZl cnMtPmVjY2NvZGU7DQo+ID4gKwl1OCAqcCA9IGJ1ZjsNCj4gPiArCWludCBlY2NzaXplID0gY2hp cC0+ZWNjLnNpemU7DQo+ID4gKwlpbnQgZWNjYnl0ZXMgPSBjaGlwLT5lY2MuYnl0ZXM7DQo+ID4g KwlpbnQgZWNjc3RlcHMgPSBjaGlwLT5lY2Muc3RlcHM7DQo+ID4gKwlpbnQgc3RhdCA9IDAsIGk7 DQo+ID4gKw0KPiA+ICsJYW5mY19zZXRfZWNjc3BhcmVjbWQobmZjLCBhY2hpcCwgTkFORF9DTURf Uk5ET1VULA0KPiA+IE5BTkRfQ01EX1JORE9VVFNUQVJUKTsNCj4gPiArCWFuZmNfY29uZmlnX2Vj YyhuZmMsIDEpOw0KPiA+ICsNCj4gPiArCWNoaXAtPnJlYWRfYnVmKG10ZCwgYnVmLCBtdGQtPndy aXRlc2l6ZSk7DQo+ID4gKw0KPiA+ICsJdmFsID0gcmVhZGwobmZjLT5iYXNlICsgRUNDX0VSUl9D TlRfT0ZTVCk7DQo+ID4gKwl2YWwgPSAoKHZhbCAmIFBBR0VfRVJSX0NOVF9NQVNLKSA+PiA4KTsN Cj4gDQo+IElmIEkgdW5kZXJzdGFuZCB0aGlzIGNvcnJlY3RseSwgdGhlcmUgaXMgbm8gcG9pbnQg ZG9pbmcgdGhlIHVwcGVyIHR3byBsaW5lcyBvdXQgb2YNCj4gdGhlIGlmIHN0YXRlbWVudD8NClll cywgSSB3aWxsIG1vdmUgdGhpcyB0byBpZiBzdGF0ZW1lbnQuDQo+IA0KPiA+ICsJaWYgKGFjaGlw LT5iY2gpIHsNCj4gPiArCQltdGQtPmVjY19zdGF0cy5jb3JyZWN0ZWQgKz0gdmFsOw0KPiANCj4g VGhpcyBpcyBzdHJhbmdlIHRoYXQgdGhlcmUgaXMgbm8gaGFuZGxpbmcgb2YgYSBmYWlsaW5nIHNp dHVhdGlvbiB3aGVuIHVzaW5nIEJDSA0KPiBhbGdvcml0aG0uIFlvdSBzaG91bGQgcHJvYmFibHkg YWRkIHNvbWUgbG9naWMgaGVyZSB0aGF0IGVpdGhlciBpbmNyZW1lbnRzDQo+IGVjY19zdGF0cy5j b3JyZWN0ZWQgb3IgZWNjX3N0YXRzLmZhaWxlZCBsaWtlIGl0IGlzIGRvbmUgYmVsb3cuDQpZZXMs IGluIGNhc2Ugb2YgQkNILCB1cHRvIDI0IGJpdCBlcnJvcnMgaXQgd2lsbCBjb3JyZWN0LiBBZnRl ciB0aGF0IGl0IHdvbid0IGV2ZW4gZGV0ZWN0IHRoZSBlcnJvcnMuDQpIZW5jZSB3aGVuIEJDSCB3 ZSBhcmUgbm90IHVwZGF0aW5nIGVycm9ycy4NCg0KPiANCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJ dmFsID0gcmVhZGwobmZjLT5iYXNlICsgRUNDX0VSUl9DTlRfMUJJVF9PRlNUKTsNCj4gPiArCQlt dGQtPmVjY19zdGF0cy5jb3JyZWN0ZWQgKz0gdmFsOw0KPiA+ICsJCXZhbCA9IHJlYWRsKG5mYy0+ YmFzZSArIEVDQ19FUlJfQ05UXzJCSVRfT0ZTVCk7DQo+ID4gKwkJbXRkLT5lY2Nfc3RhdHMuZmFp bGVkICs9IHZhbDsNCj4gPiArCQkvKiBDbGVhciBlY2MgZXJyb3IgY291bnQgcmVnaXN0ZXIgMUJp dCwgMkJpdCAqLw0KPiA+ICsJCXdyaXRlbCgweDAsIG5mYy0+YmFzZSArIEVDQ19FUlJfQ05UXzFC SVRfT0ZTVCk7DQo+ID4gKwkJd3JpdGVsKDB4MCwgbmZjLT5iYXNlICsgRUNDX0VSUl9DTlRfMkJJ VF9PRlNUKTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAob29iX3JlcXVpcmVkKQ0KPiA+ICsJ CWNoaXAtPmVjYy5yZWFkX29vYihtdGQsIGNoaXAsIHBhZ2UpOw0KPiA+ICsNCj4gPiArCWFuZmNf Y29uZmlnX2VjYyhuZmMsIDApOw0KPiA+ICsNCj4gDQo+IFNvbWUgY29tbWVudHMgd291bGQgYmUg d2VsY29tZSBmcm9tIGhlcmUgdG8gdGhlIGVuZCwgdGhhdCBpcyBub3QgZW50aXJlbHkNCj4gY2xl YXIgdG8gbWUgd2hhdCB5b3UgdHJ5IHRvIGFjaGlldmUgaGVyZS4NCj4gDQo+ID4gKwlpZiAodmFs KSB7DQo+IA0KPiBXaGVuIHVzaW5nIEhhbW1pbmcsIHZhbCAhPSAwIG1lYW5zIHRoZXJlIGlzIGFu IHVuY29ycmVjdGFibGUgZXJyb3IsIHdoaWxlDQo+IHdoZW4gdXNpbmcgQkNILCBpdCBtYXkganVz dCBtZWFuIHRoZXJlIHdhcyBzb21lIGNvcnJlY3RlZCBiaXRmbGlwcy4gSSB0aGluayB5b3UNCj4g c2hvdWxkIGVudGVyIHRoaXMgc3RhdGVtZW50IG9ubHkgaWYgSGFtbWluZyBvciBCQ0ggZmFpbGVk IHRvIHJlY292ZXIgYml0ZmxpcHM/DQpZZXMsIEkgd2lsbCB1cGRhdGUuDQo+IA0KPiA+ICsJCWNo aXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9SRUFET09CLCAwLCBwYWdlKTsNCj4gPiArCQljaGlw LT5yZWFkX2J1ZihtdGQsIGNoaXAtPm9vYl9wb2ksIG10ZC0+b29ic2l6ZSk7DQo+IA0KPiBJZiBP T0IgYXJlYSB3YXMgcmVxdWlyZWQsIHlvdSBhcmUgbW9zdCBsaWtlbHkgb3ZlcndyaXRpbmcgT09C IGJ5dGVzIHRoYXQgd2VyZQ0KPiBtYXliZSBjb3JyZWN0ZWQgYnkgdGhlIEVDQyBlbmdpbmUgYmVm b3JlIGl0IHdhcyB0dXJuZWQgb2ZmLCBieSBieXRlcyByZXRyaWVkDQo+IHdpdGggYSByYXcgcmVh ZCAocG90ZW50aWFsbHkgd2l0aCBiaXRmbGlwcykuDQpUaGlzIGNvZGUgaXMgYWRkZWQgdG8gaGFu ZGxlIGJlbG93IGNhc2UuDQpXaGVuIGEgcGFnZSB3YXMgZXJhc2VkLCBFQ0Mgd29uJ3QgdXBkYXRl IGZvciBlcmFzZWQgcGFnZS4NCkFuZCB3aGVuIHdlIGRvIGFuICBlbXB0eSBwYWdlIHJlYWQsIEVD QyB3aWxsIGJlIHVwZGF0ZWQgYW5kIHRoZXJlIGlzIG1pc21hdGNoIGJldHdlZW4gRUNDIGRhdGEg DQpBdCB0aGUgdGltZSBlcmFzaW5nIGFuZCByZWFkaW5nLCBjYXVzaW5nIEVDQyBlcnJvcnMuDQpI ZW5jZSB3ZSBhcmUgcmVhZGluZyBlbnRpcmUgT09CIGFuZCB1cGRhdGluZyB0aGUgY29ycmVjdCBF Q0MgdmFsdWUgZm9yIGFsbCAweGZmJ3MgY2FzZS4NClRoaXMgd2UgaGF2ZSBzZWVuIHdoZW4gdXNp bmcgVUJJRlMsIHNvbWV0aW1lcyByZWFkIGhhcHBlbnMgb24gZXJhc2VkIHBhZ2UuIA0KPiANCj4g PiArCQltdGRfb29ibGF5b3V0X2dldF9lY2NieXRlcyhtdGQsIGVjY19jb2RlLA0KPiA+IGNoaXAt Pm9vYl9wb2ksIDAsDQo+ID4gKwkJCQkJICAgY2hpcC0+ZWNjLnRvdGFsKTsNCj4gPiArCQlmb3Ig KGkgPSAwIDsgZWNjc3RlcHM7IGVjY3N0ZXBzLS0sIGkgKz0gZWNjYnl0ZXMsDQo+ID4gKwkJICAg ICBwICs9IGVjY3NpemUpIHsNCj4gPiArCQkJc3RhdCA9IG5hbmRfY2hlY2tfZXJhc2VkX2VjY19j aHVuayhwLA0KPiA+IGNoaXAtPmVjYy5zaXplLCAmZWNjX2NvZGVbaV0sIGVjY2J5dGVzLCBOVUxM LCAwLCBjaGlwLT5lY2Muc3RyZW5ndGgpOw0KPiANCj4gRG8geW91IGFjdHVhbGx5IGNoZWNrIHRo ZSBlbnRpcmUgT09CIGFyZWEgaGVyZSA/DQo+IA0KPiBDYW4ndCB5b3UganVzdCBkbyB0aGUgY2hl Y2sgb24gY2hpcC0+b29iX3BvaT8NCg0KQWJvdmUgY29tbWVudHMgYW5zd2VycyB0aGlzLg0KPiAN Cj4gPiArCQl9DQo+ID4gKwkJaWYgKHN0YXQgPCAwKQ0KPiANCj4gUGxlYXNlIGNoZWNrIHRoaXMs IGJ1dCBJIHRoaW5rIHlvdSBzaG91bGQgaW5jcmVtZW50IGVjY19zdGF0cy5mYWlsZWQgaGVyZS4N ClllcywgIEkgd2lsbCB1cGRhdGUuDQo+IA0KPiA+ICsJCQlzdGF0ID0gMDsNCj4gPiArCQllbHNl DQo+ID4gKwkJCW10ZC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCArPSBzdGF0Ow0KPiA+ICsJCXJldHVy biBzdGF0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+IA0KPiBD YW4geW91IHJ1biBuYW5kYml0ZXJycyB0ZXN0IChmcm9tIG10ZC11dGlscykgd2l0aCBib3RoIEhh bW1pbmcgYW5kIEJDSCBhbmQNCj4gY2hlY2sgaXQgZmFpbHMgYWZ0ZXIgdGhlIHJpZ2h0IG51bWJl ciBvZiBiaXRmbGlwcz8NCk9rLCBJIHdpbGwgcnVuLg0KPiANCj4gPiArDQo+ID4gK3N0YXRpYyBp bnQgYW5mY193cml0ZV9wYWdlX2h3ZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLA0KPiA+ICsJCQkJ IHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIGNvbnN0DQo+ID4gdWludDhfdCAqYnVmLA0KPiA+ICsJ CQkJIGludCBvb2JfcmVxdWlyZWQsIGludCBwYWdlKQ0KPiA+ICt7DQo+ID4gKwlpbnQgcmV0Ow0K PiA+ICsJc3RydWN0IGFuZmMgKm5mYyA9IHRvX2FuZmMoY2hpcC0+Y29udHJvbGxlcik7DQo+ID4g KwlzdHJ1Y3QgYW5mY19uYW5kX2NoaXAgKmFjaGlwID0gdG9fYW5mY19uYW5kKGNoaXApOw0KPiA+ ICsJdTggKmVjY19jYWxjID0gY2hpcC0+YnVmZmVycy0+ZWNjY2FsYzsNCj4gPiArDQo+ID4gKwlh bmZjX3NldF9lY2NzcGFyZWNtZChuZmMsIGFjaGlwLCBOQU5EX0NNRF9STkRJTiwgMCk7DQo+ID4g KwlhbmZjX2NvbmZpZ19lY2MobmZjLCAxKTsNCj4gPiArDQo+ID4gKwljaGlwLT53cml0ZV9idWYo bXRkLCBidWYsIG10ZC0+d3JpdGVzaXplKTsNCj4gPiArDQo+ID4gKwlpZiAob29iX3JlcXVpcmVk KSB7DQo+ID4gKwkJY2hpcC0+d2FpdGZ1bmMobXRkLCBjaGlwKTsNCj4gPiArCQljaGlwLT5jbWRm dW5jKG10ZCwgTkFORF9DTURfUkVBRE9PQiwgMCwgcGFnZSk7DQo+ID4gKwkJY2hpcC0+cmVhZF9i dWYobXRkLCBlY2NfY2FsYywgbXRkLT5vb2JzaXplKTsNCj4gPiArCQlyZXQgPSBtdGRfb29ibGF5 b3V0X3NldF9lY2NieXRlcyhtdGQsIGVjY19jYWxjLA0KPiA+IGNoaXAtPm9vYl9wb2ksDQo+ID4g KwkJCQkJCSAwLCBjaGlwLT5lY2MudG90YWwpOw0KPiA+ICsJCWlmIChyZXQpDQo+ID4gKwkJCXJl dHVybiByZXQ7DQo+ID4gKwkJY2hpcC0+ZWNjLndyaXRlX29vYihtdGQsIGNoaXAsIHBhZ2UpOw0K PiA+ICsJfQ0KPiA+ICsJYW5mY19jb25maWdfZWNjKG5mYywgMCk7DQo+ID4gKw0KPiA+ICsJcmV0 dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB1OCBhbmZjX3JlYWRfYnl0ZShzdHJ1 Y3QgbXRkX2luZm8gKm10ZCkgew0KPiA+ICsJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZF90 b19uYW5kKG10ZCk7DQo+ID4gKwlzdHJ1Y3QgYW5mYyAqbmZjID0gdG9fYW5mYyhjaGlwLT5jb250 cm9sbGVyKTsNCj4gPiArDQo+ID4gKwlpZiAobmZjLT5jdXJyX2NtZCA9PSBOQU5EX0NNRF9TVEFU VVMpDQo+ID4gKwkJcmV0dXJuIHJlYWRsKG5mYy0+YmFzZSArIEZMQVNIX1NUU19PRlNUKTsNCj4g PiArCWVsc2UNCj4gPiArCQlyZXR1cm4gbmZjLT5idWZbbmZjLT5idWZzaGlmdCsrXTsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBhbmZjX2V4dHJhX2luaXQoc3RydWN0IGFuZmMgKm5m Yywgc3RydWN0IGFuZmNfbmFuZF9jaGlwDQo+ID4gKmFjaGlwKSArew0KPiA+ICsJaW50IG1vZGUs IGVycjsNCj4gPiArCXVuc2lnbmVkIGludCBmZWF0dXJlWzJdOw0KPiA+ICsJdTMyIGluZnRpbWV2 YWw7DQo+ID4gKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gJmFjaGlwLT5jaGlwOw0KPiA+ICsJ c3RydWN0IG10ZF9pbmZvICptdGQgPSBuYW5kX3RvX210ZChjaGlwKTsNCj4gPiArCWJvb2wgY2hh bmdlX3Nkcl9jbGsgPSBmYWxzZTsNCj4gPiArDQo+ID4gKwlpZiAoIWNoaXAtPm9uZmlfdmVyc2lv biB8fA0KPiA+ICsJICAgICEobGUxNl90b19jcHUoY2hpcC0+b25maV9wYXJhbXMub3B0X2NtZCkN Cj4gPiArCSAgICAmIE9ORklfT1BUX0NNRF9TRVRfR0VUX0ZFQVRVUkVTKSkNCj4gPiArCQlyZXR1 cm4gLUVJTlZBTDsNCj4gDQo+IEkgdGhpbmsgdGhpcyBjaGVjayBpcyBhbHJlYWR5IGRvbmUgYnkg dGhlIGNvcmUuDQpTZWUgbXkgY29tbWVudHMgYmVsb3cuDQo+IA0KPiA+ICsNCj4gPiArCS8qDQo+ ID4gKwkgKiBJZiB0aGUgY29udHJvbGxlciBpcyBhbHJlYWR5IGluIHRoZSBzYW1lIG1vZGUgYXMg Zmxhc2gNCj4gPiBkZXZpY2UNCj4gPiArCSAqIHRoZW4gbm8gbmVlZCB0byBjaGFuZ2UgdGhlIHRp bWluZyBtb2RlIGFnYWluLg0KPiA+ICsJICovDQo+ID4gKwlpZiAocmVhZGwobmZjLT5iYXNlICsg REFUQV9JTlRFUkZBQ0VfT0ZTVCkgPT0NCj4gPiBhY2hpcC0+aW5mdGltZXZhbCkNCj4gPiArCQly ZXR1cm4gMDsNCj4gPiArDQo+ID4gKwltZW1zZXQoZmVhdHVyZSwgMCwgTlZERFJfTU9ERV9QQUNL RVRfU0laRSk7DQo+ID4gKwkvKiBHZXQgbnZkZHIgdGltaW5nIG1vZGVzICovDQo+ID4gKwltb2Rl ID0gb25maV9nZXRfc3luY190aW1pbmdfbW9kZShjaGlwKSAmIDB4ZmY7DQo+ID4gKwlpZiAoIW1v ZGUpIHsNCj4gPiArCQltb2RlID0gZmxzKG9uZmlfZ2V0X2FzeW5jX3RpbWluZ19tb2RlKGNoaXAp KSAtIDE7DQo+ID4gKwkJaW5mdGltZXZhbCA9IG1vZGU7DQo+ID4gKwkJaWYgKG1vZGUgPj0gMiAm JiBtb2RlIDw9IDUpDQo+ID4gKwkJCWNoYW5nZV9zZHJfY2xrID0gdHJ1ZTsNCj4gPiArCX0gZWxz ZSB7DQo+ID4gKwkJbW9kZSA9IGZscyhtb2RlKSAtIDE7DQo+ID4gKwkJaW5mdGltZXZhbCA9IE5W RERSX01PREUgfCAobW9kZSA8PA0KPiA+IE5WRERSX1RJTUlOR19NT0RFX1NISUZUKTsNCj4gPiAr CQltb2RlIHw9IE9ORklfREFUQV9JTlRFUkZBQ0VfTlZERFI7DQo+ID4gKwl9DQo+ID4gKwlmZWF0 dXJlWzBdID0gbW9kZTsNCj4gPiArCWNoaXAtPnNlbGVjdF9jaGlwKG10ZCwgYWNoaXAtPmNzbnVt KTsNCj4gPiArCWVyciA9IGNoaXAtPm9uZmlfc2V0X2ZlYXR1cmVzKG10ZCwgY2hpcCwNCj4gPiBP TkZJX0ZFQVRVUkVfQUREUl9USU1JTkdfTU9ERSwNCj4gPiArCQkodWludDhfdCAqKWZlYXR1cmUp Ow0KPiA+ICsJY2hpcC0+c2VsZWN0X2NoaXAobXRkLCAtMSk7DQo+ID4gKwlpZiAoZXJyKQ0KPiA+ ICsJCXJldHVybiBlcnI7DQo+IA0KPiBZb3Ugc2hvdWxkIGZvcmdldCBhbGwgdGhlIE5BTkQgY2hp cCByZWxhdGVkIGNvZGUgaGVyZSwgdGhlIGNvcmUgYWxyZWFkeSBoYW5kbGVzDQo+IGl0LCBhbmQg dGhlbiBjYWxscyAtPnNldHVwX2RhdGFfaW50ZXJmYWNlKCkgdG8gdHVuZSB0aW1pbmdzIG9uIHRo ZSBjb250cm9sbGVyIHNpZGUNCj4gb25seS4NClNpbmNlIGNvcmUgZG9lc24ndCBoYXZlIHN1cHBv cnQgZm9yIE5WRERSLCANCmVudW0gbmFuZF9kYXRhX2ludGVyZmFjZV90eXBlIHsNCglOQU5EX1NE Ul9JRkFDRSwNCn07DQp3ZSBhZGRlZCB0aGlzIGxvZ2ljIGluIHNldHVwX2RhdGFfaW50ZXJmYWNl LiBUbyBhY2hpZXZlIHRoZSBzYW1lDQpTbyB3aGF0IHdlIGFyZSBkb2luZyBoZXJlIGlzLCANCldo ZW4gY29yZSBjYWxscyBzZXR1cF9kYXRhX2ludGVyZmFjZSwgdGhlIGZsYXNoIGNoYW5nZXMgaXRz IG9wZXJhdGluZyBtb2RlIHRvIFNEUi4NCkFuZCB3aGVuIGZsYXNoIHN1cHBvcnRzIE5WRERSLCB3 ZSBhcmUgY2hhbmdpbmcgdGhlIA0KRmxhc2ggb3BlcmF0aW5nIG1vZGUgdG8gTlZERFIuDQpBbHNv IHRoZSBzZXR1cF9kYXRhX2ludGVyZmFjZSBjYWxsIHdpbGwgaGFwcGVuIGR1cmluZyBwcm9iZSB0 aW1lLCBhbmQgYXQgdGhpcyB0aW1lIHdlIGRvbid0IGhhdmUNClBhcmFtZXRlciBwYWdlIGluZm8s IGhlbmNlIEkgYWRkZWQgDQppZiAoIWNoaXAtPm9uZmlfdmVyc2lvbiB8fA0KCSAgICAhKGxlMTZf dG9fY3B1KGNoaXAtPm9uZmlfcGFyYW1zLm9wdF9jbWQpDQoJICAgICYgT05GSV9PUFRfQ01EX1NF VF9HRVRfRkVBVFVSRVMpKQ0KCQlyZXR1cm4gLUVJTlZBTDsNCj4gDQo+ID4gKwkvKg0KPiA+ICsJ ICogU0RSIHRpbWluZyBtb2RlcyAyLTUgd2lsbCBub3Qgd29yayBmb3IgdGhlIGFyYXNhbiBuYW5k DQo+ID4gd2hlbg0KPiA+ICsJICogZnJlcSA+IDkwIE1Ieiwgc28gcmVkdWNlIHRoZSBmcmVxIGlu IFNEUiBtb2RlcyAyLTUgdG8gPA0KPiA+IDkwTWh6DQo+ID4gKwkgKi8NCj4gPiArCWlmIChjaGFu Z2Vfc2RyX2Nsaykgew0KPiA+ICsJCWNsa19kaXNhYmxlX3VucHJlcGFyZShuZmMtPmNsa19zeXMp Ow0KPiA+ICsJCWVyciA9IGNsa19zZXRfcmF0ZShuZmMtPmNsa19zeXMsDQo+ID4gU0RSX01PREVf REVGTFRfRlJFUSk7DQo+ID4gKwkJaWYgKGVycikgew0KPiA+ICsJCQlkZXZfZXJyKG5mYy0+ZGV2 LCAiQ2FuJ3Qgc2V0IHRoZSBjbG9jaw0KPiA+IHJhdGVcbiIpOw0KPiA+ICsJCQlyZXR1cm4gZXJy Ow0KPiA+ICsJCX0NCj4gPiArCQllcnIgPSBjbGtfcHJlcGFyZV9lbmFibGUobmZjLT5jbGtfc3lz KTsNCj4gPiArCQlpZiAoZXJyKSB7DQo+ID4gKwkJCWRldl9lcnIobmZjLT5kZXYsICJVbmFibGUg dG8gZW5hYmxlIHN5cw0KPiA+IGNsb2NrLlxuIik7DQo+ID4gKwkJCWNsa19kaXNhYmxlX3VucHJl cGFyZShuZmMtPmNsa19zeXMpOw0KPiA+ICsJCQlyZXR1cm4gZXJyOw0KPiA+ICsJCX0NCj4gDQo+ IFlvdSBkbyB0aGlzIHR3aWNlIGFzIGl0IGlzIGFscmVhZHkgaGFuZGxlZCBpbiAtPnNldHVwX2Rh dGFfaW50ZXJmYWNlKCkuDQpZZXMsIHdlIGFkZGVkIGl0IHR3aWNlLCBvbmNlIHdoZW4gY29yZSBz ZW5kcyBTRFIgaW5mbw0KQW5kIHRoZSBzZWNvbmQsIGJlY2F1c2UgdGhlcmUgaXMgYSBIVyBidWcg aW4gY29udHJvbGxlciwgaS5lIFNEUiB0aW1pbmcgbW9kZXMgMi01IHdpbGwgbm90IHdvcmssIHdo ZW4gZnJlcSA+IDkwTUh6Lg0KSGVuY2Ugd2hlbiBGbGFzaCBvcGVyYXRlcyBhdCBTRFIgbW9kZXMg Mi01LCB3ZSBhcmUgY2hhbmdpbmcgdGhlIGNsb2NrIHJhdGUgdG8gYmVsb3cgOTBNSHoNCj4gDQo+ ID4gKwl9DQo+ID4gKwlhY2hpcC0+aW5mdGltZXZhbCA9IGluZnRpbWV2YWw7DQo+ID4gKwlpZiAo bW9kZSAmIE9ORklfREFUQV9JTlRFUkZBQ0VfTlZERFIpDQo+ID4gKwkJYWNoaXAtPnNwa3RzaXpl ID0gTlZERFJfTU9ERV9QQUNLRVRfU0laRTsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+IA0K PiBJIGRvbid0IHRoaW5rIHRoaXMgc2hvdWxkIGJlIGluIGEgc2VwYXJhdGUgZnVuY3Rpb24gYW5k IGluc3RlYWQgc2hvdWxkIGJlIGluIC0NCj4gPnNldHVwX2RhdGFfaW50ZXJmYWNlKCkuDQpZZXMs IHdlIGNhbiBkbyBpdCBpbiBzaW5nbGUgZnVuY3Rpb24sIGJ1dCBhcyBtZW50aW9uZWQgaW4gY29t bWVudHMsIHdlIGFkZGVkIHRoaXMgZXh0cmFfaW5pdCgpLg0KPiANCj4gPiArDQo+ID4gK3N0YXRp YyBpbnQgYW5mY19lY2NfaW5pdChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwNCj4gPiArCQkJIHN0cnVj dCBuYW5kX2VjY19jdHJsICplY2MpDQo+ID4gK3sNCj4gPiArCXUzMiBlY2NfYWRkcjsNCj4gPiAr CXVuc2lnbmVkIGludCBiY2htb2RlLCBzdGVwczsNCj4gPiArCXN0cnVjdCBuYW5kX2NoaXAgKmNo aXAgPSBtdGRfdG9fbmFuZChtdGQpOw0KPiA+ICsJc3RydWN0IGFuZmNfbmFuZF9jaGlwICphY2hp cCA9IHRvX2FuZmNfbmFuZChjaGlwKTsNCj4gPiArDQo+ID4gKwllY2MtPm1vZGUgPSBOQU5EX0VD Q19IVzsNCj4gPiArCWVjYy0+cmVhZF9wYWdlID0gYW5mY19yZWFkX3BhZ2VfaHdlY2M7DQo+ID4g KwllY2MtPndyaXRlX3BhZ2UgPSBhbmZjX3dyaXRlX3BhZ2VfaHdlY2M7DQo+ID4gKwllY2MtPndy aXRlX29vYiA9IGFuZmNfd3JpdGVfb29iOw0KPiA+ICsJbXRkX3NldF9vb2JsYXlvdXQobXRkLCAm YW5mY19vb2JsYXlvdXRfb3BzKTsNCj4gPiArDQo+ID4gKwlzdGVwcyA9IG10ZC0+d3JpdGVzaXpl IC8gY2hpcC0+ZWNjX3N0ZXBfZHM7DQo+ID4gKw0KPiA+ICsJc3dpdGNoIChjaGlwLT5lY2Nfc3Ry ZW5ndGhfZHMpIHsNCj4gPiArCWNhc2UgMTI6DQo+ID4gKwkJYmNobW9kZSA9IDB4MTsNCj4gPiAr CQlicmVhazsNCj4gPiArCWNhc2UgODoNCj4gPiArCQliY2htb2RlID0gMHgyOw0KPiA+ICsJCWJy ZWFrOw0KPiA+ICsJY2FzZSA0Og0KPiA+ICsJCWJjaG1vZGUgPSAweDM7DQo+ID4gKwkJYnJlYWs7 DQo+ID4gKwljYXNlIDI0Og0KPiA+ICsJCWJjaG1vZGUgPSAweDQ7DQo+ID4gKwkJYnJlYWs7DQo+ ID4gKwlkZWZhdWx0Og0KPiA+ICsJCWJjaG1vZGUgPSAweDA7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ ICsJaWYgKCFiY2htb2RlKQ0KPiA+ICsJCWVjYy0+dG90YWwgPSAzICogc3RlcHM7DQo+ID4gKwll bHNlDQo+ID4gKwkJZWNjLT50b3RhbCA9DQo+ID4gKwkJICAgICBESVZfUk9VTkRfVVAoZmxzKDgg KiBjaGlwLT5lY2Nfc3RlcF9kcykgKg0KPiA+ICsJCQkgY2hpcC0+ZWNjX3N0cmVuZ3RoX2RzICog c3RlcHMsIDgpOw0KPiA+ICsNCj4gPiArCWVjYy0+c3RyZW5ndGggPSBjaGlwLT5lY2Nfc3RyZW5n dGhfZHM7DQo+ID4gKwllY2MtPnNpemUgPSBjaGlwLT5lY2Nfc3RlcF9kczsNCj4gPiArCWVjYy0+ Ynl0ZXMgPSBlY2MtPnRvdGFsIC8gc3RlcHM7DQo+ID4gKwllY2MtPnN0ZXBzID0gc3RlcHM7DQo+ ID4gKwlhY2hpcC0+YmNobW9kZSA9IGJjaG1vZGU7DQo+ID4gKwlhY2hpcC0+YmNoID0gYWNoaXAt PmJjaG1vZGU7DQo+ID4gKwllY2NfYWRkciA9IG10ZC0+d3JpdGVzaXplICsgKG10ZC0+b29ic2l6 ZSAtIGVjYy0+dG90YWwpOw0KPiA+ICsNCj4gPiArCWFjaGlwLT5lY2N2YWwgPSBlY2NfYWRkciB8 IChlY2MtPnRvdGFsIDw8IEVDQ19TSVpFX1NISUZUKSB8DQo+ID4gKwkJCShhY2hpcC0+YmNoIDw8 IEJDSF9FTl9TSElGVCk7DQo+ID4gKw0KPiA+ICsJaWYgKGNoaXAtPmVjY19zdGVwX2RzID49IDEw MjQpDQo+ID4gKwkJYWNoaXAtPnBrdHNpemUgPSAxMDI0Ow0KPiA+ICsJZWxzZQ0KPiA+ICsJCWFj aGlwLT5wa3RzaXplID0gNTEyOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgdm9pZCBhbmZjX2NtZF9mdW5jdGlvbihzdHJ1Y3QgbXRkX2luZm8gKm10 ZCwNCj4gPiArCQkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgaW50IGNvbHVtbiwgaW50DQo+ID4g cGFnZV9hZGRyKSArew0KPiA+ICsJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZF90b19uYW5k KG10ZCk7DQo+ID4gKwlzdHJ1Y3QgYW5mY19uYW5kX2NoaXAgKmFjaGlwID0gdG9fYW5mY19uYW5k KGNoaXApOw0KPiA+ICsJc3RydWN0IGFuZmMgKm5mYyA9IHRvX2FuZmMoY2hpcC0+Y29udHJvbGxl cik7DQo+ID4gKwlib29sIHdhaXQgPSBmYWxzZTsNCj4gPiArCXUzMiBhZGRyY3ljbGVzLCBwcm9n Ow0KPiA+ICsNCj4gPiArCW5mYy0+YnVmc2hpZnQgPSAwOw0KPiA+ICsJbmZjLT5jdXJyX2NtZCA9 IGNtZDsNCj4gPiArDQo+ID4gKwlpZiAocGFnZV9hZGRyID09IC0xKQ0KPiA+ICsJCXBhZ2VfYWRk ciA9IDA7DQo+ID4gKwlpZiAoY29sdW1uID09IC0xKQ0KPiA+ICsJCWNvbHVtbiA9IDA7DQo+ID4g Kw0KPiA+ICsJc3dpdGNoIChjbWQpIHsNCj4gPiArCWNhc2UgTkFORF9DTURfUkVTRVQ6DQo+ID4g KwkJYW5mY19wcmVwYXJlX2NtZChuZmMsIGNtZCwgMCwgMCwgMCwgMCk7DQo+ID4gKwkJcHJvZyA9 IFBST0dfUlNUOw0KPiA+ICsJCXdhaXQgPSB0cnVlOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2Fz ZSBOQU5EX0NNRF9TRVFJTjoNCj4gPiArCQlhZGRyY3ljbGVzID0gYWNoaXAtPnJhZGRyX2N5Y2xl cyArDQo+ID4gYWNoaXAtPmNhZGRyX2N5Y2xlczsNCj4gPiArCQlhbmZjX3ByZXBhcmVfY21kKG5m YywgY21kLCBOQU5EX0NNRF9QQUdFUFJPRywgMSwNCj4gPiArCQkJCSBtdGQtPndyaXRlc2l6ZSwg YWRkcmN5Y2xlcyk7DQo+ID4gKwkJYW5mY19zZXRwYWdlY29sYWRkcihuZmMsIHBhZ2VfYWRkciwg Y29sdW1uKTsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgTkFORF9DTURfUkVBRE9PQjoNCj4g PiArCQljb2x1bW4gKz0gbXRkLT53cml0ZXNpemU7DQo+ID4gKwljYXNlIE5BTkRfQ01EX1JFQUQw Og0KPiA+ICsJY2FzZSBOQU5EX0NNRF9SRUFEMToNCj4gPiArCQlhZGRyY3ljbGVzID0gYWNoaXAt PnJhZGRyX2N5Y2xlcyArDQo+ID4gYWNoaXAtPmNhZGRyX2N5Y2xlczsNCj4gPiArCQlhbmZjX3By ZXBhcmVfY21kKG5mYywgTkFORF9DTURfUkVBRDAsDQo+ID4gTkFORF9DTURfUkVBRFNUQVJULCAx LA0KPiA+ICsJCQkJIG10ZC0+d3JpdGVzaXplLCBhZGRyY3ljbGVzKTsNCj4gPiArCQlhbmZjX3Nl dHBhZ2Vjb2xhZGRyKG5mYywgcGFnZV9hZGRyLCBjb2x1bW4pOw0KPiA+ICsJCWJyZWFrOw0KPiA+ ICsJY2FzZSBOQU5EX0NNRF9STkRPVVQ6DQo+ID4gKwkJYW5mY19wcmVwYXJlX2NtZChuZmMsIGNt ZCwgTkFORF9DTURfUk5ET1VUU1RBUlQsIDEsDQo+ID4gKwkJCQkgbXRkLT53cml0ZXNpemUsIDIp Ow0KPiA+ICsJCWFuZmNfc2V0cGFnZWNvbGFkZHIobmZjLCBwYWdlX2FkZHIsIGNvbHVtbik7DQo+ ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIE5BTkRfQ01EX1BBUkFNOg0KPiA+ICsJCWFuZmNfcHJl cGFyZV9jbWQobmZjLCBjbWQsIDAsIDAsIDAsIDEpOw0KPiA+ICsJCWFuZmNfc2V0cGFnZWNvbGFk ZHIobmZjLCBwYWdlX2FkZHIsIGNvbHVtbik7DQo+ID4gKwkJYW5mY19yd19idWZfcGlvKG10ZCwg bmZjLT5idWYsDQo+ID4gKwkJCQkoNCAqIHNpemVvZihzdHJ1Y3QNCj4gPiBuYW5kX29uZmlfcGFy YW1zKSksDQo+ID4gKwkJCQkxLCBQUk9HX1JEUEFSQU0pOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJ Y2FzZSBOQU5EX0NNRF9SRUFESUQ6DQo+ID4gKwkJYW5mY19wcmVwYXJlX2NtZChuZmMsIGNtZCwg MCwgMCwgMCwgMSk7DQo+ID4gKwkJYW5mY19zZXRwYWdlY29sYWRkcihuZmMsIHBhZ2VfYWRkciwg Y29sdW1uKTsNCj4gPiArCQlhbmZjX3J3X2J1Zl9waW8obXRkLCBuZmMtPmJ1ZiwgT05GSV9JRF9M RU4sIDEsDQo+ID4gUFJPR19SRElEKTsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgTkFORF9D TURfRVJBU0UxOg0KPiA+ICsJCWFkZHJjeWNsZXMgPSBhY2hpcC0+cmFkZHJfY3ljbGVzOw0KPiA+ ICsJCXByb2cgPSBQUk9HX0VSQVNFOw0KPiA+ICsJCWFuZmNfcHJlcGFyZV9jbWQobmZjLCBjbWQs IE5BTkRfQ01EX0VSQVNFMiwgMCwgMCwNCj4gPiBhZGRyY3ljbGVzKTsNCj4gPiArCQljb2x1bW4g PSBwYWdlX2FkZHIgJiAweGZmZmY7DQo+ID4gKwkJcGFnZV9hZGRyID0gKHBhZ2VfYWRkciA+PiBQ R19BRERSX1NISUZUKSAmIDB4ZmZmZjsNCj4gPiArCQlhbmZjX3NldHBhZ2Vjb2xhZGRyKG5mYywg cGFnZV9hZGRyLCBjb2x1bW4pOw0KPiA+ICsJCXdhaXQgPSB0cnVlOw0KPiA+ICsJCWJyZWFrOw0K PiA+ICsJY2FzZSBOQU5EX0NNRF9TVEFUVVM6DQo+ID4gKwkJYW5mY19wcmVwYXJlX2NtZChuZmMs IGNtZCwgMCwgMCwgMCwgMCk7DQo+ID4gKwkJYW5mY19zZXRwa3RzemNudChuZmMsIGFjaGlwLT5z cGt0c2l6ZSAvIDQsIDEpOw0KPiA+ICsJCWFuZmNfc2V0cGFnZWNvbGFkZHIobmZjLCBwYWdlX2Fk ZHIsIGNvbHVtbik7DQo+ID4gKwkJcHJvZyA9IFBST0dfU1RBVFVTOw0KPiA+ICsJCXdhaXQgPSB0 cnVlOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBOQU5EX0NNRF9HRVRfRkVBVFVSRVM6DQo+ ID4gKwkJYW5mY19wcmVwYXJlX2NtZChuZmMsIGNtZCwgMCwgMCwgMCwgMSk7DQo+ID4gKwkJYW5m Y19zZXRwYWdlY29sYWRkcihuZmMsIHBhZ2VfYWRkciwgY29sdW1uKTsNCj4gPiArCQlhbmZjX3J3 X2J1Zl9waW8obXRkLCBuZmMtPmJ1ZiwgYWNoaXAtPnNwa3RzaXplLCAxLA0KPiA+ICsJCQkJUFJP R19HRVRfRkVBVFVSRSk7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIE5BTkRfQ01EX1NFVF9G RUFUVVJFUzoNCj4gPiArCQlhbmZjX3ByZXBhcmVfY21kKG5mYywgY21kLCAwLCAwLCAwLCAxKTsN Cj4gPiArCQlhbmZjX3NldHBhZ2Vjb2xhZGRyKG5mYywgcGFnZV9hZGRyLCBjb2x1bW4pOw0KPiA+ ICsJCWJyZWFrOw0KPiA+ICsJZGVmYXVsdDoNCj4gPiArCQlyZXR1cm47DQo+ID4gKwl9DQo+ID4g Kw0KPiA+ICsJaWYgKHdhaXQpIHsNCj4gPiArCQlhbmZjX2VuYWJsZV9pbnRycyhuZmMsIFhGRVJf Q09NUExFVEUpOw0KPiA+ICsJCXdyaXRlbChwcm9nLCBuZmMtPmJhc2UgKyBQUk9HX09GU1QpOw0K PiA+ICsJCWFuZmNfd2FpdF9mb3JfZXZlbnQobmZjKTsNCj4gPiArCX0NCj4gPiArCWlmIChuZmMt PmN1cnJfY21kID09IE5BTkRfQ01EX1NUQVRVUykNCj4gPiArCQluZmMtPnN0YXR1cyA9IHJlYWRs KG5mYy0+YmFzZSArIEZMQVNIX1NUU19PRlNUKTsgfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQg YW5mY19zZWxlY3RfY2hpcChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IG51bSkgew0KPiA+ICsJ dTMyIHZhbDsNCj4gPiArCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGRfdG9fbmFuZChtdGQp Ow0KPiA+ICsJc3RydWN0IGFuZmNfbmFuZF9jaGlwICphY2hpcCA9IHRvX2FuZmNfbmFuZChjaGlw KTsNCj4gPiArCXN0cnVjdCBhbmZjICpuZmMgPSB0b19hbmZjKGNoaXAtPmNvbnRyb2xsZXIpOw0K PiA+ICsNCj4gPiArCWlmIChudW0gPT0gLTEpDQo+ID4gKwkJcmV0dXJuOw0KPiA+ICsNCj4gPiAr CXZhbCA9IHJlYWRsKG5mYy0+YmFzZSArIE1FTV9BRERSMl9PRlNUKTsNCj4gPiArCXZhbCAmPSAo dmFsICYgfihDU19NQVNLIHwgQkNIX01PREVfTUFTSykpOw0KPiA+ICsJdmFsIHw9IChhY2hpcC0+ Y3NudW0gPDwgQ1NfU0hJRlQpIHwgKGFjaGlwLT5iY2htb2RlIDw8DQo+ID4gQkNIX01PREVfU0hJ RlQpOw0KPiA+ICsJd3JpdGVsKHZhbCwgbmZjLT5iYXNlICsgTUVNX0FERFIyX09GU1QpOw0KPiA+ ICsJbmZjLT5jc251bSA9IGFjaGlwLT5jc251bTsNCj4gPiArCXdyaXRlbChhY2hpcC0+ZWNjdmFs LCBuZmMtPmJhc2UgKyBFQ0NfT0ZTVCk7DQo+ID4gKwl3cml0ZWwoYWNoaXAtPmluZnRpbWV2YWws IG5mYy0+YmFzZSArIERBVEFfSU5URVJGQUNFX09GU1QpOyB9DQo+ID4gKw0KPiA+ICtzdGF0aWMg aXJxcmV0dXJuX3QgYW5mY19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpwdHIpIHsNCj4gPiAr CXN0cnVjdCBhbmZjICpuZmMgPSBwdHI7DQo+ID4gKwl1MzIgc3RhdHVzOw0KPiA+ICsNCj4gPiAr CXN0YXR1cyA9IHJlYWRsKG5mYy0+YmFzZSArIElOVFJfU1RTX09GU1QpOw0KPiA+ICsJaWYgKHN0 YXR1cyAmIEVWRU5UX01BU0spIHsNCj4gPiArCQljb21wbGV0ZSgmbmZjLT5ldmVudCk7DQo+ID4g KwkJd3JpdGVsKChzdGF0dXMgJiBFVkVOVF9NQVNLKSwgbmZjLT5iYXNlICsNCj4gPiBJTlRSX1NU U19PRlNUKTsNCj4gPiArCQl3cml0ZWwoMCwgbmZjLT5iYXNlICsgSU5UUl9TVFNfRU5fT0ZTVCk7 DQo+ID4gKwkJd3JpdGVsKDAsIG5mYy0+YmFzZSArIElOVFJfU0lHX0VOX09GU1QpOw0KPiA+ICsJ CXJldHVybiBJUlFfSEFORExFRDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gSVJRX05P TkU7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgYW5mY19vbmZpX3NldF9mZWF0dXJl cyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0DQo+ID4gbmFuZF9jaGlwICpjaGlwLA0KPiA+ ICsJCQkJICBpbnQgYWRkciwgdWludDhfdA0KPiA+ICpzdWJmZWF0dXJlX3BhcmFtKSArew0KPiA+ ICsJc3RydWN0IGFuZmNfbmFuZF9jaGlwICphY2hpcCA9IHRvX2FuZmNfbmFuZChjaGlwKTsNCj4g PiArCWludCBzdGF0dXM7DQo+ID4gKw0KPiA+ICsJaWYgKCFjaGlwLT5vbmZpX3ZlcnNpb24pDQo+ ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsJaWYgKCEobGUxNl90b19jcHUoY2hp cC0+b25maV9wYXJhbXMub3B0X2NtZCkgJg0KPiA+ICsJCU9ORklfT1BUX0NNRF9TRVRfR0VUX0ZF QVRVUkVTKSkNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwljaGlwLT5jbWRm dW5jKG10ZCwgTkFORF9DTURfU0VUX0ZFQVRVUkVTLCBhZGRyLCAtMSk7DQo+ID4gKwlhbmZjX3J3 X2J1Zl9waW8obXRkLCBzdWJmZWF0dXJlX3BhcmFtLCBhY2hpcC0+c3BrdHNpemUsDQo+ID4gKwkJ CTAsIFBST0dfU0VUX0ZFQVRVUkUpOw0KPiA+ICsJc3RhdHVzID0gY2hpcC0+d2FpdGZ1bmMobXRk LCBjaGlwKTsNCj4gPiArCWlmIChzdGF0dXMgJiBOQU5EX1NUQVRVU19GQUlMKQ0KPiA+ICsJCXJl dHVybiAtRUlPOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+IA0KPiBBcmUgeW91 IHN1cmUgdGhpcyBmdW5jdGlvbiBpcyBuZWVkZWQ/IElmIHllcyBjYW4geW91IGFkZCBhIGNvbW1l bnQgdG8gZXhwbGFpbg0KPiB3aHk/IE90aGVyd2lzZSBJIHRoaW5rIHRoZSBjb3JlIGFscmVhZHkg aGFuZGxlcyB0aGF0IGtpbmQgb2YgbG9naWMuDQpXZSBhZGRlZCB0aGlzIHRvIHNldC9nZXQgZmVh dHVyZXMgb2Ygb24tZGllIEVDQy4gQXQgdGhlIHRpbWUgb2YgYWRkaW5nIHRoaXMsIGNvcmUgZG9l c27igJl0IGhhdmUgc3VwcG9ydA0KRm9yIHRoaXMuIEkgd2lsbCByZW1vdmUgaXQgbm93LCBzaW5j ZSBtaWNyb24gb24tZGllIGVjYyBkcml2ZXIgaXMgdGhlcmUuDQo+IA0KPiA+ICsNCj4gPiArc3Rh dGljIGludCBhbmZjX3NldHVwX2RhdGFfaW50ZXJmYWNlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBp bnQNCj4gPiBjc2xpbmUsDQo+ID4gKwkJCQkgICAgIGNvbnN0IHN0cnVjdA0KPiA+IG5hbmRfZGF0 YV9pbnRlcmZhY2UgKmNvbmYpICt7DQo+ID4gKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRk X3RvX25hbmQobXRkKTsNCj4gPiArCXN0cnVjdCBhbmZjICpuZmMgPSB0b19hbmZjKGNoaXAtPmNv bnRyb2xsZXIpOw0KPiA+ICsJaW50IGVycjsNCj4gPiArCXN0cnVjdCBhbmZjX25hbmRfY2hpcCAq YWNoaXAgPSB0b19hbmZjX25hbmQoY2hpcCk7DQo+ID4gKw0KPiA+ICsJaWYgKGNzbGluZSA9PSBO QU5EX0RBVEFfSUZBQ0VfQ0hFQ0tfT05MWSkNCj4gPiArCQlyZXR1cm4gMDsNCj4gPiArDQo+ID4g KwljbGtfZGlzYWJsZV91bnByZXBhcmUobmZjLT5jbGtfc3lzKTsNCj4gPiArCWVyciA9IGNsa19z ZXRfcmF0ZShuZmMtPmNsa19zeXMsIFNEUl9NT0RFX0RFRkxUX0ZSRVEpOw0KPiA+ICsJaWYgKGVy cikgew0KPiA+ICsJCWRldl9lcnIobmZjLT5kZXYsICJDYW4ndCBzZXQgdGhlIGNsb2NrIHJhdGVc biIpOw0KPiA+ICsJCXJldHVybiBlcnI7DQo+ID4gKwl9DQo+ID4gKwllcnIgPSBjbGtfcHJlcGFy ZV9lbmFibGUobmZjLT5jbGtfc3lzKTsNCj4gPiArCWlmIChlcnIpIHsNCj4gPiArCQlkZXZfZXJy KG5mYy0+ZGV2LCAiVW5hYmxlIHRvIGVuYWJsZSBzeXMgY2xvY2suXG4iKTsNCj4gPiArCQljbGtf ZGlzYWJsZV91bnByZXBhcmUobmZjLT5jbGtfc3lzKTsNCj4gPiArCQlyZXR1cm4gZXJyOw0KPiA+ ICsJfQ0KPiA+ICsJYWNoaXAtPmluZnRpbWV2YWwgPSAwOw0KPiA+ICsJYW5mY19leHRyYV9pbml0 KG5mYywgYWNoaXApOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtzdGF0aWMgaW50IGFuZmNfbmFuZF9jaGlwX2luaXQoc3RydWN0IGFuZmMgKm5mYywNCj4gPiAr CQkJICAgICAgIHN0cnVjdCBhbmZjX25hbmRfY2hpcCAqYW5hbmRfY2hpcCwNCj4gPiArCQkJICAg ICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBuYW5kX2No aXAgKmNoaXAgPSAmYW5hbmRfY2hpcC0+Y2hpcDsNCj4gPiArCXN0cnVjdCBtdGRfaW5mbyAqbXRk ID0gbmFuZF90b19tdGQoY2hpcCk7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCXJldCA9 IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAicmVnIiwgJmFuYW5kX2NoaXAtPmNzbnVtKTsNCj4g PiArCWlmIChyZXQpIHsNCj4gPiArCQlkZXZfZXJyKG5mYy0+ZGV2LCAiY2FuJ3QgZ2V0IGNoaXAt c2VsZWN0XG4iKTsNCj4gPiArCQlyZXR1cm4gLUVOWElPOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAr CW10ZC0+bmFtZSA9IGRldm1fa2FzcHJpbnRmKG5mYy0+ZGV2LCBHRlBfS0VSTkVMLA0KPiA+ICJh cmFzYW5fbmFuZC4lZCIsDQo+ID4gKwkJCQkgICBhbmFuZF9jaGlwLT5jc251bSk7DQo+ID4gKwlt dGQtPmRldi5wYXJlbnQgPSBuZmMtPmRldjsNCj4gPiArDQo+ID4gKwljaGlwLT5jbWRmdW5jID0g YW5mY19jbWRfZnVuY3Rpb247DQo+ID4gKwljaGlwLT5jaGlwX2RlbGF5ID0gMzA7DQo+ID4gKwlj aGlwLT5jb250cm9sbGVyID0gJm5mYy0+Y29udHJvbGxlcjsNCj4gPiArCWNoaXAtPnJlYWRfYnVm ID0gYW5mY19yZWFkX2J1ZjsNCj4gPiArCWNoaXAtPndyaXRlX2J1ZiA9IGFuZmNfd3JpdGVfYnVm Ow0KPiA+ICsJY2hpcC0+cmVhZF9ieXRlID0gYW5mY19yZWFkX2J5dGU7DQo+ID4gKwljaGlwLT5v cHRpb25zID0gTkFORF9CVVNXSURUSF9BVVRPIHwNCj4gTkFORF9OT19TVUJQQUdFX1dSSVRFOw0K PiA+ICsJY2hpcC0+YmJ0X29wdGlvbnMgPSBOQU5EX0JCVF9VU0VfRkxBU0g7DQo+ID4gKwljaGlw LT5zZWxlY3RfY2hpcCA9IGFuZmNfc2VsZWN0X2NoaXA7DQo+ID4gKwljaGlwLT5vbmZpX3NldF9m ZWF0dXJlcyA9IGFuZmNfb25maV9zZXRfZmVhdHVyZXM7DQo+ID4gKwljaGlwLT5zZXR1cF9kYXRh X2ludGVyZmFjZSA9IGFuZmNfc2V0dXBfZGF0YV9pbnRlcmZhY2U7DQo+ID4gKwluYW5kX3NldF9m bGFzaF9ub2RlKGNoaXAsIG5wKTsNCj4gPiArDQo+ID4gKwlhbmFuZF9jaGlwLT5zcGt0c2l6ZSA9 IFNEUl9NT0RFX1BBQ0tFVF9TSVpFOw0KPiA+ICsJcmV0ID0gbmFuZF9zY2FuX2lkZW50KG10ZCwg MSwgTlVMTCk7DQo+ID4gKwlpZiAocmV0KSB7DQo+ID4gKwkJZGV2X2VycihuZmMtPmRldiwgIm5h bmRfc2Nhbl9pZGVudCBmb3IgTkFORA0KPiA+IGZhaWxlZFxuIik7DQo+ID4gKwkJcmV0dXJuIHJl dDsNCj4gPiArCX0NCj4gPiArCWlmIChjaGlwLT5vbmZpX3ZlcnNpb24pIHsNCj4gPiArCQlhbmFu ZF9jaGlwLT5yYWRkcl9jeWNsZXMgPQ0KPiA+IGNoaXAtPm9uZmlfcGFyYW1zLmFkZHJfY3ljbGVz ICYgMHhmOw0KPiA+ICsJCWFuYW5kX2NoaXAtPmNhZGRyX2N5Y2xlcyA9DQo+ID4gKwkJCQkoY2hp cC0+b25maV9wYXJhbXMuYWRkcl9jeWNsZXMgPj4gNCkNCj4gPiAmIDB4ZjsNCj4gPiArCX0gZWxz ZSB7DQo+ID4gKwkJLyogRm9yIG5vbi1PTkZJIGRldmljZXMsIGNvbmZpZ3VyaW5nIHRoZSBhZGRy ZXNzDQo+ID4gY3lsZXMgYXMgNSAqLw0KPiA+ICsJCWFuYW5kX2NoaXAtPnJhZGRyX2N5Y2xlcyA9 IDM7DQo+ID4gKwkJYW5hbmRfY2hpcC0+Y2FkZHJfY3ljbGVzID0gMjsNCj4gPiArCX0NCj4gDQo+ IEkgdGhpbmsgeW91IHNob3VsZCByZW1vdmUgdGhpcyBibG9jayBhbmQgaW5zdGVhZCBkZWNpZGUg aG93IG1hbnkgY3ljbGVzIHlvdQ0KPiB3aWxsIG5lZWQgZGVwZW5kaW5nIG9uICJjaGlwLT5vcHRp b25zICYgTkFORF9ST1dfQUREUl8zIi4NCklmIGNoaXAgc3VwcG9ydHMgT05GSSwgdGhlbiB3ZSBh cmUgcmVhZGluZyBhZGRyIGN5Y2xlcyBmcm9tIHBhcmFtZXRlciBwYWdlLCBpZiBub3QgDQpXZSBh cmUgc2V0dGluZyB3aXRoIGRlZmF1bHQgdmFsdWVzLg0KSSBhbSBub3QgY2hlY2tpbmcgdGhlIHNp emVzIGhlcmUsIGluc3RlYWQgcmVhZGluZyBpdCBmcm9tIHBhcmFtZXRlciBwYWdlLg0KSSBkaWRu J3QgZ2V0IHlvdXIgY29tbWVudCwgY2FuIHlvdSBwbGVhc2UgYnJpZWYgaXQ/DQpJIHNhdyB0aGUg cGF0Y2ggaHR0cHM6Ly9wYXRjaHdvcmsua2VybmVsLm9yZy9wYXRjaC85OTUwMzc3Ly4NClRoZXNl IGFyZSBiYXNlZCBvbiBzaXplcywgYW5kIGN5Y2xlcyBhcmUgZ2V0dGluZyB1cGRhdGVkIHVzaW5n ICIgTkFORF9ST1dfQUREUl8zIg0KQnV0IHRoZSBjYXNlIGhlcmUgaXMgSSBhbSBzZXR0aW5nIHNv bWUgZGVmYXVsdCB2YWx1ZXMgaWYgbm90IE9ORkkuIA0KPiANCj4gPiArDQo+ID4gKwlyZXQgPSBh bmZjX2VjY19pbml0KG10ZCwgJmNoaXAtPmVjYyk7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCXJl dHVybiByZXQ7DQo+ID4gKw0KPiANCj4gU2hvdWxkbid0IHRoZSBjb250cm9sbGVyIHNldCBtdGQt Pm5hbWUgaGVyZSBpZiBlbXB0eT8NClllcywgZHJpdmVyIGlzIG5vdCBzZXR0aW5nIHRoZSBuYW1l IGlmIGVtcHR5Lg0KSSB3aWxsIGFkZCB0aGlzIGluIG5leHQgdmVyc2lvbiBvZiBwYXRjaC4NCj4g DQo+ID4gKwlyZXQgPSBuYW5kX3NjYW5fdGFpbChtdGQpOw0KPiA+ICsJaWYgKHJldCkgew0KPiA+ ICsJCWRldl9lcnIobmZjLT5kZXYsICJuYW5kX3NjYW5fdGFpbCBmb3IgTkFORA0KPiA+IGZhaWxl ZFxuIik7DQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4g bXRkX2RldmljZV9yZWdpc3RlcihtdGQsIE5VTEwsIDApOyB9DQo+ID4gKw0KPiA+ICtzdGF0aWMg aW50IGFuZmNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikgew0KPiA+ICsJc3Ry dWN0IGFuZmMgKm5mYzsNCj4gPiArCXN0cnVjdCBhbmZjX25hbmRfY2hpcCAqYW5hbmRfY2hpcDsN Cj4gPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGV2LT5kZXYub2Zfbm9kZSwgKmNoaWxk Ow0KPiA+ICsJc3RydWN0IHJlc291cmNlICpyZXM7DQo+ID4gKwlpbnQgZXJyOw0KPiA+ICsNCj4g PiArCW5mYyA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKm5mYyksIEdGUF9LRVJO RUwpOw0KPiA+ICsJaWYgKCFuZmMpDQo+ID4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ID4gKw0KPiA+ ICsJaW5pdF93YWl0cXVldWVfaGVhZCgmbmZjLT5jb250cm9sbGVyLndxKTsNCj4gPiArCUlOSVRf TElTVF9IRUFEKCZuZmMtPmNoaXBzKTsNCj4gPiArCWluaXRfY29tcGxldGlvbigmbmZjLT5ldmVu dCk7DQo+ID4gKwluZmMtPmRldiA9ICZwZGV2LT5kZXY7DQo+ID4gKwlwbGF0Zm9ybV9zZXRfZHJ2 ZGF0YShwZGV2LCBuZmMpOw0KPiA+ICsJbmZjLT5jc251bSA9IC0xOw0KPiA+ICsNCj4gPiArCXJl cyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7DQo+ID4g KwluZmMtPmJhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsNCj4g PiArCWlmIChJU19FUlIobmZjLT5iYXNlKSkNCj4gPiArCQlyZXR1cm4gUFRSX0VSUihuZmMtPmJh c2UpOw0KPiA+ICsJbmZjLT5kbWEgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wocGRldi0+ZGV2Lm9m X25vZGUsDQo+ID4gKwkJCQkJICJhcmFzYW4saGFzLW1kbWEiKTsNCj4gPiArCW5mYy0+aXJxID0g cGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsNCj4gPiArCWlmIChuZmMtPmlycSA8IDApIHsNCj4g PiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwbGF0Zm9ybV9nZXRfaXJxIGZhaWxlZFxuIik7DQo+ ID4gKwkJcmV0dXJuIC1FTlhJTzsNCj4gPiArCX0NCj4gPiArCWRtYV9zZXRfbWFzaygmcGRldi0+ ZGV2LCBETUFfQklUX01BU0soNjQpKTsNCj4gPiArCWVyciA9IGRldm1fcmVxdWVzdF9pcnEoJnBk ZXYtPmRldiwgbmZjLT5pcnEsDQo+ID4gYW5mY19pcnFfaGFuZGxlciwNCj4gPiArCQkJICAgICAg IDAsICJhcmFzYW5uZmMiLCBuZmMpOw0KPiA+ICsJaWYgKGVycikNCj4gPiArCQlyZXR1cm4gZXJy Ow0KPiA+ICsJbmZjLT5jbGtfc3lzID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJzeXMiKTsN Cj4gPiArCWlmIChJU19FUlIobmZjLT5jbGtfc3lzKSkgew0KPiA+ICsJCWRldl9lcnIoJnBkZXYt PmRldiwgInN5cyBjbG9jayBub3QgZm91bmQuXG4iKTsNCj4gPiArCQlyZXR1cm4gUFRSX0VSUihu ZmMtPmNsa19zeXMpOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCW5mYy0+Y2xrX2ZsYXNoID0gZGV2 bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJmbGFzaCIpOw0KPiA+ICsJaWYgKElTX0VSUihuZmMtPmNs a19mbGFzaCkpIHsNCj4gPiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmbGFzaCBjbG9jayBub3Qg Zm91bmQuXG4iKTsNCj4gPiArCQlyZXR1cm4gUFRSX0VSUihuZmMtPmNsa19mbGFzaCk7DQo+ID4g Kwl9DQo+ID4gKw0KPiA+ICsJZXJyID0gY2xrX3ByZXBhcmVfZW5hYmxlKG5mYy0+Y2xrX3N5cyk7 DQo+ID4gKwlpZiAoZXJyKSB7DQo+ID4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRv IGVuYWJsZSBzeXMgY2xvY2suXG4iKTsNCj4gPiArCQlyZXR1cm4gZXJyOw0KPiA+ICsJfQ0KPiA+ ICsNCj4gPiArCWVyciA9IGNsa19wcmVwYXJlX2VuYWJsZShuZmMtPmNsa19mbGFzaCk7DQo+ID4g KwlpZiAoZXJyKSB7DQo+ID4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIGVuYWJs ZSBmbGFzaA0KPiA+IGNsb2NrLlxuIik7DQo+ID4gKwkJZ290byBjbGtfZGlzX3N5czsNCj4gPiAr CX0NCj4gPiArDQo+ID4gKwlmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZShucCwgY2hp bGQpIHsNCj4gPiArCQlhbmFuZF9jaGlwID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsDQo+ID4g c2l6ZW9mKCphbmFuZF9jaGlwKSwNCj4gPiArCQkJCQkgIEdGUF9LRVJORUwpOw0KPiA+ICsJCWlm ICghYW5hbmRfY2hpcCkgew0KPiA+ICsJCQlvZl9ub2RlX3B1dChjaGlsZCk7DQo+ID4gKwkJCWVy ciA9IC1FTk9NRU07DQo+ID4gKwkJCWdvdG8gbmFuZGNoaXBfY2xlYW5fdXA7DQo+ID4gKwkJfQ0K PiA+ICsNCj4gPiArCQllcnIgPSBhbmZjX25hbmRfY2hpcF9pbml0KG5mYywgYW5hbmRfY2hpcCwg Y2hpbGQpOw0KPiA+ICsJCWlmIChlcnIpIHsNCj4gPiArCQkJZGV2bV9rZnJlZSgmcGRldi0+ZGV2 LCBhbmFuZF9jaGlwKTsNCj4gPiArCQkJY29udGludWU7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiAr CQlsaXN0X2FkZF90YWlsKCZhbmFuZF9jaGlwLT5ub2RlLCAmbmZjLT5jaGlwcyk7DQo+ID4gKwl9 DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICtuYW5kY2hpcF9jbGVhbl91cDoN Cj4gPiArCWxpc3RfZm9yX2VhY2hfZW50cnkoYW5hbmRfY2hpcCwgJm5mYy0+Y2hpcHMsIG5vZGUp DQo+ID4gKwkJbmFuZF9yZWxlYXNlKG5hbmRfdG9fbXRkKCZhbmFuZF9jaGlwLT5jaGlwKSk7DQo+ ID4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUobmZjLT5jbGtfZmxhc2gpOw0KPiA+ICtjbGtfZGlz X3N5czoNCj4gPiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShuZmMtPmNsa19zeXMpOw0KPiA+ICsN Cj4gPiArCXJldHVybiBlcnI7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgYW5mY19y ZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikgew0KPiA+ICsJc3RydWN0IGFuZmMg Km5mYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOw0KPiA+ICsJc3RydWN0IGFuZmNfbmFu ZF9jaGlwICphbmFuZF9jaGlwOw0KPiA+ICsNCj4gPiArCWxpc3RfZm9yX2VhY2hfZW50cnkoYW5h bmRfY2hpcCwgJm5mYy0+Y2hpcHMsIG5vZGUpDQo+ID4gKwkJbmFuZF9yZWxlYXNlKG5hbmRfdG9f bXRkKCZhbmFuZF9jaGlwLT5jaGlwKSk7DQo+ID4gKw0KPiA+ICsJY2xrX2Rpc2FibGVfdW5wcmVw YXJlKG5mYy0+Y2xrX3N5cyk7DQo+ID4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUobmZjLT5jbGtf Zmxhc2gpOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBhbmZjX2lkc1tdID0gew0KPiA+ICsJeyAuY29t cGF0aWJsZSA9ICJhcmFzYW4sbmZjLXYzcDEwIiB9LA0KPiA+ICsJeyAuY29tcGF0aWJsZSA9ICJ4 bG54LHp5bnFtcC1uYW5kIiB9LA0KPiA+ICsJeyAgfQ0KPiA+ICt9Ow0KPiA+ICtNT0RVTEVfREVW SUNFX1RBQkxFKG9mLCBhbmZjX2lkcyk7DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IHBsYXRm b3JtX2RyaXZlciBhbmZjX2RyaXZlciA9IHsNCj4gPiArCS5kcml2ZXIgPSB7DQo+ID4gKwkJLm5h bWUgPSBEUklWRVJfTkFNRSwNCj4gPiArCQkub2ZfbWF0Y2hfdGFibGUgPSBhbmZjX2lkcywNCj4g PiArCX0sDQo+ID4gKwkucHJvYmUgPSBhbmZjX3Byb2JlLA0KPiA+ICsJLnJlbW92ZSA9IGFuZmNf cmVtb3ZlLA0KPiA+ICt9Ow0KPiA+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGFuZmNfZHJpdmVy KTsNCj4gPiArDQo+ID4gK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsNCj4gPiArTU9EVUxFX0FVVEhP UigiWGlsaW54LCBJbmMiKTsNCj4gPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJBcmFzYW4gTkFORCBG bGFzaCBDb250cm9sbGVyIERyaXZlciIpOw0KPiANCj4gDQo+IA0KPiAtLQ0KPiBNaXF1ZWwgUmF5 bmFsLCBGcmVlIEVsZWN0cm9ucw0KPiBFbWJlZGRlZCBMaW51eCBhbmQgS2VybmVsIGVuZ2luZWVy aW5nDQo+IGh0dHA6Ly9mcmVlLWVsZWN0cm9ucy5jb20NCg0KSSB3aWxsIHJlc3RydWN0dXJlIHRo ZSBkcml2ZXIgdG8gc3luYyB3aXRoIGV4ZWNfb3AoKS4NClRoYW5rcyBhZ2FpbiBmb3IgcmV2aWV3 aW5nIHRoZSBkcml2ZXIuDQoNClRoYW5rcywNCk5hZ2EgU3VyZXNoa3VtYXIgUmVsbGkuDQo=