Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp681219pxj; Wed, 2 Jun 2021 08:47:36 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxpolHRn1960IpkIsB/A3/ly7sSRBWS0HQWJOXtXOHRTimHj7pZQgVMy9xr8xsONnX/bET6 X-Received: by 2002:a17:906:640c:: with SMTP id d12mr34229957ejm.70.1622648856345; Wed, 02 Jun 2021 08:47:36 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id b8si244167edd.8.2021.06.02.08.47.11; Wed, 02 Jun 2021 08:47:36 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@synopsys.com header.s=mail header.b=ehDy6DXZ; dkim=fail header.i=@synopsys.com header.s=selector1 header.b=jg69UUnk; arc=fail (signature failed); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=synopsys.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232376AbhFBPqk (ORCPT + 99 others); Wed, 2 Jun 2021 11:46:40 -0400 Received: from smtprelay-out1.synopsys.com ([149.117.87.133]:41734 "EHLO smtprelay-out1.synopsys.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232425AbhFBPqj (ORCPT ); Wed, 2 Jun 2021 11:46:39 -0400 Received: from mailhost.synopsys.com (us03-mailhost2.synopsys.com [10.4.17.18]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client CN "mailhost.synopsys.com", Issuer "SNPSica2" (verified OK)) by smtprelay-out1.synopsys.com (Postfix) with ESMTPS id 9B410C04AA; Wed, 2 Jun 2021 15:44:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=synopsys.com; s=mail; t=1622648695; bh=0s+yxxOfHhsrNYC5NXxtL0gJTzXsiy1S5ZgiRRV9QmE=; h=From:To:CC:Subject:Date:References:In-Reply-To:From; b=ehDy6DXZSOibguTEfmRfWn04KI8evP2Ex0MQfxBs27FPx2ZkwGHsSGRU2LdxhnY3J feOXn/BpRWoxIb8gR1WTcPFeaEJY/f7ivaGWxL656vF0CHZbN2QYvoeXyqftm+eRr4 b4SbA6PexjpwRpmISp0NOJc/c4TCI1q4f/4642XaRTaSaqxAujDvyPaDw95STjzDRk hb26DgpCDZWwPwB18Kf0+OcDYM1M9xJUbdxjEV/dmsl6QXRbQmvON6GHNeTERg8egj VtPNy/Ob9kCLpQI2zkbmMV+MIeRCD5TxJPn0Xf4nc85VrpuMofU1NJJeyk/SFsZqJK /WLhTGkp/L6Zg== Received: from o365relay-in.synopsys.com (us03-o365relay1.synopsys.com [10.4.161.137]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client CN "o365relay-in.synopsys.com", Issuer "Entrust Certification Authority - L1K" (verified OK)) by mailhost.synopsys.com (Postfix) with ESMTPS id 71E1AA0062; Wed, 2 Jun 2021 15:44:54 +0000 (UTC) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12lp2175.outbound.protection.outlook.com [104.47.55.175]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mail.protection.outlook.com", Issuer "DigiCert Cloud Services CA-1" (verified OK)) by o365relay-in.synopsys.com (Postfix) with ESMTPS id B088D800EC; Wed, 2 Jun 2021 15:44:52 +0000 (UTC) Authentication-Results: o365relay-in.synopsys.com; dmarc=pass (p=reject dis=none) header.from=synopsys.com Authentication-Results: o365relay-in.synopsys.com; spf=pass smtp.mailfrom=nelsonc@synopsys.com Authentication-Results: o365relay-in.synopsys.com; dkim=pass (1024-bit key; unprotected) header.d=synopsys.com header.i=@synopsys.com header.b="jg69UUnk"; dkim-atps=neutral ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=aKllb1FhIYVv5Z5rwrggifp5T6dY8R3J+xR911NKR+DC5lv32myIvebGYLWfecicMaxzr49CWO5tPpSAP7HBSbhZLSb3i+PD+yfTotmFD3woZxN8qRvWkLdl1o8muuDpB9VSO5TDwt7hMzCcrHnqNAFv9YgOXMw2oinffLPnZWQz+Zz1aHo6hnA7wUC6YmQBSu88g/ZHuGu5D7RxMp+4P0987/3bu9247o3dhJrdVQt8M6pVTZt/mRC5Sc0YglhgtEUlYI3JqVMr+UyWbKVlE6jTlmKIpxSz0aphtrEbUfxHW1r7W+lSPepnACeqhlQXqNMuykLkzvR16gysGpk2uQ== 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-SenderADCheck; bh=0s+yxxOfHhsrNYC5NXxtL0gJTzXsiy1S5ZgiRRV9QmE=; b=ShwCaDxMR4oxtnQMLvreTcmV1j72OSXmaOpAGE741MQz3tuZK+3zDytfymkZ6cau1NZL/S7BgxtB2UxJSs8mwQwL0yX34JRmYi3b8vGdZ2Javdd8lzldhlNus5mvEii093nQ9x8U/MAjNmgQcidi2i8GibgVJA9MCeYQUFE/jZIwEpCPbL2UjlH9FIRKkZHrB3UCQTkMGikWJlN6HoJLZ7c7eLH16CUtj5IAVLWs5FCp7JjUqAItAvoflR8SSCmFKrDQ6Y5AGsG070qzRvcmJ1qEbzHlxMMI6+TZ/Yk6TBZUWFQGfNih5OQP961qBtKZTqyV4or1oI5gHhhgzlHxpA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=synopsys.com; dmarc=pass action=none header.from=synopsys.com; dkim=pass header.d=synopsys.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=synopsys.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0s+yxxOfHhsrNYC5NXxtL0gJTzXsiy1S5ZgiRRV9QmE=; b=jg69UUnkyzX0XWqA2ATQd7jEhgu0Ld0TSRDi8KK1DWSR4lEbq/iTkKs23E3aJNrNBKKGMj0exUL+dGBjMR90spntaJqP0Ty3XJJO9xXsH/p1FJx+mk8RqkNByDwsXgitZ6ri4pNX86LlHD1+VoXH2YnKWoeoiurqohlJZE+XwdY= Received: from MW3PR12MB4459.namprd12.prod.outlook.com (2603:10b6:303:56::22) by MW3PR12MB4396.namprd12.prod.outlook.com (2603:10b6:303:59::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4195.20; Wed, 2 Jun 2021 15:44:48 +0000 Received: from MW3PR12MB4459.namprd12.prod.outlook.com ([fe80::f806:3409:f651:a085]) by MW3PR12MB4459.namprd12.prod.outlook.com ([fe80::f806:3409:f651:a085%3]) with mapi id 15.20.4173.030; Wed, 2 Jun 2021 15:44:47 +0000 X-SNPS-Relay: synopsys.com From: Nelson Costa To: Hans Verkuil , "linux-media@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "devicetree@vger.kernel.org" CC: Mauro Carvalho Chehab , Laurent Pinchart , Kishon Vijay Abraham I , Vinod Koul , Rob Herring , Jose Abreu Subject: RE: [PATCH 6/9] media: platform: Add Synopsys DesignWare HDMI RX Controller Driver Thread-Topic: [PATCH 6/9] media: platform: Add Synopsys DesignWare HDMI RX Controller Driver Thread-Index: AQHXV6HhRYZ7uibcgUqXqZQN5IkapqsAnNwAgAA6HiA= Date: Wed, 2 Jun 2021 15:44:47 +0000 Message-ID: References: <42b1ff078618a90973f25311eae725f0f151acc5.1622631488.git.nelson.costa@synopsys.com> <19a78e24-b767-e5bb-e932-e704fe8614be@xs4all.nl> In-Reply-To: <19a78e24-b767-e5bb-e932-e704fe8614be@xs4all.nl> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-dg-ref: =?utf-8?B?UEcxbGRHRStQR0YwSUc1dFBTSmliMlI1TG5SNGRDSWdjRDBpWXpwY2RYTmxj?= =?utf-8?B?bk5jYm1Wc2MyOXVZMXhoY0hCa1lYUmhYSEp2WVcxcGJtZGNNRGxrT0RRNVlq?= =?utf-8?B?WXRNekprTXkwMFlUUXdMVGcxWldVdE5tSTROR0poTWpsbE16VmlYRzF6WjNO?= =?utf-8?B?Y2JYTm5MVGN4WVdZNVpUSTRMV016WWprdE1URmxZaTA1Tm1aa0xXSTBaRFZp?= =?utf-8?B?Wkdaa09UUTRNRnhoYldVdGRHVnpkRnczTVdGbU9XVXlPUzFqTTJJNUxURXha?= =?utf-8?B?V0l0T1RabVpDMWlOR1ExWW1SbVpEazBPREJpYjJSNUxuUjRkQ0lnYzNvOUlq?= =?utf-8?B?RXpORFV3TXlJZ2REMGlNVE15TmpjeE1qSXlPREU0T1RNeU1EYzFJaUJvUFNK?= =?utf-8?B?a2IyUmhhMVE1TWpodEwwaEhTekpPTnpWcmR5OXJUbmg1WnpnOUlpQnBaRDBp?= =?utf-8?B?SWlCaWJEMGlNQ0lnWW04OUlqRWlJR05wUFNKalFVRkJRVVZTU0ZVeFVsTlNW?= =?utf-8?B?VVpPUTJkVlFVRklXVWxCUVVKeVFsRnZNSGhzWmxoQlkwMUViMVZQSzNCSFQy?= =?utf-8?B?ZDNkMDlvVVRjMmExazJRVTVCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVG?= =?utf-8?B?QlFVRkJTRUZCUVVGQlIwTkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZC?= =?utf-8?B?UVVGQlJVRkJVVUZDUVVGQlFUVm9RbVF5UVVGQlFVRkJRVUZCUVVGQlFVRkJR?= =?utf-8?B?VW8wUVVGQlFtMUJSMnRCWW1kQ2FFRkhORUZaZDBKc1FVWTRRV05CUW5OQlIw?= =?utf-8?B?VkJZbWRDZFVGSGEwRmlaMEp1UVVZNFFXUjNRbWhCU0ZGQldsRkNlVUZITUVG?= =?utf-8?B?WlVVSjVRVWR6UVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZC?= =?utf-8?B?UVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJR?= =?utf-8?B?VUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFV?= =?utf-8?B?RkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGRlFVRkJRVUZCUVVG?= =?utf-8?B?QlFXZEJRVUZCUVVGdVowRkJRVWRaUVdKM1FqRkJSelJCV2tGQ2VVRklhMEZZ?= =?utf-8?B?ZDBKM1FVZEZRV05uUWpCQlJ6UkJXbEZDZVVGSVRVRllkMEp1UVVkWlFVRkJR?= =?utf-8?B?VUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFV?= =?utf-8?B?RkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVG?= =?utf-8?B?QlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZC?= =?utf-8?B?UVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJV?= =?utf-8?B?VUZCUVVGQlFVRkJRVU5CUVVGQlFVRkRaVUZCUVVGYVowSjJRVWhWUVdKblFt?= =?utf-8?B?dEJTRWxCWlZGQ1prRklRVUZaVVVKNVFVaFJRV0puUW14QlNFbEJZM2RDWmtG?= =?utf-8?B?SVRVRlpVVUowUVVoTlFXUlJRblZCUjJOQldIZENha0ZIT0VGaVowSnRRVUZC?= =?utf-8?B?UVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJR?= =?utf-8?B?VUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFV?= =?utf-8?B?RkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVG?= =?utf-8?B?QlFVRkJRVUZCUWtGQlFVRkJRVUZCUVVGSlFVRkJRVUZCU2pSQlFVRkNiVUZI?= =?utf-8?B?T0VGa1VVSjFRVWRSUVdOblFqVkJSamhCWTBGQ2FFRklTVUZrUVVKMVFVZFZR?= =?utf-8?B?V05uUW5wQlJqaEJZM2RDZEVGSGEwRlpkMEZCUVVGQlFVRkJRVUZCUVVGQlFV?= =?utf-8?B?RkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVG?= =?utf-8?B?QlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZC?= =?utf-8?B?UVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJR?= =?utf-8?B?VUZCUVVGQlFVRkJRVUZCUVVGQlFVVkJRVUZCUVVGQlFVRkJaMEZCUVVGQlFX?= =?utf-8?B?NW5RVUZCUjFsQlluZENNVUZITkVGYVFVSjVRVWhyUVZoM1FuZEJSMFZCWTJk?= =?utf-8?B?Q01FRkhORUZhVVVKNVFVaE5RVmgzUW5wQlNGRkJRVUZCUVVGQlFVRkJRVUZC?= =?utf-8?B?UVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJR?= =?utf-8?B?VUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFV?= =?utf-8?B?RkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVG?= =?utf-8?B?QlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZSUVVGQlFVRkJRVUZC?= =?utf-8?B?UTBGQlFVRkJRVU5sUVVGQlFWcG5RblpCU0ZWQlltZENhMEZJU1VGbFVVSm1R?= =?utf-8?B?VWhCUVZsUlFubEJTRkZCWW1kQ2JFRklTVUZqZDBKbVFVaFJRV04zUW5SQlIw?= =?utf-8?B?MUJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVG?= =?utf-8?B?QlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZC?= =?utf-8?B?UVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJR?= =?utf-8?B?VUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQ1FV?= =?utf-8?B?RkJRVUZCUVVGQlFVbEJRVUZCUVVGS05FRkJRVUp0UVVjNFFXUlJRblZCUjFG?= =?utf-8?B?QlkyZENOVUZHT0VGalFVSm9RVWhKUVdSQlFuVkJSMVZCWTJkQ2VrRkdPRUZr?= =?utf-8?B?VVVKMFFVZE5RVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJR?= =?utf-8?B?VUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFV?= =?utf-8?B?RkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVG?= =?utf-8?B?QlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZC?= =?utf-8?B?UVVGQlFVRkJSVUZCUVVGQlFVRkJRVUZuUVVGQlFVRkJibWRCUVVGSFkwRmtR?= =?utf-8?B?VUo2UVVZNFFXTkJRbmxCUnpoQldrRkNNVUZIVFVGa1FVSm1RVWhSUVdOblFt?= =?utf-8?B?aEJSMnRCWW1kQ2NFRkhORUZhZDBGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVG?= =?utf-8?B?QlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZC?= =?utf-8?B?UVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJR?= =?utf-8?B?VUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFV?= =?utf-8?B?RkJRVUZCUVVGQlFVRkJRVUZCUVZGQlFVRkJRVUZCUVVGRFFVRkJRVUZCUTJW?= =?utf-8?B?QlFVRkJZM2RDYUVGSGQwRmFVVUo2UVVZNFFWbFJRbXBCUjAxQlluZENNVUZI?= =?utf-8?B?TkVGa1FVSm1RVWhCUVdKQlFtaEJSelJCUVVGQlFVRkJRVUZCUVVGQlFVRkJR?= =?utf-8?B?VUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFV?= =?utf-8?B?RkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVG?= =?utf-8?B?QlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZC?= =?utf-8?B?UVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVSkJRVUZCUVVGQlFVRkJT?= =?utf-8?B?VUZCUVVGQlFVbzBRVUZCUW5wQlIwVkJZa0ZDYkVGSVRVRllkMEo0UVVoVlFX?= =?utf-8?B?SjNRakJCUjFWQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVG?= =?utf-8?B?QlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZC?= =?utf-8?B?UVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJR?= =?utf-8?B?VUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFV?= =?utf-8?B?RkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZGUVVG?= =?utf-8?B?QlFVRkJRVUZCUVdkQlFVRkJRVUZ1WjBGQlFVaE5RV0puUW5kQlNFMUJXSGRD?= =?utf-8?B?YzBGSGEwRlpkMEpzUVVjMFFXTjNRbXhCUmpoQlpFRkNiRUZJU1VGaVVVSm1R?= =?utf-8?B?VVJGUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFV?= =?utf-8?B?RkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVG?= =?utf-8?B?QlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZC?= =?utf-8?B?UVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJR?= =?utf-8?B?VUZCUVVGQlVVRkJRVUZCUVVGQlFVTkJRVUZCUVVGRFpVRkJRVUZqZDBKMVFV?= =?utf-8?B?aEJRV04zUW1aQlIzZEJZVkZDYWtGSFZVRmlaMEo2UVVkVlFWaDNRakJCUjFW?= =?utf-8?B?QlkyZENkRUZHT0VGamQwSXdRVWhWUVZwQlFteEJSelJCWkVGQlFVRkJRVUZC?= =?utf-8?B?UVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJR?= =?utf-8?B?VUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFV?= =?utf-8?B?RkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVG?= =?utf-8?B?QlFVRkJRVUZCUVVGQlFVRkJRa0ZCUVVGQlFVRkJRVUZKUVVGQlFVRkJTalJC?= =?utf-8?B?UVVGQ01rRkhZMEZZZDBKeVFVZFZRV1ZSUWpOQlJ6aEJZMmRDYTBGQlFVRkJR?= =?utf-8?B?VUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFV?= =?utf-8?B?RkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVG?= =?utf-8?B?QlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZC?= =?utf-8?B?UVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJR?= =?utf-8?B?VUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVWQlFVRkJRVUZCUVVGQlow?= =?utf-8?Q?FBQUFBQSIvPjwvbWV0YT4=3D?= authentication-results: xs4all.nl; dkim=none (message not signed) header.d=none;xs4all.nl; dmarc=none action=none header.from=synopsys.com; x-originating-ip: [2.80.233.231] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: a14a0d24-8e05-416b-f200-08d925dd5a0e x-ms-traffictypediagnostic: MW3PR12MB4396: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:216; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 8Bw1aOS0PT8MpXc+Fn3WnK+dja/ag98veQPf59hUze6kgoR/ZdXmFKxiCzquoY6p1HBh+I9ISaMgxRY6pe3DoIWvdGxOWCK8/FWu1NXjrtOa8oQA9Tatj4dF60Llglx4c12YonskNkq77HHTT2qP7heh7Zc9xfppr9c75Z4nmhPLuahWTMkD4yCQS2vbWEFAQedbw5V3CpXd102izH9ADnjPFV/TQuzUBH5uUp7O/3+XllWs3neDykLq4f4kQDZRkJ0fjTy7uMOAS6O01eiO6KZkvFnw09dpAeCBNylrcXwgE9SBGzDqZmUNfq05SMamZmtHzTBCScajA1mbuiAoTOGku2Zo7mQCFYWBPlwI7+os+jy6SafNwe38+kYe3UNGsSS3oI80mNpAC0ugo6UWw8nkdOGI8YQu0W9YSonybRqFi6yFB4Eq9Jx0DJNNPYKgrQvFXGlQufl51ji80yb37tgeqoAjXKKC1zI0k7F8/dB3u8TmVM7ugFtvfBQc+gdJdjvTT7g9jhP4kWbSSCLOoERo9c179097yf0/41lOl9mG2c1KbsTPt1gyrzVykN+aKNNgJ6xVopyzvpG/SzMPytz/h7R9+W44dpkxpjff0dVAtIY8WdXzSlCPLnXjruxy82Ize1qDibeV/ooOw6gYRQ== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW3PR12MB4459.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(39860400002)(366004)(346002)(396003)(136003)(376002)(186003)(66946007)(26005)(66446008)(64756008)(30864003)(8936002)(76116006)(66556008)(52536014)(2906002)(66476007)(5660300002)(83380400001)(9686003)(38100700002)(478600001)(45080400002)(110136005)(54906003)(8676002)(55016002)(122000001)(86362001)(4326008)(71200400001)(33656002)(316002)(7696005)(53546011)(6506007)(107886003)(569008);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: =?utf-8?B?VjR0Wkk5b3k0NVpnRERRcmFGaDl4Mjl5b3gvdEV1MDhieVpsM1JHSmZrSzNx?= =?utf-8?B?WHJvRzJEaDB2Wi9lNWxEcUVnb0YyU1pORUpDMUtTMWpBemI3NmhLYmhsZGk5?= =?utf-8?B?VWxpaWxDQWlvVWJmSVo0djBZR1ZWb08xNXNWQ3pYZXJQZGZMZG5SL08raG1z?= =?utf-8?B?VDZ3VXRNUFl2MkRGM1lFOHU2V1FHTHE3NGY2NEZGMEd6eGpZZTVHaU9acTlG?= =?utf-8?B?Q1FaaDMrS3BWcDlVTmtVcUdhaVpIa2J5RHRTSHZaZGVLcEpHM01ZclpBMFdR?= =?utf-8?B?QWRmaWtreFNsZlIyMUtiM3FvdjlIZGRDYWtlWDI4b3FQOW1kWXNCbTZlK05z?= =?utf-8?B?NFQ1Nkl5aDlmc25BektnUHZ1UUdGQlpoLzA0cEVOMzBqVUg1N1N6UGpCOGov?= =?utf-8?B?R1JzS002QlkvMFR0WngzU1I4SFFmZ05ieGw5SzBGRVJsVU5JTk1aUmppZDVw?= =?utf-8?B?Qlg2MjlDT1YxWTMvTzdsTDF4NzN2a3ljWGhaOWxtWHNhWkRqaDJQNmVBeUxo?= =?utf-8?B?NVJycFc3di9Qc2JYZTNXUFF6bGlZSEJ3U25ZS3E2Y3JXUm5TNzVmSVdVY2pL?= =?utf-8?B?OXpoTklITS9UWnFHSU8rUU5hbVJ4M1dwOUltbktKRXVhMTY3eWVaKzhEMkNr?= =?utf-8?B?TFVYSXllWVFzRG1jM2FpdnlEOCs5QXBXcThFVUdVSHBMMU9DN0FKRTRHOGpX?= =?utf-8?B?YlgyRlVHcWFKaVZvdUhwTzhTbngwcXJsaXQ4dWZsWGlCSHhPUEwxN0pvTnVC?= =?utf-8?B?dE5uTUZZVmE5emRKWk9jeHdDZGZCaHdSeUJTaHZMTjM3dG5IcTJMLzhzYjNK?= =?utf-8?B?NHBod3g2SUtYT2pxcFdxbzYwdkFsWUY4aFFGRTUraUNIMTZCeG5NbXJPbGxV?= =?utf-8?B?bmU3NmV3cEYwd2lPd0YxeWVxWnc5OXBpTWNCb2NvM3hudTdsQnQyTzJHYUtX?= =?utf-8?B?dWNVSnpaeFFoYVVoYitXTEM3RkdoKzhXOU11WGMxcWEyaXU3ZHFYN3UvMWZy?= =?utf-8?B?c0JrNE1HSm9RSi9zak5MaFRKZkNIVGJnY0hMczhZZndHblhMbm9WbGM4YzJ6?= =?utf-8?B?QTMvcEJHTnZMOXFwVElKd3RtOS8rd253QUFwL0Y1MkRwRU55NDFTTmhSTjBm?= =?utf-8?B?YlhNMUJpM1UvRjdqNWk5WENDdDdMUE5VdlRGeWdGMCtkaGZFa2RVNnVuRngy?= =?utf-8?B?ckFEaDZudmY1WGNZZW04TDVQc3NPL2cwdS91dE9BNDRPd28rbjZwcjViY0xa?= =?utf-8?B?bXNEdzBBaVZDZHMxU0xkdkNUTU00bnYveHNyWWNTeEkvaHEra3FwbnZzQlEx?= =?utf-8?B?WTEzMGppVVZ1aGVkbHowK0RPVUpzQ0VPZ0dmbkFQTi9KcnI3U0Z6R2M3WEc5?= =?utf-8?B?ODVkRHl2WnJvTnExODRzVlJLNlk3S0Q3WElGYVdJZk40blNTdHhqQmlLcG8x?= =?utf-8?B?NERKb2c4bkc3RTFNSWgvNHh5N0lrdXBSRmtMS1VMd3FYWnczdWtLczdXVjc4?= =?utf-8?B?dGtzVFo4ZVlUcWxKUmZSMUErTFlNVStjaHR4Ym1FR2N2dkVOa0VWbEkxT1Jv?= =?utf-8?B?WTNBM3o1SHFLWkVqVHdoRE1aNXlOSjgrSGVEeFFHTWJmVmZibDZNOEhCWUpM?= =?utf-8?B?RTRmcElnekRyQkdVQjEzM3FwSUU3VlhqUlZpWk9HSlE5RmR1U3lxSTdBM2Ns?= =?utf-8?B?QVQvWkpUWis3VzFvbFc2dFhUcDFrZmtjTkJJVU9jNGFTZEp5eXA2emZpdFNz?= =?utf-8?Q?L4qdHMrtzdZypZfwkA=3D?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: synopsys.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW3PR12MB4459.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a14a0d24-8e05-416b-f200-08d925dd5a0e X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Jun 2021 15:44:47.6105 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: c33c9f88-1eb7-4099-9700-16013fd9e8aa X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: IQB/LozMHK4ZiDvpjeXm5V1IuQa5jegV+UCUffBeuQ3qLEltTd/ohfJ8UIa6bRcskqvfaG5hSp/QQtu1UyAuLQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW3PR12MB4396 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgSGFucywNCg0KVGhhbmtzIGZvciB5b3VyIGluaXRpYWwgY29tbWVudHMgYW5kIGZlZWRiYWNr IQ0KDQpGcm9tOiBIYW5zIFZlcmt1aWwgPGh2ZXJrdWlsLWNpc2NvQHhzNGFsbC5ubD4NCkRhdGU6 IHF1YSwganVuIDAyLCAyMDIxIGF0IDEyOjU0OjM4DQoNCj4gSGkgTmVsc29uLA0KPiANCj4gVGhh bmsgeW91IGZvciB0aGlzIHBhdGNoLiBTb21lIGluaXRpYWwgY29tbWVudHMgYmVsb3csIEkgd2ls bA0KPiBuZWVkIHRvIGdvIG92ZXIgdGhpcyBhbm90aGVyIHRpbWUgZm9yIHNvbWUgb2YgdGhlIGNv bG9yaW1ldHJ5DQo+IHJlbGF0ZWQgZnVuY3Rpb25zLg0KPiANCg0KT2suDQoNCj4gQlRXLCBpZiB5 b3UgYXJlIGludGVyZXN0ZWQgaW4gSERDUCBzdXBwb3J0LCBsZXQgbWUga25vdy4gQ2lzY28gd29y a2VkDQo+IG9uIGFuIEFQSSBmb3IgdGhpcywgYnV0IGR1ZSB0byB2YXJpb3VzIHJlYXNvbnMgd2Ug aGF2ZSBub3QgYmVlbiBhYmxlDQo+IHRvIHVwc3RyZWFtIGl0LiBCdXQgd2UgZG8gdXNlIGl0IGlu IG91ciBwcm9kdWN0cy4NCj4gDQoNCkdvb2QgdG8ga25vdyEgSW4gdGhhdCBjYXNlIGlmIGluIHRo ZSBmdXR1cmUgd2UgdGhpbmsgdG8gdXBzdHJlYW0gDQpzb21ldGhpbmcNCnJlbGF0ZWQgd2l0aCBI RENQIHdlIHdpbGwgbGV0IHlvdSBrbm93LiA6KQ0KQlRXLCB3aGljaCB2ZXJzaW9ucyBvZiBIRENQ ICgxLjQsIDIuMiwgMi4zKSB0aGUgQVBJIHN1cHBvcnRzPw0KDQo+IE9uIDAyLzA2LzIwMjEgMTM6 MjQsIE5lbHNvbiBDb3N0YSB3cm90ZToNCj4gPiBUaGlzIGlzIGFuIGluaXRpYWwgc3VibWlzc2lv biBmb3IgdGhlIFN5bm9wc3lzIERlc2lnbldhcmUgSERNSSBSWA0KPiA+IENvbnRyb2xsZXIgRHJp dmVyLiBJdCBpcyByZXNwb25zaWJsZSB0byBtYW5hZ2UgYW5kIGhhbmRsZSB0aGUgUEhZDQo+ID4g KHRocm91Z2ggdGhlIFBIWSBBUEkpIGFuZCB0aGUgQ29udHJvbGxlciBjb25maWd1cmF0aW9ucyBp biBvcmRlcg0KPiA+IHRvIGNvbmZpZ3VyZSB0aGUgdmlkZW8gYW5kIGF1ZGlvIHBpcGVsaW5lLg0K PiA+IA0KPiA+IFRoaXMgZHJpdmVyIGlzIGltcGxlbWVudGVkIGFzIGEgc3RhbmRhcmQgVjRMMiBz dWJkZXZpY2UuDQo+ID4gVGhlIG1haW4gZmVhdHVyZXMgb2YgdGhpcyBtb2R1bGUgYXJlOg0KPiA+ ICAtIFN1cHBvcnQgZm9yIHNjcmFtYmxpbmcNCj4gPiAgLSBTdXBwb3J0IGZvciBjb2xvciBkZXB0 aCB1cCB0byA0OGJwcA0KPiA+ICAtIFN1cHBvcnQgZm9yIEhETUkgMi4wIG1vZGVzIHVwIHRvIDZH IChIRE1JIDRrQDYwSHopDQo+ID4gIC0gU3VwcG9ydCBmb3IgUkdCLCBZQ0M0NDQsIFlDQzQyMiBh bmQgWUNDNDIwDQo+ID4gIC0gU3VwcG9ydCBmb3IgYmFzaWMgYXVkaW8gKExQQ00gMmNoLCAzMktI ei80NC4xS0h6LzQ4S0h6LCAxNmJpdCkNCj4gPiAgLSBTdXBwb3J0IGZvciBBc3BlY3QgUmF0aW8N Cj4gPiAgLSBTdXBwb3J0IGZvciBDRUMNCj4gPiAgLSBJbnRlcm5hbCBzdGF0ZSBtYWNoaW5lIHRo YXQgcmVjb25maWd1cmVzIFBIWSBhbmQgY29udHJvbGxlcg0KPiA+ICAtIEpUQUcgY29tbXVuaWNh dGlvbiB3aXRoIFBIWQ0KPiA+ICAtIEludGVyLW1vZHVsZSBjb21tdW5pY2F0aW9uIHdpdGggUEhZ IGRyaXZlcjoNCj4gPiAgICAqIHRocm91Z2ggdGhlIFBIWSBBUEkgdXNpbmcgdGhlIFBIWSByZWZl cmVuY2UgImhkbWktcGh5Ig0KPiA+ICAgICogdGhyb3VnaCB0aGUgY2FsbGJhY2tzIHRoYXQgUEhZ IERXQyBkcml2ZXIgbmVlZHMuDQo+ID4gIC0gRGVidWcgd3JpdGUvcmVhZCBpb2N0bHMuDQo+ID4g DQo+ID4gU2lnbmVkLW9mZi1ieTogSm9zZSBBYnJldSA8am9zZS5hYnJldUBzeW5vcHN5cy5jb20+ DQo+ID4gU2lnbmVkLW9mZi1ieTogTmVsc29uIENvc3RhIDxuZWxzb24uY29zdGFAc3lub3BzeXMu Y29tPg0KPiA+IC0tLQ0KPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL0tjb25maWcgICAgICAg ICAgfCAgICAyICsNCj4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9NYWtlZmlsZSAgICAgICAg IHwgICAgMSArDQo+ID4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vZHdjL0tjb25maWcgICAgICB8 ICAgMTMgKw0KPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2R3Yy9NYWtlZmlsZSAgICAgfCAg ICAzICsNCj4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9kd2MvZHctaGRtaS1yeC5jIHwgMzIz NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ID4gIGRyaXZlcnMvbWVkaWEvcGxh dGZvcm0vZHdjL2R3LWhkbWktcnguaCB8ICA0NzYgKysrKysNCj4gPiAgaW5jbHVkZS9tZWRpYS9k d2MvZHctaGRtaS1yeC1wZGF0YS5oICAgIHwgIDEyNiArKw0KPiA+ICA3IGZpbGVzIGNoYW5nZWQs IDM4NTggaW5zZXJ0aW9ucygrKQ0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRp YS9wbGF0Zm9ybS9kd2MvS2NvbmZpZw0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9t ZWRpYS9wbGF0Zm9ybS9kd2MvTWFrZWZpbGUNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvbWVkaWEvcGxhdGZvcm0vZHdjL2R3LWhkbWktcnguYw0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9kd2MvZHctaGRtaS1yeC5oDQo+ID4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBpbmNsdWRlL21lZGlhL2R3Yy9kdy1oZG1pLXJ4LXBkYXRhLmgNCj4gPiANCj4g PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9LY29uZmlnIGIvZHJpdmVycy9t ZWRpYS9wbGF0Zm9ybS9LY29uZmlnDQo+ID4gaW5kZXggYjIzOGE5Mi4uMjBkYjY4ZCAxMDA2NDQN Cj4gPiAtLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL0tjb25maWcNCj4gPiArKysgYi9kcml2 ZXJzL21lZGlhL3BsYXRmb3JtL0tjb25maWcNCj4gPiBAQCAtMjksNiArMjksOCBAQCBzb3VyY2Ug ImRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vY2FkZW5jZS9LY29uZmlnIg0KPiA+ICANCj4gPiAgc291 cmNlICJkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2RhdmluY2kvS2NvbmZpZyINCj4gPiAgDQo+ID4g K3NvdXJjZSAiZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9kd2MvS2NvbmZpZyINCj4gPiArDQo+ID4g IHNvdXJjZSAiZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9vbWFwL0tjb25maWciDQo+ID4gIA0KPiA+ ICBjb25maWcgVklERU9fQVNQRUVEDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxh dGZvcm0vTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL01ha2VmaWxlDQo+ID4gaW5k ZXggZWVkYzE0YS4uOTU1YWFlNiAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRm b3JtL01ha2VmaWxlDQo+ID4gKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9NYWtlZmlsZQ0K PiA+IEBAIC02LDYgKzYsNyBAQA0KPiA+ICBvYmotJChDT05GSUdfVklERU9fQUxMRUdST19EVlQp CQkrPSBhbGxlZ3JvLWR2dC8NCj4gPiAgb2JqLSQoQ09ORklHX1ZJREVPX0FTUEVFRCkJCSs9IGFz cGVlZC12aWRlby5vDQo+ID4gIG9iai0kKENPTkZJR19WSURFT19DQURFTkNFKQkJKz0gY2FkZW5j ZS8NCj4gPiArb2JqLXkJCQkJCSs9IGR3Yy8NCj4gPiAgb2JqLSQoQ09ORklHX1ZJREVPX1ZJQV9D QU1FUkEpICs9IHZpYS1jYW1lcmEubw0KPiA+ICBvYmotJChDT05GSUdfVklERU9fQ0FGRV9DQ0lD KSArPSBtYXJ2ZWxsLWNjaWMvDQo+ID4gIG9iai0kKENPTkZJR19WSURFT19NTVBfQ0FNRVJBKSAr PSBtYXJ2ZWxsLWNjaWMvDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0v ZHdjL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2R3Yy9LY29uZmlnDQo+ID4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwLi5lOTE1Y2E2DQo+ID4gLS0tIC9k ZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vZHdjL0tjb25maWcNCj4g PiBAQCAtMCwwICsxLDEzIEBADQo+ID4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjANCj4gPiArY29uZmlnIFZJREVPX0RXQ19IRE1JX1JYDQo+ID4gKwl0cmlzdGF0ZSAiU3lub3Bz eXMgRGVzaWduV2FyZSBIRE1JIFJlY2VpdmVyIGRyaXZlciINCj4gPiArCWRlcGVuZHMgb24gVklE RU9fVjRMMg0KPiA+ICsJc2VsZWN0IE1FRElBX0NPTlRST0xMRVINCj4gPiArCXNlbGVjdCBWSURF T19WNEwyX1NVQkRFVl9BUEkNCj4gPiArCXNlbGVjdCBIRE1JDQo+ID4gKwloZWxwDQo+ID4gKwkg IFN1cHBvcnQgZm9yIFN5bm9wc3lzIERlc2lnbldhcmUgSERNSSBSWCBDb250cm9sbGVyLg0KPiA+ ICsJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBIRE1JIDIuMCB2ZXJzaW9uLg0KPiA+ICsNCj4gPiAr CSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhl IG1vZHVsZQ0KPiA+ICsJICB3aWxsIGJlIGNhbGxlZCBkdy1oZG1pLXJ4Lg0KPiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2R3Yy9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEv cGxhdGZvcm0vZHdjL01ha2VmaWxlDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRl eCAwMDAwMDAwLi5mZGRkMzBjDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMv bWVkaWEvcGxhdGZvcm0vZHdjL01ha2VmaWxlDQo+ID4gQEAgLTAsMCArMSwzIEBADQo+ID4gKyMg U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCj4gPiArDQo+ID4gK29iai0kKENPTkZJ R19WSURFT19EV0NfSERNSV9SWCkgKz0gZHctaGRtaS1yeC5vDQo+ID4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvbWVkaWEvcGxhdGZvcm0vZHdjL2R3LWhkbWktcnguYyBiL2RyaXZlcnMvbWVkaWEvcGxh dGZvcm0vZHdjL2R3LWhkbWktcnguYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5k ZXggMDAwMDAwMC4uYjIwZWNjYw0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJz L21lZGlhL3BsYXRmb3JtL2R3Yy9kdy1oZG1pLXJ4LmMNCj4gPiBAQCAtMCwwICsxLDMyMzcgQEAN Cj4gPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCj4gPiArLyoNCj4gPiAr ICogQ29weXJpZ2h0IChjKSAyMDE4IC0gcHJlc2VudCBTeW5vcHN5cywgSW5jLiBhbmQvb3IgaXRz IGFmZmlsaWF0ZXMuDQo+ID4gKyAqIFN5bm9wc3lzIERlc2lnbldhcmUgSERNSSBSZWNlaXZlciBj b250cm9sbGVyIGRyaXZlcg0KPiA+ICsgKg0KPiA+ICsgKiBBdXRob3I6IEpvc2UgQWJyZXUgPGpv c2UuYWJyZXVAc3lub3BzeXMuY29tPg0KPiA+ICsgKiBBdXRob3I6IE5lbHNvbiBDb3N0YSA8bmVs c29uLmNvc3RhQHN5bm9wc3lzLmNvbT4NCj4gPiArICovDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8 bGludXgvY2xrLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KPiA+ICsjaW5jbHVk ZSA8bGludXgvZG1hLW1hcHBpbmcuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5o Pg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9v Zi5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4NCj4gPiArI2luY2x1ZGUg PGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5o Pg0KPiA+ICsjaW5jbHVkZSA8bGludXgvcGh5L2R3Yy9kdy1oZG1pLXBoeS1wZGF0YS5oPg0KPiA+ ICsjaW5jbHVkZSA8bGludXgvdjRsMi1kdi10aW1pbmdzLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51 eC93b3JrcXVldWUuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3JhdGlvbmFsLmg+DQo+ID4gKyNp bmNsdWRlIDxsaW51eC9oZG1pLmg+DQo+ID4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLWFzeW5jLmg+ DQo+ID4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLWN0cmxzLmg+DQo+ID4gKyNpbmNsdWRlIDxtZWRp YS92NGwyLWRldmljZS5oPg0KPiA+ICsjaW5jbHVkZSA8bWVkaWEvdjRsMi1kdi10aW1pbmdzLmg+ DQo+ID4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLWV2ZW50Lmg+DQo+ID4gKyNpbmNsdWRlIDxtZWRp YS92NGwyLXN1YmRldi5oPg0KPiA+ICsjaW5jbHVkZSA8bWVkaWEvZHdjL2R3LWhkbWktcngtcGRh dGEuaD4NCj4gPiArDQo+ID4gKyNpbmNsdWRlICJkdy1oZG1pLXJ4LmgiDQo+ID4gKw0KPiA+ICsj ZGVmaW5lIERXX0hETUlfREVGQVVMVF9USU1JTkcJCVY0TDJfRFZfQlRfQ0VBXzY0MFg0ODBQNTlf OTQNCj4gPiArI2RlZmluZSBEV19IRE1JX0pUQUdfVEFQX0FERFJfQ01ECTANCj4gPiArI2RlZmlu ZSBEV19IRE1JX0pUQUdfVEFQX1dSSVRFX0NNRAkxDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9KVEFH X1RBUF9SRUFEX0NNRAkzDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9BVURJT19GUkVRX1JBTkdFCTEw MDANCj4gPiArDQo+ID4gKy8qIEVESUQgZm9yIEhETUkgUlggKi8NCj4gPiArc3RhdGljIHUzMiBk d19oZG1pX2VkaWRbXSA9IHsNCj4gPiArCS8qIFYyIFN1cHBvcnQgZm9yICAgICAgICAgICAgICAg ICAgICAgICAgICAgKi8NCj4gPiArCS8qICAtIFZpZGVvIG1vZGVzIHVwLXRvIDIuOTdHYnBzICAg ICAgICAgICAgKi8NCj4gPiArCS8qICAtIFJHQiwgWWNjNDQ0LzQyMi80MjAgICAgICAgICAgICAg ICAgICAgKi8NCj4gPiArCS8qICAtIEF1ZGlvIDJDaCBMLVBDTSAgICAgICAgICAgICAgICAgICAg ICAgKi8NCj4gPiArCS8qICAtIFNDREMgQ0VEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ki8NCj4gPiArCTB4MDBGRkZGRkYsIDB4RkZGRkZGMDAsIDB4NEYyRTRBMjEsIDB4MDAwMDAwMDAs DQo+ID4gKwkweDMzMUUwMTAzLCAweDgwNDYyODc4LCAweDBBMERDOUEwLCAweDU3NDc5ODI3LA0K PiA+ICsJMHgxMjQ4NEMyMCwgMHgwMDAwMDEwMSwgMHgwMTAxMDEwMSwgMHgwMTAxMDEwMSwNCj4g PiArCTB4MDEwMTAxMDEsIDB4MDEwMTAyM0EsIDB4ODAxODcxMzgsIDB4MkQ0MDU4MkMsDQo+ID4g KwkweDQ1MDAyMEMyLCAweDMxMDAwMDFFLCAweDAxMUQwMDcyLCAweDUxRDAxRTIwLA0KPiA+ICsJ MHg2RTI4NTUwMCwgMHgyMEMyMzEwMCwgMHgwMDFFMDAwMCwgMHgwMEZDMDA1MywNCj4gPiArCTB4 NEU1MDUzMjAsIDB4NDg0NDRENDksIDB4MjA1MjU4MEEsIDB4MDAwMDAwRkQsDQo+ID4gKwkweDAw MTc3ODBGLCAweDg3MUUwMDBBLCAweDIwMjAyMDIwLCAweDIwMjAwMTYwLA0KPiA+ICsNCj4gPiAr CTB4MDIwMzU3NzEsIDB4ODMwMTAwMDAsIDB4NTc2OTY4NjcsIDB4NjQ2MzYyNUYsDQo+ID4gKwkw eDVFNUQ5MDFGLCAweDA0MTMxMjExLCAweDAzMDIwMTVBLCAweDU5NTg1NzU2LA0KPiA+ICsJMHg1 NTU1NTQ1MywgMHg1MjUxNTA0RiwgMHg0RTRENEM0QiwgMHg0QTQ5NDg0NywNCj4gPiArCTB4NDY0 NTQ0NDMsIDB4NDI0MTIzMDksIDB4MDcwNzZFMDMsIDB4MEMwMDEwMDAsDQo+ID4gKwkweEY4M0Iy MDAwLCAweDgwMDEwMjAzLCAweDA0NjdEODVELCAweEM0MDEwMDgwLA0KPiA+ICsJMHgwMEU1MEU2 NiwgMHg2NTYxNjAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwNCj4gPiArCTB4MDAwMDAwMDAs IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsDQo+ID4gKwkweDAwMDAwMDAwLCAw eDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMEI2LA0KPiA+ICt9Ow0KPiANCj4gVGhpcyB3 b24ndCB3b3JrLCBpdCdzIGEgYmFkIGlkZWEgdG8gaGF2ZSBhIGRlZmF1bHQgRURJRCBzaW5jZSBp dCBpcyBhbG1vc3QNCj4gY2VydGFpbmx5IHdyb25nIGFueXdheS4gVXNlcnNwYWNlIGhhcyB0byBz ZXQgdGhlIEVESUQgc2luY2UgdXNlcnNwYWNlIGtub3dzDQo+IHRoZSBjYXBhYmlsaXRpZXMgb2Yg dGhlIGRldmljZSBhcyBhIHdob2xlLiBJLmUuLCB3aGlsZSB0aGlzIHJlY2VpdmVyIHN1cHBvcnRz DQo+IHVwIHRvIDIuOTcgR2JwcywgdGhlcmUgbWlnaHQgb3RoZXIgY29udHJhaW50cyB0aGF0IHdv dWxkIGxvd2VyIHRoaXMgdmFsdWUuDQo+IEFuZCB0aGUgRURJRCBjb250YWlucyB2ZW5kb3IgYW5k IG1vZGVsIGluZm9ybWF0aW9uLCBhbmQgYWRkaXRpb24gYmxvY2tzIGFuZA0KPiBjYXBhYmlsaXRp ZXMgbWlnaHQgaGF2ZSB0byBiZSBzZXQuDQo+IA0KPiBTbyBrZWVwIHRoZSBFRElEIGVtcHR5IGFu ZCB0aGUgSFBEIGxvdyBhdCBzdGFydCB1cCwgYW5kIGxlYXZlIGl0IHRvIHVzZXJzcGFjZQ0KPiB0 byB3cml0ZSB0aGUgRURJRCAoZm9yIHRlc3RpbmcgdGhlIHY0bDItY3RsIHV0aWxpdHkgY29tZXMg d2l0aCBhIGJ1bmNoIG9mDQo+IHByZWRlZmluZWQgRURJRHMpLg0KPiANCg0KSSBhZ3JlZSEgVGhp cyB3aWxsIGJlIGFkZHJlc3NlZCBpbiB0aGUgbmV4dCBwYXRjaCBzZXJpZXMuDQoNCj4gPiArDQo+ ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9kdl90aW1pbmdzX2NhcCBkd19oZG1pX3RpbWlu Z3NfY2FwID0gew0KPiA+ICsJLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLA0KPiA+ICsJLnJl c2VydmVkID0geyAwIH0sDQo+ID4gKwlWNEwyX0lOSVRfQlRfVElNSU5HUyg2NDAsIDQwOTYsCQkJ LyogbWluL21heCB3aWR0aCAqLw0KPiA+ICsJCQkgICAgIDQ4MCwgNDQ1NSwJCQkvKiBtaW4vbWF4 IGhlaWdodCAqLw0KPiA+ICsJCQkgICAgIDIwMDAwMDAwLCA2MDAwMDAwMDAsCS8qIG1pbi9tYXgg cGl4ZWxjbG9jayAqLw0KPiA+ICsJCQkgICAgIC8qIHN0YW5kYXJkcyAqLw0KPiA+ICsJCQkgICAg IFY0TDJfRFZfQlRfU1REX0NFQTg2MSwNCj4gPiArCQkJICAgICAvKiBjYXBhYmlsaXRpZXMgKi8N Cj4gPiArCQkJICAgICBWNEwyX0RWX0JUX0NBUF9QUk9HUkVTU0lWRSkNCj4gPiArfTsNCj4gPiAr DQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9ldmVudCBkd19oZG1pX2V2ZW50X2ZtdCA9 IHsNCj4gPiArCS50eXBlID0gVjRMMl9FVkVOVF9TT1VSQ0VfQ0hBTkdFLA0KPiA+ICsJLnUuc3Jj X2NoYW5nZS5jaGFuZ2VzID0gVjRMMl9FVkVOVF9TUkNfQ0hfUkVTT0xVVElPTiwNCj4gPiArfTsN Cj4gPiArDQo+ID4gK2VudW0gZHdfaGRtaV9zdGF0ZSB7DQo+ID4gKwlIRE1JX1NUQVRFX05PX0lO SVQgPSAwLA0KPiA+ICsJSERNSV9TVEFURV9QT1dFUl9PRkYsDQo+ID4gKwlIRE1JX1NUQVRFX1BP V0VSX1VQLA0KPiA+ICsJSERNSV9TVEFURV9QSFlfQ09ORklHLA0KPiA+ICsJSERNSV9TVEFURV9I UEQsDQo+ID4gKwlIRE1JX1NUQVRFX0VRVUFMSVpFUiwNCj4gPiArCUhETUlfU1RBVEVfREFUQVBB VEgsDQo+ID4gKwlIRE1JX1NUQVRFX1ZJREVPX1VOU1RBQkxFLA0KPiA+ICsJSERNSV9TVEFURV9B VURJTywNCj4gPiArCUhETUlfU1RBVEVfUE9XRVJfT04sDQo+ID4gK307DQo+ID4gKw0KPiA+ICtz dHJ1Y3QgZHdfaGRtaV9pbmZvZnJhbWVfY2ZnIHsNCj4gPiArCWNvbnN0IGNoYXIgKmRlc2M7DQo+ ID4gKwl1OCBoZWFkZXJbM107DQo+ID4gKwl1MzIgaGVhZGVyX2FkZHI7DQo+ID4gKwl1MzIgcGF5 bG9hZF9hZGRyOw0KPiA+ICsJdTMyIHBheWxvYWRfbGVuOw0KPiA+ICsJdm9pZCAqZnJhbWU7DQo+ ID4gKwl1bnNpZ25lZCBpbnQgZnJhbWVfc2l6ZTsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0cnVj dCBkd19oZG1pX2RldiB7DQo+ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7DQo+ID4gKwlzdHJ1Y3Qg ZGV2aWNlX25vZGUgKm9mX25vZGU7DQo+ID4gKwl2b2lkIF9faW9tZW0gKnJlZ3M7DQo+ID4gKwlz dHJ1Y3QgY2xrICpjbGs7DQo+ID4gKw0KPiA+ICsJLyogUGxhdGZvcm0gRGF0YSBjb25maWd1cmF0 aW9uICovDQo+ID4gKwlzdHJ1Y3QgZHdfaGRtaV9yeF9wZGF0YSAqY29uZmlnOw0KPiA+ICsNCj4g PiArCS8qIFBoeSBpbmZvICovDQo+ID4gKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwaHlfcGRl djsNCj4gPiArCXN0cnVjdCBkd19waHlfcGRhdGEgcGh5X2NvbmZpZzsNCj4gPiArCXN0cnVjdCBw aHkgKnBoeTsNCj4gPiArDQo+ID4gKwkvKg0KPiA+ICsJICogVXNlZCB0byBwcmV2ZW50IHJhY2Ug Y29uZGl0aW9ucyBiZXR3ZWVuIG11bHRpcGxlDQo+ID4gKwkgKiBjb25jdXJyZW50IGNhbGxzIHRv IGhhbmRsZSB0aGUgc3RhdGUgbWFjaGluZSBjaGFuZ2VzDQo+ID4gKwkgKiBhbmQgcGVuZGluZyBj b25maWd1cmF0aW9ucy4NCj4gPiArCSAqLw0KPiA+ICsJc3BpbmxvY2tfdCBsb2NrOw0KPiA+ICsJ LyoNCj4gPiArCSAqIFVzZWQgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgYmV0d2VlbiBtdWx0 aXBsZQ0KPiA+ICsJICogY29uY3VycmVudCBjYWxscyB0byBub3RpZnkgdGhlIGF1ZGlvIGNoYW5n ZXMuDQo+ID4gKwkgKi8NCj4gPiArCXNwaW5sb2NrX3QgZXZlbnRfbG9jazsNCj4gPiArDQo+ID4g KwkvKiBXb3JrIHF1ZXVlIHRvIGhhbmRsZSB0aGUgc3RhdGUgbWFjaGluZSAqLw0KPiA+ICsJc3Ry dWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxOw0KPiA+ICsJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7 DQo+ID4gKw0KPiA+ICsJLyogU3RhdGUgbWFjaGluZSB2YXJpYWJsZXMgKi8NCj4gPiArCWVudW0g ZHdfaGRtaV9zdGF0ZSBzdGF0ZTsNCj4gPiArCXUzMiBtYnVzX2NvZGU7DQo+ID4gKwl1MzIgb2xk X21idXM7DQo+ID4gKwl1OCAqY3Vycl9lZGlkX2Jsb2NrczsNCj4gPiArCXU4IGN1cnJlbnRfdmlj Ow0KPiA+ICsJYm9vbCBjdXJyZW50X3ZpY19pc180azsNCj4gPiArCWJvb2wgcmVnaXN0ZXJlZDsN Cj4gPiArCWJvb2wgcGVuZGluZ19jb25maWc7DQo+ID4gKwlib29sIGZvcmNlX29mZjsNCj4gPiAr CWJvb2wgaXNfaGRtaTI7DQo+ID4gKwlib29sIGlzX3NjcmFtYmxlZDsNCj4gPiArCWJvb2wgcGh5 X2VxX2ZvcmNlOw0KPiA+ICsJYm9vbCBwaHlfZXFfb247DQo+ID4gKwlib29sIGh3X3Jlc2V0X29u X2hvdF9wbHVnOw0KPiA+ICsJYm9vbCAqaW5wdXRfY29ubmVjdGVkOw0KPiA+ICsJdW5zaWduZWQg aW50IHNlbGVjdGVkX2lucHV0Ow0KPiA+ICsJdW5zaWduZWQgaW50IGNvbmZpZ3VyZWRfaW5wdXQ7 DQo+ID4gKwl1bnNpZ25lZCBpbnQgaW5wdXRfc3RhdDsNCj4gPiArCXVuc2lnbmVkIGludCBhdWRp b19zZjsNCj4gPiArCXVuc2lnbmVkIGludCB0bWRzX3ZhbGlkX3dhaXRfY291bnQ7DQo+ID4gKwl1 bnNpZ25lZCBpbnQgaGFzX2Nsb2NrX3dhaXRfbXM7DQo+ID4gKwl1bnNpZ25lZCBpbnQgdmlkZW9f c3RhYmxlX3dhaXRfbXM7DQo+ID4gKwl1bnNpZ25lZCBpbnQgcmVzZXRfZGF0YXBhdGhfZW5hYmxl Ow0KPiA+ICsNCj4gPiArCS8qIEluZm9mcmFtZXMgKi8NCj4gPiArCXVuaW9uIGhkbWlfaW5mb2Zy YW1lIGF2aWlmOw0KPiA+ICsJdW5pb24gaGRtaV9pbmZvZnJhbWUgc3BkaWY7DQo+ID4gKwl1bmlv biBoZG1pX2luZm9mcmFtZSBhdWRpb2lmOw0KPiA+ICsJdW5pb24gaGRtaV9pbmZvZnJhbWUgdnNp ZjsNCj4gPiArDQo+ID4gKwkvKiB2NGwyIGRldmljZSAqLw0KPiA+ICsJc3RydWN0IHY0bDJfc3Vi ZGV2IHNkOw0KPiA+ICsJc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyIGhkbDsNCj4gPiArCXN0cnVj dCB2NGwyX2N0cmwgKmRldGVjdF90eF81dl9jdHJsOw0KPiA+ICsJc3RydWN0IHY0bDJfZHZfdGlt aW5ncyB0aW1pbmdzOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IGNoYXIgKmdl dF9zdGF0ZV9uYW1lKGVudW0gZHdfaGRtaV9zdGF0ZSBzdGF0ZSkNCj4gPiArew0KPiA+ICsJc3dp dGNoIChzdGF0ZSkgew0KPiA+ICsJY2FzZSBIRE1JX1NUQVRFX05PX0lOSVQ6DQo+ID4gKwkJcmV0 dXJuICJOT19JTklUIjsNCj4gPiArCWNhc2UgSERNSV9TVEFURV9QT1dFUl9PRkY6DQo+ID4gKwkJ cmV0dXJuICJQT1dFUl9PRkYiOw0KPiA+ICsJY2FzZSBIRE1JX1NUQVRFX1BPV0VSX1VQOg0KPiA+ ICsJCXJldHVybiAiUE9XRVJfVVAiOw0KPiA+ICsJY2FzZSBIRE1JX1NUQVRFX1BIWV9DT05GSUc6 DQo+ID4gKwkJcmV0dXJuICJQSFlfQ09ORklHIjsNCj4gPiArCWNhc2UgSERNSV9TVEFURV9IUEQ6 DQo+ID4gKwkJcmV0dXJuICJIUEQiOw0KPiA+ICsJY2FzZSBIRE1JX1NUQVRFX0VRVUFMSVpFUjoN Cj4gPiArCQlyZXR1cm4gIkVRVUFMSVpFUiI7DQo+ID4gKwljYXNlIEhETUlfU1RBVEVfREFUQVBB VEg6DQo+ID4gKwkJcmV0dXJuICJEQVRBUEFUSCI7DQo+ID4gKwljYXNlIEhETUlfU1RBVEVfVklE RU9fVU5TVEFCTEU6DQo+ID4gKwkJcmV0dXJuICJWSURFT19VTlNUQUJMRSI7DQo+ID4gKwljYXNl IEhETUlfU1RBVEVfQVVESU86DQo+ID4gKwkJcmV0dXJuICJBVURJTyI7DQo+ID4gKwljYXNlIEhE TUlfU1RBVEVfUE9XRVJfT046DQo+ID4gKwkJcmV0dXJuICJQT1dFUl9PTiI7DQo+ID4gKwlkZWZh dWx0Og0KPiA+ICsJCXJldHVybiAiVU5LTk9XTiI7DQo+ID4gKwl9DQo+ID4gK30NCj4gPiArDQo+ ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCBkd19oZG1pX3NldF9zdGF0ZShzdHJ1Y3QgZHdfaGRtaV9k ZXYgKmR3X2RldiwNCj4gPiArCQkJCSAgICAgZW51bSBkd19oZG1pX3N0YXRlIG5ld19zdGF0ZSkN Cj4gPiArew0KPiA+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsNCj4gPiArDQo+ID4gKwlzcGluX2xv Y2tfaXJxc2F2ZSgmZHdfZGV2LT5sb2NrLCBmbGFncyk7DQo+ID4gKwlkZXZfZGJnKGR3X2Rldi0+ ZGV2LCAib2xkX3N0YXRlPSVzLCBuZXdfc3RhdGU9JXNcbiIsDQo+ID4gKwkJZ2V0X3N0YXRlX25h bWUoZHdfZGV2LT5zdGF0ZSksDQo+ID4gKwkJZ2V0X3N0YXRlX25hbWUobmV3X3N0YXRlKSk7DQo+ ID4gKwlkd19kZXYtPnN0YXRlID0gbmV3X3N0YXRlOw0KPiA+ICsJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmZHdfZGV2LT5sb2NrLCBmbGFncyk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBp bmxpbmUgc3RydWN0IGR3X2hkbWlfZGV2ICp0b19kd19kZXYoc3RydWN0IHY0bDJfc3ViZGV2ICpz ZCkNCj4gPiArew0KPiA+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IGR3X2hkbWlf ZGV2LCBzZCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCBoZG1pX3dy aXRlbChzdHJ1Y3QgZHdfaGRtaV9kZXYgKmR3X2RldiwgdTMyIHZhbCwgaW50IHJlZykNCj4gPiAr ew0KPiA+ICsJd3JpdGVsKHZhbCwgZHdfZGV2LT5yZWdzICsgcmVnKTsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArc3RhdGljIGlubGluZSB1MzIgaGRtaV9yZWFkbChzdHJ1Y3QgZHdfaGRtaV9kZXYgKmR3 X2RldiwgaW50IHJlZykNCj4gPiArew0KPiA+ICsJcmV0dXJuIHJlYWRsKGR3X2Rldi0+cmVncyAr IHJlZyk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIGhkbWlfbW9kbChzdHJ1Y3Qg ZHdfaGRtaV9kZXYgKmR3X2RldiwgdTMyIGRhdGEsIHUzMiBtYXNrLCBpbnQgcmVnKQ0KPiA+ICt7 DQo+ID4gKwl1MzIgdmFsID0gaGRtaV9yZWFkbChkd19kZXYsIHJlZykgJiB+bWFzazsNCj4gPiAr DQo+ID4gKwl2YWwgfD0gZGF0YSAmIG1hc2s7DQo+ID4gKwloZG1pX3dyaXRlbChkd19kZXYsIHZh bCwgcmVnKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgaGRtaV9tYXNrX3dyaXRl bChzdHJ1Y3QgZHdfaGRtaV9kZXYgKmR3X2RldiwgdTMyIGRhdGEsIGludCByZWcsDQo+ID4gKwkJ CSAgICAgdTMyIHNoaWZ0LCB1MzIgbWFzaykNCj4gPiArew0KPiA+ICsJaGRtaV9tb2RsKGR3X2Rl diwgZGF0YSA8PCBzaGlmdCwgbWFzaywgcmVnKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj IHUzMiBoZG1pX21hc2tfcmVhZGwoc3RydWN0IGR3X2hkbWlfZGV2ICpkd19kZXYsIGludCByZWcs IHUzMiBzaGlmdCwNCj4gPiArCQkJICAgdTMyIG1hc2spDQo+ID4gK3sNCj4gPiArCXJldHVybiAo aGRtaV9yZWFkbChkd19kZXYsIHJlZykgJiBtYXNrKSA+PiBzaGlmdDsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArc3RhdGljIGJvb2wgZHdfaGRtaV81dl9zdGF0dXMoc3RydWN0IGR3X2hkbWlfZGV2ICpk d19kZXYsIGludCBpbnB1dCkNCj4gPiArew0KPiA+ICsJdm9pZCBfX2lvbWVtICphcmcgPSBkd19k ZXYtPmNvbmZpZy0+ZHdfNXZfYXJnOw0KPiA+ICsNCj4gPiArCWlmIChkd19kZXYtPmNvbmZpZy0+ ZHdfNXZfc3RhdHVzKQ0KPiA+ICsJCXJldHVybiBkd19kZXYtPmNvbmZpZy0+ZHdfNXZfc3RhdHVz KGFyZywgaW5wdXQpOw0KPiA+ICsNCj4gPiArCXJldHVybiBmYWxzZTsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArc3RhdGljIHZvaWQgZHdfaGRtaV81dl9kaXNhYmxlKHN0cnVjdCBkd19oZG1pX2RldiAq ZHdfZGV2LCBpbnQgaW5wdXQpDQo+ID4gK3sNCj4gPiArCXZvaWQgX19pb21lbSAqYXJnID0gZHdf ZGV2LT5jb25maWctPmR3XzV2X2FyZzsNCj4gPiArDQo+ID4gKwlpZiAoIWR3X2Rldi0+Y29uZmln LT5kd181dl9kaXNhYmxlKQ0KPiA+ICsJCXJldHVybjsNCj4gPiArDQo+ID4gKwlkd19kZXYtPmNv bmZpZy0+ZHdfNXZfZGlzYWJsZShhcmcsIGlucHV0KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3Rh dGljIHZvaWQgZHdfaGRtaV81dl9lbmFibGUoc3RydWN0IGR3X2hkbWlfZGV2ICpkd19kZXYsIGlu dCBpbnB1dCkNCj4gPiArew0KPiA+ICsJdm9pZCBfX2lvbWVtICphcmcgPSBkd19kZXYtPmNvbmZp Zy0+ZHdfNXZfYXJnOw0KPiA+ICsNCj4gPiArCWlmICghZHdfZGV2LT5jb25maWctPmR3XzV2X2Vu YWJsZSkNCj4gPiArCQlyZXR1cm47DQo+ID4gKw0KPiA+ICsJZHdfZGV2LT5jb25maWctPmR3XzV2 X2VuYWJsZShhcmcsIGlucHV0KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHUzMiBkd19o ZG1pX2VkaWRfcmVhZChzdHJ1Y3QgZHdfaGRtaV9kZXYgKmR3X2RldiwgaW50IGlucHV0LCB1MzIg b2Zmc2V0KQ0KPiA+ICt7DQo+ID4gKwl2b2lkIF9faW9tZW0gKmFyZyA9IGR3X2Rldi0+Y29uZmln LT5kd19lZGlkX2FyZzsNCj4gPiArDQo+ID4gKwlpZiAoIWR3X2Rldi0+Y29uZmlnLT5kd19lZGlk X3JlYWQpDQo+ID4gKwkJcmV0dXJuIDB4MDsNCj4gPiArDQo+ID4gKwlyZXR1cm4gZHdfZGV2LT5j b25maWctPmR3X2VkaWRfcmVhZChhcmcsIGlucHV0LCBvZmZzZXQpOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgaW50IGR3X2hkbWlfZWRpZF93cml0ZShzdHJ1Y3QgZHdfaGRtaV9kZXYgKmR3 X2RldiwgaW50IGlucHV0LCB1MzIgKmVkaWQsDQo+ID4gKwkJCSAgICAgIGludCBzaXplKQ0KPiA+ ICt7DQo+ID4gKwl2b2lkIF9faW9tZW0gKmFyZyA9IGR3X2Rldi0+Y29uZmlnLT5kd19lZGlkX2Fy ZzsNCj4gPiArDQo+ID4gKwlpZiAoIWR3X2Rldi0+Y29uZmlnLT5kd19lZGlkX3dyaXRlKQ0KPiA+ ICsJCXJldHVybiAwOw0KPiA+ICsNCj4gPiArCXJldHVybiBkd19kZXYtPmNvbmZpZy0+ZHdfZWRp ZF93cml0ZShhcmcsIGlucHV0LCBlZGlkLCBzaXplKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3Rh dGljIHUzMiBkd19oZG1pX2VkaWRfNGJsb2Nrc19sZShzdHJ1Y3QgZHdfaGRtaV9kZXYgKmR3X2Rl dikNCj4gPiArew0KPiA+ICsJdm9pZCBfX2lvbWVtICphcmcgPSBkd19kZXYtPmNvbmZpZy0+ZHdf ZWRpZF9hcmc7DQo+ID4gKw0KPiA+ICsJaWYgKCFkd19kZXYtPmNvbmZpZy0+ZHdfZWRpZF80Ymxv Y2tzX2xlKQ0KPiA+ICsJCXJldHVybiAweDA7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGR3X2Rldi0+ Y29uZmlnLT5kd19lZGlkXzRibG9ja3NfbGUoYXJnKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3Rh dGljIGludCBkd19oZG1pX3VwZGF0ZV9lZGlkKHN0cnVjdCBkd19oZG1pX2RldiAqZHdfZGV2LCBp bnQgaW5wdXQsDQo+ID4gKwkJCSAgICAgICB1OCAqZWRpZCwgaW50IHNpemUsIHU4IGludmVydF9i eXRlcykNCj4gPiArew0KPiA+ICsJdW5zaWduZWQgaW50IGksIGo7DQo+ID4gKwl1MzIgKndfZWRp ZF9zcnQ7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCWlmIChpbnZlcnRfYnl0ZXMpIHsN Cj4gPiArCQkvKiBpbnZlcnQgdGhlIG9yZGVyIG9mIGJ5dGVzIHRvIHJlZ2lzdGVyIDMyYml0ICov DQo+ID4gKwkJd19lZGlkX3NydCA9IGRldm1fa3phbGxvYyhkd19kZXYtPmRldiwgc2l6ZSwgR0ZQ X0tFUk5FTCk7DQo+ID4gKwkJaWYgKCF3X2VkaWRfc3J0KSB7DQo+ID4gKwkJCWRldm1fa2ZyZWUo ZHdfZGV2LT5kZXYsIHdfZWRpZF9zcnQpOw0KPiA+ICsJCQlyZXR1cm4gLUVOT01FTTsNCj4gPiAr CQl9DQo+ID4gKw0KPiA+ICsJCWZvciAoaSA9IDA7IGkgPCBzaXplIC8gc2l6ZW9mKHUzMik7IGkr Kykgew0KPiA+ICsJCQlmb3IgKGogPSAwOyBqIDwgNDsgaisrKSB7DQo+ID4gKwkJCQl3X2VkaWRf c3J0W2ldIHw9DQo+ID4gKwkJCQkJZWRpZFtpICogNCArIGpdIDw8ICg4ICogKDMgLSBqKSk7DQo+ ID4gKwkJCX0NCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCXJldCA9IGR3X2hkbWlfZWRpZF93cml0 ZShkd19kZXYsIGlucHV0LCAodTMyICopd19lZGlkX3NydCwNCj4gPiArCQkJCQkgc2l6ZSAvIHNp emVvZih1MzIpKTsNCj4gPiArCQlkZXZtX2tmcmVlKGR3X2Rldi0+ZGV2LCB3X2VkaWRfc3J0KTsN Cj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJLyogbm8gbmVlZCB0byBpbnZlcnQgYnl0ZXMgKi8NCj4g PiArCQlyZXQgPSBkd19oZG1pX2VkaWRfd3JpdGUoZHdfZGV2LCBpbnB1dCwgKHUzMiAqKWVkaWQs DQo+ID4gKwkJCQkJIHNpemUgLyBzaXplb2YodTMyKSk7DQo+ID4gKwl9DQo+ID4gKwlkd19kZXYt PmN1cnJfZWRpZF9ibG9ja3NbaW5wdXRdID0gc2l6ZSAvIDEyODsNCj4gPiArDQo+ID4gKwlyZXR1 cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBkd19oZG1pX21haW5fcmVz ZXQoc3RydWN0IGR3X2hkbWlfZGV2ICpkd19kZXYpDQo+ID4gK3sNCj4gPiArCXZvaWQgX19pb21l bSAqYXJnID0gZHdfZGV2LT5jb25maWctPmR3X3Jlc2V0X2FyZzsNCj4gPiArDQo+ID4gKwlpZiAo IWR3X2Rldi0+Y29uZmlnLT5kd19yZXNldF9hbGwpDQo+ID4gKwkJcmV0dXJuOw0KPiA+ICsNCj4g PiArCWRldl9kYmcoZHdfZGV2LT5kZXYsICIlczogbWFpbiByZXNldFxuIiwgX19mdW5jX18pOw0K PiA+ICsNCj4gPiArCWR3X2Rldi0+Y29uZmlnLT5kd19yZXNldF9hbGwoYXJnKTsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIHZvaWQgZHdfaGRtaV9kaXNhYmxlX2hwZChzdHJ1Y3QgZHdfaGRt aV9kZXYgKmR3X2Rldik7DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBkd19oZG1pX3Jlc2V0KHN0 cnVjdCBkd19oZG1pX2RldiAqZHdfZGV2KQ0KPiA+ICt7DQo+ID4gKwlkZXZfZGJnKGR3X2Rldi0+ ZGV2LCAiJXM6IHJlc2V0XG4iLCBfX2Z1bmNfXyk7DQo+ID4gKw0KPiA+ICsJLyogcGVyZm9ybSBt YWluIHJlc2V0ICovDQo+ID4gKwlkd19oZG1pX21haW5fcmVzZXQoZHdfZGV2KTsNCj4gPiArDQo+ ID4gKwlkd19oZG1pX2Rpc2FibGVfaHBkKGR3X2Rldik7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0 YXRpYyBpbmxpbmUgYm9vbCBpc19vZmYoc3RydWN0IGR3X2hkbWlfZGV2ICpkd19kZXYpDQo+ID4g K3sNCj4gPiArCXJldHVybiBkd19kZXYtPnN0YXRlIDw9IEhETUlfU1RBVEVfUE9XRVJfT0ZGOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIGJvb2wgaXNfb24oc3RydWN0IGR3X2hk bWlfZGV2ICpkd19kZXYpDQo+ID4gK3sNCj4gPiArCXJldHVybiBkd19kZXYtPnN0YXRlID09IEhE TUlfU1RBVEVfUE9XRVJfT047DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBib29sIGhhc19z aWduYWwoc3RydWN0IGR3X2hkbWlfZGV2ICpkd19kZXYsIHVuc2lnbmVkIGludCBpbnB1dCkNCj4g PiArew0KPiA+ICsJcmV0dXJuIGR3X2Rldi0+aW5wdXRfY29ubmVjdGVkW2lucHV0XTsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSBib29sIGlzX2hkbWkyKHN0cnVjdCBkd19oZG1p X2RldiAqZHdfZGV2KQ0KPiA+ICt7DQo+ID4gKwlyZXR1cm4gaGRtaV9yZWFkbChkd19kZXYsIERX X0hETUlfU0NEQ19SRUdTMCkgJg0KPiA+ICsJCQlEV19IRE1JX1NDRENfVE1EU0JJVENMS1JBVElP X01BU0s7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19zY3JhbWJs ZWQoc3RydWN0IGR3X2hkbWlfZGV2ICpkd19kZXYpDQo+ID4gK3sNCj4gPiArCXJldHVybiBoZG1p X3JlYWRsKGR3X2RldiwgRFdfSERNSV9TQ0RDX1JFR1MwKSAmDQo+ID4gKwkJCURXX0hETUlfU0NE Q19TQ1JBTUJTVEFUVVNfTUFTSzsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgaGRt aV9waHlfanRhZ19zZW5kX3B1bHNlKHN0cnVjdCBkd19oZG1pX2RldiAqZHdfZGV2LCB1OCB0bXMs IHU4IHRkaSkNCj4gPiArew0KPiA+ICsJdTggdmFsOw0KPiA+ICsNCj4gPiArCXZhbCA9IHRtcyA/ IERXX0hETUlfSlRBR19UTVMgOiAwOw0KPiA+ICsJdmFsIHw9IHRkaSA/IERXX0hETUlfSlRBR19U REkgOiAwOw0KPiA+ICsNCj4gPiArCWhkbWlfd3JpdGVsKGR3X2RldiwgMCwgRFdfSERNSV9KVEFH X1RBUF9UQ0xLKTsNCj4gPiArCWhkbWlfd3JpdGVsKGR3X2RldiwgdmFsLCBEV19IRE1JX0pUQUdf VEFQX0lOKTsNCj4gPiArCWhkbWlfd3JpdGVsKGR3X2RldiwgMSwgRFdfSERNSV9KVEFHX1RBUF9U Q0xLKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgaGRtaV9waHlfanRhZ19zaGlm dF9kcihzdHJ1Y3QgZHdfaGRtaV9kZXYgKmR3X2RldikNCj4gPiArew0KPiA+ICsJaGRtaV9waHlf anRhZ19zZW5kX3B1bHNlKGR3X2RldiwgMSwgMCk7DQo+ID4gKwloZG1pX3BoeV9qdGFnX3NlbmRf cHVsc2UoZHdfZGV2LCAwLCAwKTsNCj4gPiArCWhkbWlfcGh5X2p0YWdfc2VuZF9wdWxzZShkd19k ZXYsIDAsIDApOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBoZG1pX3BoeV9qdGFn X3NoaWZ0X2lyKHN0cnVjdCBkd19oZG1pX2RldiAqZHdfZGV2KQ0KPiA+ICt7DQo+ID4gKwloZG1p X3BoeV9qdGFnX3NlbmRfcHVsc2UoZHdfZGV2LCAxLCAwKTsNCj4gPiArCWhkbWlfcGh5X2p0YWdf c2VuZF9wdWxzZShkd19kZXYsIDEsIDApOw0KPiA+ICsJaGRtaV9waHlfanRhZ19zZW5kX3B1bHNl KGR3X2RldiwgMCwgMCk7DQo+ID4gKwloZG1pX3BoeV9qdGFnX3NlbmRfcHVsc2UoZHdfZGV2LCAw LCAwKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHUxNiBoZG1pX3BoeV9qdGFnX3NlbmQo c3RydWN0IGR3X2hkbWlfZGV2ICpkd19kZXYsIHU4IGNtZCwgdTE2IHZhbCkNCj4gPiArew0KPiA+ ICsJdTMyIGluID0gKGNtZCA8PCAxNikgfCB2YWw7DQo+ID4gKwl1MTYgb3V0ID0gMDsNCj4gPiAr CXU4IGk7DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsNCj4gPiArCQlo ZG1pX3BoeV9qdGFnX3NlbmRfcHVsc2UoZHdfZGV2LCAwLCBpbiAmIDB4MSk7DQo+ID4gKwkJb3V0 IHw9IChoZG1pX3JlYWRsKGR3X2RldiwgRFdfSERNSV9KVEFHX1RBUF9PVVQpICYgMHgxKSA8PCBp Ow0KPiA+ICsJCWluID4+PSAxOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWhkbWlfcGh5X2p0YWdf c2VuZF9wdWxzZShkd19kZXYsIDAsIGluICYgMHgxKTsNCj4gPiArCWluID4+PSAxOw0KPiA+ICsJ aGRtaV9waHlfanRhZ19zZW5kX3B1bHNlKGR3X2RldiwgMSwgaW4gJiAweDEpOw0KPiA+ICsNCj4g PiArCW91dCB8PSAoaGRtaV9yZWFkbChkd19kZXYsIERXX0hETUlfSlRBR19UQVBfT1VUKSAmIDB4 MSkgPDwgKytpOw0KPiA+ICsJcmV0dXJuIG91dDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj IHZvaWQgaGRtaV9waHlfanRhZ19pZGxlKHN0cnVjdCBkd19oZG1pX2RldiAqZHdfZGV2KQ0KPiA+ ICt7DQo+ID4gKwloZG1pX3BoeV9qdGFnX3NlbmRfcHVsc2UoZHdfZGV2LCAxLCAwKTsNCj4gPiAr CWhkbWlfcGh5X2p0YWdfc2VuZF9wdWxzZShkd19kZXYsIDAsIDApOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgdm9pZCBoZG1pX3BoeV9qdGFnX2luaXQoc3RydWN0IGR3X2hkbWlfZGV2ICpk d19kZXYsIHU4IGFkZHIpDQo+ID4gK3sNCj4gPiArCXU4IGk7DQo+ID4gKw0KPiA+ICsJaGRtaV93 cml0ZWwoZHdfZGV2LCBhZGRyLCBEV19IRE1JX0pUQUdfQUREUik7DQo+ID4gKw0KPiA+ICsJLyog cmVzZXQgKi8NCj4gPiArCWhkbWlfd3JpdGVsKGR3X2RldiwgMHgxMCwgRFdfSERNSV9KVEFHX1RB UF9JTik7DQo+ID4gKwloZG1pX3dyaXRlbChkd19kZXYsIDB4MCwgRFdfSERNSV9KVEFHX0NPTkYp Ow0KPiA+ICsJaGRtaV93cml0ZWwoZHdfZGV2LCAweDEsIERXX0hETUlfSlRBR19DT05GKTsNCj4g PiArCWhkbWlfcGh5X2p0YWdfc2VuZF9wdWxzZShkd19kZXYsIDAsIDApOw0KPiA+ICsNCj4gPiAr CS8qIHNvZnQgcmVzZXQgKi8NCj4gPiArCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspDQo+ID4gKwkJ aGRtaV9waHlfanRhZ19zZW5kX3B1bHNlKGR3X2RldiwgMSwgMCk7DQo+ID4gKwloZG1pX3BoeV9q dGFnX3NlbmRfcHVsc2UoZHdfZGV2LCAwLCAwKTsNCj4gPiArDQo+ID4gKwkvKiBzZXQgc2xhdmUg YWRkcmVzcyAqLw0KPiA+ICsJaGRtaV9waHlfanRhZ19zaGlmdF9pcihkd19kZXYpOw0KPiA+ICsJ Zm9yIChpID0gMDsgaSA8IDc7IGkrKykgew0KPiA+ICsJCWhkbWlfcGh5X2p0YWdfc2VuZF9wdWxz ZShkd19kZXYsIDAsIGFkZHIgJiAweDEpOw0KPiA+ICsJCWFkZHIgPj49IDE7DQo+ID4gKwl9DQo+ ID4gKwloZG1pX3BoeV9qdGFnX3NlbmRfcHVsc2UoZHdfZGV2LCAxLCBhZGRyICYgMHgxKTsNCj4g PiArCWhkbWlfcGh5X2p0YWdfaWRsZShkd19kZXYpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0 aWMgdm9pZCBoZG1pX3BoeV9qdGFnX3dyaXRlKHN0cnVjdCBkd19oZG1pX2RldiAqZHdfZGV2LCB1 MTYgdmFsLCB1MTYgYWRkcikNCj4gPiArew0KPiA+ICsJaGRtaV9waHlfanRhZ19zaGlmdF9kcihk d19kZXYpOw0KPiA+ICsJaGRtaV9waHlfanRhZ19zZW5kKGR3X2RldiwgRFdfSERNSV9KVEFHX1RB UF9BRERSX0NNRCwgYWRkciA8PCA4KTsNCj4gPiArCWhkbWlfcGh5X2p0YWdfaWRsZShkd19kZXYp Ow0KPiA+ICsJaGRtaV9waHlfanRhZ19zaGlmdF9kcihkd19kZXYpOw0KPiA+ICsJaGRtaV9waHlf anRhZ19zZW5kKGR3X2RldiwgRFdfSERNSV9KVEFHX1RBUF9XUklURV9DTUQsIHZhbCk7DQo+ID4g KwloZG1pX3BoeV9qdGFnX2lkbGUoZHdfZGV2KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj IHUxNiBoZG1pX3BoeV9qdGFnX3JlYWQoc3RydWN0IGR3X2hkbWlfZGV2ICpkd19kZXYsIHUxNiBh ZGRyKQ0KPiA+ICt7DQo+ID4gKwl1MTYgdmFsOw0KPiA+ICsNCj4gPiArCWhkbWlfcGh5X2p0YWdf c2hpZnRfZHIoZHdfZGV2KTsNCj4gPiArCWhkbWlfcGh5X2p0YWdfc2VuZChkd19kZXYsIERXX0hE TUlfSlRBR19UQVBfQUREUl9DTUQsIGFkZHIgPDwgOCk7DQo+ID4gKwloZG1pX3BoeV9qdGFnX2lk bGUoZHdfZGV2KTsNCj4gPiArCWhkbWlfcGh5X2p0YWdfc2hpZnRfZHIoZHdfZGV2KTsNCj4gPiAr CXZhbCA9IGhkbWlfcGh5X2p0YWdfc2VuZChkd19kZXYsIERXX0hETUlfSlRBR19UQVBfUkVBRF9D TUQsIDB4RkZGRik7DQo+ID4gKwloZG1pX3BoeV9qdGFnX2lkbGUoZHdfZGV2KTsNCj4gPiArDQo+ ID4gKwlyZXR1cm4gdmFsOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBkd19oZG1p X3BoeV93cml0ZSh2b2lkICphcmcsIHUxNiB2YWwsIHUxNiBhZGRyKQ0KPiA+ICt7DQo+ID4gKwlz dHJ1Y3QgZHdfaGRtaV9kZXYgKmR3X2RldiA9IGFyZzsNCj4gPiArCXUxNiBydmFsOw0KPiA+ICsN Cj4gPiArCWhkbWlfcGh5X2p0YWdfaW5pdChkd19kZXYsIGR3X2Rldi0+Y29uZmlnLT5waHktPmp0 YWdfYWRkcik7DQo+ID4gKwloZG1pX3BoeV9qdGFnX3dyaXRlKGR3X2RldiwgdmFsLCBhZGRyKTsN Cj4gPiArCXJ2YWwgPSBoZG1pX3BoeV9qdGFnX3JlYWQoZHdfZGV2LCBhZGRyKTsNCj4gPiArDQo+ ID4gKwlpZiAocnZhbCAhPSB2YWwpIHsNCj4gPiArCQlkZXZfZXJyKGR3X2Rldi0+ZGV2LA0KPiA+ ICsJCQkiSlRBRyByZWFkLWJhY2sgZmFpbGVkOiBleHBlY3RlZD0weCV4LCBnb3Q9MHgleFxuIiwN Cj4gPiArCQkJdmFsLCBydmFsKTsNCj4gPiArCX0NCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj IHUxNiBkd19oZG1pX3BoeV9yZWFkKHZvaWQgKmFyZywgdTE2IGFkZHIpDQo+ID4gK3sNCj4gPiAr CXN0cnVjdCBkd19oZG1pX2RldiAqZHdfZGV2ID0gYXJnOw0KPiA+ICsNCj4gPiArCWhkbWlfcGh5 X2p0YWdfaW5pdChkd19kZXYsIGR3X2Rldi0+Y29uZmlnLT5waHktPmp0YWdfYWRkcik7DQo+ID4g KwlyZXR1cm4gaGRtaV9waHlfanRhZ19yZWFkKGR3X2RldiwgYWRkcik7DQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyB2b2lkIGR3X2hkbWlfcGh5X3Jlc2V0KHZvaWQgKmFyZywgaW50IGVuYWJs ZSkNCj4gPiArew0KPiA+ICsJc3RydWN0IGR3X2hkbWlfZGV2ICpkd19kZXYgPSBhcmc7DQo+ID4g Kw0KPiA+ICsJaGRtaV9tYXNrX3dyaXRlbChkd19kZXYsIGVuYWJsZSwgRFdfSERNSV9QSFlfQ1RS TCwNCj4gPiArCQkJIERXX0hETUlfUEhZUkVTRVRfT0ZGU0VULA0KPiA+ICsJCQkgRFdfSERNSV9Q SFlSRVNFVF9NQVNLKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgZHdfaGRtaV9w aHlfcGRkcSh2b2lkICphcmcsIGludCBlbmFibGUpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBkd19o ZG1pX2RldiAqZHdfZGV2ID0gYXJnOw0KPiA+ICsNCj4gPiArCWhkbWlfbWFza193cml0ZWwoZHdf ZGV2LCBlbmFibGUsIERXX0hETUlfUEhZX0NUUkwsDQo+ID4gKwkJCSBEV19IRE1JX1BIWVBERFFf T0ZGU0VULA0KPiA+ICsJCQkgRFdfSERNSV9QSFlQRERRX01BU0spOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgdm9pZCBkd19oZG1pX3BoeV9zdnNtb2RlKHZvaWQgKmFyZywgaW50IGVuYWJs ZSkNCj4gPiArew0KPiA+ICsJc3RydWN0IGR3X2hkbWlfZGV2ICpkd19kZXYgPSBhcmc7DQo+ID4g Kw0KPiA+ICsJaGRtaV9tYXNrX3dyaXRlbChkd19kZXYsIGVuYWJsZSwgRFdfSERNSV9QSFlfQ1RS TCwNCj4gPiArCQkJIERXX0hETUlfUEhZU1ZTUkVUTU9ERVpfT0ZGU0VULA0KPiA+ICsJCQkgRFdf SERNSV9QSFlTVlNSRVRNT0RFWl9NQVNLKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZv aWQgZHdfaGRtaV96Y2FsX3Jlc2V0KHZvaWQgKmFyZykNCj4gPiArew0KPiA+ICsJc3RydWN0IGR3 X2hkbWlfZGV2ICpkd19kZXYgPSBhcmc7DQo+ID4gKw0KPiA+ICsJaWYgKGR3X2Rldi0+Y29uZmln LT5kd196Y2FsX3Jlc2V0KQ0KPiA+ICsJCWR3X2Rldi0+Y29uZmlnLT5kd196Y2FsX3Jlc2V0KGR3 X2Rldi0+Y29uZmlnLT5kd196Y2FsX2FyZyk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBi b29sIGR3X2hkbWlfemNhbF9kb25lKHZvaWQgKmFyZykNCj4gPiArew0KPiA+ICsJc3RydWN0IGR3 X2hkbWlfZGV2ICpkd19kZXYgPSBhcmc7DQo+ID4gKwl2b2lkIF9faW9tZW0gKnpjYWxfYXJnID0g ZHdfZGV2LT5jb25maWctPmR3X3pjYWxfYXJnOw0KPiA+ICsNCj4gPiArCWlmIChkd19kZXYtPmNv bmZpZy0+ZHdfemNhbF9kb25lKQ0KPiA+ICsJCXJldHVybiBkd19kZXYtPmNvbmZpZy0+ZHdfemNh bF9kb25lKHpjYWxfYXJnKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gZmFsc2U7DQo+ID4gK30NCj4g PiArDQo+ID4gK3N0YXRpYyBib29sIGR3X2hkbWlfdG1kc192YWxpZCh2b2lkICphcmcpDQo+ID4g K3sNCj4gPiArCXN0cnVjdCBkd19oZG1pX2RldiAqZHdfZGV2ID0gYXJnOw0KPiA+ICsNCj4gPiAr CXJldHVybiAoaGRtaV9yZWFkbChkd19kZXYsIERXX0hETUlfUExMX0xDS19TVFMpICYgRFdfSERN SV9QTExfTE9DS0VEKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGJvb2wgZHdfaGRtaV9h dWRpb192YWxpZCh2b2lkICphcmcpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBkd19oZG1pX2RldiAq ZHdfZGV2ID0gYXJnOw0KPiA+ICsNCj4gPiArCXJldHVybiAoKGhkbWlfcmVhZGwoZHdfZGV2LCBE V19IRE1JX0FVRF9QTExfQ1RSTCkgJg0KPiA+ICsJCQlEV19IRE1JX1BMTF9MT0NLX1NUQUJMRV9N QVNLKSAhPSAwKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkd19w aHlfZnVuY3MgZHdfaGRtaV9waHlfZnVuY3MgPSB7DQo+ID4gKwkud3JpdGUgPSBkd19oZG1pX3Bo eV93cml0ZSwNCj4gPiArCS5yZWFkID0gZHdfaGRtaV9waHlfcmVhZCwNCj4gPiArCS5yZXNldCA9 IGR3X2hkbWlfcGh5X3Jlc2V0LA0KPiA+ICsJLnBkZHEgPSBkd19oZG1pX3BoeV9wZGRxLA0KPiA+ ICsJLnN2c21vZGUgPSBkd19oZG1pX3BoeV9zdnNtb2RlLA0KPiA+ICsJLnpjYWxfcmVzZXQgPSBk d19oZG1pX3pjYWxfcmVzZXQsDQo+ID4gKwkuemNhbF9kb25lID0gZHdfaGRtaV96Y2FsX2RvbmUs DQo+ID4gKwkudG1kc192YWxpZCA9IGR3X2hkbWlfdG1kc192YWxpZCwNCj4gPiArfTsNCj4gPiAr DQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGR3X2hkbWlfc3VwcG9ydGVk X3BoeXNbXSA9IHsNCj4gPiArCXsgLmNvbXBhdGlibGUgPSAic25wcyxkdy1oZG1pLXBoeS1lNDA1 IiwgLmRhdGEgPSBEV19QSFlfRTQwWF9EUlZOQU1FLCB9LA0KPiA+ICsJeyAuY29tcGF0aWJsZSA9 ICJzbnBzLGR3LWhkbWktcGh5LWU0MDYiLCAuZGF0YSA9IERXX1BIWV9FNDBYX0RSVk5BTUUsIH0s DQo+ID4gKwl7IH0sDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IGRldmljZV9u b2RlICoNCj4gPiArZHdfaGRtaV9nZXRfcGh5X29mX25vZGUoc3RydWN0IGR3X2hkbWlfZGV2ICpk d19kZXYsDQo+ID4gKwkJCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKipmb3VuZF9pZCkNCj4g PiArew0KPiA+ICsJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqaWQgPSBOVUxMOw0KPiA+ICsJ c3RydWN0IGRldmljZV9ub2RlICpucCA9IE5VTEw7DQo+ID4gKw0KPiA+ICsJbnAgPSBvZl9maW5k X21hdGNoaW5nX25vZGVfYW5kX21hdGNoKE5VTEwsIGR3X2hkbWlfc3VwcG9ydGVkX3BoeXMsICZp ZCk7DQo+ID4gKw0KPiA+ICsJaWYgKCFpZCkNCj4gPiArCQlyZXR1cm4gTlVMTDsNCj4gPiArDQo+ ID4gKwlpZiAoZm91bmRfaWQpDQo+ID4gKwkJKmZvdW5kX2lkID0gaWQ7DQo+ID4gKw0KPiA+ICsJ cmV0dXJuIG5wOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgYm9vbCBkd19oZG1pX2hhc19k dChzdHJ1Y3QgZHdfaGRtaV9kZXYgKmR3X2RldikNCj4gPiArew0KPiA+ICsJY29uc3Qgc3RydWN0 IG9mX2RldmljZV9pZCAqb2ZfaWQ7DQo+ID4gKw0KPiA+ICsJaWYgKCFkd19kZXYtPm9mX25vZGUg fHwNCj4gPiArCSAgICAhZHdfaGRtaV9nZXRfcGh5X29mX25vZGUoZHdfZGV2LCAmb2ZfaWQpIHx8 DQo+ID4gKwkgICAgIW9mX2lkIHx8ICFvZl9pZC0+ZGF0YSkgew0KPiA+ICsJCXJldHVybiBmYWxz ZTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gdHJ1ZTsNCj4gPiArfQ0KPiA+ICsNCj4g PiArc3RhdGljIGNvbnN0IHN0cnVjdCBkd19oZG1pX3BoeV9jZmcgew0KPiA+ICsJY29uc3QgY2hh ciAqZHJ2bmFtZTsNCj4gPiArCWNvbnN0IHN0cnVjdCBkd19waHlfZnVuY3MgKmZ1bmNzOw0KPiA+ ICsJaW50ICgqZXh0cmFfaW5pdCkoc3RydWN0IGR3X2hkbWlfZGV2ICpkd19kZXYpOw0KPiA+ICt9 IGR3X2hkbWlfcGh5c1tdID0gew0KPiA+ICsJew0KPiA+ICsJCS5kcnZuYW1lID0gRFdfUEhZX0U0 MFhfRFJWTkFNRSwNCj4gPiArCQkuZnVuY3MgPSAmZHdfaGRtaV9waHlfZnVuY3MsDQo+ID4gKwl9 LA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGludCBkd19oZG1pX3BoeV9pbml0X2R0KHN0 cnVjdCBkd19oZG1pX2RldiAqZHdfZGV2KQ0KPiA+ICt7DQo+ID4gKwljb25zdCBzdHJ1Y3QgZHdf aGRtaV9waHlfY2ZnICpwaHlfY29uZmlnID0gTlVMTDsNCj4gPiArCXN0cnVjdCBkd19waHlfcGRh dGEgKnBoeSA9ICZkd19kZXYtPnBoeV9jb25maWc7DQo+ID4gKwlzdHJ1Y3Qgb2ZfZGV2X2F1eGRh dGEgbG9va3VwID0geyB9Ow0KPiA+ICsJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfaWQ7 DQo+ID4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkOw0KPiA+ICsJY29uc3QgY2hhciAqZHJ2 bmFtZTsNCj4gPiArCXVuc2lnbmVkIGludCBpOw0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4g KwljaGlsZCA9IGR3X2hkbWlfZ2V0X3BoeV9vZl9ub2RlKGR3X2RldiwgJm9mX2lkKTsNCj4gPiAr CWlmICghY2hpbGQgfHwgIW9mX2lkIHx8ICFvZl9pZC0+ZGF0YSkgew0KPiA+ICsJCWRldl9lcnIo ZHdfZGV2LT5kZXYsICJubyBzdXBwb3J0ZWQgUEhZIGZvdW5kIGluIERUXG4iKTsNCj4gPiArCQly ZXR1cm4gLUVJTlZBTDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlkcnZuYW1lID0gb2ZfaWQtPmRh dGE7DQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkd19oZG1pX3BoeXMpOyBpKysp IHsNCj4gPiArCQlpZiAoIXN0cmNtcChkd19oZG1pX3BoeXNbaV0uZHJ2bmFtZSwgZHJ2bmFtZSkp DQo+ID4gKwkJCXBoeV9jb25maWcgPSAmZHdfaGRtaV9waHlzW2ldOw0KPiA+ICsJfQ0KPiA+ICsN Cj4gPiArCWlmICghcGh5X2NvbmZpZykgew0KPiA+ICsJCWRldl9lcnIoZHdfZGV2LT5kZXYsICJm YWlsZWQgdG8gZmluZCBQSFkgY29uZmlndXJhdGlvblxuIik7DQo+ID4gKwkJcmV0dXJuIC1FSU5W QUw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKHBoeV9jb25maWctPmV4dHJhX2luaXQpIHsN Cj4gPiArCQlyZXQgPSBwaHlfY29uZmlnLT5leHRyYV9pbml0KGR3X2Rldik7DQo+ID4gKwkJaWYg KHJldCkNCj4gPiArCQkJcmV0dXJuIHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlwaHktPmZ1 bmNzID0gcGh5X2NvbmZpZy0+ZnVuY3M7DQo+ID4gKwlwaHktPmZ1bmNzX2FyZyA9IGR3X2RldjsN Cj4gPiArDQo+ID4gKwlsb29rdXAuY29tcGF0aWJsZSA9IChjaGFyICopb2ZfaWQtPmNvbXBhdGli bGU7DQo+ID4gKwlsb29rdXAucGxhdGZvcm1fZGF0YSA9IHBoeTsNCj4gPiArDQo+ID4gKwlyZXF1 ZXN0X21vZHVsZShkcnZuYW1lKTsNCj4gPiArDQo+ID4gKwlyZXQgPSBvZl9wbGF0Zm9ybV9wb3B1 bGF0ZShkd19kZXYtPm9mX25vZGUsIE5VTEwsICZsb29rdXAsIGR3X2Rldi0+ZGV2KTsNCj4gPiAr CWlmIChyZXQpIHsNCj4gPiArCQlkZXZfZXJyKGR3X2Rldi0+ZGV2LCAiZmFpbGVkIHRvIHBvcHVs YXRlIFBIWSBkcml2ZXJcbiIpOw0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0K PiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgZHdfaGRtaV9w aHlfaW5pdF9wZChzdHJ1Y3QgZHdfaGRtaV9kZXYgKmR3X2RldikNCj4gPiArew0KPiA+ICsJY29u c3QgY2hhciAqZHJ2X25hbWUgPSBkd19kZXYtPmNvbmZpZy0+cGh5LT5kcnZfbmFtZTsNCj4gPiAr CWNvbnN0IHN0cnVjdCBkd19oZG1pX3BoeV9jZmcgKnBoeV9jb25maWcgPSBOVUxMOw0KPiA+ICsJ c3RydWN0IHBsYXRmb3JtX2RldmljZV9pbmZvIHBkZXZpbmZvOw0KPiA+ICsJdW5zaWduZWQgaW50 IGk7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCW1lbXNldCgmcGRldmluZm8sIDAsIHNp emVvZihwZGV2aW5mbykpOw0KPiA+ICsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpF KGR3X2hkbWlfcGh5cyk7IGkrKykgew0KPiA+ICsJCWlmICghc3RyY21wKGR3X2hkbWlfcGh5c1tp XS5kcnZuYW1lLCBkcnZfbmFtZSkpDQo+ID4gKwkJCXBoeV9jb25maWcgPSAmZHdfaGRtaV9waHlz W2ldOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmICghcGh5X2NvbmZpZykgew0KPiA+ICsJCWRl dl9lcnIoZHdfZGV2LT5kZXYsICJmYWlsZWQgdG8gZmluZCBQSFkgY29uZmlndXJhdGlvblxuIik7 DQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKHBoeV9j b25maWctPmV4dHJhX2luaXQpIHsNCj4gPiArCQlyZXQgPSBwaHlfY29uZmlnLT5leHRyYV9pbml0 KGR3X2Rldik7DQo+ID4gKwkJaWYgKHJldCkNCj4gPiArCQkJcmV0dXJuIHJldDsNCj4gPiArCX0N Cj4gPiArDQo+ID4gKwlkd19kZXYtPnBoeV9jb25maWcudmVyc2lvbiA9IGR3X2Rldi0+Y29uZmln LT5waHktPnZlcnNpb247DQo+ID4gKwlkd19kZXYtPnBoeV9jb25maWcuY2ZnX2NsayA9IGR3X2Rl di0+Y29uZmlnLT5waHktPmNmZ19jbGs7DQo+ID4gKwlkd19kZXYtPnBoeV9jb25maWcuZnVuY3Mg PSBwaHlfY29uZmlnLT5mdW5jczsNCj4gPiArCWR3X2Rldi0+cGh5X2NvbmZpZy5mdW5jc19hcmcg PSBkd19kZXY7DQo+ID4gKw0KPiA+ICsJcGRldmluZm8ucGFyZW50ID0gZHdfZGV2LT5kZXY7DQo+ ID4gKwlwZGV2aW5mby5pZCA9IFBMQVRGT1JNX0RFVklEX05PTkU7DQo+ID4gKwlwZGV2aW5mby5u YW1lID0gZHJ2X25hbWU7DQo+ID4gKwlwZGV2aW5mby5kYXRhID0gJmR3X2Rldi0+cGh5X2NvbmZp ZzsNCj4gPiArCXBkZXZpbmZvLnNpemVfZGF0YSA9IHNpemVvZihkd19kZXYtPnBoeV9jb25maWcp Ow0KPiA+ICsJcGRldmluZm8uZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpOw0KPiA+ICsNCj4g PiArCXJlcXVlc3RfbW9kdWxlKHBkZXZpbmZvLm5hbWUpOw0KPiA+ICsNCj4gPiArCWR3X2Rldi0+ cGh5X3BkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZnVsbCgmcGRldmluZm8pOw0KPiA+ ICsJaWYgKElTX0VSUihkd19kZXYtPnBoeV9wZGV2KSkgew0KPiA+ICsJCWRldl9lcnIoZHdfZGV2 LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgUEhZIGRldmljZVxuIik7DQo+ID4gKwkJcmV0dXJu IFBUUl9FUlIoZHdfZGV2LT5waHlfcGRldik7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJu IDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgZHdfaGRtaV9waHlfaW5pdChzdHJ1 Y3QgZHdfaGRtaV9kZXYgKmR3X2RldikNCj4gPiArew0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ ID4gKwlpZiAoZHdfaGRtaV9oYXNfZHQoZHdfZGV2KSkgew0KPiA+ICsJCS8qIGluaXQgUEhZIGJh c2VkIG9uIGRldmljZSB0cmVlICovDQo+ID4gKwkJcmV0ID0gZHdfaGRtaV9waHlfaW5pdF9kdChk d19kZXYpOw0KPiA+ICsJfSBlbHNlIHsNCj4gPiArCQkvKiBpbml0IFBIWSBiYXNlZCBvbiBwbGF0 Zm9ybSBkZXZpY2UgKi8NCj4gPiArCQlyZXQgPSBkd19oZG1pX3BoeV9pbml0X3BkKGR3X2Rldik7 DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogZ2V0IHRoZSBIRE1JIFBIWSByZWZlcmVuY2UgKi8N Cj4gPiArCWR3X2Rldi0+cGh5ID0gZGV2bV9waHlfZ2V0KGR3X2Rldi0+ZGV2LCAiaGRtaS1waHki KTsNCj4gPiArCWlmIChJU19FUlIoZHdfZGV2LT5waHkpKSB7DQo+ID4gKwkJaWYgKFBUUl9FUlIo ZHdfZGV2LT5waHkpICE9IC1FUFJPQkVfREVGRVIpDQo+ID4gKwkJCWRldl9lcnIoZHdfZGV2LT5k ZXYsICJDb3VsZG4ndCBnZXQgdGhlIEhETUkgUEhZXG4iKTsNCj4gPiArCQlyZXR1cm4gUFRSX0VS Uihkd19kZXYtPnBoeSk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHJldDsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgZHdfaGRtaV9waHlfZXhpdChzdHJ1Y3QgZHdfaGRt aV9kZXYgKmR3X2RldikNCj4gPiArew0KPiA+ICsJaWYgKGR3X2hkbWlfaGFzX2R0KGR3X2Rldikp IHsNCj4gPiArCQkvKiBleGl0IFBIWSBiYXNlZCBvbiBkZXZpY2UgdHJlZSAqLw0KPiA+ICsJCW9m X3BsYXRmb3JtX2RlcG9wdWxhdGUoZHdfZGV2LT5kZXYpOw0KPiA+ICsJfSBlbHNlIHsNCj4gPiAr CQkvKiBleGl0IFBIWSBiYXNlZCBvbiBwbGF0Zm9ybSBkZXZpY2UgKi8NCj4gPiArCQlpZiAoIUlT X0VSUihkd19kZXYtPnBoeV9wZGV2KSkNCj4gPiArCQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0 ZXIoZHdfZGV2LT5waHlfcGRldik7DQo+ID4gKwl9DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyBpbnQgZHdfaGRtaV9waHlfZXFfaW5pdChzdHJ1Y3QgZHdfaGRtaV9kZXYgKmR3X2RldiwgdTE2 IGFjcSwgYm9vbCBmb3JjZSkNCj4gPiArew0KPiA+ICsJdW5pb24gcGh5X2NvbmZpZ3VyZV9vcHRz IG9wdHM7DQo+ID4gKwlzdHJ1Y3QgcGh5X2NvbmZpZ3VyZV9vcHRzX2hkbWkgKmhkbWlfb3B0cyA9 ICZvcHRzLmhkbWk7DQo+ID4gKwlpbnQgcmV0ID0gMDsNCj4gPiArDQo+ID4gKwkvKiBsb2FkIHRo ZSByZXF1aXJlZCBvcHRpb25zIGZvciBjYWxpYnJhdGlvbiAqLw0KPiA+ICsJaGRtaV9vcHRzLT5j YWxpYnJhdGlvbl9hY3EgPSBhY3E7DQo+ID4gKwloZG1pX29wdHMtPmNhbGlicmF0aW9uX2ZvcmNl ID0gZm9yY2U7DQo+ID4gKwkvKiB0byBhdm9pZCBvdGhlciByZWNvbmZpZ3VyYXRpb25zIHdoZW4g aXMgdG8gY2FsaWJyYXRlICovDQo+ID4gKwloZG1pX29wdHMtPnNldF9jb2xvcl9kZXB0aCA9IDA7 DQo+ID4gKwloZG1pX29wdHMtPnNldF90bWRzX2JpdF9jbG9ja19yYXRpbyA9IDA7DQo+ID4gKwlo ZG1pX29wdHMtPnNldF9zY3JhbWJsaW5nID0gMDsNCj4gPiArDQo+ID4gKwkvKiBzZXQgUEhZIGNv bmZpZ3VyYXRpb24gKi8NCj4gPiArCXJldCA9IHBoeV9jb25maWd1cmUoZHdfZGV2LT5waHksICZv cHRzKTsNCj4gPiArCWlmIChyZXQpIHsNCj4gPiArCQlkZXZfZXJyKGR3X2Rldi0+ZGV2LCAiJXM6 IENvdWxkbid0IFBIWSBjb25maWd1cmUgKGVycjogJWQpXG4iLA0KPiA+ICsJCQlfX2Z1bmNfXywg cmV0KTsNCj4gPiArCQlnb3RvIGVycjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBjYWxsIFBI WSBjYWxpYnJhdGUgKi8NCj4gPiArCXJldCA9IHBoeV9jYWxpYnJhdGUoZHdfZGV2LT5waHkpOw0K PiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCWRldl9lcnIoZHdfZGV2LT5kZXYsICIlczogQ291bGRu J3QgUEhZIGNhbGlicmF0ZSAoZXJyOiAlZClcbiIsDQo+ID4gKwkJCV9fZnVuY19fLCByZXQpOw0K PiA+ICsJCWdvdG8gZXJyOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArZXJyOg0KPiA+ICsJcmV0dXJu IHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBkd19oZG1pX3BoeV9jb25maWco c3RydWN0IGR3X2hkbWlfZGV2ICpkd19kZXYsDQo+ID4gKwkJCSAgICAgIHVuc2lnbmVkIGNoYXIg Y29sb3JfZGVwdGgsIGJvb2wgaGRtaTIsDQo+ID4gKwkJCSAgICAgIGJvb2wgc2NyYW1ibGluZykN Cj4gPiArew0KPiA+ICsJdW5pb24gcGh5X2NvbmZpZ3VyZV9vcHRzIG9wdHM7DQo+ID4gKwlzdHJ1 Y3QgcGh5X2NvbmZpZ3VyZV9vcHRzX2hkbWkgKmhkbWlfb3B0cyA9ICZvcHRzLmhkbWk7DQo+ID4g KwlpbnQgcmV0ID0gMDsNCj4gPiArDQo+ID4gKwloZG1pX21hc2tfd3JpdGVsKGR3X2RldiwgMHgx LCBEV19IRE1JX0NCVVNJT0NUUkwsDQo+ID4gKwkJCSBEV19IRE1JX0RBVEFQQVRIX0NCVVNaX09G RlNFVCwNCj4gPiArCQkJIERXX0hETUlfREFUQVBBVEhfQ0JVU1pfTUFTSyk7DQo+ID4gKwloZG1p X21hc2tfd3JpdGVsKGR3X2RldiwgMHgxLCBEV19IRE1JX0NCVVNJT0NUUkwsDQo+ID4gKwkJCSBE V19IRE1JX0NCVVNfU1ZTUkVUTU9ERVpfT0ZGU0VULA0KPiA+ICsJCQkgRFdfSERNSV9DQlVTX1NW U1JFVE1PREVaX01BU0spOw0KPiA+ICsJaGRtaV9tYXNrX3dyaXRlbChkd19kZXYsIDB4MSwgRFdf SERNSV9DQlVTSU9DVFJMLA0KPiA+ICsJCQkgRFdfSERNSV9DQlVTX1BERFFfT0ZGU0VULA0KPiA+ ICsJCQkgRFdfSERNSV9DQlVTX1BERFFfTUFTSyk7DQo+ID4gKwloZG1pX21hc2tfd3JpdGVsKGR3 X2RldiwgMHgxLCBEV19IRE1JX0NCVVNJT0NUUkwsDQo+ID4gKwkJCSBEV19IRE1JX0NCVVNfUkVT RVRfT0ZGU0VULA0KPiA+ICsJCQkgRFdfSERNSV9DQlVTX1JFU0VUX01BU0spOw0KPiA+ICsNCj4g PiArCS8qIGxvYWQgdGhlIHJlcXVpcmVkIG9wdGlvbnMgZm9yIHBvd2VyIG9uICovDQo+ID4gKwlo ZG1pX29wdHMtPmNvbG9yX2RlcHRoID0gY29sb3JfZGVwdGg7DQo+ID4gKwloZG1pX29wdHMtPnRt ZHNfYml0X2Nsb2NrX3JhdGlvID0gaGRtaTI7DQo+ID4gKwloZG1pX29wdHMtPnNjcmFtYmxpbmcg PSBzY3JhbWJsaW5nOw0KPiA+ICsJLyogdG8gYXZvaWQgY29sb3IgZGVwdGggcmVjb25maWd1cmF0 aW9uIGJlZm9yZSB0aGUgcG93ZXIgb24gKi8NCj4gPiArCWhkbWlfb3B0cy0+c2V0X2NvbG9yX2Rl cHRoID0gMDsNCj4gPiArDQo+ID4gKwkvKiBzZXQgUEhZIGNvbmZpZ3VyYXRpb24gKi8NCj4gPiAr CXJldCA9IHBoeV9jb25maWd1cmUoZHdfZGV2LT5waHksICZvcHRzKTsNCj4gPiArCWlmIChyZXQp IHsNCj4gPiArCQlkZXZfZXJyKGR3X2Rldi0+ZGV2LCAiJXM6IENvdWxkbid0IFBIWSBjb25maWd1 cmUgKGVycjogJWQpXG4iLA0KPiA+ICsJCQlfX2Z1bmNfXywgcmV0KTsNCj4gPiArCQlnb3RvIGVy cjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBjYWxsIFBIWSBwb3dlciBvZmYgaWYgbmVlZGVk ICovDQo+ID4gKwlpZiAoZHdfZGV2LT5waHktPnBvd2VyX2NvdW50ID4gMCkgew0KPiA+ICsJCXJl dCA9IHBoeV9wb3dlcl9vZmYoZHdfZGV2LT5waHkpOw0KPiA+ICsJCWlmIChyZXQpIHsNCj4gPiAr CQkJZGV2X2Vycihkd19kZXYtPmRldiwgIiVzOiBDb3VsZG4ndCBQSFkgcG93ZXIgb2ZmIChlcnI6 ICVkKVxuIiwNCj4gPiArCQkJCV9fZnVuY19fLCByZXQpOw0KPiA+ICsJCX0NCj4gPiArCX0NCj4g PiArDQo+ID4gKwkvKiBjYWxsIFBIWSBwb3dlciBvbiAqLw0KPiA+ICsJcmV0ID0gcGh5X3Bvd2Vy X29uKGR3X2Rldi0+cGh5KTsNCj4gPiArCWlmIChyZXQpIHsNCj4gPiArCQlkZXZfZXJyKGR3X2Rl di0+ZGV2LCAiJXM6IENvdWxkbid0IFBIWSBwb3dlciBvbiAoZXJyOiAlZClcbiIsDQo+ID4gKwkJ CV9fZnVuY19fLCByZXQpOw0KPiA+ICsJCWdvdG8gZXJyOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAr ZXJyOg0KPiA+ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBk d19oZG1pX3BoeV9zZXRfY29sb3JfZGVwdGgoc3RydWN0IGR3X2hkbWlfZGV2ICpkd19kZXYsDQo+ ID4gKwkJCQkgICAgICAgdTggY29sb3JfZGVwdGgpDQo+ID4gK3sNCj4gPiArCXVuaW9uIHBoeV9j b25maWd1cmVfb3B0cyBvcHRzOw0KPiA+ICsJc3RydWN0IHBoeV9jb25maWd1cmVfb3B0c19oZG1p ICpoZG1pX29wdHMgPSAmb3B0cy5oZG1pOw0KPiA+ICsJaW50IHJldCA9IDA7DQo+ID4gKw0KPiA+ ICsJLyogbG9hZCB0aGUgcmVxdWlyZWQgb3B0aW9ucyBmb3IgY29sb3IgZGVwdGggcmVjb25maWd1 cmF0aW9uICovDQo+ID4gKwloZG1pX29wdHMtPmNvbG9yX2RlcHRoID0gY29sb3JfZGVwdGg7DQo+ ID4gKwkvKiB0byBhdm9pZCBvdGhlciByZWNvbmZpZ3VyYXRpb25zIHdoZW4gaXMgdG8gc2V0IG9u bHkgY29sb3IgZGVwdGggKi8NCj4gPiArCWhkbWlfb3B0cy0+c2V0X3RtZHNfYml0X2Nsb2NrX3Jh dGlvID0gMDsNCj4gPiArCWhkbWlfb3B0cy0+c2V0X3NjcmFtYmxpbmcgPSAwOw0KPiA+ICsNCj4g PiArCS8qIHNldCBQSFkgY29uZmlndXJhdGlvbiAqLw0KPiA+ICsJcmV0ID0gcGh5X2NvbmZpZ3Vy ZShkd19kZXYtPnBoeSwgJm9wdHMpOw0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCWRldl9lcnIo ZHdfZGV2LT5kZXYsICIlczogQ291bGRuJ3QgUEhZIGNvbmZpZ3VyZSAoZXJyOiAlZClcbiIsDQo+ ID4gKwkJCV9fZnVuY19fLCByZXQpOw0KPiA+ICsJCWdvdG8gZXJyOw0KPiA+ICsJfQ0KPiA+ICsN Cj4gPiArZXJyOg0KPiA+ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj IHZvaWQgZHdfaGRtaV9ldmVudF9zb3VyY2VfY2hhbmdlKHN0cnVjdCBkd19oZG1pX2RldiAqZHdf ZGV2KQ0KPiA+ICt7DQo+ID4gKwlpZiAoZHdfZGV2LT5yZWdpc3RlcmVkKQ0KPiA+ICsJCXY0bDJf c3ViZGV2X25vdGlmeV9ldmVudCgmZHdfZGV2LT5zZCwgJmR3X2hkbWlfZXZlbnRfZm10KTsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBkd19oZG1pX3Jlc2V0X2NlYXZpZChzdHJ1Y3Qg ZHdfaGRtaV9kZXYgKmR3X2RldikNCj4gPiArew0KPiA+ICsJaGRtaV9tYXNrX3dyaXRlbChkd19k ZXYsIDB4MSwgRFdfSERNSV9DRUFWSURfQ09ORklHLA0KPiA+ICsJCQkgRFdfSERNSV9DRUFWSURf UlNUX09GRlNFVCwNCj4gPiArCQkJIERXX0hETUlfQ0VBVklEX1JTVF9NQVNLKTsNCj4gPiArCW1z bGVlcCgxMDApOw0KPiA+ICsJaGRtaV9tYXNrX3dyaXRlbChkd19kZXYsIDB4MCwgRFdfSERNSV9D RUFWSURfQ09ORklHLA0KPiA+ICsJCQkgRFdfSERNSV9DRUFWSURfUlNUX09GRlNFVCwNCj4gPiAr CQkJIERXX0hETUlfQ0VBVklEX1JTVF9NQVNLKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgZHdfaGRtaV91cGRhdGVfYXZtdXRlKHN0cnVj dCBkd19oZG1pX2RldiAqZHdfZGV2LCB1MzIgbWJ1c19jb2RlKQ0KPiA+ICt7DQo+ID4gKwl1MzIg dmFsX2wgPSAweDAsIHZhbF9oID0gMHgwOw0KPiA+ICsNCj4gPiArCXN3aXRjaCAobWJ1c19jb2Rl KSB7DQo+ID4gKwljYXNlIE1FRElBX0JVU19GTVRfWVVZVjhfMVgxNjogLyogWUNiQ3IgNDoyOjIg Ki8NCj4gPiArCQl2YWxfaCA9IDB4MDAwMDgwMDA7DQo+ID4gKwkJdmFsX2wgPSAweDAwMDA4MDAw Ow0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBNRURJQV9CVVNfRk1UX1lVWVYxMl8xWDI0OiAv KiBZQ2JDciA0OjQ6NCAqLw0KPiA+ICsJCXZhbF9oID0gMHgwMDAwODAwMDsNCj4gPiArCQl2YWxf bCA9IDB4MDAwMDgwMDA7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIE1FRElBX0JVU19GTVRf WVZZVThfMVgxNjogLyogWUNiQ3IgNDoyOjAgKi8NCj4gPiArCQl2YWxfaCA9IDB4MDAwMDBmMDA7 DQo+ID4gKwkJdmFsX2wgPSAweDBmMDA3ZjAwOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBN RURJQV9CVVNfRk1UX1JHQjg4OF8yWDEyX0JFOiAvKiBSR0IgKi8NCj4gPiArCWRlZmF1bHQ6DQo+ ID4gKwkJYnJlYWs7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaGRtaV93cml0ZWwoZHdfZGV2LCB2 YWxfbCwgRFdfSERNSV9WTV9DRkdfQ0hfMF8xKTsNCj4gPiArCWhkbWlfbWFza193cml0ZWwoZHdf ZGV2LCB2YWxfaCwgRFdfSERNSV9WTV9DRkdfQ0gyLA0KPiA+ICsJCQkgRFdfSERNSV9WTV9DSDJf Q09MX1ZBTFVFX09GRlNFVCwNCj4gPiArCQkJIERXX0hETUlfVk1fQ0gyX0NPTF9WQUxVRV9NQVNL KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHUzMiBkd19oZG1pX2dldF9tYnVzX2NvZGUo c3RydWN0IGR3X2hkbWlfZGV2ICpkd19kZXYpDQo+ID4gK3sNCj4gPiArCWVudW0gaGRtaV9jb2xv cnNwYWNlIGNzID0gZHdfZGV2LT5hdmlpZi5hdmkuY29sb3JzcGFjZTsNCj4gPiArDQo+ID4gKwlz d2l0Y2ggKGNzKSB7DQo+ID4gKwljYXNlIEhETUlfQ09MT1JTUEFDRV9SR0I6IC8qIFJHQiAqLw0K PiA+ICsJCXJldHVybiBNRURJQV9CVVNfRk1UX1JHQjg4OF8yWDEyX0JFOw0KPiA+ICsJY2FzZSBI RE1JX0NPTE9SU1BBQ0VfWVVWNDIyOiAvKiBZQ2JDciA0OjI6MiAqLw0KPiA+ICsJCXJldHVybiBN RURJQV9CVVNfRk1UX1lVWVY4XzFYMTY7DQo+ID4gKwljYXNlIEhETUlfQ09MT1JTUEFDRV9ZVVY0 NDQ6IC8qIFlDYkNyIDQ6NDo0ICovDQo+ID4gKwkJcmV0dXJuIE1FRElBX0JVU19GTVRfWVVZVjEy XzFYMjQ7DQo+ID4gKwljYXNlIEhETUlfQ09MT1JTUEFDRV9ZVVY0MjA6IC8qIFlDYkNyIDQ6Mjow ICovDQo+ID4gKwkJcmV0dXJuIE1FRElBX0JVU19GTVRfWVZZVThfMVgxNjsNCj4gPiArCWRlZmF1 bHQ6DQo+ID4gKwkJcmV0dXJuIE1FRElBX0JVU19GTVRfUkdCODg4XzJYMTJfQkU7DQo+ID4gKwl9 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB1OCBkd19oZG1pX2luZm9mcmFtZV9jaGVja3N1 bSh1OCAqcHRyLCBzaXplX3Qgc2l6ZSkNCj4gPiArew0KPiA+ICsJdTggY3N1bSA9IDA7DQo+ID4g KwlzaXplX3QgaTsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQ0KPiA+ ICsJCWNzdW0gKz0gcHRyW2ldOw0KPiA+ICsJcmV0dXJuIDI1NiAtIGNzdW07DQo+ID4gK30NCj4g PiArDQo+ID4gK3N0YXRpYyB2b2lkIGR3X2hkbWlfZ2V0X3Jhd19pbmZvZnJhbWVfYXZpKHN0cnVj dCBkd19oZG1pX2RldiAqZHdfZGV2LA0KPiA+ICsJCQkJCSAgc3RydWN0IGR3X2hkbWlfaW5mb2Zy YW1lX2NmZyAqZmNmZykNCj4gPiArew0KPiA+ICsJdTMyIHBiLCBwaCA9IGhkbWlfcmVhZGwoZHdf ZGV2LCBmY2ZnLT5oZWFkZXJfYWRkcik7DQo+ID4gKwl1bmlvbiBoZG1pX2luZm9mcmFtZSAqZnJh bWUgPSBmY2ZnLT5mcmFtZTsNCj4gPiArCXU4IHBhY2tldF9obGVuID0gc2l6ZW9mKGZjZmctPmhl YWRlcik7DQo+ID4gKwl1OCBwYWNrZXRfbGVuID0gKHBoID4+IDgpICYgMHhmZjsNCj4gPiArCXVu c2lnbmVkIGludCBpLCBqLCBwb3MgPSAwOw0KPiA+ICsJdTggcGFja2V0WzM1XSA9IHswfTsNCj4g PiArDQo+ID4gKwlkZXZfZGJnKGR3X2Rldi0+ZGV2LCAiJXNbJXNdOiBwYWNrZXRfaGVhZGVyPTB4 JXhcbiIsIF9fZnVuY19fLA0KPiA+ICsJCWZjZmctPmRlc2MsIHBoKTsNCj4gPiArDQo+ID4gKwlp ZiAoIXBoKSAvKiBGYWlsIHNpbGVudGx5IGlmIHRoZXJlIGlzIG5vIHBhY2tldCAqLw0KPiA+ICsJ CXJldHVybjsNCj4gPiArDQo+ID4gKwlpZiAoKHBhY2tldF9sZW4gKyBwYWNrZXRfaGxlbiArIDEp ID4gc2l6ZW9mKHBhY2tldCkpIHsNCj4gPiArCQlkZXZfZGJnKGR3X2Rldi0+ZGV2LCAiJXM6IGlu dmFsaWQgbGVuZ3RoXG4iLCBfX2Z1bmNfXyk7DQo+ID4gKwkJZ290byBvdXQ7DQo+ID4gKwl9DQo+ ID4gKw0KPiA+ICsJbWVtY3B5KHBhY2tldCwgZmNmZy0+aGVhZGVyLCBwYWNrZXRfaGxlbik7DQo+ ID4gKwlwYWNrZXRbMl0gPSBwYWNrZXRfbGVuOyAvKiBSZXBsYWNlIGZha2UgaGVhZGVyIHNpemUg YnkgcmVhbCBoZWFkZXIgKi8NCj4gPiArCXBvcyArPSBwYWNrZXRfaGxlbiArIDE7DQo+ID4gKw0K PiA+ICsJZm9yIChpID0gMDsgaSA8IGZjZmctPnBheWxvYWRfbGVuOyBpKyspIHsNCj4gPiArCQlq ID0gMDsNCj4gPiArDQo+ID4gKwkJLyogc3BlY2lmaWMgZm9yIEFWSSAqLw0KPiA+ICsJCWlmIChm Y2ZnLT5oZWFkZXJbMF0gPT0gSERNSV9JTkZPRlJBTUVfVFlQRV9BVkkgJiYgaSA9PSAxKSB7DQo+ ID4gKwkJCS8qIHJlYWQgWVF4LCBDTngsIFBSeCBmcm9tIEFWSSBQSCByZWdpc3RlciAqLw0KPiA+ ICsJCQl1MzIgb2Zmc2V0ID0gRFdfSERNSV9QSVhfUkVQX0ZBQ1RPUl9PRkZTRVQ7DQo+ID4gKwkJ CXUzMiBtYXNrID0gRFdfSERNSV9RVUFOVF9SQU5HRV9NQVNLIHwNCj4gPiArCQkJCURXX0hETUlf Q09OVEVOVF9UWVBFX01BU0sgfA0KPiA+ICsJCQkJRFdfSERNSV9QSVhfUkVQX0ZBQ1RPUl9NQVNL Ow0KPiA+ICsNCj4gPiArCQkJcGIgPSBoZG1pX21hc2tfcmVhZGwoZHdfZGV2LCBmY2ZnLT5oZWFk ZXJfYWRkciwgb2Zmc2V0LA0KPiA+ICsJCQkJCSAgICAgbWFzayk7DQo+ID4gKwkJCXBhY2tldFtw b3MrK10gPSBwYiAmIDB4ZmY7DQo+ID4gKwkJCWogPSAxOw0KPiA+ICsJCX0NCj4gPiArDQo+ID4g KwkJLyogdGhlIHJlZ2lzdGVycyBhcmUgYWxpZ25lZCB3aXRoIHRoZSBzdGFuZGFyZCByYXcgcGFj a2V0ICovDQo+ID4gKwkJcGIgPSBoZG1pX3JlYWRsKGR3X2RldiwgZmNmZy0+cGF5bG9hZF9hZGRy ICsgNCAqIGkpOw0KPiA+ICsJCWZvciAoOyBqIDwgNDsgaisrKSB7DQo+ID4gKwkJCWlmIChwb3Mg Pj0gKHBhY2tldF9sZW4gKyBwYWNrZXRfaGxlbiArIDEpKQ0KPiA+ICsJCQkJYnJlYWs7DQo+ID4g KwkJCXBhY2tldFtwb3MrK10gPSAocGIgPj4gKDggKiBqKSkgJiAweGZmOw0KPiA+ICsJCX0NCj4g PiArCX0NCj4gPiArDQo+ID4gKwlwYWNrZXRbM10gPSBkd19oZG1pX2luZm9mcmFtZV9jaGVja3N1 bShwYWNrZXQsIHBhY2tldF9sZW4gKw0KPiA+ICsJCQlwYWNrZXRfaGxlbiArIDEpOw0KPiA+ICsN Cj4gPiArCS8qcHJpbnQgYWxsIHBhY2tldCBieXRlcyAqLw0KPiA+ICsJZm9yIChqID0gMDsgaiA8 IHBvczsgaisrKSB7DQo+ID4gKwkJZGV2X2RiZyhkd19kZXYtPmRldiwgIiVzWyVzXTogcGFja2V0 PTB4JXhcbiIsIF9fZnVuY19fLA0KPiA+ICsJCQlmY2ZnLT5kZXNjLCBwYWNrZXRbal0pOw0KPiA+ ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChoZG1pX2luZm9mcmFtZV91bnBhY2soZnJhbWUsIHBhY2tl dCwgc2l6ZW9mKHBhY2tldCkpKSB7DQo+ID4gKwkJZGV2X2RiZyhkd19kZXYtPmRldiwgIiVzWyVz XTogZmFpbGVkIHRvIHVucGFja1xuIiwNCj4gPiArCQkJX19mdW5jX18sIGZjZmctPmRlc2MpOw0K PiA+ICsJCWdvdG8gb3V0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybjsNCj4gPiArb3V0 Og0KPiA+ICsJZGV2X2Vycihkd19kZXYtPmRldiwgIltJTlZBTElEIElORk9GUkFNRV1cbiIpOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBkd19oZG1pX2dldF9yYXdfaW5mb2ZyYW1l X2F1ZChzdHJ1Y3QgZHdfaGRtaV9kZXYgKmR3X2RldiwNCj4gPiArCQkJCQkgIHN0cnVjdCBkd19o ZG1pX2luZm9mcmFtZV9jZmcgKmZjZmcpDQo+ID4gK3sNCj4gPiArCXUzMiBwYiwgcGggPSBoZG1p X3JlYWRsKGR3X2RldiwgZmNmZy0+aGVhZGVyX2FkZHIpOw0KPiA+ICsJdW5pb24gaGRtaV9pbmZv ZnJhbWUgKmZyYW1lID0gZmNmZy0+ZnJhbWU7DQo+ID4gKwl1OCBwYWNrZXRfaGxlbiA9IHNpemVv ZihmY2ZnLT5oZWFkZXIpOw0KPiA+ICsJdTggcGFja2V0X2xlbiA9IChwaCA+PiA4KSAmIDB4ZmY7 DQo+ID4gKwl1bnNpZ25lZCBpbnQgaSwgaiwgcG9zID0gMDsNCj4gPiArCXU4IHBhY2tldFszNV0g PSB7MH07DQo+ID4gKw0KPiA+ICsJZGV2X2RiZyhkd19kZXYtPmRldiwgIiVzWyVzXTogcGFja2V0 X2hlYWRlcj0weCV4XG4iLCBfX2Z1bmNfXywNCj4gPiArCQlmY2ZnLT5kZXNjLCBwaCk7DQo+ID4g Kw0KPiA+ICsJaWYgKCFwaCkgLyogRmFpbCBzaWxlbnRseSBpZiB0aGVyZSBpcyBubyBwYWNrZXQg Ki8NCj4gPiArCQlyZXR1cm47DQo+ID4gKw0KPiA+ICsJaWYgKChwYWNrZXRfbGVuICsgcGFja2V0 X2hsZW4gKyAxKSA+IHNpemVvZihwYWNrZXQpKSB7DQo+ID4gKwkJZGV2X2RiZyhkd19kZXYtPmRl diwgIiVzOiBpbnZhbGlkIGxlbmd0aFxuIiwgX19mdW5jX18pOw0KPiA+ICsJCWdvdG8gb3V0Ow0K PiA+ICsJfQ0KPiA+ICsNCj4gPiArCW1lbWNweShwYWNrZXQsIGZjZmctPmhlYWRlciwgcGFja2V0 X2hsZW4pOw0KPiA+ICsJcGFja2V0WzJdID0gcGFja2V0X2xlbjsgLyogUmVwbGFjZSBmYWtlIGhl YWRlciBzaXplIGJ5IHJlYWwgaGVhZGVyICovDQo+ID4gKwlwb3MgKz0gcGFja2V0X2hsZW4gKyAx Ow0KPiA+ICsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCBmY2ZnLT5wYXlsb2FkX2xlbjsgaSsrKSB7 DQo+ID4gKwkJaiA9IDA7DQo+ID4gKw0KPiA+ICsJCS8qIHNwZWNpZmljIGZvciBhdWRpbyAqLw0K PiA+ICsJCWlmIChmY2ZnLT5oZWFkZXJbMF0gPT0gSERNSV9JTkZPRlJBTUVfVFlQRV9BVURJTyAm JiBpID09IDEpIHsNCj4gPiArCQkJcGIgPSBoZG1pX3JlYWRsKGR3X2RldiwgZmNmZy0+cGF5bG9h ZF9hZGRyICsgNCAqIGkpOw0KPiA+ICsJCQlwYWNrZXRbcG9zKytdID0gKHBiIHwNCj4gPiArCQkJ ICAgICgocGIgJiBEV19IRE1JX0xGRV9QTEFZQkFDS19MRVZFTF9NQVNLKQ0KPiA+ICsJCQkgICAg Pj4gRFdfSERNSV9MRkVfUExBWUJBQ0tfTEVWRUxfT0ZGU0VUKSkgJg0KPiA+ICsJCQkgICAgMHhm ZjsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQkvKiB0aGUgcmVnaXN0 ZXJzIGFyZSBhbGlnbmVkIHdpdGggdGhlIHN0YW5kYXJkIHJhdyBwYWNrZXQgKi8NCj4gPiArCQlw YiA9IGhkbWlfcmVhZGwoZHdfZGV2LCBmY2ZnLT5wYXlsb2FkX2FkZHIgKyA0ICogaSk7DQo+ID4g KwkJZm9yICg7IGogPCA0OyBqKyspIHsNCj4gPiArCQkJaWYgKHBvcyA+PSAocGFja2V0X2xlbiAr IHBhY2tldF9obGVuICsgMSkpDQo+ID4gKwkJCQlicmVhazsNCj4gPiArCQkJcGFja2V0W3Bvcysr XSA9IChwYiA+PiAoOCAqIGopKSAmIDB4ZmY7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsNCj4g PiArCXBhY2tldFszXSA9IGR3X2hkbWlfaW5mb2ZyYW1lX2NoZWNrc3VtKHBhY2tldCwgcGFja2V0 X2xlbiArDQo+ID4gKwkJCXBhY2tldF9obGVuICsgMSk7DQo+ID4gKw0KPiA+ICsJLypwcmludCBh bGwgcGFja2V0IGJ5dGVzICovDQo+ID4gKwlmb3IgKGogPSAwOyBqIDwgcG9zOyBqKyspIHsNCj4g PiArCQlkZXZfZGJnKGR3X2Rldi0+ZGV2LCAiJXNbJXNdOiBwYWNrZXQ9MHgleFxuIiwgX19mdW5j X18sDQo+ID4gKwkJCWZjZmctPmRlc2MsIHBhY2tldFtqXSk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ ICsJaWYgKGhkbWlfaW5mb2ZyYW1lX3VucGFjayhmcmFtZSwgcGFja2V0LCBzaXplb2YocGFja2V0 KSkpIHsNCj4gPiArCQlkZXZfZGJnKGR3X2Rldi0+ZGV2LCAiJXNbJXNdOiBmYWlsZWQgdG8gdW5w YWNrXG4iLA0KPiA+ICsJCQlfX2Z1bmNfXywgZmNmZy0+ZGVzYyk7DQo+ID4gKwkJZ290byBvdXQ7 DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuOw0KPiA+ICtvdXQ6DQo+ID4gKwlkZXZfZXJy KGR3X2Rldi0+ZGV2LCAiW0lOVkFMSUQgSU5GT0ZSQU1FXVxuIik7DQo+ID4gK30NCj4gPiArDQo+ ID4gK3N0YXRpYyB2b2lkIGR3X2hkbWlfZ2V0X3Jhd19pbmZvZnJhbWVfdnMoc3RydWN0IGR3X2hk bWlfZGV2ICpkd19kZXYsDQo+ID4gKwkJCQkJIHN0cnVjdCBkd19oZG1pX2luZm9mcmFtZV9jZmcg KmZjZmcpDQo+ID4gK3sNCj4gPiArCXUzMiBwYiwgcGggPSBoZG1pX21hc2tfcmVhZGwoZHdfZGV2 LCBEV19IRE1JX1BERUNfVlNJX1NUMSwNCj4gPiArCQkJCSAgICAgRFdfSERNSV9MRU5HVEhfT0ZG U0VULA0KPiA+ICsJCQkJICAgICBEV19IRE1JX0xFTkdUSF9NQVNLKTsNCj4gPiArCXVuaW9uIGhk bWlfaW5mb2ZyYW1lICpmcmFtZSA9IGZjZmctPmZyYW1lOw0KPiA+ICsJdTggcGFja2V0X2hsZW4g PSBzaXplb2YoZmNmZy0+aGVhZGVyKTsNCj4gPiArCXVuc2lnbmVkIGludCBqLCBwb3MgPSAwOw0K PiA+ICsJdTggcGFja2V0WzM1XSA9IHswfTsNCj4gPiArCXU4IHBhY2tldF9sZW4gPSBwaDsNCj4g PiArDQo+ID4gKwlkZXZfZGJnKGR3X2Rldi0+ZGV2LCAiJXNbJXNdOiBwYWNrZXRfaGVhZGVyPTB4 JXhcbiIsIF9fZnVuY19fLA0KPiA+ICsJCWZjZmctPmRlc2MsIHBoKTsNCj4gPiArDQo+ID4gKwlp ZiAoIXBoKSAvKiBGYWlsIHNpbGVudGx5IGlmIHRoZXJlIGlzIG5vIHBhY2tldCAqLw0KPiA+ICsJ CXJldHVybjsNCj4gPiArDQo+ID4gKwlpZiAoKHBhY2tldF9sZW4gKyBwYWNrZXRfaGxlbiArIDEp ID4gc2l6ZW9mKHBhY2tldCkpIHsNCj4gPiArCQlkZXZfZGJnKGR3X2Rldi0+ZGV2LCAiJXM6IGlu dmFsaWQgbGVuZ3RoXG4iLCBfX2Z1bmNfXyk7DQo+ID4gKwkJZ290byBvdXQ7DQo+ID4gKwl9DQo+ ID4gKw0KPiA+ICsJbWVtY3B5KHBhY2tldCwgZmNmZy0+aGVhZGVyLCBwYWNrZXRfaGxlbik7DQo+ ID4gKwlwYWNrZXRbMl0gPSBwYWNrZXRfbGVuOyAvKiBSZXBsYWNlIGZha2UgaGVhZGVyIHNpemUg YnkgcmVhbCBoZWFkZXIgKi8NCj4gPiArCXBvcyArPSBwYWNrZXRfaGxlbiArIDE7DQo+ID4gKw0K PiA+ICsJLyogMjRiaXQgSUVFRSBSZWdpc3RyYXRpb24gaWRlbnRpZmllciAqLw0KPiA+ICsJcGIg PSBoZG1pX21hc2tfcmVhZGwoZHdfZGV2LCBEV19IRE1JX1BERUNfVlNJX1NUMCwNCj4gPiArCQkJ ICAgICBEV19IRE1JX0lFRUVfUkVHX0lEX09GRlNFVCwNCj4gPiArCQkJICAgICBEV19IRE1JX0lF RUVfUkVHX0lEX01BU0spOw0KPiA+ICsJZm9yIChqID0gMDsgaiA8IDM7IGorKykgew0KPiA+ICsJ CWlmIChwb3MgPj0gKHBhY2tldF9sZW4gKyBwYWNrZXRfaGxlbiArIDEpKQ0KPiA+ICsJCQlicmVh azsNCj4gPiArCQlwYWNrZXRbcG9zKytdID0gKHBiID4+ICg4ICogaikpICYgMHhmZjsNCj4gPiAr CX0NCj4gPiArDQo+ID4gKwkvKiBIRE1JIHZpZGVvIGZvcm1hdCAqLw0KPiA+ICsJcGIgPSBoZG1p X21hc2tfcmVhZGwoZHdfZGV2LCBEV19IRE1JX1BERUNfVlNJX1NUMSwNCj4gPiArCQkJICAgICBE V19IRE1JX0hETUlfVklERU9fRk9STUFUX09GRlNFVCwNCj4gPiArCQkJICAgICBEV19IRE1JX0hE TUlfVklERU9fRk9STUFUX01BU0spOw0KPiA+ICsJcGFja2V0W3BvcysrXSA9IChwYiA8PCBEV19I RE1JX0hETUlfVklERU9fRk9STUFUX09GRlNFVCkgJg0KPiA+ICsJCQkweGZmOw0KPiA+ICsNCj4g PiArCS8qIEhETUkgdmljICovDQo+ID4gKwlwYiA9IGhkbWlfbWFza19yZWFkbChkd19kZXYsIERX X0hETUlfUERFQ19WU0lfU1QxLA0KPiA+ICsJCQkgICAgIERXX0hETUlfSERNSV9WSUNfT0ZGU0VU LA0KPiA+ICsJCQkgICAgIERXX0hETUlfSERNSV9WSUNfTUFTSyk7DQo+ID4gKwlwYWNrZXRbcG9z KytdID0gcGIgJiAweGZmOw0KPiA+ICsNCj4gPiArCS8qIDNkIHN0cnVjdHVyZSAqLw0KPiA+ICsJ cGIgPSBoZG1pX21hc2tfcmVhZGwoZHdfZGV2LCBEV19IRE1JX1BERUNfVlNJX1NUMSwNCj4gPiAr CQkJICAgICBEV19IRE1JX0gzRF9TVFJVQ1RVUkVfT0ZGU0VULA0KPiA+ICsJCQkgICAgIERXX0hE TUlfSDNEX1NUUlVDVFVSRV9NQVNLKTsNCj4gPiArCXBhY2tldFtwb3MrK10gPSAocGIgPDwgNCkg JiAweGZmOw0KPiA+ICsNCj4gPiArCS8qIDNkIGV4dCBkYXRhICovDQo+ID4gKwlwYiA9IGhkbWlf bWFza19yZWFkbChkd19kZXYsIERXX0hETUlfUERFQ19WU0lfU1QxLA0KPiA+ICsJCQkgICAgIERX X0hETUlfSDNEX0VYVF9EQVRBX09GRlNFVCwNCj4gPiArCQkJICAgICBEV19IRE1JX0gzRF9FWFRf REFUQV9NQVNLKTsNCj4gPiArCXBhY2tldFtwb3MrK10gPSAocGIgPDwgNCkgJiAweGZmOw0KPiA+ ICsNCj4gPiArCXBhY2tldFszXSA9IGR3X2hkbWlfaW5mb2ZyYW1lX2NoZWNrc3VtKHBhY2tldCwg cGFja2V0X2xlbiArDQo+ID4gKwkJCXBhY2tldF9obGVuICsgMSk7DQo+ID4gKw0KPiA+ICsJLypw cmludCBhbGwgcGFja2V0IGJ5dGVzICovDQo+ID4gKwlmb3IgKGogPSAwOyBqIDwgcG9zOyBqKysp IHsNCj4gPiArCQlkZXZfZGJnKGR3X2Rldi0+ZGV2LCAiJXNbJXNdOiBwYWNrZXQ9MHgleFxuIiwg X19mdW5jX18sDQo+ID4gKwkJCWZjZmctPmRlc2MsIHBhY2tldFtqXSk7DQo+ID4gKwl9DQo+ID4g Kw0KPiA+ICsJaWYgKGhkbWlfaW5mb2ZyYW1lX3VucGFjayhmcmFtZSwgcGFja2V0LCBzaXplb2Yo cGFja2V0KSkpIHsNCj4gPiArCQlkZXZfZGJnKGR3X2Rldi0+ZGV2LCAiJXNbJXNdOiBmYWlsZWQg dG8gdW5wYWNrXG4iLA0KPiA+ICsJCQlfX2Z1bmNfXywgZmNmZy0+ZGVzYyk7DQo+ID4gKwkJZ290 byBvdXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuOw0KPiA+ICtvdXQ6DQo+ID4gKwlk ZXZfZXJyKGR3X2Rldi0+ZGV2LCAiW0lOVkFMSUQgSU5GT0ZSQU1FXVxuIik7DQo+ID4gK30NCj4g PiArDQo+ID4gK3N0YXRpYyB2b2lkIGR3X2hkbWlfZ2V0X3Jhd19pbmZvZnJhbWUoc3RydWN0IGR3 X2hkbWlfZGV2ICpkd19kZXYsDQo+ID4gKwkJCQkgICAgICBzdHJ1Y3QgZHdfaGRtaV9pbmZvZnJh bWVfY2ZnICpmY2ZnKQ0KPiA+ICt7DQo+ID4gKwlzd2l0Y2ggKGZjZmctPmhlYWRlclswXSkgew0K PiA+ICsJY2FzZSBIRE1JX0lORk9GUkFNRV9UWVBFX0FWSToNCj4gPiArCQlkd19oZG1pX2dldF9y YXdfaW5mb2ZyYW1lX2F2aShkd19kZXYsIGZjZmcpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2Fz ZSBIRE1JX0lORk9GUkFNRV9UWVBFX1NQRDoNCj4gPiArCQlkZXZfZGJnKGR3X2Rldi0+ZGV2LA0K PiA+ICsJCQkiJXNbJXNdOiBub3QgcHJvY2Vzc2VkIGluZm9mcmFtZSBwYWNrZXQgdHlwZSAlZFxu IiwNCj4gPiArCQkJX19mdW5jX18sIGZjZmctPmRlc2MsIGZjZmctPmhlYWRlclswXSk7DQo+ID4g KwkJYnJlYWs7DQo+ID4gKwljYXNlIEhETUlfSU5GT0ZSQU1FX1RZUEVfQVVESU86DQo+ID4gKwkJ ZHdfaGRtaV9nZXRfcmF3X2luZm9mcmFtZV9hdWQoZHdfZGV2LCBmY2ZnKTsNCj4gPiArCQlicmVh azsNCj4gPiArCWNhc2UgSERNSV9JTkZPRlJBTUVfVFlQRV9WRU5ET1I6DQo+ID4gKwkJZHdfaGRt aV9nZXRfcmF3X2luZm9mcmFtZV92cyhkd19kZXYsIGZjZmcpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ ICsJY2FzZSBIRE1JX0lORk9GUkFNRV9UWVBFX0RSTToNCj4gPiArCQlkZXZfZGJnKGR3X2Rldi0+ ZGV2LA0KPiA+ICsJCQkiJXNbJXNdOiBub3QgcHJvY2Vzc2VkIGluZm9mcmFtZSBwYWNrZXQgdHlw ZSAlZFxuIiwNCj4gPiArCQkJX19mdW5jX18sIGZjZmctPmRlc2MsIGZjZmctPmhlYWRlclswXSk7 DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwlkZWZhdWx0Og0KPiA+ICsJCWRldl9kYmcoZHdfZGV2LT5k ZXYsDQo+ID4gKwkJCSIlc1slc106IGludmFsaWQgaW5mb2ZyYW1lIHBhY2tldCB0eXBlICVkXG4i LA0KPiA+ICsJCQlfX2Z1bmNfXywgZmNmZy0+ZGVzYywgZmNmZy0+aGVhZGVyWzBdKTsNCj4gPiAr CQlicmVhazsNCj4gPiArCX0NCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogRm9yd2FyZCBkZWNsYXJh dGlvbiBuZWVkZWQgYmVjYXVzZSBvZiBjb2xvciBlbmNvZGluZyBjaGFuZ2UgKi8NCj4gPiArc3Rh dGljIHZvaWQgZHdfaGRtaV9wb3dlcl9vZmYoc3RydWN0IGR3X2hkbWlfZGV2ICpkd19kZXYpOw0K PiA+ICtzdGF0aWMgdm9pZCBkd19oZG1pX2NvbnRyb2xsZXJfcG93ZXJfb2ZmKHN0cnVjdCBkd19o ZG1pX2RldiAqZHdfZGV2KTsNCj4gPiArc3RhdGljIGludCBkd19oZG1pX3Bvd2VyX29uKHN0cnVj dCBkd19oZG1pX2RldiAqZHdfZGV2LCB1bnNpZ25lZCBpbnQgaW5wdXQpOw0KPiA+ICsNCj4gPiAr c3RhdGljIHZvaWQgZHdfaGRtaV9nZXRfaW5mb2ZyYW1lcyhzdHJ1Y3QgZHdfaGRtaV9kZXYgKmR3 X2RldikNCj4gPiArew0KPiA+ICsJc3RydWN0IGR3X2hkbWlfaW5mb2ZyYW1lX2NmZyBpZnNbXSA9 IHsNCj4gPiArCQl7DQo+ID4gKwkJCS5kZXNjID0gIkFWSSIsDQo+ID4gKwkJCS5oZWFkZXIgPSB7 SERNSV9JTkZPRlJBTUVfVFlQRV9BVkksIDIsDQo+ID4gKwkJCQkgICBIRE1JX0FWSV9JTkZPRlJB TUVfU0laRX0sDQo+ID4gKwkJCS5oZWFkZXJfYWRkciA9IERXX0hETUlfUERFQ19BVklfSEIsDQo+ ID4gKwkJCS5wYXlsb2FkX2FkZHIgPSBEV19IRE1JX1BERUNfQVZJX1BCLA0KPiA+ICsJCQkucGF5 bG9hZF9sZW4gPSBEV19IRE1JX1BERUNfQVZJX1BCTEVOLA0KPiA+ICsJCQkuZnJhbWUgPSAmZHdf ZGV2LT5hdmlpZiwNCj4gPiArCQkJLmZyYW1lX3NpemUgPSBzaXplb2YoZHdfZGV2LT5hdmlpZiks DQo+ID4gKwkJfSwgew0KPiA+ICsJCQkuZGVzYyA9ICJBdWRpbyIsDQo+ID4gKwkJCS5oZWFkZXIg PSB7SERNSV9JTkZPRlJBTUVfVFlQRV9BVURJTywgMSwNCj4gPiArCQkJCSAgIEhETUlfQVVESU9f SU5GT0ZSQU1FX1NJWkV9LA0KPiA+ICsJCQkuaGVhZGVyX2FkZHIgPSBEV19IRE1JX1BERUNfQUlG X0hCLA0KPiA+ICsJCQkucGF5bG9hZF9hZGRyID0gRFdfSERNSV9QREVDX0FJRl9QQjAsDQo+ID4g KwkJCS5wYXlsb2FkX2xlbiA9IERXX0hETUlfUERFQ19BSUZfUEJMRU4sDQo+ID4gKwkJCS5mcmFt ZSA9ICZkd19kZXYtPmF1ZGlvaWYsDQo+ID4gKwkJCS5mcmFtZV9zaXplID0gc2l6ZW9mKGR3X2Rl di0+YXVkaW9pZiksDQo+ID4gKwkJfSwgew0KPiA+ICsJCQkuZGVzYyA9ICJWZW5kb3IgU3BlY2lm aWMiLA0KPiA+ICsJCQkuaGVhZGVyID0ge0hETUlfSU5GT0ZSQU1FX1RZUEVfVkVORE9SLCAxLA0K PiA+ICsJCQkJICAgSERNSV9WRU5ET1JfSU5GT0ZSQU1FX1NJWkV9LA0KPiA+ICsJCQkuZnJhbWUg PSAmZHdfZGV2LT52c2lmLA0KPiA+ICsJCQkuZnJhbWVfc2l6ZSA9IHNpemVvZihkd19kZXYtPnZz aWYpLA0KPiA+ICsJCX0sDQo+ID4gKwl9Ow0KPiA+ICsJdW5pb24gaGRtaV92ZW5kb3JfYW55X2lu Zm9mcmFtZSAqdmVuZG9yOw0KPiA+ICsJc3RydWN0IGhkbWlfYXZpX2luZm9mcmFtZSAqYXZpOw0K PiA+ICsJdW5zaWduZWQgaW50IGk7DQo+ID4gKwl1MzIgb2xkX21idXM7DQo+ID4gKw0KPiA+ICsJ Zm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaWZzKTsgaSsrKSB7DQo+ID4gKwkJbWVtc2V0KGlm c1tpXS5mcmFtZSwgMCwgaWZzW2ldLmZyYW1lX3NpemUpOw0KPiA+ICsJCWR3X2hkbWlfZ2V0X3Jh d19pbmZvZnJhbWUoZHdfZGV2LCAmaWZzW2ldKTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBV cGRhdGUgY29sb3Igc3BhY2UgKi8NCj4gPiArCW9sZF9tYnVzID0gZHdfZGV2LT5tYnVzX2NvZGU7 DQo+ID4gKwlkd19kZXYtPm1idXNfY29kZSA9IGR3X2hkbWlfZ2V0X21idXNfY29kZShkd19kZXYp Ow0KPiA+ICsJaWYgKGR3X2Rldi0+bWJ1c19jb2RlICE9IG9sZF9tYnVzICYmIGlzX29uKGR3X2Rl dikpIHsNCj4gPiArCQlkd19oZG1pX3Bvd2VyX29mZihkd19kZXYpOw0KPiA+ICsJCWlmIChoYXNf c2lnbmFsKGR3X2RldiwgZHdfZGV2LT5jb25maWd1cmVkX2lucHV0KSkNCj4gPiArCQkJZHdfaGRt aV9wb3dlcl9vbihkd19kZXYsIGR3X2Rldi0+Y29uZmlndXJlZF9pbnB1dCk7DQo+ID4gKwl9DQo+ ID4gKw0KPiA+ICsJLyogVXBkYXRlIEFWTXV0ZSB2YWx1ZSAqLw0KPiA+ICsJZHdfaGRtaV91cGRh dGVfYXZtdXRlKGR3X2RldiwgZHdfZGV2LT5tYnVzX2NvZGUpOw0KPiA+ICsNCj4gPiArCXZlbmRv ciA9ICZkd19kZXYtPnZzaWYudmVuZG9yOw0KPiA+ICsJYXZpID0gJmR3X2Rldi0+YXZpaWYuYXZp Ow0KPiA+ICsNCj4gPiArCS8qDQo+ID4gKwkgKiBVcGRhdGUgY3VycmVudCBWSUM6IFdoZW4gdHJh bnNtaXR0aW5nIGFueSBleHRlbmRlZCB2aWRlbyBmb3JtYXQNCj4gPiArCSAqIGluZGljYXRlZCB0 aHJvdWdoIHVzZSBvZiB0aGUgSERNSV9WSUMgZmllbGQgaW4gdGhlIEhETUkgVmVuZG9yDQo+ID4g KwkgKiBTcGVjaWZpYyBJbmZvRnJhbWUgb3IgYW55IG90aGVyIGZvcm1hdCB3aGljaCBpcyBub3Qg ZGVzY3JpYmVkIGluDQo+ID4gKwkgKiB0aGUgYWJvdmUgY2FzZXMsIGFuIEhETUkgU291cmNlIHNo YWxsIHNldCB0aGUgQVZJIEluZm9GcmFtZSBWSUMNCj4gPiArCSAqIGZpZWxkIHRvIHplcm8uDQo+ ID4gKwkgKi8NCj4gPiArCWlmICh2ZW5kb3ItPmhkbWkudmljICYmICFhdmktPnZpZGVvX2NvZGUp IHsNCj4gPiArCQlkd19kZXYtPmN1cnJlbnRfdmljID0gdmVuZG9yLT5oZG1pLnZpYzsNCj4gPiAr CQlkd19kZXYtPmN1cnJlbnRfdmljX2lzXzRrID0gdHJ1ZTsNCj4gPiArCX0gZWxzZSB7DQo+ID4g KwkJZHdfZGV2LT5jdXJyZW50X3ZpYyA9IGF2aS0+dmlkZW9fY29kZTsNCj4gPiArCQlkd19kZXYt PmN1cnJlbnRfdmljX2lzXzRrID0gZmFsc2U7DQo+ID4gKwl9DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyBpbnQgZHdfaGRtaV93YWl0X3BoeV9sb2NrX3BvbGwoc3RydWN0IGR3X2hkbWlfZGV2 ICpkd19kZXYpDQo+ID4gK3sNCj4gPiArCWludCB0aW1lb3V0ID0gZHdfZGV2LT50bWRzX3ZhbGlk X3dhaXRfY291bnQ7DQo+ID4gKw0KPiA+ICsJd2hpbGUgKCFkd19oZG1pX3RtZHNfdmFsaWQoZHdf ZGV2KSAmJiB0aW1lb3V0LS0gJiYgIWR3X2Rldi0+Zm9yY2Vfb2ZmKQ0KPiA+ICsJCXVzbGVlcF9y YW5nZSg1MDAwLCAxMDAwMCk7DQo+ID4gKw0KPiA+ICsJaWYgKCFkd19oZG1pX3RtZHNfdmFsaWQo ZHdfZGV2KSkNCj4gPiArCQlyZXR1cm4gLUVUSU1FRE9VVDsNCj4gPiArDQo+ID4gKwlyZXR1cm4g MDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgZHdfaGRtaV9yZXNldF9kYXRhcGF0 aChzdHJ1Y3QgZHdfaGRtaV9kZXYgKmR3X2RldikNCj4gPiArew0KPiA+ICsJdTMyIHZhbCA9IERX X0hETUlfVE1EU19TV1JFU0VUIHwNCj4gPiArCQlEV19IRE1JX0hEQ1BfU1dSRVNFVCB8DQo+ID4g KwkJRFdfSERNSV9WSURfU1dSRVNFVCB8DQo+ID4gKwkJRFdfSERNSV9QSVhFTF9TV1JFU0VUIHwN Cj4gPiArCQlEV19IRE1JX0NFQ19TV1JFU0VUIHwNCj4gPiArCQlEV19IRE1JX0FVRF9TV1JFU0VU IHwNCj4gPiArCQlEV19IRE1JX0JVU19TV1JFU0VUIHwNCj4gPiArCQlEV19IRE1JX0hETUlfU1dS RVNFVCB8DQo+ID4gKwkJRFdfSERNSV9NT0RFVF9TV1JFU0VUOw0KPiA+ICsNCj4gPiArCWhkbWlf d3JpdGVsKGR3X2RldiwgdmFsICYgZHdfZGV2LT5yZXNldF9kYXRhcGF0aF9lbmFibGUsDQo+ID4g KwkJICAgIERXX0hETUlfRE1JX1NXX1JTVCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2 b2lkIGR3X2hkbWlfcmVzZXRfYXVkaW8oc3RydWN0IGR3X2hkbWlfZGV2ICpkd19kZXYpDQo+ID4g K3sNCj4gPiArCWhkbWlfd3JpdGVsKGR3X2RldiwgRFdfSERNSV9BVURfU1dSRVNFVCwgRFdfSERN SV9ETUlfU1dfUlNUKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgZHdfaGRtaV9y ZXN0YXJ0X2F1ZGlvX2ZpZm8oc3RydWN0IGR3X2hkbWlfZGV2ICpkd19kZXYpDQo+ID4gK3sNCj4g PiArCWhkbWlfbWFza193cml0ZWwoZHdfZGV2LCAweDEsIERXX0hETUlfQVVEX0ZJRk9fQ1RSTCwN Cj4gPiArCQkJIERXX0hETUlfQUZJRl9JTklUX09GRlNFVCwNCj4gPiArCQkJIERXX0hETUlfQUZJ Rl9JTklUX01BU0spOw0KPiA+ICsJaGRtaV9tYXNrX3dyaXRlbChkd19kZXYsIDB4MCwgRFdfSERN SV9BVURfRklGT19DVFJMLA0KPiA+ICsJCQkgRFdfSERNSV9BRklGX0lOSVRfT0ZGU0VULA0KPiA+ ICsJCQkgRFdfSERNSV9BRklGX0lOSVRfTUFTSyk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyBpbnQgZHdfaGRtaV93YWl0X2F1ZGlvX2xvY2tfcG9sbChzdHJ1Y3QgZHdfaGRtaV9kZXYgKmR3 X2RldikNCj4gPiArew0KPiA+ICsJaW50IHRpbWVvdXQgPSAxMDsNCj4gPiArDQo+ID4gKwl3aGls ZSAoIWR3X2hkbWlfYXVkaW9fdmFsaWQoZHdfZGV2KSAmJiB0aW1lb3V0LS0gJiYgIWR3X2Rldi0+ Zm9yY2Vfb2ZmKQ0KPiA+ICsJCXVzbGVlcF9yYW5nZSg1MDAwLCAxMDAwMCk7DQo+ID4gKw0KPiA+ ICsJaWYgKCFkd19oZG1pX2F1ZGlvX3ZhbGlkKGR3X2RldikpDQo+ID4gKwkJcmV0dXJuIC1FVElN RURPVVQ7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyBpbnQgZHdfaGRtaV9jb25maWdfYXVkaW8oc3RydWN0IGR3X2hkbWlfZGV2ICpkd19kZXYpDQo+ ID4gK3sNCj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJcmV0ID0gZHdfaGRtaV93YWl0X2F1 ZGlvX2xvY2tfcG9sbChkd19kZXYpOw0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCWRldl9lcnIo ZHdfZGV2LT5kZXYsICJmYWlsZWQgdG8gd2FpdCBmb3IgYXVkaW8gcGxsIGxvY2tcbiIpOw0KPiA+ ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogdHJpZ2dlciBvZmZzZXQg Zm9yIE4gYW5kIENUUyBpbnRlcnJ1cHRzICovDQo+ID4gKwloZG1pX21hc2tfd3JpdGVsKGR3X2Rl diwgMHgwNSwgRFdfSERNSV9QREVDX0FDUk1fQ1RSTCwNCj4gPiArCQkJIERXX0hETUlfREVMVEFD VFNfSVJRVFJJR19PRkZTRVQsDQo+ID4gKwkJCSBEV19IRE1JX0RFTFRBQ1RTX0lSUVRSSUdfTUFT Syk7DQo+ID4gKw0KPiA+ICsJLyogQ29uZmlnICovDQo+ID4gKwloZG1pX21hc2tfd3JpdGVsKGR3 X2RldiwgMHgwMSwgRFdfSERNSV9BVURfTVVURV9DVFJMLA0KPiA+ICsJCQkgRFdfSERNSV9BVURf TVVURV9TRUxfT0ZGU0VULA0KPiA+ICsJCQkgRFdfSERNSV9BVURfTVVURV9TRUxfTUFTSyk7DQo+ ID4gKw0KPiA+ICsJLyogZW5hYmxlIGFsbCBvdXRwdXRzIGFuZCBzZWxlY3QgMTYtYml0IGZvciBJ MlMgKi8NCj4gPiArCWhkbWlfd3JpdGVsKGR3X2RldiwgMHgwMCwgRFdfSERNSV9BVURfU0FPX0NU UkwpOw0KPiA+ICsNCj4gPiArCS8qIFN0YXJ0ICovDQo+ID4gKwlkd19oZG1pX3Jlc3RhcnRfYXVk aW9fZmlmbyhkd19kZXYpOw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0 YXRpYyB2b2lkIGR3X2hkbWlfY29uZmlnX3BhY2tldChzdHJ1Y3QgZHdfaGRtaV9kZXYgKmR3X2Rl dikNCj4gPiArew0KPiA+ICsJaGRtaV9tYXNrX3dyaXRlbChkd19kZXYsIDB4MSwgRFdfSERNSV9Q REVDX0NUUkwsDQo+ID4gKwkJCSBEV19IRE1JX1BGSUZPX1NUT1JFX0ZJTFRFUl9FTl9PRkZTRVQs DQo+ID4gKwkJCSBEV19IRE1JX1BGSUZPX1NUT1JFX0ZJTFRFUl9FTl9NQVNLKTsNCj4gPiArDQo+ ID4gKwloZG1pX21hc2tfd3JpdGVsKGR3X2RldiwgMHgxLCBEV19IRE1JX1BERUNfQVNQX0NUUkws DQo+ID4gKwkJCSBEV19IRE1JX0FVVE9fVk1VVEVfT0ZGU0VULA0KPiA+ICsJCQkgRFdfSERNSV9B VVRPX1ZNVVRFX01BU0spOw0KPiA+ICsNCj4gPiArCWhkbWlfbWFza193cml0ZWwoZHdfZGV2LCAw eDEsIERXX0hETUlfUERFQ19BU1BfQ1RSTCwNCj4gPiArCQkJIERXX0hETUlfQVVUT19TUEZMQVRf TVVURV9PRkZTRVQsDQo+ID4gKwkJCSBEV19IRE1JX0FVVE9fU1BGTEFUX01VVEVfTUFTSyk7DQo+ ID4gKw0KPiA+ICsJaGRtaV9tYXNrX3dyaXRlbChkd19kZXYsIDB4MSwgRFdfSERNSV9QREVDX0NU UkwsDQo+ID4gKwkJCSBEV19IRE1JX1BEX0ZJRk9fQ0xSX09GRlNFVCwNCj4gPiArCQkJIERXX0hE TUlfUERfRklGT19DTFJfTUFTSyk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIGR3 X2hkbWlfd2FpdF92aWRlb19zdGFibGUoc3RydWN0IGR3X2hkbWlfZGV2ICpkd19kZXYpDQo+ID4g K3sNCj4gPiArCS8qDQo+ID4gKwkgKiBFbXBpcmljIHZhbHVlLiBWaWRlbyBzaG91bGQgYmUgc3Rh YmxlIHdheSBsb25nZXIgYmVmb3JlIHRoZQ0KPiA+ICsJICogZW5kIG9mIHRoaXMgc2xlZXAgdGlt ZS4gVGhvdWdoLCB3ZSBjYW4gaGF2ZSBzb21lIHZpZGVvIGNoYW5nZQ0KPiA+ICsJICogaW50ZXJy dXB0cyBiZWZvcmUgdGhlIHZpZGVvIGlzIHN0YWJsZSBzbyBmaWx0ZXIgdGhlbSBieSBzbGVlcGlu Zy4NCj4gPiArCSAqLw0KPiA+ICsJbXNsZWVwKGR3X2Rldi0+dmlkZW9fc3RhYmxlX3dhaXRfbXMp Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBkd19oZG1pX2VuYWJsZV9pbnRzKHN0 cnVjdCBkd19oZG1pX2RldiAqZHdfZGV2KQ0KPiA+ICt7DQo+ID4gKwl1MzIgcGRlY19pbnRzID0g MDsNCj4gPiArDQo+ID4gKwkvKiB2aWRlbyBpbnRlcnJ1cHRzICovDQo+ID4gKwloZG1pX3dyaXRl bChkd19kZXYsIERXX0hETUlfQ0xLX0NIQU5HRV9JU1RTIHwgRFdfSERNSV9QTExfTENLX0NIR19J U1RTIHwNCj4gPiArCQkJRFdfSERNSV9EQ01fQ1VSUkVOVF9NT0RFX0NIR19JU1RTLCBEV19IRE1J X0lFTl9TRVQpOw0KPiA+ICsJaGRtaV93cml0ZWwoZHdfZGV2LCAoRFdfSERNSV9WQUNUX0xJTl9J U1RTIHwgRFdfSERNSV9IQUNUX1BJWF9JU1RTKSwNCj4gPiArCQkgICAgRFdfSERNSV9NRF9JRU5f U0VUKTsNCj4gPiArDQo+ID4gKwkvKiBpbmZvZnJhbWVzIGludGVycnVwdHMgKi8NCj4gPiArCXBk ZWNfaW50cyA9IChEV19IRE1JX1ZTSV9DS1NfQ0hHX0lTVFMgfA0KPiA+ICsJCSAgICAgRFdfSERN SV9EUk1fQ0tTX0NIR19JU1RTIHwNCj4gPiArCQkgICAgIERXX0hETUlfQVZJX0NLU19DSEdfSVNU Uyk7DQo+ID4gKw0KPiA+ICsJLyogYXVkaW8gaW50ZXJydXB0cyAqLw0KPiA+ICsJcGRlY19pbnRz IHw9IChEV19IRE1JX0FVRF9UWVBFX0NIR19JU1RTIHwNCj4gPiArCQkgICAgICBEV19IRE1JX0FJ Rl9DS1NfQ0hHX0lTVFMgfA0KPiA+ICsJCSAgICAgIERXX0hETUlfQUNSX05fQ0hHX0lTVFMgfA0K PiA+ICsJCSAgICAgIERXX0hETUlfQUNSX0NUU19DSEdfSVNUUyB8DQo+ID4gKwkJICAgICAgRFdf SERNSV9HQ1BfQVZfTVVURV9DSEdfSVNUUyk7DQo+ID4gKw0KPiA+ICsJaGRtaV93cml0ZWwoZHdf ZGV2LCBwZGVjX2ludHMsIERXX0hETUlfUERFQ19JRU5fU0VUKTsNCj4gPiArCWhkbWlfd3JpdGVs KGR3X2RldiwgKERXX0hETUlfQUZJRl9PVkVSRkxfSVNUUyB8DQo+ID4gKwkJCURXX0hETUlfQUZJ Rl9VTkRFUkZMX0lTVFMgfA0KPiA+ICsJCQlEV19IRE1JX0FGSUZfVEhTX1BBU1NfSVNUUyksDQo+ ID4gKwkJICAgIERXX0hETUlfQVVEX0ZJRk9fSUVOX1NFVCk7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyB2b2lkIGR3X2hkbWlfZGlzYWJsZV9pbnRzKHN0cnVjdCBkd19oZG1pX2RldiAqZHdf ZGV2KQ0KPiA+ICt7DQo+ID4gKwloZG1pX3dyaXRlbChkd19kZXYsIH4weDAsIERXX0hETUlfSUVO X0NMUik7DQo+ID4gKwloZG1pX3dyaXRlbChkd19kZXYsIH4weDAsIERXX0hETUlfTURfSUVOX0NM Uik7DQo+ID4gKw0KPiA+ICsJaGRtaV93cml0ZWwoZHdfZGV2LCB+MHgwLCBEV19IRE1JX1BERUNf SUVOX0NMUik7DQo+ID4gKwloZG1pX3dyaXRlbChkd19kZXYsIH4weDAsIERXX0hETUlfQVVEX0ZJ Rk9fSUVOX0NMUik7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIGR3X2hkbWlfY2xl YXJfaW50cyhzdHJ1Y3QgZHdfaGRtaV9kZXYgKmR3X2RldikNCj4gPiArew0KPiA+ICsJaGRtaV93 cml0ZWwoZHdfZGV2LCB+MHgwLCBEV19IRE1JX0lDTFIpOw0KPiA+ICsJaGRtaV93cml0ZWwoZHdf ZGV2LCB+MHgwLCBEV19IRE1JX01EX0lDTFIpOw0KPiA+ICsNCj4gPiArCWhkbWlfd3JpdGVsKGR3 X2RldiwgfjB4MCwgRFdfSERNSV9QREVDX0lDTFIpOw0KPiA+ICsJaGRtaV93cml0ZWwoZHdfZGV2 LCB+MHgwLCBEV19IRE1JX0FVRF9GSUZPX0lDTFIpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0 aWMgdTMyIGR3X2hkbWlfZ2V0X2ludF92YWwoc3RydWN0IGR3X2hkbWlfZGV2ICpkd19kZXYsIHUz MiBpc3RzLCB1MzIgaWVuKQ0KPiA+ICt7DQo+ID4gKwlyZXR1cm4gaGRtaV9yZWFkbChkd19kZXYs IGlzdHMpICYgaGRtaV9yZWFkbChkd19kZXYsIGllbik7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0 YXRpYyB1OCBkd19oZG1pX2dldF9jdXJyX3ZpYyhzdHJ1Y3QgZHdfaGRtaV9kZXYgKmR3X2Rldiwg Ym9vbCAqaXNfaGRtaV92aWMpDQo+ID4gK3sNCj4gPiArCXU4IHZpYyA9IGhkbWlfbWFza19yZWFk bChkd19kZXYsIERXX0hETUlfUERFQ19BVklfUEIsDQo+ID4gKwkJCQkgRFdfSERNSV9WSURfSURF TlRfQ09ERV9PRkZTRVQsDQo+ID4gKwkJCQkgRFdfSERNSV9WSURfSURFTlRfQ09ERV9NQVNLKTsN Cj4gPiArDQo+ID4gKwlpZiAoIXZpYykgew0KPiA+ICsJCXZpYyA9IGhkbWlfbWFza19yZWFkbChk d19kZXYsIERXX0hETUlfUERFQ19WU0lfUEFZTE9BRDAsDQo+ID4gKwkJCQkgICAgICBEV19IRE1J X1ZTSV9QQVlMT0FEMV9IRE1JX1ZJQ19PRkZTRVQsDQo+ID4gKwkJCQkgICAgICBEV19IRE1JX1ZT SV9QQVlMT0FEMV9IRE1JX1ZJQ19NQVNLKTsNCj4gPiArCQlpZiAoaXNfaGRtaV92aWMpDQo+ID4g KwkJCSppc19oZG1pX3ZpYyA9IHRydWU7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCWlmIChpc19o ZG1pX3ZpYykNCj4gPiArCQkJKmlzX2hkbWlfdmljID0gZmFsc2U7DQo+ID4gKwl9DQo+ID4gKw0K PiA+ICsJcmV0dXJuIHZpYzsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHUzMiBkd19oZG1p X2dldF9ldmFsdGltZShzdHJ1Y3QgZHdfaGRtaV9kZXYgKmR3X2RldikNCj4gPiArew0KPiA+ICsJ cmV0dXJuIGhkbWlfbWFza19yZWFkbChkd19kZXYsIERXX0hETUlfQ0tNX0VWTFRNLA0KPiA+ICsJ CQkgICAgICAgRFdfSERNSV9FVkFMX1RJTUVfT0ZGU0VULA0KPiA+ICsJCQkgICAgICAgRFdfSERN SV9FVkFMX1RJTUVfTUFTSyk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB1MzIgZHdfaGRt aV9nZXRfY2xrcmF0ZShzdHJ1Y3QgZHdfaGRtaV9kZXYgKmR3X2RldikNCj4gPiArew0KPiA+ICsJ cmV0dXJuIGhkbWlfbWFza19yZWFkbChkd19kZXYsIERXX0hETUlfQ0tNX1JFU1VMVCwNCj4gPiAr CQkJICAgICAgIERXX0hETUlfQ0xLUkFURV9PRkZTRVQsDQo+ID4gKwkJCSAgICAgICBEV19IRE1J X0NMS1JBVEVfTUFTSyk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB1MzIgZHdfaGRtaV9n ZXRfY3RzKHN0cnVjdCBkd19oZG1pX2RldiAqZHdfZGV2KQ0KPiA+ICt7DQo+ID4gKwlyZXR1cm4g aGRtaV9tYXNrX3JlYWRsKGR3X2RldiwgRFdfSERNSV9QREVDX0FDUl9DVFMsDQo+ID4gKwkJCSAg ICAgICBEV19IRE1JX0NUU19ERUNPREVEX09GRlNFVCwNCj4gPiArCQkJICAgICAgIERXX0hETUlf Q1RTX0RFQ09ERURfTUFTSyk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB1MzIgZHdfaGRt aV9nZXRfbihzdHJ1Y3QgZHdfaGRtaV9kZXYgKmR3X2RldikNCj4gPiArew0KPiA+ICsJcmV0dXJu IGhkbWlfbWFza19yZWFkbChkd19kZXYsIERXX0hETUlfUERFQ19BQ1JfTiwNCj4gPiArCQkJICAg ICAgIERXX0hETUlfTl9ERUNPREVEX09GRlNFVCwNCj4gPiArCQkJICAgICAgIERXX0hETUlfTl9E RUNPREVEX01BU0spOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdTMyIGR3X2hkbWlfZ2V0 X3RtZHNfY2xrKHN0cnVjdCBkd19oZG1pX2RldiAqZHdfZGV2KQ0KPiA+ICt7DQo+ID4gKwl1MzIg cmF0ZSA9IGR3X2hkbWlfZ2V0X2Nsa3JhdGUoZHdfZGV2KTsNCj4gPiArCXU2NCB0bXAgPSAodTY0 KXJhdGUgKiAodTY0KWR3X2Rldi0+Y29uZmlnLT5pcmVmX2NsayAqIDEwMDAwMDA7DQo+ID4gKwl1 MzIgZXZhbHRpbWUgPSBkd19oZG1pX2dldF9ldmFsdGltZShkd19kZXYpOw0KPiA+ICsNCj4gPiAr CWRvX2Rpdih0bXAsIGV2YWx0aW1lKTsNCj4gPiArCXJldHVybiB0bXA7DQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyB1MzIgZHdfaGRtaV9nZXRfY29sb3JkZXB0aChzdHJ1Y3QgZHdfaGRtaV9k ZXYgKmR3X2RldikNCj4gPiArew0KPiA+ICsJdTMyIGRjbSA9IGhkbWlfbWFza19yZWFkbChkd19k ZXYsIERXX0hETUlfU1RTLA0KPiA+ICsJCQkJICBEV19IRE1JX0RDTV9DVVJSRU5UX01PREVfT0ZG U0VULA0KPiA+ICsJCQkJICBEV19IRE1JX0RDTV9DVVJSRU5UX01PREVfTUFTSyk7DQo+ID4gKw0K PiA+ICsJc3dpdGNoIChkY20pIHsNCj4gPiArCWNhc2UgMHg0Og0KPiA+ICsJCXJldHVybiAyNDsN Cj4gPiArCWNhc2UgMHg1Og0KPiA+ICsJCXJldHVybiAzMDsNCj4gPiArCWNhc2UgMHg2Og0KPiA+ ICsJCXJldHVybiAzNjsNCj4gPiArCWNhc2UgMHg3Og0KPiA+ICsJCXJldHVybiA0ODsNCj4gPiAr CWRlZmF1bHQ6DQo+ID4gKwkJcmV0dXJuIDI0Ow0KPiA+ICsJfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtzdGF0aWMgdTY0IGR3X2hkbWlfZ2V0X3BpeGVsY2xrKHN0cnVjdCBkd19oZG1pX2RldiAqZHdf ZGV2KQ0KPiA+ICt7DQo+ID4gKwl1MzIgdG1kc19jbGsgPSBkd19oZG1pX2dldF90bWRzX2Nsayhk d19kZXYpOw0KPiA+ICsJdTMyIGNkID0gZHdfaGRtaV9nZXRfY29sb3JkZXB0aChkd19kZXYpOw0K PiA+ICsJdTMyIHBpeF9jbGsgPSAwOw0KPiA+ICsNCj4gPiArCXN3aXRjaCAoY2QpIHsNCj4gPiAr CWNhc2UgMjQ6DQo+ID4gKwkJcGl4X2NsayA9IHRtZHNfY2xrOw0KPiA+ICsJCWJyZWFrOw0KPiA+ ICsJY2FzZSAzMDoNCj4gPiArCQlwaXhfY2xrID0gKHRtZHNfY2xrICogMTAwKSAvIDEyNTsNCj4g PiArCQlicmVhazsNCj4gPiArCWNhc2UgMzY6DQo+ID4gKwkJcGl4X2NsayA9ICh0bWRzX2NsayAq IDEwKSAvIDE1Ow0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSA0ODoNCj4gPiArCQlwaXhfY2xr ID0gdG1kc19jbGsgLyAyOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJZGVmYXVsdDoNCj4gPiArCQli cmVhazsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gcGl4X2NsazsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIHZvaWQgZHdfaGRtaV9zZXRfaW5wdXQoc3RydWN0IGR3X2hkbWlfZGV2 ICpkd19kZXYsIHUzMiBpbnB1dCkNCj4gPiArew0KPiA+ICsJaGRtaV9tYXNrX3dyaXRlbChkd19k ZXYsIGlucHV0LCBEV19IRE1JX1BIWV9DVFJMLA0KPiA+ICsJCQkgRFdfSERNSV9QT1JUU0VMRUNU X09GRlNFVCwNCj4gPiArCQkJIERXX0hETUlfUE9SVFNFTEVDVF9NQVNLKTsNCj4gPiArCWR3X2Rl di0+Y29uZmlndXJlZF9pbnB1dCA9IGlucHV0Ow0KPiA+ICsJZHdfZGV2LT5zZWxlY3RlZF9pbnB1 dCA9IGlucHV0Ow0KPiA+ICsJdjRsMl9zdWJkZXZfbm90aWZ5KCZkd19kZXYtPnNkLCBEV19IRE1J X05PVElGWV9JTlBVVF9DSEFOR0VELA0KPiA+ICsJCQkgICAmZHdfZGV2LT5jb25maWd1cmVkX2lu cHV0KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgZHdfaGRtaV9lbmFibGVfaHBk KHN0cnVjdCBkd19oZG1pX2RldiAqZHdfZGV2LCB1MzIgaW5wdXRfbWFzaykNCj4gPiArew0KPiA+ ICsJaGRtaV9tYXNrX3dyaXRlbChkd19kZXYsIGlucHV0X21hc2ssIERXX0hETUlfU0VUVVBfQ1RS TCwNCj4gPiArCQkJIERXX0hETUlfSE9UX1BMVUdfREVURUNUX0lOUFVUX1hfT0ZGU0VULA0KPiA+ ICsJCQkgRFdfSERNSV9IT1RfUExVR19ERVRFQ1RfSU5QVVRfWF9NQVNLKTsNCj4gPiArCWhkbWlf bWFza193cml0ZWwoZHdfZGV2LCAweDEsIERXX0hETUlfU0VUVVBfQ1RSTCwNCj4gPiArCQkJIERX X0hETUlfSE9UX1BMVUdfREVURUNUX09GRlNFVCwNCj4gPiArCQkJIERXX0hETUlfSE9UX1BMVUdf REVURUNUX01BU0spOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBkd19oZG1pX2Rp c2FibGVfaHBkKHN0cnVjdCBkd19oZG1pX2RldiAqZHdfZGV2KQ0KPiA+ICt7DQo+ID4gKwloZG1p X21hc2tfd3JpdGVsKGR3X2RldiwgMHgwLCBEV19IRE1JX1NFVFVQX0NUUkwsDQo+ID4gKwkJCSBE V19IRE1JX0hPVF9QTFVHX0RFVEVDVF9JTlBVVF9YX09GRlNFVCwNCj4gPiArCQkJIERXX0hETUlf SE9UX1BMVUdfREVURUNUX0lOUFVUX1hfTUFTSyk7DQo+ID4gKwloZG1pX21hc2tfd3JpdGVsKGR3 X2RldiwgMHgwLCBEV19IRE1JX1NFVFVQX0NUUkwsDQo+ID4gKwkJCSBEV19IRE1JX0hPVF9QTFVH X0RFVEVDVF9PRkZTRVQsDQo+ID4gKwkJCSBEV19IRE1JX0hPVF9QTFVHX0RFVEVDVF9NQVNLKTsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgZHdfaGRtaV9lbmFibGVfc2NkYyhzdHJ1 Y3QgZHdfaGRtaV9kZXYgKmR3X2RldikNCj4gPiArew0KPiA+ICsJaGRtaV9tYXNrX3dyaXRlbChk d19kZXYsIDB4MSwgRFdfSERNSV9TQ0RDX0NPTkZJRywNCj4gPiArCQkJIERXX0hETUlfUE9XRVJQ Uk9WSURFRF9PRkZTRVQsDQo+ID4gKwkJCSBEV19IRE1JX1BPV0VSUFJPVklERURfTUFTSyk7DQo+ ID4gKwloZG1pX21hc2tfd3JpdGVsKGR3X2RldiwgMHgxLCBEV19IRE1JX0lFTl9TRVQsDQo+ID4g KwkJCSBEV19IRE1JX1NDRENUTURTQ0ZHQ0hBTkdFX0lTVFNfT0ZGU0VULA0KPiA+ICsJCQkgRFdf SERNSV9TQ0RDVE1EU0NGR0NIQU5HRV9JU1RTX01BU0spOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz dGF0aWMgdm9pZCBkd19oZG1pX2Rpc2FibGVfc2NkYyhzdHJ1Y3QgZHdfaGRtaV9kZXYgKmR3X2Rl dikNCj4gPiArew0KPiA+ICsJaGRtaV9tYXNrX3dyaXRlbChkd19kZXYsIDB4MCwgRFdfSERNSV9T Q0RDX0NPTkZJRywNCj4gPiArCQkJIERXX0hETUlfUE9XRVJQUk9WSURFRF9PRkZTRVQsDQo+ID4g KwkJCSBEV19IRE1JX1BPV0VSUFJPVklERURfTUFTSyk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0 YXRpYyB2b2lkIGR3X2hkbWlfaGFuZGxlX2F1ZGlvX211dGVfY2hhbmdlKHN0cnVjdCBkd19oZG1p X2RldiAqZHdfZGV2KTsNCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIGR3X2hkbWlfZW5hYmxlX2hk bWlfZG9tYWluKHN0cnVjdCBkd19oZG1pX2RldiAqZHdfZGV2LCBib29sIGVuYWJsZSkNCj4gPiAr ew0KPiA+ICsJaGRtaV9tYXNrX3dyaXRlbChkd19kZXYsIGVuYWJsZSwgRFdfSERNSV9ETUlfRElT QUJMRV9JRiwNCj4gPiArCQkJIERXX0hETUlfSERNSV9FTkFCTEVfT0ZGU0VULA0KPiA+ICsJCQkg RFdfSERNSV9IRE1JX0VOQUJMRV9NQVNLKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlu dCBkd19oZG1pX2luaXRpYWxfY29uZmlnKHN0cnVjdCBkd19oZG1pX2RldiAqZHdfZGV2LCB1MzIg aW5wdXQpOw0KPiA+ICsNCj4gPiArc3RhdGljIGludCBkd19oZG1pX2NvbmZpZyhzdHJ1Y3QgZHdf aGRtaV9kZXYgKmR3X2RldiwgdTMyIGlucHV0KQ0KPiA+ICt7DQo+ID4gKwl1MzIgaW5fc3RhdGUg PSBkd19kZXYtPnN0YXRlOw0KPiA+ICsJdTMyIGNkMSA9IDAsIGNkMiA9IDA7DQo+ID4gKwlpbnQg ZXFyZXQsIHJldCA9IDA7DQo+ID4gKw0KPiA+ICsJd2hpbGUgKDEpIHsNCj4gPiArCQkvKiBHaXZl IHVwIHNpbGVudGx5IGlmIHdlIGFyZSBmb3JjaW5nIG9mZiAqLw0KPiA+ICsJCWlmIChkd19kZXYt PmZvcmNlX29mZikgew0KPiA+ICsJCQlyZXQgPSAwOw0KPiA+ICsJCQlnb3RvIG91dDsNCj4gPiAr CQl9DQo+ID4gKwkJLyogR2l2ZSB1cCBzaWxlbnRseSBpZiBpbnB1dCBoYXMgZGlzY29ubmVjdGVk ICovDQo+ID4gKwkJaWYgKCFoYXNfc2lnbmFsKGR3X2RldiwgaW5wdXQpKSB7DQo+ID4gKwkJCXJl dCA9IDA7DQo+ID4gKwkJCWdvdG8gb3V0Ow0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJc3dpdGNo IChkd19kZXYtPnN0YXRlKSB7DQo+ID4gKwkJY2FzZSBIRE1JX1NUQVRFX1BPV0VSX09GRjoNCj4g PiArCQkJZHdfaGRtaV9kaXNhYmxlX2ludHMoZHdfZGV2KTsNCj4gPiArCQkJZHdfaGRtaV9zZXRf c3RhdGUoZHdfZGV2LCBIRE1JX1NUQVRFX1BIWV9DT05GSUcpOw0KPiA+ICsJCQlicmVhazsNCj4g PiArCQljYXNlIEhETUlfU1RBVEVfUE9XRVJfVVA6DQo+ID4gKwkJCS8qIHdoZW4gY29ubmVjdCB0 aGUgY2FibGUgKi8NCj4gPiArCQkJZHdfaGRtaV9kaXNhYmxlX2ludHMoZHdfZGV2KTsNCj4gPiAr CQkJLyogcmVzZXQgKi8NCj4gPiArCQkJaWYgKGR3X2Rldi0+aHdfcmVzZXRfb25faG90X3BsdWcp DQo+ID4gKwkJCQlkd19oZG1pX3Jlc2V0KGR3X2Rldik7DQo+ID4gKwkJCS8qIGluaXRpYWwgY29u ZmlndXJhdGlvbiAqLw0KPiA+ICsJCQlkd19oZG1pX2luaXRpYWxfY29uZmlnKGR3X2RldiwgaW5w dXQpOw0KPiA+ICsJCQlkd19oZG1pX3NldF9zdGF0ZShkd19kZXYsIEhETUlfU1RBVEVfUEhZX0NP TkZJRyk7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCWNhc2UgSERNSV9TVEFURV9QSFlfQ09ORklH Og0KPiA+ICsJCQljZDEgPSAyNDsNCj4gPiArCQkJZHdfZGV2LT5pc19oZG1pMiA9IGlzX2hkbWky KGR3X2Rldik7DQo+ID4gKwkJCWR3X2Rldi0+aXNfc2NyYW1ibGVkID0gaXNfc2NyYW1ibGVkKGR3 X2Rldik7DQo+ID4gKwkJCWR3X2hkbWlfcGh5X2NvbmZpZyhkd19kZXYsIGNkMSwgZHdfZGV2LT5p c19oZG1pMiwNCj4gPiArCQkJCQkgICBkd19kZXYtPmlzX3NjcmFtYmxlZCk7DQo+ID4gKwkJCWR3 X2hkbWlfc2V0X3N0YXRlKGR3X2RldiwgSERNSV9TVEFURV9IUEQpOw0KPiA+ICsJCQlicmVhazsN Cj4gPiArCQljYXNlIEhETUlfU1RBVEVfSFBEOg0KPiA+ICsJCQkvKiBkaXNhYmxlIEhETUkgZG9t YWluIHRvIGF2b2lkIHRoZSBEQ00gSU5UcyAqLw0KPiA+ICsJCQlkd19oZG1pX2VuYWJsZV9oZG1p X2RvbWFpbihkd19kZXYsIGZhbHNlKTsNCj4gPiArCQkJZHdfaGRtaV9lbmFibGVfc2NkYyhkd19k ZXYpOw0KPiA+ICsJCQlkd19oZG1pX2VuYWJsZV9ocGQoZHdfZGV2LCBkd19kZXYtPmlucHV0X3N0 YXQpOw0KPiA+ICsJCQlkd19oZG1pX3NldF9zdGF0ZShkd19kZXYsIEhETUlfU1RBVEVfRVFVQUxJ WkVSKTsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJY2FzZSBIRE1JX1NUQVRFX0VRVUFMSVpFUjoN Cj4gPiArCQkJaWYgKGR3X2Rldi0+cGh5X2VxX29uKSB7DQo+ID4gKwkJCQlib29sIHBoeV9lcV9m b3JjZSA9IGR3X2Rldi0+cGh5X2VxX2ZvcmNlOw0KPiA+ICsNCj4gPiArCQkJCWVxcmV0ID0gZHdf aGRtaV9waHlfZXFfaW5pdChkd19kZXYsIDUsDQo+ID4gKwkJCQkJCQkgICAgcGh5X2VxX2ZvcmNl KTsNCj4gPiArCQkJfSBlbHNlIHsNCj4gPiArCQkJCS8qIENsZWFyIGVxdWFsaXplciBlcnJvciBz dGF0dXMgaWYgbm90IG9uICovDQo+ID4gKwkJCQllcXJldCA9IDA7DQo+ID4gKwkJCX0NCj4gPiAr DQo+ID4gKwkJCXJldCA9IGR3X2hkbWlfd2FpdF9waHlfbG9ja19wb2xsKGR3X2Rldik7DQo+ID4g Kw0KPiA+ICsJCQkvKiBEbyBub3QgZm9yY2UgZXF1YWxpemVyICovDQo+ID4gKwkJCWR3X2Rldi0+ cGh5X2VxX2ZvcmNlID0gZmFsc2U7DQo+ID4gKw0KPiA+ICsJCQlpZiAocmV0IHx8IGVxcmV0KSB7 DQo+ID4gKwkJCQlpZiAocmV0IHx8IGVxcmV0ID09IC1FVElNRURPVVQpIHsNCj4gPiArCQkJCQkv KiBObyBUTURTVkFMSUQgc2lnbmFsOg0KPiA+ICsJCQkJCSAqIC0gZm9yY2UgZXF1YWxpemVyDQo+ ID4gKwkJCQkJICovDQo+ID4gKwkJCQkJZHdfZGV2LT5waHlfZXFfZm9yY2UgPSB0cnVlOw0KPiA+ ICsJCQkJfQ0KPiA+ICsJCQkJYnJlYWs7DQo+ID4gKwkJCX0NCj4gPiArDQo+ID4gKwkJCWR3X2hk bWlfc2V0X3N0YXRlKGR3X2RldiwgSERNSV9TVEFURV9EQVRBUEFUSCk7DQo+ID4gKwkJCWJyZWFr Ow0KPiA+ICsJCWNhc2UgSERNSV9TVEFURV9EQVRBUEFUSDoNCj4gPiArCQkJZHdfaGRtaV9yZXNl dF9kYXRhcGF0aChkd19kZXYpOw0KPiA+ICsJCQkvKiByZWVuYWJsZSBIRE1JIGRvbWFpbiAqLw0K PiA+ICsJCQlkd19oZG1pX2VuYWJsZV9oZG1pX2RvbWFpbihkd19kZXYsIHRydWUpOw0KPiA+ICsJ CQlkd19oZG1pX3NldF9zdGF0ZShkd19kZXYsIEhETUlfU1RBVEVfVklERU9fVU5TVEFCTEUpOw0K PiA+ICsJCQlicmVhazsNCj4gPiArCQljYXNlIEhETUlfU1RBVEVfVklERU9fVU5TVEFCTEU6DQo+ ID4gKwkJCWR3X2hkbWlfd2FpdF92aWRlb19zdGFibGUoZHdfZGV2KTsNCj4gPiArCQkJZHdfaGRt aV9zZXRfc3RhdGUoZHdfZGV2LCBIRE1JX1NUQVRFX0FVRElPKTsNCj4gPiArCQkJYnJlYWs7DQo+ ID4gKwkJY2FzZSBIRE1JX1NUQVRFX0FVRElPOg0KPiA+ICsJCQlyZXQgPSBkd19oZG1pX2NvbmZp Z19hdWRpbyhkd19kZXYpOw0KPiA+ICsJCQlkd19oZG1pX2NvbmZpZ19wYWNrZXQoZHdfZGV2KTsN Cj4gPiArDQo+ID4gKwkJCWlmIChpbl9zdGF0ZSAhPSBIRE1JX1NUQVRFX0VRVUFMSVpFUikNCj4g PiArCQkJCWR3X2hkbWlfY2xlYXJfaW50cyhkd19kZXYpOw0KPiA+ICsNCj4gPiArCQkJZHdfaGRt aV9nZXRfaW5mb2ZyYW1lcyhkd19kZXYpOw0KPiA+ICsNCj4gPiArCQkJLyogY2hlY2sgaWYgdGhl cmUgd2FzIGRlZXAgY29sb3IgY2hhbmdlcyAqLw0KPiA+ICsJCQlpZiAoY2QxKSB7DQo+ID4gKwkJ CQljZDIgPSBkd19oZG1pX2dldF9jb2xvcmRlcHRoKGR3X2Rldik7DQo+ID4gKwkJCQlpZiAoY2Qx ICE9IGNkMikNCj4gPiArCQkJCQlkd19oZG1pX3BoeV9zZXRfY29sb3JfZGVwdGgoZHdfZGV2LA0K PiA+ICsJCQkJCQkJCSAgICBjZDIpOw0KPiA+ICsJCQl9DQo+ID4gKw0KPiA+ICsJCQkvKiByZXNl dCBDRUEgdmlkZW8gKi8NCj4gPiArCQkJZHdfaGRtaV9yZXNldF9jZWF2aWQoZHdfZGV2KTsNCj4g PiArDQo+ID4gKwkJCWR3X2hkbWlfZW5hYmxlX2ludHMoZHdfZGV2KTsNCj4gPiArCQkJZHdfaGRt aV9zZXRfc3RhdGUoZHdfZGV2LCBIRE1JX1NUQVRFX1BPV0VSX09OKTsNCj4gPiArCQkJYnJlYWs7 DQo+ID4gKwkJY2FzZSBIRE1JX1NUQVRFX1BPV0VSX09OOg0KPiA+ICsJCQlicmVhazsNCj4gPiAr CQlkZWZhdWx0Og0KPiA+ICsJCQlkZXZfZXJyKGR3X2Rldi0+ZGV2LCAiJXMgY2FsbGVkIHdpdGgg c3RhdGUgKCVkKVxuIiwNCj4gPiArCQkJCV9fZnVuY19fLCBkd19kZXYtPnN0YXRlKTsNCj4gPiAr CQkJcmV0ID0gLUVJTlZBTDsNCj4gPiArCQkJZ290byBvdXQ7DQo+ID4gKwkJfQ0KPiA+ICsNCj4g PiArCQlpZiAoZHdfZGV2LT5zdGF0ZSA9PSBIRE1JX1NUQVRFX1BPV0VSX09OKSB7DQo+ID4gKwkJ CWRldl9pbmZvKGR3X2Rldi0+ZGV2LCAiSERNSS1SWCBjb25maWd1cmVkXG4iKTsNCj4gPiArCQkJ ZHdfaGRtaV9ldmVudF9zb3VyY2VfY2hhbmdlKGR3X2Rldik7DQo+ID4gKwkJCWR3X2hkbWlfaGFu ZGxlX2F1ZGlvX211dGVfY2hhbmdlKGR3X2Rldik7DQo+ID4gKwkJCXJldHVybiAwOw0KPiA+ICsJ CX0NCj4gPiArCX0NCj4gPiArDQo+ID4gK291dDoNCj4gPiArCWR3X2hkbWlfc2V0X3N0YXRlKGR3 X2RldiwgSERNSV9TVEFURV9QT1dFUl9PRkYpOw0KPiA+ICsJdjRsMl9zdWJkZXZfbm90aWZ5KCZk d19kZXYtPnNkLCBEV19IRE1JX05PVElGWV9JU19PRkYsIE5VTEwpOw0KPiA+ICsJcmV0dXJuIHJl dDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBfX2R3X2hkbWlfcG93ZXJfb24oc3Ry dWN0IGR3X2hkbWlfZGV2ICpkd19kZXYsIHUzMiBpbnB1dCkNCj4gPiArew0KPiA+ICsJdW5zaWdu ZWQgbG9uZyBmbGFnczsNCj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJcmV0ID0gZHdfaGRt aV9jb25maWcoZHdfZGV2LCBpbnB1dCk7DQo+ID4gKw0KPiA+ICsJc3Bpbl9sb2NrX2lycXNhdmUo JmR3X2Rldi0+bG9jaywgZmxhZ3MpOw0KPiA+ICsJZHdfZGV2LT5wZW5kaW5nX2NvbmZpZyA9IGZh bHNlOw0KPiA+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHdfZGV2LT5sb2NrLCBmbGFncyk7 DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZv aWQgZHdfaGRtaV93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0KPiA+ICt7 DQo+ID4gKwlzdHJ1Y3QgZHdfaGRtaV9kZXYgKmR3X2RldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBz dHJ1Y3QgZHdfaGRtaV9kZXYsDQo+ID4gKwkJCQkJCSAgd29yayk7DQo+ID4gKw0KPiA+ICsJX19k d19oZG1pX3Bvd2VyX29uKGR3X2RldiwgZHdfZGV2LT5jb25maWd1cmVkX2lucHV0KTsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBkd19oZG1pX3Bvd2VyX29uKHN0cnVjdCBkd19oZG1p X2RldiAqZHdfZGV2LCB1MzIgaW5wdXQpDQo+ID4gK3sNCj4gPiArCXVuc2lnbmVkIGxvbmcgZmxh Z3M7DQo+ID4gKw0KPiA+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmR3X2Rldi0+bG9jaywgZmxhZ3Mp Ow0KPiA+ICsJaWYgKGR3X2Rldi0+cGVuZGluZ19jb25maWcpIHsNCj4gPiArCQlzcGluX3VubG9j a19pcnFyZXN0b3JlKCZkd19kZXYtPmxvY2ssIGZsYWdzKTsNCj4gPiArCQlyZXR1cm4gMDsNCj4g PiArCX0NCj4gPiArDQo+ID4gKwlJTklUX1dPUksoJmR3X2Rldi0+d29yaywgZHdfaGRtaV93b3Jr X2hhbmRsZXIpOw0KPiA+ICsJZHdfZGV2LT5jb25maWd1cmVkX2lucHV0ID0gaW5wdXQ7DQo+ID4g Kwlkd19kZXYtPnBlbmRpbmdfY29uZmlnID0gdHJ1ZTsNCj4gPiArCXF1ZXVlX3dvcmsoZHdfZGV2 LT53cSwgJmR3X2Rldi0+d29yayk7DQo+ID4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkd19k ZXYtPmxvY2ssIGZsYWdzKTsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz dGF0aWMgdm9pZCBkd19oZG1pX3Bvd2VyX29mZihzdHJ1Y3QgZHdfaGRtaV9kZXYgKmR3X2RldikN Cj4gPiArew0KPiA+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsNCj4gPiArDQo+ID4gKwl2NGwyX3N1 YmRldl9ub3RpZnkoJmR3X2Rldi0+c2QsIERXX0hETUlfTk9USUZZX0lTX09GRiwgTlVMTCk7DQo+ ID4gKw0KPiA+ICsJZHdfZGV2LT5mb3JjZV9vZmYgPSB0cnVlOw0KPiA+ICsJZmx1c2hfd29ya3F1 ZXVlKGR3X2Rldi0+d3EpOw0KPiA+ICsJZHdfZGV2LT5mb3JjZV9vZmYgPSBmYWxzZTsNCj4gPiAr DQo+ID4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmZHdfZGV2LT5sb2NrLCBmbGFncyk7DQo+ID4gKwlk d19kZXYtPnBlbmRpbmdfY29uZmlnID0gZmFsc2U7DQo+ID4gKwlkd19kZXYtPnN0YXRlID0gSERN SV9TVEFURV9QT1dFUl9PRkY7DQo+ID4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkd19kZXYt PmxvY2ssIGZsYWdzKTsNCj4gPiArDQo+ID4gKwkvKiBSZXNldCB2YXJpYWJsZXMgKi8NCj4gPiAr CWR3X2Rldi0+cGh5X2VxX2ZvcmNlID0gdHJ1ZTsNCj4gPiArCWR3X2Rldi0+YXVkaW9fc2YgPSAw Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBkd19oZG1pX2ZvcmNlX29mZihzdHJ1 Y3QgZHdfaGRtaV9kZXYgKmR3X2RldikNCj4gPiArew0KPiA+ICsJdW5zaWduZWQgbG9uZyBmbGFn czsNCj4gPiArDQo+ID4gKwl2NGwyX3N1YmRldl9ub3RpZnkoJmR3X2Rldi0+c2QsIERXX0hETUlf Tk9USUZZX0lTX09GRiwgTlVMTCk7DQo+ID4gKw0KPiA+ICsJZHdfZGV2LT5mb3JjZV9vZmYgPSB0 cnVlOw0KPiA+ICsJZmx1c2hfd29ya3F1ZXVlKGR3X2Rldi0+d3EpOw0KPiA+ICsJZHdfZGV2LT5m b3JjZV9vZmYgPSBmYWxzZTsNCj4gPiArDQo+ID4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmZHdfZGV2 LT5sb2NrLCBmbGFncyk7DQo+ID4gKwlkd19kZXYtPnBlbmRpbmdfY29uZmlnID0gZmFsc2U7DQo+ ID4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkd19kZXYtPmxvY2ssIGZsYWdzKTsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgZHdfaGRtaV9wb3dlcl91cChzdHJ1Y3QgZHdfaGRt aV9kZXYgKmR3X2RldikNCj4gPiArew0KPiA+ICsJZHdfaGRtaV9mb3JjZV9vZmYoZHdfZGV2KTsN Cj4gPiArCWR3X2hkbWlfc2V0X3N0YXRlKGR3X2RldiwgSERNSV9TVEFURV9QT1dFUl9VUCk7DQo+ ID4gKw0KPiA+ICsJLyogUmVzZXQgdmFyaWFibGVzICovDQo+ID4gKwlkd19kZXYtPnBoeV9lcV9m b3JjZSA9IHRydWU7DQo+ID4gKwlkd19kZXYtPmF1ZGlvX3NmID0gMDsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArc3RhdGljIHZvaWQgZHdfaGRtaV9jb250cm9sbGVyX3Bvd2VyX29mZihzdHJ1Y3QgZHdf aGRtaV9kZXYgKmR3X2RldikNCj4gPiArew0KPiA+ICsJZHdfaGRtaV9mb3JjZV9vZmYoZHdfZGV2 KTsNCj4gPiArCWR3X2hkbWlfc2V0X3N0YXRlKGR3X2RldiwgSERNSV9TVEFURV9FUVVBTElaRVIp Ow0KPiA+ICsNCj4gPiArCWR3X2Rldi0+cGh5X2VxX2ZvcmNlID0gZmFsc2U7DQo+ID4gKwlkd19k ZXYtPmF1ZGlvX3NmID0gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBkd19oZG1p X3F1ZXJ5X2R2X3RpbWluZ3Moc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwNCj4gPiArCQkJCSAgICBz dHJ1Y3QgdjRsMl9kdl90aW1pbmdzICp0aW1pbmdzKTsNCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lk IGR3X2hkbWlfaGFuZGxlX3ZpZGVvX2NoYW5nZShzdHJ1Y3QgZHdfaGRtaV9kZXYgKmR3X2RldikN Cj4gPiArew0KPiA+ICsJc3RydWN0IHY0bDJfZHZfdGltaW5ncyB0aW1pbmdzOw0KPiA+ICsNCj4g PiArCWlmIChpc19vbihkd19kZXYpKSB7DQo+ID4gKwkJZGV2X2RiZyhkd19kZXYtPmRldiwgIltW SURFT10gdmlkZW8gY2hhbmdlIGludGVycnVwdFxuIik7DQo+ID4gKwkJZHdfaGRtaV9xdWVyeV9k dl90aW1pbmdzKCZkd19kZXYtPnNkLCAmdGltaW5ncyk7DQo+ID4gKwkJZHdfaGRtaV9jb250cm9s bGVyX3Bvd2VyX29mZihkd19kZXYpOw0KPiA+ICsJCWR3X2hkbWlfcG93ZXJfb24oZHdfZGV2LCBk d19kZXYtPmNvbmZpZ3VyZWRfaW5wdXQpOw0KPiA+ICsJfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz dGF0aWMgdTMyIGR3X2hkbWlfcm91bmRfZnJlcShpbnQgZnJlcSkNCj4gPiArew0KPiA+ICsJc3Rh dGljIGNvbnN0IHUzMiBiYXNlX2ZyZXFzW10gPSB7IDMyMDAwLCA0NDEwMCwgNDgwMDAsIDAgfTsN Cj4gPiArCXVuc2lnbmVkIGludCBpOw0KPiA+ICsNCj4gPiArCWZvciAoaSA9IDA7IGJhc2VfZnJl cXNbaV07IGkrKykgew0KPiA+ICsJCWlmICgoZnJlcSA8PSAoYmFzZV9mcmVxc1tpXSArIERXX0hE TUlfQVVESU9fRlJFUV9SQU5HRSkpICYmDQo+ID4gKwkJICAgIChmcmVxID49IChiYXNlX2ZyZXFz W2ldIC0gRFdfSERNSV9BVURJT19GUkVRX1JBTkdFKSkpIHsNCj4gPiArCQkJcmV0dXJuIGJhc2Vf ZnJlcXNbaV07DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdW5zaWduZWQgaW50IGR3X2hkbWlfZ2V0X3NhbXBsZV9m cmVxKHN0cnVjdCBkd19oZG1pX2RldiAqZHdfZGV2KQ0KPiA+ICt7DQo+ID4gKwl1NjQgdG1wOw0K PiA+ICsJdTMyIGN0czsNCj4gPiArCXUzMiBzZjsNCj4gPiArCXUzMiBuOw0KPiA+ICsNCj4gPiAr CW4gPSBkd19oZG1pX2dldF9uKGR3X2Rldik7DQo+ID4gKwljdHMgPSBkd19oZG1pX2dldF9jdHMo ZHdfZGV2KTsNCj4gPiArDQo+ID4gKwlpZiAoIW4gfHwgIWN0cykgew0KPiA+ICsJCWRldl9kYmco ZHdfZGV2LT5kZXYsICIlczogY3RzOiAlZCwgbjogJWRcbiIsIF9fZnVuY19fLCBjdHMsIG4pOw0K PiA+ICsJCXJldHVybiAwOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWRldl9kYmcoZHdfZGV2LT5k ZXYsICIlczogdG1kc19jbGs6ICVkXG4iLA0KPiA+ICsJCV9fZnVuY19fLCBkd19oZG1pX2dldF90 bWRzX2Nsayhkd19kZXYpKTsNCj4gPiArDQo+ID4gKwkvKiByZWdlbmVyYXRlIHRoZSBhdWRpbyBj bG9jayBmcm9tIHRtZHMgY2xvY2sgKi8NCj4gPiArCXRtcCA9ICh1NjQpZHdfaGRtaV9nZXRfdG1k c19jbGsoZHdfZGV2KSAqICh1NjQpbjsNCj4gPiArCWRvX2Rpdih0bXAsIGN0cyk7DQo+ID4gKwlk b19kaXYodG1wLCAxMjgpOw0KPiA+ICsJc2YgPSB0bXA7DQo+ID4gKw0KPiA+ICsJZGV2X2RiZyhk d19kZXYtPmRldiwgIiVzOiBzZjogJWRcbiIsIF9fZnVuY19fLCBzZik7DQo+ID4gKwlzZiA9IGR3 X2hkbWlfcm91bmRfZnJlcShzZik7DQo+ID4gKwlkZXZfZGJnKGR3X2Rldi0+ZGV2LCAiJXM6IHNm KHJvdW5kKTogJWRcbiIsIF9fZnVuY19fLCBzZik7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHNmOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBkd19oZG1pX2hhbmRsZV9hdWRpb19tdXRl X2NoYW5nZShzdHJ1Y3QgZHdfaGRtaV9kZXYgKmR3X2RldikNCj4gPiArew0KPiA+ICsJdW5zaWdu ZWQgbG9uZyBmbGFnczsNCj4gPiArCXVuc2lnbmVkIGludCBzZjsNCj4gPiArDQo+ID4gKwlzcGlu X2xvY2tfaXJxc2F2ZSgmZHdfZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7DQo+ID4gKwlzZiA9IGR3 X2hkbWlfZ2V0X3NhbXBsZV9mcmVxKGR3X2Rldik7DQo+ID4gKwl2NGwyX3N1YmRldl9ub3RpZnko JmR3X2Rldi0+c2QsIERXX0hETUlfTk9USUZZX0FVRElPX0NIQU5HRUQsICZzZik7DQo+ID4gKwlk d19kZXYtPmF1ZGlvX3NmID0gc2Y7DQo+ID4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkd19k ZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQg ZHdfaGRtaV9oYW5kbGVfYXVkaW9fY2hhbmdlKHN0cnVjdCBkd19oZG1pX2RldiAqZHdfZGV2LA0K PiA+ICsJCQkJCXUzMiBhZmlmX3N0YXQsIHUzMiBwZGVjX3N0YXQpDQo+ID4gK3sNCj4gPiArCWJv b2wgcmVzdGFydCA9IHRydWU7DQo+ID4gKw0KPiA+ICsJaWYgKHBkZWNfc3RhdCAmIERXX0hETUlf R0NQX0FWX01VVEVfQ0hHX0lTVFMpIHsNCj4gPiArCQlkZXZfZGJnKGR3X2Rldi0+ZGV2LCAiW2lu dGVycnVwdDphdWRpb10gQVYgTXV0ZSBjaGFuZ2VcbiIpOw0KPiA+ICsJCWR3X2hkbWlfaGFuZGxl X2F1ZGlvX211dGVfY2hhbmdlKGR3X2Rldik7DQo+ID4gKwkJcmVzdGFydCA9IGZhbHNlOw0KPiA+ ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChwZGVjX3N0YXQgJiBEV19IRE1JX0FVRF9UWVBFX0NIR19J U1RTKSB7DQo+ID4gKwkJZGV2X2RiZyhkd19kZXYtPmRldiwgIltpbnRlcnJ1cHQ6YXVkaW9dIHR5 cGUgY2hhbmdlXG4iKTsNCj4gPiArCQlyZXN0YXJ0ID0gdHJ1ZTsNCj4gPiArCX0NCj4gPiArCWlm IChwZGVjX3N0YXQgJiBEV19IRE1JX0FJRl9DS1NfQ0hHX0lTVFMpIHsNCj4gPiArCQlkZXZfZGJn KGR3X2Rldi0+ZGV2LCAiW2ludGVycnVwdDphdWRpb10gYWlmIGNoYW5nZVxuIik7DQo+ID4gKwkJ cmVzdGFydCA9IHRydWU7DQo+ID4gKwl9DQo+ID4gKwlpZiAocGRlY19zdGF0ICYgRFdfSERNSV9B Q1JfTl9DSEdfSVNUUykgew0KPiA+ICsJCWRldl9kYmcoZHdfZGV2LT5kZXYsICJbaW50ZXJydXB0 OmF1ZGlvXSBOIGNoYW5nZVxuIik7DQo+ID4gKwkJcmVzdGFydCA9IHRydWU7DQo+ID4gKwl9DQo+ ID4gKwlpZiAocGRlY19zdGF0ICYgRFdfSERNSV9BQ1JfQ1RTX0NIR19JU1RTKSB7DQo+ID4gKwkJ ZGV2X2RiZyhkd19kZXYtPmRldiwgIltpbnRlcnJ1cHQ6YXVkaW9dIENUUyBjaGFuZ2VcbiIpOw0K PiA+ICsJCXJlc3RhcnQgPSB0cnVlOw0KPiA+ICsJfQ0KPiA+ICsJaWYgKGFmaWZfc3RhdCAmIERX X0hETUlfQUZJRl9VTkRFUkZMX0lTVFMpIHsNCj4gPiArCQlkZXZfZGJnKGR3X2Rldi0+ZGV2LCAi W2ludGVycnVwdDphdWRpb10gZmlmbyB1bmRlcmZsb3dcbiIpOw0KPiA+ICsJCXJlc3RhcnQgPSB0 cnVlOw0KPiA+ICsJfQ0KPiA+ICsJaWYgKGFmaWZfc3RhdCAmIERXX0hETUlfQUZJRl9PVkVSRkxf SVNUUykgew0KPiA+ICsJCWRldl9kYmcoZHdfZGV2LT5kZXYsICJbaW50ZXJydXB0OmF1ZGlvXSBm aWZvIG92ZXJmbG93XG4iKTsNCj4gPiArCQlyZXN0YXJ0ID0gdHJ1ZTsNCj4gPiArCX0NCj4gPiAr CWlmIChhZmlmX3N0YXQgJiBEV19IRE1JX0FGSUZfVEhTX1BBU1NfSVNUUykgew0KPiA+ICsJCWRl dl9kYmcoZHdfZGV2LT5kZXYsICJbaW50ZXJydXB0OmF1ZGlvXSBUUkggUGFzc1xuIik7DQo+ID4g KwkJZHdfaGRtaV9oYW5kbGVfYXVkaW9fbXV0ZV9jaGFuZ2UoZHdfZGV2KTsNCj4gPiArCQlyZXN0 YXJ0ID0gZmFsc2U7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKHJlc3RhcnQpIHsNCj4gPiAr CQlkd19oZG1pX2hhbmRsZV9hdWRpb19tdXRlX2NoYW5nZShkd19kZXYpOw0KPiA+ICsJCWR3X2hk bWlfd2FpdF9hdWRpb19sb2NrX3BvbGwoZHdfZGV2KTsNCj4gPiArCQlkd19oZG1pX3Jlc2V0X2F1 ZGlvKGR3X2Rldik7DQo+ID4gKwkJZHdfaGRtaV9yZXN0YXJ0X2F1ZGlvX2ZpZm8oZHdfZGV2KTsN Cj4gPiArCX0NCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlycXJldHVybl90IGR3X2hkbWlf aXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2RhdGEpDQo+ID4gK3sNCj4gPiArCXN0cnVj dCBkd19oZG1pX2RldiAqZHdfZGV2ID0gZGV2X2RhdGE7DQo+ID4gKwl1MzIgaGRtaV9pc3RzID0g ZHdfaGRtaV9nZXRfaW50X3ZhbChkd19kZXYsIERXX0hETUlfSVNUUywgRFdfSERNSV9JRU4pOw0K PiA+ICsJdTMyIG1kX2lzdHMgPSBkd19oZG1pX2dldF9pbnRfdmFsKGR3X2RldiwgRFdfSERNSV9N RF9JU1RTLA0KPiA+ICsJCQkJCSAgRFdfSERNSV9NRF9JRU4pOw0KPiA+ICsJdTMyIHBkZWNfaXN0 cyA9IGR3X2hkbWlfZ2V0X2ludF92YWwoZHdfZGV2LCBEV19IRE1JX1BERUNfSVNUUywNCj4gPiAr CQkJCQkgICAgRFdfSERNSV9QREVDX0lFTik7DQo+ID4gKwl1MzIgYWZpZl9pc3RzID0gZHdfaGRt aV9nZXRfaW50X3ZhbChkd19kZXYsIERXX0hETUlfQVVEX0ZJRk9fSVNUUywNCj4gPiArCQkJCQkg ICAgRFdfSERNSV9BVURfRklGT19JRU4pOw0KPiA+ICsJdTMyIGNkID0gMDsNCj4gPiArDQo+ID4g Kwlkd19oZG1pX2NsZWFyX2ludHMoZHdfZGV2KTsNCj4gPiArDQo+ID4gKwkvKiB2aWRlbyBoYW5k bGluZyAqLw0KPiA+ICsJaWYgKGhkbWlfaXN0cyAmIERXX0hETUlfQ0xLX0NIQU5HRV9JU1RTKSB7 DQo+ID4gKwkJZGV2X2RiZyhkd19kZXYtPmRldiwgIltIRE1JXSBjbG9jayByYXRlIGNoYW5nZVxu Iik7DQo+ID4gKwkJZHdfaGRtaV9wb3dlcl9vZmYoZHdfZGV2KTsNCj4gPiArCQlpZiAoaGFzX3Np Z25hbChkd19kZXYsIGR3X2Rldi0+Y29uZmlndXJlZF9pbnB1dCkpDQo+ID4gKwkJCWR3X2hkbWlf cG93ZXJfb24oZHdfZGV2LCBkd19kZXYtPmNvbmZpZ3VyZWRfaW5wdXQpOw0KPiA+ICsNCj4gPiAr CQlyZXR1cm4gSVJRX0hBTkRMRUQ7DQo+ID4gKwl9DQo+ID4gKwlpZiAoaGRtaV9pc3RzICYgRFdf SERNSV9QTExfTENLX0NIR19JU1RTKSB7DQo+ID4gKwkJZGV2X2RiZyhkd19kZXYtPmRldiwNCj4g PiArCQkJIltQSFldIFBMTCBsb2NrIHN0YXRlIGNoYW5nZWQgKHRtZHNfdmFsaWQ6ICVkKVxuIiwN Cj4gPiArCQkJZHdfaGRtaV90bWRzX3ZhbGlkKGR3X2RldikpOw0KPiA+ICsJCWR3X2hkbWlfcG93 ZXJfb2ZmKGR3X2Rldik7DQo+ID4gKw0KPiA+ICsJCWlmIChoYXNfc2lnbmFsKGR3X2RldiwgZHdf ZGV2LT5jb25maWd1cmVkX2lucHV0KSkNCj4gPiArCQkJZHdfaGRtaV9wb3dlcl9vbihkd19kZXYs IGR3X2Rldi0+Y29uZmlndXJlZF9pbnB1dCk7DQo+ID4gKw0KPiA+ICsJCXJldHVybiBJUlFfSEFO RExFRDsNCj4gPiArCX0NCj4gPiArCWlmIChoZG1pX2lzdHMgJiBEV19IRE1JX0RDTV9DVVJSRU5U X01PREVfQ0hHX0lTVFMpIHsNCj4gPiArCQlkZXZfZGJnKGR3X2Rldi0+ZGV2LA0KPiA+ICsJCQki W0hETUldIGRlZXAgY29sb3IgY2hhbmdlZFxuIik7DQo+ID4gKw0KPiA+ICsJCWNkID0gZHdfaGRt aV9nZXRfY29sb3JkZXB0aChkd19kZXYpOw0KPiA+ICsJCWlmIChjZCkNCj4gPiArCQkJZHdfaGRt aV9waHlfc2V0X2NvbG9yX2RlcHRoKGR3X2RldiwgY2QpOw0KPiA+ICsNCj4gPiArCQkvKiByZXNl dCBDRUEgdmlkZW8gKi8NCj4gPiArCQlkd19oZG1pX3Jlc2V0X2NlYXZpZChkd19kZXYpOw0KPiA+ ICsNCj4gPiArCQlyZXR1cm4gSVJRX0hBTkRMRUQ7DQo+ID4gKwl9DQo+ID4gKwlpZiAobWRfaXN0 cyB8fCBwZGVjX2lzdHMgJg0KPiA+ICsJICAgIChEV19IRE1JX1ZTSV9DS1NfQ0hHX0lTVFMgfA0K PiA+ICsJICAgICBEV19IRE1JX0RSTV9DS1NfQ0hHX0lTVFMgfA0KPiA+ICsJICAgICBEV19IRE1J X0FWSV9DS1NfQ0hHX0lTVFMpKSB7DQo+ID4gKwkJZHdfaGRtaV9oYW5kbGVfdmlkZW9fY2hhbmdl KGR3X2Rldik7DQo+ID4gKwkJZGV2X2RiZyhkd19kZXYtPmRldiwNCj4gPiArCQkJIiAgIG1kX2lz dHM6IDB4JXgsIHBkZWNfaXN0czogMHgleFxuIiwNCj4gPiArCQkJbWRfaXN0cywgcGRlY19pc3Rz KTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBpbmZvZnJhbWVzICovDQo+ID4gKwlpZiAocGRl Y19pc3RzICYgRFdfSERNSV9BSUZfQ0tTX0NIR19JU1RTKQ0KPiA+ICsJCWR3X2hkbWlfZ2V0X2lu Zm9mcmFtZXMoZHdfZGV2KTsNCj4gPiArDQo+ID4gKwkvKiBhdWRpbyBoYW5kbGluZyAqLw0KPiA+ ICsJaWYgKHBkZWNfaXN0cyAmIChEV19IRE1JX0FVRF9UWVBFX0NIR19JU1RTIHwNCj4gPiArCQkJ IERXX0hETUlfQUlGX0NLU19DSEdfSVNUUyB8DQo+ID4gKwkJCSBEV19IRE1JX0FDUl9OX0NIR19J U1RTIHwNCj4gPiArCQkJIERXX0hETUlfQUNSX0NUU19DSEdfSVNUUyB8DQo+ID4gKwkJCSBEV19I RE1JX0dDUF9BVl9NVVRFX0NIR19JU1RTKSB8fA0KPiA+ICsJICAgIGFmaWZfaXN0cyAmIChEV19I RE1JX0FGSUZfVU5ERVJGTF9JU1RTIHwNCj4gPiArCQkJIERXX0hETUlfQUZJRl9PVkVSRkxfSVNU UyB8DQo+ID4gKwkJCSBEV19IRE1JX0FGSUZfVEhTX1BBU1NfSVNUUykpIHsNCj4gPiArCQlkd19o ZG1pX2hhbmRsZV9hdWRpb19jaGFuZ2UoZHdfZGV2LCBhZmlmX2lzdHMsIHBkZWNfaXN0cyk7DQo+ ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogc2NkYyAqLw0KPiA+ICsJaWYgKGhkbWlfaXN0cyAmIERX X0hETUlfU0NEQ1RNRFNDRkdDSEFOR0VfSVNUU19NQVNLKSB7DQo+ID4gKwkJZGV2X2RiZyhkd19k ZXYtPmRldiwgIltTQ0RDXSBoZG1pMj0lZC0+JWQsIHNjcmFtYmxpbmc9JWQtPiVkXG4iLA0KPiA+ ICsJCQlkd19kZXYtPmlzX2hkbWkyLCBpc19oZG1pMihkd19kZXYpLA0KPiA+ICsJCQlkd19kZXYt PmlzX3NjcmFtYmxlZCwgaXNfc2NyYW1ibGVkKGR3X2RldikpOw0KPiA+ICsJCWlmIChkd19kZXYt PmlzX2hkbWkyICE9IGlzX2hkbWkyKGR3X2RldikgfHwNCj4gPiArCQkgICAgZHdfZGV2LT5pc19z Y3JhbWJsZWQgIT0gaXNfc2NyYW1ibGVkKGR3X2RldikpIHsNCj4gPiArCQkJZHdfZGV2LT5pc19o ZG1pMiA9IGlzX2hkbWkyKGR3X2Rldik7DQo+ID4gKwkJCWR3X2Rldi0+aXNfc2NyYW1ibGVkID0g aXNfc2NyYW1ibGVkKGR3X2Rldik7DQo+ID4gKwkJCWR3X2hkbWlfcG93ZXJfb2ZmKGR3X2Rldik7 DQo+ID4gKwkJCWR3X2hkbWlfcG93ZXJfb24oZHdfZGV2LCBkd19kZXYtPmNvbmZpZ3VyZWRfaW5w dXQpOw0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gSVJRX0hBTkRMRUQ7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgZHdfaGRtaV9kZXRlY3RfdHhfNXZfY3Ry bChzdHJ1Y3QgZHdfaGRtaV9kZXYgKmR3X2RldikNCj4gPiArew0KPiA+ICsJYm9vbCBjdXJyZW50 X29uID0gZHdfaGRtaV81dl9zdGF0dXMoZHdfZGV2LCBkd19kZXYtPmNvbmZpZ3VyZWRfaW5wdXQp Ow0KPiA+ICsJdW5zaWduZWQgaW50IGlucHV0X2NvdW50ID0gZHdfZGV2LT5jb25maWctPnBoeS0+ aW5wdXRfY291bnQ7DQo+ID4gKwl1bnNpZ25lZCBpbnQgb2xkX2lucHV0ID0gZHdfZGV2LT5jb25m aWd1cmVkX2lucHV0Ow0KPiA+ICsJdW5zaWduZWQgaW50IG5ld19pbnB1dCA9IG9sZF9pbnB1dDsN Cj4gPiArCWJvb2wgcGVuZGluZ19jb25maWcgPSBmYWxzZTsNCj4gPiArCXVuc2lnbmVkIGludCBz dGF0ID0gMDsNCj4gPiArCXVuc2lnbmVkIGludCBpOw0KPiA+ICsNCj4gPiArCWZvciAoaSA9IDA7 IGkgPCBpbnB1dF9jb3VudDsgaSsrKSB7DQo+ID4gKwkJYm9vbCBvbiA9IGR3X2hkbWlfNXZfc3Rh dHVzKGR3X2RldiwgaSk7DQo+ID4gKw0KPiA+ICsJCXN0YXQgfD0gb24gPDwgaTsNCj4gPiArDQo+ ID4gKwkJaWYgKG9uICYmIG9uICE9IGR3X2Rldi0+aW5wdXRfY29ubmVjdGVkW2ldKSB7DQo+ID4g KwkJCWR3X2hkbWlfZGlzYWJsZV9pbnRzKGR3X2Rldik7DQo+ID4gKwkJCWR3X2hkbWlfcG93ZXJf b2ZmKGR3X2Rldik7DQo+ID4gKwkJCWR3X2hkbWlfcG93ZXJfdXAoZHdfZGV2KTsNCj4gPiArCQkJ ZHdfZGV2LT5pbnB1dF9jb25uZWN0ZWRbaV0gPSB0cnVlOw0KPiA+ICsJCQlkd19oZG1pX3Bvd2Vy X29uKGR3X2RldiwgaSk7DQo+ID4gKwkJCWR3X2hkbWlfc2V0X2lucHV0KGR3X2RldiwgaSk7DQo+ ID4gKwkJCW5ld19pbnB1dCA9IGk7DQo+ID4gKwkJCXBlbmRpbmdfY29uZmlnID0gdHJ1ZTsNCj4g PiArCQl9IGVsc2Ugew0KPiA+ICsJCQlkd19kZXYtPmlucHV0X2Nvbm5lY3RlZFtpXSA9IG9uOw0K PiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwlkd19kZXYtPmlucHV0X3N0YXQgPSBzdGF0 Ow0KPiA+ICsNCj4gPiArCWlmICghcGVuZGluZ19jb25maWcgJiYgIWN1cnJlbnRfb24pIHsNCj4g PiArCQlkd19oZG1pX2Rpc2FibGVfaW50cyhkd19kZXYpOw0KPiA+ICsJCWR3X2hkbWlfZGlzYWJs ZV9ocGQoZHdfZGV2KTsNCj4gPiArCQlkd19oZG1pX2Rpc2FibGVfc2NkYyhkd19kZXYpOw0KPiA+ ICsJCWR3X2hkbWlfcG93ZXJfb2ZmKGR3X2Rldik7DQo+ID4gKwkJaWYgKGR3X2Rldi0+cGh5LT5w b3dlcl9jb3VudCA+IDApDQo+ID4gKwkJCXBoeV9wb3dlcl9vZmYoZHdfZGV2LT5waHkpOw0KPiA+ ICsJfQ0KPiA+ICsNCj4gPiArCWRldl9kYmcoZHdfZGV2LT5kZXYsICIlczogc3RhdD0weCV4LCBp bnB1dD0lZC0+JWRcbiIsIF9fZnVuY19fLA0KPiA+ICsJCXN0YXQsIG9sZF9pbnB1dCwgbmV3X2lu cHV0KTsNCj4gPiArCXJldHVybiB2NGwyX2N0cmxfc19jdHJsKGR3X2Rldi0+ZGV0ZWN0X3R4XzV2 X2N0cmwsIHN0YXQpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaXJxcmV0dXJuX3QgZHdf aGRtaV81dl9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfZGF0YSkNCj4gPiArew0KPiA+ ICsJc3RydWN0IGR3X2hkbWlfZGV2ICpkd19kZXYgPSBkZXZfZGF0YTsNCj4gPiArDQo+ID4gKwlk d19oZG1pX2RldGVjdF90eF81dl9jdHJsKGR3X2Rldik7DQo+ID4gKwlyZXR1cm4gSVJRX0hBTkRM RUQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpcnFyZXR1cm5fdCBkd19oZG1pXzV2X2hh cmRfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2RhdGEpDQo+ID4gK3sNCj4gPiArCXN0 cnVjdCBkd19oZG1pX2RldiAqZHdfZGV2ID0gZGV2X2RhdGE7DQo+ID4gKwl1bnNpZ25lZCBpbnQg aW5wdXRfY291bnQgPSBkd19kZXYtPmNvbmZpZy0+cGh5LT5pbnB1dF9jb3VudDsNCj4gPiArCXUz MiBzdGF0ID0gMHgwOw0KPiA+ICsJdW5zaWduZWQgaW50IGk7DQo+ID4gKw0KPiA+ICsJLyogQ2xl YXIgaW50ZXJydXB0cyAqLw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IGlucHV0X2NvdW50OyBpKysp IHsNCj4gPiArCQlkd19oZG1pXzV2X2Rpc2FibGUoZHdfZGV2LCBpKTsNCj4gPiArCQlkd19oZG1p XzV2X2VuYWJsZShkd19kZXYsIGkpOw0KPiA+ICsJCXN0YXQgfD0gZHdfaGRtaV81dl9zdGF0dXMo ZHdfZGV2LCBpKSA8PCBpOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmICghc3RhdCkgew0KPiA+ ICsJCS8qDQo+ID4gKwkJICogSWYgdGhlcmUgYXJlIG5vIGNvbm5lY3RlZCBwb3J0cyBkaXNhYmxl IHdob2xlIEhQRCBhbmQgU0NEQw0KPiA+ICsJCSAqIGFsc28uDQo+ID4gKwkJICovDQo+ID4gKwkJ ZHdfaGRtaV9kaXNhYmxlX2hwZChkd19kZXYpOw0KPiA+ICsJCWR3X2hkbWlfZGlzYWJsZV9zY2Rj KGR3X2Rldik7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIElSUV9XQUtFX1RIUkVBRDsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBkd19oZG1pX3Nfcm91dGluZyhzdHJ1Y3Qg djRsMl9zdWJkZXYgKnNkLCB1MzIgaW5wdXQsIHUzMiBvdXRwdXQsDQo+ID4gKwkJCSAgICAgdTMy IGNvbmZpZykNCj4gPiArew0KPiA+ICsJc3RydWN0IGR3X2hkbWlfZGV2ICpkd19kZXYgPSB0b19k d19kZXYoc2QpOw0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwlpZiAoIWhhc19zaWduYWwo ZHdfZGV2LCBpbnB1dCkpDQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsJZHdf ZGV2LT5zZWxlY3RlZF9pbnB1dCA9IGlucHV0Ow0KPiA+ICsJaWYgKGlucHV0ID09IGR3X2Rldi0+ Y29uZmlndXJlZF9pbnB1dCkNCj4gPiArCQlyZXR1cm4gMDsNCj4gPiArDQo+ID4gKwlkd19oZG1p X3Bvd2VyX29mZihkd19kZXYpOw0KPiA+ICsJcmV0ID0gZHdfaGRtaV9wb3dlcl9vbihkd19kZXYs IGlucHV0KTsNCj4gPiArCWR3X2hkbWlfc2V0X2lucHV0KGR3X2RldiwgaW5wdXQpOw0KPiA+ICsJ cmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBkd19oZG1pX2dfaW5w dXRfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiAqc3RhdHVzKQ0KPiA+ICt7DQo+ ID4gKwlzdHJ1Y3QgZHdfaGRtaV9kZXYgKmR3X2RldiA9IHRvX2R3X2RldihzZCk7DQo+ID4gKw0K PiA+ICsJKnN0YXR1cyA9IDA7DQo+ID4gKwlpZiAoIWhhc19zaWduYWwoZHdfZGV2LCBkd19kZXYt PnNlbGVjdGVkX2lucHV0KSkNCj4gPiArCQkqc3RhdHVzIHw9IFY0TDJfSU5fU1RfTk9fUE9XRVI7 DQo+ID4gKwlpZiAoIWlzX29uKGR3X2RldikpDQo+ID4gKwkJKnN0YXR1cyB8PSBWNEwyX0lOX1NU X05PX1NJR05BTDsNCj4gPiArDQo+ID4gKwlkZXZfZGJnKGR3X2Rldi0+ZGV2LCAiJXM6IHN0YXR1 cz0weCV4XG4iLCBfX2Z1bmNfXywgKnN0YXR1cyk7DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIGludCBkd19oZG1pX2dfZnJhbWVfaW50ZXJ2YWwoc3RydWN0IHY0 bDJfc3ViZGV2ICpzZCwNCj4gPiArCQkJCSAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfZnJhbWVfaW50 ZXJ2YWwgKml2YWwpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBkd19oZG1pX2RldiAqZHdfZGV2ID0g dG9fZHdfZGV2KHNkKTsNCj4gPiArCXUzMiBodG90LCB2dG90LCBmcHM7DQo+ID4gKwl1bnNpZ25l ZCBsb25nIG4sIGQ7DQo+ID4gKwl1NjQgcGNsazsNCj4gPiArDQo+ID4gKwlodG90ID0gaGRtaV9t YXNrX3JlYWRsKGR3X2RldiwgRFdfSERNSV9NRF9IVDEsDQo+ID4gKwkJCSAgICAgICBEV19IRE1J X0hUT1RfUElYX09GRlNFVCwNCj4gPiArCQkJICAgICAgIERXX0hETUlfSFRPVF9QSVhfTUFTSyk7 DQo+ID4gKwl2dG90ID0gaGRtaV9yZWFkbChkd19kZXYsIERXX0hETUlfTURfVlRMKTsNCj4gPiAr CXBjbGsgPSBkd19oZG1pX2dldF9waXhlbGNsayhkd19kZXYpOw0KPiA+ICsNCj4gPiArCWZwcyA9 IChodG90ICogdnRvdCkgPiAwID8gZGl2X3U2NCgoMTAwICogcGNsayksIChodG90ICogdnRvdCkp IDogMDsNCj4gPiArCWlmICghZnBzKQ0KPiA+ICsJCXJldHVybiAwOw0KPiA+ICsNCj4gPiArCXJh dGlvbmFsX2Jlc3RfYXBwcm94aW1hdGlvbihmcHMsIDEwMCwgZnBzLCAxMDAsICZuLCAmZCk7DQo+ ID4gKw0KPiA+ICsJaXZhbC0+aW50ZXJ2YWwubnVtZXJhdG9yID0gZDsNCj4gPiArCWl2YWwtPmlu dGVydmFsLmRlbm9taW5hdG9yID0gbjsNCj4gPiArDQo+ID4gKwlkZXZfZGJnKGR3X2Rldi0+ZGV2 LCAiJXM6ICVsdSAvICVsdVxuIiwgX19mdW5jX18sIGQsIG4pOw0KPiA+ICsNCj4gPiArCXJldHVy biAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGR3X2hkbWlfc19kdl90aW1pbmdz KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsDQo+ID4gKwkJCQlzdHJ1Y3QgdjRsMl9kdl90aW1pbmdz ICp0aW1pbmdzKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgZHdfaGRtaV9kZXYgKmR3X2RldiA9IHRv X2R3X2RldihzZCk7DQo+ID4gKw0KPiA+ICsJaWYgKCF2NGwyX3ZhbGlkX2R2X3RpbWluZ3ModGlt aW5ncywgJmR3X2hkbWlfdGltaW5nc19jYXAsIE5VTEwsIE5VTEwpKQ0KPiA+ICsJCXJldHVybiAt RUlOVkFMOw0KPiA+ICsJaWYgKHY0bDJfbWF0Y2hfZHZfdGltaW5ncyh0aW1pbmdzLCAmZHdfZGV2 LT50aW1pbmdzLCAwLCBmYWxzZSkpDQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICsJZHdf ZGV2LT50aW1pbmdzID0gKnRpbWluZ3M7DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArc3RhdGljIGludCBkd19oZG1pX2dfZHZfdGltaW5ncyhzdHJ1Y3QgdjRsMl9zdWJkZXYg KnNkLA0KPiA+ICsJCQkJc3RydWN0IHY0bDJfZHZfdGltaW5ncyAqdGltaW5ncykNCj4gPiArew0K PiA+ICsJc3RydWN0IGR3X2hkbWlfZGV2ICpkd19kZXYgPSB0b19kd19kZXYoc2QpOw0KPiA+ICsN Cj4gPiArCSp0aW1pbmdzID0gZHdfZGV2LT50aW1pbmdzOw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4g K30NCj4gPiArDQo+ID4gK3N0YXRpYyB1MzIgZHdfaGRtaV9nZXRfd2lkdGgoc3RydWN0IGR3X2hk bWlfZGV2ICpkd19kZXYpDQo+ID4gK3sNCj4gPiArCXUzMiB3aWR0aCA9IGhkbWlfcmVhZGwoZHdf ZGV2LCBEV19IRE1JX01EX0hBQ1RfUFgpOw0KPiA+ICsJdTMyIGNkID0gZHdfaGRtaV9nZXRfY29s b3JkZXB0aChkd19kZXYpOw0KPiA+ICsNCj4gPiArCXN3aXRjaCAoY2QpIHsNCj4gPiArCWNhc2Ug MzA6DQo+ID4gKwkJd2lkdGggPSAod2lkdGggKiAxMDApIC8gMTI1Ow0KPiA+ICsJCWJyZWFrOw0K PiA+ICsJY2FzZSAzNjoNCj4gPiArCQl3aWR0aCA9ICh3aWR0aCAqIDEwKSAvIDE1Ow0KPiA+ICsJ CWJyZWFrOw0KPiA+ICsJY2FzZSA0ODoNCj4gPiArCQl3aWR0aCAvPSAyOw0KPiA+ICsJCWJyZWFr Ow0KPiA+ICsJY2FzZSAyNDoNCj4gPiArCWRlZmF1bHQ6DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwl9 DQo+ID4gKw0KPiA+ICsJaWYgKGR3X2hkbWlfZ2V0X21idXNfY29kZShkd19kZXYpID09IE1FRElB X0JVU19GTVRfWVZZVThfMVgxNikNCj4gPiArCQl3aWR0aCAqPSAyOw0KPiA+ICsNCj4gPiArCXJl dHVybiB3aWR0aDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBkd19oZG1pX3F1ZXJ5 X2R2X3RpbWluZ3Moc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwNCj4gPiArCQkJCSAgICBzdHJ1Y3Qg djRsMl9kdl90aW1pbmdzICp0aW1pbmdzKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgZHdfaGRtaV9k ZXYgKmR3X2RldiA9IHRvX2R3X2RldihzZCk7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9idF90aW1pbmdz ICpidCA9ICZ0aW1pbmdzLT5idDsNCj4gPiArCWJvb2wgaXNfaGRtaV92aWM7DQo+ID4gKwl1MzIg aHRvdCwgaG9mczsNCj4gPiArCXUzMiB2dG90Ow0KPiA+ICsJdTggdmljOw0KPiA+ICsNCj4gPiAr CW1lbXNldCh0aW1pbmdzLCAwLCBzaXplb2YoKnRpbWluZ3MpKTsNCj4gPiArDQo+ID4gKwlpZiAo aXNfb2ZmKGR3X2RldikpIHsNCj4gPiArCQlkZXZfZGJnKGR3X2Rldi0+ZGV2LCAiJXM6IGNvbnRy b2xsZXIgaXMgb2ZmXG4iLCBfX2Z1bmNfXyk7DQo+ID4gKwkJcmV0dXJuIC1FTk9MSU5LOw0KPiA+ ICsJfQ0KPiA+ICsNCj4gPiArCWlmICghaXNfb24oZHdfZGV2KSkgew0KPiA+ICsJCWRldl9kYmco ZHdfZGV2LT5kZXYsICIlczogY29udHJvbGxlciBpcyBiZWluZyBjb25maWd1cmVkXG4iLA0KPiA+ ICsJCQlfX2Z1bmNfXyk7DQo+ID4gKwkJcmV0dXJuIC1FQUdBSU47DQo+ID4gKwl9DQo+ID4gKw0K PiA+ICsJdGltaW5ncy0+dHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjA7DQo+ID4gKwlidC0+d2lk dGggPSBkd19oZG1pX2dldF93aWR0aChkd19kZXYpOw0KPiA+ICsJYnQtPmhlaWdodCA9IGhkbWlf cmVhZGwoZHdfZGV2LCBEV19IRE1JX01EX1ZBTCk7DQo+ID4gKwlidC0+aW50ZXJsYWNlZCA9DQo+ ID4gKwkJaGRtaV9yZWFkbChkd19kZXYsIERXX0hETUlfTURfU1RTKSAmIERXX0hETUlfSUxBQ0Vf U1RTID8NCj4gPiArCQkJVjRMMl9EVl9JTlRFUkxBQ0VEIDogVjRMMl9EVl9QUk9HUkVTU0lWRTsN Cj4gPiArDQo+ID4gKwlpZiAoaGRtaV9yZWFkbChkd19kZXYsIERXX0hETUlfSVNUUykgJiBEV19I RE1JX1ZTX1BPTF9BREpfSVNUUykNCj4gPiArCQlidC0+cG9sYXJpdGllcyB8PSBWNEwyX0RWX1ZT WU5DX1BPU19QT0w7DQo+ID4gKwlpZiAoaGRtaV9yZWFkbChkd19kZXYsIERXX0hETUlfSVNUUykg JiBEV19IRE1JX0hTX1BPTF9BREpfSVNUUykNCj4gPiArCQlidC0+cG9sYXJpdGllcyB8PSBWNEwy X0RWX0hTWU5DX1BPU19QT0w7DQo+ID4gKw0KPiA+ICsJYnQtPnBpeGVsY2xvY2sgPSBkd19oZG1p X2dldF9waXhlbGNsayhkd19kZXYpOw0KPiA+ICsNCj4gPiArCS8qIEhUT1QgPSBIQUNUICsgSEZS T05UICsgSFNZTkMgKyBIQkFDSyAqLw0KPiA+ICsJaHRvdCA9IGhkbWlfbWFza19yZWFkbChkd19k ZXYsIERXX0hETUlfTURfSFQxLA0KPiA+ICsJCQkgICAgICAgRFdfSERNSV9IVE9UX1BJWF9PRkZT RVQsDQo+ID4gKwkJCSAgICAgICBEV19IRE1JX0hUT1RfUElYX01BU0spOw0KPiA+ICsJLyogSE9G UyA9IEhTWU5DICsgSEJBQ0sgKi8NCj4gPiArCWhvZnMgPSBoZG1pX21hc2tfcmVhZGwoZHdfZGV2 LCBEV19IRE1JX01EX0hUMSwNCj4gPiArCQkJICAgICAgIERXX0hETUlfSE9GU19QSVhfT0ZGU0VU LA0KPiA+ICsJCQkgICAgICAgRFdfSERNSV9IT0ZTX1BJWF9NQVNLKTsNCj4gPiArDQo+ID4gKwli dC0+aGZyb250cG9yY2ggPSBodG90IC0gaG9mcyAtIGJ0LT53aWR0aDsNCj4gPiArCWJ0LT5oc3lu YyA9IGhkbWlfbWFza19yZWFkbChkd19kZXYsIERXX0hETUlfTURfSFQwLA0KPiA+ICsJCQkJICAg IERXX0hETUlfSFNfQ0xLX09GRlNFVCwNCj4gPiArCQkJCSAgICBEV19IRE1JX0hTX0NMS19NQVNL KTsNCj4gPiArCWJ0LT5oYmFja3BvcmNoID0gaG9mcyAtIGJ0LT5oc3luYzsNCj4gPiArDQo+ID4g KwkvKiBWVE9UID0gVkFDVCArIFZGUk9OVCArIFZTWU5DICsgVkJBQ0sgKi8NCj4gPiArCXZ0b3Qg PSBoZG1pX3JlYWRsKGR3X2RldiwgRFdfSERNSV9NRF9WVEwpOw0KPiA+ICsNCj4gPiArCWJ0LT52 c3luYyA9IGhkbWlfcmVhZGwoZHdfZGV2LCBEV19IRE1JX01EX1ZPTCk7DQo+ID4gKw0KPiA+ICsJ YnQtPnZiYWNrcG9yY2ggPSBoZG1pX3JlYWRsKGR3X2RldiwgRFdfSERNSV9NRF9WT0wpOw0KPiA+ ICsJYnQtPnZmcm9udHBvcmNoID0gdnRvdCAtIGJ0LT5oZWlnaHQgLSBidC0+dnN5bmMgLSBidC0+ dmJhY2twb3JjaDsNCj4gPiArDQo+ID4gKwlpZiAoYnQtPmludGVybGFjZWQgPT0gVjRMMl9EVl9J TlRFUkxBQ0VEKSB7DQo+ID4gKwkJaGRtaV9tYXNrX3dyaXRlbChkd19kZXYsIDB4MSwgRFdfSERN SV9NRF9WQ1RSTCwNCj4gPiArCQkJCSBEV19IRE1JX1ZfTU9ERV9PRkZTRVQsDQo+ID4gKwkJCQkg RFdfSERNSV9WX01PREVfTUFTSyk7DQo+ID4gKwkJbXNsZWVwKDEwMCk7IC8qIFdhaXQgZm9yIDIg ZmllbGRzICovDQo+ID4gKw0KPiA+ICsJCXZ0b3QgPSBoZG1pX3JlYWRsKGR3X2RldiwgRFdfSERN SV9NRF9WVEwpOw0KPiA+ICsJCWhkbWlfbWFza193cml0ZWwoZHdfZGV2LCAweDEsIERXX0hETUlf TURfVkNUUkwsDQo+ID4gKwkJCQkgRFdfSERNSV9WX09GRlNfTElOX01PREVfT0ZGU0VULA0KPiA+ ICsJCQkJIERXX0hETUlfVl9PRkZTX0xJTl9NT0RFX01BU0spOw0KPiA+ICsJCW1zbGVlcCg1MCk7 IC8qIFdhaXQgZm9yIDEgZmllbGQgKi8NCj4gPiArCQlidC0+aWxfdnN5bmMgPSBoZG1pX3JlYWRs KGR3X2RldiwgRFdfSERNSV9NRF9WT0wpOw0KPiA+ICsNCj4gPiArCQloZG1pX21hc2tfd3JpdGVs KGR3X2RldiwgMHgwLCBEV19IRE1JX01EX1ZDVFJMLA0KPiA+ICsJCQkJIERXX0hETUlfVl9PRkZT X0xJTl9NT0RFX09GRlNFVCwNCj4gPiArCQkJCSBEV19IRE1JX1ZfT0ZGU19MSU5fTU9ERV9NQVNL KTsNCj4gPiArCQltc2xlZXAoNTApOw0KPiA+ICsJCWJ0LT5pbF92YmFja3BvcmNoID0gaGRtaV9y ZWFkbChkd19kZXYsIERXX0hETUlfTURfVk9MKTsNCj4gPiArCQlidC0+aWxfdmZyb250cG9yY2gg PSB2dG90IC0gYnQtPmhlaWdodCAtIGJ0LT5pbF92c3luYyAtDQo+ID4gKwkJCWJ0LT5pbF92YmFj a3BvcmNoOw0KPiA+ICsNCj4gPiArCQloZG1pX21hc2tfd3JpdGVsKGR3X2RldiwgMHgwLCBEV19I RE1JX01EX1ZDVFJMLA0KPiA+ICsJCQkJIERXX0hETUlfVl9NT0RFX09GRlNFVCwNCj4gPiArCQkJ CSBEV19IRE1JX1ZfTU9ERV9NQVNLKTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlidC0+c3RhbmRh cmRzID0gVjRMMl9EVl9CVF9TVERfQ0VBODYxOw0KPiA+ICsNCj4gPiArCXZpYyA9IGR3X2hkbWlf Z2V0X2N1cnJfdmljKGR3X2RldiwgJmlzX2hkbWlfdmljKTsNCj4gPiArCWlmICh2aWMpIHsNCj4g PiArCQlpZiAoaXNfaGRtaV92aWMpIHsNCj4gPiArCQkJYnQtPmZsYWdzIHw9IFY0TDJfRFZfRkxf SEFTX0hETUlfVklDOw0KPiA+ICsJCQlidC0+aGRtaV92aWMgPSB2aWM7DQo+ID4gKwkJCWJ0LT5j ZWE4NjFfdmljID0gMDsNCj4gPiArCQl9IGVsc2Ugew0KPiA+ICsJCQlidC0+ZmxhZ3MgfD0gVjRM Ml9EVl9GTF9IQVNfQ0VBODYxX1ZJQzsNCj4gPiArCQkJYnQtPmhkbWlfdmljID0gMDsNCj4gPiAr CQkJYnQtPmNlYTg2MV92aWMgPSB2aWM7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAr CWRldl9kYmcoZHdfZGV2LT5kZXYsICIlczogd2lkdGg9JXUsIGhlaWdodD0ldSwgbWJ1c2NvZGU9 JXVcbiIsIF9fZnVuY19fLA0KPiA+ICsJCWJ0LT53aWR0aCwgYnQtPmhlaWdodCwgZHdfaGRtaV9n ZXRfbWJ1c19jb2RlKGR3X2RldikpOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtzdGF0aWMgaW50IGR3X2hkbWlfZW51bV9tYnVzX2NvZGUoc3RydWN0IHY0bDJf c3ViZGV2ICpzZCwNCj4gPiArCQkJCSAgc3RydWN0IHY0bDJfc3ViZGV2X3BhZF9jb25maWcgKmNm ZywNCj4gPiArCQkJCSAgc3RydWN0IHY0bDJfc3ViZGV2X21idXNfY29kZV9lbnVtICpjb2RlKQ0K PiA+ICt7DQo+ID4gKwlzdHJ1Y3QgZHdfaGRtaV9kZXYgKmR3X2RldiA9IHRvX2R3X2RldihzZCk7 DQo+ID4gKw0KPiA+ICsJaWYgKGNvZGUtPmluZGV4ICE9IDApDQo+ID4gKwkJcmV0dXJuIC1FSU5W QUw7DQo+ID4gKw0KPiA+ICsJY29kZS0+Y29kZSA9IGR3X2Rldi0+bWJ1c19jb2RlOw0KPiA+ICsJ cmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgZHdfaGRtaV9maWxsX2Zv cm1hdChzdHJ1Y3QgZHdfaGRtaV9kZXYgKmR3X2RldiwNCj4gPiArCQkJICAgICAgIHN0cnVjdCB2 NGwyX21idXNfZnJhbWVmbXQgKmZvcm1hdCkNCj4gPiArew0KPiA+ICsJZW51bSBoZG1pX2V4dGVu ZGVkX2NvbG9yaW1ldHJ5IGV4dGNvbDsNCj4gPiArCWVudW0gaGRtaV9jb2xvcmltZXRyeSBjb2w7 DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCW1lbXNldChmb3JtYXQsIDAsIHNpemVvZigq Zm9ybWF0KSk7DQo+ID4gKw0KPiA+ICsJLyogVXBkYXRlIHRpbWluZ3MgKi8NCj4gPiArCXJldCA9 IGR3X2hkbWlfcXVlcnlfZHZfdGltaW5ncygmZHdfZGV2LT5zZCwgJmR3X2Rldi0+dGltaW5ncyk7 DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsJLyogVXBk YXRlIGluZm9mcmFtZSBjb250ZW50cyAqLw0KPiA+ICsJZHdfaGRtaV9nZXRfaW5mb2ZyYW1lcyhk d19kZXYpOw0KPiA+ICsNCj4gPiArCWNvbCA9IGR3X2Rldi0+YXZpaWYuYXZpLmNvbG9yaW1ldHJ5 Ow0KPiA+ICsJZXh0Y29sID0gZHdfZGV2LT5hdmlpZi5hdmkuZXh0ZW5kZWRfY29sb3JpbWV0cnk7 DQo+ID4gKw0KPiA+ICsJc3dpdGNoIChjb2wpIHsNCj4gPiArCWNhc2UgSERNSV9DT0xPUklNRVRS WV9JVFVfNjAxOg0KPiA+ICsJCWZvcm1hdC0+Y29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9T TVBURTE3ME07DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIEhETUlfQ09MT1JJTUVUUllfRVhU RU5ERUQ6DQo+ID4gKwkJc3dpdGNoIChleHRjb2wpIHsNCj4gPiArCQljYXNlIEhETUlfRVhURU5E RURfQ09MT1JJTUVUUllfWFZfWUNDXzYwMToNCj4gPiArCQkJZm9ybWF0LT5jb2xvcnNwYWNlID0g VjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTTsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJY2FzZSBI RE1JX0VYVEVOREVEX0NPTE9SSU1FVFJZX1hWX1lDQ183MDk6DQo+ID4gKwkJY2FzZSBIRE1JX0VY VEVOREVEX0NPTE9SSU1FVFJZX1NfWUNDXzYwMToNCj4gPiArCQljYXNlIEhETUlfRVhURU5ERURf Q09MT1JJTUVUUllfT1BZQ0NfNjAxOg0KPiA+ICsJCWNhc2UgSERNSV9FWFRFTkRFRF9DT0xPUklN RVRSWV9PUFJHQjoNCj4gPiArCQljYXNlIEhETUlfRVhURU5ERURfQ09MT1JJTUVUUllfQlQyMDIw X0NPTlNUX0xVTToNCj4gPiArCQljYXNlIEhETUlfRVhURU5ERURfQ09MT1JJTUVUUllfQlQyMDIw Og0KPiA+ICsJCWNhc2UgSERNSV9FWFRFTkRFRF9DT0xPUklNRVRSWV9SRVNFUlZFRDoNCj4gPiAr CQlkZWZhdWx0Og0KPiA+ICsJCQlmb3JtYXQtPmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0Vf UkVDNzA5Ow0KPiA+ICsJCQlicmVhazsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCWJyZWFrOw0K PiA+ICsJY2FzZSBIRE1JX0NPTE9SSU1FVFJZX05PTkU6DQo+ID4gKwljYXNlIEhETUlfQ09MT1JJ TUVUUllfSVRVXzcwOToNCj4gPiArCWRlZmF1bHQ6DQo+ID4gKwkJZm9ybWF0LT5jb2xvcnNwYWNl ID0gVjRMMl9DT0xPUlNQQUNFX1JFQzcwOTsNCj4gPiArCQlicmVhazsNCj4gPiArCX0NCj4gPiAr DQo+ID4gKwlmb3JtYXQtPndpZHRoID0gZHdfZGV2LT50aW1pbmdzLmJ0LndpZHRoOw0KPiA+ICsJ Zm9ybWF0LT5oZWlnaHQgPSBkd19kZXYtPnRpbWluZ3MuYnQuaGVpZ2h0Ow0KPiA+ICsJZm9ybWF0 LT5jb2RlID0gZHdfZGV2LT5tYnVzX2NvZGU7DQo+ID4gKwlpZiAoZHdfZGV2LT50aW1pbmdzLmJ0 LmludGVybGFjZWQpDQo+ID4gKwkJZm9ybWF0LT5maWVsZCA9IFY0TDJfRklFTERfQUxURVJOQVRF Ow0KPiA+ICsJZWxzZQ0KPiA+ICsJCWZvcm1hdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7DQo+ ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgZHdf aGRtaV9nZXRfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsDQo+ID4gKwkJCSAgIHN0cnVjdCB2 NGwyX3N1YmRldl9wYWRfY29uZmlnICpjZmcsDQo+ID4gKwkJCSAgIHN0cnVjdCB2NGwyX3N1YmRl dl9mb3JtYXQgKmZvcm1hdCkNCj4gPiArew0KPiA+ICsJc3RydWN0IGR3X2hkbWlfZGV2ICpkd19k ZXYgPSB0b19kd19kZXYoc2QpOw0KPiA+ICsNCj4gPiArCXJldHVybiBkd19oZG1pX2ZpbGxfZm9y bWF0KGR3X2RldiwgJmZvcm1hdC0+Zm9ybWF0KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj IGludCBkd19oZG1pX3NldF9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwNCj4gPiArCQkJICAg c3RydWN0IHY0bDJfc3ViZGV2X3BhZF9jb25maWcgKmNmZywNCj4gPiArCQkJICAgc3RydWN0IHY0 bDJfc3ViZGV2X2Zvcm1hdCAqZm9ybWF0KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgZHdfaGRtaV9k ZXYgKmR3X2RldiA9IHRvX2R3X2RldihzZCk7DQo+ID4gKw0KPiA+ICsJaWYgKGZvcm1hdC0+Zm9y bWF0LmNvZGUgIT0gZHdfZGV2LT5tYnVzX2NvZGUpIHsNCj4gPiArCQlkZXZfZGJnKGR3X2Rldi0+ ZGV2LCAiaW52YWxpZCBmb3JtYXRcbiIpOw0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJ fQ0KPiA+ICsNCj4gPiArCXJldHVybiBkd19oZG1pX2dldF9mbXQoc2QsIGNmZywgZm9ybWF0KTsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBkd19oZG1pX2dldF9lZGlkKHN0cnVjdCB2 NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2VkaWQgKmVkaWQpDQo+ID4gK3sNCj4gPiArCXN0 cnVjdCBkd19oZG1pX2RldiAqZHdfZGV2ID0gdG9fZHdfZGV2KHNkKTsNCj4gPiArCXVuc2lnbmVk IGludCBpbnB1dF9jb3VudCA9IGR3X2Rldi0+Y29uZmlnLT5waHktPmlucHV0X2NvdW50Ow0KPiA+ ICsJdW5zaWduZWQgaW50IGksIGosIHN0YXJ0LCBlbmQ7DQo+ID4gKwl1OCAqcHRyID0gZWRpZC0+ ZWRpZDsNCj4gPiArCXU4IGJsb2NrczsNCj4gPiArDQo+ID4gKwltZW1zZXQoZWRpZC0+cmVzZXJ2 ZWQsIDAsIHNpemVvZihlZGlkLT5yZXNlcnZlZCkpOw0KPiA+ICsNCj4gPiArCWlmIChlZGlkLT5w YWQgPj0gaW5wdXRfY291bnQgfHwgIXB0cikNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiAr DQo+ID4gKwlibG9ja3MgPSBkd19kZXYtPmN1cnJfZWRpZF9ibG9ja3NbZWRpZC0+cGFkXTsNCj4g PiArDQo+ID4gKwlpZiAoIWVkaWQtPnN0YXJ0X2Jsb2NrICYmICFlZGlkLT5ibG9ja3MpIHsNCj4g PiArCQllZGlkLT5ibG9ja3MgPSBibG9ja3M7DQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4gKwl9DQo+ ID4gKwlpZiAoIWJsb2NrcykNCj4gPiArCQlyZXR1cm4gLUVOT0RBVEE7DQo+ID4gKwlpZiAoZWRp ZC0+c3RhcnRfYmxvY2sgPj0gYmxvY2tzKQ0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJ aWYgKChlZGlkLT5zdGFydF9ibG9jayArIGVkaWQtPmJsb2NrcykgPiBibG9ja3MpDQo+ID4gKwkJ ZWRpZC0+YmxvY2tzID0gYmxvY2tzIC0gZWRpZC0+c3RhcnRfYmxvY2s7DQo+ID4gKw0KPiA+ICsJ c3RhcnQgPSAoZWRpZC0+c3RhcnRfYmxvY2sgKiAxMjgpIC8gc2l6ZW9mKHUzMik7DQo+ID4gKwll bmQgPSBzdGFydCArIChlZGlkLT5ibG9ja3MgKiAxMjgpIC8gc2l6ZW9mKHUzMik7DQo+ID4gKw0K PiA+ICsJZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgew0KPiA+ICsJCXUzMiByYXcgPSBk d19oZG1pX2VkaWRfcmVhZChkd19kZXYsIGVkaWQtPnBhZCwgaSAqIHNpemVvZih1MzIpKTsNCj4g PiArDQo+ID4gKwkJaWYgKCFkd19oZG1pX2VkaWRfNGJsb2Nrc19sZShkd19kZXYpKSB7DQo+ID4g KwkJCXUzMiByYXdfc3J0ID0gMDsNCj4gPiArCQkJLyogbGl0dGxlIGVuZGlhbiByZXByZXNlbnRh dGlvbiwgbmVlZCB0byBpbnZlcnQgKi8NCj4gPiArCQkJZm9yIChqID0gMDsgaiA8IDQ7IGorKykg ew0KPiA+ICsJCQkJcmF3X3NydCB8PSAoKHJhdyA+PiAoOCAqICgzIC0gaikpKSAmIDB4ZmYpDQo+ ID4gKwkJCQkJPDwgKGogKiA4KTsNCj4gPiArCQkJfQ0KPiA+ICsJCQlyYXcgPSByYXdfc3J0Ow0K PiA+ICsJCX0NCj4gPiArCQltZW1jcHkocHRyLCAmcmF3LCBzaXplb2YodTMyKSk7DQo+ID4gKwkJ cHRyICs9IHNpemVvZih1MzIpOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGR3X2hkbWlfc2V0X2VkaWQoc3RydWN0IHY0bDJf c3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZWRpZCAqZWRpZCkNCj4gPiArew0KPiA+ICsJc3RydWN0 IGR3X2hkbWlfZGV2ICpkd19kZXYgPSB0b19kd19kZXYoc2QpOw0KPiA+ICsJaW50IGlucHV0X2Nv dW50ID0gZHdfZGV2LT5jb25maWctPnBoeS0+aW5wdXRfY291bnQ7DQo+ID4gKwlpbnQgc2l6ZSwg cmV0Ow0KPiA+ICsJdTMyICp0bXA7DQo+ID4gKw0KPiA+ICsJbWVtc2V0KGVkaWQtPnJlc2VydmVk LCAwLCBzaXplb2YoZWRpZC0+cmVzZXJ2ZWQpKTsNCj4gPiArDQo+ID4gKwlpZiAoZWRpZC0+cGFk ID49IGlucHV0X2NvdW50IHx8ICFlZGlkLT5lZGlkIHx8ICFlZGlkLT5ibG9ja3MpDQo+ID4gKwkJ cmV0dXJuIC1FSU5WQUw7DQo+ID4gKwlpZiAoZWRpZC0+c3RhcnRfYmxvY2sgIT0gMCkNCj4gPiAr CQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwkvKiBDbGVhciBvbGQgRURJRCAqLw0KPiA+ ICsJc2l6ZSA9IGR3X2Rldi0+Y3Vycl9lZGlkX2Jsb2Nrc1tlZGlkLT5wYWRdICogMTI4Ow0KPiA+ ICsJdG1wID0gZGV2bV9remFsbG9jKGR3X2Rldi0+ZGV2LCBzaXplLCBHRlBfS0VSTkVMKTsNCj4g PiArCWlmICghdG1wKQ0KPiA+ICsJCXJldHVybiAtRU5PTUVNOw0KPiA+ICsNCj4gPiArCXJldCA9 IGR3X2hkbWlfZWRpZF93cml0ZShkd19kZXYsIGVkaWQtPnBhZCwgdG1wLCBzaXplIC8gc2l6ZW9m KHUzMikpOw0KPiA+ICsJZGV2bV9rZnJlZShkd19kZXYtPmRldiwgdG1wKTsNCj4gPiArDQo+ID4g KwlpZiAocmV0KQ0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsJZHdfZGV2LT5jdXJy X2VkaWRfYmxvY2tzW2VkaWQtPnBhZF0gPSAwOw0KPiA+ICsNCj4gPiArCS8qIFNldCBuZXcgRURJ RCAqLw0KPiA+ICsJaWYgKGR3X2hkbWlfZWRpZF80YmxvY2tzX2xlKGR3X2RldikpIHsNCj4gPiAr CQkvKiBsaXR0bGUgZW5kaWFuIHJlcHJlc2VudGF0aW9uLCBubyBuZWVkIHRvIGludmVydCBieXRl cyAqLw0KPiA+ICsJCXJldCA9IGR3X2hkbWlfdXBkYXRlX2VkaWQoZHdfZGV2LCBlZGlkLT5wYWQs ICh1OCAqKWVkaWQtPmVkaWQsDQo+ID4gKwkJCQkJICAoZWRpZC0+YmxvY2tzICogMTI4KSwgZmFs c2UpOw0KPiA+ICsJfSBlbHNlIHsNCj4gPiArCQkvKiBpbnZlcnQgdGhlIG9yZGVyIG9mIGJ5dGVz IHRvIHJlZ2lzdGVyIDMyYml0ICovDQo+ID4gKwkJcmV0ID0gZHdfaGRtaV91cGRhdGVfZWRpZChk d19kZXYsIGVkaWQtPnBhZCwgKHU4ICopZWRpZC0+ZWRpZCwNCj4gPiArCQkJCQkgIChlZGlkLT5i bG9ja3MgKiAxMjgpLCB0cnVlKTsNCj4gPiArCX0NCj4gPiArCWlmIChyZXQpDQo+ID4gKwkJcmV0 dXJuIHJldDsNCj4gPiArDQo+ID4gKwlkd19kZXYtPmN1cnJfZWRpZF9ibG9ja3NbZWRpZC0+cGFk XSA9IGVkaWQtPmJsb2NrczsNCj4gDQo+IEkgZG9uJ3Qgc2VlIGFueSBjaGVja3Mgb24gZWRpZC0+ YmxvY2tzOiB0aGF0IGNhbid0IGJlIHJpZ2h0LiBUaGUgdHlwaWNhbCBtYXgNCj4gbnVtYmVyIG9m IGJsb2NrcyBmb3IgYW4gRURJRCBpcyAyIG9yIDQsIEkgaGF2ZW4ndCBzZWVuIGFueSBpbXBsZW1l bnRhdGlvbnMNCj4gZm9yIG1vcmUgdGhhbiA0IGJsb2Nrcy4NCj4gDQoNCkkgYWdyZWUhIFRoaXMg d2lsbCBiZSBhZGRyZXNzZWQgaW4gdGhlIG5leHQgcGF0Y2ggc2VyaWVzLg0KDQo+IEkgYWxzbyBk b24ndCBzZWUgYW55IHNpZ25hbGluZyBvZiB0aGUgSFBEOiBpdCBtdXN0IGJlIHB1bGxlZCBsb3cg YmVmb3JlIHlvdQ0KPiBzdGFydCB3cml0aW5nIHRoZSBFRElELCBhbmQgcHVsbGVkIGhpZ2ggYWdh aW4gYXQgbGVhc3QgMTAwbXMgbGF0ZXIgKDE1MCBtcyBvciBzbw0KPiBpcyByZWNvbW1lbmRlZCB0 byBrZWVwIGEgbWFyZ2luKS4NCj4gDQoNCkkgYWdyZWUhIFRoaXMgd2lsbCBiZSBhZGRyZXNzZWQg aW4gdGhlIG5leHQgcGF0Y2ggc2VyaWVzLg0KDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIGludCBkd19oZG1pX2R2X3RpbWluZ3NfY2FwKHN0cnVjdCB2NGwyX3N1 YmRldiAqc2QsDQo+ID4gKwkJCQkgIHN0cnVjdCB2NGwyX2R2X3RpbWluZ3NfY2FwICpjYXApDQo+ ID4gK3sNCj4gPiArCXVuc2lnbmVkIGludCBwYWQgPSBjYXAtPnBhZDsNCj4gPiArDQo+ID4gKwkq Y2FwID0gZHdfaGRtaV90aW1pbmdzX2NhcDsNCj4gPiArCWNhcC0+cGFkID0gcGFkOw0KPiA+ICsJ cmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgZHdfaGRtaV9lbnVtX2R2 X3RpbWluZ3Moc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwNCj4gPiArCQkJCSAgIHN0cnVjdCB2NGwy X2VudW1fZHZfdGltaW5ncyAqdGltaW5ncykNCj4gPiArew0KPiA+ICsJcmV0dXJuIHY0bDJfZW51 bV9kdl90aW1pbmdzX2NhcCh0aW1pbmdzLCAmZHdfaGRtaV90aW1pbmdzX2NhcCwNCj4gPiArCQkJ CQlOVUxMLCBOVUxMKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBkd19oZG1pX2xv Z19zdGF0dXMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkNCj4gPiArew0KPiA+ICsJc3RydWN0IGR3 X2hkbWlfZGV2ICpkd19kZXYgPSB0b19kd19kZXYoc2QpOw0KPiA+ICsJc3RydWN0IHY0bDJfZHZf dGltaW5ncyB0aW1pbmdzOw0KPiA+ICsNCj4gPiArCXY0bDJfaW5mbyhzZCwgIi0tLSBDaGlwIGNv bmZpZ3VyYXRpb24gLS0tXG4iKTsNCj4gPiArCXY0bDJfaW5mbyhzZCwgImlyZWZfY2xrPSVkTUh6 XG4iLCBkd19kZXYtPmNvbmZpZy0+aXJlZl9jbGspOw0KPiA+ICsJdjRsMl9pbmZvKHNkLCAicGh5 X2Rydj0lcywgcGh5X2p0YWdfYWRkcj0weCV4XG4iLA0KPiA+ICsJCSAgZHdfZGV2LT5waHkgPyAi cHJlc2VudCIgOiAibm90IHByZXNlbnQiLA0KPiA+ICsJCSAgZHdfZGV2LT5jb25maWctPnBoeS0+ anRhZ19hZGRyKTsNCj4gPiArDQo+ID4gKwl2NGwyX2luZm8oc2QsICItLS0gQ2hpcCBzdGF0dXMg LS0tXG4iKTsNCj4gPiArCXY0bDJfaW5mbyhzZCwgInNlbGVjdGVkX2lucHV0PSVkOiBzaWduYWw9 JWRcbiIsIGR3X2Rldi0+c2VsZWN0ZWRfaW5wdXQsDQo+ID4gKwkJICBoYXNfc2lnbmFsKGR3X2Rl diwgZHdfZGV2LT5zZWxlY3RlZF9pbnB1dCkpOw0KPiA+ICsJdjRsMl9pbmZvKHNkLCAiY29uZmln dXJlZF9pbnB1dD0lZDogc2lnbmFsPSVkXG4iLA0KPiA+ICsJCSAgZHdfZGV2LT5jb25maWd1cmVk X2lucHV0LA0KPiA+ICsJCSAgaGFzX3NpZ25hbChkd19kZXYsIGR3X2Rldi0+Y29uZmlndXJlZF9p bnB1dCkpOw0KPiA+ICsNCj4gPiArCXY0bDJfaW5mbyhzZCwgIi0tLSBWaWRlbyBzdGF0dXMgLS0t XG4iKTsNCj4gPiArCXY0bDJfaW5mbyhzZCwgInR5cGU9JXMsIGNvbG9yX2RlcHRoPSVkYml0cyIs DQo+ID4gKwkJICBoZG1pX3JlYWRsKGR3X2RldiwgRFdfSERNSV9QREVDX1NUUykgJg0KPiA+ICsJ CSAgRFdfSERNSV9EVklERVQgPyAiZHZpIiA6ICJoZG1pIiwNCj4gPiArCQkgIGR3X2hkbWlfZ2V0 X2NvbG9yZGVwdGgoZHdfZGV2KSk7DQo+ID4gKw0KPiA+ICsJdjRsMl9pbmZvKHNkLCAiLS0tIFZp ZGVvIHRpbWluZ3MgLS0tXG4iKTsNCj4gPiArCWlmIChkd19oZG1pX3F1ZXJ5X2R2X3RpbWluZ3Mo c2QsICZ0aW1pbmdzKSkNCj4gPiArCQl2NGwyX2luZm8oc2QsICJObyB2aWRlbyBkZXRlY3RlZFxu Iik7DQo+ID4gKwllbHNlDQo+ID4gKwkJdjRsMl9wcmludF9kdl90aW1pbmdzKHNkLT5uYW1lLCAi RGV0ZWN0ZWQgZm9ybWF0OiAiLA0KPiA+ICsJCQkJICAgICAgJnRpbWluZ3MsIHRydWUpOw0KPiA+ ICsJdjRsMl9wcmludF9kdl90aW1pbmdzKHNkLT5uYW1lLCAiQ29uZmlndXJlZCBmb3JtYXQ6ICIs DQo+ID4gKwkJCSAgICAgICZkd19kZXYtPnRpbWluZ3MsIHRydWUpOw0KPiA+ICsNCj4gPiArCXY0 bDJfY3RybF9zdWJkZXZfbG9nX3N0YXR1cyhzZCk7DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0K PiA+ICsNCj4gPiArI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcNCj4gPiArc3RhdGljIHZv aWQgZHdfaGRtaV9pbnZhbGlkX3JlZ2lzdGVyKHN0cnVjdCBkd19oZG1pX2RldiAqZHdfZGV2LCB1 NjQgcmVnKQ0KPiA+ICt7DQo+ID4gKwlkZXZfZXJyKGR3X2Rldi0+ZGV2LCAicmVnaXN0ZXIgMHgl bGx4IG5vdCBzdXBwb3J0ZWRcbiIsIHJlZyk7DQo+ID4gKwlkZXZfZXJyKGR3X2Rldi0+ZGV2LCAi MHgwMDAwLTB4N2ZmZjogTWFpbiBjb250cm9sbGVyIG1hcFxuIik7DQo+ID4gKwlkZXZfZXJyKGR3 X2Rldi0+ZGV2LCAiMHg4MDAwLTB4OGZmZjogRGVidWcgcmVnaXN0ZXJzXG4iKTsNCj4gPiArCWRl dl9lcnIoZHdfZGV2LT5kZXYsICIgIDB4ODAwMDogVE1EU1ZBTElEIHdhaXQgY291bnRcbiIpOw0K PiA+ICsJZGV2X2Vycihkd19kZXYtPmRldiwgIiAgMHg4MDAxOiBTVyBzdGF0ZVxuIik7DQo+ID4g KwlkZXZfZXJyKGR3X2Rldi0+ZGV2LCAiICAweDgwMDI6IEVxdWFsaXplciBPTi9PRkZcbiIpOw0K PiA+ICsJZGV2X2Vycihkd19kZXYtPmRldiwgIiAgMHg4MDAzOiBQSFkgVmVyc2lvblxuIik7DQo+ ID4gKwlkZXZfZXJyKGR3X2Rldi0+ZGV2LCAiICAweDgwMDQ6IFZpZGVvIFN0YWJsZSBXYWl0IFRp bWUgKG1zKVxuIik7DQo+ID4gKwlkZXZfZXJyKGR3X2Rldi0+ZGV2LCAiICAweDgwMDU6IENsb2Nr IHdhaXQgdGltZSAobXMpXG4iKTsNCj4gPiArCWRldl9lcnIoZHdfZGV2LT5kZXYsICIgIDB4ODAw NjogaXJlZl9jbGsgdmFsdWVcbiIpOw0KPiA+ICsJZGV2X2Vycihkd19kZXYtPmRldiwgIiAgMHg4 MDA3OiByZXNldF9kYXRhcGF0aF9lbmFibGUgbWFzayB2YWx1ZVxuIik7DQo+ID4gKwlkZXZfZXJy KGR3X2Rldi0+ZGV2LCAiICAweDgwMDg6IGF1ZGlvIHNhbXBsZSBmcmVxdWVuY3kgKHJlYWQgb25s eSlcbiIpOw0KPiA+ICsJZGV2X2Vycihkd19kZXYtPmRldiwgIiAgMHg4MDA5OiBod19yZXNldF9v bl9ob3RfcGx1ZyAoMT1lbmFibGVkLCAwPWRpc2FibGVkKSIpOw0KPiA+ICsJZGV2X2Vycihkd19k ZXYtPmRldiwgIjB4MTAwMDAtMHgxMDBmZjogUEhZIG1hcFxuIik7DQo+ID4gK30NCj4gPiArDQo+ ID4gK3N0YXRpYyBib29sIGR3X2hkbWlfaXNfcmVzZXJ2ZWRfcmVnaXN0ZXIoc3RydWN0IGR3X2hk bWlfZGV2ICpkd19kZXYsIHUzMiByZWcpDQo+ID4gK3sNCj4gPiArCS8qDQo+ID4gKwkgKiBOT1RF OiBTb21lIG9mIHRoZSBIRENQIHJlZ2lzdGVycyBhcmUgd3JpdGUgb25seS4gVGhpcyBtZWFucyB0 aGF0DQo+ID4gKwkgKiBhIHJlYWQgZnJvbSB0aGVzZSByZWdpc3RlcnMgd2lsbCBuZXZlciByZXR1 cm4gYW5kIGNhbiBibG9jayB0aGUgYnVzDQo+ID4gKwkgKiBpbiBzb21lIGFyY2hpdGVjdHVyZXMu IERpc2FibGUgdGhlIHJlYWQgdG8gdGhlc2UgcmVnaXN0ZXJzIGFuZCBhbHNvDQo+ID4gKwkgKiBk aXNhYmxlIHRoZSB3cml0ZSBhcyBhIHNhZmV0eSBtZWFzdXJlIGJlY2F1c2UgdXNlcnNwYWNlIHNo b3VsZCBub3QNCj4gPiArCSAqIGJlIGFibGUgdG8gc2V0IEhEQ1AgcmVnaXN0ZXJzLg0KPiA+ICsJ ICovDQo+ID4gKwlpZiAocmVnID49IERXX0hETUlfSERDUF9DVFJMICYmIHJlZyA8PSBEV19IRE1J X0hEQ1BfU1RTKQ0KPiA+ICsJCXJldHVybiB0cnVlOw0KPiA+ICsJaWYgKHJlZyA9PSBEV19IRE1J X0hEQ1AyMl9DT05UUk9MKQ0KPiA+ICsJCXJldHVybiB0cnVlOw0KPiA+ICsJaWYgKHJlZyA9PSBE V19IRE1JX0hEQ1AyMl9TVEFUVVMpDQo+ID4gKwkJcmV0dXJuIHRydWU7DQo+ID4gKwlyZXR1cm4g ZmFsc2U7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgZHdfaGRtaV9nX3JlZ2lzdGVy KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsDQo+ID4gKwkJCSAgICAgIHN0cnVjdCB2NGwyX2RiZ19y ZWdpc3RlciAqcmVnKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgZHdfaGRtaV9kZXYgKmR3X2RldiA9 IHRvX2R3X2RldihzZCk7DQo+ID4gKw0KPiA+ICsJc3dpdGNoIChyZWctPnJlZyA+PiAxNSkgew0K PiA+ICsJY2FzZSAwOiAvKiBDb250cm9sbGVyIGNvcmUgcmVhZCAqLw0KPiA+ICsJCWlmIChkd19o ZG1pX2lzX3Jlc2VydmVkX3JlZ2lzdGVyKGR3X2RldiwgcmVnLT5yZWcgJiAweDdmZmYpKQ0KPiA+ ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwkJcmVnLT5zaXplID0gNDsNCj4gPiAr CQlyZWctPnZhbCA9IGhkbWlfcmVhZGwoZHdfZGV2LCByZWctPnJlZyAmIDB4N2ZmZik7DQo+ID4g KwkJcmV0dXJuIDA7DQo+ID4gKwljYXNlIDE6IC8qIERlYnVnIHJlZ2lzdGVycyAqLw0KPiA+ICsJ CXJlZy0+c2l6ZSA9IDQ7DQo+ID4gKw0KPiA+ICsJCXN3aXRjaCAocmVnLT5yZWcgJiBHRU5NQVNL KDE0LCAwKSkgew0KPiA+ICsJCWNhc2UgMDoNCj4gPiArCQkJcmVnLT52YWwgPSBkd19kZXYtPnRt ZHNfdmFsaWRfd2FpdF9jb3VudDsNCj4gPiArCQkJcmV0dXJuIDA7DQo+ID4gKwkJY2FzZSAxOg0K PiA+ICsJCQlyZWctPnZhbCA9IGR3X2Rldi0+c3RhdGU7DQo+ID4gKwkJCXJldHVybiAwOw0KPiA+ ICsJCWNhc2UgMjoNCj4gPiArCQkJcmVnLT52YWwgPSBkd19kZXYtPnBoeV9lcV9vbjsNCj4gPiAr CQkJcmV0dXJuIDA7DQo+ID4gKwkJY2FzZSAzOg0KPiA+ICsJCQlyZWctPnZhbCA9IGR3X2Rldi0+ Y29uZmlnLT5waHktPnZlcnNpb247DQo+ID4gKwkJCXJldHVybiAwOw0KPiA+ICsJCWNhc2UgNDoN Cj4gPiArCQkJcmVnLT52YWwgPSBkd19kZXYtPnZpZGVvX3N0YWJsZV93YWl0X21zOw0KPiA+ICsJ CQlyZXR1cm4gMDsNCj4gPiArCQljYXNlIDU6DQo+ID4gKwkJCXJlZy0+dmFsID0gZHdfZGV2LT5o YXNfY2xvY2tfd2FpdF9tczsNCj4gPiArCQkJcmV0dXJuIDA7DQo+ID4gKwkJY2FzZSA2Og0KPiA+ ICsJCQlyZWctPnZhbCA9IGR3X2Rldi0+Y29uZmlnLT5pcmVmX2NsazsNCj4gPiArCQkJcmV0dXJu IDA7DQo+ID4gKwkJY2FzZSA3Og0KPiA+ICsJCQlyZWctPnZhbCA9IGR3X2Rldi0+cmVzZXRfZGF0 YXBhdGhfZW5hYmxlOw0KPiA+ICsJCQlyZXR1cm4gMDsNCj4gPiArCQljYXNlIDg6DQo+ID4gKwkJ CXJlZy0+dmFsID0gZHdfaGRtaV9nZXRfc2FtcGxlX2ZyZXEoZHdfZGV2KTsNCj4gPiArCQkJcmV0 dXJuIDA7DQo+ID4gKwkJY2FzZSA5Og0KPiA+ICsJCQlyZWctPnZhbCA9IGR3X2Rldi0+aHdfcmVz ZXRfb25faG90X3BsdWc7DQo+ID4gKwkJCXJldHVybiAwOw0KPiA+ICsJCWRlZmF1bHQ6DQo+ID4g KwkJCWJyZWFrOw0KPiA+ICsJCX0NCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgMjogLyogUEhZ IHJlYWQgKi8NCj4gPiArCQlpZiAoKHJlZy0+cmVnICYgfjB4ZmYpICE9IEJJVCgxNikpDQo+ID4g KwkJCWJyZWFrOw0KPiA+ICsNCj4gPiArCQlyZWctPnNpemUgPSAyOw0KPiA+ICsJCXJlZy0+dmFs ID0gZHdfaGRtaV9waHlfcmVhZChkd19kZXYsIHJlZy0+cmVnICYgMHhmZik7DQo+ID4gKwkJcmV0 dXJuIDA7DQo+ID4gKwlkZWZhdWx0Og0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJfQ0KPiA+ICsNCj4g PiArCWR3X2hkbWlfaW52YWxpZF9yZWdpc3Rlcihkd19kZXYsIHJlZy0+cmVnKTsNCj4gPiArCXJl dHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGR3X2hkbWlfc19yZWdpc3Rl cihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLA0KPiA+ICsJCQkgICAgICBjb25zdCBzdHJ1Y3QgdjRs Ml9kYmdfcmVnaXN0ZXIgKnJlZykNCj4gPiArew0KPiA+ICsJc3RydWN0IGR3X2hkbWlfZGV2ICpk d19kZXYgPSB0b19kd19kZXYoc2QpOw0KPiA+ICsNCj4gPiArCXN3aXRjaCAocmVnLT5yZWcgPj4g MTUpIHsNCj4gPiArCWNhc2UgMDogLyogQ29udHJvbGxlciBjb3JlIHdyaXRlICovDQo+ID4gKwkJ aWYgKGR3X2hkbWlfaXNfcmVzZXJ2ZWRfcmVnaXN0ZXIoZHdfZGV2LCByZWctPnJlZyAmIDB4N2Zm ZikpDQo+ID4gKwkJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiArCQloZG1pX3dyaXRlbChk d19kZXYsIHJlZy0+dmFsICYgR0VOTUFTSygzMSwgMCksDQo+ID4gKwkJCSAgICByZWctPnJlZyAm IDB4N2ZmZik7DQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4gKwljYXNlIDE6IC8qIERlYnVnIHJlZ2lz dGVycyAqLw0KPiA+ICsJCXN3aXRjaCAocmVnLT5yZWcgJiBHRU5NQVNLKDE0LCAwKSkgew0KPiA+ ICsJCWNhc2UgMDoNCj4gPiArCQkJZHdfZGV2LT50bWRzX3ZhbGlkX3dhaXRfY291bnQgPSByZWct PnZhbDsNCj4gPiArCQkJcmV0dXJuIDA7DQo+ID4gKwkJY2FzZSAxOg0KPiA+ICsJCQlkd19oZG1p X3NldF9zdGF0ZShkd19kZXYsIHJlZy0+dmFsICYgMHhmZik7DQo+ID4gKwkJCXJldHVybiAwOw0K PiA+ICsJCWNhc2UgMjoNCj4gPiArCQkJZHdfZGV2LT5waHlfZXFfb24gPSByZWctPnZhbDsNCj4g PiArCQkJcmV0dXJuIDA7DQo+ID4gKwkJY2FzZSA0Og0KPiA+ICsJCQlkd19kZXYtPnZpZGVvX3N0 YWJsZV93YWl0X21zID0gcmVnLT52YWw7DQo+ID4gKwkJCXJldHVybiAwOw0KPiA+ICsJCWNhc2Ug NToNCj4gPiArCQkJZHdfZGV2LT5oYXNfY2xvY2tfd2FpdF9tcyA9IHJlZy0+dmFsOw0KPiA+ICsJ CQlyZXR1cm4gMDsNCj4gPiArCQljYXNlIDc6DQo+ID4gKwkJCWR3X2Rldi0+cmVzZXRfZGF0YXBh dGhfZW5hYmxlID0gcmVnLT52YWw7DQo+ID4gKwkJCXJldHVybiAwOw0KPiA+ICsJCS8qIGNhc2Ug OCBpcyByZWFkLW9ubHkgKi8NCj4gPiArCQljYXNlIDk6DQo+ID4gKwkJCWR3X2Rldi0+aHdfcmVz ZXRfb25faG90X3BsdWcgPSByZWctPnZhbDsNCj4gPiArCQkJcmV0dXJuIDA7DQo+ID4gKwkJY2Fz ZSA0MDA6DQo+ID4gKwkJCWRldl93YXJuKGR3X2Rldi0+ZGV2LCAic3lubXAgZGVidWcgc2VsZWN0 IHRpbWVvdXRcbiIpOw0KPiA+ICsJCQlyZXR1cm4gMDsNCj4gPiArCQlkZWZhdWx0Og0KPiA+ICsJ CQlicmVhazsNCj4gPiArCQl9DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIDI6IC8qIFBIWSB3 cml0ZSAqLw0KPiA+ICsJCWlmICgocmVnLT5yZWcgJiB+MHhmZikgIT0gQklUKDE2KSkNCj4gPiAr CQkJYnJlYWs7DQo+ID4gKwkJZHdfaGRtaV9waHlfd3JpdGUoZHdfZGV2LCByZWctPnZhbCAmIDB4 ZmZmZiwgcmVnLT5yZWcgJiAweGZmKTsNCj4gPiArCQlyZXR1cm4gMDsNCj4gPiArCWRlZmF1bHQ6 DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJZHdfaGRtaV9pbnZhbGlkX3Jl Z2lzdGVyKGR3X2RldiwgcmVnLT5yZWcpOw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiAr I2VuZGlmDQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGR3X2hkbWlfc3Vic2NyaWJlX2V2ZW50KHN0 cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2ZoICpmaCwNCj4gPiArCQkJCSAgIHN0 cnVjdCB2NGwyX2V2ZW50X3N1YnNjcmlwdGlvbiAqc3ViKQ0KPiA+ICt7DQo+ID4gKwlzd2l0Y2gg KHN1Yi0+dHlwZSkgew0KPiA+ICsJY2FzZSBWNEwyX0VWRU5UX1NPVVJDRV9DSEFOR0U6DQo+ID4g KwkJcmV0dXJuIHY0bDJfc3JjX2NoYW5nZV9ldmVudF9zdWJkZXZfc3Vic2NyaWJlKHNkLCBmaCwg c3ViKTsNCj4gPiArCWRlZmF1bHQ6DQo+ID4gKwkJcmV0dXJuIHY0bDJfY3RybF9zdWJkZXZfc3Vi c2NyaWJlX2V2ZW50KHNkLCBmaCwgc3ViKTsNCj4gPiArCX0NCj4gPiArfQ0KPiA+ICsNCj4gPiAr c3RhdGljIGludCBkd19oZG1pX3JlZ2lzdGVyZWQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkNCj4g PiArew0KPiA+ICsJc3RydWN0IGR3X2hkbWlfZGV2ICpkd19kZXYgPSB0b19kd19kZXYoc2QpOw0K PiA+ICsNCj4gPiArCWR3X2Rldi0+cmVnaXN0ZXJlZCA9IHRydWU7DQo+ID4gKwlyZXR1cm4gMDsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgZHdfaGRtaV91bnJlZ2lzdGVyZWQoc3Ry dWN0IHY0bDJfc3ViZGV2ICpzZCkNCj4gPiArew0KPiA+ICsJc3RydWN0IGR3X2hkbWlfZGV2ICpk d19kZXYgPSB0b19kd19kZXYoc2QpOw0KPiA+ICsNCj4gPiArCWR3X2Rldi0+cmVnaXN0ZXJlZCA9 IGZhbHNlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3Vi ZGV2X2NvcmVfb3BzIGR3X2hkbWlfc2RfY29yZV9vcHMgPSB7DQo+ID4gKwkubG9nX3N0YXR1cyA9 IGR3X2hkbWlfbG9nX3N0YXR1cywNCj4gPiArI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcN Cj4gPiArCS5nX3JlZ2lzdGVyID0gZHdfaGRtaV9nX3JlZ2lzdGVyLA0KPiA+ICsJLnNfcmVnaXN0 ZXIgPSBkd19oZG1pX3NfcmVnaXN0ZXIsDQo+ID4gKyNlbmRpZg0KPiA+ICsJLnN1YnNjcmliZV9l dmVudCA9IGR3X2hkbWlfc3Vic2NyaWJlX2V2ZW50LA0KPiA+ICsJLnVuc3Vic2NyaWJlX2V2ZW50 ID0gdjRsMl9ldmVudF9zdWJkZXZfdW5zdWJzY3JpYmUsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtz dGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyBkd19oZG1pX3NkX3ZpZGVv X29wcyA9IHsNCj4gPiArCS5zX3JvdXRpbmcgPSBkd19oZG1pX3Nfcm91dGluZywNCj4gPiArCS5n X2lucHV0X3N0YXR1cyA9IGR3X2hkbWlfZ19pbnB1dF9zdGF0dXMsDQo+ID4gKwkuZ19mcmFtZV9p bnRlcnZhbCA9IGR3X2hkbWlfZ19mcmFtZV9pbnRlcnZhbCwNCj4gPiArCS5zX2R2X3RpbWluZ3Mg PSBkd19oZG1pX3NfZHZfdGltaW5ncywNCj4gPiArCS5nX2R2X3RpbWluZ3MgPSBkd19oZG1pX2df ZHZfdGltaW5ncywNCj4gPiArCS5xdWVyeV9kdl90aW1pbmdzID0gZHdfaGRtaV9xdWVyeV9kdl90 aW1pbmdzLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1 YmRldl9wYWRfb3BzIGR3X2hkbWlfc2RfcGFkX29wcyA9IHsNCj4gPiArCS5lbnVtX21idXNfY29k ZSA9IGR3X2hkbWlfZW51bV9tYnVzX2NvZGUsDQo+ID4gKwkuZ2V0X2ZtdCA9IGR3X2hkbWlfZ2V0 X2ZtdCwNCj4gPiArCS5zZXRfZm10ID0gZHdfaGRtaV9zZXRfZm10LA0KPiA+ICsJLmdldF9lZGlk ID0gZHdfaGRtaV9nZXRfZWRpZCwNCj4gPiArCS5zZXRfZWRpZCA9IGR3X2hkbWlfc2V0X2VkaWQs DQo+ID4gKwkuZHZfdGltaW5nc19jYXAgPSBkd19oZG1pX2R2X3RpbWluZ3NfY2FwLA0KPiA+ICsJ LmVudW1fZHZfdGltaW5ncyA9IGR3X2hkbWlfZW51bV9kdl90aW1pbmdzLA0KPiA+ICt9Ow0KPiA+ ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgZHdfaGRtaV9zZF9v cHMgPSB7DQo+ID4gKwkuY29yZSA9ICZkd19oZG1pX3NkX2NvcmVfb3BzLA0KPiA+ICsJLnZpZGVv ID0gJmR3X2hkbWlfc2RfdmlkZW9fb3BzLA0KPiA+ICsJLnBhZCA9ICZkd19oZG1pX3NkX3BhZF9v cHMsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2 X2ludGVybmFsX29wcyBkd19oZG1pX2ludGVybmFsX29wcyA9IHsNCj4gPiArCS5yZWdpc3RlcmVk ID0gZHdfaGRtaV9yZWdpc3RlcmVkLA0KPiA+ICsJLnVucmVnaXN0ZXJlZCA9IGR3X2hkbWlfdW5y ZWdpc3RlcmVkLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGludCBkd19oZG1pX3BhcnNl X3BkKHN0cnVjdCBkd19oZG1pX2RldiAqZHdfZGV2KQ0KPiA+ICt7DQo+ID4gKwkvKiBQSFkgYWRk cmVzcyBhbHJlYWR5IGNvbWVzIGZyb20gcGxhdGZvcm0gZGF0YSAqLw0KPiA+ICsJaWYgKCFkd19k ZXYtPmNvbmZpZy0+cGh5LT5qdGFnX2FkZHIpIHsNCj4gPiArCQlkZXZfZXJyKGR3X2Rldi0+ZGV2 LCAibWlzc2luZyBQSFkganRhZyBhZGRyZXNzIGluIFBEXG4iKTsNCj4gPiArCQlyZXR1cm4gLUVJ TlZBTDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBjbG9jayBhbHJlYWR5IGNvbWVzIGZyb20g cGxhdGZvcm0gZGF0YSAqLw0KPiA+ICsJaWYgKCFkd19kZXYtPmNvbmZpZy0+aXJlZl9jbGspIHsN Cj4gPiArCQlkZXZfZXJyKGR3X2Rldi0+ZGV2LCAiaW52YWxpZCBjZmcgY2xvY2sgZnJlcXVlbmN5 IGluIFBEXG4iKTsNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCX0NCj4gPiArDQo+ID4g KwkvKiBQSFkgaW5wdXQgY291bnQgYWxyZWFkeSBjb21lcyBmcm9tIHBsYXRmb3JtIGRhdGEgKi8N Cj4gPiArCWlmICghZHdfZGV2LT5jb25maWctPnBoeS0+aW5wdXRfY291bnQpIHsNCj4gPiArCQlk ZXZfZXJyKGR3X2Rldi0+ZGV2LCAiaW52YWxpZCBQSFkgaW5wdXQgY291bnRcbiIpOw0KPiA+ICsJ CXJldHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGR3X2hkbWlfcGFyc2VfZHQoc3RydWN0IGR3X2hkbWlf ZGV2ICpkd19kZXYpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGh5X25vZGUs ICpucCA9IGR3X2Rldi0+b2Zfbm9kZTsNCj4gPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcG9ydF9u b2RlOw0KPiA+ICsJdTMyIHRtcCA9IDA7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCWlm ICghbnApIHsNCj4gPiArCQlkZXZfZXJyKGR3X2Rldi0+ZGV2LCAibWlzc2luZyBEVCBub2RlXG4i KTsNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBQSFkg cHJvcGVydGllcyBwYXJzaW5nICovDQo+ID4gKwlwaHlfbm9kZSA9IGR3X2hkbWlfZ2V0X3BoeV9v Zl9ub2RlKGR3X2RldiwgTlVMTCk7DQo+ID4gKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihw aHlfbm9kZSwgInJlZyIsICZ0bXApOw0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCWRldl9lcnIo ZHdfZGV2LT5kZXYsICJtaXNzaW5nIFBIWSBqdGFnIGFkZHJlc3MgaW4gRFRcbiIpOw0KPiA+ICsJ CXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJZHdfZGV2LT5jb25maWctPnBoeS0+ anRhZ19hZGRyID0gdG1wICYgMHhmZjsNCj4gPiArDQo+ID4gKwkvKiBHZXQgY29uZmlnIGNsb2Nr IHZhbHVlICovDQo+ID4gKwlkd19kZXYtPmNsayA9IGRldm1fY2xrX2dldChkd19kZXYtPmRldiwg ImNmZyIpOw0KPiA+ICsJaWYgKElTX0VSUihkd19kZXYtPmNsaykpIHsNCj4gPiArCQlkZXZfZXJy KGR3X2Rldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBjZmcgY2xvY2tcbiIpOw0KPiA+ICsJCXJldHVy biBQVFJfRVJSKGR3X2Rldi0+Y2xrKTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXQgPSBjbGtf cHJlcGFyZV9lbmFibGUoZHdfZGV2LT5jbGspOw0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCWRl dl9lcnIoZHdfZGV2LT5kZXYsICJmYWlsZWQgdG8gZW5hYmxlIGNmZyBjbG9ja1xuIik7DQo+ID4g KwkJcmV0dXJuIHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlkd19kZXYtPmNvbmZpZy0+aXJl Zl9jbGsgPSBjbGtfZ2V0X3JhdGUoZHdfZGV2LT5jbGspIC8gMTAwMDAwMFU7DQo+ID4gKwlpZiAo IWR3X2Rldi0+Y29uZmlnLT5pcmVmX2Nsaykgew0KPiA+ICsJCWRldl9lcnIoZHdfZGV2LT5kZXYs ICJpbnZhbGlkIGNmZyBjbG9jayBmcmVxdWVuY3lcbiIpOw0KPiA+ICsJCXJldCA9IC1FSU5WQUw7 DQo+ID4gKwkJZ290byBlcnJfY2xrOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIEdldCBQSFkg aW5wdXQgY291bnQgdGhyb3VnaCB0aGUgcG9ydCBjaGlsZHJlbiBjb3VudCAqLw0KPiA+ICsJcG9y dF9ub2RlID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUocGh5X25vZGUsICJwb3J0Iik7DQo+ID4gKwlk d19kZXYtPmNvbmZpZy0+cGh5LT5pbnB1dF9jb3VudCA9IG9mX2dldF9jaGlsZF9jb3VudChwb3J0 X25vZGUpOw0KPiA+ICsJaWYgKCFkd19kZXYtPmNvbmZpZy0+cGh5LT5pbnB1dF9jb3VudCkgew0K PiA+ICsJCWRldl9lcnIoZHdfZGV2LT5kZXYsICJpbnZhbGlkIFBIWSBpbnB1dCBjb3VudFxuIik7 DQo+ID4gKwkJcmV0ID0gLUVJTlZBTDsNCj4gPiArCQlnb3RvIGVycl9jbGs7DQo+ID4gKwl9DQo+ ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICtlcnJfY2xrOg0KPiA+ICsJY2xrX2Rp c2FibGVfdW5wcmVwYXJlKGR3X2Rldi0+Y2xrKTsNCj4gPiArCXJldHVybiByZXQ7DQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIGR3X2hkbWlfY29uZmlnX2NlZChzdHJ1Y3QgZHdfaGRt aV9kZXYgKmR3X2RldikNCj4gPiArew0KPiA+ICsJaGRtaV9tYXNrX3dyaXRlbChkd19kZXYsIDB4 MWYsIERXX0hETUlfSERNSTIwX0NPTlRST0wsDQo+ID4gKwkJCSBEV19IRE1JX0NUUkxDSEVDS0VO X09GRlNFVCwNCj4gPiArCQkJIERXX0hETUlfVklEREFUQUNIRUNLRU5fTUFTSyB8DQo+ID4gKwkJ CSBEV19IRE1JX0RBVEFJU0NIRUNLRU5fTUFTSyB8DQo+ID4gKwkJCSBEV19IRE1JX0dCQ0hFQ0tF Tl9NQVNLIHwNCj4gPiArCQkJIERXX0hETUlfUFJFQU1CQ0hFQ0tFTl9NQVNLIHwNCj4gPiArCQkJ IERXX0hETUlfQ1RSTENIRUNLRU5fTUFTSyk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2 b2lkIGR3X2hkbWlfY29uZmlnX21vZGVfcmVjb3ZlcihzdHJ1Y3QgZHdfaGRtaV9kZXYgKmR3X2Rl dikNCj4gPiArew0KPiA+ICsJLypOT1RFOiBhdm9pZCBpbnN0YWJpbGl0eSBvZiBtZF9pc3RzIGlu dGVycnVwdHMgKi8NCj4gPiArDQo+ID4gKwkvKiBzZXQgSERNSV9NT0RFX0hZU1QgKi8NCj4gPiAr CWhkbWlfbWFza193cml0ZWwoZHdfZGV2LCAweDEsIERXX0hETUlfTU9ERV9SRUNPVkVSLA0KPiA+ ICsJCQkgRFdfSERNSV9IRE1JX01PREVfSFlTVF9PRkZTRVQsDQo+ID4gKwkJCSBEV19IRE1JX0hE TUlfTU9ERV9IWVNUX01BU0spOw0KPiA+ICsJLyogc2V0IERWSV9NT0RFX0hZU1QgKi8NCj4gPiAr CWhkbWlfbWFza193cml0ZWwoZHdfZGV2LCAweDgsIERXX0hETUlfTU9ERV9SRUNPVkVSLA0KPiA+ ICsJCQkgRFdfSERNSV9EVklfTU9ERV9IWVNUX09GRlNFVCwNCj4gPiArCQkJIERXX0hETUlfRFZJ X01PREVfSFlTVF9NQVNLKTsNCj4gPiArCS8qIHNldCBTUElLRV9GSUxURVJfRU4gKi8NCj4gPiAr CWhkbWlfbWFza193cml0ZWwoZHdfZGV2LCAweDEsIERXX0hETUlfTU9ERV9SRUNPVkVSLA0KPiA+ ICsJCQkgRFdfSERNSV9TUElLRV9GSUxURVJfRU5fT0ZGU0VULA0KPiA+ICsJCQkgRFdfSERNSV9T UElLRV9GSUxURVJfRU5fTUFTSyk7DQo+ID4gKw0KPiA+ICsJLyogZW5hYmxlIEJDSCBlcnJvciBj b3JyZWN0aW9uICovDQo+ID4gKwloZG1pX21hc2tfd3JpdGVsKGR3X2RldiwgMHgxLCBEV19IRE1J X1BERUNfQ1RSTCwNCj4gPiArCQkJIERXX0hETUlfUERFQ19CQ0hfRU5fT0ZGU0VULA0KPiA+ICsJ CQkgRFdfSERNSV9QREVDX0JDSF9FTl9NQVNLKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj IHZvaWQgZHdfaGRtaV9jb25maWdfc2NkYyhzdHJ1Y3QgZHdfaGRtaV9kZXYgKmR3X2RldikNCj4g PiArew0KPiA+ICsJdTMyIGNobG9jayA9IGR3X2Rldi0+Y29uZmlnLT5pcmVmX2NsayAqIDEwMDA7 DQo+ID4gKw0KPiA+ICsJLyogc2V0IEhETUlfQ0hMT0NLX0NPTkZJRyAqLw0KPiA+ICsJaGRtaV9t YXNrX3dyaXRlbChkd19kZXYsIGNobG9jaywgRFdfSERNSV9DSExPQ0tfQ09ORklHLA0KPiA+ICsJ CQkgRFdfSERNSV9NSUxJU0VDVElNRVJMSU1JVF9PRkZTRVQsDQo+ID4gKwkJCSBEV19IRE1JX01J TElTRUNUSU1FUkxJTUlUX01BU0spOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBk d19oZG1pX2NvbmZpZ19jZWF2aWQoc3RydWN0IGR3X2hkbWlfZGV2ICpkd19kZXYpDQo+ID4gK3sN Cj4gPiArCS8qIHNldCBDRUEgWUNDIDQyMiBJUEkgTWFwcGluZyAqLw0KPiA+ICsJaGRtaV9tYXNr X3dyaXRlbChkd19kZXYsIDB4MSwgRFdfSERNSV9DRUFWSURfQ09ORklHLA0KPiA+ICsJCQkgRFdf SERNSV9DRUFWSURfWUNDNDIyX0lQSU1BUF9PRkZTRVQsDQo+ID4gKwkJCSBEV19IRE1JX0NFQVZJ RF9ZQ0M0MjJfSVBJTUFQX01BU0spOw0KPiA+ICsJLyogc2V0IENFQSBZQ0MgNDIwIElQSSBNYXBw aW5nICovDQo+ID4gKwloZG1pX21hc2tfd3JpdGVsKGR3X2RldiwgMHgxLCBEV19IRE1JX0NFQVZJ RF9DT05GSUcsDQo+ID4gKwkJCSBEV19IRE1JX0NFQVZJRF9ZQ0M0MjBfSVBJTUFQX09GRlNFVCwN Cj4gPiArCQkJIERXX0hETUlfQ0VBVklEX1lDQzQyMF9JUElNQVBfTUFTSyk7DQo+ID4gK30NCj4g PiArDQo+ID4gK3N0YXRpYyBpbnQgZHdfaGRtaV9pbml0aWFsX2NvbmZpZyhzdHJ1Y3QgZHdfaGRt aV9kZXYgKmR3X2RldiwgdTMyIGlucHV0KQ0KPiA+ICt7DQo+ID4gKwkvKiBkaXNhYmxlIGludGVy cnVwdHMgKi8NCj4gPiArCWR3X2hkbWlfZGlzYWJsZV9pbnRzKGR3X2Rldik7DQo+ID4gKwkvKiBE aXNhYmxlIEhQRCAqLw0KPiA+ICsJZHdfaGRtaV9kaXNhYmxlX2hwZChkd19kZXYpOw0KPiA+ICsN Cj4gPiArCS8qIHNlbGVjdCBQSFkgcG9ydCAqLw0KPiA+ICsJaGRtaV9tYXNrX3dyaXRlbChkd19k ZXYsIGlucHV0LCBEV19IRE1JX1BIWV9DVFJMLA0KPiA+ICsJCQkgRFdfSERNSV9QT1JUU0VMRUNU X09GRlNFVCwNCj4gPiArCQkJIERXX0hETUlfUE9SVFNFTEVDVF9NQVNLKTsNCj4gPiArDQo+ID4g KwkvKiBjZWQgKi8NCj4gPiArCWR3X2hkbWlfY29uZmlnX2NlZChkd19kZXYpOw0KPiA+ICsNCj4g PiArCS8qIEhETUkgcmVjb3ZlciBjb25maWd1cmF0aW9ucyAqLw0KPiA+ICsJZHdfaGRtaV9jb25m aWdfbW9kZV9yZWNvdmVyKGR3X2Rldik7DQo+ID4gKw0KPiA+ICsJLyogc2NkYyBjb25maWd1cmF0 aW9ucyAqLw0KPiA+ICsJZHdfaGRtaV9jb25maWdfc2NkYyhkd19kZXYpOw0KPiA+ICsNCj4gPiAr CS8qIGNlYXZpZCBjb25maWd1cmF0aW9uICovDQo+ID4gKwlkd19oZG1pX2NvbmZpZ19jZWF2aWQo ZHdfZGV2KTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3Rh dGljIGludCBkd19oZG1pX3J4X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ ID4gK3sNCj4gPiArCWNvbnN0IHN0cnVjdCB2NGwyX2R2X3RpbWluZ3MgdGltaW5nc19kZWYgPSBE V19IRE1JX0RFRkFVTFRfVElNSU5HOw0KPiA+ICsJc3RydWN0IGR3X2hkbWlfcnhfcGRhdGEgKnBk YXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7DQo+ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYg PSAmcGRldi0+ZGV2Ow0KPiA+ICsJc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpoZGw7DQo+ID4g KwlzdHJ1Y3QgZHdfaGRtaV9kZXYgKmR3X2RldjsNCj4gPiArCXN0cnVjdCB2NGwyX3N1YmRldiAq c2Q7DQo+ID4gKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsNCj4gPiArCXUzMiBpbnB1dF9jb3VudDsN Cj4gPiArCXVuc2lnbmVkIGludCBpOw0KPiA+ICsJaW50IHJldCwgaXJxOw0KPiA+ICsNCj4gPiAr CS8qIFJlc291cmNlIGFsbG9jYXRpb24gKi8NCj4gPiArCWR3X2RldiA9IGRldm1fa3phbGxvYyhk ZXYsIHNpemVvZigqZHdfZGV2KSwgR0ZQX0tFUk5FTCk7DQo+ID4gKwlpZiAoIWR3X2RldikNCj4g PiArCQlyZXR1cm4gLUVOT01FTTsNCj4gPiArDQo+ID4gKwkvKiBSZXNvdXJjZSBpbml0aWFsaXph dGlvbiAqLw0KPiA+ICsJaWYgKCFwZGF0YSkgew0KPiA+ICsJCWRldl9lcnIoZGV2LCAibWlzc2lu ZyBwbGF0Zm9ybSBkYXRhXG4iKTsNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCX0NCj4g PiArDQo+ID4gKwlkd19kZXYtPmRldiA9IGRldjsNCj4gPiArCWR3X2Rldi0+Y29uZmlnID0gcGRh dGE7DQo+ID4gKwlkd19kZXYtPnN0YXRlID0gSERNSV9TVEFURV9OT19JTklUOw0KPiA+ICsJZHdf ZGV2LT5vZl9ub2RlID0gZGV2LT5vZl9ub2RlOw0KPiA+ICsJZHdfZGV2LT50bWRzX3ZhbGlkX3dh aXRfY291bnQgPSAxMDA7DQo+ID4gKwlkd19kZXYtPmhhc19jbG9ja193YWl0X21zID0gMjAwOw0K PiA+ICsJZHdfZGV2LT52aWRlb19zdGFibGVfd2FpdF9tcyA9IDIwMDsNCj4gPiArCWR3X2Rldi0+ cmVzZXRfZGF0YXBhdGhfZW5hYmxlID0gMHhGRkZGRkZGRjsNCj4gPiArCWR3X2Rldi0+cGh5X2Vx X29uID0gdHJ1ZTsNCj4gPiArCWR3X2Rldi0+aHdfcmVzZXRfb25faG90X3BsdWcgPSAxOw0KPiA+ ICsJc3Bpbl9sb2NrX2luaXQoJmR3X2Rldi0+bG9jayk7DQo+ID4gKwlzcGluX2xvY2tfaW5pdCgm ZHdfZGV2LT5ldmVudF9sb2NrKTsNCj4gPiArDQo+ID4gKwlpZiAoZHdfaGRtaV9oYXNfZHQoZHdf ZGV2KSkgew0KPiA+ICsJCS8qIGluaXQgUEhZIGJhc2VkIG9uIGRldmljZSB0cmVlICovDQo+ID4g KwkJcmV0ID0gZHdfaGRtaV9wYXJzZV9kdChkd19kZXYpOw0KPiA+ICsJfSBlbHNlIHsNCj4gPiAr CQkvKiBpbml0IFBIWSBiYXNlZCBvbiBwbGF0Zm9ybSBkYXRhICovDQo+ID4gKwkJcmV0ID0gZHdf aGRtaV9wYXJzZV9wZChkd19kZXYpOw0KPiA+ICsJfQ0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQly ZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArCWlucHV0X2NvdW50ID0gZHdfZGV2LT5jb25maWctPnBo eS0+aW5wdXRfY291bnQ7DQo+ID4gKw0KPiA+ICsJZHdfZGV2LT5jdXJyX2VkaWRfYmxvY2tzID0N Cj4gPiArCQlkZXZtX2t6YWxsb2MoZGV2LA0KPiA+ICsJCQkgICAgIHNpemVvZigqZHdfZGV2LT5j dXJyX2VkaWRfYmxvY2tzKSAqIGlucHV0X2NvdW50LA0KPiA+ICsJCQkgICAgIEdGUF9LRVJORUwp Ow0KPiA+ICsJaWYgKCFkd19kZXYtPmN1cnJfZWRpZF9ibG9ja3MpDQo+ID4gKwkJcmV0dXJuIC1F Tk9NRU07DQo+ID4gKw0KPiA+ICsJZHdfZGV2LT5pbnB1dF9jb25uZWN0ZWQgPQ0KPiA+ICsJCWRl dm1fa3phbGxvYyhkZXYsDQo+ID4gKwkJCSAgICAgc2l6ZW9mKCpkd19kZXYtPmlucHV0X2Nvbm5l Y3RlZCkgKiBpbnB1dF9jb3VudCwNCj4gPiArCQkJICAgICBHRlBfS0VSTkVMKTsNCj4gPiArCWlm ICghZHdfZGV2LT5pbnB1dF9jb25uZWN0ZWQpDQo+ID4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ID4g Kw0KPiA+ICsJLyogRGVmZXJyZWQgd29yayAqLw0KPiA+ICsJZHdfZGV2LT53cSA9IGNyZWF0ZV9z aW5nbGV0aHJlYWRfd29ya3F1ZXVlKERXX0hETUlfUlhfRFJWTkFNRSk7DQo+ID4gKwlpZiAoIWR3 X2Rldi0+d3EpIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBjcmVhdGUgd29ya3F1 ZXVlXG4iKTsNCj4gPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwly ZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOw0KPiA+ ICsJZHdfZGV2LT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsNCj4gPiAr CWlmIChJU19FUlIoZHdfZGV2LT5yZWdzKSkgew0KPiA+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVk IHRvIHJlbWFwIHJlc291cmNlXG4iKTsNCj4gPiArCQlyZXQgPSBQVFJfRVJSKGR3X2Rldi0+cmVn cyk7DQo+ID4gKwkJZ290byBlcnJfd3E7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogRGlzYWJs ZSA1ViBhbmQgd3JpdGUgRURJRCAqLw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IGlucHV0X2NvdW50 OyBpKyspIHsNCj4gPiArCQlkd19kZXYtPmN1cnJfZWRpZF9ibG9ja3NbaV0gPSBBUlJBWV9TSVpF KGR3X2hkbWlfZWRpZCkgLyAzMjsNCj4gPiArCQlkd19oZG1pXzV2X2Rpc2FibGUoZHdfZGV2LCBp KTsNCj4gPiArCQlpZiAoZHdfaGRtaV9lZGlkXzRibG9ja3NfbGUoZHdfZGV2KSkgew0KPiA+ICsJ CQkvKiBsaXR0bGUgZW5kaWFuIHJlcHJlc2VudGF0aW9uLCBuZWVkcyB0byBpbnZlcnQgKi8NCj4g PiArCQkJcmV0ID0gZHdfaGRtaV91cGRhdGVfZWRpZChkd19kZXYsIGksICh1OCAqKWR3X2hkbWlf ZWRpZCwNCj4gPiArCQkJCQkJICBBUlJBWV9TSVpFKGR3X2hkbWlfZWRpZCkgKg0KPiA+ICsJCQkJ CQkJc2l6ZW9mKHUzMiksDQo+ID4gKwkJCQkJCSAgdHJ1ZSk7DQo+ID4gKwkJfSBlbHNlIHsNCj4g PiArCQkJLyogbm8gbmVlZCB0byBpbnZlcnQgKi8NCj4gPiArCQkJcmV0ID0gZHdfaGRtaV91cGRh dGVfZWRpZChkd19kZXYsIGksICh1OCAqKWR3X2hkbWlfZWRpZCwNCj4gPiArCQkJCQkJICBBUlJB WV9TSVpFKGR3X2hkbWlfZWRpZCkgKg0KPiA+ICsJCQkJCQkJc2l6ZW9mKHUzMiksDQo+ID4gKwkJ CQkJCSAgZmFsc2UpOw0KPiA+ICsJCX0NCj4gDQo+IFRoaXMgc2hvdWxkIGJlIGRyb3BwZWQsIHN0 YXJ0IHdpdGggYW4gZW1wdHkgRURJRCBhbmQgcHVsbCB0aGUgSFBEIGxvdy4NCj4gDQoNCkkgYWdy ZWUhIFRoaXMgd2lsbCBiZSBhZGRyZXNzZWQgaW4gdGhlIG5leHQgcGF0Y2ggc2VyaWVzLg0KDQo+ ID4gKwkJaWYgKHJldCkNCj4gPiArCQkJZ290byBlcnJfd3E7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ ICsJZHdfaGRtaV9pbml0aWFsX2NvbmZpZyhkd19kZXYsIDApOw0KPiA+ICsNCj4gPiArCWlycSA9 IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7DQo+ID4gKwlpZiAoaXJxIDwgMCkgew0KPiA+ICsJ CXJldCA9IGlycTsNCj4gPiArCQlnb3RvIGVycl93cTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwly ZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRldiwgaXJxLCBOVUxMLCBkd19oZG1pX2ly cV9oYW5kbGVyLA0KPiA+ICsJCQkJCUlSUUZfT05FU0hPVCwgRFdfSERNSV9SWF9EUlZOQU1FLA0K PiA+ICsJCQkJCWR3X2Rldik7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCWdvdG8gZXJyX3dxOw0K PiA+ICsNCj4gPiArCS8qIFY0TDIgaW5pdGlhbGl6YXRpb24gKi8NCj4gPiArCXNkID0gJmR3X2Rl di0+c2Q7DQo+ID4gKwl2NGwyX3N1YmRldl9pbml0KHNkLCAmZHdfaGRtaV9zZF9vcHMpOw0KPiA+ ICsJc3Ryc2NweShzZC0+bmFtZSwgZGV2X25hbWUoZGV2KSwgc2l6ZW9mKHNkLT5uYW1lKSk7DQo+ ID4gKwlzZC0+ZGV2ID0gZGV2Ow0KPiA+ICsJc2QtPmludGVybmFsX29wcyA9ICZkd19oZG1pX2lu dGVybmFsX29wczsNCj4gPiArCXNkLT5mbGFncyB8PSBWNEwyX1NVQkRFVl9GTF9IQVNfRVZFTlRT IHwgVjRMMl9TVUJERVZfRkxfSEFTX0RFVk5PREU7DQo+ID4gKw0KPiA+ICsJLyogQ29udHJvbCBo YW5kbGVycyAqLw0KPiA+ICsJaGRsID0gJmR3X2Rldi0+aGRsOw0KPiA+ICsJdjRsMl9jdHJsX2hh bmRsZXJfaW5pdChoZGwsIDEpOw0KPiA+ICsJZHdfZGV2LT5kZXRlY3RfdHhfNXZfY3RybCA9DQo+ ID4gKwkJdjRsMl9jdHJsX25ld19zdGQoaGRsLCBOVUxMLCBWNEwyX0NJRF9EVl9SWF9QT1dFUl9Q UkVTRU5ULCAwLA0KPiA+ICsJCQkJICBCSVQoNCkgLSAxLCAwLCAwKTsNCj4gPiArDQo+ID4gKwlz ZC0+Y3RybF9oYW5kbGVyID0gaGRsOw0KPiA+ICsJaWYgKGhkbC0+ZXJyb3IpIHsNCj4gPiArCQly ZXQgPSBoZGwtPmVycm9yOw0KPiA+ICsJCWdvdG8gZXJyX2hkbDsNCj4gPiArCX0NCj4gPiArDQo+ ID4gKwkvKiBXYWl0IGZvciBjdHJsIGhhbmRsZXIgcmVnaXN0ZXIgYmVmb3JlIHJlcXVlc3Rpbmcg NXYgaW50ZXJydXB0ICovDQo+ID4gKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDEpOw0K PiA+ICsJaWYgKGlycSA8IDApIHsNCj4gPiArCQlyZXQgPSBpcnE7DQo+ID4gKwkJZ290byBlcnJf aGRsOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9p cnEoZGV2LCBpcnEsIGR3X2hkbWlfNXZfaGFyZF9pcnFfaGFuZGxlciwNCj4gPiArCQkJCQlkd19o ZG1pXzV2X2lycV9oYW5kbGVyLCBJUlFGX09ORVNIT1QsDQo+ID4gKwkJCQkJRFdfSERNSV9SWF9E UlZOQU1FICItNXYtaGFuZGxlciIsDQo+ID4gKwkJCQkJZHdfZGV2KTsNCj4gPiArCWlmIChyZXQp DQo+ID4gKwkJZ290byBlcnJfaGRsOw0KPiA+ICsNCj4gPiArCS8qIFBIWSBsb2FkaW5nICovDQo+ ID4gKwlyZXQgPSBkd19oZG1pX3BoeV9pbml0KGR3X2Rldik7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ ICsJCWdvdG8gZXJyX3BoeV9leGl0Ow0KPiA+ICsNCj4gPiArCXJldCA9IHY0bDJfYXN5bmNfcmVn aXN0ZXJfc3ViZGV2KHNkKTsNCj4gPiArCWlmIChyZXQpIHsNCj4gPiArCQlkZXZfZXJyKGRldiwg ImZhaWxlZCB0byByZWdpc3RlciBzdWJkZXZcbiIpOw0KPiA+ICsJCWdvdG8gZXJyX3BoeV9leGl0 Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIEZpbGwgaW5pdGlhbCBmb3JtYXQgc2V0dGluZ3Mg Ki8NCj4gPiArCWR3X2Rldi0+dGltaW5ncyA9IHRpbWluZ3NfZGVmOw0KPiA+ICsJZHdfZGV2LT5t YnVzX2NvZGUgPSBNRURJQV9CVVNfRk1UX0JHUjg4OF8xWDI0Ow0KPiA+ICsNCj4gPiArCWRldl9z ZXRfZHJ2ZGF0YShkZXYsIHNkKTsNCj4gPiArCWR3X2Rldi0+c3RhdGUgPSBIRE1JX1NUQVRFX1BP V0VSX09GRjsNCj4gPiArCWR3X2Rldi0+aXNfaGRtaTIgPSBpc19oZG1pMihkd19kZXYpOw0KPiA+ ICsJZHdfZGV2LT5pc19zY3JhbWJsZWQgPSBpc19zY3JhbWJsZWQoZHdfZGV2KTsNCj4gPiArCWRl dl9pbmZvKGRldiwgInVzaW5nIFBIWTogJXMgKEdFTiVkKVxuIiwgcGRhdGEtPnBoeS0+bmFtZSwN Cj4gPiArCQkgcGRhdGEtPnBoeS0+Z2VuKTsNCj4gPiArCWRldl9pbmZvKGRldiwgIkhETUkgbW9k ZT0lc1xuIiwgZHdfZGV2LT5pc19oZG1pMiA/ICIyLngiIDogIjEuNCIpOw0KPiA+ICsNCj4gPiAr CS8qIFNldCBpbml0aWFsIGlucHV0LCBpZiBhbnkgKi8NCj4gPiArCXJldCA9IGR3X2hkbWlfZGV0 ZWN0X3R4XzV2X2N0cmwoZHdfZGV2KTsNCj4gPiArCWlmIChyZXQpIHsNCj4gPiArCQlkZXZfZXJy KGRldiwgImZhaWxlZCB0byBzZXQgNVYgY3RybCBpbml0aWFsIHZhbHVlXG4iKTsNCj4gPiArCQln b3RvIGVycl9zdWJkZXY7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJZGV2X2luZm8oZGV2LCAic2Vs ZWN0ZWRfaW5wdXQ9JWQsIHN0YXRlPSVzXG4iLA0KPiA+ICsJCSBkd19kZXYtPnNlbGVjdGVkX2lu cHV0LCBnZXRfc3RhdGVfbmFtZShkd19kZXYtPnN0YXRlKSk7DQo+ID4gKw0KPiA+ICsJZm9yIChp ID0gMDsgaSA8IGlucHV0X2NvdW50OyBpKyspDQo+ID4gKwkJZHdfaGRtaV81dl9lbmFibGUoZHdf ZGV2LCBpKTsNCj4gPiArDQo+ID4gKwlkZXZfZGJnKGRldiwgImRyaXZlciBwcm9iZWRcbiIpOw0K PiA+ICsJcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICtlcnJfc3ViZGV2Og0KPiA+ICsJdjRsMl9hc3lu Y191bnJlZ2lzdGVyX3N1YmRldihzZCk7DQo+ID4gK2Vycl9waHlfZXhpdDoNCj4gPiArCWR3X2hk bWlfcGh5X2V4aXQoZHdfZGV2KTsNCj4gPiArZXJyX2hkbDoNCj4gPiArCXY0bDJfY3RybF9oYW5k bGVyX2ZyZWUoaGRsKTsNCj4gPiArZXJyX3dxOg0KPiA+ICsJZGVzdHJveV93b3JrcXVldWUoZHdf ZGV2LT53cSk7DQo+ID4gKwlpZiAoZHdfZGV2LT5jbGspDQo+ID4gKwkJY2xrX2Rpc2FibGVfdW5w cmVwYXJlKGR3X2Rldi0+Y2xrKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtzdGF0aWMgaW50IGR3X2hkbWlfcnhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5k ZXY7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7 DQo+ID4gKwlzdHJ1Y3QgZHdfaGRtaV9kZXYgKmR3X2RldiA9IHRvX2R3X2RldihzZCk7DQo+ID4g Kwl1bnNpZ25lZCBpbnQgaSwgaW5wdXRfY291bnQgPSBkd19kZXYtPmNvbmZpZy0+cGh5LT5pbnB1 dF9jb3VudDsNCj4gPiArDQo+ID4gKwlkd19oZG1pX2Rpc2FibGVfaW50cyhkd19kZXYpOw0KPiA+ ICsJZHdfaGRtaV9kaXNhYmxlX2hwZChkd19kZXYpOw0KPiA+ICsJZHdfaGRtaV9kaXNhYmxlX3Nj ZGMoZHdfZGV2KTsNCj4gPiArCWR3X2hkbWlfcG93ZXJfb2ZmKGR3X2Rldik7DQo+ID4gKwlwaHlf cG93ZXJfb2ZmKGR3X2Rldi0+cGh5KTsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCBpbnB1dF9jb3Vu dDsgaSsrKQ0KPiA+ICsJCWR3X2hkbWlfNXZfZGlzYWJsZShkd19kZXYsIGkpOw0KPiA+ICsJZmx1 c2hfd29ya3F1ZXVlKGR3X2Rldi0+d3EpOw0KPiA+ICsJZGVzdHJveV93b3JrcXVldWUoZHdfZGV2 LT53cSk7DQo+ID4gKwlkd19oZG1pX3BoeV9leGl0KGR3X2Rldik7DQo+ID4gKwl2NGwyX2N0cmxf aGFuZGxlcl9mcmVlKHNkLT5jdHJsX2hhbmRsZXIpOw0KPiA+ICsJY2xrX2Rpc2FibGVfdW5wcmVw YXJlKGR3X2Rldi0+Y2xrKTsNCj4gPiArCWRldl9kYmcoZGV2LCAiZHJpdmVyIHJlbW92ZWRcbiIp Ow0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3Qgb2ZfZGV2aWNlX2lkIGR3X2hkbWlfcnhfaWRbXSA9IHsNCj4gPiArCXsgLmNvbXBhdGlibGUg PSAic25wcyxkdy1oZG1pLXJ4IiB9LA0KPiA+ICsJeyB9LA0KPiA+ICt9Ow0KPiA+ICtNT0RVTEVf REVWSUNFX1RBQkxFKG9mLCBkd19oZG1pX3J4X2lkKTsNCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1 Y3QgcGxhdGZvcm1fZHJpdmVyIGR3X2hkbWlfcnhfZHJpdmVyID0gew0KPiA+ICsJLnByb2JlID0g ZHdfaGRtaV9yeF9wcm9iZSwNCj4gPiArCS5yZW1vdmUgPSBkd19oZG1pX3J4X3JlbW92ZSwNCj4g PiArCS5kcml2ZXIgPSB7DQo+ID4gKwkJLm5hbWUgPSBEV19IRE1JX1JYX0RSVk5BTUUsDQo+ID4g KwkJLm9mX21hdGNoX3RhYmxlID0gZHdfaGRtaV9yeF9pZCwNCj4gPiArCX0NCj4gPiArfTsNCj4g PiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihkd19oZG1pX3J4X2RyaXZlcik7DQo+ID4gKw0KPiA+ ICtNT0RVTEVfQVVUSE9SKCJKb3NlIEFicmV1IDxqb3NlLmFicmV1QHN5bm9wc3lzLmNvbT4iKTsN Cj4gPiArTU9EVUxFX0FVVEhPUigiTmVsc29uIENvc3RhIDxuZWxzb24uY29zdGFAc3lub3BzeXMu Y29tPiIpOw0KPiA+ICtNT0RVTEVfREVTQ1JJUFRJT04oIkRlc2lnbldhcmUgSERNSSBSZWNlaXZl ciBEcml2ZXIiKTsNCj4gPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOw0KPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2R3Yy9kdy1oZG1pLXJ4LmggYi9kcml2ZXJzL21lZGlh L3BsYXRmb3JtL2R3Yy9kdy1oZG1pLXJ4LmgNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+ IGluZGV4IDAwMDAwMDAuLmYwZWExZDQNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJp dmVycy9tZWRpYS9wbGF0Zm9ybS9kd2MvZHctaGRtaS1yeC5oDQo+ID4gQEAgLTAsMCArMSw0NzYg QEANCj4gPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8NCj4gPiArLyoN Cj4gPiArICogQ29weXJpZ2h0IChjKSAyMDE4IC0gcHJlc2VudCBTeW5vcHN5cywgSW5jLiBhbmQv b3IgaXRzIGFmZmlsaWF0ZXMuDQo+ID4gKyAqIFN5bm9wc3lzIERlc2lnbldhcmUgSERNSSBSZWNl aXZlciBjb250cm9sbGVyIGRyaXZlcg0KPiA+ICsgKg0KPiA+ICsgKiBBdXRob3I6IEpvc2UgQWJy ZXUgPGpvc2UuYWJyZXVAc3lub3BzeXMuY29tPg0KPiA+ICsgKiBBdXRob3I6IE5lbHNvbiBDb3N0 YSA8bmVsc29uLmNvc3RhQHN5bm9wc3lzLmNvbT4NCj4gPiArICovDQo+ID4gKw0KPiA+ICsjaWZu ZGVmIF9fRFdfSERNSV9SWF9IX18NCj4gPiArI2RlZmluZSBfX0RXX0hETUlfUlhfSF9fDQo+ID4g Kw0KPiA+ICsjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+DQo+ID4gKw0KPiA+ICsvKiBpZF9oZG1p IFJlZ2lzdGVycyAqLw0KPiA+ICsjZGVmaW5lIERXX0hETUlfU0VUVVBfQ1RSTAkJCTB4MDAwMA0K PiA+ICsjZGVmaW5lIERXX0hETUlfSE9UX1BMVUdfREVURUNUX0lOUFVUX1hfTUFTSwlHRU5NQVNL KDI3LCAyNCkNCj4gPiArI2RlZmluZSBEV19IRE1JX0hPVF9QTFVHX0RFVEVDVF9JTlBVVF9YX09G RlNFVAkyNA0KPiA+ICsjZGVmaW5lIERXX0hETUlfSERNSUJVU19SRVNFVF9PVlJfRU5fTUFTSwlC SVQoMjEpDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9IRE1JQlVTX1JFU0VUX09WUl9FTl9PRkZTRVQJ MjENCj4gPiArI2RlZmluZSBEV19IRE1JX0JVU19SRVNFVF9PVlJfTUFTSwkJQklUKDIwKQ0KPiA+ ICsjZGVmaW5lIERXX0hETUlfQlVTX1JFU0VUX09WUl9PRkZTRVQJCTIwDQo+ID4gKyNkZWZpbmUg RFdfSERNSV9IRE1JX1JFU0VUX09WUl9NQVNLCQlCSVQoMTkpDQo+ID4gKyNkZWZpbmUgRFdfSERN SV9IRE1JX1JFU0VUX09WUl9PRkZTRVQJCTE5DQo+ID4gKyNkZWZpbmUgRFdfSERNSV9QT05fUkVT RVRfT1ZSX01BU0sJCUJJVCgxOCkNCj4gPiArI2RlZmluZSBEV19IRE1JX1BPTl9SRVNFVF9PVlJf T0ZGU0VUCQkxOA0KPiA+ICsjZGVmaW5lIERXX0hETUlfUkVTRVRfT1ZSX01BU0sJCQlCSVQoMTcp DQo+ID4gKyNkZWZpbmUgRFdfSERNSV9SRVNFVF9PVlJfT0ZGU0VUCQkxNw0KPiA+ICsjZGVmaW5l IERXX0hETUlfUkVTRVRfT1ZSX0VOX01BU0sJCUJJVCgxNikNCj4gPiArI2RlZmluZSBEV19IRE1J X1JFU0VUX09WUl9FTl9PRkZTRVQJCTE2DQo+ID4gKyNkZWZpbmUgRFdfSERNSV9FUV9PU01fT1ZS X01BU0sJCQlCSVQoMTUpDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9FUV9PU01fT1ZSX09GRlNFVAkJ MTUNCj4gPiArI2RlZmluZSBEV19IRE1JX0VRX09TTV9PVlJfRU5fTUFTSwkJQklUKDE0KQ0KPiA+ ICsjZGVmaW5lIERXX0hETUlfRVFfT1NNX09WUl9FTl9PRkZTRVQJCTE0DQo+ID4gKyNkZWZpbmUg RFdfSERNSV9OT1dBSVRfQUNUSVZJVFlfTUFTSwkJQklUKDEzKQ0KPiA+ICsjZGVmaW5lIERXX0hE TUlfTk9XQUlUX0FDVElWSVRZX09GRlNFVAkJMTMNCj4gPiArI2RlZmluZSBEV19IRE1JX0VRX0NB TF9USU1FX01BU0sJCUdFTk1BU0soMTIsIDcpDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9FUV9DQUxf VElNRV9PRkZTRVQJCTcNCj4gPiArI2RlZmluZSBEV19IRE1JX1VTRV9QTExfTE9DS19NQVNLCQlC SVQoNikNCj4gPiArI2RlZmluZSBEV19IRE1JX1VTRV9QTExfTE9DS19PRkZTRVQJCTYNCj4gPiAr I2RlZmluZSBEV19IRE1JX0ZPUkNFX1NUQVRFX01BU0sJCUJJVCg1KQ0KPiA+ICsjZGVmaW5lIERX X0hETUlfRk9SQ0VfU1RBVEVfT0ZGU0VUCQk1DQo+ID4gKyNkZWZpbmUgRFdfSERNSV9UQVJHRVRf U1RBVEVfTUFTSwkJR0VOTUFTSyg0LCAxKQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfVEFSR0VUX1NU QVRFX09GRlNFVAkJMQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfSE9UX1BMVUdfREVURUNUX01BU0sJ CUJJVCgwKQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfSE9UX1BMVUdfREVURUNUX09GRlNFVAkJMA0K PiA+ICsNCj4gPiArI2RlZmluZSBEV19IRE1JX1BMTF9MQ0tfU1RTCQkJMHgwMDMwDQo+ID4gKyNk ZWZpbmUgRFdfSERNSV9QTExfTE9DS0VECQkJQklUKDApDQo+ID4gKw0KPiA+ICsjZGVmaW5lIERX X0hETUlfTU9ERV9SRUNPVkVSCQkJMHgwMDgwDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9TUElLRV9G SUxURVJfRU5fTUFTSwkJQklUKDE4KQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfU1BJS0VfRklMVEVS X0VOX09GRlNFVAkJMTgNCj4gPiArI2RlZmluZSBEV19IRE1JX0RWSV9NT0RFX0hZU1RfTUFTSwkJ R0VOTUFTSygxNywgMTMpDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9EVklfTU9ERV9IWVNUX09GRlNF VAkJMTMNCj4gPiArI2RlZmluZSBEV19IRE1JX0hETUlfTU9ERV9IWVNUX01BU0sJCUdFTk1BU0so MTIsIDgpDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9IRE1JX01PREVfSFlTVF9PRkZTRVQJCTgNCj4g PiArDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9DS01fRVZMVE0JCQkweDAwOTQNCj4gPiArI2RlZmlu ZSBEV19IRE1JX0xPQ0tfSFlTVF9NQVNLCQkJR0VOTUFTSygyMSwgMjApDQo+ID4gKyNkZWZpbmUg RFdfSERNSV9MT0NLX0hZU1RfT0ZGU0VUCQkyMA0KPiA+ICsjZGVmaW5lIERXX0hETUlfQ0xLX0hZ U1RfTUFTSwkJCUdFTk1BU0soMTgsIDE2KQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfQ0xLX0hZU1Rf T0ZGU0VUCQkJMTYNCj4gPiArI2RlZmluZSBEV19IRE1JX0VWQUxfVElNRV9NQVNLCQkJR0VOTUFT SygxNSwgNCkNCj4gPiArI2RlZmluZSBEV19IRE1JX0VWQUxfVElNRV9PRkZTRVQJCTQNCj4gPiAr I2RlZmluZSBEV19IRE1JX0NMS19NRUFTX0lOUFVUX1NSQ19NQVNLCQlCSVQoMCkNCj4gPiArI2Rl ZmluZSBEV19IRE1JX0NMS19NRUFTX0lOUFVUX1NSQ19PRkZTRVQJMA0KPiA+ICsNCj4gPiArI2Rl ZmluZSBEV19IRE1JX0NLTV9SRVNVTFQJCQkweDAwOWMNCj4gPiArI2RlZmluZSBEV19IRE1JX0NM T0NLX0lOX1JBTkdFCQkJQklUKDE3KQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfRlJFUV9MT0NLRUQJ CQlCSVQoMTYpDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9DTEtSQVRFX01BU0sJCQlHRU5NQVNLKDE1 LCAwKQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfQ0xLUkFURV9PRkZTRVQJCQkwDQo+ID4gKw0KPiA+ ICsjZGVmaW5lIERXX0hETUlfVk1fQ0ZHX0NIXzBfMQkJCTB4MDBiMA0KPiA+ICsjZGVmaW5lIERX X0hETUlfVk1fQ0gxX0NPTF9WQUxVRV9NQVNLCQlHRU5NQVNLKDMxLCAxNikNCj4gPiArI2RlZmlu ZSBEV19IRE1JX1ZNX0NIMV9DT0xfVkFMVUVfT0ZGU0VUCQkxNg0KPiA+ICsjZGVmaW5lIERXX0hE TUlfVk1fQ0gwX0NPTF9WQUxVRV9NQVNLCQlHRU5NQVNLKDE1LCAwKQ0KPiA+ICsjZGVmaW5lIERX X0hETUlfVk1fQ0gwX0NPTF9WQUxVRV9PRkZTRVQJCTANCj4gPiArDQo+ID4gKyNkZWZpbmUgRFdf SERNSV9WTV9DRkdfQ0gyCQkJMHgwMGI0DQo+ID4gKyNkZWZpbmUgRFdfSERNSV9WTV9DSDJfQ09M X1ZBTFVFX01BU0sJCUdFTk1BU0soMTUsIDApDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9WTV9DSDJf Q09MX1ZBTFVFX09GRlNFVAkJMA0KPiA+ICsNCj4gPiArI2RlZmluZSBEV19IRE1JX1NUUwkJCQkw eDAwYmMNCj4gPiArI2RlZmluZSBEV19IRE1JX0RDTV9DVVJSRU5UX01PREVfTUFTSwkJR0VOTUFT SygzMSwgMjgpDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9EQ01fQ1VSUkVOVF9NT0RFX09GRlNFVAkJ MjgNCj4gPiArI2RlZmluZSBEV19IRE1JX0RDTV9MQVNUX1BJWEVMX1BIQVNFX1NUU19NQVNLCUdF Tk1BU0soMjcsIDI0KQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfRENNX0xBU1RfUElYRUxfUEhBU0Vf U1RTX09GRlNFVAkyNA0KPiA+ICsjZGVmaW5lIERXX0hETUlfRENNX1BIQVNFX0RJRkZfQ05UX01B U0sJCUdFTk1BU0soMjMsIDE2KQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfRENNX1BIX0RJRkZfQ05U X09WRVJGTAkJQklUKDE1KQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfRENNX0dDUF9aRVJPX0ZJRUxE U19QQVNTCUJJVCgxNCkNCj4gPiArI2RlZmluZSBEV19IRE1JX0NUTDNfU1RTCQkJQklUKDEzKQ0K PiA+ICsjZGVmaW5lIERXX0hETUlfQ1RMMl9TVFMJCQlCSVQoMTIpDQo+ID4gKyNkZWZpbmUgRFdf SERNSV9DVEwxX1NUUwkJCUJJVCgxMSkNCj4gPiArI2RlZmluZSBEV19IRE1JX0NUTDBfU1RTCQkJ QklUKDEwKQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfVlNfUE9MX0FESl9TVFMJCQlCSVQoOSkNCj4g PiArI2RlZmluZSBEV19IRE1JX0hTX1BPTF9BREpfU1RTCQkJQklUKDgpDQo+ID4gKyNkZWZpbmUg RFdfSERNSV9SRVNfT1ZFUkxPQURfU1RTCQlCSVQoNykNCj4gPiArI2RlZmluZSBEV19IRE1JX0RD TV9DVVJSRU5UX1BQX01BU0sJCUdFTk1BU0soMywgMCkNCj4gPiArI2RlZmluZSBEV19IRE1JX0RD TV9DVVJSRU5UX1BQX09GRlNFVAkJMA0KPiA+ICsNCj4gPiArLyogaWRfaGRjcF8xXzQgUmVnaXN0 ZXJzICovDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9IRENQX0NUUkwJCQkweDAwYzANCj4gPiArI2Rl ZmluZSBEV19IRE1JX0hEQ1BfU1RTCQkJMHgwMGZjDQo+ID4gKw0KPiA+ICsvKiBpZF9tb2RlX2Rl dGVjdGlvbiBSZWdpc3RlcnMgKi8NCj4gPiArI2RlZmluZSBEV19IRE1JX01EX0hUMAkJCQkweDAx NDgNCj4gPiArI2RlZmluZSBEV19IRE1JX0hUT1QzMl9DTEtfTUFTSwkJCUdFTk1BU0soMzEsIDE2 KQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfSFRPVDMyX0NMS19PRkZTRVQJCTE2DQo+ID4gKyNkZWZp bmUgRFdfSERNSV9IU19DTEtfTUFTSwkJCUdFTk1BU0soMTUsIDApDQo+ID4gKyNkZWZpbmUgRFdf SERNSV9IU19DTEtfT0ZGU0VUCQkJMA0KPiA+ICsNCj4gPiArI2RlZmluZSBEV19IRE1JX01EX0hU MQkJCQkweDAxNGMNCj4gPiArI2RlZmluZSBEV19IRE1JX0hUT1RfUElYX01BU0sJCQlHRU5NQVNL KDMxLCAxNikNCj4gPiArI2RlZmluZSBEV19IRE1JX0hUT1RfUElYX09GRlNFVAkJCTE2DQo+ID4g KyNkZWZpbmUgRFdfSERNSV9IT0ZTX1BJWF9NQVNLCQkJR0VOTUFTSygxNSwgMCkNCj4gPiArI2Rl ZmluZSBEV19IRE1JX0hPRlNfUElYX09GRlNFVAkJCTANCj4gPiArDQo+ID4gKyNkZWZpbmUgRFdf SERNSV9NRF9IQUNUX1BYCQkJMHgwMTUwDQo+ID4gKw0KPiA+ICsjZGVmaW5lIERXX0hETUlfTURf VkNUUkwJCQkweDAxNTgNCj4gPiArI2RlZmluZSBEV19IRE1JX1ZfT0ZGU19MSU5fTU9ERV9NQVNL CQlCSVQoNCkNCj4gPiArI2RlZmluZSBEV19IRE1JX1ZfT0ZGU19MSU5fTU9ERV9PRkZTRVQJCTQN Cj4gPiArI2RlZmluZSBEV19IRE1JX1ZfRURHRV9NQVNLCQkJQklUKDEpDQo+ID4gKyNkZWZpbmUg RFdfSERNSV9WX0VER0VfT0ZGU0VUCQkJMQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfVl9NT0RFX01B U0sJCQlCSVQoMCkNCj4gPiArI2RlZmluZSBEV19IRE1JX1ZfTU9ERV9PRkZTRVQJCQkwDQo+ID4g Kw0KPiA+ICsjZGVmaW5lIERXX0hETUlfTURfVk9MCQkJCTB4MDE2NA0KPiA+ICsjZGVmaW5lIERX X0hETUlfTURfVkFMCQkJCTB4MDE2OA0KPiA+ICsjZGVmaW5lIERXX0hETUlfTURfVlRMCQkJCTB4 MDE3MA0KPiA+ICsNCj4gPiArI2RlZmluZSBEV19IRE1JX01EX1NUUwkJCQkweDAxODANCj4gPiAr I2RlZmluZSBEV19IRE1JX0lMQUNFX1NUUwkJCUJJVCgzKQ0KPiA+ICsjZGVmaW5lIERXX0hETUlf REVfQUNUSVZJVFlfU1RTCQkJQklUKDIpDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9WU19BQ1RfU1RT CQkJQklUKDEpDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9IU19BQ1RfU1RTCQkJQklUKDApDQo+ID4g Kw0KPiA+ICsvKiBpZF9waHlfY29uZmlndXJhdGlvbiBSZWdpc3RlcnMgKi8NCj4gPiArI2RlZmlu ZSBEV19IRE1JX1BIWV9DVFJMCQkJMHgwMmMwDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9QSFlTVlNS RVRNT0RFWl9NQVNLCQlCSVQoNikNCj4gPiArI2RlZmluZSBEV19IRE1JX1BIWVNWU1JFVE1PREVa X09GRlNFVAkJNg0KPiA+ICsjZGVmaW5lIERXX0hETUlfQ0ZHQ0xLRlJFUV9NQVNLCQkJR0VOTUFT Syg1LCA0KQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfQ0ZHQ0xLRlJFUV9PRkZTRVQJCTQNCj4gPiAr I2RlZmluZSBEV19IRE1JX1BPUlRTRUxFQ1RfTUFTSwkJCUdFTk1BU0soMywgMikNCj4gPiArI2Rl ZmluZSBEV19IRE1JX1BPUlRTRUxFQ1RfT0ZGU0VUCQkyDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9Q SFlQRERRX01BU0sJCQlCSVQoMSkNCj4gPiArI2RlZmluZSBEV19IRE1JX1BIWVBERFFfT0ZGU0VU CQkJMQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfUEhZUkVTRVRfTUFTSwkJCUJJVCgwKQ0KPiA+ICsj ZGVmaW5lIERXX0hETUlfUEhZUkVTRVRfT0ZGU0VUCQkJMA0KPiA+ICsNCj4gPiArI2RlZmluZSBE V19IRE1JX0pUQUdfQ09ORgkJCTB4MDJlYw0KPiA+ICsjZGVmaW5lIERXX0hETUlfSlRBR19UQVBf VENMSwkJCTB4MDJmMA0KPiA+ICsNCj4gPiArI2RlZmluZSBEV19IRE1JX0pUQUdfVEFQX0lOCQkJ MHgwMmY0DQo+ID4gKyNkZWZpbmUgRFdfSERNSV9KVEFHX1RNUwkJCUJJVCg0KQ0KPiA+ICsjZGVm aW5lIERXX0hETUlfSlRBR19UREkJCQlCSVQoMCkNCj4gPiArDQo+ID4gKyNkZWZpbmUgRFdfSERN SV9KVEFHX1RBUF9PVVQJCQkweDAyZjgNCj4gPiArI2RlZmluZSBEV19IRE1JX0pUQUdfQUREUgkJ CTB4MDJmYw0KPiA+ICsNCj4gPiArLyogaWRfcGFja2V0X2RlY29kZXIgUmVnaXN0ZXJzICovDQo+ ID4gKyNkZWZpbmUgRFdfSERNSV9QREVDX0NUUkwJCQkweDAzMDANCj4gPiArI2RlZmluZSBEV19I RE1JX1BGSUZPX1NUT1JFX0ZJTFRFUl9FTl9NQVNLCUJJVCgzMSkNCj4gPiArI2RlZmluZSBEV19I RE1JX1BGSUZPX1NUT1JFX0ZJTFRFUl9FTl9PRkZTRVQJMzENCj4gPiArI2RlZmluZSBEV19IRE1J X1BEX0ZJRk9fQ0xSX01BU0sJCUJJVCg1KQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfUERfRklGT19D TFJfT0ZGU0VUCQk1DQo+ID4gKyNkZWZpbmUgRFdfSERNSV9QREVDX0JDSF9FTl9NQVNLCQlCSVQo MCkNCj4gPiArI2RlZmluZSBEV19IRE1JX1BERUNfQkNIX0VOX09GRlNFVAkJMA0KPiA+ICsNCj4g PiArI2RlZmluZSBEV19IRE1JX1BERUNfQUNSTV9DVFJMCQkJMHgwMzMwDQo+ID4gKyNkZWZpbmUg RFdfSERNSV9ERUxUQUNUU19JUlFUUklHX01BU0sJCUdFTk1BU0soNCwgMikNCj4gPiArI2RlZmlu ZSBEV19IRE1JX0RFTFRBQ1RTX0lSUVRSSUdfT0ZGU0VUCQkyDQo+ID4gKw0KPiA+ICsjZGVmaW5l IERXX0hETUlfUERFQ19BU1BfQ1RSTAkJCTB4MDM0MA0KPiA+ICsjZGVmaW5lIERXX0hETUlfQVVU T19WTVVURV9NQVNLCQkJQklUKDYpDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9BVVRPX1ZNVVRFX09G RlNFVAkJNg0KPiA+ICsjZGVmaW5lIERXX0hETUlfQVVUT19TUEZMQVRfTVVURV9NQVNLCQlHRU5N QVNLKDUsIDIpDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9BVVRPX1NQRkxBVF9NVVRFX09GRlNFVAkJ Mg0KPiA+ICsNCj4gPiArI2RlZmluZSBEV19IRE1JX1BERUNfU1RTCQkJMHgwMzYwDQo+ID4gKyNk ZWZpbmUgRFdfSERNSV9EUk1fQ0tTX0NIRwkJCUJJVCgzMSkNCj4gPiArI2RlZmluZSBEV19IRE1J X0RSTV9SQ1YJCQkJQklUKDMwKQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfTlRTQ1ZCSV9DS1NfQ0hH CQkJQklUKDI5KQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfRFZJREVUCQkJCUJJVCgyOCkNCj4gPiAr I2RlZmluZSBEV19IRE1JX1ZTSV9DS1NfQ0hHCQkJQklUKDI3KQ0KPiA+ICsjZGVmaW5lIERXX0hE TUlfR01EX0NLU19DSEcJCQlCSVQoMjYpDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9BSUZfQ0tTX0NI RwkJCUJJVCgyNSkNCj4gPiArI2RlZmluZSBEV19IRE1JX0FWSV9DS1NfQ0hHCQkJQklUKDI0KQ0K PiA+ICsjZGVmaW5lIERXX0hETUlfQUNSX05fQ0hHCQkJQklUKDIzKQ0KPiA+ICsjZGVmaW5lIERX X0hETUlfQUNSX0NUU19DSEcJCQlCSVQoMjIpDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9HQ1BfQVZf TVVURV9DSEcJCQlCSVQoMjEpDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9HTURfUkNWCQkJCUJJVCgy MCkNCj4gPiArI2RlZmluZSBEV19IRE1JX0FJRl9SQ1YJCQkJQklUKDE5KQ0KPiA+ICsjZGVmaW5l IERXX0hETUlfQVZJX1JDVgkJCQlCSVQoMTgpDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9BQ1JfUkNW CQkJCUJJVCgxNykNCj4gPiArI2RlZmluZSBEV19IRE1JX0dDUF9SQ1YJCQkJQklUKDE2KQ0KPiA+ ICsjZGVmaW5lIERXX0hETUlfVlNJX1JDVgkJCQlCSVQoMTUpDQo+ID4gKyNkZWZpbmUgRFdfSERN SV9BTVBfUkNWCQkJCUJJVCgxNCkNCj4gPiArI2RlZmluZSBEV19IRE1JX05UU0NWQklfUkNWCQkJ QklUKDEzKQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfT0JBX0xBWU9VVAkJCUJJVCgxMikNCj4gPiAr I2RlZmluZSBEV19IRE1JX0FVRFNfTEFZT1VUCQkJQklUKDExKQ0KPiA+ICsjZGVmaW5lIERXX0hE TUlfUERfRklGT19ORVdfRU5UUlkJCUJJVCg4KQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfUERfRklG T19PVkVSRkwJCQlCSVQoNCkNCj4gPiArI2RlZmluZSBEV19IRE1JX1BEX0ZJRk9fVU5ERVJGTAkJ CUJJVCgzKQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfUERfRklGT19USF9TVEFSVF9QQVNTCQlCSVQo MikNCj4gPiArI2RlZmluZSBEV19IRE1JX1BEX0ZJRk9fVEhfTUFYX1BBU1MJCUJJVCgxKQ0KPiA+ ICsjZGVmaW5lIERXX0hETUlfUERfRklGT19USF9NSU5fUEFTUwkJQklUKDApDQo+ID4gKw0KPiA+ ICsjZGVmaW5lIERXX0hETUlfUERFQ19WU0lfUEFZTE9BRDAJCTB4MDM2OA0KPiA+ICsjZGVmaW5l IERXX0hETUlfVlNJX1BBWUxPQUQxX0hETUlfVklDX01BU0sJR0VOTUFTSygxNSwgOCkNCj4gPiAr I2RlZmluZSBEV19IRE1JX1ZTSV9QQVlMT0FEMV9IRE1JX1ZJQ19PRkZTRVQJOA0KPiA+ICsNCj4g PiArI2RlZmluZSBEV19IRE1JX1BERUNfQUNSX0NUUwkJCTB4MDM5MA0KPiA+ICsjZGVmaW5lIERX X0hETUlfQ1RTX0RFQ09ERURfTUFTSwkJR0VOTUFTSygxOSwgMCkNCj4gPiArI2RlZmluZSBEV19I RE1JX0NUU19ERUNPREVEX09GRlNFVAkJMA0KPiA+ICsNCj4gPiArI2RlZmluZSBEV19IRE1JX1BE RUNfQUNSX04JCQkweDAzOTQNCj4gPiArI2RlZmluZSBEV19IRE1JX05fREVDT0RFRF9NQVNLCQkJ R0VOTUFTSygxOSwgMCkNCj4gPiArI2RlZmluZSBEV19IRE1JX05fREVDT0RFRF9PRkZTRVQJCTAN Cj4gPiArDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9QREVDX0FWSV9IQgkJCTB4MDNhMA0KPiA+ICsj ZGVmaW5lIERXX0hETUlfUVVBTlRfUkFOR0VfTUFTSwkJR0VOTUFTSygzMSwgMzApDQo+ID4gKyNk ZWZpbmUgRFdfSERNSV9RVUFOVF9SQU5HRV9PRkZTRVQJCTMwDQo+ID4gKyNkZWZpbmUgRFdfSERN SV9DT05URU5UX1RZUEVfTUFTSwkJR0VOTUFTSygyOSwgMjgpDQo+ID4gKyNkZWZpbmUgRFdfSERN SV9DT05URU5UX1RZUEVfT0ZGU0VUCQkyOA0KPiA+ICsjZGVmaW5lIERXX0hETUlfUElYX1JFUF9G QUNUT1JfTUFTSwkJR0VOTUFTSygyNywgMjQpDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9QSVhfUkVQ X0ZBQ1RPUl9PRkZTRVQJCTI0DQo+ID4gKw0KPiA+ICsjZGVmaW5lIERXX0hETUlfUERFQ19BVklf UEIJCQkweDAzYTQNCj4gPiArI2RlZmluZSBEV19IRE1JX1ZJRF9JREVOVF9DT0RFX01BU0sJCUdF Tk1BU0soMzEsIDI0KQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfVklEX0lERU5UX0NPREVfT0ZGU0VU CQkyNA0KPiA+ICsjZGVmaW5lIERXX0hETUlfSVRfQ09OVEVOVAkJCUJJVCgyMykNCj4gPiArI2Rl ZmluZSBEV19IRE1JX0VYVF9DT0xPUklNRVRSWV9NQVNLCQlHRU5NQVNLKDIyLCAyMCkNCj4gPiAr I2RlZmluZSBEV19IRE1JX0VYVF9DT0xPUklNRVRSWV9PRkZTRVQJCTIwDQo+ID4gKyNkZWZpbmUg RFdfSERNSV9SR0JfUVVBTlRfUkFOR0VfTUFTSwkJR0VOTUFTSygxOSwgMTgpDQo+ID4gKyNkZWZp bmUgRFdfSERNSV9SR0JfUVVBTlRfUkFOR0VfT0ZGU0VUCQkxOA0KPiA+ICsjZGVmaW5lIERXX0hE TUlfTk9OX1VOSUZfU0NBTEVfTUFTSwkJR0VOTUFTSygxNywgMTYpDQo+ID4gKyNkZWZpbmUgRFdf SERNSV9OT05fVU5JRl9TQ0FMRV9PRkZTRVQJCTE2DQo+ID4gKyNkZWZpbmUgRFdfSERNSV9DT0xP UklNRVRSWV9NQVNLCQlHRU5NQVNLKDE1LCAxNCkNCj4gPiArI2RlZmluZSBEV19IRE1JX0NPTE9S SU1FVFJZX09GRlNFVAkJMTQNCj4gPiArI2RlZmluZSBEV19IRE1JX1BJQ19BU1BFQ1RfUkFUX01B U0sJCUdFTk1BU0soMTMsIDEyKQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfUElDX0FTUEVDVF9SQVRf T0ZGU0VUCQkxMg0KPiA+ICsjZGVmaW5lIERXX0hETUlfQUNUX0FTUEVDVF9SQVRfTUFTSwkJR0VO TUFTSygxMSwgOCkNCj4gPiArI2RlZmluZSBEV19IRE1JX0FDVF9BU1BFQ1RfUkFUX09GRlNFVAkJ OA0KPiA+ICsjZGVmaW5lIERXX0hETUlfVklERU9fRk9STUFUX01BU0sJCUdFTk1BU0soNywgNSkN Cj4gPiArI2RlZmluZSBEV19IRE1JX1ZJREVPX0ZPUk1BVF9PRkZTRVQJCTUNCj4gPiArI2RlZmlu ZSBEV19IRE1JX0FDVF9JTkZPX1BSRVNFTlQJCUJJVCg0KQ0KPiA+ICsjZGVmaW5lIERXX0hETUlf QkFSX0lORk9fVkFMSURfTUFTSwkJR0VOTUFTSygzLCAyKQ0KPiA+ICsjZGVmaW5lIERXX0hETUlf QkFSX0lORk9fVkFMSURfT0ZGU0VUCQkyDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9TQ0FOX0lORk9f TUFTSwkJCUdFTk1BU0soMSwgMCkNCj4gPiArI2RlZmluZSBEV19IRE1JX1NDQU5fSU5GT19PRkZT RVQJCTANCj4gPiArDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9QREVDX0FWSV9QQkxFTgkJCTQNCj4g PiArDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9QREVDX0FWSV9UQkIJCQkweDAzYTgNCj4gPiArI2Rl ZmluZSBEV19IRE1JX1BERUNfQVZJX0xSQgkJCTB4MDNhYw0KPiA+ICsjZGVmaW5lIERXX0hETUlf UERFQ19BSUZfSEIJCQkweDAzYzQNCj4gPiArI2RlZmluZSBEV19IRE1JX1BERUNfQUlGX1BCMAkJ CTB4MDNjOA0KPiA+ICsNCj4gPiArI2RlZmluZSBEV19IRE1JX1BERUNfQUlGX1BCMQkJCTB4MDNj Yw0KPiA+ICsjZGVmaW5lIERXX0hETUlfTEZFX1BMQVlCQUNLX0xFVkVMX01BU0sJCUdFTk1BU0so OSwgOCkNCj4gPiArI2RlZmluZSBEV19IRE1JX0xGRV9QTEFZQkFDS19MRVZFTF9PRkZTRVQJOA0K PiA+ICsNCj4gPiArI2RlZmluZSBEV19IRE1JX1BERUNfQUlGX1BCTEVOCQkJMg0KPiA+ICsNCj4g PiArI2RlZmluZSBEV19IRE1JX1BERUNfVlNJX1NUMAkJCTB4M2UwDQo+ID4gKyNkZWZpbmUgRFdf SERNSV9JRUVFX1JFR19JRF9NQVNLCQlHRU5NQVNLKDIzLCAwKQ0KPiA+ICsjZGVmaW5lIERXX0hE TUlfSUVFRV9SRUdfSURfT0ZGU0VUCQkwDQo+ID4gKw0KPiA+ICsjZGVmaW5lIERXX0hETUlfUERF Q19WU0lfU1QxCQkJMHgzZTQNCj4gPiArI2RlZmluZSBEV19IRE1JX0gzRF9FWFRfREFUQV9NQVNL CQlHRU5NQVNLKDIzLCAyMCkNCj4gPiArI2RlZmluZSBEV19IRE1JX0gzRF9FWFRfREFUQV9PRkZT RVQJCTIwDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9IM0RfU1RSVUNUVVJFX01BU0sJCUdFTk1BU0so MTksIDE2KQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfSDNEX1NUUlVDVFVSRV9PRkZTRVQJCTE2DQo+ ID4gKyNkZWZpbmUgRFdfSERNSV9IRE1JX1ZJQ19NQVNLCQkJR0VOTUFTSygxNSwgOCkNCj4gPiAr I2RlZmluZSBEV19IRE1JX0hETUlfVklDX09GRlNFVAkJCTgNCj4gPiArI2RlZmluZSBEV19IRE1J X0hETUlfVklERU9fRk9STUFUX01BU0sJCUdFTk1BU0soNywgNSkNCj4gPiArI2RlZmluZSBEV19I RE1JX0hETUlfVklERU9fRk9STUFUX09GRlNFVAk1DQo+ID4gKyNkZWZpbmUgRFdfSERNSV9MRU5H VEhfTUFTSwkJCUdFTk1BU0soNCwgMCkNCj4gPiArI2RlZmluZSBEV19IRE1JX0xFTkdUSF9PRkZT RVQJCQkwDQo+ID4gKw0KPiA+ICsvKiBpZF9jZWFfdmlkZW8gUmVnaXN0ZXJzICovDQo+ID4gKyNk ZWZpbmUgRFdfSERNSV9DRUFWSURfQ09ORklHCQkJMHg0MDANCj4gPiArI2RlZmluZSBEV19IRE1J X0NFQVZJRF9SU1RfTUFTSwkJCUJJVCgzMSkNCj4gPiArI2RlZmluZSBEV19IRE1JX0NFQVZJRF9S U1RfT0ZGU0VUCQkzMQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfQ0VBVklEX1lDQzQyMl9JUElNQVBf TUFTSwlCSVQoMjEpDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9DRUFWSURfWUNDNDIyX0lQSU1BUF9P RkZTRVQJMjENCj4gPiArI2RlZmluZSBEV19IRE1JX0NFQVZJRF9ZQ0M0MjBfSVBJTUFQX01BU0sJ QklUKDIwKQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfQ0VBVklEX1lDQzQyMF9JUElNQVBfT0ZGU0VU CTIwDQo+ID4gKw0KPiA+ICsvKiBpZF9oZG1pXzJfMCBSZWdpc3RlcnMgKi8NCj4gPiArI2RlZmlu ZSBEV19IRE1JX0hETUkyMF9DT05UUk9MCQkJMHgwODAwDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9W SUREQVRBQ0hFQ0tFTl9NQVNLCQlCSVQoMTIpDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9WSUREQVRB Q0hFQ0tFTl9PRkZTRVQJCTEyDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9EQVRBSVNDSEVDS0VOX01B U0sJCUJJVCgxMSkNCj4gPiArI2RlZmluZSBEV19IRE1JX0RBVEFJU0NIRUNLRU5fT0ZGU0VUCQkx MQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfR0JDSEVDS0VOX01BU0sJCQlCSVQoMTApDQo+ID4gKyNk ZWZpbmUgRFdfSERNSV9HQkNIRUNLRU5fT0ZGU0VUCQkxMA0KPiA+ICsjZGVmaW5lIERXX0hETUlf UFJFQU1CQ0hFQ0tFTl9NQVNLCQlCSVQoOSkNCj4gPiArI2RlZmluZSBEV19IRE1JX1BSRUFNQkNI RUNLRU5fT0ZGU0VUCQk5DQo+ID4gKyNkZWZpbmUgRFdfSERNSV9DVFJMQ0hFQ0tFTl9NQVNLCQlC SVQoOCkNCj4gPiArI2RlZmluZSBEV19IRE1JX0NUUkxDSEVDS0VOX09GRlNFVAkJOA0KPiA+ICsN Cj4gPiArI2RlZmluZSBEV19IRE1JX1NDRENfQ09ORklHCQkJMHgwODA4DQo+ID4gKyNkZWZpbmUg RFdfSERNSV9IUERMT1dfTUFTSwkJCUJJVCgxKQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfSFBETE9X X09GRlNFVAkJCTENCj4gPiArI2RlZmluZSBEV19IRE1JX1BPV0VSUFJPVklERURfTUFTSwkJQklU KDApDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9QT1dFUlBST1ZJREVEX09GRlNFVAkJMA0KPiA+ICsN Cj4gPiArI2RlZmluZSBEV19IRE1JX0NITE9DS19DT05GSUcJCQkweDA4MGMNCj4gPiArI2RlZmlu ZSBEV19IRE1JX01JTElTRUNUSU1FUkxJTUlUX01BU0sJCUdFTk1BU0soMTUsIDApDQo+ID4gKyNk ZWZpbmUgRFdfSERNSV9NSUxJU0VDVElNRVJMSU1JVF9PRkZTRVQJMA0KPiA+ICsNCj4gPiArI2Rl ZmluZSBEV19IRE1JX0hEQ1AyMl9DT05UUk9MCQkJMHgwODFjDQo+ID4gKw0KPiA+ICsjZGVmaW5l IERXX0hETUlfU0NEQ19SRUdTMAkJCTB4MDgyMA0KPiA+ICsjZGVmaW5lIERXX0hETUlfU0NEQ19T Q1JBTUJTVEFUVVNfTUFTSwkJQklUKDI0KQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfU0NEQ19TQ1JB TUJTVEFUVVNfT0ZGU0VUCTI0DQo+ID4gKyNkZWZpbmUgRFdfSERNSV9TQ0RDX1RNRFNCSVRDTEtS QVRJT19NQVNLCUJJVCgxNykNCj4gPiArI2RlZmluZSBEV19IRE1JX1NDRENfVE1EU0JJVENMS1JB VElPX09GRlNFVAkxNw0KPiA+ICsjZGVmaW5lIERXX0hETUlfU0NEQ19TQ1JBTUJFTl9NQVNLCQlC SVQoMTYpDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9TQ0RDX1NDUkFNQkVOX09GRlNFVAkJMTYNCj4g PiArDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9IRENQMjJfU1RBVFVTCQkJMHgwOGZjDQo+ID4gKw0K PiA+ICsvKiBpZF9tb2RlX2RldGVjdGlvbl9pbnRlcnJ1cHQgUmVnaXN0ZXJzICovDQo+ID4gKyNk ZWZpbmUgRFdfSERNSV9NRF9JRU5fQ0xSCQkJMHgwZmMwDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9N RF9JRU5fU0VUCQkJMHgwZmM0DQo+ID4gKw0KPiA+ICsjZGVmaW5lIERXX0hETUlfTURfSVNUUwkJ CQkweDBmYzgNCj4gPiArI2RlZmluZSBEV19IRE1JX1ZPRlNfTElOX0lTVFMJCQlCSVQoMTEpDQo+ ID4gKyNkZWZpbmUgRFdfSERNSV9WVE9UX0xJTl9JU1RTCQkJQklUKDEwKQ0KPiA+ICsjZGVmaW5l IERXX0hETUlfVkFDVF9MSU5fSVNUUwkJCUJJVCg5KQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfVlNf Q0xLX0lTVFMJCQlCSVQoOCkNCj4gPiArI2RlZmluZSBEV19IRE1JX1ZUT1RfQ0xLX0lTVFMJCQlC SVQoNykNCj4gPiArI2RlZmluZSBEV19IRE1JX0hBQ1RfUElYX0lTVFMJCQlCSVQoNikNCj4gPiAr I2RlZmluZSBEV19IRE1JX0hTX0NMS19JU1RTCQkJQklUKDUpDQo+ID4gKyNkZWZpbmUgRFdfSERN SV9IVE9UMzJfQ0xLX0lTVFMJCQlCSVQoNCkNCj4gPiArI2RlZmluZSBEV19IRE1JX0lMQUNFX0lT VFMJCQlCSVQoMykNCj4gPiArI2RlZmluZSBEV19IRE1JX0RFX0FDVElWSVRZX0lTVFMJCUJJVCgy KQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfVlNfQUNUX0lTVFMJCQlCSVQoMSkNCj4gPiArI2RlZmlu ZSBEV19IRE1JX0hTX0FDVF9JU1RTCQkJQklUKDApDQo+ID4gKw0KPiA+ICsjZGVmaW5lIERXX0hE TUlfTURfSUVOCQkJCTB4MGZjYw0KPiA+ICsjZGVmaW5lIERXX0hETUlfTURfSUNMUgkJCQkweDBm ZDANCj4gPiArI2RlZmluZSBEV19IRE1JX01EX0lTRVQJCQkJMHgwZmQ0DQo+ID4gKw0KPiA+ICsv KiBpZF9oZG1pX2ludGVycnVwdCBSZWdpc3RlcnMgKi8NCj4gPiArI2RlZmluZSBEV19IRE1JX0lF Tl9DTFIJCQkJMHgwZmQ4DQo+ID4gKyNkZWZpbmUgRFdfSERNSV9JRU5fU0VUCQkJCTB4MGZkYw0K PiA+ICsNCj4gPiArI2RlZmluZSBEV19IRE1JX0lTVFMJCQkJMHgwZmUwDQo+ID4gKyNkZWZpbmUg RFdfSERNSV9JMkNNUF9BUkJMT1NUX0lTVFNfSVNUUwkJQklUKDMwKQ0KPiA+ICsjZGVmaW5lIERX X0hETUlfSTJDTVBOQUNLX0lTVFMJCQlCSVQoMjkpDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9JMkNN UERPTkVfSVNUUwkJCUJJVCgyOCkNCj4gPiArI2RlZmluZSBEV19IRE1JX1ZTX1RIUl9SRUFDSEVE X0lTVFMJCUJJVCgyNykNCj4gPiArI2RlZmluZSBEV19IRE1JX1ZTWU5DX0FDVF9FREdFX0lTVFMJ CUJJVCgyNikNCj4gPiArI2RlZmluZSBEV19IRE1JX0FLU1ZfUkNWX0lTVFMJCQlCSVQoMjUpDQo+ ID4gKyNkZWZpbmUgRFdfSERNSV9QTExfQ0xPQ0tfR0FURURfSVNUUwkJQklUKDI0KQ0KPiA+ICsj ZGVmaW5lIERXX0hETUlfREVTRVJfTUlTQUxfSVNUUwkJQklUKDIzKQ0KPiA+ICsjZGVmaW5lIERX X0hETUlfQ0RTRU5TRV9DSEdfSVNUUwkJQklUKDIyKQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfQ0VB VklEX0VNUFRZX0lTVFMJCUJJVCgyMSkNCj4gPiArI2RlZmluZSBEV19IRE1JX0NFQVZJRF9GVUxM X0lTVFMJCUJJVCgyMCkNCj4gPiArI2RlZmluZSBEV19IRE1JX1NDRENUTURTQ0ZHQ0hBTkdFX0lT VFNfTUFTSwlCSVQoMTkpDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9TQ0RDVE1EU0NGR0NIQU5HRV9J U1RTX09GRlNFVAkxOQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfU0NEQ1NDU1RBVFVTQ0hBTkdFX0lT VFMJCUJJVCgxOCkNCj4gPiArI2RlZmluZSBEV19IRE1JX1NDRENDRkdDSEFOR0VfSVNUUwkJQklU KDE3KQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfRENNX0NVUlJFTlRfTU9ERV9DSEdfSVNUUwlCSVQo MTYpDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9EQ01fUEhfRElGRl9DTlRfT1ZFUkZMX0lTVFMJQklU KDE1KQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfRENNX0dDUF9aRVJPX0ZJRUxEU19QQVNTX0lTVFMJ QklUKDE0KQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfQ1RMM19DSEFOR0VfSVNUUwkJQklUKDEzKQ0K PiA+ICsjZGVmaW5lIERXX0hETUlfQ1RMMl9DSEFOR0VfSVNUUwkJQklUKDEyKQ0KPiA+ICsjZGVm aW5lIERXX0hETUlfQ1RMMV9DSEFOR0VfSVNUUwkJQklUKDExKQ0KPiA+ICsjZGVmaW5lIERXX0hE TUlfQ1RMMF9DSEFOR0VfSVNUUwkJQklUKDEwKQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfVlNfUE9M X0FESl9JU1RTCQkJQklUKDkpDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9IU19QT0xfQURKX0lTVFMJ CQlCSVQoOCkNCj4gPiArI2RlZmluZSBEV19IRE1JX1JFU19PVkVSTE9BRF9JU1RTCQlCSVQoNykN Cj4gPiArI2RlZmluZSBEV19IRE1JX0NMS19DSEFOR0VfSVNUUwkJCUJJVCg2KQ0KPiA+ICsjZGVm aW5lIERXX0hETUlfUExMX0xDS19DSEdfSVNUUwkJQklUKDUpDQo+ID4gKyNkZWZpbmUgRFdfSERN SV9FUUdBSU5fRE9ORV9JU1RTCQlCSVQoNCkNCj4gPiArI2RlZmluZSBEV19IRE1JX09GRlNDQUxf RE9ORV9JU1RTCQlCSVQoMykNCj4gPiArI2RlZmluZSBEV19IRE1JX1JFU0NBTF9ET05FX0lTVFMJ CUJJVCgyKQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfQUNUX0NIQU5HRV9JU1RTCQkJQklUKDEpDQo+ ID4gKyNkZWZpbmUgRFdfSERNSV9TVEFURV9SRUFDSEVEX0lTVFMJCUJJVCgwKQ0KPiA+ICsNCj4g PiArI2RlZmluZSBEV19IRE1JX0lFTgkJCQkweDBmZTQNCj4gPiArI2RlZmluZSBEV19IRE1JX0lD TFIJCQkJMHgwZmU4DQo+ID4gKyNkZWZpbmUgRFdfSERNSV9JU0VUCQkJCTB4MGZlYw0KPiA+ICsN Cj4gPiArLyogaWRfcGFja2V0X2RlY29kZXJfaW50ZXJydXB0IFJlZ2lzdGVycyAqLw0KPiA+ICsj ZGVmaW5lIERXX0hETUlfUERFQ19JRU5fQ0xSCQkJMHgwZjc4DQo+ID4gKyNkZWZpbmUgRFdfSERN SV9QREVDX0lFTl9TRVQJCQkweDBmN2MNCj4gPiArDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9QREVD X0lTVFMJCQkweDBmODANCj4gPiArI2RlZmluZSBEV19IRE1JX0RSTV9DS1NfQ0hHX0lTVFMJCUJJ VCgzMSkNCj4gPiArI2RlZmluZSBEV19IRE1JX0FVRF9UWVBFX0NIR19JU1RTCQlCSVQoMjkpDQo+ ID4gKyNkZWZpbmUgRFdfSERNSV9WU0lfQ0tTX0NIR19JU1RTCQlCSVQoMjcpDQo+ID4gKyNkZWZp bmUgRFdfSERNSV9BSUZfQ0tTX0NIR19JU1RTCQlCSVQoMjUpDQo+ID4gKyNkZWZpbmUgRFdfSERN SV9BVklfQ0tTX0NIR19JU1RTCQlCSVQoMjQpDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9BQ1JfTl9D SEdfSVNUUwkJCUJJVCgyMykNCj4gPiArI2RlZmluZSBEV19IRE1JX0FDUl9DVFNfQ0hHX0lTVFMJ CUJJVCgyMikNCj4gPiArI2RlZmluZSBEV19IRE1JX0dDUF9BVl9NVVRFX0NIR19JU1RTCQlCSVQo MjEpDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9QRF9GSUZPX09WRVJGTF9JU1RTCQlCSVQoNCkNCj4g PiArI2RlZmluZSBEV19IRE1JX1BEX0ZJRk9fVU5ERVJGTF9JU1RTCQlCSVQoMykNCj4gPiArDQo+ ID4gKyNkZWZpbmUgRFdfSERNSV9QREVDX0lFTgkJCTB4MGY4NA0KPiA+ICsjZGVmaW5lIERXX0hE TUlfUERFQ19JQ0xSCQkJMHgwZjg4DQo+ID4gKyNkZWZpbmUgRFdfSERNSV9QREVDX0lTRVQJCQkw eDBmOGMNCj4gPiArDQo+ID4gKy8qIGlkX2RtaSBSZWdpc3RlcnMgKi8NCj4gPiArI2RlZmluZSBE V19IRE1JX0RNSV9TV19SU1QJCQkweDBmZjANCj4gPiArI2RlZmluZSBEV19IRE1JX1RNRFNfU1dS RVNFVAkJCUJJVCgxNikNCj4gPiArI2RlZmluZSBEV19IRE1JX0hEQ1BfU1dSRVNFVAkJCUJJVCg4 KQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfVklEX1NXUkVTRVQJCQlCSVQoNykNCj4gPiArI2RlZmlu ZSBEV19IRE1JX1BJWEVMX1NXUkVTRVQJCQlCSVQoNikNCj4gPiArI2RlZmluZSBEV19IRE1JX0NF Q19TV1JFU0VUCQkJQklUKDUpDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9BVURfU1dSRVNFVAkJCUJJ VCg0KQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfQlVTX1NXUkVTRVQJCQlCSVQoMykNCj4gPiArI2Rl ZmluZSBEV19IRE1JX0hETUlfU1dSRVNFVAkJCUJJVCgyKQ0KPiA+ICsjZGVmaW5lIERXX0hETUlf TU9ERVRfU1dSRVNFVAkJCUJJVCgxKQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfTUFJTl9TV1JFU0VU CQkJQklUKDApDQo+ID4gKw0KPiA+ICsjZGVmaW5lIERXX0hETUlfRE1JX0RJU0FCTEVfSUYJCQkw eDBmZjQNCj4gPiArI2RlZmluZSBEV19IRE1JX0hETUlfRU5BQkxFX01BU0sJCUJJVCgyKQ0KPiA+ ICsjZGVmaW5lIERXX0hETUlfSERNSV9FTkFCTEVfT0ZGU0VUCQkyDQo+ID4gKw0KPiA+ICsvKiBp ZF9jYnVzIFJlZ2lzdGVycyAqLw0KPiA+ICsjZGVmaW5lIERXX0hETUlfQ0JVU0lPQ1RSTAkJCTB4 MzAyMA0KPiA+ICsjZGVmaW5lIERXX0hETUlfREFUQVBBVEhfQ0JVU1pfTUFTSwkJQklUKDI0KQ0K PiA+ICsjZGVmaW5lIERXX0hETUlfREFUQVBBVEhfQ0JVU1pfT0ZGU0VUCQkyNA0KPiA+ICsjZGVm aW5lIERXX0hETUlfQ0JVU19TVlNSRVRNT0RFWl9NQVNLCQlCSVQoMTYpDQo+ID4gKyNkZWZpbmUg RFdfSERNSV9DQlVTX1NWU1JFVE1PREVaX09GRlNFVAkJMTYNCj4gPiArI2RlZmluZSBEV19IRE1J X0NCVVNfUEREUV9NQVNLCQkJQklUKDgpDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9DQlVTX1BERFFf T0ZGU0VUCQk4DQo+ID4gKyNkZWZpbmUgRFdfSERNSV9DQlVTX1JFU0VUX01BU0sJCQlCSVQoMCkN Cj4gPiArI2RlZmluZSBEV19IRE1JX0NCVVNfUkVTRVRfT0ZGU0VUCQkwDQo+ID4gKw0KPiA+ICsv KiBpZF9hdWRpbyBSZWdpc3RlcnMgKi8NCj4gPiArI2RlZmluZSBEV19IRE1JX0FVRF9DVFJMCQkJ MHgwMjAwDQo+ID4gKw0KPiA+ICsjZGVmaW5lIERXX0hETUlfQVVEX1BMTF9DVFJMCQkJMHgwMjA4 DQo+ID4gKyNkZWZpbmUgRFdfSERNSV9QTExfTE9DS19TVEFCTEVfTUFTSwkJQklUKDMxKQ0KPiA+ ICsjZGVmaW5lIERXX0hETUlfUExMX0xPQ0tfU1RBQkxFX09GRlNFVAkJMzENCj4gPiArDQo+ID4g KyNkZWZpbmUgRFdfSERNSV9BVURfRklGT19DVFJMCQkJMHgwMjQwDQo+ID4gKyNkZWZpbmUgRFdf SERNSV9BRklGX0lOSVRfTUFTSwkJCUJJVCgwKQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfQUZJRl9J TklUX09GRlNFVAkJMA0KPiA+ICsNCj4gPiArI2RlZmluZSBEV19IRE1JX0FVRF9NVVRFX0NUUkwJ CQkweDAyNTgNCj4gPiArI2RlZmluZSBEV19IRE1JX0FVRF9NVVRFX1NFTF9NQVNLCQlHRU5NQVNL KDYsIDUpDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9BVURfTVVURV9TRUxfT0ZGU0VUCQk1DQo+ID4g Kw0KPiA+ICsjZGVmaW5lIERXX0hETUlfQVVEX1NBT19DVFJMCQkJMHgwMjYwDQo+ID4gKyNkZWZp bmUgRFdfSERNSV9XU19ESVNBQkxFX01BU0sJCQlCSVQoMTApDQo+ID4gKyNkZWZpbmUgRFdfSERN SV9XU19ESVNBQkxFX09GRlNFVAkJMTANCj4gPiArI2RlZmluZSBEV19IRE1JX0kyU18zMl8xNl9N QVNLCQkJQklUKDApDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9JMlNfMzJfMTZfT0ZGU0VUCQkwDQo+ ID4gKw0KPiA+ICsvKiBpZF9hdWRpb19maWZvX2ludGVycnVwdCBSZWdpc3RlcnMgKi8NCj4gPiAr I2RlZmluZSBEV19IRE1JX0FVRF9GSUZPX0lFTl9DTFIJCTB4MGZhOA0KPiA+ICsjZGVmaW5lIERX X0hETUlfQVVEX0ZJRk9fSUVOX1NFVAkJMHgwZmFjDQo+ID4gKw0KPiA+ICsjZGVmaW5lIERXX0hE TUlfQVVEX0ZJRk9fSVNUUwkJCTB4MGZiMA0KPiA+ICsjZGVmaW5lIERXX0hETUlfQUZJRl9PVkVS RkxfSVNUUwkJQklUKDQpDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9BRklGX1VOREVSRkxfSVNUUwkJ QklUKDMpDQo+ID4gKyNkZWZpbmUgRFdfSERNSV9BRklGX1RIU19QQVNTX0lTVFMJCUJJVCgyKQ0K PiA+ICsjZGVmaW5lIERXX0hETUlfQUZJRl9USF9NQVhfSVNUUwkJQklUKDEpDQo+ID4gKyNkZWZp bmUgRFdfSERNSV9BRklGX1RIX01JTl9JU1RTCQlCSVQoMCkNCj4gPiArDQo+ID4gKyNkZWZpbmUg RFdfSERNSV9BVURfRklGT19JRU4JCQkweDBmYjQNCj4gPiArI2RlZmluZSBEV19IRE1JX0FVRF9G SUZPX0lDTFIJCQkweDBmYjgNCj4gPiArI2RlZmluZSBEV19IRE1JX0FVRF9GSUZPX0lTRVQJCQkw eDBmYmMNCj4gPiArDQo+ID4gKyNlbmRpZiAvKiBfX0RXX0hETUlfUlhfSF9fICovDQo+ID4gZGlm ZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvZHdjL2R3LWhkbWktcngtcGRhdGEuaCBiL2luY2x1ZGUv bWVkaWEvZHdjL2R3LWhkbWktcngtcGRhdGEuaA0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ ID4gaW5kZXggMDAwMDAwMC4uYTJhNTQ0MA0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9p bmNsdWRlL21lZGlhL2R3Yy9kdy1oZG1pLXJ4LXBkYXRhLmgNCj4gPiBAQCAtMCwwICsxLDEyNiBA QA0KPiA+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KPiA+ICsvKg0K PiA+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTggLSBwcmVzZW50IFN5bm9wc3lzLCBJbmMuIGFuZC9v ciBpdHMgYWZmaWxpYXRlcy4NCj4gPiArICogU3lub3BzeXMgRGVzaWduV2FyZSBIRE1JIFJlY2Vp dmVyIGNvbnRyb2xsZXIgcGxhdGZvcm0gZGF0YQ0KPiA+ICsgKg0KPiA+ICsgKiBBdXRob3I6IEpv c2UgQWJyZXUgPGpvc2UuYWJyZXVAc3lub3BzeXMuY29tPg0KPiA+ICsgKiBBdXRob3I6IE5lbHNv biBDb3N0YSA8bmVsc29uLmNvc3RhQHN5bm9wc3lzLmNvbT4NCj4gPiArICovDQo+ID4gKw0KPiA+ ICsjaWZuZGVmIF9fRFdfSERNSV9SWF9QREFUQV9IX18NCj4gPiArI2RlZmluZSBfX0RXX0hETUlf UlhfUERBVEFfSF9fDQo+ID4gKw0KPiA+ICsjZGVmaW5lIERXX0hETUlfUlhfRFJWTkFNRQkJCSJk dy1oZG1pLXJ4Ig0KPiA+ICsNCj4gPiArLyogTm90aWZ5IGV2ZW50cyAqLw0KPiA+ICsjZGVmaW5l IERXX0hETUlfTk9USUZZX0lTX09GRgkJMQ0KPiA+ICsjZGVmaW5lIERXX0hETUlfTk9USUZZX0lO UFVUX0NIQU5HRUQJMg0KPiA+ICsjZGVmaW5lIERXX0hETUlfTk9USUZZX0FVRElPX0NIQU5HRUQJ Mw0KPiA+ICsjZGVmaW5lIERXX0hETUlfTk9USUZZX0lTX1NUQUJMRQk0DQo+ID4gKw0KPiA+ICsv KiBIRENQIDEuNCAqLw0KPiA+ICsjZGVmaW5lIERXX0hETUlfSERDUDE0X0JLU1ZfU0laRQkyDQo+ ID4gKyNkZWZpbmUgRFdfSERNSV9IRENQMTRfS0VZU19TSVpFCSgyICogNDApDQo+ID4gKw0KPiA+ ICsvKioNCj4gPiArICogc3RydWN0IGR3X2hkbWlfcGh5X2NvbmZpZyAtIFBoeSBjb25maWd1cmF0 aW9uIGZvciBIRE1JIHJlY2VpdmVyLg0KPiA+ICsgKg0KPiA+ICsgKiBAbmFtZTogVGhlIG5hbWUg b2YgdGhlIHBoeS4NCj4gPiArICoNCj4gPiArICogQGRydl9uYW1lOiBEcml2ZXIgbmFtZSBvZiB0 aGUgcGh5Lg0KPiA+ICsgKg0KPiA+ICsgKiBAZ2VuOiBUaGUgZ2VuZXJhdGlvbiBvZiB0aGUgcGh5 Lg0KPiA+ICsgKg0KPiA+ICsgKiBAdmVyc2lvbjogVGhlIHZlcnNpb24gb2YgdGhlIHBoeS4NCj4g PiArICoNCj4gPiArICogQGNmZ19jbGs6IFRoZSBjb25maWd1cmF0aW9uIGNsb2NrIHVzZWQgZm9y IHBoeS4NCj4gPiArICoNCj4gPiArICogQGlucHV0X2NvdW50OiBOdW1iZXIgb2YgaW5wdXQgcG9y dHMgc3VwcG9ydGVkIGJ5IHRoZSBwaHkuDQo+ID4gKyAqDQo+ID4gKyAqIEBqdGFnX2FkZHI6IFRo ZSBKVEFHIGFkZHJlc3Mgb2YgcGh5Lg0KPiA+ICsgKi8NCj4gPiArc3RydWN0IGR3X2hkbWlfcGh5 X2NvbmZpZyB7DQo+ID4gKwljb25zdCBjaGFyICpuYW1lOw0KPiA+ICsJY29uc3QgY2hhciAqZHJ2 X25hbWU7DQo+ID4gKwl1bnNpZ25lZCBpbnQgZ2VuOw0KPiA+ICsJdW5zaWduZWQgaW50IHZlcnNp b247DQo+ID4gKwl1bnNpZ25lZCBpbnQgY2ZnX2NsazsNCj4gPiArCXVuc2lnbmVkIGludCBpbnB1 dF9jb3VudDsNCj4gPiArCXU4IGp0YWdfYWRkcjsNCj4gPiArfTsNCj4gPiArDQo+ID4gKy8qKg0K PiA+ICsgKiBzdHJ1Y3QgZHdfaGRtaV9yeF9wZGF0YSAtIFBsYXRmb3JtIERhdGEgY29uZmlndXJh dGlvbiBmb3IgSERNSSByZWNlaXZlci4NCj4gPiArICoNCj4gPiArICogQHBoeTogUGh5IGNvbmZp Z3VyYXRpb24gcGFyYW1ldGVycy4NCj4gPiArICoNCj4gPiArICogQGlyZWZfY2xrOiBDb25maWd1 cmF0aW9uIGNsb2NrLg0KPiA+ICsgKg0KPiA+ICsgKiBAZHdfNXZfc3RhdHVzOiA1diBzdGF0dXMg Y2FsbGJhY2suIFNoYWxsIHJldHVybiB0aGUgc3RhdHVzIG9mIHRoZSBnaXZlbg0KPiA+ICsgKiBp bnB1dCwgaS5lLiBzaGFsbCBiZSB0cnVlIGlmIGEgY2FibGUgaXMgY29ubmVjdGVkIHRvIHRoZSBz cGVjaWZpZWQgaW5wdXQuDQo+ID4gKyAqDQo+ID4gKyAqIEBkd181dl9kZXRlY3RlZDogNXYgZGV0 ZWN0ZWQgY2FsbGJhY2suIFNoYWxsIHJldHVybiB0aGUgc3RhdHVzIGNoYW5nZXMgb2YNCj4gPiAr ICogdGhlIGdpdmVuIGlucHV0LCBpLmUuIHNoYWxsIGJlIHRydWUgaWYgYSBjYWJsZSB3YXMgKGRp cyljb25uZWN0ZWQgdG8gYQ0KPiA+ICsgKiBzcGVjaWZpZWQgaW5wdXQuDQo+ID4gKyAqDQo+ID4g KyAqIEBkd181dl9kaXNhYmxlOiA1diBkaXNhYmxlIGNhbGxiYWNrLiBTaGFsbCBjbGVhciB0aGUg aW50ZXJydXB0IGFzc29jaWF0ZWQNCj4gPiArICogd2l0aCB0aGUgNXYgc2Vuc2UgY29udHJvbGxl ci4NCj4gPiArICoNCj4gPiArICogQGR3XzV2X2VuYWJsZTogNXYgZW5hYmxlIGNhbGxiYWNrLiBT aGFsbCBlbmFibGUgdGhlIGludGVycnVwdCBhc3NvY2lhdGVkIHdpdGgNCj4gPiArICogdGhlIDV2 IHNlbnNlIGNvbnRyb2xsZXIuDQo+ID4gKyAqDQo+ID4gKyAqIEBkd181dl9hcmc6IEFyZ3VtZW50 IHRvIGJlIHVzZWQgd2l0aCB0aGUgNXYgc2Vuc2UgY2FsbGJhY2tzLg0KPiA+ICsgKg0KPiA+ICsg KiBAZHdfemNhbF9yZXNldDogSW1wZWRhbmNlIGNhbGlicmF0aW9uIHJlc2V0IGNhbGxiYWNrLiBT aGFsbCBiZSBjYWxsZWQgd2hlbg0KPiA+ICsgKiB0aGUgaW1wZWRhbmNlIGNhbGlicmF0aW9uIG5l ZWRzIHRvIGJlIHJlc3RhcnRlZC4gVGhpcyBpcyB1c2VkIGJ5IHBoeSBkcml2ZXINCj4gPiArICog b25seS4NCj4gPiArICoNCj4gPiArICogQGR3X3pjYWxfZG9uZTogSW1wZWRhbmNlIGNhbGlicmF0 aW9uIHN0YXR1cyBjYWxsYmFjay4gU2hhbGwgcmV0dXJuIHRydWUgaWYNCj4gPiArICogdGhlIGlt cGVkYW5jZSBjYWxpYnJhdGlvbiBwcm9jZWR1cmUgaGFzIGVuZGVkLiBUaGlzIGlzIHVzZWQgYnkg cGh5IGRyaXZlcg0KPiA+ICsgKiBvbmx5Lg0KPiA+ICsgKg0KPiA+ICsgKiBAZHdfemNhbF9hcmc6 IEFyZ3VtZW50IHRvIGJlIHVzZWQgd2l0aCB0aGUgWkNBTCBjYWxpYnJhdGlvbiBjYWxsYmFja3Mu DQo+ID4gKyAqDQo+ID4gKyAqIEBkd19lZGlkX3JlYWQ6IEVESUQgcmVhZCBjYWxsYmFjay4NCj4g PiArICoNCj4gPiArICogQGR3X2VkaWRfd3JpdGU6IEVESUQgd3JpdGUgY2FsbGJhY2suDQo+ID4g KyAqDQo+ID4gKyAqIEBkd19lZGlkXzRibG9ja3NfbGU6IEVESUQgYnl0ZSBvcmRlcmluZyBjYWxs YmFjay4NCj4gPiArICoNCj4gPiArICogQGR3X2VkaWRfYXJnOiBBcmd1bWVudCB0byBiZSB1c2Vk IHdpdGggdGhlIEVESUQgY2FsbGJhY2tzLg0KPiA+ICsgKg0KPiA+ICsgKiBAZHdfcmVzZXRfYWxs OiBSZXNldCBhbGwgY2FsbGJhY2suDQo+ID4gKyAqDQo+ID4gKyAqIEBkd19yZXNldF9hcmc6IEFy Z3VtZW50IHRvIGJlIHVzZWQgd2l0aCBSZXNldCBjYWxsYmFja3MuDQo+ID4gKyAqLw0KPiA+ICtz dHJ1Y3QgZHdfaGRtaV9yeF9wZGF0YSB7DQo+ID4gKwkvKiBQaHkgY29uZmlndXJhdGlvbiAqLw0K PiA+ICsJc3RydWN0IGR3X2hkbWlfcGh5X2NvbmZpZyAqcGh5Ow0KPiA+ICsJLyogQ29udHJvbGxl ciBjb25maWd1cmF0aW9uICovDQo+ID4gKwl1bnNpZ25lZCBpbnQgaXJlZl9jbGs7IC8qIE1IeiAq Lw0KPiA+ICsNCj4gPiArCS8qIDVWIHNlbnNlIGludGVyZmFjZSAqLw0KPiA+ICsJYm9vbCAoKmR3 XzV2X3N0YXR1cykodm9pZCBfX2lvbWVtICpyZWdzLCBpbnQgaW5wdXQpOw0KPiA+ICsJYm9vbCAo KmR3XzV2X2RldGVjdGVkKSh2b2lkIF9faW9tZW0gKnJlZ3MsIGludCBpbnB1dCk7DQo+ID4gKwl2 b2lkICgqZHdfNXZfZGlzYWJsZSkodm9pZCBfX2lvbWVtICpyZWdzLCBpbnQgaW5wdXQpOw0KPiA+ ICsJdm9pZCAoKmR3XzV2X2VuYWJsZSkodm9pZCBfX2lvbWVtICpyZWdzLCBpbnQgaW5wdXQpOw0K PiA+ICsJdm9pZCBfX2lvbWVtICpkd181dl9hcmc7DQo+ID4gKw0KPiA+ICsJLyogWmNhbCBpbnRl cmZhY2UgKi8NCj4gPiArCXZvaWQgKCpkd196Y2FsX3Jlc2V0KSh2b2lkIF9faW9tZW0gKnJlZ3Mp Ow0KPiA+ICsJYm9vbCAoKmR3X3pjYWxfZG9uZSkodm9pZCBfX2lvbWVtICpyZWdzKTsNCj4gPiAr CXZvaWQgX19pb21lbSAqZHdfemNhbF9hcmc7DQo+ID4gKw0KPiA+ICsJLyogRURJRCAqLw0KPiA+ ICsJdTMyICgqZHdfZWRpZF9yZWFkKSh2b2lkIF9faW9tZW0gKnJlZ3MsIGludCBpbnB1dCwgdTMy IG9mZnNldCk7DQo+ID4gKwlpbnQgKCpkd19lZGlkX3dyaXRlKSh2b2lkIF9faW9tZW0gKnJlZ3Ms IGludCBpbnB1dCwgdTMyICplZGlkLA0KPiA+ICsJCQkgICAgIGludCBzaXplKTsNCj4gPiArCXUz MiAoKmR3X2VkaWRfNGJsb2Nrc19sZSkodm9pZCBfX2lvbWVtICpyZWdzKTsNCj4gPiArCXZvaWQg X19pb21lbSAqZHdfZWRpZF9hcmc7DQo+ID4gKw0KPiA+ICsJLyogUmVzZXQgZnVuY3Rpb25zICov DQo+ID4gKwl2b2lkICgqZHdfcmVzZXRfYWxsKSh2b2lkIF9faW9tZW0gKnJlZ3MpOw0KPiA+ICsJ dm9pZCBfX2lvbWVtICpkd19yZXNldF9hcmc7DQo+ID4gK307DQo+ID4gKw0KPiA+ICsjZW5kaWYg LyogX19EV19IRE1JX1JYX1BEQVRBX0hfXyAqLw0KPiA+IA0KPiANCj4gUmVnYXJkcywNCj4gDQo+ IAlIYW5zDQoNClRoYW5rcyENCg0KQlIsDQoNCk5lbHNvbiBDb3N0YQ0K