Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp620315pxu; Sun, 22 Nov 2020 22:28:53 -0800 (PST) X-Google-Smtp-Source: ABdhPJySC6kwcYcvtoi+b2Ed8Xr4Nao9vHxArdcIKcIBHcVEcHUrmPLZixNKIsWZJ3HJK2E6T/wc X-Received: by 2002:a17:906:13d2:: with SMTP id g18mr23997786ejc.76.1606112933482; Sun, 22 Nov 2020 22:28:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1606112933; cv=none; d=google.com; s=arc-20160816; b=0LCLmGrrCGILkrKCFwlHSEHDAiFXEFWFAuNl6iEaXsvqlG26GnUxLYf13KcE6LO70q hd92VxfBHmDCMqxxhRzzAV/yLhwgnYytnVHYMXK6CIFq+hlTJA5qBsuU+Kc+2OS0JSqm k0io6iSNWsh1SzFbA/ZezpJ6yG3urIIO+0khoAab+SwzxtppWNEVBs6lqihK4ODQ3D31 NALgV8oJ/aDCTH2r8/vHAYbOqPZqslr/aOPG+h9/nVMOVvupTZT1C7uWz5tEmRo925og 2FqRUfwafi9mX6cMqoUmVLc0xSwhFss/kpn/aTemZydAM8CBRUKU+HgwlsiN/dZ6CJHf NWng== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:date:cc:to:from:subject:message-id :dkim-signature; bh=SBLG05GynrObP7KpWM13E0rlL5RiUaACThET1TRV1Q0=; b=T+SPM/LEvA9VyWJlvoGL6o4+BmkEwHPCmQGX1h3YTeBOvMd9O43LC9epLmZmpDjcx7 dHDpOX2+a8JG4SvJprOvFbYrdTe9XC3dUjXLIcELpfazPIos+0R0CHdG8GNk9QGe75J4 vwiUnl7maNJekTQktja5jPE2doCn0PJcYr98ds761mggZird8mNLy1Ot/KXDNIuX+NxC TwBht9dK4V3N4d/puIX3DaGhDoW19GmpgbdWiq4FtMlwshdMKhqYuAFl7VGD2jepXfj3 MIP0fLaLujbFBqZusg9eTy+Sscfu0FhW5qkvWGPd7m4p2w8mmFEowOGVYvwJGf7AMwiL mQoQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@mediatek.com header.s=dk header.b=Ouceu6aE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id jo9si5525331ejb.571.2020.11.22.22.28.30; Sun, 22 Nov 2020 22:28:53 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@mediatek.com header.s=dk header.b=Ouceu6aE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727916AbgKWGAd (ORCPT + 99 others); Mon, 23 Nov 2020 01:00:33 -0500 Received: from mailgw02.mediatek.com ([1.203.163.81]:51751 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1725275AbgKWGAc (ORCPT ); Mon, 23 Nov 2020 01:00:32 -0500 X-UUID: 9ba18b16750d42d198e6efb4476930c3-20201123 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=SBLG05GynrObP7KpWM13E0rlL5RiUaACThET1TRV1Q0=; b=Ouceu6aE67hSpkjsP1TdK7NTIBIGFMfC+TrFTh3TDh5LpxIE2gyF3sph9q0aM6A8zXUBAmJAUDqKXYe3C6EW/s/dm5SHggS6mvxoFqAHPduW9Y+SYE3Gq248Sf1Lf7CClrmj0K+vspwEpOpJa9E4fxftB5lSwZSf3753OEpTGwc=; X-UUID: 9ba18b16750d42d198e6efb4476930c3-20201123 Received: from mtkcas36.mediatek.inc [(172.27.4.253)] by mailgw02.mediatek.com (envelope-from ) (mailgw01.mediatek.com ESMTP with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256) with ESMTP id 486692251; Mon, 23 Nov 2020 13:59:37 +0800 Received: from MTKCAS36.mediatek.inc (172.27.4.186) by MTKMBS31DR.mediatek.inc (172.27.6.102) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 23 Nov 2020 13:59:33 +0800 Received: from [10.17.3.153] (10.17.3.153) by MTKCAS36.mediatek.inc (172.27.4.170) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Mon, 23 Nov 2020 13:59:32 +0800 Message-ID: <1606111173.14736.14.camel@mhfsdcap03> Subject: Re: [v4,2/3] PCI: mediatek: Add new generation controller support From: Jianjun Wang To: Rob Herring CC: Bjorn Helgaas , Lorenzo Pieralisi , Ryder Lee , , , , , "Mauro Carvalho Chehab" , , , , Sj Huang , , Philipp Zabel , Matthias Brugger , , Date: Mon, 23 Nov 2020 13:59:33 +0800 In-Reply-To: <20201119152226.GA3210967@bogus> References: <20201118082935.26828-1-jianjun.wang@mediatek.com> <20201118082935.26828-3-jianjun.wang@mediatek.com> <20201119152226.GA3210967@bogus> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.10.4-0ubuntu2 MIME-Version: 1.0 X-TM-SNTS-SMTP: AF0BFFC32D752602EF1CF9A0037541D86666CE32024EA750CD99F039EA9D059B2000:8 X-MTK: N Content-Transfer-Encoding: base64 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org T24gVGh1LCAyMDIwLTExLTE5IGF0IDA5OjIyIC0wNjAwLCBSb2IgSGVycmluZyB3cm90ZToNCj4g T24gV2VkLCBOb3YgMTgsIDIwMjAgYXQgMDQ6Mjk6MzRQTSArMDgwMCwgSmlhbmp1biBXYW5nIHdy b3RlOg0KPiA+IE1lZGlhVGVrJ3MgUENJZSBob3N0IGNvbnRyb2xsZXIgaGFzIHRocmVlIGdlbmVy YXRpb24gSFdzLCB0aGUgbmV3DQo+ID4gZ2VuZXJhdGlvbiBIVyBpcyBhbiBpbmRpdmlkdWFsIGJy aWRnZSwgaXQgc3Vwb29ydHMgR2VuMyBzcGVlZCBhbmQNCj4gPiB1cCB0byAyNTYgTVNJIGludGVy cnVwdCBudW1iZXJzIGZvciBtdWx0aS1mdW5jdGlvbiBkZXZpY2VzLg0KPiA+IA0KPiA+IEFkZCBz dXBwb3J0IGZvciBuZXcgR2VuMyBjb250cm9sbGVyIHdoaWNoIGNhbiBiZSBmb3VuZCBvbiBNVDgx OTIuDQo+ID4gDQo+ID4gU2lnbmVkLW9mZi1ieTogSmlhbmp1biBXYW5nIDxqaWFuanVuLndhbmdA bWVkaWF0ZWsuY29tPg0KPiA+IEFja2VkLWJ5OiBSeWRlciBMZWUgPHJ5ZGVyLmxlZUBtZWRpYXRl ay5jb20+DQo+ID4gLS0tDQo+ID4gIGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvS2NvbmZpZyAgICAg ICAgICAgICAgfCAgIDE0ICsNCj4gPiAgZHJpdmVycy9wY2kvY29udHJvbGxlci9NYWtlZmlsZSAg ICAgICAgICAgICB8ICAgIDEgKw0KPiA+ICBkcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtbWVk aWF0ZWstZ2VuMy5jIHwgMTAzMSArKysrKysrKysrKysrKysrKysrDQo+ID4gIDMgZmlsZXMgY2hh bmdlZCwgMTA0NiBpbnNlcnRpb25zKCspDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L3BjaS9jb250cm9sbGVyL3BjaWUtbWVkaWF0ZWstZ2VuMy5jDQo+ID4gDQo+ID4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvS2NvbmZpZyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xs ZXIvS2NvbmZpZw0KPiA+IGluZGV4IGYxOGMzNzI1ZWY4MC4uODNkYWE3NzI1OTViIDEwMDY0NA0K PiA+IC0tLSBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvS2NvbmZpZw0KPiA+ICsrKyBiL2RyaXZl cnMvcGNpL2NvbnRyb2xsZXIvS2NvbmZpZw0KPiA+IEBAIC0yMzksNiArMjM5LDIwIEBAIGNvbmZp ZyBQQ0lFX01FRElBVEVLDQo+ID4gIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxl IFBDSWUgY29udHJvbGxlciBzdXBwb3J0IG9uDQo+ID4gIAkgIE1lZGlhVGVrIFNvQ3MuDQo+ID4g IA0KPiA+ICtjb25maWcgUENJRV9NRURJQVRFS19HRU4zDQo+ID4gKwl0cmlzdGF0ZSAiTWVkaWFU ZWsgR0VOMyBQQ0llIGNvbnRyb2xsZXIiDQo+ID4gKwlkZXBlbmRzIG9uIEFSQ0hfTUVESUFURUsg fHwgQ09NUElMRV9URVNUDQo+ID4gKwlkZXBlbmRzIG9uIE9GDQo+ID4gKwlkZXBlbmRzIG9uIFBD SV9NU0lfSVJRX0RPTUFJTg0KPiA+ICsJaGVscA0KPiA+ICsJICBBZGRzIHN1cHBvcnQgZm9yIFBD SWUgR2VuMyBNQUMgY29udHJvbGxlciBmb3IgTWVkaWFUZWsgU29Dcy4NCj4gPiArCSAgVGhpcyBQ Q0llIGNvbnRyb2xsZXIgcHJvdmlkZXMgdGhlIGNhcGFibGUgb2YgR2VuMywgR2VuMiBhbmQNCj4g PiArCSAgR2VuMSBzcGVlZCwgYW5kIHN1cHBvcnQgdXAgdG8gMjU2IE1TSSBpbnRlcnJ1cHQgbnVt YmVycyBmb3INCj4gPiArCSAgbXVsdGktZnVuY3Rpb24gZGV2aWNlcy4NCj4gPiArDQo+ID4gKwkg IFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIEdlbjMgUENJZSBjb250cm9sbGVyIHN1 cHBvcnQgb24NCj4gPiArCSAgTWVkaWFUZWsgU29Dcy4NCj4gPiArDQo+ID4gIGNvbmZpZyBQQ0lF X1RBTkdPX1NNUDg3NTkNCj4gPiAgCWJvb2wgIlRhbmdvIFNNUDg3NTkgUENJZSBjb250cm9sbGVy IChEQU5HRVJPVVMpIg0KPiA+ICAJZGVwZW5kcyBvbiBBUkNIX1RBTkdPICYmIFBDSV9NU0kgJiYg T0YNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9NYWtlZmlsZSBiL2Ry aXZlcnMvcGNpL2NvbnRyb2xsZXIvTWFrZWZpbGUNCj4gPiBpbmRleCBiY2RiZjQ5YWIxZTQuLjlj MWI5Njc3NzU5NyAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL01ha2Vm aWxlDQo+ID4gKysrIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9NYWtlZmlsZQ0KPiA+IEBAIC0y Nyw2ICsyNyw3IEBAIG9iai0kKENPTkZJR19QQ0lFX1JPQ0tDSElQKSArPSBwY2llLXJvY2tjaGlw Lm8NCj4gPiAgb2JqLSQoQ09ORklHX1BDSUVfUk9DS0NISVBfRVApICs9IHBjaWUtcm9ja2NoaXAt ZXAubw0KPiA+ICBvYmotJChDT05GSUdfUENJRV9ST0NLQ0hJUF9IT1NUKSArPSBwY2llLXJvY2tj aGlwLWhvc3Qubw0KPiA+ICBvYmotJChDT05GSUdfUENJRV9NRURJQVRFSykgKz0gcGNpZS1tZWRp YXRlay5vDQo+ID4gK29iai0kKENPTkZJR19QQ0lFX01FRElBVEVLX0dFTjMpICs9IHBjaWUtbWVk aWF0ZWstZ2VuMy5vDQo+ID4gIG9iai0kKENPTkZJR19QQ0lFX1RBTkdPX1NNUDg3NTkpICs9IHBj aWUtdGFuZ28ubw0KPiA+ICBvYmotJChDT05GSUdfVk1EKSArPSB2bWQubw0KPiA+ICBvYmotJChD T05GSUdfUENJRV9CUkNNU1RCKSArPSBwY2llLWJyY21zdGIubw0KPiA+IGRpZmYgLS1naXQgYS9k cml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtbWVkaWF0ZWstZ2VuMy5jIGIvZHJpdmVycy9wY2kv Y29udHJvbGxlci9wY2llLW1lZGlhdGVrLWdlbjMuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi5kZDQ1NGNmZWUzNzMNCj4gPiAtLS0gL2Rldi9udWxs DQo+ID4gKysrIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLW1lZGlhdGVrLWdlbjMuYw0K PiA+IEBAIC0wLDAgKzEsMTAzMSBAQA0KPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMA0KPiA+ICsvKg0KPiA+ICsgKiBNZWRpYVRlayBQQ0llIGhvc3QgY29udHJvbGxlciBk cml2ZXIuDQo+ID4gKyAqDQo+ID4gKyAqIENvcHlyaWdodCAoYykgMjAyMCBNZWRpYVRlayBJbmMu DQo+ID4gKyAqIEF1dGhvcjogSmlhbmp1biBXYW5nIDxqaWFuanVuLndhbmdAbWVkaWF0ZWsuY29t Pg0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4NCj4gPiArI2lu Y2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4NCj4g PiArI2luY2x1ZGUgPGxpbnV4L2lycS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvaXJxY2hpcC9j aGFpbmVkX2lycS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvaXJxZG9tYWluLmg+DQo+ID4gKyNp bmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0K PiA+ICsjaW5jbHVkZSA8bGludXgvbXNpLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRy ZXNzLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9vZl9jbGsuaD4NCj4gPiArI2luY2x1ZGUgPGxp bnV4L29mX3BjaS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4NCj4gPiAr I2luY2x1ZGUgPGxpbnV4L3BjaS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPg0K PiA+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQo+ID4gKyNpbmNsdWRlIDxs aW51eC9wbV9kb21haW4uaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4NCj4g PiArI2luY2x1ZGUgPGxpbnV4L3Jlc2V0Lmg+DQo+ID4gKw0KPiA+ICsjaW5jbHVkZSAiLi4vcGNp LmgiDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFBDSUVfU0VUVElOR19SRUcJCTB4ODANCj4gPiArI2Rl ZmluZSBQQ0lFX1BDSV9JRFNfMQkJCTB4OWMNCj4gPiArI2RlZmluZSBQQ0lfQ0xBU1MoY2xhc3Mp CQkoY2xhc3MgPDwgOCkNCj4gPiArI2RlZmluZSBQQ0lFX1JDX01PREUJCQlCSVQoMCkNCj4gPiAr DQo+ID4gKyNkZWZpbmUgUENJRV9DRkdOVU1fUkVHCQkJMHgxNDANCj4gPiArI2RlZmluZSBQQ0lF X0NGR19ERVZGTihkZXZmbikJCSgoZGV2Zm4pICYgR0VOTUFTSyg3LCAwKSkNCj4gPiArI2RlZmlu ZSBQQ0lFX0NGR19CVVMoYnVzKQkJKCgoYnVzKSA8PCA4KSAmIEdFTk1BU0soMTUsIDgpKQ0KPiA+ ICsjZGVmaW5lIFBDSUVfQ0ZHX0JZVEVfRU4oYnl0ZXMpCQkoKChieXRlcykgPDwgMTYpICYgR0VO TUFTSygxOSwgMTYpKQ0KPiA+ICsjZGVmaW5lIFBDSUVfQ0ZHX0ZPUkNFX0JZVEVfRU4JCUJJVCgy MCkNCj4gPiArI2RlZmluZSBQQ0lFX0NGR19PRkZTRVRfQUREUgkJMHgxMDAwDQo+ID4gKyNkZWZp bmUgUENJRV9DRkdfSEVBREVSKGRldmZuLCBidXMpIFwNCj4gPiArCShQQ0lFX0NGR19ERVZGTihk ZXZmbikgfCBQQ0lFX0NGR19CVVMoYnVzKSkNCj4gPiArDQo+ID4gKyNkZWZpbmUgUENJRV9DRkdf SEVBREVSX0ZPUkNFX0JFKGRldmZuLCBidXMsIGJ5dGVzKSBcDQo+ID4gKwkoUENJRV9DRkdfSEVB REVSKGRldmZuLCBidXMpIHwgUENJRV9DRkdfQllURV9FTihieXRlcykgXA0KPiA+ICsJIHwgUENJ RV9DRkdfRk9SQ0VfQllURV9FTikNCj4gPiArDQo+ID4gKyNkZWZpbmUgUENJRV9SU1RfQ1RSTF9S RUcJCTB4MTQ4DQo+ID4gKyNkZWZpbmUgUENJRV9NQUNfUlNUQgkJCUJJVCgwKQ0KPiA+ICsjZGVm aW5lIFBDSUVfUEhZX1JTVEIJCQlCSVQoMSkNCj4gPiArI2RlZmluZSBQQ0lFX0JSR19SU1RCCQkJ QklUKDIpDQo+ID4gKyNkZWZpbmUgUENJRV9QRV9SU1RCCQkJQklUKDMpDQo+ID4gKw0KPiA+ICsj ZGVmaW5lIFBDSUVfTUlTQ19TVEFUVVNfUkVHCQkweDE0Qw0KPiA+ICsjZGVmaW5lIFBDSUVfTFRS X01TR19SRUNFSVZFRAkJQklUKDApDQo+ID4gKyNkZWZpbmUgUENJRV9QQ0lFX01TR19SRUNFSVZF RAkJQklUKDEpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFBDSUVfTFRTU01fU1RBVFVTX1JFRwkJMHgx NTANCj4gPiArI2RlZmluZSBQQ0lFX0xUU1NNX1NUQVRFX01BU0sJCUdFTk1BU0soMjgsIDI0KQ0K PiA+ICsjZGVmaW5lIFBDSUVfTFRTU01fU1RBVEUodmFsKQkJKCh2YWwgJiBQQ0lFX0xUU1NNX1NU QVRFX01BU0spID4+IDI0KQ0KPiA+ICsjZGVmaW5lIFBDSUVfTFRTU01fU1RBVEVfTDAJCTB4MTAN Cj4gPiArI2RlZmluZSBQQ0lFX0xUU1NNX1NUQVRFX0wxX0lETEUJMHgxMw0KPiA+ICsjZGVmaW5l IFBDSUVfTFRTU01fU1RBVEVfTDJfSURMRQkweDE0DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFBDSUVf TElOS19TVEFUVVNfUkVHCQkweDE1NA0KPiA+ICsjZGVmaW5lIFBDSUVfUE9SVF9MSU5LVVAJCUJJ VCg4KQ0KPiA+ICsNCj4gPiArI2RlZmluZSBQQ0lFX01TSV9TRVRfTlVNCQk4DQo+ID4gKyNkZWZp bmUgUENJRV9NU0lfSVJRU19QRVJfU0VUCQkzMg0KPiA+ICsjZGVmaW5lIFBDSUVfTVNJX0lSUVNf TlVNIFwNCj4gPiArCShQQ0lFX01TSV9JUlFTX1BFUl9TRVQgKiAoUENJRV9NU0lfU0VUX05VTSkp DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFBDSUVfSU5UX0VOQUJMRV9SRUcJCTB4MTgwDQo+ID4gKyNk ZWZpbmUgUENJRV9NU0lfTUFTSwkJCUdFTk1BU0soUENJRV9NU0lfU0VUX05VTSArIDggLSAxLCA4 KQ0KPiA+ICsjZGVmaW5lIFBDSUVfTVNJX1NISUZUCQkJOA0KPiA+ICsjZGVmaW5lIFBDSUVfSU5U WF9TSElGVAkJCTI0DQo+ID4gKyNkZWZpbmUgUENJRV9JTlRYX01BU0sJCQlHRU5NQVNLKDI3LCAy NCkNCj4gPiArI2RlZmluZSBQQ0lFX01TR19NQVNLCQkJQklUKDI4KQ0KPiA+ICsjZGVmaW5lIFBD SUVfQUVSX01BU0sJCQlCSVQoMjkpDQo+ID4gKyNkZWZpbmUgUENJRV9QTV9NQVNLCQkJQklUKDMw KQ0KPiA+ICsNCj4gPiArI2RlZmluZSBQQ0lFX0lOVF9TVEFUVVNfUkVHCQkweDE4NA0KPiA+ICsj ZGVmaW5lIFBDSUVfTVNJX1NFVF9FTkFCTEVfUkVHCQkweDE5MA0KPiA+ICsNCj4gPiArI2RlZmlu ZSBQQ0lFX0xPV19QT1dFUl9DVFJMX1JFRwkJMHgxOTQNCj4gPiArI2RlZmluZSBQQ0lFX0RJU19M T1dQV1JfTUFTSwkJR0VOTUFTSygzLCAwKQ0KPiA+ICsjZGVmaW5lIFBDSUVfRElTX0wwU19NQVNL CQlCSVQoMCkNCj4gPiArI2RlZmluZSBQQ0lFX0RJU19MMV9NQVNLCQlCSVQoMSkNCj4gPiArI2Rl ZmluZSBQQ0lFX0RJU19MMTFfTUFTSwkJQklUKDIpDQo+ID4gKyNkZWZpbmUgUENJRV9ESVNfTDEy X01BU0sJCUJJVCgzKQ0KPiA+ICsjZGVmaW5lIFBDSUVfRk9SQ0VfRElTX0xPV1BXUgkJR0VOTUFT SygxMSwgOCkNCj4gPiArI2RlZmluZSBQQ0lFX0ZPUkNFX0RJU19MMFMJCUJJVCg4KQ0KPiA+ICsj ZGVmaW5lIFBDSUVfRk9SQ0VfRElTX0wxCQlCSVQoOSkNCj4gPiArI2RlZmluZSBQQ0lFX0ZPUkNF X0RJU19MMTEJCUJJVCgxMCkNCj4gPiArI2RlZmluZSBQQ0lFX0ZPUkNFX0RJU19MMTIJCUJJVCgx MSkNCj4gPiArDQo+ID4gKyNkZWZpbmUgUENJRV9JQ01EX1BNX1JFRwkJMHgxOTgNCj4gPiArI2Rl ZmluZSBQQ0lFX1RVUk5fT0ZGX0xJTksJCUJJVCg0KQ0KPiA+ICsNCj4gPiArI2RlZmluZSBQQ0lF X01TSV9BRERSX0JBU0VfUkVHCQkweGMwMA0KPiA+ICsjZGVmaW5lIFBDSUVfTVNJX1NFVF9PRkZT RVQJCTB4MTANCj4gPiArI2RlZmluZSBQQ0lFX01TSV9TVEFUVVNfT0ZGU0VUCQkweDA0DQo+ID4g KyNkZWZpbmUgUENJRV9NU0lfRU5BQkxFX09GRlNFVAkJMHgwOA0KPiA+ICsNCj4gPiArI2RlZmlu ZSBQQ0lFX1RSQU5TX1RBQkxFX0JBU0VfUkVHCTB4ODAwDQo+ID4gKyNkZWZpbmUgUENJRV9BVFJf U1JDX0FERFJfTVNCX09GRlNFVAkweDQNCj4gPiArI2RlZmluZSBQQ0lFX0FUUl9UUlNMX0FERFJf TFNCX09GRlNFVAkweDgNCj4gPiArI2RlZmluZSBQQ0lFX0FUUl9UUlNMX0FERFJfTVNCX09GRlNF VAkweGMNCj4gPiArI2RlZmluZSBQQ0lFX0FUUl9UUlNMX1BBUkFNX09GRlNFVAkweDEwDQo+ID4g KyNkZWZpbmUgUENJRV9BVFJfVExCX1NFVF9PRkZTRVQJCTB4MjANCj4gPiArDQo+ID4gKyNkZWZp bmUgUENJRV9NQVhfVFJBTlNfVEFCTEVTCQk4DQo+ID4gKyNkZWZpbmUgQVRSX0VOCQkJCUJJVCgw KQ0KPiA+ICsjZGVmaW5lIEFUUl9TSVpFKHNpemUpCQkJKCgoKHNpemUpIC0gMSkgPDwgMSkgJiBH RU5NQVNLKDYsIDEpKQ0KPiA+ICsjZGVmaW5lIEFUUl9JRChpZCkJCQkoaWQgJiBHRU5NQVNLKDMs IDApKQ0KPiA+ICsjZGVmaW5lIEFUUl9QQVJBTShwYXJhbSkJCSgoKHBhcmFtKSA8PCAxNikgJiBH RU5NQVNLKDI3LCAxNikpDQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogc3RydWN0IG10a19wY2ll X21zaSAtIE1TSSBpbmZvcm1hdGlvbiBmb3IgZWFjaCBzZXQNCj4gPiArICogQGJhc2U6IElPIG1h cHBlZCByZWdpc3RlciBiYXNlDQo+ID4gKyAqIEBpcnE6IE1TSSBzZXQgSW50ZXJydXB0IG51bWJl cg0KPiA+ICsgKiBAaW5kZXg6IE1TSSBzZXQgbnVtYmVyDQo+ID4gKyAqIEBtc2dfYWRkcjogTVNJ IG1lc3NhZ2UgYWRkcmVzcw0KPiA+ICsgKiBAZG9tYWluOiBJUlEgZG9tYWluDQo+ID4gKyAqLw0K PiA+ICtzdHJ1Y3QgbXRrX3BjaWVfbXNpIHsNCj4gPiArCXZvaWQgX19pb21lbSAqYmFzZTsNCj4g PiArCXVuc2lnbmVkIGludCBpcnE7DQo+ID4gKwlpbnQgaW5kZXg7DQo+ID4gKwlwaHlzX2FkZHJf dCBtc2dfYWRkcjsNCj4gPiArCXN0cnVjdCBpcnFfZG9tYWluICpkb21haW47DQo+ID4gK307DQo+ ID4gKw0KPiA+ICsvKioNCj4gPiArICogc3RydWN0IG10a19wY2llX3BvcnQgLSBQQ0llIHBvcnQg aW5mb3JtYXRpb24NCj4gPiArICogQGRldjogUENJZSBkZXZpY2UNCj4gPiArICogQGJhc2U6IElP IG1hcHBlZCByZWdpc3RlciBiYXNlDQo+ID4gKyAqIEByZWdfYmFzZTogUGh5c2ljYWwgcmVnaXN0 ZXIgYmFzZQ0KPiA+ICsgKiBAbWFjX3Jlc2V0OiBtYWMgcmVzZXQgY29udHJvbA0KPiA+ICsgKiBA cGh5X3Jlc2V0OiBwaHkgcmVzZXQgY29udHJvbA0KPiA+ICsgKiBAcGh5OiBQSFkgY29udHJvbGxl ciBibG9jaw0KPiA+ICsgKiBAY2xrczogUENJZSBjbG9ja3MNCj4gPiArICogQG51bV9jbGtzOiBQ Q0llIGNsb2NrcyBjb3VudCBmb3IgdGhpcyBwb3J0DQo+ID4gKyAqIEBpc19zdXNwZW5kZWQ6IGRl dmljZSBzdXNwZW5kIHN0YXRlDQo+ID4gKyAqIEBpcnE6IFBDSWUgY29udHJvbGxlciBpbnRlcnJ1 cHQgbnVtYmVyDQo+ID4gKyAqIEBpbnR4X2RvbWFpbjogbGVnYWN5IElOVHggSVJRIGRvbWFpbg0K PiA+ICsgKiBAbXNpX2RvbWFpbjogTVNJIElSUSBkb21haW4NCj4gPiArICogQG1zaV90b3BfZG9t YWluOiBNU0kgSVJRIHRvcCBkb21haW4NCj4gPiArICogQG1zaV9pbmZvOiBNU0kgc2V0cyBpbmZv cm1hdGlvbg0KPiA+ICsgKiBAbG9jazogbG9jayBwcm90ZWN0aW5nIElSUSBiaXQgbWFwDQo+ID4g KyAqIEBtc2lfaXJxX2luX3VzZTogYml0IG1hcCBmb3IgYXNzaWduZWQgTVNJIElSUQ0KPiA+ICsg Ki8NCj4gPiArc3RydWN0IG10a19wY2llX3BvcnQgew0KPiA+ICsJc3RydWN0IGRldmljZSAqZGV2 Ow0KPiA+ICsJdm9pZCBfX2lvbWVtICpiYXNlOw0KPiA+ICsJcGh5c19hZGRyX3QgcmVnX2Jhc2U7 DQo+ID4gKwlzdHJ1Y3QgcmVzZXRfY29udHJvbCAqbWFjX3Jlc2V0Ow0KPiA+ICsJc3RydWN0IHJl c2V0X2NvbnRyb2wgKnBoeV9yZXNldDsNCj4gPiArCXN0cnVjdCBwaHkgKnBoeTsNCj4gPiArCXN0 cnVjdCBjbGtfYnVsa19kYXRhICpjbGtzOw0KPiA+ICsJaW50IG51bV9jbGtzOw0KPiA+ICsJYm9v bCBpc19zdXNwZW5kZWQ7DQo+ID4gKw0KPiA+ICsJaW50IGlycTsNCj4gPiArCXN0cnVjdCBpcnFf ZG9tYWluICppbnR4X2RvbWFpbjsNCj4gPiArCXN0cnVjdCBpcnFfZG9tYWluICptc2lfZG9tYWlu Ow0KPiA+ICsJc3RydWN0IGlycV9kb21haW4gKm1zaV90b3BfZG9tYWluOw0KPiA+ICsJc3RydWN0 IG10a19wY2llX21zaSAqKm1zaV9pbmZvOw0KPiA+ICsJc3RydWN0IG11dGV4IGxvY2s7DQo+ID4g KwlERUNMQVJFX0JJVE1BUChtc2lfaXJxX2luX3VzZSwgUENJRV9NU0lfSVJRU19OVU0pOw0KPiA+ ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGludCBtdGtfcGNpZV9jb25maWdfcmVhZChzdHJ1Y3Qg cGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sDQo+ID4gKwkJCQkgICAgaW50IHdoZXJl LCBpbnQgc2l6ZSwgdTMyICp2YWwpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBtdGtfcGNpZV9wb3J0 ICpwb3J0ID0gYnVzLT5zeXNkYXRhOw0KPiA+ICsJaW50IGJ5dGVzOw0KPiA+ICsNCj4gPiArCWJ5 dGVzID0gKCgxIDw8IHNpemUpIC0gMSkgPDwgKHdoZXJlICYgMHgzKTsNCj4gPiArCXdyaXRlbChQ Q0lFX0NGR19IRUFERVJfRk9SQ0VfQkUoZGV2Zm4sIGJ1cy0+bnVtYmVyLCBieXRlcyksDQo+ID4g KwkgICAgICAgcG9ydC0+YmFzZSArIFBDSUVfQ0ZHTlVNX1JFRyk7DQo+IA0KPiBQdXQgdGhpcyBp biBhIG1hcF9idXMoKSBmdW5jdGlvbiBhbmQgdGhlbiB1c2UgcGNpX2dlbmVyaWNfY29uZmlnX3Jl YWQzMiANCj4gYW5kIF93cml0ZTMyLg0KPiANCj4gMzItYml0IG9ubHkgYWNjZXNzZXMgYXJlIHBy b2JsZW1hdGljLiBEbyB5b3UgcmVxdWlyZSAzMi1iaXQgYWNjZXNzZXMgZm9yIA0KPiBkb3duc3Ry ZWFtIGRldmljZXMgb3IganVzdCByb290IHBvcnQvYnVzPyBZb3UgY2FuIG5vdyBkZWZpbmUgY2hp bGRfb3BzLiANCg0KSGkgUm9iLA0KDQpUaGFua3MgZm9yIHlvdXIgcmV2aWV3LCBJIHdpbGwgc3Bs aXQgaXQgdG8gYSBtYXBfYnVzKCkgZnVuY3Rpb24gYW5kDQpyZWFkL3dyaXRlIGZ1bmN0aW9ucyB3 aXRoIHBjaV9nZW5lcmljX2NvbmZpZ19yZWFkMzIvd3JpdGUzMiBpbiB0aGUgbmV4dA0KdmVyc2lv bi4NCg0KVGhlIENQVSBpbnRlcmZhY2UgY2FuIGJlIDMyLWJpdCBvbmx5IGFjY2Vzc2VzLCB3ZSB3 aWxsIGVuYWJsZSB0aGUNCnNpZ25pZmljYW50IGJ5dGVzIHdoaWNoIGluIHRoZSBUTFAgaGVhZGVy IGJ5IHNldHRpbmcgdGhlIHJlZ2lzdGVyIG9mDQpQQ0lFX0NGR05VTV9SRUcuDQoNClRoYW5rcy4N Cj4gDQo+ID4gKw0KPiA+ICsJKnZhbCA9IHJlYWRsKHBvcnQtPmJhc2UgKyBQQ0lFX0NGR19PRkZT RVRfQUREUiArICh3aGVyZSAmIH4weDMpKTsNCj4gPiArDQo+ID4gKwlpZiAoc2l6ZSA8PSAyKQ0K PiA+ICsJCSp2YWwgPSAoKnZhbCA+PiAoOCAqICh3aGVyZSAmIDB4MykpKSAmICgoMSA8PCAoc2l6 ZSAqIDgpKSAtIDEpOw0KPiA+ICsNCj4gPiArCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbXRrX3BjaWVfY29uZmlnX3dyaXRlKHN0cnVj dCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwNCj4gPiArCQkJCSAgICAgaW50IHdo ZXJlLCBpbnQgc2l6ZSwgdTMyIHZhbCkNCj4gPiArew0KPiA+ICsJc3RydWN0IG10a19wY2llX3Bv cnQgKnBvcnQgPSBidXMtPnN5c2RhdGE7DQo+ID4gKwlpbnQgYnl0ZXM7DQo+ID4gKw0KPiA+ICsJ Ynl0ZXMgPSAoKDEgPDwgc2l6ZSkgLSAxKSA8PCAod2hlcmUgJiAweDMpOw0KPiA+ICsJd3JpdGVs KFBDSUVfQ0ZHX0hFQURFUl9GT1JDRV9CRShkZXZmbiwgYnVzLT5udW1iZXIsIGJ5dGVzKSwNCj4g PiArCSAgICAgICBwb3J0LT5iYXNlICsgUENJRV9DRkdOVU1fUkVHKTsNCj4gPiArDQo+ID4gKwlp ZiAoc2l6ZSA8PSAyKQ0KPiA+ICsJCXZhbCA9ICh2YWwgJiAoKDEgPDwgKHNpemUgKiA4KSkgLSAx KSkgPDwgKCh3aGVyZSAmIDB4MykgKiA4KTsNCj4gPiArDQo+ID4gKwl3cml0ZWwodmFsLCBwb3J0 LT5iYXNlICsgUENJRV9DRkdfT0ZGU0VUX0FERFIgKyAod2hlcmUgJiB+MHgzKSk7DQo+ID4gKw0K PiA+ICsJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3Rh dGljIHN0cnVjdCBwY2lfb3BzIG10a19wY2llX29wcyA9IHsNCj4gPiArCS5yZWFkICA9IG10a19w Y2llX2NvbmZpZ19yZWFkLA0KPiA+ICsJLndyaXRlID0gbXRrX3BjaWVfY29uZmlnX3dyaXRlLA0K PiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgbXRrX3BjaWVfc2V0X3RyYW5zX3dpbmRv dyh2b2lkIF9faW9tZW0gKnJlZywNCj4gPiArCQkJCSAgICAgIHJlc291cmNlX3NpemVfdCBjcHVf YWRkciwNCj4gPiArCQkJCSAgICAgIHJlc291cmNlX3NpemVfdCBwY2lfYWRkciwgc2l6ZV90IHNp emUpDQo+ID4gK3sNCj4gPiArCXdyaXRlbChsb3dlcl8zMl9iaXRzKGNwdV9hZGRyKSB8IEFUUl9T SVpFKGZscyhzaXplKSAtIDEpIHwgQVRSX0VOLCByZWcpOw0KPiA+ICsJd3JpdGVsKHVwcGVyXzMy X2JpdHMoY3B1X2FkZHIpLCByZWcgKyBQQ0lFX0FUUl9TUkNfQUREUl9NU0JfT0ZGU0VUKTsNCj4g PiArCXdyaXRlbChsb3dlcl8zMl9iaXRzKHBjaV9hZGRyKSwgcmVnICsgUENJRV9BVFJfVFJTTF9B RERSX0xTQl9PRkZTRVQpOw0KPiA+ICsJd3JpdGVsKHVwcGVyXzMyX2JpdHMocGNpX2FkZHIpLCBy ZWcgKyBQQ0lFX0FUUl9UUlNMX0FERFJfTVNCX09GRlNFVCk7DQo+ID4gKwl3cml0ZWwoQVRSX0lE KDApIHwgQVRSX1BBUkFNKDApLCByZWcgKyBQQ0lFX0FUUl9UUlNMX1BBUkFNX09GRlNFVCk7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbXRrX3BjaWVfc2V0X3RyYW5zX3RhYmxlKHZv aWQgX19pb21lbSAqcmVnLA0KPiA+ICsJCQkJICAgIHJlc291cmNlX3NpemVfdCBjcHVfYWRkciwN Cj4gPiArCQkJCSAgICByZXNvdXJjZV9zaXplX3QgcGNpX2FkZHIsIHNpemVfdCBzaXplLA0KPiA+ ICsJCQkJICAgIGludCBudW0pDQo+IA0KPiBKdXN0IG1lcmdlIHRoZXNlIDIgZnVuY3Rpb25zIGlu dG8gMS4NCj4gDQo+ID4gK3sNCj4gPiArCXZvaWQgX19pb21lbSAqdGFibGVfYmFzZTsNCj4gPiAr DQo+ID4gKwlpZiAobnVtID4gUENJRV9NQVhfVFJBTlNfVEFCTEVTKQ0KPiA+ICsJCXJldHVybiAt RU5PREVWOw0KPiA+ICsNCj4gPiArCXRhYmxlX2Jhc2UgPSByZWcgKyBudW0gKiBQQ0lFX0FUUl9U TEJfU0VUX09GRlNFVDsNCj4gPiArCW10a19wY2llX3NldF90cmFuc193aW5kb3codGFibGVfYmFz ZSwgY3B1X2FkZHIsIHBjaV9hZGRyLCBzaXplKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBtdGtfcGNpZV9zdGFydHVwX3BvcnQoc3RydWN0 IG10a19wY2llX3BvcnQgKnBvcnQpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCByZXNvdXJjZV9lbnRy eSAqZW50cnk7DQo+ID4gKwlzdHJ1Y3QgcGNpX2hvc3RfYnJpZGdlICpob3N0ID0gcGNpX2hvc3Rf YnJpZGdlX2Zyb21fcHJpdihwb3J0KTsNCj4gPiArCXVuc2lnbmVkIGludCB0YWJsZV9pbmRleCA9 IDA7DQo+ID4gKwlpbnQgZXJyOw0KPiA+ICsJdTMyIHZhbDsNCj4gPiArDQo+ID4gKwkvKiBTZXQg YXMgUkMgbW9kZSAqLw0KPiA+ICsJdmFsID0gcmVhZGwocG9ydC0+YmFzZSArIFBDSUVfU0VUVElO R19SRUcpOw0KPiA+ICsJdmFsIHw9IFBDSUVfUkNfTU9ERTsNCj4gPiArCXdyaXRlbCh2YWwsIHBv cnQtPmJhc2UgKyBQQ0lFX1NFVFRJTkdfUkVHKTsNCj4gPiArDQo+ID4gKwkvKiBTZXQgY2xhc3Mg Y29kZSAqLw0KPiA+ICsJdmFsID0gcmVhZGwocG9ydC0+YmFzZSArIFBDSUVfUENJX0lEU18xKTsN Cj4gPiArCXZhbCAmPSB+R0VOTUFTSygzMSwgOCk7DQo+ID4gKwl2YWwgfD0gUENJX0NMQVNTKFBD SV9DTEFTU19CUklER0VfUENJIDw8IDgpOw0KPiA+ICsJd3JpdGVsKHZhbCwgcG9ydC0+YmFzZSAr IFBDSUVfUENJX0lEU18xKTsNCj4gPiArDQo+ID4gKwkvKiBBc3NlcnQgYWxsIHJlc2V0IHNpZ25h bHMgKi8NCj4gPiArCXZhbCA9IHJlYWRsKHBvcnQtPmJhc2UgKyBQQ0lFX1JTVF9DVFJMX1JFRyk7 DQo+ID4gKwl2YWwgfD0gUENJRV9NQUNfUlNUQiB8IFBDSUVfUEhZX1JTVEIgfCBQQ0lFX0JSR19S U1RCIHwgUENJRV9QRV9SU1RCOw0KPiA+ICsJd3JpdGVsKHZhbCwgcG9ydC0+YmFzZSArIFBDSUVf UlNUX0NUUkxfUkVHKTsNCj4gPiArDQo+ID4gKwkvKiBEZS1hc3NlcnQgcmVzZXQgc2lnbmFscyov DQo+ID4gKwl2YWwgJj0gfihQQ0lFX01BQ19SU1RCIHwgUENJRV9QSFlfUlNUQiB8IFBDSUVfQlJH X1JTVEIpOw0KPiA+ICsJd3JpdGVsKHZhbCwgcG9ydC0+YmFzZSArIFBDSUVfUlNUX0NUUkxfUkVH KTsNCj4gPiArDQo+ID4gKwkvKiBEZWxheSAxMDBtcyB0byB3YWl0IHRoZSByZWZlcmVuY2UgY2xv Y2tzIGJlY29tZSBzdGFibGUgKi8NCj4gPiArCXVzbGVlcF9yYW5nZSgxMDAgKiAxMDAwLCAxMjAg KiAxMDAwKTsNCj4gPiArDQo+ID4gKwkvKiBEZS1hc3NlcnQgcGUgcmVzZXQqLw0KPiA+ICsJdmFs ICY9IH5QQ0lFX1BFX1JTVEI7DQo+ID4gKwl3cml0ZWwodmFsLCBwb3J0LT5iYXNlICsgUENJRV9S U1RfQ1RSTF9SRUcpOw0KPiA+ICsNCj4gPiArCS8qIENoZWNrIGlmIHRoZSBsaW5rIGlzIHVwIG9y IG5vdCAqLw0KPiA+ICsJZXJyID0gcmVhZGxfcG9sbF90aW1lb3V0KHBvcnQtPmJhc2UgKyBQQ0lF X0xJTktfU1RBVFVTX1JFRywgdmFsLA0KPiA+ICsJCQkhISh2YWwgJiBQQ0lFX1BPUlRfTElOS1VQ KSwgMjAsDQo+ID4gKwkJCTUwICogVVNFQ19QRVJfTVNFQyk7DQo+ID4gKwlpZiAoZXJyKSB7DQo+ ID4gKwkJdmFsID0gcmVhZGwocG9ydC0+YmFzZSArIFBDSUVfTFRTU01fU1RBVFVTX1JFRyk7DQo+ ID4gKwkJZGV2X2RiZyhwb3J0LT5kZXYsICJsdHNzbSByZWcgdmFsOiAlI3hcbiIsIHZhbCk7DQo+ ID4gKwkJcmV0dXJuIGVycjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBTZXQgUENJZSB0cmFu c2xhdGlvbiB3aW5kb3dzICovDQo+ID4gKwlyZXNvdXJjZV9saXN0X2Zvcl9lYWNoX2VudHJ5KGVu dHJ5LCAmaG9zdC0+d2luZG93cykgew0KPiA+ICsJCXVuc2lnbmVkIGxvbmcgdHlwZSA9IHJlc291 cmNlX3R5cGUoZW50cnktPnJlcyk7DQo+ID4gKwkJc3RydWN0IHJlc291cmNlICpyZXMgPSBOVUxM Ow0KPiA+ICsJCXJlc291cmNlX3NpemVfdCBjcHVfYWRkcjsNCj4gPiArCQlyZXNvdXJjZV9zaXpl X3QgcGNpX2FkZHI7DQo+ID4gKw0KPiA+ICsJCWlmICghKHR5cGUgJiAoSU9SRVNPVVJDRV9NRU0g fCBJT1JFU09VUkNFX0lPKSkpDQo+ID4gKwkJCWNvbnRpbnVlOw0KPiA+ICsNCj4gPiArCQlyZXMg PSBlbnRyeS0+cmVzOw0KPiA+ICsJCWNwdV9hZGRyID0gcmVzLT5zdGFydDsNCj4gPiArCQlwY2lf YWRkciA9IHJlcy0+c3RhcnQgLSBlbnRyeS0+b2Zmc2V0Ow0KPiA+ICsJCW10a19wY2llX3NldF90 cmFuc190YWJsZShwb3J0LT5iYXNlICsgUENJRV9UUkFOU19UQUJMRV9CQVNFX1JFRywNCj4gPiAr CQkJCQkgY3B1X2FkZHIsIHBjaV9hZGRyLCByZXNvdXJjZV9zaXplKHJlcyksDQo+ID4gKwkJCQkJ IHRhYmxlX2luZGV4KTsNCj4gDQo+IFlvdSBkb24ndCBkaXN0aW5ndWlzaCBJTyByZWdpb25zIGlu IGFueSB3YXkuIEhvdyBjYW4gdGhhdCB3b3JrPw0KDQpUaGUgSU8gcmVnaW9ucyBuZWVkIGFkZGl0 aW9uYWwgc2V0dGluZ3MsIEkgd2lsbCBmaXggaXQgaW4gdGhlIG5leHQNCnZlcnNpb24uDQo+IA0K PiA+ICsNCj4gPiArCQlkZXZfZGJnKHBvcnQtPmRldiwgIlNldCAlcyB0cmFucyB3aW5kb3dbJWRd OiBjcHVfYWRkciA9ICUjbGx4LCBwY2lfYWRkciA9ICUjbGx4LCBzaXplID0gJSNsbHhcbiIsDQo+ ID4gKwkJCSghISh0eXBlICYgSU9SRVNPVVJDRV9NRU0pID8gIk1FTSIgOiAiSU8iKSwgdGFibGVf aW5kZXgsDQo+ID4gKwkJCWNwdV9hZGRyLCBwY2lfYWRkciwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsN Cj4gPiArDQo+ID4gKwkJdGFibGVfaW5kZXgrKzsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1 cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRrX3BjaWVf bXNpICptdGtfZ2V0X21zaV9pbmZvKHN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0LA0KPiA+ICsJ CQkJCQkgICAgdW5zaWduZWQgbG9uZyBod2lycSkNCj4gPiArew0KPiA+ICsJcmV0dXJuIHBvcnQt Pm1zaV9pbmZvW2h3aXJxIC8gUENJRV9NU0lfSVJRU19QRVJfU0VUXTsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArc3RhdGljIGludCBtdGtfcGNpZV9zZXRfYWZmaW5pdHkoc3RydWN0IGlycV9kYXRhICpk YXRhLA0KPiA+ICsJCQkJIGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBib29sIGZvcmNlKQ0K PiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCA9IGlycV9kYXRhX2dldF9p cnFfY2hpcF9kYXRhKGRhdGEpOw0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwlyZXQgPSBp cnFfc2V0X2FmZmluaXR5X2hpbnQocG9ydC0+aXJxLCBtYXNrKTsNCj4gPiArCWlmIChyZXQpDQo+ ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gKwlpcnFfZGF0YV91cGRhdGVfZWZmZWN0aXZl X2FmZmluaXR5KGRhdGEsIG1hc2spOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBtdGtfY29tcG9zZV9tc2lfbXNnKHN0cnVjdCBpcnFfZGF0 YSAqZGF0YSwgc3RydWN0IG1zaV9tc2cgKm1zZykNCj4gPiArew0KPiA+ICsJc3RydWN0IG10a19w Y2llX21zaSAqbXNpX2luZm87DQo+ID4gKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCA9IGly cV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOw0KPiA+ICsNCj4gPiArCW1zaV9pbmZvID0g bXRrX2dldF9tc2lfaW5mbyhwb3J0LCBkYXRhLT5od2lycSk7DQo+ID4gKw0KPiA+ICsJbXNnLT5h ZGRyZXNzX2hpID0gMDsNCj4gPiArCW1zZy0+YWRkcmVzc19sbyA9IGxvd2VyXzMyX2JpdHMobXNp X2luZm8tPm1zZ19hZGRyKTsNCj4gPiArDQo+ID4gKwltc2ctPmRhdGEgPSBkYXRhLT5od2lycTsN Cj4gPiArCWRldl9kYmcocG9ydC0+ZGV2LCAibXNpIyUjbHggYWRkcmVzc19oaSAlI3ggYWRkcmVz c19sbyAlI3ggZGF0YSAlZFxuIiwNCj4gPiArCQlkYXRhLT5od2lycSwgbXNnLT5hZGRyZXNzX2hp LCBtc2ctPmFkZHJlc3NfbG8sIG1zZy0+ZGF0YSk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyB2b2lkIG10a19tc2lfaXJxX2FjayhzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpDQo+ID4gK3sNCj4g PiArCXN0cnVjdCBtdGtfcGNpZV9tc2kgKm1zaV9pbmZvOw0KPiA+ICsJc3RydWN0IG10a19wY2ll X3BvcnQgKnBvcnQgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkYXRhKTsNCj4gPiArCXVu c2lnbmVkIGxvbmcgaHdpcnE7DQo+ID4gKw0KPiA+ICsJbXNpX2luZm8gPSBtdGtfZ2V0X21zaV9p bmZvKHBvcnQsIGRhdGEtPmh3aXJxKTsNCj4gPiArDQo+ID4gKwlod2lycSA9CWRhdGEtPmh3aXJx ICUgUENJRV9NU0lfSVJRU19QRVJfU0VUOw0KPiA+ICsNCj4gPiArCXdyaXRlbCgxIDw8IGh3aXJx LCBtc2lfaW5mby0+YmFzZSArIFBDSUVfTVNJX1NUQVRVU19PRkZTRVQpOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgdm9pZCBtdGtfbXNpX2lycV9tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZGF0 YSkNCj4gPiArew0KPiA+ICsJc3RydWN0IG10a19wY2llX21zaSAqbXNpX2luZm87DQo+ID4gKwlz dHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGRh dGEpOw0KPiA+ICsJdTMyIHZhbDsNCj4gPiArDQo+ID4gKwltc2lfaW5mbyA9IG10a19nZXRfbXNp X2luZm8ocG9ydCwgZGF0YS0+aHdpcnEpOw0KPiA+ICsJdmFsID0gcmVhZGwobXNpX2luZm8tPmJh c2UgKyBQQ0lFX01TSV9FTkFCTEVfT0ZGU0VUKTsNCj4gPiArCXZhbCAmPSB+KDEgPDwgZGF0YS0+ aHdpcnEpOw0KPiANCj4gVXNlIEJJVCgpIG1hY3JvIGhlcmUgYW5kIGVsc2V3aGVyZS4NCj4gDQo+ ID4gKwl3cml0ZWwodmFsLCBtc2lfaW5mby0+YmFzZSArIFBDSUVfTVNJX0VOQUJMRV9PRkZTRVQp Ow0KPiA+ICsNCj4gPiArCXBjaV9tc2lfbWFza19pcnEoZGF0YSk7DQo+ID4gK30NCj4gPiArDQo+ ID4gK3N0YXRpYyB2b2lkIG10a19tc2lfaXJxX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEp DQo+ID4gK3sNCj4gPiArCXN0cnVjdCBtdGtfcGNpZV9tc2kgKm1zaV9pbmZvOw0KPiA+ICsJc3Ry dWN0IG10a19wY2llX3BvcnQgKnBvcnQgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkYXRh KTsNCj4gPiArCXUzMiB2YWw7DQo+ID4gKw0KPiA+ICsJbXNpX2luZm8gPSBtdGtfZ2V0X21zaV9p bmZvKHBvcnQsIGRhdGEtPmh3aXJxKTsNCj4gPiArCXZhbCA9IHJlYWRsKG1zaV9pbmZvLT5iYXNl ICsgUENJRV9NU0lfRU5BQkxFX09GRlNFVCk7DQo+ID4gKwl2YWwgfD0gKDEgPDwgZGF0YS0+aHdp cnEpOw0KPiA+ICsJd3JpdGVsKHZhbCwgbXNpX2luZm8tPmJhc2UgKyBQQ0lFX01TSV9FTkFCTEVf T0ZGU0VUKTsNCj4gPiArDQo+ID4gKwlwY2lfbXNpX3VubWFza19pcnEoZGF0YSk7DQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbXRrX21zaV9pcnFfY2hpcCA9IHsN Cj4gPiArCS5pcnFfYWNrCQk9IG10a19tc2lfaXJxX2FjaywNCj4gPiArCS5pcnFfY29tcG9zZV9t c2lfbXNnCT0gbXRrX2NvbXBvc2VfbXNpX21zZywNCj4gPiArCS5pcnFfbWFzawkJPSBtdGtfbXNp X2lycV9tYXNrLA0KPiA+ICsJLmlycV91bm1hc2sJCT0gbXRrX21zaV9pcnFfdW5tYXNrLA0KPiA+ ICsJLmlycV9zZXRfYWZmaW5pdHkJPSBtdGtfcGNpZV9zZXRfYWZmaW5pdHksDQo+ID4gKwkubmFt ZQkJCT0gIlBDSWUiLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGlycV9od19udW1iZXJf dCBtdGtfcGNpZV9tc2lfZ2V0X2h3aXJxKHN0cnVjdCBtc2lfZG9tYWluX2luZm8gKmluZm8sDQo+ ID4gKwkJCQkJICAgICAgbXNpX2FsbG9jX2luZm9fdCAqYXJnKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1 Y3QgbXNpX2Rlc2MgKmVudHJ5ID0gYXJnLT5kZXNjOw0KPiA+ICsJc3RydWN0IG10a19wY2llX3Bv cnQgKnBvcnQgPSBpbmZvLT5jaGlwX2RhdGE7DQo+ID4gKwlpbnQgaHdpcnE7DQo+ID4gKw0KPiA+ ICsJbXV0ZXhfbG9jaygmcG9ydC0+bG9jayk7DQo+ID4gKw0KPiA+ICsJaHdpcnEgPSBiaXRtYXBf ZmluZF9mcmVlX3JlZ2lvbihwb3J0LT5tc2lfaXJxX2luX3VzZSwgUENJRV9NU0lfSVJRU19OVU0s DQo+ID4gKwkJCW9yZGVyX2Jhc2VfMihlbnRyeS0+bnZlY191c2VkKSk7DQo+ID4gKwlpZiAoaHdp cnEgPCAwKSB7DQo+ID4gKwkJbXV0ZXhfdW5sb2NrKCZwb3J0LT5sb2NrKTsNCj4gPiArCQlyZXR1 cm4gLUVOT1NQQzsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwltdXRleF91bmxvY2soJnBvcnQtPmxv Y2spOw0KPiA+ICsNCj4gPiArCXJldHVybiBod2lycTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3Rh dGljIHZvaWQgbXRrX3BjaWVfbXNpX2ZyZWUoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwNCj4g PiArCQkJICAgICAgc3RydWN0IG1zaV9kb21haW5faW5mbyAqaW5mbywgdW5zaWduZWQgaW50IHZp cnEpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBpcnFfZGF0YSAqZGF0YSA9IGlycV9kb21haW5fZ2V0 X2lycV9kYXRhKGRvbWFpbiwgdmlycSk7DQo+ID4gKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9y dCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOw0KPiA+ICsNCj4gPiArCW11dGV4 X2xvY2soJnBvcnQtPmxvY2spOw0KPiA+ICsNCj4gPiArCWJpdG1hcF9jbGVhcihwb3J0LT5tc2lf aXJxX2luX3VzZSwgZGF0YS0+aHdpcnEsIDEpOw0KPiA+ICsNCj4gPiArCW11dGV4X3VubG9jaygm cG9ydC0+bG9jayk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgbXNpX2RvbWFp bl9vcHMgbXRrX21zaV9kb21haW5fb3BzID0gew0KPiA+ICsJLmdldF9od2lycQk9IG10a19wY2ll X21zaV9nZXRfaHdpcnEsDQo+ID4gKwkubXNpX2ZyZWUJPSBtdGtfcGNpZV9tc2lfZnJlZSwNCj4g PiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvIG10a19tc2lf ZG9tYWluX2luZm8gPSB7DQo+ID4gKwkuZmxhZ3MJCT0gKE1TSV9GTEFHX1VTRV9ERUZfRE9NX09Q UyB8IE1TSV9GTEFHX1BDSV9NU0lYIHwNCj4gPiArCQkJICAgTVNJX0ZMQUdfVVNFX0RFRl9DSElQ X09QUyB8IE1TSV9GTEFHX01VTFRJX1BDSV9NU0kpLA0KPiA+ICsJLmNoaXAJCT0gJm10a19tc2lf aXJxX2NoaXAsDQo+ID4gKwkub3BzCQk9ICZtdGtfbXNpX2RvbWFpbl9vcHMsDQo+ID4gKwkuaGFu ZGxlcgk9IGhhbmRsZV9lZGdlX2lycSwNCj4gPiArCS5oYW5kbGVyX25hbWUJPSAiTVNJIiwNCj4g PiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIG10a19tc2lfdG9wX2lycV9lb2koc3RydWN0 IGlycV9kYXRhICpkYXRhKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9y dCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOw0KPiA+ICsJdW5zaWduZWQgbG9u ZyBtc2lfaXJxID0gZGF0YS0+aHdpcnEgKyBQQ0lFX01TSV9TSElGVDsNCj4gPiArDQo+ID4gKwl3 cml0ZWwoMSA8PCBtc2lfaXJxLCBwb3J0LT5iYXNlICsgUENJRV9JTlRfU1RBVFVTX1JFRyk7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbXRrX21zaV90b3BfaXJx X2NoaXAgPSB7DQo+ID4gKwkuaXJxX2VvaQk9IG10a19tc2lfdG9wX2lycV9lb2ksDQo+ID4gKwku bmFtZQkJPSAiUENJZSIsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBtdGtfcGNp ZV9tc2lfaGFuZGxlcihzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpDQo+ID4gK3sNCj4gPiArCXN0cnVj dCBtdGtfcGNpZV9tc2kgKm1zaV9pbmZvID0gaXJxX2Rlc2NfZ2V0X2hhbmRsZXJfZGF0YShkZXNj KTsNCj4gPiArCXN0cnVjdCBpcnFfY2hpcCAqaXJxY2hpcCA9IGlycV9kZXNjX2dldF9jaGlwKGRl c2MpOw0KPiA+ICsJdW5zaWduZWQgbG9uZyBtc2lfZW5hYmxlLCBtc2lfc3RhdHVzOw0KPiA+ICsJ dW5zaWduZWQgaW50IHZpcnE7DQo+ID4gKwlpcnFfaHdfbnVtYmVyX3QgYml0LCBod2lycTsNCj4g PiArDQo+ID4gKwljaGFpbmVkX2lycV9lbnRlcihpcnFjaGlwLCBkZXNjKTsNCj4gPiArDQo+ID4g Kwltc2lfZW5hYmxlID0gcmVhZGwobXNpX2luZm8tPmJhc2UgKyBQQ0lFX01TSV9FTkFCTEVfT0ZG U0VUKTsNCj4gPiArCXdoaWxlICgobXNpX3N0YXR1cyA9IHJlYWRsKG1zaV9pbmZvLT5iYXNlICsg UENJRV9NU0lfU1RBVFVTX09GRlNFVCkpKSB7DQo+ID4gKwkJbXNpX3N0YXR1cyAmPSBtc2lfZW5h YmxlOw0KPiA+ICsJCWZvcl9lYWNoX3NldF9iaXQoYml0LCAmbXNpX3N0YXR1cywgUENJRV9NU0lf SVJRU19QRVJfU0VUKSB7DQo+ID4gKwkJCWh3aXJxID0gYml0ICsgbXNpX2luZm8tPmluZGV4ICog UENJRV9NU0lfSVJRU19QRVJfU0VUOw0KPiA+ICsJCQl2aXJxID0gaXJxX2ZpbmRfbWFwcGluZyht c2lfaW5mby0+ZG9tYWluLCBod2lycSk7DQo+ID4gKwkJCWdlbmVyaWNfaGFuZGxlX2lycSh2aXJx KTsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJY2hhaW5lZF9pcnFfZXhpdChpcnFj aGlwLCBkZXNjKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBtdGtfbXNpX3RvcF9k b21haW5fbWFwKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sDQo+ID4gKwkJCQkgICAgdW5zaWdu ZWQgaW50IHZpcnEsIGlycV9od19udW1iZXJfdCBod2lycSkNCj4gPiArew0KPiA+ICsJc3RydWN0 IG10a19wY2llX3BvcnQgKnBvcnQgPSBkb21haW4tPmhvc3RfZGF0YTsNCj4gPiArCXN0cnVjdCBt dGtfcGNpZV9tc2kgKm1zaV9pbmZvID0gcG9ydC0+bXNpX2luZm9baHdpcnFdOw0KPiA+ICsNCj4g PiArCWlycV9kb21haW5fc2V0X2luZm8oZG9tYWluLCB2aXJxLCBod2lycSwNCj4gPiArCQkJICAg ICZtdGtfbXNpX3RvcF9pcnFfY2hpcCwgZG9tYWluLT5ob3N0X2RhdGEsDQo+ID4gKwkJCSAgICBt dGtfcGNpZV9tc2lfaGFuZGxlciwgbXNpX2luZm8sIE5VTEwpOw0KPiA+ICsNCj4gPiArCXJldHVy biAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGlycV9kb21haW5f b3BzIG10a19tc2lfdG9wX2RvbWFpbl9vcHMgPSB7DQo+ID4gKwkubWFwID0gbXRrX21zaV90b3Bf ZG9tYWluX21hcCwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIG10a19pbnR4X21h c2soc3RydWN0IGlycV9kYXRhICpkYXRhKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbXRrX3BjaWVf cG9ydCAqcG9ydCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOw0KPiA+ICsJdTMy IHZhbDsNCj4gPiArDQo+ID4gKwl2YWwgPSByZWFkbChwb3J0LT5iYXNlICsgUENJRV9JTlRfRU5B QkxFX1JFRyk7DQo+ID4gKwl2YWwgJj0gfigxIDw8IChkYXRhLT5od2lycSArIFBDSUVfSU5UWF9T SElGVCkpOw0KPiA+ICsJd3JpdGVsKHZhbCwgcG9ydC0+YmFzZSArIFBDSUVfSU5UX0VOQUJMRV9S RUcpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBtdGtfaW50eF91bm1hc2soc3Ry dWN0IGlycV9kYXRhICpkYXRhKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAq cG9ydCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOw0KPiA+ICsJdTMyIHZhbDsN Cj4gPiArDQo+ID4gKwl2YWwgPSByZWFkbChwb3J0LT5iYXNlICsgUENJRV9JTlRfRU5BQkxFX1JF Ryk7DQo+ID4gKwl2YWwgfD0gMSA8PCAoZGF0YS0+aHdpcnEgKyBQQ0lFX0lOVFhfU0hJRlQpOw0K PiA+ICsJd3JpdGVsKHZhbCwgcG9ydC0+YmFzZSArIFBDSUVfSU5UX0VOQUJMRV9SRUcpOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBtdGtfaW50eF9lb2koc3RydWN0IGlycV9kYXRh ICpkYXRhKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCA9IGlycV9k YXRhX2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOw0KPiA+ICsJdW5zaWduZWQgbG9uZyBod2lycTsN Cj4gPiArDQo+ID4gKwkvKioNCj4gPiArCSAqIEFzIGFuIGVtdWxhdGVkIGxldmVsIGlycSwgaXRz IGludGVycnVwdCBzdGF0dXMgd2lsbCBiZSByZW1haW5lZA0KPiA+ICsJICogdW50aWwgcmVjZWl2 ZSB0aGUgY29ycmVzcG9uZGluZyBtZXNzYWdlIG9mIGRlLWFzc2VydCwgaGVuY2UgdGhhdA0KPiA+ ICsJICogdGhlIHN0YXR1cyBjYW4gb25seSBiZSBjbGVhcmVkIHdoZW4gdGhlIGludGVycnVwdCBo YXMgYmVlbiBzZXJ2aWNlZC4NCj4gPiArCSAqLw0KPiA+ICsJaHdpcnEgPSBkYXRhLT5od2lycSAr IFBDSUVfSU5UWF9TSElGVDsNCj4gPiArCXdyaXRlbCgxIDw8IGh3aXJxLCBwb3J0LT5iYXNlICsg UENJRV9JTlRfU1RBVFVTX1JFRyk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3Qg aXJxX2NoaXAgbXRrX2ludHhfaXJxX2NoaXAgPSB7DQo+ID4gKwkuaXJxX21hc2sJCT0gbXRrX2lu dHhfbWFzaywNCj4gPiArCS5pcnFfdW5tYXNrCQk9IG10a19pbnR4X3VubWFzaywNCj4gPiArCS5p cnFfZW9pCQk9IG10a19pbnR4X2VvaSwNCj4gPiArCS5pcnFfc2V0X2FmZmluaXR5CT0gbXRrX3Bj aWVfc2V0X2FmZmluaXR5LA0KPiA+ICsJLm5hbWUJCQk9ICJQQ0llIiwNCj4gPiArfTsNCj4gPiAr DQo+ID4gK3N0YXRpYyBpbnQgbXRrX3BjaWVfaW50eF9tYXAoc3RydWN0IGlycV9kb21haW4gKmRv bWFpbiwgdW5zaWduZWQgaW50IGlycSwNCj4gPiArCQkJICAgICBpcnFfaHdfbnVtYmVyX3QgaHdp cnEpDQo+ID4gK3sNCj4gPiArCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJm10 a19pbnR4X2lycV9jaGlwLA0KPiA+ICsJCQkJICAgICAgaGFuZGxlX2Zhc3Rlb2lfaXJxLCAiSU5U eCIpOw0KPiA+ICsJaXJxX3NldF9jaGlwX2RhdGEoaXJxLCBkb21haW4tPmhvc3RfZGF0YSk7DQo+ ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBz dHJ1Y3QgaXJxX2RvbWFpbl9vcHMgaW50eF9kb21haW5fb3BzID0gew0KPiA+ICsJLm1hcCA9IG10 a19wY2llX2ludHhfbWFwLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGludCBtdGtfcGNp ZV9pbml0X2lycV9kb21haW5zKHN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0LA0KPiA+ICsJCQkJ ICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBkZXZp Y2UgKmRldiA9IHBvcnQtPmRldjsNCj4gPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqaW50Y19ub2Rl Ow0KPiA+ICsJc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSA9IG9mX25vZGVfdG9fZndub2Rl KG5vZGUpOw0KPiA+ICsJc3RydWN0IG10a19wY2llX21zaSAqbXNpX2luZm87DQo+ID4gKwlzdHJ1 Y3QgbXNpX2RvbWFpbl9pbmZvICppbmZvOw0KPiA+ICsJaW50IGksIHJldDsNCj4gPiArDQo+ID4g KwkvKiBTZXR1cCBJTlR4ICovDQo+ID4gKwlpbnRjX25vZGUgPSBvZl9nZXRfY2hpbGRfYnlfbmFt ZShub2RlLCAiaW50ZXJydXB0LWNvbnRyb2xsZXIiKTsNCj4gPiArCWlmICghaW50Y19ub2RlKSB7 DQo+ID4gKwkJZGV2X25vdGljZShkZXYsICJNaXNzaW5nIFBDSWUgSW50YyBub2RlXG4iKTsNCj4g PiArCQlyZXR1cm4gLUVOT0RFVjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlwb3J0LT5pbnR4X2Rv bWFpbiA9IGlycV9kb21haW5fYWRkX2xpbmVhcihpbnRjX25vZGUsIFBDSV9OVU1fSU5UWCwNCj4g PiArCQkJCQkJICAmaW50eF9kb21haW5fb3BzLCBwb3J0KTsNCj4gPiArCWlmICghcG9ydC0+aW50 eF9kb21haW4pIHsNCj4gPiArCQlkZXZfbm90aWNlKGRldiwgImZhaWxlZCB0byBnZXQgSU5UeCBJ UlEgZG9tYWluXG4iKTsNCj4gPiArCQlyZXR1cm4gLUVOT0RFVjsNCj4gPiArCX0NCj4gPiArDQo+ ID4gKwkvKiBTZXR1cCBNU0kgKi8NCj4gPiArCW11dGV4X2luaXQoJnBvcnQtPmxvY2spOw0KPiA+ ICsNCj4gPiArCWluZm8gPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmluZm8pLCBHRlBfS0VS TkVMKTsNCj4gPiArCWlmICghaW5mbykNCj4gPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gPiArDQo+ ID4gKwltZW1jcHkoaW5mbywgJm10a19tc2lfZG9tYWluX2luZm8sIHNpemVvZigqaW5mbykpOw0K PiA+ICsJaW5mby0+Y2hpcF9kYXRhID0gcG9ydDsNCj4gPiArDQo+ID4gKwlwb3J0LT5tc2lfZG9t YWluID0gcGNpX21zaV9jcmVhdGVfaXJxX2RvbWFpbihmd25vZGUsIGluZm8sIE5VTEwpOw0KPiA+ ICsJaWYgKCFwb3J0LT5tc2lfZG9tYWluKSB7DQo+ID4gKwkJZGV2X2luZm8oZGV2LCAiZmFpbGVk IHRvIGNyZWF0ZSBtc2kgZG9tYWluXG4iKTsNCj4gPiArCQlyZXQgPSAtRU5PREVWOw0KPiA+ICsJ CWdvdG8gZXJyX21zaV9kb21haW47DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogRW5hYmxlIE1T SSBhbmQgc2V0dXAgcGNpZSBkb21haW5zICovDQo+ID4gKwlwb3J0LT5tc2lfdG9wX2RvbWFpbiA9 IGlycV9kb21haW5fYWRkX2hpZXJhcmNoeShOVUxMLCAwLCAwLCBub2RlLA0KPiA+ICsJCQkJCQkJ Jm10a19tc2lfdG9wX2RvbWFpbl9vcHMsDQo+ID4gKwkJCQkJCQlwb3J0KTsNCj4gPiArCWlmICgh cG9ydC0+bXNpX3RvcF9kb21haW4pIHsNCj4gPiArCQlkZXZfaW5mbyhkZXYsICJmYWlsZWQgdG8g Y3JlYXRlIG1zaSB0b3AgZG9tYWluXG4iKTsNCj4gPiArCQlyZXQgPSAtRU5PREVWOw0KPiA+ICsJ CWdvdG8gZXJyX21zaV90b3BfZG9tYWluOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXBvcnQtPm1z aV9pbmZvID0gZGV2bV9remFsbG9jKGRldiwgUENJRV9NU0lfU0VUX05VTSwgR0ZQX0tFUk5FTCk7 DQo+ID4gKwlpZiAoIXBvcnQtPm1zaV9pbmZvKSB7DQo+ID4gKwkJcmV0ID0gLUVOT01FTTsNCj4g PiArCQlnb3RvIGVycl9tc2lfaW5mbzsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAw OyBpIDwgUENJRV9NU0lfU0VUX05VTTsgaSsrKSB7DQo+ID4gKwkJaW50IG9mZnNldCA9IGkgKiBQ Q0lFX01TSV9TRVRfT0ZGU0VUOw0KPiA+ICsJCXUzMiB2YWw7DQo+ID4gKw0KPiA+ICsJCW1zaV9p bmZvID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCptc2lfaW5mbyksIEdGUF9LRVJORUwpOw0K PiA+ICsJCWlmICghbXNpX2luZm8pIHsNCj4gPiArCQkJcmV0ID0gLUVOT01FTTsNCj4gPiArCQkJ Z290byBlcnJfbXNpX3NldDsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCW1zaV9pbmZvLT5iYXNl ID0gcG9ydC0+YmFzZSArIFBDSUVfTVNJX0FERFJfQkFTRV9SRUcgKyBvZmZzZXQ7DQo+ID4gKwkJ bXNpX2luZm8tPm1zZ19hZGRyID0gcG9ydC0+cmVnX2Jhc2UgKyBQQ0lFX01TSV9BRERSX0JBU0Vf UkVHICsNCj4gPiArCQkJCSAgICAgb2Zmc2V0Ow0KPiA+ICsNCj4gPiArCQl3cml0ZWwobG93ZXJf MzJfYml0cyhtc2lfaW5mby0+bXNnX2FkZHIpLCBtc2lfaW5mby0+YmFzZSk7DQo+ID4gKw0KPiA+ ICsJCW1zaV9pbmZvLT5pbmRleCA9IGk7DQo+ID4gKwkJbXNpX2luZm8tPmRvbWFpbiA9IHBvcnQt Pm1zaV9kb21haW47DQo+ID4gKw0KPiA+ICsJCXBvcnQtPm1zaV9pbmZvW2ldID0gbXNpX2luZm87 DQo+ID4gKw0KPiA+ICsJCS8qIEFsbG9jIGlycSBmb3IgZWFjaCBtc2kgc2V0ICovDQo+ID4gKwkJ bXNpX2luZm8tPmlycSA9IGlycV9jcmVhdGVfbWFwcGluZyhwb3J0LT5tc2lfdG9wX2RvbWFpbiwg aSk7DQo+ID4gKwkJaWYgKCFtc2lfaW5mby0+aXJxKSB7DQo+ID4gKwkJCWRldl9pbmZvKGRldiwg ImFsbG9jYXRlIG1zaSB0b3AgaXJxIGZhaWxlZFxuIik7DQo+ID4gKwkJCXJldCA9IC1FTk9TUEM7 DQo+ID4gKwkJCWdvdG8gZXJyX21zaV9zZXQ7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQl2YWwg PSByZWFkbChwb3J0LT5iYXNlICsgUENJRV9JTlRfRU5BQkxFX1JFRyk7DQo+ID4gKwkJdmFsIHw9 ICgxIDw8IChpICsgUENJRV9NU0lfU0hJRlQpKTsNCj4gPiArCQl3cml0ZWwodmFsLCBwb3J0LT5i YXNlICsgUENJRV9JTlRfRU5BQkxFX1JFRyk7DQo+ID4gKw0KPiA+ICsJCXZhbCA9IHJlYWRsKHBv cnQtPmJhc2UgKyBQQ0lFX01TSV9TRVRfRU5BQkxFX1JFRyk7DQo+ID4gKwkJdmFsIHw9ICgxIDw8 IGkpOw0KPiA+ICsJCXdyaXRlbCh2YWwsIHBvcnQtPmJhc2UgKyBQQ0lFX01TSV9TRVRfRU5BQkxF X1JFRyk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICtlcnJf bXNpX3NldDoNCj4gPiArCXdoaWxlICgtLWkgPj0gMCkgew0KPiA+ICsJCW1zaV9pbmZvID0gcG9y dC0+bXNpX2luZm9baV07DQo+ID4gKwkJaXJxX2Rpc3Bvc2VfbWFwcGluZyhtc2lfaW5mby0+aXJx KTsNCj4gPiArCX0NCj4gPiArZXJyX21zaV9pbmZvOg0KPiA+ICsJaXJxX2RvbWFpbl9yZW1vdmUo cG9ydC0+bXNpX3RvcF9kb21haW4pOw0KPiA+ICtlcnJfbXNpX3RvcF9kb21haW46DQo+ID4gKwlp cnFfZG9tYWluX3JlbW92ZShwb3J0LT5tc2lfZG9tYWluKTsNCj4gPiArZXJyX21zaV9kb21haW46 DQo+ID4gKwlpcnFfZG9tYWluX3JlbW92ZShwb3J0LT5pbnR4X2RvbWFpbik7DQo+ID4gKw0KPiA+ ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgbXRrX3BjaWVf aXJxX3RlYXJkb3duKHN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0KQ0KPiA+ICt7DQo+ID4gKwlz dHJ1Y3QgbXRrX3BjaWVfbXNpICptc2lfaW5mbzsNCj4gPiArCWludCBpOw0KPiA+ICsNCj4gPiAr CWlycV9zZXRfY2hhaW5lZF9oYW5kbGVyX2FuZF9kYXRhKHBvcnQtPmlycSwgTlVMTCwgTlVMTCk7 DQo+ID4gKw0KPiA+ICsJaWYgKHBvcnQtPmludHhfZG9tYWluKQ0KPiA+ICsJCWlycV9kb21haW5f cmVtb3ZlKHBvcnQtPmludHhfZG9tYWluKTsNCj4gPiArDQo+ID4gKwlpZiAocG9ydC0+bXNpX2Rv bWFpbikNCj4gPiArCQlpcnFfZG9tYWluX3JlbW92ZShwb3J0LT5tc2lfZG9tYWluKTsNCj4gPiAr DQo+ID4gKwlpZiAocG9ydC0+bXNpX3RvcF9kb21haW4pIHsNCj4gPiArCQlmb3IgKGkgPSAwOyBp IDwgUENJRV9NU0lfU0VUX05VTTsgaSsrKSB7DQo+ID4gKwkJCW1zaV9pbmZvID0gcG9ydC0+bXNp X2luZm9baV07DQo+ID4gKwkJCWlycV9kaXNwb3NlX21hcHBpbmcobXNpX2luZm8tPmlycSk7DQo+ ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQlpcnFfZG9tYWluX3JlbW92ZShwb3J0LT5tc2lfdG9wX2Rv bWFpbik7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaXJxX2Rpc3Bvc2VfbWFwcGluZyhwb3J0LT5p cnEpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBtdGtfcGNpZV9pcnFfaGFuZGxl cihzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBtdGtfcGNpZV9w b3J0ICpwb3J0ID0gaXJxX2Rlc2NfZ2V0X2hhbmRsZXJfZGF0YShkZXNjKTsNCj4gPiArCXN0cnVj dCBpcnFfY2hpcCAqaXJxY2hpcCA9IGlycV9kZXNjX2dldF9jaGlwKGRlc2MpOw0KPiA+ICsJdW5z aWduZWQgbG9uZyBzdGF0dXM7DQo+ID4gKwl1bnNpZ25lZCBpbnQgdmlycTsNCj4gPiArCWlycV9o d19udW1iZXJfdCBpcnFfYml0ID0gUENJRV9JTlRYX1NISUZUOw0KPiA+ICsNCj4gPiArCWNoYWlu ZWRfaXJxX2VudGVyKGlycWNoaXAsIGRlc2MpOw0KPiA+ICsNCj4gPiArCXN0YXR1cyA9IHJlYWRs KHBvcnQtPmJhc2UgKyBQQ0lFX0lOVF9TVEFUVVNfUkVHKTsNCj4gPiArCWlmIChzdGF0dXMgJiBQ Q0lFX0lOVFhfTUFTSykgew0KPiA+ICsJCWZvcl9lYWNoX3NldF9iaXRfZnJvbShpcnFfYml0LCAm c3RhdHVzLCBQQ0lfTlVNX0lOVFggKw0KPiA+ICsJCQkJICAgICAgUENJRV9JTlRYX1NISUZUKSB7 DQo+ID4gKwkJCXZpcnEgPSBpcnFfZmluZF9tYXBwaW5nKHBvcnQtPmludHhfZG9tYWluLA0KPiA+ ICsJCQkJCQlpcnFfYml0IC0gUENJRV9JTlRYX1NISUZUKTsNCj4gPiArCQkJZ2VuZXJpY19oYW5k bGVfaXJxKHZpcnEpOw0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAoc3RhdHVz ICYgUENJRV9NU0lfTUFTSykgew0KPiA+ICsJCWlycV9iaXQgPSBQQ0lFX01TSV9TSElGVDsNCj4g PiArCQlmb3JfZWFjaF9zZXRfYml0X2Zyb20oaXJxX2JpdCwgJnN0YXR1cywgUENJRV9NU0lfU0VU X05VTSArDQo+ID4gKwkJCQkgICAgICBQQ0lFX01TSV9TSElGVCkgew0KPiA+ICsJCQl2aXJxID0g aXJxX2ZpbmRfbWFwcGluZyhwb3J0LT5tc2lfdG9wX2RvbWFpbiwNCj4gPiArCQkJCQkJaXJxX2Jp dCAtIFBDSUVfTVNJX1NISUZUKTsNCj4gPiArCQkJZ2VuZXJpY19oYW5kbGVfaXJxKHZpcnEpOw0K PiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwljaGFpbmVkX2lycV9leGl0KGlycWNoaXAs IGRlc2MpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG10a19wY2llX3NldHVwX2ly cShzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCwNCj4gPiArCQkJICAgICAgc3RydWN0IGRldmlj ZV9ub2RlICpub2RlKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwb3J0LT5k ZXY7DQo+ID4gKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2 aWNlKGRldik7DQo+ID4gKwlpbnQgZXJyOw0KPiA+ICsNCj4gPiArCWVyciA9IG10a19wY2llX2lu aXRfaXJxX2RvbWFpbnMocG9ydCwgbm9kZSk7DQo+ID4gKwlpZiAoZXJyKSB7DQo+ID4gKwkJZGV2 X25vdGljZShkZXYsICJmYWlsZWQgdG8gaW5pdCBQQ0llIElSUSBkb21haW5cbiIpOw0KPiA+ICsJ CXJldHVybiBlcnI7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcG9ydC0+aXJxID0gcGxhdGZvcm1f Z2V0X2lycShwZGV2LCAwKTsNCj4gPiArCWlmIChwb3J0LT5pcnEgPCAwKQ0KPiA+ICsJCXJldHVy biBwb3J0LT5pcnE7DQo+ID4gKw0KPiA+ICsJaXJxX3NldF9jaGFpbmVkX2hhbmRsZXJfYW5kX2Rh dGEocG9ydC0+aXJxLCBtdGtfcGNpZV9pcnFfaGFuZGxlciwgcG9ydCk7DQo+ID4gKw0KPiA+ICsJ cmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbXRrX3BjaWVfY2xrX2lu aXQoc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQpDQo+ID4gK3sNCj4gPiArCWludCByZXQ7DQo+ ID4gKw0KPiA+ICsJcG9ydC0+bnVtX2Nsa3MgPSBkZXZtX2Nsa19idWxrX2dldF9hbGwocG9ydC0+ ZGV2LCAmcG9ydC0+Y2xrcyk7DQo+ID4gKwlpZiAocG9ydC0+bnVtX2Nsa3MgPCAwKSB7DQo+ID4g KwkJZGV2X25vdGljZShwb3J0LT5kZXYsICJmYWlsZWQgdG8gZ2V0IHBjaWUgY2xvY2tcbiIpOw0K PiA+ICsJCXJldHVybiBwb3J0LT5udW1fY2xrczsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXQg PSBjbGtfYnVsa19wcmVwYXJlX2VuYWJsZShwb3J0LT5udW1fY2xrcywgcG9ydC0+Y2xrcyk7DQo+ ID4gKwlpZiAocmV0KSB7DQo+ID4gKwkJZGV2X25vdGljZShwb3J0LT5kZXYsICJmYWlsZWQgdG8g ZW5hYmxlIHBjaWUgY2xvY2tzXG4iKTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG10a19w Y2llX3Bvd2VyX3VwKHN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0KQ0KPiA+ICt7DQo+ID4gKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSBwb3J0LT5kZXY7DQo+ID4gKwlpbnQgZXJyOw0KPiA+ICsNCj4g PiArCXBvcnQtPnBoeV9yZXNldCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXRfb3B0aW9uYWxfZXhj bHVzaXZlKGRldiwgInBoeSIpOw0KPiA+ICsJaWYgKElTX0VSUihwb3J0LT5waHlfcmVzZXQpKQ0K PiA+ICsJCXJldHVybiBQVFJfRVJSKHBvcnQtPnBoeV9yZXNldCk7DQo+ID4gKw0KPiA+ICsJLyog UEhZIHBvd2VyIG9uIGFuZCBlbmFibGUgcGlwZSBjbG9jayAqLw0KPiA+ICsJcG9ydC0+cGh5ID0g ZGV2bV9waHlfb3B0aW9uYWxfZ2V0KGRldiwgInBjaWUtcGh5Iik7DQo+ID4gKwlpZiAoSVNfRVJS KHBvcnQtPnBoeSkpDQo+ID4gKwkJcmV0dXJuIFBUUl9FUlIocG9ydC0+cGh5KTsNCj4gPiArDQo+ ID4gKwlyZXNldF9jb250cm9sX2RlYXNzZXJ0KHBvcnQtPnBoeV9yZXNldCk7DQo+ID4gKw0KPiA+ ICsJZXJyID0gcGh5X3Bvd2VyX29uKHBvcnQtPnBoeSk7DQo+ID4gKwlpZiAoZXJyKSB7DQo+ID4g KwkJZGV2X25vdGljZShkZXYsICJmYWlsZWQgdG8gcG93ZXIgb24gcGNpZSBwaHlcbiIpOw0KPiA+ ICsJCWdvdG8gZXJyX3BoeV9vbjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwllcnIgPSBwaHlfaW5p dChwb3J0LT5waHkpOw0KPiA+ICsJaWYgKGVycikgew0KPiA+ICsJCWRldl9ub3RpY2UoZGV2LCAi ZmFpbGVkIHRvIGluaXRpYWxpemUgcGNpZSBwaHlcbiIpOw0KPiA+ICsJCWdvdG8gZXJyX3BoeV9p bml0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXBvcnQtPm1hY19yZXNldCA9IGRldm1fcmVzZXRf Y29udHJvbF9nZXRfb3B0aW9uYWxfZXhjbHVzaXZlKGRldiwgIm1hYyIpOw0KPiA+ICsJaWYgKElT X0VSUihwb3J0LT5tYWNfcmVzZXQpKSB7DQo+ID4gKwkJZXJyID0gUFRSX0VSUihwb3J0LT5tYWNf cmVzZXQpOw0KPiA+ICsJCWdvdG8gZXJyX21hY19yc3Q7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJ cmVzZXRfY29udHJvbF9kZWFzc2VydChwb3J0LT5tYWNfcmVzZXQpOw0KPiA+ICsNCj4gPiArCS8q IE1BQyBwb3dlciBvbiBhbmQgZW5hYmxlIHRyYW5zYWN0aW9uIGxheWVyIGNsb2NrcyAqLw0KPiA+ ICsJcG1fcnVudGltZV9lbmFibGUoZGV2KTsNCj4gPiArCXBtX3J1bnRpbWVfZ2V0X3N5bmMoZGV2 KTsNCj4gPiArDQo+ID4gKwllcnIgPSBtdGtfcGNpZV9jbGtfaW5pdChwb3J0KTsNCj4gPiArCWlm IChlcnIpIHsNCj4gPiArCQlkZXZfbm90aWNlKGRldiwgImNsb2NrIGluaXQgZmFpbGVkXG4iKTsN Cj4gPiArCQlnb3RvIGVycl9jbGtfaW5pdDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4g MDsNCj4gPiArDQo+ID4gK2Vycl9jbGtfaW5pdDoNCj4gPiArCXBtX3J1bnRpbWVfcHV0X3N5bmMo ZGV2KTsNCj4gPiArCXBtX3J1bnRpbWVfZGlzYWJsZShkZXYpOw0KPiA+ICsJcmVzZXRfY29udHJv bF9hc3NlcnQocG9ydC0+bWFjX3Jlc2V0KTsNCj4gPiArZXJyX21hY19yc3Q6DQo+ID4gKwlwaHlf ZXhpdChwb3J0LT5waHkpOw0KPiA+ICtlcnJfcGh5X2luaXQ6DQo+ID4gKwlwaHlfcG93ZXJfb2Zm KHBvcnQtPnBoeSk7DQo+ID4gK2Vycl9waHlfb246DQo+ID4gKwlyZXNldF9jb250cm9sX2Fzc2Vy dChwb3J0LT5waHlfcmVzZXQpOw0KPiA+ICsNCj4gPiArCXJldHVybiBlcnI7DQo+ID4gK30NCj4g PiArDQo+ID4gK3N0YXRpYyB2b2lkIG10a19wY2llX3Bvd2VyX2Rvd24oc3RydWN0IG10a19wY2ll X3BvcnQgKnBvcnQpDQo+ID4gK3sNCj4gPiArCWNsa19idWxrX2Rpc2FibGVfdW5wcmVwYXJlKHBv cnQtPm51bV9jbGtzLCBwb3J0LT5jbGtzKTsNCj4gPiArDQo+ID4gKwlwbV9ydW50aW1lX3B1dF9z eW5jKHBvcnQtPmRldik7DQo+ID4gKwlwbV9ydW50aW1lX2Rpc2FibGUocG9ydC0+ZGV2KTsNCj4g PiArCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KHBvcnQtPm1hY19yZXNldCk7DQo+ID4gKw0KPiA+ICsJ cGh5X3Bvd2VyX29mZihwb3J0LT5waHkpOw0KPiA+ICsJcGh5X2V4aXQocG9ydC0+cGh5KTsNCj4g PiArCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KHBvcnQtPnBoeV9yZXNldCk7DQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyBpbnQgbXRrX3BjaWVfc2V0dXAoc3RydWN0IG10a19wY2llX3BvcnQgKnBv cnQpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBvcnQtPmRldjsNCj4gPiAr CXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsN Cj4gPiArCXN0cnVjdCByZXNvdXJjZSAqcmVnczsNCj4gPiArCWludCBlcnI7DQo+ID4gKw0KPiA+ ICsJcmVncyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9N RU0sICJwY2llLW1hYyIpOw0KPiA+ICsJcG9ydC0+YmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJj ZShkZXYsIHJlZ3MpOw0KPiA+ICsJaWYgKElTX0VSUihwb3J0LT5iYXNlKSkgew0KPiA+ICsJCWRl dl9ub3RpY2UoZGV2LCAiZmFpbGVkIHRvIG1hcCByZWdpc3RlciBiYXNlXG4iKTsNCj4gPiArCQly ZXR1cm4gUFRSX0VSUihwb3J0LT5iYXNlKTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlwb3J0LT5y ZWdfYmFzZSA9IHJlZ3MtPnN0YXJ0Ow0KPiA+ICsNCj4gPiArCS8qIERvbid0IHRvdWNoIHRoZSBo YXJkd2FyZSByZWdpc3RlcnMgYmVmb3JlIHBvd2VyIHVwICovDQo+ID4gKwllcnIgPSBtdGtfcGNp ZV9wb3dlcl91cChwb3J0KTsNCj4gPiArCWlmIChlcnIpDQo+ID4gKwkJcmV0dXJuIGVycjsNCj4g PiArDQo+ID4gKwkvKiBUcnkgbGluayB1cCAqLw0KPiA+ICsJZXJyID0gbXRrX3BjaWVfc3RhcnR1 cF9wb3J0KHBvcnQpOw0KPiA+ICsJaWYgKGVycikgew0KPiA+ICsJCWRldl9ub3RpY2UoZGV2LCAi UENJZSBsaW5rIGRvd25cbiIpOw0KPiA+ICsJCWdvdG8gZXJyX3NldHVwOw0KPiA+ICsJfQ0KPiA+ ICsNCj4gPiArCWVyciA9IG10a19wY2llX3NldHVwX2lycShwb3J0LCBkZXYtPm9mX25vZGUpOw0K PiA+ICsJaWYgKGVycikNCj4gPiArCQlnb3RvIGVycl9zZXR1cDsNCj4gPiArDQo+ID4gKwlkZXZf aW5mbyhkZXYsICJQQ0llIGxpbmsgdXAgc3VjY2VzcyFcbiIpOw0KPiA+ICsNCj4gPiArCXJldHVy biAwOw0KPiA+ICsNCj4gPiArZXJyX3NldHVwOg0KPiA+ICsJbXRrX3BjaWVfcG93ZXJfZG93bihw b3J0KTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gZXJyOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0 aWMgaW50IG10a19wY2llX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ID4g K3sNCj4gPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7DQo+ID4gKwlzdHJ1Y3Qg bXRrX3BjaWVfcG9ydCAqcG9ydDsNCj4gPiArCXN0cnVjdCBwY2lfaG9zdF9icmlkZ2UgKmhvc3Q7 DQo+ID4gKwlpbnQgZXJyOw0KPiA+ICsNCj4gPiArCWhvc3QgPSBkZXZtX3BjaV9hbGxvY19ob3N0 X2JyaWRnZShkZXYsIHNpemVvZigqcG9ydCkpOw0KPiA+ICsJaWYgKCFob3N0KQ0KPiA+ICsJCXJl dHVybiAtRU5PTUVNOw0KPiA+ICsNCj4gPiArCXBvcnQgPSBwY2lfaG9zdF9icmlkZ2VfcHJpdiho b3N0KTsNCj4gPiArDQo+ID4gKwlwb3J0LT5kZXYgPSBkZXY7DQo+ID4gKwlwbGF0Zm9ybV9zZXRf ZHJ2ZGF0YShwZGV2LCBwb3J0KTsNCj4gPiArDQo+ID4gKwllcnIgPSBtdGtfcGNpZV9zZXR1cChw b3J0KTsNCj4gPiArCWlmIChlcnIpDQo+ID4gKwkJcmV0dXJuIGVycjsNCj4gPiArDQo+ID4gKwlo b3N0LT5vcHMgPSAmbXRrX3BjaWVfb3BzOw0KPiA+ICsJaG9zdC0+c3lzZGF0YSA9IHBvcnQ7DQo+ ID4gKw0KPiA+ICsJZXJyID0gcGNpX2hvc3RfcHJvYmUoaG9zdCk7DQo+ID4gKwlpZiAoZXJyKSB7 DQo+ID4gKwkJbXRrX3BjaWVfcG93ZXJfZG93bihwb3J0KTsNCj4gDQo+IG10a19wY2llX2lycV90 ZWFyZG93biBuZWVkZWQgaGVyZT8NCg0KWWVzLCBJIHdpbGwgYWRkIHRoaXMgZnVuY3Rpb24gaW4g dGhlIG5leHQgdmVyc2lvbi4NCj4gDQo+ID4gKwkJcmV0dXJuIGVycjsNCj4gPiArCX0NCj4gPiAr DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBtdGtfcGNp ZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gPiArew0KPiA+ICsJc3Ry dWN0IG10a19wY2llX3BvcnQgKnBvcnQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsNCj4g PiArCXN0cnVjdCBwY2lfaG9zdF9icmlkZ2UgKmhvc3QgPSBwY2lfaG9zdF9icmlkZ2VfZnJvbV9w cml2KHBvcnQpOw0KPiA+ICsNCj4gPiArCXBjaV9sb2NrX3Jlc2Nhbl9yZW1vdmUoKTsNCj4gPiAr CXBjaV9zdG9wX3Jvb3RfYnVzKGhvc3QtPmJ1cyk7DQo+ID4gKwlwY2lfcmVtb3ZlX3Jvb3RfYnVz KGhvc3QtPmJ1cyk7DQo+ID4gKwlwY2lfdW5sb2NrX3Jlc2Nhbl9yZW1vdmUoKTsNCj4gPiArDQo+ ID4gKwltdGtfcGNpZV9pcnFfdGVhcmRvd24ocG9ydCk7DQo+ID4gKwltdGtfcGNpZV9wb3dlcl9k b3duKHBvcnQpOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz dGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIG10a19wY2llX3R1cm5fb2ZmX2xpbmsoc3RydWN0IG10 a19wY2llX3BvcnQgKnBvcnQpDQo+ID4gK3sNCj4gPiArCXUzMiB2YWw7DQo+ID4gKw0KPiA+ICsJ dmFsID0gcmVhZGwocG9ydC0+YmFzZSArIFBDSUVfSUNNRF9QTV9SRUcpOw0KPiA+ICsJdmFsIHw9 IFBDSUVfVFVSTl9PRkZfTElOSzsNCj4gPiArCXdyaXRlbCh2YWwsIHBvcnQtPmJhc2UgKyBQQ0lF X0lDTURfUE1fUkVHKTsNCj4gPiArDQo+ID4gKwkvKiBDaGVjayB0aGUgbGluayBpcyBMMiAqLw0K PiA+ICsJcmV0dXJuIHJlYWRsX3BvbGxfdGltZW91dChwb3J0LT5iYXNlICsgUENJRV9MVFNTTV9T VEFUVVNfUkVHLCB2YWwsDQo+ID4gKwkJCQkgIChQQ0lFX0xUU1NNX1NUQVRFKHZhbCkgPT0NCj4g PiArCQkJCSAgIFBDSUVfTFRTU01fU1RBVEVfTDJfSURMRSksIDIwLA0KPiA+ICsJCQkJICAgNTAg KiBVU0VDX1BFUl9NU0VDKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBfX21heWJl X3VudXNlZCBtdGtfcGNpZV9zdXNwZW5kX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikNCj4gPiAr ew0KPiA+ICsJc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2 KTsNCj4gPiArCWludCBlcnI7DQo+ID4gKwl1MzIgdmFsOw0KPiA+ICsNCj4gPiArCWlmIChwb3J0 LT5pc19zdXNwZW5kZWQpDQo+ID4gKwkJcmV0dXJuIDA7DQo+IA0KPiBJIGRvbid0IHRoaW5rIHRo aXMgdmFyaWFibGUgaXMgbmVlZGVkLiBUaGUgY29yZSBzaG91bGQgdHJhY2sgY2FsbGluZyANCj4g c3VzcGVuZC9yZXN1bWUuDQoNCk9LLCBJIHdpbGwgcmVtb3ZlIGl0IGluIHRoZSBuZXh0IHZlcnNp b24uDQo+IA0KPiA+ICsNCj4gPiArCS8qIFRyaWdnZXIgbGluayB0byBMMiBzdGF0ZSAqLw0KPiA+ ICsJZXJyID0gbXRrX3BjaWVfdHVybl9vZmZfbGluayhwb3J0KTsNCj4gPiArCWlmIChlcnIpIHsN Cj4gPiArCQlkZXZfbm90aWNlKHBvcnQtPmRldiwgImNhbiBub3QgZW50ZXIgTDIgc3RhdGVcbiIp Ow0KPiANCj4gU2VlbXMgbW9yZSBsaWtlIGFuIGVycm9yLg0KPiANCj4gPiArCQlnb3RvIHBvd2Vy X29mZjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBQdWxsIGRvd24gdGhlIFBFUlNUIyBwaW4g Ki8NCj4gPiArCXZhbCA9IHJlYWRsKHBvcnQtPmJhc2UgKyBQQ0lFX1JTVF9DVFJMX1JFRyk7DQo+ ID4gKwl2YWwgfD0gUENJRV9QRV9SU1RCOw0KPiA+ICsJd3JpdGVsKHZhbCwgcG9ydC0+YmFzZSAr IFBDSUVfUlNUX0NUUkxfUkVHKTsNCj4gPiArDQo+ID4gKwlkZXZfaW5mbyhwb3J0LT5kZXYsICJl bnRlciBMMiBzdGF0ZSBzdWNjZXNzIik7DQo+IA0KPiBTZWVtcyBsaWtlIGRlYnVnLg0KPiANCj4g PiArDQo+ID4gK3Bvd2VyX29mZjoNCj4gPiArCWNsa19idWxrX2Rpc2FibGVfdW5wcmVwYXJlKHBv cnQtPm51bV9jbGtzLCBwb3J0LT5jbGtzKTsNCj4gPiArDQo+ID4gKwlwaHlfcG93ZXJfb2ZmKHBv cnQtPnBoeSk7DQo+ID4gKw0KPiA+ICsJcG9ydC0+aXNfc3VzcGVuZGVkID0gdHJ1ZTsNCj4gPiAr DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBfX21heWJl X3VudXNlZCBtdGtfcGNpZV9yZXN1bWVfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQ0KPiA+ICt7 DQo+ID4gKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYp Ow0KPiA+ICsJaW50IGVycjsNCj4gPiArDQo+ID4gKwlpZiAoIXBvcnQtPmlzX3N1c3BlbmRlZCkN Cj4gPiArCQlyZXR1cm4gMDsNCj4gPiArDQo+ID4gKwlwaHlfcG93ZXJfb24ocG9ydC0+cGh5KTsN Cj4gPiArDQo+ID4gKwllcnIgPSBjbGtfYnVsa19wcmVwYXJlX2VuYWJsZShwb3J0LT5udW1fY2xr cywgcG9ydC0+Y2xrcyk7DQo+ID4gKwlpZiAoZXJyKSB7DQo+ID4gKwkJZGV2X2RiZyhkZXYsICJm YWlsZWQgdG8gZW5hYmxlIHBjaWUgY2xvY2tzXG4iKTsNCj4gPiArCQlyZXR1cm4gZXJyOw0KPiA+ ICsJfQ0KPiA+ICsNCj4gPiArCWVyciA9IG10a19wY2llX3N0YXJ0dXBfcG9ydChwb3J0KTsNCj4g PiArCWlmIChlcnIpIHsNCj4gPiArCQlkZXZfbm90aWNlKHBvcnQtPmRldiwgInJlc3VtZSBmYWls ZWRcbiIpOw0KPiA+ICsJCXJldHVybiBlcnI7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcG9ydC0+ aXNfc3VzcGVuZGVkID0gZmFsc2U7DQo+ID4gKw0KPiA+ICsJZGV2X2luZm8ocG9ydC0+ZGV2LCAi cmVzdW1lIGRvbmVcbiIpOw0KPiANCj4gRGVidWcuLi4NCj4gDQo+ID4gKw0KPiA+ICsJcmV0dXJu IDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBt dGtfcGNpZV9wbV9vcHMgPSB7DQo+ID4gKwlTRVRfTk9JUlFfU1lTVEVNX1NMRUVQX1BNX09QUyht dGtfcGNpZV9zdXNwZW5kX25vaXJxLA0KPiA+ICsJCQkJICAgICAgbXRrX3BjaWVfcmVzdW1lX25v aXJxKQ0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2Vf aWQgbXRrX3BjaWVfb2ZfbWF0Y2hbXSA9IHsNCj4gPiArCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0 ZWssbXQ4MTkyLXBjaWUiIH0sDQo+ID4gKwl7fSwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRp YyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19wY2llX2RyaXZlciA9IHsNCj4gPiArCS5wcm9i ZSA9IG10a19wY2llX3Byb2JlLA0KPiA+ICsJLnJlbW92ZSA9IG10a19wY2llX3JlbW92ZSwNCj4g PiArCS5kcml2ZXIgPSB7DQo+ID4gKwkJLm5hbWUgPSAibXRrLXBjaWUiLA0KPiA+ICsJCS5vZl9t YXRjaF90YWJsZSA9IG10a19wY2llX29mX21hdGNoLA0KPiA+ICsJCS5wbSA9ICZtdGtfcGNpZV9w bV9vcHMsDQo+ID4gKwl9LA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArbW9kdWxlX3BsYXRmb3JtX2Ry aXZlcihtdGtfcGNpZV9kcml2ZXIpOw0KPiA+ICtNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7DQo+ ID4gLS0gDQo+ID4gMi4yNS4xDQo+ID4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18NCj4gPiBsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdA0KPiA+IGxp bnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZw0KPiA+IGh0dHA6Ly9saXN0cy5pbmZy YWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbA0KDQo=