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 96DB0C3DA6E for ; Wed, 20 Dec 2023 11:52:35 +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=g6IGVm3cRgV25idYTw/WUI3ML4QY5jgOD9Ya+pgDZVo=; b=QVEaapf75wPMmL rbeTiUHQg/vMmDxhic2CztqY4V/oAXTLD9fQ2+tlGGmIDa2fE/KvkKfdJOwUo71bgCdqdVPPLXzhD bBzCeonsZ4hFIKiJxoD6xvWgZSiEBcqqe8p7A0Xd2QHDnFLNzISCSGNEYx6VBYryr02a1Egc0dNDW oCj3SbqXoywrp1XmlEcRJTF5goXVg8WSeBV+APJVEiTminOP5T4NpZ1qTif+Vp4N4lhq3hugIAtmk SQ6VeT2h2q6AWZp0PTwW/vijoS5g5mJ0dIAByoPUMTuIYmf6DxMRX7YUXa0vZsg5sUju5CpoCeQT0 E23tWvPWYWytKtq2rwZA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rFv7N-00HCoD-2v; Wed, 20 Dec 2023 11:52:05 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rFv7J-00HCjv-2W for linux-arm-kernel@lists.infradead.org; Wed, 20 Dec 2023 11:52:04 +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 1461B1FB; Wed, 20 Dec 2023 03:52:43 -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 9456B3F5A1; Wed, 20 Dec 2023 03:51:53 -0800 (PST) Message-ID: Date: Wed, 20 Dec 2023 11:51:51 +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> <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> <699cb1db-51eb-460e-9ceb-1ce08ca03050@redhat.com> <2a8c5b6c-f5ae-43b2-99aa-6d10e79b76e1@redhat.com> From: Ryan Roberts In-Reply-To: <2a8c5b6c-f5ae-43b2-99aa-6d10e79b76e1@redhat.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231220_035201_916603_F0D52789 X-CRM114-Status: GOOD ( 42.32 ) 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 T24gMjAvMTIvMjAyMyAxMTozNiwgRGF2aWQgSGlsZGVuYnJhbmQgd3JvdGU6Cj4gT24gMjAuMTIu MjMgMTI6MjgsIFJ5YW4gUm9iZXJ0cyB3cm90ZToKPj4gT24gMjAvMTIvMjAyMyAxMDo1NiwgRGF2 aWQgSGlsZGVuYnJhbmQgd3JvdGU6Cj4+PiBPbiAyMC4xMi4yMyAxMTo0MSwgUnlhbiBSb2JlcnRz IHdyb3RlOgo+Pj4+IE9uIDIwLzEyLzIwMjMgMTA6MTYsIERhdmlkIEhpbGRlbmJyYW5kIHdyb3Rl Ogo+Pj4+PiBPbiAyMC4xMi4yMyAxMToxMSwgUnlhbiBSb2JlcnRzIHdyb3RlOgo+Pj4+Pj4gT24g MjAvMTIvMjAyMyAwOTo1NCwgRGF2aWQgSGlsZGVuYnJhbmQgd3JvdGU6Cj4+Pj4+Pj4gT24gMjAu MTIuMjMgMTA6NTEsIFJ5YW4gUm9iZXJ0cyB3cm90ZToKPj4+Pj4+Pj4gT24gMjAvMTIvMjAyMyAw OToxNywgRGF2aWQgSGlsZGVuYnJhbmQgd3JvdGU6Cj4+Pj4+Pj4+PiBPbiAxOS4xMi4yMyAxODo0 MiwgUnlhbiBSb2JlcnRzIHdyb3RlOgo+Pj4+Pj4+Pj4+IE9uIDE5LzEyLzIwMjMgMTc6MjIsIERh dmlkIEhpbGRlbmJyYW5kIHdyb3RlOgo+Pj4+Pj4+Pj4+PiBPbiAxOS4xMi4yMyAwOTozMCwgUnlh biBSb2JlcnRzIHdyb3RlOgo+Pj4+Pj4+Pj4+Pj4gT24gMTgvMTIvMjAyMyAxNzo0NywgRGF2aWQg SGlsZGVuYnJhbmQgd3JvdGU6Cj4+Pj4+Pj4+Pj4+Pj4gT24gMTguMTIuMjMgMTE6NTAsIFJ5YW4g Um9iZXJ0cyB3cm90ZToKPj4+Pj4+Pj4+Pj4+Pj4gQ29udmVydCBjb3B5X3B0ZV9yYW5nZSgpIHRv IGNvcHkgYSBiYXRjaCBvZiBwdGVzIGluIG9uZSBnby4gQSBnaXZlbgo+Pj4+Pj4+Pj4+Pj4+PiBi YXRjaCBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBhcmNoaXRlY3R1cmUgd2l0aCB0aGUgbmV3IGhlbHBl ciwKPj4+Pj4+Pj4+Pj4+Pj4gcHRlX2JhdGNoX3JlbWFpbmluZygpLCBhbmQgbWFwcyBhIHBoeXNp Y2FsbHkgY29udGlndW91cyBibG9jayBvZgo+Pj4+Pj4+Pj4+Pj4+PiBtZW1vcnksCj4+Pj4+Pj4+ Pj4+Pj4+IGFsbCBiZWxvbmdpbmcgdG8gdGhlIHNhbWUgZm9saW8uIEEgcHRlIGJhdGNoIGlzIHRo ZW4KPj4+Pj4+Pj4+Pj4+Pj4gd3JpdGUtcHJvdGVjdGVkIGluCj4+Pj4+Pj4+Pj4+Pj4+IG9uZSBn byBpbiB0aGUgcGFyZW50IHVzaW5nIHRoZSBuZXcgaGVscGVyLCBwdGVwX3NldF93cnByb3RlY3Rz KCkKPj4+Pj4+Pj4+Pj4+Pj4gYW5kIGlzCj4+Pj4+Pj4+Pj4+Pj4+IHNldCBpbiBvbmUgZ28gaW4g dGhlIGNoaWxkIHVzaW5nIHRoZSBuZXcgaGVscGVyLCBzZXRfcHRlc19mdWxsKCkuCj4+Pj4+Pj4+ Pj4+Pj4+Cj4+Pj4+Pj4+Pj4+Pj4+IFRoZSBwcmltYXJ5IG1vdGl2YXRpb24gZm9yIHRoaXMgY2hh bmdlIGlzIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHRsYgo+Pj4+Pj4+Pj4+Pj4+PiBtYWludGVu YW5jZSBvcGVyYXRpb25zIHRoYXQgdGhlIGFybTY0IGJhY2tlbmQgaGFzIHRvIHBlcmZvcm0gZHVy aW5nCj4+Pj4+Pj4+Pj4+Pj4+IGZvcmssIGFzIGl0IGlzIGFib3V0IHRvIGFkZCB0cmFuc3BhcmVu dCBzdXBwb3J0IGZvciB0aGUgImNvbnRpZ3VvdXMKPj4+Pj4+Pj4+Pj4+Pj4gYml0Igo+Pj4+Pj4+ Pj4+Pj4+PiBpbiBpdHMgcHRlcy4gQnkgd3JpdGUtcHJvdGVjdGluZyB0aGUgcGFyZW50IHVzaW5n IHRoZSBuZXcKPj4+Pj4+Pj4+Pj4+Pj4gcHRlcF9zZXRfd3Jwcm90ZWN0cygpIChub3RlIHRoZSAn cycgYXQgdGhlIGVuZCkgZnVuY3Rpb24sIHRoZSBiYWNrZW5kCj4+Pj4+Pj4+Pj4+Pj4+IGNhbiBh dm9pZCBoYXZpbmcgdG8gdW5mb2xkIGNvbnRpZyByYW5nZXMgb2YgUFRFcywgd2hpY2ggaXMgZXhw ZW5zaXZlLAo+Pj4+Pj4+Pj4+Pj4+PiB3aGVuIGFsbCBwdGVzIGluIHRoZSByYW5nZSBhcmUgYmVp bmcgd3JpdGUtcHJvdGVjdGVkLiBTaW1pbGFybHksIGJ5Cj4+Pj4+Pj4+Pj4+Pj4+IHVzaW5nIHNl dF9wdGVzX2Z1bGwoKSByYXRoZXIgdGhhbiBzZXRfcHRlX2F0KCkgdG8gc2V0IHVwIHB0ZXMgaW4g dGhlCj4+Pj4+Pj4+Pj4+Pj4+IGNoaWxkLCB0aGUgYmFja2VuZCBkb2VzIG5vdCBuZWVkIHRvIGZv bGQgYSBjb250aWd1b3VzIHJhbmdlIG9uY2UgdGhleQo+Pj4+Pj4+Pj4+Pj4+PiBhcmUgYWxsIHBv cHVsYXRlZCAtIHRoZXkgY2FuIGJlIGluaXRpYWxseSBwb3B1bGF0ZWQgYXMgYSBjb250aWd1b3Vz Cj4+Pj4+Pj4+Pj4+Pj4+IHJhbmdlIGluIHRoZSBmaXJzdCBwbGFjZS4KPj4+Pj4+Pj4+Pj4+Pj4K Pj4+Pj4+Pj4+Pj4+Pj4gVGhpcyBjb2RlIGlzIHZlcnkgcGVyZm9ybWFuY2Ugc2Vuc2l0aXZlLCBh bmQgYSBzaWduaWZpY2FudCBhbW91bnQgb2YKPj4+Pj4+Pj4+Pj4+Pj4gZWZmb3J0IGhhcyBiZWVu IHB1dCBpbnRvIG5vdCByZWdyZXNzaW5nIHBlcmZvcm1hbmNlIGZvciB0aGUgb3JkZXItMAo+Pj4+ Pj4+Pj4+Pj4+PiBmb2xpbyBjYXNlLiBCeSBkZWZhdWx0LCBwdGVfYmF0Y2hfcmVtYWluaW5nKCkg aXMgY29tcGlsZSBjb25zdGFudCAxLAo+Pj4+Pj4+Pj4+Pj4+PiB3aGljaCBlbmFibGVzIHRoZSBj b21waWxlciB0byBzaW1wbGlmeSB0aGUgZXh0cmEgbG9vcHMgdGhhdCBhcmUgYWRkZWQKPj4+Pj4+ Pj4+Pj4+Pj4gZm9yIGJhdGNoaW5nIGFuZCBwcm9kdWNlIGNvZGUgdGhhdCBpcyBlcXVpdmFsZW50 IChhbmQgZXF1YWxseQo+Pj4+Pj4+Pj4+Pj4+PiBwZXJmb3JtYW50KSBhcyB0aGUgcHJldmlvdXMg aW1wbGVtZW50YXRpb24uCj4+Pj4+Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4+Pj4+IFRoaXMgY2hhbmdl IGFkZHJlc3NlcyB0aGUgY29yZS1tbSByZWZhY3RvcmluZyBvbmx5IGFuZCBhIHNlcGFyYXRlCj4+ Pj4+Pj4+Pj4+Pj4+IGNoYW5nZQo+Pj4+Pj4+Pj4+Pj4+PiB3aWxsIGltcGxlbWVudCBwdGVfYmF0 Y2hfcmVtYWluaW5nKCksIHB0ZXBfc2V0X3dycHJvdGVjdHMoKSBhbmQKPj4+Pj4+Pj4+Pj4+Pj4g c2V0X3B0ZXNfZnVsbCgpIGluIHRoZSBhcm02NCBiYWNrZW5kIHRvIHJlYWxpemUgdGhlIHBlcmZv cm1hbmNlCj4+Pj4+Pj4+Pj4+Pj4+IGltcHJvdmVtZW50IGFzIHBhcnQgb2YgdGhlIHdvcmsgdG8g ZW5hYmxlIGNvbnRwdGUgbWFwcGluZ3MuCj4+Pj4+Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4+Pj4+IFRv IGVuc3VyZSB0aGUgYXJtNjQgaXMgcGVyZm9ybWFudCBvbmNlIGltcGxlbWVudGVkLCB0aGlzIGNo YW5nZSBpcwo+Pj4+Pj4+Pj4+Pj4+PiB2ZXJ5Cj4+Pj4+Pj4+Pj4+Pj4+IGNhcmVmdWwgdG8gb25s eSBjYWxsIHB0ZXBfZ2V0KCkgb25jZSBwZXIgcHRlIGJhdGNoLgo+Pj4+Pj4+Pj4+Pj4+Pgo+Pj4+ Pj4+Pj4+Pj4+PiBUaGUgZm9sbG93aW5nIG1pY3JvYmVuY2htYXJrIHJlc3VsdHMgZGVtb25zdGF0 ZSB0aGF0IHRoZXJlIGlzIG5vCj4+Pj4+Pj4+Pj4+Pj4+IHNpZ25pZmljYW50IHBlcmZvcm1hbmNl IGNoYW5nZSBhZnRlciB0aGlzIHBhdGNoLiBGb3JrIGlzIGNhbGxlZCBpbiBhCj4+Pj4+Pj4+Pj4+ Pj4+IHRpZ2h0IGxvb3AgaW4gYSBwcm9jZXNzIHdpdGggMUcgb2YgcG9wdWxhdGVkIG1lbW9yeSBh bmQgdGhlIHRpbWUgZm9yCj4+Pj4+Pj4+Pj4+Pj4+IHRoZQo+Pj4+Pj4+Pj4+Pj4+PiBmdW5jdGlv biB0byBleGVjdXRlIGlzIG1lYXN1cmVkLiAxMDAgaXRlcmF0aW9ucyBwZXIgcnVuLCA4IHJ1bnMK Pj4+Pj4+Pj4+Pj4+Pj4gcGVyZm9ybWVkIG9uIGJvdGggQXBwbGUgTTIgKFZNKSBhbmQgQW1wZXJl IEFsdHJhIChiYXJlIG1ldGFsKS4gVGVzdHMKPj4+Pj4+Pj4+Pj4+Pj4gcGVyZm9ybWVkIGZvciBj YXNlIHdoZXJlIDFHIG1lbW9yeSBpcyBjb21wcmlzZWQgb2Ygb3JkZXItMCBmb2xpb3MgYW5kCj4+ Pj4+Pj4+Pj4+Pj4+IGNhc2Ugd2hlcmUgY29tcHJpc2VkIG9mIHB0ZS1tYXBwZWQgb3JkZXItOSBm b2xpb3MuIE5lZ2F0aXZlIGlzCj4+Pj4+Pj4+Pj4+Pj4+IGZhc3RlciwKPj4+Pj4+Pj4+Pj4+Pj4g cG9zaXRpdmUgaXMgc2xvd2VyLCBjb21wYXJlZCB0byBiYXNlbGluZSB1cG9uIHdoaWNoIHRoZSBz ZXJpZXMgaXMKPj4+Pj4+Pj4+Pj4+Pj4gYmFzZWQ6Cj4+Pj4+Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4+ Pj4+IHwgQXBwbGUgTTIgVk3CoMKgIHwgb3JkZXItMCAocHRlLW1hcCkgfCBvcmRlci05IChwdGUt bWFwKSB8Cj4+Pj4+Pj4+Pj4+Pj4+IHwgZm9ya8KgwqDCoMKgwqDCoMKgwqDCoCB8LS0tLS0tLS0t LS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tfAo+Pj4+Pj4+Pj4+Pj4+PiB8IG1pY3JvYmVu Y2jCoMKgwqAgfMKgwqDCoCBtZWFuIHzCoMKgIHN0ZGV2IHzCoMKgwqAgbWVhbiB8wqDCoCBzdGRl diB8Cj4+Pj4+Pj4+Pj4+Pj4+IHwtLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLXwt LS0tLS0tLS18LS0tLS0tLS0tfAo+Pj4+Pj4+Pj4+Pj4+PiB8IGJhc2VsaW5lwqDCoMKgwqDCoCB8 wqDCoMKgIDAuMCUgfMKgwqDCoCAxLjElIHzCoMKgwqAgMC4wJSB8wqDCoMKgIDEuMiUgfAo+Pj4+ Pj4+Pj4+Pj4+PiB8IGFmdGVyLWNoYW5nZcKgIHzCoMKgIC0xLjAlIHzCoMKgwqAgMi4wJSB8wqDC oCAtMC4xJSB8wqDCoMKgIDEuMSUgfAo+Pj4+Pj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+Pj4+PiB8IEFt cGVyZSBBbHRyYcKgIHwgb3JkZXItMCAocHRlLW1hcCkgfCBvcmRlci05IChwdGUtbWFwKSB8Cj4+ Pj4+Pj4+Pj4+Pj4+IHwgZm9ya8KgwqDCoMKgwqDCoMKgwqDCoCB8LS0tLS0tLS0tLS0tLS0tLS0t LXwtLS0tLS0tLS0tLS0tLS0tLS0tfAo+Pj4+Pj4+Pj4+Pj4+PiB8IG1pY3JvYmVuY2jCoMKgwqAg fMKgwqDCoCBtZWFuIHzCoMKgIHN0ZGV2IHzCoMKgwqAgbWVhbiB8wqDCoCBzdGRldiB8Cj4+Pj4+ Pj4+Pj4+Pj4+IHwtLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS18 LS0tLS0tLS0tfAo+Pj4+Pj4+Pj4+Pj4+PiB8IGJhc2VsaW5lwqDCoMKgwqDCoCB8wqDCoMKgIDAu MCUgfMKgwqDCoCAxLjAlIHzCoMKgwqAgMC4wJSB8wqDCoMKgIDAuMSUgfAo+Pj4+Pj4+Pj4+Pj4+ PiB8IGFmdGVyLWNoYW5nZcKgIHzCoMKgIC0wLjElIHzCoMKgwqAgMS4yJSB8wqDCoCAtMC4xJSB8 wqDCoMKgIDAuMSUgfAo+Pj4+Pj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+Pj4+PiBUZXN0ZWQtYnk6IEpv aG4gSHViYmFyZCA8amh1YmJhcmRAbnZpZGlhLmNvbT4KPj4+Pj4+Pj4+Pj4+Pj4gUmV2aWV3ZWQt Ynk6IEFsaXN0YWlyIFBvcHBsZSA8YXBvcHBsZUBudmlkaWEuY29tPgo+Pj4+Pj4+Pj4+Pj4+PiBT aWduZWQtb2ZmLWJ5OiBSeWFuIFJvYmVydHMgPHJ5YW4ucm9iZXJ0c0Bhcm0uY29tPgo+Pj4+Pj4+ Pj4+Pj4+PiAtLS0KPj4+Pj4+Pj4+Pj4+Pj4gwqDCoMKgwqDCoMKgwqAgaW5jbHVkZS9saW51eC9w Z3RhYmxlLmggfCA4MAo+Pj4+Pj4+Pj4+Pj4+PiArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwo+Pj4+Pj4+Pj4+Pj4+PiDCoMKgwqDCoMKgwqDCoCBtbS9tZW1vcnkuY8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB8IDkyCj4+Pj4+Pj4+Pj4+Pj4+ICsrKysrKysrKysrKysrKysrKysr KysrKysrLS0tLS0tLS0tLS0tLS0tCj4+Pj4+Pj4+Pj4+Pj4+IMKgwqDCoMKgwqDCoMKgIDIgZmls ZXMgY2hhbmdlZCwgMTM5IGluc2VydGlvbnMoKyksIDMzIGRlbGV0aW9ucygtKQo+Pj4+Pj4+Pj4+ Pj4+Pgo+Pj4+Pj4+Pj4+Pj4+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgg Yi9pbmNsdWRlL2xpbnV4L3BndGFibGUuaAo+Pj4+Pj4+Pj4+Pj4+PiBpbmRleCBhZjc2MzljM2Iw YTMuLmRiOTNmYjgxNDY1YSAxMDA2NDQKPj4+Pj4+Pj4+Pj4+Pj4gLS0tIGEvaW5jbHVkZS9saW51 eC9wZ3RhYmxlLmgKPj4+Pj4+Pj4+Pj4+Pj4gKysrIGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgK Pj4+Pj4+Pj4+Pj4+Pj4gQEAgLTIwNSw2ICsyMDUsMjcgQEAgc3RhdGljIGlubGluZSBpbnQgcG1k X3lvdW5nKHBtZF90IHBtZCkKPj4+Pj4+Pj4+Pj4+Pj4gwqDCoMKgwqDCoMKgwqAgI2RlZmluZSBh cmNoX2ZsdXNoX2xhenlfbW11X21vZGUoKcKgwqDCoCBkbyB7fSB3aGlsZSAoMCkKPj4+Pj4+Pj4+ Pj4+Pj4gwqDCoMKgwqDCoMKgwqAgI2VuZGlmCj4+Pj4+Pj4+Pj4+Pj4+IMKgwqDCoMKgwqDCoMKg ICsjaWZuZGVmIHB0ZV9iYXRjaF9yZW1haW5pbmcKPj4+Pj4+Pj4+Pj4+Pj4gKy8qKgo+Pj4+Pj4+ Pj4+Pj4+PiArICogcHRlX2JhdGNoX3JlbWFpbmluZyAtIE51bWJlciBvZiBwYWdlcyBmcm9tIGFk ZHIgdG8gbmV4dCBiYXRjaAo+Pj4+Pj4+Pj4+Pj4+PiBib3VuZGFyeS4KPj4+Pj4+Pj4+Pj4+Pj4g KyAqIEBwdGU6IFBhZ2UgdGFibGUgZW50cnkgZm9yIHRoZSBmaXJzdCBwYWdlLgo+Pj4+Pj4+Pj4+ Pj4+PiArICogQGFkZHI6IEFkZHJlc3Mgb2YgdGhlIGZpcnN0IHBhZ2UuCj4+Pj4+Pj4+Pj4+Pj4+ ICsgKiBAZW5kOiBCYXRjaCBjZWlsaW5nIChlLmcuIGVuZCBvZiB2bWEpLgo+Pj4+Pj4+Pj4+Pj4+ PiArICoKPj4+Pj4+Pj4+Pj4+Pj4gKyAqIFNvbWUgYXJjaGl0ZWN0dXJlcyAoYXJtNjQpIGNhbiBl ZmZpY2llbnRseSBtb2RpZnkgYSBjb250aWd1b3VzCj4+Pj4+Pj4+Pj4+Pj4+IGJhdGNoIG9mCj4+ Pj4+Pj4+Pj4+Pj4+IHB0ZXMuCj4+Pj4+Pj4+Pj4+Pj4+ICsgKiBJbiBzdWNoIGNhc2VzLCB0aGlz IGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlbWFpbmluZyBudW1iZXIgb2YKPj4+Pj4+Pj4+Pj4+Pj4g cGFnZXMgdG8KPj4+Pj4+Pj4+Pj4+Pj4gdGhlIGVuZAo+Pj4+Pj4+Pj4+Pj4+PiArICogb2YgdGhl IGN1cnJlbnQgYmF0Y2gsIGFzIGRlZmluZWQgYnkgYWRkci4gVGhpcyBjYW4gYmUgdXNlZnVsIHdo ZW4KPj4+Pj4+Pj4+Pj4+Pj4gaXRlcmF0aW5nCj4+Pj4+Pj4+Pj4+Pj4+ICsgKiBvdmVyIHB0ZXMu Cj4+Pj4+Pj4+Pj4+Pj4+ICsgKgo+Pj4+Pj4+Pj4+Pj4+PiArICogTWF5IGJlIG92ZXJyaWRkZW4g YnkgdGhlIGFyY2hpdGVjdHVyZSwgZWxzZSBiYXRjaCBzaXplIGlzCj4+Pj4+Pj4+Pj4+Pj4+IGFs d2F5cyAxLgo+Pj4+Pj4+Pj4+Pj4+PiArICovCj4+Pj4+Pj4+Pj4+Pj4+ICtzdGF0aWMgaW5saW5l IHVuc2lnbmVkIGludCBwdGVfYmF0Y2hfcmVtYWluaW5nKHB0ZV90IHB0ZSwgdW5zaWduZWQKPj4+ Pj4+Pj4+Pj4+Pj4gbG9uZwo+Pj4+Pj4+Pj4+Pj4+PiBhZGRyLAo+Pj4+Pj4+Pj4+Pj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBsb25n IGVuZCkKPj4+Pj4+Pj4+Pj4+Pj4gK3sKPj4+Pj4+Pj4+Pj4+Pj4gK8KgwqDCoCByZXR1cm4gMTsK Pj4+Pj4+Pj4+Pj4+Pj4gK30KPj4+Pj4+Pj4+Pj4+Pj4gKyNlbmRpZgo+Pj4+Pj4+Pj4+Pj4+Cj4+ Pj4+Pj4+Pj4+Pj4gSXQncyBhIHNoYW1lIHdlIG5vdyBsb3NlIHRoZSBvcHRpbWl6YXRpb24gZm9y IGFsbCBvdGhlciBhcmNodGllY3R1cmVzLgo+Pj4+Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4+Pj4gV2Fz IHRoZXJlIG5vIHdheSB0byBoYXZlIHNvbWUgYmFzaWMgYmF0Y2hpbmcgbWVjaGFuaXNtIHRoYXQg ZG9lc24ndAo+Pj4+Pj4+Pj4+Pj4+IHJlcXVpcmUKPj4+Pj4+Pj4+Pj4+PiBhcmNoCj4+Pj4+Pj4+ Pj4+Pj4gc3BlY2lmaWNzPwo+Pj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pj4+IEkgdHJpZWQgYSBidW5j aCBvZiB0aGluZ3MgYnV0IHVsdGltYXRlbHkgdGhlIHdheSBJJ3ZlIGRvbmUgaXQgd2FzIHRoZQo+ Pj4+Pj4+Pj4+Pj4gb25seQo+Pj4+Pj4+Pj4+Pj4gd2F5Cj4+Pj4+Pj4+Pj4+PiB0byByZWR1Y2Ug dGhlIG9yZGVyLTAgZm9yayByZWdyZXNzaW9uIHRvIDAuCj4+Pj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+ Pj4gTXkgb3JpZ2luYWwgdjMgcG9zdGluZyB3YXMgY29zdGluZyA1JSBleHRyYSBhbmQgZXZlbiBt eSBmaXJzdCBhdHRlbXB0Cj4+Pj4+Pj4+Pj4+PiBhdCBhbgo+Pj4+Pj4+Pj4+Pj4gYXJjaC1zcGVj aWZpYyB2ZXJzaW9uIHRoYXQgZGlkbid0IHJlc29sdmUgdG8gYSBjb21waWxlLXRpbWUgY29uc3Rh bnQgMQo+Pj4+Pj4+Pj4+Pj4gc3RpbGwKPj4+Pj4+Pj4+Pj4+IGNvc3QgYW4gZXh0cmEgMyUuCj4+ Pj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+Pj4+IEknZCBo YXZlIHRob3VnaHQgdGhhdCBzb21ldGhpbmcgdmVyeSBiYXNpYyB3b3VsZCBoYXZlIHdvcmtlZCBs aWtlOgo+Pj4+Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4+Pj4gKiBDaGVjayBpZiBQVEUgaXMgdGhlIHNh bWUgd2hlbiBzZXR0aW5nIHRoZSBQRk4gdG8gMC4KPj4+Pj4+Pj4+Pj4+PiAqIENoZWNrIHRoYXQg UEZOIGlzIGNvbnNlY3V0aXZlCj4+Pj4+Pj4+Pj4+Pj4gKiBDaGVjayB0aGF0IGFsbCBQRk5zIGJl bG9uZyB0byB0aGUgc2FtZSBmb2xpbwo+Pj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pj4+IEkgaGF2ZW4n dCB0cmllZCB0aGlzIGV4YWN0IGFwcHJvYWNoLCBidXQgSSdkIGJlIHN1cnByaXNlZCBpZiBJIGNh biBnZXQKPj4+Pj4+Pj4+Pj4+IHRoZQo+Pj4+Pj4+Pj4+Pj4gcmVncmVzc2lvbiB1bmRlciA0JSB3 aXRoIHRoaXMuIEZ1cnRoZXIgYWxvbmcgdGhlIHNlcmllcyBJIHNwZW50IGEKPj4+Pj4+Pj4+Pj4+ IGxvdCBvZgo+Pj4+Pj4+Pj4+Pj4gdGltZQo+Pj4+Pj4+Pj4+Pj4gaGF2aW5nIHRvIGZpZGRsZSB3 aXRoIHRoZSBhcm02NCBpbXBsZW1lbnRhdGlvbjsgZXZlcnkgY29uZGl0aW9uYWwgYW5kCj4+Pj4+ Pj4+Pj4+PiBldmVyeQo+Pj4+Pj4+Pj4+Pj4gbWVtb3J5IHJlYWQgKGV2ZW4gd2hlbiBpbiBjYWNo ZSkgd2FzIGEgcHJvYmxlbS4gVGhlcmUgaXMganVzdCBzbwo+Pj4+Pj4+Pj4+Pj4gbGl0dGxlIGlu Cj4+Pj4+Pj4+Pj4+PiB0aGUKPj4+Pj4+Pj4+Pj4+IGlubmVyIGxvb3AgdGhhdCBldmVyeSBpbnN0 cnVjdGlvbiBtYXR0ZXJzLiAoQXQgbGVhc3Qgb24gQW1wZXJlIEFsdHJhCj4+Pj4+Pj4+Pj4+PiBh bmQKPj4+Pj4+Pj4+Pj4+IEFwcGxlCj4+Pj4+Pj4+Pj4+PiBNMikuCj4+Pj4+Pj4+Pj4+Pgo+Pj4+ Pj4+Pj4+Pj4gT2YgY291cnNlIGlmIHlvdSdyZSB3aWxsaW5nIHRvIHBheSB0aGF0IDQtNSUgZm9y IG9yZGVyLTAgdGhlbiB0aGUKPj4+Pj4+Pj4+Pj4+IGJlbmVmaXQgdG8KPj4+Pj4+Pj4+Pj4+IG9y ZGVyLTkgaXMgYXJvdW5kIDEwJSBpbiBteSBtZWFzdXJlbWVudHMuIFBlcnNvbmFsbHkgdGhvdWdo LCBJJ2QKPj4+Pj4+Pj4+Pj4+IHByZWZlciB0bwo+Pj4+Pj4+Pj4+Pj4gcGxheQo+Pj4+Pj4+Pj4+ Pj4gc2FmZSBhbmQgZW5zdXJlIHRoZSBjb21tb24gb3JkZXItMCBjYXNlIGRvZXNuJ3QgcmVncmVz cywgYXMgeW91Cj4+Pj4+Pj4+Pj4+PiBwcmV2aW91c2x5Cj4+Pj4+Pj4+Pj4+PiBzdWdnZXN0ZWQu Cj4+Pj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+PiBJIGp1c3QgaGFja2VkIHNvbWV0 aGluZyB1cCwgb24gdG9wIG9mIG15IGJlbG92ZWQgcm1hcCBjbGVhbnVwL2JhdGNoaW5nCj4+Pj4+ Pj4+Pj4+IHNlcmllcy4gSQo+Pj4+Pj4+Pj4+PiBpbXBsZW1lbnRlZCB2ZXJ5IGdlbmVyaWMgYW5k IHNpbXBsZSBiYXRjaGluZyBmb3IgbGFyZ2UgZm9saW9zIChhbGwgUFRFCj4+Pj4+Pj4+Pj4+IGJp dHMKPj4+Pj4+Pj4+Pj4gZXhjZXB0IHRoZSBQRk4gaGF2ZSB0byBtYXRjaCkuCj4+Pj4+Pj4+Pj4+ Cj4+Pj4+Pj4+Pj4+IFNvbWUgdmVyeSBxdWljayB0ZXN0aW5nIChkb24ndCB0cnVzdCBlYWNoIGxh c3QgJSApIG9uIEludGVsKFIpIFhlb24oUikKPj4+Pj4+Pj4+Pj4gU2lsdmVyCj4+Pj4+Pj4+Pj4+ IDQyMTBSIENQVS4KPj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pj4gb3JkZXItMDogMC4wMTQyMTAgLT4g MC4wMTM5NjkKPj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pj4gLT4gQXJvdW5kIDEuNyAlIGZhc3Rlcgo+ Pj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+PiBvcmRlci05OiAwLjAxNDM3MyAtPiAwLjAwOTE0OQo+Pj4+ Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+PiAtPiBBcm91bmQgMzYuMyAlIGZhc3Rlcgo+Pj4+Pj4+Pj4+Cj4+ Pj4+Pj4+Pj4gV2VsbCBJIGd1ZXNzIHRoYXQgc2hvd3MgbWUgOikKPj4+Pj4+Pj4+Pgo+Pj4+Pj4+ Pj4+IEknbGwgZG8gYSByZXZpZXcgYW5kIHJ1biB0aGUgdGVzdHMgb24gbXkgSFcgdG8gc2VlIGlm IGl0IGNvbmN1cnMuCj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+IEkgcHVzaGVkIGEgc2lt cGxlIGNvbXBpbGUgZml4dXAgKHdlIG5lZWQgcHRlX25leHRfcGZuKCkpLgo+Pj4+Pj4+Pgo+Pj4+ Pj4+PiBJJ3ZlIGp1c3QgYmVlbiB0cnlpbmcgdG8gY29tcGlsZSBhbmQgbm90aWNlZCB0aGlzLiBX aWxsIHRha2UgYSBsb29rIGF0IHlvdXIKPj4+Pj4+Pj4gdXBkYXRlLgo+Pj4+Pj4+Pgo+Pj4+Pj4+ PiBCdXQgdXBvbiByZXZpZXcsIEkndmUgbm90aWNlZCB0aGUgcGFydCB0aGF0IEkgdGhpbmsgbWFr ZXMgdGhpcyBkaWZmaWN1bHQKPj4+Pj4+Pj4gZm9yCj4+Pj4+Pj4+IGFybTY0IHdpdGggdGhlIGNv bnRwdGUgb3B0aW1pemF0aW9uOyBZb3UgYXJlIGNhbGxpbmcgcHRlcF9nZXQoKSBmb3IgZXZlcnkK Pj4+Pj4+Pj4gcHRlIGluCj4+Pj4+Pj4+IHRoZSBiYXRjaC4gV2hpbGUgdGhpcyBpcyBmdW5jdGlv bmFsbHkgY29ycmVjdCwgb25jZSBhcm02NCBoYXMgdGhlIGNvbnRwdGUKPj4+Pj4+Pj4gY2hhbmdl cywgaXRzIHB0ZXBfZ2V0KCkgaGFzIHRvIHJlYWQgZXZlcnkgcHRlIGluIHRoZSBjb250cHRlIGJs b2NrIGluCj4+Pj4+Pj4+IG9yZGVyIHRvCj4+Pj4+Pj4+IGdhdGhlciB0aGUgYWNjZXNzIGFuZCBk aXJ0eSBiaXRzLiBTbyBpZiB5b3VyIGJhdGNoaW5nIGZ1bmN0aW9uIGVuZHMgdXAKPj4+Pj4+Pj4g d2VhbGtpbmcKPj4+Pj4+Pj4gYSAxNiBlbnRyeSBjb250cHRlIGJsb2NrLCB0aGF0IHdpbGwgY2F1 c2UgMTYgeCAxNiByZWFkcywgd2hpY2gga2lsbHMKPj4+Pj4+Pj4gcGVyZm9ybWFuY2UuIFRoYXQn cyB3aHkgSSBhZGRlZCB0aGUgYXJjaC1zcGVjaWZpYyBwdGVfYmF0Y2hfcmVtYWluaW5nKCkKPj4+ Pj4+Pj4gZnVuY3Rpb247IHRoaXMgYWxsb3dzIHRoZSBjb3JlLW1tIHRvIHNraXAgdG8gdGhlIGVu ZCBvZiB0aGUgY29udHB0ZQo+Pj4+Pj4+PiBibG9jayBhbmQKPj4+Pj4+Pj4gYXZvaWQgcHRlcF9n ZXQoKSBmb3IgdGhlIDE1IHRhaWwgcHRlcy4gU28gd2UgZW5kIHVwIHdpdGggMTYgUkVBRF9PTkNF KClzCj4+Pj4+Pj4+IGluc3RlYWQKPj4+Pj4+Pj4gb2YgMjU2Lgo+Pj4+Pj4+Pgo+Pj4+Pj4+PiBJ IGNvbnNpZGVyZWQgbWFraW5nIGEgcHRlcF9nZXRfbm95b3VuZ2RpcnR5KCkgdmFyaWFudCwgd2hp Y2ggd291bGQgYXZvaWQKPj4+Pj4+Pj4gdGhlCj4+Pj4+Pj4+IGJpdAo+Pj4+Pj4+PiBnYXRoZXJp bmcuIEJ1dCB3ZSBoYXZlIGEgc2ltaWxhciBwcm9ibGVtIGluIHphcF9wdGVfcmFuZ2UoKSBhbmQg dGhhdAo+Pj4+Pj4+PiBmdW5jdGlvbgo+Pj4+Pj4+PiBuZWVkcyB0aGUgZGlydHkgYml0IHRvIHVw ZGF0ZSB0aGUgZm9saW8uIFNvIGl0IGRvZXNuJ3Qgd29yayB0aGVyZS4gKHNlZQo+Pj4+Pj4+PiBw YXRjaCAzCj4+Pj4+Pj4+IGluIG15IHNlcmllcykuCj4+Pj4+Pj4+Cj4+Pj4+Pj4+IEkgZ3Vlc3Mg eW91IGFyZSBnb2luZyB0byBzYXkgdGhhdCB3ZSBzaG91bGQgY29tYmluZSBib3RoIGFwcHJvYWNo ZXMsIHNvCj4+Pj4+Pj4+IHRoYXQKPj4+Pj4+Pj4geW91ciBiYXRjaGluZyBsb29wIGNhbiBza2lw IGZvcndhcmQgYW4gYXJjaC1wcm92aWRlZCBudW1iZXIgb2YgcHRlcz8gVGhhdAo+Pj4+Pj4+PiB3 b3VsZAo+Pj4+Pj4+PiBjZXJ0YWlubHkgd29yaywgYnV0IGZlZWxzIGxpa2UgYW4gb3J0aG9nb25h bCBjaGFuZ2UgdG8gd2hhdCBJJ20gdHJ5aW5nIHRvCj4+Pj4+Pj4+IGFjaGlldmUgOikuIEFueXdh eSwgSSdsbCBzcGVuZCBzb21lIHRpbWUgcGxheWluZyB3aXRoIGl0IHRvZGF5Lgo+Pj4+Pj4+Cj4+ Pj4+Pj4gWW91IGNhbiBvdmVyd3JpdGUgdGhlIGZ1bmN0aW9uIG9yIGFkZCBzcGVjaWFsLWNhc2lu ZyBpbnRlcm5hbGx5LCB5ZXMuCj4+Pj4+Pj4KPj4+Pj4+PiBSaWdodCBub3csIHlvdXIgcGF0Y2gg aXMgY2FsbGVkICJtbTogQmF0Y2gtY29weSBQVEUgcmFuZ2VzIGR1cmluZyBmb3JrKCkiCj4+Pj4+ Pj4gYW5kIGl0Cj4+Pj4+Pj4gZG9lc24ndCBkbyBhbnkgb2YgdGhhdCBiZXNpZGVzIHByZXBhcmlu ZyBmb3Igc29tZSBhcm02NCB3b3JrLgo+Pj4+Pj4+Cj4+Pj4+Pgo+Pj4+Pj4gV2VsbCBpdCBhbGxv d3MgYW4gYXJjaCB0byBvcHQtaW4gdG8gYmF0Y2hpbmcuIEJ1dCBJIHNlZSB5b3VyIHBvaW50Lgo+ Pj4+Pj4KPj4+Pj4+IEhvdyBkbyB5b3Ugd2FudCB0byBoYW5kbGUgeW91ciBwYXRjaGVzPyBEbyB5 b3Ugd2FudCB0byBjbGVhbiB0aGVtIHVwIGFuZCBJJ2xsCj4+Pj4+PiBiYXNlIG15IHN0dWZmIG9u IHRvcD8gT3IgZG8geW91IHdhbnQgbWUgdG8gdGFrZSB0aGVtIGFuZCBzb3J0IGl0IGFsbCBvdXQ/ Cj4+Pj4+Cj4+Pj4+IFdoYXRldmVyIHlvdSBwcmVmZXIsIGl0IHdhcyBtb3N0bHkgYSBxdWljayBw cm90b3R5cGUgdG8gc2VlIGlmIHdlIGNhbiBhY2hpZXZlCj4+Pj4+IGRlY2VudCBwZXJmb3JtYW5j ZS4KPj4+Pgo+Pj4+IEknbSBhYm91dCB0byBydW4gaXQgb24gQWx0cmEgYW5kIE0yLiBCdXQgSSBh c3N1bWUgaXQgd2lsbCBzaG93IHNpbWlsYXIgcmVzdWx0cy4KPj4KPj4gT0sgcmVzdWx0cyBpbiwg bm90IGxvb2tpbmcgZ3JlYXQsIHdoaWNoIGFsaWducyB3aXRoIG15IHByZXZpb3VzIGV4cGVyaWVu Y2UuIFRoYXQKPj4gc2FpZCwgSSdtIHNlZWluZyBzb21lICJCVUc6IEJhZCBwYWdlIHN0YXRlIGlu IHByb2Nlc3MgZ21haW7CoCBwZm46MTJhMDk0IiBzbwo+PiBwZXJoYXBzIHRoZXNlIHJlc3VsdHMg YXJlIG5vdCB2YWxpZC4uLgo+IAo+IEkgZGlkbid0IHNlZSB0aGF0IHNvIGZhciBvbiB4ODYsIG1h eWJlIHJlbGF0ZWQgdG8gdGhlIFBGTiBmaXh1cD8KCkFsbCBJJ3ZlIGRvbmUgaXMgZGVmaW5lIFBG Tl9QVEVfU0hJRlQgZm9yIGFybTY0IG9uIHRvcCBvZiB5b3VyIGxhdGVzdCBwYXRjaDoKCmRpZmYg LS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvYXJtNjQvaW5j bHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IGIxOWE4YWVlNjg0Yy4uOWViMGZkNjkzZGY5IDEwMDY0 NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL2FybTY0 L2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMzU5LDYgKzM1OSw4IEBAIHN0YXRpYyBpbmxpbmUg dm9pZCBzZXRfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIH0KICNkZWZpbmUgc2V0X3B0ZXMg c2V0X3B0ZXMKIAorI2RlZmluZSBQRk5fUFRFX1NISUZUICAgICAgICAgIFBBR0VfU0hJRlQKKwog LyoKICAqIEh1Z2UgcHRlIGRlZmluaXRpb25zLgogICovCgoKQXMgYW4gYXNpZGUsIEkgdGhpbmsg dGhlcmUgaXMgYSBidWcgaW4gYXJtNjQncyBzZXRfcHRlcygpIGZvciBQQSA+IDQ4LWJpdCBjYXNl LiBCdXQgdGhhdCB3b24ndCBhZmZlY3QgdGhpcy4KCgpXaXRoIFZNX0RFQlVHIG9uLCB0aGlzIGlz IHRoZSBmaXJzdCB3YXJuaW5nIEkgc2VlIGR1cmluZyBib290OgoKClsgICAgMC4yNzgxMTBdIHBh Z2U6MDAwMDAwMDBjN2NlZDRlOCByZWZjb3VudDoxMiBtYXBjb3VudDowIG1hcHBpbmc6MDAwMDAw MDBiMmY5NzM5YiBpbmRleDoweDFhOCBwZm46MHgxYmZmMzAKWyAgICAwLjI3ODc0Ml0gaGVhZDow MDAwMDAwMGM3Y2VkNGU4IG9yZGVyOjIgZW50aXJlX21hcGNvdW50OjAgbnJfcGFnZXNfbWFwcGVk OjIgcGluY291bnQ6MApbICAgIDAuMjc5MjQ3XSBtZW1jZzpmZmZmMWE2NzgwMDhhMDAwClsgICAg MC4yNzk1MThdIGFvcHM6eGZzX2FkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBpbm86YjBmNzBjIGRl bnRyeSBuYW1lOiJzeXN0ZW1kIgpbICAgIDAuMjc5NzQ2XSBmbGFnczogMHhiZmZmYzAwMDAwMDgw NjgodXB0b2RhdGV8bHJ1fHByaXZhdGV8aGVhZHxub2RlPTB8em9uZT0yfGxhc3RjcHVwaWQ9MHhm ZmZmKQpbICAgIDAuMjgwMDAzXSBwYWdlX3R5cGU6IDB4ZmZmZmZmZmYoKQpbICAgIDAuMjgwMTEw XSByYXc6IDBiZmZmYzAwMDAwMDgwNjggZmZmZmZjNjk5ZWZmY2IwOCBmZmZmZmM2OTllZmZjZDA4 IGZmZmYxYTY3ODk4MGE2YjAKWyAgICAwLjI4MDMzOF0gcmF3OiAwMDAwMDAwMDAwMDAwMWE4IGZm ZmYxYTY3OGEwZjAyMDAgMDAwMDAwMGNmZmZmZmZmZiBmZmZmMWE2NzgwMDhhMDAwClsgICAgMC4y ODA1NjRdIHBhZ2UgZHVtcGVkIGJlY2F1c2U6IFZNX1dBUk5fT05fRk9MSU8oKF9HZW5lcmljKChw YWdlICsgbnJfcGFnZXMgLSAxKSwgY29uc3Qgc3RydWN0IHBhZ2UgKjogKGNvbnN0IHN0cnVjdCBm b2xpbyAqKV9jb21wb3VuZF9oZWFkKHBhZ2UgKyBucl9wYWdlcyAtIDEpLCBzdHJ1Y3QgcGFnZSAq OiAoc3RydWN0IGZvbGlvICopX2NvbXBvdW5kX2hlYWQocGFnZSArIG5yX3BhZ2VzIC0gMSkpKSAh PSBmb2xpbykKWyAgICAwLjI4MTE5Nl0gLS0tLS0tLS0tLS0tWyBjdXQgaGVyZSBdLS0tLS0tLS0t LS0tClsgICAgMC4yODEzNDldIFdBUk5JTkc6IENQVTogMiBQSUQ6IDEgYXQgaW5jbHVkZS9saW51 eC9ybWFwLmg6MjA4IF9fZm9saW9fcm1hcF9zYW5pdHlfY2hlY2tzLmNvbnN0cHJvcC4wKzB4MTY4 LzB4MTg4ClsgICAgMC4yODE2NTBdIE1vZHVsZXMgbGlua2VkIGluOgpbICAgIDAuMjgxNzUyXSBD UFU6IDIgUElEOiAxIENvbW06IHN5c3RlbWQgTm90IHRhaW50ZWQgNi43LjAtcmM0LTAwMzQ1LWdk YjQ1NDkyYmJhOWQgIzcKWyAgICAwLjI4MTk1OV0gSGFyZHdhcmUgbmFtZTogbGludXgsZHVtbXkt dmlydCAoRFQpClsgICAgMC4yODIwNzldIHBzdGF0ZTogNjE0MDAwMDUgKG5aQ3YgZGFpZiArUEFO IC1VQU8gLVRDTyArRElUIC1TU0JTIEJUWVBFPS0tKQpbICAgIDAuMjgyMjYwXSBwYyA6IF9fZm9s aW9fcm1hcF9zYW5pdHlfY2hlY2tzLmNvbnN0cHJvcC4wKzB4MTY4LzB4MTg4ClsgICAgMC4yODI0 MjFdIGxyIDogX19mb2xpb19ybWFwX3Nhbml0eV9jaGVja3MuY29uc3Rwcm9wLjArMHgxNjgvMHgx ODgKWyAgICAwLjI4MjU4M10gc3AgOiBmZmZmODAwMDgwMDdiOWUwClsgICAgMC4yODI2NzBdIHgy OTogZmZmZjgwMDA4MDA3YjllMCB4Mjg6IDAwMDBhYWFhY2JlY2IwMDAgeDI3OiBmZmZmZmM2OTll ZmZjY2MwClsgICAgMC4yODI4NzJdIHgyNjogMDA2MDAwMDFiZmYzM2ZjMyB4MjU6IDAwMDAwMDAw MDAwMDAwMDEgeDI0OiBmZmZmMWE2NzhhMzAyMjI4ClsgICAgMC4yODMwNjJdIHgyMzogZmZmZjFh Njc4YTMyNjY1OCB4MjI6IDAwMDAwMDAwMDAwMDAwMDAgeDIxOiAwMDAwMDAwMDAwMDAwMDA0Clsg ICAgMC4yODMyNDZdIHgyMDogZmZmZmZjNjk5ZWZmY2NjMCB4MTk6IGZmZmZmYzY5OWVmZmNjMDAg eDE4OiAwMDAwMDAwMDAwMDAwMDAwClsgICAgMC4yODM0MzVdIHgxNzogMzczNjYxMzE2NjY2NjY2 NiB4MTY6IDIwNjY2NjY2NjY2NjY2NjYgeDE1OiAwNzIwMDcyMDA3MjAwNzIwClsgICAgMC4yODM2 NzldIHgxNDogMDcyMDA3MjAwNzIwMDcyMCB4MTM6IDA3MjAwNzIwMDcyMDA3MjAgeDEyOiAwNzIw MDcyMDA3MjAwNzIwClsgICAgMC4yODM5MzNdIHgxMTogMDcyMDA3MjAwNzIwMDcyMCB4MTA6IGZm ZmZhODllY2Q3OWJhNTAgeDkgOiBmZmZmYTg5ZWNhYjIzMDU0ClsgICAgMC4yODQyMTRdIHg4IDog ZmZmZmE4OWVjZDc0M2E1MCB4NyA6IGZmZmZhODllY2Q3OWJhNTAgeDYgOiAwMDAwMDAwMDAwMDAw MDAwClsgICAgMC4yODQ1NDVdIHg1IDogMDAwMDAwMDAwMDAwYmZmNCB4NCA6IDAwMDAwMDAwMDAw MDAwMDAgeDMgOiAwMDAwMDAwMDAwMDAwMDAwClsgICAgMC4yODQ4NzVdIHgyIDogMDAwMDAwMDAw MDAwMDAwMCB4MSA6IGZmZmYxYTY3ODE0MjAwMDAgeDAgOiAwMDAwMDAwMDAwMDAwMGU1ClsgICAg MC4yODUyMDVdIENhbGwgdHJhY2U6ClsgICAgMC4yODUzMjBdICBfX2ZvbGlvX3JtYXBfc2FuaXR5 X2NoZWNrcy5jb25zdHByb3AuMCsweDE2OC8weDE4OApbICAgIDAuMjg1NTk0XSAgY29weV9wYWdl X3JhbmdlKzB4MTE4MC8weDEzMjgKWyAgICAwLjI4NTc4OF0gIGNvcHlfcHJvY2VzcysweDFiMDQv MHgxZGI4ClsgICAgMC4yODU5MzNdICBrZXJuZWxfY2xvbmUrMHg5NC8weDNmOApbICAgIDAuMjg2 MDc4XSAgX19kb19zeXNfY2xvbmUrMHg1OC8weDg4ClsgICAgMC4yODYyNDddICBfX2FybTY0X3N5 c19jbG9uZSsweDI4LzB4NDAKWyAgICAwLjI4NjQzMF0gIGludm9rZV9zeXNjYWxsKzB4NTAvMHgx MjgKWyAgICAwLjI4NjYwN10gIGVsMF9zdmNfY29tbW9uLmNvbnN0cHJvcC4wKzB4NDgvMHhmMApb ICAgIDAuMjg2ODI2XSAgZG9fZWwwX3N2YysweDI0LzB4MzgKWyAgICAwLjI4Njk4M10gIGVsMF9z dmMrMHgzNC8weGI4ClsgICAgMC4yODcxNDJdICBlbDB0XzY0X3N5bmNfaGFuZGxlcisweGMwLzB4 YzgKWyAgICAwLjI4NzMzOV0gIGVsMHRfNjRfc3luYysweDE5MC8weDE5OApbICAgIDAuMjg3NTE0 XSAtLS1bIGVuZCB0cmFjZSAwMDAwMDAwMDAwMDAwMDAwIF0tLS0KCgo+IAo+Pgo+PiAxMDAgaXRl cmF0aW9ucyBwZXIgcnVuLCA4IHJ1bnMgb3ZlciAyIHJlYm9vdHMuIFBvc2l0aXZlIGlzIHNsb3dl ciB0aGFuIGJhc2VsaW5lLAo+PiBuZWdhdGl2ZSBpcyBmYXN0ZXI6Cj4+Cj4+IEZvcmssIG9yZGVy LTAsIEFwcGxlIE0yIFZNOgo+PiB8IGtlcm5lbMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB8wqDCoCBtZWFuX3JlbCB8wqDCoCBzdGRfcmVsIHwKPj4gfDotLS0tLS0tLS0tLS0tLS0tLS0t LS0tfC0tLS0tLS0tLS0tOnwtLS0tLS0tLS0tOnwKPj4gfCBtbS11bnN0YWJsZcKgwqDCoMKgwqDC oMKgwqDCoMKgIHzCoMKgwqDCoMKgwqAgMC4wJSB8wqDCoMKgwqDCoCAwLjglIHwKPj4gfCBodWdl dGxiLXJtYXAtY2xlYW51cHMgfMKgwqDCoMKgwqDCoCAxLjMlIHzCoMKgwqDCoMKgIDIuMCUgfAo+ PiB8IGZvcmstYmF0Y2hpbmfCoMKgwqDCoMKgwqDCoMKgIHzCoMKgwqDCoMKgwqAgMy41JSB8wqDC oMKgwqDCoCAxLjIlIHwKPj4KPj4gRm9yaywgb3JkZXItOSwgQXBwbGUgTTIgVk06Cj4+IHwga2Vy bmVswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIG1lYW5fcmVsIHzCoMKgIHN0 ZF9yZWwgfAo+PiB8Oi0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS06fC0tLS0tLS0t LS06fAo+PiB8IG1tLXVuc3RhYmxlwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqDCoMKgwqDCoCAw LjAlIHzCoMKgwqDCoMKgIDAuOCUgfAo+PiB8IGh1Z2V0bGItcm1hcC1jbGVhbnVwcyB8wqDCoMKg wqDCoMKgIDAuOSUgfMKgwqDCoMKgwqAgMC45JSB8Cj4+IHwgZm9yay1iYXRjaGluZ8KgwqDCoMKg wqDCoMKgwqAgfMKgwqDCoMKgIC0zNS42JSB8wqDCoMKgwqDCoCAyLjAlIHwKPj4KPj4gRm9yaywg b3JkZXItMCwgQW1wZXJlIEFsdHJhOgo+PiB8IGtlcm5lbMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB8wqDCoCBtZWFuX3JlbCB8wqDCoCBzdGRfcmVsIHwKPj4gfDotLS0tLS0tLS0tLS0t LS0tLS0tLS0tfC0tLS0tLS0tLS0tOnwtLS0tLS0tLS0tOnwKPj4gfCBtbS11bnN0YWJsZcKgwqDC oMKgwqDCoMKgwqDCoMKgIHzCoMKgwqDCoMKgwqAgMC4wJSB8wqDCoMKgwqDCoCAwLjclIHwKPj4g fCBodWdldGxiLXJtYXAtY2xlYW51cHMgfMKgwqDCoMKgwqDCoCAzLjIlIHzCoMKgwqDCoMKgIDAu NyUgfAo+PiB8IGZvcmstYmF0Y2hpbmfCoMKgwqDCoMKgwqDCoMKgIHzCoMKgwqDCoMKgwqAgNS41 JSB8wqDCoMKgwqDCoCAxLjElIHwKPj4KPj4gRm9yaywgb3JkZXItOSwgQW1wZXJlIEFsdHJhOgo+ PiB8IGtlcm5lbMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCBtZWFuX3JlbCB8 wqDCoCBzdGRfcmVsIHwKPj4gfDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tOnwt LS0tLS0tLS0tOnwKPj4gfCBtbS11bnN0YWJsZcKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgwqDC oMKgwqAgMC4wJSB8wqDCoMKgwqDCoCAwLjElIHwKPj4gfCBodWdldGxiLXJtYXAtY2xlYW51cHMg fMKgwqDCoMKgwqDCoCAwLjUlIHzCoMKgwqDCoMKgIDAuMSUgfAo+PiB8IGZvcmstYmF0Y2hpbmfC oMKgwqDCoMKgwqDCoMKgIHzCoMKgwqDCoCAtMTAuMyUgfMKgwqDCoMKgwqAgMC4xJSB8Cj4gCj4g SXQncyB3ZWlyZCB0aGF0IGFuIGVmZmVjdGl2ZSBmb2xpb190ZXN0X2xhcmdlKCkgc2hvdWxkIGFm ZmVjdCBwZXJmb3JtYW5jZSB0aGF0Cj4gbXVjaC4gU28gZmFyIEkgaGF2ZW4ndCBzZWVuIHRoYXQg YmVoYXZpb3Igb24geDg2LCBJIHdvZG5lciB3aHkgYXJtNjQgc2hvdWxkCj4gYmVoYXZlIGhlcmUg ZGlmZmVyZW50bHkgKGFsc28gZm9yIHRoZSBybWFwIGNsZWFudXBzKS4gQ29kZSBsYXlvdXQvc2l6 ZT8KPiAKPiBJJ2xsIGRpZyBpdCB1cCBhZ2FpbiBhbmQgdGVzdCBvbiB4ODYgb25jZSBtb3JlLgo+ IAo+IFsuLi5dCj4gCj4+Cj4+IFllYWggdGhhdCB3b3VsZCBwcm9iYWJseSB3b3JrLiBCdXQgd2Ug bmVlZCB0byBiZSBjYXJlZnVsIGZvciB0aGUgY2FzZSB3aGVyZQo+PiBzdGFydF9wdGVwIGlzIGlu IHRoZSBtaWRkbGUgb2YgYSBjb250cHRlIGJsb2NrICh3aGljaCBjYW4gaGFwcGVuIC0gZHVlIHRv IHNvbWUKPj4gdm1hIHNwbGl0dGluZyBvcGVyYXRpb25zLCB3ZSBjYW4gaGF2ZSBhIGNvbnRwdGUg YmxvY2sgdGhhdCBzcGFucyAyIHZtYXMpLiBTbwo+PiBucl9jb250X3B0ZXMoKSBuZWVkcyB0byBl aXRoZXIgYmUgc3BlYydlZCB0byBvbmx5IHJldHVybiB0aGUgY29udHB0ZSBzaXplIGlmCj4+IHN0 YXJ0X3B0ZXAgaXMgcG9pbnRpbmcgdG8gdGhlIGZyb250IG9mIHRoZSBibG9jaywgYW5kIGFsbCBv dGhlciB0aW1lcywgcmV0dXJuIDEsCj4+IG9yIGl0IG5lZWRzIHRvIHJldHVybiB0aGUgbnVtYmVy IG9mIHB0ZXMgcmVtYWluaW5nIHRvIHRoZSBlbmQgb2YgdGhlIGJsb2NrIChhcwo+PiBpdCBkb2Vz IGluIG15IHY0KS4KPj4KPj4gQnV0IEkgZ3Vlc3Mgd2UgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRv bSBvZiBteSBhcm02NCBwZXJmIG51bWJlcnMgZmlyc3QuLi4gSSdsbAo+PiBkZWJ1ZyB0aG9zZSBi dWdzIGFuZCByZXJ1bi4KPiAKPiBZZXMsIEknbGwgZGlnIGludG8gaXQgb24geDg2IG9uY2UgbW9y ZS4KPiAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwps aW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJh ZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51 eC1hcm0ta2VybmVsCg==