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 CC2B4C41535 for ; Tue, 19 Dec 2023 08:30:52 +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=MbdytclJYDpNyrPJfs/eZdUmGz/Id0ft4MUbnIOTkSk=; b=nnsrLdorfLIzJ6 BzqRPcGRS4dCKpEdQ/IgPTMVCvdVMle1Ec7QXqWXODLHl1DeB7mZ0Fmknbv1QBVKaffKeVndEUSIR 4NaXkW6XCVybBx8tHeN2O5ZkC+XkyK73ioC1y/ItE/d3S2aB8myXmDHXUW+6rCfQApj4MJtR9/e/q zr1SJ3aP0HLI/W/SxuRQQ8PyogGvNQ+WBN+YYWk2REwPWN26rc5LKwkmfPwTUecFz4YcaUJ2ikghX QoPADooWantmvJN9X1O9uWPtTkRjzY4FN1MbkcHcWNXw43wduw5paV3awfXSQt/pnpaBQowWw1TU/ tGcRNuEYFJDLUehJPo8Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rFVUb-00DJb0-38; Tue, 19 Dec 2023 08:30:21 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rFVUY-00DJZY-0Q for linux-arm-kernel@lists.infradead.org; Tue, 19 Dec 2023 08:30:20 +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 334421FB; Tue, 19 Dec 2023 00:31:01 -0800 (PST) Received: from [10.57.75.230] (unknown [10.57.75.230]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 121813F738; Tue, 19 Dec 2023 00:30:12 -0800 (PST) Message-ID: Date: Tue, 19 Dec 2023 08:30:11 +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> From: Ryan Roberts In-Reply-To: <0bef5423-6eea-446b-8854-980e9c23a948@redhat.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231219_003018_375196_49616408 X-CRM114-Status: GOOD ( 34.26 ) 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 T24gMTgvMTIvMjAyMyAxNzo0NywgRGF2aWQgSGlsZGVuYnJhbmQgd3JvdGU6Cj4gT24gMTguMTIu MjMgMTE6NTAsIFJ5YW4gUm9iZXJ0cyB3cm90ZToKPj4gQ29udmVydCBjb3B5X3B0ZV9yYW5nZSgp IHRvIGNvcHkgYSBiYXRjaCBvZiBwdGVzIGluIG9uZSBnby4gQSBnaXZlbgo+PiBiYXRjaCBpcyBk ZXRlcm1pbmVkIGJ5IHRoZSBhcmNoaXRlY3R1cmUgd2l0aCB0aGUgbmV3IGhlbHBlciwKPj4gcHRl X2JhdGNoX3JlbWFpbmluZygpLCBhbmQgbWFwcyBhIHBoeXNpY2FsbHkgY29udGlndW91cyBibG9j ayBvZiBtZW1vcnksCj4+IGFsbCBiZWxvbmdpbmcgdG8gdGhlIHNhbWUgZm9saW8uIEEgcHRlIGJh dGNoIGlzIHRoZW4gd3JpdGUtcHJvdGVjdGVkIGluCj4+IG9uZSBnbyBpbiB0aGUgcGFyZW50IHVz aW5nIHRoZSBuZXcgaGVscGVyLCBwdGVwX3NldF93cnByb3RlY3RzKCkgYW5kIGlzCj4+IHNldCBp biBvbmUgZ28gaW4gdGhlIGNoaWxkIHVzaW5nIHRoZSBuZXcgaGVscGVyLCBzZXRfcHRlc19mdWxs KCkuCj4+Cj4+IFRoZSBwcmltYXJ5IG1vdGl2YXRpb24gZm9yIHRoaXMgY2hhbmdlIGlzIHRvIHJl ZHVjZSB0aGUgbnVtYmVyIG9mIHRsYgo+PiBtYWludGVuYW5jZSBvcGVyYXRpb25zIHRoYXQgdGhl IGFybTY0IGJhY2tlbmQgaGFzIHRvIHBlcmZvcm0gZHVyaW5nCj4+IGZvcmssIGFzIGl0IGlzIGFi b3V0IHRvIGFkZCB0cmFuc3BhcmVudCBzdXBwb3J0IGZvciB0aGUgImNvbnRpZ3VvdXMgYml0Igo+ PiBpbiBpdHMgcHRlcy4gQnkgd3JpdGUtcHJvdGVjdGluZyB0aGUgcGFyZW50IHVzaW5nIHRoZSBu ZXcKPj4gcHRlcF9zZXRfd3Jwcm90ZWN0cygpIChub3RlIHRoZSAncycgYXQgdGhlIGVuZCkgZnVu Y3Rpb24sIHRoZSBiYWNrZW5kCj4+IGNhbiBhdm9pZCBoYXZpbmcgdG8gdW5mb2xkIGNvbnRpZyBy YW5nZXMgb2YgUFRFcywgd2hpY2ggaXMgZXhwZW5zaXZlLAo+PiB3aGVuIGFsbCBwdGVzIGluIHRo ZSByYW5nZSBhcmUgYmVpbmcgd3JpdGUtcHJvdGVjdGVkLiBTaW1pbGFybHksIGJ5Cj4+IHVzaW5n IHNldF9wdGVzX2Z1bGwoKSByYXRoZXIgdGhhbiBzZXRfcHRlX2F0KCkgdG8gc2V0IHVwIHB0ZXMg aW4gdGhlCj4+IGNoaWxkLCB0aGUgYmFja2VuZCBkb2VzIG5vdCBuZWVkIHRvIGZvbGQgYSBjb250 aWd1b3VzIHJhbmdlIG9uY2UgdGhleQo+PiBhcmUgYWxsIHBvcHVsYXRlZCAtIHRoZXkgY2FuIGJl IGluaXRpYWxseSBwb3B1bGF0ZWQgYXMgYSBjb250aWd1b3VzCj4+IHJhbmdlIGluIHRoZSBmaXJz dCBwbGFjZS4KPj4KPj4gVGhpcyBjb2RlIGlzIHZlcnkgcGVyZm9ybWFuY2Ugc2Vuc2l0aXZlLCBh bmQgYSBzaWduaWZpY2FudCBhbW91bnQgb2YKPj4gZWZmb3J0IGhhcyBiZWVuIHB1dCBpbnRvIG5v dCByZWdyZXNzaW5nIHBlcmZvcm1hbmNlIGZvciB0aGUgb3JkZXItMAo+PiBmb2xpbyBjYXNlLiBC eSBkZWZhdWx0LCBwdGVfYmF0Y2hfcmVtYWluaW5nKCkgaXMgY29tcGlsZSBjb25zdGFudCAxLAo+ PiB3aGljaCBlbmFibGVzIHRoZSBjb21waWxlciB0byBzaW1wbGlmeSB0aGUgZXh0cmEgbG9vcHMg dGhhdCBhcmUgYWRkZWQKPj4gZm9yIGJhdGNoaW5nIGFuZCBwcm9kdWNlIGNvZGUgdGhhdCBpcyBl cXVpdmFsZW50IChhbmQgZXF1YWxseQo+PiBwZXJmb3JtYW50KSBhcyB0aGUgcHJldmlvdXMgaW1w bGVtZW50YXRpb24uCj4+Cj4+IFRoaXMgY2hhbmdlIGFkZHJlc3NlcyB0aGUgY29yZS1tbSByZWZh Y3RvcmluZyBvbmx5IGFuZCBhIHNlcGFyYXRlIGNoYW5nZQo+PiB3aWxsIGltcGxlbWVudCBwdGVf YmF0Y2hfcmVtYWluaW5nKCksIHB0ZXBfc2V0X3dycHJvdGVjdHMoKSBhbmQKPj4gc2V0X3B0ZXNf ZnVsbCgpIGluIHRoZSBhcm02NCBiYWNrZW5kIHRvIHJlYWxpemUgdGhlIHBlcmZvcm1hbmNlCj4+ IGltcHJvdmVtZW50IGFzIHBhcnQgb2YgdGhlIHdvcmsgdG8gZW5hYmxlIGNvbnRwdGUgbWFwcGlu Z3MuCj4+Cj4+IFRvIGVuc3VyZSB0aGUgYXJtNjQgaXMgcGVyZm9ybWFudCBvbmNlIGltcGxlbWVu dGVkLCB0aGlzIGNoYW5nZSBpcyB2ZXJ5Cj4+IGNhcmVmdWwgdG8gb25seSBjYWxsIHB0ZXBfZ2V0 KCkgb25jZSBwZXIgcHRlIGJhdGNoLgo+Pgo+PiBUaGUgZm9sbG93aW5nIG1pY3JvYmVuY2htYXJr IHJlc3VsdHMgZGVtb25zdGF0ZSB0aGF0IHRoZXJlIGlzIG5vCj4+IHNpZ25pZmljYW50IHBlcmZv cm1hbmNlIGNoYW5nZSBhZnRlciB0aGlzIHBhdGNoLiBGb3JrIGlzIGNhbGxlZCBpbiBhCj4+IHRp Z2h0IGxvb3AgaW4gYSBwcm9jZXNzIHdpdGggMUcgb2YgcG9wdWxhdGVkIG1lbW9yeSBhbmQgdGhl IHRpbWUgZm9yIHRoZQo+PiBmdW5jdGlvbiB0byBleGVjdXRlIGlzIG1lYXN1cmVkLiAxMDAgaXRl cmF0aW9ucyBwZXIgcnVuLCA4IHJ1bnMKPj4gcGVyZm9ybWVkIG9uIGJvdGggQXBwbGUgTTIgKFZN KSBhbmQgQW1wZXJlIEFsdHJhIChiYXJlIG1ldGFsKS4gVGVzdHMKPj4gcGVyZm9ybWVkIGZvciBj YXNlIHdoZXJlIDFHIG1lbW9yeSBpcyBjb21wcmlzZWQgb2Ygb3JkZXItMCBmb2xpb3MgYW5kCj4+ IGNhc2Ugd2hlcmUgY29tcHJpc2VkIG9mIHB0ZS1tYXBwZWQgb3JkZXItOSBmb2xpb3MuIE5lZ2F0 aXZlIGlzIGZhc3RlciwKPj4gcG9zaXRpdmUgaXMgc2xvd2VyLCBjb21wYXJlZCB0byBiYXNlbGlu ZSB1cG9uIHdoaWNoIHRoZSBzZXJpZXMgaXMgYmFzZWQ6Cj4+Cj4+IHwgQXBwbGUgTTIgVk3CoMKg IHwgb3JkZXItMCAocHRlLW1hcCkgfCBvcmRlci05IChwdGUtbWFwKSB8Cj4+IHwgZm9ya8KgwqDC oMKgwqDCoMKgwqDCoCB8LS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tfAo+ PiB8IG1pY3JvYmVuY2jCoMKgwqAgfMKgwqDCoCBtZWFuIHzCoMKgIHN0ZGV2IHzCoMKgwqAgbWVh biB8wqDCoCBzdGRldiB8Cj4+IHwtLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLXwt LS0tLS0tLS18LS0tLS0tLS0tfAo+PiB8IGJhc2VsaW5lwqDCoMKgwqDCoCB8wqDCoMKgIDAuMCUg fMKgwqDCoCAxLjElIHzCoMKgwqAgMC4wJSB8wqDCoMKgIDEuMiUgfAo+PiB8IGFmdGVyLWNoYW5n ZcKgIHzCoMKgIC0xLjAlIHzCoMKgwqAgMi4wJSB8wqDCoCAtMC4xJSB8wqDCoMKgIDEuMSUgfAo+ Pgo+PiB8IEFtcGVyZSBBbHRyYcKgIHwgb3JkZXItMCAocHRlLW1hcCkgfCBvcmRlci05IChwdGUt bWFwKSB8Cj4+IHwgZm9ya8KgwqDCoMKgwqDCoMKgwqDCoCB8LS0tLS0tLS0tLS0tLS0tLS0tLXwt LS0tLS0tLS0tLS0tLS0tLS0tfAo+PiB8IG1pY3JvYmVuY2jCoMKgwqAgfMKgwqDCoCBtZWFuIHzC oMKgIHN0ZGV2IHzCoMKgwqAgbWVhbiB8wqDCoCBzdGRldiB8Cj4+IHwtLS0tLS0tLS0tLS0tLS18 LS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tfAo+PiB8IGJhc2VsaW5lwqDC oMKgwqDCoCB8wqDCoMKgIDAuMCUgfMKgwqDCoCAxLjAlIHzCoMKgwqAgMC4wJSB8wqDCoMKgIDAu MSUgfAo+PiB8IGFmdGVyLWNoYW5nZcKgIHzCoMKgIC0wLjElIHzCoMKgwqAgMS4yJSB8wqDCoCAt MC4xJSB8wqDCoMKgIDAuMSUgfAo+Pgo+PiBUZXN0ZWQtYnk6IEpvaG4gSHViYmFyZCA8amh1YmJh cmRAbnZpZGlhLmNvbT4KPj4gUmV2aWV3ZWQtYnk6IEFsaXN0YWlyIFBvcHBsZSA8YXBvcHBsZUBu dmlkaWEuY29tPgo+PiBTaWduZWQtb2ZmLWJ5OiBSeWFuIFJvYmVydHMgPHJ5YW4ucm9iZXJ0c0Bh cm0uY29tPgo+PiAtLS0KPj4gwqAgaW5jbHVkZS9saW51eC9wZ3RhYmxlLmggfCA4MCArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+PiDCoCBtbS9tZW1vcnkuY8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB8IDkyICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0t LS0tCj4+IMKgIDIgZmlsZXMgY2hhbmdlZCwgMTM5IGluc2VydGlvbnMoKyksIDMzIGRlbGV0aW9u cygtKQo+Pgo+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmggYi9pbmNsdWRl L2xpbnV4L3BndGFibGUuaAo+PiBpbmRleCBhZjc2MzljM2IwYTMuLmRiOTNmYjgxNDY1YSAxMDA2 NDQKPj4gLS0tIGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgKPj4gKysrIGIvaW5jbHVkZS9saW51 eC9wZ3RhYmxlLmgKPj4gQEAgLTIwNSw2ICsyMDUsMjcgQEAgc3RhdGljIGlubGluZSBpbnQgcG1k X3lvdW5nKHBtZF90IHBtZCkKPj4gwqAgI2RlZmluZSBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGUo KcKgwqDCoCBkbyB7fSB3aGlsZSAoMCkKPj4gwqAgI2VuZGlmCj4+IMKgICsjaWZuZGVmIHB0ZV9i YXRjaF9yZW1haW5pbmcKPj4gKy8qKgo+PiArICogcHRlX2JhdGNoX3JlbWFpbmluZyAtIE51bWJl ciBvZiBwYWdlcyBmcm9tIGFkZHIgdG8gbmV4dCBiYXRjaCBib3VuZGFyeS4KPj4gKyAqIEBwdGU6 IFBhZ2UgdGFibGUgZW50cnkgZm9yIHRoZSBmaXJzdCBwYWdlLgo+PiArICogQGFkZHI6IEFkZHJl c3Mgb2YgdGhlIGZpcnN0IHBhZ2UuCj4+ICsgKiBAZW5kOiBCYXRjaCBjZWlsaW5nIChlLmcuIGVu ZCBvZiB2bWEpLgo+PiArICoKPj4gKyAqIFNvbWUgYXJjaGl0ZWN0dXJlcyAoYXJtNjQpIGNhbiBl ZmZpY2llbnRseSBtb2RpZnkgYSBjb250aWd1b3VzIGJhdGNoIG9mIHB0ZXMuCj4+ICsgKiBJbiBz dWNoIGNhc2VzLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlbWFpbmluZyBudW1iZXIgb2Yg cGFnZXMgdG8gdGhlIGVuZAo+PiArICogb2YgdGhlIGN1cnJlbnQgYmF0Y2gsIGFzIGRlZmluZWQg YnkgYWRkci4gVGhpcyBjYW4gYmUgdXNlZnVsIHdoZW4gaXRlcmF0aW5nCj4+ICsgKiBvdmVyIHB0 ZXMuCj4+ICsgKgo+PiArICogTWF5IGJlIG92ZXJyaWRkZW4gYnkgdGhlIGFyY2hpdGVjdHVyZSwg ZWxzZSBiYXRjaCBzaXplIGlzIGFsd2F5cyAxLgo+PiArICovCj4+ICtzdGF0aWMgaW5saW5lIHVu c2lnbmVkIGludCBwdGVfYmF0Y2hfcmVtYWluaW5nKHB0ZV90IHB0ZSwgdW5zaWduZWQgbG9uZyBh ZGRyLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1 bnNpZ25lZCBsb25nIGVuZCkKPj4gK3sKPj4gK8KgwqDCoCByZXR1cm4gMTsKPj4gK30KPj4gKyNl bmRpZgo+IAo+IEl0J3MgYSBzaGFtZSB3ZSBub3cgbG9zZSB0aGUgb3B0aW1pemF0aW9uIGZvciBh bGwgb3RoZXIgYXJjaHRpZWN0dXJlcy4KPiAKPiBXYXMgdGhlcmUgbm8gd2F5IHRvIGhhdmUgc29t ZSBiYXNpYyBiYXRjaGluZyBtZWNoYW5pc20gdGhhdCBkb2Vzbid0IHJlcXVpcmUgYXJjaAo+IHNw ZWNpZmljcz8KCkkgdHJpZWQgYSBidW5jaCBvZiB0aGluZ3MgYnV0IHVsdGltYXRlbHkgdGhlIHdh eSBJJ3ZlIGRvbmUgaXQgd2FzIHRoZSBvbmx5IHdheQp0byByZWR1Y2UgdGhlIG9yZGVyLTAgZm9y ayByZWdyZXNzaW9uIHRvIDAuCgpNeSBvcmlnaW5hbCB2MyBwb3N0aW5nIHdhcyBjb3N0aW5nIDUl IGV4dHJhIGFuZCBldmVuIG15IGZpcnN0IGF0dGVtcHQgYXQgYW4KYXJjaC1zcGVjaWZpYyB2ZXJz aW9uIHRoYXQgZGlkbid0IHJlc29sdmUgdG8gYSBjb21waWxlLXRpbWUgY29uc3RhbnQgMSBzdGls bApjb3N0IGFuIGV4dHJhIDMlLgoKCj4gCj4gSSdkIGhhdmUgdGhvdWdodCB0aGF0IHNvbWV0aGlu ZyB2ZXJ5IGJhc2ljIHdvdWxkIGhhdmUgd29ya2VkIGxpa2U6Cj4gCj4gKiBDaGVjayBpZiBQVEUg aXMgdGhlIHNhbWUgd2hlbiBzZXR0aW5nIHRoZSBQRk4gdG8gMC4KPiAqIENoZWNrIHRoYXQgUEZO IGlzIGNvbnNlY3V0aXZlCj4gKiBDaGVjayB0aGF0IGFsbCBQRk5zIGJlbG9uZyB0byB0aGUgc2Ft ZSBmb2xpbwoKSSBoYXZlbid0IHRyaWVkIHRoaXMgZXhhY3QgYXBwcm9hY2gsIGJ1dCBJJ2QgYmUg c3VycHJpc2VkIGlmIEkgY2FuIGdldCB0aGUKcmVncmVzc2lvbiB1bmRlciA0JSB3aXRoIHRoaXMu IEZ1cnRoZXIgYWxvbmcgdGhlIHNlcmllcyBJIHNwZW50IGEgbG90IG9mIHRpbWUKaGF2aW5nIHRv IGZpZGRsZSB3aXRoIHRoZSBhcm02NCBpbXBsZW1lbnRhdGlvbjsgZXZlcnkgY29uZGl0aW9uYWwg YW5kIGV2ZXJ5Cm1lbW9yeSByZWFkIChldmVuIHdoZW4gaW4gY2FjaGUpIHdhcyBhIHByb2JsZW0u IFRoZXJlIGlzIGp1c3Qgc28gbGl0dGxlIGluIHRoZQppbm5lciBsb29wIHRoYXQgZXZlcnkgaW5z dHJ1Y3Rpb24gbWF0dGVycy4gKEF0IGxlYXN0IG9uIEFtcGVyZSBBbHRyYSBhbmQgQXBwbGUgTTIp LgoKT2YgY291cnNlIGlmIHlvdSdyZSB3aWxsaW5nIHRvIHBheSB0aGF0IDQtNSUgZm9yIG9yZGVy LTAgdGhlbiB0aGUgYmVuZWZpdCB0bwpvcmRlci05IGlzIGFyb3VuZCAxMCUgaW4gbXkgbWVhc3Vy ZW1lbnRzLiBQZXJzb25hbGx5IHRob3VnaCwgSSdkIHByZWZlciB0byBwbGF5CnNhZmUgYW5kIGVu c3VyZSB0aGUgY29tbW9uIG9yZGVyLTAgY2FzZSBkb2Vzbid0IHJlZ3Jlc3MsIGFzIHlvdSBwcmV2 aW91c2x5CnN1Z2dlc3RlZC4KCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVs QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9s aXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==