Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8CB70C636CC for ; Wed, 15 Feb 2023 16:10:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229951AbjBOQKi (ORCPT ); Wed, 15 Feb 2023 11:10:38 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52484 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230007AbjBOQKf (ORCPT ); Wed, 15 Feb 2023 11:10:35 -0500 Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-ve1eur01on2047.outbound.protection.outlook.com [40.107.14.47]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AC10839CC3; Wed, 15 Feb 2023 08:10:32 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cYkVwUZv/ffptzPpaEiChBlX2BD/zRIuaFwaXJK5wQzalgYRrrYGtxJBJIZlGvGtNvStSa/22bWcfybsTzalKADBg3z7c3wVFdOg7SwbFbRCrmghIIhLLk+Au137kNIOw1zDH1kXalOYyx4HbYsxKQl5lPA98InOPIrebZQdvQNDqDfzEoSuCNqyfGKZP6ai9o0WKLBD/ugFebItq5AhfS/27RleBN3vz0Pr/NZloAIAKQQaSB8pmjTCUe1rLEbf+D3CCf1WZgHLXPD96PgDUNcu/PZefuT5bVbEP+zBrdv36Ks1S+pP7FBGvwTZRxX5sl6oA8kCq5vhuGMaOkGMfw== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=SflVkbfsYvmRp4H1K/uAhVgmYeaimOlEpylbGgwafHA=; b=KXwW5okLNh764VD6lFg/ZBCI0P8tL9KSrEyy/MVpix3WzU99UCaJyMLeikuJAXfoxntsEl7wKf+mh7oq3SFKY45A81F/tGp36lzViyhgabH7UbgiHv0PrMoPJsTYDa6D65Xw5n43TGNh429t4npq/n2447h1noCI4ip3g7mcF89FwxJbxaAharTRvXZLyQRKJ97vs5QDC55NM3DqNId4JCGMzaajKiVd9wUqIywFT4ESIqJuWFueM+37JHKV2Za6CQmEi9XopGacvZX2e1FjqzSb1yD6trkHBIBeHuV0KV8Kcj3vnEqEPz3ARuP628mpb6GDh/JyDzVCwfeAvZn/Ig== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=csgroup.eu; dmarc=pass action=none header.from=csgroup.eu; dkim=pass header.d=csgroup.eu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=csgroup.eu; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=SflVkbfsYvmRp4H1K/uAhVgmYeaimOlEpylbGgwafHA=; b=TC4/13hVeT4Tu4w+JLyeHCg954DL6MXpkwbAR4/gEDzX/c6PNt4bpGCLi/EiIh08XAt5FgilpaK95T4+KHoZiNkxfHJ8lMHgiZhYMqdZwyY7vKIeGrYnPeI/Z27Mug4/oziQsmr0lMESLO3gr8ZKSDC6vCQZJAVquf6282UJvax3wLF2r9KBMOW8Oy/FJow1evqhy3gqVwRAHaxEYjs5TO6v90hsagwo2NaN5AIP0uwTQQqpQGb92ctPb/hrDO+SfEfdhihFW+LANkoHQukRJj9bnCjGcXjNzOBfQGQ5ZFGm2netQ/VhGltx8Pzcu8/7t3q9FdV7nlDunjcV/YkByg== Received: from MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM (2603:10a6:501:31::15) by PAZP264MB2399.FRAP264.PROD.OUTLOOK.COM (2603:10a6:102:1f1::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6086.26; Wed, 15 Feb 2023 16:10:28 +0000 Received: from MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM ([fe80::2cfb:d4c:1932:b097]) by MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM ([fe80::2cfb:d4c:1932:b097%5]) with mapi id 15.20.6086.024; Wed, 15 Feb 2023 16:10:28 +0000 From: Christophe Leroy To: Li Yang , Qiang Zhao CC: Rob Herring , Xiubo Li , Nicholas Piggin , Mark Brown , Krzysztof Kozlowski , Herve Codina , "linuxppc-dev@lists.ozlabs.org" , "linux-arm-kernel@lists.infradead.org" , Nicolin Chen , "devicetree@vger.kernel.org" , Jaroslav Kysela , Fabio Estevam , "linux-kernel@vger.kernel.org" , Shengjiu Wang , Takashi Iwai , "alsa-devel@alsa-project.org" , Thomas Petazzoni , Liam Girdwood , Michael Ellerman Subject: Re: [PATCH v4 02/10] soc: fsl: cpm1: Add support for TSA Thread-Topic: [PATCH v4 02/10] soc: fsl: cpm1: Add support for TSA Thread-Index: AQHZMWDAwFSe1ev4UUue5pcF6WumKa7QTUgA Date: Wed, 15 Feb 2023 16:10:28 +0000 Message-ID: <1bddcbcf-0d76-92a0-975d-685a55ace051@csgroup.eu> References: <20230126083222.374243-1-herve.codina@bootlin.com> <20230126083222.374243-3-herve.codina@bootlin.com> In-Reply-To: <20230126083222.374243-3-herve.codina@bootlin.com> Accept-Language: fr-FR, en-US Content-Language: fr-FR X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.5.0 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=csgroup.eu; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MRZP264MB2988:EE_|PAZP264MB2399:EE_ x-ms-office365-filtering-correlation-id: 78335ebb-9248-4aa1-1d66-08db0f6f27ee x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 3Vc7h+4USce7Uf+JgSOTvvvkzjnlEa8FInewW875TiJ8RBlHAcHAgszEiskZUYA939b2HrFyxsEcBt3Cy1A4qJslB0tU7RHiYDO1NqXcct6pIwfA/fUKGCZlnJBxK5pOziW2muPZsQuHT/Z5GF1X+MQd6b8G+n+qj6c42kyZSLE9bckDOcHfqxYTDE5+LtyTI7hhc+1j5JBa2s28F1rnpX3ng8RlY3zsk4RbENvC0C4lOe4Qo2w5dB/XcWh5J6TQIaYTOcbUxQVOAuL6fSLQXo3iwGpKm8r1N1uLhcbp5j/W4T+1vpwnmvnAl90aizldYZ1E8ezF8NcRwmp4HyHMEqpA6Ewlxsv5tcMuUpawHxNo9j9gQTUKdweaBcq0e7UzasbZLpS4oXCxDoxDKj4TNg190OFH6ZG5lKtP5nPuSzH0wc6RSqlyTTPuzlGpWpXO/THJsLCeQAekg68jSTa3+eNj63ic8xlZdo2hkcdboWY6Af1eNu8gtBsjpDFCkTE2VIF9ZxoCEtTiCmIqVcbZ7aagvO/eGxeHIBQl4DjBn28dNaAJ3pQj1t/mE0Z3hAV740ZM3r6J7p4xf4CAztm6PWen8iy8UsGZTwy3GPKAB7b6Y+qaXo3bm0fL/UXhPW3RYW8wttEaObOJzhCc6bA2r189DaqYc0DhkU33Gg0TZKyr2fpgm+oZotS4Xr3dgtGAOKjWB58cxFzvBIqG2xhzYgYY9Dvr9cuW9nAxWec9kZZkzq303gDSg1DEWy6lmElKaqqLZjLvL3FtUoRwckSLEw== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230025)(4636009)(136003)(366004)(396003)(376002)(346002)(39850400004)(451199018)(44832011)(30864003)(31686004)(7416002)(83380400001)(66574015)(38070700005)(122000001)(38100700002)(36756003)(71200400001)(478600001)(6486002)(86362001)(31696002)(2906002)(2616005)(6512007)(6506007)(26005)(76116006)(186003)(91956017)(66476007)(66446008)(66556008)(66946007)(316002)(64756008)(41300700001)(4326008)(110136005)(8936002)(54906003)(5660300002)(8676002)(43740500002)(45980500001)(559001)(579004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?dkYycHhaMDJaVGtvNWlqTURqeHhiVWx6YmVjdnJPR0ZBK3pNNk1WRXNUZjI0?= =?utf-8?B?UVVkTzFLT2VUOXRZTHUxTnIrN1pFUWk2U0FhcnFTL1Ezdk5BM0R2ZCtpdFQz?= =?utf-8?B?ZzVCL2x2UUdjZDUwWlMrMXBtNjUxb2ZDTXlaVUlGUVZLalNpV3JaTndYb1NM?= =?utf-8?B?ckRlSUtiMHNOd2tLelQ2SnBJYU9wMEt2eE85MldrWWlyRDQ2UTJaU3B3OVdR?= =?utf-8?B?QTRRZENodXpmbE9rUm55eVdiQThubDdDZDlmYzU2SDZPeHhNOHhGV1RrV1RI?= =?utf-8?B?WVJPQmRZdW8yYlJ3L20yZVpvWXppODlzYzYySU4vRktnVzZJb3NOaXFyRndY?= =?utf-8?B?clRWNkZHdW1LcmlqdkIrMjU3U0M3VWlxYUg5WWdrSVdlOHBwL3VVeWRYVVZ0?= =?utf-8?B?TTFiYnlSMVErKy9PR1ZOMkYrYWJTbEwvN0Fod3NUVkdOSzVLTStUaUh1VGRX?= =?utf-8?B?R3ZEV25IdFRvWSt3RXdNZGgzbXBaTDIrWmRiZTJDYUs3MVp1SHNrZnE0aGVn?= =?utf-8?B?STFjMHB0M3NkMXc5T1ZJaUQ1R1g1SGNDcFY4dkhUd1N1bXBiOGpWMWdudWhU?= =?utf-8?B?N2FaU0hrREJXQWxyWFNyaGVRR2Z0REdSTWt0K20zempIK2FCSDBFVlpaVlpF?= =?utf-8?B?am9xRHVMZm5qeTNZaXNYVXJ2aFEzZHJZREZ1MUFjRWN6Tm1YM0dkMit6VktS?= =?utf-8?B?N2V2ZDRRQ2l0Rjh6RTNGZEw4UjFSQkdySlZpcVU3R2k0YkwwVVF4M1M0cHkw?= =?utf-8?B?d0s0YXoxb0w2cU9GMVNNR0hlME50YVVLZ3NoQkdNbEZWcS94d1lWYWNsUkVq?= =?utf-8?B?dTcyTm1jTUwrQ2c3K09KUHFUUTVpQVlTcXlWMy9JRFJuOFBmcUhyR0hyUllE?= =?utf-8?B?aVduWVFGaHo0eWszZkxicFJPczN5bUhFU3owT20zMXVTcTR5QmRBa2VHcTlG?= =?utf-8?B?dGF6cCt4Q3pnY3RFZURKbkYydmpSZlZGRnB1TkxXUGV2dHRBZWlYSkRiaGJj?= =?utf-8?B?OUo3NmZSL3JtTzdZL2VpZVlmSlhuWXlScUc1TzBxSmtaRldQZ0NQc2pZdzUw?= =?utf-8?B?Wnl6Ky9KL3Z3TWoyM0VUdCtPdThPSm5veE0wY1B0b3hQb3BtSTlWMnBjR1lt?= =?utf-8?B?U3FaOTd3RmJITDhKcFUxM2JXelM2UG8zaGtGMUtQWXB5SXA2enZnVW5GWTJu?= =?utf-8?B?L21IeWhia0tZeDBQKzlHeUFKODc2d2V2bzEybUZRTzRhRHVMRWpaQ1piQ3pa?= =?utf-8?B?Sk1LaWNrUzl5NjBvNEY3emlQZ2dZVHpncGlsK005dkRvVDBOVUxCK1ByNWgv?= =?utf-8?B?T0o5N25NSUVIbzlpUXMxRUNzeW1rL3Bxc205cnE2VWJBaTdPVm9oWjlBV3Zr?= =?utf-8?B?aW9NazdvajZuWE1MUUx2ekQrVUI2T1phaEVZQ2xxSzBnZXZKenpMYUJzUm0r?= =?utf-8?B?TUdwSUZuUUFzZGhxZC9wV1BycWdlOUxzUHJLZUFpYU5WQlVta2liTWFxSndM?= =?utf-8?B?TlBna1FsVm5FVUQrQk9DSFpCVVNSQjVtQUt4Z29Nc3BvNlcydEhnN2puL2Q0?= =?utf-8?B?TlNJL251M3k0d2dNRlc0eE5OSGVQb2tBZjRTZWYraWdodUxuTGdUVHlxQUdu?= =?utf-8?B?TElFSXZJOVRCcjM1M0dnVnFnb0M2NWc5amVBMkhJL0t1VmFwelVBSFltTWdm?= =?utf-8?B?VUJLZ2M1Mm1qN2hxQjl6eitmU2ZOMFdLbVZIT0Y0QlZCd2R3Unc4OFJ6emhp?= =?utf-8?B?c1NUZzZLTXZ6OFo2WjltOS9lWi9IakZVbWJreFBubjEzVGVzWVRoWERMK0Iy?= =?utf-8?B?OUxZanl0aWJVcUJ3ZkZ1ckxhVXJHRlVRR0xCNHR5bUtjeGxFc0lIZDZTaXRX?= =?utf-8?B?Vk9obFlkNFJKLzRYazJmYThYNzdCTzVhNml2cSszdENqdFJKcHlGYlRWVmJk?= =?utf-8?B?eDRxS3UvaW5sYy9BNVZQdWN6QnErRnpaS3RJeGJkU1NzSUlwWTZhSlhPMzY5?= =?utf-8?B?Ym9DOHFGVUNtRVVYaFRuRWcwNUZyeDltN3p4V0lvcS9nQWN2ZldnT0gyUjVn?= =?utf-8?B?Tk9UNy9ReXZNUWRTT01wdkovYlNCazF6VC94TzhWWVl2RTVleXZXTTMzUlp5?= =?utf-8?B?TStXNzFqbFRBRkM0T2lUT1dXVXBqSXdrbGdhMkY5clNsSkxEYmtCV0w0d1lZ?= =?utf-8?B?dnc9PQ==?= Content-Type: text/plain; charset="utf-8" Content-ID: <9AC53D6DE6BD9943890F9EB13FF47610@FRAP264.PROD.OUTLOOK.COM> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: csgroup.eu X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: 78335ebb-9248-4aa1-1d66-08db0f6f27ee X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Feb 2023 16:10:28.7822 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 9914def7-b676-4fda-8815-5d49fb3b45c8 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: RDOZy4p5vOA8Hwl4oE2R2CcQ4NEdl5pqY4LBEShF+foO2kW3GkCrekNNERMSe1IKprWeQj55dCDklTIx23PnZUq8FMeVyEkLO+GjoebHLkI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAZP264MB2399 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgTGkgYW5kIFFpYW5nLA0KDQpMZSAyNi8wMS8yMDIzIMOgIDA5OjMyLCBIZXJ2ZSBDb2RpbmEg YSDDqWNyaXTCoDoNCj4gVGhlIFRTQSAoVGltZSBTbG90IEFzc2lnbmVyKSBwdXJwb3NlIGlzIHRv IHJvdXRlIHNvbWUNCj4gVERNIHRpbWUtc2xvdHMgdG8gb3RoZXIgaW50ZXJuYWwgc2VyaWFsIGNv bnRyb2xsZXJzLg0KPiANCj4gSXQgaXMgYXZhaWxhYmxlIGluIHNvbWUgUG93ZXJRVUlDQyBTb0Mg c3VjaCBhcyB0aGUNCj4gTVBDODg1IG9yIE1QQzg2Ni4NCj4gDQo+IEl0IGlzIGFsc28gYXZhaWxh YmxlIG9uIHNvbWUgUXVpY2MgRW5naW5lIFNvQ3MuDQo+IFRoaXMgY3VycmVudCB2ZXJzaW9uIHN1 cHBvcnQgQ1BNMSBTb0NzIG9ubHkgYW5kIHNvbWUNCj4gZW5oYW5jZW1lbnQgYXJlIG5lZWRlZCB0 byBzdXBwb3J0IFF1aWNjIEVuZ2luZSBTb0NzLg0KDQpEbyB5b3UgaGF2ZSBhbnkgY29tbWVudCBv biB0aGlzIG90aGVyIHBhdGNoID8NCg0KT3RoZXJ3aXNlLCBtYXkgSSBhc2sgaWYgeW91IGNhbiBz ZW5kIGEgQWNrZWQtYnk6IHNvIHRoYXQgdGhlIHNlcmllcyBjYW4gDQpiZSBtZXJnZWQgaW4gYSBy ZWxldmFudCB0cmVlLCBtb3N0IGxpa2VseSBzb3VuZCB0cmVlID8NCg0KVGhhbmtzDQpDaHJpc3Rv cGhlDQoNCj4gDQo+IFNpZ25lZC1vZmYtYnk6IEhlcnZlIENvZGluYSA8aGVydmUuY29kaW5hQGJv b3RsaW4uY29tPg0KPiAtLS0NCj4gICBkcml2ZXJzL3NvYy9mc2wvcWUvS2NvbmZpZyAgfCAgMTEg Kw0KPiAgIGRyaXZlcnMvc29jL2ZzbC9xZS9NYWtlZmlsZSB8ICAgMSArDQo+ICAgZHJpdmVycy9z b2MvZnNsL3FlL3RzYS5jICAgIHwgODY0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKw0KPiAgIGRyaXZlcnMvc29jL2ZzbC9xZS90c2EuaCAgICB8ICA0MiArKw0KPiAgIDQgZmls ZXMgY2hhbmdlZCwgOTE4IGluc2VydGlvbnMoKykNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9zb2MvZnNsL3FlL3RzYS5jDQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc29j L2ZzbC9xZS90c2EuaA0KPiANCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29jL2ZzbC9xZS9LY29u ZmlnIGIvZHJpdmVycy9zb2MvZnNsL3FlL0tjb25maWcNCj4gaW5kZXggMzU3YzU4MDBiMTEyLi42 MGVjMTFjOWY0ZDkgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvc29jL2ZzbC9xZS9LY29uZmlnDQo+ ICsrKyBiL2RyaXZlcnMvc29jL2ZzbC9xZS9LY29uZmlnDQo+IEBAIC0zMyw2ICszMywxNyBAQCBj b25maWcgVUNDDQo+ICAgCWJvb2wNCj4gICAJZGVmYXVsdCB5IGlmIFVDQ19GQVNUIHx8IFVDQ19T TE9XDQo+ICAgDQo+ICtjb25maWcgQ1BNX1RTQQ0KPiArCXRyaXN0YXRlICJDUE0gVFNBIHN1cHBv cnQiDQo+ICsJZGVwZW5kcyBvbiBPRiAmJiBIQVNfSU9NRU0NCj4gKwlkZXBlbmRzIG9uIENQTTEg fHwgKFBQQyAmJiBDT01QSUxFX1RFU1QpDQo+ICsJaGVscA0KPiArCSAgRnJlZXNjYWxlIENQTSBU aW1lIFNsb3QgQXNzaWduZXIgKFRTQSkNCj4gKwkgIGNvbnRyb2xsZXIuDQo+ICsNCj4gKwkgIFRo aXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhpcw0KPiArCSAgY29udHJvbGxlcg0KPiAr DQo+ICAgY29uZmlnIFFFX1RETQ0KPiAgIAlib29sDQo+ICAgCWRlZmF1bHQgeSBpZiBGU0xfVUND X0hETEMNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29jL2ZzbC9xZS9NYWtlZmlsZSBiL2RyaXZl cnMvc29jL2ZzbC9xZS9NYWtlZmlsZQ0KPiBpbmRleCA1NWE1NTUzMDRmM2EuLjQ1Yzk2MWFjYzgx YiAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9zb2MvZnNsL3FlL01ha2VmaWxlDQo+ICsrKyBiL2Ry aXZlcnMvc29jL2ZzbC9xZS9NYWtlZmlsZQ0KPiBAQCAtNCw2ICs0LDcgQEANCj4gICAjDQo+ICAg b2JqLSQoQ09ORklHX1FVSUNDX0VOR0lORSkrPSBxZS5vIHFlX2NvbW1vbi5vIHFlX2ljLm8gcWVf aW8ubw0KPiAgIG9iai0kKENPTkZJR19DUE0pCSs9IHFlX2NvbW1vbi5vDQo+ICtvYmotJChDT05G SUdfQ1BNX1RTQSkJKz0gdHNhLm8NCj4gICBvYmotJChDT05GSUdfVUNDKQkrPSB1Y2Mubw0KPiAg IG9iai0kKENPTkZJR19VQ0NfU0xPVykJKz0gdWNjX3Nsb3cubw0KPiAgIG9iai0kKENPTkZJR19V Q0NfRkFTVCkJKz0gdWNjX2Zhc3Qubw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zb2MvZnNsL3Fl L3RzYS5jIGIvZHJpdmVycy9zb2MvZnNsL3FlL3RzYS5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uOTFiNGM4OWZhNWIzDQo+IC0tLSAvZGV2L251bGwNCj4g KysrIGIvZHJpdmVycy9zb2MvZnNsL3FlL3RzYS5jDQo+IEBAIC0wLDAgKzEsODY0IEBADQo+ICsv LyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KPiArLyoNCj4gKyAqIFRTQSBkcml2 ZXINCj4gKyAqDQo+ICsgKiBDb3B5cmlnaHQgMjAyMiBDUyBHUk9VUCBGcmFuY2UNCj4gKyAqDQo+ ICsgKiBBdXRob3I6IEhlcnZlIENvZGluYSA8aGVydmUuY29kaW5hQGJvb3RsaW4uY29tPg0KPiAr ICovDQo+ICsNCj4gKyNpbmNsdWRlICJ0c2EuaCINCj4gKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9z b2MvZnNsLHRzYS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPg0KPiArI2luY2x1ZGUgPGxp bnV4L2lvLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+ICsjaW5jbHVkZSA8bGlu dXgvb2YuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPg0KPiArI2luY2x1ZGUg PGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4NCj4g Kw0KPiArDQo+ICsvKiBUU0EgU0kgUkFNIHJvdXRpbmcgdGFibGVzIGVudHJ5ICovDQo+ICsjZGVm aW5lIFRTQV9TSVJBTV9FTlRSWV9MQVNUCQkoMSA8PCAxNikNCj4gKyNkZWZpbmUgVFNBX1NJUkFN X0VOVFJZX0JZVEUJCSgxIDw8IDE3KQ0KPiArI2RlZmluZSBUU0FfU0lSQU1fRU5UUllfQ05UKHgp CQkoKCh4KSAmIDB4MGYpIDw8IDE4KQ0KPiArI2RlZmluZSBUU0FfU0lSQU1fRU5UUllfQ1NFTF9N QVNLCSgweDcgPDwgMjIpDQo+ICsjZGVmaW5lIFRTQV9TSVJBTV9FTlRSWV9DU0VMX05VCQkoMHgw IDw8IDIyKQ0KPiArI2RlZmluZSBUU0FfU0lSQU1fRU5UUllfQ1NFTF9TQ0MyCSgweDIgPDwgMjIp DQo+ICsjZGVmaW5lIFRTQV9TSVJBTV9FTlRSWV9DU0VMX1NDQzMJKDB4MyA8PCAyMikNCj4gKyNk ZWZpbmUgVFNBX1NJUkFNX0VOVFJZX0NTRUxfU0NDNAkoMHg0IDw8IDIyKQ0KPiArI2RlZmluZSBU U0FfU0lSQU1fRU5UUllfQ1NFTF9TTUMxCSgweDUgPDwgMjIpDQo+ICsjZGVmaW5lIFRTQV9TSVJB TV9FTlRSWV9DU0VMX1NNQzIJKDB4NiA8PCAyMikNCj4gKw0KPiArLyogU0kgbW9kZSByZWdpc3Rl ciAoMzIgYml0cykgKi8NCj4gKyNkZWZpbmUgVFNBX1NJTU9ERQkweDAwDQo+ICsjZGVmaW5lICAg VFNBX1NJTU9ERV9TTUMyCQkJMHg4MDAwMDAwMA0KPiArI2RlZmluZSAgIFRTQV9TSU1PREVfU01D MQkJCTB4MDAwMDgwMDANCj4gKyNkZWZpbmUgICBUU0FfU0lNT0RFX1RETUEoeCkJCQkoKHgpIDw8 IDApDQo+ICsjZGVmaW5lICAgVFNBX1NJTU9ERV9URE1CKHgpCQkJKCh4KSA8PCAxNikNCj4gKyNk ZWZpbmUgICAgIFRTQV9TSU1PREVfVERNX01BU0sJCQkweDBmZmYNCj4gKyNkZWZpbmUgICAgIFRT QV9TSU1PREVfVERNX1NETV9NQVNLCQkweDBjMDANCj4gKyNkZWZpbmUgICAgICAgVFNBX1NJTU9E RV9URE1fU0RNX05PUk0JCTB4MDAwMA0KPiArI2RlZmluZSAgICAgICBUU0FfU0lNT0RFX1RETV9T RE1fRUNITwkJMHgwNDAwDQo+ICsjZGVmaW5lICAgICAgIFRTQV9TSU1PREVfVERNX1NETV9JTlRM X0xPT1AJMHgwODAwDQo+ICsjZGVmaW5lICAgICAgIFRTQV9TSU1PREVfVERNX1NETV9MT09QX0NU UkwJMHgwYzAwDQo+ICsjZGVmaW5lICAgICBUU0FfU0lNT0RFX1RETV9SRlNEKHgpCQkoKHgpIDw8 IDgpDQo+ICsjZGVmaW5lICAgICBUU0FfU0lNT0RFX1RETV9EU0MJCQkweDAwODANCj4gKyNkZWZp bmUgICAgIFRTQV9TSU1PREVfVERNX0NSVAkJCTB4MDA0MA0KPiArI2RlZmluZSAgICAgVFNBX1NJ TU9ERV9URE1fU1RaCQkJMHgwMDIwDQo+ICsjZGVmaW5lICAgICBUU0FfU0lNT0RFX1RETV9DRQkJ CTB4MDAxMA0KPiArI2RlZmluZSAgICAgVFNBX1NJTU9ERV9URE1fRkUJCQkweDAwMDgNCj4gKyNk ZWZpbmUgICAgIFRTQV9TSU1PREVfVERNX0dNCQkJMHgwMDA0DQo+ICsjZGVmaW5lICAgICBUU0Ff U0lNT0RFX1RETV9URlNEKHgpCQkoKHgpIDw8IDApDQo+ICsNCj4gKy8qIFNJIGdsb2JhbCBtb2Rl IHJlZ2lzdGVyICg4IGJpdHMpICovDQo+ICsjZGVmaW5lIFRTQV9TSUdNUgkweDA0DQo+ICsjZGVm aW5lIFRTQV9TSUdNUl9FTkIJCQkoMTw8MykNCj4gKyNkZWZpbmUgVFNBX1NJR01SX0VOQQkJCSgx PDwyKQ0KPiArI2RlZmluZSBUU0FfU0lHTVJfUkRNX01BU0sJCTB4MDMNCj4gKyNkZWZpbmUgICBU U0FfU0lHTVJfUkRNX1NUQVRJQ19URE1BCTB4MDANCj4gKyNkZWZpbmUgICBUU0FfU0lHTVJfUkRN X0RZTl9URE1BCTB4MDENCj4gKyNkZWZpbmUgICBUU0FfU0lHTVJfUkRNX1NUQVRJQ19URE1BQgkw eDAyDQo+ICsjZGVmaW5lICAgVFNBX1NJR01SX1JETV9EWU5fVERNQUIJMHgwMw0KPiArDQo+ICsv KiBTSSBzdGF0dXMgcmVnaXN0ZXIgKDggYml0cykgKi8NCj4gKyNkZWZpbmUgVFNBX1NJU1RSCTB4 MDYNCj4gKw0KPiArLyogU0kgY29tbWFuZCByZWdpc3RlciAoOCBiaXRzKSAqLw0KPiArI2RlZmlu ZSBUU0FfU0lDTVIJMHgwNw0KPiArDQo+ICsvKiBTSSBjbG9jayByb3V0ZSByZWdpc3RlciAoMzIg Yml0cykgKi8NCj4gKyNkZWZpbmUgVFNBX1NJQ1IJMHgwQw0KPiArI2RlZmluZSAgIFRTQV9TSUNS X1NDQzIoeCkJCSgoeCkgPDwgOCkNCj4gKyNkZWZpbmUgICBUU0FfU0lDUl9TQ0MzKHgpCQkoKHgp IDw8IDE2KQ0KPiArI2RlZmluZSAgIFRTQV9TSUNSX1NDQzQoeCkJCSgoeCkgPDwgMjQpDQo+ICsj ZGVmaW5lICAgICBUU0FfU0lDUl9TQ0NfTUFTSwkJMHgwZmYNCj4gKyNkZWZpbmUgICAgIFRTQV9T SUNSX1NDQ19HUlgJCSgxIDw8IDcpDQo+ICsjZGVmaW5lICAgICBUU0FfU0lDUl9TQ0NfU0NYX1RT QQkoMSA8PCA2KQ0KPiArI2RlZmluZSAgICAgVFNBX1NJQ1JfU0NDX1JYQ1NfTUFTSwkoMHg3IDw8 IDMpDQo+ICsjZGVmaW5lICAgICAgIFRTQV9TSUNSX1NDQ19SWENTX0JSRzEJKDB4MCA8PCAzKQ0K PiArI2RlZmluZSAgICAgICBUU0FfU0lDUl9TQ0NfUlhDU19CUkcyCSgweDEgPDwgMykNCj4gKyNk ZWZpbmUgICAgICAgVFNBX1NJQ1JfU0NDX1JYQ1NfQlJHMwkoMHgyIDw8IDMpDQo+ICsjZGVmaW5l ICAgICAgIFRTQV9TSUNSX1NDQ19SWENTX0JSRzQJKDB4MyA8PCAzKQ0KPiArI2RlZmluZSAgICAg ICBUU0FfU0lDUl9TQ0NfUlhDU19DTEsxNQkoMHg0IDw8IDMpDQo+ICsjZGVmaW5lICAgICAgIFRT QV9TSUNSX1NDQ19SWENTX0NMSzI2CSgweDUgPDwgMykNCj4gKyNkZWZpbmUgICAgICAgVFNBX1NJ Q1JfU0NDX1JYQ1NfQ0xLMzcJKDB4NiA8PCAzKQ0KPiArI2RlZmluZSAgICAgICBUU0FfU0lDUl9T Q0NfUlhDU19DTEs0OAkoMHg3IDw8IDMpDQo+ICsjZGVmaW5lICAgICBUU0FfU0lDUl9TQ0NfVFhD U19NQVNLCSgweDcgPDwgMCkNCj4gKyNkZWZpbmUgICAgICAgVFNBX1NJQ1JfU0NDX1RYQ1NfQlJH MQkoMHgwIDw8IDApDQo+ICsjZGVmaW5lICAgICAgIFRTQV9TSUNSX1NDQ19UWENTX0JSRzIJKDB4 MSA8PCAwKQ0KPiArI2RlZmluZSAgICAgICBUU0FfU0lDUl9TQ0NfVFhDU19CUkczCSgweDIgPDwg MCkNCj4gKyNkZWZpbmUgICAgICAgVFNBX1NJQ1JfU0NDX1RYQ1NfQlJHNAkoMHgzIDw8IDApDQo+ ICsjZGVmaW5lICAgICAgIFRTQV9TSUNSX1NDQ19UWENTX0NMSzE1CSgweDQgPDwgMCkNCj4gKyNk ZWZpbmUgICAgICAgVFNBX1NJQ1JfU0NDX1RYQ1NfQ0xLMjYJKDB4NSA8PCAwKQ0KPiArI2RlZmlu ZSAgICAgICBUU0FfU0lDUl9TQ0NfVFhDU19DTEszNwkoMHg2IDw8IDApDQo+ICsjZGVmaW5lICAg ICAgIFRTQV9TSUNSX1NDQ19UWENTX0NMSzQ4CSgweDcgPDwgMCkNCj4gKw0KPiArLyogU2VyaWFs IGludGVyZmFjZSBSQU0gcG9pbnRlciByZWdpc3RlciAoMzIgYml0cykgKi8NCj4gKyNkZWZpbmUg VFNBX1NJUlAJMHgxMA0KPiArDQo+ICtzdHJ1Y3QgdHNhX2VudHJpZXNfYXJlYSB7DQo+ICsJdm9p ZCAqX19pb21lbSBlbnRyaWVzX3N0YXJ0Ow0KPiArCXZvaWQgKl9faW9tZW0gZW50cmllc19uZXh0 Ow0KPiArCXZvaWQgKl9faW9tZW0gbGFzdF9lbnRyeTsNCj4gK307DQo+ICsNCj4gK3N0cnVjdCB0 c2FfdGRtIHsNCj4gKwlib29sIGlzX2VuYWJsZTsNCj4gKwlzdHJ1Y3QgY2xrICpsMXJjbGtfY2xr Ow0KPiArCXN0cnVjdCBjbGsgKmwxcnN5bmNfY2xrOw0KPiArCXN0cnVjdCBjbGsgKmwxdGNsa19j bGs7DQo+ICsJc3RydWN0IGNsayAqbDF0c3luY19jbGs7DQo+ICsJdTMyIHNpbW9kZV90ZG07DQo+ ICt9Ow0KPiArDQo+ICsjZGVmaW5lIFRTQV9URE1BCTANCj4gKyNkZWZpbmUgVFNBX1RETUIJMQ0K PiArDQo+ICtzdHJ1Y3QgdHNhIHsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7DQo+ICsJdm9pZCAq X19pb21lbSBzaV9yZWdzOw0KPiArCXZvaWQgKl9faW9tZW0gc2lfcmFtOw0KPiArCXJlc291cmNl X3NpemVfdCBzaV9yYW1fc3o7DQo+ICsJc3BpbmxvY2tfdAlsb2NrOw0KPiArCWludCB0ZG1zOyAv KiBUU0FfVERNeCBPUmVkICovDQo+ICsJc3RydWN0IHRzYV90ZG0gdGRtWzJdOyAvKiBURE1hIGFu ZCBURE1iICovDQo+ICsJc3RydWN0IHRzYV9zZXJpYWwgew0KPiArCQl1bnNpZ25lZCBpbnQgaWQ7 DQo+ICsJCXN0cnVjdCB0c2Ffc2VyaWFsX2luZm8gaW5mbzsNCj4gKwl9IHNlcmlhbHNbNl07DQo+ ICt9Ow0KPiArDQo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCB0c2EgKnRzYV9zZXJpYWxfZ2V0X3Rz YShzdHJ1Y3QgdHNhX3NlcmlhbCAqdHNhX3NlcmlhbCkNCj4gK3sNCj4gKwkvKiBUaGUgc2VyaWFs cyB0YWJsZSBpcyBpbmRleGVkIGJ5IHRoZSBzZXJpYWwgaWQgKi8NCj4gKwlyZXR1cm4gY29udGFp bmVyX29mKHRzYV9zZXJpYWwsIHN0cnVjdCB0c2EsIHNlcmlhbHNbdHNhX3NlcmlhbC0+aWRdKTsN Cj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSB2b2lkIHRzYV93cml0ZTMyKHZvaWQgKl9faW9t ZW0gYWRkciwgdTMyIHZhbCkNCj4gK3sNCj4gKwlpb3dyaXRlMzJiZSh2YWwsIGFkZHIpOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgaW5saW5lIHUzMiB0c2FfcmVhZDMyKHZvaWQgKl9faW9tZW0gYWRk cikNCj4gK3sNCj4gKwlyZXR1cm4gaW9yZWFkMzJiZShhZGRyKTsNCj4gK30NCj4gKw0KPiArc3Rh dGljIGlubGluZSB2b2lkIHRzYV9jbHJiaXRzMzIodm9pZCAqX19pb21lbSBhZGRyLCB1MzIgY2xy KQ0KPiArew0KPiArCXRzYV93cml0ZTMyKGFkZHIsIHRzYV9yZWFkMzIoYWRkcikgJiB+Y2xyKTsN Cj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSB2b2lkIHRzYV9jbHJzZXRiaXRzMzIodm9pZCAq X19pb21lbSBhZGRyLCB1MzIgY2xyLCB1MzIgc2V0KQ0KPiArew0KPiArCXRzYV93cml0ZTMyKGFk ZHIsICh0c2FfcmVhZDMyKGFkZHIpICYgfmNscikgfCBzZXQpOw0KPiArfQ0KPiArDQo+ICtpbnQg dHNhX3NlcmlhbF9jb25uZWN0KHN0cnVjdCB0c2Ffc2VyaWFsICp0c2Ffc2VyaWFsKQ0KPiArew0K PiArCXN0cnVjdCB0c2EgKnRzYSA9IHRzYV9zZXJpYWxfZ2V0X3RzYSh0c2Ffc2VyaWFsKTsNCj4g Kwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KPiArCXUzMiBjbGVhcjsNCj4gKwl1MzIgc2V0Ow0KPiAr DQo+ICsJc3dpdGNoICh0c2Ffc2VyaWFsLT5pZCkgew0KPiArCWNhc2UgRlNMX0NQTV9UU0FfU0ND MjoNCj4gKwkJY2xlYXIgPSBUU0FfU0lDUl9TQ0MyKFRTQV9TSUNSX1NDQ19NQVNLKTsNCj4gKwkJ c2V0ID0gVFNBX1NJQ1JfU0NDMihUU0FfU0lDUl9TQ0NfU0NYX1RTQSk7DQo+ICsJCWJyZWFrOw0K PiArCWNhc2UgRlNMX0NQTV9UU0FfU0NDMzoNCj4gKwkJY2xlYXIgPSBUU0FfU0lDUl9TQ0MzKFRT QV9TSUNSX1NDQ19NQVNLKTsNCj4gKwkJc2V0ID0gVFNBX1NJQ1JfU0NDMyhUU0FfU0lDUl9TQ0Nf U0NYX1RTQSk7DQo+ICsJCWJyZWFrOw0KPiArCWNhc2UgRlNMX0NQTV9UU0FfU0NDNDoNCj4gKwkJ Y2xlYXIgPSBUU0FfU0lDUl9TQ0M0KFRTQV9TSUNSX1NDQ19NQVNLKTsNCj4gKwkJc2V0ID0gVFNB X1NJQ1JfU0NDNChUU0FfU0lDUl9TQ0NfU0NYX1RTQSk7DQo+ICsJCWJyZWFrOw0KPiArCWRlZmF1 bHQ6DQo+ICsJCWRldl9lcnIodHNhLT5kZXYsICJVbnN1cHBvcnRlZCBzZXJpYWwgaWQgJXVcbiIs IHRzYV9zZXJpYWwtPmlkKTsNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJfQ0KPiArDQo+ICsJ c3Bpbl9sb2NrX2lycXNhdmUoJnRzYS0+bG9jaywgZmxhZ3MpOw0KPiArCXRzYV9jbHJzZXRiaXRz MzIodHNhLT5zaV9yZWdzICsgVFNBX1NJQ1IsIGNsZWFyLCBzZXQpOw0KPiArCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJnRzYS0+bG9jaywgZmxhZ3MpOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9 DQo+ICtFWFBPUlRfU1lNQk9MKHRzYV9zZXJpYWxfY29ubmVjdCk7DQo+ICsNCj4gK2ludCB0c2Ff c2VyaWFsX2Rpc2Nvbm5lY3Qoc3RydWN0IHRzYV9zZXJpYWwgKnRzYV9zZXJpYWwpDQo+ICt7DQo+ ICsJc3RydWN0IHRzYSAqdHNhID0gdHNhX3NlcmlhbF9nZXRfdHNhKHRzYV9zZXJpYWwpOw0KPiAr CXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ICsJdTMyIGNsZWFyOw0KPiArDQo+ICsJc3dpdGNoICh0 c2Ffc2VyaWFsLT5pZCkgew0KPiArCWNhc2UgRlNMX0NQTV9UU0FfU0NDMjoNCj4gKwkJY2xlYXIg PSBUU0FfU0lDUl9TQ0MyKFRTQV9TSUNSX1NDQ19NQVNLKTsNCj4gKwkJYnJlYWs7DQo+ICsJY2Fz ZSBGU0xfQ1BNX1RTQV9TQ0MzOg0KPiArCQljbGVhciA9IFRTQV9TSUNSX1NDQzMoVFNBX1NJQ1Jf U0NDX01BU0spOw0KPiArCQlicmVhazsNCj4gKwljYXNlIEZTTF9DUE1fVFNBX1NDQzQ6DQo+ICsJ CWNsZWFyID0gVFNBX1NJQ1JfU0NDNChUU0FfU0lDUl9TQ0NfTUFTSyk7DQo+ICsJCWJyZWFrOw0K PiArCWRlZmF1bHQ6DQo+ICsJCWRldl9lcnIodHNhLT5kZXYsICJVbnN1cHBvcnRlZCBzZXJpYWwg aWQgJXVcbiIsIHRzYV9zZXJpYWwtPmlkKTsNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJfQ0K PiArDQo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJnRzYS0+bG9jaywgZmxhZ3MpOw0KPiArCXRzYV9j bHJzZXRiaXRzMzIodHNhLT5zaV9yZWdzICsgVFNBX1NJQ1IsIGNsZWFyLCAwKTsNCj4gKwlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZ0c2EtPmxvY2ssIGZsYWdzKTsNCj4gKw0KPiArCXJldHVybiAw Ow0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTCh0c2Ffc2VyaWFsX2Rpc2Nvbm5lY3QpOw0KPiArDQo+ ICtpbnQgdHNhX3NlcmlhbF9nZXRfaW5mbyhzdHJ1Y3QgdHNhX3NlcmlhbCAqdHNhX3NlcmlhbCwg c3RydWN0IHRzYV9zZXJpYWxfaW5mbyAqaW5mbykNCj4gK3sNCj4gKwltZW1jcHkoaW5mbywgJnRz YV9zZXJpYWwtPmluZm8sIHNpemVvZigqaW5mbykpOw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiAr RVhQT1JUX1NZTUJPTCh0c2Ffc2VyaWFsX2dldF9pbmZvKTsNCj4gKw0KPiArc3RhdGljIHZvaWQg dHNhX2luaXRfZW50cmllc19hcmVhKHN0cnVjdCB0c2EgKnRzYSwgc3RydWN0IHRzYV9lbnRyaWVz X2FyZWEgKmFyZWEsDQo+ICsJCQkJICB1MzIgdGRtcywgdTMyIHRkbV9pZCwgYm9vbCBpc19yeCkN Cj4gK3sNCj4gKwlyZXNvdXJjZV9zaXplX3QgcXVhcnRlcjsNCj4gKwlyZXNvdXJjZV9zaXplX3Qg aGFsZjsNCj4gKw0KPiArCXF1YXJ0ZXIgPSB0c2EtPnNpX3JhbV9zei80Ow0KPiArCWhhbGYgPSB0 c2EtPnNpX3JhbV9zei8yOw0KPiArDQo+ICsJaWYgKHRkbXMgPT0gQklUKFRTQV9URE1BKSkgew0K PiArCQkvKiBPbmx5IFRETUEgKi8NCj4gKwkJaWYgKGlzX3J4KSB7DQo+ICsJCQkvKiBGaXJzdCBo YWxmIG9mIHNpX3JhbSAqLw0KPiArCQkJYXJlYS0+ZW50cmllc19zdGFydCA9IHRzYS0+c2lfcmFt Ow0KPiArCQkJYXJlYS0+ZW50cmllc19uZXh0ID0gYXJlYS0+ZW50cmllc19zdGFydCArIGhhbGY7 DQo+ICsJCQlhcmVhLT5sYXN0X2VudHJ5ID0gTlVMTDsNCj4gKwkJfSBlbHNlIHsNCj4gKwkJCS8q IFNlY29uZCBoYWxmIG9mIHNpX3JhbSAqLw0KPiArCQkJYXJlYS0+ZW50cmllc19zdGFydCA9IHRz YS0+c2lfcmFtICsgaGFsZjsNCj4gKwkJCWFyZWEtPmVudHJpZXNfbmV4dCA9IGFyZWEtPmVudHJp ZXNfc3RhcnQgKyBoYWxmOw0KPiArCQkJYXJlYS0+bGFzdF9lbnRyeSA9IE5VTEw7DQo+ICsJCX0N Cj4gKwl9IGVsc2Ugew0KPiArCQkvKiBPbmx5IFRETUIgb3IgYm90aCBURE1zICovDQo+ICsJCWlm ICh0ZG1faWQgPT0gVFNBX1RETUEpIHsNCj4gKwkJCWlmIChpc19yeCkgew0KPiArCQkJCS8qIEZp cnN0IGhhbGYgb2YgZmlyc3QgaGFsZiBvZiBzaV9yYW0gKi8NCj4gKwkJCQlhcmVhLT5lbnRyaWVz X3N0YXJ0ID0gdHNhLT5zaV9yYW07DQo+ICsJCQkJYXJlYS0+ZW50cmllc19uZXh0ID0gYXJlYS0+ ZW50cmllc19zdGFydCArIHF1YXJ0ZXI7DQo+ICsJCQkJYXJlYS0+bGFzdF9lbnRyeSA9IE5VTEw7 DQo+ICsJCQl9IGVsc2Ugew0KPiArCQkJCS8qIEZpcnN0IGhhbGYgb2Ygc2Vjb25kIGhhbGYgb2Yg c2lfcmFtICovDQo+ICsJCQkJYXJlYS0+ZW50cmllc19zdGFydCA9IHRzYS0+c2lfcmFtICsgKDIg KiBxdWFydGVyKTsNCj4gKwkJCQlhcmVhLT5lbnRyaWVzX25leHQgPSBhcmVhLT5lbnRyaWVzX3N0 YXJ0ICsgcXVhcnRlcjsNCj4gKwkJCQlhcmVhLT5sYXN0X2VudHJ5ID0gTlVMTDsNCj4gKwkJCX0N Cj4gKwkJfSBlbHNlIHsNCj4gKwkJCWlmIChpc19yeCkgew0KPiArCQkJCS8qIFNlY29uZCBoYWxm IG9mIGZpcnN0IGhhbGYgb2Ygc2lfcmFtICovDQo+ICsJCQkJYXJlYS0+ZW50cmllc19zdGFydCA9 IHRzYS0+c2lfcmFtICsgcXVhcnRlcjsNCj4gKwkJCQlhcmVhLT5lbnRyaWVzX25leHQgPSBhcmVh LT5lbnRyaWVzX3N0YXJ0ICsgcXVhcnRlcjsNCj4gKwkJCQlhcmVhLT5sYXN0X2VudHJ5ID0gTlVM TDsNCj4gKwkJCX0gZWxzZSB7DQo+ICsJCQkJLyogU2Vjb25kIGhhbGYgb2Ygc2Vjb25kIGhhbGYg b2Ygc2lfcmFtICovDQo+ICsJCQkJYXJlYS0+ZW50cmllc19zdGFydCA9IHRzYS0+c2lfcmFtICsg KDMgKiBxdWFydGVyKTsNCj4gKwkJCQlhcmVhLT5lbnRyaWVzX25leHQgPSBhcmVhLT5lbnRyaWVz X3N0YXJ0ICsgcXVhcnRlcjsNCj4gKwkJCQlhcmVhLT5sYXN0X2VudHJ5ID0gTlVMTDsNCj4gKwkJ CX0NCj4gKwkJfQ0KPiArCX0NCj4gK30NCj4gKw0KPiArc3RhdGljIGNvbnN0IGNoYXIgKnRzYV9z ZXJpYWxfaWQybmFtZShzdHJ1Y3QgdHNhICp0c2EsIHUzMiBzZXJpYWxfaWQpDQo+ICt7DQo+ICsJ c3dpdGNoIChzZXJpYWxfaWQpIHsNCj4gKwljYXNlIEZTTF9DUE1fVFNBX05VOglyZXR1cm4gIk5v dCB1c2VkIjsNCj4gKwljYXNlIEZTTF9DUE1fVFNBX1NDQzI6CXJldHVybiAiU0NDMiI7DQo+ICsJ Y2FzZSBGU0xfQ1BNX1RTQV9TQ0MzOglyZXR1cm4gIlNDQzMiOw0KPiArCWNhc2UgRlNMX0NQTV9U U0FfU0NDNDoJcmV0dXJuICJTQ0M0IjsNCj4gKwljYXNlIEZTTF9DUE1fVFNBX1NNQzE6CXJldHVy biAiU01DMSI7DQo+ICsJY2FzZSBGU0xfQ1BNX1RTQV9TTUMyOglyZXR1cm4gIlNNQzIiOw0KPiAr CWRlZmF1bHQ6DQo+ICsJCWJyZWFrOw0KPiArCX0NCj4gKwlyZXR1cm4gTlVMTDsNCj4gK30NCj4g Kw0KPiArc3RhdGljIHUzMiB0c2Ffc2VyaWFsX2lkMmNzZWwoc3RydWN0IHRzYSAqdHNhLCB1MzIg c2VyaWFsX2lkKQ0KPiArew0KPiArCXN3aXRjaCAoc2VyaWFsX2lkKSB7DQo+ICsJY2FzZSBGU0xf Q1BNX1RTQV9TQ0MyOglyZXR1cm4gVFNBX1NJUkFNX0VOVFJZX0NTRUxfU0NDMjsNCj4gKwljYXNl IEZTTF9DUE1fVFNBX1NDQzM6CXJldHVybiBUU0FfU0lSQU1fRU5UUllfQ1NFTF9TQ0MzOw0KPiAr CWNhc2UgRlNMX0NQTV9UU0FfU0NDNDoJcmV0dXJuIFRTQV9TSVJBTV9FTlRSWV9DU0VMX1NDQzQ7 DQo+ICsJY2FzZSBGU0xfQ1BNX1RTQV9TTUMxOglyZXR1cm4gVFNBX1NJUkFNX0VOVFJZX0NTRUxf U01DMTsNCj4gKwljYXNlIEZTTF9DUE1fVFNBX1NNQzI6CXJldHVybiBUU0FfU0lSQU1fRU5UUllf Q1NFTF9TTUMyOw0KPiArCWRlZmF1bHQ6DQo+ICsJCWJyZWFrOw0KPiArCX0NCj4gKwlyZXR1cm4g VFNBX1NJUkFNX0VOVFJZX0NTRUxfTlU7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgdHNhX2Fk ZF9lbnRyeShzdHJ1Y3QgdHNhICp0c2EsIHN0cnVjdCB0c2FfZW50cmllc19hcmVhICphcmVhLA0K PiArCQkJIHUzMiBjb3VudCwgdTMyIHNlcmlhbF9pZCkNCj4gK3sNCj4gKwl2b2lkICpfX2lvbWVt IGFkZHI7DQo+ICsJdTMyIGxlZnQ7DQo+ICsJdTMyIHZhbDsNCj4gKwl1MzIgY250Ow0KPiArCXUz MiBuYjsNCj4gKw0KPiArCWFkZHIgPSBhcmVhLT5sYXN0X2VudHJ5ID8gYXJlYS0+bGFzdF9lbnRy eSArIDQgOiBhcmVhLT5lbnRyaWVzX3N0YXJ0Ow0KPiArDQo+ICsJbmIgPSBESVZfUk9VTkRfVVAo Y291bnQsIDgpOw0KPiArCWlmICgoYWRkciArIChuYiAqIDQpKSA+IGFyZWEtPmVudHJpZXNfbmV4 dCkgew0KPiArCQlkZXZfZXJyKHRzYS0+ZGV2LCAic2kgcmFtIGFyZWEgZnVsbFxuIik7DQo+ICsJ CXJldHVybiAtRU5PU1BDOw0KPiArCX0NCj4gKw0KPiArCWlmIChhcmVhLT5sYXN0X2VudHJ5KSB7 DQo+ICsJCS8qIENsZWFyIGxhc3QgZmxhZyAqLw0KPiArCQl0c2FfY2xyYml0czMyKGFyZWEtPmxh c3RfZW50cnksIFRTQV9TSVJBTV9FTlRSWV9MQVNUKTsNCj4gKwl9DQo+ICsNCj4gKwlsZWZ0ID0g Y291bnQ7DQo+ICsJd2hpbGUgKGxlZnQpIHsNCj4gKwkJdmFsID0gVFNBX1NJUkFNX0VOVFJZX0JZ VEUgfCB0c2Ffc2VyaWFsX2lkMmNzZWwodHNhLCBzZXJpYWxfaWQpOw0KPiArDQo+ICsJCWlmIChs ZWZ0ID4gMTYpIHsNCj4gKwkJCWNudCA9IDE2Ow0KPiArCQl9IGVsc2Ugew0KPiArCQkJY250ID0g bGVmdDsNCj4gKwkJCXZhbCB8PSBUU0FfU0lSQU1fRU5UUllfTEFTVDsNCj4gKwkJCWFyZWEtPmxh c3RfZW50cnkgPSBhZGRyOw0KPiArCQl9DQo+ICsJCXZhbCB8PSBUU0FfU0lSQU1fRU5UUllfQ05U KGNudCAtIDEpOw0KPiArDQo+ICsJCXRzYV93cml0ZTMyKGFkZHIsIHZhbCk7DQo+ICsJCWFkZHIg Kz0gNDsNCj4gKwkJbGVmdCAtPSBjbnQ7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyBpbnQgdHNhX29mX3BhcnNlX3RkbV9yb3V0ZShzdHJ1Y3QgdHNhICp0 c2EsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqdGRtX25wLA0KPiArCQkJCSAgdTMyIHRkbXMsIHUzMiB0 ZG1faWQsIGJvb2wgaXNfcngpDQo+ICt7DQo+ICsJc3RydWN0IHRzYV9lbnRyaWVzX2FyZWEgYXJl YTsNCj4gKwljb25zdCBjaGFyICpyb3V0ZV9uYW1lOw0KPiArCXUzMiBzZXJpYWxfaWQ7DQo+ICsJ aW50IGxlbiwgaTsNCj4gKwl1MzIgY291bnQ7DQo+ICsJY29uc3QgY2hhciAqc2VyaWFsX25hbWU7 DQo+ICsJc3RydWN0IHRzYV9zZXJpYWxfaW5mbyAqc2VyaWFsX2luZm87DQo+ICsJc3RydWN0IHRz YV90ZG0gKnRkbTsNCj4gKwlpbnQgcmV0Ow0KPiArCXUzMiB0czsNCj4gKw0KPiArCXJvdXRlX25h bWUgPSBpc19yeCA/ICJmc2wscngtdHMtcm91dGVzIiA6ICJmc2wsdHgtdHMtcm91dGVzIjsNCj4g Kw0KPiArCWxlbiA9IG9mX3Byb3BlcnR5X2NvdW50X3UzMl9lbGVtcyh0ZG1fbnAsICByb3V0ZV9u YW1lKTsNCj4gKwlpZiAobGVuIDwgMCkgew0KPiArCQlkZXZfZXJyKHRzYS0+ZGV2LCAiJXBPRjog ZmFpbGVkIHRvIHJlYWQgJXNcbiIsIHRkbV9ucCwgcm91dGVfbmFtZSk7DQo+ICsJCXJldHVybiBs ZW47DQo+ICsJfQ0KPiArCWlmIChsZW4gJSAyICE9IDApIHsNCj4gKwkJZGV2X2Vycih0c2EtPmRl diwgIiVwT0Y6IHdyb25nICVzIGZvcm1hdFxuIiwgdGRtX25wLCByb3V0ZV9uYW1lKTsNCj4gKwkJ cmV0dXJuIC1FSU5WQUw7DQo+ICsJfQ0KPiArDQo+ICsJdHNhX2luaXRfZW50cmllc19hcmVhKHRz YSwgJmFyZWEsIHRkbXMsIHRkbV9pZCwgaXNfcngpOw0KPiArCXRzID0gMDsNCj4gKwlmb3IgKGkg PSAwOyBpIDwgbGVuOyBpICs9IDIpIHsNCj4gKwkJb2ZfcHJvcGVydHlfcmVhZF91MzJfaW5kZXgo dGRtX25wLCByb3V0ZV9uYW1lLCBpLCAmY291bnQpOw0KPiArCQlvZl9wcm9wZXJ0eV9yZWFkX3Uz Ml9pbmRleCh0ZG1fbnAsIHJvdXRlX25hbWUsIGkgKyAxLCAmc2VyaWFsX2lkKTsNCj4gKw0KPiAr CQlpZiAoc2VyaWFsX2lkID49IEFSUkFZX1NJWkUodHNhLT5zZXJpYWxzKSkgew0KPiArCQkJZGV2 X2Vycih0c2EtPmRldiwgIiVwT0Y6IGludmFsaWQgc2VyaWFsIGlkICgldSlcbiIsDQo+ICsJCQkJ dGRtX25wLCBzZXJpYWxfaWQpOw0KPiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJCX0NCj4gKw0K PiArCQlzZXJpYWxfbmFtZSA9IHRzYV9zZXJpYWxfaWQybmFtZSh0c2EsIHNlcmlhbF9pZCk7DQo+ ICsJCWlmICghc2VyaWFsX25hbWUpIHsNCj4gKwkJCWRldl9lcnIodHNhLT5kZXYsICIlcE9GOiB1 bnN1cHBvcnRlZCBzZXJpYWwgaWQgKCV1KVxuIiwNCj4gKwkJCQl0ZG1fbnAsIHNlcmlhbF9pZCk7 DQo+ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwkJfQ0KPiArDQo+ICsJCWRldl9kYmcodHNhLT5k ZXYsICJ0ZG1faWQ9JXUsICVzIHRzICV1Li4ldSAtPiAlc1xuIiwNCj4gKwkJCXRkbV9pZCwgcm91 dGVfbmFtZSwgdHMsIHRzK2NvdW50LTEsIHNlcmlhbF9uYW1lKTsNCj4gKwkJdHMgKz0gY291bnQ7 DQo+ICsNCj4gKwkJcmV0ID0gdHNhX2FkZF9lbnRyeSh0c2EsICZhcmVhLCBjb3VudCwgc2VyaWFs X2lkKTsNCj4gKwkJaWYgKHJldCkNCj4gKwkJCXJldHVybiByZXQ7DQo+ICsNCj4gKwkJc2VyaWFs X2luZm8gPSAmdHNhLT5zZXJpYWxzW3NlcmlhbF9pZF0uaW5mbzsNCj4gKwkJdGRtID0gJnRzYS0+ dGRtW3RkbV9pZF07DQo+ICsJCWlmIChpc19yeCkgew0KPiArCQkJc2VyaWFsX2luZm8tPnJ4X2Zz X3JhdGUgPSBjbGtfZ2V0X3JhdGUodGRtLT5sMXJzeW5jX2Nsayk7DQo+ICsJCQlzZXJpYWxfaW5m by0+cnhfYml0X3JhdGUgPSBjbGtfZ2V0X3JhdGUodGRtLT5sMXJjbGtfY2xrKTsNCj4gKwkJCXNl cmlhbF9pbmZvLT5uYl9yeF90cyArPSBjb3VudDsNCj4gKwkJfSBlbHNlIHsNCj4gKwkJCXNlcmlh bF9pbmZvLT50eF9mc19yYXRlID0gdGRtLT5sMXRzeW5jX2NsayA/DQo+ICsJCQkJY2xrX2dldF9y YXRlKHRkbS0+bDF0c3luY19jbGspIDoNCj4gKwkJCQljbGtfZ2V0X3JhdGUodGRtLT5sMXJzeW5j X2Nsayk7DQo+ICsJCQlzZXJpYWxfaW5mby0+dHhfYml0X3JhdGUgPSB0ZG0tPmwxdGNsa19jbGsg Pw0KPiArCQkJCWNsa19nZXRfcmF0ZSh0ZG0tPmwxdGNsa19jbGspIDoNCj4gKwkJCQljbGtfZ2V0 X3JhdGUodGRtLT5sMXJjbGtfY2xrKTsNCj4gKwkJCXNlcmlhbF9pbmZvLT5uYl90eF90cyArPSBj b3VudDsNCj4gKwkJfQ0KPiArCX0NCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGlj IGlubGluZSBpbnQgdHNhX29mX3BhcnNlX3RkbV9yeF9yb3V0ZShzdHJ1Y3QgdHNhICp0c2EsDQo+ ICsJCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnRkbV9ucCwNCj4gKwkJCQkJICAgIHUzMiB0 ZG1zLCB1MzIgdGRtX2lkKQ0KPiArew0KPiArCXJldHVybiB0c2Ffb2ZfcGFyc2VfdGRtX3JvdXRl KHRzYSwgdGRtX25wLCB0ZG1zLCB0ZG1faWQsIHRydWUpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMg aW5saW5lIGludCB0c2Ffb2ZfcGFyc2VfdGRtX3R4X3JvdXRlKHN0cnVjdCB0c2EgKnRzYSwNCj4g KwkJCQkJICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqdGRtX25wLA0KPiArCQkJCQkgICAgdTMyIHRk bXMsIHUzMiB0ZG1faWQpDQo+ICt7DQo+ICsJcmV0dXJuIHRzYV9vZl9wYXJzZV90ZG1fcm91dGUo dHNhLCB0ZG1fbnAsIHRkbXMsIHRkbV9pZCwgZmFsc2UpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMg aW50IHRzYV9vZl9wYXJzZV90ZG1zKHN0cnVjdCB0c2EgKnRzYSwgc3RydWN0IGRldmljZV9ub2Rl ICpucCkNCj4gK3sNCj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnRkbV9ucDsNCj4gKwlzdHJ1Y3Qg dHNhX3RkbSAqdGRtOw0KPiArCXN0cnVjdCBjbGsgKmNsazsNCj4gKwljb25zdCBjaGFyICptb2Rl Ow0KPiArCXUzMiB0ZG1faWQsIHZhbDsNCj4gKwlpbnQgcmV0Ow0KPiArCWludCBpOw0KPiArDQo+ ICsJdHNhLT50ZG1zID0gMDsNCj4gKwl0c2EtPnRkbVswXS5pc19lbmFibGUgPSBmYWxzZTsNCj4g Kwl0c2EtPnRkbVsxXS5pc19lbmFibGUgPSBmYWxzZTsNCj4gKw0KPiArCWZvcl9lYWNoX2F2YWls YWJsZV9jaGlsZF9vZl9ub2RlKG5wLCB0ZG1fbnApIHsNCj4gKwkJcmV0ID0gb2ZfcHJvcGVydHlf cmVhZF91MzIodGRtX25wLCAicmVnIiwgJnRkbV9pZCk7DQo+ICsJCWlmIChyZXQpIHsNCj4gKwkJ CWRldl9lcnIodHNhLT5kZXYsICIlcE9GOiBmYWlsZWQgdG8gcmVhZCByZWdcbiIsIHRkbV9ucCk7 DQo+ICsJCQlvZl9ub2RlX3B1dCh0ZG1fbnApOw0KPiArCQkJcmV0dXJuIHJldDsNCj4gKwkJfQ0K PiArCQlzd2l0Y2ggKHRkbV9pZCkgew0KPiArCQljYXNlIDA6DQo+ICsJCQl0c2EtPnRkbXMgfD0g QklUKFRTQV9URE1BKTsNCj4gKwkJCWJyZWFrOw0KPiArCQljYXNlIDE6DQo+ICsJCQl0c2EtPnRk bXMgfD0gQklUKFRTQV9URE1CKTsNCj4gKwkJCWJyZWFrOw0KPiArCQlkZWZhdWx0Og0KPiArCQkJ ZGV2X2Vycih0c2EtPmRldiwgIiVwT0Y6IEludmFsaWQgdGRtX2lkICgldSlcbiIsIHRkbV9ucCwN Cj4gKwkJCQl0ZG1faWQpOw0KPiArCQkJb2Zfbm9kZV9wdXQodGRtX25wKTsNCj4gKwkJCXJldHVy biAtRUlOVkFMOw0KPiArCQl9DQo+ICsJfQ0KPiArDQo+ICsJZm9yX2VhY2hfYXZhaWxhYmxlX2No aWxkX29mX25vZGUobnAsIHRkbV9ucCkgew0KPiArCQlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3Uz Mih0ZG1fbnAsICJyZWciLCAmdGRtX2lkKTsNCj4gKwkJaWYgKHJldCkgew0KPiArCQkJZGV2X2Vy cih0c2EtPmRldiwgIiVwT0Y6IGZhaWxlZCB0byByZWFkIHJlZ1xuIiwgdGRtX25wKTsNCj4gKwkJ CW9mX25vZGVfcHV0KHRkbV9ucCk7DQo+ICsJCQlyZXR1cm4gcmV0Ow0KPiArCQl9DQo+ICsNCj4g KwkJdGRtID0gJnRzYS0+dGRtW3RkbV9pZF07DQo+ICsNCj4gKwkJbW9kZSA9ICJkaXNhYmxlZCI7 DQo+ICsJCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKHRkbV9ucCwgImZzbCxkaWFnbm9z dGljLW1vZGUiLCAmbW9kZSk7DQo+ICsJCWlmIChyZXQgJiYgcmV0ICE9IC1FSU5WQUwpIHsNCj4g KwkJCWRldl9lcnIodHNhLT5kZXYsICIlcE9GOiBmYWlsZWQgdG8gcmVhZCBmc2wsZGlhZ25vc3Rp Yy1tb2RlXG4iLA0KPiArCQkJCXRkbV9ucCk7DQo+ICsJCQlvZl9ub2RlX3B1dCh0ZG1fbnApOw0K PiArCQkJcmV0dXJuIHJldDsNCj4gKwkJfQ0KPiArCQlpZiAoIXN0cmNtcChtb2RlLCAiZGlzYWJs ZWQiKSkgew0KPiArCQkJdGRtLT5zaW1vZGVfdGRtIHw9IFRTQV9TSU1PREVfVERNX1NETV9OT1JN Ow0KPiArCQl9IGVsc2UgaWYgKCFzdHJjbXAobW9kZSwgImVjaG8iKSkgew0KPiArCQkJdGRtLT5z aW1vZGVfdGRtIHw9IFRTQV9TSU1PREVfVERNX1NETV9FQ0hPOw0KPiArCQl9IGVsc2UgaWYgKCFz dHJjbXAobW9kZSwgImludGVybmFsLWxvb3BiYWNrIikpIHsNCj4gKwkJCXRkbS0+c2ltb2RlX3Rk bSB8PSBUU0FfU0lNT0RFX1RETV9TRE1fSU5UTF9MT09QOw0KPiArCQl9IGVsc2UgaWYgKCFzdHJj bXAobW9kZSwgImNvbnRyb2wtbG9vcGJhY2siKSkgew0KPiArCQkJdGRtLT5zaW1vZGVfdGRtIHw9 IFRTQV9TSU1PREVfVERNX1NETV9MT09QX0NUUkw7DQo+ICsJCX0gZWxzZSB7DQo+ICsJCQlkZXZf ZXJyKHRzYS0+ZGV2LCAiJXBPRjogSW52YWxpZCBmc2wsZGlhZ25vc3RpYy1tb2RlICglcylcbiIs DQo+ICsJCQkJdGRtX25wLCBtb2RlKTsNCj4gKwkJCW9mX25vZGVfcHV0KHRkbV9ucCk7DQo+ICsJ CQlyZXR1cm4gLUVJTlZBTDsNCj4gKwkJfQ0KPiArDQo+ICsJCXZhbCA9IDA7DQo+ICsJCXJldCA9 IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHRkbV9ucCwgImZzbCxyeC1mcmFtZS1zeW5jLWRlbGF5LWJp dHMiLA0KPiArCQkJCQkgICAmdmFsKTsNCj4gKwkJaWYgKHJldCAmJiByZXQgIT0gLUVJTlZBTCkg ew0KPiArCQkJZGV2X2Vycih0c2EtPmRldiwNCj4gKwkJCQkiJXBPRjogZmFpbGVkIHRvIHJlYWQg ZnNsLHJ4LWZyYW1lLXN5bmMtZGVsYXktYml0c1xuIiwNCj4gKwkJCQl0ZG1fbnApOw0KPiArCQkJ b2Zfbm9kZV9wdXQodGRtX25wKTsNCj4gKwkJCXJldHVybiByZXQ7DQo+ICsJCX0NCj4gKwkJaWYg KHZhbCA+IDMpIHsNCj4gKwkJCWRldl9lcnIodHNhLT5kZXYsDQo+ICsJCQkJIiVwT0Y6IEludmFs aWQgZnNsLHJ4LWZyYW1lLXN5bmMtZGVsYXktYml0cyAoJXUpXG4iLA0KPiArCQkJCXRkbV9ucCwg dmFsKTsNCj4gKwkJCW9mX25vZGVfcHV0KHRkbV9ucCk7DQo+ICsJCQlyZXR1cm4gLUVJTlZBTDsN Cj4gKwkJfQ0KPiArCQl0ZG0tPnNpbW9kZV90ZG0gfD0gVFNBX1NJTU9ERV9URE1fUkZTRCh2YWwp Ow0KPiArDQo+ICsJCXZhbCA9IDA7DQo+ICsJCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHRk bV9ucCwgImZzbCx0eC1mcmFtZS1zeW5jLWRlbGF5LWJpdHMiLA0KPiArCQkJCQkgICAmdmFsKTsN Cj4gKwkJaWYgKHJldCAmJiByZXQgIT0gLUVJTlZBTCkgew0KPiArCQkJZGV2X2Vycih0c2EtPmRl diwNCj4gKwkJCQkiJXBPRjogZmFpbGVkIHRvIHJlYWQgZnNsLHR4LWZyYW1lLXN5bmMtZGVsYXkt Yml0c1xuIiwNCj4gKwkJCQl0ZG1fbnApOw0KPiArCQkJb2Zfbm9kZV9wdXQodGRtX25wKTsNCj4g KwkJCXJldHVybiByZXQ7DQo+ICsJCX0NCj4gKwkJaWYgKHZhbCA+IDMpIHsNCj4gKwkJCWRldl9l cnIodHNhLT5kZXYsDQo+ICsJCQkJIiVwT0Y6IEludmFsaWQgZnNsLHR4LWZyYW1lLXN5bmMtZGVs YXktYml0cyAoJXUpXG4iLA0KPiArCQkJCXRkbV9ucCwgdmFsKTsNCj4gKwkJCW9mX25vZGVfcHV0 KHRkbV9ucCk7DQo+ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwkJfQ0KPiArCQl0ZG0tPnNpbW9k ZV90ZG0gfD0gVFNBX1NJTU9ERV9URE1fVEZTRCh2YWwpOw0KPiArDQo+ICsJCWlmIChvZl9wcm9w ZXJ0eV9yZWFkX2Jvb2wodGRtX25wLCAiZnNsLGNvbW1vbi1yeHR4LXBpbnMiKSkNCj4gKwkJCXRk bS0+c2ltb2RlX3RkbSB8PSBUU0FfU0lNT0RFX1RETV9DUlQ7DQo+ICsNCj4gKwkJaWYgKG9mX3By b3BlcnR5X3JlYWRfYm9vbCh0ZG1fbnAsICJmc2wsY2xvY2stZmFsbGluZy1lZGdlIikpDQo+ICsJ CQl0ZG0tPnNpbW9kZV90ZG0gfD0gVFNBX1NJTU9ERV9URE1fQ0U7DQo+ICsNCj4gKwkJaWYgKG9m X3Byb3BlcnR5X3JlYWRfYm9vbCh0ZG1fbnAsICJmc2wsZnN5bmMtcmlzaW5nLWVkZ2UiKSkNCj4g KwkJCXRkbS0+c2ltb2RlX3RkbSB8PSBUU0FfU0lNT0RFX1RETV9GRTsNCj4gKw0KPiArCQlpZiAo b2ZfcHJvcGVydHlfcmVhZF9ib29sKHRkbV9ucCwgImZzbCxkb3VibGUtc3BlZWQtY2xvY2siKSkN Cj4gKwkJCXRkbS0+c2ltb2RlX3RkbSB8PSBUU0FfU0lNT0RFX1RETV9EU0M7DQo+ICsNCj4gKwkJ Y2xrID0gb2ZfY2xrX2dldF9ieV9uYW1lKHRkbV9ucCwgImwxcnN5bmMiKTsNCj4gKwkJaWYgKElT X0VSUihjbGspKSB7DQo+ICsJCQlyZXQgPSBQVFJfRVJSKGNsayk7DQo+ICsJCQlvZl9ub2RlX3B1 dCh0ZG1fbnApOw0KPiArCQkJZ290byBlcnI7DQo+ICsJCX0NCj4gKwkJcmV0ID0gY2xrX3ByZXBh cmVfZW5hYmxlKGNsayk7DQo+ICsJCWlmIChyZXQpIHsNCj4gKwkJCWNsa19wdXQoY2xrKTsNCj4g KwkJCW9mX25vZGVfcHV0KHRkbV9ucCk7DQo+ICsJCQlnb3RvIGVycjsNCj4gKwkJfQ0KPiArCQl0 ZG0tPmwxcnN5bmNfY2xrID0gY2xrOw0KPiArDQo+ICsJCWNsayA9IG9mX2Nsa19nZXRfYnlfbmFt ZSh0ZG1fbnAsICJsMXJjbGsiKTsNCj4gKwkJaWYgKElTX0VSUihjbGspKSB7DQo+ICsJCQlyZXQg PSBQVFJfRVJSKGNsayk7DQo+ICsJCQlvZl9ub2RlX3B1dCh0ZG1fbnApOw0KPiArCQkJZ290byBl cnI7DQo+ICsJCX0NCj4gKwkJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGNsayk7DQo+ICsJCWlm IChyZXQpIHsNCj4gKwkJCWNsa19wdXQoY2xrKTsNCj4gKwkJCW9mX25vZGVfcHV0KHRkbV9ucCk7 DQo+ICsJCQlnb3RvIGVycjsNCj4gKwkJfQ0KPiArCQl0ZG0tPmwxcmNsa19jbGsgPSBjbGs7DQo+ ICsNCj4gKwkJaWYgKCEodGRtLT5zaW1vZGVfdGRtICYgVFNBX1NJTU9ERV9URE1fQ1JUKSkgew0K PiArCQkJY2xrID0gb2ZfY2xrX2dldF9ieV9uYW1lKHRkbV9ucCwgImwxdHN5bmMiKTsNCj4gKwkJ CWlmIChJU19FUlIoY2xrKSkgew0KPiArCQkJCXJldCA9IFBUUl9FUlIoY2xrKTsNCj4gKwkJCQlv Zl9ub2RlX3B1dCh0ZG1fbnApOw0KPiArCQkJCWdvdG8gZXJyOw0KPiArCQkJfQ0KPiArCQkJcmV0 ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGNsayk7DQo+ICsJCQlpZiAocmV0KSB7DQo+ICsJCQkJY2xr X3B1dChjbGspOw0KPiArCQkJCW9mX25vZGVfcHV0KHRkbV9ucCk7DQo+ICsJCQkJZ290byBlcnI7 DQo+ICsJCQl9DQo+ICsJCQl0ZG0tPmwxdHN5bmNfY2xrID0gY2xrOw0KPiArDQo+ICsJCQljbGsg PSBvZl9jbGtfZ2V0X2J5X25hbWUodGRtX25wLCAibDF0Y2xrIik7DQo+ICsJCQlpZiAoSVNfRVJS KGNsaykpIHsNCj4gKwkJCQlyZXQgPSBQVFJfRVJSKGNsayk7DQo+ICsJCQkJb2Zfbm9kZV9wdXQo dGRtX25wKTsNCj4gKwkJCQlnb3RvIGVycjsNCj4gKwkJCX0NCj4gKwkJCXJldCA9IGNsa19wcmVw YXJlX2VuYWJsZShjbGspOw0KPiArCQkJaWYgKHJldCkgew0KPiArCQkJCWNsa19wdXQoY2xrKTsN Cj4gKwkJCQlvZl9ub2RlX3B1dCh0ZG1fbnApOw0KPiArCQkJCWdvdG8gZXJyOw0KPiArCQkJfQ0K PiArCQkJdGRtLT5sMXRjbGtfY2xrID0gY2xrOw0KPiArCQl9DQo+ICsNCj4gKwkJcmV0ID0gdHNh X29mX3BhcnNlX3RkbV9yeF9yb3V0ZSh0c2EsIHRkbV9ucCwgdHNhLT50ZG1zLCB0ZG1faWQpOw0K PiArCQlpZiAocmV0KSB7DQo+ICsJCQlvZl9ub2RlX3B1dCh0ZG1fbnApOw0KPiArCQkJZ290byBl cnI7DQo+ICsJCX0NCj4gKw0KPiArCQlyZXQgPSB0c2Ffb2ZfcGFyc2VfdGRtX3R4X3JvdXRlKHRz YSwgdGRtX25wLCB0c2EtPnRkbXMsIHRkbV9pZCk7DQo+ICsJCWlmIChyZXQpIHsNCj4gKwkJCW9m X25vZGVfcHV0KHRkbV9ucCk7DQo+ICsJCQlnb3RvIGVycjsNCj4gKwkJfQ0KPiArDQo+ICsJCXRk bS0+aXNfZW5hYmxlID0gdHJ1ZTsNCj4gKwl9DQo+ICsJcmV0dXJuIDA7DQo+ICsNCj4gK2VycjoN Cj4gKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7DQo+ICsJCWlmICh0c2EtPnRkbVtpXS5sMXJz eW5jX2Nsaykgew0KPiArCQkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHRzYS0+dGRtW2ldLmwxcnN5 bmNfY2xrKTsNCj4gKwkJCWNsa19wdXQodHNhLT50ZG1baV0ubDFyc3luY19jbGspOw0KPiArCQl9 DQo+ICsJCWlmICh0c2EtPnRkbVtpXS5sMXJjbGtfY2xrKSB7DQo+ICsJCQljbGtfZGlzYWJsZV91 bnByZXBhcmUodHNhLT50ZG1baV0ubDFyY2xrX2Nsayk7DQo+ICsJCQljbGtfcHV0KHRzYS0+dGRt W2ldLmwxcmNsa19jbGspOw0KPiArCQl9DQo+ICsJCWlmICh0c2EtPnRkbVtpXS5sMXRzeW5jX2Ns aykgew0KPiArCQkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHRzYS0+dGRtW2ldLmwxcnN5bmNfY2xr KTsNCj4gKwkJCWNsa19wdXQodHNhLT50ZG1baV0ubDFyc3luY19jbGspOw0KPiArCQl9DQo+ICsJ CWlmICh0c2EtPnRkbVtpXS5sMXRjbGtfY2xrKSB7DQo+ICsJCQljbGtfZGlzYWJsZV91bnByZXBh cmUodHNhLT50ZG1baV0ubDFyY2xrX2Nsayk7DQo+ICsJCQljbGtfcHV0KHRzYS0+dGRtW2ldLmwx cmNsa19jbGspOw0KPiArCQl9DQo+ICsJfQ0KPiArCXJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyB2b2lkIHRzYV9pbml0X3NpX3JhbShzdHJ1Y3QgdHNhICp0c2EpDQo+ICt7DQo+ICsJ cmVzb3VyY2Vfc2l6ZV90IGk7DQo+ICsNCj4gKwkvKiBGaWxsIGFsbCBlbnRyaWVzIGFzIHRoZSBs YXN0IG9uZSAqLw0KPiArCWZvciAoaSA9IDA7IGkgPCB0c2EtPnNpX3JhbV9zejsgaSArPSA0KQ0K PiArCQl0c2Ffd3JpdGUzMih0c2EtPnNpX3JhbSArIGksIFRTQV9TSVJBTV9FTlRSWV9MQVNUKTsN Cj4gK30NCj4gKw0KPiArc3RhdGljIGludCB0c2FfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldikNCj4gK3sNCj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGRldi0+ZGV2Lm9m X25vZGU7DQo+ICsJc3RydWN0IHJlc291cmNlICpyZXM7DQo+ICsJc3RydWN0IHRzYSAqdHNhOw0K PiArCXVuc2lnbmVkIGludCBpOw0KPiArCXUzMiB2YWw7DQo+ICsJaW50IHJldDsNCj4gKw0KPiAr CXRzYSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnRzYSksIEdGUF9LRVJORUwp Ow0KPiArCWlmICghdHNhKQ0KPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gKw0KPiArCXRzYS0+ZGV2 ID0gJnBkZXYtPmRldjsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRzYS0+ c2VyaWFscyk7IGkrKykNCj4gKwkJdHNhLT5zZXJpYWxzW2ldLmlkID0gaTsNCj4gKw0KPiArCXNw aW5fbG9ja19pbml0KCZ0c2EtPmxvY2spOw0KPiArDQo+ICsJdHNhLT5zaV9yZWdzID0gZGV2bV9w bGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlX2J5bmFtZShwZGV2LCAic2lfcmVncyIpOw0KPiArCWlm IChJU19FUlIodHNhLT5zaV9yZWdzKSkNCj4gKwkJcmV0dXJuIFBUUl9FUlIodHNhLT5zaV9yZWdz KTsNCj4gKw0KPiArCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9S RVNPVVJDRV9NRU0sICJzaV9yYW0iKTsNCj4gKwlpZiAoIXJlcykgew0KPiArCQlkZXZfZXJyKHRz YS0+ZGV2LCAic2lfcmFtIHJlc291cmNlIG1pc3NpbmdcbiIpOw0KPiArCQlyZXR1cm4gLUVJTlZB TDsNCj4gKwl9DQo+ICsJdHNhLT5zaV9yYW1fc3ogPSByZXNvdXJjZV9zaXplKHJlcyk7DQo+ICsJ dHNhLT5zaV9yYW0gPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsNCj4g KwlpZiAoSVNfRVJSKHRzYS0+c2lfcmFtKSkNCj4gKwkJcmV0dXJuIFBUUl9FUlIodHNhLT5zaV9y YW0pOw0KPiArDQo+ICsJdHNhX2luaXRfc2lfcmFtKHRzYSk7DQo+ICsNCj4gKwlyZXQgPSB0c2Ff b2ZfcGFyc2VfdGRtcyh0c2EsIG5wKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1cm4gcmV0Ow0K PiArDQo+ICsJLyogU2V0IFNJTU9ERSAqLw0KPiArCXZhbCA9IDA7DQo+ICsJaWYgKHRzYS0+dGRt WzBdLmlzX2VuYWJsZSkNCj4gKwkJdmFsIHw9IFRTQV9TSU1PREVfVERNQSh0c2EtPnRkbVswXS5z aW1vZGVfdGRtKTsNCj4gKwlpZiAodHNhLT50ZG1bMV0uaXNfZW5hYmxlKQ0KPiArCQl2YWwgfD0g VFNBX1NJTU9ERV9URE1CKHRzYS0+dGRtWzFdLnNpbW9kZV90ZG0pOw0KPiArDQo+ICsJdHNhX2Ns cnNldGJpdHMzMih0c2EtPnNpX3JlZ3MgKyBUU0FfU0lNT0RFLA0KPiArCQkJIFRTQV9TSU1PREVf VERNQShUU0FfU0lNT0RFX1RETV9NQVNLKSB8DQo+ICsJCQkgVFNBX1NJTU9ERV9URE1CKFRTQV9T SU1PREVfVERNX01BU0spLA0KPiArCQkJIHZhbCk7DQo+ICsNCj4gKwkvKiBTZXQgU0lHTVIgKi8N Cj4gKwl2YWwgPSAodHNhLT50ZG1zID09IEJJVChUU0FfVERNQSkpID8NCj4gKwkJVFNBX1NJR01S X1JETV9TVEFUSUNfVERNQSA6IFRTQV9TSUdNUl9SRE1fU1RBVElDX1RETUFCOw0KPiArCWlmICh0 c2EtPnRkbXMgJiBCSVQoVFNBX1RETUEpKQ0KPiArCQl2YWwgfD0gVFNBX1NJR01SX0VOQTsNCj4g KwlpZiAodHNhLT50ZG1zICYgQklUKFRTQV9URE1CKSkNCj4gKwkJdmFsIHw9IFRTQV9TSUdNUl9F TkI7DQo+ICsJb3V0XzgodHNhLT5zaV9yZWdzICsgVFNBX1NJR01SLCB2YWwpOw0KPiArDQo+ICsJ cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgdHNhKTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgaW50IHRzYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldikNCj4gK3sNCj4gKwlzdHJ1Y3QgdHNhICp0c2EgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShw ZGV2KTsNCj4gKwlpbnQgaTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsNCj4g KwkJaWYgKHRzYS0+dGRtW2ldLmwxcnN5bmNfY2xrKSB7DQo+ICsJCQljbGtfZGlzYWJsZV91bnBy ZXBhcmUodHNhLT50ZG1baV0ubDFyc3luY19jbGspOw0KPiArCQkJY2xrX3B1dCh0c2EtPnRkbVtp XS5sMXJzeW5jX2Nsayk7DQo+ICsJCX0NCj4gKwkJaWYgKHRzYS0+dGRtW2ldLmwxcmNsa19jbGsp IHsNCj4gKwkJCWNsa19kaXNhYmxlX3VucHJlcGFyZSh0c2EtPnRkbVtpXS5sMXJjbGtfY2xrKTsN Cj4gKwkJCWNsa19wdXQodHNhLT50ZG1baV0ubDFyY2xrX2Nsayk7DQo+ICsJCX0NCj4gKwkJaWYg KHRzYS0+dGRtW2ldLmwxdHN5bmNfY2xrKSB7DQo+ICsJCQljbGtfZGlzYWJsZV91bnByZXBhcmUo dHNhLT50ZG1baV0ubDFyc3luY19jbGspOw0KPiArCQkJY2xrX3B1dCh0c2EtPnRkbVtpXS5sMXJz eW5jX2Nsayk7DQo+ICsJCX0NCj4gKwkJaWYgKHRzYS0+dGRtW2ldLmwxdGNsa19jbGspIHsNCj4g KwkJCWNsa19kaXNhYmxlX3VucHJlcGFyZSh0c2EtPnRkbVtpXS5sMXJjbGtfY2xrKTsNCj4gKwkJ CWNsa19wdXQodHNhLT50ZG1baV0ubDFyY2xrX2Nsayk7DQo+ICsJCX0NCj4gKwl9DQo+ICsJcmV0 dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHRz YV9pZF90YWJsZVtdID0gew0KPiArCXsgLmNvbXBhdGlibGUgPSAiZnNsLGNwbTEtdHNhIiB9LA0K PiArCXt9IC8qIHNlbnRpbmVsICovDQo+ICt9Ow0KPiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwg dHNhX2lkX3RhYmxlKTsNCj4gKw0KPiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdHNh X2RyaXZlciA9IHsNCj4gKwkuZHJpdmVyID0gew0KPiArCQkubmFtZSA9ICJmc2wtdHNhIiwNCj4g KwkJLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKHRzYV9pZF90YWJsZSksDQo+ICsJfSwN Cj4gKwkucHJvYmUgPSB0c2FfcHJvYmUsDQo+ICsJLnJlbW92ZSA9IHRzYV9yZW1vdmUsDQo+ICt9 Ow0KPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcih0c2FfZHJpdmVyKTsNCj4gKw0KPiArc3RydWN0 IHRzYV9zZXJpYWwgKnRzYV9zZXJpYWxfZ2V0X2J5cGhhbmRsZShzdHJ1Y3QgZGV2aWNlX25vZGUg Km5wLA0KPiArCQkJCQkgICAgY29uc3QgY2hhciAqcGhhbmRsZV9uYW1lKQ0KPiArew0KPiArCXN0 cnVjdCBvZl9waGFuZGxlX2FyZ3Mgb3V0X2FyZ3M7DQo+ICsJc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldjsNCj4gKwlzdHJ1Y3QgdHNhX3NlcmlhbCAqdHNhX3NlcmlhbDsNCj4gKwlzdHJ1Y3Qg dHNhICp0c2E7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCXJldCA9IG9mX3BhcnNlX3BoYW5kbGVf d2l0aF9maXhlZF9hcmdzKG5wLCBwaGFuZGxlX25hbWUsIDEsIDAsICZvdXRfYXJncyk7DQo+ICsJ aWYgKHJldCA8IDApDQo+ICsJCXJldHVybiBFUlJfUFRSKHJldCk7DQo+ICsNCj4gKwlpZiAoIW9m X21hdGNoX25vZGUodHNhX2RyaXZlci5kcml2ZXIub2ZfbWF0Y2hfdGFibGUsIG91dF9hcmdzLm5w KSkgew0KPiArCQlvZl9ub2RlX3B1dChvdXRfYXJncy5ucCk7DQo+ICsJCXJldHVybiBFUlJfUFRS KC1FSU5WQUwpOw0KPiArCX0NCj4gKw0KPiArCXBkZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2Rl KG91dF9hcmdzLm5wKTsNCj4gKwlvZl9ub2RlX3B1dChvdXRfYXJncy5ucCk7DQo+ICsJaWYgKCFw ZGV2KQ0KPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsNCj4gKw0KPiArCXRzYSA9IHBsYXRm b3JtX2dldF9kcnZkYXRhKHBkZXYpOw0KPiArCWlmICghdHNhKSB7DQo+ICsJCXBsYXRmb3JtX2Rl dmljZV9wdXQocGRldik7DQo+ICsJCXJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpOw0KPiAr CX0NCj4gKw0KPiArCWlmIChvdXRfYXJncy5hcmdzX2NvdW50ICE9IDEpIHsNCj4gKwkJcGxhdGZv cm1fZGV2aWNlX3B1dChwZGV2KTsNCj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7DQo+ICsJ fQ0KPiArDQo+ICsJaWYgKG91dF9hcmdzLmFyZ3NbMF0gPj0gQVJSQVlfU0laRSh0c2EtPnNlcmlh bHMpKSB7DQo+ICsJCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7DQo+ICsJCXJldHVybiBFUlJf UFRSKC1FSU5WQUwpOw0KPiArCX0NCj4gKw0KPiArCXRzYV9zZXJpYWwgPSAmdHNhLT5zZXJpYWxz W291dF9hcmdzLmFyZ3NbMF1dOw0KPiArDQo+ICsJLyoNCj4gKwkgKiBCZSBzdXJlIHRoYXQgdGhl IHNlcmlhbCBpZCBtYXRjaGVzIHRoZSBwaGFuZGxlIGFyZy4NCj4gKwkgKiBUaGUgdHNhX3Nlcmlh bHMgdGFibGUgaXMgaW5kZXhlZCBieSBzZXJpYWwgaWRzLiBUaGUgc2VyaWFsIGlkIGlzIHNldA0K PiArCSAqIGR1cmluZyB0aGUgcHJvYmUoKSBjYWxsIGFuZCBuZWVkcyB0byBiZSBjb2hlcmVudC4N Cj4gKwkgKi8NCj4gKwlpZiAoV0FSTl9PTih0c2Ffc2VyaWFsLT5pZCAhPSBvdXRfYXJncy5hcmdz WzBdKSkgew0KPiArCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOw0KPiArCQlyZXR1cm4gRVJS X1BUUigtRUlOVkFMKTsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gdHNhX3NlcmlhbDsNCj4gK30N Cj4gK0VYUE9SVF9TWU1CT0wodHNhX3NlcmlhbF9nZXRfYnlwaGFuZGxlKTsNCj4gKw0KPiArdm9p ZCB0c2Ffc2VyaWFsX3B1dChzdHJ1Y3QgdHNhX3NlcmlhbCAqdHNhX3NlcmlhbCkNCj4gK3sNCj4g KwlzdHJ1Y3QgdHNhICp0c2EgPSB0c2Ffc2VyaWFsX2dldF90c2EodHNhX3NlcmlhbCk7DQo+ICsN Cj4gKwlwdXRfZGV2aWNlKHRzYS0+ZGV2KTsNCj4gK30NCj4gK0VYUE9SVF9TWU1CT0wodHNhX3Nl cmlhbF9wdXQpOw0KPiArDQo+ICtzdGF0aWMgdm9pZCBkZXZtX3RzYV9zZXJpYWxfcmVsZWFzZShz dHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnJlcykNCj4gK3sNCj4gKwlzdHJ1Y3QgdHNhX3Nlcmlh bCAqKnRzYV9zZXJpYWwgPSByZXM7DQo+ICsNCj4gKwl0c2Ffc2VyaWFsX3B1dCgqdHNhX3Nlcmlh bCk7DQo+ICt9DQo+ICsNCj4gK3N0cnVjdCB0c2Ffc2VyaWFsICpkZXZtX3RzYV9zZXJpYWxfZ2V0 X2J5cGhhbmRsZShzdHJ1Y3QgZGV2aWNlICpkZXYsDQo+ICsJCQkJCQkgc3RydWN0IGRldmljZV9u b2RlICpucCwNCj4gKwkJCQkJCSBjb25zdCBjaGFyICpwaGFuZGxlX25hbWUpDQo+ICt7DQo+ICsJ c3RydWN0IHRzYV9zZXJpYWwgKnRzYV9zZXJpYWw7DQo+ICsJc3RydWN0IHRzYV9zZXJpYWwgKipk cjsNCj4gKw0KPiArCWRyID0gZGV2cmVzX2FsbG9jKGRldm1fdHNhX3NlcmlhbF9yZWxlYXNlLCBz aXplb2YoKmRyKSwgR0ZQX0tFUk5FTCk7DQo+ICsJaWYgKCFkcikNCj4gKwkJcmV0dXJuIEVSUl9Q VFIoLUVOT01FTSk7DQo+ICsNCj4gKwl0c2Ffc2VyaWFsID0gdHNhX3NlcmlhbF9nZXRfYnlwaGFu ZGxlKG5wLCBwaGFuZGxlX25hbWUpOw0KPiArCWlmICghSVNfRVJSKHRzYV9zZXJpYWwpKSB7DQo+ ICsJCSpkciA9IHRzYV9zZXJpYWw7DQo+ICsJCWRldnJlc19hZGQoZGV2LCBkcik7DQo+ICsJfSBl bHNlIHsNCj4gKwkJZGV2cmVzX2ZyZWUoZHIpOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiB0c2Ff c2VyaWFsOw0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTChkZXZtX3RzYV9zZXJpYWxfZ2V0X2J5cGhh bmRsZSk7DQo+ICsNCj4gK01PRFVMRV9BVVRIT1IoIkhlcnZlIENvZGluYSA8aGVydmUuY29kaW5h QGJvb3RsaW4uY29tPiIpOw0KPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJDUE0gVFNBIGRyaXZlciIp Ow0KPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zb2Mv ZnNsL3FlL3RzYS5oIGIvZHJpdmVycy9zb2MvZnNsL3FlL3RzYS5oDQo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMDMwZTc5YmI5NzhhDQo+IC0tLSAvZGV2L251 bGwNCj4gKysrIGIvZHJpdmVycy9zb2MvZnNsL3FlL3RzYS5oDQo+IEBAIC0wLDAgKzEsNDIgQEAN Cj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovDQo+ICsvKg0KPiArICog VFNBIG1hbmFnZW1lbnQNCj4gKyAqDQo+ICsgKiBDb3B5cmlnaHQgMjAyMiBDUyBHUk9VUCBGcmFu Y2UNCj4gKyAqDQo+ICsgKiBBdXRob3I6IEhlcnZlIENvZGluYSA8aGVydmUuY29kaW5hQGJvb3Rs aW4uY29tPg0KPiArICovDQo+ICsjaWZuZGVmIF9fU09DX0ZTTF9UU0FfSF9fDQo+ICsjZGVmaW5l IF9fU09DX0ZTTF9UU0FfSF9fDQo+ICsNCj4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPg0KPiAr DQo+ICtzdHJ1Y3QgZGV2aWNlX25vZGU7DQo+ICtzdHJ1Y3QgZGV2aWNlOw0KPiArc3RydWN0IHRz YV9zZXJpYWw7DQo+ICsNCj4gK3N0cnVjdCB0c2Ffc2VyaWFsICp0c2Ffc2VyaWFsX2dldF9ieXBo YW5kbGUoc3RydWN0IGRldmljZV9ub2RlICpucCwNCj4gKwkJCQkJICAgIGNvbnN0IGNoYXIgKnBo YW5kbGVfbmFtZSk7DQo+ICt2b2lkIHRzYV9zZXJpYWxfdHNhX3B1dChzdHJ1Y3QgdHNhX3Nlcmlh bCAqdHNhX3NlcmlhbCk7DQo+ICtzdHJ1Y3QgdHNhX3NlcmlhbCAqZGV2bV90c2Ffc2VyaWFsX2dl dF9ieXBoYW5kbGUoc3RydWN0IGRldmljZSAqZGV2LA0KPiArCQkJCQkJIHN0cnVjdCBkZXZpY2Vf bm9kZSAqbnAsDQo+ICsJCQkJCQkgY29uc3QgY2hhciAqcGhhbmRsZV9uYW1lKTsNCj4gKw0KPiAr LyogQ29ubmVjdCBhbmQgZGlzY29ubmVjdCB0aGUgVFNBIHNlcmlhbCAqLw0KPiAraW50IHRzYV9z ZXJpYWxfY29ubmVjdChzdHJ1Y3QgdHNhX3NlcmlhbCAqdHNhX3NlcmlhbCk7DQo+ICtpbnQgdHNh X3NlcmlhbF9kaXNjb25uZWN0KHN0cnVjdCB0c2Ffc2VyaWFsICp0c2Ffc2VyaWFsKTsNCj4gKw0K PiArLyogQ2VsbCBpbmZvcm1hdGlvbiAqLw0KPiArc3RydWN0IHRzYV9zZXJpYWxfaW5mbyB7DQo+ ICsJdW5zaWduZWQgbG9uZyByeF9mc19yYXRlOw0KPiArCXVuc2lnbmVkIGxvbmcgcnhfYml0X3Jh dGU7DQo+ICsJdTggbmJfcnhfdHM7DQo+ICsJdW5zaWduZWQgbG9uZyB0eF9mc19yYXRlOw0KPiAr CXVuc2lnbmVkIGxvbmcgdHhfYml0X3JhdGU7DQo+ICsJdTggbmJfdHhfdHM7DQo+ICt9Ow0KPiAr DQo+ICsvKiBHZXQgaW5mb3JtYXRpb24gKi8NCj4gK2ludCB0c2Ffc2VyaWFsX2dldF9pbmZvKHN0 cnVjdCB0c2Ffc2VyaWFsICp0c2Ffc2VyaWFsLCBzdHJ1Y3QgdHNhX3NlcmlhbF9pbmZvICppbmZv KTsNCj4gKw0KPiArI2VuZGlmIC8qIF9fU09DX0ZTTF9UU0FfSF9fICovDQo=