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 4AF92C64ED6 for ; Fri, 17 Feb 2023 16:28:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230133AbjBQQ2z (ORCPT ); Fri, 17 Feb 2023 11:28:55 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39050 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230123AbjBQQ2w (ORCPT ); Fri, 17 Feb 2023 11:28:52 -0500 Received: from FRA01-MR2-obe.outbound.protection.outlook.com (mail-mr2fra01on2087.outbound.protection.outlook.com [40.107.9.87]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 06945166CA; Fri, 17 Feb 2023 08:28:28 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Yl63VyN4r40pE1RWf0DwkvrSHzX4pXdNR2v540k152zslqvhYWSDRz4OVFSOIHaQhUyFQdCldBfER8k/B7i9gRcY91Z4jt9LtTmKfb3UEGFQpMjIzw4M8XaWos9ym/89G75b4Mm2PAQXGa3p7Dhxeo097TWrVuyX2dfTtWw2IBgJp1rtcK7lgFninDkOnZY9eA2CvXucGY++YSRnSgMJrmf5qtBi2hyMYnRm0AbeE6SOfovnbhgEbzSPpVh0+j/EmP9amfZclFZ4ga2s5BOApHVwr2H3vwb6wFiagGIuw3J1W0tUZfG7WuMDB7Tc8FoXKFI4otJxqxI3ckhoe9Kt5w== 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=aV+tUwpeY90B1U1/UoH7Xvwp5oXdSA7aplrCPhTBp/A=; b=EBjNMFW3dTIxUSxWggiX/lnumJfToCpkwHgVv8kLu9bVF0iPQxEHE13/Nyv76zfvfSt2S7MYof9axh6a1ySd4WzrYBxZ/G5w9XioA+sR6mFlJvyr2i0wwjzFXuP7ZoDb+iR472G3T4gxtFoTh2xE+3sr+FYBsXdUUW8Nw0x5PzbxXyCspwHkP77Wy2XQtYTFJokWRLvJv7WE4HNKoVISM8ZAPYPLRWBXBdZ3pMGcJCi7w0yMfWSJ4RL8Qx//b7bPskHSW1gnlf8A7u/pcjtjcLDxSs9mk2H6MFW0j9+45kDlaCzV+qS67ugJQccOH1xIW2abg5kXhzQadBIxGewqvw== 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=aV+tUwpeY90B1U1/UoH7Xvwp5oXdSA7aplrCPhTBp/A=; b=HCgtQ/YtY8tw/grrSlR9QfjY+LBdD8u77w8qaPeXgn47guNHMvK5XNxDxnQ0vmarAF5/1IxEhrhBf36bQvuAgPo/qNlXnVPNhISgbUHAxSzKz2Xv55/07rRQQ+HD9t0RnG2UMWuOZHP6XYxnGegOGfDk7vnCp1qr+2gIw+77hFXtVT4a/jE7Bh2yTC3cvgb4HeuJ/UekpwolVlLFhyT5lqUXqnvbYI5c3z9V46i/YHcSKFexK7fcMC0w5CpeG0D0dq7vRxCImZXdffTrgVFYWnewhOJM4taoTbYr6NhnDZV1WE70x8Oy5U/AMuOKpBAlIbuaYVHuF2DZk0a5WUB5aA== Received: from MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM (2603:10a6:501:31::15) by MR1P264MB3137.FRAP264.PROD.OUTLOOK.COM (2603:10a6:501:3a::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6111.13; Fri, 17 Feb 2023 16:28:15 +0000 Received: from MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM ([fe80::2cfb:d4c:1932:b097]) by MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM ([fe80::2cfb:d4c:1932:b097%4]) with mapi id 15.20.6111.013; Fri, 17 Feb 2023 16:28:15 +0000 From: Christophe Leroy To: Herve Codina , Li Yang , Rob Herring , Krzysztof Kozlowski , Liam Girdwood , Mark Brown , Michael Ellerman , Nicholas Piggin , Qiang Zhao , Jaroslav Kysela , Takashi Iwai , Shengjiu Wang , Xiubo Li , Fabio Estevam , Nicolin Chen CC: "linuxppc-dev@lists.ozlabs.org" , "linux-arm-kernel@lists.infradead.org" , "devicetree@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "alsa-devel@alsa-project.org" , Thomas Petazzoni Subject: Re: [PATCH v6 06/10] soc: fsl: cpm1: Add support for QMC Thread-Topic: [PATCH v6 06/10] soc: fsl: cpm1: Add support for QMC Thread-Index: AQHZQuAedR8EpF2Q8kOEHMALS4VYba7TU+oA Date: Fri, 17 Feb 2023 16:28:15 +0000 Message-ID: <0ef0473f-c0dc-9063-68b1-a7a956f638d0@csgroup.eu> References: <20230217145645.1768659-1-herve.codina@bootlin.com> <20230217145645.1768659-7-herve.codina@bootlin.com> In-Reply-To: <20230217145645.1768659-7-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_|MR1P264MB3137:EE_ x-ms-office365-filtering-correlation-id: 902ca7db-1ac0-4ec5-774e-08db1103f845 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 4w5z8dPfV3SKykMqTXLOlrBK8bEibv8MgGTy6hcF49pwvxx9HX0WupCJ4XP3owiKi03JcEe26tgCJ4tuiLSEPK8tewS6MyNp0iu1dMbYHHHbpyk56Zw/6aHtWWACquVw/X0NmVGt2fJT6gl/JKPOL7rDVpTNQF6u6ZmqK+wULpQO1gOv6QqL/ygXrn4lq3QMFoLX/uJdrIug8K1jg67zT5w0b2wsnEhR9Sv1Th4l34pbmkA5pWAnuxi/Ih70ub4ytoFyfi3pCKXMpcAfWQu0V18Ijx2C92uroRspgp3hif0ZQCDCtWyVMCEOz/q2Zm4cKc0dYD8MGL0MGxfXIHiEf2GpNSh/cdSxwhMzIYD2AwhEejQicNFrl7qQcl4igbR7AVoGvHfkk50sbCZJfWC9+cWVXbJYjb/9naSd7mZRhxfWGwV9AMC5/7Buew0zew0uEy4XPWvl5fxAySl0vYjvK/J+2A4nQcY1PZeaxAw0RiC9AwrDpjJJI+r2mdgySnDfUw36ltY7OquBv7fDxa7oSk/gu12HmUylnVaXHLOq7gIbGXfg43R0vAMTcVthnnKGlr66VJsINQYyb64E+bAkmfpmyiuzgIawpjEx1ZfTJ31mygstx5oPhMlBG2j1d/vG4i5CypWWI5VSvjz4DGcOvM+epYQvX80Zt4RXvWjjtdRSxLCiz0lqHWWwq/DJuSwTa6N3xr79ivaGCl/x/YGoPMW921tlnOVm25OhGz8wOwXwiiSS0j+6p59ISOEm8nX8XZdy8wXB+pY6hiHY72wwtPqqKRW6ERmUhJlX39aNgLM= 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)(39850400004)(136003)(346002)(396003)(376002)(366004)(451199018)(2906002)(44832011)(31696002)(86362001)(83380400001)(36756003)(2616005)(38070700005)(66574015)(30864003)(122000001)(921005)(66556008)(91956017)(76116006)(64756008)(66446008)(8676002)(66476007)(54906003)(316002)(110136005)(7416002)(41300700001)(8936002)(5660300002)(4326008)(66946007)(38100700002)(26005)(6512007)(186003)(71200400001)(478600001)(6506007)(6486002)(31686004)(43740500002)(45980500001)(559001)(579004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?ZFE4cThIdWFwNWZqM01mUUdFUUdVODVqTjc1UVZnUXpwdDFkVDBPUGZwQUJG?= =?utf-8?B?aHJzQks0WmcycWFUVThWVE93amhObWVBNEhWSHJnTHdyQ040SFFlVkx4MlM2?= =?utf-8?B?VkJUOWo3SzVEVGc2UjJraTJ4aVZxZENaMyszTGJUbXlJSG9iM3JVT2Vubk1J?= =?utf-8?B?WjgzQ1hFNHVzdzFLaVRxRldIdXFmUmNkaStZM0l3R01GNmJsYVRxNTZzN3R1?= =?utf-8?B?REI3SHM3WTN6dnFIdWZxaEpoOVFibDRodzBGT2FNQ1JJd3Vxakc5bWI3ZnF3?= =?utf-8?B?WTQ5WHBMbG9PRUR6Nk1RYzdTaW04MWFxZVU2K2g2NjNNRkQrN1Q5RmtHa2E5?= =?utf-8?B?bktMZzdJTHJVOE1CNmNFVGZldjhHdFE0U2U0b044clcwL0lSTThUbkVuaTNZ?= =?utf-8?B?YjQ0alRncUlyWEJuNW15YTRobXk1OXNlYjJrRkJOWXJKZXdURlJXNHA2cFY5?= =?utf-8?B?UGptbTZCRFY5VVBFOU43SyttbHBITm9XR1RFQ3pIbHo5Wmo3cmJxUWhUUWQr?= =?utf-8?B?OHBGYkdUSVFqNGhLOFFudVg4WWxnUGpRclpxVlh5ZjNhRno3bW1BdXZnZDBR?= =?utf-8?B?YW9qbUI4ZnlrWE1kcTU2dnBvNlgyei9DZ1hVcGtCdmh6Z3A1R2h2VE9hSkp4?= =?utf-8?B?eVA1ajZYMFlEYmphUUwyeFVZSFVqcko2b3BiMVQ1NWZsNGZqL0VPdUxXcG9i?= =?utf-8?B?clZCUDVlMGxRT0RKRVdraDVJNU0rc1RGajhPVkNLNlRxS21UTXd2VmY2TjQz?= =?utf-8?B?Ujh1SmdaWUpvdXUyOSs4TmJmdjI3NDNyL1d6Nk84M2J0NEVUSThOa0w0Rk9W?= =?utf-8?B?RWJOTFNoa21RbHhSOHEwVzZ3elNRQ0I0MlpSSG1Mc1M4cEY5bW5ia2tCTDkr?= =?utf-8?B?SkhyV3ZKYTRMbEVxenBiQmd2WHU5MlZ2aE1VS1NjVFRmdjhJbENWSHlxWG9R?= =?utf-8?B?WnVxd0cvZlgzcUtWYzhCWGVXSHFlNUx6TmpCUmMxQWxLMUtVa2NmRVE3VzhC?= =?utf-8?B?bjJmdXB5MCt6eUpIYW0vYk1QdTIxeVFDNHlDblREQW5lOHdsWTRFVzZ4d1B3?= =?utf-8?B?NXkyTFpuYTFMVHZPL3V5OHB4Ym1kcmtnZ3gyTjgxYkRXQis5MStYaUxjU2dD?= =?utf-8?B?aW9GWmpXMHZTSGZwcXI4dDNjQ2V4dFVnK1BCQStoR0FXTUFIWTJtN3Q5VW5o?= =?utf-8?B?T01tQ21KVmtiSFVGSnNJT2FWOVJBQWJPYlNCQUpENXM4VUhVVTBoK1BUSWwr?= =?utf-8?B?R0Z3Z3dpMFMxak50S01PM1daY242ejhHclhDeS9pV1A4anFoQ1gzejg1cURu?= =?utf-8?B?dnNUYVR2ZEZRenZIdVpaYzhubzExb0crM2hnUmR0MXZYNWw2R2lCWTZDckhj?= =?utf-8?B?K1N5bnhEb0lGVXVqL2ZVMmVnajQwVkJZb2dSZnppamxZQ1piMGlTUkZZdlBp?= =?utf-8?B?bk9ML1ppbFRrYk1rdFB3M3VoMDBCQ1NaU0M0L0NjbE12bUxHdk5KU295K1lU?= =?utf-8?B?TTJ6eCtxS1F6RTg2YlRpbytvZ0xOUGtUelpXaWNQRFNlWG1xeW52RVc0a1BW?= =?utf-8?B?TmJXM3hGLy9uVUVOQ3dmMjI0UDFSS1JLOGJ3N0ZLbmE2UUg5VXE0aitxNnlW?= =?utf-8?B?SVp4Q3ZDcXZtT2FqdTF3QUtDTW9Ub3FIREJzZ1R3dGVpeDdUMk9oa3o1dTJq?= =?utf-8?B?aTdjRnE1NXhkWksvbUQxVGU1YzgydEhmelNUVHVzQlloOTc5a29XdUI5Wko5?= =?utf-8?B?UXVoU1Uwd3U3SGprS0l4YmNPaEpNbG5rMkhzaGpGRTA1ZnRXcnZKcWQ1c2hr?= =?utf-8?B?SGRCQUhyN09PRzkrMy9SQ3U0VllDOXFQRDZ2QzJBOXZwcUNIUVIwS2xJZVdh?= =?utf-8?B?bjBvYmhrTkpSTGM5UGVGdm9SYkEreTB0NElNVFgySlZmL0Q3MmQ3THp2UUVL?= =?utf-8?B?UGcxS3lFei91a1JXRDN4VkFMOTh3MC9talhwcE5wd1hZNlRQL3dUTngzRHly?= =?utf-8?B?MVoxN0pIQjE1NCtqYWo5anNnUTJiQ1pmRkg3K1pPdXNBeGdSOGIwektrellC?= =?utf-8?B?UUh5R3hzSWZQTCtTSUY3N25FaFBzQUcwdVdsOWcrcjV0L1YyVjlOcVlic2Y1?= =?utf-8?B?MW9mejNLOVIwcXlBdVdiK3BpMEk4MUpFeEoxeE10MjVRRStQdDdVWmZ6NjdO?= =?utf-8?B?Mnc9PQ==?= Content-Type: text/plain; charset="utf-8" Content-ID: <9417D773FCE1C84584B29789CC607807@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: 902ca7db-1ac0-4ec5-774e-08db1103f845 X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Feb 2023 16:28:15.0620 (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: dIzfLae6hMYlMbI9c9XogXg4EXzSREHF93Juqkjh+e6yp5vmhUxuHswB82yg7wwk8/HUr9yXrrrxDiGrUzDKsljAK3pmNdUb3sc/CMwx/cM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MR1P264MB3137 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org DQoNCkxlIDE3LzAyLzIwMjMgw6AgMTU6NTYsIEhlcnZlIENvZGluYSBhIMOpY3JpdMKgOg0KPiBU aGUgUU1DIChRVUlDQyBNdWx0aWNoYW5uZWwgQ29udHJvbGxlcikgZW11bGF0ZXMgdXAgdG8gNjQN Cj4gY2hhbm5lbHMgd2l0aGluIG9uZSBzZXJpYWwgY29udHJvbGxlciB1c2luZyB0aGUgc2FtZSBU RE0NCj4gcGh5c2ljYWwgaW50ZXJmYWNlIHJvdXRlZCBmcm9tIHRoZSBUU0EuDQo+IA0KPiBJdCBp cyBhdmFpbGFibGUgaW4gc29tZQlQb3dlclFVSUNDIFNvQyBzdWNoIGFzIHRoZQ0KPiBNUEM4ODUg b3IgTVBDODY2Lg0KPiANCj4gSXQgaXMgYWxzbyBhdmFpbGFibGUgb24gc29tZSBRdWljYyBFbmdp bmUgU29Dcy4NCj4gVGhpcyBjdXJyZW50IHZlcnNpb24gc3VwcG9ydCBDUE0xIFNvQ3Mgb25seSBh bmQgc29tZQ0KPiBlbmhhbmNlbWVudCBhcmUgbmVlZGVkIHRvIHN1cHBvcnQgUXVpY2MgRW5naW5l IFNvQ3MuDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBIZXJ2ZSBDb2RpbmEgPGhlcnZlLmNvZGluYUBi b290bGluLmNvbT4NCj4gQWNrZWQtYnk6IExpIFlhbmcgPGxlb3lhbmcubGlAbnhwLmNvbT4NCg0K UmV2aWV3ZWQtYnk6IENocmlzdG9waGUgTGVyb3kgPGNocmlzdG9waGUubGVyb3lAY3Nncm91cC5l dT4NCg0KPiAtLS0NCj4gICBkcml2ZXJzL3NvYy9mc2wvcWUvS2NvbmZpZyAgfCAgIDEyICsNCj4g ICBkcml2ZXJzL3NvYy9mc2wvcWUvTWFrZWZpbGUgfCAgICAxICsNCj4gICBkcml2ZXJzL3NvYy9m c2wvcWUvcW1jLmMgICAgfCAxNTMzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr DQo+ICAgaW5jbHVkZS9zb2MvZnNsL3FlL3FtYy5oICAgIHwgICA3MSArKw0KPiAgIDQgZmlsZXMg Y2hhbmdlZCwgMTYxNyBpbnNlcnRpb25zKCspDQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvc29jL2ZzbC9xZS9xbWMuYw0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3NvYy9m c2wvcWUvcW1jLmgNCj4gDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3NvYy9mc2wvcWUvS2NvbmZp ZyBiL2RyaXZlcnMvc29jL2ZzbC9xZS9LY29uZmlnDQo+IGluZGV4IGIwMDg4NDk1YzMyMy4uZjkw Y2ZkZjBjNzYzIDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL3NvYy9mc2wvcWUvS2NvbmZpZw0KPiAr KysgYi9kcml2ZXJzL3NvYy9mc2wvcWUvS2NvbmZpZw0KPiBAQCAtNDQsNiArNDQsMTggQEAgY29u ZmlnIENQTV9UU0ENCj4gICAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoaXMN Cj4gICAJICBjb250cm9sbGVyDQo+ICAgDQo+ICtjb25maWcgQ1BNX1FNQw0KPiArCXRyaXN0YXRl ICJDUE0gUU1DIHN1cHBvcnQiDQo+ICsJZGVwZW5kcyBvbiBPRiAmJiBIQVNfSU9NRU0NCj4gKwlk ZXBlbmRzIG9uIENQTTEgfHwgKFNPQ19GU0wgJiYgQ09NUElMRV9URVNUKQ0KPiArCWRlcGVuZHMg b24gQ1BNX1RTQQ0KPiArCWhlbHANCj4gKwkgIEZyZWVzY2FsZSBDUE0gUVVJQ0MgTXVsdGljaGFu bmVsIENvbnRyb2xsZXINCj4gKwkgIChRTUMpDQo+ICsNCj4gKwkgIFRoaXMgb3B0aW9uIGVuYWJs ZXMgc3VwcG9ydCBmb3IgdGhpcw0KPiArCSAgY29udHJvbGxlcg0KPiArDQo+ICAgY29uZmlnIFFF X1RETQ0KPiAgIAlib29sDQo+ICAgCWRlZmF1bHQgeSBpZiBGU0xfVUNDX0hETEMNCj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvc29jL2ZzbC9xZS9NYWtlZmlsZSBiL2RyaXZlcnMvc29jL2ZzbC9xZS9N YWtlZmlsZQ0KPiBpbmRleCA0NWM5NjFhY2M4MWIuLmVjODUwNmUxMzExMyAxMDA2NDQNCj4gLS0t IGEvZHJpdmVycy9zb2MvZnNsL3FlL01ha2VmaWxlDQo+ICsrKyBiL2RyaXZlcnMvc29jL2ZzbC9x ZS9NYWtlZmlsZQ0KPiBAQCAtNSw2ICs1LDcgQEANCj4gICBvYmotJChDT05GSUdfUVVJQ0NfRU5H SU5FKSs9IHFlLm8gcWVfY29tbW9uLm8gcWVfaWMubyBxZV9pby5vDQo+ICAgb2JqLSQoQ09ORklH X0NQTSkJKz0gcWVfY29tbW9uLm8NCj4gICBvYmotJChDT05GSUdfQ1BNX1RTQSkJKz0gdHNhLm8N Cj4gK29iai0kKENPTkZJR19DUE1fUU1DKQkrPSBxbWMubw0KPiAgIG9iai0kKENPTkZJR19VQ0Mp CSs9IHVjYy5vDQo+ICAgb2JqLSQoQ09ORklHX1VDQ19TTE9XKQkrPSB1Y2Nfc2xvdy5vDQo+ICAg b2JqLSQoQ09ORklHX1VDQ19GQVNUKQkrPSB1Y2NfZmFzdC5vDQo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL3NvYy9mc2wvcWUvcW1jLmMgYi9kcml2ZXJzL3NvYy9mc2wvcWUvcW1jLmMNCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi5jZmE3MjA3MzUzZTANCj4gLS0t IC9kZXYvbnVsbA0KPiArKysgYi9kcml2ZXJzL3NvYy9mc2wvcWUvcW1jLmMNCj4gQEAgLTAsMCAr MSwxNTMzIEBADQo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KPiArLyoN Cj4gKyAqIFFNQyBkcml2ZXINCj4gKyAqDQo+ICsgKiBDb3B5cmlnaHQgMjAyMiBDUyBHUk9VUCBG cmFuY2UNCj4gKyAqDQo+ICsgKiBBdXRob3I6IEhlcnZlIENvZGluYSA8aGVydmUuY29kaW5hQGJv b3RsaW4uY29tPg0KPiArICovDQo+ICsNCj4gKyNpbmNsdWRlIDxzb2MvZnNsL3FlL3FtYy5oPg0K PiArI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvaGRs Yy5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4 L2lvLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+ICsjaW5jbHVkZSA8bGludXgv b2YuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPg0KPiArI2luY2x1ZGUgPGxp bnV4L3BsYXRmb3JtX2RldmljZS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4NCj4gKyNp bmNsdWRlIDxzb2MvZnNsL2NwbS5oPg0KPiArI2luY2x1ZGUgPHN5c2Rldi9mc2xfc29jLmg+DQo+ ICsjaW5jbHVkZSAidHNhLmgiDQo+ICsNCj4gKy8qIFNDQyBnZW5lcmFsIG1vZGUgcmVnaXN0ZXIg aGlnaCAoMzIgYml0cykgKi8NCj4gKyNkZWZpbmUgU0NDX0dTTVJMCTB4MDANCj4gKyNkZWZpbmUg U0NDX0dTTVJMX0VOUgkJKDEgPDwgNSkNCj4gKyNkZWZpbmUgU0NDX0dTTVJMX0VOVAkJKDEgPDwg NCkNCj4gKyNkZWZpbmUgU0NDX0dTTVJMX01PREVfUU1DCSgweDBBIDw8IDApDQo+ICsNCj4gKy8q IFNDQyBnZW5lcmFsIG1vZGUgcmVnaXN0ZXIgbG93ICgzMiBiaXRzKSAqLw0KPiArI2RlZmluZSBT Q0NfR1NNUkgJMHgwNA0KPiArI2RlZmluZSAgIFNDQ19HU01SSF9DVFNTCSgxIDw8IDcpDQo+ICsj ZGVmaW5lICAgU0NDX0dTTVJIX0NEUwkJKDEgPDwgOCkNCj4gKyNkZWZpbmUgICBTQ0NfR1NNUkhf Q1RTUAkoMSA8PCA5KQ0KPiArI2RlZmluZSAgIFNDQ19HU01SSF9DRFAJCSgxIDw8IDEwKQ0KPiAr DQo+ICsvKiBTQ0MgZXZlbnQgcmVnaXN0ZXIgKDE2IGJpdHMpICovDQo+ICsjZGVmaW5lIFNDQ19T Q0NFCTB4MTANCj4gKyNkZWZpbmUgICBTQ0NfU0NDRV9JUU9WCQkoMSA8PCAzKQ0KPiArI2RlZmlu ZSAgIFNDQ19TQ0NFX0dJTlQJCSgxIDw8IDIpDQo+ICsjZGVmaW5lICAgU0NDX1NDQ0VfR1VOCQko MSA8PCAxKQ0KPiArI2RlZmluZSAgIFNDQ19TQ0NFX0dPVgkJKDEgPDwgMCkNCj4gKw0KPiArLyog U0NDIG1hc2sgcmVnaXN0ZXIgKDE2IGJpdHMpICovDQo+ICsjZGVmaW5lIFNDQ19TQ0NNCTB4MTQN Cj4gKy8qIE11bHRpY2hhbm5lbCBiYXNlIHBvaW50ZXIgKDMyIGJpdHMpICovDQo+ICsjZGVmaW5l IFFNQ19HQkxfTUNCQVNFCQkweDAwDQo+ICsvKiBNdWx0aWNoYW5uZWwgY29udHJvbGxlciBzdGF0 ZSAoMTYgYml0cykgKi8NCj4gKyNkZWZpbmUgUU1DX0dCTF9RTUNTVEFURQkweDA0DQo+ICsvKiBN YXhpbXVtIHJlY2VpdmUgYnVmZmVyIGxlbmd0aCAoMTYgYml0cykgKi8NCj4gKyNkZWZpbmUgUU1D X0dCTF9NUkJMUgkJMHgwNg0KPiArLyogVHggdGltZS1zbG90IGFzc2lnbm1lbnQgdGFibGUgcG9p bnRlciAoMTYgYml0cykgKi8NCj4gKyNkZWZpbmUgUU1DX0dCTF9UWF9TX1BUUgkweDA4DQo+ICsv KiBSeCBwb2ludGVyICgxNiBiaXRzKSAqLw0KPiArI2RlZmluZSBRTUNfR0JMX1JYUFRSCQkweDBB DQo+ICsvKiBHbG9iYWwgcmVjZWl2ZSBmcmFtZSB0aHJlc2hvbGQgKDE2IGJpdHMpICovDQo+ICsj ZGVmaW5lIFFNQ19HQkxfR1JGVEhSCQkweDBDDQo+ICsvKiBHbG9iYWwgcmVjZWl2ZSBmcmFtZSBj b3VudCAoMTYgYml0cykgKi8NCj4gKyNkZWZpbmUgUU1DX0dCTF9HUkZDTlQJCTB4MEUNCj4gKy8q IE11bHRpY2hhbm5lbCBpbnRlcnJ1cHQgYmFzZSBhZGRyZXNzICgzMiBiaXRzKSAqLw0KPiArI2Rl ZmluZSBRTUNfR0JMX0lOVEJBU0UJCTB4MTANCj4gKy8qIE11bHRpY2hhbm5lbCBpbnRlcnJ1cHQg cG9pbnRlciAoMzIgYml0cykgKi8NCj4gKyNkZWZpbmUgUU1DX0dCTF9JTlRQVFIJCTB4MTQNCj4g Ky8qIFJ4IHRpbWUtc2xvdCBhc3NpZ25tZW50IHRhYmxlIHBvaW50ZXIgKDE2IGJpdHMpICovDQo+ ICsjZGVmaW5lIFFNQ19HQkxfUlhfU19QVFIJMHgxOA0KPiArLyogVHggcG9pbnRlciAoMTYgYml0 cykgKi8NCj4gKyNkZWZpbmUgUU1DX0dCTF9UWFBUUgkJMHgxQQ0KPiArLyogQ1JDIGNvbnN0YW50 ICgzMiBiaXRzKSAqLw0KPiArI2RlZmluZSBRTUNfR0JMX0NfTUFTSzMyCTB4MUMNCj4gKy8qIFRp bWUgc2xvdCBhc3NpZ25tZW50IHRhYmxlIFJ4ICgzMiB4IDE2IGJpdHMpICovDQo+ICsjZGVmaW5l IFFNQ19HQkxfVFNBVFJYCQkweDIwDQo+ICsvKiBUaW1lIHNsb3QgYXNzaWdubWVudCB0YWJsZSBU eCAoMzIgeCAxNiBiaXRzKSAqLw0KPiArI2RlZmluZSBRTUNfR0JMX1RTQVRUWAkJMHg2MA0KPiAr LyogQ1JDIGNvbnN0YW50ICgxNiBiaXRzKSAqLw0KPiArI2RlZmluZSBRTUNfR0JMX0NfTUFTSzE2 CTB4QTANCj4gKw0KPiArLyogVFNBIGVudHJ5ICgxNmJpdCBlbnRyeSBpbiBUU0FUUlggYW5kIFRT QVRUWCkgKi8NCj4gKyNkZWZpbmUgUU1DX1RTQV9WQUxJRAkJKDEgPDwgMTUpDQo+ICsjZGVmaW5l IFFNQ19UU0FfV1JBUAkJKDEgPDwgMTQpDQo+ICsjZGVmaW5lIFFNQ19UU0FfTUFTSwkJKDB4MzAz RikNCj4gKyNkZWZpbmUgUU1DX1RTQV9DSEFOTkVMKHgpCSgoeCkgPDwgNikNCj4gKw0KPiArLyog VHggYnVmZmVyIGRlc2NyaXB0b3IgYmFzZSBhZGRyZXNzICgxNiBiaXRzLCBvZmZzZXQgZnJvbSBN Q0JBU0UpICovDQo+ICsjZGVmaW5lIFFNQ19TUEVfVEJBU0UJMHgwMA0KPiArDQo+ICsvKiBDaGFu bmVsIG1vZGUgcmVnaXN0ZXIgKDE2IGJpdHMpICovDQo+ICsjZGVmaW5lIFFNQ19TUEVfQ0hBTVIJ MHgwMg0KPiArI2RlZmluZSAgIFFNQ19TUEVfQ0hBTVJfTU9ERV9IRExDCSgxIDw8IDE1KQ0KPiAr I2RlZmluZSAgIFFNQ19TUEVfQ0hBTVJfTU9ERV9UUkFOU1AJKCgwIDw8IDE1KSB8ICgxIDw8IDEz KSkNCj4gKyNkZWZpbmUgICBRTUNfU1BFX0NIQU1SX0VOVAkJKDEgPDwgMTIpDQo+ICsjZGVmaW5l ICAgUU1DX1NQRV9DSEFNUl9QT0wJCSgxIDw8IDgpDQo+ICsjZGVmaW5lICAgUU1DX1NQRV9DSEFN Ul9IRExDX0lETE0JKDEgPDwgMTMpDQo+ICsjZGVmaW5lICAgUU1DX1NQRV9DSEFNUl9IRExDX0NS QwkoMSA8PCA3KQ0KPiArI2RlZmluZSAgIFFNQ19TUEVfQ0hBTVJfSERMQ19OT0YJKDB4MGYgPDwg MCkNCj4gKyNkZWZpbmUgICBRTUNfU1BFX0NIQU1SX1RSQU5TUF9SRAkoMSA8PCAxNCkNCj4gKyNk ZWZpbmUgICBRTUNfU1BFX0NIQU1SX1RSQU5TUF9TWU5DCSgxIDw8IDEwKQ0KPiArDQo+ICsvKiBU eCBpbnRlcm5hbCBzdGF0ZSAoMzIgYml0cykgKi8NCj4gKyNkZWZpbmUgUU1DX1NQRV9UU1RBVEUJ MHgwNA0KPiArLyogVHggYnVmZmVyIGRlc2NyaXB0b3IgcG9pbnRlciAoMTYgYml0cykgKi8NCj4g KyNkZWZpbmUgUU1DX1NQRV9UQlBUUgkweDBDDQo+ICsvKiBaZXJvLWluc2VydGlvbiBzdGF0ZSAo MzIgYml0cykgKi8NCj4gKyNkZWZpbmUgUU1DX1NQRV9aSVNUQVRFCTB4MTQNCj4gKy8qIENoYW5u ZWzigJlzIGludGVycnVwdCBtYXNrIGZsYWdzICgxNiBiaXRzKSAqLw0KPiArI2RlZmluZSBRTUNf U1BFX0lOVE1TSwkweDFDDQo+ICsvKiBSeCBidWZmZXIgZGVzY3JpcHRvciBiYXNlIGFkZHJlc3Mg KDE2IGJpdHMsIG9mZnNldCBmcm9tIE1DQkFTRSkgKi8NCj4gKyNkZWZpbmUgUU1DX1NQRV9SQkFT RQkweDIwDQo+ICsvKiBIRExDOiBNYXhpbXVtIGZyYW1lIGxlbmd0aCByZWdpc3RlciAoMTYgYml0 cykgKi8NCj4gKyNkZWZpbmUgUU1DX1NQRV9NRkxSCTB4MjINCj4gKy8qIFRSQU5TUEFSRU5UOiBU cmFuc3BhcmVudCBtYXhpbXVtIHJlY2VpdmUgbGVuZ3RoICgxNiBiaXRzKSAqLw0KPiArI2RlZmlu ZSBRTUNfU1BFX1RNUkJMUgkweDIyDQo+ICsvKiBSeCBpbnRlcm5hbCBzdGF0ZSAoMzIgYml0cykg Ki8NCj4gKyNkZWZpbmUgUU1DX1NQRV9SU1RBVEUJMHgyNA0KPiArLyogUnggYnVmZmVyIGRlc2Ny aXB0b3IgcG9pbnRlciAoMTYgYml0cykgKi8NCj4gKyNkZWZpbmUgUU1DX1NQRV9SQlBUUgkweDJD DQo+ICsvKiBQYWNrcyA0IGJ5dGVzIHRvIDEgbG9uZyB3b3JkIGJlZm9yZSB3cml0aW5nIHRvIGJ1 ZmZlciAoMzIgYml0cykgKi8NCj4gKyNkZWZpbmUgUU1DX1NQRV9SUEFDSwkweDMwDQo+ICsvKiBa ZXJvIGRlbGV0aW9uIHN0YXRlICgzMiBiaXRzKSAqLw0KPiArI2RlZmluZSBRTUNfU1BFX1pEU1RB VEUJMHgzNA0KPiArDQo+ICsvKiBUcmFuc3BhcmVudCBzeW5jaHJvbml6YXRpb24gKDE2IGJpdHMp ICovDQo+ICsjZGVmaW5lIFFNQ19TUEVfVFJOU1lOQyAweDNDDQo+ICsjZGVmaW5lICAgUU1DX1NQ RV9UUk5TWU5DX1JYKHgpCSgoeCkgPDwgOCkNCj4gKyNkZWZpbmUgICBRTUNfU1BFX1RSTlNZTkNf VFgoeCkJKCh4KSA8PCAwKQ0KPiArDQo+ICsvKiBJbnRlcnJ1cHQgcmVsYXRlZCByZWdpc3RlcnMg Yml0cyAqLw0KPiArI2RlZmluZSBRTUNfSU5UX1YJCSgxIDw8IDE1KQ0KPiArI2RlZmluZSBRTUNf SU5UX1cJCSgxIDw8IDE0KQ0KPiArI2RlZmluZSBRTUNfSU5UX05JRAkJKDEgPDwgMTMpDQo+ICsj ZGVmaW5lIFFNQ19JTlRfSURMCQkoMSA8PCAxMikNCj4gKyNkZWZpbmUgUU1DX0lOVF9HRVRfQ0hB Tk5FTCh4KQkoKCh4KSAmIDB4MEZDMCkgPj4gNikNCj4gKyNkZWZpbmUgUU1DX0lOVF9NUkYJCSgx IDw8IDUpDQo+ICsjZGVmaW5lIFFNQ19JTlRfVU4JCSgxIDw8IDQpDQo+ICsjZGVmaW5lIFFNQ19J TlRfUlhGCQkoMSA8PCAzKQ0KPiArI2RlZmluZSBRTUNfSU5UX0JTWQkJKDEgPDwgMikNCj4gKyNk ZWZpbmUgUU1DX0lOVF9UWEIJCSgxIDw8IDEpDQo+ICsjZGVmaW5lIFFNQ19JTlRfUlhCCQkoMSA8 PCAwKQ0KPiArDQo+ICsvKiBCRCByZWxhdGVkIHJlZ2lzdGVycyBiaXRzICovDQo+ICsjZGVmaW5l IFFNQ19CRF9SWF9FCSgxIDw8IDE1KQ0KPiArI2RlZmluZSBRTUNfQkRfUlhfVwkoMSA8PCAxMykN Cj4gKyNkZWZpbmUgUU1DX0JEX1JYX0kJKDEgPDwgMTIpDQo+ICsjZGVmaW5lIFFNQ19CRF9SWF9M CSgxIDw8IDExKQ0KPiArI2RlZmluZSBRTUNfQkRfUlhfRgkoMSA8PCAxMCkNCj4gKyNkZWZpbmUg UU1DX0JEX1JYX0NNCSgxIDw8IDkpDQo+ICsjZGVmaW5lIFFNQ19CRF9SWF9VQgkoMSA8PCA3KQ0K PiArI2RlZmluZSBRTUNfQkRfUlhfTEcJKDEgPDwgNSkNCj4gKyNkZWZpbmUgUU1DX0JEX1JYX05P CSgxIDw8IDQpDQo+ICsjZGVmaW5lIFFNQ19CRF9SWF9BQgkoMSA8PCAzKQ0KPiArI2RlZmluZSBR TUNfQkRfUlhfQ1IJKDEgPDwgMikNCj4gKw0KPiArI2RlZmluZSBRTUNfQkRfVFhfUgkoMSA8PCAx NSkNCj4gKyNkZWZpbmUgUU1DX0JEX1RYX1cJKDEgPDwgMTMpDQo+ICsjZGVmaW5lIFFNQ19CRF9U WF9JCSgxIDw8IDEyKQ0KPiArI2RlZmluZSBRTUNfQkRfVFhfTAkoMSA8PCAxMSkNCj4gKyNkZWZp bmUgUU1DX0JEX1RYX1RDCSgxIDw8IDEwKQ0KPiArI2RlZmluZSBRTUNfQkRfVFhfQ00JKDEgPDwg OSkNCj4gKyNkZWZpbmUgUU1DX0JEX1RYX1VCCSgxIDw8IDcpDQo+ICsjZGVmaW5lIFFNQ19CRF9U WF9QQUQJKDB4MGYgPDwgMCkNCj4gKw0KPiArLyogTnVtYmVycyBvZiBCRHMgYW5kIGludGVycnVw dCBpdGVtcyAqLw0KPiArI2RlZmluZSBRTUNfTkJfVFhCRFMJOA0KPiArI2RlZmluZSBRTUNfTkJf UlhCRFMJOA0KPiArI2RlZmluZSBRTUNfTkJfSU5UUwkxMjgNCj4gKw0KPiArc3RydWN0IHFtY194 ZmVyX2Rlc2Mgew0KPiArCXVuaW9uIHsNCj4gKwkJdm9pZCAoKnR4X2NvbXBsZXRlKSh2b2lkICpj b250ZXh0KTsNCj4gKwkJdm9pZCAoKnJ4X2NvbXBsZXRlKSh2b2lkICpjb250ZXh0LCBzaXplX3Qg bGVuZ3RoKTsNCj4gKwl9Ow0KPiArCXZvaWQgKmNvbnRleHQ7DQo+ICt9Ow0KPiArDQo+ICtzdHJ1 Y3QgcW1jX2NoYW4gew0KPiArCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsNCj4gKwl1bnNpZ25lZCBp bnQgaWQ7DQo+ICsJc3RydWN0IHFtYyAqcW1jOw0KPiArCXZvaWQgKl9faW9tZW0gc19wYXJhbTsN Cj4gKwllbnVtIHFtY19tb2RlIG1vZGU7DQo+ICsJdTY0CXR4X3RzX21hc2s7DQo+ICsJdTY0CXJ4 X3RzX21hc2s7DQo+ICsJYm9vbCBpc19yZXZlcnNlX2RhdGE7DQo+ICsNCj4gKwlzcGlubG9ja190 CXR4X2xvY2s7DQo+ICsJY2JkX3QgX19pb21lbSAqdHhiZHM7DQo+ICsJY2JkX3QgX19pb21lbSAq dHhiZF9mcmVlOw0KPiArCWNiZF90IF9faW9tZW0gKnR4YmRfZG9uZTsNCj4gKwlzdHJ1Y3QgcW1j X3hmZXJfZGVzYyB0eF9kZXNjW1FNQ19OQl9UWEJEU107DQo+ICsJdTY0CW5iX3R4X3VuZGVycnVu Ow0KPiArCWJvb2wJaXNfdHhfc3RvcHBlZDsNCj4gKw0KPiArCXNwaW5sb2NrX3QJcnhfbG9jazsN Cj4gKwljYmRfdCBfX2lvbWVtICpyeGJkczsNCj4gKwljYmRfdCBfX2lvbWVtICpyeGJkX2ZyZWU7 DQo+ICsJY2JkX3QgX19pb21lbSAqcnhiZF9kb25lOw0KPiArCXN0cnVjdCBxbWNfeGZlcl9kZXNj IHJ4X2Rlc2NbUU1DX05CX1JYQkRTXTsNCj4gKwl1NjQJbmJfcnhfYnVzeTsNCj4gKwlpbnQJcnhf cGVuZGluZzsNCj4gKwlib29sCWlzX3J4X2hhbHRlZDsNCj4gKwlib29sCWlzX3J4X3N0b3BwZWQ7 DQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3QgcW1jIHsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7DQo+ ICsJc3RydWN0IHRzYV9zZXJpYWwgKnRzYV9zZXJpYWw7DQo+ICsJdm9pZCAqX19pb21lbSBzY2Nf cmVnczsNCj4gKwl2b2lkICpfX2lvbWVtIHNjY19wcmFtOw0KPiArCXZvaWQgKl9faW9tZW0gZHBy YW07DQo+ICsJdTE2IHNjY19wcmFtX29mZnNldDsNCj4gKwljYmRfdCBfX2lvbWVtICpiZF90YWJs ZTsNCj4gKwlkbWFfYWRkcl90IGJkX2RtYV9hZGRyOw0KPiArCXNpemVfdCBiZF9zaXplOw0KPiAr CXUxNiBfX2lvbWVtICppbnRfdGFibGU7DQo+ICsJdTE2IF9faW9tZW0gKmludF9jdXJyOw0KPiAr CWRtYV9hZGRyX3QgaW50X2RtYV9hZGRyOw0KPiArCXNpemVfdCBpbnRfc2l6ZTsNCj4gKwlzdHJ1 Y3QgbGlzdF9oZWFkIGNoYW5faGVhZDsNCj4gKwlzdHJ1Y3QgcW1jX2NoYW4gKmNoYW5zWzY0XTsN Cj4gK307DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBxbWNfd3JpdGUxNih2b2lkICpfX2lv bWVtIGFkZHIsIHUxNiB2YWwpDQo+ICt7DQo+ICsJaW93cml0ZTE2YmUodmFsLCBhZGRyKTsNCj4g K30NCj4gKw0KPiArc3RhdGljIGlubGluZSB1MTYgcW1jX3JlYWQxNih2b2lkICpfX2lvbWVtIGFk ZHIpDQo+ICt7DQo+ICsJcmV0dXJuIGlvcmVhZDE2YmUoYWRkcik7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyBpbmxpbmUgdm9pZCBxbWNfc2V0Yml0czE2KHZvaWQgKl9faW9tZW0gYWRkciwgdTE2IHNl dCkNCj4gK3sNCj4gKwlxbWNfd3JpdGUxNihhZGRyLCBxbWNfcmVhZDE2KGFkZHIpIHwgc2V0KTsN Cj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSB2b2lkIHFtY19jbHJiaXRzMTYodm9pZCAqX19p b21lbSBhZGRyLCB1MTYgY2xyKQ0KPiArew0KPiArCXFtY193cml0ZTE2KGFkZHIsIHFtY19yZWFk MTYoYWRkcikgJiB+Y2xyKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSB2b2lkIHFtY193 cml0ZTMyKHZvaWQgKl9faW9tZW0gYWRkciwgdTMyIHZhbCkNCj4gK3sNCj4gKwlpb3dyaXRlMzJi ZSh2YWwsIGFkZHIpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW5saW5lIHUzMiBxbWNfcmVhZDMy KHZvaWQgKl9faW9tZW0gYWRkcikNCj4gK3sNCj4gKwlyZXR1cm4gaW9yZWFkMzJiZShhZGRyKTsN Cj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSB2b2lkIHFtY19zZXRiaXRzMzIodm9pZCAqX19p b21lbSBhZGRyLCB1MzIgc2V0KQ0KPiArew0KPiArCXFtY193cml0ZTMyKGFkZHIsIHFtY19yZWFk MzIoYWRkcikgfCBzZXQpOw0KPiArfQ0KPiArDQo+ICsNCj4gK2ludCBxbWNfY2hhbl9nZXRfaW5m byhzdHJ1Y3QgcW1jX2NoYW4gKmNoYW4sIHN0cnVjdCBxbWNfY2hhbl9pbmZvICppbmZvKQ0KPiAr ew0KPiArCXN0cnVjdCB0c2Ffc2VyaWFsX2luZm8gdHNhX2luZm87DQo+ICsJaW50IHJldDsNCj4g Kw0KPiArCS8qIFJldHJpZXZlIGluZm8gZnJvbSB0aGUgVFNBIHJlbGF0ZWQgc2VyaWFsICovDQo+ ICsJcmV0ID0gdHNhX3NlcmlhbF9nZXRfaW5mbyhjaGFuLT5xbWMtPnRzYV9zZXJpYWwsICZ0c2Ff aW5mbyk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiArCWluZm8tPm1v ZGUgPSBjaGFuLT5tb2RlOw0KPiArCWluZm8tPnJ4X2ZzX3JhdGUgPSB0c2FfaW5mby5yeF9mc19y YXRlOw0KPiArCWluZm8tPnJ4X2JpdF9yYXRlID0gdHNhX2luZm8ucnhfYml0X3JhdGU7DQo+ICsJ aW5mby0+bmJfdHhfdHMgPSBod2VpZ2h0NjQoY2hhbi0+dHhfdHNfbWFzayk7DQo+ICsJaW5mby0+ dHhfZnNfcmF0ZSA9IHRzYV9pbmZvLnR4X2ZzX3JhdGU7DQo+ICsJaW5mby0+dHhfYml0X3JhdGUg PSB0c2FfaW5mby50eF9iaXRfcmF0ZTsNCj4gKwlpbmZvLT5uYl9yeF90cyA9IGh3ZWlnaHQ2NChj aGFuLT5yeF90c19tYXNrKTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArRVhQT1JUX1NZ TUJPTChxbWNfY2hhbl9nZXRfaW5mbyk7DQo+ICsNCj4gK2ludCBxbWNfY2hhbl9zZXRfcGFyYW0o c3RydWN0IHFtY19jaGFuICpjaGFuLCBjb25zdCBzdHJ1Y3QgcW1jX2NoYW5fcGFyYW0gKnBhcmFt KQ0KPiArew0KPiArCWlmIChwYXJhbS0+bW9kZSAhPSBjaGFuLT5tb2RlKQ0KPiArCQlyZXR1cm4g LUVJTlZBTDsNCj4gKw0KPiArCXN3aXRjaCAocGFyYW0tPm1vZGUpIHsNCj4gKwljYXNlIFFNQ19I RExDOg0KPiArCQlpZiAoKHBhcmFtLT5oZGxjLm1heF9yeF9idWZfc2l6ZSAlIDQpIHx8DQo+ICsJ CSAgICAocGFyYW0tPmhkbGMubWF4X3J4X2J1Zl9zaXplIDwgOCkpDQo+ICsJCQlyZXR1cm4gLUVJ TlZBTDsNCj4gKw0KPiArCQlxbWNfd3JpdGUxNihjaGFuLT5xbWMtPnNjY19wcmFtICsgUU1DX0dC TF9NUkJMUiwNCj4gKwkJCSAgICBwYXJhbS0+aGRsYy5tYXhfcnhfYnVmX3NpemUgLSA4KTsNCj4g KwkJcW1jX3dyaXRlMTYoY2hhbi0+c19wYXJhbSArIFFNQ19TUEVfTUZMUiwNCj4gKwkJCSAgICBw YXJhbS0+aGRsYy5tYXhfcnhfZnJhbWVfc2l6ZSk7DQo+ICsJCWlmIChwYXJhbS0+aGRsYy5pc19j cmMzMikgew0KPiArCQkJcW1jX3NldGJpdHMxNihjaGFuLT5zX3BhcmFtICsgUU1DX1NQRV9DSEFN UiwNCj4gKwkJCQkgICAgICBRTUNfU1BFX0NIQU1SX0hETENfQ1JDKTsNCj4gKwkJfSBlbHNlIHsN Cj4gKwkJCXFtY19jbHJiaXRzMTYoY2hhbi0+c19wYXJhbSArIFFNQ19TUEVfQ0hBTVIsDQo+ICsJ CQkJICAgICAgUU1DX1NQRV9DSEFNUl9IRExDX0NSQyk7DQo+ICsJCX0NCj4gKwkJYnJlYWs7DQo+ ICsNCj4gKwljYXNlIFFNQ19UUkFOU1BBUkVOVDoNCj4gKwkJcW1jX3dyaXRlMTYoY2hhbi0+c19w YXJhbSArIFFNQ19TUEVfVE1SQkxSLA0KPiArCQkJICAgIHBhcmFtLT50cmFuc3AubWF4X3J4X2J1 Zl9zaXplKTsNCj4gKwkJYnJlYWs7DQo+ICsNCj4gKwlkZWZhdWx0Og0KPiArCQlyZXR1cm4gLUVJ TlZBTDsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gK0VYUE9SVF9TWU1CT0wo cW1jX2NoYW5fc2V0X3BhcmFtKTsNCj4gKw0KPiAraW50IHFtY19jaGFuX3dyaXRlX3N1Ym1pdChz dHJ1Y3QgcW1jX2NoYW4gKmNoYW4sIGRtYV9hZGRyX3QgYWRkciwgc2l6ZV90IGxlbmd0aCwNCj4g KwkJCSAgdm9pZCAoKmNvbXBsZXRlKSh2b2lkICpjb250ZXh0KSwgdm9pZCAqY29udGV4dCkNCj4g K3sNCj4gKwlzdHJ1Y3QgcW1jX3hmZXJfZGVzYyAqeGZlcl9kZXNjOw0KPiArCXVuc2lnbmVkIGxv bmcgZmxhZ3M7DQo+ICsJY2JkX3QgKl9faW9tZW0gYmQ7DQo+ICsJdTE2IGN0cmw7DQo+ICsJaW50 IHJldDsNCj4gKw0KPiArCS8qDQo+ICsJICogUiBiaXQgIFVCIGJpdA0KPiArCSAqICAgMCAgICAg ICAwICA6IFRoZSBCRCBpcyBmcmVlDQo+ICsJICogICAxICAgICAgIDEgIDogVGhlIEJEIGlzIGlu IHVzZWQsIHdhaXRpbmcgZm9yIHRyYW5zZmVyDQo+ICsJICogICAwICAgICAgIDEgIDogVGhlIEJE IGlzIGluIHVzZWQsIHdhaXRpbmcgZm9yIGNvbXBsZXRpb24NCj4gKwkgKiAgIDEgICAgICAgMCAg OiBTaG91bGQgbm90IGFwcGVuZA0KPiArCSAqLw0KPiArDQo+ICsJc3Bpbl9sb2NrX2lycXNhdmUo JmNoYW4tPnR4X2xvY2ssIGZsYWdzKTsNCj4gKwliZCA9IGNoYW4tPnR4YmRfZnJlZTsNCj4gKw0K PiArCWN0cmwgPSBxbWNfcmVhZDE2KCZiZC0+Y2JkX3NjKTsNCj4gKwlpZiAoY3RybCAmIChRTUNf QkRfVFhfUiB8IFFNQ19CRF9UWF9VQikpIHsNCj4gKwkJLyogV2UgYXJlIGZ1bGwgLi4uICovDQo+ ICsJCXJldCA9IC1FQlVTWTsNCj4gKwkJZ290byBlbmQ7DQo+ICsJfQ0KPiArDQo+ICsJcW1jX3dy aXRlMTYoJmJkLT5jYmRfZGF0bGVuLCBsZW5ndGgpOw0KPiArCXFtY193cml0ZTMyKCZiZC0+Y2Jk X2J1ZmFkZHIsIGFkZHIpOw0KPiArDQo+ICsJeGZlcl9kZXNjID0gJmNoYW4tPnR4X2Rlc2NbYmQg LSBjaGFuLT50eGJkc107DQo+ICsJeGZlcl9kZXNjLT50eF9jb21wbGV0ZSA9IGNvbXBsZXRlOw0K PiArCXhmZXJfZGVzYy0+Y29udGV4dCA9IGNvbnRleHQ7DQo+ICsNCj4gKwkvKiBBY3RpdmF0ZSB0 aGUgZGVzY3JpcHRvciAqLw0KPiArCWN0cmwgfD0gKFFNQ19CRF9UWF9SIHwgUU1DX0JEX1RYX1VC KTsNCj4gKwl3bWIoKTsgLyogQmUgc3VyZSB0byBmbHVzaCB0aGUgZGVzY3JpcHRvciBiZWZvcmUg Y29udHJvbCB1cGRhdGUgKi8NCj4gKwlxbWNfd3JpdGUxNigmYmQtPmNiZF9zYywgY3RybCk7DQo+ ICsNCj4gKwlpZiAoIWNoYW4tPmlzX3R4X3N0b3BwZWQpDQo+ICsJCXFtY19zZXRiaXRzMTYoY2hh bi0+c19wYXJhbSArIFFNQ19TUEVfQ0hBTVIsIFFNQ19TUEVfQ0hBTVJfUE9MKTsNCj4gKw0KPiAr CWlmIChjdHJsICYgUU1DX0JEX1RYX1cpDQo+ICsJCWNoYW4tPnR4YmRfZnJlZSA9IGNoYW4tPnR4 YmRzOw0KPiArCWVsc2UNCj4gKwkJY2hhbi0+dHhiZF9mcmVlKys7DQo+ICsNCj4gKwlyZXQgPSAw Ow0KPiArDQo+ICtlbmQ6DQo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hhbi0+dHhfbG9j aywgZmxhZ3MpOw0KPiArCXJldHVybiByZXQ7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MKHFtY19j aGFuX3dyaXRlX3N1Ym1pdCk7DQo+ICsNCj4gK3N0YXRpYyB2b2lkIHFtY19jaGFuX3dyaXRlX2Rv bmUoc3RydWN0IHFtY19jaGFuICpjaGFuKQ0KPiArew0KPiArCXN0cnVjdCBxbWNfeGZlcl9kZXNj ICp4ZmVyX2Rlc2M7DQo+ICsJdm9pZCAoKmNvbXBsZXRlKSh2b2lkICpjb250ZXh0KTsNCj4gKwl1 bnNpZ25lZCBsb25nIGZsYWdzOw0KPiArCXZvaWQgKmNvbnRleHQ7DQo+ICsJY2JkX3QgKl9faW9t ZW0gYmQ7DQo+ICsJdTE2IGN0cmw7DQo+ICsNCj4gKwkvKg0KPiArCSAqIFIgYml0ICBVQiBiaXQN Cj4gKwkgKiAgIDAgICAgICAgMCAgOiBUaGUgQkQgaXMgZnJlZQ0KPiArCSAqICAgMSAgICAgICAx ICA6IFRoZSBCRCBpcyBpbiB1c2VkLCB3YWl0aW5nIGZvciB0cmFuc2Zlcg0KPiArCSAqICAgMCAg ICAgICAxICA6IFRoZSBCRCBpcyBpbiB1c2VkLCB3YWl0aW5nIGZvciBjb21wbGV0aW9uDQo+ICsJ ICogICAxICAgICAgIDAgIDogU2hvdWxkIG5vdCBhcHBlbmQNCj4gKwkgKi8NCj4gKw0KPiArCXNw aW5fbG9ja19pcnFzYXZlKCZjaGFuLT50eF9sb2NrLCBmbGFncyk7DQo+ICsJYmQgPSBjaGFuLT50 eGJkX2RvbmU7DQo+ICsNCj4gKwljdHJsID0gcW1jX3JlYWQxNigmYmQtPmNiZF9zYyk7DQo+ICsJ d2hpbGUgKCEoY3RybCAmIFFNQ19CRF9UWF9SKSkgew0KPiArCQlpZiAoIShjdHJsICYgUU1DX0JE X1RYX1VCKSkNCj4gKwkJCWdvdG8gZW5kOw0KPiArDQo+ICsJCXhmZXJfZGVzYyA9ICZjaGFuLT50 eF9kZXNjW2JkIC0gY2hhbi0+dHhiZHNdOw0KPiArCQljb21wbGV0ZSA9IHhmZXJfZGVzYy0+dHhf Y29tcGxldGU7DQo+ICsJCWNvbnRleHQgPSB4ZmVyX2Rlc2MtPmNvbnRleHQ7DQo+ICsJCXhmZXJf ZGVzYy0+dHhfY29tcGxldGUgPSBOVUxMOw0KPiArCQl4ZmVyX2Rlc2MtPmNvbnRleHQgPSBOVUxM Ow0KPiArDQo+ICsJCXFtY193cml0ZTE2KCZiZC0+Y2JkX3NjLCBjdHJsICYgflFNQ19CRF9UWF9V Qik7DQo+ICsNCj4gKwkJaWYgKGN0cmwgJiBRTUNfQkRfVFhfVykNCj4gKwkJCWNoYW4tPnR4YmRf ZG9uZSA9IGNoYW4tPnR4YmRzOw0KPiArCQllbHNlDQo+ICsJCQljaGFuLT50eGJkX2RvbmUrKzsN Cj4gKw0KPiArCQlpZiAoY29tcGxldGUpIHsNCj4gKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo JmNoYW4tPnR4X2xvY2ssIGZsYWdzKTsNCj4gKwkJCWNvbXBsZXRlKGNvbnRleHQpOw0KPiArCQkJ c3Bpbl9sb2NrX2lycXNhdmUoJmNoYW4tPnR4X2xvY2ssIGZsYWdzKTsNCj4gKwkJfQ0KPiArDQo+ ICsJCWJkID0gY2hhbi0+dHhiZF9kb25lOw0KPiArCQljdHJsID0gcW1jX3JlYWQxNigmYmQtPmNi ZF9zYyk7DQo+ICsJfQ0KPiArDQo+ICtlbmQ6DQo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm Y2hhbi0+dHhfbG9jaywgZmxhZ3MpOw0KPiArfQ0KPiArDQo+ICtpbnQgcW1jX2NoYW5fcmVhZF9z dWJtaXQoc3RydWN0IHFtY19jaGFuICpjaGFuLCBkbWFfYWRkcl90IGFkZHIsIHNpemVfdCBsZW5n dGgsDQo+ICsJCQkgdm9pZCAoKmNvbXBsZXRlKSh2b2lkICpjb250ZXh0LCBzaXplX3QgbGVuZ3Ro KSwgdm9pZCAqY29udGV4dCkNCj4gK3sNCj4gKwlzdHJ1Y3QgcW1jX3hmZXJfZGVzYyAqeGZlcl9k ZXNjOw0KPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ICsJY2JkX3QgKl9faW9tZW0gYmQ7DQo+ ICsJdTE2IGN0cmw7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCS8qDQo+ICsJICogRSBiaXQgIFVC IGJpdA0KPiArCSAqICAgMCAgICAgICAwICA6IFRoZSBCRCBpcyBmcmVlDQo+ICsJICogICAxICAg ICAgIDEgIDogVGhlIEJEIGlzIGluIHVzZWQsIHdhaXRpbmcgZm9yIHRyYW5zZmVyDQo+ICsJICog ICAwICAgICAgIDEgIDogVGhlIEJEIGlzIGluIHVzZWQsIHdhaXRpbmcgZm9yIGNvbXBsZXRpb24N Cj4gKwkgKiAgIDEgICAgICAgMCAgOiBTaG91bGQgbm90IGFwcGVuZA0KPiArCSAqLw0KPiArDQo+ ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW4tPnJ4X2xvY2ssIGZsYWdzKTsNCj4gKwliZCA9IGNo YW4tPnJ4YmRfZnJlZTsNCj4gKw0KPiArCWN0cmwgPSBxbWNfcmVhZDE2KCZiZC0+Y2JkX3NjKTsN Cj4gKwlpZiAoY3RybCAmIChRTUNfQkRfUlhfRSB8IFFNQ19CRF9SWF9VQikpIHsNCj4gKwkJLyog V2UgYXJlIGZ1bGwgLi4uICovDQo+ICsJCXJldCA9IC1FQlVTWTsNCj4gKwkJZ290byBlbmQ7DQo+ ICsJfQ0KPiArDQo+ICsJcW1jX3dyaXRlMTYoJmJkLT5jYmRfZGF0bGVuLCAwKTsgLyogZGF0YSBs ZW5ndGggaXMgdXBkYXRlZCBieSB0aGUgUU1DICovDQo+ICsJcW1jX3dyaXRlMzIoJmJkLT5jYmRf YnVmYWRkciwgYWRkcik7DQo+ICsNCj4gKwl4ZmVyX2Rlc2MgPSAmY2hhbi0+cnhfZGVzY1tiZCAt IGNoYW4tPnJ4YmRzXTsNCj4gKwl4ZmVyX2Rlc2MtPnJ4X2NvbXBsZXRlID0gY29tcGxldGU7DQo+ ICsJeGZlcl9kZXNjLT5jb250ZXh0ID0gY29udGV4dDsNCj4gKw0KPiArCS8qIEFjdGl2YXRlIHRo ZSBkZXNjcmlwdG9yICovDQo+ICsJY3RybCB8PSAoUU1DX0JEX1JYX0UgfCBRTUNfQkRfUlhfVUIp Ow0KPiArCXdtYigpOyAvKiBCZSBzdXJlIHRvIGZsdXNoIGRhdGEgYmVmb3JlIGRlc2NyaXB0b3Ig YWN0aXZhdGlvbiAqLw0KPiArCXFtY193cml0ZTE2KCZiZC0+Y2JkX3NjLCBjdHJsKTsNCj4gKw0K PiArCS8qIFJlc3RhcnQgcmVjZWl2ZXIgaWYgbmVlZGVkICovDQo+ICsJaWYgKGNoYW4tPmlzX3J4 X2hhbHRlZCAmJiAhY2hhbi0+aXNfcnhfc3RvcHBlZCkgew0KPiArCQkvKiBSZXN0YXJ0IHJlY2Vp dmVyICovDQo+ICsJCWlmIChjaGFuLT5tb2RlID09IFFNQ19UUkFOU1BBUkVOVCkNCj4gKwkJCXFt Y193cml0ZTMyKGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BFX1pEU1RBVEUsIDB4MTgwMDAwODApOw0K PiArCQllbHNlDQo+ICsJCQlxbWNfd3JpdGUzMihjaGFuLT5zX3BhcmFtICsgUU1DX1NQRV9aRFNU QVRFLCAweDAwMDAwMDgwKTsNCj4gKwkJcW1jX3dyaXRlMzIoY2hhbi0+c19wYXJhbSArIFFNQ19T UEVfUlNUQVRFLCAweDMxMDAwMDAwKTsNCj4gKwkJY2hhbi0+aXNfcnhfaGFsdGVkID0gZmFsc2U7 DQo+ICsJfQ0KPiArCWNoYW4tPnJ4X3BlbmRpbmcrKzsNCj4gKw0KPiArCWlmIChjdHJsICYgUU1D X0JEX1JYX1cpDQo+ICsJCWNoYW4tPnJ4YmRfZnJlZSA9IGNoYW4tPnJ4YmRzOw0KPiArCWVsc2UN Cj4gKwkJY2hhbi0+cnhiZF9mcmVlKys7DQo+ICsNCj4gKwlyZXQgPSAwOw0KPiArZW5kOg0KPiAr CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoYW4tPnJ4X2xvY2ssIGZsYWdzKTsNCj4gKwlyZXR1 cm4gcmV0Ow0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTChxbWNfY2hhbl9yZWFkX3N1Ym1pdCk7DQo+ ICsNCj4gK3N0YXRpYyB2b2lkIHFtY19jaGFuX3JlYWRfZG9uZShzdHJ1Y3QgcW1jX2NoYW4gKmNo YW4pDQo+ICt7DQo+ICsJdm9pZCAoKmNvbXBsZXRlKSh2b2lkICpjb250ZXh0LCBzaXplX3Qgc2l6 ZSk7DQo+ICsJc3RydWN0IHFtY194ZmVyX2Rlc2MgKnhmZXJfZGVzYzsNCj4gKwl1bnNpZ25lZCBs b25nIGZsYWdzOw0KPiArCWNiZF90ICpfX2lvbWVtIGJkOw0KPiArCXZvaWQgKmNvbnRleHQ7DQo+ ICsJdTE2IGRhdGFsZW47DQo+ICsJdTE2IGN0cmw7DQo+ICsNCj4gKwkvKg0KPiArCSAqIEUgYml0 ICBVQiBiaXQNCj4gKwkgKiAgIDAgICAgICAgMCAgOiBUaGUgQkQgaXMgZnJlZQ0KPiArCSAqICAg MSAgICAgICAxICA6IFRoZSBCRCBpcyBpbiB1c2VkLCB3YWl0aW5nIGZvciB0cmFuc2Zlcg0KPiAr CSAqICAgMCAgICAgICAxICA6IFRoZSBCRCBpcyBpbiB1c2VkLCB3YWl0aW5nIGZvciBjb21wbGV0 aW9uDQo+ICsJICogICAxICAgICAgIDAgIDogU2hvdWxkIG5vdCBhcHBlbmQNCj4gKwkgKi8NCj4g Kw0KPiArCXNwaW5fbG9ja19pcnFzYXZlKCZjaGFuLT5yeF9sb2NrLCBmbGFncyk7DQo+ICsJYmQg PSBjaGFuLT5yeGJkX2RvbmU7DQo+ICsNCj4gKwljdHJsID0gcW1jX3JlYWQxNigmYmQtPmNiZF9z Yyk7DQo+ICsJd2hpbGUgKCEoY3RybCAmIFFNQ19CRF9SWF9FKSkgew0KPiArCQlpZiAoIShjdHJs ICYgUU1DX0JEX1JYX1VCKSkNCj4gKwkJCWdvdG8gZW5kOw0KPiArDQo+ICsJCXhmZXJfZGVzYyA9 ICZjaGFuLT5yeF9kZXNjW2JkIC0gY2hhbi0+cnhiZHNdOw0KPiArCQljb21wbGV0ZSA9IHhmZXJf ZGVzYy0+cnhfY29tcGxldGU7DQo+ICsJCWNvbnRleHQgPSB4ZmVyX2Rlc2MtPmNvbnRleHQ7DQo+ ICsJCXhmZXJfZGVzYy0+cnhfY29tcGxldGUgPSBOVUxMOw0KPiArCQl4ZmVyX2Rlc2MtPmNvbnRl eHQgPSBOVUxMOw0KPiArDQo+ICsJCWRhdGFsZW4gPSBxbWNfcmVhZDE2KCZiZC0+Y2JkX2RhdGxl bik7DQo+ICsJCXFtY193cml0ZTE2KCZiZC0+Y2JkX3NjLCBjdHJsICYgflFNQ19CRF9SWF9VQik7 DQo+ICsNCj4gKwkJaWYgKGN0cmwgJiBRTUNfQkRfUlhfVykNCj4gKwkJCWNoYW4tPnJ4YmRfZG9u ZSA9IGNoYW4tPnJ4YmRzOw0KPiArCQllbHNlDQo+ICsJCQljaGFuLT5yeGJkX2RvbmUrKzsNCj4g Kw0KPiArCQljaGFuLT5yeF9wZW5kaW5nLS07DQo+ICsNCj4gKwkJaWYgKGNvbXBsZXRlKSB7DQo+ ICsJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFuLT5yeF9sb2NrLCBmbGFncyk7DQo+ICsJ CQljb21wbGV0ZShjb250ZXh0LCBkYXRhbGVuKTsNCj4gKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZj aGFuLT5yeF9sb2NrLCBmbGFncyk7DQo+ICsJCX0NCj4gKw0KPiArCQliZCA9IGNoYW4tPnJ4YmRf ZG9uZTsNCj4gKwkJY3RybCA9IHFtY19yZWFkMTYoJmJkLT5jYmRfc2MpOw0KPiArCX0NCj4gKw0K PiArZW5kOg0KPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoYW4tPnJ4X2xvY2ssIGZsYWdz KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBxbWNfY2hhbl9jb21tYW5kKHN0cnVjdCBxbWNf Y2hhbiAqY2hhbiwgdTggcW1jX29wY29kZSkNCj4gK3sNCj4gKwlyZXR1cm4gY3BtX2NvbW1hbmQo Y2hhbi0+aWQgPDwgMiwgKHFtY19vcGNvZGUgPDwgNCkgfCAweDBFKTsNCj4gK30NCj4gKw0KPiAr c3RhdGljIGludCBxbWNfY2hhbl9zdG9wX3J4KHN0cnVjdCBxbWNfY2hhbiAqY2hhbikNCj4gK3sN Cj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KPiArCWludCByZXQ7DQo+ICsNCj4gKwlzcGluX2xv Y2tfaXJxc2F2ZSgmY2hhbi0+cnhfbG9jaywgZmxhZ3MpOw0KPiArDQo+ICsJLyogU2VuZCBTVE9Q IFJFQ0VJVkUgY29tbWFuZCAqLw0KPiArCXJldCA9IHFtY19jaGFuX2NvbW1hbmQoY2hhbiwgMHgw KTsNCj4gKwlpZiAocmV0KSB7DQo+ICsJCWRldl9lcnIoY2hhbi0+cW1jLT5kZXYsICJjaGFuICV1 OiBTZW5kIFNUT1AgUkVDRUlWRSBmYWlsZWQgKCVkKVxuIiwNCj4gKwkJCWNoYW4tPmlkLCByZXQp Ow0KPiArCQlnb3RvIGVuZDsNCj4gKwl9DQo+ICsNCj4gKwljaGFuLT5pc19yeF9zdG9wcGVkID0g dHJ1ZTsNCj4gKw0KPiArZW5kOg0KPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoYW4tPnJ4 X2xvY2ssIGZsYWdzKTsNCj4gKwlyZXR1cm4gcmV0Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50 IHFtY19jaGFuX3N0b3BfdHgoc3RydWN0IHFtY19jaGFuICpjaGFuKQ0KPiArew0KPiArCXVuc2ln bmVkIGxvbmcgZmxhZ3M7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCXNwaW5fbG9ja19pcnFzYXZl KCZjaGFuLT50eF9sb2NrLCBmbGFncyk7DQo+ICsNCj4gKwkvKiBTZW5kIFNUT1AgVFJBTlNNSVQg Y29tbWFuZCAqLw0KPiArCXJldCA9IHFtY19jaGFuX2NvbW1hbmQoY2hhbiwgMHgxKTsNCj4gKwlp ZiAocmV0KSB7DQo+ICsJCWRldl9lcnIoY2hhbi0+cW1jLT5kZXYsICJjaGFuICV1OiBTZW5kIFNU T1AgVFJBTlNNSVQgZmFpbGVkICglZClcbiIsDQo+ICsJCQljaGFuLT5pZCwgcmV0KTsNCj4gKwkJ Z290byBlbmQ7DQo+ICsJfQ0KPiArDQo+ICsJY2hhbi0+aXNfdHhfc3RvcHBlZCA9IHRydWU7DQo+ ICsNCj4gK2VuZDoNCj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFuLT50eF9sb2NrLCBm bGFncyk7DQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiAraW50IHFtY19jaGFuX3N0b3Ao c3RydWN0IHFtY19jaGFuICpjaGFuLCBpbnQgZGlyZWN0aW9uKQ0KPiArew0KPiArCWludCByZXQ7 DQo+ICsNCj4gKwlpZiAoZGlyZWN0aW9uICYgUU1DX0NIQU5fUkVBRCkgew0KPiArCQlyZXQgPSBx bWNfY2hhbl9zdG9wX3J4KGNoYW4pOw0KPiArCQlpZiAocmV0KQ0KPiArCQkJcmV0dXJuIHJldDsN Cj4gKwl9DQo+ICsNCj4gKwlpZiAoZGlyZWN0aW9uICYgUU1DX0NIQU5fV1JJVEUpIHsNCj4gKwkJ cmV0ID0gcW1jX2NoYW5fc3RvcF90eChjaGFuKTsNCj4gKwkJaWYgKHJldCkNCj4gKwkJCXJldHVy biByZXQ7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9M KHFtY19jaGFuX3N0b3ApOw0KPiArDQo+ICtzdGF0aWMgdm9pZCBxbWNfY2hhbl9zdGFydF9yeChz dHJ1Y3QgcW1jX2NoYW4gKmNoYW4pDQo+ICt7DQo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsNCj4g Kw0KPiArCXNwaW5fbG9ja19pcnFzYXZlKCZjaGFuLT5yeF9sb2NrLCBmbGFncyk7DQo+ICsNCj4g KwkvKiBSZXN0YXJ0IHRoZSByZWNlaXZlciAqLw0KPiArCWlmIChjaGFuLT5tb2RlID09IFFNQ19U UkFOU1BBUkVOVCkNCj4gKwkJcW1jX3dyaXRlMzIoY2hhbi0+c19wYXJhbSArIFFNQ19TUEVfWkRT VEFURSwgMHgxODAwMDA4MCk7DQo+ICsJZWxzZQ0KPiArCQlxbWNfd3JpdGUzMihjaGFuLT5zX3Bh cmFtICsgUU1DX1NQRV9aRFNUQVRFLCAweDAwMDAwMDgwKTsNCj4gKwlxbWNfd3JpdGUzMihjaGFu LT5zX3BhcmFtICsgUU1DX1NQRV9SU1RBVEUsIDB4MzEwMDAwMDApOw0KPiArCWNoYW4tPmlzX3J4 X2hhbHRlZCA9IGZhbHNlOw0KPiArDQo+ICsJY2hhbi0+aXNfcnhfc3RvcHBlZCA9IGZhbHNlOw0K PiArDQo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hhbi0+cnhfbG9jaywgZmxhZ3MpOw0K PiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBxbWNfY2hhbl9zdGFydF90eChzdHJ1Y3QgcW1jX2No YW4gKmNoYW4pDQo+ICt7DQo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsNCj4gKw0KPiArCXNwaW5f bG9ja19pcnFzYXZlKCZjaGFuLT50eF9sb2NrLCBmbGFncyk7DQo+ICsNCj4gKwkvKg0KPiArCSAq IEVuYWJsZSBjaGFubmVsIHRyYW5zbWl0dGVyIGFzIGl0IGNvdWxkIGJlIGRpc2FibGVkIGlmDQo+ ICsJICogcW1jX2NoYW5fcmVzZXQoKSB3YXMgY2FsbGVkLg0KPiArCSAqLw0KPiArCXFtY19zZXRi aXRzMTYoY2hhbi0+c19wYXJhbSArIFFNQ19TUEVfQ0hBTVIsIFFNQ19TUEVfQ0hBTVJfRU5UKTsN Cj4gKw0KPiArCS8qIFNldCB0aGUgUE9MIGJpdCBpbiB0aGUgY2hhbm5lbCBtb2RlIHJlZ2lzdGVy ICovDQo+ICsJcW1jX3NldGJpdHMxNihjaGFuLT5zX3BhcmFtICsgUU1DX1NQRV9DSEFNUiwgUU1D X1NQRV9DSEFNUl9QT0wpOw0KPiArDQo+ICsJY2hhbi0+aXNfdHhfc3RvcHBlZCA9IGZhbHNlOw0K PiArDQo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hhbi0+dHhfbG9jaywgZmxhZ3MpOw0K PiArfQ0KPiArDQo+ICtpbnQgcW1jX2NoYW5fc3RhcnQoc3RydWN0IHFtY19jaGFuICpjaGFuLCBp bnQgZGlyZWN0aW9uKQ0KPiArew0KPiArCWlmIChkaXJlY3Rpb24gJiBRTUNfQ0hBTl9SRUFEKQ0K PiArCQlxbWNfY2hhbl9zdGFydF9yeChjaGFuKTsNCj4gKw0KPiArCWlmIChkaXJlY3Rpb24gJiBR TUNfQ0hBTl9XUklURSkNCj4gKwkJcW1jX2NoYW5fc3RhcnRfdHgoY2hhbik7DQo+ICsNCj4gKwly ZXR1cm4gMDsNCj4gK30NCj4gK0VYUE9SVF9TWU1CT0wocW1jX2NoYW5fc3RhcnQpOw0KPiArDQo+ ICtzdGF0aWMgdm9pZCBxbWNfY2hhbl9yZXNldF9yeChzdHJ1Y3QgcW1jX2NoYW4gKmNoYW4pDQo+ ICt7DQo+ICsJc3RydWN0IHFtY194ZmVyX2Rlc2MgKnhmZXJfZGVzYzsNCj4gKwl1bnNpZ25lZCBs b25nIGZsYWdzOw0KPiArCWNiZF90ICpfX2lvbWVtIGJkOw0KPiArCXUxNiBjdHJsOw0KPiArDQo+ ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW4tPnJ4X2xvY2ssIGZsYWdzKTsNCj4gKwliZCA9IGNo YW4tPnJ4YmRzOw0KPiArCWRvIHsNCj4gKwkJY3RybCA9IHFtY19yZWFkMTYoJmJkLT5jYmRfc2Mp Ow0KPiArCQlxbWNfd3JpdGUxNigmYmQtPmNiZF9zYywgY3RybCAmIH4oUU1DX0JEX1JYX1VCIHwg UU1DX0JEX1JYX0UpKTsNCj4gKw0KPiArCQl4ZmVyX2Rlc2MgPSAmY2hhbi0+cnhfZGVzY1tiZCAt IGNoYW4tPnJ4YmRzXTsNCj4gKwkJeGZlcl9kZXNjLT5yeF9jb21wbGV0ZSA9IE5VTEw7DQo+ICsJ CXhmZXJfZGVzYy0+Y29udGV4dCA9IE5VTEw7DQo+ICsNCj4gKwkJYmQrKzsNCj4gKwl9IHdoaWxl ICghKGN0cmwgJiBRTUNfQkRfUlhfVykpOw0KPiArDQo+ICsJY2hhbi0+cnhiZF9mcmVlID0gY2hh bi0+cnhiZHM7DQo+ICsJY2hhbi0+cnhiZF9kb25lID0gY2hhbi0+cnhiZHM7DQo+ICsJcW1jX3dy aXRlMTYoY2hhbi0+c19wYXJhbSArIFFNQ19TUEVfUkJQVFIsDQo+ICsJCSAgICBxbWNfcmVhZDE2 KGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BFX1JCQVNFKSk7DQo+ICsNCj4gKwljaGFuLT5yeF9wZW5k aW5nID0gMDsNCj4gKwljaGFuLT5pc19yeF9zdG9wcGVkID0gZmFsc2U7DQo+ICsNCj4gKwlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZjaGFuLT5yeF9sb2NrLCBmbGFncyk7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyB2b2lkIHFtY19jaGFuX3Jlc2V0X3R4KHN0cnVjdCBxbWNfY2hhbiAqY2hhbikNCj4g K3sNCj4gKwlzdHJ1Y3QgcW1jX3hmZXJfZGVzYyAqeGZlcl9kZXNjOw0KPiArCXVuc2lnbmVkIGxv bmcgZmxhZ3M7DQo+ICsJY2JkX3QgKl9faW9tZW0gYmQ7DQo+ICsJdTE2IGN0cmw7DQo+ICsNCj4g KwlzcGluX2xvY2tfaXJxc2F2ZSgmY2hhbi0+dHhfbG9jaywgZmxhZ3MpOw0KPiArDQo+ICsJLyog RGlzYWJsZSB0cmFuc21pdHRlci4gSXQgd2lsbCBiZSByZS1lbmFibGUgb24gcW1jX2NoYW5fc3Rh cnQoKSAqLw0KPiArCXFtY19jbHJiaXRzMTYoY2hhbi0+c19wYXJhbSArIFFNQ19TUEVfQ0hBTVIs IFFNQ19TUEVfQ0hBTVJfRU5UKTsNCj4gKw0KPiArCWJkID0gY2hhbi0+dHhiZHM7DQo+ICsJZG8g ew0KPiArCQljdHJsID0gcW1jX3JlYWQxNigmYmQtPmNiZF9zYyk7DQo+ICsJCXFtY193cml0ZTE2 KCZiZC0+Y2JkX3NjLCBjdHJsICYgfihRTUNfQkRfVFhfVUIgfCBRTUNfQkRfVFhfUikpOw0KPiAr DQo+ICsJCXhmZXJfZGVzYyA9ICZjaGFuLT50eF9kZXNjW2JkIC0gY2hhbi0+dHhiZHNdOw0KPiAr CQl4ZmVyX2Rlc2MtPnR4X2NvbXBsZXRlID0gTlVMTDsNCj4gKwkJeGZlcl9kZXNjLT5jb250ZXh0 ID0gTlVMTDsNCj4gKw0KPiArCQliZCsrOw0KPiArCX0gd2hpbGUgKCEoY3RybCAmIFFNQ19CRF9U WF9XKSk7DQo+ICsNCj4gKwljaGFuLT50eGJkX2ZyZWUgPSBjaGFuLT50eGJkczsNCj4gKwljaGFu LT50eGJkX2RvbmUgPSBjaGFuLT50eGJkczsNCj4gKwlxbWNfd3JpdGUxNihjaGFuLT5zX3BhcmFt ICsgUU1DX1NQRV9UQlBUUiwNCj4gKwkJICAgIHFtY19yZWFkMTYoY2hhbi0+c19wYXJhbSArIFFN Q19TUEVfVEJBU0UpKTsNCj4gKw0KPiArCS8qIFJlc2V0IFRTVEFURSBhbmQgWklTVEFURSB0byB0 aGVpciBpbml0aWFsIHZhbHVlICovDQo+ICsJcW1jX3dyaXRlMzIoY2hhbi0+c19wYXJhbSArIFFN Q19TUEVfVFNUQVRFLCAweDMwMDAwMDAwKTsNCj4gKwlxbWNfd3JpdGUzMihjaGFuLT5zX3BhcmFt ICsgUU1DX1NQRV9aSVNUQVRFLCAweDAwMDAwMTAwKTsNCj4gKw0KPiArCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJmNoYW4tPnR4X2xvY2ssIGZsYWdzKTsNCj4gK30NCj4gKw0KPiAraW50IHFtY19j aGFuX3Jlc2V0KHN0cnVjdCBxbWNfY2hhbiAqY2hhbiwgaW50IGRpcmVjdGlvbikNCj4gK3sNCj4g KwlpZiAoZGlyZWN0aW9uICYgUU1DX0NIQU5fUkVBRCkNCj4gKwkJcW1jX2NoYW5fcmVzZXRfcngo Y2hhbik7DQo+ICsNCj4gKwlpZiAoZGlyZWN0aW9uICYgUU1DX0NIQU5fV1JJVEUpDQo+ICsJCXFt Y19jaGFuX3Jlc2V0X3R4KGNoYW4pOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICtFWFBP UlRfU1lNQk9MKHFtY19jaGFuX3Jlc2V0KTsNCj4gKw0KPiArc3RhdGljIGludCBxbWNfY2hlY2tf Y2hhbnMoc3RydWN0IHFtYyAqcW1jKQ0KPiArew0KPiArCXN0cnVjdCB0c2Ffc2VyaWFsX2luZm8g aW5mbzsNCj4gKwlib29sIGlzX29uZV90YWJsZSA9IGZhbHNlOw0KPiArCXN0cnVjdCBxbWNfY2hh biAqY2hhbjsNCj4gKwl1NjQgdHhfdHNfbWFzayA9IDA7DQo+ICsJdTY0IHJ4X3RzX21hc2sgPSAw Ow0KPiArCXU2NCB0eF90c19hc3NpZ25lZF9tYXNrOw0KPiArCXU2NCByeF90c19hc3NpZ25lZF9t YXNrOw0KPiArCWludCByZXQ7DQo+ICsNCj4gKwkvKiBSZXRyaWV2ZSBpbmZvIGZyb20gdGhlIFRT QSByZWxhdGVkIHNlcmlhbCAqLw0KPiArCXJldCA9IHRzYV9zZXJpYWxfZ2V0X2luZm8ocW1jLT50 c2Ffc2VyaWFsLCAmaW5mbyk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0K PiArCS8qDQo+ICsJICogSWYgbW9yZSB0aGFuIDMyIFRTIGFyZSBhc3NpZ25lZCB0byB0aGlzIHNl cmlhbCwgb25lIGNvbW1vbiB0YWJsZSBpcw0KPiArCSAqIHVzZWQgZm9yIFR4IGFuZCBSeCBhbmQg c28gbWFza3MgbXVzdCBiZSBlcXVhbCBmb3IgYWxsIGNoYW5uZWxzLg0KPiArCSAqLw0KPiArCWlm ICgoaW5mby5uYl90eF90cyA+IDMyKSB8fCAoaW5mby5uYl9yeF90cyA+IDMyKSkgew0KPiArCQlp ZiAoaW5mby5uYl90eF90cyAhPSBpbmZvLm5iX3J4X3RzKSB7DQo+ICsJCQlkZXZfZXJyKHFtYy0+ ZGV2LCAiTnVtYmVyIG9mIFRTQSBUeC9SeCBUUyBhc3NpZ25lZCBhcmUgbm90IGVxdWFsXG4iKTsN Cj4gKwkJCXJldHVybiAtRUlOVkFMOw0KPiArCQl9DQo+ICsJCWlzX29uZV90YWJsZSA9IHRydWU7 DQo+ICsJfQ0KPiArDQo+ICsNCj4gKwl0eF90c19hc3NpZ25lZF9tYXNrID0gKCgodTY0KTEpIDw8 IGluZm8ubmJfdHhfdHMpIC0gMTsNCj4gKwlyeF90c19hc3NpZ25lZF9tYXNrID0gKCgodTY0KTEp IDw8IGluZm8ubmJfcnhfdHMpIC0gMTsNCj4gKw0KPiArCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hh biwgJnFtYy0+Y2hhbl9oZWFkLCBsaXN0KSB7DQo+ICsJCWlmIChjaGFuLT50eF90c19tYXNrID4g dHhfdHNfYXNzaWduZWRfbWFzaykgew0KPiArCQkJZGV2X2VycihxbWMtPmRldiwgImNoYW4gJXUg dXNlcyBUU0EgdW5hc3NpZ25lZCBUeCBUU1xuIiwgY2hhbi0+aWQpOw0KPiArCQkJcmV0dXJuIC1F SU5WQUw7DQo+ICsJCX0NCj4gKwkJaWYgKHR4X3RzX21hc2sgJiBjaGFuLT50eF90c19tYXNrKSB7 DQo+ICsJCQlkZXZfZXJyKHFtYy0+ZGV2LCAiY2hhbiAldSB1c2VzIGFuIGFscmVhZHkgdXNlZCBU eCBUU1xuIiwgY2hhbi0+aWQpOw0KPiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJCX0NCj4gKw0K PiArCQlpZiAoY2hhbi0+cnhfdHNfbWFzayA+IHJ4X3RzX2Fzc2lnbmVkX21hc2spIHsNCj4gKwkJ CWRldl9lcnIocW1jLT5kZXYsICJjaGFuICV1IHVzZXMgVFNBIHVuYXNzaWduZWQgUnggVFNcbiIs IGNoYW4tPmlkKTsNCj4gKwkJCXJldHVybiAtRUlOVkFMOw0KPiArCQl9DQo+ICsJCWlmIChyeF90 c19tYXNrICYgY2hhbi0+cnhfdHNfbWFzaykgew0KPiArCQkJZGV2X2VycihxbWMtPmRldiwgImNo YW4gJXUgdXNlcyBhbiBhbHJlYWR5IHVzZWQgUnggVFNcbiIsIGNoYW4tPmlkKTsNCj4gKwkJCXJl dHVybiAtRUlOVkFMOw0KPiArCQl9DQo+ICsNCj4gKwkJaWYgKGlzX29uZV90YWJsZSAmJiAoY2hh bi0+dHhfdHNfbWFzayAhPSBjaGFuLT5yeF90c19tYXNrKSkgew0KPiArCQkJZGV2X2VycihxbWMt PmRldiwgImNoYW4gJXUgdXNlcyBkaWZmZXJlbnQgUnggYW5kIFR4IFRTXG4iLCBjaGFuLT5pZCk7 DQo+ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwkJfQ0KPiArDQo+ICsJCXR4X3RzX21hc2sgfD0g Y2hhbi0+dHhfdHNfbWFzazsNCj4gKwkJcnhfdHNfbWFzayB8PSBjaGFuLT5yeF90c19tYXNrOw0K PiArCX0NCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdW5zaWduZWQg aW50IHFtY19uYl9jaGFucyhzdHJ1Y3QgcW1jICpxbWMpDQo+ICt7DQo+ICsJdW5zaWduZWQgaW50 IGNvdW50ID0gMDsNCj4gKwlzdHJ1Y3QgcW1jX2NoYW4gKmNoYW47DQo+ICsNCj4gKwlsaXN0X2Zv cl9lYWNoX2VudHJ5KGNoYW4sICZxbWMtPmNoYW5faGVhZCwgbGlzdCkNCj4gKwkJY291bnQrKzsN Cj4gKw0KPiArCXJldHVybiBjb3VudDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBxbWNfb2Zf cGFyc2VfY2hhbnMoc3RydWN0IHFtYyAqcW1jLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQ0KPiAr ew0KPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hhbl9ucDsNCj4gKwlzdHJ1Y3QgcW1jX2NoYW4g KmNoYW47DQo+ICsJY29uc3QgY2hhciAqbW9kZTsNCj4gKwl1MzIgY2hhbl9pZDsNCj4gKwl1NjQg dHNfbWFzazsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJZm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxk X29mX25vZGUobnAsIGNoYW5fbnApIHsNCj4gKwkJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIo Y2hhbl9ucCwgInJlZyIsICZjaGFuX2lkKTsNCj4gKwkJaWYgKHJldCkgew0KPiArCQkJZGV2X2Vy cihxbWMtPmRldiwgIiVwT0Y6IGZhaWxlZCB0byByZWFkIHJlZ1xuIiwgY2hhbl9ucCk7DQo+ICsJ CQlvZl9ub2RlX3B1dChjaGFuX25wKTsNCj4gKwkJCXJldHVybiByZXQ7DQo+ICsJCX0NCj4gKwkJ aWYgKGNoYW5faWQgPiA2Mykgew0KPiArCQkJZGV2X2VycihxbWMtPmRldiwgIiVwT0Y6IEludmFs aWQgY2hhbl9pZFxuIiwgY2hhbl9ucCk7DQo+ICsJCQlvZl9ub2RlX3B1dChjaGFuX25wKTsNCj4g KwkJCXJldHVybiAtRUlOVkFMOw0KPiArCQl9DQo+ICsNCj4gKwkJY2hhbiA9IGRldm1fa3phbGxv YyhxbWMtPmRldiwgc2l6ZW9mKCpjaGFuKSwgR0ZQX0tFUk5FTCk7DQo+ICsJCWlmICghY2hhbikg ew0KPiArCQkJb2Zfbm9kZV9wdXQoY2hhbl9ucCk7DQo+ICsJCQlyZXR1cm4gLUVOT01FTTsNCj4g KwkJfQ0KPiArDQo+ICsJCWNoYW4tPmlkID0gY2hhbl9pZDsNCj4gKwkJc3Bpbl9sb2NrX2luaXQo JmNoYW4tPnJ4X2xvY2spOw0KPiArCQlzcGluX2xvY2tfaW5pdCgmY2hhbi0+dHhfbG9jayk7DQo+ ICsNCj4gKwkJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91NjQoY2hhbl9ucCwgImZzbCx0eC10cy1t YXNrIiwgJnRzX21hc2spOw0KPiArCQlpZiAocmV0KSB7DQo+ICsJCQlkZXZfZXJyKHFtYy0+ZGV2 LCAiJXBPRjogZmFpbGVkIHRvIHJlYWQgZnNsLHR4LXRzLW1hc2tcbiIsDQo+ICsJCQkJY2hhbl9u cCk7DQo+ICsJCQlvZl9ub2RlX3B1dChjaGFuX25wKTsNCj4gKwkJCXJldHVybiByZXQ7DQo+ICsJ CX0NCj4gKwkJY2hhbi0+dHhfdHNfbWFzayA9IHRzX21hc2s7DQo+ICsNCj4gKwkJcmV0ID0gb2Zf cHJvcGVydHlfcmVhZF91NjQoY2hhbl9ucCwgImZzbCxyeC10cy1tYXNrIiwgJnRzX21hc2spOw0K PiArCQlpZiAocmV0KSB7DQo+ICsJCQlkZXZfZXJyKHFtYy0+ZGV2LCAiJXBPRjogZmFpbGVkIHRv IHJlYWQgZnNsLHJ4LXRzLW1hc2tcbiIsDQo+ICsJCQkJY2hhbl9ucCk7DQo+ICsJCQlvZl9ub2Rl X3B1dChjaGFuX25wKTsNCj4gKwkJCXJldHVybiByZXQ7DQo+ICsJCX0NCj4gKwkJY2hhbi0+cnhf dHNfbWFzayA9IHRzX21hc2s7DQo+ICsNCj4gKwkJbW9kZSA9ICJ0cmFuc3BhcmVudCI7DQo+ICsJ CXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKGNoYW5fbnAsICJmc2wsb3BlcmF0aW9uYWwt bW9kZSIsICZtb2RlKTsNCj4gKwkJaWYgKHJldCAmJiByZXQgIT0gLUVJTlZBTCkgew0KPiArCQkJ ZGV2X2VycihxbWMtPmRldiwgIiVwT0Y6IGZhaWxlZCB0byByZWFkIGZzbCxvcGVyYXRpb25hbC1t b2RlXG4iLA0KPiArCQkJCWNoYW5fbnApOw0KPiArCQkJb2Zfbm9kZV9wdXQoY2hhbl9ucCk7DQo+ ICsJCQlyZXR1cm4gcmV0Ow0KPiArCQl9DQo+ICsJCWlmICghc3RyY21wKG1vZGUsICJ0cmFuc3Bh cmVudCIpKSB7DQo+ICsJCQljaGFuLT5tb2RlID0gUU1DX1RSQU5TUEFSRU5UOw0KPiArCQl9IGVs c2UgaWYgKCFzdHJjbXAobW9kZSwgImhkbGMiKSkgew0KPiArCQkJY2hhbi0+bW9kZSA9IFFNQ19I RExDOw0KPiArCQl9IGVsc2Ugew0KPiArCQkJZGV2X2VycihxbWMtPmRldiwgIiVwT0Y6IEludmFs aWQgZnNsLG9wZXJhdGlvbmFsLW1vZGUgKCVzKVxuIiwNCj4gKwkJCQljaGFuX25wLCBtb2RlKTsN Cj4gKwkJCW9mX25vZGVfcHV0KGNoYW5fbnApOw0KPiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJ CX0NCj4gKw0KPiArCQljaGFuLT5pc19yZXZlcnNlX2RhdGEgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jv b2woY2hhbl9ucCwNCj4gKwkJCQkJCQkgICAgICAiZnNsLHJldmVyc2UtZGF0YSIpOw0KPiArDQo+ ICsJCWxpc3RfYWRkX3RhaWwoJmNoYW4tPmxpc3QsICZxbWMtPmNoYW5faGVhZCk7DQo+ICsJCXFt Yy0+Y2hhbnNbY2hhbi0+aWRdID0gY2hhbjsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gcW1jX2No ZWNrX2NoYW5zKHFtYyk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgcW1jX3NldHVwX3RzYV82 NHJ4dHgoc3RydWN0IHFtYyAqcW1jLCBjb25zdCBzdHJ1Y3QgdHNhX3NlcmlhbF9pbmZvICppbmZv KQ0KPiArew0KPiArCXN0cnVjdCBxbWNfY2hhbiAqY2hhbjsNCj4gKwl1bnNpZ25lZCBpbnQgaTsN Cj4gKwl1MTYgdmFsOw0KPiArDQo+ICsJLyoNCj4gKwkgKiBVc2UgYSBjb21tb24gVHgvUnggNjQg ZW50cmllcyB0YWJsZS4NCj4gKwkgKiBFdmVyeXRoaW5nIHdhcyBwcmV2aW91c2x5IGNoZWNrZWQs IFR4IGFuZCBSeCByZWxhdGVkIHN0dWZmcyBhcmUNCj4gKwkgKiBpZGVudGljYWwgLT4gVXNlZCBS eCByZWxhdGVkIHN0dWZmIHRvIGJ1aWxkIHRoZSB0YWJsZQ0KPiArCSAqLw0KPiArDQo+ICsJLyog SW52YWxpZGF0ZSBhbGwgZW50cmllcyAqLw0KPiArCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKQ0K PiArCQlxbWNfd3JpdGUxNihxbWMtPnNjY19wcmFtICsgUU1DX0dCTF9UU0FUUlggKyAoaSAqIDIp LCAweDAwMDApOw0KPiArDQo+ICsJLyogU2V0IGVudHJpZXMgYmFzZWQgb24gUnggc3R1ZmYqLw0K PiArCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hhbiwgJnFtYy0+Y2hhbl9oZWFkLCBsaXN0KSB7DQo+ ICsJCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5uYl9yeF90czsgaSsrKSB7DQo+ICsJCQlpZiAoIShj aGFuLT5yeF90c19tYXNrICYgKCgodTY0KTEpIDw8IGkpKSkNCj4gKwkJCQljb250aW51ZTsNCj4g Kw0KPiArCQkJdmFsID0gUU1DX1RTQV9WQUxJRCB8IFFNQ19UU0FfTUFTSyB8DQo+ICsJCQkgICAg ICBRTUNfVFNBX0NIQU5ORUwoY2hhbi0+aWQpOw0KPiArCQkJcW1jX3dyaXRlMTYocW1jLT5zY2Nf cHJhbSArIFFNQ19HQkxfVFNBVFJYICsgKGkgKiAyKSwgdmFsKTsNCj4gKwkJfQ0KPiArCX0NCj4g Kw0KPiArCS8qIFNldCBXcmFwIGJpdCBvbiBsYXN0IGVudHJ5ICovDQo+ICsJcW1jX3NldGJpdHMx NihxbWMtPnNjY19wcmFtICsgUU1DX0dCTF9UU0FUUlggKyAoKGluZm8tPm5iX3J4X3RzIC0gMSkg KiAyKSwNCj4gKwkJICAgICAgUU1DX1RTQV9XUkFQKTsNCj4gKw0KPiArCS8qIEluaXQgcG9pbnRl cnMgdG8gdGhlIHRhYmxlICovDQo+ICsJdmFsID0gcW1jLT5zY2NfcHJhbV9vZmZzZXQgKyBRTUNf R0JMX1RTQVRSWDsNCj4gKwlxbWNfd3JpdGUxNihxbWMtPnNjY19wcmFtICsgUU1DX0dCTF9SWF9T X1BUUiwgdmFsKTsNCj4gKwlxbWNfd3JpdGUxNihxbWMtPnNjY19wcmFtICsgUU1DX0dCTF9SWFBU UiwgdmFsKTsNCj4gKwlxbWNfd3JpdGUxNihxbWMtPnNjY19wcmFtICsgUU1DX0dCTF9UWF9TX1BU UiwgdmFsKTsNCj4gKwlxbWNfd3JpdGUxNihxbWMtPnNjY19wcmFtICsgUU1DX0dCTF9UWFBUUiwg dmFsKTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IHFtY19z ZXR1cF90c2FfMzJyeF8zMnR4KHN0cnVjdCBxbWMgKnFtYywgY29uc3Qgc3RydWN0IHRzYV9zZXJp YWxfaW5mbyAqaW5mbykNCj4gK3sNCj4gKwlzdHJ1Y3QgcW1jX2NoYW4gKmNoYW47DQo+ICsJdW5z aWduZWQgaW50IGk7DQo+ICsJdTE2IHZhbDsNCj4gKw0KPiArCS8qDQo+ICsJICogVXNlIGEgVHgg MzIgZW50cmllcyB0YWJsZSBhbmQgYSBSeCAzMiBlbnRyaWVzIHRhYmxlLg0KPiArCSAqIEV2ZXJ5 dGhpbmcgd2FzIHByZXZpb3VzbHkgY2hlY2tlZC4NCj4gKwkgKi8NCj4gKw0KPiArCS8qIEludmFs aWRhdGUgYWxsIGVudHJpZXMgKi8NCj4gKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgew0KPiAr CQlxbWNfd3JpdGUxNihxbWMtPnNjY19wcmFtICsgUU1DX0dCTF9UU0FUUlggKyAoaSAqIDIpLCAw eDAwMDApOw0KPiArCQlxbWNfd3JpdGUxNihxbWMtPnNjY19wcmFtICsgUU1DX0dCTF9UU0FUVFgg KyAoaSAqIDIpLCAweDAwMDApOw0KPiArCX0NCj4gKw0KPiArCS8qIFNldCBlbnRyaWVzIGJhc2Vk IG9uIFJ4IGFuZCBUeCBzdHVmZiovDQo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShjaGFuLCAmcW1j LT5jaGFuX2hlYWQsIGxpc3QpIHsNCj4gKwkJLyogUnggcGFydCAqLw0KPiArCQlmb3IgKGkgPSAw OyBpIDwgaW5mby0+bmJfcnhfdHM7IGkrKykgew0KPiArCQkJaWYgKCEoY2hhbi0+cnhfdHNfbWFz ayAmICgoKHU2NCkxKSA8PCBpKSkpDQo+ICsJCQkJY29udGludWU7DQo+ICsNCj4gKwkJCXZhbCA9 IFFNQ19UU0FfVkFMSUQgfCBRTUNfVFNBX01BU0sgfA0KPiArCQkJICAgICAgUU1DX1RTQV9DSEFO TkVMKGNoYW4tPmlkKTsNCj4gKwkJCXFtY193cml0ZTE2KHFtYy0+c2NjX3ByYW0gKyBRTUNfR0JM X1RTQVRSWCArIChpICogMiksIHZhbCk7DQo+ICsJCX0NCj4gKwkJLyogVHggcGFydCAqLw0KPiAr CQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+bmJfdHhfdHM7IGkrKykgew0KPiArCQkJaWYgKCEoY2hh bi0+dHhfdHNfbWFzayAmICgoKHU2NCkxKSA8PCBpKSkpDQo+ICsJCQkJY29udGludWU7DQo+ICsN Cj4gKwkJCXZhbCA9IFFNQ19UU0FfVkFMSUQgfCBRTUNfVFNBX01BU0sgfA0KPiArCQkJICAgICAg UU1DX1RTQV9DSEFOTkVMKGNoYW4tPmlkKTsNCj4gKwkJCXFtY193cml0ZTE2KHFtYy0+c2NjX3By YW0gKyBRTUNfR0JMX1RTQVRUWCArIChpICogMiksIHZhbCk7DQo+ICsJCX0NCj4gKwl9DQo+ICsN Cj4gKwkvKiBTZXQgV3JhcCBiaXQgb24gbGFzdCBlbnRyaWVzICovDQo+ICsJcW1jX3NldGJpdHMx NihxbWMtPnNjY19wcmFtICsgUU1DX0dCTF9UU0FUUlggKyAoKGluZm8tPm5iX3J4X3RzIC0gMSkg KiAyKSwNCj4gKwkJICAgICAgUU1DX1RTQV9XUkFQKTsNCj4gKwlxbWNfc2V0Yml0czE2KHFtYy0+ c2NjX3ByYW0gKyBRTUNfR0JMX1RTQVRUWCArICgoaW5mby0+bmJfdHhfdHMgLSAxKSAqIDIpLA0K PiArCQkgICAgICBRTUNfVFNBX1dSQVApOw0KPiArDQo+ICsJLyogSW5pdCBSeCBwb2ludGVycyAu Li4qLw0KPiArCXZhbCA9IHFtYy0+c2NjX3ByYW1fb2Zmc2V0ICsgUU1DX0dCTF9UU0FUUlg7DQo+ ICsJcW1jX3dyaXRlMTYocW1jLT5zY2NfcHJhbSArIFFNQ19HQkxfUlhfU19QVFIsIHZhbCk7DQo+ ICsJcW1jX3dyaXRlMTYocW1jLT5zY2NfcHJhbSArIFFNQ19HQkxfUlhQVFIsIHZhbCk7DQo+ICsN Cj4gKwkvKiAuLi4gYW5kIFR4IHBvaW50ZXJzICovDQo+ICsJdmFsID0gcW1jLT5zY2NfcHJhbV9v ZmZzZXQgKyBRTUNfR0JMX1RTQVRUWDsNCj4gKwlxbWNfd3JpdGUxNihxbWMtPnNjY19wcmFtICsg UU1DX0dCTF9UWF9TX1BUUiwgdmFsKTsNCj4gKwlxbWNfd3JpdGUxNihxbWMtPnNjY19wcmFtICsg UU1DX0dCTF9UWFBUUiwgdmFsKTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtz dGF0aWMgaW50IHFtY19zZXR1cF90c2Eoc3RydWN0IHFtYyAqcW1jKQ0KPiArew0KPiArCXN0cnVj dCB0c2Ffc2VyaWFsX2luZm8gaW5mbzsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJLyogUmV0cmll dmUgaW5mbyBmcm9tIHRoZSBUU0EgcmVsYXRlZCBzZXJpYWwgKi8NCj4gKwlyZXQgPSB0c2Ffc2Vy aWFsX2dldF9pbmZvKHFtYy0+dHNhX3NlcmlhbCwgJmluZm8pOw0KPiArCWlmIChyZXQpDQo+ICsJ CXJldHVybiByZXQ7DQo+ICsNCj4gKwkvKg0KPiArCSAqIFNldHVwIG9uZSBjb21tb24gNjQgZW50 cmllcyB0YWJsZSBvciB0d28gMzIgZW50cmllcyAob25lIGZvciBUeCBhbmQNCj4gKwkgKiBvbmUg Zm9yIFR4KSBhY2NvcmRpbmcgdG8gYXNzaWduZWQgVFMgbnVtYmVycy4NCj4gKwkgKi8NCj4gKwly ZXR1cm4gKChpbmZvLm5iX3R4X3RzID4gMzIpIHx8IChpbmZvLm5iX3J4X3RzID4gMzIpKSA/DQo+ ICsJCXFtY19zZXR1cF90c2FfNjRyeHR4KHFtYywgJmluZm8pIDoNCj4gKwkJcW1jX3NldHVwX3Rz YV8zMnJ4XzMydHgocW1jLCAmaW5mbyk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgcW1jX3Nl dHVwX2NoYW5fdHJuc3luYyhzdHJ1Y3QgcW1jICpxbWMsIHN0cnVjdCBxbWNfY2hhbiAqY2hhbikN Cj4gK3sNCj4gKwlzdHJ1Y3QgdHNhX3NlcmlhbF9pbmZvIGluZm87DQo+ICsJdTE2IGZpcnN0X3J4 LCBsYXN0X3R4Ow0KPiArCXUxNiB0cm5zeW5jOw0KPiArCWludCByZXQ7DQo+ICsNCj4gKwkvKiBS ZXRyaWV2ZSBpbmZvIGZyb20gdGhlIFRTQSByZWxhdGVkIHNlcmlhbCAqLw0KPiArCXJldCA9IHRz YV9zZXJpYWxfZ2V0X2luZm8oY2hhbi0+cW1jLT50c2Ffc2VyaWFsLCAmaW5mbyk7DQo+ICsJaWYg KHJldCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiArCS8qIEZpbmQgdGhlIGZpcnN0IFJ4IFRT IGFsbG9jYXRlZCB0byB0aGUgY2hhbm5lbCAqLw0KPiArCWZpcnN0X3J4ID0gY2hhbi0+cnhfdHNf bWFzayA/IF9fZmZzNjQoY2hhbi0+cnhfdHNfbWFzaykgKyAxIDogMDsNCj4gKw0KPiArCS8qIEZp bmQgdGhlIGxhc3QgVHggVFMgYWxsb2NhdGVkIHRvIHRoZSBjaGFubmVsICovDQo+ICsJbGFzdF90 eCA9IGZsczY0KGNoYW4tPnR4X3RzX21hc2spOw0KPiArDQo+ICsJdHJuc3luYyA9IDA7DQo+ICsJ aWYgKGluZm8ubmJfcnhfdHMpDQo+ICsJCXRybnN5bmMgfD0gUU1DX1NQRV9UUk5TWU5DX1JYKChm aXJzdF9yeCAlIGluZm8ubmJfcnhfdHMpICogMik7DQo+ICsJaWYgKGluZm8ubmJfdHhfdHMpDQo+ ICsJCXRybnN5bmMgfD0gUU1DX1NQRV9UUk5TWU5DX1RYKChsYXN0X3R4ICUgaW5mby5uYl90eF90 cykgKiAyKTsNCj4gKw0KPiArCXFtY193cml0ZTE2KGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BFX1RS TlNZTkMsIHRybnN5bmMpOw0KPiArDQo+ICsJZGV2X2RiZyhxbWMtPmRldiwgImNoYW4gJXU6IHRy bnN5bmM9MHglMDR4LCByeCAldS8ldSAweCVsbHgsIHR4ICV1LyV1IDB4JWxseFxuIiwNCj4gKwkJ Y2hhbi0+aWQsIHRybnN5bmMsDQo+ICsJCWZpcnN0X3J4LCBpbmZvLm5iX3J4X3RzLCBjaGFuLT5y eF90c19tYXNrLA0KPiArCQlsYXN0X3R4LCBpbmZvLm5iX3R4X3RzLCBjaGFuLT50eF90c19tYXNr KTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IHFtY19zZXR1 cF9jaGFuKHN0cnVjdCBxbWMgKnFtYywgc3RydWN0IHFtY19jaGFuICpjaGFuKQ0KPiArew0KPiAr CXVuc2lnbmVkIGludCBpOw0KPiArCWNiZF90IF9faW9tZW0gKmJkOw0KPiArCWludCByZXQ7DQo+ ICsJdTE2IHZhbDsNCj4gKw0KPiArCWNoYW4tPnFtYyA9IHFtYzsNCj4gKw0KPiArCS8qIFNldCBj aGFubmVsIHNwZWNpZmljIHBhcmFtZXRlciBiYXNlIGFkZHJlc3MgKi8NCj4gKwljaGFuLT5zX3Bh cmFtID0gcW1jLT5kcHJhbSArIChjaGFuLT5pZCAqIDY0KTsNCj4gKwkvKiAxNiBiZCBwZXIgY2hh bm5lbCAoOCByeCBhbmQgOCB0eCkgKi8NCj4gKwljaGFuLT50eGJkcyA9IHFtYy0+YmRfdGFibGUg KyAoY2hhbi0+aWQgKiAoUU1DX05CX1RYQkRTICsgUU1DX05CX1JYQkRTKSk7DQo+ICsJY2hhbi0+ cnhiZHMgPSBxbWMtPmJkX3RhYmxlICsgKGNoYW4tPmlkICogKFFNQ19OQl9UWEJEUyArIFFNQ19O Ql9SWEJEUykpICsgUU1DX05CX1RYQkRTOw0KPiArDQo+ICsJY2hhbi0+dHhiZF9mcmVlID0gY2hh bi0+dHhiZHM7DQo+ICsJY2hhbi0+dHhiZF9kb25lID0gY2hhbi0+dHhiZHM7DQo+ICsJY2hhbi0+ cnhiZF9mcmVlID0gY2hhbi0+cnhiZHM7DQo+ICsJY2hhbi0+cnhiZF9kb25lID0gY2hhbi0+cnhi ZHM7DQo+ICsNCj4gKwkvKiBUQkFTRSBhbmQgVEJQVFIqLw0KPiArCXZhbCA9IGNoYW4tPmlkICog KFFNQ19OQl9UWEJEUyArIFFNQ19OQl9SWEJEUykgKiBzaXplb2YoY2JkX3QpOw0KPiArCXFtY193 cml0ZTE2KGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BFX1RCQVNFLCB2YWwpOw0KPiArCXFtY193cml0 ZTE2KGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BFX1RCUFRSLCB2YWwpOw0KPiArDQo+ICsJLyogUkJB U0UgYW5kIFJCUFRSKi8NCj4gKwl2YWwgPSAoKGNoYW4tPmlkICogKFFNQ19OQl9UWEJEUyArIFFN Q19OQl9SWEJEUykpICsgUU1DX05CX1RYQkRTKSAqIHNpemVvZihjYmRfdCk7DQo+ICsJcW1jX3dy aXRlMTYoY2hhbi0+c19wYXJhbSArIFFNQ19TUEVfUkJBU0UsIHZhbCk7DQo+ICsJcW1jX3dyaXRl MTYoY2hhbi0+c19wYXJhbSArIFFNQ19TUEVfUkJQVFIsIHZhbCk7DQo+ICsJcW1jX3dyaXRlMzIo Y2hhbi0+c19wYXJhbSArIFFNQ19TUEVfVFNUQVRFLCAweDMwMDAwMDAwKTsNCj4gKwlxbWNfd3Jp dGUzMihjaGFuLT5zX3BhcmFtICsgUU1DX1NQRV9SU1RBVEUsIDB4MzEwMDAwMDApOw0KPiArCXFt Y193cml0ZTMyKGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BFX1pJU1RBVEUsIDB4MDAwMDAxMDApOw0K PiArCWlmIChjaGFuLT5tb2RlID09IFFNQ19UUkFOU1BBUkVOVCkgew0KPiArCQlxbWNfd3JpdGUz MihjaGFuLT5zX3BhcmFtICsgUU1DX1NQRV9aRFNUQVRFLCAweDE4MDAwMDgwKTsNCj4gKwkJcW1j X3dyaXRlMTYoY2hhbi0+c19wYXJhbSArIFFNQ19TUEVfVE1SQkxSLCA2MCk7DQo+ICsJCXZhbCA9 IFFNQ19TUEVfQ0hBTVJfTU9ERV9UUkFOU1AgfCBRTUNfU1BFX0NIQU1SX1RSQU5TUF9TWU5DOw0K PiArCQlpZiAoY2hhbi0+aXNfcmV2ZXJzZV9kYXRhKQ0KPiArCQkJdmFsIHw9IFFNQ19TUEVfQ0hB TVJfVFJBTlNQX1JEOw0KPiArCQlxbWNfd3JpdGUxNihjaGFuLT5zX3BhcmFtICsgUU1DX1NQRV9D SEFNUiwgdmFsKTsNCj4gKwkJcmV0ID0gcW1jX3NldHVwX2NoYW5fdHJuc3luYyhxbWMsIGNoYW4p Ow0KPiArCQlpZiAocmV0KQ0KPiArCQkJcmV0dXJuIHJldDsNCj4gKwl9IGVsc2Ugew0KPiArCQlx bWNfd3JpdGUzMihjaGFuLT5zX3BhcmFtICsgUU1DX1NQRV9aRFNUQVRFLCAweDAwMDAwMDgwKTsN Cj4gKwkJcW1jX3dyaXRlMTYoY2hhbi0+c19wYXJhbSArIFFNQ19TUEVfTUZMUiwgNjApOw0KPiAr CQlxbWNfd3JpdGUxNihjaGFuLT5zX3BhcmFtICsgUU1DX1NQRV9DSEFNUiwNCj4gKwkJCVFNQ19T UEVfQ0hBTVJfTU9ERV9IRExDIHwgUU1DX1NQRV9DSEFNUl9IRExDX0lETE0pOw0KPiArCX0NCj4g Kw0KPiArCS8qIERvIG5vdCBlbmFibGUgaW50ZXJydXB0cyBub3cuIFRoZXkgd2lsbCBiZSBlbmFi bGVkIGxhdGVyICovDQo+ICsJcW1jX3dyaXRlMTYoY2hhbi0+c19wYXJhbSArIFFNQ19TUEVfSU5U TVNLLCAweDAwMDApOw0KPiArDQo+ICsJLyogSW5pdCBSeCBCRHMgYW5kIHNldCBXcmFwIGJpdCBv biBsYXN0IGRlc2NyaXB0b3IgKi8NCj4gKwlCVUlMRF9CVUdfT04oUU1DX05CX1JYQkRTID09IDAp Ow0KPiArCXZhbCA9IFFNQ19CRF9SWF9JOw0KPiArCWZvciAoaSA9IDA7IGkgPCBRTUNfTkJfUlhC RFM7IGkrKykgew0KPiArCQliZCA9IGNoYW4tPnJ4YmRzICsgaTsNCj4gKwkJcW1jX3dyaXRlMTYo JmJkLT5jYmRfc2MsIHZhbCk7DQo+ICsJfQ0KPiArCWJkID0gY2hhbi0+cnhiZHMgKyBRTUNfTkJf UlhCRFMgLSAxOw0KPiArCXFtY193cml0ZTE2KCZiZC0+Y2JkX3NjLCB2YWwgfCBRTUNfQkRfUlhf Vyk7DQo+ICsNCj4gKwkvKiBJbml0IFR4IEJEcyBhbmQgc2V0IFdyYXAgYml0IG9uIGxhc3QgZGVz Y3JpcHRvciAqLw0KPiArCUJVSUxEX0JVR19PTihRTUNfTkJfVFhCRFMgPT0gMCk7DQo+ICsJdmFs ID0gUU1DX0JEX1RYX0k7DQo+ICsJaWYgKGNoYW4tPm1vZGUgPT0gUU1DX0hETEMpDQo+ICsJCXZh bCB8PSBRTUNfQkRfVFhfTCB8IFFNQ19CRF9UWF9UQzsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgUU1D X05CX1RYQkRTOyBpKyspIHsNCj4gKwkJYmQgPSBjaGFuLT50eGJkcyArIGk7DQo+ICsJCXFtY193 cml0ZTE2KCZiZC0+Y2JkX3NjLCB2YWwpOw0KPiArCX0NCj4gKwliZCA9IGNoYW4tPnR4YmRzICsg UU1DX05CX1RYQkRTIC0gMTsNCj4gKwlxbWNfd3JpdGUxNigmYmQtPmNiZF9zYywgdmFsIHwgUU1D X0JEX1RYX1cpOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQg cW1jX3NldHVwX2NoYW5zKHN0cnVjdCBxbWMgKnFtYykNCj4gK3sNCj4gKwlzdHJ1Y3QgcW1jX2No YW4gKmNoYW47DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hh biwgJnFtYy0+Y2hhbl9oZWFkLCBsaXN0KSB7DQo+ICsJCXJldCA9IHFtY19zZXR1cF9jaGFuKHFt YywgY2hhbik7DQo+ICsJCWlmIChyZXQpDQo+ICsJCQlyZXR1cm4gcmV0Ow0KPiArCX0NCj4gKw0K PiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IHFtY19maW5hbGl6ZV9jaGFu cyhzdHJ1Y3QgcW1jICpxbWMpDQo+ICt7DQo+ICsJc3RydWN0IHFtY19jaGFuICpjaGFuOw0KPiAr CWludCByZXQ7DQo+ICsNCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoYW4sICZxbWMtPmNoYW5f aGVhZCwgbGlzdCkgew0KPiArCQkvKiBVbm1hc2sgY2hhbm5lbCBpbnRlcnJ1cHRzICovDQo+ICsJ CWlmIChjaGFuLT5tb2RlID09IFFNQ19IRExDKSB7DQo+ICsJCQlxbWNfd3JpdGUxNihjaGFuLT5z X3BhcmFtICsgUU1DX1NQRV9JTlRNU0ssDQo+ICsJCQkJICAgIFFNQ19JTlRfTklEIHwgUU1DX0lO VF9JREwgfCBRTUNfSU5UX01SRiB8DQo+ICsJCQkJICAgIFFNQ19JTlRfVU4gfCBRTUNfSU5UX1JY RiB8IFFNQ19JTlRfQlNZIHwNCj4gKwkJCQkgICAgUU1DX0lOVF9UWEIgfCBRTUNfSU5UX1JYQik7 DQo+ICsJCX0gZWxzZSB7DQo+ICsJCQlxbWNfd3JpdGUxNihjaGFuLT5zX3BhcmFtICsgUU1DX1NQ RV9JTlRNU0ssDQo+ICsJCQkJICAgIFFNQ19JTlRfVU4gfCBRTUNfSU5UX0JTWSB8DQo+ICsJCQkJ ICAgIFFNQ19JTlRfVFhCIHwgUU1DX0lOVF9SWEIpOw0KPiArCQl9DQo+ICsNCj4gKwkJLyogRm9y Y2VkIHN0b3AgdGhlIGNoYW5uZWwgKi8NCj4gKwkJcmV0ID0gcW1jX2NoYW5fc3RvcChjaGFuLCBR TUNfQ0hBTl9BTEwpOw0KPiArCQlpZiAocmV0KQ0KPiArCQkJcmV0dXJuIHJldDsNCj4gKwl9DQo+ ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBxbWNfc2V0dXBfaW50 cyhzdHJ1Y3QgcW1jICpxbWMpDQo+ICt7DQo+ICsJdW5zaWduZWQgaW50IGk7DQo+ICsJdTE2IF9f aW9tZW0gKmxhc3Q7DQo+ICsNCj4gKwkvKiBSYXogYWxsIGVudHJpZXMgKi8NCj4gKwlmb3IgKGkg PSAwOyBpIDwgKHFtYy0+aW50X3NpemUgLyBzaXplb2YodTE2KSk7IGkrKykNCj4gKwkJcW1jX3dy aXRlMTYocW1jLT5pbnRfdGFibGUgKyBpLCAweDAwMDApOw0KPiArDQo+ICsJLyogU2V0IFdyYXAg Yml0IG9uIGxhc3QgZW50cnkgKi8NCj4gKwlpZiAocW1jLT5pbnRfc2l6ZSA+PSBzaXplb2YodTE2 KSkgew0KPiArCQlsYXN0ID0gcW1jLT5pbnRfdGFibGUgKyAocW1jLT5pbnRfc2l6ZSAvIHNpemVv Zih1MTYpKSAtIDE7DQo+ICsJCXFtY193cml0ZTE2KGxhc3QsIFFNQ19JTlRfVyk7DQo+ICsJfQ0K PiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIHFtY19pcnFfZ2lu dChzdHJ1Y3QgcW1jICpxbWMpDQo+ICt7DQo+ICsJc3RydWN0IHFtY19jaGFuICpjaGFuOw0KPiAr CXVuc2lnbmVkIGludCBjaGFuX2lkOw0KPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ICsJdTE2 IGludF9lbnRyeTsNCj4gKw0KPiArCWludF9lbnRyeSA9IHFtY19yZWFkMTYocW1jLT5pbnRfY3Vy cik7DQo+ICsJd2hpbGUgKGludF9lbnRyeSAmIFFNQ19JTlRfVikgew0KPiArCQkvKiBDbGVhciBh bGwgYnV0IHRoZSBXcmFwIGJpdCAqLw0KPiArCQlxbWNfd3JpdGUxNihxbWMtPmludF9jdXJyLCBp bnRfZW50cnkgJiBRTUNfSU5UX1cpOw0KPiArDQo+ICsJCWNoYW5faWQgPSBRTUNfSU5UX0dFVF9D SEFOTkVMKGludF9lbnRyeSk7DQo+ICsJCWNoYW4gPSBxbWMtPmNoYW5zW2NoYW5faWRdOw0KPiAr CQlpZiAoIWNoYW4pIHsNCj4gKwkJCWRldl9lcnIocW1jLT5kZXYsICJpbnRlcnJ1cHQgb24gaW52 YWxpZCBjaGFuICV1XG4iLCBjaGFuX2lkKTsNCj4gKwkJCWdvdG8gaW50X25leHQ7DQo+ICsJCX0N Cj4gKw0KPiArCQlpZiAoaW50X2VudHJ5ICYgUU1DX0lOVF9UWEIpDQo+ICsJCQlxbWNfY2hhbl93 cml0ZV9kb25lKGNoYW4pOw0KPiArDQo+ICsJCWlmIChpbnRfZW50cnkgJiBRTUNfSU5UX1VOKSB7 DQo+ICsJCQlkZXZfaW5mbyhxbWMtPmRldiwgImludHIgY2hhbiAldSwgMHglMDR4IChVTilcbiIs IGNoYW5faWQsDQo+ICsJCQkJIGludF9lbnRyeSk7DQo+ICsJCQljaGFuLT5uYl90eF91bmRlcnJ1 bisrOw0KPiArCQl9DQo+ICsNCj4gKwkJaWYgKGludF9lbnRyeSAmIFFNQ19JTlRfQlNZKSB7DQo+ ICsJCQlkZXZfaW5mbyhxbWMtPmRldiwgImludHIgY2hhbiAldSwgMHglMDR4IChCU1kpXG4iLCBj aGFuX2lkLA0KPiArCQkJCSBpbnRfZW50cnkpOw0KPiArCQkJY2hhbi0+bmJfcnhfYnVzeSsrOw0K PiArCQkJLyogUmVzdGFydCB0aGUgcmVjZWl2ZXIgaWYgbmVlZGVkICovDQo+ICsJCQlzcGluX2xv Y2tfaXJxc2F2ZSgmY2hhbi0+cnhfbG9jaywgZmxhZ3MpOw0KPiArCQkJaWYgKGNoYW4tPnJ4X3Bl bmRpbmcgJiYgIWNoYW4tPmlzX3J4X3N0b3BwZWQpIHsNCj4gKwkJCQlpZiAoY2hhbi0+bW9kZSA9 PSBRTUNfVFJBTlNQQVJFTlQpDQo+ICsJCQkJCXFtY193cml0ZTMyKGNoYW4tPnNfcGFyYW0gKyBR TUNfU1BFX1pEU1RBVEUsIDB4MTgwMDAwODApOw0KPiArCQkJCWVsc2UNCj4gKwkJCQkJcW1jX3dy aXRlMzIoY2hhbi0+c19wYXJhbSArIFFNQ19TUEVfWkRTVEFURSwgMHgwMDAwMDA4MCk7DQo+ICsJ CQkJcW1jX3dyaXRlMzIoY2hhbi0+c19wYXJhbSArIFFNQ19TUEVfUlNUQVRFLCAweDMxMDAwMDAw KTsNCj4gKwkJCQljaGFuLT5pc19yeF9oYWx0ZWQgPSBmYWxzZTsNCj4gKwkJCX0gZWxzZSB7DQo+ ICsJCQkJY2hhbi0+aXNfcnhfaGFsdGVkID0gdHJ1ZTsNCj4gKwkJCX0NCj4gKwkJCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJmNoYW4tPnJ4X2xvY2ssIGZsYWdzKTsNCj4gKwkJfQ0KPiArDQo+ICsJ CWlmIChpbnRfZW50cnkgJiBRTUNfSU5UX1JYQikNCj4gKwkJCXFtY19jaGFuX3JlYWRfZG9uZShj aGFuKTsNCj4gKw0KPiAraW50X25leHQ6DQo+ICsJCWlmIChpbnRfZW50cnkgJiBRTUNfSU5UX1cp DQo+ICsJCQlxbWMtPmludF9jdXJyID0gcW1jLT5pbnRfdGFibGU7DQo+ICsJCWVsc2UNCj4gKwkJ CXFtYy0+aW50X2N1cnIrKzsNCj4gKwkJaW50X2VudHJ5ID0gcW1jX3JlYWQxNihxbWMtPmludF9j dXJyKTsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpcnFyZXR1cm5fdCBxbWNfaXJxX2hh bmRsZXIoaW50IGlycSwgdm9pZCAqcHJpdikNCj4gK3sNCj4gKwlzdHJ1Y3QgcW1jICpxbWMgPSAo c3RydWN0IHFtYyAqKXByaXY7DQo+ICsJdTE2IHNjY2U7DQo+ICsNCj4gKwlzY2NlID0gcW1jX3Jl YWQxNihxbWMtPnNjY19yZWdzICsgU0NDX1NDQ0UpOw0KPiArCXFtY193cml0ZTE2KHFtYy0+c2Nj X3JlZ3MgKyBTQ0NfU0NDRSwgc2NjZSk7DQo+ICsNCj4gKwlpZiAodW5saWtlbHkoc2NjZSAmIFND Q19TQ0NFX0lRT1YpKQ0KPiArCQlkZXZfaW5mbyhxbWMtPmRldiwgIklSUSBxdWV1ZSBvdmVyZmxv d1xuIik7DQo+ICsNCj4gKwlpZiAodW5saWtlbHkoc2NjZSAmIFNDQ19TQ0NFX0dVTikpDQo+ICsJ CWRldl9lcnIocW1jLT5kZXYsICJHbG9iYWwgdHJhbnNtaXR0ZXIgdW5kZXJydW5cbiIpOw0KPiAr DQo+ICsJaWYgKHVubGlrZWx5KHNjY2UgJiBTQ0NfU0NDRV9HT1YpKQ0KPiArCQlkZXZfZXJyKHFt Yy0+ZGV2LCAiR2xvYmFsIHJlY2VpdmVyIG92ZXJydW5cbiIpOw0KPiArDQo+ICsJLyogbm9ybWFs IGludGVycnVwdCAqLw0KPiArCWlmIChsaWtlbHkoc2NjZSAmIFNDQ19TQ0NFX0dJTlQpKQ0KPiAr CQlxbWNfaXJxX2dpbnQocW1jKTsNCj4gKw0KPiArCXJldHVybiBJUlFfSEFORExFRDsNCj4gK30N Cj4gKw0KPiArc3RhdGljIGludCBxbWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl dikNCj4gK3sNCj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGRldi0+ZGV2Lm9mX25vZGU7 DQo+ICsJdW5zaWduZWQgaW50IG5iX2NoYW5zOw0KPiArCXN0cnVjdCByZXNvdXJjZSAqcmVzOw0K PiArCXN0cnVjdCBxbWMgKnFtYzsNCj4gKwlpbnQgaXJxOw0KPiArCWludCByZXQ7DQo+ICsNCj4g KwlxbWMgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpxbWMpLCBHRlBfS0VSTkVM KTsNCj4gKwlpZiAoIXFtYykNCj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ICsNCj4gKwlxbWMtPmRl diA9ICZwZGV2LT5kZXY7DQo+ICsJSU5JVF9MSVNUX0hFQUQoJnFtYy0+Y2hhbl9oZWFkKTsNCj4g Kw0KPiArCXFtYy0+c2NjX3JlZ3MgPSBkZXZtX3BsYXRmb3JtX2lvcmVtYXBfcmVzb3VyY2VfYnlu YW1lKHBkZXYsICJzY2NfcmVncyIpOw0KPiArCWlmIChJU19FUlIocW1jLT5zY2NfcmVncykpDQo+ ICsJCXJldHVybiBQVFJfRVJSKHFtYy0+c2NjX3JlZ3MpOw0KPiArDQo+ICsNCj4gKwlyZXMgPSBw bGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAic2NjX3By YW0iKTsNCj4gKwlpZiAoIXJlcykNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJcW1jLT5zY2Nf cHJhbV9vZmZzZXQgPSByZXMtPnN0YXJ0IC0gZ2V0X2ltbXJiYXNlKCk7DQo+ICsJcW1jLT5zY2Nf cHJhbSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShxbWMtPmRldiwgcmVzKTsNCj4gKwlpZiAoSVNf RVJSKHFtYy0+c2NjX3ByYW0pKQ0KPiArCQlyZXR1cm4gUFRSX0VSUihxbWMtPnNjY19wcmFtKTsN Cj4gKw0KPiArCXFtYy0+ZHByYW0gID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlX2J5 bmFtZShwZGV2LCAiZHByYW0iKTsNCj4gKwlpZiAoSVNfRVJSKHFtYy0+ZHByYW0pKQ0KPiArCQly ZXR1cm4gUFRSX0VSUihxbWMtPmRwcmFtKTsNCj4gKw0KPiArCXFtYy0+dHNhX3NlcmlhbCA9IGRl dm1fdHNhX3NlcmlhbF9nZXRfYnlwaGFuZGxlKHFtYy0+ZGV2LCBucCwgImZzbCx0c2Etc2VyaWFs Iik7DQo+ICsJaWYgKElTX0VSUihxbWMtPnRzYV9zZXJpYWwpKSB7DQo+ICsJCXJldHVybiBkZXZf ZXJyX3Byb2JlKHFtYy0+ZGV2LCBQVFJfRVJSKHFtYy0+dHNhX3NlcmlhbCksDQo+ICsJCQkJICAg ICAiRmFpbGVkIHRvIGdldCBUU0Egc2VyaWFsXG4iKTsNCj4gKwl9DQo+ICsNCj4gKwkvKiBDb25u ZWN0IHRoZSBzZXJpYWwgKFNDQykgdG8gVFNBICovDQo+ICsJcmV0ID0gdHNhX3NlcmlhbF9jb25u ZWN0KHFtYy0+dHNhX3NlcmlhbCk7DQo+ICsJaWYgKHJldCkgew0KPiArCQlkZXZfZXJyKHFtYy0+ ZGV2LCAiRmFpbGVkIHRvIGNvbm5lY3QgVFNBIHNlcmlhbFxuIik7DQo+ICsJCXJldHVybiByZXQ7 DQo+ICsJfQ0KPiArDQo+ICsJLyogUGFyc2UgY2hhbm5lbHMgaW5mb3JtYXRpb25zcyAqLw0KPiAr CXJldCA9IHFtY19vZl9wYXJzZV9jaGFucyhxbWMsIG5wKTsNCj4gKwlpZiAocmV0KQ0KPiArCQln b3RvIGVycl90c2Ffc2VyaWFsX2Rpc2Nvbm5lY3Q7DQo+ICsNCj4gKwluYl9jaGFucyA9IHFtY19u Yl9jaGFucyhxbWMpOw0KPiArDQo+ICsJLyogSW5pdCBHTVNSX0ggYW5kIEdNU1JfTCByZWdpc3Rl cnMgKi8NCj4gKwlxbWNfd3JpdGUzMihxbWMtPnNjY19yZWdzICsgU0NDX0dTTVJILA0KPiArCQkg ICAgU0NDX0dTTVJIX0NEUyB8IFNDQ19HU01SSF9DVFNTIHwgU0NDX0dTTVJIX0NEUCB8IFNDQ19H U01SSF9DVFNQKTsNCj4gKw0KPiArCS8qIGVuYWJsZSBRTUMgbW9kZSAqLw0KPiArCXFtY193cml0 ZTMyKHFtYy0+c2NjX3JlZ3MgKyBTQ0NfR1NNUkwsIFNDQ19HU01STF9NT0RFX1FNQyk7DQo+ICsN Cj4gKwkvKg0KPiArCSAqIEFsbG9jYXRlIHRoZSBidWZmZXIgZGVzY3JpcHRvciB0YWJsZQ0KPiAr CSAqIDggcnggYW5kIDggdHggZGVzY3JpcHRvcnMgcGVyIGNoYW5uZWwNCj4gKwkgKi8NCj4gKwlx bWMtPmJkX3NpemUgPSAobmJfY2hhbnMgKiAoUU1DX05CX1RYQkRTICsgUU1DX05CX1JYQkRTKSkg KiBzaXplb2YoY2JkX3QpOw0KPiArCXFtYy0+YmRfdGFibGUgPSBkbWFtX2FsbG9jX2NvaGVyZW50 KHFtYy0+ZGV2LCBxbWMtPmJkX3NpemUsDQo+ICsJCSZxbWMtPmJkX2RtYV9hZGRyLCBHRlBfS0VS TkVMKTsNCj4gKwlpZiAoIXFtYy0+YmRfdGFibGUpIHsNCj4gKwkJZGV2X2VycihxbWMtPmRldiwg IkZhaWxlZCB0byBhbGxvY2F0ZSBiZCB0YWJsZVxuIik7DQo+ICsJCXJldCA9IC1FTk9NRU07DQo+ ICsJCWdvdG8gZXJyX3RzYV9zZXJpYWxfZGlzY29ubmVjdDsNCj4gKwl9DQo+ICsJbWVtc2V0KHFt Yy0+YmRfdGFibGUsIDAsIHFtYy0+YmRfc2l6ZSk7DQo+ICsNCj4gKwlxbWNfd3JpdGUzMihxbWMt PnNjY19wcmFtICsgUU1DX0dCTF9NQ0JBU0UsIHFtYy0+YmRfZG1hX2FkZHIpOw0KPiArDQo+ICsJ LyogQWxsb2NhdGUgdGhlIGludGVycnVwdCB0YWJsZSAqLw0KPiArCXFtYy0+aW50X3NpemUgPSBR TUNfTkJfSU5UUyAqIHNpemVvZih1MTYpOw0KPiArCXFtYy0+aW50X3RhYmxlID0gZG1hbV9hbGxv Y19jb2hlcmVudChxbWMtPmRldiwgcW1jLT5pbnRfc2l6ZSwNCj4gKwkJJnFtYy0+aW50X2RtYV9h ZGRyLCBHRlBfS0VSTkVMKTsNCj4gKwlpZiAoIXFtYy0+aW50X3RhYmxlKSB7DQo+ICsJCWRldl9l cnIocW1jLT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgaW50ZXJydXB0IHRhYmxlXG4iKTsNCj4g KwkJcmV0ID0gLUVOT01FTTsNCj4gKwkJZ290byBlcnJfdHNhX3NlcmlhbF9kaXNjb25uZWN0Ow0K PiArCX0NCj4gKwltZW1zZXQocW1jLT5pbnRfdGFibGUsIDAsIHFtYy0+aW50X3NpemUpOw0KPiAr DQo+ICsJcW1jLT5pbnRfY3VyciA9IHFtYy0+aW50X3RhYmxlOw0KPiArCXFtY193cml0ZTMyKHFt Yy0+c2NjX3ByYW0gKyBRTUNfR0JMX0lOVEJBU0UsIHFtYy0+aW50X2RtYV9hZGRyKTsNCj4gKwlx bWNfd3JpdGUzMihxbWMtPnNjY19wcmFtICsgUU1DX0dCTF9JTlRQVFIsIHFtYy0+aW50X2RtYV9h ZGRyKTsNCj4gKw0KPiArCS8qIFNldCBNUkJMUiAodmFsaWQgZm9yIEhETEMgb25seSkgbWF4IE1S VSArIG1heCBDUkMgKi8NCj4gKwlxbWNfd3JpdGUxNihxbWMtPnNjY19wcmFtICsgUU1DX0dCTF9N UkJMUiwgSERMQ19NQVhfTVJVICsgNCk7DQo+ICsNCj4gKwlxbWNfd3JpdGUxNihxbWMtPnNjY19w cmFtICsgUU1DX0dCTF9HUkZUSFIsIDEpOw0KPiArCXFtY193cml0ZTE2KHFtYy0+c2NjX3ByYW0g KyBRTUNfR0JMX0dSRkNOVCwgMSk7DQo+ICsNCj4gKwlxbWNfd3JpdGUzMihxbWMtPnNjY19wcmFt ICsgUU1DX0dCTF9DX01BU0szMiwgMHhERUJCMjBFMyk7DQo+ICsJcW1jX3dyaXRlMTYocW1jLT5z Y2NfcHJhbSArIFFNQ19HQkxfQ19NQVNLMTYsIDB4RjBCOCk7DQo+ICsNCj4gKwlyZXQgPSBxbWNf c2V0dXBfdHNhKHFtYyk7DQo+ICsJaWYgKHJldCkNCj4gKwkJZ290byBlcnJfdHNhX3NlcmlhbF9k aXNjb25uZWN0Ow0KPiArDQo+ICsJcW1jX3dyaXRlMTYocW1jLT5zY2NfcHJhbSArIFFNQ19HQkxf UU1DU1RBVEUsIDB4ODAwMCk7DQo+ICsNCj4gKwlyZXQgPSBxbWNfc2V0dXBfY2hhbnMocW1jKTsN Cj4gKwlpZiAocmV0KQ0KPiArCQlnb3RvIGVycl90c2Ffc2VyaWFsX2Rpc2Nvbm5lY3Q7DQo+ICsN Cj4gKwkvKiBJbml0IGludGVycnVwdHMgdGFibGUgKi8NCj4gKwlyZXQgPSBxbWNfc2V0dXBfaW50 cyhxbWMpOw0KPiArCWlmIChyZXQpDQo+ICsJCWdvdG8gZXJyX3RzYV9zZXJpYWxfZGlzY29ubmVj dDsNCj4gKw0KPiArCS8qIERpc2FibGUgYW5kIGNsZWFyIGludGVycnVwdHMsICBzZXQgdGhlIGly cSBoYW5kbGVyICovDQo+ICsJcW1jX3dyaXRlMTYocW1jLT5zY2NfcmVncyArIFNDQ19TQ0NNLCAw eDAwMDApOw0KPiArCXFtY193cml0ZTE2KHFtYy0+c2NjX3JlZ3MgKyBTQ0NfU0NDRSwgMHgwMDBG KTsNCj4gKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOw0KPiArCWlmIChpcnEgPCAw KQ0KPiArCQlnb3RvIGVycl90c2Ffc2VyaWFsX2Rpc2Nvbm5lY3Q7DQo+ICsJcmV0ID0gZGV2bV9y ZXF1ZXN0X2lycShxbWMtPmRldiwgaXJxLCBxbWNfaXJxX2hhbmRsZXIsIDAsICJxbWMiLCBxbWMp Ow0KPiArCWlmIChyZXQgPCAwKQ0KPiArCQlnb3RvIGVycl90c2Ffc2VyaWFsX2Rpc2Nvbm5lY3Q7 DQo+ICsNCj4gKwkvKiBFbmFibGUgaW50ZXJydXB0cyAqLw0KPiArCXFtY193cml0ZTE2KHFtYy0+ c2NjX3JlZ3MgKyBTQ0NfU0NDTSwNCj4gKwkJU0NDX1NDQ0VfSVFPViB8IFNDQ19TQ0NFX0dJTlQg fCBTQ0NfU0NDRV9HVU4gfCBTQ0NfU0NDRV9HT1YpOw0KPiArDQo+ICsJcmV0ID0gcW1jX2ZpbmFs aXplX2NoYW5zKHFtYyk7DQo+ICsJaWYgKHJldCA8IDApDQo+ICsJCWdvdG8gZXJyX2Rpc2FibGVf aW50cjsNCj4gKw0KPiArCS8qIEVuYWJsZSB0cmFuc21pdGVyIGFuZCByZWNlaXZlciAqLw0KPiAr CXFtY19zZXRiaXRzMzIocW1jLT5zY2NfcmVncyArIFNDQ19HU01STCwgU0NDX0dTTVJMX0VOUiB8 IFNDQ19HU01STF9FTlQpOw0KPiArDQo+ICsJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcW1j KTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArDQo+ICtlcnJfZGlzYWJsZV9pbnRyOg0KPiArCXFt Y193cml0ZTE2KHFtYy0+c2NjX3JlZ3MgKyBTQ0NfU0NDTSwgMCk7DQo+ICsNCj4gK2Vycl90c2Ff c2VyaWFsX2Rpc2Nvbm5lY3Q6DQo+ICsJdHNhX3NlcmlhbF9kaXNjb25uZWN0KHFtYy0+dHNhX3Nl cmlhbCk7DQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBxbWNfcmVt b3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ICt7DQo+ICsJc3RydWN0IHFtYyAq cW1jID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7DQo+ICsNCj4gKwkvKiBEaXNhYmxlIHRy YW5zbWl0ZXIgYW5kIHJlY2VpdmVyICovDQo+ICsJcW1jX3NldGJpdHMzMihxbWMtPnNjY19yZWdz ICsgU0NDX0dTTVJMLCAwKTsNCj4gKw0KPiArCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLw0KPiAr CXFtY193cml0ZTE2KHFtYy0+c2NjX3JlZ3MgKyBTQ0NfU0NDTSwgMCk7DQo+ICsNCj4gKwkvKiBE aXNjb25uZWN0IHRoZSBzZXJpYWwgZnJvbSBUU0EgKi8NCj4gKwl0c2Ffc2VyaWFsX2Rpc2Nvbm5l Y3QocW1jLT50c2Ffc2VyaWFsKTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtz dGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBxbWNfaWRfdGFibGVbXSA9IHsNCj4gKwl7 IC5jb21wYXRpYmxlID0gImZzbCxjcG0xLXNjYy1xbWMiIH0sDQo+ICsJe30gLyogc2VudGluZWwg Ki8NCj4gK307DQo+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBxbWNfaWRfdGFibGUpOw0KPiAr DQo+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBxbWNfZHJpdmVyID0gew0KPiArCS5k cml2ZXIgPSB7DQo+ICsJCS5uYW1lID0gImZzbC1xbWMiLA0KPiArCQkub2ZfbWF0Y2hfdGFibGUg PSBvZl9tYXRjaF9wdHIocW1jX2lkX3RhYmxlKSwNCj4gKwl9LA0KPiArCS5wcm9iZSA9IHFtY19w cm9iZSwNCj4gKwkucmVtb3ZlID0gcW1jX3JlbW92ZSwNCj4gK307DQo+ICttb2R1bGVfcGxhdGZv cm1fZHJpdmVyKHFtY19kcml2ZXIpOw0KPiArDQo+ICtzdHJ1Y3QgcW1jX2NoYW4gKnFtY19jaGFu X2dldF9ieXBoYW5kbGUoc3RydWN0IGRldmljZV9ub2RlICpucCwgY29uc3QgY2hhciAqcGhhbmRs ZV9uYW1lKQ0KPiArew0KPiArCXN0cnVjdCBvZl9waGFuZGxlX2FyZ3Mgb3V0X2FyZ3M7DQo+ICsJ c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsNCj4gKwlzdHJ1Y3QgcW1jX2NoYW4gKnFtY19j aGFuOw0KPiArCXN0cnVjdCBxbWMgKnFtYzsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJcmV0ID0g b2ZfcGFyc2VfcGhhbmRsZV93aXRoX2ZpeGVkX2FyZ3MobnAsIHBoYW5kbGVfbmFtZSwgMSwgMCwN Cj4gKwkJCQkJICAgICAgICZvdXRfYXJncyk7DQo+ICsJaWYgKHJldCA8IDApDQo+ICsJCXJldHVy biBFUlJfUFRSKHJldCk7DQo+ICsNCj4gKwlpZiAoIW9mX21hdGNoX25vZGUocW1jX2RyaXZlci5k cml2ZXIub2ZfbWF0Y2hfdGFibGUsIG91dF9hcmdzLm5wKSkgew0KPiArCQlvZl9ub2RlX3B1dChv dXRfYXJncy5ucCk7DQo+ICsJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOw0KPiArCX0NCj4gKw0K PiArCXBkZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKG91dF9hcmdzLm5wKTsNCj4gKwlvZl9u b2RlX3B1dChvdXRfYXJncy5ucCk7DQo+ICsJaWYgKCFwZGV2KQ0KPiArCQlyZXR1cm4gRVJSX1BU UigtRU5PREVWKTsNCj4gKw0KPiArCXFtYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOw0K PiArCWlmICghcW1jKSB7DQo+ICsJCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7DQo+ICsJCXJl dHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpOw0KPiArCX0NCj4gKw0KPiArCWlmIChvdXRfYXJn cy5hcmdzX2NvdW50ICE9IDEpIHsNCj4gKwkJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsNCj4g KwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKG91dF9hcmdz LmFyZ3NbMF0gPj0gQVJSQVlfU0laRShxbWMtPmNoYW5zKSkgew0KPiArCQlwbGF0Zm9ybV9kZXZp Y2VfcHV0KHBkZXYpOw0KPiArCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsNCj4gKwl9DQo+ICsN Cj4gKwlxbWNfY2hhbiA9IHFtYy0+Y2hhbnNbb3V0X2FyZ3MuYXJnc1swXV07DQo+ICsJaWYgKCFx bWNfY2hhbikgew0KPiArCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOw0KPiArCQlyZXR1cm4g RVJSX1BUUigtRU5PRU5UKTsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gcW1jX2NoYW47DQo+ICt9 DQo+ICtFWFBPUlRfU1lNQk9MKHFtY19jaGFuX2dldF9ieXBoYW5kbGUpOw0KPiArDQo+ICt2b2lk IHFtY19jaGFuX3B1dChzdHJ1Y3QgcW1jX2NoYW4gKmNoYW4pDQo+ICt7DQo+ICsJcHV0X2Rldmlj ZShjaGFuLT5xbWMtPmRldik7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MKHFtY19jaGFuX3B1dCk7 DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGRldm1fcW1jX2NoYW5fcmVsZWFzZShzdHJ1Y3QgZGV2aWNl ICpkZXYsIHZvaWQgKnJlcykNCj4gK3sNCj4gKwlzdHJ1Y3QgcW1jX2NoYW4gKipxbWNfY2hhbiA9 IHJlczsNCj4gKw0KPiArCXFtY19jaGFuX3B1dCgqcW1jX2NoYW4pOw0KPiArfQ0KPiArDQo+ICtz dHJ1Y3QgcW1jX2NoYW4gKmRldm1fcW1jX2NoYW5fZ2V0X2J5cGhhbmRsZShzdHJ1Y3QgZGV2aWNl ICpkZXYsDQo+ICsJCQkJCSAgICAgc3RydWN0IGRldmljZV9ub2RlICpucCwNCj4gKwkJCQkJICAg ICBjb25zdCBjaGFyICpwaGFuZGxlX25hbWUpDQo+ICt7DQo+ICsJc3RydWN0IHFtY19jaGFuICpx bWNfY2hhbjsNCj4gKwlzdHJ1Y3QgcW1jX2NoYW4gKipkcjsNCj4gKw0KPiArCWRyID0gZGV2cmVz X2FsbG9jKGRldm1fcW1jX2NoYW5fcmVsZWFzZSwgc2l6ZW9mKCpkciksIEdGUF9LRVJORUwpOw0K PiArCWlmICghZHIpDQo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOw0KPiArDQo+ICsJcW1j X2NoYW4gPSBxbWNfY2hhbl9nZXRfYnlwaGFuZGxlKG5wLCBwaGFuZGxlX25hbWUpOw0KPiArCWlm ICghSVNfRVJSKHFtY19jaGFuKSkgew0KPiArCQkqZHIgPSBxbWNfY2hhbjsNCj4gKwkJZGV2cmVz X2FkZChkZXYsIGRyKTsNCj4gKwl9IGVsc2Ugew0KPiArCQlkZXZyZXNfZnJlZShkcik7DQo+ICsJ fQ0KPiArDQo+ICsJcmV0dXJuIHFtY19jaGFuOw0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTChkZXZt X3FtY19jaGFuX2dldF9ieXBoYW5kbGUpOw0KPiArDQo+ICtNT0RVTEVfQVVUSE9SKCJIZXJ2ZSBD b2RpbmEgPGhlcnZlLmNvZGluYUBib290bGluLmNvbT4iKTsNCj4gK01PRFVMRV9ERVNDUklQVElP TigiQ1BNIFFNQyBkcml2ZXIiKTsNCj4gK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsNCj4gZGlmZiAt LWdpdCBhL2luY2x1ZGUvc29jL2ZzbC9xZS9xbWMuaCBiL2luY2x1ZGUvc29jL2ZzbC9xZS9xbWMu aA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLjNjNjFhNTBk MmFlMg0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2luY2x1ZGUvc29jL2ZzbC9xZS9xbWMuaA0K PiBAQCAtMCwwICsxLDcxIEBADQo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MC1vci1sYXRlciAqLw0KPiArLyoNCj4gKyAqIFFNQyBtYW5hZ2VtZW50DQo+ICsgKg0KPiArICog Q29weXJpZ2h0IDIwMjIgQ1MgR1JPVVAgRnJhbmNlDQo+ICsgKg0KPiArICogQXV0aG9yOiBIZXJ2 ZSBDb2RpbmEgPGhlcnZlLmNvZGluYUBib290bGluLmNvbT4NCj4gKyAqLw0KPiArI2lmbmRlZiBf X1NPQ19GU0xfUU1DX0hfXw0KPiArI2RlZmluZSBfX1NPQ19GU0xfUU1DX0hfXw0KPiArDQo+ICsj aW5jbHVkZSA8bGludXgvdHlwZXMuaD4NCj4gKw0KPiArc3RydWN0IGRldmljZV9ub2RlOw0KPiAr c3RydWN0IGRldmljZTsNCj4gK3N0cnVjdCBxbWNfY2hhbjsNCj4gKw0KPiArc3RydWN0IHFtY19j aGFuICpxbWNfY2hhbl9nZXRfYnlwaGFuZGxlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGNvbnN0 IGNoYXIgKnBoYW5kbGVfbmFtZSk7DQo+ICt2b2lkIHFtY19jaGFuX3B1dChzdHJ1Y3QgcW1jX2No YW4gKmNoYW4pOw0KPiArc3RydWN0IHFtY19jaGFuICpkZXZtX3FtY19jaGFuX2dldF9ieXBoYW5k bGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLA0KPiArCQkJCQkg ICAgIGNvbnN0IGNoYXIgKnBoYW5kbGVfbmFtZSk7DQo+ICsNCj4gK2VudW0gcW1jX21vZGUgew0K PiArCVFNQ19UUkFOU1BBUkVOVCwNCj4gKwlRTUNfSERMQywNCj4gK307DQo+ICsNCj4gK3N0cnVj dCBxbWNfY2hhbl9pbmZvIHsNCj4gKwllbnVtIHFtY19tb2RlIG1vZGU7DQo+ICsJdW5zaWduZWQg bG9uZyByeF9mc19yYXRlOw0KPiArCXVuc2lnbmVkIGxvbmcgcnhfYml0X3JhdGU7DQo+ICsJdTgg bmJfcnhfdHM7DQo+ICsJdW5zaWduZWQgbG9uZyB0eF9mc19yYXRlOw0KPiArCXVuc2lnbmVkIGxv bmcgdHhfYml0X3JhdGU7DQo+ICsJdTggbmJfdHhfdHM7DQo+ICt9Ow0KPiArDQo+ICtpbnQgcW1j X2NoYW5fZ2V0X2luZm8oc3RydWN0IHFtY19jaGFuICpjaGFuLCBzdHJ1Y3QgcW1jX2NoYW5faW5m byAqaW5mbyk7DQo+ICsNCj4gK3N0cnVjdCBxbWNfY2hhbl9wYXJhbSB7DQo+ICsJZW51bSBxbWNf bW9kZSBtb2RlOw0KPiArCXVuaW9uIHsNCj4gKwkJc3RydWN0IHsNCj4gKwkJCXUxNiBtYXhfcnhf YnVmX3NpemU7DQo+ICsJCQl1MTYgbWF4X3J4X2ZyYW1lX3NpemU7DQo+ICsJCQlib29sIGlzX2Ny YzMyOw0KPiArCQl9IGhkbGM7DQo+ICsJCXN0cnVjdCB7DQo+ICsJCQl1MTYgbWF4X3J4X2J1Zl9z aXplOw0KPiArCQl9IHRyYW5zcDsNCj4gKwl9Ow0KPiArfTsNCj4gKw0KPiAraW50IHFtY19jaGFu X3NldF9wYXJhbShzdHJ1Y3QgcW1jX2NoYW4gKmNoYW4sIGNvbnN0IHN0cnVjdCBxbWNfY2hhbl9w YXJhbSAqcGFyYW0pOw0KPiArDQo+ICtpbnQgcW1jX2NoYW5fd3JpdGVfc3VibWl0KHN0cnVjdCBx bWNfY2hhbiAqY2hhbiwgZG1hX2FkZHJfdCBhZGRyLCBzaXplX3QgbGVuZ3RoLA0KPiArCQkJICB2 b2lkICgqY29tcGxldGUpKHZvaWQgKmNvbnRleHQpLCB2b2lkICpjb250ZXh0KTsNCj4gKw0KPiAr aW50IHFtY19jaGFuX3JlYWRfc3VibWl0KHN0cnVjdCBxbWNfY2hhbiAqY2hhbiwgZG1hX2FkZHJf dCBhZGRyLCBzaXplX3QgbGVuZ3RoLA0KPiArCQkJIHZvaWQgKCpjb21wbGV0ZSkodm9pZCAqY29u dGV4dCwgc2l6ZV90IGxlbmd0aCksDQo+ICsJCQkgdm9pZCAqY29udGV4dCk7DQo+ICsNCj4gKyNk ZWZpbmUgUU1DX0NIQU5fUkVBRCAgKDE8PDApDQo+ICsjZGVmaW5lIFFNQ19DSEFOX1dSSVRFICgx PDwxKQ0KPiArI2RlZmluZSBRTUNfQ0hBTl9BTEwgICAoUU1DX0NIQU5fUkVBRCB8IFFNQ19DSEFO X1dSSVRFKQ0KPiArDQo+ICtpbnQgcW1jX2NoYW5fc3RhcnQoc3RydWN0IHFtY19jaGFuICpjaGFu LCBpbnQgZGlyZWN0aW9uKTsNCj4gK2ludCBxbWNfY2hhbl9zdG9wKHN0cnVjdCBxbWNfY2hhbiAq Y2hhbiwgaW50IGRpcmVjdGlvbik7DQo+ICtpbnQgcW1jX2NoYW5fcmVzZXQoc3RydWN0IHFtY19j aGFuICpjaGFuLCBpbnQgZGlyZWN0aW9uKTsNCj4gKw0KPiArI2VuZGlmIC8qIF9fU09DX0ZTTF9R TUNfSF9fICovDQo=