From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.1 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 993B9C433ED for ; Mon, 12 Apr 2021 14:44:10 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 4FFFD61287 for ; Mon, 12 Apr 2021 14:44:10 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4FFFD61287 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id AF2926E5CE; Mon, 12 Apr 2021 14:44:09 +0000 (UTC) Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2041.outbound.protection.outlook.com [40.107.236.41]) by gabe.freedesktop.org (Postfix) with ESMTPS id 42D746E5CE for ; Mon, 12 Apr 2021 14:44:08 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TK0nZggMJ0SQZ+3u63uwz8diFuFEqtN11N64vPHSUFeQybAAUIgjH3WVQvSF438I5cz/XBRbbqXlkZRfgpH4/JXZVJIpxoWmsqOexA6H/HS37HlDDC4RNzA7QZbBtfUXXJ0e6daCIOao/Kl23ToVcASCFDdaQcWcQMYbK3iBTMWhXOqvAXUG4LdWqlkHn8IOq4Lrn+tZR8s7YwAu3LmY1RkUrphQIL43D/VBOYYVXRjRZjWelwOsteSwEJnEhKNrVG2QX/scwZ3B7aIBBv2GaHEyUg56U0zkAGOSgFgYhVd+CAn/qxyFVjYRvBdN7lRSjbpYMZONo6/gI2zTNjSuVQ== 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=SIvn1z1xF4lmBvXJ3qnQE/ZuCsvGIN/bqjFyq6DoVYI=; b=aS/19gfoOk1Aus+N8AXCKgLn1LXWXIPlXt8rbGnNZpv4ZOLyK/6DsIJH26niByTiEnDXF02KFwNrVhwCoNZSR8XQdhkv2NFu184a7bi07oCys/Rb/ibm+fz2FInoR921myzJG1Un6Y1a5qoVaYLUGpnsFdzd8Vnnhh3Is3fol5DsM2HYE1FvZk4NVj633P3vZArXTcq1X+t5vgEdFR5zr0DM9aPlWir91KojdVdzBcYqityJSreBYtlw9E3C8wDgUwbLSMi6dR888FYUV7xJif65naAnc7eNyCX+S32s1GlvOtZbN3vbXARE64vQCQyfyXp6Z5OYW2AXacBF4KPjkw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=SIvn1z1xF4lmBvXJ3qnQE/ZuCsvGIN/bqjFyq6DoVYI=; b=rMlKBgA+OExmoT+Xjek5t4peyyj4P8D0F1JZrfMhBwEN6tsRz87/gjLFAb4V8ZvwmzBBBpxWS9tCML1jlxy7LpBwBe4X6MNQCADDP0pzy8IZcBdfVuQ4t1DXDrqH663HWlvotb0IENpvFIn3SsVgKobLBHWKGO9DaR+nG1S3X/o= Authentication-Results: ffwll.ch; dkim=none (message not signed) header.d=none;ffwll.ch; dmarc=none action=none header.from=amd.com; Received: from MN2PR12MB3775.namprd12.prod.outlook.com (2603:10b6:208:159::19) by BL0PR12MB4932.namprd12.prod.outlook.com (2603:10b6:208:1c2::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4020.18; Mon, 12 Apr 2021 14:44:06 +0000 Received: from MN2PR12MB3775.namprd12.prod.outlook.com ([fe80::6d4d:4674:1cf6:8d34]) by MN2PR12MB3775.namprd12.prod.outlook.com ([fe80::6d4d:4674:1cf6:8d34%6]) with mapi id 15.20.4020.022; Mon, 12 Apr 2021 14:44:06 +0000 Subject: Re: [RFC PATCH] drm/ttm: Simplify the delayed destroy locking To: =?UTF-8?Q?Thomas_Hellstr=c3=b6m?= , dri-devel@lists.freedesktop.org References: <20210412131740.10257-1-thomas.hellstrom@linux.intel.com> <715d7cbd-264c-9422-e173-c57266800c5f@linux.intel.com> <4d8d0ccb-c635-acd7-c6e9-6c11a9b9409f@amd.com> From: =?UTF-8?Q?Christian_K=c3=b6nig?= Message-ID: <833d6aec-3eb2-e0cc-c51e-e3c12f62c767@amd.com> Date: Mon, 12 Apr 2021 16:44:01 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.7.1 In-Reply-To: Content-Language: en-US X-Originating-IP: [2a02:908:1252:fb60:4f4:3b4b:a0ea:d512] X-ClientProxiedBy: PR0P264CA0144.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1a::36) To MN2PR12MB3775.namprd12.prod.outlook.com (2603:10b6:208:159::19) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from [IPv6:2a02:908:1252:fb60:4f4:3b4b:a0ea:d512] (2a02:908:1252:fb60:4f4:3b4b:a0ea:d512) by PR0P264CA0144.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1a::36) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4020.18 via Frontend Transport; Mon, 12 Apr 2021 14:44:05 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ecb7ef25-1f8b-4d6b-fa63-08d8fdc16c2a X-MS-TrafficTypeDiagnostic: BL0PR12MB4932: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:10000; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: LtYQDtXCgHukHANn/6sTShOA/89e0VnL+9v9Uq3dNN3U7hzfVrVvFVFz04wtrnqWbUQLsYWl+LwpKrpPCNPJdYtGEfUglJBoZrgKIpeIZmZhRKoCD75jEodxAsXAo1Qa0O+eW3wNxIiwo5gAsHk9MiA/s+lHpDG+xuOnUbBcxy924qumgLo3YEpa7npYTn93YdzGCpvLhXPbTVk52Vfxnlu4QKVc4ZvXLMUron3qGufaFFpi2WBxrqTv5JUTE6mBCdlAy7HJNso4exSx6zntpGgh/LH1l5ixZUfa16QEAOnHQrRZ0vikdN0j/uPHrCxlZFHM1Yjo+PEMtAulUjMij9VME1Y7ljxuQfusPYBH9lt6H3Sne/9BvynuelC1iwaNXJ+aARrdrI3Q/TUGWdFfxrMT1Xa+cA4de3GyV2Vq0Ely+4UrORhIW6ZLDcpQNllwI/cH3ln7RBIMmUvzoMp8+amj6B+afWga+DNZGC6r2fcnKHXMLIwGOMl3vIuWxEyB07OCeyb3GyD7FHVtORnGSU4bOo5SmnamVeG8Q8d7C+LyJrK4E0cEcEK99WIkAoCEqA0w1L+DVBMlA5F7myu10HHzPVq6pRH3QXn4ejXNeRJm7wCB489Onbnkp814Ji3NBctlE2aVLR/o6iXNehdvZXyu6NTN09o8K8DTjRY+iiIGW6DWJPEfWDRuIrbGkQju X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MN2PR12MB3775.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(346002)(136003)(39860400002)(376002)(366004)(396003)(6666004)(478600001)(66476007)(86362001)(66556008)(83380400001)(52116002)(66946007)(186003)(16526019)(31686004)(8936002)(53546011)(8676002)(31696002)(316002)(6486002)(4326008)(2616005)(2906002)(38100700002)(66574015)(5660300002)(30864003)(36756003)(43740500002)(45980500001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?bWtnZkpJMm5UN3NOcFB0MzVTeVJ0dWt5VG12NDY5RTl2YjViN3JwSjFqaWQ3?= =?utf-8?B?WDF3M2VPTG9QUXBqN28rZGtNZFBCM0FPdlZIN0NHZHdkcTZxa1g0ck0zQ0dw?= =?utf-8?B?UW9Ca2hndWZCTlN0TG9HN0tGaG1RSmtleER6MTMvaVAyZmFUeWo4UTRZWkRI?= =?utf-8?B?dlVrQVZ1WGNqODlSOTdCaVowUWRkOTZTVXpPM1locForK21Dd2VtdkRzcU1l?= =?utf-8?B?bFRXVXJueDBlWk1yR2JXdCt4b2d5V1laR21UOTdDZlZ5c09yM2QwU3pnQzgw?= =?utf-8?B?UlIrT294bTg0VHlGOTI1dkUreVNRbStXYWpURXREbENrQkhTZzVSSklMRVZ4?= =?utf-8?B?RVNZNGVWT0tOWHdSUXBHZm1tdWJrdi90SHFXczZLcTNNWmxIQllVSG5iTGQr?= =?utf-8?B?d0V5bEVBUFIvT3pEdU9mVzVNSkcxU21vSjNMbWdUZjYrakNGdjFvR3RLb3Vw?= =?utf-8?B?eVdrZnJFOFVBNUR6TkhWWmNQOENLaVp2QUJFTjZyaEprS08wazRTRi9ERklL?= =?utf-8?B?NWM5aERpNFhJbDJSMXJyV2lTaUZPbkVuQUZMYm9zemxKU1RFTHNJWGtmMGhS?= =?utf-8?B?OWJwOHlRdGZSaUQwcllqY1kzRHQrY3VwWHVEUGQvMHBqTmxZU3V1UGFzVDRj?= =?utf-8?B?Y2FOSGlEZldIUzdleFNKWHZsa0tXbk5qT0RTWnRTUk50Q0NHdHp0VFBmbStI?= =?utf-8?B?a2lhekE1MlVkbi9vbUN4TG5aK3liME8yT3BqNkltMTFoZzF6Zy9kR0xpeEFr?= =?utf-8?B?Q1Y0cUY5VHdacVAzQ2QyKzg2NiswZHJUQkJMZDQrcmFIWklVUUo3NXhHM05h?= =?utf-8?B?anFCc1VpOTVNQ0hWYTJoYStmMmh1UnYyUDN5Yktld0ppdjBOVFRlYnpIb1Az?= =?utf-8?B?azducWlUV1ZMZVk3bmRXZEZjdUZVUUxSbWpxSkFkMmJTUS8xYyt5RVdJTEdz?= =?utf-8?B?dDh5OTBHN1c0eXVsM0tYSmRJN0J3bkZWWjZZSTFVTml2REhyZ293Z2I3UmhR?= =?utf-8?B?ZEp6a3ZLd1g0Ky9xSFdEKzZDbzFmYzEzYnhQd3ZnaGNJTFViNERzbEtaT3VY?= =?utf-8?B?YVQ2b21uckRCV0IvK3NJcXlZMVNhM2lYNnBWWlFybEhMNnRPbmJqSzFnUXhq?= =?utf-8?B?YXZ4a0tGUEpHRXV6U1gxWk1ZdFpJWVJOMW5nYWVCcDhzZHBQRkpwVG9DR2hZ?= =?utf-8?B?cHJaYXBxQkpKRENTenJHNG14SnRHVmpDMnlMZFVHemt2R3NLRUdqMVZTNm9n?= =?utf-8?B?N1lGUGo1bGJmY1pUM3hBSWk2MVFXeDRpSnZQaHdFUkhhNnBaTlhkS0pUaVdm?= =?utf-8?B?bk9DcFJsRGZzeFNrQlJTTVNSK2VsSU1zTHhxZ2xyZUtWMXI3Rm1HZDU3di80?= =?utf-8?B?Z3BOVGJkdW9Obkc1czdIK3ZxcExrMDU0Nm5sZ1FSdUNrT1pwSVA1Y2N4Q2Vm?= =?utf-8?B?azlRWCtudWR2ZlJkN0FwcHRoZkVReXJ4QjFtZzk0aWYzYmk2ZlZoT21yeGZy?= =?utf-8?B?bGpFNUtBM1ZHNjVwTnBBVk5wT2VxRE1NeGwwcWlGM3pCRU5QZFJzN0NBV2Ri?= =?utf-8?B?RFA3bS9NWmEwZWdYY2hPanpBSEhIUXZIamdScTdqUVZjSklFZXdIa1JrT0ly?= =?utf-8?B?NStTZzhJYnMzZ3pDNDhOaGtjajQ2SkNmMWtNalpxN1VIL2VzMFpSdXZ5MTFx?= =?utf-8?B?cDVKdWJjWStoVkhCYW5NTFlHa3RNMEt0cXBiL1RpK0tBY2VSVGo2N3l1S1pG?= =?utf-8?B?NG80eVFkZFpEOExEazlWWkxYUVlNYTlJUlRFSjZqcCtqRXV3UXQ0U1RaYi9I?= =?utf-8?B?TmNIelNSYnllSVBnM0xEVSsrOERrS093SnN5SU5nbHlEZ0pOMEU5OEJlRHVI?= =?utf-8?Q?xqOeMS+2Brc3a?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: ecb7ef25-1f8b-4d6b-fa63-08d8fdc16c2a X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB3775.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Apr 2021 14:44:06.1214 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: D05ZSNRDCv7awmy+EzU/HKUruHU3A3cLZvS4ZgOchUjHIw8g087OeWWUpxy7yaJi X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL0PR12MB4932 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" QW0gMTIuMDQuMjEgdW0gMTY6NDAgc2NocmllYiBUaG9tYXMgSGVsbHN0csO2bToKPgo+IE9uIDQv MTIvMjEgNDoyMSBQTSwgQ2hyaXN0aWFuIEvDtm5pZyB3cm90ZToKPj4KPj4KPj4gQW0gMTIuMDQu MjEgdW0gMTY6MTYgc2NocmllYiBUaG9tYXMgSGVsbHN0csO2bToKPj4+IEhpLCBDaHJpc3RpYW4s Cj4+Pgo+Pj4gT24gNC8xMi8yMSA0OjAxIFBNLCBDaHJpc3RpYW4gS8O2bmlnIHdyb3RlOgo+Pj4+ IEhpIFRob21hcywKPj4+Pgo+Pj4+IHdlbGwgaW4gZ2VuZXJhbCBhIGdvb2QgaWRlYSwgYnV0IEkn bSB3b3JraW5nIG9uIGEgZGlmZmVyZW50IHBsYW4gCj4+Pj4gZm9yIGEgd2hpbGUgbm93Lgo+Pj4+ Cj4+Pj4gTXkgaWRlYSBoZXJlIGlzIHRoYXQgaW5zdGVhZCBvZiB0aGUgQk8gdGhlIHJlc291cmNl IG9iamVjdCBpcyBrZXB0IAo+Pj4+IG9uIGEgZG91YmxlIGxpbmtlZCBscnUgbGlzdC4KPj4+Pgo+ Pj4+IFRoZSByZXNvdXJjZSBvYmplY3RzIHRoZW4gaGF2ZSBhIHBvaW50ZXIgdG8gZWl0aGVyIHRo ZSBCTyBvciBhIAo+Pj4+IGZlbmNlIG9iamVjdC4KPj4+Pgo+Pj4+IFdoZW4gaXQgaXMgYSBmZW5j ZSBvYmplY3Qgd2UgY2FuIGp1c3QgZ3JhYiBhIHJlZmVyZW5jZSB0byBpdCBhbmQgCj4+Pj4gd2Fp dCBmb3IgaXQgdG8gY29tcGxldGUuCj4+Pj4KPj4+PiBJZiBpdCBpcyBhIEJPIHdlIGV2aWN0IGl0 IHRoZSBzYW1lIHdheSB3ZSBjdXJyZW50bHkgZG8uCj4+Pj4KPj4+PiBUaGlzIGFsbG93cyB0byBy ZW1vdmUgYm90aCB0aGUgZGVsYXllZCBkZWxldGUsIGluZGl2aWR1YWxpemF0aW9uIG9mIAo+Pj4+ IEJPcywgZ2hvc3Qgb2JqZWN0cyBldGMuLi4KPj4+Cj4+PiBIbW0sIG9rLiBTbyBpbiB0aGF0IGNh c2UsIHdoYXQgd291bGQgdHJpZ2dlciB0aGUgZmluYWwgcmVsZWFzZSBvZiAKPj4+IHRoZSBidWZm ZXIgb2JqZWN0IGluIHRoZSBhYnNlbmNlIG9mIGEgZGVsYXllZCBkZWxldGUgbGlzdD8gV291bGQg d2UgCj4+PiB1c2UgYSBmZW5jZSBjYWxsYmFjayBmb3IgdGhhdD8KPj4KPj4gS2V5IHBvaW50IGlz IHlvdSBkb24ndCBuZWVkIGFueSBmaW5hbCByZWxlYXNlIG9mIHRoZSBCTyBhbnkgbW9yZS4gCj4+ IFdoZW4gdGhlIEJPcyByZWZlcmVuY2UgY291bnQgYmVjb21lcyB6ZXJvIGl0IGNhbiBiZSBkZXN0 cnVjdGVkIAo+PiBpbW1lZGlhdGVseS4KPj4KPj4gT25seSB0aGUgcmVzb3VyY2Ugb2JqZWN0IGlz IGtlcHQgYXJvdW5kIGFuZCBwcm90ZWN0ZWQgYnkgYSBmZW5jZSAKPj4gdW50aWwgaXQgY2FuIGJl IHJlbGVhc2VkIGZpbmFsbHkuCj4+Cj4+IEhvdyB0aGF0IHJlc291cmNlIG9iamVjdCBpcyB0aGVu IGRlc3Ryb3llZCBjb3VsZCBiZSBoYW5kbGVkIGluIAo+PiBkaWZmZXJlbnQgd2F5cywgd2UgY291 bGQgdXNlIGEgZGVsYXllZCB3b3JrLCBzaHJpbmtlciBjYWxsYmFjayBvciAKPj4ganVzdCByZWx5 IG9uIG5ldyBhbGxvY2F0aW9ucyB0byBzY2FuIHRoZSBkZWxldGVkIG9iamVjdHMuCj4KPiBIbW0s IG9rLCBidXQgd2hhdCBhYm91dCB3aGVuIHRoZSBvYmplY3QgaXMgYmFja2VkIGJ5IHBhZ2VzPyBX b3VsZCB0aGUgCj4gcGFnZXMgYmUgYXR0YWNoZWQgdG8gdGhlIHJlc291cmNlIG9iamVjdCBvciBo b3cgZG8gd2Uga25vdyB3aGVuIHRvIAo+IGZyZWUgdGhlbT8KClllcywgZXhhY3RseSB0aGF0J3Mg dGhlIGlkZWEuCgpCYXNpY2FsbHkgdGhlIHR0bSBwb2ludGVyIHdpbGwgYmUgbW92ZWQgaW50byB0 aGUgcmVzb3VyY2Ugb2JqZWN0IGFzIHdlbGwuCgpDaHJpc3RpYW4uCgo+Cj4+Cj4+Pgo+Pj4gT3Ro ZXJ3aXNlIHNvdW5kcyBsaWtlIGEgZ29vZCBpZGVhLCBhbmQgaWYgaXQgcnVucyBpbnRvIHByb2Js ZW1zLCB3ZSAKPj4+IGNvdWxkIHBvc3NpYmx5IHJlc3VycmVjdCB0aGlzLgo+Pgo+PiBXZWxsIHRo ZSBtYWluIHByb2JsZW0gaXMgdGhhdCBJIG5lZWQgdG8gY2hhbmdlIGFsbCBkcml2ZXJzIHNvIHRo YXQgCj4+IGJvLT5tZW0gY2FuIG5vdyBiZSBhIHBvaW50ZXIuIElJUkMgeW91IHN1Z2dlc3RlZCB0 aGF0IHllYXJzIGFnbyBhbmQgCj4+IEknbSB3b3JraW5nIG9uIHRoZSBkZXRhaWxzIG9mIHRoYXQg aWRlYSBldmVyIHNpbmNlLgo+Cj4gSG1tLCBJIG1pZ2h0IGhhdmUsIHllcy4gQ2FuJ3QgcmVtZW1i ZXIgdGhlIGNvbnRleHQsIHRob3VnaC4KPgo+IFRoYW5rcywKPiAvVGhvbWFzCj4KPgo+Pgo+PiBS ZWdhcmRzLAo+PiBDaHJpc3RpYW4uCj4+Cj4+Pgo+Pj4gL1Rob21hcwo+Pj4KPj4+Cj4+Pgo+Pj4K Pj4+Pgo+Pj4+IFJlZ2FyZHMsCj4+Pj4gQ2hyaXN0aWFuLgo+Pj4+Cj4+Pj4gQW0gMTIuMDQuMjEg dW0gMTU6MTcgc2NocmllYiBUaG9tYXMgSGVsbHN0csO2bToKPj4+Pj4gVGhpcyBSRkMgbmVlZHMg c29tZSBkZWNlbnQgdGVzdGluZyBvbiBhIGRyaXZlciB3aXRoIGJvcyB0aGF0IHNoYXJlCj4+Pj4+ IHJlc2VydmF0aW9uIG9iamVjdHMsIGFuZCBvZiBjb3Vyc2UgYSBjaGVjayBmb3Igd2hldGhlciBJ IG1pc3NlZAo+Pj4+PiBzb21ldGhpbmcgb2J2aW91cy4KPj4+Pj4KPj4+Pj4gVGhlIGxvY2tpbmcg YXJvdW5kIGRlbGF5ZWQgZGVzdHJveSBpcyByYXRoZXIgY29tcGxleCBkdWUgdG8gdGhlIGZhY3QK Pj4+Pj4gdGhhdCB3ZSB3YW50IHRvIGluZGl2aWR1YWxpemUgZG1hX3Jlc3YgcG9pbnRlcnMgYmVm b3JlIHB1dHRpbmcgdGhlIAo+Pj4+PiBvYmplY3QKPj4+Pj4gb24gdGhlIGRlbGF5ZWQtZGVzdHJv eSBsaXN0LiBUaGF0IGluZGl2aWR1YWxpemF0aW9uIGlzIGN1cnJlbnRseSAKPj4+Pj4gcHJvdGVj dGVkCj4+Pj4+IGJ5IHRoZSBscnUgbG9jayBmb3JjaW5nIHVzIHRvIGRvIHRyeS1yZXNlcnZhdGlv bnMgdW5kZXIgdGhlIGxydSAKPj4+Pj4gbG9jayB3aGVuCj4+Pj4+IHJlc2VydmluZyBhbiBvYmpl Y3QgZnJvbSB0aGUgbHJ1LSBvciBkZGVzdHJveSBsaXN0cywgd2hpY2ggCj4+Pj4+IGNvbXBsaWNh dGVzCj4+Pj4+IG1vdmluZyBvdmVyIHRvIHBlci1tYW5hZ2VyIGxydSBsb2Nrcy4KPj4+Pj4KPj4+ Pj4gSW5zdGVhZCBwcm90ZWN0IHRoZSBpbmRpdmlkdWFsaXphdGlvbiB3aXRoIHRoZSBvYmplY3Qg a3JlZiA9PSAwLAo+Pj4+PiBhbmQgZW5zdXJlIGtyZWYgIT0gMCBiZWZvcmUgdHJ5aW5nIHRvIHJl c2VydmUgYW4gb2JqZWN0IGZyb20gdGhlIAo+Pj4+PiBsaXN0Lgo+Pj4+PiBSZW1vdmUgdGhlIGxy dSBsb2NrIGFyb3VuZCBpbmRpdmlkdWFsaXphdGlvbiBhbmQgcHJvdGVjdCB0aGUgZGVsYXllZAo+ Pj4+PiBkZXN0cm95IGxpc3Qgd2l0aCBhIHNlcGFyYXRlIHNwaW5sb2NrLiBJc29sYXRlIHRoZSBk ZWxheWVkIGRlc3Ryb3kgCj4+Pj4+IGxpc3QKPj4+Pj4gc2ltaWxhcmx5IHRvIGEgbG9ja2xlc3Mg bGlzdCBiZWZvcmUgdHJhdmVyc2luZyBpdC4gQWxzbyBkb24ndCB0cnkgCj4+Pj4+IHRvIGRyb3AK Pj4+Pj4gcmVzb3VyY2UgcmVmZXJlbmNlcyBmcm9tIHRoZSBkZWxheWVkIGRlc3Ryb3kgbGlzdCB0 cmF2ZXJzYWwsIGJ1dCAKPj4+Pj4gbGVhdmUKPj4+Pj4gdGhhdCB0byB0aGUgZmluYWwgb2JqZWN0 IHJlbGVhc2UuIFRoZSByb2xlIG9mIHRoZSBkZWxheWVkIGRlc3Ryb3kgCj4+Pj4+IHRocmVhZAo+ Pj4+PiB3aWxsIG5vdyBzaW1wbHkgYmUgdG8gdHJ5IHRvIGlkbGUgdGhlIG9iamVjdCBhbmQgd2hl biBpZGxlLCBkcm9wCj4+Pj4+IHRoZSBkZWxheWVkIGRlc3RveSByZWZlcmVuY2UuCj4+Pj4+Cj4+ Pj4+IFRoaXMgc2hvdWxkIHBhdmUgdGhlIHdheSBmb3IgcGVyLW1hbmFnZXIgbHJ1IGxpc3RzLCBz bGVlcGluZyAKPj4+Pj4gZXZpY3Rpb24gbG9ja3MKPj4+Pj4gdGhhdCBhcmUga2VwdCwgb3B0aW9u YWwgZHJtX21tIGV2aWN0aW9uIHJvc3RlciB1c2FnZSBhbmQgbW92aW5nIAo+Pj4+PiBvdmVyIHRv IGEKPj4+Pj4gY29tcGxldGVseSBsb2NrbGVzcyBkZWxheWVkIGRlc3Ryb3kgbGlzdCBldmVuIGlm IHRoZSB0cmF2ZXJzYWwgb3JkZXIKPj4+Pj4gd2lsbCB0aGVuIGNoYW5nZSBiZWNhdXNlIHRoZXJl IGlzIG5vIGxsaXN0X2FkZF90YWlsKCkuCj4+Pj4+Cj4+Pj4+IENjOiBDaHJpc3RpYW4gS8O2bmln IDxjaHJpc3RpYW4ua29lbmlnQGFtZC5jb20+Cj4+Pj4+IENjOiBEYW5pZWwgVmV0dGVyIDxkYW5p ZWxAZmZ3bGwuY2g+Cj4+Pj4+IFNpZ25lZC1vZmYtYnk6IFRob21hcyBIZWxsc3Ryw7ZtIDx0aG9t YXMuaGVsbHN0cm9tQGxpbnV4LmludGVsLmNvbT4KPj4+Pj4gLS0tCj4+Pj4+IMKgIGRyaXZlcnMv Z3B1L2RybS90dG0vdHRtX2JvLmPCoMKgwqDCoCB8IDE5MyAKPj4+Pj4gKysrKysrKysrKysrKy0t LS0tLS0tLS0tLS0tLS0tLQo+Pj4+PiDCoCBkcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9kZXZpY2Uu YyB8wqDCoCAxICsKPj4+Pj4gwqAgaW5jbHVkZS9kcm0vdHRtL3R0bV9kZXZpY2UuaMKgwqDCoMKg IHzCoMKgIDEgKwo+Pj4+PiDCoCAzIGZpbGVzIGNoYW5nZWQsIDgyIGluc2VydGlvbnMoKyksIDEx MyBkZWxldGlvbnMoLSkKPj4+Pj4KPj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90 dG0vdHRtX2JvLmMgCj4+Pj4+IGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm8uYwo+Pj4+PiBp bmRleCA2YWI3YjY2Y2UzNmQuLmZkNTcyNTJiYzhmZSAxMDA2NDQKPj4+Pj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL3R0bS90dG1fYm8uYwo+Pj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0 bV9iby5jCj4+Pj4+IEBAIC0yMTcsNiArMjE3LDkgQEAgc3RhdGljIGludCB0dG1fYm9faGFuZGxl X21vdmVfbWVtKHN0cnVjdCAKPj4+Pj4gdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAo+Pj4+PiDCoCDC oCBzdGF0aWMgdm9pZCB0dG1fYm9fY2xlYW51cF9tZW10eXBlX3VzZShzdHJ1Y3QgCj4+Pj4+IHR0 bV9idWZmZXJfb2JqZWN0ICpibykKPj4+Pj4gwqAgewo+Pj4+PiArwqDCoMKgIGlmIChrcmVmX3Jl YWQoJmJvLT5rcmVmKSkKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGRtYV9yZXN2X2Fzc2VydF9oZWxk KGJvLT5iYXNlLnJlc3YpOwo+Pj4+PiArCj4+Pj4+IMKgwqDCoMKgwqAgaWYgKGJvLT5iZGV2LT5m dW5jcy0+ZGVsZXRlX21lbV9ub3RpZnkpCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBiby0+YmRl di0+ZnVuY3MtPmRlbGV0ZV9tZW1fbm90aWZ5KGJvKTsKPj4+Pj4gwqAgQEAgLTIzOSwxMyArMjQy LDE4IEBAIHN0YXRpYyBpbnQgCj4+Pj4+IHR0bV9ib19pbmRpdmlkdWFsaXplX3Jlc3Yoc3RydWN0 IHR0bV9idWZmZXJfb2JqZWN0ICpibykKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBy Owo+Pj4+PiDCoCDCoMKgwqDCoMKgIGlmIChiby0+dHlwZSAhPSB0dG1fYm9fdHlwZV9zZykgewo+ Pj4+PiAtwqDCoMKgwqDCoMKgwqAgLyogVGhpcyB3b3JrcyBiZWNhdXNlIHRoZSBCTyBpcyBhYm91 dCB0byBiZSBkZXN0cm95ZWQgYW5kIAo+Pj4+PiBub2JvZHkKPj4+Pj4gLcKgwqDCoMKgwqDCoMKg wqAgKiByZWZlcmVuY2UgaXQgYW55IG1vcmUuIFRoZSBvbmx5IHRyaWNreSBjYXNlIGlzIHRoZSAK Pj4+Pj4gdHJ5bG9jayBvbgo+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoCAqIHRoZSByZXN2IG9iamVj dCB3aGlsZSBob2xkaW5nIHRoZSBscnVfbG9jay4KPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIC8qCj4+ Pj4+ICvCoMKgwqDCoMKgwqDCoMKgICogVGhpcyB3b3JrcyBiZWNhdXNlIG5vYm9keSBiZXNpZGVz IHVzIGNhbiBsb2NrIHRoZSBibyBvcgo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoCAqIGFzc3VtZSBp dCBpcyBsb2NrZWQgd2hpbGUgaXRzIHJlZmNvdW50IGlzIHplcm8uCj4+Pj4+IMKgwqDCoMKgwqDC oMKgwqDCoMKgICovCj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCBzcGluX2xvY2soJmJvLT5iZGV2LT5s cnVfbG9jayk7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBXQVJOX09OX09OQ0Uoa3JlZl9yZWFkKCZi by0+a3JlZikpOwo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgYm8tPmJhc2UucmVzdiA9ICZiby0+ YmFzZS5fcmVzdjsKPj4+Pj4gLcKgwqDCoMKgwqDCoMKgIHNwaW5fdW5sb2NrKCZiby0+YmRldi0+ bHJ1X2xvY2spOwo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgLyoKPj4+Pj4gK8KgwqDCoMKgwqDCoMKg wqAgKiBEb24ndCByZW9yZGVyIGFnYWluc3Qga3JlZl9pbml0KCkuCj4+Pj4+ICvCoMKgwqDCoMKg wqDCoMKgICogTWF0Y2hlcyB0aGUgaW1wbGljaXQgZnVsbCBiYXJyaWVyIG9mIGEgc3VjY2Vzc2Z1 bAo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoCAqIGtyZWZfZ2V0X3VubGVzc196ZXJvKCkgYWZ0ZXIg YSBscnVfbGlzdF9sb29rdXAuCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgICovCj4+Pj4+ICvCoMKg wqDCoMKgwqDCoCBzbXBfbWIoKTsKPj4+Pj4gwqDCoMKgwqDCoCB9Cj4+Pj4+IMKgIMKgwqDCoMKg wqAgcmV0dXJuIHI7Cj4+Pj4+IEBAIC0yNzQsMTIyICsyODIsNjYgQEAgc3RhdGljIHZvaWQgdHRt X2JvX2ZsdXNoX2FsbF9mZW5jZXMoc3RydWN0IAo+Pj4+PiB0dG1fYnVmZmVyX29iamVjdCAqYm8p Cj4+Pj4+IMKgIH0KPj4+Pj4gwqAgwqAgLyoqCj4+Pj4+IC0gKiBmdW5jdGlvbiB0dG1fYm9fY2xl YW51cF9yZWZzCj4+Pj4+IC0gKiBJZiBibyBpZGxlLCByZW1vdmUgZnJvbSBscnUgbGlzdHMsIGFu ZCB1bnJlZi4KPj4+Pj4gLSAqIElmIG5vdCBpZGxlLCBibG9jayBpZiBwb3NzaWJsZS4KPj4+Pj4g LSAqCj4+Pj4+IC0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGxydV9sb2NrIGFuZCByZXNlcnZhdGlv biBoZWxkLCB0aGlzIGZ1bmN0aW9uCj4+Pj4+IC0gKiB3aWxsIGRyb3AgdGhlIGxydSBsb2NrIGFu ZCBvcHRpb25hbGx5IHRoZSByZXNlcnZhdGlvbiBsb2NrIAo+Pj4+PiBiZWZvcmUgcmV0dXJuaW5n Lgo+Pj4+PiArICogdHRtX2JvX2NsZWFudXBfcmVmcyAtIGlkbGUgYW5kIHJlbW92ZSBwYWdlcyBh bmQgZ3B1LWJpbmRpbmdzIAo+Pj4+PiBhbmQgcmVtb3ZlCj4+Pj4+ICsgKiBmcm9tIGxydV9saXN0 cy4KPj4+Pj4gwqDCoCAqCj4+Pj4+IMKgwqAgKiBAYm86wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgVGhlIGJ1ZmZlciBvYmplY3QgdG8gY2xlYW4tdXAKPj4+Pj4gwqDCoCAq IEBpbnRlcnJ1cHRpYmxlOsKgwqDCoMKgwqDCoMKgwqAgQW55IHNsZWVwcyBzaG91bGQgb2NjdXIg aW50ZXJydXB0aWJseS4KPj4+Pj4gLSAqIEBub193YWl0X2dwdTrCoMKgwqDCoMKgwqDCoMKgwqDC oCBOZXZlciB3YWl0IGZvciBncHUuIFJldHVybiAtRUJVU1kgCj4+Pj4+IGluc3RlYWQuCj4+Pj4+ IC0gKiBAdW5sb2NrX3Jlc3Y6wqDCoMKgwqDCoMKgwqDCoMKgwqAgVW5sb2NrIHRoZSByZXNlcnZh dGlvbiBsb2NrIGFzIHdlbGwuCj4+Pj4+ICsgKiBAbm9fd2FpdF9ncHU6wqDCoMKgwqDCoMKgwqDC oMKgwqAgTmV2ZXIgd2FpdCBmb3IgZ3B1LiBSZXR1cm4gLUVCVVNZIGlmIAo+Pj4+PiBub3QgaWRs ZS4KPj4+Pj4gwqDCoCAqLwo+Pj4+PiAtCj4+Pj4+IMKgIHN0YXRpYyBpbnQgdHRtX2JvX2NsZWFu dXBfcmVmcyhzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAo+Pj4+PiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJvb2wgaW50ZXJydXB0aWJsZSwgYm9vbCBub193YWl0 X2dwdSwKPj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBib29sIHVu bG9ja19yZXN2KQo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJv b2wgaW50ZXJydXB0aWJsZSwgYm9vbCBub193YWl0X2dwdSkKPj4+Pj4gwqAgewo+Pj4+PiAtwqDC oMKgIHN0cnVjdCBkbWFfcmVzdiAqcmVzdiA9ICZiby0+YmFzZS5fcmVzdjsKPj4+Pj4gwqDCoMKg wqDCoCBpbnQgcmV0Owo+Pj4+PiDCoCAtwqDCoMKgIGlmIChkbWFfcmVzdl90ZXN0X3NpZ25hbGVk X3JjdShyZXN2LCB0cnVlKSkKPj4+Pj4gLcKgwqDCoMKgwqDCoMKgIHJldCA9IDA7Cj4+Pj4+IC3C oMKgwqAgZWxzZQo+Pj4+PiAtwqDCoMKgwqDCoMKgwqAgcmV0ID0gLUVCVVNZOwo+Pj4+PiAtCj4+ Pj4+IC3CoMKgwqAgaWYgKHJldCAmJiAhbm9fd2FpdF9ncHUpIHsKPj4+Pj4gLcKgwqDCoMKgwqDC oMKgIGxvbmcgbHJldDsKPj4+Pj4gLQo+Pj4+PiAtwqDCoMKgwqDCoMKgwqAgaWYgKHVubG9ja19y ZXN2KQo+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkbWFfcmVzdl91bmxvY2soYm8tPmJh c2UucmVzdik7Cj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCBzcGluX3VubG9jaygmYm8tPmJkZXYtPmxy dV9sb2NrKTsKPj4+Pj4gLQo+Pj4+PiAtwqDCoMKgwqDCoMKgwqAgbHJldCA9IGRtYV9yZXN2X3dh aXRfdGltZW91dF9yY3UocmVzdiwgdHJ1ZSwgaW50ZXJydXB0aWJsZSwKPj4+Pj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAzMCAqIEhaKTsKPj4+Pj4g LQo+Pj4+PiAtwqDCoMKgwqDCoMKgwqAgaWYgKGxyZXQgPCAwKQo+Pj4+PiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCByZXR1cm4gbHJldDsKPj4+Pj4gLcKgwqDCoMKgwqDCoMKgIGVsc2UgaWYgKGxy ZXQgPT0gMCkKPj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FQlVTWTsKPj4+ Pj4gLQo+Pj4+PiAtwqDCoMKgwqDCoMKgwqAgc3Bpbl9sb2NrKCZiby0+YmRldi0+bHJ1X2xvY2sp Owo+Pj4+PiAtwqDCoMKgwqDCoMKgwqAgaWYgKHVubG9ja19yZXN2ICYmICFkbWFfcmVzdl90cnls b2NrKGJvLT5iYXNlLnJlc3YpKSB7Cj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qCj4+ Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBXZSByYWNlZCwgYW5kIGxvc3QsIHNvbWVv bmUgZWxzZSBob2xkcyB0aGUgCj4+Pj4+IHJlc2VydmF0aW9uIG5vdywKPj4+Pj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAqIGFuZCBpcyBwcm9iYWJseSBidXN5IGluIHR0bV9ib19jbGVhbnVw X21lbXR5cGVfdXNlLgo+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICoKPj4+Pj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIEV2ZW4gaWYgaXQncyBub3QgdGhlIGNhc2UsIGJlY2F1 c2Ugd2UgZmluaXNoZWQgCj4+Pj4+IHdhaXRpbmcgYW55Cj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgKiBkZWxheWVkIGRlc3RydWN0aW9uIHdvdWxkIHN1Y2NlZWQsIHNvIGp1c3QgcmV0 dXJuIAo+Pj4+PiBzdWNjZXNzCj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBoZXJl Lgo+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICovCj4+Pj4+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHNwaW5fdW5sb2NrKCZiby0+YmRldi0+bHJ1X2xvY2spOwo+Pj4+PiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4+Pj4gLcKgwqDCoMKgwqDCoMKgIH0KPj4+Pj4g LcKgwqDCoMKgwqDCoMKgIHJldCA9IDA7Cj4+Pj4+IC3CoMKgwqAgfQo+Pj4+PiAtCj4+Pj4+IC3C oMKgwqAgaWYgKHJldCB8fCB1bmxpa2VseShsaXN0X2VtcHR5KCZiby0+ZGRlc3Ryb3kpKSkgewo+ Pj4+PiAtwqDCoMKgwqDCoMKgwqAgaWYgKHVubG9ja19yZXN2KQo+Pj4+PiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBkbWFfcmVzdl91bmxvY2soYm8tPmJhc2UucmVzdik7Cj4+Pj4+IC3CoMKgwqDC oMKgwqDCoCBzcGluX3VubG9jaygmYm8tPmJkZXYtPmxydV9sb2NrKTsKPj4+Pj4gK8KgwqDCoCBk bWFfcmVzdl9hc3NlcnRfaGVsZChiby0+YmFzZS5yZXN2KTsKPj4+Pj4gK8KgwqDCoCBXQVJOX09O X09OQ0UoIWJvLT5kZWxldGVkKTsKPj4+Pj4gK8KgwqDCoCByZXQgPSB0dG1fYm9fd2FpdChibywg aW50ZXJydXB0aWJsZSwgbm9fd2FpdF9ncHUpOwo+Pj4+PiArwqDCoMKgIGlmIChyZXQpCj4+Pj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+Pj4+PiAtwqDCoMKgIH0KPj4+Pj4gwqAg K8KgwqDCoCB0dG1fYm9fY2xlYW51cF9tZW10eXBlX3VzZShibyk7Cj4+Pj4+ICvCoMKgwqAgc3Bp bl9sb2NrKCZiby0+YmRldi0+bHJ1X2xvY2spOwo+Pj4+PiDCoMKgwqDCoMKgIHR0bV9ib19kZWxf ZnJvbV9scnUoYm8pOwo+Pj4+PiAtwqDCoMKgIGxpc3RfZGVsX2luaXQoJmJvLT5kZGVzdHJveSk7 Cj4+Pj4+IMKgwqDCoMKgwqAgc3Bpbl91bmxvY2soJmJvLT5iZGV2LT5scnVfbG9jayk7Cj4+Pj4+ IC3CoMKgwqAgdHRtX2JvX2NsZWFudXBfbWVtdHlwZV91c2UoYm8pOwo+Pj4+PiAtCj4+Pj4+IC3C oMKgwqAgaWYgKHVubG9ja19yZXN2KQo+Pj4+PiAtwqDCoMKgwqDCoMKgwqAgZG1hX3Jlc3ZfdW5s b2NrKGJvLT5iYXNlLnJlc3YpOwo+Pj4+PiAtCj4+Pj4+IC3CoMKgwqAgdHRtX2JvX3B1dChibyk7 Cj4+Pj4+IMKgIMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4+Pj4+IMKgIH0KPj4+Pj4gwqAgwqAgLyoK Pj4+Pj4gLSAqIFRyYXZlcnNlIHRoZSBkZWxheWVkIGxpc3QsIGFuZCBjYWxsIHR0bV9ib19jbGVh bnVwX3JlZnMgb24gYWxsCj4+Pj4+IC0gKiBlbmNvdW50ZXJlZCBidWZmZXJzLgo+Pj4+PiArICog SXNvbGF0ZSBhIHBhcnQgb2YgdGhlIGRlbGF5ZWQgZGVzdHJveSBsaXN0IGFuZCBjaGVjayBmb3Ig aWRsZSAKPj4+Pj4gb24gYWxsCj4+Pj4+ICsgKiBidWZmZXIgb2JqZWN0cyBvbiBpdC4gSWYgaWRs ZSwgcmVtb3ZlIGZyb20gdGhlIGxpc3QgYW5kIGRyb3AgdGhlCj4+Pj4+ICsgKiBkZWxheWVkIGRl c3Ryb3kgcmVmY291bnQuIFJldHVybiBhbGwgYnVzeSBidWZmZXJzIHRvIHRoZSBkZWxheWVkCj4+ Pj4+ICsgKiBkZXN0cm95IGxpc3QuCj4+Pj4+IMKgwqAgKi8KPj4+Pj4gwqAgYm9vbCB0dG1fYm9f ZGVsYXllZF9kZWxldGUoc3RydWN0IHR0bV9kZXZpY2UgKmJkZXYsIGJvb2wgCj4+Pj4+IHJlbW92 ZV9hbGwpCj4+Pj4+IMKgIHsKPj4+Pj4gLcKgwqDCoCBzdHJ1Y3QgbGlzdF9oZWFkIHJlbW92ZWQ7 Cj4+Pj4+IC3CoMKgwqAgYm9vbCBlbXB0eTsKPj4+Pj4gLQo+Pj4+PiAtwqDCoMKgIElOSVRfTElT VF9IRUFEKCZyZW1vdmVkKTsKPj4+Pj4gLQo+Pj4+PiAtwqDCoMKgIHNwaW5fbG9jaygmYmRldi0+ bHJ1X2xvY2spOwo+Pj4+PiAtwqDCoMKgIHdoaWxlICghbGlzdF9lbXB0eSgmYmRldi0+ZGRlc3Ry b3kpKSB7Cj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJv Owo+Pj4+PiAtCj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCBibyA9IGxpc3RfZmlyc3RfZW50cnkoJmJk ZXYtPmRkZXN0cm95LCBzdHJ1Y3QgCj4+Pj4+IHR0bV9idWZmZXJfb2JqZWN0LAo+Pj4+PiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRkZXN0cm95KTsKPj4+Pj4g LcKgwqDCoMKgwqDCoMKgIGxpc3RfbW92ZV90YWlsKCZiby0+ZGRlc3Ryb3ksICZyZW1vdmVkKTsK Pj4+Pj4gLcKgwqDCoMKgwqDCoMKgIGlmICghdHRtX2JvX2dldF91bmxlc3NfemVybyhibykpCj4+ Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+Pj4+PiAtCj4+Pj4+IC3CoMKg wqDCoMKgwqDCoCBpZiAocmVtb3ZlX2FsbCB8fCBiby0+YmFzZS5yZXN2ICE9ICZiby0+YmFzZS5f cmVzdikgewo+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzcGluX3VubG9jaygmYmRldi0+ bHJ1X2xvY2spOwo+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkbWFfcmVzdl9sb2NrKGJv LT5iYXNlLnJlc3YsIE5VTEwpOwo+Pj4+PiAtCj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHNwaW5fbG9jaygmYmRldi0+bHJ1X2xvY2spOwo+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB0dG1fYm9fY2xlYW51cF9yZWZzKGJvLCBmYWxzZSwgIXJlbW92ZV9hbGwsIHRydWUpOwo+Pj4+ PiAtCj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCB9IGVsc2UgaWYgKGRtYV9yZXN2X3RyeWxvY2soYm8t PmJhc2UucmVzdikpIHsKPj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdHRtX2JvX2NsZWFu dXBfcmVmcyhibywgZmFsc2UsICFyZW1vdmVfYWxsLCB0cnVlKTsKPj4+Pj4gLcKgwqDCoMKgwqDC oMKgIH0gZWxzZSB7Cj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNwaW5fdW5sb2NrKCZi ZGV2LT5scnVfbG9jayk7Cj4+Pj4+ICvCoMKgwqAgc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpi bywgKm5leHQ7Cj4+Pj4+ICvCoMKgwqAgc3RydWN0IGxpc3RfaGVhZCBpc29sYXRlZDsKPj4+Pj4g K8KgwqDCoCBib29sIGVtcHR5LCBpZGxlOwo+Pj4+PiArCj4+Pj4+ICvCoMKgwqAgSU5JVF9MSVNU X0hFQUQoJmlzb2xhdGVkKTsKPj4+Pj4gKwo+Pj4+PiArwqDCoMKgIHNwaW5fbG9jaygmYmRldi0+ ZGRlc3Ryb3lfbG9jayk7Cj4+Pj4+ICvCoMKgwqAgbGlzdF9zcGxpY2VfaW5pdCgmYmRldi0+ZGRl c3Ryb3ksICZpc29sYXRlZCk7Cj4+Pj4+ICvCoMKgwqAgc3Bpbl91bmxvY2soJmJkZXYtPmRkZXN0 cm95X2xvY2spOwo+Pj4+PiArwqDCoMKgIGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShibywgbmV4 dCwgJmlzb2xhdGVkLCBkZGVzdHJveSkgewo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgV0FSTl9PTl9P TkNFKCFrcmVmX3JlYWQoJmJvLT5rcmVmKSB8fAo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgYm8tPmJhc2UucmVzdiAhPSAmYm8tPmJhc2UuX3Jlc3YpOwo+Pj4+PiArwqDC oMKgwqDCoMKgwqAgaWYgKCFyZW1vdmVfYWxsKQo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBpZGxlID0gZG1hX3Jlc3ZfdGVzdF9zaWduYWxlZF9yY3UoYm8tPmJhc2UucmVzdiwgdHJ1ZSk7 Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBlbHNlCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGlkbGUgPSAoZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3JjdShiby0+YmFzZS5yZXN2LCB0cnVlLAo+ Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBmYWxzZSwgMzAgKiBIWikgPiAwKTsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChp ZGxlKSB7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxpc3RfZGVsX2luaXQoJmJvLT5k ZGVzdHJveSk7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHR0bV9ib19wdXQoYm8pOwo+ Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+Pj4+PiAtCj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCB0 dG1fYm9fcHV0KGJvKTsKPj4+Pj4gLcKgwqDCoMKgwqDCoMKgIHNwaW5fbG9jaygmYmRldi0+bHJ1 X2xvY2spOwo+Pj4+PiDCoMKgwqDCoMKgIH0KPj4+Pj4gLcKgwqDCoCBsaXN0X3NwbGljZV90YWls KCZyZW1vdmVkLCAmYmRldi0+ZGRlc3Ryb3kpOwo+Pj4+PiArwqDCoMKgIHNwaW5fbG9jaygmYmRl di0+ZGRlc3Ryb3lfbG9jayk7Cj4+Pj4+ICvCoMKgwqAgbGlzdF9zcGxpY2UoJmlzb2xhdGVkLCAm YmRldi0+ZGRlc3Ryb3kpOwo+Pj4+PiDCoMKgwqDCoMKgIGVtcHR5ID0gbGlzdF9lbXB0eSgmYmRl di0+ZGRlc3Ryb3kpOwo+Pj4+PiAtwqDCoMKgIHNwaW5fdW5sb2NrKCZiZGV2LT5scnVfbG9jayk7 Cj4+Pj4+ICvCoMKgwqAgc3Bpbl91bmxvY2soJmJkZXYtPmRkZXN0cm95X2xvY2spOwo+Pj4+PiDC oCDCoMKgwqDCoMKgIHJldHVybiBlbXB0eTsKPj4+Pj4gwqAgfQo+Pj4+PiBAQCAtNDA1LDEwICsz NTcsMTYgQEAgc3RhdGljIHZvaWQgdHRtX2JvX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpCj4+ Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSB0dG1fYm9faW5kaXZpZHVhbGl6ZV9yZXN2KGJv KTsKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChyZXQpIHsKPj4+Pj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgLyogTGFzdCByZXNvcnQsIGlmIHdlIGZhaWwgdG8gYWxsb2NhdGUgbWVt b3J5IGZvciB0aGUKPj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIGZlbmNlcyBibG9j ayBmb3IgdGhlIEJPIHRvIGJlY29tZSBpZGxlCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgKiBmZW5jZXMgYmxvY2sgZm9yIHRoZSBCTyB0byBiZWNvbWUgaWRsZSwgYW5kIHRoZW4KPj4+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIHdlIGFyZSBmcmVlIHRvIHVwZGF0ZSB0aGUg cmVzdiBwb2ludGVyLgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICovCj4+Pj4+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRtYV9yZXN2X3dhaXRfdGltZW91dF9yY3UoYm8t PmJhc2UucmVzdiwgdHJ1ZSwgZmFsc2UsCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAzMCAqIEhaKTsKPj4+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgaWYgKGJvLT50eXBlICE9IHR0bV9ib190eXBlX3NnKSB7Cj4+Pj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYm8tPmJhc2UucmVzdiA9ICZiby0+YmFzZS5fcmVz djsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBQbGVhc2Ugc2VlIHR0 bV9ib19pbmRpdmlkdWFsaXplX3Jlc3YoKSAqLwo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHNtcF9tYigpOwo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+Pj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+Pj4+IMKgIMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoYm8t PmJkZXYtPmZ1bmNzLT5yZWxlYXNlX25vdGlmeSkKPj4+Pj4gQEAgLTQyMiw5ICszODAsOCBAQCBz dGF0aWMgdm9pZCB0dG1fYm9fcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKPj4+Pj4gwqDCoMKg wqDCoMKgwqDCoMKgICFkbWFfcmVzdl90cnlsb2NrKGJvLT5iYXNlLnJlc3YpKSB7Cj4+Pj4+IMKg wqDCoMKgwqDCoMKgwqDCoCAvKiBUaGUgQk8gaXMgbm90IGlkbGUsIHJlc3VycmVjdCBpdCBmb3Ig ZGVsYXllZCBkZXN0cm95ICovCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB0dG1fYm9fZmx1c2hf YWxsX2ZlbmNlcyhibyk7Cj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCBiby0+ZGVsZXRlZCA9IHRydWU7 Cj4+Pj4+IC0KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHNwaW5fbG9jaygmYm8tPmJkZXYtPmxy dV9sb2NrKTsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGJvLT5kZWxldGVkID0gdHJ1ZTsKPj4+Pj4g wqAgwqDCoMKgwqDCoMKgwqDCoMKgIC8qCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgICogTWFr ZSBwaW5uZWQgYm9zIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSB0bwo+Pj4+PiBAQCAtNDM5LDggKzM5 NiwxMCBAQCBzdGF0aWMgdm9pZCB0dG1fYm9fcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKPj4+ Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdHRtX2JvX21vdmVfdG9fbHJ1X3RhaWwoYm8s ICZiby0+bWVtLCBOVUxMKTsKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4+Pj4gwqAgK8Kg wqDCoMKgwqDCoMKgIHNwaW5fbG9jaygmYm8tPmJkZXYtPmRkZXN0cm95X2xvY2spOwo+Pj4+PiDC oMKgwqDCoMKgwqDCoMKgwqAga3JlZl9pbml0KCZiby0+a3JlZik7Cj4+Pj4+IMKgwqDCoMKgwqDC oMKgwqDCoCBsaXN0X2FkZF90YWlsKCZiby0+ZGRlc3Ryb3ksICZiZGV2LT5kZGVzdHJveSk7Cj4+ Pj4+ICvCoMKgwqDCoMKgwqDCoCBzcGluX3VubG9jaygmYm8tPmJkZXYtPmRkZXN0cm95X2xvY2sp Owo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgc3Bpbl91bmxvY2soJmJvLT5iZGV2LT5scnVfbG9j ayk7Cj4+Pj4+IMKgIMKgwqDCoMKgwqDCoMKgwqDCoCBzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmJk ZXYtPndxLAo+Pj4+PiBAQCAtNDUwLDkgKzQwOSwxMSBAQCBzdGF0aWMgdm9pZCB0dG1fYm9fcmVs ZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKPj4+Pj4gwqAgwqDCoMKgwqDCoCBzcGluX2xvY2soJmJv LT5iZGV2LT5scnVfbG9jayk7Cj4+Pj4+IMKgwqDCoMKgwqAgdHRtX2JvX2RlbF9mcm9tX2xydShi byk7Cj4+Pj4+IC3CoMKgwqAgbGlzdF9kZWwoJmJvLT5kZGVzdHJveSk7Cj4+Pj4+IMKgwqDCoMKg wqAgc3Bpbl91bmxvY2soJmJvLT5iZGV2LT5scnVfbG9jayk7Cj4+Pj4+IMKgICvCoMKgwqAgcHJf aW5mbygiRGVsZXRpbmcuXG4iKTsKPj4+Pj4gKyBXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHlfY2Fy ZWZ1bCgmYm8tPmRkZXN0cm95KSk7Cj4+Pj4+ICsKPj4+Pj4gwqDCoMKgwqDCoCB0dG1fYm9fY2xl YW51cF9tZW10eXBlX3VzZShibyk7Cj4+Pj4+IMKgwqDCoMKgwqAgZG1hX3Jlc3ZfdW5sb2NrKGJv LT5iYXNlLnJlc3YpOwo+Pj4+PiDCoCBAQCAtNjMwLDI1ICs1OTEsMjYgQEAgaW50IHR0bV9tZW1f ZXZpY3RfZmlyc3Qoc3RydWN0IHR0bV9kZXZpY2UgCj4+Pj4+ICpiZGV2LAo+Pj4+PiDCoMKgwqDC oMKgwqDCoMKgwqAgbGlzdF9mb3JfZWFjaF9lbnRyeShibywgJm1hbi0+bHJ1W2ldLCBscnUpIHsK Pj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYm9vbCBidXN5Owo+Pj4+PiDCoCArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoIXR0bV9ib19nZXRfdW5sZXNzX3plcm8oYm8pKQo+Pj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+Pj4+PiArCj4+Pj4+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICghdHRtX2JvX2V2aWN0X3N3YXBvdXRfYWxs b3dhYmxlKGJvLCBjdHgsICZsb2NrZWQsCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmYnVzeSkpIHsKPj4+Pj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoYnVzeSAmJiAhYnVzeV9ibyAm JiB0aWNrZXQgIT0KPj4+Pj4gZG1hX3Jlc3ZfbG9ja2luZ19jdHgoYm8tPmJhc2UucmVzdikpCj4+ Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBidXN5X2JvID0g Ym87Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdHRtX2JvX3B1dChibyk7 Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29udGludWU7Cj4+Pj4+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4+Pj4gwqAgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgaWYgKHBsYWNlICYmICFiZGV2LT5mdW5jcy0+ZXZpY3Rpb25fdmFsdWFibGUoYm8s Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwbGFjZSkpIHsKPj4+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCB0dG1fYm9fcHV0KGJvKTsKPj4+Pj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAobG9ja2VkKQo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZG1hX3Jlc3ZfdW5sb2NrKGJvLT5iYXNlLnJlc3YpOwo+ Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+Pj4+PiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGlmICghdHRtX2JvX2dldF91bmxlc3NfemVybyhibykpIHsKPj4+Pj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBpZiAobG9ja2VkKQo+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgZG1hX3Jlc3ZfdW5sb2NrKGJvLT5iYXNlLnJlc3YpOwo+Pj4+PiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+Pj4+PiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB9Cj4+Pj4+ICsKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg YnJlYWs7Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+Pj4+IMKgIEBAIC02NzAsOCArNjMy LDExIEBAIGludCB0dG1fbWVtX2V2aWN0X2ZpcnN0KHN0cnVjdCB0dG1fZGV2aWNlIAo+Pj4+PiAq YmRldiwKPj4+Pj4gwqDCoMKgwqDCoCB9Cj4+Pj4+IMKgIMKgwqDCoMKgwqAgaWYgKGJvLT5kZWxl dGVkKSB7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBzcGluX3VubG9jaygmYmRldi0+bHJ1X2xvY2sp Owo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gdHRtX2JvX2NsZWFudXBfcmVmcyhibywg Y3R4LT5pbnRlcnJ1cHRpYmxlLAo+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGN0eC0+bm9fd2FpdF9ncHUsIGxvY2tlZCk7Cj4+Pj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY3R4LT5ub193YWl0X2dwdSk7Cj4+Pj4+ ICvCoMKgwqDCoMKgwqDCoCBpZiAobG9ja2VkKQo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBkbWFfcmVzdl91bmxvY2soYm8tPmJhc2UucmVzdik7Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDC oCB0dG1fYm9fcHV0KGJvKTsKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+ Pj4+IMKgwqDCoMKgwqAgfQo+Pj4+PiBAQCAtMTE2OCwxNyArMTEzMywxOSBAQCBpbnQgdHRtX2Jv X3N3YXBvdXQoc3RydWN0IAo+Pj4+PiB0dG1fYnVmZmVyX29iamVjdCAqYm8sIHN0cnVjdCB0dG1f b3BlcmF0aW9uX2N0eCAqY3R4LAo+Pj4+PiDCoMKgwqDCoMKgIGJvb2wgbG9ja2VkOwo+Pj4+PiDC oMKgwqDCoMKgIGludCByZXQ7Cj4+Pj4+IMKgIC3CoMKgwqAgaWYgKCF0dG1fYm9fZXZpY3Rfc3dh cG91dF9hbGxvd2FibGUoYm8sIGN0eCwgJmxvY2tlZCwgTlVMTCkpCj4+Pj4+ICvCoMKgwqAgaWYg KCF0dG1fYm9fZ2V0X3VubGVzc196ZXJvKGJvKSkKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJl dHVybiAtRUJVU1k7Cj4+Pj4+IMKgIC3CoMKgwqAgaWYgKCF0dG1fYm9fZ2V0X3VubGVzc196ZXJv KGJvKSkgewo+Pj4+PiAtwqDCoMKgwqDCoMKgwqAgaWYgKGxvY2tlZCkKPj4+Pj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgZG1hX3Jlc3ZfdW5sb2NrKGJvLT5iYXNlLnJlc3YpOwo+Pj4+PiArwqDC oMKgIGlmICghdHRtX2JvX2V2aWN0X3N3YXBvdXRfYWxsb3dhYmxlKGJvLCBjdHgsICZsb2NrZWQs IE5VTEwpKSB7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCB0dG1fYm9fcHV0KGJvKTsKPj4+Pj4gwqDC oMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRUJVU1k7Cj4+Pj4+IMKgwqDCoMKgwqAgfQo+Pj4+PiDC oCDCoMKgwqDCoMKgIGlmIChiby0+ZGVsZXRlZCkgewo+Pj4+PiAtwqDCoMKgwqDCoMKgwqAgdHRt X2JvX2NsZWFudXBfcmVmcyhibywgZmFsc2UsIGZhbHNlLCBsb2NrZWQpOwo+Pj4+PiArwqDCoMKg wqDCoMKgwqAgc3Bpbl91bmxvY2soJmJvLT5iZGV2LT5scnVfbG9jayk7Cj4+Pj4+ICvCoMKgwqDC oMKgwqDCoCB0dG1fYm9fY2xlYW51cF9yZWZzKGJvLCBmYWxzZSwgZmFsc2UpOwo+Pj4+PiArwqDC oMKgwqDCoMKgwqAgaWYgKGxvY2tlZCkKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZG1h X3Jlc3ZfdW5sb2NrKGJvLT5iYXNlLnJlc3YpOwo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgdHRt X2JvX3B1dChibyk7Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4+Pj4gwqDC oMKgwqDCoCB9Cj4+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9kZXZp Y2UuYyAKPj4+Pj4gYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9kZXZpY2UuYwo+Pj4+PiBpbmRl eCA5Yjc4N2IzY2FlYjUuLmI5NDE5ODk4ODVlZCAxMDA2NDQKPj4+Pj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL3R0bS90dG1fZGV2aWNlLmMKPj4+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90 dG1fZGV2aWNlLmMKPj4+Pj4gQEAgLTIyOCw2ICsyMjgsNyBAQCBpbnQgdHRtX2RldmljZV9pbml0 KHN0cnVjdCB0dG1fZGV2aWNlICpiZGV2LCAKPj4+Pj4gc3RydWN0IHR0bV9kZXZpY2VfZnVuY3Mg KmZ1bmNzLAo+Pj4+PiDCoMKgwqDCoMKgIGJkZXYtPnZtYV9tYW5hZ2VyID0gdm1hX21hbmFnZXI7 Cj4+Pj4+IMKgwqDCoMKgwqAgSU5JVF9ERUxBWUVEX1dPUksoJmJkZXYtPndxLCB0dG1fZGV2aWNl X2RlbGF5ZWRfd29ya3F1ZXVlKTsKPj4+Pj4gwqDCoMKgwqDCoCBzcGluX2xvY2tfaW5pdCgmYmRl di0+bHJ1X2xvY2spOwo+Pj4+PiArwqDCoMKgIHNwaW5fbG9ja19pbml0KCZiZGV2LT5kZGVzdHJv eV9sb2NrKTsKPj4+Pj4gwqDCoMKgwqDCoCBJTklUX0xJU1RfSEVBRCgmYmRldi0+ZGRlc3Ryb3kp Owo+Pj4+PiDCoMKgwqDCoMKgIGJkZXYtPmRldl9tYXBwaW5nID0gbWFwcGluZzsKPj4+Pj4gwqDC oMKgwqDCoCBtdXRleF9sb2NrKCZ0dG1fZ2xvYmFsX211dGV4KTsKPj4+Pj4gZGlmZiAtLWdpdCBh L2luY2x1ZGUvZHJtL3R0bS90dG1fZGV2aWNlLmggCj4+Pj4+IGIvaW5jbHVkZS9kcm0vdHRtL3R0 bV9kZXZpY2UuaAo+Pj4+PiBpbmRleCA3YzhmODdiZDUyZDMuLmZhOGM0ZjZhMTY5ZSAxMDA2NDQK Pj4+Pj4gLS0tIGEvaW5jbHVkZS9kcm0vdHRtL3R0bV9kZXZpY2UuaAo+Pj4+PiArKysgYi9pbmNs dWRlL2RybS90dG0vdHRtX2RldmljZS5oCj4+Pj4+IEBAIC0yNzksNiArMjc5LDcgQEAgc3RydWN0 IHR0bV9kZXZpY2Ugewo+Pj4+PiDCoMKgwqDCoMKgwqAgKiBQcm90ZWN0aW9uIGZvciB0aGUgcGVy IG1hbmFnZXIgTFJVIGFuZCBkZGVzdHJveSBsaXN0cy4KPj4+Pj4gwqDCoMKgwqDCoMKgICovCj4+ Pj4+IMKgwqDCoMKgwqAgc3BpbmxvY2tfdCBscnVfbG9jazsKPj4+Pj4gK8KgwqDCoCBzcGlubG9j a190IGRkZXN0cm95X2xvY2s7Cj4+Pj4+IMKgwqDCoMKgwqAgc3RydWN0IGxpc3RfaGVhZCBkZGVz dHJveTsKPj4+Pj4gwqAgwqDCoMKgwqDCoCAvKgo+Pj4+Cj4+CgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1k ZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK