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=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_2 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D67D0C3A5A1 for ; Thu, 22 Aug 2019 13:18:45 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 902CD2173E for ; Thu, 22 Aug 2019 13:18:45 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="L2ZvnOnd"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=nxp.com header.i=@nxp.com header.b="maPdNUS7" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 902CD2173E Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Content-ID:In-Reply-To: References:Message-ID:Date:Subject:To:From:Reply-To:Cc:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=hON4lYb+9fxYoijSI7bcjbg0qYc/QVNtCYKNw4SDz04=; b=L2ZvnOndbVaWVj TW/BYoS++9ETyo424HP9p1YQLpKi63sOz+Nzt98o26ltwbvLVXpPRqiXJb9jL/2nnXNmpwiNVT/qj VvzpTpyy3oK3/BV68G6aG3yj2YUf/eGsnDbkdwWKobd6/ntxuP4sdz37OIdvuuH6BWRyiVWTNLOrk SYrZdx6Od6JFbu9a0c0HA6NwXETqoNBD/B8NAG+srwwCsA/SjNO/nhhs5aE2r5r+nj/MzgP0dq29O 50vGtB2S4oR7sfvNeoa/VvAfya+Vkdv+PDQjo+qc9fXeBW66DX07IDwPX+1AQhwF1IUNrFve96bkw wo6L8JyZVsPvs9M3iMew==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1i0mz5-00055i-In; Thu, 22 Aug 2019 13:18:35 +0000 Received: from mail-eopbgr10067.outbound.protection.outlook.com ([40.107.1.67] helo=EUR02-HE1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1i0myy-000558-VU for linux-arm-kernel@lists.infradead.org; Thu, 22 Aug 2019 13:18:33 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=j4Gzq4AA6/XUFKG7/cYPdx9j7HmOTZVqJGmNCjdpws1XEGxFZMp0OHtbrtm370zp2v7wxPv+abpNh84FZHweRVKOD2idIZYGKdrOodSZz8wyy2yQRMrVcXfUxuq4p4zRNgk2f+03Qb2lI9PBD19AEGvuNdIqA8s6vAjbT1/1ZkrnZFXwYA7T9dShVhjKT0bS+9GKrh8uneBM+dZm9VDUzIfwF+REQhKrFAEjFt9WuZS4xwLIi4L/Hmqi8TcteerhcT2S50j6wxR8PskkBfdTkAS2DT1Z9nNiVni2bHqrRE70d65b1O/gDMK00se1Ze23U/4SiI/yx2n++75Anocn3w== 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=DlDr8ruqqyThfgJMx3TxrwYHHEpfgmA30Ke2lKocMIc=; b=ZmvYy2bn0bNu+iDpK8LuAUzTRZauX/tCf4tkUPyV4gFwyZMg8GwaSdL7iqmWGFKQKb1sDieD49FQwNVzFpuvV9lzvnX/yTBNgo5PGXF1HA33Jz+L249PDIq/fspdACjTi29K3es4Wz9qXi1mYrAh7iYUxA0s/sjtS/rhphAVSfVpI9p7rHfhf+/IGd0Acfg4yMzPKSAQEuqrNJkLB2n9pWhrxFBHSN7dISqaxPaKS0dd4wYX2P1WlAzfHq4LQTHWJT+5d5VYq2N/34uwKDcFrpl20G6EuKON1NGRjl79mNn07pZg/T1s7c7AiS5bs84Xolt4nXKMj6IqY7sozbm63g== 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=DlDr8ruqqyThfgJMx3TxrwYHHEpfgmA30Ke2lKocMIc=; b=maPdNUS7gsGw0E9YKN9JtyD8D151NH818JUEqSlQx1fHjVF/5nEp8+2GkfCdzZXKAxXCkitXpktyUhN1gU9+iXzItGGmZn9KMoS4Mneox0nHMa7juLQmUZOPLUCj0r9G5IeLl0PEO/wnmz21Jo/rCl2SPIwvi9H3BO/q9sAnnVQ= Received: from DB8PR04MB6715.eurprd04.prod.outlook.com (20.179.251.14) by DB8PR04MB5594.eurprd04.prod.outlook.com (20.179.8.223) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2178.16; Thu, 22 Aug 2019 13:18:22 +0000 Received: from DB8PR04MB6715.eurprd04.prod.outlook.com ([fe80::b0ab:d127:ca27:e1fa]) by DB8PR04MB6715.eurprd04.prod.outlook.com ([fe80::b0ab:d127:ca27:e1fa%7]) with mapi id 15.20.2178.020; Thu, 22 Aug 2019 13:18:22 +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 v3 2/2] drm/bridge: Add NWL MIPI DSI host controller support Thread-Topic: [EXT] [PATCH v3 2/2] drm/bridge: Add NWL MIPI DSI host controller support Thread-Index: AQHVWNaTAvmbOg/Q4kSx8LbxMJJTHacHJnOA Date: Thu, 22 Aug 2019 13:18:21 +0000 Message-ID: <1566479899.3209.101.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-correlation-id: 038bdf4a-99e9-4566-8937-08d7270334e6 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(5600166)(711020)(4605104)(1401327)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020); SRVR:DB8PR04MB5594; x-ms-traffictypediagnostic: DB8PR04MB5594: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8273; x-forefront-prvs: 01371B902F x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(136003)(346002)(366004)(396003)(376002)(39860400002)(199004)(189003)(110136005)(81156014)(99286004)(316002)(6506007)(229853002)(66446008)(91956017)(76116006)(81166006)(66946007)(8676002)(66476007)(53946003)(305945005)(7736002)(66556008)(64756008)(3846002)(76176011)(6116002)(66066001)(26005)(36756003)(8936002)(50226002)(7416002)(6486002)(53936002)(102836004)(6436002)(2201001)(30864003)(476003)(2616005)(71200400001)(71190400001)(2501003)(5024004)(256004)(2906002)(25786009)(14454004)(6246003)(14444005)(103116003)(446003)(11346002)(66574012)(86362001)(486006)(44832011)(478600001)(5660300002)(186003)(6512007)(99106002)(921003)(1121003)(579004)(559001)(569006); DIR:OUT; SFP:1101; SCL:1; SRVR:DB8PR04MB5594; H:DB8PR04MB6715.eurprd04.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: QP+ohvgY1okRyCKsCuYnwKsI/JIw3fCn9ZLsWgDcypMbvuScNi/XPt8gyUd7w5rp+yS8wX71KBHzg40XeYBsiIlBeQIIuNKL6lLXNoDBR+lZ/tV43bfeZ7Ky8AmE9fSGyHY+CqDh2KtFzUJrvFgavNytrPyhZloOXTSWFFK8Gja0xuXchYoweIdB1Nqw4mD0ZvjrFgwkDu0ByEiui7PBCc7pesY5xbJJyXilpxXOyO88DhBReU4STXTqEZH+4iEnIyJ94qRgYor9u5v6iZvPHj9jvX0dsjNviOM+7NTMZ2jg5rDPxiLUkRwPP2UnvPiDVodq7uoTTnpetOAcNz3jjSWtK0XSlcKNPN4QGuwqtErbLcVuHc1eZIEfXFimMUYeSbuXrnoaY8BHlA3+qSLUdkcOJPGrcaJf4eHKUQg3KEs= Content-ID: <423E19441F28164FA37AE8C5D9CB530B@eurprd04.prod.outlook.com> MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 038bdf4a-99e9-4566-8937-08d7270334e6 X-MS-Exchange-CrossTenant-originalarrivaltime: 22 Aug 2019 13:18:21.9954 (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: VDd1m5klj8p6865XBjmiecWEBiHPe/JBOjy92yH/Jdp46c6O0C0htHr5ZH0sF/Hx8+0feCzOHXLE712rI02BgQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB5594 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190822_061829_383371_7F955208 X-CRM114-Status: GOOD ( 22.56 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgR3VpZG8sDQoNCkkgYWRkZWQgbXkgc2lnbmVkLW9mZiwgcGx1cyBzb21lIGNvbW1lbnRzIGlu bGluZS4NCg0KT24gSm8sIDIwMTktMDgtMjIgYXQgMTI6NDQgKzAyMDAsIEd1aWRvIEfDvG50aGVy IHdyb3RlOg0KPiBUaGlzIGFkZHMgaW5pdGlhbCBzdXBwb3J0IGZvciB0aGUgTldMIE1JUEkgRFNJ IEhvc3QgY29udHJvbGxlciBmb3VuZA0KPiBvbg0KPiBpLk1YOCBTb0NzLg0KPiANCj4gSXQgYWRk cyBzdXBwb3J0IGZvciB0aGUgaS5NWDhNUSBidXQgdGhlIHNhbWUgSVAgY2FuIGJlIGZvdW5kIG9u DQo+IGUuZy4gdGhlIGkuTVg4UVhQLg0KPiANCj4gSXQgaGFzIGJlZW4gdGVzdGVkIG9uIHRoZSBM aWJyZW0gNSBkZXZraXQgdXNpbmcgbXhzZmIuDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBHdWlkbyBH w7xudGhlciA8YWd4QHNpZ3hjcHUub3JnPg0KU2lnbmVkLW9mZi1ieTogUm9iZXJ0IENoaXJhcyA8 cm9iZXJ0LmNoaXJhc0BueHAuY29tPg0KPiBDby1kZXZlbG9wZWQtYnk6IFJvYmVydCBDaGlyYXMg PHJvYmVydC5jaGlyYXNAbnhwLmNvbT4NCj4gLS0tDQo+IMKgZHJpdmVycy9ncHUvZHJtL2JyaWRn ZS9LY29uZmlnwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgwqAyICsNCj4gwqBkcml2ZXJzL2dw dS9kcm0vYnJpZGdlL01ha2VmaWxlwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoMKgMSArDQo+IMKg ZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpL0tjb25maWfCoMKgwqB8wqDCoDE2ICsNCj4g wqBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kvTWFrZWZpbGXCoMKgfMKgwqDCoDQgKw0K PiDCoGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRzaS9ud2wtZHJ2LmMgfCA1MDEgKysrKysr KysrKysrKysrKw0KPiDCoGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRzaS9ud2wtZHJ2Lmgg fMKgwqA2NSArKysNCj4gwqBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kvbndsLWRzaS5j IHwgNzAwDQo+ICsrKysrKysrKysrKysrKysrKysrKysrDQo+IMKgZHJpdmVycy9ncHUvZHJtL2Jy aWRnZS9ud2wtZHNpL253bC1kc2kuaCB8IDExMiArKysrDQo+IMKgOCBmaWxlcyBjaGFuZ2VkLCAx NDAxIGluc2VydGlvbnMoKykNCj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L2JyaWRnZS9ud2wtZHNpL0tjb25maWcNCj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL2JyaWRnZS9ud2wtZHNpL01ha2VmaWxlDQo+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRzaS9ud2wtZHJ2LmMNCj4gwqBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpL253bC1kcnYuaA0KPiDCoGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kvbndsLWRzaS5jDQo+ IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRzaS9ud2wt ZHNpLmgNCj4gDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcN Cj4gYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcNCj4gaW5kZXggMWNjOWY1MDJjMWYy Li43OTgwYjVjMjE1NmYgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2Nv bmZpZw0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcNCj4gQEAgLTE1NCw2 ICsxNTQsOCBAQCBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW5hbG9naXgvS2NvbmZp ZyINCj4gDQo+IMKgc291cmNlICJkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2Fkdjc1MTEvS2NvbmZp ZyINCj4gDQo+ICtzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRzaS9LY29uZmln Ig0KPiArDQo+IMKgc291cmNlICJkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lzL0tjb25m aWciDQo+IA0KPiDCoGVuZG1lbnUNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlk Z2UvTWFrZWZpbGUNCj4gYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlDQo+IGluZGV4 IDQ5MzRmY2Y1YTZmOC4uZDlmNmMwZjc3NTkyIDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vYnJpZGdlL01ha2VmaWxlDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZp bGUNCj4gQEAgLTE2LDQgKzE2LDUgQEAgb2JqLSQoQ09ORklHX0RSTV9BTkFMT0dJWF9EUCkgKz0g YW5hbG9naXgvDQo+IMKgb2JqLSQoQ09ORklHX0RSTV9JMkNfQURWNzUxMSkgKz0gYWR2NzUxMS8N Cj4gwqBvYmotJChDT05GSUdfRFJNX1RJX1NONjVEU0k4NikgKz0gdGktc242NWRzaTg2Lm8NCj4g wqBvYmotJChDT05GSUdfRFJNX1RJX1RGUDQxMCkgKz0gdGktdGZwNDEwLm8NCj4gK29iai0kKENP TkZJR19EUk1fTldMX01JUElfRFNJKSArPSBud2wtZHNpLw0KPiDCoG9iai15ICs9IHN5bm9wc3lz Lw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpL0tjb25maWcN Cj4gYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kvS2NvbmZpZw0KPiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLjNiMTU3YTlmMjIyOQ0KPiAtLS0gL2Rl di9udWxsDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRzaS9LY29uZmlnDQo+ IEBAIC0wLDAgKzEsMTYgQEANCj4gK2NvbmZpZyBEUk1fTldMX01JUElfRFNJDQo+ICvCoMKgwqDC oMKgwqDCoHRyaXN0YXRlICJTdXBwb3J0IGZvciBOb3J0aHdlc3QgTG9naWMgTUlQSSBEU0kgSG9z dA0KPiBjb250cm9sbGVyIg0KPiArwqDCoMKgwqDCoMKgwqBkZXBlbmRzIG9uIERSTQ0KPiArwqDC oMKgwqDCoMKgwqBkZXBlbmRzIG9uIENPTU1PTl9DTEsNCj4gK8KgwqDCoMKgwqDCoMKgZGVwZW5k cyBvbiBPRiAmJiBIQVNfSU9NRU0NCj4gK8KgwqDCoMKgwqDCoMKgc2VsZWN0IERSTV9LTVNfSEVM UEVSDQo+ICvCoMKgwqDCoMKgwqDCoHNlbGVjdCBEUk1fTUlQSV9EU0kNCj4gK8KgwqDCoMKgwqDC oMKgc2VsZWN0IERSTV9QQU5FTF9CUklER0UNCj4gK8KgwqDCoMKgwqDCoMKgc2VsZWN0IEdFTkVS SUNfUEhZX01JUElfRFBIWQ0KPiArwqDCoMKgwqDCoMKgwqBzZWxlY3QgTUZEX1NZU0NPTg0KPiAr wqDCoMKgwqDCoMKgwqBzZWxlY3QgTVVMVElQTEVYRVINCj4gK8KgwqDCoMKgwqDCoMKgc2VsZWN0 IFJFR01BUF9NTUlPDQo+ICvCoMKgwqDCoMKgwqDCoGhlbHANCj4gK8KgwqDCoMKgwqDCoMKgwqDC oFRoaXMgZW5hYmxlcyB0aGUgTm9ydGh3ZXN0IExvZ2ljIE1JUEkgRFNJIEhvc3QgY29udHJvbGxl cg0KPiBhcw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgZm9yIGV4YW1wbGUgZm91bmQgb24gTlhQJ3Mg aS5NWDggUHJvY2Vzc29ycy4NCj4gKw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2Jy aWRnZS9ud2wtZHNpL01ha2VmaWxlDQo+IGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNp L01ha2VmaWxlDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4u ODA0YmFmMmYxOTE2DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2Jy aWRnZS9ud2wtZHNpL01ha2VmaWxlDQo+IEBAIC0wLDAgKzEsNCBAQA0KPiArIyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMA0KPiArbndsLW1pcGktZHNpLXkgOj0gbndsLWRydi5vIG53 bC1kc2kubw0KPiArb2JqLSQoQ09ORklHX0RSTV9OV0xfTUlQSV9EU0kpICs9IG53bC1taXBpLWRz aS5vDQo+ICtoZWFkZXItdGVzdC15ICs9IG53bC1kcnYuaCBud2wtZHNpLmgNCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRzaS9ud2wtZHJ2LmMNCj4gYi9kcml2ZXJz L2dwdS9kcm0vYnJpZGdlL253bC1kc2kvbndsLWRydi5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZTQ1NzQzODczOGMwDQo+IC0tLSAvZGV2L251bGwNCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpL253bC1kcnYuYw0KPiBAQCAtMCww ICsxLDUwMSBAQA0KPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArDQo+ICsv Kg0KPiArICogaS5NWDggTldMIE1JUEkgRFNJIGhvc3QgZHJpdmVyDQo+ICsgKg0KPiArICogQ29w eXJpZ2h0IChDKSAyMDE3IE5YUA0KPiArICogQ29weXJpZ2h0IChDKSAyMDE5IFB1cmlzbSBTUEMN Cj4gKyAqLw0KPiArDQo+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+DQo+ICsjaW5jbHVkZSA8bGlu dXgvaXJxLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPg0KPiArI2luY2x1ZGUg PGxpbnV4L21vZHVsZS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L211eC9jb25zdW1lci5oPg0KPiAr I2luY2x1ZGUgPGxpbnV4L29mLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4N Cj4gKyNpbmNsdWRlIDxsaW51eC9waHkvcGh5Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvcmVzZXQu aD4NCj4gKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9zeXNf c29jLmg+DQo+ICsNCj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4NCj4gKyNp bmNsdWRlIDxkcm0vZHJtX29mLmg+DQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9wcmludC5oPg0KPiAr I2luY2x1ZGUgPGRybS9kcm1fcHJvYmVfaGVscGVyLmg+DQo+ICsNCj4gKyNpbmNsdWRlICJud2wt ZHJ2LmgiDQo+ICsjaW5jbHVkZSAibndsLWRzaS5oIg0KPiArDQo+ICsjZGVmaW5lIERSVl9OQU1F ICJud2wtZHNpIg0KPiArDQo+ICsvKiBQb3NzaWJsZSBwbGF0Zm9ybSBzcGVjaWZpYyBjbG9ja3Mg Ki8NCj4gKyNkZWZpbmUgTldMX0RTSV9DTEtfQ09SRcKgwqDCoMKgwqDCoMKgImNvcmUiDQo+ICsN Cj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBud2xfZHNpX3JlZ21hcF9jb25m aWcgPSB7DQo+ICvCoMKgwqDCoMKgwqDCoC5yZWdfYml0cyA9IDE2LA0KPiArwqDCoMKgwqDCoMKg wqAudmFsX2JpdHMgPSAzMiwNCj4gK8KgwqDCoMKgwqDCoMKgLnJlZ19zdHJpZGUgPSA0LA0KPiAr wqDCoMKgwqDCoMKgwqAubWF4X3JlZ2lzdGVyID0gTldMX0RTSV9JUlFfTUFTSzIsDQo+ICvCoMKg wqDCoMKgwqDCoC5uYW1lID0gRFJWX05BTUUsDQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3QgbndsX2Rz aV9wbGF0Zm9ybV9kYXRhIHsNCj4gK8KgwqDCoMKgwqDCoMKgaW50ICgqcG93ZXJvbikoc3RydWN0 IG53bF9kc2kgKmRzaSk7DQo+ICvCoMKgwqDCoMKgwqDCoGludCAoKnBvd2Vyb2ZmKShzdHJ1Y3Qg bndsX2RzaSAqZHNpKTsNCj4gK8KgwqDCoMKgwqDCoMKgaW50ICgqc2VsZWN0X2lucHV0KShzdHJ1 Y3QgbndsX2RzaSAqZHNpKTsNCj4gK8KgwqDCoMKgwqDCoMKgaW50ICgqZGVzZWxlY3RfaW5wdXQp KHN0cnVjdCBud2xfZHNpICpkc2kpOw0KPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbndsX2RzaV9w bGF0X2Nsa19jb25maWcNCj4gY2xrX2NvbmZpZ1tOV0xfRFNJX01BWF9QTEFURk9STV9DTE9DS1Nd Ow0KPiArfTsNCj4gKw0KPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgbndsX2RzaSAqYnJpZGdlX3Rv X2RzaShzdHJ1Y3QgZHJtX2JyaWRnZQ0KPiAqYnJpZGdlKQ0KPiArew0KPiArwqDCoMKgwqDCoMKg wqByZXR1cm4gY29udGFpbmVyX29mKGJyaWRnZSwgc3RydWN0IG53bF9kc2ksIGJyaWRnZSk7DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgbndsX2RzaV9zZXRfcGxhdGZvcm1fY2xvY2tzKHN0cnVj dCBud2xfZHNpICpkc2ksIGJvb2wNCj4gZW5hYmxlKQ0KPiArew0KPiArwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgZGV2aWNlICpkZXYgPSBkc2ktPmRldjsNCj4gK8KgwqDCoMKgwqDCoMKgY29uc3QgY2hh ciAqaWQ7DQo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBjbGsgKmNsazsNCj4gK8KgwqDCoMKgwqDC oMKgc2l6ZV90IGk7DQo+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGxvbmcgcmF0ZTsNCj4gK8Kg wqDCoMKgwqDCoMKgaW50IHJldCwgcmVzdWx0ID0gMDsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBE Uk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICIlcyBwbGF0Zm9ybSBjbG9ja3NcbiIsDQo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVuYWJs ZSA/ICJlbmFibGluZyIgOiAiZGlzYWJsaW5nIik7DQo+ICvCoMKgwqDCoMKgwqDCoGZvciAoaSA9 IDA7IGkgPCBBUlJBWV9TSVpFKGRzaS0+cGRhdGEtPmNsa19jb25maWcpOyBpKyspIHsNCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghZHNpLT5jbGtfY29uZmlnW2ldLnByZXNl bnQpDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29u dGludWU7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZCA9IGRzaS0+Y2xrX2Nv bmZpZ1tpXS5pZDsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNsayA9IGRzaS0+ Y2xrX2NvbmZpZ1tpXS5jbGs7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGlmIChlbmFibGUpIHsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqByZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoY2xrKTsNCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmV0IDwgMCkgew0KPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBE Uk1fREVWX0VSUk9SKGRldiwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJG YWlsZWQgdG8gZW5hYmxlICVzDQo+IGNsazogJWRcbiIsDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBpZCwgcmV0KTsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVzdWx0ID0gcmVzdWx0ID86IHJldDsN Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9DQo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmF0ZSA9IGNsa19n ZXRfcmF0ZShjbGspOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoERSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIkVuYWJsZWQgJXMgY2xrDQo+IEAlbHUg SHpcbiIsDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWQsIHJhdGUpOw0KPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfSBlbHNlIHsNCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjbGtfZGlzYWJsZV91bnByZXBhcmUoY2xr KTsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1f REVWX0RFQlVHX0RSSVZFUihkZXYsICJEaXNhYmxlZCAlcw0KPiBjbGtcbiIsIGlkKTsNCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0NCj4gK8KgwqDCoMKgwqDCoMKgfQ0KPiArDQo+ ICvCoMKgwqDCoMKgwqDCoHJldHVybiByZXN1bHQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQg bndsX2RzaV9wbGF0X2VuYWJsZShzdHJ1Y3QgbndsX2RzaSAqZHNpKQ0KPiArew0KPiArwqDCoMKg wqDCoMKgwqBzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkc2ktPmRldjsNCj4gK8KgwqDCoMKgwqDCoMKg aW50IHJldDsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBpZiAoZHNpLT5wZGF0YS0+c2VsZWN0X2lu cHV0KQ0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHNpLT5wZGF0YS0+c2VsZWN0 X2lucHV0KGRzaSk7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gbndsX2RzaV9zZXRfcGxh dGZvcm1fY2xvY2tzKGRzaSwgdHJ1ZSk7DQo+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKQ0K PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsNCj4gKw0KPiArwqDC oMKgwqDCoMKgwqByZXQgPSBkc2ktPnBkYXRhLT5wb3dlcm9uKGRzaSk7DQo+ICvCoMKgwqDCoMKg wqDCoGlmIChyZXQgPCAwKQ0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RF Vl9FUlJPUihkZXYsICJGYWlsZWQgdG8gcG93ZXIgb24gRFNJOiAlZFxuIiwNCj4gcmV0KTsNCj4g K8KgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgbnds X2RzaV9wbGF0X2Rpc2FibGUoc3RydWN0IG53bF9kc2kgKmRzaSkNCj4gK3sNCj4gK8KgwqDCoMKg wqDCoMKgZHNpLT5wZGF0YS0+cG93ZXJvZmYoZHNpKTsNCj4gK8KgwqDCoMKgwqDCoMKgbndsX2Rz aV9zZXRfcGxhdGZvcm1fY2xvY2tzKGRzaSwgZmFsc2UpOw0KPiArwqDCoMKgwqDCoMKgwqBpZiAo ZHNpLT5wZGF0YS0+ZGVzZWxlY3RfaW5wdXQpDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBkc2ktPnBkYXRhLT5kZXNlbGVjdF9pbnB1dChkc2kpOw0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgdm9pZCBud2xfZHNpX2JyaWRnZV9kaXNhYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2Up DQo+ICt7DQo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBud2xfZHNpICpkc2kgPSBicmlkZ2VfdG9f ZHNpKGJyaWRnZSk7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV9kaXNhYmxlKGRzaSk7 DQo+ICvCoMKgwqDCoMKgwqDCoG53bF9kc2lfcGxhdF9kaXNhYmxlKGRzaSk7DQo+ICvCoMKgwqDC oMKgwqDCoHBtX3J1bnRpbWVfcHV0KGRzaS0+ZGV2KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlu dCBud2xfZHNpX2dldF9kcGh5X3BhcmFtcyhzdHJ1Y3QgbndsX2RzaSAqZHNpLA0KPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZQ0KPiAqbW9kZSwNCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgdW5pb24gcGh5X2NvbmZpZ3VyZV9vcHRzDQo+ICpwaHlfb3B0cykNCj4gK3sNCj4gK8KgwqDC oMKgwqDCoMKgdW5zaWduZWQgbG9uZyByYXRlOw0KPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Ow0K PiArDQo+ICvCoMKgwqDCoMKgwqDCoGlmIChkc2ktPmxhbmVzIDwgMSB8fCBkc2ktPmxhbmVzID4g NCkNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUlOVkFMOw0KPiAr DQo+ICvCoMKgwqDCoMKgwqDCoC8qDQo+ICvCoMKgwqDCoMKgwqDCoMKgKiBTbyBmYXIgdGhlIERQ SFkgc3BlYyBtaW5pbWFsIHRpbWluZ3Mgd29yayBmb3IgYm90aCBtaXhlbA0KPiArwqDCoMKgwqDC oMKgwqDCoCogZHBoeSBhbmQgbndsIGRzaSBob3N0DQo+ICvCoMKgwqDCoMKgwqDCoMKgKi8NCj4g K8KgwqDCoMKgwqDCoMKgcmV0ID0gcGh5X21pcGlfZHBoeV9nZXRfZGVmYXVsdF9jb25maWcoDQo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtb2RlLT5jcnRjX2Nsb2NrICogMTAwMCwN Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1pcGlfZHNpX3BpeGVsX2Zvcm1hdF90 b19icHAoZHNpLT5mb3JtYXQpLCBkc2ktDQo+ID5sYW5lcywNCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCZwaHlfb3B0cy0+bWlwaV9kcGh5KTsNCj4gK8KgwqDCoMKgwqDCoMKgaWYg KHJldCA8IDApDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Ow0K PiArDQo+ICvCoMKgwqDCoMKgwqDCoHJhdGUgPSBjbGtfZ2V0X3JhdGUoZHNpLT50eF9lc2NfY2xr KTsNCj4gK8KgwqDCoMKgwqDCoMKgRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJMUCBj bGsgaXMgQCVsdSBIelxuIiwgcmF0ZSk7DQo+ICvCoMKgwqDCoMKgwqDCoHBoeV9vcHRzLT5taXBp X2RwaHkubHBfY2xrX3JhdGUgPSByYXRlOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAw Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBud2xfZHNpX2JyaWRnZV9tb2RlX2ZpeHVwKHN0 cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnN0IHN0cnVj dCBkcm1fZGlzcGxheV9tb2RlDQo+ICptb2RlLA0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qg ZHJtX2Rpc3BsYXlfbW9kZQ0KPiAqYWRqdXN0ZWRfbW9kZSkNCj4gK3sNCj4gK8KgwqDCoMKgwqDC oMKgLyogQXQgbGVhc3QgTENESUYgKyBOV0wgbmVlZHMgYWN0aXZlIGhpZ2ggc3luYyAqLw0KPiAr wqDCoMKgwqDCoMKgwqBhZGp1c3RlZF9tb2RlLT5mbGFncyB8PSAoRFJNX01PREVfRkxBR19QSFNZ TkMgfA0KPiBEUk1fTU9ERV9GTEFHX1BWU1lOQyk7DQo+ICvCoMKgwqDCoMKgwqDCoGFkanVzdGVk X21vZGUtPmZsYWdzICY9IH4oRFJNX01PREVfRkxBR19OSFNZTkMgfA0KPiBEUk1fTU9ERV9GTEFH X05WU1lOQyk7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHRydWU7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyBlbnVtIGRybV9tb2RlX3N0YXR1cw0KPiArbndsX2RzaV9icmlkZ2VfbW9kZV92 YWxpZChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLA0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqbW9kZSkNCj4gK3sNCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG53bF9kc2kgKmRzaSA9IGJy aWRnZV90b19kc2koYnJpZGdlKTsNCj4gK8KgwqDCoMKgwqDCoMKgaW50IGJwcCA9IG1pcGlfZHNp X3BpeGVsX2Zvcm1hdF90b19icHAoZHNpLT5mb3JtYXQpOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDC oGlmIChtb2RlLT5jbG9jayAqIGJwcCA+IDE1MDAwMDAwKQ0KPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmV0dXJuIE1PREVfQ0xPQ0tfSElHSDsNCj4gKw0KPiArwqDCoMKgwqDCoMKg wqBpZiAobW9kZS0+Y2xvY2sgKiBicHAgPCA4MDAwMCkNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJldHVybiBNT0RFX0NMT0NLX0xPVzsNClRoZXNlIGxpbWl0cyAoODBNQlBTIG1p biBhbmQgMTUwME1CUFMgbWF4KSBhcmUgcGVyIGxhbmUsIHNvIHlvdSBzaG91bGQNCmludm9sdmUg dGhlIG51bWJlcnMgb2YgbGFuZXMgaGVyZSwgdG9vLiBBY2NvcmRpbmcgdG8gdGhpcyBmb3JtdWxh LCB5b3UNCmxpbWl0IHRoZSBtYXhpbXVtIERTScKgdGhyb3VnaHB1dCB0byAxLjVHYnBzLCB3aGls ZSB0aGUgbWF4aW11bSBpcyA2R2Jwcw0KKDEuNSAqIDQgbGFuZXMpDQo+ICsNCj4gK8KgwqDCoMKg wqDCoMKgcmV0dXJuIE1PREVfT0s7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICtud2xf ZHNpX2JyaWRnZV9tb2RlX3NldChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLA0KPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnN0IHN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICptb2RlLA0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2Rl KQ0KPiArew0KPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbndsX2RzaSAqZHNpID0gYnJpZGdlX3Rv X2RzaShicmlkZ2UpOw0KPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkc2kt PmRldjsNCj4gK8KgwqDCoMKgwqDCoMKgdW5pb24gcGh5X2NvbmZpZ3VyZV9vcHRzIG5ld19jZmc7 DQo+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGxvbmcgcGh5X3JlZl9yYXRlOw0KPiArwqDCoMKg wqDCoMKgwqBpbnQgcmV0Ow0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoHJldCA9IG53bF9kc2lfZ2V0 X2RwaHlfcGFyYW1zKGRzaSwgYWRqdXN0ZWRfbW9kZSwgJm5ld19jZmcpOw0KPiArwqDCoMKgwqDC oMKgwqBpZiAocmV0IDwgMCkNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy bjsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqAvKg0KPiArwqDCoMKgwqDCoMKgwqDCoCogSWYgaHMg Y2xvY2sgaXMgdW5jaGFuZ2VkLCB3ZSdyZSBhbGwgZ29vZCAtIGFsbCBwYXJhbWV0ZXJzDQo+IGFy ZQ0KPiArwqDCoMKgwqDCoMKgwqDCoCogZGVyaXZlZCBmcm9tIGl0IGF0bS4NCj4gK8KgwqDCoMKg wqDCoMKgwqAqLw0KPiArwqDCoMKgwqDCoMKgwqBpZiAobmV3X2NmZy5taXBpX2RwaHkuaHNfY2xr X3JhdGUgPT0gZHNpLQ0KPiA+cGh5X2NmZy5taXBpX2RwaHkuaHNfY2xrX3JhdGUpDQo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKg cGh5X3JlZl9yYXRlID0gY2xrX2dldF9yYXRlKGRzaS0+cGh5X3JlZl9jbGspOw0KPiArwqDCoMKg wqDCoMKgwqBEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJQSFkgYXQgcmVmIHJhdGU6ICVsdVxu IiwNCj4gcGh5X3JlZl9yYXRlKTsNCj4gK8KgwqDCoMKgwqDCoMKgLyogU2F2ZSB0aGUgbmV3IGRl c2lyZWQgcGh5IGNvbmZpZyAqLw0KPiArwqDCoMKgwqDCoMKgwqBtZW1jcHkoJmRzaS0+cGh5X2Nm ZywgJm5ld19jZmcsIHNpemVvZihuZXdfY2ZnKSk7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgbWVt Y3B5KCZkc2ktPm1vZGUsIGFkanVzdGVkX21vZGUsIHNpemVvZihkc2ktPm1vZGUpKTsNCj4gK8Kg wqDCoMKgwqDCoMKgZHJtX21vZGVfZGVidWdfcHJpbnRtb2RlbGluZShhZGp1c3RlZF9tb2RlKTsN Cj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgbndsX2RzaV9icmlkZ2VfcHJlX2VuYWJsZShzdHJ1 Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQ0KPiArew0KPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgbnds X2RzaSAqZHNpID0gYnJpZGdlX3RvX2RzaShicmlkZ2UpOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDC oHBtX3J1bnRpbWVfZ2V0X3N5bmMoZHNpLT5kZXYpOw0KPiArwqDCoMKgwqDCoMKgwqBud2xfZHNp X3BsYXRfZW5hYmxlKGRzaSk7DQo+ICvCoMKgwqDCoMKgwqDCoG53bF9kc2lfZW5hYmxlKGRzaSk7 DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgbndsX2RzaV9icmlkZ2VfYXR0YWNoKHN0cnVjdCBk cm1fYnJpZGdlICpicmlkZ2UpDQo+ICt7DQo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBud2xfZHNp ICpkc2kgPSBicmlkZ2UtPmRyaXZlcl9wcml2YXRlOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoHJl dHVybiBkcm1fYnJpZGdlX2F0dGFjaChicmlkZ2UtPmVuY29kZXIsIGRzaS0+cGFuZWxfYnJpZGdl LA0KPiBicmlkZ2UpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9icmlk Z2VfZnVuY3MgbndsX2RzaV9icmlkZ2VfZnVuY3MgPSB7DQo+ICvCoMKgwqDCoMKgwqDCoC5wcmVf ZW5hYmxlID0gbndsX2RzaV9icmlkZ2VfcHJlX2VuYWJsZSwNCj4gK8KgwqDCoMKgwqDCoMKgLmRp c2FibGXCoMKgwqDCoD0gbndsX2RzaV9icmlkZ2VfZGlzYWJsZSwNCj4gK8KgwqDCoMKgwqDCoMKg Lm1vZGVfZml4dXAgPSBud2xfZHNpX2JyaWRnZV9tb2RlX2ZpeHVwLA0KPiArwqDCoMKgwqDCoMKg wqAubW9kZV9zZXTCoMKgwqA9IG53bF9kc2lfYnJpZGdlX21vZGVfc2V0LA0KPiArwqDCoMKgwqDC oMKgwqAubW9kZV92YWxpZCA9IG53bF9kc2lfYnJpZGdlX21vZGVfdmFsaWQsDQo+ICvCoMKgwqDC oMKgwqDCoC5hdHRhY2jCoMKgwqDCoMKgPSBud2xfZHNpX2JyaWRnZV9hdHRhY2gsDQo+ICt9Ow0K PiArDQo+ICtzdGF0aWMgaW50IG53bF9kc2lfcGFyc2VfZHQoc3RydWN0IG53bF9kc2kgKmRzaSkN Cj4gK3sNCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRv X3BsYXRmb3JtX2RldmljZShkc2ktPmRldik7DQo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBjbGsg KmNsazsNCj4gK8KgwqDCoMKgwqDCoMKgY29uc3QgY2hhciAqY2xrX2lkOw0KPiArwqDCoMKgwqDC oMKgwqB2b2lkIF9faW9tZW0gKmJhc2U7DQo+ICvCoMKgwqDCoMKgwqDCoGludCBpLCByZXQ7DQo+ ICsNCj4gK8KgwqDCoMKgwqDCoMKgZHNpLT5waHkgPSBkZXZtX3BoeV9nZXQoZHNpLT5kZXYsICJk cGh5Iik7DQo+ICvCoMKgwqDCoMKgwqDCoGlmIChJU19FUlIoZHNpLT5waHkpKSB7DQo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBQVFJfRVJSKGRzaS0+cGh5KTsNCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChyZXQgIT0gLUVQUk9CRV9ERUZFUikNCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fREVWX0VS Uk9SKGRzaS0+ZGV2LCAiQ291bGQgbm90IGdldCBQSFk6DQo+ICVkXG4iLCByZXQpOw0KPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsNCj4gK8KgwqDCoMKgwqDCoMKg fQ0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoC8qIFBsYXRmb3JtIGRlcGVuZGVudCBjbG9ja3MgKi8N Cj4gK8KgwqDCoMKgwqDCoMKgbWVtY3B5KGRzaS0+Y2xrX2NvbmZpZywgZHNpLT5wZGF0YS0+Y2xr X2NvbmZpZywNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzaXplb2YoZHNpLT5wZGF0 YS0+Y2xrX2NvbmZpZykpOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoGZvciAoaSA9IDA7IGkgPCBB UlJBWV9TSVpFKGRzaS0+cGRhdGEtPmNsa19jb25maWcpOyBpKyspIHsNCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGlmICghZHNpLT5jbGtfY29uZmlnW2ldLnByZXNlbnQpDQo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29udGludWU7DQo+ ICsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNsa19pZCA9IGRzaS0+Y2xrX2Nv bmZpZ1tpXS5pZDsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNsayA9IGRldm1f Y2xrX2dldChkc2ktPmRldiwgY2xrX2lkKTsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGlmIChJU19FUlIoY2xrKSkgew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldCA9IFBUUl9FUlIoY2xrKTsNCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFp bGVkIHRvIGdldCAlcw0KPiBjbG9jazogJWRcbiIsDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNsa19p ZCwgcmV0KTsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByZXR1cm4gcmV0Ow0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQ0KPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYs ICJTZXR1cCBjbGsgJXMgKHJhdGU6DQo+ICVsdSlcbiIsDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjbGtf aWQsIGNsa19nZXRfcmF0ZShjbGspKTsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGRzaS0+Y2xrX2NvbmZpZ1tpXS5jbGsgPSBjbGs7DQo+ICvCoMKgwqDCoMKgwqDCoH0NCj4gKw0K PiArwqDCoMKgwqDCoMKgwqAvKiBEU0kgY2xvY2tzICovDQo+ICvCoMKgwqDCoMKgwqDCoGNsayA9 IGRldm1fY2xrX2dldChkc2ktPmRldiwgInBoeV9yZWYiKTsNCj4gK8KgwqDCoMKgwqDCoMKgaWYg KElTX0VSUihjbGspKSB7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBQ VFJfRVJSKGNsayk7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fREVWX0VS Uk9SKGRzaS0+ZGV2LCAiRmFpbGVkIHRvIGdldCBwaHlfcmVmIGNsb2NrOg0KPiAlZFxuIiwNCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByZXQpOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsNCj4g K8KgwqDCoMKgwqDCoMKgfQ0KPiArwqDCoMKgwqDCoMKgwqBkc2ktPnBoeV9yZWZfY2xrID0gY2xr Ow0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoGNsayA9IGRldm1fY2xrX2dldChkc2ktPmRldiwgInJ4 X2VzYyIpOw0KPiArwqDCoMKgwqDCoMKgwqBpZiAoSVNfRVJSKGNsaykpIHsNCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IFBUUl9FUlIoY2xrKTsNCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gZ2V0 IHJ4X2VzYyBjbG9jazoNCj4gJWRcbiIsDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0KTsNCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldHVybiByZXQ7DQo+ICvCoMKgwqDCoMKgwqDCoH0NCj4gK8KgwqDCoMKg wqDCoMKgZHNpLT5yeF9lc2NfY2xrID0gY2xrOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoGNsayA9 IGRldm1fY2xrX2dldChkc2ktPmRldiwgInR4X2VzYyIpOw0KPiArwqDCoMKgwqDCoMKgwqBpZiAo SVNfRVJSKGNsaykpIHsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IFBU Ul9FUlIoY2xrKTsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfRVJS T1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gZ2V0IHR4X2VzYyBjbG9jazoNCj4gJWRcbiIsDQo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0KTsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7DQo+ICvC oMKgwqDCoMKgwqDCoH0NCj4gK8KgwqDCoMKgwqDCoMKgZHNpLT50eF9lc2NfY2xrID0gY2xrOw0K PiArDQo+ICvCoMKgwqDCoMKgwqDCoGRzaS0+bXV4ID0gZGV2bV9tdXhfY29udHJvbF9nZXQoZHNp LT5kZXYsIE5VTEwpOw0KPiArwqDCoMKgwqDCoMKgwqBpZiAoSVNfRVJSKGRzaS0+bXV4KSkgew0K PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gUFRSX0VSUihkc2ktPm11eCk7 DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmV0ICE9IC1FUFJPQkVfREVG RVIpDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJN X0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBnZXQgbXV4Og0KPiAlZFxuIiwgcmV0KTsN Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7DQo+ICvCoMKgwqDC oMKgwqDCoH0NCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBiYXNlID0gZGV2bV9wbGF0Zm9ybV9pb3Jl bWFwX3Jlc291cmNlKHBkZXYsIDApOw0KPiArwqDCoMKgwqDCoMKgwqBpZiAoSVNfRVJSKGJhc2Up KQ0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIFBUUl9FUlIoYmFzZSk7 DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgZHNpLT5yZWdtYXAgPQ0KPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgZGV2bV9yZWdtYXBfaW5pdF9tbWlvKGRzaS0+ZGV2LCBiYXNlLA0KPiAm bndsX2RzaV9yZWdtYXBfY29uZmlnKTsNCj4gK8KgwqDCoMKgwqDCoMKgaWYgKElTX0VSUihkc2kt PnJlZ21hcCkpIHsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IFBUUl9F UlIoZHNpLT5yZWdtYXApOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RF Vl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBjcmVhdGUgTldMIERTSQ0KPiByZWdtYXA6ICVk XG4iLA0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJldCk7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4g cmV0Ow0KPiArwqDCoMKgwqDCoMKgwqB9DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgZHNpLT5pcnEg PSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOw0KPiArwqDCoMKgwqDCoMKgwqBpZiAoZHNpLT5p cnEgPCAwKSB7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fREVWX0VSUk9S KGRzaS0+ZGV2LCAiRmFpbGVkIHRvIGdldCBkZXZpY2UgSVJROg0KPiAlZFxuIiwNCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkc2kt PmlycSk7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gZHNpLT5pcnE7 DQo+ICvCoMKgwqDCoMKgwqDCoH0NCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBkc2ktPnJzdGMgPSBk ZXZtX3Jlc2V0X2NvbnRyb2xfYXJyYXlfZ2V0KGRzaS0+ZGV2LCBmYWxzZSwNCj4gdHJ1ZSk7DQo+ ICvCoMKgwqDCoMKgwqDCoGlmIChJU19FUlIoZHNpLT5yc3RjKSkgew0KPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBnZXQg cmVzZXRzOg0KPiAlbGRcbiIsDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgUFRSX0VSUihkc2ktPnJzdGMpKTsNCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBQVFJfRVJSKGRzaS0+cnN0Yyk7DQo+ICvCoMKg wqDCoMKgwqDCoH0NCj4gKw0KPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsNCj4gK30NCj4gKw0K PiArc3RhdGljIGludCBpbXg4bXFfZHNpX3NlbGVjdF9pbnB1dChzdHJ1Y3QgbndsX2RzaSAqZHNp KQ0KPiArew0KPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZGV2aWNlX25vZGUgKnJlbW90ZTsNCj4g K8KgwqDCoMKgwqDCoMKgdTMyIHVzZV9kY3NzID0gMTsNCj4gK8KgwqDCoMKgwqDCoMKgaW50IHJl dDsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqByZW1vdGUgPSBvZl9ncmFwaF9nZXRfcmVtb3RlX25v ZGUoZHNpLT5kZXYtPm9mX25vZGUsIDAsIDApOw0KPiArwqDCoMKgwqDCoMKgwqBpZiAoc3RyY21w KHJlbW90ZS0+bmFtZSwgImxjZGlmIikgPT0gMCkNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHVzZV9kY3NzID0gMDsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBEUk1fREVWX0lORk8o ZHNpLT5kZXYsICJVc2luZyAlcyBhcyBpbnB1dCBzb3VyY2VcbiIsDQo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKHVzZV9kY3NzKSA/ICJEQ1NTIiA6ICJMQ0RJRiIp Ow0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoHJldCA9IG11eF9jb250cm9sX3RyeV9zZWxlY3QoZHNp LT5tdXgsIHVzZV9kY3NzKTsNCj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCA8IDApDQo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFpbGVk IHRvIHNlbGVjdCBpbnB1dDoNCj4gJWRcbiIsIHJldCk7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKg b2Zfbm9kZV9wdXQocmVtb3RlKTsNCj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsNCj4gK30N Cj4gKw0KPiArDQo+ICtzdGF0aWMgaW50IGlteDhtcV9kc2lfZGVzZWxlY3RfaW5wdXQoc3RydWN0 IG53bF9kc2kgKmRzaSkNCj4gK3sNCj4gK8KgwqDCoMKgwqDCoMKgaW50IHJldDsNCj4gKw0KPiAr wqDCoMKgwqDCoMKgwqByZXQgPSBtdXhfY29udHJvbF9kZXNlbGVjdChkc2ktPm11eCk7DQo+ICvC oMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKQ0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBkZXNlbGVjdCBpbnB1dDoNCj4g JWRcbiIsIHJldCk7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsNCj4gK30NCj4g Kw0KPiArDQo+ICtzdGF0aWMgaW50IGlteDhtcV9kc2lfcG93ZXJvbihzdHJ1Y3QgbndsX2RzaSAq ZHNpKQ0KPiArew0KPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0ID0gMDsNCj4gKw0KPiArwqDCoMKg wqDCoMKgwqAvKiBvdGhlcndpc2UgdGhlIGRpc3BsYXkgc3RheXMgYmxhbmsgKi8NCj4gK8KgwqDC oMKgwqDCoMKgdXNsZWVwX3JhbmdlKDIwMCwgMzAwKTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBp ZiAoZHNpLT5yc3RjKQ0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gcmVz ZXRfY29udHJvbF9kZWFzc2VydChkc2ktPnJzdGMpOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoHJl dHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgaW14OG1xX2RzaV9wb3dlcm9mZihz dHJ1Y3QgbndsX2RzaSAqZHNpKQ0KPiArew0KPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0ID0gMDsN Cj4gKw0KPiArwqDCoMKgwqDCoMKgwqBpZiAoZHNpLT5xdWlya3MgJiBTUkNfUkVTRVRfUVVJUksp DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsNCj4gKw0KPiArwqDC oMKgwqDCoMKgwqBpZiAoZHNpLT5yc3RjKQ0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0ID0gcmVzZXRfY29udHJvbF9hc3NlcnQoZHNpLT5yc3RjKTsNCj4gK8KgwqDCoMKgwqDC oMKgcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fYnJp ZGdlX3RpbWluZ3MgbndsX2RzaV90aW1pbmdzID0gew0KPiArwqDCoMKgwqDCoMKgwqAuaW5wdXRf YnVzX2ZsYWdzID0gRFJNX0JVU19GTEFHX0RFX0xPVywNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgbndsX2RzaV9wbGF0Zm9ybV9kYXRhIGlteDhtcV9kZXYgPSB7DQo+ICvCoMKg wqDCoMKgwqDCoC5wb3dlcm9uID0gJmlteDhtcV9kc2lfcG93ZXJvbiwNCj4gK8KgwqDCoMKgwqDC oMKgLnBvd2Vyb2ZmID0gJmlteDhtcV9kc2lfcG93ZXJvZmYsDQo+ICvCoMKgwqDCoMKgwqDCoC5z ZWxlY3RfaW5wdXQgPSAmaW14OG1xX2RzaV9zZWxlY3RfaW5wdXQsDQo+ICvCoMKgwqDCoMKgwqDC oC5kZXNlbGVjdF9pbnB1dCA9ICZpbXg4bXFfZHNpX2Rlc2VsZWN0X2lucHV0LA0KPiArwqDCoMKg wqDCoMKgwqAuY2xrX2NvbmZpZyA9IHsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHsgLmlkID0gTldMX0RTSV9DTEtfQ09SRSwgLnByZXNlbnQgPSB0cnVlIH0sDQo+ICvCoMKgwqDC oMKgwqDCoH0sDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9p ZCBud2xfZHNpX2R0X2lkc1tdID0gew0KPiArwqDCoMKgwqDCoMKgwqB7IC5jb21wYXRpYmxlID0g ImZzbCxpbXg4bXEtbndsLWRzaSIsIC5kYXRhID0gJmlteDhtcV9kZXYsIH0sDQo+ICvCoMKgwqDC oMKgwqDCoHsgLyogc2VudGluZWwgKi8gfQ0KPiArfTsNCj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUo b2YsIG53bF9kc2lfZHRfaWRzKTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZGV2 aWNlX2F0dHJpYnV0ZSBud2xfZHNpX3F1aXJrc19tYXRjaFtdID0gew0KPiArwqDCoMKgwqDCoMKg wqB7IC5zb2NfaWQgPSAiaS5NWDhNUSIsIC5yZXZpc2lvbiA9ICIyLjAiLA0KPiArwqDCoMKgwqDC oMKgwqDCoMKgLmRhdGEgPSAodm9pZCAqKShFMTE0MThfSFNfTU9ERV9RVUlSSyB8IFNSQ19SRVNF VF9RVUlSSykgfSwNCj4gK8KgwqDCoMKgwqDCoMKgeyAvKiBzZW50aW5lbC4gKi8gfSwNCj4gK307 DQo+ICsNCj4gK3N0YXRpYyBpbnQgbndsX2RzaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQ0KPiArew0KPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRl di0+ZGV2Ow0KPiArwqDCoMKgwqDCoMKgwqBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvZl9p ZCA9DQo+IG9mX21hdGNoX2RldmljZShud2xfZHNpX2R0X2lkcywgZGV2KTsNCj4gK8KgwqDCoMKg wqDCoMKgY29uc3Qgc3RydWN0IG53bF9kc2lfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBvZl9pZC0+ ZGF0YTsNCj4gK8KgwqDCoMKgwqDCoMKgY29uc3Qgc3RydWN0IHNvY19kZXZpY2VfYXR0cmlidXRl ICphdHRyOw0KPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbndsX2RzaSAqZHNpOw0KPiArwqDCoMKg wqDCoMKgwqBpbnQgcmV0Ow0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoGRzaSA9IGRldm1fa3phbGxv YyhkZXYsIHNpemVvZigqZHNpKSwgR0ZQX0tFUk5FTCk7DQo+ICvCoMKgwqDCoMKgwqDCoGlmICgh ZHNpKQ0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FTk9NRU07DQo+ ICsNCj4gK8KgwqDCoMKgwqDCoMKgZHNpLT5kZXYgPSBkZXY7DQo+ICvCoMKgwqDCoMKgwqDCoGRz aS0+cGRhdGEgPSBwZGF0YTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqByZXQgPSBud2xfZHNpX3Bh cnNlX2R0KGRzaSk7DQo+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpDQo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Ow0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoHJldCA9 IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBkc2ktPmlycSwgbndsX2RzaV9pcnFfaGFuZGxlciwgMCwN Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGRldl9uYW1lKGRldiksIGRzaSk7DQo+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAw KSB7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fREVWX0VSUk9SKGRldiwg IkZhaWxlZCB0byByZXF1ZXN0IElSUSAlZDogJWRcbiIsDQo+IGRzaS0+aXJxLA0KPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCk7 DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Ow0KPiArwqDCoMKg wqDCoMKgwqB9DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgZHNpLT5kc2lfaG9zdC5vcHMgPSAmbnds X2RzaV9ob3N0X29wczsNCj4gK8KgwqDCoMKgwqDCoMKgZHNpLT5kc2lfaG9zdC5kZXYgPSBkZXY7 DQo+ICvCoMKgwqDCoMKgwqDCoHJldCA9IG1pcGlfZHNpX2hvc3RfcmVnaXN0ZXIoJmRzaS0+ZHNp X2hvc3QpOw0KPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KSB7DQo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBNSVBJ IGhvc3Q6DQo+ICVkXG4iLCByZXQpOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0dXJuIHJldDsNCj4gK8KgwqDCoMKgwqDCoMKgfQ0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoGF0 dHIgPSBzb2NfZGV2aWNlX21hdGNoKG53bF9kc2lfcXVpcmtzX21hdGNoKTsNCj4gK8KgwqDCoMKg wqDCoMKgaWYgKGF0dHIpDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkc2ktPnF1 aXJrcyA9ICh1aW50cHRyX3QpYXR0ci0+ZGF0YTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBkc2kt PmJyaWRnZS5kcml2ZXJfcHJpdmF0ZSA9IGRzaTsNCj4gK8KgwqDCoMKgwqDCoMKgZHNpLT5icmlk Z2UuZnVuY3MgPSAmbndsX2RzaV9icmlkZ2VfZnVuY3M7DQo+ICvCoMKgwqDCoMKgwqDCoGRzaS0+ YnJpZGdlLm9mX25vZGUgPSBkZXYtPm9mX25vZGU7DQo+ICvCoMKgwqDCoMKgwqDCoGRzaS0+YnJp ZGdlLnRpbWluZ3MgPSAmbndsX2RzaV90aW1pbmdzOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoGRy bV9icmlkZ2VfYWRkKCZkc2ktPmJyaWRnZSk7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgZGV2X3Nl dF9kcnZkYXRhKGRldiwgZHNpKTsNCj4gK8KgwqDCoMKgwqDCoMKgcG1fcnVudGltZV9lbmFibGUo ZGV2KTsNCj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBp bnQgbndsX2RzaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gK3sNCj4g K8KgwqDCoMKgwqDCoMKgc3RydWN0IG53bF9kc2kgKmRzaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRh KHBkZXYpOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoG1pcGlfZHNpX2hvc3RfdW5yZWdpc3Rlcigm ZHNpLT5kc2lfaG9zdCk7DQo+ICvCoMKgwqDCoMKgwqDCoHBtX3J1bnRpbWVfZGlzYWJsZSgmcGRl di0+ZGV2KTsNCj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG53bF9kc2lfZHJpdmVyID0gew0KPiArwqDCoMKgwqDC oMKgwqAucHJvYmXCoMKgwqDCoMKgwqDCoMKgwqDCoD0gbndsX2RzaV9wcm9iZSwNCj4gK8KgwqDC oMKgwqDCoMKgLnJlbW92ZcKgwqDCoMKgwqDCoMKgwqDCoD0gbndsX2RzaV9yZW1vdmUsDQo+ICvC oMKgwqDCoMKgwqDCoC5kcml2ZXLCoMKgwqDCoMKgwqDCoMKgwqA9IHsNCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoC5vZl9tYXRjaF90YWJsZSA9IG53bF9kc2lfZHRfaWRzLA0KPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLm5hbWXCoMKgwqA9IERSVl9OQU1FLA0KPiAr wqDCoMKgwqDCoMKgwqB9LA0KPiArfTsNCj4gKw0KPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihu d2xfZHNpX2RyaXZlcik7DQo+ICsNCj4gK01PRFVMRV9BVVRIT1IoIk5YUCBTZW1pY29uZHVjdG9y Iik7DQo+ICtNT0RVTEVfQVVUSE9SKCJQdXJpc20gU1BDIik7DQo+ICtNT0RVTEVfREVTQ1JJUFRJ T04oIk5vcnRod2VzdCBMb2dpYyBNSVBJLURTSSBkcml2ZXIiKTsNCj4gK01PRFVMRV9MSUNFTlNF KCJHUEwiKTsgLyogR1BMdjIgb3IgbGF0ZXIgKi8NCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9icmlkZ2UvbndsLWRzaS9ud2wtZHJ2LmgNCj4gYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdl L253bC1kc2kvbndsLWRydi5oDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAw MDAwMDAwMC4uMWU3MmE5MjIxNDAxDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2JyaWRnZS9ud2wtZHNpL253bC1kcnYuaA0KPiBAQCAtMCwwICsxLDY1IEBADQo+ICsv KiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsgKi8NCj4gKy8qDQo+ICsgKiBOV0wg TUlQSSBEU0kgaG9zdCBkcml2ZXINCj4gKyAqDQo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTcgTlhQ DQo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTkgUHVyaXNtIFNQQw0KPiArICovDQo+ICsNCj4gKyNp Zm5kZWYgX19OV0xfRFJWX0hfXw0KPiArI2RlZmluZSBfX05XTF9EUlZfSF9fDQo+ICsNCj4gKyNp bmNsdWRlIDxsaW51eC9tdXgvY29uc3VtZXIuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9waHkvcGh5 Lmg+DQo+ICsNCj4gKyNpbmNsdWRlIDxkcm0vZHJtX2JyaWRnZS5oPg0KPiArI2luY2x1ZGUgPGRy bS9kcm1fbWlwaV9kc2kuaD4NCj4gKw0KPiArc3RydWN0IG53bF9kc2lfcGxhdGZvcm1fZGF0YTsN Cj4gKw0KPiArLyogaS5NWDggTldMIHF1aXJrcyAqLw0KPiArLyogaS5NWDhNUSBlcnJhdGEgRTEx NDE4ICovDQo+ICsjZGVmaW5lIEUxMTQxOF9IU19NT0RFX1FVSVJLwqDCoMKgwqDCoMKgwqBCSVQo MCkNCj4gKy8qIFNraXAgRFNJIGJpdHMgaW4gU1JDIG9uIGRpc2FibGUgdG8gYXZvaWQgYmxhbmsg ZGlzcGxheSBvbiBlbmFibGUNCj4gKi8NCj4gKyNkZWZpbmUgU1JDX1JFU0VUX1FVSVJLwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCgxKQ0KPiArDQo+ICsjZGVmaW5l IE5XTF9EU0lfTUFYX1BMQVRGT1JNX0NMT0NLUyAxDQo+ICtzdHJ1Y3QgbndsX2RzaV9wbGF0X2Ns a19jb25maWcgew0KPiArwqDCoMKgwqDCoMKgwqBjb25zdCBjaGFyICppZDsNCj4gK8KgwqDCoMKg wqDCoMKgc3RydWN0IGNsayAqY2xrOw0KPiArwqDCoMKgwqDCoMKgwqBib29sIHByZXNlbnQ7DQo+ ICt9Ow0KPiArDQo+ICtzdHJ1Y3QgbndsX2RzaSB7DQo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBk cm1fYnJpZGdlIGJyaWRnZTsNCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG1pcGlfZHNpX2hvc3Qg ZHNpX2hvc3Q7DQo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fYnJpZGdlICpwYW5lbF9icmlk Z2U7DQo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkZXZpY2UgKmRldjsNCj4gK8KgwqDCoMKgwqDC oMKgc3RydWN0IHBoeSAqcGh5Ow0KPiArwqDCoMKgwqDCoMKgwqB1bmlvbiBwaHlfY29uZmlndXJl X29wdHMgcGh5X2NmZzsNCj4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQgaW50IHF1aXJrczsNCj4g Kw0KPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7DQo+ICvCoMKgwqDCoMKg wqDCoGludCBpcnE7DQo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCByZXNldF9jb250cm9sICpyc3Rj Ow0KPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbXV4X2NvbnRyb2wgKm11eDsNCj4gKw0KPiArwqDC oMKgwqDCoMKgwqAvKiBEU0kgY2xvY2tzICovDQo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBjbGsg KnBoeV9yZWZfY2xrOw0KPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgY2xrICpyeF9lc2NfY2xrOw0K PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgY2xrICp0eF9lc2NfY2xrOw0KPiArwqDCoMKgwqDCoMKg wqAvKiBQbGF0Zm9ybSBkZXBlbmRlbnQgY2xvY2tzICovDQo+ICvCoMKgwqDCoMKgwqDCoHN0cnVj dCBud2xfZHNpX3BsYXRfY2xrX2NvbmZpZw0KPiBjbGtfY29uZmlnW05XTF9EU0lfTUFYX1BMQVRG T1JNX0NMT0NLU107DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgLyogZHNpIGxhbmVzICovDQo+ICvC oMKgwqDCoMKgwqDCoHUzMiBsYW5lczsNCj4gK8KgwqDCoMKgwqDCoMKgZW51bSBtaXBpX2RzaV9w aXhlbF9mb3JtYXQgZm9ybWF0Ow0KPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSBtb2RlOw0KPiArwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBsb25nIGRzaV9tb2RlX2ZsYWdz Ow0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBud2xfZHNpX3RyYW5zZmVyICp4ZmVyOw0K PiArDQo+ICvCoMKgwqDCoMKgwqDCoGNvbnN0IHN0cnVjdCBud2xfZHNpX3BsYXRmb3JtX2RhdGEg KnBkYXRhOw0KPiArfTsNCj4gKw0KPiArI2VuZGlmIC8qIF9fTldMX0RSVl9IX18gKi8NCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRzaS9ud2wtZHNpLmMNCj4gYi9k cml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kvbndsLWRzaS5jDQo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZmQwMzBhZjU1YmI0DQo+IC0tLSAvZGV2L251 bGwNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpL253bC1kc2kuYw0KPiBA QCAtMCwwICsxLDcwMCBAQA0KPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAr DQo+ICsvKg0KPiArICogTldMIE1JUEkgRFNJIGhvc3QgZHJpdmVyDQo+ICsgKg0KPiArICogQ29w eXJpZ2h0IChDKSAyMDE3IE5YUA0KPiArICogQ29weXJpZ2h0IChDKSAyMDE5IFB1cmlzbSBTUEMN Cj4gKyAqLw0KPiArDQo+ICsjaW5jbHVkZSA8bGludXgvYml0ZmllbGQuaD4NCj4gKyNpbmNsdWRl IDxsaW51eC9jbGsuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4NCj4gKyNpbmNsdWRlIDxs aW51eC9yZWdtYXAuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC90aW1lNjQuaD4NCj4gKw0KPiArI2lu Y2x1ZGUgPHZpZGVvL21pcGlfZGlzcGxheS5oPg0KPiArI2luY2x1ZGUgPHZpZGVvL3ZpZGVvbW9k ZS5oPg0KPiArDQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+DQo+ICsjaW5j bHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPg0KPiArI2luY2x1ZGUgPGRybS9kcm1fb2YuaD4N Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+DQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9wcmlu dC5oPg0KPiArDQo+ICsjaW5jbHVkZSAibndsLWRydi5oIg0KPiArI2luY2x1ZGUgIm53bC1kc2ku aCINCj4gKw0KPiArI2RlZmluZSBOV0xfRFNJX01JUElfRklGT19USU1FT1VUIG1zZWNzX3RvX2pp ZmZpZXMoNTAwKQ0KPiArDQo+ICsvKg0KPiArICogUEtUX0NPTlRST0wgZm9ybWF0Og0KPiArICog WzE1OiAwXSAtIHdvcmQgY291bnQNCj4gKyAqIFsxNzoxNl0gLSB2aXJ0dWFsIGNoYW5uZWwNCj4g KyAqIFsyMzoxOF0gLSBkYXRhIHR5cGUNCj4gKyAqIFsyNF3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg LSBMUCBvciBIUyBzZWxlY3QgKDAgLSBMUCwgMSAtIEhTKQ0KPiArICogWzI1XcKgwqDCoMKgwqDC oMKgwqDCoMKgwqAtIHBlcmZvcm0gQlRBIGFmdGVyIHBhY2tldCBpcyBzZW50DQo+ICsgKiBbMjZd wqDCoMKgwqDCoMKgwqDCoMKgwqDCoC0gcGVyZm9ybSBCVEEgb25seSwgbm8gcGFja2V0IHR4DQo+ ICsgKi8NCj4gKyNkZWZpbmUgTldMX0RTSV9XQyh4KcKgwqDCoMKgwqDCoMKgwqDCoMKgRklFTERf UFJFUChHRU5NQVNLKDE1LCAwKSwgKHgpKQ0KPiArI2RlZmluZSBOV0xfRFNJX1RYX1ZDKHgpwqDC oMKgwqDCoMKgwqBGSUVMRF9QUkVQKEdFTk1BU0soMTcsIDE2KSwgKHgpKQ0KPiArI2RlZmluZSBO V0xfRFNJX1RYX0RUKHgpwqDCoMKgwqDCoMKgwqBGSUVMRF9QUkVQKEdFTk1BU0soMjMsIDE4KSwg KHgpKQ0KPiArI2RlZmluZSBOV0xfRFNJX0hTX1NFTCh4KcKgwqDCoMKgwqDCoEZJRUxEX1BSRVAo R0VOTUFTSygyNCwgMjQpLCAoeCkpDQo+ICsjZGVmaW5lIE5XTF9EU0lfQlRBX1RYKHgpwqDCoMKg wqDCoMKgRklFTERfUFJFUChHRU5NQVNLKDI1LCAyNSksICh4KSkNCj4gKyNkZWZpbmUgTldMX0RT SV9CVEFfTk9fVFgoeCnCoMKgwqBGSUVMRF9QUkVQKEdFTk1BU0soMjYsIDI2KSwgKHgpKQ0KPiAr DQo+ICsvKg0KPiArICogUlhfUEtUX0hFQURFUiBmb3JtYXQ6DQo+ICsgKiBbMTU6IDBdIC0gd29y ZCBjb3VudA0KPiArICogWzIxOjE2XSAtIGRhdGEgdHlwZQ0KPiArICogWzIzOjIyXSAtIHZpcnR1 YWwgY2hhbm5lbA0KPiArICovDQo+ICsjZGVmaW5lIE5XTF9EU0lfUlhfRFQoeCnCoMKgwqDCoMKg wqDCoEZJRUxEX0dFVChHRU5NQVNLKDIxLCAxNiksICh4KSkNCj4gKyNkZWZpbmUgTldMX0RTSV9S WF9WQyh4KcKgwqDCoMKgwqDCoMKgRklFTERfR0VUKEdFTk1BU0soMjMsIDIyKSwgKHgpKQ0KPiAr DQo+ICsvKiBEU0kgVmlkZW8gbW9kZSAqLw0KPiArI2RlZmluZSBOV0xfRFNJX1ZNX0JVUlNUX01P REVfV0lUSF9TWU5DX1BVTFNFU8KgwqDCoMKgwqDCoMKgwqDCoDANCj4gKyNkZWZpbmUgTldMX0RT SV9WTV9OT05fQlVSU1RfTU9ERV9XSVRIX1NZTkNfRVZFTlRTwqDCoMKgwqDCoEJJVCgwKQ0KPiAr I2RlZmluZSBOV0xfRFNJX1ZNX0JVUlNUX01PREXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDEpDQo+ICsNCj4gKy8qICogRFBJIGNvbG9yIGNv ZGluZyAqLw0KPiArI2RlZmluZSBOV0xfRFNJX0RQSV8xNl9CSVRfNTY1X1BBQ0tFRMKgwqAwDQo+ ICsjZGVmaW5lIE5XTF9EU0lfRFBJXzE2X0JJVF81NjVfQUxJR05FRCAxDQo+ICsjZGVmaW5lIE5X TF9EU0lfRFBJXzE2X0JJVF81NjVfU0hJRlRFRCAyDQo+ICsjZGVmaW5lIE5XTF9EU0lfRFBJXzE4 X0JJVF9QQUNLRUTCoMKgwqDCoMKgwqAzDQo+ICsjZGVmaW5lIE5XTF9EU0lfRFBJXzE4X0JJVF9B TElHTkVEwqDCoMKgwqDCoDQNCj4gKyNkZWZpbmUgTldMX0RTSV9EUElfMjRfQklUwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqA1DQo+ICsNCj4gKy8qICogRFBJIFBpeGVsIGZvcm1hdCAqLw0KPiAr I2RlZmluZSBOV0xfRFNJX1BJWEVMX0ZPUk1BVF8xNsKgwqAwDQo+ICsjZGVmaW5lIE5XTF9EU0lf UElYRUxfRk9STUFUXzE4wqDCoEJJVCgwKQ0KPiArI2RlZmluZSBOV0xfRFNJX1BJWEVMX0ZPUk1B VF8xOEwgQklUKDEpDQo+ICsjZGVmaW5lIE5XTF9EU0lfUElYRUxfRk9STUFUXzI0wqDCoChCSVQo MCkgfCBCSVQoMSkpDQo+ICsNCj4gK2VudW0gdHJhbnNmZXJfZGlyZWN0aW9uIHsNCj4gK8KgwqDC oMKgwqDCoMKgRFNJX1BBQ0tFVF9TRU5ELA0KPiArwqDCoMKgwqDCoMKgwqBEU0lfUEFDS0VUX1JF Q0VJVkUsDQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3QgbndsX2RzaV90cmFuc2ZlciB7DQo+ICvCoMKg wqDCoMKgwqDCoGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9tc2cgKm1zZzsNCj4gK8KgwqDCoMKgwqDC oMKgc3RydWN0IG1pcGlfZHNpX3BhY2tldCBwYWNrZXQ7DQo+ICvCoMKgwqDCoMKgwqDCoHN0cnVj dCBjb21wbGV0aW9uIGNvbXBsZXRlZDsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBpbnQgc3RhdHVz OyAvKiBzdGF0dXMgb2YgdHJhbnNtaXNzaW9uICovDQo+ICvCoMKgwqDCoMKgwqDCoGVudW0gdHJh bnNmZXJfZGlyZWN0aW9uIGRpcmVjdGlvbjsNCj4gK8KgwqDCoMKgwqDCoMKgYm9vbCBuZWVkX2J0 YTsNCj4gK8KgwqDCoMKgwqDCoMKgdTggY21kOw0KPiArwqDCoMKgwqDCoMKgwqB1MTYgcnhfd29y ZF9jb3VudDsNCj4gK8KgwqDCoMKgwqDCoMKgc2l6ZV90IHR4X2xlbjsgLyogaW4gYnl0ZXMgKi8N Cj4gK8KgwqDCoMKgwqDCoMKgc2l6ZV90IHJ4X2xlbjsgLyogaW4gYnl0ZXMgKi8NCj4gK307DQo+ ICsNCj4gK3N0YXRpYyBpbnQgbndsX2RzaV93cml0ZShzdHJ1Y3QgbndsX2RzaSAqZHNpLCB1bnNp Z25lZCBpbnQgcmVnLCB1MzINCj4gdmFsKQ0KPiArew0KPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0 Ow0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoHJldCA9IHJlZ21hcF93cml0ZShkc2ktPnJlZ21hcCwg cmVnLCB2YWwpOw0KPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0IDwgMCkNCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfRVJST1IoZHNpLT5kZXYsDQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIkZhaWxlZCB0 byB3cml0ZSBOV0wgRFNJIHJlZyAweCV4Og0KPiAlZFxuIiwgcmVnLA0KPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCk7DQo+ICvC oMKgwqDCoMKgwqDCoHJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB1MzIgbndsX2Rz aV9yZWFkKHN0cnVjdCBud2xfZHNpICpkc2ksIHUzMiByZWcpDQo+ICt7DQo+ICvCoMKgwqDCoMKg wqDCoHVuc2lnbmVkIGludCB2YWw7DQo+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7DQo+ICsNCj4g K8KgwqDCoMKgwqDCoMKgcmV0ID0gcmVnbWFwX3JlYWQoZHNpLT5yZWdtYXAsIHJlZywgJnZhbCk7 DQo+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKQ0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byByZWFkIE5XTCBEU0kg cmVnDQo+IDB4JXg6ICVkXG4iLA0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJlZywgcmV0KTsNCj4gKw0KPiArwqDCoMKgwqDCoMKg wqByZXR1cm4gdmFsOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdTMyIG53bF9kc2lfZ2V0X2RwaV9w aXhlbF9mb3JtYXQoZW51bSBtaXBpX2RzaV9waXhlbF9mb3JtYXQNCj4gZm9ybWF0KQ0KPiArew0K PiArwqDCoMKgwqDCoMKgwqBzd2l0Y2ggKGZvcm1hdCkgew0KPiArwqDCoMKgwqDCoMKgwqBjYXNl IE1JUElfRFNJX0ZNVF9SR0I1NjU6DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gTldMX0RTSV9QSVhFTF9GT1JNQVRfMTY7DQo+ICvCoMKgwqDCoMKgwqDCoGNhc2UgTUlQ SV9EU0lfRk1UX1JHQjY2NjoNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy biBOV0xfRFNJX1BJWEVMX0ZPUk1BVF8xOEw7DQo+ICvCoMKgwqDCoMKgwqDCoGNhc2UgTUlQSV9E U0lfRk1UX1JHQjY2Nl9QQUNLRUQ6DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gTldMX0RTSV9QSVhFTF9GT1JNQVRfMTg7DQo+ICvCoMKgwqDCoMKgwqDCoGNhc2UgTUlQ SV9EU0lfRk1UX1JHQjg4ODoNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy biBOV0xfRFNJX1BJWEVMX0ZPUk1BVF8yNDsNCj4gK8KgwqDCoMKgwqDCoMKgZGVmYXVsdDoNCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUlOVkFMOw0KPiArwqDCoMKg wqDCoMKgwqB9DQo+ICt9DQo+ICsNCj4gKyNkZWZpbmUgUFNFQ19QRVJfU0VDIDEwMDAwMDAwMDAw MDBMTA0KPiArLyoNCj4gKyAqIHBzMmJjIC0gUGljb3NlY29uZHMgdG8gYnl0ZSBjbG9jayBjeWNs ZXMNCj4gKyAqLw0KPiArc3RhdGljIHUzMiBwczJiYyhzdHJ1Y3QgbndsX2RzaSAqZHNpLCB1bnNp Z25lZCBsb25nIGxvbmcgcHMpDQo+ICt7DQo+ICvCoMKgwqDCoMKgwqDCoGludCBicHAgPSBtaXBp X2RzaV9waXhlbF9mb3JtYXRfdG9fYnBwKGRzaS0+Zm9ybWF0KTsNCj4gKw0KPiArwqDCoMKgwqDC oMKgwqByZXR1cm4gRElWX1JPVU5EX1VQKHBzICogZHNpLT5tb2RlLmNsb2NrICogMTAwMCAqIGJw cCwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGRzaS0+bGFuZXMgKiA4ICogUFNFQ19QRVJfU0VDKTsNCj4gK30NCj4gKw0KPiArLyoNCj4g KyAqIHVpMmJjIC0gVUkgdGltZSBwZXJpb2RzIHRvIGJ5dGUgY2xvY2sgY3ljbGVzDQo+ICsgKi8N Cj4gK3N0YXRpYyB1MzIgdWkyYmMoc3RydWN0IG53bF9kc2kgKmRzaSwgdW5zaWduZWQgbG9uZyBs b25nIHVpKQ0KPiArew0KPiArwqDCoMKgwqDCoMKgwqBpbnQgYnBwID0gbWlwaV9kc2lfcGl4ZWxf Zm9ybWF0X3RvX2JwcChkc2ktPmZvcm1hdCk7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJu IERJVl9ST1VORF9VUCh1aSAqIGRzaS0+bGFuZXMsIGRzaS0+bW9kZS5jbG9jayAqIDEwMDAgKg0K PiBicHApOw0KPiArfQ0KPiArDQo+ICsvKg0KPiArICogdXMyYmMgLSBtaWNybyBzZWNvbmRzIHRv IGxwIGNsb2NrIGN5Y2xlcw0KPiArICovDQo+ICtzdGF0aWMgdTMyIHVzMmxwKHUzMiBscF9jbGtf cmF0ZSwgdW5zaWduZWQgbG9uZyB1cykNCj4gK3sNCj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIERJ Vl9ST1VORF9VUCh1cyAqIGxwX2Nsa19yYXRlLCBVU0VDX1BFUl9TRUMpOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgaW50IG53bF9kc2lfY29uZmlnX2hvc3Qoc3RydWN0IG53bF9kc2kgKmRzaSkNCj4g K3sNCj4gK8KgwqDCoMKgwqDCoMKgdTMyIGN5Y2xlczsNCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0 IHBoeV9jb25maWd1cmVfb3B0c19taXBpX2RwaHkgKmNmZyA9ICZkc2ktDQo+ID5waHlfY2ZnLm1p cGlfZHBoeTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBpZiAoZHNpLT5sYW5lcyA8IDEgfHwgZHNp LT5sYW5lcyA+IDQpDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJ TlZBTDsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRl diwgIkRTSSBMYW5lcyAlZFxuIiwgZHNpLT5sYW5lcyk7DQo+ICvCoMKgwqDCoMKgwqDCoG53bF9k c2lfd3JpdGUoZHNpLCBOV0xfRFNJX0NGR19OVU1fTEFORVMsIGRzaS0+bGFuZXMgLSAxKTsNCj4g Kw0KPiArwqDCoMKgwqDCoMKgwqBpZiAoZHNpLT5kc2lfbW9kZV9mbGFncyAmIE1JUElfRFNJX0NM T0NLX05PTl9DT05USU5VT1VTKSB7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBu d2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9DRkdfTk9OQ09OVElOVU9VU19DTEssDQo+IDB4MDEp Ow0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5X TF9EU0lfQ0ZHX0FVVE9JTlNFUlRfRU9UUCwNCj4gMHgwMSk7DQo+ICvCoMKgwqDCoMKgwqDCoH0g ZWxzZSB7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRz aSwgTldMX0RTSV9DRkdfTk9OQ09OVElOVU9VU19DTEssDQo+IDB4MDApOw0KPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfQ0ZHX0FVVE9J TlNFUlRfRU9UUCwNCj4gMHgwMCk7DQo+ICvCoMKgwqDCoMKgwqDCoH0NCj4gKw0KPiArwqDCoMKg wqDCoMKgwqAvKiB2YWx1ZXMgaW4gYnl0ZSBjbG9jayBjeWNsZXMgKi8NCj4gK8KgwqDCoMKgwqDC oMKgY3ljbGVzID0gdWkyYmMoZHNpLCBjZmctPmNsa19wcmUpOw0KPiArwqDCoMKgwqDCoMKgwqBE Uk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgImNmZ190X3ByZTogMHgleFxuIiwgY3ljbGVz KTsNCj4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfQ0ZHX1RfUFJF LCBjeWNsZXMpOw0KPiArwqDCoMKgwqDCoMKgwqBjeWNsZXMgPSBwczJiYyhkc2ksIGNmZy0+bHB4 ICsgY2ZnLT5jbGtfcHJlcGFyZSArIGNmZy0NCj4gPmNsa196ZXJvKTsNCj4gK8KgwqDCoMKgwqDC oMKgRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJjZmdfdHhfZ2FwIChwcmUpOiAweCV4 XG4iLA0KPiBjeWNsZXMpOw0KPiArwqDCoMKgwqDCoMKgwqBjeWNsZXMgKz0gdWkyYmMoZHNpLCBj ZmctPmNsa19wcmUpOw0KPiArwqDCoMKgwqDCoMKgwqBEUk1fREVWX0RFQlVHX0RSSVZFUihkc2kt PmRldiwgImNmZ190eF9nYXA6IDB4JXhcbiIsIGN5Y2xlcyk7DQo+ICvCoMKgwqDCoMKgwqDCoG53 bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0NGR19UX1BPU1QsIGN5Y2xlcyk7DQo+ICvCoMKgwqDC oMKgwqDCoGN5Y2xlcyA9IHBzMmJjKGRzaSwgY2ZnLT5oc19leGl0KTsNCj4gK8KgwqDCoMKgwqDC oMKgRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJjZmdfdHhfZ2FwOiAweCV4XG4iLCBj eWNsZXMpOw0KPiArwqDCoMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9DRkdf VFhfR0FQLCBjeWNsZXMpOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoG53bF9kc2lfd3JpdGUoZHNp LCBOV0xfRFNJX0NGR19FWFRSQV9DTURTX0FGVEVSX0VPVFAsIDB4MDEpOw0KPiArwqDCoMKgwqDC oMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9DRkdfSFRYX1RPX0NPVU5ULCAweDAwKTsN Cj4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfQ0ZHX0xSWF9IX1RP X0NPVU5ULCAweDAwKTsNCj4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9E U0lfQ0ZHX0JUQV9IX1RPX0NPVU5ULCAweDAwKTsNCj4gK8KgwqDCoMKgwqDCoMKgLyogSW4gTFAg Y2xvY2sgY3ljbGVzICovDQo+ICvCoMKgwqDCoMKgwqDCoGN5Y2xlcyA9IHVzMmxwKGNmZy0+bHBf Y2xrX3JhdGUsIGNmZy0+d2FrZXVwKTsNCj4gK8KgwqDCoMKgwqDCoMKgRFJNX0RFVl9ERUJVR19E UklWRVIoZHNpLT5kZXYsICJjZmdfdHdha2V1cDogMHgleFxuIiwNCj4gY3ljbGVzKTsNCj4gK8Kg wqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfQ0ZHX1RXQUtFVVAsIGN5Y2xl cyk7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyBpbnQgbndsX2RzaV9jb25maWdfZHBpKHN0cnVjdCBud2xfZHNpICpkc2kpDQo+ICt7DQo+ICvC oMKgwqDCoMKgwqDCoHUzMiBjb2xvcl9mb3JtYXQsIG1vZGU7DQo+ICvCoMKgwqDCoMKgwqDCoGJv b2wgYnVyc3RfbW9kZTsNCj4gK8KgwqDCoMKgwqDCoMKgaW50IGhmcm9udF9wb3JjaCwgaGJhY2tf cG9yY2gsIHZmcm9udF9wb3JjaCwgdmJhY2tfcG9yY2g7DQo+ICvCoMKgwqDCoMKgwqDCoGludCBo c3luY19sZW4sIHZzeW5jX2xlbjsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBoZnJvbnRfcG9yY2gg PSBkc2ktPm1vZGUuaHN5bmNfc3RhcnQgLSBkc2ktPm1vZGUuaGRpc3BsYXk7DQo+ICvCoMKgwqDC oMKgwqDCoGhzeW5jX2xlbiA9IGRzaS0+bW9kZS5oc3luY19lbmQgLSBkc2ktPm1vZGUuaHN5bmNf c3RhcnQ7DQo+ICvCoMKgwqDCoMKgwqDCoGhiYWNrX3BvcmNoID0gZHNpLT5tb2RlLmh0b3RhbCAt IGRzaS0+bW9kZS5oc3luY19lbmQ7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgdmZyb250X3BvcmNo ID0gZHNpLT5tb2RlLnZzeW5jX3N0YXJ0IC0gZHNpLT5tb2RlLnZkaXNwbGF5Ow0KPiArwqDCoMKg wqDCoMKgwqB2c3luY19sZW4gPSBkc2ktPm1vZGUudnN5bmNfZW5kIC0gZHNpLT5tb2RlLnZzeW5j X3N0YXJ0Ow0KPiArwqDCoMKgwqDCoMKgwqB2YmFja19wb3JjaCA9IGRzaS0+bW9kZS52dG90YWwg LSBkc2ktPm1vZGUudnN5bmNfZW5kOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoERSTV9ERVZfREVC VUdfRFJJVkVSKGRzaS0+ZGV2LCAiaGZyb250X3BvcmNoID0gJWRcbiIsDQo+IGhmcm9udF9wb3Jj aCk7DQo+ICvCoMKgwqDCoMKgwqDCoERSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAiaGJh Y2tfcG9yY2ggPSAlZFxuIiwNCj4gaGJhY2tfcG9yY2gpOw0KPiArwqDCoMKgwqDCoMKgwqBEUk1f REVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgImhzeW5jX2xlbiA9ICVkXG4iLA0KPiBoc3luY19s ZW4pOw0KPiArwqDCoMKgwqDCoMKgwqBEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgImhk aXNwbGF5ID0gJWRcbiIsIGRzaS0NCj4gPm1vZGUuaGRpc3BsYXkpOw0KPiArwqDCoMKgwqDCoMKg wqBEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgInZmcm9udF9wb3JjaCA9ICVkXG4iLA0K PiB2ZnJvbnRfcG9yY2gpOw0KPiArwqDCoMKgwqDCoMKgwqBEUk1fREVWX0RFQlVHX0RSSVZFUihk c2ktPmRldiwgInZiYWNrX3BvcmNoID0gJWRcbiIsDQo+IHZiYWNrX3BvcmNoKTsNCj4gK8KgwqDC oMKgwqDCoMKgRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJ2c3luY19sZW4gPSAlZFxu IiwNCj4gdnN5bmNfbGVuKTsNCj4gK8KgwqDCoMKgwqDCoMKgRFJNX0RFVl9ERUJVR19EUklWRVIo ZHNpLT5kZXYsICJ2YWN0aXZlID0gJWRcbiIsIGRzaS0NCj4gPm1vZGUudmRpc3BsYXkpOw0KPiAr wqDCoMKgwqDCoMKgwqBEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgImNsb2NrID0gJWQg a0h6XG4iLCBkc2ktDQo+ID5tb2RlLmNsb2NrKTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBjb2xv cl9mb3JtYXQgPSBud2xfZHNpX2dldF9kcGlfcGl4ZWxfZm9ybWF0KGRzaS0+Zm9ybWF0KTsNCj4g K8KgwqDCoMKgwqDCoMKgaWYgKGNvbG9yX2Zvcm1hdCA8IDApIHsNCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJJbnZhbGlkIGNvbG9yIGZv cm1hdA0KPiAweCV4XG4iLA0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRzaS0+Zm9ybWF0KTsNCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldHVybiBjb2xvcl9mb3JtYXQ7DQo+ICvCoMKgwqDCoMKgwqDCoH0NCj4g K8KgwqDCoMKgwqDCoMKgRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJwaXhlbCBmbXQg PSAlZFxuIiwgZHNpLQ0KPiA+Zm9ybWF0KTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBud2xfZHNp X3dyaXRlKGRzaSwgTldMX0RTSV9JTlRFUkZBQ0VfQ09MT1JfQ09ESU5HLA0KPiBOV0xfRFNJX0RQ SV8yNF9CSVQpOw0KPiArwqDCoMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9Q SVhFTF9GT1JNQVQsIGNvbG9yX2Zvcm1hdCk7DQo+ICvCoMKgwqDCoMKgwqDCoC8qDQo+ICvCoMKg wqDCoMKgwqDCoMKgKiBBZGp1c3RpbmcgaW5wdXQgcG9sYXJpdHkgYmFzZWQgb24gdGhlIHZpZGVv IG1vZGUgcmVzdWx0cw0KPiBpbg0KPiArwqDCoMKgwqDCoMKgwqDCoCogYSBibGFjayBzY3JlZW4g c28gYWx3YXlzIHBpY2sgYWN0aXZlIGxvdzoNCj4gK8KgwqDCoMKgwqDCoMKgwqAqLw0KPiArwqDC oMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9WU1lOQ19QT0xBUklUWSwNCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoE5XTF9EU0lfVlNZTkNf UE9MQVJJVFlfQUNUSVZFX0xPVyk7DQo+ICvCoMKgwqDCoMKgwqDCoG53bF9kc2lfd3JpdGUoZHNp LCBOV0xfRFNJX0hTWU5DX1BPTEFSSVRZLA0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgTldMX0RTSV9IU1lOQ19QT0xBUklUWV9BQ1RJVkVfTE9XKTsNCj4gKw0K PiArwqDCoMKgwqDCoMKgwqBidXJzdF9tb2RlID0gKGRzaS0+ZHNpX21vZGVfZmxhZ3MgJg0KPiBN SVBJX0RTSV9NT0RFX1ZJREVPX0JVUlNUKSAmJg0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCEoZHNpLT5kc2lfbW9kZV9mbGFncyAmDQo+IE1JUElfRFNJX01PREVf VklERU9fU1lOQ19QVUxTRSk7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgaWYgKGJ1cnN0X21vZGUp IHsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG53bF9kc2lfd3JpdGUoZHNpLCBO V0xfRFNJX1ZJREVPX01PREUsDQo+IE5XTF9EU0lfVk1fQlVSU1RfTU9ERSk7DQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9QSVhFTF9G SUZPX1NFTkRfTEVWRUwsDQo+IDI1Nik7DQo+ICvCoMKgwqDCoMKgwqDCoH0gZWxzZSB7DQo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtb2RlID0gKChkc2ktPmRzaV9tb2RlX2ZsYWdz ICYNCj4gTUlQSV9EU0lfTU9ERV9WSURFT19TWU5DX1BVTFNFKSA/DQo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoE5XTF9EU0lf Vk1fQlVSU1RfTU9ERV9XSVRIX1NZTkNfUFVMU0UNCj4gUyA6DQo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoE5XTF9EU0lfVk1f Tk9OX0JVUlNUX01PREVfV0lUSF9TWU5DX0UNCj4gVkVOVFMpOw0KPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfVklERU9fTU9ERSwgbW9k ZSk7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwg TldMX0RTSV9QSVhFTF9GSUZPX1NFTkRfTEVWRUwsDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHNpLT5tb2RlLmhkaXNwbGF5KTsN Cj4gK8KgwqDCoMKgwqDCoMKgfQ0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoG53bF9kc2lfd3JpdGUo ZHNpLCBOV0xfRFNJX0hGUCwgaGZyb250X3BvcmNoKTsNCj4gK8KgwqDCoMKgwqDCoMKgbndsX2Rz aV93cml0ZShkc2ksIE5XTF9EU0lfSEJQLCBoYmFja19wb3JjaCk7DQo+ICvCoMKgwqDCoMKgwqDC oG53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0hTQSwgaHN5bmNfbGVuKTsNCj4gKw0KPiArwqDC oMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9FTkFCTEVfTVVMVF9QS1RTLCAw eDApOw0KPiArwqDCoMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9CTExQX01P REUsIDB4MSk7DQo+ICvCoMKgwqDCoMKgwqDCoG53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0VO QUJMRV9NVUxUX1BLVFMsIDB4MCk7DQpOV0xfRFNJX0VOQUJMRV9NVUxUX1BLVFMgaXMgd3JpdHRl biB0d2ljZSwgYnkgbWlzdGFrZSwgc28gcmVtb3ZlIHRoaXMNCmxpbmUuIEkgZGlkIHRoZSBzYW1l IG1pc3Rha2Ugb24gTlhQIHRyZWUsIEkgdGhpbmsgeW91IGdvdCBpdCBmcm9tIHRoZXJlDQo6KQ0K PiArwqDCoMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9VU0VfTlVMTF9QS1Rf QkxMUCwgMHgwKTsNCj4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lf VkMsIDB4MCk7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9E U0lfUElYRUxfUEFZTE9BRF9TSVpFLCBkc2ktDQo+ID5tb2RlLmhkaXNwbGF5KTsNCj4gK8KgwqDC oMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfVkFDVElWRSwgZHNpLT5tb2RlLnZk aXNwbGF5IC0gMSk7DQpWQUNUSVZFIHNob2xkIGNvbnRhaW4gdGhlIG51bWJlciBvZiBsaW5lcyBp biB0aGUgdmVydGljYWwgYXJlYS4gIi0xIg0Kc3VidHJhY3Rpb24gd2FzIGFjdHVhbGx5IHdyb25n Lg0KPiArwqDCoMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9WQlAsIHZiYWNr X3BvcmNoKTsNCj4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfVkZQ LCB2ZnJvbnRfcG9yY2gpOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgdm9pZCBud2xfZHNpX2luaXRfaW50ZXJydXB0cyhzdHJ1Y3QgbndsX2Rz aSAqZHNpKQ0KPiArew0KPiArwqDCoMKgwqDCoMKgwqB1MzIgaXJxX2VuYWJsZTsNCj4gKw0KPiAr wqDCoMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9JUlFfTUFTSywgMHhmZmZm ZmZmZik7DQo+ICvCoMKgwqDCoMKgwqDCoG53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0lSUV9N QVNLMiwgMHg3KTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBpcnFfZW5hYmxlID0gfih1MzIpKE5X TF9EU0lfVFhfUEtUX0RPTkVfTUFTSyB8DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBOV0xfRFNJX1JYX1BLVF9IRFJfUkNWRF9NQVNLIHwN Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oE5XTF9EU0lfVFhfRklGT19PVkZMV19NQVNLIHwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoE5XTF9EU0lfSFNfVFhfVElNRU9VVF9NQVNL KTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9JUlFf TUFTSywgaXJxX2VuYWJsZSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgbndsX2RzaV9ob3N0 X2F0dGFjaChzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqZHNpX2hvc3QsDQo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbWlw aV9kc2lfZGV2aWNlICpkZXZpY2UpDQo+ICt7DQo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBud2xf ZHNpICpkc2kgPSBjb250YWluZXJfb2YoZHNpX2hvc3QsIHN0cnVjdCBud2xfZHNpLA0KPiBkc2lf aG9zdCk7DQo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkZXZpY2UgKmRldiA9IGRzaS0+ZGV2Ow0K PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlOw0KPiArwqDCoMKgwqDC oMKgwqBzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbDsNCj4gK8KgwqDCoMKgwqDCoMKgaW50IHJldDsN Cj4gKw0KPiArwqDCoMKgwqDCoMKgwqBEUk1fREVWX0lORk8oZGV2LCAibGFuZXM9JXUsIGZvcm1h dD0weCV4IGZsYWdzPTB4JWx4XG4iLA0KPiBkZXZpY2UtPmxhbmVzLA0KPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldmljZS0+Zm9ybWF0LCBkZXZpY2UtPm1vZGVf ZmxhZ3MpOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoGlmIChkZXZpY2UtPmxhbmVzIDwgMSB8fCBk ZXZpY2UtPmxhbmVzID4gNCkNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy biAtRUlOVkFMOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoGRzaS0+bGFuZXMgPSBkZXZpY2UtPmxh bmVzOw0KPiArwqDCoMKgwqDCoMKgwqBkc2ktPmZvcm1hdCA9IGRldmljZS0+Zm9ybWF0Ow0KPiAr wqDCoMKgwqDCoMKgwqBkc2ktPmRzaV9tb2RlX2ZsYWdzID0gZGV2aWNlLT5tb2RlX2ZsYWdzOw0K PiArDQo+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGRybV9vZl9maW5kX3BhbmVsX29yX2JyaWRnZShk c2ktPmRldi0+b2Zfbm9kZSwgMSwgMCwNCj4gJnBhbmVsLA0KPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCZicmlkZ2UpOw0KPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KQ0KPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBp ZiAocGFuZWwpIHsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyaWRnZSA9IGRy bV9wYW5lbF9icmlkZ2VfYWRkKHBhbmVsLA0KPiBEUk1fTU9ERV9DT05ORUNUT1JfRFNJKTsNCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChJU19FUlIoYnJpZGdlKSkNCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gUFRSX0VS UihicmlkZ2UpOw0KPiArwqDCoMKgwqDCoMKgwqB9DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgZHNp LT5wYW5lbF9icmlkZ2UgPSBicmlkZ2U7DQo+ICvCoMKgwqDCoMKgwqDCoGRybV9icmlkZ2VfYWRk KCZkc2ktPmJyaWRnZSk7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7DQo+ICt9DQo+ ICsNCj4gK3N0YXRpYyBpbnQgbndsX2RzaV9ob3N0X2RldGFjaChzdHJ1Y3QgbWlwaV9kc2lfaG9z dCAqZHNpX2hvc3QsDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkZXZpY2UpDQo+ICt7 DQo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBud2xfZHNpICpkc2kgPSBjb250YWluZXJfb2YoZHNp X2hvc3QsIHN0cnVjdCBud2xfZHNpLA0KPiBkc2lfaG9zdCk7DQo+ICsNCj4gK8KgwqDCoMKgwqDC oMKgZHJtX29mX3BhbmVsX2JyaWRnZV9yZW1vdmUoZHNpLT5kZXYtPm9mX25vZGUsIDEsIDApOw0K PiArwqDCoMKgwqDCoMKgwqBkcm1fYnJpZGdlX3JlbW92ZSgmZHNpLT5icmlkZ2UpOw0KPiArDQo+ ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBud2xf ZHNpX3JlYWRfcGFja2V0KHN0cnVjdCBud2xfZHNpICpkc2ksIHUzMiBzdGF0dXMpDQo+ICt7DQo+ ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkZXZpY2UgKmRldiA9IGRzaS0+ZGV2Ow0KPiArwqDCoMKg wqDCoMKgwqBzdHJ1Y3QgbndsX2RzaV90cmFuc2ZlciAqeGZlciA9IGRzaS0+eGZlcjsNCj4gK8Kg wqDCoMKgwqDCoMKgdTggKnBheWxvYWQgPSB4ZmVyLT5tc2ctPnJ4X2J1ZjsNCj4gK8KgwqDCoMKg wqDCoMKgdTMyIHZhbDsNCj4gK8KgwqDCoMKgwqDCoMKgdTE2IHdvcmRfY291bnQ7DQo+ICvCoMKg wqDCoMKgwqDCoHU4IGNoYW5uZWw7DQo+ICvCoMKgwqDCoMKgwqDCoHU4IGRhdGFfdHlwZTsNCj4g Kw0KPiArwqDCoMKgwqDCoMKgwqB4ZmVyLT5zdGF0dXMgPSAwOw0KPiArDQo+ICvCoMKgwqDCoMKg wqDCoGlmICh4ZmVyLT5yeF93b3JkX2NvdW50ID09IDApIHsNCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGlmICghKHN0YXR1cyAmIE5XTF9EU0lfUlhfUEtUX0hEUl9SQ1ZEKSkNCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gZmFs c2U7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBHZXQgdGhlIFJYIGhlYWRl ciBhbmQgcGFyc2UgaXQgKi8NCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZhbCA9 IG53bF9kc2lfcmVhZChkc2ksIE5XTF9EU0lfUlhfUEtUX0hFQURFUik7DQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB3b3JkX2NvdW50ID0gTldMX0RTSV9XQyh2YWwpOw0KPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hhbm5lbCA9IE5XTF9EU0lfUlhfVkModmFsKTsN Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRhdGFfdHlwZSA9IE5XTF9EU0lfUlhf RFQodmFsKTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGNoYW5u ZWwgIT0geGZlci0+bXNnLT5jaGFubmVsKSB7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9FUlJPUihkZXYsDQo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCJbJTAyWF0gQ2hhbm5lbCBtaXNtYXRjaCAoJXUgIT0NCj4gJXUpXG4iLA0KPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB4ZmVyLT5jbWQsIGNoYW5uZWwsIHhmZXItPm1zZy0NCj4gPmNoYW5uZWwpOw0K PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiB0 cnVlOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQ0KPiArDQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzd2l0Y2ggKGRhdGFfdHlwZSkgew0KPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgY2FzZSBNSVBJX0RTSV9SWF9HRU5FUklDX1NIT1JUX1JFQURf UkVTUE9OU0VfMkJZVEU6DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgLyogRmFsbCB0aHJvdWdoICovDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBjYXNlIE1JUElfRFNJX1JYX0RDU19TSE9SVF9SRUFEX1JFU1BPTlNFXzJCWVRFOg0KPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICh4ZmVyLT5t c2ctPnJ4X2xlbiA+IDEpIHsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogcmVhZCBzZWNvbmQgYnl0ZSAqLw0KPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBwYXlsb2FkWzFdID0gd29yZF9jb3VudCA+PiA4Ow0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqArK3hmZXItPnJ4X2xlbjsN Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9DQo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogRmFsbCB0aHJv dWdoICovDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjYXNlIE1JUElfRFNJX1JY X0dFTkVSSUNfU0hPUlRfUkVBRF9SRVNQT05TRV8xQllURToNCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBGYWxsIHRocm91Z2ggKi8NCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNhc2UgTUlQSV9EU0lfUlhfRENTX1NIT1JUX1JFQURf UkVTUE9OU0VfMUJZVEU6DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgaWYgKHhmZXItPm1zZy0+cnhfbGVuID4gMCkgew0KPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiByZWFkIGZp cnN0IGJ5dGUgKi8NCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcGF5bG9hZFswXSA9IHdvcmRfY291bnQgJiAweGZmOw0KPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqArK3hmZXItPnJ4X2xlbjsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB9DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgeGZlci0+c3RhdHVzID0geGZlci0+cnhfbGVuOw0KPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiB0cnVlOw0KPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgY2FzZSBNSVBJX0RTSV9SWF9BQ0tOT1dMRURHRV9BTkRfRVJS T1JfUkVQT1JUOg0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHdvcmRfY291bnQgJj0gMHhmZjsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBEUk1fREVWX0VSUk9SKGRldiwgIlslMDJYXSBEU0kgZXJyb3IgcmVw b3J0Og0KPiAweCUwMnhcbiIsDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhmZXItPmNtZCwgd29yZF9j b3VudCk7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg eGZlci0+c3RhdHVzID0gLUVQUk9UTzsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gdHJ1ZTsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoH0NCj4gKw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHdvcmRf Y291bnQgPiB4ZmVyLT5tc2ctPnJ4X2xlbikgew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfRVJST1IoDQo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldiwNCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIlslMDJYXSBSZWNlaXZlIGJ1ZmZlciB0b28gc21hbGw6ICVsdQ0KPiAoPCAldSlcbiIsDQo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHhmZXItPmNtZCwgeGZlci0+bXNnLT5yeF9sZW4sDQo+IHdvcmRfY291bnQpOw0KPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiB0cnVl Ow0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQ0KPiArDQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB4ZmVyLT5yeF93b3JkX2NvdW50ID0gd29yZF9jb3VudDsNCj4g K8KgwqDCoMKgwqDCoMKgfSBlbHNlIHsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oC8qIFNldCB3b3JkX2NvdW50IGZyb20gcHJldmlvdXMgaGVhZGVyIHJlYWQgKi8NCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHdvcmRfY291bnQgPSB4ZmVyLT5yeF93b3JkX2NvdW50 Ow0KPiArwqDCoMKgwqDCoMKgwqB9DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgLyogSWYgUlggcGF5 bG9hZCBpcyBub3QgeWV0IHJlY2VpdmVkLCB3YWl0IGZvciBpdCAqLw0KPiArwqDCoMKgwqDCoMKg wqBpZiAoIShzdGF0dXMgJiBOV0xfRFNJX1JYX1BLVF9QQVlMT0FEX0RBVEFfUkNWRCkpDQo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gZmFsc2U7DQo+ICsNCj4gK8KgwqDC oMKgwqDCoMKgLyogUmVhZCB0aGUgUlggcGF5bG9hZCAqLw0KPiArwqDCoMKgwqDCoMKgwqB3aGls ZSAod29yZF9jb3VudCA+PSA0KSB7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2 YWwgPSBud2xfZHNpX3JlYWQoZHNpLCBOV0xfRFNJX1JYX1BBWUxPQUQpOw0KPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcGF5bG9hZFswXSA9ICh2YWwgPj4gMCkgJiAweGZmOw0KPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGF5bG9hZFsxXSA9ICh2YWwgPj4gOCkgJiAw eGZmOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGF5bG9hZFsyXSA9ICh2YWwg Pj4gMTYpICYgMHhmZjsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBheWxvYWRb M10gPSAodmFsID4+IDI0KSAmIDB4ZmY7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBwYXlsb2FkICs9IDQ7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZmVyLT5y eF9sZW4gKz0gNDsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHdvcmRfY291bnQg LT0gNDsNCj4gK8KgwqDCoMKgwqDCoMKgfQ0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoGlmICh3b3Jk X2NvdW50ID4gMCkgew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdmFsID0gbnds X2RzaV9yZWFkKGRzaSwgTldMX0RTSV9SWF9QQVlMT0FEKTsNCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHN3aXRjaCAod29yZF9jb3VudCkgew0KPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgY2FzZSAzOg0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHBheWxvYWRbMl0gPSAodmFsID4+IDE2KSAmIDB4ZmY7DQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKyt4ZmVyLT5yeF9sZW47DQo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogRmFsbCB0 aHJvdWdoICovDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjYXNlIDI6DQo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGF5bG9hZFsxXSA9 ICh2YWwgPj4gOCkgJiAweGZmOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCsreGZlci0+cnhfbGVuOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIEZhbGwgdGhyb3VnaCAqLw0KPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgY2FzZSAxOg0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHBheWxvYWRbMF0gPSAodmFsID4+IDApICYgMHhmZjsNCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqArK3hmZXItPnJ4X2xl bjsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVh azsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0NCj4gK8KgwqDCoMKgwqDCoMKg fQ0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoHhmZXItPnN0YXR1cyA9IHhmZXItPnJ4X2xlbjsNCj4g Kw0KPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gdHJ1ZTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZv aWQgbndsX2RzaV9maW5pc2hfdHJhbnNtaXNzaW9uKHN0cnVjdCBud2xfZHNpICpkc2ksIHUzMg0K PiBzdGF0dXMpDQo+ICt7DQo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBud2xfZHNpX3RyYW5zZmVy ICp4ZmVyID0gZHNpLT54ZmVyOw0KPiArwqDCoMKgwqDCoMKgwqBib29sIGVuZF9wYWNrZXQgPSBm YWxzZTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBpZiAoIXhmZXIpDQo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXR1cm47DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgaWYgKHN0YXR1 cyAmIE5XTF9EU0lfVFhfRklGT19PVkZMVykgew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgRFJNX0RFVl9FUlJPUl9SQVRFTElNSVRFRChkc2ktPmRldiwgInR4IGZpZm8NCj4gb3Zl cmZsb3dcbiIpOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuOw0KPiAr wqDCoMKgwqDCoMKgwqB9DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgaWYgKHN0YXR1cyAmIE5XTF9E U0lfSFNfVFhfVElNRU9VVCkgew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJN X0RFVl9FUlJPUl9SQVRFTElNSVRFRChkc2ktPmRldiwgIkhTIHR4DQo+IHRpbWVvdXRcbiIpOw0K PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuOw0KPiArwqDCoMKgwqDCoMKg wqB9DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgaWYgKHhmZXItPmRpcmVjdGlvbiA9PSBEU0lfUEFD S0VUX1NFTkQgJiYNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdGF0dXMgJiBOV0xfRFNJX1RY X1BLVF9ET05FKSB7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZmVyLT5zdGF0 dXMgPSB4ZmVyLT50eF9sZW47DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlbmRf cGFja2V0ID0gdHJ1ZTsNCj4gK8KgwqDCoMKgwqDCoMKgfSBlbHNlIGlmIChzdGF0dXMgJiBOV0xf RFNJX0RQSFlfRElSRUNUSU9OICYmDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAoKHN0YXR1cyAmIChOV0xfRFNJX1JYX1BLVF9IRFJfUkNWRCB8DQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBOV0xfRFNJ X1JYX1BLVF9QQVlMT0FEX0RBVEFfUkNWRCkpKSkgew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgZW5kX3BhY2tldCA9IG53bF9kc2lfcmVhZF9wYWNrZXQoZHNpLCBzdGF0dXMpOw0K PiArwqDCoMKgwqDCoMKgwqB9DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgaWYgKGVuZF9wYWNrZXQp DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb21wbGV0ZSgmeGZlci0+Y29tcGxl dGVkKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgbndsX2RzaV9iZWdpbl90cmFuc21pc3Np b24oc3RydWN0IG53bF9kc2kgKmRzaSkNCj4gK3sNCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG53 bF9kc2lfdHJhbnNmZXIgKnhmZXIgPSBkc2ktPnhmZXI7DQo+ICvCoMKgwqDCoMKgwqDCoHN0cnVj dCBtaXBpX2RzaV9wYWNrZXQgKnBrdCA9ICZ4ZmVyLT5wYWNrZXQ7DQo+ICvCoMKgwqDCoMKgwqDC oGNvbnN0IHU4ICpwYXlsb2FkOw0KPiArwqDCoMKgwqDCoMKgwqBzaXplX3QgbGVuZ3RoOw0KPiAr wqDCoMKgwqDCoMKgwqB1MTYgd29yZF9jb3VudDsNCj4gK8KgwqDCoMKgwqDCoMKgdTggaHNfbW9k ZTsNCj4gK8KgwqDCoMKgwqDCoMKgdTMyIHZhbDsNCj4gK8KgwqDCoMKgwqDCoMKgdTMyIGhzX3dv cmthcm91bmQgPSAwOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoC8qIFNlbmQgdGhlIHBheWxvYWQs IGlmIGFueSAqLw0KPiArwqDCoMKgwqDCoMKgwqBsZW5ndGggPSBwa3QtPnBheWxvYWRfbGVuZ3Ro Ow0KPiArwqDCoMKgwqDCoMKgwqBwYXlsb2FkID0gcGt0LT5wYXlsb2FkOw0KPiArDQo+ICvCoMKg wqDCoMKgwqDCoHdoaWxlIChsZW5ndGggPj0gNCkgew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgdmFsID0gKih1MzIgKilwYXlsb2FkOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgaHNfd29ya2Fyb3VuZCB8PSAhKHZhbCAmIDB4RkZGRjAwKTsNCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoG53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX1RYX1BBWUxP QUQsIHZhbCk7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYXlsb2FkICs9IDQ7 DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsZW5ndGggLT0gNDsNCj4gK8KgwqDC oMKgwqDCoMKgfQ0KPiArwqDCoMKgwqDCoMKgwqAvKiBTZW5kIHRoZSByZXN0IG9mIHRoZSBwYXls b2FkICovDQo+ICvCoMKgwqDCoMKgwqDCoHZhbCA9IDA7DQo+ICvCoMKgwqDCoMKgwqDCoHN3aXRj aCAobGVuZ3RoKSB7DQo+ICvCoMKgwqDCoMKgwqDCoGNhc2UgMzoNCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHZhbCB8PSBwYXlsb2FkWzJdIDw8IDE2Ow0KPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgLyogRmFsbCB0aHJvdWdoICovDQo+ICvCoMKgwqDCoMKgwqDCoGNh c2UgMjoNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZhbCB8PSBwYXlsb2FkWzFd IDw8IDg7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBoc193b3JrYXJvdW5kIHw9 ICEodmFsICYgMHhGRkZGMDApOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyog RmFsbCB0aHJvdWdoICovDQo+ICvCoMKgwqDCoMKgwqDCoGNhc2UgMToNCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHZhbCB8PSBwYXlsb2FkWzBdOw0KPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfVFhfUEFZTE9BRCwgdmFs KTsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOw0KPiArwqDCoMKgwqDC oMKgwqB9DQo+ICvCoMKgwqDCoMKgwqDCoHhmZXItPnR4X2xlbiA9IHBrdC0+cGF5bG9hZF9sZW5n dGg7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgLyoNCj4gK8KgwqDCoMKgwqDCoMKgwqAqIFNlbmQg dGhlIGhlYWRlcg0KPiArwqDCoMKgwqDCoMKgwqDCoCogaGVhZGVyWzBdID0gVmlydHVhbCBDaGFu bmVsICsgRGF0YSBUeXBlDQo+ICvCoMKgwqDCoMKgwqDCoMKgKiBoZWFkZXJbMV0gPSBXb3JkIENv dW50IExTQiAoTFApIG9yIGZpcnN0IHBhcmFtIChTUCkNCj4gK8KgwqDCoMKgwqDCoMKgwqAqIGhl YWRlclsyXSA9IFdvcmQgQ291bnQgTVNCIChMUCkgb3Igc2Vjb25kIHBhcmFtIChTUCkNCj4gK8Kg wqDCoMKgwqDCoMKgwqAqLw0KPiArwqDCoMKgwqDCoMKgwqB3b3JkX2NvdW50ID0gcGt0LT5oZWFk ZXJbMV0gfCAocGt0LT5oZWFkZXJbMl0gPDwgOCk7DQo+ICvCoMKgwqDCoMKgwqDCoGlmIChoc193 b3JrYXJvdW5kICYmIChkc2ktPnF1aXJrcyAmIEUxMTQxOF9IU19NT0RFX1FVSVJLKSkgew0KPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5k ZXYsDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiVXNpbmcgaHMgbW9kZSB3b3JrYXJvdW5kIGZvcg0KPiBj bWQgMHgleFxuIiwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhmZXItPmNtZCk7DQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBoc19tb2RlID0gMTsNCj4gK8KgwqDCoMKgwqDCoMKgfSBlbHNl IHsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGhzX21vZGUgPSAoeGZlci0+bXNn LT5mbGFncyAmIE1JUElfRFNJX01TR19VU0VfTFBNKSA/DQo+IDAgOiAxOw0KPiArwqDCoMKgwqDC oMKgwqB9DQo+ICvCoMKgwqDCoMKgwqDCoHZhbCA9IE5XTF9EU0lfV0Mod29yZF9jb3VudCkgfCBO V0xfRFNJX1RYX1ZDKHhmZXItPm1zZy0NCj4gPmNoYW5uZWwpIHwNCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgTldMX0RTSV9UWF9EVCh4ZmVyLT5tc2ctPnR5cGUpIHwNCj4gTldMX0RTSV9I U19TRUwoaHNfbW9kZSkgfA0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBOV0xfRFNJX0JU QV9UWCh4ZmVyLT5uZWVkX2J0YSk7DQo+ICvCoMKgwqDCoMKgwqDCoG53bF9kc2lfd3JpdGUoZHNp LCBOV0xfRFNJX1BLVF9DT05UUk9MLCB2YWwpOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoC8qIFNl bmQgcGFja2V0IGNvbW1hbmQgKi8NCj4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ks IE5XTF9EU0lfU0VORF9QQUNLRVQsIDB4MSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBzc2l6ZV90 IG53bF9kc2lfaG9zdF90cmFuc2ZlcihzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqZHNpX2hvc3QsDQo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfbXNnICptc2cpDQo+ICt7DQo+ ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBud2xfZHNpICpkc2kgPSBjb250YWluZXJfb2YoZHNpX2hv c3QsIHN0cnVjdCBud2xfZHNpLA0KPiBkc2lfaG9zdCk7DQo+ICvCoMKgwqDCoMKgwqDCoHN0cnVj dCBud2xfZHNpX3RyYW5zZmVyIHhmZXI7DQo+ICvCoMKgwqDCoMKgwqDCoHNzaXplX3QgcmV0ID0g MDsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqAvKiBDcmVhdGUgcGFja2V0IHRvIGJlIHNlbnQgKi8N Cj4gK8KgwqDCoMKgwqDCoMKgZHNpLT54ZmVyID0gJnhmZXI7DQo+ICvCoMKgwqDCoMKgwqDCoHJl dCA9IG1pcGlfZHNpX2NyZWF0ZV9wYWNrZXQoJnhmZXIucGFja2V0LCBtc2cpOw0KPiArwqDCoMKg wqDCoMKgwqBpZiAocmV0IDwgMCkgew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ZHNpLT54ZmVyID0gTlVMTDsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy biByZXQ7DQo+ICvCoMKgwqDCoMKgwqDCoH0NCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBpZiAoKG1z Zy0+dHlwZSAmIE1JUElfRFNJX0dFTkVSSUNfUkVBRF9SRVFVRVNUXzBfUEFSQU0gfHwNCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1zZy0+dHlwZSAmIE1JUElfRFNJX0dFTkVSSUNfUkVBRF9S RVFVRVNUXzFfUEFSQU0gfHwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1zZy0+dHlwZSAm IE1JUElfRFNJX0dFTkVSSUNfUkVBRF9SRVFVRVNUXzJfUEFSQU0gfHwNCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoG1zZy0+dHlwZSAmIE1JUElfRFNJX0RDU19SRUFEKSAmJg0KPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoG1zZy0+cnhfbGVuID4gMCAmJiBtc2ctPnJ4X2J1ZiAhPSBOVUxMKQ0K PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGZlci5kaXJlY3Rpb24gPSBEU0lfUEFD S0VUX1JFQ0VJVkU7DQo+ICvCoMKgwqDCoMKgwqDCoGVsc2UNCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHhmZXIuZGlyZWN0aW9uID0gRFNJX1BBQ0tFVF9TRU5EOw0KPiArDQo+ICvC oMKgwqDCoMKgwqDCoHhmZXIubmVlZF9idGEgPSAoeGZlci5kaXJlY3Rpb24gPT0gRFNJX1BBQ0tF VF9SRUNFSVZFKTsNCj4gK8KgwqDCoMKgwqDCoMKgeGZlci5uZWVkX2J0YSB8PSAobXNnLT5mbGFn cyAmIE1JUElfRFNJX01TR19SRVFfQUNLKSA/IDEgOiAwOw0KPiArwqDCoMKgwqDCoMKgwqB4ZmVy Lm1zZyA9IG1zZzsNCj4gK8KgwqDCoMKgwqDCoMKgeGZlci5zdGF0dXMgPSAtRVRJTUVET1VUOw0K PiArwqDCoMKgwqDCoMKgwqB4ZmVyLnJ4X3dvcmRfY291bnQgPSAwOw0KPiArwqDCoMKgwqDCoMKg wqB4ZmVyLnJ4X2xlbiA9IDA7DQo+ICvCoMKgwqDCoMKgwqDCoHhmZXIuY21kID0gMHgwMDsNCj4g K8KgwqDCoMKgwqDCoMKgaWYgKG1zZy0+dHhfbGVuID4gMCkNCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHhmZXIuY21kID0gKCh1OCAqKShtc2ctPnR4X2J1ZikpWzBdOw0KPiArwqDC oMKgwqDCoMKgwqBpbml0X2NvbXBsZXRpb24oJnhmZXIuY29tcGxldGVkKTsNCj4gKw0KPiArwqDC oMKgwqDCoMKgwqByZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5yeF9lc2NfY2xrKTsNCj4g K8KgwqDCoMKgwqDCoMKgaWYgKHJldCA8IDApIHsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoERSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIHJ4X2VzYyBj bGs6DQo+ICV6ZFxuIiwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXQpOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0dXJuIHJldDsNCj4gK8KgwqDCoMKgwqDCoMKgfQ0KPiArwqDCoMKgwqDCoMKgwqBEUk1f REVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgIkVuYWJsZWQgcnhfZXNjIGNsayBAJWx1DQo+IEh6 XG4iLA0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBjbGtfZ2V0X3JhdGUoZHNpLT5yeF9lc2NfY2xrKSk7DQpUaGlzIHdpbGwgYmUgcHJp bnRlZCBldmVyeSB0aW1lIGEgRFNJIGNvbW1hbmQgaXMgc2VudCwgb2YgY291cnNlLCB3aGVuDQpk ZWJ1Z2dpbmcgb25seSwgYnV0IHN0aWxsOiBhcmUgeW91IHN1cmUgeW91IG5lZWQgdGhpcyBpbmZv Pw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoC8qIEluaXRpYXRlIHRoZSBEU0kgcGFja2V0IHRyYW5z bWlzaW9uICovDQo+ICvCoMKgwqDCoMKgwqDCoG53bF9kc2lfYmVnaW5fdHJhbnNtaXNzaW9uKGRz aSk7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVv dXQoJnhmZXIuY29tcGxldGVkLA0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBOV0xfRFNJX01J UElfRklGT19USU1FT1VUKSkNCj4gew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg RFJNX0RFVl9FUlJPUihkc2lfaG9zdC0+ZGV2LCAiWyUwMlhdIERTSSB0cmFuc2Zlcg0KPiB0aW1l ZCBvdXRcbiIsDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgeGZlci5jbWQpOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0ID0gLUVUSU1FRE9VVDsNCj4gK8KgwqDCoMKgwqDCoMKgfSBlbHNlIHsNCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IHhmZXIuc3RhdHVzOw0KPiArwqDCoMKgwqDC oMKgwqB9DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+ cnhfZXNjX2Nsayk7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsNCj4gK30NCj4g Kw0KPiArY29uc3Qgc3RydWN0IG1pcGlfZHNpX2hvc3Rfb3BzIG53bF9kc2lfaG9zdF9vcHMgPSB7 DQo+ICvCoMKgwqDCoMKgwqDCoC5hdHRhY2ggPSBud2xfZHNpX2hvc3RfYXR0YWNoLA0KPiArwqDC oMKgwqDCoMKgwqAuZGV0YWNoID0gbndsX2RzaV9ob3N0X2RldGFjaCwNCj4gK8KgwqDCoMKgwqDC oMKgLnRyYW5zZmVyID0gbndsX2RzaV9ob3N0X3RyYW5zZmVyLA0KPiArfTsNCj4gKw0KPiAraXJx cmV0dXJuX3QgbndsX2RzaV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQ0KPiArew0K PiArwqDCoMKgwqDCoMKgwqB1MzIgaXJxX3N0YXR1czsNCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0 IG53bF9kc2kgKmRzaSA9IGRhdGE7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgaXJxX3N0YXR1cyA9 IG53bF9kc2lfcmVhZChkc2ksIE5XTF9EU0lfSVJRX1NUQVRVUyk7DQo+ICsNCj4gK8KgwqDCoMKg wqDCoMKgaWYgKGlycV9zdGF0dXMgJiBOV0xfRFNJX1RYX1BLVF9ET05FIHx8DQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgaXJxX3N0YXR1cyAmIE5XTF9EU0lfUlhfUEtUX0hEUl9SQ1ZEIHx8DQo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaXJxX3N0YXR1cyAmIE5XTF9EU0lfUlhfUEtUX1BBWUxP QURfREFUQV9SQ1ZEKQ0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbndsX2RzaV9m aW5pc2hfdHJhbnNtaXNzaW9uKGRzaSwgaXJxX3N0YXR1cyk7DQo+ICsNCj4gK8KgwqDCoMKgwqDC oMKgcmV0dXJuIElSUV9IQU5ETEVEOw0KPiArfQ0KPiArDQo+ICtpbnQgbndsX2RzaV9lbmFibGUo c3RydWN0IG53bF9kc2kgKmRzaSkNCj4gK3sNCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRldmlj ZSAqZGV2ID0gZHNpLT5kZXY7DQo+ICvCoMKgwqDCoMKgwqDCoHVuaW9uIHBoeV9jb25maWd1cmVf b3B0cyAqcGh5X2NmZyA9ICZkc2ktPnBoeV9jZmc7DQo+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7 DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFkc2ktPmxhbmVzKSB7DQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fREVWX0VSUk9SKGRldiwgIk5lZWQgRFNJIGxhbmVzOiAl ZFxuIiwgZHNpLQ0KPiA+bGFuZXMpOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0dXJuIC1FSU5WQUw7DQo+ICvCoMKgwqDCoMKgwqDCoH0NCj4gKw0KPiArwqDCoMKgwqDCoMKg wqByZXQgPSBwaHlfaW5pdChkc2ktPnBoeSk7DQo+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAw KSB7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fREVWX0VSUk9SKGRldiwg IkZhaWxlZCB0byBpbml0IERTSSBwaHk6ICVkXG4iLA0KPiByZXQpOw0KPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsNCj4gK8KgwqDCoMKgwqDCoMKgfQ0KPiArDQo+ ICvCoMKgwqDCoMKgwqDCoHJldCA9IHBoeV9jb25maWd1cmUoZHNpLT5waHksIHBoeV9jZmcpOw0K PiArwqDCoMKgwqDCoMKgwqBpZiAocmV0IDwgMCkgew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gY29uZmlndXJlIERTSSBwaHk6 DQo+ICVkXG4iLCByZXQpOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJu IHJldDsNCj4gK8KgwqDCoMKgwqDCoMKgfQ0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGNs a19wcmVwYXJlX2VuYWJsZShkc2ktPnR4X2VzY19jbGspOw0KPiArwqDCoMKgwqDCoMKgwqBpZiAo cmV0IDwgMCkgew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9FUlJP Uihkc2ktPmRldiwgIkZhaWxlZCB0byBlbmFibGUgdHhfZXNjIGNsazoNCj4gJWRcbiIsDQo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0KTsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7DQo+ICvC oMKgwqDCoMKgwqDCoH0NCj4gK8KgwqDCoMKgwqDCoMKgRFJNX0RFVl9ERUJVR19EUklWRVIoZHNp LT5kZXYsICJFbmFibGVkIHR4X2VzYyBjbGsgQCVsdQ0KPiBIelxuIiwNCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2xrX2dldF9yYXRl KGRzaS0+dHhfZXNjX2NsaykpOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoHJldCA9IG53bF9kc2lf Y29uZmlnX2hvc3QoZHNpKTsNCj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCA8IDApIHsNCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRv IHNldCB1cCBEU0k6ICVkIiwgcmV0KTsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJldHVybiByZXQ7DQo+ICvCoMKgwqDCoMKgwqDCoH0NCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBy ZXQgPSBud2xfZHNpX2NvbmZpZ19kcGkoZHNpKTsNCj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCA8 IDApIHsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfRVJST1IoZGV2 LCAiRmFpbGVkIHRvIHNldCB1cCBEUEk6ICVkIiwgcmV0KTsNCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldHVybiByZXQ7DQo+ICvCoMKgwqDCoMKgwqDCoH0NCj4gKw0KPiArwqDC oMKgwqDCoMKgwqByZXQgPSBwaHlfcG93ZXJfb24oZHNpLT5waHkpOw0KPiArwqDCoMKgwqDCoMKg wqBpZiAocmV0IDwgMCkgew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RF Vl9FUlJPUihkZXYsICJGYWlsZWQgdG8gcG93ZXIgb24gRFBIWSAoJWQpXG4iLA0KPiByZXQpOw0K PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsNCj4gK8KgwqDCoMKg wqDCoMKgfQ0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoG53bF9kc2lfaW5pdF9pbnRlcnJ1cHRzKGRz aSk7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7DQo+ICt9DQpJIHNlZSB0aGF0IHlv dSBkbyBhbGwgdGhlIGluaXRpYWxpemF0aW9uIGZyb20gdGhlIHByZV9lbmFibGUgc3RhZ2UuIElm DQp5b3UgcG93ZXIgb24gdGhlIERQSFksIHRoZSBEU0kgaG9zdCBibG9jayB3aWxsIHN0YXJ0IHRy YW5zbWl0dGluZyBwaXhlbA0KZGF0YSBvbiB0aGUgZGF0YSBsYW5lcy4gV2UgaGFkIHNvbWUgY3Vz dG9tZXJzIHRoYXQgY29tcGxhaW5lZCBhYm91dA0KdGhpcywgc28gSSB0aGluayBpcyBiZXR0ZXIg dG8gaG9sZCBvbiB0aGUgcGl4ZWwgZmxvdyB1bnRpbCB0aGUgd2hvbGUNCnBpeGVsIHBpcGUgaXMg Y29tcGxldGVseSBpbml0aWFsaXplZC4NCldoYXQgSSByZWNvbW1lbmQgaGVyZSwgaXMgdG8gYWxz byB1c2UgdGhlIGVuYWJsZSBzdGFnZSBpbiB0aGUgYnJpZGdlDQphbmQgbW92ZSBud2xfZHNpX2Nv bmZpZ19ob3N0wqBpbiB0aGVyZS4gVGh1cywgdGhlIGNhbGwgZmxvdyB3aWxsIGJlOg0KMS4gYnJp ZGdlLT5wcmVfZW5hYmxlIChEU0kgaXMgY29uZmlndXJlZCwgYnV0IG5vdCBzdHJlYW1pbmcgc2lu Y2UgdGhlDQpob3N0IGlzIG5vdCB5ZXQgY29uZmlndXJlZCkNCjIuIHBhbmVsLT5wcmVwYXJlIChw YW5lbCB3aWxsIHVzZSB0aGUgRFNJIEFQQiBibG9jayB0byBzZW5kIERTSQ0KY29tbWFuZHMpDQoz LiBicmlkZ2UtPmVuYWJsZSAoRFNJIGhvc3QgYmxvY2sgaXMgY29uZmlndXJlZCwgRFNJIHN0YXJ0 cyBzdHJlYW1taW5nDQpwaXhlbHMpDQozLiBwYW5lbC0+ZW5hYmxlIChwYW5lbCBpcyByZWFkeSB0 byBkaXNwbGF5IHRoZSBwaXhlbCBmbG93KQ0KPiArDQo+ICtpbnQgbndsX2RzaV9kaXNhYmxlKHN0 cnVjdCBud2xfZHNpICpkc2kpDQo+ICt7DQo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkZXZpY2Ug KmRldiA9IGRzaS0+ZGV2Ow0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoERSTV9ERVZfREVCVUdfRFJJ VkVSKGRldiwgIkRpc2FibGluZyBjbG9ja3MgYW5kIHBoeVxuIik7DQo+ICsNCj4gK8KgwqDCoMKg wqDCoMKgcGh5X3Bvd2VyX29mZihkc2ktPnBoeSk7DQo+ICvCoMKgwqDCoMKgwqDCoHBoeV9leGl0 KGRzaS0+cGh5KTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqAvKiBEaXNhYmxpbmcgdGhlIGNsb2Nr IGJlZm9yZSB0aGUgcGh5IGJyZWFrcyBlbmFibGluZyBkc2kNCj4gYWdhaW4gKi8NCj4gK8KgwqDC oMKgwqDCoMKgY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+dHhfZXNjX2Nsayk7DQo+ICsNCj4g K8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vYnJpZGdlL253bC1kc2kvbndsLWRzaS5oDQo+IGIvZHJpdmVycy9ncHUvZHJtL2JyaWRn ZS9ud2wtZHNpL253bC1kc2kuaA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAw MDAwMDAwMDAuLjU3OWIzNjZkZTY1Mg0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9icmlkZ2UvbndsLWRzaS9ud2wtZHNpLmgNCj4gQEAgLTAsMCArMSwxMTIgQEANCj4g Ky8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKyAqLw0KPiArLyoNCj4gKyAqIE5X TCBNSVBJIERTSSBob3N0IGRyaXZlcg0KPiArICoNCj4gKyAqIENvcHlyaWdodCAoQykgMjAxNyBO WFANCj4gKyAqIENvcHlyaWdodCAoQykgMjAxOSBQdXJpc20gU1BDDQo+ICsgKi8NCj4gKyNpZm5k ZWYgX19OV0xfRFNJX0hfXw0KPiArI2RlZmluZSBfX05XTF9EU0lfSF9fDQo+ICsNCj4gKyNpbmNs dWRlIDxsaW51eC9pcnFyZXR1cm4uaD4NCj4gKw0KPiArI2luY2x1ZGUgPGRybS9kcm1fbWlwaV9k c2kuaD4NCj4gKw0KPiArI2luY2x1ZGUgIm53bC1kcnYuaCINCj4gKw0KPiArLyogRFNJIEhPU1Qg cmVnaXN0ZXJzICovDQo+ICsjZGVmaW5lIE5XTF9EU0lfQ0ZHX05VTV9MQU5FU8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MA0KPiArI2RlZmluZSBOV0xfRFNJX0NGR19OT05D T05USU5VT1VTX0NMS8KgwqDCoMKgwqDCoMKgwqDCoMKgMHg0DQo+ICsjZGVmaW5lIE5XTF9EU0lf Q0ZHX1RfUFJFwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDgN Cj4gKyNkZWZpbmUgTldMX0RTSV9DRkdfVF9QT1NUwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgMHhjDQo+ICsjZGVmaW5lIE5XTF9EU0lfQ0ZHX1RYX0dBUMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MTANCj4gKyNkZWZpbmUgTldMX0RT SV9DRkdfQVVUT0lOU0VSVF9FT1RQwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgxNA0KPiArI2Rl ZmluZSBOV0xfRFNJX0NGR19FWFRSQV9DTURTX0FGVEVSX0VPVFDCoMKgwqDCoMKgwqAweDE4DQo+ ICsjZGVmaW5lIE5XTF9EU0lfQ0ZHX0hUWF9UT19DT1VOVMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoDB4MWMNCj4gKyNkZWZpbmUgTldMX0RTSV9DRkdfTFJYX0hfVE9fQ09VTlTCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoDB4MjANCj4gKyNkZWZpbmUgTldMX0RTSV9DRkdfQlRBX0hfVE9f Q09VTlTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MjQNCj4gKyNkZWZpbmUgTldMX0RTSV9D RkdfVFdBS0VVUMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDI4DQo+ ICsjZGVmaW5lIE5XTF9EU0lfQ0ZHX1NUQVRVU19PVVTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgMHgyYw0KPiArI2RlZmluZSBOV0xfRFNJX1JYX0VSUk9SX1NUQVRVU8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MzANCj4gKw0KPiArLyog RFNJIERQSSByZWdpc3RlcnMgKi8NCj4gKyNkZWZpbmUgTldMX0RTSV9QSVhFTF9QQVlMT0FEX1NJ WkXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MjAwDQo+ICsjZGVmaW5lIE5XTF9EU0lfUElY RUxfRklGT19TRU5EX0xFVkVMwqDCoMKgwqDCoMKgwqDCoMKgwqAweDIwNA0KPiArI2RlZmluZSBO V0xfRFNJX0lOVEVSRkFDRV9DT0xPUl9DT0RJTkfCoMKgwqDCoMKgwqDCoMKgwqAweDIwOA0KPiAr I2RlZmluZSBOV0xfRFNJX1BJWEVMX0ZPUk1BVMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgMHgyMGMNCj4gKyNkZWZpbmUgTldMX0RTSV9WU1lOQ19QT0xBUklUWcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDIxMA0KPiArI2RlZmluZSBOV0xfRFNJX1ZTWU5D X1BPTEFSSVRZX0FDVElWRV9MT1fCoMKgwqDCoMKgwqAwDQo+ICsjZGVmaW5lIE5XTF9EU0lfVlNZ TkNfUE9MQVJJVFlfQUNUSVZFX0hJR0jCoMKgwqDCoMKgQklUKDEpDQo+ICsNCj4gKyNkZWZpbmUg TldMX0RTSV9IU1lOQ19QT0xBUklUWcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAw eDIxNA0KPiArI2RlZmluZSBOV0xfRFNJX0hTWU5DX1BPTEFSSVRZX0FDVElWRV9MT1fCoMKgwqDC oMKgwqAwDQo+ICsjZGVmaW5lIE5XTF9EU0lfSFNZTkNfUE9MQVJJVFlfQUNUSVZFX0hJR0jCoMKg wqDCoMKgQklUKDEpDQo+ICsNCj4gKyNkZWZpbmUgTldMX0RTSV9WSURFT19NT0RFwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgyMTgNCj4gKyNkZWZpbmUgTldMX0RT SV9IRlDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoDB4MjFjDQo+ICsjZGVmaW5lIE5XTF9EU0lfSEJQwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDIyMA0KPiArI2RlZmluZSBOV0xfRFNJ X0hTQcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgMHgyMjQNCj4gKyNkZWZpbmUgTldMX0RTSV9FTkFCTEVfTVVMVF9QS1RTwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgMHgyMjgNCj4gKyNkZWZpbmUgTldMX0RTSV9WQlDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MjJjDQo+ICsj ZGVmaW5lIE5XTF9EU0lfVkZQwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAweDIzMA0KPiArI2RlZmluZSBOV0xfRFNJX0JMTFBfTU9ERcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgyMzQNCj4gKyNkZWZpbmUg TldMX0RTSV9VU0VfTlVMTF9QS1RfQkxMUMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDIz OA0KPiArI2RlZmluZSBOV0xfRFNJX1ZBQ1RJVkXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgyM2MNCj4gKyNkZWZpbmUgTldM X0RTSV9WQ8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAweDI0MA0KPiArDQo+ICsvKiBEU0kgQVBCIFBLVCBjb250cm9sICovDQo+ICsjZGVm aW5lIE5XTF9EU0lfVFhfUEFZTE9BRMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoDB4MjgwDQo+ICsjZGVmaW5lIE5XTF9EU0lfUEtUX0NPTlRST0zCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgyODQNCj4gKyNkZWZpbmUgTldMX0RTSV9TRU5E X1BBQ0tFVMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDI4OA0KPiAr I2RlZmluZSBOV0xfRFNJX1BLVF9TVEFUVVPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAweDI4Yw0KPiArI2RlZmluZSBOV0xfRFNJX1BLVF9GSUZPX1dSX0xFVkVMwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MjkwDQo+ICsjZGVmaW5lIE5XTF9EU0lfUEtUX0ZJ Rk9fUkRfTEVWRUzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgyOTQNCj4gKyNkZWZpbmUg TldMX0RTSV9SWF9QQVlMT0FEwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgMHgyOTgNCj4gKyNkZWZpbmUgTldMX0RTSV9SWF9QS1RfSEVBREVSwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgyOWMNCj4gKw0KPiArLyogRFNJIElSUSBoYW5kbGluZyAq Lw0KPiArI2RlZmluZSBOV0xfRFNJX0lSUV9TVEFUVVPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAweDJhMA0KPiArI2RlZmluZSBOV0xfRFNJX1NNX05PVF9JRExFwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCgwKQ0KPiArI2RlZmluZSBO V0xfRFNJX1RYX1BLVF9ET05FwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oEJJVCgxKQ0KPiArI2RlZmluZSBOV0xfRFNJX0RQSFlfRElSRUNUSU9OwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoEJJVCgyKQ0KPiArI2RlZmluZSBOV0xfRFNJX1RYX0ZJRk9fT1ZG TFfCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoMykNCj4gKyNkZWZpbmUg TldMX0RTSV9UWF9GSUZPX1VERkxXwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg QklUKDQpDQo+ICsjZGVmaW5lIE5XTF9EU0lfUlhfRklGT19PVkZMV8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoEJJVCg1KQ0KPiArI2RlZmluZSBOV0xfRFNJX1JYX0ZJRk9fVURG TFfCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoNikNCj4gKyNkZWZpbmUg TldMX0RTSV9SWF9QS1RfSERSX1JDVkTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBCSVQoNykNCj4gKyNkZWZpbmUgTldMX0RTSV9SWF9QS1RfUEFZTE9BRF9E QVRBX1JDVkTCoMKgwqDCoMKgwqDCoEJJVCg4KQ0KPiArI2RlZmluZSBOV0xfRFNJX0JUQV9USU1F T1VUwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCgyOSkNCj4gKyNk ZWZpbmUgTldMX0RTSV9MUF9SWF9USU1FT1VUwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgQklUKDMwKQ0KPiArI2RlZmluZSBOV0xfRFNJX0hTX1RYX1RJTUVPVVTCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoMzEpDQo+ICsNCj4gKyNkZWZpbmUgTldMX0RT SV9JUlFfU1RBVFVTMsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDJh NA0KPiArI2RlZmluZSBOV0xfRFNJX1NJTkdMRV9CSVRfRUNDX0VSUsKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgQklUKDApDQo+ICsjZGVmaW5lIE5XTF9EU0lfTVVMVElfQklUX0VDQ19FUlLCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDEpDQo+ICsjZGVmaW5lIE5XTF9EU0lfQ1JDX0VS UsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBCSVQoMikNCj4gKw0KPiArI2RlZmluZSBOV0xfRFNJX0lSUV9NQVNLwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MmE4DQo+ICsjZGVmaW5lIE5X TF9EU0lfU01fTk9UX0lETEVfTUFTS8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCgw KQ0KPiArI2RlZmluZSBOV0xfRFNJX1RYX1BLVF9ET05FX01BU0vCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBCSVQoMSkNCj4gKyNkZWZpbmUgTldMX0RTSV9EUEhZX0RJUkVDVElPTl9NQVNL wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDIpDQo+ICsjZGVmaW5lIE5XTF9EU0lfVFhfRklG T19PVkZMV19NQVNLwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoMykNCj4gKyNkZWZpbmUg TldMX0RTSV9UWF9GSUZPX1VERkxXX01BU0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCg0 KQ0KPiArI2RlZmluZSBOV0xfRFNJX1JYX0ZJRk9fT1ZGTFdfTUFTS8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgQklUKDUpDQo+ICsjZGVmaW5lIE5XTF9EU0lfUlhfRklGT19VREZMV19NQVNLwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoNikNCj4gKyNkZWZpbmUgTldMX0RTSV9SWF9QS1Rf SERSX1JDVkRfTUFTS8KgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoNykNCj4gKyNkZWZpbmUgTldM X0RTSV9SWF9QS1RfUEFZTE9BRF9EQVRBX1JDVkRfTUFTS8KgwqBCSVQoOCkNCj4gKyNkZWZpbmUg TldMX0RTSV9CVEFfVElNRU9VVF9NQVNLwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklU KDI5KQ0KPiArI2RlZmluZSBOV0xfRFNJX0xQX1JYX1RJTUVPVVRfTUFTS8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgQklUKDMwKQ0KPiArI2RlZmluZSBOV0xfRFNJX0hTX1RYX1RJTUVPVVRfTUFT S8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDMxKQ0KPiArDQo+ICsjZGVmaW5lIE5XTF9E U0lfSVJRX01BU0sywqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAw eDJhYw0KPiArI2RlZmluZSBOV0xfRFNJX1NJTkdMRV9CSVRfRUNDX0VSUl9NQVNLwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoMCkNCj4gKyNkZWZpbmUgTldMX0RTSV9NVUxUSV9C SVRfRUNDX0VSUl9NQVNLwqDCoMKgwqDCoMKgwqDCoMKgQklUKDEpDQo+ICsjZGVmaW5lIE5XTF9E U0lfQ1JDX0VSUl9NQVNLwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQo MikNCj4gKw0KPiArZXh0ZXJuIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9ob3N0X29wcyBud2xfZHNp X2hvc3Rfb3BzOw0KPiArDQo+ICtpcnFyZXR1cm5fdCBud2xfZHNpX2lycV9oYW5kbGVyKGludCBp cnEsIHZvaWQgKmRhdGEpOw0KPiAraW50IG53bF9kc2lfZW5hYmxlKHN0cnVjdCBud2xfZHNpICpk c2kpOw0KPiAraW50IG53bF9kc2lfZGlzYWJsZShzdHJ1Y3QgbndsX2RzaSAqZHNpKTsNCj4gKw0K PiArI2VuZGlmIC8qIF9fTldMX0RTSV9IX18gKi8NCj4gLS0NCj4gMi4yMC4xDQo+IA0KPiANCkJl c3QgcmVnYXJkcywNClJvYmVydApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVs QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9s aXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==