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 Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 88408C4167D for ; Thu, 9 Nov 2023 07:12:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232459AbjKIHMn (ORCPT ); Thu, 9 Nov 2023 02:12:43 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45378 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229566AbjKIHMl (ORCPT ); Thu, 9 Nov 2023 02:12:41 -0500 Received: from rtits2.realtek.com.tw (rtits2.realtek.com [211.75.126.72]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5A1A62584; Wed, 8 Nov 2023 23:12:39 -0800 (PST) X-SpamFilter-By: ArmorX SpamTrap 5.78 with qID 3A97AZmgC1382971, This message is accepted by code: ctloc85258 Received: from mail.realtek.com (rtexh36506.realtek.com.tw[172.21.6.27]) by rtits2.realtek.com.tw (8.15.2/2.95/5.92) with ESMTPS id 3A97AZmgC1382971 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 9 Nov 2023 15:10:36 +0800 Received: from RTEXMBS05.realtek.com.tw (172.21.6.98) by RTEXH36506.realtek.com.tw (172.21.6.27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.17; Thu, 9 Nov 2023 15:10:36 +0800 Received: from RTEXMBS04.realtek.com.tw (172.21.6.97) by RTEXMBS05.realtek.com.tw (172.21.6.98) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.34; Thu, 9 Nov 2023 15:10:36 +0800 Received: from RTEXMBS04.realtek.com.tw ([fe80::40c2:6c24:2df4:e6c7]) by RTEXMBS04.realtek.com.tw ([fe80::40c2:6c24:2df4:e6c7%5]) with mapi id 15.01.2375.007; Thu, 9 Nov 2023 15:10:36 +0800 From: =?utf-8?B?SnlhbiBDaG91IFvlkajoirflrold?= To: Krzysztof Kozlowski , "ulf.hansson@linaro.org" , "adrian.hunter@intel.com" , "jh80.chung@samsung.com" , "riteshh@codeaurora.org" , "robh+dt@kernel.org" , "krzysztof.kozlowski+dt@linaro.org" , "conor+dt@kernel.org" , "asutoshd@codeaurora.org" CC: "p.zabel@pengutronix.de" , "linux-mmc@vger.kernel.org" , "devicetree@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "arnd@arndb.de" , "briannorris@chromium.org" , "doug@schmorgal.com" , "tonyhuang.sunplus@gmail.com" , "abel.vesa@linaro.org" , "william.qiu@starfivetech.com" Subject: RE: [PATCH V5][2/4] mmc: Add Synopsys DesignWare mmc cmdq host driver Thread-Topic: [PATCH V5][2/4] mmc: Add Synopsys DesignWare mmc cmdq host driver Thread-Index: AQHaDWS7lxtYFhTuvEO+mbggAxhfrbBmMy8AgAtkijA= Date: Thu, 9 Nov 2023 07:10:35 +0000 Message-ID: <5ba1f52e4ea04fb4a30135fb7d28eb19@realtek.com> References: <20231102081514.22945-1-jyanchou@realtek.com> <20231102081514.22945-3-jyanchou@realtek.com> In-Reply-To: Accept-Language: zh-TW, en-US Content-Language: zh-TW x-originating-ip: [172.21.190.236] x-kse-serverinfo: RTEXMBS05.realtek.com.tw, 9 x-kse-antispam-interceptor-info: fallback x-kse-antivirus-interceptor-info: fallback Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-KSE-AntiSpam-Interceptor-Info: fallback Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgS3J6eXN6dG9mLA0KDQo+PiBXZSBpbXBsZW1lbnRlZCBjbWRxIGZlYXR1cmUgb24gU3lub3Bz eXMgRGVzaWduV2FyZSBtbWMgZHJpdmVyLg0KPj4gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBkd19t bWMuYyBhbmQgZHdfbW1jX2NxZS5jIHdlcmUgZGlzdGluY3QgDQo+PiByZWdpc3RlciBkZWZpbml0 aW9ucywgbW1jIHVzZXIgZmxvdyBhbmQgdGhlIGFkZGl0aW9uIG9mIGNtZHEuDQo+Pg0KPj4gTmV3 IHZlcnNpb24gb2YgVXNlciBHdWlkZSBoYWQgbW9kaWZ5IG1tYyBkcml2ZXIncyB1c2FnZSBmbG93 LCB3ZSBtYXkgDQo+PiBuZWVkIHRvIHJlbmV3IGNvZGUgdG8gcHJlY2lzZWx5IGZvbGxvdyB1c2Vy IGd1aWRlLg0KPj4NCj4+IE1vcmUgb3ZlciwgV2UgYWRkZWQgYSB3YWl0IHN0YXR1cyBmdW5jdGlv biB0byBzYXRpc2Z5IHN5bm9wc3lzIHVzZXIgDQo+PiBndWlkZSdzIGRlc2NyaXB0aW9uLCBzaW5j ZSB0aGlzIGZsb3cgbWlnaHQgYmUgc3BlY2lmaWMgaW4gc3lub3BzeXMgDQo+PiBob3N0IGRyaXZl ciBvbmx5Lg0KDQo+IC4uLg0KDQo+PiArICAgICBmb3IgKGkgPSAwOyBpIDwgaG9zdC0+ZG1hX25l bnRzOyBpKyssIHNnKyspIHsNCj4+ICsgICAgICAgICAgICAgZG1hX2xlbiA9IHNnX2RtYV9sZW4o c2cpOw0KPj4gKw0KPj4gKyAgICAgICAgICAgICAvKiBibGtfY250IG11c3QgYmUgdGhlIG11bHRp cGxlIG9mIDUxMigweDIwMCkgKi8NCj4+ICsgICAgICAgICAgICAgaWYgKGRtYV9sZW4gPCBTWl81 MTIpDQo+PiArICAgICAgICAgICAgICAgICAgICAgYmxrX2NudCA9IDE7DQo+PiArICAgICAgICAg ICAgIGVsc2UNCj4+ICsgICAgICAgICAgICAgICAgICAgICBibGtfY250ICA9IGRtYV9sZW4gPj4g OTsNCj4+ICsNCj4+ICsgICAgICAgICAgICAgcmVtYWluX2Jsa19jbnQgID0gYmxrX2NudDsNCj4+ ICsgICAgICAgICAgICAgZG1hX2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZyk7DQo+PiArDQo+PiAr ICAgICAgICAgICAgIHdoaWxlIChyZW1haW5fYmxrX2NudCkgew0KPj4gKyAgICAgICAgICAgICAg ICAgICAgIC8qIERXX01DSV9NQVhfU0NSSVBUX0JMSyBpcyB0aGUgbWF4DQo+PiArICAgICAgICAg ICAgICAgICAgICAgICogZm9yIGVhY2ggZGVzY3JpcHRvciByZWNvcmQNCj4+ICsgICAgICAgICAg ICAgICAgICAgICAgKi8NCj4+ICsgICAgICAgICAgICAgICAgICAgICBpZiAocmVtYWluX2Jsa19j bnQgPiBEV19NQ0lfTUFYX1NDUklQVF9CTEspDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjdXJfYmxrX2NudCA9IERXX01DSV9NQVhfU0NSSVBUX0JMSzsNCj4+ICsgICAgICAgICAg ICAgICAgICAgICBlbHNlDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJfYmxr X2NudCA9IHJlbWFpbl9ibGtfY250Ow0KPj4gKw0KPj4gKyAgICAgICAgICAgICAgICAgICAgIC8q IEluIFN5bm9wc3lzIERlc2lnbldhcmUgRGF0YWJvb2sgUGFnZSA4NCwNCg0KPiAvKg0KPiAqDQoN Cj4gIEkgbWVudGlvbmVkIGl0IGxhc3QgdGltZS4gVXNlIExpbnV4IGNvZGluZyBzdHlsZS4gRm9y IGVudGlyZSBwYXRjaHNldC4NCg0KVGhhbmtzIGZvciB5b3VyIHJlbWluZC4gU29ycnkgZm9yIGRp ZG4ndCBjb3JyZWN0IHNvbWUgb2YgTGludXggY29kaW5nIHN0eWxlIGVycm9yLg0KDQo+PiArICAg ICAgICAgICAgICAgICAgICAgICogVGhleSBtZW50aW9uZWQgdGhlIERNQSAxMjhNQiByZXN0cmlj dGlvbg0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAqLw0KPj4gKyAgICAgICAgICAgICAgICAg ICAgIGJlZ2luID0gZG1hX2FkZHIgLyBTWl8xMjhNOw0KPj4gKyAgICAgICAgICAgICAgICAgICAg IGVuZCA9IChkbWFfYWRkciArIGN1cl9ibGtfY250ICogU1pfNTEyKSAvIA0KPj4gKyBTWl8xMjhN Ow0KPj4gKw0KPj4gKyAgICAgICAgICAgICAgICAgICAgIC8qIElmIGJlZ2luIGFuZCBlbmQgaW4g dGhlIGRpZmZlcmVudCAxMjhNQiBtZW1vcnkgem9uZSAqLw0KPj4gKyAgICAgICAgICAgICAgICAg ICAgIGlmIChiZWdpbiAhPSBlbmQpDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj dXJfYmxrX2NudCA9IChlbmQgKiBTWl8xMjhNIC0gZG1hX2FkZHIpIA0KPj4gKyAvIFNaXzUxMjsN Cj4+ICsNCj4+ICsgICAgICAgICAgICAgICAgICAgICBpZiAoZG1hX2xlbiA8IFNaXzUxMikNCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcF92YWwgPSAoKGRtYV9sZW4pIDw8IDE2 KSB8IFZBTElEKDB4MSkgfCBBQ1QoMHg0KTsNCj4+ICsgICAgICAgICAgICAgICAgICAgICBlbHNl DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBfdmFsID0gKChjdXJfYmxrX2Nu dCAmIDB4N2YpIDw8IDI1KSB8IA0KPj4gKyBWQUxJRCgweDEpIHwgQUNUKDB4NCk7DQo+PiArDQo+ PiArICAgICAgICAgICAgICAgICAgICAgLyogTGFzdCBkZXNjcmlwdG9yICovDQo+PiArICAgICAg ICAgICAgICAgICAgICAgaWYgKGkgPT0gaG9zdC0+ZG1hX25lbnRzIC0gMSAmJiByZW1haW5fYmxr X2NudCA9PSBjdXJfYmxrX2NudCkNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRt cF92YWwgfD0gRU5EKDB4MSk7DQo+PiArDQo+PiArICAgICAgICAgICAgICAgICAgICAgZGVzY19i YXNlWzBdID0gIHRtcF92YWw7DQo+PiArICAgICAgICAgICAgICAgICAgICAgZGVzY19iYXNlWzFd ID0gIGRtYV9hZGRyOw0KPj4gKw0KPj4gKyAgICAgICAgICAgICAgICAgICAgIGRtYV9hZGRyID0g ZG1hX2FkZHIgKyAoY3VyX2Jsa19jbnQgPDwgOSk7DQo+PiArICAgICAgICAgICAgICAgICAgICAg cmVtYWluX2Jsa19jbnQgLT0gY3VyX2Jsa19jbnQ7DQo+PiArICAgICAgICAgICAgICAgICAgICAg ZGVzY19iYXNlICs9IDI7DQo+PiArICAgICAgICAgICAgIH0NCj4+ICsgICAgIH0NCj4+ICt9DQo+ PiArDQoNCj4gLi4uDQoNCj4+ICsNCj4+ICsjaWZkZWYgQ09ORklHX09GDQo+PiArc3RhdGljIHN0 cnVjdCBkd19tY2lfYm9hcmQgKmR3X21jaV9jcWVfcGFyc2VfZHQoc3RydWN0IGR3X21jaSAqaG9z dCkgDQo+PiArew0KPj4gKyAgICAgc3RydWN0IGR3X21jaV9ib2FyZCAqcGRhdGE7DQo+PiArICAg ICBzdHJ1Y3QgZGV2aWNlICpkZXYgPSBob3N0LT5kZXY7DQo+PiArICAgICBjb25zdCBzdHJ1Y3Qg ZHdfbWNpX2Rydl9kYXRhICpkcnZfZGF0YSA9IGhvc3QtPmRydl9kYXRhOw0KPj4gKyAgICAgaW50 IHJldDsNCj4+ICsgICAgIHUzMiBjbG9ja19mcmVxdWVuY3k7DQo+PiArDQo+PiArICAgICBwZGF0 YSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcGRhdGEpLCBHRlBfS0VSTkVMKTsNCj4+ICsg ICAgIGlmICghcGRhdGEpDQo+PiArICAgICAgICAgICAgIHJldHVybiBFUlJfUFRSKC1FTk9NRU0p Ow0KPj4gKw0KPj4gKyAgICAgLyogZmluZCByZXNldCBjb250cm9sbGVyIHdoZW4gZXhpc3QgKi8N Cj4+ICsgICAgIHBkYXRhLT5yc3RjID0gZGV2bV9yZXNldF9jb250cm9sX2dldF9vcHRpb25hbChk ZXYsICJyZXNldCIpOw0KDQo+IFdoZXJlIGlzIGl0IGRlc2NyaWJlZCBpbiB0aGUgYmluZGluZ3M/ DQoNCkkgd2lsbCBhZGQgaXQgaW4gbmV3IHZlcnNpb24gYW5kIHRlc3QgaXQuDQoNCj4+ICsgICAg IGlmIChJU19FUlIocGRhdGEtPnJzdGMpKSB7DQo+PiArICAgICAgICAgICAgIGlmIChQVFJfRVJS KHBkYXRhLT5yc3RjKSA9PSAtRVBST0JFX0RFRkVSKQ0KPj4gKyAgICAgICAgICAgICAgICAgICAg IHJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpOw0KPj4gKyAgICAgfQ0KPj4gKw0KPj4gKyAg ICAgZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgImNhcmQtZGV0ZWN0LWRlbGF5IiwNCg0K PiBXaGVyZSBpcyBpdCBkZXNjcmliZWQgaW4gdGhlIGJpbmRpbmdzPyBJdCdzIG5vdC4gVGhpcyBp cyB2NSBidXQsIHNvcnJ5LCBidXQgSSBkbyBub3Qgc2VlIG11Y2ggaW1wcm92ZW1lbnRzLiBZb3Ug c3RpbGwgc2VuZCBjb2RlIHdoaWNoIGNsZWFybHkgaXMgd3JvbmcuDQoNCkl0IGRvZXNuJ3QgbmVl ZCB0byBiZSBpbiB0aGUgYmluZGluZ3MsIEkgd2lsbCByZW1vdmUgdGhpcyB1c2VsZXNzIGNvZGUu DQoNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGRhdGEtPmRldGVjdF9kZWxh eV9tcyk7DQo+PiArDQo+PiArICAgICBpZiAoIWRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXYs ICJjbG9jay1mcmVxdWVuY3kiLCAmY2xvY2tfZnJlcXVlbmN5KSkNCj4+ICsgICAgICAgICAgICAg cGRhdGEtPmJ1c19oeiA9IGNsb2NrX2ZyZXF1ZW5jeTsNCg0KPiBEcm9wIHByb3BlcnR5LiBJIGRv bid0IHRoaW5rIGl0IGlzIG5lZWRlZC4gTU1DIGFuZCBDQ0YgaGFzIG90aGVyIHdheXMgdG8gZG8g aXQuDQoNCkFscmlnaHQsIEkgd2lsbCBkcm9wIGl0Lg0KDQo+PiArDQo+PiArICAgICBpZiAoZHJ2 X2RhdGEgJiYgZHJ2X2RhdGEtPnBhcnNlX2R0KSB7DQo+PiArICAgICAgICAgICAgIHJldCA9IGRy dl9kYXRhLT5wYXJzZV9kdChob3N0KTsNCj4+ICsgICAgICAgICAgICAgaWYgKHJldCkNCj4+ICsg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gRVJSX1BUUihyZXQpOw0KPj4gKyAgICAgfQ0KPj4g Kw0KPj4gKyAgICAgcmV0dXJuIHBkYXRhOw0KPj4gK30NCj4+ICsNCj4+ICsjZWxzZSAvKiBDT05G SUdfT0YgKi8NCj4+ICtzdGF0aWMgc3RydWN0IGR3X21jaV9ib2FyZCAqZHdfbWNpX2NxZV9wYXJz ZV9kdChzdHJ1Y3QgZHdfbWNpICpob3N0KSANCj4+ICt7DQo+PiArICAgICByZXR1cm4gRVJSX1BU UigtRUlOVkFMKTsNCj4+ICt9DQo+PiArI2VuZGlmIC8qIENPTkZJR19PRiAqLw0KPj4gKw0KPj4g K3N0YXRpYyB2b2lkIGR3X21jaV9jcWVfY3RvX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KSB7 DQo+PiArICAgICBzdHJ1Y3QgZHdfbWNpICpob3N0ID0gZnJvbV90aW1lcihob3N0LCB0LCB0aW1l cik7DQo+PiArDQo+PiArICAgICBpZiAoaG9zdC0+aW50X3dhaXRpbmcpIHsNCj4+ICsgICAgICAg ICAgICAgZGV2X2Vycihob3N0LT5kZXYsICJmaXJlZCwgb3Bjb2RlPSVkLCBhcmc9MHgleCwgaXJx IHN0YXR1cz0weCV4LCBlcnIgaXJxPTB4JXgsIGF1dG8gZXJyIGlycT0weCV4XG4iLA0KPj4gKyAg ICAgICAgICAgICAgICAgICAgIGhvc3QtPm9wY29kZSwgaG9zdC0+YXJnLA0KPj4gKyAgICAgICAg ICAgICAgICAgICAgIGhvc3QtPm5vcm1hbF9pbnRlcnJ1cHQsIGhvc3QtPmVycm9yX2ludGVycnVw dCwNCj4+ICsgICAgICAgICAgICAgICAgICAgICBob3N0LT5hdXRvX2Vycm9yX2ludGVycnVwdCk7 DQo+PiArDQo+PiArICAgICAgICAgICAgIGR3X21jaV9jbHJfc2lnbmFsX2ludChob3N0KTsNCj4+ ICsgICAgICAgICAgICAgZHdfbWNpX2dldF9pbnQoaG9zdCk7DQo+PiArDQo+PiArICAgICAgICAg ICAgIGNvbXBsZXRlKGhvc3QtPmludF93YWl0aW5nKTsNCj4+ICsgICAgIH0NCj4+ICt9DQo+PiAr DQo+PiArc3RhdGljIHZvaWQgZHdfbWNpX2NxaGNpX2luaXQoc3RydWN0IGR3X21jaSAqaG9zdCkg ew0KPj4gKyAgICAgaWYgKGhvc3QtPnBkYXRhICYmIChob3N0LT5wZGF0YS0+Y2FwczIgJiBNTUNf Q0FQMl9DUUUpKSB7DQo+PiArICAgICAgICAgICAgIGhvc3QtPmNxZSA9IGNxaGNpX3BsdGZtX2lu aXQoaG9zdC0+cGRldik7DQo+PiArICAgICAgICAgICAgIGlmIChQVFJfRVJSKGhvc3QtPmNxZSkg PT0gLUVJTlZBTCB8fA0KPj4gKyAgICAgICAgICAgICAgICAgUFRSX0VSUihob3N0LT5jcWUpID09 IC1FTk9NRU0gfHwNCj4+ICsgICAgICAgICAgICAgICAgIFBUUl9FUlIoaG9zdC0+Y3FlKSA9PSAt RUJVU1kpIHsNCj4+ICsgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKGhvc3QtPmRldiwgIlVu YWJsZSB0byBnZXQgdGhlIGNtZHEgcmVsYXRlZCBhdHRyaWJ1dGUsZXJyID0gJWxkXG4iLA0KPj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFRSX0VSUihob3N0LT5jcWUpKTsNCj4+ICsg ICAgICAgICAgICAgICAgICAgICBob3N0LT5jcWUgPSAwOw0KPj4gKyAgICAgICAgICAgICAgICAg ICAgIGhvc3QtPnBkYXRhLT5jYXBzMiAmPSB+KE1NQ19DQVAyX0NRRSB8IE1NQ19DQVAyX0NRRV9E Q01EKTsNCj4+ICsgICAgICAgICAgICAgfSBlbHNlIHsNCj4+ICsgICAgICAgICAgICAgICAgICAg ICBob3N0LT5jcWUtPm9wcyA9ICZkd19tY2lfY3FoY2lfaG9zdF9vcHM7DQo+PiArICAgICAgICAg ICAgICAgICAgICAgY3FoY2lfaW5pdChob3N0LT5jcWUsIGhvc3QtPnNsb3QtPm1tYywgMCk7DQo+ PiArICAgICAgICAgICAgIH0NCj4+ICsgICAgIH0NCj4+ICt9DQo+PiArDQo+PiAraW50IGR3X21j aV9jcWVfcHJvYmUoc3RydWN0IGR3X21jaSAqaG9zdCkgew0KPj4gKyAgICAgY29uc3Qgc3RydWN0 IGR3X21jaV9kcnZfZGF0YSAqZHJ2X2RhdGEgPSBob3N0LT5kcnZfZGF0YTsNCj4+ICsgICAgIGlu dCByZXQgPSAwOw0KPj4gKw0KPj4gKyAgICAgaWYgKCFob3N0LT5wZGF0YSkgew0KPj4gKyAgICAg ICAgICAgICBob3N0LT5wZGF0YSA9IGR3X21jaV9jcWVfcGFyc2VfZHQoaG9zdCk7DQo+PiArICAg ICAgICAgICAgIGlmIChQVFJfRVJSKGhvc3QtPnBkYXRhKSA9PSAtRVBST0JFX0RFRkVSKSB7DQo+ PiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FUFJPQkVfREVGRVI7DQo+PiArICAgICAg ICAgICAgIH0gZWxzZSBpZiAoSVNfRVJSKGhvc3QtPnBkYXRhKSkgew0KPj4gKyAgICAgICAgICAg ICAgICAgICAgIGRldl9lcnIoaG9zdC0+ZGV2LCAicGxhdGZvcm0gZGF0YSBub3QgYXZhaWxhYmxl XG4iKTsNCj4+ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4+ICsgICAg ICAgICAgICAgfQ0KPj4gKyAgICAgfQ0KPj4gKw0KPj4gKyAgICAgaG9zdC0+Yml1X2NsayA9IGRl dm1fY2xrX2dldChob3N0LT5kZXYsICJiaXUiKTsNCj4+ICsgICAgIGlmIChJU19FUlIoaG9zdC0+ Yml1X2NsaykpIHsNCj4+ICsgICAgICAgICAgICAgZGV2X2RiZyhob3N0LT5kZXYsICJiaXUgY2xv Y2sgbm90IGF2YWlsYWJsZVxuIik7DQo+PiArICAgICB9IGVsc2Ugew0KPj4gKyAgICAgICAgICAg ICByZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoaG9zdC0+Yml1X2Nsayk7DQo+PiArICAgICAgICAg ICAgIGlmIChyZXQpIHsNCj4+ICsgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKGhvc3QtPmRl diwgImZhaWxlZCB0byBlbmFibGUgYml1IGNsb2NrXG4iKTsNCj4+ICsgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gcmV0Ow0KPj4gKyAgICAgICAgICAgICB9DQo+PiArICAgICB9DQoNCj4gQWxs IHRoaXMgc2hvdWxkIGJlIHByb2JhYmx5IGRldm1fY2xrX2dldF9lbmFibGVkKCkuDQoNClRoYW5r cy4gV2Ugd2lsbCBjb3JyZWN0IGl0Lg0KDQo+PiArDQo+PiArICAgICBob3N0LT5jaXVfY2xrID0g ZGV2bV9jbGtfZ2V0KGhvc3QtPmRldiwgImNpdSIpOw0KPj4gKyAgICAgaWYgKElTX0VSUihob3N0 LT5jaXVfY2xrKSkgew0KPj4gKyAgICAgICAgICAgICBkZXZfZGJnKGhvc3QtPmRldiwgImNpdSBj bG9jayBub3QgYXZhaWxhYmxlXG4iKTsNCj4+ICsgICAgICAgICAgICAgaG9zdC0+YnVzX2h6ID0g aG9zdC0+cGRhdGEtPmJ1c19oejsNCj4+ICsgICAgIH0gZWxzZSB7DQo+PiArICAgICAgICAgICAg IHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShob3N0LT5jaXVfY2xrKTsNCj4+ICsgICAgICAgICAg ICAgaWYgKHJldCkgew0KPj4gKyAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoaG9zdC0+ZGV2 LCAiZmFpbGVkIHRvIGVuYWJsZSBjaXUgY2xvY2tcbiIpOw0KPj4gKyAgICAgICAgICAgICAgICAg ICAgIGdvdG8gZXJyX2Nsa19iaXU7DQo+PiArICAgICAgICAgICAgIH0NCj4+ICsNCj4+ICsgICAg ICAgICAgICAgaWYgKGhvc3QtPnBkYXRhLT5idXNfaHopIHsNCj4+ICsgICAgICAgICAgICAgICAg ICAgICByZXQgPSBjbGtfc2V0X3JhdGUoaG9zdC0+Y2l1X2NsaywgaG9zdC0+cGRhdGEtPmJ1c19o eik7DQo+PiArICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCkNCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRldl93YXJuKGhvc3QtPmRldiwNCj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJVbmFibGUgdG8gc2V0IGJ1cyByYXRlIHRvICV1SHpcbiIs DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0LT5wZGF0YS0+ YnVzX2h6KTsNCj4+ICsgICAgICAgICAgICAgfQ0KDQo+IEFsbCB0aGlzIHNob3VsZCBiZSBwcm9i YWJseSBkZXZtX2Nsa19nZXRfZW5hYmxlZCgpLg0KDQpUaGFua3MuIFdlIHdpbGwgY29ycmVjdCBp dC4NCg0KPj4gKyAgICAgICAgICAgICBob3N0LT5idXNfaHogPSBjbGtfZ2V0X3JhdGUoaG9zdC0+ Y2l1X2Nsayk7DQoNCj7jgIBTbyB0aGlzIHByb3ZlcyB0aGF0IHlvdXIgcHJvcGVydHkgY2xvY2st ZnJlcXVlbmN5IGlzIHVzZWxlc3MuDQoNClllcy4uLiB3ZSB3aWxsIHJlbW92ZSBpdCBpbiBiaW5k aW5ncy4NCg0KPj4gKyAgICAgfQ0KPj4gKw0KPj4gKyAgICAgaWYgKCFob3N0LT5idXNfaHopIHsN Cj4+ICsgICAgICAgICAgICAgZGV2X2Vycihob3N0LT5kZXYsDQo+PiArICAgICAgICAgICAgICAg ICAgICAgIlBsYXRmb3JtIGRhdGEgbXVzdCBzdXBwbHkgYnVzIHNwZWVkXG4iKTsNCj4+ICsgICAg ICAgICAgICAgcmV0ID0gLUVOT0RFVjsNCj4+ICsgICAgICAgICAgICAgZ290byBlcnJfY2xrX2Np dTsNCj4+ICsgICAgIH0NCj4+ICsNCj4+ICsgICAgIGlmICghSVNfRVJSKGhvc3QtPnBkYXRhLT5y c3RjKSkgew0KPj4gKyAgICAgICAgICAgICByZXNldF9jb250cm9sX2Fzc2VydChob3N0LT5wZGF0 YS0+cnN0Yyk7DQo+PiArICAgICAgICAgICAgIHVzbGVlcF9yYW5nZSgxMCwgNTApOw0KPj4gKyAg ICAgICAgICAgICByZXNldF9jb250cm9sX2RlYXNzZXJ0KGhvc3QtPnBkYXRhLT5yc3RjKTsNCj4+ ICsgICAgIH0NCj4+ICsNCj4+ICsgICAgIHRpbWVyX3NldHVwKCZob3N0LT50aW1lciwgZHdfbWNp X2NxZV9jdG9fdGltZXIsIDApOw0KPj4gKw0KPj4gKyAgICAgc3Bpbl9sb2NrX2luaXQoJmhvc3Qt PmxvY2spOw0KPj4gKyAgICAgc3Bpbl9sb2NrX2luaXQoJmhvc3QtPmlycV9sb2NrKTsNCj4+ICsg ICAgIGluaXRfcndzZW0oJmhvc3QtPmNyX3J3X3NlbSk7DQo+PiArICAgICB0YXNrbGV0X2luaXQo Jmhvc3QtPnRhc2tsZXQsIGR3X21jaV9jcWVfdGFza2xldF9mdW5jLCAodW5zaWduZWQgDQo+PiAr IGxvbmcpaG9zdCk7DQo+PiArDQo+PiArICAgICBkd19tY2lfY3FlX3NldHVwKGhvc3QpOw0KPj4g Kw0KPj4gKyAgICAgZHdfbWNpX2NxZV9pbml0X2RtYShob3N0KTsNCj4+ICsNCj4+ICsgICAgIGhv c3QtPnR1bmluZyA9IDA7DQo+PiArICAgICBob3N0LT5jdXJyZW50X3NwZWVkID0gMDsNCj4+ICsN Cj4+ICsgICAgIGlmIChkcnZfZGF0YSAmJiBkcnZfZGF0YS0+aW5pdCkgew0KPj4gKyAgICAgICAg ICAgICByZXQgPSBkcnZfZGF0YS0+aW5pdChob3N0KTsNCj4+ICsgICAgICAgICAgICAgaWYgKHJl dCkgew0KPj4gKyAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoaG9zdC0+ZGV2LA0KPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcGxlbWVudGF0aW9uIHNwZWNpZmljIGluaXQg ZmFpbGVkXG4iKTsNCj4+ICsgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycl9kbWF1bm1hcDsN Cj4+ICsgICAgICAgICAgICAgfQ0KPj4gKyAgICAgfQ0KPj4gKw0KPj4gKyAgICAgcmV0ID0gZHdf bWNpX2NxZV9pbml0X3Nsb3QoaG9zdCk7DQo+PiArICAgICBpZiAocmV0KSB7DQo+PiArICAgICAg ICAgICAgIGRldl9lcnIoaG9zdC0+ZGV2LCAic2xvdCAwIGluaXQgZmFpbGVkXG4iKTsNCj4+ICsg ICAgICAgICAgICAgZ290byBlcnJfZG1hdW5tYXA7DQo+PiArICAgICB9DQo+PiArDQo+PiArICAg ICByZXQgPSBkZXZtX3JlcXVlc3RfaXJxKGhvc3QtPmRldiwgaG9zdC0+aXJxLCBkd19tY2lfY3Fl X2ludGVycnVwdCwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdC0+aXJxX2Zs YWdzLCAiZHctbWNpLWNxZSIsIGhvc3QpOw0KPj4gKyAgICAgaWYgKHJldCkNCj4+ICsgICAgICAg ICAgICAgZ290byBlcnJfZG1hdW5tYXA7DQo+PiArDQo+PiArICAgICBkd19tY2lfY3FoY2lfaW5p dChob3N0KTsNCj4+ICsNCj4+ICsgICAgIHJldHVybiAwOw0KPj4gKw0KPj4gK2Vycl9kbWF1bm1h cDoNCj4+ICsgICAgIGlmICghSVNfRVJSKGhvc3QtPnBkYXRhLT5yc3RjKSkNCj4+ICsgICAgICAg ICAgICAgcmVzZXRfY29udHJvbF9hc3NlcnQoaG9zdC0+cGRhdGEtPnJzdGMpOw0KPj4gK2Vycl9j bGtfY2l1Og0KPj4gKyAgICAgY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhvc3QtPmNpdV9jbGspOw0K Pj4gKw0KPj4gK2Vycl9jbGtfYml1Og0KPj4gKyAgICAgY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhv c3QtPmJpdV9jbGspOw0KPj4gKw0KPj4gKyAgICAgcmV0dXJuIHJldDsNCj4+ICt9DQo+PiArRVhQ T1JUX1NZTUJPTChkd19tY2lfY3FlX3Byb2JlKTsNCg0KPiBFWFBPUlRfU1lNQk9MX0dQTA0KDQo+ IEkgc2hvdWxkIGhhdmUgYmVlbiBtb3JlIGV4cGxpY2l0Og0KPiBFWFBPUlRfU1lNQk9MX0dQTCBl dmVyeXdoZXJlLiBJbiB0aGlzIHBhdGNoc2V0IGFuZCBhbGwgeW91ciBmdXR1cmUgcGF0Y2hzZXRz LiBGb3IgYWxsIHlvdXIgY3VycmVudCBhbmQgZnV0dXJlIGNvZGUuDQoNClRoYW5rcy4gV2Ugd2ls bCB1c2UgRVhQT1JUX1NZTUJPTF9HUEwgaW4gYWxsIG91ciBwYXRjaHNldC4NCg0KPj4gKw0KPj4g K3ZvaWQgZHdfbWNpX2NxZV9yZW1vdmUoc3RydWN0IGR3X21jaSAqaG9zdCkgew0KPj4gKyAgICAg aWYgKGhvc3QtPnNsb3QpDQo+PiArICAgICAgICAgICAgIGR3X21jaV9jcWVfY2xlYW51cF9zbG90 KGhvc3QtPnNsb3QpOyANCj4+ICsNCj4+ICsgICAgIGlmICghSVNfRVJSKGhvc3QtPnBkYXRhLT5y c3RjKSkNCj4+ICsgICAgICAgICAgICAgcmVzZXRfY29udHJvbF9hc3NlcnQoaG9zdC0+cGRhdGEt PnJzdGMpOw0KPj4gKw0KPj4gKyAgICAgY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhvc3QtPmNpdV9j bGspOw0KPj4gKyAgICAgY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhvc3QtPmJpdV9jbGspOw0KPj4g K30NCj4+ICtFWFBPUlRfU1lNQk9MKGR3X21jaV9jcWVfcmVtb3ZlKTsNCj4+ICsNCg0KLS0tLS1P cmlnaW5hbCBNZXNzYWdlLS0tLS0NCkZyb206IEtyenlzenRvZiBLb3psb3dza2kgPGtyenlzenRv Zi5rb3psb3dza2lAbGluYXJvLm9yZz4gDQpTZW50OiBUaHVyc2RheSwgTm92ZW1iZXIgMiwgMjAy MyA0OjUzIFBNDQpUbzogSnlhbiBDaG91IFvlkajoirflroldIDxqeWFuY2hvdUByZWFsdGVrLmNv bT47IHVsZi5oYW5zc29uQGxpbmFyby5vcmc7IGFkcmlhbi5odW50ZXJAaW50ZWwuY29tOyBqaDgw LmNodW5nQHNhbXN1bmcuY29tOyByaXRlc2hoQGNvZGVhdXJvcmEub3JnOyByb2JoK2R0QGtlcm5l bC5vcmc7IGtyenlzenRvZi5rb3psb3dza2krZHRAbGluYXJvLm9yZzsgY29ub3IrZHRAa2VybmVs Lm9yZzsgYXN1dG9zaGRAY29kZWF1cm9yYS5vcmcNCkNjOiBwLnphYmVsQHBlbmd1dHJvbml4LmRl OyBsaW51eC1tbWNAdmdlci5rZXJuZWwub3JnOyBkZXZpY2V0cmVlQHZnZXIua2VybmVsLm9yZzsg bGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZzsgYXJuZEBhcm5kYi5kZTsgYnJpYW5ub3JyaXNA Y2hyb21pdW0ub3JnOyBkb3VnQHNjaG1vcmdhbC5jb207IHRvbnlodWFuZy5zdW5wbHVzQGdtYWls LmNvbTsgYWJlbC52ZXNhQGxpbmFyby5vcmc7IHdpbGxpYW0ucWl1QHN0YXJmaXZldGVjaC5jb20N ClN1YmplY3Q6IFJlOiBbUEFUQ0ggVjVdWzIvNF0gbW1jOiBBZGQgU3lub3BzeXMgRGVzaWduV2Fy ZSBtbWMgY21kcSBob3N0IGRyaXZlcg0KDQoNCkV4dGVybmFsIG1haWwuDQoNCg0KDQpPbiAwMi8x MS8yMDIzIDA5OjE1LCBKeWFuIENob3Ugd3JvdGU6DQo+IFdlIGltcGxlbWVudGVkIGNtZHEgZmVh dHVyZSBvbiBTeW5vcHN5cyBEZXNpZ25XYXJlIG1tYyBkcml2ZXIuDQo+IFRoZSBkaWZmZXJlbmNl IGJldHdlZW4gZHdfbW1jLmMgYW5kIGR3X21tY19jcWUuYyB3ZXJlIGRpc3RpbmN0IA0KPiByZWdp c3RlciBkZWZpbml0aW9ucywgbW1jIHVzZXIgZmxvdyBhbmQgdGhlIGFkZGl0aW9uIG9mIGNtZHEu DQo+DQo+IE5ldyB2ZXJzaW9uIG9mIFVzZXIgR3VpZGUgaGFkIG1vZGlmeSBtbWMgZHJpdmVyJ3Mg dXNhZ2UgZmxvdywgd2UgbWF5IA0KPiBuZWVkIHRvIHJlbmV3IGNvZGUgdG8gcHJlY2lzZWx5IGZv bGxvdyB1c2VyIGd1aWRlLg0KPg0KPiBNb3JlIG92ZXIsIFdlIGFkZGVkIGEgd2FpdCBzdGF0dXMg ZnVuY3Rpb24gdG8gc2F0aXNmeSBzeW5vcHN5cyB1c2VyIA0KPiBndWlkZSdzIGRlc2NyaXB0aW9u LCBzaW5jZSB0aGlzIGZsb3cgbWlnaHQgYmUgc3BlY2lmaWMgaW4gc3lub3BzeXMgDQo+IGhvc3Qg ZHJpdmVyIG9ubHkuDQoNCi4uLg0KDQo+ICsgICAgIGZvciAoaSA9IDA7IGkgPCBob3N0LT5kbWFf bmVudHM7IGkrKywgc2crKykgew0KPiArICAgICAgICAgICAgIGRtYV9sZW4gPSBzZ19kbWFfbGVu KHNnKTsNCj4gKw0KPiArICAgICAgICAgICAgIC8qIGJsa19jbnQgbXVzdCBiZSB0aGUgbXVsdGlw bGUgb2YgNTEyKDB4MjAwKSAqLw0KPiArICAgICAgICAgICAgIGlmIChkbWFfbGVuIDwgU1pfNTEy KQ0KPiArICAgICAgICAgICAgICAgICAgICAgYmxrX2NudCA9IDE7DQo+ICsgICAgICAgICAgICAg ZWxzZQ0KPiArICAgICAgICAgICAgICAgICAgICAgYmxrX2NudCAgPSBkbWFfbGVuID4+IDk7DQo+ ICsNCj4gKyAgICAgICAgICAgICByZW1haW5fYmxrX2NudCAgPSBibGtfY250Ow0KPiArICAgICAg ICAgICAgIGRtYV9hZGRyID0gc2dfZG1hX2FkZHJlc3Moc2cpOw0KPiArDQo+ICsgICAgICAgICAg ICAgd2hpbGUgKHJlbWFpbl9ibGtfY250KSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICAvKiBE V19NQ0lfTUFYX1NDUklQVF9CTEsgaXMgdGhlIG1heA0KPiArICAgICAgICAgICAgICAgICAgICAg ICogZm9yIGVhY2ggZGVzY3JpcHRvciByZWNvcmQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAq Lw0KPiArICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbWFpbl9ibGtfY250ID4gRFdfTUNJX01B WF9TQ1JJUFRfQkxLKQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJfYmxrX2Nu dCA9IERXX01DSV9NQVhfU0NSSVBUX0JMSzsNCj4gKyAgICAgICAgICAgICAgICAgICAgIGVsc2UN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyX2Jsa19jbnQgPSByZW1haW5fYmxr X2NudDsNCj4gKw0KPiArICAgICAgICAgICAgICAgICAgICAgLyogSW4gU3lub3BzeXMgRGVzaWdu V2FyZSBEYXRhYm9vayBQYWdlIDg0LA0KDQovKg0KICoNCg0KSSBtZW50aW9uZWQgaXQgbGFzdCB0 aW1lLiBVc2UgTGludXggY29kaW5nIHN0eWxlLiBGb3IgZW50aXJlIHBhdGNoc2V0Lg0KDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgKiBUaGV5IG1lbnRpb25lZCB0aGUgRE1BIDEyOE1CIHJlc3Ry aWN0aW9uDQo+ICsgICAgICAgICAgICAgICAgICAgICAgKi8NCj4gKyAgICAgICAgICAgICAgICAg ICAgIGJlZ2luID0gZG1hX2FkZHIgLyBTWl8xMjhNOw0KPiArICAgICAgICAgICAgICAgICAgICAg ZW5kID0gKGRtYV9hZGRyICsgY3VyX2Jsa19jbnQgKiBTWl81MTIpIC8gDQo+ICsgU1pfMTI4TTsN Cj4gKw0KPiArICAgICAgICAgICAgICAgICAgICAgLyogSWYgYmVnaW4gYW5kIGVuZCBpbiB0aGUg ZGlmZmVyZW50IDEyOE1CIG1lbW9yeSB6b25lICovDQo+ICsgICAgICAgICAgICAgICAgICAgICBp ZiAoYmVnaW4gIT0gZW5kKQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJfYmxr X2NudCA9IChlbmQgKiBTWl8xMjhNIC0gZG1hX2FkZHIpIA0KPiArIC8gU1pfNTEyOw0KPiArDQo+ ICsgICAgICAgICAgICAgICAgICAgICBpZiAoZG1hX2xlbiA8IFNaXzUxMikNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdG1wX3ZhbCA9ICgoZG1hX2xlbikgPDwgMTYpIHwgVkFMSUQo MHgxKSB8IEFDVCgweDQpOw0KPiArICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0bXBfdmFsID0gKChjdXJfYmxrX2NudCAmIDB4N2YpIDw8 IDI1KSB8IA0KPiArIFZBTElEKDB4MSkgfCBBQ1QoMHg0KTsNCj4gKw0KPiArICAgICAgICAgICAg ICAgICAgICAgLyogTGFzdCBkZXNjcmlwdG9yICovDQo+ICsgICAgICAgICAgICAgICAgICAgICBp ZiAoaSA9PSBob3N0LT5kbWFfbmVudHMgLSAxICYmIHJlbWFpbl9ibGtfY250ID09IGN1cl9ibGtf Y250KQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBfdmFsIHw9IEVORCgweDEp Ow0KPiArDQo+ICsgICAgICAgICAgICAgICAgICAgICBkZXNjX2Jhc2VbMF0gPSAgdG1wX3ZhbDsN Cj4gKyAgICAgICAgICAgICAgICAgICAgIGRlc2NfYmFzZVsxXSA9ICBkbWFfYWRkcjsNCj4gKw0K PiArICAgICAgICAgICAgICAgICAgICAgZG1hX2FkZHIgPSBkbWFfYWRkciArIChjdXJfYmxrX2Nu dCA8PCA5KTsNCj4gKyAgICAgICAgICAgICAgICAgICAgIHJlbWFpbl9ibGtfY250IC09IGN1cl9i bGtfY250Ow0KPiArICAgICAgICAgICAgICAgICAgICAgZGVzY19iYXNlICs9IDI7DQo+ICsgICAg ICAgICAgICAgfQ0KPiArICAgICB9DQo+ICt9DQo+ICsNCg0KLi4uDQoNCj4gKw0KPiArI2lmZGVm IENPTkZJR19PRg0KPiArc3RhdGljIHN0cnVjdCBkd19tY2lfYm9hcmQgKmR3X21jaV9jcWVfcGFy c2VfZHQoc3RydWN0IGR3X21jaSAqaG9zdCkgDQo+ICt7DQo+ICsgICAgIHN0cnVjdCBkd19tY2lf Ym9hcmQgKnBkYXRhOw0KPiArICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYgPSBob3N0LT5kZXY7DQo+ ICsgICAgIGNvbnN0IHN0cnVjdCBkd19tY2lfZHJ2X2RhdGEgKmRydl9kYXRhID0gaG9zdC0+ZHJ2 X2RhdGE7DQo+ICsgICAgIGludCByZXQ7DQo+ICsgICAgIHUzMiBjbG9ja19mcmVxdWVuY3k7DQo+ ICsNCj4gKyAgICAgcGRhdGEgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBkYXRhKSwgR0ZQ X0tFUk5FTCk7DQo+ICsgICAgIGlmICghcGRhdGEpDQo+ICsgICAgICAgICAgICAgcmV0dXJuIEVS Ul9QVFIoLUVOT01FTSk7DQo+ICsNCj4gKyAgICAgLyogZmluZCByZXNldCBjb250cm9sbGVyIHdo ZW4gZXhpc3QgKi8NCj4gKyAgICAgcGRhdGEtPnJzdGMgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0 X29wdGlvbmFsKGRldiwgInJlc2V0Iik7DQoNCldoZXJlIGlzIGl0IGRlc2NyaWJlZCBpbiB0aGUg YmluZGluZ3M/DQoNCj4gKyAgICAgaWYgKElTX0VSUihwZGF0YS0+cnN0YykpIHsNCj4gKyAgICAg ICAgICAgICBpZiAoUFRSX0VSUihwZGF0YS0+cnN0YykgPT0gLUVQUk9CRV9ERUZFUikNCj4gKyAg ICAgICAgICAgICAgICAgICAgIHJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpOw0KPiArICAg ICB9DQo+ICsNCj4gKyAgICAgZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgImNhcmQtZGV0 ZWN0LWRlbGF5IiwNCg0KV2hlcmUgaXMgaXQgZGVzY3JpYmVkIGluIHRoZSBiaW5kaW5ncz8gSXQn cyBub3QuIFRoaXMgaXMgdjUgYnV0LCBzb3JyeSwgYnV0IEkgZG8gbm90IHNlZSBtdWNoIGltcHJv dmVtZW50cy4gWW91IHN0aWxsIHNlbmQgY29kZSB3aGljaCBjbGVhcmx5IGlzIHdyb25nLg0KDQoN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwZGF0YS0+ZGV0ZWN0X2RlbGF5X21z KTsNCj4gKw0KPiArICAgICBpZiAoIWRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXYsICJjbG9j ay1mcmVxdWVuY3kiLCAmY2xvY2tfZnJlcXVlbmN5KSkNCj4gKyAgICAgICAgICAgICBwZGF0YS0+ YnVzX2h6ID0gY2xvY2tfZnJlcXVlbmN5Ow0KDQpEcm9wIHByb3BlcnR5LiBJIGRvbid0IHRoaW5r IGl0IGlzIG5lZWRlZC4gTU1DIGFuZCBDQ0YgaGFzIG90aGVyIHdheXMgdG8gZG8gaXQuDQoNCj4g Kw0KPiArICAgICBpZiAoZHJ2X2RhdGEgJiYgZHJ2X2RhdGEtPnBhcnNlX2R0KSB7DQo+ICsgICAg ICAgICAgICAgcmV0ID0gZHJ2X2RhdGEtPnBhcnNlX2R0KGhvc3QpOw0KPiArICAgICAgICAgICAg IGlmIChyZXQpDQo+ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRVJSX1BUUihyZXQpOw0K PiArICAgICB9DQo+ICsNCj4gKyAgICAgcmV0dXJuIHBkYXRhOw0KPiArfQ0KPiArDQo+ICsjZWxz ZSAvKiBDT05GSUdfT0YgKi8NCj4gK3N0YXRpYyBzdHJ1Y3QgZHdfbWNpX2JvYXJkICpkd19tY2lf Y3FlX3BhcnNlX2R0KHN0cnVjdCBkd19tY2kgKmhvc3QpIA0KPiArew0KPiArICAgICByZXR1cm4g RVJSX1BUUigtRUlOVkFMKTsNCj4gK30NCj4gKyNlbmRpZiAvKiBDT05GSUdfT0YgKi8NCj4gKw0K PiArc3RhdGljIHZvaWQgZHdfbWNpX2NxZV9jdG9fdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQp IHsNCj4gKyAgICAgc3RydWN0IGR3X21jaSAqaG9zdCA9IGZyb21fdGltZXIoaG9zdCwgdCwgdGlt ZXIpOw0KPiArDQo+ICsgICAgIGlmIChob3N0LT5pbnRfd2FpdGluZykgew0KPiArICAgICAgICAg ICAgIGRldl9lcnIoaG9zdC0+ZGV2LCAiZmlyZWQsIG9wY29kZT0lZCwgYXJnPTB4JXgsIGlycSBz dGF0dXM9MHgleCwgZXJyIGlycT0weCV4LCBhdXRvIGVyciBpcnE9MHgleFxuIiwNCj4gKyAgICAg ICAgICAgICAgICAgICAgIGhvc3QtPm9wY29kZSwgaG9zdC0+YXJnLA0KPiArICAgICAgICAgICAg ICAgICAgICAgaG9zdC0+bm9ybWFsX2ludGVycnVwdCwgaG9zdC0+ZXJyb3JfaW50ZXJydXB0LA0K PiArICAgICAgICAgICAgICAgICAgICAgaG9zdC0+YXV0b19lcnJvcl9pbnRlcnJ1cHQpOw0KPiAr DQo+ICsgICAgICAgICAgICAgZHdfbWNpX2Nscl9zaWduYWxfaW50KGhvc3QpOw0KPiArICAgICAg ICAgICAgIGR3X21jaV9nZXRfaW50KGhvc3QpOw0KPiArDQo+ICsgICAgICAgICAgICAgY29tcGxl dGUoaG9zdC0+aW50X3dhaXRpbmcpOw0KPiArICAgICB9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2 b2lkIGR3X21jaV9jcWhjaV9pbml0KHN0cnVjdCBkd19tY2kgKmhvc3QpIHsNCj4gKyAgICAgaWYg KGhvc3QtPnBkYXRhICYmIChob3N0LT5wZGF0YS0+Y2FwczIgJiBNTUNfQ0FQMl9DUUUpKSB7DQo+ ICsgICAgICAgICAgICAgaG9zdC0+Y3FlID0gY3FoY2lfcGx0Zm1faW5pdChob3N0LT5wZGV2KTsN Cj4gKyAgICAgICAgICAgICBpZiAoUFRSX0VSUihob3N0LT5jcWUpID09IC1FSU5WQUwgfHwNCj4g KyAgICAgICAgICAgICAgICAgUFRSX0VSUihob3N0LT5jcWUpID09IC1FTk9NRU0gfHwNCj4gKyAg ICAgICAgICAgICAgICAgUFRSX0VSUihob3N0LT5jcWUpID09IC1FQlVTWSkgew0KPiArICAgICAg ICAgICAgICAgICAgICAgZGV2X2Vycihob3N0LT5kZXYsICJVbmFibGUgdG8gZ2V0IHRoZSBjbWRx IHJlbGF0ZWQgYXR0cmlidXRlLGVyciA9ICVsZFxuIiwNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUFRSX0VSUihob3N0LT5jcWUpKTsNCj4gKyAgICAgICAgICAgICAgICAgICAgIGhv c3QtPmNxZSA9IDA7DQo+ICsgICAgICAgICAgICAgICAgICAgICBob3N0LT5wZGF0YS0+Y2FwczIg Jj0gfihNTUNfQ0FQMl9DUUUgfCBNTUNfQ0FQMl9DUUVfRENNRCk7DQo+ICsgICAgICAgICAgICAg fSBlbHNlIHsNCj4gKyAgICAgICAgICAgICAgICAgICAgIGhvc3QtPmNxZS0+b3BzID0gJmR3X21j aV9jcWhjaV9ob3N0X29wczsNCj4gKyAgICAgICAgICAgICAgICAgICAgIGNxaGNpX2luaXQoaG9z dC0+Y3FlLCBob3N0LT5zbG90LT5tbWMsIDApOw0KPiArICAgICAgICAgICAgIH0NCj4gKyAgICAg fQ0KPiArfQ0KPiArDQo+ICtpbnQgZHdfbWNpX2NxZV9wcm9iZShzdHJ1Y3QgZHdfbWNpICpob3N0 KSB7DQo+ICsgICAgIGNvbnN0IHN0cnVjdCBkd19tY2lfZHJ2X2RhdGEgKmRydl9kYXRhID0gaG9z dC0+ZHJ2X2RhdGE7DQo+ICsgICAgIGludCByZXQgPSAwOw0KPiArDQo+ICsgICAgIGlmICghaG9z dC0+cGRhdGEpIHsNCj4gKyAgICAgICAgICAgICBob3N0LT5wZGF0YSA9IGR3X21jaV9jcWVfcGFy c2VfZHQoaG9zdCk7DQo+ICsgICAgICAgICAgICAgaWYgKFBUUl9FUlIoaG9zdC0+cGRhdGEpID09 IC1FUFJPQkVfREVGRVIpIHsNCj4gKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRVBST0JF X0RFRkVSOw0KPiArICAgICAgICAgICAgIH0gZWxzZSBpZiAoSVNfRVJSKGhvc3QtPnBkYXRhKSkg ew0KPiArICAgICAgICAgICAgICAgICAgICAgZGV2X2Vycihob3N0LT5kZXYsICJwbGF0Zm9ybSBk YXRhIG5vdCBhdmFpbGFibGVcbiIpOw0KPiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1F SU5WQUw7DQo+ICsgICAgICAgICAgICAgfQ0KPiArICAgICB9DQo+ICsNCj4gKyAgICAgaG9zdC0+ Yml1X2NsayA9IGRldm1fY2xrX2dldChob3N0LT5kZXYsICJiaXUiKTsNCj4gKyAgICAgaWYgKElT X0VSUihob3N0LT5iaXVfY2xrKSkgew0KPiArICAgICAgICAgICAgIGRldl9kYmcoaG9zdC0+ZGV2 LCAiYml1IGNsb2NrIG5vdCBhdmFpbGFibGVcbiIpOw0KPiArICAgICB9IGVsc2Ugew0KPiArICAg ICAgICAgICAgIHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShob3N0LT5iaXVfY2xrKTsNCj4gKyAg ICAgICAgICAgICBpZiAocmV0KSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKGhv c3QtPmRldiwgImZhaWxlZCB0byBlbmFibGUgYml1IGNsb2NrXG4iKTsNCj4gKyAgICAgICAgICAg ICAgICAgICAgIHJldHVybiByZXQ7DQo+ICsgICAgICAgICAgICAgfQ0KPiArICAgICB9DQoNCkFs bCB0aGlzIHNob3VsZCBiZSBwcm9iYWJseSBkZXZtX2Nsa19nZXRfZW5hYmxlZCgpLg0KDQo+ICsN Cj4gKyAgICAgaG9zdC0+Y2l1X2NsayA9IGRldm1fY2xrX2dldChob3N0LT5kZXYsICJjaXUiKTsN Cj4gKyAgICAgaWYgKElTX0VSUihob3N0LT5jaXVfY2xrKSkgew0KPiArICAgICAgICAgICAgIGRl dl9kYmcoaG9zdC0+ZGV2LCAiY2l1IGNsb2NrIG5vdCBhdmFpbGFibGVcbiIpOw0KPiArICAgICAg ICAgICAgIGhvc3QtPmJ1c19oeiA9IGhvc3QtPnBkYXRhLT5idXNfaHo7DQo+ICsgICAgIH0gZWxz ZSB7DQo+ICsgICAgICAgICAgICAgcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGhvc3QtPmNpdV9j bGspOw0KPiArICAgICAgICAgICAgIGlmIChyZXQpIHsNCj4gKyAgICAgICAgICAgICAgICAgICAg IGRldl9lcnIoaG9zdC0+ZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBjaXUgY2xvY2tcbiIpOw0KPiAr ICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJfY2xrX2JpdTsNCj4gKyAgICAgICAgICAgICB9 DQo+ICsNCj4gKyAgICAgICAgICAgICBpZiAoaG9zdC0+cGRhdGEtPmJ1c19oeikgew0KPiArICAg ICAgICAgICAgICAgICAgICAgcmV0ID0gY2xrX3NldF9yYXRlKGhvc3QtPmNpdV9jbGssIGhvc3Qt PnBkYXRhLT5idXNfaHopOw0KPiArICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCkNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X3dhcm4oaG9zdC0+ZGV2LA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVW5hYmxlIHRvIHNldCBidXMgcmF0ZSB0 byAldUh6XG4iLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0 LT5wZGF0YS0+YnVzX2h6KTsNCj4gKyAgICAgICAgICAgICB9DQoNCkFsbCB0aGlzIHNob3VsZCBi ZSBwcm9iYWJseSBkZXZtX2Nsa19nZXRfZW5hYmxlZCgpLg0KDQoNCj4gKyAgICAgICAgICAgICBo b3N0LT5idXNfaHogPSBjbGtfZ2V0X3JhdGUoaG9zdC0+Y2l1X2Nsayk7DQoNClNvIHRoaXMgcHJv dmVzIHRoYXQgeW91ciBwcm9wZXJ0eSBjbG9jay1mcmVxdWVuY3kgaXMgdXNlbGVzcy4NCg0KPiAr ICAgICB9DQo+ICsNCj4gKyAgICAgaWYgKCFob3N0LT5idXNfaHopIHsNCj4gKyAgICAgICAgICAg ICBkZXZfZXJyKGhvc3QtPmRldiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICJQbGF0Zm9ybSBk YXRhIG11c3Qgc3VwcGx5IGJ1cyBzcGVlZFxuIik7DQo+ICsgICAgICAgICAgICAgcmV0ID0gLUVO T0RFVjsNCj4gKyAgICAgICAgICAgICBnb3RvIGVycl9jbGtfY2l1Ow0KPiArICAgICB9DQo+ICsN Cj4gKyAgICAgaWYgKCFJU19FUlIoaG9zdC0+cGRhdGEtPnJzdGMpKSB7DQo+ICsgICAgICAgICAg ICAgcmVzZXRfY29udHJvbF9hc3NlcnQoaG9zdC0+cGRhdGEtPnJzdGMpOw0KPiArICAgICAgICAg ICAgIHVzbGVlcF9yYW5nZSgxMCwgNTApOw0KPiArICAgICAgICAgICAgIHJlc2V0X2NvbnRyb2xf ZGVhc3NlcnQoaG9zdC0+cGRhdGEtPnJzdGMpOw0KPiArICAgICB9DQo+ICsNCj4gKyAgICAgdGlt ZXJfc2V0dXAoJmhvc3QtPnRpbWVyLCBkd19tY2lfY3FlX2N0b190aW1lciwgMCk7DQo+ICsNCj4g KyAgICAgc3Bpbl9sb2NrX2luaXQoJmhvc3QtPmxvY2spOw0KPiArICAgICBzcGluX2xvY2tfaW5p dCgmaG9zdC0+aXJxX2xvY2spOw0KPiArICAgICBpbml0X3J3c2VtKCZob3N0LT5jcl9yd19zZW0p Ow0KPiArICAgICB0YXNrbGV0X2luaXQoJmhvc3QtPnRhc2tsZXQsIGR3X21jaV9jcWVfdGFza2xl dF9mdW5jLCAodW5zaWduZWQgDQo+ICsgbG9uZylob3N0KTsNCj4gKw0KPiArICAgICBkd19tY2lf Y3FlX3NldHVwKGhvc3QpOw0KPiArDQo+ICsgICAgIGR3X21jaV9jcWVfaW5pdF9kbWEoaG9zdCk7 DQo+ICsNCj4gKyAgICAgaG9zdC0+dHVuaW5nID0gMDsNCj4gKyAgICAgaG9zdC0+Y3VycmVudF9z cGVlZCA9IDA7DQo+ICsNCj4gKyAgICAgaWYgKGRydl9kYXRhICYmIGRydl9kYXRhLT5pbml0KSB7 DQo+ICsgICAgICAgICAgICAgcmV0ID0gZHJ2X2RhdGEtPmluaXQoaG9zdCk7DQo+ICsgICAgICAg ICAgICAgaWYgKHJldCkgew0KPiArICAgICAgICAgICAgICAgICAgICAgZGV2X2Vycihob3N0LT5k ZXYsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbXBsZW1lbnRhdGlvbiBzcGVj aWZpYyBpbml0IGZhaWxlZFxuIik7DQo+ICsgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycl9k bWF1bm1hcDsNCj4gKyAgICAgICAgICAgICB9DQo+ICsgICAgIH0NCj4gKw0KPiArICAgICByZXQg PSBkd19tY2lfY3FlX2luaXRfc2xvdChob3N0KTsNCj4gKyAgICAgaWYgKHJldCkgew0KPiArICAg ICAgICAgICAgIGRldl9lcnIoaG9zdC0+ZGV2LCAic2xvdCAwIGluaXQgZmFpbGVkXG4iKTsNCj4g KyAgICAgICAgICAgICBnb3RvIGVycl9kbWF1bm1hcDsNCj4gKyAgICAgfQ0KPiArDQo+ICsgICAg IHJldCA9IGRldm1fcmVxdWVzdF9pcnEoaG9zdC0+ZGV2LCBob3N0LT5pcnEsIGR3X21jaV9jcWVf aW50ZXJydXB0LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3QtPmlycV9mbGFn cywgImR3LW1jaS1jcWUiLCBob3N0KTsNCj4gKyAgICAgaWYgKHJldCkNCj4gKyAgICAgICAgICAg ICBnb3RvIGVycl9kbWF1bm1hcDsNCj4gKw0KPiArICAgICBkd19tY2lfY3FoY2lfaW5pdChob3N0 KTsNCj4gKw0KPiArICAgICByZXR1cm4gMDsNCj4gKw0KPiArZXJyX2RtYXVubWFwOg0KPiArICAg ICBpZiAoIUlTX0VSUihob3N0LT5wZGF0YS0+cnN0YykpDQo+ICsgICAgICAgICAgICAgcmVzZXRf Y29udHJvbF9hc3NlcnQoaG9zdC0+cGRhdGEtPnJzdGMpOw0KPiArZXJyX2Nsa19jaXU6DQo+ICsg ICAgIGNsa19kaXNhYmxlX3VucHJlcGFyZShob3N0LT5jaXVfY2xrKTsNCj4gKw0KPiArZXJyX2Ns a19iaXU6DQo+ICsgICAgIGNsa19kaXNhYmxlX3VucHJlcGFyZShob3N0LT5iaXVfY2xrKTsNCj4g Kw0KPiArICAgICByZXR1cm4gcmV0Ow0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTChkd19tY2lfY3Fl X3Byb2JlKTsNCg0KRVhQT1JUX1NZTUJPTF9HUEwNCg0KSSBzaG91bGQgaGF2ZSBiZWVuIG1vcmUg ZXhwbGljaXQ6DQpFWFBPUlRfU1lNQk9MX0dQTCBldmVyeXdoZXJlLiBJbiB0aGlzIHBhdGNoc2V0 IGFuZCBhbGwgeW91ciBmdXR1cmUgcGF0Y2hzZXRzLiBGb3IgYWxsIHlvdXIgY3VycmVudCBhbmQg ZnV0dXJlIGNvZGUuDQoNCj4gKw0KPiArdm9pZCBkd19tY2lfY3FlX3JlbW92ZShzdHJ1Y3QgZHdf bWNpICpob3N0KSB7DQo+ICsgICAgIGlmIChob3N0LT5zbG90KQ0KPiArICAgICAgICAgICAgIGR3 X21jaV9jcWVfY2xlYW51cF9zbG90KGhvc3QtPnNsb3QpOw0KPiArDQo+ICsgICAgIGlmICghSVNf RVJSKGhvc3QtPnBkYXRhLT5yc3RjKSkNCj4gKyAgICAgICAgICAgICByZXNldF9jb250cm9sX2Fz c2VydChob3N0LT5wZGF0YS0+cnN0Yyk7DQo+ICsNCj4gKyAgICAgY2xrX2Rpc2FibGVfdW5wcmVw YXJlKGhvc3QtPmNpdV9jbGspOw0KPiArICAgICBjbGtfZGlzYWJsZV91bnByZXBhcmUoaG9zdC0+ Yml1X2Nsayk7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MKGR3X21jaV9jcWVfcmVtb3ZlKTsNCj4g Kw0KDQoNCg0KDQpCZXN0IHJlZ2FyZHMsDQpLcnp5c3p0b2YNCg0K