From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2DF09C10F0E for ; Mon, 15 Apr 2019 08:13:58 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id BE61320674 for ; Mon, 15 Apr 2019 08:13:57 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=microchiptechnology.onmicrosoft.com header.i=@microchiptechnology.onmicrosoft.com header.b="ewAuswAw" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727068AbfDOIN4 (ORCPT ); Mon, 15 Apr 2019 04:13:56 -0400 Received: from esa2.microchip.iphmx.com ([68.232.149.84]:11345 "EHLO esa2.microchip.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725994AbfDOIN4 (ORCPT ); Mon, 15 Apr 2019 04:13:56 -0400 X-IronPort-AV: E=Sophos;i="5.60,352,1549954800"; d="scan'208";a="30126538" Received: from smtpout.microchip.com (HELO email.microchip.com) ([198.175.253.82]) by esa2.microchip.iphmx.com with ESMTP/TLS/DHE-RSA-AES256-SHA; 15 Apr 2019 01:13:53 -0700 Received: from NAM03-DM3-obe.outbound.protection.outlook.com (10.10.215.89) by email.microchip.com (10.10.76.106) with Microsoft SMTP Server (TLS) id 14.3.352.0; Mon, 15 Apr 2019 01:13:53 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microchiptechnology.onmicrosoft.com; s=selector1-microchiptechnology-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=i7x/ZpInWdspQVVKQku3eDU97G7CPMnVbcbiHgqvm0g=; b=ewAuswAwtMqBfRmefmCwPRQlnXc7r+DS6MsWf20wRgmZoM1TNAxWPWVR9DDaZKUnAUiazixyFYkFtWTphO2A5z21yqQ2cIY8i8j175UEgBWCVzFTF7MM0mNnvMqE6FawZMiY/R0mWvM+1elanz2+npJC0TOCsv3fszOiz/snhVg= Received: from BN6PR11MB1842.namprd11.prod.outlook.com (10.175.98.146) by BN6PR11MB4003.namprd11.prod.outlook.com (10.255.129.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1792.19; Mon, 15 Apr 2019 08:13:50 +0000 Received: from BN6PR11MB1842.namprd11.prod.outlook.com ([fe80::e4c0:24a5:9a32:46e3]) by BN6PR11MB1842.namprd11.prod.outlook.com ([fe80::e4c0:24a5:9a32:46e3%9]) with mapi id 15.20.1792.018; Mon, 15 Apr 2019 08:13:50 +0000 From: To: , , , , , CC: , , , , Subject: Re: [PATCH 1/2] mtd: spi-nor: Move m25p80 code in spi-nor.c Thread-Topic: [PATCH 1/2] mtd: spi-nor: Move m25p80 code in spi-nor.c Thread-Index: AQHU7vGMUc9bp27N7EqzfFVWCqlzqqY86GKA Date: Mon, 15 Apr 2019 08:13:50 +0000 Message-ID: References: <20190409162651.24593-1-vigneshr@ti.com> <20190409162651.24593-2-vigneshr@ti.com> In-Reply-To: <20190409162651.24593-2-vigneshr@ti.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: VI1P195CA0091.EURP195.PROD.OUTLOOK.COM (2603:10a6:802:59::44) To BN6PR11MB1842.namprd11.prod.outlook.com (2603:10b6:404:101::18) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Tudor.Ambarus@microchip.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [94.177.32.154] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 3b847b7f-04c7-4921-ef54-08d6c17a4a26 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(5600140)(711020)(4605104)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);SRVR:BN6PR11MB4003; x-ms-traffictypediagnostic: BN6PR11MB4003: x-ms-exchange-purlcount: 1 x-microsoft-antispam-prvs: x-forefront-prvs: 000800954F x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(396003)(376002)(136003)(39860400002)(366004)(346002)(189003)(199004)(256004)(6486002)(186003)(14444005)(7736002)(68736007)(7416002)(305945005)(102836004)(76176011)(11346002)(71200400001)(71190400001)(229853002)(476003)(30864003)(6506007)(486006)(5660300002)(26005)(53546011)(6436002)(99286004)(446003)(52116002)(2616005)(386003)(316002)(54906003)(110136005)(4326008)(31696002)(86362001)(6512007)(6306002)(2906002)(6116002)(3846002)(966005)(25786009)(97736004)(72206003)(14454004)(478600001)(66066001)(105586002)(2501003)(53936002)(106356001)(36756003)(53946003)(31686004)(6246003)(8676002)(81156014)(81166006)(8936002)(2004002)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:BN6PR11MB4003;H:BN6PR11MB1842.namprd11.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: microchip.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: SZSkX45mEyjGyeYCfeHKg+bhV2DUOspUsqfZ/MikVIfTPConABATuUxF3GJJOvK0gQ4Xp2/S7I+HnEBVduDnxxSHfmnrNKiOI2D590qQUyfw5kQWKKYcEYE2pCTfcPIxfgWR4ja9KE5t96b4bH4i0B1kF4H4Ew09Ka86JNUOlX/kR+p1Y5Su1nrwi2l0vWhKQ1MWs+j4JkvJDyadgyAm17v7F9MNbWHC2l7sIClP6KKB5g1UDlLjM1gNOAtPdwgFBjhMD+BEYXH1JcRtG4jSBK0fV35cN98nFMjT3Sk2cStyULAUZHBn/jw9XCFUkxj3mQxSQRQMfg4Uj69YmiuTXhX304lQtiES9d9SCnzmAIWX+n6esN4gsSqxvJ6Ahp1l1DI+KeJTi6lWctLpbbg6qqaZnFoH4rU0ht9D02XJdAw= Content-Type: text/plain; charset="utf-8" Content-ID: <9CA779ED1C910849BC6BBC86FF990D92@namprd11.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 3b847b7f-04c7-4921-ef54-08d6c17a4a26 X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Apr 2019 08:13:50.1777 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3f4057f3-b418-4d4e-ba84-d55b4e897d88 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR11MB4003 X-OriginatorOrg: microchip.com Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGksDQoNClRoZSBnZW5lcmFsIGFwcHJvYWNoIGxvb2tzIGdvb2QsIGZldyBjb21tZW50cyBiZWxv dy4NCg0KT24gMDQvMDkvMjAxOSAwNzoyNiBQTSwgVmlnbmVzaCBSYWdoYXZlbmRyYSB3cm90ZToN Cj4gRXh0ZXJuYWwgRS1NYWlsDQo+IA0KPiANCj4gRnJvbTogQm9yaXMgQnJlemlsbG9uIDxib3Jp cy5icmV6aWxsb25AYm9vdGxpbi5jb20+DQo+IA0KPiBUaGUgbTI1cDgwIGRyaXZlciBpcyBhY3R1 YWxseSBhIGdlbmVyaWMgd3JhcHBlciBhcm91bmQgdGhlIHNwaS1tZW0NCj4gbGF5ZXIuIE5vdCBv bmx5IHRoZSBkcml2ZXIgbmFtZSBpcyBtaXNsZWFkaW5nLCBidXQgd2UnZCBleHBlY3Qgc3VjaCBh DQo+IGNvbW1vbiBsb2dpYyB0byBiZSBkaXJlY3RseSBhdmFpbGFibGUgaW4gdGhlIGNvcmUuIEFu b3RoZXIgcmVhc29uIGZvcg0KPiBtb3ZpbmcgdGhpcyBjb2RlIGlzIHRoYXQgU1BJIE5PUiBjb250 cm9sbGVyIGRyaXZlcnMgc2hvdWxkDQo+IHByb2dyZXNzaXZlbHkgYmUgcmVwbGFjZWQgYnkgU1BJ IGNvbnRyb2xsZXIgZHJpdmVycyBpbXBsZW1lbnRpbmcgdGhlDQo+IHNwaV9tZW1fb3BzIGludGVy ZmFjZSwgYW5kIHdoZW4gdGhlIGNvbnZlcnNpb24gaXMgZG9uZSwgd2Ugc2hvdWxkIGhhdmUNCj4g YSBzaW5nbGUgc3BpLW5vciBkcml2ZXIgZGlyZWN0bHkgaW50ZXJmYWNpbmcgd2l0aCB0aGUgc3Bp LW1lbSBsYXllci4NCj4gDQo+IFdoaWxlIG1vdmluZyB0aGUgY29kZSB3ZSBhbHNvIGZpeCBhIGxv bmdzdGFuZGluZyBpc3N1ZSB3aGVuDQo+IG5vbi1ETUEtYWJsZSBidWZmZXJzIGFyZSBwYXNzZWQg YnkgdGhlIE1URCBsYXllci4NCj4gDQo+IFNpZ25lZC1vZmYtYnk6IEJvcmlzIEJyZXppbGxvbiA8 Ym9yaXMuYnJlemlsbG9uQGJvb3RsaW4uY29tPg0KPiBbdmlnbmVzaHJAdGkuY29tOiB1c2UgZGV2 bV9rbWFsbG9jKCkgZm9yIGJvdW5jZSBidWZmZXIgYWxsb2NhdGlvbl0NCj4gU2lnbmVkLW9mZi1i eTogVmlnbmVzaCBSYWdoYXZlbmRyYSA8dmlnbmVzaHJAdGkuY29tPg0KPiAtLS0NCj4gQ2hhbmdl cyBmcm9tIFJGQzoNCj4gKiBVc2UgZGV2bV9rbWFsbG9jKCkgZm9yIGJvdW5jZSBidWZmZXIgYWxs b2NhdGlvbiBhcyBpdCBzdXBwb3J0cyBjYWNoZQ0KPiAgIGxpbmUgYWxpZ25lZCBidWZmZXJzIG5v dw0KDQp0aGVuIHNwaS1uYW5kIGhhcyB0byBiZSB1cGRhdGVkIHRvby4NCg0KPiAqIFJlYmFzZSBv bnRvIGxhdGVzdCBuZXh0DQo+ICogRml4IGJ1aWxkIHVzZXMgd2hlbiBzcGktbm9yIGlzIGJ1aWx0 IGFzIGEgbW9kdWxlDQo+IA0KPiAgZHJpdmVycy9tdGQvZGV2aWNlcy9LY29uZmlnICAgfCAgMTgg LQ0KPiAgZHJpdmVycy9tdGQvZGV2aWNlcy9NYWtlZmlsZSAgfCAgIDEgLQ0KPiAgZHJpdmVycy9t dGQvZGV2aWNlcy9tMjVwODAuYyAgfCAzNTEgLS0tLS0tLS0tLS0tLS0tLS0tDQo+ICBkcml2ZXJz L210ZC9zcGktbm9yL0tjb25maWcgICB8ICAgMiArDQo+ICBkcml2ZXJzL210ZC9zcGktbm9yL3Nw aS1ub3IuYyB8IDY1OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tDQo+ICBpbmNs dWRlL2xpbnV4L210ZC9zcGktbm9yLmggICB8ICAgOCArDQo+ICA2IGZpbGVzIGNoYW5nZWQsIDY0 MyBpbnNlcnRpb25zKCspLCAzOTYgZGVsZXRpb25zKC0pDQo+ICBkZWxldGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9tdGQvZGV2aWNlcy9tMjVwODAuYw0KPiANCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv bXRkL2RldmljZXMvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL2RldmljZXMvS2NvbmZpZw0KPiBpbmRl eCA3ZmNkYWY2YzI3OWQuLjI4MGVhOTBlYTJkMSAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9tdGQv ZGV2aWNlcy9LY29uZmlnDQo+ICsrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvS2NvbmZpZw0KPiBA QCAtNzgsMjQgKzc4LDYgQEAgY29uZmlnIE1URF9EQVRBRkxBU0hfT1RQDQo+ICAJICBvdGhlciBr ZXkgcHJvZHVjdCBkYXRhLiAgVGhlIHNlY29uZCBoYWxmIGlzIHByb2dyYW1tZWQgd2l0aCBhDQo+ ICAJICB1bmlxdWUtdG8tZWFjaC1jaGlwIGJpdCBwYXR0ZXJuIGF0IHRoZSBmYWN0b3J5Lg0KPiAg DQo+IC1jb25maWcgTVREX00yNVA4MA0KPiAtCXRyaXN0YXRlICJTdXBwb3J0IG1vc3QgU1BJIEZs YXNoIGNoaXBzIChBVDI2REYsIE0yNVAsIFcyNVgsIC4uLikiDQo+IC0JZGVwZW5kcyBvbiBTUElf TUFTVEVSICYmIE1URF9TUElfTk9SDQo+IC0Jc2VsZWN0IFNQSV9NRU0NCj4gLQloZWxwDQo+IC0J ICBUaGlzIGVuYWJsZXMgYWNjZXNzIHRvIG1vc3QgbW9kZXJuIFNQSSBmbGFzaCBjaGlwcywgdXNl ZCBmb3INCj4gLQkgIHByb2dyYW0gYW5kIGRhdGEgc3RvcmFnZS4gICBTZXJpZXMgc3VwcG9ydGVk IGluY2x1ZGUgQXRtZWwgQVQyNkRGLA0KPiAtCSAgU3BhbnNpb24gUzI1U0wsIFNTVCAyNVZGLCBT VCBNMjVQLCBhbmQgV2luYm9uZCBXMjVYLiAgT3RoZXIgY2hpcHMNCj4gLQkgIGFyZSBzdXBwb3J0 ZWQgYXMgd2VsbC4gIFNlZSB0aGUgZHJpdmVyIHNvdXJjZSBmb3IgdGhlIGN1cnJlbnQgbGlzdCwN Cj4gLQkgIG9yIHRvIGFkZCBvdGhlciBjaGlwcy4NCj4gLQ0KPiAtCSAgTm90ZSB0aGF0IHRoZSBv cmlnaW5hbCBEYXRhRmxhc2ggY2hpcHMgKEFUNDUgc2VyaWVzLCBub3QgQVQyNkRGKSwNCj4gLQkg IG5lZWQgYW4gZW50aXJlbHkgZGlmZmVyZW50IGRyaXZlci4NCj4gLQ0KPiAtCSAgU2V0IHVwIHlv dXIgc3BpIGRldmljZXMgd2l0aCB0aGUgcmlnaHQgYm9hcmQtc3BlY2lmaWMgcGxhdGZvcm0gZGF0 YSwNCj4gLQkgIGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgZGV2aWNlIHBhcnRpdGlvbmluZyBvciB0 byB1c2UgYSBkZXZpY2Ugd2hpY2gNCj4gLQkgIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgSkVERUMgSUQg aW5zdHJ1Y3Rpb24uDQo+IC0NCj4gIGNvbmZpZyBNVERfTUNIUDIzSzI1Ng0KPiAgCXRyaXN0YXRl ICJNaWNyb2NoaXAgMjNLMjU2IFNSQU0iDQo+ICAJZGVwZW5kcyBvbiBTUElfTUFTVEVSDQo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL01ha2VmaWxlIGIvZHJpdmVycy9tdGQvZGV2 aWNlcy9NYWtlZmlsZQ0KPiBpbmRleCA5NDg5NWVhYjMwNjYuLjk5MWM4ZDEyYzAxNiAxMDA2NDQN Cj4gLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9NYWtlZmlsZQ0KPiArKysgYi9kcml2ZXJzL210 ZC9kZXZpY2VzL01ha2VmaWxlDQo+IEBAIC0xMiw3ICsxMiw2IEBAIG9iai0kKENPTkZJR19NVERf TVREUkFNKQkrPSBtdGRyYW0ubw0KPiAgb2JqLSQoQ09ORklHX01URF9MQVJUKQkJKz0gbGFydC5v DQo+ICBvYmotJChDT05GSUdfTVREX0JMT0NLMk1URCkJKz0gYmxvY2sybXRkLm8NCj4gIG9iai0k KENPTkZJR19NVERfREFUQUZMQVNIKQkrPSBtdGRfZGF0YWZsYXNoLm8NCj4gLW9iai0kKENPTkZJ R19NVERfTTI1UDgwKQkrPSBtMjVwODAubw0KPiAgb2JqLSQoQ09ORklHX01URF9NQ0hQMjNLMjU2 KQkrPSBtY2hwMjNrMjU2Lm8NCj4gIG9iai0kKENPTkZJR19NVERfU1BFQVJfU01JKQkrPSBzcGVh cl9zbWkubw0KPiAgb2JqLSQoQ09ORklHX01URF9TU1QyNUwpCSs9IHNzdDI1bC5vDQo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL20yNXA4MC5jIGIvZHJpdmVycy9tdGQvZGV2aWNl cy9tMjVwODAuYw0KPiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggNjUxYmFiNmQ0 ZTMxLi4wMDAwMDAwMDAwMDANCj4gLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9tMjVwODAuYw0K PiArKysgL2Rldi9udWxsDQo+IEBAIC0xLDM1MSArMCwwIEBADQo+IC0vKg0KPiAtICogTVREIFNQ SSBkcml2ZXIgZm9yIFNUIE0yNVB4eCAoYW5kIHNpbWlsYXIpIHNlcmlhbCBmbGFzaCBjaGlwcw0K PiAtICoNCj4gLSAqIEF1dGhvcjogTWlrZSBMYXZlbmRlciwgbWlrZUBzdGVyb2lkbWljcm9zLmNv bQ0KPiAtICoNCj4gLSAqIENvcHlyaWdodCAoYykgMjAwNSwgSW50ZWMgQXV0b21hdGlvbiBJbmMu DQo+IC0gKg0KPiAtICogU29tZSBwYXJ0cyBhcmUgYmFzZWQgb24gbGFydC5jIGJ5IEFicmFoYW0g VmFuIERlciBNZXJ3ZQ0KPiAtICoNCj4gLSAqIENsZWFuZWQgdXAgYW5kIGdlbmVyYWxpemVkIGJh c2VkIG9uIG10ZF9kYXRhZmxhc2guYw0KPiAtICoNCj4gLSAqIFRoaXMgY29kZSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQo+IC0gKiBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24g MiBhcw0KPiAtICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uDQo+ IC0gKg0KPiAtICovDQo+IC0NCj4gLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4NCj4gLSNpbmNsdWRl IDxsaW51eC9lcnJuby5oPg0KPiAtI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiAtI2luY2x1 ZGUgPGxpbnV4L2RldmljZS5oPg0KPiAtDQo+IC0jaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPg0K PiAtI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+DQo+IC0NCj4gLSNpbmNsdWRlIDxs aW51eC9zcGkvc3BpLmg+DQo+IC0jaW5jbHVkZSA8bGludXgvc3BpL3NwaS1tZW0uaD4NCj4gLSNp bmNsdWRlIDxsaW51eC9zcGkvZmxhc2guaD4NCj4gLSNpbmNsdWRlIDxsaW51eC9tdGQvc3BpLW5v ci5oPg0KPiAtDQo+IC1zdHJ1Y3QgbTI1cCB7DQo+IC0Jc3RydWN0IHNwaV9tZW0JCSpzcGltZW07 DQo+IC0Jc3RydWN0IHNwaV9ub3IJCXNwaV9ub3I7DQo+IC19Ow0KPiAtDQo+IC1zdGF0aWMgaW50 IG0yNXA4MF9yZWFkX3JlZyhzdHJ1Y3Qgc3BpX25vciAqbm9yLCB1OCBjb2RlLCB1OCAqdmFsLCBp bnQgbGVuKQ0KPiAtew0KPiAtCXN0cnVjdCBtMjVwICpmbGFzaCA9IG5vci0+cHJpdjsNCj4gLQlz dHJ1Y3Qgc3BpX21lbV9vcCBvcCA9IFNQSV9NRU1fT1AoU1BJX01FTV9PUF9DTUQoY29kZSwgMSks DQo+IC0JCQkJCSAgU1BJX01FTV9PUF9OT19BRERSLA0KPiAtCQkJCQkgIFNQSV9NRU1fT1BfTk9f RFVNTVksDQo+IC0JCQkJCSAgU1BJX01FTV9PUF9EQVRBX0lOKGxlbiwgTlVMTCwgMSkpOw0KPiAt CXZvaWQgKnNjcmF0Y2hidWY7DQo+IC0JaW50IHJldDsNCj4gLQ0KPiAtCXNjcmF0Y2hidWYgPSBr bWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7DQo+IC0JaWYgKCFzY3JhdGNoYnVmKQ0KPiAtCQlyZXR1 cm4gLUVOT01FTTsNCj4gLQ0KPiAtCW9wLmRhdGEuYnVmLmluID0gc2NyYXRjaGJ1ZjsNCj4gLQly ZXQgPSBzcGlfbWVtX2V4ZWNfb3AoZmxhc2gtPnNwaW1lbSwgJm9wKTsNCj4gLQlpZiAocmV0IDwg MCkNCj4gLQkJZGV2X2VycigmZmxhc2gtPnNwaW1lbS0+c3BpLT5kZXYsICJlcnJvciAlZCByZWFk aW5nICV4XG4iLCByZXQsDQo+IC0JCQljb2RlKTsNCj4gLQllbHNlDQo+IC0JCW1lbWNweSh2YWws IHNjcmF0Y2hidWYsIGxlbik7DQo+IC0NCj4gLQlrZnJlZShzY3JhdGNoYnVmKTsNCj4gLQ0KPiAt CXJldHVybiByZXQ7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBpbnQgbTI1cDgwX3dyaXRlX3JlZyhz dHJ1Y3Qgc3BpX25vciAqbm9yLCB1OCBvcGNvZGUsIHU4ICpidWYsIGludCBsZW4pDQo+IC17DQo+ IC0Jc3RydWN0IG0yNXAgKmZsYXNoID0gbm9yLT5wcml2Ow0KPiAtCXN0cnVjdCBzcGlfbWVtX29w IG9wID0gU1BJX01FTV9PUChTUElfTUVNX09QX0NNRChvcGNvZGUsIDEpLA0KPiAtCQkJCQkgIFNQ SV9NRU1fT1BfTk9fQUREUiwNCj4gLQkJCQkJICBTUElfTUVNX09QX05PX0RVTU1ZLA0KPiAtCQkJ CQkgIFNQSV9NRU1fT1BfREFUQV9PVVQobGVuLCBOVUxMLCAxKSk7DQo+IC0Jdm9pZCAqc2NyYXRj aGJ1ZjsNCj4gLQlpbnQgcmV0Ow0KPiAtDQo+IC0Jc2NyYXRjaGJ1ZiA9IGttZW1kdXAoYnVmLCBs ZW4sIEdGUF9LRVJORUwpOw0KPiAtCWlmICghc2NyYXRjaGJ1ZikNCj4gLQkJcmV0dXJuIC1FTk9N RU07DQo+IC0NCj4gLQlvcC5kYXRhLmJ1Zi5vdXQgPSBzY3JhdGNoYnVmOw0KPiAtCXJldCA9IHNw aV9tZW1fZXhlY19vcChmbGFzaC0+c3BpbWVtLCAmb3ApOw0KPiAtCWtmcmVlKHNjcmF0Y2hidWYp Ow0KPiAtDQo+IC0JcmV0dXJuIHJldDsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHNzaXplX3QgbTI1 cDgwX3dyaXRlKHN0cnVjdCBzcGlfbm9yICpub3IsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwNCj4g LQkJCSAgICBjb25zdCB1X2NoYXIgKmJ1ZikNCj4gLXsNCj4gLQlzdHJ1Y3QgbTI1cCAqZmxhc2gg PSBub3ItPnByaXY7DQo+IC0Jc3RydWN0IHNwaV9tZW1fb3Agb3AgPQ0KPiAtCQkJU1BJX01FTV9P UChTUElfTUVNX09QX0NNRChub3ItPnByb2dyYW1fb3Bjb2RlLCAxKSwNCj4gLQkJCQkgICBTUElf TUVNX09QX0FERFIobm9yLT5hZGRyX3dpZHRoLCB0bywgMSksDQo+IC0JCQkJICAgU1BJX01FTV9P UF9OT19EVU1NWSwNCj4gLQkJCQkgICBTUElfTUVNX09QX0RBVEFfT1VUKGxlbiwgYnVmLCAxKSk7 DQo+IC0JaW50IHJldDsNCj4gLQ0KPiAtCS8qIGdldCB0cmFuc2ZlciBwcm90b2NvbHMuICovDQo+ IC0Jb3AuY21kLmJ1c3dpZHRoID0gc3BpX25vcl9nZXRfcHJvdG9jb2xfaW5zdF9uYml0cyhub3It PndyaXRlX3Byb3RvKTsNCj4gLQlvcC5hZGRyLmJ1c3dpZHRoID0gc3BpX25vcl9nZXRfcHJvdG9j b2xfYWRkcl9uYml0cyhub3ItPndyaXRlX3Byb3RvKTsNCj4gLQlvcC5kYXRhLmJ1c3dpZHRoID0g c3BpX25vcl9nZXRfcHJvdG9jb2xfZGF0YV9uYml0cyhub3ItPndyaXRlX3Byb3RvKTsNCj4gLQ0K PiAtCWlmIChub3ItPnByb2dyYW1fb3Bjb2RlID09IFNQSU5PUl9PUF9BQUlfV1AgJiYgbm9yLT5z c3Rfd3JpdGVfc2Vjb25kKQ0KPiAtCQlvcC5hZGRyLm5ieXRlcyA9IDA7DQo+IC0NCj4gLQlyZXQg PSBzcGlfbWVtX2FkanVzdF9vcF9zaXplKGZsYXNoLT5zcGltZW0sICZvcCk7DQo+IC0JaWYgKHJl dCkNCj4gLQkJcmV0dXJuIHJldDsNCj4gLQlvcC5kYXRhLm5ieXRlcyA9IGxlbiA8IG9wLmRhdGEu bmJ5dGVzID8gbGVuIDogb3AuZGF0YS5uYnl0ZXM7DQo+IC0NCj4gLQlyZXQgPSBzcGlfbWVtX2V4 ZWNfb3AoZmxhc2gtPnNwaW1lbSwgJm9wKTsNCj4gLQlpZiAocmV0KQ0KPiAtCQlyZXR1cm4gcmV0 Ow0KPiAtDQo+IC0JcmV0dXJuIG9wLmRhdGEubmJ5dGVzOw0KPiAtfQ0KPiAtDQo+IC0vKg0KPiAt ICogUmVhZCBhbiBhZGRyZXNzIHJhbmdlIGZyb20gdGhlIG5vciBjaGlwLiAgVGhlIGFkZHJlc3Mg cmFuZ2UNCj4gLSAqIG1heSBiZSBhbnkgc2l6ZSBwcm92aWRlZCBpdCBpcyB3aXRoaW4gdGhlIHBo eXNpY2FsIGJvdW5kYXJpZXMuDQo+IC0gKi8NCj4gLXN0YXRpYyBzc2l6ZV90IG0yNXA4MF9yZWFk KHN0cnVjdCBzcGlfbm9yICpub3IsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLA0KPiAtCQkJICAg dV9jaGFyICpidWYpDQo+IC17DQo+IC0Jc3RydWN0IG0yNXAgKmZsYXNoID0gbm9yLT5wcml2Ow0K PiAtCXN0cnVjdCBzcGlfbWVtX29wIG9wID0NCj4gLQkJCVNQSV9NRU1fT1AoU1BJX01FTV9PUF9D TUQobm9yLT5yZWFkX29wY29kZSwgMSksDQo+IC0JCQkJICAgU1BJX01FTV9PUF9BRERSKG5vci0+ YWRkcl93aWR0aCwgZnJvbSwgMSksDQo+IC0JCQkJICAgU1BJX01FTV9PUF9EVU1NWShub3ItPnJl YWRfZHVtbXksIDEpLA0KPiAtCQkJCSAgIFNQSV9NRU1fT1BfREFUQV9JTihsZW4sIGJ1ZiwgMSkp Ow0KPiAtCXNpemVfdCByZW1haW5pbmcgPSBsZW47DQo+IC0JaW50IHJldDsNCj4gLQ0KPiAtCS8q IGdldCB0cmFuc2ZlciBwcm90b2NvbHMuICovDQo+IC0Jb3AuY21kLmJ1c3dpZHRoID0gc3BpX25v cl9nZXRfcHJvdG9jb2xfaW5zdF9uYml0cyhub3ItPnJlYWRfcHJvdG8pOw0KPiAtCW9wLmFkZHIu YnVzd2lkdGggPSBzcGlfbm9yX2dldF9wcm90b2NvbF9hZGRyX25iaXRzKG5vci0+cmVhZF9wcm90 byk7DQo+IC0Jb3AuZHVtbXkuYnVzd2lkdGggPSBvcC5hZGRyLmJ1c3dpZHRoOw0KPiAtCW9wLmRh dGEuYnVzd2lkdGggPSBzcGlfbm9yX2dldF9wcm90b2NvbF9kYXRhX25iaXRzKG5vci0+cmVhZF9w cm90byk7DQo+IC0NCj4gLQkvKiBjb252ZXJ0IHRoZSBkdW1teSBjeWNsZXMgdG8gdGhlIG51bWJl ciBvZiBieXRlcyAqLw0KPiAtCW9wLmR1bW15Lm5ieXRlcyA9IChub3ItPnJlYWRfZHVtbXkgKiBv cC5kdW1teS5idXN3aWR0aCkgLyA4Ow0KPiAtDQo+IC0Jd2hpbGUgKHJlbWFpbmluZykgew0KPiAt CQlvcC5kYXRhLm5ieXRlcyA9IHJlbWFpbmluZyA8IFVJTlRfTUFYID8gcmVtYWluaW5nIDogVUlO VF9NQVg7DQo+IC0JCXJldCA9IHNwaV9tZW1fYWRqdXN0X29wX3NpemUoZmxhc2gtPnNwaW1lbSwg Jm9wKTsNCj4gLQkJaWYgKHJldCkNCj4gLQkJCXJldHVybiByZXQ7DQo+IC0NCj4gLQkJcmV0ID0g c3BpX21lbV9leGVjX29wKGZsYXNoLT5zcGltZW0sICZvcCk7DQo+IC0JCWlmIChyZXQpDQo+IC0J CQlyZXR1cm4gcmV0Ow0KPiAtDQo+IC0JCW9wLmFkZHIudmFsICs9IG9wLmRhdGEubmJ5dGVzOw0K PiAtCQlyZW1haW5pbmcgLT0gb3AuZGF0YS5uYnl0ZXM7DQo+IC0JCW9wLmRhdGEuYnVmLmluICs9 IG9wLmRhdGEubmJ5dGVzOw0KPiAtCX0NCj4gLQ0KPiAtCXJldHVybiBsZW47DQo+IC19DQo+IC0N Cj4gLS8qDQo+IC0gKiBib2FyZCBzcGVjaWZpYyBzZXR1cCBzaG91bGQgaGF2ZSBlbnN1cmVkIHRo ZSBTUEkgY2xvY2sgdXNlZCBoZXJlDQo+IC0gKiBtYXRjaGVzIHdoYXQgdGhlIFJFQUQgY29tbWFu ZCBzdXBwb3J0cywgYXQgbGVhc3QgdW50aWwgdGhpcyBkcml2ZXINCj4gLSAqIHVuZGVyc3RhbmRz IEZBU1RfUkVBRCAoZm9yIGNsb2NrcyBvdmVyIDI1IE1IeikuDQo+IC0gKi8NCj4gLXN0YXRpYyBp bnQgbTI1cF9wcm9iZShzdHJ1Y3Qgc3BpX21lbSAqc3BpbWVtKQ0KPiAtew0KPiAtCXN0cnVjdCBz cGlfZGV2aWNlICpzcGkgPSBzcGltZW0tPnNwaTsNCj4gLQlzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1f ZGF0YQkqZGF0YTsNCj4gLQlzdHJ1Y3QgbTI1cCAqZmxhc2g7DQo+IC0Jc3RydWN0IHNwaV9ub3Ig Km5vcjsNCj4gLQlzdHJ1Y3Qgc3BpX25vcl9od2NhcHMgaHdjYXBzID0gew0KPiAtCQkubWFzayA9 IFNOT1JfSFdDQVBTX1JFQUQgfA0KPiAtCQkJU05PUl9IV0NBUFNfUkVBRF9GQVNUIHwNCj4gLQkJ CVNOT1JfSFdDQVBTX1BQLA0KPiAtCX07DQo+IC0JY2hhciAqZmxhc2hfbmFtZTsNCj4gLQlpbnQg cmV0Ow0KPiAtDQo+IC0JZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoJnNwaW1lbS0+c3BpLT5kZXYp Ow0KPiAtDQo+IC0JZmxhc2ggPSBkZXZtX2t6YWxsb2MoJnNwaW1lbS0+c3BpLT5kZXYsIHNpemVv ZigqZmxhc2gpLCBHRlBfS0VSTkVMKTsNCj4gLQlpZiAoIWZsYXNoKQ0KPiAtCQlyZXR1cm4gLUVO T01FTTsNCj4gLQ0KPiAtCW5vciA9ICZmbGFzaC0+c3BpX25vcjsNCj4gLQ0KPiAtCS8qIGluc3Rh bGwgdGhlIGhvb2tzICovDQo+IC0Jbm9yLT5yZWFkID0gbTI1cDgwX3JlYWQ7DQo+IC0Jbm9yLT53 cml0ZSA9IG0yNXA4MF93cml0ZTsNCj4gLQlub3ItPndyaXRlX3JlZyA9IG0yNXA4MF93cml0ZV9y ZWc7DQo+IC0Jbm9yLT5yZWFkX3JlZyA9IG0yNXA4MF9yZWFkX3JlZzsNCj4gLQ0KPiAtCW5vci0+ ZGV2ID0gJnNwaW1lbS0+c3BpLT5kZXY7DQo+IC0Jc3BpX25vcl9zZXRfZmxhc2hfbm9kZShub3Is IHNwaS0+ZGV2Lm9mX25vZGUpOw0KPiAtCW5vci0+cHJpdiA9IGZsYXNoOw0KPiAtDQo+IC0Jc3Bp X21lbV9zZXRfZHJ2ZGF0YShzcGltZW0sIGZsYXNoKTsNCj4gLQlmbGFzaC0+c3BpbWVtID0gc3Bp bWVtOw0KPiAtDQo+IC0JaWYgKHNwaS0+bW9kZSAmIFNQSV9SWF9PQ1RBTCkgew0KPiAtCQlod2Nh cHMubWFzayB8PSBTTk9SX0hXQ0FQU19SRUFEXzFfMV84Ow0KPiAtDQo+IC0JCWlmIChzcGktPm1v ZGUgJiBTUElfVFhfT0NUQUwpDQo+IC0JCQlod2NhcHMubWFzayB8PSAoU05PUl9IV0NBUFNfUkVB RF8xXzhfOCB8DQo+IC0JCQkJCVNOT1JfSFdDQVBTX1BQXzFfMV84IHwNCj4gLQkJCQkJU05PUl9I V0NBUFNfUFBfMV84XzgpOw0KPiAtCX0gZWxzZSBpZiAoc3BpLT5tb2RlICYgU1BJX1JYX1FVQUQp IHsNCj4gLQkJaHdjYXBzLm1hc2sgfD0gU05PUl9IV0NBUFNfUkVBRF8xXzFfNDsNCj4gLQ0KPiAt CQlpZiAoc3BpLT5tb2RlICYgU1BJX1RYX1FVQUQpDQo+IC0JCQlod2NhcHMubWFzayB8PSAoU05P Ul9IV0NBUFNfUkVBRF8xXzRfNCB8DQo+IC0JCQkJCVNOT1JfSFdDQVBTX1BQXzFfMV80IHwNCj4g LQkJCQkJU05PUl9IV0NBUFNfUFBfMV80XzQpOw0KPiAtCX0gZWxzZSBpZiAoc3BpLT5tb2RlICYg U1BJX1JYX0RVQUwpIHsNCj4gLQkJaHdjYXBzLm1hc2sgfD0gU05PUl9IV0NBUFNfUkVBRF8xXzFf MjsNCj4gLQ0KPiAtCQlpZiAoc3BpLT5tb2RlICYgU1BJX1RYX0RVQUwpDQo+IC0JCQlod2NhcHMu bWFzayB8PSBTTk9SX0hXQ0FQU19SRUFEXzFfMl8yOw0KPiAtCX0NCj4gLQ0KPiAtCWlmIChkYXRh ICYmIGRhdGEtPm5hbWUpDQo+IC0JCW5vci0+bXRkLm5hbWUgPSBkYXRhLT5uYW1lOw0KPiAtDQo+ IC0JaWYgKCFub3ItPm10ZC5uYW1lKQ0KPiAtCQlub3ItPm10ZC5uYW1lID0gc3BpX21lbV9nZXRf bmFtZShzcGltZW0pOw0KPiAtDQo+IC0JLyogRm9yIHNvbWUgKGhpc3RvcmljYWw/KSByZWFzb24g bWFueSBwbGF0Zm9ybXMgcHJvdmlkZSB0d28gZGlmZmVyZW50DQo+IC0JICogbmFtZXMgaW4gZmxh c2hfcGxhdGZvcm1fZGF0YTogIm5hbWUiIGFuZCAidHlwZSIuIFF1aXRlIG9mdGVuIG5hbWUgaXMN Cj4gLQkgKiBzZXQgdG8gIm0yNXA4MCIgYW5kIHRoZW4gInR5cGUiIHByb3ZpZGVzIGEgcmVhbCBj aGlwIG5hbWUuDQo+IC0JICogSWYgdGhhdCdzIHRoZSBjYXNlLCByZXNwZWN0ICJ0eXBlIiBhbmQg aWdub3JlIGEgIm5hbWUiLg0KPiAtCSAqLw0KPiAtCWlmIChkYXRhICYmIGRhdGEtPnR5cGUpDQo+ IC0JCWZsYXNoX25hbWUgPSBkYXRhLT50eXBlOw0KPiAtCWVsc2UgaWYgKCFzdHJjbXAoc3BpLT5t b2RhbGlhcywgInNwaS1ub3IiKSkNCj4gLQkJZmxhc2hfbmFtZSA9IE5VTEw7IC8qIGF1dG8tZGV0 ZWN0ICovDQo+IC0JZWxzZQ0KPiAtCQlmbGFzaF9uYW1lID0gc3BpLT5tb2RhbGlhczsNCj4gLQ0K PiAtCXJldCA9IHNwaV9ub3Jfc2Nhbihub3IsIGZsYXNoX25hbWUsICZod2NhcHMpOw0KPiAtCWlm IChyZXQpDQo+IC0JCXJldHVybiByZXQ7DQo+IC0NCj4gLQlyZXR1cm4gbXRkX2RldmljZV9yZWdp c3Rlcigmbm9yLT5tdGQsIGRhdGEgPyBkYXRhLT5wYXJ0cyA6IE5VTEwsDQo+IC0JCQkJICAgZGF0 YSA/IGRhdGEtPm5yX3BhcnRzIDogMCk7DQo+IC19DQo+IC0NCj4gLQ0KPiAtc3RhdGljIGludCBt MjVwX3JlbW92ZShzdHJ1Y3Qgc3BpX21lbSAqc3BpbWVtKQ0KPiAtew0KPiAtCXN0cnVjdCBtMjVw CSpmbGFzaCA9IHNwaV9tZW1fZ2V0X2RydmRhdGEoc3BpbWVtKTsNCj4gLQ0KPiAtCXNwaV9ub3Jf cmVzdG9yZSgmZmxhc2gtPnNwaV9ub3IpOw0KPiAtDQo+IC0JLyogQ2xlYW4gdXAgTVREIHN0dWZm LiAqLw0KPiAtCXJldHVybiBtdGRfZGV2aWNlX3VucmVnaXN0ZXIoJmZsYXNoLT5zcGlfbm9yLm10 ZCk7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkIG0yNXBfc2h1dGRvd24oc3RydWN0IHNwaV9t ZW0gKnNwaW1lbSkNCj4gLXsNCj4gLQlzdHJ1Y3QgbTI1cCAqZmxhc2ggPSBzcGlfbWVtX2dldF9k cnZkYXRhKHNwaW1lbSk7DQo+IC0NCj4gLQlzcGlfbm9yX3Jlc3RvcmUoJmZsYXNoLT5zcGlfbm9y KTsNCj4gLX0NCj4gLS8qDQo+IC0gKiBEbyBOT1QgYWRkIHRvIHRoaXMgYXJyYXkgd2l0aG91dCBy ZWFkaW5nIHRoZSBmb2xsb3dpbmc6DQo+IC0gKg0KPiAtICogSGlzdG9yaWNhbGx5LCBtYW55IGZs YXNoIGRldmljZXMgYXJlIGJvdW5kIHRvIHRoaXMgZHJpdmVyIGJ5IHRoZWlyIG5hbWUuIEJ1dA0K PiAtICogc2luY2UgbW9zdCBvZiB0aGVzZSBmbGFzaCBhcmUgY29tcGF0aWJsZSB0byBzb21lIGV4 dGVudCwgYW5kIHRoZWlyDQo+IC0gKiBkaWZmZXJlbmNlcyBjYW4gb2Z0ZW4gYmUgZGlmZmVyZW50 aWF0ZWQgYnkgdGhlIEpFREVDIHJlYWQtSUQgY29tbWFuZCwgd2UNCj4gLSAqIGVuY291cmFnZSBu ZXcgdXNlcnMgdG8gYWRkIHN1cHBvcnQgdG8gdGhlIHNwaS1ub3IgbGlicmFyeSwgYW5kIHNpbXBs eSBiaW5kDQo+IC0gKiBhZ2FpbnN0IGEgZ2VuZXJpYyBzdHJpbmcgaGVyZSAoZS5nLiwgImplZGVj LHNwaS1ub3IiKS4NCj4gLSAqDQo+IC0gKiBNYW55IGZsYXNoIG5hbWVzIGFyZSBrZXB0IGhlcmUg aW4gdGhpcyBsaXN0IChhcyB3ZWxsIGFzIGluIHNwaS1ub3IuYykgdG8NCj4gLSAqIGtlZXAgdGhl bSBhdmFpbGFibGUgYXMgbW9kdWxlIGFsaWFzZXMgZm9yIGV4aXN0aW5nIHBsYXRmb3Jtcy4NCj4g LSAqLw0KPiAtc3RhdGljIGNvbnN0IHN0cnVjdCBzcGlfZGV2aWNlX2lkIG0yNXBfaWRzW10gPSB7 DQo+IC0JLyoNCj4gLQkgKiBBbGxvdyBub24tRFQgcGxhdGZvcm0gZGV2aWNlcyB0byBiaW5kIHRv IHRoZSAic3BpLW5vciIgbW9kYWxpYXMsIGFuZA0KPiAtCSAqIGhhY2sgYXJvdW5kIHRoZSBmYWN0 IHRoYXQgdGhlIFNQSSBjb3JlIGRvZXMgbm90IHByb3ZpZGUgdWV2ZW50DQo+IC0JICogbWF0Y2hp bmcgZm9yIC5vZl9tYXRjaF90YWJsZQ0KPiAtCSAqLw0KPiAtCXsic3BpLW5vciJ9LA0KPiAtDQo+ IC0JLyoNCj4gLQkgKiBFbnRyaWVzIG5vdCB1c2VkIGluIERUcyB0aGF0IHNob3VsZCBiZSBzYWZl IHRvIGRyb3AgYWZ0ZXIgcmVwbGFjaW5nDQo+IC0JICogdGhlbSB3aXRoICJzcGktbm9yIiBpbiBw bGF0Zm9ybSBkYXRhLg0KPiAtCSAqLw0KPiAtCXsiczI1c2wwNjRhIn0sCXsidzI1eDE2In0sCXsi bTI1cDEwIn0sCXsibTI1cHg2NCJ9LA0KPiAtDQo+IC0JLyoNCj4gLQkgKiBFbnRyaWVzIHRoYXQg d2VyZSB1c2VkIGluIERUcyB3aXRob3V0ICJqZWRlYyxzcGktbm9yIiBmYWxsYmFjayBhbmQNCj4g LQkgKiBzaG91bGQgYmUga2VwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4NCj4gLQkgKi8N Cj4gLQl7ImF0MjVkZjMyMWEifSwJeyJhdDI1ZGY2NDEifSwJeyJhdDI2ZGYwODFhIn0sDQo+IC0J eyJteDI1bDQwMDVhIn0sCXsibXgyNWwxNjA2ZSJ9LAl7Im14MjVsNjQwNWQifSwJeyJteDI1bDEy ODA1ZCJ9LA0KPiAtCXsibXgyNWwyNTYzNWUifSx7Im14NjZsNTEyMzVsIn0sDQo+IC0JeyJuMjVx MDY0In0sCXsibjI1cTEyOGExMSJ9LAl7Im4yNXExMjhhMTMifSwJeyJuMjVxNTEyYSJ9LA0KPiAt CXsiczI1ZmwyNTZzMSJ9LAl7InMyNWZsNTEycyJ9LAl7InMyNXNsMTI4MDEifSwJeyJzMjVmbDAw OGsifSwNCj4gLQl7InMyNWZsMDY0ayJ9LA0KPiAtCXsic3N0MjV2ZjA0MGIifSx7InNzdDI1dmYw MTZiIn0seyJzc3QyNXZmMDMyYiJ9LHsic3N0MjV3ZjA0MCJ9LA0KPiAtCXsibTI1cDQwIn0sCXsi bTI1cDgwIn0sCXsibTI1cDE2In0sCXsibTI1cDMyIn0sDQo+IC0JeyJtMjVwNjQifSwJeyJtMjVw MTI4In0sDQo+IC0JeyJ3MjV4ODAifSwJeyJ3MjV4MzIifSwJeyJ3MjVxMzIifSwJeyJ3MjVxMzJk dyJ9LA0KPiAtCXsidzI1cTgwYmwifSwJeyJ3MjVxMTI4In0sCXsidzI1cTI1NiJ9LA0KPiAtDQo+ IC0JLyogRmxhc2hlcyB0aGF0IGNhbid0IGJlIGRldGVjdGVkIHVzaW5nIEpFREVDICovDQo+IC0J eyJtMjVwMDUtbm9uamVkZWMifSwJeyJtMjVwMTAtbm9uamVkZWMifSwJeyJtMjVwMjAtbm9uamVk ZWMifSwNCj4gLQl7Im0yNXA0MC1ub25qZWRlYyJ9LAl7Im0yNXA4MC1ub25qZWRlYyJ9LAl7Im0y NXAxNi1ub25qZWRlYyJ9LA0KPiAtCXsibTI1cDMyLW5vbmplZGVjIn0sCXsibTI1cDY0LW5vbmpl ZGVjIn0sCXsibTI1cDEyOC1ub25qZWRlYyJ9LA0KPiAtDQo+IC0JLyogRXZlcnNwaW4gTVJBTXMg KG5vbi1KRURFQykgKi8NCj4gLQl7ICJtcjI1aDEyOCIgfSwgLyogMTI4IEtpYiwgNDAgTUh6ICov DQo+IC0JeyAibXIyNWgyNTYiIH0sIC8qIDI1NiBLaWIsIDQwIE1IeiAqLw0KPiAtCXsgIm1yMjVo MTAiIH0sICAvKiAgIDEgTWliLCA0MCBNSHogKi8NCj4gLQl7ICJtcjI1aDQwIiB9LCAgLyogICA0 IE1pYiwgNDAgTUh6ICovDQo+IC0NCj4gLQl7IH0sDQo+IC19Ow0KPiAtTU9EVUxFX0RFVklDRV9U QUJMRShzcGksIG0yNXBfaWRzKTsNCj4gLQ0KPiAtc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZp Y2VfaWQgbTI1cF9vZl90YWJsZVtdID0gew0KPiAtCS8qDQo+IC0JICogR2VuZXJpYyBjb21wYXRp YmlsaXR5IGZvciBTUEkgTk9SIHRoYXQgY2FuIGJlIGlkZW50aWZpZWQgYnkgdGhlDQo+IC0JICog SkVERUMgUkVBRCBJRCBvcGNvZGUgKDB4OUYpLiBVc2UgdGhpcywgaWYgcG9zc2libGUuDQo+IC0J ICovDQo+IC0JeyAuY29tcGF0aWJsZSA9ICJqZWRlYyxzcGktbm9yIiB9LA0KPiAtCXt9DQo+IC19 Ow0KPiAtTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbTI1cF9vZl90YWJsZSk7DQo+IC0NCj4gLXN0 YXRpYyBzdHJ1Y3Qgc3BpX21lbV9kcml2ZXIgbTI1cDgwX2RyaXZlciA9IHsNCj4gLQkuc3BpZHJ2 ID0gew0KPiAtCQkuZHJpdmVyID0gew0KPiAtCQkJLm5hbWUJPSAibTI1cDgwIiwNCj4gLQkJCS5v Zl9tYXRjaF90YWJsZSA9IG0yNXBfb2ZfdGFibGUsDQo+IC0JCX0sDQo+IC0JCS5pZF90YWJsZQk9 IG0yNXBfaWRzLA0KPiAtCX0sDQo+IC0JLnByb2JlCT0gbTI1cF9wcm9iZSwNCj4gLQkucmVtb3Zl CT0gbTI1cF9yZW1vdmUsDQo+IC0JLnNodXRkb3duCT0gbTI1cF9zaHV0ZG93biwNCj4gLQ0KPiAt CS8qIFJFVklTSVQ6IG1hbnkgb2YgdGhlc2UgY2hpcHMgaGF2ZSBkZWVwIHBvd2VyLWRvd24gbW9k ZXMsIHdoaWNoDQo+IC0JICogc2hvdWxkIGNsZWFybHkgYmUgZW50ZXJlZCBvbiBzdXNwZW5kKCkg dG8gbWluaW1pemUgcG93ZXIgdXNlLg0KPiAtCSAqIEFuZCBhbHNvIHdoZW4gdGhleSdyZSBvdGhl cndpc2UgaWRsZS4uLg0KPiAtCSAqLw0KPiAtfTsNCj4gLQ0KPiAtbW9kdWxlX3NwaV9tZW1fZHJp dmVyKG0yNXA4MF9kcml2ZXIpOw0KPiAtDQo+IC1NT0RVTEVfTElDRU5TRSgiR1BMIik7DQo+IC1N T0RVTEVfQVVUSE9SKCJNaWtlIExhdmVuZGVyIik7DQo+IC1NT0RVTEVfREVTQ1JJUFRJT04oIk1U RCBTUEkgZHJpdmVyIGZvciBTVCBNMjVQeHggZmxhc2ggY2hpcHMiKTsNCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvbXRkL3NwaS1ub3IvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL3NwaS1ub3IvS2NvbmZp Zw0KPiBpbmRleCBkYWI5ODY2OTEyNjcuLjBjMWI3ODUxNjIxZiAxMDA2NDQNCj4gLS0tIGEvZHJp dmVycy9tdGQvc3BpLW5vci9LY29uZmlnDQo+ICsrKyBiL2RyaXZlcnMvbXRkL3NwaS1ub3IvS2Nv bmZpZw0KPiBAQCAtMSw2ICsxLDggQEANCj4gIG1lbnVjb25maWcgTVREX1NQSV9OT1INCj4gIAl0 cmlzdGF0ZSAiU1BJLU5PUiBkZXZpY2Ugc3VwcG9ydCINCj4gIAlkZXBlbmRzIG9uIE1URA0KPiAr CWRlcGVuZHMgb24gTVREICYmIFNQSV9NQVNURVINCj4gKwlzZWxlY3QgU1BJX01FTQ0KPiAgCWhl bHANCj4gIAkgIFRoaXMgaXMgdGhlIGZyYW1ld29yayBmb3IgdGhlIFNQSSBOT1Igd2hpY2ggY2Fu IGJlIHVzZWQgYnkgdGhlIFNQSQ0KPiAgCSAgZGV2aWNlIGRyaXZlcnMgYW5kIHRoZSBTUEktTk9S IGRldmljZSBkcml2ZXIuDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9zcGktbm9yL3NwaS1u b3IuYyBiL2RyaXZlcnMvbXRkL3NwaS1ub3Ivc3BpLW5vci5jDQo+IGluZGV4IDczMTcyZDdmNTEy Yi4uMDNjOGMzNDZjOWFlIDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL210ZC9zcGktbm9yL3NwaS1u b3IuYw0KPiArKysgYi9kcml2ZXJzL210ZC9zcGktbm9yL3NwaS1ub3IuYw0KPiBAQCAtMTksNiAr MTksNyBAQA0KPiAgDQo+ICAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPg0KPiAgI2luY2x1ZGUg PGxpbnV4L29mX3BsYXRmb3JtLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvc2NoZWQvdGFza19zdGFj ay5oPg0KPiAgI2luY2x1ZGUgPGxpbnV4L3NwaS9mbGFzaC5oPg0KPiAgI2luY2x1ZGUgPGxpbnV4 L210ZC9zcGktbm9yLmg+DQo+ICANCj4gQEAgLTI4OCw2ICsyODksMTc0IEBAIHN0cnVjdCBmbGFz aF9pbmZvIHsNCj4gIA0KPiAgI2RlZmluZSBKRURFQ19NRlIoaW5mbykJKChpbmZvKS0+aWRbMF0p DQo+ICANCj4gK3N0YXRpYyBpbnQgc3BpX25vcl9leGVjX29wKHN0cnVjdCBzcGlfbm9yICpub3Is IHN0cnVjdCBzcGlfbWVtX29wICpvcCwNCj4gKwkJCSAgIHU2NCAqYWRkciwgdm9pZCAqYnVmLCB1 bnNpZ25lZCBpbnQgbGVuKQ0KDQpzaXplX3QgZm9yIGxlbj8NCg0KPiArew0KPiArCWludCByZXQ7 DQo+ICsJYm9vbCB1c2Vib3VuY2VidWY7DQo+ICsNCj4gKwlpZiAoIW9wIHx8IChsZW4gJiYgIWJ1 ZikpDQo+ICsJCXJldHVybiAtRUlOVkFMOw0KPiArDQo+ICsJaWYgKG9wLT5hZGRyLm5ieXRlcyAm JiBhZGRyKQ0KPiArCQlvcC0+YWRkci52YWwgPSAqYWRkcjsNCj4gKw0KPiArCW9wLT5kYXRhLm5i eXRlcyA9IGxlbjsNCj4gKw0KPiArCWlmIChvYmplY3RfaXNfb25fc3RhY2soYnVmKSB8fCAhdmly dF9hZGRyX3ZhbGlkKGJ1ZikpDQo+ICsJCXVzZWJvdW5jZWJ1ZiA9IHRydWU7DQo+ICsJaWYgKGxl biAmJiB1c2Vib3VuY2VidWYpIHsNCj4gKwkJaWYgKGxlbiA+IG5vci0+Ym91bmNlYnVmX3NpemUp DQo+ICsJCQlyZXR1cm4gLUVOT1RTVVBQOw0KPiArDQo+ICsJCWlmIChvcC0+ZGF0YS5kaXIgPT0g U1BJX01FTV9EQVRBX0lOKSB7DQo+ICsJCQlvcC0+ZGF0YS5idWYuaW4gPSBub3ItPmJvdW5jZWJ1 ZjsNCj4gKwkJfSBlbHNlIHsNCj4gKwkJCW9wLT5kYXRhLmJ1Zi5vdXQgPSBub3ItPmJvdW5jZWJ1 ZjsNCj4gKwkJCW1lbWNweShub3ItPmJvdW5jZWJ1ZiwgYnVmLCBsZW4pOw0KPiArCQl9DQo+ICsJ fSBlbHNlIHsNCj4gKwkJb3AtPmRhdGEuYnVmLm91dCA9IGJ1ZjsNCj4gKwl9DQo+ICsNCj4gKwly ZXQgPSBzcGlfbWVtX2V4ZWNfb3Aobm9yLT5zcGltZW0sIG9wKTsNCj4gKwlpZiAocmV0KQ0KPiAr CQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJaWYgKHVzZWJvdW5jZWJ1ZiAmJiBsZW4gJiYgb3AtPmRh dGEuZGlyID09IFNQSV9NRU1fREFUQV9JTikNCj4gKwkJbWVtY3B5KGJ1Ziwgbm9yLT5ib3VuY2Vi dWYsIGxlbik7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBz cGlfbm9yX2RhdGFfb3Aoc3RydWN0IHNwaV9ub3IgKm5vciwgc3RydWN0IHNwaV9tZW1fb3AgKm9w LA0KPiArCQkJICAgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKQ0KDQpzaXplX3QgZm9yIGxl bj8NCg0KPiArew0KPiArCXJldHVybiBzcGlfbm9yX2V4ZWNfb3Aobm9yLCBvcCwgTlVMTCwgYnVm LCBsZW4pOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IHNwaV9ub3Jfbm9kYXRhX29wKHN0cnVj dCBzcGlfbm9yICpub3IsIHN0cnVjdCBzcGlfbWVtX29wICpvcCkNCj4gK3sNCj4gKwlyZXR1cm4g c3BpX25vcl9leGVjX29wKG5vciwgb3AsIE5VTEwsIE5VTEwsIDApOw0KPiArfQ0KPiArDQo+ICtz dGF0aWMgc3NpemVfdCBzcGlfbm9yX3NwaW1lbV9yZWFkX2RhdGEoc3RydWN0IHNwaV9ub3IgKm5v ciwgbG9mZl90IG9mcywNCj4gKwkJCQkJc2l6ZV90IGxlbiwgdTggKmJ1ZikNCj4gK3sNCj4gKwlz dHJ1Y3Qgc3BpX21lbV9vcCBvcCA9IFNQSV9NRU1fT1AoU1BJX01FTV9PUF9DTUQobm9yLT5yZWFk X29wY29kZSwgMSksDQo+ICsJCQkJCSAgU1BJX01FTV9PUF9BRERSKG5vci0+YWRkcl93aWR0aCwg b2ZzLA0KPiArCQkJCQkJCSAgMSksDQo+ICsJCQkJCSAgU1BJX01FTV9PUF9EVU1NWShub3ItPnJl YWRfZHVtbXksIDEpLA0KPiArCQkJCQkgIFNQSV9NRU1fT1BfREFUQV9JTihsZW4sIGJ1ZiwgMSkp Ow0KPiArCWJvb2wgdXNlYm91bmNlYnVmID0gZmFsc2U7DQo+ICsJc2l6ZV90IHJlbWFpbmluZyA9 IGxlbjsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJaWYgKG9iamVjdF9pc19vbl9zdGFjayhidWYp IHx8ICF2aXJ0X2FkZHJfdmFsaWQoYnVmKSkgew0KPiArCQl1c2Vib3VuY2VidWYgPSB0cnVlOw0K PiArCQlvcC5kYXRhLmJ1Zi5pbiA9IG5vci0+Ym91bmNlYnVmOw0KPiArCX0NCj4gKw0KPiArCS8q IGdldCB0cmFuc2ZlciBwcm90b2NvbHMuICovDQo+ICsJb3AuY21kLmJ1c3dpZHRoID0gc3BpX25v cl9nZXRfcHJvdG9jb2xfaW5zdF9uYml0cyhub3ItPnJlYWRfcHJvdG8pOw0KPiArCW9wLmFkZHIu YnVzd2lkdGggPSBzcGlfbm9yX2dldF9wcm90b2NvbF9hZGRyX25iaXRzKG5vci0+cmVhZF9wcm90 byk7DQo+ICsJb3AuZHVtbXkuYnVzd2lkdGggPSBvcC5hZGRyLmJ1c3dpZHRoOw0KPiArCW9wLmRh dGEuYnVzd2lkdGggPSBzcGlfbm9yX2dldF9wcm90b2NvbF9kYXRhX25iaXRzKG5vci0+cmVhZF9w cm90byk7DQo+ICsNCj4gKwkvKiBjb252ZXJ0IHRoZSBkdW1teSBjeWNsZXMgdG8gdGhlIG51bWJl ciBvZiBieXRlcyAqLw0KPiArCW9wLmR1bW15Lm5ieXRlcyA9IChub3ItPnJlYWRfZHVtbXkgKiBv cC5kdW1teS5idXN3aWR0aCkgLyA4Ow0KPiArDQo+ICsJd2hpbGUgKHJlbWFpbmluZykgew0KDQpD YW4ndCB3ZSBnZXQgcmlkIG9mIHRoaXMgd2hpbGU/IFNlZSBBbmRyZXkncyBwYXRjaCBhdA0KaHR0 cHM6Ly9sa21sLm9yZy9sa21sLzIwMTkvNC8xLzMyLiBBbmRyZXkncyBwYXRjaGVzIGFyZSBub3Qg aW5jbHVkZWQgaW4gdGhpcw0KcGF0Y2guIFdlIHNob3VsZCBjb25zaWRlciBpbnRlZ3JhdGluZyBo aXMgd29yayBmaXJzdCwgb3Igc3F1YXNoIGhpcyB3b3JrIGluIHRoaXMNCnBhdGNoLCBvciBhc2sg aGltIHRvIHJld29yayB0aGUgc2VyaWVzIGFmdGVyIHRoaXMgcGF0Y2ggZ2V0cyBhY2NlcHRlZC4g SSdsbCBsZXQNCnlvdSBkZWNpZGUuDQoNCj4gKwkJb3AuZGF0YS5uYnl0ZXMgPSByZW1haW5pbmcg PCBVSU5UX01BWCA/IHJlbWFpbmluZyA6IFVJTlRfTUFYOw0KPiArCQlpZiAoIXVzZWJvdW5jZWJ1 ZikNCj4gKwkJCW9wLmRhdGEuYnVmLm91dCA9IGJ1ZjsNCj4gKwkJZWxzZSBpZiAob3AuZGF0YS5u Ynl0ZXMgPiBub3ItPmJvdW5jZWJ1Zl9zaXplKQ0KPiArCQkJb3AuZGF0YS5uYnl0ZXMgPSBub3It PmJvdW5jZWJ1Zl9zaXplOw0KPiArDQo+ICsJCXJldCA9IHNwaV9tZW1fYWRqdXN0X29wX3NpemUo bm9yLT5zcGltZW0sICZvcCk7DQo+ICsJCWlmIChyZXQpDQo+ICsJCQlyZXR1cm4gcmV0Ow0KPiAr DQo+ICsJCXJldCA9IHNwaV9tZW1fZXhlY19vcChub3ItPnNwaW1lbSwgJm9wKTsNCj4gKwkJaWYg KHJldCkNCj4gKwkJCXJldHVybiByZXQ7DQo+ICsNCj4gKwkJaWYgKHVzZWJvdW5jZWJ1ZikNCj4g KwkJCW1lbWNweShidWYsIG5vci0+Ym91bmNlYnVmLCBvcC5kYXRhLm5ieXRlcyk7DQo+ICsNCj4g KwkJb3AuYWRkci52YWwgKz0gb3AuZGF0YS5uYnl0ZXM7DQo+ICsJCXJlbWFpbmluZyAtPSBvcC5k YXRhLm5ieXRlczsNCj4gKwkJYnVmICs9IG9wLmRhdGEubmJ5dGVzOw0KPiArCX0NCj4gKw0KPiAr CXJldHVybiBsZW47DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBzc2l6ZV90IHNwaV9ub3JfcmVhZF9k YXRhKHN0cnVjdCBzcGlfbm9yICpub3IsIGxvZmZfdCBvZnMsIHNpemVfdCBsZW4sDQo+ICsJCQkJ IHU4ICpidWYpDQo+ICt7DQo+ICsJaWYgKG5vci0+c3BpbWVtKQ0KPiArCQlyZXR1cm4gc3BpX25v cl9zcGltZW1fcmVhZF9kYXRhKG5vciwgb2ZzLCBsZW4sIGJ1Zik7DQo+ICsNCj4gKwlyZXR1cm4g bm9yLT5yZWFkKG5vciwgb2ZzLCBsZW4sIGJ1Zik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBzc2l6 ZV90IHNwaV9ub3Jfc3BpbWVtX3dyaXRlX2RhdGEoc3RydWN0IHNwaV9ub3IgKm5vciwgbG9mZl90 IG9mcywNCj4gKwkJCQkJIHNpemVfdCBsZW4sIGNvbnN0IHU4ICpidWYpDQo+ICt7DQo+ICsJc3Ry dWN0IHNwaV9tZW1fb3Agb3AgPSBTUElfTUVNX09QKFNQSV9NRU1fT1BfQ01EKG5vci0+cHJvZ3Jh bV9vcGNvZGUsDQoNCmhvdyBhYm91dCBtb3ZpbmcgU1BJX01FTV9PUCgpIHRvIHRoZSBuZXh0IGxp bmUgdG8gYXZvaWQgYnJlYWtpbmcgbGluZXMgYmVsb3c/DQpHZW5lcmFsIGNvbW1lbnQuDQoNCj4g KwkJCQkJCQkgMSksDQo+ICsJCQkJCSAgU1BJX01FTV9PUF9BRERSKG5vci0+YWRkcl93aWR0aCwg b2ZzLA0KPiArCQkJCQkJCSAgMSksDQo+ICsJCQkJCSAgU1BJX01FTV9PUF9OT19EVU1NWSwNCj4g KwkJCQkJICBTUElfTUVNX09QX0RBVEFfT1VUKGxlbiwgTlVMTCwgMSkpOw0KPiArCWJvb2wgdXNl Ym91bmNlYnVmID0gZmFsc2U7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCWlmIChvYmplY3RfaXNf b25fc3RhY2soYnVmKSB8fCAhdmlydF9hZGRyX3ZhbGlkKGJ1ZikpIHsNCj4gKwkJdXNlYm91bmNl YnVmID0gdHJ1ZTsNCj4gKwkJb3AuZGF0YS5idWYub3V0ID0gbm9yLT5ib3VuY2VidWY7DQo+ICsJ fQ0KPiArDQo+ICsJLyogZ2V0IHRyYW5zZmVyIHByb3RvY29scy4gKi8NCj4gKwlvcC5jbWQuYnVz d2lkdGggPSBzcGlfbm9yX2dldF9wcm90b2NvbF9pbnN0X25iaXRzKG5vci0+d3JpdGVfcHJvdG8p Ow0KPiArCW9wLmFkZHIuYnVzd2lkdGggPSBzcGlfbm9yX2dldF9wcm90b2NvbF9hZGRyX25iaXRz KG5vci0+d3JpdGVfcHJvdG8pOw0KPiArCW9wLmRhdGEuYnVzd2lkdGggPSBzcGlfbm9yX2dldF9w cm90b2NvbF9kYXRhX25iaXRzKG5vci0+d3JpdGVfcHJvdG8pOw0KPiArDQo+ICsJaWYgKG5vci0+ cHJvZ3JhbV9vcGNvZGUgPT0gU1BJTk9SX09QX0FBSV9XUCAmJiBub3ItPnNzdF93cml0ZV9zZWNv bmQpDQo+ICsJCW9wLmFkZHIubmJ5dGVzID0gMDsNCj4gKw0KPiArCW9wLmRhdGEubmJ5dGVzID0g bGVuIDwgVUlOVF9NQVggPyBsZW4gOiBVSU5UX01BWDsNCj4gKw0KPiArCWlmICghdXNlYm91bmNl YnVmKSB7DQo+ICsJCW9wLmRhdGEuYnVmLm91dCA9IGJ1ZjsNCj4gKwl9IGVsc2Ugew0KPiArCQlp ZiAob3AuZGF0YS5uYnl0ZXMgPiBub3ItPmJvdW5jZWJ1Zl9zaXplKQ0KPiArCQkJb3AuZGF0YS5u Ynl0ZXMgPSBub3ItPmJvdW5jZWJ1Zl9zaXplOw0KPiArDQo+ICsJCW1lbWNweShub3ItPmJvdW5j ZWJ1ZiwgYnVmLCBvcC5kYXRhLm5ieXRlcyk7DQo+ICsJfQ0KPiArDQo+ICsJcmV0ID0gc3BpX21l bV9hZGp1c3Rfb3Bfc2l6ZShub3ItPnNwaW1lbSwgJm9wKTsNCj4gKwlpZiAocmV0KQ0KPiArCQly ZXR1cm4gcmV0Ow0KPiArDQo+ICsJcmV0ID0gc3BpX21lbV9leGVjX29wKG5vci0+c3BpbWVtLCAm b3ApOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiByZXQ7DQo+ICsNCj4gKwlyZXR1cm4gb3Au ZGF0YS5uYnl0ZXM7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBzc2l6ZV90IHNwaV9ub3Jfd3JpdGVf ZGF0YShzdHJ1Y3Qgc3BpX25vciAqbm9yLCBsb2ZmX3Qgb2ZzLCBzaXplX3QgbGVuLA0KPiArCQkJ CSAgY29uc3QgdTggKmJ1ZikNCj4gK3sNCj4gKwlpZiAobm9yLT5zcGltZW0pDQo+ICsJCXJldHVy biBzcGlfbm9yX3NwaW1lbV93cml0ZV9kYXRhKG5vciwgb2ZzLCBsZW4sIGJ1Zik7DQo+ICsNCj4g KwlyZXR1cm4gbm9yLT53cml0ZShub3IsIG9mcywgbGVuLCBidWYpOw0KPiArfQ0KPiArDQo+ICAv Kg0KPiAgICogUmVhZCB0aGUgc3RhdHVzIHJlZ2lzdGVyLCByZXR1cm5pbmcgaXRzIHZhbHVlIGlu IHRoZSBsb2NhdGlvbg0KPiAgICogUmV0dXJuIHRoZSBzdGF0dXMgcmVnaXN0ZXIgdmFsdWUuDQo+ IEBAIC0yOTgsNyArNDY3LDE4IEBAIHN0YXRpYyBpbnQgcmVhZF9zcihzdHJ1Y3Qgc3BpX25vciAq bm9yKQ0KPiAgCWludCByZXQ7DQo+ICAJdTggdmFsOw0KPiAgDQo+IC0JcmV0ID0gbm9yLT5yZWFk X3JlZyhub3IsIFNQSU5PUl9PUF9SRFNSLCAmdmFsLCAxKTsNCj4gKwlpZiAobm9yLT5zcGltZW0p IHsNCj4gKwkJc3RydWN0IHNwaV9tZW1fb3Agb3AgPSBTUElfTUVNX09QKA0KPiArCQkJCQlTUElf TUVNX09QX0NNRChTUElOT1JfT1BfUkRTUiwgMSksDQo+ICsJCQkJCVNQSV9NRU1fT1BfTk9fQURE UiwNCj4gKwkJCQkJU1BJX01FTV9PUF9OT19EVU1NWSwNCj4gKwkJCQkJU1BJX01FTV9PUF9EQVRB X0lOKDAsIE5VTEwsIDEpKTsNCj4gKw0KPiArCQlyZXQgPSBzcGlfbm9yX2RhdGFfb3Aobm9yLCAm b3AsICZ2YWwsIDEpOw0KPiArCX0gZWxzZSB7DQo+ICsJCXJldCA9IG5vci0+cmVhZF9yZWcobm9y LCBTUElOT1JfT1BfUkRTUiwgJnZhbCwgMSk7DQo+ICsJfQ0KPiArDQo+ICAJaWYgKHJldCA8IDAp IHsNCj4gIAkJcHJfZXJyKCJlcnJvciAlZCByZWFkaW5nIFNSXG4iLCAoaW50KSByZXQpOw0KPiAg CQlyZXR1cm4gcmV0Ow0KPiBAQCAtMzE3LDcgKzQ5NywxOCBAQCBzdGF0aWMgaW50IHJlYWRfZnNy KHN0cnVjdCBzcGlfbm9yICpub3IpDQo+ICAJaW50IHJldDsNCj4gIAl1OCB2YWw7DQo+ICANCj4g LQlyZXQgPSBub3ItPnJlYWRfcmVnKG5vciwgU1BJTk9SX09QX1JERlNSLCAmdmFsLCAxKTsNCj4g KwlpZiAobm9yLT5zcGltZW0pIHsNCj4gKwkJc3RydWN0IHNwaV9tZW1fb3Agb3AgPSBTUElfTUVN X09QKA0KPiArCQkJCQlTUElfTUVNX09QX0NNRChTUElOT1JfT1BfUkRGU1IsIDEpLA0KPiArCQkJ CQlTUElfTUVNX09QX05PX0FERFIsDQo+ICsJCQkJCVNQSV9NRU1fT1BfTk9fRFVNTVksDQo+ICsJ CQkJCVNQSV9NRU1fT1BfREFUQV9JTigwLCBOVUxMLCAxKSk7DQo+ICsNCj4gKwkJcmV0ID0gc3Bp X25vcl9kYXRhX29wKG5vciwgJm9wLCAmdmFsLCAxKTsNCj4gKwl9IGVsc2Ugew0KPiArCQlyZXQg PSBub3ItPnJlYWRfcmVnKG5vciwgU1BJTk9SX09QX1JERlNSLCAmdmFsLCAxKTsNCj4gKwl9DQo+ ICsNCj4gIAlpZiAocmV0IDwgMCkgew0KPiAgCQlwcl9lcnIoImVycm9yICVkIHJlYWRpbmcgRlNS XG4iLCByZXQpOw0KPiAgCQlyZXR1cm4gcmV0Ow0KPiBAQCAtMzM2LDcgKzUyNywxOCBAQCBzdGF0 aWMgaW50IHJlYWRfY3Ioc3RydWN0IHNwaV9ub3IgKm5vcikNCj4gIAlpbnQgcmV0Ow0KPiAgCXU4 IHZhbDsNCj4gIA0KPiAtCXJldCA9IG5vci0+cmVhZF9yZWcobm9yLCBTUElOT1JfT1BfUkRDUiwg JnZhbCwgMSk7DQo+ICsJaWYgKG5vci0+c3BpbWVtKSB7DQo+ICsJCXN0cnVjdCBzcGlfbWVtX29w IG9wID0gU1BJX01FTV9PUCgNCj4gKwkJCQkJU1BJX01FTV9PUF9DTUQoU1BJTk9SX09QX1JEQ1Is IDEpLA0KPiArCQkJCQlTUElfTUVNX09QX05PX0FERFIsDQo+ICsJCQkJCVNQSV9NRU1fT1BfTk9f RFVNTVksDQo+ICsJCQkJCVNQSV9NRU1fT1BfREFUQV9JTigwLCBOVUxMLCAxKSk7DQo+ICsNCj4g KwkJcmV0ID0gc3BpX25vcl9kYXRhX29wKG5vciwgJm9wLCAmdmFsLCAxKTsNCj4gKwl9IGVsc2Ug ew0KPiArCQlyZXQgPSBub3ItPnJlYWRfcmVnKG5vciwgU1BJTk9SX09QX1JEQ1IsICZ2YWwsIDEp Ow0KPiArCX0NCj4gKw0KPiAgCWlmIChyZXQgPCAwKSB7DQo+ICAJCWRldl9lcnIobm9yLT5kZXYs ICJlcnJvciAlZCByZWFkaW5nIENSXG4iLCByZXQpOw0KPiAgCQlyZXR1cm4gcmV0Ow0KPiBAQCAt MzUxLDYgKzU1MywxNiBAQCBzdGF0aWMgaW50IHJlYWRfY3Ioc3RydWN0IHNwaV9ub3IgKm5vcikN Cj4gICAqLw0KPiAgc3RhdGljIGludCB3cml0ZV9zcihzdHJ1Y3Qgc3BpX25vciAqbm9yLCB1OCB2 YWwpDQo+ICB7DQo+ICsJaWYgKG5vci0+c3BpbWVtKSB7DQo+ICsJCXN0cnVjdCBzcGlfbWVtX29w IG9wID0gU1BJX01FTV9PUCgNCj4gKwkJCQkJU1BJX01FTV9PUF9DTUQoU1BJTk9SX09QX1dSU1Is IDEpLA0KPiArCQkJCQlTUElfTUVNX09QX05PX0FERFIsDQo+ICsJCQkJCVNQSV9NRU1fT1BfTk9f RFVNTVksDQo+ICsJCQkJCVNQSV9NRU1fT1BfREFUQV9JTigxLCBOVUxMLCAxKSk7DQo+ICsNCj4g KwkJcmV0dXJuIHNwaV9ub3JfZGF0YV9vcChub3IsICZvcCwgJnZhbCwgMSk7DQo+ICsJfQ0KPiAr DQo+ICAJbm9yLT5jbWRfYnVmWzBdID0gdmFsOw0KPiAgCXJldHVybiBub3ItPndyaXRlX3JlZyhu b3IsIFNQSU5PUl9PUF9XUlNSLCBub3ItPmNtZF9idWYsIDEpOw0KPiAgfQ0KPiBAQCAtMzYxLDYg KzU3MywxNiBAQCBzdGF0aWMgaW50IHdyaXRlX3NyKHN0cnVjdCBzcGlfbm9yICpub3IsIHU4IHZh bCkNCj4gICAqLw0KPiAgc3RhdGljIGludCB3cml0ZV9lbmFibGUoc3RydWN0IHNwaV9ub3IgKm5v cikNCj4gIHsNCj4gKwlpZiAobm9yLT5zcGltZW0pIHsNCj4gKwkJc3RydWN0IHNwaV9tZW1fb3Ag b3AgPSBTUElfTUVNX09QKA0KPiArCQkJCQlTUElfTUVNX09QX0NNRChTUElOT1JfT1BfV1JFTiwg MSksDQo+ICsJCQkJCVNQSV9NRU1fT1BfTk9fQUREUiwNCj4gKwkJCQkJU1BJX01FTV9PUF9OT19E VU1NWSwNCj4gKwkJCQkJU1BJX01FTV9PUF9OT19EQVRBKTsNCj4gKw0KPiArCQlyZXR1cm4gc3Bp X25vcl9ub2RhdGFfb3Aobm9yLCAmb3ApOw0KPiArCX0NCj4gKw0KPiAgCXJldHVybiBub3ItPndy aXRlX3JlZyhub3IsIFNQSU5PUl9PUF9XUkVOLCBOVUxMLCAwKTsNCj4gIH0NCj4gIA0KPiBAQCAt MzY5LDYgKzU5MSwxNiBAQCBzdGF0aWMgaW50IHdyaXRlX2VuYWJsZShzdHJ1Y3Qgc3BpX25vciAq bm9yKQ0KPiAgICovDQo+ICBzdGF0aWMgaW50IHdyaXRlX2Rpc2FibGUoc3RydWN0IHNwaV9ub3Ig Km5vcikNCj4gIHsNCj4gKwlpZiAobm9yLT5zcGltZW0pIHsNCj4gKwkJc3RydWN0IHNwaV9tZW1f b3Agb3AgPSBTUElfTUVNX09QKA0KPiArCQkJCQlTUElfTUVNX09QX0NNRChTUElOT1JfT1BfV1JE SSwgMSksDQo+ICsJCQkJCVNQSV9NRU1fT1BfTk9fQUREUiwNCj4gKwkJCQkJU1BJX01FTV9PUF9O T19EVU1NWSwNCj4gKwkJCQkJU1BJX01FTV9PUF9OT19EQVRBKTsNCj4gKw0KPiArCQlyZXR1cm4g c3BpX25vcl9ub2RhdGFfb3Aobm9yLCAmb3ApOw0KPiArCX0NCj4gKw0KPiAgCXJldHVybiBub3It PndyaXRlX3JlZyhub3IsIFNQSU5PUl9PUF9XUkRJLCBOVUxMLCAwKTsNCj4gIH0NCj4gIA0KPiBA QCAtNDY4LDEyICs3MDAsNDYgQEAgc3RhdGljIHZvaWQgc3BpX25vcl9zZXRfNGJ5dGVfb3Bjb2Rl cyhzdHJ1Y3Qgc3BpX25vciAqbm9yKQ0KPiAgCX0NCj4gIH0NCj4gIA0KPiArc3RhdGljIGludCBt YWNyb25peF9zZXRfNGJ5dGUoc3RydWN0IHNwaV9ub3IgKm5vciwgYm9vbCBlbmFibGUpDQo+ICt7 DQo+ICsJaWYgKG5vci0+c3BpbWVtKSB7DQo+ICsJCXN0cnVjdCBzcGlfbWVtX29wIG9wID0gU1BJ X01FTV9PUCgNCj4gKwkJCQkJU1BJX01FTV9PUF9DTUQoZW5hYmxlID8NCj4gKwkJCQkJCSAgICAg ICBTUElOT1JfT1BfRU40QiA6DQo+ICsJCQkJCQkgICAgICAgU1BJTk9SX09QX0VYNEIsDQo+ICsJ CQkJCQkgICAgICAgMSksDQo+ICsJCQkJCVNQSV9NRU1fT1BfTk9fQUREUiwNCj4gKwkJCQkJU1BJ X01FTV9PUF9OT19EVU1NWSwNCj4gKwkJCQkJU1BJX01FTV9PUF9OT19EQVRBKTsNCj4gKw0KPiAr CQlyZXR1cm4gc3BpX25vcl9ub2RhdGFfb3Aobm9yLCAmb3ApOw0KPiArCX0NCj4gKw0KPiArCXJl dHVybiBub3ItPndyaXRlX3JlZyhub3IsIGVuYWJsZSA/IFNQSU5PUl9PUF9FTjRCIDogU1BJTk9S X09QX0VYNEIsDQo+ICsJCQkgICAgICBOVUxMLCAwKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlu dCB3cml0ZV9lYXIoc3RydWN0IHNwaV9ub3IgKm5vciwgdTggZWFyKQ0KDQpzcGlfbm9yX3dyaXRl X2Vhcj8NCg0KPiArew0KPiArCWlmIChub3ItPnNwaW1lbSkgew0KPiArCQlzdHJ1Y3Qgc3BpX21l bV9vcCBvcCA9IFNQSV9NRU1fT1AoDQo+ICsJCQkJCVNQSV9NRU1fT1BfQ01EKFNQSU5PUl9PUF9X UkVBUiwgMSksDQo+ICsJCQkJCVNQSV9NRU1fT1BfTk9fQUREUiwNCj4gKwkJCQkJU1BJX01FTV9P UF9OT19EVU1NWSwNCj4gKwkJCQkJU1BJX01FTV9PUF9EQVRBX09VVCgwLCBOVUxMLCAxKSk7DQo+ ICsNCj4gKwkJcmV0dXJuIHNwaV9ub3JfZGF0YV9vcChub3IsICZvcCwgJmVhciwgMSk7DQo+ICsJ fQ0KPiArDQo+ICsJbm9yLT5jbWRfYnVmWzBdID0gZWFyOw0KDQpob3cgYWJvdXQgZHJvcHBpbmcg dGhpcyBpbml0IGFuZA0KCXJldHVybiBub3ItPndyaXRlX3JlZyhub3IsIFNQSU5PUl9PUF9XUkVB UiwgJmVhciwgMSk7DQoNCj4gKwlyZXR1cm4gbm9yLT53cml0ZV9yZWcobm9yLCBTUElOT1JfT1Bf V1JFQVIsIG5vci0+Y21kX2J1ZiwgMSk7DQo+ICt9DQo+ICsNCj4gIC8qIEVuYWJsZS9kaXNhYmxl IDQtYnl0ZSBhZGRyZXNzaW5nIG1vZGUuICovDQo+ICBzdGF0aWMgaW50IHNldF80Ynl0ZShzdHJ1 Y3Qgc3BpX25vciAqbm9yLCBib29sIGVuYWJsZSkNCj4gIHsNCj4gIAlpbnQgc3RhdHVzOw0KPiAg CWJvb2wgbmVlZF93cmVuID0gZmFsc2U7DQo+IC0JdTggY21kOw0KPiAgDQo+ICAJc3dpdGNoIChK RURFQ19NRlIobm9yLT5pbmZvKSkgew0KPiAgCWNhc2UgU05PUl9NRlJfU1Q6DQo+IEBAIC00ODYs OCArNzUyLDcgQEAgc3RhdGljIGludCBzZXRfNGJ5dGUoc3RydWN0IHNwaV9ub3IgKm5vciwgYm9v bCBlbmFibGUpDQo+ICAJCWlmIChuZWVkX3dyZW4pDQo+ICAJCQl3cml0ZV9lbmFibGUobm9yKTsN Cj4gIA0KPiAtCQljbWQgPSBlbmFibGUgPyBTUElOT1JfT1BfRU40QiA6IFNQSU5PUl9PUF9FWDRC Ow0KPiAtCQlzdGF0dXMgPSBub3ItPndyaXRlX3JlZyhub3IsIGNtZCwgTlVMTCwgMCk7DQo+ICsJ CXN0YXR1cyA9IG1hY3Jvbml4X3NldF80Ynl0ZShub3IsIGVuYWJsZSk7DQo+ICAJCWlmIChuZWVk X3dyZW4pDQo+ICAJCQl3cml0ZV9kaXNhYmxlKG5vcik7DQo+ICANCj4gQEAgLTUwMCw4ICs3NjUs NyBAQCBzdGF0aWMgaW50IHNldF80Ynl0ZShzdHJ1Y3Qgc3BpX25vciAqbm9yLCBib29sIGVuYWJs ZSkNCj4gIAkJCSAqIFdlIG11c3QgY2xlYXIgdGhlIHJlZ2lzdGVyIHRvIGVuYWJsZSBub3JtYWwg YmVoYXZpb3IuDQo+ICAJCQkgKi8NCj4gIAkJCXdyaXRlX2VuYWJsZShub3IpOw0KPiAtCQkJbm9y LT5jbWRfYnVmWzBdID0gMDsNCj4gLQkJCW5vci0+d3JpdGVfcmVnKG5vciwgU1BJTk9SX09QX1dS RUFSLCBub3ItPmNtZF9idWYsIDEpOw0KPiArCQkJd3JpdGVfZWFyKG5vciwgMCk7DQo+ICAJCQl3 cml0ZV9kaXNhYmxlKG5vcik7DQo+ICAJCX0NCj4gIA0KPiBAQCAtNTA5LDE2ICs3NzMsNDIgQEAg c3RhdGljIGludCBzZXRfNGJ5dGUoc3RydWN0IHNwaV9ub3IgKm5vciwgYm9vbCBlbmFibGUpDQo+ ICAJZGVmYXVsdDoNCj4gIAkJLyogU3BhbnNpb24gc3R5bGUgKi8NCg0KaG93IGFib3V0IGludHJv ZHVjaW5nIGEgc3BhbnNpb25fc2V0XzRieXRlKCkgYW5kIHJldHVybiBpdCBkaXJlY3RseT8NCg0K PiAgCQlub3ItPmNtZF9idWZbMF0gPSBlbmFibGUgPDwgNzsNCj4gKw0KPiArCQlpZiAobm9yLT5z cGltZW0pIHsNCj4gKwkJCXN0cnVjdCBzcGlfbWVtX29wIG9wID0gU1BJX01FTV9PUCgNCj4gKwkJ CQkJU1BJX01FTV9PUF9DTUQoU1BJTk9SX09QX0JSV1IsIDEpLA0KPiArCQkJCQlTUElfTUVNX09Q X05PX0FERFIsDQo+ICsJCQkJCVNQSV9NRU1fT1BfTk9fRFVNTVksDQo+ICsJCQkJCVNQSV9NRU1f T1BfREFUQV9PVVQoMSwgTlVMTCwgMSkpOw0KPiArDQo+ICsJCQlyZXR1cm4gc3BpX25vcl9kYXRh X29wKG5vciwgJm9wLCBub3ItPmNtZF9idWYsIDEpOw0KPiArCX0NCj4gKw0KPiAgCQlyZXR1cm4g bm9yLT53cml0ZV9yZWcobm9yLCBTUElOT1JfT1BfQlJXUiwgbm9yLT5jbWRfYnVmLCAxKTsNCj4g IAl9DQo+ICB9DQo+ICANCj4gK3N0YXRpYyBpbnQgeHJlYWRfc3Ioc3RydWN0IHNwaV9ub3IgKm5v ciwgdTggKnNyKQ0KDQpzcGlfbm9yX3hyZWFkX3NyPw0KDQo+ICt7DQo+ICsJaWYgKG5vci0+c3Bp bWVtKSB7DQo+ICsJCXN0cnVjdCBzcGlfbWVtX29wIG9wID0gU1BJX01FTV9PUCgNCj4gKwkJCQkJ U1BJX01FTV9PUF9DTUQoU1BJTk9SX09QX1hSRFNSLCAxKSwNCj4gKwkJCQkJU1BJX01FTV9PUF9O T19BRERSLA0KPiArCQkJCQlTUElfTUVNX09QX05PX0RVTU1ZLA0KPiArCQkJCQlTUElfTUVNX09Q X0RBVEFfSU4oMCwgTlVMTCwgMSkpOw0KPiArDQo+ICsJCXJldHVybiBzcGlfbm9yX2RhdGFfb3Ao bm9yLCAmb3AsIHNyLCAxKTsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gbm9yLT5yZWFkX3JlZyhu b3IsIFNQSU5PUl9PUF9YUkRTUiwgc3IsIDEpOw0KPiArfQ0KPiArDQo+ICBzdGF0aWMgaW50IHMz YW5fc3JfcmVhZHkoc3RydWN0IHNwaV9ub3IgKm5vcikNCj4gIHsNCj4gIAlpbnQgcmV0Ow0KPiAg CXU4IHZhbDsNCj4gIA0KPiAtCXJldCA9IG5vci0+cmVhZF9yZWcobm9yLCBTUElOT1JfT1BfWFJE U1IsICZ2YWwsIDEpOw0KPiArCXJldCA9IHhyZWFkX3NyKG5vciwgJnZhbCk7DQo+ICAJaWYgKHJl dCA8IDApIHsNCj4gIAkJZGV2X2Vycihub3ItPmRldiwgImVycm9yICVkIHJlYWRpbmcgWFJEU1Jc biIsIChpbnQpIHJldCk7DQo+ICAJCXJldHVybiByZXQ7DQo+IEBAIC01MjcsNiArODE3LDIxIEBA IHN0YXRpYyBpbnQgczNhbl9zcl9yZWFkeShzdHJ1Y3Qgc3BpX25vciAqbm9yKQ0KPiAgCXJldHVy biAhISh2YWwgJiBYU1JfUkRZKTsNCj4gIH0NCj4gIA0KPiArc3RhdGljIGludCBjbGVhcl9zcihz dHJ1Y3Qgc3BpX25vciAqbm9yKQ0KDQpzcGlfbm9yX2NsZWFyX3NyPw0KDQo+ICt7DQo+ICsJaWYg KG5vci0+c3BpbWVtKSB7DQo+ICsJCXN0cnVjdCBzcGlfbWVtX29wIG9wID0gU1BJX01FTV9PUCgN Cj4gKwkJCQkJU1BJX01FTV9PUF9DTUQoU1BJTk9SX09QX0NMU1IsIDEpLA0KPiArCQkJCQlTUElf TUVNX09QX05PX0FERFIsDQo+ICsJCQkJCVNQSV9NRU1fT1BfTk9fRFVNTVksDQo+ICsJCQkJCVNQ SV9NRU1fT1BfTk9fREFUQSk7DQo+ICsNCj4gKwkJcmV0dXJuIHNwaV9ub3Jfbm9kYXRhX29wKG5v ciwgJm9wKTsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gbm9yLT53cml0ZV9yZWcobm9yLCBTUElO T1JfT1BfQ0xTUiwgTlVMTCwgMCk7DQo+ICt9DQo+ICsNCj4gIHN0YXRpYyBpbnQgc3BpX25vcl9z cl9yZWFkeShzdHJ1Y3Qgc3BpX25vciAqbm9yKQ0KPiAgew0KPiAgCWludCBzciA9IHJlYWRfc3Io bm9yKTsNCj4gQEAgLTUzOSwxMyArODQ0LDI4IEBAIHN0YXRpYyBpbnQgc3BpX25vcl9zcl9yZWFk eShzdHJ1Y3Qgc3BpX25vciAqbm9yKQ0KPiAgCQllbHNlDQo+ICAJCQlkZXZfZXJyKG5vci0+ZGV2 LCAiUHJvZ3JhbW1pbmcgRXJyb3Igb2NjdXJyZWRcbiIpOw0KPiAgDQo+IC0JCW5vci0+d3JpdGVf cmVnKG5vciwgU1BJTk9SX09QX0NMU1IsIE5VTEwsIDApOw0KPiArCQljbGVhcl9zcihub3IpOw0K PiAgCQlyZXR1cm4gLUVJTzsNCj4gIAl9DQo+ICANCj4gIAlyZXR1cm4gIShzciAmIFNSX1dJUCk7 DQo+ICB9DQo+ICANCj4gK3N0YXRpYyBpbnQgY2xlYXJfZnNyKHN0cnVjdCBzcGlfbm9yICpub3Ip DQoNCnNwaV9ub3JfY2xlYXJfZnNyPw0KDQo+ICt7DQo+ICsJaWYgKG5vci0+c3BpbWVtKSB7DQo+ ICsJCXN0cnVjdCBzcGlfbWVtX29wIG9wID0gU1BJX01FTV9PUCgNCj4gKwkJCQkJU1BJX01FTV9P UF9DTUQoU1BJTk9SX09QX0NMRlNSLCAxKSwNCj4gKwkJCQkJU1BJX01FTV9PUF9OT19BRERSLA0K PiArCQkJCQlTUElfTUVNX09QX05PX0RVTU1ZLA0KPiArCQkJCQlTUElfTUVNX09QX05PX0RBVEEp Ow0KPiArDQo+ICsJCXJldHVybiBzcGlfbm9yX25vZGF0YV9vcChub3IsICZvcCk7DQo+ICsJfQ0K PiArDQo+ICsJcmV0dXJuIG5vci0+d3JpdGVfcmVnKG5vciwgU1BJTk9SX09QX0NMRlNSLCBOVUxM LCAwKTsNCj4gK30NCj4gKw0KPiAgc3RhdGljIGludCBzcGlfbm9yX2Zzcl9yZWFkeShzdHJ1Y3Qg c3BpX25vciAqbm9yKQ0KPiAgew0KPiAgCWludCBmc3IgPSByZWFkX2Zzcihub3IpOw0KPiBAQCAt NTYyLDcgKzg4Miw3IEBAIHN0YXRpYyBpbnQgc3BpX25vcl9mc3JfcmVhZHkoc3RydWN0IHNwaV9u b3IgKm5vcikNCj4gIAkJCWRldl9lcnIobm9yLT5kZXYsDQo+ICAJCQkiQXR0ZW1wdGVkIHRvIG1v ZGlmeSBhIHByb3RlY3RlZCBzZWN0b3IuXG4iKTsNCj4gIA0KPiAtCQlub3ItPndyaXRlX3JlZyhu b3IsIFNQSU5PUl9PUF9DTEZTUiwgTlVMTCwgMCk7DQo+ICsJCWNsZWFyX2Zzcihub3IpOw0KPiAg CQlyZXR1cm4gLUVJTzsNCj4gIAl9DQo+ICANCj4gQEAgLTYzMCw2ICs5NTAsMTYgQEAgc3RhdGlj IGludCBlcmFzZV9jaGlwKHN0cnVjdCBzcGlfbm9yICpub3IpDQo+ICB7DQo+ICAJZGV2X2RiZyhu b3ItPmRldiwgIiAlbGxkS2lCXG4iLCAobG9uZyBsb25nKShub3ItPm10ZC5zaXplID4+IDEwKSk7 DQo+ICANCj4gKwlpZiAobm9yLT5zcGltZW0pIHsNCj4gKwkJc3RydWN0IHNwaV9tZW1fb3Agb3Ag PSBTUElfTUVNX09QKA0KPiArCQkJCQlTUElfTUVNX09QX0NNRChTUElOT1JfT1BfQ0hJUF9FUkFT RSwgMSksDQo+ICsJCQkJCVNQSV9NRU1fT1BfTk9fQUREUiwNCj4gKwkJCQkJU1BJX01FTV9PUF9O T19EVU1NWSwNCj4gKwkJCQkJU1BJX01FTV9PUF9OT19EQVRBKTsNCj4gKw0KPiArCQlyZXR1cm4g c3BpX25vcl9ub2RhdGFfb3Aobm9yLCAmb3ApOw0KPiArCX0NCj4gKw0KPiAgCXJldHVybiBub3It PndyaXRlX3JlZyhub3IsIFNQSU5PUl9PUF9DSElQX0VSQVNFLCBOVUxMLCAwKTsNCj4gIH0NCj4g IA0KPiBAQCAtNjkyLDYgKzEwMjIsMTcgQEAgc3RhdGljIGludCBzcGlfbm9yX2VyYXNlX3NlY3Rv cihzdHJ1Y3Qgc3BpX25vciAqbm9yLCB1MzIgYWRkcikNCj4gIAlpZiAobm9yLT5lcmFzZSkNCj4g IAkJcmV0dXJuIG5vci0+ZXJhc2Uobm9yLCBhZGRyKTsNCj4gIA0KPiArCWlmIChub3ItPnNwaW1l bSkgew0KPiArCQlzdHJ1Y3Qgc3BpX21lbV9vcCBvcCA9IFNQSV9NRU1fT1AoDQo+ICsJCQkJCVNQ SV9NRU1fT1BfQ01EKG5vci0+ZXJhc2Vfb3Bjb2RlLCAxKSwNCj4gKwkJCQkJU1BJX01FTV9PUF9B RERSKG5vci0+YWRkcl93aWR0aCwgYWRkciwNCj4gKwkJCQkJCQkxKSwNCj4gKwkJCQkJU1BJX01F TV9PUF9OT19EVU1NWSwNCj4gKwkJCQkJU1BJX01FTV9PUF9OT19EQVRBKTsNCj4gKw0KPiArCQly ZXR1cm4gc3BpX25vcl9ub2RhdGFfb3Aobm9yLCAmb3ApOw0KPiArCX0NCj4gKw0KPiAgCS8qDQo+ ICAJICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiwgaWYgZHJpdmVyIGRvZXNuJ3QgaGF2ZSBhIHNw ZWNpYWxpemVkIEhXDQo+ICAJICogY29udHJvbA0KPiBAQCAtMTQwNiw3ICsxNzQ3LDE4IEBAIHN0 YXRpYyBpbnQgd3JpdGVfc3JfY3Ioc3RydWN0IHNwaV9ub3IgKm5vciwgdTggKnNyX2NyKQ0KPiAg DQo+ICAJd3JpdGVfZW5hYmxlKG5vcik7DQo+ICANCj4gLQlyZXQgPSBub3ItPndyaXRlX3JlZyhu b3IsIFNQSU5PUl9PUF9XUlNSLCBzcl9jciwgMik7DQo+ICsJaWYgKG5vci0+c3BpbWVtKSB7DQo+ ICsJCXN0cnVjdCBzcGlfbWVtX29wIG9wID0gU1BJX01FTV9PUCgNCj4gKwkJCQkJU1BJX01FTV9P UF9DTUQoU1BJTk9SX09QX1dSU1IsIDEpLA0KPiArCQkJCQlTUElfTUVNX09QX05PX0FERFIsDQo+ ICsJCQkJCVNQSV9NRU1fT1BfTk9fRFVNTVksDQo+ICsJCQkJCVNQSV9NRU1fT1BfREFUQV9PVVQo MCwgTlVMTCwgMSkpOw0KPiArDQo+ICsJCXJldCA9IHNwaV9ub3JfZGF0YV9vcChub3IsICZvcCwg c3JfY3IsIDIpOw0KPiArCX0gZWxzZSB7DQo+ICsJCXJldCA9IG5vci0+d3JpdGVfcmVnKG5vciwg U1BJTk9SX09QX1dSU1IsIHNyX2NyLCAyKTsNCj4gKwl9DQo+ICsNCj4gIAlpZiAocmV0IDwgMCkg ew0KPiAgCQlkZXZfZXJyKG5vci0+ZGV2LA0KPiAgCQkJImVycm9yIHdoaWxlIHdyaXRpbmcgY29u ZmlndXJhdGlvbiByZWdpc3RlclxuIik7DQo+IEBAIC0xNTg1LDYgKzE5MzcsMzYgQEAgc3RhdGlj IGludCBzcGFuc2lvbl9yZWFkX2NyX3F1YWRfZW5hYmxlKHN0cnVjdCBzcGlfbm9yICpub3IpDQo+ ICAJcmV0dXJuIDA7DQo+ICB9DQo+ICANCj4gK3N0YXRpYyBpbnQgd3JpdGVfc3IyKHN0cnVjdCBz cGlfbm9yICpub3IsIHU4IHNyMikNCg0Kc3BpX25vcl93cml0ZV9zcjI/DQoNCj4gK3sNCj4gKwlp ZiAobm9yLT5zcGltZW0pIHsNCj4gKwkJc3RydWN0IHNwaV9tZW1fb3Agb3AgPSBTUElfTUVNX09Q KA0KPiArCQkJCQlTUElfTUVNX09QX0NNRChTUElOT1JfT1BfV1JTUjIsIDEpLA0KPiArCQkJCQlT UElfTUVNX09QX05PX0FERFIsDQo+ICsJCQkJCVNQSV9NRU1fT1BfTk9fRFVNTVksDQo+ICsJCQkJ CVNQSV9NRU1fT1BfREFUQV9PVVQoMCwgTlVMTCwgMSkpOw0KPiArDQo+ICsJCXJldHVybiBzcGlf bm9yX2RhdGFfb3Aobm9yLCAmb3AsICZzcjIsIDEpOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiBu b3ItPndyaXRlX3JlZyhub3IsIFNQSU5PUl9PUF9XUlNSMiwgJnNyMiwgMSk7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyBpbnQgcmVhZF9zcjIoc3RydWN0IHNwaV9ub3IgKm5vciwgdTggKnNyMikNCg0K c3BpX25vcl9yZWFkX3NyMj8NCg0KPiArew0KPiArCWlmIChub3ItPnNwaW1lbSkgew0KPiArCQlz dHJ1Y3Qgc3BpX21lbV9vcCBvcCA9IFNQSV9NRU1fT1AoDQo+ICsJCQkJCVNQSV9NRU1fT1BfQ01E KFNQSU5PUl9PUF9SRFNSMiwgMSksDQo+ICsJCQkJCVNQSV9NRU1fT1BfTk9fQUREUiwNCj4gKwkJ CQkJU1BJX01FTV9PUF9OT19EVU1NWSwNCj4gKwkJCQkJU1BJX01FTV9PUF9EQVRBX0lOKDAsIE5V TEwsIDEpKTsNCj4gKw0KPiArCQlyZXR1cm4gc3BpX25vcl9kYXRhX29wKG5vciwgJm9wLCBzcjIs IDEpOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiBub3ItPnJlYWRfcmVnKG5vciwgU1BJTk9SX09Q X1JEU1IyLCBzcjIsIDEpOw0KPiArfQ0KPiArDQo+ICAvKioNCj4gICAqIHNyMl9iaXQ3X3F1YWRf ZW5hYmxlKCkgLSBzZXQgUUUgYml0IGluIFN0YXR1cyBSZWdpc3RlciAyLg0KPiAgICogQG5vcjoJ cG9pbnRlciB0byBhICdzdHJ1Y3Qgc3BpX25vcicNCj4gQEAgLTE2MDMsNyArMTk4NSw3IEBAIHN0 YXRpYyBpbnQgc3IyX2JpdDdfcXVhZF9lbmFibGUoc3RydWN0IHNwaV9ub3IgKm5vcikNCj4gIAlp bnQgcmV0Ow0KPiAgDQo+ICAJLyogQ2hlY2sgY3VycmVudCBRdWFkIEVuYWJsZSBiaXQgdmFsdWUu ICovDQo+IC0JcmV0ID0gbm9yLT5yZWFkX3JlZyhub3IsIFNQSU5PUl9PUF9SRFNSMiwgJnNyMiwg MSk7DQo+ICsJcmV0ID0gcmVhZF9zcjIobm9yLCAmc3IyKTsNCj4gIAlpZiAocmV0KQ0KPiAgCQly ZXR1cm4gcmV0Ow0KPiAgCWlmIChzcjIgJiBTUjJfUVVBRF9FTl9CSVQ3KQ0KPiBAQCAtMTYxNCw3 ICsxOTk2LDcgQEAgc3RhdGljIGludCBzcjJfYml0N19xdWFkX2VuYWJsZShzdHJ1Y3Qgc3BpX25v ciAqbm9yKQ0KPiAgDQo+ICAJd3JpdGVfZW5hYmxlKG5vcik7DQo+ICANCj4gLQlyZXQgPSBub3It PndyaXRlX3JlZyhub3IsIFNQSU5PUl9PUF9XUlNSMiwgJnNyMiwgMSk7DQo+ICsJcmV0ID0gd3Jp dGVfc3IyKG5vciwgc3IyKTsNCj4gIAlpZiAocmV0IDwgMCkgew0KPiAgCQlkZXZfZXJyKG5vci0+ ZGV2LCAiZXJyb3Igd2hpbGUgd3JpdGluZyBzdGF0dXMgcmVnaXN0ZXIgMlxuIik7DQo+ICAJCXJl dHVybiAtRUlOVkFMOw0KPiBAQCAtMTYyNiw4ICsyMDA4LDcgQEAgc3RhdGljIGludCBzcjJfYml0 N19xdWFkX2VuYWJsZShzdHJ1Y3Qgc3BpX25vciAqbm9yKQ0KPiAgCQlyZXR1cm4gcmV0Ow0KPiAg CX0NCj4gIA0KPiAtCS8qIFJlYWQgYmFjayBhbmQgY2hlY2sgaXQuICovDQo+IC0JcmV0ID0gbm9y LT5yZWFkX3JlZyhub3IsIFNQSU5PUl9PUF9SRFNSMiwgJnNyMiwgMSk7DQo+ICsJcmV0ID0gcmVh ZF9zcjIobm9yLCAmc3IyKTsNCj4gIAlpZiAoIShyZXQgPiAwICYmIChzcjIgJiBTUjJfUVVBRF9F Tl9CSVQ3KSkpIHsNCj4gIAkJZGV2X2Vycihub3ItPmRldiwgIlNSMiBRdWFkIGJpdCBub3Qgc2V0 XG4iKTsNCj4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+IEBAIC0yMDU0LDEzICsyNDM1LDI4IEBAIHN0 YXRpYyBjb25zdCBzdHJ1Y3QgZmxhc2hfaW5mbyBzcGlfbm9yX2lkc1tdID0gew0KPiAgCXsgfSwN Cj4gIH07DQo+ICANCj4gK3N0YXRpYyBpbnQgcmVhZF9pZChzdHJ1Y3Qgc3BpX25vciAqbm9yLCB1 OCAqaWQpDQoNCnRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGp1c3QgZnJvbSBzcGlfbm9yX3JlYWRf aWQoKS4gSG93IGFib3V0IGluY29ycG9yYXRpbmcNCnRoaXMgY29kZSBpbnRvIHNwaV9ub3JfcmVh ZF9pZCgpIHNvIHRoYXQgd2UgdXNlIGZ1bmN0aW9ucyB0aGF0IGFyZSBwcmVwZW5kZWQNCndpdGgg InNwaV9ub3IiIHRvIG5vdCBwb2xsdXRlIHRoZSBuYW1lc3BhY2U/DQo+ICt7DQo+ICsJaWYgKG5v ci0+c3BpbWVtKSB7DQo+ICsJCXN0cnVjdCBzcGlfbWVtX29wIG9wID0gU1BJX01FTV9PUCgNCj4g KwkJCQkJU1BJX01FTV9PUF9DTUQoU1BJTk9SX09QX1JESUQsIDEpLA0KPiArCQkJCQlTUElfTUVN X09QX05PX0FERFIsDQo+ICsJCQkJCVNQSV9NRU1fT1BfTk9fRFVNTVksDQo+ICsJCQkJCVNQSV9N RU1fT1BfREFUQV9JTigwLCBOVUxMLCAxKSk7DQo+ICsNCj4gKwkJcmV0dXJuIHNwaV9ub3JfZGF0 YV9vcChub3IsICZvcCwgaWQsIFNQSV9OT1JfTUFYX0lEX0xFTik7DQo+ICsJfQ0KPiArDQo+ICsJ cmV0dXJuIG5vci0+cmVhZF9yZWcobm9yLCBTUElOT1JfT1BfUkRJRCwgaWQsIFNQSV9OT1JfTUFY X0lEX0xFTik7DQo+ICt9DQo+ICsNCj4gIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmxhc2hfaW5mbyAq c3BpX25vcl9yZWFkX2lkKHN0cnVjdCBzcGlfbm9yICpub3IpDQo+ICB7DQo+ICAJaW50CQkJdG1w Ow0KPiAgCXU4CQkJaWRbU1BJX05PUl9NQVhfSURfTEVOXTsNCj4gIAljb25zdCBzdHJ1Y3QgZmxh c2hfaW5mbwkqaW5mbzsNCj4gIA0KPiAtCXRtcCA9IG5vci0+cmVhZF9yZWcobm9yLCBTUElOT1Jf T1BfUkRJRCwgaWQsIFNQSV9OT1JfTUFYX0lEX0xFTik7DQo+ICsJdG1wID0gcmVhZF9pZChub3Is IGlkKTsNCj4gIAlpZiAodG1wIDwgMCkgew0KPiAgCQlkZXZfZGJnKG5vci0+ZGV2LCAiZXJyb3Ig JWQgcmVhZGluZyBKRURFQyBJRFxuIiwgdG1wKTsNCj4gIAkJcmV0dXJuIEVSUl9QVFIodG1wKTsN Cj4gQEAgLTIwOTYsNyArMjQ5Miw3IEBAIHN0YXRpYyBpbnQgc3BpX25vcl9yZWFkKHN0cnVjdCBt dGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwNCj4gIAkJaWYgKG5vci0+Zmxh Z3MgJiBTTk9SX0ZfUzNBTl9BRERSX0RFRkFVTFQpDQo+ICAJCQlhZGRyID0gc3BpX25vcl9zM2Fu X2FkZHJfY29udmVydChub3IsIGFkZHIpOw0KPiAgDQo+IC0JCXJldCA9IG5vci0+cmVhZChub3Is IGFkZHIsIGxlbiwgYnVmKTsNCj4gKwkJcmV0ID0gc3BpX25vcl9yZWFkX2RhdGEobm9yLCBhZGRy LCBsZW4sIGJ1Zik7DQo+ICAJCWlmIChyZXQgPT0gMCkgew0KPiAgCQkJLyogV2Ugc2hvdWxkbid0 IHNlZSAwLWxlbmd0aCByZWFkcyAqLw0KPiAgCQkJcmV0ID0gLUVJTzsNCj4gQEAgLTIxNDEsNyAr MjUzNyw3IEBAIHN0YXRpYyBpbnQgc3N0X3dyaXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2Zm X3QgdG8sIHNpemVfdCBsZW4sDQo+ICAJCW5vci0+cHJvZ3JhbV9vcGNvZGUgPSBTUElOT1JfT1Bf QlA7DQo+ICANCj4gIAkJLyogd3JpdGUgb25lIGJ5dGUuICovDQo+IC0JCXJldCA9IG5vci0+d3Jp dGUobm9yLCB0bywgMSwgYnVmKTsNCj4gKwkJcmV0ID0gc3BpX25vcl93cml0ZV9kYXRhKG5vciwg dG8sIDEsIGJ1Zik7DQo+ICAJCWlmIChyZXQgPCAwKQ0KPiAgCQkJZ290byBzc3Rfd3JpdGVfZXJy Ow0KPiAgCQlXQVJOKHJldCAhPSAxLCAiV2hpbGUgd3JpdGluZyAxIGJ5dGUgd3JpdHRlbiAlaSBi eXRlc1xuIiwNCj4gQEAgLTIxNTcsNyArMjU1Myw3IEBAIHN0YXRpYyBpbnQgc3N0X3dyaXRlKHN0 cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sDQo+ICAJCW5vci0+cHJv Z3JhbV9vcGNvZGUgPSBTUElOT1JfT1BfQUFJX1dQOw0KPiAgDQo+ICAJCS8qIHdyaXRlIHR3byBi eXRlcy4gKi8NCj4gLQkJcmV0ID0gbm9yLT53cml0ZShub3IsIHRvLCAyLCBidWYgKyBhY3R1YWwp Ow0KPiArCQlyZXQgPSBzcGlfbm9yX3dyaXRlX2RhdGEobm9yLCB0bywgMiwgYnVmICsgYWN0dWFs KTsNCj4gIAkJaWYgKHJldCA8IDApDQo+ICAJCQlnb3RvIHNzdF93cml0ZV9lcnI7DQo+ICAJCVdB Uk4ocmV0ICE9IDIsICJXaGlsZSB3cml0aW5nIDIgYnl0ZXMgd3JpdHRlbiAlaSBieXRlc1xuIiwN Cj4gQEAgLTIxODAsNyArMjU3Niw3IEBAIHN0YXRpYyBpbnQgc3N0X3dyaXRlKHN0cnVjdCBtdGRf aW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sDQo+ICAJCXdyaXRlX2VuYWJsZShub3Ip Ow0KPiAgDQo+ICAJCW5vci0+cHJvZ3JhbV9vcGNvZGUgPSBTUElOT1JfT1BfQlA7DQo+IC0JCXJl dCA9IG5vci0+d3JpdGUobm9yLCB0bywgMSwgYnVmICsgYWN0dWFsKTsNCj4gKwkJcmV0ID0gc3Bp X25vcl93cml0ZV9kYXRhKG5vciwgdG8sIDEsIGJ1ZiArIGFjdHVhbCk7DQo+ICAJCWlmIChyZXQg PCAwKQ0KPiAgCQkJZ290byBzc3Rfd3JpdGVfZXJyOw0KPiAgCQlXQVJOKHJldCAhPSAxLCAiV2hp bGUgd3JpdGluZyAxIGJ5dGUgd3JpdHRlbiAlaSBieXRlc1xuIiwNCj4gQEAgLTIyNDIsNyArMjYz OCw3IEBAIHN0YXRpYyBpbnQgc3BpX25vcl93cml0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9m Zl90IHRvLCBzaXplX3QgbGVuLA0KPiAgCQkJYWRkciA9IHNwaV9ub3JfczNhbl9hZGRyX2NvbnZl cnQobm9yLCBhZGRyKTsNCj4gIA0KPiAgCQl3cml0ZV9lbmFibGUobm9yKTsNCj4gLQkJcmV0ID0g bm9yLT53cml0ZShub3IsIGFkZHIsIHBhZ2VfcmVtYWluLCBidWYgKyBpKTsNCj4gKwkJcmV0ID0g c3BpX25vcl93cml0ZV9kYXRhKG5vciwgYWRkciwgcGFnZV9yZW1haW4sIGJ1ZiArIGkpOw0KPiAg CQlpZiAocmV0IDwgMCkNCj4gIAkJCWdvdG8gd3JpdGVfZXJyOw0KPiAgCQl3cml0dGVuID0gcmV0 Ow0KPiBAQCAtMjI2MSw4ICsyNjU3LDEwIEBAIHN0YXRpYyBpbnQgc3BpX25vcl93cml0ZShzdHJ1 Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLA0KPiAgDQo+ICBzdGF0aWMg aW50IHNwaV9ub3JfY2hlY2soc3RydWN0IHNwaV9ub3IgKm5vcikNCj4gIHsNCj4gLQlpZiAoIW5v ci0+ZGV2IHx8ICFub3ItPnJlYWQgfHwgIW5vci0+d3JpdGUgfHwNCj4gLQkJIW5vci0+cmVhZF9y ZWcgfHwgIW5vci0+d3JpdGVfcmVnKSB7DQo+ICsJaWYgKCFub3ItPmRldiB8fA0KPiArCSAgICAo IW5vci0+c3BpbWVtICYmDQo+ICsJICAgICghbm9yLT5yZWFkIHx8ICFub3ItPndyaXRlIHx8ICFu b3ItPnJlYWRfcmVnIHx8DQo+ICsJICAgICAgIW5vci0+d3JpdGVfcmVnKSkpIHsNCj4gIAkJcHJf ZXJyKCJzcGktbm9yOiBwbGVhc2UgZmlsbCBhbGwgdGhlIG5lY2Vzc2FyeSBmaWVsZHMhXG4iKTsN Cj4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+ICAJfQ0KPiBAQCAtMjI3NSw3ICsyNjczLDcgQEAgc3Rh dGljIGludCBzM2FuX25vcl9zY2FuKHN0cnVjdCBzcGlfbm9yICpub3IpDQo+ICAJaW50IHJldDsN Cj4gIAl1OCB2YWw7DQo+ICANCj4gLQlyZXQgPSBub3ItPnJlYWRfcmVnKG5vciwgU1BJTk9SX09Q X1hSRFNSLCAmdmFsLCAxKTsNCj4gKwlyZXQgPSB4cmVhZF9zcihub3IsICZ2YWwpOw0KPiAgCWlm IChyZXQgPCAwKSB7DQo+ICAJCWRldl9lcnIobm9yLT5kZXYsICJlcnJvciAlZCByZWFkaW5nIFhS RFNSXG4iLCAoaW50KSByZXQpOw0KPiAgCQlyZXR1cm4gcmV0Ow0KPiBAQCAtMjQwNSw3ICsyODAz LDcgQEAgc3RhdGljIGludCBzcGlfbm9yX3JlYWRfcmF3KHN0cnVjdCBzcGlfbm9yICpub3IsIHUz MiBhZGRyLCBzaXplX3QgbGVuLCB1OCAqYnVmKQ0KPiAgCWludCByZXQ7DQo+ICANCj4gIAl3aGls ZSAobGVuKSB7DQo+IC0JCXJldCA9IG5vci0+cmVhZChub3IsIGFkZHIsIGxlbiwgYnVmKTsNCj4g KwkJcmV0ID0gc3BpX25vcl9yZWFkX2RhdGEobm9yLCBhZGRyLCBsZW4sIGJ1Zik7DQo+ICAJCWlm ICghcmV0IHx8IHJldCA+IGxlbikNCj4gIAkJCXJldHVybiAtRUlPOw0KPiAgCQlpZiAocmV0IDwg MCkNCj4gQEAgLTQxODgsNiArNDU4NiwyMTUgQEAgaW50IHNwaV9ub3Jfc2NhbihzdHJ1Y3Qgc3Bp X25vciAqbm9yLCBjb25zdCBjaGFyICpuYW1lLA0KPiAgfQ0KPiAgRVhQT1JUX1NZTUJPTF9HUEwo c3BpX25vcl9zY2FuKTsNCj4gIA0KPiArc3RhdGljIGludCBzcGlfbm9yX3Byb2JlKHN0cnVjdCBz cGlfbWVtICpzcGltZW0pDQo+ICt7DQo+ICsJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IHNwaW1l bS0+c3BpOw0KPiArCXN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhICpkYXRhOw0KPiArCXN0cnVj dCBzcGlfbm9yICpub3I7DQo+ICsJc3RydWN0IHNwaV9ub3JfaHdjYXBzIGh3Y2FwcyA9IHsNCj4g KwkJLm1hc2sgPSBTTk9SX0hXQ0FQU19SRUFEIHwNCj4gKwkJCVNOT1JfSFdDQVBTX1JFQURfRkFT VCB8DQo+ICsJCQlTTk9SX0hXQ0FQU19QUCwNCj4gKwl9Ow0KPiArCWNoYXIgKmZsYXNoX25hbWU7 DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCWRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKCZzcGktPmRl dik7DQoNCnlvdSBjYW4gZG8gdGhlIGluaXRpYWxpemF0aW9uIGF0IGRlY2xhcmF0aW9uDQoNCj4g Kw0KPiArCW5vciA9IGRldm1fa3phbGxvYygmc3BpLT5kZXYsIHNpemVvZigqbm9yKSwgR0ZQX0tF Uk5FTCk7DQo+ICsJaWYgKCFub3IpDQo+ICsJCXJldHVybiAtRU5PTUVNOw0KPiArDQo+ICsJLyoN Cj4gKwkgKiBXZSBuZWVkIHRoZSBib3VuY2UgYnVmZmVyIGVhcmx5IHRvIHJlYWQvd3JpdGUgcmVn aXN0ZXJzIHdoZW4gZ29pbmcNCj4gKwkgKiB0aHJvdWdoIHRoZSBzcGktbWVtIGxheWVyIChidWZm ZXJzIGhhdmUgdG8gYmUgRE1BLWFibGUpLg0KPiArCSAqIFdlJ2xsIHJlYWxsb2NhdGUgYSBuZXcg YnVmZmVyIGlmIG5vci0+cGFnZV9zaXplIHR1cm5zIG91dCB0byBiZQ0KPiArCSAqIGdyZWF0ZXIg dGhhbiBQQUdFX1NJWkUgKHdoaWNoIHNob3VsZG4ndCBoYXBwZW4gYmVmb3JlIGxvbmcgc2luY2Ug Tk9SDQo+ICsJICogcGFnZXMgYXJlIHVzdWFsbHkgbGVzcyB0aGFuIDFLQikgYWZ0ZXIgc3BpX25v cl9zY2FuKCkgcmV0dXJucy4NCj4gKwkgKi8NCj4gKwlub3ItPmJvdW5jZWJ1Zl9zaXplID0gUEFH RV9TSVpFOw0KPiArCW5vci0+Ym91bmNlYnVmID0gZGV2bV9rbWFsbG9jKCZzcGktPmRldiwgbm9y LT5ib3VuY2VidWZfc2l6ZSwNCj4gKwkJCQkgICAgICBHRlBfS0VSTkVMKTsNCj4gKwlpZiAoIW5v ci0+Ym91bmNlYnVmKQ0KPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gKw0KPiArCW5vci0+c3BpbWVt ID0gc3BpbWVtOw0KPiArCW5vci0+ZGV2ID0gJnNwaS0+ZGV2Ow0KPiArCXNwaV9ub3Jfc2V0X2Zs YXNoX25vZGUobm9yLCBzcGktPmRldi5vZl9ub2RlKTsNCj4gKw0KPiArCXNwaV9tZW1fc2V0X2Ry dmRhdGEoc3BpbWVtLCBub3IpOw0KPiArDQo+ICsJaWYgKHNwaS0+bW9kZSAmIFNQSV9SWF9PQ1RB TCkgew0KPiArCQlod2NhcHMubWFzayB8PSBTTk9SX0hXQ0FQU19SRUFEXzFfMV84Ow0KPiArDQo+ ICsJCWlmIChzcGktPm1vZGUgJiBTUElfVFhfT0NUQUwpDQo+ICsJCQlod2NhcHMubWFzayB8PSAo U05PUl9IV0NBUFNfUkVBRF8xXzhfOCB8DQo+ICsJCQkJCVNOT1JfSFdDQVBTX1BQXzFfMV84IHwN Cj4gKwkJCQkJU05PUl9IV0NBUFNfUFBfMV84XzgpOw0KPiArCX0gZWxzZSBpZiAoc3BpLT5tb2Rl ICYgU1BJX1JYX1FVQUQpIHsNCj4gKwkJaHdjYXBzLm1hc2sgfD0gU05PUl9IV0NBUFNfUkVBRF8x XzFfNDsNCj4gKw0KPiArCQlpZiAoc3BpLT5tb2RlICYgU1BJX1RYX1FVQUQpDQo+ICsJCQlod2Nh cHMubWFzayB8PSAoU05PUl9IV0NBUFNfUkVBRF8xXzRfNCB8DQo+ICsJCQkJCVNOT1JfSFdDQVBT X1BQXzFfMV80IHwNCj4gKwkJCQkJU05PUl9IV0NBUFNfUFBfMV80XzQpOw0KPiArCX0gZWxzZSBp ZiAoc3BpLT5tb2RlICYgU1BJX1JYX0RVQUwpIHsNCj4gKwkJaHdjYXBzLm1hc2sgfD0gU05PUl9I V0NBUFNfUkVBRF8xXzFfMjsNCj4gKw0KPiArCQlpZiAoc3BpLT5tb2RlICYgU1BJX1RYX0RVQUwp DQo+ICsJCQlod2NhcHMubWFzayB8PSBTTk9SX0hXQ0FQU19SRUFEXzFfMl8yOw0KPiArCX0NCj4g Kw0KPiArCWlmIChkYXRhICYmIGRhdGEtPm5hbWUpDQo+ICsJCW5vci0+bXRkLm5hbWUgPSBkYXRh LT5uYW1lOw0KPiArDQo+ICsJaWYgKCFub3ItPm10ZC5uYW1lKQ0KPiArCQlub3ItPm10ZC5uYW1l ID0gc3BpX21lbV9nZXRfbmFtZShzcGltZW0pOw0KPiArDQo+ICsJLyoNCj4gKwkgKiBGb3Igc29t ZSAoaGlzdG9yaWNhbD8pIHJlYXNvbiBtYW55IHBsYXRmb3JtcyBwcm92aWRlIHR3byBkaWZmZXJl bnQNCj4gKwkgKiBuYW1lcyBpbiBmbGFzaF9wbGF0Zm9ybV9kYXRhOiAibmFtZSIgYW5kICJ0eXBl Ii4gUXVpdGUgb2Z0ZW4gbmFtZSBpcw0KPiArCSAqIHNldCB0byAibTI1cDgwIiBhbmQgdGhlbiAi dHlwZSIgcHJvdmlkZXMgYSByZWFsIGNoaXAgbmFtZS4NCj4gKwkgKiBJZiB0aGF0J3MgdGhlIGNh c2UsIHJlc3BlY3QgInR5cGUiIGFuZCBpZ25vcmUgYSAibmFtZSIuDQo+ICsJICovDQo+ICsJaWYg KGRhdGEgJiYgZGF0YS0+dHlwZSkNCj4gKwkJZmxhc2hfbmFtZSA9IGRhdGEtPnR5cGU7DQo+ICsJ ZWxzZSBpZiAoIXN0cmNtcChzcGktPm1vZGFsaWFzLCAic3BpLW5vciIpKQ0KPiArCQlmbGFzaF9u YW1lID0gTlVMTDsgLyogYXV0by1kZXRlY3QgKi8NCj4gKwllbHNlDQo+ICsJCWZsYXNoX25hbWUg PSBzcGktPm1vZGFsaWFzOw0KPiArDQo+ICsJcmV0ID0gc3BpX25vcl9zY2FuKG5vciwgZmxhc2hf bmFtZSwgJmh3Y2Fwcyk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiAr CS8qDQo+ICsJICogTm9uZSBvZiB0aGUgZXhpc3RpbmcgcGFydHMgaGF2ZSA+IDUxMkIgcGFnZXMs IGJ1dCBsZXQncyBwbGF5IHNhZmUNCj4gKwkgKiBhbmQgYWRkIHRoaXMgbG9naWMgc28gdGhhdCBp ZiBhbnlvbmUgZXZlciBhZGRzIHN1cHBvcnQgZm9yIHN1Y2gNCj4gKwkgKiBhIE5PUiB3ZSBkb24n dCBlbmQgdXAgd2l0aCBidWZmZXIgb3ZlcmZsb3dzLg0KPiArCSAqLw0KPiArCWlmIChub3ItPnBh Z2Vfc2l6ZSA+IFBBR0VfU0laRSkgew0KPiArCQlub3ItPmJvdW5jZWJ1Zl9zaXplID0gbm9yLT5w YWdlX3NpemU7DQo+ICsJCWRldm1fa2ZyZWUobm9yLT5kZXYsIG5vci0+Ym91bmNlYnVmKTsNCj4g KwkJbm9yLT5ib3VuY2VidWYgPSBkZXZtX2ttYWxsb2Mobm9yLT5kZXYsDQo+ICsJCQkJCSAgICAg IG5vci0+Ym91bmNlYnVmX3NpemUsDQo+ICsJCQkJCSAgICAgIEdGUF9LRVJORUwpOw0KPiArCQlp ZiAoIW5vci0+Ym91bmNlYnVmKQ0KPiArCQkJcmV0dXJuIC1FTk9NRU07DQo+ICsJfQ0KPiArDQo+ ICsJcmV0dXJuIG10ZF9kZXZpY2VfcmVnaXN0ZXIoJm5vci0+bXRkLCBkYXRhID8gZGF0YS0+cGFy dHMgOiBOVUxMLA0KPiArCQkJCSAgIGRhdGEgPyBkYXRhLT5ucl9wYXJ0cyA6IDApOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgaW50IHNwaV9ub3JfcmVtb3ZlKHN0cnVjdCBzcGlfbWVtICpzcGltZW0p DQo+ICt7DQo+ICsJc3RydWN0IHNwaV9ub3IgKm5vciA9IHNwaV9tZW1fZ2V0X2RydmRhdGEoc3Bp bWVtKTsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJc3BpX25vcl9yZXN0b3JlKG5vcik7DQo+ICsN Cj4gKwkvKiBDbGVhbiB1cCBNVEQgc3R1ZmYuICovDQo+ICsJcmV0ID0gbXRkX2RldmljZV91bnJl Z2lzdGVyKCZub3ItPm10ZCk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDs+ICsNCj4g KwlyZXR1cm4gMDsNCg0KcmV0dXJuIG10ZF9kZXZpY2VfdW5yZWdpc3Rlcigmbm9yLT5tdGQpOyBk aXJlY3RseQ0KDQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIHNwaV9ub3Jfc2h1dGRvd24oc3Ry dWN0IHNwaV9tZW0gKnNwaW1lbSkNCj4gK3sNCj4gKwlzdHJ1Y3Qgc3BpX25vciAqbm9yID0gc3Bp X21lbV9nZXRfZHJ2ZGF0YShzcGltZW0pOw0KPiArDQo+ICsJc3BpX25vcl9yZXN0b3JlKG5vcik7 DQo+ICt9DQo+ICsNCj4gKy8qDQo+ICsgKiBEbyBOT1QgYWRkIHRvIHRoaXMgYXJyYXkgd2l0aG91 dCByZWFkaW5nIHRoZSBmb2xsb3dpbmc6DQo+ICsgKg0KPiArICogSGlzdG9yaWNhbGx5LCBtYW55 IGZsYXNoIGRldmljZXMgYXJlIGJvdW5kIHRvIHRoaXMgZHJpdmVyIGJ5IHRoZWlyIG5hbWUuIEJ1 dA0KPiArICogc2luY2UgbW9zdCBvZiB0aGVzZSBmbGFzaCBhcmUgY29tcGF0aWJsZSB0byBzb21l IGV4dGVudCwgYW5kIHRoZWlyDQo+ICsgKiBkaWZmZXJlbmNlcyBjYW4gb2Z0ZW4gYmUgZGlmZmVy ZW50aWF0ZWQgYnkgdGhlIEpFREVDIHJlYWQtSUQgY29tbWFuZCwgd2UNCj4gKyAqIGVuY291cmFn ZSBuZXcgdXNlcnMgdG8gYWRkIHN1cHBvcnQgdG8gdGhlIHNwaS1ub3IgbGlicmFyeSwgYW5kIHNp bXBseSBiaW5kDQo+ICsgKiBhZ2FpbnN0IGEgZ2VuZXJpYyBzdHJpbmcgaGVyZSAoZS5nLiwgImpl ZGVjLHNwaS1ub3IiKS4NCj4gKyAqDQo+ICsgKiBNYW55IGZsYXNoIG5hbWVzIGFyZSBrZXB0IGhl cmUgaW4gdGhpcyBsaXN0IChhcyB3ZWxsIGFzIGluIHNwaS1ub3IuYykgdG8NCj4gKyAqIGtlZXAg dGhlbSBhdmFpbGFibGUgYXMgbW9kdWxlIGFsaWFzZXMgZm9yIGV4aXN0aW5nIHBsYXRmb3Jtcy4N Cj4gKyAqLw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBzcGlfZGV2aWNlX2lkIHNwaV9ub3JfZGV2 X2lkc1tdID0gew0KPiArCS8qDQo+ICsJICogQWxsb3cgbm9uLURUIHBsYXRmb3JtIGRldmljZXMg dG8gYmluZCB0byB0aGUgInNwaS1ub3IiIG1vZGFsaWFzLCBhbmQNCj4gKwkgKiBoYWNrIGFyb3Vu ZCB0aGUgZmFjdCB0aGF0IHRoZSBTUEkgY29yZSBkb2VzIG5vdCBwcm92aWRlIHVldmVudA0KPiAr CSAqIG1hdGNoaW5nIGZvciAub2ZfbWF0Y2hfdGFibGUNCj4gKwkgKi8NCj4gKwl7InNwaS1ub3Ii fSwNCj4gKw0KPiArCS8qDQo+ICsJICogRW50cmllcyBub3QgdXNlZCBpbiBEVHMgdGhhdCBzaG91 bGQgYmUgc2FmZSB0byBkcm9wIGFmdGVyIHJlcGxhY2luZw0KPiArCSAqIHRoZW0gd2l0aCAic3Bp LW5vciIgaW4gcGxhdGZvcm0gZGF0YS4NCj4gKwkgKi8NCj4gKwl7InMyNXNsMDY0YSJ9LAl7Incy NXgxNiJ9LAl7Im0yNXAxMCJ9LAl7Im0yNXB4NjQifSwNCj4gKw0KPiArCS8qDQo+ICsJICogRW50 cmllcyB0aGF0IHdlcmUgdXNlZCBpbiBEVHMgd2l0aG91dCAiamVkZWMsc3BpLW5vciIgZmFsbGJh Y2sgYW5kDQo+ICsJICogc2hvdWxkIGJlIGtlcHQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHku DQo+ICsJICovDQo+ICsJeyJhdDI1ZGYzMjFhIn0sCXsiYXQyNWRmNjQxIn0sCXsiYXQyNmRmMDgx YSJ9LA0KPiArCXsibXgyNWw0MDA1YSJ9LAl7Im14MjVsMTYwNmUifSwJeyJteDI1bDY0MDVkIn0s CXsibXgyNWwxMjgwNWQifSwNCj4gKwl7Im14MjVsMjU2MzVlIn0seyJteDY2bDUxMjM1bCJ9LA0K PiArCXsibjI1cTA2NCJ9LAl7Im4yNXExMjhhMTEifSwJeyJuMjVxMTI4YTEzIn0sCXsibjI1cTUx MmEifSwNCj4gKwl7InMyNWZsMjU2czEifSwJeyJzMjVmbDUxMnMifSwJeyJzMjVzbDEyODAxIn0s CXsiczI1ZmwwMDhrIn0sDQo+ICsJeyJzMjVmbDA2NGsifSwNCj4gKwl7InNzdDI1dmYwNDBiIn0s eyJzc3QyNXZmMDE2YiJ9LHsic3N0MjV2ZjAzMmIifSx7InNzdDI1d2YwNDAifSwNCj4gKwl7Im0y NXA0MCJ9LAl7Im0yNXA4MCJ9LAl7Im0yNXAxNiJ9LAl7Im0yNXAzMiJ9LA0KPiArCXsibTI1cDY0 In0sCXsibTI1cDEyOCJ9LA0KPiArCXsidzI1eDgwIn0sCXsidzI1eDMyIn0sCXsidzI1cTMyIn0s CXsidzI1cTMyZHcifSwNCj4gKwl7IncyNXE4MGJsIn0sCXsidzI1cTEyOCJ9LAl7IncyNXEyNTYi fSwNCj4gKw0KPiArCS8qIEZsYXNoZXMgdGhhdCBjYW4ndCBiZSBkZXRlY3RlZCB1c2luZyBKRURF QyAqLw0KPiArCXsibTI1cDA1LW5vbmplZGVjIn0sCXsibTI1cDEwLW5vbmplZGVjIn0sCXsibTI1 cDIwLW5vbmplZGVjIn0sDQo+ICsJeyJtMjVwNDAtbm9uamVkZWMifSwJeyJtMjVwODAtbm9uamVk ZWMifSwJeyJtMjVwMTYtbm9uamVkZWMifSwNCj4gKwl7Im0yNXAzMi1ub25qZWRlYyJ9LAl7Im0y NXA2NC1ub25qZWRlYyJ9LAl7Im0yNXAxMjgtbm9uamVkZWMifSwNCj4gKw0KPiArCS8qIEV2ZXJz cGluIE1SQU1zIChub24tSkVERUMpICovDQo+ICsJeyAibXIyNWgxMjgiIH0sIC8qIDEyOCBLaWIs IDQwIE1IeiAqLw0KPiArCXsgIm1yMjVoMjU2IiB9LCAvKiAyNTYgS2liLCA0MCBNSHogKi8NCj4g Kwl7ICJtcjI1aDEwIiB9LCAgLyogICAxIE1pYiwgNDAgTUh6ICovDQo+ICsJeyAibXIyNWg0MCIg fSwgIC8qICAgNCBNaWIsIDQwIE1IeiAqLw0KPiArDQo+ICsJeyB9LA0KPiArfTsNCj4gK01PRFVM RV9ERVZJQ0VfVEFCTEUoc3BpLCBzcGlfbm9yX2Rldl9pZHMpOw0KPiArDQo+ICtzdGF0aWMgY29u c3Qgc3RydWN0IG9mX2RldmljZV9pZCBzcGlfbm9yX29mX3RhYmxlW10gPSB7DQo+ICsJLyoNCj4g KwkgKiBHZW5lcmljIGNvbXBhdGliaWxpdHkgZm9yIFNQSSBOT1IgdGhhdCBjYW4gYmUgaWRlbnRp ZmllZCBieSB0aGUNCj4gKwkgKiBKRURFQyBSRUFEIElEIG9wY29kZSAoMHg5RikuIFVzZSB0aGlz LCBpZiBwb3NzaWJsZS4NCj4gKwkgKi8NCj4gKwl7IC5jb21wYXRpYmxlID0gImplZGVjLHNwaS1u b3IiIH0sDQo+ICsJeyAvKiBzZW50aW5lbCAqLyB9LA0KPiArfTsNCj4gK01PRFVMRV9ERVZJQ0Vf VEFCTEUob2YsIHNwaV9ub3Jfb2ZfdGFibGUpOw0KPiArDQo+ICsvKg0KPiArICogUkVWSVNJVDog bWFueSBvZiB0aGVzZSBjaGlwcyBoYXZlIGRlZXAgcG93ZXItZG93biBtb2Rlcywgd2hpY2gNCj4g KyAqIHNob3VsZCBjbGVhcmx5IGJlIGVudGVyZWQgb24gc3VzcGVuZCgpIHRvIG1pbmltaXplIHBv d2VyIHVzZS4NCj4gKyAqIEFuZCBhbHNvIHdoZW4gdGhleSdyZSBvdGhlcndpc2UgaWRsZS4uLg0K PiArICovDQo+ICtzdGF0aWMgc3RydWN0IHNwaV9tZW1fZHJpdmVyIHNwaV9ub3JfZHJpdmVyID0g ew0KPiArCS5zcGlkcnYgPSB7DQo+ICsJCS5kcml2ZXIgPSB7DQo+ICsJCQkubmFtZSA9ICJzcGkt bm9yIiwNCj4gKwkJCS5vZl9tYXRjaF90YWJsZSA9IHNwaV9ub3Jfb2ZfdGFibGUsDQo+ICsJCX0s DQo+ICsJCS5pZF90YWJsZSA9IHNwaV9ub3JfZGV2X2lkcywNCj4gKwl9LA0KPiArCS5wcm9iZSA9 IHNwaV9ub3JfcHJvYmUsDQo+ICsJLnJlbW92ZSA9IHNwaV9ub3JfcmVtb3ZlLA0KPiArCS5zaHV0 ZG93biA9IHNwaV9ub3Jfc2h1dGRvd24sDQo+ICt9Ow0KPiArbW9kdWxlX3NwaV9tZW1fZHJpdmVy KHNwaV9ub3JfZHJpdmVyKTsNCj4gKw0KPiAgTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOw0KPiAg TU9EVUxFX0FVVEhPUigiSHVhbmcgU2hpamllIDxzaGlqaWU4QGdtYWlsLmNvbT4iKTsNCj4gIE1P RFVMRV9BVVRIT1IoIk1pa2UgTGF2ZW5kZXIiKTsNCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGlu dXgvbXRkL3NwaS1ub3IuaCBiL2luY2x1ZGUvbGludXgvbXRkL3NwaS1ub3IuaA0KPiBpbmRleCBi M2QzNjBiMGVlM2QuLmFjMTY3NDVmNWVmOCAxMDA2NDQNCj4gLS0tIGEvaW5jbHVkZS9saW51eC9t dGQvc3BpLW5vci5oDQo+ICsrKyBiL2luY2x1ZGUvbGludXgvbXRkL3NwaS1ub3IuaA0KPiBAQCAt OSw2ICs5LDcgQEANCj4gICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4NCj4gICNpbmNsdWRlIDxs aW51eC9tdGQvY2ZpLmg+DQo+ICAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPg0KPiArI2luY2x1 ZGUgPGxpbnV4L3NwaS9zcGktbWVtLmg+DQo+ICANCj4gIC8qDQo+ICAgKiBNYW51ZmFjdHVyZXIg SURzDQo+IEBAIC0zNDQsNiArMzQ1LDEwIEBAIHN0cnVjdCBmbGFzaF9pbmZvOw0KPiAgICogQG10 ZDoJCXBvaW50IHRvIGEgbXRkX2luZm8gc3RydWN0dXJlDQo+ICAgKiBAbG9jazoJCXRoZSBsb2Nr IGZvciB0aGUgcmVhZC93cml0ZS9lcmFzZS9sb2NrL3VubG9jayBvcGVyYXRpb25zDQo+ICAgKiBA ZGV2OgkJcG9pbnQgdG8gYSBzcGkgZGV2aWNlLCBvciBhIHNwaSBub3IgY29udHJvbGxlciBkZXZp Y2UuDQo+ICsgKiBAc3BpbWVtOgkJcG9pbnQgdG8gdGhlIHNwaSBtZW0gZGV2aWNlDQo+ICsgKiBA Ym91bmNlYnVmOgkJYm91bmNlIGJ1ZmZlciB1c2VkIHdoZW4gdGhlIGJ1ZmZlciBwYXNzZWQgYnkg dGhlIE1URA0KPiArICogICAgICAgICAgICAgICAgICAgICAgbGF5ZXIgaXMgbm90IERNQS1hYmxl DQo+ICsgKiBAYm91bmNlYnVmX3NpemU6CXNpemUgb2YgdGhlIGJvdW5jZSBidWZmZQ0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5idWZmZXINCg0KPiAgICogQGlu Zm86CQlzcGktbm9yIHBhcnQgSkRFQyBNRlIgaWQgYW5kIG90aGVyIGluZm8NCj4gICAqIEBwYWdl X3NpemU6CQl0aGUgcGFnZSBzaXplIG9mIHRoZSBTUEkgTk9SDQo+ICAgKiBAYWRkcl93aWR0aDoJ CW51bWJlciBvZiBhZGRyZXNzIGJ5dGVzDQo+IEBAIC0zODAsNiArMzg1LDkgQEAgc3RydWN0IHNw aV9ub3Igew0KPiAgCXN0cnVjdCBtdGRfaW5mbwkJbXRkOw0KPiAgCXN0cnVjdCBtdXRleAkJbG9j azsNCj4gIAlzdHJ1Y3QgZGV2aWNlCQkqZGV2Ow0KPiArCXN0cnVjdCBzcGlfbWVtCQkqc3BpbWVt Ow0KPiArCXZvaWQJCQkqYm91bmNlYnVmOw0KPiArCXVuc2lnbmVkIGludAkJYm91bmNlYnVmX3Np emU7DQoNCnNpemVfdD8NCg0KUGxlYXNlIHJ1biBjaGVja3BhdGNoIC0tc3RyaWN0IG92ZXIgdGhl IHBhdGNoLCB0aGVyZSBhcmUgZmV3IHRoaW5ncyB0byBmaXguDQoNCkRvIHlvdSB0aGluayBpdCBp cyB3b3J0aCBkb2N1bWVudGluZyB0aGUgbmV3IGZ1bmN0aW9ucz8NCg0KQ2hlZXJzLA0KdGENCg==