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=-6.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B882AC3F2CE for ; Fri, 28 Feb 2020 00:55:10 +0000 (UTC) Received: from ml01.01.org (ml01.01.org [198.145.21.10]) (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 8EC99246A6 for ; Fri, 28 Feb 2020 00:55:10 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8EC99246A6 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=au1.ibm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-nvdimm-bounces@lists.01.org Received: from ml01.vlan13.01.org (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 2509210FC36D4; Thu, 27 Feb 2020 16:56:02 -0800 (PST) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=148.163.158.5; helo=mx0b-001b2d01.pphosted.com; envelope-from=alastair@au1.ibm.com; receiver= Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 48ED010FC36D4 for ; Thu, 27 Feb 2020 16:55:59 -0800 (PST) Received: from pps.filterd (m0127361.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 01S0qOOs102992 for ; Thu, 27 Feb 2020 19:55:06 -0500 Received: from e06smtp05.uk.ibm.com (e06smtp05.uk.ibm.com [195.75.94.101]) by mx0a-001b2d01.pphosted.com with ESMTP id 2yepy32sku-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Thu, 27 Feb 2020 19:55:05 -0500 Received: from localhost by e06smtp05.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 28 Feb 2020 00:55:03 -0000 Received: from b06cxnps4076.portsmouth.uk.ibm.com (9.149.109.198) by e06smtp05.uk.ibm.com (192.168.101.135) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Fri, 28 Feb 2020 00:54:55 -0000 Received: from d06av26.portsmouth.uk.ibm.com (d06av26.portsmouth.uk.ibm.com [9.149.105.62]) by b06cxnps4076.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 01S0ssXB40566882 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 28 Feb 2020 00:54:54 GMT Received: from d06av26.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 85B77AE056; Fri, 28 Feb 2020 00:54:54 +0000 (GMT) Received: from d06av26.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id D166BAE045; Fri, 28 Feb 2020 00:54:53 +0000 (GMT) Received: from ozlabs.au.ibm.com (unknown [9.192.253.14]) by d06av26.portsmouth.uk.ibm.com (Postfix) with ESMTP; Fri, 28 Feb 2020 00:54:53 +0000 (GMT) Received: from adsilva.ozlabs.ibm.com (haven.au.ibm.com [9.192.254.114]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.au.ibm.com (Postfix) with ESMTPSA id E7A99A01F5; Fri, 28 Feb 2020 11:54:48 +1100 (AEDT) Subject: Re: [PATCH v3 10/27] powerpc: Add driver for OpenCAPI Persistent Memory From: "Alastair D'Silva" To: Frederic Barrat Date: Fri, 28 Feb 2020 11:54:52 +1100 In-Reply-To: References: <20200221032720.33893-1-alastair@au1.ibm.com> <20200221032720.33893-11-alastair@au1.ibm.com> Organization: IBM Australia User-Agent: Evolution 3.34.4 (3.34.4-1.fc31) MIME-Version: 1.0 X-TM-AS-GCONF: 00 x-cbid: 20022800-0020-0000-0000-000003AE4741 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 20022800-0021-0000-0000-000022066888 Message-Id: X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138,18.0.572 definitions=2020-02-27_08:2020-02-26,2020-02-27 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 suspectscore=2 mlxscore=0 spamscore=0 phishscore=0 adultscore=0 impostorscore=0 bulkscore=0 clxscore=1015 malwarescore=0 mlxlogscore=999 priorityscore=1501 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2001150001 definitions=main-2002280005 Message-ID-Hash: 54SMKKGGBUIAAGBXFVM4QRCJBLJPOXEZ X-Message-ID-Hash: 54SMKKGGBUIAAGBXFVM4QRCJBLJPOXEZ X-MailFrom: alastair@au1.ibm.com X-Mailman-Rule-Hits: nonmember-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation CC: "Aneesh Kumar K . V" , Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman , Andrew Donnellan , Arnd Bergmann , Greg Kroah-Hartman , Andrew Morton , Mauro Carvalho Chehab , "David S. Miller" , Rob Herring , Anton Blanchard , Krzysztof Kozlowski , Mahesh Salgaonkar , Madhavan Srinivasan , =?ISO-8859-1?Q?C=E9dric?= Le Goater , Anju T Sudhakar , Hari Bathini , Thomas Gleixner , Greg Kurz , Nicholas Piggin , Masahiro Yamada , Alexey Kardashevskiy , linux-kernel@vger.kernel.org, linuxppc- dev@lists.ozlabs.org, linux-nvdimm@lists.01.org, linux-mm@kvack.org X-Mailman-Version: 3.1.1 Precedence: list List-Id: "Linux-nvdimm developer list." Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 T24gVGh1LCAyMDIwLTAyLTI3IGF0IDIxOjQ0ICswMTAwLCBGcmVkZXJpYyBCYXJyYXQgd3JvdGU6 DQo+IA0KPiBMZSAyMS8wMi8yMDIwIMOgIDA0OjI3LCBBbGFzdGFpciBEJ1NpbHZhIGEgw6ljcml0 IDoNCj4gPiBGcm9tOiBBbGFzdGFpciBEJ1NpbHZhIDxhbGFzdGFpckBkLXNpbHZhLm9yZz4NCj4g PiANCj4gPiBUaGlzIGRyaXZlciBleHBvc2VzIExQQyBtZW1vcnkgb24gT3BlbkNBUEkgcG1lbSBj YXJkcw0KPiA+IGFzIGFuIE5WRElNTSwgYWxsb3dpbmcgdGhlIGV4aXN0aW5nIG52cmFtIGluZnJh c3RydWN0dXJlDQo+ID4gdG8gYmUgdXNlZC4NCj4gPiANCj4gPiBOYW1lc3BhY2UgbWV0YWRhdGEg aXMgc3RvcmVkIG9uIHRoZSBtZWRpYSBpdHNlbGYsIHNvDQo+ID4gc2NtX3Jlc2VydmVfbWV0YWRh dGEoKSBtYXBzIDEgc2VjdGlvbidzIHdvcnRoIG9mIFBNRU0gc3RvcmFnZQ0KPiA+IGF0IHRoZSBz dGFydCB0byBob2xkIHRoaXMuIFRoZSByZXN0IG9mIHRoZSBQTUVNIHJhbmdlIGlzIHJlZ2lzdGVy ZWQNCj4gPiB3aXRoIGxpYm52ZGltbSBhcyBhbiBudmRpbW0uIHNjbV9uZGN0bF9jb25maWdfcmVh ZC93cml0ZS9zaXplKCkNCj4gPiBwcm92aWRlDQo+ID4gY2FsbGJhY2tzIHRvIGxpYm52ZGltbSB0 byBhY2Nlc3MgdGhlIG1ldGFkYXRhLg0KPiA+IA0KPiA+IFNpZ25lZC1vZmYtYnk6IEFsYXN0YWly IEQnU2lsdmEgPGFsYXN0YWlyQGQtc2lsdmEub3JnPg0KPiA+IC0tLQ0KPiA+ICAgYXJjaC9wb3dl cnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWcgICAgICAgIHwgICAzICsNCj4gPiAgIGFyY2gv cG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9NYWtlZmlsZSAgICAgICB8ICAgMSArDQo+ID4gICBh cmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvcG1lbS9LY29uZmlnICAgfCAgMTUgKw0KPiA+ ICAgYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L3BtZW0vTWFrZWZpbGUgIHwgICA3ICsN Cj4gPiAgIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9wbWVtL29jeGwuYyAgICB8IDQ3 Mw0KPiA+ICsrKysrKysrKysrKysrKysrKw0KPiA+ICAgLi4uL3BsYXRmb3Jtcy9wb3dlcm52L3Bt ZW0vb2N4bF9pbnRlcm5hbC5oICAgIHwgIDI4ICsrDQo+ID4gICA2IGZpbGVzIGNoYW5nZWQsIDUy NyBpbnNlcnRpb25zKCspDQo+ID4gICBjcmVhdGUgbW9kZSAxMDA2NDQgYXJjaC9wb3dlcnBjL3Bs YXRmb3Jtcy9wb3dlcm52L3BtZW0vS2NvbmZpZw0KPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGFy Y2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9wbWVtL01ha2VmaWxlDQo+ID4gICBjcmVhdGUg bW9kZSAxMDA2NDQgYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L3BtZW0vb2N4bC5jDQo+ ID4gICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4gPiBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2Vy bnYvcG1lbS9vY3hsX2ludGVybmFsLmgNCj4gPiANCj4gPiBkaWZmIC0tZ2l0IGEvYXJjaC9wb3dl cnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWcNCj4gPiBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9y bXMvcG93ZXJudi9LY29uZmlnDQo+ID4gaW5kZXggOTM4ODAzZWFiMGFkLi5mYzg5NzZhZjBlNTIg MTAwNjQ0DQo+ID4gLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWcN Cj4gPiArKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvS2NvbmZpZw0KPiA+IEBA IC01MCwzICs1MCw2IEBAIGNvbmZpZyBQUENfVkFTDQo+ID4gICBjb25maWcgU0NPTV9ERUJVR0ZT DQo+ID4gICAJYm9vbCAiRXhwb3NlIFNDT00gY29udHJvbGxlcnMgdmlhIGRlYnVnZnMiDQo+ID4g ICAJZGVwZW5kcyBvbiBERUJVR19GUw0KPiA+ICsNCj4gPiArc291cmNlICJhcmNoL3Bvd2VycGMv cGxhdGZvcm1zL3Bvd2VybnYvcG1lbS9LY29uZmlnIg0KPiA+ICsNCj4gPiBkaWZmIC0tZ2l0IGEv YXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L01ha2VmaWxlDQo+ID4gYi9hcmNoL3Bvd2Vy cGMvcGxhdGZvcm1zL3Bvd2VybnYvTWFrZWZpbGUNCj4gPiBpbmRleCBjMGY4MTIwMDQ1YzMuLjBi YmQ3Mjk4OGI2ZiAxMDA2NDQNCj4gPiAtLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2Vy bnYvTWFrZWZpbGUNCj4gPiArKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvTWFr ZWZpbGUNCj4gPiBAQCAtMjEsMyArMjEsNCBAQCBvYmotJChDT05GSUdfUFBDX1ZBUykJKz0gdmFz Lm8gdmFzLXdpbmRvdy5vDQo+ID4gdmFzLWRlYnVnLm8NCj4gPiAgIG9iai0kKENPTkZJR19PQ1hM X0JBU0UpCSs9IG9jeGwubw0KPiA+ICAgb2JqLSQoQ09ORklHX1NDT01fREVCVUdGUykgKz0gb3Bh bC14c2NvbS5vDQo+ID4gICBvYmotJChDT05GSUdfUFBDX1NFQ1VSRV9CT09UKSArPSBvcGFsLXNl Y3Zhci5vDQo+ID4gK29iai0kKENPTkZJR19MSUJOVkRJTU0pICs9IHBtZW0vDQo+ID4gZGlmZiAt LWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9wbWVtL0tjb25maWcNCj4gPiBi L2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9wbWVtL0tjb25maWcNCj4gPiBuZXcgZmls ZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uYzVkOTI3NTIwOTIwDQo+ID4g LS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9w bWVtL0tjb25maWcNCj4gPiBAQCAtMCwwICsxLDE1IEBADQo+ID4gKyMgU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjAtb25seQ0KPiA+ICtpZiBMSUJOVkRJTU0NCj4gPiArDQo+ID4gK2Nv bmZpZyBPQ1hMX1BNRU0NCj4gPiArCXRyaXN0YXRlICJPcGVuQ0FQSSBQZXJzaXN0ZW50IE1lbW9y eSINCj4gPiArCWRlcGVuZHMgb24gTElCTlZESU1NICYmIFBQQ19QT1dFUk5WICYmIFBDSSAmJiBF RUggJiYNCj4gPiBaT05FX0RFVklDRSAmJiBPQ1hMDQo+ID4gKwloZWxwDQo+ID4gKwkgIEV4cG9z ZXMgZGV2aWNlcyB0aGF0IGltcGxlbWVudCB0aGUgT3BlbkNBUEkgU3RvcmFnZSBDbGFzcw0KPiA+ IE1lbW9yeQ0KPiA+ICsJICBzcGVjaWZpY2F0aW9uIGFzIHBlcnNpc3RlbnQgbWVtb3J5IHJlZ2lv bnMuIFlvdSBtYXkgYWxzbyB3YW50DQo+ID4gKwkgIERFVl9EQVgsIERFVl9EQVhfUE1FTSAmIEZT X0RBWCBpZiB5b3UgcGxhbiBvbiB1c2luZyBEQVgNCj4gPiBkZXZpY2VzDQo+ID4gKwkgIHN0YWNr ZWQgb24gdG9wIG9mIHRoaXMgZHJpdmVyLg0KPiA+ICsNCj4gPiArCSAgU2VsZWN0IE4gaWYgdW5z dXJlLg0KPiA+ICsNCj4gPiArZW5kaWYNCj4gPiBkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3Bs YXRmb3Jtcy9wb3dlcm52L3BtZW0vTWFrZWZpbGUNCj4gPiBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9y bXMvcG93ZXJudi9wbWVtL01ha2VmaWxlDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBp bmRleCAwMDAwMDAwMDAwMDAuLjFjNTVjNDE5MzE3NQ0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiAr KysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvcG1lbS9NYWtlZmlsZQ0KPiA+IEBA IC0wLDAgKzEsNyBAQA0KPiA+ICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQo+ ID4gKw0KPiA+ICtjY2ZsYWdzLSQoQ09ORklHX1BQQ19XRVJST1IpCSs9IC1XZXJyb3INCj4gPiAr DQo+ID4gK29iai0kKENPTkZJR19PQ1hMX1BNRU0pICs9IG9jeGxwbWVtLm8NCj4gPiArDQo+ID4g K29jeGxwbWVtLXkgOj0gb2N4bC5vDQo+ID4gZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0 Zm9ybXMvcG93ZXJudi9wbWVtL29jeGwuYw0KPiA+IGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9w b3dlcm52L3BtZW0vb2N4bC5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAw MDAwMDAwMDAwMDAuLjNjNGVlYjVkY2MwZg0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9h cmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvcG1lbS9vY3hsLmMNCj4gPiBAQCAtMCwwICsx LDQ3MyBAQA0KPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWQNCj4gPiArLy8gQ29weXJpZ2h0IDIwMTkg SUJNIENvcnAuDQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBBIGRyaXZlciBmb3IgT3BlbkNBUEkg ZGV2aWNlcyB0aGF0IGltcGxlbWVudCB0aGUgU3RvcmFnZSBDbGFzcw0KPiA+ICsgKiBNZW1vcnkg c3BlY2lmaWNhdGlvbi4NCj4gPiArICovDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8bGludXgvbW9k dWxlLmg+DQo+ID4gKyNpbmNsdWRlIDxtaXNjL29jeGwuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4 L25kY3RsLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9tbV90eXBlcy5oPg0KPiA+ICsjaW5jbHVk ZSA8bGludXgvbWVtb3J5X2hvdHBsdWcuaD4NCj4gPiArI2luY2x1ZGUgIm9jeGxfaW50ZXJuYWwu aCINCj4gPiArDQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQg b2N4bHBtZW1fcGNpX3RibFtdID0gew0KPiA+ICsJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURf SUJNLCAweDA2MjUpLCB9LA0KPiA+ICsJeyB9DQo+ID4gK307DQo+ID4gKw0KPiA+ICtNT0RVTEVf REVWSUNFX1RBQkxFKHBjaSwgb2N4bHBtZW1fcGNpX3RibCk7DQo+ID4gKw0KPiA+ICsjZGVmaW5l IE5VTV9NSU5PUlMgMjU2IC8vIFRvdGFsIHRvIHJlc2VydmUNCj4gPiArDQo+ID4gK3N0YXRpYyBk ZXZfdCBvY3hscG1lbV9kZXY7DQo+ID4gK3N0YXRpYyBzdHJ1Y3QgY2xhc3MgKm9jeGxwbWVtX2Ns YXNzOw0KPiA+ICtzdGF0aWMgc3RydWN0IG11dGV4IG1pbm9yc19pZHJfbG9jazsNCj4gPiArc3Rh dGljIHN0cnVjdCBpZHIgbWlub3JzX2lkcjsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBuZGN0 bF9jb25maWdfd3JpdGUoKSAtIEhhbmRsZSBhIE5EX0NNRF9TRVRfQ09ORklHX0RBVEEgY29tbWFu ZA0KPiA+IGZyb20gbmRjdGwNCj4gPiArICogQG9jeGxwbWVtOiB0aGUgZGV2aWNlIG1ldGFkYXRh DQo+ID4gKyAqIEBjb21tYW5kOiB0aGUgaW5jb21pbmcgZGF0YSB0byB3cml0ZQ0KPiA+ICsgKiBS ZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQ0KPiA+ICsgKi8NCj4gPiAr c3RhdGljIGludCBuZGN0bF9jb25maWdfd3JpdGUoc3RydWN0IG9jeGxwbWVtICpvY3hscG1lbSwN Cj4gPiArCQkJICAgICAgc3RydWN0IG5kX2NtZF9zZXRfY29uZmlnX2hkciAqY29tbWFuZCkNCj4g PiArew0KPiA+ICsJaWYgKGNvbW1hbmQtPmluX29mZnNldCArIGNvbW1hbmQtPmluX2xlbmd0aCA+ IExBQkVMX0FSRUFfU0laRSkNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwlt ZW1jcHlfZmx1c2hjYWNoZShvY3hscG1lbS0+bWV0YWRhdGFfYWRkciArIGNvbW1hbmQtPmluX29m ZnNldCwgDQo+ID4gY29tbWFuZC0+aW5fYnVmLA0KPiA+ICsJCQkgIGNvbW1hbmQtPmluX2xlbmd0 aCk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ ICsgKiBuZGN0bF9jb25maWdfcmVhZCgpIC0gSGFuZGxlIGEgTkRfQ01EX0dFVF9DT05GSUdfREFU QSBjb21tYW5kDQo+ID4gZnJvbSBuZGN0bA0KPiA+ICsgKiBAb2N4bHBtZW06IHRoZSBkZXZpY2Ug bWV0YWRhdGENCj4gPiArICogQGNvbW1hbmQ6IHRoZSByZWFkIHJlcXVlc3QNCj4gPiArICogUmV0 dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUNCj4gPiArICovDQo+ID4gK3N0 YXRpYyBpbnQgbmRjdGxfY29uZmlnX3JlYWQoc3RydWN0IG9jeGxwbWVtICpvY3hscG1lbSwNCj4g PiArCQkJICAgICBzdHJ1Y3QgbmRfY21kX2dldF9jb25maWdfZGF0YV9oZHINCj4gPiAqY29tbWFu ZCkNCj4gPiArew0KPiA+ICsJaWYgKGNvbW1hbmQtPmluX29mZnNldCArIGNvbW1hbmQtPmluX2xl bmd0aCA+IExBQkVMX0FSRUFfU0laRSkNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ ID4gKwltZW1jcHlfbWNzYWZlKGNvbW1hbmQtPm91dF9idWYsIG9jeGxwbWVtLT5tZXRhZGF0YV9h ZGRyICsNCj4gPiBjb21tYW5kLT5pbl9vZmZzZXQsDQo+ID4gKwkJICAgICAgY29tbWFuZC0+aW5f bGVuZ3RoKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoq DQo+ID4gKyAqIG5kY3RsX2NvbmZpZ19zaXplKCkgLSBIYW5kbGUgYSBORF9DTURfR0VUX0NPTkZJ R19TSVpFIGNvbW1hbmQNCj4gPiBmcm9tIG5kY3RsDQo+ID4gKyAqIEBjb21tYW5kOiB0aGUgcmVh ZCByZXF1ZXN0DQo+ID4gKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWls dXJlDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50IG5kY3RsX2NvbmZpZ19zaXplKHN0cnVjdCBu ZF9jbWRfZ2V0X2NvbmZpZ19zaXplDQo+ID4gKmNvbW1hbmQpDQo+ID4gK3sNCj4gPiArCWNvbW1h bmQtPnN0YXR1cyA9IDA7DQo+ID4gKwljb21tYW5kLT5jb25maWdfc2l6ZSA9IExBQkVMX0FSRUFf U0laRTsNCj4gPiArCWNvbW1hbmQtPm1heF94ZmVyID0gUEFHRV9TSVpFOw0KPiA+ICsNCj4gPiAr CXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG5kY3RsKHN0cnVjdCBu dmRpbW1fYnVzX2Rlc2NyaXB0b3IgKm5kX2Rlc2MsDQo+ID4gKwkJIHN0cnVjdCBudmRpbW0gKm52 ZGltbSwNCj4gPiArCQkgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQg YnVmX2xlbiwgaW50DQo+ID4gKmNtZF9yYykNCj4gPiArew0KPiA+ICsJc3RydWN0IG9jeGxwbWVt ICpvY3hscG1lbSA9IGNvbnRhaW5lcl9vZihuZF9kZXNjLCBzdHJ1Y3QNCj4gPiBvY3hscG1lbSwg YnVzX2Rlc2MpOw0KPiA+ICsNCj4gPiArCXN3aXRjaCAoY21kKSB7DQo+ID4gKwljYXNlIE5EX0NN RF9HRVRfQ09ORklHX1NJWkU6DQo+ID4gKwkJKmNtZF9yYyA9IG5kY3RsX2NvbmZpZ19zaXplKGJ1 Zik7DQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICsJY2FzZSBORF9DTURfR0VUX0NPTkZJ R19EQVRBOg0KPiA+ICsJCSpjbWRfcmMgPSBuZGN0bF9jb25maWdfcmVhZChvY3hscG1lbSwgYnVm KTsNCj4gPiArCQlyZXR1cm4gMDsNCj4gPiArDQo+ID4gKwljYXNlIE5EX0NNRF9TRVRfQ09ORklH X0RBVEE6DQo+ID4gKwkJKmNtZF9yYyA9IG5kY3RsX2NvbmZpZ193cml0ZShvY3hscG1lbSwgYnVm KTsNCj4gPiArCQlyZXR1cm4gMDsNCj4gPiArDQo+ID4gKwlkZWZhdWx0Og0KPiA+ICsJCXJldHVy biAtRU5PVFRZOw0KPiA+ICsJfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogcmVz ZXJ2ZV9tZXRhZGF0YSgpIC0gUmVzZXJ2ZSBzcGFjZSBmb3IgbnZkaW1tIG1ldGFkYXRhDQo+ID4g KyAqIEBvY3hscG1lbTogdGhlIGRldmljZSBtZXRhZGF0YQ0KPiA+ICsgKiBAbHBjX21lbTogVGhl IHJlc291cmNlIHJlcHJlc2VudGluZyB0aGUgTFBDIG1lbW9yeSBvZiB0aGUNCj4gPiBPcGVuQ0FQ SSBkZXZpY2UNCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQgcmVzZXJ2ZV9tZXRhZGF0YShzdHJ1 Y3Qgb2N4bHBtZW0gKm9jeGxwbWVtLA0KPiA+ICsJCQkgICAgc3RydWN0IHJlc291cmNlICpscGNf bWVtKQ0KPiA+ICt7DQo+ID4gKwlvY3hscG1lbS0+bWV0YWRhdGFfYWRkciA9IGRldm1fbWVtcmVt YXAoJm9jeGxwbWVtLT5kZXYsDQo+ID4gbHBjX21lbS0+c3RhcnQsDQo+ID4gKwkJCQkJCUxBQkVM X0FSRUFfU0laRSwNCj4gPiBNRU1SRU1BUF9XQik7DQo+ID4gKwlpZiAoSVNfRVJSKG9jeGxwbWVt LT5tZXRhZGF0YV9hZGRyKSkNCj4gPiArCQlyZXR1cm4gUFRSX0VSUihvY3hscG1lbS0+bWV0YWRh dGFfYWRkcik7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgKiByZWdpc3Rlcl9scGNfbWVtKCkgLSBEaXNjb3ZlciBwZXJzaXN0ZW50IG1lbW9y eSBvbiBhIGRldmljZSBhbmQNCj4gPiByZWdpc3RlciBpdCB3aXRoIHRoZSBOVkRJTU0gc3Vic3lz dGVtDQo+ID4gKyAqIEBvY3hscG1lbTogdGhlIGRldmljZSBtZXRhZGF0YQ0KPiA+ICsgKiBSZXR1 cm46IDAgb24gc3VjY2Vzcw0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCByZWdpc3Rlcl9scGNf bWVtKHN0cnVjdCBvY3hscG1lbSAqb2N4bHBtZW0pDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBuZF9y ZWdpb25fZGVzYyByZWdpb25fZGVzYzsNCj4gPiArCXN0cnVjdCBuZF9tYXBwaW5nX2Rlc2MgbmRf bWFwcGluZ19kZXNjOw0KPiA+ICsJc3RydWN0IHJlc291cmNlICpscGNfbWVtOw0KPiA+ICsJY29u c3Qgc3RydWN0IG9jeGxfYWZ1X2NvbmZpZyAqY29uZmlnOw0KPiA+ICsJY29uc3Qgc3RydWN0IG9j eGxfZm5fY29uZmlnICpmbl9jb25maWc7DQo+ID4gKwlpbnQgcmM7DQo+ID4gKwl1bnNpZ25lZCBs b25nIG52ZGltbV9jbWRfbWFzayA9IDA7DQo+ID4gKwl1bnNpZ25lZCBsb25nIG52ZGltbV9mbGFn cyA9IDA7DQo+ID4gKwlpbnQgdGFyZ2V0X25vZGU7DQo+ID4gKwljaGFyIHNlcmlhbFsxNisxXTsN Cj4gPiArDQo+ID4gKwkvLyBTZXQgdXAgdGhlIHJlc2VydmVkIG1ldGFkYXRhIGFyZWENCj4gPiAr CXJjID0gb2N4bF9hZnVfbWFwX2xwY19tZW0ob2N4bHBtZW0tPm9jeGxfYWZ1KTsNCj4gPiArCWlm IChyYyA8IDApDQo+ID4gKwkJcmV0dXJuIHJjOw0KPiA+ICsNCj4gPiArCWxwY19tZW0gPSBvY3hs X2FmdV9scGNfbWVtKG9jeGxwbWVtLT5vY3hsX2FmdSk7DQo+ID4gKwlpZiAobHBjX21lbSA9PSBO VUxMIHx8IGxwY19tZW0tPnN0YXJ0ID09IDApDQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4g Kw0KPiA+ICsJY29uZmlnID0gb2N4bF9hZnVfY29uZmlnKG9jeGxwbWVtLT5vY3hsX2FmdSk7DQo+ ID4gKwlmbl9jb25maWcgPSBvY3hsX2Z1bmN0aW9uX2NvbmZpZyhvY3hscG1lbS0+b2N4bF9mbik7 DQo+ID4gKw0KPiA+ICsJcmMgPSByZXNlcnZlX21ldGFkYXRhKG9jeGxwbWVtLCBscGNfbWVtKTsN Cj4gPiArCWlmIChyYykNCj4gPiArCQlyZXR1cm4gcmM7DQo+ID4gKw0KPiA+ICsJb2N4bHBtZW0t PmJ1c19kZXNjLnByb3ZpZGVyX25hbWUgPSAib2N4bC1wbWVtIjsNCj4gPiArCW9jeGxwbWVtLT5i dXNfZGVzYy5uZGN0bCA9IG5kY3RsOw0KPiA+ICsJb2N4bHBtZW0tPmJ1c19kZXNjLm1vZHVsZSA9 IFRISVNfTU9EVUxFOw0KPiA+ICsNCj4gPiArCW9jeGxwbWVtLT5udmRpbW1fYnVzID0gbnZkaW1t X2J1c19yZWdpc3Rlcigmb2N4bHBtZW0tPmRldiwNCj4gPiArCQkJCQkJICAgJm9jeGxwbWVtLQ0K PiA+ID5idXNfZGVzYyk7DQo+ID4gKwlpZiAoIW9jeGxwbWVtLT5udmRpbW1fYnVzKQ0KPiA+ICsJ CXJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiArCW9jeGxwbWVtLT5wbWVtX3Jlcy5zdGFydCA9 ICh1NjQpbHBjX21lbS0+c3RhcnQgKw0KPiA+IExBQkVMX0FSRUFfU0laRTsNCj4gPiArCW9jeGxw bWVtLT5wbWVtX3Jlcy5lbmQgPSAodTY0KWxwY19tZW0tPnN0YXJ0ICsgY29uZmlnLQ0KPiA+ID5s cGNfbWVtX3NpemUgLSAxOw0KPiA+ICsJb2N4bHBtZW0tPnBtZW1fcmVzLm5hbWUgPSAiT3BlbkNB UEkgcGVyc2lzdGVudCBtZW1vcnkiOw0KPiA+ICsNCj4gPiArCXNldF9iaXQoTkRfQ01EX0dFVF9D T05GSUdfU0laRSwgJm52ZGltbV9jbWRfbWFzayk7DQo+ID4gKwlzZXRfYml0KE5EX0NNRF9HRVRf Q09ORklHX0RBVEEsICZudmRpbW1fY21kX21hc2spOw0KPiA+ICsJc2V0X2JpdChORF9DTURfU0VU X0NPTkZJR19EQVRBLCAmbnZkaW1tX2NtZF9tYXNrKTsNCj4gPiArDQo+ID4gKwlzZXRfYml0KE5E RF9BTElBU0lORywgJm52ZGltbV9mbGFncyk7DQo+ID4gKw0KPiA+ICsJc25wcmludGYoc2VyaWFs LCBzaXplb2Yoc2VyaWFsKSwgIiVsbHgiLCBmbl9jb25maWctPnNlcmlhbCk7DQo+ID4gKwluZF9t YXBwaW5nX2Rlc2MubnZkaW1tID0gbnZkaW1tX2NyZWF0ZShvY3hscG1lbS0+bnZkaW1tX2J1cywN Cj4gPiBvY3hscG1lbSwNCj4gPiArCQkJCSBOVUxMLCBudmRpbW1fZmxhZ3MsIG52ZGltbV9jbWRf bWFzaywNCj4gPiArCQkJCSAwLCBOVUxMKTsNCj4gPiArCWlmICghbmRfbWFwcGluZ19kZXNjLm52 ZGltbSkNCj4gPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gPiArDQo+ID4gKwlpZiAobnZkaW1tX2J1 c19jaGVja19kaW1tX2NvdW50KG9jeGxwbWVtLT5udmRpbW1fYnVzLCAxKSkNCj4gPiArCQlyZXR1 cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwluZF9tYXBwaW5nX2Rlc2Muc3RhcnQgPSBvY3hscG1l bS0+cG1lbV9yZXMuc3RhcnQ7DQo+ID4gKwluZF9tYXBwaW5nX2Rlc2Muc2l6ZSA9IHJlc291cmNl X3NpemUoJm9jeGxwbWVtLT5wbWVtX3Jlcyk7DQo+ID4gKwluZF9tYXBwaW5nX2Rlc2MucG9zaXRp b24gPSAwOw0KPiA+ICsNCj4gPiArCW9jeGxwbWVtLT5uZF9zZXQuY29va2llMSA9IGZuX2NvbmZp Zy0+c2VyaWFsICsgMTsgLy8gYWxsb3cgZm9yDQo+ID4gZW1wdHkgc2VyaWFsDQo+ID4gKwlvY3hs cG1lbS0+bmRfc2V0LmNvb2tpZTIgPSBmbl9jb25maWctPnNlcmlhbCArIDE7DQo+ID4gKw0KPiA+ ICsJdGFyZ2V0X25vZGUgPSBvZl9ub2RlX3RvX25pZChvY3hscG1lbS0+cGRldi0+ZGV2Lm9mX25v ZGUpOw0KPiA+ICsNCj4gPiArCW1lbXNldCgmcmVnaW9uX2Rlc2MsIDAsIHNpemVvZihyZWdpb25f ZGVzYykpOw0KPiA+ICsJcmVnaW9uX2Rlc2MucmVzID0gJm9jeGxwbWVtLT5wbWVtX3JlczsNCj4g PiArCXJlZ2lvbl9kZXNjLm51bWFfbm9kZSA9IE5VTUFfTk9fTk9ERTsNCj4gPiArCXJlZ2lvbl9k ZXNjLnRhcmdldF9ub2RlID0gdGFyZ2V0X25vZGU7DQo+ID4gKwlyZWdpb25fZGVzYy5udW1fbWFw cGluZ3MgPSAxOw0KPiA+ICsJcmVnaW9uX2Rlc2MubWFwcGluZyA9ICZuZF9tYXBwaW5nX2Rlc2M7 DQo+ID4gKwlyZWdpb25fZGVzYy5uZF9zZXQgPSAmb2N4bHBtZW0tPm5kX3NldDsNCj4gPiArDQo+ ID4gKwlzZXRfYml0KE5EX1JFR0lPTl9QQUdFTUFQLCAmcmVnaW9uX2Rlc2MuZmxhZ3MpOw0KPiA+ ICsJLyoNCj4gPiArCSAqIE5COiBsaWJudmRpbW0gY29waWVzIHRoZSBkYXRhIGZyb20gbmRyX2Rl c2MgaW50byBpdCdzIG93bg0KPiA+ICsJICogc3RydWN0dXJlcyBzbyBwYXNzaW5nIGEgc3RhY2sg cG9pbnRlciBpcyBmaW5lLg0KPiA+ICsJICovDQo+ID4gKwlvY3hscG1lbS0+bmRfcmVnaW9uID0g bnZkaW1tX3BtZW1fcmVnaW9uX2NyZWF0ZShvY3hscG1lbS0NCj4gPiA+bnZkaW1tX2J1cywNCj4g PiArCQkJCQkJCSZyZWdpb25fZGVzYyk7DQo+ID4gKwlpZiAoIW9jeGxwbWVtLT5uZF9yZWdpb24p DQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsJZGV2X2luZm8oJm9jeGxwbWVt LT5kZXYsDQo+ID4gKwkJICJPbmxpbmluZyAlbGx1TUIgb2YgcGVyc2lzdGVudCBtZW1vcnlcbiIs DQo+ID4gKwkJIG5kX21hcHBpbmdfZGVzYy5zaXplIC8gU1pfMU0pOw0KPiA+ICsNCj4gPiArCXJl dHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogYWxsb2NhdGVfbWlub3Io KSAtIEFsbG9jYXRlIGEgbWlub3IgbnVtYmVyIHRvIHVzZSBmb3IgYW4NCj4gPiBPcGVuQ0FQSSBw bWVtIGRldmljZQ0KPiA+ICsgKiBAb2N4bHBtZW06IHRoZSBkZXZpY2UgbWV0YWRhdGENCj4gPiAr ICogUmV0dXJuOiB0aGUgYWxsb2NhdGVkIG1pbm9yIG51bWJlcg0KPiA+ICsgKi8NCj4gPiArc3Rh dGljIGludCBhbGxvY2F0ZV9taW5vcihzdHJ1Y3Qgb2N4bHBtZW0gKm9jeGxwbWVtKQ0KPiA+ICt7 DQo+ID4gKwlpbnQgbWlub3I7DQo+ID4gKw0KPiA+ICsJbXV0ZXhfbG9jaygmbWlub3JzX2lkcl9s b2NrKTsNCj4gPiArCW1pbm9yID0gaWRyX2FsbG9jKCZtaW5vcnNfaWRyLCBvY3hscG1lbSwgMCwg TlVNX01JTk9SUywNCj4gPiBHRlBfS0VSTkVMKTsNCj4gPiArCW11dGV4X3VubG9jaygmbWlub3Jz X2lkcl9sb2NrKTsNCj4gPiArCXJldHVybiBtaW5vcjsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3Rh dGljIHZvaWQgZnJlZV9taW5vcihzdHJ1Y3Qgb2N4bHBtZW0gKm9jeGxwbWVtKQ0KPiA+ICt7DQo+ ID4gKwltdXRleF9sb2NrKCZtaW5vcnNfaWRyX2xvY2spOw0KPiA+ICsJaWRyX3JlbW92ZSgmbWlu b3JzX2lkciwgTUlOT1Iob2N4bHBtZW0tPmRldi5kZXZ0KSk7DQo+ID4gKwltdXRleF91bmxvY2so Jm1pbm9yc19pZHJfbG9jayk7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBmcmVl X29jeGxwbWVtKCkgLSBGcmVlIGFsbCBtZW1iZXJzIG9mIGFuIG9jeGxwbWVtIHN0cnVjdA0KPiA+ ICsgKiBAb2N4bHBtZW06IHRoZSBkZXZpY2Ugc3RydWN0IHRvIGNsZWFyDQo+ID4gKyAqLw0KPiA+ ICtzdGF0aWMgdm9pZCBmcmVlX29jeGxwbWVtKHN0cnVjdCBvY3hscG1lbSAqb2N4bHBtZW0pDQo+ ID4gK3sNCj4gPiArCWludCByYzsNCj4gPiArDQo+ID4gKwlpZiAob2N4bHBtZW0tPm52ZGltbV9i dXMpDQo+ID4gKwkJbnZkaW1tX2J1c191bnJlZ2lzdGVyKG9jeGxwbWVtLT5udmRpbW1fYnVzKTsN Cj4gPiArDQo+ID4gKwlmcmVlX21pbm9yKG9jeGxwbWVtKTsNCj4gPiArDQo+ID4gKwlpZiAob2N4 bHBtZW0tPm1ldGFkYXRhX2FkZHIpDQo+ID4gKwkJZGV2bV9tZW11bm1hcCgmb2N4bHBtZW0tPmRl diwgb2N4bHBtZW0tPm1ldGFkYXRhX2FkZHIpOw0KPiA+ICsNCj4gPiArCWlmIChvY3hscG1lbS0+ b2N4bF9jb250ZXh0KSB7DQo+ID4gKwkJcmMgPSBvY3hsX2NvbnRleHRfZGV0YWNoKG9jeGxwbWVt LT5vY3hsX2NvbnRleHQpOw0KPiA+ICsJCWlmIChyYyA9PSAtRUJVU1kpDQo+ID4gKwkJCWRldl93 YXJuKCZvY3hscG1lbS0+ZGV2LCAiVGltZW91dCBkZXRhY2hpbmcNCj4gPiBvY3hsIGNvbnRleHRc biIpOw0KPiA+ICsJCWVsc2UNCj4gPiArCQkJb2N4bF9jb250ZXh0X2ZyZWUob2N4bHBtZW0tPm9j eGxfY29udGV4dCk7DQo+ID4gKw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChvY3hscG1lbS0+ b2N4bF9hZnUpDQo+ID4gKwkJb2N4bF9hZnVfcHV0KG9jeGxwbWVtLT5vY3hsX2FmdSk7DQo+ID4g Kw0KPiA+ICsJaWYgKG9jeGxwbWVtLT5vY3hsX2ZuKQ0KPiA+ICsJCW9jeGxfZnVuY3Rpb25fY2xv c2Uob2N4bHBtZW0tPm9jeGxfZm4pOw0KPiA+ICsNCj4gPiArCWtmcmVlKG9jeGxwbWVtKTsNCj4g PiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIGZyZWVfb2N4bHBtZW1fZGV2KCkgLSBGcmVl IGFuIE9wZW5DQVBJIHBlcnNpc3RlbnQgbWVtb3J5IGRldmljZQ0KPiA+ICsgKiBAZGV2OiBUaGUg ZGV2aWNlIHN0cnVjdA0KPiA+ICsgKi8NCj4gPiArc3RhdGljIHZvaWQgZnJlZV9vY3hscG1lbV9k ZXYoc3RydWN0IGRldmljZSAqZGV2KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3Qgb2N4bHBtZW0gKm9j eGxwbWVtID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IG9jeGxwbWVtLA0KPiA+IGRldik7DQo+ ID4gKw0KPiA+ICsJZnJlZV9vY3hscG1lbShvY3hscG1lbSk7DQo+ID4gK30NCj4gPiArDQo+ID4g Ky8qKg0KPiA+ICsgKiBvY3hscG1lbV9yZWdpc3RlcigpIC0gUmVnaXN0ZXIgYW4gT3BlbkNBUEkg cG1lbSBkZXZpY2Ugd2l0aCB0aGUNCj4gPiBrZXJuZWwNCj4gPiArICogQG9jeGxwbWVtOiB0aGUg ZGV2aWNlIG1ldGFkYXRhDQo+ID4gKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBv biBmYWlsdXJlDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50IG9jeGxwbWVtX3JlZ2lzdGVyKHN0 cnVjdCBvY3hscG1lbSAqb2N4bHBtZW0pDQo+ID4gK3sNCj4gPiArCWludCByYzsNCj4gPiArCWlu dCBtaW5vciA9IGFsbG9jYXRlX21pbm9yKG9jeGxwbWVtKTsNCj4gPiArDQo+ID4gKwlpZiAobWlu b3IgPCAwKQ0KPiA+ICsJCXJldHVybiBtaW5vcjsNCj4gPiArDQo+ID4gKwlvY3hscG1lbS0+ZGV2 LnJlbGVhc2UgPSBmcmVlX29jeGxwbWVtX2RldjsNCj4gPiArCXJjID0gZGV2X3NldF9uYW1lKCZv Y3hscG1lbS0+ZGV2LCAib2N4bHBtZW0lZCIsIG1pbm9yKTsNCj4gPiArCWlmIChyYyA8IDApDQo+ ID4gKwkJcmV0dXJuIHJjOw0KPiA+ICsNCj4gPiArCW9jeGxwbWVtLT5kZXYuZGV2dCA9IE1LREVW KE1BSk9SKG9jeGxwbWVtX2RldiksIG1pbm9yKTsNCj4gPiArCW9jeGxwbWVtLT5kZXYuY2xhc3Mg PSBvY3hscG1lbV9jbGFzczsNCj4gDQo+IA0KPiBUaGlzIGZ1bmN0aW9uLCBhcyB3ZWxsIGFzIGFs bG9jYXRlX21pbm9yKCkgYW5kIGZyZWVfbWlub3IoKSBhYm92ZSANCj4gcmVmZXJlbmNlIHJlc291 cmNlcyAodGhlIElEUiwgdGhlIGZpbGUgY2xhc3MsIC4uLikgd2hpY2ggYXJlIG5vdCANCj4gaW5p dGlhbGl6ZWQgeWV0LiBUaGUgZnVuY3Rpb24gZmlsZV9pbml0KCkgaXMgY29taW5nIGluIGEgbGF0 ZXIgcGF0Y2guDQo+IA0KDQpUaGFua3MsIEkgY2F1Z2h0IHRoaXMgYXQgcnVudGltZSB3aGVuIEkg Ym9vdGVkIGEga2VybmVsIHdpdGggKGp1c3QpDQp0aGlzIHBhdGNoIDopIEZpeGVkIGluIHY0Lg0K DQo+IA0KPiANCj4gPiArCW9jeGxwbWVtLT5kZXYucGFyZW50ID0gJm9jeGxwbWVtLT5wZGV2LT5k ZXY7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGRldmljZV9yZWdpc3Rlcigmb2N4bHBtZW0tPmRldik7 DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBvY3hscG1lbV9yZW1vdmUoKSAtIEZy ZWUgYW4gT3BlbkNBUEkgcGVyc2lzdGVudCBtZW1vcnkgZGV2aWNlDQo+ID4gKyAqIEBwZGV2OiB0 aGUgUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3QNCj4gPiArICovDQo+ID4gK3N0YXRpYyB2 b2lkIG9jeGxwbWVtX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikNCj4gPiArew0KPiA+ICsJ aWYgKFBDSV9GVU5DKHBkZXYtPmRldmZuKSA9PSAwKSB7DQo+ID4gKwkJc3RydWN0IG9jeGxwbWVt X2Z1bmN0aW9uMCAqZnVuYzAgPQ0KPiA+IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsNCj4gPiArDQo+ ID4gKwkJaWYgKGZ1bmMwKSB7DQo+ID4gKwkJCW9jeGxfZnVuY3Rpb25fY2xvc2UoZnVuYzAtPm9j eGxfZm4pOw0KPiA+ICsJCQlmdW5jMC0+b2N4bF9mbiA9IE5VTEw7DQo+ID4gKwkJfQ0KPiANCj4g DQo+IFRoZSBzdHJ1Y3Qgb2N4bHBtZW1fZnVuY3Rpb24wIGFsbG9jYXRlZCBvbiBwcm9iZSgpIHNo b3VsZCBiZSBmcmVlZC4NCj4gDQoNCkkndmUgZHJvcHBlZCBzdHJ1Y3QgYXMgcGVyIHRoZSB0aHJl YWQgZnJvbSBBbmRyZXcgRG9uZWxsYW4uDQoNCj4gDQo+IA0KPiA+ICsJfSBlbHNlIHsNCj4gPiAr CQlzdHJ1Y3Qgb2N4bHBtZW0gKm9jeGxwbWVtID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOw0KPiA+ ICsNCj4gPiArCQlpZiAob2N4bHBtZW0pDQo+ID4gKwkJCWRldmljZV91bnJlZ2lzdGVyKCZvY3hs cG1lbS0+ZGV2KTsNCj4gPiArCX0NCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHBy b2JlX2Z1bmN0aW9uMCgpIC0gU2V0IHVwIGZ1bmN0aW9uIDAgZm9yIGFuIE9wZW5DQVBJDQo+ID4g cGVyc2lzdGVudCBtZW1vcnkgZGV2aWNlDQo+ID4gKyAqIFRoaXMgaXMgaW1wb3J0YW50IGFzIGl0 IGVuYWJsZXMgdGVtcGxhdGVzIGhpZ2hlciB0aGFuIDAgYWNyb3NzDQo+ID4gYWxsIG90aGVyIGZ1 bmN0aW9ucywNCj4gPiArICogd2hpY2ggaW4gdHVybiBlbmFibGVzIGhpZ2hlciBiYW5kd2lkdGgg YWNjZXNzZXMNCj4gPiArICogQHBkZXY6IHRoZSBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVj dA0KPiA+ICsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQ0KPiA+ ICsgKi8NCj4gPiArc3RhdGljIGludCBwcm9iZV9mdW5jdGlvbjAoc3RydWN0IHBjaV9kZXYgKnBk ZXYpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBvY3hscG1lbV9mdW5jdGlvbjAgKmZ1bmMwID0gTlVM TDsNCj4gPiArCXN0cnVjdCBvY3hsX2ZuICpmbjsNCj4gPiArDQo+ID4gKwlmdW5jMCA9IGt6YWxs b2Moc2l6ZW9mKCpmdW5jMCksIEdGUF9LRVJORUwpOw0KPiA+ICsJaWYgKCFmdW5jMCkNCj4gPiAr CQlyZXR1cm4gLUVOT01FTTsNCj4gPiArDQo+ID4gKwlmdW5jMC0+cGRldiA9IHBkZXY7DQo+IA0K PiANCj4gU3RvcmluZyB0aGUgc3RydWN0IHBjaV9kZXYgZm9yIGZ1bmN0aW9uIDAgYXBwZWFycyB0 byBiZSB1c2VsZXNzLg0KPiANCg0KWXVwDQoNCj4gDQo+IA0KPiA+ICsJZm4gPSBvY3hsX2Z1bmN0 aW9uX29wZW4ocGRldik7DQo+ID4gKwlpZiAoSVNfRVJSKGZuKSkgew0KPiA+ICsJCWtmcmVlKGZ1 bmMwKTsNCj4gPiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gb3BlbiBPQ1hMIGZ1 bmN0aW9uXG4iKTsNCj4gPiArCQlyZXR1cm4gUFRSX0VSUihmbik7DQo+ID4gKwl9DQo+ID4gKwlm dW5jMC0+b2N4bF9mbiA9IGZuOw0KPiA+ICsNCj4gPiArCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBm dW5jMCk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0K PiA+ICsgKiBwcm9iZSgpIC0gSW5pdCBhbiBPcGVuQ0FQSSBwZXJzaXN0ZW50IG1lbW9yeSBkZXZp Y2UNCj4gPiArICogQHBkZXY6IHRoZSBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdA0KPiA+ ICsgKiBAZW50OiBUaGUgZW50cnkgZnJvbSBvY3hscG1lbV9wY2lfdGJsDQo+ID4gKyAqIFJldHVy bjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlDQo+ID4gKyAqLw0KPiA+ICtzdGF0 aWMgaW50IHByb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2Rldmlj ZV9pZA0KPiA+ICplbnQpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBvY3hscG1lbSAqb2N4bHBtZW07 DQo+ID4gKwlpbnQgcmM7DQo+ID4gKw0KPiA+ICsJaWYgKFBDSV9GVU5DKHBkZXYtPmRldmZuKSA9 PSAwKQ0KPiA+ICsJCXJldHVybiBwcm9iZV9mdW5jdGlvbjAocGRldik7DQo+ID4gKwllbHNlIGlm IChQQ0lfRlVOQyhwZGV2LT5kZXZmbikgIT0gMSkNCj4gPiArCQlyZXR1cm4gMDsNCj4gPiArDQo+ ID4gKwlvY3hscG1lbSA9IGt6YWxsb2Moc2l6ZW9mKCpvY3hscG1lbSksIEdGUF9LRVJORUwpOw0K PiA+ICsJaWYgKCFvY3hscG1lbSkgew0KPiA+ICsJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvdWxk IG5vdCBhbGxvY2F0ZSBPcGVuQ0FQSQ0KPiA+IHBlcnNpc3RlbnQgbWVtb3J5IG1ldGFkYXRhXG4i KTsNCj4gPiArCQlyYyA9IC1FTk9NRU07DQo+ID4gKwkJZ290byBlcnI7DQo+ID4gKwl9DQo+ID4g KwlvY3hscG1lbS0+cGRldiA9IHBkZXY7DQo+IA0KPiBXZSBzaG91bGQgcHJvYmFibHkgY2FsbCBw Y2lfZGV2X2dldCgpIGhlcmUgaWYgd2Ugc3RvcmUgdGhlIHN0cnVjdCANCj4gcGNpX2RldiBwb2lu dGVyLiBXZSBjb3VsZCBkZWJhdGUgaG93IHVzZWZ1bCBpdCByZWFsbHkgaXMsDQo+IGNvbnNpZGVy aW5nIA0KPiB3ZSdyZSByZWdpc3RlcmluZyBhIGRldmljZSwgd2hpY2ggd2lsbCBhbHNvIHRha2Ug YSByZWZlcmVuY2UsIGJ1dCBpdCANCj4gbG9va3MgbGlrZSB0aGUgc2FmZSB0aGluZyB0byBkbyBj b25zaWRlcmluZyBhbGwgdGhvc2UgcmVzb3VyY2VzDQo+IGRvbid0IA0KPiBoYXZlIGV4YWN0bHkg dGhlIHNhbWUgbGlmZSBjeWNsZSBhbmQgaXQgaXMgc3RhbmRhcmQgcHJhY3RpY2UgdG8gDQo+IGd1 YXJhbnRlZSB0aGF0IHdlIHdvbid0IGhhdmUgYSBkYW5nbGluZyBwb2ludGVyLg0KPiANCg0KT2sN Cg0KPiANCj4gDQo+ID4gKw0KPiA+ICsJcGNpX3NldF9kcnZkYXRhKHBkZXYsIG9jeGxwbWVtKTsN Cj4gPiArDQo+ID4gKwlvY3hscG1lbS0+b2N4bF9mbiA9IG9jeGxfZnVuY3Rpb25fb3BlbihwZGV2 KTsNCj4gPiArCWlmIChJU19FUlIob2N4bHBtZW0tPm9jeGxfZm4pKSB7DQo+ID4gKwkJa2ZyZWUo b2N4bHBtZW0pOw0KPiANCj4gb2N4bHBtZW0gaXMgZnJlZWQuLi4NCj4gDQo+IA0KPiA+ICsJCXBj aV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsNCj4gPiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJm YWlsZWQgdG8gb3BlbiBPQ1hMIGZ1bmN0aW9uXG4iKTsNCj4gPiArCQlyYyA9IFBUUl9FUlIob2N4 bHBtZW0tPm9jeGxfZm4pOw0KPiANCj4gLi4uIGFuZCB0aGVuIHJlZmVyZW5jZWQuDQo+IA0KDQpP aw0KDQo+IA0KPiANCj4gPiArCQlnb3RvIGVycjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlvY3hs cG1lbS0+b2N4bF9hZnUgPSBvY3hsX2Z1bmN0aW9uX2ZldGNoX2FmdShvY3hscG1lbS0+b2N4bF9m biwgDQo+ID4gMCk7DQo+ID4gKwlpZiAob2N4bHBtZW0tPm9jeGxfYWZ1ID09IE5VTEwpIHsNCj4g PiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb3VsZCBub3QgZ2V0IE9DWEwgQUZVIGZyb20NCj4g PiBmdW5jdGlvblxuIik7DQo+IA0KPiBUaGUgZXJyb3IgcGF0aCBoZXJlIHNob3VsZCBtYXRjaCB0 aGUgYWJvdmUsIHRvIGZyZWUgc3RydWN0IG9jeGxwbWVtLg0KPiANCg0KWXVwLCBJJ3ZlIGZhY3Rv cmVkIG91dCBlcnJfdW5yZWdpc2V0ZXJkIHRvIHVuaWZ5IHRoZSBlcnJvciBwYXRocy4NCg0KPiAN Cj4gPiArCQlyYyA9IC1FTlhJTzsNCj4gPiArCQlnb3RvIGVycjsNCj4gPiArCX0NCj4gPiArDQo+ ID4gKwlvY3hsX2FmdV9nZXQob2N4bHBtZW0tPm9jeGxfYWZ1KTsNCj4gPiArDQo+ID4gKwkvLyBS ZXNvdXJjZXMgYWxsb2NhdGVkIGJlbG93IGhlcmUgYXJlIGNsZWFuZWQgdXAgaW4gdGhlIHJlbGVh c2UNCj4gPiBoYW5kbGVyDQo+ID4gKw0KPiA+ICsJcmMgPSBvY3hscG1lbV9yZWdpc3RlcihvY3hs cG1lbSk7DQo+ID4gKwlpZiAocmMpIHsNCj4gPiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb3Vs ZCBub3QgcmVnaXN0ZXIgT3BlbkNBUEkNCj4gPiBwZXJzaXN0ZW50IG1lbW9yeSBkZXZpY2Ugd2l0 aCB0aGUga2VybmVsXG4iKTsNCj4gPiArCQlnb3RvIGVycjsNCj4gPiArCX0NCj4gPiArDQo+ID4g KwlyYyA9IG9jeGxfY29udGV4dF9hbGxvYygmb2N4bHBtZW0tPm9jeGxfY29udGV4dCwgb2N4bHBt ZW0tDQo+ID4gPm9jeGxfYWZ1LCBOVUxMKTsNCj4gPiArCWlmIChyYykgew0KPiA+ICsJCWRldl9l cnIoJnBkZXYtPmRldiwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBPQ1hMDQo+ID4gY29udGV4dFxuIik7 DQo+ID4gKwkJZ290byBlcnI7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmMgPSBvY3hsX2NvbnRl eHRfYXR0YWNoKG9jeGxwbWVtLT5vY3hsX2NvbnRleHQsIDAsIE5VTEwpOw0KPiA+ICsJaWYgKHJj KSB7DQo+ID4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ291bGQgbm90IGF0dGFjaCBvY3hsIGNv bnRleHRcbiIpOw0KPiA+ICsJCWdvdG8gZXJyOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJjID0g cmVnaXN0ZXJfbHBjX21lbShvY3hscG1lbSk7DQo+ID4gKwlpZiAocmMpIHsNCj4gPiArCQlkZXZf ZXJyKCZwZGV2LT5kZXYsICJDb3VsZCBub3QgcmVnaXN0ZXIgT3BlbkNBUEkNCj4gPiBwZXJzaXN0 ZW50IG1lbW9yeSB3aXRoIGxpYm52ZGltbVxuIik7DQo+ID4gKwkJZ290byBlcnI7DQo+ID4gKwl9 DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICtlcnI6DQo+ID4gKwkvKg0KPiA+ ICsJICogRnVydGhlciBjbGVhbnVwIGlzIGRvbmUgaW4gdGhlIHJlbGVhc2UgaGFuZGxlciB2aWEN Cj4gPiBmcmVlX29jeGxwbWVtKCkNCj4gPiArCSAqIFRoaXMgYWxsb3dzIHVzIHRvIGtlZXAgdGhl IGNoYXJhY3RlciBkZXZpY2UgbGl2ZSB0byBoYW5kbGUNCj4gPiBJT0NUTHMgdG8NCj4gPiArCSAq IGludmVzdGlnYXRlIGlzc3VlcyBpZiB0aGUgY2FyZCBoYXMgYW4gZXJyb3INCj4gPiArCSAqLw0K PiANCj4gSWYgd2UgZmFpbCBwcm9iZSwgd2UgZG9uJ3QgY2FsbCBkZXZpY2VfdW5yZWdpc3Rlcigp IGFuZCB0aGUgZGF0YSANCj4gc3RydWN0dXJlcyB3aWxsIG5ldmVyIGJlIGZyZWVkLiBUaGUgY29t bWVudCBzZWVtcyB0byBpbmRpY2F0ZSBpdCdzDQo+IGRvbmUgDQo+IG9uIHB1cnBvc2UgYnV0IHRo YXQgbG9va3Mgc3VwcmlzaW5nIGFuZCB3cm9uZy4gSWYgd2UgZmFpbCBwcm9iZSwgdGhlIA0KPiBr ZXJuZWwgdGhpbmtzIHRoZSBkcml2ZXIgaXQgX25vdF8gaGFuZGxpbmcgdGhlIGRldmljZSwgc28g d2UgbmVlZCB0byANCj4gZXhpdCBwcm9iZSgpIGNsZWFubHkuIFdlJ3JlIG5vdCBzdXBwb3NlZCB0 byBiZSBhYmxlIHRvIG1ha2Ugc29tZQ0KPiBkZWJ1ZyANCj4gaW9jdGwgY2FsbHMuIE9uY2Ugd2Ug ZmFpbCBwcm9iZSwgdGhlIGtlcm5lbCBpcyBmcmVlIHRvIGRvIHdoYXRldmVyDQo+IGl0IA0KPiB3 YW50cyB3aXRoIHRoZSBwY2kgZGV2aWNlLiBJZiB5b3UgbWFuYWdlIHRvIGV4dHJhY3Qgc29tZSBk ZWJ1ZyBpbmZvIA0KPiBkdXJpbmcgZGV2ZWxvcG1lbnQsIHRoZW4gZmluZSwgYnV0IGl0J3Mgbm90 IHNvbWV0aGluZyB3ZSBjYW4gcmVseSBvbg0KPiBhbmQgDQo+IHVwc3RyZWFtLg0KPiBJZiB0aGUg Y2FyZCBlbnRlcnMgYW4gZXJyb3Igc3RhdGUgYWZ0ZXIgcHJvYmUoKSwgdGhlbiB3ZSBkb24ndCBu ZWVkDQo+IHRoYXQgDQo+IGFueXdheS4gV2UgaGF2ZSBhbGwgdGhlIHRpbWUgaW4gdGhlIHdvcmxk IHRvIGNhbGwgaW9jdGwncywgYXMgbG9uZyBhcw0KPiB3ZSANCj4gZG9uJ3QgY2FsbCB0aGUgcmVt b3ZlIGNhbGxiYWNrIG9mIHRoZSBkcml2ZXIuDQo+IA0KPiANCg0KT2sNCg0KPiANCj4gDQo+ID4g Kw0KPiA+ICsJZGV2X2VycigmcGRldi0+ZGV2LA0KPiA+ICsJCSJFcnJvciBkZXRlY3RlZCwgd2ls bCBub3QgcmVnaXN0ZXIgT3BlbkNBUEkgcGVyc2lzdGVudA0KPiA+IG1lbW9yeVxuIik7DQo+ID4g KwlyZXR1cm4gcmM7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZl ciBwY2lfZHJpdmVyID0gew0KPiA+ICsJLm5hbWUgPSAib2N4bC1wbWVtIiwNCj4gPiArCS5pZF90 YWJsZSA9IG9jeGxwbWVtX3BjaV90YmwsDQo+ID4gKwkucHJvYmUgPSBwcm9iZSwNCj4gPiArCS5y ZW1vdmUgPSBvY3hscG1lbV9yZW1vdmUsDQo+ID4gKwkuc2h1dGRvd24gPSBvY3hscG1lbV9yZW1v dmUsDQo+IA0KPiANCj4gbml0cGljazogd2h5IGRvZXNuJ3QgdGhlIHByb2JlIGNhbGxiYWNrIGZv bGxvdyB0aGUgc2FtZSBuYW1pbmcgDQo+IGNvbnZlbnRpb24/IEl0J3MgYWxsIHN0YXRpYyBhbmQg ZG9lc24ndCByZWFsbHkgbWF0dGVyLCBidXQuLi4NCg0KSSBoYWQgZHJvcHBlZCB0aGUgcHJlZml4 IHdoZW4gSSByZW5hbWVkIGZyb20gc2NtIGFzIGl0IGRvZXNuJ3QgcmVhbGx5DQp2YWx1ZS1hZGQs IGJ1dCBjbGVhcmx5LCBJIG1pc3NlZCBzb21lIDopIEknbGwgZml4IGl0Lg0KDQo+IA0KPiAgICBG cmVkDQo+IA0KPiANCj4gDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IF9faW5pdCBv Y3hscG1lbV9pbml0KHZvaWQpDQo+ID4gK3sNCj4gPiArCWludCByYyA9IDA7DQo+ID4gKw0KPiA+ ICsJcmMgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZwY2lfZHJpdmVyKTsNCj4gPiArCWlmIChyYykN Cj4gPiArCQlyZXR1cm4gcmM7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyB2b2lkIG9jeGxwbWVtX2V4aXQodm9pZCkNCj4gPiArew0KPiA+ICsJcGNp X3VucmVnaXN0ZXJfZHJpdmVyKCZwY2lfZHJpdmVyKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArbW9k dWxlX2luaXQob2N4bHBtZW1faW5pdCk7DQo+ID4gK21vZHVsZV9leGl0KG9jeGxwbWVtX2V4aXQp Ow0KPiA+ICsNCj4gPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJPcGVuQ0FQSSBQZXJzaXN0ZW50IE1l bW9yeSIpOw0KPiA+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7DQo+ID4gZGlmZiAtLWdpdCBhL2Fy Y2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9wbWVtL29jeGxfaW50ZXJuYWwuaA0KPiA+IGIv YXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L3BtZW0vb2N4bF9pbnRlcm5hbC5oDQo+ID4g bmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjBmYWYzNzQwZTli OA0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bv d2VybnYvcG1lbS9vY3hsX2ludGVybmFsLmgNCj4gPiBAQCAtMCwwICsxLDI4IEBADQo+ID4gKy8v IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKw0KPiA+ICsvLyBDb3B5cmlnaHQgMjAx OSBJQk0gQ29ycC4NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4NCj4gPiArI2lu Y2x1ZGUgPG1pc2Mvb2N4bC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbGlibnZkaW1tLmg+DQo+ ID4gKyNpbmNsdWRlIDxsaW51eC9tbS5oPg0KPiA+ICsNCj4gPiArI2RlZmluZSBMQUJFTF9BUkVB X1NJWkUJKDFVTCA8PCBQQV9TRUNUSU9OX1NISUZUKQ0KPiA+ICsNCj4gPiArc3RydWN0IG9jeGxw bWVtX2Z1bmN0aW9uMCB7DQo+ID4gKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsNCj4gPiArCXN0cnVj dCBvY3hsX2ZuICpvY3hsX2ZuOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IG9jeGxwbWVt IHsNCj4gPiArCXN0cnVjdCBkZXZpY2UgZGV2Ow0KPiA+ICsJc3RydWN0IHBjaV9kZXYgKnBkZXY7 DQo+ID4gKwlzdHJ1Y3Qgb2N4bF9mbiAqb2N4bF9mbjsNCj4gPiArCXN0cnVjdCBuZF9pbnRlcmxl YXZlX3NldCBuZF9zZXQ7DQo+ID4gKwlzdHJ1Y3QgbnZkaW1tX2J1c19kZXNjcmlwdG9yIGJ1c19k ZXNjOw0KPiA+ICsJc3RydWN0IG52ZGltbV9idXMgKm52ZGltbV9idXM7DQo+ID4gKwlzdHJ1Y3Qg b2N4bF9hZnUgKm9jeGxfYWZ1Ow0KPiA+ICsJc3RydWN0IG9jeGxfY29udGV4dCAqb2N4bF9jb250 ZXh0Ow0KPiA+ICsJdm9pZCAqbWV0YWRhdGFfYWRkcjsNCj4gPiArCXN0cnVjdCByZXNvdXJjZSBw bWVtX3JlczsNCj4gPiArCXN0cnVjdCBuZF9yZWdpb24gKm5kX3JlZ2lvbjsNCj4gPiArfTsNCj4g PiANCi0tIA0KQWxhc3RhaXIgRCdTaWx2YQ0KT3BlbiBTb3VyY2UgRGV2ZWxvcGVyDQpMaW51eCBU ZWNobm9sb2d5IENlbnRyZSwgSUJNIEF1c3RyYWxpYQ0KbW9iOiAwNDIzIDc2MiA4MTkNCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkxpbnV4LW52ZGltbSBt YWlsaW5nIGxpc3QgLS0gbGludXgtbnZkaW1tQGxpc3RzLjAxLm9yZwpUbyB1bnN1YnNjcmliZSBz ZW5kIGFuIGVtYWlsIHRvIGxpbnV4LW52ZGltbS1sZWF2ZUBsaXN0cy4wMS5vcmcK