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=-17.2 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY, USER_AGENT_SANE_2 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8EE1AC433E0 for ; Mon, 28 Dec 2020 12:03:13 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 45DA6207D1 for ; Mon, 28 Dec 2020 12:03:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727730AbgL1MDM (ORCPT ); Mon, 28 Dec 2020 07:03:12 -0500 Received: from Mailgw01.mediatek.com ([1.203.163.78]:40063 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1727234AbgL1MDL (ORCPT ); Mon, 28 Dec 2020 07:03:11 -0500 X-UUID: 88e3181f49c047ba9cb6b3ffa10eb37a-20201228 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=TfST3R27FJlb9Hz+DQmqZ6QIGbdZweQBWleGs81uymM=; b=BQApaFF8PyQ6amm7Ec9vxdJc4G0drVv2zAbZhsWD+IS10/Xg3nwh8lQKFe9C2Agc++gE95t6tmDtDFAYQpqJe2XIH51QwZetRFwZobNkDUoSbMGrTyxB7nuQsr/ssSHa8ma37U2B7Sa56Ld03gtZklkrE99tW0xiS71kx9QvlK4=; X-UUID: 88e3181f49c047ba9cb6b3ffa10eb37a-20201228 Received: from mtkcas36.mediatek.inc [(172.27.4.253)] by mailgw01.mediatek.com (envelope-from ) (mailgw01.mediatek.com ESMTP with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256) with ESMTP id 841941386; Mon, 28 Dec 2020 20:03:10 +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, 28 Dec 2020 20:03:06 +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, 28 Dec 2020 20:03:05 +0800 Message-ID: <1609156917.14736.171.camel@mhfsdcap03> Subject: Re: [v6,3/4] PCI: mediatek-gen3: Add MediaTek Gen3 driver for MT8192 From: Jianjun Wang To: Marc Zyngier CC: , , Lorenzo Pieralisi , , , , , Ryder Lee , , , , Sj Huang , Rob Herring , , Philipp Zabel , Bjorn Helgaas , , Matthias Brugger Date: Mon, 28 Dec 2020 20:01:57 +0800 In-Reply-To: <87ft3tpu67.wl-maz@kernel.org> References: <20201225100308.27052-1-jianjun.wang@mediatek.com> <20201225100308.27052-4-jianjun.wang@mediatek.com> <87ft3tpu67.wl-maz@kernel.org> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.10.4-0ubuntu2 MIME-Version: 1.0 X-TM-SNTS-SMTP: B47E9DBE2CC96E2B73D24D5E63C2E3FFC97B81AE5F5B3DC724F34721FFC29D142000:8 X-MTK: N Content-Transfer-Encoding: base64 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org T24gRnJpLCAyMDIwLTEyLTI1IGF0IDE5OjIyICswMDAwLCBNYXJjIFp5bmdpZXIgd3JvdGU6DQo+ IEhpIEppYW5qdW4sDQo+IA0KPiBPbiBGcmksIDI1IERlYyAyMDIwIDEwOjAzOjA3ICswMDAwLA0K PiBKaWFuanVuIFdhbmcgPGppYW5qdW4ud2FuZ0BtZWRpYXRlay5jb20+IHdyb3RlOg0KPiA+IA0K PiA+IE1lZGlhVGVrJ3MgUENJZSBob3N0IGNvbnRyb2xsZXIgaGFzIHRocmVlIGdlbmVyYXRpb24g SFdzLCB0aGUgbmV3DQo+ID4gZ2VuZXJhdGlvbiBIVyBpcyBhbiBpbmRpdmlkdWFsIGJyaWRnZSwg aXQgc3VwcG9ydHMgR2VuMyBzcGVlZCBhbmQNCj4gPiB1cCB0byAyNTYgTVNJIGludGVycnVwdCBu dW1iZXJzIGZvciBtdWx0aS1mdW5jdGlvbiBkZXZpY2VzLg0KPiA+IA0KPiA+IEFkZCBzdXBwb3J0 IGZvciBuZXcgR2VuMyBjb250cm9sbGVyIHdoaWNoIGNhbiBiZSBmb3VuZCBvbiBNVDgxOTIuDQo+ ID4gDQo+ID4gU2lnbmVkLW9mZi1ieTogSmlhbmp1biBXYW5nIDxqaWFuanVuLndhbmdAbWVkaWF0 ZWsuY29tPg0KPiA+IEFja2VkLWJ5OiBSeWRlciBMZWUgPHJ5ZGVyLmxlZUBtZWRpYXRlay5jb20+ DQo+ID4gLS0tDQo+ID4gIGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvS2NvbmZpZyAgICAgICAgICAg ICAgfCAgIDEzICsNCj4gPiAgZHJpdmVycy9wY2kvY29udHJvbGxlci9NYWtlZmlsZSAgICAgICAg ICAgICB8ICAgIDEgKw0KPiA+ICBkcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtbWVkaWF0ZWst Z2VuMy5jIHwgMTA4NCArKysrKysrKysrKysrKysrKysrDQo+ID4gIDMgZmlsZXMgY2hhbmdlZCwg MTA5OCBpbnNlcnRpb25zKCspDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3BjaS9j b250cm9sbGVyL3BjaWUtbWVkaWF0ZWstZ2VuMy5jDQo+IA0KPiBUaGlzIGlzIGEgcHJldHR5IGxh cmdlIHBhdGNoLCBhbmQgaXQnZCBiZSBncmVhdCBpZiB5b3Ugd291bGQgc3BsaXQgaXQNCj4gaW50 byBhdCBsZWFzdCA0IHBhcnRzIChjb3JlIFBDSWUsIFBNLCBNU0ksIElOVHgpLg0KDQpIaSBNYXJj LA0KDQpUaGFua3MgZm9yIHlvdXIgcmV2aWV3LCBJIHdpbGwgdHJ5IHRvIHNwbGl0IGl0IHRvIHRo b3NlIHBhcnRzIGluIHRoZQ0KbmV4dCB2ZXJzaW9uLg0KPiANCj4gPiANCj4gPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9LY29uZmlnIGIvZHJpdmVycy9wY2kvY29udHJvbGxl ci9LY29uZmlnDQo+ID4gaW5kZXggNjRlMmY1ZTM3OWFhLi5iMjQyYjE3MDI1YjMgMTAwNjQ0DQo+ ID4gLS0tIGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9LY29uZmlnDQo+ID4gKysrIGIvZHJpdmVy cy9wY2kvY29udHJvbGxlci9LY29uZmlnDQo+ID4gQEAgLTI0Miw2ICsyNDIsMTkgQEAgY29uZmln IFBDSUVfTUVESUFURUsNCj4gPiAgCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUg UENJZSBjb250cm9sbGVyIHN1cHBvcnQgb24NCj4gPiAgCSAgTWVkaWFUZWsgU29Dcy4NCj4gPiAg DQo+ID4gK2NvbmZpZyBQQ0lFX01FRElBVEVLX0dFTjMNCj4gPiArCXRyaXN0YXRlICJNZWRpYVRl ayBHZW4zIFBDSWUgY29udHJvbGxlciINCj4gPiArCWRlcGVuZHMgb24gQVJDSF9NRURJQVRFSyB8 fCBDT01QSUxFX1RFU1QNCj4gPiArCWRlcGVuZHMgb24gUENJX01TSV9JUlFfRE9NQUlODQo+ID4g KwloZWxwDQo+ID4gKwkgIEFkZHMgc3VwcG9ydCBmb3IgUENJZSBHZW4zIE1BQyBjb250cm9sbGVy IGZvciBNZWRpYVRlayBTb0NzLg0KPiA+ICsJICBUaGlzIFBDSWUgY29udHJvbGxlciBpcyBjb21w YXRpYmxlIHdpdGggR2VuMywgR2VuMiBhbmQgR2VuMSBzcGVlZCwNCj4gPiArCSAgYW5kIHN1cHBv cnQgdXAgdG8gMjU2IE1TSSBpbnRlcnJ1cHQgbnVtYmVycyBmb3INCj4gPiArCSAgbXVsdGktZnVu Y3Rpb24gZGV2aWNlcy4NCj4gPiArDQo+ID4gKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8g ZW5hYmxlIEdlbjMgUENJZSBjb250cm9sbGVyIHN1cHBvcnQgb24NCj4gPiArCSAgTWVkaWFUZWsg U29Dcy4NCj4gPiArDQo+ID4gIGNvbmZpZyBQQ0lFX1RBTkdPX1NNUDg3NTkNCj4gPiAgCWJvb2wg IlRhbmdvIFNNUDg3NTkgUENJZSBjb250cm9sbGVyIChEQU5HRVJPVVMpIg0KPiA+ICAJZGVwZW5k cyBvbiBBUkNIX1RBTkdPICYmIFBDSV9NU0kgJiYgT0YNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9wY2kvY29udHJvbGxlci9NYWtlZmlsZSBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvTWFrZWZp bGUNCj4gPiBpbmRleCAwNGM2ZWRjMjg1YzUuLmRmNWQ3N2Q3MmE5ZCAxMDA2NDQNCj4gPiAtLS0g YS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL01ha2VmaWxlDQo+ID4gKysrIGIvZHJpdmVycy9wY2kv Y29udHJvbGxlci9NYWtlZmlsZQ0KPiA+IEBAIC0yNyw2ICsyNyw3IEBAIG9iai0kKENPTkZJR19Q Q0lFX1JPQ0tDSElQKSArPSBwY2llLXJvY2tjaGlwLm8NCj4gPiAgb2JqLSQoQ09ORklHX1BDSUVf Uk9DS0NISVBfRVApICs9IHBjaWUtcm9ja2NoaXAtZXAubw0KPiA+ICBvYmotJChDT05GSUdfUENJ RV9ST0NLQ0hJUF9IT1NUKSArPSBwY2llLXJvY2tjaGlwLWhvc3Qubw0KPiA+ICBvYmotJChDT05G SUdfUENJRV9NRURJQVRFSykgKz0gcGNpZS1tZWRpYXRlay5vDQo+ID4gK29iai0kKENPTkZJR19Q Q0lFX01FRElBVEVLX0dFTjMpICs9IHBjaWUtbWVkaWF0ZWstZ2VuMy5vDQo+ID4gIG9iai0kKENP TkZJR19QQ0lFX1RBTkdPX1NNUDg3NTkpICs9IHBjaWUtdGFuZ28ubw0KPiA+ICBvYmotJChDT05G SUdfVk1EKSArPSB2bWQubw0KPiA+ICBvYmotJChDT05GSUdfUENJRV9CUkNNU1RCKSArPSBwY2ll LWJyY21zdGIubw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUt bWVkaWF0ZWstZ2VuMy5jIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLW1lZGlhdGVrLWdl bjMuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi4w MGNkYjU5OGE5ZjUNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9wY2kvY29u dHJvbGxlci9wY2llLW1lZGlhdGVrLWdlbjMuYw0KPiA+IEBAIC0wLDAgKzEsMTA4NCBAQA0KPiA+ ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KPiA+ICsvKg0KPiA+ICsgKiBN ZWRpYVRlayBQQ0llIGhvc3QgY29udHJvbGxlciBkcml2ZXIuDQo+ID4gKyAqDQo+ID4gKyAqIENv cHlyaWdodCAoYykgMjAyMCBNZWRpYVRlayBJbmMuDQo+ID4gKyAqIEF1dGhvcjogSmlhbmp1biBX YW5nIDxqaWFuanVuLndhbmdAbWVkaWF0ZWsuY29tPg0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNp bmNsdWRlIDxsaW51eC9jbGsuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQo+ID4g KyNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2lycS5oPg0K PiA+ICsjaW5jbHVkZSA8bGludXgvaXJxY2hpcC9jaGFpbmVkX2lycS5oPg0KPiA+ICsjaW5jbHVk ZSA8bGludXgvaXJxZG9tYWluLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCj4g PiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbXNpLmg+ DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51 eC9vZl9jbGsuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L29mX3BjaS5oPg0KPiA+ICsjaW5jbHVk ZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3BjaS5oPg0KPiA+ ICsjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZv cm1fZGV2aWNlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9wbV9kb21haW4uaD4NCj4gPiArI2lu Y2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3Jlc2V0Lmg+ DQo+ID4gKw0KPiA+ICsjaW5jbHVkZSAiLi4vcGNpLmgiDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFBD SUVfU0VUVElOR19SRUcJCTB4ODANCj4gPiArI2RlZmluZSBQQ0lFX1BDSV9JRFNfMQkJCTB4OWMN Cj4gPiArI2RlZmluZSBQQ0lfQ0xBU1MoY2xhc3MpCQkoY2xhc3MgPDwgOCkNCj4gPiArI2RlZmlu ZSBQQ0lFX1JDX01PREUJCQlCSVQoMCkNCj4gPiArDQo+ID4gKyNkZWZpbmUgUENJRV9DRkdOVU1f UkVHCQkJMHgxNDANCj4gPiArI2RlZmluZSBQQ0lFX0NGR19ERVZGTihkZXZmbikJCSgoZGV2Zm4p ICYgR0VOTUFTSyg3LCAwKSkNCj4gPiArI2RlZmluZSBQQ0lFX0NGR19CVVMoYnVzKQkJKCgoYnVz KSA8PCA4KSAmIEdFTk1BU0soMTUsIDgpKQ0KPiA+ICsjZGVmaW5lIFBDSUVfQ0ZHX0JZVEVfRU4o Ynl0ZXMpCQkoKChieXRlcykgPDwgMTYpICYgR0VOTUFTSygxOSwgMTYpKQ0KPiA+ICsjZGVmaW5l IFBDSUVfQ0ZHX0ZPUkNFX0JZVEVfRU4JCUJJVCgyMCkNCj4gPiArI2RlZmluZSBQQ0lFX0NGR19P RkZTRVRfQUREUgkJMHgxMDAwDQo+ID4gKyNkZWZpbmUgUENJRV9DRkdfSEVBREVSKGJ1cywgZGV2 Zm4pIFwNCj4gPiArCShQQ0lFX0NGR19CVVMoYnVzKSB8IFBDSUVfQ0ZHX0RFVkZOKGRldmZuKSkN Cj4gPiArDQo+ID4gKyNkZWZpbmUgUENJRV9SU1RfQ1RSTF9SRUcJCTB4MTQ4DQo+ID4gKyNkZWZp bmUgUENJRV9NQUNfUlNUQgkJCUJJVCgwKQ0KPiA+ICsjZGVmaW5lIFBDSUVfUEhZX1JTVEIJCQlC SVQoMSkNCj4gPiArI2RlZmluZSBQQ0lFX0JSR19SU1RCCQkJQklUKDIpDQo+ID4gKyNkZWZpbmUg UENJRV9QRV9SU1RCCQkJQklUKDMpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFBDSUVfTFRTU01fU1RB VFVTX1JFRwkJMHgxNTANCj4gPiArI2RlZmluZSBQQ0lFX0xUU1NNX1NUQVRFX01BU0sJCUdFTk1B U0soMjgsIDI0KQ0KPiA+ICsjZGVmaW5lIFBDSUVfTFRTU01fU1RBVEUodmFsKQkJKCh2YWwgJiBQ Q0lFX0xUU1NNX1NUQVRFX01BU0spID4+IDI0KQ0KPiA+ICsjZGVmaW5lIFBDSUVfTFRTU01fU1RB VEVfTDJfSURMRQkweDE0DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFBDSUVfTElOS19TVEFUVVNfUkVH CQkweDE1NA0KPiA+ICsjZGVmaW5lIFBDSUVfUE9SVF9MSU5LVVAJCUJJVCg4KQ0KPiA+ICsNCj4g PiArI2RlZmluZSBQQ0lFX01TSV9TRVRfTlVNCQk4DQo+ID4gKyNkZWZpbmUgUENJRV9NU0lfSVJR U19QRVJfU0VUCQkzMg0KPiA+ICsjZGVmaW5lIFBDSUVfTVNJX0lSUVNfTlVNIFwNCj4gPiArCShQ Q0lFX01TSV9JUlFTX1BFUl9TRVQgKiAoUENJRV9NU0lfU0VUX05VTSkpDQo+ID4gKw0KPiA+ICsj ZGVmaW5lIFBDSUVfSU5UX0VOQUJMRV9SRUcJCTB4MTgwDQo+ID4gKyNkZWZpbmUgUENJRV9NU0lf TUFTSwkJCUdFTk1BU0soUENJRV9NU0lfU0VUX05VTSArIDggLSAxLCA4KQ0KPiA+ICsjZGVmaW5l IFBDSUVfTVNJX1NISUZUCQkJOA0KPiA+ICsjZGVmaW5lIFBDSUVfSU5UWF9TSElGVAkJCTI0DQo+ ID4gKyNkZWZpbmUgUENJRV9JTlRYX01BU0sJCQlHRU5NQVNLKDI3LCAyNCkNCj4gPiArDQo+ID4g KyNkZWZpbmUgUENJRV9JTlRfU1RBVFVTX1JFRwkJMHgxODQNCj4gPiArI2RlZmluZSBQQ0lFX01T SV9TRVRfRU5BQkxFX1JFRwkJMHgxOTANCj4gPiArDQo+ID4gKyNkZWZpbmUgUENJRV9JQ01EX1BN X1JFRwkJMHgxOTgNCj4gPiArI2RlZmluZSBQQ0lFX1RVUk5fT0ZGX0xJTksJCUJJVCg0KQ0KPiA+ ICsNCj4gPiArI2RlZmluZSBQQ0lFX01TSV9BRERSX0JBU0VfUkVHCQkweGMwMA0KPiA+ICsjZGVm aW5lIFBDSUVfTVNJX1NFVF9PRkZTRVQJCTB4MTANCj4gPiArI2RlZmluZSBQQ0lFX01TSV9TVEFU VVNfT0ZGU0VUCQkweDA0DQo+ID4gKyNkZWZpbmUgUENJRV9NU0lfRU5BQkxFX09GRlNFVAkJMHgw OA0KPiA+ICsNCj4gPiArI2RlZmluZSBQQ0lFX1RSQU5TX1RBQkxFX0JBU0VfUkVHCTB4ODAwDQo+ ID4gKyNkZWZpbmUgUENJRV9BVFJfU1JDX0FERFJfTVNCX09GRlNFVAkweDQNCj4gPiArI2RlZmlu ZSBQQ0lFX0FUUl9UUlNMX0FERFJfTFNCX09GRlNFVAkweDgNCj4gPiArI2RlZmluZSBQQ0lFX0FU Ul9UUlNMX0FERFJfTVNCX09GRlNFVAkweGMNCj4gPiArI2RlZmluZSBQQ0lFX0FUUl9UUlNMX1BB UkFNX09GRlNFVAkweDEwDQo+ID4gKyNkZWZpbmUgUENJRV9BVFJfVExCX1NFVF9PRkZTRVQJCTB4 MjANCj4gPiArDQo+ID4gKyNkZWZpbmUgUENJRV9NQVhfVFJBTlNfVEFCTEVTCQk4DQo+ID4gKyNk ZWZpbmUgUENJRV9BVFJfRU4JCQlCSVQoMCkNCj4gPiArI2RlZmluZSBQQ0lFX0FUUl9TSVpFKHNp emUpIFwNCj4gPiArCSgoKCgoc2l6ZSkgLSAxKSA8PCAxKSAmIEdFTk1BU0soNiwgMSkpIHwgUENJ RV9BVFJfRU4pDQo+ID4gKyNkZWZpbmUgUENJRV9BVFJfSUQoaWQpCQkJKChpZCkgJiBHRU5NQVNL KDMsIDApKQ0KPiA+ICsjZGVmaW5lIFBDSUVfQVRSX1RZUEVfTUVNCQlQQ0lFX0FUUl9JRCgwKQ0K PiA+ICsjZGVmaW5lIFBDSUVfQVRSX1RZUEVfSU8JCVBDSUVfQVRSX0lEKDEpDQo+ID4gKyNkZWZp bmUgUENJRV9BVFJfVExQX1RZUEUodHlwZSkJCSgoKHR5cGUpIDw8IDE2KSAmIEdFTk1BU0soMTgs IDE2KSkNCj4gPiArI2RlZmluZSBQQ0lFX0FUUl9UTFBfVFlQRV9NRU0JCVBDSUVfQVRSX1RMUF9U WVBFKDApDQo+ID4gKyNkZWZpbmUgUENJRV9BVFJfVExQX1RZUEVfSU8JCVBDSUVfQVRSX1RMUF9U WVBFKDIpDQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogc3RydWN0IG10a19wY2llX21zaSAtIE1T SSBpbmZvcm1hdGlvbiBmb3IgZWFjaCBzZXQNCj4gPiArICogQGJhc2U6IElPIG1hcHBlZCByZWdp c3RlciBiYXNlDQo+ID4gKyAqIEBpcnE6IE1TSSBzZXQgSW50ZXJydXB0IG51bWJlcg0KPiA+ICsg KiBAaW5kZXg6IE1TSSBzZXQgbnVtYmVyDQo+ID4gKyAqIEBtc2dfYWRkcjogTVNJIG1lc3NhZ2Ug YWRkcmVzcw0KPiA+ICsgKiBAZG9tYWluOiBJUlEgZG9tYWluDQo+ID4gKyAqLw0KPiA+ICtzdHJ1 Y3QgbXRrX3BjaWVfbXNpIHsNCj4gPiArCXZvaWQgX19pb21lbSAqYmFzZTsNCj4gPiArCXVuc2ln bmVkIGludCBpcnE7DQo+ID4gKwlpbnQgaW5kZXg7DQo+ID4gKwlwaHlzX2FkZHJfdCBtc2dfYWRk cjsNCj4gPiArCXN0cnVjdCBpcnFfZG9tYWluICpkb21haW47DQo+ID4gK307DQo+IA0KPiBUaGlz IGxvb2tzIG9kZC4gWW91IHNlZW0gdG8gc2F5IHRoYXQgdGhpcyBjb3ZlcnMgYSBzZXQgaWYgTVNJ cywgYW5kDQo+IHlldCB0aGUgaXJxIGZpZWxkIGhlcmUgY2xlYXJseSBpc24ndCBwYXJ0IG9mIGEg c2V0LiBJcyB0aGF0IHBlciBNU0kNCj4gaW5zdGVhZD8gRWl0aGVyIHdheSwgc29tZXRoaW5nIGlz IG5vdCBxdWl0ZSBhcyBpdCBzaG91bGQgYmUuDQo+IA0KDQpBcHByZWNpYXRlIGFsbCB0aGVzZSBj b21tZW50cywgcGxlYXNlIGFsbG93IG1lIHRvIGV4cGxhaW4gdGhlIE1TSQ0KaW50ZXJydXB0IGRl c2lnbiBpbiB0aGlzIEhXLg0KDQpUaGUgSFcgZGVzaWduIG9mIE1TSSBpbnRlcnJ1cHRzIHdpbGwg YmUgbGlrZSB0aGUgZm9sbG93aW5nOg0KDQogICAgICAgICAgICAgICAgICArLS0tLS0rDQogICAg ICAgICAgICAgICAgICB8IEdJQyB8DQogICAgICAgICAgICAgICAgICArLS0tLS0rDQogICAgICAg ICAgICAgICAgICAgICBeDQogICAgICAgICAgICAgICAgICAgICB8DQogICAgICAgICAgICAgICAg ICAgICB8W3BvcnQtPmlycV0NCiAgICAgICAgICAgICAgICAgICAgIHwNCiAgICAgICAgICAgICAr LSstKy0rLSstKy0rLSstKw0KICAgICAgICAgICAgIHwwfDF8MnwzfDR8NXw2fDd8W1BDSWUgaW50 Y10NCiAgICAgICAgICAgICArLSstKy0rLSstKy0rLSstKw0KICAgICAgICAgICAgICBeIF4gICAg ICAgICAgIF4NCiAgICAgICAgICAgICAgfCB8ICAgIC4uLiAgICB8W21zaV9pbmZvLT5pcnFdDQog ICAgICArLS0tLS0tLSsgKy0tLS0tLSsgICAgKy0tLS0tLS0tLS0tKw0KICAgICAgfCAgICAgICAg ICAgICAgICB8ICAgICAgICAgICAgICAgIHwNCistKy0rLS0tKy0tKy0tKyAgKy0rLSstLS0rLS0r LS0rICArLSstKy0tLSstLSstLSsNCnwwfDF8Li4ufDMwfDMxfCAgfDB8MXwuLi58MzB8MzF8ICB8 MHwxfC4uLnwzMHwzMXxbTVNJIHNldHNdDQorLSstKy0tLSstLSstLSsgICstKy0rLS0tKy0tKy0t KyAgKy0rLSstLS0rLS0rLS0rDQogXiBeICAgICAgXiAgXiAgICBeIF4gICAgICBeICBeICAgIF4g XiAgICAgIF4gIF4NCiB8IHwgICAgICB8ICB8ICAgIHwgfCAgICAgIHwgIHwgICAgfCB8ICAgICAg fCAgfCBbTVNJIGlycV0NCiB8IHwgICAgICB8ICB8ICAgIHwgfCAgICAgIHwgIHwgICAgfCB8ICAg ICAgfCAgfA0KDQogIChNU0kgU0VUMCkgICAgICAgKE1TSSBTRVQxKSAgLi4uICAgKE1TSSBTRVQ3 KQ0KDQoNCkluIHNvZnR3YXJlIHBhcnRzLCB0aGUgcG9ydC0+bXNpX3RvcF9kb21haW4gaXMgY3Jl YXRlZCB0byBtYWludGFpbnMgOA0KTVNJIElSUXMgZnJvbSB0aGUgUENJZSBpbnRjIGxheWVyLCBp dHMgaGFyZHdhcmUgSVJRIHdpbGwgYmUgbWFwcGVkIHRvDQptc2lfaW5mby0+aXJxIGJ5IGlycV9j cmVhdGVfbWFwcGluZy4NCg0KVGhlIHBvcnQtPm1zaV9kb21haW4gY29udGFpbnMgMjU2IE1TSSBJ UlFzIGluIHRvdGFsLCBpdCBjb25zaXN0IG9mIDggTVNJDQpzZXRzLCBhbmQgZWFjaCBNU0kgc2V0 IGNvbnRhaW5zIDMyIE1TSSBJUlFzLg0KDQpUaGUgc3RydWN0dXJlIG9mIG10a19wY2llX21zaSBp cyB1c2VkIHRvIGRlc2NyaWJlIHRoZSBNU0kgc2V0LCBJIHRoaW5rDQppdCB3aWxsIGJlIG1vcmUg Y29udmVuaWVudCBhbmQgY29tcGx5IHdpdGggdGhlIEhXIGRlc2lnbiB3aGVuIHVzZSB0aGlzDQpz dHJ1Y3R1cmUsIHdlIGNhbiBnZXQgdGhlIGluZm9ybWF0aW9uIG9mIE1TSSBzZXQgZGlyZWN0bHks IGluc3RlYWQgb2YNCmNhbGN1bGF0ZWQgYnkgcG9ydC0+YmFzZS4NCg0KV2hlbiBhIE1TSSBpbnRl cnJ1cHQgaXMgcmVjZWl2ZWQsIHRoZSBpbnRlcnJ1cHQgaGFuZGxlIGZsb3cgd2lsbCBiZSBsaWtl DQp0aGUgZm9sbG93aW5nOg0KDQogICAgICAgICAgICAgIG10a19wY2llX2lycV9oYW5kbGVyIChw b3J0LT5pcnEpDQogICAgICAgICAgICAgICAgICAgICAgICB8DQogICAgICAgICAgICAgICAgICAg ICAgICB8KGZpbmQgbWFwcGluZyBpbiBtc2lfdG9wX2RvbWFpbikNCiAgICAgICAgICAgICAgICAg ICAgICAgIHwNCiAgICAgICAgICAgICAgICAgICAgICAgIHYNCiAgICAgICAgICAgICAgICBtdGtf cGNpZV9tc2lfaGFuZGxlciAobXNpX2luZm8tPmlycSkNCiAgICAgICAgICAgICAgICAgICAgICAg IHwNCiAgICAgICAgICAgICAgICAgICAgICAgIHwoZmluZCBtYXBwaW5nIGluIG1zaV9kb21haW4p DQogICAgICAgICAgICAgICAgICAgICAgICB8DQogICAgICAgICAgICAgICAgICAgICAgICB2DQog ICAgICAgICAgICAgICAgIGhhbmRsZV9lZGdlX2lycSAgKE1TSSBpcnEpDQogICAgICAgICAgICAg ICAgICAgICAgICB8DQogICAgICAgICAgICAgICAgICAgICAgICB8DQogICAgICAgICAgICAgICAg ICAgICAgICB2DQogICAgICAgICAgICAoZGlzcGF0Y2ggdG8gZGV2aWNlIGhhbmRsZXIpDQoNClll cywgSSBoYWQgdG8gYWRtaXQgdGhhdCBpdCdzIG5vdCBhIHF1aXRlIGdvb2Qgc29sdXRpb24gb2Yg aXJxZG9tYWlucywNCnNpbmNlIHRoZSBsb2NhbCBpcnEgZG9tYWluIGlzIHBhcnRpYWwgY291cGxl ZCB3aXRoIHRoZSBzdGFuZGFyZCBQQ0kgTVNJDQppcnFkb21haW4uDQoNClNob3VsZCBJIG5lZWQg dG8gY3JlYXRlIGFub3RoZXIgaXJxZG9tYWluIHRvIG1haW50YWluIHRoZSBNU0kgc2V0cw0KbGF5 ZXIsIGFuZCBzZXQgaXQgYXMgdGhlIHBhcmVudCBkb21haW4gb2YgUENJIE1TSSBkb21haW4/IEkg cmVhbGx5IG5lZWQNCnlvdXIgc3VnZ2VzdGlvbnMsIHRoYW5rcyBhIGxvdC4NCg0KPiA+ICsNCj4g PiArLyoqDQo+ID4gKyAqIHN0cnVjdCBtdGtfcGNpZV9wb3J0IC0gUENJZSBwb3J0IGluZm9ybWF0 aW9uDQo+ID4gKyAqIEBkZXY6IFBDSWUgZGV2aWNlDQo+ID4gKyAqIEBiYXNlOiBJTyBtYXBwZWQg cmVnaXN0ZXIgYmFzZQ0KPiA+ICsgKiBAcmVnX2Jhc2U6IFBoeXNpY2FsIHJlZ2lzdGVyIGJhc2UN Cj4gPiArICogQG1hY19yZXNldDogbWFjIHJlc2V0IGNvbnRyb2wNCj4gPiArICogQHBoeV9yZXNl dDogcGh5IHJlc2V0IGNvbnRyb2wNCj4gPiArICogQHBoeTogUEhZIGNvbnRyb2xsZXIgYmxvY2sN Cj4gPiArICogQGNsa3M6IFBDSWUgY2xvY2tzDQo+ID4gKyAqIEBudW1fY2xrczogUENJZSBjbG9j a3MgY291bnQgZm9yIHRoaXMgcG9ydA0KPiA+ICsgKiBAaXJxOiBQQ0llIGNvbnRyb2xsZXIgaW50 ZXJydXB0IG51bWJlcg0KPiA+ICsgKiBAaW50eF9kb21haW46IGxlZ2FjeSBJTlR4IElSUSBkb21h aW4NCj4gPiArICogQG1zaV9kb21haW46IE1TSSBJUlEgZG9tYWluDQo+ID4gKyAqIEBtc2lfdG9w X2RvbWFpbjogTVNJIElSUSB0b3AgZG9tYWluDQo+ID4gKyAqIEBtc2lfaW5mbzogTVNJIHNldHMg aW5mb3JtYXRpb24NCj4gPiArICogQGxvY2s6IGxvY2sgcHJvdGVjdGluZyBJUlEgYml0IG1hcA0K PiA+ICsgKiBAbXNpX2lycV9pbl91c2U6IGJpdCBtYXAgZm9yIGFzc2lnbmVkIE1TSSBJUlENCj4g PiArICovDQo+ID4gK3N0cnVjdCBtdGtfcGNpZV9wb3J0IHsNCj4gPiArCXN0cnVjdCBkZXZpY2Ug KmRldjsNCj4gPiArCXZvaWQgX19pb21lbSAqYmFzZTsNCj4gPiArCXBoeXNfYWRkcl90IHJlZ19i YXNlOw0KPiA+ICsJc3RydWN0IHJlc2V0X2NvbnRyb2wgKm1hY19yZXNldDsNCj4gPiArCXN0cnVj dCByZXNldF9jb250cm9sICpwaHlfcmVzZXQ7DQo+ID4gKwlzdHJ1Y3QgcGh5ICpwaHk7DQo+ID4g KwlzdHJ1Y3QgY2xrX2J1bGtfZGF0YSAqY2xrczsNCj4gPiArCWludCBudW1fY2xrczsNCj4gPiAr DQo+ID4gKwlpbnQgaXJxOw0KPiA+ICsJc3RydWN0IGlycV9kb21haW4gKmludHhfZG9tYWluOw0K PiA+ICsJc3RydWN0IGlycV9kb21haW4gKm1zaV9kb21haW47DQo+ID4gKwlzdHJ1Y3QgaXJxX2Rv bWFpbiAqbXNpX3RvcF9kb21haW47DQo+ID4gKwlzdHJ1Y3QgbXRrX3BjaWVfbXNpICoqbXNpX2lu Zm87DQo+ID4gKwlzdHJ1Y3QgbXV0ZXggbG9jazsNCj4gPiArCURFQ0xBUkVfQklUTUFQKG1zaV9p cnFfaW5fdXNlLCBQQ0lFX01TSV9JUlFTX05VTSk7DQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKioN Cj4gPiArICogbXRrX3BjaWVfY29uZmlnX3RscF9oZWFkZXINCj4gPiArICogQGJ1czogUENJIGJ1 cyB0byBxdWVyeQ0KPiA+ICsgKiBAZGV2Zm46IGRldmljZS9mdW5jdGlvbiBudW1iZXINCj4gPiAr ICogQHdoZXJlOiBvZmZzZXQgaW4gY29uZmlnIHNwYWNlDQo+ID4gKyAqIEBzaXplOiBkYXRhIHNp emUgaW4gVExQIGhlYWRlcg0KPiA+ICsgKg0KPiA+ICsgKiBTZXQgYnl0ZSBlbmFibGUgZmllbGQg YW5kIGRldmljZSBpbmZvcm1hdGlvbiBpbiBjb25maWd1cmF0aW9uIFRMUCBoZWFkZXIuDQo+ID4g KyAqLw0KPiA+ICtzdGF0aWMgdm9pZCBtdGtfcGNpZV9jb25maWdfdGxwX2hlYWRlcihzdHJ1Y3Qg cGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sDQo+ID4gKwkJCQkJaW50IHdoZXJlLCBp bnQgc2l6ZSkNCj4gPiArew0KPiA+ICsJc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQgPSBidXMt PnN5c2RhdGE7DQo+ID4gKwlpbnQgYnl0ZXM7DQo+ID4gKwl1MzIgdmFsOw0KPiA+ICsNCj4gPiAr CWJ5dGVzID0gKEdFTk1BU0soc2l6ZSAtIDEsIDApICYgMHhmKSA8PCAod2hlcmUgJiAweDMpOw0K PiA+ICsNCj4gPiArCXZhbCA9IFBDSUVfQ0ZHX0ZPUkNFX0JZVEVfRU4gfCBQQ0lFX0NGR19CWVRF X0VOKGJ5dGVzKSB8DQo+ID4gKwkgICAgICBQQ0lFX0NGR19IRUFERVIoYnVzLT5udW1iZXIsIGRl dmZuKTsNCj4gPiArDQo+ID4gKwl3cml0ZWwodmFsLCBwb3J0LT5iYXNlICsgUENJRV9DRkdOVU1f UkVHKTsNCj4gDQo+IFBsZWFzZSBjb252ZXJ0IGFsbCBpbnN0YW5jZXMgb2Ygd3JpdGVsL3JlYWRs IHRvIHRoZWlyIHJlbGF4ZWQgdmVyc2lvbiwNCj4gdW5sZXNzIHlvdSBjYW4gc2hvdyB0aGF0IHlv dSBuZWVkIHRoZSBleHRyYSBtZW1vcnkgb3JkZXJpbmcNCj4gZW5mb3JjZW1lbnQuIFRoaXMgaXMg c3BlY2lhbGx5IHZhbHVhYmxlIG9uIGFuIGFybTY0IHN5c3RlbSAod2hpY2gNCj4gTVQ4MTkyIHNl ZW1zIHRvIGJlKS4NCg0KU3VyZSwgSSB3aWxsIGZpeCBpdCBpbiB0aGUgbmV4dCB2ZXJzaW9uLg0K PiANCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgX19pb21lbSAqbXRrX3BjaWVfbWFw X2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sDQo+ID4gKwkJCQkg ICAgICBpbnQgd2hlcmUpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0 ID0gYnVzLT5zeXNkYXRhOw0KPiA+ICsNCj4gPiArCXJldHVybiBwb3J0LT5iYXNlICsgUENJRV9D RkdfT0ZGU0VUX0FERFIgKyB3aGVyZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBt dGtfcGNpZV9jb25maWdfcmVhZChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2 Zm4sDQo+ID4gKwkJCQlpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgKnZhbCkNCj4gPiArew0KPiA+ ICsJbXRrX3BjaWVfY29uZmlnX3RscF9oZWFkZXIoYnVzLCBkZXZmbiwgd2hlcmUsIHNpemUpOw0K PiA+ICsNCj4gPiArCXJldHVybiBwY2lfZ2VuZXJpY19jb25maWdfcmVhZDMyKGJ1cywgZGV2Zm4s IHdoZXJlLCBzaXplLCB2YWwpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG10a19w Y2llX2NvbmZpZ193cml0ZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4s DQo+ID4gKwkJCQkgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyIHZhbCkNCj4gPiArew0KPiA+ICsJ bXRrX3BjaWVfY29uZmlnX3RscF9oZWFkZXIoYnVzLCBkZXZmbiwgd2hlcmUsIHNpemUpOw0KPiA+ ICsNCj4gPiArCWlmIChzaXplIDw9IDIpDQo+ID4gKwkJdmFsIDw8PSAod2hlcmUgJiAweDMpICog ODsNCj4gPiArDQo+ID4gKwlyZXR1cm4gcGNpX2dlbmVyaWNfY29uZmlnX3dyaXRlMzIoYnVzLCBk ZXZmbiwgd2hlcmUsIDQsIHZhbCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3Qg cGNpX29wcyBtdGtfcGNpZV9vcHMgPSB7DQo+ID4gKwkubWFwX2J1cyA9IG10a19wY2llX21hcF9i dXMsDQo+ID4gKwkucmVhZCAgPSBtdGtfcGNpZV9jb25maWdfcmVhZCwNCj4gPiArCS53cml0ZSA9 IG10a19wY2llX2NvbmZpZ193cml0ZSwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQg bXRrX3BjaWVfc2V0X3RyYW5zX3RhYmxlKHN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0LA0KPiA+ ICsJCQkJICAgIHJlc291cmNlX3NpemVfdCBjcHVfYWRkciwNCj4gPiArCQkJCSAgICByZXNvdXJj ZV9zaXplX3QgcGNpX2FkZHIsDQo+ID4gKwkJCQkgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsDQo+ ID4gKwkJCQkgICAgdW5zaWduZWQgbG9uZyB0eXBlLCBpbnQgbnVtKQ0KPiA+ICt7DQo+ID4gKwl2 b2lkIF9faW9tZW0gKnRhYmxlOw0KPiA+ICsJdTMyIHZhbDsNCj4gPiArDQo+ID4gKwlpZiAobnVt ID49IFBDSUVfTUFYX1RSQU5TX1RBQkxFUykgew0KPiA+ICsJCWRldl9lcnIocG9ydC0+ZGV2LCAi bm90IGVub3VnaCB0cmFuc2xhdGUgdGFibGVbJWRdIGZvciBhZGRyOiAlI2xseCwgbGltaXRlZCB0 byBbJWRdXG4iLA0KPiA+ICsJCQludW0sICh1bnNpZ25lZCBsb25nIGxvbmcpIGNwdV9hZGRyLA0K PiA+ICsJCQlQQ0lFX01BWF9UUkFOU19UQUJMRVMpOw0KPiA+ICsJCXJldHVybiAtRU5PREVWOw0K PiA+ICsJfQ0KPiA+ICsNCj4gPiArCXRhYmxlID0gcG9ydC0+YmFzZSArIFBDSUVfVFJBTlNfVEFC TEVfQkFTRV9SRUcgKw0KPiA+ICsJCW51bSAqIFBDSUVfQVRSX1RMQl9TRVRfT0ZGU0VUOw0KPiA+ ICsNCj4gPiArCXdyaXRlbChsb3dlcl8zMl9iaXRzKGNwdV9hZGRyKSB8IFBDSUVfQVRSX1NJWkUo ZmxzKHNpemUpIC0gMSksIHRhYmxlKTsNCj4gPiArCXdyaXRlbCh1cHBlcl8zMl9iaXRzKGNwdV9h ZGRyKSwgdGFibGUgKyBQQ0lFX0FUUl9TUkNfQUREUl9NU0JfT0ZGU0VUKTsNCj4gPiArCXdyaXRl bChsb3dlcl8zMl9iaXRzKHBjaV9hZGRyKSwgdGFibGUgKyBQQ0lFX0FUUl9UUlNMX0FERFJfTFNC X09GRlNFVCk7DQo+ID4gKwl3cml0ZWwodXBwZXJfMzJfYml0cyhwY2lfYWRkciksIHRhYmxlICsg UENJRV9BVFJfVFJTTF9BRERSX01TQl9PRkZTRVQpOw0KPiA+ICsNCj4gPiArCWlmICh0eXBlID09 IElPUkVTT1VSQ0VfSU8pDQo+ID4gKwkJdmFsID0gUENJRV9BVFJfVFlQRV9JTyB8IFBDSUVfQVRS X1RMUF9UWVBFX0lPOw0KPiA+ICsJZWxzZQ0KPiA+ICsJCXZhbCA9IFBDSUVfQVRSX1RZUEVfTUVN IHwgUENJRV9BVFJfVExQX1RZUEVfTUVNOw0KPiA+ICsNCj4gPiArCXdyaXRlbCh2YWwsIHRhYmxl ICsgUENJRV9BVFJfVFJTTF9QQVJBTV9PRkZTRVQpOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG10a19wY2llX3N0YXJ0dXBfcG9ydChzdHJ1 Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCkNCj4gPiArew0KPiA+ICsJc3RydWN0IHJlc291cmNlX2Vu dHJ5ICplbnRyeTsNCj4gPiArCXN0cnVjdCBwY2lfaG9zdF9icmlkZ2UgKmhvc3QgPSBwY2lfaG9z dF9icmlkZ2VfZnJvbV9wcml2KHBvcnQpOw0KPiA+ICsJdW5zaWduZWQgaW50IHRhYmxlX2luZGV4 ID0gMDsNCj4gPiArCWludCBlcnI7DQo+ID4gKwl1MzIgdmFsOw0KPiA+ICsNCj4gPiArCS8qIFNl dCBhcyBSQyBtb2RlICovDQo+ID4gKwl2YWwgPSByZWFkbChwb3J0LT5iYXNlICsgUENJRV9TRVRU SU5HX1JFRyk7DQo+ID4gKwl2YWwgfD0gUENJRV9SQ19NT0RFOw0KPiA+ICsJd3JpdGVsKHZhbCwg cG9ydC0+YmFzZSArIFBDSUVfU0VUVElOR19SRUcpOw0KPiA+ICsNCj4gPiArCS8qIFNldCBjbGFz cyBjb2RlICovDQo+ID4gKwl2YWwgPSByZWFkbChwb3J0LT5iYXNlICsgUENJRV9QQ0lfSURTXzEp Ow0KPiA+ICsJdmFsICY9IH5HRU5NQVNLKDMxLCA4KTsNCj4gPiArCXZhbCB8PSBQQ0lfQ0xBU1Mo UENJX0NMQVNTX0JSSURHRV9QQ0kgPDwgOCk7DQo+ID4gKwl3cml0ZWwodmFsLCBwb3J0LT5iYXNl ICsgUENJRV9QQ0lfSURTXzEpOw0KPiA+ICsNCj4gPiArCS8qIEFzc2VydCBhbGwgcmVzZXQgc2ln bmFscyAqLw0KPiA+ICsJdmFsID0gcmVhZGwocG9ydC0+YmFzZSArIFBDSUVfUlNUX0NUUkxfUkVH KTsNCj4gPiArCXZhbCB8PSBQQ0lFX01BQ19SU1RCIHwgUENJRV9QSFlfUlNUQiB8IFBDSUVfQlJH X1JTVEIgfCBQQ0lFX1BFX1JTVEI7DQo+ID4gKwl3cml0ZWwodmFsLCBwb3J0LT5iYXNlICsgUENJ RV9SU1RfQ1RSTF9SRUcpOw0KPiA+ICsNCj4gPiArCS8qIERlLWFzc2VydCByZXNldCBzaWduYWxz ICovDQo+ID4gKwl2YWwgJj0gfihQQ0lFX01BQ19SU1RCIHwgUENJRV9QSFlfUlNUQiB8IFBDSUVf QlJHX1JTVEIpOw0KPiA+ICsJd3JpdGVsKHZhbCwgcG9ydC0+YmFzZSArIFBDSUVfUlNUX0NUUkxf UkVHKTsNCj4gPiArDQo+ID4gKwkvKiBEZWxheSAxMDBtcyB0byB3YWl0IHRoZSByZWZlcmVuY2Ug Y2xvY2tzIGJlY29tZSBzdGFibGUgKi8NCj4gPiArCW1zbGVlcCgxMDApOw0KPiA+ICsNCj4gPiAr CS8qIERlLWFzc2VydCBQRVJTVCMgc2lnbmFsICovDQo+ID4gKwl2YWwgJj0gflBDSUVfUEVfUlNU QjsNCj4gPiArCXdyaXRlbCh2YWwsIHBvcnQtPmJhc2UgKyBQQ0lFX1JTVF9DVFJMX1JFRyk7DQo+ ID4gKw0KPiA+ICsJLyogQ2hlY2sgaWYgdGhlIGxpbmsgaXMgdXAgb3Igbm90ICovDQo+ID4gKwll cnIgPSByZWFkbF9wb2xsX3RpbWVvdXQocG9ydC0+YmFzZSArIFBDSUVfTElOS19TVEFUVVNfUkVH LCB2YWwsDQo+ID4gKwkJCSEhKHZhbCAmIFBDSUVfUE9SVF9MSU5LVVApLCAyMCwNCj4gPiArCQkJ NTAgKiBVU0VDX1BFUl9NU0VDKTsNCj4gPiArCWlmIChlcnIpIHsNCj4gPiArCQl2YWwgPSByZWFk bChwb3J0LT5iYXNlICsgUENJRV9MVFNTTV9TVEFUVVNfUkVHKTsNCj4gPiArCQlkZXZfZXJyKHBv cnQtPmRldiwgIlBDSWUgbGluayBkb3duLCBsdHNzbSByZWcgdmFsOiAlI3hcbiIsIHZhbCk7DQo+ ID4gKwkJcmV0dXJuIGVycjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBTZXQgUENJZSB0cmFu c2xhdGlvbiB3aW5kb3dzICovDQo+ID4gKwlyZXNvdXJjZV9saXN0X2Zvcl9lYWNoX2VudHJ5KGVu dHJ5LCAmaG9zdC0+d2luZG93cykgew0KPiA+ICsJCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gZW50 cnktPnJlczsNCj4gPiArCQl1bnNpZ25lZCBsb25nIHR5cGUgPSByZXNvdXJjZV90eXBlKHJlcyk7 DQo+ID4gKwkJcmVzb3VyY2Vfc2l6ZV90IGNwdV9hZGRyOw0KPiA+ICsJCXJlc291cmNlX3NpemVf dCBwY2lfYWRkcjsNCj4gPiArCQlyZXNvdXJjZV9zaXplX3Qgc2l6ZTsNCj4gPiArCQljb25zdCBj aGFyICpyYW5nZV90eXBlOw0KPiA+ICsNCj4gPiArCQlpZiAodHlwZSA9PSBJT1JFU09VUkNFX0lP KSB7DQo+ID4gKwkJCWNwdV9hZGRyID0gcGNpX3Bpb190b19hZGRyZXNzKHJlcy0+c3RhcnQpOw0K PiA+ICsJCQlyYW5nZV90eXBlID0gIklPIjsNCj4gPiArCQl9IGVsc2UgaWYgKHR5cGUgPT0gSU9S RVNPVVJDRV9NRU0pIHsNCj4gPiArCQkJY3B1X2FkZHIgPSByZXMtPnN0YXJ0Ow0KPiA+ICsJCQly YW5nZV90eXBlID0gIk1FTSI7DQo+ID4gKwkJfSBlbHNlIHsNCj4gPiArCQkJY29udGludWU7DQo+ ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQlwY2lfYWRkciA9IHJlcy0+c3RhcnQgLSBlbnRyeS0+b2Zm c2V0Ow0KPiA+ICsJCXNpemUgPSByZXNvdXJjZV9zaXplKHJlcyk7DQo+ID4gKwkJZXJyID0gbXRr X3BjaWVfc2V0X3RyYW5zX3RhYmxlKHBvcnQsIGNwdV9hZGRyLCBwY2lfYWRkciwgc2l6ZSwNCj4g PiArCQkJCQkgICAgICAgdHlwZSwgdGFibGVfaW5kZXgpOw0KPiA+ICsJCWlmIChlcnIpDQo+ID4g KwkJCXJldHVybiBlcnI7DQo+ID4gKw0KPiA+ICsJCWRldl9kYmcocG9ydC0+ZGV2LCAic2V0ICVz IHRyYW5zIHdpbmRvd1slZF06IGNwdV9hZGRyID0gJSNsbHgsIHBjaV9hZGRyID0gJSNsbHgsIHNp emUgPSAlI2xseFxuIiwNCj4gPiArCQkJcmFuZ2VfdHlwZSwgdGFibGVfaW5kZXgsICh1bnNpZ25l ZCBsb25nIGxvbmcpIGNwdV9hZGRyLA0KPiA+ICsJCQkodW5zaWduZWQgbG9uZyBsb25nKSBwY2lf YWRkciwNCj4gPiArCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgc2l6ZSk7DQo+ID4gKw0KPiA+ICsJ CXRhYmxlX2luZGV4Kys7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10a19wY2llX21zaSAqbXRrX2dldF9t c2lfaW5mbyhzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCwNCj4gPiArCQkJCQkJICAgIHVuc2ln bmVkIGxvbmcgaHdpcnEpDQo+ID4gK3sNCj4gPiArCXJldHVybiBwb3J0LT5tc2lfaW5mb1tod2ly cSAvIFBDSUVfTVNJX0lSUVNfUEVSX1NFVF07DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBp bnQgbXRrX3BjaWVfc2V0X2FmZmluaXR5KHN0cnVjdCBpcnFfZGF0YSAqZGF0YSwNCj4gPiArCQkJ CSBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgYm9vbCBmb3JjZSkNCj4gPiArew0KPiA+ICsJ c3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShk YXRhKTsNCj4gPiArCXN0cnVjdCBpcnFfZGF0YSAqcG9ydF9kYXRhID0gaXJxX2dldF9pcnFfZGF0 YShwb3J0LT5pcnEpOw0KPiANCj4gTkFLLiBFaXRoZXIgeW91IGFyZSByZXNvbHZpbmcgYW4gaXJx ZGF0YSB0aGF0IGlzIHRoZSBzYW1lIGFzIHRoZSBvbmUNCj4gYXMgdGhlIG9uZSBwYXNzZWQgYXMg YSBwYXJhbWV0ZXIgKGFuZCBpdCBpcyB0aHVzIHBvaW50bGVzcyksIG9yIHlvdQ0KPiBhcmUgcG9r aW5nIGludG8gc29tZSBvdGhlciBpbnRlcnJ1cHQsIGFuZCBpdCBpcyBhIHRlcnJpYmxlIGxheWVy aW5nDQo+IHZpb2xhdGlvbi4gRWl0aGVyIHdheSwgdGhpcyBtdXN0IGdvLg0KPiANCj4gPiArCXN0 cnVjdCBpcnFfY2hpcCAqcG9ydF9jaGlwID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwKHBvcnRfZGF0 YSk7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCWlmICghcG9ydF9jaGlwIHx8ICFwb3J0 X2NoaXAtPmlycV9zZXRfYWZmaW5pdHkpDQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+IA0KPiBJ biB3aGF0IGNpcmN1bXN0YW5jZXMgY2FuIHRoaXMgZmFpbD8NCj4gDQo+ID4gKw0KPiA+ICsJcmV0 ID0gcG9ydF9jaGlwLT5pcnFfc2V0X2FmZmluaXR5KHBvcnRfZGF0YSwgbWFzaywgZm9yY2UpOw0K PiANCj4gWW91IHJlYWxseSBoYXZlIHRvIGV4cGxhaW4gdGhpcyBpbmRpcmVjdGlvbiwgYW5kIHBv c3NpYmx5IHJlbW92ZSBpdC4NCg0KQXMgdGhlIE1TSSBIVyBkZXNpZ25zIGRlc2NyaWJlZCBiZWZv cmUsIHBvcnQtPmlycSBpcyB0aGUgb25seSBpbnRlcnJ1cHQNCndoaWNoIGNvbm5lY3RlZCB3aXRo IEdJQywgc28gdGhlIG9ubHkgd2F5IHRvIHNldCBpcnEgYWZmaW5pdHkgaXMgdGhhdCB0bw0KdXNl IHRoZSBpcnFfc2V0X2FmZmluaXR5IGNhbGxiYWNrIG9mIHBvcnRfY2hpcC4NCg0KSXQgc2VlbXMg dGhlcmUgaXMgbm8gY2hhbmNlIHRvIGltcGxlbWVudCB0aGlzIGNhbGxiYWNrLCBJIHdpbGwgcmVw bGFjZQ0KdG8gInJldHVybiAtRUlOVkFMIiBpbiB0aGUgbmV4dCB2ZXJzaW9uLg0KPiANCj4gPiAr DQo+ID4gKwlpcnFfZGF0YV91cGRhdGVfZWZmZWN0aXZlX2FmZmluaXR5KGRhdGEsIG1hc2spOw0K PiA+ICsNCj4gPiArCXJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lk IG10a19jb21wb3NlX21zaV9tc2coc3RydWN0IGlycV9kYXRhICpkYXRhLCBzdHJ1Y3QgbXNpX21z ZyAqbXNnKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbXRrX3BjaWVfbXNpICptc2lfaW5mbzsNCj4g PiArCXN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0ID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2Rh dGEoZGF0YSk7DQo+ID4gKwl1bnNpZ25lZCBsb25nIGh3aXJxOw0KPiA+ICsNCj4gPiArCW1zaV9p bmZvID0gbXRrX2dldF9tc2lfaW5mbyhwb3J0LCBkYXRhLT5od2lycSk7DQo+IA0KPiBTbyBtc2lf aW5mbyAqaXMqIHBlciBpbnRlcnJ1cHQsIGFuZCB5ZXQgY29udGFpbnMgaW5mb3JtYXRpb24gdGhh dCBpcw0KPiBzZWVtaW5nbHkgZ2xvYmFsLiBQbGVhc2UgYWRkcmVzcyB0aGlzLg0KDQpJIHdpbGwg Zml4IGl0IGluIHRoZSBuZXh0IHZlcnNpb24uDQoNCj4gDQo+ID4gKwlod2lycSA9CWRhdGEtPmh3 aXJxICUgUENJRV9NU0lfSVJRU19QRVJfU0VUOw0KPiA+ICsNCj4gPiArCW1zZy0+YWRkcmVzc19o aSA9IDA7DQo+IA0KPiBXaGF0IGd1YXJhbnRlZXMgdGhpcz8NCg0KSXQgc2hvdWxkIG5vdCBiZSBz ZXQgdG8gMCBkaXJlY3RseSwgSSB3aWxsIHJlcGxhY2UgdG8NCnVwcGVyXzMyX2JpdHMobXNpX2lu Zm8tPm1zaV9hZGRyKSBpbiB0aGUgbmV4dCB2ZXJzaW9uLg0KPiANCj4gPiArCW1zZy0+YWRkcmVz c19sbyA9IGxvd2VyXzMyX2JpdHMobXNpX2luZm8tPm1zZ19hZGRyKTsNCj4gPiArCW1zZy0+ZGF0 YSA9IGh3aXJxOw0KPiA+ICsJZGV2X2RiZyhwb3J0LT5kZXYsICJtc2kjJSNseCBhZGRyZXNzX2hp ICUjeCBhZGRyZXNzX2xvICUjeCBkYXRhICVkXG4iLA0KPiA+ICsJCWh3aXJxLCBtc2ctPmFkZHJl c3NfaGksIG1zZy0+YWRkcmVzc19sbywgbXNnLT5kYXRhKTsNCj4gDQo+IElmIGFkZHJlc3NfaGkg aXMgYWx3YXlzIDAsIHdoYXQgaXMgdGhlIHBvaW50IG9mIHByaW50aW5nIGl0Pw0KPiANCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgbXRrX21zaV9pcnFfYWNrKHN0cnVjdCBpcnFfZGF0 YSAqZGF0YSkNCj4gPiArew0KPiA+ICsJc3RydWN0IG10a19wY2llX21zaSAqbXNpX2luZm87DQo+ ID4gKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9k YXRhKGRhdGEpOw0KPiA+ICsJdW5zaWduZWQgbG9uZyBod2lycTsNCj4gPiArDQo+ID4gKwltc2lf aW5mbyA9IG10a19nZXRfbXNpX2luZm8ocG9ydCwgZGF0YS0+aHdpcnEpOw0KPiA+ICsJaHdpcnEg PQlkYXRhLT5od2lycSAlIFBDSUVfTVNJX0lSUVNfUEVSX1NFVDsNCj4gPiArDQo+ID4gKwl3cml0 ZWwoQklUKGh3aXJxKSwgbXNpX2luZm8tPmJhc2UgKyBQQ0lFX01TSV9TVEFUVVNfT0ZGU0VUKTsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgbXRrX21zaV9pcnFfbWFzayhzdHJ1Y3Qg aXJxX2RhdGEgKmRhdGEpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBtdGtfcGNpZV9tc2kgKm1zaV9p bmZvOw0KPiA+ICsJc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQgPSBpcnFfZGF0YV9nZXRfaXJx X2NoaXBfZGF0YShkYXRhKTsNCj4gPiArCXVuc2lnbmVkIGxvbmcgaHdpcnE7DQo+ID4gKwl1MzIg dmFsOw0KPiA+ICsNCj4gPiArCW1zaV9pbmZvID0gbXRrX2dldF9tc2lfaW5mbyhwb3J0LCBkYXRh LT5od2lycSk7DQo+ID4gKwlod2lycSA9CWRhdGEtPmh3aXJxICUgUENJRV9NU0lfSVJRU19QRVJf U0VUOw0KPiA+ICsNCj4gPiArCXZhbCA9IHJlYWRsKG1zaV9pbmZvLT5iYXNlICsgUENJRV9NU0lf RU5BQkxFX09GRlNFVCk7DQo+ID4gKwl2YWwgJj0gfkJJVChod2lycSk7DQo+ID4gKwl3cml0ZWwo dmFsLCBtc2lfaW5mby0+YmFzZSArIFBDSUVfTVNJX0VOQUJMRV9PRkZTRVQpOw0KPiA+ICsNCj4g PiArCXBjaV9tc2lfbWFza19pcnEoZGF0YSk7DQo+IA0KPiBUaGlzIGlzIGF0IHRoZSB3cm9uZyBs b2NhdGlvbi4gVGhlIGNvbW1vbiBpZGlvbSBpcyB0byBzcGxpdCBQQ0kgYW5kDQo+IGdlbmVyaWMg TVNJLiBQbGVhc2UgZm9sbG93IHRoZSBzYW1lIGlkaW9tIGluIG9yZGVyIHRvIGtlZXAgdGhlIGNv ZGUNCj4gbWFpbnRhaW5hYmxlLg0KPiANCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQg bXRrX21zaV9pcnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkNCj4gPiArew0KPiA+ICsJ c3RydWN0IG10a19wY2llX21zaSAqbXNpX2luZm87DQo+ID4gKwlzdHJ1Y3QgbXRrX3BjaWVfcG9y dCAqcG9ydCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOw0KPiA+ICsJdW5zaWdu ZWQgbG9uZyBod2lycTsNCj4gPiArCXUzMiB2YWw7DQo+ID4gKw0KPiA+ICsJbXNpX2luZm8gPSBt dGtfZ2V0X21zaV9pbmZvKHBvcnQsIGRhdGEtPmh3aXJxKTsNCj4gPiArCWh3aXJxID0JZGF0YS0+ aHdpcnEgJSBQQ0lFX01TSV9JUlFTX1BFUl9TRVQ7DQo+ID4gKw0KPiA+ICsJdmFsID0gcmVhZGwo bXNpX2luZm8tPmJhc2UgKyBQQ0lFX01TSV9FTkFCTEVfT0ZGU0VUKTsNCj4gPiArCXZhbCB8PSBC SVQoaHdpcnEpOw0KPiA+ICsJd3JpdGVsKHZhbCwgbXNpX2luZm8tPmJhc2UgKyBQQ0lFX01TSV9F TkFCTEVfT0ZGU0VUKTsNCj4gPiArDQo+ID4gKwlwY2lfbXNpX3VubWFza19pcnEoZGF0YSk7DQo+ IA0KPiBTYW1lIHRoaW5nIGhlcmUuDQo+IA0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3Ry dWN0IGlycV9jaGlwIG10a19tc2lfaXJxX2NoaXAgPSB7DQo+ID4gKwkuaXJxX2FjawkJPSBtdGtf bXNpX2lycV9hY2ssDQo+ID4gKwkuaXJxX2NvbXBvc2VfbXNpX21zZwk9IG10a19jb21wb3NlX21z aV9tc2csDQo+ID4gKwkuaXJxX21hc2sJCT0gbXRrX21zaV9pcnFfbWFzaywNCj4gPiArCS5pcnFf dW5tYXNrCQk9IG10a19tc2lfaXJxX3VubWFzaywNCj4gPiArCS5pcnFfc2V0X2FmZmluaXR5CT0g bXRrX3BjaWVfc2V0X2FmZmluaXR5LA0KPiA+ICsJLm5hbWUJCQk9ICJQQ0llIiwNCj4gPiArfTsN Cj4gPiArDQo+ID4gK3N0YXRpYyBpcnFfaHdfbnVtYmVyX3QgbXRrX3BjaWVfZ2V0X2h3aXJxKHN0 cnVjdCBtc2lfZG9tYWluX2luZm8gKmluZm8sDQo+ID4gKwkJCQkJICBtc2lfYWxsb2NfaW5mb190 ICphcmcpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBtc2lfZGVzYyAqZGVzYyA9IGFyZy0+ZGVzYzsN Cj4gPiArCWlycV9od19udW1iZXJfdCBod2lycSA9IGFyZy0+aHdpcnE7DQo+ID4gKw0KPiA+ICsJ YXJnLT5od2lycSArPSBkZXNjLT5udmVjX3VzZWQ7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGh3aXJx Ow0KPiA+ICt9DQo+IA0KPiBQbGVhc2UgZm9sbG93IHRoZSBjb21tb24gTVNJIGZsb3cuIFRoZXJl IGlzIGFic29sdXRlbHkgbm8gbmVlZCB0bw0KPiByZWludmVudCB0aGUgd2hlZWwuDQo+IA0KPiA+ ICsNCj4gPiArc3RhdGljIHZvaWQgbXRrX3BjaWVfbXNpX2ZyZWUoc3RydWN0IGlycV9kb21haW4g KmRvbWFpbiwNCj4gPiArCQkJICAgICAgc3RydWN0IG1zaV9kb21haW5faW5mbyAqaW5mbywgdW5z aWduZWQgaW50IHZpcnEpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBpcnFfZGF0YSAqZGF0YSA9IGly cV9kb21haW5fZ2V0X2lycV9kYXRhKGRvbWFpbiwgdmlycSk7DQo+ID4gKwlzdHJ1Y3QgbXRrX3Bj aWVfcG9ydCAqcG9ydCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOw0KPiA+ICsN Cj4gPiArCW11dGV4X2xvY2soJnBvcnQtPmxvY2spOw0KPiA+ICsNCj4gPiArCWJpdG1hcF9jbGVh cihwb3J0LT5tc2lfaXJxX2luX3VzZSwgZGF0YS0+aHdpcnEsIDEpOw0KPiA+ICsNCj4gPiArCW11 dGV4X3VubG9jaygmcG9ydC0+bG9jayk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQg bXRrX3BjaWVfbXNpX3ByZXBhcmUoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgc3RydWN0IGRl dmljZSAqZGV2LA0KPiA+ICsJCQkJaW50IG52ZWMsIG1zaV9hbGxvY19pbmZvX3QgKmFyZykNCj4g PiArew0KPiA+ICsJc3RydWN0IG1zaV9kb21haW5faW5mbyAqaW5mbyA9IGRvbWFpbi0+aG9zdF9k YXRhOw0KPiA+ICsJc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQgPSBpbmZvLT5jaGlwX2RhdGE7 DQo+ID4gKwlzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MgPSBmaXJzdF9wY2lfbXNpX2VudHJ5KHRvX3Bj aV9kZXYoZGV2KSk7DQo+ID4gKwlpbnQgaHdpcnEsIHJldCA9IDA7DQo+ID4gKw0KPiA+ICsJbXV0 ZXhfbG9jaygmcG9ydC0+bG9jayk7DQo+ID4gKw0KPiA+ICsJaWYgKGRlc2MtPm1zaV9hdHRyaWIu aXNfbXNpeCkgew0KPiA+ICsJCWludCBpOw0KPiA+ICsJCXVuc2lnbmVkIGxvbmcgYml0Ow0KPiA+ ICsNCj4gPiArCQlmb3IgKGkgPSAwOyBpIDwgbnZlYzsgaSsrKSB7DQo+ID4gKwkJCWJpdCA9IGZp bmRfZmlyc3RfemVyb19iaXQocG9ydC0+bXNpX2lycV9pbl91c2UsDQo+ID4gKwkJCQkJCSAgUENJ RV9NU0lfSVJRU19OVU0pOw0KPiA+ICsJCQlpZiAoYml0ID49IFBDSUVfTVNJX0lSUVNfTlVNKSB7 DQo+ID4gKwkJCQlyZXQgPSAtRU5PU1BDOw0KPiA+ICsJCQkJZ290byBtc2lfcHJlcGFyZV9vdXQ7 DQo+ID4gKwkJCX0gZWxzZSB7DQo+ID4gKwkJCQlzZXRfYml0KGJpdCwgcG9ydC0+bXNpX2lycV9p bl91c2UpOw0KPiA+ICsJCQl9DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQlod2lycSA9IGJpdCAt IG52ZWM7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCWh3aXJxID0gYml0bWFwX2ZpbmRfZnJlZV9y ZWdpb24ocG9ydC0+bXNpX2lycV9pbl91c2UsDQo+ID4gKwkJCQkJCVBDSUVfTVNJX0lSUVNfTlVN LA0KPiA+ICsJCQkJCQlvcmRlcl9iYXNlXzIobnZlYykpOw0KPiA+ICsJCWlmIChod2lycSA8IDAp DQo+ID4gKwkJCXJldCA9IC1FTk9TUEM7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICttc2lfcHJlcGFy ZV9vdXQ6DQo+ID4gKwltdXRleF91bmxvY2soJnBvcnQtPmxvY2spOw0KPiA+ICsNCj4gPiArCWlm IChyZXQpDQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gKwltZW1zZXQoYXJnLCAwLCBz aXplb2YoKmFyZykpOw0KPiA+ICsJYXJnLT5od2lycSA9IGh3aXJxOw0KPiA+ICsNCj4gPiArCXJl dHVybiAwOw0KPiA+ICt9DQo+IA0KPiBOQUsuIFRoaXMgc2hvdWxkIHRha2UgcGxhY2UgaW4gdGhl IGlycWRvbWFpbiBhbGxvYyBwYXRoLiAucHJlcGFyZSBpcw0KPiByZXNlcnZlZCBmb3IgSFcgdGhh dCByZXF1aXJlIHBlci1kZXZpY2Ugc2V0dXAsIGFuZCB0aGlzIGRvZXNuJ3QNCj4gaW50ZXJhY3Qg d2l0aCB0aGUgSFcgYXQgYWxsLg0KPiANCj4gWW91ciBkaXN0aW5jdGlvbiBiZXR3ZWVuIE1TSS1Y IGFuZCBub24tTVNJLVggYWxzbyBiZWNvbWVzIG1vb3Qgb25jZQ0KPiB5b3UgcGxhY2UgdGhlIGFs bG9jYXRvciBhdCB0aGUgcGxhY2Ugd2hlcmUgYWxsb2NhdGlvbnMgdGFrZSBwbGFjZS4NCj4gDQo+ ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBtdGtfcGNpZV9tc2lfc2V0X2Rlc2MobXNpX2FsbG9jX2lu Zm9fdCAqYXJnLCBzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MpDQo+ID4gK3sNCj4gPiArCWFyZy0+ZGVz YyA9IGRlc2M7DQo+ID4gK30NCj4gDQo+IE5BSy4gUGxlYXNlIHVzZSB0aGUgY29tbW9uIFBDSSBm bG93Lg0KPiANCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgbXNpX2RvbWFpbl9vcHMgbXRrX21z aV9kb21haW5fb3BzID0gew0KPiA+ICsJLmdldF9od2lycQk9IG10a19wY2llX2dldF9od2lycSwN Cj4gPiArCS5tc2lfZnJlZQk9IG10a19wY2llX21zaV9mcmVlLA0KPiA+ICsJLm1zaV9wcmVwYXJl CT0gbXRrX3BjaWVfbXNpX3ByZXBhcmUsDQo+ID4gKwkuc2V0X2Rlc2MJPSBtdGtfcGNpZV9tc2lf c2V0X2Rlc2MsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IG1zaV9kb21haW5f aW5mbyBtdGtfbXNpX2RvbWFpbl9pbmZvID0gew0KPiA+ICsJLmZsYWdzCQk9IChNU0lfRkxBR19V U0VfREVGX0RPTV9PUFMgfCBNU0lfRkxBR19QQ0lfTVNJWCB8DQo+ID4gKwkJCSAgIE1TSV9GTEFH X1VTRV9ERUZfQ0hJUF9PUFMgfCBNU0lfRkxBR19NVUxUSV9QQ0lfTVNJKSwNCj4gPiArCS5jaGlw CQk9ICZtdGtfbXNpX2lycV9jaGlwLA0KPiA+ICsJLm9wcwkJPSAmbXRrX21zaV9kb21haW5fb3Bz LA0KPiA+ICsJLmhhbmRsZXIJPSBoYW5kbGVfZWRnZV9pcnEsDQo+ID4gKwkuaGFuZGxlcl9uYW1l CT0gIk1TSSIsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBtdGtfbXNpX3RvcF9p cnFfZW9pKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkNCj4gPiArew0KPiA+ICsJc3RydWN0IG10a19w Y2llX3BvcnQgKnBvcnQgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkYXRhKTsNCj4gPiAr CXVuc2lnbmVkIGxvbmcgbXNpX2lycSA9IGRhdGEtPmh3aXJxICsgUENJRV9NU0lfU0hJRlQ7DQo+ ID4gKw0KPiA+ICsJd3JpdGVsKEJJVChtc2lfaXJxKSwgcG9ydC0+YmFzZSArIFBDSUVfSU5UX1NU QVRVU19SRUcpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IGlycV9jaGlwIG10 a19tc2lfdG9wX2lycV9jaGlwID0gew0KPiA+ICsJLmlycV9lb2kJPSBtdGtfbXNpX3RvcF9pcnFf ZW9pLA0KPiA+ICsJLm5hbWUJCT0gIlBDSWUiLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGlj IHZvaWQgbXRrX3BjaWVfbXNpX2hhbmRsZXIoc3RydWN0IGlycV9kZXNjICpkZXNjKQ0KPiA+ICt7 DQo+ID4gKwlzdHJ1Y3QgbXRrX3BjaWVfbXNpICptc2lfaW5mbyA9IGlycV9kZXNjX2dldF9oYW5k bGVyX2RhdGEoZGVzYyk7DQo+ID4gKwlzdHJ1Y3QgaXJxX2NoaXAgKmlycWNoaXAgPSBpcnFfZGVz Y19nZXRfY2hpcChkZXNjKTsNCj4gPiArCXVuc2lnbmVkIGxvbmcgbXNpX2VuYWJsZSwgbXNpX3N0 YXR1czsNCj4gPiArCXVuc2lnbmVkIGludCB2aXJxOw0KPiA+ICsJaXJxX2h3X251bWJlcl90IGJp dCwgaHdpcnE7DQo+ID4gKw0KPiA+ICsJY2hhaW5lZF9pcnFfZW50ZXIoaXJxY2hpcCwgZGVzYyk7 DQo+ID4gKw0KPiA+ICsJbXNpX2VuYWJsZSA9IHJlYWRsKG1zaV9pbmZvLT5iYXNlICsgUENJRV9N U0lfRU5BQkxFX09GRlNFVCk7DQo+ID4gKwl3aGlsZSAoKG1zaV9zdGF0dXMgPSByZWFkbChtc2lf aW5mby0+YmFzZSArIFBDSUVfTVNJX1NUQVRVU19PRkZTRVQpICYNCj4gPiArCSAgICAgICBtc2lf ZW5hYmxlKSkgew0KPiA+ICsJCWZvcl9lYWNoX3NldF9iaXQoYml0LCAmbXNpX3N0YXR1cywgUENJ RV9NU0lfSVJRU19QRVJfU0VUKSB7DQo+ID4gKwkJCWh3aXJxID0gYml0ICsgbXNpX2luZm8tPmlu ZGV4ICogUENJRV9NU0lfSVJRU19QRVJfU0VUOw0KPiA+ICsJCQl2aXJxID0gaXJxX2ZpbmRfbWFw cGluZyhtc2lfaW5mby0+ZG9tYWluLCBod2lycSk7DQo+ID4gKwkJCWdlbmVyaWNfaGFuZGxlX2ly cSh2aXJxKTsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJY2hhaW5lZF9pcnFfZXhp dChpcnFjaGlwLCBkZXNjKTsNCj4gDQo+IElmIHlvdXIgTVNJcyBhcmUgYmVoaW5kIGEgbXV4aW5n IGludGVycnVwdCB5b3UgKmNhbm5vdCogaW1wbGVtZW50IGFuDQo+IGFmZmluaXR5IHNldHRpbmcg Y2FsbGJhY2ssIGFzIHRoaXMgY2hhbmdlcyB0aGUgYWZmaW5pdHkgb2YgKmFsbCogTVNJcw0KPiBp biBvbmUgZ28sIHdoaWNoIGlzIGEgdXNlcnNwYWNlIEFCSSB2aW9sYXRpb24uIEkgY2FuJ3QgYmVs aWV2ZSB0aGF0DQo+IHRoaXMgaXMgYWxtb3N0IDIwMjEsIGFuZCBwZW9wbGUgYXJlIHN0aWxsIHNo aXBwaW5nIEhXIHRoYXQgaXMgdGhhdA0KPiBicm9rZW4gOi0oLg0KDQpTb3JyeSwgSSBoYXZlbid0 IG5vdGljZWQgdGhlIHBvdGVudGlhbCByaXNrIG9mIHVzZXJzcGFjZSBBQkkgdmlvbGF0aW9uLA0K dGhhbmtzIGZvciBwb2ludGluZyBvdXQuDQo+IA0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg aW50IG10a19tc2lfdG9wX2RvbWFpbl9tYXAoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwNCj4g PiArCQkJCSAgICB1bnNpZ25lZCBpbnQgdmlycSwgaXJxX2h3X251bWJlcl90IGh3aXJxKQ0KPiA+ ICt7DQo+ID4gKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCA9IGRvbWFpbi0+aG9zdF9kYXRh Ow0KPiA+ICsJc3RydWN0IG10a19wY2llX21zaSAqbXNpX2luZm8gPSBwb3J0LT5tc2lfaW5mb1to d2lycV07DQo+ID4gKw0KPiA+ICsJaXJxX2RvbWFpbl9zZXRfaW5mbyhkb21haW4sIHZpcnEsIGh3 aXJxLA0KPiA+ICsJCQkgICAgJm10a19tc2lfdG9wX2lycV9jaGlwLCBkb21haW4tPmhvc3RfZGF0 YSwNCj4gPiArCQkJICAgIG10a19wY2llX21zaV9oYW5kbGVyLCBtc2lfaW5mbywgTlVMTCk7DQo+ ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBz dHJ1Y3QgaXJxX2RvbWFpbl9vcHMgbXRrX21zaV90b3BfZG9tYWluX29wcyA9IHsNCj4gPiArCS5t YXAgPSBtdGtfbXNpX3RvcF9kb21haW5fbWFwLA0KPiANCj4gTkFLLiBNU0lzIGRvIG5vdCBuZWVk IGEgbWFwcGluZyBjYWxsYmFjay4gVGhpcyBiZWxvbmdzIHRvIHRoZQ0KPiBpcnFkb21haW4gYWxs b2MgY2FsbGJhY2ssIHdoaWNoIHlvdSBkb24ndCBpbXBsZW1lbnQuDQo+IA0KPiA+ICt9Ow0KPiA+ ICsNCj4gPiArc3RhdGljIHZvaWQgbXRrX2ludHhfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEp DQo+ID4gK3sNCj4gPiArCXN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0ID0gaXJxX2RhdGFfZ2V0 X2lycV9jaGlwX2RhdGEoZGF0YSk7DQo+ID4gKwl1MzIgdmFsOw0KPiA+ICsNCj4gPiArCXZhbCA9 IHJlYWRsKHBvcnQtPmJhc2UgKyBQQ0lFX0lOVF9FTkFCTEVfUkVHKTsNCj4gPiArCXZhbCAmPSB+ QklUKGRhdGEtPmh3aXJxICsgUENJRV9JTlRYX1NISUZUKTsNCj4gPiArCXdyaXRlbCh2YWwsIHBv cnQtPmJhc2UgKyBQQ0lFX0lOVF9FTkFCTEVfUkVHKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3Rh dGljIHZvaWQgbXRrX2ludHhfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkNCj4gPiArew0K PiA+ICsJc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBf ZGF0YShkYXRhKTsNCj4gPiArCXUzMiB2YWw7DQo+ID4gKw0KPiA+ICsJdmFsID0gcmVhZGwocG9y dC0+YmFzZSArIFBDSUVfSU5UX0VOQUJMRV9SRUcpOw0KPiA+ICsJdmFsIHw9IEJJVChkYXRhLT5o d2lycSArIFBDSUVfSU5UWF9TSElGVCk7DQo+ID4gKwl3cml0ZWwodmFsLCBwb3J0LT5iYXNlICsg UENJRV9JTlRfRU5BQkxFX1JFRyk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIG10 a19pbnR4X2VvaShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBt dGtfcGNpZV9wb3J0ICpwb3J0ID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZGF0YSk7DQo+ ID4gKwl1bnNpZ25lZCBsb25nIGh3aXJxOw0KPiA+ICsNCj4gPiArCS8qKg0KPiA+ICsJICogQXMg YW4gZW11bGF0ZWQgbGV2ZWwgSVJRLCBpdHMgaW50ZXJydXB0IHN0YXR1cyB3aWxsIHJlbWFpbg0K PiA+ICsJICogdW50aWwgdGhlIGNvcnJlc3BvbmRpbmcgZGUtYXNzZXJ0IG1lc3NhZ2UgaXMgcmVj ZWl2ZWQ7IGhlbmNlIHRoYXQNCj4gPiArCSAqIHRoZSBzdGF0dXMgY2FuIG9ubHkgYmUgY2xlYXJl ZCB3aGVuIHRoZSBpbnRlcnJ1cHQgaGFzIGJlZW4gc2VydmljZWQuDQo+ID4gKwkgKi8NCj4gPiAr CWh3aXJxID0gZGF0YS0+aHdpcnEgKyBQQ0lFX0lOVFhfU0hJRlQ7DQo+ID4gKwl3cml0ZWwoQklU KGh3aXJxKSwgcG9ydC0+YmFzZSArIFBDSUVfSU5UX1NUQVRVU19SRUcpOw0KPiANCj4gQWxsIG9m IHRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIGEgbGV2ZWwgaW50ZXJydXB0LCBzbyB0aGlzIGlz IHByZXR0eQ0KPiBtdWNoIGRldm9pZCBvZiBhbnkgaW5mb3JtYXRpb24gYXMgdG8gKndoeSogeW91 IG5lZWQgdG8gd3JpdGUgdG8gY2xlYXINCj4gdGhpcyBiaXQuIFdoYXQgaGFwcGVucyBpZiB0aGUg aW50ZXJydXB0IGlzIHN0aWxsIGFzc2VydGVkIGJlY2F1c2UNCj4gbm90aGluZyBoYXMgaGFuZGxl ZCBpdD8gV2l0aG91dCBhbnkgZnVydGhlciBpbmZvcm1hdGlvbiwgdGhpcyBsb29rcw0KPiB0ZXJy aWJseSB3cm9uZy4NCg0KU29ycnksIHRoaXMgY29tbWVudCBzaG91bGQgYmUgdXNlZCB0byBkZXNj cmliZSB0aGUgbXRrX2ludHhfZW9pDQpmdW5jdGlvbiwgaXQgY2F1c2UgbWlzdW5kZXJzdGFuZGlu Z3MgYXQgdGhpcyBwbGFjZS4gSSBqdXN0IHdhbnQgdG8gYWRkDQp0aGUgY29tbWVudCB0byBleHBs YWluIHRoYXQgd2h5IHRoaXMgaW50ZXJydXB0IG5lZWRzIHRvIGJlIGFja2VkIGF0IHRoZQ0KZW5k IG9mIGludGVycnVwdC4gSSB3aWxsIG1vdmUgaXQgdG8gdGhlIGZyb250IG9mIG10a19pbnR4X2Vv aSBpbiB0aGUNCm5leHQgdmVyc2lvbi4NCj4gDQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBz dHJ1Y3QgaXJxX2NoaXAgbXRrX2ludHhfaXJxX2NoaXAgPSB7DQo+ID4gKwkuaXJxX21hc2sJCT0g bXRrX2ludHhfbWFzaywNCj4gPiArCS5pcnFfdW5tYXNrCQk9IG10a19pbnR4X3VubWFzaywNCj4g PiArCS5pcnFfZW9pCQk9IG10a19pbnR4X2VvaSwNCj4gPiArCS5pcnFfc2V0X2FmZmluaXR5CT0g bXRrX3BjaWVfc2V0X2FmZmluaXR5LA0KPiA+ICsJLm5hbWUJCQk9ICJQQ0llIiwNCj4gPiArfTsN Cj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbXRrX3BjaWVfaW50eF9tYXAoc3RydWN0IGlycV9kb21h aW4gKmRvbWFpbiwgdW5zaWduZWQgaW50IGlycSwNCj4gPiArCQkJICAgICBpcnFfaHdfbnVtYmVy X3QgaHdpcnEpDQo+ID4gK3sNCj4gPiArCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGly cSwgJm10a19pbnR4X2lycV9jaGlwLA0KPiA+ICsJCQkJICAgICAgaGFuZGxlX2Zhc3Rlb2lfaXJx LCAiSU5UeCIpOw0KPiA+ICsJaXJxX3NldF9jaGlwX2RhdGEoaXJxLCBkb21haW4tPmhvc3RfZGF0 YSk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgaXJxX2RvbWFpbl9vcHMgaW50eF9kb21haW5fb3BzID0gew0KPiA+ICsJLm1h cCA9IG10a19wY2llX2ludHhfbWFwLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGludCBt dGtfcGNpZV9pbml0X2lycV9kb21haW5zKHN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0LA0KPiA+ ICsJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpDQo+ID4gK3sNCj4gPiArCXN0cnVj dCBkZXZpY2UgKmRldiA9IHBvcnQtPmRldjsNCj4gPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqaW50 Y19ub2RlOw0KPiA+ICsJc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSA9IG9mX25vZGVfdG9f Zndub2RlKG5vZGUpOw0KPiA+ICsJc3RydWN0IG10a19wY2llX21zaSAqbXNpX2luZm87DQo+ID4g KwlzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvICppbmZvOw0KPiA+ICsJaW50IGksIHJldDsNCj4gPiAr DQo+ID4gKwkvKiBTZXR1cCBJTlR4ICovDQo+ID4gKwlpbnRjX25vZGUgPSBvZl9nZXRfY2hpbGRf YnlfbmFtZShub2RlLCAiaW50ZXJydXB0LWNvbnRyb2xsZXIiKTsNCj4gPiArCWlmICghaW50Y19u b2RlKSB7DQo+ID4gKwkJZGV2X2VycihkZXYsICJtaXNzaW5nIFBDSWUgSW50YyBub2RlXG4iKTsN Cj4gPiArCQlyZXR1cm4gLUVOT0RFVjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlwb3J0LT5pbnR4 X2RvbWFpbiA9IGlycV9kb21haW5fYWRkX2xpbmVhcihpbnRjX25vZGUsIFBDSV9OVU1fSU5UWCwN Cj4gPiArCQkJCQkJICAmaW50eF9kb21haW5fb3BzLCBwb3J0KTsNCj4gPiArCWlmICghcG9ydC0+ aW50eF9kb21haW4pIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgSU5UeCBJ UlEgZG9tYWluXG4iKTsNCj4gPiArCQlyZXR1cm4gLUVOT0RFVjsNCj4gPiArCX0NCj4gPiArDQo+ ID4gKwkvKiBTZXR1cCBNU0kgKi8NCj4gPiArCW11dGV4X2luaXQoJnBvcnQtPmxvY2spOw0KPiA+ ICsNCj4gPiArCWluZm8gPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmluZm8pLCBHRlBfS0VS TkVMKTsNCj4gPiArCWlmICghaW5mbykNCj4gPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gPiArDQo+ ID4gKwltZW1jcHkoaW5mbywgJm10a19tc2lfZG9tYWluX2luZm8sIHNpemVvZigqaW5mbykpOw0K PiA+ICsJaW5mby0+Y2hpcF9kYXRhID0gcG9ydDsNCj4gPiArDQo+ID4gKwlwb3J0LT5tc2lfZG9t YWluID0gcGNpX21zaV9jcmVhdGVfaXJxX2RvbWFpbihmd25vZGUsIGluZm8sIE5VTEwpOw0KPiA+ ICsJaWYgKCFwb3J0LT5tc2lfZG9tYWluKSB7DQo+ID4gKwkJZGV2X2luZm8oZGV2LCAiZmFpbGVk IHRvIGNyZWF0ZSBNU0kgZG9tYWluXG4iKTsNCj4gPiArCQlyZXQgPSAtRU5PREVWOw0KPiA+ICsJ CWdvdG8gZXJyX21zaV9kb21haW47DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogRW5hYmxlIE1T SSBhbmQgc2V0dXAgUENJZSBkb21haW5zICovDQo+ID4gKwlwb3J0LT5tc2lfdG9wX2RvbWFpbiA9 IGlycV9kb21haW5fYWRkX2hpZXJhcmNoeShOVUxMLCAwLCAwLCBub2RlLA0KPiA+ICsJCQkJCQkJ Jm10a19tc2lfdG9wX2RvbWFpbl9vcHMsDQo+ID4gKwkJCQkJCQlwb3J0KTsNCj4gPiArCWlmICgh cG9ydC0+bXNpX3RvcF9kb21haW4pIHsNCj4gPiArCQlkZXZfaW5mbyhkZXYsICJmYWlsZWQgdG8g Y3JlYXRlIE1TSSB0b3AgZG9tYWluXG4iKTsNCj4gPiArCQlyZXQgPSAtRU5PREVWOw0KPiA+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 UkVHICsNCj4gPiArCQkJCSAgICAgb2Zmc2V0Ow0KPiANCj4gQWxsIG9mIHRoaXMgY2FuIGJlIGRl cml2ZWQgZnJvbSBpIChhbmQgdGhpcyBod2lycSkgYXQgcnVudGltZS4gV2h5IGRvDQo+IHdlIG5l ZWQgdG8gY2FjaGUgdGhpcyBpbmZvcm1hdGlvbj8NCg0KSSB0cnkgdG8gdXNlIG1zaV9pbmZvIHN0 cnVjdHVyZSB0byBkZXNjcmliZSB0aGUgTVNJIHNldCwgSSB0aGluayB0aGlzDQp3aWxsIGJlIG1v cmUgY29tcGx5IHdpdGggdGhlIEhXIGRlc2lnbiBhbmQgbW9yZSBlYXNpZXIgdG8gdW5kZXJzdGFu ZCB0aGUNCmludGVycnVwdCBoYW5kbGUgZmxvdy4NCj4gDQo+ID4gKw0KPiA+ICsJCXdyaXRlbChs b3dlcl8zMl9iaXRzKG1zaV9pbmZvLT5tc2dfYWRkciksIG1zaV9pbmZvLT5iYXNlKTsNCj4gPiAr DQo+ID4gKwkJbXNpX2luZm8tPmluZGV4ID0gaTsNCj4gPiArCQltc2lfaW5mby0+ZG9tYWluID0g cG9ydC0+bXNpX2RvbWFpbjsNCj4gDQo+IElmIHRoaXMgaXMgY29tbW9uIHRvIGFsbCBzZXRzLCB3 aHkgaXNuJ3QgaXQgZ2xvYmFsPw0KDQpJIHdpbGwgZml4IGl0IGluIHRoZSBuZXh0IHZlcnNpb24u DQo+IA0KPiA+ICsNCj4gPiArCQlwb3J0LT5tc2lfaW5mb1tpXSA9IG1zaV9pbmZvOw0KPiA+ICsN Cj4gPiArCQkvKiBBbGxvYyBJUlEgZm9yIGVhY2ggTVNJIHNldCAqLw0KPiA+ICsJCW1zaV9pbmZv LT5pcnEgPSBpcnFfY3JlYXRlX21hcHBpbmcocG9ydC0+bXNpX3RvcF9kb21haW4sIGkpOw0KPiA+ ICsJCWlmICghbXNpX2luZm8tPmlycSkgew0KPiA+ICsJCQlkZXZfaW5mbyhkZXYsICJhbGxvY2F0 ZSBNU0kgdG9wIElSUSBmYWlsZWRcbiIpOw0KPiA+ICsJCQlyZXQgPSAtRU5PU1BDOw0KPiA+ICsJ CQlnb3RvIGVycl9tc2lfc2V0Ow0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJdmFsID0gcmVhZGwo cG9ydC0+YmFzZSArIFBDSUVfSU5UX0VOQUJMRV9SRUcpOw0KPiA+ICsJCXZhbCB8PSBCSVQoaSAr IFBDSUVfTVNJX1NISUZUKTsNCj4gPiArCQl3cml0ZWwodmFsLCBwb3J0LT5iYXNlICsgUENJRV9J TlRfRU5BQkxFX1JFRyk7DQo+ID4gKw0KPiA+ICsJCXZhbCA9IHJlYWRsKHBvcnQtPmJhc2UgKyBQ Q0lFX01TSV9TRVRfRU5BQkxFX1JFRyk7DQo+ID4gKwkJdmFsIHw9IEJJVChpKTsNCj4gPiArCQl3 cml0ZWwodmFsLCBwb3J0LT5iYXNlICsgUENJRV9NU0lfU0VUX0VOQUJMRV9SRUcpOw0KPiA+ICsJ fQ0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICsNCj4gPiArZXJyX21zaV9zZXQ6DQo+ID4g Kwl3aGlsZSAoaS0tID4gMCkgew0KPiA+ICsJCW1zaV9pbmZvID0gcG9ydC0+bXNpX2luZm9baV07 DQo+ID4gKwkJaXJxX2Rpc3Bvc2VfbWFwcGluZyhtc2lfaW5mby0+aXJxKTsNCj4gPiArCX0NCj4g PiArZXJyX21zaV9pbmZvOg0KPiA+ICsJaXJxX2RvbWFpbl9yZW1vdmUocG9ydC0+bXNpX3RvcF9k b21haW4pOw0KPiA+ICtlcnJfbXNpX3RvcF9kb21haW46DQo+ID4gKwlpcnFfZG9tYWluX3JlbW92 ZShwb3J0LT5tc2lfZG9tYWluKTsNCj4gPiArZXJyX21zaV9kb21haW46DQo+ID4gKwlpcnFfZG9t YWluX3JlbW92ZShwb3J0LT5pbnR4X2RvbWFpbik7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHJldDsN Cj4gPiArfQ0KPiANCj4gQXQgdGhpcyBzdGFnZSwgSSBzdG9wcGVkLCBiZWNhdXNlIHRoZXJlIGlz IHJlYWxseSBhIGxvdCB0byBjaGFuZ2UgaW4NCj4gdGhpcyBkcml2ZXIgYmVmb3JlIGl0IGlzIGlu IGFuIGFjY2VwdGFibGUgc2hhcGUuIFBsZWFzZSB1c2UgdGhlIGNvbW1vbg0KPiBpZGlvbXMgZXN0 YWJsaXNoZWQgZm9yIGV4aXN0aW5nIE1TSSBpbXBsZW1lbnRhdGlvbnMuDQo+IA0KPiBJJ2QgYXBw cmVjaWF0ZSBpZiB5b3Uga2VwdCBtZSBwb3N0ZWQgb24gdGhlIGZvbGxvd2luZyB2ZXJzaW9ucyBv ZiB0aGlzDQo+IGRyaXZlci4NCj4gDQo+IFRoYW5rcywNCj4gDQo+IAlNLg0KPiANCg0K