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 CD108C3DA6E for ; Wed, 20 Dec 2023 09:51:50 +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-Transfer-Encoding:Content-Type: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=qh8eg5AaBoI6L+YWhpaLoJtCPscMtrowoj7EpOwB75M=; b=4CABHNzJGMLncK fVN1sINv5ty7Rx6X54rMX3jmRYXJPTpzB0KDpeIB64lXhy34unFLFDjxeyY4i5+OrJZP26k809gXM jYFPxd2P3WRB0AizyQbXeVBElT8OCZRDHodmzSqh+oTvfO2ftgSgjhROhM0DM7gvRHdtIxNtus3gN fDTjDCavp9qr/Nt/XaPUV+byXKbXQihdnWokIBKA4IKasaZ2VqnPuxgxxSISkPPQF0o5pgHb60hCm s4L/7TNfd1SRRXQwMA4D+w6SjJ/lUFNElPGjN7D3CdBN5rKEbNJ4s6r7i6bMDqzCvfTu7vVDJSf7X UiXXwgzk1oaammUeS9tQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rFtEU-00Glyr-0l; Wed, 20 Dec 2023 09:51:18 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rFtEQ-00Glx7-0P for linux-arm-kernel@lists.infradead.org; Wed, 20 Dec 2023 09:51:16 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 765F31FB; Wed, 20 Dec 2023 01:51:53 -0800 (PST) Received: from [10.57.75.247] (unknown [10.57.75.247]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id DDB023F5A1; Wed, 20 Dec 2023 01:51:03 -0800 (PST) Message-ID: <9a58b1a2-2c13-4fa0-8ffa-2b3d9655f1b6@arm.com> Date: Wed, 20 Dec 2023 09:51:01 +0000 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v4 02/16] mm: Batch-copy PTE ranges during fork() Content-Language: en-GB To: David Hildenbrand , 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> From: Ryan Roberts In-Reply-To: <7c0236ad-01f3-437f-8b04-125d69e90dc0@redhat.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231220_015114_259153_F0C6C8AF X-CRM114-Status: GOOD ( 39.95 ) 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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gMjAvMTIvMjAyMyAwOToxNywgRGF2aWQgSGlsZGVuYnJhbmQgd3JvdGU6Cj4gT24gMTkuMTIu MjMgMTg6NDIsIFJ5YW4gUm9iZXJ0cyB3cm90ZToKPj4gT24gMTkvMTIvMjAyMyAxNzoyMiwgRGF2 aWQgSGlsZGVuYnJhbmQgd3JvdGU6Cj4+PiBPbiAxOS4xMi4yMyAwOTozMCwgUnlhbiBSb2JlcnRz IHdyb3RlOgo+Pj4+IE9uIDE4LzEyLzIwMjMgMTc6NDcsIERhdmlkIEhpbGRlbmJyYW5kIHdyb3Rl Ogo+Pj4+PiBPbiAxOC4xMi4yMyAxMTo1MCwgUnlhbiBSb2JlcnRzIHdyb3RlOgo+Pj4+Pj4gQ29u dmVydCBjb3B5X3B0ZV9yYW5nZSgpIHRvIGNvcHkgYSBiYXRjaCBvZiBwdGVzIGluIG9uZSBnby4g QSBnaXZlbgo+Pj4+Pj4gYmF0Y2ggaXMgZGV0ZXJtaW5lZCBieSB0aGUgYXJjaGl0ZWN0dXJlIHdp dGggdGhlIG5ldyBoZWxwZXIsCj4+Pj4+PiBwdGVfYmF0Y2hfcmVtYWluaW5nKCksIGFuZCBtYXBz IGEgcGh5c2ljYWxseSBjb250aWd1b3VzIGJsb2NrIG9mIG1lbW9yeSwKPj4+Pj4+IGFsbCBiZWxv bmdpbmcgdG8gdGhlIHNhbWUgZm9saW8uIEEgcHRlIGJhdGNoIGlzIHRoZW4gd3JpdGUtcHJvdGVj dGVkIGluCj4+Pj4+PiBvbmUgZ28gaW4gdGhlIHBhcmVudCB1c2luZyB0aGUgbmV3IGhlbHBlciwg cHRlcF9zZXRfd3Jwcm90ZWN0cygpIGFuZCBpcwo+Pj4+Pj4gc2V0IGluIG9uZSBnbyBpbiB0aGUg Y2hpbGQgdXNpbmcgdGhlIG5ldyBoZWxwZXIsIHNldF9wdGVzX2Z1bGwoKS4KPj4+Pj4+Cj4+Pj4+ PiBUaGUgcHJpbWFyeSBtb3RpdmF0aW9uIGZvciB0aGlzIGNoYW5nZSBpcyB0byByZWR1Y2UgdGhl IG51bWJlciBvZiB0bGIKPj4+Pj4+IG1haW50ZW5hbmNlIG9wZXJhdGlvbnMgdGhhdCB0aGUgYXJt NjQgYmFja2VuZCBoYXMgdG8gcGVyZm9ybSBkdXJpbmcKPj4+Pj4+IGZvcmssIGFzIGl0IGlzIGFi b3V0IHRvIGFkZCB0cmFuc3BhcmVudCBzdXBwb3J0IGZvciB0aGUgImNvbnRpZ3VvdXMgYml0Igo+ Pj4+Pj4gaW4gaXRzIHB0ZXMuIEJ5IHdyaXRlLXByb3RlY3RpbmcgdGhlIHBhcmVudCB1c2luZyB0 aGUgbmV3Cj4+Pj4+PiBwdGVwX3NldF93cnByb3RlY3RzKCkgKG5vdGUgdGhlICdzJyBhdCB0aGUg ZW5kKSBmdW5jdGlvbiwgdGhlIGJhY2tlbmQKPj4+Pj4+IGNhbiBhdm9pZCBoYXZpbmcgdG8gdW5m b2xkIGNvbnRpZyByYW5nZXMgb2YgUFRFcywgd2hpY2ggaXMgZXhwZW5zaXZlLAo+Pj4+Pj4gd2hl biBhbGwgcHRlcyBpbiB0aGUgcmFuZ2UgYXJlIGJlaW5nIHdyaXRlLXByb3RlY3RlZC4gU2ltaWxh cmx5LCBieQo+Pj4+Pj4gdXNpbmcgc2V0X3B0ZXNfZnVsbCgpIHJhdGhlciB0aGFuIHNldF9wdGVf YXQoKSB0byBzZXQgdXAgcHRlcyBpbiB0aGUKPj4+Pj4+IGNoaWxkLCB0aGUgYmFja2VuZCBkb2Vz IG5vdCBuZWVkIHRvIGZvbGQgYSBjb250aWd1b3VzIHJhbmdlIG9uY2UgdGhleQo+Pj4+Pj4gYXJl IGFsbCBwb3B1bGF0ZWQgLSB0aGV5IGNhbiBiZSBpbml0aWFsbHkgcG9wdWxhdGVkIGFzIGEgY29u dGlndW91cwo+Pj4+Pj4gcmFuZ2UgaW4gdGhlIGZpcnN0IHBsYWNlLgo+Pj4+Pj4KPj4+Pj4+IFRo aXMgY29kZSBpcyB2ZXJ5IHBlcmZvcm1hbmNlIHNlbnNpdGl2ZSwgYW5kIGEgc2lnbmlmaWNhbnQg YW1vdW50IG9mCj4+Pj4+PiBlZmZvcnQgaGFzIGJlZW4gcHV0IGludG8gbm90IHJlZ3Jlc3Npbmcg cGVyZm9ybWFuY2UgZm9yIHRoZSBvcmRlci0wCj4+Pj4+PiBmb2xpbyBjYXNlLiBCeSBkZWZhdWx0 LCBwdGVfYmF0Y2hfcmVtYWluaW5nKCkgaXMgY29tcGlsZSBjb25zdGFudCAxLAo+Pj4+Pj4gd2hp Y2ggZW5hYmxlcyB0aGUgY29tcGlsZXIgdG8gc2ltcGxpZnkgdGhlIGV4dHJhIGxvb3BzIHRoYXQg YXJlIGFkZGVkCj4+Pj4+PiBmb3IgYmF0Y2hpbmcgYW5kIHByb2R1Y2UgY29kZSB0aGF0IGlzIGVx dWl2YWxlbnQgKGFuZCBlcXVhbGx5Cj4+Pj4+PiBwZXJmb3JtYW50KSBhcyB0aGUgcHJldmlvdXMg aW1wbGVtZW50YXRpb24uCj4+Pj4+Pgo+Pj4+Pj4gVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIHRoZSBj b3JlLW1tIHJlZmFjdG9yaW5nIG9ubHkgYW5kIGEgc2VwYXJhdGUgY2hhbmdlCj4+Pj4+PiB3aWxs IGltcGxlbWVudCBwdGVfYmF0Y2hfcmVtYWluaW5nKCksIHB0ZXBfc2V0X3dycHJvdGVjdHMoKSBh bmQKPj4+Pj4+IHNldF9wdGVzX2Z1bGwoKSBpbiB0aGUgYXJtNjQgYmFja2VuZCB0byByZWFsaXpl IHRoZSBwZXJmb3JtYW5jZQo+Pj4+Pj4gaW1wcm92ZW1lbnQgYXMgcGFydCBvZiB0aGUgd29yayB0 byBlbmFibGUgY29udHB0ZSBtYXBwaW5ncy4KPj4+Pj4+Cj4+Pj4+PiBUbyBlbnN1cmUgdGhlIGFy bTY0IGlzIHBlcmZvcm1hbnQgb25jZSBpbXBsZW1lbnRlZCwgdGhpcyBjaGFuZ2UgaXMgdmVyeQo+ Pj4+Pj4gY2FyZWZ1bCB0byBvbmx5IGNhbGwgcHRlcF9nZXQoKSBvbmNlIHBlciBwdGUgYmF0Y2gu Cj4+Pj4+Pgo+Pj4+Pj4gVGhlIGZvbGxvd2luZyBtaWNyb2JlbmNobWFyayByZXN1bHRzIGRlbW9u c3RhdGUgdGhhdCB0aGVyZSBpcyBubwo+Pj4+Pj4gc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgY2hh bmdlIGFmdGVyIHRoaXMgcGF0Y2guIEZvcmsgaXMgY2FsbGVkIGluIGEKPj4+Pj4+IHRpZ2h0IGxv b3AgaW4gYSBwcm9jZXNzIHdpdGggMUcgb2YgcG9wdWxhdGVkIG1lbW9yeSBhbmQgdGhlIHRpbWUg Zm9yIHRoZQo+Pj4+Pj4gZnVuY3Rpb24gdG8gZXhlY3V0ZSBpcyBtZWFzdXJlZC4gMTAwIGl0ZXJh dGlvbnMgcGVyIHJ1biwgOCBydW5zCj4+Pj4+PiBwZXJmb3JtZWQgb24gYm90aCBBcHBsZSBNMiAo Vk0pIGFuZCBBbXBlcmUgQWx0cmEgKGJhcmUgbWV0YWwpLiBUZXN0cwo+Pj4+Pj4gcGVyZm9ybWVk IGZvciBjYXNlIHdoZXJlIDFHIG1lbW9yeSBpcyBjb21wcmlzZWQgb2Ygb3JkZXItMCBmb2xpb3Mg YW5kCj4+Pj4+PiBjYXNlIHdoZXJlIGNvbXByaXNlZCBvZiBwdGUtbWFwcGVkIG9yZGVyLTkgZm9s aW9zLiBOZWdhdGl2ZSBpcyBmYXN0ZXIsCj4+Pj4+PiBwb3NpdGl2ZSBpcyBzbG93ZXIsIGNvbXBh cmVkIHRvIGJhc2VsaW5lIHVwb24gd2hpY2ggdGhlIHNlcmllcyBpcyBiYXNlZDoKPj4+Pj4+Cj4+ Pj4+PiB8IEFwcGxlIE0yIFZNwqDCoCB8IG9yZGVyLTAgKHB0ZS1tYXApIHwgb3JkZXItOSAocHRl LW1hcCkgfAo+Pj4+Pj4gfCBmb3JrwqDCoMKgwqDCoMKgwqDCoMKgIHwtLS0tLS0tLS0tLS0tLS0t LS0tfC0tLS0tLS0tLS0tLS0tLS0tLS18Cj4+Pj4+PiB8IG1pY3JvYmVuY2jCoMKgwqAgfMKgwqDC oCBtZWFuIHzCoMKgIHN0ZGV2IHzCoMKgwqAgbWVhbiB8wqDCoCBzdGRldiB8Cj4+Pj4+PiB8LS0t LS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLXwKPj4+ Pj4+IHwgYmFzZWxpbmXCoMKgwqDCoMKgIHzCoMKgwqAgMC4wJSB8wqDCoMKgIDEuMSUgfMKgwqDC oCAwLjAlIHzCoMKgwqAgMS4yJSB8Cj4+Pj4+PiB8IGFmdGVyLWNoYW5nZcKgIHzCoMKgIC0xLjAl IHzCoMKgwqAgMi4wJSB8wqDCoCAtMC4xJSB8wqDCoMKgIDEuMSUgfAo+Pj4+Pj4KPj4+Pj4+IHwg QW1wZXJlIEFsdHJhwqAgfCBvcmRlci0wIChwdGUtbWFwKSB8IG9yZGVyLTkgKHB0ZS1tYXApIHwK Pj4+Pj4+IHwgZm9ya8KgwqDCoMKgwqDCoMKgwqDCoCB8LS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0t LS0tLS0tLS0tLS0tLS0tfAo+Pj4+Pj4gfCBtaWNyb2JlbmNowqDCoMKgIHzCoMKgwqAgbWVhbiB8 wqDCoCBzdGRldiB8wqDCoMKgIG1lYW4gfMKgwqAgc3RkZXYgfAo+Pj4+Pj4gfC0tLS0tLS0tLS0t LS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS18Cj4+Pj4+PiB8IGJh c2VsaW5lwqDCoMKgwqDCoCB8wqDCoMKgIDAuMCUgfMKgwqDCoCAxLjAlIHzCoMKgwqAgMC4wJSB8 wqDCoMKgIDAuMSUgfAo+Pj4+Pj4gfCBhZnRlci1jaGFuZ2XCoCB8wqDCoCAtMC4xJSB8wqDCoMKg IDEuMiUgfMKgwqAgLTAuMSUgfMKgwqDCoCAwLjElIHwKPj4+Pj4+Cj4+Pj4+PiBUZXN0ZWQtYnk6 IEpvaG4gSHViYmFyZCA8amh1YmJhcmRAbnZpZGlhLmNvbT4KPj4+Pj4+IFJldmlld2VkLWJ5OiBB bGlzdGFpciBQb3BwbGUgPGFwb3BwbGVAbnZpZGlhLmNvbT4KPj4+Pj4+IFNpZ25lZC1vZmYtYnk6 IFJ5YW4gUm9iZXJ0cyA8cnlhbi5yb2JlcnRzQGFybS5jb20+Cj4+Pj4+PiAtLS0KPj4+Pj4+IMKg wqDCoCBpbmNsdWRlL2xpbnV4L3BndGFibGUuaCB8IDgwICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrCj4+Pj4+PiDCoMKgwqAgbW0vbWVtb3J5LmPCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgfCA5MiArKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLQo+Pj4+ Pj4gwqDCoMKgIDIgZmlsZXMgY2hhbmdlZCwgMTM5IGluc2VydGlvbnMoKyksIDMzIGRlbGV0aW9u cygtKQo+Pj4+Pj4KPj4+Pj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaCBi L2luY2x1ZGUvbGludXgvcGd0YWJsZS5oCj4+Pj4+PiBpbmRleCBhZjc2MzljM2IwYTMuLmRiOTNm YjgxNDY1YSAxMDA2NDQKPj4+Pj4+IC0tLSBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oCj4+Pj4+ PiArKysgYi9pbmNsdWRlL2xpbnV4L3BndGFibGUuaAo+Pj4+Pj4gQEAgLTIwNSw2ICsyMDUsMjcg QEAgc3RhdGljIGlubGluZSBpbnQgcG1kX3lvdW5nKHBtZF90IHBtZCkKPj4+Pj4+IMKgwqDCoCAj ZGVmaW5lIGFyY2hfZmx1c2hfbGF6eV9tbXVfbW9kZSgpwqDCoMKgIGRvIHt9IHdoaWxlICgwKQo+ Pj4+Pj4gwqDCoMKgICNlbmRpZgo+Pj4+Pj4gwqDCoMKgICsjaWZuZGVmIHB0ZV9iYXRjaF9yZW1h aW5pbmcKPj4+Pj4+ICsvKioKPj4+Pj4+ICsgKiBwdGVfYmF0Y2hfcmVtYWluaW5nIC0gTnVtYmVy IG9mIHBhZ2VzIGZyb20gYWRkciB0byBuZXh0IGJhdGNoIGJvdW5kYXJ5Lgo+Pj4+Pj4gKyAqIEBw dGU6IFBhZ2UgdGFibGUgZW50cnkgZm9yIHRoZSBmaXJzdCBwYWdlLgo+Pj4+Pj4gKyAqIEBhZGRy OiBBZGRyZXNzIG9mIHRoZSBmaXJzdCBwYWdlLgo+Pj4+Pj4gKyAqIEBlbmQ6IEJhdGNoIGNlaWxp bmcgKGUuZy4gZW5kIG9mIHZtYSkuCj4+Pj4+PiArICoKPj4+Pj4+ICsgKiBTb21lIGFyY2hpdGVj dHVyZXMgKGFybTY0KSBjYW4gZWZmaWNpZW50bHkgbW9kaWZ5IGEgY29udGlndW91cyBiYXRjaCBv Zgo+Pj4+Pj4gcHRlcy4KPj4+Pj4+ICsgKiBJbiBzdWNoIGNhc2VzLCB0aGlzIGZ1bmN0aW9uIHJl dHVybnMgdGhlIHJlbWFpbmluZyBudW1iZXIgb2YgcGFnZXMgdG8KPj4+Pj4+IHRoZSBlbmQKPj4+ Pj4+ICsgKiBvZiB0aGUgY3VycmVudCBiYXRjaCwgYXMgZGVmaW5lZCBieSBhZGRyLiBUaGlzIGNh biBiZSB1c2VmdWwgd2hlbgo+Pj4+Pj4gaXRlcmF0aW5nCj4+Pj4+PiArICogb3ZlciBwdGVzLgo+ Pj4+Pj4gKyAqCj4+Pj4+PiArICogTWF5IGJlIG92ZXJyaWRkZW4gYnkgdGhlIGFyY2hpdGVjdHVy ZSwgZWxzZSBiYXRjaCBzaXplIGlzIGFsd2F5cyAxLgo+Pj4+Pj4gKyAqLwo+Pj4+Pj4gK3N0YXRp YyBpbmxpbmUgdW5zaWduZWQgaW50IHB0ZV9iYXRjaF9yZW1haW5pbmcocHRlX3QgcHRlLCB1bnNp Z25lZCBsb25nCj4+Pj4+PiBhZGRyLAo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgbG9uZyBlbmQpCj4+Pj4+PiArewo+Pj4+Pj4g K8KgwqDCoCByZXR1cm4gMTsKPj4+Pj4+ICt9Cj4+Pj4+PiArI2VuZGlmCj4+Pj4+Cj4+Pj4+IEl0 J3MgYSBzaGFtZSB3ZSBub3cgbG9zZSB0aGUgb3B0aW1pemF0aW9uIGZvciBhbGwgb3RoZXIgYXJj aHRpZWN0dXJlcy4KPj4+Pj4KPj4+Pj4gV2FzIHRoZXJlIG5vIHdheSB0byBoYXZlIHNvbWUgYmFz aWMgYmF0Y2hpbmcgbWVjaGFuaXNtIHRoYXQgZG9lc24ndCByZXF1aXJlCj4+Pj4+IGFyY2gKPj4+ Pj4gc3BlY2lmaWNzPwo+Pj4+Cj4+Pj4gSSB0cmllZCBhIGJ1bmNoIG9mIHRoaW5ncyBidXQgdWx0 aW1hdGVseSB0aGUgd2F5IEkndmUgZG9uZSBpdCB3YXMgdGhlIG9ubHkgd2F5Cj4+Pj4gdG8gcmVk dWNlIHRoZSBvcmRlci0wIGZvcmsgcmVncmVzc2lvbiB0byAwLgo+Pj4+Cj4+Pj4gTXkgb3JpZ2lu YWwgdjMgcG9zdGluZyB3YXMgY29zdGluZyA1JSBleHRyYSBhbmQgZXZlbiBteSBmaXJzdCBhdHRl bXB0IGF0IGFuCj4+Pj4gYXJjaC1zcGVjaWZpYyB2ZXJzaW9uIHRoYXQgZGlkbid0IHJlc29sdmUg dG8gYSBjb21waWxlLXRpbWUgY29uc3RhbnQgMSBzdGlsbAo+Pj4+IGNvc3QgYW4gZXh0cmEgMyUu Cj4+Pj4KPj4+Pgo+Pj4+Pgo+Pj4+PiBJJ2QgaGF2ZSB0aG91Z2h0IHRoYXQgc29tZXRoaW5nIHZl cnkgYmFzaWMgd291bGQgaGF2ZSB3b3JrZWQgbGlrZToKPj4+Pj4KPj4+Pj4gKiBDaGVjayBpZiBQ VEUgaXMgdGhlIHNhbWUgd2hlbiBzZXR0aW5nIHRoZSBQRk4gdG8gMC4KPj4+Pj4gKiBDaGVjayB0 aGF0IFBGTiBpcyBjb25zZWN1dGl2ZQo+Pj4+PiAqIENoZWNrIHRoYXQgYWxsIFBGTnMgYmVsb25n IHRvIHRoZSBzYW1lIGZvbGlvCj4+Pj4KPj4+PiBJIGhhdmVuJ3QgdHJpZWQgdGhpcyBleGFjdCBh cHByb2FjaCwgYnV0IEknZCBiZSBzdXJwcmlzZWQgaWYgSSBjYW4gZ2V0IHRoZQo+Pj4+IHJlZ3Jl c3Npb24gdW5kZXIgNCUgd2l0aCB0aGlzLiBGdXJ0aGVyIGFsb25nIHRoZSBzZXJpZXMgSSBzcGVu dCBhIGxvdCBvZiB0aW1lCj4+Pj4gaGF2aW5nIHRvIGZpZGRsZSB3aXRoIHRoZSBhcm02NCBpbXBs ZW1lbnRhdGlvbjsgZXZlcnkgY29uZGl0aW9uYWwgYW5kIGV2ZXJ5Cj4+Pj4gbWVtb3J5IHJlYWQg KGV2ZW4gd2hlbiBpbiBjYWNoZSkgd2FzIGEgcHJvYmxlbS4gVGhlcmUgaXMganVzdCBzbyBsaXR0 bGUgaW4gdGhlCj4+Pj4gaW5uZXIgbG9vcCB0aGF0IGV2ZXJ5IGluc3RydWN0aW9uIG1hdHRlcnMu IChBdCBsZWFzdCBvbiBBbXBlcmUgQWx0cmEgYW5kIEFwcGxlCj4+Pj4gTTIpLgo+Pj4+Cj4+Pj4g T2YgY291cnNlIGlmIHlvdSdyZSB3aWxsaW5nIHRvIHBheSB0aGF0IDQtNSUgZm9yIG9yZGVyLTAg dGhlbiB0aGUgYmVuZWZpdCB0bwo+Pj4+IG9yZGVyLTkgaXMgYXJvdW5kIDEwJSBpbiBteSBtZWFz dXJlbWVudHMuIFBlcnNvbmFsbHkgdGhvdWdoLCBJJ2QgcHJlZmVyIHRvIHBsYXkKPj4+PiBzYWZl IGFuZCBlbnN1cmUgdGhlIGNvbW1vbiBvcmRlci0wIGNhc2UgZG9lc24ndCByZWdyZXNzLCBhcyB5 b3UgcHJldmlvdXNseQo+Pj4+IHN1Z2dlc3RlZC4KPj4+Pgo+Pj4KPj4+IEkganVzdCBoYWNrZWQg c29tZXRoaW5nIHVwLCBvbiB0b3Agb2YgbXkgYmVsb3ZlZCBybWFwIGNsZWFudXAvYmF0Y2hpbmcg c2VyaWVzLiBJCj4+PiBpbXBsZW1lbnRlZCB2ZXJ5IGdlbmVyaWMgYW5kIHNpbXBsZSBiYXRjaGlu ZyBmb3IgbGFyZ2UgZm9saW9zIChhbGwgUFRFIGJpdHMKPj4+IGV4Y2VwdCB0aGUgUEZOIGhhdmUg dG8gbWF0Y2gpLgo+Pj4KPj4+IFNvbWUgdmVyeSBxdWljayB0ZXN0aW5nIChkb24ndCB0cnVzdCBl YWNoIGxhc3QgJSApIG9uIEludGVsKFIpIFhlb24oUikgU2lsdmVyCj4+PiA0MjEwUiBDUFUuCj4+ Pgo+Pj4gb3JkZXItMDogMC4wMTQyMTAgLT4gMC4wMTM5NjkKPj4+Cj4+PiAtPiBBcm91bmQgMS43 ICUgZmFzdGVyCj4+Pgo+Pj4gb3JkZXItOTogMC4wMTQzNzMgLT4gMC4wMDkxNDkKPj4+Cj4+PiAt PiBBcm91bmQgMzYuMyAlIGZhc3Rlcgo+Pgo+PiBXZWxsIEkgZ3Vlc3MgdGhhdCBzaG93cyBtZSA6 KQo+Pgo+PiBJJ2xsIGRvIGEgcmV2aWV3IGFuZCBydW4gdGhlIHRlc3RzIG9uIG15IEhXIHRvIHNl ZSBpZiBpdCBjb25jdXJzLgo+IAo+IAo+IEkgcHVzaGVkIGEgc2ltcGxlIGNvbXBpbGUgZml4dXAg KHdlIG5lZWQgcHRlX25leHRfcGZuKCkpLgoKSSd2ZSBqdXN0IGJlZW4gdHJ5aW5nIHRvIGNvbXBp bGUgYW5kIG5vdGljZWQgdGhpcy4gV2lsbCB0YWtlIGEgbG9vayBhdCB5b3VyIHVwZGF0ZS4KCkJ1 dCB1cG9uIHJldmlldywgSSd2ZSBub3RpY2VkIHRoZSBwYXJ0IHRoYXQgSSB0aGluayBtYWtlcyB0 aGlzIGRpZmZpY3VsdCBmb3IKYXJtNjQgd2l0aCB0aGUgY29udHB0ZSBvcHRpbWl6YXRpb247IFlv dSBhcmUgY2FsbGluZyBwdGVwX2dldCgpIGZvciBldmVyeSBwdGUgaW4KdGhlIGJhdGNoLiBXaGls ZSB0aGlzIGlzIGZ1bmN0aW9uYWxseSBjb3JyZWN0LCBvbmNlIGFybTY0IGhhcyB0aGUgY29udHB0 ZQpjaGFuZ2VzLCBpdHMgcHRlcF9nZXQoKSBoYXMgdG8gcmVhZCBldmVyeSBwdGUgaW4gdGhlIGNv bnRwdGUgYmxvY2sgaW4gb3JkZXIgdG8KZ2F0aGVyIHRoZSBhY2Nlc3MgYW5kIGRpcnR5IGJpdHMu IFNvIGlmIHlvdXIgYmF0Y2hpbmcgZnVuY3Rpb24gZW5kcyB1cCB3ZWFsa2luZwphIDE2IGVudHJ5 IGNvbnRwdGUgYmxvY2ssIHRoYXQgd2lsbCBjYXVzZSAxNiB4IDE2IHJlYWRzLCB3aGljaCBraWxs cwpwZXJmb3JtYW5jZS4gVGhhdCdzIHdoeSBJIGFkZGVkIHRoZSBhcmNoLXNwZWNpZmljIHB0ZV9i YXRjaF9yZW1haW5pbmcoKQpmdW5jdGlvbjsgdGhpcyBhbGxvd3MgdGhlIGNvcmUtbW0gdG8gc2tp cCB0byB0aGUgZW5kIG9mIHRoZSBjb250cHRlIGJsb2NrIGFuZAphdm9pZCBwdGVwX2dldCgpIGZv ciB0aGUgMTUgdGFpbCBwdGVzLiBTbyB3ZSBlbmQgdXAgd2l0aCAxNiBSRUFEX09OQ0UoKXMgaW5z dGVhZApvZiAyNTYuCgpJIGNvbnNpZGVyZWQgbWFraW5nIGEgcHRlcF9nZXRfbm95b3VuZ2RpcnR5 KCkgdmFyaWFudCwgd2hpY2ggd291bGQgYXZvaWQgdGhlIGJpdApnYXRoZXJpbmcuIEJ1dCB3ZSBo YXZlIGEgc2ltaWxhciBwcm9ibGVtIGluIHphcF9wdGVfcmFuZ2UoKSBhbmQgdGhhdCBmdW5jdGlv bgpuZWVkcyB0aGUgZGlydHkgYml0IHRvIHVwZGF0ZSB0aGUgZm9saW8uIFNvIGl0IGRvZXNuJ3Qg d29yayB0aGVyZS4gKHNlZSBwYXRjaCAzCmluIG15IHNlcmllcykuCgpJIGd1ZXNzIHlvdSBhcmUg Z29pbmcgdG8gc2F5IHRoYXQgd2Ugc2hvdWxkIGNvbWJpbmUgYm90aCBhcHByb2FjaGVzLCBzbyB0 aGF0CnlvdXIgYmF0Y2hpbmcgbG9vcCBjYW4gc2tpcCBmb3J3YXJkIGFuIGFyY2gtcHJvdmlkZWQg bnVtYmVyIG9mIHB0ZXM/IFRoYXQgd291bGQKY2VydGFpbmx5IHdvcmssIGJ1dCBmZWVscyBsaWtl IGFuIG9ydGhvZ29uYWwgY2hhbmdlIHRvIHdoYXQgSSdtIHRyeWluZyB0bwphY2hpZXZlIDopLiBB bnl3YXksIEknbGwgc3BlbmQgc29tZSB0aW1lIHBsYXlpbmcgd2l0aCBpdCB0b2RheS4KCgo+IAo+ IE5vdGUgdGhhdCB3ZSBzaG91bGQgcHJvYmFibHkgaGFuZGxlICJwdGVwX3NldF93cnByb3RlY3Rz IiByYXRoZXIgbGlrZSBzZXRfcHRlczoKPiAKPiAjaWZuZGVmIHdycHJvdGVjdF9wdGVzCj4gc3Rh dGljIGlubGluZSB2b2lkIHdycHJvdGVjdF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNp Z25lZCBsb25nIGFkZHIsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwdGVfdCAqcHRl cCwgdW5zaWduZWQgaW50IG5yKQo+IHsKPiDCoMKgwqDCoMKgwqAgZm9yICg7Oykgewo+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHRlcF9zZXRfd3Jwcm90ZWN0KG1tLCBhZGRyLCBwdGVw KTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICgtLW5yID09IDApCj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBwdGVwKys7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBhZGRyICs9IFBBR0VfU0laRTsKPiDCoMKgwqDCoMKgwqAgfQo+IH0KPiAjZW5kaWYKPiAKPiAK CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1h cm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5v cmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0t a2VybmVsCg==