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 X-Spam-Level: X-Spam-Status: No, score=-17.2 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 09805C433F5 for ; Mon, 13 Sep 2021 10:14:15 +0000 (UTC) Received: from mm01.cs.columbia.edu (mm01.cs.columbia.edu [128.59.11.253]) by mail.kernel.org (Postfix) with ESMTP id 6B4CB6101C for ; Mon, 13 Sep 2021 10:14:14 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 6B4CB6101C Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=lists.cs.columbia.edu Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id CB4904B1C8; Mon, 13 Sep 2021 06:14:13 -0400 (EDT) X-Virus-Scanned: at lists.cs.columbia.edu Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id aROhVgcG-JSF; Mon, 13 Sep 2021 06:14:12 -0400 (EDT) Received: from mm01.cs.columbia.edu (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 5C8814B1DD; Mon, 13 Sep 2021 06:14:12 -0400 (EDT) Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 423FC405A6 for ; Mon, 13 Sep 2021 06:14:11 -0400 (EDT) X-Virus-Scanned: at lists.cs.columbia.edu Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ewRgFHs9dTRn for ; Mon, 13 Sep 2021 06:14:09 -0400 (EDT) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 9F5094B1AC for ; Mon, 13 Sep 2021 06:14:09 -0400 (EDT) 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 016846D; Mon, 13 Sep 2021 03:14:09 -0700 (PDT) Received: from [192.168.0.110] (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id A91333F59C; Mon, 13 Sep 2021 03:14:06 -0700 (PDT) Message-ID: Date: Mon, 13 Sep 2021 11:15:33 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.1.0 Subject: Re: [PATCH 1/2] KVM: arm64: vgic: check redist region is not above the VM IPA size Content-Language: en-US To: Ricardo Koller , Eric Auger References: <20210908210320.1182303-1-ricarkol@google.com> <20210908210320.1182303-2-ricarkol@google.com> <5eb41efd-2ff2-d25b-5801-f4a56457a09f@arm.com> <80bdbdb3-1bff-aa99-c49b-76d6bd960aa9@redhat.com> From: Alexandru Elisei In-Reply-To: Cc: kvm@vger.kernel.org, maz@kernel.org, pshier@google.com, Paolo Bonzini , shuah@kernel.org, kvmarm@lists.cs.columbia.edu X-BeenThere: kvmarm@lists.cs.columbia.edu X-Mailman-Version: 2.1.14 Precedence: list List-Id: Where KVM/ARM decisions are made List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: kvmarm-bounces@lists.cs.columbia.edu Sender: kvmarm-bounces@lists.cs.columbia.edu SGkgRXJpYywgUmljYXJkbywKCk9uIDkvMTAvMjEgMjA6MzIsIFJpY2FyZG8gS29sbGVyIHdyb3Rl Ogo+IEhpIEFsZXhhbmRydSBhbmQgRXJpYywKPgo+IE9uIEZyaSwgU2VwIDEwLCAyMDIxIGF0IDEw OjQyOjIzQU0gKzAyMDAsIEVyaWMgQXVnZXIgd3JvdGU6Cj4+IEhpIEFsZXhhbmRydSwKPj4KPj4g T24gOS8xMC8yMSAxMDoyOCBBTSwgQWxleGFuZHJ1IEVsaXNlaSB3cm90ZToKPj4+IEhpIFJpY2Fy ZG8sCj4+Pgo+Pj4gT24gOS85LzIxIDU6NDcgUE0sIFJpY2FyZG8gS29sbGVyIHdyb3RlOgo+Pj4+ IE9uIFRodSwgU2VwIDA5LCAyMDIxIGF0IDExOjIwOjE1QU0gKzAxMDAsIEFsZXhhbmRydSBFbGlz ZWkgd3JvdGU6Cj4+Pj4+IEhpIFJpY2FyZG8sCj4+Pj4+Cj4+Pj4+IE9uIDkvOC8yMSAxMDowMyBQ TSwgUmljYXJkbyBLb2xsZXIgd3JvdGU6Cj4+Pj4+PiBFeHRlbmQgdmdpY192M19jaGVja19iYXNl KCkgdG8gdmVyaWZ5IHRoYXQgdGhlIHJlZGlzdHJpYnV0b3IgcmVnaW9ucwo+Pj4+Pj4gZG9uJ3Qg Z28gYWJvdmUgdGhlIFZNLXNwZWNpZmllZCBJUEEgc2l6ZSAocGh5c19zaXplKS4gVGhpcyBjYW4g aGFwcGVuCj4+Pj4+PiB3aGVuIHVzaW5nIHRoZSBsZWdhY3kgS1ZNX1ZHSUNfVjNfQUREUl9UWVBF X1JFRElTVCBhdHRyaWJ1dGUgd2l0aDoKPj4+Pj4+Cj4+Pj4+PiAgIGJhc2UgKyBzaXplID4gcGh5 c19zaXplIEFORCBiYXNlIDwgcGh5c19zaXplCj4+Pj4+Pgo+Pj4+Pj4gdmdpY192M19jaGVja19i YXNlKCkgaXMgdXNlZCB0byBjaGVjayB0aGUgcmVkaXN0IHJlZ2lvbnMgYmFzZXMgd2hlbgo+Pj4+ Pj4gc2V0dGluZyB0aGVtICh3aXRoIHRoZSB2Y3B1cyBhZGRlZCBzbyBmYXIpIGFuZCB3aGVuIGF0 dGVtcHRpbmcgdGhlIGZpcnN0Cj4+Pj4+PiB2Y3B1LXJ1bi4KPj4+Pj4+Cj4+Pj4+PiBTaWduZWQt b2ZmLWJ5OiBSaWNhcmRvIEtvbGxlciA8cmljYXJrb2xAZ29vZ2xlLmNvbT4KPj4+Pj4+IC0tLQo+ Pj4+Pj4gIGFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12My5jIHwgNCArKysrCj4+Pj4+PiAgMSBm aWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQo+Pj4+Pj4KPj4+Pj4+IGRpZmYgLS1naXQgYS9h cmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjMuYyBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12 My5jCj4+Pj4+PiBpbmRleCA2NjAwNGY2MWNkODMuLjVhZmQ5ZjZmNjhmNiAxMDA2NDQKPj4+Pj4+ IC0tLSBhL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12My5jCj4+Pj4+PiArKysgYi9hcmNoL2Fy bTY0L2t2bS92Z2ljL3ZnaWMtdjMuYwo+Pj4+Pj4gQEAgLTUxMiw2ICs1MTIsMTAgQEAgYm9vbCB2 Z2ljX3YzX2NoZWNrX2Jhc2Uoc3RydWN0IGt2bSAqa3ZtKQo+Pj4+Pj4gIAkJaWYgKHJkcmVnLT5i YXNlICsgdmdpY192M19yZF9yZWdpb25fc2l6ZShrdm0sIHJkcmVnKSA8Cj4+Pj4+PiAgCQkJcmRy ZWctPmJhc2UpCj4+Pj4+PiAgCQkJcmV0dXJuIGZhbHNlOwo+Pj4+Pj4gKwo+Pj4+Pj4gKwkJaWYg KHJkcmVnLT5iYXNlICsgdmdpY192M19yZF9yZWdpb25fc2l6ZShrdm0sIHJkcmVnKSA+Cj4+Pj4+ PiArCQkJa3ZtX3BoeXNfc2l6ZShrdm0pKQo+Pj4+Pj4gKwkJCXJldHVybiBmYWxzZTsKPj4+Pj4g TG9va3MgdG8gbWUgbGlrZSB0aGlzIHNhbWUgY2hlY2sgKGFuZCB0aGUgb3ZlcmZsb3cgb25lIGJl Zm9yZSBpdCkgaXMgZG9uZSB3aGVuCj4+Pj4+IGFkZGluZyBhIG5ldyBSZWRpc3RyaWJ1dG9yIHJl Z2lvbiBpbiBrdm1fdmdpY19hZGRyKCkgLT4gdmdpY192M19zZXRfcmVkaXN0X2Jhc2UoKQo+Pj4+ PiAtPiB2Z2ljX3YzX2FsbG9jX3JlZGlzdF9yZWdpb24oKSAtPiB2Z2ljX2NoZWNrX2lvYWRkcigp LiBBcyBmYXIgYXMgSSBjYW4gdGVsbCwKPj4+Pj4ga3ZtX3ZnaWNfYWRkcigpIGhhbmRsZXMgYm90 aCB3YXlzIG9mIHNldHRpbmcgdGhlIFJlZGlzdHJpYnV0b3IgYWRkcmVzcy4KPj4+Pj4KPj4+Pj4g V2l0aG91dCB0aGlzIHBhdGNoLCBkaWQgeW91IG1hbmFnZSB0byBzZXQgYSBiYXNlIGFkZHJlc3Mg c3VjaCB0aGF0IGJhc2UgKyBzaXplID4KPj4+Pj4ga3ZtX3BoeXNfc2l6ZSgpPwo+Pj4+Pgo+Pj4+ IFllcywgd2l0aCB0aGUgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVCBsZWdhY3kgQVBJLiBU aGUgZWFzaWVzdCB3YXkKPj4+PiB0byBnZXQgdG8gdGhpcyBzaXR1YXRpb24gaXMgd2l0aCB0aGUg c2VsZnRlc3QgaW4gcGF0Y2ggMi4gIEkgdGhlbiB0cmllZAo+Pj4+IGFuIGV4dHJhIGV4cGVyaW1l bnQ6IG1hcCB0aGUgZmlyc3QgcmVkaXN0cmlidXRvciwgcnVuIHRoZSBmaXJzdCB2Y3B1LAo+Pj4+ IGFuZCBhY2Nlc3MgdGhlIHJlZGlzdCBmcm9tIGluc2lkZSB0aGUgZ3Vlc3QuIEtWTSBkaWRuJ3Qg Y29tcGxhaW4gaW4gYW55Cj4+Pj4gb2YgdGhlc2Ugc3RlcHMuCj4+PiBZZXMsIEVyaWMgcG9pbnRl ZCBvdXQgdGhhdCBJIHdhcyBtaXN0YWtlbiBhbmQgdGhlcmUgaXMgbm8gY2hlY2sgYmVpbmcgZG9u ZSBmb3IKPj4+IGJhc2UgKyBzaXplID4ga3ZtX3BoeXNfc2l6ZSgpLgo+Pj4KPj4+IFdoYXQgSSB3 YXMgdHJ5aW5nIHRvIHNheSBpcyB0aGF0IHRoaXMgY2hlY2sgaXMgYmV0dGVyIGRvbmUgd2hlbiB0 aGUgdXNlciBjcmVhdGVzIGEKPj4+IFJlZGlzdHJpYnV0b3IgcmVnaW9uLCBub3Qgd2hlbiBhIFZD UFUgaXMgZmlyc3QgcnVuLiBXZSBoYXZlIGV2ZXJ5dGhpbmcgd2UgbmVlZCB0bwo+Pj4gbWFrZSB0 aGUgY2hlY2sgd2hlbiBhIHJlZ2lvbiBpcyBjcmVhdGVkLCB3aHkgd2FpdCB1bnRpbCB0aGUgVkNQ VSBpcyBydW4/Cj4+Pgo+Pj4gRm9yIGV4YW1wbGUsIHZnaWNfdjNfaW5zZXJ0X3JlZGlzdF9yZWdp b24oKSBpcyBjYWxsZWQgZWFjaCB0aW1lIHRoZSBhZGRzIGEgbmV3Cj4+PiBSZWRpc3RyaWJ1dG9y IHJlZ2lvbiAodmlhIGVpdGhlciBvZiB0aGUgdHdvIEFQSXMpLCBhbmQgYWxyZWFkeSBoYXMgYSBj aGVjayBmb3IgdGhlCj4+PiB1cHBlciBsaW1pdCBvdmVyZmxvd2luZyAoaWRlbnRpY2FsIHRvIHRo ZSBjaGVjayBpbiB2Z2ljX3YzX2NoZWNrX2Jhc2UoKSkuIEkgd291bGQKPj4+IGFkZCB0aGUgY2hl Y2sgYWdhaW5zdCB0aGUgbWF4aW11bSBJUEEgc2l6ZSB0aGVyZS4KPj4geW91IHNlZW0gdG8gcmVm ZXIgdG8gYW4gb2xkIGtlcm5lbCBhcyB2Z2ljX3YzX2luc2VydF9yZWRpc3RfcmVnaW9uIHdhcwo+ PiByZW5hbWVkIGludG/Dr8K/wr0gdmdpY192M19hbGxvY19yZWRpc3RfcmVnaW9uIGluCj4+IGU1 YTM1NjM1NDY0YiBrdm06IGFybTY0OiB2Z2ljLXYzOiBJbnRyb2R1Y2UgdmdpY192M19mcmVlX3Jl ZGlzdF9yZWdpb24oKQo+Pgo+PiBJIHRoaW5rIGluIGNhc2UgeW91IHVzZSB0aGUgb2xkIHJkaXN0 IEFQSSB5b3UgZG8gbm90IGtub3cgeWV0IHRoZSBzaXplCj4+IG9mIHRoZSByZWRpc3QgcmVnaW9u IGF0IHRoaXMgcG9pbnQgKGNvdW50PTApLCBoZW5jZSBSaWNhcmRvJ3MgY2hvaWNlIHRvCj4+IGRv IHRoZSBjaGVjayBsYXR0ZXIuCj4gSnVzdCB3YW50ZWQgdG8gYWRkIG9uZSBtb3JlIGRldGFpbC4g dmdpY192M19jaGVja19iYXNlKCkgaXMgYWxzbyBjYWxsZWQKPiB3aGVuIGNyZWF0aW5nIHRoZSBy ZWRpc3RyaWJ1dG9yIHJlZ2lvbiAodmlhIHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlIC0+Cj4gdmdp Y19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYpLiBUaGlzIHBhdGNoIHJldXNlcyB0aGF0IGNoZWNrIGZv ciB0aGUgb2xkCj4gcmVkaXN0IEFQSSB0byBhbHNvIGNoZWNrIGZvciAiYmFzZSArIHNpemUgPiBr dm1fcGh5c19zaXplKCkiIHdpdGggYSBzaXplCj4gY2FsY3VsYXRlZCB1c2luZyB0aGUgdmNwdXMg YWRkZWQgc28gZmFyLgoKQEVyaWM6IEluZGVlZCBJIHdhcyBsb29raW5nIGF0IGFuIG9sZGVyIGtl cm5lbCBieSBtaXN0YWtlLCB0aGFuayB5b3UgZm9yIHBvaW50aW5nCnRoYXQgb3V0IQoKVGhhbmsg eW91IGJvdGggZm9yIHRoZSBleHBsYW5hdGlvbnMsIHRoZSBwaWVjZSBJIHdhcyBtaXNzaW5nIHdh cyB0aGUgZmFjdCB0aGF0CktWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1Qgc3BlY2lmaWVzIG9u bHkgdGhlIGJhc2UgYWRkcmVzcyBhbmQgdGhlIGxpbWl0IGZvciB0aGUKcmVnaW9uIGlzIHRoZSBu dW1iZXIgb2YgVkNQVXMgKiAoS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUgPSAxMjhLKSwgd2hpY2gg bWFrZXMgaXQKbmVjZXNzYXJ5IHRvIGhhdmUgdGhlIGNoZWNrIHdoZW4gZWFjaCBWQ1BVIGlzIGZp cnN0IHJ1biAoYXMgZmFyIGFzIEkgY2FuIHRlbGwsClZDUFVzIGNhbiBiZSBjcmVhdGVkIGF0IGFu eSB0aW1lKS4KCj4KPj4+IEFsc28sIGJlY2F1c2UgdmdpY192M19pbnNlcnRfcmVkaXN0X3JlZ2lv bigpIGFscmVhZHkgY2hlY2tzIGZvciBvdmVyZmxvdywgSQo+Pj4gYmVsaWV2ZSB0aGUgb3ZlcmZs b3cgY2hlY2sgaW4gdmdpY192M19jaGVja19iYXNlKCkgaXMgcmVkdW5kYW50Lgo+Pj4KPiBJdCdz IHJlZHVuZGFudCBmb3IgdGhlIG5ldyByZWRpc3QgQVBJLCBidXQgc3RpbGwgbmVlZGVkIGZvciB0 aGUgb2xkCj4gcmVkaXN0IEFQSS4KCkluZGVlZC4KCj4KPj4+IEFzIGZhciBhcyBJIGNhbiB0ZWxs LCB2Z2ljX3YzX2NoZWNrX2Jhc2UoKSBpcyB0aGVyZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUKPj4+ IERpc3RyaWJ1dG9yIGRvZXNuJ3Qgb3ZlcmxhcCB3aXRoIGFueSBvZiB0aGUgUmVkaXN0cmlidXRv cnMsIGFuZCBiZWNhdXNlIHRoZQo+Pj4gUmVkaXN0cmlidXRvcnMgYW5kIHRoZSBEaXN0cmlidXRv ciBjYW4gYmUgY3JlYXRlZCBpbiBhbnkgb3JkZXIsIHdlIGRlZmVyIHRoZSBjaGVjawo+Pj4gdW50 aWwgdGhlIGZpcnN0IFZDUFUgaXMgcnVuLiBJIG1pZ2h0IGJlIHdyb25nIGFib3V0IHRoaXMsIHNv bWVvbmUgcGxlYXNlIGNvcnJlY3QKPj4+IG1lIGlmIEknbSB3cm9uZy4KPj4+Cj4+PiBBbHNvLCBk aWQgeW91IHZlcmlmeSB0aGF0IEtWTSBpcyBhbHNvIGRvaW5nIHRoaXMgY2hlY2sgZm9yIEdJQ3Yy PyBLVk0gZG9lcwo+Pj4gc29tZXRoaW5nIHNpbWlsYXIgYW5kIGNhbGxzIHZnaWNfdjJfY2hlY2tf YmFzZSgpIHdoZW4gbWFwcGluZyB0aGUgR0lDIHJlc291cmNlcywKPj4+IGFuZCBJIGRvbid0IHNl ZSBhIGNoZWNrIGZvciB0aGUgbWF4aW11bSBJUEEgc2l6ZSBpbiB0aGF0IGZ1bmN0aW9uIGVpdGhl ci4KPj4gSSB0aGluayB2Z2ljX2NoZWNrX2lvYWRkcigpIGNhbGxlZCBpbiBrdm1fdmdpY19hZGRy KCkgZG9lcyB0aGUgam9iIChpdAo+PiBjaGVja3MgdGhlIGJhc2UgQCkKPj4KPiBJdCBzZWVtcyB0 aGF0IEdJQ3YyIHN1ZmZlcnMgZnJvbSB0aGUgc2FtZSBwcm9ibGVtLiBUaGUgY3B1IGludGVyZmFj ZQo+IGJhc2UgaXMgY2hlY2tlZCBidXQgdGhlIGVuZCBjYW4gZXh0ZW5kIGFib3ZlIElQQSBzaXpl LiBOb3RlIHRoYXQgdGhlIGNwdQo+IGludGVyZmFjZSBpcyA4S0JzIGFuZCB2Z2ljX2NoZWNrX2lv YWRkcigpIGlzIG9ubHkgY2hlY2tpbmcgdGhhdCBpdHMgYmFzZQoKLi4uIGV4Y2VwdCB0aGF0IHRo ZSBkb2MgZm9yIEtWTV9WR0lDX1YyX0FERFJfVFlQRV9DUFUgc2F5cyB0aGF0IHRoZSBDUFUgaW50 ZXJmYWNlCnJlZ2lvbiBpcyA0Sywgd2hpbGUgdGhlIGNoZWNrIGluIHZnaWNfdjJfY2hlY2tfYmFz ZSgpIGlzIGRvbmUgYWdhaW5zdApLVk1fVkdJQ19WMl9DUFVfU0laRSwgd2hpY2ggaXMgOEsuIEkg c3VwcG9zZSB0aGF0IHRoZSBDUFUgaW50ZXJmYWNlIHJlZ2lvbiBpcyA4SwpiZWNhdXNlIEFSTSBJ SEkgMDA0OEIuYiBzdHJvbmdseSByZWNvbW1lbmRzIHRoYXQgdGhlIHZpcnR1YWwgQ1BVIGludGVy ZmFjZSBjb250cm9sCnJlZ2lzdGVycyBhcmUgaW4gYSBzZXBhcmF0ZSA0S0IgcmVnaW9uLCBhbmQg S1ZNIHdhbnRzIHRvIGVtdWxhdGUgYSBHSUN2MiBhcyBjbG9zZQp0byB0aGUgcmVhbCB0aGluZyBh cyBwb3NzaWJsZT8KCj4gaXMgNEtCIGFsaWduZWQgYW5kIGJlbG93IElQQSBzaXplLiBUaGUgZGlz dHJpYnV0b3IgcmVnaW9uIGlzIDRLQiBzbwo+IHZnaWNfY2hlY2tfaW9hZGRyKCkgaXMgZW5vdWdo IGluIHRoYXQgY2FzZS4KPgo+IFdoYXQgYWJvdXQgdGhlIGZvbGxvd2luZz8KPgo+IEkgY2FuIHdv cmsgb24gdGhlIG5leHQgdmVyc2lvbiBvZiB0aGlzIHBhdGNoICh2MiBoYXMgdGhlIEdJQ3YyIGlz c3VlKQo+IHdoaWNoIGFkZHMgdmdpY19jaGVja19yYW5nZSgpLCB3aGljaCBpcyBsaWtlIHZnaWNf Y2hlY2tfaW9hZGRyKCkgYnV0Cj4gd2l0aCBhIHNpemUgYXJnLiAga3ZtX3ZnaWNfYWRkcigpIGNh biB0aGVuIGNhbGwgdmdpY19jaGVja19yYW5nZSgpIGFuZAo+IGRvIGFsbCB0aGUgY2hlY2tzIGZv ciBHSUN2MiBhbmQgR0lDdjMuIE5vdGUgdGhhdCBmb3IgR0lDdjIsIHRoZXJlJ3Mgbm8KPiBuZWVk IHRvIHdhaXQgdW50aWwgZmlyc3QgdmNwdSBydW4gdG8gZG8gdGhlIGNoZWNrLiBBbHNvIG5vdGUg dGhhdCBJIHdpbGwKPiBoYXZlIHRvIGtlZXAgdGhlIGNoYW5nZSBpbiB2Z2ljX3YzX2NoZWNrX2Jh c2UoKSB0byBjaGVjayBmb3IgdGhlIG9sZCB2Mwo+IHJlZGlzdCBBUEkgYXQgZmlyc3QgdmNwdSBy dW4uCgpTb3VuZHMgZ29vZC4KClRoYW5rcywKCkFsZXgKCj4KPiBUaGFua3MsCj4gUmljYXJkbwo+ Cj4+IFRoYW5rcwo+Pgo+PiBFcmljCj4+PiBUaGFua3MsCj4+Pgo+Pj4gQWxleAo+Pj4KPj4+PiBU aGFua3MsCj4+Pj4gUmljYXJkbwo+Pj4+Cj4+Pj4+IFRoYW5rcywKPj4+Pj4KPj4+Pj4gQWxleAo+ Pj4+Pgo+Pj4+Pj4gIAl9Cj4+Pj4+PiAgCj4+Pj4+PiAgCWlmIChJU19WR0lDX0FERFJfVU5ERUYo ZC0+dmdpY19kaXN0X2Jhc2UpKQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwprdm1hcm0gbWFpbGluZyBsaXN0Cmt2bWFybUBsaXN0cy5jcy5jb2x1bWJpYS5l ZHUKaHR0cHM6Ly9saXN0cy5jcy5jb2x1bWJpYS5lZHUvbWFpbG1hbi9saXN0aW5mby9rdm1hcm0K