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=-7.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable 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 47B88C06511 for ; Thu, 4 Jul 2019 02:42:20 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 01D692187F for ; Thu, 4 Jul 2019 02:42:20 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=nxp.com header.i=@nxp.com header.b="RVCnQZkn" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726955AbfGDCmT (ORCPT ); Wed, 3 Jul 2019 22:42:19 -0400 Received: from mail-eopbgr70054.outbound.protection.outlook.com ([40.107.7.54]:6071 "EHLO EUR04-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726964AbfGDCmT (ORCPT ); Wed, 3 Jul 2019 22:42:19 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hh8Sis2TNcy3RrIqaUfnzdOOctfRhIFo81YC34Y5OjU=; b=RVCnQZknKik6qY2ruRmvOjLwZYCoXtwgSg4UlBAnFId2xlhOPP3WZ8PoddPTgwrO4r1ncBSnY8MTj2xNeAwgGy0s3fL2ljiWSaUAsES+MjzzjvEvU2vMEdCtUV+vxHTwDDaY9OgDrSGwJV+tVrjcFbfJbZNSZsZzLri25gjewpw= Received: from DB8PR04MB6747.eurprd04.prod.outlook.com (20.179.250.159) by DB8PR04MB6777.eurprd04.prod.outlook.com (52.133.243.138) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2052.18; Thu, 4 Jul 2019 02:41:54 +0000 Received: from DB8PR04MB6747.eurprd04.prod.outlook.com ([fe80::93a:4344:1120:4ca0]) by DB8PR04MB6747.eurprd04.prod.outlook.com ([fe80::93a:4344:1120:4ca0%6]) with mapi id 15.20.2032.019; Thu, 4 Jul 2019 02:41:54 +0000 From: "Z.q. Hou" To: Lorenzo Pieralisi CC: "linux-pci@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "devicetree@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "bhelgaas@google.com" , "robh+dt@kernel.org" , "mark.rutland@arm.com" , "l.subrahmanya@mobiveil.co.in" , "shawnguo@kernel.org" , Leo Li , "catalin.marinas@arm.com" , "will.deacon@arm.com" , Mingkai Hu , "M.h. Lian" , Xiaowei Bao Subject: RE: [PATCHv5 02/20] PCI: mobiveil: Format the code without functionality change Thread-Topic: [PATCHv5 02/20] PCI: mobiveil: Format the code without functionality change Thread-Index: AQHU8Qqsskjg5i2JJUOtSWDylHX9tqa5gMeAgADAr2A= Date: Thu, 4 Jul 2019 02:41:54 +0000 Message-ID: References: <20190412083635.33626-1-Zhiqiang.Hou@nxp.com> <20190412083635.33626-3-Zhiqiang.Hou@nxp.com> <20190703151021.GC26804@e121166-lin.cambridge.arm.com> In-Reply-To: <20190703151021.GC26804@e121166-lin.cambridge.arm.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=zhiqiang.hou@nxp.com; x-originating-ip: [119.31.174.73] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 706edb59-e000-4b9e-d6fc-08d700292d35 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020);SRVR:DB8PR04MB6777; x-ms-traffictypediagnostic: DB8PR04MB6777: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:6790; x-forefront-prvs: 0088C92887 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(4636009)(396003)(366004)(346002)(136003)(39860400002)(376002)(13464003)(189003)(199004)(25786009)(476003)(5660300002)(11346002)(6116002)(52536014)(486006)(4326008)(30864003)(3846002)(66946007)(73956011)(76116006)(446003)(7696005)(66476007)(66556008)(64756008)(7416002)(53946003)(55016002)(33656002)(9686003)(99286004)(186003)(66446008)(6246003)(26005)(6506007)(53546011)(102836004)(2906002)(54906003)(478600001)(71200400001)(71190400001)(53936002)(229853002)(316002)(6436002)(6916009)(8936002)(14454004)(66066001)(256004)(14444005)(68736007)(81166006)(8676002)(86362001)(74316002)(81156014)(305945005)(7736002)(76176011)(579004);DIR:OUT;SFP:1101;SCL:1;SRVR:DB8PR04MB6777;H:DB8PR04MB6747.eurprd04.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: Uw3zu4xR8DkIpwLQtyWRxq3hQikaR+J5IXaei2IJMZGzNrATpyK+tvbu8h14orkfB/5h3FVCDstNu8kPXPALnnXT37jodKOBMwaBRc5TY9Rajo6BFzha/XcefK039VgGJD8kyT/7ec7gGDR0erVXum6qmnWq2Xxz2Tt/IznU7kApuq7G2ILAoZWrx3ckE06T62e2Hn0UXzMH5oMtb3BxD6ahy4iUkmPt36snk+4YyQ66D0NQuKNZ+uggfQIKuSEz+G9ig66k793cqL9EmL3L3U2Yr7Xh2h9y+hRKio6H2GNIezkalLCxaH63WbJ39a9scyxZiMqjupnqlAXdT988KklUc049yCXchzfB9a+f1Fx7u6fx/1GpBNKRFFvPusj7eTLl58nTfpBMXwEVk79jr94mSSI5MFn/SLhOOEpTHGE= Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 706edb59-e000-4b9e-d6fc-08d700292d35 X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Jul 2019 02:41:54.6777 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: zhiqiang.hou@nxp.com X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB6777 Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org SGkgTG9yZW56bywNCg0KVGhhbmtzIGZvciB5b3VyIGNvbW1lbnRzIQ0KDQo+IC0tLS0tT3JpZ2lu YWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IExvcmVuem8gUGllcmFsaXNpIDxsb3JlbnpvLnBpZXJh bGlzaUBhcm0uY29tPg0KPiBTZW50OiAyMDE5xOo31MIzyNUgMjM6MTANCj4gVG86IFoucS4gSG91 IDx6aGlxaWFuZy5ob3VAbnhwLmNvbT4NCj4gQ2M6IGxpbnV4LXBjaUB2Z2VyLmtlcm5lbC5vcmc7 IGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZzsNCj4gZGV2aWNldHJlZUB2Z2Vy Lmtlcm5lbC5vcmc7IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7DQo+IGJoZWxnYWFzQGdv b2dsZS5jb207IHJvYmgrZHRAa2VybmVsLm9yZzsgbWFyay5ydXRsYW5kQGFybS5jb207DQo+IGwu c3VicmFobWFueWFAbW9iaXZlaWwuY28uaW47IHNoYXduZ3VvQGtlcm5lbC5vcmc7IExlbyBMaQ0K PiA8bGVveWFuZy5saUBueHAuY29tPjsgY2F0YWxpbi5tYXJpbmFzQGFybS5jb207IHdpbGwuZGVh Y29uQGFybS5jb207DQo+IE1pbmdrYWkgSHUgPG1pbmdrYWkuaHVAbnhwLmNvbT47IE0uaC4gTGlh biA8bWluZ2h1YW4ubGlhbkBueHAuY29tPjsNCj4gWGlhb3dlaSBCYW8gPHhpYW93ZWkuYmFvQG54 cC5jb20+DQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0h2NSAwMi8yMF0gUENJOiBtb2JpdmVpbDogRm9y bWF0IHRoZSBjb2RlIHdpdGhvdXQNCj4gZnVuY3Rpb25hbGl0eSBjaGFuZ2UNCj4gDQo+IE9uIEZy aSwgQXByIDEyLCAyMDE5IGF0IDA4OjM1OjI0QU0gKzAwMDAsIFoucS4gSG91IHdyb3RlOg0KPiA+ IEZyb206IEhvdSBaaGlxaWFuZyA8WmhpcWlhbmcuSG91QG54cC5jb20+DQo+ID4NCj4gPiBKdXN0 IGZvcm1hdCB0aGUgY29kZSB3aXRob3V0IGZ1bmN0aW9uYWxpdHkgY2hhbmdlLg0KPiA+DQo+ID4g U2lnbmVkLW9mZi1ieTogSG91IFpoaXFpYW5nIDxaaGlxaWFuZy5Ib3VAbnhwLmNvbT4NCj4gPiBS ZXZpZXdlZC1ieTogTWluZ2h1YW4gTGlhbiA8TWluZ2h1YW4uTGlhbkBueHAuY29tPg0KPiA+IC0t LQ0KPiA+IFY1Og0KPiA+ICAtIFJldG91Y2hlZCB0aGUgc3ViamVjdC4NCj4gPg0KPiA+ICBkcml2 ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtbW9iaXZlaWwuYyB8IDI2MQ0KPiA+ICsrKysrKysrKysr KystLS0tLS0tLS0tLS0NCj4gPiAgMSBmaWxlIGNoYW5nZWQsIDEzNyBpbnNlcnRpb25zKCspLCAx MjQgZGVsZXRpb25zKC0pDQo+IA0KPiBBZ2FpbiwgSSB3aWxsIGRyb3AgdGhpcyBwYXRjaC4gWW91 IHRlbmQgdG8gZG8gbXVsdGlwbGUgY2hhbmdlcyBpbiBvbmUgc2luZ2xlDQo+IHBhdGNoLCBJIHVu ZGVyc3RhbmQgdGhpcyBwYXRjaCBpcyBqdXN0IHJlZm9ybWF0dGluZy9yZW5hbWluZyB2YXJpYWJs ZXMgYnV0IGF0DQo+IGxlYXN0IEkgd291bGQgc2VwYXJhdGUgaW5kZW50YXRpb24gY2hhbmdlcyBm cm9tIGNoYW5nZXMgd2hlcmUgZWcgeW91IGFkZA0KPiBsb2NhbCB2YXJpYWJsZXMuDQo+IA0KPiBB dCBsZWFzdCB0cnkgdG8gZ3JvdXAgdGhlIGNoYW5nZXMgeW91IGFyZSBtYWtpbmcgaW5zdGVhZCBv ZiBtaXhpbmcgdGhlbSBhbGwNCj4gdXAuDQoNClllcywgd2lsbCBzcGlsdCBpdC4NCg0KQi5SLA0K WmhpcWlhbmcNCg0KPiANCj4gVGhhbmtzLA0KPiBMb3JlbnpvDQo+IA0KPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtbW9iaXZlaWwuYw0KPiA+IGIvZHJpdmVycy9w Y2kvY29udHJvbGxlci9wY2llLW1vYml2ZWlsLmMNCj4gPiBpbmRleCBkNTVjN2U3ODBjNmUuLmI4 NzQ3MWYwOGE0MCAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUt bW9iaXZlaWwuYw0KPiA+ICsrKyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1tb2JpdmVp bC5jDQo+ID4gQEAgLTMxLDM4ICszMSw0MCBAQA0KPiA+ICAgKiB0cmFuc2xhdGlvbiB0YWJsZXMg YXJlIGdyb3VwZWQgaW50byB3aW5kb3dzLCBlYWNoIHdpbmRvdyByZWdpc3RlcnMNCj4gYXJlDQo+ ID4gICAqIGdyb3VwZWQgaW50byBibG9ja3Mgb2YgNCBvciAxNiByZWdpc3RlcnMgZWFjaA0KPiA+ ICAgKi8NCj4gPiAtI2RlZmluZSBQQUJfUkVHX0JMT0NLX1NJWkUJMTYNCj4gPiAtI2RlZmluZSBQ QUJfRVhUX1JFR19CTE9DS19TSVpFCTQNCj4gPiArI2RlZmluZSBQQUJfUkVHX0JMT0NLX1NJWkUJ CTE2DQo+ID4gKyNkZWZpbmUgUEFCX0VYVF9SRUdfQkxPQ0tfU0laRQkJNA0KPiA+DQo+ID4gLSNk ZWZpbmUgUEFCX1JFR19BRERSKG9mZnNldCwgd2luKSAob2Zmc2V0ICsgKHdpbiAqDQo+ID4gUEFC X1JFR19CTE9DS19TSVpFKSkgLSNkZWZpbmUgUEFCX0VYVF9SRUdfQUREUihvZmZzZXQsIHdpbikg KG9mZnNldA0KPiArDQo+ID4gKHdpbiAqIFBBQl9FWFRfUkVHX0JMT0NLX1NJWkUpKQ0KPiA+ICsj ZGVmaW5lIFBBQl9SRUdfQUREUihvZmZzZXQsIHdpbikJXA0KPiA+ICsJKG9mZnNldCArICh3aW4g KiBQQUJfUkVHX0JMT0NLX1NJWkUpKQ0KPiA+ICsjZGVmaW5lIFBBQl9FWFRfUkVHX0FERFIob2Zm c2V0LCB3aW4pCVwNCj4gPiArCShvZmZzZXQgKyAod2luICogUEFCX0VYVF9SRUdfQkxPQ0tfU0la RSkpDQo+ID4NCj4gPiAtI2RlZmluZSBMVFNTTV9TVEFUVVMJCTB4MDQwNA0KPiA+IC0jZGVmaW5l ICBMVFNTTV9TVEFUVVNfTDBfTUFTSwkweDNmDQo+ID4gLSNkZWZpbmUgIExUU1NNX1NUQVRVU19M MAkweDJkDQo+ID4gKyNkZWZpbmUgTFRTU01fU1RBVFVTCQkJMHgwNDA0DQo+ID4gKyNkZWZpbmUg IExUU1NNX1NUQVRVU19MMF9NQVNLCQkweDNmDQo+ID4gKyNkZWZpbmUgIExUU1NNX1NUQVRVU19M MAkJMHgyZA0KPiA+DQo+ID4gLSNkZWZpbmUgUEFCX0NUUkwJCTB4MDgwOA0KPiA+IC0jZGVmaW5l ICBBTUJBX1BJT19FTkFCTEVfU0hJRlQJMA0KPiA+IC0jZGVmaW5lICBQRVhfUElPX0VOQUJMRV9T SElGVAkxDQo+ID4gLSNkZWZpbmUgIFBBR0VfU0VMX1NISUZUCTEzDQo+ID4gLSNkZWZpbmUgIFBB R0VfU0VMX01BU0sJCTB4M2YNCj4gPiAtI2RlZmluZSAgUEFHRV9MT19NQVNLCQkweDNmZg0KPiA+ IC0jZGVmaW5lICBQQUdFX1NFTF9PRkZTRVRfU0hJRlQJMTANCj4gPiArI2RlZmluZSBQQUJfQ1RS TAkJCTB4MDgwOA0KPiA+ICsjZGVmaW5lICBBTUJBX1BJT19FTkFCTEVfU0hJRlQJCTANCj4gPiAr I2RlZmluZSAgUEVYX1BJT19FTkFCTEVfU0hJRlQJCTENCj4gPiArI2RlZmluZSAgUEFHRV9TRUxf U0hJRlQJCQkxMw0KPiA+ICsjZGVmaW5lICBQQUdFX1NFTF9NQVNLCQkJMHgzZg0KPiA+ICsjZGVm aW5lICBQQUdFX0xPX01BU0sJCQkweDNmZg0KPiA+ICsjZGVmaW5lICBQQUdFX1NFTF9PRkZTRVRf U0hJRlQJCTEwDQo+ID4NCj4gPiAtI2RlZmluZSBQQUJfQVhJX1BJT19DVFJMCTB4MDg0MA0KPiA+ IC0jZGVmaW5lICBBUElPX0VOX01BU0sJCTB4Zg0KPiA+ICsjZGVmaW5lIFBBQl9BWElfUElPX0NU UkwJCTB4MDg0MA0KPiA+ICsjZGVmaW5lICBBUElPX0VOX01BU0sJCQkweGYNCj4gPg0KPiA+IC0j ZGVmaW5lIFBBQl9QRVhfUElPX0NUUkwJMHgwOGMwDQo+ID4gLSNkZWZpbmUgIFBJT19FTkFCTEVf U0hJRlQJMA0KPiA+ICsjZGVmaW5lIFBBQl9QRVhfUElPX0NUUkwJCTB4MDhjMA0KPiA+ICsjZGVm aW5lICBQSU9fRU5BQkxFX1NISUZUCQkwDQo+ID4NCj4gPiAgI2RlZmluZSBQQUJfSU5UUF9BTUJB X01JU0NfRU5CCQkweDBiMGMNCj4gPiAtI2RlZmluZSBQQUJfSU5UUF9BTUJBX01JU0NfU1RBVAkw eDBiMWMNCj4gPiArI2RlZmluZSBQQUJfSU5UUF9BTUJBX01JU0NfU1RBVAkJMHgwYjFjDQo+ID4g ICNkZWZpbmUgIFBBQl9JTlRQX0lOVFhfTUFTSwkJMHgwMWUwDQo+ID4gICNkZWZpbmUgIFBBQl9J TlRQX01TSV9NQVNLCQkweDgNCj4gPg0KPiA+IC0jZGVmaW5lIFBBQl9BWElfQU1BUF9DVFJMKHdp bikJUEFCX1JFR19BRERSKDB4MGJhMCwgd2luKQ0KPiA+IC0jZGVmaW5lICBXSU5fRU5BQkxFX1NI SUZUCTANCj4gPiAtI2RlZmluZSAgV0lOX1RZUEVfU0hJRlQJMQ0KPiA+ICsjZGVmaW5lIFBBQl9B WElfQU1BUF9DVFJMKHdpbikJCVBBQl9SRUdfQUREUigweDBiYTAsIHdpbikNCj4gPiArI2RlZmlu ZSAgV0lOX0VOQUJMRV9TSElGVAkJMA0KPiA+ICsjZGVmaW5lICBXSU5fVFlQRV9TSElGVAkJCTEN Cj4gPg0KPiA+ICAjZGVmaW5lIFBBQl9FWFRfQVhJX0FNQVBfU0laRSh3aW4pCVBBQl9FWFRfUkVH X0FERFIoMHhiYWYwLA0KPiB3aW4pDQo+ID4NCj4gPiBAQCAtNzAsMTYgKzcyLDE2IEBADQo+ID4g ICNkZWZpbmUgIEFYSV9XSU5ET1dfQUxJR05fTUFTSwkJMw0KPiA+DQo+ID4gICNkZWZpbmUgUEFC X0FYSV9BTUFQX1BFWF9XSU5fTCh3aW4pCVBBQl9SRUdfQUREUigweDBiYTgsDQo+IHdpbikNCj4g PiAtI2RlZmluZSAgUEFCX0JVU19TSElGVAkJMjQNCj4gPiAtI2RlZmluZSAgUEFCX0RFVklDRV9T SElGVAkxOQ0KPiA+IC0jZGVmaW5lICBQQUJfRlVOQ1RJT05fU0hJRlQJMTYNCj4gPiArI2RlZmlu ZSAgUEFCX0JVU19TSElGVAkJCTI0DQo+ID4gKyNkZWZpbmUgIFBBQl9ERVZJQ0VfU0hJRlQJCTE5 DQo+ID4gKyNkZWZpbmUgIFBBQl9GVU5DVElPTl9TSElGVAkJMTYNCj4gPg0KPiA+ICAjZGVmaW5l IFBBQl9BWElfQU1BUF9QRVhfV0lOX0god2luKQlQQUJfUkVHX0FERFIoMHgwYmFjLA0KPiB3aW4p DQo+ID4gICNkZWZpbmUgUEFCX0lOVFBfQVhJX1BJT19DTEFTUwkJMHg0NzQNCj4gPg0KPiA+IC0j ZGVmaW5lIFBBQl9QRVhfQU1BUF9DVFJMKHdpbikJUEFCX1JFR19BRERSKDB4NGJhMCwgd2luKQ0K PiA+IC0jZGVmaW5lICBBTUFQX0NUUkxfRU5fU0hJRlQJMA0KPiA+IC0jZGVmaW5lICBBTUFQX0NU UkxfVFlQRV9TSElGVAkxDQo+ID4gKyNkZWZpbmUgUEFCX1BFWF9BTUFQX0NUUkwod2luKQkJUEFC X1JFR19BRERSKDB4NGJhMCwNCj4gd2luKQ0KPiA+ICsjZGVmaW5lICBBTUFQX0NUUkxfRU5fU0hJ RlQJCTANCj4gPiArI2RlZmluZSAgQU1BUF9DVFJMX1RZUEVfU0hJRlQJCTENCj4gPg0KPiA+ICAj ZGVmaW5lIFBBQl9FWFRfUEVYX0FNQVBfU0laRU4od2luKQlQQUJfRVhUX1JFR19BRERSKDB4YmVm MCwNCj4gd2luKQ0KPiA+ICAjZGVmaW5lIFBBQl9QRVhfQU1BUF9BWElfV0lOKHdpbikJUEFCX1JF R19BRERSKDB4NGJhNCwNCj4gd2luKQ0KPiA+IEBAIC04NywzOSArODksMzkgQEANCj4gPiAgI2Rl ZmluZSBQQUJfUEVYX0FNQVBfUEVYX1dJTl9IKHdpbikJUEFCX1JFR19BRERSKDB4NGJhYywNCj4g d2luKQ0KPiA+DQo+ID4gIC8qIHN0YXJ0aW5nIG9mZnNldCBvZiBJTlRYIGJpdHMgaW4gc3RhdHVz IHJlZ2lzdGVyICovDQo+ID4gLSNkZWZpbmUgUEFCX0lOVFhfU1RBUlQJNQ0KPiA+ICsjZGVmaW5l IFBBQl9JTlRYX1NUQVJUCQkJNQ0KPiA+DQo+ID4gIC8qIHN1cHBvcnRlZCBudW1iZXIgb2YgTVNJ IGludGVycnVwdHMgKi8NCj4gPiAtI2RlZmluZSBQQ0lfTlVNX01TSQkxNg0KPiA+ICsjZGVmaW5l IFBDSV9OVU1fTVNJCQkJMTYNCj4gPg0KPiA+ICAvKiBNU0kgcmVnaXN0ZXJzICovDQo+ID4gLSNk ZWZpbmUgTVNJX0JBU0VfTE9fT0ZGU0VUCTB4MDQNCj4gPiAtI2RlZmluZSBNU0lfQkFTRV9ISV9P RkZTRVQJMHgwOA0KPiA+IC0jZGVmaW5lIE1TSV9TSVpFX09GRlNFVAkweDBjDQo+ID4gLSNkZWZp bmUgTVNJX0VOQUJMRV9PRkZTRVQJMHgxNA0KPiA+IC0jZGVmaW5lIE1TSV9TVEFUVVNfT0ZGU0VU CTB4MTgNCj4gPiAtI2RlZmluZSBNU0lfREFUQV9PRkZTRVQJMHgyMA0KPiA+IC0jZGVmaW5lIE1T SV9BRERSX0xfT0ZGU0VUCTB4MjQNCj4gPiAtI2RlZmluZSBNU0lfQUREUl9IX09GRlNFVAkweDI4 DQo+ID4gKyNkZWZpbmUgTVNJX0JBU0VfTE9fT0ZGU0VUCQkweDA0DQo+ID4gKyNkZWZpbmUgTVNJ X0JBU0VfSElfT0ZGU0VUCQkweDA4DQo+ID4gKyNkZWZpbmUgTVNJX1NJWkVfT0ZGU0VUCQkJMHgw Yw0KPiA+ICsjZGVmaW5lIE1TSV9FTkFCTEVfT0ZGU0VUCQkweDE0DQo+ID4gKyNkZWZpbmUgTVNJ X1NUQVRVU19PRkZTRVQJCTB4MTgNCj4gPiArI2RlZmluZSBNU0lfREFUQV9PRkZTRVQJCQkweDIw DQo+ID4gKyNkZWZpbmUgTVNJX0FERFJfTF9PRkZTRVQJCTB4MjQNCj4gPiArI2RlZmluZSBNU0lf QUREUl9IX09GRlNFVAkJMHgyOA0KPiA+DQo+ID4gIC8qIG91dGJvdW5kIGFuZCBpbmJvdW5kIHdp bmRvdyBkZWZpbml0aW9ucyAqLw0KPiA+IC0jZGVmaW5lIFdJTl9OVU1fMAkJMA0KPiA+IC0jZGVm aW5lIFdJTl9OVU1fMQkJMQ0KPiA+IC0jZGVmaW5lIENGR19XSU5ET1dfVFlQRQkwDQo+ID4gLSNk ZWZpbmUgSU9fV0lORE9XX1RZUEUJCTENCj4gPiAtI2RlZmluZSBNRU1fV0lORE9XX1RZUEUJMg0K PiA+IC0jZGVmaW5lIElCX1dJTl9TSVpFCQkoKHU2NCkyNTYgKiAxMDI0ICogMTAyNCAqIDEwMjQp DQo+ID4gLSNkZWZpbmUgTUFYX1BJT19XSU5ET1dTCTgNCj4gPiArI2RlZmluZSBXSU5fTlVNXzAJ CQkwDQo+ID4gKyNkZWZpbmUgV0lOX05VTV8xCQkJMQ0KPiA+ICsjZGVmaW5lIENGR19XSU5ET1df VFlQRQkJCTANCj4gPiArI2RlZmluZSBJT19XSU5ET1dfVFlQRQkJCTENCj4gPiArI2RlZmluZSBN RU1fV0lORE9XX1RZUEUJCQkyDQo+ID4gKyNkZWZpbmUgSUJfV0lOX1NJWkUJCQkoKHU2NCkyNTYg KiAxMDI0ICogMTAyNCAqIDEwMjQpDQo+ID4gKyNkZWZpbmUgTUFYX1BJT19XSU5ET1dTCQkJOA0K PiA+DQo+ID4gIC8qIFBhcmFtZXRlcnMgZm9yIHRoZSB3YWl0aW5nIGZvciBsaW5rIHVwIHJvdXRp bmUgKi8NCj4gPiAtI2RlZmluZSBMSU5LX1dBSVRfTUFYX1JFVFJJRVMJMTANCj4gPiAtI2RlZmlu ZSBMSU5LX1dBSVRfTUlOCTkwMDAwDQo+ID4gLSNkZWZpbmUgTElOS19XQUlUX01BWAkxMDAwMDAN Cj4gPiArI2RlZmluZSBMSU5LX1dBSVRfTUFYX1JFVFJJRVMJCTEwDQo+ID4gKyNkZWZpbmUgTElO S19XQUlUX01JTgkJCTkwMDAwDQo+ID4gKyNkZWZpbmUgTElOS19XQUlUX01BWAkJCTEwMDAwMA0K PiA+DQo+ID4gLSNkZWZpbmUgUEFHRURfQUREUl9CTkRSWQkJCTB4YzAwDQo+ID4gLSNkZWZpbmUg T0ZGU0VUX1RPX1BBR0VfQUREUihvZmYpCQlcDQo+ID4gKyNkZWZpbmUgUEFHRURfQUREUl9CTkRS WQkJMHhjMDANCj4gPiArI2RlZmluZSBPRkZTRVRfVE9fUEFHRV9BRERSKG9mZikJXA0KPiA+ICAJ KChvZmYgJiBQQUdFX0xPX01BU0spIHwgUEFHRURfQUREUl9CTkRSWSkNCj4gPiAtI2RlZmluZSBP RkZTRVRfVE9fUEFHRV9JRFgob2ZmKQkJCVwNCj4gPiArI2RlZmluZSBPRkZTRVRfVE9fUEFHRV9J RFgob2ZmKQkJXA0KPiA+ICAJKChvZmYgPj4gUEFHRV9TRUxfT0ZGU0VUX1NISUZUKSAmIFBBR0Vf U0VMX01BU0spDQo+ID4NCj4gPiAgc3RydWN0IG1vYml2ZWlsX21zaSB7CQkJLyogTVNJIGluZm9y bWF0aW9uICovDQo+ID4gQEAgLTI5NywxNCArMjk5LDE0IEBAIHN0YXRpYyB2b2lkIF9faW9tZW0N Cj4gKm1vYml2ZWlsX3BjaWVfbWFwX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLA0KPiA+ICAJCQkJ CXVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlKQ0KPiA+ICB7DQo+ID4gIAlzdHJ1Y3QgbW9i aXZlaWxfcGNpZSAqcGNpZSA9IGJ1cy0+c3lzZGF0YTsNCj4gPiArCXUzMiB2YWx1ZTsNCj4gPg0K PiA+ICAJaWYgKCFtb2JpdmVpbF9wY2llX3ZhbGlkX2RldmljZShidXMsIGRldmZuKSkNCj4gPiAg CQlyZXR1cm4gTlVMTDsNCj4gPg0KPiA+IC0JaWYgKGJ1cy0+bnVtYmVyID09IHBjaWUtPnJvb3Rf YnVzX25yKSB7DQo+ID4gLQkJLyogUkMgY29uZmlnIGFjY2VzcyAqLw0KPiA+ICsJLyogUkMgY29u ZmlnIGFjY2VzcyAqLw0KPiA+ICsJaWYgKGJ1cy0+bnVtYmVyID09IHBjaWUtPnJvb3RfYnVzX25y KQ0KPiA+ICAJCXJldHVybiBwY2llLT5jc3JfYXhpX3NsYXZlX2Jhc2UgKyB3aGVyZTsNCj4gPiAt CX0NCj4gPg0KPiA+ICAJLyoNCj4gPiAgCSAqIEVQIGNvbmZpZyBhY2Nlc3MgKGluIENvbmZpZy9B UElPIHNwYWNlKSBAQCAtMzEyLDEwICszMTQsMTIgQEANCj4gPiBzdGF0aWMgdm9pZCBfX2lvbWVt ICptb2JpdmVpbF9wY2llX21hcF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cywNCj4gPiAgCSAqIChC REYpIGluIFBBQl9BWElfQU1BUF9QRVhfV0lOX0wwIFJlZ2lzdGVyLg0KPiA+ICAJICogUmVsaWVz IG9uIHBjaV9sb2NrIHNlcmlhbGl6YXRpb24NCj4gPiAgCSAqLw0KPiA+IC0JY3NyX3dyaXRlbChw Y2llLCBidXMtPm51bWJlciA8PCBQQUJfQlVTX1NISUZUIHwNCj4gPiAtCQkJUENJX1NMT1QoZGV2 Zm4pIDw8IFBBQl9ERVZJQ0VfU0hJRlQgfA0KPiA+IC0JCQlQQ0lfRlVOQyhkZXZmbikgPDwgUEFC X0ZVTkNUSU9OX1NISUZULA0KPiA+IC0JCQlQQUJfQVhJX0FNQVBfUEVYX1dJTl9MKFdJTl9OVU1f MCkpOw0KPiA+ICsJdmFsdWUgPSBidXMtPm51bWJlciA8PCBQQUJfQlVTX1NISUZUIHwNCj4gPiAr CQlQQ0lfU0xPVChkZXZmbikgPDwgUEFCX0RFVklDRV9TSElGVCB8DQo+ID4gKwkJUENJX0ZVTkMo ZGV2Zm4pIDw8IFBBQl9GVU5DVElPTl9TSElGVDsNCj4gPiArDQo+ID4gKwljc3Jfd3JpdGVsKHBj aWUsIHZhbHVlLCBQQUJfQVhJX0FNQVBfUEVYX1dJTl9MKFdJTl9OVU1fMCkpOw0KPiA+ICsNCj4g PiAgCXJldHVybiBwY2llLT5jb25maWdfYXhpX3NsYXZlX2Jhc2UgKyB3aGVyZTsgIH0NCj4gPg0K PiA+IEBAIC0zNTAsMjIgKzM1NCwyMiBAQCBzdGF0aWMgdm9pZCBtb2JpdmVpbF9wY2llX2lzcihz dHJ1Y3QgaXJxX2Rlc2MNCj4gPiAqZGVzYykNCj4gPg0KPiA+ICAJLyogSGFuZGxlIElOVHggKi8N Cj4gPiAgCWlmIChpbnRyX3N0YXR1cyAmIFBBQl9JTlRQX0lOVFhfTUFTSykgew0KPiA+IC0JCXNo aWZ0ZWRfc3RhdHVzID0gY3NyX3JlYWRsKHBjaWUsIFBBQl9JTlRQX0FNQkFfTUlTQ19TVEFUKSA+ Pg0KPiA+IC0JCQlQQUJfSU5UWF9TVEFSVDsNCj4gPiArCQlzaGlmdGVkX3N0YXR1cyA9IGNzcl9y ZWFkbChwY2llLCBQQUJfSU5UUF9BTUJBX01JU0NfU1RBVCk7DQo+ID4gKwkJc2hpZnRlZF9zdGF0 dXMgPj49IFBBQl9JTlRYX1NUQVJUOw0KPiA+ICAJCWRvIHsNCj4gPiAgCQkJZm9yX2VhY2hfc2V0 X2JpdChiaXQsICZzaGlmdGVkX3N0YXR1cywgUENJX05VTV9JTlRYKSB7DQo+ID4gIAkJCQl2aXJx ID0gaXJxX2ZpbmRfbWFwcGluZyhwY2llLT5pbnR4X2RvbWFpbiwNCj4gPiAtCQkJCQkJYml0ICsg MSk7DQo+ID4gKwkJCQkJCQliaXQgKyAxKTsNCj4gPiAgCQkJCWlmICh2aXJxKQ0KPiA+ICAJCQkJ CWdlbmVyaWNfaGFuZGxlX2lycSh2aXJxKTsNCj4gPiAgCQkJCWVsc2UNCj4gPiAtCQkJCQlkZXZf ZXJyX3JhdGVsaW1pdGVkKGRldiwNCj4gPiAtCQkJCQkJInVuZXhwZWN0ZWQgSVJRLCBJTlQlZFxu IiwgYml0KTsNCj4gPiArCQkJCQlkZXZfZXJyX3JhdGVsaW1pdGVkKGRldiwgInVuZXhwZWN0ZWQg SVJRLA0KPiBJTlQlZFxuIiwNCj4gPiArCQkJCQkJCSAgICBiaXQpOw0KPiA+DQo+ID4gIAkJCQkv KiBjbGVhciBpbnRlcnJ1cHQgKi8NCj4gPiAgCQkJCWNzcl93cml0ZWwocGNpZSwNCj4gPiAtCQkJ CQlzaGlmdGVkX3N0YXR1cyA8PCBQQUJfSU5UWF9TVEFSVCwNCj4gPiAtCQkJCQlQQUJfSU5UUF9B TUJBX01JU0NfU1RBVCk7DQo+ID4gKwkJCQkJICAgc2hpZnRlZF9zdGF0dXMgPDwgUEFCX0lOVFhf U1RBUlQsDQo+ID4gKwkJCQkJICAgUEFCX0lOVFBfQU1CQV9NSVNDX1NUQVQpOw0KPiA+ICAJCQl9 DQo+ID4gIAkJfSB3aGlsZSAoKHNoaWZ0ZWRfc3RhdHVzID4+IFBBQl9JTlRYX1NUQVJUKSAhPSAw KTsNCj4gPiAgCX0NCj4gPiBAQCAtMzc1LDggKzM3OSw3IEBAIHN0YXRpYyB2b2lkIG1vYml2ZWls X3BjaWVfaXNyKHN0cnVjdCBpcnFfZGVzYw0KPiA+ICpkZXNjKQ0KPiA+DQo+ID4gIAkvKiBoYW5k bGUgTVNJIGludGVycnVwdHMgKi8NCj4gPiAgCXdoaWxlIChtc2lfc3RhdHVzICYgMSkgew0KPiA+ IC0JCW1zaV9kYXRhID0gcmVhZGxfcmVsYXhlZChwY2llLT5hcGJfY3NyX2Jhc2UNCj4gPiAtCQkJ CSsgTVNJX0RBVEFfT0ZGU0VUKTsNCj4gPiArCQltc2lfZGF0YSA9IHJlYWRsX3JlbGF4ZWQocGNp ZS0+YXBiX2Nzcl9iYXNlICsNCj4gTVNJX0RBVEFfT0ZGU0VUKTsNCj4gPg0KPiA+ICAJCS8qDQo+ ID4gIAkJICogTVNJX1NUQVRVU19PRkZTRVQgcmVnaXN0ZXIgZ2V0cyB1cGRhdGVkIHRvIHplcm8g QEAgLTM4NSwxOA0KPiA+ICszODgsMTggQEAgc3RhdGljIHZvaWQgbW9iaXZlaWxfcGNpZV9pc3Io c3RydWN0IGlycV9kZXNjICpkZXNjKQ0KPiA+ICAJCSAqIHR3byBkdW1teSByZWFkcy4NCj4gPiAg CQkgKi8NCj4gPiAgCQltc2lfYWRkcl9sbyA9IHJlYWRsX3JlbGF4ZWQocGNpZS0+YXBiX2Nzcl9i YXNlICsNCj4gPiAtCQkJCU1TSV9BRERSX0xfT0ZGU0VUKTsNCj4gPiArCQkJCQkgICAgTVNJX0FE RFJfTF9PRkZTRVQpOw0KPiA+ICAJCW1zaV9hZGRyX2hpID0gcmVhZGxfcmVsYXhlZChwY2llLT5h cGJfY3NyX2Jhc2UgKw0KPiA+IC0JCQkJTVNJX0FERFJfSF9PRkZTRVQpOw0KPiA+ICsJCQkJCSAg ICBNU0lfQUREUl9IX09GRlNFVCk7DQo+ID4gIAkJZGV2X2RiZyhkZXYsICJNU0kgcmVnaXN0ZXJz LCBkYXRhOiAlMDh4LCBhZGRyOiAlMDh4OiUwOHhcbiIsDQo+ID4gLQkJCQltc2lfZGF0YSwgbXNp X2FkZHJfaGksIG1zaV9hZGRyX2xvKTsNCj4gPiArCQkJbXNpX2RhdGEsIG1zaV9hZGRyX2hpLCBt c2lfYWRkcl9sbyk7DQo+ID4NCj4gPiAgCQl2aXJxID0gaXJxX2ZpbmRfbWFwcGluZyhtc2ktPmRl dl9kb21haW4sIG1zaV9kYXRhKTsNCj4gPiAgCQlpZiAodmlycSkNCj4gPiAgCQkJZ2VuZXJpY19o YW5kbGVfaXJxKHZpcnEpOw0KPiA+DQo+ID4gIAkJbXNpX3N0YXR1cyA9IHJlYWRsX3JlbGF4ZWQo cGNpZS0+YXBiX2Nzcl9iYXNlICsNCj4gPiAtCQkJCU1TSV9TVEFUVVNfT0ZGU0VUKTsNCj4gPiAr CQkJCQkgICBNU0lfU1RBVFVTX09GRlNFVCk7DQo+ID4gIAl9DQo+ID4NCj4gPiAgCS8qIENsZWFy IHRoZSBpbnRlcnJ1cHQgc3RhdHVzICovDQo+ID4gQEAgLTQxMyw3ICs0MTYsNyBAQCBzdGF0aWMg aW50IG1vYml2ZWlsX3BjaWVfcGFyc2VfZHQoc3RydWN0DQo+ID4gbW9iaXZlaWxfcGNpZSAqcGNp ZSkNCj4gPg0KPiA+ICAJLyogbWFwIGNvbmZpZyByZXNvdXJjZSAqLw0KPiA+ICAJcmVzID0gcGxh dGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwNCj4gPiAtCQkJ ImNvbmZpZ19heGlfc2xhdmUiKTsNCj4gPiArCQkJCQkgICAiY29uZmlnX2F4aV9zbGF2ZSIpOw0K PiA+ICAJcGNpZS0+Y29uZmlnX2F4aV9zbGF2ZV9iYXNlID0gZGV2bV9wY2lfcmVtYXBfY2ZnX3Jl c291cmNlKGRldiwNCj4gcmVzKTsNCj4gPiAgCWlmIChJU19FUlIocGNpZS0+Y29uZmlnX2F4aV9z bGF2ZV9iYXNlKSkNCj4gPiAgCQlyZXR1cm4gUFRSX0VSUihwY2llLT5jb25maWdfYXhpX3NsYXZl X2Jhc2UpOw0KPiA+IEBAIC00MjEsNyArNDI0LDcgQEAgc3RhdGljIGludCBtb2JpdmVpbF9wY2ll X3BhcnNlX2R0KHN0cnVjdA0KPiA+IG1vYml2ZWlsX3BjaWUgKnBjaWUpDQo+ID4NCj4gPiAgCS8q IG1hcCBjc3IgcmVzb3VyY2UgKi8NCj4gPiAgCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9i eW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sDQo+ID4gLQkJCSJjc3JfYXhpX3NsYXZlIik7DQo+ ID4gKwkJCQkJICAgImNzcl9heGlfc2xhdmUiKTsNCj4gPiAgCXBjaWUtPmNzcl9heGlfc2xhdmVf YmFzZSA9IGRldm1fcGNpX3JlbWFwX2NmZ19yZXNvdXJjZShkZXYsIHJlcyk7DQo+ID4gIAlpZiAo SVNfRVJSKHBjaWUtPmNzcl9heGlfc2xhdmVfYmFzZSkpDQo+ID4gIAkJcmV0dXJuIFBUUl9FUlIo cGNpZS0+Y3NyX2F4aV9zbGF2ZV9iYXNlKTsNCj4gPiBAQCAtNDUyLDcgKzQ1NSw3IEBAIHN0YXRp YyBpbnQgbW9iaXZlaWxfcGNpZV9wYXJzZV9kdChzdHJ1Y3QNCj4gPiBtb2JpdmVpbF9wY2llICpw Y2llKSAgfQ0KPiA+DQo+ID4gIHN0YXRpYyB2b2lkIHByb2dyYW1faWJfd2luZG93cyhzdHJ1Y3Qg bW9iaXZlaWxfcGNpZSAqcGNpZSwgaW50DQo+IHdpbl9udW0sDQo+ID4gLQkJaW50IHBjaV9hZGRy LCB1MzIgdHlwZSwgdTY0IHNpemUpDQo+ID4gKwkJCSAgICAgICBpbnQgcGNpX2FkZHIsIHUzMiB0 eXBlLCB1NjQgc2l6ZSkNCj4gPiAgew0KPiA+ICAJaW50IHBpb19jdHJsX3ZhbDsNCj4gPiAgCWlu dCBhbWFwX2N0cmxfZHc7DQo+ID4gQEAgLTQ2NSwxOSArNDY4LDIwIEBAIHN0YXRpYyB2b2lkIHBy b2dyYW1faWJfd2luZG93cyhzdHJ1Y3QNCj4gbW9iaXZlaWxfcGNpZSAqcGNpZSwgaW50IHdpbl9u dW0sDQo+ID4gIAl9DQo+ID4NCj4gPiAgCXBpb19jdHJsX3ZhbCA9IGNzcl9yZWFkbChwY2llLCBQ QUJfUEVYX1BJT19DVFJMKTsNCj4gPiAtCWNzcl93cml0ZWwocGNpZSwNCj4gPiAtCQlwaW9fY3Ry bF92YWwgfCAoMSA8PCBQSU9fRU5BQkxFX1NISUZUKSwgUEFCX1BFWF9QSU9fQ1RSTCk7DQo+ID4g LQlhbWFwX2N0cmxfZHcgPSBjc3JfcmVhZGwocGNpZSwgUEFCX1BFWF9BTUFQX0NUUkwod2luX251 bSkpOw0KPiA+IC0JYW1hcF9jdHJsX2R3ID0gKGFtYXBfY3RybF9kdyB8ICh0eXBlIDw8IEFNQVBf Q1RSTF9UWVBFX1NISUZUKSk7DQo+ID4gLQlhbWFwX2N0cmxfZHcgPSAoYW1hcF9jdHJsX2R3IHwg KDEgPDwgQU1BUF9DVFJMX0VOX1NISUZUKSk7DQo+ID4gKwlwaW9fY3RybF92YWwgfD0gMSA8PCBQ SU9fRU5BQkxFX1NISUZUOw0KPiA+ICsJY3NyX3dyaXRlbChwY2llLCBwaW9fY3RybF92YWwsIFBB Ql9QRVhfUElPX0NUUkwpOw0KPiA+DQo+ID4gLQljc3Jfd3JpdGVsKHBjaWUsIGFtYXBfY3RybF9k dyB8IGxvd2VyXzMyX2JpdHMoc2l6ZTY0KSwNCj4gPiAtCQkgICBQQUJfUEVYX0FNQVBfQ1RSTCh3 aW5fbnVtKSk7DQo+ID4gKwlhbWFwX2N0cmxfZHcgPSBjc3JfcmVhZGwocGNpZSwgUEFCX1BFWF9B TUFQX0NUUkwod2luX251bSkpOw0KPiA+ICsJYW1hcF9jdHJsX2R3IHw9ICh0eXBlIDw8IEFNQVBf Q1RSTF9UWVBFX1NISUZUKSB8DQo+ID4gKwkJCSgxIDw8IEFNQVBfQ1RSTF9FTl9TSElGVCkgfA0K PiA+ICsJCQlsb3dlcl8zMl9iaXRzKHNpemU2NCk7DQo+ID4gKwljc3Jfd3JpdGVsKHBjaWUsIGFt YXBfY3RybF9kdywgUEFCX1BFWF9BTUFQX0NUUkwod2luX251bSkpOw0KPiA+DQo+ID4gIAljc3Jf d3JpdGVsKHBjaWUsIHVwcGVyXzMyX2JpdHMoc2l6ZTY0KSwNCj4gPiAgCQkgICBQQUJfRVhUX1BF WF9BTUFQX1NJWkVOKHdpbl9udW0pKTsNCj4gPg0KPiA+ICAJY3NyX3dyaXRlbChwY2llLCBwY2lf YWRkciwgUEFCX1BFWF9BTUFQX0FYSV9XSU4od2luX251bSkpOw0KPiA+ICsNCj4gPiAgCWNzcl93 cml0ZWwocGNpZSwgcGNpX2FkZHIsIFBBQl9QRVhfQU1BUF9QRVhfV0lOX0wod2luX251bSkpOw0K PiA+ICAJY3NyX3dyaXRlbChwY2llLCAwLCBQQUJfUEVYX0FNQVBfUEVYX1dJTl9IKHdpbl9udW0p KTsgIH0gQEANCj4gLTQ4Niw3DQo+ID4gKzQ5MCw4IEBAIHN0YXRpYyB2b2lkIHByb2dyYW1faWJf d2luZG93cyhzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwNCj4gaW50IHdpbl9udW0sDQo+ID4g ICAqIHJvdXRpbmUgdG8gcHJvZ3JhbSB0aGUgb3V0Ym91bmQgd2luZG93cw0KPiA+ICAgKi8NCj4g PiAgc3RhdGljIHZvaWQgcHJvZ3JhbV9vYl93aW5kb3dzKHN0cnVjdCBtb2JpdmVpbF9wY2llICpw Y2llLCBpbnQNCj4gd2luX251bSwNCj4gPiAtCQl1NjQgY3B1X2FkZHIsIHU2NCBwY2lfYWRkciwg dTMyIGNvbmZpZ19pb19iaXQsIHU2NCBzaXplKQ0KPiA+ICsJCQkgICAgICAgdTY0IGNwdV9hZGRy LCB1NjQgcGNpX2FkZHIsDQo+ID4gKwkJCSAgICAgICB1MzIgY29uZmlnX2lvX2JpdCwgdTY0IHNp emUpDQo+ID4gIHsNCj4gPg0KPiA+ICAJdTMyIHZhbHVlLCB0eXBlOw0KPiA+IEBAIC01MDUsNyAr NTEwLDcgQEAgc3RhdGljIHZvaWQgcHJvZ3JhbV9vYl93aW5kb3dzKHN0cnVjdA0KPiBtb2JpdmVp bF9wY2llICpwY2llLCBpbnQgd2luX251bSwNCj4gPiAgCXR5cGUgPSBjb25maWdfaW9fYml0Ow0K PiA+ICAJdmFsdWUgPSBjc3JfcmVhZGwocGNpZSwgUEFCX0FYSV9BTUFQX0NUUkwod2luX251bSkp Ow0KPiA+ICAJY3NyX3dyaXRlbChwY2llLCAxIDw8IFdJTl9FTkFCTEVfU0hJRlQgfCB0eXBlIDw8 IFdJTl9UWVBFX1NISUZUIHwNCj4gPiAtCQkJbG93ZXJfMzJfYml0cyhzaXplNjQpLCBQQUJfQVhJ X0FNQVBfQ1RSTCh3aW5fbnVtKSk7DQo+ID4gKwkJICAgbG93ZXJfMzJfYml0cyhzaXplNjQpLCBQ QUJfQVhJX0FNQVBfQ1RSTCh3aW5fbnVtKSk7DQo+ID4NCj4gPiAgCWNzcl93cml0ZWwocGNpZSwg dXBwZXJfMzJfYml0cyhzaXplNjQpLA0KPiA+IFBBQl9FWFRfQVhJX0FNQVBfU0laRSh3aW5fbnVt KSk7DQo+ID4NCj4gPiBAQCAtNTE1LDE0ICs1MjAsMTQgQEAgc3RhdGljIHZvaWQgcHJvZ3JhbV9v Yl93aW5kb3dzKHN0cnVjdA0KPiBtb2JpdmVpbF9wY2llICpwY2llLCBpbnQgd2luX251bSwNCj4g PiAgCSAqLw0KPiA+ICAJdmFsdWUgPSBjc3JfcmVhZGwocGNpZSwgUEFCX0FYSV9BTUFQX0FYSV9X SU4od2luX251bSkpOw0KPiA+ICAJY3NyX3dyaXRlbChwY2llLCBjcHVfYWRkciAmICh+QVhJX1dJ TkRPV19BTElHTl9NQVNLKSwNCj4gPiAtCQkJUEFCX0FYSV9BTUFQX0FYSV9XSU4od2luX251bSkp Ow0KPiA+ICsJCSAgIFBBQl9BWElfQU1BUF9BWElfV0lOKHdpbl9udW0pKTsNCj4gPg0KPiA+ICAJ dmFsdWUgPSBjc3JfcmVhZGwocGNpZSwgUEFCX0FYSV9BTUFQX1BFWF9XSU5fSCh3aW5fbnVtKSk7 DQo+ID4NCj4gPiAgCWNzcl93cml0ZWwocGNpZSwgbG93ZXJfMzJfYml0cyhwY2lfYWRkciksDQo+ ID4gLQkJCVBBQl9BWElfQU1BUF9QRVhfV0lOX0wod2luX251bSkpOw0KPiA+ICsJCSAgIFBBQl9B WElfQU1BUF9QRVhfV0lOX0wod2luX251bSkpOw0KPiA+ICAJY3NyX3dyaXRlbChwY2llLCB1cHBl cl8zMl9iaXRzKHBjaV9hZGRyKSwNCj4gPiAtCQkJUEFCX0FYSV9BTUFQX1BFWF9XSU5fSCh3aW5f bnVtKSk7DQo+ID4gKwkJICAgUEFCX0FYSV9BTUFQX1BFWF9XSU5fSCh3aW5fbnVtKSk7DQo+ID4N Cj4gPiAgCXBjaWUtPm9iX3dpbnNfY29uZmlndXJlZCsrOw0KPiA+ICB9DQo+ID4gQEAgLTUzOCw3 ICs1NDMsOSBAQCBzdGF0aWMgaW50IG1vYml2ZWlsX2JyaW5ndXBfbGluayhzdHJ1Y3QNCj4gPiBt b2JpdmVpbF9wY2llICpwY2llKQ0KPiA+DQo+ID4gIAkJdXNsZWVwX3JhbmdlKExJTktfV0FJVF9N SU4sIExJTktfV0FJVF9NQVgpOw0KPiA+ICAJfQ0KPiA+ICsNCj4gPiAgCWRldl9lcnIoJnBjaWUt PnBkZXYtPmRldiwgImxpbmsgbmV2ZXIgY2FtZSB1cFxuIik7DQo+ID4gKw0KPiA+ICAJcmV0dXJu IC1FVElNRURPVVQ7DQo+ID4gIH0NCj4gPg0KPiA+IEBAIC01NTEsMTYgKzU1OCwxNiBAQCBzdGF0 aWMgdm9pZCBtb2JpdmVpbF9wY2llX2VuYWJsZV9tc2koc3RydWN0DQo+IG1vYml2ZWlsX3BjaWUg KnBjaWUpDQo+ID4gIAltc2ktPm1zaV9wYWdlc19waHlzID0gKHBoeXNfYWRkcl90KW1zZ19hZGRy Ow0KPiA+DQo+ID4gIAl3cml0ZWxfcmVsYXhlZChsb3dlcl8zMl9iaXRzKG1zZ19hZGRyKSwNCj4g PiAtCQlwY2llLT5hcGJfY3NyX2Jhc2UgKyBNU0lfQkFTRV9MT19PRkZTRVQpOw0KPiA+ICsJCSAg ICAgICBwY2llLT5hcGJfY3NyX2Jhc2UgKyBNU0lfQkFTRV9MT19PRkZTRVQpOw0KPiA+ICAJd3Jp dGVsX3JlbGF4ZWQodXBwZXJfMzJfYml0cyhtc2dfYWRkciksDQo+ID4gLQkJcGNpZS0+YXBiX2Nz cl9iYXNlICsgTVNJX0JBU0VfSElfT0ZGU0VUKTsNCj4gPiArCQkgICAgICAgcGNpZS0+YXBiX2Nz cl9iYXNlICsgTVNJX0JBU0VfSElfT0ZGU0VUKTsNCj4gPiAgCXdyaXRlbF9yZWxheGVkKDQwOTYs IHBjaWUtPmFwYl9jc3JfYmFzZSArIE1TSV9TSVpFX09GRlNFVCk7DQo+ID4gIAl3cml0ZWxfcmVs YXhlZCgxLCBwY2llLT5hcGJfY3NyX2Jhc2UgKyBNU0lfRU5BQkxFX09GRlNFVCk7ICB9DQo+ID4N Cj4gPiAgc3RhdGljIGludCBtb2JpdmVpbF9ob3N0X2luaXQoc3RydWN0IG1vYml2ZWlsX3BjaWUg KnBjaWUpICB7DQo+ID4gLQl1MzIgdmFsdWUsIHBhYl9jdHJsLCB0eXBlID0gMDsNCj4gPiArCXUz MiB2YWx1ZSwgcGFiX2N0cmwsIHR5cGU7DQo+ID4gIAlpbnQgZXJyOw0KPiA+ICAJc3RydWN0IHJl c291cmNlX2VudHJ5ICp3aW4sICp0bXA7DQo+ID4NCj4gPiBAQCAtNTc1LDI2ICs1ODIsMjcgQEAg c3RhdGljIGludCBtb2JpdmVpbF9ob3N0X2luaXQoc3RydWN0DQo+IG1vYml2ZWlsX3BjaWUgKnBj aWUpDQo+ID4gIAkgKiBTcGFjZQ0KPiA+ICAJICovDQo+ID4gIAl2YWx1ZSA9IGNzcl9yZWFkbChw Y2llLCBQQ0lfQ09NTUFORCk7DQo+ID4gLQljc3Jfd3JpdGVsKHBjaWUsIHZhbHVlIHwgUENJX0NP TU1BTkRfSU8gfA0KPiBQQ0lfQ09NTUFORF9NRU1PUlkgfA0KPiA+IC0JCVBDSV9DT01NQU5EX01B U1RFUiwgUENJX0NPTU1BTkQpOw0KPiA+ICsJdmFsdWUgfD0gUENJX0NPTU1BTkRfSU8gfCBQQ0lf Q09NTUFORF9NRU1PUlkgfA0KPiBQQ0lfQ09NTUFORF9NQVNURVI7DQo+ID4gKwljc3Jfd3JpdGVs KHBjaWUsIHZhbHVlLCBQQ0lfQ09NTUFORCk7DQo+ID4NCj4gPiAgCS8qDQo+ID4gIAkgKiBwcm9n cmFtIFBJTyBFbmFibGUgQml0IHRvIDEgKGFuZCBQRVggUElPIEVuYWJsZSB0byAxKSBpbiBQQUJf Q1RSTA0KPiA+ICAJICogcmVnaXN0ZXINCj4gPiAgCSAqLw0KPiA+ICAJcGFiX2N0cmwgPSBjc3Jf cmVhZGwocGNpZSwgUEFCX0NUUkwpOw0KPiA+IC0JY3NyX3dyaXRlbChwY2llLCBwYWJfY3RybCB8 ICgxIDw8IEFNQkFfUElPX0VOQUJMRV9TSElGVCkgfA0KPiA+IC0JCSgxIDw8IFBFWF9QSU9fRU5B QkxFX1NISUZUKSwgUEFCX0NUUkwpOw0KPiA+ICsJcGFiX2N0cmwgfD0gKDEgPDwgQU1CQV9QSU9f RU5BQkxFX1NISUZUKSB8ICgxIDw8DQo+IFBFWF9QSU9fRU5BQkxFX1NISUZUKTsNCj4gPiArCWNz cl93cml0ZWwocGNpZSwgcGFiX2N0cmwsIFBBQl9DVFJMKTsNCj4gPg0KPiA+ICAJY3NyX3dyaXRl bChwY2llLCAoUEFCX0lOVFBfSU5UWF9NQVNLIHwgUEFCX0lOVFBfTVNJX01BU0spLA0KPiA+IC0J CVBBQl9JTlRQX0FNQkFfTUlTQ19FTkIpOw0KPiA+ICsJCSAgIFBBQl9JTlRQX0FNQkFfTUlTQ19F TkIpOw0KPiA+DQo+ID4gIAkvKg0KPiA+ICAJICogcHJvZ3JhbSBQSU8gRW5hYmxlIEJpdCB0byAx IGFuZCBDb25maWcgV2luZG93IEVuYWJsZSBCaXQgdG8gMSBpbg0KPiA+ICAJICogUEFCX0FYSV9Q SU9fQ1RSTCBSZWdpc3Rlcg0KPiA+ICAJICovDQo+ID4gIAl2YWx1ZSA9IGNzcl9yZWFkbChwY2ll LCBQQUJfQVhJX1BJT19DVFJMKTsNCj4gPiAtCWNzcl93cml0ZWwocGNpZSwgdmFsdWUgfCBBUElP X0VOX01BU0ssIFBBQl9BWElfUElPX0NUUkwpOw0KPiA+ICsJdmFsdWUgfD0gQVBJT19FTl9NQVNL Ow0KPiA+ICsJY3NyX3dyaXRlbChwY2llLCB2YWx1ZSwgUEFCX0FYSV9QSU9fQ1RSTCk7DQo+ID4N Cj4gPiAgCS8qDQo+ID4gIAkgKiB3ZSdsbCBwcm9ncmFtIG9uZSBvdXRib3VuZCB3aW5kb3cgZm9y IGNvbmZpZyByZWFkcyBhbmQgQEANCj4gLTYwNSwyNQ0KPiA+ICs2MTMsMjUgQEAgc3RhdGljIGlu dCBtb2JpdmVpbF9ob3N0X2luaXQoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUpDQo+ID4NCj4g PiAgCS8qIGNvbmZpZyBvdXRib3VuZCB0cmFuc2xhdGlvbiB3aW5kb3cgKi8NCj4gPiAgCXByb2dy YW1fb2Jfd2luZG93cyhwY2llLCBwY2llLT5vYl93aW5zX2NvbmZpZ3VyZWQsDQo+ID4gLQkJCXBj aWUtPm9iX2lvX3Jlcy0+c3RhcnQsIDAsIENGR19XSU5ET1dfVFlQRSwNCj4gPiAtCQkJcmVzb3Vy Y2Vfc2l6ZShwY2llLT5vYl9pb19yZXMpKTsNCj4gPiArCQkJICAgcGNpZS0+b2JfaW9fcmVzLT5z dGFydCwgMCwgQ0ZHX1dJTkRPV19UWVBFLA0KPiA+ICsJCQkgICByZXNvdXJjZV9zaXplKHBjaWUt Pm9iX2lvX3JlcykpOw0KPiA+DQo+ID4gIAkvKiBtZW1vcnkgaW5ib3VuZCB0cmFuc2xhdGlvbiB3 aW5kb3cgKi8NCj4gPiAgCXByb2dyYW1faWJfd2luZG93cyhwY2llLCBXSU5fTlVNXzEsIDAsIE1F TV9XSU5ET1dfVFlQRSwNCj4gPiBJQl9XSU5fU0laRSk7DQo+ID4NCj4gPiAgCS8qIEdldCB0aGUg SS9PIGFuZCBtZW1vcnkgcmFuZ2VzIGZyb20gRFQgKi8NCj4gPiAgCXJlc291cmNlX2xpc3RfZm9y X2VhY2hfZW50cnlfc2FmZSh3aW4sIHRtcCwgJnBjaWUtPnJlc291cmNlcykgew0KPiA+IC0JCXR5 cGUgPSAwOw0KPiA+ICAJCWlmIChyZXNvdXJjZV90eXBlKHdpbi0+cmVzKSA9PSBJT1JFU09VUkNF X01FTSkNCj4gPiAgCQkJdHlwZSA9IE1FTV9XSU5ET1dfVFlQRTsNCj4gPiAtCQlpZiAocmVzb3Vy Y2VfdHlwZSh3aW4tPnJlcykgPT0gSU9SRVNPVVJDRV9JTykNCj4gPiArCQllbHNlIGlmIChyZXNv dXJjZV90eXBlKHdpbi0+cmVzKSA9PSBJT1JFU09VUkNFX0lPKQ0KPiA+ICAJCQl0eXBlID0gSU9f V0lORE9XX1RZUEU7DQo+ID4gLQkJaWYgKHR5cGUpIHsNCj4gPiAtCQkJLyogY29uZmlndXJlIG91 dGJvdW5kIHRyYW5zbGF0aW9uIHdpbmRvdyAqLw0KPiA+IC0JCQlwcm9ncmFtX29iX3dpbmRvd3Mo cGNpZSwgcGNpZS0+b2Jfd2luc19jb25maWd1cmVkLA0KPiA+IC0JCQkJd2luLT5yZXMtPnN0YXJ0 LCAwLCB0eXBlLA0KPiA+IC0JCQkJcmVzb3VyY2Vfc2l6ZSh3aW4tPnJlcykpOw0KPiA+IC0JCX0N Cj4gPiArCQllbHNlDQo+ID4gKwkJCWNvbnRpbnVlOw0KPiA+ICsNCj4gPiArCQkvKiBjb25maWd1 cmUgb3V0Ym91bmQgdHJhbnNsYXRpb24gd2luZG93ICovDQo+ID4gKwkJcHJvZ3JhbV9vYl93aW5k b3dzKHBjaWUsIHBjaWUtPm9iX3dpbnNfY29uZmlndXJlZCwNCj4gPiArCQkJCSAgIHdpbi0+cmVz LT5zdGFydCwgMCwgdHlwZSwNCj4gPiArCQkJCSAgIHJlc291cmNlX3NpemUod2luLT5yZXMpKTsN Cj4gPiAgCX0NCj4gPg0KPiA+ICAJLyogc2V0dXAgTVNJIGhhcmR3YXJlIHJlZ2lzdGVycyAqLw0K PiA+IEBAIC02NDMsNyArNjUxLDggQEAgc3RhdGljIHZvaWQgbW9iaXZlaWxfbWFza19pbnR4X2ly cShzdHJ1Y3QgaXJxX2RhdGENCj4gKmRhdGEpDQo+ID4gIAltYXNrID0gMSA8PCAoKGRhdGEtPmh3 aXJxICsgUEFCX0lOVFhfU1RBUlQpIC0gMSk7DQo+ID4gIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUo JnBjaWUtPmludHhfbWFza19sb2NrLCBmbGFncyk7DQo+ID4gIAlzaGlmdGVkX3ZhbCA9IGNzcl9y ZWFkbChwY2llLCBQQUJfSU5UUF9BTUJBX01JU0NfRU5CKTsNCj4gPiAtCWNzcl93cml0ZWwocGNp ZSwgKHNoaWZ0ZWRfdmFsICYgKH5tYXNrKSksIFBBQl9JTlRQX0FNQkFfTUlTQ19FTkIpOw0KPiA+ ICsJc2hpZnRlZF92YWwgJj0gfm1hc2s7DQo+ID4gKwljc3Jfd3JpdGVsKHBjaWUsIHNoaWZ0ZWRf dmFsLCBQQUJfSU5UUF9BTUJBX01JU0NfRU5CKTsNCj4gPiAgCXJhd19zcGluX3VubG9ja19pcnFy ZXN0b3JlKCZwY2llLT5pbnR4X21hc2tfbG9jaywgZmxhZ3MpOyAgfQ0KPiA+DQo+ID4gQEAgLTY1 OCw3ICs2NjcsOCBAQCBzdGF0aWMgdm9pZCBtb2JpdmVpbF91bm1hc2tfaW50eF9pcnEoc3RydWN0 DQo+IGlycV9kYXRhICpkYXRhKQ0KPiA+ICAJbWFzayA9IDEgPDwgKChkYXRhLT5od2lycSArIFBB Ql9JTlRYX1NUQVJUKSAtIDEpOw0KPiA+ICAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwY2llLT5p bnR4X21hc2tfbG9jaywgZmxhZ3MpOw0KPiA+ICAJc2hpZnRlZF92YWwgPSBjc3JfcmVhZGwocGNp ZSwgUEFCX0lOVFBfQU1CQV9NSVNDX0VOQik7DQo+ID4gLQljc3Jfd3JpdGVsKHBjaWUsIChzaGlm dGVkX3ZhbCB8IG1hc2spLCBQQUJfSU5UUF9BTUJBX01JU0NfRU5CKTsNCj4gPiArCXNoaWZ0ZWRf dmFsIHw9IG1hc2s7DQo+ID4gKwljc3Jfd3JpdGVsKHBjaWUsIHNoaWZ0ZWRfdmFsLCBQQUJfSU5U UF9BTUJBX01JU0NfRU5CKTsNCj4gPiAgCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY2ll LT5pbnR4X21hc2tfbG9jaywgZmxhZ3MpOyAgfQ0KPiA+DQo+ID4gQEAgLTY3MiwxMCArNjgyLDEx IEBAIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaW50eF9pcnFfY2hpcCA9IHsNCj4gPg0KPiA+ICAv KiByb3V0aW5lIHRvIHNldHVwIHRoZSBJTlR4IHJlbGF0ZWQgZGF0YSAqLyAgc3RhdGljIGludA0K PiA+IG1vYml2ZWlsX3BjaWVfaW50eF9tYXAoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgdW5z aWduZWQgaW50IGlycSwNCj4gPiAtCQlpcnFfaHdfbnVtYmVyX3QgaHdpcnEpDQo+ID4gKwkJCQkg IGlycV9od19udW1iZXJfdCBod2lycSkNCj4gPiAgew0KPiA+ICAJaXJxX3NldF9jaGlwX2FuZF9o YW5kbGVyKGlycSwgJmludHhfaXJxX2NoaXAsIGhhbmRsZV9sZXZlbF9pcnEpOw0KPiA+ICAJaXJx X3NldF9jaGlwX2RhdGEoaXJxLCBkb21haW4tPmhvc3RfZGF0YSk7DQo+ID4gKw0KPiA+ICAJcmV0 dXJuIDA7DQo+ID4gIH0NCj4gPg0KPiA+IEBAIC02OTIsNyArNzAzLDcgQEAgc3RhdGljIHN0cnVj dCBpcnFfY2hpcCBtb2JpdmVpbF9tc2lfaXJxX2NoaXAgPSB7DQo+ID4NCj4gPiAgc3RhdGljIHN0 cnVjdCBtc2lfZG9tYWluX2luZm8gbW9iaXZlaWxfbXNpX2RvbWFpbl9pbmZvID0gew0KPiA+ICAJ LmZsYWdzCT0gKE1TSV9GTEFHX1VTRV9ERUZfRE9NX09QUyB8DQo+IE1TSV9GTEFHX1VTRV9ERUZf Q0hJUF9PUFMgfA0KPiA+IC0JCU1TSV9GTEFHX01VTFRJX1BDSV9NU0kgfCBNU0lfRkxBR19QQ0lf TVNJWCksDQo+ID4gKwkJICAgTVNJX0ZMQUdfTVVMVElfUENJX01TSSB8IE1TSV9GTEFHX1BDSV9N U0lYKSwNCj4gPiAgCS5jaGlwCT0gJm1vYml2ZWlsX21zaV9pcnFfY2hpcCwNCj4gPiAgfTsNCj4g Pg0KPiA+IEBAIC03MTAsNyArNzIxLDcgQEAgc3RhdGljIHZvaWQgbW9iaXZlaWxfY29tcG9zZV9t c2lfbXNnKHN0cnVjdA0KPiA+IGlycV9kYXRhICpkYXRhLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKSAg fQ0KPiA+DQo+ID4gIHN0YXRpYyBpbnQgbW9iaXZlaWxfbXNpX3NldF9hZmZpbml0eShzdHJ1Y3Qg aXJxX2RhdGEgKmlycV9kYXRhLA0KPiA+IC0JCWNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBi b29sIGZvcmNlKQ0KPiA+ICsJCQkJICAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgYm9v bCBmb3JjZSkNCj4gPiAgew0KPiA+ICAJcmV0dXJuIC1FSU5WQUw7DQo+ID4gIH0NCj4gPiBAQCAt NzIyLDcgKzczMyw4IEBAIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXANCj4gPiBtb2JpdmVpbF9tc2lf Ym90dG9tX2lycV9jaGlwID0geyAgfTsNCj4gPg0KPiA+ICBzdGF0aWMgaW50IG1vYml2ZWlsX2ly cV9tc2lfZG9tYWluX2FsbG9jKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sDQo+ID4gLQkJdW5z aWduZWQgaW50IHZpcnEsIHVuc2lnbmVkIGludCBucl9pcnFzLCB2b2lkICphcmdzKQ0KPiA+ICsJ CQkJCSB1bnNpZ25lZCBpbnQgdmlycSwNCj4gPiArCQkJCQkgdW5zaWduZWQgaW50IG5yX2lycXMs IHZvaWQgKmFyZ3MpDQo+ID4gIHsNCj4gPiAgCXN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llID0g ZG9tYWluLT5ob3N0X2RhdGE7DQo+ID4gIAlzdHJ1Y3QgbW9iaXZlaWxfbXNpICptc2kgPSAmcGNp ZS0+bXNpOyBAQCAtNzQyLDEzICs3NTQsMTMgQEAgc3RhdGljDQo+ID4gaW50IG1vYml2ZWlsX2ly cV9tc2lfZG9tYWluX2FsbG9jKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sDQo+ID4gIAltdXRl eF91bmxvY2soJm1zaS0+bG9jayk7DQo+ID4NCj4gPiAgCWlycV9kb21haW5fc2V0X2luZm8oZG9t YWluLCB2aXJxLCBiaXQsDQo+ICZtb2JpdmVpbF9tc2lfYm90dG9tX2lycV9jaGlwLA0KPiA+IC0J CQkJZG9tYWluLT5ob3N0X2RhdGEsIGhhbmRsZV9sZXZlbF9pcnEsDQo+ID4gLQkJCQlOVUxMLCBO VUxMKTsNCj4gPiArCQkJICAgIGRvbWFpbi0+aG9zdF9kYXRhLCBoYW5kbGVfbGV2ZWxfaXJxLCBO VUxMLCBOVUxMKTsNCj4gPiAgCXJldHVybiAwOw0KPiA+ICB9DQo+ID4NCj4gPiAgc3RhdGljIHZv aWQgbW9iaXZlaWxfaXJxX21zaV9kb21haW5fZnJlZShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWlu LA0KPiA+IC0JCXVuc2lnbmVkIGludCB2aXJxLCB1bnNpZ25lZCBpbnQgbnJfaXJxcykNCj4gPiAr CQkJCQkgdW5zaWduZWQgaW50IHZpcnEsDQo+ID4gKwkJCQkJIHVuc2lnbmVkIGludCBucl9pcnFz KQ0KPiA+ICB7DQo+ID4gIAlzdHJ1Y3QgaXJxX2RhdGEgKmQgPSBpcnFfZG9tYWluX2dldF9pcnFf ZGF0YShkb21haW4sIHZpcnEpOw0KPiA+ICAJc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUgPSBp cnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsgQEANCj4gPiAtNzU2LDEyICs3NjgsMTEgQEAg c3RhdGljIHZvaWQgbW9iaXZlaWxfaXJxX21zaV9kb21haW5fZnJlZShzdHJ1Y3QNCj4gPiBpcnFf ZG9tYWluICpkb21haW4sDQo+ID4NCj4gPiAgCW11dGV4X2xvY2soJm1zaS0+bG9jayk7DQo+ID4N Cj4gPiAtCWlmICghdGVzdF9iaXQoZC0+aHdpcnEsIG1zaS0+bXNpX2lycV9pbl91c2UpKSB7DQo+ ID4gKwlpZiAoIXRlc3RfYml0KGQtPmh3aXJxLCBtc2ktPm1zaV9pcnFfaW5fdXNlKSkNCj4gPiAg CQlkZXZfZXJyKCZwY2llLT5wZGV2LT5kZXYsICJ0cnlpbmcgdG8gZnJlZSB1bnVzZWQgTVNJIyVs dVxuIiwNCj4gPiAgCQkJZC0+aHdpcnEpOw0KPiA+IC0JfSBlbHNlIHsNCj4gPiArCWVsc2UNCj4g PiAgCQlfX2NsZWFyX2JpdChkLT5od2lycSwgbXNpLT5tc2lfaXJxX2luX3VzZSk7DQo+ID4gLQl9 DQo+ID4NCj4gPiAgCW11dGV4X3VubG9jaygmbXNpLT5sb2NrKTsNCj4gPiAgfQ0KPiA+IEBAIC03 ODUsMTIgKzc5NiwxNCBAQCBzdGF0aWMgaW50IG1vYml2ZWlsX2FsbG9jYXRlX21zaV9kb21haW5z KHN0cnVjdA0KPiBtb2JpdmVpbF9wY2llICpwY2llKQ0KPiA+ICAJfQ0KPiA+DQo+ID4gIAltc2kt Pm1zaV9kb21haW4gPSBwY2lfbXNpX2NyZWF0ZV9pcnFfZG9tYWluKGZ3bm9kZSwNCj4gPiAtCQkJ CSZtb2JpdmVpbF9tc2lfZG9tYWluX2luZm8sIG1zaS0+ZGV2X2RvbWFpbik7DQo+ID4gKwkJCQkJ CSAgICAmbW9iaXZlaWxfbXNpX2RvbWFpbl9pbmZvLA0KPiA+ICsJCQkJCQkgICAgbXNpLT5kZXZf ZG9tYWluKTsNCj4gPiAgCWlmICghbXNpLT5tc2lfZG9tYWluKSB7DQo+ID4gIAkJZGV2X2Vycihk ZXYsICJmYWlsZWQgdG8gY3JlYXRlIE1TSSBkb21haW5cbiIpOw0KPiA+ICAJCWlycV9kb21haW5f cmVtb3ZlKG1zaS0+ZGV2X2RvbWFpbik7DQo+ID4gIAkJcmV0dXJuIC1FTk9NRU07DQo+ID4gIAl9 DQo+ID4gKw0KPiA+ICAJcmV0dXJuIDA7DQo+ID4gIH0NCj4gPg0KPiA+IEBAIC04MDEsOCArODE0 LDggQEAgc3RhdGljIGludCBtb2JpdmVpbF9wY2llX2luaXRfaXJxX2RvbWFpbihzdHJ1Y3QNCj4g bW9iaXZlaWxfcGNpZSAqcGNpZSkNCj4gPiAgCWludCByZXQ7DQo+ID4NCj4gPiAgCS8qIHNldHVw IElOVHggKi8NCj4gPiAtCXBjaWUtPmludHhfZG9tYWluID0gaXJxX2RvbWFpbl9hZGRfbGluZWFy KG5vZGUsDQo+ID4gLQkJCQlQQ0lfTlVNX0lOVFgsICZpbnR4X2RvbWFpbl9vcHMsIHBjaWUpOw0K PiA+ICsJcGNpZS0+aW50eF9kb21haW4gPSBpcnFfZG9tYWluX2FkZF9saW5lYXIobm9kZSwgUENJ X05VTV9JTlRYLA0KPiA+ICsJCQkJCQkgICZpbnR4X2RvbWFpbl9vcHMsIHBjaWUpOw0KPiA+DQo+ ID4gIAlpZiAoIXBjaWUtPmludHhfZG9tYWluKSB7DQo+ID4gIAkJZGV2X2VycihkZXYsICJGYWls ZWQgdG8gZ2V0IGEgSU5UeCBJUlEgZG9tYWluXG4iKTsgQEAgLTkxNywxMA0KPiA+ICs5MzAsMTAg QEAgTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbW9iaXZlaWxfcGNpZV9vZl9tYXRjaCk7DQo+IHN0 YXRpYw0KPiA+IHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbW9iaXZlaWxfcGNpZV9kcml2ZXIgPSB7 DQo+ID4gIAkucHJvYmUgPSBtb2JpdmVpbF9wY2llX3Byb2JlLA0KPiA+ICAJLmRyaXZlciA9IHsN Cj4gPiAtCQkJLm5hbWUgPSAibW9iaXZlaWwtcGNpZSIsDQo+ID4gLQkJCS5vZl9tYXRjaF90YWJs ZSA9IG1vYml2ZWlsX3BjaWVfb2ZfbWF0Y2gsDQo+ID4gLQkJCS5zdXBwcmVzc19iaW5kX2F0dHJz ID0gdHJ1ZSwNCj4gPiAtCQl9LA0KPiA+ICsJCS5uYW1lID0gIm1vYml2ZWlsLXBjaWUiLA0KPiA+ ICsJCS5vZl9tYXRjaF90YWJsZSA9IG1vYml2ZWlsX3BjaWVfb2ZfbWF0Y2gsDQo+ID4gKwkJLnN1 cHByZXNzX2JpbmRfYXR0cnMgPSB0cnVlLA0KPiA+ICsJfSwNCj4gPiAgfTsNCj4gPg0KPiA+ICBi dWlsdGluX3BsYXRmb3JtX2RyaXZlcihtb2JpdmVpbF9wY2llX2RyaXZlcik7DQo+ID4gLS0NCj4g PiAyLjE3LjENCj4gPg0K