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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 22FA3C3DA6E for ; Wed, 20 Dec 2023 10:57:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=fm1ipJdM5gUhdMOmaMzZ0YYa5JKIh7cSwLkNXtYvoeQ=; b=lixu0VRj6xSHD+ oNP+hXoGdhq2c+7CffD47+nI7tIy/yG8gtM5GRC8gG65kZ5hBbfy2OO1EfBppeL0MzX4ho6fGlK0O KZiuUcAjjN7VJTcQ8yzrI3HnSwojA2DL/8qXgSv8TxsheQRfIxGs9MRKS4D0LX/2abGP/ww4DviEo vDA/LBg55rPBGRQ8rXtsaaaekewTWVBr/u3jmzzSBYSpeKXH4uFmPvnrxcCWpW8BCtF+bfikc8HkV uoRKTsipvGuDqz0WX7w62NCbCmAcKmkwOrzH86wMC5wLPehyoKY/1UQtWHs93FfL058ijhaF0Juch wpp+o7YN7uYaDwohH7AQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rFuFh-00H08i-13; Wed, 20 Dec 2023 10:56:37 +0000 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1rFuFd-00H07x-24 for linux-arm-kernel@lists.infradead.org; Wed, 20 Dec 2023 10:56:35 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1703069792; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:autocrypt:autocrypt; bh=3LDXbStXynX0T4Mxxob6LJQXBFex+Ms+cavTOWNyphA=; b=WWl1VPKrJdkprHnbXrWILrFlAW1q84Gaf0tkw2InTOK0iMwwRRxttqDedY9vFVgQQp7mH+ Q38MKgx2ioUsgj3D6kPudH3gWqYnAHw89h1kMz4Q/kCr9FWclYyBD4tuH8/WoDRLO4V8He lrksRAcXaaq8mnpQTnwcFpiHk4PNc+o= Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-235-7pvYNn1iMaOfsKVGZQZjJA-1; Wed, 20 Dec 2023 05:56:30 -0500 X-MC-Unique: 7pvYNn1iMaOfsKVGZQZjJA-1 Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-40c2c6f0893so41605455e9.3 for ; Wed, 20 Dec 2023 02:56:30 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703069789; x=1703674589; h=content-transfer-encoding:in-reply-to:organization:autocrypt:from :references:cc:to:content-language:subject:user-agent:mime-version :date:message-id:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=3LDXbStXynX0T4Mxxob6LJQXBFex+Ms+cavTOWNyphA=; b=ZFblK+JuIVujPkwgLM5WRJ38SP8UDlFwcsgUusz7iscjQd+0LYedzB3n3dIvyyl7iX jkqc4SBRn5Gg1DUN8SahhfuH4rIwuefXJF97hdRFPq7It40fJtq697kuxFEJIyNYFOAS pOiRsIiSXcoDAtCUrqAbqlTO7SBy45erfBXsRXIMWm97kiFd/KhjZhOqIP1NAc0G8Ylo Uq4p1BWCW3YFI3yF17lWt+NEJnrzr/ib921D1q9SjH7tiFXQpz/HArwYyUHCoerNfp/2 Nz+B6NsXxhcLUCLCoTMUNIyPm63qpp1HlISvrGILqCiToyhBGlScLr/g8s2QXIcNvSf/ 3kIg== X-Gm-Message-State: AOJu0Yxd2PGYXlhuvNp/6eWegaK0ttCfX4h6z+kNfetJr2p+aUrRRwsM z0+AdoQw7f7jex21sfe686LdCmEFSZ9nf3IE1HFF+DnAFv6fRhW2M9DVro7/vl+zu87K/pj+mfL 1Mq18EPQrhKL9phGWC7ZWI5hgY3vO3+nfaGU= X-Received: by 2002:a1c:7c11:0:b0:40c:55a7:772f with SMTP id x17-20020a1c7c11000000b0040c55a7772fmr7289074wmc.146.1703069789337; Wed, 20 Dec 2023 02:56:29 -0800 (PST) X-Google-Smtp-Source: AGHT+IH3ab73NcCHmA2HFIUnD86YS7awwuMGPGKp7xdcA2cfKbsQgb25u6HQPW7k40LvQYe14aRuyQ== X-Received: by 2002:a1c:7c11:0:b0:40c:55a7:772f with SMTP id x17-20020a1c7c11000000b0040c55a7772fmr7289047wmc.146.1703069788835; Wed, 20 Dec 2023 02:56:28 -0800 (PST) Received: from ?IPV6:2003:cb:c73b:eb00:8e25:6953:927:1802? (p200300cbc73beb008e25695309271802.dip0.t-ipconnect.de. [2003:cb:c73b:eb00:8e25:6953:927:1802]) by smtp.gmail.com with ESMTPSA id n11-20020a05600c3b8b00b0040b3d8907fesm6114763wms.29.2023.12.20.02.56.27 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 20 Dec 2023 02:56:28 -0800 (PST) Message-ID: <699cb1db-51eb-460e-9ceb-1ce08ca03050@redhat.com> Date: Wed, 20 Dec 2023 11:56:26 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v4 02/16] mm: Batch-copy PTE ranges during fork() To: Ryan Roberts , Catalin Marinas , Will Deacon , Ard Biesheuvel , Marc Zyngier , Oliver Upton , James Morse , Suzuki K Poulose , Zenghui Yu , Andrey Ryabinin , Alexander Potapenko , Andrey Konovalov , Dmitry Vyukov , Vincenzo Frascino , Andrew Morton , Anshuman Khandual , Matthew Wilcox , Yu Zhao , Mark Rutland , Kefeng Wang , John Hubbard , Zi Yan , Barry Song <21cnbao@gmail.com>, Alistair Popple , Yang Shi Cc: linux-arm-kernel@lists.infradead.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org References: <20231218105100.172635-1-ryan.roberts@arm.com> <20231218105100.172635-3-ryan.roberts@arm.com> <0bef5423-6eea-446b-8854-980e9c23a948@redhat.com> <7c0236ad-01f3-437f-8b04-125d69e90dc0@redhat.com> <9a58b1a2-2c13-4fa0-8ffa-2b3d9655f1b6@arm.com> <28968568-f920-47ac-b6fd-87528ffd8f77@redhat.com> <10b0b562-c1c0-4a66-9aeb-a6bff5c218f6@arm.com> <8f8023cb-3c31-4ead-a9e6-03a10e9490c6@redhat.com> From: David Hildenbrand Autocrypt: addr=david@redhat.com; keydata= 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 WNyWQQ== Organization: Red Hat In-Reply-To: X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231220_025633_847035_9676A4FF X-CRM114-Status: GOOD ( 24.83 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gMjAuMTIuMjMgMTE6NDEsIFJ5YW4gUm9iZXJ0cyB3cm90ZToKPiBPbiAyMC8xMi8yMDIzIDEw OjE2LCBEYXZpZCBIaWxkZW5icmFuZCB3cm90ZToKPj4gT24gMjAuMTIuMjMgMTE6MTEsIFJ5YW4g Um9iZXJ0cyB3cm90ZToKPj4+IE9uIDIwLzEyLzIwMjMgMDk6NTQsIERhdmlkIEhpbGRlbmJyYW5k IHdyb3RlOgo+Pj4+IE9uIDIwLjEyLjIzIDEwOjUxLCBSeWFuIFJvYmVydHMgd3JvdGU6Cj4+Pj4+ IE9uIDIwLzEyLzIwMjMgMDk6MTcsIERhdmlkIEhpbGRlbmJyYW5kIHdyb3RlOgo+Pj4+Pj4gT24g MTkuMTIuMjMgMTg6NDIsIFJ5YW4gUm9iZXJ0cyB3cm90ZToKPj4+Pj4+PiBPbiAxOS8xMi8yMDIz IDE3OjIyLCBEYXZpZCBIaWxkZW5icmFuZCB3cm90ZToKPj4+Pj4+Pj4gT24gMTkuMTIuMjMgMDk6 MzAsIFJ5YW4gUm9iZXJ0cyB3cm90ZToKPj4+Pj4+Pj4+IE9uIDE4LzEyLzIwMjMgMTc6NDcsIERh dmlkIEhpbGRlbmJyYW5kIHdyb3RlOgo+Pj4+Pj4+Pj4+IE9uIDE4LjEyLjIzIDExOjUwLCBSeWFu IFJvYmVydHMgd3JvdGU6Cj4+Pj4+Pj4+Pj4+IENvbnZlcnQgY29weV9wdGVfcmFuZ2UoKSB0byBj b3B5IGEgYmF0Y2ggb2YgcHRlcyBpbiBvbmUgZ28uIEEgZ2l2ZW4KPj4+Pj4+Pj4+Pj4gYmF0Y2gg aXMgZGV0ZXJtaW5lZCBieSB0aGUgYXJjaGl0ZWN0dXJlIHdpdGggdGhlIG5ldyBoZWxwZXIsCj4+ Pj4+Pj4+Pj4+IHB0ZV9iYXRjaF9yZW1haW5pbmcoKSwgYW5kIG1hcHMgYSBwaHlzaWNhbGx5IGNv bnRpZ3VvdXMgYmxvY2sgb2YgbWVtb3J5LAo+Pj4+Pj4+Pj4+PiBhbGwgYmVsb25naW5nIHRvIHRo ZSBzYW1lIGZvbGlvLiBBIHB0ZSBiYXRjaCBpcyB0aGVuIHdyaXRlLXByb3RlY3RlZCBpbgo+Pj4+ Pj4+Pj4+PiBvbmUgZ28gaW4gdGhlIHBhcmVudCB1c2luZyB0aGUgbmV3IGhlbHBlciwgcHRlcF9z ZXRfd3Jwcm90ZWN0cygpIGFuZCBpcwo+Pj4+Pj4+Pj4+PiBzZXQgaW4gb25lIGdvIGluIHRoZSBj aGlsZCB1c2luZyB0aGUgbmV3IGhlbHBlciwgc2V0X3B0ZXNfZnVsbCgpLgo+Pj4+Pj4+Pj4+Pgo+ Pj4+Pj4+Pj4+PiBUaGUgcHJpbWFyeSBtb3RpdmF0aW9uIGZvciB0aGlzIGNoYW5nZSBpcyB0byBy ZWR1Y2UgdGhlIG51bWJlciBvZiB0bGIKPj4+Pj4+Pj4+Pj4gbWFpbnRlbmFuY2Ugb3BlcmF0aW9u cyB0aGF0IHRoZSBhcm02NCBiYWNrZW5kIGhhcyB0byBwZXJmb3JtIGR1cmluZwo+Pj4+Pj4+Pj4+ PiBmb3JrLCBhcyBpdCBpcyBhYm91dCB0byBhZGQgdHJhbnNwYXJlbnQgc3VwcG9ydCBmb3IgdGhl ICJjb250aWd1b3VzIGJpdCIKPj4+Pj4+Pj4+Pj4gaW4gaXRzIHB0ZXMuIEJ5IHdyaXRlLXByb3Rl Y3RpbmcgdGhlIHBhcmVudCB1c2luZyB0aGUgbmV3Cj4+Pj4+Pj4+Pj4+IHB0ZXBfc2V0X3dycHJv dGVjdHMoKSAobm90ZSB0aGUgJ3MnIGF0IHRoZSBlbmQpIGZ1bmN0aW9uLCB0aGUgYmFja2VuZAo+ Pj4+Pj4+Pj4+PiBjYW4gYXZvaWQgaGF2aW5nIHRvIHVuZm9sZCBjb250aWcgcmFuZ2VzIG9mIFBU RXMsIHdoaWNoIGlzIGV4cGVuc2l2ZSwKPj4+Pj4+Pj4+Pj4gd2hlbiBhbGwgcHRlcyBpbiB0aGUg cmFuZ2UgYXJlIGJlaW5nIHdyaXRlLXByb3RlY3RlZC4gU2ltaWxhcmx5LCBieQo+Pj4+Pj4+Pj4+ PiB1c2luZyBzZXRfcHRlc19mdWxsKCkgcmF0aGVyIHRoYW4gc2V0X3B0ZV9hdCgpIHRvIHNldCB1 cCBwdGVzIGluIHRoZQo+Pj4+Pj4+Pj4+PiBjaGlsZCwgdGhlIGJhY2tlbmQgZG9lcyBub3QgbmVl ZCB0byBmb2xkIGEgY29udGlndW91cyByYW5nZSBvbmNlIHRoZXkKPj4+Pj4+Pj4+Pj4gYXJlIGFs bCBwb3B1bGF0ZWQgLSB0aGV5IGNhbiBiZSBpbml0aWFsbHkgcG9wdWxhdGVkIGFzIGEgY29udGln dW91cwo+Pj4+Pj4+Pj4+PiByYW5nZSBpbiB0aGUgZmlyc3QgcGxhY2UuCj4+Pj4+Pj4+Pj4+Cj4+ Pj4+Pj4+Pj4+IFRoaXMgY29kZSBpcyB2ZXJ5IHBlcmZvcm1hbmNlIHNlbnNpdGl2ZSwgYW5kIGEg c2lnbmlmaWNhbnQgYW1vdW50IG9mCj4+Pj4+Pj4+Pj4+IGVmZm9ydCBoYXMgYmVlbiBwdXQgaW50 byBub3QgcmVncmVzc2luZyBwZXJmb3JtYW5jZSBmb3IgdGhlIG9yZGVyLTAKPj4+Pj4+Pj4+Pj4g Zm9saW8gY2FzZS4gQnkgZGVmYXVsdCwgcHRlX2JhdGNoX3JlbWFpbmluZygpIGlzIGNvbXBpbGUg Y29uc3RhbnQgMSwKPj4+Pj4+Pj4+Pj4gd2hpY2ggZW5hYmxlcyB0aGUgY29tcGlsZXIgdG8gc2lt cGxpZnkgdGhlIGV4dHJhIGxvb3BzIHRoYXQgYXJlIGFkZGVkCj4+Pj4+Pj4+Pj4+IGZvciBiYXRj aGluZyBhbmQgcHJvZHVjZSBjb2RlIHRoYXQgaXMgZXF1aXZhbGVudCAoYW5kIGVxdWFsbHkKPj4+ Pj4+Pj4+Pj4gcGVyZm9ybWFudCkgYXMgdGhlIHByZXZpb3VzIGltcGxlbWVudGF0aW9uLgo+Pj4+ Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+PiBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgdGhlIGNvcmUtbW0gcmVm YWN0b3Jpbmcgb25seSBhbmQgYSBzZXBhcmF0ZSBjaGFuZ2UKPj4+Pj4+Pj4+Pj4gd2lsbCBpbXBs ZW1lbnQgcHRlX2JhdGNoX3JlbWFpbmluZygpLCBwdGVwX3NldF93cnByb3RlY3RzKCkgYW5kCj4+ Pj4+Pj4+Pj4+IHNldF9wdGVzX2Z1bGwoKSBpbiB0aGUgYXJtNjQgYmFja2VuZCB0byByZWFsaXpl IHRoZSBwZXJmb3JtYW5jZQo+Pj4+Pj4+Pj4+PiBpbXByb3ZlbWVudCBhcyBwYXJ0IG9mIHRoZSB3 b3JrIHRvIGVuYWJsZSBjb250cHRlIG1hcHBpbmdzLgo+Pj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+PiBU byBlbnN1cmUgdGhlIGFybTY0IGlzIHBlcmZvcm1hbnQgb25jZSBpbXBsZW1lbnRlZCwgdGhpcyBj aGFuZ2UgaXMgdmVyeQo+Pj4+Pj4+Pj4+PiBjYXJlZnVsIHRvIG9ubHkgY2FsbCBwdGVwX2dldCgp IG9uY2UgcGVyIHB0ZSBiYXRjaC4KPj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pj4gVGhlIGZvbGxvd2lu ZyBtaWNyb2JlbmNobWFyayByZXN1bHRzIGRlbW9uc3RhdGUgdGhhdCB0aGVyZSBpcyBubwo+Pj4+ Pj4+Pj4+PiBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBjaGFuZ2UgYWZ0ZXIgdGhpcyBwYXRjaC4g Rm9yayBpcyBjYWxsZWQgaW4gYQo+Pj4+Pj4+Pj4+PiB0aWdodCBsb29wIGluIGEgcHJvY2VzcyB3 aXRoIDFHIG9mIHBvcHVsYXRlZCBtZW1vcnkgYW5kIHRoZSB0aW1lIGZvciB0aGUKPj4+Pj4+Pj4+ Pj4gZnVuY3Rpb24gdG8gZXhlY3V0ZSBpcyBtZWFzdXJlZC4gMTAwIGl0ZXJhdGlvbnMgcGVyIHJ1 biwgOCBydW5zCj4+Pj4+Pj4+Pj4+IHBlcmZvcm1lZCBvbiBib3RoIEFwcGxlIE0yIChWTSkgYW5k IEFtcGVyZSBBbHRyYSAoYmFyZSBtZXRhbCkuIFRlc3RzCj4+Pj4+Pj4+Pj4+IHBlcmZvcm1lZCBm b3IgY2FzZSB3aGVyZSAxRyBtZW1vcnkgaXMgY29tcHJpc2VkIG9mIG9yZGVyLTAgZm9saW9zIGFu ZAo+Pj4+Pj4+Pj4+PiBjYXNlIHdoZXJlIGNvbXByaXNlZCBvZiBwdGUtbWFwcGVkIG9yZGVyLTkg Zm9saW9zLiBOZWdhdGl2ZSBpcyBmYXN0ZXIsCj4+Pj4+Pj4+Pj4+IHBvc2l0aXZlIGlzIHNsb3dl ciwgY29tcGFyZWQgdG8gYmFzZWxpbmUgdXBvbiB3aGljaCB0aGUgc2VyaWVzIGlzIGJhc2VkOgo+ Pj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+PiB8IEFwcGxlIE0yIFZNwqDCoCB8IG9yZGVyLTAgKHB0ZS1t YXApIHwgb3JkZXItOSAocHRlLW1hcCkgfAo+Pj4+Pj4+Pj4+PiB8IGZvcmvCoMKgwqDCoMKgwqDC oMKgwqAgfC0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLXwKPj4+Pj4+Pj4+ Pj4gfCBtaWNyb2JlbmNowqDCoMKgIHzCoMKgwqAgbWVhbiB8wqDCoCBzdGRldiB8wqDCoMKgIG1l YW4gfMKgwqAgc3RkZXYgfAo+Pj4+Pj4+Pj4+PiB8LS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwt LS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLXwKPj4+Pj4+Pj4+Pj4gfCBiYXNlbGluZcKgwqDC oMKgwqAgfMKgwqDCoCAwLjAlIHzCoMKgwqAgMS4xJSB8wqDCoMKgIDAuMCUgfMKgwqDCoCAxLjIl IHwKPj4+Pj4+Pj4+Pj4gfCBhZnRlci1jaGFuZ2XCoCB8wqDCoCAtMS4wJSB8wqDCoMKgIDIuMCUg fMKgwqAgLTAuMSUgfMKgwqDCoCAxLjElIHwKPj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pj4gfCBBbXBl cmUgQWx0cmHCoCB8IG9yZGVyLTAgKHB0ZS1tYXApIHwgb3JkZXItOSAocHRlLW1hcCkgfAo+Pj4+ Pj4+Pj4+PiB8IGZvcmvCoMKgwqDCoMKgwqDCoMKgwqAgfC0tLS0tLS0tLS0tLS0tLS0tLS18LS0t LS0tLS0tLS0tLS0tLS0tLXwKPj4+Pj4+Pj4+Pj4gfCBtaWNyb2JlbmNowqDCoMKgIHzCoMKgwqAg bWVhbiB8wqDCoCBzdGRldiB8wqDCoMKgIG1lYW4gfMKgwqAgc3RkZXYgfAo+Pj4+Pj4+Pj4+PiB8 LS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLXwK Pj4+Pj4+Pj4+Pj4gfCBiYXNlbGluZcKgwqDCoMKgwqAgfMKgwqDCoCAwLjAlIHzCoMKgwqAgMS4w JSB8wqDCoMKgIDAuMCUgfMKgwqDCoCAwLjElIHwKPj4+Pj4+Pj4+Pj4gfCBhZnRlci1jaGFuZ2XC oCB8wqDCoCAtMC4xJSB8wqDCoMKgIDEuMiUgfMKgwqAgLTAuMSUgfMKgwqDCoCAwLjElIHwKPj4+ Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pj4gVGVzdGVkLWJ5OiBKb2huIEh1YmJhcmQgPGpodWJiYXJkQG52 aWRpYS5jb20+Cj4+Pj4+Pj4+Pj4+IFJldmlld2VkLWJ5OiBBbGlzdGFpciBQb3BwbGUgPGFwb3Bw bGVAbnZpZGlhLmNvbT4KPj4+Pj4+Pj4+Pj4gU2lnbmVkLW9mZi1ieTogUnlhbiBSb2JlcnRzIDxy eWFuLnJvYmVydHNAYXJtLmNvbT4KPj4+Pj4+Pj4+Pj4gLS0tCj4+Pj4+Pj4+Pj4+ICDCoMKgwqDC oMKgIGluY2x1ZGUvbGludXgvcGd0YWJsZS5oIHwgODAgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKPj4+Pj4+Pj4+Pj4gIMKgwqDCoMKgwqAgbW0vbWVtb3J5LmPCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgfCA5Mgo+Pj4+Pj4+Pj4+PiArKysrKysrKysrKysrKysrKysrKysrKysr Ky0tLS0tLS0tLS0tLS0tLQo+Pj4+Pj4+Pj4+PiAgwqDCoMKgwqDCoCAyIGZpbGVzIGNoYW5nZWQs IDEzOSBpbnNlcnRpb25zKCspLCAzMyBkZWxldGlvbnMoLSkKPj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+ Pj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oIGIvaW5jbHVkZS9saW51eC9w Z3RhYmxlLmgKPj4+Pj4+Pj4+Pj4gaW5kZXggYWY3NjM5YzNiMGEzLi5kYjkzZmI4MTQ2NWEgMTAw NjQ0Cj4+Pj4+Pj4+Pj4+IC0tLSBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oCj4+Pj4+Pj4+Pj4+ ICsrKyBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oCj4+Pj4+Pj4+Pj4+IEBAIC0yMDUsNiArMjA1 LDI3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBtZF95b3VuZyhwbWRfdCBwbWQpCj4+Pj4+Pj4+Pj4+ ICDCoMKgwqDCoMKgICNkZWZpbmUgYXJjaF9mbHVzaF9sYXp5X21tdV9tb2RlKCnCoMKgwqAgZG8g e30gd2hpbGUgKDApCj4+Pj4+Pj4+Pj4+ICDCoMKgwqDCoMKgICNlbmRpZgo+Pj4+Pj4+Pj4+PiAg wqDCoMKgwqDCoCArI2lmbmRlZiBwdGVfYmF0Y2hfcmVtYWluaW5nCj4+Pj4+Pj4+Pj4+ICsvKioK Pj4+Pj4+Pj4+Pj4gKyAqIHB0ZV9iYXRjaF9yZW1haW5pbmcgLSBOdW1iZXIgb2YgcGFnZXMgZnJv bSBhZGRyIHRvIG5leHQgYmF0Y2gKPj4+Pj4+Pj4+Pj4gYm91bmRhcnkuCj4+Pj4+Pj4+Pj4+ICsg KiBAcHRlOiBQYWdlIHRhYmxlIGVudHJ5IGZvciB0aGUgZmlyc3QgcGFnZS4KPj4+Pj4+Pj4+Pj4g KyAqIEBhZGRyOiBBZGRyZXNzIG9mIHRoZSBmaXJzdCBwYWdlLgo+Pj4+Pj4+Pj4+PiArICogQGVu ZDogQmF0Y2ggY2VpbGluZyAoZS5nLiBlbmQgb2Ygdm1hKS4KPj4+Pj4+Pj4+Pj4gKyAqCj4+Pj4+ Pj4+Pj4+ICsgKiBTb21lIGFyY2hpdGVjdHVyZXMgKGFybTY0KSBjYW4gZWZmaWNpZW50bHkgbW9k aWZ5IGEgY29udGlndW91cwo+Pj4+Pj4+Pj4+PiBiYXRjaCBvZgo+Pj4+Pj4+Pj4+PiBwdGVzLgo+ Pj4+Pj4+Pj4+PiArICogSW4gc3VjaCBjYXNlcywgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBy ZW1haW5pbmcgbnVtYmVyIG9mIHBhZ2VzIHRvCj4+Pj4+Pj4+Pj4+IHRoZSBlbmQKPj4+Pj4+Pj4+ Pj4gKyAqIG9mIHRoZSBjdXJyZW50IGJhdGNoLCBhcyBkZWZpbmVkIGJ5IGFkZHIuIFRoaXMgY2Fu IGJlIHVzZWZ1bCB3aGVuCj4+Pj4+Pj4+Pj4+IGl0ZXJhdGluZwo+Pj4+Pj4+Pj4+PiArICogb3Zl ciBwdGVzLgo+Pj4+Pj4+Pj4+PiArICoKPj4+Pj4+Pj4+Pj4gKyAqIE1heSBiZSBvdmVycmlkZGVu IGJ5IHRoZSBhcmNoaXRlY3R1cmUsIGVsc2UgYmF0Y2ggc2l6ZSBpcyBhbHdheXMgMS4KPj4+Pj4+ Pj4+Pj4gKyAqLwo+Pj4+Pj4+Pj4+PiArc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcHRlX2Jh dGNoX3JlbWFpbmluZyhwdGVfdCBwdGUsIHVuc2lnbmVkIGxvbmcKPj4+Pj4+Pj4+Pj4gYWRkciwK Pj4+Pj4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgdW5zaWduZWQgbG9uZyBlbmQpCj4+Pj4+Pj4+Pj4+ICt7Cj4+Pj4+Pj4+Pj4+ICvCoMKgwqAg cmV0dXJuIDE7Cj4+Pj4+Pj4+Pj4+ICt9Cj4+Pj4+Pj4+Pj4+ICsjZW5kaWYKPj4+Pj4+Pj4+Pgo+ Pj4+Pj4+Pj4+IEl0J3MgYSBzaGFtZSB3ZSBub3cgbG9zZSB0aGUgb3B0aW1pemF0aW9uIGZvciBh bGwgb3RoZXIgYXJjaHRpZWN0dXJlcy4KPj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+IFdhcyB0aGVyZSBu byB3YXkgdG8gaGF2ZSBzb21lIGJhc2ljIGJhdGNoaW5nIG1lY2hhbmlzbSB0aGF0IGRvZXNuJ3QK Pj4+Pj4+Pj4+PiByZXF1aXJlCj4+Pj4+Pj4+Pj4gYXJjaAo+Pj4+Pj4+Pj4+IHNwZWNpZmljcz8K Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+PiBJIHRyaWVkIGEgYnVuY2ggb2YgdGhpbmdzIGJ1dCB1bHRpbWF0 ZWx5IHRoZSB3YXkgSSd2ZSBkb25lIGl0IHdhcyB0aGUgb25seQo+Pj4+Pj4+Pj4gd2F5Cj4+Pj4+ Pj4+PiB0byByZWR1Y2UgdGhlIG9yZGVyLTAgZm9yayByZWdyZXNzaW9uIHRvIDAuCj4+Pj4+Pj4+ Pgo+Pj4+Pj4+Pj4gTXkgb3JpZ2luYWwgdjMgcG9zdGluZyB3YXMgY29zdGluZyA1JSBleHRyYSBh bmQgZXZlbiBteSBmaXJzdCBhdHRlbXB0IGF0IGFuCj4+Pj4+Pj4+PiBhcmNoLXNwZWNpZmljIHZl cnNpb24gdGhhdCBkaWRuJ3QgcmVzb2x2ZSB0byBhIGNvbXBpbGUtdGltZSBjb25zdGFudCAxCj4+ Pj4+Pj4+PiBzdGlsbAo+Pj4+Pj4+Pj4gY29zdCBhbiBleHRyYSAzJS4KPj4+Pj4+Pj4+Cj4+Pj4+ Pj4+Pgo+Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4gSSdkIGhhdmUgdGhvdWdodCB0aGF0IHNvbWV0aGlu ZyB2ZXJ5IGJhc2ljIHdvdWxkIGhhdmUgd29ya2VkIGxpa2U6Cj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+ PiAqIENoZWNrIGlmIFBURSBpcyB0aGUgc2FtZSB3aGVuIHNldHRpbmcgdGhlIFBGTiB0byAwLgo+ Pj4+Pj4+Pj4+ICogQ2hlY2sgdGhhdCBQRk4gaXMgY29uc2VjdXRpdmUKPj4+Pj4+Pj4+PiAqIENo ZWNrIHRoYXQgYWxsIFBGTnMgYmVsb25nIHRvIHRoZSBzYW1lIGZvbGlvCj4+Pj4+Pj4+Pgo+Pj4+ Pj4+Pj4gSSBoYXZlbid0IHRyaWVkIHRoaXMgZXhhY3QgYXBwcm9hY2gsIGJ1dCBJJ2QgYmUgc3Vy cHJpc2VkIGlmIEkgY2FuIGdldCB0aGUKPj4+Pj4+Pj4+IHJlZ3Jlc3Npb24gdW5kZXIgNCUgd2l0 aCB0aGlzLiBGdXJ0aGVyIGFsb25nIHRoZSBzZXJpZXMgSSBzcGVudCBhIGxvdCBvZgo+Pj4+Pj4+ Pj4gdGltZQo+Pj4+Pj4+Pj4gaGF2aW5nIHRvIGZpZGRsZSB3aXRoIHRoZSBhcm02NCBpbXBsZW1l bnRhdGlvbjsgZXZlcnkgY29uZGl0aW9uYWwgYW5kIGV2ZXJ5Cj4+Pj4+Pj4+PiBtZW1vcnkgcmVh ZCAoZXZlbiB3aGVuIGluIGNhY2hlKSB3YXMgYSBwcm9ibGVtLiBUaGVyZSBpcyBqdXN0IHNvIGxp dHRsZSBpbgo+Pj4+Pj4+Pj4gdGhlCj4+Pj4+Pj4+PiBpbm5lciBsb29wIHRoYXQgZXZlcnkgaW5z dHJ1Y3Rpb24gbWF0dGVycy4gKEF0IGxlYXN0IG9uIEFtcGVyZSBBbHRyYSBhbmQKPj4+Pj4+Pj4+ IEFwcGxlCj4+Pj4+Pj4+PiBNMikuCj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4gT2YgY291cnNlIGlmIHlv dSdyZSB3aWxsaW5nIHRvIHBheSB0aGF0IDQtNSUgZm9yIG9yZGVyLTAgdGhlbiB0aGUKPj4+Pj4+ Pj4+IGJlbmVmaXQgdG8KPj4+Pj4+Pj4+IG9yZGVyLTkgaXMgYXJvdW5kIDEwJSBpbiBteSBtZWFz dXJlbWVudHMuIFBlcnNvbmFsbHkgdGhvdWdoLCBJJ2QgcHJlZmVyIHRvCj4+Pj4+Pj4+PiBwbGF5 Cj4+Pj4+Pj4+PiBzYWZlIGFuZCBlbnN1cmUgdGhlIGNvbW1vbiBvcmRlci0wIGNhc2UgZG9lc24n dCByZWdyZXNzLCBhcyB5b3UgcHJldmlvdXNseQo+Pj4+Pj4+Pj4gc3VnZ2VzdGVkLgo+Pj4+Pj4+ Pj4KPj4+Pj4+Pj4KPj4+Pj4+Pj4gSSBqdXN0IGhhY2tlZCBzb21ldGhpbmcgdXAsIG9uIHRvcCBv ZiBteSBiZWxvdmVkIHJtYXAgY2xlYW51cC9iYXRjaGluZwo+Pj4+Pj4+PiBzZXJpZXMuIEkKPj4+ Pj4+Pj4gaW1wbGVtZW50ZWQgdmVyeSBnZW5lcmljIGFuZCBzaW1wbGUgYmF0Y2hpbmcgZm9yIGxh cmdlIGZvbGlvcyAoYWxsIFBURSBiaXRzCj4+Pj4+Pj4+IGV4Y2VwdCB0aGUgUEZOIGhhdmUgdG8g bWF0Y2gpLgo+Pj4+Pj4+Pgo+Pj4+Pj4+PiBTb21lIHZlcnkgcXVpY2sgdGVzdGluZyAoZG9uJ3Qg dHJ1c3QgZWFjaCBsYXN0ICUgKSBvbiBJbnRlbChSKSBYZW9uKFIpCj4+Pj4+Pj4+IFNpbHZlcgo+ Pj4+Pj4+PiA0MjEwUiBDUFUuCj4+Pj4+Pj4+Cj4+Pj4+Pj4+IG9yZGVyLTA6IDAuMDE0MjEwIC0+ IDAuMDEzOTY5Cj4+Pj4+Pj4+Cj4+Pj4+Pj4+IC0+IEFyb3VuZCAxLjcgJSBmYXN0ZXIKPj4+Pj4+ Pj4KPj4+Pj4+Pj4gb3JkZXItOTogMC4wMTQzNzMgLT4gMC4wMDkxNDkKPj4+Pj4+Pj4KPj4+Pj4+ Pj4gLT4gQXJvdW5kIDM2LjMgJSBmYXN0ZXIKPj4+Pj4+Pgo+Pj4+Pj4+IFdlbGwgSSBndWVzcyB0 aGF0IHNob3dzIG1lIDopCj4+Pj4+Pj4KPj4+Pj4+PiBJJ2xsIGRvIGEgcmV2aWV3IGFuZCBydW4g dGhlIHRlc3RzIG9uIG15IEhXIHRvIHNlZSBpZiBpdCBjb25jdXJzLgo+Pj4+Pj4KPj4+Pj4+Cj4+ Pj4+PiBJIHB1c2hlZCBhIHNpbXBsZSBjb21waWxlIGZpeHVwICh3ZSBuZWVkIHB0ZV9uZXh0X3Bm bigpKS4KPj4+Pj4KPj4+Pj4gSSd2ZSBqdXN0IGJlZW4gdHJ5aW5nIHRvIGNvbXBpbGUgYW5kIG5v dGljZWQgdGhpcy4gV2lsbCB0YWtlIGEgbG9vayBhdCB5b3VyCj4+Pj4+IHVwZGF0ZS4KPj4+Pj4K Pj4+Pj4gQnV0IHVwb24gcmV2aWV3LCBJJ3ZlIG5vdGljZWQgdGhlIHBhcnQgdGhhdCBJIHRoaW5r IG1ha2VzIHRoaXMgZGlmZmljdWx0IGZvcgo+Pj4+PiBhcm02NCB3aXRoIHRoZSBjb250cHRlIG9w dGltaXphdGlvbjsgWW91IGFyZSBjYWxsaW5nIHB0ZXBfZ2V0KCkgZm9yIGV2ZXJ5Cj4+Pj4+IHB0 ZSBpbgo+Pj4+PiB0aGUgYmF0Y2guIFdoaWxlIHRoaXMgaXMgZnVuY3Rpb25hbGx5IGNvcnJlY3Qs IG9uY2UgYXJtNjQgaGFzIHRoZSBjb250cHRlCj4+Pj4+IGNoYW5nZXMsIGl0cyBwdGVwX2dldCgp IGhhcyB0byByZWFkIGV2ZXJ5IHB0ZSBpbiB0aGUgY29udHB0ZSBibG9jayBpbiBvcmRlciB0bwo+ Pj4+PiBnYXRoZXIgdGhlIGFjY2VzcyBhbmQgZGlydHkgYml0cy4gU28gaWYgeW91ciBiYXRjaGlu ZyBmdW5jdGlvbiBlbmRzIHVwIHdlYWxraW5nCj4+Pj4+IGEgMTYgZW50cnkgY29udHB0ZSBibG9j aywgdGhhdCB3aWxsIGNhdXNlIDE2IHggMTYgcmVhZHMsIHdoaWNoIGtpbGxzCj4+Pj4+IHBlcmZv cm1hbmNlLiBUaGF0J3Mgd2h5IEkgYWRkZWQgdGhlIGFyY2gtc3BlY2lmaWMgcHRlX2JhdGNoX3Jl bWFpbmluZygpCj4+Pj4+IGZ1bmN0aW9uOyB0aGlzIGFsbG93cyB0aGUgY29yZS1tbSB0byBza2lw IHRvIHRoZSBlbmQgb2YgdGhlIGNvbnRwdGUgYmxvY2sgYW5kCj4+Pj4+IGF2b2lkIHB0ZXBfZ2V0 KCkgZm9yIHRoZSAxNSB0YWlsIHB0ZXMuIFNvIHdlIGVuZCB1cCB3aXRoIDE2IFJFQURfT05DRSgp cwo+Pj4+PiBpbnN0ZWFkCj4+Pj4+IG9mIDI1Ni4KPj4+Pj4KPj4+Pj4gSSBjb25zaWRlcmVkIG1h a2luZyBhIHB0ZXBfZ2V0X25veW91bmdkaXJ0eSgpIHZhcmlhbnQsIHdoaWNoIHdvdWxkIGF2b2lk IHRoZQo+Pj4+PiBiaXQKPj4+Pj4gZ2F0aGVyaW5nLiBCdXQgd2UgaGF2ZSBhIHNpbWlsYXIgcHJv YmxlbSBpbiB6YXBfcHRlX3JhbmdlKCkgYW5kIHRoYXQgZnVuY3Rpb24KPj4+Pj4gbmVlZHMgdGhl IGRpcnR5IGJpdCB0byB1cGRhdGUgdGhlIGZvbGlvLiBTbyBpdCBkb2Vzbid0IHdvcmsgdGhlcmUu IChzZWUgcGF0Y2ggMwo+Pj4+PiBpbiBteSBzZXJpZXMpLgo+Pj4+Pgo+Pj4+PiBJIGd1ZXNzIHlv dSBhcmUgZ29pbmcgdG8gc2F5IHRoYXQgd2Ugc2hvdWxkIGNvbWJpbmUgYm90aCBhcHByb2FjaGVz LCBzbyB0aGF0Cj4+Pj4+IHlvdXIgYmF0Y2hpbmcgbG9vcCBjYW4gc2tpcCBmb3J3YXJkIGFuIGFy Y2gtcHJvdmlkZWQgbnVtYmVyIG9mIHB0ZXM/IFRoYXQgd291bGQKPj4+Pj4gY2VydGFpbmx5IHdv cmssIGJ1dCBmZWVscyBsaWtlIGFuIG9ydGhvZ29uYWwgY2hhbmdlIHRvIHdoYXQgSSdtIHRyeWlu ZyB0bwo+Pj4+PiBhY2hpZXZlIDopLiBBbnl3YXksIEknbGwgc3BlbmQgc29tZSB0aW1lIHBsYXlp bmcgd2l0aCBpdCB0b2RheS4KPj4+Pgo+Pj4+IFlvdSBjYW4gb3ZlcndyaXRlIHRoZSBmdW5jdGlv biBvciBhZGQgc3BlY2lhbC1jYXNpbmcgaW50ZXJuYWxseSwgeWVzLgo+Pj4+Cj4+Pj4gUmlnaHQg bm93LCB5b3VyIHBhdGNoIGlzIGNhbGxlZCAibW06IEJhdGNoLWNvcHkgUFRFIHJhbmdlcyBkdXJp bmcgZm9yaygpIiBhbmQgaXQKPj4+PiBkb2Vzbid0IGRvIGFueSBvZiB0aGF0IGJlc2lkZXMgcHJl cGFyaW5nIGZvciBzb21lIGFybTY0IHdvcmsuCj4+Pj4KPj4+Cj4+PiBXZWxsIGl0IGFsbG93cyBh biBhcmNoIHRvIG9wdC1pbiB0byBiYXRjaGluZy4gQnV0IEkgc2VlIHlvdXIgcG9pbnQuCj4+Pgo+ Pj4gSG93IGRvIHlvdSB3YW50IHRvIGhhbmRsZSB5b3VyIHBhdGNoZXM/IERvIHlvdSB3YW50IHRv IGNsZWFuIHRoZW0gdXAgYW5kIEknbGwKPj4+IGJhc2UgbXkgc3R1ZmYgb24gdG9wPyBPciBkbyB5 b3Ugd2FudCBtZSB0byB0YWtlIHRoZW0gYW5kIHNvcnQgaXQgYWxsIG91dD8KPj4KPj4gV2hhdGV2 ZXIgeW91IHByZWZlciwgaXQgd2FzIG1vc3RseSBhIHF1aWNrIHByb3RvdHlwZSB0byBzZWUgaWYg d2UgY2FuIGFjaGlldmUKPj4gZGVjZW50IHBlcmZvcm1hbmNlLgo+IAo+IEknbSBhYm91dCB0byBy dW4gaXQgb24gQWx0cmEgYW5kIE0yLiBCdXQgSSBhc3N1bWUgaXQgd2lsbCBzaG93IHNpbWlsYXIg cmVzdWx0cy4KPiAKPj4KPj4gSSBjYW4gZml4dXAgdGhlIGFyY2ggdGhpbmdpZXMgKG1vc3Qgc2hv dWxkIGJlIGVhc3ksIHNvbWUgbWlnaHQgcmVxdWlyZSBhIGN1c3RvbQo+PiBwdGVfbmV4dF9wZm4o KSkKPiAKPiBXZWxsIGlmIHlvdSdyZSBoYXBweSB0byBkbyB0aGF0LCBncmVhdCEgSSdtIGtlZW4g dG8gZ2V0IHRoZSBjb250cHRlIHN0dWZmIGludG8KPiB2Ni45IGlmIGF0IGFsbCBwb3NzaWJsZSwg YW5kIEknbSBjb25jaW91cyB0aGF0IEknbSBpbnRyb2R1Y2luZyBtb3JlIGRlcGVuZGVuY2llcwo+ IG9uIHlvdS4gQW5kIGl0cyBhYm91dCB0byBiZSBob2xpZGF5IHNlYXNvbi4uLgoKVGhlcmUgaXMg c3RpbGwgcGxlbnR5IG9mIHRpbWUgZm9yIDYuOS4gSSdsbCB0cnkgdG8gZ2V0IHRoZSBybWFwIGNs ZWFudXAgCmZpbmlzaGVkIGFzYXAuCgo+IAo+PiBhbmQgeW91IGNhbiBmb2N1cyBvbiBnZXR0aW5n IGNvbnQtcHRlIHNvcnRlZCBvdXQgb24gdG9wIFtJCj4+IGFzc3VtZSB0aGF0J3Mgd2hhdCB5b3Ug d2FudCB0byB3b3JrIG9uIDopIF0uCj4gCj4gVGhhdCdzIGNlcnRhaW5seSB3aGF0IEknbSBmb2N1 c3NlZCBvbi4gQnV0IEknbSBoYXBweSB0byBkbyB3aGF0ZXZlciBpcyByZXF1aXJlZAo+IHRvIGdl dCBpdCBvdmVyIHRoZSBsaW5lLiBJIGd1ZXNzIEknbGwgc3RhcnQgYnkgZmluaXNoaW5nIG15IHJl dmlldyBvZiB5b3VyIHYxCj4gcm1hcCBzdHVmZi4KCkknbSBwbGFubmluZyBvbiBzZW5kaW5nIG91 dCBhIG5ldyB2ZXJzaW9uIHRvZGF5LgoKPiAKPj4KPj4+Cj4+PiBBcyBJIHNlZSBpdCBhdCB0aGUg bW9tZW50LCBJIHdvdWxkIGtlZXAgeW91ciBmb2xpb19wdGVfYmF0Y2goKSBhbHdheXMgY29yZSwg YnV0Cj4+PiBpbiBzdWJzZXF1ZW50IHBhdGNoLCBoYXZlIGl0IHVzZSBwdGVfYmF0Y2hfcmVtYWlu aW5nKCkgKHRoZSBhcmNoIGZ1bmN0aW9uIEkgaGF2ZQo+Pj4gaW4gbXkgc2VyaWVzLCB3aGljaCBk ZWZhdWx0cyB0byBvbmUpLgo+Pgo+PiBKdXN0IGRvdWJsZS1jaGVja2luZywgaG93IHdvdWxkIGl0 IHVzZSBwdGVfYmF0Y2hfcmVtYWluaW5nKCkgPwo+IAo+IEkgdGhpbmsgc29tZXRoaW5nIGxpa2Ug dGhpcyB3b3VsZCBkbyBpdCAodW50ZXN0ZWQpOgo+IAo+IHN0YXRpYyBpbmxpbmUgaW50IGZvbGlv X3B0ZV9iYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBsb25nIGFkZHIsCj4gCQlw dGVfdCAqc3RhcnRfcHRlcCwgcHRlX3QgcHRlLCBpbnQgbWF4X25yKQo+IHsKPiAJdW5zaWduZWQg bG9uZyBmb2xpb19lbmRfcGZuID0gZm9saW9fcGZuKGZvbGlvKSArIGZvbGlvX25yX3BhZ2VzKGZv bGlvKTsKPiAJcHRlX3QgZXhwZWN0ZWRfcHRlID0gcHRlX25leHRfcGZuKHB0ZSk7Cj4gCXB0ZV90 ICpwdGVwID0gc3RhcnRfcHRlcDsKPiAJaW50IG5yOwo+IAo+IAlmb3IgKDs7KSB7Cj4gCQluciA9 IG1pbihtYXhfbnIsIHB0ZV9iYXRjaF9yZW1haW5pbmcoKSk7Cj4gCQlwdGVwICs9IG5yOwo+IAkJ bWF4X25yIC09IG5yOwo+IAo+IAkJaWYgKG1heF9uciA9PSAwKQo+IAkJCWJyZWFrOwo+IAoKZXhw ZWN0ZWRfcHRlIHdvdWxkIGJlIG1lc3NlZCB1cC4gV2UnZCBoYXZlIHRvIGluY3JlbWVudCBpdCBh IGNvdXBsZSBvZiAKdGltZXMgdG8gbWFrZSBpdCBtYXRjaCB0aGUgbnIgb2YgcGFnZXMgd2UncmUg c2tpcHBpbmcuCgo+IAkJcHRlID0gcHRlcF9nZXQocHRlcCk7Cj4gCj4gCQkvKiBEbyBhbGwgUFRF IGJpdHMgbWF0Y2gsIGFuZCB0aGUgUEZOIGlzIGNvbnNlY3V0aXZlPyAqLwo+IAkJaWYgKCFwdGVf c2FtZShwdGUsIGV4cGVjdGVkX3B0ZSkpCj4gCQkJYnJlYWs7Cj4gCj4gCQkvKgo+IAkJICogU3Rv cCBpbW1lZGlhdGVseSBvbmNlIHdlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgZm9saW8uIEluCj4g CQkgKiBjb3JuZXIgY2FzZXMgdGhlIG5leHQgUEZOIG1pZ2h0IGZhbGwgaW50byBhIGRpZmZlcmVu dAo+IAkJICogZm9saW8uCj4gCQkgKi8KPiAJCWlmIChwdGVfcGZuKHB0ZSkgPT0gZm9saW9fZW5k X3BmbiAtIDEpCj4gCQkJYnJlYWs7Cj4gCj4gCQlleHBlY3RlZF9wdGUgPSBwdGVfbmV4dF9wZm4o ZXhwZWN0ZWRfcHRlKTsKPiAJfQo+IAo+IAlyZXR1cm4gcHRlcCAtIHN0YXJ0X3B0ZXA7Cj4gfQo+ IAo+IE9mIGNvdXJzZSwgaWYgd2UgaGF2ZSB0aGUgY29uY2VwdCBvZiBhICJwdGUgYmF0Y2giIGlu IHRoZSBjb3JlLW1tLCB0aGVuIHdlIG1pZ2h0Cj4gd2FudCB0byBjYWxsIHRoZSBhcmNoJ3MgdGhp bmcgc29tZXRoaW5nIGRpZmZlcmVudDsgcHRlIHNwYW4/IHB0ZSBjb250PyBwdGUgY29udAo+IGJh dGNoPyAuLi4KClNvLCB5b3UgbWVhbiBzb21ldGhpbmcgbGlrZQoKLyoKICAqIFRoZSBhcmNoaXRl Y3R1cmUgbWlnaHQgYmUgYWJsZSB0byB0ZWxsIHVzIGVmZmljaWVudGx5IHVzaW5nIGNvbnQtcHRl CiAgKiBiaXRzIGhvdyBtYW55IG5leHQgUFRFcyBhcmUgY2VydGFpbmx5IGNvbXBhdGlibGUuIFNv IGluIHRoYXQgY2FzZSwKICAqIHNpbXBseSBza2lwIGZvcndhcmQuCiAgKi8KbnIgPSBtaW4obWF4 X25yLCBucl9jb250X3B0ZXMocHRlcCkpOwouLi4KCkkgd29uZGVyIGlmIHNvbWV0aGluZyBzaW1w bGUgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmdW5jdGlvbiBtaWdodCBiZSBnb29kIAplbm91Z2ggZm9y IGFybSB3aXRoIGNvbnQtcHRlIGFzIGEgZmlyc3Qgc3RlcDoKCm5yID0gbnJfY29udF9wdGVzKHN0 YXJ0X3B0ZXApCmlmIChuciAhPSAxKSB7CglyZXR1cm4gbWluKG1heF9uciwgbnIpOwp9CgpXaGlj aCB3b3VsZCBnZXQgb3B0aW1pemVkIG91dCBvbiBvdGhlciBhcmNoaXRlY3R1cmVzLgoKCi0tIApD aGVlcnMsCgpEYXZpZCAvIGRoaWxkZW5iCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJt LWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21h aWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=