From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from BN8PR05CU002.outbound.protection.outlook.com (mail-eastus2azon11011022.outbound.protection.outlook.com [52.101.57.22]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D930B361975; Mon, 14 Sep 2026 18:52:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.57.22 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789411924; cv=fail; b=oqlAc3uxaN0k/syzKq9x3mU1QTyK+kOEX+AFgHuQFoKs5eZLlqQqpvI0MSE7xlGgRGRDSqRLnhIE08HvRL1kK9TFgdR+lLDl8B9YK7zyTJ2n34+bkEDzSwYbfphEmJBtgANgtbpGqm2ye04nB4b6ub9jn7HNJIxvisYQOwEZSDI= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789411924; c=relaxed/simple; bh=/muyriciLVbVQhEykMsdwEScJ6hGSpyIgaF2IzZaZ8U=; h=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To: Content-Type:MIME-Version; b=lFRpN4JtWMH+jsLvbLmJ21M+zrPVdYNKdprvY74Ze3fDXwbwo8gfoTTa2Sw1cUCSgOj1hG8oqr0aKKcgQY84hWWwDwBM0TOb/bGXuHCn0StmJljBsOslkAjSa3r8zLvbrC/0WxvTyHeSb6g9DsKU2NIKaimNFdHjH+J+QpI/xTU= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=djauQ7bU; arc=fail smtp.client-ip=52.101.57.22 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="djauQ7bU" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=CBSQb3EYqyDNVo/I/r6JXu1iXmdpHStE8z85DKcn+OrVa8LZLKUWGl8E9QsUadRMxVjMstsCKuaQbt/6AcsTvS6taVdRz9xzmheScylEA7O8b5+o1HjMovhzmOJlUdFiZ7MGEwOIJUBG+DMY/YqQjyRFqDcsvdCh3rAZEXHWXxQamZorw9n9uSSSb+q6t5j6Vj26qsflUw2ASNKPmxydMA6lo7EFXSLcQXKC/vJ2/2g2NeXAjYwXCTDtIlWZhybFAKUh9vAEzjZyxte663s8+lSH1UE9bOnDnEYZOolt7mzukyM+42w7xx65JekekHXO6+VlWlIlAULB1gdE1x6ryg== 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=efHRz4XUN/q5RqWjU7/CffSePQyNHgp9DDSSQSdPIik=; b=V5154oQz6Ieq0ThwCew0QlpOG1WccJqdO9T7duWQk6wpaOA6xzLF1d7WHBpGzAZJbLeEdAVrS4YUk+LOYyZ5AzVAfusUU+mRjJzJUrBKzErVwi/JmUeJCnQUe9oTIz1q8qAX0kqDJtEXma8Rx5g3kO004r1jTpdRiJMuq9jFHBFgPlQQGyboa0L3n26Y0nNXCc3Be/Bl0J0lXQwYaz+IzyaeUn1E6sZ7kt9MhGRUdhCoR1otewE37aU1lDNPfJow4eu8susDgmUsyBzct2SJoDXbwrt0y14s3sJaMC/aZlsuTHH6a+9igXpWtMQBpjOKZL0nhQcuaTKHasixjc6Bqw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=efHRz4XUN/q5RqWjU7/CffSePQyNHgp9DDSSQSdPIik=; b=djauQ7bUdePh+zU9966gy5pzCb+tOUxT79Jn+o+2jnyQsdW4fcI3TcO3MqPnHHQpV1pmdq+gQabzu26KDFr/82QQU0Go0Uw/wT8cVqeDLV0F+VmtTerpqsJKih85XSsmDqU3/TI/Nae10Jr6QqbexDav/mMq2uPXp7Sqf560QMA= Received: from DM4PR12MB6543.namprd12.prod.outlook.com (2603:10b6:8:8c::6) by CH3PR12MB8903.namprd12.prod.outlook.com (2603:10b6:610:17a::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.10; Mon, 14 Sep 2026 18:51:54 +0000 Received: from DM4PR12MB6543.namprd12.prod.outlook.com ([fe80::5f95:bdd2:c838:19a4]) by DM4PR12MB6543.namprd12.prod.outlook.com ([fe80::5f95:bdd2:c838:19a4%5]) with mapi id 15.21.0406.007; Mon, 14 Sep 2026 18:51:54 +0000 From: "Dayananda, Vivekananda" To: "dumitru.ceclan@analog.com" , Tomi Valkeinen , Mauro Carvalho Chehab , Sakari Ailus , Laurent Pinchart , Julien Massot , Rob Herring , =?utf-8?B?TmlrbGFzIFPDtmRlcmx1bmQ=?= , Greg Kroah-Hartman CC: Tomi Valkeinen , "mitrutzceclan@gmail.com" , "linux-media@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "devicetree@vger.kernel.org" , "linux-staging@lists.linux.dev" , "linux-gpio@vger.kernel.org" , =?utf-8?B?TmlrbGFzIFPDtmRlcmx1bmQ=?= , "martin.hecht@avnet.eu" , Andrian Suciu , Cosmin Tanislav , Cory Keitz , "Kohn, Chris" Subject: RE: [PATCH v17 20/22] media: i2c: maxim-serdes: add MAX96724 driver Thread-Topic: [PATCH v17 20/22] media: i2c: maxim-serdes: add MAX96724 driver Thread-Index: AQHdRHocjyzDu0lz4Uiknk3/wuXmIA== Date: Mon, 14 Sep 2026 18:51:54 +0000 Message-ID: References: <20260909-gmsl2-3_serdes-v17-0-002499e534e8@analog.com> <20260909-gmsl2-3_serdes-v17-20-002499e534e8@analog.com> In-Reply-To: <20260909-gmsl2-3_serdes-v17-20-002499e534e8@analog.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: MSIP_Label_f39aa4b3-b62d-42bf-8097-75e2c573ddfa_ActionId=c651727a-dda1-44b1-aec9-0532eba69886;MSIP_Label_f39aa4b3-b62d-42bf-8097-75e2c573ddfa_ContentBits=0;MSIP_Label_f39aa4b3-b62d-42bf-8097-75e2c573ddfa_Enabled=true;MSIP_Label_f39aa4b3-b62d-42bf-8097-75e2c573ddfa_Method=Privileged;MSIP_Label_f39aa4b3-b62d-42bf-8097-75e2c573ddfa_Name=Non-Business v26;MSIP_Label_f39aa4b3-b62d-42bf-8097-75e2c573ddfa_SetDate=2026-09-14T18:50:53Z;MSIP_Label_f39aa4b3-b62d-42bf-8097-75e2c573ddfa_SiteId=3dd8961f-e488-4e60-8e11-a82d994e183d;MSIP_Label_f39aa4b3-b62d-42bf-8097-75e2c573ddfa_Tag=10, 0, 1, 1; authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DM4PR12MB6543:EE_|CH3PR12MB8903:EE_ x-ms-office365-filtering-correlation-id: 80fd5d02-978e-4932-80cc-08df12913ebe x-ld-processed: 3dd8961f-e488-4e60-8e11-a82d994e183d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|7416014|23010399003|1800799024|366016|376014|6049299003|10067099003|3023799007|4143699003|6133799003|22082099003|18002099003|18092099006|5023799004|56012099006|11063799006|4053099003|38070700021; x-microsoft-antispam-message-info: soeZMU5Lj/pFbY0pxOnr69BhQAACk4sA4pC+NkgNk4SAw4DI7JPmoqzA78zJUcrk32m63UxsIKp2IZdTkOmh5s8XWa+Zq/Rm2nZTeGKfN2yNHiJMnnV/RljA6tH+Nnei2gTr0AhF+D9oVVDJ4zyuPT12bQrIDzK2xG0frRsFsIygV2WiVme6L4pWkH+fJZdUR3wRTcwMW0LjrqylRVMBsB4xOA+EoUCWvPNWzfmzS2agHkaAXVOKe8HdgQYfu4U1feM3HCwitudFPPCBbG0axnJVgIiuDDVWDglmz8EAe34+dXo7OvUZh80Rn5Op5mSNxwb37UkkfQ9FdKEGxFhkfMJndV9PRFCkR2V/AW881xjAIYjAWzDuBBJ560TgZ0jeD2uA5UlDWcmXTECoP9Lb7/9SEUykWTguF1/opWP8KlSi0A9I133vCSSBXTloQm26U/x8j1rB5wMDv5uIBPgBnqd4VC3xk+gtrdyXWQppp/QOXvJEO/qC3bzuymANCd9hvBBkBdPzyX8edBTIlHubiSk/1PWCaXEhpJSkwfUyc2B6KXbzxqBTXe9sN+kJQyRNbqIfwLSs5d6LGAWZamrGdm6knFQKRowZEXqXqZ3mV19o89vfWuNcphctedLVluGFrL65oAsMvXx9fwnWJspcVrD/8U5W6mojSXg6ohOsZA4CNJ6TjbsYwylCxIGgUwfX7YQ+QGm5ZD+ap6wWhih4N0O/sJ/aJqPyTlFiBq/CC3s= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR12MB6543.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(23010399003)(1800799024)(366016)(376014)(6049299003)(10067099003)(3023799007)(4143699003)(6133799003)(22082099003)(18002099003)(18092099006)(5023799004)(56012099006)(11063799006)(4053099003)(38070700021);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?TUxoSjA0dE5ZektyVWNSaWhBVmpaeGZQM3dQWU8wbk9qNWtxd2pwellQL2Ux?= =?utf-8?B?cytiUEhMMlRuVytHUmlTaHZ1eTlYU3EzQi9qdkRVMnlFZ2NtZktWeHU4RmRh?= =?utf-8?B?SnU4TVlUei9iRVBkMXI3N2g3dXNMQjFkbjhSZWF5d3JRU2lWS1kvMjBOVWJP?= =?utf-8?B?SEVIOGRIejQ2YnVjVXFkN0xjTFJMcTZ5MlJVQktwSHBUaDJabVF3OVJETDRT?= =?utf-8?B?UWtFV3AxUDJOcHZudEUvcm5Fd2lCTjF6Mnl2VmhVQnkxNEo1c0JSK3lOekxl?= =?utf-8?B?N2Q1L3Q2Z2U1MVZESDFXT01yc2ZnaVV5cUVFaFU3a2tCNkxxTnl1LzdtTklr?= =?utf-8?B?VGNia2dzM1pyMzVISHBvbzRWN293UHZoMEo0NnlTVXFTcmRHQm9JR2VIL0py?= =?utf-8?B?eUh4YVl3QUMrTnY2WFpEaHVZbEY4UUlXV3hZc2NtOE4zMVd1SkF0dnBTbVBJ?= =?utf-8?B?K2FTNXhoU29jR2JrN0FueXQ5N1U3ZXJnK0pvVkJBdzhtVk1XWElzb0NRUFdM?= =?utf-8?B?a2VJa1pRYjZpcFNIRG1JcHZITCtWc283bUNFVGZFMDZvM3FLQVlVN0VEZWFO?= =?utf-8?B?eTRMUXdUSGZvL1M3QjNCcHlnZml2VXNLWU9Ga3ZlWHN3bEtySnlEUyt1RWcw?= =?utf-8?B?b0JxZGRTUU9LR1hDUzlXZzhDQmh3Z1NDeGVadUNqRGw2c3RqRVVQZXFGVzRz?= =?utf-8?B?S0VGd1FEQXFGYkJhQ1pIQ0FTeXZJSUlkK2VMYjVPclhEZG9BSDg2MWcxTFNh?= =?utf-8?B?YnZpU3FscG5Cb0xvVVJ4Q1UyV2tOSnE0VkpITFM5Sy83VGs1UmVrUDdxKys1?= =?utf-8?B?K1N0Wjc2UlByTTRRWFk0cldtRVhXSnpnL1p6N0U1ZkhDMk00ZG5zNVJ5ZU9G?= =?utf-8?B?SnRURmo3T0JuRFRzUjlVTjdaL2loUzViQVI4TGhnbnJiVUpncDdwL2RDcndy?= =?utf-8?B?RFNYZnE4YThDR3d5cHlzOHRBUTVISHFnODcrN0FTaEVHZE9aVXhyVTBXRSsz?= =?utf-8?B?UTRuWTZ2MmQ5OE1GOWRhc3lwM3ZSakxRMExLd1MzbUlidWVvR3NxcmJPQ1Ew?= =?utf-8?B?Ykt3aTRsU010dEY5V0JBT1prTUZNbEEzNVBSS0plLzdsTE04V0RGZ3ZTSDhs?= =?utf-8?B?NUdLbmxFT3dzWVNSSGNsWGdzR2FLMlh1OVpQa2FicG5xL0thUG4wWEdUV2Jw?= =?utf-8?B?REtFaWN4am8wVktNWDR5dDNtYlAyRjZBZENGMmwvaFRkU2xVYkJ6aEZtU2tW?= =?utf-8?B?Ry9BaUJoTUVXdG1MOVNDYVpHRHVHTys1Q2svSEsxOWJpM05WVU5JV1YwVmhv?= =?utf-8?B?alk5TGRacEd6UkFMcEphcWdYSlJQWitDWm1KWGtDRnNVRExhaTRQZ1h5L1hq?= =?utf-8?B?dUkyTW5RT0Y1NCtETEM1TXp2V2htZXlmcXBLTkdPYkE2Z0QrMXNBUzVCc2pY?= =?utf-8?B?ZEFEOVluOTRTZGwwdTYrQkxRS2xGK1pVOU91RExGbkNIZFNDb1JZWVdvU0NL?= =?utf-8?B?cEcyRi9CRFY4bTE0NmJFdElDa2NCSFZoLzNSMXVvdy9MdnVDamc0L0w1UytP?= =?utf-8?B?Mmhad1k3ZFZwU3VxMXhleTY1YlpPSTFPT3JUN1dmbXJNbnlIUnZsaVlWQUta?= =?utf-8?B?bEFFY1JDaGxiZnZQSCtKYzZiZG4zT2hRK21yUXFrTXlVM3IzbWxJeWxQdHBq?= =?utf-8?B?cnozWFB2OXg0SE1lK2hKTmZrT2JzRlFkcDdIR3puZUNKRmEydnQ4MTNERm50?= =?utf-8?B?dVRBN2N3VFRhazRFaElxRHdRTDNhemtzQ2ttc2M3a2tpRmRtRDJuRCtwNU9O?= =?utf-8?B?SlZjeFBTSm9XLzBJZnhiOXFJM2ZBcmVrOFZmTCtNZC91eUp0cGx6RlZoVmND?= =?utf-8?B?aXBSVmpQcXJ1MFZuQVJkeEgrdStySnZtakQrMm9mN3lSSTh4ODU5aXM3VXFx?= =?utf-8?B?RkFDdW56YktIZmorZG51MUxWN2lLVWw3VWVkRjFjV0JndzcwTXdmZTgrbGtX?= =?utf-8?B?WTRZQUp0N2huT1pDVnVRaC9BRFdnQjdmNW93bU13bnY0OWZXRTBodmE3NDAz?= =?utf-8?B?U1laaEExdWhCeWtLRmpTa3RwVTVKM2xWWU5uUDBUY0E1cWRYdDhMTXc3RWRr?= =?utf-8?B?L0MvdGZQUTRhNDdOQWNPOHBzTlVKb3Znc3A2MG4wbjk4U0pYSXg5aDJWNXVV?= =?utf-8?B?dHdkZ0MybVNBcFJIemhtS0JyR3E0S094Y2JhaXErUFRFZUllQ2JKZnZSUFJL?= =?utf-8?B?cndKVzladTZmWkUyTHJuMEFFWUVOQTRLZGFuZmhMQnQ1MHlYbnFMOHJtdU5C?= =?utf-8?Q?wanXS+sSTHV0F977Qb?= Content-Type: multipart/mixed; boundary="_002_DM4PR12MB6543DF508C0092AD20BDE75CE8BB2DM4PR12MB6543namp_" Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM4PR12MB6543.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 80fd5d02-978e-4932-80cc-08df12913ebe X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Sep 2026 18:51:54.1888 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: PF+Ig8qAS+LtlenAYakMOBE+ydK96oT9qxcwFUokXHLiz7uQIBU3c3IFvydQCfUdUUXXiuKHNUCUD0XDLiihdQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR12MB8903 --_002_DM4PR12MB6543DF508C0092AD20BDE75CE8BB2DM4PR12MB6543namp_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgRHVtaXRydSwgQ29zbWluLA0KDQpSZWdhcmRpbmcgcGF0Y2ggMjAvMjIsIHdoaWxlIHdvcmtp bmcgd2l0aCB0aGUgTUFYOTY3MjQgZHJpdmVyIG9uIEt2MjYwIHBsYXRmb3JtLCBJIG5vdGljZWQg dGhhdCBtYXg5NjcyNF9pbml0KCkgdW5jb25kaXRpb25hbGx5IGVuYWJsZXMgTUFYOTY3MjRfUkVH N19DQ19DUk9TU09WRVJfU0VMIGZvciBhbGwgbGlua3MuIFRoaXMgaXMgaW5jb3JyZWN0IHdoZW4g J21heGltLGNvbnRyb2wtY2hhbm5lbC1wb3J0JyBpcyBvbWl0dGVkIG9yIHNldCB0byAwLiBUaGUg YmluZGluZyBkZWZpbmVzIHBvcnQgMCBhcyB0aGUgZGVmYXVsdCwgYW5kIHRoZSBzZXJpYWxpemVy IGNvbnRyb2wgY2hhbm5lbCBpcyBhdmFpbGFibGUgdGhyb3VnaCBsb2NhbCBJMkMgcG9ydCAwIHdp dGhvdXQgY3Jvc3NvdmVyLiBUaGUgY3Jvc3NvdmVyIHNob3VsZCByZW1haW4gZGlzYWJsZWQgZm9y IHBvcnQgMCBhbmQgc2hvdWxkIG9ubHkgYmUgZW5hYmxlZCB3aGVuICdtYXhpbSxjb250cm9sLWNo YW5uZWwtcG9ydCcgaXMgc2V0IHRvIDEuDQoNClRoZSBhdHRhY2hlZCBpbmNyZW1lbnRhbCBwYXRj aCBhZ2FpbnN0IHYxNyBwYXRjaCAyMC8yMiB0cmFja3Mgd2hldGhlciBwb3J0IDEgd2FzIHNlbGVj dGVkIGFuZDoNCi0gZXhwbGljaXRseSBjbGVhcnMgdGhlIGNyb3Nzb3ZlciBiaXRzIGZvciBwb3J0 IDAgb3Igd2hlbiB0aGUgcHJvcGVydHkgaXMgb21pdHRlZC4NCi0gZW5hYmxlcyB0aGUgY3Jvc3Nv dmVyIGJpdHMgb25seSB3aGVuIHBvcnQgMSBpcyBzZWxlY3RlZC4NCkNvdWxkIHlvdSBwbGVhc2Ug Zm9sZCB0aGlzIGZpeCBpbnRvIHRoZSBuZXh0IHJldmlzaW9uIG9mIHRoZSBzZXJpZXM/DQoNClJl Z2FyZHMsDQpWaXZla2FuYW5kYQ0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9t OiBEdW1pdHJ1IENlY2xhbiB2aWEgQjQgUmVsYXkNCj4gPGRldm51bGwrZHVtaXRydS5jZWNsYW4u YW5hbG9nLmNvbUBrZXJuZWwub3JnPg0KPiBTZW50OiBXZWRuZXNkYXksIFNlcHRlbWJlciA5LCAy MDI2IDY6MjggQU0NCj4gVG86IFRvbWkgVmFsa2VpbmVuIDx0b21pLnZhbGtlaW5lbityZW5lc2Fz QGlkZWFzb25ib2FyZC5jb20+OyBNYXVybw0KPiBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAa2Vy bmVsLm9yZz47IFNha2FyaSBBaWx1cw0KPiA8c2FrYXJpLmFpbHVzQGxpbnV4LmludGVsLmNvbT47 IExhdXJlbnQgUGluY2hhcnQNCj4gPGxhdXJlbnQucGluY2hhcnRAaWRlYXNvbmJvYXJkLmNvbT47 IEp1bGllbiBNYXNzb3QNCj4gPGp1bGllbi5tYXNzb3RAY29sbGFib3JhLmNvbT47IFJvYiBIZXJy aW5nIDxyb2JoQGtlcm5lbC5vcmc+OyBOaWtsYXMNCj4gU8O2ZGVybHVuZCA8bmlrbGFzLnNvZGVy bHVuZEByYWduYXRlY2guc2U+OyBHcmVnIEtyb2FoLUhhcnRtYW4NCj4gPGdyZWdraEBsaW51eGZv dW5kYXRpb24ub3JnPg0KPiBDYzogVG9taSBWYWxrZWluZW4gPHRvbWkudmFsa2VpbmVuQGlkZWFz b25ib2FyZC5jb20+OyBEdW1pdHJ1IENlY2xhbg0KPiA8ZHVtaXRydS5jZWNsYW5AYW5hbG9nLmNv bT47IG1pdHJ1dHpjZWNsYW5AZ21haWwuY29tOyBsaW51eC0NCj4gbWVkaWFAdmdlci5rZXJuZWwu b3JnOyBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnOw0KPiBkZXZpY2V0cmVlQHZnZXIua2Vy bmVsLm9yZzsgbGludXgtc3RhZ2luZ0BsaXN0cy5saW51eC5kZXY7IGxpbnV4LQ0KPiBncGlvQHZn ZXIua2VybmVsLm9yZzsgTmlrbGFzIFPDtmRlcmx1bmQNCj4gPG5pa2xhcy5zb2Rlcmx1bmQrcmVu ZXNhc0ByYWduYXRlY2guc2U+OyBNYXJ0aW4gSGVjaHQNCj4gPE1hcnRpbi5IZWNodEBhdm5ldC5l dT47IEFuZHJpYW4gU3VjaXUgPEFkcmlhbi5TdWNpdUBhbmFsb2cuY29tPjsgQ29zbWluDQo+IFRh bmlzbGF2IDxkZW1vbnNpbmd1ckBnbWFpbC5jb20+OyBDb3J5IEtlaXR6IDxja2VpdHpAYW1hem9u LmNvbT4NCj4gU3ViamVjdDogW1BBVENIIHYxNyAyMC8yMl0gbWVkaWE6IGkyYzogbWF4aW0tc2Vy ZGVzOiBhZGQgTUFYOTY3MjQgZHJpdmVyDQo+IA0KPiBGcm9tOiBDb3NtaW4gVGFuaXNsYXYgPGRl bW9uc2luZ3VyQGdtYWlsLmNvbT4NCj4gDQo+IEFkZCBhIG5ldyBNQVg5NjcyNCBkcml2ZXIgdGhh dCBhbHNvIHN1cHBvcnRzIE1BWDk2NzEyLCBNQVg5NjcyNEYgYW5kDQo+IE1BWDk2NzI0Ui4NCj4g DQo+IEludGVncmF0ZSBpdCB3aXRoIHRoZSBjb21tb24gZGVzZXJpYWxpemVyIGZyYW1ld29yaywg d2hpbGUga2VlcGluZyBjb21wYXRpYmlsaXR5DQo+IHdpdGggZXhpc3RpbmcgdXNlY2FzZXMsIGF2 b2lkaW5nIGNvZGUgZHVwbGljYXRpb24sIGFuZCBhbHNvIGVuYWJsaW5nIG1vcmUgZmVhdHVyZXMN Cj4gYWNyb3NzIGFsbCBjaGlwcy4NCj4gDQo+IFNpZ25lZC1vZmYtYnk6IENvc21pbiBUYW5pc2xh diA8ZGVtb25zaW5ndXJAZ21haWwuY29tPg0KPiBUZXN0ZWQtYnk6IE5pa2xhcyBTw7ZkZXJsdW5k IDxuaWtsYXMuc29kZXJsdW5kK3JlbmVzYXNAcmFnbmF0ZWNoLnNlPg0KPiBUZXN0ZWQtYnk6IENv cnkgS2VpdHogPGNrZWl0ekBhbWF6b24uY29tPg0KPiAtLS0NCj4gIGRyaXZlcnMvbWVkaWEvaTJj L21heGltLXNlcmRlcy9LY29uZmlnICAgIHwgICAxMyArDQo+ICBkcml2ZXJzL21lZGlhL2kyYy9t YXhpbS1zZXJkZXMvTWFrZWZpbGUgICB8ICAgIDEgKw0KPiAgZHJpdmVycy9tZWRpYS9pMmMvbWF4 aW0tc2VyZGVzL21heDk2NzI0LmMgfCAxMzM5DQo+ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrDQo+ICAzIGZpbGVzIGNoYW5nZWQsIDEzNTMgaW5zZXJ0aW9ucygrKQ0KPiANCj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvbWVkaWEvaTJjL21heGltLXNlcmRlcy9LY29uZmlnIGIvZHJpdmVycy9t ZWRpYS9pMmMvbWF4aW0tDQo+IHNlcmRlcy9LY29uZmlnDQo+IGluZGV4IGM4MTE3OTBjMDliOS4u OWQzNjIxYWU4ZDkwIDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL21lZGlhL2kyYy9tYXhpbS1zZXJk ZXMvS2NvbmZpZw0KPiArKysgYi9kcml2ZXJzL21lZGlhL2kyYy9tYXhpbS1zZXJkZXMvS2NvbmZp Zw0KPiBAQCAtMzQsMyArMzQsMTYgQEAgY29uZmlnIFZJREVPX01BWDk2NzE3DQo+IA0KPiAgCSAg VG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1v ZHVsZQ0KPiAgCSAgd2lsbCBiZSBjYWxsZWQgbWF4OTY3MTcuDQo+ICsNCj4gK2NvbmZpZyBWSURF T19NQVg5NjcyNA0KPiArCXRyaXN0YXRlICJNYXhpbSBNQVg5NjcyNCBRdWFkIERlc2VyaWFsaXpl ciBzdXBwb3J0Ig0KPiArCWRlcGVuZHMgb24gSTJDDQo+ICsJZGVwZW5kcyBvbiBWSURFT19ERVYN Cj4gKwlzZWxlY3QgVklERU9fTUFYSU1fU0VSREVTDQo+ICsJaGVscA0KPiArCSAgVGhpcyBkcml2 ZXIgc3VwcG9ydHMgdGhlIE1heGltIE1BWDk2NzEyLCBNQVg5NjcyNCwgTUFYOTY3MjRGLA0KPiAr CSAgTUFYOTY3MjRSIFF1YWQgRGVzZXJpYWxpemVycywgd2hpY2ggY29udmVydCBmcm9tIGZvdXIg R01TTDINCj4gKwkgIGxpbmtzIHRvIHVwIHRvIGZvdXIgTUlQSSBELVBIWSBvciBDLVBIWSBvdXRw dXRzLg0KPiArDQo+ICsJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9v c2UgTSBoZXJlOiB0aGUgbW9kdWxlDQo+ICsJICB3aWxsIGJlIGNhbGxlZCBtYXg5NjcyNC4NCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvaTJjL21heGltLXNlcmRlcy9NYWtlZmlsZQ0KPiBi L2RyaXZlcnMvbWVkaWEvaTJjL21heGltLXNlcmRlcy9NYWtlZmlsZQ0KPiBpbmRleCAwNGFiZGE2 YTU0MzcuLmI2ZDVhZWJmYWVlMSAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9tZWRpYS9pMmMvbWF4 aW0tc2VyZGVzL01ha2VmaWxlDQo+ICsrKyBiL2RyaXZlcnMvbWVkaWEvaTJjL21heGltLXNlcmRl cy9NYWtlZmlsZQ0KPiBAQCAtMiwzICsyLDQgQEANCj4gIG1heC1zZXJkZXMtb2JqcyA6PSBtYXhf c2VyZGVzLm8gbWF4X3Nlci5vIG1heF9kZXMubw0KPiAgb2JqLSQoQ09ORklHX1ZJREVPX01BWElN X1NFUkRFUykgKz0gbWF4LXNlcmRlcy5vDQo+ICBvYmotJChDT05GSUdfVklERU9fTUFYOTY3MTcp ICs9IG1heDk2NzE3Lm8NCj4gK29iai0kKENPTkZJR19WSURFT19NQVg5NjcyNCkgKz0gbWF4OTY3 MjQubw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9pMmMvbWF4aW0tc2VyZGVzL21heDk2 NzI0LmMNCj4gYi9kcml2ZXJzL21lZGlhL2kyYy9tYXhpbS1zZXJkZXMvbWF4OTY3MjQuYw0KPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLjQ1OGU3OGYyODUxMQ0K PiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2RyaXZlcnMvbWVkaWEvaTJjL21heGltLXNlcmRlcy9t YXg5NjcyNC5jDQo+IEBAIC0wLDAgKzEsMTMzOSBAQA0KPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjANCj4gKy8qDQo+ICsgKiBNYXhpbSBNQVg5NjcyNCBRdWFkIEdNU0wyIERl c2VyaWFsaXplciBEcml2ZXINCj4gKyAqDQo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMjUgQW5hbG9n IERldmljZXMgSW5jLg0KPiArICovDQo+ICsNCj4gKyNpbmNsdWRlIDxsaW51eC9iaXRmaWVsZC5o Pg0KPiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvZ3Bpby9j b25zdW1lci5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2kyYy5oPg0KPiArI2luY2x1ZGUgPGxpbnV4 L2lvcG9sbC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiArI2luY2x1ZGUgPGxp bnV4L29mX2dyYXBoLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvcHJvcGVydHkuaD4NCj4gKyNpbmNs dWRlIDxsaW51eC9yZWdtYXAuaD4NCj4gKw0KPiArI2luY2x1ZGUgIm1heF9kZXMuaCINCj4gKw0K PiArI2RlZmluZSBNQVg5NjcyNF9SRUcwCQkJCTB4MA0KPiArDQo+ICsjZGVmaW5lIE1BWDk2NzI0 X1JFRzMJCQkJMHgzDQo+ICsjZGVmaW5lIE1BWDk2NzI0X1JFRzNfQ0NfUE9SVF9TRUwobikJCUdF Tk1BU0soKG4pICogMiArIDEsDQo+IChuKSAqIDIpDQo+ICsjZGVmaW5lIE1BWDk2NzI0X1JFRzNf Q0NfUE9SVF9TRUxfTUFTSw0KPiAJKE1BWDk2NzI0X1JFRzNfQ0NfUE9SVF9TRUwoMCkgfCBcDQo+ ICsNCj4gTUFYOTY3MjRfUkVHM19DQ19QT1JUX1NFTCgxKSB8IFwNCj4gKw0KPiBNQVg5NjcyNF9S RUczX0NDX1BPUlRfU0VMKDIpIHwgXA0KPiArDQo+IE1BWDk2NzI0X1JFRzNfQ0NfUE9SVF9TRUwo MykpDQo+ICsjZGVmaW5lIE1BWDk2NzI0X1JFRzNfQ0NfUE9SVF9TRUxfUE9SVDAJCTB4Mg0KPiAr I2RlZmluZSBNQVg5NjcyNF9SRUczX0NDX1BPUlRfU0VMX1BPUlQxCQkweDENCj4gKyNkZWZpbmUg TUFYOTY3MjRfUkVHM19DQ19QT1JUX0NGRyhzZWwpIFwNCj4gKwkoRklFTERfUFJFUChNQVg5Njcy NF9SRUczX0NDX1BPUlRfU0VMKDApLCAoc2VsKSkgfCBcDQo+ICsJIEZJRUxEX1BSRVAoTUFYOTY3 MjRfUkVHM19DQ19QT1JUX1NFTCgxKSwgKHNlbCkpIHwgXA0KPiArCSBGSUVMRF9QUkVQKE1BWDk2 NzI0X1JFRzNfQ0NfUE9SVF9TRUwoMiksIChzZWwpKSB8IFwNCj4gKwkgRklFTERfUFJFUChNQVg5 NjcyNF9SRUczX0NDX1BPUlRfU0VMKDMpLCAoc2VsKSkpICNkZWZpbmUNCj4gK01BWDk2NzI0X1JF RzNfQ0NfUE9SVF9DRkdfUE9SVDAgXA0KPiArDQo+IAlNQVg5NjcyNF9SRUczX0NDX1BPUlRfQ0ZH KE1BWDk2NzI0X1JFRzNfQ0NfUE9SVF9TRUxfUE9SDQo+IFQwKQ0KPiArI2RlZmluZSBNQVg5Njcy NF9SRUczX0NDX1BPUlRfQ0ZHX1BPUlQxIFwNCj4gKw0KPiAJTUFYOTY3MjRfUkVHM19DQ19QT1JU X0NGRyhNQVg5NjcyNF9SRUczX0NDX1BPUlRfU0VMX1BPUg0KPiBUMSkNCj4gKw0KPiArI2RlZmlu ZSBNQVg5NjcyNF9SRUc2CQkJCTB4Ng0KPiArI2RlZmluZSBNQVg5NjcyNF9SRUc2X0xJTktfRU4J CQlHRU5NQVNLKDMsIDApDQo+ICsNCj4gKyNkZWZpbmUgTUFYOTY3MjRfUkVHNwkJCQkweDcNCj4g KyNkZWZpbmUgTUFYOTY3MjRfUkVHN19DQ19DUk9TU09WRVJfU0VMCQlHRU5NQVNLKDcsIDQpDQo+ ICsNCj4gKyNkZWZpbmUgTUFYOTY3MjRfREVCVUdfRVhUUkEJCQkweDkNCj4gKyNkZWZpbmUgTUFY OTY3MjRfREVCVUdfRVhUUkFfUENMS19TUkMJCUdFTk1BU0soMSwgMCkNCj4gKyNkZWZpbmUgTUFY OTY3MjRfREVCVUdfRVhUUkFfUENMS19TUkNfMjVNSFoJMGIwMA0KPiArI2RlZmluZSBNQVg5Njcy NF9ERUJVR19FWFRSQV9QQ0xLX1NSQ183NU1IWgkwYjAxDQo+ICsjZGVmaW5lIE1BWDk2NzI0X0RF QlVHX0VYVFJBX1BDTEtfU1JDX1VTRV9QSVBFCTBiMTANCj4gKw0KPiArLyogTGluayBBIGxvY2sg c3RhdHVzIGxpdmVzIGluIENUUkwzLCBsaW5rcyBCIHRocm91Z2ggRCBpbiBDVFJMMTIgdGhyb3Vn aCBDVFJMMTQuDQo+ICovDQo+ICsjZGVmaW5lIE1BWDk2NzI0X0NUUkwxMihsKQkJCSgweGEgKyAo bCkgLSAxKQ0KPiArDQo+ICsjZGVmaW5lIE1BWDk2NzI0X1JFRzI2KHgpCQkJKDB4MTAgKyAoeCkg LyAyKQ0KPiArI2RlZmluZSBNQVg5NjcyNF9SRUcyNl9SWF9SQVRFX1BIWSh4KQkJKEdFTk1BU0so MSwgMCkgPDwgKDQgKg0KPiAoKHgpICUgMikpKQ0KPiArI2RlZmluZSBNQVg5NjcyNF9SRUcyNl9S WF9SQVRFXzNHQlBTCQkwYjAxDQo+ICsjZGVmaW5lIE1BWDk2NzI0X1JFRzI2X1JYX1JBVEVfNkdC UFMJCTBiMTANCj4gKw0KPiArI2RlZmluZSBNQVg5NjcyNF9QV1IxCQkJCTB4MTMNCj4gKyNkZWZp bmUgTUFYOTY3MjRfUFdSMV9SRVNFVF9BTEwJCQlCSVQoNikNCj4gKw0KPiArI2RlZmluZSBNQVg5 NjcyNF9DVFJMMQkJCQkweDE4DQo+ICsjZGVmaW5lIE1BWDk2NzI0X0NUUkwxX1JFU0VUX09ORVNI T1QJCUdFTk1BU0soMywgMCkNCj4gKw0KPiArI2RlZmluZSBNQVg5NjcyNF9DVFJMMwkJCQkweDFh DQo+ICsjZGVmaW5lIE1BWDk2NzI0X0NUUkxfTE9DS0VECQkJQklUKDMpDQo+ICsNCj4gKyNkZWZp bmUgTUFYOTY3MjRfVklERU9fUElQRV9TRUwocCkJCSgweGYwICsgKHApIC8gMikNCj4gKyNkZWZp bmUgTUFYOTY3MjRfVklERU9fUElQRV9TRUxfU1RSRUFNKHApCShHRU5NQVNLKDEsIDApIDw8ICg0 ICoNCj4gKChwKSAlIDIpKSkNCj4gKyNkZWZpbmUgTUFYOTY3MjRfVklERU9fUElQRV9TRUxfTElO SyhwKQkJKEdFTk1BU0soMywgMikgPDwgKDQgKg0KPiAoKHApICUgMikpKQ0KPiArDQo+ICsjZGVm aW5lIE1BWDk2NzI0X1ZJREVPX1BJUEVfRU4JCQkweGY0DQo+ICsjZGVmaW5lIE1BWDk2NzI0X1ZJ REVPX1BJUEVfRU5fTUFTSyhwKQkJQklUKHApDQo+ICsjZGVmaW5lIE1BWDk2NzI0X1ZJREVPX1BJ UEVfRU5fU1RSRUFNX1NFTF9BTEwJQklUKDQpDQo+ICsNCj4gKyNkZWZpbmUgTUFYOTY3MjRfVlBS QlMocCkJCQkoMHgxZGMgKyAocCkgKiAweDIwKQ0KPiArI2RlZmluZSBNQVg5NjcyNF9WUFJCU19W SURFT19MT0NLCQlCSVQoMCkNCj4gKyNkZWZpbmUgTUFYOTY3MjRfVlBSQlNfUEFUR0VOX0NMS19T UkMJCUJJVCg3KQ0KPiArI2RlZmluZSBNQVg5NjcyNF9WUFJCU19QQVRHRU5fQ0xLX1NSQ18xNTBN SFoJMGIwDQo+ICsjZGVmaW5lIE1BWDk2NzI0X1ZQUkJTX1BBVEdFTl9DTEtfU1JDXzM3NU1IWgkw YjENCj4gKw0KPiArI2RlZmluZSBNQVg5NjcyNF9CQUNLVE9QMTIJCQkweDQwYg0KPiArI2RlZmlu ZSBNQVg5NjcyNF9CQUNLVE9QMTJfQ1NJX09VVF9FTgkJQklUKDEpDQo+ICsNCj4gKyNkZWZpbmUg TUFYOTY3MjRfQkFDS1RPUDIxKHApCQkJKDB4NDE0ICsgKHApIC8gNCAqIDB4MjApDQo+ICsjZGVm aW5lIE1BWDk2NzI0X0JBQ0tUT1AyMV9CUFA4REJMKHApCQlCSVQoNCArIChwKSAlIDQpDQo+ICsN Cj4gKyNkZWZpbmUgTUFYOTY3MjRfQkFDS1RPUDIyKHgpCQkJKDB4NDE1ICsgKHgpICogMHgzKQ0K PiArI2RlZmluZSBNQVg5NjcyNF9CQUNLVE9QMjJfUEhZX0NTSV9UWF9EUExMCUdFTk1BU0soNCwg MCkNCj4gKyNkZWZpbmUgTUFYOTY3MjRfQkFDS1RPUDIyX1BIWV9DU0lfVFhfRFBMTF9FTglCSVQo NSkNCj4gKw0KPiArI2RlZmluZSBNQVg5NjcyNF9CQUNLVE9QMjQocCkJCQkoMHg0MTcgKyAocCkg LyA0ICogMHgyMCkNCj4gKyNkZWZpbmUgTUFYOTY3MjRfQkFDS1RPUDI0X0JQUDhEQkxfTU9ERShw KQlCSVQoNCArIChwKSAlIDQpDQo+ICsNCj4gKyNkZWZpbmUgTUFYOTY3MjRfQkFDS1RPUDMwKHAp CQkJKDB4NDFkICsgKHApIC8gNCAqIDB4MjApDQo+ICsjZGVmaW5lIE1BWDk2NzI0X0JBQ0tUT1Az MF9CUFAxMERCTDMJCUJJVCg0KQ0KPiArI2RlZmluZSBNQVg5NjcyNF9CQUNLVE9QMzBfQlBQMTBE QkwzX01PREUJQklUKDUpDQo+ICsNCj4gKyNkZWZpbmUgTUFYOTY3MjRfQkFDS1RPUDMxKHApCQkJ KDB4NDFlICsgKHApIC8gNCAqIDB4MjApDQo+ICsjZGVmaW5lIE1BWDk2NzI0X0JBQ0tUT1AzMV9C UFAxMERCTDIJCUJJVCg2KQ0KPiArI2RlZmluZSBNQVg5NjcyNF9CQUNLVE9QMzFfQlBQMTBEQkwy X01PREUJQklUKDcpDQo+ICsNCj4gKyNkZWZpbmUgTUFYOTY3MjRfQkFDS1RPUDMyKHApCQkJKDB4 NDFmICsgKHApIC8gNCAqIDB4MjApDQo+ICsjZGVmaW5lIE1BWDk2NzI0X0JBQ0tUT1AzMl9CUFAx MihwKQkJQklUKChwKSAlIDQpDQo+ICsjZGVmaW5lIE1BWDk2NzI0X0JBQ0tUT1AzMl9CUFAxMERC TDAJCUJJVCg0KQ0KPiArI2RlZmluZSBNQVg5NjcyNF9CQUNLVE9QMzJfQlBQMTBEQkwwX01PREUJ QklUKDUpDQo+ICsjZGVmaW5lIE1BWDk2NzI0X0JBQ0tUT1AzMl9CUFAxMERCTDEJCUJJVCg2KQ0K PiArI2RlZmluZSBNQVg5NjcyNF9CQUNLVE9QMzJfQlBQMTBEQkwxX01PREUJQklUKDcpDQo+ICsN Cj4gKyNkZWZpbmUgTUFYOTY3MjRfTUlQSV9QSFkwCQkJMHg4YTANCj4gKyNkZWZpbmUgTUFYOTY3 MjRfTUlQSV9QSFkwX1BIWV9DT05GSUcJCUdFTk1BU0soNCwgMCkNCj4gKyNkZWZpbmUgTUFYOTY3 MjRfTUlQSV9QSFkwX1BIWV80WDIJCUJJVCgwKQ0KPiArI2RlZmluZSBNQVg5NjcyNF9NSVBJX1BI WTBfUEhZXzJYNAkJQklUKDIpDQo+ICsjZGVmaW5lIE1BWDk2NzI0X01JUElfUEhZMF9QSFlfMVg0 QV8yWDIJCUJJVCgzKQ0KPiArI2RlZmluZSBNQVg5NjcyNF9NSVBJX1BIWTBfUEhZXzFYNEJfMlgy CQlCSVQoNCkNCj4gKyNkZWZpbmUgTUFYOTY3MjRfTUlQSV9QSFkwX0ZPUkNFX0NTSV9PVVRfRU4J QklUKDcpDQo+ICsNCj4gKyNkZWZpbmUgTUFYOTY3MjRfTUlQSV9QSFkyCQkJMHg4YTINCj4gKyNk ZWZpbmUgTUFYOTY3MjRfTUlQSV9QSFkyX1BIWV9TVERCX05fNCh4KQkoR0VOTUFTSyg1LCA0KSA8 PCAoKHgpDQo+IC8gMiAqIDIpKQ0KPiArI2RlZmluZSBNQVg5NjcyNF9NSVBJX1BIWTJfUEhZX1NU REJfTl8yKHgpCShCSVQoNCArICh4KSkpDQo+ICsNCj4gKyNkZWZpbmUgTUFYOTY3MjRfTUlQSV9Q SFkzKHgpCQkJKDB4OGEzICsgKHgpIC8gMikNCj4gKyNkZWZpbmUgTUFYOTY3MjRfTUlQSV9QSFkz X1BIWV9MQU5FX01BUF80CUdFTk1BU0soNywgMCkNCj4gKyNkZWZpbmUgTUFYOTY3MjRfTUlQSV9Q SFkzX1BIWV9MQU5FX01BUF8yKHgpCShHRU5NQVNLKDMsIDApIDw8ICg0ICoNCj4gKCh4KSAlIDIp KSkNCj4gKw0KPiArI2RlZmluZSBNQVg5NjcyNF9NSVBJX1BIWTUoeCkJCQkoMHg4YTUgKyAoeCkg LyAyKQ0KPiArI2RlZmluZSBNQVg5NjcyNF9NSVBJX1BIWTVfUEhZX1BPTF9NQVBfNF8wXzEJR0VO TUFTSygxLCAwKQ0KPiArI2RlZmluZSBNQVg5NjcyNF9NSVBJX1BIWTVfUEhZX1BPTF9NQVBfNF8y XzMJR0VOTUFTSyg0LCAzKQ0KPiArI2RlZmluZSBNQVg5NjcyNF9NSVBJX1BIWTVfUEhZX1BPTF9N QVBfNF9DTEsJQklUKDUpDQo+ICsjZGVmaW5lIE1BWDk2NzI0X01JUElfUEhZNV9QSFlfUE9MX01B UF8yKHgpCShHRU5NQVNLKDEsIDApIDw8ICgzICoNCj4gKCh4KSAlIDIpKSkNCj4gKyNkZWZpbmUg TUFYOTY3MjRfTUlQSV9QSFk1X1BIWV9QT0xfTUFQXzJfQ0xLKHgpCUJJVCgyICsgMyAqICgoeCkN Cj4gJSAyKSkNCj4gKw0KPiArI2RlZmluZSBNQVg5NjcyNF9NSVBJX1BIWTEzCQkJMHg4YWQNCj4g KyNkZWZpbmUgTUFYOTY3MjRfTUlQSV9QSFkxM19UX1QzX1BSRUJFR0lOCUdFTk1BU0soNSwgMCkN Cj4gKyNkZWZpbmUgTUFYOTY3MjRfTUlQSV9QSFkxM19UX1QzX1BSRUJFR0lOXzY0WDcNCj4gCUZJ RUxEX1BSRVAoTUFYOTY3MjRfTUlQSV9QSFkxM19UX1QzX1BSRUJFR0lOLCA2MykNCj4gKw0KPiAr I2RlZmluZSBNQVg5NjcyNF9NSVBJX1BIWTE0CQkJMHg4YWUNCj4gKyNkZWZpbmUgTUFYOTY3MjRf TUlQSV9QSFkxNF9UX1QzX1BSRVAJCUdFTk1BU0soMSwgMCkNCj4gKyNkZWZpbmUgTUFYOTY3MjRf TUlQSV9QSFkxNF9UX1QzX1BSRVBfNTVOUw0KPiAJRklFTERfUFJFUChNQVg5NjcyNF9NSVBJX1BI WTE0X1RfVDNfUFJFUCwgMGIwMSkNCj4gKyNkZWZpbmUgTUFYOTY3MjRfTUlQSV9QSFkxNF9UX1Qz X1BPU1QJCUdFTk1BU0soNiwgMikNCj4gKyNkZWZpbmUgTUFYOTY3MjRfTUlQSV9QSFkxNF9UX1Qz X1BPU1RfMzJYNw0KPiAJRklFTERfUFJFUChNQVg5NjcyNF9NSVBJX1BIWTE0X1RfVDNfUE9TVCwg MzEpDQo+ICsNCj4gKyNkZWZpbmUgTUFYOTY3MjRfTUlQSV9DVFJMX1NFTAkJCTB4OGNhDQo+ICsj ZGVmaW5lIE1BWDk2NzI0X01JUElfQ1RSTF9TRUxfTUFTSyhwKQkJKEdFTk1BU0soMSwgMCkgPDwg KChwKQ0KPiAqIDIpKQ0KPiArDQo+ICsjZGVmaW5lIE1BWDk2NzI0X01JUElfUEhZMjUoeCkJCQko MHg4ZDAgKyAoeCkgLyAyKQ0KPiArI2RlZmluZSBNQVg5NjcyNF9NSVBJX1BIWTI1X0NTSTJfVFhf UEtUX0NOVCh4KQkoR0VOTUFTSygzLCAwKSA8PCAoNCAqDQo+ICgoeCkgJSAyKSkpDQo+ICsNCj4g KyNkZWZpbmUgTUFYOTY3MjRfTUlQSV9QSFkyNyh4KQkJCSgweDhkMiArICh4KSAvIDIpDQo+ICsj ZGVmaW5lIE1BWDk2NzI0X01JUElfUEhZMjdfUEhZX1BLVF9DTlQoeCkJKEdFTk1BU0soMywgMCkg PDwgKDQgKg0KPiAoKHgpICUgMikpKQ0KPiArDQo+ICsjZGVmaW5lIE1BWDk2NzI0X01JUElfVFgz KHgpCQkJKDB4OTAzICsgKHgpICogMHg0MCkNCj4gKyNkZWZpbmUgTUFYOTY3MjRfTUlQSV9UWDNf REVTS0VXX0lOSVRfOFgzMksNCj4gCUZJRUxEX1BSRVAoR0VOTUFTSygyLCAwKSwgMGIwMDEpDQo+ ICsjZGVmaW5lIE1BWDk2NzI0X01JUElfVFgzX0RFU0tFV19JTklUX0FVVE8JQklUKDcpDQo+ICsN Cj4gKyNkZWZpbmUgTUFYOTY3MjRfTUlQSV9UWDQoeCkJCQkoMHg5MDQgKyAoeCkgKiAweDQwKQ0K PiArI2RlZmluZSBNQVg5NjcyNF9NSVBJX1RYNF9ERVNLRVdfUEVSXzJLDQo+IAlGSUVMRF9QUkVQ KEdFTk1BU0soMiwgMCksIDBiMDAxKQ0KPiArI2RlZmluZSBNQVg5NjcyNF9NSVBJX1RYNF9ERVNL RVdfUEVSX0FVVE8JQklUKDcpDQo+ICsNCj4gKyNkZWZpbmUgTUFYOTY3MjRfTUlQSV9UWDEwKHgp CQkJKDB4OTBhICsgKHgpICogMHg0MCkNCj4gKyNkZWZpbmUgTUFYOTY3MjRfTUlQSV9UWDEwX0NT STJfQ1BIWV9FTgkJQklUKDUpDQo+ICsjZGVmaW5lIE1BWDk2NzI0X01JUElfVFgxMF9DU0kyX0xB TkVfQ05UCUdFTk1BU0soNywgNikNCj4gKw0KPiArI2RlZmluZSBNQVg5NjcyNF9NSVBJX1RYMTEo cCkJCQkoMHg5MGIgKyAocCkgKiAweDQwKQ0KPiArI2RlZmluZSBNQVg5NjcyNF9NSVBJX1RYMTIo cCkJCQkoMHg5MGMgKyAocCkgKiAweDQwKQ0KPiArDQo+ICsjZGVmaW5lIE1BWDk2NzI0X01JUElf VFgxMyhwLCB4KQkJKDB4OTBkICsgKHApICogMHg0MCArICh4KSAqIDB4MikNCj4gKyNkZWZpbmUg TUFYOTY3MjRfTUlQSV9UWDEzX01BUF9TUkNfRFQJCUdFTk1BU0soNSwgMCkNCj4gKyNkZWZpbmUg TUFYOTY3MjRfTUlQSV9UWDEzX01BUF9TUkNfVkMJCUdFTk1BU0soNywgNikNCj4gKw0KPiArI2Rl ZmluZSBNQVg5NjcyNF9NSVBJX1RYMTQocCwgeCkJCSgweDkwZSArIChwKSAqIDB4NDAgKyAoeCkg KiAweDIpDQo+ICsjZGVmaW5lIE1BWDk2NzI0X01JUElfVFgxNF9NQVBfRFNUX0RUCQlHRU5NQVNL KDUsIDApDQo+ICsjZGVmaW5lIE1BWDk2NzI0X01JUElfVFgxNF9NQVBfRFNUX1ZDCQlHRU5NQVNL KDcsIDYpDQo+ICsNCj4gKyNkZWZpbmUgTUFYOTY3MjRfTUlQSV9UWDQ1KHAsIHgpCQkoMHg5MmQg KyAocCkgKiAweDQwICsgKHgpIC8gNCkNCj4gKyNkZWZpbmUgTUFYOTY3MjRfTUlQSV9UWDQ1X01B UF9EUEhZX0RFU1QoeCkJKEdFTk1BU0soMSwgMCkgPDwgKDIgKg0KPiAoKHgpICUgNCkpKQ0KPiAr DQo+ICsjZGVmaW5lIE1BWDk2NzI0X01JUElfVFg1MSh4KQkJCSgweDkzMyArICh4KSAqIDB4NDAp DQo+ICsjZGVmaW5lIE1BWDk2NzI0X01JUElfVFg1MV9BTFRfTUVNX01BUF8xMglCSVQoMCkNCj4g KyNkZWZpbmUgTUFYOTY3MjRfTUlQSV9UWDUxX0FMVF9NRU1fTUFQXzgJQklUKDEpDQo+ICsjZGVm aW5lIE1BWDk2NzI0X01JUElfVFg1MV9BTFRfTUVNX01BUF8xMAlCSVQoMikNCj4gKyNkZWZpbmUg TUFYOTY3MjRfTUlQSV9UWDUxX0FMVDJfTUVNX01BUF84CUJJVCg0KQ0KPiArDQo+ICsjZGVmaW5l IE1BWDk2NzI0X01JUElfVFg1NCh4KQkJCSgweDkzNiArICh4KSAqIDB4NDApDQo+ICsjZGVmaW5l IE1BWDk2NzI0X01JUElfVFg1NF9UVU5fRU4JCUJJVCgwKQ0KPiArDQo+ICsjZGVmaW5lIE1BWDk2 NzI0X01JUElfVFg1Nyh4KQkJCSgweDkzOSArICh4KSAqIDB4NDApDQo+ICsjZGVmaW5lIE1BWDk2 NzI0X01JUElfVFg1N19UVU5fREVTVAkJR0VOTUFTSyg1LCA0KQ0KPiArI2RlZmluZSBNQVg5Njcy NF9NSVBJX1RYNTdfRElTX0FVVE9fVFVOX0RFVAlCSVQoNikNCj4gKyNkZWZpbmUgTUFYOTY3MjRf REVUKHApCQkJCUJJVChwKQ0KPiArDQo+ICsjZGVmaW5lIE1BWDk2NzI0X1BBVEdFTl8wCQkJMHgx MDUwDQo+ICsjZGVmaW5lIE1BWDk2NzI0X1BBVEdFTl8wX1ZUR19NT0RFCQlHRU5NQVNLKDEsIDAp DQo+ICsjZGVmaW5lIE1BWDk2NzI0X1BBVEdFTl8wX1ZUR19NT0RFX0ZSRUVfUlVOTklORwkwYjEx DQo+ICsjZGVmaW5lIE1BWDk2NzI0X1BBVEdFTl8wX0RFX0lOVgkJQklUKDIpDQo+ICsjZGVmaW5l IE1BWDk2NzI0X1BBVEdFTl8wX0hTX0lOVgkJQklUKDMpDQo+ICsjZGVmaW5lIE1BWDk2NzI0X1BB VEdFTl8wX1ZTX0lOVgkJQklUKDQpDQo+ICsjZGVmaW5lIE1BWDk2NzI0X1BBVEdFTl8wX0dFTl9E RQkJQklUKDUpDQo+ICsjZGVmaW5lIE1BWDk2NzI0X1BBVEdFTl8wX0dFTl9IUwkJQklUKDYpDQo+ ICsjZGVmaW5lIE1BWDk2NzI0X1BBVEdFTl8wX0dFTl9WUwkJQklUKDcpDQo+ICsNCj4gKyNkZWZp bmUgTUFYOTY3MjRfUEFUR0VOXzEJCQkweDEwNTENCj4gKyNkZWZpbmUgTUFYOTY3MjRfUEFUR0VO XzFfUEFUR0VOX01PREUJCUdFTk1BU0soNSwgNCkNCj4gKyNkZWZpbmUgTUFYOTY3MjRfUEFUR0VO XzFfUEFUR0VOX01PREVfRElTQUJMRUQJMGIwMA0KPiArI2RlZmluZSBNQVg5NjcyNF9QQVRHRU5f MV9QQVRHRU5fTU9ERV9DSEVDS0VSCTBiMDENCj4gKyNkZWZpbmUgTUFYOTY3MjRfUEFUR0VOXzFf UEFUR0VOX01PREVfR1JBRElFTlQJMGIxMA0KPiArDQo+ICsjZGVmaW5lIE1BWDk2NzI0X1ZTX0RM WV8yCQkJMHgxMDUyDQo+ICsjZGVmaW5lIE1BWDk2NzI0X1ZTX0hJR0hfMgkJCTB4MTA1NQ0KPiAr I2RlZmluZSBNQVg5NjcyNF9WU19MT1dfMgkJCTB4MTA1OA0KPiArI2RlZmluZSBNQVg5NjcyNF9W MkhfMgkJCQkweDEwNWINCj4gKyNkZWZpbmUgTUFYOTY3MjRfSFNfSElHSF8xCQkJMHgxMDVlDQo+ ICsjZGVmaW5lIE1BWDk2NzI0X0hTX0xPV18xCQkJMHgxMDYwDQo+ICsjZGVmaW5lIE1BWDk2NzI0 X0hTX0NOVF8xCQkJMHgxMDYyDQo+ICsjZGVmaW5lIE1BWDk2NzI0X1YyRF8yCQkJCTB4MTA2NA0K PiArI2RlZmluZSBNQVg5NjcyNF9ERV9ISUdIXzEJCQkweDEwNjcNCj4gKyNkZWZpbmUgTUFYOTY3 MjRfREVfTE9XXzEJCQkweDEwNjkNCj4gKyNkZWZpbmUgTUFYOTY3MjRfREVfQ05UXzEJCQkweDEw NmINCj4gKyNkZWZpbmUgTUFYOTY3MjRfR1JBRF9JTkNSCQkJMHgxMDZkDQo+ICsjZGVmaW5lIE1B WDk2NzI0X0NIS1JfQ09MT1JfQV9MCQkJMHgxMDZlDQo+ICsjZGVmaW5lIE1BWDk2NzI0X0NIS1Jf Q09MT1JfQl9MCQkJMHgxMDcxDQo+ICsjZGVmaW5lIE1BWDk2NzI0X0NIS1JfUlBUX0EJCQkweDEw NzQNCj4gKyNkZWZpbmUgTUFYOTY3MjRfQ0hLUl9SUFRfQgkJCTB4MTA3NQ0KPiArI2RlZmluZSBN QVg5NjcyNF9DSEtSX0FMVAkJCTB4MTA3Ng0KPiArDQo+ICsjZGVmaW5lIE1BWDk2NzI0X0RFX0RF VAkJCQkweDExZjANCj4gKyNkZWZpbmUgTUFYOTY3MjRfSFNfREVUCQkJCTB4MTFmMQ0KPiArI2Rl ZmluZSBNQVg5NjcyNF9WU19ERVQJCQkJMHgxMWYyDQo+ICsjZGVmaW5lIE1BWDk2NzI0X0hTX1BP TAkJCQkweDExZjMNCj4gKyNkZWZpbmUgTUFYOTY3MjRfVlNfUE9MCQkJCTB4MTFmNA0KPiArI2Rl ZmluZSBNQVg5NjcyNF9ERVQocCkJCQkJQklUKHApDQo+ICsNCj4gKyNkZWZpbmUgTUFYOTY3MjRf RFBMTF8wKHgpCQkJKDB4MWMwMCArICh4KSAqIDB4MTAwKQ0KPiArI2RlZmluZSBNQVg5NjcyNF9E UExMXzBfQ09ORklHX1NPRlRfUlNUX04JQklUKDApDQo+ICsNCj4gKyNkZWZpbmUgTUFYOTY3MjRf UEhZMV9BTFRfQ0xPQ0sJCQk1DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2Nv bmZpZyBtYXg5NjcyNF9pMmNfcmVnbWFwID0gew0KPiArCS5yZWdfYml0cyA9IDE2LA0KPiArCS52 YWxfYml0cyA9IDgsDQo+ICsJLm1heF9yZWdpc3RlciA9IDB4MWYwMCwNCj4gK307DQo+ICsNCj4g K3N0cnVjdCBtYXg5NjcyNF9wcml2IHsNCj4gKwlzdHJ1Y3QgbWF4X2RlcyBkZXM7DQo+ICsJY29u c3Qgc3RydWN0IG1heDk2NzI0X2NoaXBfaW5mbyAqaW5mbzsNCj4gKw0KPiArCXN0cnVjdCBkZXZp Y2UgKmRldjsNCj4gKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50Ow0KPiArCXN0cnVjdCByZWdt YXAgKnJlZ21hcDsNCj4gKw0KPiArCXN0cnVjdCBncGlvX2Rlc2MgKmdwaW9kX2VuYWJsZTsNCj4g Kwl1bnNpZ25lZCBpbnQgY2NfcG9ydF9jZmc7DQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3QgbWF4OTY3 MjRfY2hpcF9pbmZvIHsNCj4gKwl1bnNpZ25lZCBpbnQgdmVyc2lvbnM7DQo+ICsJdW5zaWduZWQg aW50IG1vZGVzOw0KPiArCWJvb2wgc3VwcG9ydHNfcGlwZV9zdHJlYW1fYXV0b3NlbGVjdDsNCj4g Kwl1bnNpZ25lZCBpbnQgbnVtX3BpcGVzOw0KPiArDQo+ICsJaW50ICgqc2V0X3BpcGVfcGh5KShz dHJ1Y3QgbWF4X2RlcyAqZGVzLCBzdHJ1Y3QgbWF4X2Rlc19waXBlICpwaXBlLA0KPiArCQkJICAg IHN0cnVjdCBtYXhfZGVzX3BoeSAqcGh5KTsNCj4gKwlpbnQgKCpzZXRfcGlwZV90dW5uZWxfcGh5 KShzdHJ1Y3QgbWF4X2RlcyAqZGVzLCBzdHJ1Y3QgbWF4X2Rlc19waXBlDQo+ICpwaXBlLA0KPiAr CQkJCSAgIHN0cnVjdCBtYXhfZGVzX3BoeSAqcGh5KTsNCj4gKwlpbnQgKCpzZXRfcGlwZV90dW5u ZWxfZW5hYmxlKShzdHJ1Y3QgbWF4X2RlcyAqZGVzLCBzdHJ1Y3QgbWF4X2Rlc19waXBlDQo+ICpw aXBlLA0KPiArCQkJCSAgICAgIGJvb2wgZW5hYmxlKTsNCj4gK307DQo+ICsNCj4gKyNkZWZpbmUg ZGVzX3RvX3ByaXYoX2RlcykgXA0KPiArCWNvbnRhaW5lcl9vZihfZGVzLCBzdHJ1Y3QgbWF4OTY3 MjRfcHJpdiwgZGVzKQ0KPiArDQo+ICtzdGF0aWMgaW50IG1heDk2NzI0X3dhaXRfZm9yX2Rldmlj ZShzdHJ1Y3QgbWF4OTY3MjRfcHJpdiAqcHJpdikgew0KPiArCXVuc2lnbmVkIGludCB2YWw7DQo+ ICsJaW50IHJldCwgZXJyOw0KPiArDQo+ICsJZXJyID0gcmVhZF9wb2xsX3RpbWVvdXQocmVnbWFw X3JlYWQsIHJldCwNCj4gKwkJCQkhcmV0ICYmIHZhbCwNCj4gKwkJCQkxMDAgKiBVU0VDX1BFUl9N U0VDLA0KPiArCQkJCTEgKiBVU0VDX1BFUl9TRUMsIGZhbHNlLA0KPiArCQkJCXByaXYtPnJlZ21h cCwgTUFYOTY3MjRfUkVHMCwgJnZhbCk7DQo+ICsJaWYgKGVycikNCj4gKwkJZGV2X2Vycihwcml2 LT5kZXYsICJUaW1lb3V0IHdhaXRpbmcgZm9yIGRlc2VyaWFsaXplcjogJWRcbiIsIHJldCk7DQo+ ICsNCj4gKwlyZXR1cm4gZXJyOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IG1heDk2NzI0X3Jl c2V0KHN0cnVjdCBtYXg5NjcyNF9wcml2ICpwcml2KSB7DQo+ICsJaW50IHJldDsNCj4gKw0KPiAr CXJldCA9IG1heDk2NzI0X3dhaXRfZm9yX2RldmljZShwcml2KTsNCj4gKwlpZiAocmV0KQ0KPiAr CQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKHByaXYtPnJl Z21hcCwgTUFYOTY3MjRfUFdSMSwNCj4gKwkJCQkgTUFYOTY3MjRfUFdSMV9SRVNFVF9BTEwsDQo+ ICsJCQkJIEZJRUxEX1BSRVAoTUFYOTY3MjRfUFdSMV9SRVNFVF9BTEwsDQo+IDEpKTsNCj4gKwlp ZiAocmV0KQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJZnNsZWVwKDEwMDAwKTsNCj4gKw0K PiArCXJldCA9IG1heDk2NzI0X3dhaXRfZm9yX2RldmljZShwcml2KTsNCj4gKwlpZiAocmV0KQ0K PiArCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJLyogUmVzdG9yZSBJMkMgY29udHJvbC1jaGFubmVs IGFjY2VzcyBhZnRlciBhIHJlc2V0LiAqLw0KPiArCXJldHVybiByZWdtYXBfdXBkYXRlX2JpdHMo cHJpdi0+cmVnbWFwLCBNQVg5NjcyNF9SRUczLA0KPiArCQkJCSAgTUFYOTY3MjRfUkVHM19DQ19Q T1JUX1NFTF9NQVNLLA0KPiArCQkJCSAgcHJpdi0+Y2NfcG9ydF9jZmcpOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIG1heDk2NzI0X3JlZ19yZWFkKHN0cnVjdCBtYXhf ZGVzICpkZXMsIHVuc2lnbmVkDQo+IGludCByZWcsDQo+ICsJCQkJCSAgICB1bnNpZ25lZCBpbnQg KnZhbCkNCj4gK3sNCj4gKwlzdHJ1Y3QgbWF4OTY3MjRfcHJpdiAqcHJpdiA9IGRlc190b19wcml2 KGRlcyk7DQo+ICsNCj4gKwlyZXR1cm4gcmVnbWFwX3JlYWQocHJpdi0+cmVnbWFwLCByZWcsIHZh bCk7IH0NCj4gKw0KPiArc3RhdGljIGludCBfX21heWJlX3VudXNlZCBtYXg5NjcyNF9yZWdfd3Jp dGUoc3RydWN0IG1heF9kZXMgKmRlcywgdW5zaWduZWQNCj4gaW50IHJlZywNCj4gKwkJCQkJICAg ICB1bnNpZ25lZCBpbnQgdmFsKQ0KPiArew0KPiArCXN0cnVjdCBtYXg5NjcyNF9wcml2ICpwcml2 ID0gZGVzX3RvX3ByaXYoZGVzKTsNCj4gKw0KPiArCXJldHVybiByZWdtYXBfd3JpdGUocHJpdi0+ cmVnbWFwLCByZWcsIHZhbCk7IH0NCj4gKw0KPiArc3RhdGljIHVuc2lnbmVkIGludCBtYXg5Njcy NF9waHlfaWQoc3RydWN0IG1heF9kZXMgKmRlcywgc3RydWN0DQo+ICttYXhfZGVzX3BoeSAqcGh5 KSB7DQo+ICsJdW5zaWduZWQgaW50IG51bV9od19kYXRhX2xhbmVzID0gbWF4X2Rlc19waHlfaHdf ZGF0YV9sYW5lcyhkZXMsDQo+IHBoeSk7DQo+ICsNCj4gKwkvKiBQSFkgMSBpcyB0aGUgbWFzdGVy IFBIWSB3aGVuIGNvbWJpbmluZyBQSFkgMCBhbmQgUEhZIDEuICovDQo+ICsJaWYgKHBoeS0+aW5k ZXggPT0gMCAmJiBudW1faHdfZGF0YV9sYW5lcyA9PSA0KQ0KPiArCQlyZXR1cm4gMTsNCj4gKw0K PiArCS8qDQo+ICsJICogUEhZIDEgdGFrZXMgUEhZIDAncyBpZGVudGlmaWVyIG9ubHkgd2hlbiBp dCBoYXMgbm8gZGF0YSBsYW5lcyBvZiBpdHMNCj4gKwkgKiBvd24sIG1lYW5pbmcgaXQgaXMgYWJz b3JiZWQgaW50byBQSFkgMC4NCj4gKwkgKg0KPiArCSAqIEEgZGlzYWJsZWQgUEhZIDEgdGhhdCBz dGlsbCBvd25zIGxhbmVzIGtlZXBzIGl0cyBvd24gaWRlbnRpZmllci4gSXQNCj4gKwkgKiBpcyBh IGNhbmRpZGF0ZSBmb3IgdGhlIHVudXNlZCBQSFkgdGhhdCB1bm1hcHBlZCBkYXRhIGlzIGRpc2Nh cmRlZA0KPiArCSAqIHRvLCBzbyBhbGlhc2luZyBpdCBoZXJlIHdvdWxkIHNlbmQgdGhhdCBkYXRh IHRvIFBIWSAwIGluc3RlYWQsIHdoaWNoDQo+ICsJICogbWF5IGJlIHN0cmVhbWluZy4NCj4gKwkg Ki8NCj4gKwlpZiAocGh5LT5pbmRleCA9PSAxICYmICFkZXMtPnBoeXNbMV0uZW5hYmxlZCAmJiAh bnVtX2h3X2RhdGFfbGFuZXMpDQo+ICsJCXJldHVybiAwOw0KPiArDQo+ICsJcmV0dXJuIHBoeS0+ aW5kZXg7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgbWF4OTY3MjRfbG9nX3BpcGVfc3RhdHVz KHN0cnVjdCBtYXhfZGVzICpkZXMsDQo+ICsJCQkJICAgIHN0cnVjdCBtYXhfZGVzX3BpcGUgKnBp cGUpDQo+ICt7DQo+ICsJc3RydWN0IG1heDk2NzI0X3ByaXYgKnByaXYgPSBkZXNfdG9fcHJpdihk ZXMpOw0KPiArCXVuc2lnbmVkIGludCBpbmRleCA9IHBpcGUtPmluZGV4Ow0KPiArCXVuc2lnbmVk IGludCB2YWwsIG1hc2s7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCXJldCA9IHJlZ21hcF9yZWFk KHByaXYtPnJlZ21hcCwgTUFYOTY3MjRfVlBSQlMoaW5kZXgpLCAmdmFsKTsNCj4gKwlpZiAocmV0 KQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJZGV2X2luZm8ocHJpdi0+ZGV2LCAiXHR2aWRl b19sb2NrOiAldVxuIiwNCj4gKwkJICEhKHZhbCAmIE1BWDk2NzI0X1ZQUkJTX1ZJREVPX0xPQ0sp KTsNCj4gKw0KPiArCW1hc2sgPSBNQVg5NjcyNF9ERVQoaW5kZXgpOw0KPiArDQo+ICsJcmV0ID0g cmVnbWFwX3JlYWQocHJpdi0+cmVnbWFwLCBNQVg5NjcyNF9ERV9ERVQsICZ2YWwpOw0KPiArCWlm IChyZXQpDQo+ICsJCXJldHVybiByZXQ7DQo+ICsNCj4gKwlkZXZfaW5mbyhwcml2LT5kZXYsICJc dGRlX2RldDogJXVcbiIsICEhKHZhbCAmIG1hc2spKTsNCj4gKw0KPiArCXJldCA9IHJlZ21hcF9y ZWFkKHByaXYtPnJlZ21hcCwgTUFYOTY3MjRfSFNfREVULCAmdmFsKTsNCj4gKwlpZiAocmV0KQ0K PiArCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJZGV2X2luZm8ocHJpdi0+ZGV2LCAiXHRoc19kZXQ6 ICV1XG4iLCAhISh2YWwgJiBtYXNrKSk7DQo+ICsNCj4gKwlyZXQgPSByZWdtYXBfcmVhZChwcml2 LT5yZWdtYXAsIE1BWDk2NzI0X1ZTX0RFVCwgJnZhbCk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0 dXJuIHJldDsNCj4gKw0KPiArCWRldl9pbmZvKHByaXYtPmRldiwgIlx0dnNfZGV0OiAldVxuIiwg ISEodmFsICYgbWFzaykpOw0KPiArDQo+ICsJcmV0ID0gcmVnbWFwX3JlYWQocHJpdi0+cmVnbWFw LCBNQVg5NjcyNF9IU19QT0wsICZ2YWwpOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiByZXQ7 DQo+ICsNCj4gKwlkZXZfaW5mbyhwcml2LT5kZXYsICJcdGhzX3BvbDogJXVcbiIsICEhKHZhbCAm IG1hc2spKTsNCj4gKw0KPiArCXJldCA9IHJlZ21hcF9yZWFkKHByaXYtPnJlZ21hcCwgTUFYOTY3 MjRfVlNfUE9MLCAmdmFsKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiArDQo+ ICsJZGV2X2luZm8ocHJpdi0+ZGV2LCAiXHR2c19wb2w6ICV1XG4iLCAhISh2YWwgJiBtYXNrKSk7 DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBtYXg5NjcyNF9s b2dfcGh5X3N0YXR1cyhzdHJ1Y3QgbWF4X2RlcyAqZGVzLA0KPiArCQkJCSAgIHN0cnVjdCBtYXhf ZGVzX3BoeSAqcGh5KQ0KPiArew0KPiArCXN0cnVjdCBtYXg5NjcyNF9wcml2ICpwcml2ID0gZGVz X3RvX3ByaXYoZGVzKTsNCj4gKwl1bnNpZ25lZCBpbnQgaW5kZXggPSBtYXg5NjcyNF9waHlfaWQo ZGVzLCBwaHkpOw0KPiArCXVuc2lnbmVkIGludCB2YWw7DQo+ICsJaW50IHJldDsNCj4gKw0KPiAr CXJldCA9IHJlZ21hcF9yZWFkKHByaXYtPnJlZ21hcCwgTUFYOTY3MjRfTUlQSV9QSFkyNShpbmRl eCksICZ2YWwpOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiByZXQ7DQo+ICsNCj4gKwlkZXZf aW5mbyhwcml2LT5kZXYsICJcdGNzaTJfcGt0X2NudDogJWx1XG4iLA0KPiArCQkgZmllbGRfZ2V0 KE1BWDk2NzI0X01JUElfUEhZMjVfQ1NJMl9UWF9QS1RfQ05UKGluZGV4KSwNCj4gdmFsKSk7DQo+ ICsNCj4gKwlyZXQgPSByZWdtYXBfcmVhZChwcml2LT5yZWdtYXAsIE1BWDk2NzI0X01JUElfUEhZ MjcoaW5kZXgpLCAmdmFsKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiArDQo+ ICsJZGV2X2luZm8ocHJpdi0+ZGV2LCAiXHRwaHlfcGt0X2NudDogJWx1XG4iLA0KPiArCQkgZmll bGRfZ2V0KE1BWDk2NzI0X01JUElfUEhZMjdfUEhZX1BLVF9DTlQoaW5kZXgpLCB2YWwpKTsNCj4g Kw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IG1heDk2NzI0X3NldF9l bmFibGUoc3RydWN0IG1heF9kZXMgKmRlcywgYm9vbCBlbmFibGUpIHsNCj4gKwlzdHJ1Y3QgbWF4 OTY3MjRfcHJpdiAqcHJpdiA9IGRlc190b19wcml2KGRlcyk7DQo+ICsNCj4gKwlyZXR1cm4gcmVn bWFwX2Fzc2lnbl9iaXRzKHByaXYtPnJlZ21hcCwgTUFYOTY3MjRfQkFDS1RPUDEyLA0KPiArCQkJ CSAgTUFYOTY3MjRfQkFDS1RPUDEyX0NTSV9PVVRfRU4sDQo+IGVuYWJsZSk7IH0NCj4gKw0KPiAr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtYXg5NjcyNF9waHlzX2NvbmZpZ3NfcmVnX3ZhbFtd ID0gew0KPiArCU1BWDk2NzI0X01JUElfUEhZMF9QSFlfMVg0QV8yWDIsDQo+ICsJTUFYOTY3MjRf TUlQSV9QSFkwX1BIWV8yWDQsDQo+ICsNCj4gKwlNQVg5NjcyNF9NSVBJX1BIWTBfUEhZXzRYMiwN Cj4gKwlNQVg5NjcyNF9NSVBJX1BIWTBfUEhZXzFYNEFfMlgyLA0KPiArCU1BWDk2NzI0X01JUElf UEhZMF9QSFlfMVg0Ql8yWDIsDQo+ICsJTUFYOTY3MjRfTUlQSV9QSFkwX1BIWV8yWDQsDQo+ICt9 Ow0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG1heF9zZXJkZXNfcGh5c19jb25maWcgbWF4 OTY3MjRfcGh5c19jb25maWdzW10gPSB7DQo+ICsJLyoNCj4gKwkgKiBQSFkgMSBjYW4gYmUgaW4g NC1sYW5lIG1vZGUgKGNvbWJpbmluZyBsYW5lcyBvZiBQSFkgMCBhbmQgUEhZIDEpDQo+ICsJICog YnV0IG9ubHkgdXNlIHRoZSBkYXRhIGxhbmVzIG9mIFBIWTAsIHdoaWxlIGNvbnRpbnVpbmcgdG8g dXNlIHRoZQ0KPiArCSAqIGNsb2NrIGxhbmUgb2YgUEhZIDEuDQo+ICsJICogU3BlY2lmeWluZyBj bG9jay1sYW5lcyBhcyA1IHR1cm5zIG9uIGFsdGVybmF0ZSBjbG9ja2luZyBtb2RlLg0KPiArCSAq Lw0KPiArCXsgeyAyLCAwLCAyLCAyIH0sIHsgTUFYOTY3MjRfUEhZMV9BTFRfQ0xPQ0ssIDAsIDAs IDAgfSB9LA0KPiArCXsgeyAyLCAwLCA0LCAwIH0sIHsgTUFYOTY3MjRfUEhZMV9BTFRfQ0xPQ0ss IDAsIDAsIDAgfSB9LA0KPiArDQo+ICsJLyoNCj4gKwkgKiBXaGVuIGNvbWJpbmluZyBQSFkgMCBh bmQgUEhZIDEgdG8gbWFrZSB0aGVtIGZ1bmN0aW9uIGluIDQtbGFuZQ0KPiBtb2RlLA0KPiArCSAq IFBIWSAxIGlzIHRoZSBtYXN0ZXIgUEhZLCBidXQgd2UgdXNlIFBIWSAwIGhlcmUgdG8gbWFpbnRh aW4NCj4gKwkgKiBjb21wYXRpYmlsaXR5Lg0KPiArCSAqLw0KPiArCXsgeyAyLCAyLCAyLCAyIH0g fSwNCj4gKwl7IHsgNCwgMCwgMiwgMiB9IH0sDQo+ICsJeyB7IDIsIDIsIDQsIDAgfSB9LA0KPiAr CXsgeyA0LCAwLCA0LCAwIH0gfSwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBpbnQgbWF4OTY3MjRf aW5pdF90cGcoc3RydWN0IG1heF9kZXMgKmRlcykgew0KPiArCWNvbnN0IHN0cnVjdCByZWdfc2Vx dWVuY2UgcmVnc1tdID0gew0KPiArCQl7IE1BWDk2NzI0X0dSQURfSU5DUiwgTUFYX1NFUkRFU19H UkFEX0lOQ1IgfSwNCj4gKwkJUkVHX1NFUVVFTkNFXzNfTEUoTUFYOTY3MjRfQ0hLUl9DT0xPUl9B X0wsDQo+ICsJCQkJICBNQVhfU0VSREVTX0NIRUNLRVJfQ09MT1JfQSksDQo+ICsJCVJFR19TRVFV RU5DRV8zX0xFKE1BWDk2NzI0X0NIS1JfQ09MT1JfQl9MLA0KPiArCQkJCSAgTUFYX1NFUkRFU19D SEVDS0VSX0NPTE9SX0IpLA0KPiArCQl7IE1BWDk2NzI0X0NIS1JfUlBUX0EsIE1BWF9TRVJERVNf Q0hFQ0tFUl9TSVpFIH0sDQo+ICsJCXsgTUFYOTY3MjRfQ0hLUl9SUFRfQiwgTUFYX1NFUkRFU19D SEVDS0VSX1NJWkUgfSwNCj4gKwkJeyBNQVg5NjcyNF9DSEtSX0FMVCwgTUFYX1NFUkRFU19DSEVD S0VSX1NJWkUgfSwNCj4gKwl9Ow0KPiArCXN0cnVjdCBtYXg5NjcyNF9wcml2ICpwcml2ID0gZGVz X3RvX3ByaXYoZGVzKTsNCj4gKw0KPiArCXJldHVybiByZWdtYXBfbXVsdGlfcmVnX3dyaXRlKHBy aXYtPnJlZ21hcCwgcmVncywgQVJSQVlfU0laRShyZWdzKSk7IH0NCj4gKw0KPiArc3RhdGljIGlu dCBtYXg5NjcyNF9pbml0KHN0cnVjdCBtYXhfZGVzICpkZXMpIHsNCj4gKwlzdHJ1Y3QgbWF4OTY3 MjRfcHJpdiAqcHJpdiA9IGRlc190b19wcml2KGRlcyk7DQo+ICsJdW5zaWduZWQgaW50IGk7DQo+ ICsJaW50IHJldDsNCj4gKw0KPiArCWlmIChwcml2LT5pbmZvLT5zZXRfcGlwZV90dW5uZWxfZW5h YmxlKSB7DQo+ICsJCWZvciAoaSA9IDA7IGkgPCBkZXMtPmluZm8tPm51bV9waXBlczsgaSsrKSB7 DQo+ICsJCQlyZXQgPSByZWdtYXBfc2V0X2JpdHMocHJpdi0+cmVnbWFwLA0KPiBNQVg5NjcyNF9N SVBJX1RYNTcoaSksDQo+ICsNCj4gTUFYOTY3MjRfTUlQSV9UWDU3X0RJU19BVVRPX1RVTl9ERVQp Ow0KPiArCQkJaWYgKHJldCkNCj4gKwkJCQlyZXR1cm4gcmV0Ow0KPiArCQl9DQo+ICsJfQ0KPiAr DQo+ICsJaWYgKHByaXYtPmluZm8tPnN1cHBvcnRzX3BpcGVfc3RyZWFtX2F1dG9zZWxlY3QpIHsN Cj4gKwkJLyogRW5hYmxlIHN0cmVhbSBhdXRvc2VsZWN0LiAqLw0KPiArCQlyZXQgPSByZWdtYXBf c2V0X2JpdHMocHJpdi0+cmVnbWFwLA0KPiBNQVg5NjcyNF9WSURFT19QSVBFX0VOLA0KPiArDQo+ IE1BWDk2NzI0X1ZJREVPX1BJUEVfRU5fU1RSRUFNX1NFTF9BTEwpOw0KPiArCQlpZiAocmV0KQ0K PiArCQkJcmV0dXJuIHJldDsNCj4gKwl9DQo+ICsNCj4gKwkvKiBFbmFibGUgSTJDIGNvbnRyb2wg cG9ydHMgY3Jvc3NvdmVyLiAqLw0KPiArCXJldCA9IHJlZ21hcF9zZXRfYml0cyhwcml2LT5yZWdt YXAsIE1BWDk2NzI0X1JFRzcsDQo+ICsJCQkgICAgICBNQVg5NjcyNF9SRUc3X0NDX0NST1NTT1ZF Ul9TRUwpOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiByZXQ7DQo+ICsNCj4gKwkvKiBTZXQg UEhZIG1vZGUuICovDQo+ICsJcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKHByaXYtPnJlZ21hcCwg TUFYOTY3MjRfTUlQSV9QSFkwLA0KPiArCQkJCSBNQVg5NjcyNF9NSVBJX1BIWTBfUEhZX0NPTkZJ RywNCj4gKwkJCQkgbWF4OTY3MjRfcGh5c19jb25maWdzX3JlZ192YWxbZGVzLQ0KPiA+cGh5c19j b25maWddKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJcmV0dXJu IG1heDk2NzI0X2luaXRfdHBnKGRlcyk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgbWF4OTY3 MjRfaW5pdF9waHkoc3RydWN0IG1heF9kZXMgKmRlcywgc3RydWN0IG1heF9kZXNfcGh5DQo+ICsq cGh5KSB7DQo+ICsJc3RydWN0IG1heDk2NzI0X3ByaXYgKnByaXYgPSBkZXNfdG9fcHJpdihkZXMp Ow0KPiArCWJvb2wgaXNfY3BoeSA9IHBoeS0+YnVzX3R5cGUgPT0gVjRMMl9NQlVTX0NTSTJfQ1BI WTsNCj4gKwl1bnNpZ25lZCBpbnQgbnVtX2RhdGFfbGFuZXMgPSBwaHktPm1pcGkubnVtX2RhdGFf bGFuZXM7DQo+ICsJdW5zaWduZWQgaW50IG51bV9od19kYXRhX2xhbmVzOw0KPiArCXVuc2lnbmVk IGludCBpbmRleDsNCj4gKwl1bnNpZ25lZCBpbnQgdXNlZF9kYXRhX2xhbmVzID0gMDsNCj4gKwl1 bnNpZ25lZCBpbnQgdmFsLCBtYXNrOw0KPiArCXVuc2lnbmVkIGludCBpOw0KPiArCXU2NCBkcGxs X2ZyZXE7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCWluZGV4ID0gbWF4OTY3MjRfcGh5X2lkKGRl cywgcGh5KTsNCj4gKwludW1faHdfZGF0YV9sYW5lcyA9IG1heF9kZXNfcGh5X2h3X2RhdGFfbGFu ZXMoZGVzLCBwaHkpOw0KPiArCWRwbGxfZnJlcSA9IGlzX2NwaHkgPyBwaHktPmxpbmtfZnJlcXVl bmN5DQo+ICsJCQkgICAgOiBwaHktPmxpbmtfZnJlcXVlbmN5ICogMjsNCj4gKw0KPiArCXJldCA9 IHJlZ21hcF91cGRhdGVfYml0cyhwcml2LT5yZWdtYXAsIE1BWDk2NzI0X01JUElfVFgxMChpbmRl eCksDQo+ICsJCQkJIE1BWDk2NzI0X01JUElfVFgxMF9DU0kyX0xBTkVfQ05ULA0KPiArDQo+IEZJ RUxEX1BSRVAoTUFYOTY3MjRfTUlQSV9UWDEwX0NTSTJfTEFORV9DTlQsDQo+ICsJCQkJCSAgICBu dW1fZGF0YV9sYW5lcyAtIDEpKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiAr DQo+ICsJcmV0ID0gcmVnbWFwX2Fzc2lnbl9iaXRzKHByaXYtPnJlZ21hcCwgTUFYOTY3MjRfTUlQ SV9UWDEwKGluZGV4KSwNCj4gKwkJCQkgTUFYOTY3MjRfTUlQSV9UWDEwX0NTSTJfQ1BIWV9FTiwN Cj4gaXNfY3BoeSk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiArCS8q IENvbmZpZ3VyZSBsYW5lIG1hcHBpbmcuICovDQo+ICsJdmFsID0gMDsNCj4gKwlmb3IgKGkgPSAw OyBpIDwgbnVtX2h3X2RhdGFfbGFuZXMgOyBpKyspIHsNCj4gKwkJdW5zaWduZWQgaW50IG1hcDsN Cj4gKw0KPiArCQlpZiAoaSA8IG51bV9kYXRhX2xhbmVzKQ0KPiArCQkJbWFwID0gcGh5LT5taXBp LmRhdGFfbGFuZXNbaV0gLSAxOw0KPiArCQllbHNlDQo+ICsJCQltYXAgPSBmZnoodXNlZF9kYXRh X2xhbmVzKTsNCj4gKw0KPiArCQl2YWwgfD0gbWFwIDw8IChpICogMik7DQo+ICsJCXVzZWRfZGF0 YV9sYW5lcyB8PSBCSVQobWFwKTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAobnVtX2h3X2RhdGFfbGFu ZXMgPT0gNCkNCj4gKwkJbWFzayA9IE1BWDk2NzI0X01JUElfUEhZM19QSFlfTEFORV9NQVBfNDsN Cj4gKwllbHNlDQo+ICsJCW1hc2sgPSBNQVg5NjcyNF9NSVBJX1BIWTNfUEhZX0xBTkVfTUFQXzIo aW5kZXgpOw0KPiArDQo+ICsJcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKHByaXYtPnJlZ21hcCwg TUFYOTY3MjRfTUlQSV9QSFkzKGluZGV4KSwNCj4gKwkJCQkgbWFzaywgZmllbGRfcHJlcChtYXNr LCB2YWwpKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJLyogQ29u ZmlndXJlIGxhbmUgcG9sYXJpdHkuICovDQo+ICsJZm9yIChpID0gMCwgdmFsID0gMDsgaSA8IG51 bV9kYXRhX2xhbmVzOyBpKyspDQo+ICsJCWlmIChwaHktPm1pcGkubGFuZV9wb2xhcml0aWVzW2kg KyAxXSkNCj4gKwkJCXZhbCB8PSBCSVQoaSk7DQo+ICsNCj4gKwlpZiAobnVtX2h3X2RhdGFfbGFu ZXMgPT0gNCkgew0KPiArCQlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi0+cmVnbWFwLA0K PiBNQVg5NjcyNF9NSVBJX1BIWTUoaW5kZXgpLA0KPiArDQo+IE1BWDk2NzI0X01JUElfUEhZNV9Q SFlfUE9MX01BUF80XzBfMSB8DQo+ICsNCj4gTUFYOTY3MjRfTUlQSV9QSFk1X1BIWV9QT0xfTUFQ XzRfMl8zLA0KPiArDQo+IEZJRUxEX1BSRVAoTUFYOTY3MjRfTUlQSV9QSFk1X1BIWV9QT0xfTUFQ XzRfMF8xLA0KPiArCQkJCQkJICAgIHZhbCkgfA0KPiArDQo+IEZJRUxEX1BSRVAoTUFYOTY3MjRf TUlQSV9QSFk1X1BIWV9QT0xfTUFQXzRfMl8zLA0KPiArCQkJCQkJICAgIHZhbCA+PiAyKSk7DQo+ ICsJCWlmIChyZXQpDQo+ICsJCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJCXJldCA9IHJlZ21hcF9h c3NpZ25fYml0cyhwcml2LT5yZWdtYXAsDQo+IE1BWDk2NzI0X01JUElfUEhZNShpbmRleCksDQo+ ICsNCj4gTUFYOTY3MjRfTUlQSV9QSFk1X1BIWV9QT0xfTUFQXzRfQ0xLLA0KPiArCQkJCQkgcGh5 LT5taXBpLmxhbmVfcG9sYXJpdGllc1swXSk7DQo+ICsJCWlmIChyZXQpDQo+ICsJCQlyZXR1cm4g cmV0Ow0KPiArCX0gZWxzZSB7DQo+ICsJCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhwcml2LT5y ZWdtYXAsDQo+IE1BWDk2NzI0X01JUElfUEhZNShpbmRleCksDQo+ICsNCj4gTUFYOTY3MjRfTUlQ SV9QSFk1X1BIWV9QT0xfTUFQXzIoaW5kZXgpLA0KPiArDQo+IGZpZWxkX3ByZXAoTUFYOTY3MjRf TUlQSV9QSFk1X1BIWV9QT0xfTUFQXzIoaW5kZXgpLCB2YWwpKTsNCj4gKwkJaWYgKHJldCkNCj4g KwkJCXJldHVybiByZXQ7DQo+ICsNCj4gKwkJcmV0ID0gcmVnbWFwX2Fzc2lnbl9iaXRzKHByaXYt PnJlZ21hcCwNCj4gTUFYOTY3MjRfTUlQSV9QSFk1KGluZGV4KSwNCj4gKw0KPiBNQVg5NjcyNF9N SVBJX1BIWTVfUEhZX1BPTF9NQVBfMl9DTEsoaW5kZXgpLA0KPiArCQkJCQkgcGh5LT5taXBpLmxh bmVfcG9sYXJpdGllc1swXSk7DQo+ICsJCWlmIChyZXQpDQo+ICsJCQlyZXR1cm4gcmV0Ow0KPiAr CX0NCj4gKw0KPiArCWlmICghaXNfY3BoeSAmJiBkcGxsX2ZyZXEgPiAxNTAwMDAwMDAwdWxsKSB7 DQo+ICsJCS8qIEVuYWJsZSBpbml0aWFsIGRlc2tldyB3aXRoIDIgeCAzMmsgVUkuICovDQo+ICsJ CXJldCA9IHJlZ21hcF93cml0ZShwcml2LT5yZWdtYXAsIE1BWDk2NzI0X01JUElfVFgzKGluZGV4 KSwNCj4gKwkJCQkgICBNQVg5NjcyNF9NSVBJX1RYM19ERVNLRVdfSU5JVF9BVVRPIHwNCj4gKwkJ CQkgICBNQVg5NjcyNF9NSVBJX1RYM19ERVNLRVdfSU5JVF84WDMySyk7DQo+ICsJCWlmIChyZXQp DQo+ICsJCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJCS8qIEVuYWJsZSBwZXJpb2RpYyBkZXNrZXcg d2l0aCAyIHggMWsgVUkuLiAqLw0KPiArCQlyZXQgPSByZWdtYXBfd3JpdGUocHJpdi0+cmVnbWFw LCBNQVg5NjcyNF9NSVBJX1RYNChpbmRleCksDQo+ICsJCQkJICAgTUFYOTY3MjRfTUlQSV9UWDRf REVTS0VXX1BFUl9BVVRPIHwNCj4gKwkJCQkgICBNQVg5NjcyNF9NSVBJX1RYNF9ERVNLRVdfUEVS XzJLKTsNCj4gKwkJaWYgKHJldCkNCj4gKwkJCXJldHVybiByZXQ7DQo+ICsJfSBlbHNlIHsNCj4g KwkJLyogRGlzYWJsZSBpbml0aWFsIGRlc2tldy4gKi8NCj4gKwkJcmV0ID0gcmVnbWFwX3dyaXRl KHByaXYtPnJlZ21hcCwgTUFYOTY3MjRfTUlQSV9UWDMoaW5kZXgpLA0KPiAweDApOw0KPiArCQlp ZiAocmV0KQ0KPiArCQkJcmV0dXJuIHJldDsNCj4gKw0KPiArCQkvKiBEaXNhYmxlIHBlcmlvZGlj IGRlc2tldy4gKi8NCj4gKwkJcmV0ID0gcmVnbWFwX3dyaXRlKHByaXYtPnJlZ21hcCwgTUFYOTY3 MjRfTUlQSV9UWDQoaW5kZXgpLA0KPiAweDApOw0KPiArCQlpZiAocmV0KQ0KPiArCQkJcmV0dXJu IHJldDsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoaXNfY3BoeSkgew0KPiArCQkvKiBDb25maWd1cmUg Qy1QSFkgdGltaW5ncy4gKi8NCj4gKwkJcmV0ID0gcmVnbWFwX3dyaXRlKHByaXYtPnJlZ21hcCwg TUFYOTY3MjRfTUlQSV9QSFkxMywNCj4gKw0KPiBNQVg5NjcyNF9NSVBJX1BIWTEzX1RfVDNfUFJF QkVHSU5fNjRYNyk7DQo+ICsJCWlmIChyZXQpDQo+ICsJCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJ CXJldCA9IHJlZ21hcF93cml0ZShwcml2LT5yZWdtYXAsIE1BWDk2NzI0X01JUElfUEhZMTQsDQo+ ICsJCQkJICAgTUFYOTY3MjRfTUlQSV9QSFkxNF9UX1QzX1BSRVBfNTVOUyB8DQo+ICsJCQkJICAg TUFYOTY3MjRfTUlQSV9QSFkxNF9UX1QzX1BPU1RfMzJYNyk7DQo+ICsJCWlmIChyZXQpDQo+ICsJ CQlyZXR1cm4gcmV0Ow0KPiArCX0NCj4gKw0KPiArCS8qIFB1dCBEUExMIGJsb2NrIGludG8gcmVz ZXQuICovDQo+ICsJcmV0ID0gcmVnbWFwX2NsZWFyX2JpdHMocHJpdi0+cmVnbWFwLCBNQVg5Njcy NF9EUExMXzAoaW5kZXgpLA0KPiArCQkJCU1BWDk2NzI0X0RQTExfMF9DT05GSUdfU09GVF9SU1Rf Tik7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiArCS8qIFNldCBEUExM IGZyZXF1ZW5jeS4gKi8NCj4gKwlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi0+cmVnbWFw LCBNQVg5NjcyNF9CQUNLVE9QMjIoaW5kZXgpLA0KPiArCQkJCSBNQVg5NjcyNF9CQUNLVE9QMjJf UEhZX0NTSV9UWF9EUExMLA0KPiArDQo+IEZJRUxEX1BSRVAoTUFYOTY3MjRfQkFDS1RPUDIyX1BI WV9DU0lfVFhfRFBMTCwNCj4gKwkJCQkJICAgIGRpdl91NjQoZHBsbF9mcmVxLCAxMDAwMDAwMDAp KSk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiArCS8qIEVuYWJsZSBE UExMIGZyZXF1ZW5jeS4gKi8NCj4gKwlyZXQgPSByZWdtYXBfc2V0X2JpdHMocHJpdi0+cmVnbWFw LCBNQVg5NjcyNF9CQUNLVE9QMjIoaW5kZXgpLA0KPiArCQkJICAgICAgTUFYOTY3MjRfQkFDS1RP UDIyX1BIWV9DU0lfVFhfRFBMTF9FTik7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsN Cj4gKw0KPiArCS8qIFB1bGwgRFBMTCBibG9jayBvdXQgb2YgcmVzZXQuICovDQo+ICsJcmV0dXJu IHJlZ21hcF9zZXRfYml0cyhwcml2LT5yZWdtYXAsIE1BWDk2NzI0X0RQTExfMChpbmRleCksDQo+ ICsJCQkgICAgICAgTUFYOTY3MjRfRFBMTF8wX0NPTkZJR19TT0ZUX1JTVF9OKTsNCj4gK30NCj4g Kw0KPiArc3RhdGljIGludCBtYXg5NjcyNF9zZXRfcGh5X21vZGUoc3RydWN0IG1heF9kZXMgKmRl cywgc3RydWN0IG1heF9kZXNfcGh5DQo+ICpwaHksDQo+ICsJCQkJIHN0cnVjdCBtYXhfZGVzX3Bo eV9tb2RlICptb2RlKQ0KPiArew0KPiArCXN0cnVjdCBtYXg5NjcyNF9wcml2ICpwcml2ID0gZGVz X3RvX3ByaXYoZGVzKTsNCj4gKwl1bnNpZ25lZCBpbnQgaW5kZXggPSBtYXg5NjcyNF9waHlfaWQo ZGVzLCBwaHkpOw0KPiArCWludCByZXQ7DQo+ICsNCj4gKwkvKiBTZXQgYWx0ZXJuYXRlIG1lbW9y eSBtYXAgbW9kZXMuICovDQo+ICsJcmV0ID0gcmVnbWFwX2Fzc2lnbl9iaXRzKHByaXYtPnJlZ21h cCwgTUFYOTY3MjRfTUlQSV9UWDUxKGluZGV4KSwNCj4gKwkJCQkgTUFYOTY3MjRfTUlQSV9UWDUx X0FMVF9NRU1fTUFQXzEyLA0KPiArCQkJCSBtb2RlLT5hbHRfbWVtX21hcDEyKTsNCj4gKwlpZiAo cmV0KQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJcmV0ID0gcmVnbWFwX2Fzc2lnbl9iaXRz KHByaXYtPnJlZ21hcCwgTUFYOTY3MjRfTUlQSV9UWDUxKGluZGV4KSwNCj4gKwkJCQkgTUFYOTY3 MjRfTUlQSV9UWDUxX0FMVF9NRU1fTUFQXzgsDQo+ICsJCQkJIG1vZGUtPmFsdF9tZW1fbWFwOCk7 DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiArCXJldCA9IHJlZ21hcF9h c3NpZ25fYml0cyhwcml2LT5yZWdtYXAsIE1BWDk2NzI0X01JUElfVFg1MShpbmRleCksDQo+ICsJ CQkJIE1BWDk2NzI0X01JUElfVFg1MV9BTFRfTUVNX01BUF8xMCwNCj4gKwkJCQkgbW9kZS0+YWx0 X21lbV9tYXAxMCk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiArCXJl dHVybiByZWdtYXBfYXNzaWduX2JpdHMocHJpdi0+cmVnbWFwLCBNQVg5NjcyNF9NSVBJX1RYNTEo aW5kZXgpLA0KPiArCQkJCSAgTUFYOTY3MjRfTUlQSV9UWDUxX0FMVDJfTUVNX01BUF84LA0KPiAr CQkJCSAgbW9kZS0+YWx0Ml9tZW1fbWFwOCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgbWF4 OTY3MjRfc2V0X3BoeV9lbmFibGUoc3RydWN0IG1heF9kZXMgKmRlcywgc3RydWN0IG1heF9kZXNf cGh5DQo+ICpwaHksDQo+ICsJCQkJICAgYm9vbCBlbmFibGUpDQo+ICt7DQo+ICsJc3RydWN0IG1h eDk2NzI0X3ByaXYgKnByaXYgPSBkZXNfdG9fcHJpdihkZXMpOw0KPiArCXVuc2lnbmVkIGludCBp bmRleCA9IG1heDk2NzI0X3BoeV9pZChkZXMsIHBoeSk7DQo+ICsJdW5zaWduZWQgaW50IG51bV9o d19kYXRhX2xhbmVzOw0KPiArCXVuc2lnbmVkIGludCBtYXNrOw0KPiArDQo+ICsJbnVtX2h3X2Rh dGFfbGFuZXMgPSBtYXhfZGVzX3BoeV9od19kYXRhX2xhbmVzKGRlcywgcGh5KTsNCj4gKw0KPiAr CS8qDQo+ICsJICogU29tZSBjb25maWd1cmF0aW9ucyBtZXJnZSB0d28gbG9naWNhbCBQSFlzIGlu dG8gb25lIGhhcmR3YXJlIFBIWS4NCj4gKwkgKiBTa2lwIHdyaXRlcyBmb3IgYWJzb3JiZWQgUEhZ cyB0byBhdm9pZCBjbG9iYmVyaW5nIHRoZSBtYXN0ZXIncyBiaXRzLg0KPiArCSAqLw0KPiArCWlm ICghbnVtX2h3X2RhdGFfbGFuZXMpDQo+ICsJCXJldHVybiAwOw0KPiArDQo+ICsJaWYgKG51bV9o d19kYXRhX2xhbmVzID09IDQpDQo+ICsJCS8qIFBIWSAxIC0+IGJpdHMgWzU6NF0gKi8NCj4gKwkJ LyogUEhZIDIgLT4gYml0cyBbNzo2XSAqLw0KPiArCQltYXNrID0gTUFYOTY3MjRfTUlQSV9QSFky X1BIWV9TVERCX05fNChpbmRleCk7DQo+ICsJZWxzZQ0KPiArCQltYXNrID0gTUFYOTY3MjRfTUlQ SV9QSFkyX1BIWV9TVERCX05fMihpbmRleCk7DQo+ICsNCj4gKwlyZXR1cm4gcmVnbWFwX2Fzc2ln bl9iaXRzKHByaXYtPnJlZ21hcCwgTUFYOTY3MjRfTUlQSV9QSFkyLCBtYXNrLA0KPiArZW5hYmxl KTsgfQ0KPiArDQo+ICtzdGF0aWMgaW50IG1heDk2NzI0X3NldF9waXBlX3JlbWFwKHN0cnVjdCBt YXhfZGVzICpkZXMsDQo+ICsJCQkJICAgc3RydWN0IG1heF9kZXNfcGlwZSAqcGlwZSwNCj4gKwkJ CQkgICB1bnNpZ25lZCBpbnQgaSwNCj4gKwkJCQkgICBzdHJ1Y3QgbWF4X2Rlc19yZW1hcCAqcmVt YXApDQo+ICt7DQo+ICsJc3RydWN0IG1heDk2NzI0X3ByaXYgKnByaXYgPSBkZXNfdG9fcHJpdihk ZXMpOw0KPiArCXN0cnVjdCBtYXhfZGVzX3BoeSAqcGh5ID0gJmRlcy0+cGh5c1tyZW1hcC0+cGh5 XTsNCj4gKwl1bnNpZ25lZCBpbnQgcGh5X2lkID0gbWF4OTY3MjRfcGh5X2lkKGRlcywgcGh5KTsN Cj4gKwl1bnNpZ25lZCBpbnQgaW5kZXggPSBwaXBlLT5pbmRleDsNCj4gKwlpbnQgcmV0Ow0KPiAr DQo+ICsJLyogU2V0IHNvdXJjZSBEYXRhIFR5cGUgYW5kIFZpcnR1YWwgQ2hhbm5lbC4gKi8NCj4g KwkvKiBUT0RPOiBpbXBsZW1lbnQgZXh0ZW5kZWQgVmlydHVhbCBDaGFubmVsLiAqLw0KPiArCXJl dCA9IHJlZ21hcF93cml0ZShwcml2LT5yZWdtYXAsIE1BWDk2NzI0X01JUElfVFgxMyhpbmRleCwg aSksDQo+ICsJCQkgICBGSUVMRF9QUkVQKE1BWDk2NzI0X01JUElfVFgxM19NQVBfU1JDX0RULA0K PiArCQkJCSAgICAgIHJlbWFwLT5mcm9tX2R0KSB8DQo+ICsJCQkgICBGSUVMRF9QUkVQKE1BWDk2 NzI0X01JUElfVFgxM19NQVBfU1JDX1ZDLA0KPiArCQkJCSAgICAgIHJlbWFwLT5mcm9tX3ZjKSk7 DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiArCS8qIFNldCBkZXN0aW5h dGlvbiBEYXRhIFR5cGUgYW5kIFZpcnR1YWwgQ2hhbm5lbC4gKi8NCj4gKwkvKiBUT0RPOiBpbXBs ZW1lbnQgZXh0ZW5kZWQgVmlydHVhbCBDaGFubmVsLiAqLw0KPiArCXJldCA9IHJlZ21hcF93cml0 ZShwcml2LT5yZWdtYXAsIE1BWDk2NzI0X01JUElfVFgxNChpbmRleCwgaSksDQo+ICsJCQkgICBG SUVMRF9QUkVQKE1BWDk2NzI0X01JUElfVFgxNF9NQVBfRFNUX0RULA0KPiArCQkJCSAgICAgIHJl bWFwLT50b19kdCkgfA0KPiArCQkJICAgRklFTERfUFJFUChNQVg5NjcyNF9NSVBJX1RYMTRfTUFQ X0RTVF9WQywNCj4gKwkJCQkgICAgICByZW1hcC0+dG9fdmMpKTsNCj4gKwlpZiAocmV0KQ0KPiAr CQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJLyogU2V0IGRlc3RpbmF0aW9uIFBIWS4gKi8NCj4gKwly ZXR1cm4gcmVnbWFwX3VwZGF0ZV9iaXRzKHByaXYtPnJlZ21hcCwgTUFYOTY3MjRfTUlQSV9UWDQ1 KGluZGV4LA0KPiBpKSwNCj4gKwkJCQkgIE1BWDk2NzI0X01JUElfVFg0NV9NQVBfRFBIWV9ERVNU KGkpLA0KPiArDQo+IGZpZWxkX3ByZXAoTUFYOTY3MjRfTUlQSV9UWDQ1X01BUF9EUEhZX0RFU1Qo aSksDQo+ICsJCQkJCSAgICAgcGh5X2lkKSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgbWF4 OTY3MjRfc2V0X3BpcGVfcmVtYXBzX2VuYWJsZShzdHJ1Y3QgbWF4X2RlcyAqZGVzLA0KPiArCQkJ CQkgICBzdHJ1Y3QgbWF4X2Rlc19waXBlICpwaXBlLA0KPiArCQkJCQkgICB1bnNpZ25lZCBpbnQg bWFzaykNCj4gK3sNCj4gKwlzdHJ1Y3QgbWF4OTY3MjRfcHJpdiAqcHJpdiA9IGRlc190b19wcml2 KGRlcyk7DQo+ICsJdW5zaWduZWQgaW50IGluZGV4ID0gcGlwZS0+aW5kZXg7DQo+ICsJaW50IHJl dDsNCj4gKw0KPiArCXJldCA9IHJlZ21hcF93cml0ZShwcml2LT5yZWdtYXAsIE1BWDk2NzI0X01J UElfVFgxMShpbmRleCksIG1hc2spOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiByZXQ7DQo+ ICsNCj4gKwlyZXR1cm4gcmVnbWFwX3dyaXRlKHByaXYtPnJlZ21hcCwgTUFYOTY3MjRfTUlQSV9U WDEyKGluZGV4KSwgbWFzaw0KPiA+Pg0KPiArOCk7IH0NCj4gKw0KPiArc3RhdGljIGludCBtYXg5 NjcyNF9zZXRfcGlwZV90dW5uZWxfcGh5KHN0cnVjdCBtYXhfZGVzICpkZXMsDQo+ICsJCQkJCXN0 cnVjdCBtYXhfZGVzX3BpcGUgKnBpcGUsDQo+ICsJCQkJCXN0cnVjdCBtYXhfZGVzX3BoeSAqcGh5 KQ0KPiArew0KPiArCXN0cnVjdCBtYXg5NjcyNF9wcml2ICpwcml2ID0gZGVzX3RvX3ByaXYoZGVz KTsNCj4gKwl1bnNpZ25lZCBpbnQgcGh5X2luZGV4ID0gbWF4OTY3MjRfcGh5X2lkKGRlcywgcGh5 KTsNCj4gKw0KPiArCXJldHVybiByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi0+cmVnbWFwLCBNQVg5 NjcyNF9NSVBJX1RYNTcocGlwZS0NCj4gPmluZGV4KSwNCj4gKwkJCQkgIE1BWDk2NzI0X01JUElf VFg1N19UVU5fREVTVCwNCj4gKw0KPiBGSUVMRF9QUkVQKE1BWDk2NzI0X01JUElfVFg1N19UVU5f REVTVCwNCj4gKwkJCQkJICAgICBwaHlfaW5kZXgpKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlu dCBtYXg5NjcyNF9zZXRfcGlwZV9waHkoc3RydWN0IG1heF9kZXMgKmRlcywgc3RydWN0IG1heF9k ZXNfcGlwZQ0KPiAqcGlwZSwNCj4gKwkJCQkgc3RydWN0IG1heF9kZXNfcGh5ICpwaHkpDQo+ICt7 DQo+ICsJc3RydWN0IG1heDk2NzI0X3ByaXYgKnByaXYgPSBkZXNfdG9fcHJpdihkZXMpOw0KPiAr CXVuc2lnbmVkIGludCBwaHlfaW5kZXggPSBtYXg5NjcyNF9waHlfaWQoZGVzLCBwaHkpOw0KPiAr DQo+ICsJcmV0dXJuIHJlZ21hcF91cGRhdGVfYml0cyhwcml2LT5yZWdtYXAsIE1BWDk2NzI0X01J UElfQ1RSTF9TRUwsDQo+ICsJCQkJICBNQVg5NjcyNF9NSVBJX0NUUkxfU0VMX01BU0socGlwZS0N Cj4gPmluZGV4KSwNCj4gKw0KPiBmaWVsZF9wcmVwKE1BWDk2NzI0X01JUElfQ1RSTF9TRUxfTUFT SyhwaXBlLT5pbmRleCksDQo+ICsJCQkJCSAgICAgcGh5X2luZGV4KSk7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyBpbnQgbWF4OTY3MjRfc2V0X3BpcGVfZW5hYmxlKHN0cnVjdCBtYXhfZGVzICpkZXMs IHN0cnVjdA0KPiBtYXhfZGVzX3BpcGUgKnBpcGUsDQo+ICsJCQkJICAgIGJvb2wgZW5hYmxlKQ0K PiArew0KPiArCXN0cnVjdCBtYXg5NjcyNF9wcml2ICpwcml2ID0gZGVzX3RvX3ByaXYoZGVzKTsN Cj4gKwl1bnNpZ25lZCBpbnQgaW5kZXggPSBwaXBlLT5pbmRleDsNCj4gKw0KPiArCXJldHVybiBy ZWdtYXBfYXNzaWduX2JpdHMocHJpdi0+cmVnbWFwLCBNQVg5NjcyNF9WSURFT19QSVBFX0VOLA0K PiArCQkJCSAgTUFYOTY3MjRfVklERU9fUElQRV9FTl9NQVNLKGluZGV4KSwNCj4gZW5hYmxlKTsg fQ0KPiArDQo+ICtzdGF0aWMgaW50IG1heDk2NzI0X3NldF9waXBlX3N0cmVhbV9pZChzdHJ1Y3Qg bWF4X2RlcyAqZGVzLCBzdHJ1Y3QNCj4gbWF4X2Rlc19waXBlICpwaXBlLA0KPiArCQkJCSAgICAg ICB1bnNpZ25lZCBpbnQgc3RyZWFtX2lkKQ0KPiArew0KPiArCXN0cnVjdCBtYXg5NjcyNF9wcml2 ICpwcml2ID0gZGVzX3RvX3ByaXYoZGVzKTsNCj4gKwl1bnNpZ25lZCBpbnQgaW5kZXggPSBwaXBl LT5pbmRleDsNCj4gKw0KPiArCXJldHVybiByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi0+cmVnbWFw LA0KPiBNQVg5NjcyNF9WSURFT19QSVBFX1NFTChpbmRleCksDQo+ICsJCQkJICBNQVg5NjcyNF9W SURFT19QSVBFX1NFTF9TVFJFQU0oaW5kZXgpLA0KPiArDQo+IGZpZWxkX3ByZXAoTUFYOTY3MjRf VklERU9fUElQRV9TRUxfU1RSRUFNKGluZGV4KSwNCj4gKwkJCQkJICAgICBzdHJlYW1faWQpKTsN Cj4gK30NCj4gKw0KPiArc3RhdGljIGludCBtYXg5NjcyNF9zZXRfcGlwZV9saW5rKHN0cnVjdCBt YXhfZGVzICpkZXMsIHN0cnVjdCBtYXhfZGVzX3BpcGUNCj4gKnBpcGUsDQo+ICsJCQkJICBzdHJ1 Y3QgbWF4X2Rlc19saW5rICpsaW5rKQ0KPiArew0KPiArCXN0cnVjdCBtYXg5NjcyNF9wcml2ICpw cml2ID0gZGVzX3RvX3ByaXYoZGVzKTsNCj4gKwl1bnNpZ25lZCBpbnQgaW5kZXggPSBwaXBlLT5p bmRleDsNCj4gKw0KPiArCXJldHVybiByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi0+cmVnbWFwLA0K PiBNQVg5NjcyNF9WSURFT19QSVBFX1NFTChpbmRleCksDQo+ICsJCQkJICBNQVg5NjcyNF9WSURF T19QSVBFX1NFTF9MSU5LKGluZGV4KSwNCj4gKw0KPiBmaWVsZF9wcmVwKE1BWDk2NzI0X1ZJREVP X1BJUEVfU0VMX0xJTksoaW5kZXgpLA0KPiArCQkJCQkgICAgIGxpbmstPmluZGV4KSk7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyBpbnQgbWF4OTY3MjRfc2V0X3BpcGVfbW9kZShzdHJ1Y3QgbWF4X2Rl cyAqZGVzLA0KPiArCQkJCSAgc3RydWN0IG1heF9kZXNfcGlwZSAqcGlwZSwNCj4gKwkJCQkgIHN0 cnVjdCBtYXhfZGVzX3BpcGVfbW9kZSAqbW9kZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgbWF4OTY3MjRf cHJpdiAqcHJpdiA9IGRlc190b19wcml2KGRlcyk7DQo+ICsJdW5zaWduZWQgaW50IGluZGV4ID0g cGlwZS0+aW5kZXg7DQo+ICsJdW5zaWduZWQgaW50IHJlZywgbWFzaywgbW9kZV9tYXNrOw0KPiAr CWludCByZXQ7DQo+ICsNCj4gKwkvKiBTZXQgOGJpdCBkb3VibGUgbW9kZS4gKi8NCj4gKwlyZXQg PSByZWdtYXBfYXNzaWduX2JpdHMocHJpdi0+cmVnbWFwLCBNQVg5NjcyNF9CQUNLVE9QMjEoaW5k ZXgpLA0KPiArCQkJCSBNQVg5NjcyNF9CQUNLVE9QMjFfQlBQOERCTChpbmRleCksDQo+IG1vZGUt PmRibDgpOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiByZXQ7DQo+ICsNCj4gKwlyZXQgPSBy ZWdtYXBfYXNzaWduX2JpdHMocHJpdi0+cmVnbWFwLCBNQVg5NjcyNF9CQUNLVE9QMjQoaW5kZXgp LA0KPiArDQo+IE1BWDk2NzI0X0JBQ0tUT1AyNF9CUFA4REJMX01PREUoaW5kZXgpLA0KPiArCQkJ CSBtb2RlLT5kYmw4bW9kZSk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0K PiArCS8qIFNldCAxMGJpdCBkb3VibGUgbW9kZS4gKi8NCj4gKwlpZiAoaW5kZXggJSA0ID09IDMp IHsNCj4gKwkJcmVnID0gTUFYOTY3MjRfQkFDS1RPUDMwKGluZGV4KTsNCj4gKwkJbWFzayA9IE1B WDk2NzI0X0JBQ0tUT1AzMF9CUFAxMERCTDM7DQo+ICsJCW1vZGVfbWFzayA9IE1BWDk2NzI0X0JB Q0tUT1AzMF9CUFAxMERCTDNfTU9ERTsNCj4gKwl9IGVsc2UgaWYgKGluZGV4ICUgNCA9PSAyKSB7 DQo+ICsJCXJlZyA9IE1BWDk2NzI0X0JBQ0tUT1AzMShpbmRleCk7DQo+ICsJCW1hc2sgPSBNQVg5 NjcyNF9CQUNLVE9QMzFfQlBQMTBEQkwyOw0KPiArCQltb2RlX21hc2sgPSBNQVg5NjcyNF9CQUNL VE9QMzFfQlBQMTBEQkwyX01PREU7DQo+ICsJfSBlbHNlIGlmIChpbmRleCAlIDQgPT0gMSkgew0K PiArCQlyZWcgPSBNQVg5NjcyNF9CQUNLVE9QMzIoaW5kZXgpOw0KPiArCQltYXNrID0gTUFYOTY3 MjRfQkFDS1RPUDMyX0JQUDEwREJMMTsNCj4gKwkJbW9kZV9tYXNrID0gTUFYOTY3MjRfQkFDS1RP UDMyX0JQUDEwREJMMV9NT0RFOw0KPiArCX0gZWxzZSB7DQo+ICsJCXJlZyA9IE1BWDk2NzI0X0JB Q0tUT1AzMihpbmRleCk7DQo+ICsJCW1hc2sgPSBNQVg5NjcyNF9CQUNLVE9QMzJfQlBQMTBEQkww Ow0KPiArCQltb2RlX21hc2sgPSBNQVg5NjcyNF9CQUNLVE9QMzJfQlBQMTBEQkwwX01PREU7DQo+ ICsJfQ0KPiArDQo+ICsJcmV0ID0gcmVnbWFwX2Fzc2lnbl9iaXRzKHByaXYtPnJlZ21hcCwgcmVn LCBtYXNrLCBtb2RlLT5kYmwxMCk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsNCj4g Kw0KPiArCXJldCA9IHJlZ21hcF9hc3NpZ25fYml0cyhwcml2LT5yZWdtYXAsIHJlZywgbW9kZV9t YXNrLCBtb2RlLQ0KPiA+ZGJsMTBtb2RlKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1cm4gcmV0 Ow0KPiArDQo+ICsJLyogU2V0IDEyYml0IGRvdWJsZSBtb2RlLiAqLw0KPiArCXJldHVybiByZWdt YXBfYXNzaWduX2JpdHMocHJpdi0+cmVnbWFwLA0KPiBNQVg5NjcyNF9CQUNLVE9QMzIoaW5kZXgp LA0KPiArCQkJCSAgTUFYOTY3MjRfQkFDS1RPUDMyX0JQUDEyKGluZGV4KSwgbW9kZS0NCj4gPmRi bDEyKTsgfQ0KPiArDQo+ICtzdGF0aWMgaW50IG1heDk2NzI0X3NldF9waXBlX3R1bm5lbF9lbmFi bGUoc3RydWN0IG1heF9kZXMgKmRlcywNCj4gKwkJCQkJICAgc3RydWN0IG1heF9kZXNfcGlwZSAq cGlwZSwgYm9vbA0KPiBlbmFibGUpIHsNCj4gKwlzdHJ1Y3QgbWF4OTY3MjRfcHJpdiAqcHJpdiA9 IGRlc190b19wcml2KGRlcyk7DQo+ICsNCj4gKwlyZXR1cm4gcmVnbWFwX2Fzc2lnbl9iaXRzKHBy aXYtPnJlZ21hcCwgTUFYOTY3MjRfTUlQSV9UWDU0KHBpcGUtDQo+ID5pbmRleCksDQo+ICsJCQkJ ICBNQVg5NjcyNF9NSVBJX1RYNTRfVFVOX0VOLCBlbmFibGUpOyB9DQo+ICsNCj4gK3N0YXRpYyBp bnQgbWF4OTY3MjRfcmVhZF9saW5rX2xvY2tlZChzdHJ1Y3QgbWF4OTY3MjRfcHJpdiAqcHJpdiwN Cj4gKwkJCQkgICAgIHVuc2lnbmVkIGludCBpbmRleCwgYm9vbCAqbG9ja2VkKSB7DQo+ICsJdW5z aWduZWQgaW50IHJlZywgdmFsOw0KPiArCWludCByZXQ7DQo+ICsNCj4gKwlyZWcgPSBpbmRleCA9 PSAwID8gTUFYOTY3MjRfQ1RSTDMgOiBNQVg5NjcyNF9DVFJMMTIoaW5kZXgpOw0KPiArDQo+ICsJ cmV0ID0gcmVnbWFwX3JlYWQocHJpdi0+cmVnbWFwLCByZWcsICZ2YWwpOw0KPiArCWlmIChyZXQp DQo+ICsJCXJldHVybiByZXQ7DQo+ICsNCj4gKwkqbG9ja2VkID0gdmFsICYgTUFYOTY3MjRfQ1RS TF9MT0NLRUQ7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBt YXg5NjcyNF93YWl0X2Zvcl9saW5rX2xvY2soc3RydWN0IG1heDk2NzI0X3ByaXYgKnByaXYsDQo+ ICsJCQkJICAgICAgIHVuc2lnbmVkIGludCBtYXNrKQ0KPiArew0KPiArCXVuc2lnbmVkIGludCBp Ow0KPiArCWJvb2wgbG9ja2VkOw0KPiArCWludCByZXQsIGVycjsNCj4gKw0KPiArCWZvciAoaSA9 IDA7IGkgPCBwcml2LT5kZXMuaW5mby0+bnVtX2xpbmtzOyBpKyspIHsNCj4gKwkJaWYgKCEobWFz ayAmIEJJVChpKSkpDQo+ICsJCQljb250aW51ZTsNCj4gKw0KPiArCQllcnIgPSByZWFkX3BvbGxf dGltZW91dChtYXg5NjcyNF9yZWFkX2xpbmtfbG9ja2VkLCByZXQsDQo+ICsJCQkJCXJldCB8fCBs b2NrZWQsDQo+ICsJCQkJCTEwICogVVNFQ19QRVJfTVNFQywNCj4gKwkJCQkJMjAwICogVVNFQ19Q RVJfTVNFQywgdHJ1ZSwNCj4gKwkJCQkJcHJpdiwgaSwgJmxvY2tlZCk7DQo+ICsJCWlmIChyZXQp DQo+ICsJCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJCWlmIChlcnIpIHsNCj4gKwkJCWRldl9kYmco cHJpdi0+ZGV2LA0KPiArCQkJCSJUaW1lb3V0IHdhaXRpbmcgZm9yIGxpbmsgJXUgbG9ja1xuIiwg aSk7DQo+ICsNCj4gKwkJCXJldHVybiBlcnI7DQo+ICsJCX0NCj4gKwl9DQo+ICsNCj4gKwlyZXR1 cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBtYXg5NjcyNF9zZWxlY3RfbGlua3Moc3Ry dWN0IG1heF9kZXMgKmRlcywgdW5zaWduZWQgaW50DQo+ICttYXNrKSB7DQo+ICsJc3RydWN0IG1h eDk2NzI0X3ByaXYgKnByaXYgPSBkZXNfdG9fcHJpdihkZXMpOw0KPiArCXVuc2lnbmVkIGludCB2 YWwgPSBwcml2LT5jY19wb3J0X2NmZzsNCj4gKwl1bnNpZ25lZCBpbnQgaTsNCj4gKwlpbnQgcmV0 Ow0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8IGRlcy0+aW5mby0+bnVtX2xpbmtzOyBpKyspIHsN Cj4gKwkJaWYgKCEobWFzayAmIEJJVChpKSkpDQo+ICsJCQl2YWwgfD0gTUFYOTY3MjRfUkVHM19D Q19QT1JUX1NFTChpKTsNCj4gKwl9DQo+ICsNCj4gKwlyZXQgPSByZWdtYXBfd3JpdGUocHJpdi0+ cmVnbWFwLCBNQVg5NjcyNF9SRUczLCB2YWwpOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiBy ZXQ7DQo+ICsNCj4gKwlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi0+cmVnbWFwLCBNQVg5 NjcyNF9SRUc2LA0KPiBNQVg5NjcyNF9SRUc2X0xJTktfRU4sDQo+ICsJCQkJIGZpZWxkX3ByZXAo TUFYOTY3MjRfUkVHNl9MSU5LX0VOLCBtYXNrKSk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJu IHJldDsNCj4gKw0KPiArCXJldCA9IHJlZ21hcF9zZXRfYml0cyhwcml2LT5yZWdtYXAsIE1BWDk2 NzI0X0NUUkwxLA0KPiArCQkJICAgICAgTUFYOTY3MjRfQ1RSTDFfUkVTRVRfT05FU0hPVCk7DQo+ ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiArCXJldHVybiBtYXg5NjcyNF93 YWl0X2Zvcl9saW5rX2xvY2socHJpdiwgbWFzayk7IH0NCj4gKw0KPiArc3RhdGljIGludCBtYXg5 NjcyNF9zZXRfbGlua192ZXJzaW9uKHN0cnVjdCBtYXhfZGVzICpkZXMsDQo+ICsJCQkJICAgICBz dHJ1Y3QgbWF4X2Rlc19saW5rICpsaW5rLA0KPiArCQkJCSAgICAgZW51bSBtYXhfc2VyZGVzX2dt c2xfdmVyc2lvbiB2ZXJzaW9uKSB7DQo+ICsJc3RydWN0IG1heDk2NzI0X3ByaXYgKnByaXYgPSBk ZXNfdG9fcHJpdihkZXMpOw0KPiArCXVuc2lnbmVkIGludCBpbmRleCA9IGxpbmstPmluZGV4Ow0K PiArCXVuc2lnbmVkIGludCB2YWw7DQo+ICsNCj4gKwlpZiAodmVyc2lvbiA9PSBNQVhfU0VSREVT X0dNU0xfMl82R0JQUykNCj4gKwkJdmFsID0gTUFYOTY3MjRfUkVHMjZfUlhfUkFURV82R0JQUzsN Cj4gKwllbHNlDQo+ICsJCXZhbCA9IE1BWDk2NzI0X1JFRzI2X1JYX1JBVEVfM0dCUFM7DQo+ICsN Cj4gKwlyZXR1cm4gcmVnbWFwX3VwZGF0ZV9iaXRzKHByaXYtPnJlZ21hcCwgTUFYOTY3MjRfUkVH MjYoaW5kZXgpLA0KPiArCQkJCSAgTUFYOTY3MjRfUkVHMjZfUlhfUkFURV9QSFkoaW5kZXgpLA0K PiArDQo+IGZpZWxkX3ByZXAoTUFYOTY3MjRfUkVHMjZfUlhfUkFURV9QSFkoaW5kZXgpLCB2YWwp KTsgfQ0KPiArDQo+ICtzdGF0aWMgaW50IG1heDk2NzI0X3NldF90cGdfdGltaW5ncyhzdHJ1Y3Qg bWF4OTY3MjRfcHJpdiAqcHJpdiwNCj4gKwkJCQkgICAgY29uc3Qgc3RydWN0IG1heF9zZXJkZXNf dHBnX3RpbWluZ3MgKnRtKSB7DQo+ICsJY29uc3Qgc3RydWN0IHJlZ19zZXF1ZW5jZSByZWdzW10g PSB7DQo+ICsJCVJFR19TRVFVRU5DRV8zKE1BWDk2NzI0X1ZTX0RMWV8yLCB0bS0+dnNfZGx5KSwN Cj4gKwkJUkVHX1NFUVVFTkNFXzMoTUFYOTY3MjRfVlNfSElHSF8yLCB0bS0+dnNfaGlnaCksDQo+ ICsJCVJFR19TRVFVRU5DRV8zKE1BWDk2NzI0X1ZTX0xPV18yLCB0bS0+dnNfbG93KSwNCj4gKwkJ UkVHX1NFUVVFTkNFXzMoTUFYOTY3MjRfVjJIXzIsIHRtLT52MmgpLA0KPiArCQlSRUdfU0VRVUVO Q0VfMihNQVg5NjcyNF9IU19ISUdIXzEsIHRtLT5oc19oaWdoKSwNCj4gKwkJUkVHX1NFUVVFTkNF XzIoTUFYOTY3MjRfSFNfTE9XXzEsIHRtLT5oc19sb3cpLA0KPiArCQlSRUdfU0VRVUVOQ0VfMihN QVg5NjcyNF9IU19DTlRfMSwgdG0tPmhzX2NudCksDQo+ICsJCVJFR19TRVFVRU5DRV8zKE1BWDk2 NzI0X1YyRF8yLCB0bS0+djJkKSwNCj4gKwkJUkVHX1NFUVVFTkNFXzIoTUFYOTY3MjRfREVfSElH SF8xLCB0bS0+ZGVfaGlnaCksDQo+ICsJCVJFR19TRVFVRU5DRV8yKE1BWDk2NzI0X0RFX0xPV18x LCB0bS0+ZGVfbG93KSwNCj4gKwkJUkVHX1NFUVVFTkNFXzIoTUFYOTY3MjRfREVfQ05UXzEsIHRt LT5kZV9jbnQpLA0KPiArCX07DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCXJldCA9IHJlZ21hcF9t dWx0aV9yZWdfd3JpdGUocHJpdi0+cmVnbWFwLCByZWdzLCBBUlJBWV9TSVpFKHJlZ3MpKTsNCj4g KwlpZiAocmV0KQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJcmV0dXJuIHJlZ21hcF93cml0 ZShwcml2LT5yZWdtYXAsIE1BWDk2NzI0X1BBVEdFTl8wLA0KPiArCQkJICAgIEZJRUxEX1BSRVAo TUFYOTY3MjRfUEFUR0VOXzBfVlRHX01PREUsDQo+ICsNCj4gTUFYOTY3MjRfUEFUR0VOXzBfVlRH X01PREVfRlJFRV9SVU5OSU5HKSB8DQo+ICsJCQkgICAgRklFTERfUFJFUChNQVg5NjcyNF9QQVRH RU5fMF9ERV9JTlYsIHRtLQ0KPiA+ZGVfaW52KSB8DQo+ICsJCQkgICAgRklFTERfUFJFUChNQVg5 NjcyNF9QQVRHRU5fMF9IU19JTlYsIHRtLQ0KPiA+aHNfaW52KSB8DQo+ICsJCQkgICAgRklFTERf UFJFUChNQVg5NjcyNF9QQVRHRU5fMF9WU19JTlYsIHRtLQ0KPiA+dnNfaW52KSB8DQo+ICsJCQkg ICAgRklFTERfUFJFUChNQVg5NjcyNF9QQVRHRU5fMF9HRU5fREUsIHRtLQ0KPiA+Z2VuX2RlKSB8 DQo+ICsJCQkgICAgRklFTERfUFJFUChNQVg5NjcyNF9QQVRHRU5fMF9HRU5fSFMsIHRtLQ0KPiA+ Z2VuX2hzKSB8DQo+ICsJCQkgICAgRklFTERfUFJFUChNQVg5NjcyNF9QQVRHRU5fMF9HRU5fVlMs IHRtLQ0KPiA+Z2VuX3ZzKSk7IH0NCj4gKw0KPiArc3RhdGljIGludCBtYXg5NjcyNF9zZXRfdHBn X2NsayhzdHJ1Y3QgbWF4OTY3MjRfcHJpdiAqcHJpdiwgdTMyIGNsb2NrKQ0KPiArew0KPiArCWJv b2wgcGF0Z2VuX2Nsa19zcmMgPSAwOw0KPiArCXU4IHBjbGtfc3JjOw0KPiArCWludCByZXQ7DQo+ ICsNCj4gKwlzd2l0Y2ggKGNsb2NrKSB7DQo+ICsJY2FzZSAyNTAwMDAwMDoNCj4gKwkJcGNsa19z cmMgPSBNQVg5NjcyNF9ERUJVR19FWFRSQV9QQ0xLX1NSQ18yNU1IWjsNCj4gKwkJYnJlYWs7DQo+ ICsJY2FzZSA3NTAwMDAwMDoNCj4gKwkJcGNsa19zcmMgPSBNQVg5NjcyNF9ERUJVR19FWFRSQV9Q Q0xLX1NSQ183NU1IWjsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSAxNTAwMDAwMDA6DQo+ICsJCXBj bGtfc3JjID0gTUFYOTY3MjRfREVCVUdfRVhUUkFfUENMS19TUkNfVVNFX1BJUEU7DQo+ICsJCXBh dGdlbl9jbGtfc3JjID0NCj4gTUFYOTY3MjRfVlBSQlNfUEFUR0VOX0NMS19TUkNfMTUwTUhaOw0K PiArCQlicmVhazsNCj4gKwljYXNlIDM3NTAwMDAwMDoNCj4gKwkJcGNsa19zcmMgPSBNQVg5Njcy NF9ERUJVR19FWFRSQV9QQ0xLX1NSQ19VU0VfUElQRTsNCj4gKwkJcGF0Z2VuX2Nsa19zcmMgPQ0K PiBNQVg5NjcyNF9WUFJCU19QQVRHRU5fQ0xLX1NSQ18zNzVNSFo7DQo+ICsJCWJyZWFrOw0KPiAr CWNhc2UgMDoNCj4gKwkJcmV0dXJuIDA7DQo+ICsJZGVmYXVsdDoNCj4gKwkJcmV0dXJuIC1FSU5W QUw7DQo+ICsJfQ0KPiArDQo+ICsJLyoNCj4gKwkgKiBUUEcgZGF0YSBpcyBhbHdheXMgaW5qZWN0 ZWQgb24gbGluayAwLCB3aGljaCBpcyBhbHdheXMgcm91dGVkIHRvDQo+ICsJICogcGlwZSAwLg0K PiArCSAqLw0KPiArCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhwcml2LT5yZWdtYXAsIE1BWDk2 NzI0X1ZQUkJTKDApLA0KPiArCQkJCSBNQVg5NjcyNF9WUFJCU19QQVRHRU5fQ0xLX1NSQywNCj4g Kw0KPiBGSUVMRF9QUkVQKE1BWDk2NzI0X1ZQUkJTX1BBVEdFTl9DTEtfU1JDLA0KPiArCQkJCQkg ICAgcGF0Z2VuX2Nsa19zcmMpKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiAr DQo+ICsJcmV0dXJuIHJlZ21hcF91cGRhdGVfYml0cyhwcml2LT5yZWdtYXAsIE1BWDk2NzI0X0RF QlVHX0VYVFJBLA0KPiArCQkJCSAgTUFYOTY3MjRfREVCVUdfRVhUUkFfUENMS19TUkMsDQo+ICsN Cj4gRklFTERfUFJFUChNQVg5NjcyNF9ERUJVR19FWFRSQV9QQ0xLX1NSQywNCj4gKwkJCQkJICAg ICBwY2xrX3NyYykpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IG1heDk2NzI0X3NldF90cGdf bW9kZShzdHJ1Y3QgbWF4OTY3MjRfcHJpdiAqcHJpdiwgYm9vbA0KPiArZW5hYmxlKSB7DQo+ICsJ dW5zaWduZWQgaW50IHBhdGdlbl9tb2RlOw0KPiArDQo+ICsJc3dpdGNoIChwcml2LT5kZXMudHBn X3BhdHRlcm4pIHsNCj4gKwljYXNlIE1BWF9TRVJERVNfVFBHX1BBVFRFUk5fR1JBRElFTlQ6DQo+ ICsJCXBhdGdlbl9tb2RlID0NCj4gTUFYOTY3MjRfUEFUR0VOXzFfUEFUR0VOX01PREVfR1JBRElF TlQ7DQo+ICsJCWJyZWFrOw0KPiArCWNhc2UgTUFYX1NFUkRFU19UUEdfUEFUVEVSTl9DSEVDS0VS Qk9BUkQ6DQo+ICsJCXBhdGdlbl9tb2RlID0NCj4gTUFYOTY3MjRfUEFUR0VOXzFfUEFUR0VOX01P REVfQ0hFQ0tFUjsNCj4gKwkJYnJlYWs7DQo+ICsJZGVmYXVsdDoNCj4gKwkJcmV0dXJuIC1FSU5W QUw7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIHJlZ21hcF91cGRhdGVfYml0cyhwcml2LT5yZWdt YXAsIE1BWDk2NzI0X1BBVEdFTl8xLA0KPiArCQkJCSAgTUFYOTY3MjRfUEFUR0VOXzFfUEFUR0VO X01PREUsDQo+ICsNCj4gRklFTERfUFJFUChNQVg5NjcyNF9QQVRHRU5fMV9QQVRHRU5fTU9ERSwN Cj4gKwkJCQkJICAgICBlbmFibGUgPyBwYXRnZW5fbW9kZQ0KPiArCQkJCQkJICAgIDoNCj4gTUFY OTY3MjRfUEFUR0VOXzFfUEFUR0VOX01PREVfRElTQUJMRUQpKTsNCj4gK30NCj4gKw0KPiArc3Rh dGljIGludCBtYXg5NjcyNF9zZXRfdHBnKHN0cnVjdCBtYXhfZGVzICpkZXMsDQo+ICsJCQkgICAg Y29uc3Qgc3RydWN0IG1heF9zZXJkZXNfdHBnX2VudHJ5ICplbnRyeSkgew0KPiArCXN0cnVjdCBt YXg5NjcyNF9wcml2ICpwcml2ID0gZGVzX3RvX3ByaXYoZGVzKTsNCj4gKwlzdHJ1Y3QgbWF4X3Nl cmRlc190cGdfdGltaW5ncyB0aW1pbmdzID0geyAwIH07DQo+ICsJaW50IHJldDsNCj4gKw0KPiAr CXJldCA9IG1heF9zZXJkZXNfZ2V0X3RwZ190aW1pbmdzKGVudHJ5LCAmdGltaW5ncyk7DQo+ICsJ aWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiArCXJldCA9IG1heDk2NzI0X3NldF90 cGdfdGltaW5ncyhwcml2LCAmdGltaW5ncyk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJl dDsNCj4gKw0KPiArCXJldCA9IG1heDk2NzI0X3NldF90cGdfY2xrKHByaXYsIHRpbWluZ3MuY2xv Y2spOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiByZXQ7DQo+ICsNCj4gKwlyZXQgPSBtYXg5 NjcyNF9zZXRfdHBnX21vZGUocHJpdiwgZW50cnkpOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVy biByZXQ7DQo+ICsNCj4gKwlyZXR1cm4gcmVnbWFwX2Fzc2lnbl9iaXRzKHByaXYtPnJlZ21hcCwg TUFYOTY3MjRfTUlQSV9QSFkwLA0KPiArCQkJCSAgTUFYOTY3MjRfTUlQSV9QSFkwX0ZPUkNFX0NT SV9PVVRfRU4sDQo+ICEhZW50cnkpOyB9DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWF4 X3NlcmRlc190cGdfZW50cnkgbWF4OTY3MjRfdHBnX2VudHJpZXNbXSA9IHsNCj4gKwlNQVhfVFBH X0VOVFJZXzY0MFg0ODBQNjBfUkdCODg4LA0KPiArCU1BWF9UUEdfRU5UUllfMTkyMFgxMDgwUDMw X1JHQjg4OCwNCj4gKwlNQVhfVFBHX0VOVFJZXzE5MjBYMTA4MFA2MF9SR0I4ODgsDQo+ICt9Ow0K PiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG1heF9kZXNfaW5mbyBtYXg5NjcyNF9kZXNfaW5m byA9IHsNCj4gKwkubnVtX3BoeXMgPSA0LA0KPiArCS5udW1fbGlua3MgPSA0LA0KPiArCS5udW1f cmVtYXBzX3Blcl9waXBlID0gMTYsDQo+ICsJLnBoeXNfY29uZmlncyA9IHsNCj4gKwkJLm51bV9j b25maWdzID0gQVJSQVlfU0laRShtYXg5NjcyNF9waHlzX2NvbmZpZ3MpLA0KPiArCQkuY29uZmln cyA9IG1heDk2NzI0X3BoeXNfY29uZmlncywNCj4gKwl9LA0KPiArCS50cGdfZW50cmllcyA9IHsN Cj4gKwkJLm51bV9lbnRyaWVzID0gQVJSQVlfU0laRShtYXg5NjcyNF90cGdfZW50cmllcyksDQo+ ICsJCS5lbnRyaWVzID0gbWF4OTY3MjRfdHBnX2VudHJpZXMsDQo+ICsJfSwNCj4gKwkudHBnX21v ZGUgPSBNQVhfU0VSREVTX0dNU0xfUElYRUxfTU9ERSwNCj4gKwkudHBnX3BhdHRlcm5zID0gQklU KE1BWF9TRVJERVNfVFBHX1BBVFRFUk5fQ0hFQ0tFUkJPQVJEKSB8DQo+ICsJCQlCSVQoTUFYX1NF UkRFU19UUEdfUEFUVEVSTl9HUkFESUVOVCksDQo+ICsJLnVzZV9hdHIgPSB0cnVlLA0KPiArfTsN Cj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBtYXhfZGVzX29wcyBtYXg5NjcyNF9kZXNfb3Bz ID0geyAjaWZkZWYNCj4gK0NPTkZJR19WSURFT19BRFZfREVCVUcNCj4gKwkucmVnX3JlYWQgPSBt YXg5NjcyNF9yZWdfcmVhZCwNCj4gKwkucmVnX3dyaXRlID0gbWF4OTY3MjRfcmVnX3dyaXRlLA0K PiArI2VuZGlmDQo+ICsJLmxvZ19waXBlX3N0YXR1cyA9IG1heDk2NzI0X2xvZ19waXBlX3N0YXR1 cywNCj4gKwkubG9nX3BoeV9zdGF0dXMgPSBtYXg5NjcyNF9sb2dfcGh5X3N0YXR1cywNCj4gKwku c2V0X2VuYWJsZSA9IG1heDk2NzI0X3NldF9lbmFibGUsDQo+ICsJLmluaXQgPSBtYXg5NjcyNF9p bml0LA0KPiArCS5pbml0X3BoeSA9IG1heDk2NzI0X2luaXRfcGh5LA0KPiArCS5zZXRfcGh5X21v ZGUgPSBtYXg5NjcyNF9zZXRfcGh5X21vZGUsDQo+ICsJLnNldF9waHlfZW5hYmxlID0gbWF4OTY3 MjRfc2V0X3BoeV9lbmFibGUsDQo+ICsJLnNldF9waXBlX3N0cmVhbV9pZCA9IG1heDk2NzI0X3Nl dF9waXBlX3N0cmVhbV9pZCwNCj4gKwkuc2V0X3BpcGVfbGluayA9IG1heDk2NzI0X3NldF9waXBl X2xpbmssDQo+ICsJLnNldF9waXBlX2VuYWJsZSA9IG1heDk2NzI0X3NldF9waXBlX2VuYWJsZSwN Cj4gKwkuc2V0X3BpcGVfcmVtYXAgPSBtYXg5NjcyNF9zZXRfcGlwZV9yZW1hcCwNCj4gKwkuc2V0 X3BpcGVfcmVtYXBzX2VuYWJsZSA9IG1heDk2NzI0X3NldF9waXBlX3JlbWFwc19lbmFibGUsDQo+ ICsJLnNldF9waXBlX21vZGUgPSBtYXg5NjcyNF9zZXRfcGlwZV9tb2RlLA0KPiArCS5zZXRfdHBn ID0gbWF4OTY3MjRfc2V0X3RwZywNCj4gKwkuc2VsZWN0X2xpbmtzID0gbWF4OTY3MjRfc2VsZWN0 X2xpbmtzLA0KPiArCS5zZXRfbGlua192ZXJzaW9uID0gbWF4OTY3MjRfc2V0X2xpbmtfdmVyc2lv biwgfTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBtYXg5NjcyNF9jaGlwX2luZm8gbWF4 OTY3MjRfaW5mbyA9IHsNCj4gKwkudmVyc2lvbnMgPSBCSVQoTUFYX1NFUkRFU19HTVNMXzJfM0dC UFMpIHwNCj4gKwkJICAgIEJJVChNQVhfU0VSREVTX0dNU0xfMl82R0JQUyksDQo+ICsJLm1vZGVz ID0gQklUKE1BWF9TRVJERVNfR01TTF9QSVhFTF9NT0RFKSB8DQo+ICsJCSBCSVQoTUFYX1NFUkRF U19HTVNMX1RVTk5FTF9NT0RFKSwNCj4gKwkuc2V0X3BpcGVfdHVubmVsX2VuYWJsZSA9IG1heDk2 NzI0X3NldF9waXBlX3R1bm5lbF9lbmFibGUsDQo+ICsJLnNldF9waXBlX3BoeSA9IG1heDk2NzI0 X3NldF9waXBlX3BoeSwNCj4gKwkuc2V0X3BpcGVfdHVubmVsX3BoeSA9IG1heDk2NzI0X3NldF9w aXBlX3R1bm5lbF9waHksDQo+ICsJLnN1cHBvcnRzX3BpcGVfc3RyZWFtX2F1dG9zZWxlY3QgPSB0 cnVlLA0KPiArCS5udW1fcGlwZXMgPSA0LA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBtYXg5NjcyNF9jaGlwX2luZm8gbWF4OTY3MjRmX2luZm8gPSB7DQo+ICsJLnZlcnNpb25z ID0gQklUKE1BWF9TRVJERVNfR01TTF8yXzNHQlBTKSwNCj4gKwkubW9kZXMgPSBCSVQoTUFYX1NF UkRFU19HTVNMX1BJWEVMX01PREUpIHwNCj4gKwkJIEJJVChNQVhfU0VSREVTX0dNU0xfVFVOTkVM X01PREUpLA0KPiArCS5zZXRfcGlwZV90dW5uZWxfZW5hYmxlID0gbWF4OTY3MjRfc2V0X3BpcGVf dHVubmVsX2VuYWJsZSwNCj4gKwkuc2V0X3BpcGVfcGh5ID0gbWF4OTY3MjRfc2V0X3BpcGVfcGh5 LA0KPiArCS5zZXRfcGlwZV90dW5uZWxfcGh5ID0gbWF4OTY3MjRfc2V0X3BpcGVfdHVubmVsX3Bo eSwNCj4gKwkuc3VwcG9ydHNfcGlwZV9zdHJlYW1fYXV0b3NlbGVjdCA9IHRydWUsDQo+ICsJLm51 bV9waXBlcyA9IDQsDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG1heDk2NzI0 X2NoaXBfaW5mbyBtYXg5NjcxMl9pbmZvID0gew0KPiArCS52ZXJzaW9ucyA9IEJJVChNQVhfU0VS REVTX0dNU0xfMl8zR0JQUykgfA0KPiArCQkgICAgQklUKE1BWF9TRVJERVNfR01TTF8yXzZHQlBT KSwNCj4gKwkubW9kZXMgPSBCSVQoTUFYX1NFUkRFU19HTVNMX1BJWEVMX01PREUpLA0KPiArCS5u dW1fcGlwZXMgPSA4LA0KPiArfTsNCj4gKw0KPiArc3RhdGljIHZvaWQgbWF4OTY3MjRfcG93ZXJf b2ZmKHZvaWQgKmRhdGEpIHsNCj4gKwlzdHJ1Y3QgbWF4OTY3MjRfcHJpdiAqcHJpdiA9IGRhdGE7 DQo+ICsNCj4gKwlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAocHJpdi0+Z3Bpb2RfZW5hYmxlLCAw KTsgfQ0KPiArDQo+ICtzdGF0aWMgaW50IG1heDk2NzI0X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50 ICpjbGllbnQpIHsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmY2xpZW50LT5kZXY7DQo+ICsJ c3RydWN0IG1heDk2NzI0X3ByaXYgKnByaXY7DQo+ICsJc3RydWN0IG1heF9kZXNfaW5mbyAqaW5m bzsNCj4gKwlzdHJ1Y3QgbWF4X2Rlc19vcHMgKm9wczsNCj4gKwl1MzIgY2NfcG9ydDsNCj4gKwlp bnQgcmV0Ow0KPiArDQo+ICsJcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiks IEdGUF9LRVJORUwpOw0KPiArCWlmICghcHJpdikNCj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ICsN Cj4gKwlpbmZvID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7 DQo+ICsJaWYgKCFpbmZvKQ0KPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gKw0KPiArCW9wcyA9IGRl dm1fa3phbGxvYyhkZXYsIHNpemVvZigqb3BzKSwgR0ZQX0tFUk5FTCk7DQo+ICsJaWYgKCFvcHMp DQo+ICsJCXJldHVybiAtRU5PTUVNOw0KPiArDQo+ICsJcHJpdi0+aW5mbyA9IGRldmljZV9nZXRf bWF0Y2hfZGF0YShkZXYpOw0KPiArCWlmICghcHJpdi0+aW5mbykgew0KPiArCQlkZXZfZXJyKGRl diwgIkZhaWxlZCB0byBnZXQgbWF0Y2ggZGF0YVxuIik7DQo+ICsJCXJldHVybiAtRU5PREVWOw0K PiArCX0NCj4gKw0KPiArCXByaXYtPmRldiA9IGRldjsNCj4gKwlwcml2LT5jbGllbnQgPSBjbGll bnQ7DQo+ICsJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgcHJpdik7DQo+ICsNCj4gKwlwcml2 LT5yZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhjbGllbnQsICZtYXg5NjcyNF9pMmNfcmVn bWFwKTsNCj4gKwlpZiAoSVNfRVJSKHByaXYtPnJlZ21hcCkpDQo+ICsJCXJldHVybiBQVFJfRVJS KHByaXYtPnJlZ21hcCk7DQo+ICsNCj4gKwlwcml2LT5ncGlvZF9lbmFibGUgPSBkZXZtX2dwaW9k X2dldF9vcHRpb25hbCgmY2xpZW50LT5kZXYsICJlbmFibGUiLA0KPiArCQkJCQkJICAgICBHUElP RF9PVVRfTE9XKTsNCj4gKwlpZiAoSVNfRVJSKHByaXYtPmdwaW9kX2VuYWJsZSkpDQo+ICsJCXJl dHVybiBQVFJfRVJSKHByaXYtPmdwaW9kX2VuYWJsZSk7DQo+ICsNCj4gKwlpZiAocHJpdi0+Z3Bp b2RfZW5hYmxlKSB7DQo+ICsJCS8qIFBXRE4gbXVzdCBiZSBoZWxkIGZvciAxdXMgZm9yIHJlc2V0 ICovDQo+ICsJCXVkZWxheSgxKTsNCj4gKw0KPiArCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAo cHJpdi0+Z3Bpb2RfZW5hYmxlLCAxKTsNCj4gKw0KPiArCQkvKiBNYXhpbXVtIHBvd2VyLXVwIHRp bWUgKHRMT0NLKSA0bXMgKi8NCj4gKwkJdXNsZWVwX3JhbmdlKDQwMDAsIDUwMDApOw0KPiArDQo+ ICsJCXJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIG1heDk2NzI0X3Bvd2VyX29m ZiwNCj4gKwkJCQkJICAgICAgIHByaXYpOw0KPiArCQlpZiAocmV0KQ0KPiArCQkJcmV0dXJuIHJl dDsNCj4gKwl9DQo+ICsNCj4gKwlwcml2LT5jY19wb3J0X2NmZyA9IE1BWDk2NzI0X1JFRzNfQ0Nf UE9SVF9DRkdfUE9SVDA7DQo+ICsNCj4gKwlyZXQgPSBkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIo ZGV2LCAibWF4aW0sY29udHJvbC1jaGFubmVsLXBvcnQiLA0KPiArCQkJCSAgICAgICAmY2NfcG9y dCk7DQo+ICsJaWYgKCFyZXQpIHsNCj4gKwkJc3dpdGNoIChjY19wb3J0KSB7DQo+ICsJCWNhc2Ug MDoNCj4gKwkJCXByaXYtPmNjX3BvcnRfY2ZnID0NCj4gTUFYOTY3MjRfUkVHM19DQ19QT1JUX0NG R19QT1JUMDsNCj4gKwkJCWJyZWFrOw0KPiArCQljYXNlIDE6DQo+ICsJCQlwcml2LT5jY19wb3J0 X2NmZyA9DQo+IE1BWDk2NzI0X1JFRzNfQ0NfUE9SVF9DRkdfUE9SVDE7DQo+ICsJCQlicmVhazsN Cj4gKwkJZGVmYXVsdDoNCj4gKwkJCWRldl9lcnIoZGV2LCAiSW52YWxpZCBjb250cm9sLWNoYW5u ZWwgcG9ydCAldVxuIiwNCj4gY2NfcG9ydCk7DQo+ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwkJ fQ0KPiArCX0gZWxzZSBpZiAocmV0ICE9IC1FTk9EQVRBICYmIHJldCAhPSAtRU5PRU5UICYmIHJl dCAhPSAtRUlOVkFMKSB7DQo+ICsJCXJldHVybiByZXQ7DQo+ICsJfQ0KPiArDQo+ICsJKmluZm8g PSBtYXg5NjcyNF9kZXNfaW5mbzsNCj4gKwlpbmZvLT52ZXJzaW9ucyA9IHByaXYtPmluZm8tPnZl cnNpb25zOw0KPiArCWluZm8tPm1vZGVzID0gcHJpdi0+aW5mby0+bW9kZXM7DQo+ICsJaW5mby0+ bnVtX3BpcGVzID0gcHJpdi0+aW5mby0+bnVtX3BpcGVzOw0KPiArCXByaXYtPmRlcy5pbmZvID0g aW5mbzsNCj4gKw0KPiArCSpvcHMgPSBtYXg5NjcyNF9kZXNfb3BzOw0KPiArCW9wcy0+c2V0X3Bp cGVfdHVubmVsX2VuYWJsZSA9IHByaXYtPmluZm8tPnNldF9waXBlX3R1bm5lbF9lbmFibGU7DQo+ ICsJb3BzLT5zZXRfcGlwZV9waHkgPSBwcml2LT5pbmZvLT5zZXRfcGlwZV9waHk7DQo+ICsJb3Bz LT5zZXRfcGlwZV90dW5uZWxfcGh5ID0gcHJpdi0+aW5mby0+c2V0X3BpcGVfdHVubmVsX3BoeTsN Cj4gKwlwcml2LT5kZXMub3BzID0gb3BzOw0KPiArDQo+ICsJcmV0ID0gbWF4OTY3MjRfcmVzZXQo cHJpdik7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiArCXJldHVybiBt YXhfZGVzX3Byb2JlKGNsaWVudCwgJnByaXYtPmRlcyk7IH0NCj4gKw0KPiArc3RhdGljIHZvaWQg bWF4OTY3MjRfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpIHsNCj4gKwlzdHJ1Y3Qg bWF4OTY3MjRfcHJpdiAqcHJpdiA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOw0KPiArDQo+ ICsJbWF4X2Rlc19yZW1vdmUoJnByaXYtPmRlcyk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBjb25z dCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1heDk2NzI0X29mX3RhYmxlW10gPSB7DQo+ICsJeyAuY29t cGF0aWJsZSA9ICJtYXhpbSxtYXg5NjcxMiIsIC5kYXRhID0gJm1heDk2NzEyX2luZm8gfSwNCj4g Kwl7IC5jb21wYXRpYmxlID0gIm1heGltLG1heDk2NzI0IiwgLmRhdGEgPSAmbWF4OTY3MjRfaW5m byB9LA0KPiArCXsgLmNvbXBhdGlibGUgPSAibWF4aW0sbWF4OTY3MjRmIiwgLmRhdGEgPSAmbWF4 OTY3MjRmX2luZm8gfSwNCj4gKwl7IC5jb21wYXRpYmxlID0gIm1heGltLG1heDk2NzI0ciIsIC5k YXRhID0gJm1heDk2NzI0Zl9pbmZvIH0sDQo+ICsJeyB9LA0KPiArfTsNCj4gK01PRFVMRV9ERVZJ Q0VfVEFCTEUob2YsIG1heDk2NzI0X29mX3RhYmxlKTsNCj4gKw0KPiArc3RhdGljIHN0cnVjdCBp MmNfZHJpdmVyIG1heDk2NzI0X2kyY19kcml2ZXIgPSB7DQo+ICsJLmRyaXZlcgk9IHsNCj4gKwkJ Lm5hbWUgPSAibWF4OTY3MjQiLA0KPiArCQkub2ZfbWF0Y2hfdGFibGUJPSBtYXg5NjcyNF9vZl90 YWJsZSwNCj4gKwl9LA0KPiArCS5wcm9iZSA9IG1heDk2NzI0X3Byb2JlLA0KPiArCS5yZW1vdmUg PSBtYXg5NjcyNF9yZW1vdmUsDQo+ICt9Ow0KPiArDQo+ICttb2R1bGVfaTJjX2RyaXZlcihtYXg5 NjcyNF9pMmNfZHJpdmVyKTsNCj4gKw0KPiArTU9EVUxFX0lNUE9SVF9OUygiTUFYX1NFUkRFUyIp Ow0KPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJNYXhpbSBNQVg5NjcyNCBRdWFkIEdNU0wyIERlc2Vy aWFsaXplciBEcml2ZXIiKTsNCj4gK01PRFVMRV9BVVRIT1IoIkNvc21pbiBUYW5pc2xhdiA8Y29z bWluLnRhbmlzbGF2QGFuYWxvZy5jb20+Iik7DQo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7DQo= --_002_DM4PR12MB6543DF508C0092AD20BDE75CE8BB2DM4PR12MB6543namp_ Content-Type: application/octet-stream; name="0001-media-i2c-maxim-serdes-configure-MAX96724-control-ch.patch" Content-Description: 0001-media-i2c-maxim-serdes-configure-MAX96724-control-ch.patch Content-Disposition: attachment; filename="0001-media-i2c-maxim-serdes-configure-MAX96724-control-ch.patch"; size=2375; creation-date="Mon, 14 Sep 2026 18:49:51 GMT"; modification-date="Mon, 14 Sep 2026 18:51:53 GMT" Content-Transfer-Encoding: base64 RnJvbSAxZWZlZjRmMzFhMzI5NjlhZjQ3ODdkMjZmNjNjMzRiNTRlYjkyOGE0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWaXZla2FuYW5kYSBEYXlhbmFuZGEgPHZpdmVrYW5hQGFtZC5j b20+CkRhdGU6IE1vbiwgMTQgU2VwIDIwMjYgMTA6Mzg6NTUgLTA3MDAKU3ViamVjdDogW1BBVENI XSBtZWRpYTogaTJjOiBtYXhpbS1zZXJkZXM6IGNvbmZpZ3VyZSBNQVg5NjcyNCBjb250cm9sLWNo YW5uZWwKIGNyb3Nzb3ZlcgoKbWF4OTY3MjRfaW5pdCgpIHVuY29uZGl0aW9uYWxseSBlbmFibGVz IHRoZSBjb250cm9sLWNoYW5uZWwgY3Jvc3NvdmVyCmZvciBldmVyeSBsaW5rLiBUaGlzIGNvbmZs aWN0cyB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlIG9mIDAgZm9yIHRoZQptYXhpbSxjb250cm9sLWNo YW5uZWwtcG9ydCBwcm9wZXJ0eS4KClRoZSBzZXJpYWxpemVyIGNvbnRyb2wgY2hhbm5lbCBpcyBh dmFpbGFibGUgdGhyb3VnaCBsb2NhbCBJMkMgcG9ydCAwIGJ5CmRlZmF1bHQuIFRyYWNrIHdoZXRo ZXIgcG9ydCAxIHdhcyBzZWxlY3RlZCBhbmQgZW5hYmxlIHRoZSBjcm9zc292ZXIgb25seQppbiB0 aGF0IGNhc2UuIEV4cGxpY2l0bHkgY2xlYXIgdGhlIGNyb3Nzb3ZlciB3aGVuIHBvcnQgMCBpcyBz ZWxlY3RlZCBvcgp0aGUgcHJvcGVydHkgaXMgb21pdHRlZC4KClNpZ25lZC1vZmYtYnk6IFZpdmVr YW5hbmRhIERheWFuYW5kYSA8dml2ZWthbmFAYW1kLmNvbT4KLS0tCiBkcml2ZXJzL21lZGlhL2ky Yy9tYXhpbS1zZXJkZXMvbWF4OTY3MjQuYyB8IDE0ICsrKysrKysrKysrLS0tCiAxIGZpbGUgY2hh bmdlZCwgMTEgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2 ZXJzL21lZGlhL2kyYy9tYXhpbS1zZXJkZXMvbWF4OTY3MjQuYyBiL2RyaXZlcnMvbWVkaWEvaTJj L21heGltLXNlcmRlcy9tYXg5NjcyNC5jCmluZGV4IDQ1OGU3OGYyODUxMS4uMzg4OWQ5NTVmODRi IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2kyYy9tYXhpbS1zZXJkZXMvbWF4OTY3MjQuYwor KysgYi9kcml2ZXJzL21lZGlhL2kyYy9tYXhpbS1zZXJkZXMvbWF4OTY3MjQuYwpAQCAtMjUyLDYg KzI1Miw3IEBAIHN0cnVjdCBtYXg5NjcyNF9wcml2IHsKIAogCXN0cnVjdCBncGlvX2Rlc2MgKmdw aW9kX2VuYWJsZTsKIAl1bnNpZ25lZCBpbnQgY2NfcG9ydF9jZmc7CisJYm9vbCBjY19wb3J0X2Ny b3Nzb3ZlcjsKIH07CiAKIHN0cnVjdCBtYXg5NjcyNF9jaGlwX2luZm8gewpAQCAtNTA2LDkgKzUw NywxNCBAQCBzdGF0aWMgaW50IG1heDk2NzI0X2luaXQoc3RydWN0IG1heF9kZXMgKmRlcykKIAkJ CXJldHVybiByZXQ7CiAJfQogCi0JLyogRW5hYmxlIEkyQyBjb250cm9sIHBvcnRzIGNyb3Nzb3Zl ci4gKi8KLQlyZXQgPSByZWdtYXBfc2V0X2JpdHMocHJpdi0+cmVnbWFwLCBNQVg5NjcyNF9SRUc3 LAotCQkJICAgICAgTUFYOTY3MjRfUkVHN19DQ19DUk9TU09WRVJfU0VMKTsKKwkvKgorCSAqIFRo ZSBzZXJpYWxpemVyIGNvbnRyb2wgY2hhbm5lbCBpcyBhdmFpbGFibGUgdGhyb3VnaCBsb2NhbCBJ MkMgcG9ydCAwCisJICogYnkgZGVmYXVsdC4gRW5hYmxlIGNyb3Nzb3ZlciBvbmx5IHdoZW4gbG9j YWwgcG9ydCAxIGlzIHNlbGVjdGVkLgorCSAqLworCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhw cml2LT5yZWdtYXAsIE1BWDk2NzI0X1JFRzcsCisJCQkJIE1BWDk2NzI0X1JFRzdfQ0NfQ1JPU1NP VkVSX1NFTCwKKwkJCQkgcHJpdi0+Y2NfcG9ydF9jcm9zc292ZXIgPworCQkJCSBNQVg5NjcyNF9S RUc3X0NDX0NST1NTT1ZFUl9TRUwgOiAwKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBA IC0xMjY4LDYgKzEyNzQsNyBAQCBzdGF0aWMgaW50IG1heDk2NzI0X3Byb2JlKHN0cnVjdCBpMmNf Y2xpZW50ICpjbGllbnQpCiAJfQogCiAJcHJpdi0+Y2NfcG9ydF9jZmcgPSBNQVg5NjcyNF9SRUcz X0NDX1BPUlRfQ0ZHX1BPUlQwOworCXByaXYtPmNjX3BvcnRfY3Jvc3NvdmVyID0gZmFsc2U7CiAK IAlyZXQgPSBkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LCAibWF4aW0sY29udHJvbC1jaGFu bmVsLXBvcnQiLAogCQkJCSAgICAgICAmY2NfcG9ydCk7CkBAIC0xMjc4LDYgKzEyODUsNyBAQCBz dGF0aWMgaW50IG1heDk2NzI0X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiAJCQli cmVhazsKIAkJY2FzZSAxOgogCQkJcHJpdi0+Y2NfcG9ydF9jZmcgPSBNQVg5NjcyNF9SRUczX0ND X1BPUlRfQ0ZHX1BPUlQxOworCQkJcHJpdi0+Y2NfcG9ydF9jcm9zc292ZXIgPSB0cnVlOwogCQkJ YnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlkZXZfZXJyKGRldiwgIkludmFsaWQgY29udHJvbC1jaGFu bmVsIHBvcnQgJXVcbiIsIGNjX3BvcnQpOwotLSAKMi40OC4xCgo= --_002_DM4PR12MB6543DF508C0092AD20BDE75CE8BB2DM4PR12MB6543namp_--