Received: by 2002:a6b:500f:0:0:0:0:0 with SMTP id e15csp1033879iob; Fri, 13 May 2022 20:26:13 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxBa3SF/ilajGmpl4bcyODj7On9b3ar0J496eughdnBQGvEWrLjnk6TzKa6eqfm+1CH4nkW X-Received: by 2002:a5d:4405:0:b0:20c:d4b8:79b3 with SMTP id z5-20020a5d4405000000b0020cd4b879b3mr6018723wrq.691.1652498773417; Fri, 13 May 2022 20:26:13 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1652498773; cv=pass; d=google.com; s=arc-20160816; b=Cv8L/L7efeOs16ohIY8YVDEiFvg/y75Ul86rAURY81zlElCa9ns7r2tvgYfrvMtLpw 9nWjN4Vzl/v/ZfUlzwBXacZgUHTC9KBkVFIN6oTxZ8AO/6r8bxssjriAiFHSY0iCmozz T3a/harGYPJaC4zoZHOboGFhAEFWS29ePcOPrCorbHBMCTsNN9bZZP+kgZmDgJIInCOh 0eWgEIcQrmnaYs6ub7AtRqVguz2kncEZwqxmfYDBFCJzsiN8yp8n/EQEv+6uN2YNvJR5 FnYFpBflPBYr39ySl6JDUkngSah72z+qLag4dp+y4KWDD294HL9XVe4P3InJS0vKl1zn kVRg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :content-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from:dkim-signature; bh=eE7+PKO1dgDjKKoQObT/36Q5obMytGeTzc1gjVjmf0g=; b=rtqaIc36wNiAgLd89UnW6mk0+ecXvBU9fVZ9CDmB1dRoGjpKR+JveDT5k+8VicI3/o pQPU0AlQoxj3+P1QSBiD12GVGid/j0TcAoW32VLl+jucYZbrUt2q2RJHs+y7l0KpGC5F RZnNsh3N+UTtfSMCHyuQhaJLKFMXQ6RW4G6KKmCCAMr5eTaXK/ZGJ3jxd4EBG/xNnbIr D8RX0gR4fBzzWSzW2XYFUZe/YNNwIXCOGOQ+CUhr/l+NBIlgzksUZSxm0pawnlWWXNud orTGNxmY9HQtYC2+ekngBOUwzoJjnm6lezGwXeXLAUJiOuoIVRrJdyxvolT3he4cZKtZ WMHA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@aspeedtech.com header.s=selector1 header.b="0G/LGpU6"; arc=pass (i=1 spf=pass spfdomain=aspeedtech.com dkim=pass dkdomain=aspeedtech.com dmarc=pass fromdomain=aspeedtech.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id i65-20020a1c3b44000000b0038c77be9c90si3882658wma.88.2022.05.13.20.26.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 May 2022 20:26:13 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; dkim=pass header.i=@aspeedtech.com header.s=selector1 header.b="0G/LGpU6"; arc=pass (i=1 spf=pass spfdomain=aspeedtech.com dkim=pass dkdomain=aspeedtech.com dmarc=pass fromdomain=aspeedtech.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 7539C40FAC7; Fri, 13 May 2022 17:03:08 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379550AbiEMKjf (ORCPT + 99 others); Fri, 13 May 2022 06:39:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33584 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232026AbiEMKj1 (ORCPT ); Fri, 13 May 2022 06:39:27 -0400 Received: from APC01-SG2-obe.outbound.protection.outlook.com (mail-sgaapc01on2104.outbound.protection.outlook.com [40.107.215.104]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9923026FA54 for ; Fri, 13 May 2022 03:39:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=I7TByBynTS1umkyjZoEkG4ddK7ETb7g8PSZaOTTVWEre0U8AAw1J87G+Mw3unusnRTMgrZRJL4aDz3ipkC9baLVui71gE6uzozeMnvDwI6GLah6h74vVDIewbgBtJxiS7M3XnzU3XmkPN5CZwW8J76vg2sDN/6z/V8gOhX7z/iS9HX8sdGSMK6B9TX3jSXtzG8J3C9MeXZjt7Ianyi43U/cuUBbjrg2ufTEzkhC61GCwv6vwHzusu+rRgHl/CxE8Sw1TN3GFq7YUcXQa451V5Fp8bq/infPRezKot5T2+EF4G8S7zHKR6Q7976UXIsaDQRgbeXHS7+QEnK8ca4chyA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=eE7+PKO1dgDjKKoQObT/36Q5obMytGeTzc1gjVjmf0g=; b=hGsQGamW2F/XHnQHEt17ETaTs2NaLyEUkW1IANt3QUjRCvw0uXQEIIiprLyUnY9FmnTPuNSr4JBZirKsuvqOAcK2geZxWuHz2lrhCkSPd9sHqq6UnAU9ryJRuFjyCtwOZZ7qHjU0Uc7hNkZTSLBWjV7kCfYwEgaR+js5v1jxxP//NL+/BLqRvpb0XrLaHKrGiGNvPO9mLiAPUpybPwdpDjRLd5/JT1s4fEV5JDbU8ttDiq+URB1mwYNdP2/n5e/6ck+Cj5h+51X2ZwRda0Lt+6TM2viRXvMYxCVNt/CWgs75HsUbopNAVuVWokj6p3mMINoa5HpzAE4nqPS7NtGamA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=aspeedtech.com; dmarc=pass action=none header.from=aspeedtech.com; dkim=pass header.d=aspeedtech.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=aspeedtech.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=eE7+PKO1dgDjKKoQObT/36Q5obMytGeTzc1gjVjmf0g=; b=0G/LGpU6VyHtJl4PrLntcKBzG7GhvYIODLWmqugh/nrzAWnUcBUHY7uLIKTbnEpRQSG473+03VHdQcyhTjLlXLfO6eRbBGYZvt89JO4LWNcoUh0G+hR8NYw3mILxTKcS38FYwGx0qn8yPFsx52JDzgFg/ce0SoVhQpk6RVTT6LQ6wsInn+dDcvjO4u6dpSqvr9rxHYpceZsPLzBtR0Qu0bt0VoJ7TUsu5s1j+Ftgr6vj3K6B+6NOp35PpesUX46ECtVrwfn7KFJLXX0/WqJq5AVx7I2FBhzDuX68iv36FwOcBAeM8BB0zMYpch42NbbNeP7D9srVoPjL+909eBc6Kw== Received: from PSAPR06MB4805.apcprd06.prod.outlook.com (2603:1096:301:9a::13) by TYZPR06MB4607.apcprd06.prod.outlook.com (2603:1096:400:123::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5250.13; Fri, 13 May 2022 10:39:13 +0000 Received: from PSAPR06MB4805.apcprd06.prod.outlook.com ([fe80::74d8:6b7e:cf2:b4ab]) by PSAPR06MB4805.apcprd06.prod.outlook.com ([fe80::74d8:6b7e:cf2:b4ab%6]) with mapi id 15.20.5250.014; Fri, 13 May 2022 10:39:13 +0000 From: Kuo-Hsiang Chou To: Thomas Zimmermann , "dri-devel@lists.freedesktop.org" , "linux-kernel@vger.kernel.org" CC: Hungju Huang , "airlied@linux.ie" , Tommy Huang , "airlied@redhat.com" , Arc Sung , Luke Chen Subject: RE: [PATCH v4] drm/ast: Create the driver for ASPEED proprietory Display-Port Thread-Topic: [PATCH v4] drm/ast: Create the driver for ASPEED proprietory Display-Port Thread-Index: AQHYWtVytCPVW6iG1EuQZcf+/Es+MK0OWy8AgAAD9HCACaRXgIAEiAzAgAAlFQCAAACDMA== Date: Fri, 13 May 2022 10:39:13 +0000 Message-ID: References: <872e0d4b-411a-594f-a194-428986e18c3d@suse.de> <20220428075603.20904-1-kuohsiang_chou@aspeedtech.com> <43be719f-9149-abf0-fc5a-95b8d1c6761d@suse.de> <12fcba08-a2ad-ea50-ed63-029b5068800e@suse.de> In-Reply-To: <12fcba08-a2ad-ea50-ed63-029b5068800e@suse.de> Accept-Language: en-US Content-Language: zh-TW X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=aspeedtech.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 02e4d393-dc04-49e8-c528-08da34ccd29e x-ms-traffictypediagnostic: TYZPR06MB4607:EE_ x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: r7iY3GteJ7ReKBC21zZwMbrsACbJYWM3nC2VoCQ8F5HV/Uh32Uz/ccI0Fn4WPPJNeboelfUB7D7Hos+H4cQG+ZSGT6JcKqaTzREYAZpO29iP5QdpFkSS59q4hqGj4E34BsN5kHT4UkGoHKSYemspiyW58vRpZuqWJq6SVDUJ32sPy8JBjkQ5mHMxKarsjDOsUMTKfzTwho3eW1H8cxGxt6JczFdDhSLhCJ0S+YdYOLCio3wq6Y4g6lABFUWTePFpzIwPmPW/nVtOps5TYCl9r8F8bxFwCuQyGJaLxlozFN/0YyZgT+vI5oNGvLqoVduGv4Ox0cwz5JG5UWc/c/FkSZOoGjGWhBR6di5RL9vD9snm374S6ye7sR7m11jzgPMkoK5zzBmZED01ftfOcgtywrHXNDzBVGKppTpdVSnG8pDvzKOgk8v6v0VD3OUQZZn2b8SMeQEPaXN6P7VT6yPiKcyePX8HoKsRwuzB2N6MLZnE+XnTi5zNfEmKJC76vIV0SCo8QxbCo8HxgDFDKe13ZXHL7KM1i6I+VxBtVPaarfl4BN5SOJU3mnprlY57EJbzvnncS0w0is5NG7VYT8N5ofE48DkJ7aLHp6mYceE7aSlg5NI3npxzcX0b/pQbMUgQp+WI+7S8vXEdQTLkO/xWuLYaT7SvfzySaD16pv3vawiqIAjcilid/vcvCEgYSjhgk0svaCRVEklHeyapDZaRnW2IvRdlvr515E/9dS8UazuJ7jJaZxYWqwq8S3QW7e7hc8LnwsG+3fy0v/ZYT4/wY0lZrq83pjyEIprHV9YHxtY= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PSAPR06MB4805.apcprd06.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(376002)(136003)(396003)(366004)(39850400004)(346002)(186003)(2906002)(316002)(107886003)(30864003)(53546011)(33656002)(8936002)(122000001)(71200400001)(5660300002)(83380400001)(52536014)(508600001)(8676002)(66446008)(66556008)(76116006)(4326008)(54906003)(66574015)(66476007)(64756008)(6506007)(66946007)(9686003)(26005)(110136005)(55016003)(38100700002)(86362001)(38070700005)(7696005)(579004)(559001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?NUEyd0xUZC9ndDlvRkg4UFB4WHV1NHJDaGtNN1k4dWxsbXNiUk5WMXlFSERL?= =?utf-8?B?UklzKzlrVHdhU1lkUzJ2ZEpMelNxK2M3ZER1bHhvc1YraEdNR2NObnlWNGhB?= =?utf-8?B?YmRXa2NETlpFT3JIK28vOER1U0o0cnRMMXhOQ25DSWJMN3ZNWVRvYnRZZUg2?= =?utf-8?B?ZTlzc2ZhMXdZMkErd1RyRkVzOEc5YmxPMk1NTDdGN3pIcGtmNUdGSjJVU0lC?= =?utf-8?B?V1pJd21wNU4rYk41cE1NWmV1VTErN1I4MDIyWG1PYmhvMHVEWlY5b29XVlho?= =?utf-8?B?YjFuTU1HZEoyVVNBeGJINE1hZGZwdkpuUGU3QWVMM054RllIaEdDdTZyWGhw?= =?utf-8?B?SmwzZ2tSVFFDZUxqcHd3OXlDRXRRdzUwV01xQ0FRYTFJNThhbTZnZ2NrVWlW?= =?utf-8?B?WjBpaGUzTzVPa296dmFUYlBhMkJMVVNHNTkwV3Vlc0xGeHM0T092Nk5ZdSts?= =?utf-8?B?d3ZYNExTdlVJS1F4OWRrandrWThmQ3ZKZEc4WVlIOXlxUUMxZG4zeW5EMUw1?= =?utf-8?B?dDk1RUpoRzYzZkFYZStlNm5MMTJRTEVjaTdvb200WFcxOXQ2dnpIMlVPeEtI?= =?utf-8?B?OFFSVG5lOUpoM1o5bjQyREo1VHZuWVBvaEkycUNkVjQ1MEpYZFd4bDg3dkEw?= =?utf-8?B?Z3JLWWt1WllXSStiL2dPeGdOTG9DUk9QeUFlVVFma1hDTG9jL2RkZWFLcFph?= =?utf-8?B?ZUVYTU1zSEZlUERtQUlEbnU0Mjl6cDJWbEFpMjcrbDhtNDhsc0g1WC9lRnpS?= =?utf-8?B?dVowalNRelNHVGRmd0xUSzRTSFF5NHZHL2RoaDB6OTJlbUNIS0I5RmpZVWcz?= =?utf-8?B?UTB4QndVSnN5czV6M2RZaElncXVFSGVJQ2tOc0pBTDVqbWhVa3pPUUtPNUJu?= =?utf-8?B?WFhtVWhxdDVYaS9YV2lHT2RjUjhuR2ljWS9TVFlJN2k1d3p3TnpEWm5SK3Z3?= =?utf-8?B?dk5sOUk2aFFVamwzdDliZ243aFVWNkNYYXorQmdRUnRHalBqTkI5VFQ2ZHpN?= =?utf-8?B?SUFsU2JBcFl0Kys4c3JOdDFhajloWjlZSzA3RTEveXBlN0JkUmFlZGRhWHNG?= =?utf-8?B?TWMrd2Y3bmk0Z01KWkV4aWhCVWxXby9jeVBjSTFjeWhETDJCYWhISDloeHFx?= =?utf-8?B?WEE5QmkwVHdpZEZlek04YldkNGwvS1A0NXlka3ZqejhGM3JDK252YXBLZjNx?= =?utf-8?B?NE1KNlFvMGdMOC8wVVo0WXo4dytRdG95ZVc0R3dMOEI4Vmx5UFB3SERpM1RB?= =?utf-8?B?MmFkWEdWSml3SU00YnhyTzJubktaRWdJcDUzT3dUb3BIWkd2RG1xcGtLTWlB?= =?utf-8?B?VWlKQzQzSmRkUWh0dmoraHVhbGtPZFFwUTlxNlpQMEw4SDQ1a3VhdTdyT0VF?= =?utf-8?B?OVdtK1pPaU5LeDRCNkxtYlRva21JOFZuMW5yMmI5VFI2SUgyencydWYwWHgv?= =?utf-8?B?d0lNcGhjSnFmbzRpN3l0RUxhU2RmTGtkVTRURkhSbXlSVVQ5VGVENmlQRlYv?= =?utf-8?B?T0ZKQzBFUHNabU1QazRNOE1zQ1lIQ3MybHE0ZmdrVXN1OVMxVjNTZGFmdEc2?= =?utf-8?B?QnFsQ2dOb1BMaFlGT0c3L3FjejRFS1o1Y2NQNExycXgxN0tLSkdQNWRHL2xY?= =?utf-8?B?NnZjbk93M3dsZUFXZ25FL014TkNjZWQ2amU1WldqVmJua3cycncwLzJuRWFN?= =?utf-8?B?QmxLZklvTkdlekk2dnlqeHE2MkpuQS9BUXR5Zkd1a2Q5bE51cEtNamZTZU5p?= =?utf-8?B?THgwZlZZMytpa2dWb3BUS0g0THgzZW5ubE1jVDBYdHpwZ3hQWE1qTFArRkNJ?= =?utf-8?B?OVEzVCtXNDVHVmNndEFzM21PMFpBc3VZdUFnaGhVOXd1MWFoNi9TYlVyR0dM?= =?utf-8?B?SUM5Z21kS3R4bi9jNzVSbjIzWXVYd2xQN1gvd3pWSm9QRERBWUI0UWdFNk1B?= =?utf-8?B?NDNXRkpWN2lHRDNycStRRTlJdHlHcjZUWGREUW9vVVp5NFJKUE9vSWUyalNF?= =?utf-8?B?TE9JUGdteGcxV0N2WnhGUmRsUTluVzFFRlF6QXk5SHg5K3FJQVpnay9sbWZ3?= =?utf-8?B?MXNrOFd4d3ZBUDUrQmdxUFczUXlyWC8zNncrZEwyWTcvSlp6UGtab2VXQ0kr?= =?utf-8?B?eGdIeml5ZWdQekMybERpS1NyZ0VlYWljbXlha05yZUFUZ2xuZVhKanhuMC9h?= =?utf-8?B?bC9RTHdERlR1OTUzbGlrd3dwU1ZNOW9Yb3lrQ3I0TVZYRVR6bmRDeFB6Zld5?= =?utf-8?B?NVJoM1pxR1VvTXJ3U2VNcEhHdU1wbGlkNlc5WXhMWGQzZk9BczFrd2E1YmVh?= =?utf-8?B?WmhIQ3pSVG5NQkJoanJDd1d0aHVKL29ueUFza2xUYUp6b2NHNWNYQVVYVTlr?= =?utf-8?Q?oHokzmWnh7KYjsvU=3D?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: aspeedtech.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PSAPR06MB4805.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 02e4d393-dc04-49e8-c528-08da34ccd29e X-MS-Exchange-CrossTenant-originalarrivaltime: 13 May 2022 10:39:13.7783 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43d4aa98-e35b-4575-8939-080e90d5a249 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: it6UJ4CTAaDBCvDAqxxLs9JQ32Z8i6Ca6kZOnk+WUAa7j1YhMlJVGIsYVjokZYHVQ/rEsBNMc84slDy2mlNvgT9aBvmmeY0BIUadflQJ8vs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYZPR06MB4607 X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgVGhvbWFzLA0KDQotLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KRnJvbTogVGhvbWFzIFpp bW1lcm1hbm4gW21haWx0bzp0emltbWVybWFubkBzdXNlLmRlXSANClNlbnQ6IEZyaWRheSwgTWF5 IDEzLCAyMDIyIDY6MjEgUE0NClRvOiBLdW8tSHNpYW5nIENob3UgPGt1b2hzaWFuZ19jaG91QGFz cGVlZHRlY2guY29tPjsgZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZzsgbGludXgta2Vy bmVsQHZnZXIua2VybmVsLm9yZw0KU3ViamVjdDogUmU6IFtQQVRDSCB2NF0gZHJtL2FzdDogQ3Jl YXRlIHRoZSBkcml2ZXIgZm9yIEFTUEVFRCBwcm9wcmlldG9yeSBEaXNwbGF5LVBvcnQNCg0KDQpI aQ0KDQpBbSAxMy4wNS4yMiB1bSAxMTowNyBzY2hyaWViIEt1by1Ic2lhbmcgQ2hvdToNCj4gDQo+ IA0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBUaG9tYXMgWmltbWVybWFu biBbbWFpbHRvOnR6aW1tZXJtYW5uQHN1c2UuZGVdDQo+IFNlbnQ6IFR1ZXNkYXksIE1heSAxMCwg MjAyMiA2OjU2IFBNDQo+IFRvOiBLdW8tSHNpYW5nIENob3UgPGt1b2hzaWFuZ19jaG91QGFzcGVl ZHRlY2guY29tPjsgDQo+IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmc7IGxpbnV4LWtl cm5lbEB2Z2VyLmtlcm5lbC5vcmcNCj4gU3ViamVjdDogUmU6IFtQQVRDSCB2NF0gZHJtL2FzdDog Q3JlYXRlIHRoZSBkcml2ZXIgZm9yIEFTUEVFRCANCj4gcHJvcHJpZXRvcnkgRGlzcGxheS1Qb3J0 DQo+IA0KPiBIaQ0KPiANCj4gQW0gMDQuMDUuMjIgdW0gMTA6NDkgc2NocmllYiBLdW8tSHNpYW5n IENob3U6DQo+PiBIaSBUaG9tYXMsDQo+Pg0KPj4gVGhhbmtzIGZvciB5b3VyIGVmZm9ydHMgdG8g cmV2aWV3IHRoaXMgcGF0Y2guDQo+Pg0KPj4gTm93LCBJIG9ic2VydmUgYSBjaGFuZ2UgdGhhdCBh ZnRlciBEUCB1bnBsdWdnZWQgYW5kIHRoZW4gdGhlIHN5c3RlbSANCj4+IGlzIHVuYWJsZSB0byBn ZXQgRURJRCBmcm9tIEQtc3ViIGNvbm5lY3RpbmcuDQo+Pg0KPj4gVGhlIHJlYXNvbiBzZWVtcyB0 aGF0IFRYcyBhcmUgbWVyZ2VkIGludG8gdW5pb24gc3RydWN0dXJlIGluIA0KPj4gL2RyaXZlcnMv Z3B1L2RybS9hc3QvYXN0X2Rydi5oDQo+PiAgIMKgKGE1OWIwMjY0MTlmMzMwNDBkN2QyOGI4ZTNi MWNlYTY4MWI5Y2U3YTcNCj4+IDxodHRwczovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL2RybS9kcm0t bWlzYy9jb21taXQvP2lkPWE1OWIwMjY0MTlmMzMwNA0KPj4gMA0KPj4gZDdkMjhiOGUzYjFjZWE2 ODFiOWNlN2E3PikNCj4gDQo+IEkgaGF2ZSBwb3N0ZWQgYSBwYXRjaCB0aGF0IGVuYWJsZXMgbXVs dGlwbGUgcGFyYWxsZWwgb3V0cHV0cy4gU2VlDQo+IA0KPiAgIA0KPiA8aHR0cHM6Ly9sb3JlLmtl cm5lbC5vcmcvZHJpLWRldmVsLzIwMjIwNTEwMTA1MDEwLjIwNzEyLTEtdHppbW1lcm1hbm5ADQo+ IHN1c2UuZGUvVC8jdT4NCj4gDQo+IElmIHlvdSBoYXZlIHRoZSB0aW1lLCBJJ2QgYXBwcmVjaWF0 ZSBpZiB5b3UgY291bGQgdGVzdCBpdC4NCj4gDQo+IEhpIFRob21hcywNCj4gRmlyc3QsIHRoYW5r cyBmb3IgeW91ciBlZmZvcnRzIG9uIHRoaXMgcGF0Y2ggb2YgIiBlbmFibGVzIG11bHRpcGxlIHBh cmFsbGVsIG91dHB1dHMgIi4NCj4gQnV0IGl0IGRvZXNuJ3Qgd29yay4gVGhlcmUgaXMgc3RpbGwg Tk8gRURJRCBnb3QgZnJvbSBELXN1YiBhZnRlciBEUCB1bnBsdWdnZWQuDQo+IA0KPiBCYXNlIG9u IHlvdXIgcGF0Y2gsIEkgYW0gdHJ5aW5nIHRvIGZpbmQgb3V0IHRoZSBzb2x1dGlvbiBhbHNvLg0K PiBGaW5hbCwgdGhhbmtzIGZvciB5b3VyIGhlbHAgYWdhaW4hDQoNCkxldCdzIHRyeSB0byBmaW5k IGEgc29sdXRpb24uIEkgbWlnaHQgYmUgYWJsZSB0byBjb21lIHVwIHdpdGggc29tZXRoaW5nIGlm IEkgaGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24uDQoNCkhvdyBhcmUgdGhlc2Ugb3V0cHV0cyBjb25u ZWN0ZWQgdG8gZWFjaCBlYWNoIG90aGVyPw0KMS4gRFAgYW5kIEQtc3ViIGJvdGggY29ubmVjdGVk OiBpdCBpcyBjb3JyZWN0IHRvIGdldCBFRElEIGFuZCBtb25pdG9yIHR5cGUgaXMgY29ycmVjdGx5 IHNob3duIG9uIGRpc3BsYXkgc2V0dGluZy4gUmVzb2x1dGlvbiBpcyB1cCB0byAxOTIwKjEyMDAu DQoyLiBEUCB1bnBsdWdnZWQgYW5kIG9ubHkgRC1zdWIgY29ubmVjdGVkOiBVbmtub3duIERpc3Bs YXkgaXMgc2hvd24gb24gZGlzcGxheSBzZXR0aW5nLiBPbmx5IDgwMCo2MDAgYW5kIDEwMjQqNzY4 IGFyZSBhdmFpbGFibGUgZm9yIFJlc29sdXRpb24uDQoNClRoZXkgYXJlIGJvdGggc2VydmVkIGJ5 IHRoZSBzYW1lIENSVEMuIENhbiB0aGV5IGJlIHVzZWQgYXQgdGhlIHNhbWUgdGltZT8gIA0KTm8s IDIgZGlmZmVyZW50IG1vbml0b3JzIGFyZSBjb25uZWN0ZWQgYXQgc2FtZSB0aW1lLiANCk9uZSBp cyBjb25uZWN0ZWQgYnkgRC1zdWIgYW5kIGFub3RoZXIgaXMgY29ubmVjdGVkIGJ5IERQIGNvbm5l Y3RpbmcuDQoNCkFyZSB0aGV5IG11dHVhbGx5IGV4Y2x1c2l2ZT8NClllcywgSWYgRFAgYW5kIEQt c3ViIGFyZSBhbGwgY29ubmVjdGluZywgRFAncyBFRElEIGlzIGZpcnN0IHByaW9yaXR5IGZvciBE aXNwbGF5IHNldHRpbmcuDQpXaGVuIERQIHVucGx1Z2dlZCwgRURJRCBnb3QgZnJvbSBELXN1YiBh cmUgdXNlZCBmb3IgRGlzcGxheSBzZXR0aW5nLg0KDQpOb3csIEkgdHJ5IHRvIGFkZCB0aGUgY29k ZXMgb2YgYXN0X3ZnYV9jb25uZWN0b3JfaGVscGVyX2dldF9tb2RlcygpIGludG8gYXN0X2FzdGRw X2Nvbm5lY3Rvcl9oZWxwZXJfZ2V0X21vZGVzKCkuDQpUaGUgcmVzdWx0IGlzIGZhaWxlZC4NCkFu eXdheSwgSSB3aWxsIGNvbnRpbnVlIHRvIHRyeSBhbmQgdGVzdCB0aGUgZmVhdHVyZSBuZXh0IE1v bmRheS4gDQpUaGFua3MgZm9yIHlvdXIgZ3JlYXQgaGVscCENCg0KUmVnYXJkcywNCglLdW8tSHNp YW5nIENob3UNCg0KQmVzdCByZWdhcmRzDQpUaG9tYXMNCg0KPiANCj4gUmVnYXJkcywNCj4gCUt1 by1Ic2lhbmcgQ2hvdQ0KPiANCj4gQmVzdCByZWdhcmRzDQo+IFRob21hcw0KPiANCj4+DQo+PiBB bm90aGVyLCBkbyB5b3UgbmVlZCB0aGUgYXN0MjYwMCBFVkIgdG8gZWFzZSB2ZXJpZmljYXRpb24g b24gImRybS9hc3QiID8NCj4+DQo+PiBSZWdhcmRzLA0KPj4NCj4+ICAgwqDCoMKgwqDCoMKgwqAg S3VvLUhzaWFuZyBDaG91DQo+Pg0KPj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4+IEZy b206IFRob21hcyBaaW1tZXJtYW5uIFttYWlsdG86dHppbW1lcm1hbm5Ac3VzZS5kZV0NCj4+IFNl bnQ6IFdlZG5lc2RheSwgTWF5IDA0LCAyMDIyIDM6MjggUE0NCj4+IFRvOiBLdW8tSHNpYW5nIENo b3UgPGt1b2hzaWFuZ19jaG91QGFzcGVlZHRlY2guY29tPjsgDQo+PiBkcmktZGV2ZWxAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnOyBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnDQo+PiBTdWJqZWN0 OiBSZTogW1BBVENIIHY0XSBkcm0vYXN0OiBDcmVhdGUgdGhlIGRyaXZlciBmb3IgQVNQRUVEIA0K Pj4gcHJvcHJpZXRvcnkgRGlzcGxheS1Qb3J0DQo+Pg0KPj4gSGkNCj4+DQo+PiBBbSAyOC4wNC4y MiB1bSAwOTo1NiBzY2hyaWViIEt1b0hzaWFuZyBDaG91Og0KPj4NCj4+PiBWMToNCj4+DQo+Pj4g MS4gVGhlIE1DVSBGVyBjb250cm9saW5nIEFTUEVFRCBEUCBpcyBsb2FkZWQgYnkgQk1DIGJvb3Qg bG9hZGVyLg0KPj4NCj4+PiAyLiBEcml2ZXIgc3RhcnRzIGFmdGVyIENSWzM6MV0gPT0gMTExYiB0 aGF0IGluZGljYXRlcyBUeCBpcyBBU1REUCwNCj4+DQo+Pj4gIMKgwqDCoMKgIGFuZCBDUkQxWzVd IGhhcyBiZWVuIGFzc2VydGVkIGJ5IEJNVkMgYm9vdCBsb2FkZXIuDQo+Pg0KPj4+IDMuIEVESUQg aXMgcHJpb3JpdGl6ZWQgYnkgRFAgbW9uaXRvci4NCj4+DQo+Pj4gNC4gRFAncyBFRElEIGhhcyBo aWdoIHByaW9yaXR5IHRvIGRlY2lkZSByZXNvbHV0aW9uIHN1cHBvcnRpbmcuDQo+Pg0KPj4+DQo+ Pg0KPj4+IFYyOg0KPj4NCj4+PiBNb2R1bGVzIGRlc2NyaXB0aW9uOg0KPj4NCj4+PiAxLiBBU1RE UCAoQVNQRUVEIERpc3BsYXlQb3J0KSBpcyBjb250cm9sbGVkIGJ5IGRlZGljYXRlZA0KPj4NCj4+ PiAgwqDCoMKgwqAgQVNULU1DVSAoQVNQRUVEIHByb3ByaWF0YXJ5IE1DVSkuDQo+Pg0KPj4+IDIu IE1DVSBpcyBsb29waW5nIGluIGNoYXJnZWQgb2YgSFBELCBSZWFkIEVESUQsIExpbmsgVHJhaW5p bmcgd2l0aA0KPj4NCj4+PiAgwqDCoMKgwqAgRFAgc2luay4NCj4+DQo+Pj4gMy4gQVNURFAgYW5k IEFTVC1NVUMgcmVzaWRlIGluIEJNQyAoQmFzZWJvYXJkIE1hbmFnZW1lbnQgY29udHJvbGxlcikN Cj4+DQo+Pj4gIMKgwqDCoMKgIGFkZHJlc3Npbmctc3BhY2UuDQo+Pg0KPj4+IDQuIEFTUEVFRCBE Uk0gZHJpdmVyIHJlcXVlc3RzIE1DVSB0byBnZXQgSFBEIGFuZCBFRElEIGJ5IA0KPj4+IENSLXNj cmF0Y2hlZA0KPj4NCj4+PiAgwqDCoMKgwqAgcmVnaXN0ZXIuDQo+Pg0KPj4+DQo+Pg0KPj4+IEJv b3Rpbmcgc2VxdWVuY2U6DQo+Pg0KPj4+IDEuIENoZWNrIGlmIFRYIGlzIEFTVERQwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIC8vDQo+Pj4gYXN0X2RwX2xhdW5jaCgpDQo+Pg0KPj4+IDIuIENoZWNrIGlm IERQLU1DVSBGVyBoYXMgbG9hZGVkDQo+Pj4gLy8gYXN0X2RwX2xhdW5jaCgpDQo+Pg0KPj4+IDMu IFJlYWQgRURJRMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvLw0KPj4+IGFzdF9kcF9yZWFkX2VkaWQo KQ0KPj4NCj4+PiA0LiBSZXNvbHV0aW9uIHN3aXRjaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvLw0KPj4+IGFz dF9kcF9TZXRPdXRwdXQoKQ0KPj4NCj4+Pg0KPj4NCj4+PiBWMzoNCj4+DQo+Pj4gMS4gUmVtb3Zl IHVubmVlZGVkIHNlbWljb2xvbi4NCj4+DQo+Pj4gMi4gQXBwbHkgdG8gZ2l0Oi8vYW5vbmdpdC5m cmVlZGVza3RvcC5vcmcvZHJtL2RybSwgaW5zdGVhZCBvZg0KPj4NCj4+PiAgwqDCoMKgwqAgZ2l0 Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZHJtL2RybS1taXNjDQo+Pg0KPj4+IDMuIFJlc29s dmUgYXV0byBidWlsZCB0ZXN0IFdBUk5JTkdzIG9uIFYxIHBhdGNoLg0KPj4NCj4+Pg0KPj4NCj4+ PiBWNDoNCj4+DQo+Pj4gMS4gU3luYyBjb2RlLWJhc2Ugd2l0aCBrZXJuZWwgNS4xN19yYzYgMi4g UmVtb3ZlIHRoZSBkZWZpbmUgb2YNCj4+DQo+Pj4gRFBDb250cm9sUG93ZXIsIGJlY2F1c2UgRFAg Y2hpcHMgbmVlZCB0byBiZQ0KPj4NCj4+PiAgwqDCoMKgwqAgcG93ZXJlZCBvbiB0byBiZSB1c2Vk Lg0KPj4NCj4+PiAzLiBSZW1vdmUgdGhlIHN3aXRjaGVzIG9mIFBIWSBhbmQgRGlzcGxheSBmcm9t IEVESUQgcHJvY2VkdXJlLg0KPj4NCj4+PiA0LiBSZXZpc2UgaW5jcmVhaW5nIGRlbGF5IHRvIGZp eGVkIGRlbGF5LCBiZWNhdXNlIHRoaXMgdmVyc2lvbiANCj4+PiBrZXJuZWwNCj4+DQo+Pj4gIMKg wqDCoMKgIGRvZXNuJ3QgZGV0ZWN0IG1pbml0b3IgY29uc2lzdGVubnRseS4NCj4+DQo+Pj4gNS4g Q3JlYXRlIGNsZWFuLXVwIGNvZGUgdXNlZCBmb3IgcmVzZXQgb2YgcG93ZXIgc3RhdGUgb24gZXJy b3JzIHdpdGgNCj4+DQo+Pj4gIMKgwqDCoMKgIC1FSU8gbWFubmVyLg0KPj4NCj4+PiA2LiBSZXZp c2UgdGhlIERQIGRldGVjdGlvbiBieSBUWCB0eXBlIGFuZCBpdHMgRFAtRlcgc3RhdHVzIGR1cmlu Zw0KPj4NCj4+PiAgwqDCoMKgwqAgYm9vdGluZyBhbmQgcmVzdW1lLg0KPj4NCj4+PiA3LiBDb3Jy ZWN0IHRoZSBDYW1lbENhc2UgU3R5bGUuDQo+Pg0KPj4+IDguIFVzZSByZWdpc3RlciByZWFkaW5n IHdoaWxlIG5lZWRpbmcsIGFuZCByZW1vdmUgdG8gaG9sZCBmdWxsDQo+Pg0KPj4+ICDCoMKgwqDC oCByZWdpc3Rlci4NCj4+DQo+Pj4gOS4gSW5zdGVhZCBvZiAndTgnLCByZXZpc2UgdG8gJ2Jvb2wn IG9uIHN3d2l0Y2ggb2YgUEhZIGFuZCB2aWRlby4NCj4+DQo+Pj4gMTAuQ29ycmVjdCB0eXBvDQo+ Pg0KPj4+IDExLlJlbW92ZSB0aGUgZHVwbGljYXRlZCBjb3B5IG9mIFRYIGRlZmluaXRpb24uDQo+ Pg0KPj4+IDEyLlVzZSBFRElEX0xFTkdUSCBhcyB0aGUgY29uc3RhbnQgb2YgMTI4Lg0KPj4NCj4+ Pg0KPj4NCj4+PiBTaWduZWQtb2ZmLWJ5OiBLdW9Ic2lhbmcgQ2hvdSA8a3VvaHNpYW5nX2Nob3VA YXNwZWVkdGVjaC5jb20gDQo+Pj4gPG1haWx0bzprdW9oc2lhbmdfY2hvdUBhc3BlZWR0ZWNoLmNv bT4+DQo+Pg0KPj4gUmV2aWV3ZWQtYnk6IFRob21hcyBaaW1tZXJtYW5uIDx0emltbWVybWFubkBz dXNlLmRlIA0KPj4gPG1haWx0bzp0emltbWVybWFubkBzdXNlLmRlPj4NCj4+DQo+PiBJJ3ZlIG1l YW53aGlsZSBhZGRlZCB5b3VyIHBhdGNoIHRvIGRybS1taXNjLW5leHQuIEl0IHNob3VsZCBzaG93 IHVwIA0KPj4gaW4gb25lIG9mIHRoZSBuZXh0IGtlcm5lbCByZWxlYXNlcy7CoCBUaGFua3MgYSBs b3QuDQo+Pg0KPj4gQmVzdCByZWdhcmRzDQo+Pg0KPj4gVGhvbWFzDQo+Pg0KPj4+IC0tLQ0KPj4N Cj4+PiAgwqDCoCBkcml2ZXJzL2dwdS9kcm0vYXN0L01ha2VmaWxlwqDCoCB8wqDCoCAyICstDQo+ Pg0KPj4+ICDCoMKgIGRyaXZlcnMvZ3B1L2RybS9hc3QvYXN0X2RwLmPCoMKgIHwgMjgyDQo+Pj4g KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+Pg0KPj4+ICDCoMKgIGRyaXZlcnMv Z3B1L2RybS9hc3QvYXN0X2Rydi5owqAgfCAxMTUgKysrKysrKysrKysrKysNCj4+DQo+Pj4gIMKg wqAgZHJpdmVycy9ncHUvZHJtL2FzdC9hc3RfbWFpbi5jIHzCoMKgIDUgKy0NCj4+DQo+Pj4gIMKg wqAgZHJpdmVycy9ncHUvZHJtL2FzdC9hc3RfbW9kZS5jIHwgMTI0ICsrKysrKysrKysrKysrLQ0K Pj4NCj4+PiAgwqDCoCBkcml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9wb3N0LmMgfMKgwqAgNCArLQ0K Pj4NCj4+PiAgwqDCoCA2IGZpbGVzIGNoYW5nZWQsIDUyNCBpbnNlcnRpb25zKCspLCA4IGRlbGV0 aW9ucygtKQ0KPj4NCj4+PiAgwqDCoCBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L2FzdC9hc3RfZHAuYw0KPj4NCj4+Pg0KPj4NCj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2FzdC9NYWtlZmlsZQ0KPj4NCj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9hc3QvTWFrZWZpbGUg aW5kZXggMjFmNzExNjBiLi41YTUzY2U1MWYgMTAwNjQ0DQo+Pg0KPj4+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9hc3QvTWFrZWZpbGUNCj4+DQo+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FzdC9N YWtlZmlsZQ0KPj4NCj4+PiBAQCAtMyw2ICszLDYgQEANCj4+DQo+Pj4gIMKgwqAgIyBNYWtlZmls ZSBmb3IgdGhlIGRybSBkZXZpY2UgZHJpdmVyLsKgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIA0KPj4+ IHN1cHBvcnQgZm9yIHRoZQ0KPj4NCj4+PiAgwqDCoCAjIERpcmVjdCBSZW5kZXJpbmcgSW5mcmFz dHJ1Y3R1cmUgKERSSSkgaW4gWEZyZWU4NiA0LjEuMCBhbmQgaGlnaGVyLg0KPj4NCj4+Pg0KPj4N Cj4+PiAtYXN0LXkgOj0gYXN0X2Rydi5vIGFzdF9pMmMubyBhc3RfbWFpbi5vIGFzdF9tbS5vIGFz dF9tb2RlLm8NCj4+DQo+Pj4gYXN0X3Bvc3QubyBhc3RfZHA1MDEubw0KPj4NCj4+PiArYXN0LXkg Oj0gYXN0X2Rydi5vIGFzdF9pMmMubyBhc3RfbWFpbi5vIGFzdF9tbS5vIGFzdF9tb2RlLm8NCj4+ DQo+Pj4gK2FzdF9wb3N0Lm8gYXN0X2RwNTAxLm8gYXN0X2RwLm8NCj4+DQo+Pj4NCj4+DQo+Pj4g IMKgwqAgb2JqLSQoQ09ORklHX0RSTV9BU1QpIDo9IGFzdC5vDQo+Pg0KPj4+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9kcC5jDQo+Pg0KPj4+IGIvZHJpdmVycy9ncHUvZHJt L2FzdC9hc3RfZHAuYyBuZXcgZmlsZSBtb2RlIDEwMDY0NCBpbmRleA0KPj4NCj4+PiAwMDAwMDAw MDAuLjQ1NTFiYzhhMw0KPj4NCj4+PiAtLS0gL2Rldi9udWxsDQo+Pg0KPj4+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9hc3QvYXN0X2RwLmMNCj4+DQo+Pj4gQEAgLTAsMCArMSwyODIgQEANCj4+DQo+ Pj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQo+Pg0KPj4+ICsvLyBDb3B5 cmlnaHQgKGMpIDIwMjEsIEFTUEVFRCBUZWNobm9sb2d5IEluYy4NCj4+DQo+Pj4gKy8vIEF1dGhv cnM6IEt1b0hzaWFuZyBDaG91IDxrdW9oc2lhbmdfY2hvdUBhc3BlZWR0ZWNoLmNvbSANCj4+PiAr PG1haWx0bzprdW9oc2lhbmdfY2hvdUBhc3BlZWR0ZWNoLmNvbT4+DQo+Pg0KPj4+ICsNCj4+DQo+ Pj4gKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPg0KPj4NCj4+PiArI2luY2x1ZGUgPGxpbnV4 L2RlbGF5Lmg+DQo+Pg0KPj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9wcmludC5oPg0KPj4NCj4+PiAr I2luY2x1ZGUgImFzdF9kcnYuaCINCj4+DQo+Pj4gKw0KPj4NCj4+PiAraW50IGFzdF9hc3RkcF9y ZWFkX2VkaWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTggKmVkaWRkYXRhKSB7DQo+Pg0KPj4+ ICvCoMKgIHN0cnVjdCBhc3RfcHJpdmF0ZSAqYXN0ID0gdG9fYXN0X3ByaXZhdGUoZGV2KTsNCj4+ DQo+Pj4gK8KgwqAgdTggaSA9IDAsIGogPSAwOw0KPj4NCj4+PiArDQo+Pg0KPj4+ICvCoMKgIC8q DQo+Pg0KPj4+ICvCoMKgICogQ1JEMVtiNV06IERQIE1DVSBGVyBpcyBleGVjdXRpbmcNCj4+DQo+ Pj4gK8KgwqAgKiBDUkRDW2IwXTogRFAgbGluayBzdWNjZXNzDQo+Pg0KPj4+ICvCoMKgICogQ1JE RltiMF06IERQIEhQRA0KPj4NCj4+PiArwqDCoCAqIENSRTVbYjBdOiBIb3N0IHJlYWRpbmcgRURJ RCBwcm9jZXNzIGlzIGRvbmUNCj4+DQo+Pj4gK8KgwqAgKi8NCj4+DQo+Pj4gK8KgwqAgaWYgKCEo YXN0X2dldF9pbmRleF9yZWdfbWFzayhhc3QsIEFTVF9JT19DUlRDX1BPUlQsIDB4RDEsDQo+Pj4g K0FTVERQX01DVV9GV19FWEVDVVRJTkcpICYmDQo+Pg0KPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oCBhc3RfZ2V0X2luZGV4X3JlZ19tYXNrKGFzdCwgQVNUX0lPX0NSVENfUE9SVCwgMHhEQywNCj4+ PiArQVNURFBfTElOS19TVUNDRVNTKSAmJg0KPj4NCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAg YXN0X2dldF9pbmRleF9yZWdfbWFzayhhc3QsIEFTVF9JT19DUlRDX1BPUlQsIDB4REYsDQo+Pj4g K0FTVERQX0hQRCkgJiYNCj4+DQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGFzdF9nZXRfaW5k ZXhfcmVnX21hc2soYXN0LCBBU1RfSU9fQ1JUQ19QT1JULCAweEU1LA0KPj4NCj4+PiArDQo+Pj4g K0FTVERQX0hPU1RfRURJRF9SRUFEX0RPTkVfTUFTSykpKSB7DQo+Pg0KPj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoCBnb3RvIGVycl9hc3RkcF9lZGlkX25vdF9yZWFkeTsNCj4+DQo+Pj4gK8KgwqAg fQ0KPj4NCj4+PiArDQo+Pg0KPj4+ICvCoMKgIGFzdF9zZXRfaW5kZXhfcmVnX21hc2soYXN0LCBB U1RfSU9fQ1JUQ19QT1JULCAweEU1LCAodTgpIA0KPj4+ICt+QVNURFBfSE9TVF9FRElEX1JFQURf RE9ORV9NQVNLLA0KPj4NCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAweDAwKTsNCj4+DQo+Pj4gKw0KPj4NCj4+PiArwqDCoCBmb3IgKGkgPSAwOyBpIDwg MzI7IGkrKykgew0KPj4NCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyoNCj4+DQo+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgICogQ1JFNFs3OjBdOiBSZWFkLVBvaW50ZXIgZm9yIEVESUQgKFVu aXQ6IDRieXRlcyk7IHZhbGlkDQo+Pj4gK3JhbmdlOiAwfjY0DQo+Pg0KPj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoCAqLw0KPj4NCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXN0X3NldF9pbmRl eF9yZWdfbWFzayhhc3QsIEFTVF9JT19DUlRDX1BPUlQsIDB4RTQsDQo+Pg0KPj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAodTgpIA0KPj4+ICt+QVNURFBfRURJRF9SRUFEX1BPSU5URVJfTUFTSywgKHU4KSBpKTsN Cj4+DQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGogPSAwOw0KPj4NCj4+PiArDQo+Pg0KPj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKg0KPj4NCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAg KiBDUkQ3W2IwXTogdmFsaWQgZmxhZyBmb3IgRURJRA0KPj4NCj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqAgKiBDUkQ2W2IwXTogbWlycm9yIHJlYWQgcG9pbnRlciBmb3IgRURJRA0KPj4NCj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8NCj4+DQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIHdo aWxlICgoYXN0X2dldF9pbmRleF9yZWdfbWFzayhhc3QsIEFTVF9JT19DUlRDX1BPUlQsIA0KPj4+ ICsweEQ3LA0KPj4NCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBBU1REUF9FRElEX1ZBTElEX0ZMQUdfTUFTSykgIT0gMHgwMSkgfHwNCj4+ DQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoYXN0X2dldF9pbmRl eF9yZWdfbWFzayhhc3QsIEFTVF9JT19DUlRDX1BPUlQsIA0KPj4+ICsweEQ2LA0KPj4NCj4+PiAr DQo+Pj4gK0FTVERQX0VESURfUkVBRF9QT0lOVEVSX01BU0spICE9IGkpKSB7DQo+Pg0KPj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyoNCj4+DQo+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIERlbGF5IGFyZSBnZXR0aW5nIGxvbmdlciB3 aXRoIGVhY2ggcmV0cnkuDQo+Pg0KPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgKiAxLiBUaGUgRGVsYXlzIGFyZSBvZnRlbiAyIGxvb3BzIHdoZW4gdXNlcnMgcmVxdWVz dCAiRGlzcGxheSBTZXR0aW5ncyINCj4+DQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAqwqDCoMKgIMKgIG9mIHJpZ2h0LWNsaWNrIG9mIG1vdXNlLg0KPj4NCj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogMi4gVGhlIERlbGF5cyBhcmUg b2Z0ZW4gbG9uZ2VyIGEgbG90IHdoZW4gc3lzdGVtIHJlc3VtZSBmcm9tIFMzL1M0Lg0KPj4NCj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICovDQo+Pg0KPj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbWRlbGF5KGorMSk7DQo+Pg0KPj4+ICsN Cj4+DQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoIShhc3Rf Z2V0X2luZGV4X3JlZ19tYXNrKGFzdCwgDQo+Pj4gK0FTVF9JT19DUlRDX1BPUlQsIDB4RDEsDQo+ Pg0KPj4+ICsNCj4+PiArQVNURFBfTUNVX0ZXX0VYRUNVVElORykgJiYNCj4+DQo+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXN0X2dldF9p bmRleF9yZWdfbWFzayhhc3QsIA0KPj4+ICtBU1RfSU9fQ1JUQ19QT1JULCAweERDLA0KPj4NCj4+ PiArDQo+Pj4gK0FTVERQX0xJTktfU1VDQ0VTUykgJiYNCj4+DQo+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXN0X2dldF9pbmRleF9yZWdf bWFzayhhc3QsIA0KPj4+ICtBU1RfSU9fQ1JUQ19QT1JULCAweERGLCBBU1REUF9IUEQpKSkgew0K Pj4NCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBnb3RvIGVycl9hc3RkcF9qdW1wX291dF9sb29wX29mX2VkaWQ7DQo+Pg0KPj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQ0KPj4NCj4+PiArDQo+Pg0KPj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaisrOw0KPj4NCj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChqID4gMjAwKQ0KPj4NCj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGVy cl9hc3RkcF9qdW1wX291dF9sb29wX29mX2VkaWQ7DQo+Pg0KPj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoCB9DQo+Pg0KPj4+ICsNCj4+DQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgICooZWRpZGRh dGEpID0gYXN0X2dldF9pbmRleF9yZWdfbWFzayhhc3QsIA0KPj4+ICtBU1RfSU9fQ1JUQ19QT1JU LA0KPj4NCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAw eEQ4LCANCj4+PiArQVNURFBfRURJRF9SRUFEX0RBVEFfTUFTSyk7DQo+Pg0KPj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoCAqKGVkaWRkYXRhICsgMSkgPSBhc3RfZ2V0X2luZGV4X3JlZ19tYXNrKGFz dCwgDQo+Pj4gK0FTVF9JT19DUlRDX1BPUlQsIDB4RDksDQo+Pg0KPj4+ICsNCj4+PiArQVNURFBf RURJRF9SRUFEX0RBVEFfTUFTSyk7DQo+Pg0KPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCAqKGVk aWRkYXRhICsgMikgPSBhc3RfZ2V0X2luZGV4X3JlZ19tYXNrKGFzdCwgDQo+Pj4gK0FTVF9JT19D UlRDX1BPUlQsIDB4REEsDQo+Pg0KPj4+ICsNCj4+PiArQVNURFBfRURJRF9SRUFEX0RBVEFfTUFT Syk7DQo+Pg0KPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCAqKGVkaWRkYXRhICsgMykgPSBhc3Rf Z2V0X2luZGV4X3JlZ19tYXNrKGFzdCwgDQo+Pj4gK0FTVF9JT19DUlRDX1BPUlQsIDB4REIsDQo+ Pg0KPj4+ICsNCj4+PiArQVNURFBfRURJRF9SRUFEX0RBVEFfTUFTSyk7DQo+Pg0KPj4+ICsNCj4+ DQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChpID09IDMxKSB7DQo+Pg0KPj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyoNCj4+DQo+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIEZvciAxMjgtYnl0ZXMgRURJRF8xLjMsDQo+Pg0K Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiAxLiBBZGQgdGhlIHZh bHVlIG9mIEJ5dGVzLTEyNiB0byBCeXRlcy0xMjcuDQo+Pg0KPj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgVGhlIEJ5dGVzLTEy NyBpcyBDaGVja3N1bS4gU3VtIG9mIA0KPj4+ICthbGwgMTI4Ynl0ZXMgc2hvdWxkDQo+Pg0KPj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKsKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgZXF1YWwgMMKgwqDCoCAobW9kIDI1NikuDQo+Pg0KPj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgKiAyLiBNb2RpZnkgQnl0ZXMtMTI2IHRvIGJlIDAuDQo+Pg0K Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKsKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgVGhlIEJ5dGVzLTEyNiBpbmRpY2F0ZXMgdGhlIE51bWJlciANCj4+PiArb2YgZXh0 ZW5zaW9ucyB0bw0KPj4NCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZvbGxvdy4gMCByZXByZXNlbnRzIG5vZXh0ZW5zaW9u cy4NCj4+DQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqLw0KPj4N Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICooZWRpZGRhdGEgKyAz KSA9ICooZWRpZGRhdGEgKyAzKSArICooZWRpZGRhdGEgKyANCj4+PiArMik7DQo+Pg0KPj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKihlZGlkZGF0YSArIDIpID0gMDsN Cj4+DQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIH0NCj4+DQo+Pj4gKw0KPj4NCj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqAgZWRpZGRhdGEgKz0gNDsNCj4+DQo+Pj4gK8KgwqAgfQ0KPj4NCj4+ PiArDQo+Pg0KPj4+ICvCoMKgIGFzdF9zZXRfaW5kZXhfcmVnX21hc2soYXN0LCBBU1RfSU9fQ1JU Q19QT1JULCAweEU1LCAodTgpIA0KPj4+ICt+QVNURFBfSE9TVF9FRElEX1JFQURfRE9ORV9NQVNL LA0KPj4NCj4+PiArDQo+Pj4gK0FTVERQX0hPU1RfRURJRF9SRUFEX0RPTkUpOw0KPj4NCj4+PiAr DQo+Pg0KPj4+ICvCoMKgIHJldHVybiAwOw0KPj4NCj4+PiArDQo+Pg0KPj4+ICtlcnJfYXN0ZHBf anVtcF9vdXRfbG9vcF9vZl9lZGlkOg0KPj4NCj4+PiArwqDCoCBhc3Rfc2V0X2luZGV4X3JlZ19t YXNrKGFzdCwgQVNUX0lPX0NSVENfUE9SVCwgMHhFNSwNCj4+DQo+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHU4KSANCj4+PiArfkFTVERQX0hPU1RfRURJ RF9SRUFEX0RPTkVfTUFTSywNCj4+DQo+Pj4gKw0KPj4+ICtBU1REUF9IT1NUX0VESURfUkVBRF9E T05FKTsNCj4+DQo+Pj4gK8KgwqAgcmV0dXJuICh+KGorMjU2KSArIDEpOw0KPj4NCj4+PiArDQo+ Pg0KPj4+ICtlcnJfYXN0ZHBfZWRpZF9ub3RfcmVhZHk6DQo+Pg0KPj4+ICvCoMKgIGlmICghKGFz dF9nZXRfaW5kZXhfcmVnX21hc2soYXN0LCBBU1RfSU9fQ1JUQ19QT1JULCAweEQxLA0KPj4+ICtB U1REUF9NQ1VfRldfRVhFQ1VUSU5HKSkpDQo+Pg0KPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBy ZXR1cm4gKH4weEQxICsgMSk7DQo+Pg0KPj4+ICvCoMKgIGlmICghKGFzdF9nZXRfaW5kZXhfcmVn X21hc2soYXN0LCBBU1RfSU9fQ1JUQ19QT1JULCAweERDLA0KPj4+ICtBU1REUF9MSU5LX1NVQ0NF U1MpKSkNCj4+DQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAofjB4REMgKyAxKTsN Cj4+DQo+Pj4gK8KgwqAgaWYgKCEoYXN0X2dldF9pbmRleF9yZWdfbWFzayhhc3QsIEFTVF9JT19D UlRDX1BPUlQsIDB4REYsDQo+Pj4gK0FTVERQX0hQRCkpKQ0KPj4NCj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqAgcmV0dXJuICh+MHhERiArIDEpOw0KPj4NCj4+PiArwqDCoCBpZiAoIShhc3RfZ2V0 X2luZGV4X3JlZ19tYXNrKGFzdCwgQVNUX0lPX0NSVENfUE9SVCwgMHhFNSwNCj4+PiArQVNURFBf SE9TVF9FRElEX1JFQURfRE9ORV9NQVNLKSkpDQo+Pg0KPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oCByZXR1cm4gKH4weEU1ICsgMSk7DQo+Pg0KPj4+ICsNCj4+DQo+Pj4gK8KgwqAgcmV0dXJuwqDC oMKgwqDCoCAwOw0KPj4NCj4+PiArfQ0KPj4NCj4+PiArDQo+Pg0KPj4+ICsvKg0KPj4NCj4+PiAr ICogTGF1bmNoIEFzcGVlZCBEUA0KPj4NCj4+PiArICovDQo+Pg0KPj4+ICt2b2lkIGFzdF9kcF9s YXVuY2goc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTggYlBvd2VyKSB7DQo+Pg0KPj4+ICvCoMKg IHUzMiBpID0gMCwgaiA9IDAsIFdhaXRDb3VudCA9IDE7DQo+Pg0KPj4+ICvCoMKgIHU4IGJEUFRY ID0gMDsNCj4+DQo+Pj4gK8KgwqAgdTggYkRQRXhlY3V0ZSA9IDE7DQo+Pg0KPj4+ICsNCj4+DQo+ Pj4gK8KgwqAgc3RydWN0IGFzdF9wcml2YXRlICphc3QgPSB0b19hc3RfcHJpdmF0ZShkZXYpOw0K Pj4NCj4+PiArwqDCoCAvLyBTMyBjb21lIGJhY2ssIG5lZWQgbW9yZSB0aW1lIHRvIHdhaXQgQk1D IHJlYWR5Lg0KPj4NCj4+PiArwqDCoCBpZiAoYlBvd2VyKQ0KPj4NCj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqAgV2FpdENvdW50ID0gMzAwOw0KPj4NCj4+PiArDQo+Pg0KPj4+ICsNCj4+DQo+Pj4g K8KgwqAgLy8gV2FpdCB0b3RhbCBjb3VudCBieSBkaWZmZXJlbnQgY29uZGl0aW9uLg0KPj4NCj4+ PiArwqDCoCBmb3IgKGogPSAwOyBqIDwgV2FpdENvdW50OyBqKyspIHsNCj4+DQo+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgIGJEUFRYID0gYXN0X2dldF9pbmRleF9yZWdfbWFzayhhc3QsIEFTVF9J T19DUlRDX1BPUlQsIA0KPj4+ICsweEQxLA0KPj4NCj4+PiArVFhfVFlQRV9NQVNLKTsNCj4+DQo+ Pj4gKw0KPj4NCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGJEUFRYKQ0KPj4NCj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOw0KPj4NCj4+PiArDQo+ Pg0KPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBtc2xlZXAoMTAwKTsNCj4+DQo+Pj4gK8KgwqAg fQ0KPj4NCj4+PiArDQo+Pg0KPj4+ICvCoMKgIC8vIDB4RSA6IEFTVERQIHdpdGggRFBNQ1UgRlcg aGFuZGxpbmcNCj4+DQo+Pj4gK8KgwqAgaWYgKGJEUFRYID09IEFTVERQX0RQTUNVX1RYKSB7DQo+ Pg0KPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCAvLyBXYWl0IG9uZSBzZWNvbmQgdGhlbiB0aW1l b3V0Lg0KPj4NCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgaSA9IDA7DQo+Pg0KPj4+ICsNCj4+ DQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIHdoaWxlIChhc3RfZ2V0X2luZGV4X3JlZ19tYXNr KGFzdCwgQVNUX0lPX0NSVENfUE9SVCwgDQo+Pj4gKzB4RDEsIENPUFJPQ0VTU09SX0xBVU5DSCkg IT0NCj4+DQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBDT1BST0NF U1NPUl9MQVVOQ0gpIHsNCj4+DQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBpKys7DQo+Pg0KPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Ly8gd2FpdCAxMDAgbXMNCj4+DQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBtc2xlZXAoMTAwKTsNCj4+DQo+Pj4gKw0KPj4NCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGlmIChpID49IDEwKSB7DQo+Pg0KPj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8vIERQIHdvdWxkIG5vdCBi ZSByZWFkeS4NCj4+DQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgYkRQRXhlY3V0ZSA9IDA7DQo+Pg0KPj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOw0KPj4NCj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0NCj4+DQo+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgIH0NCj4+DQo+Pj4gKw0KPj4NCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYg KGJEUEV4ZWN1dGUpDQo+Pg0KPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgYXN0LT50eF9jaGlwX3R5cGUgPSBBU1RfVFhfQVNURFA7DQo+Pg0KPj4+ICsNCj4+DQo+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgIGFzdF9zZXRfaW5kZXhfcmVnX21hc2soYXN0LCBBU1RfSU9f Q1JUQ19QT1JULCAweEU1LA0KPj4NCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAodTgpIA0KPj4+ICt+QVNURFBfSE9TVF9FRElEX1JFQURfRE9ORV9NQVNL LA0KPj4NCj4+PiArDQo+Pj4gK0FTVERQX0hPU1RfRURJRF9SRUFEX0RPTkUpOw0KPj4NCj4+PiAr wqDCoCB9IGVsc2UNCj4+DQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGFzdC0+dHhfY2hpcF90 eXBlID0gQVNUX1RYX05PTkU7DQo+Pg0KPj4+ICt9DQo+Pg0KPj4+ICsNCj4+DQo+Pj4gKw0KPj4N Cj4+PiArDQo+Pg0KPj4+ICt2b2lkIGFzdF9kcF9wb3dlcl9vbl9vZmYoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwgYm9vbCBvbikgew0KPj4NCj4+PiArwqDCoCBzdHJ1Y3QgYXN0X3ByaXZhdGUgKmFz dCA9IHRvX2FzdF9wcml2YXRlKGRldik7DQo+Pg0KPj4+ICvCoMKgIC8vIFJlYWQgYW5kIFR1cm4g b2ZmIERQIFBIWSBzbGVlcA0KPj4NCj4+PiArwqDCoCB1OCBiRTMgPSBhc3RfZ2V0X2luZGV4X3Jl Z19tYXNrKGFzdCwgQVNUX0lPX0NSVENfUE9SVCwgMHhFMywNCj4+DQo+Pj4gK0FTVF9EUF9WSURF T19FTkFCTEUpOw0KPj4NCj4+PiArDQo+Pg0KPj4+ICvCoMKgIC8vIFR1cm4gb24gRFAgUEhZIHNs ZWVwDQo+Pg0KPj4+ICvCoMKgIGlmICghb24pDQo+Pg0KPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oCBiRTMgfD0gQVNUX0RQX1BIWV9TTEVFUDsNCj4+DQo+Pj4gKw0KPj4NCj4+PiArwqDCoCAvLyBE UCBQb3dlciBvbi9vZmYNCj4+DQo+Pj4gK8KgwqAgYXN0X3NldF9pbmRleF9yZWdfbWFzayhhc3Qs IEFTVF9JT19DUlRDX1BPUlQsIDB4RTMsICh1OCkNCj4+DQo+Pj4gK35BU1RfRFBfUEhZX1NMRUVQ LCBiRTMpOyB9DQo+Pg0KPj4+ICsNCj4+DQo+Pj4gKw0KPj4NCj4+PiArDQo+Pg0KPj4+ICt2b2lk IGFzdF9kcF9zZXRfb25fb2ZmKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGJvb2wgb24pIHsNCj4+ DQo+Pj4gK8KgwqAgc3RydWN0IGFzdF9wcml2YXRlICphc3QgPSB0b19hc3RfcHJpdmF0ZShkZXYp Ow0KPj4NCj4+PiArwqDCoCB1OCB2aWRlb19vbl9vZmYgPSBvbjsNCj4+DQo+Pj4gKw0KPj4NCj4+ PiArwqDCoCAvLyBWaWRlbyBPbi9PZmYNCj4+DQo+Pj4gK8KgwqAgYXN0X3NldF9pbmRleF9yZWdf bWFzayhhc3QsIEFTVF9JT19DUlRDX1BPUlQsIDB4RTMsICh1OCkNCj4+DQo+Pj4gK35BU1RfRFBf VklERU9fRU5BQkxFLCBvbik7DQo+Pg0KPj4+ICsNCj4+DQo+Pj4gK8KgwqAgLy8gSWYgRFAgcGx1 ZyBpbiBhbmQgbGluayBzdWNjZXNzZnVsIHRoZW4gY2hlY2sgdmlkZW8gb24gLyBvZmYgDQo+Pj4g K3N0YXR1cw0KPj4NCj4+PiArwqDCoCBpZiAoYXN0X2dldF9pbmRleF9yZWdfbWFzayhhc3QsIEFT VF9JT19DUlRDX1BPUlQsIDB4REMsDQo+Pj4gK0FTVERQX0xJTktfU1VDQ0VTUykgJiYNCj4+DQo+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGFzdF9nZXRfaW5kZXhfcmVnX21hc2soYXN0LCBBU1Rf SU9fQ1JUQ19QT1JULCAweERGLA0KPj4+ICtBU1REUF9IUEQpKSB7DQo+Pg0KPj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoCB2aWRlb19vbl9vZmYgPDw9IDQ7DQo+Pg0KPj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoCB3aGlsZSAoYXN0X2dldF9pbmRleF9yZWdfbWFzayhhc3QsIEFTVF9JT19DUlRDX1BP UlQsIA0KPj4+ICsweERGLA0KPj4NCj4+PiArDQo+Pj4gK0FTVERQX01JUlJPUl9WSURFT19FTkFC TEUpICE9IHZpZGVvX29uX29mZikgew0KPj4NCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIC8vIHdhaXQgMSBtcw0KPj4NCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIG1kZWxheSgxKTsNCj4+DQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg IH0NCj4+DQo+Pj4gK8KgwqAgfQ0KPj4NCj4+PiArfQ0KPj4NCj4+PiArDQo+Pg0KPj4+ICt2b2lk IGFzdF9kcF9zZXRfbW9kZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHN0cnVjdA0KPj4NCj4+PiAr YXN0X3ZiaW9zX21vZGVfaW5mbyAqdmJpb3NfbW9kZSkgew0KPj4NCj4+PiArwqDCoCBzdHJ1Y3Qg YXN0X3ByaXZhdGUgKmFzdCA9IHRvX2FzdF9wcml2YXRlKGNydGMtPmRldik7DQo+Pg0KPj4+ICsN Cj4+DQo+Pj4gK8KgwqAgdTMyIHVsUmVmcmVzaFJhdGVJbmRleDsNCj4+DQo+Pj4gK8KgwqAgdTgg TW9kZUlkeDsNCj4+DQo+Pj4gKw0KPj4NCj4+PiArwqDCoCB1bFJlZnJlc2hSYXRlSW5kZXggPSB2 Ymlvc19tb2RlLT5lbmhfdGFibGUtPnJlZnJlc2hfcmF0ZV9pbmRleCAtIA0KPj4+ICsxOw0KPj4N Cj4+PiArDQo+Pg0KPj4+ICvCoMKgIHN3aXRjaCAoY3J0Yy0+bW9kZS5jcnRjX2hkaXNwbGF5KSB7 DQo+Pg0KPj4+ICvCoMKgIGNhc2UgMzIwOg0KPj4NCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAg TW9kZUlkeCA9IEFTVERQXzMyMHgyNDBfNjA7DQo+Pg0KPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oCBicmVhazsNCj4+DQo+Pj4gK8KgwqAgY2FzZSA0MDA6DQo+Pg0KPj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoCBNb2RlSWR4ID0gQVNURFBfNDAweDMwMF82MDsNCj4+DQo+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgIGJyZWFrOw0KPj4NCj4+PiArwqDCoCBjYXNlIDUxMjoNCj4+DQo+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgIE1vZGVJZHggPSBBU1REUF81MTJ4Mzg0XzYwOw0KPj4NCj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7DQo+Pg0KPj4+ICvCoMKgIGNhc2UgNjQwOg0KPj4NCj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgTW9kZUlkeCA9IChBU1REUF82NDB4NDgwXzYwICsgKHU4 KSB1bFJlZnJlc2hSYXRlSW5kZXgpOw0KPj4NCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJl YWs7DQo+Pg0KPj4+ICvCoMKgIGNhc2UgODAwOg0KPj4NCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqAgTW9kZUlkeCA9IChBU1REUF84MDB4NjAwXzU2ICsgKHU4KSB1bFJlZnJlc2hSYXRlSW5kZXgp Ow0KPj4NCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7DQo+Pg0KPj4+ICvCoMKgIGNh c2UgMTAyNDoNCj4+DQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIE1vZGVJZHggPSAoQVNURFBf MTAyNHg3NjhfNjAgKyAodTgpIHVsUmVmcmVzaFJhdGVJbmRleCk7DQo+Pg0KPj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoCBicmVhazsNCj4+DQo+Pj4gK8KgwqAgY2FzZSAxMTUyOg0KPj4NCj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqAgTW9kZUlkeCA9IEFTVERQXzExNTJ4ODY0Xzc1Ow0KPj4NCj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7DQo+Pg0KPj4+ICvCoMKgIGNhc2UgMTI4MDoN Cj4+DQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChjcnRjLT5tb2RlLmNydGNfdmRpc3Bs YXkgPT0gODAwKQ0KPj4NCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IE1vZGVJZHggPSAoQVNURFBfMTI4MHg4MDBfNjBfUkIgLSAodTgpIA0KPj4+ICt1bFJlZnJlc2hS YXRlSW5kZXgpOw0KPj4NCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgZWxzZcKgwqDCoMKgwqDC oMKgwqDCoCAvLyAxMDI0DQo+Pg0KPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgTW9kZUlkeCA9IChBU1REUF8xMjgweDEwMjRfNjAgKyAodTgpIA0KPj4+ICt1bFJlZnJl c2hSYXRlSW5kZXgpOw0KPj4NCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7DQo+Pg0K Pj4+ICvCoMKgIGNhc2UgMTM2MDoNCj4+DQo+Pj4gK8KgwqAgY2FzZSAxMzY2Og0KPj4NCj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqAgTW9kZUlkeCA9IEFTVERQXzEzNjZ4NzY4XzYwOw0KPj4NCj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7DQo+Pg0KPj4+ICvCoMKgIGNhc2UgMTQ0MDoN Cj4+DQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIE1vZGVJZHggPSAoQVNURFBfMTQ0MHg5MDBf NjBfUkIgLSAodTgpIA0KPj4+ICt1bFJlZnJlc2hSYXRlSW5kZXgpOw0KPj4NCj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqAgYnJlYWs7DQo+Pg0KPj4+ICvCoMKgIGNhc2UgMTYwMDoNCj4+DQo+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChjcnRjLT5tb2RlLmNydGNfdmRpc3BsYXkgPT0gOTAw KQ0KPj4NCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIE1vZGVJZHgg PSAoQVNURFBfMTYwMHg5MDBfNjBfUkIgLSAodTgpIA0KPj4+ICt1bFJlZnJlc2hSYXRlSW5kZXgp Ow0KPj4NCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgZWxzZcKgwqDCoMKgwqDCoMKgwqDCoCAv LzEyMDANCj4+DQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBNb2Rl SWR4ID0gQVNURFBfMTYwMHgxMjAwXzYwOw0KPj4NCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAg YnJlYWs7DQo+Pg0KPj4+ICvCoMKgIGNhc2UgMTY4MDoNCj4+DQo+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgIE1vZGVJZHggPSAoQVNURFBfMTY4MHgxMDUwXzYwX1JCIC0gKHU4KSANCj4+PiArdWxS ZWZyZXNoUmF0ZUluZGV4KTsNCj4+DQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOw0K Pj4NCj4+PiArwqDCoCBjYXNlIDE5MjA6DQo+Pg0KPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBp ZiAoY3J0Yy0+bW9kZS5jcnRjX3ZkaXNwbGF5ID09IDEwODApDQo+Pg0KPj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgTW9kZUlkeCA9IEFTVERQXzE5MjB4MTA4MF82MDsN Cj4+DQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGVsc2XCoMKgwqDCoMKgwqDCoMKgwqAgLy8x MjAwDQo+Pg0KPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgTW9kZUlk eCA9IEFTVERQXzE5MjB4MTIwMF82MDsNCj4+DQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGJy ZWFrOw0KPj4NCj4+PiArwqDCoCBkZWZhdWx0Og0KPj4NCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqAgcmV0dXJuOw0KPj4NCj4+PiArwqDCoCB9DQo+Pg0KPj4+ICsNCj4+DQo+Pj4gK8KgwqAgLyoN Cj4+DQo+Pj4gK8KgwqAgKiBDUkUwWzc6MF06IE1JU0MwICgoMHgwMDogMTgtYnBwKSBvciAoMHgy MDogMjQtYnBwKQ0KPj4NCj4+PiArwqDCoCAqIENSRTFbNzowXTogTUlTQzEgKGRlZmF1bHQ6IDB4 MDApDQo+Pg0KPj4+ICvCoMKgICogQ1JFMls3OjBdOiB2aWRlbyBmb3JtYXQgaW5kZXggKDB4MDAg fiAweDIwIG9yIDB4NDAgfiAweDUwKQ0KPj4NCj4+PiArwqDCoCAqLw0KPj4NCj4+PiArwqDCoCBh c3Rfc2V0X2luZGV4X3JlZ19tYXNrKGFzdCwgQVNUX0lPX0NSVENfUE9SVCwgMHhFMCwgKHU4KSAN Cj4+PiArfkFTVERQX0NMRUFSX01BU0ssDQo+Pg0KPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFTVERQX01JU0MwXzI0YnBwKTsNCj4+DQo+ Pj4gK8KgwqAgYXN0X3NldF9pbmRleF9yZWdfbWFzayhhc3QsIEFTVF9JT19DUlRDX1BPUlQsIDB4 RTEsICh1OCkgDQo+Pj4gK35BU1REUF9DTEVBUl9NQVNLLCBBU1REUF9NSVNDMSk7DQo+Pg0KPj4+ ICvCoMKgIGFzdF9zZXRfaW5kZXhfcmVnX21hc2soYXN0LCBBU1RfSU9fQ1JUQ19QT1JULCAweEUy LCAodTgpDQo+Pg0KPj4+ICt+QVNURFBfQ0xFQVJfTUFTSywgTW9kZUlkeCk7IH0NCj4+DQo+Pj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hc3QvYXN0X2Rydi5oDQo+Pg0KPj4+IGIvZHJp dmVycy9ncHUvZHJtL2FzdC9hc3RfZHJ2LmggaW5kZXggYTE5MzE1YjJmLi5mZjFhZTMxNGIgMTAw NjQ0DQo+Pg0KPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hc3QvYXN0X2Rydi5oDQo+Pg0KPj4+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hc3QvYXN0X2Rydi5oDQo+Pg0KPj4+IEBAIC03MCw2ICs3 MCw3IEBAIGVudW0gYXN0X3R4X2NoaXAgew0KPj4NCj4+PiAgwqDCoCDCoMKgwqDCoMKgwqDCoCBB U1RfVFhfTk9ORSwNCj4+DQo+Pj4gIMKgwqAgwqDCoMKgwqDCoMKgwqAgQVNUX1RYX1NJTDE2NCwN Cj4+DQo+Pj4gIMKgwqAgwqDCoMKgwqDCoMKgwqAgQVNUX1RYX0RQNTAxLA0KPj4NCj4+PiArwqDC oCBBU1RfVFhfQVNURFAsDQo+Pg0KPj4+ICDCoMKgIH07DQo+Pg0KPj4+DQo+Pg0KPj4+ICDCoMKg ICNkZWZpbmUgQVNUX0RSQU1fNTEyTXgxNiAwDQo+Pg0KPj4+IEBAIC0xODQsNiArMTg1LDEwIEBA IHN0cnVjdCBhc3RfcHJpdmF0ZSB7DQo+Pg0KPj4+ICDCoMKgIMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRybV9lbmNvZGVyIGVuY29kZXI7DQo+ Pg0KPj4+ICDCoMKgIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgc3RydWN0IGRybV9jb25uZWN0b3IgY29ubmVjdG9yOw0KPj4NCj4+PiAgwqDCoCDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfSBkcDUwMTsNCj4+DQo+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgIHN0cnVjdCB7DQo+Pg0KPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgc3RydWN0IGRybV9lbmNvZGVyIGVuY29kZXI7DQo+Pg0KPj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRybV9jb25uZWN0b3IgY29ubmVjdG9yOw0K Pj4NCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgfSBhc3RkcDsNCj4+DQo+Pj4gIMKgwqAgwqDC oMKgwqDCoMKgwqAgfSBvdXRwdXQ7DQo+Pg0KPj4+DQo+Pg0KPj4+ICDCoMKgIMKgwqDCoMKgwqDC oMKgIGJvb2wgc3VwcG9ydF93aWRlX3NjcmVlbjsNCj4+DQo+Pj4gQEAgLTM1NywxMCArMzYyLDEx MyBAQCBpbnQgYXN0X21vZGVfY29uZmlnX2luaXQoc3RydWN0IGFzdF9wcml2YXRlIA0KPj4+ICph c3QpOw0KPj4NCj4+PiAgwqDCoCAjZGVmaW5lIEFTVF9EUDUwMV9FRElEX0RBVEHCoMKgwqAgMHhm MDIwDQo+Pg0KPj4+DQo+Pg0KPj4+ICDCoMKgIC8qIERlZmluZSBmb3IgU29jIHNjcmF0Y2hlZCBy ZWcgKi8NCj4+DQo+Pj4gKyNkZWZpbmUgQ09QUk9DRVNTT1JfTEFVTkNIwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCSVQoNSkNCj4+DQo+Pj4gKw0KPj4NCj4+PiArLyoN Cj4+DQo+Pj4gKyAqIERpc3BsYXkgVHJhbnNtaXR0ZXIgVHlwZToNCj4+DQo+Pj4gKyAqLw0KPj4N Cj4+PiArI2RlZmluZSBUWF9UWVBFX01BU0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgR0VOTUFTSygzLCAxKQ0KPj4NCj4+PiArI2RlZmluZSBO T19UWMKgwqDCoCAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoMCA8PCAxKQ0KPj4NCj4+PiArI2RlZmlu ZSBJVEU2NjEyMV9WQklPU19UWMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgKDEgPDwgMSkNCj4+DQo+Pj4gKyNkZWZpbmUgU0kxNjRfVkJJT1NfVFjCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICgyIDw8IDEpDQo+Pg0KPj4+ ICsjZGVmaW5lIENINzAwM19WQklPU19UWMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICgzIDw8IDEpDQo+Pg0KPj4+ICsjZGVmaW5lIERQNTAxX1ZCSU9TX1RYwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICg0IDw8IDEpDQo+ Pg0KPj4+ICsjZGVmaW5lIEFOWDk4MDdfVkJJT1NfVFjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICg1IDw8IDEpDQo+Pg0KPj4+ICsjZGVmaW5lIFRYX0ZXX0VNQkVEREVE X0ZXX1RYwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICg2IDw8IDEpDQo+Pg0KPj4+ICsj ZGVmaW5lIEFTVERQX0RQTUNVX1RYwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICg3IDw8IDEpDQo+Pg0KPj4+ICsNCj4+DQo+Pj4gIMKg wqAgI2RlZmluZSBBU1RfVlJBTV9JTklUX1NUQVRVU19NQVNLwqDCoMKgwqDCoMKgIEdFTk1BU0so NywgNikNCj4+DQo+Pj4gIMKgwqAgLy8jZGVmaW5lIEFTVF9WUkFNX0lOSVRfQllfQk1DwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIEJJVCg3KQ0KPj4NCj4+PiAgwqDCoCAvLyNkZWZpbmUgQVNUX1ZS QU1fSU5JVF9SRUFEWcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCSVQoNikNCj4+DQo+ Pj4NCj4+DQo+Pj4gKy8qIERlZmluZSBmb3IgU29jIHNjcmF0Y2hlZCByZWcgdXNlZCBvbiBBU1RE UCAqLw0KPj4NCj4+PiArI2RlZmluZSBBU1RfRFBfUEhZX1NMRUVQwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCSVQoNCkNCj4+DQo+Pj4gKyNkZWZpbmUgQVNUX0RQX1ZJ REVPX0VOQUJMRcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJJVCgwKQ0KPj4NCj4+PiArDQo+ Pg0KPj4+ICsjZGVmaW5lIEFTVF9EUF9QT1dFUl9PTsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHRydWUNCj4+DQo+Pj4gKyNkZWZpbmUgQVNUX0RQX1BPV0VSX09GRsKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmYWxzZQ0KPj4NCj4+PiArDQo+Pg0KPj4+ ICsvKg0KPj4NCj4+PiArICogQ1JEMVtiNV06IERQIE1DVSBGVyBpcyBleGVjdXRpbmcNCj4+DQo+ Pj4gKyAqIENSRENbYjBdOiBEUCBsaW5rIHN1Y2Nlc3MNCj4+DQo+Pj4gKyAqIENSREZbYjBdOiBE UCBIUEQNCj4+DQo+Pj4gKyAqIENSRTVbYjBdOiBIb3N0IHJlYWRpbmcgRURJRCBwcm9jZXNzIGlz IGRvbmXCoCAqLw0KPj4NCj4+PiArI2RlZmluZSBBU1REUF9NQ1VfRldfRVhFQ1VUSU5HwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCSVQoNSkNCj4+DQo+Pj4gKyNkZWZp bmUgQVNURFBfTElOS19TVUNDRVNTwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgQklUKDApDQo+Pg0KPj4+ICsjZGVmaW5lIEFTVERQX0hQRMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgQklUKDApDQo+Pg0KPj4+ICsjZGVmaW5lIEFTVERQX0hPU1RfRURJ RF9SRUFEX0RPTkXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQklUKDApDQo+Pg0KPj4+ ICsjZGVmaW5lIEFTVERQX0hPU1RfRURJRF9SRUFEX0RPTkVfTUFTS8KgwqDCoCBHRU5NQVNLKDAs IDApDQo+Pg0KPj4+ICsNCj4+DQo+Pj4gKy8qDQo+Pg0KPj4+ICsgKiBDUkI4W2IxXTogRW5hYmxl IFZTWU5DIG9mZg0KPj4NCj4+PiArICogQ1JCOFtiMF06IEVuYWJsZSBIU1lOQyBvZmYNCj4+DQo+ Pj4gKyAqLw0KPj4NCj4+PiArI2RlZmluZSBBU1RfRFBNU19WU1lOQ19PRkbCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQklUKDEpDQo+ Pg0KPj4+ICsjZGVmaW5lIEFTVF9EUE1TX0hTWU5DX09GRsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCSVQoMCkNCj4+DQo+Pj4gKw0K Pj4NCj4+PiArLyoNCj4+DQo+Pj4gKyAqIENSREZbYjRdOiBNaXJyb3Igb2YgQVNUX0RQX1ZJREVP X0VOQUJMRQ0KPj4NCj4+PiArICogUHJlY29uZGl0aW9uOsKgIEEuIH5BU1RfRFBfUEhZX1NMRUVQ wqAgJiYNCj4+DQo+Pj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBCLiBEUF9IUEQgJiYNCj4+DQo+Pj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBDLiBEUF9MSU5LX1NVQ0NFU1MNCj4+DQo+Pj4gKyAqLw0K Pj4NCj4+PiArI2RlZmluZSBBU1REUF9NSVJST1JfVklERU9fRU5BQkxFwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIEJJVCg0KQ0KPj4NCj4+PiArDQo+Pg0KPj4+ICsjZGVmaW5lIEFTVERQ X0VESURfUkVBRF9QT0lOVEVSX01BU0vCoCBHRU5NQVNLKDcsIDApDQo+Pg0KPj4+ICsjZGVmaW5l IEFTVERQX0VESURfVkFMSURfRkxBR19NQVNLwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IEdFTk1BU0soMCwgMCkNCj4+DQo+Pj4gKyNkZWZpbmUgQVNURFBfRURJRF9SRUFEX0RBVEFfTUFT S8KgwqDCoMKgwqDCoMKgIEdFTk1BU0soNywgMCkNCj4+DQo+Pj4gKw0KPj4NCj4+PiArLyoNCj4+ DQo+Pj4gKyAqIEFTVERQIHNldG1vZGUgcmVnaXN0ZXJzOg0KPj4NCj4+PiArICogQ1JFMFs3OjBd OiBNSVNDMCAoKDB4MDA6IDE4LWJwcCkgb3IgKDB4MjA6IDI0LWJwcCkNCj4+DQo+Pj4gKyAqIENS RTFbNzowXTogTUlTQzEgKGRlZmF1bHQ6IDB4MDApDQo+Pg0KPj4+ICsgKiBDUkUyWzc6MF06IHZp ZGVvIGZvcm1hdCBpbmRleCAoMHgwMCB+IDB4MjAgb3IgMHg0MCB+IDB4NTApwqAgKi8NCj4+DQo+ Pj4gKyNkZWZpbmUgQVNURFBfTUlTQzBfMjRicHDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgQklUKDUpDQo+Pg0KPj4+ICsjZGVmaW5lIEFTVERQX01JU0MxwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDANCj4+DQo+ Pj4gKyNkZWZpbmUgQVNURFBfQ0xFQVJfTUFTS8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBHRU5NQVNLKDcsIDApDQo+Pg0KPj4+ICsNCj4+DQo+Pj4gKy8qDQo+Pg0KPj4+ICsg KiBBU1REUCByZXNvdWx0aW9uIHRhYmxlOg0KPj4NCj4+PiArICogRVg6wqAgQVNURFBfQV9CX0M6 DQo+Pg0KPj4+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBBOiBSZXNvbHV0aW9u DQo+Pg0KPj4+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCOiBSZWZyZXNoIFJh dGUNCj4+DQo+Pj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEM6IE1pc2MgaW5m b3JtYXRpb24sIHN1Y2ggYXMgQ1ZULCBSZWR1Y2UgQmxhbmtlZA0KPj4NCj4+PiArICovDQo+Pg0K Pj4+ICsjZGVmaW5lIEFTVERQXzY0MHg0ODBfNjDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAw eDAwDQo+Pg0KPj4+ICsjZGVmaW5lIEFTVERQXzY0MHg0ODBfNzLCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAweDAxDQo+Pg0KPj4+ICsjZGVmaW5lIEFTVERQXzY0MHg0ODBfNzXCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAweDAyDQo+Pg0KPj4+ICsjZGVmaW5lIEFTVERQXzY0MHg0ODBfODXC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDAzDQo+Pg0KPj4+ICsjZGVmaW5lIEFTVERQXzgw MHg2MDBfNTbCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDA0DQo+Pg0KPj4+ICsjZGVmaW5l IEFTVERQXzgwMHg2MDBfNjDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDA1DQo+Pg0KPj4+ ICsjZGVmaW5lIEFTVERQXzgwMHg2MDBfNzLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDA2 DQo+Pg0KPj4+ICsjZGVmaW5lIEFTVERQXzgwMHg2MDBfNzXCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAweDA3DQo+Pg0KPj4+ICsjZGVmaW5lIEFTVERQXzgwMHg2MDBfODXCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAweDA4DQo+Pg0KPj4+ICsjZGVmaW5lIEFTVERQXzEwMjR4NzY4XzYwwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAweDA5DQo+Pg0KPj4+ICsjZGVmaW5lIEFTVERQXzEwMjR4NzY4 XzcwwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDBBDQo+Pg0KPj4+ICsjZGVmaW5lIEFTVERQXzEw MjR4NzY4Xzc1wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDBCDQo+Pg0KPj4+ICsjZGVmaW5lIEFT VERQXzEwMjR4NzY4Xzg1wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDBDDQo+Pg0KPj4+ICsjZGVm aW5lIEFTVERQXzEyODB4MTAyNF82MMKgwqDCoMKgwqDCoMKgwqDCoCAweDBEDQo+Pg0KPj4+ICsj ZGVmaW5lIEFTVERQXzEyODB4MTAyNF83NcKgwqDCoMKgwqDCoMKgwqDCoCAweDBFDQo+Pg0KPj4+ ICsjZGVmaW5lIEFTVERQXzEyODB4MTAyNF84NcKgwqDCoMKgwqDCoMKgwqDCoCAweDBGDQo+Pg0K Pj4+ICsjZGVmaW5lIEFTVERQXzE2MDB4MTIwMF82MMKgwqDCoMKgwqDCoMKgwqDCoCAweDEwDQo+ Pg0KPj4+ICsjZGVmaW5lIEFTVERQXzMyMHgyNDBfNjDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAweDExDQo+Pg0KPj4+ICsjZGVmaW5lIEFTVERQXzQwMHgzMDBfNjDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAweDEyDQo+Pg0KPj4+ICsjZGVmaW5lIEFTVERQXzUxMngzODRfNjDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAweDEzDQo+Pg0KPj4+ICsjZGVmaW5lIEFTVERQXzE5MjB4MTIw MF82MMKgwqDCoMKgwqDCoMKgwqDCoCAweDE0DQo+Pg0KPj4+ICsjZGVmaW5lIEFTVERQXzE5MjB4 MTA4MF82MMKgwqDCoMKgwqDCoMKgwqDCoCAweDE1DQo+Pg0KPj4+ICsjZGVmaW5lIEFTVERQXzEy ODB4ODAwXzYwwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDE2DQo+Pg0KPj4+ICsjZGVmaW5lIEFT VERQXzEyODB4ODAwXzYwX1JCwqDCoMKgwqAgMHgxNw0KPj4NCj4+PiArI2RlZmluZSBBU1REUF8x NDQweDkwMF82MMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHgxOA0KPj4NCj4+PiArI2RlZmluZSBB U1REUF8xNDQweDkwMF82MF9SQsKgwqDCoMKgIDB4MTkNCj4+DQo+Pj4gKyNkZWZpbmUgQVNURFBf MTY4MHgxMDUwXzYwwqDCoMKgwqDCoMKgwqDCoMKgIDB4MUENCj4+DQo+Pj4gKyNkZWZpbmUgQVNU RFBfMTY4MHgxMDUwXzYwX1JCwqDCoCAweDFCDQo+Pg0KPj4+ICsjZGVmaW5lIEFTVERQXzE2MDB4 OTAwXzYwwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDFDDQo+Pg0KPj4+ICsjZGVmaW5lIEFTVERQ XzE2MDB4OTAwXzYwX1JCwqDCoMKgwqAgMHgxRA0KPj4NCj4+PiArI2RlZmluZSBBU1REUF8xMzY2 eDc2OF82MMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHgxRQ0KPj4NCj4+PiArI2RlZmluZSBBU1RE UF8xMTUyeDg2NF83NcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHgxRg0KPj4NCj4+PiArDQo+Pg0K Pj4+ICDCoMKgIGludCBhc3RfbW1faW5pdChzdHJ1Y3QgYXN0X3ByaXZhdGUgKmFzdCk7DQo+Pg0K Pj4+DQo+Pg0KPj4+ICDCoMKgIC8qIGFzdCBwb3N0ICovDQo+Pg0KPj4+IEBAIC0zODEsNCArNDg5 LDExIEBAIHZvaWQgYXN0X2luaXRfM3JkdHgoc3RydWN0IGRybV9kZXZpY2UgKmRldik7DQo+Pg0K Pj4+ICDCoMKgIC8qIGFzdF9pMmMuYyAqLw0KPj4NCj4+PiAgwqDCoHN0cnVjdCBhc3RfaTJjX2No YW4gKmFzdF9pMmNfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOw0KPj4NCj4+Pg0KPj4N Cj4+PiArLyogYXNwZWVkIERQICovDQo+Pg0KPj4+ICtpbnQgYXN0X2FzdGRwX3JlYWRfZWRpZChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1OCAqZWRpZGRhdGEpOyB2b2lkDQo+Pg0KPj4+ICthc3Rf ZHBfbGF1bmNoKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHU4IGJQb3dlcik7IHZvaWQNCj4+DQo+ Pj4gK2FzdF9kcF9wb3dlcl9vbl9vZmYoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgYm9vbCBubyk7 IHZvaWQNCj4+DQo+Pj4gK2FzdF9kcF9zZXRfb25fb2ZmKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs IGJvb2wgbm8pOyB2b2lkDQo+Pg0KPj4+ICthc3RfZHBfc2V0X21vZGUoc3RydWN0IGRybV9jcnRj ICpjcnRjLCBzdHJ1Y3QgYXN0X3ZiaW9zX21vZGVfaW5mbw0KPj4NCj4+PiArKnZiaW9zX21vZGUp Ow0KPj4NCj4+PiArDQo+Pg0KPj4+ICDCoMKgICNlbmRpZg0KPj4NCj4+PiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2FzdC9hc3RfbWFpbi5jDQo+Pg0KPj4+IGIvZHJpdmVycy9ncHUvZHJt L2FzdC9hc3RfbWFpbi5jIGluZGV4IDIyZTllMmQzYy4uMTExM2VlMWNiIDEwMDY0NA0KPj4NCj4+ PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9tYWluLmMNCj4+DQo+Pj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2FzdC9hc3RfbWFpbi5jDQo+Pg0KPj4+IEBAIC0yMzIsNyArMjMyLDcgQEAg c3RhdGljIGludCBhc3RfZGV0ZWN0X2NoaXAoc3RydWN0IGRybV9kZXZpY2UgDQo+Pj4gKmRldiwg Ym9vbCAqbmVlZF9wb3N0KQ0KPj4NCj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgYXN0LT50eF9jaGlwX3R5cGUgPSBBU1RfVFhfU0lMMTY0Ow0K Pj4NCj4+PiAgwqDCoCDCoMKgwqDCoMKgwqDCoCB9DQo+Pg0KPj4+DQo+Pg0KPj4+IC3CoMKgwqAg aWYgKChhc3QtPmNoaXAgPT0gQVNUMjMwMCkgfHwgKGFzdC0+Y2hpcCA9PSBBU1QyNDAwKSkgew0K Pj4NCj4+PiArwqDCoCBpZiAoKGFzdC0+Y2hpcCA9PSBBU1QyMzAwKSB8fCAoYXN0LT5jaGlwID09 IEFTVDI0MDApIHx8IA0KPj4+ICsoYXN0LT5jaGlwDQo+Pg0KPj4+ICs9PSBBU1QyNTAwKSkgew0K Pj4NCj4+PiAgwqDCoCDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyoNCj4+DQo+Pj4g IMKgwqAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIMKgKiBPbiBBU1QyMzAwIGFuZCAy NDAwLCBsb29rIHRoZSBjb25maWd1cmF0aW9uIA0KPj4+IHNldCBieSB0aGUgU29DIGluDQo+Pg0K Pj4+ICDCoMKgIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCDCoCogdGhlIFNPQyBzY3Jh dGNoIHJlZ2lzdGVyICMxIGJpdHMgMTE6OCANCj4+PiAoaW50ZXJlc3RpbmdseSBtYXJrZWQgQEAN Cj4+DQo+Pj4gLTI1Niw3ICsyNTYsOCBAQCBzdGF0aWMgaW50IGFzdF9kZXRlY3RfY2hpcChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCANCj4+PiBib29sICpuZWVkX3Bvc3QpDQo+Pg0KPj4+ICDCoMKg IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjYXNlIDB4MGM6DQo+Pg0KPj4+ICDCoMKg IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXN0LT50eF9j aGlwX3R5cGUgPSBBU1RfVFhfRFA1MDE7DQo+Pg0KPj4+ICDCoMKgIMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB9DQo+Pg0KPj4+IC3CoMKgwqAgfQ0KPj4NCj4+PiArwqDCoCB9IGVsc2Ug aWYgKGFzdC0+Y2hpcCA9PSBBU1QyNjAwKQ0KPj4NCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAg YXN0X2RwX2xhdW5jaCgmYXN0LT5iYXNlLCAwKTsNCj4+DQo+Pj4NCj4+DQo+Pj4gIMKgwqAgwqDC oMKgwqDCoMKgwqAgLyogUHJpbnQgc3R1ZmYgZm9yIGRpYWdub3N0aWMgcHVycG9zZXMgKi8NCj4+ DQo+Pj4gIMKgwqAgwqDCoMKgwqDCoMKgwqAgc3dpdGNoKGFzdC0+dHhfY2hpcF90eXBlKSB7DQo+ Pg0KPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9tb2RlLmMNCj4+DQo+ Pj4gYi9kcml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9tb2RlLmMgaW5kZXggNDViNTZiMzlhLi40NzI4 ODI1YjcgMTAwNjQ0DQo+Pg0KPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hc3QvYXN0X21vZGUu Yw0KPj4NCj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9tb2RlLmMNCj4+DQo+Pj4g QEAgLTk4OCwyMSArOTg4LDQxIEBAIHN0YXRpYyBpbnQgYXN0X2N1cnNvcl9wbGFuZV9pbml0KHN0 cnVjdCANCj4+PiBhc3RfcHJpdmF0ZSAqYXN0KQ0KPj4NCj4+PiAgwqDCoCBzdGF0aWMgdm9pZCBh c3RfY3J0Y19kcG1zKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgaW50IG1vZGUpDQo+Pg0KPj4+ICDC oMKgIHsNCj4+DQo+Pj4gIMKgwqAgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGFzdF9wcml2YXRlICph c3QgPSB0b19hc3RfcHJpdmF0ZShjcnRjLT5kZXYpOw0KPj4NCj4+PiArwqDCoCB1OCBjaCA9IEFT VF9EUE1TX1ZTWU5DX09GRiB8IEFTVF9EUE1TX0hTWU5DX09GRjsNCj4+DQo+Pj4NCj4+DQo+Pj4g IMKgwqAgwqDCoMKgwqDCoMKgwqAgLyogVE9ETzogTWF5YmUgY29udHJvbCBkaXNwbGF5IHNpZ25h bCBnZW5lcmF0aW9uIHdpdGgNCj4+DQo+Pj4gIMKgwqAgwqDCoMKgwqDCoMKgwqAgwqAqwqDCoMKg wqDCoMKgIFN5bmMgRW5hYmxlIChiaXQgQ1IxNy43KS4NCj4+DQo+Pj4gIMKgwqAgwqDCoMKgwqDC oMKgwqAgwqAqLw0KPj4NCj4+PiAgwqDCoCDCoMKgwqDCoMKgwqDCoCBzd2l0Y2ggKG1vZGUpIHsN Cj4+DQo+Pj4gIMKgwqAgwqDCoMKgwqDCoMKgwqAgY2FzZSBEUk1fTU9ERV9EUE1TX09OOg0KPj4N Cj4+PiAtwqDCoMKgIGNhc2UgRFJNX01PREVfRFBNU19TVEFOREJZOg0KPj4NCj4+PiAtwqDCoMKg IGNhc2UgRFJNX01PREVfRFBNU19TVVNQRU5EOg0KPj4NCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqAgYXN0X3NldF9pbmRleF9yZWdfbWFzayhhc3QsIEFTVF9JT19TRVFfUE9SVCzCoCAweDAxLCAN Cj4+PiArMHhkZiwgMCk7DQo+Pg0KPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBhc3Rfc2V0X2lu ZGV4X3JlZ19tYXNrKGFzdCwgQVNUX0lPX0NSVENfUE9SVCwgMHhiNiwgDQo+Pj4gKzB4ZmMsIDAp Ow0KPj4NCj4+PiAgwqDCoCDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGFzdC0+ dHhfY2hpcF90eXBlID09IEFTVF9UWF9EUDUwMSkNCj4+DQo+Pj4gIMKgwqAgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhc3Rfc2V0X2RwNTAxX3ZpZGVvX291 dHB1dChjcnRjLT5kZXYsIA0KPj4+IDEpOw0KPj4NCj4+PiArDQo+Pg0KPj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoCBpZiAoYXN0LT50eF9jaGlwX3R5cGUgPT0gQVNUX1RYX0FTVERQKSB7DQo+Pg0K Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXN0X2RwX3Bvd2VyX29u X29mZihjcnRjLT5kZXYsIEFTVF9EUF9QT1dFUl9PTik7DQo+Pg0KPj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXN0X3dhaXRfZm9yX3ZyZXRyYWNlKGFzdCk7DQo+Pg0K Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXN0X2RwX3NldF9vbl9v ZmYoY3J0Yy0+ZGV2LCAxKTsNCj4+DQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIH0NCj4+DQo+ Pj4gKw0KPj4NCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXN0X2NydGNfbG9hZF9sdXQoYXN0 LCBjcnRjKTsNCj4+DQo+Pj4gIMKgwqAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJy ZWFrOw0KPj4NCj4+PiArwqDCoCBjYXNlIERSTV9NT0RFX0RQTVNfU1RBTkRCWToNCj4+DQo+Pj4g K8KgwqAgY2FzZSBEUk1fTU9ERV9EUE1TX1NVU1BFTkQ6DQo+Pg0KPj4+ICDCoMKgIMKgwqDCoMKg wqDCoMKgIGNhc2UgRFJNX01PREVfRFBNU19PRkY6DQo+Pg0KPj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoCBjaCA9IG1vZGU7DQo+Pg0KPj4+ICDCoMKgIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBpZiAoYXN0LT50eF9jaGlwX3R5cGUgPT0gQVNUX1RYX0RQNTAxKQ0KPj4NCj4+PiAgwqDC oCDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFzdF9zZXRf ZHA1MDFfdmlkZW9fb3V0cHV0KGNydGMtPmRldiwgDQo+Pj4gMCk7DQo+Pg0KPj4+ICDCoMKgIMKg wqDCoMKgwqDCoMKgIMKgwqDCoMKgwqDCoMKgIGJyZWFrOw0KPj4NCj4+PiArDQo+Pg0KPj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoYXN0LT50eF9jaGlwX3R5cGUgPT0gQVNUX1RYX0FTVERQ KSB7DQo+Pg0KPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXN0X2Rw X3NldF9vbl9vZmYoY3J0Yy0+ZGV2LCAwKTsNCj4+DQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBhc3RfZHBfcG93ZXJfb25fb2ZmKGNydGMtPmRldiwgDQo+Pj4gK0FT VF9EUF9QT1dFUl9PRkYpOw0KPj4NCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQ0KPj4NCj4+ PiArDQo+Pg0KPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBhc3Rfc2V0X2luZGV4X3JlZ19tYXNr KGFzdCwgQVNUX0lPX1NFUV9QT1JULMKgIDB4MDEsIA0KPj4+ICsweGRmLCAweDIwKTsNCj4+DQo+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGFzdF9zZXRfaW5kZXhfcmVnX21hc2soYXN0LCBBU1Rf SU9fQ1JUQ19QT1JULCAweGI2LCANCj4+PiArMHhmYywgY2gpOw0KPj4NCj4+PiAgwqDCoCDCoMKg wqDCoMKgwqDCoCB9DQo+Pg0KPj4+ICDCoMKgIH0NCj4+DQo+Pj4NCj4+DQo+Pj4gQEAgLTEwMjcs NyArMTA0Nyw3IEBAIGFzdF9jcnRjX2hlbHBlcl9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY3J0Yw0K Pj4NCj4+PiAqY3J0YywgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUNCj4+DQo+Pj4NCj4+ DQo+Pj4gIMKgwqAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICgoYXN0LT5jaGlw ID09IEFTVDIxMDApIHx8IChhc3QtPmNoaXAgPT0NCj4+PiBBU1QyMjAwKSB8fA0KPj4NCj4+PiAg wqDCoCDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgwqDCoMKgwqAoYXN0LT5jaGlwID09 IEFTVDIzMDApIHx8IChhc3QtPmNoaXAgPT0NCj4+PiBBU1QyNDAwKSB8fA0KPj4NCj4+PiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCDCoMKgwqAgKGFzdC0+Y2hpcCA9PSBBU1QyNTAwKSkgew0KPj4N Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgwqDCoMKgIChhc3QtPmNoaXAgPT0gQVNUMjUwMCkg fHwgKGFzdC0+Y2hpcCA9PSBBU1QyNjAwKSkgew0KPj4NCj4+PiAgwqDCoCDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICgobW9kZS0+aGRpc3BsYXkgPT0g MTkyMCkgJiYgDQo+Pj4gKG1vZGUtPnZkaXNwbGF5ID09IDEwODApKQ0KPj4NCj4+PiAgwqDCoCDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCByZXR1cm4gTU9ERV9PSzsNCj4+DQo+Pj4NCj4+DQo+Pj4gQEAgLTExMTAsNiArMTEzMCw3 IEBAIGFzdF9jcnRjX2hlbHBlcl9hdG9taWNfZmx1c2goc3RydWN0IGRybV9jcnRjIA0KPj4+ICpj cnRjLA0KPj4NCj4+PiAgwqDCoCDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgYXN0X3ByaXZhdGUgKmFz dCA9IHRvX2FzdF9wcml2YXRlKGNydGMtPmRldik7DQo+Pg0KPj4+ICDCoMKgIMKgwqDCoMKgwqDC oMKgIHN0cnVjdCBhc3RfY3J0Y19zdGF0ZSAqYXN0X2NydGNfc3RhdGUgPSANCj4+PiB0b19hc3Rf Y3J0Y19zdGF0ZShjcnRjX3N0YXRlKTsNCj4+DQo+Pj4gIMKgwqAgwqDCoMKgwqDCoMKgwqAgc3Ry dWN0IGFzdF9jcnRjX3N0YXRlICpvbGRfYXN0X2NydGNfc3RhdGUgPQ0KPj4NCj4+PiB0b19hc3Rf Y3J0Y19zdGF0ZShvbGRfY3J0Y19zdGF0ZSk7DQo+Pg0KPj4+ICvCoMKgIHN0cnVjdCBhc3RfdmJp b3NfbW9kZV9pbmZvICp2Ymlvc19tb2RlX2luZm8gPQ0KPj4NCj4+PiArJmFzdF9jcnRjX3N0YXRl LT52Ymlvc19tb2RlX2luZm87DQo+Pg0KPj4+DQo+Pg0KPj4+ICDCoMKgIMKgwqDCoMKgwqDCoMKg IC8qDQo+Pg0KPj4+ICDCoMKgIMKgwqDCoMKgwqDCoMKgIMKgKiBUaGUgZ2FtbWEgTFVUIGhhcyB0 byBiZSByZWxvYWRlZCBhZnRlciBjaGFuZ2luZyB0aGUgDQo+Pj4gcHJpbWFyeSBAQA0KPj4NCj4+ PiAtMTExNyw2ICsxMTM4LDEwIEBAIGFzdF9jcnRjX2hlbHBlcl9hdG9taWNfZmx1c2goc3RydWN0 IGRybV9jcnRjIA0KPj4+ICpjcnRjLA0KPj4NCj4+PiAgwqDCoCDCoMKgwqDCoMKgwqDCoCDCoCov DQo+Pg0KPj4+ICDCoMKgIMKgwqDCoMKgwqDCoMKgIGlmIChvbGRfYXN0X2NydGNfc3RhdGUtPmZv cm1hdCAhPSANCj4+PiBhc3RfY3J0Y19zdGF0ZS0+Zm9ybWF0KQ0KPj4NCj4+PiAgwqDCoCDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXN0X2NydGNfbG9hZF9sdXQoYXN0LCBjcnRjKTsN Cj4+DQo+Pj4gKw0KPj4NCj4+PiArwqDCoCAvL1NldCBBc3BlZWQgRGlzcGxheS1Qb3J0DQo+Pg0K Pj4+ICvCoMKgIGlmIChhc3QtPnR4X2NoaXBfdHlwZSA9PSBBU1RfVFhfQVNURFApDQo+Pg0KPj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBhc3RfZHBfc2V0X21vZGUoY3J0YywgdmJpb3NfbW9kZV9p bmZvKTsNCj4+DQo+Pj4gIMKgwqAgfQ0KPj4NCj4+Pg0KPj4NCj4+PiAgwqDCoCBzdGF0aWMgdm9p ZA0KPj4NCj4+PiBAQCAtMTUyNyw2ICsxNTUyLDkzIEBAIHN0YXRpYyBpbnQgYXN0X2RwNTAxX291 dHB1dF9pbml0KHN0cnVjdCANCj4+PiBhc3RfcHJpdmF0ZSAqYXN0KQ0KPj4NCj4+PiAgwqDCoCDC oMKgwqDCoMKgwqDCoCByZXR1cm4gMDsNCj4+DQo+Pj4gIMKgwqAgfQ0KPj4NCj4+Pg0KPj4NCj4+ PiArLyoNCj4+DQo+Pj4gKyAqIEFTUEVFRCBEaXNwbGF5LVBvcnQgQ29ubmVjdG9yDQo+Pg0KPj4+ ICsgKi8NCj4+DQo+Pj4gKw0KPj4NCj4+PiArc3RhdGljIGludCBhc3RfYXN0ZHBfY29ubmVjdG9y X2hlbHBlcl9nZXRfbW9kZXMoc3RydWN0IA0KPj4+ICtkcm1fY29ubmVjdG9yDQo+Pg0KPj4+ICsq Y29ubmVjdG9yKSB7DQo+Pg0KPj4+ICvCoMKgIHZvaWQgKmVkaWQ7DQo+Pg0KPj4+ICsNCj4+DQo+ Pj4gK8KgwqAgaW50IHN1Y2M7DQo+Pg0KPj4+ICvCoMKgIGludCBjb3VudDsNCj4+DQo+Pj4gKw0K Pj4NCj4+PiArwqDCoCBlZGlkID0ga21hbGxvYyhFRElEX0xFTkdUSCwgR0ZQX0tFUk5FTCk7DQo+ Pg0KPj4+ICvCoMKgIGlmICghZWRpZCkNCj4+DQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGdv dG8gZXJyX2RybV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHk7DQo+Pg0KPj4+ICsNCj4+ DQo+Pj4gK8KgwqAgc3VjYyA9IGFzdF9hc3RkcF9yZWFkX2VkaWQoY29ubmVjdG9yLT5kZXYsIGVk aWQpOw0KPj4NCj4+PiArwqDCoCBpZiAoc3VjYyA8IDApDQo+Pg0KPj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoCBnb3RvIGVycl9rZnJlZTsNCj4+DQo+Pj4gKw0KPj4NCj4+PiArwqDCoCBkcm1fY29u bmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3RvciwgZWRpZCk7DQo+Pg0KPj4+ICvC oMKgIGNvdW50ID0gZHJtX2FkZF9lZGlkX21vZGVzKGNvbm5lY3RvciwgZWRpZCk7DQo+Pg0KPj4+ ICvCoMKgIGtmcmVlKGVkaWQpOw0KPj4NCj4+PiArDQo+Pg0KPj4+ICvCoMKgIHJldHVybiBjb3Vu dDsNCj4+DQo+Pj4gKw0KPj4NCj4+PiArZXJyX2tmcmVlOg0KPj4NCj4+PiArwqDCoCBrZnJlZShl ZGlkKTsNCj4+DQo+Pj4gK2Vycl9kcm1fY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5Og0K Pj4NCj4+PiArwqDCoCBkcm1fY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3Rv ciwgTlVMTCk7DQo+Pg0KPj4+ICvCoMKgIHJldHVybiAwOw0KPj4NCj4+PiArfQ0KPj4NCj4+PiAr DQo+Pg0KPj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNz IA0KPj4+ICthc3RfYXN0ZHBfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsNCj4+DQo+Pj4gK8Kg wqAgLmdldF9tb2RlcyA9IGFzdF9hc3RkcF9jb25uZWN0b3JfaGVscGVyX2dldF9tb2RlcywNCj4+ DQo+Pj4gK307DQo+Pg0KPj4+ICsNCj4+DQo+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nv bm5lY3Rvcl9mdW5jcyBhc3RfYXN0ZHBfY29ubmVjdG9yX2Z1bmNzID0gDQo+Pj4gK3sNCj4+DQo+ Pj4gK8KgwqAgLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0LA0KPj4N Cj4+PiArwqDCoCAuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rv cl9tb2RlcywNCj4+DQo+Pj4gK8KgwqAgLmRlc3Ryb3kgPSBkcm1fY29ubmVjdG9yX2NsZWFudXAs DQo+Pg0KPj4+ICvCoMKgIC5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0NCj4+PiArZHJtX2F0b21p Y19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwNCj4+DQo+Pj4gK8KgwqAgLmF0b21p Y19kZXN0cm95X3N0YXRlID0NCj4+PiArZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ry b3lfc3RhdGUsDQo+Pg0KPj4+ICt9Ow0KPj4NCj4+PiArDQo+Pg0KPj4+ICtzdGF0aWMgaW50IGFz dF9hc3RkcF9jb25uZWN0b3JfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QNCj4+ DQo+Pj4gK2RybV9jb25uZWN0b3IgKmNvbm5lY3Rvcikgew0KPj4NCj4+PiArwqDCoCBpbnQgcmV0 Ow0KPj4NCj4+PiArDQo+Pg0KPj4+ICvCoMKgIHJldCA9IGRybV9jb25uZWN0b3JfaW5pdChkZXYs IGNvbm5lY3RvciwgDQo+Pj4gKyZhc3RfYXN0ZHBfY29ubmVjdG9yX2Z1bmNzLA0KPj4NCj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBEUk1f TU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQpOw0KPj4NCj4+PiArwqDCoCBpZiAocmV0KQ0KPj4N Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsNCj4+DQo+Pj4gKw0KPj4NCj4+ PiArwqDCoCBkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoY29ubmVjdG9yLA0KPj4NCj4+PiArJmFz dF9hc3RkcF9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsNCj4+DQo+Pj4gKw0KPj4NCj4+PiArwqDC oCBjb25uZWN0b3ItPmludGVybGFjZV9hbGxvd2VkID0gMDsNCj4+DQo+Pj4gK8KgwqAgY29ubmVj dG9yLT5kb3VibGVzY2FuX2FsbG93ZWQgPSAwOw0KPj4NCj4+PiArDQo+Pg0KPj4+ICvCoMKgIGNv bm5lY3Rvci0+cG9sbGVkID0gRFJNX0NPTk5FQ1RPUl9QT0xMX0NPTk5FQ1Q7DQo+Pg0KPj4+ICsN Cj4+DQo+Pj4gK8KgwqAgcmV0dXJuIDA7DQo+Pg0KPj4+ICt9DQo+Pg0KPj4+ICsNCj4+DQo+Pj4g K3N0YXRpYyBpbnQgYXN0X2FzdGRwX291dHB1dF9pbml0KHN0cnVjdCBhc3RfcHJpdmF0ZSAqYXN0 KSB7DQo+Pg0KPj4+ICvCoMKgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAmYXN0LT5iYXNlOw0K Pj4NCj4+PiArwqDCoCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSAmYXN0LT5jcnRjOw0KPj4NCj4+ PiArwqDCoCBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSAmYXN0LT5vdXRwdXQuYXN0ZHAu ZW5jb2RlcjsNCj4+DQo+Pj4gK8KgwqAgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9 ICZhc3QtPm91dHB1dC5hc3RkcC5jb25uZWN0b3I7DQo+Pg0KPj4+ICvCoMKgIGludCByZXQ7DQo+ Pg0KPj4+ICsNCj4+DQo+Pj4gK8KgwqAgcmV0ID0gZHJtX3NpbXBsZV9lbmNvZGVyX2luaXQoZGV2 LCBlbmNvZGVyLCANCj4+PiArRFJNX01PREVfRU5DT0RFUl9UTURTKTsNCj4+DQo+Pj4gK8KgwqAg aWYgKHJldCkNCj4+DQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7DQo+Pg0K Pj4+ICvCoMKgIGVuY29kZXItPnBvc3NpYmxlX2NydGNzID0gZHJtX2NydGNfbWFzayhjcnRjKTsN Cj4+DQo+Pj4gKw0KPj4NCj4+PiArwqDCoCByZXQgPSBhc3RfYXN0ZHBfY29ubmVjdG9yX2luaXQo ZGV2LCBjb25uZWN0b3IpOw0KPj4NCj4+PiArwqDCoCBpZiAocmV0KQ0KPj4NCj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsNCj4+DQo+Pj4gKw0KPj4NCj4+PiArwqDCoCByZXQg PSBkcm1fY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKGNvbm5lY3RvciwgZW5jb2Rlcik7DQo+Pg0K Pj4+ICvCoMKgIGlmIChyZXQpDQo+Pg0KPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4g cmV0Ow0KPj4NCj4+PiArDQo+Pg0KPj4+ICvCoMKgIHJldHVybiAwOw0KPj4NCj4+PiArfQ0KPj4N Cj4+PiArDQo+Pg0KPj4+ICDCoMKgIC8qDQo+Pg0KPj4+ICDCoMKgwqAgKiBNb2RlIGNvbmZpZw0K Pj4NCj4+PiAgwqDCoMKgICovDQo+Pg0KPj4+IEBAIC0xNTYzLDcgKzE2NzUsOCBAQCBpbnQgYXN0 X21vZGVfY29uZmlnX2luaXQoc3RydWN0IGFzdF9wcml2YXRlDQo+Pj4gKmFzdCkNCj4+DQo+Pj4g IMKgwqAgwqDCoMKgwqDCoMKgwqAgwqDCoMKgwqBhc3QtPmNoaXAgPT0gQVNUMjIwMCB8fA0KPj4N Cj4+PiAgwqDCoCDCoMKgwqDCoMKgwqDCoCDCoMKgwqDCoGFzdC0+Y2hpcCA9PSBBU1QyMzAwIHx8 DQo+Pg0KPj4+ICDCoMKgIMKgwqDCoMKgwqDCoMKgIMKgwqDCoMKgYXN0LT5jaGlwID09IEFTVDI0 MDAgfHwNCj4+DQo+Pj4gLcKgwqDCoCDCoMKgwqAgYXN0LT5jaGlwID09IEFTVDI1MDApIHsNCj4+ DQo+Pj4gK8KgwqAgwqDCoMKgIGFzdC0+Y2hpcCA9PSBBU1QyNTAwIHx8DQo+Pg0KPj4+ICvCoMKg IMKgwqDCoCBhc3QtPmNoaXAgPT0gQVNUMjYwMCkgew0KPj4NCj4+PiAgwqDCoCDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2LT5tb2RlX2NvbmZpZy5tYXhfd2lkdGggPSAxOTIwOw0K Pj4NCj4+PiAgwqDCoCDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2LT5tb2RlX2Nv bmZpZy5tYXhfaGVpZ2h0ID0gMjA0ODsNCj4+DQo+Pj4gIMKgwqAgwqDCoMKgwqDCoMKgwqAgfSBl bHNlIHsNCj4+DQo+Pj4gQEAgLTE1OTQsNiArMTcwNyw5IEBAIGludCBhc3RfbW9kZV9jb25maWdf aW5pdChzdHJ1Y3QgYXN0X3ByaXZhdGUNCj4+PiAqYXN0KQ0KPj4NCj4+PiAgwqDCoCDCoMKgwqDC oMKgwqDCoCBjYXNlIEFTVF9UWF9EUDUwMToNCj4+DQo+Pj4gIMKgwqAgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHJldCA9IGFzdF9kcDUwMV9vdXRwdXRfaW5pdChhc3QpOw0KPj4NCj4+ PiAgwqDCoCDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7DQo+Pg0KPj4+ICvC oMKgIGNhc2UgQVNUX1RYX0FTVERQOg0KPj4NCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0 ID0gYXN0X2FzdGRwX291dHB1dF9pbml0KGFzdCk7DQo+Pg0KPj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoCBicmVhazsNCj4+DQo+Pj4gIMKgwqAgwqDCoMKgwqDCoMKgwqAgfQ0KPj4NCj4+PiAgwqDC oCDCoMKgwqDCoMKgwqDCoCBpZiAocmV0KQ0KPj4NCj4+PiAgwqDCoCDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsNCj4+DQo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9hc3QvYXN0X3Bvc3QuYw0KPj4NCj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9hc3QvYXN0 X3Bvc3QuYyBpbmRleCBiNWQ5MmY2NTIuLjBhYTljZjBmYiAxMDA2NDQNCj4+DQo+Pj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2FzdC9hc3RfcG9zdC5jDQo+Pg0KPj4+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9hc3QvYXN0X3Bvc3QuYw0KPj4NCj4+PiBAQCAtMzc5LDcgKzM3OSw5IEBAIHZvaWQgYXN0 X3Bvc3RfZ3B1KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpDQo+Pg0KPj4+ICDCoMKgIMKgwqDCoMKg wqDCoMKgIGFzdF9lbmFibGVfbW1pbyhkZXYpOw0KPj4NCj4+PiAgwqDCoCDCoMKgwqDCoMKgwqDC oCBhc3Rfc2V0X2RlZl9leHRfcmVnKGRldik7DQo+Pg0KPj4+DQo+Pg0KPj4+IC3CoMKgwqAgaWYg KGFzdC0+Y29uZmlnX21vZGUgPT0gYXN0X3VzZV9wMmEpIHsNCj4+DQo+Pj4gK8KgwqAgaWYgKGFz dC0+Y2hpcCA9PSBBU1QyNjAwKSB7DQo+Pg0KPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBhc3Rf ZHBfbGF1bmNoKGRldiwgMSk7DQo+Pg0KPj4+ICvCoMKgIH0gZWxzZSBpZiAoYXN0LT5jb25maWdf bW9kZSA9PSBhc3RfdXNlX3AyYSkgew0KPj4NCj4+PiAgwqDCoCDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgaWYgKGFzdC0+Y2hpcCA9PSBBU1QyNTAwKQ0KPj4NCj4+PiAgwqDCoCDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFzdF9wb3N0X2NoaXBf MjUwMChkZXYpOw0KPj4NCj4+PiAgwqDCoCDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg ZWxzZSBpZiAoYXN0LT5jaGlwID09IEFTVDIzMDAgfHwgYXN0LT5jaGlwID09DQo+Pj4gQVNUMjQw MCkNCj4+DQo+Pj4NCj4+DQo+Pj4gYmFzZS1jb21taXQ6IGM1NGIzOWE1NjUyMjc1MzhjNTJlYWQy MzQ5ZWIxN2Q1NGFhZGQ2ZjcNCj4+DQo+Pj4gLS0NCj4+DQo+Pj4gMi4yNy4wDQo+Pg0KPj4+DQo+ Pg0KPj4gLS0NCj4+DQo+PiBUaG9tYXMgWmltbWVybWFubg0KPj4NCj4+IEdyYXBoaWNzIERyaXZl ciBEZXZlbG9wZXINCj4+DQo+PiBTVVNFIFNvZnR3YXJlIFNvbHV0aW9ucyBHZXJtYW55IEdtYkgN Cj4+DQo+PiBNYXhmZWxkc3RyLiA1LCA5MDQwOSBOw7xybmJlcmcsIEdlcm1hbnkNCj4+DQo+PiAo SFJCIDM2ODA5LCBBRyBOw7xybmJlcmcpDQo+Pg0KPj4gR2VzY2jDpGZ0c2bDvGhyZXI6IEl2byBU b3Rldg0KPj4NCj4gDQo+IC0tDQo+IFRob21hcyBaaW1tZXJtYW5uDQo+IEdyYXBoaWNzIERyaXZl ciBEZXZlbG9wZXINCj4gU1VTRSBTb2Z0d2FyZSBTb2x1dGlvbnMgR2VybWFueSBHbWJIDQo+IE1h eGZlbGRzdHIuIDUsIDkwNDA5IE7DvHJuYmVyZywgR2VybWFueSAoSFJCIDM2ODA5LCBBRyBOw7xy bmJlcmcpDQo+IEdlc2Now6RmdHNmw7xocmVyOiBJdm8gVG90ZXYNCg0KLS0NClRob21hcyBaaW1t ZXJtYW5uDQpHcmFwaGljcyBEcml2ZXIgRGV2ZWxvcGVyDQpTVVNFIFNvZnR3YXJlIFNvbHV0aW9u cyBHZXJtYW55IEdtYkgNCk1heGZlbGRzdHIuIDUsIDkwNDA5IE7DvHJuYmVyZywgR2VybWFueQ0K KEhSQiAzNjgwOSwgQUcgTsO8cm5iZXJnKQ0KR2VzY2jDpGZ0c2bDvGhyZXI6IEl2byBUb3Rldg0K