From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 269A4C5B549 for ; Wed, 4 Jun 2025 19:10:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:In-Reply-To:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=zC36u4xlkHosqeqzDjGlYDSxx/fm9BBg38JHZs9upOU=; b=d/hIx/YAEAysXP XR2tCjY+xvI9bRVHoTDeZpD30DCJDRQ2rd4lqSbhupV9NvMc3y2vd31nbJVSGR59nm88N9LABtV14 BZHqfk66G7w5WYrgKjbHq97izX1I1+0P72I2YhwE33lt2548nDO+8drVXsB5iLw92QDLSnsK83TrS 1jtuvOZieYqyYfZE7N/q7hRsrmHfjsObJwoSrW8wMpIb1o085EwcfuESdBIHNgs+xRTtEEh2gmMn7 +I0gh+eErNx0NNFR6tiu9vTADBicd7SYTE3Ptz/SKQUtCOGaMq1Q6pTcdHDYfW3cfrA59VOBa2tGm vXyyLAWgb9TliMZkVPGQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1uMtVP-0000000E4SP-3m0w; Wed, 04 Jun 2025 19:10:31 +0000 Received: from mail-westeuropeazlp170110003.outbound.protection.outlook.com ([2a01:111:f403:c201::3] helo=AS8PR04CU009.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1uMtVN-0000000E4RU-0yB0 for linux-i3c@lists.infradead.org; Wed, 04 Jun 2025 19:10:31 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Bwbo3/ILr1xnJyEJXnu97kwTC3/2goZYEyFEqzoHL67tS38ICwznYFTF+4t/5zk7EDdDf6rnTbnEZQ2j0k1moFg+zCWSuG9xx+rUC5kJjPMHRjkyHSZE7o+bh2Tv6p/2EzyZ0H03UGHSJfqt4dMr3ne0M/8MoYSar5s5JvpuadxYCT/bNZq+TRLv3JCrejpdhkb/FEpxowE7H01+AL1scf9KAMOpZJZNqE+IaaPGTbPOVeL+pSj7d1p8Q/oOGaBAdedKjTC/0k8C4J8NhsyP62i5e2dvECiqcbVRJMwJa/dMb5+iYfuejKk5jU5d2liNusPx1AJwNHAEqmVT1f2Reg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=oJU4ZGETRmPYPdcuMdi5HR14+9IhyX3G9QBTOAFJ3lg=; b=fp6MhEMXUPe+DyQxh2SK2b0vzFYGi682gUmVWm0fVEff5bu9fyD3REao7ESX76wF32vgcaw0N1FvKAUykPklQzXcp1GxuEGrpLXB3mJ/1EKLqXO1eynIYRJDV5DOc+mG6Rn2A7PkaJilRUadMAWrwT6wGqX6Og4KDsFqOw/FGlG38W27/OpwALR77VaGLL1m5CmDX6rB7vZHBXV8sDswriyCjFQBFwIO7eEnuYrI0gpgbL3n/VRxM0aQ0lTu2Xhhvk/7kB7N07wP8mGvA8qrK/KOsTrZNo6M4vuRNaINaChz+7vLLFvOosp7n7BIBVmNYXxtMw+QmVEQI/evfSQlBQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=oJU4ZGETRmPYPdcuMdi5HR14+9IhyX3G9QBTOAFJ3lg=; b=jrgMR4l5nYe9M/P0EvCLsLZVBFiH+2dvu0CYNKExrLtuVuVPjYlIfIV7T1lRO1JfXxas93vA8vz8AnJH+xtyao/4l/ezuHOKrL/EmFGbWtcTBMRAN8iYX/mEjCEI0w6f2tNNihZGZkM55nwDsssmHUsOBMyrZNb5RejzzSSeTYXHXFSqpg3gI+lBRkBXRDnwW4mAN3ILD3opCcf3mHo6dELmBh0hUA3T9E9yVs2YYZEYSg05s4JK0jJvTyu/kB6Jn72X4TNRF79diQxpZ0TeM3zXcqkBeVcLlobh95mb35wKWUYRiF4w22ZYdPh6ywXeyGQb7u16nXEZpeGs3AH4Kg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14) by PR3PR04MB7436.eurprd04.prod.outlook.com (2603:10a6:102:87::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8813.20; Wed, 4 Jun 2025 19:10:21 +0000 Received: from PAXPR04MB9642.eurprd04.prod.outlook.com ([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com ([fe80::9126:a61e:341d:4b06%6]) with mapi id 15.20.8769.025; Wed, 4 Jun 2025 19:10:21 +0000 Date: Wed, 4 Jun 2025 15:10:13 -0400 From: Frank Li To: Jorge Marques Cc: Alexandre Belloni , Rob Herring , Krzysztof Kozlowski , Conor Dooley , linux-i3c@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 2/2] i3c: master: Add driver for Analog Devices I3C Controller IP Message-ID: References: <20250604-adi-i3c-master-v1-0-0488e80dafcb@analog.com> <20250604-adi-i3c-master-v1-2-0488e80dafcb@analog.com> Content-Disposition: inline In-Reply-To: <20250604-adi-i3c-master-v1-2-0488e80dafcb@analog.com> X-ClientProxiedBy: SJ0PR03CA0197.namprd03.prod.outlook.com (2603:10b6:a03:2ef::22) To PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|PR3PR04MB7436:EE_ X-MS-Office365-Filtering-Correlation-Id: 01266cbf-08bc-4fd5-9b29-08dda39b737d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016|52116014|38350700014|7053199007; X-Microsoft-Antispam-Message-Info: =?utf-8?B?SnZNS1hNK05ENXJpaUpOR21LNHBtSC9iWGsyVVRvbDBsNTA1b0Fvc0hxc1J1?= =?utf-8?B?OXFLMHZsY1FWN2lRMWwwUUhlTzZvZVBCb1k1QnBnNVF1c2hmTlFuWkgzSE0z?= =?utf-8?B?MXVkZ1lyZWNuWnlZWHNkbFJkMlluSEd2L3orMVdaRy9CemFUSmh0Q3dDVHA1?= =?utf-8?B?M2h3SXFmWTFvcFRySWpUY1BQZisrSldLUDFTYWdHTjFFM2huNnlxZFVudklP?= =?utf-8?B?Y3RFQ3lTMDJ3bmpER2xqOHVOcWQ0TDJpVy9TR1N5SW1mVkJvSTRFZEdCallq?= =?utf-8?B?WDliSWxUWG9yU09KN2NFK0RsT0RLbUtmcFl5NDg5RlNmd1dZQ3RHbTNxWHFH?= =?utf-8?B?VTlaK3RpZytaUDV0MUNxMlZUMDB4WE5CRmZIWmIzdThESllqWThUMHl3b01X?= =?utf-8?B?UU9MSG9jTjhqRmR2TDhlWDlKWkFDUUcvbjNxMkp1VzczZHRzZ3VJbTlxajA3?= =?utf-8?B?UnFHYWRTeHMyL0dkYmw0eEJqY2RIVnRSVzZ6OVBiR2VHRlRzNWhnQnVRY21O?= =?utf-8?B?Q25UUXVQeVRaemFUaU56MENsVUlyKzRsSUduWlZFbGI0a3k2cVowL2tKU0k1?= =?utf-8?B?emdwK25DMU5TVldpYlFiUDZvQzArMEdoRVMvQURocDgraWRxRTFrdnNzL29W?= =?utf-8?B?TStlSU1zRnVJZHFldktkcFRETE9GKzNxMkFtM0ZMSU5Ka1B4UVo0Z2cxQXpj?= =?utf-8?B?TkNKUWlkcFVuQ0FXR0ZkMWVpcXZ1VXdBSSttM1hFZTg2TXFyaUZnN3g2b0ZQ?= =?utf-8?B?Nkg1Y2tiNlM3UXJoTVJLNzMzM3o1eDV0dUlKem1ucGt3VC9CUVp2dUVGYVhY?= =?utf-8?B?WDRYRlpwRkU1Ui82SjRFQUxiR0wyYzB0MGNxNzFnUmZYYWJNZ2s4VWh3Q005?= =?utf-8?B?QWJyL3NCNlBpK0o5RVltMXAxRXFaalFhOEozWVM1bVg3blp6NWVRRWRlQ3Fi?= =?utf-8?B?NnQ5WFRHZjgrUnpoTzhHVno5RXcvUk5SMEMxNEJUa01oVmxGa1RLb1RtVjZP?= =?utf-8?B?Z3VUa1NYQ1o4UEtsalk2b3VjcksvNkVITXFBZzU5S2ovSFhUSXZ2U3h0NGxP?= =?utf-8?B?NU1tYUdpUnVDRnhVT29PTy9ONDRUeW15RDF6NjVCYUEvTGt1ZnF3MDNqRHVV?= =?utf-8?B?WmpYV2JOaS9qbTMwWDlXSCt4Y2FrK3YyQWtwcTJSbWpFalpjNkQvQ2JXaURq?= =?utf-8?B?M29saFBFQU4yc2YrcHJ0cDB6YjYycEpYR3dab0VBalJhbDVVTmlFT3pmRGVs?= =?utf-8?B?Z25xOS94d1VRMVNqTXczUFlHY1hJOUJjK1pYY0ZzQlR1aFBIVFhyZlVrejBH?= =?utf-8?B?NWY5OUk1U2p3ajZXQUNIUWRvSDM4NkdhYXNlSWU5MGM1Q2xrUXp3N0NaSENv?= =?utf-8?B?eDdjZ01EcGlkRG8vOTU4b1g0VElmQXVDYTk4SWM0RFBFVW0zNk54cnNtL1V1?= =?utf-8?B?V0g5S1U3empIbnVBcENwTXh2VDZ4QWNzeFRTMUk3bTJCUFY5cmZRdWZKOS9u?= =?utf-8?B?bHltaGRKeXZHV3JndWhNMzlVc0t3bHVlSlZZamh0MDRJS0VpZS95WUphMzJk?= =?utf-8?B?SnVuUlVBcnVGRTRGOW8zdXIyOG1BZjFCVjJEOXhoVFJhbGwxb25LdDZwVUhl?= =?utf-8?B?WHBpNjZmYzBobzMxNmhTTWthRjNoL3FBSG52cXpxQzJaZEQ4VHI0SGpLeUdE?= =?utf-8?B?Sy9sNFF6MmV2NUJGcTVha1BuNnJyQ0hzblZ5dkx4Mk5oNlQ0T1NSVHp3YjF0?= =?utf-8?B?QVpvZTd4eWd4OUVYb1Y3eUpObmg5cHNTMy9NWW5jTG1wVW5YbkIybDMrOWZS?= =?utf-8?B?SUdzemFOSHc4QnlKZnNYK1F1OTV0YkhYRUVtWjFUd3ZFN2FzVEhsaFcrK2hk?= =?utf-8?B?MkgzaytYWXVvc2syUWNkbk8wanBXMFVhcU1vVncwL1lOcFJzZHp3TmZkdkM2?= =?utf-8?B?TTVDYm4vZFc1R0lOLzBNZCtqbHMrYnpRaHhRSkRKWmVnV2UxWW5vN2h3Vldw?= =?utf-8?Q?VkcfMRRb2Rew0Z8T+e4q/PK1eaJ4OY=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB9642.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(52116014)(38350700014)(7053199007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?NzdLV0JJbkNlQmNyM01RamtNZmV5RDZoZklRMEc5THROQ0pTelFUM1l3VUdL?= =?utf-8?B?dm5GaE1oMHlwV25HN1Y2N1pScGZzT2NtQVpGbHFxUUJEeHU5UHFBY0dRSHU0?= =?utf-8?B?MmxDYTlBVUVWTFFTOGtNQmJmYnF0bHVTT2taVm1qZVo0WmVzSzJvOXRBSkQw?= =?utf-8?B?Q0VNTC9Bb1BPNndndGExejZyYzZDV3Y5VzJZRGFqQ2hxM3dPdGRNUVdpRXpY?= =?utf-8?B?dzVhQjRMNUtqWHRPWjR5c3lTY1ZGL3g0cStUUjVnWTRTS3hlUmxrUi9NQnR0?= =?utf-8?B?QmVDR3c5Vk14bGNsUkFHbWFUSjFrM0tJN0dOVTBaTjgwaEJuM0ZIOStNaDJa?= =?utf-8?B?V0Y2dzVhdXpOK000Y2hZTytTNTRGTWFXSlE2Yld2ZVNrWkJMRURLT2FkcVY3?= =?utf-8?B?cFl0YTFHU3J0ZldvZHN6Y1l6dmdLYVBKaXJhSWdla21rdHRhRmREMHJqUUFB?= =?utf-8?B?Y0lCOVI3UUJES0hLbkMzdWcwZnpDb25Sd3haOUdpV3NYS3FYL2EzVldjSGRn?= =?utf-8?B?dnk3d2hPSXpEQWJCNkJiRWlaYXQ4MEoyTUc2dWtIU1NvMzd5QTR6bUVIb05W?= =?utf-8?B?UHR2cnZ0blNTcEdINjBybGZ2TWhVeElPZU5BVjQ4dWU0eXI2QnVXNUE1RE9h?= =?utf-8?B?OXR4L1JwSzNmL2gwYmtOMjgzZWtCYmQ2Nlo2czd4OS91NGNjbGdXa2pXa2Zu?= =?utf-8?B?YVVPMzc5eGlFYkVWY054SWR3a0YybHgyYTlieUJwUnpXaGtHUHRlekZDcW5W?= =?utf-8?B?bERKSVJxSWx4Z3QrbFg0YWI4Sy9YTWxIY2dTanVoc215OTBzNGx0WDBxWDZ3?= =?utf-8?B?dmloNlJTRTI5S2pWL2hhUlkzN2pLOVZtRmxBYXhqYnRWUm5rZzQ3WDNIaVR6?= =?utf-8?B?YnZpQXVmbDhPZ0JwOHFQdVV1Zmk5QUhudHQ2UHAxdVJrWW5XWlFPZmJOUWU1?= =?utf-8?B?WTlHeU9HN2pJUlpkNm5XVzFEa0g5dDc3bkRJSXUzMHFNbFc1UFBsTG1aYTd6?= =?utf-8?B?ZVpmRytrTjR1ckJDWUFvTUFIUUZweUZYWlFWTU93L3ZIOFFYNnJpQlZmQk0r?= =?utf-8?B?L1I1VWtyVXFEQkM2Uk96Vk5SZG1GQXRnUS9qeWE5a09kUXFEYTlSZFVaUWxI?= =?utf-8?B?SmVBU1FBNWFBeWt3TVpJYkUrT2dwRkZvRHJSNmIwNlE0VlFvNW5GUm9tL1hN?= =?utf-8?B?SCtnNThFMkFoVHFrL0NOeG84SXdtNmRCTEZrNWVxOUdtZEhaeDlGY1VYeTlU?= =?utf-8?B?NGRyZWdSLys3NS8vQVBKN1VCWmtFWUtJZGZSSlRQcU1Ob0ZMQWNUTFBxOEdn?= =?utf-8?B?bERqc25Zc2VNbktEUDR3Y3FEa2EyVkY1aVEwWm5TWkNsc2ZyTVdPVDl3cERQ?= =?utf-8?B?NVJpbWZmVjQyYXFteHh3bGQ1STNlUXRtYzIvU2pKYXZKZVFIUHRSc2lIekdZ?= =?utf-8?B?aWw5L3NHMWU5MFFka1A0SHp0azRQdnphVUlOelhkVVZWMlg0UmZqalptRzhJ?= =?utf-8?B?VFRYV2pFUVNwTCtzYjhBV2lMcm56YWNrWHM5OGxGRWxvV1kyR3VIR3Zab0Ux?= =?utf-8?B?cm9rWjhYdGh1OEl5R01waWtkQS9BQTE0cy9FR24yZWgrN1dIaHVrZExoRlV2?= =?utf-8?B?VENVS3Y1S1NYMzFtelY5cGJacHE2MEhyZk9xOFdPYTdwWjgrTS9HK09IaWpl?= =?utf-8?B?bHM4bnVlMHBXbVdiQTRmM1U0NWJZbEhNWlgrbk0yUXg4NkdKUXlGaktGYjFC?= =?utf-8?B?Sm1UY0JaeHlCUzgrdGVmczN6VGFGSi9LQVdsaUtUVU93T3I5RGxqK2t2ekgv?= =?utf-8?B?ekNIaStwK0tvVzcwVDZmYjBnN2MwRE1OUTlITzFEQTZDNmVlWHlBVlVXRmNL?= =?utf-8?B?UzFJUlJwdTAxd3pmTml2NkFxUGpSamRpciswekZzbFNVSFJJQmx4OTRITmND?= =?utf-8?B?dDlMRWExcVFLVnVNeS93dWhFZDdXVlZiNTR2VVRCdW9MdWNHRWhUc0duZndI?= =?utf-8?B?NUtRakh6SFB3L09yNHJTci80Qi9yNHpyT001eXVQMHBybEsrTVg1Z2F0aDNT?= =?utf-8?B?cEJxYWpyelRGNTVoMEhGenBoMmluaUdvWC9RUkpkV1VpSERwUDVydXc2dk1Z?= =?utf-8?Q?ufCz1uqVQtdDWX7K8owMHRaO3?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 01266cbf-08bc-4fd5-9b29-08dda39b737d X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jun 2025 19:10:21.3599 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: V+4tfyMwglm/tnizFxvGNCebW8tmlp8f/OAjpUZ4IwfkR6AIBkTigbpKpNGeGI2sSG2/NCewBB12Q8PRrwCgKQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR04MB7436 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250604_121029_607584_0AA405F8 X-CRM114-Status: GOOD ( 23.54 ) X-BeenThere: linux-i3c@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-i3c" Errors-To: linux-i3c-bounces+linux-i3c=archiver.kernel.org@lists.infradead.org T24gV2VkLCBKdW4gMDQsIDIwMjUgYXQgMDU6NDg6NThQTSArMDIwMCwgSm9yZ2UgTWFycXVlcyB3 cm90ZToKPiBBZGQgc3VwcG9ydCBmb3IgQW5hbG9nIERldmljZXMgSTNDIENvbnRyb2xsZXIgSVAs IGFuIEFYSS1pbnRlcmZhY2VkIElQCj4gY29yZSB0aGF0IHN1cHBvcnRzIEkzQyBhbmQgSTJDIGRl dmljZXMsIG11bHRpcGxlIHNwZWVkLWdyYWRlcyBhbmQKPiBJM0MgSUJJcy4KPgo+IFNpZ25lZC1v ZmYtYnk6IEpvcmdlIE1hcnF1ZXMgPGpvcmdlLm1hcnF1ZXNAYW5hbG9nLmNvbT4KPiAtLS0KPiAg TUFJTlRBSU5FUlMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAxICsKPiAgZHJpdmVycy9p M2MvbWFzdGVyL0tjb25maWcgICAgICAgICAgfCAgIDExICsKPiAgZHJpdmVycy9pM2MvbWFzdGVy L01ha2VmaWxlICAgICAgICAgfCAgICAxICsKPiAgZHJpdmVycy9pM2MvbWFzdGVyL2FkaS1pM2Mt bWFzdGVyLmMgfCAxMDYzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIDQg ZmlsZXMgY2hhbmdlZCwgMTA3NiBpbnNlcnRpb25zKCspCj4KPiBkaWZmIC0tZ2l0IGEvTUFJTlRB SU5FUlMgYi9NQUlOVEFJTkVSUwo+IGluZGV4IDZmNTZlMTdkY2VjZjkwMmM2ODEyODI3YzFlYzNl MDY3YzY1ZTk4OTQuLjllYjViNmMzMjc1OTA3MjVkMTY0MWZkNGI3M2U0OGZjMWQxYTM5NTQgMTAw NjQ0Cj4gLS0tIGEvTUFJTlRBSU5FUlMKPiArKysgYi9NQUlOVEFJTkVSUwo+IEBAIC0xMTI0Nyw2 ICsxMTI0Nyw3IEBAIEkzQyBEUklWRVIgRk9SIEFOQUxPRyBERVZJQ0VTIEkzQyBDT05UUk9MTEVS IElQCj4gIE06CUpvcmdlIE1hcnF1ZXMgPGpvcmdlLm1hcnF1ZXNAYW5hbG9nLmNvbT4KPiAgUzoJ TWFpbnRhaW5lZAo+ICBGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaTNjL2Fk aSxpM2MtbWFzdGVyLnlhbWwKPiArRjoJZHJpdmVycy9pM2MvbWFzdGVyL2FkaS1pM2MtbWFzdGVy LmMKPgo+ICBJM0MgRFJJVkVSIEZPUiBDQURFTkNFIEkzQyBNQVNURVIgSVAKPiAgTToJUHJ6ZW15 c8WCYXcgR2FqIDxwZ2FqQGNhZGVuY2UuY29tPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2kzYy9t YXN0ZXIvS2NvbmZpZyBiL2RyaXZlcnMvaTNjL21hc3Rlci9LY29uZmlnCj4gaW5kZXggN2IzMGRi MzI1M2FmOWQ1YzZhZWU2NTQ0YzA2MGU0OTFiZmJlYjY0My4uMzI4YjcxNDVjZGVmYTIwZTcwOGVi ZmEzMzgzZTg0OWNlNTFjNWE3MSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2kzYy9tYXN0ZXIvS2Nv bmZpZwo+ICsrKyBiL2RyaXZlcnMvaTNjL21hc3Rlci9LY29uZmlnCj4gQEAgLTEsNCArMSwxNSBA QAo+ICAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKPiArY29uZmlnIEFE SV9JM0NfTUFTVEVSCj4gKwl0cmlzdGF0ZSAiQW5hbG9nIERldmljZXMgSTNDIG1hc3RlciBkcml2 ZXIiCj4gKwlkZXBlbmRzIG9uIEhBU19JT01FTQo+ICsJaGVscAo+ICsJICBTdXBwb3J0IGZvciBB bmFsb2cgRGV2aWNlcyBJM0MgQ29udHJvbGxlciBJUCwgYW4gQVhJLWludGVyZmFjZWQgSVAKPiAr CSAgY29yZSB0aGF0IHN1cHBvcnRzIEkzQyBhbmQgSTJDIGRldmljZXMsIG11bHRpcGxlIHNwZWVk LWdyYWRlcyBhbmQKPiArCSAgSTNDIElCSXMuCj4gKwo+ICsJICBUaGlzIGRyaXZlciBjYW4gYWxz byBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCj4gKwkgIHdpbGwgYmUg Y2FsbGVkIGFkaS1pM2MtbWFzdGVyLgo+ICsKPiAgY29uZmlnIENETlNfSTNDX01BU1RFUgo+ICAJ dHJpc3RhdGUgIkNhZGVuY2UgSTNDIG1hc3RlciBkcml2ZXIiCj4gIAlkZXBlbmRzIG9uIEhBU19J T01FTQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2kzYy9tYXN0ZXIvTWFrZWZpbGUgYi9kcml2ZXJz L2kzYy9tYXN0ZXIvTWFrZWZpbGUKPiBpbmRleCAzZTk3OTYwMTYwYmM4NWU1ZWFmMjk2NmVjMGMz ZmFlNDU4YzI3MTFlLi42Y2M0ZjRiNzNlN2JkYzIwNmI2OGM3NTAzOTBmOWMzY2MyY2NiMTk5IDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvaTNjL21hc3Rlci9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMv aTNjL21hc3Rlci9NYWtlZmlsZQo+IEBAIC0xLDQgKzEsNSBAQAo+ICAjIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKPiArb2JqLSQoQ09ORklHX0FESV9JM0NfTUFTVEVSKQkJ Kz0gYWRpLWkzYy1tYXN0ZXIubwo+ICBvYmotJChDT05GSUdfQ0ROU19JM0NfTUFTVEVSKQkJKz0g aTNjLW1hc3Rlci1jZG5zLm8KPiAgb2JqLSQoQ09ORklHX0RXX0kzQ19NQVNURVIpCQkrPSBkdy1p M2MtbWFzdGVyLm8KPiAgb2JqLSQoQ09ORklHX0FTVDI2MDBfSTNDX01BU1RFUikJKz0gYXN0MjYw MC1pM2MtbWFzdGVyLm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9pM2MvbWFzdGVyL2FkaS1pM2Mt bWFzdGVyLmMgYi9kcml2ZXJzL2kzYy9tYXN0ZXIvYWRpLWkzYy1tYXN0ZXIuYwo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMC4uNmY0NGIwYjZmYzIwMjBiYjAxMzFlOGUyOTQzODA2YzBhOWQ5Y2U3Ygo+IC0tLSAvZGV2 L251bGwKPiArKysgYi9kcml2ZXJzL2kzYy9tYXN0ZXIvYWRpLWkzYy1tYXN0ZXIuYwo+IEBAIC0w LDAgKzEsMTA2MyBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5 Cj4gKy8qCj4gKyAqIEkzQyBDb250cm9sbGVyIGRyaXZlcgo+ICsgKiBDb3B5cmlnaHQgMjAyNCBB bmFsb2cgRGV2aWNlcyBJbmMuCgoyMDI1PwoKPiArICogQXV0aG9yOiBKb3JnZSBNYXJxdWVzIDxq b3JnZS5tYXJxdWVzQGFuYWxvZy5jb20+Cj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2Jp dG9wcy5oPgo+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9lcnIu aD4KPiArI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pM2MvbWFz dGVyLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KPiArI2luY2x1ZGUgPGxpbnV4 L2lvLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L29m Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPiArCj4gKyNkZWZpbmUg VkVSU0lPTl9NQUpPUih4KQkJKCgoeCkgPj4gMTYpICYgMHhmZikKPiArI2RlZmluZSBWRVJTSU9O X01JTk9SKHgpCQkoKCh4KSA+PiA4KSAmIDB4ZmYpCj4gKyNkZWZpbmUgVkVSU0lPTl9QQVRDSCh4 KQkJKCh4KSAmIDB4ZmYpCgpDYW4geW91IHVzZSBHRU5fTUFTSyBhbmQgRklFTERfR0VUIG1hY3Jv IGZvciBpdD8KCj4gKwo+ICsjZGVmaW5lIE1BWF9ERVZTCQkJMTYKPiArCj4gKyNkZWZpbmUgUkVH X1ZFUlNJT04JCQkweDAwMAo+ICsjZGVmaW5lIFJFR19FTkFCTEUJCQkweDA0MAo+ICsjZGVmaW5l IFJFR19JUlFfTUFTSwkJCTB4MDgwCj4gKyNkZWZpbmUgUkVHX0lSUV9QRU5ESU5HCQkJMHgwODQK PiArI2RlZmluZSBSRUdfQ01EX0ZJRk8JCQkweDBkNAo+ICsjZGVmaW5lIFJFR19DTURSX0ZJRk8J CQkweDBkOAo+ICsjZGVmaW5lIFJFR19TRE9fRklGTwkJCTB4MGRjCj4gKyNkZWZpbmUgUkVHX1NE SV9GSUZPCQkJMHgwZTAKPiArI2RlZmluZSBSRUdfSUJJX0ZJRk8JCQkweDBlNAo+ICsjZGVmaW5l IFJFR19GSUZPX1NUQVRVUwkJCTB4MGU4Cj4gKyNkZWZpbmUgUkVHX09QUwkJCQkweDEwMAo+ICsj ZGVmaW5lIFJFR19JQklfQ09ORklHCQkJMHgxNDAKPiArI2RlZmluZSBSRUdfREVWX0NIQVIJCQkw eDE4MAo+ICsKPiArI2RlZmluZSBDTUQwX0ZJRk9fSVNfQ0NDCQlCSVQoMjIpCj4gKyNkZWZpbmUg Q01EMF9GSUZPX0JDQVNUCQkJQklUKDIxKQo+ICsjZGVmaW5lIENNRDBfRklGT19TUgkJCUJJVCgy MCkKPiArI2RlZmluZSBDTUQwX0ZJRk9fTEVOKGwpCQkoKGwpIDw8IDgpCj4gKyNkZWZpbmUgQ01E MF9GSUZPX0xFTl9NQVgJCTQwOTUKPiArI2RlZmluZSBDTUQwX0ZJRk9fREVWX0FERFIoYSkJCSgo YSkgPDwgMSkKPiArI2RlZmluZSBDTUQwX0ZJRk9fUk5XCQkJQklUKDApCj4gKwo+ICsjZGVmaW5l IENNRDFfRklGT19DQ0MoaWQpCQkoKGlkKSAmIEdFTk1BU0soNywgMCkpCj4gKwo+ICsjZGVmaW5l IENNRFJfTk9fRVJST1IJCQkwCj4gKyNkZWZpbmUgQ01EUl9DRTBfRVJST1IJCQkxCj4gKyNkZWZp bmUgQ01EUl9DRTJfRVJST1IJCQk0Cj4gKyNkZWZpbmUgQ01EUl9OQUNLX1JFU1AJCQk2Cj4gKyNk ZWZpbmUgQ01EUl9VREFfRVJST1IJCQk4Cj4gKyNkZWZpbmUgQ01EUl9FUlJPUih4KQkJCSgoKHgp ICYgR0VOTUFTSygyMywgMjApKSA+PiAyMCkKPiArI2RlZmluZSBDTURSX1hGRVJfQllURVMoeCkJ CSgoKHgpICYgR0VOTUFTSygxOSwgOCkpID4+IDgpCgp1c2UgR0VUX0ZJRUxECgo+ICsKPiArI2Rl ZmluZSBGSUZPX1NUQVRVU19DTURSX0VNUFRZCQlCSVQoMCkKPiArI2RlZmluZSBGSUZPX1NUQVRV U19JQklfRU1QVFkJCUJJVCgxKQo+ICsjZGVmaW5lIElSUV9QRU5ESU5HX0NNRFJfUEVORElORwlC SVQoNSkKPiArI2RlZmluZSBJUlFfUEVORElOR19JQklfUEVORElORwkJQklUKDYpCj4gKyNkZWZp bmUgSVJRX1BFTkRJTkdfREFBX1BFTkRJTkcJCUJJVCg3KQo+ICsKPiArI2RlZmluZSBERVZfQ0hB Ul9JU19JMkMJCQlCSVQoMCkKPiArI2RlZmluZSBERVZfQ0hBUl9JU19BVFRBQ0hFRAkJQklUKDEp Cj4gKyNkZWZpbmUgREVWX0NIQVJfQkNSX0lCSSh4KQkJKCgoeCkgJiBHRU5NQVNLKDIsIDEpKSA8 PCAxKQo+ICsjZGVmaW5lIERFVl9DSEFSX1dFTgkJCUJJVCg4KQo+ICsjZGVmaW5lIERFVl9DSEFS X0FERFIoeCkJCSgoKHgpICYgR0VOTUFTSyg2LCAwKSkgPDwgOSkKClRoZSBzYW1lIGhlcmUuCgo+ ICsKPiArI2RlZmluZSBSRUdfT1BTX1NFVF9TRyh4KQkJKCh4KSA8PCA1KQo+ICsjZGVmaW5lIFJF R19PUFNfUFBfU0dfTUFTSwkJR0VOTUFTSyg2LCA1KQo+ICsKPiArI2RlZmluZSBSRUdfSUJJX0NP TkZJR19MSVNURU4JCUJJVCgxKQo+ICsjZGVmaW5lIFJFR19JQklfQ09ORklHX0VOQUJMRQkJQklU KDApCj4gKwo+ICtlbnVtIHNwZWVkX2dyYWRlIHtQUF9TR19VTlNFVCwgUFBfU0dfMU1IWiwgUFBf U0dfM01IWiwgUFBfU0dfNk1IWiwgUFBfU0dfMTJNSFp9Owo+ICtzdHJ1Y3QgYWRpX2kzY19jbWQg ewo+ICsJdTMyIGNtZDA7Cj4gKwl1MzIgY21kMTsKPiArCXUzMiB0eF9sZW47Cj4gKwljb25zdCB2 b2lkICp0eF9idWY7Cj4gKwl1MzIgcnhfbGVuOwo+ICsJdm9pZCAqcnhfYnVmOwo+ICsJdTMyIGVy cm9yOwo+ICt9Owo+ICsKPiArc3RydWN0IGFkaV9pM2NfeGZlciB7Cj4gKwlzdHJ1Y3QgbGlzdF9o ZWFkIG5vZGU7Cj4gKwlzdHJ1Y3QgY29tcGxldGlvbiBjb21wOwo+ICsJaW50IHJldDsKPiArCXVu c2lnbmVkIGludCBuY21kczsKPiArCXVuc2lnbmVkIGludCBuY21kc19jb21wOwo+ICsJc3RydWN0 IGFkaV9pM2NfY21kIGNtZHNbXTsKPiArfTsKPiArCj4gK3N0cnVjdCBhZGlfaTNjX21hc3RlciB7 Cj4gKwlzdHJ1Y3QgaTNjX21hc3Rlcl9jb250cm9sbGVyIGJhc2U7Cj4gKwl1MzIgZnJlZV9ycl9z bG90czsKPiArCXVuc2lnbmVkIGludCBtYXhkZXZzOwo+ICsJc3RydWN0IHsKPiArCQl1bnNpZ25l ZCBpbnQgbnVtX3Nsb3RzOwo+ICsJCXN0cnVjdCBpM2NfZGV2X2Rlc2MgKipzbG90czsKPiArCQlz cGlubG9ja190IGxvY2s7IC8qIFByb3RlY3QgSUJJIHNsb3QgYWNjZXNzICovCj4gKwl9IGliaTsK PiArCXN0cnVjdCB7Cj4gKwkJc3RydWN0IGxpc3RfaGVhZCBsaXN0Owo+ICsJCXN0cnVjdCBhZGlf aTNjX3hmZXIgKmN1cjsKPiArCQlzcGlubG9ja190IGxvY2s7IC8qIFByb3RlY3QgdHJhbnNmZXIg Ki8KPiArCX0geGZlcnF1ZXVlOwo+ICsJdm9pZCBfX2lvbWVtICpyZWdzOwo+ICsJc3RydWN0IGNs ayAqY2xrOwo+ICsJdW5zaWduZWQgbG9uZyBpM2Nfc2NsX2xpbTsKPiArCXN0cnVjdCB7Cj4gKwkJ dTggYWRkcnNbTUFYX0RFVlNdOwo+ICsJCXU4IGluZGV4Owo+ICsJfSBkYWE7Cj4gK307Cj4gKwo+ ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBhZGlfaTNjX21hc3RlciAqdG9fYWRpX2kzY19tYXN0ZXIo c3RydWN0IGkzY19tYXN0ZXJfY29udHJvbGxlciAqbWFzdGVyKQo+ICt7Cj4gKwlyZXR1cm4gY29u dGFpbmVyX29mKG1hc3Rlciwgc3RydWN0IGFkaV9pM2NfbWFzdGVyLCBiYXNlKTsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgYWRpX2kzY19tYXN0ZXJfd3JfdG9fdHhfZmlmbyhzdHJ1Y3QgYWRpX2kz Y19tYXN0ZXIgKm1hc3RlciwKPiArCQkJCQkgY29uc3QgdTggKmJ5dGVzLCBpbnQgbmJ5dGVzKQo+ ICt7Cj4gKwl3cml0ZXNsKG1hc3Rlci0+cmVncyArIFJFR19TRE9fRklGTywgYnl0ZXMsIG5ieXRl cyAvIDQpOwo+ICsJaWYgKG5ieXRlcyAmIDMpIHsKPiArCQl1MzIgdG1wID0gMDsKPiArCj4gKwkJ bWVtY3B5KCZ0bXAsIGJ5dGVzICsgKG5ieXRlcyAmIH4zKSwgbmJ5dGVzICYgMyk7CgpBTElHTl9E T1dOKGJ5dGVzLCA0KT8KCkRvIHlvdSBuZWVkIGNvbnNpZGUgYmlnL2xpdHRsZSBlbmRpYW4gdG8g dHJpbSBkb3duIGRhdGE/Cgo+ICsJCXdyaXRlc2wobWFzdGVyLT5yZWdzICsgUkVHX1NET19GSUZP LCAmdG1wLCAxKTsKCndyaXRlbCgpIGlzIGVub3VnaAoKPiArCX0KPiArfQo+ICsKPiArc3RhdGlj IHZvaWQgYWRpX2kzY19tYXN0ZXJfcmRfZnJvbV9yeF9maWZvKHN0cnVjdCBhZGlfaTNjX21hc3Rl ciAqbWFzdGVyLAo+ICsJCQkJCSAgIHU4ICpieXRlcywgaW50IG5ieXRlcykKPiArewo+ICsJcmVh ZHNsKG1hc3Rlci0+cmVncyArIFJFR19TRElfRklGTywgYnl0ZXMsIG5ieXRlcyAvIDQpOwo+ICsJ aWYgKG5ieXRlcyAmIDMpIHsKPiArCQl1MzIgdG1wOwo+ICsKPiArCQlyZWFkc2wobWFzdGVyLT5y ZWdzICsgUkVHX1NESV9GSUZPLCAmdG1wLCAxKTsKCnJlYWRsKCkKCj4gKwkJbWVtY3B5KGJ5dGVz ICsgKG5ieXRlcyAmIH4zKSwgJnRtcCwgbmJ5dGVzICYgMyk7Cj4gKwl9Cj4gK30KPiArCj4gK3N0 YXRpYyBib29sIGFkaV9pM2NfbWFzdGVyX3N1cHBvcnRzX2NjY19jbWQoc3RydWN0IGkzY19tYXN0 ZXJfY29udHJvbGxlciAqbSwKPiArCQkJCQkgICAgY29uc3Qgc3RydWN0IGkzY19jY2NfY21kICpj bWQpCj4gK3sKPiArCWlmIChjbWQtPm5kZXN0cyA+IDEpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsK PiArCXN3aXRjaCAoY21kLT5pZCkgewo+ICsJY2FzZSBJM0NfQ0NDX0VORUModHJ1ZSk6Cj4gKwlj YXNlIEkzQ19DQ0NfRU5FQyhmYWxzZSk6Cj4gKwljYXNlIEkzQ19DQ0NfRElTRUModHJ1ZSk6Cj4g KwljYXNlIEkzQ19DQ0NfRElTRUMoZmFsc2UpOgo+ICsJY2FzZSBJM0NfQ0NDX1JTVERBQSh0cnVl KToKPiArCWNhc2UgSTNDX0NDQ19SU1REQUEoZmFsc2UpOgo+ICsJY2FzZSBJM0NfQ0NDX0VOVERB QToKPiArCWNhc2UgSTNDX0NDQ19TRVREQVNBOgo+ICsJY2FzZSBJM0NfQ0NDX1NFVE5FV0RBOgo+ ICsJY2FzZSBJM0NfQ0NDX0dFVE1XTDoKPiArCWNhc2UgSTNDX0NDQ19HRVRNUkw6Cj4gKwljYXNl IEkzQ19DQ0NfR0VUUElEOgo+ICsJY2FzZSBJM0NfQ0NDX0dFVEJDUjoKPiArCWNhc2UgSTNDX0ND Q19HRVREQ1I6Cj4gKwljYXNlIEkzQ19DQ0NfR0VUU1RBVFVTOgo+ICsJY2FzZSBJM0NfQ0NDX0dF VEhEUkNBUDoKPiArCQlyZXR1cm4gdHJ1ZTsKPiArCWRlZmF1bHQ6Cj4gKwkJYnJlYWs7Cj4gKwl9 Cj4gKwo+ICsJcmV0dXJuIGZhbHNlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGFkaV9pM2NfbWFz dGVyX2Rpc2FibGUoc3RydWN0IGFkaV9pM2NfbWFzdGVyICptYXN0ZXIpCj4gK3sKPiArCXdyaXRl bCh+UkVHX0lCSV9DT05GSUdfTElTVEVOIHwgflJFR19JQklfQ09ORklHX0VOQUJMRSwKPiArCSAg ICAgICBtYXN0ZXItPnJlZ3MgKyBSRUdfSUJJX0NPTkZJRyk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4g K30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgYWRpX2kzY194ZmVyICphZGlfaTNjX21hc3Rlcl9hbGxv Y194ZmVyKHN0cnVjdCBhZGlfaTNjX21hc3RlciAqbWFzdGVyLAo+ICsJCQkJCQkgICAgICB1bnNp Z25lZCBpbnQgbmNtZHMpCj4gK3sKPiArCXN0cnVjdCBhZGlfaTNjX3hmZXIgKnhmZXI7Cj4gKwo+ ICsJeGZlciA9IGt6YWxsb2Moc3RydWN0X3NpemUoeGZlciwgY21kcywgbmNtZHMpLCBHRlBfS0VS TkVMKTsKPiArCWlmICgheGZlcikKPiArCQlyZXR1cm4gTlVMTDsKPiArCj4gKwlJTklUX0xJU1Rf SEVBRCgmeGZlci0+bm9kZSk7Cj4gKwl4ZmVyLT5uY21kcyA9IG5jbWRzOwo+ICsJeGZlci0+cmV0 ID0gLUVUSU1FRE9VVDsKPiArCj4gKwlyZXR1cm4geGZlcjsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgYWRpX2kzY19tYXN0ZXJfc3RhcnRfeGZlcl9sb2NrZWQoc3RydWN0IGFkaV9pM2NfbWFzdGVy ICptYXN0ZXIpCj4gK3sKPiArCXN0cnVjdCBhZGlfaTNjX3hmZXIgKnhmZXIgPSBtYXN0ZXItPnhm ZXJxdWV1ZS5jdXI7Cj4gKwl1bnNpZ25lZCBpbnQgaTsKPiArCj4gKwlpZiAoIXhmZXIpCj4gKwkJ cmV0dXJuOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCB4ZmVyLT5uY21kczsgaSsrKSB7Cj4gKwkJ c3RydWN0IGFkaV9pM2NfY21kICpjbWQgPSAmeGZlci0+Y21kc1tpXTsKPiArCj4gKwkJYWRpX2kz Y19tYXN0ZXJfd3JfdG9fdHhfZmlmbyhtYXN0ZXIsIGNtZC0+dHhfYnVmLCBjbWQtPnR4X2xlbik7 Cgp3aGF0J3MgaGFwcGVuIGlmIGRhdGEgbGVuZ3RoIGJpZ2dlciB0aGFuIGZpZm8gc2l6ZT8KCj4g Kwl9Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IHhmZXItPm5jbWRzOyBpKyspIHsKPiArCQlzdHJ1 Y3QgYWRpX2kzY19jbWQgKmNtZCA9ICZ4ZmVyLT5jbWRzW2ldOwo+ICsKPiArCQl3cml0ZWwoY21k LT5jbWQwLCBtYXN0ZXItPnJlZ3MgKyBSRUdfQ01EX0ZJRk8pOwo+ICsJCWlmIChjbWQtPmNtZDAg JiBDTUQwX0ZJRk9fSVNfQ0NDKQo+ICsJCQl3cml0ZWwoY21kLT5jbWQxLCBtYXN0ZXItPnJlZ3Mg KyBSRUdfQ01EX0ZJRk8pOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBhZGlfaTNjX21h c3Rlcl9lbmRfeGZlcl9sb2NrZWQoc3RydWN0IGFkaV9pM2NfbWFzdGVyICptYXN0ZXIsCj4gKwkJ CQkJICAgdTMyIHBlbmRpbmcpCj4gK3sKPiArCXN0cnVjdCBhZGlfaTNjX3hmZXIgKnhmZXIgPSBt YXN0ZXItPnhmZXJxdWV1ZS5jdXI7Cj4gKwlpbnQgaSwgcmV0ID0gMDsKPiArCXUzMiBzdGF0dXMw Owo+ICsKPiArCWlmICgheGZlcikKPiArCQlyZXR1cm47Cj4gKwo+ICsJZm9yIChzdGF0dXMwID0g cmVhZGwobWFzdGVyLT5yZWdzICsgUkVHX0ZJRk9fU1RBVFVTKTsKPiArCSAgICAgIShzdGF0dXMw ICYgRklGT19TVEFUVVNfQ01EUl9FTVBUWSk7Cj4gKwkgICAgIHN0YXR1czAgPSByZWFkbChtYXN0 ZXItPnJlZ3MgKyBSRUdfRklGT19TVEFUVVMpKSB7Cj4gKwkJc3RydWN0IGFkaV9pM2NfY21kICpj bWQ7Cj4gKwkJdTMyIGNtZHIsIHJ4X2xlbjsKPiArCj4gKwkJY21kciA9IHJlYWRsKG1hc3Rlci0+ cmVncyArIFJFR19DTURSX0ZJRk8pOwo+ICsKPiArCQljbWQgPSAmeGZlci0+Y21kc1t4ZmVyLT5u Y21kc19jb21wKytdOwo+ICsJCXJ4X2xlbiA9IG1pbl90KHUzMiwgQ01EUl9YRkVSX0JZVEVTKGNt ZHIpLCBjbWQtPnJ4X2xlbik7Cj4gKwkJYWRpX2kzY19tYXN0ZXJfcmRfZnJvbV9yeF9maWZvKG1h c3RlciwgY21kLT5yeF9idWYsIHJ4X2xlbik7Cj4gKwkJY21kLT5lcnJvciA9IENNRFJfRVJST1Io Y21kcik7Cgp3aGF0IGhhcHBlbiBpZiBjbWRzWzBdIGlzIHdyaXRlLCBjbWRzWzFdIGlzIHJlYWQu Cgo+ICsJfQo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCB4ZmVyLT5uY21kczsgaSsrKSB7Cj4gKwkJ c3dpdGNoICh4ZmVyLT5jbWRzW2ldLmVycm9yKSB7Cj4gKwkJY2FzZSBDTURSX05PX0VSUk9SOgo+ ICsJCQlicmVhazsKPiArCj4gKwkJY2FzZSBDTURSX0NFMF9FUlJPUjoKPiArCQljYXNlIENNRFJf Q0UyX0VSUk9SOgo+ICsJCWNhc2UgQ01EUl9OQUNLX1JFU1A6Cj4gKwkJY2FzZSBDTURSX1VEQV9F UlJPUjoKPiArCQkJcmV0ID0gLUVJTzsKPiArCQkJYnJlYWs7Cj4gKwo+ICsJCWRlZmF1bHQ6Cj4g KwkJCXJldCA9IC1FSU5WQUw7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCX0KPiArCj4gKwl4ZmVy LT5yZXQgPSByZXQ7Cj4gKwo+ICsJaWYgKHhmZXItPm5jbWRzX2NvbXAgIT0geGZlci0+bmNtZHMp Cj4gKwkJcmV0dXJuOwo+ICsKPiArCWNvbXBsZXRlKCZ4ZmVyLT5jb21wKTsKPiArCj4gKwl4ZmVy ID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKCZtYXN0ZXItPnhmZXJxdWV1ZS5saXN0LAo+ICsJ CQkJCXN0cnVjdCBhZGlfaTNjX3hmZXIsIG5vZGUpOwo+ICsJaWYgKHhmZXIpCj4gKwkJbGlzdF9k ZWxfaW5pdCgmeGZlci0+bm9kZSk7Cj4gKwo+ICsJbWFzdGVyLT54ZmVycXVldWUuY3VyID0geGZl cjsKPiArCWFkaV9pM2NfbWFzdGVyX3N0YXJ0X3hmZXJfbG9ja2VkKG1hc3Rlcik7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIGFkaV9pM2NfbWFzdGVyX3F1ZXVlX3hmZXIoc3RydWN0IGFkaV9pM2Nf bWFzdGVyICptYXN0ZXIsCj4gKwkJCQkgICAgICBzdHJ1Y3QgYWRpX2kzY194ZmVyICp4ZmVyKQo+ ICt7Cj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsKPiArCWluaXRfY29tcGxldGlvbigmeGZl ci0+Y29tcCk7Cj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWFzdGVyLT54ZmVycXVldWUubG9jaywg ZmxhZ3MpOwoKc3VnZ2VzdCB1c2UgZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSkKCj4gKwlpZiAobWFz dGVyLT54ZmVycXVldWUuY3VyKSB7Cj4gKwkJbGlzdF9hZGRfdGFpbCgmeGZlci0+bm9kZSwgJm1h c3Rlci0+eGZlcnF1ZXVlLmxpc3QpOwo+ICsJfSBlbHNlIHsKPiArCQltYXN0ZXItPnhmZXJxdWV1 ZS5jdXIgPSB4ZmVyOwo+ICsJCWFkaV9pM2NfbWFzdGVyX3N0YXJ0X3hmZXJfbG9ja2VkKG1hc3Rl cik7Cj4gKwl9Cj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYXN0ZXItPnhmZXJxdWV1ZS5s b2NrLCBmbGFncyk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGFkaV9pM2NfbWFzdGVyX3VucXVl dWVfeGZlcihzdHJ1Y3QgYWRpX2kzY19tYXN0ZXIgKm1hc3RlciwKPiArCQkJCQlzdHJ1Y3QgYWRp X2kzY194ZmVyICp4ZmVyKQo+ICt7Cj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsKPiArCXNw aW5fbG9ja19pcnFzYXZlKCZtYXN0ZXItPnhmZXJxdWV1ZS5sb2NrLCBmbGFncyk7Cj4gKwlpZiAo bWFzdGVyLT54ZmVycXVldWUuY3VyID09IHhmZXIpCj4gKwkJbWFzdGVyLT54ZmVycXVldWUuY3Vy ID0gTlVMTDsKPiArCWVsc2UKPiArCQlsaXN0X2RlbF9pbml0KCZ4ZmVyLT5ub2RlKTsKPiArCj4g Kwl3cml0ZWwoMHgwMSwgbWFzdGVyLT5yZWdzICsgUkVHX0VOQUJMRSk7Cj4gKwl3cml0ZWwoMHgw MCwgbWFzdGVyLT5yZWdzICsgUkVHX0VOQUJMRSk7Cj4gKwl3cml0ZWwoSVJRX1BFTkRJTkdfQ01E Ul9QRU5ESU5HLCBtYXN0ZXItPnJlZ3MgKyBSRUdfSVJRX01BU0spOwo+ICsKPiArCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJm1hc3Rlci0+eGZlcnF1ZXVlLmxvY2ssIGZsYWdzKTsKPiArfQo+ICsK PiArc3RhdGljIGVudW0gaTNjX2Vycm9yX2NvZGUgYWRpX2kzY19jbWRfZ2V0X2VycihzdHJ1Y3Qg YWRpX2kzY19jbWQgKmNtZCkKPiArewo+ICsJc3dpdGNoIChjbWQtPmVycm9yKSB7Cj4gKwljYXNl IENNRFJfQ0UwX0VSUk9SOgo+ICsJCXJldHVybiBJM0NfRVJST1JfTTA7Cj4gKwo+ICsJY2FzZSBD TURSX0NFMl9FUlJPUjoKPiArCWNhc2UgQ01EUl9OQUNLX1JFU1A6Cj4gKwkJcmV0dXJuIEkzQ19F UlJPUl9NMjsKPiArCj4gKwlkZWZhdWx0Ogo+ICsJCWJyZWFrOwo+ICsJfQo+ICsKPiArCXJldHVy biBJM0NfRVJST1JfVU5LTk9XTjsKPiArfQo+ICsKPiArc3RhdGljIGludCBhZGlfaTNjX21hc3Rl cl9zZW5kX2NjY19jbWQoc3RydWN0IGkzY19tYXN0ZXJfY29udHJvbGxlciAqbSwKPiArCQkJCSAg ICAgICBzdHJ1Y3QgaTNjX2NjY19jbWQgKmNtZCkKPiArewo+ICsJc3RydWN0IGFkaV9pM2NfbWFz dGVyICptYXN0ZXIgPSB0b19hZGlfaTNjX21hc3RlcihtKTsKPiArCXN0cnVjdCBhZGlfaTNjX3hm ZXIgKnhmZXI7Cj4gKwlzdHJ1Y3QgYWRpX2kzY19jbWQgKmNjbWQ7Cj4gKwo+ICsJeGZlciA9IGFk aV9pM2NfbWFzdGVyX2FsbG9jX3hmZXIobWFzdGVyLCAxKTsKPiArCWlmICgheGZlcikKPiArCQly ZXR1cm4gLUVOT01FTTsKPiArCj4gKwljY21kID0geGZlci0+Y21kczsKPiArCWNjbWQtPmNtZDEg PSBDTUQxX0ZJRk9fQ0NDKGNtZC0+aWQpOwo+ICsJY2NtZC0+Y21kMCA9IENNRDBfRklGT19JU19D Q0MgfAo+ICsJCSAgICAgQ01EMF9GSUZPX0xFTihjbWQtPmRlc3RzWzBdLnBheWxvYWQubGVuKTsK PiArCj4gKwlpZiAoY21kLT5pZCAmIEkzQ19DQ0NfRElSRUNUKQo+ICsJCWNjbWQtPmNtZDAgfD0g Q01EMF9GSUZPX0RFVl9BRERSKGNtZC0+ZGVzdHNbMF0uYWRkcik7Cj4gKwo+ICsJaWYgKGNtZC0+ cm53KSB7Cj4gKwkJY2NtZC0+Y21kMCB8PSBDTUQwX0ZJRk9fUk5XOwo+ICsJCWNjbWQtPnJ4X2J1 ZiA9IGNtZC0+ZGVzdHNbMF0ucGF5bG9hZC5kYXRhOwo+ICsJCWNjbWQtPnJ4X2xlbiA9IGNtZC0+ ZGVzdHNbMF0ucGF5bG9hZC5sZW47Cj4gKwl9IGVsc2Ugewo+ICsJCWNjbWQtPnR4X2J1ZiA9IGNt ZC0+ZGVzdHNbMF0ucGF5bG9hZC5kYXRhOwo+ICsJCWNjbWQtPnR4X2xlbiA9IGNtZC0+ZGVzdHNb MF0ucGF5bG9hZC5sZW47Cj4gKwl9Cj4gKwo+ICsJYWRpX2kzY19tYXN0ZXJfcXVldWVfeGZlciht YXN0ZXIsIHhmZXIpOwo+ICsJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnhmZXIt PmNvbXAsIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpKQo+ICsJCWFkaV9pM2NfbWFzdGVyX3VucXVl dWVfeGZlcihtYXN0ZXIsIHhmZXIpOwo+ICsKPiArCWNtZC0+ZXJyID0gYWRpX2kzY19jbWRfZ2V0 X2VycigmeGZlci0+Y21kc1swXSk7Cj4gKwlrZnJlZSh4ZmVyKTsKPiArCj4gKwlyZXR1cm4gMDsK PiArfQo+ICsKPiArc3RhdGljIGludCBhZGlfaTNjX21hc3Rlcl9wcml2X3hmZXJzKHN0cnVjdCBp M2NfZGV2X2Rlc2MgKmRldiwKPiArCQkJCSAgICAgc3RydWN0IGkzY19wcml2X3hmZXIgKnhmZXJz LAo+ICsJCQkJICAgICBpbnQgbnhmZXJzKQo+ICt7Cj4gKwlzdHJ1Y3QgaTNjX21hc3Rlcl9jb250 cm9sbGVyICptID0gaTNjX2Rldl9nZXRfbWFzdGVyKGRldik7Cj4gKwlzdHJ1Y3QgYWRpX2kzY19t YXN0ZXIgKm1hc3RlciA9IHRvX2FkaV9pM2NfbWFzdGVyKG0pOwo+ICsJc3RydWN0IGFkaV9pM2Nf eGZlciAqeGZlcjsKPiArCWludCBpLCByZXQ7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IG54ZmVy czsgaSsrKSB7Cj4gKwkJaWYgKHhmZXJzW2ldLmxlbiA+IENNRDBfRklGT19MRU5fTUFYKQo+ICsJ CQlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4gKwl9Cj4gKwo+ICsJaWYgKCFueGZlcnMpCj4gKwkJcmV0 dXJuIDA7Cj4gKwo+ICsJeGZlciA9IGFkaV9pM2NfbWFzdGVyX2FsbG9jX3hmZXIobWFzdGVyLCBu eGZlcnMpOwo+ICsJaWYgKCF4ZmVyKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWZvciAo aSA9IDA7IGkgPCBueGZlcnM7IGkrKykgewo+ICsJCXN0cnVjdCBhZGlfaTNjX2NtZCAqY2NtZCA9 ICZ4ZmVyLT5jbWRzW2ldOwo+ICsKPiArCQljY21kLT5jbWQwID0gQ01EMF9GSUZPX0RFVl9BRERS KGRldi0+aW5mby5keW5fYWRkcik7Cj4gKwo+ICsJCWlmICh4ZmVyc1tpXS5ybncpIHsKPiArCQkJ Y2NtZC0+Y21kMCB8PSBDTUQwX0ZJRk9fUk5XOwo+ICsJCQljY21kLT5yeF9idWYgPSB4ZmVyc1tp XS5kYXRhLmluOwo+ICsJCQljY21kLT5yeF9sZW4gPSB4ZmVyc1tpXS5sZW47Cj4gKwkJfSBlbHNl IHsKPiArCQkJY2NtZC0+dHhfYnVmID0geGZlcnNbaV0uZGF0YS5vdXQ7Cj4gKwkJCWNjbWQtPnR4 X2xlbiA9IHhmZXJzW2ldLmxlbjsKPiArCQl9Cj4gKwo+ICsJCWNjbWQtPmNtZDAgfD0gQ01EMF9G SUZPX0xFTih4ZmVyc1tpXS5sZW4pOwo+ICsKPiArCQlpZiAoaSA8IG54ZmVycyAtIDEpCj4gKwkJ CWNjbWQtPmNtZDAgfD0gQ01EMF9GSUZPX1NSOwo+ICsKPiArCQlpZiAoIWkpCj4gKwkJCWNjbWQt PmNtZDAgfD0gQ01EMF9GSUZPX0JDQVNUOwo+ICsJfQo+ICsKPiArCWFkaV9pM2NfbWFzdGVyX3F1 ZXVlX3hmZXIobWFzdGVyLCB4ZmVyKTsKPiArCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1l b3V0KCZ4ZmVyLT5jb21wLAo+ICsJCQkJCSBtc2Vjc190b19qaWZmaWVzKDEwMDApKSkKPiArCQlh ZGlfaTNjX21hc3Rlcl91bnF1ZXVlX3hmZXIobWFzdGVyLCB4ZmVyKTsKPiArCj4gKwlyZXQgPSB4 ZmVyLT5yZXQ7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IG54ZmVyczsgaSsrKQo+ICsJCXhmZXJz W2ldLmVyciA9IGFkaV9pM2NfY21kX2dldF9lcnIoJnhmZXItPmNtZHNbaV0pOwo+ICsKPiArCWtm cmVlKHhmZXIpOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0cnVjdCBhZGlfaTNj X2kyY19kZXZfZGF0YSB7Cj4gKwl1MTYgaWQ7Cj4gKwlzMTYgaWJpOwo+ICsJc3RydWN0IGkzY19n ZW5lcmljX2liaV9wb29sICppYmlfcG9vbDsKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgYWRpX2kz Y19tYXN0ZXJfZ2V0X3JyX3Nsb3Qoc3RydWN0IGFkaV9pM2NfbWFzdGVyICptYXN0ZXIsCj4gKwkJ CQkgICAgICB1OCBkeW5fYWRkcikKPiArewo+ICsJaWYgKCFtYXN0ZXItPmZyZWVfcnJfc2xvdHMp Cj4gKwkJcmV0dXJuIC1FTk9TUEM7Cj4gKwo+ICsJcmV0dXJuIGZmcyhtYXN0ZXItPmZyZWVfcnJf c2xvdHMpIC0gMTsKPiArfQo+ICsKPiArc3RhdGljIGludCBhZGlfaTNjX21hc3Rlcl9yZWF0dGFj aF9pM2NfZGV2KHN0cnVjdCBpM2NfZGV2X2Rlc2MgKmRldiwgdTggZHluX2FkZHIpCj4gK3sKPiAr CXN0cnVjdCBpM2NfbWFzdGVyX2NvbnRyb2xsZXIgKm0gPSBpM2NfZGV2X2dldF9tYXN0ZXIoZGV2 KTsKPiArCXN0cnVjdCBhZGlfaTNjX21hc3RlciAqbWFzdGVyID0gdG9fYWRpX2kzY19tYXN0ZXIo bSk7Cj4gKwl1OCBhZGRyOwo+ICsKPiArCWFkZHIgPSBkZXYtPmluZm8uZHluX2FkZHIgPyBkZXYt PmluZm8uZHluX2FkZHIgOiBkZXYtPmluZm8uc3RhdGljX2FkZHI7Cj4gKwo+ICsJd3JpdGVsKERF Vl9DSEFSX0FERFIoZHluX2FkZHIpLCBtYXN0ZXItPnJlZ3MgKyBSRUdfREVWX0NIQVIpOwo+ICsJ d3JpdGVsKChyZWFkbChtYXN0ZXItPnJlZ3MgKyBSRUdfREVWX0NIQVIpICYKPiArCQl+REVWX0NI QVJfSVNfQVRUQUNIRUQpIHwgREVWX0NIQVJfV0VOLAo+ICsJICAgICAgIG1hc3Rlci0+cmVncyAr IFJFR19ERVZfQ0hBUik7Cj4gKwo+ICsJd3JpdGVsKERFVl9DSEFSX0FERFIoYWRkciksIG1hc3Rl ci0+cmVncyArIFJFR19ERVZfQ0hBUik7Cj4gKwl3cml0ZWwocmVhZGwobWFzdGVyLT5yZWdzICsg UkVHX0RFVl9DSEFSKSB8Cj4gKwkgICAgICAgREVWX0NIQVJfSVNfQVRUQUNIRUQgfCBERVZfQ0hB Ul9XRU4sCj4gKwkgICAgICAgbWFzdGVyLT5yZWdzICsgUkVHX0RFVl9DSEFSKTsKPiArCj4gKwly ZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBhZGlfaTNjX21hc3Rlcl9hdHRhY2hfaTNj X2RldihzdHJ1Y3QgaTNjX2Rldl9kZXNjICpkZXYpCj4gK3sKPiArCXN0cnVjdCBpM2NfbWFzdGVy X2NvbnRyb2xsZXIgKm0gPSBpM2NfZGV2X2dldF9tYXN0ZXIoZGV2KTsKPiArCXN0cnVjdCBhZGlf aTNjX21hc3RlciAqbWFzdGVyID0gdG9fYWRpX2kzY19tYXN0ZXIobSk7Cj4gKwlzdHJ1Y3QgYWRp X2kzY19pMmNfZGV2X2RhdGEgKmRhdGE7Cj4gKwlpbnQgc2xvdDsKPiArCXU4IGFkZHI7Cj4gKwo+ ICsJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWRh dGEpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJc2xvdCA9IGFkaV9pM2NfbWFzdGVyX2dl dF9ycl9zbG90KG1hc3RlciwgZGV2LT5pbmZvLmR5bl9hZGRyKTsKPiArCWlmIChzbG90IDwgMCkg ewo+ICsJCWtmcmVlKGRhdGEpOwo+ICsJCXJldHVybiBzbG90Owo+ICsJfQo+ICsKPiArCWRhdGEt PmliaSA9IC0xOwo+ICsJZGF0YS0+aWQgPSBzbG90Owo+ICsJaTNjX2Rldl9zZXRfbWFzdGVyX2Rh dGEoZGV2LCBkYXRhKTsKPiArCW1hc3Rlci0+ZnJlZV9ycl9zbG90cyAmPSB+QklUKHNsb3QpOwo+ ICsKPiArCWFkZHIgPSBkZXYtPmluZm8uZHluX2FkZHIgPyBkZXYtPmluZm8uZHluX2FkZHIgOiBk ZXYtPmluZm8uc3RhdGljX2FkZHI7Cj4gKwo+ICsJd3JpdGVsKERFVl9DSEFSX0FERFIoYWRkciks IG1hc3Rlci0+cmVncyArIFJFR19ERVZfQ0hBUik7Cj4gKwl3cml0ZWwocmVhZGwobWFzdGVyLT5y ZWdzICsgUkVHX0RFVl9DSEFSKSB8Cj4gKwkgICAgICAgREVWX0NIQVJfSVNfQVRUQUNIRUQgfCBE RVZfQ0hBUl9XRU4sCj4gKwkgICAgICAgbWFzdGVyLT5yZWdzICsgUkVHX0RFVl9DSEFSKTsKPiAr Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYWRpX2kzY19tYXN0ZXJfc3lu Y19kZXZfY2hhcihzdHJ1Y3QgaTNjX21hc3Rlcl9jb250cm9sbGVyICptKQo+ICt7Cj4gKwlzdHJ1 Y3QgYWRpX2kzY19tYXN0ZXIgKm1hc3RlciA9IHRvX2FkaV9pM2NfbWFzdGVyKG0pOwo+ICsJc3Ry dWN0IGkzY19kZXZfZGVzYyAqaTNjZGV2Owo+ICsJdTggYWRkcjsKPiArCj4gKwlpM2NfYnVzX2Zv cl9lYWNoX2kzY2RldigmbS0+YnVzLCBpM2NkZXYpIHsKPiArCQlhZGRyID0gaTNjZGV2LT5pbmZv LmR5bl9hZGRyID8KPiArCQkgICAgICAgaTNjZGV2LT5pbmZvLmR5bl9hZGRyIDogaTNjZGV2LT5p bmZvLnN0YXRpY19hZGRyOwo+ICsJCXdyaXRlbChERVZfQ0hBUl9BRERSKGFkZHIpLCBtYXN0ZXIt PnJlZ3MgKyBSRUdfREVWX0NIQVIpOwo+ICsJCXdyaXRlbChyZWFkbChtYXN0ZXItPnJlZ3MgKyBS RUdfREVWX0NIQVIpIHwKPiArCQkgICAgICAgREVWX0NIQVJfQkNSX0lCSShpM2NkZXYtPmluZm8u YmNyKSB8IERFVl9DSEFSX1dFTiwKPiArCQkgICAgICAgbWFzdGVyLT5yZWdzICsgUkVHX0RFVl9D SEFSKTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYWRpX2kzY19tYXN0ZXJfZGV0YWNo X2kzY19kZXYoc3RydWN0IGkzY19kZXZfZGVzYyAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgaTNjX21h c3Rlcl9jb250cm9sbGVyICptID0gaTNjX2Rldl9nZXRfbWFzdGVyKGRldik7Cj4gKwlzdHJ1Y3Qg YWRpX2kzY19tYXN0ZXIgKm1hc3RlciA9IHRvX2FkaV9pM2NfbWFzdGVyKG0pOwo+ICsJc3RydWN0 IGFkaV9pM2NfaTJjX2Rldl9kYXRhICpkYXRhID0gaTNjX2Rldl9nZXRfbWFzdGVyX2RhdGEoZGV2 KTsKPiArCXU4IGFkZHI7Cj4gKwo+ICsJYWRkciA9IGRldi0+aW5mby5keW5fYWRkciA/IGRldi0+ aW5mby5keW5fYWRkciA6IGRldi0+aW5mby5zdGF0aWNfYWRkcjsKPiArCj4gKwl3cml0ZWwoREVW X0NIQVJfQUREUihhZGRyKSwgbWFzdGVyLT5yZWdzICsgUkVHX0RFVl9DSEFSKTsKPiArCXdyaXRl bCgocmVhZGwobWFzdGVyLT5yZWdzICsgUkVHX0RFVl9DSEFSKSAmCj4gKwkJfkRFVl9DSEFSX0lT X0FUVEFDSEVEKSB8IERFVl9DSEFSX1dFTiwKPiArCSAgICAgICBtYXN0ZXItPnJlZ3MgKyBSRUdf REVWX0NIQVIpOwo+ICsKPiArCWkzY19kZXZfc2V0X21hc3Rlcl9kYXRhKGRldiwgTlVMTCk7Cj4g KwltYXN0ZXItPmZyZWVfcnJfc2xvdHMgfD0gQklUKGRhdGEtPmlkKTsKPiArCWtmcmVlKGRhdGEp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGFkaV9pM2NfbWFzdGVyX2F0dGFjaF9pMmNfZGV2KHN0 cnVjdCBpMmNfZGV2X2Rlc2MgKmRldikKPiArewo+ICsJc3RydWN0IGkzY19tYXN0ZXJfY29udHJv bGxlciAqbSA9IGkyY19kZXZfZ2V0X21hc3RlcihkZXYpOwo+ICsJc3RydWN0IGFkaV9pM2NfbWFz dGVyICptYXN0ZXIgPSB0b19hZGlfaTNjX21hc3RlcihtKTsKPiArCXN0cnVjdCBhZGlfaTNjX2ky Y19kZXZfZGF0YSAqZGF0YTsKPiArCWludCBzbG90Owo+ICsKPiArCXNsb3QgPSBhZGlfaTNjX21h c3Rlcl9nZXRfcnJfc2xvdChtYXN0ZXIsIDApOwo+ICsJaWYgKHNsb3QgPCAwKQo+ICsJCXJldHVy biBzbG90Owo+ICsKPiArCWRhdGEgPSBremFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwp Owo+ICsJaWYgKCFkYXRhKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWRhdGEtPmlkID0g c2xvdDsKPiArCW1hc3Rlci0+ZnJlZV9ycl9zbG90cyAmPSB+QklUKHNsb3QpOwo+ICsJaTJjX2Rl dl9zZXRfbWFzdGVyX2RhdGEoZGV2LCBkYXRhKTsKPiArCj4gKwl3cml0ZWwoREVWX0NIQVJfQURE UihkZXYtPmFkZHIpIHwKPiArCSAgICAgICBERVZfQ0hBUl9JU19JMkMgfCBERVZfQ0hBUl9JU19B VFRBQ0hFRCB8IERFVl9DSEFSX1dFTiwKPiArCSAgICAgICBtYXN0ZXItPnJlZ3MgKyBSRUdfREVW X0NIQVIpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBhZGlfaTNj X21hc3Rlcl9kZXRhY2hfaTJjX2RldihzdHJ1Y3QgaTJjX2Rldl9kZXNjICpkZXYpCj4gK3sKPiAr CXN0cnVjdCBpM2NfbWFzdGVyX2NvbnRyb2xsZXIgKm0gPSBpMmNfZGV2X2dldF9tYXN0ZXIoZGV2 KTsKPiArCXN0cnVjdCBhZGlfaTNjX21hc3RlciAqbWFzdGVyID0gdG9fYWRpX2kzY19tYXN0ZXIo bSk7Cj4gKwlzdHJ1Y3QgYWRpX2kzY19pMmNfZGV2X2RhdGEgKmRhdGEgPSBpMmNfZGV2X2dldF9t YXN0ZXJfZGF0YShkZXYpOwo+ICsKPiArCXdyaXRlbChERVZfQ0hBUl9BRERSKGRldi0+YWRkcikg fAo+ICsJICAgICAgIERFVl9DSEFSX0lTX0kyQyB8IERFVl9DSEFSX1dFTiwKPiArCSAgICAgICBt YXN0ZXItPnJlZ3MgKyBSRUdfREVWX0NIQVIpOwo+ICsKPiArCWkyY19kZXZfc2V0X21hc3Rlcl9k YXRhKGRldiwgTlVMTCk7Cj4gKwltYXN0ZXItPmZyZWVfcnJfc2xvdHMgfD0gQklUKGRhdGEtPmlk KTsKPiArCWtmcmVlKGRhdGEpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBhZGlfaTNjX21hc3Rl cl9idXNfY2xlYW51cChzdHJ1Y3QgaTNjX21hc3Rlcl9jb250cm9sbGVyICptKQo+ICt7Cj4gKwlz dHJ1Y3QgYWRpX2kzY19tYXN0ZXIgKm1hc3RlciA9IHRvX2FkaV9pM2NfbWFzdGVyKG0pOwo+ICsK PiArCWFkaV9pM2NfbWFzdGVyX2Rpc2FibGUobWFzdGVyKTsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgYWRpX2kzY19tYXN0ZXJfdXBkX2kzY19zY2xfbGltKHN0cnVjdCBhZGlfaTNjX21hc3RlciAq bWFzdGVyKQo+ICt7Cj4gKwlzdHJ1Y3QgaTNjX21hc3Rlcl9jb250cm9sbGVyICptID0gJm1hc3Rl ci0+YmFzZTsKPiArCXN0cnVjdCBpM2NfYnVzICpidXMgPSBpM2NfbWFzdGVyX2dldF9idXMobSk7 Cj4gKwl1OCBpM2Nfc2NsX2xpbSA9IDA7Cj4gKwlzdHJ1Y3QgaTNjX2Rldl9kZXNjICpkZXY7Cj4g Kwl1OCBwcF9zZzsKPiArCj4gKwlpM2NfYnVzX2Zvcl9lYWNoX2kzY2RldihidXMsIGRldikgewo+ ICsJCXU4IG1heF9mc2NsOwo+ICsKPiArCQltYXhfZnNjbCA9IG1heChJM0NfQ0NDX01BWF9TRFJf RlNDTChkZXYtPmluZm8ubWF4X3JlYWRfZHMpLAo+ICsJCQkgICAgICAgSTNDX0NDQ19NQVhfU0RS X0ZTQ0woZGV2LT5pbmZvLm1heF93cml0ZV9kcykpOwo+ICsKPiArCQlzd2l0Y2ggKG1heF9mc2Ns KSB7Cj4gKwkJY2FzZSBJM0NfU0RSMV9GU0NMXzhNSFo6Cj4gKwkJCW1heF9mc2NsID0gUFBfU0df Nk1IWjsKPiArCQkJYnJlYWs7Cj4gKwkJY2FzZSBJM0NfU0RSMl9GU0NMXzZNSFo6Cj4gKwkJCW1h eF9mc2NsID0gUFBfU0dfM01IWjsKPiArCQkJYnJlYWs7Cj4gKwkJY2FzZSBJM0NfU0RSM19GU0NM XzRNSFo6Cj4gKwkJCW1heF9mc2NsID0gUFBfU0dfM01IWjsKPiArCQkJYnJlYWs7Cj4gKwkJY2Fz ZSBJM0NfU0RSNF9GU0NMXzJNSFo6Cj4gKwkJCW1heF9mc2NsID0gUFBfU0dfMU1IWjsKPiArCQkJ YnJlYWs7Cj4gKwkJY2FzZSBJM0NfU0RSMF9GU0NMX01BWDoKPiArCQlkZWZhdWx0Ogo+ICsJCQlt YXhfZnNjbCA9IFBQX1NHXzEyTUhaOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwo+ICsJCWlmICht YXhfZnNjbCAmJgo+ICsJCSAgICAoaTNjX3NjbF9saW0gPiBtYXhfZnNjbCB8fCAhaTNjX3NjbF9s aW0pKQo+ICsJCQlpM2Nfc2NsX2xpbSA9IG1heF9mc2NsOwo+ICsJfQo+ICsKPiArCWlmICghaTNj X3NjbF9saW0pCj4gKwkJcmV0dXJuOwo+ICsKPiArCW1hc3Rlci0+aTNjX3NjbF9saW0gPSBpM2Nf c2NsX2xpbSAtIDE7Cj4gKwo+ICsJcHBfc2cgPSByZWFkbChtYXN0ZXItPnJlZ3MgKyBSRUdfT1BT KSAmCj4gKwkJICB+UkVHX09QU19QUF9TR19NQVNLOwo+ICsKPiArCXBwX3NnIHw9IFJFR19PUFNf U0VUX1NHKG1hc3Rlci0+aTNjX3NjbF9saW0pOwo+ICsKPiArCXdyaXRlbChwcF9zZywgbWFzdGVy LT5yZWdzICsgUkVHX09QUyk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGFkaV9pM2NfbWFzdGVy X2dldF9mZWF0dXJlcyhzdHJ1Y3QgYWRpX2kzY19tYXN0ZXIgKm1hc3RlciwKPiArCQkJCQl1bnNp Z25lZCBpbnQgc2xvdCwKPiArCQkJCQlzdHJ1Y3QgaTNjX2RldmljZV9pbmZvICppbmZvKQo+ICt7 Cj4gKwltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7Cj4gKwo+ICsJaW5mby0+ZHluX2Fk ZHIgPSAweDMxOwo+ICsJaW5mby0+ZGNyID0gMHgwMDsKPiArCWluZm8tPmJjciA9IDB4NDA7Cj4g KwlpbmZvLT5waWQgPSAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGFkaV9pM2NfbWFzdGVyX2Rv X2RhYShzdHJ1Y3QgaTNjX21hc3Rlcl9jb250cm9sbGVyICptKQo+ICt7Cj4gKwlzdHJ1Y3QgYWRp X2kzY19tYXN0ZXIgKm1hc3RlciA9IHRvX2FkaV9pM2NfbWFzdGVyKG0pOwo+ICsJaW50IHJldDsK PiArCXUzMiBpcnFfbWFzazsKPiArCj4gKwltYXN0ZXItPmRhYS5pbmRleCA9IDB4ODsKPiArCWZv ciAodTggaSA9IDA7IGkgPCBNQVhfREVWUzsgaSsrKSB7CgpOb3Qgc3VyZSB3aHkgbmVlZCBwcmUt YWxsb2MgTUFYX0RFVlMgYWRkcmVzcyBoZXJlPwoKPiArCQlyZXQgPSBpM2NfbWFzdGVyX2dldF9m cmVlX2FkZHIobSwgbWFzdGVyLT5kYWEuaW5kZXgpOwo+ICsJCWlmIChyZXQgPCAwKQo+ICsJCQly ZXR1cm4gLUVOT1NQQzsKPiArCj4gKwkJbWFzdGVyLT5kYWEuaW5kZXggPSByZXQ7Cj4gKwkJbWFz dGVyLT5kYWEuYWRkcnNbaV0gPSBtYXN0ZXItPmRhYS5pbmRleDsKPiArCX0KPiArCS8qIFdpbGwg YmUgcmV1c2VkIGFzIGluZGV4IGZvciBkYWEuYWRkcnMgKi8KPiArCW1hc3Rlci0+ZGFhLmluZGV4 ID0gMDsKPiArCj4gKwlpcnFfbWFzayA9IHJlYWRsKG1hc3Rlci0+cmVncyArIFJFR19JUlFfTUFT Syk7Cj4gKwl3cml0ZWwoaXJxX21hc2sgfCBJUlFfUEVORElOR19EQUFfUEVORElORywKPiArCSAg ICAgICBtYXN0ZXItPnJlZ3MgKyBSRUdfSVJRX01BU0spOwo+ICsKPiArCXJldCA9IGkzY19tYXN0 ZXJfZW50ZGFhX2xvY2tlZCgmbWFzdGVyLT5iYXNlKTsKPiArCj4gKwl3cml0ZWwoaXJxX21hc2ss IG1hc3Rlci0+cmVncyArIFJFR19JUlFfTUFTSyk7Cj4gKwo+ICsJLyogREFBIGFsd2F5cyBmaW5p c2hlcyB3aXRoIENFMl9FUlJPUiBvciBOQUNLX1JFU1AgKi8KPiArCWlmIChyZXQgJiYgcmV0ICE9 IEkzQ19FUlJPUl9NMikKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCS8qIEFkZCBJM0MgZGV2aWNl cyBkaXNjb3ZlcmVkICovCj4gKwlmb3IgKHU4IGkgPSAwOyBpIDwgbWFzdGVyLT5kYWEuaW5kZXg7 IGkrKykKPiArCQlpM2NfbWFzdGVyX2FkZF9pM2NfZGV2X2xvY2tlZChtLCBtYXN0ZXItPmRhYS5h ZGRyc1tpXSk7Cj4gKwkvKiBTeW5jIHJldHJpZXZlZCBkZXZzIGluZm8gd2l0aCB0aGUgSVAgKi8K PiArCWFkaV9pM2NfbWFzdGVyX3N5bmNfZGV2X2NoYXIobSk7Cj4gKwo+ICsJaTNjX21hc3Rlcl9k ZWZzbHZzX2xvY2tlZCgmbWFzdGVyLT5iYXNlKTsKPiArCj4gKwlhZGlfaTNjX21hc3Rlcl91cGRf aTNjX3NjbF9saW0obWFzdGVyKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGlj IGludCBhZGlfaTNjX21hc3Rlcl9idXNfaW5pdChzdHJ1Y3QgaTNjX21hc3Rlcl9jb250cm9sbGVy ICptKQo+ICt7Cj4gKwlzdHJ1Y3QgYWRpX2kzY19tYXN0ZXIgKm1hc3RlciA9IHRvX2FkaV9pM2Nf bWFzdGVyKG0pOwo+ICsJc3RydWN0IGkzY19kZXZpY2VfaW5mbyBpbmZvID0geyB9Owo+ICsJaW50 IHJldDsKPiArCj4gKwlyZXQgPSBpM2NfbWFzdGVyX2dldF9mcmVlX2FkZHIobSwgMCk7Cj4gKwlp ZiAocmV0IDwgMCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCWFkaV9pM2NfbWFzdGVyX2dldF9m ZWF0dXJlcyhtYXN0ZXIsIDAsICZpbmZvKTsKPiArCXJldCA9IGkzY19tYXN0ZXJfc2V0X2luZm8o Jm1hc3Rlci0+YmFzZSwgJmluZm8pOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsK PiArCXdyaXRlbChSRUdfSUJJX0NPTkZJR19MSVNURU4gfCB+UkVHX0lCSV9DT05GSUdfRU5BQkxF LAo+ICsJICAgICAgIG1hc3Rlci0+cmVncyArIFJFR19JQklfQ09ORklHKTsKPiArCj4gKwlyZXR1 cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYWRpX2kzY19tYXN0ZXJfaGFuZGxlX2liaShz dHJ1Y3QgYWRpX2kzY19tYXN0ZXIgKm1hc3RlciwKPiArCQkJCSAgICAgIHUzMiBpYmkpCj4gK3sK PiArCXN0cnVjdCBhZGlfaTNjX2kyY19kZXZfZGF0YSAqZGF0YTsKPiArCXN0cnVjdCBpM2NfaWJp X3Nsb3QgKnNsb3Q7Cj4gKwlzdHJ1Y3QgaTNjX2Rldl9kZXNjICpkZXY7Cj4gKwl1OCBkYSwgaWQ7 Cj4gKwl1OCAqbWRiOwo+ICsKPiArCWRhID0gKGliaSA+PiAxNykgJiBHRU5NQVNLKDYsIDApOwo+ ICsJZm9yIChpZCA9IDA7IGlkIDwgbWFzdGVyLT5pYmkubnVtX3Nsb3RzOyBpZCsrKSB7Cj4gKwkJ aWYgKG1hc3Rlci0+aWJpLnNsb3RzW2lkXSAmJgo+ICsJCSAgICBtYXN0ZXItPmliaS5zbG90c1tp ZF0tPmluZm8uZHluX2FkZHIgPT0gZGEpCj4gKwkJCWJyZWFrOwo+ICsJfQo+ICsKPiArCWlmIChp ZCA9PSBtYXN0ZXItPmliaS5udW1fc2xvdHMpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWRldiA9IG1h c3Rlci0+aWJpLnNsb3RzW2lkXTsKPiArCXNwaW5fbG9jaygmbWFzdGVyLT5pYmkubG9jayk7Cgp1 c2UgZ3VhcmQoc3Bpbl9sb2NrKTsKCj4gKwo+ICsJZGF0YSA9IGkzY19kZXZfZ2V0X21hc3Rlcl9k YXRhKGRldik7Cj4gKwlzbG90ID0gaTNjX2dlbmVyaWNfaWJpX2dldF9mcmVlX3Nsb3QoZGF0YS0+ aWJpX3Bvb2wpOwo+ICsJaWYgKCFzbG90KQo+ICsJCWdvdG8gb3V0X3VubG9jazsKPiArCj4gKwlt ZGIgPSBzbG90LT5kYXRhOwo+ICsJbWRiWzBdID0gKGliaSA+PiA4KSAmIEdFTk1BU0soNywgMCk7 Cj4gKwo+ICsJc2xvdC0+bGVuID0gMTsKPiArCWkzY19tYXN0ZXJfcXVldWVfaWJpKGRldiwgc2xv dCk7Cj4gKwo+ICtvdXRfdW5sb2NrOgo+ICsJc3Bpbl91bmxvY2soJm1hc3Rlci0+aWJpLmxvY2sp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBhZGlfaTNjX21hc3Rlcl9kZW11eF9pYmlzKHN0cnVj dCBhZGlfaTNjX21hc3RlciAqbWFzdGVyKQo+ICt7Cj4gKwl1MzIgc3RhdHVzMDsKPiArCj4gKwlm b3IgKHN0YXR1czAgPSByZWFkbChtYXN0ZXItPnJlZ3MgKyBSRUdfRklGT19TVEFUVVMpOwo+ICsJ ICAgICAhKHN0YXR1czAgJiBGSUZPX1NUQVRVU19JQklfRU1QVFkpOwo+ICsJICAgICBzdGF0dXMw ID0gcmVhZGwobWFzdGVyLT5yZWdzICsgUkVHX0ZJRk9fU1RBVFVTKSkgewo+ICsJCXUzMiBpYmkg PSByZWFkbChtYXN0ZXItPnJlZ3MgKyBSRUdfSUJJX0ZJRk8pOwo+ICsKPiArCQlhZGlfaTNjX21h c3Rlcl9oYW5kbGVfaWJpKG1hc3RlciwgaWJpKTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZv aWQgYWRpX2kzY19tYXN0ZXJfaGFuZGxlX2RhX3JlcShzdHJ1Y3QgYWRpX2kzY19tYXN0ZXIgKm1h c3RlcikKPiArewo+ICsJdTggcGF5bG9hZDBbOF07Cj4gKwl1MzIgYWRkcjsKPiArCj4gKwkvKiBD bGVhciBkZXZpY2UgY2hhcmFjdGVyaXN0aWNzICovCj4gKwlhZGlfaTNjX21hc3Rlcl9yZF9mcm9t X3J4X2ZpZm8obWFzdGVyLCBwYXlsb2FkMCwgNik7Cj4gKwlhZGRyID0gbWFzdGVyLT5kYWEuYWRk cnNbbWFzdGVyLT5kYWEuaW5kZXgrK107Cj4gKwlhZGRyID0gKGFkZHIgPDwgMSkgfCAhcGFyaXR5 OChhZGRyKTsKPiArCj4gKwl3cml0ZWwoYWRkciwgbWFzdGVyLT5yZWdzICsgUkVHX1NET19GSUZP KTsKPiArfQo+ICsKPiArc3RhdGljIGlycXJldHVybl90IGFkaV9pM2NfbWFzdGVyX2lycShpbnQg aXJxLCB2b2lkICpkYXRhKQo+ICt7Cj4gKwlzdHJ1Y3QgYWRpX2kzY19tYXN0ZXIgKm1hc3RlciA9 IGRhdGE7Cj4gKwl1MzIgcGVuZGluZzsKPiArCj4gKwlwZW5kaW5nID0gcmVhZGxfcmVsYXhlZCht YXN0ZXItPnJlZ3MgKyBSRUdfSVJRX1BFTkRJTkcpOwo+ICsJaWYgKHBlbmRpbmcgJiBJUlFfUEVO RElOR19DTURSX1BFTkRJTkcpIHsKPiArCQlzcGluX2xvY2soJm1hc3Rlci0+eGZlcnF1ZXVlLmxv Y2spOwo+ICsJCWFkaV9pM2NfbWFzdGVyX2VuZF94ZmVyX2xvY2tlZChtYXN0ZXIsIHBlbmRpbmcp Owo+ICsJCXNwaW5fdW5sb2NrKCZtYXN0ZXItPnhmZXJxdWV1ZS5sb2NrKTsKPiArCX0KPiArCWlm IChwZW5kaW5nICYgSVJRX1BFTkRJTkdfSUJJX1BFTkRJTkcpCj4gKwkJYWRpX2kzY19tYXN0ZXJf ZGVtdXhfaWJpcyhtYXN0ZXIpOwo+ICsJaWYgKHBlbmRpbmcgJiBJUlFfUEVORElOR19EQUFfUEVO RElORykKPiArCQlhZGlfaTNjX21hc3Rlcl9oYW5kbGVfZGFfcmVxKG1hc3Rlcik7Cj4gKwl3cml0 ZWxfcmVsYXhlZChwZW5kaW5nLCBtYXN0ZXItPnJlZ3MgKyBSRUdfSVJRX1BFTkRJTkcpOwoKdGhp cyBuZWVkIG1vdmUganVzdCBhZnRlciByZWFkbF9yZWxheGVkKCkuCgo+ICsKPiArCXJldHVybiBJ UlFfSEFORExFRDsKPiArfQo+ICsKPiArc3RhdGljIGludCBhZGlfaTNjX21hc3Rlcl9pMmNfeGZl cnMoc3RydWN0IGkyY19kZXZfZGVzYyAqZGV2LAo+ICsJCQkJICAgIHN0cnVjdCBpMmNfbXNnICp4 ZmVycywKPiArCQkJCSAgICBpbnQgbnhmZXJzKQo+ICt7Cj4gKwlzdHJ1Y3QgaTNjX21hc3Rlcl9j b250cm9sbGVyICptID0gaTJjX2Rldl9nZXRfbWFzdGVyKGRldik7Cj4gKwlzdHJ1Y3QgYWRpX2kz Y19tYXN0ZXIgKm1hc3RlciA9IHRvX2FkaV9pM2NfbWFzdGVyKG0pOwo+ICsJc3RydWN0IGFkaV9p M2NfeGZlciAqeGZlcjsKPiArCWludCBpLCByZXQ7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IG54 ZmVyczsgaSsrKSB7Cj4gKwkJaWYgKHhmZXJzW2ldLmxlbiA+IENNRDBfRklGT19MRU5fTUFYKQo+ ICsJCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4gKwkJaWYgKHhmZXJzW2ldLmZsYWdzICYgSTJDX01f VEVOKQo+ICsJCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4gKwl9Cj4gKwo+ICsJaWYgKCFueGZlcnMp Cj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJeGZlciA9IGFkaV9pM2NfbWFzdGVyX2FsbG9jX3hmZXIo bWFzdGVyLCBueGZlcnMpOwo+ICsJaWYgKCF4ZmVyKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsK PiArCWZvciAoaSA9IDA7IGkgPCBueGZlcnM7IGkrKykgewo+ICsJCXN0cnVjdCBhZGlfaTNjX2Nt ZCAqY2NtZCA9ICZ4ZmVyLT5jbWRzW2ldOwo+ICsKPiArCQljY21kLT5jbWQwID0gQ01EMF9GSUZP X0RFVl9BRERSKHhmZXJzW2ldLmFkZHIpOwo+ICsKPiArCQlpZiAoeGZlcnNbaV0uZmxhZ3MgJiBJ MkNfTV9SRCkgewo+ICsJCQljY21kLT5jbWQwIHw9IENNRDBfRklGT19STlc7Cj4gKwkJCWNjbWQt PnJ4X2J1ZiA9IHhmZXJzW2ldLmJ1ZjsKPiArCQkJY2NtZC0+cnhfbGVuID0geGZlcnNbaV0ubGVu Owo+ICsJCX0gZWxzZSB7Cj4gKwkJCWNjbWQtPnR4X2J1ZiA9IHhmZXJzW2ldLmJ1ZjsKPiArCQkJ Y2NtZC0+dHhfbGVuID0geGZlcnNbaV0ubGVuOwo+ICsJCX0KPiArCj4gKwkJY2NtZC0+Y21kMCB8 PSBDTUQwX0ZJRk9fTEVOKHhmZXJzW2ldLmxlbik7Cj4gKwl9Cj4gKwo+ICsJYWRpX2kzY19tYXN0 ZXJfcXVldWVfeGZlcihtYXN0ZXIsIHhmZXIpOwo+ICsJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9u X3RpbWVvdXQoJnhmZXItPmNvbXAsCj4gKwkJCQkJIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpKQo+ ICsJCWFkaV9pM2NfbWFzdGVyX3VucXVldWVfeGZlcihtYXN0ZXIsIHhmZXIpOwo+ICsKPiArCXJl dCA9IHhmZXItPnJldDsKPiArCWtmcmVlKHhmZXIpOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsK PiArc3RhdGljIGludCBhZGlfaTNjX21hc3Rlcl9kaXNhYmxlX2liaShzdHJ1Y3QgaTNjX2Rldl9k ZXNjICpkZXYpCj4gK3sKPiArCXN0cnVjdCBpM2NfbWFzdGVyX2NvbnRyb2xsZXIgKm0gPSBpM2Nf ZGV2X2dldF9tYXN0ZXIoZGV2KTsKPiArCXN0cnVjdCBhZGlfaTNjX21hc3RlciAqbWFzdGVyID0g dG9fYWRpX2kzY19tYXN0ZXIobSk7Cj4gKwlzdHJ1Y3QgaTNjX2Rldl9kZXNjICppM2NkZXY7Cj4g Kwlib29sIGVuYWJsZWQgPSAwOwoKZW5hYmxlZCA9IGZhbHNlIGlmIHlvdSB1c2UgYm9vbCB0eXBl LgoKPiArCWludCByZXQ7Cj4gKwo+ICsJcmV0ID0gaTNjX21hc3Rlcl9kaXNlY19sb2NrZWQobSwg ZGV2LT5pbmZvLmR5bl9hZGRyLAo+ICsJCQkJICAgICAgSTNDX0NDQ19FVkVOVF9TSVIpOwo+ICsK PiArCWkzY19idXNfZm9yX2VhY2hfaTNjZGV2KCZtLT5idXMsIGkzY2Rldikgewo+ICsJCWlmIChk ZXYgIT0gaTNjZGV2ICYmIGkzY2Rldi0+aWJpKQo+ICsJCQllbmFibGVkIHw9IGkzY2Rldi0+aWJp LT5lbmFibGVkOwoKaWYgeW91IHVzZSB8IGhlcmUsIHN1Z2dlc3QgdXNlIHUzMiBlbmFibGVkCgo+ ICsJfQo+ICsJaWYgKCFlbmFibGVkKSB7Cj4gKwkJd3JpdGVsKFJFR19JQklfQ09ORklHX0xJU1RF TiB8IH5SRUdfSUJJX0NPTkZJR19FTkFCTEUsCj4gKwkJICAgICAgIG1hc3Rlci0+cmVncyArIFJF R19JQklfQ09ORklHKTsKPiArCQl3cml0ZWwocmVhZGwobWFzdGVyLT5yZWdzICsgUkVHX0lSUV9N QVNLKSB8IH5JUlFfUEVORElOR19JQklfUEVORElORywKPiArCQkgICAgICAgbWFzdGVyLT5yZWdz ICsgUkVHX0lSUV9NQVNLKTsKPiArCX0KPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IGFkaV9pM2NfbWFzdGVyX2VuYWJsZV9pYmkoc3RydWN0IGkzY19kZXZfZGVzYyAq ZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgaTNjX21hc3Rlcl9jb250cm9sbGVyICptID0gaTNjX2Rldl9n ZXRfbWFzdGVyKGRldik7Cj4gKwlzdHJ1Y3QgYWRpX2kzY19tYXN0ZXIgKm1hc3RlciA9IHRvX2Fk aV9pM2NfbWFzdGVyKG0pOwo+ICsKPiArCXdyaXRlbChSRUdfSUJJX0NPTkZJR19MSVNURU4gfCBS RUdfSUJJX0NPTkZJR19FTkFCTEUsCj4gKwkgICAgICAgbWFzdGVyLT5yZWdzICsgUkVHX0lCSV9D T05GSUcpOwo+ICsKPiArCXdyaXRlbChyZWFkbChtYXN0ZXItPnJlZ3MgKyBSRUdfSVJRX01BU0sp IHwgSVJRX1BFTkRJTkdfSUJJX1BFTkRJTkcsCj4gKwkgICAgICAgbWFzdGVyLT5yZWdzICsgUkVH X0lSUV9NQVNLKTsKPiArCj4gKwlyZXR1cm4gaTNjX21hc3Rlcl9lbmVjX2xvY2tlZChtLCBkZXYt PmluZm8uZHluX2FkZHIsCj4gKwkJCQkgICAgICBJM0NfQ0NDX0VWRU5UX1NJUik7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgYWRpX2kzY19tYXN0ZXJfcmVxdWVzdF9pYmkoc3RydWN0IGkzY19kZXZf ZGVzYyAqZGV2LAo+ICsJCQkJICAgICAgY29uc3Qgc3RydWN0IGkzY19pYmlfc2V0dXAgKnJlcSkK PiArewo+ICsJc3RydWN0IGkzY19tYXN0ZXJfY29udHJvbGxlciAqbSA9IGkzY19kZXZfZ2V0X21h c3RlcihkZXYpOwo+ICsJc3RydWN0IGFkaV9pM2NfbWFzdGVyICptYXN0ZXIgPSB0b19hZGlfaTNj X21hc3RlcihtKTsKPiArCXN0cnVjdCBhZGlfaTNjX2kyY19kZXZfZGF0YSAqZGF0YTsKPiArCXVu c2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKwl1bnNpZ25lZCBpbnQgaTsKPiArCj4gKwlkYXRhID0gaTNj X2Rldl9nZXRfbWFzdGVyX2RhdGEoZGV2KTsKPiArCWRhdGEtPmliaV9wb29sID0gaTNjX2dlbmVy aWNfaWJpX2FsbG9jX3Bvb2woZGV2LCByZXEpOwo+ICsJaWYgKElTX0VSUihkYXRhLT5pYmlfcG9v bCkpCj4gKwkJcmV0dXJuIFBUUl9FUlIoZGF0YS0+aWJpX3Bvb2wpOwo+ICsKPiArCXNwaW5fbG9j a19pcnFzYXZlKCZtYXN0ZXItPmliaS5sb2NrLCBmbGFncyk7Cj4gKwlmb3IgKGkgPSAwOyBpIDwg bWFzdGVyLT5pYmkubnVtX3Nsb3RzOyBpKyspIHsKPiArCQlpZiAoIW1hc3Rlci0+aWJpLnNsb3Rz W2ldKSB7Cj4gKwkJCWRhdGEtPmliaSA9IGk7Cj4gKwkJCW1hc3Rlci0+aWJpLnNsb3RzW2ldID0g ZGV2Owo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwl9Cj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZtYXN0ZXItPmliaS5sb2NrLCBmbGFncyk7Cj4gKwo+ICsJaWYgKGkgPCBtYXN0ZXItPmliaS5u dW1fc2xvdHMpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJaTNjX2dlbmVyaWNfaWJpX2ZyZWVfcG9v bChkYXRhLT5pYmlfcG9vbCk7Cj4gKwlkYXRhLT5pYmlfcG9vbCA9IE5VTEw7Cj4gKwo+ICsJcmV0 dXJuIC1FTk9TUEM7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGFkaV9pM2NfbWFzdGVyX2ZyZWVf aWJpKHN0cnVjdCBpM2NfZGV2X2Rlc2MgKmRldikKPiArewo+ICsJc3RydWN0IGkzY19tYXN0ZXJf Y29udHJvbGxlciAqbSA9IGkzY19kZXZfZ2V0X21hc3RlcihkZXYpOwo+ICsJc3RydWN0IGFkaV9p M2NfbWFzdGVyICptYXN0ZXIgPSB0b19hZGlfaTNjX21hc3RlcihtKTsKPiArCXN0cnVjdCBhZGlf aTNjX2kyY19kZXZfZGF0YSAqZGF0YSA9IGkzY19kZXZfZ2V0X21hc3Rlcl9kYXRhKGRldik7Cj4g Kwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsKPiArCXNwaW5fbG9ja19pcnFzYXZlKCZtYXN0ZXIt PmliaS5sb2NrLCBmbGFncyk7Cj4gKwltYXN0ZXItPmliaS5zbG90c1tkYXRhLT5pYmldID0gTlVM TDsKPiArCWRhdGEtPmliaSA9IC0xOwo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFzdGVy LT5pYmkubG9jaywgZmxhZ3MpOwo+ICsKPiArCWkzY19nZW5lcmljX2liaV9mcmVlX3Bvb2woZGF0 YS0+aWJpX3Bvb2wpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBhZGlfaTNjX21hc3Rlcl9yZWN5 Y2xlX2liaV9zbG90KHN0cnVjdCBpM2NfZGV2X2Rlc2MgKmRldiwKPiArCQkJCQkgICAgc3RydWN0 IGkzY19pYmlfc2xvdCAqc2xvdCkKPiArewo+ICsJc3RydWN0IGFkaV9pM2NfaTJjX2Rldl9kYXRh ICpkYXRhID0gaTNjX2Rldl9nZXRfbWFzdGVyX2RhdGEoZGV2KTsKPiArCj4gKwlpM2NfZ2VuZXJp Y19pYmlfcmVjeWNsZV9zbG90KGRhdGEtPmliaV9wb29sLCBzbG90KTsKPiArfQo+ICsKPiArc3Rh dGljIGNvbnN0IHN0cnVjdCBpM2NfbWFzdGVyX2NvbnRyb2xsZXJfb3BzIGFkaV9pM2NfbWFzdGVy X29wcyA9IHsKPiArCS5idXNfaW5pdCA9IGFkaV9pM2NfbWFzdGVyX2J1c19pbml0LAo+ICsJLmJ1 c19jbGVhbnVwID0gYWRpX2kzY19tYXN0ZXJfYnVzX2NsZWFudXAsCj4gKwkuYXR0YWNoX2kzY19k ZXYgPSBhZGlfaTNjX21hc3Rlcl9hdHRhY2hfaTNjX2RldiwKPiArCS5yZWF0dGFjaF9pM2NfZGV2 ID0gYWRpX2kzY19tYXN0ZXJfcmVhdHRhY2hfaTNjX2RldiwKPiArCS5kZXRhY2hfaTNjX2RldiA9 IGFkaV9pM2NfbWFzdGVyX2RldGFjaF9pM2NfZGV2LAo+ICsJLmF0dGFjaF9pMmNfZGV2ID0gYWRp X2kzY19tYXN0ZXJfYXR0YWNoX2kyY19kZXYsCj4gKwkuZGV0YWNoX2kyY19kZXYgPSBhZGlfaTNj X21hc3Rlcl9kZXRhY2hfaTJjX2RldiwKPiArCS5kb19kYWEgPSBhZGlfaTNjX21hc3Rlcl9kb19k YWEsCj4gKwkuc3VwcG9ydHNfY2NjX2NtZCA9IGFkaV9pM2NfbWFzdGVyX3N1cHBvcnRzX2NjY19j bWQsCj4gKwkuc2VuZF9jY2NfY21kID0gYWRpX2kzY19tYXN0ZXJfc2VuZF9jY2NfY21kLAo+ICsJ LnByaXZfeGZlcnMgPSBhZGlfaTNjX21hc3Rlcl9wcml2X3hmZXJzLAo+ICsJLmkyY194ZmVycyA9 IGFkaV9pM2NfbWFzdGVyX2kyY194ZmVycywKPiArCS5yZXF1ZXN0X2liaSA9IGFkaV9pM2NfbWFz dGVyX3JlcXVlc3RfaWJpLAo+ICsJLmVuYWJsZV9pYmkgPSBhZGlfaTNjX21hc3Rlcl9lbmFibGVf aWJpLAo+ICsJLmRpc2FibGVfaWJpID0gYWRpX2kzY19tYXN0ZXJfZGlzYWJsZV9pYmksCj4gKwku ZnJlZV9pYmkgPSBhZGlfaTNjX21hc3Rlcl9mcmVlX2liaSwKPiArCS5yZWN5Y2xlX2liaV9zbG90 ID0gYWRpX2kzY19tYXN0ZXJfcmVjeWNsZV9pYmlfc2xvdCwKPiArfTsKPiArCj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGFkaV9pM2NfbWFzdGVyX29mX21hdGNoW10gPSB7Cj4g Kwl7IC5jb21wYXRpYmxlID0gImFkaSxpM2MtbWFzdGVyIiB9LAo+ICsJe30KPiArfTsKPiArCj4g K3N0YXRpYyBpbnQgYWRpX2kzY19tYXN0ZXJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldikKPiArewo+ICsJc3RydWN0IGFkaV9pM2NfbWFzdGVyICptYXN0ZXI7Cj4gKwl1bnNpZ25l ZCBpbnQgdmVyc2lvbjsKPiArCWludCByZXQsIGlycTsKPiArCj4gKwltYXN0ZXIgPSBkZXZtX2t6 YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCptYXN0ZXIpLCBHRlBfS0VSTkVMKTsKPiArCWlmICgh bWFzdGVyKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCW1hc3Rlci0+cmVncyA9IGRldm1f cGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZShwZGV2LCAwKTsKPiArCWlmIChJU19FUlIobWFzdGVy LT5yZWdzKSkKPiArCQlyZXR1cm4gUFRSX0VSUihtYXN0ZXItPnJlZ3MpOwo+ICsKPiArCW1hc3Rl ci0+Y2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJzX2F4aV9hY2xrIik7Cj4gKwlpZiAo SVNfRVJSKG1hc3Rlci0+Y2xrKSkKPiArCQlyZXR1cm4gUFRSX0VSUihtYXN0ZXItPmNsayk7Cj4g Kwo+ICsJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKPiArCWlmIChpcnEgPCAwKQo+ ICsJCXJldHVybiBpcnE7Cj4gKwo+ICsJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKG1hc3Rlci0+ Y2xrKTsKCnVzZSBkZXZtX2Nsa19nZXRfZW5hYmxlZCgpIGluc3RlYWQgb2YgZGV2bV9jbGtfZ2V0 KCkgdG8gc2ltcGxlIGVyciBoYW5kbGUuCgo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGVycl9jbGtf ZGlzYWJsZTsKPiArCj4gKwl2ZXJzaW9uID0gcmVhZGwobWFzdGVyLT5yZWdzICsgUkVHX1ZFUlNJ T04pOwo+ICsJaWYgKFZFUlNJT05fTUFKT1IodmVyc2lvbikgIT0gMCkgewo+ICsJCWRldl9lcnIo JnBkZXYtPmRldiwgIlVuc3VwcG9ydGVkIElQIHZlcnNpb24gJXUuJXUuJWNcbiIsCj4gKwkJCVZF UlNJT05fTUFKT1IodmVyc2lvbiksCj4gKwkJCVZFUlNJT05fTUlOT1IodmVyc2lvbiksCj4gKwkJ CVZFUlNJT05fUEFUQ0godmVyc2lvbikpOwo+ICsJCXJldCA9IC1FSU5WQUw7Cj4gKwkJZ290byBl cnJfY2xrX2Rpc2FibGU7Cj4gKwl9Cj4gKwo+ICsJd3JpdGVsKDB4MDAsIG1hc3Rlci0+cmVncyAr IFJFR19FTkFCTEUpOwo+ICsJd3JpdGVsKDB4MDAsIG1hc3Rlci0+cmVncyArIFJFR19JUlFfTUFT Syk7Cj4gKwo+ICsJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBpcnEsIGFkaV9p M2NfbWFzdGVyX2lycSwgMCwKPiArCQkJICAgICAgIGRldl9uYW1lKCZwZGV2LT5kZXYpLCBtYXN0 ZXIpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGVycl9jbGtfZGlzYWJsZTsKCm5lZWRuJ3QgZ290 byBpZiB5b3UgdXNlIGRldm1fY2xrX2dldF9lbmFibGVkKCkKCkZyYW5rCj4gKwo+ICsJcGxhdGZv cm1fc2V0X2RydmRhdGEocGRldiwgbWFzdGVyKTsKPiArCj4gKwltYXN0ZXItPm1heGRldnMgPSBN QVhfREVWUzsKPiArCW1hc3Rlci0+ZnJlZV9ycl9zbG90cyA9IEdFTk1BU0sobWFzdGVyLT5tYXhk ZXZzLCAxKTsKPiArCj4gKwl3cml0ZWwoSVJRX1BFTkRJTkdfQ01EUl9QRU5ESU5HLCBtYXN0ZXIt PnJlZ3MgKyBSRUdfSVJRX01BU0spOwo+ICsKPiArCXNwaW5fbG9ja19pbml0KCZtYXN0ZXItPmli aS5sb2NrKTsKPiArCW1hc3Rlci0+aWJpLm51bV9zbG90cyA9IDE1Owo+ICsJbWFzdGVyLT5pYmku c2xvdHMgPSBkZXZtX2tjYWxsb2MoJnBkZXYtPmRldiwgbWFzdGVyLT5pYmkubnVtX3Nsb3RzLAo+ ICsJCQkJCSBzaXplb2YoKm1hc3Rlci0+aWJpLnNsb3RzKSwKPiArCQkJCQkgR0ZQX0tFUk5FTCk7 Cj4gKwlpZiAoIW1hc3Rlci0+aWJpLnNsb3RzKSB7Cj4gKwkJcmV0ID0gLUVOT01FTTsKPiArCQln b3RvIGVycl9jbGtfZGlzYWJsZTsKPiArCX0KPiArCj4gKwlyZXQgPSBpM2NfbWFzdGVyX3JlZ2lz dGVyKCZtYXN0ZXItPmJhc2UsICZwZGV2LT5kZXYsCj4gKwkJCQkgICZhZGlfaTNjX21hc3Rlcl9v cHMsIGZhbHNlKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBlcnJfY2xrX2Rpc2FibGU7Cj4gKwo+ ICsJcmV0dXJuIDA7Cj4gKwo+ICtlcnJfY2xrX2Rpc2FibGU6Cj4gKwljbGtfZGlzYWJsZV91bnBy ZXBhcmUobWFzdGVyLT5jbGspOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIGFkaV9pM2NfbWFzdGVyX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 KQo+ICt7Cj4gKwlzdHJ1Y3QgYWRpX2kzY19tYXN0ZXIgKm1hc3RlciA9IHBsYXRmb3JtX2dldF9k cnZkYXRhKHBkZXYpOwo+ICsKPiArCWkzY19tYXN0ZXJfdW5yZWdpc3RlcigmbWFzdGVyLT5iYXNl KTsKPiArCj4gKwl3cml0ZWwoMHhmZiwgbWFzdGVyLT5yZWdzICsgUkVHX0lSUV9QRU5ESU5HKTsK PiArCXdyaXRlbCgweDAwLCBtYXN0ZXItPnJlZ3MgKyBSRUdfSVJRX01BU0spOwo+ICsJd3JpdGVs KDB4MDEsIG1hc3Rlci0+cmVncyArIFJFR19FTkFCTEUpOwo+ICsKPiArCWNsa19kaXNhYmxlX3Vu cHJlcGFyZShtYXN0ZXItPmNsayk7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1f ZHJpdmVyIGFkaV9pM2NfbWFzdGVyID0gewo+ICsJLnByb2JlID0gYWRpX2kzY19tYXN0ZXJfcHJv YmUsCj4gKwkucmVtb3ZlID0gYWRpX2kzY19tYXN0ZXJfcmVtb3ZlLAo+ICsJLmRyaXZlciA9IHsK PiArCQkubmFtZSA9ICJhZGktaTNjLW1hc3RlciIsCj4gKwkJLm9mX21hdGNoX3RhYmxlID0gYWRp X2kzY19tYXN0ZXJfb2ZfbWF0Y2gsCj4gKwl9LAo+ICt9Owo+ICttb2R1bGVfcGxhdGZvcm1fZHJp dmVyKGFkaV9pM2NfbWFzdGVyKTsKPiArCj4gK01PRFVMRV9BVVRIT1IoIkpvcmdlIE1hcnF1ZXMg PGpvcmdlLm1hcnF1ZXNAYW5hbG9nLmNvbT4iKTsKPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJBbmFs b2cgRGV2aWNlcyBJM0MgbWFzdGVyIGRyaXZlciIpOwo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7 Cj4KPiAtLQo+IDIuNDkuMAo+CgotLSAKbGludXgtaTNjIG1haWxpbmcgbGlzdApsaW51eC1pM2NA bGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2xpbnV4LWkzYwo=