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=-8.0 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MSGID_FROM_MTA_HEADER,SIGNED_OFF_BY,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 992BEC2D0DB for ; Thu, 23 Jan 2020 15:23:31 +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 7F34022464 for ; Thu, 23 Jan 2020 15:23:30 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=amdcloud.onmicrosoft.com header.i=@amdcloud.onmicrosoft.com header.b="xM7SVWQn" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7F34022464 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=amd-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 3758F6FD70; Thu, 23 Jan 2020 15:23:30 +0000 (UTC) Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2067.outbound.protection.outlook.com [40.107.94.67]) by gabe.freedesktop.org (Postfix) with ESMTPS id CE8E96FD70 for ; Thu, 23 Jan 2020 15:23:29 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Tn4No5tyqoEietuL++ZK8FlRFPN3Ixu/mDoo1vILkECpL/j7UdS0XzQMQWLy4J2W8cXnBO0GyCgtju5R3/377DnG1pyr6MboxyYrS42Sgcd/tHTh3Ppz0T7HTu6fVM30/mr5BpLbjzLujA/pdvQhGmUF+IDXwJHGDKdkKQ2fcj1T0b1a9NJWyFEqfYCslaKEo3VZYJdTRgTf+JKfS4ZX4Q6wjNfmYnb9rtRm30XIiv9UmHpls6HlqWPJyQbNmCyfbAhkcY1D4C3tvjqUOSa3LEiWv0WASCHa38gteohUjkY/ZE+Ak7gaWw52UGKCRSZozCbhiVQ+SpuT0SVvwWEkTA== 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=hEdQOaLNJ4JuchjXGNsyfkgETxVUMcIDayFI5h4Au34=; b=Q8I9Ia/os0F2XmAsLDryatEDK7M1aZn76+w1gQiXdVzriXIqKIKSJ8AZ8I7kacHyy+hpzUg8FaRqKpqHl8LWlVWPQ+UvXK+vGQJYY1/kTSnj/1xfxwTqpC2ouWdgOLHLzOSM17cNSqCfPRR53uTm3ausdFCT/L6BsP4d315aMOYsAmHiiSqVnej6k/VS4dW1/YlhugsknbQ7SoKB0JytKGy+1lbl/6EW3vKBjPkJe7oAycFy3RSmYrenSumOpdCfOkOuQIyp/djVoTKJI97tu6exhBo1utXPPz8ezNg4jSYApCueUxzVShBfiocx2DbYIUYow9nJPUt51NVKjE8Zcw== 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=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hEdQOaLNJ4JuchjXGNsyfkgETxVUMcIDayFI5h4Au34=; b=xM7SVWQnyKNpOe0Mg9kWV+vNNt1+5cWEyB1Ar84rVfgtwI2gLmFmIpQvbae6gl1GJyxS07t7TM38PFdV72Ihue6KYoxkWfm8dtp03hTmYb4Sf8EhtFACGZ2NtPNGQruNvfwutGjgCXg0+6E1Q/gg8BduFFitgt+CiTHieA0xiKI= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Tom.StDenis@amd.com; Received: from MN2PR12MB3935.namprd12.prod.outlook.com (10.255.237.223) by MN2PR12MB3373.namprd12.prod.outlook.com (20.178.242.33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.20; Thu, 23 Jan 2020 15:23:28 +0000 Received: from MN2PR12MB3935.namprd12.prod.outlook.com ([fe80::4de1:e7cb:7d68:b666]) by MN2PR12MB3935.namprd12.prod.outlook.com ([fe80::4de1:e7cb:7d68:b666%7]) with mapi id 15.20.2644.028; Thu, 23 Jan 2020 15:23:28 +0000 Subject: Re: [PATCH 4/4] drm/amdgpu: rework synchronization of VM updates v3 To: =?UTF-8?Q?Christian_K=c3=b6nig?= , amd-gfx@lists.freedesktop.org, Felix.Kuehling@amd.com References: <20200123142122.4084-1-christian.koenig@amd.com> <20200123142122.4084-4-christian.koenig@amd.com> <72d0c177-11d2-c43e-bf0d-53123739790d@gmail.com> <2fa7de0d-a08e-f36d-31d0-cbb4e8632163@amd.com> From: Tom St Denis Message-ID: Date: Thu, 23 Jan 2020 10:23:26 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.4.1 In-Reply-To: <2fa7de0d-a08e-f36d-31d0-cbb4e8632163@amd.com> Content-Language: en-US X-ClientProxiedBy: BN6PR06CA0016.namprd06.prod.outlook.com (2603:10b6:404:10b::26) To MN2PR12MB3935.namprd12.prod.outlook.com (2603:10b6:208:168::31) MIME-Version: 1.0 Received: from localhost.localdomain (165.204.84.11) by BN6PR06CA0016.namprd06.prod.outlook.com (2603:10b6:404:10b::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.20 via Frontend Transport; Thu, 23 Jan 2020 15:23:27 +0000 X-Originating-IP: [165.204.84.11] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: ca741889-a62f-4b68-daa4-08d7a018324d X-MS-TrafficTypeDiagnostic: MN2PR12MB3373:|MN2PR12MB3373: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:10000; X-Forefront-PRVS: 029174C036 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4636009)(366004)(346002)(376002)(39850400004)(396003)(136003)(189003)(199004)(6506007)(53546011)(6486002)(52116002)(316002)(15650500001)(956004)(31696002)(81156014)(2616005)(8676002)(81166006)(8936002)(66574012)(86362001)(6636002)(186003)(26005)(16526019)(5660300002)(66556008)(2906002)(66476007)(31686004)(66946007)(36756003)(30864003)(478600001)(6512007); DIR:OUT; SFP:1101; SCL:1; SRVR:MN2PR12MB3373; H:MN2PR12MB3935.namprd12.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: XCcUgX5QrlxLsORZoiKpxaC81PnYvX5FHFYTkKZHVPnuNJtvf9c0ua1dFHWXVruHzQdXx5uaMhOqpvnivOHP5ZI1NBRh9gK7SHJv+/CFszbyLYbfrOZHROk7SdjWoPYJCCkmR/WWHwyZedvS4ZC+7AIPIqVY89dRU1vQh53UR/bqXhiAPernnM8hOakbj+gtyyLjgyKA/tK/y4WsgAbRsGVDFi1MC+flE/q4Q91siq+/h/DtGbyiI/2toWwlH2n75/mNZPNxqrigXkWDlzMV6YXYGxf7ZUnkPyl9bFwWOo5F0fvZa/TK4jtgF4ChONvBCLaC1nimZuogvbktCeFoTL3UJB4/aCHB9BXgwl/Y4V8MxTh0Sc2B2HHSBz9ITiXgKLXPA8M3XTJ+eehh5Y3z/wECLSW3pUk0+YNmfWfjjYw0rNdhxdwtbWGBjfLD5X7u X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: ca741889-a62f-4b68-daa4-08d7a018324d X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jan 2020 15:23:28.2605 (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: 7GqTfH8n+M3ymlQnhkIR4wQlUKUSBcBbnDJNLdPfdViO7Cf6/OaCCen8dtC5o2D45lAKy65LvTBI59s69kVfOQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB3373 X-BeenThere: amd-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Discussion list for AMD gfx 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: amd-gfx-bounces@lists.freedesktop.org Sender: "amd-gfx" SSd2ZSB0ZXN0ZWQgcGlnbGl0LCB1bmlnaW5lLWhlYXZlbiwgYW5kIHZpZGVvIHBsYXliYWNrIG9u IG15IApuYXZpMTAvcmF2ZW4xIHN5c3RlbS7CoCBBbGwgZmluZSAoYXMgZmFyIGFzIHRoZSBrZXJu ZWwgaXMgY29uY2VybmVkKS7CoCAKWW91IGNhbiBhZGQgbXkKCgpUZXN0ZWQtYnk6IFRvbSBTdCBE ZW5pcyA8dG9tLnN0ZGVuaXNAYW1kLmNvbT4KCgpUb20KCk9uIDIwMjAtMDEtMjMgOTozNSBhLm0u LCBDaHJpc3RpYW4gS8O2bmlnIHdyb3RlOgo+IFRoYXQgaXMgZml4ZWQgYnkgcGF0Y2ggIzIgaW4g dGhpcyBzZXJpZXMuCj4KPiBQYXRjaCAjNCBpcyB0aGVuIHJlLWFwcGx5aW5nIHRoZSBmYXVsdHkg c3luY2hyb25pemF0aW9uIGNsZWFudXAuCj4KPiBSZWdhcmRzLAo+IENocmlzdGlhbi4KPgo+IEFt IDIzLjAxLjIwIHVtIDE1OjI1IHNjaHJpZWIgVG9tIFN0IERlbmlzOgo+PiBPbiB0aGUgdGlwIG9m IGRybS1uZXh0IChhcyBvZiB0aGlzIG1vcm5pbmcpIEkgd2FzIHN0aWxsIGdldHRpbmcKPj4KPj4g W8KgIDk4My44OTEyNjRdIFtkcm06YW1kZ3B1X2dlbV92YV9pb2N0bCBbYW1kZ3B1XV0gKkVSUk9S KiBDb3VsZG4ndCAKPj4gdXBkYXRlIEJPX1ZBICgtMikKPj4KPj4gdHlwZSBlcnJvcnMuwqAgU28g SSdtIGxvb2tpbmcgZm9yIHRoYXQgdG8gc3RvcC7CoCBBdCBsZWFzdCBMTFZNIHdhcyAKPj4gZml4 ZWQgc28gSSBjYW4gcnVuIGEgZnVsbCBydW4gb2YgcGlnbGl0IHdpdGhvdXQgZ2Z4IGhhbmdzLgo+ Pgo+PiBUb20KPj4KPj4gT24gMjAyMC0wMS0yMyA5OjI0IGEubS4sIENocmlzdGlhbiBLw7ZuaWcg d3JvdGU6Cj4+PiBUaGFua3MsIHBsZWFzZSBnaXZlIHRoZW0gYSBmdWxsIHJvdW5kLgo+Pj4KPj4+ IFRvb2sgbWUgYSB3ZWVrIHRvIGZpZ3VyZSBvdXQgdGhhdCB3ZSBhY2NpZGVudGFsbHkgcGFzcyBp biB0aGUgCj4+PiByZXNlcnZhdGlvbiBvYmplY3QgYXMgTlVMTCBmb3IgY2xlYXJlZCBCT3MuCj4+ Pgo+Pj4gVGhhbmtzLAo+Pj4gQ2hyaXN0aWFuLgo+Pj4KPj4+IEFtIDIzLjAxLjIwIHVtIDE1OjIy IHNjaHJpZWIgVG9tIFN0IERlbmlzOgo+Pj4+IEp1c3QgYXBwbGllZCB0aGVzZSBub3csIHRyeWlu ZyB0aGVtIG91dCB3aWxsIHJlcG9ydCBiYWNrIGluIH4yMCBtaW5zLgo+Pj4+Cj4+Pj4gT24gMjAy MC0wMS0yMyA5OjIxIGEubS4sIENocmlzdGlhbiBLw7ZuaWcgd3JvdGU6Cj4+Pj4+IElmIHByb3Zp ZGVkIHdlIG9ubHkgc3luYyB0byB0aGUgQk9zIHJlc2VydmF0aW9uCj4+Pj4+IG9iamVjdCBhbmQg bm8gbG9uZ2VyIHRvIHRoZSByb290IFBELgo+Pj4+Pgo+Pj4+PiB2MjogdXBkYXRlIGNvbW1lbnQs IGNsZWFudXAgYW1kZ3B1X2JvX3N5bmNfd2FpdF9yZXN2Cj4+Pj4+IHYzOiB1c2UgY29ycmVjdCBy ZXNlcnZhdGlvbiBvYmplY3Qgd2hpbGUgY2xlYXJpbmcKPj4+Pj4KPj4+Pj4gU2lnbmVkLW9mZi1i eTogQ2hyaXN0aWFuIEvDtm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQuY29tPgo+Pj4+PiAtLS0K Pj4+Pj4gwqAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X29iamVjdC5jwqAgfCAz NyAKPj4+Pj4gKysrKysrKysrKysrKysrKysrKystLS0tLS0KPj4+Pj4gwqAgZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1X29iamVjdC5owqAgfMKgIDMgKysrCj4+Pj4+IMKgIGRyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9zeW5jLmPCoMKgwqAgfMKgIDcgLS0tLS0KPj4+ Pj4gwqAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZtLmPCoMKgwqDCoMKgIHwg NDEgCj4+Pj4+ICsrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tCj4+Pj4+IMKgIGRyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5owqDCoMKgwqDCoCB8wqAgNCArLS0KPj4+Pj4g wqAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZtX2NwdS5jwqAgfCAyMiArKysr LS0tLS0tLS0tLS0tCj4+Pj4+IMKgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92 bV9zZG1hLmMgfCAxNSArKystLS0tLS0tLQo+Pj4+PiDCoCA3IGZpbGVzIGNoYW5nZWQsIDY3IGlu c2VydGlvbnMoKyksIDYyIGRlbGV0aW9ucygtKQo+Pj4+Pgo+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X29iamVjdC5jIAo+Pj4+PiBiL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuYwo+Pj4+PiBpbmRleCA0NmM3NmUyZTEy ODEuLmM3MGJiZGRhMDc4YyAxMDA2NDQKPj4+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvYW1kZ3B1X29iamVjdC5jCj4+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9vYmplY3QuYwo+Pj4+PiBAQCAtMTQwMywzMCArMTQwMyw1MSBAQCB2b2lkIGFt ZGdwdV9ib19mZW5jZShzdHJ1Y3QgYW1kZ3B1X2JvICpibywgCj4+Pj4+IHN0cnVjdCBkbWFfZmVu Y2UgKmZlbmNlLAo+Pj4+PiDCoCB9Cj4+Pj4+IMKgIMKgIC8qKgo+Pj4+PiAtICogYW1kZ3B1X3N5 bmNfd2FpdF9yZXN2IC0gV2FpdCBmb3IgQk8gcmVzZXJ2YXRpb24gZmVuY2VzCj4+Pj4+ICsgKiBh bWRncHVfYm9fc3luY193YWl0X3Jlc3YgLSBXYWl0IGZvciBCTyByZXNlcnZhdGlvbiBmZW5jZXMK Pj4+Pj4gwqDCoCAqCj4+Pj4+IC0gKiBAYm86IGJ1ZmZlciBvYmplY3QKPj4+Pj4gKyAqIEBhZGV2 OiBhbWRncHUgZGV2aWNlIHBvaW50ZXIKPj4+Pj4gKyAqIEByZXN2OiByZXNlcnZhdGlvbiBvYmpl Y3QgdG8gc3luYyB0bwo+Pj4+PiArICogQHN5bmNfbW9kZTogc3luY2hyb25pemF0aW9uIG1vZGUK Pj4+Pj4gwqDCoCAqIEBvd25lcjogZmVuY2Ugb3duZXIKPj4+Pj4gwqDCoCAqIEBpbnRyOiBXaGV0 aGVyIHRoZSB3YWl0IGlzIGludGVycnVwdGlibGUKPj4+Pj4gwqDCoCAqCj4+Pj4+ICsgKiBFeHRy YWN0IHRoZSBmZW5jZXMgZnJvbSB0aGUgcmVzZXJ2YXRpb24gb2JqZWN0IGFuZCB3YWl0cyBmb3Ig Cj4+Pj4+IHRoZW0gdG8gZmluaXNoLgo+Pj4+PiArICoKPj4+Pj4gwqDCoCAqIFJldHVybnM6Cj4+ Pj4+IMKgwqAgKiAwIG9uIHN1Y2Nlc3MsIGVycm5vIG90aGVyd2lzZS4KPj4+Pj4gwqDCoCAqLwo+ Pj4+PiAtaW50IGFtZGdwdV9ib19zeW5jX3dhaXQoc3RydWN0IGFtZGdwdV9ibyAqYm8sIHZvaWQg Km93bmVyLCBib29sIAo+Pj4+PiBpbnRyKQo+Pj4+PiAraW50IGFtZGdwdV9ib19zeW5jX3dhaXRf cmVzdihzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgc3RydWN0IAo+Pj4+PiBkbWFfcmVzdiAq cmVzdiwKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVudW0gYW1kZ3B1 X3N5bmNfbW9kZSBzeW5jX21vZGUsIHZvaWQgKm93bmVyLAo+Pj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgYm9vbCBpbnRyKQo+Pj4+PiDCoCB7Cj4+Pj4+IC3CoMKgwqAgc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBhbWRncHVfdHRtX2FkZXYoYm8tPnRiby5iZGV2KTsK Pj4+Pj4gwqDCoMKgwqDCoCBzdHJ1Y3QgYW1kZ3B1X3N5bmMgc3luYzsKPj4+Pj4gwqDCoMKgwqDC oCBpbnQgcjsKPj4+Pj4gwqAgwqDCoMKgwqDCoCBhbWRncHVfc3luY19jcmVhdGUoJnN5bmMpOwo+ Pj4+PiAtwqDCoMKgIGFtZGdwdV9zeW5jX3Jlc3YoYWRldiwgJnN5bmMsIGJvLT50Ym8uYmFzZS5y ZXN2LAo+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFNREdQVV9TWU5DX05FX09XTkVS LCBvd25lcik7Cj4+Pj4+IC3CoMKgwqAgciA9IGFtZGdwdV9zeW5jX3dhaXQoJnN5bmMsIGludHIp Owo+Pj4+PiArwqDCoMKgIGFtZGdwdV9zeW5jX3Jlc3YoYWRldiwgJnN5bmMsIHJlc3YsIHN5bmNf bW9kZSwgb3duZXIpOwo+Pj4+PiArwqDCoMKgIHIgPSBhbWRncHVfc3luY193YWl0KCZzeW5jLCB0 cnVlKTsKPj4+Pj4gwqDCoMKgwqDCoCBhbWRncHVfc3luY19mcmVlKCZzeW5jKTsKPj4+Pj4gLQo+ Pj4+PiDCoMKgwqDCoMKgIHJldHVybiByOwo+Pj4+PiDCoCB9Cj4+Pj4+IMKgICsvKioKPj4+Pj4g KyAqIGFtZGdwdV9ib19zeW5jX3dhaXQgLSBXcmFwcGVyIGZvciBhbWRncHVfYm9fc3luY193YWl0 X3Jlc3YKPj4+Pj4gKyAqIEBibzogYnVmZmVyIG9iamVjdCB0byB3YWl0IGZvcgo+Pj4+PiArICog QG93bmVyOiBmZW5jZSBvd25lcgo+Pj4+PiArICogQGludHI6IFdoZXRoZXIgdGhlIHdhaXQgaXMg aW50ZXJydXB0aWJsZQo+Pj4+PiArICoKPj4+Pj4gKyAqIFdyYXBwZXIgdG8gd2FpdCBmb3IgZmVu Y2VzIGluIGEgQk8uCj4+Pj4+ICsgKiBSZXR1cm5zOgo+Pj4+PiArICogMCBvbiBzdWNjZXNzLCBl cnJubyBvdGhlcndpc2UuCj4+Pj4+ICsgKi8KPj4+Pj4gK2ludCBhbWRncHVfYm9fc3luY193YWl0 KHN0cnVjdCBhbWRncHVfYm8gKmJvLCB2b2lkICpvd25lciwgYm9vbCAKPj4+Pj4gaW50cikKPj4+ Pj4gK3sKPj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IGFtZGdwdV90 dG1fYWRldihiby0+dGJvLmJkZXYpOwo+Pj4+PiArCj4+Pj4+ICvCoMKgwqAgcmV0dXJuIGFtZGdw dV9ib19zeW5jX3dhaXRfcmVzdihhZGV2LCBiby0+dGJvLmJhc2UucmVzdiwKPj4+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFNREdQVV9TWU5DX05FX09XTkVSLCBv d25lciwgaW50cik7Cj4+Pj4+ICt9Cj4+Pj4+ICsKPj4+Pj4gwqAgLyoqCj4+Pj4+IMKgwqAgKiBh bWRncHVfYm9fZ3B1X29mZnNldCAtIHJldHVybiBHUFUgb2Zmc2V0IG9mIGJvCj4+Pj4+IMKgwqAg KiBAYm86wqDCoMKgIGFtZGdwdSBvYmplY3QgZm9yIHdoaWNoIHdlIHF1ZXJ5IHRoZSBvZmZzZXQK Pj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmpl Y3QuaCAKPj4+Pj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfb2JqZWN0LmgK Pj4+Pj4gaW5kZXggMmVlYWZjNzdjOWMxLi45NmQ4MDU4ODllOGQgMTAwNjQ0Cj4+Pj4+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuaAo+Pj4+PiArKysgYi9k cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfb2JqZWN0LmgKPj4+Pj4gQEAgLTI4Myw2 ICsyODMsOSBAQCB2b2lkIGFtZGdwdV9ib19yZWxlYXNlX25vdGlmeShzdHJ1Y3QgCj4+Pj4+IHR0 bV9idWZmZXJfb2JqZWN0ICpibyk7Cj4+Pj4+IMKgIGludCBhbWRncHVfYm9fZmF1bHRfcmVzZXJ2 ZV9ub3RpZnkoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibyk7Cj4+Pj4+IMKgIHZvaWQgYW1k Z3B1X2JvX2ZlbmNlKHN0cnVjdCBhbWRncHVfYm8gKmJvLCBzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5j ZSwKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBib29sIHNoYXJlZCk7Cj4+Pj4+ ICtpbnQgYW1kZ3B1X2JvX3N5bmNfd2FpdF9yZXN2KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 LCBzdHJ1Y3QgCj4+Pj4+IGRtYV9yZXN2ICpyZXN2LAo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgZW51bSBhbWRncHVfc3luY19tb2RlIHN5bmNfbW9kZSwgdm9pZCAqb3du ZXIsCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBib29sIGludHIpOwo+ Pj4+PiDCoCBpbnQgYW1kZ3B1X2JvX3N5bmNfd2FpdChzdHJ1Y3QgYW1kZ3B1X2JvICpibywgdm9p ZCAqb3duZXIsIGJvb2wgCj4+Pj4+IGludHIpOwo+Pj4+PiDCoCB1NjQgYW1kZ3B1X2JvX2dwdV9v ZmZzZXQoc3RydWN0IGFtZGdwdV9ibyAqYm8pOwo+Pj4+PiDCoCBpbnQgYW1kZ3B1X2JvX3ZhbGlk YXRlKHN0cnVjdCBhbWRncHVfYm8gKmJvKTsKPj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9zeW5jLmMgCj4+Pj4+IGIvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1X3N5bmMuYwo+Pj4+PiBpbmRleCA5ZjQyMDMyNjc2ZGEuLmI4NjM5MjI1 MzY5NiAxMDA2NDQKPj4+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1 X3N5bmMuYwo+Pj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfc3lu Yy5jCj4+Pj4+IEBAIC0yNDksMTMgKzI0OSw2IEBAIGludCBhbWRncHVfc3luY19yZXN2KHN0cnVj dCBhbWRncHVfZGV2aWNlIAo+Pj4+PiAqYWRldiwgc3RydWN0IGFtZGdwdV9zeW5jICpzeW5jLAo+ Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBvd25lciAhPSBBTURHUFVfRkVOQ0VfT1dO RVJfVU5ERUZJTkVEKQo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsK Pj4+Pj4gwqAgLcKgwqDCoMKgwqDCoMKgIC8qIFZNIHVwZGF0ZXMgb25seSBzeW5jIHdpdGggbW92 ZXMgYnV0IG5vdCB3aXRoIHVzZXIKPj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqAgKiBjb21tYW5kIHN1 Ym1pc3Npb25zIG9yIEtGRCBldmljdGlvbnMgZmVuY2VzCj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKg ICovCj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCBpZiAoZmVuY2Vfb3duZXIgIT0gQU1ER1BVX0ZFTkNF X09XTkVSX1VOREVGSU5FRCAmJgo+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBvd25lciA9 PSBBTURHUFVfRkVOQ0VfT1dORVJfVk0pCj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNv bnRpbnVlOwo+Pj4+PiAtCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBJZ25vcmUgZmVuY2Vz IGRlcGVuZGluZyBvbiB0aGUgc3luYyBtb2RlICovCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBz d2l0Y2ggKG1vZGUpIHsKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGNhc2UgQU1ER1BVX1NZTkNf QUxXQVlTOgo+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1k Z3B1X3ZtLmMgCj4+Pj4+IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZtLmMK Pj4+Pj4gaW5kZXggMGY3OWMxNzExOGJmLi5jMjY4YWExNDM4MWUgMTAwNjQ0Cj4+Pj4+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5jCj4+Pj4+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5jCj4+Pj4+IEBAIC03OTcsNyArNzk3LDcg QEAgc3RhdGljIGludCBhbWRncHVfdm1fY2xlYXJfYm8oc3RydWN0IAo+Pj4+PiBhbWRncHVfZGV2 aWNlICphZGV2LAo+Pj4+PiDCoMKgwqDCoMKgIHBhcmFtcy52bSA9IHZtOwo+Pj4+PiDCoMKgwqDC oMKgIHBhcmFtcy5kaXJlY3QgPSBkaXJlY3Q7Cj4+Pj4+IMKgIC3CoMKgwqAgciA9IHZtLT51cGRh dGVfZnVuY3MtPnByZXBhcmUoJnBhcmFtcywgCj4+Pj4+IEFNREdQVV9GRU5DRV9PV05FUl9LRkQs IE5VTEwpOwo+Pj4+PiArwqDCoMKgIHIgPSB2bS0+dXBkYXRlX2Z1bmNzLT5wcmVwYXJlKCZwYXJh bXMsIE5VTEwsIAo+Pj4+PiBBTURHUFVfU1lOQ19FWFBMSUNJVCk7Cj4+Pj4+IMKgwqDCoMKgwqAg aWYgKHIpCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcjsKPj4+Pj4gwqAgQEAgLTEy OTMsNyArMTI5Myw3IEBAIGludCBhbWRncHVfdm1fdXBkYXRlX3BkZXMoc3RydWN0IAo+Pj4+PiBh bWRncHVfZGV2aWNlICphZGV2LAo+Pj4+PiDCoMKgwqDCoMKgIHBhcmFtcy52bSA9IHZtOwo+Pj4+ PiDCoMKgwqDCoMKgIHBhcmFtcy5kaXJlY3QgPSBkaXJlY3Q7Cj4+Pj4+IMKgIC3CoMKgwqAgciA9 IHZtLT51cGRhdGVfZnVuY3MtPnByZXBhcmUoJnBhcmFtcywgCj4+Pj4+IEFNREdQVV9GRU5DRV9P V05FUl9WTSwgTlVMTCk7Cj4+Pj4+ICvCoMKgwqAgciA9IHZtLT51cGRhdGVfZnVuY3MtPnByZXBh cmUoJnBhcmFtcywgTlVMTCwgCj4+Pj4+IEFNREdQVV9TWU5DX0VYUExJQ0lUKTsKPj4+Pj4gwqDC oMKgwqDCoCBpZiAocikKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByOwo+Pj4+PiDC oCBAQCAtMTU1Miw3ICsxNTUyLDcgQEAgc3RhdGljIGludCBhbWRncHVfdm1fdXBkYXRlX3B0ZXMo c3RydWN0IAo+Pj4+PiBhbWRncHVfdm1fdXBkYXRlX3BhcmFtcyAqcGFyYW1zLAo+Pj4+PiDCoMKg ICogQGFkZXY6IGFtZGdwdV9kZXZpY2UgcG9pbnRlcgo+Pj4+PiDCoMKgICogQHZtOiByZXF1ZXN0 ZWQgdm0KPj4+Pj4gwqDCoCAqIEBkaXJlY3Q6IGRpcmVjdCBzdWJtaXNzaW9uIGluIGEgcGFnZSBm YXVsdAo+Pj4+PiAtICogQGV4Y2x1c2l2ZTogZmVuY2Ugd2UgbmVlZCB0byBzeW5jIHRvCj4+Pj4+ ICsgKiBAcmVzdjogZmVuY2VzIHdlIG5lZWQgdG8gc3luYyB0bwo+Pj4+PiDCoMKgICogQHN0YXJ0 OiBzdGFydCBvZiBtYXBwZWQgcmFuZ2UKPj4+Pj4gwqDCoCAqIEBsYXN0OiBsYXN0IG1hcHBlZCBl bnRyeQo+Pj4+PiDCoMKgICogQGZsYWdzOiBmbGFncyBmb3IgdGhlIGVudHJpZXMKPj4+Pj4gQEAg LTE1NjcsMTQgKzE1NjcsMTQgQEAgc3RhdGljIGludCBhbWRncHVfdm1fdXBkYXRlX3B0ZXMoc3Ry dWN0IAo+Pj4+PiBhbWRncHVfdm1fdXBkYXRlX3BhcmFtcyAqcGFyYW1zLAo+Pj4+PiDCoMKgICov Cj4+Pj4+IMKgIHN0YXRpYyBpbnQgYW1kZ3B1X3ZtX2JvX3VwZGF0ZV9tYXBwaW5nKHN0cnVjdCBh bWRncHVfZGV2aWNlICphZGV2LAo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGFtZGdwdV92bSAqdm0sIGJvb2wgZGlyZWN0LAo+Pj4+ PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRt YV9mZW5jZSAqZXhjbHVzaXZlLAo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgc3RydWN0IGRtYV9yZXN2ICpyZXN2LAo+Pj4+PiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdWludDY0X3Qgc3RhcnQsIHVpbnQ2 NF90IGxhc3QsCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB1aW50NjRfdCBmbGFncywgdWludDY0X3QgYWRkciwKPj4+Pj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRtYV9hZGRyX3QgKnBhZ2VzX2Fk ZHIsCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBzdHJ1Y3QgZG1hX2ZlbmNlICoqZmVuY2UpCj4+Pj4+IMKgIHsKPj4+Pj4gwqDCoMKgwqDCoCBz dHJ1Y3QgYW1kZ3B1X3ZtX3VwZGF0ZV9wYXJhbXMgcGFyYW1zOwo+Pj4+PiAtwqDCoMKgIHZvaWQg Km93bmVyID0gQU1ER1BVX0ZFTkNFX09XTkVSX1ZNOwo+Pj4+PiArwqDCoMKgIGVudW0gYW1kZ3B1 X3N5bmNfbW9kZSBzeW5jX21vZGU7Cj4+Pj4+IMKgwqDCoMKgwqAgaW50IHI7Cj4+Pj4+IMKgIMKg wqDCoMKgwqAgbWVtc2V0KCZwYXJhbXMsIDAsIHNpemVvZihwYXJhbXMpKTsKPj4+Pj4gQEAgLTE1 ODMsOSArMTU4MywxMyBAQCBzdGF0aWMgaW50IAo+Pj4+PiBhbWRncHVfdm1fYm9fdXBkYXRlX21h cHBpbmcoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+Pj4+IMKgwqDCoMKgwqAgcGFyYW1z LmRpcmVjdCA9IGRpcmVjdDsKPj4+Pj4gwqDCoMKgwqDCoCBwYXJhbXMucGFnZXNfYWRkciA9IHBh Z2VzX2FkZHI7Cj4+Pj4+IMKgIC3CoMKgwqAgLyogc3luYyB0byBldmVyeXRoaW5nIGV4Y2VwdCBl dmljdGlvbiBmZW5jZXMgb24gdW5tYXBwaW5nICovCj4+Pj4+ICvCoMKgwqAgLyogSW1wbGljaXRs eSBzeW5jIHRvIGNvbW1hbmQgc3VibWlzc2lvbnMgaW4gdGhlIHNhbWUgVk0gYmVmb3JlCj4+Pj4+ ICvCoMKgwqDCoCAqIHVubWFwcGluZy4gU3luYyB0byBtb3ZpbmcgZmVuY2VzIGJlZm9yZSBtYXBw aW5nLgo+Pj4+PiArwqDCoMKgwqAgKi8KPj4+Pj4gwqDCoMKgwqDCoCBpZiAoIShmbGFncyAmIEFN REdQVV9QVEVfVkFMSUQpKQo+Pj4+PiAtwqDCoMKgwqDCoMKgwqAgb3duZXIgPSBBTURHUFVfRkVO Q0VfT1dORVJfS0ZEOwo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgc3luY19tb2RlID0gQU1ER1BVX1NZ TkNfRVFfT1dORVI7Cj4+Pj4+ICvCoMKgwqAgZWxzZQo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgc3lu Y19tb2RlID0gQU1ER1BVX1NZTkNfRVhQTElDSVQ7Cj4+Pj4+IMKgIMKgwqDCoMKgwqAgYW1kZ3B1 X3ZtX2V2aWN0aW9uX2xvY2sodm0pOwo+Pj4+PiDCoMKgwqDCoMKgIGlmICh2bS0+ZXZpY3Rpbmcp IHsKPj4+Pj4gQEAgLTE1OTMsNyArMTU5Nyw3IEBAIHN0YXRpYyBpbnQgCj4+Pj4+IGFtZGdwdV92 bV9ib191cGRhdGVfbWFwcGluZyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPj4+Pj4gwqDC oMKgwqDCoMKgwqDCoMKgIGdvdG8gZXJyb3JfdW5sb2NrOwo+Pj4+PiDCoMKgwqDCoMKgIH0KPj4+ Pj4gwqAgLcKgwqDCoCByID0gdm0tPnVwZGF0ZV9mdW5jcy0+cHJlcGFyZSgmcGFyYW1zLCBvd25l ciwgZXhjbHVzaXZlKTsKPj4+Pj4gK8KgwqDCoCByID0gdm0tPnVwZGF0ZV9mdW5jcy0+cHJlcGFy ZSgmcGFyYW1zLCByZXN2LCBzeW5jX21vZGUpOwo+Pj4+PiDCoMKgwqDCoMKgIGlmIChyKQo+Pj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBlcnJvcl91bmxvY2s7Cj4+Pj4+IMKgIEBAIC0xNjEy LDcgKzE2MTYsNyBAQCBzdGF0aWMgaW50IAo+Pj4+PiBhbWRncHVfdm1fYm9fdXBkYXRlX21hcHBp bmcoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+Pj4+IMKgwqAgKiBhbWRncHVfdm1fYm9f c3BsaXRfbWFwcGluZyAtIHNwbGl0IGEgbWFwcGluZyBpbnRvIHNtYWxsZXIgY2h1bmtzCj4+Pj4+ IMKgwqAgKgo+Pj4+PiDCoMKgICogQGFkZXY6IGFtZGdwdV9kZXZpY2UgcG9pbnRlcgo+Pj4+PiAt ICogQGV4Y2x1c2l2ZTogZmVuY2Ugd2UgbmVlZCB0byBzeW5jIHRvCj4+Pj4+ICsgKiBAcmVzdjog ZmVuY2VzIHdlIG5lZWQgdG8gc3luYyB0bwo+Pj4+PiDCoMKgICogQHBhZ2VzX2FkZHI6IERNQSBh ZGRyZXNzZXMgdG8gdXNlIGZvciBtYXBwaW5nCj4+Pj4+IMKgwqAgKiBAdm06IHJlcXVlc3RlZCB2 bQo+Pj4+PiDCoMKgICogQG1hcHBpbmc6IG1hcHBlZCByYW5nZSBhbmQgZmxhZ3MgdG8gdXNlIGZv ciB0aGUgdXBkYXRlCj4+Pj4+IEBAIC0xNjI4LDcgKzE2MzIsNyBAQCBzdGF0aWMgaW50IAo+Pj4+ PiBhbWRncHVfdm1fYm9fdXBkYXRlX21hcHBpbmcoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYs Cj4+Pj4+IMKgwqAgKiAwIGZvciBzdWNjZXNzLCAtRUlOVkFMIGZvciBmYWlsdXJlLgo+Pj4+PiDC oMKgICovCj4+Pj4+IMKgIHN0YXRpYyBpbnQgYW1kZ3B1X3ZtX2JvX3NwbGl0X21hcHBpbmcoc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRtYV9mZW5jZSAqZXhjbHVzaXZlLAo+Pj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkbWFfcmVzdiAq cmVzdiwKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBkbWFfYWRkcl90ICpwYWdlc19hZGRyLAo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBhbWRncHVfdm0gKnZtLAo+Pj4+PiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBhbWRncHVfYm9f dmFfbWFwcGluZyAqbWFwcGluZywKPj4+Pj4gQEAgLTE3MDQsNyArMTcwOCw3IEBAIHN0YXRpYyBp bnQgYW1kZ3B1X3ZtX2JvX3NwbGl0X21hcHBpbmcoc3RydWN0IAo+Pj4+PiBhbWRncHVfZGV2aWNl ICphZGV2LAo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+Pj4+PiDCoCDCoMKgwqDCoMKgwqDC oMKgwqAgbGFzdCA9IG1pbigodWludDY0X3QpbWFwcGluZy0+bGFzdCwgc3RhcnQgKyAKPj4+Pj4g bWF4X2VudHJpZXMgLSAxKTsKPj4+Pj4gLcKgwqDCoMKgwqDCoMKgIHIgPSBhbWRncHVfdm1fYm9f dXBkYXRlX21hcHBpbmcoYWRldiwgdm0sIGZhbHNlLCBleGNsdXNpdmUsCj4+Pj4+ICvCoMKgwqDC oMKgwqDCoCByID0gYW1kZ3B1X3ZtX2JvX3VwZGF0ZV9tYXBwaW5nKGFkZXYsIHZtLCBmYWxzZSwg cmVzdiwKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgc3RhcnQsIGxhc3QsIGZsYWdzLCBhZGRyLAo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkbWFfYWRkciwgZmVuY2UpOwo+Pj4+PiDC oMKgwqDCoMKgwqDCoMKgwqAgaWYgKHIpCj4+Pj4+IEBAIC0xNzQzLDcgKzE3NDcsOCBAQCBpbnQg YW1kZ3B1X3ZtX2JvX3VwZGF0ZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAKPj4+Pj4gKmFkZXYsIHN0 cnVjdCBhbWRncHVfYm9fdmEgKmJvX3ZhLAo+Pj4+PiDCoMKgwqDCoMKgIGRtYV9hZGRyX3QgKnBh Z2VzX2FkZHIgPSBOVUxMOwo+Pj4+PiDCoMKgwqDCoMKgIHN0cnVjdCB0dG1fbWVtX3JlZyAqbWVt Owo+Pj4+PiDCoMKgwqDCoMKgIHN0cnVjdCBkcm1fbW1fbm9kZSAqbm9kZXM7Cj4+Pj4+IC3CoMKg wqAgc3RydWN0IGRtYV9mZW5jZSAqZXhjbHVzaXZlLCAqKmxhc3RfdXBkYXRlOwo+Pj4+PiArwqDC oMKgIHN0cnVjdCBkbWFfZmVuY2UgKipsYXN0X3VwZGF0ZTsKPj4+Pj4gK8KgwqDCoCBzdHJ1Y3Qg ZG1hX3Jlc3YgKnJlc3Y7Cj4+Pj4+IMKgwqDCoMKgwqAgdWludDY0X3QgZmxhZ3M7Cj4+Pj4+IMKg wqDCoMKgwqAgc3RydWN0IGFtZGdwdV9kZXZpY2UgKmJvX2FkZXYgPSBhZGV2Owo+Pj4+PiDCoMKg wqDCoMKgIGludCByOwo+Pj4+PiBAQCAtMTc1MSw3ICsxNzU2LDcgQEAgaW50IGFtZGdwdV92bV9i b191cGRhdGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgCj4+Pj4+ICphZGV2LCBzdHJ1Y3QgYW1kZ3B1 X2JvX3ZhICpib192YSwKPj4+Pj4gwqDCoMKgwqDCoCBpZiAoY2xlYXIgfHwgIWJvKSB7Cj4+Pj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCBtZW0gPSBOVUxMOwo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAg bm9kZXMgPSBOVUxMOwo+Pj4+PiAtwqDCoMKgwqDCoMKgwqAgZXhjbHVzaXZlID0gTlVMTDsKPj4+ Pj4gK8KgwqDCoMKgwqDCoMKgIHJlc3YgPSB2bS0+cm9vdC5iYXNlLmJvLT50Ym8uYmFzZS5yZXN2 Owo+Pj4+PiDCoMKgwqDCoMKgIH0gZWxzZSB7Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1 Y3QgdHRtX2RtYV90dCAqdHRtOwo+Pj4+PiDCoCBAQCAtMTc2MSw3ICsxNzY2LDcgQEAgaW50IGFt ZGdwdV92bV9ib191cGRhdGUoc3RydWN0IAo+Pj4+PiBhbWRncHVfZGV2aWNlICphZGV2LCBzdHJ1 Y3QgYW1kZ3B1X2JvX3ZhICpib192YSwKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg dHRtID0gY29udGFpbmVyX29mKGJvLT50Ym8udHRtLCBzdHJ1Y3QgdHRtX2RtYV90dCwgCj4+Pj4+ IHR0bSk7Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBhZ2VzX2FkZHIgPSB0dG0t PmRtYV9hZGRyZXNzOwo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+Pj4+PiAtwqDCoMKgwqDC oMKgwqAgZXhjbHVzaXZlID0gYm8tPnRiby5tb3Zpbmc7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBy ZXN2ID0gYm8tPnRiby5iYXNlLnJlc3Y7Cj4+Pj4+IMKgwqDCoMKgwqAgfQo+Pj4+PiDCoCDCoMKg wqDCoMKgIGlmIChibykgewo+Pj4+PiBAQCAtMTc3NSw3ICsxNzgwLDggQEAgaW50IGFtZGdwdV92 bV9ib191cGRhdGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgCj4+Pj4+ICphZGV2LCBzdHJ1Y3QgYW1k Z3B1X2JvX3ZhICpib192YSwKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGZsYWdzID0gMHgwOwo+ Pj4+PiDCoMKgwqDCoMKgIH0KPj4+Pj4gwqAgLcKgwqDCoCBpZiAoY2xlYXIgfHwgKGJvICYmIGJv LT50Ym8uYmFzZS5yZXN2ID09IAo+Pj4+PiB2bS0+cm9vdC5iYXNlLmJvLT50Ym8uYmFzZS5yZXN2 KSkKPj4+Pj4gK8KgwqDCoCBpZiAoY2xlYXIgfHwgKGJvICYmIGJvLT50Ym8uYmFzZS5yZXN2ID09 Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2bS0+cm9vdC5iYXNlLmJvLT50Ym8u YmFzZS5yZXN2KSkKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGxhc3RfdXBkYXRlID0gJnZtLT5s YXN0X3VwZGF0ZTsKPj4+Pj4gwqDCoMKgwqDCoCBlbHNlCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDC oCBsYXN0X3VwZGF0ZSA9ICZib192YS0+bGFzdF9wdF91cGRhdGU7Cj4+Pj4+IEBAIC0xNzg5LDcg KzE3OTUsNyBAQCBpbnQgYW1kZ3B1X3ZtX2JvX3VwZGF0ZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAK Pj4+Pj4gKmFkZXYsIHN0cnVjdCBhbWRncHVfYm9fdmEgKmJvX3ZhLAo+Pj4+PiDCoMKgwqDCoMKg IH0KPj4+Pj4gwqAgwqDCoMKgwqDCoCBsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hcHBpbmcsICZib192 YS0+aW52YWxpZHMsIGxpc3QpIHsKPj4+Pj4gLcKgwqDCoMKgwqDCoMKgIHIgPSBhbWRncHVfdm1f Ym9fc3BsaXRfbWFwcGluZyhhZGV2LCBleGNsdXNpdmUsIAo+Pj4+PiBwYWdlc19hZGRyLCB2bSwK Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHIgPSBhbWRncHVfdm1fYm9fc3BsaXRfbWFwcGluZyhhZGV2 LCByZXN2LCBwYWdlc19hZGRyLCB2bSwKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbWFwcGluZywgZmxhZ3MsIGJvX2FkZXYsIG5v ZGVzLAo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBsYXN0X3VwZGF0ZSk7Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAocikK Pj4+Pj4gQEAgLTE5ODQsNiArMTk5MCw3IEBAIGludCBhbWRncHVfdm1fY2xlYXJfZnJlZWQoc3Ry dWN0IAo+Pj4+PiBhbWRncHVfZGV2aWNlICphZGV2LAo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgc3RydWN0IGFtZGdwdV92bSAqdm0sCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZG1hX2ZlbmNlICoqZmVuY2UpCj4+Pj4+IMKgIHsKPj4+Pj4g K8KgwqDCoCBzdHJ1Y3QgZG1hX3Jlc3YgKnJlc3YgPSB2bS0+cm9vdC5iYXNlLmJvLT50Ym8uYmFz ZS5yZXN2Owo+Pj4+PiDCoMKgwqDCoMKgIHN0cnVjdCBhbWRncHVfYm9fdmFfbWFwcGluZyAqbWFw cGluZzsKPj4+Pj4gwqDCoMKgwqDCoCB1aW50NjRfdCBpbml0X3B0ZV92YWx1ZSA9IDA7Cj4+Pj4+ IMKgwqDCoMKgwqAgc3RydWN0IGRtYV9mZW5jZSAqZiA9IE5VTEw7Cj4+Pj4+IEBAIC0xOTk4LDcg KzIwMDUsNyBAQCBpbnQgYW1kZ3B1X3ZtX2NsZWFyX2ZyZWVkKHN0cnVjdCAKPj4+Pj4gYW1kZ3B1 X2RldmljZSAqYWRldiwKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbWFwcGluZy0+ c3RhcnQgPCBBTURHUFVfR01DX0hPTEVfU1RBUlQpCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGluaXRfcHRlX3ZhbHVlID0gQU1ER1BVX1BURV9ERUZBVUxUX0FUQzsKPj4+Pj4gwqAg LcKgwqDCoMKgwqDCoMKgIHIgPSBhbWRncHVfdm1fYm9fdXBkYXRlX21hcHBpbmcoYWRldiwgdm0s IGZhbHNlLCBOVUxMLAo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgciA9IGFtZGdwdV92bV9ib191cGRh dGVfbWFwcGluZyhhZGV2LCB2bSwgZmFsc2UsIHJlc3YsCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1hcHBpbmctPnN0YXJ0LCBtYXBwaW5n LT5sYXN0LAo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBpbml0X3B0ZV92YWx1ZSwgMCwgTlVMTCwgJmYpOwo+Pj4+PiDCoMKgwqDCoMKgwqDC oMKgwqAgYW1kZ3B1X3ZtX2ZyZWVfbWFwcGluZyhhZGV2LCB2bSwgbWFwcGluZywgZik7Cj4+Pj4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uaCAKPj4+ Pj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uaAo+Pj4+PiBpbmRleCBj MjFhMzZiZWJjMGMuLmI1NzA1ZmNmYzkzNSAxMDA2NDQKPj4+Pj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZtLmgKPj4+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1X3ZtLmgKPj4+Pj4gQEAgLTIzMCw4ICsyMzAsOCBAQCBzdHJ1Y3QgYW1k Z3B1X3ZtX3VwZGF0ZV9wYXJhbXMgewo+Pj4+PiDCoCDCoCBzdHJ1Y3QgYW1kZ3B1X3ZtX3VwZGF0 ZV9mdW5jcyB7Cj4+Pj4+IMKgwqDCoMKgwqAgaW50ICgqbWFwX3RhYmxlKShzdHJ1Y3QgYW1kZ3B1 X2JvICpibyk7Cj4+Pj4+IC3CoMKgwqAgaW50ICgqcHJlcGFyZSkoc3RydWN0IGFtZGdwdV92bV91 cGRhdGVfcGFyYW1zICpwLCB2b2lkICogb3duZXIsCj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHN0cnVjdCBkbWFfZmVuY2UgKmV4Y2x1c2l2ZSk7Cj4+Pj4+ICvCoMKgwqAgaW50 ICgqcHJlcGFyZSkoc3RydWN0IGFtZGdwdV92bV91cGRhdGVfcGFyYW1zICpwLCBzdHJ1Y3QgCj4+ Pj4+IGRtYV9yZXN2ICpyZXN2LAo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBl bnVtIGFtZGdwdV9zeW5jX21vZGUgc3luY19tb2RlKTsKPj4+Pj4gwqDCoMKgwqDCoCBpbnQgKCp1 cGRhdGUpKHN0cnVjdCBhbWRncHVfdm1fdXBkYXRlX3BhcmFtcyAqcCwKPj4+Pj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBhbWRncHVfYm8gKmJvLCB1aW50NjRfdCBwZSwg dWludDY0X3QgYWRkciwKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuc2ln bmVkIGNvdW50LCB1aW50MzJfdCBpbmNyLCB1aW50NjRfdCBmbGFncyk7Cj4+Pj4+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm1fY3B1LmMgCj4+Pj4+IGIv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZtX2NwdS5jCj4+Pj4+IGluZGV4IDY4 YjAxM2JlMzgzNy4uZTM4NTE2MzA0MDcwIDEwMDY0NAo+Pj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGdwdS9hbWRncHVfdm1fY3B1LmMKPj4+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X3ZtX2NwdS5jCj4+Pj4+IEBAIC00NCwyNiArNDQsMTQgQEAgc3Rh dGljIGludCBhbWRncHVfdm1fY3B1X21hcF90YWJsZShzdHJ1Y3QgCj4+Pj4+IGFtZGdwdV9ibyAq dGFibGUpCj4+Pj4+IMKgwqAgKiBSZXR1cm5zOgo+Pj4+PiDCoMKgICogTmVnYXRpdiBlcnJubywg MCBmb3Igc3VjY2Vzcy4KPj4+Pj4gwqDCoCAqLwo+Pj4+PiAtc3RhdGljIGludCBhbWRncHVfdm1f Y3B1X3ByZXBhcmUoc3RydWN0IGFtZGdwdV92bV91cGRhdGVfcGFyYW1zIAo+Pj4+PiAqcCwgdm9p ZCAqb3duZXIsCj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3Qg ZG1hX2ZlbmNlICpleGNsdXNpdmUpCj4+Pj4+ICtzdGF0aWMgaW50IGFtZGdwdV92bV9jcHVfcHJl cGFyZShzdHJ1Y3QgYW1kZ3B1X3ZtX3VwZGF0ZV9wYXJhbXMgKnAsCj4+Pj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZG1hX3Jlc3YgKnJlc3YsCj4+Pj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbnVtIGFtZGdwdV9zeW5jX21vZGUgc3luY19t b2RlKQo+Pj4+PiDCoCB7Cj4+Pj4+IC3CoMKgwqAgaW50IHI7Cj4+Pj4+IC0KPj4+Pj4gLcKgwqDC oCAvKiBXYWl0IGZvciBhbnkgQk8gbW92ZSB0byBiZSBjb21wbGV0ZWQgKi8KPj4+Pj4gLcKgwqDC oCBpZiAoZXhjbHVzaXZlKSB7Cj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCByID0gZG1hX2ZlbmNlX3dh aXQoZXhjbHVzaXZlLCB0cnVlKTsKPj4+Pj4gLcKgwqDCoMKgwqDCoMKgIGlmICh1bmxpa2VseShy KSkKPj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHI7Cj4+Pj4+IC3CoMKgwqAg fQo+Pj4+PiAtCj4+Pj4+IC3CoMKgwqAgLyogRG9uJ3Qgd2FpdCBmb3Igc3VibWlzc2lvbnMgZHVy aW5nIHBhZ2UgZmF1bHQgKi8KPj4+Pj4gLcKgwqDCoCBpZiAocC0+ZGlyZWN0KQo+Pj4+PiArwqDC oMKgIGlmICghcmVzdikKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAwOwo+Pj4+PiDC oCAtwqDCoMKgIC8qIFdhaXQgZm9yIFBUIEJPcyB0byBiZSBpZGxlLiBQVHMgc2hhcmUgdGhlIHNh bWUgcmVzdi4gb2JqZWN0Cj4+Pj4+IC3CoMKgwqDCoCAqIGFzIHRoZSByb290IFBEIEJPCj4+Pj4+ IC3CoMKgwqDCoCAqLwo+Pj4+PiAtwqDCoMKgIHJldHVybiBhbWRncHVfYm9fc3luY193YWl0KHAt PnZtLT5yb290LmJhc2UuYm8sIG93bmVyLCB0cnVlKTsKPj4+Pj4gK8KgwqDCoCByZXR1cm4gYW1k Z3B1X2JvX3N5bmNfd2FpdF9yZXN2KHAtPmFkZXYsIHJlc3YsIHN5bmNfbW9kZSwgCj4+Pj4+IHAt PnZtLCB0cnVlKTsKPj4+Pj4gwqAgfQo+Pj4+PiDCoCDCoCAvKioKPj4+Pj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bV9zZG1hLmMgCj4+Pj4+IGIvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZtX3NkbWEuYwo+Pj4+PiBpbmRleCBhYjY0 ODE3NTE3NjMuLjRjYzc4ODFmNDM4YyAxMDA2NDQKPj4+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X3ZtX3NkbWEuYwo+Pj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9hbWRncHVfdm1fc2RtYS5jCj4+Pj4+IEBAIC01OCw5ICs1OCw5IEBAIHN0YXRp YyBpbnQgYW1kZ3B1X3ZtX3NkbWFfbWFwX3RhYmxlKHN0cnVjdCAKPj4+Pj4gYW1kZ3B1X2JvICp0 YWJsZSkKPj4+Pj4gwqDCoCAqIE5lZ2F0aXYgZXJybm8sIDAgZm9yIHN1Y2Nlc3MuCj4+Pj4+IMKg wqAgKi8KPj4+Pj4gwqAgc3RhdGljIGludCBhbWRncHVfdm1fc2RtYV9wcmVwYXJlKHN0cnVjdCBh bWRncHVfdm1fdXBkYXRlX3BhcmFtcyAKPj4+Pj4gKnAsCj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHZvaWQgKm93bmVyLCBzdHJ1Y3QgZG1hX2ZlbmNlICpleGNsdXNp dmUpCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkbWFf cmVzdiAqcmVzdiwKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZW51 bSBhbWRncHVfc3luY19tb2RlIHN5bmNfbW9kZSkKPj4+Pj4gwqAgewo+Pj4+PiAtwqDCoMKgIHN0 cnVjdCBhbWRncHVfYm8gKnJvb3QgPSBwLT52bS0+cm9vdC5iYXNlLmJvOwo+Pj4+PiDCoMKgwqDC oMKgIHVuc2lnbmVkIGludCBuZHcgPSBBTURHUFVfVk1fU0RNQV9NSU5fTlVNX0RXOwo+Pj4+PiDC oMKgwqDCoMKgIGludCByOwo+Pj4+PiDCoCBAQCAtNzAsMTcgKzcwLDEwIEBAIHN0YXRpYyBpbnQg YW1kZ3B1X3ZtX3NkbWFfcHJlcGFyZShzdHJ1Y3QgCj4+Pj4+IGFtZGdwdV92bV91cGRhdGVfcGFy YW1zICpwLAo+Pj4+PiDCoCDCoMKgwqDCoMKgIHAtPm51bV9kd19sZWZ0ID0gbmR3Owo+Pj4+PiDC oCAtwqDCoMKgIC8qIFdhaXQgZm9yIG1vdmVzIHRvIGJlIGNvbXBsZXRlZCAqLwo+Pj4+PiAtwqDC oMKgIHIgPSBhbWRncHVfc3luY19mZW5jZSgmcC0+am9iLT5zeW5jLCBleGNsdXNpdmUsIGZhbHNl KTsKPj4+Pj4gLcKgwqDCoCBpZiAocikKPj4+Pj4gLcKgwqDCoMKgwqDCoMKgIHJldHVybiByOwo+ Pj4+PiAtCj4+Pj4+IC3CoMKgwqAgLyogRG9uJ3Qgd2FpdCBmb3IgYW55IHN1Ym1pc3Npb25zIGR1 cmluZyBwYWdlIGZhdWx0IGhhbmRsaW5nICovCj4+Pj4+IC3CoMKgwqAgaWYgKHAtPmRpcmVjdCkK Pj4+Pj4gK8KgwqDCoCBpZiAoIXJlc3YpCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4g MDsKPj4+Pj4gwqAgLcKgwqDCoCByZXR1cm4gYW1kZ3B1X3N5bmNfcmVzdihwLT5hZGV2LCAmcC0+ am9iLT5zeW5jLCAKPj4+Pj4gcm9vdC0+dGJvLmJhc2UucmVzdiwKPj4+Pj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBBTURHUFVfU1lOQ19ORV9PV05FUiwgb3duZXIpOwo+Pj4+PiAr wqDCoMKgIHJldHVybiBhbWRncHVfc3luY19yZXN2KHAtPmFkZXYsICZwLT5qb2ItPnN5bmMsIHJl c3YsIAo+Pj4+PiBzeW5jX21vZGUsIHAtPnZtKTsKPj4+Pj4gwqAgfQo+Pj4+PiDCoCDCoCAvKioK Pj4+Cj4KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYW1k LWdmeCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cg==