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 phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id B04BCC28D13 for ; Thu, 25 Aug 2022 10:58:17 +0000 (UTC) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 14FF480840; Thu, 25 Aug 2022 12:58:15 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=sancloud.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=sancloud.onmicrosoft.com header.i=@sancloud.onmicrosoft.com header.b="Eow2emdt"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 3DDA384855; Thu, 25 Aug 2022 12:58:14 +0200 (CEST) Received: from GBR01-LO2-obe.outbound.protection.outlook.com (mail-lo2gbr01on2108.outbound.protection.outlook.com [40.107.10.108]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 430938044A for ; Thu, 25 Aug 2022 12:58:07 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=sancloud.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=paul.barker@sancloud.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BJUYHqXnBhkanOqm19kgkBeJ84yLOwzzG4ESI3F38yABpAo3PMRkK8oR3rzwGiI1a/W65SIdJo9aQsdSUHIKk1ADBKNi1X070uM2PdjyY1R5t1NeQrAaNVbTtDKe8NSPb5FU75Hhc7mMCJ3E6LJXcX0u+MO+BXxicH9MW27S4ZvJ/XSPKSnxmrjuRJUp8369YShxOhDWrjunth8VgQFh4YWGgzLbysdorRVkcLVe7rD2cSaYMBCCfcLzjxJUQHLmOdQwBdunfbOQpPhNZI+zU1HafcVL4eUjCBooUKOA7jxVzHOsHuMqH+qLP3wCucuYNeIgGe6ioKqqmTpy2cn9TQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=D9aupOwC7ePRjzRx9RWgjanzWEXhvoJ7sjJuNqogkY0=; b=NS8Rl56xLKK0GEYBuicskNIrqgridYzkcP2aqlQqdFYxRa0WPvcVfnPMw1rvmk+hs9EtpsOaeiJzyuT4/ouIWRRPwa68Zip+Qq5GBtNBSduw66goN5wQ11gAe/do9qWwaaplujVO+0J2UIqVtka7NHVK7Xu6KHI1pZKRKVPJCMaOYN0yPOS8EdaoX11hTw7jSZLgeDfvkUCN0GTGZPBrf0ge3VnfLBYeVJNpps9Cj878iK1k0gBLazp/G9vEg8PSa/bbrsOlTnUM9A6XdPbg4HSQN0ML60zuft9h54hJEh4wAcrSQQgaFN2tpiKhlhBD+GBMHopJ/WBMix9QlwWI2A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=sancloud.com; dmarc=pass action=none header.from=sancloud.com; dkim=pass header.d=sancloud.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sancloud.onmicrosoft.com; s=selector2-sancloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=D9aupOwC7ePRjzRx9RWgjanzWEXhvoJ7sjJuNqogkY0=; b=Eow2emdtx1XkqtQGNh5qSlOAUITcuoX4/qeePmdkDwdP6gqqxy5VzZ+ZAoFEPHGbEDXz3YTRzmdy07Ws+9/YyyfYooBvNjMe13H6tr62qHBhMHqm79IsmCksTOODFS4G8PcjHTX3NWCQO7IGXFZ0gp7+4h9obHJ8stpba2dpz4U= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=sancloud.com; Received: from CWLP123MB2241.GBRP123.PROD.OUTLOOK.COM (2603:10a6:401:61::19) by CWXP123MB4183.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:b1::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5566.14; Thu, 25 Aug 2022 10:58:05 +0000 Received: from CWLP123MB2241.GBRP123.PROD.OUTLOOK.COM ([fe80::bd44:c901:a4d4:a269]) by CWLP123MB2241.GBRP123.PROD.OUTLOOK.COM ([fe80::bd44:c901:a4d4:a269%3]) with mapi id 15.20.5566.014; Thu, 25 Aug 2022 10:58:05 +0000 Message-ID: Date: Thu, 25 Aug 2022 11:58:03 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.13.0 To: Heinrich Schuchardt Cc: Marc Murphy , Stuart Rubin , Andy VanDamia , Tom Rini , Ilias Apalodimas , u-boot@lists.denx.de References: <20220804103402.2183919-1-paul.barker@sancloud.com> <20220804103402.2183919-2-paul.barker@sancloud.com> <31fc232c-ba06-f879-8149-3a4397388e29@gmx.de> From: Paul Barker Subject: Re: [PATCH v2 1/3] efi_loader: Add SPI I/O protocol support In-Reply-To: <31fc232c-ba06-f879-8149-3a4397388e29@gmx.de> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------1pjXOVrP0G9hE0XF0A5YoyKp" X-ClientProxiedBy: LO4P123CA0324.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:197::23) To CWLP123MB2241.GBRP123.PROD.OUTLOOK.COM (2603:10a6:401:61::19) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d7a0e0aa-8c82-4c86-694b-08da8688af7b X-MS-TrafficTypeDiagnostic: CWXP123MB4183:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: DGSAmTq9EYzMznVbzrAQ0QrFdjdw/K5YhMy/fjmJeZVenSrQI2Cart/wahZ1XC2+bD+lXAhaOin6oQnJHND1tqHX11sDN8UOP274LM6r9RR7a3jhzJd68rL48Gtmo0wDuP0ALt5z7KmLYur39NNXQKuZGJy1tO/XflJsRbkvZkWqjeQ1JHOot47vhaY7MpxE0LlX8WyLODvhxJTNrCvule59fREJ+c1QLIy0cw6MWX+zCcUpRy+Vo2Q4dDFSzBjJYCIKcQS7nJ/h3KvO04+c3pGGN/fyYPlqGnX3Apx4OzSzVDYpKXXt56bppr7lfyJ0SMz8QA5pNQqTlfcJm6j6Vgjcx3oHtkif1yt2Rh4V4QesU+7lJIAXy/+2/zKT03M7XM0nN2DUpuHki1klmAI2/w+2Sepq5VvPlmhYbydRLJ9zI4BgzfyaIcWGl/saFgg2sMo7TfSmFUKeHWb4gNAx7zA3zZpOsM0tdaXjo5k/5lbtilGMWHS4+30zenk6HE2m2hSTmd11vR0GcugLPnrW1YeA0HMQEhkk7dCgEdF+R9fKdywKO02mLmGOxW4ZVTwUK0Bj/BZAckHTJIoh9QqglRiYZdTMODjjdczICHvq+Qa2cb4VMSNIRlJD1bI5Vh4nksWtIrPRI0siu1Gc4Lbo0RQib4gaEI+o07jIB4MyZFz4B7jrcmBaBHukU2XcGQumpUUVpVOS8nJQUGLLj/wm0eCZRQ3T3+Wa1Yd0eAWNtqQebyfQ7AlbGaj4DYLOtB6ybwCaz85vGvsoFAPKUP+Q9IvhWc1csexx+x+Q27fDyzUw+Cn49HCtyYjS7am8qNAo4k70vARgxYZyZ9u+PXfF67w1sLFooPh2Di27aprgJdQ= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CWLP123MB2241.GBRP123.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230016)(136003)(366004)(376002)(39830400003)(346002)(396003)(83380400001)(21480400003)(186003)(2616005)(316002)(54906003)(6916009)(4326008)(8676002)(36756003)(66476007)(31686004)(66556008)(66946007)(6506007)(31696002)(26005)(33964004)(2906002)(41300700001)(30864003)(6512007)(52116002)(44832011)(53546011)(8936002)(5660300002)(235185007)(478600001)(966005)(6486002)(86362001)(38100700002)(38350700002)(45980500001)(43740500002)(579004)(559001); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?amxmQktYZHNMRnpMN25udkQyWE4xZlBaZTliaVBuUzBwbC96cTFKUWUyTTlX?= =?utf-8?B?NHJFU0hIaC82SGM2MmVZazRPTmNhNWhSYjFyaUwyWGNENSs3WUs4ZVZ6SWVn?= =?utf-8?B?M0w3VEpWbDF4SStNNk1tMkpQTFVjVWdQLzNhdWg1eXQ0VmpBZEZ2dG5RZlRD?= =?utf-8?B?M01RV3F6TXIwZGNDMGZTM0JjZzVXMCs1WEMrVm02V0x0RDI5UmszS2ZjUnFV?= =?utf-8?B?RU4xN0E0TDQrUGFERWVzWnhFZ1AvQit5STF5MFdEOEFmY1lGTXhCVUxhU1JP?= =?utf-8?B?Vm5UL2Zac3pXWnpDNXF2R1NtNlFkWHB5aGhtU0NjZCs3Wk1heXFlTnk3azFy?= =?utf-8?B?NlVweTNwam1zb3ZoSWZoRTZ0b1NRa05tZUs4R2NCR0RxSDdMUVdlU1JjWDZG?= =?utf-8?B?dXhWb0dmUDhRVXo1dVVaT2RYTUgwTHg4NnFTRzhzdWsvMUFWeHdGTVIzZDRv?= =?utf-8?B?ellzYjh4MWM5aitiUUZFT0RzVGhBNjQ5d3l1bHhWUjZrMjZCd0FQcnVEQkNu?= =?utf-8?B?bDUrT25JMlBlRzVlQmtKcXFmUnVEZytvYTBRdDhaWCsrTlRhTnhrMTBhMWxS?= =?utf-8?B?anNJU1JndTVuQko0VlhxdHJqdDJqMTU1V296UFBtaVJiZ2MwcjFvTEI3QmJC?= =?utf-8?B?UWVLWVlkcGIyRHJHY09vSnhlMk9TMnpaWXFJRDYwNmgwalNsRk5tQ1Qyc2RQ?= =?utf-8?B?QXZWamt1N2lIRXlyTFNqaVloL3IwcDdlbXVqZDFDMmRxRDZjcWhMSEtmRnY1?= =?utf-8?B?c1JXYXo0ZU0yZjFadU9rYWh0dFRJR1VmN3h0SGlmd3VZa0lLYVIyaWpsRmVl?= =?utf-8?B?THE4OFI1a3gwMkRDbzllZ3F6a2p1VG9xWUQxdlc3eWdTK3l0ZWo5WUoyS29k?= =?utf-8?B?RmZSVU5NWVo0SUZtbUlOMzFiaHNLdlRWcmxBNnA3K3IzSkZGTTVVc1luOWFx?= =?utf-8?B?c2RWc2lJZzN6TlhHUlBHQTFoWENwNEVIVnJwaGpzeGxXaHVDb3l3VUhSUklz?= =?utf-8?B?VkhsdHVDc0dCWHVUOVdKaVRQTFZXbkdxL3h5UnhFalFCZTFOcDAzNlhQS3Jl?= =?utf-8?B?KzFZa0ErZy9QOGZRQzh3ZHQ4NWhyUWhWcjZhZTR0ZmhpSGliOFRURWg5bzVy?= =?utf-8?B?YlcvcTBNaUZLVTB2cmRhMHFPbU1nVS9uWWRyNkZHYWF4VmQ2RHEreFc5ZjVW?= =?utf-8?B?WHFCSlJzQVI4WVlYN0wwU2g4SEROelM0elRvU3hBS3lVdlpMTkVZZ2pPUTVp?= =?utf-8?B?dlpHZjFwbm9GQmtvamlOQy9yeGJYZ2RQaUJFbjhIUVRtT284bVljNHBlNWlM?= =?utf-8?B?aXJDemlUTWtTakJwV1JQQURDcWh2TWpHZ0k0OXdLa2NkNmltN09sajljZFQw?= =?utf-8?B?ZjJkL2tSd29IRkJIbEJ2c1JRNHRVTE1nYS8vTWRjTm9nRDZ6Mk5scWsvVkRr?= =?utf-8?B?WUtlZ1hpb3dxM1pxbTNuYUhKd0ZWMDdQOEdqcmtscFNpUENGaGVqdUhGZndJ?= =?utf-8?B?ajA4S3hNbWMvNnNNUFVJSzRGa3lCcldkcU1uRHZ6VC9JemV2TTN2dTNDVkIv?= =?utf-8?B?NjgyMzJQZjdoa2Y1Q0VQcERFZnM1ZWhlMCtLSzhhZTkwZCszM2orcUpNWU8w?= =?utf-8?B?QTNGODlTaDd3MHVjb28yUGVwOVpBM0tFT2hnWmc0bnE0aTZ1aUdRODVZY0RW?= =?utf-8?B?UmRuWmxkaVI1cUtHdFQ2RnlvTnlmcG1qRXV3N2N6WkV6NjlZT2NLeGFmSk9P?= =?utf-8?B?OFNPMytWSTVpcG9zUFh5OEpZcm9NVXExQU5OMEdXSmRNTEw3SEUyRi9lUk1B?= =?utf-8?B?b29DNVB6d2d4NVdDbEovUHcxMW1UbU9YSkx3cGliMkliaExmRFIvSGVWbytI?= =?utf-8?B?WmJUbURXYjFNMy9LZHFHeEJrbUpMckpZTWVnZnZCbDZOR01zbHF4TlU2SHlC?= =?utf-8?B?dEVtY0dIMUhnV3dJS3J5eWJKeFRRbklDbkVEWEVXc3lwYWJ3WVVDdUhTMGN0?= =?utf-8?B?WVp0bXBwMzgwMzdFT1pHSVNtbk9pckVuNkR6Tll6ZVp3N1FpWFAwVElmZ2RG?= =?utf-8?B?NExzRlRxayt3eE5BYWlPa2d6cEt6bE1DVXNJdTdWNE4wYmFoL0JxNGp4c2VJ?= =?utf-8?B?ekdsVlBaelNCUU9VWUNDeXFmM0JlbkxURVZFYkc3UzAxdEQxWDBDNzhjUEFR?= =?utf-8?B?Qmc9PQ==?= X-OriginatorOrg: sancloud.com X-MS-Exchange-CrossTenant-Network-Message-Id: d7a0e0aa-8c82-4c86-694b-08da8688af7b X-MS-Exchange-CrossTenant-AuthSource: CWLP123MB2241.GBRP123.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Aug 2022 10:58:04.5840 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 840be37c-244a-450e-9bcc-2064862de1f4 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: NjS/OCcQ9wDDk8X0ebbVKUFc0gpSjFhDwehKsOX92tqnNaHmwYqbU+45W3Y2D4dmfwBwBVryAtxpcPxVzuW/b98+MDc63QTMeOrxf9OLZ8o= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CWXP123MB4183 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.6 at phobos.denx.de X-Virus-Status: Clean --------------1pjXOVrP0G9hE0XF0A5YoyKp Content-Type: multipart/mixed; boundary="------------eOOy0SNhsqaKJygeDqwlELMu"; protected-headers="v1" From: Paul Barker To: Heinrich Schuchardt Cc: Marc Murphy , Stuart Rubin , Andy VanDamia , Tom Rini , Ilias Apalodimas , u-boot@lists.denx.de Message-ID: Subject: Re: [PATCH v2 1/3] efi_loader: Add SPI I/O protocol support References: <20220804103402.2183919-1-paul.barker@sancloud.com> <20220804103402.2183919-2-paul.barker@sancloud.com> <31fc232c-ba06-f879-8149-3a4397388e29@gmx.de> In-Reply-To: <31fc232c-ba06-f879-8149-3a4397388e29@gmx.de> --------------eOOy0SNhsqaKJygeDqwlELMu Content-Type: multipart/mixed; boundary="------------9awycwDHqLuao5HTu1VzoSCm" --------------9awycwDHqLuao5HTu1VzoSCm Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 SGkgSGVucmljaCwNCg0KTWFueSB0aGFua3MgZm9yIHlvdXIgcmV2aWV3IG9uIHRoaXMgcGF0 Y2guIEkndmUgcmVzcG9uZGVkIHRvIHRoaW5ncyANCmlubGluZSBiZWxvdy4gSSdtIGFsc28g YXZhaWxhYmxlIG9uIElSQyAocGF1bGJhcmtlcikgaWYgeW91IHdhbnQgdG8gDQpkaXNjdXNz IGZ1cnRoZXIuDQoNCk9uIDEzLzA4LzIwMjIgMjA6MjAsIEhlaW5yaWNoIFNjaHVjaGFyZHQg d3JvdGU6DQo+IE9uIDgvNC8yMiAxMjozNCwgUGF1bCBCYXJrZXIgd3JvdGU6DQo+PiBUaGlz IGFkZGl0aW9uIGFsbG93cyBVRUZJIGFwcGxpY2F0aW9ucyBydW5uaW5nIHVuZGVyIHUtYm9v dCB0byBhY2Nlc3MNCj4+IHBlcmlwaGVyYWxzIG9uIFNQSSBidXNzZXMuIEl0IGlzIGJhc2Vk IG9uIHRoZSBVRUZJIFBsYXRmb3JtDQo+PiBJbml0aWFsaXphdGlvbiAoUEkpIFNwZWNpZmlj YXRpb24sIFZlcnNpb24gMS43IEVycmF0YSBBIChBcHJpbCAyMDIwKS4NCj4+IE9ubHkgdGhl IGNvcmUgZnVuY3Rpb25hbGl0eSByZXF1aXJlZCB0byBkaXNjb3ZlciBTUEkgcGVyaXBoZXJh bHMgYW5kDQo+PiBjb21tdW5pY2F0ZSB3aXRoIHRoZW0gaXMgY3VycmVudGx5IGltcGxlbWVu dGVkLiBPdGhlciBmdW5jdGlvbmFsaXR5IHN1Y2gNCj4+IGFzIHRoZSBsZWdhY3kgU1BJIGNv bnRyb2xsZXIgaW50ZXJmYWNlIGFuZCB0aGUgYWJpbGl0eSB0byB1cGRhdGUgdGhlIFNQSQ0K Pj4gcGVyaXBoZXJhbCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBTUEkg SS9PIHByb3RvY29sIG9iamVjdA0KPj4gaXMgY3VycmVudGx5IHVuaW1wbGVtZW50ZWQuDQo+ Pg0KPj4gU2luY2UgdGhlcmUgYXJlIG5vIG9wZW4gc291cmNlIGltcGxlbWVudGF0aW9ucyBv ZiB0aGlzIHByb3RvY29sIHRvIHVzZQ0KPj4gYXMgYW4gZXhhbXBsZSwgZWR1Y2F0ZWQgZ3Vl c3Nlcy9oYWNrcyBoYXZlIGJlZW4gbWFkZSBpbiBjYXNlcyB3aGVyZSB0aGUNCj4+IFVFRkkg UEkgc3BlY2lmaWNhdGlvbiBpcyB1bmNsZWFyIGFuZCB0aGVzZSBhcmUgZG9jdW1lbnRlZCBp biBjb21tZW50cy4NCj4+DQo+PiBUaGlzIGltcGxlbWVudGF0aW9uIGhhcyBiZWVuIHRlc3Rl ZCBvbiB0aGUgU2FuQ2xvdWQgQkJFIExpdGUgYW5kIGFsbG93ZWQNCj4+IGEgVUVGSSB0ZXN0 IGFwcGxpY2F0aW9uIHRvIHN1Y2Nlc3NmdWxseSBjb21tdW5pY2F0ZSB3aXRoIGEgTWljcm9u DQo+PiBBdXRoZW50YSBmbGFzaCBkZXZpY2UgY29ubmVjdGVkIHZpYSB0aGUgU1BJIGJ1cy4g SXQgaGFzIGFsc28gYmVlbiB0ZXN0ZWQNCj4+IHdpdGggdGhlIHNhbmRib3ggdGFyZ2V0IHVz aW5nIHRoZSBpbmNsdWRlZCBlZmlfc2VsZnRlc3QgY2FzZS4NCj4gDQo+IFRoZSBjb21taXQg bWVzc2FnZSBzaG91bGQgZGVzY3JpYmUgd2hpY2ggcHJvdG9jb2xzIGFyZSBhY3R1YWxseSAN Cj4gaW1wbGVtZW50ZWQuDQoNCkknbGwgYWRkIHRoaXMgdG8gdGhlIGNvbW1pdCBtZXNzYWdl IGluIHYzLg0KDQo+IA0KPiBJIHN0aWxsIGhhdmUgbm8gY2x1ZSB3aHkgYW55IFBJIHByb3Rv Y29sIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBVLUJvb3QuDQo+IFlvdSBuZWl0aGVyIGRlc2Np YmUgaXQgaGVyZSBub3IgaW4gdGhlIGNvdmVyLWxldHRlci4NCg0KSW1wbGVtZW50aW5nIHRo ZSBTUEkgSS9PIHByb3RvY29sIGFsbG93cyBhIFVFRkkgYXBwbGljYXRpb24gcnVubmluZyAN CnVuZGVyIHUtYm9vdCB0byBlbnVtZXJhdGUgYW5kIGNvbW11bmljYXRlIHdpdGggZGV2aWNl cyBvbiB0aGUgU1BJIGJ1cy4gDQpUaGlzIHByb3RvY29sIGZ1bGZpbHMgdGhlIHNhbWUgcHVy cG9zZSBhcyB0aGUgIlNEIE1NQyBQYXNzIFRocnUgDQpQcm90b2NvbCIgYW5kICJOVk0gRXhw cmVzcyBQYXNzIFRocm91Z2ggUHJvdG9jb2wiIGRlc2NyaWJlZCBpbiB0aGUgbWFpbiANClVF Rkkgc3BlYywgSSdtIHVuc3VyZSB3aHkgU1BJIGJ1cyBhY2Nlc3Mgd2FzIGRlZmVycmVkIHRv IHRoZSBQSSBzcGVjLiBJZiANCnRoZXNlIHBhdGNoZXMgYXJlIGFjY2VwdGVkIHdlIHBsYW4g dG8gYWxzbyBpbXBsZW1lbnQgdGhlIFNEL01NQyBhbmQgTlZNZSANCkkvTyBwcm90b2NvbHMu DQoNClRoZSBicm9hZGVyIGdvYWwgaGVyZSBpcyB0byBzdXBwb3J0IGJldHRlciBlbmNhcHN1 bGF0aW9uIG9mICJwcmUtYm9vdCIgDQphcHBsaWNhdGlvbiBjb2RlIHdoaWNoIG5lZWRzIHRv IGNvbW11bmljYXRlIHdpdGggYSBTUEksIE1NQyBvciBOVk1lIA0KZGV2aWNlcyBiZWZvcmUg TGludXggaXMgYm9vdGVkLiBUaGlzIHByZS1ib290IGFwcGxpY2F0aW9uIGNhbiB0aGVuIHJ1 biANCm9uIGJvdGggZW1iZWRkZWQgZGV2aWNlcyBydW5uaW5nIHUtYm9vdCBhbmQgUEMtbGlr ZSBkZXZpY2VzIHJ1bm5pbmcgYSANClVFRkkgQklPUy4gSW4gb3VyIGNhc2UgdGhlIGFwcGxp Y2F0aW9uIHdpbGwgaW50ZXJhY3Qgd2l0aCB0aGUgQXV0aGVudGEgDQpmbGFzaCBzZWN1cml0 eSBmZWF0dXJlcyB0byB2ZXJpZnkgaW50ZWdyaXR5IGFuZCB0byBnZW5lcmF0ZSBlcGhlbWVy YWwgDQprZXlzIGJhc2VkIG9uIHRoZSBmbGFzaCBjb250ZW50cy4gT3VyIGFwcGxpY2F0aW9u IGxpbmtzIGFnYWluc3QgbWJlZHRscyANCmFuZCBzbyBpdCB3b3VsZCBiZSBub24tdHJpdmlh bCAoaW4gdGVybXMgb2YgYm90aCBpbXBsZW1lbnRhdGlvbiBhbmQgDQpsaWNlbnNpbmcpIHRv IGludGVncmF0ZSB0aGlzIGRpcmVjdGx5IGludG8gdS1ib290Lg0KDQpXZSBoYXZlIHByZXZp b3VzbHkgZXhwbG9yZWQgdXNpbmcgdGhlICJzdGFuZGFsb25lIiBhcHBsaWNhdGlvbiBzdXBw b3J0IA0KKGUuZy4gaW4gZXhhbXBsZXMvc3RhbmRhbG9uZSBpbiB0aGUgdS1ib290IHNvdXJj ZSkgYnV0IGFzIHRoYXQgaXMgbm90IA0Kd2VsbCBtYWludGFpbmVkIHdlIGhhdmUgbW92ZWQg dG8gYSBVRUZJIGltcGxlbWVudGF0aW9uLg0KDQpMZXQgbWUga25vdyBpZiB5b3UgbmVlZCBh bnkgbW9yZSBpbmZvIHRoYW4gdGhhdC4gT25jZSB5b3UncmUgaGFwcHkgd2l0aCANCnRoZSBl eHBsYW5hdGlvbiBJJ2xsIGFkZCBpdCB0byB0aGUgY292ZXIgbGV0dGVyIGluIHYzLg0KDQo+ IA0KPiBJIHdvdWxkIGV4cGVjdCBjYXBzdWxlIHVwZGF0ZXMgdG8gYmUgdXNlZCB0byB1cGRh dGUgdGhlIFNQSSBmbGFzaC4NCg0KT3VyIGFwcGxpY2F0aW9uIGlzIG5vdCBpbnRlbmRlZCB0 byBwZXJmb3JtIGZpcm13YXJlIG9yIGNhcHN1bGUgdXBkYXRlcyANCm9yIHRvIG1ha2UgYW55 IHdyaXRlcyB0byB0aGUgZmxhc2guDQoNCj4gDQo+Pg0KPj4gU2lnbmVkLW9mZi1ieTogUGF1 bCBCYXJrZXIgPHBhdWwuYmFya2VyQHNhbmNsb3VkLmNvbT4NCj4+IC0tLQ0KPj4gwqAgTUFJ TlRBSU5FUlPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgNyArDQo+PiDCoCBhcmNoL3NhbmRib3gvZHRz L3Rlc3QuZHRzwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAg OCArDQo+PiDCoCBpbmNsdWRlL2VmaV9sb2FkZXIuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCA0ICsNCj4+IMKgIGluY2x1ZGUvZWZp X3NwaV9wcm90b2NvbC5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHwg MTU4ICsrKysrDQo+PiDCoCBsaWIvZWZpX2xvYWRlci9LY29uZmlnwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgOCArDQo+PiDCoCBsaWIvZWZp X2xvYWRlci9NYWtlZmlsZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB8wqDCoCAxICsNCj4+IMKgIGxpYi9lZmlfbG9hZGVyL2VmaV9zZXR1cC5jwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDYgKw0KPj4gwqAgbGliL2Vm aV9sb2FkZXIvZWZpX3NwaV9wcm90b2NvbC5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8IDYx NCArKysrKysrKysrKysrKysrKysrDQo+PiDCoCBsaWIvZWZpX3NlbGZ0ZXN0L01ha2VmaWxl wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMSArDQo+PiDC oCBsaWIvZWZpX3NlbGZ0ZXN0L2VmaV9zZWxmdGVzdF9zcGlfcHJvdG9jb2wuYyB8IDIzNyAr KysrKysrDQo+PiDCoCAxMCBmaWxlcyBjaGFuZ2VkLCAxMDQ0IGluc2VydGlvbnMoKykNCj4+ IMKgIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2VmaV9zcGlfcHJvdG9jb2wuaA0KPj4g wqAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9lZmlfbG9hZGVyL2VmaV9zcGlfcHJvdG9jb2wu Yw0KPj4gwqAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9lZmlfc2VsZnRlc3QvZWZpX3NlbGZ0 ZXN0X3NwaV9wcm90b2NvbC5jDQo+Pg0KPj4gZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIv TUFJTlRBSU5FUlMNCj4+IGluZGV4IDRkMTkzMGY3NmU0NC4uMWI1ZDljMzc1NzZiIDEwMDY0 NA0KPj4gLS0tIGEvTUFJTlRBSU5FUlMNCj4+ICsrKyBiL01BSU5UQUlORVJTDQo+PiBAQCAt ODU2LDYgKzg1NiwxMyBAQCBGOsKgwqDCoCB0b29scy9lZml2YXIucHkNCj4+IMKgIEY6wqDC oMKgIHRvb2xzL2ZpbGUyaW5jbHVkZS5jDQo+PiDCoCBGOsKgwqDCoCB0b29scy9ta2VmaWNh cHN1bGUuYw0KPj4NCj4+ICtFRkkgU1BJIFNVUFBPUlQNCj4+ICtNOsKgwqDCoCBQYXVsIEJh cmtlciA8cGF1bC5iYXJrZXJAc2FuY2xvdWQuY29tPg0KPj4gK1M6wqDCoMKgIE1haW50YWlu ZWQNCj4+ICtGOsKgwqDCoCBpbmNsdWRlL2VmaV9zcGlfcHJvdG9jb2wuaA0KPj4gK0Y6wqDC oMKgIGxpYi9lZmlfbG9hZGVyL2VmaV9zcGlfcHJvdG9jb2wuYw0KPj4gK0Y6wqDCoMKgIGxp Yi9lZmlfc2VsZnRlc3QvZWZpX3NlbGZ0ZXN0X3NwaV9wcm90b2NvbC5jDQo+PiArDQo+PiDC oCBFRkkgVkFSSUFCTEVTIFZJQSBPUC1URUUNCj4+IMKgIE06wqDCoMKgIElsaWFzIEFwYWxv ZGltYXMgPGlsaWFzLmFwYWxvZGltYXNAbGluYXJvLm9yZz4NCj4+IMKgIFM6wqDCoMKgIE1h aW50YWluZWQNCj4+IGRpZmYgLS1naXQgYS9hcmNoL3NhbmRib3gvZHRzL3Rlc3QuZHRzIGIv YXJjaC9zYW5kYm94L2R0cy90ZXN0LmR0cw0KPj4gaW5kZXggZDFhOGNjN2JmYjdlLi41YWM1 OTE0MGI3NDggMTAwNjQ0DQo+PiAtLS0gYS9hcmNoL3NhbmRib3gvZHRzL3Rlc3QuZHRzDQo+ PiArKysgYi9hcmNoL3NhbmRib3gvZHRzL3Rlc3QuZHRzDQo+PiBAQCAtMTE4NSw2ICsxMTg1 LDEwIEBADQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb21wYXRpYmxlID0gInNw YW5zaW9uLG0yNXAxNiIsICJqZWRlYyxzcGktbm9yIjsNCj4+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHNwaS1tYXgtZnJlcXVlbmN5ID0gPDQwMDAwMDAwPjsNCj4+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHNhbmRib3gsZmlsZW5hbWUgPSAic3BpLmJpbiI7DQo+PiAr DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1ZWZpLXNwaS12ZW5kb3IgPSAic3BhbnNp b24iOw0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdWVmaS1zcGktcGFydC1udW1iZXIg PSAibXQyNXAxNiI7DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1ZWZpLXNwaS1pby1n dWlkID0gWzVkZWI4MWI4IDkyYWQgNDg0YSA4ZmRkIGZhNzVhOGU0YzZiOF07DQo+PiDCoMKg wqDCoMKgwqDCoMKgwqAgfTsNCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBzcGkuYmluQDEgew0K Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVnID0gPDE+Ow0KPj4gQEAgLTExOTMs NiArMTE5NywxMCBAQA0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2FuZGJveCxm aWxlbmFtZSA9ICJzcGkuYmluIjsNCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNw aS1jcG9sOw0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3BpLWNwaGE7DQo+PiAr DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1ZWZpLXNwaS12ZW5kb3IgPSAic3BhbnNp b24iOw0KPiANCj4gRG9lcyB0aGUgc2FuZGJveCBwcm92aWRlIGFueXRoaW5nIHRoYXQgaXMg cmVsYXRlZCB0byB2ZW5kb3Igc3BhbnNpb24/DQo+IE9yIGNvdWxkIHRoZSB2ZW5kb3IgYmUg InNhbmRib3giPw0KDQpUaGlzIGlzIGJhc2VkIG9uIHRoZSAic3BhbnNpb24sbTI1cDE2IiBj b21wYXRpYmxlIHN0cmluZyB1c2VkIGFib3ZlLiANCkkndmUgdXNlZCB0aGUgc2FtZSB2ZW5k b3IgYW5kIHBhcnQgbnVtYmVyIGZvciBjb25zaXN0ZW5jeS4NCg0KPiANCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHVlZmktc3BpLXBhcnQtbnVtYmVyID0gIm10MjVwMTYiOw0KPiAN Cj4gRG9lcyB0aGUgc2FuZGJveCByZWFsbHkgZW11bGF0ZSBhDQo+ICJNaWNyb24gTTI1UDE2 IFNlcmlhbCBGbGFzaCBFbWJlZGRlZCBNZW1vcnkiPw0KDQpBcyBhYm92ZS4NCg0KPiANCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVlZmktc3BpLWlvLWd1aWQgPSBbY2Q5ZWIzYjYg MWYyYiA0M2E2IGI4ZDcgMzE5MmQ3Y2Y3MjcwXTsNCj4gDQo+IFRoaXMgaXMgYSBieXRlLXN0 cmluZy4gVGhlIGJ5dGUgb3JkZXIgaW4gdGhlIGFycmF5IGRpZmZlcnMgZnJvbSB0aGUgbG93 DQo+IGVuZGlhbiBzdHJpbmcgcmVwcmVzZW50YXRpb24gdXNlZCBpbiB0aGUgVUVGSSBzcGVj aWZpY2F0aW9uLiBUbyBhdm9pZA0KPiBjb25mdXNpb24sIHBsZWFzZSwgYWRkIGEgc3BhY2Ug YWZ0ZXIgZWFjaCBieXRlIGFuZCBhZGQgYSBjb21tZW50IHdpdGgNCj4gdGhlIHN0cmluZyBy ZXByZXNlbnRhdGlvbi4NCg0KSSdsbCBtYWtlIHRoaXMgY2hhbmdlIGZvciB2My4NCg0KPiAN Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB9Ow0KPj4gwqDCoMKgwqDCoCB9Ow0KPj4NCj4+IGRp ZmYgLS1naXQgYS9pbmNsdWRlL2VmaV9sb2FkZXIuaCBiL2luY2x1ZGUvZWZpX2xvYWRlci5o DQo+PiBpbmRleCAzYTYzYTFmNzVmZGYuLjJlYjk2YjA4MjA1YiAxMDA2NDQNCj4+IC0tLSBh L2luY2x1ZGUvZWZpX2xvYWRlci5oDQo+PiArKysgYi9pbmNsdWRlL2VmaV9sb2FkZXIuaA0K Pj4gQEAgLTUzNyw2ICs1MzcsMTAgQEAgZWZpX3N0YXR1c190IGVmaV9ybmdfcmVnaXN0ZXIo dm9pZCk7DQo+PiDCoCBlZmlfc3RhdHVzX3QgZWZpX3RjZzJfcmVnaXN0ZXIodm9pZCk7DQo+ PiDCoCAvKiBDYWxsZWQgYnkgZWZpX2luaXRfb2JqX2xpc3QoKSB0byBpbnN0YWxsIFJJU0NW X0VGSV9CT09UX1BST1RPQ09MICovDQo+PiDCoCBlZmlfc3RhdHVzX3QgZWZpX3Jpc2N2X3Jl Z2lzdGVyKHZvaWQpOw0KPj4gKy8qIENhbGxlZCBieSBlZmlfaW5pdF9vYmpfbGlzdCgpIHRv IGluc3RhbGwgDQo+PiBFRklfU1BJX0NPTkZJR1VSQVRJT05fUFJPVE9DT0wgJg0KPj4gKyAq IEVGSV9TUElfSU9fUFJPVE9DT0wNCj4+ICsgKi8NCj4+ICtlZmlfc3RhdHVzX3QgZWZpX3Nw aV9wcm90b2NvbF9yZWdpc3Rlcih2b2lkKTsNCj4+IMKgIC8qIENhbGxlZCBieSBlZmlfaW5p dF9vYmpfbGlzdCgpIHRvIGRvIGluaXRpYWwgbWVhc3VyZW1lbnQgKi8NCj4+IMKgIGVmaV9z dGF0dXNfdCBlZmlfdGNnMl9kb19pbml0aWFsX21lYXN1cmVtZW50KHZvaWQpOw0KPj4gwqAg LyogbWVhc3VyZSB0aGUgcGUtY29mZiBpbWFnZSwgZXh0ZW5kIFBDUiBhbmQgYWRkIEV2ZW50 IExvZyAqLw0KPj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZWZpX3NwaV9wcm90b2NvbC5oIGIv aW5jbHVkZS9lZmlfc3BpX3Byb3RvY29sLmgNCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ PiBpbmRleCAwMDAwMDAwMDAwMDAuLjFhNDQ1NmJkOTM0OQ0KPj4gLS0tIC9kZXYvbnVsbA0K Pj4gKysrIGIvaW5jbHVkZS9lZmlfc3BpX3Byb3RvY29sLmgNCj4+IEBAIC0wLDAgKzEsMTU4 IEBADQo+PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRl bnQgKi8NCj4+ICsvKg0KPj4gKyAqIENvcHlyaWdodCAoYykgMjAxNywgSW50ZWwgQ29ycG9y YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiANCj4gSXMgdGhpcyByZWFsbHkg YSBjb3B5IGZyb20gRURLIElJIGFuZCBub3QgYmFzZWQgb24gdGhlIHNwZWNpZmljYXRpb24/ DQoNClRoaXMgaXMgY29waWVkIGZyb20gRURLIElJIGFuZCBtb2RpZmllZCB0byBmaXQgdGhl IHUtYm9vdCBjb2Rpbmcgc3R5bGUuDQoNCj4gDQo+IFBsZWFzZSwgYWRkIGEgcmVmZXJlbmNl IHRvIHRoZQ0KPiAiVUVGSSBQbGF0Zm9ybSBJbml0aWFsaXphdGlvbiAoUEkpIFNwZWNpZmlj YXRpb24iLg0KPiBhbmQgYSBkZXNjcmlwdGlvbiB3aGF0IHRoaXMgaW5jbHVkZSBpcyBhYm91 dC4NCg0KSSdsbCBhZGQgdGhpcyBpbiB2My4NCg0KPiANCj4gDQo+PiArICovDQo+PiArDQo+ PiArI2lmbmRlZiBfRUZJX1NQSV9QUk9UT0NPTF9IDQo+PiArI2RlZmluZSBfRUZJX1NQSV9Q Uk9UT0NPTF9IDQo+PiArDQo+PiArI2luY2x1ZGUgPGVmaS5oPg0KPj4gKyNpbmNsdWRlIDxl ZmlfYXBpLmg+DQo+PiArDQo+PiArI2RlZmluZSBFRklfU1BJX0NPTkZJR1VSQVRJT05fR1VJ RMKgIFwNCj4+ICvCoMKgwqAgRUZJX0dVSUQoMHg4NWE2ZDNlNiwgMHhiNjViLCAweDRhZmMs wqDCoMKgwqAgXA0KPj4gK8KgwqDCoMKgwqDCoMKgwqAgMHhiMywgMHg4ZiwgMHhjNiwgMHhk NSwgMHg0YSwgMHhmNiwgMHhkZCwgMHhjOCkNCj4gDQo+IFBsZWFzZSwgYWRkIGEgY29tbWVu dCB0aGF0IHRoaXMgR1VJRCBpcyBkZWZpbmVkIGluIHRoZSAiVUVGSSBQbGF0Zm9ybQ0KPiBJ bml0aWFsaXphdGlvbiAoUEkpIFNwZWNpZmljYXRpb24iLg0KPiANCj4gUGxlYXNlLCBhZGQg dGhlIEdVSUQgdG8gbGlzdF9ndWlkW11pbiBsaWIvdXVpZC5jIC4NCg0KV2lsbCBkbyBpbiB2 My4NCg0KPiANCj4+ICsNCj4+ICtzdHJ1Y3QgZWZpX3NwaV9wZXJpcGhlcmFsOw0KPj4gKw0K Pj4gK3N0cnVjdCBlZmlfc3BpX3BhcnQgew0KPj4gK8KgwqDCoCBlZmlfc3RyaW5nX3QgdmVu ZG9yOw0KPj4gK8KgwqDCoCBlZmlfc3RyaW5nX3QgcGFydF9udW1iZXI7DQo+IA0KPiBXaHkg ZGlkIHlvdSByZW1vdmUgImNvbnN0IiB1c2VkIGluIHRoZSBzcGVjaWZpY2F0aW9ucz8NCg0K VGhlc2Ugc3RydWN0dXJlcyBhcmUgY29uc3QgaW4gdGhlIHNwZWMgYXMgdGhlIFVFRkkgYXBw bGljYXRpb24gY29kZSBpcyANCm5vdCBleHBlY3RlZCB0byBtb2RpZnkgdGhlbS4gSG93ZXZl ciwgd2UgbmVlZCB0byBiZSBhYmxlIHRvIG1vZGlmeSB0aGVzZSANCmZpZWxkcyBpbiB1LWJv b3QgYmVmb3JlIHN0YXJ0aW5nIGEgVUVGSSBhcHBsaWNhdGlvbiBpbiBvcmRlciB0byBwb3B1 bGF0ZSANCnRoZW0gd2l0aCB0aGUgY29ycmVjdCBkYXRhLg0KDQo+IA0KPj4gK8KgwqDCoCB1 MzIgbWluX2Nsb2NrX2h6Ow0KPj4gK8KgwqDCoCB1MzIgbWF4X2Nsb2NrX2h6Ow0KPj4gK8Kg wqDCoCBib29sIGNoaXBfc2VsZWN0X3BvbGFyaXR5Ow0KPj4gK307DQo+PiArDQo+PiArc3Ry dWN0IGVmaV9zcGlfYnVzIHsNCj4+ICvCoMKgwqAgZWZpX3N0cmluZ190IGZyaWVuZGx5X25h bWU7DQo+PiArwqDCoMKgIHN0cnVjdCBlZmlfc3BpX3BlcmlwaGVyYWwgKnBlcmlwaGVyYWxf bGlzdDsNCj4+ICvCoMKgwqAgc3RydWN0IGVmaV9kZXZpY2VfcGF0aCAqY29udHJvbGxlcl9w YXRoOw0KPj4gKw0KPj4gK8KgwqDCoCBlZmlfc3RhdHVzX3QNCj4+ICvCoMKgwqAgKEVGSUFQ SSAqIGNsb2NrKShjb25zdCBzdHJ1Y3QgZWZpX3NwaV9wZXJpcGhlcmFsICpzcGlfcGVyaXBo ZXJhbCwNCj4+ICvCoMKgwqDCoMKgwqDCoCB1MzIgKmNsb2NrX2h6KTsNCj4+ICsNCj4+ICvC oMKgwqAgdm9pZCAqY2xvY2tfcGFyYW1ldGVyOw0KPj4gK307DQo+PiArDQo+PiArc3RydWN0 IGVmaV9zcGlfcGVyaXBoZXJhbCB7DQo+PiArwqDCoMKgIHN0cnVjdCBlZmlfc3BpX3Blcmlw aGVyYWwgKm5leHRfc3BpX3BlcmlwaGVyYWw7DQo+PiArwqDCoMKgIGVmaV9zdHJpbmdfdCBm cmllbmRseV9uYW1lOw0KPj4gK8KgwqDCoCBlZmlfZ3VpZF90ICpzcGlfcGVyaXBoZXJhbF9k cml2ZXJfZ3VpZDsNCj4+ICvCoMKgwqAgc3RydWN0IGVmaV9zcGlfcGFydCAqc3BpX3BhcnQ7 DQo+PiArwqDCoMKgIHUzMiBtYXhfY2xvY2tfaHo7DQo+PiArwqDCoMKgIGJvb2wgY2xvY2tf cG9sYXJpdHk7DQo+PiArwqDCoMKgIGJvb2wgY2xvY2tfcGhhc2U7DQo+PiArwqDCoMKgIHUz MiBhdHRyaWJ1dGVzOw0KPj4gK8KgwqDCoCB2b2lkICpjb25maWd1cmF0aW9uX2RhdGE7DQo+ PiArwqDCoMKgIHN0cnVjdCBlZmlfc3BpX2J1cyAqc3BpX2J1czsNCj4+ICsNCj4+ICvCoMKg wqAgZWZpX3N0YXR1c190DQo+PiArwqDCoMKgIChFRklBUEkgKiBjaGlwX3NlbGVjdCkoY29u c3Qgc3RydWN0IGVmaV9zcGlfcGVyaXBoZXJhbCANCj4+ICpzcGlfcGVyaXBoZXJhbCwNCj4+ ICvCoMKgwqDCoMKgwqDCoCBib29sIHBpbl92YWx1ZSk7DQo+PiArDQo+PiArwqDCoMKgIHZv aWQgKmNoaXBfc2VsZWN0X3BhcmFtZXRlcjsNCj4+ICt9Ow0KPj4gKw0KPj4gK3N0cnVjdCBl Zmlfc3BpX2NvbmZpZ3VyYXRpb25fcHJvdG9jb2wgew0KPj4gK8KgwqDCoCB1MzIgYnVzX2Nv dW50Ow0KPj4gK8KgwqDCoCBzdHJ1Y3QgZWZpX3NwaV9idXMgKipidXNfbGlzdDsNCj4+ICt9 Ow0KPj4gKw0KPj4gKyNkZWZpbmUgRUZJX0xFR0FDWV9TUElfQ09OVFJPTExFUl9HVUlEwqAg XA0KPj4gK8KgwqDCoCBFRklfR1VJRCgweDM5MTM2ZmM3LCAweDFhMTEsIDB4NDlkZSzCoMKg wqDCoMKgwqDCoMKgIFwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgIDB4YmYsIDB4MzUsIDB4MGUs IDB4NzgsIDB4ZGQsIDB4YjUsIDB4MjQsIDB4ZmMpDQo+IA0KPiBUaGUgY29tbWl0IG1lc3Nh Z2UgY2xlYXIgc3RhdGVzIHRoYXQgdGhlIGxlZ2FjeSBwcm90b2NvbCB3aWxsIG5vdCBiZQ0K PiBpbXBsZW1lbnRlZC4gV2h5IHNob3VsZCB3ZSBpbXBsZW1lbnQgYW55ICpsZWdhY3kqPw0K SSdkIHJhdGhlciBpZ25vcmUgdGhlIHdob2xlIHRoaW5nIGFuZCB1c2UgYSBOVUxMIHBvaW50 ZXIgYnV0IGl0IGRvZXNuJ3QgDQpsb29rIGxpa2UgdGhhdCdzIGFuIG9wdGlvbi4NCg0KYHN0 cnVjdCBlZmlfc3BpX2lvX3Byb3RvY29sYCBjb250YWlucyBhIHBvaW50ZXIgdG8gYSBgc3Ry dWN0IA0KZWZpX2xlZ2FjeV9zcGlfY29udHJvbGxlcl9wcm90b2NvbGAgYW5kIHRoZSBzcGVj IGRvZXMgbm90IHNlZW0gdG8gYWxsb3cgDQp0aGlzIG9yIHRoZSBmdW5jdGlvbiBwb2ludGVy cyBpbiB0aGUgbGVnYWN5IHByb3RvY29sIG9iamVjdCB0byBiZSBOVUxMLiANCkkgZG9uJ3Qg dGhpbmsgd2UgY2FuIGFzc3VtZSB0aGF0IGEgVUVGSSBhcHBsaWNhdGlvbiB3aWxsIGNoZWNr IGZvciBOVUxMIA0KcG9pbnRlcnMgYmVmb3JlIGRlLXJlZmVyZW5jaW5nIGdpdmVuIHRoZSB3 b3JkaW5nIGluIHRoZSBzcGVjLCBzbyB3ZSANCmluc3RlYWQgbmVlZCB0byBwcm92aWRlIHNv bWUgdmFsaWQgZnVuY3Rpb25zIHdoaWNoIGF0IGxlYXN0IHJldHVybiBhbiANCkVGSV9VTlNV UFBPUlRFRCBlcnJvciBjb25kaXRpb24uDQoNCj4gDQo+PiArDQo+PiArc3RydWN0IGVmaV9s ZWdhY3lfc3BpX2NvbnRyb2xsZXJfcHJvdG9jb2w7DQo+PiArDQo+PiArc3RydWN0IGVmaV9s ZWdhY3lfc3BpX2NvbnRyb2xsZXJfcHJvdG9jb2wgew0KPj4gK8KgwqDCoCB1MzIgbWF4aW11 bV9vZmZzZXQ7DQo+PiArwqDCoMKgIHUzMiBtYXhpbXVtX3JhbmdlX2J5dGVzOw0KPj4gK8Kg wqDCoCB1MzIgcmFuZ2VfcmVnaXN0ZXJfY291bnQ7DQo+PiArDQo+PiArwqDCoMKgIGVmaV9z dGF0dXNfdA0KPj4gK8KgwqDCoCAoRUZJQVBJICogZXJhc2VfYmxvY2tfb3Bjb2RlKShjb25z dCBzdHJ1Y3QgDQo+PiBlZmlfbGVnYWN5X3NwaV9jb250cm9sbGVyX3Byb3RvY29sICp0aGlz LA0KPj4gK8KgwqDCoMKgwqDCoMKgIHU4IGVyYXNlX2Jsb2NrX29wY29kZSk7DQo+PiArDQo+ PiArwqDCoMKgIGVmaV9zdGF0dXNfdA0KPj4gK8KgwqDCoCAoRUZJQVBJICogd3JpdGVfc3Rh dHVzX3ByZWZpeCkoY29uc3Qgc3RydWN0IA0KPj4gZWZpX2xlZ2FjeV9zcGlfY29udHJvbGxl cl9wcm90b2NvbCAqdGhpcywNCj4+ICvCoMKgwqDCoMKgwqDCoCB1OCB3cml0ZV9zdGF0dXNf cHJlZml4KTsNCj4+ICsNCj4+ICvCoMKgwqAgZWZpX3N0YXR1c190DQo+PiArwqDCoMKgIChF RklBUEkgKiBiaW9zX2Jhc2VfYWRkcmVzcykoY29uc3Qgc3RydWN0IA0KPj4gZWZpX2xlZ2Fj eV9zcGlfY29udHJvbGxlcl9wcm90b2NvbCAqdGhpcywNCj4+ICvCoMKgwqDCoMKgwqDCoCB1 MzIgYmlvc19iYXNlX2FkZHJlc3MpOw0KPj4gKw0KPj4gK8KgwqDCoCBlZmlfc3RhdHVzX3QN Cj4+ICvCoMKgwqAgKEVGSUFQSSAqIGNsZWFyX3NwaV9wcm90ZWN0KShjb25zdCBzdHJ1Y3Qg DQo+PiBlZmlfbGVnYWN5X3NwaV9jb250cm9sbGVyX3Byb3RvY29sICp0aGlzKTsNCj4+ICsN Cj4+ICvCoMKgwqAgYm9vbA0KPj4gK8KgwqDCoCAoRUZJQVBJICogaXNfcmFuZ2VfcHJvdGVj dGVkKShjb25zdCBzdHJ1Y3QgDQo+PiBlZmlfbGVnYWN5X3NwaV9jb250cm9sbGVyX3Byb3Rv Y29sICp0aGlzLA0KPj4gK8KgwqDCoMKgwqDCoMKgIHUzMiBiaW9zX2FkZHJlc3MsDQo+PiAr wqDCoMKgwqDCoMKgwqAgdTMyIGJsb2Nrc190b19wcm90ZWN0KTsNCj4+ICsNCj4+ICvCoMKg wqAgZWZpX3N0YXR1c190DQo+PiArwqDCoMKgIChFRklBUEkgKiBwcm90ZWN0X25leHRfcmFu Z2UpKGNvbnN0IHN0cnVjdCANCj4+IGVmaV9sZWdhY3lfc3BpX2NvbnRyb2xsZXJfcHJvdG9j b2wgKnRoaXMsDQo+PiArwqDCoMKgwqDCoMKgwqAgdTMyIGJpb3NfYWRkcmVzcywNCj4+ICvC oMKgwqDCoMKgwqDCoCB1MzIgYmxvY2tzX3RvX3Byb3RlY3QpOw0KPj4gKw0KPj4gK8KgwqDC oCBlZmlfc3RhdHVzX3QNCj4+ICvCoMKgwqAgKEVGSUFQSSAqIGxvY2tfY29udHJvbGxlciko Y29uc3Qgc3RydWN0IA0KPj4gZWZpX2xlZ2FjeV9zcGlfY29udHJvbGxlcl9wcm90b2NvbCAq dGhpcyk7DQo+PiArfTsNCj4+ICsNCj4+ICtzdHJ1Y3QgZWZpX3NwaV9pb19wcm90b2NvbDsN Cj4+ICsNCj4+ICtlbnVtIGVmaV9zcGlfdHJhbnNhY3Rpb25fdHlwZSB7DQo+PiArwqDCoMKg IFNQSV9UUkFOU0FDVElPTl9GVUxMX0RVUExFWCwNCj4+ICvCoMKgwqAgU1BJX1RSQU5TQUNU SU9OX1dSSVRFX09OTFksDQo+PiArwqDCoMKgIFNQSV9UUkFOU0FDVElPTl9SRUFEX09OTFks DQo+PiArwqDCoMKgIFNQSV9UUkFOU0FDVElPTl9XUklURV9USEVOX1JFQUQNCj4+ICt9Ow0K Pj4gKw0KPj4gK3N0cnVjdCBlZmlfc3BpX2J1c190cmFuc2FjdGlvbiB7DQo+PiArwqDCoMKg IHN0cnVjdCBlZmlfc3BpX3BlcmlwaGVyYWwgKnNwaV9wZXJpcGhlcmFsOw0KPj4gK8KgwqDC oCBlbnVtIGVmaV9zcGlfdHJhbnNhY3Rpb25fdHlwZSB0cmFuc2FjdGlvbl90eXBlOw0KPj4g K8KgwqDCoCBib29sIGRlYnVnX3RyYW5zYWN0aW9uOw0KPj4gK8KgwqDCoCB1MzIgYnVzX3dp ZHRoOw0KPj4gK8KgwqDCoCB1MzIgZnJhbWVfc2l6ZTsNCj4+ICvCoMKgwqAgdTMyIHdyaXRl X2J5dGVzOw0KPj4gK8KgwqDCoCB1OCAqd3JpdGVfYnVmZmVyOw0KPj4gK8KgwqDCoCB1MzIg cmVhZF9ieXRlczsNCj4+ICvCoMKgwqAgdTggKnJlYWRfYnVmZmVyOw0KPj4gK307DQo+PiAr DQo+PiArc3RydWN0IGVmaV9zcGlfaW9fcHJvdG9jb2wgew0KPj4gK8KgwqDCoCBzdHJ1Y3Qg ZWZpX3NwaV9wZXJpcGhlcmFsICpzcGlfcGVyaXBoZXJhbDsNCj4+ICvCoMKgwqAgc3RydWN0 IGVmaV9zcGlfcGVyaXBoZXJhbCAqb3JpZ2luYWxfc3BpX3BlcmlwaGVyYWw7DQo+PiArwqDC oMKgIHUzMiBmcmFtZV9zaXplX3N1cHBvcnRfbWFzazsNCj4+ICvCoMKgwqAgdTMyIG1heGlt dW1fdHJhbnNmZXJfYnl0ZXM7DQo+PiArwqDCoMKgIHUzMiBhdHRyaWJ1dGVzOw0KPj4gK8Kg wqDCoCBzdHJ1Y3QgZWZpX2xlZ2FjeV9zcGlfY29udHJvbGxlcl9wcm90b2NvbCAqbGVnYWN5 X3NwaV9wcm90b2NvbDsNCj4+ICsNCj4+ICvCoMKgwqAgZWZpX3N0YXR1c190DQo+PiArwqDC oMKgIChFRklBUEkgKiB0cmFuc2FjdGlvbikoY29uc3Qgc3RydWN0IGVmaV9zcGlfaW9fcHJv dG9jb2wgKnRoaXMsDQo+PiArwqDCoMKgwqDCoMKgwqAgZW51bSBlZmlfc3BpX3RyYW5zYWN0 aW9uX3R5cGUgdHJhbnNhY3Rpb25fdHlwZSwNCj4+ICvCoMKgwqDCoMKgwqDCoCBib29sIGRl YnVnX3RyYW5zYWN0aW9uLA0KPj4gK8KgwqDCoMKgwqDCoMKgIHUzMiBjbG9ja19oeiwNCj4+ ICvCoMKgwqDCoMKgwqDCoCB1MzIgYnVzX3dpZHRoLA0KPj4gK8KgwqDCoMKgwqDCoMKgIHUz MiBmcmFtZV9zaXplLA0KPj4gK8KgwqDCoMKgwqDCoMKgIHUzMiB3cml0ZV9ieXRlcywNCj4+ ICvCoMKgwqDCoMKgwqDCoCB1OCAqd3JpdGVfYnVmZmVyLA0KPj4gK8KgwqDCoMKgwqDCoMKg IHUzMiByZWFkX2J5dGVzLA0KPj4gK8KgwqDCoMKgwqDCoMKgIHU4ICpyZWFkX2J1ZmZlcik7 DQo+PiArDQo+PiArwqDCoMKgIGVmaV9zdGF0dXNfdA0KPj4gK8KgwqDCoCAoRUZJQVBJICog dXBkYXRlX3NwaV9wZXJpcGhlcmFsKShzdHJ1Y3QgZWZpX3NwaV9pb19wcm90b2NvbCAqdGhp cywNCj4+ICvCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZWZpX3NwaV9wZXJpcGhlcmFsICpzcGlf cGVyaXBoZXJhbCk7DQo+PiArfTsNCj4+ICsNCj4+ICtzdHJ1Y3QgZWZpX3NwaV9wZXJpcGhl cmFsX3ByaXYgew0KPj4gK8KgwqDCoCBzdHJ1Y3QgZWZpX3NwaV9wZXJpcGhlcmFsIHBlcmlw aGVyYWw7DQo+PiArwqDCoMKgIHN0cnVjdCBlZmlfc3BpX3BhcnQgcGFydDsNCj4+ICvCoMKg wqAgc3RydWN0IGVmaV9zcGlfaW9fcHJvdG9jb2wgaW9fcHJvdG9jb2w7DQo+PiArwqDCoMKg IGVmaV9oYW5kbGVfdCBoYW5kbGU7DQo+PiArwqDCoMKgIHN0cnVjdCBzcGlfc2xhdmUgKnRh cmdldDsNCj4+ICt9Ow0KPj4gKw0KPj4gK2VmaV9zdGF0dXNfdCBlZmlfc3BpX3Byb3RvY29s X3JlZ2lzdGVyKHZvaWQpOw0KPj4gKw0KPj4gKyNlbmRpZg0KPj4gZGlmZiAtLWdpdCBhL2xp Yi9lZmlfbG9hZGVyL0tjb25maWcgYi9saWIvZWZpX2xvYWRlci9LY29uZmlnDQo+PiBpbmRl eCBlM2YyNDAyZDBlOGUuLmM1ODk5YTZmNmU1MiAxMDA2NDQNCj4+IC0tLSBhL2xpYi9lZmlf bG9hZGVyL0tjb25maWcNCj4+ICsrKyBiL2xpYi9lZmlfbG9hZGVyL0tjb25maWcNCj4+IEBA IC0zOTQsNCArMzk0LDEyIEBAIGNvbmZpZyBFRklfUklTQ1ZfQk9PVF9QUk9UT0NPTA0KPj4g wqDCoMKgwqDCoMKgwqAgcmVwbGFjZSB0aGUgdHJhbnNmZXIgdmlhIHRoZSBkZXZpY2UtdHJl ZS4gVGhlIGxhdHRlciBpcyBub3QNCj4+IMKgwqDCoMKgwqDCoMKgIHBvc3NpYmxlIG9uIHN5 c3RlbXMgdXNpbmcgQUNQSS4NCj4+DQo+PiArY29uZmlnIEVGSV9TUElfUFJPVE9DT0wNCj4+ ICvCoMKgwqAgYm9vbCAiRUZJIFNQSSBwcm90b2NvbCBzdXBwb3J0Ig0KPj4gK8KgwqDCoCBk ZXBlbmRzIG9uIERNX1NQSQ0KPj4gK8KgwqDCoCBoZWxwDQo+PiArwqDCoMKgwqDCoCBQcm92 aWRlIGltcGxlbWVudGF0aW9ucyBvZiBFRklfU1BJX0NPTkZJR1VSQVRJT05fUFJPVE9DT0wg YW5kDQo+PiArwqDCoMKgwqDCoCBFRklfU1BJX0lPX1BST1RPQ09MIHRvIGFsbG93IFVFRkkg YXBwbGljYXRpb25zIHRvIGFjY2VzcyBkZXZpY2VzDQo+PiArwqDCoMKgwqDCoCBjb25uZWN0 ZWQgdmlhIFNQSSBidXMuDQo+PiArDQo+PiDCoCBlbmRpZg0KPj4gZGlmZiAtLWdpdCBhL2xp Yi9lZmlfbG9hZGVyL01ha2VmaWxlIGIvbGliL2VmaV9sb2FkZXIvTWFrZWZpbGUNCj4+IGlu ZGV4IGY1NGMyNDRjMzI2OC4uOWZhMGQyNzkyN2I2IDEwMDY0NA0KPj4gLS0tIGEvbGliL2Vm aV9sb2FkZXIvTWFrZWZpbGUNCj4+ICsrKyBiL2xpYi9lZmlfbG9hZGVyL01ha2VmaWxlDQo+ PiBAQCAtNzQsNiArNzQsNyBAQCBvYmotJChDT05GSUdfR0VORVJBVEVfU01CSU9TX1RBQkxF KSArPSBlZmlfc21iaW9zLm8NCj4+IMKgIG9iai0kKENPTkZJR19FRklfUk5HX1BST1RPQ09M KSArPSBlZmlfcm5nLm8NCj4+IMKgIG9iai0kKENPTkZJR19FRklfVENHMl9QUk9UT0NPTCkg Kz0gZWZpX3RjZzIubw0KPj4gwqAgb2JqLSQoQ09ORklHX0VGSV9SSVNDVl9CT09UX1BST1RP Q09MKSArPSBlZmlfcmlzY3Yubw0KPj4gK29iai0kKENPTkZJR19FRklfU1BJX1BST1RPQ09M KSArPSBlZmlfc3BpX3Byb3RvY29sLm8NCj4+IMKgIG9iai0kKENPTkZJR19FRklfTE9BRF9G SUxFMl9JTklUUkQpICs9IGVmaV9sb2FkX2luaXRyZC5vDQo+PiDCoCBvYmotJChDT05GSUdf RUZJX1NJR05BVFVSRV9TVVBQT1JUKSArPSBlZmlfc2lnbmF0dXJlLm8NCj4+DQo+PiBkaWZm IC0tZ2l0IGEvbGliL2VmaV9sb2FkZXIvZWZpX3NldHVwLmMgYi9saWIvZWZpX2xvYWRlci9l Zmlfc2V0dXAuYw0KPj4gaW5kZXggNDkyZWNmNGNiMTVjLi5lZjFlZTk4NjJiNzIgMTAwNjQ0 DQo+PiAtLS0gYS9saWIvZWZpX2xvYWRlci9lZmlfc2V0dXAuYw0KPj4gKysrIGIvbGliL2Vm aV9sb2FkZXIvZWZpX3NldHVwLmMNCj4+IEBAIC0yOTUsNiArMjk1LDEyIEBAIGVmaV9zdGF0 dXNfdCBlZmlfaW5pdF9vYmpfbGlzdCh2b2lkKQ0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgZ290byBvdXQ7DQo+PiDCoMKgwqDCoMKgIH0NCj4+DQo+PiArwqDCoMKgIGlmIChJ U19FTkFCTEVEKENPTkZJR19FRklfU1BJX1BST1RPQ09MKSkgew0KPj4gK8KgwqDCoMKgwqDC oMKgIHJldCA9IGVmaV9zcGlfcHJvdG9jb2xfcmVnaXN0ZXIoKTsNCj4+ICvCoMKgwqDCoMKg wqDCoCBpZiAocmV0ICE9IEVGSV9TVUNDRVNTKQ0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZ290byBvdXQ7DQo+PiArwqDCoMKgIH0NCj4+ICsNCj4+IMKgwqDCoMKgwqAgLyogU2Vj dXJlIGJvb3QgKi8NCj4+IMKgwqDCoMKgwqAgcmV0ID0gZWZpX2luaXRfc2VjdXJlX2Jvb3Qo KTsNCj4+IMKgwqDCoMKgwqAgaWYgKHJldCAhPSBFRklfU1VDQ0VTUykNCj4+IGRpZmYgLS1n aXQgYS9saWIvZWZpX2xvYWRlci9lZmlfc3BpX3Byb3RvY29sLmMgDQo+PiBiL2xpYi9lZmlf bG9hZGVyL2VmaV9zcGlfcHJvdG9jb2wuYw0KPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4+ IGluZGV4IDAwMDAwMDAwMDAwMC4uYzQ5MTc0MWNiYmYxDQo+PiAtLS0gL2Rldi9udWxsDQo+ PiArKysgYi9saWIvZWZpX2xvYWRlci9lZmlfc3BpX3Byb3RvY29sLmMNCj4+IEBAIC0wLDAg KzEsNjE0IEBADQo+PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArDQo+ PiArLyoNCj4+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjIgTWljcm9uIFRlY2hub2xvZ3ksIElu Yy4NCj4+ICsgKi8NCj4+ICsNCj4+ICsjZGVmaW5lIExPR19DQVRFR09SWSBMT0dDX0VGSQ0K Pj4gKw0KPj4gKyNpbmNsdWRlIDxjb21tb24uaD4NCj4+ICsjaW5jbHVkZSA8ZG0vZGV2aWNl Lmg+DQo+PiArI2luY2x1ZGUgPGRtL2RldmljZS1pbnRlcm5hbC5oPg0KPj4gKyNpbmNsdWRl IDxkbS9yZWFkLmg+DQo+PiArI2luY2x1ZGUgPGVmaS5oPg0KPj4gKyNpbmNsdWRlIDxlZmlf bG9hZGVyLmg+DQo+PiArI2luY2x1ZGUgPGVmaV9zcGlfcHJvdG9jb2wuaD4NCj4+ICsjaW5j bHVkZSA8bWFsbG9jLmg+DQo+PiArI2luY2x1ZGUgPHNwaS5oPg0KPj4gKw0KPj4gK3N0YXRp YyBlZmlfc3RyaW5nX3QgY29udmVydF9lZmlfc3RyaW5nKGNvbnN0IGNoYXIgKnN0cikNCj4+ ICt7DQo+PiArwqDCoMKgIGVmaV9zdHJpbmdfdCBzdHJfMTYsIHRtcDsNCj4+ICvCoMKgwqAg c2l6ZV90IHN6XzgsIHN6XzE2Ow0KPj4gKw0KPj4gK8KgwqDCoCBzel84ID0gc3RybGVuKHN0 cik7DQo+PiArwqDCoMKgIHN6XzE2ID0gdXRmOF91dGYxNl9zdHJsZW4oc3RyKTsNCj4+ICvC oMKgwqAgc3RyXzE2ID0gY2FsbG9jKHN6XzE2ICsgMSwgMik7DQo+PiArwqDCoMKgIGlmICgh c3RyXzE2KQ0KPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBOVUxMOw0KPj4gKw0KPj4gK8Kg wqDCoCB0bXAgPSBzdHJfMTY7DQo+PiArwqDCoMKgIHV0ZjhfdXRmMTZfc3RyY3B5KCZ0bXAs IHN0cik7DQo+PiArDQo+PiArwqDCoMKgIHJldHVybiBzdHJfMTY7DQo+PiArfQ0KPj4gKw0K Pj4gK3N0YXRpYyB2b2lkIGR1bXBfYnVmZmVyKGNvbnN0IGNoYXIgKm1zZywgdTMyIGxlbmd0 aCwgdTggKmJ1ZmZlcikNCj4+ICt7DQo+PiArwqDCoMKgIHUzMiBpOw0KPj4gK8KgwqDCoCBF RklfUFJJTlQoIiVzICVkIGJ5dGVzOiIsIG1zZywgbGVuZ3RoKTsNCj4+ICvCoMKgwqAgZm9y IChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQ0KPj4gK8KgwqDCoMKgwqDCoMKgIEVGSV9QUklO VCgiICUwMngiLCBidWZmZXJbaV0pOw0KPj4gK8KgwqDCoCBFRklfUFJJTlQoIlxuIik7DQo+ PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBlZmlfc3RhdHVzX3QgRUZJQVBJDQo+PiArZWZpX3Nw aV9idXNfY2xvY2soY29uc3Qgc3RydWN0IGVmaV9zcGlfcGVyaXBoZXJhbCAqc3BpX3Blcmlw aGVyYWwsDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgIHUzMiAqY2xvY2tfaHopDQo+PiArew0K Pj4gK8KgwqDCoCBFRklfRU5UUlkoIiVwLCAlcCIsIHNwaV9wZXJpcGhlcmFsLCBjbG9ja19o eik7DQo+PiArwqDCoMKgIHJldHVybiBFRklfRVhJVChFRklfVU5TVVBQT1JURUQpOw0KPj4g K30NCj4+ICsNCj4+ICtzdGF0aWMgZWZpX3N0YXR1c190IEVGSUFQSQ0KPj4gK2VmaV9zcGlf cGVyaXBoZXJhbF9jaGlwX3NlbGVjdChjb25zdCBzdHJ1Y3QgZWZpX3NwaV9wZXJpcGhlcmFs IA0KPj4gKnNwaV9wZXJpcGhlcmFsLA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBib29sIHBpbl92YWx1ZSkNCj4+ICt7DQo+PiArwqDCoMKgIEVGSV9FTlRS WSgiJXAsICVkIiwgc3BpX3BlcmlwaGVyYWwsIHBpbl92YWx1ZSk7DQo+PiArwqDCoMKgIHJl dHVybiBFRklfRVhJVChFRklfVU5TVVBQT1JURUQpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0 aWMgZWZpX3N0YXR1c190IEVGSUFQSQ0KPj4gK2xlZ2FjeV9lcmFzZV9ibG9ja19vcGNvZGUo Y29uc3Qgc3RydWN0IA0KPj4gZWZpX2xlZ2FjeV9zcGlfY29udHJvbGxlcl9wcm90b2NvbCAq dGhpcywNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1OCBlcmFzZV9ibG9ja19v cGNvZGUpDQo+PiArew0KPj4gK8KgwqDCoCBFRklfRU5UUlkoIiVwLCAldSIsIHRoaXMsIGVy YXNlX2Jsb2NrX29wY29kZSk7DQo+PiArwqDCoMKgIHJldHVybiBFRklfRVhJVChFRklfVU5T VVBQT1JURUQpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgZWZpX3N0YXR1c190IEVGSUFQ SQ0KPj4gK2xlZ2FjeV93cml0ZV9zdGF0dXNfcHJlZml4KGNvbnN0IHN0cnVjdCANCj4+IGVm aV9sZWdhY3lfc3BpX2NvbnRyb2xsZXJfcHJvdG9jb2wgKnRoaXMsDQo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCB1OCB3cml0ZV9zdGF0dXNfcHJlZml4KQ0KPj4gK3sNCj4+ ICvCoMKgwqAgRUZJX0VOVFJZKCIlcCwgJXUiLCB0aGlzLCB3cml0ZV9zdGF0dXNfcHJlZml4 KTsNCj4+ICvCoMKgwqAgcmV0dXJuIEVGSV9FWElUKEVGSV9VTlNVUFBPUlRFRCk7DQo+PiAr fQ0KPj4gKw0KPj4gK3N0YXRpYyBlZmlfc3RhdHVzX3QgRUZJQVBJDQo+PiArbGVnYWN5X2Jp b3NfYmFzZV9hZGRyZXNzKGNvbnN0IHN0cnVjdCANCj4+IGVmaV9sZWdhY3lfc3BpX2NvbnRy b2xsZXJfcHJvdG9jb2wgKnRoaXMsDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUz MiBiaW9zX2Jhc2VfYWRkcmVzcykNCj4+ICt7DQo+PiArwqDCoMKgIEVGSV9FTlRSWSgiJXAs ICV1IiwgdGhpcywgYmlvc19iYXNlX2FkZHJlc3MpOw0KPj4gK8KgwqDCoCByZXR1cm4gRUZJ X0VYSVQoRUZJX1VOU1VQUE9SVEVEKTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGVmaV9z dGF0dXNfdCBFRklBUEkNCj4+ICtsZWdhY3lfY2xlYXJfc3BpX3Byb3RlY3QoY29uc3Qgc3Ry dWN0IA0KPj4gZWZpX2xlZ2FjeV9zcGlfY29udHJvbGxlcl9wcm90b2NvbCAqdGhpcykNCj4+ ICt7DQo+PiArwqDCoMKgIEVGSV9FTlRSWSgiJXAiLCB0aGlzKTsNCj4+ICvCoMKgwqAgcmV0 dXJuIEVGSV9FWElUKEVGSV9VTlNVUFBPUlRFRCk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRp YyBib29sIEVGSUFQSQ0KPj4gK2xlZ2FjeV9pc19yYW5nZV9wcm90ZWN0ZWQoY29uc3Qgc3Ry dWN0IA0KPj4gZWZpX2xlZ2FjeV9zcGlfY29udHJvbGxlcl9wcm90b2NvbCAqdGhpcywNCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1MzIgYmlvc19hZGRyZXNzLA0KPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUzMiBibG9ja3NfdG9fcHJvdGVjdCkNCj4+ICt7 DQo+PiArwqDCoMKgIEVGSV9FTlRSWSgiJXAsICV1LCAldSIsIHRoaXMsIGJpb3NfYWRkcmVz cywgYmxvY2tzX3RvX3Byb3RlY3QpOw0KPj4gK8KgwqDCoCByZXR1cm4gRUZJX0VYSVQoZmFs c2UpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgZWZpX3N0YXR1c190IEVGSUFQSQ0KPj4g K2xlZ2FjeV9wcm90ZWN0X25leHRfcmFuZ2UoY29uc3Qgc3RydWN0IA0KPj4gZWZpX2xlZ2Fj eV9zcGlfY29udHJvbGxlcl9wcm90b2NvbCAqdGhpcywNCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB1MzIgYmlvc19hZGRyZXNzLA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHUzMiBibG9ja3NfdG9fcHJvdGVjdCkNCj4+ICt7DQo+PiArwqDCoMKgIEVGSV9F TlRSWSgiJXAsICV1LCAldSIsIHRoaXMsIGJpb3NfYWRkcmVzcywgYmxvY2tzX3RvX3Byb3Rl Y3QpOw0KPj4gK8KgwqDCoCByZXR1cm4gRUZJX0VYSVQoRUZJX1VOU1VQUE9SVEVEKTsNCj4+ ICt9DQo+PiArDQo+PiArc3RhdGljIGVmaV9zdGF0dXNfdCBFRklBUEkNCj4+ICtsZWdhY3lf bG9ja19jb250cm9sbGVyKGNvbnN0IHN0cnVjdCANCj4+IGVmaV9sZWdhY3lfc3BpX2NvbnRy b2xsZXJfcHJvdG9jb2wgKnRoaXMpDQo+PiArew0KPj4gK8KgwqDCoCBFRklfRU5UUlkoIiVw IiwgdGhpcyk7DQo+PiArwqDCoMKgIHJldHVybiBFRklfRVhJVChFRklfVU5TVVBQT1JURUQp Ow0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgZWZpX3N0YXR1c190IEVGSUFQSQ0KPj4gK2Vm aV9zcGlfaW9fdXBkYXRlX3NwaV9wZXJpcGhlcmFsKHN0cnVjdCBlZmlfc3BpX2lvX3Byb3Rv Y29sICp0aGlzLA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVj dCBlZmlfc3BpX3BlcmlwaGVyYWwgKnNwaV9wZXJpcGhlcmFsKQ0KPj4gK3sNCj4+ICvCoMKg wqAgRUZJX0VOVFJZKCIlcCwgJXAiLCB0aGlzLCBzcGlfcGVyaXBoZXJhbCk7DQo+PiArwqDC oMKgIHJldHVybiBFRklfRVhJVChFRklfVU5TVVBQT1JURUQpOw0KPj4gK30NCj4+ICsNCj4+ ICtzdGF0aWMgZWZpX3N0YXR1c190IEVGSUFQSQ0KPj4gK2VmaV9zcGlfaW9fdHJhbnNhY3Rp b24oY29uc3Qgc3RydWN0IGVmaV9zcGlfaW9fcHJvdG9jb2wgKnRoaXMsDQo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbnVtIGVmaV9zcGlfdHJhbnNhY3Rpb25fdHlwZSB0 cmFuc2FjdGlvbl90eXBlLA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYm9v bCBkZWJ1Z190cmFuc2FjdGlvbiwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHUzMiBjbG9ja19oeiwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUzMiBi dXNfd2lkdGgsDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1MzIgZnJhbWVf c2l6ZSwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUzMiB3cml0ZV9ieXRl cywNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHU4ICp3cml0ZV9idWZmZXIs DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1MzIgcmVhZF9ieXRlcywNCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHU4ICpyZWFkX2J1ZmZlcikNCj4+ICt7 DQo+PiArwqDCoMKgIHN0cnVjdCBzcGlfc2xhdmUgKnRhcmdldDsNCj4+ICvCoMKgwqAgZWZp X3N0YXR1c190IHN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KPj4gK8KgwqDCoCBpbnQgcjsNCj4+ ICsNCj4+ICvCoMKgwqAgLyogV2UgaWdub3JlIHRoZSBidXNfd2lkdGggYW5kIGZyYW1lX3Np emUgYXJndW1lbnRzIHRvIHRoaXMgDQo+PiBmdW5jdGlvbiBhcyB0aGUNCj4+ICvCoMKgwqDC oCAqIGFwcHJvcHJpYXRlIGJ1cyBjb25maWd1cmF0aW9uIGZvciB0aGUgY29ubmVjdGVkIGRl dmljZSB3aWxsIGJlIA0KPj4gcGVyZm9ybWVkDQo+PiArwqDCoMKgwqAgKiBkdXJpbmcgc3Bp X2NsYWltX2J1cygpLg0KPj4gK8KgwqDCoMKgICovDQo+PiArDQo+PiArwqDCoMKgIC8qIFRP RE86IFByaW50IHRyYW5zYWN0aW9uIGRldGFpbHMgaWYgZGVidWdfdHJhbnNhY3Rpb24gaXMg dHJ1ZS4gKi8NCj4+ICsNCj4+ICvCoMKgwqAgRUZJX0VOVFJZKCIlcCwgJXUsICV1LCAldSwg JXUsICV1LCAldSwgJXAsICV1LCAlcCIsDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgIHRoaXMs IHRyYW5zYWN0aW9uX3R5cGUsIGRlYnVnX3RyYW5zYWN0aW9uLA0KPj4gK8KgwqDCoMKgwqDC oMKgwqDCoCBjbG9ja19oeiwgYnVzX3dpZHRoLCBmcmFtZV9zaXplLA0KPj4gK8KgwqDCoMKg wqDCoMKgwqDCoCB3cml0ZV9ieXRlcywgd3JpdGVfYnVmZmVyLCByZWFkX2J5dGVzLCByZWFk X2J1ZmZlcik7DQo+PiArDQo+PiArwqDCoMKgIGlmICghdGhpcykNCj4+ICvCoMKgwqDCoMKg wqDCoCByZXR1cm4gRUZJX0VYSVQoRUZJX0lOVkFMSURfUEFSQU1FVEVSKTsNCj4+ICsNCj4+ ICvCoMKgwqAgdGFyZ2V0ID0gY29udGFpbmVyX29mKHRoaXMsIHN0cnVjdCBlZmlfc3BpX3Bl cmlwaGVyYWxfcHJpdiwgDQo+PiBpb19wcm90b2NvbCktPnRhcmdldDsNCj4+ICsNCj4+ICvC oMKgwqAgaWYgKGNsb2NrX2h6ID4gdGhpcy0+c3BpX3BlcmlwaGVyYWwtPm1heF9jbG9ja19o eikNCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gRUZJX0VYSVQoRUZJX1VOU1VQUE9SVEVE KTsNCj4+ICsNCj4+ICvCoMKgwqAgciA9IHNwaV9jbGFpbV9idXModGFyZ2V0KTsNCj4+ICvC oMKgwqAgaWYgKHIgIT0gMCkNCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gRUZJX0VYSVQo RUZJX0RFVklDRV9FUlJPUik7DQo+PiArwqDCoMKgIEVGSV9QUklOVCgiU1BJIElPOiBCdXMg Y2xhaW1lZFxuIik7DQo+PiArDQo+PiArwqDCoMKgIGlmIChjbG9ja19oeikgew0KPj4gK8Kg wqDCoMKgwqDCoMKgIEVGSV9QUklOVCgiU1BJIElPOiBTZXR0aW5nIGNsb2NrIHJhdGUgdG8g JXUgSHpcbiIsIGNsb2NrX2h6KTsNCj4+ICsgICAgICAgIA0KPj4gc3BpX2dldF9vcHModGFy Z2V0LT5kZXYtPnBhcmVudCktPnNldF9zcGVlZCh0YXJnZXQtPmRldi0+cGFyZW50LCANCj4+ IGNsb2NrX2h6KTsNCj4+ICvCoMKgwqAgfSBlbHNlIHsNCj4+ICvCoMKgwqDCoMKgwqDCoCBF RklfUFJJTlQoIlNQSSBJTzogVXNpbmcgZGVmYXVsdCBjbG9jayByYXRlXG4iKTsNCj4+ICvC oMKgwqAgfQ0KPj4gKw0KPj4gK8KgwqDCoCBzd2l0Y2ggKHRyYW5zYWN0aW9uX3R5cGUpIHsN Cj4+ICvCoMKgwqAgY2FzZSBTUElfVFJBTlNBQ1RJT05fRlVMTF9EVVBMRVg6DQo+PiArwqDC oMKgwqDCoMKgwqAgRUZJX1BSSU5UKCJTUEkgSU86IEZ1bGwtZHVwbGV4XG4iKTsNCj4+ICvC oMKgwqDCoMKgwqDCoCBpZiAod3JpdGVfYnl0ZXMgIT0gcmVhZF9ieXRlcyB8fCAhd3JpdGVf Ynl0ZXMgfHwgDQo+PiAhd3JpdGVfYnVmZmVyIHx8ICFyZWFkX2J1ZmZlcikgew0KPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RhdHVzID0gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0K Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7DQo+PiArwqDCoMKgwqDCoMKgwqAg fQ0KPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChkZWJ1Z190cmFuc2FjdGlvbikNCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGR1bXBfYnVmZmVyKCJTUEkgSU86IHdyaXRlIiwgd3JpdGVf Ynl0ZXMsIHdyaXRlX2J1ZmZlcik7DQo+PiArwqDCoMKgwqDCoMKgwqAgciA9IHNwaV94ZmVy KHRhcmdldCwgOCAqIHdyaXRlX2J5dGVzLA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHdyaXRlX2J1ZmZlciwgcmVhZF9idWZmZXIsIFNQSV9YRkVSX09OQ0UpOw0K Pj4gK8KgwqDCoMKgwqDCoMKgIEVGSV9QUklOVCgiU1BJIElPOiB4ZmVyIHJldHVybmVkICVk XG4iLCByKTsNCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoZGVidWdfdHJhbnNhY3Rpb24pDQo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkdW1wX2J1ZmZlcigiU1BJIElPOiByZWFkIiwg cmVhZF9ieXRlcywgcmVhZF9idWZmZXIpOw0KPj4gK8KgwqDCoMKgwqDCoMKgIHN0YXR1cyA9 IChyID09IDApID8gRUZJX1NVQ0NFU1MgOiBFRklfREVWSUNFX0VSUk9SOw0KPj4gK8KgwqDC oMKgwqDCoMKgIGJyZWFrOw0KPj4gK8KgwqDCoCBjYXNlIFNQSV9UUkFOU0FDVElPTl9SRUFE X09OTFk6DQo+PiArwqDCoMKgwqDCoMKgwqAgRUZJX1BSSU5UKCJTUEkgSU86IFJlYWQtb25s eVxuIik7DQo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCFyZWFkX2J5dGVzIHx8ICFyZWFkX2J1 ZmZlcikgew0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RhdHVzID0gRUZJX0lOVkFM SURfUEFSQU1FVEVSOw0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7DQo+PiAr wqDCoMKgwqDCoMKgwqAgfQ0KPj4gK8KgwqDCoMKgwqDCoMKgIHIgPSBzcGlfeGZlcih0YXJn ZXQsIDggKiByZWFkX2J5dGVzLA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIE5VTEwsIHJlYWRfYnVmZmVyLCBTUElfWEZFUl9PTkNFKTsNCj4+ICvCoMKgwqDCoMKg wqDCoCBFRklfUFJJTlQoIlNQSSBJTzogeGZlciByZXR1cm5lZCAlZFxuIiwgcik7DQo+PiAr wqDCoMKgwqDCoMKgwqAgaWYgKGRlYnVnX3RyYW5zYWN0aW9uKQ0KPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgZHVtcF9idWZmZXIoIlNQSSBJTzogcmVhZCIsIHJlYWRfYnl0ZXMsIHJl YWRfYnVmZmVyKTsNCj4+ICvCoMKgwqDCoMKgwqDCoCBzdGF0dXMgPSAociA9PSAwKSA/IEVG SV9TVUNDRVNTIDogRUZJX0RFVklDRV9FUlJPUjsNCj4+ICvCoMKgwqDCoMKgwqDCoCBicmVh azsNCj4+ICvCoMKgwqAgY2FzZSBTUElfVFJBTlNBQ1RJT05fV1JJVEVfT05MWToNCj4+ICvC oMKgwqDCoMKgwqDCoCBFRklfUFJJTlQoIlNQSSBJTzogV3JpdGUtb25seVxuIik7DQo+PiAr wqDCoMKgwqDCoMKgwqAgaWYgKCF3cml0ZV9ieXRlcyB8fCAhd3JpdGVfYnVmZmVyKSB7DQo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdGF0dXMgPSBFRklfSU5WQUxJRF9QQVJBTUVU RVI7DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsNCj4+ICvCoMKgwqDCoMKg wqDCoCB9DQo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKGRlYnVnX3RyYW5zYWN0aW9uKQ0KPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZHVtcF9idWZmZXIoIlNQSSBJTzogd3JpdGUiLCB3 cml0ZV9ieXRlcywgd3JpdGVfYnVmZmVyKTsNCj4+ICvCoMKgwqDCoMKgwqDCoCByID0gc3Bp X3hmZXIodGFyZ2V0LCA4ICogd3JpdGVfYnl0ZXMsDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgd3JpdGVfYnVmZmVyLCBOVUxMLCBTUElfWEZFUl9PTkNFKTsNCj4+ ICvCoMKgwqDCoMKgwqDCoCBFRklfUFJJTlQoIlNQSSBJTzogeGZlciByZXR1cm5lZCAlZFxu Iiwgcik7DQo+PiArwqDCoMKgwqDCoMKgwqAgc3RhdHVzID0gKHIgPT0gMCkgPyBFRklfU1VD Q0VTUyA6IEVGSV9ERVZJQ0VfRVJST1I7DQo+PiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7DQo+ PiArwqDCoMKgIGNhc2UgU1BJX1RSQU5TQUNUSU9OX1dSSVRFX1RIRU5fUkVBRDoNCj4+ICvC oMKgwqDCoMKgwqDCoCBFRklfUFJJTlQoIlNQSSBJTzogV3JpdGUtdGhlbi1yZWFkXG4iKTsN Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIXdyaXRlX2J5dGVzIHx8ICF3cml0ZV9idWZmZXIg fHwgIXJlYWRfYnl0ZXMgfHwgDQo+PiAhcmVhZF9idWZmZXIpIHsNCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHN0YXR1cyA9IEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOw0KPj4gK8KgwqDCoMKgwqDCoMKgIH0NCj4+ICvC oMKgwqDCoMKgwqDCoCBpZiAoZGVidWdfdHJhbnNhY3Rpb24pDQo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBkdW1wX2J1ZmZlcigiU1BJIElPOiB3cml0ZSIsIHdyaXRlX2J5dGVzLCB3 cml0ZV9idWZmZXIpOw0KPj4gK8KgwqDCoMKgwqDCoMKgIHIgPSBzcGlfeGZlcih0YXJnZXQs IDggKiB3cml0ZV9ieXRlcywNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB3cml0ZV9idWZmZXIsIE5VTEwsIFNQSV9YRkVSX0JFR0lOKTsNCj4+ICvCoMKgwqDCoMKg wqDCoCBFRklfUFJJTlQoIlNQSSBJTzogeGZlciBbMS8yXSByZXR1cm5lZCAlZFxuIiwgcik7 DQo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHIgIT0gMCkgew0KPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgc3RhdHVzID0gRUZJX0RFVklDRV9FUlJPUjsNCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGJyZWFrOw0KPj4gK8KgwqDCoMKgwqDCoMKgIH0NCj4+ICvCoMKgwqDCoMKg wqDCoCByID0gc3BpX3hmZXIodGFyZ2V0LCA4ICogcmVhZF9ieXRlcywNCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBOVUxMLCByZWFkX2J1ZmZlciwgU1BJX1hGRVJf RU5EKTsNCj4+ICvCoMKgwqDCoMKgwqDCoCBFRklfUFJJTlQoIlNQSSBJTzogeGZlciBbMi8y XSByZXR1cm5lZCAlZFxuIiwgcik7DQo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKGRlYnVnX3Ry YW5zYWN0aW9uKQ0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZHVtcF9idWZmZXIoIlNQ SSBJTzogcmVhZCIsIHJlYWRfYnl0ZXMsIHJlYWRfYnVmZmVyKTsNCj4+ICvCoMKgwqDCoMKg wqDCoCBzdGF0dXMgPSAociA9PSAwKSA/IEVGSV9TVUNDRVNTIDogRUZJX0RFVklDRV9FUlJP UjsNCj4+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsNCj4+ICvCoMKgwqAgZGVmYXVsdDoNCj4+ ICvCoMKgwqDCoMKgwqDCoCBzdGF0dXMgPSBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+PiAr wqDCoMKgwqDCoMKgwqAgYnJlYWs7DQo+PiArwqDCoMKgIH0NCj4+ICsNCj4+ICvCoMKgwqAg c3BpX3JlbGVhc2VfYnVzKHRhcmdldCk7DQo+PiArwqDCoMKgIEVGSV9QUklOVCgiU1BJIElP OiBSZWxlYXNlZCBidXNcbiIpOw0KPj4gK8KgwqDCoCByZXR1cm4gRUZJX0VYSVQoc3RhdHVz KTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHN0cnVjdCBlZmlfZGV2aWNlX3BhdGggbnVs bF9kZXZpY2VfcGF0aCA9IHsNCj4+ICvCoMKgwqAgLnR5cGXCoMKgwqDCoCA9IERFVklDRV9Q QVRIX1RZUEVfRU5ELA0KPj4gK8KgwqDCoCAuc3ViX3R5cGUgPSBERVZJQ0VfUEFUSF9TVUJf VFlQRV9FTkQsDQo+PiArwqDCoMKgIC5sZW5ndGjCoMKgID0gNA0KPj4gK307DQo+PiArDQo+ PiArc3RhdGljIHN0cnVjdCBlZmlfbGVnYWN5X3NwaV9jb250cm9sbGVyX3Byb3RvY29sDQo+ PiArZHVtbXlfbGVnYWN5X3NwaV9jb250cm9sbGVyX3Byb3RvY29sID0gew0KPj4gK8KgwqDC oCAubWF4aW11bV9vZmZzZXQgPSAwLA0KPj4gK8KgwqDCoCAubWF4aW11bV9yYW5nZV9ieXRl cyA9IDAsDQo+PiArwqDCoMKgIC5yYW5nZV9yZWdpc3Rlcl9jb3VudCA9IDAsDQo+PiArwqDC oMKgIC5lcmFzZV9ibG9ja19vcGNvZGUgPSBsZWdhY3lfZXJhc2VfYmxvY2tfb3Bjb2RlLA0K Pj4gK8KgwqDCoCAud3JpdGVfc3RhdHVzX3ByZWZpeCA9IGxlZ2FjeV93cml0ZV9zdGF0dXNf cHJlZml4LA0KPj4gK8KgwqDCoCAuYmlvc19iYXNlX2FkZHJlc3MgPSBsZWdhY3lfYmlvc19i YXNlX2FkZHJlc3MsDQo+PiArwqDCoMKgIC5jbGVhcl9zcGlfcHJvdGVjdCA9IGxlZ2FjeV9j bGVhcl9zcGlfcHJvdGVjdCwNCj4+ICvCoMKgwqAgLmlzX3JhbmdlX3Byb3RlY3RlZCA9IGxl Z2FjeV9pc19yYW5nZV9wcm90ZWN0ZWQsDQo+PiArwqDCoMKgIC5wcm90ZWN0X25leHRfcmFu Z2UgPSBsZWdhY3lfcHJvdGVjdF9uZXh0X3JhbmdlLA0KPj4gK8KgwqDCoCAubG9ja19jb250 cm9sbGVyID0gbGVnYWN5X2xvY2tfY29udHJvbGxlcg0KPj4gK307DQo+IA0KPiBJbiB0aGUg Y29tbWl0IG1lc3NhZ2UgeW91IHNhaWQgdGhhdCB0aGUgbGVnYWN5IHByb3RvY29sIHdpbGwg bm90IGJlDQo+IGltcGxlbWVudGVkLg0KPiANCj4gV2h5IHdvdWxkIGEgKmxlZ2FjeSogYmUg aW1wbGVtZW50ZWQ/DQoNCkFzIGV4cGxhaW5lZCBhYm92ZS4NCg0KPiANCj4+ICsNCj4+ICtz dGF0aWMgZWZpX2d1aWRfdCBlZmlfc3BpX2NvbmZpZ3VyYXRpb25fZ3VpZCA9IA0KPj4gRUZJ X1NQSV9DT05GSUdVUkFUSU9OX0dVSUQ7DQo+PiArDQo+PiArc3RhdGljIHZvaWQgZGVzdHJv eV9lZmlfc3BpX3BlcmlwaGVyYWwoc3RydWN0IGVmaV9zcGlfcGVyaXBoZXJhbCANCj4+ICpw ZXJpcGhlcmFsKQ0KPj4gK3sNCj4+ICvCoMKgwqAgc3RydWN0IGVmaV9zcGlfcGVyaXBoZXJh bF9wcml2ICpwcml2ID0NCj4+ICvCoMKgwqDCoMKgwqDCoCBjb250YWluZXJfb2YocGVyaXBo ZXJhbCwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZWZp X3NwaV9wZXJpcGhlcmFsX3ByaXYsDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgcGVyaXBoZXJhbCk7DQo+PiArwqDCoMKgIGZyZWUocHJpdi0+cGVyaXBoZXJhbC5m cmllbmRseV9uYW1lKTsNCj4+ICvCoMKgwqAgZnJlZShwcml2LT5wYXJ0LnZlbmRvcik7DQo+ PiArwqDCoMKgIGZyZWUocHJpdi0+cGFydC5wYXJ0X251bWJlcik7DQo+PiArwqDCoMKgIGVm aV9kZWxldGVfaGFuZGxlKHByaXYtPmhhbmRsZSk7DQo+PiArwqDCoMKgIGZyZWUocHJpdik7 DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIGRlc3Ryb3lfZWZpX3NwaV9idXMoc3Ry dWN0IGVmaV9zcGlfYnVzICpidXMpDQo+PiArew0KPj4gK8KgwqDCoCBzdHJ1Y3QgZWZpX3Nw aV9wZXJpcGhlcmFsICpwZXJpcGhlcmFsID0gYnVzLT5wZXJpcGhlcmFsX2xpc3Q7DQo+PiAr DQo+PiArwqDCoMKgIHdoaWxlIChwZXJpcGhlcmFsKSB7DQo+PiArwqDCoMKgwqDCoMKgwqAg c3RydWN0IGVmaV9zcGlfcGVyaXBoZXJhbCAqbmV4dCA9DQo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBwZXJpcGhlcmFsLT5uZXh0X3NwaV9wZXJpcGhlcmFsOw0KPj4gK8KgwqDCoMKg wqDCoMKgIGRlc3Ryb3lfZWZpX3NwaV9wZXJpcGhlcmFsKHBlcmlwaGVyYWwpOw0KPj4gK8Kg wqDCoMKgwqDCoMKgIHBlcmlwaGVyYWwgPSBuZXh0Ow0KPj4gK8KgwqDCoCB9DQo+PiArwqDC oMKgIGZyZWUoYnVzLT5mcmllbmRseV9uYW1lKTsNCj4+ICvCoMKgwqAgZnJlZShidXMpOw0K Pj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgZWZpX3N0YXR1c190IGVmaV9zcGlfbmV3X2hhbmRs ZShjb25zdCBlZmlfZ3VpZF90ICpndWlkLCB2b2lkIA0KPj4gKnByb3RvKQ0KPj4gK3sNCj4+ ICvCoMKgwqAgZWZpX3N0YXR1c190IHN0YXR1czsNCj4+ICvCoMKgwqAgZWZpX2hhbmRsZV90 IGhhbmRsZTsNCj4+ICsNCj4+ICvCoMKgwqAgc3RhdHVzID0gZWZpX2NyZWF0ZV9oYW5kbGUo JmhhbmRsZSk7DQo+PiArwqDCoMKgIGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHsNCj4+ ICvCoMKgwqDCoMKgwqDCoCBwcmludGYoIkZhaWxlZCB0byBjcmVhdGUgRUZJIGhhbmRsZVxu Iik7DQo+PiArwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsXzE7DQo+PiArwqDCoMKgIH0NCj4+ ICsNCj4+ICvCoMKgwqAgc3RhdHVzID0gZWZpX2FkZF9wcm90b2NvbChoYW5kbGUsIGd1aWQs IHByb3RvKTsNCj4+ICvCoMKgwqAgaWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykgew0KPj4g K8KgwqDCoMKgwqDCoMKgIHByaW50ZigiRmFpbGVkIHRvIGFkZCBwcm90b2NvbFxuIik7DQo+ PiArwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsXzI7DQo+PiArwqDCoMKgIH0NCj4+ICsNCj4+ ICvCoMKgwqAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPj4gKw0KPj4gK2ZhaWxfMjoNCj4+ICvC oMKgwqAgZWZpX2RlbGV0ZV9oYW5kbGUoaGFuZGxlKTsNCj4+ICtmYWlsXzE6DQo+PiArwqDC oMKgIHJldHVybiBzdGF0dXM7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkDQo+PiAr ZWZpX3NwaV9pbml0X3BhcnQoc3RydWN0IGVmaV9zcGlfcGFydCAqcGFydCwNCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqAgc3RydWN0IHNwaV9zbGF2ZSAqdGFyZ2V0LA0KPj4gK8KgwqDCoMKg wqDCoMKgwqDCoCBlZmlfc3RyaW5nX3QgdmVuZG9yX3V0ZjE2LA0KPj4gK8KgwqDCoMKgwqDC oMKgwqDCoCBlZmlfc3RyaW5nX3QgcGFydF9udW1iZXJfdXRmMTYNCj4+ICspDQo+PiArew0K Pj4gK8KgwqDCoCBwYXJ0LT52ZW5kb3IgPSB2ZW5kb3JfdXRmMTY7DQo+PiArwqDCoMKgIHBh cnQtPnBhcnRfbnVtYmVyID0gcGFydF9udW1iZXJfdXRmMTY7DQo+PiArwqDCoMKgIHBhcnQt Pm1pbl9jbG9ja19oeiA9IDA7DQo+PiArwqDCoMKgIHBhcnQtPm1heF9jbG9ja19oeiA9IHRh cmdldC0+bWF4X2h6Ow0KPj4gK8KgwqDCoCBwYXJ0LT5jaGlwX3NlbGVjdF9wb2xhcml0eSA9 DQo+PiArwqDCoMKgwqDCoMKgwqAgKHRhcmdldC0+bW9kZSAmIFNQSV9DU19ISUdIKSA/IHRy dWUgOiBmYWxzZTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQNCj4+ICtlZmlfc3Bp X2luaXRfcGVyaXBoZXJhbChzdHJ1Y3QgZWZpX3NwaV9wZXJpcGhlcmFsICpwZXJpcGhlcmFs LA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGVmaV9zcGlfcGFydCAqcGFy dCwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBlZmlfc3BpX2J1cyAqYnVz LA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHNwaV9zbGF2ZSAqdGFyZ2V0 LA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZWZpX2d1aWRfdCAqZ3VpZCwNCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVmaV9zdHJpbmdfdCBuYW1lX3V0ZjE2DQo+PiArKQ0K Pj4gK3sNCj4+ICvCoMKgwqAgcGVyaXBoZXJhbC0+ZnJpZW5kbHlfbmFtZSA9IG5hbWVfdXRm MTY7DQo+PiArwqDCoMKgIHBlcmlwaGVyYWwtPnNwaV9wYXJ0ID0gcGFydDsNCj4+ICvCoMKg wqAgcGVyaXBoZXJhbC0+bmV4dF9zcGlfcGVyaXBoZXJhbCA9IE5VTEw7DQo+PiArwqDCoMKg IHBlcmlwaGVyYWwtPnNwaV9wZXJpcGhlcmFsX2RyaXZlcl9ndWlkID0gZ3VpZDsNCj4+ICvC oMKgwqAgcGVyaXBoZXJhbC0+bWF4X2Nsb2NrX2h6ID0gdGFyZ2V0LT5tYXhfaHo7DQo+PiAr wqDCoMKgIHBlcmlwaGVyYWwtPmNsb2NrX3BvbGFyaXR5ID0gKHRhcmdldC0+bW9kZSAmIFNQ SV9DUE9MKSA/IHRydWUgOiANCj4+IGZhbHNlOw0KPj4gK8KgwqDCoCBwZXJpcGhlcmFsLT5j bG9ja19waGFzZSA9ICh0YXJnZXQtPm1vZGUgJiBTUElfQ1BIQSkgPyB0cnVlIDogZmFsc2U7 DQo+PiArwqDCoMKgIHBlcmlwaGVyYWwtPmF0dHJpYnV0ZXMgPSAwOw0KPj4gK8KgwqDCoCBw ZXJpcGhlcmFsLT5jb25maWd1cmF0aW9uX2RhdGEgPSBOVUxMOw0KPj4gK8KgwqDCoCBwZXJp cGhlcmFsLT5zcGlfYnVzID0gYnVzOw0KPj4gK8KgwqDCoCBwZXJpcGhlcmFsLT5jaGlwX3Nl bGVjdCA9IGVmaV9zcGlfcGVyaXBoZXJhbF9jaGlwX3NlbGVjdDsNCj4+ICvCoMKgwqAgcGVy aXBoZXJhbC0+Y2hpcF9zZWxlY3RfcGFyYW1ldGVyID0gTlVMTDsNCj4+ICt9DQo+PiArDQo+ PiArc3RhdGljIHZvaWQNCj4+ICtlZmlfc3BpX2FwcGVuZF9wZXJpcGhlcmFsKHN0cnVjdCBl Zmlfc3BpX3BlcmlwaGVyYWwgKnBlcmlwaGVyYWwsDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgc3RydWN0IGVmaV9zcGlfYnVzICpidXMNCj4+ICspDQo+PiArew0KPj4gK8Kg wqDCoCBpZiAoYnVzLT5wZXJpcGhlcmFsX2xpc3QpIHsNCj4+ICvCoMKgwqDCoMKgwqDCoCBz dHJ1Y3QgZWZpX3NwaV9wZXJpcGhlcmFsICp0bXAgPSBidXMtPnBlcmlwaGVyYWxfbGlzdDsN Cj4+ICsNCj4+ICvCoMKgwqDCoMKgwqDCoCB3aGlsZSAodG1wLT5uZXh0X3NwaV9wZXJpcGhl cmFsKQ0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdG1wID0gdG1wLT5uZXh0X3NwaV9w ZXJpcGhlcmFsOw0KPj4gKw0KPj4gK8KgwqDCoMKgwqDCoMKgIHRtcC0+bmV4dF9zcGlfcGVy aXBoZXJhbCA9IHBlcmlwaGVyYWw7DQo+PiArwqDCoMKgIH0gZWxzZSB7DQo+PiArwqDCoMKg wqDCoMKgwqAgYnVzLT5wZXJpcGhlcmFsX2xpc3QgPSBwZXJpcGhlcmFsOw0KPj4gK8KgwqDC oCB9DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkDQo+PiArZWZpX3NwaV9pbml0X2lv X3Byb3RvY29sKHN0cnVjdCBlZmlfc3BpX2lvX3Byb3RvY29sICppb19wcm90b2NvbCwNCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGVmaV9zcGlfcGVyaXBoZXJhbCAq cGVyaXBoZXJhbCwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHNwaV9z bGF2ZSAqdGFyZ2V0DQo+PiArKQ0KPj4gK3sNCj4+ICvCoMKgwqAgdTMyIG1heF9yZWFkLCBt YXhfd3JpdGU7DQo+PiArDQo+PiArwqDCoMKgIGlvX3Byb3RvY29sLT5zcGlfcGVyaXBoZXJh bCA9IHBlcmlwaGVyYWw7DQo+PiArwqDCoMKgIGlvX3Byb3RvY29sLT5vcmlnaW5hbF9zcGlf cGVyaXBoZXJhbCA9IHBlcmlwaGVyYWw7DQo+PiArwqDCoMKgIGlvX3Byb3RvY29sLT5sZWdh Y3lfc3BpX3Byb3RvY29sID0gDQo+PiAmZHVtbXlfbGVnYWN5X3NwaV9jb250cm9sbGVyX3By b3RvY29sOw0KPj4gK8KgwqDCoCBpb19wcm90b2NvbC0+dHJhbnNhY3Rpb24gPSBlZmlfc3Bp X2lvX3RyYW5zYWN0aW9uOw0KPj4gK8KgwqDCoCBpb19wcm90b2NvbC0+dXBkYXRlX3NwaV9w ZXJpcGhlcmFsID0gDQo+PiBlZmlfc3BpX2lvX3VwZGF0ZV9zcGlfcGVyaXBoZXJhbDsNCj4+ ICsNCj4+ICvCoMKgwqAgLyogVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2suIFRoZSBFRkkgZGF0 YSBzdHJ1Y3R1cmVzIGRvIG5vdCBhbGxvdyANCj4+IHVzIHRvDQo+PiArwqDCoMKgwqAgKiBy ZXByZXNlbnQgYSBmcmFtZSBzaXplIGdyZWF0ZXIgdGhhbiAzMiBiaXRzLg0KPj4gK8KgwqDC oMKgICovDQo+PiArwqDCoMKgIGlmICh0YXJnZXQtPndvcmRsZW4gPD0gMzIpDQo+PiArwqDC oMKgwqDCoMKgwqAgaW9fcHJvdG9jb2wtPmZyYW1lX3NpemVfc3VwcG9ydF9tYXNrID0NCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDEgPDwgKHRhcmdldC0+d29yZGxlbiAtIDEpOw0K Pj4gK8KgwqDCoCBlbHNlDQo+PiArwqDCoMKgwqDCoMKgwqAgaW9fcHJvdG9jb2wtPmZyYW1l X3NpemVfc3VwcG9ydF9tYXNrID0gMDsNCj4+ICsNCj4+ICvCoMKgwqAgLyogQWdhaW4sIHRo aXMgaXMgYSBiaXQgb2YgYSBoYWNrLiBUaGUgRUZJIGRhdGEgc3RydWN0dXJlcyBvbmx5IA0K Pj4gYWxsb3cNCj4+ICvCoMKgwqDCoCAqIGZvciBhIHNpbmdsZSBtYXhpbXVtIHRyYW5zZmVy IHNpemUgd2hlcmVhcyB0aGUgdS1ib290IHNwaV9zbGF2ZQ0KPj4gK8KgwqDCoMKgICogc3Ry dWN0dXJlIHJlY29yZHMgbWF4aW11bSByZWFkIHRyYW5zZmVyIHNpemUgYW5kIG1heGltdW0g d3JpdGUNCj4+ICvCoMKgwqDCoCAqIHRyYW5zZmVyIHNpemUgc2VwYXJhdGVseS4gU28gd2Ug bmVlZCB0byB0YWtlIHRoZSBtaW5pbXVtIG9mIA0KPj4gdGhlc2UgdHdvDQo+PiArwqDCoMKg wqAgKiB2YWx1ZXMuDQo+PiArwqDCoMKgwqAgKg0KPj4gK8KgwqDCoMKgICogSW4gdS1ib290 LCBhIHZhbHVlIG9mIHplcm8gZm9yIHRoZXNlIGZpZWxkcyBtZWFucyB0aGVyZSBpcyBubyAN Cj4+IGxpbWl0DQo+PiArwqDCoMKgwqAgKiBvbiB0aGUgdHJhbnNmZXIgc2l6ZS4gSG93ZXZl ciBpbiB0aGUgVUVGSSBQSSBzcGVjIGEgdmFsdWUgb2YgDQo+PiB6ZXJvIGlzDQo+PiArwqDC oMKgwqAgKiBpbnZhbGlkIHNvIHdlJ2xsIHVzZSAweEZGRkZGRkZGIGFzIGEgc3Vic3RpdHV0 ZSB1bmxpbWl0ZWQgdmFsdWUuDQo+PiArwqDCoMKgwqAgKi8NCj4+ICvCoMKgwqAgbWF4X3dy aXRlID0gdGFyZ2V0LT5tYXhfd3JpdGVfc2l6ZSA/IHRhcmdldC0+bWF4X3dyaXRlX3NpemUg OiANCj4+IDB4RkZGRkZGRkY7DQo+PiArwqDCoMKgIG1heF9yZWFkID0gdGFyZ2V0LT5tYXhf cmVhZF9zaXplID8gdGFyZ2V0LT5tYXhfcmVhZF9zaXplIDogDQo+PiAweEZGRkZGRkZGOw0K Pj4gK8KgwqDCoCBpb19wcm90b2NvbC0+bWF4aW11bV90cmFuc2Zlcl9ieXRlcyA9IChtYXhf cmVhZCA+IG1heF93cml0ZSkgPyANCj4+IG1heF93cml0ZSA6IG1heF9yZWFkOw0KPj4gKw0K Pj4gK8KgwqDCoCAvKiBIYWNrKysuIExlYXZlIGF0dHJpYnV0ZXMgc2V0IHRvIHplcm8gc2lu Y2UgdGhlIGZsYWdzIGxpc3RlZCBpbiANCj4+IHRoZQ0KPj4gK8KgwqDCoMKgICogVUVGSSBQ SSBzcGVjIGhhdmUgbm8gZGVmaW5lZCBudW1lcmljYWwgdmFsdWVzIGFuZCBzbyBjYW5ub3Qg YmUgDQo+PiB1c2VkLg0KPj4gK8KgwqDCoMKgICovDQo+PiArwqDCoMKgIGlvX3Byb3RvY29s LT5hdHRyaWJ1dGVzID0gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGVmaV9zdGF0dXNf dA0KPj4gK2V4cG9ydF9zcGlfcGVyaXBoZXJhbChzdHJ1Y3QgZWZpX3NwaV9idXMgKmJ1cywg c3RydWN0IHVkZXZpY2UgKmRldikNCj4+ICt7DQo+PiArwqDCoMKgIGVmaV9zdHJpbmdfdCBu YW1lX3V0ZjE2LCB2ZW5kb3JfdXRmMTYsIHBhcnRfbnVtYmVyX3V0ZjE2Ow0KPj4gK8KgwqDC oCBzdHJ1Y3QgZWZpX3NwaV9wZXJpcGhlcmFsX3ByaXYgKnByaXY7DQo+PiArwqDCoMKgIGVm aV9zdGF0dXNfdCBzdGF0dXM7DQo+PiArwqDCoMKgIHN0cnVjdCB1ZGV2aWNlICpkZXZfYnVz ID0gZGV2LT5wYXJlbnQ7DQo+PiArwqDCoMKgIHN0cnVjdCBzcGlfc2xhdmUgKnRhcmdldDsN Cj4+ICvCoMKgwqAgY29uc3QgY2hhciAqbmFtZSA9IGRldl9yZWFkX25hbWUoZGV2KTsNCj4+ ICvCoMKgwqAgY29uc3QgY2hhciAqdmVuZG9yID0gZGV2X3JlYWRfc3RyaW5nKGRldiwgInVl Zmktc3BpLXZlbmRvciIpOw0KPj4gK8KgwqDCoCBjb25zdCBjaGFyICpwYXJ0X251bWJlciA9 IGRldl9yZWFkX3N0cmluZyhkZXYsIA0KPj4gInVlZmktc3BpLXBhcnQtbnVtYmVyIik7DQo+ PiArwqDCoMKgIGVmaV9ndWlkX3QgKmd1aWQgPQ0KPj4gK8KgwqDCoMKgwqDCoMKgIChlZmlf Z3VpZF90ICopZGV2X3JlYWRfdThfYXJyYXlfcHRyKGRldiwgInVlZmktc3BpLWlvLWd1aWQi LCANCj4+IDE2KTsNCj4+ICsNCj4+ICvCoMKgwqAgaWYgKGRldmljZV9nZXRfdWNsYXNzX2lk KGRldikgPT0gVUNMQVNTX1NQSV9FTVVMKSB7DQo+PiArwqDCoMKgwqDCoMKgwqAgZGVidWco IlNraXBwaW5nIGVtdWxhdGVkIFNQSSBwZXJpcGhlcmFsICVzXG4iLCBuYW1lKTsNCj4+ICvC oMKgwqDCoMKgwqDCoCBnb3RvIGZhaWxfMTsNCj4+ICvCoMKgwqAgfQ0KPj4gKw0KPj4gK8Kg wqDCoCBpZiAoIXZlbmRvciB8fCAhcGFydF9udW1iZXIgfHwgIWd1aWQpIHsNCj4+ICvCoMKg wqDCoMKgwqDCoCBkZWJ1ZygiU2tpcHBpbmcgU1BJIHBlcmlwaGVyYWwgJXNcbiIsIG5hbWUp Ow0KPj4gK8KgwqDCoMKgwqDCoMKgIHN0YXR1cyA9IEVGSV9VTlNVUFBPUlRFRDsNCj4+ICvC oMKgwqDCoMKgwqDCoCBnb3RvIGZhaWxfMTsNCj4+ICvCoMKgwqAgfQ0KPj4gKw0KPj4gK8Kg wqDCoCBpZiAoIWRldmljZV9hY3RpdmUoZGV2KSkgew0KPj4gK8KgwqDCoMKgwqDCoMKgIGlu dCByZXQgPSBkZXZpY2VfcHJvYmUoZGV2KTsNCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAocmV0 KSB7DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZWJ1ZygiU2tpcHBpbmcgU1BJIHBl cmlwaGVyYWwgJXMsIHByb2JlIGZhaWxlZFxuIiwgbmFtZSk7DQo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBnb3RvIGZhaWxfMTsNCj4+ICvCoMKgwqDCoMKgwqDCoCB9DQo+PiArwqDC oMKgIH0NCj4+ICsNCj4+ICvCoMKgwqAgdGFyZ2V0ID0gZGV2X2dldF9wYXJlbnRfcHJpdihk ZXYpOw0KPj4gK8KgwqDCoCBpZiAoIXRhcmdldCkgew0KPj4gK8KgwqDCoMKgwqDCoMKgIGRl YnVnKCJTa2lwcGluZyB1bmluaXRpYWxpemVkIFNQSSBwZXJpcGhlcmFsICVzXG4iLCBuYW1l KTsNCj4+ICvCoMKgwqDCoMKgwqDCoCBzdGF0dXMgPSBFRklfVU5TVVBQT1JURUQ7DQo+PiAr wqDCoMKgwqDCoMKgwqAgZ290byBmYWlsXzE7DQo+PiArwqDCoMKgIH0NCj4+ICsNCj4+ICvC oMKgwqAgZGVidWcoIlJlZ2lzdGVyaW5nIFNQSSBkZXYgJWQ6JWQsIG5hbWUgJXNcbiIsDQo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgIGRldl9idXMtPnNlcV8sIHNwaV9jaGlwX3NlbGVjdChk ZXYpLCBuYW1lKTsNCj4+ICsNCj4+ICvCoMKgwqAgcHJpdiA9IGNhbGxvYygxLCBzaXplb2Yo KnByaXYpKTsNCj4+ICvCoMKgwqAgaWYgKCFwcml2KSB7DQo+PiArwqDCoMKgwqDCoMKgwqAg c3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+PiArwqDCoMKgwqDCoMKgwqAgZ290 byBmYWlsXzE7DQo+PiArwqDCoMKgIH0NCj4+ICsNCj4+ICvCoMKgwqAgdmVuZG9yX3V0ZjE2 ID0gY29udmVydF9lZmlfc3RyaW5nKHZlbmRvcik7DQo+PiArwqDCoMKgIGlmICghdmVuZG9y X3V0ZjE2KSB7DQo+PiArwqDCoMKgwqDCoMKgwqAgc3RhdHVzID0gRUZJX09VVF9PRl9SRVNP VVJDRVM7DQo+PiArwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsXzI7DQo+PiArwqDCoMKgIH0N Cj4+ICsNCj4+ICvCoMKgwqAgcGFydF9udW1iZXJfdXRmMTYgPSBjb252ZXJ0X2VmaV9zdHJp bmcocGFydF9udW1iZXIpOw0KPj4gK8KgwqDCoCBpZiAoIXBhcnRfbnVtYmVyX3V0ZjE2KSB7 DQo+PiArwqDCoMKgwqDCoMKgwqAgc3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ PiArwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsXzM7DQo+PiArwqDCoMKgIH0NCj4+ICsNCj4+ ICvCoMKgwqAgbmFtZV91dGYxNiA9IGNvbnZlcnRfZWZpX3N0cmluZyhuYW1lKTsNCj4+ICvC oMKgwqAgaWYgKCFuYW1lX3V0ZjE2KSB7DQo+PiArwqDCoMKgwqDCoMKgwqAgc3RhdHVzID0g RUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+PiArwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsXzQ7 DQo+PiArwqDCoMKgIH0NCj4+ICsNCj4+ICvCoMKgwqAgcHJpdi0+dGFyZ2V0ID0gdGFyZ2V0 Ow0KPj4gKw0KPj4gK8KgwqDCoCBlZmlfc3BpX2luaXRfcGFydCgmcHJpdi0+cGFydCwgdGFy Z2V0LCB2ZW5kb3JfdXRmMTYsIA0KPj4gcGFydF9udW1iZXJfdXRmMTYpOw0KPj4gKw0KPj4g K8KgwqDCoCBlZmlfc3BpX2luaXRfcGVyaXBoZXJhbCgmcHJpdi0+cGVyaXBoZXJhbCwgJnBy aXYtPnBhcnQsDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJ1cywgdGFy Z2V0LCBndWlkLCBuYW1lX3V0ZjE2KTsNCj4+ICsNCj4+ICvCoMKgwqAgZWZpX3NwaV9hcHBl bmRfcGVyaXBoZXJhbCgmcHJpdi0+cGVyaXBoZXJhbCwgYnVzKTsNCj4+ICsNCj4+ICvCoMKg wqAgZWZpX3NwaV9pbml0X2lvX3Byb3RvY29sKCZwcml2LT5pb19wcm90b2NvbCwgJnByaXYt PnBlcmlwaGVyYWwsIA0KPj4gdGFyZ2V0KTsNCj4+ICsNCj4+ICvCoMKgwqAgc3RhdHVzID0g ZWZpX3NwaV9uZXdfaGFuZGxlKGd1aWQsICZwcml2LT5pb19wcm90b2NvbCk7DQo+PiArwqDC oMKgIGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpDQo+PiArwqDCoMKgwqDCoMKgwqAgZ290 byBmYWlsXzU7DQo+PiArDQo+PiArwqDCoMKgIHByaW50ZigiQWRkZWQgRUZJX1NQSV9JT19Q Uk9UT0NPTCBmb3IgJXMgd2l0aCBndWlkICINCj4+ICsgICAgICAgICAgIA0KPj4gIiUwMngl MDJ4JTAyeCUwMngtJTAyeCUwMngtJTAyeCUwMngtJTAyeCUwMngtJTAyeCUwMnglMDJ4JTAy eCUwMnglMDJ4XG4iLA0KPiANCj4gVGhpcyBpbmZvcm1hdGlvbiBkb2VzIG5vdCBpbnRlcmVz dCBhbnkgdXNlci4gUGxlYXNlLCB1c2UgbG9nX2RlYnVnKCkuDQoNCkknbGwgY2hhbmdlIHRo aXMgaW4gdjMuDQoNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgbmFtZSwNCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoCBndWlkLT5iWzBdLCBndWlkLT5iWzFdLCBndWlkLT5iWzJd LCBndWlkLT5iWzNdLA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGd1aWQtPmJbNF0sIGd1 aWQtPmJbNV0sIGd1aWQtPmJbNl0sIGd1aWQtPmJbN10sDQo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqAgZ3VpZC0+Yls4XSwgZ3VpZC0+Yls5XSwgZ3VpZC0+YlsxMF0sIGd1aWQtPmJbMTFd LA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGd1aWQtPmJbMTJdLCBndWlkLT5iWzEzXSwg Z3VpZC0+YlsxNF0sIGd1aWQtPmJbMTVdKTsNCj4+ICvCoMKgwqAgcmV0dXJuIEVGSV9TVUND RVNTOw0KPj4gKw0KPj4gK2ZhaWxfNToNCj4+ICvCoMKgwqAgZnJlZShuYW1lX3V0ZjE2KTsN Cj4+ICtmYWlsXzQ6DQo+PiArwqDCoMKgIGZyZWUocGFydF9udW1iZXJfdXRmMTYpOw0KPj4g K2ZhaWxfMzoNCj4+ICvCoMKgwqAgZnJlZSh2ZW5kb3JfdXRmMTYpOw0KPj4gK2ZhaWxfMjoN Cj4+ICvCoMKgwqAgZnJlZShwcml2KTsNCj4+ICtmYWlsXzE6DQo+PiArwqDCoMKgIHJldHVy biBzdGF0dXM7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBzdHJ1Y3QgZWZpX3NwaV9idXMg KmV4cG9ydF9zcGlfYnVzKGludCBpKQ0KPj4gK3sNCj4+ICvCoMKgwqAgc3RydWN0IGVmaV9z cGlfYnVzICpidXM7DQo+PiArwqDCoMKgIHN0cnVjdCB1ZGV2aWNlICpkZXYsICpjaGlsZDsN Cj4+ICvCoMKgwqAgY29uc3QgY2hhciAqbmFtZTsNCj4+ICvCoMKgwqAgaW50IHI7DQo+PiAr DQo+PiArwqDCoMKgIHIgPSB1Y2xhc3NfZ2V0X2RldmljZShVQ0xBU1NfU1BJLCBpLCAmZGV2 KTsNCj4+ICvCoMKgwqAgaWYgKHIgPCAwKSB7DQo+PiArwqDCoMKgwqDCoMKgwqAgcHJpbnRm KCJGYWlsZWQgdG8gZ2V0IFNQSSBidXMgJWRcbiIsIGkpOw0KPj4gK8KgwqDCoMKgwqDCoMKg IGdvdG8gZmFpbF8xOw0KPj4gK8KgwqDCoCB9DQo+PiArDQo+PiArwqDCoMKgIG5hbWUgPSBk ZXZfcmVhZF9uYW1lKGRldik7DQo+PiArwqDCoMKgIGRlYnVnKCJSZWdpc3RlcmluZyBTUEkg YnVzICVkLCBuYW1lICVzXG4iLCBpLCBuYW1lKTsNCj4+ICsNCj4+ICvCoMKgwqAgYnVzID0g Y2FsbG9jKDEsIHNpemVvZigqYnVzKSk7DQo+PiArwqDCoMKgIGlmICghYnVzKQ0KPj4gK8Kg wqDCoMKgwqDCoMKgIGdvdG8gZmFpbF8xOw0KPj4gKw0KPj4gK8KgwqDCoCBidXMtPmZyaWVu ZGx5X25hbWUgPSBjb252ZXJ0X2VmaV9zdHJpbmcobmFtZSk7DQo+PiArwqDCoMKgIGlmICgh YnVzLT5mcmllbmRseV9uYW1lKQ0KPj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gZmFpbF8yOw0K Pj4gKw0KPj4gK8KgwqDCoCBidXMtPnBlcmlwaGVyYWxfbGlzdCA9IE5VTEw7DQo+PiArwqDC oMKgIGJ1cy0+Y2xvY2sgPSBlZmlfc3BpX2J1c19jbG9jazsNCj4+ICvCoMKgwqAgYnVzLT5j bG9ja19wYXJhbWV0ZXIgPSBOVUxMOw0KPj4gKw0KPj4gK8KgwqDCoCAvKiBGb3IgdGhlIHB1 cnBvc2VzIG9mIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCB3ZSBkbyBub3QgbmVlZCAN Cj4+IHRvIGV4cG9zZQ0KPj4gK8KgwqDCoMKgICogdGhlIGhhcmR3YXJlIGRldmljZSBwYXRo IHRvIHVzZXJzIG9mIHRoZSBTUEkgSS9PIHByb3RvY29sLg0KPj4gK8KgwqDCoMKgICovDQo+ PiArwqDCoMKgIGJ1cy0+Y29udHJvbGxlcl9wYXRoID0gJm51bGxfZGV2aWNlX3BhdGg7DQo+ PiArDQo+PiArwqDCoMKgIGRldmljZV9mb3JlYWNoX2NoaWxkKGNoaWxkLCBkZXYpIHsNCj4+ ICvCoMKgwqDCoMKgwqDCoCBlZmlfc3RhdHVzX3Qgc3RhdHVzID0gZXhwb3J0X3NwaV9wZXJp cGhlcmFsKGJ1cywgY2hpbGQpOw0KPj4gKw0KPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChzdGF0 dXMgPT0gRUZJX09VVF9PRl9SRVNPVVJDRVMpDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBnb3RvIGZhaWxfMzsNCj4+ICvCoMKgwqAgfQ0KPj4gKw0KPj4gK8KgwqDCoCByZXR1cm4g YnVzOw0KPj4gKw0KPj4gK2ZhaWxfMzoNCj4+ICvCoMKgwqAgZGVzdHJveV9lZmlfc3BpX2J1 cyhidXMpOw0KPj4gK2ZhaWxfMjoNCj4+ICvCoMKgwqAgZnJlZShidXMpOw0KPj4gK2ZhaWxf MToNCj4+ICvCoMKgwqAgcmV0dXJuIE5VTEw7DQo+PiArfQ0KPj4gKw0KPj4gK2VmaV9zdGF0 dXNfdCBlZmlfc3BpX3Byb3RvY29sX3JlZ2lzdGVyKHZvaWQpDQo+PiArew0KPj4gK8KgwqDC oCBlZmlfc3RhdHVzX3Qgc3RhdHVzOw0KPj4gK8KgwqDCoCBzdHJ1Y3QgZWZpX3NwaV9jb25m aWd1cmF0aW9uX3Byb3RvY29sICpwcm90bzsNCj4+ICvCoMKgwqAgdWludCBpOw0KPj4gKw0K Pj4gK8KgwqDCoCBwcmludGYoIlJlZ2lzdGVyaW5nIEVGSV9TUElfQ09ORklHVVJBVElPTl9Q Uk9UT0NPTFxuIik7DQo+PiArDQo+PiArwqDCoMKgIHByb3RvID0gY2FsbG9jKDEsIHNpemVv ZigqcHJvdG8pKTsNCj4+ICvCoMKgwqAgaWYgKCFwcm90bykgew0KPj4gK8KgwqDCoMKgwqDC oMKgIHN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPj4gK8KgwqDCoMKgwqDCoMKg IGdvdG8gZmFpbF8xOw0KPj4gK8KgwqDCoCB9DQo+PiArDQo+PiArwqDCoMKgIHByb3RvLT5i dXNfY291bnQgPSB1Y2xhc3NfaWRfY291bnQoVUNMQVNTX1NQSSk7DQo+PiArwqDCoMKgIHBy b3RvLT5idXNfbGlzdCA9IGNhbGxvYyhwcm90by0+YnVzX2NvdW50LCANCj4+IHNpemVvZigq cHJvdG8tPmJ1c19saXN0KSk7DQo+PiArwqDCoMKgIGlmICghcHJvdG8tPmJ1c19saXN0KSB7 DQo+PiArwqDCoMKgwqDCoMKgwqAgc3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ PiArwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsXzI7DQo+PiArwqDCoMKgIH0NCj4+ICsNCj4+ ICvCoMKgwqAgZm9yIChpID0gMDsgaSA8IHByb3RvLT5idXNfY291bnQ7IGkrKykgew0KPj4g K8KgwqDCoMKgwqDCoMKgIHByb3RvLT5idXNfbGlzdFtpXSA9IGV4cG9ydF9zcGlfYnVzKGkp Ow0KPj4gK8KgwqDCoMKgwqDCoMKgIGlmICghcHJvdG8tPmJ1c19saXN0W2ldKQ0KPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsXzM7DQo+PiArwqDCoMKgIH0NCj4+ICsN Cj4+ICvCoMKgwqAgc3RhdHVzID0gZWZpX3NwaV9uZXdfaGFuZGxlKCZlZmlfc3BpX2NvbmZp Z3VyYXRpb25fZ3VpZCwgcHJvdG8pOw0KPj4gK8KgwqDCoCBpZiAoc3RhdHVzICE9IEVGSV9T VUNDRVNTKQ0KPj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gZmFpbF8zOw0KPj4gKw0KPj4gK8Kg wqDCoCByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+PiArDQo+PiArZmFpbF8zOg0KPj4gK8KgwqDC oCBmb3IgKGkgPSAwOyBpIDwgcHJvdG8tPmJ1c19jb3VudDsgaSsrKSB7DQo+PiArwqDCoMKg wqDCoMKgwqAgaWYgKHByb3RvLT5idXNfbGlzdFtpXSkNCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGRlc3Ryb3lfZWZpX3NwaV9idXMocHJvdG8tPmJ1c19saXN0W2ldKTsNCj4+ICvC oMKgwqAgfQ0KPj4gK8KgwqDCoCBmcmVlKHByb3RvLT5idXNfbGlzdCk7DQo+PiArZmFpbF8y Og0KPj4gK8KgwqDCoCBmcmVlKHByb3RvKTsNCj4+ICtmYWlsXzE6DQo+PiArwqDCoMKgIHJl dHVybiBzdGF0dXM7DQo+PiArfQ0KPj4gZGlmZiAtLWdpdCBhL2xpYi9lZmlfc2VsZnRlc3Qv TWFrZWZpbGUgYi9saWIvZWZpX3NlbGZ0ZXN0L01ha2VmaWxlDQo+PiBpbmRleCAzMzUzNmM5 ZWMwMjEuLmM5YjZlNGZiYjQ1MiAxMDA2NDQNCj4+IC0tLSBhL2xpYi9lZmlfc2VsZnRlc3Qv TWFrZWZpbGUNCj4+ICsrKyBiL2xpYi9lZmlfc2VsZnRlc3QvTWFrZWZpbGUNCj4+IEBAIC02 Miw2ICs2Miw3IEBAIG9iai0kKENPTkZJR19FRklfTE9BREVSX0hJSSkgKz0gZWZpX3NlbGZ0 ZXN0X2hpaS5vDQo+PiDCoCBvYmotJChDT05GSUdfRUZJX1JOR19QUk9UT0NPTCkgKz0gZWZp X3NlbGZ0ZXN0X3JuZy5vDQo+PiDCoCBvYmotJChDT05GSUdfRUZJX0dFVF9USU1FKSArPSBl Zmlfc2VsZnRlc3RfcnRjLm8NCj4+IMKgIG9iai0kKENPTkZJR19FRklfVENHMl9QUk9UT0NP TCkgKz0gZWZpX3NlbGZ0ZXN0X3RjZzIubw0KPj4gK29iai0kKENPTkZJR19FRklfU1BJX1BS T1RPQ09MKSArPSBlZmlfc2VsZnRlc3Rfc3BpX3Byb3RvY29sLm8NCj4+DQo+PiDCoCBpZmVx ICgkKENPTkZJR19HRU5FUkFURV9BQ1BJX1RBQkxFKSwpDQo+PiDCoCBvYmoteSArPSBlZmlf c2VsZnRlc3RfZmR0Lm8NCj4+IGRpZmYgLS1naXQgYS9saWIvZWZpX3NlbGZ0ZXN0L2VmaV9z ZWxmdGVzdF9zcGlfcHJvdG9jb2wuYyANCj4+IGIvbGliL2VmaV9zZWxmdGVzdC9lZmlfc2Vs ZnRlc3Rfc3BpX3Byb3RvY29sLmMNCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+PiBpbmRl eCAwMDAwMDAwMDAwMDAuLjJhMzcyM2QzOTMxZg0KPj4gLS0tIC9kZXYvbnVsbA0KPj4gKysr IGIvbGliL2VmaV9zZWxmdGVzdC9lZmlfc2VsZnRlc3Rfc3BpX3Byb3RvY29sLmMNCj4+IEBA IC0wLDAgKzEsMjM3IEBADQo+PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjArDQo+PiArLyoNCj4+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjIgTWljcm9uIFRlY2hub2xv Z3ksIEluYy4NCj4+ICsgKi8NCj4+ICsNCj4+ICsjaW5jbHVkZSA8ZWZpX3NlbGZ0ZXN0Lmg+ DQo+PiArI2luY2x1ZGUgPGVmaV9zcGlfcHJvdG9jb2wuaD4NCj4+ICsNCj4+ICtzdGF0aWMg c3RydWN0IGVmaV9ib290X3NlcnZpY2VzICpib290dGltZTsNCj4+ICtzdGF0aWMgZWZpX2d1 aWRfdCBlZmlfc3BpX2NvbmZpZ3VyYXRpb25fZ3VpZCA9IA0KPj4gRUZJX1NQSV9DT05GSUdV UkFUSU9OX0dVSUQ7DQo+PiArDQo+PiArc3RhdGljIGludCBzZXR1cChjb25zdCBlZmlfaGFu ZGxlX3QgaW1nX2hhbmRsZSwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgIGNvbnN0IHN0cnVjdCBl Zmlfc3lzdGVtX3RhYmxlICpzeXN0YWJsZSkNCj4+ICt7DQo+PiArwqDCoMKgIGJvb3R0aW1l ID0gc3lzdGFibGUtPmJvb3R0aW1lOw0KPj4gK8KgwqDCoCByZXR1cm4gRUZJX1NUX1NVQ0NF U1M7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgdGVzdF9wZXJpcGhlcmFsKHN0cnVj dCBlZmlfc3BpX3BlcmlwaGVyYWwgKnAsIHN0cnVjdCANCj4+IGVmaV9zcGlfYnVzICpidXMp DQo+PiArew0KPj4gK8KgwqDCoCBzdHJ1Y3QgZWZpX3NwaV9pb19wcm90b2NvbCAqaW9fcHJv dG9jb2w7DQo+PiArwqDCoMKgIHU4IHJlcVs1XSwgcmVzcFs1XTsNCj4+ICvCoMKgwqAgZWZp X3N0YXR1c190IHJldDsNCj4+ICsNCj4+ICvCoMKgwqAgaWYgKCFwLT5mcmllbmRseV9uYW1l KSB7DQo+PiArwqDCoMKgwqDCoMKgwqAgZWZpX3N0X2Vycm9yKCJTUEkgcGVyaXBoZXJhbCBs YWNrcyBhIGZyaWVuZGx5IG5hbWVcbiIpOw0KPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBF RklfU1RfRkFJTFVSRTsNCj4+ICvCoMKgwqAgfQ0KPj4gKw0KPj4gK8KgwqDCoCBpZiAoIXAt PnNwaV9wZXJpcGhlcmFsX2RyaXZlcl9ndWlkKSB7DQo+PiArwqDCoMKgwqDCoMKgwqAgZWZp X3N0X2Vycm9yKCJTUEkgcGVyaXBoZXJhbCBsYWNrcyBkcml2ZXIgR1VJRFxuIik7DQo+PiAr wqDCoMKgwqDCoMKgwqAgcmV0dXJuIEVGSV9TVF9GQUlMVVJFOw0KPj4gK8KgwqDCoCB9DQo+ PiArDQo+PiArwqDCoMKgIGlmICghcC0+c3BpX3BhcnQpIHsNCj4+ICvCoMKgwqDCoMKgwqDC oCBlZmlfc3RfZXJyb3IoIlNQSSBwZXJpcGhlcmFsIGxhY2tzIFNQSSBwYXJ0IGRlZmluaXRp b25cbiIpOw0KPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBFRklfU1RfRkFJTFVSRTsNCj4+ ICvCoMKgwqAgfQ0KPj4gKw0KPj4gK8KgwqDCoCBpZiAoIXAtPm1heF9jbG9ja19oeikgew0K Pj4gK8KgwqDCoMKgwqDCoMKgIGVmaV9zdF9lcnJvcigiU1BJIHBlcmlwaGVyYWwgaGFzIGEg bWF4IGNsb2NrIHJhdGUgb2YgemVyb1xuIik7DQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJu IEVGSV9TVF9GQUlMVVJFOw0KPj4gK8KgwqDCoCB9DQo+PiArDQo+PiArwqDCoMKgIGlmICgh cC0+c3BpX2J1cykgew0KPj4gK8KgwqDCoMKgwqDCoMKgIGVmaV9zdF9lcnJvcigiU1BJIHBl cmlwaGVyYWwgbGFjayBwb2ludGVyIHRvIFNQSSBidXNcbiIpOw0KPj4gK8KgwqDCoMKgwqDC oMKgIHJldHVybiBFRklfU1RfRkFJTFVSRTsNCj4+ICvCoMKgwqAgfQ0KPj4gKw0KPj4gK8Kg wqDCoCBpZiAocC0+c3BpX2J1cyAhPSBidXMpIHsNCj4+ICvCoMKgwqDCoMKgwqDCoCBlZmlf c3RfZXJyb3IoIlNQSSBwZXJpcGhlcmFsIHNwaV9idXMgcG9pbnRlciBwb2ludHMgdG8gdGhl IA0KPj4gd3JvbmcgYnVzXG4iKTsNCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gRUZJX1NU X0ZBSUxVUkU7DQo+PiArwqDCoMKgIH0NCj4+ICsNCj4+ICvCoMKgwqAgaWYgKCFwLT5jaGlw X3NlbGVjdCkgew0KPj4gK8KgwqDCoMKgwqDCoMKgIGVmaV9zdF9lcnJvcigiU1BJIHBlcmlw aGVyYWwgbGFja3MgY2hpcF9zZWxlY3QgZnVuY3Rpb25cbiIpOw0KPj4gK8KgwqDCoMKgwqDC oMKgIHJldHVybiBFRklfU1RfRkFJTFVSRTsNCj4+ICvCoMKgwqAgfQ0KPj4gKw0KPj4gK8Kg wqDCoCBpZiAoIXAtPnNwaV9wYXJ0LT52ZW5kb3IpIHsNCj4+ICvCoMKgwqDCoMKgwqDCoCBl Zmlfc3RfZXJyb3IoIlNQSSBwYXJ0IGxhY2tzIHZlbmRvciBzdHJpbmdcbiIpOw0KPj4gK8Kg wqDCoMKgwqDCoMKgIHJldHVybiBFRklfU1RfRkFJTFVSRTsNCj4+ICvCoMKgwqAgfQ0KPj4g Kw0KPj4gK8KgwqDCoCBpZiAoIXAtPnNwaV9wYXJ0LT5wYXJ0X251bWJlcikgew0KPj4gK8Kg wqDCoMKgwqDCoMKgIGVmaV9zdF9lcnJvcigiU1BJIHBhcnQgbGFja3MgcGFydCBudW1iZXIg c3RyaW5nXG4iKTsNCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gRUZJX1NUX0ZBSUxVUkU7 DQo+PiArwqDCoMKgIH0NCj4+ICsNCj4+ICvCoMKgwqAgaWYgKHAtPnNwaV9wYXJ0LT5taW5f Y2xvY2tfaHogPiBwLT5zcGlfcGFydC0+bWF4X2Nsb2NrX2h6KSB7DQo+PiArwqDCoMKgwqDC oMKgwqAgZWZpX3N0X2Vycm9yKCJTUEkgcGFydCBtaW4gY2xvY2sgcmF0ZSBpcyBncmVhdGVy IHRoYW4gbWF4IA0KPj4gY2xvY2sgcmF0ZVxuIik7DQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0 dXJuIEVGSV9TVF9GQUlMVVJFOw0KPj4gK8KgwqDCoCB9DQo+PiArDQo+PiArwqDCoMKgIGlm IChwLT5zcGlfcGFydC0+bWF4X2Nsb2NrX2h6ICE9IHAtPm1heF9jbG9ja19oeikgew0KPj4g K8KgwqDCoMKgwqDCoMKgIGVmaV9zdF9lcnJvcigiU1BJIHBhcnQgbWF4IGNsb2NrIHJhdGUg ZG9lcyBub3QgbWF0Y2ggDQo+PiBwZXJpcGhlcmFsIG1heCBjbG9jayByYXRlXG4iKTsNCj4+ ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gRUZJX1NUX0ZBSUxVUkU7DQo+PiArwqDCoMKgIH0N Cj4+ICsNCj4+ICvCoMKgwqAgcmV0ID0gYm9vdHRpbWUtPmxvY2F0ZV9wcm90b2NvbChwLT5z cGlfcGVyaXBoZXJhbF9kcml2ZXJfZ3VpZCwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBOVUxMLCAodm9pZCAqKikmaW9fcHJvdG9jb2wpOw0KPj4gK8Kg wqDCoCBpZiAocmV0ICE9IEVGSV9TVUNDRVNTKSB7DQo+PiArwqDCoMKgwqDCoMKgwqAgZWZp X3N0X2Vycm9yKCJTUEkgSU8gcHJvdG9jb2wgbm90IGF2YWlsYWJsZVxuIik7DQo+PiArwqDC oMKgwqDCoMKgwqAgcmV0dXJuIEVGSV9TVF9GQUlMVVJFOw0KPj4gK8KgwqDCoCB9DQo+PiAr DQo+PiArwqDCoMKgIGlmIChpb19wcm90b2NvbC0+c3BpX3BlcmlwaGVyYWwgIT0gcCkgew0K Pj4gK8KgwqDCoMKgwqDCoMKgIGVmaV9zdF9lcnJvcigiU1BJIElPIHByb3RvY29sIHNwaV9w ZXJpcGhlcmFsIHBvaW50ZXIgcG9pbnRzIA0KPj4gdG8gdGhlIHdyb25nIHBlcmlwaGVyYWxc biIpOw0KPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBFRklfU1RfRkFJTFVSRTsNCj4+ICvC oMKgwqAgfQ0KPj4gKw0KPj4gK8KgwqDCoCBpZiAoaW9fcHJvdG9jb2wtPm9yaWdpbmFsX3Nw aV9wZXJpcGhlcmFsICE9IHApIHsNCj4+ICvCoMKgwqDCoMKgwqDCoCBlZmlfc3RfZXJyb3Io IlNQSSBJTyBwcm90b2NvbCBvcmlnaW5hbF9zcGlfcGVyaXBoZXJhbCBwb2ludGVyIA0KPj4g cG9pbnRzIHRvIHRoZSB3cm9uZyBwZXJpcGhlcmFsXG4iKTsNCj4+ICvCoMKgwqDCoMKgwqDC oCByZXR1cm4gRUZJX1NUX0ZBSUxVUkU7DQo+PiArwqDCoMKgIH0NCj4+ICsNCj4+ICvCoMKg wqAgaWYgKCFpb19wcm90b2NvbC0+bWF4aW11bV90cmFuc2Zlcl9ieXRlcykgew0KPj4gK8Kg wqDCoMKgwqDCoMKgIGVmaV9zdF9lcnJvcigiU1BJIElPIHByb3RvY29sIGhhcyB6ZXJvIG1h eGltdW0gdHJhbnNmZXIgDQo+PiBzaXplXG4iKTsNCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1 cm4gRUZJX1NUX0ZBSUxVUkU7DQo+PiArwqDCoMKgIH0NCj4+ICsNCj4+ICvCoMKgwqAgaWYg KCFpb19wcm90b2NvbC0+bGVnYWN5X3NwaV9wcm90b2NvbCkgew0KPj4gK8KgwqDCoMKgwqDC oMKgIGVmaV9zdF9lcnJvcigiU1BJIElPIHByb3RvY29sIGxhY2tzIGxlZ2FjeSBTUEkgcHJv dG9jb2xcbiIpOw0KPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBFRklfU1RfRkFJTFVSRTsN Cj4+ICvCoMKgwqAgfQ0KPj4gKw0KPj4gK8KgwqDCoCBpZiAoIWlvX3Byb3RvY29sLT50cmFu c2FjdGlvbikgew0KPj4gK8KgwqDCoMKgwqDCoMKgIGVmaV9zdF9lcnJvcigiU1BJIElPIHBy b3RvY29sIGxhY2tzIHRyYW5zYWN0aW9uIGZ1bmN0aW9uXG4iKTsNCj4+ICvCoMKgwqDCoMKg wqDCoCByZXR1cm4gRUZJX1NUX0ZBSUxVUkU7DQo+PiArwqDCoMKgIH0NCj4+ICsNCj4+ICvC oMKgwqAgaWYgKCFpb19wcm90b2NvbC0+dXBkYXRlX3NwaV9wZXJpcGhlcmFsKSB7DQo+PiAr wqDCoMKgwqDCoMKgwqAgZWZpX3N0X2Vycm9yKCJTUEkgSU8gcHJvdG9jb2wgbGFja3MgdXBk YXRlX3NwaV9wZXJpcGhlcmFsIA0KPj4gZnVuY3Rpb25cbiIpOw0KPj4gK8KgwqDCoMKgwqDC oMKgIHJldHVybiBFRklfU1RfRkFJTFVSRTsNCj4+ICvCoMKgwqAgfQ0KPj4gKw0KPj4gK8Kg wqDCoCBpZiAoIWlvX3Byb3RvY29sLT5sZWdhY3lfc3BpX3Byb3RvY29sLT5lcmFzZV9ibG9j a19vcGNvZGUpIHsNCj4+ICvCoMKgwqDCoMKgwqDCoCBlZmlfc3RfZXJyb3IoIlNQSSBsZWdh Y3kgY29udHJvbGxlciBwcm90b2NvbCBsYWNrcyANCj4+IGVyYXNlX2Jsb2NrX29wY29kZSBm dW5jdGlvblxuIik7DQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEVGSV9TVF9GQUlMVVJF Ow0KPj4gK8KgwqDCoCB9DQo+PiArDQo+PiArwqDCoMKgIGlmICghaW9fcHJvdG9jb2wtPmxl Z2FjeV9zcGlfcHJvdG9jb2wtPndyaXRlX3N0YXR1c19wcmVmaXgpIHsNCj4+ICvCoMKgwqDC oMKgwqDCoCBlZmlfc3RfZXJyb3IoIlNQSSBsZWdhY3kgY29udHJvbGxlciBwcm90b2NvbCBs YWNrcyANCj4+IHdyaXRlX3N0YXR1c19wcmVmaXggZnVuY3Rpb25cbiIpOw0KPj4gK8KgwqDC oMKgwqDCoMKgIHJldHVybiBFRklfU1RfRkFJTFVSRTsNCj4+ICvCoMKgwqAgfQ0KPiANCj4g SSB3b3VsZCBoYXZlIGV4cGVjdGVkIHRoYXQgeW91IGFjdHVhbGx5IGNhbGwgZWFjaCBvZiB0 aGUgZnVuY3Rpb25zLg0KDQpJIGNhbiBleHRlbmQgdGhpcyBpbiB2MyB0byBjYWxsIGVhY2gg ZnVuY3Rpb24gYW5kIGNvbmZpcm0gdGhleSByZXR1cm4gDQpFRklfVU5TVVBQT1JURUQuDQoN Cj4gDQo+PiArDQo+PiArwqDCoMKgIGlmICghaW9fcHJvdG9jb2wtPmxlZ2FjeV9zcGlfcHJv dG9jb2wtPmJpb3NfYmFzZV9hZGRyZXNzKSB7DQo+PiArwqDCoMKgwqDCoMKgwqAgZWZpX3N0 X2Vycm9yKCJTUEkgbGVnYWN5IGNvbnRyb2xsZXIgcHJvdG9jb2wgbGFja3MgDQo+PiBiaW9z X2Jhc2VfYWRkcmVzcyBmdW5jdGlvblxuIik7DQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJu IEVGSV9TVF9GQUlMVVJFOw0KPj4gK8KgwqDCoCB9DQo+PiArDQo+PiArwqDCoMKgIGlmICgh aW9fcHJvdG9jb2wtPmxlZ2FjeV9zcGlfcHJvdG9jb2wtPmNsZWFyX3NwaV9wcm90ZWN0KSB7 DQo+PiArwqDCoMKgwqDCoMKgwqAgZWZpX3N0X2Vycm9yKCJTUEkgbGVnYWN5IGNvbnRyb2xs ZXIgcHJvdG9jb2wgbGFja3MgDQo+PiBjbGVhcl9zcGlfcHJvdGVjdCBmdW5jdGlvblxuIik7 DQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEVGSV9TVF9GQUlMVVJFOw0KPj4gK8KgwqDC oCB9DQo+PiArDQo+PiArwqDCoMKgIGlmICghaW9fcHJvdG9jb2wtPmxlZ2FjeV9zcGlfcHJv dG9jb2wtPmlzX3JhbmdlX3Byb3RlY3RlZCkgew0KPj4gK8KgwqDCoMKgwqDCoMKgIGVmaV9z dF9lcnJvcigiU1BJIGxlZ2FjeSBjb250cm9sbGVyIHByb3RvY29sIGxhY2tzIA0KPj4gaXNf cmFuZ2VfcHJvdGVjdGVkIGZ1bmN0aW9uXG4iKTsNCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1 cm4gRUZJX1NUX0ZBSUxVUkU7DQo+PiArwqDCoMKgIH0NCj4+ICsNCj4+ICvCoMKgwqAgaWYg KCFpb19wcm90b2NvbC0+bGVnYWN5X3NwaV9wcm90b2NvbC0+cHJvdGVjdF9uZXh0X3Jhbmdl KSB7DQo+PiArwqDCoMKgwqDCoMKgwqAgZWZpX3N0X2Vycm9yKCJTUEkgbGVnYWN5IGNvbnRy b2xsZXIgcHJvdG9jb2wgbGFja3MgDQo+PiBwcm90ZWN0X25leHRfcmFuZ2UgZnVuY3Rpb25c biIpOw0KPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBFRklfU1RfRkFJTFVSRTsNCj4+ICvC oMKgwqAgfQ0KPj4gKw0KPj4gK8KgwqDCoCBpZiAoIWlvX3Byb3RvY29sLT5sZWdhY3lfc3Bp X3Byb3RvY29sLT5sb2NrX2NvbnRyb2xsZXIpIHsNCj4+ICvCoMKgwqDCoMKgwqDCoCBlZmlf c3RfZXJyb3IoIlNQSSBsZWdhY3kgY29udHJvbGxlciBwcm90b2NvbCBsYWNrcyANCj4+IGxv Y2tfY29udHJvbGxlciBmdW5jdGlvblxuIik7DQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJu IEVGSV9TVF9GQUlMVVJFOw0KPj4gK8KgwqDCoCB9DQo+PiArDQo+PiArwqDCoMKgIHJlcVsw XSA9IDB4OWY7DQo+PiArwqDCoMKgIHJldCA9IGlvX3Byb3RvY29sLT50cmFuc2FjdGlvbihp b19wcm90b2NvbCwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBTUElfVFJBTlNBQ1RJT05fRlVMTF9EVVBMRVgsDQo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZmFsc2UsIDAsIDEsIDgsDQo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZW9mKHJl cSksIHJlcSwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzaXplb2YocmVzcCksIHJlc3ApOw0KPj4gK8KgwqDCoCBpZiAocmV0ICE9IEVGSV9T VUNDRVNTKSB7DQo+PiArwqDCoMKgwqDCoMKgwqAgZWZpX3N0X2Vycm9yKCJTUEkgdHJhbnNh Y3Rpb24gZmFpbGVkXG4iKTsNCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gRUZJX1NUX0ZB SUxVUkU7DQo+PiArwqDCoMKgIH0NCj4+ICsNCj4+ICvCoMKgwqAgaWYgKChyZXNwWzBdICE9 IDB4ZmYpIHx8IChyZXNwWzFdICE9IDB4MjApIHx8IChyZXNwWzJdICE9IDB4MjApIA0KPj4g fHwgKHJlc3BbM10gIT0gMHgxNSkpIHsNCj4+ICvCoMKgwqDCoMKgwqDCoCBlZmlfc3RfZXJy b3IoIkluY29ycmVjdCByZXNwb25zZSBmcm9tIHNhbmRib3ggU1BJIGZsYXNoIA0KPj4gZW11 bGF0b3JcbiIpOw0KPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBFRklfU1RfRkFJTFVSRTsN Cj4+ICvCoMKgwqAgfQ0KPj4gKw0KPj4gK8KgwqDCoCByZXR1cm4gRUZJX1NUX1NVQ0NFU1M7 DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgdGVzdF9idXMoc3RydWN0IGVmaV9zcGlf YnVzICpidXMpDQo+PiArew0KPj4gK8KgwqDCoCBzdHJ1Y3QgZWZpX3NwaV9wZXJpcGhlcmFs ICpwOw0KPj4gK8KgwqDCoCBpbnQgc3RhdHVzOw0KPj4gKw0KPj4gK8KgwqDCoCBpZiAoIWJ1 cy0+ZnJpZW5kbHlfbmFtZSkgew0KPj4gK8KgwqDCoMKgwqDCoMKgIGVmaV9zdF9lcnJvcigi U1BJIGJ1cyBsYWNrcyBhIGZyaWVuZGx5IG5hbWVcbiIpOw0KPj4gK8KgwqDCoMKgwqDCoMKg IHJldHVybiBFRklfU1RfRkFJTFVSRTsNCj4+ICvCoMKgwqAgfQ0KPj4gKw0KPj4gK8KgwqDC oCBpZiAoIWJ1cy0+cGVyaXBoZXJhbF9saXN0KSB7DQo+PiArwqDCoMKgwqDCoMKgwqAgZWZp X3N0X2Vycm9yKCJTUEkgYnVzIGhhcyB6ZXJvIHBlcmlwaGVyYWxzXG4iKTsNCj4+ICvCoMKg wqDCoMKgwqDCoCByZXR1cm4gRUZJX1NUX0ZBSUxVUkU7DQo+PiArwqDCoMKgIH0NCj4+ICsN Cj4+ICvCoMKgwqAgaWYgKCFidXMtPmNsb2NrKSB7DQo+PiArwqDCoMKgwqDCoMKgwqAgZWZp X3N0X2Vycm9yKCJTUEkgYnVzIGxhY2tzIGNsb2NrIGZ1bmN0aW9uXG4iKTsNCj4+ICvCoMKg wqDCoMKgwqDCoCByZXR1cm4gRUZJX1NUX0ZBSUxVUkU7DQo+PiArwqDCoMKgIH0NCj4+ICsN Cj4+ICvCoMKgwqAgZm9yIChwID0gYnVzLT5wZXJpcGhlcmFsX2xpc3Q7IHA7IHAgPSBwLT5u ZXh0X3NwaV9wZXJpcGhlcmFsKSB7DQo+PiArwqDCoMKgwqDCoMKgwqAgc3RhdHVzID0gdGVz dF9wZXJpcGhlcmFsKHAsIGJ1cyk7DQo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHN0YXR1cykg ew0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZWZpX3N0X2Vycm9yKCJGYWlsZWQgdGVz dGluZyBTUEkgcGVyaXBoZXJhbFxuIik7DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBy ZXR1cm4gc3RhdHVzOw0KPj4gK8KgwqDCoMKgwqDCoMKgIH0NCj4+ICvCoMKgwqAgfQ0KPj4g Kw0KPj4gK8KgwqDCoCByZXR1cm4gRUZJX1NUX1NVQ0NFU1M7DQo+PiArfQ0KPj4gKw0KPj4g K3N0YXRpYyBpbnQgZXhlY3V0ZSh2b2lkKQ0KPj4gK3sNCj4+ICvCoMKgwqAgc3RydWN0IGVm aV9zcGlfY29uZmlndXJhdGlvbl9wcm90b2NvbCAqc3BpOw0KPj4gK8KgwqDCoCBlZmlfc3Rh dHVzX3QgcmV0Ow0KPj4gK8KgwqDCoCBpbnQgc3RhdHVzOw0KPj4gK8KgwqDCoCB1MzIgaTsN Cj4+ICsNCj4+ICvCoMKgwqAgcmV0ID0gYm9vdHRpbWUtPmxvY2F0ZV9wcm90b2NvbCgmZWZp X3NwaV9jb25maWd1cmF0aW9uX2d1aWQsDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgTlVMTCwgKHZvaWQgKiopJnNwaSk7DQo+PiArwqDCoMKgIGlmIChy ZXQgIT0gRUZJX1NVQ0NFU1MpIHsNCj4+ICvCoMKgwqDCoMKgwqDCoCBlZmlfc3RfZXJyb3Io IlNQSSBjb25maWd1cmF0aW9uIHByb3RvY29sIG5vdCBhdmFpbGFibGVcbiIpOw0KPj4gK8Kg wqDCoMKgwqDCoMKgIHJldHVybiBFRklfU1RfRkFJTFVSRTsNCj4+ICvCoMKgwqAgfQ0KPj4g Kw0KPj4gK8KgwqDCoCBpZiAoIXNwaS0+YnVzX2NvdW50KSB7DQo+PiArwqDCoMKgwqDCoMKg wqAgZWZpX3N0X2Vycm9yKCJTUEkgY29uZmlndXJhdGlvbiBwcm90b2NvbCBoYXMgemVybyBi dXNzZXNcbiIpOw0KPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBFRklfU1RfRkFJTFVSRTsN Cj4+ICvCoMKgwqAgfQ0KPj4gKw0KPj4gK8KgwqDCoCBmb3IgKGkgPSAwOyBpIDwgc3BpLT5i dXNfY291bnQ7IGkrKykgew0KPj4gK8KgwqDCoMKgwqDCoMKgIHN0YXR1cyA9IHRlc3RfYnVz KHNwaS0+YnVzX2xpc3RbaV0pOw0KPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChzdGF0dXMpIHsN Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVmaV9zdF9lcnJvcigiRmFpbGVkIHRlc3Rp bmcgU1BJIGJ1cyAlZFxuIiwgaSk7DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1 cm4gc3RhdHVzOw0KPj4gK8KgwqDCoMKgwqDCoMKgIH0NCj4+ICvCoMKgwqAgfQ0KPiANCj4g VGhpcyB0ZXN0IGRvZXMgbm90IHRlc3QgYW55dGhpbmcgY2hhbmdpbmcgYW55IHN0YXRlIG9m IFNQSSBmbGFzaC4gV2h5IGlzDQo+IHRoaXMgcGF0Y2ggbmVlZGVkIGlmIHRoYXQgaXMgYWxs IHRoYXQgaXMgdXNhYmxlPw0KDQpUaGUgdGVzdCBoZXJlIGlzIGNvbmZpcm1pbmcgdGhhdCBp b19wcm90b2NvbC0+dHJhbnNhY3Rpb24oKSB3b3JrcyBhcyANCmV4cGVjdGVkLCB3aXRob3V0 IHJlLXRlc3RpbmcgdGhlIHUtYm9vdCBzcGkgZHJpdmVyIG1vZGVsIG9yIHNhbmRib3ggc3Bp IA0KZHJpdmVycyBhcyB0aGV5IHNob3VsZCBiZSBhbHJlYWR5IHRlc3RlZCBlbHNld2hlcmUu DQoNCkkgY291bGQgZXh0ZW5kIHRoaXMgdG8gYWxzbyB0ZXN0IHRoZSBTUElfVFJBTlNBQ1RJ T05fV1JJVEVfVEhFTl9SRUFEIA0KdHJhbnNhY3Rpb24gdHlwZS4gVGVzdGluZyB0aGUgb3Ro ZXIgdHJhbnNhY3Rpb24gdHlwZXMgDQooU1BJX1RSQU5TQUNUSU9OX1dSSVRFX09OTFkgJiBT UElfVFJBTlNBQ1RJT05fUkVBRF9PTkxZKSB3b3VsZCByZXF1aXJlIA0KZXh0ZW5kaW5nIHRo ZSBzYW5kYm94IHNwaSBkcml2ZXJzIHNpbmNlIHRoZXJlJ3Mgbm90IHJlYWxseSBhIHZhbGlk IHdheSANCnRvIHVzZSB0aGVzZSB3aXRoIGFuIGVtdWxhdGVkIGplZGVjIGZsYXNoIGRldmlj ZS4NCg0KPiANCj4gQmVzdCByZWdhcmRzDQo+IA0KPiBIZWlucmljaA0KPiANCj4+ICsNCj4+ ICvCoMKgwqAgcmV0dXJuIEVGSV9TVF9TVUNDRVNTOw0KPj4gK30NCj4+ICsNCj4+ICtFRklf VU5JVF9URVNUKHNwaV9wcm90b2NvbCkgPSB7DQo+PiArwqDCoMKgIC5uYW1lID0gIlNQSSBw cm90b2NvbCIsDQo+PiArwqDCoMKgIC5waGFzZSA9IEVGSV9FWEVDVVRFX0JFRk9SRV9CT09U VElNRV9FWElULA0KPj4gK8KgwqDCoCAuc2V0dXAgPSBzZXR1cCwNCj4+ICvCoMKgwqAgLmV4 ZWN1dGUgPSBleGVjdXRlLA0KPj4gK307DQo+IA0KDQotLSANClBhdWwgQmFya2VyDQpQcmlu Y2lwYWwgU29mdHdhcmUgRW5naW5lZXINClNhbkNsb3VkIEx0ZA0KDQplOiBwYXVsLmJhcmtl ckBzYW5jbG91ZC5jb20NCnc6IGh0dHBzOi8vc2FuY2xvdWQuY29tLw0K --------------9awycwDHqLuao5HTu1VzoSCm Content-Type: application/pgp-keys; name="OpenPGP_0xA67255DFCCE62ECD.asc" Content-Disposition: attachment; filename="OpenPGP_0xA67255DFCCE62ECD.asc" Content-Description: OpenPGP public key Content-Transfer-Encoding: quoted-printable -----BEGIN PGP PUBLIC KEY BLOCK----- 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 4yvD5AdHy8s8HYtBP5oowjSllz6aOtP0BiQ=3D =3Duult -----END PGP PUBLIC KEY BLOCK----- --------------9awycwDHqLuao5HTu1VzoSCm-- --------------eOOy0SNhsqaKJygeDqwlELMu-- --------------1pjXOVrP0G9hE0XF0A5YoyKp Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature" -----BEGIN PGP SIGNATURE----- wnsEABYIACMWIQS7m7rT1+CktY3YG1PYN3IfEvob6gUCYwdVuwUDAAAAAAAKCRDYN3IfEvob6hGn AQCP/M2NVq51YL2UwJOE811PIu0RftS/i80mR3viqTGyAAD8CLUNjAqyNro7SvZSyRuWw3wMoBmO fcpIpyFUAuszTA4= =Msxi -----END PGP SIGNATURE----- --------------1pjXOVrP0G9hE0XF0A5YoyKp--