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=-5.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_2 autolearn=no 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 BF225C433ED for ; Tue, 11 May 2021 16:12:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 848BE61921 for ; Tue, 11 May 2021 16:12:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231476AbhEKQNh convert rfc822-to-8bit (ORCPT ); Tue, 11 May 2021 12:13:37 -0400 Received: from mga04.intel.com ([192.55.52.120]:54646 "EHLO mga04.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229921AbhEKQNg (ORCPT ); Tue, 11 May 2021 12:13:36 -0400 IronPort-SDR: MH3VkuDoxBP2cuEePQFZZIvEwMOEUno6UvyAMapHNu+Fg2C2dd0Sq677lq1PfwmJ/B5YVNldfd i7w5bughUHKA== X-IronPort-AV: E=McAfee;i="6200,9189,9981"; a="197501467" X-IronPort-AV: E=Sophos;i="5.82,291,1613462400"; d="scan'208";a="197501467" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 May 2021 09:12:27 -0700 IronPort-SDR: WkArB/mkxVj2txW3V/uTWHVEI7jMObfp61iG6B7af54As7VEc7oHkCnrfCOd8zLBMRJRaC5+Ac E8Qe34nHih6w== X-IronPort-AV: E=Sophos;i="5.82,291,1613462400"; d="scan'208";a="541705233" Received: from jacob-builder.jf.intel.com (HELO jacob-builder) ([10.7.199.155]) by orsmga004-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 May 2021 09:12:27 -0700 Date: Tue, 11 May 2021 09:14:52 -0700 From: Jacob Pan To: Jason Gunthorpe Cc: LKML , iommu@lists.linux-foundation.org, Joerg Roedel , Lu Baolu , Jean-Philippe Brucker , Christoph Hellwig , Yi Liu , Raj Ashok , "Tian, Kevin" , Dave Jiang , wangzhou1@hisilicon.com, zhangfei.gao@linaro.org, vkoul@kernel.org, jacob.jun.pan@linux.intel.com, David Woodhouse Subject: Re: [PATCH v4 1/2] iommu/sva: Tighten SVA bind API with explicit flags Message-ID: <20210511091452.721e9a03@jacob-builder> In-Reply-To: <20210511114848.GK1002214@nvidia.com> References: <1620653108-44901-1-git-send-email-jacob.jun.pan@linux.intel.com> <1620653108-44901-2-git-send-email-jacob.jun.pan@linux.intel.com> <20210510233749.GG1002214@nvidia.com> <20210510203145.086835cc@jacob-builder> <20210511114848.GK1002214@nvidia.com> Organization: OTC X-Mailer: Claws Mail 3.17.5 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8BIT Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Jason, On Tue, 11 May 2021 08:48:48 -0300, Jason Gunthorpe wrote: > On Mon, May 10, 2021 at 08:31:45PM -0700, Jacob Pan wrote: > > Hi Jason, > > > > On Mon, 10 May 2021 20:37:49 -0300, Jason Gunthorpe > > wrote: > > > On Mon, May 10, 2021 at 06:25:07AM -0700, Jacob Pan wrote: > > > > > > > +/* > > > > + * The IOMMU_SVA_BIND_SUPERVISOR flag requests a PASID which can be > > > > used only > > > > + * for access to kernel addresses. No IOTLB flushes are > > > > automatically done > > > > + * for kernel mappings; it is valid only for access to the kernel's > > > > static > > > > + * 1:1 mapping of physical memory — not to vmalloc or even module > > > > mappings. > > > > + * A future API addition may permit the use of such ranges, by > > > > means of an > > > > + * explicit IOTLB flush call (akin to the DMA API's unmap method). > > > > + * > > > > + * It is unlikely that we will ever hook into > > > > flush_tlb_kernel_range() to > > > > + * do such IOTLB flushes automatically. > > > > + */ > > > > +#define IOMMU_SVA_BIND_SUPERVISOR BIT(0) > > > > > > Huh? That isn't really SVA, can you call it something saner please? > > > > > This is shared kernel virtual address, I am following the SVA lib naming > > since this is where the flag will be used. Why this is not SVA? Kernel > > virtual address is still virtual address. Is it due to direct map? > > As the above explains it doesn't actually synchronize the kernel's > address space it just shoves the direct map into the IOMMU. > There is no duplicated kernel direct map in IOMMU. > I suppose a different IOMMU implementation might point the PASID directly > at the kernel's page table and avoid those limitations - but since > that isn't portable it seems irrelevant. > This is what we are doing here. We allocate a supervisor PASID and put the kernel page table (init_mm pgd) in this PASID entry. > Since the only thing it really maps is the direct map I would just > call it direct_map, or all physical or something. > Good idea. It makes things clear to the callers. They must only use direct map memory for DMA. > How does this interact with the DMA APIs? DMA API would use RID2PASID (PASID 0), so it is separated by PASIDs. > How do you get CPU cache > flushing/etc into PASID operations that don't trigger IOMMU updates? > Sorry, I am not following. This is used for direct map only. > Honestly, I'm not convinced we should have "kernel SVA" at all.. Why > does IDXD use normal DMA on the RID for kernel controlled accesses? > Using SVA simplifies the work submission, there is no need to do map/unmap. Just bind PASID with init_mm, then submit work directly either with ENQCMDS (supervisor version of ENQCMD) to a shared workqueue or put the supervisor PASID in the descriptor for dedicated workqueue. > > > Is it really a PASID that always has all of physical memory mapped > > > into it? Sounds dangerous. What is it for? > > > > Yes. It is to bind DMA request w/ PASID with init_mm/init_top_pgt. Per > > PCIe spec PASID TLP prefix has "Privileged Mode Requested" bit. VT-d > > supports this with "Privileged-mode-Requested (PR) flag (to distinguish > > user versus supervisor access)". Each PASID entry has a SRE (Supervisor > > Request Enable) bit. > > The PR flag is only needed if the underlying IOMMU is directly > processing the CPU page tables. For cases where the IOMMU is using its > own page table format and has its own copies the PR flag shouldn't be > used. > We are doing the former case. There is no IOMMU page tables for the direct map. > Jason Thanks, Jacob 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=-5.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_2 autolearn=no 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 5C50BC433B4 for ; Tue, 11 May 2021 16:12:34 +0000 (UTC) Received: from smtp2.osuosl.org (smtp2.osuosl.org [140.211.166.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id D2B5C61921 for ; Tue, 11 May 2021 16:12:33 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D2B5C61921 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=iommu-bounces@lists.linux-foundation.org Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 6D2094025B; Tue, 11 May 2021 16:12:33 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id AjWz16Cp5WMC; Tue, 11 May 2021 16:12:32 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp2.osuosl.org (Postfix) with ESMTP id 50CA64011A; Tue, 11 May 2021 16:12:32 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 2352EC000E; Tue, 11 May 2021 16:12:32 +0000 (UTC) Received: from smtp2.osuosl.org (smtp2.osuosl.org [IPv6:2605:bc80:3010::133]) by lists.linuxfoundation.org (Postfix) with ESMTP id 9FF9BC0001 for ; Tue, 11 May 2021 16:12:31 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 8A4BA4011A for ; Tue, 11 May 2021 16:12:31 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id v4v64-sKYacR for ; Tue, 11 May 2021 16:12:30 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by smtp2.osuosl.org (Postfix) with ESMTPS id 45B8F4025B for ; Tue, 11 May 2021 16:12:30 +0000 (UTC) IronPort-SDR: vtEH6boUBrOniuFUnDTXr1WuscyJnt99OR7VlAwMKURDyx38P7sGOuqfJOkkALcS5NTvoSaqFl TAmf5MS+n6OQ== X-IronPort-AV: E=McAfee;i="6200,9189,9981"; a="186920520" X-IronPort-AV: E=Sophos;i="5.82,291,1613462400"; d="scan'208";a="186920520" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 May 2021 09:12:27 -0700 IronPort-SDR: WkArB/mkxVj2txW3V/uTWHVEI7jMObfp61iG6B7af54As7VEc7oHkCnrfCOd8zLBMRJRaC5+Ac E8Qe34nHih6w== X-IronPort-AV: E=Sophos;i="5.82,291,1613462400"; d="scan'208";a="541705233" Received: from jacob-builder.jf.intel.com (HELO jacob-builder) ([10.7.199.155]) by orsmga004-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 May 2021 09:12:27 -0700 Date: Tue, 11 May 2021 09:14:52 -0700 From: Jacob Pan To: Jason Gunthorpe Subject: Re: [PATCH v4 1/2] iommu/sva: Tighten SVA bind API with explicit flags Message-ID: <20210511091452.721e9a03@jacob-builder> In-Reply-To: <20210511114848.GK1002214@nvidia.com> References: <1620653108-44901-1-git-send-email-jacob.jun.pan@linux.intel.com> <1620653108-44901-2-git-send-email-jacob.jun.pan@linux.intel.com> <20210510233749.GG1002214@nvidia.com> <20210510203145.086835cc@jacob-builder> <20210511114848.GK1002214@nvidia.com> Organization: OTC X-Mailer: Claws Mail 3.17.5 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 Cc: vkoul@kernel.org, "Tian, Kevin" , Dave Jiang , Raj Ashok , David Woodhouse , LKML , Christoph Hellwig , iommu@lists.linux-foundation.org, zhangfei.gao@linaro.org, Jean-Philippe Brucker X-BeenThere: iommu@lists.linux-foundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Development issues for Linux IOMMU support List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: iommu-bounces@lists.linux-foundation.org Sender: "iommu" SGkgSmFzb24sCgpPbiBUdWUsIDExIE1heSAyMDIxIDA4OjQ4OjQ4IC0wMzAwLCBKYXNvbiBHdW50 aG9ycGUgPGpnZ0BudmlkaWEuY29tPiB3cm90ZToKCj4gT24gTW9uLCBNYXkgMTAsIDIwMjEgYXQg MDg6MzE6NDVQTSAtMDcwMCwgSmFjb2IgUGFuIHdyb3RlOgo+ID4gSGkgSmFzb24sCj4gPiAKPiA+ IE9uIE1vbiwgMTAgTWF5IDIwMjEgMjA6Mzc6NDkgLTAzMDAsIEphc29uIEd1bnRob3JwZSA8amdn QG52aWRpYS5jb20+Cj4gPiB3cm90ZTogCj4gPiA+IE9uIE1vbiwgTWF5IDEwLCAyMDIxIGF0IDA2 OjI1OjA3QU0gLTA3MDAsIEphY29iIFBhbiB3cm90ZToKPiA+ID4gICAKPiA+ID4gPiArLyoKPiA+ ID4gPiArICogVGhlIElPTU1VX1NWQV9CSU5EX1NVUEVSVklTT1IgZmxhZyByZXF1ZXN0cyBhIFBB U0lEIHdoaWNoIGNhbiBiZQo+ID4gPiA+IHVzZWQgb25seQo+ID4gPiA+ICsgKiBmb3IgYWNjZXNz IHRvIGtlcm5lbCBhZGRyZXNzZXMuIE5vIElPVExCIGZsdXNoZXMgYXJlCj4gPiA+ID4gYXV0b21h dGljYWxseSBkb25lCj4gPiA+ID4gKyAqIGZvciBrZXJuZWwgbWFwcGluZ3M7IGl0IGlzIHZhbGlk IG9ubHkgZm9yIGFjY2VzcyB0byB0aGUga2VybmVsJ3MKPiA+ID4gPiBzdGF0aWMKPiA+ID4gPiAr ICogMToxIG1hcHBpbmcgb2YgcGh5c2ljYWwgbWVtb3J5IOKAlCBub3QgdG8gdm1hbGxvYyBvciBl dmVuIG1vZHVsZQo+ID4gPiA+IG1hcHBpbmdzLgo+ID4gPiA+ICsgKiBBIGZ1dHVyZSBBUEkgYWRk aXRpb24gbWF5IHBlcm1pdCB0aGUgdXNlIG9mIHN1Y2ggcmFuZ2VzLCBieQo+ID4gPiA+IG1lYW5z IG9mIGFuCj4gPiA+ID4gKyAqIGV4cGxpY2l0IElPVExCIGZsdXNoIGNhbGwgKGFraW4gdG8gdGhl IERNQSBBUEkncyB1bm1hcCBtZXRob2QpLgo+ID4gPiA+ICsgKgo+ID4gPiA+ICsgKiBJdCBpcyB1 bmxpa2VseSB0aGF0IHdlIHdpbGwgZXZlciBob29rIGludG8KPiA+ID4gPiBmbHVzaF90bGJfa2Vy bmVsX3JhbmdlKCkgdG8KPiA+ID4gPiArICogZG8gc3VjaCBJT1RMQiBmbHVzaGVzIGF1dG9tYXRp Y2FsbHkuCj4gPiA+ID4gKyAqLwo+ID4gPiA+ICsjZGVmaW5lIElPTU1VX1NWQV9CSU5EX1NVUEVS VklTT1IgICAgICAgQklUKDApICAgIAo+ID4gPiAKPiA+ID4gSHVoPyBUaGF0IGlzbid0IHJlYWxs eSBTVkEsIGNhbiB5b3UgY2FsbCBpdCBzb21ldGhpbmcgc2FuZXIgcGxlYXNlPwo+ID4gPiAgIAo+ ID4gVGhpcyBpcyBzaGFyZWQga2VybmVsIHZpcnR1YWwgYWRkcmVzcywgSSBhbSBmb2xsb3dpbmcg dGhlIFNWQSBsaWIgbmFtaW5nCj4gPiBzaW5jZSB0aGlzIGlzIHdoZXJlIHRoZSBmbGFnIHdpbGwg YmUgdXNlZC4gV2h5IHRoaXMgaXMgbm90IFNWQT8gS2VybmVsCj4gPiB2aXJ0dWFsIGFkZHJlc3Mg aXMgc3RpbGwgdmlydHVhbCBhZGRyZXNzLiBJcyBpdCBkdWUgdG8gZGlyZWN0IG1hcD8gIAo+IAo+ IEFzIHRoZSBhYm92ZSBleHBsYWlucyBpdCBkb2Vzbid0IGFjdHVhbGx5IHN5bmNocm9uaXplIHRo ZSBrZXJuZWwncwo+IGFkZHJlc3Mgc3BhY2UgaXQganVzdCBzaG92ZXMgdGhlIGRpcmVjdCBtYXAg aW50byB0aGUgSU9NTVUuCj4gClRoZXJlIGlzIG5vIGR1cGxpY2F0ZWQga2VybmVsIGRpcmVjdCBt YXAgaW4gSU9NTVUuCgo+IEkgc3VwcG9zZSBhIGRpZmZlcmVudCBJT01NVSBpbXBsZW1lbnRhdGlv biBtaWdodCBwb2ludCB0aGUgUEFTSUQgZGlyZWN0bHkKPiBhdCB0aGUga2VybmVsJ3MgcGFnZSB0 YWJsZSBhbmQgYXZvaWQgdGhvc2UgbGltaXRhdGlvbnMgLSBidXQgc2luY2UKPiB0aGF0IGlzbid0 IHBvcnRhYmxlIGl0IHNlZW1zIGlycmVsZXZhbnQuCj4gClRoaXMgaXMgd2hhdCB3ZSBhcmUgZG9p bmcgaGVyZS4gV2UgYWxsb2NhdGUgYSBzdXBlcnZpc29yIFBBU0lEIGFuZCBwdXQKdGhlIGtlcm5l bCBwYWdlIHRhYmxlIChpbml0X21tIHBnZCkgaW4gdGhpcyBQQVNJRCBlbnRyeS4KCj4gU2luY2Ug dGhlIG9ubHkgdGhpbmcgaXQgcmVhbGx5IG1hcHMgaXMgdGhlIGRpcmVjdCBtYXAgSSB3b3VsZCBq dXN0Cj4gY2FsbCBpdCBkaXJlY3RfbWFwLCBvciBhbGwgcGh5c2ljYWwgb3Igc29tZXRoaW5nLgo+ IApHb29kIGlkZWEuIEl0IG1ha2VzIHRoaW5ncyBjbGVhciB0byB0aGUgY2FsbGVycy4gVGhleSBt dXN0IG9ubHkgdXNlIGRpcmVjdAptYXAgbWVtb3J5IGZvciBETUEuCgo+IEhvdyBkb2VzIHRoaXMg aW50ZXJhY3Qgd2l0aCB0aGUgRE1BIEFQSXM/CkRNQSBBUEkgd291bGQgdXNlIFJJRDJQQVNJRCAo UEFTSUQgMCksIHNvIGl0IGlzIHNlcGFyYXRlZCBieSBQQVNJRHMuCgo+IEhvdyBkbyB5b3UgZ2V0 IENQVSBjYWNoZQo+IGZsdXNoaW5nL2V0YyBpbnRvIFBBU0lEIG9wZXJhdGlvbnMgdGhhdCBkb24n dCB0cmlnZ2VyIElPTU1VIHVwZGF0ZXM/Cj4gClNvcnJ5LCBJIGFtIG5vdCBmb2xsb3dpbmcuIFRo aXMgaXMgdXNlZCBmb3IgZGlyZWN0IG1hcCBvbmx5LgoKPiBIb25lc3RseSwgSSdtIG5vdCBjb252 aW5jZWQgd2Ugc2hvdWxkIGhhdmUgImtlcm5lbCBTVkEiIGF0IGFsbC4uIFdoeQo+IGRvZXMgSURY RCB1c2Ugbm9ybWFsIERNQSBvbiB0aGUgUklEIGZvciBrZXJuZWwgY29udHJvbGxlZCBhY2Nlc3Nl cz8KPiAKVXNpbmcgU1ZBIHNpbXBsaWZpZXMgdGhlIHdvcmsgc3VibWlzc2lvbiwgdGhlcmUgaXMg bm8gbmVlZCB0byBkbyBtYXAvdW5tYXAuCkp1c3QgYmluZCBQQVNJRCB3aXRoIGluaXRfbW0sIHRo ZW4gc3VibWl0IHdvcmsgZGlyZWN0bHkgZWl0aGVyIHdpdGggRU5RQ01EUwooc3VwZXJ2aXNvciB2 ZXJzaW9uIG9mIEVOUUNNRCkgdG8gYSBzaGFyZWQgd29ya3F1ZXVlIG9yIHB1dCB0aGUgc3VwZXJ2 aXNvcgpQQVNJRCBpbiB0aGUgZGVzY3JpcHRvciBmb3IgZGVkaWNhdGVkIHdvcmtxdWV1ZS4KCj4g PiA+IElzIGl0IHJlYWxseSBhIFBBU0lEIHRoYXQgYWx3YXlzIGhhcyBhbGwgb2YgcGh5c2ljYWwg bWVtb3J5IG1hcHBlZAo+ID4gPiBpbnRvIGl0PyBTb3VuZHMgZGFuZ2Vyb3VzLiBXaGF0IGlzIGl0 IGZvcj8gIAo+ID4gCj4gPiBZZXMuIEl0IGlzIHRvIGJpbmQgRE1BIHJlcXVlc3Qgdy8gUEFTSUQg d2l0aCBpbml0X21tL2luaXRfdG9wX3BndC4gUGVyCj4gPiBQQ0llIHNwZWMgUEFTSUQgVExQIHBy ZWZpeCBoYXMgIlByaXZpbGVnZWQgTW9kZSBSZXF1ZXN0ZWQiIGJpdC4gVlQtZAo+ID4gc3VwcG9y dHMgdGhpcyB3aXRoICJQcml2aWxlZ2VkLW1vZGUtUmVxdWVzdGVkIChQUikgZmxhZyAodG8gZGlz dGluZ3Vpc2gKPiA+IHVzZXIgdmVyc3VzIHN1cGVydmlzb3IgYWNjZXNzKSIuIEVhY2ggUEFTSUQg ZW50cnkgaGFzIGEgU1JFIChTdXBlcnZpc29yCj4gPiBSZXF1ZXN0IEVuYWJsZSkgYml0LiAgCj4g Cj4gVGhlIFBSIGZsYWcgaXMgb25seSBuZWVkZWQgaWYgdGhlIHVuZGVybHlpbmcgSU9NTVUgaXMg ZGlyZWN0bHkKPiBwcm9jZXNzaW5nIHRoZSBDUFUgcGFnZSB0YWJsZXMuIEZvciBjYXNlcyB3aGVy ZSB0aGUgSU9NTVUgaXMgdXNpbmcgaXRzCj4gb3duIHBhZ2UgdGFibGUgZm9ybWF0IGFuZCBoYXMg aXRzIG93biBjb3BpZXMgdGhlIFBSIGZsYWcgc2hvdWxkbid0IGJlCj4gdXNlZC4KPiAKV2UgYXJl IGRvaW5nIHRoZSBmb3JtZXIgY2FzZS4gVGhlcmUgaXMgbm8gSU9NTVUgcGFnZSB0YWJsZXMgZm9y IHRoZSBkaXJlY3QKbWFwLgoKPiBKYXNvbgoKClRoYW5rcywKCkphY29iCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlvbW11IG1haWxpbmcgbGlzdAppb21t dUBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwpodHRwczovL2xpc3RzLmxpbnV4Zm91bmRhdGlv bi5vcmcvbWFpbG1hbi9saXN0aW5mby9pb21tdQ==