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=-15.8 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 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 12D1EC07E95 for ; Wed, 7 Jul 2021 09:56:58 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E4F1B61C92 for ; Wed, 7 Jul 2021 09:56:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231321AbhGGJ7g (ORCPT ); Wed, 7 Jul 2021 05:59:36 -0400 Received: from mail-db8eur05on2064.outbound.protection.outlook.com ([40.107.20.64]:41152 "EHLO EUR05-DB8-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S231282AbhGGJ7f (ORCPT ); Wed, 7 Jul 2021 05:59:35 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=n/nxkmF2J0OjgoZHPCxGdpFzR9DA6YnLA4cyVo0Y5BwzFfqgHtY6Xa9Mi3J6j9VEPxKUnsXjMbjitY5mAj8lU96dFbdeVfqG4EtTrHvCnj6QIMqXgDZGR8rnXFyW7XKdrG0wowsOQm1XrZmBl1B5F5F2uqbZcwaiEnA9wXo8TqgYhE+9kx1iB3ftWC/9qJn7SIvrrWjTDQDb0VHeMSHRBbEBblmgf46+EGmC7iQi7CucnlfNxBosJKnC3TFZGgyTviXAHthDVMbpZRB8dwDLO0vctPk37eoGlBV/4lll5AI6PFenC7sQc4KWzrNyzPCN10btgudxSQ4XdYCV8Wcuqw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=e1jHeW6MNskLGYSJ3qGl2k808+FstzIdE5Xu6w/wQD4=; b=oFFmbIvAeMZwa5bJw3Dk2VCW7cUGteLaDd3e6COUf3K0Yb1r4HoUtFVc4TmBiLu5TM1kC5TviGJ2OFyiP+4qjvnex8OthoJMjmECZBUQYcR8Ga8tU+zx7eQAhw8b1isgZJvAU0ismrf9VoQx8rpfJiEwOj5xQAy7DiDCc8/t8Rgu2otxSkI3sR/C19MqJgy4PeLnZmGopZVisrwS/fohuK88ZTylW2vP9nk1OoKk/fPfUHQ2a3ZrgATa/nXvoe4ot29MF6Nq0ltb75tbbN4f6o62LuObewAi1nC0qaZ75DD0U77yEYzYEK8DxQctpWL3iRMARDFHzavvnDOvZ/mm/w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none 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=e1jHeW6MNskLGYSJ3qGl2k808+FstzIdE5Xu6w/wQD4=; b=nUUPfQkqyNWyLUV7B0h7jHttN9ZoAt+emcbD0tevQk6/qij6hOdznQXba1MXb0Yh+whpfwgJ5ZdVrFsjXH3T3FAat4rsvwyhBKWrMsVwnM7xEaCY/AaTZVbDu2vE9E7emYr7fWPxYneYk6ATb4VacW3ULv9D4D8wRPuQpXVCUkM= Received: from DB6PR0402MB2760.eurprd04.prod.outlook.com (2603:10a6:4:a1::14) by DB6PR0401MB2534.eurprd04.prod.outlook.com (2603:10a6:4:3c::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Wed, 7 Jul 2021 09:56:52 +0000 Received: from DB6PR0402MB2760.eurprd04.prod.outlook.com ([fe80::c445:d742:eb76:86dd]) by DB6PR0402MB2760.eurprd04.prod.outlook.com ([fe80::c445:d742:eb76:86dd%9]) with mapi id 15.20.4287.033; Wed, 7 Jul 2021 09:56:52 +0000 From: Peng Fan To: Lucas Stach , "Peng Fan (OSS)" , "robh+dt@kernel.org" , "shawnguo@kernel.org" , "s.hauer@pengutronix.de" CC: "kernel@pengutronix.de" , "festevam@gmail.com" , dl-linux-imx , "p.zabel@pengutronix.de" , "krzk@kernel.org" , "agx@sigxcpu.org" , "marex@denx.de" , "andrew.smirnov@gmail.com" , "devicetree@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , Jacky Bai , "frieder.schrempf@kontron.de" , "aford173@gmail.com" , Abel Vesa , "jagan@amarulasolutions.com" Subject: RE: [PATCH V8 3/4] soc: imx: Add generic blk-ctl driver Thread-Topic: [PATCH V8 3/4] soc: imx: Add generic blk-ctl driver Thread-Index: AQHXbLPtfC60doOL7UCSO2CrxL7Thas0giGAgALGOoA= Date: Wed, 7 Jul 2021 09:56:52 +0000 Message-ID: References: <20210629072941.7980-1-peng.fan@oss.nxp.com> <20210629072941.7980-4-peng.fan@oss.nxp.com> <0fc1f5043eeedb0c40ae9f76e245c648e0c88cde.camel@pengutronix.de> In-Reply-To: <0fc1f5043eeedb0c40ae9f76e245c648e0c88cde.camel@pengutronix.de> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: pengutronix.de; dkim=none (message not signed) header.d=none;pengutronix.de; dmarc=none action=none header.from=nxp.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 7303b667-334f-462b-c8c5-08d9412d8bea x-ms-traffictypediagnostic: DB6PR0401MB2534: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:4941; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: cshyoexmf/iOvVOm/f++OocoCyzIyE8qDOGDgV7S4UbimK+3LHUZZY4MHayTjYPCN8G6Cn7eRqxcqvzxVZseyYIiFD4kLWMgb91PdNy8q2w59q+e73TdRIQl2tGBQzzmPEmS9Wkxv+3SefUZ2S5cPk4RyXipiecu5SKkFpJCEvMPxh+qhXz6HuwBYtwQYFAAmpo75iOHymEKwZX6Cjck5XnxDx5E7wwnC7REKGnsLs0DjTwpJa1Hng33CHKxCDcLbMz+XuUoKceaI1oK9BnpyKbkMmOWr04HWSNeW7tCbYOzM2nt//SElcEy+B0vuznBX41kSfBU+j0Cxch+Y/NvHQEoEqncjROU78ApBkgH4+8HC4TRCLB1eBYUuV7689o1rIZfnziv3Z/B4/beDo64ABn0Z30kMdqvK2MlCQJN7eVCvJ+1ifm7uYkFQd72m8IucsLCKR+OovvoBWDV94D6bhXxHRbZSgbiS7O6SSIyElqKzv/oYIbyCrDuK2Hx/Fb+bNl7NMxko2KNn6+zc03Ccu1QbRx1tqhnngZac/IfIakhRb+zJ009rxeBOQufORzmArm7tRny6ZGr8g0ilVofZT/PCmznyhmWjjYskqRhuq2gFdPCjAkJYWadlfi2q7++SsG4ffbCPRRNqGrJapn1YDKcnwdx/Z/cttZDoBHOpxnw/NXj7ixyZIjOTbYWYBgVduSl6C4tRmLBiAQnxW0t/Q== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB6PR0402MB2760.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(376002)(366004)(346002)(136003)(39860400002)(396003)(33656002)(110136005)(2906002)(5660300002)(66476007)(6506007)(30864003)(7696005)(66946007)(316002)(26005)(66446008)(64756008)(66556008)(4326008)(83380400001)(86362001)(54906003)(8676002)(186003)(55016002)(8936002)(7416002)(38100700002)(52536014)(122000001)(9686003)(71200400001)(44832011)(478600001)(76116006)(41533002)(579004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?YXRWY0lYbTRvNVRGY2ZpdVhkSTRJSFVpL1FtZC9nN3QyUUx6Lzd6SDRSdnoy?= =?utf-8?B?R3V3dURmRzRMZ3EzaFRLY3JxcGlzK0w3OE5EU3RYWTFSZE1oN3gxcUNGenlZ?= =?utf-8?B?dHlKQVpqK2txK0pKMHFrSDB3ZXFQRDd0bzRuTEFhZENMVHdhL09MTjBiaVFI?= =?utf-8?B?NE5xRWg1bEFtT283VWY5WXFZQnF3NTl2Q0x3R085Z3hYTkhlWEswTENIZDRp?= =?utf-8?B?QkJIdkxDM1o1M2hwcmpSOU05SVpuZUNGRWJIbEJzWnB3MHhNZkFiU2NBcm1M?= =?utf-8?B?bVRVaG1vTkU1UWNpcDRrNFhSbDlOV3VSbklTbUl1Yjk2VmxNMFdqc21lV2kv?= =?utf-8?B?V0ZCcGJYZUFJNUtLdnlPaTBxRDZ0REdiVDNpY0VGZUJ1aXdBZFdkT1VNSlBq?= =?utf-8?B?TGV5NUs2VFdtUXJTbFZKaVVLbHRHUjZFdUE2MUJQbCthZmovelRwamtJekRK?= =?utf-8?B?emxXU2x6N2RldzJFSDFEa2s3bnRuZ05zUnk4Z3o2OXNqbzd3dVJDSkRHQlA0?= =?utf-8?B?cWJnaEFtZTNRRUFBaWhIRVFubVZkZnhUcjBCMkFLeGJsVGNxTG1iZHhmTDNr?= =?utf-8?B?RkhyQkZwb0o1UEJldjJGUnJIQ2xRWVZ5QWFmV2Jta1A3Ry9HU1VoMktOT2ll?= =?utf-8?B?R2JVMnh4Z3g4bXlEdXU0M0FxNW5VOVZVSmk0d0orcldUUGd2U3lpNEs4YTJB?= =?utf-8?B?OVJFaERGT3BZRk5ZYzlSOWVvaEJRZ2s1bFJBQ1B1bThwZXJrQ1AwRlpUZllG?= =?utf-8?B?aDVvZFZUWXg1dTRibjRuR2czRUVUejNxWUpZR1d4RVdXNmJ3SVpDcE45UE9i?= =?utf-8?B?cnZZM1ZZczJBc0h3WHF4cUpYVDVSZGxwSXRlbml1T3BOSHpiSHZrQ2VzTS9N?= =?utf-8?B?RVJmVnUzOUZOWEY3TXY1b21UcDhnejZiUVM4aW1rSXlsOEhYWlV0WUVmTlM4?= =?utf-8?B?eUdqdlhoQ3AxeVFQRDdRTWsvM0tnQmxuRitxV0p0ZmE4MExTZWplQ2ZDUzU5?= =?utf-8?B?VUp4TENwRTYyVThQRlVGbkJxZ0VCRHdoZUpkWVJ1am5zSmhXcDJHV01OR1pn?= =?utf-8?B?dHZCc2cvMjBDaGZieE8wUm9yeU0yNlRMbHAwNWIzSmZzQzVyTGpXWVZXQXNr?= =?utf-8?B?eTNKZXpjZnNaaC9rT1VuZmwyT1h4ZzJWdGRvZ0l4SjlRaUxNQ1RTT1F6RkM2?= =?utf-8?B?MUEwc3k0elEwQ05BeXU3ZTdyd2xsVXlZbTdoNy8xU3pQUER5UlNJQ3pxanA2?= =?utf-8?B?S25jRUdERXV4T1lvOXMrS0xtcUZnTGlOUDVPQkNLWE04UHkvdkNPalhVSlN5?= =?utf-8?B?RHp5ZmJUUDdtdWNCZzZ3OG9uSVJ2U1JMdFNpVWFDMWFNdWNnUmZwcFpPZnlk?= =?utf-8?B?RmhwYTUzTVpVa3NjNHBzTThxdG1BREdaK3lHN3NCU2Q1UnRHQkRUc0t3UkNE?= =?utf-8?B?YnpCSUtsWFdwajM1OFpSU3NzRnc5K1FnT0lBRmU1MDVJQUVrV21tUG54K29x?= =?utf-8?B?NUFzcUxhQ21yVXRDV29xeVRObjBSZzNhRlE0eWtuVE9oTW9NTFltR3BKeDJR?= =?utf-8?B?bDFBMU5rQWNqckdESTlOd1htYlFkRUxoM1JYbVdHeXlGQ3huQXdRamE1WDFX?= =?utf-8?B?ZFJkSmRmNVcrUnIzTkpNL05zNWk4MTVJbGR3UE9mTFkyUFBQZWV5Y2ExYUJB?= =?utf-8?B?SDEzcngwYy9tWUtOajd3YmtWUjVyalhibDVBejcxUEljSG5XTGZKaWdNb2li?= =?utf-8?Q?XljsKo3/W8fayEjdgCEQJ4jA/NR3CPPuVCJEukJ?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DB6PR0402MB2760.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7303b667-334f-462b-c8c5-08d9412d8bea X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Jul 2021 09:56:52.4760 (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: B7avwXMD6Q6BZFyUcVr53tV2/f9hfne255KsnPOR3W7Tm5cZzSSWgPk56p+/3RSPA3RBBJ2g1Sszz4p3+8ewSw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0401MB2534 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgTHVjYXMsDQoNCj4gU3ViamVjdDogUmU6IFtQQVRDSCBWOCAzLzRdIHNvYzogaW14OiBBZGQg Z2VuZXJpYyBibGstY3RsIGRyaXZlcg0KDQpBZnRlciByZXRoaW5raW5nIGFib3V0IHRoaXMgZHJp dmVyLCBJIHRoaW5rIHdlIHN0aWxsIG5lZWQNCmV4cG9zZSB0byBwZ2MgdG8gdG91Y2ggdGhlIGJs ay1jdGwgaGFyZHdhcmUgYnVzIGhhbmRzaGFrZS4NCg0KQ3VycmVudGx5IHdlIGFyZSBhc3N1bWlu ZyB0aGUgYmxrLWN0bCBwcm9iZSB3aWxsIGZpbmlzaA0KdGhlIGhhbmRzaGFrZS4gQnV0IHRoZXJl IGlzIGFub3RoZXIgY2FzZSwgc2F5aW5nIGdwdS4NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+DQpHUFUgb24o MSkNCiAgICAgICAgICBWUFVNSVggb24gKDIpDQogICAgICAgICAgICAgICAgICAgICAgICBHUFUg b2ZmKDMpDQogICAgICAgIA0KQmV0d2VlbiBHUFUgb24vb2ZmLCBWUFVNSVgtQkxLLUNUTCBub3Qg ZG9uZSwgc28NCnZwdW1peCBwZ2MgaGFuZHNoYWtlIG5vdCBkb25lLiBUaGVuIEdQVSBvZmYgKDMp IHdpbGwNCnRyaWdnZXIgZmFpbGVkIHRvIGNvbW1hbmQgcGdjLCBiZWNhdXNlIHRoZSBsYXN0IHBn Yyh2cHUgcG93ZXIgb24pDQpub3QgZmluaXNoZWQuDQoNCkkgdGhpbmsgdGhpcyBjb3VsZCBiZSBu b3QgYXZvaWRlZCBpZiB3ZSBzcGxpdCB0aGUgaGFuZHNoYWtlIGludG8NCmJsay1jdGwgZHJpdmVy LiBIb3cgZG8geW91IHRoaW5rPw0KDQpCVFc6ICNsaW51eC1pbXggSVJDIG1vdmVkIHRvIExpYnJl LkNoYXQgICAgIA0KDQo+IA0KPiBIaSBQZW5nLA0KPiANCj4gQW0gRGllbnN0YWcsIGRlbSAyOS4w Ni4yMDIxIHVtIDE1OjI5ICswODAwIHNjaHJpZWIgUGVuZyBGYW4gKE9TUyk6DQo+ID4gRnJvbTog UGVuZyBGYW4gPHBlbmcuZmFuQG54cC5jb20+DQo+ID4NCj4gPiBUaGUgaS5NWDhNTSBpbnRyb2R1 Y2VzIGFuIElQIG5hbWVkIEJMS19DVEwgYW5kIHVzdWFsbHkgaXMgY29tcHJpc2VkIG9mDQo+ID4g c29tZSBHUFJzLg0KPiA+DQo+ID4gVGhlIEdQUnMgaGFzIHNvbWUgY2xvY2sgYml0cyBhbmQgcmVz ZXQgYml0cywgYnV0IGhlcmUgd2UgdGFrZSBpdCBhcw0KPiA+IHZpcnR1YWwgUERzLCBiZWNhdXNl IG9mIHRoZSBjbG9jayBhbmQgcG93ZXIgZG9tYWluIEEvQiBsb2NrIGlzc3VlIHdoZW4NCj4gPiB0 YWtpbmcgaXQgYXMgYSBjbG9jayBjb250cm9sbGVyLg0KPiA+DQo+ID4gRm9yIHNvbWUgYml0cywg aXQgbWlnaHQgYmUgZ29vZCB0byBhbHNvIG1ha2UgaXQgYXMgYSByZXNldCBjb250cm9sbGVyLA0K PiA+IGJ1dCB0byBpLk1YOE1NLCB3ZSBub3QgYWRkIHRoYXQgc3VwcG9ydCBmb3Igbm93Lg0KPiA+ DQo+ID4gU2lnbmVkLW9mZi1ieTogUGVuZyBGYW4gPHBlbmcuZmFuQG54cC5jb20+DQo+ID4gLS0t DQo+ID4gIGRyaXZlcnMvc29jL2lteC9NYWtlZmlsZSAgfCAgIDIgKy0NCj4gPiAgZHJpdmVycy9z b2MvaW14L2Jsay1jdGwuYyB8IDMyNA0KPiA+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrDQo+ID4gIGRyaXZlcnMvc29jL2lteC9ibGstY3RsLmggfCAgODUgKysrKysrKysr Kw0KPiA+ICAzIGZpbGVzIGNoYW5nZWQsIDQxMCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0p ICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4gPiBkcml2ZXJzL3NvYy9pbXgvYmxrLWN0bC5jICBjcmVh dGUgbW9kZSAxMDA2NDQNCj4gPiBkcml2ZXJzL3NvYy9pbXgvYmxrLWN0bC5oDQo+ID4NCj4gPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9zb2MvaW14L01ha2VmaWxlIGIvZHJpdmVycy9zb2MvaW14L01h a2VmaWxlIGluZGV4DQo+ID4gMDc4ZGM5MThmNGYzLi5kM2QyYjQ5YTM4NmMgMTAwNjQ0DQo+ID4g LS0tIGEvZHJpdmVycy9zb2MvaW14L01ha2VmaWxlDQo+ID4gKysrIGIvZHJpdmVycy9zb2MvaW14 L01ha2VmaWxlDQo+ID4gQEAgLTQsNCArNCw0IEBAIG9iai0kKENPTkZJR19BUkNIX01YQykgKz0g c29jLWlteC5vICBlbmRpZg0KPiA+ICBvYmotJChDT05GSUdfSEFWRV9JTVhfR1BDKSArPSBncGMu bw0KPiA+ICBvYmotJChDT05GSUdfSU1YX0dQQ1YyX1BNX0RPTUFJTlMpICs9IGdwY3YyLm8NCj4g PiAtb2JqLSQoQ09ORklHX1NPQ19JTVg4TSkgKz0gc29jLWlteDhtLm8NCj4gPiArb2JqLSQoQ09O RklHX1NPQ19JTVg4TSkgKz0gc29jLWlteDhtLm8gYmxrLWN0bC5vDQo+ID4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvc29jL2lteC9ibGstY3RsLmMgYi9kcml2ZXJzL3NvYy9pbXgvYmxrLWN0bC5jIG5l dw0KPiA+IGZpbGUgbW9kZSAxMDA2NDQgaW5kZXggMDAwMDAwMDAwMDAwLi5jZWMxODg0MjAyZTAN Cj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9zb2MvaW14L2Jsay1jdGwuYw0K PiA+IEBAIC0wLDAgKzEsMzI0IEBADQo+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wDQo+ID4gKy8qDQo+ID4gKyAqIENvcHlyaWdodCAyMDIxIE5YUC4NCj4gPiArICovDQo+ ID4gKw0KPiA+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9l cnIuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9t b2R1bGUuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+DQo+ID4gKyNpbmNsdWRlIDxs aW51eC9vZi5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPg0KPiA+ICsjaW5j bHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9k ZXZpY2UuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4NCj4gPiArI2luY2x1 ZGUgPGxpbnV4L3BtX2RvbWFpbi5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+DQo+ ID4gKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+DQo+ID4gKw0KPiA+ICsjaW5jbHVkZSAiYmxrLWN0 bC5oIg0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgaW14X2Jsa19jdGxfZG9tYWlu ICp0b19pbXhfYmxrX2N0bF9wZChzdHJ1Y3QNCj4gPiArZ2VuZXJpY19wbV9kb21haW4gKmdlbnBk KSB7DQo+ID4gKwlyZXR1cm4gY29udGFpbmVyX29mKGdlbnBkLCBzdHJ1Y3QgaW14X2Jsa19jdGxf ZG9tYWluLCBnZW5wZCk7IH0NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgaW14X2Jsa19jdGxfZW5h YmxlX2hzayhzdHJ1Y3QgZGV2aWNlICpkZXYpIHsNCj4gPiArCXN0cnVjdCBpbXhfYmxrX2N0bCAq YmxrX2N0bCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiA+ICsJY29uc3Qgc3RydWN0IGlteF9i bGtfY3RsX2h3ICpodyA9IGJsa19jdGwtPmRldl9kYXRhLT5od19oc2s7DQo+ID4gKwlzdHJ1Y3Qg cmVnbWFwICpyZWdtYXAgPSBibGtfY3RsLT5yZWdtYXA7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsN Cj4gPiArCWlmIChody0+ZmxhZ3MgJiBJTVhfQkxLX0NUTF9QRF9SRVNFVCkgew0KPiA+ICsJCXJl dCA9IHJlZ21hcF91cGRhdGVfYml0cyhyZWdtYXAsIGh3LT5yc3Rfb2Zmc2V0LCBody0+cnN0X21h c2ssDQo+IGh3LT5yc3RfbWFzayk7DQo+ID4gKwkJaWYgKHJldCkNCj4gPiArCQkJcmV0dXJuIHJl dDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocmVnbWFw LCBody0+b2Zmc2V0LCBody0+bWFzaywgaHctPm1hc2spOw0KPiA+ICsNCj4gPiArCS8qIFdhaXQg Zm9yIGhhbmRzaGFrZSAqLw0KPiA+ICsJdWRlbGF5KDUpOw0KPiA+ICsNCj4gPiArCXJldHVybiBy ZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgaW14X2Jsa19jdGxfcG93ZXJfb24o c3RydWN0IGdlbmVyaWNfcG1fZG9tYWluICpkb21haW4pIHsNCj4gPiArCXN0cnVjdCBpbXhfYmxr X2N0bF9kb21haW4gKnBkID0gdG9faW14X2Jsa19jdGxfcGQoZG9tYWluKTsNCj4gPiArCXN0cnVj dCBpbXhfYmxrX2N0bCAqYmxrX2N0bCA9IHBkLT5ibGtfY3RsOw0KPiA+ICsJc3RydWN0IHJlZ21h cCAqcmVnbWFwID0gYmxrX2N0bC0+cmVnbWFwOw0KPiA+ICsJY29uc3Qgc3RydWN0IGlteF9ibGtf Y3RsX2h3ICpodyA9ICZibGtfY3RsLT5kZXZfZGF0YS0+cGRzW3BkLT5pZF07DQo+ID4gKwlpbnQg cmV0Ow0KPiA+ICsNCj4gPiArCW11dGV4X2xvY2soJmJsa19jdGwtPmxvY2spOw0KPiA+ICsNCj4g PiArCXJldCA9IGNsa19idWxrX3ByZXBhcmVfZW5hYmxlKGJsa19jdGwtPm51bV9jbGtzLCBibGtf Y3RsLT5jbGtzKTsNCj4gDQo+IEknbSBzdGlsbCBub3QgYSBmYW4gb2YgZW5hYmxpbmcgYWxsIHRo ZSBjbG9ja3MgZ29pbmcgaW50byB0aGUgYmxrLWN0bCB0byBwb3dlcg0KPiB1cC9kb3duIG9uZSBz cGVjaWZpYyBkb21haW4uIEl0J3Mgbm90IHJlYWxseSBhIHByb2JsZW0gd2l0aCBjbG9ja3MsIHdo ZXJlIHRoZQ0KPiBwYXJlbnRzIGFyZSBhbHdheXMgb24sIGFzIHRoZSBjbG9jayBnYXRlL3VuZ2F0 ZSBpcyBwcmV0dHkgY2hlYXAsIGJ1dCBhcyBzb29uDQo+IGFzIHlvdSBnZXQgdG8gc29tZXRoaW5n IGxpa2UgdGhlIGRpc3BsYXkgcGl4ZWwgY2xvY2ssIHdoZXJlIHRoZSBwYXJlbnQgUExMIG1heQ0K PiBiZSBzaHV0IGRvd24sIHRoZSBjbG9jayBlbmFibGUgbWF5IGVhc2lseSBiZSB0aGUgbW9zdCBj b3N0bHkgb3BlcmF0aW9uIG9mIHRoaXMNCj4gd2hvbGUgZnVuY3Rpb24sIGV2ZW4gaWYgdGhpcyBz cGVjaWZpYyBjbG9jayBpc24ndCBldmVuIG5lZWRlZCBmb3IgdGhlIGRvbWFpbiBpbg0KPiBxdWVz dGlvbi4NCg0KV2UgaGFkIGFuIGFncmVlbWVudCB0byB1c2UgYnVsayBjbGtzIGluIHRoZSBiZWdp bm5pbmcgOikNCkJ1dCBJIGNvdWxkIGxvb2sgaW50byB1c2UgZGVkaWNhdGVkIGNsaywgYnV0IHRo YXQgcmVxdWlyZXMgbmV3IGxvZ2ljIHRvIG1hcCBlYWNoDQpwZCB3aXRoIG5lZWRlZCBjbGtzLg0K DQo+IA0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCW11dGV4X3VubG9jaygmYmxrX2N0bC0+bG9j ayk7DQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAoaHctPmZs YWdzICYgSU1YX0JMS19DVExfUERfSEFORFNIQUtFKSB7DQo+ID4gKwkJcmV0ID0gaW14X2Jsa19j dGxfZW5hYmxlX2hzayhibGtfY3RsLT5kZXYpOw0KPiA+ICsJCWlmIChyZXQpDQo+ID4gKwkJCWRl dl9lcnIoYmxrX2N0bC0+ZGV2LCAiSGFuZHNoYWtlIGZhaWxlZCB3aGVuIHBvd2VyIG9uXG4iKTsN Cj4gPiArDQo+ID4gKwkJLyogRXhwZWN0ZWQsIGhhbmRzaGFrZSBhbHJlYWR5IGhhbmRsZSByZXNl dCovDQo+ID4gKwkJZ290byBkaXNhYmxlX2NsazsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAo aHctPmZsYWdzICYgSU1YX0JMS19DVExfUERfUkVTRVQpIHsNCj4gPiArCQlyZXQgPSByZWdtYXBf Y2xlYXJfYml0cyhyZWdtYXAsIGh3LT5yc3Rfb2Zmc2V0LCBody0+cnN0X21hc2spOw0KPiA+ICsJ CWlmIChyZXQpDQo+ID4gKwkJCWdvdG8gZGlzYWJsZV9jbGs7DQo+ID4gKw0KPiA+ICsJCS8qIFdh aXQgZm9yIHJlc2V0IHByb3BhZ2F0ZSAqLw0KPiA+ICsJCXVkZWxheSg1KTsNCj4gPiArDQo+ID4g KwkJcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKHJlZ21hcCwgaHctPnJzdF9vZmZzZXQsIGh3LT5y c3RfbWFzaywNCj4gaHctPnJzdF9tYXNrKTsNCj4gPiArCQlpZiAocmV0KQ0KPiA+ICsJCQlnb3Rv IGRpc2FibGVfY2xrOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldCA9IHJlZ21hcF91cGRhdGVf Yml0cyhyZWdtYXAsIGh3LT5vZmZzZXQsIGh3LT5tYXNrLCBody0+bWFzayk7DQo+ID4NCj4gDQo+ IEkgZmluZCB0aGlzIHZlcnkgaGFyZCB0byBmb2xsb3cgYW5kIHJlYXNvbiBhYm91dC4gV2h5IGRv IHdlIGV2ZW4gbmVlZCB0aG9zZQ0KPiBkaWZmZXJlbnQgcGF0aHMgZm9yIGRvbWFpbnMgd2l0aCBv ciB3aXRob3V0IHRoZSBoYW5kc2hha2U/DQo+IA0KPiBTaG91bGRuJ3QgaXQgYmUgZW5vdWdoIHRv IGp1c3QgYmUgZW5vdWdoIHRvIGRvIHRoZSBmb2xsb3dpbmcgaW4gYWxsDQo+IGNhc2VzOg0KPiAx LiByZWxlYXNlIHNmdCByZXNldA0KPiAyLiBlbmFibGUgc2Z0IGNsb2NrDQo+IDMuIHdhaXQgYSBs aXR0bGUgZm9yIHJlc2V0IHRvIHByb3BhZ2F0ZSBvciBBREIgdG8gYWNrIHBvd2VyIHVwDQoNClJl c2V0IGZsb3cgaXM6IGFzc2VydCByZXNldCwgZGVhc3NlcnQgcmVzZXQsIGVuYWJsZSBjbGsNCkhh bmRzaGFrZSBmbG93OiBkZWFzc2VydCByZXNldCwgZW5hYmxlIGNsay4NCg0KUGVyIG15IHByZXZp b3VzIHRlc3QsIHVzZSByZXNldCBmbG93IGZvciBoYW5kc2hha2Ugc2VlbXMNCm5vdCB3b3JrLiBJ IGNvdWxkIHJlY2FsbCBjbGVhcmx5Lg0KDQo+IA0KPiA+ICtkaXNhYmxlX2NsazoNCj4gPiArCWNs a19idWxrX2Rpc2FibGVfdW5wcmVwYXJlKGJsa19jdGwtPm51bV9jbGtzLCBibGtfY3RsLT5jbGtz KTsNCj4gPiArDQo+ID4gKwltdXRleF91bmxvY2soJmJsa19jdGwtPmxvY2spOw0KPiA+ICsNCj4g PiArCXJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgaW14X2Jsa19j dGxfcG93ZXJfb2ZmKHN0cnVjdCBnZW5lcmljX3BtX2RvbWFpbiAqZG9tYWluKSB7DQo+ID4gKwlz dHJ1Y3QgaW14X2Jsa19jdGxfZG9tYWluICpwZCA9IHRvX2lteF9ibGtfY3RsX3BkKGRvbWFpbik7 DQo+ID4gKwlzdHJ1Y3QgaW14X2Jsa19jdGwgKmJsa19jdGwgPSBwZC0+YmxrX2N0bDsNCj4gPiAr CXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGJsa19jdGwtPnJlZ21hcDsNCj4gPiArCWNvbnN0IHN0 cnVjdCBpbXhfYmxrX2N0bF9odyAqaHcgPSAmYmxrX2N0bC0+ZGV2X2RhdGEtPnBkc1twZC0+aWRd Ow0KPiA+ICsJaW50IHJldCA9IDA7DQo+ID4gKw0KPiA+ICsJbXV0ZXhfbG9jaygmYmxrX2N0bC0+ bG9jayk7DQo+ID4gKw0KPiA+ICsJcmV0ID0gY2xrX2J1bGtfcHJlcGFyZV9lbmFibGUoYmxrX2N0 bC0+bnVtX2Nsa3MsIGJsa19jdGwtPmNsa3MpOw0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCW11 dGV4X3VubG9jaygmYmxrX2N0bC0+bG9jayk7DQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArCX0N Cj4gPiArDQo+ID4gKwlpZiAoIShody0+ZmxhZ3MgJiBJTVhfQkxLX0NUTF9QRF9IQU5EU0hBS0Up KSB7DQo+ID4gKwkJcmV0ID0gcmVnbWFwX2NsZWFyX2JpdHMocmVnbWFwLCBody0+b2Zmc2V0LCBo dy0+bWFzayk7DQo+ID4gKwkJaWYgKHJldCkNCj4gPiArCQkJZ290byBkaXNhYmxlX2NsazsNCj4g PiArDQo+ID4gKwkJaWYgKGh3LT5mbGFncyAmIElNWF9CTEtfQ1RMX1BEX1JFU0VUKSB7DQo+ID4g KwkJCXJldCA9IHJlZ21hcF9jbGVhcl9iaXRzKHJlZ21hcCwgaHctPnJzdF9vZmZzZXQsDQo+IGh3 LT5yc3RfbWFzayk7DQo+ID4gKwkJCWlmIChyZXQpDQo+ID4gKwkJCQlnb3RvIGRpc2FibGVfY2xr Ow0KPiA+ICsJCX0NCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJcmV0ID0gaW14X2Jsa19jdGxfZW5h YmxlX2hzayhibGtfY3RsLT5kZXYpOw0KPiANCj4gV2h5IHdvdWxkIHdlIG5lZWQgdG8gZW5hYmxl IHRoZSBoYW5kc2hha2UgYWdhaW4gaW4gdGhlIHBvd2VyIERPV04NCj4gcGF0aD8NCj4gVGhlIGNs b2NrL3Jlc2V0IGJpdHMgc2hvdWxkIHN0aWxsIGJlIHNldCBmcm9tIHRoZSBwb3dlciB1cC4gVGhl IHBvd2VyIGRvd24NCj4gc2hvdWxkIHByb2JhYmx5IGp1c3QgYmUgYSBuby1vcCBmb3IgdGhlIGJs ay1jdGwgYnVzIGRvbWFpbnMsIHRvIGFsbG93IHRoZQ0KPiBwcm9wZXIgQURCIGhhbmRzaGFrZSBp biB0aGUgUEdDIGRvbWFpbiBwb3dlci1kb3duLg0KDQpJIGV4cG9ydGVkIFZQVS1IMSBhcyBWUFUt QlVTIGZvciBoYW5kc2hha2UsIGJlY2F1c2UgdGhleSBzaGFyZQ0Kc2FtZSBiaXRzLiAgQnV0IHlv dSByYWlzZSBhIHZhbGlkIGlkZWEsIEkgdGhpbmsgSSBjb3VsZCBkcm9wIFZQVS1CVVMsDQp0aGVu IGp1c3Qgbm8tb3AgaGVyZS4NCg0KQlRXOiBidXMgc2hvdWxkIGJlIGVuYWJsZWQgd2hlbiBwb3dl ciBkb3duIG90aGVycy4NCg0KPiANCj4gPiArCQlpZiAocmV0KQ0KPiA+ICsJCQlkZXZfZXJyKGJs a19jdGwtPmRldiwgIkhhbmRzaGFrZSBmYWlsZWQgd2hlbiBwb3dlciBvZmZcbiIpOw0KPiA+ICsJ fQ0KPiA+ICsNCj4gPiArZGlzYWJsZV9jbGs6DQo+ID4gKwljbGtfYnVsa19kaXNhYmxlX3VucHJl cGFyZShibGtfY3RsLT5udW1fY2xrcywgYmxrX2N0bC0+Y2xrcyk7DQo+ID4gKw0KPiA+ICsJbXV0 ZXhfdW5sb2NrKCZibGtfY3RsLT5sb2NrKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGlteF9ibGtfY3RsX3Byb2JlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpIHsNCj4gPiArCXN0cnVjdCBpbXhfYmxrX2N0bF9kb21haW4gKmRv bWFpbiA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOw0KPiA+ICsJc3RydWN0IGlteF9ibGtfY3Rs ICpibGtfY3RsID0gZG9tYWluLT5ibGtfY3RsOw0KPiA+ICsJc3RydWN0IGdlbmVyaWNfcG1fZG9t YWluICpwYXJlbnRfZ2VucGQ7DQo+ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2 Ow0KPiA+ICsJc3RydWN0IGRldmljZSAqYWN0aXZlX3BkOw0KPiA+ICsJaW50IHJldDsNCj4gPiAr DQo+ID4gKwlwZGV2LT5kZXYub2Zfbm9kZSA9IGJsa19jdGwtPmRldi0+b2Zfbm9kZTsNCj4gPiAr DQo+ID4gKwlpZiAoZG9tYWluLT5ody0+YWN0aXZlX3BkX25hbWUpIHsNCj4gPiArCQlhY3RpdmVf cGQgPSBkZXZfcG1fZG9tYWluX2F0dGFjaF9ieV9uYW1lKGRldiwNCj4gZG9tYWluLT5ody0+YWN0 aXZlX3BkX25hbWUpOw0KPiA+ICsJCWlmIChJU19FUlJfT1JfTlVMTChhY3RpdmVfcGQpKSB7DQo+ ID4gKwkJCXJldCA9IFBUUl9FUlIoYWN0aXZlX3BkKSA/IDogLUVOT0RBVEE7DQo+ID4gKwkJCXBk ZXYtPmRldi5vZl9ub2RlID0gTlVMTDsNCj4gDQo+IFRoaXMgaXMgZXh0cmVtZWx5IHVnbHkuIEkg dGhpbmsgd2Ugc2hvdWxkIG5vdCBldmVuIGhhdmUgc2VwYXJhdGUgcGxhdGZvcm0NCj4gZHJpdmVy cyBmb3IgdGhlIGJsay1jdGwgZG9tYWlucywgdGhlcmUgaXMganVzdCBubyByZWFzb24gZm9yIGl0 LiBTZWUgYmVsb3cgZm9yDQo+IG1vcmUgY29tbWVudHMgaW4gdGhhdCBkaXJlY3Rpb24uDQo+IA0K PiA+ICsJCQlyZXR1cm4gcmV0Ow0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJZG9tYWluLT5hY3Rp dmVfcGQgPSBhY3RpdmVfcGQ7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCWlmICghYmxrX2N0bC0+ YnVzX2RvbWFpbikgew0KPiA+ICsJCQlwZGV2LT5kZXYub2Zfbm9kZSA9IE5VTEw7DQo+ID4gKwkJ CXJldHVybiAtRVBST0JFX0RFRkVSOw0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwlp ZiAoZG9tYWluLT5ody0+YWN0aXZlX3BkX25hbWUpDQo+ID4gKwkJcGFyZW50X2dlbnBkID0gcGRf dG9fZ2VucGQoYWN0aXZlX3BkLT5wbV9kb21haW4pOw0KPiA+ICsJZWxzZQ0KPiA+ICsJCXBhcmVu dF9nZW5wZCA9IGJsa19jdGwtPmJ1c19kb21haW47DQo+ID4gKw0KPiA+ICsJaWYgKHBtX2dlbnBk X2FkZF9zdWJkb21haW4ocGFyZW50X2dlbnBkLCAmZG9tYWluLT5nZW5wZCkpIHsNCj4gPiArCQlk ZXZfd2FybihkZXYsICJmYWlsZWQgdG8gYWRkIHN1YmRvbWFpbjogJXNcbiIsDQo+IGRvbWFpbi0+ Z2VucGQubmFtZSk7DQo+IA0KPiBJIGRvbid0IHNlZSB3aGVyZSB0aGUgZGlzcG1peF9idXMgZG9t YWluIGFuZCBjbG9jayBpcyBrZXB0IGVuYWJsZWQuIEkgd291bGQNCj4gZ3Vlc3MgdGhhdCB0aGUg YnVzIGRvbWFpbiBzaG91bGQgYmUgc29tZSBraW5kIG9mIHBhcmVudCB0byB0aGUgbGNkaWYgYW5k IG1pcGkNCj4gZG9tYWlucywNCg0KWWVzLiB2cHVtaXgtYmxrLWN0bCBidXMgZG9tYWluIGlzIHBh cmVudCB0byB2cHUtZzEvZzIgYW5kIHNpbWlsYXIgdG8gb3RoZXJzLg0KDQogYXMgSSBkb24ndCB0 aGluayBpdCB3b3VsZCBiZSBva2F5IHRvIGRpc2FibGUgdGhlIGJ1cyBjbG9jaywgd2hpbGUgYW55 DQo+IG9mIHRoZSBwZXJpcGhlcmFscyBpbiB0aGUgZGlzcG1peCBjb21wbGV4IGFyZSBzdGlsbCBh Y3RpdmUuIEFtIEkgbWlzc2luZw0KPiBzb21ldGhpbmcgaGVyZT8NCg0KWW91IGFyZSByaWdodCwg YnVzIGNsb2NrIHNob3VsZCBiZSBhbHdheXMga2VwdCBlbmFibGUgaWYgYW55IHBlcmlwaGFscyBp bg0KZGlzcG1peCBpcyBhbGl2ZS4NCg0KPiANCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJbXV0ZXhf bG9jaygmYmxrX2N0bC0+bG9jayk7DQo+ID4gKwkJZG9tYWluLT5ob29rZWQgPSB0cnVlOw0KPiA+ ICsJCW11dGV4X3VubG9jaygmYmxrX2N0bC0+bG9jayk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJ cmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgaW14X2Jsa19jdGxfcmVt b3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpIHsNCj4gPiArCXN0cnVjdCBpbXhfYmxr X2N0bF9kb21haW4gKmRvbWFpbiA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOw0KPiA+ICsJc3Ry dWN0IGlteF9ibGtfY3RsICpibGtfY3RsID0gZG9tYWluLT5ibGtfY3RsOw0KPiA+ICsJc3RydWN0 IGdlbmVyaWNfcG1fZG9tYWluICpwYXJlbnRfZ2VucGQ7DQo+ID4gKwlzdHJ1Y3QgZGV2aWNlICph Y3RpdmVfcGQ7DQo+ID4gKw0KPiA+ICsJaWYgKGRvbWFpbi0+aHctPmFjdGl2ZV9wZF9uYW1lKQ0K PiA+ICsJCXBhcmVudF9nZW5wZCA9IHBkX3RvX2dlbnBkKGFjdGl2ZV9wZC0+cG1fZG9tYWluKTsN Cj4gDQo+IFRoaXMgaGFzIHByb2JhYmx5IG5ldmVyIGJlZW4gdGVzdGVkLiBhY3RpdmVfcGQgaXMg dW5kZWZpbmVkIGF0IHRoaXMgcG9pbnQsIHNvDQo+IHdpbGwgbW9zdCBsaWtlbHkgbGVhZCB0byBh IGtlcm5lbCBjcmFzaC4NCg0KTXkgYmFkLiBJbmRlZWQsIHJlbW92ZSBub3QgdGVzdGVkLg0KDQo+ ID4gKwllbHNlDQo+ID4gKwkJcGFyZW50X2dlbnBkID0gYmxrX2N0bC0+YnVzX2RvbWFpbjsNCj4g PiArDQo+ID4gKwlwbV9nZW5wZF9yZW1vdmVfc3ViZG9tYWluKHBhcmVudF9nZW5wZCwgJmRvbWFp bi0+Z2VucGQpOw0KPiA+ICsNCj4gPiArCW11dGV4X2xvY2soJmJsa19jdGwtPmxvY2spOw0KPiA+ ICsJZG9tYWluLT5ob29rZWQgPSBmYWxzZTsNCj4gPiArCW11dGV4X3VubG9jaygmYmxrX2N0bC0+ bG9jayk7DQo+ID4gKw0KPiA+ICsJaWYgKGRvbWFpbi0+aHctPmFjdGl2ZV9wZF9uYW1lKQ0KPiA+ ICsJCWRldl9wbV9kb21haW5fZGV0YWNoKGRvbWFpbi0+YWN0aXZlX3BkLCBmYWxzZSk7DQo+ID4g Kw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlX2lkIGlteF9ibGtfY3RsX2lkW10gPSB7DQo+ID4gKwl7ICJpbXgt dnB1bWl4LWJsay1jdGwiLCB9LA0KPiA+ICsJeyAiaW14LWRpc3BtaXgtYmxrLWN0bCIsIH0sDQo+ ID4gKwl7IH0sDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2Ry aXZlciBpbXhfYmxrX2N0bF9kcml2ZXIgPSB7DQo+ID4gKwkuZHJpdmVyID0gew0KPiA+ICsJCS5u YW1lID0gImlteC1ibGstY3RsIiwNCj4gPiArCX0sDQo+ID4gKwkucHJvYmUgICAgPSBpbXhfYmxr X2N0bF9wcm9iZSwNCj4gPiArCS5yZW1vdmUgICA9IGlteF9ibGtfY3RsX3JlbW92ZSwNCj4gPiAr CS5pZF90YWJsZSA9IGlteF9ibGtfY3RsX2lkLA0KPiA+ICt9Ow0KPiA+ICtidWlsdGluX3BsYXRm b3JtX2RyaXZlcihpbXhfYmxrX2N0bF9kcml2ZXIpDQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0 IGdlbmVyaWNfcG1fZG9tYWluICppbXhfYmxrX2N0bF9nZW5wZF94bGF0ZShzdHJ1Y3QNCj4gb2Zf cGhhbmRsZV9hcmdzICpnZW5wZHNwZWMsDQo+ID4gKwkJCQkJCQkgdm9pZCAqZGF0YSkNCj4gPiAr ew0KPiA+ICsJc3RydWN0IGdlbnBkX29uZWNlbGxfZGF0YSAqZ2VucGRfZGF0YSA9IGRhdGE7DQo+ ID4gKwl1bnNpZ25lZCBpbnQgaWR4ID0gZ2VucGRzcGVjLT5hcmdzWzBdOw0KPiA+ICsJc3RydWN0 IGlteF9ibGtfY3RsX2RvbWFpbiAqZG9tYWluOw0KPiA+ICsJc3RydWN0IGdlbmVyaWNfcG1fZG9t YWluICpnZW5wZCA9IEVSUl9QVFIoLUVQUk9CRV9ERUZFUik7DQo+ID4gKw0KPiA+ICsJaWYgKGdl bnBkc3BlYy0+YXJnc19jb3VudCAhPSAxKQ0KPiA+ICsJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwp Ow0KPiA+ICsNCj4gPiArCWlmIChpZHggPj0gZ2VucGRfZGF0YS0+bnVtX2RvbWFpbnMpDQo+ID4g KwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7DQo+ID4gKw0KPiA+ICsJaWYgKCFnZW5wZF9kYXRh LT5kb21haW5zW2lkeF0pDQo+ID4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7DQo+ID4gKw0K PiA+ICsJZG9tYWluID0gdG9faW14X2Jsa19jdGxfcGQoZ2VucGRfZGF0YS0+ZG9tYWluc1tpZHhd KTsNCj4gPiArDQo+ID4gKwltdXRleF9sb2NrKCZkb21haW4tPmJsa19jdGwtPmxvY2spOw0KPiA+ ICsJaWYgKGRvbWFpbi0+aG9va2VkKQ0KPiA+ICsJCWdlbnBkID0gZ2VucGRfZGF0YS0+ZG9tYWlu c1tpZHhdOw0KPiA+ICsJbXV0ZXhfdW5sb2NrKCZkb21haW4tPmJsa19jdGwtPmxvY2spOw0KPiA+ ICsNCj4gPiArCXJldHVybiBnZW5wZDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAraW50IGlteF9ibGtf Y3RsX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldikgew0KPiA+ICsJc3RydWN0IGlteF9ibGtf Y3RsICpibGtfY3RsID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQo+ID4gKwljb25zdCBzdHJ1Y3Qg aW14X2Jsa19jdGxfZGV2X2RhdGEgKmRldl9kYXRhID0gYmxrX2N0bC0+ZGV2X2RhdGE7DQo+ID4g KwlpbnQgbnVtID0gZGV2X2RhdGEtPnBkc19udW07DQo+ID4gKwlzdHJ1Y3QgaW14X2Jsa19jdGxf ZG9tYWluICpkb21haW47DQo+ID4gKwlzdHJ1Y3QgZ2VuZXJpY19wbV9kb21haW4gKmdlbnBkOw0K PiA+ICsJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRfcGRldjsNCj4gPiArCWludCBkb21haW5f aW5kZXg7DQo+ID4gKwlpbnQgaSwgcmV0Ow0KPiA+ICsNCj4gPiArCWJsa19jdGwtPm9uZWNlbGxf ZGF0YS5udW1fZG9tYWlucyA9IG51bTsNCj4gPiArCWJsa19jdGwtPm9uZWNlbGxfZGF0YS54bGF0 ZSA9IGlteF9ibGtfY3RsX2dlbnBkX3hsYXRlOw0KPiA+ICsJYmxrX2N0bC0+b25lY2VsbF9kYXRh LmRvbWFpbnMgPSBkZXZtX2tjYWxsb2MoZGV2LCBudW0sIHNpemVvZihzdHJ1Y3QNCj4gZ2VuZXJp Y19wbV9kb21haW4gKiksDQo+ID4gKwkJCQkJCSAgICAgR0ZQX0tFUk5FTCk7DQo+ID4gKwlpZiAo IWJsa19jdGwtPm9uZWNlbGxfZGF0YS5kb21haW5zKQ0KPiA+ICsJCXJldHVybiAtRU5PTUVNOw0K PiA+ICsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgew0KPiA+ICsJCWRvbWFpbl9p bmRleCA9IGRldl9kYXRhLT5wZHNbaV0uaWQ7DQo+ID4gKwkJaWYgKGRvbWFpbl9pbmRleCA+PSBu dW0pIHsNCj4gPiArCQkJZGV2X3dhcm4oZGV2LCAiRG9tYWluIGluZGV4ICVkIGlzIG91dCBvZiBi b3VuZHNcbiIsDQo+IGRvbWFpbl9pbmRleCk7DQo+ID4gKwkJCWNvbnRpbnVlOw0KPiA+ICsJCX0N Cj4gPiArDQo+ID4gKwkJZG9tYWluID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKHN0cnVjdCBp bXhfYmxrX2N0bF9kb21haW4pLA0KPiBHRlBfS0VSTkVMKTsNCj4gPiArCQlpZiAoIWRvbWFpbikN Cj4gPiArCQkJZ290byBlcnJvcjsNCj4gPiArDQo+ID4gKwkJcGRfcGRldiA9IHBsYXRmb3JtX2Rl dmljZV9hbGxvYyhkZXZfZGF0YS0+bmFtZSwgZG9tYWluX2luZGV4KTsNCj4gPiArCQlpZiAoIXBk X3BkZXYpIHsNCj4gPiArCQkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgcGxhdGZv cm0gZGV2aWNlXG4iKTsNCj4gPiArCQkJZ290byBlcnJvcjsNCj4gPiArCQl9DQo+IA0KPiBXZSBk b24ndCBuZWVkIGEgZnVsbCBibG93IHBsYXRmb3JtIGRldmljZSBhbmQgYSBkcml2ZXIgZm9yIHRo ZSBpbmRpdmlkdWFsDQo+IGRvbWFpbnMuIFRoZSBvbmx5IHBvaW50IHdoZXJlIHdlIG5lZWQgdGhl IGRldmljZSBpcyB0byBhdHRhY2ggdGhlIHBhcmVudA0KPiBQR0MgcG93ZXIgZG9tYWlucyBhbmQg Zm9yIHRoaXMgd2Ugb25seSBuZWVkIGEgZGV2aWNlLg0KPiANCj4gU28gd2UgY291bGQgZWl0aGVy IGhhdmUgYSBkdW1teSBkZXZpY2UgZm9yIHRoaXMgdXNhZ2UgaW4gdGhlIGRvbWFpbiBvciB3ZQ0K PiBjb3VsZCBldmVuIHJldXNlIHRoZSBkZXZpY2UgaW4gdGhlIGdlbnBkLCB3aGljaCBpcyBpbml0 aWFsaXplZCBpbg0KPiBwbV9nZW5wZF9pbml0Lg0KPiANCj4gTm93IHdoaWxlIEkgdGhpbmsgYWJv dXQgaXQuLi4gZ2VucGRfZGV2X3BtX2F0dGFjaF9ieV9uYW1lIGFscmVhZHkNCj4gYWxsb2NhdGVz IHRoZSB2aXJ0dWFsIGR1bW15IGRldmljZS4gSSBkb24ndCB0aGluayB3ZSBuZWVkIHRvIGRvIGFu eXRoaW5nIGhlcmUNCj4gb24gb3VyIG93bi4gSnVzdCBnZXQgcmlkIG9mIHRoZSBwbGF0Zm9ybSBk ZXZpY2UgYW5kIGRyaXZlci4NCg0Kb2ssIGxldCBtZSByZXRoaW5rIGFib3V0IGl0LiBJZiB5b3Ug aGF2ZSBjaGFuY2UgdG8gYmUgb24gSVJDLCBJIGNvdWxkIHRhbGsNCndpdGggeW91IGxhdGVyIGlm IEkgY29tZSBhYm91dCBuZXcgaW1wbGVtZW50YXRpb24uDQoNCj4gDQo+ID4gKw0KPiA+ICsJCXBk X3BkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gZG9tYWluOw0KPiA+ICsNCj4gPiArCQlkb21haW4t PmJsa19jdGwgPSBibGtfY3RsOw0KPiA+ICsJCWRvbWFpbi0+aHcgPSAmZGV2X2RhdGEtPnBkc1tp XTsNCj4gPiArCQlkb21haW4tPmlkID0gZG9tYWluX2luZGV4Ow0KPiA+ICsJCWRvbWFpbi0+Z2Vu cGQubmFtZSA9IGRldl9kYXRhLT5wZHNbaV0ubmFtZTsNCj4gPiArCQlkb21haW4tPmdlbnBkLnBv d2VyX29mZiA9IGlteF9ibGtfY3RsX3Bvd2VyX29mZjsNCj4gPiArCQlkb21haW4tPmdlbnBkLnBv d2VyX29uID0gaW14X2Jsa19jdGxfcG93ZXJfb247DQo+ID4gKwkJZG9tYWluLT5kZXYgPSAmcGRf cGRldi0+ZGV2Ow0KPiA+ICsJCWRvbWFpbi0+aG9va2VkID0gZmFsc2U7DQo+ID4gKw0KPiA+ICsJ CXJldCA9IHBtX2dlbnBkX2luaXQoJmRvbWFpbi0+Z2VucGQsIE5VTEwsIHRydWUpOw0KPiA+ICsJ CXBkX3BkZXYtPmRldi5wYXJlbnQgPSBkZXY7DQo+ID4gKw0KPiA+ICsJCWlmIChkb21haW4tPmh3 LT5mbGFncyAmIElNWF9CTEtfQ1RMX1BEX0hBTkRTSEFLRSkNCj4gPiArCQkJYmxrX2N0bC0+YnVz X2RvbWFpbiA9ICZkb21haW4tPmdlbnBkOw0KPiA+ICsNCj4gPiArCQlyZXQgPSBwbGF0Zm9ybV9k ZXZpY2VfYWRkKHBkX3BkZXYpOw0KPiA+ICsJCWlmIChyZXQpIHsNCj4gPiArCQkJcGxhdGZvcm1f ZGV2aWNlX3B1dChwZF9wZGV2KTsNCj4gPiArCQkJZ290byBlcnJvcjsNCj4gPiArCQl9DQo+IA0K PiBUaGVyZSBpcyByZWFsbHkgbm8gbmVlZCBmb3IgdGhlIGNvbXBsZXhpdHkgd2l0aCB0aGUgaG9v a2VkIHByb3BlcnR5ICh0aGUNCj4gbXV0ZXggYXJvdW5kIHRoZSByZWFkL3dyaXRlIGFjY2VzcyBz dGlsbCBkb2Vzbid0IG1ha2UgaXQgcHJvcGVybHkgdGhyZWFkIHNhZmUpDQo+IGFuZCB0aGUgYmxr LWN0bCBkb21haW4gcHJvYmUvcmVtb3ZlIGNhbGxzLiBKdXN0IGhhbmRsZSBldmVyeXRoaW5nIHdp dGhpbiB0aGlzDQo+IGxvb3AuIFRoaXMgd291bGQgbWFrZSB0aGUgZHJpdmVyIGEgd2hvbGUgbG90 IG1vcmUgZWFzeSB0byBmb2xsb3cuDQoNCkkgc2VlLg0KDQo+IA0KPiA+ICsJCWJsa19jdGwtPm9u ZWNlbGxfZGF0YS5kb21haW5zW2ldID0gJmRvbWFpbi0+Z2VucGQ7DQo+ID4gKwl9DQo+ID4gKw0K PiA+ICsJcmV0dXJuIG9mX2dlbnBkX2FkZF9wcm92aWRlcl9vbmVjZWxsKGRldi0+b2Zfbm9kZSwN Cj4gPiArJmJsa19jdGwtPm9uZWNlbGxfZGF0YSk7DQo+ID4gKw0KPiA+ICtlcnJvcjoNCj4gPiAr CWZvciAoOyBpID49IDA7IGktLSkgew0KPiA+ICsJCWdlbnBkID0gYmxrX2N0bC0+b25lY2VsbF9k YXRhLmRvbWFpbnNbaV07DQo+ID4gKwkJaWYgKCFnZW5wZCkNCj4gPiArCQkJY29udGludWU7DQo+ ID4gKwkJZG9tYWluID0gdG9faW14X2Jsa19jdGxfcGQoZ2VucGQpOw0KPiA+ICsJCWlmIChkb21h aW4tPmRldikNCj4gPiArCQkJcGxhdGZvcm1fZGV2aWNlX3B1dCh0b19wbGF0Zm9ybV9kZXZpY2Uo ZG9tYWluLT5kZXYpKTsNCj4gPiArCX0NCj4gPiArCXJldHVybiByZXQ7DQo+ID4gK30NCj4gPiAr RVhQT1JUX1NZTUJPTF9HUEwoaW14X2Jsa19jdGxfcmVnaXN0ZXIpOw0KPiA+ICsNCj4gPiArY29u c3Qgc3RydWN0IGRldl9wbV9vcHMgaW14X2Jsa19jdGxfcG1fb3BzID0gew0KPiA+ICsJU0VUX1NZ U1RFTV9TTEVFUF9QTV9PUFMocG1fcnVudGltZV9mb3JjZV9zdXNwZW5kLA0KPiA+ICtwbV9ydW50 aW1lX2ZvcmNlX3Jlc3VtZSkgfTsNCj4gRVhQT1JUX1NZTUJPTF9HUEwoaW14X2Jsa19jdGxfcG1f b3BzKTsNCj4gDQo+IFRoaXMgY29kZSBpcyBsaW5rZWQgaW50byB0aGUgc2FtZSBtb2R1bGUgYXMg dGhlIHBsYXRmb3JtIGRyaXZlciB1c2luZyBpdC4gU28NCj4gdGhlcmUgaXMgbm8gbmVlZCB0byBl eHBvcnQgdGhvc2Ugc3ltYm9scyBhbmQgZXhwb3NlIHRoZW0gdG8gdGhlIHdob2xlDQo+IGtlcm5l bC4NCg0KU3VyZS4gRml4IGluIG5leHQgdmVyc2lvbi4NCg0KPiANCj4gPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9zb2MvaW14L2Jsay1jdGwuaCBiL2RyaXZlcnMvc29jL2lteC9ibGstY3RsLmggbmV3 DQo+ID4gZmlsZSBtb2RlIDEwMDY0NCBpbmRleCAwMDAwMDAwMDAwMDAuLjY3ODBkMDBlYzhjNQ0K PiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL3NvYy9pbXgvYmxrLWN0bC5oDQo+ ID4gQEAgLTAsMCArMSw4NSBAQA0KPiA+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMCAqLyAjaWZuZGVmIF9fU09DX0lNWF9CTEtfQ1RMX0gNCj4gPiArI2RlZmluZSBfX1NPQ19J TVhfQkxLX0NUTF9IDQo+ID4gKw0KPiA+ICtlbnVtIGlteF9ibGtfY3RsX3BkX3R5cGUgew0KPiA+ ICsJQkxLX0NUTF9QRCwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCBpbXhfYmxrX2N0bF9o dyB7DQo+ID4gKwlpbnQgdHlwZTsNCj4gDQo+IEluaXRpYWxpemVkLCBidXQgdW51c2VkLg0KPiAN Cj4gPiArCWNoYXIgKm5hbWU7DQo+ID4gKwljaGFyICphY3RpdmVfcGRfbmFtZTsNCj4gPiArCXUz MiBvZmZzZXQ7DQo+ID4gKwl1MzIgbWFzazsNCj4gDQo+IG9mZnNldCBhbmQgbWFzayBhcmUgd2F5 IHRvbyBnZW5lcmljIG5hbWVzLiBJIGhhZCB0byBzcGVuZCBzb21lIHRpbWUgcmVhZGluZw0KPiB0 aGUgZHJpdmVyIHRvIGZpbmQgb3V0IHRoYXQgdGhvc2UgYXJlIHRoZSBjbG9jayBlbmFibGUgYml0 cy4NCj4gVGhpcyBzaG91bGQgYmUgY2xlYXIgZnJvbSB0aGUgbmFtaW5nLg0KPiANCj4gPiArCXUz MiBmbGFnczsNCj4gPiArCXUzMiBpZDsNCj4gPiArCXUzMiByc3Rfb2Zmc2V0Ow0KPiA+ICsJdTMy IHJzdF9tYXNrOw0KPiA+ICsJdTMyIGVycmF0YTsNCj4gDQo+IFVudXNlZC4NCj4gDQo+ID4gK307 DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgaW14X2Jsa19jdGxfZG9tYWluIHsNCj4gPiArCXN0cnVjdCBn ZW5lcmljX3BtX2RvbWFpbiBnZW5wZDsNCj4gPiArCXN0cnVjdCBkZXZpY2UgKmFjdGl2ZV9wZDsN Cj4gPiArCXN0cnVjdCBpbXhfYmxrX2N0bCAqYmxrX2N0bDsNCj4gPiArCXN0cnVjdCBpbXhfYmxr X2N0bF9odyAqaHc7DQo+ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7DQo+ID4gKwlib29sIGhvb2tl ZDsNCj4gPiArCXUzMiBpZDsNCj4gDQo+IFRoZXJlIGFyZSBhbHJlYWR5IGEgbG90IG9mIHBvaW50 ZXJzIGJldHdlZW4gdGhlIGRpZmZlcmVudCBzdHJ1Y3R1cmVzLg0KPiBXaHkgZG8gd2UgbmVlZCB0 aG9zZSBpZCBwcm9wZXJ0aWVzPyBZb3Ugc2hvdWxkIGJlIGFibGUgdG8gZ2V0IHRvIGFsbCBuZWVk ZWQNCj4gaW5mb3JtYXRpb24gYnkgY2hhc2luZyBwb2ludGVycywgaW5zdGVhZCBvZiAgaW5kZXhp bmcgaW50byBhcnJheXMuIFJlYWxseSB0aGUNCj4gb25seSBwb2ludCB3aGVyZSBhIGlkLT5kb21h aW4gbWFwcGluZyBpcyBkb25lIHNob3VsZCBiZSB0aGUgeGxhdGUgZnVuY3Rpb24uDQoNCldpbGwg c2ltcGxpZnkgdGhpcy4NCg0KPiANCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCBpbXhfYmxr X2N0bF9kZXZfZGF0YSB7DQo+ID4gKwlzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBjb25maWc7DQo+ID4g KwlzdHJ1Y3QgaW14X2Jsa19jdGxfaHcgKnBkczsNCj4gPiArCXN0cnVjdCBpbXhfYmxrX2N0bF9o dyAqaHdfaHNrOw0KPiA+ICsJdTMyIHBkc19udW07DQo+ID4gKwl1MzIgbWF4X251bTsNCj4gPiAr CWNoYXIgKm5hbWU7DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgaW14X2Jsa19jdGwgew0K PiA+ICsJc3RydWN0IGRldmljZSAqZGV2Ow0KPiA+ICsJc3RydWN0IHJlZ21hcCAqcmVnbWFwOw0K PiA+ICsJc3RydWN0IGdlbnBkX29uZWNlbGxfZGF0YSBvbmVjZWxsX2RhdGE7DQo+ID4gKwljb25z dCBzdHJ1Y3QgaW14X2Jsa19jdGxfZGV2X2RhdGEgKmRldl9kYXRhOw0KPiA+ICsJc3RydWN0IGNs a19idWxrX2RhdGEgKmNsa3M7DQo+ID4gKwl1MzIgbnVtX2Nsa3M7DQo+ID4gKwlzdHJ1Y3QgZ2Vu ZXJpY19wbV9kb21haW4gKmJ1c19kb21haW47DQo+IA0KPiBUaGVyZSBzaG91bGQgYmUgbm90aGlu ZyBzcGVjaWFsIGFib3V0IHRoZSBidXMgZG9tYWluIGF0IGFsbC4gUmlnaHQgbm93IHRoaXMNCj4g cGVybWVhdGVzIHRocm91Z2ggdGhlIHdob2xlIGRyaXZlciB0aGF0IHRoZSBidXMgZG9tYWluIGlz IHNvbWVob3cgc3BlY2lhbC4NCj4gSXQgc2hvdWxkIGp1c3QgYmUgYSBwYXJlbnQgZG9tYWluIG9m IHRoZSBvdGhlciBkb21haW5zLCBvciBrZXB0IGFsaXZlIHZpYSBzb21lDQo+IG90aGVyIGFwcHJv cHJpYXRlIG1lYW5zLg0KDQpPaywgd2lsbCB0cnkgdG8gbWFrZSBpdCBhIGdlbmVyaWMgcGFyZW50 IGRvbWFpbi4NCg0KPiANCj4gPiArDQo+ID4gKwlzdHJ1Y3QgbXV0ZXggbG9jazsNCj4gDQo+IFRo aXMgbXV0ZXggaXMgb25seSB1c2VkIGluIHRoZSBjb21tb24gYmxrLWN0bCBjb2RlLCBidXQgaXMg aW5pdGlhbGl6ZWQgaW4NCj4gaW14OG1tX2Jsa19jdHJsX3Byb2JlLiBUaGlzIHNlZW1zIHZlcnkg aW5jb25zaXN0ZW50LiBJIHdvdWxkIGhhdmUgZXhwZWN0ZWQNCj4gdGhpcyBtdXRleCB0byBiZSBp bml0aWFsaXplZCBpbiBpbXhfYmxrX2N0bF9yZWdpc3Rlci4gSG93ZXZlciwgb25jZSB5b3UgZ2V0 IHJpZA0KPiBvZiB0aGUgaG9va2VkIGFuZCBidXMgZG9tYWluIG1hZ2ljLCB0aGlzIG11dGV4IG1h eSBhcyB3ZWxsIGJlIHBlci1kb21haW4sDQo+IGF0IHdoaWNoIHBvaW50IEkgdGhpbmsgeW91IGRv bid0IGV2ZW4gbmVlZCB0aGUgbXV0ZXgsIGFzIHRoZSBnZW5wZCBsb2NraW5nDQo+IHNob3VsZCBi ZSBlbm91Z2ggdGhlbi4NCg0KTGV0IG1lIHJld3JpdGUgdGhlIGNvZGUgYW5kIHNlZSBob3cgaXQg Z29lcy4NCg0KVGhhbmtzLA0KUGVuZy4NCg0KPiANCj4gPiArfTsNCj4gPiArDQo+ID4gKyNkZWZp bmUgSU1YX0JMS19DVEwoX3R5cGUsIF9uYW1lLCBfYWN0aXZlX3BkLCBfaWQsIF9vZmZzZXQsIF9t YXNrLA0KPiBfcnN0X29mZnNldCwgX3JzdF9tYXNrLAlcDQo+ID4gKwkJICAgIF9mbGFncywgX2Vy cmF0YSkJCQkJCQkJCVwNCj4gPiArCXsJCQkJCQkJCQkJCVwNCj4gPiArCQkudHlwZSA9IF90eXBl LAkJCQkJCQkJCVwNCj4gPiArCQkubmFtZSA9IF9uYW1lLAkJCQkJCQkJCVwNCj4gPiArCQkuYWN0 aXZlX3BkX25hbWUgPSBfYWN0aXZlX3BkLAkJCQkJCQlcDQo+ID4gKwkJLmlkID0gX2lkLAkJCQkJ CQkJCVwNCj4gPiArCQkub2Zmc2V0ID0gX29mZnNldCwJCQkJCQkJCVwNCj4gPiArCQkubWFzayA9 IF9tYXNrLAkJCQkJCQkJCVwNCj4gPiArCQkuZmxhZ3MgPSBfZmxhZ3MsCQkJCQkJCQlcDQo+ID4g KwkJLnJzdF9vZmZzZXQgPSBfcnN0X29mZnNldCwJCQkJCQkJXA0KPiA+ICsJCS5yc3RfbWFzayA9 IF9yc3RfbWFzaywJCQkJCQkJCVwNCj4gPiArCQkuZXJyYXRhID0gX2VycmF0YSwJCQkJCQkJCVwN Cj4gPiArCX0NCj4gPiArDQo+ID4gKyNkZWZpbmUgSU1YX0JMS19DVExfUEQoX25hbWUsIF9hY3Rp dmVfcGQsIF9pZCwgX29mZnNldCwgX21hc2ssDQo+IF9yc3Rfb2Zmc2V0LCBfcnN0X21hc2ssIF9m bGFncykJXA0KPiA+ICsJSU1YX0JMS19DVEwoQkxLX0NUTF9QRCwgX25hbWUsIF9hY3RpdmVfcGQs IF9pZCwgX29mZnNldCwgX21hc2ssDQo+IF9yc3Rfb2Zmc2V0LAkJXA0KPiA+ICsJCSAgICBfcnN0 X21hc2ssIF9mbGFncywgMCkNCj4gPiArDQo+ID4gKyNkZWZpbmUgSU1YX0JMS19DVExfUERfRVJS QVRBKF9uYW1lLCBfYWN0aXZlX3BkLCBfaWQsIF9vZmZzZXQsIF9tYXNrLA0KPiBfcnN0X29mZnNl dCwgX3JzdF9tYXNrLAlcDQo+ID4gKwkJCSAgICAgIF9mbGFncywgX2VycmF0YSkJCQkJCQkJXA0K PiA+ICsJSU1YX0JMS19DVEwoQkxLX0NUTF9QRCwgX25hbWUsIF9hY3RpdmVfcGQsIF9pZCwgX29m ZnNldCwgX21hc2ssDQo+IF9yc3Rfb2Zmc2V0LAkJXA0KPiA+ICsJCSAgICBfcnN0X21hc2ssIF9m bGFncywgX2VycmF0YSkNCj4gPiArDQo+ID4gK2ludCBpbXhfYmxrX2N0bF9yZWdpc3RlcihzdHJ1 Y3QgZGV2aWNlICpkZXYpOw0KPiA+ICsNCj4gPiArI2RlZmluZSBJTVhfQkxLX0NUTF9QRF9IQU5E U0hBS0UJQklUKDApDQo+ID4gKyNkZWZpbmUgSU1YX0JMS19DVExfUERfUkVTRVQJCUJJVCgxKQ0K PiA+ICsjZGVmaW5lIElNWF9CTEtfQ1RMX1BEX0JVUwkJQklUKDIpDQo+ID4gKw0KPiA+ICtjb25z dCBleHRlcm4gc3RydWN0IGRldl9wbV9vcHMgaW14X2Jsa19jdGxfcG1fb3BzOw0KPiA+ICsNCj4g PiArI2VuZGlmDQo+IA0KDQo=