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 1E997C433B4 for ; Wed, 12 May 2021 14:01:15 +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 A6FB161403 for ; Wed, 12 May 2021 14:01:14 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A6FB161403 Authentication-Results: mail.kernel.org; dmarc=fail (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 055976E073; Wed, 12 May 2021 14:01:14 +0000 (UTC) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2048.outbound.protection.outlook.com [40.107.237.48]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1510A6E073; Wed, 12 May 2021 14:01:13 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kfLkwHfFta3ucwdZx8/uLjJNn4dVm+4VVcfKCS9XS+3BRhK9rcvCmjgo0I3EQxRg9F04LT4mQ4oXhuNP8H8YSzS2t6m9+01yXBia8I/cj4ihjKNdSL+UnN+Migk1eHO2jb4k5OaB9f4BPVqRMBcu4RVfRGeo6EXvrPEeuIdtQWs0dh+0HUZy2u6lGZgcYAygtqPZNLKTTznZcKaXSzUFxjFanZALFd+dQzWT0ztz2V5ENTqGRaIWDrPZbqgx7pgayHxAT1rFS/Ha1h4TrKgSCoB4VPJRTaT7tXrQT1lGUZd+DaNzc5XIltu1KLZ9OB0qRuVyvVEnNUeeHrcddxLoQA== 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=lZTXtnn0BlCLrC68enKGrhCV7c2XFjBXsRPhg0b0L50=; b=lSlXQrE3Yif45XKRSOi5bkBXkcD5DqBwMvRodEwKdya27EJzKeQL+HXenwNgBXgwy4n8jIgmFOyTuRroszKPzFgKC78c1UHri8OiFA3KCVGL59e+v7x5DaOw+36n3qjWLuD/pWv7hw5ns2Odo3/oroTScj0Hk1elQCy5S2N6rg/c4h88gg4vWflEVKYBC0K8pGHTx3Zj4BHAtR1Xw2iIFdoAzP3fae1hpGniEhghCQELrqlyyLcmGiXOsVFMHUkp2m833SXJ1ZL8iOS26mlVoZxC+fcOecxl+0VgGwJ1t48dDxsn/tsMuEIccYcm+7FPkzkJ6yhosJA9TdOSMrvQmA== 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=lZTXtnn0BlCLrC68enKGrhCV7c2XFjBXsRPhg0b0L50=; b=QfAdb/hjE/GhdiYr8e2Yn+kNteu2H/MhgByKn27NLbvbQ0PTeJmBqmC6/nAPMKdI+dmbQ/y8oHg2+x6XYBIoYcZ14p4rgsnRY5ctcboVwl5g+Mea79K3Jfj0ygIRhXUkOuJ6A8dgm8whcsMk1uuI8WOIoa8D6aA3UHH4gw8XjL4= Authentication-Results: amd.com; dkim=none (message not signed) header.d=none;amd.com; dmarc=none action=none header.from=amd.com; Received: from SN6PR12MB4623.namprd12.prod.outlook.com (2603:10b6:805:e9::17) by SA0PR12MB4448.namprd12.prod.outlook.com (2603:10b6:806:94::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4108.26; Wed, 12 May 2021 14:01:09 +0000 Received: from SN6PR12MB4623.namprd12.prod.outlook.com ([fe80::ad51:8c49:b171:856c]) by SN6PR12MB4623.namprd12.prod.outlook.com ([fe80::ad51:8c49:b171:856c%7]) with mapi id 15.20.4129.026; Wed, 12 May 2021 14:01:09 +0000 Subject: Re: [PATCH v6 10/16] drm/amdgpu: Guard against write accesses after device removal From: Andrey Grodzovsky To: =?UTF-8?Q?Christian_K=c3=b6nig?= , dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-pci@vger.kernel.org, daniel.vetter@ffwll.ch, Harry.Wentland@amd.com References: <20210510163625.407105-1-andrey.grodzovsky@amd.com> <20210510163625.407105-11-andrey.grodzovsky@amd.com> <19ec5ffa-48a7-863d-0b5a-5c2a43d65e81@gmail.com> Message-ID: <8f1bae42-7567-9f7e-d891-8eb92af3e58a@amd.com> Date: Wed, 12 May 2021 10:01:06 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.1 In-Reply-To: Content-Language: en-US X-Originating-IP: [2607:fea8:3edf:49b0:7576:4f76:97d8:1487] X-ClientProxiedBy: YT1PR01CA0066.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:b01:2e::35) To SN6PR12MB4623.namprd12.prod.outlook.com (2603:10b6:805:e9::17) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from [IPv6:2607:fea8:3edf:49b0:7576:4f76:97d8:1487] (2607:fea8:3edf:49b0:7576:4f76:97d8:1487) by YT1PR01CA0066.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:b01:2e::35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4108.30 via Frontend Transport; Wed, 12 May 2021 14:01:08 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 262a235e-695d-4df4-f605-08d9154e64ca X-MS-TrafficTypeDiagnostic: SA0PR12MB4448: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:4303; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 6EGhMuZL4FD5lvgIR0G+vy22dWwBYg3nfOIrQCxlZQ8PmuTj3n7Z1vonft/kXYVcsk7p1SZqsiyby9v8Bekprj/lr+YgzQQNK+FzoOQV8utx/JbcXm5VIqJHSZUwCimWdkJh5L4sTuCW4oD8qYFLMBSQctOWnE/stBw/MWYVJtpkBAdIy4EfeDV8eIlpGl0RWu284/68r0PwBtbpfjrNwv7dWaONEt4Y9wwYcoqg1+tK3NKCF/fupKi+AlrVLw9F0RypAIBDwuSJt+iCfucBcQJlh0sa4iHc+SpfAneX+22rRNdU+15TeofnhWogsQQ8PwnOjEZoYRNiIZt130jRCucWxQNJKZn60ExfX4XCr9AJya9mwEGXh5k555rP0A3DEXqs3HtP+Xh/sYvoV8R1Sny5Z6RT4ZZULcKJEp1qzpDZdPCqrZjE3ExAcvTu4xK3a9+BJgm5WSs0A9RA25hdivPzBRbIAmqiXwYvV6cor82Hs+yp9SylB4nJAPCcCc2zVdQhDo4wQkUetaJmSjRVYKr5pYTK74pHUa/jjIOaYkYlDgVSCdM7zujVawimoEW4b4P42GBwaiQD2NnYPCAZrZZcwgPLRG8U0ZdMjXDUWGoFKDtVVtZdaiychfwbzdMUrPvqRvNyime9qaMIDyGnOJlUK5pfHdv92vzp5B/FzgjFZq5xnF7/7DB0O2NFG4C/ X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SN6PR12MB4623.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(39860400002)(346002)(376002)(396003)(136003)(86362001)(36756003)(478600001)(53546011)(52116002)(83380400001)(6636002)(31686004)(66946007)(66556008)(66476007)(2906002)(44832011)(31696002)(8676002)(2616005)(30864003)(8936002)(66574015)(16526019)(186003)(4326008)(38100700002)(316002)(6486002)(5660300002)(43740500002)(45980500001)(579004); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?K05neVRIM2h0VThUaUNsTks5TThZYUVMQzJWUWxib1hsYVNJVXlIdVBwK01Y?= =?utf-8?B?UUw2ZlZKYmgrUGtkSFRuQnkwUHZlOVVrKzZ6djl0cTViMzNhakdNc0dxeHly?= =?utf-8?B?d0YyNm5zZC9hTEVOOXhPanpXNGpIK08vS3prQVgzTzg4N0xpTmI2UGtLUWVj?= =?utf-8?B?ZjY1L0gvTCtvYktDdk0xZEhLMjF2SDJ0SHh2QmNRRzJpSDdZdkRQcU42Zno5?= =?utf-8?B?aWhlVlhiUGFpbUVFcUZTbmZLWURORVIzVVI0NWpvV0x4L0wyeEc0VGdMdzRy?= =?utf-8?B?REVoM2xzOFJDazdJdGV6b2wxQ1J5WVlzT2dXeWY2YytUZ3JLT3doMHdmVmJO?= =?utf-8?B?WGRrMVI3MC91SFZ5L3o1QzJJTTFBK3l5WDBDeUYwNno2VkhZTGtoemNwUjVj?= =?utf-8?B?NkErM3JmaWJCVXNzM0QxVS9RRURleDliQVZHdFNhdmVRSDFtZENKU2xlVWFU?= =?utf-8?B?eG80K0xhaFcwbU5ycDVGajN4MUUrOUpHMWRLSkVrR0ZldHkzQk9ZVTM5a25u?= =?utf-8?B?TWpPa25pQm44VVFhWE14YWJiZFcyL05MRGFWL3VJVnpGSzNsV21DQitFa1hv?= =?utf-8?B?OHl4dDRmaDVwQTlIUnRaTDRrK0tEZWVJamtQVEt1T3FFV29pczd5aksxeSty?= =?utf-8?B?aC9nMHRHMzJQR1QzSEpWc2FGbHN1R1ZnUkxZVjdYcnNxNHdxaGdqalZjOGlD?= =?utf-8?B?QmxxUnQrQmpXcUc3Y3hSVGo5YXQxTE83MFAySG4zYzdEbnJyVkp0M0kxUUZq?= =?utf-8?B?U20yOENWRnUvejdZVlNCRStza2hlLzR2WUN6Q1RZWURvN1A4MGNOZTFsTWo4?= =?utf-8?B?NmZNR1J5SHJxamtyYlgyY2hzRmhmTi9BdUxLR0xRc2dUbVVpbFNpbmNBTGRx?= =?utf-8?B?amp2MWkzUnZVMUpwd3czTXdudThNSUdxakoxK3YyclcyZnJCbHk3Y2tnWUNz?= =?utf-8?B?WDVOYlpxc3AyZ3VjYkR1ZXZzMWtKeFg4YzFnWVlzOGdEWHJZcllQYmpTR0xE?= =?utf-8?B?UTBVdHEvaytUTU9KamtWeUlHK004OUJjSEFnNVhlZXNhcTZ1ZVE3WGZPSnp0?= =?utf-8?B?Qkc2VnFCRW9kZGJERmlyUjArTCsxdWhpOE44akF3Ui9KOGlQdXc5Y3dYeVVy?= =?utf-8?B?d2Npc0FGWk8xQXdvdXRDSnM3b3VsVXVlNW1TVTBOdTZjTmtvY0R6ZnV5RDkx?= =?utf-8?B?dGdubjk0QkRLWVhlekYwK1h1MUs4SSsrbXVpNkFJSGJIbmRUcmVtaFVWWFpq?= =?utf-8?B?SFZzTWQwQWVITlJUYWNPVHdzOCtDUW1FdEo1d1lkY29JREVQQ3crTG5iSkJW?= =?utf-8?B?YkQwLzJ1c1Fwd21ERXpNaENJZXZCZGdjYUw1NmNIZ0FHSWVlVW0rNitnckQz?= =?utf-8?B?eitzYUd6Q3NIb2Q2ME9VWDJiTXhub1J3K3I4MDArdWw2SDBQbVpYVDJtUjlk?= =?utf-8?B?d2g4aEZjdU5iUklhbG4vSnp3KzkvVmxLNHRNWkRIVDhSdk9NM1g5QTFpSlNp?= =?utf-8?B?QVlUeXIwT21BQlRRVERQR2IxU3haaWJGOFd0NW96TUluWHhBR242NldnOWtM?= =?utf-8?B?OGNNdzZNWHJUM0lBeEppSUFSb1RTZzhLTFBqZ0VndGJ4Y3Z2Z2ZVaC9FeS95?= =?utf-8?B?UFp6MHlwOVZwV2lHSVhpRnNRY2JRd28zR2kvKzBhVGpaZ3ArSytPOWE2bFps?= =?utf-8?B?QkY3RjU1b1hFL2hSamd4di83WkY1clBSNzFGUEdoK0orNXoxaGREUzFHWnls?= =?utf-8?B?aVJzeXBKd0tzZGJ6ckJoMWRseHNyVjlLOUNsdUhDQ0srcWJlaEkzNjdDZktW?= =?utf-8?B?ODRzUzBwY0U1TUNYckVwRlp6RmhaV2xvQ2NFVE44NTY0Sy9GMlB1RWNvZVRz?= =?utf-8?Q?qtgi2tbF77sA0?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 262a235e-695d-4df4-f605-08d9154e64ca X-MS-Exchange-CrossTenant-AuthSource: SN6PR12MB4623.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 May 2021 14:01:09.6258 (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: lJTFDSORkfP/HIHHkBcjytakAL6ZTOKvdgKCR0VcRy4olfzs/TlOa+XuKVgXo236oTWaOoqyIsaruGSi/o0etQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR12MB4448 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: , Cc: Alexander.Deucher@amd.com, gregkh@linuxfoundation.org, ppaalanen@gmail.com, helgaas@kernel.org, Felix.Kuehling@amd.com Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: amd-gfx-bounces@lists.freedesktop.org Sender: "amd-gfx" UGluZyAtIG5lZWQgYSBjb25maXJtYXRpb24gaXQncyBvayB0byBrZWVwIHRoaXMgYXMgYSBzaW5n bGUgcGF0Y2ggZ2l2ZW4KbXkgZXhwbGFuYXRpb24gYmVsbG93LgoKQW5kcmV5CgpPbiAyMDIxLTA1 LTExIDE6NTIgcC5tLiwgQW5kcmV5IEdyb2R6b3Zza3kgd3JvdGU6Cj4gCj4gCj4gT24gMjAyMS0w NS0xMSAyOjUwIGEubS4sIENocmlzdGlhbiBLw7ZuaWcgd3JvdGU6Cj4+IEFtIDEwLjA1LjIxIHVt IDE4OjM2IHNjaHJpZWIgQW5kcmV5IEdyb2R6b3Zza3k6Cj4+PiBUaGlzIHNob3VsZCBwcmV2ZW50 IHdyaXRpbmcgdG8gbWVtb3J5IG9yIElPIHJhbmdlcyBwb3NzaWJseQo+Pj4gYWxyZWFkeSBhbGxv Y2F0ZWQgZm9yIG90aGVyIHVzZXMgYWZ0ZXIgb3VyIGRldmljZSBpcyByZW1vdmVkLgo+Pj4KPj4+ IHY1Ogo+Pj4gUHJvdGVjdCBtb3JlIHBsYWNlcyB3aGVyIG1lbWNvcHlfdG8vZm9ybV9pbyB0YWtl cyBwbGFjZQo+Pj4gUHJvdGVjdCBJQiBzdWJtaXNzaW9ucwo+Pj4KPj4+IHY2OiBTd2l0Y2ggdG8g IWRybV9kZXZfZW50ZXIgaW5zdGVhZCBvZiBzY29waW5nIGVudGlyZSBjb2RlCj4+PiB3aXRoIGJy YWNrZXRzLgo+Pj4KPj4+IFNpZ25lZC1vZmYtYnk6IEFuZHJleSBHcm9kem92c2t5IDxhbmRyZXku Z3JvZHpvdnNreUBhbWQuY29tPgo+Pj4gLS0tCj4+PiDCoCBkcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfZGV2aWNlLmPCoMKgwqAgfCAxMSArKy0KPj4+IMKgIGRyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdV9nbWMuY8KgwqDCoMKgwqDCoCB8wqAgOSArKysKPj4+IMKgIGRy aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9pYi5jwqDCoMKgwqDCoMKgwqAgfCAxNyAr KystLQo+Pj4gwqAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3BzcC5jwqDCoMKg wqDCoMKgIHwgNjMgKysrKysrKysrKystLS0tLS0KPj4+IMKgIGRyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV9wc3AuaMKgwqDCoMKgwqDCoCB8wqAgMiArCj4+PiDCoCBkcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfcmluZy5jwqDCoMKgwqDCoCB8IDcwICsrKysrKysrKysr KysrKysrKysKPj4+IMKgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9yaW5nLmjC oMKgwqDCoMKgIHwgNDkgKystLS0tLS0tLS0tLQo+Pj4gwqAgZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvYW1kZ3B1X3V2ZC5jwqDCoMKgwqDCoMKgIHwgMzEgKysrKystLS0KPj4+IMKgIGRyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92Y2UuY8KgwqDCoMKgwqDCoCB8IDExICsrLQo+ Pj4gwqAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3Zjbi5jwqDCoMKgwqDCoMKg IHwgMjIgKysrKy0tCj4+PiDCoCBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0u Y8KgwqDCoMKgwqDCoMKgIHzCoCA3ICstCj4+PiDCoCBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9wc3BfdjExXzAuY8KgwqDCoMKgwqDCoMKgIHwgNDQgKysrKysrLS0tLS0tCj4+PiDCoCBkcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9wc3BfdjEyXzAuY8KgwqDCoMKgwqDCoMKgIHzCoCA4ICst LQo+Pj4gwqAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvcHNwX3YzXzEuY8KgwqDCoMKgwqDC oMKgwqAgfMKgIDggKy0tCj4+PiDCoCBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS92Y2VfdjRf MC5jwqDCoMKgwqDCoMKgwqDCoCB8IDI2ICsrKystLS0KPj4+IMKgIGRyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L3Zjbl92M18wLmPCoMKgwqDCoMKgwqDCoMKgIHwgMjIgKysrLS0tCj4+PiDCoCAu Li4vZHJtL2FtZC9wbS9wb3dlcnBsYXkvc211bWdyL3NtdTdfc211bWdyLmMgfMKgIDIgKwo+Pj4g wqAgMTcgZmlsZXMgY2hhbmdlZCwgMjU3IGluc2VydGlvbnMoKyksIDE0NSBkZWxldGlvbnMoLSkK Pj4+Cj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2Rl dmljZS5jIAo+Pj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZGV2aWNlLmMK Pj4+IGluZGV4IGEwYmZmNDcxMzY3Mi4uOTRjNDE1MTc2Y2RjIDEwMDY0NAo+Pj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RldmljZS5jCj4+PiArKysgYi9kcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZGV2aWNlLmMKPj4+IEBAIC03MSw2ICs3MSw4IEBA Cj4+PiDCoCAjaW5jbHVkZSA8ZHJtL3Rhc2tfYmFycmllci5oPgo+Pj4gwqAgI2luY2x1ZGUgPGxp bnV4L3BtX3J1bnRpbWUuaD4KPj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9kcnYuaD4KPj4+ICsKPj4+ IMKgIE1PRFVMRV9GSVJNV0FSRSgiYW1kZ3B1L3ZlZ2ExMF9ncHVfaW5mby5iaW4iKTsKPj4+IMKg IE1PRFVMRV9GSVJNV0FSRSgiYW1kZ3B1L3ZlZ2ExMl9ncHVfaW5mby5iaW4iKTsKPj4+IMKgIE1P RFVMRV9GSVJNV0FSRSgiYW1kZ3B1L3JhdmVuX2dwdV9pbmZvLmJpbiIpOwo+Pj4gQEAgLTI4MSw3 ICsyODMsMTAgQEAgdm9pZCBhbWRncHVfZGV2aWNlX3ZyYW1fYWNjZXNzKHN0cnVjdCAKPj4+IGFt ZGdwdV9kZXZpY2UgKmFkZXYsIGxvZmZfdCBwb3MsCj4+PiDCoMKgwqDCoMKgIHVuc2lnbmVkIGxv bmcgZmxhZ3M7Cj4+PiDCoMKgwqDCoMKgIHVpbnQzMl90IGhpID0gfjA7Cj4+PiDCoMKgwqDCoMKg IHVpbnQ2NF90IGxhc3Q7Cj4+PiArwqDCoMKgIGludCBpZHg7Cj4+PiArwqDCoMKgwqAgaWYgKCFk cm1fZGV2X2VudGVyKCZhZGV2LT5kZGV2LCAmaWR4KSkKPj4+ICvCoMKgwqDCoMKgwqDCoMKgIHJl dHVybjsKPj4+IMKgICNpZmRlZiBDT05GSUdfNjRCSVQKPj4+IMKgwqDCoMKgwqAgbGFzdCA9IG1p bihwb3MgKyBzaXplLCBhZGV2LT5nbWMudmlzaWJsZV92cmFtX3NpemUpOwo+Pj4gQEAgLTI5OSw4 ICszMDQsMTAgQEAgdm9pZCBhbWRncHVfZGV2aWNlX3ZyYW1fYWNjZXNzKHN0cnVjdCAKPj4+IGFt ZGdwdV9kZXZpY2UgKmFkZXYsIGxvZmZfdCBwb3MsCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBtZW1jcHlfZnJvbWlvKGJ1ZiwgYWRkciwgY291bnQpOwo+Pj4gwqDCoMKgwqDCoMKgwqDC oMKgIH0KPj4+IC3CoMKgwqDCoMKgwqDCoCBpZiAoY291bnQgPT0gc2l6ZSkKPj4+ICvCoMKgwqDC oMKgwqDCoCBpZiAoY291bnQgPT0gc2l6ZSkgewo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg ZHJtX2Rldl9leGl0KGlkeCk7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm47 Cj4+PiArwqDCoMKgwqDCoMKgwqAgfQo+Pgo+PiBNYXliZSB1c2UgYSBnb3RvIGluc3RlYWQsIGJ1 dCByZWFsbHkganVzdCBhIG5pdCBwaWNrLgo+Pgo+Pgo+Pgo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKg IHBvcyArPSBjb3VudDsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBidWYgKz0gY291bnQgLyA0Owo+ Pj4gQEAgLTMyMyw2ICszMzAsOCBAQCB2b2lkIGFtZGdwdV9kZXZpY2VfdnJhbV9hY2Nlc3Moc3Ry dWN0IAo+Pj4gYW1kZ3B1X2RldmljZSAqYWRldiwgbG9mZl90IHBvcywKPj4+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICpidWYrKyA9IFJSRUczMl9OT19LSVEobW1NTV9EQVRBKTsKPj4+IMKg wqDCoMKgwqAgfQo+Pj4gwqDCoMKgwqDCoCBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGV2LT5t bWlvX2lkeF9sb2NrLCBmbGFncyk7Cj4+PiArCj4+PiArwqDCoMKgIGRybV9kZXZfZXhpdChpZHgp Owo+Pj4gwqAgfQo+Pj4gwqAgLyoKPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1k L2FtZGdwdS9hbWRncHVfZ21jLmMgCj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV9nbWMuYwo+Pj4gaW5kZXggNGQzMjIzM2NkZTkyLi4wNGJhNWVlZjFlODggMTAwNjQ0Cj4+ PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ21jLmMKPj4+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nbWMuYwo+Pj4gQEAgLTMxLDYgKzMx LDggQEAKPj4+IMKgICNpbmNsdWRlICJhbWRncHVfcmFzLmgiCj4+PiDCoCAjaW5jbHVkZSAiYW1k Z3B1X3hnbWkuaCIKPj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9kcnYuaD4KPj4+ICsKPj4+IMKgIC8q Kgo+Pj4gwqDCoCAqIGFtZGdwdV9nbWNfcGRiMF9hbGxvYyAtIGFsbG9jYXRlIHZyYW0gZm9yIHBk YjAKPj4+IMKgwqAgKgo+Pj4gQEAgLTE1MSw2ICsxNTMsMTAgQEAgaW50IGFtZGdwdV9nbWNfc2V0 X3B0ZV9wZGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgCj4+PiAqYWRldiwgdm9pZCAqY3B1X3B0X2Fk ZHIsCj4+PiDCoCB7Cj4+PiDCoMKgwqDCoMKgIHZvaWQgX19pb21lbSAqcHRyID0gKHZvaWQgKilj cHVfcHRfYWRkcjsKPj4+IMKgwqDCoMKgwqAgdWludDY0X3QgdmFsdWU7Cj4+PiArwqDCoMKgIGlu dCBpZHg7Cj4+PiArCj4+PiArwqDCoMKgIGlmICghZHJtX2Rldl9lbnRlcigmYWRldi0+ZGRldiwg JmlkeCkpCj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4+PiDCoMKgwqDCoMKgIC8qCj4+ PiDCoMKgwqDCoMKgwqAgKiBUaGUgZm9sbG93aW5nIGlzIGZvciBQVEUgb25seS4gR0FSVCBkb2Vz IG5vdCBoYXZlIFBERXMuCj4+PiBAQCAtMTU4LDYgKzE2NCw5IEBAIGludCBhbWRncHVfZ21jX3Nl dF9wdGVfcGRlKHN0cnVjdCBhbWRncHVfZGV2aWNlIAo+Pj4gKmFkZXYsIHZvaWQgKmNwdV9wdF9h ZGRyLAo+Pj4gwqDCoMKgwqDCoCB2YWx1ZSA9IGFkZHIgJiAweDAwMDBGRkZGRkZGRkYwMDBVTEw7 Cj4+PiDCoMKgwqDCoMKgIHZhbHVlIHw9IGZsYWdzOwo+Pj4gwqDCoMKgwqDCoCB3cml0ZXEodmFs dWUsIHB0ciArIChncHVfcGFnZV9pZHggKiA4KSk7Cj4+PiArCj4+PiArwqDCoMKgIGRybV9kZXZf ZXhpdChpZHgpOwo+Pj4gKwo+Pj4gwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4+IMKgIH0KPj4+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfaWIuYyAKPj4+IGIv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2liLmMKPj4+IGluZGV4IDE0OGEzYjQ4 MWIxMi4uNjJmY2JkNDQ2YzcxIDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvYW1kZ3B1X2liLmMKPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV9pYi5jCj4+PiBAQCAtMzAsNiArMzAsNyBAQAo+Pj4gwqAgI2luY2x1ZGUgPGxpbnV4L3Ns YWIuaD4KPj4+IMKgICNpbmNsdWRlIDxkcm0vYW1kZ3B1X2RybS5oPgo+Pj4gKyNpbmNsdWRlIDxk cm0vZHJtX2Rydi5oPgo+Pj4gwqAgI2luY2x1ZGUgImFtZGdwdS5oIgo+Pj4gwqAgI2luY2x1ZGUg ImF0b20uaCIKPj4+IEBAIC0xMzcsNyArMTM4LDcgQEAgaW50IGFtZGdwdV9pYl9zY2hlZHVsZShz dHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcsIAo+Pj4gdW5zaWduZWQgbnVtX2licywKPj4+IMKgwqDC oMKgwqAgYm9vbCBzZWN1cmU7Cj4+PiDCoMKgwqDCoMKgIHVuc2lnbmVkIGk7Cj4+PiAtwqDCoMKg IGludCByID0gMDsKPj4+ICvCoMKgwqAgaW50IGlkeCwgciA9IDA7Cj4+PiDCoMKgwqDCoMKgIGJv b2wgbmVlZF9waXBlX3N5bmMgPSBmYWxzZTsKPj4+IMKgwqDCoMKgwqAgaWYgKG51bV9pYnMgPT0g MCkKPj4+IEBAIC0xNjksMTMgKzE3MCwxNiBAQCBpbnQgYW1kZ3B1X2liX3NjaGVkdWxlKHN0cnVj dCBhbWRncHVfcmluZyAKPj4+ICpyaW5nLCB1bnNpZ25lZCBudW1faWJzLAo+Pj4gwqDCoMKgwqDC oMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+Pj4gwqDCoMKgwqDCoCB9Cj4+PiArwqDCoMKgIGlm ICghZHJtX2Rldl9lbnRlcigmYWRldi0+ZGRldiwgJmlkeCkpCj4+PiArwqDCoMKgwqDCoMKgwqAg cmV0dXJuIC1FTk9ERVY7Cj4+PiArCj4+PiDCoMKgwqDCoMKgIGFsbG9jX3NpemUgPSByaW5nLT5m dW5jcy0+ZW1pdF9mcmFtZV9zaXplICsgbnVtX2licyAqCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAg cmluZy0+ZnVuY3MtPmVtaXRfaWJfc2l6ZTsKPj4+IMKgwqDCoMKgwqAgciA9IGFtZGdwdV9yaW5n X2FsbG9jKHJpbmcsIGFsbG9jX3NpemUpOwo+Pj4gwqDCoMKgwqDCoCBpZiAocikgewo+Pj4gwqDC oMKgwqDCoMKgwqDCoMKgIGRldl9lcnIoYWRldi0+ZGV2LCAic2NoZWR1bGluZyBJQiBmYWlsZWQg KCVkKS5cbiIsIHIpOwo+Pj4gLcKgwqDCoMKgwqDCoMKgIHJldHVybiByOwo+Pj4gK8KgwqDCoMKg wqDCoMKgIGdvdG8gZXhpdDsKPj4+IMKgwqDCoMKgwqAgfQo+Pj4gwqDCoMKgwqDCoCBuZWVkX2N0 eF9zd2l0Y2ggPSByaW5nLT5jdXJyZW50X2N0eCAhPSBmZW5jZV9jdHg7Cj4+PiBAQCAtMjA1LDcg KzIwOSw3IEBAIGludCBhbWRncHVfaWJfc2NoZWR1bGUoc3RydWN0IGFtZGdwdV9yaW5nICpyaW5n LCAKPj4+IHVuc2lnbmVkIG51bV9pYnMsCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgciA9IGFtZGdw dV92bV9mbHVzaChyaW5nLCBqb2IsIG5lZWRfcGlwZV9zeW5jKTsKPj4+IMKgwqDCoMKgwqDCoMKg wqDCoCBpZiAocikgewo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYW1kZ3B1X3Jpbmdf dW5kbyhyaW5nKTsKPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByOwo+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBleGl0Owo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIH0K Pj4+IMKgwqDCoMKgwqAgfQo+Pj4gQEAgLTI4Niw3ICsyOTAsNyBAQCBpbnQgYW1kZ3B1X2liX3Nj aGVkdWxlKHN0cnVjdCBhbWRncHVfcmluZyAqcmluZywgCj4+PiB1bnNpZ25lZCBudW1faWJzLAo+ Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChqb2IgJiYgam9iLT52bWlkKQo+Pj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgYW1kZ3B1X3ZtaWRfcmVzZXQoYWRldiwgcmluZy0+ZnVuY3MtPnZt aHViLCBqb2ItPnZtaWQpOwo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGFtZGdwdV9yaW5nX3VuZG8o cmluZyk7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHI7Cj4+PiArwqDCoMKgwqDCoMKgwqAg Z290byBleGl0Owo+Pj4gwqDCoMKgwqDCoCB9Cj4+PiDCoMKgwqDCoMKgIGlmIChyaW5nLT5mdW5j cy0+aW5zZXJ0X2VuZCkKPj4+IEBAIC0zMDQsNyArMzA4LDEwIEBAIGludCBhbWRncHVfaWJfc2No ZWR1bGUoc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nLCAKPj4+IHVuc2lnbmVkIG51bV9pYnMsCj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmluZy0+ZnVuY3MtPmVtaXRfd2F2ZV9saW1pdChyaW5nLCBm YWxzZSk7Cj4+PiDCoMKgwqDCoMKgIGFtZGdwdV9yaW5nX2NvbW1pdChyaW5nKTsKPj4+IC3CoMKg wqAgcmV0dXJuIDA7Cj4+PiArCj4+PiArZXhpdDoKPj4+ICvCoMKgwqAgZHJtX2Rldl9leGl0KGlk eCk7Cj4+PiArwqDCoMKgIHJldHVybiByOwo+Pj4gwqAgfQo+Pj4gwqAgLyoqCj4+PiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3BzcC5jIAo+Pj4gYi9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfcHNwLmMKPj4+IGluZGV4IDllNzY5Y2Y2MDk1 Yi4uYmI2YWZlZTYxNjY2IDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X3BzcC5jCj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRn cHVfcHNwLmMKPj4+IEBAIC0yNSw2ICsyNSw3IEBACj4+PiDCoCAjaW5jbHVkZSA8bGludXgvZmly bXdhcmUuaD4KPj4+IMKgICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgo+Pj4gKyNpbmNs dWRlIDxkcm0vZHJtX2Rydi5oPgo+Pj4gwqAgI2luY2x1ZGUgImFtZGdwdS5oIgo+Pj4gwqAgI2lu Y2x1ZGUgImFtZGdwdV9wc3AuaCIKPj4+IEBAIC0zOSw2ICs0MCw4IEBACj4+PiDCoCAjaW5jbHVk ZSAiYW1kZ3B1X3Jhcy5oIgo+Pj4gwqAgI2luY2x1ZGUgImFtZGdwdV9zZWN1cmVkaXNwbGF5Lmgi Cj4+PiArI2luY2x1ZGUgPGRybS9kcm1fZHJ2Lmg+Cj4+PiArCj4+PiDCoCBzdGF0aWMgaW50IHBz cF9zeXNmc19pbml0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KTsKPj4+IMKgIHN0YXRpYyB2 b2lkIHBzcF9zeXNmc19maW5pKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KTsKPj4+IEBAIC0y NTMsNyArMjU2LDcgQEAgcHNwX2NtZF9zdWJtaXRfYnVmKHN0cnVjdCBwc3BfY29udGV4dCAqcHNw LAo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBwc3BfZ2Z4X2NtZF9yZXNwICpj bWQsIHVpbnQ2NF90IGZlbmNlX21jX2FkZHIpCj4+PiDCoCB7Cj4+PiDCoMKgwqDCoMKgIGludCBy ZXQ7Cj4+PiAtwqDCoMKgIGludCBpbmRleDsKPj4+ICvCoMKgwqAgaW50IGluZGV4LCBpZHg7Cj4+ PiDCoMKgwqDCoMKgIGludCB0aW1lb3V0ID0gMjAwMDA7Cj4+PiDCoMKgwqDCoMKgIGJvb2wgcmFz X2ludHIgPSBmYWxzZTsKPj4+IMKgwqDCoMKgwqAgYm9vbCBza2lwX3Vuc3VwcG9ydCA9IGZhbHNl Owo+Pj4gQEAgLTI2MSw2ICsyNjQsOSBAQCBwc3BfY21kX3N1Ym1pdF9idWYoc3RydWN0IHBzcF9j b250ZXh0ICpwc3AsCj4+PiDCoMKgwqDCoMKgIGlmIChwc3AtPmFkZXYtPmluX3BjaV9lcnJfcmVj b3ZlcnkpCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4+PiArwqDCoMKgIGlmICgh ZHJtX2Rldl9lbnRlcigmcHNwLT5hZGV2LT5kZGV2LCAmaWR4KSkKPj4+ICvCoMKgwqDCoMKgwqDC oCByZXR1cm4gMDsKPj4+ICsKPj4+IMKgwqDCoMKgwqAgbXV0ZXhfbG9jaygmcHNwLT5tdXRleCk7 Cj4+PiDCoMKgwqDCoMKgIG1lbXNldChwc3AtPmNtZF9idWZfbWVtLCAwLCBQU1BfQ01EX0JVRkZF Ul9TSVpFKTsKPj4+IEBAIC0yNzEsOCArMjc3LDcgQEAgcHNwX2NtZF9zdWJtaXRfYnVmKHN0cnVj dCBwc3BfY29udGV4dCAqcHNwLAo+Pj4gwqDCoMKgwqDCoCByZXQgPSBwc3BfcmluZ19jbWRfc3Vi bWl0KHBzcCwgcHNwLT5jbWRfYnVmX21jX2FkZHIsIAo+Pj4gZmVuY2VfbWNfYWRkciwgaW5kZXgp Owo+Pj4gwqDCoMKgwqDCoCBpZiAocmV0KSB7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgYXRvbWlj X2RlYygmcHNwLT5mZW5jZV92YWx1ZSk7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgbXV0ZXhfdW5sb2Nr KCZwc3AtPm11dGV4KTsKPj4+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+Pj4gK8KgwqDC oMKgwqDCoMKgIGdvdG8gZXhpdDsKPj4+IMKgwqDCoMKgwqAgfQo+Pj4gwqDCoMKgwqDCoCBhbWRn cHVfYXNpY19pbnZhbGlkYXRlX2hkcChwc3AtPmFkZXYsIE5VTEwpOwo+Pj4gQEAgLTMxMiw4ICsz MTcsOCBAQCBwc3BfY21kX3N1Ym1pdF9idWYoc3RydWN0IHBzcF9jb250ZXh0ICpwc3AsCj4+PiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBzcC0+Y21kX2J1Zl9tZW0tPmNtZF9pZCwKPj4+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHNwLT5jbWRfYnVmX21lbS0+cmVzcC5zdGF0 dXMpOwo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGlmICghdGltZW91dCkgewo+Pj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgbXV0ZXhfdW5sb2NrKCZwc3AtPm11dGV4KTsKPj4+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cmV0ID0gLUVJTlZBTDsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gZXhpdDsKPj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+PiDCoMKgwqDCoMKgIH0KPj4+IEBAIC0zMjEsOCArMzI2 LDEwIEBAIHBzcF9jbWRfc3VibWl0X2J1ZihzdHJ1Y3QgcHNwX2NvbnRleHQgKnBzcCwKPj4+IMKg wqDCoMKgwqDCoMKgwqDCoCB1Y29kZS0+dG1yX21jX2FkZHJfbG8gPSBwc3AtPmNtZF9idWZfbWVt LT5yZXNwLmZ3X2FkZHJfbG87Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgdWNvZGUtPnRtcl9tY19h ZGRyX2hpID0gcHNwLT5jbWRfYnVmX21lbS0+cmVzcC5md19hZGRyX2hpOwo+Pj4gwqDCoMKgwqDC oCB9Cj4+PiAtwqDCoMKgIG11dGV4X3VubG9jaygmcHNwLT5tdXRleCk7Cj4+PiArZXhpdDoKPj4+ ICvCoMKgwqAgbXV0ZXhfdW5sb2NrKCZwc3AtPm11dGV4KTsKPj4+ICvCoMKgwqAgZHJtX2Rldl9l eGl0KGlkeCk7Cj4+PiDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+PiDCoCB9Cj4+PiBAQCAtMzU5 LDggKzM2Niw3IEBAIHN0YXRpYyBpbnQgcHNwX2xvYWRfdG9jKHN0cnVjdCBwc3BfY29udGV4dCAq cHNwLAo+Pj4gwqDCoMKgwqDCoCBpZiAoIWNtZCkKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1 cm4gLUVOT01FTTsKPj4+IMKgwqDCoMKgwqAgLyogQ29weSB0b2MgdG8gcHNwIGZpcm13YXJlIHBy aXZhdGUgYnVmZmVyICovCj4+PiAtwqDCoMKgIG1lbXNldChwc3AtPmZ3X3ByaV9idWYsIDAsIFBT UF8xX01FRyk7Cj4+PiAtwqDCoMKgIG1lbWNweShwc3AtPmZ3X3ByaV9idWYsIHBzcC0+dG9jX3N0 YXJ0X2FkZHIsIHBzcC0+dG9jX2Jpbl9zaXplKTsKPj4+ICvCoMKgwqAgcHNwX2NvcHlfZncocHNw LCBwc3AtPnRvY19zdGFydF9hZGRyLCBwc3AtPnRvY19iaW5fc2l6ZSk7Cj4+PiDCoMKgwqDCoMKg IHBzcF9wcmVwX2xvYWRfdG9jX2NtZF9idWYoY21kLCBwc3AtPmZ3X3ByaV9tY19hZGRyLCAKPj4+ IHBzcC0+dG9jX2Jpbl9zaXplKTsKPj4+IEBAIC02MjUsOCArNjMxLDcgQEAgc3RhdGljIGludCBw c3BfYXNkX2xvYWQoc3RydWN0IHBzcF9jb250ZXh0ICpwc3ApCj4+PiDCoMKgwqDCoMKgIGlmICgh Y21kKQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PTUVNOwo+Pj4gLcKgwqDCoCBt ZW1zZXQocHNwLT5md19wcmlfYnVmLCAwLCBQU1BfMV9NRUcpOwo+Pj4gLcKgwqDCoCBtZW1jcHko cHNwLT5md19wcmlfYnVmLCBwc3AtPmFzZF9zdGFydF9hZGRyLCBwc3AtPmFzZF91Y29kZV9zaXpl KTsKPj4+ICvCoMKgwqAgcHNwX2NvcHlfZncocHNwLCBwc3AtPmFzZF9zdGFydF9hZGRyLCBwc3At PmFzZF91Y29kZV9zaXplKTsKPj4+IMKgwqDCoMKgwqAgcHNwX3ByZXBfYXNkX2xvYWRfY21kX2J1 ZihjbWQsIHBzcC0+ZndfcHJpX21jX2FkZHIsCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBwc3AtPmFzZF91Y29kZV9zaXplKTsKPj4+IEBAIC03ODEsOCArNzg2LDcg QEAgc3RhdGljIGludCBwc3BfeGdtaV9sb2FkKHN0cnVjdCBwc3BfY29udGV4dCAqcHNwKQo+Pj4g wqDCoMKgwqDCoCBpZiAoIWNtZCkKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT01F TTsKPj4+IC3CoMKgwqAgbWVtc2V0KHBzcC0+ZndfcHJpX2J1ZiwgMCwgUFNQXzFfTUVHKTsKPj4+ IC3CoMKgwqAgbWVtY3B5KHBzcC0+ZndfcHJpX2J1ZiwgcHNwLT50YV94Z21pX3N0YXJ0X2FkZHIs IAo+Pj4gcHNwLT50YV94Z21pX3Vjb2RlX3NpemUpOwo+Pj4gK8KgwqDCoCBwc3BfY29weV9mdyhw c3AsIHBzcC0+dGFfeGdtaV9zdGFydF9hZGRyLCBwc3AtPnRhX3hnbWlfdWNvZGVfc2l6ZSk7Cj4+ PiDCoMKgwqDCoMKgIHBzcF9wcmVwX3RhX2xvYWRfY21kX2J1ZihjbWQsCj4+PiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHNwLT5md19wcmlfbWNfYWRkciwKPj4+IEBAIC0x MDM4LDggKzEwNDIsNyBAQCBzdGF0aWMgaW50IHBzcF9yYXNfbG9hZChzdHJ1Y3QgcHNwX2NvbnRl eHQgKnBzcCkKPj4+IMKgwqDCoMKgwqAgaWYgKCFjbWQpCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAg cmV0dXJuIC1FTk9NRU07Cj4+PiAtwqDCoMKgIG1lbXNldChwc3AtPmZ3X3ByaV9idWYsIDAsIFBT UF8xX01FRyk7Cj4+PiAtwqDCoMKgIG1lbWNweShwc3AtPmZ3X3ByaV9idWYsIHBzcC0+dGFfcmFz X3N0YXJ0X2FkZHIsIAo+Pj4gcHNwLT50YV9yYXNfdWNvZGVfc2l6ZSk7Cj4+PiArwqDCoMKgIHBz cF9jb3B5X2Z3KHBzcCwgcHNwLT50YV9yYXNfc3RhcnRfYWRkciwgcHNwLT50YV9yYXNfdWNvZGVf c2l6ZSk7Cj4+PiDCoMKgwqDCoMKgIHBzcF9wcmVwX3RhX2xvYWRfY21kX2J1ZihjbWQsCj4+PiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHNwLT5md19wcmlfbWNfYWRkciwK Pj4+IEBAIC0xMjc1LDggKzEyNzgsNyBAQCBzdGF0aWMgaW50IHBzcF9oZGNwX2xvYWQoc3RydWN0 IHBzcF9jb250ZXh0ICpwc3ApCj4+PiDCoMKgwqDCoMKgIGlmICghY21kKQo+Pj4gwqDCoMKgwqDC oMKgwqDCoMKgIHJldHVybiAtRU5PTUVNOwo+Pj4gLcKgwqDCoCBtZW1zZXQocHNwLT5md19wcmlf YnVmLCAwLCBQU1BfMV9NRUcpOwo+Pj4gLcKgwqDCoCBtZW1jcHkocHNwLT5md19wcmlfYnVmLCBw c3AtPnRhX2hkY3Bfc3RhcnRfYWRkciwKPj4+ICvCoMKgwqAgcHNwX2NvcHlfZncocHNwLCBwc3At PnRhX2hkY3Bfc3RhcnRfYWRkciwKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwc3AtPnRh X2hkY3BfdWNvZGVfc2l6ZSk7Cj4+PiDCoMKgwqDCoMKgIHBzcF9wcmVwX3RhX2xvYWRfY21kX2J1 ZihjbWQsCj4+PiBAQCAtMTQyNyw4ICsxNDI5LDcgQEAgc3RhdGljIGludCBwc3BfZHRtX2xvYWQo c3RydWN0IHBzcF9jb250ZXh0ICpwc3ApCj4+PiDCoMKgwqDCoMKgIGlmICghY21kKQo+Pj4gwqDC oMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PTUVNOwo+Pj4gLcKgwqDCoCBtZW1zZXQocHNwLT5m d19wcmlfYnVmLCAwLCBQU1BfMV9NRUcpOwo+Pj4gLcKgwqDCoCBtZW1jcHkocHNwLT5md19wcmlf YnVmLCBwc3AtPnRhX2R0bV9zdGFydF9hZGRyLCAKPj4+IHBzcC0+dGFfZHRtX3Vjb2RlX3NpemUp Owo+Pj4gK8KgwqDCoCBwc3BfY29weV9mdyhwc3AsIHBzcC0+dGFfZHRtX3N0YXJ0X2FkZHIsIHBz cC0+dGFfZHRtX3Vjb2RlX3NpemUpOwo+Pj4gwqDCoMKgwqDCoCBwc3BfcHJlcF90YV9sb2FkX2Nt ZF9idWYoY21kLAo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBzcC0+ ZndfcHJpX21jX2FkZHIsCj4+PiBAQCAtMTU3Myw4ICsxNTc0LDcgQEAgc3RhdGljIGludCBwc3Bf cmFwX2xvYWQoc3RydWN0IHBzcF9jb250ZXh0ICpwc3ApCj4+PiDCoMKgwqDCoMKgIGlmICghY21k KQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PTUVNOwo+Pj4gLcKgwqDCoCBtZW1z ZXQocHNwLT5md19wcmlfYnVmLCAwLCBQU1BfMV9NRUcpOwo+Pj4gLcKgwqDCoCBtZW1jcHkocHNw LT5md19wcmlfYnVmLCBwc3AtPnRhX3JhcF9zdGFydF9hZGRyLCAKPj4+IHBzcC0+dGFfcmFwX3Vj b2RlX3NpemUpOwo+Pj4gK8KgwqDCoCBwc3BfY29weV9mdyhwc3AsIHBzcC0+dGFfcmFwX3N0YXJ0 X2FkZHIsIHBzcC0+dGFfcmFwX3Vjb2RlX3NpemUpOwo+Pj4gwqDCoMKgwqDCoCBwc3BfcHJlcF90 YV9sb2FkX2NtZF9idWYoY21kLAo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHBzcC0+ZndfcHJpX21jX2FkZHIsCj4+PiBAQCAtMzAyMiw3ICszMDIyLDcgQEAgc3RhdGlj IHNzaXplX3QgCj4+PiBwc3BfdXNiY19wZF9md19zeXNmc193cml0ZShzdHJ1Y3QgZGV2aWNlICpk ZXYsCj4+PiDCoMKgwqDCoMKgIHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gZHJtX3RvX2Fk ZXYoZGRldik7Cj4+PiDCoMKgwqDCoMKgIHZvaWQgKmNwdV9hZGRyOwo+Pj4gwqDCoMKgwqDCoCBk bWFfYWRkcl90IGRtYV9hZGRyOwo+Pj4gLcKgwqDCoCBpbnQgcmV0Owo+Pj4gK8KgwqDCoCBpbnQg cmV0LCBpZHg7Cj4+PiDCoMKgwqDCoMKgIGNoYXIgZndfbmFtZVsxMDBdOwo+Pj4gwqDCoMKgwqDC oCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKnVzYmNfcGRfZnc7Cj4+PiBAQCAtMzAzMSw2ICszMDMx LDkgQEAgc3RhdGljIHNzaXplX3QgCj4+PiBwc3BfdXNiY19wZF9md19zeXNmc193cml0ZShzdHJ1 Y3QgZGV2aWNlICpkZXYsCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FQlVTWTsKPj4+ IMKgwqDCoMKgwqAgfQo+Pj4gK8KgwqDCoCBpZiAoIWRybV9kZXZfZW50ZXIoZGRldiwgJmlkeCkp Cj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9ERVY7Cj4+PiArCj4+PiDCoMKgwqDCoMKg IHNucHJpbnRmKGZ3X25hbWUsIHNpemVvZihmd19uYW1lKSwgImFtZGdwdS8lcyIsIGJ1Zik7Cj4+ PiDCoMKgwqDCoMKgIHJldCA9IHJlcXVlc3RfZmlybXdhcmUoJnVzYmNfcGRfZncsIGZ3X25hbWUs IGFkZXYtPmRldik7Cj4+PiDCoMKgwqDCoMKgIGlmIChyZXQpCj4+PiBAQCAtMzA2MiwxNiArMzA2 NSwzMCBAQCBzdGF0aWMgc3NpemVfdCAKPj4+IHBzcF91c2JjX3BkX2Z3X3N5c2ZzX3dyaXRlKHN0 cnVjdCBkZXZpY2UgKmRldiwKPj4+IMKgIHJlbF9idWY6Cj4+PiDCoMKgwqDCoMKgIGRtYV9mcmVl X2NvaGVyZW50KGFkZXYtPmRldiwgdXNiY19wZF9mdy0+c2l6ZSwgY3B1X2FkZHIsIAo+Pj4gZG1h X2FkZHIpOwo+Pj4gwqDCoMKgwqDCoCByZWxlYXNlX2Zpcm13YXJlKHVzYmNfcGRfZncpOwo+Pj4g LQo+Pj4gwqAgZmFpbDoKPj4+IMKgwqDCoMKgwqAgaWYgKHJldCkgewo+Pj4gwqDCoMKgwqDCoMKg wqDCoMKgIERSTV9FUlJPUigiRmFpbGVkIHRvIGxvYWQgVVNCQyBQRCBGVywgZXJyID0gJWQiLCBy ZXQpOwo+Pj4gLcKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+PiArwqDCoMKgwqDCoMKgwqAg Y291bnQgPSByZXQ7Cj4+PiDCoMKgwqDCoMKgIH0KPj4+ICvCoMKgwqAgZHJtX2Rldl9leGl0KGlk eCk7Cj4+PiDCoMKgwqDCoMKgIHJldHVybiBjb3VudDsKPj4+IMKgIH0KPj4+ICt2b2lkIHBzcF9j b3B5X2Z3KHN0cnVjdCBwc3BfY29udGV4dCAqcHNwLCB1aW50OF90ICpzdGFydF9hZGRyLCAKPj4+ IHVpbnQzMl90IGJpbl9zaXplKQo+Pj4gK3sKPj4+ICvCoMKgwqAgaW50IGlkeDsKPj4+ICsKPj4+ ICvCoMKgwqAgaWYgKCFkcm1fZGV2X2VudGVyKCZwc3AtPmFkZXYtPmRkZXYsICZpZHgpKQo+Pj4g K8KgwqDCoMKgwqDCoMKgIHJldHVybjsKPj4+ICsKPj4+ICvCoMKgwqAgbWVtc2V0KHBzcC0+Zndf cHJpX2J1ZiwgMCwgUFNQXzFfTUVHKTsKPj4+ICvCoMKgwqAgbWVtY3B5KHBzcC0+ZndfcHJpX2J1 Ziwgc3RhcnRfYWRkciwgYmluX3NpemUpOwo+Pj4gKwo+Pj4gK8KgwqDCoCBkcm1fZGV2X2V4aXQo aWR4KTsKPj4+ICt9Cj4+PiArCj4+PiArCj4+PiDCoCBzdGF0aWMgREVWSUNFX0FUVFIodXNiY19w ZF9mdywgU19JUlVHTyB8IFNfSVdVU1IsCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHNw X3VzYmNfcGRfZndfc3lzZnNfcmVhZCwKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwc3Bf dXNiY19wZF9md19zeXNmc193cml0ZSk7Cj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X3BzcC5oIAo+Pj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfcHNwLmgKPj4+IGluZGV4IDQ2YTUzMjhlMDBlMC4uMmJmZGMyNzg4MTdmIDEwMDY0 NAo+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3BzcC5oCj4+PiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfcHNwLmgKPj4+IEBAIC00MjMs NCArNDIzLDYgQEAgaW50IHBzcF9nZXRfZndfYXR0ZXN0YXRpb25fcmVjb3Jkc19hZGRyKHN0cnVj dCAKPj4+IHBzcF9jb250ZXh0ICpwc3AsCj4+PiDCoCBpbnQgcHNwX2xvYWRfZndfbGlzdChzdHJ1 Y3QgcHNwX2NvbnRleHQgKnBzcCwKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3Ry dWN0IGFtZGdwdV9maXJtd2FyZV9pbmZvICoqdWNvZGVfbGlzdCwgaW50IAo+Pj4gdWNvZGVfY291 bnQpOwo+Pj4gK3ZvaWQgcHNwX2NvcHlfZncoc3RydWN0IHBzcF9jb250ZXh0ICpwc3AsIHVpbnQ4 X3QgKnN0YXJ0X2FkZHIsIAo+Pj4gdWludDMyX3QgYmluX3NpemUpOwo+Pj4gKwo+Pj4gwqAgI2Vu ZGlmCj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3Jp bmcuYyAKPj4+IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3JpbmcuYwo+Pj4g aW5kZXggNjg4NjI0ZWJlNDIxLi5lMTk4NWJjMzQ0MzYgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfcmluZy5jCj4+PiArKysgYi9kcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGdwdS9hbWRncHVfcmluZy5jCj4+PiBAQCAtMzUsNiArMzUsOCBAQAo+Pj4gwqAg I2luY2x1ZGUgImFtZGdwdS5oIgo+Pj4gwqAgI2luY2x1ZGUgImF0b20uaCIKPj4+ICsjaW5jbHVk ZSA8ZHJtL2RybV9kcnYuaD4KPj4+ICsKPj4+IMKgIC8qCj4+PiDCoMKgICogUmluZ3MKPj4+IMKg wqAgKiBNb3N0IGVuZ2luZXMgb24gdGhlIEdQVSBhcmUgZmVkIHZpYSByaW5nIGJ1ZmZlcnMuwqAg UmluZwo+Pj4gQEAgLTQ2MSwzICs0NjMsNzEgQEAgaW50IGFtZGdwdV9yaW5nX3Rlc3RfaGVscGVy KHN0cnVjdCBhbWRncHVfcmluZyAKPj4+ICpyaW5nKQo+Pj4gwqDCoMKgwqDCoCByaW5nLT5zY2hl ZC5yZWFkeSA9ICFyOwo+Pj4gwqDCoMKgwqDCoCByZXR1cm4gcjsKPj4+IMKgIH0KPj4+ICsKPj4+ ICt2b2lkIGFtZGdwdV9yaW5nX2NsZWFyX3Jpbmcoc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nKQo+ Pj4gK3sKPj4+ICvCoMKgwqAgaW50IGlkeDsKPj4+ICvCoMKgwqAgaW50IGkgPSAwOwo+Pj4gKwo+ Pj4gK8KgwqDCoCBpZiAoIWRybV9kZXZfZW50ZXIoJnJpbmctPmFkZXYtPmRkZXYsICZpZHgpKQo+ Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybjsKPj4+ICsKPj4+ICvCoMKgwqAgd2hpbGUgKGkgPD0g cmluZy0+YnVmX21hc2spCj4+PiArwqDCoMKgwqDCoMKgwqAgcmluZy0+cmluZ1tpKytdID0gcmlu Zy0+ZnVuY3MtPm5vcDsKPj4+ICsKPj4+ICvCoMKgwqAgZHJtX2Rldl9leGl0KGlkeCk7Cj4+PiAr Cj4+PiArfQo+Pj4gKwo+Pj4gK3ZvaWQgYW1kZ3B1X3Jpbmdfd3JpdGUoc3RydWN0IGFtZGdwdV9y aW5nICpyaW5nLCB1aW50MzJfdCB2KQo+Pj4gK3sKPj4+ICvCoMKgwqAgaW50IGlkeDsKPj4+ICsK Pj4+ICvCoMKgwqAgaWYgKCFkcm1fZGV2X2VudGVyKCZyaW5nLT5hZGV2LT5kZGV2LCAmaWR4KSkK Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4+PiArCj4+PiArwqDCoMKgIGlmIChyaW5nLT5j b3VudF9kdyA8PSAwKQo+Pj4gK8KgwqDCoMKgwqDCoMKgIERSTV9FUlJPUigiYW1kZ3B1OiB3cml0 aW5nIG1vcmUgZHdvcmRzIHRvIHRoZSByaW5nIHRoYW4gCj4+PiBleHBlY3RlZCFcbiIpOwo+Pj4g K8KgwqDCoCByaW5nLT5yaW5nW3JpbmctPndwdHIrKyAmIHJpbmctPmJ1Zl9tYXNrXSA9IHY7Cj4+ PiArwqDCoMKgIHJpbmctPndwdHIgJj0gcmluZy0+cHRyX21hc2s7Cj4+PiArwqDCoMKgIHJpbmct PmNvdW50X2R3LS07Cj4+PiArCj4+PiArwqDCoMKgIGRybV9kZXZfZXhpdChpZHgpOwo+Pj4gK30K Pj4+ICsKPj4+ICt2b2lkIGFtZGdwdV9yaW5nX3dyaXRlX211bHRpcGxlKHN0cnVjdCBhbWRncHVf cmluZyAqcmluZywKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB2b2lkICpzcmMsIGludCBjb3VudF9kdykKPj4+ICt7Cj4+PiArwqDCoMKgIHVu c2lnbmVkIG9jY3VwaWVkLCBjaHVuazEsIGNodW5rMjsKPj4+ICvCoMKgwqAgdm9pZCAqZHN0Owo+ Pj4gK8KgwqDCoCBpbnQgaWR4Owo+Pj4gKwo+Pj4gK8KgwqDCoCBpZiAoIWRybV9kZXZfZW50ZXIo JnJpbmctPmFkZXYtPmRkZXYsICZpZHgpKQo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybjsKPj4+ ICsKPj4+ICvCoMKgwqAgaWYgKHVubGlrZWx5KHJpbmctPmNvdW50X2R3IDwgY291bnRfZHcpKQo+ Pj4gK8KgwqDCoMKgwqDCoMKgIERSTV9FUlJPUigiYW1kZ3B1OiB3cml0aW5nIG1vcmUgZHdvcmRz IHRvIHRoZSByaW5nIHRoYW4gCj4+PiBleHBlY3RlZCFcbiIpOwo+Pj4gKwo+Pj4gK8KgwqDCoCBv Y2N1cGllZCA9IHJpbmctPndwdHIgJiByaW5nLT5idWZfbWFzazsKPj4+ICvCoMKgwqAgZHN0ID0g KHZvaWQgKikmcmluZy0+cmluZ1tvY2N1cGllZF07Cj4+PiArwqDCoMKgIGNodW5rMSA9IHJpbmct PmJ1Zl9tYXNrICsgMSAtIG9jY3VwaWVkOwo+Pj4gK8KgwqDCoCBjaHVuazEgPSAoY2h1bmsxID49 IGNvdW50X2R3KSA/IGNvdW50X2R3OiBjaHVuazE7Cj4+PiArwqDCoMKgIGNodW5rMiA9IGNvdW50 X2R3IC0gY2h1bmsxOwo+Pj4gK8KgwqDCoCBjaHVuazEgPDw9IDI7Cj4+PiArwqDCoMKgIGNodW5r MiA8PD0gMjsKPj4+ICsKPj4+ICvCoMKgwqAgaWYgKGNodW5rMSkKPj4+ICvCoMKgwqDCoMKgwqDC oCBtZW1jcHkoZHN0LCBzcmMsIGNodW5rMSk7Cj4+PiArCj4+PiArwqDCoMKgIGlmIChjaHVuazIp IHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBzcmMgKz0gY2h1bmsxOwo+Pj4gK8KgwqDCoMKgwqDCoMKg IGRzdCA9ICh2b2lkICopcmluZy0+cmluZzsKPj4+ICvCoMKgwqDCoMKgwqDCoCBtZW1jcHkoZHN0 LCBzcmMsIGNodW5rMik7Cj4+PiArwqDCoMKgIH0KPj4+ICsKPj4+ICvCoMKgwqAgcmluZy0+d3B0 ciArPSBjb3VudF9kdzsKPj4+ICvCoMKgwqAgcmluZy0+d3B0ciAmPSByaW5nLT5wdHJfbWFzazsK Pj4+ICvCoMKgwqAgcmluZy0+Y291bnRfZHcgLT0gY291bnRfZHc7Cj4+PiArCj4+PiArwqDCoMKg IGRybV9kZXZfZXhpdChpZHgpOwo+Pj4gK30KPj4KPj4gVGhlIHJpbmcgc2hvdWxkIG5ldmVyIHdl IGluIE1NSU8gbWVtb3J5LCBzbyB5b3UgY2FuIGNvbXBsZXRlbHkgZHJvcCAKPj4gdGhhdCBhcyBm YXIgYXMgSSBjYW4gc2VlLgo+IAo+IFllYSwgaXQncyBpbiBhbGwgaW4gR0FSVCwgbWlzc2VkIGl0 IGZvciBzb21lIHJlYXNvbi4uLgo+Pgo+PiBNYXliZSBzcGxpdCB0aGF0IHBhdGNoIGJ5IHVzZSBj YXNlIHNvIHRoYXQgd2UgY2FuIG1vcmUgZWFzaWx5IAo+PiByZXZpZXcvYWNrIGl0Lgo+IAo+IElu IGZhY3QgZXZlcnl0aGluZyBoZXJlIGlzIHRoZSBzYW1lIHVzZSBjYXNlLCBvbmNlIEkgYWRkZWQg dW5tYXAgb2YKPiBhbGwgTU1JTyByYW5nZXMgKGJvdGggcmVnaXN0ZXJzIGFubiBWUkFNKSBpIGdv dCBhIGxvdCBvZiBwYWdlIGZhdWx0cwo+IG9uIGRldmljZSByZW1vdmUgYXJvdW5kIGFueSBtZW1j cHkgdG8gZnJvbSBJTy4gVGhhdCB3aGVyZSBJIHB1dCB0aGUKPiBkcm5fZGV2X2VudGVyL2V4aXQg c2NvcGUuIEFsc28gSSBzZWFyY2hlZCBpbiBjb2RlIGFuZCBwcmVlbWVwdGl2bHkKPiBhZGRlZCBn dWFyZHMgdG8gYW55IG90aGVyIHN1Y2ggcGxhY2UuIEkgZGlkIGRyb3AgYW1kZ3B1X3NjaGVkdWxl X2liCj4gZnJvbSB0aGlzIHBhdGNoIGJvdGggYmVjYXVzZSBpdCBoYWQgZG1hX2ZlbmNlX3dhaXQg aW5zaWRlIGFuZCBzbyB3ZQo+IHdpbGwgdGFrZSBjYXJlIG9mIHRoaXMgb25jZSB3ZSBkZWNpZGUg b24gaG93IHRvIGhhbmRsZSBkbWFfZmVuY2Ugd2FpdHMuCj4gCj4gQW5kcmV5Cj4gCj4+Cj4+IFRo YW5rcywKPj4gQ2hyaXN0aWFuLgo+Pgo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2FtZGdwdV9yaW5nLmggCj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1 L2FtZGdwdV9yaW5nLmgKPj4+IGluZGV4IGU3ZDNkMGRiZGQ5Ni4uYzY3YmM2ZDNkMDM5IDEwMDY0 NAo+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3JpbmcuaAo+Pj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3JpbmcuaAo+Pj4gQEAgLTI5 OSw1MyArMjk5LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAKPj4+IGFtZGdwdV9yaW5nX3NldF9w cmVlbXB0X2NvbmRfZXhlYyhzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcsCj4+PiDCoMKgwqDCoMKg ICpyaW5nLT5jb25kX2V4ZV9jcHVfYWRkciA9IGNvbmRfZXhlYzsKPj4+IMKgIH0KPj4+IC1zdGF0 aWMgaW5saW5lIHZvaWQgYW1kZ3B1X3JpbmdfY2xlYXJfcmluZyhzdHJ1Y3QgYW1kZ3B1X3Jpbmcg KnJpbmcpCj4+PiAtewo+Pj4gLcKgwqDCoCBpbnQgaSA9IDA7Cj4+PiAtwqDCoMKgIHdoaWxlIChp IDw9IHJpbmctPmJ1Zl9tYXNrKQo+Pj4gLcKgwqDCoMKgwqDCoMKgIHJpbmctPnJpbmdbaSsrXSA9 IHJpbmctPmZ1bmNzLT5ub3A7Cj4+PiAtCj4+PiAtfQo+Pj4gLQo+Pj4gLXN0YXRpYyBpbmxpbmUg dm9pZCBhbWRncHVfcmluZ193cml0ZShzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcsIAo+Pj4gdWlu dDMyX3QgdikKPj4+IC17Cj4+PiAtwqDCoMKgIGlmIChyaW5nLT5jb3VudF9kdyA8PSAwKQo+Pj4g LcKgwqDCoMKgwqDCoMKgIERSTV9FUlJPUigiYW1kZ3B1OiB3cml0aW5nIG1vcmUgZHdvcmRzIHRv IHRoZSByaW5nIHRoYW4gCj4+PiBleHBlY3RlZCFcbiIpOwo+Pj4gLcKgwqDCoCByaW5nLT5yaW5n W3JpbmctPndwdHIrKyAmIHJpbmctPmJ1Zl9tYXNrXSA9IHY7Cj4+PiAtwqDCoMKgIHJpbmctPndw dHIgJj0gcmluZy0+cHRyX21hc2s7Cj4+PiAtwqDCoMKgIHJpbmctPmNvdW50X2R3LS07Cj4+PiAt fQo+Pj4gK3ZvaWQgYW1kZ3B1X3JpbmdfY2xlYXJfcmluZyhzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJp bmcpOwo+Pj4gLXN0YXRpYyBpbmxpbmUgdm9pZCBhbWRncHVfcmluZ193cml0ZV9tdWx0aXBsZShz dHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcsCj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdm9pZCAqc3JjLCBpbnQgY291bnRfZHcpCj4+PiAtewo+ Pj4gLcKgwqDCoCB1bnNpZ25lZCBvY2N1cGllZCwgY2h1bmsxLCBjaHVuazI7Cj4+PiAtwqDCoMKg IHZvaWQgKmRzdDsKPj4+IC0KPj4+IC3CoMKgwqAgaWYgKHVubGlrZWx5KHJpbmctPmNvdW50X2R3 IDwgY291bnRfZHcpKQo+Pj4gLcKgwqDCoMKgwqDCoMKgIERSTV9FUlJPUigiYW1kZ3B1OiB3cml0 aW5nIG1vcmUgZHdvcmRzIHRvIHRoZSByaW5nIHRoYW4gCj4+PiBleHBlY3RlZCFcbiIpOwo+Pj4g LQo+Pj4gLcKgwqDCoCBvY2N1cGllZCA9IHJpbmctPndwdHIgJiByaW5nLT5idWZfbWFzazsKPj4+ IC3CoMKgwqAgZHN0ID0gKHZvaWQgKikmcmluZy0+cmluZ1tvY2N1cGllZF07Cj4+PiAtwqDCoMKg IGNodW5rMSA9IHJpbmctPmJ1Zl9tYXNrICsgMSAtIG9jY3VwaWVkOwo+Pj4gLcKgwqDCoCBjaHVu azEgPSAoY2h1bmsxID49IGNvdW50X2R3KSA/IGNvdW50X2R3OiBjaHVuazE7Cj4+PiAtwqDCoMKg IGNodW5rMiA9IGNvdW50X2R3IC0gY2h1bmsxOwo+Pj4gLcKgwqDCoCBjaHVuazEgPDw9IDI7Cj4+ PiAtwqDCoMKgIGNodW5rMiA8PD0gMjsKPj4+ICt2b2lkIGFtZGdwdV9yaW5nX3dyaXRlKHN0cnVj dCBhbWRncHVfcmluZyAqcmluZywgdWludDMyX3Qgdik7Cj4+PiAtwqDCoMKgIGlmIChjaHVuazEp Cj4+PiAtwqDCoMKgwqDCoMKgwqAgbWVtY3B5KGRzdCwgc3JjLCBjaHVuazEpOwo+Pj4gLQo+Pj4g LcKgwqDCoCBpZiAoY2h1bmsyKSB7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgc3JjICs9IGNodW5rMTsK Pj4+IC3CoMKgwqDCoMKgwqDCoCBkc3QgPSAodm9pZCAqKXJpbmctPnJpbmc7Cj4+PiAtwqDCoMKg wqDCoMKgwqAgbWVtY3B5KGRzdCwgc3JjLCBjaHVuazIpOwo+Pj4gLcKgwqDCoCB9Cj4+PiAtCj4+ PiAtwqDCoMKgIHJpbmctPndwdHIgKz0gY291bnRfZHc7Cj4+PiAtwqDCoMKgIHJpbmctPndwdHIg Jj0gcmluZy0+cHRyX21hc2s7Cj4+PiAtwqDCoMKgIHJpbmctPmNvdW50X2R3IC09IGNvdW50X2R3 Owo+Pj4gLX0KPj4+ICt2b2lkIGFtZGdwdV9yaW5nX3dyaXRlX211bHRpcGxlKHN0cnVjdCBhbWRn cHVfcmluZyAqcmluZywKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB2b2lkICpzcmMsIGludCBjb3VudF9kdyk7Cj4+PiDCoCBpbnQgYW1kZ3B1 X3JpbmdfdGVzdF9oZWxwZXIoc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nKTsKPj4+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdXZkLmMgCj4+PiBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV91dmQuYwo+Pj4gaW5kZXggYzZkYmMwODAxNjA0 Li44MmYwNTQyYzc3OTIgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfdXZkLmMKPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdw dV91dmQuYwo+Pj4gQEAgLTMyLDYgKzMyLDcgQEAKPj4+IMKgICNpbmNsdWRlIDxsaW51eC9tb2R1 bGUuaD4KPj4+IMKgICNpbmNsdWRlIDxkcm0vZHJtLmg+Cj4+PiArI2luY2x1ZGUgPGRybS9kcm1f ZHJ2Lmg+Cj4+PiDCoCAjaW5jbHVkZSAiYW1kZ3B1LmgiCj4+PiDCoCAjaW5jbHVkZSAiYW1kZ3B1 X3BtLmgiCj4+PiBAQCAtMzc1LDcgKzM3Niw3IEBAIGludCBhbWRncHVfdXZkX3N1c3BlbmQoc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+PiDCoCB7Cj4+PiDCoMKgwqDCoMKgIHVuc2lnbmVk IHNpemU7Cj4+PiDCoMKgwqDCoMKgIHZvaWQgKnB0cjsKPj4+IC3CoMKgwqAgaW50IGksIGo7Cj4+ PiArwqDCoMKgIGludCBpLCBqLCBpZHg7Cj4+PiDCoMKgwqDCoMKgIGJvb2wgaW5fcmFzX2ludHIg PSBhbWRncHVfcmFzX2ludHJfdHJpZ2dlcmVkKCk7Cj4+PiDCoMKgwqDCoMKgIGNhbmNlbF9kZWxh eWVkX3dvcmtfc3luYygmYWRldi0+dXZkLmlkbGVfd29yayk7Cj4+PiBAQCAtNDAzLDExICs0MDQs MTUgQEAgaW50IGFtZGdwdV91dmRfc3VzcGVuZChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikK Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoIWFkZXYtPnV2ZC5pbnN0W2pdLnNhdmVkX2JvKQo+ Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9NRU07Cj4+PiAtwqDCoMKg wqDCoMKgwqAgLyogcmUtd3JpdGUgMCBzaW5jZSBlcnJfZXZlbnRfYXRodWIgd2lsbCBjb3JydXB0 IFZDUFUgYnVmZmVyICovCj4+PiAtwqDCoMKgwqDCoMKgwqAgaWYgKGluX3Jhc19pbnRyKQo+Pj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbWVtc2V0KGFkZXYtPnV2ZC5pbnN0W2pdLnNhdmVkX2Jv LCAwLCBzaXplKTsKPj4+IC3CoMKgwqDCoMKgwqDCoCBlbHNlCj4+PiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBtZW1jcHlfZnJvbWlvKGFkZXYtPnV2ZC5pbnN0W2pdLnNhdmVkX2JvLCBwdHIsIHNp emUpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChkcm1fZGV2X2VudGVyKCZhZGV2LT5kZGV2LCAm aWR4KSkgewo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogcmUtd3JpdGUgMCBzaW5jZSBl cnJfZXZlbnRfYXRodWIgd2lsbCBjb3JydXB0IFZDUFUgCj4+PiBidWZmZXIgKi8KPj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGlmIChpbl9yYXNfaW50cikKPj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgbWVtc2V0KGFkZXYtPnV2ZC5pbnN0W2pdLnNhdmVkX2JvLCAwLCBzaXpl KTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVsc2UKPj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgbWVtY3B5X2Zyb21pbyhhZGV2LT51dmQuaW5zdFtqXS5zYXZlZF9ibywg cHRyLCBzaXplKTsKPj4+ICsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRybV9kZXZfZXhp dChpZHgpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4+IMKgwqDCoMKgwqAgfQo+Pj4gwqDCoMKg wqDCoCBpZiAoaW5fcmFzX2ludHIpCj4+PiBAQCAtNDIwLDcgKzQyNSw3IEBAIGludCBhbWRncHVf dXZkX3Jlc3VtZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPj4+IMKgIHsKPj4+IMKgwqDC oMKgwqAgdW5zaWduZWQgc2l6ZTsKPj4+IMKgwqDCoMKgwqAgdm9pZCAqcHRyOwo+Pj4gLcKgwqDC oCBpbnQgaTsKPj4+ICvCoMKgwqAgaW50IGksIGlkeDsKPj4+IMKgwqDCoMKgwqAgZm9yIChpID0g MDsgaSA8IGFkZXYtPnV2ZC5udW1fdXZkX2luc3Q7IGkrKykgewo+Pj4gwqDCoMKgwqDCoMKgwqDC oMKgIGlmIChhZGV2LT51dmQuaGFydmVzdF9jb25maWcgJiAoMSA8PCBpKSkKPj4+IEBAIC00MzIs NyArNDM3LDEwIEBAIGludCBhbWRncHVfdXZkX3Jlc3VtZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq YWRldikKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBwdHIgPSBhZGV2LT51dmQuaW5zdFtpXS5jcHVf YWRkcjsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoYWRldi0+dXZkLmluc3RbaV0uc2F2ZWRf Ym8gIT0gTlVMTCkgewo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbWVtY3B5X3RvaW8ocHRy LCBhZGV2LT51dmQuaW5zdFtpXS5zYXZlZF9ibywgc2l6ZSk7Cj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBpZiAoZHJtX2Rldl9lbnRlcigmYWRldi0+ZGRldiwgJmlkeCkpIHsKPj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbWVtY3B5X3RvaW8ocHRyLCBhZGV2LT51dmQuaW5z dFtpXS5zYXZlZF9ibywgc2l6ZSk7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGRybV9kZXZfZXhpdChpZHgpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+Pj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAga3ZmcmVlKGFkZXYtPnV2ZC5pbnN0W2ldLnNhdmVkX2Jv KTsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFkZXYtPnV2ZC5pbnN0W2ldLnNhdmVk X2JvID0gTlVMTDsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB9IGVsc2Ugewo+Pj4gQEAgLTQ0Miw4 ICs0NTAsMTEgQEAgaW50IGFtZGdwdV91dmRfcmVzdW1lKHN0cnVjdCBhbWRncHVfZGV2aWNlICph ZGV2KQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaGRyID0gKGNvbnN0IHN0cnVjdCBj b21tb25fZmlybXdhcmVfaGVhZGVyIAo+Pj4gKilhZGV2LT51dmQuZnctPmRhdGE7Cj4+PiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoYWRldi0+ZmlybXdhcmUubG9hZF90eXBlICE9IEFN REdQVV9GV19MT0FEX1BTUCkgewo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBvZmZzZXQgPSBsZTMyX3RvX2NwdShoZHItPnVjb2RlX2FycmF5X29mZnNldF9ieXRlcyk7Cj4+ PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1lbWNweV90b2lvKGFkZXYtPnV2ZC5p bnN0W2ldLmNwdV9hZGRyLCAKPj4+IGFkZXYtPnV2ZC5mdy0+ZGF0YSArIG9mZnNldCwKPj4+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxlMzJfdG9fY3B1 KGhkci0+dWNvZGVfc2l6ZV9ieXRlcykpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBpZiAoZHJtX2Rldl9lbnRlcigmYWRldi0+ZGRldiwgJmlkeCkpIHsKPj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtZW1jcHlfdG9pbyhhZGV2LT51dmQuaW5z dFtpXS5jcHVfYWRkciwgCj4+PiBhZGV2LT51dmQuZnctPmRhdGEgKyBvZmZzZXQsCj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxlMzJf dG9fY3B1KGhkci0+dWNvZGVfc2l6ZV9ieXRlcykpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGRybV9kZXZfZXhpdChpZHgpOwo+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB9Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHNpemUgLT0gbGUzMl90b19jcHUoaGRyLT51Y29kZV9zaXplX2J5dGVzKTsKPj4+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHRyICs9IGxlMzJfdG9fY3B1KGhkci0+dWNvZGVf c2l6ZV9ieXRlcyk7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+PiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZjZS5jIAo+Pj4gYi9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdmNlLmMKPj4+IGluZGV4IGVhNmE2MmY2N2Uz OC4uODMzMjAzNDAxZWY0IDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X3ZjZS5jCj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRn cHVfdmNlLmMKPj4+IEBAIC0yOSw2ICsyOSw3IEBACj4+PiDCoCAjaW5jbHVkZSA8bGludXgvbW9k dWxlLmg+Cj4+PiDCoCAjaW5jbHVkZSA8ZHJtL2RybS5oPgo+Pj4gKyNpbmNsdWRlIDxkcm0vZHJt X2Rydi5oPgo+Pj4gwqAgI2luY2x1ZGUgImFtZGdwdS5oIgo+Pj4gwqAgI2luY2x1ZGUgImFtZGdw dV9wbS5oIgo+Pj4gQEAgLTI5Myw3ICsyOTQsNyBAQCBpbnQgYW1kZ3B1X3ZjZV9yZXN1bWUoc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+PiDCoMKgwqDCoMKgIHZvaWQgKmNwdV9hZGRyOwo+ Pj4gwqDCoMKgwqDCoCBjb25zdCBzdHJ1Y3QgY29tbW9uX2Zpcm13YXJlX2hlYWRlciAqaGRyOwo+ Pj4gwqDCoMKgwqDCoCB1bnNpZ25lZCBvZmZzZXQ7Cj4+PiAtwqDCoMKgIGludCByOwo+Pj4gK8Kg wqDCoCBpbnQgciwgaWR4Owo+Pj4gwqDCoMKgwqDCoCBpZiAoYWRldi0+dmNlLnZjcHVfYm8gPT0g TlVMTCkKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4+IEBAIC0zMTMs OCArMzE0LDEyIEBAIGludCBhbWRncHVfdmNlX3Jlc3VtZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq YWRldikKPj4+IMKgwqDCoMKgwqAgaGRyID0gKGNvbnN0IHN0cnVjdCBjb21tb25fZmlybXdhcmVf aGVhZGVyICopYWRldi0+dmNlLmZ3LT5kYXRhOwo+Pj4gwqDCoMKgwqDCoCBvZmZzZXQgPSBsZTMy X3RvX2NwdShoZHItPnVjb2RlX2FycmF5X29mZnNldF9ieXRlcyk7Cj4+PiAtwqDCoMKgIG1lbWNw eV90b2lvKGNwdV9hZGRyLCBhZGV2LT52Y2UuZnctPmRhdGEgKyBvZmZzZXQsCj4+PiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBhZGV2LT52Y2UuZnctPnNpemUgLSBvZmZzZXQpOwo+Pj4gKwo+Pj4g K8KgwqDCoCBpZiAoZHJtX2Rldl9lbnRlcigmYWRldi0+ZGRldiwgJmlkeCkpIHsKPj4+ICvCoMKg wqDCoMKgwqDCoCBtZW1jcHlfdG9pbyhjcHVfYWRkciwgYWRldi0+dmNlLmZ3LT5kYXRhICsgb2Zm c2V0LAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhZGV2LT52Y2UuZnctPnNp emUgLSBvZmZzZXQpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGRybV9kZXZfZXhpdChpZHgpOwo+Pj4g K8KgwqDCoCB9Cj4+PiDCoMKgwqDCoMKgIGFtZGdwdV9ib19rdW5tYXAoYWRldi0+dmNlLnZjcHVf Ym8pOwo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92 Y24uYyAKPj4+IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3Zjbi5jCj4+PiBp bmRleCAyMDE2NDU5NjNiYTUuLjIxZjdkMzY0NGQ3MCAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92Y24uYwo+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X3Zjbi5jCj4+PiBAQCAtMjcsNiArMjcsNyBAQAo+Pj4gwqAgI2lu Y2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+Cj4+PiDCoCAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+ Cj4+PiDCoCAjaW5jbHVkZSA8bGludXgvcGNpLmg+Cj4+PiArI2luY2x1ZGUgPGRybS9kcm1fZHJ2 Lmg+Cj4+PiDCoCAjaW5jbHVkZSAiYW1kZ3B1LmgiCj4+PiDCoCAjaW5jbHVkZSAiYW1kZ3B1X3Bt LmgiCj4+PiBAQCAtMjc1LDcgKzI3Niw3IEBAIGludCBhbWRncHVfdmNuX3N1c3BlbmQoc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+PiDCoCB7Cj4+PiDCoMKgwqDCoMKgIHVuc2lnbmVkIHNp emU7Cj4+PiDCoMKgwqDCoMKgIHZvaWQgKnB0cjsKPj4+IC3CoMKgwqAgaW50IGk7Cj4+PiArwqDC oMKgIGludCBpLCBpZHg7Cj4+PiDCoMKgwqDCoMKgIGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygm YWRldi0+dmNuLmlkbGVfd29yayk7Cj4+PiBAQCAtMjkyLDcgKzI5MywxMCBAQCBpbnQgYW1kZ3B1 X3Zjbl9zdXNwZW5kKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+Pj4gwqDCoMKgwqDCoMKg wqDCoMKgIGlmICghYWRldi0+dmNuLmluc3RbaV0uc2F2ZWRfYm8pCj4+PiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT01FTTsKPj4+IC3CoMKgwqDCoMKgwqDCoCBtZW1jcHlf ZnJvbWlvKGFkZXYtPnZjbi5pbnN0W2ldLnNhdmVkX2JvLCBwdHIsIHNpemUpOwo+Pj4gK8KgwqDC oMKgwqDCoMKgIGlmIChkcm1fZGV2X2VudGVyKCZhZGV2LT5kZGV2LCAmaWR4KSkgewo+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgbWVtY3B5X2Zyb21pbyhhZGV2LT52Y24uaW5zdFtpXS5zYXZl ZF9ibywgcHRyLCBzaXplKTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRybV9kZXZfZXhp dChpZHgpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4+IMKgwqDCoMKgwqAgfQo+Pj4gwqDCoMKg wqDCoCByZXR1cm4gMDsKPj4+IMKgIH0KPj4+IEBAIC0zMDEsNyArMzA1LDcgQEAgaW50IGFtZGdw dV92Y25fcmVzdW1lKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+Pj4gwqAgewo+Pj4gwqDC oMKgwqDCoCB1bnNpZ25lZCBzaXplOwo+Pj4gwqDCoMKgwqDCoCB2b2lkICpwdHI7Cj4+PiAtwqDC oMKgIGludCBpOwo+Pj4gK8KgwqDCoCBpbnQgaSwgaWR4Owo+Pj4gwqDCoMKgwqDCoCBmb3IgKGkg PSAwOyBpIDwgYWRldi0+dmNuLm51bV92Y25faW5zdDsgKytpKSB7Cj4+PiDCoMKgwqDCoMKgwqDC oMKgwqAgaWYgKGFkZXYtPnZjbi5oYXJ2ZXN0X2NvbmZpZyAmICgxIDw8IGkpKQo+Pj4gQEAgLTMx Myw3ICszMTcsMTAgQEAgaW50IGFtZGdwdV92Y25fcmVzdW1lKHN0cnVjdCBhbWRncHVfZGV2aWNl ICphZGV2KQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHB0ciA9IGFkZXYtPnZjbi5pbnN0W2ldLmNw dV9hZGRyOwo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChhZGV2LT52Y24uaW5zdFtpXS5zYXZl ZF9ibyAhPSBOVUxMKSB7Cj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtZW1jcHlfdG9pbyhw dHIsIGFkZXYtPnZjbi5pbnN0W2ldLnNhdmVkX2JvLCBzaXplKTsKPj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGlmIChkcm1fZGV2X2VudGVyKCZhZGV2LT5kZGV2LCAmaWR4KSkgewo+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtZW1jcHlfdG9pbyhwdHIsIGFkZXYtPnZjbi5p bnN0W2ldLnNhdmVkX2JvLCBzaXplKTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZHJtX2Rldl9leGl0KGlkeCk7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+PiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBrdmZyZWUoYWRldi0+dmNuLmluc3RbaV0uc2F2ZWRf Ym8pOwo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYWRldi0+dmNuLmluc3RbaV0uc2F2 ZWRfYm8gPSBOVUxMOwo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIH0gZWxzZSB7Cj4+PiBAQCAtMzIz LDggKzMzMCwxMSBAQCBpbnQgYW1kZ3B1X3Zjbl9yZXN1bWUoc3RydWN0IGFtZGdwdV9kZXZpY2Ug KmFkZXYpCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBoZHIgPSAoY29uc3Qgc3RydWN0 IGNvbW1vbl9maXJtd2FyZV9oZWFkZXIgCj4+PiAqKWFkZXYtPnZjbi5mdy0+ZGF0YTsKPj4+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChhZGV2LT5maXJtd2FyZS5sb2FkX3R5cGUgIT0g QU1ER1BVX0ZXX0xPQURfUFNQKSB7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIG9mZnNldCA9IGxlMzJfdG9fY3B1KGhkci0+dWNvZGVfYXJyYXlfb2Zmc2V0X2J5dGVzKTsK Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbWVtY3B5X3RvaW8oYWRldi0+dmNu Lmluc3RbaV0uY3B1X2FkZHIsIAo+Pj4gYWRldi0+dmNuLmZ3LT5kYXRhICsgb2Zmc2V0LAo+Pj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGUzMl90b19j cHUoaGRyLT51Y29kZV9zaXplX2J5dGVzKSk7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGlmIChkcm1fZGV2X2VudGVyKCZhZGV2LT5kZGV2LCAmaWR4KSkgewo+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1lbWNweV90b2lvKGFkZXYtPnZjbi5p bnN0W2ldLmNwdV9hZGRyLCAKPj4+IGFkZXYtPnZjbi5mdy0+ZGF0YSArIG9mZnNldCwKPj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGUz Ml90b19jcHUoaGRyLT51Y29kZV9zaXplX2J5dGVzKSk7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZHJtX2Rldl9leGl0KGlkeCk7Cj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgc2l6ZSAtPSBsZTMyX3RvX2NwdShoZHItPnVjb2RlX3NpemVfYnl0ZXMpOwo+Pj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwdHIgKz0gbGUzMl90b19jcHUoaGRyLT51Y29k ZV9zaXplX2J5dGVzKTsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uYyAKPj4+IGIvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZtLmMKPj4+IGluZGV4IDlmODY4Y2YzYjgz Mi4uN2RkNWYxMGFiNTcwIDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X3ZtLmMKPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdw dV92bS5jCj4+PiBAQCAtMzIsNiArMzIsNyBAQAo+Pj4gwqAgI2luY2x1ZGUgPGxpbnV4L2RtYS1i dWYuaD4KPj4+IMKgICNpbmNsdWRlIDxkcm0vYW1kZ3B1X2RybS5oPgo+Pj4gKyNpbmNsdWRlIDxk cm0vZHJtX2Rydi5oPgo+Pj4gwqAgI2luY2x1ZGUgImFtZGdwdS5oIgo+Pj4gwqAgI2luY2x1ZGUg ImFtZGdwdV90cmFjZS5oIgo+Pj4gwqAgI2luY2x1ZGUgImFtZGdwdV9hbWRrZmQuaCIKPj4+IEBA IC0xNjA2LDcgKzE2MDcsMTAgQEAgc3RhdGljIGludCBhbWRncHVfdm1fYm9fdXBkYXRlX21hcHBp bmcoc3RydWN0IAo+Pj4gYW1kZ3B1X2RldmljZSAqYWRldiwKPj4+IMKgwqDCoMKgwqAgc3RydWN0 IGFtZGdwdV92bV91cGRhdGVfcGFyYW1zIHBhcmFtczsKPj4+IMKgwqDCoMKgwqAgZW51bSBhbWRn cHVfc3luY19tb2RlIHN5bmNfbW9kZTsKPj4+IMKgwqDCoMKgwqAgdWludDY0X3QgcGZuOwo+Pj4g LcKgwqDCoCBpbnQgcjsKPj4+ICvCoMKgwqAgaW50IHIsIGlkeDsKPj4+ICsKPj4+ICvCoMKgwqAg aWYgKCFkcm1fZGV2X2VudGVyKCZhZGV2LT5kZGV2LCAmaWR4KSkKPj4+ICvCoMKgwqDCoMKgwqDC oCByZXR1cm4gLUVOT0RFVjsKPj4+IMKgwqDCoMKgwqAgbWVtc2V0KCZwYXJhbXMsIDAsIHNpemVv ZihwYXJhbXMpKTsKPj4+IMKgwqDCoMKgwqAgcGFyYW1zLmFkZXYgPSBhZGV2Owo+Pj4gQEAgLTE3 MTUsNiArMTcxOSw3IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X3ZtX2JvX3VwZGF0ZV9tYXBwaW5nKHN0 cnVjdCAKPj4+IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+PiDCoCBlcnJvcl91bmxvY2s6Cj4+PiDC oMKgwqDCoMKgIGFtZGdwdV92bV9ldmljdGlvbl91bmxvY2sodm0pOwo+Pj4gK8KgwqDCoCBkcm1f ZGV2X2V4aXQoaWR4KTsKPj4+IMKgwqDCoMKgwqAgcmV0dXJuIHI7Cj4+PiDCoCB9Cj4+PiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvcHNwX3YxMV8wLmMgCj4+PiBiL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3BzcF92MTFfMC5jCj4+PiBpbmRleCA1ODk0MTBjMzJk MDkuLjJjZWM3MWU4MjNmNSAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L3BzcF92MTFfMC5jCj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9wc3Bf djExXzAuYwo+Pj4gQEAgLTIzLDYgKzIzLDcgQEAKPj4+IMKgICNpbmNsdWRlIDxsaW51eC9maXJt d2FyZS5oPgo+Pj4gwqAgI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+Pj4gwqAgI2luY2x1ZGUg PGxpbnV4L3ZtYWxsb2MuaD4KPj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9kcnYuaD4KPj4+IMKgICNp bmNsdWRlICJhbWRncHUuaCIKPj4+IMKgICNpbmNsdWRlICJhbWRncHVfcHNwLmgiCj4+PiBAQCAt MjY5LDEwICsyNzAsOCBAQCBzdGF0aWMgaW50IHBzcF92MTFfMF9ib290bG9hZGVyX2xvYWRfa2Ri KHN0cnVjdCAKPj4+IHBzcF9jb250ZXh0ICpwc3ApCj4+PiDCoMKgwqDCoMKgIGlmIChyZXQpCj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4+IC3CoMKgwqAgbWVtc2V0KHBzcC0+ ZndfcHJpX2J1ZiwgMCwgUFNQXzFfTUVHKTsKPj4+IC0KPj4+IMKgwqDCoMKgwqAgLyogQ29weSBQ U1AgS0RCIGJpbmFyeSB0byBtZW1vcnkgKi8KPj4+IC3CoMKgwqAgbWVtY3B5KHBzcC0+ZndfcHJp X2J1ZiwgcHNwLT5rZGJfc3RhcnRfYWRkciwgcHNwLT5rZGJfYmluX3NpemUpOwo+Pj4gK8KgwqDC oCBwc3BfY29weV9mdyhwc3AsIHBzcC0+a2RiX3N0YXJ0X2FkZHIsIHBzcC0+a2RiX2Jpbl9zaXpl KTsKPj4+IMKgwqDCoMKgwqAgLyogUHJvdmlkZSB0aGUgUFNQIEtEQiB0byBib290bG9hZGVyICov Cj4+PiDCoMKgwqDCoMKgIFdSRUczMl9TT0MxNShNUDAsIDAsIG1tTVAwX1NNTl9DMlBNU0dfMzYs Cj4+PiBAQCAtMzAyLDEwICszMDEsOCBAQCBzdGF0aWMgaW50IHBzcF92MTFfMF9ib290bG9hZGVy X2xvYWRfc3BsKHN0cnVjdCAKPj4+IHBzcF9jb250ZXh0ICpwc3ApCj4+PiDCoMKgwqDCoMKgIGlm IChyZXQpCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4+IC3CoMKgwqAgbWVt c2V0KHBzcC0+ZndfcHJpX2J1ZiwgMCwgUFNQXzFfTUVHKTsKPj4+IC0KPj4+IMKgwqDCoMKgwqAg LyogQ29weSBQU1AgU1BMIGJpbmFyeSB0byBtZW1vcnkgKi8KPj4+IC3CoMKgwqAgbWVtY3B5KHBz cC0+ZndfcHJpX2J1ZiwgcHNwLT5zcGxfc3RhcnRfYWRkciwgcHNwLT5zcGxfYmluX3NpemUpOwo+ Pj4gK8KgwqDCoCBwc3BfY29weV9mdyhwc3AsIHBzcC0+c3BsX3N0YXJ0X2FkZHIsIHBzcC0+c3Bs X2Jpbl9zaXplKTsKPj4+IMKgwqDCoMKgwqAgLyogUHJvdmlkZSB0aGUgUFNQIFNQTCB0byBib290 bG9hZGVyICovCj4+PiDCoMKgwqDCoMKgIFdSRUczMl9TT0MxNShNUDAsIDAsIG1tTVAwX1NNTl9D MlBNU0dfMzYsCj4+PiBAQCAtMzM1LDEwICszMzIsOCBAQCBzdGF0aWMgaW50IAo+Pj4gcHNwX3Yx MV8wX2Jvb3Rsb2FkZXJfbG9hZF9zeXNkcnYoc3RydWN0IHBzcF9jb250ZXh0ICpwc3ApCj4+PiDC oMKgwqDCoMKgIGlmIChyZXQpCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4+ IC3CoMKgwqAgbWVtc2V0KHBzcC0+ZndfcHJpX2J1ZiwgMCwgUFNQXzFfTUVHKTsKPj4+IC0KPj4+ IMKgwqDCoMKgwqAgLyogQ29weSBQU1AgU3lzdGVtIERyaXZlciBiaW5hcnkgdG8gbWVtb3J5ICov Cj4+PiAtwqDCoMKgIG1lbWNweShwc3AtPmZ3X3ByaV9idWYsIHBzcC0+c3lzX3N0YXJ0X2FkZHIs IHBzcC0+c3lzX2Jpbl9zaXplKTsKPj4+ICvCoMKgwqAgcHNwX2NvcHlfZncocHNwLCBwc3AtPnN5 c19zdGFydF9hZGRyLCBwc3AtPnN5c19iaW5fc2l6ZSk7Cj4+PiDCoMKgwqDCoMKgIC8qIFByb3Zp ZGUgdGhlIHN5cyBkcml2ZXIgdG8gYm9vdGxvYWRlciAqLwo+Pj4gwqDCoMKgwqDCoCBXUkVHMzJf U09DMTUoTVAwLCAwLCBtbU1QMF9TTU5fQzJQTVNHXzM2LAo+Pj4gQEAgLTM3MSwxMCArMzY2LDgg QEAgc3RhdGljIGludCBwc3BfdjExXzBfYm9vdGxvYWRlcl9sb2FkX3NvcyhzdHJ1Y3QgCj4+PiBw c3BfY29udGV4dCAqcHNwKQo+Pj4gwqDCoMKgwqDCoCBpZiAocmV0KQo+Pj4gwqDCoMKgwqDCoMKg wqDCoMKgIHJldHVybiByZXQ7Cj4+PiAtwqDCoMKgIG1lbXNldChwc3AtPmZ3X3ByaV9idWYsIDAs IFBTUF8xX01FRyk7Cj4+PiAtCj4+PiDCoMKgwqDCoMKgIC8qIENvcHkgU2VjdXJlIE9TIGJpbmFy eSB0byBQU1AgbWVtb3J5ICovCj4+PiAtwqDCoMKgIG1lbWNweShwc3AtPmZ3X3ByaV9idWYsIHBz cC0+c29zX3N0YXJ0X2FkZHIsIHBzcC0+c29zX2Jpbl9zaXplKTsKPj4+ICvCoMKgwqAgcHNwX2Nv cHlfZncocHNwLCBwc3AtPnNvc19zdGFydF9hZGRyLCBwc3AtPnNvc19iaW5fc2l6ZSk7Cj4+PiDC oMKgwqDCoMKgIC8qIFByb3ZpZGUgdGhlIFBTUCBzZWN1cmUgT1MgdG8gYm9vdGxvYWRlciAqLwo+ Pj4gwqDCoMKgwqDCoCBXUkVHMzJfU09DMTUoTVAwLCAwLCBtbU1QMF9TTU5fQzJQTVNHXzM2LAo+ Pj4gQEAgLTYwOCw3ICs2MDEsNyBAQCBzdGF0aWMgaW50IHBzcF92MTFfMF9tZW1vcnlfdHJhaW5p bmcoc3RydWN0IAo+Pj4gcHNwX2NvbnRleHQgKnBzcCwgdWludDMyX3Qgb3BzKQo+Pj4gwqDCoMKg wqDCoCB1aW50MzJfdCBwMmNfaGVhZGVyWzRdOwo+Pj4gwqDCoMKgwqDCoCB1aW50MzJfdCBzejsK Pj4+IMKgwqDCoMKgwqAgdm9pZCAqYnVmOwo+Pj4gLcKgwqDCoCBpbnQgcmV0Owo+Pj4gK8KgwqDC oCBpbnQgcmV0LCBpZHg7Cj4+PiDCoMKgwqDCoMKgIGlmIChjdHgtPmluaXQgPT0gUFNQX01FTV9U UkFJTl9OT1RfU1VQUE9SVCkgewo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIERSTV9ERUJVRygiTWVt b3J5IHRyYWluaW5nIGlzIG5vdCBzdXBwb3J0ZWQuXG4iKTsKPj4+IEBAIC02ODEsMTcgKzY3NCwy NCBAQCBzdGF0aWMgaW50IHBzcF92MTFfMF9tZW1vcnlfdHJhaW5pbmcoc3RydWN0IAo+Pj4gcHNw X2NvbnRleHQgKnBzcCwgdWludDMyX3Qgb3BzKQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcmV0dXJuIC1FTk9NRU07Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+Pj4gLcKgwqDCoMKg wqDCoMKgIG1lbWNweV9mcm9taW8oYnVmLCBhZGV2LT5tbWFuLmFwZXJfYmFzZV9rYWRkciwgc3op Owo+Pj4gLcKgwqDCoMKgwqDCoMKgIHJldCA9IHBzcF92MTFfMF9tZW1vcnlfdHJhaW5pbmdfc2Vu ZF9tc2cocHNwLCAKPj4+IFBTUF9CTF9fRFJBTV9MT05HX1RSQUlOKTsKPj4+IC3CoMKgwqDCoMKg wqDCoCBpZiAocmV0KSB7Cj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBEUk1fRVJST1IoIlNl bmQgbG9uZyB0cmFpbmluZyBtc2cgZmFpbGVkLlxuIik7Cj4+PiArwqDCoMKgwqDCoMKgwqAgaWYg KGRybV9kZXZfZW50ZXIoJmFkZXYtPmRkZXYsICZpZHgpKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBtZW1jcHlfZnJvbWlvKGJ1ZiwgYWRldi0+bW1hbi5hcGVyX2Jhc2Vfa2FkZHIsIHN6 KTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IHBzcF92MTFfMF9tZW1vcnlfdHJh aW5pbmdfc2VuZF9tc2cocHNwLCAKPj4+IFBTUF9CTF9fRFJBTV9MT05HX1RSQUlOKTsKPj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChyZXQpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgRFJNX0VSUk9SKCJTZW5kIGxvbmcgdHJhaW5pbmcgbXNnIGZhaWxlZC5cbiIp Owo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2ZnJlZShidWYpOwo+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkcm1fZGV2X2V4aXQoaWR4KTsKPj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIH0KPj4+ICsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1lbWNweV90b2lv KGFkZXYtPm1tYW4uYXBlcl9iYXNlX2thZGRyLCBidWYsIHN6KTsKPj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGFkZXYtPmhkcC5mdW5jcy0+Zmx1c2hfaGRwKGFkZXYsIE5VTEwpOwo+Pj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdmZyZWUoYnVmKTsKPj4+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHJldHVybiByZXQ7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkcm1fZGV2X2V4 aXQoaWR4KTsKPj4+ICvCoMKgwqDCoMKgwqDCoCB9IGVsc2Ugewo+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgdmZyZWUoYnVmKTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAt RU5PREVWOwo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4+IC0KPj4+IC3CoMKgwqDCoMKgwqDC oCBtZW1jcHlfdG9pbyhhZGV2LT5tbWFuLmFwZXJfYmFzZV9rYWRkciwgYnVmLCBzeik7Cj4+PiAt wqDCoMKgwqDCoMKgwqAgYWRldi0+aGRwLmZ1bmNzLT5mbHVzaF9oZHAoYWRldiwgTlVMTCk7Cj4+ PiAtwqDCoMKgwqDCoMKgwqAgdmZyZWUoYnVmKTsKPj4+IMKgwqDCoMKgwqAgfQo+Pj4gwqDCoMKg wqDCoCBpZiAob3BzICYgUFNQX01FTV9UUkFJTl9TQVZFKSB7Cj4+PiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvcHNwX3YxMl8wLmMgCj4+PiBiL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L3BzcF92MTJfMC5jCj4+PiBpbmRleCBjNDgyOGJkMzI2NGIuLjYxOGU1YjZi ODVkOSAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3BzcF92MTJf MC5jCj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9wc3BfdjEyXzAuYwo+Pj4g QEAgLTEzOCwxMCArMTM4LDggQEAgc3RhdGljIGludCAKPj4+IHBzcF92MTJfMF9ib290bG9hZGVy X2xvYWRfc3lzZHJ2KHN0cnVjdCBwc3BfY29udGV4dCAqcHNwKQo+Pj4gwqDCoMKgwqDCoCBpZiAo cmV0KQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+PiAtwqDCoMKgIG1lbXNl dChwc3AtPmZ3X3ByaV9idWYsIDAsIFBTUF8xX01FRyk7Cj4+PiAtCj4+PiDCoMKgwqDCoMKgIC8q IENvcHkgUFNQIFN5c3RlbSBEcml2ZXIgYmluYXJ5IHRvIG1lbW9yeSAqLwo+Pj4gLcKgwqDCoCBt ZW1jcHkocHNwLT5md19wcmlfYnVmLCBwc3AtPnN5c19zdGFydF9hZGRyLCBwc3AtPnN5c19iaW5f c2l6ZSk7Cj4+PiArwqDCoMKgIHBzcF9jb3B5X2Z3KHBzcCwgcHNwLT5zeXNfc3RhcnRfYWRkciwg cHNwLT5zeXNfYmluX3NpemUpOwo+Pj4gwqDCoMKgwqDCoCAvKiBQcm92aWRlIHRoZSBzeXMgZHJp dmVyIHRvIGJvb3Rsb2FkZXIgKi8KPj4+IMKgwqDCoMKgwqAgV1JFRzMyX1NPQzE1KE1QMCwgMCwg bW1NUDBfU01OX0MyUE1TR18zNiwKPj4+IEBAIC0xNzksMTAgKzE3Nyw4IEBAIHN0YXRpYyBpbnQg cHNwX3YxMl8wX2Jvb3Rsb2FkZXJfbG9hZF9zb3Moc3RydWN0IAo+Pj4gcHNwX2NvbnRleHQgKnBz cCkKPj4+IMKgwqDCoMKgwqAgaWYgKHJldCkKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4g cmV0Owo+Pj4gLcKgwqDCoCBtZW1zZXQocHNwLT5md19wcmlfYnVmLCAwLCBQU1BfMV9NRUcpOwo+ Pj4gLQo+Pj4gwqDCoMKgwqDCoCAvKiBDb3B5IFNlY3VyZSBPUyBiaW5hcnkgdG8gUFNQIG1lbW9y eSAqLwo+Pj4gLcKgwqDCoCBtZW1jcHkocHNwLT5md19wcmlfYnVmLCBwc3AtPnNvc19zdGFydF9h ZGRyLCBwc3AtPnNvc19iaW5fc2l6ZSk7Cj4+PiArwqDCoMKgIHBzcF9jb3B5X2Z3KHBzcCwgcHNw LT5zb3Nfc3RhcnRfYWRkciwgcHNwLT5zb3NfYmluX3NpemUpOwo+Pj4gwqDCoMKgwqDCoCAvKiBQ cm92aWRlIHRoZSBQU1Agc2VjdXJlIE9TIHRvIGJvb3Rsb2FkZXIgKi8KPj4+IMKgwqDCoMKgwqAg V1JFRzMyX1NPQzE1KE1QMCwgMCwgbW1NUDBfU01OX0MyUE1TR18zNiwKPj4+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9wc3BfdjNfMS5jIAo+Pj4gYi9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9wc3BfdjNfMS5jCj4+PiBpbmRleCBmMmU3MjVmNzJkMmYuLmQwYTZj Y2NkMDg5NyAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3BzcF92 M18xLmMKPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3BzcF92M18xLmMKPj4+ IEBAIC0xMDIsMTAgKzEwMiw4IEBAIHN0YXRpYyBpbnQgCj4+PiBwc3BfdjNfMV9ib290bG9hZGVy X2xvYWRfc3lzZHJ2KHN0cnVjdCBwc3BfY29udGV4dCAqcHNwKQo+Pj4gwqDCoMKgwqDCoCBpZiAo cmV0KQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+PiAtwqDCoMKgIG1lbXNl dChwc3AtPmZ3X3ByaV9idWYsIDAsIFBTUF8xX01FRyk7Cj4+PiAtCj4+PiDCoMKgwqDCoMKgIC8q IENvcHkgUFNQIFN5c3RlbSBEcml2ZXIgYmluYXJ5IHRvIG1lbW9yeSAqLwo+Pj4gLcKgwqDCoCBt ZW1jcHkocHNwLT5md19wcmlfYnVmLCBwc3AtPnN5c19zdGFydF9hZGRyLCBwc3AtPnN5c19iaW5f c2l6ZSk7Cj4+PiArwqDCoMKgIHBzcF9jb3B5X2Z3KHBzcCwgcHNwLT5zeXNfc3RhcnRfYWRkciwg cHNwLT5zeXNfYmluX3NpemUpOwo+Pj4gwqDCoMKgwqDCoCAvKiBQcm92aWRlIHRoZSBzeXMgZHJp dmVyIHRvIGJvb3Rsb2FkZXIgKi8KPj4+IMKgwqDCoMKgwqAgV1JFRzMyX1NPQzE1KE1QMCwgMCwg bW1NUDBfU01OX0MyUE1TR18zNiwKPj4+IEBAIC0xNDMsMTAgKzE0MSw4IEBAIHN0YXRpYyBpbnQg cHNwX3YzXzFfYm9vdGxvYWRlcl9sb2FkX3NvcyhzdHJ1Y3QgCj4+PiBwc3BfY29udGV4dCAqcHNw KQo+Pj4gwqDCoMKgwqDCoCBpZiAocmV0KQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBy ZXQ7Cj4+PiAtwqDCoMKgIG1lbXNldChwc3AtPmZ3X3ByaV9idWYsIDAsIFBTUF8xX01FRyk7Cj4+ PiAtCj4+PiDCoMKgwqDCoMKgIC8qIENvcHkgU2VjdXJlIE9TIGJpbmFyeSB0byBQU1AgbWVtb3J5 ICovCj4+PiAtwqDCoMKgIG1lbWNweShwc3AtPmZ3X3ByaV9idWYsIHBzcC0+c29zX3N0YXJ0X2Fk ZHIsIHBzcC0+c29zX2Jpbl9zaXplKTsKPj4+ICvCoMKgwqAgcHNwX2NvcHlfZncocHNwLCBwc3At PnNvc19zdGFydF9hZGRyLCBwc3AtPnNvc19iaW5fc2l6ZSk7Cj4+PiDCoMKgwqDCoMKgIC8qIFBy b3ZpZGUgdGhlIFBTUCBzZWN1cmUgT1MgdG8gYm9vdGxvYWRlciAqLwo+Pj4gwqDCoMKgwqDCoCBX UkVHMzJfU09DMTUoTVAwLCAwLCBtbU1QMF9TTU5fQzJQTVNHXzM2LAo+Pj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3ZjZV92NF8wLmMgCj4+PiBiL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L3ZjZV92NF8wLmMKPj4+IGluZGV4IDhlMjM4ZGVhN2JlZi4uOTA5MTBk MTlkYjEyIDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvdmNlX3Y0 XzAuYwo+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvdmNlX3Y0XzAuYwo+Pj4g QEAgLTI1LDYgKzI1LDcgQEAKPj4+IMKgwqAgKi8KPj4+IMKgICNpbmNsdWRlIDxsaW51eC9maXJt d2FyZS5oPgo+Pj4gKyNpbmNsdWRlIDxkcm0vZHJtX2Rydi5oPgo+Pj4gwqAgI2luY2x1ZGUgImFt ZGdwdS5oIgo+Pj4gwqAgI2luY2x1ZGUgImFtZGdwdV92Y2UuaCIKPj4+IEBAIC01NTUsMTYgKzU1 NiwxOSBAQCBzdGF0aWMgaW50IHZjZV92NF8wX2h3X2Zpbmkodm9pZCAqaGFuZGxlKQo+Pj4gwqAg c3RhdGljIGludCB2Y2VfdjRfMF9zdXNwZW5kKHZvaWQgKmhhbmRsZSkKPj4+IMKgIHsKPj4+IMKg wqDCoMKgwqAgc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZp Y2UgKiloYW5kbGU7Cj4+PiAtwqDCoMKgIGludCByOwo+Pj4gK8KgwqDCoCBpbnQgciwgaWR4Owo+ Pj4gwqDCoMKgwqDCoCBpZiAoYWRldi0+dmNlLnZjcHVfYm8gPT0gTlVMTCkKPj4+IMKgwqDCoMKg wqDCoMKgwqDCoCByZXR1cm4gMDsKPj4+IC3CoMKgwqAgaWYgKGFkZXYtPmZpcm13YXJlLmxvYWRf dHlwZSA9PSBBTURHUFVfRldfTE9BRF9QU1ApIHsKPj4+IC3CoMKgwqDCoMKgwqDCoCB1bnNpZ25l ZCBzaXplID0gYW1kZ3B1X2JvX3NpemUoYWRldi0+dmNlLnZjcHVfYm8pOwo+Pj4gLcKgwqDCoMKg wqDCoMKgIHZvaWQgKnB0ciA9IGFkZXYtPnZjZS5jcHVfYWRkcjsKPj4+ICvCoMKgwqAgaWYgKGRy bV9kZXZfZW50ZXIoJmFkZXYtPmRkZXYsICZpZHgpKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgaWYg KGFkZXYtPmZpcm13YXJlLmxvYWRfdHlwZSA9PSBBTURHUFVfRldfTE9BRF9QU1ApIHsKPj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIHNpemUgPSBhbWRncHVfYm9fc2l6ZShhZGV2 LT52Y2UudmNwdV9ibyk7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2b2lkICpwdHIgPSBh ZGV2LT52Y2UuY3B1X2FkZHI7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgbWVtY3B5X2Zyb21pbyhhZGV2 LT52Y2Uuc2F2ZWRfYm8sIHB0ciwgc2l6ZSk7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBt ZW1jcHlfZnJvbWlvKGFkZXYtPnZjZS5zYXZlZF9ibywgcHRyLCBzaXplKTsKPj4+ICvCoMKgwqDC oMKgwqDCoCB9Cj4+PiArwqDCoMKgwqDCoMKgwqAgZHJtX2Rldl9leGl0KGlkeCk7Cj4+PiDCoMKg wqDCoMKgIH0KPj4+IMKgwqDCoMKgwqAgciA9IHZjZV92NF8wX2h3X2ZpbmkoYWRldik7Cj4+PiBA QCAtNTc3LDE2ICs1ODEsMjAgQEAgc3RhdGljIGludCB2Y2VfdjRfMF9zdXNwZW5kKHZvaWQgKmhh bmRsZSkKPj4+IMKgIHN0YXRpYyBpbnQgdmNlX3Y0XzBfcmVzdW1lKHZvaWQgKmhhbmRsZSkKPj4+ IMKgIHsKPj4+IMKgwqDCoMKgwqAgc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0 IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7Cj4+PiAtwqDCoMKgIGludCByOwo+Pj4gK8KgwqDCoCBp bnQgciwgaWR4Owo+Pj4gwqDCoMKgwqDCoCBpZiAoYWRldi0+dmNlLnZjcHVfYm8gPT0gTlVMTCkK Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4+IMKgwqDCoMKgwqAgaWYg KGFkZXYtPmZpcm13YXJlLmxvYWRfdHlwZSA9PSBBTURHUFVfRldfTE9BRF9QU1ApIHsKPj4+IC3C oMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBzaXplID0gYW1kZ3B1X2JvX3NpemUoYWRldi0+dmNlLnZj cHVfYm8pOwo+Pj4gLcKgwqDCoMKgwqDCoMKgIHZvaWQgKnB0ciA9IGFkZXYtPnZjZS5jcHVfYWRk cjsKPj4+IC3CoMKgwqDCoMKgwqDCoCBtZW1jcHlfdG9pbyhwdHIsIGFkZXYtPnZjZS5zYXZlZF9i bywgc2l6ZSk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKGRybV9kZXZfZW50ZXIoJmFkZXYtPmRk ZXYsICZpZHgpKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBzaXplID0g YW1kZ3B1X2JvX3NpemUoYWRldi0+dmNlLnZjcHVfYm8pOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgdm9pZCAqcHRyID0gYWRldi0+dmNlLmNwdV9hZGRyOwo+Pj4gKwo+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgbWVtY3B5X3RvaW8ocHRyLCBhZGV2LT52Y2Uuc2F2ZWRfYm8sIHNpemUp Owo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZHJtX2Rldl9leGl0KGlkeCk7Cj4+PiArwqDC oMKgwqDCoMKgwqAgfQo+Pj4gwqDCoMKgwqDCoCB9IGVsc2Ugewo+Pj4gwqDCoMKgwqDCoMKgwqDC oMKgIHIgPSBhbWRncHVfdmNlX3Jlc3VtZShhZGV2KTsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBp ZiAocikKPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS92Y25fdjNf MC5jIAo+Pj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS92Y25fdjNfMC5jCj4+PiBpbmRl eCAzZjE1YmYzNDEyM2EuLmRmMzRiZThlYzgyZCAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L3Zjbl92M18wLmMKPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L3Zjbl92M18wLmMKPj4+IEBAIC0zNCw2ICszNCw4IEBACj4+PiDCoCAjaW5jbHVkZSAi dmNuL3Zjbl8zXzBfMF9zaF9tYXNrLmgiCj4+PiDCoCAjaW5jbHVkZSAiaXZzcmNpZC92Y24vaXJx c3Jjc192Y25fMl8wLmgiCj4+PiArI2luY2x1ZGUgPGRybS9kcm1fZHJ2Lmg+Cj4+PiArCj4+PiDC oCAjZGVmaW5lIG1tVVZEX0NPTlRFWFRfSURfSU5URVJOQUxfT0ZGU0VUwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAweDI3Cj4+PiDCoCAjZGVmaW5lIG1tVVZEX0dQQ09NX1ZDUFVfQ01EX0lOVEVSTkFM X09GRlNFVMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHgwZgo+Pj4gwqAgI2RlZmluZSBtbVVWRF9H UENPTV9WQ1BVX0RBVEEwX0lOVEVSTkFMX09GRlNFVMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHgx MAo+Pj4gQEAgLTI2OCwxNiArMjcwLDIwIEBAIHN0YXRpYyBpbnQgdmNuX3YzXzBfc3dfaW5pdCh2 b2lkICpoYW5kbGUpCj4+PiDCoCBzdGF0aWMgaW50IHZjbl92M18wX3N3X2Zpbmkodm9pZCAqaGFu ZGxlKQo+Pj4gwqAgewo+Pj4gwqDCoMKgwqDCoCBzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9 IChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqKWhhbmRsZTsKPj4+IC3CoMKgwqAgaW50IGksIHI7Cj4+ PiArwqDCoMKgIGludCBpLCByLCBpZHg7Cj4+PiAtwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBhZGV2 LT52Y24ubnVtX3Zjbl9pbnN0OyBpKyspIHsKPj4+IC3CoMKgwqDCoMKgwqDCoCB2b2xhdGlsZSBz dHJ1Y3QgYW1kZ3B1X2Z3X3NoYXJlZCAqZndfc2hhcmVkOwo+Pj4gK8KgwqDCoCBpZiAoZHJtX2Rl dl9lbnRlcigmYWRldi0+ZGRldiwgJmlkeCkpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBmb3IgKGkg PSAwOyBpIDwgYWRldi0+dmNuLm51bV92Y25faW5zdDsgaSsrKSB7Cj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB2b2xhdGlsZSBzdHJ1Y3QgYW1kZ3B1X2Z3X3NoYXJlZCAqZndfc2hhcmVkOwo+ Pj4gLcKgwqDCoMKgwqDCoMKgIGlmIChhZGV2LT52Y24uaGFydmVzdF9jb25maWcgJiAoMSA8PCBp KSkKPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+Pj4gLcKgwqDCoMKgwqDC oMKgIGZ3X3NoYXJlZCA9IGFkZXYtPnZjbi5pbnN0W2ldLmZ3X3NoYXJlZF9jcHVfYWRkcjsKPj4+ IC3CoMKgwqDCoMKgwqDCoCBmd19zaGFyZWQtPnByZXNlbnRfZmxhZ18wID0gMDsKPj4+IC3CoMKg wqDCoMKgwqDCoCBmd19zaGFyZWQtPnN3X3JpbmcuaXNfZW5hYmxlZCA9IGZhbHNlOwo+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGFkZXYtPnZjbi5oYXJ2ZXN0X2NvbmZpZyAmICgxIDw8 IGkpKQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsKPj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZ3X3NoYXJlZCA9IGFkZXYtPnZjbi5pbnN0W2ldLmZ3X3No YXJlZF9jcHVfYWRkcjsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZ3X3NoYXJlZC0+cHJl c2VudF9mbGFnXzAgPSAwOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZndfc2hhcmVkLT5z d19yaW5nLmlzX2VuYWJsZWQgPSBmYWxzZTsKPj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+PiArCj4+ PiArwqDCoMKgwqDCoMKgwqAgZHJtX2Rldl9leGl0KGlkeCk7Cj4+PiDCoMKgwqDCoMKgIH0KPj4+ IMKgwqDCoMKgwqAgaWYgKGFtZGdwdV9zcmlvdl92ZihhZGV2KSkKPj4+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vYW1kL3BtL3Bvd2VycGxheS9zbXVtZ3Ivc211N19zbXVtZ3IuYyAKPj4+ IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wbS9wb3dlcnBsYXkvc211bWdyL3NtdTdfc211bWdyLmMK Pj4+IGluZGV4IGFhZTI1MjQzZWIxMC4uZDYyOGI5MTg0NmM5IDEwMDY0NAo+Pj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2FtZC9wbS9wb3dlcnBsYXkvc211bWdyL3NtdTdfc211bWdyLmMKPj4+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG0vcG93ZXJwbGF5L3NtdW1nci9zbXU3X3NtdW1nci5j Cj4+PiBAQCAtNDA1LDYgKzQwNSw4IEBAIGludCBzbXU3X3JlcXVlc3Rfc211X2xvYWRfZncoc3Ry dWN0IHBwX2h3bWdyICpod21ncikKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgVUNPREVfSURfTUVDX1NUT1JBR0UsIAo+Pj4gJnRvYy0+ZW50cnlbdG9jLT5udW1fZW50cmll cysrXSksCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJGYWlsZWQgdG8g R2V0IEZpcm13YXJlIEVudHJ5LiIsIHIgPSAtRUlOVkFMOyBnb3RvIAo+Pj4gZmFpbGVkKTsKPj4+ IMKgwqDCoMKgwqAgfQo+Pj4gKwo+Pj4gK8KgwqDCoCAvKiBBRyBUT0RPIENhbid0IGNhbGwgZHJt X2Rldl9lbnRlci9leGl0IGJlY2F1c2UgYWNjZXNzIAo+Pj4gYWRldi0+ZGRldiBoZXJlIC4uLiAq Lwo+Pj4gwqDCoMKgwqDCoCBtZW1jcHlfdG9pbyhzbXVfZGF0YS0+aGVhZGVyX2J1ZmZlci5rYWRk ciwgc211X2RhdGEtPnRvYywKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNpemVvZihz dHJ1Y3QgU01VX0RSQU1EYXRhX1RPQykpOwo+Pj4gwqDCoMKgwqDCoCBzbXVtX3NlbmRfbXNnX3Rv X3NtY193aXRoX3BhcmFtZXRlcihod21nciwKPj4KX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9hbWQtZ2Z4Cg==