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=-8.3 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_2 autolearn=unavailable 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 E2D2AC432C0 for ; Tue, 3 Dec 2019 09:50:30 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 806222073B for ; Tue, 3 Dec 2019 09:50:30 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=nxp.com header.i=@nxp.com header.b="qhczgTzp" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725997AbfLCJu0 (ORCPT ); Tue, 3 Dec 2019 04:50:26 -0500 Received: from mail-eopbgr140082.outbound.protection.outlook.com ([40.107.14.82]:33861 "EHLO EUR01-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725773AbfLCJuZ (ORCPT ); Tue, 3 Dec 2019 04:50:25 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JnPFAl89Z54KMcjwWl0FxQvKq9fxpV121U1l58/gk6kLykQXuzCWlz0CCBCOuFuIQhXMHmJpXqPkrEDCp72S4crFhuYfnysxwiyXLKjMtYebgEDyzvHX6Y3MdTxfblvZn5CT8AkdqsngLt5S2XicTEbTmPGIthaSElXIuR0r95DyhAwpqlwCXAtn9cMvl6qKvg44H1eiRhsWaom7wYgQLvNZ+yacSfr6BRicxwsgp70JYtInnN3x+BfREwWdiY3AmDY1FICQaAAVwxiBn9S+/QCbcW5RR/UtOw9qbcj/gtXnSpF3xijX60rF1u74GhowqWRVMfaQJtfdvR/OPfquwQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Yeqz8craGmmvK7AO8f3zO0hftS0164os1QXqY2koQO0=; b=CbfWxHTWv3w8kJg/8N+cFxKLLbFFRIAj26DO9kizCpIWD+iaQV/YTcdl+a6HMDxPABBaH2NjLBG91bRH0kIUJm3Ffbu2AdwQo36dKzM1OqVTLOh+NmPtv/0A9XoPjzTVpoa05dbyGUX1Pr7y+u7qWs5AA15qDcGODiK11eZ3zIDtTlO749NQDZONghNB2XV65R62hspKGOWhuRDIPM+71Gr5RwrGGv84hFc0WfEciM/xzswYve2vbnH+TzcNVZKhW4TfZJNJuON5geYh9CEw1/cwFEQ5LVc0oElEAHXRhdhzGhyU9/+CAY+AwHhjIJg4qBcGZvMy1JXu7E8ZNBAFRQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Yeqz8craGmmvK7AO8f3zO0hftS0164os1QXqY2koQO0=; b=qhczgTzp7qo+3UVwV8pnNbu8Gujf8biUii40yCXieAkwaKAmRUVeNAN71CKy0vMcLTVBYKKWGVQ2OSWvJmjLap3d03M0Fbn3I7+0Wp3aWcKI188fjWlVXN56XRO7O+O+1/pwbWj8PVAQOE1mI3ftxNhEWlCwkDqLnr1PEmOnBNI= Received: from VI1PR04MB3278.eurprd04.prod.outlook.com (10.170.226.16) by VI1PR04MB4701.eurprd04.prod.outlook.com (20.177.48.154) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2495.21; Tue, 3 Dec 2019 09:50:03 +0000 Received: from VI1PR04MB3278.eurprd04.prod.outlook.com ([fe80::2047:380c:ad37:68a9]) by VI1PR04MB3278.eurprd04.prod.outlook.com ([fe80::2047:380c:ad37:68a9%3]) with mapi id 15.20.2516.003; Tue, 3 Dec 2019 09:50:03 +0000 From: Robert Chiras To: dl-linux-imx , "narmstrong@baylibre.com" , "robh+dt@kernel.org" , "linux-kernel@vger.kernel.org" , "lee.jones@linaro.org" , "devicetree@vger.kernel.org" , "agx@sigxcpu.org" , "festevam@gmail.com" , "jernej.skrabec@siol.net" , "daniel@ffwll.ch" , "mark.rutland@arm.com" , "a.hajda@samsung.com" , "dri-devel@lists.freedesktop.org" , "jonas@kwiboo.se" , "shawnguo@kernel.org" , "linux-arm-kernel@lists.infradead.org" , "sam@ravnborg.org" , "airlied@linux.ie" , "Laurent.pinchart@ideasonboard.com" , "kernel@pengutronix.de" , "arnd@arndb.de" , "s.hauer@pengutronix.de" Subject: Re: [EXT] [PATCH v8 2/2] drm/bridge: Add NWL MIPI DSI host controller support Thread-Topic: [EXT] [PATCH v8 2/2] drm/bridge: Add NWL MIPI DSI host controller support Thread-Index: AQHVqUeii4HpgjhtXkmMEhgV0QanA6eoK3cA Date: Tue, 3 Dec 2019 09:50:03 +0000 Message-ID: <1575366594.6423.61.camel@nxp.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: Evolution 3.18.5.2-0ubuntu3.2 authentication-results: spf=none (sender IP is ) smtp.mailfrom=robert.chiras@nxp.com; x-originating-ip: [89.37.124.34] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: cb5d0b42-b625-4cde-24f0-08d777d62bb9 x-ms-traffictypediagnostic: VI1PR04MB4701:|VI1PR04MB4701: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:4303; x-forefront-prvs: 02408926C4 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(4636009)(376002)(366004)(136003)(346002)(396003)(39860400002)(189003)(199004)(11346002)(99286004)(66476007)(66946007)(66446008)(50226002)(81156014)(64756008)(66556008)(81166006)(76116006)(91956017)(14454004)(36756003)(6116002)(2906002)(3846002)(110136005)(8936002)(6246003)(30864003)(478600001)(7736002)(14444005)(5024004)(305945005)(66574012)(5660300002)(256004)(316002)(71200400001)(76176011)(71190400001)(8676002)(7416002)(446003)(229853002)(6436002)(6506007)(186003)(25786009)(103116003)(44832011)(86362001)(102836004)(2201001)(26005)(6512007)(2616005)(6486002)(2501003)(99106002)(921003)(1121003)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:VI1PR04MB4701;H:VI1PR04MB3278.eurprd04.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: rAUcdtakldB7Rtf0iwXNlTWXuszyPuLZVmpgrX06b9hjSMsTU+lEMtYivpVuZsmOHklN1I+twS6QOyzc6WKHpjJiYQlYQTdZoVtLfRPhTyJOPXy9MB8r0Q/9otruJHseMsbw9/Ot3CjC24lDBi0QMbJZYghAwXwhJl2x1BmMqJkVINiEQCoEyl7km/FNkgD4A1a4LFSDaQNuB/+UPuu/mRfBEwu0dVrZjbs4ZTTEtqf4T3RYzg2WXPOS7nqDoItucpF7GAbR6VI+9xL5ohn/8hO0+fz1Va+bkW6UiXY4uUm1kPxOedneNOf9gwfkJMXw2kdHWiHstLlyH8ywBIoGNhI/uLPjBHsDjPpRYm9wTW/N1ta1d4FABBlwrjmqiKHqSwuzJblhRS9/Ky292tMHphEk/YywHwOINCUe6ukTOuUIpncMMJ43nuf0C1dboBKMBXUJsX1TV0hWxsjutH4T720iAts8kRjip1nM1fxJ9JtiKmt1FUmV62GmdhvFxyJb6jgnw7bhEKaeBs54PMoNglk18ySQFR6L7g15ILaxz4w= Content-Type: text/plain; charset="utf-8" Content-ID: <0B1B34EB0C5489418AA27167A2A7DD97@eurprd04.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: cb5d0b42-b625-4cde-24f0-08d777d62bb9 X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Dec 2019 09:50:03.3766 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: g1uz9mabqlzbyRJdubjNQKd5JK99B/IizQ+iOMcK8MTcSeQcX1Z53Hd220iUrcsoksiGINWNbX0X/kMVFp2xCA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4701 Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org SGkgR3VpZG8sDQoNClNpbmNlIHlvdXIgbGFzdCByZXZpc2lvbiBzZW50LCBJJ3ZlIGRvbmUgbW9y ZSB0ZXN0cyBoZXJlIGFuZCBmb3VuZCBhDQpmZXcgbW9yZSBpbXByb3ZlbWVudHMgdGhhdCBjb3Vs ZCBiZSBhZGRlZCB0byB0aGlzIGRyaXZlci4NClNlZSBpbmxpbmUuDQoNCk9uIEx1LCAyMDE5LTEy LTAyIGF0IDIwOjM1ICswMTAwLCBHdWlkbyBHw7xudGhlciB3cm90ZToNCj4gQ2F1dGlvbjogRVhU IEVtYWlsDQo+IA0KPiBUaGlzIGFkZHMgaW5pdGlhbCBzdXBwb3J0IGZvciB0aGUgTldMIE1JUEkg RFNJIEhvc3QgY29udHJvbGxlciBmb3VuZA0KPiBvbg0KPiBpLk1YOCBTb0NzLg0KPiANCj4gSXQg YWRkcyBzdXBwb3J0IGZvciB0aGUgaS5NWDhNUSBidXQgdGhlIHNhbWUgSVAgY2FuIGJlIGZvdW5k IG9uDQo+IGUuZy4gdGhlIGkuTVg4UVhQLg0KPiANCj4gSXQgaGFzIGJlZW4gdGVzdGVkIG9uIHRo ZSBMaWJyZW0gNSBkZXZraXQgdXNpbmcgbXhzZmIuDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBHdWlk byBHw7xudGhlciA8YWd4QHNpZ3hjcHUub3JnPg0KPiBDby1kZXZlbG9wZWQtYnk6IFJvYmVydCBD aGlyYXMgPHJvYmVydC5jaGlyYXNAbnhwLmNvbT4NCj4gU2lnbmVkLW9mZi1ieTogUm9iZXJ0IENo aXJhcyA8cm9iZXJ0LmNoaXJhc0BueHAuY29tPg0KPiBUZXN0ZWQtYnk6IFJvYmVydCBDaGlyYXMg PHJvYmVydC5jaGlyYXNAbnhwLmNvbT4NCj4gLS0tDQo+IMKgZHJpdmVycy9ncHUvZHJtL2JyaWRn ZS9LY29uZmlnwqDCoMKgfMKgwqDCoDE2ICsNCj4gwqBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01h a2VmaWxlwqDCoHzCoMKgwqDCoDMgKw0KPiDCoGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRz aS5jIHwgMTIzMA0KPiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gwqBkcml2ZXJz L2dwdS9kcm0vYnJpZGdlL253bC1kc2kuaCB8wqDCoDE0NCArKysrDQo+IMKgNCBmaWxlcyBjaGFu Z2VkLCAxMzkzIGluc2VydGlvbnMoKykNCj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL2JyaWRnZS9ud2wtZHNpLmMNCj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL2JyaWRnZS9ud2wtZHNpLmgNCj4gDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vYnJpZGdlL0tjb25maWcNCj4gYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcNCj4g aW5kZXggMzQzNjI5NzZjZDZmLi42ZmI1MzRmNTVkMjIgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9icmlkZ2UvS2NvbmZpZw0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tj b25maWcNCj4gQEAgLTY1LDYgKzY1LDIyIEBAIGNvbmZpZyBEUk1fTUVHQUNISVBTX1NURFBYWFhY X0dFX0I4NTBWM19GVw0KPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdG8gRFArKy4gVGhpcyBpcyB1 c2VkIHdpdGggdGhlIGkuTVg2IGlteC1sZGINCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRyaXZl ci4gWW91IGFyZSBsaWtlbHkgdG8gc2F5IE4gaGVyZS4NCj4gDQo+ICtjb25maWcgRFJNX05XTF9N SVBJX0RTSQ0KPiArwqDCoMKgwqDCoMKgwqB0cmlzdGF0ZSAiTm9ydGh3ZXN0IExvZ2ljIE1JUEkg RFNJIEhvc3QgY29udHJvbGxlciINCj4gK8KgwqDCoMKgwqDCoMKgZGVwZW5kcyBvbiBEUk0NCj4g K8KgwqDCoMKgwqDCoMKgZGVwZW5kcyBvbiBDT01NT05fQ0xLDQo+ICvCoMKgwqDCoMKgwqDCoGRl cGVuZHMgb24gT0YgJiYgSEFTX0lPTUVNDQo+ICvCoMKgwqDCoMKgwqDCoHNlbGVjdCBEUk1fS01T X0hFTFBFUg0KPiArwqDCoMKgwqDCoMKgwqBzZWxlY3QgRFJNX01JUElfRFNJDQo+ICvCoMKgwqDC oMKgwqDCoHNlbGVjdCBEUk1fUEFORUxfQlJJREdFDQo+ICvCoMKgwqDCoMKgwqDCoHNlbGVjdCBH RU5FUklDX1BIWV9NSVBJX0RQSFkNCj4gK8KgwqDCoMKgwqDCoMKgc2VsZWN0IE1GRF9TWVNDT04N Cj4gK8KgwqDCoMKgwqDCoMKgc2VsZWN0IE1VTFRJUExFWEVSDQo+ICvCoMKgwqDCoMKgwqDCoHNl bGVjdCBSRUdNQVBfTU1JTw0KPiArwqDCoMKgwqDCoMKgwqBoZWxwDQo+ICvCoMKgwqDCoMKgwqDC oMKgwqBUaGlzIGVuYWJsZXMgdGhlIE5vcnRod2VzdCBMb2dpYyBNSVBJIERTSSBIb3N0IGNvbnRy b2xsZXINCj4gYXMNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoGZvciBleGFtcGxlIGZvdW5kIG9uIE5Y UCdzIGkuTVg4IFByb2Nlc3NvcnMuDQo+ICsNCj4gwqBjb25maWcgRFJNX05YUF9QVE4zNDYwDQo+ IMKgwqDCoMKgwqDCoMKgwqB0cmlzdGF0ZSAiTlhQIFBUTjM0NjAgRFAvTFZEUyBicmlkZ2UiDQo+ IMKgwqDCoMKgwqDCoMKgwqBkZXBlbmRzIG9uIE9GDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vYnJpZGdlL01ha2VmaWxlDQo+IGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmls ZQ0KPiBpbmRleCA0OTM0ZmNmNWE2ZjguLmMzZjNhNDNlOWI4ZiAxMDA2NDQNCj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZQ0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJp ZGdlL01ha2VmaWxlDQo+IEBAIC0xNiw0ICsxNiw3IEBAIG9iai0kKENPTkZJR19EUk1fQU5BTE9H SVhfRFApICs9IGFuYWxvZ2l4Lw0KPiDCoG9iai0kKENPTkZJR19EUk1fSTJDX0FEVjc1MTEpICs9 IGFkdjc1MTEvDQo+IMKgb2JqLSQoQ09ORklHX0RSTV9USV9TTjY1RFNJODYpICs9IHRpLXNuNjVk c2k4Ni5vDQo+IMKgb2JqLSQoQ09ORklHX0RSTV9USV9URlA0MTApICs9IHRpLXRmcDQxMC5vDQo+ ICtvYmotJChDT05GSUdfRFJNX05XTF9NSVBJX0RTSSkgKz0gbndsLWRzaS5vDQo+IMKgb2JqLXkg Kz0gc3lub3BzeXMvDQo+ICsNCj4gK2hlYWRlci10ZXN0LXkgKz0gbndsLWRzaS5oDQo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kuYw0KPiBiL2RyaXZlcnMvZ3B1 L2RybS9icmlkZ2UvbndsLWRzaS5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAw MDAwMDAwMDAwMC4uMDIzMTkxODk0ZmU0DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpLmMNCj4gQEAgLTAsMCArMSwxMjMwIEBADQo+ICsvLyBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsNCj4gKy8qDQo+ICsgKiBpLk1YOCBOV0wg TUlQSSBEU0kgaG9zdCBkcml2ZXINCj4gKyAqDQo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTcgTlhQ DQo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTkgUHVyaXNtIFNQQw0KPiArICovDQo+ICsNCj4gKyNp bmNsdWRlIDxsaW51eC9iaXRmaWVsZC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPg0KPiAr I2luY2x1ZGUgPGxpbnV4L2lycS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPg0KPiAr I2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUu aD4NCj4gKyNpbmNsdWRlIDxsaW51eC9tdXgvY29uc3VtZXIuaD4NCj4gKyNpbmNsdWRlIDxsaW51 eC9vZi5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+DQo+ICsjaW5jbHVkZSA8 bGludXgvcGh5L3BoeS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPg0KPiArI2luY2x1 ZGUgPGxpbnV4L3Jlc2V0Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvc3lzX3NvYy5oPg0KPiArI2lu Y2x1ZGUgPGxpbnV4L3RpbWU2NC5oPg0KPiArDQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNf aGVscGVyLmg+DQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9icmlkZ2UuaD4NCj4gKyNpbmNsdWRlIDxk cm0vZHJtX21pcGlfZHNpLmg+DQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9vZi5oPg0KPiArI2luY2x1 ZGUgPGRybS9kcm1fcGFuZWwuaD4NCj4gKyNpbmNsdWRlIDxkcm0vZHJtX3ByaW50Lmg+DQo+ICsj aW5jbHVkZSA8ZHJtL2RybV9wcm9iZV9oZWxwZXIuaD4NCj4gKw0KPiArI2luY2x1ZGUgPHZpZGVv L21pcGlfZGlzcGxheS5oPg0KPiArI2luY2x1ZGUgPHZpZGVvL3ZpZGVvbW9kZS5oPg0KPiArDQo+ ICsjaW5jbHVkZSAibndsLWRzaS5oIg0KPiArDQo+ICsjZGVmaW5lIERSVl9OQU1FICJud2wtZHNp Ig0KPiArDQo+ICsvKiBpLk1YOCBOV0wgcXVpcmtzICovDQo+ICsvKiBpLk1YOE1RIGVycmF0YSBF MTE0MTggKi8NCj4gKyNkZWZpbmUgRTExNDE4X0hTX01PREVfUVVJUkvCoMKgwqBCSVQoMCkNCj4g Kw0KPiArI2RlZmluZSBOV0xfRFNJX01JUElfRklGT19USU1FT1VUIG1zZWNzX3RvX2ppZmZpZXMo NTAwKQ0KPiArDQo+ICtlbnVtIHRyYW5zZmVyX2RpcmVjdGlvbiB7DQo+ICvCoMKgwqDCoMKgwqDC oERTSV9QQUNLRVRfU0VORCwNCj4gK8KgwqDCoMKgwqDCoMKgRFNJX1BBQ0tFVF9SRUNFSVZFLA0K PiArfTsNCj4gKw0KPiArLyogUG9zc2libGUgcGxhdGZvcm0gc3BlY2lmaWMgY2xvY2tzICovDQo+ ICsjZGVmaW5lIE5XTF9EU0lfQ0xLX0NPUkXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgImNvcmUiDQo+ ICsjZGVmaW5lIE5XTF9EU0lfTUFYX1BMQVRGT1JNX0NMT0NLUyAxDQo+ICsNCj4gKyNkZWZpbmUg TldMX0RTSV9FTkRQT0lOVF9MQ0RJRiAwDQo+ICsjZGVmaW5lIE5XTF9EU0lfRU5EUE9JTlRfRENT UyAxDQo+ICsNCj4gK3N0cnVjdCBud2xfZHNpX3BsYXRfY2xrX2NvbmZpZyB7DQo+ICvCoMKgwqDC oMKgwqDCoGNvbnN0IGNoYXIgKmlkOw0KPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgY2xrICpjbGs7 DQo+ICvCoMKgwqDCoMKgwqDCoGJvb2wgcHJlc2VudDsNCj4gK307DQo+ICsNCj4gK3N0cnVjdCBu d2xfZHNpX3RyYW5zZmVyIHsNCj4gK8KgwqDCoMKgwqDCoMKgY29uc3Qgc3RydWN0IG1pcGlfZHNp X21zZyAqbXNnOw0KPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbWlwaV9kc2lfcGFja2V0IHBhY2tl dDsNCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGNvbXBsZXRpb24gY29tcGxldGVkOw0KPiArDQo+ ICvCoMKgwqDCoMKgwqDCoGludCBzdGF0dXM7IC8qIHN0YXR1cyBvZiB0cmFuc21pc3Npb24gKi8N Cj4gK8KgwqDCoMKgwqDCoMKgZW51bSB0cmFuc2Zlcl9kaXJlY3Rpb24gZGlyZWN0aW9uOw0KPiAr wqDCoMKgwqDCoMKgwqBib29sIG5lZWRfYnRhOw0KPiArwqDCoMKgwqDCoMKgwqB1OCBjbWQ7DQo+ ICvCoMKgwqDCoMKgwqDCoHUxNiByeF93b3JkX2NvdW50Ow0KPiArwqDCoMKgwqDCoMKgwqBzaXpl X3QgdHhfbGVuOyAvKiBpbiBieXRlcyAqLw0KPiArwqDCoMKgwqDCoMKgwqBzaXplX3QgcnhfbGVu OyAvKiBpbiBieXRlcyAqLw0KPiArfTsNCj4gKw0KPiArc3RydWN0IG53bF9kc2kgew0KPiArwqDC oMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2JyaWRnZSBicmlkZ2U7DQo+ICvCoMKgwqDCoMKgwqDCoHN0 cnVjdCBtaXBpX2RzaV9ob3N0IGRzaV9ob3N0Ow0KPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJt X2JyaWRnZSAqcGFuZWxfYnJpZGdlOw0KPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZGV2aWNlICpk ZXY7DQo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBwaHkgKnBoeTsNCj4gK8KgwqDCoMKgwqDCoMKg dW5pb24gcGh5X2NvbmZpZ3VyZV9vcHRzIHBoeV9jZmc7DQo+ICvCoMKgwqDCoMKgwqDCoHVuc2ln bmVkIGludCBxdWlya3M7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHJlZ21hcCAqcmVn bWFwOw0KPiArwqDCoMKgwqDCoMKgwqBpbnQgaXJxOw0KPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qg cmVzZXRfY29udHJvbCAqcnN0YzsNCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG11eF9jb250cm9s ICptdXg7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgLyogRFNJIGNsb2NrcyAqLw0KPiArwqDCoMKg wqDCoMKgwqBzdHJ1Y3QgY2xrICpwaHlfcmVmX2NsazsNCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0 IGNsayAqcnhfZXNjX2NsazsNCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGNsayAqdHhfZXNjX2Ns azsNCj4gK8KgwqDCoMKgwqDCoMKgLyogUGxhdGZvcm0gZGVwZW5kZW50IGNsb2NrcyAqLw0KPiAr wqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbndsX2RzaV9wbGF0X2Nsa19jb25maWcNCj4gY2xrX2NvbmZp Z1tOV0xfRFNJX01BWF9QTEFURk9STV9DTE9DS1NdOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoC8q IGRzaSBsYW5lcyAqLw0KPiArwqDCoMKgwqDCoMKgwqB1MzIgbGFuZXM7DQo+ICvCoMKgwqDCoMKg wqDCoGVudW0gbWlwaV9kc2lfcGl4ZWxfZm9ybWF0IGZvcm1hdDsNCj4gK8KgwqDCoMKgwqDCoMKg c3RydWN0IGRybV9kaXNwbGF5X21vZGUgbW9kZTsNCj4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQg bG9uZyBkc2lfbW9kZV9mbGFnczsNCj4gK8KgwqDCoMKgwqDCoMKgaW50IGVycm9yOw0KPiArDQo+ ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBud2xfZHNpX3RyYW5zZmVyICp4ZmVyOw0KPiArDQo+ICvC oMKgwqDCoMKgwqDCoGNvbnN0IHN0cnVjdCBud2xfZHNpX3BsYXRmb3JtX2RhdGEgKnBkYXRhOw0K PiArfTsNCj4gKw0KPiArLyogUGxhdGZvcm0gc3BlY2lmaWMgaG9va3MgdG8gZW5hYmxlIG90aGVy IFNvQ3MgbGlrZSB0aGUgaS5NWDhRTSAqLw0KPiArc3RydWN0IG53bF9kc2lfcGxhdGZvcm1fZGF0 YSB7DQo+ICvCoMKgwqDCoMKgwqDCoGludCAoKnBvd2Vyb24pKHN0cnVjdCBud2xfZHNpICpkc2kp Ow0KPiArwqDCoMKgwqDCoMKgwqBpbnQgKCpwb3dlcm9mZikoc3RydWN0IG53bF9kc2kgKmRzaSk7 DQo+ICvCoMKgwqDCoMKgwqDCoGludCAoKnNlbGVjdF9pbnB1dCkoc3RydWN0IG53bF9kc2kgKmRz aSk7DQo+ICvCoMKgwqDCoMKgwqDCoGludCAoKmRlc2VsZWN0X2lucHV0KShzdHJ1Y3QgbndsX2Rz aSAqZHNpKTsNCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG53bF9kc2lfcGxhdF9jbGtfY29uZmln DQo+IGNsa19jb25maWdbTldMX0RTSV9NQVhfUExBVEZPUk1fQ0xPQ0tTXTsNCj4gK307DQo+ICsN Cj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBud2xfZHNpX3JlZ21hcF9jb25m aWcgPSB7DQo+ICvCoMKgwqDCoMKgwqDCoC5yZWdfYml0cyA9IDE2LA0KPiArwqDCoMKgwqDCoMKg wqAudmFsX2JpdHMgPSAzMiwNCj4gK8KgwqDCoMKgwqDCoMKgLnJlZ19zdHJpZGUgPSA0LA0KPiAr wqDCoMKgwqDCoMKgwqAubWF4X3JlZ2lzdGVyID0gTldMX0RTSV9JUlFfTUFTSzIsDQo+ICvCoMKg wqDCoMKgwqDCoC5uYW1lID0gRFJWX05BTUUsDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgaW5saW5l IHN0cnVjdCBud2xfZHNpICpicmlkZ2VfdG9fZHNpKHN0cnVjdCBkcm1fYnJpZGdlDQo+ICpicmlk Z2UpDQo+ICt7DQo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBjb250YWluZXJfb2YoYnJpZGdlLCBz dHJ1Y3QgbndsX2RzaSwgYnJpZGdlKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBud2xfZHNp X2NsZWFyX2Vycm9yKHN0cnVjdCBud2xfZHNpICpkc2kpDQo+ICt7DQo+ICvCoMKgwqDCoMKgwqDC oGludCByZXQgPSBkc2ktPmVycm9yOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoGRzaS0+ZXJyb3Ig PSAwOw0KPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMg dm9pZCBud2xfZHNpX3dyaXRlKHN0cnVjdCBud2xfZHNpICpkc2ksIHVuc2lnbmVkIGludCByZWcs IHUzMg0KPiB2YWwpDQo+ICt7DQo+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7DQo+ICsNCj4gK8Kg wqDCoMKgwqDCoMKgaWYgKGRzaS0+ZXJyb3IpDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqByZXR1cm47DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gcmVnbWFwX3dyaXRlKGRz aS0+cmVnbWFwLCByZWcsIHZhbCk7DQo+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKSB7DQo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LA0K PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCJGYWlsZWQgdG8gd3JpdGUgTldMIERTSSByZWcgMHgleDoNCj4gJWRcbiIsIHJlZywNCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByZXQpOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHNpLT5lcnJvciA9IHJl dDsNCj4gK8KgwqDCoMKgwqDCoMKgfQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdTMyIG53bF9kc2lf cmVhZChzdHJ1Y3QgbndsX2RzaSAqZHNpLCB1MzIgcmVnKQ0KPiArew0KPiArwqDCoMKgwqDCoMKg wqB1bnNpZ25lZCBpbnQgdmFsOw0KPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Ow0KPiArDQo+ICvC oMKgwqDCoMKgwqDCoGlmIChkc2ktPmVycm9yKQ0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuIDA7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gcmVnbWFwX3JlYWQo ZHNpLT5yZWdtYXAsIHJlZywgJnZhbCk7DQo+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKSB7 DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fREVWX0VSUk9SKGRzaS0+ZGV2 LCAiRmFpbGVkIHRvIHJlYWQgTldMIERTSSByZWcNCj4gMHgleDogJWRcbiIsDQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVnLCBy ZXQpOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHNpLT5lcnJvciA9IHJldDsN Cj4gK8KgwqDCoMKgwqDCoMKgfQ0KPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gdmFsOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgaW50IG53bF9kc2lfZ2V0X2RwaV9waXhlbF9mb3JtYXQoZW51bSBtaXBp X2RzaV9waXhlbF9mb3JtYXQNCj4gZm9ybWF0KQ0KPiArew0KPiArwqDCoMKgwqDCoMKgwqBzd2l0 Y2ggKGZvcm1hdCkgew0KPiArwqDCoMKgwqDCoMKgwqBjYXNlIE1JUElfRFNJX0ZNVF9SR0I1NjU6 DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gTldMX0RTSV9QSVhFTF9G T1JNQVRfMTY7DQo+ICvCoMKgwqDCoMKgwqDCoGNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2NjoNCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBOV0xfRFNJX1BJWEVMX0ZPUk1B VF8xOEw7DQo+ICvCoMKgwqDCoMKgwqDCoGNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2Nl9QQUNLRUQ6 DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gTldMX0RTSV9QSVhFTF9G T1JNQVRfMTg7DQo+ICvCoMKgwqDCoMKgwqDCoGNhc2UgTUlQSV9EU0lfRk1UX1JHQjg4ODoNCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBOV0xfRFNJX1BJWEVMX0ZPUk1B VF8yNDsNCj4gK8KgwqDCoMKgwqDCoMKgZGVmYXVsdDoNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJldHVybiAtRUlOVkFMOw0KPiArwqDCoMKgwqDCoMKgwqB9DQo+ICt9DQo+ICsN Cj4gKy8qDQo+ICsgKiBwczJiYyAtIFBpY29zZWNvbmRzIHRvIGJ5dGUgY2xvY2sgY3ljbGVzDQo+ ICsgKi8NCj4gK3N0YXRpYyB1MzIgcHMyYmMoc3RydWN0IG53bF9kc2kgKmRzaSwgdW5zaWduZWQg bG9uZyBsb25nIHBzKQ0KPiArew0KPiArwqDCoMKgwqDCoMKgwqB1MzIgYnBwID0gbWlwaV9kc2lf cGl4ZWxfZm9ybWF0X3RvX2JwcChkc2ktPmZvcm1hdCk7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKg cmV0dXJuIERJVjY0X1U2NF9ST1VORF9VUChwcyAqIGRzaS0+bW9kZS5jbG9jayAqIGJwcCwNCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGRzaS0+bGFuZXMgKiA4ICogTlNFQ19QRVJfU0VDKTsNCj4gK30NCj4gKw0KPiAr LyoNCj4gKyAqIHVpMmJjIC0gVUkgdGltZSBwZXJpb2RzIHRvIGJ5dGUgY2xvY2sgY3ljbGVzDQo+ ICsgKi8NCj4gK3N0YXRpYyB1MzIgdWkyYmMoc3RydWN0IG53bF9kc2kgKmRzaSwgdW5zaWduZWQg bG9uZyBsb25nIHVpKQ0KPiArew0KPiArwqDCoMKgwqDCoMKgwqB1MzIgYnBwID0gbWlwaV9kc2lf cGl4ZWxfZm9ybWF0X3RvX2JwcChkc2ktPmZvcm1hdCk7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKg cmV0dXJuIERJVjY0X1U2NF9ST1VORF9VUCh1aSAqIGRzaS0+bGFuZXMsDQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBk c2ktPm1vZGUuY2xvY2sgKiAxMDAwICogYnBwKTsNCj4gK30NCj4gKw0KPiArLyoNCj4gKyAqIHVz MmJjIC0gbWljcm8gc2Vjb25kcyB0byBscCBjbG9jayBjeWNsZXMNCj4gKyAqLw0KPiArc3RhdGlj IHUzMiB1czJscCh1MzIgbHBfY2xrX3JhdGUsIHVuc2lnbmVkIGxvbmcgdXMpDQo+ICt7DQo+ICvC oMKgwqDCoMKgwqDCoHJldHVybiBESVZfUk9VTkRfVVAodXMgKiBscF9jbGtfcmF0ZSwgVVNFQ19Q RVJfU0VDKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBud2xfZHNpX2NvbmZpZ19ob3N0KHN0 cnVjdCBud2xfZHNpICpkc2kpDQo+ICt7DQo+ICvCoMKgwqDCoMKgwqDCoHUzMiBjeWNsZXM7DQo+ ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBwaHlfY29uZmlndXJlX29wdHNfbWlwaV9kcGh5ICpjZmcg PSAmZHNpLQ0KPiA+cGh5X2NmZy5taXBpX2RwaHk7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgaWYg KGRzaS0+bGFuZXMgPCAxIHx8IGRzaS0+bGFuZXMgPiA0KQ0KPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgRFJNX0RF Vl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJEU0kgTGFuZXMgJWRcbiIsIGRzaS0+bGFuZXMpOw0K PiArwqDCoMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9DRkdfTlVNX0xBTkVT LCBkc2ktPmxhbmVzIC0gMSk7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgaWYgKGRzaS0+ZHNpX21v ZGVfZmxhZ3MgJiBNSVBJX0RTSV9DTE9DS19OT05fQ09OVElOVU9VUykgew0KPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfQ0ZHX05PTkNP TlRJTlVPVVNfQ0xLLA0KPiAweDAxKTsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oG53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0NGR19BVVRPSU5TRVJUX0VPVFAsDQo+IDB4MDEp Ow0KPiArwqDCoMKgwqDCoMKgwqB9IGVsc2Ugew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfQ0ZHX05PTkNPTlRJTlVPVVNfQ0xLLA0K PiAweDAwKTsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG53bF9kc2lfd3JpdGUo ZHNpLCBOV0xfRFNJX0NGR19BVVRPSU5TRVJUX0VPVFAsDQo+IDB4MDApOw0KPiArwqDCoMKgwqDC oMKgwqB9DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgLyogdmFsdWVzIGluIGJ5dGUgY2xvY2sgY3lj bGVzICovDQo+ICvCoMKgwqDCoMKgwqDCoGN5Y2xlcyA9IHVpMmJjKGRzaSwgY2ZnLT5jbGtfcHJl KTsNCj4gK8KgwqDCoMKgwqDCoMKgRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJjZmdf dF9wcmU6IDB4JXhcbiIsIGN5Y2xlcyk7DQo+ICvCoMKgwqDCoMKgwqDCoG53bF9kc2lfd3JpdGUo ZHNpLCBOV0xfRFNJX0NGR19UX1BSRSwgY3ljbGVzKTsNCj4gK8KgwqDCoMKgwqDCoMKgY3ljbGVz ID0gcHMyYmMoZHNpLCBjZmctPmxweCArIGNmZy0+Y2xrX3ByZXBhcmUgKyBjZmctDQo+ID5jbGtf emVybyk7DQo+ICvCoMKgwqDCoMKgwqDCoERSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAi Y2ZnX3R4X2dhcCAocHJlKTogMHgleFxuIiwNCj4gY3ljbGVzKTsNCj4gK8KgwqDCoMKgwqDCoMKg Y3ljbGVzICs9IHVpMmJjKGRzaSwgY2ZnLT5jbGtfcHJlKTsNCj4gK8KgwqDCoMKgwqDCoMKgRFJN X0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJjZmdfdF9wb3N0OiAweCV4XG4iLCBjeWNsZXMp Ow0KPiArwqDCoMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9DRkdfVF9QT1NU LCBjeWNsZXMpOw0KPiArwqDCoMKgwqDCoMKgwqBjeWNsZXMgPSBwczJiYyhkc2ksIGNmZy0+aHNf ZXhpdCk7DQo+ICvCoMKgwqDCoMKgwqDCoERSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAi Y2ZnX3R4X2dhcDogMHgleFxuIiwgY3ljbGVzKTsNCj4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV93 cml0ZShkc2ksIE5XTF9EU0lfQ0ZHX1RYX0dBUCwgY3ljbGVzKTsNCj4gKw0KPiArwqDCoMKgwqDC oMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9DRkdfRVhUUkFfQ01EU19BRlRFUl9FT1RQ LCAweDAxKTsNCj4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfQ0ZH X0hUWF9UT19DT1VOVCwgMHgwMCk7DQo+ICvCoMKgwqDCoMKgwqDCoG53bF9kc2lfd3JpdGUoZHNp LCBOV0xfRFNJX0NGR19MUlhfSF9UT19DT1VOVCwgMHgwMCk7DQo+ICvCoMKgwqDCoMKgwqDCoG53 bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0NGR19CVEFfSF9UT19DT1VOVCwgMHgwMCk7DQo+ICvC oMKgwqDCoMKgwqDCoC8qIEluIExQIGNsb2NrIGN5Y2xlcyAqLw0KPiArwqDCoMKgwqDCoMKgwqBj eWNsZXMgPSB1czJscChjZmctPmxwX2Nsa19yYXRlLCBjZmctPndha2V1cCk7DQo+ICvCoMKgwqDC oMKgwqDCoERSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAiY2ZnX3R3YWtldXA6IDB4JXhc biIsDQo+IGN5Y2xlcyk7DQo+ICvCoMKgwqDCoMKgwqDCoG53bF9kc2lfd3JpdGUoZHNpLCBOV0xf RFNJX0NGR19UV0FLRVVQLCBjeWNsZXMpOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBu d2xfZHNpX2NsZWFyX2Vycm9yKGRzaSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgbndsX2Rz aV9jb25maWdfZHBpKHN0cnVjdCBud2xfZHNpICpkc2kpDQo+ICt7DQo+ICvCoMKgwqDCoMKgwqDC oHUzMiBtb2RlOw0KPiArwqDCoMKgwqDCoMKgwqBpbnQgY29sb3JfZm9ybWF0Ow0KPiArwqDCoMKg wqDCoMKgwqBib29sIGJ1cnN0X21vZGU7DQo+ICvCoMKgwqDCoMKgwqDCoGludCBoZnJvbnRfcG9y Y2gsIGhiYWNrX3BvcmNoLCB2ZnJvbnRfcG9yY2gsIHZiYWNrX3BvcmNoOw0KPiArwqDCoMKgwqDC oMKgwqBpbnQgaHN5bmNfbGVuLCB2c3luY19sZW47DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgaGZy b250X3BvcmNoID0gZHNpLT5tb2RlLmhzeW5jX3N0YXJ0IC0gZHNpLT5tb2RlLmhkaXNwbGF5Ow0K PiArwqDCoMKgwqDCoMKgwqBoc3luY19sZW4gPSBkc2ktPm1vZGUuaHN5bmNfZW5kIC0gZHNpLT5t b2RlLmhzeW5jX3N0YXJ0Ow0KPiArwqDCoMKgwqDCoMKgwqBoYmFja19wb3JjaCA9IGRzaS0+bW9k ZS5odG90YWwgLSBkc2ktPm1vZGUuaHN5bmNfZW5kOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoHZm cm9udF9wb3JjaCA9IGRzaS0+bW9kZS52c3luY19zdGFydCAtIGRzaS0+bW9kZS52ZGlzcGxheTsN Cj4gK8KgwqDCoMKgwqDCoMKgdnN5bmNfbGVuID0gZHNpLT5tb2RlLnZzeW5jX2VuZCAtIGRzaS0+ bW9kZS52c3luY19zdGFydDsNCj4gK8KgwqDCoMKgwqDCoMKgdmJhY2tfcG9yY2ggPSBkc2ktPm1v ZGUudnRvdGFsIC0gZHNpLT5tb2RlLnZzeW5jX2VuZDsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBE Uk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgImhmcm9udF9wb3JjaCA9ICVkXG4iLA0KPiBo ZnJvbnRfcG9yY2gpOw0KPiArwqDCoMKgwqDCoMKgwqBEUk1fREVWX0RFQlVHX0RSSVZFUihkc2kt PmRldiwgImhiYWNrX3BvcmNoID0gJWRcbiIsDQo+IGhiYWNrX3BvcmNoKTsNCj4gK8KgwqDCoMKg wqDCoMKgRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJoc3luY19sZW4gPSAlZFxuIiwN Cj4gaHN5bmNfbGVuKTsNCj4gK8KgwqDCoMKgwqDCoMKgRFJNX0RFVl9ERUJVR19EUklWRVIoZHNp LT5kZXYsICJoZGlzcGxheSA9ICVkXG4iLCBkc2ktDQo+ID5tb2RlLmhkaXNwbGF5KTsNCj4gK8Kg wqDCoMKgwqDCoMKgRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJ2ZnJvbnRfcG9yY2gg PSAlZFxuIiwNCj4gdmZyb250X3BvcmNoKTsNCj4gK8KgwqDCoMKgwqDCoMKgRFJNX0RFVl9ERUJV R19EUklWRVIoZHNpLT5kZXYsICJ2YmFja19wb3JjaCA9ICVkXG4iLA0KPiB2YmFja19wb3JjaCk7 DQo+ICvCoMKgwqDCoMKgwqDCoERSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAidnN5bmNf bGVuID0gJWRcbiIsDQo+IHZzeW5jX2xlbik7DQo+ICvCoMKgwqDCoMKgwqDCoERSTV9ERVZfREVC VUdfRFJJVkVSKGRzaS0+ZGV2LCAidmFjdGl2ZSA9ICVkXG4iLCBkc2ktDQo+ID5tb2RlLnZkaXNw bGF5KTsNCj4gK8KgwqDCoMKgwqDCoMKgRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJj bG9jayA9ICVkIGtIelxuIiwgZHNpLQ0KPiA+bW9kZS5jbG9jayk7DQo+ICsNCj4gK8KgwqDCoMKg wqDCoMKgY29sb3JfZm9ybWF0ID0gbndsX2RzaV9nZXRfZHBpX3BpeGVsX2Zvcm1hdChkc2ktPmZv cm1hdCk7DQo+ICvCoMKgwqDCoMKgwqDCoGlmIChjb2xvcl9mb3JtYXQgPCAwKSB7DQo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiSW52YWxp ZCBjb2xvciBmb3JtYXQNCj4gMHgleFxuIiwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkc2ktPmZvcm1hdCk7DQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gY29sb3JfZm9ybWF0Ow0KPiArwqDCoMKgwqDC oMKgwqB9DQo+ICvCoMKgwqDCoMKgwqDCoERSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAi cGl4ZWwgZm10ID0gJWRcbiIsIGRzaS0NCj4gPmZvcm1hdCk7DQo+ICsNCj4gK8KgwqDCoMKgwqDC oMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfSU5URVJGQUNFX0NPTE9SX0NPRElORywNCj4g TldMX0RTSV9EUElfMjRfQklUKTsNCj4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ks IE5XTF9EU0lfUElYRUxfRk9STUFULCBjb2xvcl9mb3JtYXQpOw0KPiArwqDCoMKgwqDCoMKgwqAv Kg0KPiArwqDCoMKgwqDCoMKgwqDCoCogQWRqdXN0aW5nIGlucHV0IHBvbGFyaXR5IGJhc2VkIG9u IHRoZSB2aWRlbyBtb2RlIHJlc3VsdHMNCj4gaW4NCj4gK8KgwqDCoMKgwqDCoMKgwqAqIGEgYmxh Y2sgc2NyZWVuIHNvIGFsd2F5cyBwaWNrIGFjdGl2ZSBsb3c6DQo+ICvCoMKgwqDCoMKgwqDCoMKg Ki8NCj4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfVlNZTkNfUE9M QVJJVFksDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBOV0xf RFNJX1ZTWU5DX1BPTEFSSVRZX0FDVElWRV9MT1cpOw0KPiArwqDCoMKgwqDCoMKgwqBud2xfZHNp X3dyaXRlKGRzaSwgTldMX0RTSV9IU1lOQ19QT0xBUklUWSwNCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoE5XTF9EU0lfSFNZTkNfUE9MQVJJVFlfQUNUSVZFX0xP Vyk7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgYnVyc3RfbW9kZSA9IChkc2ktPmRzaV9tb2RlX2Zs YWdzICYNCj4gTUlQSV9EU0lfTU9ERV9WSURFT19CVVJTVCkgJiYNCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAhKGRzaS0+ZHNpX21vZGVfZmxhZ3MgJg0KPiBNSVBJ X0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVMU0UpOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoGlmIChi dXJzdF9tb2RlKSB7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBud2xfZHNpX3dy aXRlKGRzaSwgTldMX0RTSV9WSURFT19NT0RFLA0KPiBOV0xfRFNJX1ZNX0JVUlNUX01PREUpOw0K PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9E U0lfUElYRUxfRklGT19TRU5EX0xFVkVMLA0KPiAyNTYpOw0KPiArwqDCoMKgwqDCoMKgwqB9IGVs c2Ugew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbW9kZSA9ICgoZHNpLT5kc2lf bW9kZV9mbGFncyAmDQo+IE1JUElfRFNJX01PREVfVklERU9fU1lOQ19QVUxTRSkgPw0KPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBOV0xfRFNJX1ZNX0JVUlNUX01PREVfV0lUSF9TWU5DX1BVTFNFDQo+IFMgOg0KPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBO V0xfRFNJX1ZNX05PTl9CVVJTVF9NT0RFX1dJVEhfU1lOQ19FDQo+IFZFTlRTKTsNCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX1ZJREVP X01PREUsIG1vZGUpOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbndsX2RzaV93 cml0ZShkc2ksIE5XTF9EU0lfUElYRUxfRklGT19TRU5EX0xFVkVMLA0KPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRzaS0+bW9kZS5o ZGlzcGxheSk7DQo+ICvCoMKgwqDCoMKgwqDCoH0NCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBud2xf ZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9IRlAsIGhmcm9udF9wb3JjaCk7DQo+ICvCoMKgwqDCoMKg wqDCoG53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0hCUCwgaGJhY2tfcG9yY2gpOw0KPiArwqDC oMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9IU0EsIGhzeW5jX2xlbik7DQo+ ICsNCj4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfRU5BQkxFX01V TFRfUEtUUywgMHgwKTsNCj4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9E U0lfQkxMUF9NT0RFLCAweDEpOw0KPiArwqDCoMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwg TldMX0RTSV9VU0VfTlVMTF9QS1RfQkxMUCwgMHgwKTsNCj4gK8KgwqDCoMKgwqDCoMKgbndsX2Rz aV93cml0ZShkc2ksIE5XTF9EU0lfVkMsIDB4MCk7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgbnds X2RzaV93cml0ZShkc2ksIE5XTF9EU0lfUElYRUxfUEFZTE9BRF9TSVpFLCBkc2ktDQo+ID5tb2Rl LmhkaXNwbGF5KTsNCj4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lf VkFDVElWRSwgZHNpLT5tb2RlLnZkaXNwbGF5IC0gMSk7DQo+ICvCoMKgwqDCoMKgwqDCoG53bF9k c2lfd3JpdGUoZHNpLCBOV0xfRFNJX1ZCUCwgdmJhY2tfcG9yY2gpOw0KPiArwqDCoMKgwqDCoMKg wqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9WRlAsIHZmcm9udF9wb3JjaCk7DQo+ICsNCj4g K8KgwqDCoMKgwqDCoMKgcmV0dXJuIG53bF9kc2lfY2xlYXJfZXJyb3IoZHNpKTsNCj4gK30NCj4g Kw0KPiArc3RhdGljIGludCBud2xfZHNpX2luaXRfaW50ZXJydXB0cyhzdHJ1Y3QgbndsX2RzaSAq ZHNpKQ0KPiArew0KPiArwqDCoMKgwqDCoMKgwqB1MzIgaXJxX2VuYWJsZTsNCj4gKw0KPiArwqDC oMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9JUlFfTUFTSywgMHhmZmZmZmZm Zik7DQo+ICvCoMKgwqDCoMKgwqDCoG53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0lSUV9NQVNL MiwgMHg3KTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBpcnFfZW5hYmxlID0gfih1MzIpKE5XTF9E U0lfVFhfUEtUX0RPTkVfTUFTSyB8DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBOV0xfRFNJX1JYX1BLVF9IRFJfUkNWRF9NQVNLIHwNCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoE5X TF9EU0lfVFhfRklGT19PVkZMV19NQVNLIHwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoE5XTF9EU0lfSFNfVFhfVElNRU9VVF9NQVNLKTsN Cj4gKw0KPiArwqDCoMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9JUlFfTUFT SywgaXJxX2VuYWJsZSk7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIG53bF9kc2lfY2xl YXJfZXJyb3IoZHNpKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBud2xfZHNpX2hvc3RfYXR0 YWNoKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpkc2lfaG9zdCwNCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBtaXBpX2Rz aV9kZXZpY2UgKmRldmljZSkNCj4gK3sNCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG53bF9kc2kg KmRzaSA9IGNvbnRhaW5lcl9vZihkc2lfaG9zdCwgc3RydWN0IG53bF9kc2ksDQo+IGRzaV9ob3N0 KTsNCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRldmljZSAqZGV2ID0gZHNpLT5kZXY7DQo+ICvC oMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2U7DQo+ICvCoMKgwqDCoMKgwqDC oHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsOw0KPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Ow0KPiAr DQo+ICvCoMKgwqDCoMKgwqDCoERSTV9ERVZfSU5GTyhkZXYsICJsYW5lcz0ldSwgZm9ybWF0PTB4 JXggZmxhZ3M9MHglbHhcbiIsDQo+IGRldmljZS0+bGFuZXMsDQo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2aWNlLT5mb3JtYXQsIGRldmljZS0+bW9kZV9mbGFn cyk7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgaWYgKGRldmljZS0+bGFuZXMgPCAxIHx8IGRldmlj ZS0+bGFuZXMgPiA0KQ0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1F SU5WQUw7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgZHNpLT5sYW5lcyA9IGRldmljZS0+bGFuZXM7 DQo+ICvCoMKgwqDCoMKgwqDCoGRzaS0+Zm9ybWF0ID0gZGV2aWNlLT5mb3JtYXQ7DQo+ICvCoMKg wqDCoMKgwqDCoGRzaS0+ZHNpX21vZGVfZmxhZ3MgPSBkZXZpY2UtPm1vZGVfZmxhZ3M7DQo+ICsN Cj4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gZHJtX29mX2ZpbmRfcGFuZWxfb3JfYnJpZGdlKGRzaS0+ ZGV2LT5vZl9ub2RlLCAxLCAwLA0KPiAmcGFuZWwsDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgJmJyaWRnZSk7DQo+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpDQo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Ow0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoGlmIChw YW5lbCkgew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJpZGdlID0gZHJtX3Bh bmVsX2JyaWRnZV9hZGQocGFuZWwpOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg aWYgKElTX0VSUihicmlkZ2UpKQ0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldHVybiBQVFJfRVJSKGJyaWRnZSk7DQo+ICvCoMKgwqDCoMKgwqDCoH0N Cj4gKw0KPiArwqDCoMKgwqDCoMKgwqBkc2ktPnBhbmVsX2JyaWRnZSA9IGJyaWRnZTsNCj4gK8Kg wqDCoMKgwqDCoMKgZHJtX2JyaWRnZV9hZGQoJmRzaS0+YnJpZGdlKTsNCg0KVGhpcyB3b3JrcyBv bmx5IHdpdGggYSBwYW5lbCwgYnV0IG5vdCB3aXRoIGEgYnJpZGdlLiBGb3IgZXhhbXBsZSwNCmFk djc1MTEgYnJpZGdlLCB3aWxsIGNhbCBkc2lfaG9zdF9hdHRhY2ggaW4gaXQncyBkcm1fYnJpZGdl X2F0dGFjaA0KY2FsbGJhY2suIFNpbmNlIHlvdSBhZGQgb3VyIGJyaWRnZSBvbmx5IGhlcmUsIHRo ZSBicmlkZ2VfYXR0YWNoIGZyb20NCmFkdjc1MTEgd2lsbCBuZXZlciBiZSBjYWxsZWQgc28gdGhp cyBjYWxsYmFjayB3aWxsIG5ldmVyIGJlIGNhbGxlZC4NClNvLCBJJ2Qgc3VnZ2VzdCB0byBjYWxs IGRybV9icmlkZ2VfYWRkIGluIHByb2JlLCBhbmQNCm1vdmXCoGRybV9vZl9maW5kX3BhbmVsX29y X2JyaWRnZSBpbiBvdXIgYnJpZGdlX2F0dGFjaC4gQmFzaWNhbGx5LCB5b3UNCm5lZWQgdG8gc2Vw YXJhdGUgdGhlIGJyaWRnZV9hdHRhY2ggb3BlcmF0aW9ucyBmcm9tIHRoZSBkc2lfaG9zdF9hdHRh Y2gNCm9wZXJhdGlvbnMuDQoNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsNCj4gK30N Cj4gKw0KPiArc3RhdGljIGludCBud2xfZHNpX2hvc3RfZGV0YWNoKHN0cnVjdCBtaXBpX2RzaV9o b3N0ICpkc2lfaG9zdCwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRldmljZSkNCj4g K3sNCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG53bF9kc2kgKmRzaSA9IGNvbnRhaW5lcl9vZihk c2lfaG9zdCwgc3RydWN0IG53bF9kc2ksDQo+IGRzaV9ob3N0KTsNCj4gKw0KPiArwqDCoMKgwqDC oMKgwqBkcm1fb2ZfcGFuZWxfYnJpZGdlX3JlbW92ZShkc2ktPmRldi0+b2Zfbm9kZSwgMSwgMCk7 DQo+ICvCoMKgwqDCoMKgwqDCoGRybV9icmlkZ2VfcmVtb3ZlKCZkc2ktPmJyaWRnZSk7DQoNCkFs c28sIHRoZXNlIHJlbW92ZXMgc2hvdWxkIGJlIGRvbmUgaW4gb3VyIGJyaWRnZV9yZW1vdmUuIFRo ZXNlIGFyZSBub3QNCnJlbGF0ZWQgdG8gdGhlIGRzaV9kZXZpY2UuDQoNCj4gKw0KPiArwqDCoMKg wqDCoMKgwqByZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGJvb2wgbndsX2RzaV9yZWFk X3BhY2tldChzdHJ1Y3QgbndsX2RzaSAqZHNpLCB1MzIgc3RhdHVzKQ0KPiArew0KPiArwqDCoMKg wqDCoMKgwqBzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkc2ktPmRldjsNCj4gK8KgwqDCoMKgwqDCoMKg c3RydWN0IG53bF9kc2lfdHJhbnNmZXIgKnhmZXIgPSBkc2ktPnhmZXI7DQo+ICvCoMKgwqDCoMKg wqDCoGludCBlcnI7DQo+ICvCoMKgwqDCoMKgwqDCoHU4ICpwYXlsb2FkID0geGZlci0+bXNnLT5y eF9idWY7DQo+ICvCoMKgwqDCoMKgwqDCoHUzMiB2YWw7DQo+ICvCoMKgwqDCoMKgwqDCoHUxNiB3 b3JkX2NvdW50Ow0KPiArwqDCoMKgwqDCoMKgwqB1OCBjaGFubmVsOw0KPiArwqDCoMKgwqDCoMKg wqB1OCBkYXRhX3R5cGU7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgeGZlci0+c3RhdHVzID0gMDsN Cj4gKw0KPiArwqDCoMKgwqDCoMKgwqBpZiAoeGZlci0+cnhfd29yZF9jb3VudCA9PSAwKSB7DQo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIShzdGF0dXMgJiBOV0xfRFNJX1JY X1BLVF9IRFJfUkNWRCkpDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmV0dXJuIGZhbHNlOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg LyogR2V0IHRoZSBSWCBoZWFkZXIgYW5kIHBhcnNlIGl0ICovDQo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB2YWwgPSBud2xfZHNpX3JlYWQoZHNpLCBOV0xfRFNJX1JYX1BLVF9IRUFE RVIpOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZXJyID0gbndsX2RzaV9jbGVh cl9lcnJvcihkc2kpOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGVycikN Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZmVyLT5z dGF0dXMgPSBlcnI7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB3b3JkX2NvdW50 ID0gTldMX0RTSV9XQyh2YWwpOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hh bm5lbCA9IE5XTF9EU0lfUlhfVkModmFsKTsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGRhdGFfdHlwZSA9IE5XTF9EU0lfUlhfRFQodmFsKTsNCj4gKw0KPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgaWYgKGNoYW5uZWwgIT0geGZlci0+bXNnLT5jaGFubmVsKSB7DQo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9F UlJPUihkZXYsDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJbJTAyWF0gQ2hhbm5lbCBtaXNtYXRjaCAo JXUgIT0NCj4gJXUpXG4iLA0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZmVyLT5jbWQsIGNoYW5uZWws IHhmZXItPm1zZy0NCj4gPmNoYW5uZWwpOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHhmZXItPnN0YXR1cyA9IC1FSU5WQUw7DQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHRydWU7DQo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHN3aXRjaCAoZGF0YV90eXBlKSB7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBjYXNlIE1JUElfRFNJX1JYX0dFTkVSSUNfU0hPUlRfUkVBRF9SRVNQT05TRV8yQllU RToNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBG YWxsIHRocm91Z2ggKi8NCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNhc2UgTUlQ SV9EU0lfUlhfRENTX1NIT1JUX1JFQURfUkVTUE9OU0VfMkJZVEU6DQo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHhmZXItPm1zZy0+cnhfbGVuID4g MSkgew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAvKiByZWFkIHNlY29uZCBieXRlICovDQo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBheWxvYWRbMV0g PSB3b3JkX2NvdW50ID4+IDg7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCsreGZlci0+cnhfbGVuOw0KPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0NCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBGYWxsIHRocm91Z2ggKi8NCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNhc2UgTUlQSV9EU0lfUlhfR0VORVJJQ19TSE9S VF9SRUFEX1JFU1BPTlNFXzFCWVRFOg0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoC8qIEZhbGwgdGhyb3VnaCAqLw0KPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgY2FzZSBNSVBJX0RTSV9SWF9EQ1NfU0hPUlRfUkVBRF9SRVNQT05TRV8xQllU RToNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAo eGZlci0+bXNnLT5yeF9sZW4gPiAwKSB7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIHJlYWQgZmlyc3QgYnl0ZSAqLw0K PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBwYXlsb2FkWzBdID0gd29yZF9jb3VudCAmIDB4ZmY7DQo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCsreGZlci0+ cnhfbGVuOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oH0NCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZmVy LT5zdGF0dXMgPSB4ZmVyLT5yeF9sZW47DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHRydWU7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBjYXNlIE1JUElfRFNJX1JYX0FDS05PV0xFREdFX0FORF9FUlJPUl9SRVBPUlQ6DQo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgd29yZF9jb3Vu dCAmPSAweGZmOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoERSTV9ERVZfRVJST1IoZGV2LCAiWyUwMlhdIERTSSBlcnJvciByZXBvcnQ6DQo+IDB4JTAy eFxuIiwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGZlci0+Y21kLCB3b3JkX2NvdW50KTsNCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZmVyLT5zdGF0dXMg PSAtRVBST1RPOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHJldHVybiB0cnVlOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQ0KPiAr DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAod29yZF9jb3VudCA+IHhmZXIt Pm1zZy0+cnhfbGVuKSB7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgRFJNX0RFVl9FUlJPUigNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2LA0KPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiWyUwMlhdIFJl Y2VpdmUgYnVmZmVyIHRvbyBzbWFsbDogJXp1DQo+ICg8ICV1KVxuIiwNCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGZlci0+ Y21kLCB4ZmVyLT5tc2ctPnJ4X2xlbiwNCj4gd29yZF9jb3VudCk7DQo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGZlci0+c3RhdHVzID0gLUVJTlZBTDsN Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4g dHJ1ZTsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0NCj4gKw0KPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGZlci0+cnhfd29yZF9jb3VudCA9IHdvcmRfY291bnQ7 DQo+ICvCoMKgwqDCoMKgwqDCoH0gZWxzZSB7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAvKiBTZXQgd29yZF9jb3VudCBmcm9tIHByZXZpb3VzIGhlYWRlciByZWFkICovDQo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB3b3JkX2NvdW50ID0geGZlci0+cnhfd29yZF9j b3VudDsNCj4gK8KgwqDCoMKgwqDCoMKgfQ0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoC8qIElmIFJY IHBheWxvYWQgaXMgbm90IHlldCByZWNlaXZlZCwgd2FpdCBmb3IgaXQgKi8NCj4gK8KgwqDCoMKg wqDCoMKgaWYgKCEoc3RhdHVzICYgTldMX0RTSV9SWF9QS1RfUEFZTE9BRF9EQVRBX1JDVkQpKQ0K PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGZhbHNlOw0KPiArDQo+ICvC oMKgwqDCoMKgwqDCoC8qIFJlYWQgdGhlIFJYIHBheWxvYWQgKi8NCj4gK8KgwqDCoMKgwqDCoMKg d2hpbGUgKHdvcmRfY291bnQgPj0gNCkgew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgdmFsID0gbndsX2RzaV9yZWFkKGRzaSwgTldMX0RTSV9SWF9QQVlMT0FEKTsNCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBheWxvYWRbMF0gPSAodmFsID4+IDApICYgMHhmZjsN Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBheWxvYWRbMV0gPSAodmFsID4+IDgp ICYgMHhmZjsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBheWxvYWRbMl0gPSAo dmFsID4+IDE2KSAmIDB4ZmY7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYXls b2FkWzNdID0gKHZhbCA+PiAyNCkgJiAweGZmOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcGF5bG9hZCArPSA0Ow0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGZl ci0+cnhfbGVuICs9IDQ7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB3b3JkX2Nv dW50IC09IDQ7DQo+ICvCoMKgwqDCoMKgwqDCoH0NCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBpZiAo d29yZF9jb3VudCA+IDApIHsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZhbCA9 IG53bF9kc2lfcmVhZChkc2ksIE5XTF9EU0lfUlhfUEFZTE9BRCk7DQo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBzd2l0Y2ggKHdvcmRfY291bnQpIHsNCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGNhc2UgMzoNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBwYXlsb2FkWzJdID0gKHZhbCA+PiAxNikgJiAweGZmOw0KPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCsreGZlci0+cnhfbGVu Ow0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIEZh bGwgdGhyb3VnaCAqLw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2FzZSAyOg0K PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBheWxvYWRb MV0gPSAodmFsID4+IDgpICYgMHhmZjsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqArK3hmZXItPnJ4X2xlbjsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBGYWxsIHRocm91Z2ggKi8NCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNhc2UgMToNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYXlsb2FkWzBdID0gKHZhbCA+PiAwKSAmIDB4ZmY7DQo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKyt4ZmVyLT5y eF9sZW47DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg YnJlYWs7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9DQo+ICvCoMKgwqDCoMKg wqDCoH0NCj4gKw0KPiArwqDCoMKgwqDCoMKgwqB4ZmVyLT5zdGF0dXMgPSB4ZmVyLT5yeF9sZW47 DQo+ICvCoMKgwqDCoMKgwqDCoGVyciA9IG53bF9kc2lfY2xlYXJfZXJyb3IoZHNpKTsNCj4gK8Kg wqDCoMKgwqDCoMKgaWYgKGVycikNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhm ZXItPnN0YXR1cyA9IGVycjsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gdHJ1ZTsNCj4g K30NCj4gKw0KPiArc3RhdGljIHZvaWQgbndsX2RzaV9maW5pc2hfdHJhbnNtaXNzaW9uKHN0cnVj dCBud2xfZHNpICpkc2ksIHUzMg0KPiBzdGF0dXMpDQo+ICt7DQo+ICvCoMKgwqDCoMKgwqDCoHN0 cnVjdCBud2xfZHNpX3RyYW5zZmVyICp4ZmVyID0gZHNpLT54ZmVyOw0KPiArwqDCoMKgwqDCoMKg wqBib29sIGVuZF9wYWNrZXQgPSBmYWxzZTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBpZiAoIXhm ZXIpDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47DQo+ICsNCj4gK8Kg wqDCoMKgwqDCoMKgaWYgKHhmZXItPmRpcmVjdGlvbiA9PSBEU0lfUEFDS0VUX1NFTkQgJiYNCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdGF0dXMgJiBOV0xfRFNJX1RYX1BLVF9ET05FKSB7DQo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZmVyLT5zdGF0dXMgPSB4ZmVyLT50eF9s ZW47DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlbmRfcGFja2V0ID0gdHJ1ZTsN Cj4gK8KgwqDCoMKgwqDCoMKgfSBlbHNlIGlmIChzdGF0dXMgJiBOV0xfRFNJX0RQSFlfRElSRUNU SU9OICYmDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoKHN0YXR1cyAm IChOV0xfRFNJX1JYX1BLVF9IRFJfUkNWRCB8DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBOV0xfRFNJX1JYX1BLVF9QQVlMT0FE X0RBVEFfUkNWRCkpKSkgew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZW5kX3Bh Y2tldCA9IG53bF9kc2lfcmVhZF9wYWNrZXQoZHNpLCBzdGF0dXMpOw0KPiArwqDCoMKgwqDCoMKg wqB9DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgaWYgKGVuZF9wYWNrZXQpDQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBjb21wbGV0ZSgmeGZlci0+Y29tcGxldGVkKTsNCj4gK30NCj4g Kw0KPiArc3RhdGljIHZvaWQgbndsX2RzaV9iZWdpbl90cmFuc21pc3Npb24oc3RydWN0IG53bF9k c2kgKmRzaSkNCj4gK3sNCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG53bF9kc2lfdHJhbnNmZXIg KnhmZXIgPSBkc2ktPnhmZXI7DQo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBtaXBpX2RzaV9wYWNr ZXQgKnBrdCA9ICZ4ZmVyLT5wYWNrZXQ7DQo+ICvCoMKgwqDCoMKgwqDCoGNvbnN0IHU4ICpwYXls b2FkOw0KPiArwqDCoMKgwqDCoMKgwqBzaXplX3QgbGVuZ3RoOw0KPiArwqDCoMKgwqDCoMKgwqB1 MTYgd29yZF9jb3VudDsNCj4gK8KgwqDCoMKgwqDCoMKgdTggaHNfbW9kZTsNCj4gK8KgwqDCoMKg wqDCoMKgdTMyIHZhbDsNCj4gK8KgwqDCoMKgwqDCoMKgdTMyIGhzX3dvcmthcm91bmQgPSAwOw0K PiArDQo+ICvCoMKgwqDCoMKgwqDCoC8qIFNlbmQgdGhlIHBheWxvYWQsIGlmIGFueSAqLw0KPiAr wqDCoMKgwqDCoMKgwqBsZW5ndGggPSBwa3QtPnBheWxvYWRfbGVuZ3RoOw0KPiArwqDCoMKgwqDC oMKgwqBwYXlsb2FkID0gcGt0LT5wYXlsb2FkOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoHdoaWxl IChsZW5ndGggPj0gNCkgew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdmFsID0g Kih1MzIgKilwYXlsb2FkOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaHNfd29y a2Fyb3VuZCB8PSAhKHZhbCAmIDB4RkZGRjAwKTsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoG53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX1RYX1BBWUxPQUQsIHZhbCk7DQo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYXlsb2FkICs9IDQ7DQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBsZW5ndGggLT0gNDsNCj4gK8KgwqDCoMKgwqDCoMKgfQ0KPiAr wqDCoMKgwqDCoMKgwqAvKiBTZW5kIHRoZSByZXN0IG9mIHRoZSBwYXlsb2FkICovDQo+ICvCoMKg wqDCoMKgwqDCoHZhbCA9IDA7DQo+ICvCoMKgwqDCoMKgwqDCoHN3aXRjaCAobGVuZ3RoKSB7DQo+ ICvCoMKgwqDCoMKgwqDCoGNhc2UgMzoNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHZhbCB8PSBwYXlsb2FkWzJdIDw8IDE2Ow0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgLyogRmFsbCB0aHJvdWdoICovDQo+ICvCoMKgwqDCoMKgwqDCoGNhc2UgMjoNCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZhbCB8PSBwYXlsb2FkWzFdIDw8IDg7DQo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBoc193b3JrYXJvdW5kIHw9ICEodmFsICYgMHhGRkZG MDApOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogRmFsbCB0aHJvdWdoICov DQo+ICvCoMKgwqDCoMKgwqDCoGNhc2UgMToNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHZhbCB8PSBwYXlsb2FkWzBdOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg bndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfVFhfUEFZTE9BRCwgdmFsKTsNCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOw0KPiArwqDCoMKgwqDCoMKgwqB9DQo+ICvCoMKg wqDCoMKgwqDCoHhmZXItPnR4X2xlbiA9IHBrdC0+cGF5bG9hZF9sZW5ndGg7DQo+ICsNCj4gK8Kg wqDCoMKgwqDCoMKgLyoNCj4gK8KgwqDCoMKgwqDCoMKgwqAqIFNlbmQgdGhlIGhlYWRlcg0KPiAr wqDCoMKgwqDCoMKgwqDCoCogaGVhZGVyWzBdID0gVmlydHVhbCBDaGFubmVsICsgRGF0YSBUeXBl DQo+ICvCoMKgwqDCoMKgwqDCoMKgKiBoZWFkZXJbMV0gPSBXb3JkIENvdW50IExTQiAoTFApIG9y IGZpcnN0IHBhcmFtIChTUCkNCj4gK8KgwqDCoMKgwqDCoMKgwqAqIGhlYWRlclsyXSA9IFdvcmQg Q291bnQgTVNCIChMUCkgb3Igc2Vjb25kIHBhcmFtIChTUCkNCj4gK8KgwqDCoMKgwqDCoMKgwqAq Lw0KPiArwqDCoMKgwqDCoMKgwqB3b3JkX2NvdW50ID0gcGt0LT5oZWFkZXJbMV0gfCAocGt0LT5o ZWFkZXJbMl0gPDwgOCk7DQo+ICvCoMKgwqDCoMKgwqDCoGlmIChoc193b3JrYXJvdW5kICYmIChk c2ktPnF1aXJrcyAmIEUxMTQxOF9IU19NT0RFX1FVSVJLKSkgew0KPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsDQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAiVXNpbmcgaHMgbW9kZSB3b3JrYXJvdW5kIGZvcg0KPiBjbWQgMHgleFxuIiwNCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHhmZXItPmNtZCk7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBoc19tb2RlID0gMTsNCj4gK8KgwqDCoMKgwqDCoMKgfSBlbHNlIHsNCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGhzX21vZGUgPSAoeGZlci0+bXNnLT5mbGFncyAmIE1JUElf RFNJX01TR19VU0VfTFBNKSA/DQo+IDAgOiAxOw0KPiArwqDCoMKgwqDCoMKgwqB9DQo+ICvCoMKg wqDCoMKgwqDCoHZhbCA9IE5XTF9EU0lfV0Mod29yZF9jb3VudCkgfCBOV0xfRFNJX1RYX1ZDKHhm ZXItPm1zZy0NCj4gPmNoYW5uZWwpIHwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgTldM X0RTSV9UWF9EVCh4ZmVyLT5tc2ctPnR5cGUpIHwNCj4gTldMX0RTSV9IU19TRUwoaHNfbW9kZSkg fA0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBOV0xfRFNJX0JUQV9UWCh4ZmVyLT5uZWVk X2J0YSk7DQo+ICvCoMKgwqDCoMKgwqDCoG53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX1BLVF9D T05UUk9MLCB2YWwpOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoC8qIFNlbmQgcGFja2V0IGNvbW1h bmQgKi8NCj4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfU0VORF9Q QUNLRVQsIDB4MSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBzc2l6ZV90IG53bF9kc2lfaG9zdF90 cmFuc2ZlcihzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqZHNpX2hvc3QsDQo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfbXNnICptc2cpDQo+ICt7DQo+ICvCoMKgwqDCoMKgwqDC oHN0cnVjdCBud2xfZHNpICpkc2kgPSBjb250YWluZXJfb2YoZHNpX2hvc3QsIHN0cnVjdCBud2xf ZHNpLA0KPiBkc2lfaG9zdCk7DQo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBud2xfZHNpX3RyYW5z ZmVyIHhmZXI7DQo+ICvCoMKgwqDCoMKgwqDCoHNzaXplX3QgcmV0ID0gMDsNCj4gKw0KPiArwqDC oMKgwqDCoMKgwqAvKiBDcmVhdGUgcGFja2V0IHRvIGJlIHNlbnQgKi8NCj4gK8KgwqDCoMKgwqDC oMKgZHNpLT54ZmVyID0gJnhmZXI7DQo+ICvCoMKgwqDCoMKgwqDCoHJldCA9IG1pcGlfZHNpX2Ny ZWF0ZV9wYWNrZXQoJnhmZXIucGFja2V0LCBtc2cpOw0KPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0 IDwgMCkgew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHNpLT54ZmVyID0gTlVM TDsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7DQo+ICvCoMKg wqDCoMKgwqDCoH0NCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBpZiAoKG1zZy0+dHlwZSAmIE1JUElf RFNJX0dFTkVSSUNfUkVBRF9SRVFVRVNUXzBfUEFSQU0gfHwNCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoG1zZy0+dHlwZSAmIE1JUElfRFNJX0dFTkVSSUNfUkVBRF9SRVFVRVNUXzFfUEFSQU0g fHwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1zZy0+dHlwZSAmIE1JUElfRFNJX0dFTkVS SUNfUkVBRF9SRVFVRVNUXzJfUEFSQU0gfHwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1z Zy0+dHlwZSAmIE1JUElfRFNJX0RDU19SRUFEKSAmJg0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oG1zZy0+cnhfbGVuID4gMCAmJiBtc2ctPnJ4X2J1ZiAhPSBOVUxMKQ0KPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgeGZlci5kaXJlY3Rpb24gPSBEU0lfUEFDS0VUX1JFQ0VJVkU7DQo+ ICvCoMKgwqDCoMKgwqDCoGVsc2UNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhm ZXIuZGlyZWN0aW9uID0gRFNJX1BBQ0tFVF9TRU5EOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoHhm ZXIubmVlZF9idGEgPSAoeGZlci5kaXJlY3Rpb24gPT0gRFNJX1BBQ0tFVF9SRUNFSVZFKTsNCj4g K8KgwqDCoMKgwqDCoMKgeGZlci5uZWVkX2J0YSB8PSAobXNnLT5mbGFncyAmIE1JUElfRFNJX01T R19SRVFfQUNLKSA/IDEgOiAwOw0KPiArwqDCoMKgwqDCoMKgwqB4ZmVyLm1zZyA9IG1zZzsNCj4g K8KgwqDCoMKgwqDCoMKgeGZlci5zdGF0dXMgPSAtRVRJTUVET1VUOw0KPiArwqDCoMKgwqDCoMKg wqB4ZmVyLnJ4X3dvcmRfY291bnQgPSAwOw0KPiArwqDCoMKgwqDCoMKgwqB4ZmVyLnJ4X2xlbiA9 IDA7DQo+ICvCoMKgwqDCoMKgwqDCoHhmZXIuY21kID0gMHgwMDsNCj4gK8KgwqDCoMKgwqDCoMKg aWYgKG1zZy0+dHhfbGVuID4gMCkNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhm ZXIuY21kID0gKCh1OCAqKShtc2ctPnR4X2J1ZikpWzBdOw0KPiArwqDCoMKgwqDCoMKgwqBpbml0 X2NvbXBsZXRpb24oJnhmZXIuY29tcGxldGVkKTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqByZXQg PSBjbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5yeF9lc2NfY2xrKTsNCj4gK8KgwqDCoMKgwqDCoMKg aWYgKHJldCA8IDApIHsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZf RVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIHJ4X2VzYyBjbGs6DQo+ICV6ZFxuIiwN Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqByZXQpOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsN Cj4gK8KgwqDCoMKgwqDCoMKgfQ0KPiArwqDCoMKgwqDCoMKgwqBEUk1fREVWX0RFQlVHX0RSSVZF Uihkc2ktPmRldiwgIkVuYWJsZWQgcnhfZXNjIGNsayBAJWx1DQo+IEh6XG4iLA0KPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjbGtfZ2V0 X3JhdGUoZHNpLT5yeF9lc2NfY2xrKSk7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgLyogSW5pdGlh dGUgdGhlIERTSSBwYWNrZXQgdHJhbnNtaXNpb24gKi8NCj4gK8KgwqDCoMKgwqDCoMKgbndsX2Rz aV9iZWdpbl90cmFuc21pc3Npb24oZHNpKTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBpZiAoIXdh aXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmeGZlci5jb21wbGV0ZWQsDQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoE5XTF9EU0lfTUlQSV9GSUZPX1RJTUVPVVQpKQ0KPiB7DQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fREVWX0VSUk9SKGRzaV9ob3N0LT5kZXYsICJbJTAy WF0gRFNJIHRyYW5zZmVyDQo+IHRpbWVkIG91dFxuIiwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZmVyLmNtZCk7DQo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSAtRVRJTUVET1VUOw0KPiArwqDCoMKgwqDC oMKgwqB9IGVsc2Ugew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0geGZl ci5zdGF0dXM7DQo+ICvCoMKgwqDCoMKgwqDCoH0NCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBjbGtf ZGlzYWJsZV91bnByZXBhcmUoZHNpLT5yeF9lc2NfY2xrKTsNCj4gKw0KPiArwqDCoMKgwqDCoMKg wqByZXR1cm4gcmV0Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG1pcGlfZHNp X2hvc3Rfb3BzIG53bF9kc2lfaG9zdF9vcHMgPSB7DQo+ICvCoMKgwqDCoMKgwqDCoC5hdHRhY2gg PSBud2xfZHNpX2hvc3RfYXR0YWNoLA0KPiArwqDCoMKgwqDCoMKgwqAuZGV0YWNoID0gbndsX2Rz aV9ob3N0X2RldGFjaCwNCj4gK8KgwqDCoMKgwqDCoMKgLnRyYW5zZmVyID0gbndsX2RzaV9ob3N0 X3RyYW5zZmVyLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGlycXJldHVybl90IG53bF9kc2lfaXJx X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkNCj4gK3sNCj4gK8KgwqDCoMKgwqDCoMKgdTMy IGlycV9zdGF0dXM7DQo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBud2xfZHNpICpkc2kgPSBkYXRh Ow0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoGlycV9zdGF0dXMgPSBud2xfZHNpX3JlYWQoZHNpLCBO V0xfRFNJX0lSUV9TVEFUVVMpOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoGlmIChpcnFfc3RhdHVz ICYgTldMX0RTSV9UWF9GSUZPX09WRkxXKQ0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgRFJNX0RFVl9FUlJPUl9SQVRFTElNSVRFRChkc2ktPmRldiwgInR4IGZpZm8NCj4gb3ZlcmZs b3dcbiIpOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoGlmIChpcnFfc3RhdHVzICYgTldMX0RTSV9I U19UWF9USU1FT1VUKQ0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9F UlJPUl9SQVRFTElNSVRFRChkc2ktPmRldiwgIkhTIHR4DQo+IHRpbWVvdXRcbiIpOw0KPiArDQo+ ICvCoMKgwqDCoMKgwqDCoGlmIChpcnFfc3RhdHVzICYgTldMX0RTSV9UWF9QS1RfRE9ORSB8fA0K PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlycV9zdGF0dXMgJiBOV0xfRFNJX1JYX1BLVF9IRFJf UkNWRCB8fA0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlycV9zdGF0dXMgJiBOV0xfRFNJX1JY X1BLVF9QQVlMT0FEX0RBVEFfUkNWRCkNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oG53bF9kc2lfZmluaXNoX3RyYW5zbWlzc2lvbihkc2ksIGlycV9zdGF0dXMpOw0KPiArDQo+ICvC oMKgwqDCoMKgwqDCoHJldHVybiBJUlFfSEFORExFRDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlu dCBud2xfZHNpX2VuYWJsZShzdHJ1Y3QgbndsX2RzaSAqZHNpKQ0KPiArew0KPiArwqDCoMKgwqDC oMKgwqBzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkc2ktPmRldjsNCj4gK8KgwqDCoMKgwqDCoMKgdW5p b24gcGh5X2NvbmZpZ3VyZV9vcHRzICpwaHlfY2ZnID0gJmRzaS0+cGh5X2NmZzsNCj4gK8KgwqDC oMKgwqDCoMKgaW50IHJldDsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBpZiAoIWRzaS0+bGFuZXMp IHsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfRVJST1IoZGV2LCAi TmVlZCBEU0kgbGFuZXM6ICVkXG4iLCBkc2ktDQo+ID5sYW5lcyk7DQo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsNCj4gK8KgwqDCoMKgwqDCoMKgfQ0KPiAr DQo+ICvCoMKgwqDCoMKgwqDCoHJldCA9IHBoeV9pbml0KGRzaS0+cGh5KTsNCj4gK8KgwqDCoMKg wqDCoMKgaWYgKHJldCA8IDApIHsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERS TV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIGluaXQgRFNJIHBoeTogJWRcbiIsDQo+IHJldCk7 DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Ow0KPiArwqDCoMKg wqDCoMKgwqB9DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gcGh5X2NvbmZpZ3VyZShkc2kt PnBoeSwgcGh5X2NmZyk7DQo+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKSB7DQo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBj b25maWd1cmUgRFNJIHBoeToNCj4gJWRcbiIsIHJldCk7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBnb3RvIHVuaW5pdF9waHk7DQo+ICvCoMKgwqDCoMKgwqDCoH0NCj4gKw0KPiAr wqDCoMKgwqDCoMKgwqByZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHNpLT50eF9lc2NfY2xrKTsN Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCA8IDApIHsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoERSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIHR4X2Vz YyBjbGs6DQo+ICVkXG4iLA0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCk7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBnb3RvIHVuaW5pdF9waHk7DQo+ICvCoMKgwqDCoMKgwqDCoH0NCj4gK8KgwqDCoMKgwqDC oMKgRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJFbmFibGVkIHR4X2VzYyBjbGsgQCVs dQ0KPiBIelxuIiwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgY2xrX2dldF9yYXRlKGRzaS0+dHhfZXNjX2NsaykpOw0KPiArDQo+ICvC oMKgwqDCoMKgwqDCoHJldCA9IG53bF9kc2lfY29uZmlnX2hvc3QoZHNpKTsNCj4gK8KgwqDCoMKg wqDCoMKgaWYgKHJldCA8IDApIHsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERS TV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHNldCB1cCBEU0k6ICVkIiwgcmV0KTsNCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gZGlzYWJsZV9jbG9jazsNCj4gK8KgwqDC oMKgwqDCoMKgfQ0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoHJldCA9IG53bF9kc2lfY29uZmlnX2Rw aShkc2kpOw0KPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0IDwgMCkgew0KPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gc2V0IHVwIERQ STogJWQiLCByZXQpOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBkaXNh YmxlX2Nsb2NrOw0KPiArwqDCoMKgwqDCoMKgwqB9DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgcmV0 ID0gcGh5X3Bvd2VyX29uKGRzaS0+cGh5KTsNCj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCA8IDAp IHsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfRVJST1IoZGV2LCAi RmFpbGVkIHRvIHBvd2VyIG9uIERQSFkgKCVkKVxuIiwNCj4gcmV0KTsNCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gZGlzYWJsZV9jbG9jazsNCj4gK8KgwqDCoMKgwqDCoMKg fQ0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoHJldCA9IG53bF9kc2lfaW5pdF9pbnRlcnJ1cHRzKGRz aSk7DQo+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKQ0KPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgZ290byBwb3dlcl9vZmZfcGh5Ow0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoHJl dHVybiByZXQ7DQo+ICsNCj4gK3Bvd2VyX29mZl9waHk6DQo+ICvCoMKgwqDCoMKgwqDCoHBoeV9w b3dlcl9vZmYoZHNpLT5waHkpOw0KPiArZGlzYWJsZV9jbG9jazoNCj4gK8KgwqDCoMKgwqDCoMKg Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+dHhfZXNjX2Nsayk7DQo+ICt1bmluaXRfcGh5Og0K PiArwqDCoMKgwqDCoMKgwqBwaHlfZXhpdChkc2ktPnBoeSk7DQo+ICsNCj4gK8KgwqDCoMKgwqDC oMKgcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBud2xfZHNpX2Rpc2FibGUo c3RydWN0IG53bF9kc2kgKmRzaSkNCj4gK3sNCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRldmlj ZSAqZGV2ID0gZHNpLT5kZXY7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgRFJNX0RFVl9ERUJVR19E UklWRVIoZGV2LCAiRGlzYWJsaW5nIGNsb2NrcyBhbmQgcGh5XG4iKTsNCj4gKw0KPiArwqDCoMKg wqDCoMKgwqBwaHlfcG93ZXJfb2ZmKGRzaS0+cGh5KTsNCj4gK8KgwqDCoMKgwqDCoMKgcGh5X2V4 aXQoZHNpLT5waHkpOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoC8qIERpc2FibGluZyB0aGUgY2xv Y2sgYmVmb3JlIHRoZSBwaHkgYnJlYWtzIGVuYWJsaW5nIGRzaQ0KPiBhZ2FpbiAqLw0KPiArwqDC oMKgwqDCoMKgwqBjbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT50eF9lc2NfY2xrKTsNCj4gKw0K PiArwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBud2xf ZHNpX3NldF9wbGF0Zm9ybV9jbG9ja3Moc3RydWN0IG53bF9kc2kgKmRzaSwgYm9vbA0KPiBlbmFi bGUpDQo+ICt7DQo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkZXZpY2UgKmRldiA9IGRzaS0+ZGV2 Ow0KPiArwqDCoMKgwqDCoMKgwqBjb25zdCBjaGFyICppZDsNCj4gK8KgwqDCoMKgwqDCoMKgc3Ry dWN0IGNsayAqY2xrOw0KPiArwqDCoMKgwqDCoMKgwqBzaXplX3QgaTsNCj4gK8KgwqDCoMKgwqDC oMKgdW5zaWduZWQgbG9uZyByYXRlOw0KPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0LCByZXN1bHQg PSAwOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoERSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIiVz IHBsYXRmb3JtIGNsb2Nrc1xuIiwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZW5hYmxlID8gImVuYWJsaW5nIiA6ICJkaXNhYmxpbmci KTsNCj4gK8KgwqDCoMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHNpLT5wZGF0 YS0+Y2xrX2NvbmZpZyk7IGkrKykgew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg aWYgKCFkc2ktPmNsa19jb25maWdbaV0ucHJlc2VudCkNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb250aW51ZTsNCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGlkID0gZHNpLT5jbGtfY29uZmlnW2ldLmlkOw0KPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgY2xrID0gZHNpLT5jbGtfY29uZmlnW2ldLmNsazsNCj4gKw0KPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGVuYWJsZSkgew0KPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IGNsa19wcmVwYXJlX2Vu YWJsZShjbGspOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGlmIChyZXQgPCAwKSB7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfRVJST1IoZGV2LA0KPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIkZhaWxlZCB0byBlbmFibGUgJXMNCj4gY2xrOiAl ZFxuIiwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlkLCByZXQpOw0KPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqByZXN1bHQgPSByZXN1bHQgPzogcmV0Ow0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0NCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByYXRlID0gY2xrX2dldF9yYXRlKGNsayk7DQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9ERUJVR19EUklWRVIo ZGV2LCAiRW5hYmxlZCAlcyBjbGsNCj4gQCVsdSBIelxuIiwNCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBpZCwgcmF0ZSk7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqB9IGVsc2Ugew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGNsa19kaXNhYmxlX3VucHJlcGFyZShjbGspOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIkRpc2Fi bGVkICVzDQo+IGNsa1xuIiwgaWQpOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg fQ0KPiArwqDCoMKgwqDCoMKgwqB9DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHJlc3Vs dDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBud2xfZHNpX3BsYXRfZW5hYmxlKHN0cnVjdCBu d2xfZHNpICpkc2kpDQo+ICt7DQo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkZXZpY2UgKmRldiA9 IGRzaS0+ZGV2Ow0KPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Ow0KPiArDQo+ICvCoMKgwqDCoMKg wqDCoGlmIChkc2ktPnBkYXRhLT5zZWxlY3RfaW5wdXQpIHsNCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldCA9IGRzaS0+cGRhdGEtPnNlbGVjdF9pbnB1dChkc2kpOw0KPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJldCA8IDApDQo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsNCj4gK8KgwqDCoMKg wqDCoMKgfQ0KDQpTaW5jZSB0aGUgc2VsZWN0X2lucHV0IGFsd2F5cyByZWFkcyB0aGUgZHRiIChh bmQgYXQgcnVudGltZSB0aGlzIG5vZGUNCm5ldmVyIGNoYW5nZXMgYW55d2F5KSBJIHRoaW5rIGl0 J3MgYmVzdCB0byB1c2UgdGhlIHNlbGVjdF9pbnB1dCBhdA0KcHJvYmUgc2luY2UgaXQgaXMgb25s eSBuZWVkZWQgb25jZSBhbmQgYWxzbyBkcm9wIHRoZSBkZXNlbGVjdF9pbnB1dC4NCg0KPiArDQo+ ICvCoMKgwqDCoMKgwqDCoHJldCA9IG53bF9kc2lfc2V0X3BsYXRmb3JtX2Nsb2Nrcyhkc2ksIHRy dWUpOw0KPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0IDwgMCkNCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldHVybiByZXQ7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gZHNp LT5wZGF0YS0+cG93ZXJvbihkc2kpOw0KPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0IDwgMCkNCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVk IHRvIHBvd2VyIG9uIERTSTogJWRcbiIsDQo+IHJldCk7DQo+ICvCoMKgwqDCoMKgwqDCoHJldHVy biByZXQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIG53bF9kc2lfcGxhdF9kaXNhYmxlKHN0 cnVjdCBud2xfZHNpICpkc2kpDQo+ICt7DQo+ICvCoMKgwqDCoMKgwqDCoGRzaS0+cGRhdGEtPnBv d2Vyb2ZmKGRzaSk7DQo+ICvCoMKgwqDCoMKgwqDCoG53bF9kc2lfc2V0X3BsYXRmb3JtX2Nsb2Nr cyhkc2ksIGZhbHNlKTsNCj4gK8KgwqDCoMKgwqDCoMKgaWYgKGRzaS0+cGRhdGEtPmRlc2VsZWN0 X2lucHV0KQ0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHNpLT5wZGF0YS0+ZGVz ZWxlY3RfaW5wdXQoZHNpKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgbndsX2RzaV9icmlk Z2VfZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQ0KPiArew0KPiArwqDCoMKgwqDC oMKgwqBzdHJ1Y3QgbndsX2RzaSAqZHNpID0gYnJpZGdlX3RvX2RzaShicmlkZ2UpOw0KPiArDQo+ ICvCoMKgwqDCoMKgwqDCoG53bF9kc2lfZGlzYWJsZShkc2kpOw0KPiArwqDCoMKgwqDCoMKgwqBu d2xfZHNpX3BsYXRfZGlzYWJsZShkc2kpOw0KPiArwqDCoMKgwqDCoMKgwqBwbV9ydW50aW1lX3B1 dChkc2ktPmRldik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgbndsX2RzaV9nZXRfZHBoeV9w YXJhbXMoc3RydWN0IG53bF9kc2kgKmRzaSwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29uc3Qgc3RydWN0IGRy bV9kaXNwbGF5X21vZGUNCj4gKm1vZGUsDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVuaW9uIHBoeV9jb25maWd1 cmVfb3B0cw0KPiAqcGh5X29wdHMpDQo+ICt7DQo+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGxv bmcgcmF0ZTsNCj4gK8KgwqDCoMKgwqDCoMKgaW50IHJldDsNCj4gKw0KPiArwqDCoMKgwqDCoMKg wqBpZiAoZHNpLT5sYW5lcyA8IDEgfHwgZHNpLT5sYW5lcyA+IDQpDQo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqAv Kg0KPiArwqDCoMKgwqDCoMKgwqDCoCogU28gZmFyIHRoZSBEUEhZIHNwZWMgbWluaW1hbCB0aW1p bmdzIHdvcmsgZm9yIGJvdGggbWl4ZWwNCj4gK8KgwqDCoMKgwqDCoMKgwqAqIGRwaHkgYW5kIG53 bCBkc2kgaG9zdA0KPiArwqDCoMKgwqDCoMKgwqDCoCovDQo+ICvCoMKgwqDCoMKgwqDCoHJldCA9 IHBoeV9taXBpX2RwaHlfZ2V0X2RlZmF1bHRfY29uZmlnKA0KPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgbW9kZS0+Y3J0Y19jbG9jayAqIDEwMDAsDQoNCldoeSBhcmUgeW91IHVzaW5n IGNydGNfY2xvY2sgaGVyZT8gSSB0aGlzIHRoaXMgc2hvdWxkIGJlIHVzZWQgb25seSBieQ0KdGhl IENSVEMgY29tcG9uZW50LiBJJ2Qgc3VnZ2VzdCB0byB1c2UgbW9kZS0+Y2xvY2sgaGVyZSwgc2lu Y2UgaXQgaXMNCmFib3V0IHRoZSBvdXRwdXQgY2xvY2sgb2YgdGhlIERTSSwgbm90IHRoZSBpbnB1 dCBjbG9jayBvbiB0aGUgRFBJDQppbnRlcmZhY2UsIHRoYXQgaXMgY29taW5nIGZyb20gQ1JUQy4N CsKgDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtaXBpX2RzaV9waXhlbF9mb3Jt YXRfdG9fYnBwKGRzaS0+Zm9ybWF0KSwgZHNpLQ0KPiA+bGFuZXMsDQo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAmcGh5X29wdHMtPm1pcGlfZHBoeSk7DQo+ICvCoMKgwqDCoMKgwqDC oGlmIChyZXQgPCAwKQ0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJl dDsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqByYXRlID0gY2xrX2dldF9yYXRlKGRzaS0+dHhfZXNj X2Nsayk7DQo+ICvCoMKgwqDCoMKgwqDCoERSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAi TFAgY2xrIGlzIEAlbHUgSHpcbiIsIHJhdGUpOw0KPiArwqDCoMKgwqDCoMKgwqBwaHlfb3B0cy0+ bWlwaV9kcGh5LmxwX2Nsa19yYXRlID0gcmF0ZTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqByZXR1 cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGJvb2wgbndsX2RzaV9icmlkZ2VfbW9kZV9maXh1 cChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLA0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCBz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZQ0KPiAqbW9kZSwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUNCj4gKmFkanVzdGVkX21vZGUpDQo+ICt7DQo+ICvCoMKgwqDC oMKgwqDCoC8qIEF0IGxlYXN0IExDRElGICsgTldMIG5lZWRzIGFjdGl2ZSBoaWdoIHN5bmMgKi8N Cj4gK8KgwqDCoMKgwqDCoMKgYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgfD0gKERSTV9NT0RFX0ZMQUdf UEhTWU5DIHwNCj4gRFJNX01PREVfRkxBR19QVlNZTkMpOw0KPiArwqDCoMKgwqDCoMKgwqBhZGp1 c3RlZF9tb2RlLT5mbGFncyAmPSB+KERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwNCj4gRFJNX01PREVf RkxBR19OVlNZTkMpOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiB0cnVlOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgZW51bSBkcm1fbW9kZV9zdGF0dXMNCj4gK253bF9kc2lfYnJpZGdlX21v ZGVfdmFsaWQoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwNCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgKm1vZGUpDQo+ICt7DQo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBud2xfZHNpICpkc2kg PSBicmlkZ2VfdG9fZHNpKGJyaWRnZSk7DQo+ICvCoMKgwqDCoMKgwqDCoGludCBicHAgPSBtaXBp X2RzaV9waXhlbF9mb3JtYXRfdG9fYnBwKGRzaS0+Zm9ybWF0KTsNCj4gKw0KPiArwqDCoMKgwqDC oMKgwqBpZiAobW9kZS0+Y2xvY2sgKiBicHAgPiAxNTAwMDAwMCAqIGRzaS0+bGFuZXMpDQo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gTU9ERV9DTE9DS19ISUdIOw0KPiAr DQo+ICvCoMKgwqDCoMKgwqDCoGlmIChtb2RlLT5jbG9jayAqIGJwcCA8IDgwMDAwICogZHNpLT5s YW5lcykNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBNT0RFX0NMT0NL X0xPVzsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gTU9ERV9PSzsNCj4gK30NCj4gKw0K PiArc3RhdGljIHZvaWQNCj4gK253bF9kc2lfYnJpZGdlX21vZGVfc2V0KHN0cnVjdCBkcm1fYnJp ZGdlICpicmlkZ2UsDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsDQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29uc3Qgc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKmFkanVzdGVkX21vZGUpDQo+ICt7DQo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBu d2xfZHNpICpkc2kgPSBicmlkZ2VfdG9fZHNpKGJyaWRnZSk7DQo+ICvCoMKgwqDCoMKgwqDCoHN0 cnVjdCBkZXZpY2UgKmRldiA9IGRzaS0+ZGV2Ow0KPiArwqDCoMKgwqDCoMKgwqB1bmlvbiBwaHlf Y29uZmlndXJlX29wdHMgbmV3X2NmZzsNCj4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQgbG9uZyBw aHlfcmVmX3JhdGU7DQo+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7DQo+ICsNCj4gK8KgwqDCoMKg wqDCoMKgcmV0ID0gbndsX2RzaV9nZXRfZHBoeV9wYXJhbXMoZHNpLCBhZGp1c3RlZF9tb2RlLCAm bmV3X2NmZyk7DQo+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKQ0KPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoC8qDQo+ICvC oMKgwqDCoMKgwqDCoMKgKiBJZiBocyBjbG9jayBpcyB1bmNoYW5nZWQsIHdlJ3JlIGFsbCBnb29k IC0gYWxsIHBhcmFtZXRlcnMNCj4gYXJlDQo+ICvCoMKgwqDCoMKgwqDCoMKgKiBkZXJpdmVkIGZy b20gaXQgYXRtLg0KPiArwqDCoMKgwqDCoMKgwqDCoCovDQo+ICvCoMKgwqDCoMKgwqDCoGlmIChu ZXdfY2ZnLm1pcGlfZHBoeS5oc19jbGtfcmF0ZSA9PSBkc2ktDQo+ID5waHlfY2ZnLm1pcGlfZHBo eS5oc19jbGtfcmF0ZSkNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybjsN Cj4gKw0KPiArwqDCoMKgwqDCoMKgwqBwaHlfcmVmX3JhdGUgPSBjbGtfZ2V0X3JhdGUoZHNpLT5w aHlfcmVmX2Nsayk7DQo+ICvCoMKgwqDCoMKgwqDCoERSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwg IlBIWSBhdCByZWYgcmF0ZTogJWx1XG4iLA0KPiBwaHlfcmVmX3JhdGUpOw0KPiArwqDCoMKgwqDC oMKgwqAvKiBTYXZlIHRoZSBuZXcgZGVzaXJlZCBwaHkgY29uZmlnICovDQo+ICvCoMKgwqDCoMKg wqDCoG1lbWNweSgmZHNpLT5waHlfY2ZnLCAmbmV3X2NmZywgc2l6ZW9mKG5ld19jZmcpKTsNCj4g Kw0KPiArwqDCoMKgwqDCoMKgwqBtZW1jcHkoJmRzaS0+bW9kZSwgYWRqdXN0ZWRfbW9kZSwgc2l6 ZW9mKGRzaS0+bW9kZSkpOw0KPiArwqDCoMKgwqDCoMKgwqBkcm1fbW9kZV9kZWJ1Z19wcmludG1v ZGVsaW5lKGFkanVzdGVkX21vZGUpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBud2xfZHNp X2JyaWRnZV9wcmVfZW5hYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpDQo+ICt7DQo+ICvC oMKgwqDCoMKgwqDCoHN0cnVjdCBud2xfZHNpICpkc2kgPSBicmlkZ2VfdG9fZHNpKGJyaWRnZSk7 DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgcG1fcnVudGltZV9nZXRfc3luYyhkc2ktPmRldik7DQo+ ICvCoMKgwqDCoMKgwqDCoG53bF9kc2lfcGxhdF9lbmFibGUoZHNpKTsNCj4gK8KgwqDCoMKgwqDC oMKgbndsX2RzaV9lbmFibGUoZHNpKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBud2xfZHNp X2JyaWRnZV9hdHRhY2goc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkNCj4gK3sNCj4gK8KgwqDC oMKgwqDCoMKgc3RydWN0IG53bF9kc2kgKmRzaSA9IGJyaWRnZV90b19kc2koYnJpZGdlKTsNCj4g Kw0KPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gZHJtX2JyaWRnZV9hdHRhY2goYnJpZGdlLT5lbmNv ZGVyLCBkc2ktPnBhbmVsX2JyaWRnZSwNCj4gYnJpZGdlKTsNCj4gK30NCj4gKw0KPiArc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1fYnJpZGdlX2Z1bmNzIG53bF9kc2lfYnJpZGdlX2Z1bmNzID0gew0K PiArwqDCoMKgwqDCoMKgwqAucHJlX2VuYWJsZSA9IG53bF9kc2lfYnJpZGdlX3ByZV9lbmFibGUs DQo+ICvCoMKgwqDCoMKgwqDCoC5kaXNhYmxlwqDCoMKgwqA9IG53bF9kc2lfYnJpZGdlX2Rpc2Fi bGUsDQo+ICvCoMKgwqDCoMKgwqDCoC5tb2RlX2ZpeHVwID0gbndsX2RzaV9icmlkZ2VfbW9kZV9m aXh1cCwNCj4gK8KgwqDCoMKgwqDCoMKgLm1vZGVfc2V0wqDCoMKgPSBud2xfZHNpX2JyaWRnZV9t b2RlX3NldCwNCj4gK8KgwqDCoMKgwqDCoMKgLm1vZGVfdmFsaWQgPSBud2xfZHNpX2JyaWRnZV9t b2RlX3ZhbGlkLA0KPiArwqDCoMKgwqDCoMKgwqAuYXR0YWNowqDCoMKgwqDCoD0gbndsX2RzaV9i cmlkZ2VfYXR0YWNoLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGludCBud2xfZHNpX3BhcnNlX2R0 KHN0cnVjdCBud2xfZHNpICpkc2kpDQo+ICt7DQo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZHNpLT5kZXYpOw0KPiArwqDC oMKgwqDCoMKgwqBzdHJ1Y3QgY2xrICpjbGs7DQo+ICvCoMKgwqDCoMKgwqDCoGNvbnN0IGNoYXIg KmNsa19pZDsNCj4gK8KgwqDCoMKgwqDCoMKgdm9pZCBfX2lvbWVtICpiYXNlOw0KPiArwqDCoMKg wqDCoMKgwqBpbnQgaSwgcmV0Ow0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoGRzaS0+cGh5ID0gZGV2 bV9waHlfZ2V0KGRzaS0+ZGV2LCAiZHBoeSIpOw0KPiArwqDCoMKgwqDCoMKgwqBpZiAoSVNfRVJS KGRzaS0+cGh5KSkgew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gUFRS X0VSUihkc2ktPnBoeSk7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmV0 ICE9IC1FUFJPQkVfREVGRVIpDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkNvdWxkIG5vdCBnZXQgUEhZOg0K PiAlZFxuIiwgcmV0KTsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBy ZXQ7DQo+ICvCoMKgwqDCoMKgwqDCoH0NCj4gKw0KPiArwqDCoMKgwqDCoMKgwqAvKiBQbGF0Zm9y bSBkZXBlbmRlbnQgY2xvY2tzICovDQo+ICvCoMKgwqDCoMKgwqDCoG1lbWNweShkc2ktPmNsa19j b25maWcsIGRzaS0+cGRhdGEtPmNsa19jb25maWcsDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgc2l6ZW9mKGRzaS0+cGRhdGEtPmNsa19jb25maWcpKTsNCj4gKw0KPiArwqDCoMKgwqDC oMKgwqBmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkc2ktPnBkYXRhLT5jbGtfY29uZmlnKTsg aSsrKSB7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIWRzaS0+Y2xrX2Nv bmZpZ1tpXS5wcmVzZW50KQ0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGNvbnRpbnVlOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBjbGtfaWQgPSBkc2ktPmNsa19jb25maWdbaV0uaWQ7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBjbGsgPSBkZXZtX2Nsa19nZXQoZHNpLT5kZXYsIGNsa19pZCk7DQo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoSVNfRVJSKGNsaykpIHsNCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBQVFJfRVJSKGNsayk7 DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RF Vl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBnZXQgJXMNCj4gY2xvY2s6ICVkXG4iLA0KPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBjbGtfaWQsIHJldCk7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsNCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoH0NCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZf REVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAiU2V0dXAgY2xrICVzIChyYXRlOg0KPiAlbHUpXG4iLA0K PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgY2xrX2lkLCBjbGtfZ2V0X3JhdGUoY2xrKSk7DQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkc2ktPmNsa19jb25maWdbaV0uY2xrID0gY2xrOw0KPiAr wqDCoMKgwqDCoMKgwqB9DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgLyogRFNJIGNsb2NrcyAqLw0K PiArwqDCoMKgwqDCoMKgwqBjbGsgPSBkZXZtX2Nsa19nZXQoZHNpLT5kZXYsICJwaHlfcmVmIik7 DQo+ICvCoMKgwqDCoMKgwqDCoGlmIChJU19FUlIoY2xrKSkgew0KPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0ID0gUFRSX0VSUihjbGspOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBnZXQgcGh5X3Jl ZiBjbG9jazoNCj4gJWRcbiIsDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0KTsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHJldHVybiByZXQ7DQo+ICvCoMKgwqDCoMKgwqDCoH0NCj4gK8KgwqDCoMKgwqDCoMKg ZHNpLT5waHlfcmVmX2NsayA9IGNsazsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBjbGsgPSBkZXZt X2Nsa19nZXQoZHNpLT5kZXYsICJyeF9lc2MiKTsNCj4gK8KgwqDCoMKgwqDCoMKgaWYgKElTX0VS UihjbGspKSB7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBQVFJfRVJS KGNsayk7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fREVWX0VSUk9SKGRz aS0+ZGV2LCAiRmFpbGVkIHRvIGdldCByeF9lc2MgY2xvY2s6DQo+ICVkXG4iLA0KPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCk7 DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Ow0KPiArwqDCoMKg wqDCoMKgwqB9DQo+ICvCoMKgwqDCoMKgwqDCoGRzaS0+cnhfZXNjX2NsayA9IGNsazsNCj4gKw0K PiArwqDCoMKgwqDCoMKgwqBjbGsgPSBkZXZtX2Nsa19nZXQoZHNpLT5kZXYsICJ0eF9lc2MiKTsN Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKElTX0VSUihjbGspKSB7DQo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXQgPSBQVFJfRVJSKGNsayk7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFpbGVkIHRvIGdldCB0eF9lc2Mg Y2xvY2s6DQo+ICVkXG4iLA0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCk7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqByZXR1cm4gcmV0Ow0KPiArwqDCoMKgwqDCoMKgwqB9DQo+ICvCoMKgwqDCoMKgwqDCoGRz aS0+dHhfZXNjX2NsayA9IGNsazsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBkc2ktPm11eCA9IGRl dm1fbXV4X2NvbnRyb2xfZ2V0KGRzaS0+ZGV2LCBOVUxMKTsNCj4gK8KgwqDCoMKgwqDCoMKgaWYg KElTX0VSUihkc2ktPm11eCkpIHsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJl dCA9IFBUUl9FUlIoZHNpLT5tdXgpOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg aWYgKHJldCAhPSAtRVBST0JFX0RFRkVSKQ0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gZ2V0 IG11eDoNCj4gJWRcbiIsIHJldCk7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gcmV0Ow0KPiArwqDCoMKgwqDCoMKgwqB9DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgYmFz ZSA9IGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZShwZGV2LCAwKTsNCj4gK8KgwqDCoMKg wqDCoMKgaWYgKElTX0VSUihiYXNlKSkNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJldHVybiBQVFJfRVJSKGJhc2UpOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoGRzaS0+cmVnbWFw ID0NCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldm1fcmVnbWFwX2luaXRfbW1p byhkc2ktPmRldiwgYmFzZSwNCj4gJm53bF9kc2lfcmVnbWFwX2NvbmZpZyk7DQo+ICvCoMKgwqDC oMKgwqDCoGlmIChJU19FUlIoZHNpLT5yZWdtYXApKSB7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXQgPSBQVFJfRVJSKGRzaS0+cmVnbWFwKTsNCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gY3JlYXRl IE5XTCBEU0kNCj4gcmVnbWFwOiAlZFxuIiwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQpOw0KPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsNCj4gK8KgwqDCoMKgwqDCoMKgfQ0KPiArDQo+ICvC oMKgwqDCoMKgwqDCoGRzaS0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsNCj4gK8Kg wqDCoMKgwqDCoMKgaWYgKGRzaS0+aXJxIDwgMCkgew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBnZXQgZGV2aWNlIElS UToNCj4gJWRcbiIsDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgZHNpLT5pcnEpOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuIGRzaS0+aXJxOw0KPiArwqDCoMKgwqDCoMKgwqB9DQo+ICsNCj4gK8KgwqDC oMKgwqDCoMKgZHNpLT5yc3RjID0gZGV2bV9yZXNldF9jb250cm9sX2FycmF5X2dldChkc2ktPmRl diwgZmFsc2UsDQo+IHRydWUpOw0KPiArwqDCoMKgwqDCoMKgwqBpZiAoSVNfRVJSKGRzaS0+cnN0 YykpIHsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IFBUUl9FUlIoZHNp LT5yc3RjKTsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChyZXQgIT0gLUVQ Uk9CRV9ERUZFUikNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFpbGVkIHRvIGdldA0KPiByZXNldHM6ICVk XG4iLA0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQpOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmV0dXJuIHJldDsNCj4gK8KgwqDCoMKgwqDCoMKgfQ0KDQpTaW5jZSB5b3UgZHJv cHBlZCB0aGUgcmVzZXQgcXVpcmsgKHdoaWNoIGlzIGEgZ29vZCBpZGVhLCBidXQgaXQgbmVlZHMg YQ0KYmFja3VwKSwgSSB3b3VsZCBsaWtlIHRvIHRlbGwgeW91IGFib3V0IG91ciBmaW5kaW5ncy4g U28sIGFzIHlvdSBrbm93LA0KRFNpIGNhbiByZWNlaXZlIGlucHV0IGZyb20gRENTUyBvciBMQ0RJ RiAodGhpcyBpcyBkb25lIHRocm91Z2ggYSBtdXgpLg0KTm93LCB0aGUgcmVzZXQgb2YgdGhlIERT SSBibG9jayBpcyBub3QgaGFuZGxlZCBkaXJlY3RseSB0aHJvdWdoIHRoZQ0KU3lzdGVtIFJlc2V0 IENvbnRyb2xsZXIgKGFzIGluaXRpYWxseSBJIHRob3VnaCkuIFRoZSBzaWduYWxzIGNvbWluZw0K ZnJvbSBTUkMgYXJlIGdvaW5nIGludG8gYSByZXNldF9zeW5jIChSZXNldCBTeW5jaHJvbnl6ZXIg YmxvY2spLA0KYmVjYXVzZSB0aGUgRFNJIGJsb2NrIG5lZWRzIHRoZSByZXNldCBzaWduYWxzIHRv IGJlwqBzeW5jaHJvbm91cyBkZS0NCmFzc2VydGVkLg0KUmVjZW50bHksIHdlIGRpc2NvdmVyZWQg dGhlIGJ1ZyB0aGF0IHdhcyBub3QgYWxsb3dpbmcgdXMgdG8gY29ycmVjdGx5DQpyZXNldCB0aGUg RFNJIGFuZCBhbHNvIHdoeSB0aGF0IHF1aXJrIHdhcyBpbml0aWFsbHkgdXNlZC4NCk5vcm1hbGx5 LCB0aGUgb3V0cHV0IHBpeGVsLWNsb2NrIHRoYXQgd2FzIGNvbWluZyBmcm9tIHRoYXQgbXV4IHNo b3VsZA0KYmUgdXNlZCBhcyBhIGNsb2NrIGZvciB0aGUgcmVzZXRfc3luYywgYnV0IGR1ZSB0byBh IGRlc2lnbiBpc3N1ZSBpbiB0aGUNCmNvcmUsIHRoZSBMQ0RJRiBwaXhlbC1jbG9jayB3YXMgdXNl ZCB0byBkcml2ZSB0aGlzIHJlc2V0X3N5bmMuDQpTbywgc2luY2UgSFcgYnVnIGhlcmUgd2hpY2gg Y2FuIGJlIG1hbmFnZWQgaW4gU1csIHdoYXQgd2UgZGlkIGlzIHRvIGFkZA0KdGhlIExDRElGIHBp eGVsLWNsb2NrIHRvIHRoaXMgZHJpdmVyIChpbiBkdHMgaXQgY2FuIGJlIGFkZGVkIGFzIGFuDQpl eHRlcm5hbCBjbG9jayBuZWVkZWQgZm9yIHJlc2V0X3N5bmMpLiBJIGtub3cgaXQgaXMgYSBuYXN0 eSBleHRlcm5hbA0KZGVwZW5jZW5jeSwgYnV0IHRoaXMgaXMgdGhlIHBhcnQgaW4gU1cgdGhhdCBm aXhlcyB0aGUgaXNzdWUgaW4gSFcuDQpOb3c6IHRoZSBMQ0RJRiBwaXhlbC1jbG9jayBuZWVkcyBi byBiZSBvbiBmb3IgdGhlIHdob2xlIGR1cmF0aW9uIG9mIHRoZQ0KRFNJIG9wZXJhdGlvbiwgVGhp cyBtZWFucyB0aGF0IExDRElGIHNob3VsZCBiZSBlbmFibGVkIGJlZm9yZSBkZS0NCmFzc2VydGlu ZyB0aGUgcmVzZXQgc2lnbmFscywgdGhlbiBkaXNhYmxlZCBhZnRlciB3ZSBhcmUgZG9uZSB3aXRo IERTSQ0KYW5kIGFzc2VydCB0aGUgcmVzZXQgc2lnbmFscyBiYWNrLg0KDQpOZXh0LCBJIHdhbnQg dG8gZGV0YWlsIHlvdSB0aGUgc2VxdWVuY2Ugb2YgdGhlIG9wZXJhdGlvbnMgdGhhdCBuZWVkcyB0 bw0KYmUgZG9uZSwgc2luY2Ugd2hpbGUgZGVidWdnaW5nIHRoaXMgaXNzdWUgd2UgcmVjZWl2ZWQg dGhlIGNvcnJlY3QNCnNlcXVlbmNlIGZyb20gTm9ydGh3ZXN0IExvZ2ljIHJlcHJlc2VudGF0aXZl cy4gVGhpcyBzZXF1ZW5jZSBpcyBhbg0KYWJzb2x1dGUgcmVxdWlyZW1lbnQgZm9yIGEgcHJvcGVy IGluaXRpYWxpemF0aW9uIGFuZCBJIHdpbGwgZGV0YWlsIGl0DQpiZWxvdzoNCjEuIERlLWFzc2Vy dCAncGNsaycgcmVzZXQgKHRoaXMgaXMgbmVlZGVkIHRvIGhhdmUgYWNjZXMgdG8gdGhlIERTSQ0K cmVnaXN0ZXJzKQ0KMi4gQ29uZmlndXJlIERTSSBIb3N0DQozLiBDb25maWd1cmUgREhQWQ0KNC4g RW5hYmxlIERQSFkNCjUuIERlLWFzc2VydCAnZXNjJyBhbmQgJ2J5dGUnIHJlc2V0cyAodGhlc2Ug YXJlIG5lZWRlZCBmb3IgSG9zdCBUWA0Kb3BlcmF0aW9ucykNCjYuIFNlbmQgRFNJIGNvbW1hbmRz IChpZiB0aGUgRFNJIHBlcmlwaGVyYWwgbmVlZHMgY29uZmlndXJhdGlvbikNCjcuIERlLWFzc2Vy dCAnZHBpJyByZXNldCAoZGUtYXNzZXJ0aW5nIHRoaXMgcmVzZXQsIHdpbGwgZW5hYmxlIHRoZSBE UEkNCnRvIHN0YXJ0IGZldGNoaW5nIGRhdGEgZnJvbSBpdCdzIGlucHV0IGFuZCBzdGFydCBzdHJl YW1pbmcgRFNJIGRhdGEpDQoNCllvdSB3aWxsIHNlZSB0aGF0IEkgbGVmdCB0aGUgJ2RwaScgcmVz ZXQgYXQgdGhlIGVuZCwgc28gdGhhdCB0aGUgJ0RTSQ0KcGVyaXBoZXJhbCBpbml0aWFsaXphdGlv bicgc3RlcCB3aWxsIGJlIGNsZWFuLiBEU0kgbGFuZXMgbmVlZHMgdG8gYmUNCmNsZWFuIGR1cmlu ZyB0aGlzIHBoYXNlIGFuZCBub3QgYmUgInBvbHV0ZWQiIGJ5IGFueSBwaXhlbCBkYXRhIHRoYXQg RFBJDQp0aGlua3MgaXQgbmVlZHMgdG8gc3RyZWFtLiBPbiBteSBzaWRlLCBJIHRyaWVkIHRvIHNl cGFyYXRlIHRoZSBhYm92ZQ0Kc3RlcHMgYnkgaW1wbGVtZW50aW5nIHN0ZXBzIDEtNSBpbiBicmlk Z2VfcHJlX2VuYWJsZSwgaG9waW5nIHRoYXQgdGhlDQpzdGVwIDYgd2lsbCBiZSBhdXRvbWF0aWNh bGx5IHJ1biBpbiBwYW5lbCBlbmFibGUgcGhhc2UsIGFuZCBmaW5hbGx5DQpoYXZlIHN0ZXAgNyBp bXBsZW1lbnRlZCBpbiBicmlkZ2VfZW5hYmxlLiBVbmZvcnR1bmF0ZWxseSwgdGhlIG9yZGVyIG9m DQpjYWxscyBmb3IgZW5hYmxlIGlzIGV4YWN0bHkgdGhlIG9wb3NpdGUgd2F5IGFzIGZvciBwcmVf ZW5hYmxlLCB3aGljaA0KbWFrZXMgaW1wb3NzaWJsZSB0byBoYXZlIHRoZSBzdGVwIDcgZXhlY3V0 ZWQgQUZURVIgc3RlcCA2Lg0KSW4gYnJpZGdlX3ByZV9lbmFibGUsIHRoZSBwcmVfZW5hYmxlIGZv ciB0aGUgYnJpZGdlIGNoYWluIGlzIGV4ZWN1dGVkDQpmaXJzdCwgdGhlbiBvdXIgcHJlX2VuYWJs ZSBpcyBleGVjdXRlZC4NCkluIGJyaWRnZV9lbmFibGUsIG91ciBlbmFibGUgaXMgZXhlY3V0ZWQg Zmlyc3QsIHRoZW4gdGhlIGVuYWJsZSBmb3INCmJyaWdkZSBjaGFpbiBpcyBleGVjdXRlZC4gVGhp cyBtZWFucyB0aGF0IHN0ZXAgNyB3aWxsIGVuZCB1cCBleGVjdXRlZA0KYmVmb3JlIHN0ZXAgNiwg Y2F1c2luZyB0aGUgJ0RTSSBsYW5lIHBvbHV0aW9uJyBJIHdhcyB0YWxraW5nIGFib3ZlLg0KQXMg b2Ygbm93LCBJIGRpZG4ndCBtYW5hZ2UgdG8gZmluZCBhIHdheSB0byBmaXggdGhpcywgYnV0IEkg d2lsbCBrZWVwDQppbnZlc3RpZ2F0aW5nLiBJZiB5b3UgaGF2ZSBhIGdvb2QgaWRlZWEgZm9yIHRo aXMgaXQgd291bGUgYmUgZ3JlYXQuDQpTbywgd2l0aCBhbGwgdGhlIGFib3ZlIGRldGFpbHMsIEkg dGhpbmsgeW91IHdpbGwgbmVlZCB0byB0cmVhdCBlYWNoDQpyZXNldCBpbmRpdmlkdWFsbHksIGlu c3RlYWQgb2YgdHJlYXRpbmcgdGhlbSBhcyBhbiBhcnJheS4NCg0KPiArDQo+ICvCoMKgwqDCoMKg wqDCoHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGlteDhtcV9kc2lfc2VsZWN0 X2lucHV0KHN0cnVjdCBud2xfZHNpICpkc2kpDQo+ICt7DQo+ICvCoMKgwqDCoMKgwqDCoHN0cnVj dCBkZXZpY2Vfbm9kZSAqcmVtb3RlOw0KPiArwqDCoMKgwqDCoMKgwqB1MzIgdXNlX2Rjc3MgPSAx Ow0KPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Ow0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoHJlbW90 ZSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfbm9kZShkc2ktPmRldi0+b2Zfbm9kZSwgMCwNCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBOV0xfRFNJX0VORFBPSU5UX0xDRElGKTsNCj4gK8KgwqDC oMKgwqDCoMKgaWYgKHJlbW90ZSkgew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg dXNlX2Rjc3MgPSAwOw0KPiArwqDCoMKgwqDCoMKgwqB9IGVsc2Ugew0KPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcmVtb3RlID0gb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9ub2RlKGRzaS0+ ZGV2LT5vZl9ub2RlLA0KPiAwLA0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBOV0xfRFNJX0VORFBPSU5UX0RDDQo+IFNTKTsNCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGlmICghcmVtb3RlKSB7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9FUlJPUihkc2ktPmRldiwNCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIk5vIHZhbGlkIGlucHV0IGVuZHBvaW50DQo+IGZvdW5kXG4iKTsNCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsN Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0NCj4gK8KgwqDCoMKgwqDCoMKgfQ0K PiArDQo+ICvCoMKgwqDCoMKgwqDCoERSTV9ERVZfSU5GTyhkc2ktPmRldiwgIlVzaW5nICVzIGFz IGlucHV0IHNvdXJjZVxuIiwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAodXNlX2Rjc3MpID8gIkRDU1MiIDogIkxDRElGIik7DQo+ICvCoMKgwqDCoMKgwqDCoHJl dCA9IG11eF9jb250cm9sX3RyeV9zZWxlY3QoZHNpLT5tdXgsIHVzZV9kY3NzKTsNCj4gK8KgwqDC oMKgwqDCoMKgaWYgKHJldCA8IDApDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBE Uk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFpbGVkIHRvIHNlbGVjdCBpbnB1dDoNCj4gJWRcbiIs IHJldCk7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgb2Zfbm9kZV9wdXQocmVtb3RlKTsNCj4gK8Kg wqDCoMKgwqDCoMKgcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBpbXg4bXFf ZHNpX2Rlc2VsZWN0X2lucHV0KHN0cnVjdCBud2xfZHNpICpkc2kpDQo+ICt7DQo+ICvCoMKgwqDC oMKgwqDCoGludCByZXQ7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gbXV4X2NvbnRyb2xf ZGVzZWxlY3QoZHNpLT5tdXgpOw0KPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0IDwgMCkNCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWls ZWQgdG8gZGVzZWxlY3QgaW5wdXQ6DQo+ICVkXG4iLCByZXQpOw0KPiArDQo+ICvCoMKgwqDCoMKg wqDCoHJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gKw0KPiArc3RhdGljIGludCBpbXg4bXFfZHNp X3Bvd2Vyb24oc3RydWN0IG53bF9kc2kgKmRzaSkNCj4gK3sNCj4gK8KgwqDCoMKgwqDCoMKgaW50 IHJldCA9IDA7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgLyogb3RoZXJ3aXNlIHRoZSBkaXNwbGF5 IHN0YXlzIGJsYW5rICovDQo+ICvCoMKgwqDCoMKgwqDCoHVzbGVlcF9yYW5nZSgyMDAsIDMwMCk7 DQoNCklmIHlvdSBpbXBsZW1lbnQgdGhlIHBhcnQgd2l0aCBMQ0RJRiBjbG9jayBkZXRhaWxlZCBh Ym92ZSwgeW91IGNhbiBkcm9wDQp0aGlzIHNsZWVwLiBBbHNvLCBwb3dlcm9uIHNob3VsZCBiZSBy ZXBsYWNlZCBieSB2YXJpb3VzIHJlc2V0IGNhbGxiYWNrcw0KKGV4OiBwY2xrX3Jlc2V0LCBtaXBp X3Jlc2V0LCBkcGlfcmVzZXQpLg0KDQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgaWYgKGRzaS0+cnN0 YykNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IHJlc2V0X2NvbnRyb2xf ZGVhc3NlcnQoZHNpLT5yc3RjKTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Ow0K PiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGlteDhtcV9kc2lfcG93ZXJvZmYoc3RydWN0IG53bF9k c2kgKmRzaSkNCj4gK3sNCj4gK8KgwqDCoMKgwqDCoMKgaW50IHJldCA9IDA7DQo+ICsNCj4gK8Kg wqDCoMKgwqDCoMKgaWYgKGRzaS0+cnN0YykNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHJldCA9IHJlc2V0X2NvbnRyb2xfYXNzZXJ0KGRzaS0+cnN0Yyk7DQo+ICvCoMKgwqDCoMKg wqDCoHJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Jy aWRnZV90aW1pbmdzIG53bF9kc2lfdGltaW5ncyA9IHsNCj4gK8KgwqDCoMKgwqDCoMKgLmlucHV0 X2J1c19mbGFncyA9IERSTV9CVVNfRkxBR19ERV9MT1csDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IG53bF9kc2lfcGxhdGZvcm1fZGF0YSBpbXg4bXFfZGV2ID0gew0KPiArwqDC oMKgwqDCoMKgwqAucG93ZXJvbiA9ICZpbXg4bXFfZHNpX3Bvd2Vyb24sDQo+ICvCoMKgwqDCoMKg wqDCoC5wb3dlcm9mZiA9ICZpbXg4bXFfZHNpX3Bvd2Vyb2ZmLA0KPiArwqDCoMKgwqDCoMKgwqAu c2VsZWN0X2lucHV0ID0gJmlteDhtcV9kc2lfc2VsZWN0X2lucHV0LA0KPiArwqDCoMKgwqDCoMKg wqAuZGVzZWxlY3RfaW5wdXQgPSAmaW14OG1xX2RzaV9kZXNlbGVjdF9pbnB1dCwNCj4gK8KgwqDC oMKgwqDCoMKgLmNsa19jb25maWcgPSB7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqB7IC5pZCA9IE5XTF9EU0lfQ0xLX0NPUkUsIC5wcmVzZW50ID0gdHJ1ZSB9LA0KPiArwqDCoMKg wqDCoMKgwqB9LA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2Vf aWQgbndsX2RzaV9kdF9pZHNbXSA9IHsNCj4gK8KgwqDCoMKgwqDCoMKgeyAuY29tcGF0aWJsZSA9 ICJmc2wsaW14OG1xLW53bC1kc2kiLCAuZGF0YSA9ICZpbXg4bXFfZGV2LCB9LA0KPiArwqDCoMKg wqDCoMKgwqB7IC8qIHNlbnRpbmVsICovIH0NCj4gK307DQo+ICtNT0RVTEVfREVWSUNFX1RBQkxF KG9mLCBud2xfZHNpX2R0X2lkcyk7DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2Rl dmljZV9hdHRyaWJ1dGUgbndsX2RzaV9xdWlya3NfbWF0Y2hbXSA9IHsNCj4gK8KgwqDCoMKgwqDC oMKgeyAuc29jX2lkID0gImkuTVg4TVEiLCAucmV2aXNpb24gPSAiMi4wIiwNCj4gK8KgwqDCoMKg wqDCoMKgwqDCoC5kYXRhID0gKHZvaWQgKilFMTE0MThfSFNfTU9ERV9RVUlSSyB9LA0KPiArwqDC oMKgwqDCoMKgwqB7IC8qIHNlbnRpbmVsLiAqLyB9LA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGlu dCBud2xfZHNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ICt7DQo+ICvC oMKgwqDCoMKgwqDCoHN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7DQo+ICvCoMKgwqDC oMKgwqDCoGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm9mX2lkID0NCj4gb2ZfbWF0Y2hfZGV2 aWNlKG53bF9kc2lfZHRfaWRzLCBkZXYpOw0KPiArwqDCoMKgwqDCoMKgwqBjb25zdCBzdHJ1Y3Qg bndsX2RzaV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IG9mX2lkLT5kYXRhOw0KPiArwqDCoMKgwqDC oMKgwqBjb25zdCBzdHJ1Y3Qgc29jX2RldmljZV9hdHRyaWJ1dGUgKmF0dHI7DQo+ICvCoMKgwqDC oMKgwqDCoHN0cnVjdCBud2xfZHNpICpkc2k7DQo+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7DQo+ ICsNCj4gK8KgwqDCoMKgwqDCoMKgZHNpID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkc2kp LCBHRlBfS0VSTkVMKTsNCj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFkc2kpDQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVOT01FTTsNCj4gKw0KPiArwqDCoMKgwqDCoMKg wqBkc2ktPmRldiA9IGRldjsNCj4gK8KgwqDCoMKgwqDCoMKgZHNpLT5wZGF0YSA9IHBkYXRhOw0K PiArDQo+ICvCoMKgwqDCoMKgwqDCoHJldCA9IG53bF9kc2lfcGFyc2VfZHQoZHNpKTsNCj4gK8Kg wqDCoMKgwqDCoMKgaWYgKHJldCkNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJl dHVybiByZXQ7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gZGV2bV9yZXF1ZXN0X2lycShk ZXYsIGRzaS0+aXJxLCBud2xfZHNpX2lycV9oYW5kbGVyLCAwLA0KPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X25hbWUoZGV2 KSwgZHNpKTsNCj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCA8IDApIHsNCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3Qg SVJRICVkOiAlZFxuIiwNCj4gZHNpLT5pcnEsDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0KTsNCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7DQo+ICvCoMKgwqDCoMKgwqDCoH0NCj4gKw0KPiAr wqDCoMKgwqDCoMKgwqBkc2ktPmRzaV9ob3N0Lm9wcyA9ICZud2xfZHNpX2hvc3Rfb3BzOw0KPiAr wqDCoMKgwqDCoMKgwqBkc2ktPmRzaV9ob3N0LmRldiA9IGRldjsNCj4gK8KgwqDCoMKgwqDCoMKg cmV0ID0gbWlwaV9kc2lfaG9zdF9yZWdpc3RlcigmZHNpLT5kc2lfaG9zdCk7DQo+ICvCoMKgwqDC oMKgwqDCoGlmIChyZXQpIHsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9E RVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIE1JUEkgaG9zdDoNCj4gJWRcbiIsIHJl dCk7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Ow0KPiArwqDC oMKgwqDCoMKgwqB9DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgYXR0ciA9IHNvY19kZXZpY2VfbWF0 Y2gobndsX2RzaV9xdWlya3NfbWF0Y2gpOw0KPiArwqDCoMKgwqDCoMKgwqBpZiAoYXR0cikNCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRzaS0+cXVpcmtzID0gKHVpbnRwdHJfdClh dHRyLT5kYXRhOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoGRzaS0+YnJpZGdlLmRyaXZlcl9wcml2 YXRlID0gZHNpOw0KPiArwqDCoMKgwqDCoMKgwqBkc2ktPmJyaWRnZS5mdW5jcyA9ICZud2xfZHNp X2JyaWRnZV9mdW5jczsNCj4gK8KgwqDCoMKgwqDCoMKgZHNpLT5icmlkZ2Uub2Zfbm9kZSA9IGRl di0+b2Zfbm9kZTsNCj4gK8KgwqDCoMKgwqDCoMKgZHNpLT5icmlkZ2UudGltaW5ncyA9ICZud2xf ZHNpX3RpbWluZ3M7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgZGV2X3NldF9kcnZkYXRhKGRldiwg ZHNpKTsNCj4gK8KgwqDCoMKgwqDCoMKgcG1fcnVudGltZV9lbmFibGUoZGV2KTsNCj4gK8KgwqDC oMKgwqDCoMKgcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgbndsX2RzaV9yZW1v dmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gK3sNCj4gK8KgwqDCoMKgwqDCoMKg c3RydWN0IG53bF9kc2kgKmRzaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOw0KPiArDQo+ ICvCoMKgwqDCoMKgwqDCoG1pcGlfZHNpX2hvc3RfdW5yZWdpc3RlcigmZHNpLT5kc2lfaG9zdCk7 DQo+ICvCoMKgwqDCoMKgwqDCoHBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsNCj4gK8Kg wqDCoMKgwqDCoMKgcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZv cm1fZHJpdmVyIG53bF9kc2lfZHJpdmVyID0gew0KPiArwqDCoMKgwqDCoMKgwqAucHJvYmXCoMKg wqDCoMKgwqDCoMKgwqDCoD0gbndsX2RzaV9wcm9iZSwNCj4gK8KgwqDCoMKgwqDCoMKgLnJlbW92 ZcKgwqDCoMKgwqDCoMKgwqDCoD0gbndsX2RzaV9yZW1vdmUsDQo+ICvCoMKgwqDCoMKgwqDCoC5k cml2ZXLCoMKgwqDCoMKgwqDCoMKgwqA9IHsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoC5vZl9tYXRjaF90YWJsZSA9IG53bF9kc2lfZHRfaWRzLA0KPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgLm5hbWXCoMKgwqA9IERSVl9OQU1FLA0KPiArwqDCoMKgwqDCoMKgwqB9 LA0KPiArfTsNCj4gKw0KPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihud2xfZHNpX2RyaXZlcik7 DQo+ICsNCj4gK01PRFVMRV9BVVRIT1IoIk5YUCBTZW1pY29uZHVjdG9yIik7DQo+ICtNT0RVTEVf QVVUSE9SKCJQdXJpc20gU1BDIik7DQo+ICtNT0RVTEVfREVTQ1JJUFRJT04oIk5vcnRod2VzdCBM b2dpYyBNSVBJLURTSSBkcml2ZXIiKTsNCj4gK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsgLyogR1BM djIgb3IgbGF0ZXIgKi8NCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvbnds LWRzaS5oDQo+IGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpLmgNCj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi5hMjQ3YThhMTFjN2MNCj4gLS0tIC9k ZXYvbnVsbA0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kuaA0KPiBAQCAt MCwwICsxLDE0NCBAQA0KPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArICov DQo+ICsvKg0KPiArICogTldMIE1JUEkgRFNJIGhvc3QgZHJpdmVyDQo+ICsgKg0KPiArICogQ29w eXJpZ2h0IChDKSAyMDE3IE5YUA0KPiArICogQ29weXJpZ2h0IChDKSAyMDE5IFB1cmlzbSBTUEMN Cj4gKyAqLw0KPiArI2lmbmRlZiBfX05XTF9EU0lfSF9fDQo+ICsjZGVmaW5lIF9fTldMX0RTSV9I X18NCj4gKw0KPiArLyogRFNJIEhPU1QgcmVnaXN0ZXJzICovDQo+ICsjZGVmaW5lIE5XTF9EU0lf Q0ZHX05VTV9MQU5FU8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MA0KPiAr I2RlZmluZSBOV0xfRFNJX0NGR19OT05DT05USU5VT1VTX0NMS8KgwqDCoMKgwqDCoMKgwqDCoMKg MHg0DQo+ICsjZGVmaW5lIE5XTF9EU0lfQ0ZHX1RfUFJFwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAweDgNCj4gKyNkZWZpbmUgTldMX0RTSV9DRkdfVF9QT1NUwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHhjDQo+ICsjZGVmaW5lIE5X TF9EU0lfQ0ZHX1RYX0dBUMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oDB4MTANCj4gKyNkZWZpbmUgTldMX0RTSV9DRkdfQVVUT0lOU0VSVF9FT1RQwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgMHgxNA0KPiArI2RlZmluZSBOV0xfRFNJX0NGR19FWFRSQV9DTURTX0FGVEVS X0VPVFDCoMKgwqDCoMKgwqAweDE4DQo+ICsjZGVmaW5lIE5XTF9EU0lfQ0ZHX0hUWF9UT19DT1VO VMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MWMNCj4gKyNkZWZpbmUgTldMX0RTSV9D RkdfTFJYX0hfVE9fQ09VTlTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MjANCj4gKyNkZWZp bmUgTldMX0RTSV9DRkdfQlRBX0hfVE9fQ09VTlTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4 MjQNCj4gKyNkZWZpbmUgTldMX0RTSV9DRkdfVFdBS0VVUMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAweDI4DQo+ICsjZGVmaW5lIE5XTF9EU0lfQ0ZHX1NUQVRVU19PVVTC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgyYw0KPiArI2RlZmluZSBOV0xfRFNJ X1JYX0VSUk9SX1NUQVRVU8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoDB4MzANCj4gKw0KPiArLyogRFNJIERQSSByZWdpc3RlcnMgKi8NCj4gKyNkZWZpbmUg TldMX0RTSV9QSVhFTF9QQVlMT0FEX1NJWkXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MjAw DQo+ICsjZGVmaW5lIE5XTF9EU0lfUElYRUxfRklGT19TRU5EX0xFVkVMwqDCoMKgwqDCoMKgwqDC oMKgwqAweDIwNA0KPiArI2RlZmluZSBOV0xfRFNJX0lOVEVSRkFDRV9DT0xPUl9DT0RJTkfCoMKg wqDCoMKgwqDCoMKgwqAweDIwOA0KPiArI2RlZmluZSBOV0xfRFNJX1BJWEVMX0ZPUk1BVMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgyMGMNCj4gKyNkZWZpbmUgTldMX0RT SV9WU1lOQ19QT0xBUklUWcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDIxMA0K PiArI2RlZmluZSBOV0xfRFNJX1ZTWU5DX1BPTEFSSVRZX0FDVElWRV9MT1fCoMKgwqDCoMKgwqAw DQo+ICsjZGVmaW5lIE5XTF9EU0lfVlNZTkNfUE9MQVJJVFlfQUNUSVZFX0hJR0jCoMKgwqDCoMKg QklUKDEpDQo+ICsNCj4gKyNkZWZpbmUgTldMX0RTSV9IU1lOQ19QT0xBUklUWcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDIxNA0KPiArI2RlZmluZSBOV0xfRFNJX0hTWU5DX1BP TEFSSVRZX0FDVElWRV9MT1fCoMKgwqDCoMKgwqAwDQo+ICsjZGVmaW5lIE5XTF9EU0lfSFNZTkNf UE9MQVJJVFlfQUNUSVZFX0hJR0jCoMKgwqDCoMKgQklUKDEpDQo+ICsNCj4gKyNkZWZpbmUgTldM X0RTSV9WSURFT19NT0RFwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg MHgyMTgNCj4gKyNkZWZpbmUgTldMX0RTSV9IRlDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MjFjDQo+ICsjZGVmaW5lIE5XTF9EU0lfSEJQ wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAw eDIyMA0KPiArI2RlZmluZSBOV0xfRFNJX0hTQcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgyMjQNCj4gKyNkZWZpbmUgTldMX0RTSV9FTkFC TEVfTVVMVF9QS1RTwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgyMjgNCj4gKyNkZWZp bmUgTldMX0RTSV9WQlDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoDB4MjJjDQo+ICsjZGVmaW5lIE5XTF9EU0lfVkZQwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDIzMA0KPiArI2RlZmlu ZSBOV0xfRFNJX0JMTFBfTU9ERcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgMHgyMzQNCj4gKyNkZWZpbmUgTldMX0RTSV9VU0VfTlVMTF9QS1RfQkxMUMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAweDIzOA0KPiArI2RlZmluZSBOV0xfRFNJX1ZBQ1RJVkXCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgMHgyM2MNCj4gKyNkZWZpbmUgTldMX0RTSV9WQ8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDI0MA0KPiArDQo+ICsvKiBEU0kgQVBC IFBLVCBjb250cm9sICovDQo+ICsjZGVmaW5lIE5XTF9EU0lfVFhfUEFZTE9BRMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MjgwDQo+ICsjZGVmaW5lIE5XTF9EU0lf UEtUX0NPTlRST0zCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgyODQN Cj4gKyNkZWZpbmUgTldMX0RTSV9TRU5EX1BBQ0tFVMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAweDI4OA0KPiArI2RlZmluZSBOV0xfRFNJX1BLVF9TVEFUVVPCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDI4Yw0KPiArI2RlZmluZSBOV0xf RFNJX1BLVF9GSUZPX1dSX0xFVkVMwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MjkwDQo+ ICsjZGVmaW5lIE5XTF9EU0lfUEtUX0ZJRk9fUkRfTEVWRUzCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgMHgyOTQNCj4gKyNkZWZpbmUgTldMX0RTSV9SWF9QQVlMT0FEwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgyOTgNCj4gKyNkZWZpbmUgTldMX0RTSV9SWF9Q S1RfSEVBREVSwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgyOWMNCj4gKw0K PiArLyogRFNJIElSUSBoYW5kbGluZyAqLw0KPiArI2RlZmluZSBOV0xfRFNJX0lSUV9TVEFUVVPC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDJhMA0KPiArI2RlZmlu ZSBOV0xfRFNJX1NNX05PVF9JRExFwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoEJJVCgwKQ0KPiArI2RlZmluZSBOV0xfRFNJX1RYX1BLVF9ET05FwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCgxKQ0KPiArI2RlZmluZSBOV0xfRFNJX0RQSFlf RElSRUNUSU9OwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCgyKQ0KPiArI2Rl ZmluZSBOV0xfRFNJX1RYX0ZJRk9fT1ZGTFfCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBCSVQoMykNCj4gKyNkZWZpbmUgTldMX0RTSV9UWF9GSUZPX1VERkxXwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDQpDQo+ICsjZGVmaW5lIE5XTF9EU0lfUlhfRklG T19PVkZMV8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCg1KQ0KPiArI2Rl ZmluZSBOV0xfRFNJX1JYX0ZJRk9fVURGTFfCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBCSVQoNikNCj4gKyNkZWZpbmUgTldMX0RTSV9SWF9QS1RfSERSX1JDVkTCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoNykNCj4gKyNkZWZpbmUg TldMX0RTSV9SWF9QS1RfUEFZTE9BRF9EQVRBX1JDVkTCoMKgwqDCoMKgwqDCoEJJVCg4KQ0KPiAr I2RlZmluZSBOV0xfRFNJX0JUQV9USU1FT1VUwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoEJJVCgyOSkNCj4gKyNkZWZpbmUgTldMX0RTSV9MUF9SWF9USU1FT1VUwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDMwKQ0KPiArI2RlZmluZSBOV0xfRFNJ X0hTX1RYX1RJTUVPVVTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoMzEp DQo+ICsNCj4gKyNkZWZpbmUgTldMX0RTSV9JUlFfU1RBVFVTMsKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAweDJhNA0KPiArI2RlZmluZSBOV0xfRFNJX1NJTkdMRV9CSVRf RUNDX0VSUsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDApDQo+ICsjZGVmaW5lIE5XTF9E U0lfTVVMVElfQklUX0VDQ19FUlLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDEpDQo+ ICsjZGVmaW5lIE5XTF9EU0lfQ1JDX0VSUsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoMikNCj4gKw0KPiArI2RlZmluZSBO V0xfRFNJX0lSUV9NQVNLwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoDB4MmE4DQo+ICsjZGVmaW5lIE5XTF9EU0lfU01fTk9UX0lETEVfTUFTS8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoEJJVCgwKQ0KPiArI2RlZmluZSBOV0xfRFNJX1RYX1BLVF9ET05F X01BU0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoMSkNCj4gKyNkZWZpbmUgTldM X0RTSV9EUEhZX0RJUkVDVElPTl9NQVNLwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDIpDQo+ ICsjZGVmaW5lIE5XTF9EU0lfVFhfRklGT19PVkZMV19NQVNLwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBCSVQoMykNCj4gKyNkZWZpbmUgTldMX0RTSV9UWF9GSUZPX1VERkxXX01BU0vCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoEJJVCg0KQ0KPiArI2RlZmluZSBOV0xfRFNJX1JYX0ZJRk9fT1ZG TFdfTUFTS8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDUpDQo+ICsjZGVmaW5lIE5XTF9E U0lfUlhfRklGT19VREZMV19NQVNLwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoNikNCj4g KyNkZWZpbmUgTldMX0RTSV9SWF9QS1RfSERSX1JDVkRfTUFTS8KgwqDCoMKgwqDCoMKgwqDCoMKg wqBCSVQoNykNCj4gKyNkZWZpbmUgTldMX0RTSV9SWF9QS1RfUEFZTE9BRF9EQVRBX1JDVkRfTUFT S8KgwqBCSVQoOCkNCj4gKyNkZWZpbmUgTldMX0RTSV9CVEFfVElNRU9VVF9NQVNLwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDI5KQ0KPiArI2RlZmluZSBOV0xfRFNJX0xQX1JYX1RJ TUVPVVRfTUFTS8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDMwKQ0KPiArI2RlZmluZSBO V0xfRFNJX0hTX1RYX1RJTUVPVVRfTUFTS8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDMx KQ0KPiArDQo+ICsjZGVmaW5lIE5XTF9EU0lfSVJRX01BU0sywqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDJhYw0KPiArI2RlZmluZSBOV0xfRFNJX1NJTkdMRV9C SVRfRUNDX0VSUl9NQVNLwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoMCkNCj4g KyNkZWZpbmUgTldMX0RTSV9NVUxUSV9CSVRfRUNDX0VSUl9NQVNLwqDCoMKgwqDCoMKgwqDCoMKg QklUKDEpDQo+ICsjZGVmaW5lIE5XTF9EU0lfQ1JDX0VSUl9NQVNLwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoMikNCj4gKw0KPiArLyoNCj4gKyAqIFBLVF9DT05UUk9M IGZvcm1hdDoNCj4gKyAqIFsxNTogMF0gLSB3b3JkIGNvdW50DQo+ICsgKiBbMTc6MTZdIC0gdmly dHVhbCBjaGFubmVsDQo+ICsgKiBbMjM6MThdIC0gZGF0YSB0eXBlDQo+ICsgKiBbMjRdwqDCoMKg wqDCoMKgwqDCoMKgwqDCoC0gTFAgb3IgSFMgc2VsZWN0ICgwIC0gTFAsIDEgLSBIUykNCj4gKyAq IFsyNV3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgLSBwZXJmb3JtIEJUQSBhZnRlciBwYWNrZXQgaXMg c2VudA0KPiArICogWzI2XcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAtIHBlcmZvcm0gQlRBIG9ubHks IG5vIHBhY2tldCB0eA0KPiArICovDQo+ICsjZGVmaW5lIE5XTF9EU0lfV0MoeCnCoMKgwqDCoMKg wqDCoMKgwqDCoEZJRUxEX1BSRVAoR0VOTUFTSygxNSwgMCksICh4KSkNCj4gKyNkZWZpbmUgTldM X0RTSV9UWF9WQyh4KcKgwqDCoMKgwqDCoMKgRklFTERfUFJFUChHRU5NQVNLKDE3LCAxNiksICh4 KSkNCj4gKyNkZWZpbmUgTldMX0RTSV9UWF9EVCh4KcKgwqDCoMKgwqDCoMKgRklFTERfUFJFUChH RU5NQVNLKDIzLCAxOCksICh4KSkNCj4gKyNkZWZpbmUgTldMX0RTSV9IU19TRUwoeCnCoMKgwqDC oMKgwqBGSUVMRF9QUkVQKEdFTk1BU0soMjQsIDI0KSwgKHgpKQ0KPiArI2RlZmluZSBOV0xfRFNJ X0JUQV9UWCh4KcKgwqDCoMKgwqDCoEZJRUxEX1BSRVAoR0VOTUFTSygyNSwgMjUpLCAoeCkpDQo+ ICsjZGVmaW5lIE5XTF9EU0lfQlRBX05PX1RYKHgpwqDCoMKgRklFTERfUFJFUChHRU5NQVNLKDI2 LCAyNiksICh4KSkNCj4gKw0KPiArLyoNCj4gKyAqIFJYX1BLVF9IRUFERVIgZm9ybWF0Og0KPiAr ICogWzE1OiAwXSAtIHdvcmQgY291bnQNCj4gKyAqIFsyMToxNl0gLSBkYXRhIHR5cGUNCj4gKyAq IFsyMzoyMl0gLSB2aXJ0dWFsIGNoYW5uZWwNCj4gKyAqLw0KPiArI2RlZmluZSBOV0xfRFNJX1JY X0RUKHgpwqDCoMKgwqDCoMKgwqBGSUVMRF9HRVQoR0VOTUFTSygyMSwgMTYpLCAoeCkpDQo+ICsj ZGVmaW5lIE5XTF9EU0lfUlhfVkMoeCnCoMKgwqDCoMKgwqDCoEZJRUxEX0dFVChHRU5NQVNLKDIz LCAyMiksICh4KSkNCj4gKw0KPiArLyogRFNJIFZpZGVvIG1vZGUgKi8NCj4gKyNkZWZpbmUgTldM X0RTSV9WTV9CVVJTVF9NT0RFX1dJVEhfU1lOQ19QVUxTRVPCoMKgwqDCoMKgwqDCoMKgwqAwDQo+ ICsjZGVmaW5lIE5XTF9EU0lfVk1fTk9OX0JVUlNUX01PREVfV0lUSF9TWU5DX0VWRU5UU8KgwqDC oMKgwqBCSVQoMCkNCj4gKyNkZWZpbmUgTldMX0RTSV9WTV9CVVJTVF9NT0RFwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCgxKQ0KPiArDQo+ICsv KiAqIERQSSBjb2xvciBjb2RpbmcgKi8NCj4gKyNkZWZpbmUgTldMX0RTSV9EUElfMTZfQklUXzU2 NV9QQUNLRUTCoMKgMA0KPiArI2RlZmluZSBOV0xfRFNJX0RQSV8xNl9CSVRfNTY1X0FMSUdORUQg MQ0KPiArI2RlZmluZSBOV0xfRFNJX0RQSV8xNl9CSVRfNTY1X1NISUZURUQgMg0KPiArI2RlZmlu ZSBOV0xfRFNJX0RQSV8xOF9CSVRfUEFDS0VEwqDCoMKgwqDCoMKgMw0KPiArI2RlZmluZSBOV0xf RFNJX0RQSV8xOF9CSVRfQUxJR05FRMKgwqDCoMKgwqA0DQo+ICsjZGVmaW5lIE5XTF9EU0lfRFBJ XzI0X0JJVMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgNQ0KPiArDQo+ICsvKiAqIERQSSBQaXhl bCBmb3JtYXQgKi8NCj4gKyNkZWZpbmUgTldMX0RTSV9QSVhFTF9GT1JNQVRfMTbCoMKgMA0KPiAr I2RlZmluZSBOV0xfRFNJX1BJWEVMX0ZPUk1BVF8xOMKgwqBCSVQoMCkNCj4gKyNkZWZpbmUgTldM X0RTSV9QSVhFTF9GT1JNQVRfMThMIEJJVCgxKQ0KPiArI2RlZmluZSBOV0xfRFNJX1BJWEVMX0ZP Uk1BVF8yNMKgwqAoQklUKDApIHwgQklUKDEpKQ0KPiArDQo+ICsjZW5kaWYgLyogX19OV0xfRFNJ X0hfXyAqLw0KPiAtLQ0KPiAyLjIzLjANCj4gDQo+IA0KDQpJIGtub3cgaXQncyBhIGxvdCBvZiBp bmZvcm1hdGlvbiBoZXJlIGFuZCwgc2luY2UgSSBhbHJlYWR5IGhhdmUgdGhhdA0KaW1wbGVtZW50 ZWQgb24gbXkgc2lkZSwgZG8geW91IHdhbnQgbWUgdG8gc2VuZCB0aGUgbmV4dCByZXZpc2lvbiwg b3IgZG8NCnlvdSB3YW50IHRvIGltcGxlbWVudCBpdCBvbiB5b3VyIG93bj8NCg0KQmVzdCByZWdh cmRzLA0KUm9iZXJ0