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 8DB89C54FB9 for ; Thu, 16 Nov 2023 13:21:39 +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=fdmnEEVGKBqFhyROr0GyAPjZegU9we1cLD2HdEc8PzU=; b=Gy4t7LYydvWb3c DnTC2d6/hmECFh4czWWsKgq+KIgV2sf26DCNXXMamrpnRG5z9JNpmuGu9MaP4X/+BhK3qiK02Fwak Y63f0Y+3PpdejdfB12QGnCfmPGY8nx3hAjxkfO+RruHzadPAGFmzuj+dUUUg5F5y/CXQsu+iz1nFN 0OTLTcMkqsKQnCazhh8SBy4sGbfV71s6X57ENfmKkl0+uP86319ZfGXbi0L0jrhFNfODMS1Fv/dsX ZKUt5Mfrv3QMAbU5jUmeSJvXvqyCLacrkM029KBwpujMiAuIJ/h11WKcoydiaFjENTBM1cVhQM0vk 2O3LGeal6bc6smnVd8PQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r3cIv-003ZwE-0s; Thu, 16 Nov 2023 13:21:09 +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 1r3cIq-003Zuz-0N for linux-arm-kernel@lists.infradead.org; Thu, 16 Nov 2023 13:21:07 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1700140863; 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=ZaxEL0ZzhiqRmp282bnibUpJqMW8Pbd+lLQ9GxcqZ2k=; b=Mij0piyZUQavubgzKyCoYBZ/CKiwRgSXdOj1UdMCEvTxnaR2Ag1SV9e/bJqvcgr/nVTaYf TYI9LaFiCWjpye3oWsNFi9FitO99fdBfws+9FqOhI9lfuDc0qAgxsXxD+qGhfmzLvzCa0c JIVib6BRBKHc+flLVRx2tqmPQIgHEHY= Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-325-JkNOzwbyN-W9nz1v5D0PQA-1; Thu, 16 Nov 2023 08:21:01 -0500 X-MC-Unique: JkNOzwbyN-W9nz1v5D0PQA-1 Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-4092164ed09so4490295e9.2 for ; Thu, 16 Nov 2023 05:21:01 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700140861; x=1700745661; 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=ZaxEL0ZzhiqRmp282bnibUpJqMW8Pbd+lLQ9GxcqZ2k=; b=m2ZmgxyxPzJlaXtOvq+WrSbESbw3eVQFFGrKugGm0c4e2AkNVz7qNx54SwTSKJgn/K zmyb5MZapd4F3zJxIbLsI+bGwsWzdiXdfJ7v8ON5C7ici8/GWsEs4Gf0vb0kQANUytqA YordxkKsAuQ6UUmQ2h4yqf78DHKXJ82PA0B3Sd4VbSQjOIqs5mOIiyJNVSnqpvkLtTor rN/4v+mqhX2R/SCHvqHBcUvUv3t+KiG0j6J93e7VE0S5YBJEWWHTbz+pODkE+S3pkt1o 3rzL8pXi4rycnjHbQnrRu602+cjTTbbpRXyYqMgGwVDNfeKTUmdb0tUQWElHddDurFZz cdJg== X-Gm-Message-State: AOJu0Yy4M2xzWkK/4+fS5gXFz3AE1JYcaNaBJvV6DH+4AAXWxI9dNGnF MprjCQqdfFNv1spzMgvUHdg1084a+axhighe/eY5iFVi5babTGOyPadcQxj/Hy1kKHihPS15j27 poahYuQk1svYtG8AN6RZZGXwnmsIwl0lskLY= X-Received: by 2002:a05:600c:19c6:b0:402:d72:bee5 with SMTP id u6-20020a05600c19c600b004020d72bee5mr12709785wmq.21.1700140860712; Thu, 16 Nov 2023 05:21:00 -0800 (PST) X-Google-Smtp-Source: AGHT+IHfi60v693+UaITaSmF+E4cBqzIZpK1FttPoV2rxY1j250FYs2vW8gLqmY+RQ/KD/NpPihU/A== X-Received: by 2002:a05:600c:19c6:b0:402:d72:bee5 with SMTP id u6-20020a05600c19c600b004020d72bee5mr12709763wmq.21.1700140860191; Thu, 16 Nov 2023 05:21:00 -0800 (PST) Received: from ?IPV6:2a09:80c0:192:0:5dac:bf3d:c41:c3e7? ([2a09:80c0:192:0:5dac:bf3d:c41:c3e7]) by smtp.gmail.com with ESMTPSA id u5-20020a05600c138500b003fee6e170f9sm3657743wmf.45.2023.11.16.05.20.58 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 16 Nov 2023 05:20:59 -0800 (PST) Message-ID: <08ef2c36-2b9c-4b96-9d1d-68cca0f68ba5@redhat.com> Date: Thu, 16 Nov 2023 14:20:58 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2 01/14] 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 Cc: linux-arm-kernel@lists.infradead.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org References: <20231115163018.1303287-1-ryan.roberts@arm.com> <20231115163018.1303287-2-ryan.roberts@arm.com> <89a9fe07-a5c5-4a99-b588-e6145053c58f@redhat.com> <1459f78b-e80c-4f21-bc65-f0ab259d348a@arm.com> From: David Hildenbrand Autocrypt: addr=david@redhat.com; keydata= xsFNBFXLn5EBEAC+zYvAFJxCBY9Tr1xZgcESmxVNI/0ffzE/ZQOiHJl6mGkmA1R7/uUpiCjJ dBrn+lhhOYjjNefFQou6478faXE6o2AhmebqT4KiQoUQFV4R7y1KMEKoSyy8hQaK1umALTdL QZLQMzNE74ap+GDK0wnacPQFpcG1AE9RMq3aeErY5tujekBS32jfC/7AnH7I0v1v1TbbK3Gp XNeiN4QroO+5qaSr0ID2sz5jtBLRb15RMre27E1ImpaIv2Jw8NJgW0k/D1RyKCwaTsgRdwuK Kx/Y91XuSBdz0uOyU/S8kM1+ag0wvsGlpBVxRR/xw/E8M7TEwuCZQArqqTCmkG6HGcXFT0V9 PXFNNgV5jXMQRwU0O/ztJIQqsE5LsUomE//bLwzj9IVsaQpKDqW6TAPjcdBDPLHvriq7kGjt WhVhdl0qEYB8lkBEU7V2Yb+SYhmhpDrti9Fq1EsmhiHSkxJcGREoMK/63r9WLZYI3+4W2rAc UucZa4OT27U5ZISjNg3Ev0rxU5UH2/pT4wJCfxwocmqaRr6UYmrtZmND89X0KigoFD/XSeVv jwBRNjPAubK9/k5NoRrYqztM9W6sJqrH8+UWZ1Idd/DdmogJh0gNC0+N42Za9yBRURfIdKSb B3JfpUqcWwE7vUaYrHG1nw54pLUoPG6sAA7Mehl3nd4pZUALHwARAQABzSREYXZpZCBIaWxk ZW5icmFuZCA8ZGF2aWRAcmVkaGF0LmNvbT7CwZgEEwEIAEICGwMGCwkIBwMCBhUIAgkKCwQW AgMBAh4BAheAAhkBFiEEG9nKrXNcTDpGDfzKTd4Q9wD/g1oFAl8Ox4kFCRKpKXgACgkQTd4Q 9wD/g1oHcA//a6Tj7SBNjFNM1iNhWUo1lxAja0lpSodSnB2g4FCZ4R61SBR4l/psBL73xktp rDHrx4aSpwkRP6Epu6mLvhlfjmkRG4OynJ5HG1gfv7RJJfnUdUM1z5kdS8JBrOhMJS2c/gPf wv1TGRq2XdMPnfY2o0CxRqpcLkx4vBODvJGl2mQyJF/gPepdDfcT8/PY9BJ7FL6Hrq1gnAo4 3Iv9qV0JiT2wmZciNyYQhmA1V6dyTRiQ4YAc31zOo2IM+xisPzeSHgw3ONY/XhYvfZ9r7W1l pNQdc2G+o4Di9NPFHQQhDw3YTRR1opJaTlRDzxYxzU6ZnUUBghxt9cwUWTpfCktkMZiPSDGd KgQBjnweV2jw9UOTxjb4LXqDjmSNkjDdQUOU69jGMUXgihvo4zhYcMX8F5gWdRtMR7DzW/YE BgVcyxNkMIXoY1aYj6npHYiNQesQlqjU6azjbH70/SXKM5tNRplgW8TNprMDuntdvV9wNkFs 9TyM02V5aWxFfI42+aivc4KEw69SE9KXwC7FSf5wXzuTot97N9Phj/Z3+jx443jo2NR34XgF 89cct7wJMjOF7bBefo0fPPZQuIma0Zym71cP61OP/i11ahNye6HGKfxGCOcs5wW9kRQEk8P9 M/k2wt3mt/fCQnuP/mWutNPt95w9wSsUyATLmtNrwccz63XOwU0EVcufkQEQAOfX3n0g0fZz Bgm/S2zF/kxQKCEKP8ID+Vz8sy2GpDvveBq4H2Y34XWsT1zLJdvqPI4af4ZSMxuerWjXbVWb T6d4odQIG0fKx4F8NccDqbgHeZRNajXeeJ3R7gAzvWvQNLz4piHrO/B4tf8svmRBL0ZB5P5A 2uhdwLU3NZuK22zpNn4is87BPWF8HhY0L5fafgDMOqnf4guJVJPYNPhUFzXUbPqOKOkL8ojk CXxkOFHAbjstSK5Ca3fKquY3rdX3DNo+EL7FvAiw1mUtS+5GeYE+RMnDCsVFm/C7kY8c2d0G NWkB9pJM5+mnIoFNxy7YBcldYATVeOHoY4LyaUWNnAvFYWp08dHWfZo9WCiJMuTfgtH9tc75 7QanMVdPt6fDK8UUXIBLQ2TWr/sQKE9xtFuEmoQGlE1l6bGaDnnMLcYu+Asp3kDT0w4zYGsx 5r6XQVRH4+5N6eHZiaeYtFOujp5n+pjBaQK7wUUjDilPQ5QMzIuCL4YjVoylWiBNknvQWBXS lQCWmavOT9sttGQXdPCC5ynI+1ymZC1ORZKANLnRAb0NH/UCzcsstw2TAkFnMEbo9Zu9w7Kv AxBQXWeXhJI9XQssfrf4Gusdqx8nPEpfOqCtbbwJMATbHyqLt7/oz/5deGuwxgb65pWIzufa N7eop7uh+6bezi+rugUI+w6DABEBAAHCwXwEGAEIACYCGwwWIQQb2cqtc1xMOkYN/MpN3hD3 AP+DWgUCXw7HsgUJEqkpoQAKCRBN3hD3AP+DWrrpD/4qS3dyVRxDcDHIlmguXjC1Q5tZTwNB boaBTPHSy/Nksu0eY7x6HfQJ3xajVH32Ms6t1trDQmPx2iP5+7iDsb7OKAb5eOS8h+BEBDeq 3ecsQDv0fFJOA9ag5O3LLNk+3x3q7e0uo06XMaY7UHS341ozXUUI7wC7iKfoUTv03iO9El5f XpNMx/YrIMduZ2+nd9Di7o5+KIwlb2mAB9sTNHdMrXesX8eBL6T9b+MZJk+mZuPxKNVfEQMQ a5SxUEADIPQTPNvBewdeI80yeOCrN+Zzwy/Mrx9EPeu59Y5vSJOx/z6OUImD/GhX7Xvkt3kq Er5KTrJz3++B6SH9pum9PuoE/k+nntJkNMmQpR4MCBaV/J9gIOPGodDKnjdng+mXliF3Ptu6 3oxc2RCyGzTlxyMwuc2U5Q7KtUNTdDe8T0uE+9b8BLMVQDDfJjqY0VVqSUwImzTDLX9S4g/8 kC4HRcclk8hpyhY2jKGluZO0awwTIMgVEzmTyBphDg/Gx7dZU1Xf8HFuE+UZ5UDHDTnwgv7E th6RC9+WrhDNspZ9fJjKWRbveQgUFCpe1sa77LAw+XFrKmBHXp9ZVIe90RMe2tRL06BGiRZr jPrnvUsUUsjRoRNJjKKA/REq+sAnhkNPPZ/NNMjaZ5b8Tovi8C0tmxiCHaQYqj7G2rgnT0kt WNyWQQ== Organization: Red Hat In-Reply-To: <1459f78b-e80c-4f21-bc65-f0ab259d348a@arm.com> 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-20231116_052104_295023_A60A8B8C X-CRM114-Status: GOOD ( 25.90 ) 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 T24gMTYuMTEuMjMgMTI6MjAsIFJ5YW4gUm9iZXJ0cyB3cm90ZToKPiBPbiAxNi8xMS8yMDIzIDEx OjAzLCBEYXZpZCBIaWxkZW5icmFuZCB3cm90ZToKPj4gT24gMTUuMTEuMjMgMTc6MzAsIFJ5YW4g Um9iZXJ0cyB3cm90ZToKPj4+IENvbnZlcnQgY29weV9wdGVfcmFuZ2UoKSB0byBjb3B5IGEgc2V0 IG9mIHB0ZXMgaW4gYSBiYXRjaC4gQSBnaXZlbiBiYXRjaAo+Pj4gbWFwcyBhIHBoeXNpY2FsbHkg Y29udGlndW91cyBibG9jayBvZiBtZW1vcnksIGFsbCBiZWxvbmdpbmcgdG8gdGhlIHNhbWUKPj4+ IGZvbGlvLCB3aXRoIHRoZSBzYW1lIHBlcm1pc3Npb25zLCBhbmQgZm9yIHNoYXJlZCBtYXBwaW5n cywgdGhlIHNhbWUKPj4+IGRpcnR5IHN0YXRlLiBUaGlzIHdpbGwgbGlrZWx5IGltcHJvdmUgcGVy Zm9ybWFuY2UgYnkgYSB0aW55IGFtb3VudCBkdWUKPj4+IHRvIGJhdGNoaW5nIHRoZSBmb2xpbyBy ZWZlcmVuY2UgY291bnQgbWFuYWdlbWVudCBhbmQgY2FsbGluZyBzZXRfcHRlcygpCj4+PiByYXRo ZXIgdGhhbiBtYWtpbmcgaW5kaXZpZHVhbCBjYWxscyB0byBzZXRfcHRlX2F0KCkuCj4+Pgo+Pj4g SG93ZXZlciwgdGhlIHByaW1hcnkgbW90aXZhdGlvbiBmb3IgdGhpcyBjaGFuZ2UgaXMgdG8gcmVk dWNlIHRoZSBudW1iZXIKPj4+IG9mIHRsYiBtYWludGVuYW5jZSBvcGVyYXRpb25zIHRoYXQgdGhl IGFybTY0IGJhY2tlbmQgaGFzIHRvIHBlcmZvcm0KPj4+IGR1cmluZyBmb3JrLCBhcyBpdCBpcyBh Ym91dCB0byBhZGQgdHJhbnNwYXJlbnQgc3VwcG9ydCBmb3IgdGhlCj4+PiAiY29udGlndW91cyBi aXQiIGluIGl0cyBwdGVzLiBCeSB3cml0ZS1wcm90ZWN0aW5nIHRoZSBwYXJlbnQgdXNpbmcgdGhl Cj4+PiBuZXcgcHRlcF9zZXRfd3Jwcm90ZWN0cygpIChub3RlIHRoZSAncycgYXQgdGhlIGVuZCkg ZnVuY3Rpb24sIHRoZQo+Pj4gYmFja2VuZCBjYW4gYXZvaWQgaGF2aW5nIHRvIHVuZm9sZCBjb250 aWcgcmFuZ2VzIG9mIFBURXMsIHdoaWNoIGlzCj4+PiBleHBlbnNpdmUsIHdoZW4gYWxsIHB0ZXMg aW4gdGhlIHJhbmdlIGFyZSBiZWluZyB3cml0ZS1wcm90ZWN0ZWQuCj4+PiBTaW1pbGFybHksIGJ5 IHVzaW5nIHNldF9wdGVzKCkgcmF0aGVyIHRoYW4gc2V0X3B0ZV9hdCgpIHRvIHNldCB1cCBwdGVz Cj4+PiBpbiB0aGUgY2hpbGQsIHRoZSBiYWNrZW5kIGRvZXMgbm90IG5lZWQgdG8gZm9sZCBhIGNv bnRpZ3VvdXMgcmFuZ2Ugb25jZQo+Pj4gdGhleSBhcmUgYWxsIHBvcHVsYXRlZCAtIHRoZXkgY2Fu IGJlIGluaXRpYWxseSBwb3B1bGF0ZWQgYXMgYSBjb250aWd1b3VzCj4+PiByYW5nZSBpbiB0aGUg Zmlyc3QgcGxhY2UuCj4+Pgo+Pj4gVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIHRoZSBjb3JlLW1tIHJl ZmFjdG9yaW5nIG9ubHksIGFuZCBpbnRyb2R1Y2VzCj4+PiBwdGVwX3NldF93cnByb3RlY3RzKCkg d2l0aCBhIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gdGhhdCBjYWxscwo+Pj4gcHRlcF9zZXRfd3Jw cm90ZWN0KCkgZm9yIGVhY2ggcHRlIGluIHRoZSByYW5nZS4gQSBzZXBhcmF0ZSBjaGFuZ2Ugd2ls bAo+Pj4gaW1wbGVtZW50IHB0ZXBfc2V0X3dycHJvdGVjdHMoKSBpbiB0aGUgYXJtNjQgYmFja2Vu ZCB0byByZWFsaXplIHRoZQo+Pj4gcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgYXMgcGFydCBvZiB0 aGUgd29yayB0byBlbmFibGUgY29udHB0ZSBtYXBwaW5ncy4KPj4+Cj4+PiBTaWduZWQtb2ZmLWJ5 OiBSeWFuIFJvYmVydHMgPHJ5YW4ucm9iZXJ0c0Bhcm0uY29tPgo+Pj4gLS0tCj4+PiAgwqAgaW5j bHVkZS9saW51eC9wZ3RhYmxlLmggfMKgIDEzICsrKwo+Pj4gIMKgIG1tL21lbW9yeS5jwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHwgMTc1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyst LS0tLS0tLS0KPj4+ICDCoCAyIGZpbGVzIGNoYW5nZWQsIDE1MCBpbnNlcnRpb25zKCspLCAzOCBk ZWxldGlvbnMoLSkKPj4+Cj4+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgg Yi9pbmNsdWRlL2xpbnV4L3BndGFibGUuaAo+Pj4gaW5kZXggYWY3NjM5YzNiMGEzLi4xYzUwZjhh MGZkZGUgMTAwNjQ0Cj4+PiAtLS0gYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaAo+Pj4gKysrIGIv aW5jbHVkZS9saW51eC9wZ3RhYmxlLmgKPj4+IEBAIC02MjIsNiArNjIyLDE5IEBAIHN0YXRpYyBp bmxpbmUgdm9pZCBwdGVwX3NldF93cnByb3RlY3Qoc3RydWN0IG1tX3N0cnVjdAo+Pj4gKm1tLCB1 bnNpZ25lZCBsb25nIGFkZHJlcwo+Pj4gIMKgIH0KPj4+ICDCoCAjZW5kaWYKPj4+ICDCoCArI2lm bmRlZiBwdGVwX3NldF93cnByb3RlY3RzCj4+PiArc3RydWN0IG1tX3N0cnVjdDsKPj4+ICtzdGF0 aWMgaW5saW5lIHZvaWQgcHRlcF9zZXRfd3Jwcm90ZWN0cyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwK Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgbG9uZyBhZGRyZXNz LCBwdGVfdCAqcHRlcCwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWdu ZWQgaW50IG5yKQo+Pj4gK3sKPj4+ICvCoMKgwqAgdW5zaWduZWQgaW50IGk7Cj4+PiArCj4+PiAr wqDCoMKgIGZvciAoaSA9IDA7IGkgPCBucjsgaSsrLCBhZGRyZXNzICs9IFBBR0VfU0laRSwgcHRl cCsrKQo+Pj4gK8KgwqDCoMKgwqDCoMKgIHB0ZXBfc2V0X3dycHJvdGVjdChtbSwgYWRkcmVzcywg cHRlcCk7Cj4+PiArfQo+Pj4gKyNlbmRpZgo+Pj4gKwo+Pj4gIMKgIC8qCj4+PiAgwqDCoCAqIE9u IHNvbWUgYXJjaGl0ZWN0dXJlcyBoYXJkd2FyZSBkb2VzIG5vdCBzZXQgcGFnZSBhY2Nlc3MgYml0 IHdoZW4gYWNjZXNzaW5nCj4+PiAgwqDCoCAqIG1lbW9yeSBwYWdlLCBpdCBpcyByZXNwb25zaWJp bGl0eSBvZiBzb2Z0d2FyZSBzZXR0aW5nIHRoaXMgYml0LiBJdCBicmluZ3MKPj4+IGRpZmYgLS1n aXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCj4+PiBpbmRleCAxZjE4ZWQ0YTU0OTcuLmI3 YzgyMjg4ODNjZiAxMDA2NDQKPj4+IC0tLSBhL21tL21lbW9yeS5jCj4+PiArKysgYi9tbS9tZW1v cnkuYwo+Pj4gQEAgLTkyMSw0NiArOTIxLDEyOSBAQCBjb3B5X3ByZXNlbnRfcGFnZShzdHJ1Y3Qg dm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsCj4+PiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192 bWEKPj4+ICDCoMKgwqDCoMKgwqDCoMKgwqAgLyogVWZmZC13cCBuZWVkcyB0byBiZSBkZWxpdmVy ZWQgdG8gZGVzdCBwdGUgYXMgd2VsbCAqLwo+Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoCBwdGUgPSBw dGVfbWt1ZmZkX3dwKHB0ZSk7Cj4+PiAgwqDCoMKgwqDCoCBzZXRfcHRlX2F0KGRzdF92bWEtPnZt X21tLCBhZGRyLCBkc3RfcHRlLCBwdGUpOwo+Pj4gLcKgwqDCoCByZXR1cm4gMDsKPj4+ICvCoMKg wqAgcmV0dXJuIDE7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9u ZyBwYWdlX2NvbnRfbWFwcGVkX3ZhZGRyKHN0cnVjdCBwYWdlICpwYWdlLAo+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgcGFnZSAqYW5jaG9yLCB1bnNpZ25lZCBsb25n IGFuY2hvcl92YWRkcikKPj4+ICt7Cj4+PiArwqDCoMKgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0Owo+ Pj4gK8KgwqDCoCB1bnNpZ25lZCBsb25nIHZhZGRyOwo+Pj4gKwo+Pj4gK8KgwqDCoCBvZmZzZXQg PSAocGFnZV90b19wZm4ocGFnZSkgLSBwYWdlX3RvX3BmbihhbmNob3IpKSA8PCBQQUdFX1NISUZU Owo+Pj4gK8KgwqDCoCB2YWRkciA9IGFuY2hvcl92YWRkciArIG9mZnNldDsKPj4+ICsKPj4+ICvC oMKgwqAgaWYgKGFuY2hvciA+IHBhZ2UpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAodmFkZHIg PiBhbmNob3JfdmFkZHIpCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4+ ICvCoMKgwqAgfSBlbHNlIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAodmFkZHIgPCBhbmNob3Jf dmFkZHIpCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gVUxPTkdfTUFYOwo+Pj4g K8KgwqDCoCB9Cj4+PiArCj4+PiArwqDCoMKgIHJldHVybiB2YWRkcjsKPj4+ICt9Cj4+PiArCj4+ PiArc3RhdGljIGludCBmb2xpb19ucl9wYWdlc19jb250X21hcHBlZChzdHJ1Y3QgZm9saW8gKmZv bGlvLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1 Y3QgcGFnZSAqcGFnZSwgcHRlX3QgKnB0ZSwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwK Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHRlX3QgcHRl bnQsIGJvb2wgKmFueV9kaXJ0eSkKPj4+ICt7Cj4+PiArwqDCoMKgIGludCBmbG9vcHM7Cj4+PiAr wqDCoMKgIGludCBpOwo+Pj4gK8KgwqDCoCB1bnNpZ25lZCBsb25nIHBmbjsKPj4+ICvCoMKgwqAg cGdwcm90X3QgcHJvdDsKPj4+ICvCoMKgwqAgc3RydWN0IHBhZ2UgKmZvbGlvX2VuZDsKPj4+ICsK Pj4+ICvCoMKgwqAgaWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkKPj4+ICvCoMKgwqDCoMKg wqDCoCByZXR1cm4gMTsKPj4+ICsKPj4+ICvCoMKgwqAgZm9saW9fZW5kID0gJmZvbGlvLT5wYWdl ICsgZm9saW9fbnJfcGFnZXMoZm9saW8pOwo+Pj4gK8KgwqDCoCBlbmQgPSBtaW4ocGFnZV9jb250 X21hcHBlZF92YWRkcihmb2xpb19lbmQsIHBhZ2UsIGFkZHIpLCBlbmQpOwo+Pj4gK8KgwqDCoCBm bG9vcHMgPSAoZW5kIC0gYWRkcikgPj4gUEFHRV9TSElGVDsKPj4+ICvCoMKgwqAgcGZuID0gcGFn ZV90b19wZm4ocGFnZSk7Cj4+PiArwqDCoMKgIHByb3QgPSBwdGVfcGdwcm90KHB0ZV9ta29sZChw dGVfbWtjbGVhbihwdGVudCkpKTsKPj4+ICsKPj4+ICvCoMKgwqAgKmFueV9kaXJ0eSA9IHB0ZV9k aXJ0eShwdGVudCk7Cj4+PiArCj4+PiArwqDCoMKgIHBmbisrOwo+Pj4gK8KgwqDCoCBwdGUrKzsK Pj4+ICsKPj4+ICvCoMKgwqAgZm9yIChpID0gMTsgaSA8IGZsb29wczsgaSsrKSB7Cj4+PiArwqDC oMKgwqDCoMKgwqAgcHRlbnQgPSBwdGVwX2dldChwdGUpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIHB0 ZW50ID0gcHRlX21rb2xkKHB0ZV9ta2NsZWFuKHB0ZW50KSk7Cj4+PiArCj4+PiArwqDCoMKgwqDC oMKgwqAgaWYgKCFwdGVfcHJlc2VudChwdGVudCkgfHwgcHRlX3BmbihwdGVudCkgIT0gcGZuIHx8 Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwZ3Byb3RfdmFsKHB0ZV9wZ3Byb3QocHRlbnQp KSAhPSBwZ3Byb3RfdmFsKHByb3QpKQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7 Cj4+PiArCj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHB0ZV9kaXJ0eShwdGVudCkpCj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAqYW55X2RpcnR5ID0gdHJ1ZTsKPj4+ICsKPj4+ICvCoMKgwqDC oMKgwqDCoCBwZm4rKzsKPj4+ICvCoMKgwqDCoMKgwqDCoCBwdGUrKzsKPj4+ICvCoMKgwqAgfQo+ Pj4gKwo+Pj4gK8KgwqDCoCByZXR1cm4gaTsKPj4+ICDCoCB9Cj4+PiAgwqAgwqAgLyoKPj4+IC0g KiBDb3B5IG9uZSBwdGUuwqAgUmV0dXJucyAwIGlmIHN1Y2NlZWRlZCwgb3IgLUVBR0FJTiBpZiBv bmUgcHJlYWxsb2NhdGVkIHBhZ2UKPj4+IC0gKiBpcyByZXF1aXJlZCB0byBjb3B5IHRoaXMgcHRl Lgo+Pj4gKyAqIENvcHkgc2V0IG9mIGNvbnRpZ3VvdXMgcHRlcy7CoCBSZXR1cm5zIG51bWJlciBv ZiBwdGVzIGNvcGllZCBpZiBzdWNjZWVkZWQKPj4+ICsgKiAoYWx3YXlzIGd0ZSAxKSwgb3IgLUVB R0FJTiBpZiBvbmUgcHJlYWxsb2NhdGVkIHBhZ2UgaXMgcmVxdWlyZWQgdG8gY29weSB0aGUKPj4+ ICsgKiBmaXJzdCBwdGUuCj4+PiAgwqDCoCAqLwo+Pj4gIMKgIHN0YXRpYyBpbmxpbmUgaW50Cj4+ PiAtY29weV9wcmVzZW50X3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsIHN0cnVj dCB2bV9hcmVhX3N0cnVjdCAqc3JjX3ZtYSwKPj4+IC3CoMKgwqDCoMKgwqDCoMKgIHB0ZV90ICpk c3RfcHRlLCBwdGVfdCAqc3JjX3B0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgKnJzcywKPj4+ IC3CoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBmb2xpbyAqKnByZWFsbG9jKQo+Pj4gK2NvcHlfcHJl c2VudF9wdGVzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSwgc3RydWN0IHZtX2FyZWFf c3RydWN0Cj4+PiAqc3JjX3ZtYSwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqAgcHRlX3QgKmRzdF9w dGUsIHB0ZV90ICpzcmNfcHRlLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBsb25n IGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoCBpbnQgKnJz cywgc3RydWN0IGZvbGlvICoqcHJlYWxsb2MpCj4+PiAgwqAgewo+Pj4gIMKgwqDCoMKgwqAgc3Ry dWN0IG1tX3N0cnVjdCAqc3JjX21tID0gc3JjX3ZtYS0+dm1fbW07Cj4+PiAgwqDCoMKgwqDCoCB1 bnNpZ25lZCBsb25nIHZtX2ZsYWdzID0gc3JjX3ZtYS0+dm1fZmxhZ3M7Cj4+PiAgwqDCoMKgwqDC oCBwdGVfdCBwdGUgPSBwdGVwX2dldChzcmNfcHRlKTsKPj4+ICDCoMKgwqDCoMKgIHN0cnVjdCBw YWdlICpwYWdlOwo+Pj4gIMKgwqDCoMKgwqAgc3RydWN0IGZvbGlvICpmb2xpbzsKPj4+ICvCoMKg wqAgaW50IG5yID0gMTsKPj4+ICvCoMKgwqAgYm9vbCBhbm9uOwo+Pj4gK8KgwqDCoCBib29sIGFu eV9kaXJ0eSA9IHB0ZV9kaXJ0eShwdGUpOwo+Pj4gK8KgwqDCoCBpbnQgaTsKPj4+ICDCoCDCoMKg wqDCoMKgIHBhZ2UgPSB2bV9ub3JtYWxfcGFnZShzcmNfdm1hLCBhZGRyLCBwdGUpOwo+Pj4gLcKg wqDCoCBpZiAocGFnZSkKPj4+ICvCoMKgwqAgaWYgKHBhZ2UpIHsKPj4+ICDCoMKgwqDCoMKgwqDC oMKgwqAgZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpOwo+Pj4gLcKgwqDCoCBpZiAocGFnZSAmJiBm b2xpb190ZXN0X2Fub24oZm9saW8pKSB7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgLyoKPj4+IC3CoMKg wqDCoMKgwqDCoMKgICogSWYgdGhpcyBwYWdlIG1heSBoYXZlIGJlZW4gcGlubmVkIGJ5IHRoZSBw YXJlbnQgcHJvY2VzcywKPj4+IC3CoMKgwqDCoMKgwqDCoMKgICogY29weSB0aGUgcGFnZSBpbW1l ZGlhdGVseSBmb3IgdGhlIGNoaWxkIHNvIHRoYXQgd2UnbGwgYWx3YXlzCj4+PiAtwqDCoMKgwqDC oMKgwqDCoCAqIGd1YXJhbnRlZSB0aGUgcGlubmVkIHBhZ2Ugd29uJ3QgYmUgcmFuZG9tbHkgcmVw bGFjZWQgaW4gdGhlCj4+PiAtwqDCoMKgwqDCoMKgwqDCoCAqIGZ1dHVyZS4KPj4+IC3CoMKgwqDC oMKgwqDCoMKgICovCj4+PiAtwqDCoMKgwqDCoMKgwqAgZm9saW9fZ2V0KGZvbGlvKTsKPj4+IC3C oMKgwqDCoMKgwqDCoCBpZiAodW5saWtlbHkocGFnZV90cnlfZHVwX2Fub25fcm1hcChwYWdlLCBm YWxzZSwgc3JjX3ZtYSkpKSB7Cj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBQYWdlIG1h eSBiZSBwaW5uZWQsIHdlIGhhdmUgdG8gY29weS4gKi8KPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGZvbGlvX3B1dChmb2xpbyk7Cj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4g Y29weV9wcmVzZW50X3BhZ2UoZHN0X3ZtYSwgc3JjX3ZtYSwgZHN0X3B0ZSwgc3JjX3B0ZSwKPj4+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYWRkciwg cnNzLCBwcmVhbGxvYywgcGFnZSk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgYW5vbiA9IGZvbGlvX3Rl c3RfYW5vbihmb2xpbyk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgbnIgPSBmb2xpb19ucl9wYWdlc19j b250X21hcHBlZChmb2xpbywgcGFnZSwgc3JjX3B0ZSwgYWRkciwKPj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVuZCwgcHRlLCAmYW55X2RpcnR5KTsK Pj4+ICsKPj4+ICvCoMKgwqDCoMKgwqDCoCBmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKywgcGFnZSsr KSB7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoYW5vbikgewo+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKgo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICogSWYgdGhpcyBwYWdlIG1heSBoYXZlIGJlZW4gcGlubmVkIGJ5IHRoZQo+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogcGFyZW50IHByb2Nlc3MsIGNvcHkgdGhl IHBhZ2UgaW1tZWRpYXRlbHkgZm9yCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgKiB0aGUgY2hpbGQgc28gdGhhdCB3ZSdsbCBhbHdheXMgZ3VhcmFudGVlIHRoZQo+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogcGlubmVkIHBhZ2Ugd29uJ3QgYmUgcmFu ZG9tbHkgcmVwbGFjZWQgaW4gdGhlCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgKiBmdXR1cmUuCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHVubGlrZWx5KHBhZ2VfdHJ5X2R1 cF9hbm9uX3JtYXAoCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBwYWdlLCBmYWxzZSwgc3JjX3ZtYSkpKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGkgIT0gMCkKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIFBhZ2UgbWF5IGJlIHBpbm5lZCwgd2UgaGF2ZSB0byBj b3B5LiAqLwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVy biBjb3B5X3ByZXNlbnRfcGFnZSgKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGRzdF92bWEsIHNyY192bWEsIGRzdF9wdGUsCj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzcmNfcHRlLCBhZGRyLCByc3Ms IHByZWFsbG9jLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgcGFnZSk7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcnNzW01NX0FOT05QQUdFU10rKzsKPj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgVk1fQlVHX09OKFBhZ2VBbm9uRXhjbHVzaXZl KHBhZ2UpKTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0gZWxzZSB7Cj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBhZ2VfZHVwX2ZpbGVfcm1hcChwYWdlLCBmYWxzZSk7 Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJzc1ttbV9jb3VudGVyX2ZpbGUo cGFnZSldKys7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+PiAgwqDCoMKgwqDCoMKg wqDCoMKgIH0KPj4+IC3CoMKgwqDCoMKgwqDCoCByc3NbTU1fQU5PTlBBR0VTXSsrOwo+Pj4gLcKg wqDCoCB9IGVsc2UgaWYgKHBhZ2UpIHsKPj4+IC3CoMKgwqDCoMKgwqDCoCBmb2xpb19nZXQoZm9s aW8pOwo+Pj4gLcKgwqDCoMKgwqDCoMKgIHBhZ2VfZHVwX2ZpbGVfcm1hcChwYWdlLCBmYWxzZSk7 Cj4+PiAtwqDCoMKgwqDCoMKgwqAgcnNzW21tX2NvdW50ZXJfZmlsZShwYWdlKV0rKzsKPj4+ICsK Pj4+ICvCoMKgwqDCoMKgwqDCoCBuciA9IGk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgZm9saW9fcmVm X2FkZChmb2xpbywgbnIpOwo+Pj4gIMKgwqDCoMKgwqAgfQo+Pj4gIMKgIMKgwqDCoMKgwqAgLyoK Pj4+IEBAIC05NjgsMjQgKzEwNTEsMjggQEAgY29weV9wcmVzZW50X3B0ZShzdHJ1Y3Qgdm1fYXJl YV9zdHJ1Y3QgKmRzdF92bWEsIHN0cnVjdAo+Pj4gdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEsCj4+ PiAgwqDCoMKgwqDCoMKgICogaW4gdGhlIHBhcmVudCBhbmQgdGhlIGNoaWxkCj4+PiAgwqDCoMKg wqDCoMKgICovCj4+PiAgwqDCoMKgwqDCoCBpZiAoaXNfY293X21hcHBpbmcodm1fZmxhZ3MpICYm IHB0ZV93cml0ZShwdGUpKSB7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgcHRlcF9zZXRfd3Jwcm90ZWN0 KHNyY19tbSwgYWRkciwgc3JjX3B0ZSk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgcHRlcF9zZXRfd3Jw cm90ZWN0cyhzcmNfbW0sIGFkZHIsIHNyY19wdGUsIG5yKTsKPj4+ICDCoMKgwqDCoMKgwqDCoMKg wqAgcHRlID0gcHRlX3dycHJvdGVjdChwdGUpOwo+Pgo+PiBZb3UgbGlrZWx5IHdhbnQgYW4gImFu eV9wdGVfd3JpdGFibGUiIGNoZWNrIGhlcmUgaW5zdGVhZCwgbm8/Cj4+Cj4+IEFueSBvcGVyYXRp b25zIHRoYXQgdGFyZ2V0IGEgc2luZ2xlIGluZGlpdmlkdWFsIFBURSB3aGlsZSBtdWx0aXBsZSBQ VEVzIGFyZQo+PiBhZGp1c3RlZCBhcmUgc3VzcGljaW91cyA6KQo+IAo+IFRoZSBpZGVhIGlzIHRo YXQgSSd2ZSBhbHJlYWR5IGNvbnN0cmFpbmVkIHRoZSBiYXRjaCBvZiBwYWdlcyBzdWNoIHRoYXQg dGhlCj4gcGVybWlzc2lvbnMgYXJlIGFsbCB0aGUgc2FtZSAoc2VlIGZvbGlvX25yX3BhZ2VzX2Nv bnRfbWFwcGVkKCkpLiBTbyBpZiB0aGUgZmlyc3QKPiBwdGUgaXMgd3JpdGFibGUsIHRoZW4gdGhl eSBhbGwgYXJlIC0gc29tZXRoaW5nIGhhcyBnb25lIGJhZGx5IHdyb25nIGlmIHNvbWUgYXJlCj4g d3JpdGFibGUgYW5kIG90aGVycyBhcmUgbm90LgoKSSB3b25kZXIgaWYgaXQgd291bGQgYmUgY2xl YW5lciBhbmQgZWFzaWVyIHRvIG5vdCBkbyB0aGF0LCB0aG91Z2guCgpTaW1wbHkgcmVjb3JkIGlm IGFueSBwdGUgaXMgd3JpdGFibGUuIEFmdGVyd2FyZHMgdGhleSB3aWxsICphbGwqIGJlIFIvTyAK YW5kIHlvdSBjYW4gc2V0IHRoZSBjb250IGJpdCwgY29ycmVjdD8KCi0tIApDaGVlcnMsCgpEYXZp ZCAvIGRoaWxkZW5iCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0 cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGlu Zm8vbGludXgtYXJtLWtlcm5lbAo=