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 C6B65C77B7A for ; Thu, 19 Jun 2025 18:36:14 +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=vvcbLfjwIZwQdFIsLoKtvm8UlEBAzH+TXhiFG3Wgqwc=; b=pZyj0rUo263Ir+ erwrYNjGCgi6QHSpoyduaw4hd7enJA5q/x5Pf2emAhZDegQ882A7FJUBtdM+ZdabjAO6pNHKkBUmm imp4YSxJICrPhEsqMJixSL/rEK/eu7uQpif347UM5p1lJRSbnKKQzBn1AANo5ow7kBrf2R2pzt6P2 OxuUxTYG0fWSF4sI3hvo3k/vqw1Sd7Mk1tYw6s2EDoosWtJ2L7O6NWY6+ABVjv5V1z0SJqDTyd8On q7Kd1z5tF+RgpfcbdV0/N9/ksdRxPhPnK2HHatekd+QMzL4g91gUpawaBd9p1g8iVp6xSmxJ9Emxs 5FIRQRsjJ3f7zUaTqdaw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1uSK7S-0000000DtRv-29hS; Thu, 19 Jun 2025 18:36:14 +0000 Received: from mail-francecentralazlp170130007.outbound.protection.outlook.com ([2a01:111:f403:c20a::7] helo=PA4PR04CU001.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1uSGv0-0000000DNB4-1bnR for linux-i3c@lists.infradead.org; Thu, 19 Jun 2025 15:11:12 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NIV+1Jxk0XqXLHrJrYNNi7QlKPiEN5StsiZ9YHxt+74PTX3fp+x8msGxfiUyNBZOOMMeAFmJ+HydMqSRNXEDLM+pcuno3fm1Xa+cTN+eZvGrPzBcuw/1S3Fpq8BpIPUDwLW+EVn7phBY1F/IQj72ignFxClWJ5WJj74swkZrVuVhikrFabB2T91Jku67V6/BxRA8f/LHyqcps1m4ME7retC4NlounljxzEUm+jSWaBuxj7uaz9mL30jAPqC6YBnKBbQWfDlUTMI4IxfXlHqCaxZEA40lUxekVgLVqzvutpqc+B7qtEC7u9l0l2LZAW4GBe24AnT/8xIUPSjD468bDg== 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=b2eDGrDG5t8jQ8HjPy9/scHZzbqYytqHW2PPX1WwcUQ=; b=GsUPZX2fDogk72JC1EeFArOMirCzt+RtSDe7QgV5fv4l1OWR5/Vh4dpCtJTK4pS6E7FPfioBF57IKzQrHryiTNRRaKdd/LYvnHzx0+apHzZc0SqgQzY4IlPPYJRvxfEu4A0wv2No4PgvCnBCoRQanB6tbPoZGrYO90jZvY1yRATDe3w+KMJw1uGIjfzrxKLdXI1UtlFrCH2an9YOq+FUpPExXq5jJ7HDnoJ9tvsyhMgIWwrhmunzAnXRkTYS07hdQ+7eFLSsW1DnenaRncxTRS4OUyKtMyYfP4fkm26pMIT3O0fWUUBJAtu4XB3MOrQCnKF6FLiN+Xeaf35FQTZsPQ== 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=b2eDGrDG5t8jQ8HjPy9/scHZzbqYytqHW2PPX1WwcUQ=; b=ceg5+RNCsvGkWaShwBMUarF11SFZqxeLgu8w9sqcHb4agwKgq5XZiLdWzW8ILZOY+juGRIeXy7FKxiwlZsKMCxPqa35qTdE4ED+7PR8Y05PlSWLilLM7SELELuZyN3Tq2Yy4R6y3tartdd+4vyKotbFTbTkiAuQ7liWtwZ0yfjl4nvetxaIRMSxdbW4nJMPzpNb97ruiVix14gCmFrkdyRTynqYc+H86z3S3yJobX5lLqdJFN4qOO0aTUaBEEwyuvtaRzRwO54DCvUHH6pAOTFgNykZXdQT7Tfzt9QBfzG+P6ccnoacnajIu9o79cLIY9tmr3aoAqbfvcFTFp7b2+A== 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 VE1PR04MB7424.eurprd04.prod.outlook.com (2603:10a6:800:1a7::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8835.29; Thu, 19 Jun 2025 15:11:06 +0000 Received: from PAXPR04MB9642.eurprd04.prod.outlook.com ([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com ([fe80::9126:a61e:341d:4b06%7]) with mapi id 15.20.8835.027; Thu, 19 Jun 2025 15:11:06 +0000 Date: Thu, 19 Jun 2025 11:10:59 -0400 From: Frank Li To: Jorge Marques Cc: Jorge Marques , 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 v3 2/2] i3c: master: Add driver for Analog Devices I3C Controller IP Message-ID: References: <20250618-adi-i3c-master-v3-0-e66170a6cb95@analog.com> <20250618-adi-i3c-master-v3-2-e66170a6cb95@analog.com> Content-Disposition: inline In-Reply-To: X-ClientProxiedBy: BYAPR05CA0095.namprd05.prod.outlook.com (2603:10b6:a03:e0::36) To PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|VE1PR04MB7424:EE_ X-MS-Office365-Filtering-Correlation-Id: b9f1ee9b-33f2-4e12-a201-08ddaf4383b7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|52116014|366016|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?RUw1RUNOZmRSeURTZ0FJMEYxeCsrVlFZVmc0L3NncjdNQWR4RWY3TFB6OVRN?= =?utf-8?B?OGJFam0wMWY5R2l6QlhlaEVCUEJtbEQxaFdjSGVpWjh5RkdXTXJZanhYdkZ0?= =?utf-8?B?WTdURmVkVzIwYk16WHZSVyt1T084Qk1uYjE5WHFwazdKc3l0amRpVU5JOGQv?= =?utf-8?B?WkU3LythaG9vMWliakJqMk80MnNaNHBFZGNLMGdtWGZFR1AyZzI0ZFR3LzNK?= =?utf-8?B?UkJjYnRuckhuMlFCMTVJdWhqQnRycUV4M2JaN2x0WTFweGRzVzJsNHB3VWhH?= =?utf-8?B?SlE0M3lvajRpdkpnLy9yM25PV2lGWEdYUy80SVdsdTRmTWQzaktCeUhLNUQx?= =?utf-8?B?YVAyQzBYREZyWFNtWHFQTGFabVVSc3Z1V3VEMEs0eDNxMmc3MmpIREhaUyti?= =?utf-8?B?VXVoZG5xMEVYZjJtMS82TnE5RnZkYUxoTnJGL0l0MzJ4ZkdWNlNMVFBSbWJW?= =?utf-8?B?TkZtWStBd3VLdlJnZHU0WWhWamtLelJ3TE1qV0t3ZTdrbGtXM25wbWtNVFFX?= =?utf-8?B?WnZnVml5SU40aExUMVp1WGRKZWNxd21HSDloVEh3NEdiaTFxNHYxUkhaTEFt?= =?utf-8?B?N3J2RFltL0Y0S0RBRERRZStIUjZLR3gxbHA4anNsWDdWdEpqSml5QkRoc2Uv?= =?utf-8?B?YlRsNkxmRkl5QS8zMjBQb09icWJJWVhDM2ZXWWJGNDAyQVF2WFV1V3drZ1U5?= =?utf-8?B?UGNDSS9hNjZJZ085elg3YUl0dyt2VnZ5NEdOTUVjKzZKVHBLT0J5cVVDajlo?= =?utf-8?B?eUNJa1k4cHp4K2xxYml1aEFEbUVqVklqMnVLOVk1ck8xc1lPUmlBNXluOENE?= =?utf-8?B?NVpqandQUEExSXVqOXBvUWtrMy9iVFVZUUxRb1ZUcFo4NnZCcHA1dmxDN01H?= =?utf-8?B?dG85elhndTBFNjJsL1hZOU5yWFlQMCtuTkxpSytmTjRqY05BMWFrSWRoTVRE?= =?utf-8?B?Ukw4QUkvM3BZZXd6RVFlM2JRTXd0N2VwNXprUTZVNmFTZlpSNTdXNWtlank5?= =?utf-8?B?d0lEdHdLUDZsQ0J1NXVLK0N1V05aTVlBbXVZc2labVNnMUpoV1B2TjQzOHpJ?= =?utf-8?B?U0JqeFlwbWQxTkRhNWc1dFdYa3V3SDZuWk41Y1Fpd0lkSXhBazdMTFZNRkox?= =?utf-8?B?SXFtb2ZCaElORVQyejVlK1dLTVVxZHBLTEdXcUJMM3NiR0tXdTZKMkFqQk1Q?= =?utf-8?B?NTdXSFBRZlJ0L3ZGZGdVS24zcnc1YmRLdE51SXlNNklUZ3V2VjdrU0djZ1pw?= =?utf-8?B?M3E1Wld5R1FNS2QvVml0NmtISkt0KzQ1cVNzdFExVjFRM0NEc3B2WUF3UWpG?= =?utf-8?B?eWh3Q0NzcVRvQnZUTEhEWFh2N1JUNHVUTldRMFZ2cjVNN3phZ0ZIRk1OTHJY?= =?utf-8?B?Z1gyN1dFamM3R3lJTU5xRjhvRUoreUduZ0pmbGZXQW9hUnBrZGg4WThyTndS?= =?utf-8?B?aWhlVDFoODRCUUpuZXE2Zk91dmZEZ1AraW54NXY0clJ6Z3ByZng0ZHFwb3F5?= =?utf-8?B?TEFlTzd5WmRpbXBUazZZQXF2MHhHOFM4b1VldURiaW9LOXYxa2QyOXlLNVFY?= =?utf-8?B?RDhIZllteWd5NjA2VGZQS3JIaDFNZ20wY0pSRnl0QUY0MkI3ZEpZOE9STVZ0?= =?utf-8?B?V1ZvdnJkbWdiSlVWRVNLcUhwNEF6b24vMGJNL2lHazRveitYZ2h2RUNzdTQ3?= =?utf-8?B?cVphRkd4Sml5MXl5SVlmbDlMMTdYZXJrM0xhOTRCL0hyTWpzT3I3L3lyZHVE?= =?utf-8?B?RkZpNzJmbkJQbit3NE5HZzk0NWU3cnFtTCsra1I2R2VCaDJwNlo5VjFWZmVW?= =?utf-8?B?RnQ1M0RZeDJxbG5idkM0M2Y5NmtjRmd0c3VUL1ovenYyUXVnUG5UeWkvV2c2?= =?utf-8?B?QWdOd0liN1RDUHBqeDJ3ZjhwVm1IQ1lYRVZaQkNTTzl0SVRwYk1jZlN5Z0tN?= =?utf-8?Q?1ll/lWanjxQ=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)(1800799024)(376014)(52116014)(366016)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?a1UwcGdwT21KQk5PNGpZejBhTEwyR2NIbFgwakRPcEZ2QWhjWkh3STY3Yi8w?= =?utf-8?B?ODl6cSttdzB5WklRQ3U2L0wrVEwzaVVOSGFadHFvOERwRkpYdkRDZGcvdnBQ?= =?utf-8?B?YkRGYWhuUFFlMWRhNUtzUkNuRGRRdGoxaG9tN3BiV0djaUx5Q1BXa0V4aUph?= =?utf-8?B?SmQydXhqRGx2OEdLTnN2UFlrV2tQTm1zYk9pbE9kL3VwYVNyMVJsemw5U3VR?= =?utf-8?B?Mm9TSWl1Q1RPZHV3d3BVZUZsSmZmNi8yRDVjMkU5ZkFHcVJMdlUyMGNMUFlB?= =?utf-8?B?MDRsQUVybHhBMVFaOWoyRVFaLzloeDU0V0hmMnhiZEo3SjlnWmViOWV4T1Q2?= =?utf-8?B?RlA4dUhIU2RzeCsxYWN0cjRZRlVZQ1gra0kzT3N5bXIyNjVIUzRLMHpWeTVU?= =?utf-8?B?M1ZOM2dSSWZna2w3cW5IdmZKb2FuZDlVS0MrTnc1UlB0dEQ1enRqV3dpb1VJ?= =?utf-8?B?eWhVL1g4bFh3NWc5YWNMYU1SbjRyMEtrWjhxaUZmcHp6NE96ZEZ1eHlNbjhw?= =?utf-8?B?a3dUc2VlSlZTMFk5QXFsOW94SnFhSzNIWXVYTnkveHg0Y0dSNmxqSzN4Qkpo?= =?utf-8?B?OXc2ejNBQXhnR0FqaDlLdStMSVNqRDdMN24rOGVZb2gxY0lkRUxFV25yMWND?= =?utf-8?B?R1FuK0szR3BCZlpYWkNyTUtianlZZ0dGcjltcnpvS3lRRWRZcjhCbU00MVM1?= =?utf-8?B?V3lmdVVTeGhlTTdWTG90R1IxWkxkU1FsTzRkdDY4aFJ6dTAwTG5ITE5TS0h5?= =?utf-8?B?YzdPMXo4eVM1VklXY2RhZkI3QUU1ZDdqc05Zc3YwNnppNmRqMlBqNHNYcU56?= =?utf-8?B?ZnpsY0NXYWhyc3FnVkZWdkxjbzRLbkMxV2drNDhNUGdEaVhVWUlUeWY2WnF2?= =?utf-8?B?Z3o1a3BsTzEwWDgvREEyOU9wV2ZjV0FvOXJoMExoWWVkK016UlBpcXJhTzc3?= =?utf-8?B?NHJMR205c092cE5RYktISTRYMHJjS21sUTRVdDlnVUhrc2pNaXlSVzgrb1FZ?= =?utf-8?B?NTFlVW5JbEdHSk9CUlFjT050VjVpUmcvMmROcTZJcGltMkJtNDBtM2plL3BZ?= =?utf-8?B?L2x5YWtvTjZnODBOZm11R25sT1dkaHN4Zlk3NVJ2R3dmclZTaHA4R09QV3pW?= =?utf-8?B?SUJuYW1GWE9UUm1oUUFQckN1R1UrSlQ2V1pEeHNva0lxRmVkZWZUMDF4cm83?= =?utf-8?B?TUZ5ZjBRQXd0bUhyVHJ5NVBsVlVZT1pQSGpyTnlFTnkwYXl4VUhweStVZlFL?= =?utf-8?B?b05wV0lYYStOTUdmL3daaXJuOEVFSXhVbUpOSGh6TUhYVWhWSFluM2xKbnZX?= =?utf-8?B?V0xpQmVFV05QTWRPMlJ6L2VPY05MNFh4b1EvK242U3R5MTY4NWZYVldyaEd4?= =?utf-8?B?bWNIemk0U0ZjcG9mcXRIM3Evd0pERlIybVZmNmlQRnNRTkQxU2F3bnB2VGZo?= =?utf-8?B?WFlCeDJhNnA0VlRCeWZVNVJUeGN0YnhyUVZSOTVJTU5uMUYvRDJDOXlrRUFM?= =?utf-8?B?UEpJQ0tpcEtPMlBPSnhGaDhCSWIwbmt2OWVOZGp0RC8wQzFleWQ0ejJOVHhO?= =?utf-8?B?SWNncmFvd0h2dS8zN3crWFE2OG1ZOURhZDhUUFpEUFh4bTN6Sml0UktsVUYv?= =?utf-8?B?QnBKQXE4WDVzcDFEc3VGbXYvWEMvbHh0SU9lL1BMQWxaMGlQL0dNTDAxZHdM?= =?utf-8?B?Qk9hU1pQTkxtUUllcWFBQi9RRmVSLzZqWUVFSG1KRW9pbkh3eUp3R1dsTkJI?= =?utf-8?B?RHFzK0RHNmxMZE4wcW9OT3ZFSTZXYUNnbVljMVpuYXUwQWh1WlJJNXpKYjd2?= =?utf-8?B?Um00ODhrVGtUb3QwS2tnMVdEbTQrZzE0K2hWMnBoOHFBUCtYUVZWVHpob3px?= =?utf-8?B?bHZyL256MzB3cFlkMUlvZ20rTmUydlVQZ0V5UXAwdERaY3p4WWVRc1JhM21T?= =?utf-8?B?bXpFTHdFd3lpL2ZXM0RxTXRZNWk0Q3N0a0NMVVZmM1pXb1FiSEY3RmFsOVJp?= =?utf-8?B?OC9pT3oxR0U4N2dKckd2TXdmUVczMDgvZys3SUFjVjFjTllSUFRUeTUvWVlB?= =?utf-8?B?bVprVVloOE9Rd1B0aVpmTit3dmxYMTNVOG1mZWNhK3VWcllIZ2xzZWFxQ253?= =?utf-8?Q?BOtA=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: b9f1ee9b-33f2-4e12-a201-08ddaf4383b7 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Jun 2025 15:11:06.7979 (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: u19kxPqvHEcqEKPrDZbyAmp7QOxwKZa1Kt2QTJD7JmEI54I0vCQQjjD37VCTcZf0ufwP2OEe5KKX2kY4JTaHFQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR04MB7424 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250619_081110_772846_1B1A2A97 X-CRM114-Status: GOOD ( 29.83 ) 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 T24gVGh1LCBKdW4gMTksIDIwMjUgYXQgMTI6MzI6MzNQTSArMDIwMCwgSm9yZ2UgTWFycXVlcyB3 cm90ZToKPiBPbiBXZWQsIEp1biAxOCwgMjAyNSBhdCAxMDoxODo0OFBNIC0wNDAwLCBGcmFuayBM aSB3cm90ZToKPiA+IE9uIFRodSwgSnVuIDE5LCAyMDI1IGF0IDEyOjE3OjI2QU0gKzAyMDAsIEpv cmdlIE1hcnF1ZXMgd3JvdGU6Cj4gPiA+IE9uIFdlZCwgSnVuIDE4LCAyMDI1IGF0IDAzOjQwOjU4 UE0gLTA0MDAsIEZyYW5rIExpIHdyb3RlOgo+ID4gPiA+IE9uIFdlZCwgSnVuIDE4LCAyMDI1IGF0 IDA5OjE2OjQ0QU0gKzAyMDAsIEpvcmdlIE1hcnF1ZXMgd3JvdGU6Cj4gPiA+ID4gPiBBZGQgc3Vw cG9ydCBmb3IgQW5hbG9nIERldmljZXMgSTNDIENvbnRyb2xsZXIgSVAsIGFuIEFYSS1pbnRlcmZh Y2VkIElQCj4gPiA+ID4gPiBjb3JlIHRoYXQgc3VwcG9ydHMgSTNDIGFuZCBJMkMgZGV2aWNlcywg bXVsdGlwbGUgc3BlZWQtZ3JhZGVzIGFuZAo+ID4gPiA+ID4gSTNDIElCSXMuCj4gPiA+ID4gPgo+ ID4gPiA+ID4gU2lnbmVkLW9mZi1ieTogSm9yZ2UgTWFycXVlcyA8am9yZ2UubWFycXVlc0BhbmFs b2cuY29tPgo+ID4gPiA+ID4gLS0tCj4gPiA+ID4gPiAgTUFJTlRBSU5FUlMgICAgICAgICAgICAg ICAgICAgICAgICAgfCAgICAxICsKPiA+ID4gPiA+ICBkcml2ZXJzL2kzYy9tYXN0ZXIvS2NvbmZp ZyAgICAgICAgICB8ICAgMTEgKwo+ID4gPiA+ID4gIGRyaXZlcnMvaTNjL21hc3Rlci9NYWtlZmls ZSAgICAgICAgIHwgICAgMSArCj4gPiA+ID4gPiAgZHJpdmVycy9pM2MvbWFzdGVyL2FkaS1pM2Mt bWFzdGVyLmMgfCAxMDI2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gPiA+ ID4gPiAgNCBmaWxlcyBjaGFuZ2VkLCAxMDM5IGluc2VydGlvbnMoKykKPiA+ID4gPiA+Cj4gPiA+ ID4gPiBkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwo+ID4gPiA+ID4gaW5k ZXggNmY1NmUxN2RjZWNmOTAyYzY4MTI4MjdjMWVjM2UwNjdjNjVlOTg5NC4uOWViNWI2YzMyNzU5 MDcyNWQxNjQxZmQ0YjczZTQ4ZmMxZDFhMzk1NCAxMDA2NDQKPiA+ID4gPiA+IC0tLSBhL01BSU5U QUlORVJTCj4gPiA+ID4gPiArKysgYi9NQUlOVEFJTkVSUwo+ID4gPiA+ID4gQEAgLTExMjQ3LDYg KzExMjQ3LDcgQEAgSTNDIERSSVZFUiBGT1IgQU5BTE9HIERFVklDRVMgSTNDIENPTlRST0xMRVIg SVAKPiA+ID4gPiA+ICBNOglKb3JnZSBNYXJxdWVzIDxqb3JnZS5tYXJxdWVzQGFuYWxvZy5jb20+ Cj4gPiA+ID4gPiAgUzoJTWFpbnRhaW5lZAo+ID4gPiA+ID4gIEY6CURvY3VtZW50YXRpb24vZGV2 aWNldHJlZS9iaW5kaW5ncy9pM2MvYWRpLGkzYy1tYXN0ZXIueWFtbAo+ID4gPiA+ID4gK0Y6CWRy aXZlcnMvaTNjL21hc3Rlci9hZGktaTNjLW1hc3Rlci5jCj4gPiA+ID4gPgo+ID4gPiA+ID4gIEkz QyBEUklWRVIgRk9SIENBREVOQ0UgSTNDIE1BU1RFUiBJUAo+ID4gPiA+ID4gIE06CVByemVteXPF gmF3IEdhaiA8cGdhakBjYWRlbmNlLmNvbT4KPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2kzYy9tYXN0ZXIvS2NvbmZpZyBiL2RyaXZlcnMvaTNjL21hc3Rlci9LY29uZmlnCj4gPiA+ID4g PiBpbmRleCA3YjMwZGIzMjUzYWY5ZDVjNmFlZTY1NDRjMDYwZTQ5MWJmYmViNjQzLi4zMjhiNzE0 NWNkZWZhMjBlNzA4ZWJmYTMzODNlODQ5Y2U1MWM1YTcxIDEwMDY0NAo+ID4gPiA+ID4gLS0tIGEv ZHJpdmVycy9pM2MvbWFzdGVyL0tjb25maWcKPiA+ID4gPiA+ICsrKyBiL2RyaXZlcnMvaTNjL21h c3Rlci9LY29uZmlnCj4gPiA+ID4gPiBAQCAtMSw0ICsxLDE1IEBACj4gPiA+ID4gPiAgIyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Cj4gPiA+ID4gPiArY29uZmlnIEFESV9J M0NfTUFTVEVSCj4gPiA+ID4gPiArCXRyaXN0YXRlICJBbmFsb2cgRGV2aWNlcyBJM0MgbWFzdGVy IGRyaXZlciIKPiA+ID4gPiA+ICsJZGVwZW5kcyBvbiBIQVNfSU9NRU0KPiA+ID4gPiA+ICsJaGVs cAo+ID4gPiA+ID4gKwkgIFN1cHBvcnQgZm9yIEFuYWxvZyBEZXZpY2VzIEkzQyBDb250cm9sbGVy IElQLCBhbiBBWEktaW50ZXJmYWNlZCBJUAo+ID4gPiA+ID4gKwkgIGNvcmUgdGhhdCBzdXBwb3J0 cyBJM0MgYW5kIEkyQyBkZXZpY2VzLCBtdWx0aXBsZSBzcGVlZC1ncmFkZXMgYW5kCj4gPiA+ID4g PiArCSAgSTNDIElCSXMuCj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCSAgVGhpcyBkcml2ZXIgY2Fu IGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQo+ID4gPiA+ID4g KwkgIHdpbGwgYmUgY2FsbGVkIGFkaS1pM2MtbWFzdGVyLgo+ID4gPiA+ID4gKwo+ID4gPiA+ID4g IGNvbmZpZyBDRE5TX0kzQ19NQVNURVIKPiA+ID4gPiA+ICAJdHJpc3RhdGUgIkNhZGVuY2UgSTND IG1hc3RlciBkcml2ZXIiCj4gPiA+ID4gPiAgCWRlcGVuZHMgb24gSEFTX0lPTUVNCj4gPiA+ID4g PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9pM2MvbWFzdGVyL01ha2VmaWxlIGIvZHJpdmVycy9pM2Mv bWFzdGVyL01ha2VmaWxlCj4gPiA+ID4gPiBpbmRleCAzZTk3OTYwMTYwYmM4NWU1ZWFmMjk2NmVj MGMzZmFlNDU4YzI3MTFlLi42Y2M0ZjRiNzNlN2JkYzIwNmI2OGM3NTAzOTBmOWMzY2MyY2NiMTk5 IDEwMDY0NAo+ID4gPiA+ID4gLS0tIGEvZHJpdmVycy9pM2MvbWFzdGVyL01ha2VmaWxlCj4gPiA+ ID4gPiArKysgYi9kcml2ZXJzL2kzYy9tYXN0ZXIvTWFrZWZpbGUKPiA+ID4gPiA+IEBAIC0xLDQg KzEsNSBAQAo+ID4gPiA+ID4gICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25s eQo+ID4gPiA+ID4gK29iai0kKENPTkZJR19BRElfSTNDX01BU1RFUikJCSs9IGFkaS1pM2MtbWFz dGVyLm8KPiA+ID4gPiA+ICBvYmotJChDT05GSUdfQ0ROU19JM0NfTUFTVEVSKQkJKz0gaTNjLW1h c3Rlci1jZG5zLm8KPiA+ID4gPiA+ICBvYmotJChDT05GSUdfRFdfSTNDX01BU1RFUikJCSs9IGR3 LWkzYy1tYXN0ZXIubwo+ID4gPiA+ID4gIG9iai0kKENPTkZJR19BU1QyNjAwX0kzQ19NQVNURVIp CSs9IGFzdDI2MDAtaTNjLW1hc3Rlci5vCj4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9p M2MvbWFzdGVyL2FkaS1pM2MtbWFzdGVyLmMgYi9kcml2ZXJzL2kzYy9tYXN0ZXIvYWRpLWkzYy1t YXN0ZXIuYwo+ID4gPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+ID4gPiA+IGluZGV4IDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ0ZTA3NTZlZmVjOTU4ODM4 M2FjNTVjYTllYTkyMjgzNjhjZTc2N2QKPiA+ID4gPiA+IC0tLSAvZGV2L251bGwKPiA+ID4gPiA+ ICsrKyBiL2RyaXZlcnMvaTNjL21hc3Rlci9hZGktaTNjLW1hc3Rlci5jCj4gPiA+ID4gPiBAQCAt MCwwICsxLDEwMjYgQEAKPiA+ID4gPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMC1vbmx5Cj4gPiA+ID4gPiArLyoKPiA+ID4gPiA+ICsgKiBJM0MgQ29udHJvbGxlciBkcml2 ZXIKPiA+ID4gPiA+ICsgKiBDb3B5cmlnaHQgMjAyNSBBbmFsb2cgRGV2aWNlcyBJbmMuCj4gPiA+ ID4gPiArICogQXV0aG9yOiBKb3JnZSBNYXJxdWVzIDxqb3JnZS5tYXJxdWVzQGFuYWxvZy5jb20+ Cj4gPiA+ID4gPiArICovCj4gPiA+ID4gPiArCj4gPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L2Jp dG9wcy5oPgo+ID4gPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9iaXRmaWVsZC5oPgo+ID4gPiA+ID4g KyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KPiA+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvZXJyLmg+ Cj4gPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Cj4gPiA+ID4gPiArI2luY2x1ZGUg PGxpbnV4L2kzYy9tYXN0ZXIuaD4KPiA+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0 Lmg+Cj4gPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+Cj4gPiA+ID4gPiArI2luY2x1ZGUg PGxpbnV4L21vZHVsZS5oPgo+ID4gPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9vZi5oPgo+ID4gPiA+ ID4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPiA+ID4gPiA+ICsKPiA+ID4g PiA+ICsjZGVmaW5lIFZFUlNJT05fTUFKT1IoeCkJCSgodTMyKUZJRUxEX0dFVChHRU5NQVNLKDIz LCAxNiksICh4KSkpCj4gPiA+ID4gPiArI2RlZmluZSBWRVJTSU9OX01JTk9SKHgpCQkoKHUzMilG SUVMRF9HRVQoR0VOTUFTSygxNSwgOCksICh4KSkpCj4gPiA+ID4gPiArI2RlZmluZSBWRVJTSU9O X1BBVENIKHgpCQkoKHUzMilGSUVMRF9HRVQoR0VOTUFTSyg3LCAwKSwgKHgpKSkKPiA+ID4gSGkg RnJhbmssCj4gPiA+ID4KPiA+ID4gPiBJIHN1cHBvc2UgdGhhdCBuZWVkbid0ICh1MzIpLCBhbnkg d2FybmluZ3MgcmVwb3J0IHdpdGhvdXQgdTMyPwo+ID4gPiA+Cj4gPiA+IEhlcmUgSSB3aWxsIGFj dHVhbGx5IHJlbW92ZSBhbmQgdXNlIHRoZSBtYWNyb3MgZnJvbQo+ID4gPiBsaW51eC9mcGdhL2Fk aS1heGktY29tbW9uLmgKPiA+ID4KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsjZGVmaW5lIE1BWF9E RVZTCQkJMTYKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsjZGVmaW5lIFJFR19WRVJTSU9OCQkJMHgw MDAKPiA+ID4gdG8gYmUgcmVwbGFjZWQgcmVtb3ZlZCwgYW5kIEFESV9BWElfUkVHX1ZFUlNJT04g dXNlZCBpbnN0ZWFkLgo+ID4gPiA+ID4gKyNkZWZpbmUgUkVHX0VOQUJMRQkJCTB4MDQwCj4gPiA+ ID4gPiArI2RlZmluZSBSRUdfSVJRX01BU0sJCQkweDA4MAo+ID4gPiA+ID4gKyNkZWZpbmUgUkVH X0lSUV9QRU5ESU5HCQkJMHgwODQKPiA+ID4gPiA+ICsjZGVmaW5lICAgUkVHX0lSUV9QRU5ESU5H X0NNRFIJCUJJVCg1KQo+ID4gPiA+ID4gKyNkZWZpbmUgICBSRUdfSVJRX1BFTkRJTkdfSUJJCQko KHUzMilCSVQoNikpCj4gPiA+ID4KPiA+ID4gPiBuZWVkbid0IHUzMgo+ID4gPiBJbiBlYXJsaWVy IENJIHJ1bnMsIEkgdXNlZCB0byBnZXQgd2l0aCBnY2NfeDg2XzY0LCBkdWUgdG8gdGhlIGludmVy c2lvbgo+ID4gPiB+UkVHX0lSUV9QRU5ESU5HX0lCSToKPiA+ID4KPiA+ID4gICA+IGNvbnZlcnNp b24gZnJvbSAnbG9uZyB1bnNpZ25lZCBpbnQnIHRvICd1bnNpZ25lZCBpbnQnIGNoYW5nZXMgdmFs dWUKPiA+ID4gICA+IGZyb20gJzE4NDQ2NzQ0MDczNzA5NTUxNjE1JyB0byAnNDI5NDk2NzI5NScg Wy1XZXJyb3I9b3ZlcmZsb3ddCj4gPiA+Cj4gPiA+IENvdWxkbid0IHJlcGxpY2F0ZSBpbiB0aGlz IHBhdGNoIHZlcnNpb24sIHNvIEkgd2lsbCByZW1vdmUuCj4gPiA+Cj4gPiA+ID4gPiArI2RlZmlu ZSAgIFJFR19JUlFfUEVORElOR19EQUEJCUJJVCg3KQo+ID4gPiA+Cj4gPiA+ID4gQWRkIGVtcHR5 IGxpbmUgYmV0d2VlbiByZWdpc3RlcnMKPiA+ID4gPgo+ID4gPiBPawo+ID4gPiA+ID4gKyNkZWZp bmUgUkVHX0NNRF9GSUZPCQkJMHgwZDQKPiA+ID4gPiA+ICsjZGVmaW5lCSAgUkVHX0NNRF9GSUZP XzBfSVNfQ0NDCQlCSVQoMjIpCj4gPiA+ID4gPiArI2RlZmluZSAgIFJFR19DTURfRklGT18wX0JD QVNUCQlCSVQoMjEpCj4gPiA+ID4gPiArI2RlZmluZSAgIFJFR19DTURfRklGT18wX1NSCQlCSVQo MjApCj4gPiA+ID4gPiArI2RlZmluZSAgIFJFR19DTURfRklGT18wX0xFTihsKQkJRklFTERfUFJF UChHRU5NQVNLKDE5LCA4KSwgKGwpKQo+ID4gPiA+ID4gKyNkZWZpbmUgICBSRUdfQ01EX0ZJRk9f MF9ERVZfQUREUihhKQlGSUVMRF9QUkVQKEdFTk1BU0soNywgMSksIGEpCj4gPiA+ID4gPiArI2Rl ZmluZSAgIFJFR19DTURfRklGT18wX1JOVwkJQklUKDApCj4gPiA+ID4gPiArI2RlZmluZSAgIFJF R19DTURfRklGT18xX0NDQyhpZCkJRklFTERfUFJFUChHRU5NQVNLKDcsIDApLCAoaWQpKQo+ID4g PiA+ID4gKyNkZWZpbmUgUkVHX0NNRF9GSUZPX1JPT00JCTB4MGMwCj4gPiA+ID4gPiArI2RlZmlu ZSBSRUdfQ01EUl9GSUZPCQkJMHgwZDgKPiA+ID4gPiA+ICsjZGVmaW5lICAgUkVHX0NNRFJfRklG T19OT19FUlJPUgkwCj4gPiA+ID4gPiArI2RlZmluZSAgIFJFR19DTURSX0ZJRk9fQ0UwX0VSUk9S CTEKPiA+ID4gPiA+ICsjZGVmaW5lICAgUkVHX0NNRFJfRklGT19DRTJfRVJST1IJNAo+ID4gPiA+ ID4gKyNkZWZpbmUgICBSRUdfQ01EUl9GSUZPX05BQ0tfUkVTUAk2Cj4gPiA+ID4gPiArI2RlZmlu ZSAgIFJFR19DTURSX0ZJRk9fVURBX0VSUk9SCTgKPiA+ID4gPiA+ICsjZGVmaW5lICAgUkVHX0NN RFJfRklGT19FUlJPUih4KQlGSUVMRF9HRVQoR0VOTUFTSygyMywgMjApLCAoeCkpCj4gPiA+ID4g PiArI2RlZmluZSAgIFJFR19DTURSX0ZJRk9fWEZFUl9CWVRFUyh4KQlGSUVMRF9HRVQoR0VOTUFT SygxOSwgOCksICh4KSkKPiA+ID4gPgo+ID4gPiA+IFNvcnQgYWNjb3JkaW5nIGJpdCBwb3MuIFJF R19DTURSX0ZJRk9fWEZFUl9CWVRFUyBzaG91bGQgYmVmb3JlCj4gPiA+ID4gUkVHX0NNRFJfRklG T19FUlJPUgo+ID4gPiA+Cj4gPiA+IEFoaCB0cnVlCj4gPiA+ID4gPiArI2RlZmluZSBSRUdfU0RP X0ZJRk8JCQkweDBkYwo+ID4gPiA+ID4gKyNkZWZpbmUgUkVHX1NET19GSUZPX1JPT00JCTB4MGM4 Cj4gPiA+ID4gPiArI2RlZmluZSBSRUdfU0RJX0ZJRk8JCQkweDBlMAo+ID4gPiA+ID4gKyNkZWZp bmUgUkVHX0lCSV9GSUZPCQkJMHgwZTQKPiA+ID4gPiA+ICsjZGVmaW5lIFJFR19GSUZPX1NUQVRV UwkJCTB4MGU4Cj4gPiA+ID4gPiArI2RlZmluZSAgIFJFR19GSUZPX1NUQVRVU19DTURSX0VNUFRZ CUJJVCgwKQo+ID4gPiA+ID4gKyNkZWZpbmUgICBSRUdfRklGT19TVEFUVVNfSUJJX0VNUFRZCUJJ VCgxKQo+ID4gPiA+ID4gKyNkZWZpbmUgUkVHX09QUwkJCQkweDEwMAo+ID4gPiA+ID4gKyNkZWZp bmUgICBSRUdfT1BTX1NFVF9TRyh4KQkJRklFTERfUFJFUChHRU5NQVNLKDYsIDUpLCAoeCkpCj4g PiA+ID4gPiArI2RlZmluZSAgIFJFR19PUFNfUFBfU0dfTUFTSwkJR0VOTUFTSyg2LCA1KQo+ID4g PiA+Cj4gPiA+ID4gUkVHX09QU19TRVRfU0coeCkgRklFTERfUFJFUChSRUdfT1BTX1BQX1NHX01B U0ssICh4KSkKPiA+ID4gQWNrLgo+ID4gPiA+Cj4gPiA+ID4gPiArI2RlZmluZSBSRUdfSUJJX0NP TkZJRwkJCTB4MTQwCj4gPiA+ID4gPiArI2RlZmluZSAgIFJFR19JQklfQ09ORklHX0xJU1RFTgkJ QklUKDEpCj4gPiA+ID4gPiArI2RlZmluZSAgIFJFR19JQklfQ09ORklHX0VOQUJMRQkJQklUKDAp Cj4gPiA+ID4KPiA+ID4gPiBzb3J0IGl0LiBrZWVwIGNvbnNpc2VudCBpbiB3aG9sZSBmaWxlLCBm cm9tIDAtPjMxIG9yIDMxLT4wCj4gPiA+ID4KPiA+ID4gQWNrLCBkZWNyZW1lbnRpbmcKPiA+ID4g PiA+ICsjZGVmaW5lIFJFR19ERVZfQ0hBUgkJCTB4MTgwCj4gPiA+ID4gPiArI2RlZmluZSAgIFJF R19ERVZfQ0hBUl9JU19JMkMJCUJJVCgwKQo+ID4gPiA+ID4gKyNkZWZpbmUgICBSRUdfREVWX0NI QVJfSVNfQVRUQUNIRUQJQklUKDEpCj4gPiA+ID4gPiArI2RlZmluZSAgIFJFR19ERVZfQ0hBUl9C Q1JfSUJJKHgpCSgoKHgpICYgR0VOTUFTSygyLCAxKSkgPDwgMSkKPiA+ID4gPgo+ID4gPiA+IEZJ RUxEX1BSRVAoKQo+ID4gPiBPaywgSSB3aWxsIHJlbW92ZSB0aGUgc2ltcGxpZmljYXRpb24gYW5k IG1ha2UgaXQgY2xlYXJlciBieSBzZXR0aW5nCj4gPiA+Cj4gPiA+ICAgICAgI2RlZmluZSAgIFJF R19ERVZfQ0hBUl9CQ1JfSUJJKHgpICAgICAgIEZJRUxEX1BSRVAoR0VOTUFTSygzLCAyKSwgKHgp KQo+ID4gPgo+ID4gPiBUaGVuIHVzYWdlOgo+ID4gPgo+ID4gPiAgICAgICNpbmNsdWRlIDxsaW51 eC9pM2MvZGV2aWNlLmg+Cj4gPiA+ICAgICAgLi4uCj4gPiA+ICAgICAgYmNyX2liaSA9IEZJRUxE X0dFVChJM0NfQkNSX0lCSV9QQVlMT0FEIHwgSTNDX0JDUl9JQklfUkVRX0NBUCwgKGkzY2Rldi0+ aW5mby5iY3IpKTsKPiA+ID4gICAgICAuLi5SRUdfREVWX0NIQVJfQkNSX0lCSShiY3JfaWJpKS4u LjsKPiA+ID4KPiA+ID4gPgo+ID4gPiA+ID4gKyNkZWZpbmUgICBSRUdfREVWX0NIQVJfV0VOCQlC SVQoOCkKPiA+ID4gPiA+ICsjZGVmaW5lICAgUkVHX0RFVl9DSEFSX0FERFIoeCkJCUZJRUxEX1BS RVAoR0VOTUFTSygxNSwgOSksICh4KSkKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICtlbnVtIHNwZWVk X2dyYWRlIHtQUF9TR19VTlNFVCwgUFBfU0dfMU1IWiwgUFBfU0dfM01IWiwgUFBfU0dfNk1IWiwg UFBfU0dfMTJNSFp9Owo+ID4gPiA+ID4gK3N0cnVjdCBhZGlfaTNjX2NtZCB7Cj4gPiA+ID4gPiAr CXUzMiBjbWQwOwo+ID4gPiA+ID4gKwl1MzIgY21kMTsKPiA+ID4gPiA+ICsJdTMyIHR4X2xlbjsK PiA+ID4gPiA+ICsJY29uc3Qgdm9pZCAqdHhfYnVmOwo+ID4gPiA+ID4gKwl1MzIgcnhfbGVuOwo+ ID4gPiA+ID4gKwl2b2lkICpyeF9idWY7Cj4gPiA+ID4gPiArCXUzMiBlcnJvcjsKPiA+ID4gPiA+ ICt9Owo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK3N0cnVjdCBhZGlfaTNjX3hmZXIgewo+ID4gPiA+ ID4gKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Cj4gPiA+ID4gPiArCXN0cnVjdCBjb21wbGV0aW9u IGNvbXA7Cj4gPiA+ID4gPiArCWludCByZXQ7Cj4gPiA+ID4gPiArCXVuc2lnbmVkIGludCBuY21k czsKPiA+ID4gPiA+ICsJdW5zaWduZWQgaW50IG5jbWRzX2NvbXA7Cj4gPiA+ID4gPiArCXN0cnVj dCBhZGlfaTNjX2NtZCBjbWRzW107Cj4gPiA+ID4gPiArfTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ ICtzdHJ1Y3QgYWRpX2kzY19tYXN0ZXIgewo+ID4gPiA+ID4gKwlzdHJ1Y3QgaTNjX21hc3Rlcl9j b250cm9sbGVyIGJhc2U7Cj4gPiA+ID4gPiArCXUzMiBmcmVlX3JyX3Nsb3RzOwo+ID4gPiA+ID4g Kwl1bnNpZ25lZCBpbnQgbWF4ZGV2czsKPiA+ID4gPiA+ICsJc3RydWN0IHsKPiA+ID4gPiA+ICsJ CXVuc2lnbmVkIGludCBudW1fc2xvdHM7Cj4gPiA+ID4gPiArCQlzdHJ1Y3QgaTNjX2Rldl9kZXNj ICoqc2xvdHM7Cj4gPiA+ID4gPiArCQlzcGlubG9ja190IGxvY2s7IC8qIFByb3RlY3QgSUJJIHNs b3QgYWNjZXNzICovCj4gPiA+ID4gPiArCX0gaWJpOwo+ID4gPiA+ID4gKwlzdHJ1Y3Qgewo+ID4g PiA+ID4gKwkJc3RydWN0IGxpc3RfaGVhZCBsaXN0Owo+ID4gPiA+ID4gKwkJc3RydWN0IGFkaV9p M2NfeGZlciAqY3VyOwo+ID4gPiA+ID4gKwkJc3BpbmxvY2tfdCBsb2NrOyAvKiBQcm90ZWN0IHRy YW5zZmVyICovCj4gPiA+ID4gPiArCX0geGZlcnF1ZXVlOwo+ID4gPiA+ID4gKwl2b2lkIF9faW9t ZW0gKnJlZ3M7Cj4gPiA+ID4gPiArCXN0cnVjdCBjbGsgKmNsazsKPiA+ID4gPiA+ICsJdW5zaWdu ZWQgbG9uZyBpM2Nfc2NsX2xpbTsKPiA+ID4gPiA+ICsJc3RydWN0IHsKPiA+ID4gPiA+ICsJCXU4 IGFkZHJzW01BWF9ERVZTXTsKPiA+ID4gPiA+ICsJCXU4IGluZGV4Owo+ID4gPiA+ID4gKwl9IGRh YTsKPiA+ID4gPiA+ICt9Owo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK3N0YXRpYyBpbmxpbmUgc3Ry dWN0IGFkaV9pM2NfbWFzdGVyICp0b19hZGlfaTNjX21hc3RlcihzdHJ1Y3QgaTNjX21hc3Rlcl9j b250cm9sbGVyICptYXN0ZXIpCj4gPiA+ID4gPiArewo+ID4gPiA+ID4gKwlyZXR1cm4gY29udGFp bmVyX29mKG1hc3Rlciwgc3RydWN0IGFkaV9pM2NfbWFzdGVyLCBiYXNlKTsKPiA+ID4gPiA+ICt9 Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArc3RhdGljIHZvaWQgYWRpX2kzY19tYXN0ZXJfd3JfdG9f dHhfZmlmbyhzdHJ1Y3QgYWRpX2kzY19tYXN0ZXIgKm1hc3RlciwKPiA+ID4gPiA+ICsJCQkJCSBj b25zdCB1OCAqYnl0ZXMsIHVuc2lnbmVkIGludCBuYnl0ZXMpCj4gPiA+ID4gPiArewo+ID4gPiA+ ID4gKwl1bnNpZ25lZCBpbnQgbiwgbTsKPiA+ID4gPiA+ICsJdTMyIHRtcDsKPiA+ID4gPiA+ICsK PiA+ID4gPiA+ICsJbiA9IHJlYWRsKG1hc3Rlci0+cmVncyArIFJFR19TRE9fRklGT19ST09NKTsK PiA+ID4gPiA+ICsJbSA9IG1pbihuLCBuYnl0ZXMpOwo+ID4gPiA+ID4gKwl3cml0ZXNsKG1hc3Rl ci0+cmVncyArIFJFR19TRE9fRklGTywgYnl0ZXMsIG0gLyA0KTsKPiA+ID4gPiA+ICsKPiA+ID4g PiA+ICsJaWYgKG0gJiAzKSB7Cj4gPiA+ID4gPiArCQltZW1jcHkoJnRtcCwgYnl0ZXMgKyAobSAm IH4zKSwgbSAmIDMpOwo+ID4gPiA+ID4gKwkJd3JpdGVsKHRtcCwgbWFzdGVyLT5yZWdzICsgUkVH X1NET19GSUZPKTsKPiA+ID4gPiA+ICsJfQo+ID4gPiA+ID4gK30KPiA+ID4gPiA+ICsKPiA+ID4g PiA+ICtzdGF0aWMgdm9pZCBhZGlfaTNjX21hc3Rlcl9yZF9mcm9tX3J4X2ZpZm8oc3RydWN0IGFk aV9pM2NfbWFzdGVyICptYXN0ZXIsCj4gPiA+ID4gPiArCQkJCQkgICB1OCAqYnl0ZXMsIHVuc2ln bmVkIGludCBuYnl0ZXMpCj4gPiA+ID4gPiArewo+ID4gPiA+ID4gKwlyZWFkc2wobWFzdGVyLT5y ZWdzICsgUkVHX1NESV9GSUZPLCBieXRlcywgbmJ5dGVzIC8gNCk7Cj4gPiA+ID4gPiArCWlmIChu Ynl0ZXMgJiAzKSB7Cj4gPiA+ID4gPiArCQl1MzIgdG1wOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4g KwkJdG1wID0gcmVhZGwobWFzdGVyLT5yZWdzICsgUkVHX1NESV9GSUZPKTsKPiA+ID4gPiA+ICsJ CW1lbWNweShieXRlcyArIChuYnl0ZXMgJiB+MyksICZ0bXAsIG5ieXRlcyAmIDMpOwo+ID4gPiA+ ID4gKwl9Cj4gPiA+ID4gPiArfQo+ID4gPiA+Cj4gPiA+ID4gY2FuIHlvdSBtb3ZlIGFib3ZlIHR3 byBoZWxwZXIgZnVuY3Rpb24gYXMgaW5saW5lIGludG8gZHJpdmVycy9pM2MvaW50ZXJuYWxzLmgK PiA+ID4gPgo+ID4gPiA+IG9yIGNyZWF0ZSBuZXcgb25lIGRyaXZlcnMvaTNjL21hc3Rlci9oZWxw ZXIuaCBvciBvdGhlciBuYW1pbmcuCj4gPiA+ID4KPiA+ID4gPiBSZW5lc2FzIElQIGhhdmUgc2lt aWxhciBhYm92ZSB0d28gZnVuY3Rpb25zIHRvIGFjY2VzcyBGSUZPLgo+ID4gPiA+IGh0dHBzOi8v bG9yZS5rZXJuZWwub3JnL2xpbnV4LWkzYy8xNzQ5NjQ3MjQ0ODUuMzMwMDQ1LjIxODE3MDY5MjEy NzIxMzg4MTYucm9iaEBrZXJuZWwub3JnL1QvI3QKPiA+ID4gPgo+ID4gPiBPaywgeWVzIHRoYXQn cyBjb21tb24gYmVjYXVzZSB0aGUgcGFzc2VzIHR5cGUgdTggZG9lc24ndCBlbnN1cmUKPiA+ID4g bXVsdGlwbGVzIG9mIDMyIGF0IGxlYXN0LiBBZGRlZCB0byBteSBUT0RPIGxpc3QuCj4gPiA+ID4g PiArCj4gPiA+ID4gPiArc3RhdGljIGJvb2wgYWRpX2kzY19tYXN0ZXJfc3VwcG9ydHNfY2NjX2Nt ZChzdHJ1Y3QgaTNjX21hc3Rlcl9jb250cm9sbGVyICptLAo+ID4gPiA+ID4gKwkJCQkJICAgIGNv bnN0IHN0cnVjdCBpM2NfY2NjX2NtZCAqY21kKQo+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ICsJaWYg KGNtZC0+bmRlc3RzID4gMSkKPiA+ID4gPiA+ICsJCXJldHVybiBmYWxzZTsKPiA+ID4gPiA+ICsK PiA+ID4gPiA+ICsJc3dpdGNoIChjbWQtPmlkKSB7Cj4gPiA+ID4gPiArCWNhc2UgSTNDX0NDQ19F TkVDKHRydWUpOgo+ID4gPiA+ID4gKwljYXNlIEkzQ19DQ0NfRU5FQyhmYWxzZSk6Cj4gPiA+ID4g PiArCWNhc2UgSTNDX0NDQ19ESVNFQyh0cnVlKToKPiA+ID4gPiA+ICsJY2FzZSBJM0NfQ0NDX0RJ U0VDKGZhbHNlKToKPiA+ID4gPiA+ICsJY2FzZSBJM0NfQ0NDX1JTVERBQSh0cnVlKToKPiA+ID4g PiA+ICsJY2FzZSBJM0NfQ0NDX1JTVERBQShmYWxzZSk6Cj4gPiA+ID4gPiArCWNhc2UgSTNDX0ND Q19FTlREQUE6Cj4gPiA+ID4gPiArCWNhc2UgSTNDX0NDQ19TRVREQVNBOgo+ID4gPiA+ID4gKwlj YXNlIEkzQ19DQ0NfU0VUTkVXREE6Cj4gPiA+ID4gPiArCWNhc2UgSTNDX0NDQ19HRVRNV0w6Cj4g PiA+ID4gPiArCWNhc2UgSTNDX0NDQ19HRVRNUkw6Cj4gPiA+ID4gPiArCWNhc2UgSTNDX0NDQ19H RVRQSUQ6Cj4gPiA+ID4gPiArCWNhc2UgSTNDX0NDQ19HRVRCQ1I6Cj4gPiA+ID4gPiArCWNhc2Ug STNDX0NDQ19HRVREQ1I6Cj4gPiA+ID4gPiArCWNhc2UgSTNDX0NDQ19HRVRTVEFUVVM6Cj4gPiA+ ID4gPiArCWNhc2UgSTNDX0NDQ19HRVRIRFJDQVA6Cj4gPiA+ID4gPiArCQlyZXR1cm4gdHJ1ZTsK PiA+ID4gPiA+ICsJZGVmYXVsdDoKPiA+ID4gPiA+ICsJCWJyZWFrOwo+ID4gPiA+ID4gKwl9Cj4g PiA+ID4gPiArCj4gPiA+ID4gPiArCXJldHVybiBmYWxzZTsKPiA+ID4gPiA+ICt9Cj4gPiA+ID4g PiArCj4gPiA+ID4gPiArc3RhdGljIGludCBhZGlfaTNjX21hc3Rlcl9kaXNhYmxlKHN0cnVjdCBh ZGlfaTNjX21hc3RlciAqbWFzdGVyKQo+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ICsJd3JpdGVsKDAs IG1hc3Rlci0+cmVncyArIFJFR19JQklfQ09ORklHKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJ cmV0dXJuIDA7Cj4gPiA+ID4gPiArfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK3N0YXRpYyBzdHJ1 Y3QgYWRpX2kzY194ZmVyICphZGlfaTNjX21hc3Rlcl9hbGxvY194ZmVyKHN0cnVjdCBhZGlfaTNj X21hc3RlciAqbWFzdGVyLAo+ID4gPiA+ID4gKwkJCQkJCSAgICAgIHVuc2lnbmVkIGludCBuY21k cykKPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiArCXN0cnVjdCBhZGlfaTNjX3hmZXIgKnhmZXI7Cj4g PiA+ID4gPiArCj4gPiA+ID4gPiArCXhmZXIgPSBremFsbG9jKHN0cnVjdF9zaXplKHhmZXIsIGNt ZHMsIG5jbWRzKSwgR0ZQX0tFUk5FTCk7Cj4gPiA+ID4gPiArCWlmICgheGZlcikKPiA+ID4gPiA+ ICsJCXJldHVybiBOVUxMOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlJTklUX0xJU1RfSEVBRCgm eGZlci0+bm9kZSk7Cj4gPiA+ID4gPiArCXhmZXItPm5jbWRzID0gbmNtZHM7Cj4gPiA+ID4gPiAr CXhmZXItPnJldCA9IC1FVElNRURPVVQ7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCXJldHVybiB4 ZmVyOwo+ID4gPiA+ID4gK30KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICtzdGF0aWMgdm9pZCBhZGlf aTNjX21hc3Rlcl9zdGFydF94ZmVyX2xvY2tlZChzdHJ1Y3QgYWRpX2kzY19tYXN0ZXIgKm1hc3Rl cikKPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiArCXN0cnVjdCBhZGlfaTNjX3hmZXIgKnhmZXIgPSBt YXN0ZXItPnhmZXJxdWV1ZS5jdXI7Cj4gPiA+ID4gPiArCXVuc2lnbmVkIGludCBpLCBuLCBtOwo+ ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlpZiAoIXhmZXIpCj4gPiA+ID4gPiArCQlyZXR1cm47Cj4g PiA+ID4gPiArCj4gPiA+ID4gPiArCWZvciAoaSA9IDA7IGkgPCB4ZmVyLT5uY21kczsgaSsrKSB7 Cj4gPiA+ID4gPiArCQlzdHJ1Y3QgYWRpX2kzY19jbWQgKmNtZCA9ICZ4ZmVyLT5jbWRzW2ldOwo+ ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwkJaWYgKCEoY21kLT5jbWQwICYgUkVHX0NNRF9GSUZPXzBf Uk5XKSkKPiA+ID4gPiA+ICsJCQlhZGlfaTNjX21hc3Rlcl93cl90b190eF9maWZvKG1hc3Rlciwg Y21kLT50eF9idWYsIGNtZC0+dHhfbGVuKTsKPiA+ID4gPiA+ICsJfQo+ID4gPiA+ID4gKwo+ID4g PiA+ID4gKwluID0gcmVhZGwobWFzdGVyLT5yZWdzICsgUkVHX0NNRF9GSUZPX1JPT00pOwo+ID4g PiA+ID4gKwlmb3IgKGkgPSAwOyBpIDwgeGZlci0+bmNtZHM7IGkrKykgewo+ID4gPiA+ID4gKwkJ c3RydWN0IGFkaV9pM2NfY21kICpjbWQgPSAmeGZlci0+Y21kc1tpXTsKPiA+ID4gPiA+ICsKPiA+ ID4gPiA+ICsJCW0gPSBjbWQtPmNtZDAgJiBSRUdfQ01EX0ZJRk9fMF9JU19DQ0MgPyAyIDogMTsK PiA+ID4gPiA+ICsJCWlmIChtID4gbikKPiA+ID4gPiA+ICsJCQlicmVhazsKPiA+ID4gPiA+ICsJ CXdyaXRlbChjbWQtPmNtZDAsIG1hc3Rlci0+cmVncyArIFJFR19DTURfRklGTyk7Cj4gPiA+ID4g PiArCQlpZiAoY21kLT5jbWQwICYgUkVHX0NNRF9GSUZPXzBfSVNfQ0NDKQo+ID4gPiA+ID4gKwkJ CXdyaXRlbChjbWQtPmNtZDEsIG1hc3Rlci0+cmVncyArIFJFR19DTURfRklGTyk7Cj4gPiA+ID4g PiArCQluIC09IG07Cj4gPiA+ID4gPiArCX0KPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiArCj4gPiA+ ID4gPiArc3RhdGljIHZvaWQgYWRpX2kzY19tYXN0ZXJfZW5kX3hmZXJfbG9ja2VkKHN0cnVjdCBh ZGlfaTNjX21hc3RlciAqbWFzdGVyLAo+ID4gPiA+ID4gKwkJCQkJICAgdTMyIHBlbmRpbmcpCj4g PiA+ID4gPiArewo+ID4gPiA+ID4gKwlzdHJ1Y3QgYWRpX2kzY194ZmVyICp4ZmVyID0gbWFzdGVy LT54ZmVycXVldWUuY3VyOwo+ID4gPiA+ID4gKwlpbnQgaSwgcmV0ID0gMDsKPiA+ID4gPiA+ICsJ dTMyIHN0YXR1czA7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWlmICgheGZlcikKPiA+ID4gPiA+ ICsJCXJldHVybjsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJZm9yIChzdGF0dXMwID0gcmVhZGwo bWFzdGVyLT5yZWdzICsgUkVHX0ZJRk9fU1RBVFVTKTsKPiA+ID4gPiA+ICsJICAgICAhKHN0YXR1 czAgJiBSRUdfRklGT19TVEFUVVNfQ01EUl9FTVBUWSk7Cj4gPiA+ID4gPiArCSAgICAgc3RhdHVz MCA9IHJlYWRsKG1hc3Rlci0+cmVncyArIFJFR19GSUZPX1NUQVRVUykpIHsKPiA+ID4gPgo+ID4g PiA+IGhvdyBhYm91dAo+ID4gPiA+Cj4gPiA+ID4gd2hpbGUgKCEocmVhZGwobWFzdGVyLT5yZWdz ICsgUkVHX0ZJRk9fU1RBVFVTKSAmIFJFR19GSUZPX1NUQVRVU19DTURSX0VNUFRZKSkpIHsKPiA+ ID4gPgo+ID4gPiBBY2ssIHRoYW5rcyEKPiA+ID4gU2FtZSBmb3IgJ1JFR19GSUZPX1NUQVRVU19J QklfRU1QVFkgZm9yJy4KPiA+ID4gPiA+ICsJCXN0cnVjdCBhZGlfaTNjX2NtZCAqY21kOwo+ID4g PiA+ID4gKwkJdTMyIGNtZHIsIHJ4X2xlbjsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJCWNtZHIg PSByZWFkbChtYXN0ZXItPnJlZ3MgKyBSRUdfQ01EUl9GSUZPKTsKPiA+ID4gPiA+ICsKPiA+ID4g PiA+ICsJCWNtZCA9ICZ4ZmVyLT5jbWRzW3hmZXItPm5jbWRzX2NvbXArK107Cj4gPiA+ID4gPiAr CQlpZiAoY21kLT5jbWQwICYgUkVHX0NNRF9GSUZPXzBfUk5XKSB7Cj4gPiA+ID4gPiArCQkJcnhf bGVuID0gbWluX3QodTMyLCBSRUdfQ01EUl9GSUZPX1hGRVJfQllURVMoY21kciksIGNtZC0+cnhf bGVuKTsKPiA+ID4gPiA+ICsJCQlhZGlfaTNjX21hc3Rlcl9yZF9mcm9tX3J4X2ZpZm8obWFzdGVy LCBjbWQtPnJ4X2J1ZiwgcnhfbGVuKTsKPiA+ID4gPiA+ICsJCX0KPiA+ID4gPiA+ICsJCWNtZC0+ ZXJyb3IgPSBSRUdfQ01EUl9GSUZPX0VSUk9SKGNtZHIpOwo+ID4gPiA+ID4gKwl9Cj4gPiA+ID4g PiArCj4gPiA+ID4gPiArCWZvciAoaSA9IDA7IGkgPCB4ZmVyLT5uY21kczsgaSsrKSB7Cj4gPiA+ ID4KPiA+ID4gPiBJIHRoaW5rIHlvdSBpdGVyYXRlIHRvIG5jbWRzX2NvbXA/Cj4gPiA+ID4KPiA+ ID4gWW91IGFyZSBjb3JyZWN0IHRoYW5rcyEgRWFjaCBjb21tYW5kIHlpZWxkcyBhIGNvbW1hbmQg cmVjZWlwdCBpbnRlcnJ1cHQuCj4gPiA+ID4gPiArCQlzd2l0Y2ggKHhmZXItPmNtZHNbaV0uZXJy b3IpIHsKPiA+ID4gPiA+ICsJCWNhc2UgUkVHX0NNRFJfRklGT19OT19FUlJPUjoKPiA+ID4gPiA+ ICsJCQlicmVhazsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJCWNhc2UgUkVHX0NNRFJfRklGT19D RTBfRVJST1I6Cj4gPiA+ID4gPiArCQljYXNlIFJFR19DTURSX0ZJRk9fQ0UyX0VSUk9SOgo+ID4g PiA+ID4gKwkJY2FzZSBSRUdfQ01EUl9GSUZPX05BQ0tfUkVTUDoKPiA+ID4gPiA+ICsJCWNhc2Ug UkVHX0NNRFJfRklGT19VREFfRVJST1I6Cj4gPiA+ID4gPiArCQkJcmV0ID0gLUVJTzsKPiA+ID4g PiA+ICsJCQlicmVhazsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJCWRlZmF1bHQ6Cj4gPiA+ID4g PiArCQkJcmV0ID0gLUVJTlZBTDsKPiA+ID4gPiA+ICsJCQlicmVhazsKPiA+ID4gPiA+ICsJCX0K PiA+ID4gPiA+ICsJfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwl4ZmVyLT5yZXQgPSByZXQ7Cj4g PiA+ID4gPiArCj4gPiA+ID4gPiArCWlmICh4ZmVyLT5uY21kc19jb21wICE9IHhmZXItPm5jbWRz KQo+ID4gPiA+ID4gKwkJcmV0dXJuOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwljb21wbGV0ZSgm eGZlci0+Y29tcCk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCXhmZXIgPSBsaXN0X2ZpcnN0X2Vu dHJ5X29yX251bGwoJm1hc3Rlci0+eGZlcnF1ZXVlLmxpc3QsCj4gPiA+ID4gPiArCQkJCQlzdHJ1 Y3QgYWRpX2kzY194ZmVyLCBub2RlKTsKPiA+ID4gPiA+ICsJaWYgKHhmZXIpCj4gPiA+ID4gPiAr CQlsaXN0X2RlbF9pbml0KCZ4ZmVyLT5ub2RlKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJbWFz dGVyLT54ZmVycXVldWUuY3VyID0geGZlcjsKPiA+ID4gPiA+ICsJYWRpX2kzY19tYXN0ZXJfc3Rh cnRfeGZlcl9sb2NrZWQobWFzdGVyKTsKPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiArCj4gPiA+ID4g PiArc3RhdGljIHZvaWQgYWRpX2kzY19tYXN0ZXJfcXVldWVfeGZlcihzdHJ1Y3QgYWRpX2kzY19t YXN0ZXIgKm1hc3RlciwKPiA+ID4gPiA+ICsJCQkJICAgICAgc3RydWN0IGFkaV9pM2NfeGZlciAq eGZlcikKPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiArCWluaXRfY29tcGxldGlvbigmeGZlci0+Y29t cCk7Cj4gPiA+ID4gPiArCWd1YXJkKHNwaW5sb2NrX2lycXNhdmUpKCZtYXN0ZXItPnhmZXJxdWV1 ZS5sb2NrKTsKPiA+ID4gPiA+ICsJaWYgKG1hc3Rlci0+eGZlcnF1ZXVlLmN1cikgewo+ID4gPiA+ ID4gKwkJbGlzdF9hZGRfdGFpbCgmeGZlci0+bm9kZSwgJm1hc3Rlci0+eGZlcnF1ZXVlLmxpc3Qp Owo+ID4gPiA+ID4gKwl9IGVsc2Ugewo+ID4gPiA+ID4gKwkJbWFzdGVyLT54ZmVycXVldWUuY3Vy ID0geGZlcjsKPiA+ID4gPiA+ICsJCWFkaV9pM2NfbWFzdGVyX3N0YXJ0X3hmZXJfbG9ja2VkKG1h c3Rlcik7Cj4gPiA+ID4gPiArCX0KPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiAr c3RhdGljIHZvaWQgYWRpX2kzY19tYXN0ZXJfdW5xdWV1ZV94ZmVyKHN0cnVjdCBhZGlfaTNjX21h c3RlciAqbWFzdGVyLAo+ID4gPiA+ID4gKwkJCQkJc3RydWN0IGFkaV9pM2NfeGZlciAqeGZlcikK PiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiArCWd1YXJkKHNwaW5sb2NrX2lycXNhdmUpKCZtYXN0ZXIt PnhmZXJxdWV1ZS5sb2NrKTsKPiA+ID4gPiA+ICsJaWYgKG1hc3Rlci0+eGZlcnF1ZXVlLmN1ciA9 PSB4ZmVyKQo+ID4gPiA+ID4gKwkJbWFzdGVyLT54ZmVycXVldWUuY3VyID0gTlVMTDsKPiA+ID4g PiA+ICsJZWxzZQo+ID4gPiA+ID4gKwkJbGlzdF9kZWxfaW5pdCgmeGZlci0+bm9kZSk7Cj4gPiA+ ID4gPiArCj4gPiA+ID4gPiArCXdyaXRlbCgweDAxLCBtYXN0ZXItPnJlZ3MgKyBSRUdfRU5BQkxF KTsKPiA+ID4gPiA+ICsJd3JpdGVsKDB4MDAsIG1hc3Rlci0+cmVncyArIFJFR19FTkFCTEUpOwo+ ID4gPiA+ID4gKwl3cml0ZWwoUkVHX0lSUV9QRU5ESU5HX0NNRFIsIG1hc3Rlci0+cmVncyArIFJF R19JUlFfTUFTSyk7Cj4gPiA+ID4gPiArfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK3N0YXRpYyBl bnVtIGkzY19lcnJvcl9jb2RlIGFkaV9pM2NfY21kX2dldF9lcnIoc3RydWN0IGFkaV9pM2NfY21k ICpjbWQpCj4gPiA+ID4gPiArewo+ID4gPiA+ID4gKwlzd2l0Y2ggKGNtZC0+ZXJyb3IpIHsKPiA+ ID4gPiA+ICsJY2FzZSBSRUdfQ01EUl9GSUZPX0NFMF9FUlJPUjoKPiA+ID4gPiA+ICsJCXJldHVy biBJM0NfRVJST1JfTTA7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWNhc2UgUkVHX0NNRFJfRklG T19DRTJfRVJST1I6Cj4gPiA+ID4gPiArCWNhc2UgUkVHX0NNRFJfRklGT19OQUNLX1JFU1A6Cj4g PiA+ID4gPiArCQlyZXR1cm4gSTNDX0VSUk9SX00yOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlk ZWZhdWx0Ogo+ID4gPiA+ID4gKwkJYnJlYWs7Cj4gPiA+ID4gPiArCX0KPiA+ID4gPiA+ICsKPiA+ ID4gPiA+ICsJcmV0dXJuIEkzQ19FUlJPUl9VTktOT1dOOwo+ID4gPiA+ID4gK30KPiA+ID4gPiA+ ICsKPiA+ID4gPiA+ICtzdGF0aWMgaW50IGFkaV9pM2NfbWFzdGVyX3NlbmRfY2NjX2NtZChzdHJ1 Y3QgaTNjX21hc3Rlcl9jb250cm9sbGVyICptLAo+ID4gPiA+ID4gKwkJCQkgICAgICAgc3RydWN0 IGkzY19jY2NfY21kICpjbWQpCj4gPiA+ID4gPiArewo+ID4gPiA+ID4gKwlzdHJ1Y3QgYWRpX2kz Y19tYXN0ZXIgKm1hc3RlciA9IHRvX2FkaV9pM2NfbWFzdGVyKG0pOwo+ID4gPiA+ID4gKwlzdHJ1 Y3QgYWRpX2kzY194ZmVyICp4ZmVyOwo+ID4gPiA+ID4gKwlzdHJ1Y3QgYWRpX2kzY19jbWQgKmNj bWQ7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCXhmZXIgPSBhZGlfaTNjX21hc3Rlcl9hbGxvY194 ZmVyKG1hc3RlciwgMSk7Cj4gPiA+ID4gPiArCWlmICgheGZlcikKPiA+ID4gPiA+ICsJCXJldHVy biAtRU5PTUVNOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwljY21kID0geGZlci0+Y21kczsKPiA+ ID4gPiA+ICsJY2NtZC0+Y21kMSA9IFJFR19DTURfRklGT18xX0NDQyhjbWQtPmlkKTsKPiA+ID4g PiA+ICsJY2NtZC0+Y21kMCA9IFJFR19DTURfRklGT18wX0lTX0NDQyB8Cj4gPiA+ID4gPiArCQkg ICAgIFJFR19DTURfRklGT18wX0xFTihjbWQtPmRlc3RzWzBdLnBheWxvYWQubGVuKTsKPiA+ID4g PiA+ICsKPiA+ID4gPiA+ICsJaWYgKGNtZC0+aWQgJiBJM0NfQ0NDX0RJUkVDVCkKPiA+ID4gPiA+ ICsJCWNjbWQtPmNtZDAgfD0gUkVHX0NNRF9GSUZPXzBfREVWX0FERFIoY21kLT5kZXN0c1swXS5h ZGRyKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJaWYgKGNtZC0+cm53KSB7Cj4gPiA+ID4gPiAr CQljY21kLT5jbWQwIHw9IFJFR19DTURfRklGT18wX1JOVzsKPiA+ID4gPiA+ICsJCWNjbWQtPnJ4 X2J1ZiA9IGNtZC0+ZGVzdHNbMF0ucGF5bG9hZC5kYXRhOwo+ID4gPiA+ID4gKwkJY2NtZC0+cnhf bGVuID0gY21kLT5kZXN0c1swXS5wYXlsb2FkLmxlbjsKPiA+ID4gPiA+ICsJfSBlbHNlIHsKPiA+ ID4gPiA+ICsJCWNjbWQtPnR4X2J1ZiA9IGNtZC0+ZGVzdHNbMF0ucGF5bG9hZC5kYXRhOwo+ID4g PiA+ID4gKwkJY2NtZC0+dHhfbGVuID0gY21kLT5kZXN0c1swXS5wYXlsb2FkLmxlbjsKPiA+ID4g PiA+ICsJfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlhZGlfaTNjX21hc3Rlcl9xdWV1ZV94ZmVy KG1hc3RlciwgeGZlcik7Cj4gPiA+ID4gPiArCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1l b3V0KCZ4ZmVyLT5jb21wLCBtc2Vjc190b19qaWZmaWVzKDEwMDApKSkKPiA+ID4gPiA+ICsJCWFk aV9pM2NfbWFzdGVyX3VucXVldWVfeGZlcihtYXN0ZXIsIHhmZXIpOwo+ID4gPiA+ID4gKwo+ID4g PiA+ID4gKwljbWQtPmVyciA9IGFkaV9pM2NfY21kX2dldF9lcnIoJnhmZXItPmNtZHNbMF0pOwo+ ID4gPiA+ID4gKwlrZnJlZSh4ZmVyKTsKPiA+ID4gPgo+ID4gPiA+IHlvdSBjYW4gdXNlCj4gPiA+ ID4gc3RydWN0IGFkaV9pM2NfeGZlciAqeGZlciBfX2ZyZWUoa2ZyZWUpID0gTlVMTDsKPiA+ID4g Pgo+ID4gPiA+ICB0byBzaW1wbGUgY29kZS4KPiA+ID4gPgo+ID4gPiBBaCBjb29sLCB3aWxsIHVz ZSBpbiBhbGwgeGZlciBpbnN0YW5jZXMuCj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCXJldHVybiAw Owo+ID4gPiA+ID4gK30KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICtzdGF0aWMgaW50IGFkaV9pM2Nf bWFzdGVyX3ByaXZfeGZlcnMoc3RydWN0IGkzY19kZXZfZGVzYyAqZGV2LAo+ID4gPiA+ID4gKwkJ CQkgICAgIHN0cnVjdCBpM2NfcHJpdl94ZmVyICp4ZmVycywKPiA+ID4gPiA+ICsJCQkJICAgICBp bnQgbnhmZXJzKQo+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ICsJc3RydWN0IGkzY19tYXN0ZXJfY29u dHJvbGxlciAqbSA9IGkzY19kZXZfZ2V0X21hc3RlcihkZXYpOwo+ID4gPiA+ID4gKwlzdHJ1Y3Qg YWRpX2kzY19tYXN0ZXIgKm1hc3RlciA9IHRvX2FkaV9pM2NfbWFzdGVyKG0pOwo+ID4gPiA+ID4g KwlzdHJ1Y3QgYWRpX2kzY194ZmVyICp4ZmVyOwo+ID4gPiA+ID4gKwlpbnQgaSwgcmV0Owo+ID4g PiA+ID4gKwo+ID4gPiA+ID4gKwlpZiAoIW54ZmVycykKPiA+ID4gPiA+ICsJCXJldHVybiAwOwo+ ID4gPiA+Cj4gPiA+ID4gYWRkIGFuIGVtcHR5IGxpbmUuCj4gPiA+ID4KPiA+ID4gQWNrLgo+ID4g PiA+ID4gKwl4ZmVyID0gYWRpX2kzY19tYXN0ZXJfYWxsb2NfeGZlcihtYXN0ZXIsIG54ZmVycyk7 Cj4gPiA+ID4gPiArCWlmICgheGZlcikKPiA+ID4gPiA+ICsJCXJldHVybiAtRU5PTUVNOwo+ID4g PiA+ID4gKwo+ID4gPiA+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbnhmZXJzOyBpKyspIHsKPiA+ID4g PiA+ICsJCXN0cnVjdCBhZGlfaTNjX2NtZCAqY2NtZCA9ICZ4ZmVyLT5jbWRzW2ldOwo+ID4gPiA+ ID4gKwo+ID4gPiA+ID4gKwkJY2NtZC0+Y21kMCA9IFJFR19DTURfRklGT18wX0RFVl9BRERSKGRl di0+aW5mby5keW5fYWRkcik7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCQlpZiAoeGZlcnNbaV0u cm53KSB7Cj4gPiA+ID4gPiArCQkJY2NtZC0+Y21kMCB8PSBSRUdfQ01EX0ZJRk9fMF9STlc7Cj4g PiA+ID4gPiArCQkJY2NtZC0+cnhfYnVmID0geGZlcnNbaV0uZGF0YS5pbjsKPiA+ID4gPiA+ICsJ CQljY21kLT5yeF9sZW4gPSB4ZmVyc1tpXS5sZW47Cj4gPiA+ID4gPiArCQl9IGVsc2Ugewo+ID4g PiA+ID4gKwkJCWNjbWQtPnR4X2J1ZiA9IHhmZXJzW2ldLmRhdGEub3V0Owo+ID4gPiA+ID4gKwkJ CWNjbWQtPnR4X2xlbiA9IHhmZXJzW2ldLmxlbjsKPiA+ID4gPiA+ICsJCX0KPiA+ID4gPiA+ICsK PiA+ID4gPiA+ICsJCWNjbWQtPmNtZDAgfD0gUkVHX0NNRF9GSUZPXzBfTEVOKHhmZXJzW2ldLmxl bik7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCQlpZiAoaSA8IG54ZmVycyAtIDEpCj4gPiA+ID4g PiArCQkJY2NtZC0+Y21kMCB8PSBSRUdfQ01EX0ZJRk9fMF9TUjsKPiA+ID4gPiA+ICsKPiA+ID4g PiA+ICsJCWlmICghaSkKPiA+ID4gPiA+ICsJCQljY21kLT5jbWQwIHw9IFJFR19DTURfRklGT18w X0JDQVNUOwo+ID4gPiA+ID4gKwl9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWFkaV9pM2NfbWFz dGVyX3F1ZXVlX3hmZXIobWFzdGVyLCB4ZmVyKTsKPiA+ID4gPiA+ICsJaWYgKCF3YWl0X2Zvcl9j b21wbGV0aW9uX3RpbWVvdXQoJnhmZXItPmNvbXAsCj4gPiA+ID4gPiArCQkJCQkgbXNlY3NfdG9f amlmZmllcygxMDAwKSkpCj4gPiA+ID4gPiArCQlhZGlfaTNjX21hc3Rlcl91bnF1ZXVlX3hmZXIo bWFzdGVyLCB4ZmVyKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJcmV0ID0geGZlci0+cmV0Owo+ ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbnhmZXJzOyBpKyspCj4gPiA+ ID4gPiArCQl4ZmVyc1tpXS5lcnIgPSBhZGlfaTNjX2NtZF9nZXRfZXJyKCZ4ZmVyLT5jbWRzW2ld KTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJa2ZyZWUoeGZlcik7Cj4gPiA+ID4gPiArCj4gPiA+ ID4gPiArCXJldHVybiByZXQ7Cj4gPiA+ID4gPiArfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK3N0 cnVjdCBhZGlfaTNjX2kyY19kZXZfZGF0YSB7Cj4gPiA+ID4gPiArCXUxNiBpZDsKPiA+ID4gPiA+ ICsJczE2IGliaTsKPiA+ID4gPiA+ICsJc3RydWN0IGkzY19nZW5lcmljX2liaV9wb29sICppYmlf cG9vbDsKPiA+ID4gPiA+ICt9Owo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK3N0YXRpYyBpbnQgYWRp X2kzY19tYXN0ZXJfZ2V0X3JyX3Nsb3Qoc3RydWN0IGFkaV9pM2NfbWFzdGVyICptYXN0ZXIsCj4g PiA+ID4gPiArCQkJCSAgICAgIHU4IGR5bl9hZGRyKQo+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ICsJ aWYgKCFtYXN0ZXItPmZyZWVfcnJfc2xvdHMpCj4gPiA+ID4gPiArCQlyZXR1cm4gLUVOT1NQQzsK PiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJcmV0dXJuIGZmcyhtYXN0ZXItPmZyZWVfcnJfc2xvdHMp IC0gMTsKPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArc3RhdGljIGludCBhZGlf aTNjX21hc3Rlcl9yZWF0dGFjaF9pM2NfZGV2KHN0cnVjdCBpM2NfZGV2X2Rlc2MgKmRldiwgdTgg ZHluX2FkZHIpCj4gPiA+ID4gPiArewo+ID4gPiA+ID4gKwlzdHJ1Y3QgaTNjX21hc3Rlcl9jb250 cm9sbGVyICptID0gaTNjX2Rldl9nZXRfbWFzdGVyKGRldik7Cj4gPiA+ID4gPiArCXN0cnVjdCBh ZGlfaTNjX21hc3RlciAqbWFzdGVyID0gdG9fYWRpX2kzY19tYXN0ZXIobSk7Cj4gPiA+ID4gPiAr CXU4IGFkZHI7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWFkZHIgPSBkZXYtPmluZm8uZHluX2Fk ZHIgPyBkZXYtPmluZm8uZHluX2FkZHIgOiBkZXYtPmluZm8uc3RhdGljX2FkZHI7Cj4gPiA+ID4g PiArCj4gPiA+ID4gPiArCXdyaXRlbChSRUdfREVWX0NIQVJfQUREUihkeW5fYWRkciksIG1hc3Rl ci0+cmVncyArIFJFR19ERVZfQ0hBUik7Cj4gPiA+ID4gPiArCXdyaXRlbCgocmVhZGwobWFzdGVy LT5yZWdzICsgUkVHX0RFVl9DSEFSKSAmCj4gPiA+ID4gPiArCQl+UkVHX0RFVl9DSEFSX0lTX0FU VEFDSEVEKSB8IFJFR19ERVZfQ0hBUl9XRU4sCj4gPiA+ID4gPiArCSAgICAgICBtYXN0ZXItPnJl Z3MgKyBSRUdfREVWX0NIQVIpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwl3cml0ZWwoUkVHX0RF Vl9DSEFSX0FERFIoYWRkciksIG1hc3Rlci0+cmVncyArIFJFR19ERVZfQ0hBUik7Cj4gPiA+ID4g PiArCXdyaXRlbChyZWFkbChtYXN0ZXItPnJlZ3MgKyBSRUdfREVWX0NIQVIpIHwKPiA+ID4gPiA+ ICsJICAgICAgIFJFR19ERVZfQ0hBUl9JU19BVFRBQ0hFRCB8IFJFR19ERVZfQ0hBUl9XRU4sCj4g PiA+ID4gPiArCSAgICAgICBtYXN0ZXItPnJlZ3MgKyBSRUdfREVWX0NIQVIpOwo+ID4gPiA+ID4g Kwo+ID4gPiA+ID4gKwlyZXR1cm4gMDsKPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiArCj4gPiA+ID4g PiArc3RhdGljIGludCBhZGlfaTNjX21hc3Rlcl9hdHRhY2hfaTNjX2RldihzdHJ1Y3QgaTNjX2Rl dl9kZXNjICpkZXYpCj4gPiA+ID4gPiArewo+ID4gPiA+ID4gKwlzdHJ1Y3QgaTNjX21hc3Rlcl9j b250cm9sbGVyICptID0gaTNjX2Rldl9nZXRfbWFzdGVyKGRldik7Cj4gPiA+ID4gPiArCXN0cnVj dCBhZGlfaTNjX21hc3RlciAqbWFzdGVyID0gdG9fYWRpX2kzY19tYXN0ZXIobSk7Cj4gPiA+ID4g PiArCXN0cnVjdCBhZGlfaTNjX2kyY19kZXZfZGF0YSAqZGF0YTsKPiA+ID4gPiA+ICsJaW50IHNs b3Q7Cj4gPiA+ID4gPiArCXU4IGFkZHI7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWRhdGEgPSBr emFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOwo+ID4gPiA+ID4gKwlpZiAoIWRhdGEp Cj4gPiA+ID4gPiArCQlyZXR1cm4gLUVOT01FTTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJc2xv dCA9IGFkaV9pM2NfbWFzdGVyX2dldF9ycl9zbG90KG1hc3RlciwgZGV2LT5pbmZvLmR5bl9hZGRy KTsKPiA+ID4gPiA+ICsJaWYgKHNsb3QgPCAwKSB7Cj4gPiA+ID4gPiArCQlrZnJlZShkYXRhKTsK PiA+ID4gPiA+ICsJCXJldHVybiBzbG90Owo+ID4gPiA+ID4gKwl9Cj4gPiA+ID4gPiArCj4gPiA+ ID4gPiArCWRhdGEtPmliaSA9IC0xOwo+ID4gPiA+Cj4gPiA+ID4gd2h5IC0xIGhlcmU/Cj4gPiA+ ID4KPiA+ID4gRG9lc24ndCBtZWFuIG11Y2gsIGp1c3Qgc3RvcmVzIHRoZSBpYmkgc2xvdCBvY2N1 cGllZCBieSB0aGUgZGV2aWNlLgo+ID4gPiBOVUxMIHdvdWxkIGJlIHBvc2l0aW9uIDAgb2YgdGhl IGFycmF5Lgo+ID4gPiBJdCBjYW4gYmUgbGVmdCB1bmluaXRpYWxpemVkIGFuZCBub3QgY2xlYW5l ZC11cCB3aGVuIHJlbW92ZWQuCj4gPiA+ID4gPiArCWRhdGEtPmlkID0gc2xvdDsKPiA+ID4gPiA+ ICsJaTNjX2Rldl9zZXRfbWFzdGVyX2RhdGEoZGV2LCBkYXRhKTsKPiA+ID4gPiA+ICsJbWFzdGVy LT5mcmVlX3JyX3Nsb3RzICY9IH5CSVQoc2xvdCk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWFk ZHIgPSBkZXYtPmluZm8uZHluX2FkZHIgPyBkZXYtPmluZm8uZHluX2FkZHIgOiBkZXYtPmluZm8u c3RhdGljX2FkZHI7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCXdyaXRlbChSRUdfREVWX0NIQVJf QUREUihhZGRyKSwgbWFzdGVyLT5yZWdzICsgUkVHX0RFVl9DSEFSKTsKPiA+ID4gPiA+ICsJd3Jp dGVsKHJlYWRsKG1hc3Rlci0+cmVncyArIFJFR19ERVZfQ0hBUikgfAo+ID4gPiA+ID4gKwkgICAg ICAgUkVHX0RFVl9DSEFSX0lTX0FUVEFDSEVEIHwgUkVHX0RFVl9DSEFSX1dFTiwKPiA+ID4gPiA+ ICsJICAgICAgIG1hc3Rlci0+cmVncyArIFJFR19ERVZfQ0hBUik7Cj4gPiA+ID4gPiArCj4gPiA+ ID4gPiArCXJldHVybiAwOwo+ID4gPiA+ID4gK30KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICtzdGF0 aWMgdm9pZCBhZGlfaTNjX21hc3Rlcl9zeW5jX2Rldl9jaGFyKHN0cnVjdCBpM2NfbWFzdGVyX2Nv bnRyb2xsZXIgKm0pCj4gPiA+ID4gPiArewo+ID4gPiA+ID4gKwlzdHJ1Y3QgYWRpX2kzY19tYXN0 ZXIgKm1hc3RlciA9IHRvX2FkaV9pM2NfbWFzdGVyKG0pOwo+ID4gPiA+ID4gKwlzdHJ1Y3QgaTNj X2Rldl9kZXNjICppM2NkZXY7Cj4gPiA+ID4gPiArCXU4IGFkZHI7Cj4gPiA+ID4gPiArCj4gPiA+ ID4gPiArCWkzY19idXNfZm9yX2VhY2hfaTNjZGV2KCZtLT5idXMsIGkzY2Rldikgewo+ID4gPiA+ ID4gKwkJYWRkciA9IGkzY2Rldi0+aW5mby5keW5fYWRkciA/Cj4gPiA+ID4gPiArCQkgICAgICAg aTNjZGV2LT5pbmZvLmR5bl9hZGRyIDogaTNjZGV2LT5pbmZvLnN0YXRpY19hZGRyOwo+ID4gPiA+ ID4gKwkJd3JpdGVsKFJFR19ERVZfQ0hBUl9BRERSKGFkZHIpLCBtYXN0ZXItPnJlZ3MgKyBSRUdf REVWX0NIQVIpOwo+ID4gPiA+ID4gKwkJd3JpdGVsKHJlYWRsKG1hc3Rlci0+cmVncyArIFJFR19E RVZfQ0hBUikgfAo+ID4gPiA+ID4gKwkJICAgICAgIFJFR19ERVZfQ0hBUl9CQ1JfSUJJKGkzY2Rl di0+aW5mby5iY3IpIHwgUkVHX0RFVl9DSEFSX1dFTiwKPiA+ID4gPiA+ICsJCSAgICAgICBtYXN0 ZXItPnJlZ3MgKyBSRUdfREVWX0NIQVIpOwo+ID4gPiA+ID4gKwl9Cj4gPiA+ID4gPiArfQo+ID4g PiA+ID4gKwo+ID4gPiA+ID4gK3N0YXRpYyB2b2lkIGFkaV9pM2NfbWFzdGVyX2RldGFjaF9pM2Nf ZGV2KHN0cnVjdCBpM2NfZGV2X2Rlc2MgKmRldikKPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiArCXN0 cnVjdCBpM2NfbWFzdGVyX2NvbnRyb2xsZXIgKm0gPSBpM2NfZGV2X2dldF9tYXN0ZXIoZGV2KTsK PiA+ID4gPiA+ICsJc3RydWN0IGFkaV9pM2NfbWFzdGVyICptYXN0ZXIgPSB0b19hZGlfaTNjX21h c3RlcihtKTsKPiA+ID4gPiA+ICsJc3RydWN0IGFkaV9pM2NfaTJjX2Rldl9kYXRhICpkYXRhID0g aTNjX2Rldl9nZXRfbWFzdGVyX2RhdGEoZGV2KTsKPiA+ID4gPiA+ICsJdTggYWRkcjsKPiA+ID4g PiA+ICsKPiA+ID4gPiA+ICsJYWRkciA9IGRldi0+aW5mby5keW5fYWRkciA/IGRldi0+aW5mby5k eW5fYWRkciA6IGRldi0+aW5mby5zdGF0aWNfYWRkcjsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJ d3JpdGVsKFJFR19ERVZfQ0hBUl9BRERSKGFkZHIpLCBtYXN0ZXItPnJlZ3MgKyBSRUdfREVWX0NI QVIpOwo+ID4gPiA+ID4gKwl3cml0ZWwoKHJlYWRsKG1hc3Rlci0+cmVncyArIFJFR19ERVZfQ0hB UikgJgo+ID4gPiA+ID4gKwkJflJFR19ERVZfQ0hBUl9JU19BVFRBQ0hFRCkgfCBSRUdfREVWX0NI QVJfV0VOLAo+ID4gPiA+ID4gKwkgICAgICAgbWFzdGVyLT5yZWdzICsgUkVHX0RFVl9DSEFSKTsK PiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJaTNjX2Rldl9zZXRfbWFzdGVyX2RhdGEoZGV2LCBOVUxM KTsKPiA+ID4gPiA+ICsJbWFzdGVyLT5mcmVlX3JyX3Nsb3RzIHw9IEJJVChkYXRhLT5pZCk7Cj4g PiA+ID4gPiArCWtmcmVlKGRhdGEpOwo+ID4gPiA+ID4gK30KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ ICtzdGF0aWMgaW50IGFkaV9pM2NfbWFzdGVyX2F0dGFjaF9pMmNfZGV2KHN0cnVjdCBpMmNfZGV2 X2Rlc2MgKmRldikKPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiArCXN0cnVjdCBpM2NfbWFzdGVyX2Nv bnRyb2xsZXIgKm0gPSBpMmNfZGV2X2dldF9tYXN0ZXIoZGV2KTsKPiA+ID4gPiA+ICsJc3RydWN0 IGFkaV9pM2NfbWFzdGVyICptYXN0ZXIgPSB0b19hZGlfaTNjX21hc3RlcihtKTsKPiA+ID4gPiA+ ICsJc3RydWN0IGFkaV9pM2NfaTJjX2Rldl9kYXRhICpkYXRhOwo+ID4gPiA+ID4gKwlpbnQgc2xv dDsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJc2xvdCA9IGFkaV9pM2NfbWFzdGVyX2dldF9ycl9z bG90KG1hc3RlciwgMCk7Cj4gPiA+ID4gPiArCWlmIChzbG90IDwgMCkKPiA+ID4gPiA+ICsJCXJl dHVybiBzbG90Owo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlkYXRhID0ga3phbGxvYyhzaXplb2Yo KmRhdGEpLCBHRlBfS0VSTkVMKTsKPiA+ID4gPiA+ICsJaWYgKCFkYXRhKQo+ID4gPiA+ID4gKwkJ cmV0dXJuIC1FTk9NRU07Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWRhdGEtPmlkID0gc2xvdDsK PiA+ID4gPiA+ICsJbWFzdGVyLT5mcmVlX3JyX3Nsb3RzICY9IH5CSVQoc2xvdCk7Cj4gPiA+ID4g PiArCWkyY19kZXZfc2V0X21hc3Rlcl9kYXRhKGRldiwgZGF0YSk7Cj4gPiA+ID4gPiArCj4gPiA+ ID4gPiArCXdyaXRlbChSRUdfREVWX0NIQVJfQUREUihkZXYtPmFkZHIpIHwKPiA+ID4gPiA+ICsJ ICAgICAgIFJFR19ERVZfQ0hBUl9JU19JMkMgfCBSRUdfREVWX0NIQVJfSVNfQVRUQUNIRUQgfCBS RUdfREVWX0NIQVJfV0VOLAo+ID4gPiA+ID4gKwkgICAgICAgbWFzdGVyLT5yZWdzICsgUkVHX0RF Vl9DSEFSKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJcmV0dXJuIDA7Cj4gPiA+ID4gPiArfQo+ ID4gPiA+ID4gKwo+ID4gPiA+ID4gK3N0YXRpYyB2b2lkIGFkaV9pM2NfbWFzdGVyX2RldGFjaF9p MmNfZGV2KHN0cnVjdCBpMmNfZGV2X2Rlc2MgKmRldikKPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiAr CXN0cnVjdCBpM2NfbWFzdGVyX2NvbnRyb2xsZXIgKm0gPSBpMmNfZGV2X2dldF9tYXN0ZXIoZGV2 KTsKPiA+ID4gPiA+ICsJc3RydWN0IGFkaV9pM2NfbWFzdGVyICptYXN0ZXIgPSB0b19hZGlfaTNj X21hc3RlcihtKTsKPiA+ID4gPiA+ICsJc3RydWN0IGFkaV9pM2NfaTJjX2Rldl9kYXRhICpkYXRh ID0gaTJjX2Rldl9nZXRfbWFzdGVyX2RhdGEoZGV2KTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJ d3JpdGVsKFJFR19ERVZfQ0hBUl9BRERSKGRldi0+YWRkcikgfAo+ID4gPiA+ID4gKwkgICAgICAg UkVHX0RFVl9DSEFSX0lTX0kyQyB8IFJFR19ERVZfQ0hBUl9XRU4sCj4gPiA+ID4gPiArCSAgICAg ICBtYXN0ZXItPnJlZ3MgKyBSRUdfREVWX0NIQVIpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlp MmNfZGV2X3NldF9tYXN0ZXJfZGF0YShkZXYsIE5VTEwpOwo+ID4gPiA+ID4gKwltYXN0ZXItPmZy ZWVfcnJfc2xvdHMgfD0gQklUKGRhdGEtPmlkKTsKPiA+ID4gPiA+ICsJa2ZyZWUoZGF0YSk7Cj4g PiA+ID4gPiArfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK3N0YXRpYyB2b2lkIGFkaV9pM2NfbWFz dGVyX2J1c19jbGVhbnVwKHN0cnVjdCBpM2NfbWFzdGVyX2NvbnRyb2xsZXIgKm0pCj4gPiA+ID4g PiArewo+ID4gPiA+ID4gKwlzdHJ1Y3QgYWRpX2kzY19tYXN0ZXIgKm1hc3RlciA9IHRvX2FkaV9p M2NfbWFzdGVyKG0pOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlhZGlfaTNjX21hc3Rlcl9kaXNh YmxlKG1hc3Rlcik7Cj4gPiA+ID4gPiArfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK3N0YXRpYyB2 b2lkIGFkaV9pM2NfbWFzdGVyX3VwZF9pM2Nfc2NsX2xpbShzdHJ1Y3QgYWRpX2kzY19tYXN0ZXIg Km1hc3RlcikKPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiArCXN0cnVjdCBpM2NfbWFzdGVyX2NvbnRy b2xsZXIgKm0gPSAmbWFzdGVyLT5iYXNlOwo+ID4gPiA+ID4gKwlzdHJ1Y3QgaTNjX2J1cyAqYnVz ID0gaTNjX21hc3Rlcl9nZXRfYnVzKG0pOwo+ID4gPiA+ID4gKwl1OCBpM2Nfc2NsX2xpbSA9IDA7 Cj4gPiA+ID4gPiArCXN0cnVjdCBpM2NfZGV2X2Rlc2MgKmRldjsKPiA+ID4gPiA+ICsJdTggcHBf c2c7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWkzY19idXNfZm9yX2VhY2hfaTNjZGV2KGJ1cywg ZGV2KSB7Cj4gPiA+ID4gPiArCQl1OCBtYXhfZnNjbDsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJ CW1heF9mc2NsID0gbWF4KEkzQ19DQ0NfTUFYX1NEUl9GU0NMKGRldi0+aW5mby5tYXhfcmVhZF9k cyksCj4gPiA+ID4gPiArCQkJICAgICAgIEkzQ19DQ0NfTUFYX1NEUl9GU0NMKGRldi0+aW5mby5t YXhfd3JpdGVfZHMpKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJCXN3aXRjaCAobWF4X2ZzY2wp IHsKPiA+ID4gPiA+ICsJCWNhc2UgSTNDX1NEUjFfRlNDTF84TUhaOgo+ID4gPiA+ID4gKwkJCW1h eF9mc2NsID0gUFBfU0dfNk1IWjsKPiA+ID4gPiA+ICsJCQlicmVhazsKPiA+ID4gPiA+ICsJCWNh c2UgSTNDX1NEUjJfRlNDTF82TUhaOgo+ID4gPiA+ID4gKwkJCW1heF9mc2NsID0gUFBfU0dfM01I WjsKPiA+ID4gPiA+ICsJCQlicmVhazsKPiA+ID4gPiA+ICsJCWNhc2UgSTNDX1NEUjNfRlNDTF80 TUhaOgo+ID4gPiA+ID4gKwkJCW1heF9mc2NsID0gUFBfU0dfM01IWjsKPiA+ID4gPiA+ICsJCQli cmVhazsKPiA+ID4gPiA+ICsJCWNhc2UgSTNDX1NEUjRfRlNDTF8yTUhaOgo+ID4gPiA+ID4gKwkJ CW1heF9mc2NsID0gUFBfU0dfMU1IWjsKPiA+ID4gPiA+ICsJCQlicmVhazsKPiA+ID4gPiA+ICsJ CWNhc2UgSTNDX1NEUjBfRlNDTF9NQVg6Cj4gPiA+ID4gPiArCQlkZWZhdWx0Ogo+ID4gPiA+ID4g KwkJCW1heF9mc2NsID0gUFBfU0dfMTJNSFo7Cj4gPiA+ID4gPiArCQkJYnJlYWs7Cj4gPiA+ID4g PiArCQl9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCQlpZiAobWF4X2ZzY2wgJiYKPiA+ID4gPiA+ ICsJCSAgICAoaTNjX3NjbF9saW0gPiBtYXhfZnNjbCB8fCAhaTNjX3NjbF9saW0pKQo+ID4gPiA+ ID4gKwkJCWkzY19zY2xfbGltID0gbWF4X2ZzY2w7Cj4gPiA+ID4gPiArCX0KPiA+ID4gPiA+ICsK PiA+ID4gPiA+ICsJaWYgKCFpM2Nfc2NsX2xpbSkKPiA+ID4gPiA+ICsJCXJldHVybjsKPiA+ID4g PiA+ICsKPiA+ID4gPiA+ICsJbWFzdGVyLT5pM2Nfc2NsX2xpbSA9IGkzY19zY2xfbGltIC0gMTsK PiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJcHBfc2cgPSByZWFkbChtYXN0ZXItPnJlZ3MgKyBSRUdf T1BTKSAmIH5SRUdfT1BTX1BQX1NHX01BU0s7Cj4gPiA+ID4gPiArCXBwX3NnIHw9IFJFR19PUFNf U0VUX1NHKG1hc3Rlci0+aTNjX3NjbF9saW0pOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwl3cml0 ZWwocHBfc2csIG1hc3Rlci0+cmVncyArIFJFR19PUFMpOwo+ID4gPiA+ID4gK30KPiA+ID4gPiA+ ICsKPiA+ID4gPiA+ICtzdGF0aWMgdm9pZCBhZGlfaTNjX21hc3Rlcl9nZXRfZmVhdHVyZXMoc3Ry dWN0IGFkaV9pM2NfbWFzdGVyICptYXN0ZXIsCj4gPiA+ID4gPiArCQkJCQl1bnNpZ25lZCBpbnQg c2xvdCwKPiA+ID4gPiA+ICsJCQkJCXN0cnVjdCBpM2NfZGV2aWNlX2luZm8gKmluZm8pCj4gPiA+ ID4gPiArewo+ID4gPiA+ID4gKwltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7Cj4gPiA+ ID4gPiArCj4gPiA+ID4gPiArCWluZm8tPmR5bl9hZGRyID0gMHgzMTsKPiA+ID4gPgo+ID4gPiA+ IG1hc3RlciBhZGRyZXNzIGlzIGhhcmRjb2RlPwo+ID4gPiA+Cj4gPiA+IFllcy4KPiA+ID4gVGhl cmUgaXMvd2FzIG5vIHJlZ2lzdGVyIHRvIHJlYWQgaXQgZnJvbSBiZWNhdXNlIHRoZSBjb250cm9s bGVyIGRvZXMgbm90Cj4gPiA+IHN1cHBvcnQgc2Vjb25kYXJ5IG1hc3RlcnNoaXAgb3IgY2hhbmdp bmcgcm9sZSwgc28gdGhpcyBhZGRyZXNzIGlzIG5vdAo+ID4gPiB1c2VkIGZvciBhbnl0aGluZyAo YXMgaXMpLiBTaW5jZSBpdCBpcyBvZGQsIEkgd2lsbCBtb3ZlIGFkZCB0aGVzZQo+ID4gPiBoYXJk Y29kZWQgdmFsdWVzIHRvIHRoZSByZWdpc3RlciBtYXAgKHJlYWQtb25seSksIHN0aWxsIHdvbid0 IGRvCj4gPiA+IGFueXRoaW5nLgo+ID4KPiA+IG5lZWQgY29tbWVudHMgZm9yIDB4MzEKPiA+Cj4g QWNrLCB3aWxsIGxpa2VseSBiZWNvbWUgYSByZWdpc3RlciByZWFkIGJ1dCB3aWxsIGFsc28gYWRk IGEgY29tbWVudC4KPiA+ID4gPiA+ICsJaW5mby0+ZGNyID0gMHgwMDsKPiA+ID4gPiA+ICsJaW5m by0+YmNyID0gMHg0MDsKPiA+ID4gPiA+ICsJaW5mby0+cGlkID0gMDsKPiA+ID4gPiA+ICt9Cj4g PiA+ID4gPiArCj4gPiA+ID4gPiArc3RhdGljIGludCBhZGlfaTNjX21hc3Rlcl9kb19kYWEoc3Ry dWN0IGkzY19tYXN0ZXJfY29udHJvbGxlciAqbSkKPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiArCXN0 cnVjdCBhZGlfaTNjX21hc3RlciAqbWFzdGVyID0gdG9fYWRpX2kzY19tYXN0ZXIobSk7Cj4gPiA+ ID4gPiArCXUzMiBpcnFfbWFzazsKPiA+ID4gPiA+ICsJaW50IHJldCwgYWRkcjsKPiA+ID4gPiA+ ICsKPiA+ID4gPiA+ICsJYWRkciA9IDB4ODsKPiA+ID4gPiA+ICsJZm9yICh1OCBpID0gMDsgaSA8 IE1BWF9ERVZTOyBpKyspIHsKPiA+ID4gPiA+ICsJCWFkZHIgPSBpM2NfbWFzdGVyX2dldF9mcmVl X2FkZHIobSwgYWRkcik7Cj4gPiA+ID4gPiArCQlpZiAoYWRkciA8IDApCj4gPiA+ID4gPiArCQkJ cmV0dXJuIGFkZHI7Cj4gPiA+ID4KPiA+ID4gPiBhc3N1bWUgTUFYX0RFVlMgMTI4LCBpZiBvbmx5 IGdldCA0IGFkZHJlc3MsIHN1cHBvc2UgeW91IHNob3VsZCBlbnVtZXJhdGUKPiA+ID4gPiBmb3Ig c3VjaCA0IGRldmljZXMsIGluc3RlYWQgb2YgcmV0dXJuIGVycm9yIGFuZCBnaXZlIHVwIGRvX2Rh YS4KPiA+ID4gPgo+ID4gPiBUaGUgSVAgQ29yZSBzdXBwb3J0cyBqdXN0IDE2IGRldmljZXMgKG1h eCAjIG9uIHRoZSBidXMpLCBzbyBpdCBzaG91bGQKPiA+ID4gbm90IHJ1bi1vdXQgb2YgYWRkcmVz c2VzLCBidXQgSSB1bmRlcnN0YW5kIHRoZSBhc3NpZ25tZW50LiBBcyBpcywgdGhlIElQCj4gPiA+ IGNvcmUgaGFzIDE2IHNsb3RzIGFuZCB3aWxsIG9ubHkgdGVybWluYXRlIHRoZSBEQUEgZnJvbSBp dHMgc2lkZSBpZiBpdAo+ID4gPiBydW4gb3V0IG9mIHNsb3RzIChpZiBubyBkZXZpY2UgcmVxdWVz dCBhbiBhZGRyZXNzIChOQUNLIGJpdCksIHRoZSBEQUEgaXMKPiA+ID4gYWxzbyB0ZXJtaW5hdGVk KS4gTm90IHdyaXRpbmcgYSBEQSBkdXJpbmcgdGhlIERBIElSUSB3aWxsIGp1c3QgaGFuZyB0aGUK PiA+ID4gYnVzLgo+ID4gPgo+ID4gPiBGb3IgdGhlIHN1Z2dlc3Rpb24gdG8gd29yayBJIG5lZWQg dG8gcmUtcmVhZCB0aGUgc3BlYyBhbmQgcmV3b3JrIHRoZSBSVEwKPiA+ID4gdG8gYWxsb3cgdGhp cyBlYXJseSB0ZXJtaW5hdGlvbi4gSG93ZXZlciwgSSBhbSBjdXJyZW50bHkgYSBsaXR0bGUKPiA+ ID4gb3Bwb3NlZCBvZiBjaGFuZ2luZyB0aGUgUlRMIGJleW9uZCBiYXNpYyByZWFkLW9ubHkgcmVn aXN0ZXJzCj4gPiA+IG1vZGlmaWNhdGlvbnMuCj4gPiA+ID4gPiArCQltYXN0ZXItPmRhYS5hZGRy c1tpXSA9IGFkZHI7Cj4gPiA+ID4gPiArCX0KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJaXJxX21h c2sgPSByZWFkbChtYXN0ZXItPnJlZ3MgKyBSRUdfSVJRX01BU0spOwo+ID4gPiA+ID4gKwl3cml0 ZWwoaXJxX21hc2sgfCBSRUdfSVJRX1BFTkRJTkdfREFBLAo+ID4gPiA+ID4gKwkgICAgICAgbWFz dGVyLT5yZWdzICsgUkVHX0lSUV9NQVNLKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJbWFzdGVy LT5kYWEuaW5kZXggPSAwOwo+ID4gPiA+ID4gKwlyZXQgPSBpM2NfbWFzdGVyX2VudGRhYV9sb2Nr ZWQoJm1hc3Rlci0+YmFzZSk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCXdyaXRlbChpcnFfbWFz aywgbWFzdGVyLT5yZWdzICsgUkVHX0lSUV9NQVNLKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJ LyogREFBIGFsd2F5cyBmaW5pc2hlcyB3aXRoIENFMl9FUlJPUiBvciBOQUNLX1JFU1AgKi8KPiA+ ID4gPiA+ICsJaWYgKHJldCAmJiByZXQgIT0gSTNDX0VSUk9SX00yKQo+ID4gPiA+ID4gKwkJcmV0 dXJuIHJldDsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJLyogQWRkIEkzQyBkZXZpY2VzIGRpc2Nv dmVyZWQgKi8KPiA+ID4gPiA+ICsJZm9yICh1OCBpID0gMDsgaSA8IG1hc3Rlci0+ZGFhLmluZGV4 OyBpKyspCj4gPiA+ID4gPiArCQlpM2NfbWFzdGVyX2FkZF9pM2NfZGV2X2xvY2tlZChtLCBtYXN0 ZXItPmRhYS5hZGRyc1tpXSk7Cj4gPiA+ID4gPiArCS8qIFN5bmMgcmV0cmlldmVkIGRldnMgaW5m byB3aXRoIHRoZSBJUCAqLwo+ID4gPiA+ID4gKwlhZGlfaTNjX21hc3Rlcl9zeW5jX2Rldl9jaGFy KG0pOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlpM2NfbWFzdGVyX2RlZnNsdnNfbG9ja2VkKCZt YXN0ZXItPmJhc2UpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlhZGlfaTNjX21hc3Rlcl91cGRf aTNjX3NjbF9saW0obWFzdGVyKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJcmV0dXJuIDA7Cj4g PiA+ID4gPiArfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK3N0YXRpYyBpbnQgYWRpX2kzY19tYXN0 ZXJfYnVzX2luaXQoc3RydWN0IGkzY19tYXN0ZXJfY29udHJvbGxlciAqbSkKPiA+ID4gPiA+ICt7 Cj4gPiA+ID4gPiArCXN0cnVjdCBhZGlfaTNjX21hc3RlciAqbWFzdGVyID0gdG9fYWRpX2kzY19t YXN0ZXIobSk7Cj4gPiA+ID4gPiArCXN0cnVjdCBpM2NfZGV2aWNlX2luZm8gaW5mbyA9IHsgfTsK PiA+ID4gPiA+ICsJaW50IHJldDsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJcmV0ID0gaTNjX21h c3Rlcl9nZXRfZnJlZV9hZGRyKG0sIDApOwo+ID4gPiA+ID4gKwlpZiAocmV0IDwgMCkKPiA+ID4g PiA+ICsJCXJldHVybiByZXQ7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWFkaV9pM2NfbWFzdGVy X2dldF9mZWF0dXJlcyhtYXN0ZXIsIDAsICZpbmZvKTsKPiA+ID4gPiA+ICsJcmV0ID0gaTNjX21h c3Rlcl9zZXRfaW5mbygmbWFzdGVyLT5iYXNlLCAmaW5mbyk7Cj4gPiA+ID4gPiArCWlmIChyZXQp Cj4gPiA+ID4gPiArCQlyZXR1cm4gcmV0Owo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwl3cml0ZWwo UkVHX0lCSV9DT05GSUdfTElTVEVOLAo+ID4gPiA+ID4gKwkgICAgICAgbWFzdGVyLT5yZWdzICsg UkVHX0lCSV9DT05GSUcpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlyZXR1cm4gMDsKPiA+ID4g PiA+ICt9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArc3RhdGljIHZvaWQgYWRpX2kzY19tYXN0ZXJf aGFuZGxlX2liaShzdHJ1Y3QgYWRpX2kzY19tYXN0ZXIgKm1hc3RlciwKPiA+ID4gPiA+ICsJCQkJ ICAgICAgdTMyIGliaSkKPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiArCXN0cnVjdCBhZGlfaTNjX2ky Y19kZXZfZGF0YSAqZGF0YTsKPiA+ID4gPiA+ICsJc3RydWN0IGkzY19pYmlfc2xvdCAqc2xvdDsK PiA+ID4gPiA+ICsJc3RydWN0IGkzY19kZXZfZGVzYyAqZGV2Owo+ID4gPiA+ID4gKwl1OCBkYSwg aWQ7Cj4gPiA+ID4gPiArCXU4ICptZGI7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWRhID0gKGli aSA+PiAxNykgJiBHRU5NQVNLKDYsIDApOwo+ID4gPiA+ID4gKwlmb3IgKGlkID0gMDsgaWQgPCBt YXN0ZXItPmliaS5udW1fc2xvdHM7IGlkKyspIHsKPiA+ID4gPiA+ICsJCWlmIChtYXN0ZXItPmli aS5zbG90c1tpZF0gJiYKPiA+ID4gPiA+ICsJCSAgICBtYXN0ZXItPmliaS5zbG90c1tpZF0tPmlu Zm8uZHluX2FkZHIgPT0gZGEpCj4gPiA+ID4gPiArCQkJYnJlYWs7Cj4gPiA+ID4gPiArCX0KPiA+ ID4gPiA+ICsKPiA+ID4gPiA+ICsJaWYgKGlkID09IG1hc3Rlci0+aWJpLm51bV9zbG90cykKPiA+ ID4gPiA+ICsJCXJldHVybjsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJZGV2ID0gbWFzdGVyLT5p Ymkuc2xvdHNbaWRdOwo+ID4gPiA+ID4gKwlndWFyZChzcGlubG9jaykoJm1hc3Rlci0+aWJpLmxv Y2spOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlkYXRhID0gaTNjX2Rldl9nZXRfbWFzdGVyX2Rh dGEoZGV2KTsKPiA+ID4gPiA+ICsJc2xvdCA9IGkzY19nZW5lcmljX2liaV9nZXRfZnJlZV9zbG90 KGRhdGEtPmliaV9wb29sKTsKPiA+ID4gPiA+ICsJaWYgKCFzbG90KQo+ID4gPiA+ID4gKwkJcmV0 dXJuOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwltZGIgPSBzbG90LT5kYXRhOwo+ID4gPiA+ID4g KwltZGJbMF0gPSAoaWJpID4+IDgpICYgR0VOTUFTSyg3LCAwKTsKPiA+ID4gPiA+ICsKPiA+ID4g PiA+ICsJc2xvdC0+bGVuID0gMTsKPiA+ID4gPiA+ICsJaTNjX21hc3Rlcl9xdWV1ZV9pYmkoZGV2 LCBzbG90KTsKPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArc3RhdGljIHZvaWQg YWRpX2kzY19tYXN0ZXJfZGVtdXhfaWJpcyhzdHJ1Y3QgYWRpX2kzY19tYXN0ZXIgKm1hc3RlcikK PiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiArCXUzMiBzdGF0dXMwOwo+ID4gPiA+ID4gKwo+ID4gPiA+ ID4gKwlmb3IgKHN0YXR1czAgPSByZWFkbChtYXN0ZXItPnJlZ3MgKyBSRUdfRklGT19TVEFUVVMp Owo+ID4gPiA+ID4gKwkgICAgICEoc3RhdHVzMCAmIFJFR19GSUZPX1NUQVRVU19JQklfRU1QVFkp Owo+ID4gPiA+ID4gKwkgICAgIHN0YXR1czAgPSByZWFkbChtYXN0ZXItPnJlZ3MgKyBSRUdfRklG T19TVEFUVVMpKSB7Cj4gPiA+ID4KPiA+ID4gPiB1c2Ugd2hpbGUoKQo+ID4gPiA+Cj4gPiA+IEFj ay4KPiA+ID4gPiA+ICsJCXUzMiBpYmkgPSByZWFkbChtYXN0ZXItPnJlZ3MgKyBSRUdfSUJJX0ZJ Rk8pOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwkJYWRpX2kzY19tYXN0ZXJfaGFuZGxlX2liaSht YXN0ZXIsIGliaSk7Cj4gPiA+ID4gPiArCX0KPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiArCj4gPiA+ ID4gPiArc3RhdGljIHZvaWQgYWRpX2kzY19tYXN0ZXJfaGFuZGxlX2RhX3JlcShzdHJ1Y3QgYWRp X2kzY19tYXN0ZXIgKm1hc3RlcikKPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiArCXU4IHBheWxvYWQw WzhdOwo+ID4gPiA+ID4gKwl1MzIgYWRkcjsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJLyogQ2xl YXIgZGV2aWNlIGNoYXJhY3RlcmlzdGljcyAqLwo+ID4gPiA+ID4gKwlhZGlfaTNjX21hc3Rlcl9y ZF9mcm9tX3J4X2ZpZm8obWFzdGVyLCBwYXlsb2FkMCwgNik7Cj4gPiA+ID4gPiArCWFkZHIgPSBt YXN0ZXItPmRhYS5hZGRyc1ttYXN0ZXItPmRhYS5pbmRleCsrXTsKPiA+ID4gPiA+ICsJYWRkciA9 IChhZGRyIDw8IDEpIHwgKHBhcml0eTgoYWRkcikgPyAwIDogMSk7Cj4gPiA+ID4gPiArCj4gPiA+ ID4gPiArCXdyaXRlbChhZGRyLCBtYXN0ZXItPnJlZ3MgKyBSRUdfU0RPX0ZJRk8pOwo+ID4gPiA+ ID4gK30KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICtzdGF0aWMgaXJxcmV0dXJuX3QgYWRpX2kzY19t YXN0ZXJfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCj4gPiA+ID4gPiArewo+ID4gPiA+ID4gKwlz dHJ1Y3QgYWRpX2kzY19tYXN0ZXIgKm1hc3RlciA9IGRhdGE7Cj4gPiA+ID4gPiArCXUzMiBwZW5k aW5nOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlwZW5kaW5nID0gcmVhZGwobWFzdGVyLT5yZWdz ICsgUkVHX0lSUV9QRU5ESU5HKTsKPiA+ID4gPiA+ICsJd3JpdGVsKHBlbmRpbmcsIG1hc3Rlci0+ cmVncyArIFJFR19JUlFfUEVORElORyk7Cj4gPiA+ID4KPiA+ID4gPiBBZGQgYW4gZW1wdHkgbGlu ZSBoZXJlCj4gPiA+ID4KPiA+ID4gQWNrLgo+ID4gPiA+ID4gKwlpZiAocGVuZGluZyAmIFJFR19J UlFfUEVORElOR19DTURSKSB7Cj4gPiA+ID4gPiArCQlzcGluX2xvY2soJm1hc3Rlci0+eGZlcnF1 ZXVlLmxvY2spOwo+ID4gPiA+ID4gKwkJYWRpX2kzY19tYXN0ZXJfZW5kX3hmZXJfbG9ja2VkKG1h c3RlciwgcGVuZGluZyk7Cj4gPiA+ID4gPiArCQlzcGluX3VubG9jaygmbWFzdGVyLT54ZmVycXVl dWUubG9jayk7Cj4gPiA+ID4KPiA+ID4gPiB5b3UgdXNlIGd1YXJkLCBrZWVwIGNvbnNpc2VudCwg dXNlIGd1YXJkIG9yIHNjb3BlZF9ndWFyZCBoZXJlCj4gPiA+ID4KPiA+ID4gc2NvcGVkX2d1YXJk Cj4gPiA+ID4gPiArCX0KPiA+ID4gPiA+ICsJaWYgKHBlbmRpbmcgJiBSRUdfSVJRX1BFTkRJTkdf SUJJKQo+ID4gPiA+ID4gKwkJYWRpX2kzY19tYXN0ZXJfZGVtdXhfaWJpcyhtYXN0ZXIpOwo+ID4g PiA+ID4gKwlpZiAocGVuZGluZyAmIFJFR19JUlFfUEVORElOR19EQUEpCj4gPiA+ID4gPiArCQlh ZGlfaTNjX21hc3Rlcl9oYW5kbGVfZGFfcmVxKG1hc3Rlcik7Cj4gPiA+ID4gPiArCj4gPiA+ID4g PiArCXJldHVybiBJUlFfSEFORExFRDsKPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiArCj4gPiA+ID4g PiArc3RhdGljIGludCBhZGlfaTNjX21hc3Rlcl9pMmNfeGZlcnMoc3RydWN0IGkyY19kZXZfZGVz YyAqZGV2LAo+ID4gPiA+ID4gKwkJCQkgICAgc3RydWN0IGkyY19tc2cgKnhmZXJzLAo+ID4gPiA+ ID4gKwkJCQkgICAgaW50IG54ZmVycykKPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiArCXN0cnVjdCBp M2NfbWFzdGVyX2NvbnRyb2xsZXIgKm0gPSBpMmNfZGV2X2dldF9tYXN0ZXIoZGV2KTsKPiA+ID4g PiA+ICsJc3RydWN0IGFkaV9pM2NfbWFzdGVyICptYXN0ZXIgPSB0b19hZGlfaTNjX21hc3Rlciht KTsKPiA+ID4gPiA+ICsJc3RydWN0IGFkaV9pM2NfeGZlciAqeGZlcjsKPiA+ID4gPiA+ICsJaW50 IGksIHJldDsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJaWYgKCFueGZlcnMpCj4gPiA+ID4gPiAr CQlyZXR1cm4gMDsKPiA+ID4gPiA+ICsJZm9yIChpID0gMDsgaSA8IG54ZmVyczsgaSsrKSB7Cj4g PiA+ID4gPiArCQlpZiAoeGZlcnNbaV0uZmxhZ3MgJiBJMkNfTV9URU4pCj4gPiA+ID4gPiArCQkJ cmV0dXJuIC1FT1BOT1RTVVBQOwo+ID4gPiA+ID4gKwl9Cj4gPiA+ID4gPiArCXhmZXIgPSBhZGlf aTNjX21hc3Rlcl9hbGxvY194ZmVyKG1hc3RlciwgbnhmZXJzKTsKPiA+ID4gPiA+ICsJaWYgKCF4 ZmVyKQo+ID4gPiA+ID4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiAr CWZvciAoaSA9IDA7IGkgPCBueGZlcnM7IGkrKykgewo+ID4gPiA+ID4gKwkJc3RydWN0IGFkaV9p M2NfY21kICpjY21kID0gJnhmZXItPmNtZHNbaV07Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCQlj Y21kLT5jbWQwID0gUkVHX0NNRF9GSUZPXzBfREVWX0FERFIoeGZlcnNbaV0uYWRkcik7Cj4gPiA+ ID4gPiArCj4gPiA+ID4gPiArCQlpZiAoeGZlcnNbaV0uZmxhZ3MgJiBJMkNfTV9SRCkgewo+ID4g PiA+ID4gKwkJCWNjbWQtPmNtZDAgfD0gUkVHX0NNRF9GSUZPXzBfUk5XOwo+ID4gPiA+ID4gKwkJ CWNjbWQtPnJ4X2J1ZiA9IHhmZXJzW2ldLmJ1ZjsKPiA+ID4gPiA+ICsJCQljY21kLT5yeF9sZW4g PSB4ZmVyc1tpXS5sZW47Cj4gPiA+ID4gPiArCQl9IGVsc2Ugewo+ID4gPiA+ID4gKwkJCWNjbWQt PnR4X2J1ZiA9IHhmZXJzW2ldLmJ1ZjsKPiA+ID4gPiA+ICsJCQljY21kLT50eF9sZW4gPSB4ZmVy c1tpXS5sZW47Cj4gPiA+ID4gPiArCQl9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCQljY21kLT5j bWQwIHw9IFJFR19DTURfRklGT18wX0xFTih4ZmVyc1tpXS5sZW4pOwo+ID4gPiA+Cj4gPiA+ID4g SnVzdCBjdXJpb3VzZQo+ID4gPiA+IFdoYXQncyBoYXBwZW4gaWYgSUJJIGhhcHBlbiAoYWRkcmVz cyBhcmJpdHJhdGUpIGF0IGZpcnN0IGNvbW1hbmQ/Cj4gPiA+ID4KPiA+ID4gVGhlIGNvbnRyb2xs ZXIgZG9lcyB0aGUgc3RhdGUgbWFjaGluZSBmb3IgdGhlIElCSSBhbmQgeWllbGQgYSBJQklSCj4g PiA+IGludGVycnVwdCwgdGhlbiBwcm9jZWVkcyB3aXRoIHRoZSB4ZmVyLCB5aWVsZGluZyB0aGUg Q01EUiBmb3IgZWFjaCBDTUQuCj4gPgo+ID4gRG9lcyBjb250cm9sbGVyIHJldHJ5IGN1cnJlbnQg Y29tbWFuZCBhZ2FpbiBhZnRlciBoYW5kbGUgSUJJPwo+ID4KPiA+IEZyYW5rIExpCj4gPgo+IFll cywgaXQgcmVzdW1lcy9yZXRyaWVzIHRoZSBjdXJyZW50IGNvbW1hbmQuIEFmdGVyIHRoZSBJQkkg aGFzIGJlZW4KPiByZXNvbHZlZCwgdGhlIGNvbnRyb2xsZXIgaXNzdWVzIGVpdGhlciBhIHN0b3As IHRvIHJldHVybiB0byB0aGUgQnVzCj4gRnJlZS9JZGxlIGNvbmRpdGlvbiBpZiB0aGUgY29tbWFu ZCBzdGFjayBpcyBlbXB0eSwgb3IgcmVwZWF0ZWQgc3RhcnQsCj4gdG8gcHJvY2VlZCB3aXRoIGN1 cnJlbnQgY29tbWFuZC4KPgo+IExvb2tpbmcgaW50byB0aGUgc3BlYyBpM2MgYmFzaWMgMS4xLjEs IGZpZyAxNjksIHRoaXMgY29udHJvbGxlciBuZXZlcgo+IERpc2FibGUgVGFyZ2V0IEludGVycnVw dHMgYWZ0ZXIgYSBOQUNLIGZvbGxvd2VkIGJ5IGEgcmVwZWF0ZWQgc3RhcnQuIFRoZQo+IGRyaXZl ciB3b3VsZCBpc3N1ZSBhIGNvbW1hbmQgdG8gZG8gc28gaW4gb3RoZXIgb3Bwb3J0dW5pdHkuCgpU aGFua3MsIHRoYXQncyBnb29kLgoKPgo+IEJlc3QgcmVnYXJkcywKPiBKb3JnZQo+ID4gPiA+ID4g Kwl9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWFkaV9pM2NfbWFzdGVyX3F1ZXVlX3hmZXIobWFz dGVyLCB4ZmVyKTsKPiA+ID4gPiA+ICsJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQo JnhmZXItPmNvbXAsCj4gPiA+ID4gPiArCQkJCQkgbS0+aTJjLnRpbWVvdXQpKQo+ID4gPiA+ID4g KwkJYWRpX2kzY19tYXN0ZXJfdW5xdWV1ZV94ZmVyKG1hc3RlciwgeGZlcik7Cj4gPiA+ID4gPiAr Cj4gPiA+ID4gPiArCXJldCA9IHhmZXItPnJldDsKPiA+ID4gPiA+ICsJa2ZyZWUoeGZlcik7Cj4g PiA+ID4gPiArCXJldHVybiByZXQ7Cj4gPiA+ID4gPiArfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4g K3N0YXRpYyBpbnQgYWRpX2kzY19tYXN0ZXJfZGlzYWJsZV9pYmkoc3RydWN0IGkzY19kZXZfZGVz YyAqZGV2KQo+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ICsJc3RydWN0IGkzY19tYXN0ZXJfY29udHJv bGxlciAqbSA9IGkzY19kZXZfZ2V0X21hc3RlcihkZXYpOwo+ID4gPiA+ID4gKwlzdHJ1Y3QgYWRp X2kzY19tYXN0ZXIgKm1hc3RlciA9IHRvX2FkaV9pM2NfbWFzdGVyKG0pOwo+ID4gPiA+ID4gKwlz dHJ1Y3QgaTNjX2Rldl9kZXNjICppM2NkZXY7Cj4gPiA+ID4gPiArCXUzMiBlbmFibGVkID0gMDsK PiA+ID4gPiA+ICsJaW50IHJldDsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJcmV0ID0gaTNjX21h c3Rlcl9kaXNlY19sb2NrZWQobSwgZGV2LT5pbmZvLmR5bl9hZGRyLAo+ID4gPiA+ID4gKwkJCQkg ICAgICBJM0NfQ0NDX0VWRU5UX1NJUik7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWkzY19idXNf Zm9yX2VhY2hfaTNjZGV2KCZtLT5idXMsIGkzY2Rldikgewo+ID4gPiA+ID4gKwkJaWYgKGRldiAh PSBpM2NkZXYgJiYgaTNjZGV2LT5pYmkpCj4gPiA+ID4gPiArCQkJZW5hYmxlZCB8PSBpM2NkZXYt PmliaS0+ZW5hYmxlZDsKPiA+ID4gPiA+ICsJfQo+ID4gPiA+ID4gKwlpZiAoIWVuYWJsZWQpIHsK PiA+ID4gPiA+ICsJCXdyaXRlbChSRUdfSUJJX0NPTkZJR19MSVNURU4sCj4gPiA+ID4gPiArCQkg ICAgICAgbWFzdGVyLT5yZWdzICsgUkVHX0lCSV9DT05GSUcpOwo+ID4gPiA+ID4gKwkJd3JpdGVs KHJlYWRsKG1hc3Rlci0+cmVncyArIFJFR19JUlFfTUFTSykgJiB+UkVHX0lSUV9QRU5ESU5HX0lC SSwKPiA+ID4gPiA+ICsJCSAgICAgICBtYXN0ZXItPnJlZ3MgKyBSRUdfSVJRX01BU0spOwo+ID4g PiA+ID4gKwl9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCXJldHVybiByZXQ7Cj4gPiA+ID4gPiAr fQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK3N0YXRpYyBpbnQgYWRpX2kzY19tYXN0ZXJfZW5hYmxl X2liaShzdHJ1Y3QgaTNjX2Rldl9kZXNjICpkZXYpCj4gPiA+ID4gPiArewo+ID4gPiA+ID4gKwlz dHJ1Y3QgaTNjX21hc3Rlcl9jb250cm9sbGVyICptID0gaTNjX2Rldl9nZXRfbWFzdGVyKGRldik7 Cj4gPiA+ID4gPiArCXN0cnVjdCBhZGlfaTNjX21hc3RlciAqbWFzdGVyID0gdG9fYWRpX2kzY19t YXN0ZXIobSk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCXdyaXRlbChSRUdfSUJJX0NPTkZJR19M SVNURU4gfCBSRUdfSUJJX0NPTkZJR19FTkFCTEUsCj4gPiA+ID4gPiArCSAgICAgICBtYXN0ZXIt PnJlZ3MgKyBSRUdfSUJJX0NPTkZJRyk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCXdyaXRlbChy ZWFkbChtYXN0ZXItPnJlZ3MgKyBSRUdfSVJRX01BU0spIHwgUkVHX0lSUV9QRU5ESU5HX0lCSSwK PiA+ID4gPiA+ICsJICAgICAgIG1hc3Rlci0+cmVncyArIFJFR19JUlFfTUFTSyk7Cj4gPiA+ID4g PiArCj4gPiA+ID4gPiArCXJldHVybiBpM2NfbWFzdGVyX2VuZWNfbG9ja2VkKG0sIGRldi0+aW5m by5keW5fYWRkciwKPiA+ID4gPiA+ICsJCQkJICAgICAgSTNDX0NDQ19FVkVOVF9TSVIpOwo+ID4g PiA+ID4gK30KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICtzdGF0aWMgaW50IGFkaV9pM2NfbWFzdGVy X3JlcXVlc3RfaWJpKHN0cnVjdCBpM2NfZGV2X2Rlc2MgKmRldiwKPiA+ID4gPiA+ICsJCQkJICAg ICAgY29uc3Qgc3RydWN0IGkzY19pYmlfc2V0dXAgKnJlcSkKPiA+ID4gPiA+ICt7Cj4gPiA+ID4g PiArCXN0cnVjdCBpM2NfbWFzdGVyX2NvbnRyb2xsZXIgKm0gPSBpM2NfZGV2X2dldF9tYXN0ZXIo ZGV2KTsKPiA+ID4gPiA+ICsJc3RydWN0IGFkaV9pM2NfbWFzdGVyICptYXN0ZXIgPSB0b19hZGlf aTNjX21hc3RlcihtKTsKPiA+ID4gPiA+ICsJc3RydWN0IGFkaV9pM2NfaTJjX2Rldl9kYXRhICpk YXRhOwo+ID4gPiA+ID4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ID4gPiA+ID4gKwl1bnNpZ25l ZCBpbnQgaTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJZGF0YSA9IGkzY19kZXZfZ2V0X21hc3Rl cl9kYXRhKGRldik7Cj4gPiA+ID4gPiArCWRhdGEtPmliaV9wb29sID0gaTNjX2dlbmVyaWNfaWJp X2FsbG9jX3Bvb2woZGV2LCByZXEpOwo+ID4gPiA+ID4gKwlpZiAoSVNfRVJSKGRhdGEtPmliaV9w b29sKSkKPiA+ID4gPiA+ICsJCXJldHVybiBQVFJfRVJSKGRhdGEtPmliaV9wb29sKTsKPiA+ID4g PiA+ICsKPiA+ID4gPiA+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJm1hc3Rlci0+aWJpLmxvY2ssIGZs YWdzKTsKPiA+ID4gPiA+ICsJZm9yIChpID0gMDsgaSA8IG1hc3Rlci0+aWJpLm51bV9zbG90czsg aSsrKSB7Cj4gPiA+ID4gPiArCQlpZiAoIW1hc3Rlci0+aWJpLnNsb3RzW2ldKSB7Cj4gPiA+ID4g PiArCQkJZGF0YS0+aWJpID0gaTsKPiA+ID4gPiA+ICsJCQltYXN0ZXItPmliaS5zbG90c1tpXSA9 IGRldjsKPiA+ID4gPiA+ICsJCQlicmVhazsKPiA+ID4gPiA+ICsJCX0KPiA+ID4gPiA+ICsJfQo+ ID4gPiA+ID4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYXN0ZXItPmliaS5sb2NrLCBmbGFn cyk7Cj4gPiA+ID4KPiA+ID4gPiBzYW1lIGhlcmUsIHVzZSBzY29wZV9ndWFyZCB0byBrZWVwIGNv bnNpc3RlbnQuCj4gPiA+ID4KPiA+ID4gQWNrLgo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlpZiAo aSA8IG1hc3Rlci0+aWJpLm51bV9zbG90cykKPiA+ID4gPiA+ICsJCXJldHVybiAwOwo+ID4gPiA+ ID4gKwo+ID4gPiA+ID4gKwlpM2NfZ2VuZXJpY19pYmlfZnJlZV9wb29sKGRhdGEtPmliaV9wb29s KTsKPiA+ID4gPiA+ICsJZGF0YS0+aWJpX3Bvb2wgPSBOVUxMOwo+ID4gPiA+ID4gKwo+ID4gPiA+ ID4gKwlyZXR1cm4gLUVOT1NQQzsKPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiAr c3RhdGljIHZvaWQgYWRpX2kzY19tYXN0ZXJfZnJlZV9pYmkoc3RydWN0IGkzY19kZXZfZGVzYyAq ZGV2KQo+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ICsJc3RydWN0IGkzY19tYXN0ZXJfY29udHJvbGxl ciAqbSA9IGkzY19kZXZfZ2V0X21hc3RlcihkZXYpOwo+ID4gPiA+ID4gKwlzdHJ1Y3QgYWRpX2kz Y19tYXN0ZXIgKm1hc3RlciA9IHRvX2FkaV9pM2NfbWFzdGVyKG0pOwo+ID4gPiA+ID4gKwlzdHJ1 Y3QgYWRpX2kzY19pMmNfZGV2X2RhdGEgKmRhdGEgPSBpM2NfZGV2X2dldF9tYXN0ZXJfZGF0YShk ZXYpOwo+ID4gPiA+ID4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ID4gPiA+ID4gKwo+ID4gPiA+ ID4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWFzdGVyLT5pYmkubG9jaywgZmxhZ3MpOwo+ID4gPiA+ ID4gKwltYXN0ZXItPmliaS5zbG90c1tkYXRhLT5pYmldID0gTlVMTDsKPiA+ID4gPiA+ICsJZGF0 YS0+aWJpID0gLTE7Cj4gPiA+ID4gPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hc3Rlci0+ aWJpLmxvY2ssIGZsYWdzKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJaTNjX2dlbmVyaWNfaWJp X2ZyZWVfcG9vbChkYXRhLT5pYmlfcG9vbCk7Cj4gPiA+ID4gPiArfQo+ID4gPiA+ID4gKwo+ID4g PiA+ID4gK3N0YXRpYyB2b2lkIGFkaV9pM2NfbWFzdGVyX3JlY3ljbGVfaWJpX3Nsb3Qoc3RydWN0 IGkzY19kZXZfZGVzYyAqZGV2LAo+ID4gPiA+ID4gKwkJCQkJICAgIHN0cnVjdCBpM2NfaWJpX3Ns b3QgKnNsb3QpCj4gPiA+ID4gPiArewo+ID4gPiA+ID4gKwlzdHJ1Y3QgYWRpX2kzY19pMmNfZGV2 X2RhdGEgKmRhdGEgPSBpM2NfZGV2X2dldF9tYXN0ZXJfZGF0YShkZXYpOwo+ID4gPiA+ID4gKwo+ ID4gPiA+ID4gKwlpM2NfZ2VuZXJpY19pYmlfcmVjeWNsZV9zbG90KGRhdGEtPmliaV9wb29sLCBz bG90KTsKPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBpM2NfbWFzdGVyX2NvbnRyb2xsZXJfb3BzIGFkaV9pM2NfbWFzdGVyX29wcyA9IHsKPiA+ ID4gPiA+ICsJLmJ1c19pbml0ID0gYWRpX2kzY19tYXN0ZXJfYnVzX2luaXQsCj4gPiA+ID4gPiAr CS5idXNfY2xlYW51cCA9IGFkaV9pM2NfbWFzdGVyX2J1c19jbGVhbnVwLAo+ID4gPiA+ID4gKwku YXR0YWNoX2kzY19kZXYgPSBhZGlfaTNjX21hc3Rlcl9hdHRhY2hfaTNjX2RldiwKPiA+ID4gPiA+ ICsJLnJlYXR0YWNoX2kzY19kZXYgPSBhZGlfaTNjX21hc3Rlcl9yZWF0dGFjaF9pM2NfZGV2LAo+ ID4gPiA+ID4gKwkuZGV0YWNoX2kzY19kZXYgPSBhZGlfaTNjX21hc3Rlcl9kZXRhY2hfaTNjX2Rl diwKPiA+ID4gPiA+ICsJLmF0dGFjaF9pMmNfZGV2ID0gYWRpX2kzY19tYXN0ZXJfYXR0YWNoX2ky Y19kZXYsCj4gPiA+ID4gPiArCS5kZXRhY2hfaTJjX2RldiA9IGFkaV9pM2NfbWFzdGVyX2RldGFj aF9pMmNfZGV2LAo+ID4gPiA+ID4gKwkuZG9fZGFhID0gYWRpX2kzY19tYXN0ZXJfZG9fZGFhLAo+ ID4gPiA+ID4gKwkuc3VwcG9ydHNfY2NjX2NtZCA9IGFkaV9pM2NfbWFzdGVyX3N1cHBvcnRzX2Nj Y19jbWQsCj4gPiA+ID4gPiArCS5zZW5kX2NjY19jbWQgPSBhZGlfaTNjX21hc3Rlcl9zZW5kX2Nj Y19jbWQsCj4gPiA+ID4gPiArCS5wcml2X3hmZXJzID0gYWRpX2kzY19tYXN0ZXJfcHJpdl94ZmVy cywKPiA+ID4gPiA+ICsJLmkyY194ZmVycyA9IGFkaV9pM2NfbWFzdGVyX2kyY194ZmVycywKPiA+ ID4gPiA+ICsJLnJlcXVlc3RfaWJpID0gYWRpX2kzY19tYXN0ZXJfcmVxdWVzdF9pYmksCj4gPiA+ ID4gPiArCS5lbmFibGVfaWJpID0gYWRpX2kzY19tYXN0ZXJfZW5hYmxlX2liaSwKPiA+ID4gPiA+ ICsJLmRpc2FibGVfaWJpID0gYWRpX2kzY19tYXN0ZXJfZGlzYWJsZV9pYmksCj4gPiA+ID4gPiAr CS5mcmVlX2liaSA9IGFkaV9pM2NfbWFzdGVyX2ZyZWVfaWJpLAo+ID4gPiA+ID4gKwkucmVjeWNs ZV9pYmlfc2xvdCA9IGFkaV9pM2NfbWFzdGVyX3JlY3ljbGVfaWJpX3Nsb3QsCj4gPiA+ID4gPiAr fTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9p ZCBhZGlfaTNjX21hc3Rlcl9vZl9tYXRjaFtdID0gewo+ID4gPiA+ID4gKwl7IC5jb21wYXRpYmxl ID0gImFkaSxpM2MtbWFzdGVyIiB9LAo+ID4gPiA+ID4gKwl7fQo+ID4gPiA+ID4gK307Cj4gPiA+ ID4gPiArCj4gPiA+ID4gPiArc3RhdGljIGludCBhZGlfaTNjX21hc3Rlcl9wcm9iZShzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ICsJc3RydWN0IGFk aV9pM2NfbWFzdGVyICptYXN0ZXI7Cj4gPiA+ID4gPiArCXVuc2lnbmVkIGludCB2ZXJzaW9uOwo+ ID4gPiA+ID4gKwlpbnQgcmV0LCBpcnE7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCW1hc3RlciA9 IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKm1hc3RlciksIEdGUF9LRVJORUwpOwo+ ID4gPiA+ID4gKwlpZiAoIW1hc3RlcikKPiA+ID4gPiA+ICsJCXJldHVybiAtRU5PTUVNOwo+ID4g PiA+ID4gKwo+ID4gPiA+ID4gKwltYXN0ZXItPnJlZ3MgPSBkZXZtX3BsYXRmb3JtX2lvcmVtYXBf cmVzb3VyY2UocGRldiwgMCk7Cj4gPiA+ID4gPiArCWlmIChJU19FUlIobWFzdGVyLT5yZWdzKSkK PiA+ID4gPiA+ICsJCXJldHVybiBQVFJfRVJSKG1hc3Rlci0+cmVncyk7Cj4gPiA+ID4gPiArCj4g PiA+ID4gPiArCW1hc3Rlci0+Y2xrID0gZGV2bV9jbGtfZ2V0X2VuYWJsZWQoJnBkZXYtPmRldiwg ImF4aSIpOwo+ID4gPiA+ID4gKwlpZiAoSVNfRVJSKG1hc3Rlci0+Y2xrKSkKPiA+ID4gPiA+ICsJ CXJldHVybiBQVFJfRVJSKG1hc3Rlci0+Y2xrKTsKPiA+ID4gPgo+ID4gPiA+IHlvdSBoYXZlIG9w dGlvbmFsIGNsb2NrIGkzYywgbm90IHVzZSBpdCBpbiBkcml2ZXI/Cj4gPiA+ID4KPiA+ID4gSXQg aXMgbm90IHVzZWQgaW4gdGhlIGRyaXZlciBpbmRlZWQsIGl0IGRlc2NyaWJlcyBob3cgdGhlIElQ IENvcmUgaXMKPiA+ID4gY29tcGlsZWQgYW5kIHdpcmVkLCBidXQgZG9lc24ndCBhZmZlY3QgdGhl IGxvZ2ljIGluIHRoZSBkcml2ZXIgaXRzZWxmLgo+ID4gPiBUaGUgUlRMIGxvZ2ljIGlzIGFsd2F5 cyBkcml2ZW4gYnkgYSAxMDBNSHogY2xvY2ssIGFuZCB0aGUgc291cmNlIGlzCj4gPiA+IGVpdGhl ciBheGkgb3IgaTNjLCBpZiB0aGUgbGF0dGVyIHByZXNlbnQuCj4gPgo+ID4gY2FuIHlvdSB1c2Ug ZGV2bV9jbGtfYnVsa19nZXRfYWxsX2VuYWJsZWQoKSA/Cj4gPgo+IEkgYmVsaWV2ZSBzbywgSSB3 b3VsZCBrZWVwIHRoZSByZXF1aXJlZCBhc3NlcnRpb24gbGlrZSB0aGlzIHRoZW46Cj4KPiAJcmV0 ID0gZGV2bV9jbGtfYnVsa19nZXRfYWxsX2VuYWJsZWQoJnBkZXYtPmRldiwgJmNsayk7Cj4gCWlm IChyZXQgPCAwKQo+IAkJcmV0dXJuIGRldl9lcnJfcHJvYmUoJnBkZXYtPmRldiwgcmV0LAo+IAkJ CQkgICAgICJGYWlsZWQgdG8gZ2V0IGNsb2Nrc1xuIik7Cj4gCXdoaWxlIChyZXQtLSkKPiAJCWlm IChjbGtbcmV0XS5pZCAmJiAhc3RyY21wKGNsa1tyZXRdLmlkLCAiYXhpIikpCj4gCQkJYnJlYWs7 Cj4gCWlmIChyZXQgPT0gLTEpCj4gCQlyZXR1cm4gZGV2X2Vycl9wcm9iZSgmcGRldi0+ZGV2LCAt RU5PREVWLAo+IAkJCQkgICAgICJGYWlsZWQgdG8gZ2V0IGNsb2NrIGF4aVxuIik7CgpHZW5lcmFs bHksIHlvdSBuZWVkbid0IGNoZWNrIGl0LiBJdCBkZXBlbmQgb24gQ0hFQ0tfRFRCIHRvIHZlcmlm eSBkdHMgaXMKY29ycmVjdC4KCllvdSBvbmx5IG5lZWQgaXRlcmF0ZSBpdCB3aGVuIG5lZWQgZ2V0 IGEgc3BlY2lhbCBjbG9jayByYXRlIG9yIGFkdmFuY2UKcmVxdWlyZW1udC4KCkZyYW5rCj4KPiBC ZXN0IHJlZ2FyZHMsCj4gSm9yZ2UKPgo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlpcnEgPSBwbGF0 Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwo+ID4gPiA+ID4gKwlpZiAoaXJxIDwgMCkKPiA+ID4gPiA+ ICsJCXJldHVybiBpcnE7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCXZlcnNpb24gPSByZWFkbCht YXN0ZXItPnJlZ3MgKyBSRUdfVkVSU0lPTik7Cj4gPiA+ID4gPiArCWlmIChWRVJTSU9OX01BSk9S KHZlcnNpb24pICE9IDApIHsKPiA+ID4gPiA+ICsJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuc3Vw cG9ydGVkIElQIHZlcnNpb24gJXUuJXUuJWNcbiIsCj4gPiA+ID4gPiArCQkJVkVSU0lPTl9NQUpP Uih2ZXJzaW9uKSwKPiA+ID4gPiA+ICsJCQlWRVJTSU9OX01JTk9SKHZlcnNpb24pLAo+ID4gPiA+ ID4gKwkJCVZFUlNJT05fUEFUQ0godmVyc2lvbikpOwo+ID4gPiA+ID4gKwkJcmV0dXJuIC1FSU5W QUw7Cj4gPiA+ID4KPiA+ID4gPiByZXR1cm4gZGV2X2Vycl9wcm9iZSgpOwo+ID4gPiBBY2suCj4g PiA+ID4KPiA+ID4gPiBGcmFuawo+ID4gPiBCZXN0IHJlZ2FyZHMsCj4gPiA+IEpvcmdlCj4gPiA+ ID4gPiArCX0KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJd3JpdGVsKDB4MDAsIG1hc3Rlci0+cmVn cyArIFJFR19FTkFCTEUpOwo+ID4gPiA+ID4gKwl3cml0ZWwoMHgwMCwgbWFzdGVyLT5yZWdzICsg UkVHX0lSUV9NQVNLKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJcmV0ID0gZGV2bV9yZXF1ZXN0 X2lycSgmcGRldi0+ZGV2LCBpcnEsIGFkaV9pM2NfbWFzdGVyX2lycSwgMCwKPiA+ID4gPiA+ICsJ CQkgICAgICAgZGV2X25hbWUoJnBkZXYtPmRldiksIG1hc3Rlcik7Cj4gPiA+ID4gPiArCWlmIChy ZXQpCj4gPiA+ID4gPiArCQlyZXR1cm4gcmV0Owo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlwbGF0 Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBtYXN0ZXIpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlt YXN0ZXItPm1heGRldnMgPSBNQVhfREVWUzsKPiA+ID4gPiA+ICsJbWFzdGVyLT5mcmVlX3JyX3Ns b3RzID0gR0VOTUFTSyhtYXN0ZXItPm1heGRldnMsIDEpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4g Kwl3cml0ZWwoUkVHX0lSUV9QRU5ESU5HX0NNRFIsIG1hc3Rlci0+cmVncyArIFJFR19JUlFfTUFT Syk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCXNwaW5fbG9ja19pbml0KCZtYXN0ZXItPmliaS5s b2NrKTsKPiA+ID4gPiA+ICsJbWFzdGVyLT5pYmkubnVtX3Nsb3RzID0gMTU7Cj4gPiA+ID4gPiAr CW1hc3Rlci0+aWJpLnNsb3RzID0gZGV2bV9rY2FsbG9jKCZwZGV2LT5kZXYsIG1hc3Rlci0+aWJp Lm51bV9zbG90cywKPiA+ID4gPiA+ICsJCQkJCSBzaXplb2YoKm1hc3Rlci0+aWJpLnNsb3RzKSwK PiA+ID4gPiA+ICsJCQkJCSBHRlBfS0VSTkVMKTsKPiA+ID4gPiA+ICsJaWYgKCFtYXN0ZXItPmli aS5zbG90cykKPiA+ID4gPiA+ICsJCXJldHVybiAtRU5PTUVNOwo+ID4gPiA+ID4gKwo+ID4gPiA+ ID4gKwlyZXR1cm4gaTNjX21hc3Rlcl9yZWdpc3RlcigmbWFzdGVyLT5iYXNlLCAmcGRldi0+ZGV2 LAo+ID4gPiA+ID4gKwkJCQkgICAmYWRpX2kzY19tYXN0ZXJfb3BzLCBmYWxzZSk7Cj4gPiA+ID4g PiArfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK3N0YXRpYyB2b2lkIGFkaV9pM2NfbWFzdGVyX3Jl bW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ ICsJc3RydWN0IGFkaV9pM2NfbWFzdGVyICptYXN0ZXIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShw ZGV2KTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJd3JpdGVsKDB4ZmYsIG1hc3Rlci0+cmVncyAr IFJFR19JUlFfUEVORElORyk7Cj4gPiA+ID4gPiArCXdyaXRlbCgweDAwLCBtYXN0ZXItPnJlZ3Mg KyBSRUdfSVJRX01BU0spOwo+ID4gPiA+ID4gKwl3cml0ZWwoMHgwMSwgbWFzdGVyLT5yZWdzICsg UkVHX0VOQUJMRSk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWkzY19tYXN0ZXJfdW5yZWdpc3Rl cigmbWFzdGVyLT5iYXNlKTsKPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArc3Rh dGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWRpX2kzY19tYXN0ZXIgPSB7Cj4gPiA+ID4gPiAr CS5wcm9iZSA9IGFkaV9pM2NfbWFzdGVyX3Byb2JlLAo+ID4gPiA+ID4gKwkucmVtb3ZlID0gYWRp X2kzY19tYXN0ZXJfcmVtb3ZlLAo+ID4gPiA+ID4gKwkuZHJpdmVyID0gewo+ID4gPiA+ID4gKwkJ Lm5hbWUgPSAiYWRpLWkzYy1tYXN0ZXIiLAo+ID4gPiA+ID4gKwkJLm9mX21hdGNoX3RhYmxlID0g YWRpX2kzY19tYXN0ZXJfb2ZfbWF0Y2gsCj4gPiA+ID4gPiArCX0sCj4gPiA+ID4gPiArfTsKPiA+ ID4gPiA+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGFkaV9pM2NfbWFzdGVyKTsKPiA+ID4gPiA+ ICsKPiA+ID4gPiA+ICtNT0RVTEVfQVVUSE9SKCJKb3JnZSBNYXJxdWVzIDxqb3JnZS5tYXJxdWVz QGFuYWxvZy5jb20+Iik7Cj4gPiA+ID4gPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJBbmFsb2cgRGV2 aWNlcyBJM0MgbWFzdGVyIGRyaXZlciIpOwo+ID4gPiA+ID4gK01PRFVMRV9MSUNFTlNFKCJHUEwi KTsKPiA+ID4gPiA+Cj4gPiA+ID4gPiAtLQo+ID4gPiA+ID4gMi40OS4wCj4gPiA+ID4gPgoKLS0g CmxpbnV4LWkzYyBtYWlsaW5nIGxpc3QKbGludXgtaTNjQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0 cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1pM2MK