Received: by 10.213.65.68 with SMTP id h4csp445308imn; Fri, 23 Mar 2018 08:00:04 -0700 (PDT) X-Google-Smtp-Source: AG47ELsWcJ6VjpLtisjmj4HSuqd4qILvpwGJ5f9C9eWgU28VW4mFcU8uxE1TvrICyXcptrKZCKDk X-Received: by 10.99.101.198 with SMTP id z189mr21188326pgb.97.1521817204770; Fri, 23 Mar 2018 08:00:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1521817204; cv=none; d=google.com; s=arc-20160816; b=wh1l2BHfcqftiQFe3YMCCdjrNlOStmurp3J5VGP/UF3+HDYev22V2dOMefbR454CuD wJ/GqKCkSqeGVZLz/MyzV7OkH7b5628iLyOKAxmlNpvQQ9LfYp0cQwv3Tgj4fMPYehBb skJXjUIs8NDxTnU2q1xEI3LQHzmKrGBd5I1983pMpGBUUkOgYEf9zzAAQZIGEZ68IJu7 Ez9y8KTteUGZha64iEL+p+oRvuLgGcDXXMpkZG3uEuceLmLA+rjw3lQPnI13cc2BIUBt UFZbS/Bwlm4AlpR2zpFNNCX01Y8zBKFk7jVB9ysVp/0PaKVrAVulLdL1Kac/TEsjoFuj YPgA== 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=24CaEukJrEp+qXvB9uckgOG4Fh/xO9dtMK2lcpUmF6s=; b=mvOzC1VEaMfCyF+20xFkF82CMZJGMslVLsBfaswXPs8RAOrHTkoB63t1T2nsfnoV48 x8pqs4f2wQlN3PSKoqJtJ5bWPx2bB5kIKcGE5nONTfWdcLhXS+B9BtqSIY3aBg95uXwZ mkXSis0IS17z9mOzMPlIiSPXcxLE31q385x0y9WkoHL4b59uALKa0xM8iu8ePkjsMBRL 2gi8ldMPEZrCbt+P5UQlJvmiwjz/wc7qe2aUYyuKK9xG5ZtSOznYwm/nvPemj2MgRGOL Qq41Kq70EQGJoDkvzH/wBK0QZ+XUYiosiRfCqql0mlXZ6O1jtYlciUK2eNyjrb8Kqqwn xMZA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@xilinx.onmicrosoft.com header.s=selector1-xilinx-com header.b=y8p4ntbe; 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 w4-v6si8452831plp.122.2018.03.23.07.59.48; Fri, 23 Mar 2018 08:00:04 -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-com header.b=y8p4ntbe; 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 S1751836AbeCWO6k (ORCPT + 99 others); Fri, 23 Mar 2018 10:58:40 -0400 Received: from mail-bl2nam02on0067.outbound.protection.outlook.com ([104.47.38.67]:39936 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751541AbeCWO6h (ORCPT ); Fri, 23 Mar 2018 10:58:37 -0400 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=24CaEukJrEp+qXvB9uckgOG4Fh/xO9dtMK2lcpUmF6s=; b=y8p4ntbeKz1TGLbT9o1p961y3I63TFfRESNNPZThhWlpTOk2jbon78Om9ZyZ4wPhfacWXvvjGJslwbQSeoCsqJnJfXQDpzo92yI20hQY3bBEXtsJpESV7UzxksbJ8lXN5I/kPRCFwXBsTB+wx98XG0FYguIkSj6TJ8Wyz/zq08A= Received: from BY2PR02MB1411.namprd02.prod.outlook.com (10.162.80.151) by BY2PR02MB1991.namprd02.prod.outlook.com (10.166.109.153) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.609.10; Fri, 23 Mar 2018 14:58:31 +0000 Received: from BY2PR02MB1411.namprd02.prod.outlook.com ([fe80::143b:3ff:feb2:e405]) by BY2PR02MB1411.namprd02.prod.outlook.com ([fe80::143b:3ff:feb2:e405%6]) with mapi id 15.20.0609.010; Fri, 23 Mar 2018 14:58:31 +0000 From: Naga Sureshkumar Relli To: Miquel Raynal , "nagasureshkumarrelli@gmail.com" CC: "boris.brezillon@bootlin.com" , "richard@nod.at" , "dwmw2@infradead.org" , "computersforpeace@gmail.com" , "marek.vasut@gmail.com" , "cyrille.pitchen@wedev4u.fr" , "linux-mtd@lists.infradead.org" , "linux-kernel@vger.kernel.org" , Michal Simek , "Punnaiah Choudary Kalluri" Subject: RE: [LINUX PATCH v8 2/2] mtd: rawnand: pl353: Add basic driver for arm pl353 smc nand interface Thread-Topic: [LINUX PATCH v8 2/2] mtd: rawnand: pl353: Add basic driver for arm pl353 smc nand interface Thread-Index: AQHTu4IebRjORrYPu0KFc32DbYgusKPYLssAgAW0FkA= Date: Fri, 23 Mar 2018 14:58:31 +0000 Message-ID: References: <1521024505-30677-1-git-send-email-nagasureshkumarrelli@gmail.com> <20180319233748.65b5a7b9@xps13> In-Reply-To: <20180319233748.65b5a7b9@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;BY2PR02MB1991;7:shQMpwpA+K0RI3zLWPklSOB2H7XVfublBL7Y+BXxqEew67YsUNfRqM5qp1Wp1t/wRQqnBDlF5BACojUu+B3iFawh65yF2dTXCHe5ykErTjD+l7AC9X5wocPkPZZ9zZ8DAPP3Za4yeIUxeYZEW8l4mcFBn8pdsrJP8vXcUVPaUoCI1sZwFKkzD/hh6ecTQ1dbLRrEiRzvj0F2xAeOkD01ZuyPx7dZP8+JabzlirhYIomzHSTwlp4EQCutai+2RKVl x-ms-exchange-antispam-srfa-diagnostics: SOS;SOR; x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 9a338dcb-1940-4909-e487-08d590ce8b28 x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(7020095)(4652020)(48565401081)(5600026)(4604075)(3008032)(4534165)(7168020)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020);SRVR:BY2PR02MB1991; x-ms-traffictypediagnostic: BY2PR02MB1991: x-ld-processed: 657af505-d5df-48d0-8300-c31994686c5c,ExtAddr x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(9452136761055)(85827821059158)(258649278758335)(192813158149592)(17755550239193); x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3231221)(944501327)(52105095)(3002001)(10201501046)(93006095)(93001095)(6055026)(6041310)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123558120)(20161123560045)(6072148)(201708071742011);SRVR:BY2PR02MB1991;BCL:0;PCL:0;RULEID:;SRVR:BY2PR02MB1991; x-forefront-prvs: 0620CADDF3 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(979002)(39380400002)(376002)(346002)(366004)(396003)(39860400002)(199004)(13464003)(189003)(66066001)(106356001)(316002)(33656002)(478600001)(5250100002)(966005)(229853002)(2501003)(14454004)(25786009)(2900100001)(5660300001)(9686003)(6306002)(107886003)(6246003)(55016002)(7736002)(53946003)(53936002)(16200700003)(4326008)(39060400002)(68736007)(7416002)(74316002)(110136005)(105586002)(3280700002)(305945005)(7696005)(3660700001)(99286004)(54906003)(102836004)(6116002)(6506007)(55236004)(76176011)(59450400001)(97736004)(186003)(3846002)(53546011)(81156014)(81166006)(8936002)(446003)(2906002)(8676002)(26005)(6436002)(11346002)(86362001)(575784001)(217873001)(959014)(579004)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:BY2PR02MB1991;H:BY2PR02MB1411.namprd02.prod.outlook.com;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; received-spf: None (protection.outlook.com: xilinx.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: 5KjQm116FMhZrL79jM0723TAFfQHwcUmlGDM7M0HM1pm+knw3cCDkgIoZf8EJwqAQg3ZjhkTOF3VizHmhFwzfKVS4lMGjEOJFcSTgeXWTGqk787CYf9IL4N8exe1kgMWQnKMc+kC1NBU+CEzyDoKQEgSdFyB2oRYOzizaMkpoJah2PM6NakniKlQBgoyBhmiEaVxKzWNDYNQl34fjYmzl84gM3DmItlbiZ9dpOKsRlWZLSiKbm/XPC6nc3Cte4Gfj63dR1oBGIc88JRybjE2n7hUxhmaQ4+qu4ShzPNG5NYuRnozRBWFPNsfiaBFxv67AkW5OZ7Ao/Ex8sxaruoFAA== 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: 9a338dcb-1940-4909-e487-08d590ce8b28 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Mar 2018 14:58:31.3762 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR02MB1991 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgTWlxdWVsLA0KDQpUaGFua3MgZm9yIHJldmlld2luZyB0aGUgcGF0Y2guDQpQbGVhc2Ugc2Vl IG15IGNvbW1lbnRzIGlubGluZS4NCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBG cm9tOiBNaXF1ZWwgUmF5bmFsIFttYWlsdG86bWlxdWVsLnJheW5hbEBib290bGluLmNvbV0NCj4g U2VudDogVHVlc2RheSwgTWFyY2ggMjAsIDIwMTggNDowOCBBTQ0KPiBUbzogbmFnYXN1cmVzaGt1 bWFycmVsbGlAZ21haWwuY29tDQo+IENjOiBib3Jpcy5icmV6aWxsb25AYm9vdGxpbi5jb207IHJp Y2hhcmRAbm9kLmF0OyBkd213MkBpbmZyYWRlYWQub3JnOw0KPiBjb21wdXRlcnNmb3JwZWFjZUBn bWFpbC5jb207IG1hcmVrLnZhc3V0QGdtYWlsLmNvbTsNCj4gY3lyaWxsZS5waXRjaGVuQHdlZGV2 NHUuZnI7IGxpbnV4LW10ZEBsaXN0cy5pbmZyYWRlYWQub3JnOyBsaW51eC0NCj4ga2VybmVsQHZn ZXIua2VybmVsLm9yZzsgTWljaGFsIFNpbWVrIDxtaWNoYWxzQHhpbGlueC5jb20+OyBQdW5uYWlh aA0KPiBDaG91ZGFyeSBLYWxsdXJpIDxwdW5uYWlhQHhpbGlueC5jb20+OyBOYWdhIFN1cmVzaGt1 bWFyIFJlbGxpDQo+IDxuYWdhc3VyZUB4aWxpbnguY29tPg0KPiBTdWJqZWN0OiBSZTogW0xJTlVY IFBBVENIIHY4IDIvMl0gbXRkOiByYXduYW5kOiBwbDM1MzogQWRkIGJhc2ljIGRyaXZlciBmb3IN Cj4gYXJtIHBsMzUzIHNtYyBuYW5kIGludGVyZmFjZQ0KPiANCj4gSGkgTmFnYSwNCj4gDQo+IFRo YW5rcyBmb3Igc2VuZGluZyBhIG5ldyB2ZXJzaW9uIHN1cHBvcnRpbmcgLT5leGVjX29wKCkuIEEg ZmV3IGNvbW1lbnRzDQo+IGJlbG93Lg0KPiANCj4gT24gV2VkLCAxNCBNYXIgMjAxOCAxNjoxODoy NSArMDUzMCwNCj4gPG5hZ2FzdXJlc2hrdW1hcnJlbGxpQGdtYWlsLmNvbT4gd3JvdGU6DQo+IA0K PiA+IEZyb206IE5hZ2EgU3VyZXNoa3VtYXIgUmVsbGkgPG5hZ2FzdXJlQHhpbGlueC5jb20+DQo+ ID4NCj4gPiBBZGQgZHJpdmVyIGZvciBhcm0gcGwzNTMgc3RhdGljIG1lbW9yeSBjb250cm9sbGVy IG5hbmQgaW50ZXJmYWNlIHdpdGgNCj4gPiBIVyBFQ0Mgc3VwcG9ydC4gVGhpcyBjb250cm9sbGVy IGlzIHVzZWQgaW4geGlsaW54IHp5bnEgc29jIGZvcg0KPiA+IGludGVyZmFjaW5nIHRoZSBuYW5k IGZsYXNoIG1lbW9yeS4NCj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6IE5hZ2EgU3VyZXNoa3VtYXIg UmVsbGkgPG5hZ2FzdXJlQHhpbGlueC5jb20+DQo+ID4gLS0tDQo+ID4gQ2hhbmdlcyBpbiB2ODoN Cj4gPiAgLSBBZGRlZCBleGVjX29wKCkgaW1wbGVtZW50YXRpb24NCj4gPiAgLSBGaXhlZCB0aGUg YmVsb3cgdjcgcmV2aWV3IGNvbW1lbnRzDQo+ID4gIC0gcmVtb3ZlZCBtdGRfaW5mbyBmcm9tIHBs MzUzX25hbmRfaW5mbyBzdHJ1Y3QNCj4gPiAgLSBDb3JyZWN0ZWQgZWNjIGxheW91dCBvZmZzZXRz DQo+ID4gIC0gQWRkZWQgb24tZGllIGVjYyBzdXBwb3J0DQo+ID4gQ2hhbmdlcyBpbiB2NzoNCj4g PiAgLSBDdXJyZW50bHkgbm90IGltcGxlbWVudGVkIHRoZSBtZW1jbGsgcmF0ZSBhZGp1c3RtZW50 cy4gSSB3aWxsDQo+ID4gICAgbG9vayBpbnRvIHRoaXMgbGF0ZXIgYW5kIG9uY2UgdGhlIGJhc2lj IGRyaXZlciBpcyBhY2NlcHRlZC4NCj4gPiAgLSBGaXhlZCBHUEwgbGljZW5jZSBpZGVudA0KPiA+ IENoYW5nZXMgaW4gdjY6DQo+ID4gIC0gRml4ZWQgdGhlIGNoZWNrcGF0Y2gucGwgcmVwb3J0ZWQg d2FybmluZ3MNCj4gPiAgLSBVc2luZyB0aGUgYWRkcmVzcyBjeWNsZXMgaW5mb3JtYXRpb24gZnJv bSB0aGUgb25maSBwYXJhbSBwYWdlDQo+ID4gICAgZWFybGllciBpdCBpcyBoYXJkY29kZWQgdG8g NSBpbiBkcml2ZXIgQ2hhbmdlcyBpbiB2NToNCj4gPiAgLSBDb25maWd1cmUgdGhlIG5hbmQgdGlt aW5nIHBhcmFtZXRlcnMgYXMgcGVyIHRoZSBvbmZpIHNwZWMgQ2hhbmdlcw0KPiA+IGluIHY0Og0K PiA+ICAtIFVwZGF0ZWQgdGhlIGRyaXZlciB0byBzeW5jIHdpdGggcGwzNTNfc21jIGRyaXZlciBB UElzIENoYW5nZXMgaW4NCj4gPiB2MzoNCj4gPiAgLSBpbXBsZW1lbnRlZCB0aGUgcHJvcGVyIGVy cm9yIGNvZGVzDQo+ID4gIC0gZnVydGhlciBicmVha2Rvd24gdGhpcyBwYXRjaCB0byBtdWx0aXBs ZSBzZXRzDQo+ID4gIC0gYWRkZWQgdGhlIGNvbnRyb2xsZXIgYW5kIGRyaXZlciBkZXRhaWxzIHRv IERvY3VtZW50YXRpb24gc2VjdGlvbg0KPiA+ICAtIHVwZGF0ZWQgdGhlIGxpY2VuZWNlIHRvIEdQ THYyDQo+ID4gIC0gcmVvcmdhbml6ZWQgdGhlIHBsMzUzX25hbmRfZWNjX2luaXQgZnVuY3Rpb24g Q2hhbmdlcyBpbiB2MjoNCj4gPiAgLSB1c2UgImRlcGVuZHMgb24iIHJhdGhlciB0aGFuICJzZWxl Y3QiIG9wdGlvbiBpbiBrY29uZmlnDQo+ID4gIC0gcmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBwYXJ0 cw0KPiA+ICAtIHJlbW92ZSBkdW1teSBoZWxwZXIgYW5kIHVzZSB3cml0ZWxfcmVsYXhlZCBkaXJl Y3RseQ0KPiA+IC0tLQ0KPiA+ICBkcml2ZXJzL210ZC9uYW5kL3Jhdy9LY29uZmlnICAgICAgfCAg ICA4ICsNCj4gPiAgZHJpdmVycy9tdGQvbmFuZC9yYXcvTWFrZWZpbGUgICAgIHwgICAgMSArDQo+ ID4gIGRyaXZlcnMvbXRkL25hbmQvcmF3L3BsMzUzX25hbmQuYyB8IDEzNjMNCj4gPiArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ID4gIDMgZmlsZXMgY2hhbmdlZCwgMTM3 MiBpbnNlcnRpb25zKCspDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL210ZC9uYW5k L3Jhdy9wbDM1M19uYW5kLmMNCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5k L3Jhdy9LY29uZmlnDQo+ID4gYi9kcml2ZXJzL210ZC9uYW5kL3Jhdy9LY29uZmlnIGluZGV4IDJj NmVjYjcuLjVlMjAzOTEgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9yYXcvS2Nv bmZpZw0KPiA+ICsrKyBiL2RyaXZlcnMvbXRkL25hbmQvcmF3L0tjb25maWcNCj4gPiBAQCAtNTY2 LDQgKzU2NiwxMiBAQCBjb25maWcgTVREX05BTkRfTVRLDQo+ID4gIAkgIEVuYWJsZXMgc3VwcG9y dCBmb3IgTkFORCBjb250cm9sbGVyIG9uIE1USyBTb0NzLg0KPiA+ICAJICBUaGlzIGNvbnRyb2xs ZXIgaXMgZm91bmQgb24gbXQyN3h4LCBtdDgxeHgsIG10NjV4eCBTb0NzLg0KPiA+DQo+ID4gK2Nv bmZpZyBNVERfTkFORF9QTDM1Mw0KPiA+ICsJdHJpc3RhdGUgIkFSTSBQbDM1MyBOQU5EIGZsYXNo IGRyaXZlciINCj4gPiArCWRlcGVuZHMgb24gTVREX05BTkQgJiYgQVJNDQo+ID4gKwlkZXBlbmRz IG9uIFBMMzVYX1NNQw0KPiA+ICsJaGVscA0KPiA+ICsJICBUaGlzIGVuYWJsZXMgYWNjZXNzIHRv IHRoZSBOQU5EIGZsYXNoIGRldmljZSBvbiBQTDM1Mw0KPiA+ICsJICBTTUMgY29udHJvbGxlci4N Cj4gDQo+IFdoYXQgYWJvdXQ6DQo+ICAgICAgICAgICAiRW5hYmxlcyBzdXBwb3J0IGZvciBQcmlt ZUNlbGwgU3RhdGljIE1lbW9yeSBDb250cm9sbGVyDQo+ICAgICAgICAgICBQTDM1My4iPw0KQXJl IHlvdSBhc2tpbmcgdG8gY2hhbmdlIHRoZSBkZXNjcmlwdGlvbiBpbiBoZWxwPw0KPiANCj4gPiAr DQo+ID4gIGVuZGlmICMgTVREX05BTkQNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFu ZC9yYXcvTWFrZWZpbGUNCj4gPiBiL2RyaXZlcnMvbXRkL25hbmQvcmF3L01ha2VmaWxlIGluZGV4 IGYxNmY1OWEuLjNlOTQzZjMgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9yYXcv TWFrZWZpbGUNCj4gPiArKysgYi9kcml2ZXJzL210ZC9uYW5kL3Jhdy9NYWtlZmlsZQ0KPiA+IEBA IC01Nyw2ICs1Nyw3IEBAIG9iai0kKENPTkZJR19NVERfTkFORF9ISVNJNTA0KQkgICAgICAgICs9 DQo+IGhpc2k1MDRfbmFuZC5vDQo+ID4gIG9iai0kKENPTkZJR19NVERfTkFORF9CUkNNTkFORCkJ CSs9IGJyY21uYW5kLw0KPiA+ICBvYmotJChDT05GSUdfTVREX05BTkRfUUNPTSkJCSs9IHFjb21f bmFuZGMubw0KPiA+ICBvYmotJChDT05GSUdfTVREX05BTkRfTVRLKQkJKz0gbXRrX2VjYy5vIG10 a19uYW5kLm8NCj4gPiArb2JqLSQoQ09ORklHX01URF9OQU5EX1BMMzUzKQkJKz0gcGwzNTNfbmFu ZC5vDQo+ID4NCj4gPiAgbmFuZC1vYmpzIDo9IG5hbmRfYmFzZS5vIG5hbmRfYmJ0Lm8gbmFuZF90 aW1pbmdzLm8gbmFuZF9pZHMubw0KPiA+IG5hbmQtb2JqcyArPSBuYW5kX2FtZC5vIGRpZmYgLS1n aXQgYS9kcml2ZXJzL210ZC9uYW5kL3Jhdy9wbDM1M19uYW5kLmMNCj4gPiBiL2RyaXZlcnMvbXRk L25hbmQvcmF3L3BsMzUzX25hbmQuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5k ZXggMDAwMDAwMC4uNTVjNTFlMg0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJz L210ZC9uYW5kL3Jhdy9wbDM1M19uYW5kLmMNCj4gPiBAQCAtMCwwICsxLDEzNjMgQEANCj4gPiAr Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCj4gPiArLyoNCj4gPiArICogQVJN IFBMMzUzIE5BTkQgZmxhc2ggY29udHJvbGxlciBkcml2ZXINCj4gPiArICoNCj4gPiArICogQ29w eXJpZ2h0IChDKSAyMDE3IFhpbGlueCwgSW5jDQo+ID4gKyAqIEF1dGhvcjogUHVubmFpYWggPHB1 bm5haWFoQHhpbGlueC5jb20+DQo+ID4gKyAqIEF1dGhvcjogbmFnYXN1cmVzaCA8bmFnYXN1cmVA eGlsaW54LmNvbT4NCj4gDQo+IFBsZWFzZSB1c2UgeW91ciBmdWxsIG5hbWVzIGhlcmUuDQpPaywg SSB3aWxsIHVwZGF0ZS4NCj4gDQo+ID4gKyAqDQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArI2luY2x1 ZGUgPGxpbnV4L2Vyci5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4NCj4gPiArI2lu Y2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvaW8uaD4NCj4g PiArI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvaXJxLmg+ DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L21v ZHVsZXBhcmFtLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+DQo+ID4gKyNpbmNs dWRlIDxsaW51eC9tdGQvcmF3bmFuZC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbXRkL25hbmRf ZWNjLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPg0KPiA+ICsjaW5j bHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNl Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPg0KPiA+ICsjaW5jbHVkZSA8 bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+DQo+ ID4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL3BsMzUzLXNtYy5oPg0KPiA+ICsNCj4g PiArI2RlZmluZSBQTDM1M19OQU5EX0RSSVZFUl9OQU1FICJwbDM1My1uYW5kIg0KPiA+ICsNCj4g PiArLyogTkFORCBmbGFzaCBkcml2ZXIgZGVmaW5lcyAqLw0KPiA+ICsjZGVmaW5lIFBMMzUzX05B TkRfQ01EX1BIQVNFCTEJLyogRW5kIGNvbW1hbmQgdmFsaWQgaW4NCj4gY29tbWFuZCBwaGFzZSAq Lw0KPiA+ICsjZGVmaW5lIFBMMzUzX05BTkRfREFUQV9QSEFTRQkyCS8qIEVuZCBjb21tYW5kIHZh bGlkIGluIGRhdGENCj4gcGhhc2UgKi8NCj4gPiArI2RlZmluZSBQTDM1M19OQU5EX0VDQ19TSVpF CTUxMgkvKiBTaXplIG9mIGRhdGEgZm9yIEVDQw0KPiBvcGVyYXRpb24gKi8NCj4gPiArDQo+ID4g Ky8qIEZsYXNoIG1lbW9yeSBjb250cm9sbGVyIG9wZXJhdGluZyBwYXJhbWV0ZXJzICovDQo+ID4g Kw0KPiA+ICsjZGVmaW5lIFBMMzUzX05BTkRfRUNDX0NPTkZJRwkoQklUKDQpICB8CS8qIEVDQyBy ZWFkIGF0IGVuZCBvZg0KPiBwYWdlICovIFwNCj4gPiArCQkJCSAoMCA8PCA1KSkJLyogTm8gSnVt cGluZyAqLw0KPiA+ICsNCj4gPiArLyogQVhJIEFkZHJlc3MgZGVmaW5pdGlvbnMgKi8NCj4gPiAr I2RlZmluZSBTVEFSVF9DTURfU0hJRlQJCTMNCj4gPiArI2RlZmluZSBFTkRfQ01EX1NISUZUCQkx MQ0KPiA+ICsjZGVmaW5lIEVORF9DTURfVkFMSURfU0hJRlQJMjANCj4gPiArI2RlZmluZSBBRERS X0NZQ0xFU19TSElGVAkyMQ0KPiA+ICsjZGVmaW5lIENMRUFSX0NTX1NISUZUCQkyMQ0KPiA+ICsj ZGVmaW5lIEVDQ19MQVNUX1NISUZUCQkxMA0KPiA+ICsjZGVmaW5lIENPTU1BTkRfUEhBU0UJCSgw IDw8IDE5KQ0KPiA+ICsjZGVmaW5lIERBVEFfUEhBU0UJCUJJVCgxOSkNCj4gPiArDQo+ID4gKyNk ZWZpbmUgUEwzNTNfTkFORF9FQ0NfTEFTVAlCSVQoRUNDX0xBU1RfU0hJRlQpCS8qIFNldA0KPiBF Q0NfTGFzdCAqLw0KPiA+ICsjZGVmaW5lIFBMMzUzX05BTkRfQ0xFQVJfQ1MJQklUKENMRUFSX0NT X1NISUZUKQkvKiBDbGVhciBjaGlwDQo+IHNlbGVjdCAqLw0KPiA+ICsNCj4gPiArI2RlZmluZSBP TkRJRV9FQ0NfRkVBVFVSRV9BRERSCTB4OTANCj4gPiArI2RlZmluZSBQTDM1M19OQU5EX0VDQ19C VVNZX1RJTUVPVVQJKDEgKiBIWikNCj4gPiArI2RlZmluZSBQTDM1M19OQU5EX0RFVl9CVVNZX1RJ TUVPVVQJKDEgKiBIWikNCj4gPiArI2RlZmluZSBQTDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVO R1RICTQNCj4gPiArDQo+ID4gKy8qIElubGluZSBmdW5jdGlvbiBmb3IgdGhlIE5BTkQgY29udHJv bGxlciByZWdpc3RlciB3cml0ZSAqLyBzdGF0aWMNCj4gPiAraW5saW5lIHZvaWQgcGwzNTNfbmFu ZF93cml0ZTMyKHZvaWQgX19pb21lbSAqYWRkciwgdTMyIHZhbCkgew0KPiA+ICsJd3JpdGVsX3Jl bGF4ZWQoKHZhbCksIChhZGRyKSk7DQo+ID4gK30NCj4gDQo+IElzIHRoZXJlIGFuIGFjdHVhbCBu ZWVkIGZvciB0aGlzIGlubGluZSBmdW5jdGlvbj8gV2h5IG5vdCBjYWxsaW5nDQo+IHdyaXRlbF9y ZWxheGVkKCkgZGlyZWN0bHk/DQpMZXQgbWUgY2hlY2sgYW5kIGdldCBiYWNrIHRvIHlvdS4NCj4g DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgcGwzNTNfbmZjX29wIHsNCj4gPiArCXUzMiBjbW5kc1s0XTsN Cj4gPiArCXUzMiB0aGlyZHJvdzsNCj4gPiArCXUzMiB0eXBlOw0KPiA+ICsJdTMyIGVuZF9jbWQ7 DQo+ID4gKwl1MzIgYWRkcnM7DQo+ID4gKwlib29sIHdhaXQ7DQo+ID4gKwl1MzIgbGVuOw0KPiA+ ICsJdTMyIG5hZGRyczsNCj4gPiArCXVuc2lnbmVkIGludCBkYXRhX2luc3RyX2lkeDsNCj4gPiAr CWNvbnN0IHN0cnVjdCBuYW5kX29wX2luc3RyICpkYXRhX2luc3RyOw0KPiA+ICsJdW5zaWduZWQg aW50IHJkeV90aW1lb3V0X21zOw0KPiA+ICsJdW5zaWduZWQgaW50IHJkeV9kZWxheV9uczsNCj4g PiArfTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBzdHJ1Y3QgcGwzNTNfbmFuZF9pbmZvIC0g RGVmaW5lcyB0aGUgTkFORCBmbGFzaCBkcml2ZXIgaW5zdGFuY2UNCj4gPiArICogQGNoaXA6CQlO QU5EIGNoaXAgaW5mb3JtYXRpb24gc3RydWN0dXJlDQo+ID4gKyAqIEBuYW5kX2Jhc2U6CQlWaXJ0 dWFsIGFkZHJlc3Mgb2YgdGhlIE5BTkQgZmxhc2ggZGV2aWNlDQo+ID4gKyAqIEBlbmRfY21kX3Bl bmRpbmc6CUVuZCBjb21tYW5kIGlzIHBlbmRpbmcNCj4gPiArICogQGVuZF9jbWQ6CQlFbmQgY29t bWFuZA0KPiA+ICsgKiBAcm93X2FkZHJfY3ljbGVzOglSb3cgYWRkcmVzcyBjeWNsZXMNCj4gPiAr ICogQGNvbF9hZGRyX2N5Y2xlczoJQ29sdW1uIGFkZHJlc3MgY3ljbGVzDQo+ID4gKyAqIEBhZGRy ZXNzOgkJUGFnZSBhZGRyZXNzDQo+ID4gKyAqIEBjbWRfcGVuZGluZzoJTW9yZSBjb21tYW5kIGlz IG5lZWRlZA0KPiA+ICsgKi8NCj4gPiArc3RydWN0IHBsMzUzX25hbmRfaW5mbyB7DQo+ID4gKwlz dHJ1Y3QgbmFuZF9jaGlwIGNoaXA7DQo+ID4gKwl2b2lkIF9faW9tZW0gKm5hbmRfYmFzZTsNCj4g PiArCXVuc2lnbmVkIGxvbmcgZW5kX2NtZF9wZW5kaW5nOw0KPiA+ICsJdW5zaWduZWQgbG9uZyBl bmRfY21kOw0KPiA+ICsJdTggcm93X2FkZHJfY3ljbGVzOw0KPiA+ICsJdTggY29sX2FkZHJfY3lj bGVzOw0KPiA+ICsJdTMyIGFkZHJlc3M7DQo+ID4gKwl1MzIgY21kX3BlbmRpbmc7DQo+ID4gK307 DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHBsMzUzX2VjY19vb2JsYXlvdXQxNl9lY2Moc3RydWN0 IG10ZF9pbmZvICptdGQsIGludCBzZWN0aW9uLA0KPiA+ICsJCQkJICAgc3RydWN0IG10ZF9vb2Jf cmVnaW9uICpvb2JyZWdpb24pIHsNCj4gPiArCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGRf dG9fbmFuZChtdGQpOw0KPiA+ICsNCj4gPiArCWlmIChzZWN0aW9uID49IGNoaXAtPmVjYy5zdGVw cykNCj4gPiArCQlyZXR1cm4gLUVSQU5HRTsNCj4gPiArDQo+ID4gKwlvb2JyZWdpb24tPm9mZnNl dCA9IChzZWN0aW9uICogMTYpICsgMDsNCj4gPiArCW9vYnJlZ2lvbi0+bGVuZ3RoID0gY2hpcC0+ ZWNjLmJ5dGVzOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz dGF0aWMgaW50IHBsMzUzX2VjY19vb2JsYXlvdXQxNl9mcmVlKHN0cnVjdCBtdGRfaW5mbyAqbXRk LCBpbnQgc2VjdGlvbiwNCj4gPiArCQkJCSAgICBzdHJ1Y3QgbXRkX29vYl9yZWdpb24gKm9vYnJl Z2lvbikgew0KPiA+ICsJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZF90b19uYW5kKG10ZCk7 DQo+ID4gKw0KPiA+ICsJaWYgKHNlY3Rpb24gPj0gY2hpcC0+ZWNjLnN0ZXBzKQ0KPiA+ICsJCXJl dHVybiAtRVJBTkdFOw0KPiA+ICsNCj4gPiArCW9vYnJlZ2lvbi0+b2Zmc2V0ID0gKHNlY3Rpb24g KiAxNikgKyA4Ow0KPiA+ICsNCj4gDQo+IEV4dHJhIHNwYWNlDQpJIHdpbGwgZml4IGl0Lg0KPiAN Cj4gPiArCW9vYnJlZ2lvbi0+bGVuZ3RoID0gODsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBtdGRfb29ibGF5b3V0X29wcyBw bDM1M19lY2Nfb29ibGF5b3V0MTZfb3BzID0gew0KPiA+ICsJLmVjYyA9IHBsMzUzX2VjY19vb2Js YXlvdXQxNl9lY2MsDQo+ID4gKwkuZnJlZSA9IHBsMzUzX2VjY19vb2JsYXlvdXQxNl9mcmVlLA0K PiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGludCBwbDM1M19lY2Nfb29ibGF5b3V0NjRfZWNj KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgc2VjdGlvbiwNCj4gPiArCQkJCSAgIHN0cnVjdCBt dGRfb29iX3JlZ2lvbiAqb29icmVnaW9uKSB7DQo+ID4gKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlw ID0gbXRkX3RvX25hbmQobXRkKTsNCj4gPiArDQo+ID4gKwlpZiAoc2VjdGlvbiA+PSBjaGlwLT5l Y2Muc3RlcHMpDQo+ID4gKwkJcmV0dXJuIC1FUkFOR0U7DQo+ID4gKw0KPiA+ICsJb29icmVnaW9u LT5vZmZzZXQgPSAoc2VjdGlvbiAqIGNoaXAtPmVjYy5ieXRlcykgKyA1MjsNCj4gPiArCW9vYnJl Z2lvbi0+bGVuZ3RoID0gY2hpcC0+ZWNjLmJ5dGVzOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHBsMzUzX2VjY19vb2JsYXlvdXQ2NF9mcmVl KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgc2VjdGlvbiwNCj4gPiArCQkJCSAgICBzdHJ1Y3Qg bXRkX29vYl9yZWdpb24gKm9vYnJlZ2lvbikgew0KPiA+ICsJc3RydWN0IG5hbmRfY2hpcCAqY2hp cCA9IG10ZF90b19uYW5kKG10ZCk7DQo+ID4gKw0KPiA+ICsJaWYgKHNlY3Rpb24pDQo+ID4gKwkJ cmV0dXJuIC1FUkFOR0U7DQo+ID4gKwlpZiAoc2VjdGlvbiA+PSBjaGlwLT5lY2Muc3RlcHMpDQo+ ID4gKwkJcmV0dXJuIC1FUkFOR0U7DQo+IA0KPiBJZiB5b3UgY2FuJ3Qgc3VwcG9ydCBtb3JlIHRo YW4gb25lIHNlY3Rpb24sIHRoZSBzZWNvbmQgaWYgaXMgdXNlbGVzcywgYW5kIHRoZQ0KPiBvZmZz ZXQgaXMganVzdCAiMiIuDQpZZXMsIHdlIGNhbiB1c2UganVzdCAyLiBJIHdpbGwgdXBkYXRlDQo+ IA0KPiA+ICsNCj4gPiArCW9vYnJlZ2lvbi0+b2Zmc2V0ID0gKHNlY3Rpb24gKiBjaGlwLT5lY2Mu Ynl0ZXMpICsgMjsNCj4gPiArDQo+ID4gKwlvb2JyZWdpb24tPmxlbmd0aCA9IDUwOw0KPiA+ICsN Cj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IG10ZF9vb2JsYXlvdXRfb3BzIHBsMzUzX2VjY19vb2JsYXlvdXQ2NF9vcHMgPSB7DQo+ID4gKwku ZWNjID0gcGwzNTNfZWNjX29vYmxheW91dDY0X2VjYywNCj4gPiArCS5mcmVlID0gcGwzNTNfZWNj X29vYmxheW91dDY0X2ZyZWUsDQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKiBHZW5lcmljIGZsYXNo IGJidCBkZWNyaXB0b3JzICovDQo+ID4gK3N0YXRpYyB1aW50OF90IGJidF9wYXR0ZXJuW10gPSB7 ICdCJywgJ2InLCAndCcsICcwJyB9OyBzdGF0aWMgdWludDhfdA0KPiA+ICttaXJyb3JfcGF0dGVy bltdID0geyAnMScsICd0JywgJ2InLCAnQicgfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3Qg bmFuZF9iYnRfZGVzY3IgYmJ0X21haW5fZGVzY3IgPSB7DQo+ID4gKwkub3B0aW9ucyA9IE5BTkRf QkJUX0xBU1RCTE9DSyB8IE5BTkRfQkJUX0NSRUFURSB8DQo+IE5BTkRfQkJUX1dSSVRFDQo+ID4g KwkJfCBOQU5EX0JCVF8yQklUIHwgTkFORF9CQlRfVkVSU0lPTiB8DQo+IE5BTkRfQkJUX1BFUkNI SVAsDQo+ID4gKwkub2ZmcyA9IDQsDQo+ID4gKwkubGVuID0gNCwNCj4gPiArCS52ZXJvZmZzID0g MjAsDQo+ID4gKwkubWF4YmxvY2tzID0gNCwNCj4gPiArCS5wYXR0ZXJuID0gYmJ0X3BhdHRlcm4N Cj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgYmJ0X21p cnJvcl9kZXNjciA9IHsNCj4gPiArCS5vcHRpb25zID0gTkFORF9CQlRfTEFTVEJMT0NLIHwgTkFO RF9CQlRfQ1JFQVRFIHwNCj4gTkFORF9CQlRfV1JJVEUNCj4gPiArCQl8IE5BTkRfQkJUXzJCSVQg fCBOQU5EX0JCVF9WRVJTSU9OIHwNCj4gTkFORF9CQlRfUEVSQ0hJUCwNCj4gPiArCS5vZmZzID0g NCwNCj4gPiArCS5sZW4gPSA0LA0KPiA+ICsJLnZlcm9mZnMgPSAyMCwNCj4gPiArCS5tYXhibG9j a3MgPSA0LA0KPiA+ICsJLnBhdHRlcm4gPSBtaXJyb3JfcGF0dGVybg0KPiA+ICt9Ow0KPiA+ICsN Cj4gPiArLyoqDQo+ID4gKyAqIHBsMzUzX25hbmRfcmVhZF9idWZfbCAtIHJlYWQgY2hpcCBkYXRh IGludG8gYnVmZmVyDQo+ID4gKyAqIEBjaGlwOglQb2ludGVyIHRvIHRoZSBOQU5EIGNoaXAgaW5m byBzdHJ1Y3R1cmUNCj4gPiArICogQGluOgkJUG9pbnRlciB0byB0aGUgYnVmZmVyIHRvIHN0b3Jl IHJlYWQgZGF0YQ0KPiA+ICsgKiBAbGVuOglOdW1iZXIgb2YgYnl0ZXMgdG8gcmVhZA0KPiA+ICsg KiBSZXR1cm46CUFsd2F5cyByZXR1cm4gemVybw0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCBw bDM1M19uYW5kX3JlYWRfYnVmX2woc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwNCj4gPiArCQkJCSAg ICAgdWludDhfdCAqaW4sDQo+ID4gKwkJCQkgICAgIHVuc2lnbmVkIGludCBsZW4pDQo+ID4gK3sN Cj4gPiArCWludCBpOw0KPiA+ICsJdW5zaWduZWQgbG9uZyAqcHRyID0gKHVuc2lnbmVkIGxvbmcg KilpbjsNCj4gPiArDQo+ID4gKwlsZW4gPj49IDI7DQo+IA0KPiBDYW4geW91IHBsZWFzZSBsZXQg dGhlIGNvbXBpbGVyIG9wdGltaXplIHRoaW5ncz8gSSBkb24ndCBmaW5kIHRoaXMgdmVyeSByZWFk YWJsZSwgSQ0KPiB3b3VsZCBwcmVmZXIgYSBkaXZpc2lvbiBoZXJlLiBBbmQgaWYgdGhpcyBkaXZp c2lvbiBieSA0IGlzIHJlbGF0ZWQgdG8gdGhlIHNpemUgb2YgKnB0ciwNCj4gcGxlYXNlIHVzZSB0 aGUgc2l6ZW9mKCkgbWFjcm8uIE90aGVyd2lzZSBwbGVhc2UgZG9jdW1lbnQgdGhpcyB2YWx1ZS4N CkF0IGEgdGltZSwgd2UgYXJlIHJlYWRpbmcgNGJ5dGVzLiBIZW5jZSA+PiAyLg0KSSBkaWRuJ3Qg Z2V0IHlvdXIgcG9pbnQuDQpBcmUgeW91IHNheWluZyBpbnN0ZWFkIG9mIHNoaWZ0aW5nLCBqdXN0 IHVzZSBkaXZpZGUgYnkgND8NCg0KPiANCj4gPiArCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykN Cj4gPiArCQlwdHJbaV0gPSByZWFkbChjaGlwLT5JT19BRERSX1IpOw0KPiANCj4gU3BhY2UNCk9r LCBJIHdpbGwgdXBkYXRlIGl0DQo+IA0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ ID4gK3N0YXRpYyB2b2lkIHBsMzUzX25hbmRfd3JpdGVfYnVmX2woc3RydWN0IG5hbmRfY2hpcCAq Y2hpcCwgY29uc3QgdWludDhfdA0KPiAqYnVmLA0KPiA+ICsJCQkJaW50IGxlbikNCj4gPiArew0K PiA+ICsJaW50IGk7DQo+ID4gKwl1bnNpZ25lZCBsb25nICpwdHIgPSAodW5zaWduZWQgbG9uZyAq KWJ1ZjsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspDQo+ID4gKwkJd3Jp dGViKHB0cltpXSwgY2hpcC0+SU9fQUREUl9XKTsNCj4gDQo+IEhlcmUgeW91IHVzZSB3cml0ZWIg KGFzIG9wcG9zZWQgdG8gcmVhZGwgcHJldmlvdXNseSkuIFRoZW4sIEkgZ3Vlc3MgeW91IGNhbiBh bHNvDQo+IHJlYWQgYnl0ZSBwZXIgYnl0ZS4gSWYgc28sIHlvdSBjYW4gZHJvcCBib3RoIGhlbHBl cnMgYW5kIGxldCB0aGUgY29yZSB1c2UgaXRzDQo+IGRlZmF1bHRzIG9uZXM6IG5hbmRfcmVhZC93 cml0ZV9idWYoKS4NCk1heSBiZSB0aGUgZnVuY3Rpb24gbmFtZSBJIGhhdmUgd3JpdHRlbiB3cm9u Z2x5Lg0KV2hlbiB1c2luZyB3cml0ZWwsIGl0IHNob3VsZCBiZSBuYW5kX3dyaXRlX2J1Zl9sLg0K QnV0IHRoZSB0aGluZyBpcywgd2hlbiB1c2luZyBleGVjX29wLCBjb3JlIGlzIG5vdCBjYWxsaW5n IGNoaXAtPnJlYWRfYnl0ZSgpLCBoZW5jZSBJIGFkZGVkDQpCeXRlIHJlYWRpbmcuDQo+IA0KPiBT YW1lIGZvciB0aGUgbmV4dCBmdW5jdGlvbnMuIFBsdXMsIGlmIHlvdSBkb24ndCB1c2UgdGhlbSBp bnNpZGUNCj4gLT5leGVjX29wKCkgaW1wbGVtZW50YXRpb24sIHRoZXkgaGF2ZSB0byBiZSByZW1v dmVkIGFueXdheS4NClRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiBzaG91bGQgY2hhbmdlIHRvIGJ1 Zl9sLCB0byBkbyA0Ynl0ZSB3cml0ZXMuDQpUaGUgbmFtZSBpcyBjcmVhdGluZyBjb25mdXNpb24u DQo+IA0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogcGwzNTNfbmFuZF93cml0ZV9i dWYgLSB3cml0ZSBidWZmZXIgdG8gY2hpcA0KPiA+ICsgKiBAbXRkOglQb2ludGVyIHRvIHRoZSBt dGQgaW5mbyBzdHJ1Y3R1cmUNCj4gPiArICogQGJ1ZjoJUG9pbnRlciB0byB0aGUgYnVmZmVyIHRv IHN0b3JlIHJlYWQgZGF0YQ0KPiA+ICsgKiBAbGVuOglOdW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUN Cj4gPiArICovDQo+ID4gK3N0YXRpYyB2b2lkIHBsMzUzX25hbmRfd3JpdGVfYnVmKHN0cnVjdCBt dGRfaW5mbyAqbXRkLCBjb25zdCB1aW50OF90ICpidWYsDQo+ID4gKwkJCQlpbnQgbGVuKQ0KPiA+ ICt7DQo+ID4gKwlpbnQgaTsNCj4gPiArCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGRfdG9f bmFuZChtdGQpOw0KPiA+ICsJdW5zaWduZWQgbG9uZyAqcHRyID0gKHVuc2lnbmVkIGxvbmcgKili dWY7DQo+ID4gKw0KPiA+ICsJbGVuID4+PSAyOw0KPiA+ICsNCj4gPiArCWZvciAoaSA9IDA7IGkg PCBsZW47IGkrKykNCj4gPiArCQl3cml0ZWwocHRyW2ldLCBjaGlwLT5JT19BRERSX1cpOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogcGwzNTNfbmFuZF9yZWFkX2J1ZiAtIHJlYWQg Y2hpcCBkYXRhIGludG8gYnVmZmVyDQo+ID4gKyAqIEBjaGlwOglQb2ludGVyIHRvIHRoZSBOQU5E IGNoaXAgaW5mbyBzdHJ1Y3R1cmUNCj4gPiArICogQGluOglQb2ludGVyIHRvIHRoZSBidWZmZXIg dG8gc3RvcmUgcmVhZCBkYXRhDQo+ID4gKyAqIEBsZW46CU51bWJlciBvZiBieXRlcyB0byByZWFk DQo+ID4gKyAqIFJldHVybjoJMCBvbiBzdWNjZXNzIG9yIGVycm9yIHZhbHVlIG9uIGZhaWx1cmUN Cj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQgcGwzNTNfbmFuZF9yZWFkX2J1ZihzdHJ1Y3QgbmFu ZF9jaGlwICpjaGlwLA0KPiA+ICsJCQkJICAgICB1aW50OF90ICppbiwNCj4gPiArCQkJCSAgICAg dW5zaWduZWQgaW50IGxlbikNCj4gPiArew0KPiA+ICsJaW50IGk7DQo+ID4gKw0KPiA+ICsJZm9y IChpID0gMDsgaSA8IGxlbjsgaSsrKQ0KPiA+ICsJCWluW2ldID0gcmVhZGIoY2hpcC0+SU9fQURE Ul9SKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ ID4gKyAqIHBsMzUzX25hbmRfY2FsY3VsYXRlX2h3ZWNjIC0gQ2FsY3VsYXRlIEhhcmR3YXJlIEVD Qw0KPiA+ICsgKiBAbXRkOglQb2ludGVyIHRvIHRoZSBtdGRfaW5mbyBzdHJ1Y3R1cmUNCj4gPiAr ICogQGRhdGE6CVBvaW50ZXIgdG8gdGhlIHBhZ2UgZGF0YQ0KPiA+ICsgKiBAZWNjX2NvZGU6CVBv aW50ZXIgdG8gdGhlIEVDQyBidWZmZXIgd2hlcmUgRUNDIGRhdGEgbmVlZHMgdG8gYmUNCj4gc3Rv cmVkDQo+IA0KPiBZb3Ugc3RvcmUgRUNDIGluIGEgdmFyaWFibGUgY2FsbGVkICJjb2RlIiwgY2Fu IHlvdSBwbGVhc2UgbWFrZSBpdCBjb25zaXN0ZW50Pw0KTWlxdWVsLCBJIGFtIG5vdCB1c2luZyBh bnkgdmFyaWFibGUgY2FsbGVkICJjb2RlIg0KPiANCj4gPiArICoNCj4gPiArICogVGhpcyBmdW5j dGlvbiByZXRyaWV2ZXMgdGhlIEhhcmR3YXJlIEVDQyBkYXRhIGZyb20gdGhlIGNvbnRyb2xsZXIN Cj4gPiArYW5kIHJldHVybnMNCj4gPiArICogRUNDIGRhdGEgYmFjayB0byB0aGUgTVREIHN1YnN5 c3RlbS4NCj4gPiArICoNCj4gPiArICogUmV0dXJuOgkwIG9uIHN1Y2Nlc3Mgb3IgZXJyb3IgdmFs dWUgb24gZmFpbHVyZQ0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCBwbDM1M19uYW5kX2NhbGN1 bGF0ZV9od2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwNCj4gPiArCQkJCWNvbnN0IHU4ICpkYXRh LCB1OCAqZWNjX2NvZGUpDQo+ID4gK3sNCj4gPiArCXUzMiBlY2NfdmFsdWUsIGVjY19zdGF0dXM7 DQo+ID4gKwl1OCBlY2NfcmVnLCBlY2NfYnl0ZTsNCj4gPiArCXVuc2lnbmVkIGxvbmcgdGltZW91 dCA9IGppZmZpZXMgKyBQTDM1M19OQU5EX0VDQ19CVVNZX1RJTUVPVVQ7DQo+ID4gKwkvKiBXYWl0 IHRpbGwgdGhlIEVDQyBvcGVyYXRpb24gaXMgY29tcGxldGUgb3IgdGltZW91dCAqLw0KPiA+ICsJ ZG8gew0KPiA+ICsJCWlmIChwbDM1M19zbWNfZWNjX2lzX2J1c3koKSkNCj4gDQo+IFdoZXJlIGRv ZXMgdGhpcyBmdW5jdGlvbiBjb21lIGZyb20/DQpUaGUgcGwzNTMgU01DIGhhcyBtZW1vcnkgY29u dHJvbGxlciBkcml2ZXIgYW5kIHRoaXMgTkFORCBkcml2ZXIgaXMgdXNpbmcgdGhvc2UgQVBJcy4N Ckkgc2VudCBwYXRjaGVzIHRvIGFkZCB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgZHJpdmVyIGZvciBw bDM1My4NCmh0dHBzOi8vd3d3LnNwaW5pY3MubmV0L2xpc3RzL2tlcm5lbC9tc2cyNzQ4ODMyLmh0 bWwNCmh0dHBzOi8vd3d3LnNwaW5pY3MubmV0L2xpc3RzL2tlcm5lbC9tc2cyNzQ4ODM0Lmh0bWwN Cmh0dHBzOi8vd3d3LnNwaW5pY3MubmV0L2xpc3RzL2tlcm5lbC9tc2cyNzQ4ODQwLmh0bWwNCg0K PiANCj4gSSB3b3VsZCByYXRoZXIgcHJlZmVyIGEgcmVhZGxfcmVsYXhlZF9wb2xsX3RpbWVvdXQo KSBvciBzaW1pbGFyLCBpZiBwb3NzaWJsZS4NCkxldCBtZSBjaGVjayB0aGlzIGZ1bmN0aW9uIHRv IHVzZS4NCj4gDQo+ID4gKwkJCWNwdV9yZWxheCgpOw0KPiA+ICsJCWVsc2UNCj4gPiArCQkJYnJl YWs7DQo+ID4gKwl9IHdoaWxlICghdGltZV9hZnRlcl9lcShqaWZmaWVzLCB0aW1lb3V0KSk7DQo+ ID4gKw0KPiA+ICsJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgdGltZW91dCkpIHsNCj4gPiAr CQlwcl9lcnIoIiVzIHRpbWVkIG91dFxuIiwgX19mdW5jX18pOw0KPiA+ICsJCXJldHVybiAtRVRJ TUVET1VUOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWZvciAoZWNjX3JlZyA9IDA7IGVjY19yZWcg PCA0OyBlY2NfcmVnKyspIHsNCj4gPiArCQkvKiBSZWFkIEVDQyB2YWx1ZSBmb3IgZWFjaCBibG9j ayAqLw0KPiA+ICsJCWVjY192YWx1ZSA9IHBsMzUzX3NtY19nZXRfZWNjX3ZhbChlY2NfcmVnKTsN Cj4gDQo+IEkgZG9uJ3QgaGF2ZSB0aGlzIGZ1bmN0aW9uIG5laXRoZXI/DQpTYW1lIGFzIHNhaWQg YWJvdmUuDQo+IA0KPiA+ICsJCWVjY19zdGF0dXMgPSAoZWNjX3ZhbHVlID4+IDI0KSAmIDB4RkY7 DQo+ID4gKwkJLyogRUNDIHZhbHVlIHZhbGlkICovDQo+ID4gKwkJaWYgKGVjY19zdGF0dXMgJiAw eDQwKSB7DQo+ID4gKwkJCWZvciAoZWNjX2J5dGUgPSAwOyBlY2NfYnl0ZSA8IDM7IGVjY19ieXRl KyspIHsNCj4gPiArCQkJCS8qIENvcHkgRUNDIGJ5dGVzIHRvIE1URCBidWZmZXIgKi8NCj4gPiAr CQkJCSplY2NfY29kZSA9IH5lY2NfdmFsdWUgJiAweEZGOw0KPiA+ICsJCQkJZWNjX3ZhbHVlID0g ZWNjX3ZhbHVlID4+IDg7DQo+ID4gKwkJCQllY2NfY29kZSsrOw0KPiA+ICsJCQl9DQo+ID4gKwkJ fSBlbHNlIHsNCj4gPiArCQkJcHJfd2FybigiJXMgc3RhdHVzIGZhaWxlZFxuIiwgX19mdW5jX18p Ow0KPiA+ICsJCQlyZXR1cm4gLTE7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsJcmV0dXJuIDA7 DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBvbmVob3QgLSBvbmVob3QgZnVuY3Rp b24NCj4gPiArICogQHZhbHVlOglWYWx1ZSB0byBjaGVjayBmb3Igb25laG90DQo+ID4gKyAqDQo+ ID4gKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHdoZXRoZXIgYSB2YWx1ZSBpcyBvbmVob3Qgb3Ig bm90Lg0KPiA+ICsgKiBvbmVob3QgaXMgaWYgYW5kIG9ubHkgaWYgb25lYml0IGlzIHNldC4NCj4g DQo+IHMvb25lYml0L29uZSBiaXQvDQo+IA0KPiBCdXQgSSBhbSBzdXJlIHRoZXJlIGlzIGFscmVh ZHkgYSBmdW5jdGlvbiBmb3IgdGhhdCBpbiB0aGUga2VybmVsLCBwbGVhc2UgZG9uJ3QgdXNlDQo+ IHlvdXIgb3duIGltcGxlbWVudGF0aW9uIGZvciB0aGlzIGtpbmQgb2Ygc3R1ZmYuDQpPaywgSSB3 aWxsIGNoZWNrIHRoZSBleGlzdGluZyBmdW5jdGlvbiBhbmQgd2lsbCAgbW9kaWZ5Lg0KPiANCj4g PiArICoNCj4gPiArICogUmV0dXJuOgkxIGlmIGl0IGlzIG9uZWhvdCBlbHNlIDANCj4gPiArICov DQo+ID4gK3N0YXRpYyBpbnQgb25laG90KHVuc2lnbmVkIHNob3J0IHZhbHVlKSB7DQo+ID4gKwly ZXR1cm4gKHZhbHVlICYgKHZhbHVlIC0gMSkpID09IDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgKiBwbDM1M19uYW5kX2NvcnJlY3RfZGF0YSAtIEVDQyBjb3JyZWN0aW9uIGZ1bmN0 aW9uDQo+ID4gKyAqIEBtdGQ6CVBvaW50ZXIgdG8gdGhlIG10ZF9pbmZvIHN0cnVjdHVyZQ0KPiA+ ICsgKiBAYnVmOglQb2ludGVyIHRvIHRoZSBwYWdlIGRhdGENCj4gPiArICogQHJlYWRfZWNjOglQ b2ludGVyIHRvIHRoZSBFQ0MgdmFsdWUgcmVhZCBmcm9tIHNwYXJlIGRhdGEgYXJlYQ0KPiA+ICsg KiBAY2FsY19lY2M6CVBvaW50ZXIgdG8gdGhlIGNhbGN1bGF0ZWQgRUNDIHZhbHVlDQo+ID4gKyAq DQo+ID4gKyAqIFRoaXMgZnVuY3Rpb24gY29ycmVjdHMgdGhlIEVDQyBzaW5nbGUgYml0IGVycm9y cyAmIGRldGVjdHMgMi1iaXQgZXJyb3JzLg0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46CTAgaWYg bm8gRUNDIGVycm9ycyBmb3VuZA0KPiA+ICsgKgkJMSBpZiBzaW5nbGUgYml0IGVycm9yIGZvdW5k IGFuZCBjb3JyZWN0ZWQuDQo+ID4gKyAqCQktMSBpZiBtdWx0aXBsZSBFQ0MgZXJyb3JzIGZvdW5k Lg0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCBwbDM1M19uYW5kX2NvcnJlY3RfZGF0YShzdHJ1 Y3QgbXRkX2luZm8gKm10ZCwgdW5zaWduZWQgY2hhcg0KPiAqYnVmLA0KPiA+ICsJCQkJdW5zaWdu ZWQgY2hhciAqcmVhZF9lY2MsDQo+ID4gKwkJCQl1bnNpZ25lZCBjaGFyICpjYWxjX2VjYykNCj4g PiArew0KPiA+ICsJdW5zaWduZWQgY2hhciBiaXRfYWRkcjsNCj4gPiArCXVuc2lnbmVkIGludCBi eXRlX2FkZHI7DQo+ID4gKwl1bnNpZ25lZCBzaG9ydCBlY2Nfb2RkLCBlY2NfZXZlbiwgcmVhZF9l Y2NfbG93ZXIsIHJlYWRfZWNjX3VwcGVyOw0KPiA+ICsJdW5zaWduZWQgc2hvcnQgY2FsY19lY2Nf bG93ZXIsIGNhbGNfZWNjX3VwcGVyOw0KPiA+ICsNCj4gPiArCXJlYWRfZWNjX2xvd2VyID0gKHJl YWRfZWNjWzBdIHwgKHJlYWRfZWNjWzFdIDw8IDgpKSAmIDB4ZmZmOw0KPiA+ICsJcmVhZF9lY2Nf dXBwZXIgPSAoKHJlYWRfZWNjWzFdID4+IDQpIHwgKHJlYWRfZWNjWzJdIDw8IDQpKSAmIDB4ZmZm Ow0KPiA+ICsNCj4gPiArCWNhbGNfZWNjX2xvd2VyID0gKGNhbGNfZWNjWzBdIHwgKGNhbGNfZWNj WzFdIDw8IDgpKSAmIDB4ZmZmOw0KPiA+ICsJY2FsY19lY2NfdXBwZXIgPSAoKGNhbGNfZWNjWzFd ID4+IDQpIHwgKGNhbGNfZWNjWzJdIDw8IDQpKSAmIDB4ZmZmOw0KPiA+ICsNCj4gPiArCWVjY19v ZGQgPSByZWFkX2VjY19sb3dlciBeIGNhbGNfZWNjX2xvd2VyOw0KPiA+ICsJZWNjX2V2ZW4gPSBy ZWFkX2VjY191cHBlciBeIGNhbGNfZWNjX3VwcGVyOw0KPiA+ICsNCj4gPiArCWlmICgoZWNjX29k ZCA9PSAwKSAmJiAoZWNjX2V2ZW4gPT0gMCkpDQo+ID4gKwkJcmV0dXJuIDA7ICAgICAgIC8qIG5v IGVycm9yICovDQo+IA0KPiBXaGF0IGFib3V0Og0KSSB0aGluaywgdGhlIGJlbG93IGxvZ2ljIGlz IGRvaW5nIHRoYXQuIGlmIChlY2Nfb2RkID09ICh+ZWNjX2V2ZW4gJiAweGZmZikpIA0KPiANCj4g ICAgICAgICBpZiAoIWVjY19vZGQgJiYgIWVjY19ldmVuKQ0KPiAgICAgICAgICAgICAgICAgcmV0 dXJuIDA7DQo+IA0KPiA+ICsNCj4gPiArCWlmIChlY2Nfb2RkID09ICh+ZWNjX2V2ZW4gJiAweGZm ZikpIHsNCj4gPiArCQkvKiBiaXRzIFsxMTozXSBvZiBlcnJvciBjb2RlIGlzIGJ5dGUgb2Zmc2V0 ICovDQo+ID4gKwkJYnl0ZV9hZGRyID0gKGVjY19vZGQgPj4gMykgJiAweDFmZjsNCj4gPiArCQkv KiBiaXRzIFsyOjBdIG9mIGVycm9yIGNvZGUgaXMgYml0IG9mZnNldCAqLw0KPiA+ICsJCWJpdF9h ZGRyID0gZWNjX29kZCAmIDB4NzsNCj4gPiArCQkvKiBUb2dnbGluZyBlcnJvciBiaXQgKi8NCj4g PiArCQlidWZbYnl0ZV9hZGRyXSBePSAoMSA8PCBiaXRfYWRkcik7DQo+IA0KPiBVc2UgQklUKGJp dF9hZGRyKSBtYWNybyBpbnN0ZWFkPw0KT2ssIEkgd2lsbCBtb2RpZnkgaXQuDQo+IA0KPiA+ICsJ CXJldHVybiAxOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChvbmVob3QoZWNjX29kZCB8IGVj Y19ldmVuKSA9PSAxKQ0KPiA+ICsJCXJldHVybiAxOyAvKiBvbmUgZXJyb3IgaW4gcGFyaXR5ICov DQo+IA0KPiBDb21tZW50IHNob3VsZCBiZSBiZWZvcmUgdGhlIGlmIHN0YXRlbWVudCBoZXJlLg0K T2ssIEkgd2lsbCB1cGRhdGUgaXQuDQo+IA0KPiA+ICsNCj4gPiArCXJldHVybiAtMTsgLyogVW5j b3JyZWN0YWJsZSBlcnJvciAqLw0KPiANCj4gQW5kIGhlcmUsIGJlZm9yZSB0aGUgcmV0dXJuIHN0 YXRlbWVudC4NCk9rLCBJIHdpbGwgdXBkYXRlIGl0Lg0KPiANCj4gPiArfQ0KPiA+ICsNCj4gPiAr c3RhdGljIGludCBwbDM1M19kZXZfdGltZW91dChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0 IG5hbmRfY2hpcA0KPiA+ICsqY2hpcCkgew0KPiA+ICsJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0g amlmZmllcyArIFBMMzUzX05BTkRfREVWX0JVU1lfVElNRU9VVDsNCj4gPiArDQo+ID4gKwlkbyB7 DQo+ID4gKwkJaWYgKGNoaXAtPmRldl9yZWFkeShtdGQpKQ0KPiA+ICsJCQlicmVhazsNCj4gPiAr CQljcHVfcmVsYXgoKTsNCj4gPiArCX0gd2hpbGUgKCF0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHRp bWVvdXQpKTsNCj4gPiArDQo+ID4gKwlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCB0aW1lb3V0 KSkgew0KPiA+ICsJCXByX2VycigiJXMgdGltZWQgb3V0XG4iLCBfX2Z1bmNfXyk7DQo+ID4gKwkJ cmV0dXJuIC0xOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgdm9pZCBwbDM1M19wcmVwYXJlX2NtZChzdHJ1Y3QgbXRkX2luZm8gKm10 ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwNCj4gPiArCWludCBwYWdlLCBpbnQgY29sdW1uLCBp bnQgc3RhcnRfY21kLCBpbnQgZW5kX2NtZCwgYm9vbCByZWFkKSB7DQo+ID4gKwl1bnNpZ25lZCBs b25nIGRhdGFfcGhhc2VfYWRkcjsNCj4gPiArCXUzMiBlbmRfY21kX3ZhbGlkID0gMDsNCj4gPiAr CXZvaWQgX19pb21lbSAqY21kX2FkZHI7DQo+ID4gKwl1bnNpZ25lZCBsb25nIGNtZF9waGFzZV9h ZGRyID0gMCwgY21kX2RhdGEgPSAwOw0KPiA+ICsNCj4gPiArCXN0cnVjdCBwbDM1M19uYW5kX2lu Zm8gKnhuYW5kID0NCj4gPiArCQljb250YWluZXJfb2YoY2hpcCwgc3RydWN0IHBsMzUzX25hbmRf aW5mbywgY2hpcCk7DQo+ID4gKw0KPiA+ICsJaWYgKHJlYWQpDQo+ID4gKwkJZW5kX2NtZF92YWxp ZCA9IDE7DQo+ID4gKwllbHNlDQo+ID4gKwkJZW5kX2NtZF92YWxpZCA9IDA7DQo+IA0KPiBUaGlz IGlzIGEgZ29vZCBzcG90IHRvIHVzZSB0aGUgdGVybmFyeSBvcGVyYXRvciA6KQ0KWWVzLCB3ZSBj YW4gdXNlLiBJIHdpbGwgYWRkIHRoaXMuDQo+IA0KPiA+ICsNCj4gPiArCWNtZF9waGFzZV9hZGRy ID0gKHVuc2lnbmVkIGxvbmcgX19mb3JjZSl4bmFuZC0+bmFuZF9iYXNlICsgKA0KPiA+ICsJCQkg KCgoeG5hbmQtPnJvd19hZGRyX2N5Y2xlcykgKyAoeG5hbmQtDQo+ID5jb2xfYWRkcl9jeWNsZXMp KQ0KPiA+ICsJCQkgPDwgQUREUl9DWUNMRVNfU0hJRlQpIHwNCj4gPiArCQkJIChlbmRfY21kX3Zh bGlkIDw8IEVORF9DTURfVkFMSURfU0hJRlQpDQo+IAl8DQo+ID4gKwkJCSAoQ09NTUFORF9QSEFT RSkJCQkJfA0KPiA+ICsJCQkgKGVuZF9jbWQgPDwgRU5EX0NNRF9TSElGVCkJCQl8DQo+IA0KPiBQ bGVhc2UgZG9uJ3QgYWxpZ24gdGhlICd8Jw0KWW91IG1lYW4sIHRhYmJpbmc/IA0KPiANCj4gPiAr CQkJIChzdGFydF9jbWQgPDwgU1RBUlRfQ01EX1NISUZUKSk7DQo+ID4gKwljbWRfYWRkciA9ICh2 b2lkIF9faW9tZW0gKiBfX2ZvcmNlKWNtZF9waGFzZV9hZGRyOw0KPiA+ICsNCj4gPiArCS8qIEdl dCB0aGUgZGF0YSBwaGFzZSBhZGRyZXNzICovDQo+ID4gKwlkYXRhX3BoYXNlX2FkZHIgPSAodW5z aWduZWQgbG9uZyBfX2ZvcmNlKXhuYW5kLT5uYW5kX2Jhc2UgKyAoDQo+ID4gKwkJCSAgKDB4MCA8 PCBDTEVBUl9DU19TSElGVCkJCQl8DQo+ID4gKwkJCSAgKDAgPDwgRU5EX0NNRF9WQUxJRF9TSElG VCkJfA0KPiA+ICsJCQkgIChEQVRBX1BIQVNFKQkJCQkJfA0KPiA+ICsJCQkgIChlbmRfY21kIDw8 IEVORF9DTURfU0hJRlQpCQkJfA0KPiA+ICsJCQkgICgweDAgPDwgRUNDX0xBU1RfU0hJRlQpKTsN Cj4gPiArDQo+ID4gKwljaGlwLT5JT19BRERSX1IgPSAodm9pZCBfX2lvbWVtICogX19mb3JjZSlk YXRhX3BoYXNlX2FkZHI7DQo+ID4gKwljaGlwLT5JT19BRERSX1cgPSBjaGlwLT5JT19BRERSX1I7 DQo+ID4gKwlpZiAoY2hpcC0+b3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTYpDQo+ID4gKwkJY29s dW1uID4+PSAxOw0KPiANCj4gIC8gMg0KPiANCj4gPiArCWNtZF9kYXRhID0gY29sdW1uOw0KPiA+ ICsJaWYgKG10ZC0+d3JpdGVzaXplID4gUEwzNTNfTkFORF9FQ0NfU0laRSkgew0KPiA+ICsJCWNt ZF9kYXRhIHw9IHBhZ2UgPDwgMTY7DQo+ID4gKwkJLyogQW5vdGhlciBhZGRyZXNzIGN5Y2xlIGZv ciBkZXZpY2VzID4gMTI4TWlCICovDQo+ID4gKwkJaWYgKGNoaXAtPmNoaXBzaXplID4gKDEyOCA8 PCAyMCkpIHsNCj4gDQo+IE5vdyB0aGVyZSBpcyBhIGZsYWcgZm9yIHRoYXQgaW4gdGhlIGNvcmUs IGNhbGxlZCBOQU5EX1JPV19BRERSXzMuDQpJIHdpbGwgY2hlY2sgYW5kIHVwZGF0ZS4NCj4gDQo+ ID4gKwkJCXBsMzUzX25hbmRfd3JpdGUzMihjbWRfYWRkciwgY21kX2RhdGEpOw0KPiA+ICsJCQlj bWRfZGF0YSA9IChwYWdlID4+IDE2KTsNCj4gPiArCQl9DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJ CWNtZF9kYXRhIHw9IHBhZ2UgPDwgODsNCj4gPiArCX0NCj4gDQo+IFNwYWNlDQpPaywgSSB3aWxs IHVwZGF0ZS4NCj4gDQo+ID4gKwlwbDM1M19uYW5kX3dyaXRlMzIoY21kX2FkZHIsIGNtZF9kYXRh KTsgfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHBsMzUzX25hbmRfcmVhZF9vb2IgLSBbUkVQ TEFDRUFCTEVdIHRoZSBtb3N0IGNvbW1vbiBPT0IgZGF0YSByZWFkDQo+IGZ1bmN0aW9uDQo+ID4g KyAqIEBtdGQ6CVBvaW50ZXIgdG8gdGhlIG10ZCBpbmZvIHN0cnVjdHVyZQ0KPiA+ICsgKiBAY2hp cDoJUG9pbnRlciB0byB0aGUgTkFORCBjaGlwIGluZm8gc3RydWN0dXJlDQo+ID4gKyAqIEBwYWdl OglQYWdlIG51bWJlciB0byByZWFkDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjoJQWx3YXlzIHJl dHVybiB6ZXJvDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50IHBsMzUzX25hbmRfcmVhZF9vb2Io c3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXANCj4gKmNoaXAsDQo+ID4gKwkJ CSAgICBpbnQgcGFnZSkNCj4gPiArew0KPiA+ICsNCj4gPiArCXVuc2lnbmVkIGxvbmcgZGF0YV9w aGFzZV9hZGRyOw0KPiA+ICsJdWludDhfdCAqcDsNCj4gPiArDQo+ID4gKwljaGlwLT5wYWdlYnVm ID0gLTE7DQo+ID4gKwlpZiAobXRkLT53cml0ZXNpemUgPCBQTDM1M19OQU5EX0VDQ19TSVpFKQ0K PiA+ICsJCXJldHVybiAwOw0KPiA+ICsNCj4gPiArCXBsMzUzX3ByZXBhcmVfY21kKG10ZCwgY2hp cCwgcGFnZSwgbXRkLT53cml0ZXNpemUsDQo+IE5BTkRfQ01EX1JFQUQwLA0KPiA+ICsJCU5BTkRf Q01EX1JFQURTVEFSVCwgMSk7DQo+IA0KPiBBbGlnbm1lbnQNCkFyZSB5b3UgcnVubmluZyBhbnkg c2NyaXB0IGFwYXJ0IGZyb20gY2hlY2twYXRjaD8NCkFueSB3YXkgSSB3aWxsIGNvcnJlY3QgaXQu DQo+IA0KPiA+ICsNCj4gPiArCW5kZWxheSgxMDApOw0KPiA+ICsJcGwzNTNfZGV2X3RpbWVvdXQo bXRkLCBjaGlwKTsNCj4gPiArDQo+ID4gKwlwID0gY2hpcC0+b29iX3BvaTsNCj4gPiArCXBsMzUz X25hbmRfcmVhZF9idWZfbChjaGlwLCBwLA0KPiA+ICsJCShtdGQtPm9vYnNpemUgLSBQTDM1M19O QU5EX0xBU1RfVFJBTlNGRVJfTEVOR1RIKSk7DQo+IA0KPiBBbGlnbm1lbnQNCk9rLCBJIHdpbGwg Y29ycmVjdCBpdC4NCj4gDQo+ID4gKwlwICs9IChtdGQtPm9vYnNpemUgLSBQTDM1M19OQU5EX0xB U1RfVFJBTlNGRVJfTEVOR1RIKTsNCj4gPiArDQo+ID4gKwlkYXRhX3BoYXNlX2FkZHIgPSAodW5z aWduZWQgbG9uZyBfX2ZvcmNlKWNoaXAtPklPX0FERFJfUjsNCj4gPiArCWRhdGFfcGhhc2VfYWRk ciB8PSBQTDM1M19OQU5EX0NMRUFSX0NTOw0KPiA+ICsJY2hpcC0+SU9fQUREUl9SID0gKHZvaWQg X19pb21lbSAqIF9fZm9yY2UpZGF0YV9waGFzZV9hZGRyOw0KPiA+ICsJcGwzNTNfbmFuZF9yZWFk X2J1Zl9sKGNoaXAsIHAsDQo+IFBMMzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgpOw0KPiA+ ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogcGwz NTNfbmFuZF93cml0ZV9vb2IgLSBbUkVQTEFDRUFCTEVdIHRoZSBtb3N0IGNvbW1vbiBPT0IgZGF0 YQ0KPiB3cml0ZSBmdW5jdGlvbg0KPiA+ICsgKiBAbXRkOglQb2ludGVyIHRvIHRoZSBtdGQgaW5m byBzdHJ1Y3R1cmUNCj4gPiArICogQGNoaXA6CVBvaW50ZXIgdG8gdGhlIE5BTkQgY2hpcCBpbmZv IHN0cnVjdHVyZQ0KPiA+ICsgKiBAcGFnZToJUGFnZSBudW1iZXIgdG8gd3JpdGUNCj4gPiArICoN Cj4gPiArICogUmV0dXJuOglaZXJvIG9uIHN1Y2Nlc3MgYW5kIEVJTyBvbiBmYWlsdXJlDQo+ID4g KyAqLw0KPiANCj4gQ29tbWVudHMgaW5zaWRlIHRoaXMgZnVuY3Rpb24gd291bGQgYmUgd2VsY29t ZSENCk9rLCBJIHdpbGwgYWRkLg0KPiANCj4gPiArc3RhdGljIGludCBwbDM1M19uYW5kX3dyaXRl X29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcA0KPiAqY2hpcCwNCj4g PiArCQkJICAgICBpbnQgcGFnZSkNCj4gPiArew0KPiA+ICsNCj4gDQo+IEV4dHJhIHNwYWNlDQpB bnkgd2F5IEkgd2lsbCBjb3JyZWN0IGl0Lg0KPiANCj4gPiArCWNvbnN0IHVpbnQ4X3QgKmJ1ZiA9 IGNoaXAtPm9vYl9wb2k7DQo+ID4gKwl1bnNpZ25lZCBsb25nIGRhdGFfcGhhc2VfYWRkcjsNCj4g PiArCXN0cnVjdCBwbDM1M19uYW5kX2luZm8gKnhuYW5kID0NCj4gPiArCQljb250YWluZXJfb2Yo Y2hpcCwgc3RydWN0IHBsMzUzX25hbmRfaW5mbywgY2hpcCk7DQo+ID4gKwl1MzIgYWRkcmN5Y2xl cyA9IDAsIHJldDsNCj4gPiArCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBQTDM1 M19OQU5EX0RFVl9CVVNZX1RJTUVPVVQ7DQo+ID4gKwl1OCBzdGF0dXM7DQo+ID4gKw0KPiA+ICsJ Y2hpcC0+cGFnZWJ1ZiA9IC0xOw0KPiA+ICsJYWRkcmN5Y2xlcyA9IHhuYW5kLT5yb3dfYWRkcl9j eWNsZXMgKyB4bmFuZC0+Y29sX2FkZHJfY3ljbGVzOw0KPiA+ICsJcGwzNTNfcHJlcGFyZV9jbWQo bXRkLCBjaGlwLCBwYWdlLCBtdGQtPndyaXRlc2l6ZSwNCj4gTkFORF9DTURfU0VRSU4sDQo+ID4g KwkJTkFORF9DTURfUEFHRVBST0csIDApOw0KPiA+ICsJbmRlbGF5KDEwMCk7DQo+ID4gKwlwbDM1 M19uYW5kX3dyaXRlX2J1ZihtdGQsIGJ1ZiwNCj4gPiArCQkJKG10ZC0+b29ic2l6ZSAtDQo+IFBM MzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgpKTsNCj4gPiArCWJ1ZiArPSAobXRkLT5vb2Jz aXplIC0gUEwzNTNfTkFORF9MQVNUX1RSQU5TRkVSX0xFTkdUSCk7DQo+ID4gKw0KPiA+ICsJZGF0 YV9waGFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcgX19mb3JjZSljaGlwLT5JT19BRERSX1c7DQo+ ID4gKwlkYXRhX3BoYXNlX2FkZHIgfD0gUEwzNTNfTkFORF9DTEVBUl9DUzsNCj4gPiArCWRhdGFf cGhhc2VfYWRkciB8PSAoMSA8PCBFTkRfQ01EX1ZBTElEX1NISUZUKTsNCj4gPiArCWNoaXAtPklP X0FERFJfVyA9ICh2b2lkIF9faW9tZW0gKiBfX2ZvcmNlKWRhdGFfcGhhc2VfYWRkcjsNCj4gPiAr CXBsMzUzX25hbmRfd3JpdGVfYnVmKG10ZCwgYnVmLA0KPiBQTDM1M19OQU5EX0xBU1RfVFJBTlNG RVJfTEVOR1RIKTsNCj4gPiArDQo+ID4gKwkvKiBTZW5kIGNvbW1hbmQgdG8gcHJvZ3JhbSB0aGUg T09CIGRhdGEgKi8NCj4gPiArCXJldCA9IG5hbmRfc3RhdHVzX29wKGNoaXAsICZzdGF0dXMpOw0K PiANCj4gRG9pbmcgdGhpcyB3aXRob3V0IGV4aXRpbmcgdGhlIHN0YXR1cyBzdGF0ZSBpcyBicm9r ZW4uDQpJIGRpZG4ndCBnZXQuDQo+IA0KPiA+ICsJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190 b19qaWZmaWVzKHRpbWVvdXQpOw0KPiA+ICsJZG8gew0KPiA+ICsJCWlmIChjaGlwLT5kZXZfcmVh ZHkpIHsNCj4gPiArCQkJaWYgKGNoaXAtPmRldl9yZWFkeShtdGQpKQ0KPiA+ICsJCQkJYnJlYWs7 DQo+ID4gKwkJfSBlbHNlIHsNCj4gDQo+IFlvdSBnaXZlIHlvdXIgb3duIGltcGxlbWVudGF0aW9u IG9mIC0+ZGV2X3JlYWR5KCkuIFNvIHRoaXMgaXMgZGVhZCBjb2RlLg0KSG1tLCB5b3UgYXJlIGNv cnJlY3QsIEkgd2lsbCByZW1vdmUgdGhpcyBjb2RlLg0KPiANCj4gPiArCQkJaWYgKHN0YXR1cyAm IE5BTkRfU1RBVFVTX1JFQURZKQ0KPiANCj4gWW91IGRvbid0IHVwZGF0ZSAic3RhdHVzIiwgd2hp bGUgeW91IHdhaXQgZm9yIGl0IHRvIGNoYW5nZS4NCkJhc2ljYWxseSBJIGFtIHdhaXRpbmcgZm9y IGRldmljZSByZWFkeSwgYnV0IG5vdCB1cGRhdGluZyB0aGUgc3RhdHVzLg0KSSB3aWxsIGxvb2sg dGhpcyBpbXBsZW1lbnRhdGlvbiBhbmQgd2lsbCBnZXQgYmFjayB0byB5b3UuDQo+IA0KPiA+ICsJ CQkJYnJlYWs7DQo+ID4gKwkJfQ0KPiA+ICsJCWNvbmRfcmVzY2hlZCgpOw0KPiA+ICsJfSB3aGls ZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpOw0KPiA+ICsNCj4gPiArCS8qIFRoaXMg Y2FuIGhhcHBlbiBpZiBpbiBjYXNlIG9mIHRpbWVvdXQgb3IgYnVnZ3kgZGV2X3JlYWR5ICovDQo+ ID4gKwlXQVJOX09OKCEoc3RhdHVzICYgTkFORF9TVEFUVVNfUkVBRFkpKTsNCj4gDQo+IEkgdGhp bmsgdGhlIHdob2xlIGJsb2NrIGhhcyB0byBiZSByZXBsYWNlZCBieSBhIHNpbXBsZSBuYW5kX3dh aXRfcmVhZHkoKSBjYWxsLg0KTGV0IG1lIHVzZSB0aGlzLCB0aGFua3MgZm9yIHBvaW50aW5nLg0K PiANCj4gPiArDQo+ID4gKwlyZXR1cm4gKHN0YXR1cyAmIE5BTkRfU1RBVFVTX0ZBSUwpID8gLUVJ TyA6IDA7IH0NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBwbDM1M19uYW5kX3JlYWRfcGFnZV9y YXcgLSBbSW50ZXJuXSByZWFkIHJhdyBwYWdlIGRhdGEgd2l0aG91dCBlY2MNCj4gPiArICogQG10 ZDoJCVBvaW50ZXIgdG8gdGhlIG10ZCBpbmZvIHN0cnVjdHVyZQ0KPiA+ICsgKiBAY2hpcDoJCVBv aW50ZXIgdG8gdGhlIE5BTkQgY2hpcCBpbmZvIHN0cnVjdHVyZQ0KPiA+ICsgKiBAYnVmOgkJUG9p bnRlciB0byB0aGUgZGF0YSBidWZmZXINCj4gPiArICogQG9vYl9yZXF1aXJlZDoJQ2FsbGVyIHJl cXVpcmVzIE9PQiBkYXRhIHJlYWQgdG8gY2hpcC0+b29iX3BvaQ0KPiA+ICsgKiBAcGFnZToJCVBh Z2UgbnVtYmVyIHRvIHJlYWQNCj4gPiArICoNCj4gPiArICogUmV0dXJuOglBbHdheXMgcmV0dXJu IHplcm8NCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQgcGwzNTNfbmFuZF9yZWFkX3BhZ2VfcmF3 KHN0cnVjdCBtdGRfaW5mbyAqbXRkLA0KPiA+ICsJCQkJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwN Cj4gPiArCQkJCXVpbnQ4X3QgKmJ1ZiwgaW50IG9vYl9yZXF1aXJlZCwgaW50IHBhZ2UpDQo+IA0K PiBEbyB5b3UgcmVhbGx5IG5lZWQgcmF3IGFjY2Vzc29ycz8NClllcywgd2hlbiB1c2luZyBvbi1k aWUgZWNjLCB0aGlzIGZ1bmN0aW9uIGlzIGdldHRpbmcgY2FsbGVkLg0KaS5lLiBuYW5kX21pY3Jv bi5jIGlzIGNhbGxpbmcgbmFuZF9zZXRfZmVhdHVyZXNfb3AsIHdpdGggREFUQV9PVVRfSU5TVFIs IGFuZCB0aGVyZQ0Kd2UgYXJlIHVzaW5nIHRoaXMuDQo+IA0KPiBOb3Qgc3VyZSB0aGlzIGlzIG5l ZWRlZC4NCj4gDQo+ID4gK3sNCj4gPiArCXVuc2lnbmVkIGxvbmcgZGF0YV9waGFzZV9hZGRyOw0K PiA+ICsJdWludDhfdCAqcDsNCj4gPiArDQo+ID4gKwlwbDM1M19uYW5kX3JlYWRfYnVmX2woY2hp cCwgYnVmLCBtdGQtPndyaXRlc2l6ZSk7DQo+ID4gKwlwID0gY2hpcC0+b29iX3BvaTsNCj4gPiAr CXBsMzUzX25hbmRfcmVhZF9idWZfbChjaGlwLCBwLA0KPiA+ICsJCShtdGQtPm9vYnNpemUgLSBQ TDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVOR1RIKSk7DQo+ID4gKwlwICs9IChtdGQtPm9vYnNp emUgLSBQTDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVOR1RIKTsNCj4gPiArDQo+ID4gKwlkYXRh X3BoYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKWNoaXAtPklPX0FERFJfUjsNCj4g PiArCWRhdGFfcGhhc2VfYWRkciB8PSBQTDM1M19OQU5EX0NMRUFSX0NTOw0KPiA+ICsJY2hpcC0+ SU9fQUREUl9SID0gKHZvaWQgX19pb21lbSAqIF9fZm9yY2UpZGF0YV9waGFzZV9hZGRyOw0KPiA+ ICsNCj4gPiArCXBsMzUzX25hbmRfcmVhZF9idWZfbChjaGlwLCBwLA0KPiBQTDM1M19OQU5EX0xB U1RfVFJBTlNGRVJfTEVOR1RIKTsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICsvKioNCj4gPiArICogcGwzNTNfbmFuZF93cml0ZV9wYWdlX3JhdyAtIFtJbnRlcm5dIHJhdyBw YWdlIHdyaXRlIGZ1bmN0aW9uDQo+ID4gKyAqIEBtdGQ6CQlQb2ludGVyIHRvIHRoZSBtdGQgaW5m byBzdHJ1Y3R1cmUNCj4gPiArICogQGNoaXA6CQlQb2ludGVyIHRvIHRoZSBOQU5EIGNoaXAgaW5m byBzdHJ1Y3R1cmUNCj4gPiArICogQGJ1ZjoJCVBvaW50ZXIgdG8gdGhlIGRhdGEgYnVmZmVyDQo+ ID4gKyAqIEBvb2JfcmVxdWlyZWQ6CUNhbGxlciByZXF1aXJlcyBPT0IgZGF0YSByZWFkIHRvIGNo aXAtPm9vYl9wb2kNCj4gPiArICogQHBhZ2U6CQlQYWdlIG51bWJlciB0byB3cml0ZQ0KPiA+ICsg Kg0KPiA+ICsgKiBSZXR1cm46CUFsd2F5cyByZXR1cm4gemVybw0KPiA+ICsgKi8NCj4gPiArc3Rh dGljIGludCBwbDM1M19uYW5kX3dyaXRlX3BhZ2VfcmF3KHN0cnVjdCBtdGRfaW5mbyAqbXRkLA0K PiA+ICsJCQkJICAgIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsDQo+ID4gKwkJCQkgICAgY29uc3Qg dWludDhfdCAqYnVmLCBpbnQgb29iX3JlcXVpcmVkLA0KPiA+ICsJCQkJICAgIGludCBwYWdlKQ0K PiA+ICt7DQo+ID4gKwl1bnNpZ25lZCBsb25nIGRhdGFfcGhhc2VfYWRkcjsNCj4gPiArCXVpbnQ4 X3QgKnA7DQo+ID4gKw0KPiA+ICsJcGwzNTNfcHJlcGFyZV9jbWQobXRkLCBjaGlwLCBwYWdlLCAw LCBOQU5EX0NNRF9TRVFJTiwNCj4gPiArCQlOQU5EX0NNRF9QQUdFUFJPRywgMCk7DQo+ID4gKwlw bDM1M19uYW5kX3dyaXRlX2J1ZihtdGQsIGJ1ZiwgbXRkLT53cml0ZXNpemUpOw0KPiA+ICsJcCA9 IGNoaXAtPm9vYl9wb2k7DQo+ID4gKwlwbDM1M19uYW5kX3dyaXRlX2J1ZihtdGQsIHAsDQo+ID4g KwkJCShtdGQtPm9vYnNpemUgLQ0KPiBQTDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVOR1RIKSk7 DQo+ID4gKwlwICs9IChtdGQtPm9vYnNpemUgLSBQTDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVO R1RIKTsNCj4gPiArDQo+ID4gKwlkYXRhX3BoYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZyBfX2Zv cmNlKWNoaXAtPklPX0FERFJfVzsNCj4gPiArCWRhdGFfcGhhc2VfYWRkciB8PSBQTDM1M19OQU5E X0NMRUFSX0NTOw0KPiA+ICsJZGF0YV9waGFzZV9hZGRyIHw9ICgxIDw8IEVORF9DTURfVkFMSURf U0hJRlQpOw0KPiA+ICsJY2hpcC0+SU9fQUREUl9XID0gKHZvaWQgX19pb21lbSAqIF9fZm9yY2Up ZGF0YV9waGFzZV9hZGRyOw0KPiA+ICsNCj4gPiArCXBsMzUzX25hbmRfd3JpdGVfYnVmKG10ZCwg cCwNCj4gUEwzNTNfTkFORF9MQVNUX1RSQU5TRkVSX0xFTkdUSCk7DQo+ID4gKw0KPiA+ICsJcmV0 dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBuYW5kX3dyaXRlX3BhZ2Vf aHdlY2MgLSBIYXJkd2FyZSBFQ0MgYmFzZWQgcGFnZSB3cml0ZSBmdW5jdGlvbg0KPiA+ICsgKiBA bXRkOgkJUG9pbnRlciB0byB0aGUgbXRkIGluZm8gc3RydWN0dXJlDQo+ID4gKyAqIEBjaGlwOgkJ UG9pbnRlciB0byB0aGUgTkFORCBjaGlwIGluZm8gc3RydWN0dXJlDQo+ID4gKyAqIEBidWY6CQlQ b2ludGVyIHRvIHRoZSBkYXRhIGJ1ZmZlcg0KPiA+ICsgKiBAb29iX3JlcXVpcmVkOglDYWxsZXIg cmVxdWlyZXMgT09CIGRhdGEgcmVhZCB0byBjaGlwLT5vb2JfcG9pDQo+ID4gKyAqIEBwYWdlOgkJ UGFnZSBudW1iZXIgdG8gd3JpdGUNCj4gPiArICoNCj4gPiArICogVGhpcyBmdW5jdGlvbnMgd3Jp dGVzIGRhdGEgYW5kIGhhcmR3YXJlIGdlbmVyYXRlZCBFQ0MgdmFsdWVzIGluIHRvIHRoZQ0KPiBw YWdlLg0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46CUFsd2F5cyByZXR1cm4gemVybw0KPiA+ICsg Ki8NCj4gPiArc3RhdGljIGludCBwbDM1M19uYW5kX3dyaXRlX3BhZ2VfaHdlY2Moc3RydWN0IG10 ZF9pbmZvICptdGQsDQo+ID4gKwkJCQkgICAgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgY29uc3Qg dWludDhfdCAqYnVmLA0KPiA+ICsJCQkJICAgIGludCBvb2JfcmVxdWlyZWQsIGludCBwYWdlKQ0K PiA+ICt7DQo+ID4gKw0KPiA+ICsJaW50IGVjY3NpemUgPSBjaGlwLT5lY2Muc2l6ZTsNCj4gPiAr CWludCBlY2NzdGVwcyA9IGNoaXAtPmVjYy5zdGVwczsNCj4gPiArCXVpbnQ4X3QgKmVjY19jYWxj ID0gY2hpcC0+ZWNjLmNhbGNfYnVmOw0KPiA+ICsJY29uc3QgdWludDhfdCAqcCA9IGJ1ZjsNCj4g PiArCXVpbnQ4X3QgKm9vYl9wdHI7DQo+ID4gKwl1MzIgcmV0Ow0KPiA+ICsJdW5zaWduZWQgbG9u ZyBkYXRhX3BoYXNlX2FkZHIsIHRpbWVvOw0KPiA+ICsJdTggc3RhdHVzOw0KPiA+ICsNCj4gPiAr CXBsMzUzX3ByZXBhcmVfY21kKG10ZCwgY2hpcCwgcGFnZSwgMCwgTkFORF9DTURfU0VRSU4sDQo+ ID4gKwkJTkFORF9DTURfUEFHRVBST0csIDApOw0KPiA+ICsJbmRlbGF5KDEwMCk7DQo+ID4gKwlm b3IgKCA7IChlY2NzdGVwcyAtIDEpOyBlY2NzdGVwcy0tKSB7DQo+ID4gKwkJcGwzNTNfbmFuZF93 cml0ZV9idWYobXRkLCBwLCBlY2NzaXplKTsNCj4gPiArCQlwICs9IGVjY3NpemU7DQo+ID4gKwl9 DQo+ID4gKwlwbDM1M19uYW5kX3dyaXRlX2J1ZihtdGQsIHAsDQo+ID4gKwkJKGVjY3NpemUgLSBQ TDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVOR1RIKSk7DQo+ID4gKwlwICs9IChlY2NzaXplIC0g UEwzNTNfTkFORF9MQVNUX1RSQU5TRkVSX0xFTkdUSCk7DQo+ID4gKw0KPiA+ICsJLyogU2V0IEVD QyBMYXN0IGJpdCB0byAxICovDQo+ID4gKwlkYXRhX3BoYXNlX2FkZHIgPSAodW5zaWduZWQgbG9u ZyBfX2ZvcmNlKWNoaXAtPklPX0FERFJfVzsNCj4gPiArCWRhdGFfcGhhc2VfYWRkciB8PSBQTDM1 M19OQU5EX0VDQ19MQVNUOw0KPiA+ICsJY2hpcC0+SU9fQUREUl9XID0gKHZvaWQgX19pb21lbSAq IF9fZm9yY2UpZGF0YV9waGFzZV9hZGRyOw0KPiA+ICsJcGwzNTNfbmFuZF93cml0ZV9idWYobXRk LCBwLA0KPiBQTDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVOR1RIKTsNCj4gPiArDQo+ID4gKwlw ID0gYnVmOw0KPiA+ICsJY2hpcC0+ZWNjLmNhbGN1bGF0ZShtdGQsIHAsICZlY2NfY2FsY1swXSk7 DQo+ID4gKw0KPiA+ICsJLyogV2FpdCBmb3IgRUNDIHRvIGJlIGNhbGN1bGF0ZWQgYW5kIHJlYWQg dGhlIGVycm9yIHZhbHVlcyAqLw0KPiA+ICsJcmV0ID0gbXRkX29vYmxheW91dF9zZXRfZWNjYnl0 ZXMobXRkLCBlY2NfY2FsYywgY2hpcC0+b29iX3BvaSwNCj4gPiArCQkJCQkJMCwgY2hpcC0+ZWNj LnRvdGFsKTsNCj4gPiArCWlmIChyZXQpDQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArCS8qIENs ZWFyIEVDQyBsYXN0IGJpdCAqLw0KPiA+ICsJZGF0YV9waGFzZV9hZGRyID0gKHVuc2lnbmVkIGxv bmcgX19mb3JjZSljaGlwLT5JT19BRERSX1c7DQo+ID4gKwlkYXRhX3BoYXNlX2FkZHIgJj0gflBM MzUzX05BTkRfRUNDX0xBU1Q7DQo+ID4gKwljaGlwLT5JT19BRERSX1cgPSAodm9pZCBfX2lvbWVt ICogX19mb3JjZSlkYXRhX3BoYXNlX2FkZHI7DQo+ID4gKw0KPiA+ICsJLyogV3JpdGUgdGhlIHNw YXJlIGFyZWEgd2l0aCBFQ0MgYnl0ZXMgKi8NCj4gPiArCW9vYl9wdHIgPSBjaGlwLT5vb2JfcG9p Ow0KPiA+ICsJcGwzNTNfbmFuZF93cml0ZV9idWYobXRkLCBvb2JfcHRyLA0KPiA+ICsJCQkobXRk LT5vb2JzaXplIC0NCj4gUEwzNTNfTkFORF9MQVNUX1RSQU5TRkVSX0xFTkdUSCkpOw0KPiA+ICsN Cj4gPiArCWRhdGFfcGhhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpY2hpcC0+SU9f QUREUl9XOw0KPiA+ICsJZGF0YV9waGFzZV9hZGRyIHw9IFBMMzUzX05BTkRfQ0xFQVJfQ1M7DQo+ ID4gKwlkYXRhX3BoYXNlX2FkZHIgfD0gKDEgPDwgRU5EX0NNRF9WQUxJRF9TSElGVCk7DQo+ID4g KwljaGlwLT5JT19BRERSX1cgPSAodm9pZCBfX2lvbWVtICogX19mb3JjZSlkYXRhX3BoYXNlX2Fk ZHI7DQo+ID4gKwlvb2JfcHRyICs9IChtdGQtPm9vYnNpemUgLSBQTDM1M19OQU5EX0xBU1RfVFJB TlNGRVJfTEVOR1RIKTsNCj4gPiArCXBsMzUzX25hbmRfd3JpdGVfYnVmKG10ZCwgb29iX3B0ciwN Cj4gUEwzNTNfTkFORF9MQVNUX1RSQU5TRkVSX0xFTkdUSCk7DQo+IA0KPiBPbmNlIHVzaW5nIC0+ ZXhlY19vcCgpLCB5b3Ugc2hvdWxkIHVzZSBzb21ldGhpbmcgbGlrZSBuYW5kX3dyaXRlX2RhdGFf b3AoKS4NClllcywgSSB3aWxsIHVwZGF0ZSB0aGlzLg0KPiA+ICsNCj4gPiArCS8qDQo+ID4gKwkg KiBBcHBseSB0aGlzIHNob3J0IGRlbGF5IGFsd2F5cyB0byBlbnN1cmUgdGhhdCB3ZSBkbyB3YWl0 IHRXQiBpbiBhbnkNCj4gPiArCSAqIGNhc2Ugb24gYW55IG1hY2hpbmUuDQo+ID4gKwkgKi8NCj4g PiArCW5kZWxheSgxMDApOw0KPiA+ICsJcmV0ID0gbmFuZF9zdGF0dXNfb3AoY2hpcCwgJnN0YXR1 cyk7DQo+ID4gKwl0aW1lbyA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDQwMCk7DQo+ID4g KwlkbyB7DQo+ID4gKwkJaWYgKGNoaXAtPmRldl9yZWFkeSkgew0KPiA+ICsJCQlpZiAoY2hpcC0+ ZGV2X3JlYWR5KG10ZCkpDQo+ID4gKwkJCQlicmVhazsNCj4gPiArCQl9IGVsc2Ugew0KPiA+ICsJ CQlpZiAoc3RhdHVzICYgTkFORF9TVEFUVVNfUkVBRFkpDQo+ID4gKwkJCQlicmVhazsNCj4gPiAr CQl9DQo+ID4gKwkJY29uZF9yZXNjaGVkKCk7DQo+ID4gKwl9IHdoaWxlICh0aW1lX2JlZm9yZShq aWZmaWVzLCB0aW1lbykpOw0KPiA+ICsNCj4gPiArCS8qIFRoaXMgY2FuIGhhcHBlbiBpZiBpbiBj YXNlIG9mIHRpbWVvdXQgb3IgYnVnZ3kgZGV2X3JlYWR5ICovDQo+ID4gKwlXQVJOX09OKCEoc3Rh dHVzICYgTkFORF9TVEFUVVNfUkVBRFkpKTsNCj4gPiArDQo+IA0KPiBTYW1lIGhlcmUgYWJvdXQg LT5kZXZfcmVhZHkoKS4NCk9rDQo+IA0KPiA+ICsJcmV0dXJuIChzdGF0dXMgJiBOQU5EX1NUQVRV U19GQUlMKSA/IC1FSU8gOiAwOyB9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogcGwzNTNfbmFu ZF93cml0ZV9wYWdlX3N3ZWNjIC0gW1JFUExBQ0VBQkxFXSBzb2Z0d2FyZSBlY2MgYmFzZWQgcGFn ZQ0KPiB3cml0ZQ0KPiA+ICsgKgkJCQlmdW5jdGlvbg0KPiA+ICsgKiBAbXRkOgkJUG9pbnRlciB0 byB0aGUgbXRkIGluZm8gc3RydWN0dXJlDQo+ID4gKyAqIEBjaGlwOgkJUG9pbnRlciB0byB0aGUg TkFORCBjaGlwIGluZm8gc3RydWN0dXJlDQo+ID4gKyAqIEBidWY6CQlQb2ludGVyIHRvIHRoZSBk YXRhIGJ1ZmZlcg0KPiA+ICsgKiBAb29iX3JlcXVpcmVkOglDYWxsZXIgcmVxdWlyZXMgT09CIGRh dGEgcmVhZCB0byBjaGlwLT5vb2JfcG9pDQo+ID4gKyAqIEBwYWdlOgkJUGFnZSBudW1iZXIgdG8g d3JpdGUNCj4gPiArICoNCj4gPiArICogUmV0dXJuOglBbHdheXMgcmV0dXJuIHplcm8NCj4gPiAr ICovDQo+ID4gK3N0YXRpYyBpbnQgcGwzNTNfbmFuZF93cml0ZV9wYWdlX3N3ZWNjKHN0cnVjdCBt dGRfaW5mbyAqbXRkLA0KPiA+ICsJCQkJICAgIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIGNvbnN0 IHVpbnQ4X3QgKmJ1ZiwNCj4gPiArCQkJCSAgICBpbnQgb29iX3JlcXVpcmVkLCBpbnQgcGFnZSkN Cj4gPiArew0KPiANCj4gVGhpcyBpcyBhbiBleGFjdCBjb3B5IG9mIHRoZSBjb3JlJ3MgZnVuY3Rp b24sIHlvdSBwcm9iYWJseSBkb24ndCBuZWVkIGl0Lg0KT2ssIEkgd2lsbCByZW1vdmUgaXQgaW4g bmV4dCB2ZXJzaW9uLg0KPiANCj4gPiArCWludCBpLCBlY2NzaXplID0gY2hpcC0+ZWNjLnNpemU7 DQo+ID4gKwlpbnQgZWNjYnl0ZXMgPSBjaGlwLT5lY2MuYnl0ZXM7DQo+ID4gKwlpbnQgZWNjc3Rl cHMgPSBjaGlwLT5lY2Muc3RlcHM7DQo+ID4gKwl1aW50OF90ICplY2NfY2FsYyA9IGNoaXAtPmVj Yy5jYWxjX2J1ZjsNCj4gPiArCWNvbnN0IHVpbnQ4X3QgKnAgPSBidWY7DQo+ID4gKwl1MzIgcmV0 Ow0KPiA+ICsNCj4gPiArCWZvciAoaSA9IDA7IGVjY3N0ZXBzOyBlY2NzdGVwcy0tLCBpICs9IGVj Y2J5dGVzLCBwICs9IGVjY3NpemUpDQo+ID4gKwkJY2hpcC0+ZWNjLmNhbGN1bGF0ZShtdGQsIHAs ICZlY2NfY2FsY1swXSk7DQo+ID4gKw0KPiA+ICsJcmV0ID0gbXRkX29vYmxheW91dF9zZXRfZWNj Ynl0ZXMobXRkLCBlY2NfY2FsYywgY2hpcC0+b29iX3BvaSwNCj4gPiArCQkJCQkJMCwgY2hpcC0+ ZWNjLnRvdGFsKTsNCj4gPiArCWlmIChyZXQpDQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArCWNo aXAtPmVjYy53cml0ZV9wYWdlX3JhdyhtdGQsIGNoaXAsIGJ1ZiwgMSwgcGFnZSk7DQo+ID4gKw0K PiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBwbDM1M19u YW5kX3JlYWRfcGFnZV9od2VjYyAtIEhhcmR3YXJlIEVDQyBiYXNlZCBwYWdlIHJlYWQgZnVuY3Rp b24NCj4gPiArICogQG10ZDoJCVBvaW50ZXIgdG8gdGhlIG10ZCBpbmZvIHN0cnVjdHVyZQ0KPiA+ ICsgKiBAY2hpcDoJCVBvaW50ZXIgdG8gdGhlIE5BTkQgY2hpcCBpbmZvIHN0cnVjdHVyZQ0KPiA+ ICsgKiBAYnVmOgkJUG9pbnRlciB0byB0aGUgYnVmZmVyIHRvIHN0b3JlIHJlYWQgZGF0YQ0KPiA+ ICsgKiBAb29iX3JlcXVpcmVkOglDYWxsZXIgcmVxdWlyZXMgT09CIGRhdGEgcmVhZCB0byBjaGlw LT5vb2JfcG9pDQo+ID4gKyAqIEBwYWdlOgkJUGFnZSBudW1iZXIgdG8gcmVhZA0KPiA+ICsgKg0K PiA+ICsgKiBUaGlzIGZ1bmN0aW9ucyByZWFkcyBkYXRhIGFuZCBjaGVja3MgdGhlIGRhdGEgaW50 ZWdyaXR5IGJ5DQo+ID4gK2NvbXBhcmluZyBoYXJkd2FyZQ0KPiA+ICsgKiBnZW5lcmF0ZWQgRUND IHZhbHVlcyBhbmQgcmVhZCBFQ0MgdmFsdWVzIGZyb20gc3BhcmUgYXJlYS4NCj4gPiArICoNCj4g PiArICogUmV0dXJuOgkwIGFsd2F5cyBhbmQgdXBkYXRlcyBFQ0Mgb3BlcmF0aW9uIHN0YXR1cyBp biB0byBNVEQgc3RydWN0dXJlDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50IHBsMzUzX25hbmRf cmVhZF9wYWdlX2h3ZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLA0KPiA+ICsJCQkJIHN0cnVjdCBu YW5kX2NoaXAgKmNoaXAsDQo+ID4gKwkJCQkgdWludDhfdCAqYnVmLCBpbnQgb29iX3JlcXVpcmVk LCBpbnQgcGFnZSkgew0KPiA+ICsJaW50IGksIHN0YXQsIGVjY3NpemUgPSBjaGlwLT5lY2Muc2l6 ZTsNCj4gPiArCWludCBlY2NieXRlcyA9IGNoaXAtPmVjYy5ieXRlczsNCj4gPiArCWludCBlY2Nz dGVwcyA9IGNoaXAtPmVjYy5zdGVwczsNCj4gPiArCXVpbnQ4X3QgKnAgPSBidWY7DQo+ID4gKwl1 aW50OF90ICplY2NfY2FsYyA9IGNoaXAtPmVjYy5jYWxjX2J1ZjsNCj4gPiArCXVpbnQ4X3QgKmVj Y19jb2RlID0gY2hpcC0+ZWNjLmNvZGVfYnVmOw0KPiA+ICsNCj4gPiArCXVpbnQ4X3QgKm9vYl9w dHI7DQo+ID4gKwl1MzIgcmV0Ow0KPiA+ICsJdW5zaWduZWQgbG9uZyBkYXRhX3BoYXNlX2FkZHI7 DQo+ID4gKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgUEwzNTNfTkFORF9ERVZf QlVTWV9USU1FT1VUOw0KPiA+ICsNCj4gPiArCXBsMzUzX3ByZXBhcmVfY21kKG10ZCwgY2hpcCwg cGFnZSwgMCwgTkFORF9DTURfUkVBRDAsDQo+ID4gKwkJTkFORF9DTURfUkVBRFNUQVJULCAxKTsN Cj4gPiArCW5kZWxheSgxMDApOw0KPiA+ICsJZG8gew0KPiA+ICsJCWlmIChjaGlwLT5kZXZfcmVh ZHkobXRkKSkNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJY3B1X3JlbGF4KCk7DQo+ID4gKwl9IHdo aWxlICghdGltZV9hZnRlcl9lcShqaWZmaWVzLCB0aW1lb3V0KSk7DQo+ID4gKw0KPiA+ICsJaWYg KHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgdGltZW91dCkpIHsNCj4gPiArCQlwcl9lcnIoIiVzIHRp bWVkIG91dFxuIiwgX19mdW5jX18pOw0KPiA+ICsJCXJldHVybiAtMTsNCj4gPiArCX0NCj4gPiAr CWZvciAoIDsgKGVjY3N0ZXBzIC0gMSk7IGVjY3N0ZXBzLS0pIHsNCj4gPiArCQlwbDM1M19uYW5k X3JlYWRfYnVmX2woY2hpcCwgcCwgZWNjc2l6ZSk7DQo+ID4gKwkJcCArPSBlY2NzaXplOw0KPiA+ ICsJfQ0KPiA+ICsJcGwzNTNfbmFuZF9yZWFkX2J1Zl9sKGNoaXAsIHAsDQo+ID4gKwkJKGVjY3Np emUgLSBQTDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVOR1RIKSk7DQo+ID4gKwlwICs9IChlY2Nz aXplIC0gUEwzNTNfTkFORF9MQVNUX1RSQU5TRkVSX0xFTkdUSCk7DQo+ID4gKw0KPiA+ICsJLyog U2V0IEVDQyBMYXN0IGJpdCB0byAxICovDQo+ID4gKwlkYXRhX3BoYXNlX2FkZHIgPSAodW5zaWdu ZWQgbG9uZyBfX2ZvcmNlKWNoaXAtPklPX0FERFJfUjsNCj4gPiArCWRhdGFfcGhhc2VfYWRkciB8 PSBQTDM1M19OQU5EX0VDQ19MQVNUOw0KPiA+ICsJY2hpcC0+SU9fQUREUl9SID0gKHZvaWQgX19p b21lbSAqIF9fZm9yY2UpZGF0YV9waGFzZV9hZGRyOw0KPiA+ICsJcGwzNTNfbmFuZF9yZWFkX2J1 Zl9sKGNoaXAsIHAsDQo+IFBMMzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgpOw0KPiA+ICsN Cj4gPiArCS8qIFJlYWQgdGhlIGNhbGN1bGF0ZWQgRUNDIHZhbHVlICovDQo+ID4gKwlwID0gYnVm Ow0KPiA+ICsJY2hpcC0+ZWNjLmNhbGN1bGF0ZShtdGQsIHAsICZlY2NfY2FsY1swXSk7DQo+ID4g Kw0KPiA+ICsJLyogQ2xlYXIgRUNDIGxhc3QgYml0ICovDQo+ID4gKwlkYXRhX3BoYXNlX2FkZHIg PSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKWNoaXAtPklPX0FERFJfUjsNCj4gPiArCWRhdGFfcGhh c2VfYWRkciAmPSB+UEwzNTNfTkFORF9FQ0NfTEFTVDsNCj4gPiArCWNoaXAtPklPX0FERFJfUiA9 ICh2b2lkIF9faW9tZW0gKiBfX2ZvcmNlKWRhdGFfcGhhc2VfYWRkcjsNCj4gPiArDQo+ID4gKwkv KiBSZWFkIHRoZSBzdG9yZWQgRUNDIHZhbHVlICovDQo+ID4gKwlvb2JfcHRyID0gY2hpcC0+b29i X3BvaTsNCj4gPiArCXBsMzUzX25hbmRfcmVhZF9idWZfbChjaGlwLCBvb2JfcHRyLA0KPiA+ICsJ CShtdGQtPm9vYnNpemUgLSBQTDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVOR1RIKSk7DQo+ID4g Kw0KPiA+ICsJLyogZGUtYXNzZXJ0IGNoaXAgc2VsZWN0ICovDQo+ID4gKwlkYXRhX3BoYXNlX2Fk ZHIgPSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKWNoaXAtPklPX0FERFJfUjsNCj4gPiArCWRhdGFf cGhhc2VfYWRkciB8PSBQTDM1M19OQU5EX0NMRUFSX0NTOw0KPiA+ICsJY2hpcC0+SU9fQUREUl9S ID0gKHZvaWQgX19pb21lbSAqIF9fZm9yY2UpZGF0YV9waGFzZV9hZGRyOw0KPiA+ICsNCj4gPiAr CW9vYl9wdHIgKz0gKG10ZC0+b29ic2l6ZSAtIFBMMzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9MRU5H VEgpOw0KPiA+ICsJcGwzNTNfbmFuZF9yZWFkX2J1Zl9sKGNoaXAsIG9vYl9wdHIsDQo+ID4gK1BM MzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgpOw0KPiA+ICsNCj4gPiArCXJldCA9IG10ZF9v b2JsYXlvdXRfZ2V0X2VjY2J5dGVzKG10ZCwgZWNjX2NvZGUsIGNoaXAtPm9vYl9wb2ksIDAsDQo+ ID4gKwkJCQkJCSBjaGlwLT5lY2MudG90YWwpOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlyZXR1 cm4gcmV0Ow0KPiA+ICsNCj4gPiArCWVjY3N0ZXBzID0gY2hpcC0+ZWNjLnN0ZXBzOw0KPiA+ICsJ cCA9IGJ1ZjsNCj4gPiArDQo+ID4gKwkvKiBDaGVjayBFQ0MgZXJyb3IgZm9yIGFsbCBibG9ja3Mg YW5kIGNvcnJlY3QgaWYgaXQgaXMgY29ycmVjdGFibGUgKi8NCj4gPiArCWZvciAoaSA9IDAgOyBl Y2NzdGVwczsgZWNjc3RlcHMtLSwgaSArPSBlY2NieXRlcywgcCArPSBlY2NzaXplKSB7DQo+IA0K PiBJbiB0aGlzIGxvb3AgeW91IHNob3VsZCBtb25pdG9yZSBhIG1heF9iaXRmbGlwcyB2YWx1ZSBh bmQgcmV0dXJuIGl0IGluc3RlYWQgb2YNCj4gemVybyBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlv bi4NCk9rLCBJIHdpbGwgYWRkIGl0Lg0KPiANCj4gPiArCQlzdGF0ID0gY2hpcC0+ZWNjLmNvcnJl Y3QobXRkLCBwLCAmZWNjX2NvZGVbaV0sICZlY2NfY2FsY1tpXSk7DQo+ID4gKwkJaWYgKHN0YXQg PCAwKQ0KPiA+ICsJCQltdGQtPmVjY19zdGF0cy5mYWlsZWQrKzsNCj4gPiArCQllbHNlDQo+ID4g KwkJCW10ZC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCArPSBzdGF0Ow0KPiA+ICsJfQ0KPiA+ICsJcmV0 dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBwbDM1M19uYW5kX3JlYWRf cGFnZV9zd2VjYyAtIFtSRVBMQUNFQUJMRV0gc29mdHdhcmUgZWNjIGJhc2VkIHBhZ2UNCj4gcmVh ZA0KPiA+ICsgKgkJCQlmdW5jdGlvbg0KPiA+ICsgKiBAbXRkOgkJUG9pbnRlciB0byB0aGUgbXRk IGluZm8gc3RydWN0dXJlDQo+ID4gKyAqIEBjaGlwOgkJUG9pbnRlciB0byB0aGUgTkFORCBjaGlw IGluZm8gc3RydWN0dXJlDQo+ID4gKyAqIEBidWY6CQlQb2ludGVyIHRvIHRoZSBidWZmZXIgdG8g c3RvcmUgcmVhZCBkYXRhDQo+ID4gKyAqIEBvb2JfcmVxdWlyZWQ6CUNhbGxlciByZXF1aXJlcyBP T0IgZGF0YSByZWFkIHRvIGNoaXAtPm9vYl9wb2kNCj4gPiArICogQHBhZ2U6CQlQYWdlIG51bWJl ciB0byByZWFkDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjoJQWx3YXlzIHJldHVybiB6ZXJvDQo+ ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50IHBsMzUzX25hbmRfcmVhZF9wYWdlX3N3ZWNjKHN0cnVj dCBtdGRfaW5mbyAqbXRkLA0KPiA+ICsJCQkJICAgICBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLA0K PiA+ICsJCQkJICAgICB1aW50OF90ICpidWYsICBpbnQgb29iX3JlcXVpcmVkLCBpbnQgcGFnZSkg ew0KPiANCj4gU2FtZSwgeW91IHByb2JhYmx5IGRvbid0IG5lZWQgdGhpcyBmdW5jdGlvbi4NClll cywgSSB3aWxsIHJlbW92ZSBpbiBuZXh0IHZlcnNpb24uDQo+IA0KPiA+ICsJaW50IGksIGVjY3Np emUgPSBjaGlwLT5lY2Muc2l6ZTsNCj4gPiArCWludCBlY2NieXRlcyA9IGNoaXAtPmVjYy5ieXRl czsNCj4gPiArCWludCBlY2NzdGVwcyA9IGNoaXAtPmVjYy5zdGVwczsNCj4gPiArCXVpbnQ4X3Qg KnAgPSBidWY7DQo+ID4gKwl1aW50OF90ICplY2NfY2FsYyA9IGNoaXAtPmVjYy5jYWxjX2J1ZjsN Cj4gPiArCXVpbnQ4X3QgKmVjY19jb2RlID0gY2hpcC0+ZWNjLmNvZGVfYnVmOw0KPiA+ICsJdTMy IHJldDsNCj4gPiArDQo+ID4gKwljaGlwLT5lY2MucmVhZF9wYWdlX3JhdyhtdGQsIGNoaXAsIGJ1 ZiwgcGFnZSwgMSk7DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgZWNjc3RlcHM7IGVjY3N0ZXBz LS0sIGkgKz0gZWNjYnl0ZXMsIHAgKz0gZWNjc2l6ZSkNCj4gPiArCQljaGlwLT5lY2MuY2FsY3Vs YXRlKG10ZCwgcCwgJmVjY19jYWxjW2ldKTsNCj4gPiArDQo+ID4gKwlyZXQgPSBtdGRfb29ibGF5 b3V0X2dldF9lY2NieXRlcyhtdGQsIGVjY19jYWxjLCBjaGlwLT5vb2JfcG9pLA0KPiA+ICsJCQkJ CQkwLCBjaGlwLT5lY2MudG90YWwpOw0KPiA+ICsNCj4gPiArCWVjY3N0ZXBzID0gY2hpcC0+ZWNj LnN0ZXBzOw0KPiA+ICsJcCA9IGJ1ZjsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwIDsgZWNjc3Rl cHM7IGVjY3N0ZXBzLS0sIGkgKz0gZWNjYnl0ZXMsIHAgKz0gZWNjc2l6ZSkgew0KPiA+ICsJCWlu dCBzdGF0Ow0KPiA+ICsNCj4gPiArCQlzdGF0ID0gY2hpcC0+ZWNjLmNvcnJlY3QobXRkLCBwLCAm ZWNjX2NvZGVbaV0sICZlY2NfY2FsY1tpXSk7DQo+ID4gKwkJaWYgKHN0YXQgPCAwKQ0KPiA+ICsJ CQltdGQtPmVjY19zdGF0cy5mYWlsZWQrKzsNCj4gPiArCQllbHNlDQo+ID4gKwkJCW10ZC0+ZWNj X3N0YXRzLmNvcnJlY3RlZCArPSBzdGF0Ow0KPiA+ICsJfQ0KPiA+ICsJcmV0dXJuIDA7DQo+ID4g K30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBwbDM1M19uYW5kX3NlbGVjdF9jaGlwIC0gU2Vs ZWN0IHRoZSBmbGFzaCBkZXZpY2UNCj4gPiArICogQG10ZDoJUG9pbnRlciB0byB0aGUgbXRkIGlu Zm8gc3RydWN0dXJlDQo+ID4gKyAqIEBjaGlwOglQb2ludGVyIHRvIHRoZSBOQU5EIGNoaXAgaW5m byBzdHJ1Y3R1cmUNCj4gPiArICoNCj4gPiArICogVGhpcyBmdW5jdGlvbiBpcyBlbXB0eSBhcyB0 aGUgTkFORCBjb250cm9sbGVyIGhhbmRsZXMgY2hpcCBzZWxlY3QNCj4gPiArbGluZQ0KPiA+ICsg KiBpbnRlcm5hbGx5IGJhc2VkIG9uIHRoZSBjaGlwIGFkZHJlc3MgcGFzc2VkIGluIGNvbW1hbmQg YW5kIGRhdGEgcGhhc2UuDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgdm9pZCBwbDM1M19uYW5kX3Nl bGVjdF9jaGlwKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY2hpcCkgew0KPiA+ICt9DQo+ID4g Kw0KPiA+ICsvKiBOQU5EIGZyYW1ld29yayAtPmV4ZWNfb3AoKSBob29rcyBhbmQgcmVsYXRlZCBo ZWxwZXJzICovIHN0YXRpYw0KPiA+ICt2b2lkIHBsMzUzX25mY19wYXJzZV9pbnN0cnVjdGlvbnMo c3RydWN0IG5hbmRfY2hpcCAqY2hpcCwNCj4gPiArCQkJCQkgICBjb25zdCBzdHJ1Y3QgbmFuZF9z dWJvcCAqc3Vib3AsDQo+ID4gKwkJCQkJICAgc3RydWN0IHBsMzUzX25mY19vcCAqbmZjX29wKQ0K PiA+ICt7DQo+ID4gKwljb25zdCBzdHJ1Y3QgbmFuZF9vcF9pbnN0ciAqaW5zdHIgPSBOVUxMOw0K PiA+ICsJdW5zaWduZWQgaW50IG9wX2lkLCBvZmZzZXQsIG5hZGRyczsNCj4gPiArCWludCBpOw0K PiA+ICsJY29uc3QgdTggKmFkZHJzOw0KPiA+ICsNCj4gPiArCW1lbXNldChuZmNfb3AsIDAsIHNp emVvZihzdHJ1Y3QgcGwzNTNfbmZjX29wKSk7DQo+ID4gKwlmb3IgKG9wX2lkID0gMDsgb3BfaWQg PCBzdWJvcC0+bmluc3Ryczsgb3BfaWQrKykgew0KPiA+ICsNCj4gDQo+IFdoYXQgaXMgdGhpcyBm b3ItbG9vcCBmb3I/IEkgZG9uJ3QgZ2V0IGl0IGFzIHlvdSBicmVhayB0aGUgc3dpdGNoIGluIGV2 ZXJ5IGNhc2U/DQpJIHRoaW5rLCBicmVha2luZyBzd2l0Y2ggY2FzZSBvbmx5IG5vdCBmb3IgbG9v cC4NCj4gDQo+ID4gKwkJbmZjX29wLT5sZW4gPSBuYW5kX3N1Ym9wX2dldF9kYXRhX2xlbihzdWJv cCwgb3BfaWQpOw0KPiA+ICsNCj4gPiArCQlpbnN0ciA9ICZzdWJvcC0+aW5zdHJzW29wX2lkXTsN Cj4gPiArCQlpZiAoc3Vib3AtPm5pbnN0cnMgPT0gMSkNCj4gPiArCQkJbmZjX29wLT5jbW5kc1sw XSA9IC0xOw0KPiA+ICsJCXN3aXRjaCAoaW5zdHItPnR5cGUpIHsNCj4gPiArCQljYXNlIE5BTkRf T1BfQ01EX0lOU1RSOg0KPiA+ICsJCQluZmNfb3AtPnR5cGUgPSBOQU5EX09QX0NNRF9JTlNUUjsN Cj4gPiArCQkJbmZjX29wLT5lbmRfY21kID0gb3BfaWQgLSAxOw0KPiA+ICsJCQlpZiAob3BfaWQp DQo+IA0KPiBZb3Ugc2hvdWxkIHB1dCB7IH0gb24gdGhlIGlmIGFsc28gaWYgdGhlIGVsc2Ugc3Rh dGVtZW50IG5lZWRzIGJyYWNlcy4NCk9rLCBidXQgSSBkaWRuJ3Qgc2VlIGFueSB3YXJuaW5nIGZy b20gY2hlY2twYXRjaC4NCj4gDQo+ID4gKwkJCQluZmNfb3AtPmNtbmRzWzFdID0gaW5zdHItPmN0 eC5jbWQub3Bjb2RlOw0KPiA+ICsJCQllbHNlIHsNCj4gPiArCQkJCW5mY19vcC0+Y21uZHNbMF0g PSBpbnN0ci0+Y3R4LmNtZC5vcGNvZGU7DQo+ID4gKwkJCQluZmNfb3AtPmNtbmRzWzFdID0gLTE7 DQo+ID4gKwkJCX0NCj4gPiArCQkJYnJlYWs7DQo+ID4gKw0KPiA+ICsJCWNhc2UgTkFORF9PUF9B RERSX0lOU1RSOg0KPiA+ICsJCQlvZmZzZXQgPSBuYW5kX3N1Ym9wX2dldF9hZGRyX3N0YXJ0X29m ZihzdWJvcCwgb3BfaWQpOw0KPiA+ICsJCQluYWRkcnMgPSBuYW5kX3N1Ym9wX2dldF9udW1fYWRk cl9jeWMoc3Vib3AsDQo+IG9wX2lkKTsNCj4gPiArCQkJYWRkcnMgPSAmaW5zdHItPmN0eC5hZGRy LmFkZHJzW29mZnNldF07DQo+ID4gKwkJCW5mY19vcC0+YWRkcnMgPSBpbnN0ci0+Y3R4LmFkZHIu YWRkcnNbb2Zmc2V0XTsNCj4gPiArCQkJZm9yIChpID0gMDsgaSA8IG1pbl90KHVuc2lnbmVkIGlu dCwgNCwgbmFkZHJzKTsgaSsrKQ0KPiA+ICsJCQkJbmZjX29wLT5hZGRycyB8PSBpbnN0ci0+Y3R4 LmFkZHIuYWRkcnNbaV0gPDwNCj4gPiArCQkJCQkJICg4ICogaSk7DQo+ID4gKw0KPiA+ICsJCQlp ZiAobmFkZHJzID49IDUpIHsNCj4gPiArCQkJCW5mY19vcC0+YWRkcnMgPj49IDE2Ow0KPiA+ICsJ CQkJbmZjX29wLT5hZGRycyB8PSAoYWRkcnNbNF0gPDwgMTYpOw0KPiA+ICsJCQkJbmZjX29wLT50 aGlyZHJvdyA9IDE7DQo+ID4gKwkJCX0NCj4gPiArCQkJbmZjX29wLT5uYWRkcnMgPSBuYW5kX3N1 Ym9wX2dldF9udW1fYWRkcl9jeWMNCj4gPiArCQkJCQkJKHN1Ym9wLCBvcF9pZCk7DQo+IA0KPiBE b24ndCBwdXQgdGhlIHBhcmFtZXRlcnMgb2YgYSBmdW5jdGlvbiBvbiB0aGUgbmV4dCBsaW5lIGxp a2UgdGhhdD8NCk9rLCBJIHdpbGwgdXBkYXRlIGl0Lg0KPiANCj4gPiArCQkJYnJlYWs7DQo+ID4g Kw0KPiA+ICsJCWNhc2UgTkFORF9PUF9EQVRBX0lOX0lOU1RSOg0KPiA+ICsJCQluZmNfb3AtPmRh dGFfaW5zdHIgPSBpbnN0cjsNCj4gPiArCQkJbmZjX29wLT50eXBlID0gTkFORF9PUF9EQVRBX0lO X0lOU1RSOw0KPiA+ICsJCQluZmNfb3AtPmRhdGFfaW5zdHJfaWR4ID0gb3BfaWQ7DQo+ID4gKwkJ CWJyZWFrOw0KPiA+ICsNCj4gPiArCQljYXNlIE5BTkRfT1BfREFUQV9PVVRfSU5TVFI6DQo+ID4g KwkJCW5mY19vcC0+ZGF0YV9pbnN0ciA9IGluc3RyOw0KPiA+ICsJCQluZmNfb3AtPnR5cGUgPSBO QU5EX09QX0RBVEFfSU5fSU5TVFI7DQo+IERBVEFfT1VUX0lOU1RSPw0KWWVzLCBJIHdpbGwgY29y cmVjdCBpdC4NCkJ1dCBJIGFtIHVzaW5nIGluc3RyLT50eXBlIGluIGNtZF9mdW5jdGlvbi4NCkkg d2lsbCB1cGRhdGUgaXQuDQo+IA0KPiBJcyB0aGlzIHJlYWxseSB0ZXN0ZWQ/DQpZZXMsIER1cmlu ZyBvbi1kaWUgRUNDIHRlc3QuDQpXaGVuIG5hbmRfbWljcm9uIGlzIGFza2luZyB0byBzZXQgc29t ZSBmZWF0dXJlcywgdGhpcyB3aWxsIGV4ZWN1dGUuDQo+IA0KPiA+ICsJCQluZmNfb3AtPmRhdGFf aW5zdHJfaWR4ID0gb3BfaWQ7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsNCj4gPiArCQljYXNlIE5B TkRfT1BfV0FJVFJEWV9JTlNUUjoNCj4gPiArCQkJbmZjX29wLT5yZHlfdGltZW91dF9tcyA9IGlu c3RyLQ0KPiA+Y3R4LndhaXRyZHkudGltZW91dF9tczsNCj4gPiArCQkJbmZjX29wLT5yZHlfZGVs YXlfbnMgPSBpbnN0ci0+ZGVsYXlfbnM7DQo+ID4gKwkJCW5mY19vcC0+d2FpdCA9IHRydWU7DQo+ ID4gKwkJCWJyZWFrOw0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoq DQo+ID4gKyAqIHBsMzUzX25hbmRfY21kX2Z1bmN0aW9uIC0gU2VuZCBjb21tYW5kIHRvIE5BTkQg ZGV2aWNlDQo+ID4gKyAqIEBjaGlwOglQb2ludGVyIHRvIHRoZSBOQU5EIGNoaXAgaW5mbyBzdHJ1 Y3R1cmUNCj4gPiArICogQHN1Ym9wOglQb2ludGVyIHRvIGFycmF5IG9mIGluc3RydWN0aW9ucw0K PiA+ICsgKiBSZXR1cm46CUFsd2F5cyByZXR1cm4gemVybw0KPiA+ICsgKi8NCj4gPiArc3RhdGlj IGludCBwbDM1M19uYW5kX2NtZF9mdW5jdGlvbihzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLA0KPiA+ ICsJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBuYW5kX3N1Ym9wICpzdWJvcCkgew0KPiA+ICsJc3Ry dWN0IG10ZF9pbmZvICptdGQgPSBuYW5kX3RvX210ZChjaGlwKTsNCj4gPiArCWNvbnN0IHN0cnVj dCBuYW5kX29wX2luc3RyICppbnN0cjsNCj4gPiArCXN0cnVjdCBwbDM1M19uZmNfb3AgbmZjX29w Ow0KPiANCj4gbmZjX29wID0ge307IHRvIGluaXRpYWxpemUgdG8gMC4NCk9rLCBJIHdpbGwgdXBk YXRlIGl0Lg0KPiANCj4gPiArCXN0cnVjdCBwbDM1M19uYW5kX2luZm8gKnhuYW5kID0NCj4gPiAr CQljb250YWluZXJfb2YoY2hpcCwgc3RydWN0IHBsMzUzX25hbmRfaW5mbywgY2hpcCk7DQo+ID4g Kwl2b2lkIF9faW9tZW0gKmNtZF9hZGRyOw0KPiA+ICsJdW5zaWduZWQgbG9uZyBjbWRfZGF0YSA9 IDAsIGVuZF9jbWRfdmFsaWQgPSAwOw0KPiA+ICsJdW5zaWduZWQgbG9uZyBjbWRfcGhhc2VfYWRk ciwgZGF0YV9waGFzZV9hZGRyLCBlbmRfY21kOw0KPiA+ICsJdW5zaWduZWQgbG9uZyB0aW1lb3V0 ID0gamlmZmllcyArIFBMMzUzX05BTkRfREVWX0JVU1lfVElNRU9VVDsNCj4gPiArCXUzMiBhZGRy Y3ljbGVzID0gMDsNCj4gPiArCXVuc2lnbmVkIGludCBvcF9pZCwgbGVuLCBvZmZzZXQ7DQo+ID4g Kw0KPiA+ICsJcGwzNTNfbmZjX3BhcnNlX2luc3RydWN0aW9ucyhjaGlwLCBzdWJvcCwgJm5mY19v cCk7DQo+ID4gKwlpbnN0ciA9IG5mY19vcC5kYXRhX2luc3RyOw0KPiA+ICsJb3BfaWQgPSBuZmNf b3AuZGF0YV9pbnN0cl9pZHg7DQo+ID4gKwlsZW4gPSBuYW5kX3N1Ym9wX2dldF9kYXRhX2xlbihz dWJvcCwgb3BfaWQpOw0KPiA+ICsJb2Zmc2V0ID0gbmFuZF9zdWJvcF9nZXRfZGF0YV9zdGFydF9v ZmYoc3Vib3AsIG9wX2lkKTsNCj4gPiArDQo+ID4gKwlpZiAobmZjX29wLmNtbmRzWzBdICE9IC0x KSB7DQo+ID4gKwkJaWYgKHhuYW5kLT5lbmRfY21kX3BlbmRpbmcpIHsNCj4gPiArCQkJLyoNCj4g PiArCQkJICogQ2hlY2sgZm9yIGVuZCBjb21tYW5kIGlmIHRoaXMgY29tbWFuZCByZXF1ZXN0IGlz DQo+ID4gKwkJCSAqIHNhbWUgYXMgdGhlIHBlbmRpbmcgY29tbWFuZCB0aGVuIHJldHVybg0KPiA+ ICsJCQkgKi8NCj4gPiArCQkJaWYgKHhuYW5kLT5lbmRfY21kID09IG5mY19vcC5jbW5kc1swXSkg ew0KPiA+ICsJCQkJeG5hbmQtPmVuZF9jbWQgPSAwOw0KPiA+ICsJCQkJeG5hbmQtPmVuZF9jbWRf cGVuZGluZyA9IDA7DQo+ID4gKwkJCQlyZXR1cm4gMDsNCj4gPiArCQkJfQ0KPiA+ICsJCX0NCj4g PiArDQo+ID4gKwkJLyogQ2xlYXIgaW50ZXJydXB0ICovDQo+ID4gKwkJcGwzNTNfc21jX2Nscl9u YW5kX2ludCgpOw0KPiA+ICsJCWVuZF9jbWRfdmFsaWQgPSAwOw0KPiANCj4gU3BhY2UNCk9rLCBJ IHdpbGwgY29ycmVjdCBpdC4NCj4gDQo+ID4gKwkJLyogR2V0IHRoZSBjb21tYW5kIHBoYXNlIGFk ZHJlc3MgKi8NCj4gPiArCQlpZiAobmZjX29wLmNtbmRzWzFdICE9IC0xKSB7DQo+ID4gKwkJCWVu ZF9jbWRfdmFsaWQgPSAxOw0KPiA+ICsJCX0gZWxzZSB7DQo+ID4gKwkJCWlmIChuZmNfb3AuY21u ZHNbMF0gPT0gTkFORF9DTURfUkVBRDApDQo+ID4gKwkJCQlyZXR1cm4gMDsNCj4gPiArCQl9DQo+ ID4gKwkJaWYgKG5mY19vcC5lbmRfY21kID09IE5BTkRfQ01EX05PTkUpDQo+ID4gKwkJCWVuZF9j bWQgPSAweDA7DQo+ID4gKwkJZWxzZQ0KPiA+ICsJCQllbmRfY21kID0gbmZjX29wLmNtbmRzWzFd Ow0KPiA+ICsNCj4gPiArCQlhZGRyY3ljbGVzID0gbmZjX29wLm5hZGRyczsNCj4gPiArCQlpZiAo bmZjX29wLmNtbmRzWzBdID09IE5BTkRfQ01EX1JFQUQwIHx8DQo+ID4gKwkJCW5mY19vcC5jbW5k c1swXSA9PSBOQU5EX0NNRF9TRVFJTikNCj4gPiArCQkJYWRkcmN5Y2xlcyA9IHhuYW5kLT5yb3df YWRkcl9jeWNsZXMgKw0KPiA+ICsJCQkJCXhuYW5kLT5jb2xfYWRkcl9jeWNsZXM7DQo+ID4gKwkJ ZWxzZSBpZiAoKG5mY19vcC5jbW5kc1swXSA9PSBOQU5EX0NNRF9FUkFTRTEpIHx8DQo+ID4gKwkJ CShuZmNfb3AuY21uZHNbMF0gPT0gTkFORF9DTURfRVJBU0UyKSkNCj4gPiArCQkJYWRkcmN5Y2xl cyA9IHhuYW5kLT5yb3dfYWRkcl9jeWNsZXM7DQo+ID4gKwkJZWxzZQ0KPiA+ICsJCQlhZGRyY3lj bGVzID0gbmZjX29wLm5hZGRyczsNCj4gDQo+IEEgc3dpdGNoIGJsb2NrIHdvdWxkIHByb2JhYmx5 IGJlIGFwcHJvcHJpYXRlLg0KWWVzIHdlIGNhbiB1c2UuDQo+IA0KPiA+ICsJCWNtZF9waGFzZV9h ZGRyID0gKHVuc2lnbmVkIGxvbmcgX19mb3JjZSl4bmFuZC0+bmFuZF9iYXNlICsNCj4gKA0KPiA+ ICsJCQkJIChhZGRyY3ljbGVzIDw8IEFERFJfQ1lDTEVTX1NISUZUKQl8DQo+ID4gKwkJCQkgKGVu ZF9jbWRfdmFsaWQgPDwgRU5EX0NNRF9WQUxJRF9TSElGVCkNCj4gCXwNCj4gPiArCQkJCSAoQ09N TUFORF9QSEFTRSkJCQl8DQo+ID4gKwkJCQkgKGVuZF9jbWQgPDwgRU5EX0NNRF9TSElGVCkJCXwN Cj4gPiArCQkJCSAobmZjX29wLmNtbmRzWzBdIDw8IFNUQVJUX0NNRF9TSElGVCkpOw0KPiA+ICsN Cj4gPiArCQljbWRfYWRkciA9ICh2b2lkIF9faW9tZW0gKiBfX2ZvcmNlKWNtZF9waGFzZV9hZGRy Ow0KPiANCj4gU3BhY2UNCk9rLCBJIHdpbGwgY29ycmVjIGl0Lg0KPiANCj4gPiArCQkvKiBHZXQg dGhlIGRhdGEgcGhhc2UgYWRkcmVzcyAqLw0KPiA+ICsJCWVuZF9jbWRfdmFsaWQgPSAwOw0KPiA+ ICsNCj4gPiArCQlkYXRhX3BoYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKXhuYW5k LT5uYW5kX2Jhc2UgKw0KPiAoDQo+ID4gKwkJCQkgICgweDAgPDwgQ0xFQVJfQ1NfU0hJRlQpCQl8 DQo+ID4gKwkJCQkgIChlbmRfY21kX3ZhbGlkIDw8IEVORF9DTURfVkFMSURfU0hJRlQpfA0KPiA+ ICsJCQkJICAoREFUQV9QSEFTRSkJCQkJfA0KPiA+ICsJCQkJICAoZW5kX2NtZCA8PCBFTkRfQ01E X1NISUZUKQkJfA0KPiA+ICsJCQkJICAoMHgwIDw8IEVDQ19MQVNUX1NISUZUKSk7DQo+ID4gKwkJ Y2hpcC0+SU9fQUREUl9SID0gKHZvaWQgX19pb21lbSAqDQo+IF9fZm9yY2UpZGF0YV9waGFzZV9h ZGRyOw0KPiANCj4gRG8geW91IHJlYWxseSBuZWVkIHRoaXMgIl9fZm9yY2UiID8NCkxldCBtZSBj aGVjayBhbmQgZ2V0IGJhY2sgdG8geW91IG9uIHRoaXMuDQo+IA0KPiA+ICsJCWNoaXAtPklPX0FE RFJfVyA9IGNoaXAtPklPX0FERFJfUjsNCj4gPiArCQkvKiBDb21tYW5kIHBoYXNlIEFYSSB3cml0 ZSAqLw0KPiA+ICsJCS8qIFJlYWQgJiBXcml0ZSAqLw0KPiA+ICsJCWlmIChuZmNfb3AudGhpcmRy b3cpIHsNCj4gPiArCQkJbmZjX29wLnRoaXJkcm93ID0gMDsNCj4gPiArCQkJaWYgKG10ZC0+d3Jp dGVzaXplID4gUEwzNTNfTkFORF9FQ0NfU0laRSkgew0KPiA+ICsJCQkJY21kX2RhdGEgfD0gbmZj X29wLmFkZHJzIDw8IDE2Ow0KPiA+ICsJCQkJLyogQW5vdGhlciBhZGRyZXNzIGN5Y2xlIGZvciBk ZXZpY2VzID4gMTI4TWlCDQo+ICovDQo+ID4gKwkJCQlpZiAoY2hpcC0+Y2hpcHNpemUgPiAoMTI4 IDw8IDIwKSkgew0KPiA+ICsJCQkJCXBsMzUzX25hbmRfd3JpdGUzMihjbWRfYWRkciwNCj4gY21k X2RhdGEpOw0KPiA+ICsJCQkJCWNtZF9kYXRhID0gKG5mY19vcC5hZGRycyA+PiAxNik7DQo+ID4g KwkJCQl9DQo+ID4gKwkJCX0NCj4gPiArCQl9ICBlbHNlIHsNCj4gPiArCQkJaWYgKG5mY19vcC5h ZGRycyAhPSAtMSkgew0KPiA+ICsJCQkJaW50IGNvbHVtbiA9IG5mY19vcC5hZGRyczsNCj4gPiAr CQkJCS8qDQo+ID4gKwkJCQkgKiBDaGFuZ2UgcmVhZC93cml0ZSBjb2x1bW4sIHJlYWQgaWQgZXRj DQo+ID4gKwkJCQkgKiBBZGp1c3QgY29sdW1ucyBmb3IgMTYgYml0IGJ1cyB3aWR0aA0KPiA+ICsJ CQkJICovDQo+ID4gKwkJCQlpZiAoKGNoaXAtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KSAm Jg0KPiA+ICsJCQkJKChuZmNfb3AuY21uZHNbMF0gPT0gTkFORF9DTURfUkVBRDApIHx8DQo+ID4g KwkJCQkobmZjX29wLmNtbmRzWzBdID09IE5BTkRfQ01EX1NFUUlOKSB8fA0KPiA+ICsJCQkJKG5m Y19vcC5jbW5kc1swXSA9PSBOQU5EX0NNRF9STkRPVVQpIHx8DQo+ID4gKwkJCQkobmZjX29wLmNt bmRzWzBdID09IE5BTkRfQ01EX1JORElOKSkpIHsNCj4gDQo+IEFsaWdubWVudC4NCk9rLCBJIHdp bGwgdXBkYXRlIGl0Lg0KPiANCj4gPiArCQkJCQljb2x1bW4gPj49IDE7DQo+ID4gKwkJCQl9DQo+ ID4gKwkJCQljbWRfZGF0YSA9IG5mY19vcC5hZGRyczsNCj4gPiArCQkJfQ0KPiA+ICsJCX0NCj4g PiArCQlwbDM1M19uYW5kX3dyaXRlMzIoY21kX2FkZHIsIGNtZF9kYXRhKTsNCj4gPiArCQlpZiAo bmZjX29wLnR5cGUgIT0gMCkgew0KPiA+ICsJCQl4bmFuZC0+ZW5kX2NtZCA9IG5mY19vcC5lbmRf Y21kOw0KPiA+ICsJCQl4bmFuZC0+ZW5kX2NtZF9wZW5kaW5nID0gMTsNCj4gPiArCQl9DQo+ID4g KwkJbmRlbGF5KDEwMCk7DQo+IA0KPiBXaHk/DQpJIGZvdW5kIHNvbWUgZXJyb3JzIGR1cmluZyBv bl9kaWUgdGVzdGluZywgaGVuY2UgSSBhZGRlZCB0aGlzIGRlbGF5Lg0KTGV0IG1lIGNoZWNrIG9u Y2UNCj4gDQo+ID4gKwkJaWYgKG5mY19vcC5jbW5kc1swXSA9PSAweGVmKQ0KPiA+ICsJCQluZmNf b3Aud2FpdCA9IGZhbHNlOw0KPiA+ICsJCWlmIChuZmNfb3Aud2FpdCkgew0KPiA+ICsJCQluZmNf b3Aud2FpdCA9IGZhbHNlOw0KPiANCj4gWW91IGNhbiByZW1vdmUgdGhpcyBsaW5lLg0KWWVzLCBp dCBpcyBpbml0aWFsaXppbmcgdG8gemVybyBpbiBjbWRfZnVuY3Rpb24uDQo+IA0KPiA+ICsJCQlk byB7DQo+ID4gKwkJCQlpZiAoY2hpcC0+ZGV2X3JlYWR5KG10ZCkpDQo+ID4gKwkJCQkJYnJlYWs7 DQo+ID4gKwkJCQljcHVfcmVsYXgoKTsNCj4gPiArCQkJfSB3aGlsZSAoIXRpbWVfYWZ0ZXJfZXEo amlmZmllcywgdGltZW91dCkpOw0KPiA+ICsJCQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCB0 aW1lb3V0KSkgew0KPiA+ICsJCQkJcHJfZXJyKCIlcyB0aW1lZCBvdXRcbiIsIF9fZnVuY19fKTsN Cj4gPiArCQkJCXJldHVybiAtRVRJTUVET1VUOw0KPiA+ICsJCQl9DQo+IA0KPiBTYW1lIGNvbW1l bnQgYWJvdXQgdGhlIHdhaXQuDQpPaywgSSB3aWxsIHVwZGF0ZSBpdC4NCj4gDQo+ID4gKwkJCXJl dHVybiAwOw0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAoaW5zdHIgPT0gTlVM TCkNCj4gDQo+IGlmICghaW5zdHIpDQpJIHdpbGwgbW9kaWZ5IGl0Lg0KPiANCj4gPiArCQlyZXR1 cm4gMDsNCj4gPiArCWlmIChpbnN0ci0+dHlwZSA9PSBOQU5EX09QX0RBVEFfSU5fSU5TVFIpDQo+ ID4gKwkJcmV0dXJuIHBsMzUzX25hbmRfcmVhZF9idWYoY2hpcCwgaW5zdHItPmN0eC5kYXRhLmJ1 Zi5pbiwgbGVuKTsNCj4gPiArDQo+ID4gKwlpZiAoaW5zdHItPnR5cGUgPT0gTkFORF9PUF9EQVRB X09VVF9JTlNUUikgew0KPiA+ICsJCWlmICgobmZjX29wLmNtbmRzWzBdID09IE5BTkRfQ01EX1BB R0VQUk9HKSB8fA0KPiA+ICsJCQkobmZjX29wLmNtbmRzWzBdID09IE5BTkRfQ01EX1NFUUlOKSkN Cj4gPiArCQkJcGwzNTNfbmFuZF93cml0ZV9wYWdlX3JhdyhtdGQsIGNoaXAsDQo+ID4gKwkJCWlu c3RyLT5jdHguZGF0YS5idWYub3V0LCAwLCBuZmNfb3AuYWRkcnMpOw0KPiA+ICsJCWVsc2UNCj4g PiArCQkJcGwzNTNfbmFuZF93cml0ZV9idWZfbChjaGlwLCBpbnN0ci0+Y3R4LmRhdGEuYnVmLm91 dCwNCj4gPiArCQkJCWxlbik7DQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4gKwl9DQo+ID4gKwlyZXR1 cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBuYW5kX29wX3Bh cnNlciBwbDM1M19uZmNfb3BfcGFyc2VyID0NCj4gTkFORF9PUF9QQVJTRVIoDQo+ID4gKwlOQU5E X09QX1BBUlNFUl9QQVRURVJOKA0KPiA+ICsJCXBsMzUzX25hbmRfY21kX2Z1bmN0aW9uLA0KPiA+ ICsJCU5BTkRfT1BfUEFSU0VSX1BBVF9DTURfRUxFTShmYWxzZSksDQo+ID4gKwkJTkFORF9PUF9Q QVJTRVJfUEFUX0FERFJfRUxFTShmYWxzZSwgNyksDQo+ID4gKwkJTkFORF9PUF9QQVJTRVJfUEFU X0RBVEFfSU5fRUxFTShmYWxzZSwgOCkpLA0KPiA+ICsJIE5BTkRfT1BfUEFSU0VSX1BBVFRFUk4o DQo+ID4gKwkJcGwzNTNfbmFuZF9jbWRfZnVuY3Rpb24sDQo+ID4gKwkJTkFORF9PUF9QQVJTRVJf UEFUX0NNRF9FTEVNKGZhbHNlKSwNCj4gPiArCQlOQU5EX09QX1BBUlNFUl9QQVRfQUREUl9FTEVN KGZhbHNlLCA3KSwNCj4gPiArCQlOQU5EX09QX1BBUlNFUl9QQVRfQ01EX0VMRU0oZmFsc2UpLA0K PiA+ICsJCU5BTkRfT1BfUEFSU0VSX1BBVF9XQUlUUkRZX0VMRU0oZmFsc2UpKSwNCj4gPiArCU5B TkRfT1BfUEFSU0VSX1BBVFRFUk4oDQo+ID4gKwkJcGwzNTNfbmFuZF9jbWRfZnVuY3Rpb24sDQo+ ID4gKwkJTkFORF9PUF9QQVJTRVJfUEFUX0NNRF9FTEVNKGZhbHNlKSwNCj4gPiArCQlOQU5EX09Q X1BBUlNFUl9QQVRfREFUQV9JTl9FTEVNKGZhbHNlLCA4KSksDQo+ID4gKwkgTkFORF9PUF9QQVJT RVJfUEFUVEVSTigNCj4gPiArCQlwbDM1M19uYW5kX2NtZF9mdW5jdGlvbiwNCj4gPiArCQlOQU5E X09QX1BBUlNFUl9QQVRfQ01EX0VMRU0oZmFsc2UpLA0KPiA+ICsJCU5BTkRfT1BfUEFSU0VSX1BB VF9BRERSX0VMRU0oZmFsc2UsIDcpLA0KPiA+ICsJCU5BTkRfT1BfUEFSU0VSX1BBVF9XQUlUUkRZ X0VMRU0oZmFsc2UpKSwNCj4gPiArCU5BTkRfT1BfUEFSU0VSX1BBVFRFUk4oDQo+ID4gKwkJcGwz NTNfbmFuZF9jbWRfZnVuY3Rpb24sDQo+ID4gKwkJTkFORF9PUF9QQVJTRVJfUEFUX0NNRF9FTEVN KGZhbHNlKSwNCj4gPiArCQlOQU5EX09QX1BBUlNFUl9QQVRfQUREUl9FTEVNKGZhbHNlLCA4KSwN Cj4gPiArCQlOQU5EX09QX1BBUlNFUl9QQVRfREFUQV9PVVRfRUxFTShmYWxzZSwgMjA0OCksDQo+ ID4gKwkJTkFORF9PUF9QQVJTRVJfUEFUX0NNRF9FTEVNKHRydWUpLA0KPiA+ICsJCU5BTkRfT1Bf UEFSU0VSX1BBVF9XQUlUUkRZX0VMRU0odHJ1ZSkpLA0KPiA+ICsJTkFORF9PUF9QQVJTRVJfUEFU VEVSTigNCj4gPiArCQlwbDM1M19uYW5kX2NtZF9mdW5jdGlvbiwNCj4gPiArCQlOQU5EX09QX1BB UlNFUl9QQVRfQ01EX0VMRU0oZmFsc2UpLA0KPiA+ICsJCU5BTkRfT1BfUEFSU0VSX1BBVF9XQUlU UkRZX0VMRU0oZmFsc2UpKSwNCj4gPiArCU5BTkRfT1BfUEFSU0VSX1BBVFRFUk4oDQo+ID4gKwkJ cGwzNTNfbmFuZF9jbWRfZnVuY3Rpb24sDQo+ID4gKwkJTkFORF9PUF9QQVJTRVJfUEFUX0RBVEFf SU5fRUxFTShmYWxzZSwgMjA0OCkpLA0KPiA+ICsJTkFORF9PUF9QQVJTRVJfUEFUVEVSTigNCj4g PiArCQlwbDM1M19uYW5kX2NtZF9mdW5jdGlvbiwNCj4gPiArCQlOQU5EX09QX1BBUlNFUl9QQVRf Q01EX0VMRU0oZmFsc2UpKSwNCj4gDQo+IEkgYW0gcHJldHR5IHN1cmUgeW91IGNhbiBmYWN0b3Jp emUgYWxsIHRoZXNlIHBhdHRlcm5zIG5vdy4gVXNlIHRoZSAib3B0aW9uYWwiDQo+IHBhcmFtZXRl ciBmb3IgdGhhdC4NCkNhbiB5b3UgZXhwbGFpbiBsaXR0bGUgYml0PyAgSSBkaWRuJ3QgZ2V0Lg0K PiANCj4gPiArCSk7DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHBsMzUzX25mY19leGVjX29wKHN0 cnVjdCBuYW5kX2NoaXAgKmNoaXAsDQo+ID4gKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmFuZF9v cGVyYXRpb24gKm9wLA0KPiA+ICsJCQkgICAgICAgYm9vbCBjaGVja19vbmx5KQ0KPiA+ICt7DQo+ ID4gKwlyZXR1cm4gbmFuZF9vcF9wYXJzZXJfZXhlY19vcChjaGlwLCAmcGwzNTNfbmZjX29wX3Bh cnNlciwNCj4gPiArCQkJCQkgICAgICBvcCwgY2hlY2tfb25seSk7DQo+ID4gK30NCj4gPiArDQo+ ID4gKy8qKg0KPiA+ICsgKiBwbDM1M19uYW5kX2RldmljZV9yZWFkeSAtIENoZWNrIGRldmljZSBy ZWFkeS9idXN5IGxpbmUNCj4gPiArICogQG10ZDoJUG9pbnRlciB0byB0aGUgbXRkX2luZm8gc3Ry dWN0dXJlDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjoJMCBvbiBidXN5IG9yIDEgb24gcmVhZHkg c3RhdGUNCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQgcGwzNTNfbmFuZF9kZXZpY2VfcmVhZHko c3RydWN0IG10ZF9pbmZvICptdGQpIHsNCj4gPiArCWlmIChwbDM1M19zbWNfZ2V0X25hbmRfaW50 X3N0YXR1c19yYXcoKSkgew0KPiANCj4gSSBkb24ndCB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgbmV3 IGZ1bmN0aW9uIGlzIGRlY2xhcmVkLg0KQWRkZWQgbGlua3MgYWJvdmUgZm9yIHRoaXMgZHJpdmVy Lg0KPiANCj4gPiArCQlwbDM1M19zbWNfY2xyX25hbmRfaW50KCk7DQo+ID4gKwkJcmV0dXJuIDE7 DQo+ID4gKwl9DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4g KyAqIHBsMzUzX25hbmRfZWNjX2luaXQgLSBJbml0aWFsaXplIHRoZSBlY2MgaW5mb3JtYXRpb24g YXMgcGVyIHRoZSBlY2MgbW9kZQ0KPiA+ICsgKiBAbXRkOglQb2ludGVyIHRvIHRoZSBtdGRfaW5m byBzdHJ1Y3R1cmUNCj4gPiArICogQGVjYzoJUG9pbnRlciB0byBFQ0MgY29udHJvbCBzdHJ1Y3R1 cmUNCj4gPiArICogQGVjY19tb2RlOglvbmRpZSBlY2Mgc3RhdHVzDQo+ID4gKyAqDQo+ID4gKyAq IFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIGVjYyBibG9jayBhbmQgZnVuY3Rpb25hbCBw b2ludGVycyBhcw0KPiA+ICtwZXIgdGhlDQo+ID4gKyAqIGVjYyBtb2RlDQo+ID4gKyAqLw0KPiA+ ICtzdGF0aWMgdm9pZCBwbDM1M19uYW5kX2VjY19pbml0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBz dHJ1Y3QgbmFuZF9lY2NfY3RybA0KPiAqZWNjLA0KPiA+ICsJaW50IGVjY19tb2RlKQ0KPiA+ICt7 DQo+ID4gKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkX3RvX25hbmQobXRkKTsNCj4gPiAr DQo+ID4gKwllY2MtPnJlYWRfb29iID0gcGwzNTNfbmFuZF9yZWFkX29vYjsNCj4gPiArCWVjYy0+ cmVhZF9wYWdlX3JhdyA9IHBsMzUzX25hbmRfcmVhZF9wYWdlX3JhdzsNCj4gPiArCWVjYy0+d3Jp dGVfb29iID0gcGwzNTNfbmFuZF93cml0ZV9vb2I7DQo+ID4gKwllY2MtPndyaXRlX3BhZ2VfcmF3 ID0gcGwzNTNfbmFuZF93cml0ZV9wYWdlX3JhdzsNCj4gPiArDQo+ID4gKwlpZiAoZWNjX21vZGUg PT0gTkFORF9FQ0NfT05fRElFKSB7DQo+ID4gKwkJcGwzNTNfc21jX3NldF9lY2NfbW9kZShQTDM1 M19TTUNfRUNDTU9ERV9CWVBBU1MpOw0KPiA+ICsNCj4gPiArCQkvKg0KPiA+ICsJCSAqIFRoZSBz b2Z0d2FyZSBFQ0Mgcm91dGluZXMgd29uJ3Qgd29yayB3aXRoIHRoZQ0KPiA+ICsJCSAqIFNNQyBj b250cm9sbGVyDQo+ID4gKwkJICovDQo+ID4gKwkJZWNjLT5yZWFkX3BhZ2UgPSBwbDM1M19uYW5k X3JlYWRfcGFnZV9yYXc7DQo+ID4gKwkJZWNjLT53cml0ZV9wYWdlID0gcGwzNTNfbmFuZF93cml0 ZV9wYWdlX3JhdzsNCj4gPiArCQkvKg0KPiA+ICsJCSAqIE9uLURpZSBFQ0Mgc3BhcmUgYnl0ZXMg b2Zmc2V0IDggaXMgdXNlZCBmb3IgRUNDIGNvZGVzDQo+ID4gKwkJICogVXNlIHRoZSBCQlQgcGF0 dGVybiBkZXNjcmlwdG9ycw0KPiA+ICsJCSAqLw0KPiA+ICsJCWNoaXAtPmJidF90ZCA9ICZiYnRf bWFpbl9kZXNjcjsNCj4gPiArCQljaGlwLT5iYnRfbWQgPSAmYmJ0X21pcnJvcl9kZXNjcjsNCj4g PiArCX0gZWxzZSB7DQo+ID4gKwkJZWNjLT5tb2RlID0gTkFORF9FQ0NfSFc7DQo+ID4gKwkJLyog SGFyZHdhcmUgRUNDIGdlbmVyYXRlcyAzIGJ5dGVzIEVDQyBjb2RlIGZvciBlYWNoIDUxMg0KPiBi eXRlcyAqLw0KPiA+ICsJCWVjYy0+Ynl0ZXMgPSAzOw0KPiA+ICsJCWVjYy0+c3RyZW5ndGggPSAx Ow0KPiA+ICsJCWVjYy0+Y2FsY3VsYXRlID0gcGwzNTNfbmFuZF9jYWxjdWxhdGVfaHdlY2M7DQo+ ID4gKwkJZWNjLT5jb3JyZWN0ID0gcGwzNTNfbmFuZF9jb3JyZWN0X2RhdGE7DQo+ID4gKwkJZWNj LT5od2N0bCA9IE5VTEw7DQo+IA0KPiBZb3UgY2FuIGRyb3AgdGhpcy4NCk9rLCBJIHdpbGwgdXBk YXRlIGl0Lg0KPiANCj4gPiArCQllY2MtPnJlYWRfcGFnZSA9IHBsMzUzX25hbmRfcmVhZF9wYWdl X2h3ZWNjOw0KPiA+ICsJCWVjYy0+c2l6ZSA9IFBMMzUzX05BTkRfRUNDX1NJWkU7DQo+ID4gKwkJ ZWNjLT53cml0ZV9wYWdlID0gcGwzNTNfbmFuZF93cml0ZV9wYWdlX2h3ZWNjOw0KPiA+ICsJCXBs MzUzX3NtY19zZXRfZWNjX3BnX3NpemUobXRkLT53cml0ZXNpemUpOw0KPiA+ICsJCXN3aXRjaCAo bXRkLT53cml0ZXNpemUpIHsNCj4gPiArCQljYXNlIDUxMjoNCj4gPiArCQljYXNlIDEwMjQ6DQo+ ID4gKwkJY2FzZSAyMDQ4Og0KPiANCj4gSSBwcmVmZXIgU1pfNTEyLCBTWl8xSywgU1pfMksuDQpP aywgSSB3aWxsIHVwZGF0ZSBpdC4NClRoYW5rcyBhZ2Fpbi4NCklmIGFueSBvZiB0aGUgYWJvdmUg Y29tbWVudHMgZ2l2ZW4gYnkgeW91LCBhcmUgbm90IGFkZHJlc3NlZCBwcm9wZXJseSwNClBsZWFz ZSBsZXQgbWUga25vdy4NCg0KVGhhbmtzLA0KTmFnYSBTdXJlc2hrdW1hciBSZWxpLg0KPiANCj4g PiArDQo+IAlwbDM1M19zbWNfc2V0X2VjY19tb2RlKFBMMzUzX1NNQ19FQ0NNT0RFX0FQQik7DQo+ ID4gKwkJCWJyZWFrOw0KPiA+ICsJCWRlZmF1bHQ6DQo+ID4gKwkJCS8qDQo+ID4gKwkJCSAqIFRo ZSBzb2Z0d2FyZSBFQ0Mgcm91dGluZXMgd29uJ3Qgd29yayB3aXRoIHRoZQ0KPiA+ICsJCQkgKiBT TUMgY29udHJvbGxlcg0KPiA+ICsJCQkgKi8NCj4gPiArCQkJZWNjLT5jYWxjdWxhdGUgPSBuYW5k X2NhbGN1bGF0ZV9lY2M7DQo+ID4gKwkJCWVjYy0+Y29ycmVjdCA9IG5hbmRfY29ycmVjdF9kYXRh Ow0KPiA+ICsJCQllY2MtPnJlYWRfcGFnZSA9IHBsMzUzX25hbmRfcmVhZF9wYWdlX3N3ZWNjOw0K PiA+ICsJCQllY2MtPndyaXRlX3BhZ2UgPSBwbDM1M19uYW5kX3dyaXRlX3BhZ2Vfc3dlY2M7DQo+ ID4gKwkJCWVjYy0+c2l6ZSA9IDI1NjsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJfQ0KPiA+ICsN Cj4gPiArCQlpZiAobXRkLT5vb2JzaXplID09IDE2KQ0KPiA+ICsJCQltdGRfc2V0X29vYmxheW91 dChtdGQsDQo+ICZwbDM1M19lY2Nfb29ibGF5b3V0MTZfb3BzKTsNCj4gPiArCQllbHNlIGlmICht dGQtPm9vYnNpemUgPT0gNjQpDQo+ID4gKwkJCW10ZF9zZXRfb29ibGF5b3V0KG10ZCwNCj4gJnBs MzUzX2VjY19vb2JsYXlvdXQ2NF9vcHMpOw0KPiA+ICsJfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICsv KioNCj4gPiArICogcGwzNTNfbmFuZF9wcm9iZSAtIFByb2JlIG1ldGhvZCBmb3IgdGhlIE5BTkQg ZHJpdmVyDQo+ID4gKyAqIEBwZGV2OglQb2ludGVyIHRvIHRoZSBwbGF0Zm9ybV9kZXZpY2Ugc3Ry dWN0dXJlDQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIGRy aXZlciBkYXRhIHN0cnVjdHVyZXMgYW5kIHRoZSBoYXJkd2FyZS4NCj4gPiArICoNCj4gPiArICog UmV0dXJuOgkwIG9uIHN1Y2Nlc3Mgb3IgZXJyb3IgdmFsdWUgb24gZmFpbHVyZQ0KPiA+ICsgKi8N Cj4gPiArc3RhdGljIGludCBwbDM1M19uYW5kX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpIHsNCj4gPiArCXN0cnVjdCBwbDM1M19uYW5kX2luZm8gKnhuYW5kOw0KPiA+ICsJc3Ry dWN0IG10ZF9pbmZvICptdGQ7DQo+ID4gKwlzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kX2NoaXA7DQo+ ID4gKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsNCj4gPiArDQo+ID4gKwl4bmFuZCA9IGRldm1fa3ph bGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnhuYW5kKSwgR0ZQX0tFUk5FTCk7DQo+ID4gKwlpZiAo IXhuYW5kKQ0KPiA+ICsJCXJldHVybiAtRU5PTUVNOw0KPiA+ICsNCj4gPiArCS8qIE1hcCBwaHlz aWNhbCBhZGRyZXNzIG9mIE5BTkQgZmxhc2ggKi8NCj4gPiArCXJlcyA9IHBsYXRmb3JtX2dldF9y ZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7DQo+ID4gKwl4bmFuZC0+bmFuZF9iYXNl ID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7DQo+ID4gKwlpZiAoSVNf RVJSKHhuYW5kLT5uYW5kX2Jhc2UpKQ0KPiA+ICsJCXJldHVybiBQVFJfRVJSKHhuYW5kLT5uYW5k X2Jhc2UpOw0KPiA+ICsNCj4gPiArCW5hbmRfY2hpcCA9ICZ4bmFuZC0+Y2hpcDsNCj4gPiArCW10 ZCA9IG5hbmRfdG9fbXRkKG5hbmRfY2hpcCk7DQo+ID4gKwluYW5kX2NoaXAtPmV4ZWNfb3AgPSBw bDM1M19uZmNfZXhlY19vcDsNCj4gPiArCW5hbmRfc2V0X2NvbnRyb2xsZXJfZGF0YShuYW5kX2No aXAsIHhuYW5kKTsNCj4gPiArCW10ZC0+cHJpdiA9IG5hbmRfY2hpcDsNCj4gPiArCW10ZC0+b3du ZXIgPSBUSElTX01PRFVMRTsNCj4gPiArCW10ZC0+bmFtZSA9IFBMMzUzX05BTkRfRFJJVkVSX05B TUU7DQo+ID4gKwluYW5kX3NldF9mbGFzaF9ub2RlKG5hbmRfY2hpcCwgcGRldi0+ZGV2Lm9mX25v ZGUpOw0KPiA+ICsNCj4gPiArCS8qIFNldCBhZGRyZXNzIG9mIE5BTkQgSU8gbGluZXMgKi8NCj4g PiArCW5hbmRfY2hpcC0+SU9fQUREUl9SID0geG5hbmQtPm5hbmRfYmFzZTsNCj4gPiArCW5hbmRf Y2hpcC0+SU9fQUREUl9XID0geG5hbmQtPm5hbmRfYmFzZTsNCj4gPiArCS8qIFNldCB0aGUgZHJp dmVyIGVudHJ5IHBvaW50cyBmb3IgTVREICovDQo+ID4gKwluYW5kX2NoaXAtPmRldl9yZWFkeSA9 IHBsMzUzX25hbmRfZGV2aWNlX3JlYWR5Ow0KPiA+ICsJbmFuZF9jaGlwLT5zZWxlY3RfY2hpcCA9 IHBsMzUzX25hbmRfc2VsZWN0X2NoaXA7DQo+ID4gKwkvKiBJZiB3ZSBkb24ndCBzZXQgdGhpcyBk ZWxheSBkcml2ZXIgc2V0cyAyMHVzIGJ5IGRlZmF1bHQgKi8NCj4gPiArCW5hbmRfY2hpcC0+Y2hp cF9kZWxheSA9IDMwOw0KPiA+ICsNCj4gPiArCS8qIFNldCB0aGUgZGV2aWNlIG9wdGlvbiBhbmQg Zmxhc2ggd2lkdGggKi8NCj4gPiArCW5hbmRfY2hpcC0+b3B0aW9ucyA9IE5BTkRfQlVTV0lEVEhf QVVUTzsNCj4gPiArCW5hbmRfY2hpcC0+YmJ0X29wdGlvbnMgPSBOQU5EX0JCVF9VU0VfRkxBU0g7 DQo+ID4gKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCB4bmFuZCk7DQo+ID4gKw0KPiA+ICsJ LyogZmlyc3Qgc2NhbiB0byBmaW5kIHRoZSBkZXZpY2UgYW5kIGdldCB0aGUgcGFnZSBzaXplICov DQo+ID4gKwlpZiAobmFuZF9zY2FuX2lkZW50KG10ZCwgMSwgTlVMTCkpIHsNCj4gPiArCQlkZXZf ZXJyKCZwZGV2LT5kZXYsICJuYW5kX3NjYW5faWRlbnQgZm9yIE5BTkQgZmFpbGVkXG4iKTsNCj4g PiArCQlyZXR1cm4gLUVOWElPOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXhuYW5kLT5yb3dfYWRk cl9jeWNsZXMgPSBuYW5kX2NoaXAtPm9uZmlfcGFyYW1zLmFkZHJfY3ljbGVzICYgMHhGOw0KPiA+ ICsJeG5hbmQtPmNvbF9hZGRyX2N5Y2xlcyA9DQo+ID4gKwkJCQkobmFuZF9jaGlwLT5vbmZpX3Bh cmFtcy5hZGRyX2N5Y2xlcyA+PiA0KSAmDQo+IDB4RjsNCj4gPiArDQo+ID4gKwlwbDM1M19uYW5k X2VjY19pbml0KG10ZCwgJm5hbmRfY2hpcC0+ZWNjLCBuYW5kX2NoaXAtPmVjYy5tb2RlKTsNCj4g PiArCWlmIChuYW5kX2NoaXAtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KQ0KPiA+ICsJCXBs MzUzX3NtY19zZXRfYnVzd2lkdGgoUEwzNTNfU01DX01FTV9XSURUSF8xNik7DQo+ID4gKwkvKiBz ZWNvbmQgcGhhc2Ugc2NhbiAqLw0KPiA+ICsJaWYgKG5hbmRfc2Nhbl90YWlsKG10ZCkpIHsNCj4g PiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJuYW5kX3NjYW5fdGFpbCBmb3IgTkFORCBmYWlsZWRc biIpOw0KPiA+ICsJCXJldHVybiAtRU5YSU87DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJbXRkX2Rl dmljZV9yZWdpc3RlcihtdGQsIE5VTEwsIDApOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogcGwzNTNfbmFuZF9yZW1vdmUgLSBSZW1vdmUg bWV0aG9kIGZvciB0aGUgTkFORCBkcml2ZXINCj4gPiArICogQHBkZXY6CVBvaW50ZXIgdG8gdGhl IHBsYXRmb3JtX2RldmljZSBzdHJ1Y3R1cmUNCj4gPiArICoNCj4gPiArICogVGhpcyBmdW5jdGlv biBpcyBjYWxsZWQgaWYgdGhlIGRyaXZlciBtb2R1bGUgaXMgYmVpbmcgdW5sb2FkZWQuIEl0DQo+ ID4gK2ZyZWVzIGFsbA0KPiA+ICsgKiByZXNvdXJjZXMgYWxsb2NhdGVkIHRvIHRoZSBkZXZpY2Uu DQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjoJMCBvbiBzdWNjZXNzIG9yIGVycm9yIHZhbHVlIG9u IGZhaWx1cmUNCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQgcGwzNTNfbmFuZF9yZW1vdmUoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikgew0KPiA+ICsJc3RydWN0IHBsMzUzX25hbmRfaW5m byAqeG5hbmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsNCj4gPiArCXN0cnVjdCBtdGRf aW5mbyAqbXRkID0gbmFuZF90b19tdGQoJnhuYW5kLT5jaGlwKTsNCj4gPiArDQo+ID4gKwkvKiBS ZWxlYXNlIHJlc291cmNlcywgdW5yZWdpc3RlciBkZXZpY2UgKi8NCj4gPiArCW5hbmRfcmVsZWFz ZShtdGQpOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKiBN YXRjaCB0YWJsZSBmb3IgZGV2aWNlIHRyZWUgYmluZGluZyAqLyBzdGF0aWMgY29uc3Qgc3RydWN0 DQo+ID4gK29mX2RldmljZV9pZCBwbDM1M19uYW5kX29mX21hdGNoW10gPSB7DQo+ID4gKwl7IC5j b21wYXRpYmxlID0gImFybSxwbDM1My1uYW5kLXIycDEiIH0sDQo+ID4gKwl7fSwNCj4gPiArfTsN Cj4gPiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgcGwzNTNfbmFuZF9vZl9tYXRjaCk7DQo+ID4g Kw0KPiA+ICsvKg0KPiA+ICsgKiBwbDM1M19uYW5kX2RyaXZlciAtIFRoaXMgc3RydWN0dXJlIGRl ZmluZXMgdGhlIE5BTkQgc3Vic3lzdGVtDQo+ID4gK3BsYXRmb3JtIGRyaXZlciAgKi8gc3RhdGlj IHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcGwzNTNfbmFuZF9kcml2ZXIgPQ0KPiA+ICt7DQo+ID4g KwkucHJvYmUJCT0gcGwzNTNfbmFuZF9wcm9iZSwNCj4gPiArCS5yZW1vdmUJCT0gcGwzNTNfbmFu ZF9yZW1vdmUsDQo+ID4gKwkuZHJpdmVyCQk9IHsNCj4gPiArCQkubmFtZQk9IFBMMzUzX05BTkRf RFJJVkVSX05BTUUsDQo+ID4gKwkJLm9mX21hdGNoX3RhYmxlID0gcGwzNTNfbmFuZF9vZl9tYXRj aCwNCj4gPiArCX0sDQo+ID4gK307DQo+ID4gKw0KPiA+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVy KHBsMzUzX25hbmRfZHJpdmVyKTsNCj4gPiArDQo+ID4gK01PRFVMRV9BVVRIT1IoIlhpbGlueCwg SW5jLiIpOw0KPiA+ICtNT0RVTEVfQUxJQVMoInBsYXRmb3JtOiIgUEwzNTNfTkFORF9EUklWRVJf TkFNRSk7DQo+ID4gK01PRFVMRV9ERVNDUklQVElPTigiQVJNIFBMMzUzIE5BTkQgRmxhc2ggRHJp dmVyIik7DQo+ID4gK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsNCj4gDQo+IFRoYW5rcywNCj4gTWlx dcOobA0KPiANCj4gLS0NCj4gTWlxdWVsIFJheW5hbCwgQm9vdGxpbiAoZm9ybWVybHkgRnJlZSBF bGVjdHJvbnMpIEVtYmVkZGVkIExpbnV4IGFuZCBLZXJuZWwNCj4gZW5naW5lZXJpbmcgaHR0cHM6 Ly9ib290bGluLmNvbQ0K