From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E9F7B14A90 for ; Tue, 15 Aug 2023 16:07:30 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 61A16C433C7; Tue, 15 Aug 2023 16:07:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1692115650; bh=5czWxryr8an14tezsiSTtNQm6pcZag0vBREySh9vtr4=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=VeSOiTj0ACg6L9kyx4p1ShqgxaI1i1fmCDCRjCsqkYjIYBxSm052pyIuLtt/o/44S qSj4yxmS0wAohLDPMtd0mhvjQ+qG9aVbYf6Cz8iBrL9plpExQMN1SIreVHPJ851kWk DL8l4zY8BQ05bcHgAWrII9QvwgW/wSvmOAUpTWXjXNC7hYyAtuB93piEOcfV+vITdG mCn9iDtCtfVqv+xYbplUCtTvu96b1hT+QY+QPRV9MIhFDYlzcH9rogaLDU9jk6dwG2 S/c8wJFs7Zm/vYMuwthE9HcLjYJe64J2j40N66HxZScb8WaZiGSig6wHt3U0lbNDO+ 7BXx3qk7JbnCA== Received: from sofa.misterjones.org ([185.219.108.64] helo=goblin-girl.misterjones.org) by disco-boy.misterjones.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1qVwZr-0053ha-RG; Tue, 15 Aug 2023 17:07:28 +0100 Date: Tue, 15 Aug 2023 17:07:27 +0100 Message-ID: <86y1icffwg.wl-maz@kernel.org> From: Marc Zyngier To: Miguel Luis Cc: "kvmarm@lists.linux.dev" , "kvm@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , Catalin Marinas , Eric Auger , Mark Brown , Mark Rutland , Will Deacon , Alexandru Elisei , Andre Przywara , Chase Conklin , Ganapatrao Kulkarni , Darren Hart , James Morse , Suzuki K Poulose , Oliver Upton , Zenghui Yu Subject: Re: [PATCH v3 15/27] KVM: arm64: nv: Add trap forwarding for HCR_EL2 In-Reply-To: References: <20230808114711.2013842-1-maz@kernel.org> <20230808114711.2013842-16-maz@kernel.org> <85C2D540-7AD7-49BB-9EFB-7F950D08AC15@oracle.com> <87il9gpp2s.wl-maz@kernel.org> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM-LB/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL-LB/10.8 EasyPG/1.0.0 Emacs/28.2 (aarch64-unknown-linux-gnu) MULE/6.0 (HANACHIRUSATO) Precedence: bulk X-Mailing-List: kvmarm@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 185.219.108.64 X-SA-Exim-Rcpt-To: miguel.luis@oracle.com, kvmarm@lists.linux.dev, kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, catalin.marinas@arm.com, eric.auger@redhat.com, broonie@kernel.org, mark.rutland@arm.com, will@kernel.org, alexandru.elisei@arm.com, andre.przywara@arm.com, chase.conklin@arm.com, gankulkarni@os.amperecomputing.com, darren@os.amperecomputing.com, james.morse@arm.com, suzuki.poulose@arm.com, oliver.upton@linux.dev, yuzenghui@huawei.com X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false On Tue, 15 Aug 2023 16:35:09 +0100, Miguel Luis wrote: > >>> + [CGT_HCR_NV] =3D { > >>> + .index =3D HCR_EL2, > >>> + .value =3D HCR_NV, > >>> + .mask =3D HCR_NV, > >>> + .behaviour =3D BEHAVE_FORWARD_ANY, > >>> + }, > >>> + [CGT_HCR_NV_nNV2] =3D { > >>> + .index =3D HCR_EL2, > >>> + .value =3D HCR_NV, > >>> + .mask =3D HCR_NV | HCR_NV2, > >>> + .behaviour =3D BEHAVE_FORWARD_ANY, > >>> + }, > >>> + [CGT_HCR_NV1_nNV2] =3D { > >>> + .index =3D HCR_EL2, > >>> + .value =3D HCR_NV | HCR_NV1, > >>> + .mask =3D HCR_NV | HCR_NV1 | HCR_NV2, > >>> + .behaviour =3D BEHAVE_FORWARD_ANY, > >>> + }, > >>=20 > >> The declaration above seems to be a coarse control combination that co= uld be > >> decomposed in the following, more readable, equivalent by adding a > >> combination of two MCBs > >> (eg. CGT_HCR_NV_NV1, CGT_HCR_NV_NV1_nNV2) > >>=20 > >> [CGT_HCR_NV1] =3D { > >> .index =3D HCR_EL2, > >> .value =3D HCR_NV1, > >> .mask =3D HCR_NV1, > >> .behaviour =3D BEHAVE_FORWARD_ANY, > >> }, > >> [CGT_HCR_NV1_nNV2] =3D { > >> .index =3D HCR_EL2, > >> .value =3D HCR_NV1, > >> .mask =3D HCR_NV1 | HCR_NV2, > >> .behaviour =3D BEHAVE_FORWARD_ANY, > >> }, > >>=20 > >> /* FEAT_NV and FEAT_NV2 */ > >> MCB(CGT_HCR_NV_NV1, CGT_HCR_NV, CGT_HCR_NV1)=20 > >>=20 > >> /* FEAT_NV2 and HCR_EL2.NV2 is 0 behaves as FEAT_NV */ > >> MCB(CGT_HCR_NV_NV1_nNV2, CGT_HCR_NV_nNV2, CGT_HCR_NV1_nNV2 ) > >=20 > > This is not equivalent at all, as a MCB is a logical OR, not an AND. > >=20 >=20 > A logical OR as I would expect, which can be used recursively, meaning > IIUC that an MCB can contain other MCB ids, is this correct? We're now forbidding it, but even if we allowed it, it would still be an OR, while you really need an AND. > > Therefore, the equivalent for the declared =E2=80=98CGT_HCR_NV1_nNV2=E2= =80=99 would be >=20 > MCB(CGT_HCR_NV1_nNV2, CGT_HCR_NV_NV1, CGT_HCR_NV_NV1_nNV2) ? You have completely lost me. The only valid values we want to check for at this stage are: {NV}=3D{1} {NV,NV1}=3D{1,1} {NV,NV2}=3D{1,0} {NV,NV1,NV2}=3D{1,1,0} We can check any of these in one go. Why should we build something that implement multiple behaviours in bizarre ways? >=20 > I do not know what I missed. >=20 > >> On the above all the coarse HCR_EL2.{NV,NV1} traps are covered but not= the > >> constrained unpredictable one when HCR_EL2.{NV,NV1} is {0,1} which tra= ps in > >> two of its behaviours and doesn't trap on one. > >=20 > > The current approach makes it plain that HCR_EL2.NV=3D=3D0 doesn't resu= lt > > in any trap forwarding, consistent with the current wording of > > architecture. > >=20 >=20 > Indeed but it could result in trap forwarding as an expected behaviour > in D8.11.4 of DDI0487J.a. Not in our implementation. We ignore NV1 if NV is 0 and behave as "For all purposes other than reading back the value of the HCR_EL2.NV1 bit, the implementation behaves as if HCR_EL2.{NV, NV1} is {0, 0}." The point to understand is that we are implementing *ONE* of the allowed behaviours. We don't have to support all of them. M. --=20 Without deviation from the norm, progress is not possible. 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 CCE89C0015E for ; Tue, 15 Aug 2023 16:08:09 +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:MIME-Version:References:In-Reply-To: Subject:Cc:To:From:Message-ID:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=d5zaPazAwRt3QMRiBajrW09gVed0Kp8zttZbtqhqTtA=; b=LtYIJ4/ZoIqIa7 Y6XEMHOIv5C7hl94hF7k7PfALVvoV8w4x0BlCyr3FUHr13KWJG3hrNsHMoD5NS7PanSJT8TCZgWWc J1G6BHypvxDvKe1xj8ywwvKDkcLPm16nOcBpSJgsWDnNuJrrEjaFwDVsVIBdUAsfetkMaHqGuLQ1f E2RF/KTLF8L8g3Il3zr0RMtpQOdxVMEsDTkaH5z/PtVgPmWKHvoLmtINW+6JFeL7LlZ9rjkqIvPC3 m/kAIcCGGO2m57ozGpWflPGUYV7yNI4/w8eIy3RbuA8jUikuhVr/8rOEdlrmuKD9LaeyixtMCoiG7 ixkVWD4HwZfm29CRn+mA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qVwa1-001wpx-30; Tue, 15 Aug 2023 16:07:37 +0000 Received: from dfw.source.kernel.org ([2604:1380:4641:c500::1]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qVwZz-001wox-1e for linux-arm-kernel@lists.infradead.org; Tue, 15 Aug 2023 16:07:37 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 1705165CE4; Tue, 15 Aug 2023 16:07:31 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 61A16C433C7; Tue, 15 Aug 2023 16:07:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1692115650; bh=5czWxryr8an14tezsiSTtNQm6pcZag0vBREySh9vtr4=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=VeSOiTj0ACg6L9kyx4p1ShqgxaI1i1fmCDCRjCsqkYjIYBxSm052pyIuLtt/o/44S qSj4yxmS0wAohLDPMtd0mhvjQ+qG9aVbYf6Cz8iBrL9plpExQMN1SIreVHPJ851kWk DL8l4zY8BQ05bcHgAWrII9QvwgW/wSvmOAUpTWXjXNC7hYyAtuB93piEOcfV+vITdG mCn9iDtCtfVqv+xYbplUCtTvu96b1hT+QY+QPRV9MIhFDYlzcH9rogaLDU9jk6dwG2 S/c8wJFs7Zm/vYMuwthE9HcLjYJe64J2j40N66HxZScb8WaZiGSig6wHt3U0lbNDO+ 7BXx3qk7JbnCA== Received: from sofa.misterjones.org ([185.219.108.64] helo=goblin-girl.misterjones.org) by disco-boy.misterjones.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1qVwZr-0053ha-RG; Tue, 15 Aug 2023 17:07:28 +0100 Date: Tue, 15 Aug 2023 17:07:27 +0100 Message-ID: <86y1icffwg.wl-maz@kernel.org> From: Marc Zyngier To: Miguel Luis Cc: "kvmarm@lists.linux.dev" , "kvm@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , Catalin Marinas , Eric Auger , Mark Brown , Mark Rutland , Will Deacon , Alexandru Elisei , Andre Przywara , Chase Conklin , Ganapatrao Kulkarni , Darren Hart , James Morse , Suzuki K Poulose , Oliver Upton , Zenghui Yu Subject: Re: [PATCH v3 15/27] KVM: arm64: nv: Add trap forwarding for HCR_EL2 In-Reply-To: References: <20230808114711.2013842-1-maz@kernel.org> <20230808114711.2013842-16-maz@kernel.org> <85C2D540-7AD7-49BB-9EFB-7F950D08AC15@oracle.com> <87il9gpp2s.wl-maz@kernel.org> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM-LB/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL-LB/10.8 EasyPG/1.0.0 Emacs/28.2 (aarch64-unknown-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") X-SA-Exim-Connect-IP: 185.219.108.64 X-SA-Exim-Rcpt-To: miguel.luis@oracle.com, kvmarm@lists.linux.dev, kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, catalin.marinas@arm.com, eric.auger@redhat.com, broonie@kernel.org, mark.rutland@arm.com, will@kernel.org, alexandru.elisei@arm.com, andre.przywara@arm.com, chase.conklin@arm.com, gankulkarni@os.amperecomputing.com, darren@os.amperecomputing.com, james.morse@arm.com, suzuki.poulose@arm.com, oliver.upton@linux.dev, yuzenghui@huawei.com X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230815_090735_730857_7BA04676 X-CRM114-Status: GOOD ( 27.82 ) 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 T24gVHVlLCAxNSBBdWcgMjAyMyAxNjozNTowOSArMDEwMCwKTWlndWVsIEx1aXMgPG1pZ3VlbC5s dWlzQG9yYWNsZS5jb20+IHdyb3RlOgo+ID4+PiArIFtDR1RfSENSX05WXSA9IHsKPiA+Pj4gKyAu aW5kZXggPSBIQ1JfRUwyLAo+ID4+PiArIC52YWx1ZSA9IEhDUl9OViwKPiA+Pj4gKyAubWFzayA9 IEhDUl9OViwKPiA+Pj4gKyAuYmVoYXZpb3VyID0gQkVIQVZFX0ZPUldBUkRfQU5ZLAo+ID4+PiAr IH0sCj4gPj4+ICsgW0NHVF9IQ1JfTlZfbk5WMl0gPSB7Cj4gPj4+ICsgLmluZGV4ID0gSENSX0VM MiwKPiA+Pj4gKyAudmFsdWUgPSBIQ1JfTlYsCj4gPj4+ICsgLm1hc2sgPSBIQ1JfTlYgfCBIQ1Jf TlYyLAo+ID4+PiArIC5iZWhhdmlvdXIgPSBCRUhBVkVfRk9SV0FSRF9BTlksCj4gPj4+ICsgfSwK PiA+Pj4gKyBbQ0dUX0hDUl9OVjFfbk5WMl0gPSB7Cj4gPj4+ICsgLmluZGV4ID0gSENSX0VMMiwK PiA+Pj4gKyAudmFsdWUgPSBIQ1JfTlYgfCBIQ1JfTlYxLAo+ID4+PiArIC5tYXNrID0gSENSX05W IHwgSENSX05WMSB8IEhDUl9OVjIsCj4gPj4+ICsgLmJlaGF2aW91ciA9IEJFSEFWRV9GT1JXQVJE X0FOWSwKPiA+Pj4gKyB9LAo+ID4+IAo+ID4+IFRoZSBkZWNsYXJhdGlvbiBhYm92ZSBzZWVtcyB0 byBiZSBhIGNvYXJzZSBjb250cm9sIGNvbWJpbmF0aW9uIHRoYXQgY291bGQgYmUKPiA+PiBkZWNv bXBvc2VkIGluIHRoZSBmb2xsb3dpbmcsIG1vcmUgcmVhZGFibGUsIGVxdWl2YWxlbnQgYnkgYWRk aW5nIGEKPiA+PiBjb21iaW5hdGlvbiBvZiB0d28gTUNCcwo+ID4+IChlZy4gQ0dUX0hDUl9OVl9O VjEsIENHVF9IQ1JfTlZfTlYxX25OVjIpCj4gPj4gCj4gPj4gICAgICAgW0NHVF9IQ1JfTlYxXSA9 IHsKPiA+PiAgICAgICAgICAgICAgIC5pbmRleCAgICAgICAgICA9IEhDUl9FTDIsCj4gPj4gICAg ICAgICAgICAgICAudmFsdWUgICAgICAgICAgPSBIQ1JfTlYxLAo+ID4+ICAgICAgICAgICAgICAg Lm1hc2sgICAgICAgICAgID0gSENSX05WMSwKPiA+PiAgICAgICAgICAgICAgIC5iZWhhdmlvdXIg ICAgICA9IEJFSEFWRV9GT1JXQVJEX0FOWSwKPiA+PiAgICAgICB9LAo+ID4+ICAgICAgIFtDR1Rf SENSX05WMV9uTlYyXSA9IHsKPiA+PiAgICAgICAgICAgICAgIC5pbmRleCAgICAgICAgICA9IEhD Ul9FTDIsCj4gPj4gICAgICAgICAgICAgICAudmFsdWUgICAgICAgICAgPSBIQ1JfTlYxLAo+ID4+ ICAgICAgICAgICAgICAgLm1hc2sgICAgICAgICAgID0gSENSX05WMSB8IEhDUl9OVjIsCj4gPj4g ICAgICAgICAgICAgICAuYmVoYXZpb3VyICAgICAgPSBCRUhBVkVfRk9SV0FSRF9BTlksCj4gPj4g ICAgICAgfSwKPiA+PiAKPiA+PiAvKiBGRUFUX05WIGFuZCBGRUFUX05WMiAqLwo+ID4+IE1DQihD R1RfSENSX05WX05WMSwgQ0dUX0hDUl9OViwgQ0dUX0hDUl9OVjEpIAo+ID4+IAo+ID4+IC8qIEZF QVRfTlYyIGFuZCBIQ1JfRUwyLk5WMiBpcyAwIGJlaGF2ZXMgYXMgRkVBVF9OViAqLwo+ID4+IE1D QihDR1RfSENSX05WX05WMV9uTlYyLCBDR1RfSENSX05WX25OVjIsIENHVF9IQ1JfTlYxX25OVjIg KQo+ID4gCj4gPiBUaGlzIGlzIG5vdCBlcXVpdmFsZW50IGF0IGFsbCwgYXMgYSBNQ0IgaXMgYSBs b2dpY2FsIE9SLCBub3QgYW4gQU5ELgo+ID4gCj4gCj4gQSBsb2dpY2FsIE9SIGFzIEkgd291bGQg ZXhwZWN0LCB3aGljaCBjYW4gYmUgdXNlZCByZWN1cnNpdmVseSwgbWVhbmluZwo+IElJVUMgdGhh dCBhbiBNQ0IgY2FuIGNvbnRhaW4gb3RoZXIgTUNCIGlkcywgaXMgdGhpcyBjb3JyZWN0PwoKV2Un cmUgbm93IGZvcmJpZGRpbmcgaXQsIGJ1dCBldmVuIGlmIHdlIGFsbG93ZWQgaXQsIGl0IHdvdWxk IHN0aWxsIGJlCmFuIE9SLCB3aGlsZSB5b3UgcmVhbGx5IG5lZWQgYW4gQU5ELgoKPgo+IFRoZXJl Zm9yZSwgdGhlIGVxdWl2YWxlbnQgZm9yIHRoZSBkZWNsYXJlZCDigJhDR1RfSENSX05WMV9uTlYy 4oCZIHdvdWxkIGJlCj4gCj4gTUNCKENHVF9IQ1JfTlYxX25OVjIsIENHVF9IQ1JfTlZfTlYxLCBD R1RfSENSX05WX05WMV9uTlYyKSA/CgpZb3UgaGF2ZSBjb21wbGV0ZWx5IGxvc3QgbWUuIFRoZSBv bmx5IHZhbGlkIHZhbHVlcyB3ZSB3YW50IHRvIGNoZWNrCmZvciBhdCB0aGlzIHN0YWdlIGFyZToK CntOVn09ezF9CntOVixOVjF9PXsxLDF9CntOVixOVjJ9PXsxLDB9CntOVixOVjEsTlYyfT17MSwx LDB9CgpXZSBjYW4gY2hlY2sgYW55IG9mIHRoZXNlIGluIG9uZSBnby4gV2h5IHNob3VsZCB3ZSBi dWlsZCBzb21ldGhpbmcKdGhhdCBpbXBsZW1lbnQgbXVsdGlwbGUgYmVoYXZpb3VycyBpbiBiaXph cnJlIHdheXM/Cgo+IAo+IEkgZG8gbm90IGtub3cgd2hhdCBJIG1pc3NlZC4KPiAKPiA+PiBPbiB0 aGUgYWJvdmUgYWxsIHRoZSBjb2Fyc2UgSENSX0VMMi57TlYsTlYxfSB0cmFwcyBhcmUgY292ZXJl ZCBidXQgbm90IHRoZQo+ID4+IGNvbnN0cmFpbmVkIHVucHJlZGljdGFibGUgb25lIHdoZW4gSENS X0VMMi57TlYsTlYxfSBpcyB7MCwxfSB3aGljaCB0cmFwcyBpbgo+ID4+IHR3byBvZiBpdHMgYmVo YXZpb3VycyBhbmQgZG9lc24ndCB0cmFwIG9uIG9uZS4KPiA+IAo+ID4gVGhlIGN1cnJlbnQgYXBw cm9hY2ggbWFrZXMgaXQgcGxhaW4gdGhhdCBIQ1JfRUwyLk5WPT0wIGRvZXNuJ3QgcmVzdWx0Cj4g PiBpbiBhbnkgdHJhcCBmb3J3YXJkaW5nLCBjb25zaXN0ZW50IHdpdGggdGhlIGN1cnJlbnQgd29y ZGluZyBvZgo+ID4gYXJjaGl0ZWN0dXJlLgo+ID4gCj4gCj4gSW5kZWVkIGJ1dCBpdCBjb3VsZCBy ZXN1bHQgaW4gdHJhcCBmb3J3YXJkaW5nIGFzIGFuIGV4cGVjdGVkIGJlaGF2aW91cgo+IGluIEQ4 LjExLjQgb2YgRERJMDQ4N0ouYS4KCk5vdCBpbiBvdXIgaW1wbGVtZW50YXRpb24uIFdlIGlnbm9y ZSBOVjEgaWYgTlYgaXMgMCBhbmQgYmVoYXZlIGFzICJGb3IKYWxsIHB1cnBvc2VzIG90aGVyIHRo YW4gcmVhZGluZyBiYWNrIHRoZSB2YWx1ZSBvZiB0aGUgSENSX0VMMi5OVjEgYml0LAp0aGUgaW1w bGVtZW50YXRpb24gYmVoYXZlcyBhcyBpZiBIQ1JfRUwyLntOViwgTlYxfSBpcyB7MCwgMH0uIgoK VGhlIHBvaW50IHRvIHVuZGVyc3RhbmQgaXMgdGhhdCB3ZSBhcmUgaW1wbGVtZW50aW5nICpPTkUq IG9mIHRoZQphbGxvd2VkIGJlaGF2aW91cnMuIFdlIGRvbid0IGhhdmUgdG8gc3VwcG9ydCBhbGwg b2YgdGhlbS4KCglNLgoKLS0gCldpdGhvdXQgZGV2aWF0aW9uIGZyb20gdGhlIG5vcm0sIHByb2dy ZXNzIGlzIG5vdCBwb3NzaWJsZS4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJu ZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK