From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934291AbbDJN3h (ORCPT ); Fri, 10 Apr 2015 09:29:37 -0400 Received: from mga03.intel.com ([134.134.136.65]:4403 "EHLO mga03.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933000AbbDJN3c (ORCPT ); Fri, 10 Apr 2015 09:29:32 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.11,557,1422950400"; d="scan'208";a="479340564" Message-ID: <5527CEC4.9080700@intel.com> Date: Fri, 10 Apr 2015 21:23:16 +0800 From: Jike Song User-Agent: Mozilla/5.0 (X11; Linux i686 on x86_64; rv:17.0) Gecko/20130801 Thunderbird/17.0.8 MIME-Version: 1.0 To: xen-devel@lists.xen.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org CC: "White, Michael L" , "Dong, Eddie" , "Li, Susie" , "Cowperthwaite, David J" , "Haron, Sandra" , "Tian, Kevin" , "Zhu, Libo" , "Zhou, Chao" , "Wang, Hongbo" Subject: Re: [Intel-gfx] [Announcement] 2015-Q1 release of XenGT - a Mediated Graphics Passthrough Solution from Intel References: <53D215D3.50608@intel.com> <547FCAAD.2060406@intel.com> <54AF967B.3060503@intel.com> In-Reply-To: <54AF967B.3060503@intel.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi all, We're pleased to announce a public update to Intel Graphics Virtualization Technology (Intel GVT-g, formerly known as XenGT). Intel GVT-g is a complete vGPU solution with mediated pass-through, supported today on 4th generation Intel Core(TM) processors with Intel Graphics processors. A virtual GPU instance is maintained for each VM, with part of performance critical resources directly assigned. The capability of running native graphics driver inside a VM, without hypervisor intervention in performance critical paths, achieves a good balance among performance, feature, and sharing capability. Though we only support Xen on Intel Processor Graphics so far, the core logic can be easily ported to other hypervisors. Tip of repositories ------------------------- Kernel: a011c9f953e, Branch: master-2015Q1-3.18.0 Qemu: 2a75bbff62c1, Branch: master Xen: 38c36f0f511b1, Branch: master-2015Q1-4.5 Summary this update ------------------------- - Preliminary Broadwell support. - kernel update from drm-intel 3.17.0 to drm-intel 3.18.0(tag: drm-intel-next-fixes-2014-12-17, notice that i915 driver code is much newer than kernel stable version). - Next update will be around early July, 2015. - KVM support is still in a separate branch as prototype work. We plan to integrate KVM/Xen support together in future releases. This update consists of: - gvt-g core logic code was moved into i915 driver directory. - Host mediation is used for dom0 i915 driver access, instead of de-privileged dom0. - The Xen-specific code was separated from vgt core logic into a new file "driver/xen/xengt.c". - Broadwell is preliminarily supported in this release. Users could start multiple linux/windows 64-bit virtual machines simultaneously, and perform display switch among them. Notice that it is still preliminary release for BDW, which is not yet in the same level of HSW release. Differences include: * Power/performance tuning on BDW is not yet done. * Stability needs to be improved. * No 32-bit guest OS support. * Multi-monitor scenario is not fully tested, while single monitor of VGA/HDMI/DP/eDP should just work. Where to get: ----------------- kerenl: https://github.com/01org/XenGT-Preview-kernel.git Xen: https://github.com/01org/XenGT-Preview-xen.git Qemu: https://github.com/01org/XenGT-Preview-qemu.git Please refer to the new setup guide, which provides step-to-step details about building/configuring/running Intel GVT-g: https://github.com/01org/XenGT-Preview-kernel/blob/master-2015Q1-3.18.0/XenGT_Setup_Guide_2015Q1.pdf More information about Intel GVT-g background, architecture, etc can be found at: https://www.usenix.org/conference/atc14/technical-sessions/presentation/tian http://events.linuxfoundation.org/sites/events/files/slides/XenGT-Xen%20Summit-v7_0.pdf https://01.org/xen/blogs/srclarkx/2013/graphics-virtualization-xengt The previous update can be found here: http://lists.xen.org/archives/html/xen-devel/2014-12/msg00474.html Note --------------- The XenGT project should be considered a work in progress, As such it is not a complete product nor should it be considered one., Extra care should be taken when testing and configuring a system to use the XenGT project. -- Thanks, Jike On 01/09/2015 04:51 PM, Jike Song wrote: > Hi all, > > We're pleased to announce a public update to Intel Graphics Virtualization Technology (Intel GVT-g, formerly known as XenGT). Intel GVT-g is a complete vGPU solution with mediated pass-through, supported today on 4th generation Intel Core(TM) processors with Intel Graphics processors. A virtual GPU instance is maintained for each VM, with part of performance critical resources directly assigned. The capability of running native graphics driver inside a VM, without hypervisor intervention in performance critical paths, achieves a good balance among performance, feature, and sharing capability. Though we only support Xen on Intel Processor Graphics so far, the core logic can be easily ported to other hypervisors. The XenGT project should be considered a work in progress, As such it is not a complete product nor should it be considered one., Extra care should be taken when testing and configuring a system to use the XenGT project. > > The news of this update: > > - kernel update from 3.14.1 to drm-intel 3.17.0. > - We plan to integrate Intel GVT-g as a feature in i915 driver. That effort is still under review, not included in this update yet. > - Next update will be around early Apr, 2015. > > This update consists of: > > - Including some bug fixes and stability enhancement. > - Making XenGT device model to be aware of Broadwell. In this version BDW is not yet functioning. > - Available Fence registers number is changed to 32 from 16 to align with HSW hardware. > - New cascade interrupt framework for supporting interrupt virtualization on both Haswell and Broadwell. > - Add back the gem_vgtbuffer. The previous release did not build that module for 3.14 kernel. In this release, the module is back and rebased to 3.17. > - Enable the irq based context switch in vgt driver, which will help reduce the cpu utilization while doing context switch, it is enabled by default, and can be turn off by kernel flag irq_based_ctx_switch. > > > Please refer to the new setup guide, which provides step-to-step details about building/configuring/running Intel GVT-g: > > https://github.com/01org/XenGT-Preview-kernel/blob/master/XenGT_Setup_Guide.pdf > > The new source codes are available at the updated github repos: > > Linux: https://github.com/01org/XenGT-Preview-kernel.git > Xen: https://github.com/01org/XenGT-Preview-xen.git > Qemu: https://github.com/01org/XenGT-Preview-qemu.git > > > More information about Intel GVT-g background, architecture, etc can be found at: > > > https://www.usenix.org/conference/atc14/technical-sessions/presentation/tian > http://events.linuxfoundation.org/sites/events/files/slides/XenGT-Xen%20Summit-v7_0.pdf > https://01.org/xen/blogs/srclarkx/2013/graphics-virtualization-xengt > > > > The previous update can be found here: > > > http://lists.xen.org/archives/html/xen-devel/2014-12/msg00474.html > > > > Appreciate your comments! > > > > -- > Thanks, > Jike > > > On 12/04/2014 10:45 AM, Jike Song wrote: >> Hi all, >> >> We're pleased to announce a public release to Intel Graphics Virtualization Technology (Intel GVT-g, formerly known as XenGT). Intel GVT-g is a complete vGPU solution with mediated pass-through, supported today on 4th generation Intel Core(TM) processors with Intel Graphics processors. A virtual GPU instance is maintained for each VM, with part of performance critical resources directly assigned. The capability of running native graphics driver inside a VM, without hypervisor intervention in performance critical paths, achieves a good balance among performance, feature, and sharing capability. Though we only support Xen on Intel Processor Graphics so far, the core logic can be easily ported to other hypervisors. >> >> >> The news of this update: >> >> >> - kernel update from 3.11.6 to 3.14.1 >> >> - We plan to integrate Intel GVT-g as a feature in i915 driver. That effort is still under review, not included in this update yet >> >> - Next update will be around early Jan, 2015 >> >> >> This update consists of: >> >> - Windows HVM support with driver version 15.33.3910 >> >> - Stability fixes, e.g. stabilize GPU, the GPU hang occurrence rate becomes rare now >> >> - Hardware Media Acceleration for Decoding/Encoding/Transcoding, VC1, H264 etc. format supporting >> >> - Display enhancements, e.g. DP type is supported for virtual PORT >> >> - Display port capability virtualization: with this feature, dom0 manager could freely assign virtual DDI ports to VM, not necessary to check whether the corresponding physical DDI ports are available >> >> >> >> Please refer to the new setup guide, which provides step-to-step details about building/configuring/running Intel GVT-g: >> >> >> https://github.com/01org/XenGT-Preview-kernel/blob/master/XenGT_Setup_Guide.pdf >> >> >> >> The new source codes are available at the updated github repos: >> >> >> Linux: https://github.com/01org/XenGT-Preview-kernel.git >> >> Xen: https://github.com/01org/XenGT-Preview-xen.git >> >> Qemu: https://github.com/01org/XenGT-Preview-qemu.git >> >> >> More information about Intel GVT-g background, architecture, etc can be found at: >> >> >> https://www.usenix.org/conference/atc14/technical-sessions/presentation/tian >> >> http://events.linuxfoundation.org/sites/events/files/slides/XenGT-Xen%20Summit-v7_0.pdf >> >> https://01.org/xen/blogs/srclarkx/2013/graphics-virtualization-xengt >> >> >> The previous update can be found here: >> >> >> http://lists.xen.org/archives/html/xen-devel/2014-07/msg03248.html >> >> >> Appreciate your comments! >> >> >> -- >> Thanks, >> Jike >> >> On 07/25/2014 04:31 PM, Jike Song wrote: >>> Hi all, >>> >>> We're pleased to announce an update to Intel Graphics Virtualization Technology (Intel GVT-g, formerly known as XenGT). Intel GVT-g is a complete vGPU solution with mediated pass-through, supported today on 4th generation Intel Core(TM) processors with Intel Graphics processors. A virtual GPU instance is maintained for each VM, with part of performance critical resources directly assigned. The capability of running native graphics driver inside a VM, without hypervisor intervention in performance critical paths, achieves a good balance among performance, feature, and sharing capability. Though we only support Xen on Intel Processor Graphics so far, the core logic can be easily ported to other hypervisors. >>> >>> The news of this update: >>> >>> - Project code name is "XenGT", now official name is Intel Graphics Virtualization Technology (Intel GVT-g) >>> - Currently Intel GVT-g supports Intel Processor Graphics built into 4th generation Intel Core processors - Haswell platform >>> - Moving forward, XenGT will change to quarterly release cadence. Next update will be around early October, 2014. >>> >>> This update consists of: >>> >>> - Stability fixes, e.g. stable DP support >>> - Display enhancements, e.g. virtual monitor support. Users can define a virtual monitor type with customized EDID for virtual machines, not necessarily the same as physical monitors. >>> - Improved support for GPU recovery >>> - Experimental Windows HVM support. To download the experimental version, see setup guide for details >>> - Experimental Hardware Media Acceleration for decoding. >>> >>> >>> Please refer to the new setup guide, which provides step-to-step details about building/configuring/running Intel GVT-g: >>> >>> https://github.com/01org/XenGT-Preview-kernel/blob/master/XenGT_Setup_Guide.pdf >>> >>> >>> The new source codes are available at the updated github repos: >>> >>> Linux: https://github.com/01org/XenGT-Preview-kernel.git >>> Xen: https://github.com/01org/XenGT-Preview-xen.git >>> Qemu: https://github.com/01org/XenGT-Preview-qemu.git >>> >>> >>> More information about Intel GVT-g background, architecture, etc can be found at: >>> >>> https://www.usenix.org/conference/atc14/technical-sessions/presentation/tian >>> http://events.linuxfoundation.org/sites/events/files/slides/XenGT-Xen%20Summit-v7_0.pdf >>> https://01.org/xen/blogs/srclarkx/2013/graphics-virtualization-xengt >>> >>> The previous update can be found here: >>> >>> http://lists.xen.org/archives/html/xen-devel/2014-02/msg01848.html >>> >>> Appreciate your comments! >>> >>> >>> >>> >>> -- >>> Thanks, >>> Jike >>> From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jike Song Subject: Re: [Announcement] 2015-Q1 release of XenGT - a Mediated Graphics Passthrough Solution from Intel Date: Fri, 10 Apr 2015 21:23:16 +0800 Message-ID: <5527CEC4.9080700@intel.com> References: <53D215D3.50608@intel.com> <547FCAAD.2060406@intel.com> <54AF967B.3060503@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTP id C45576E05D for ; Fri, 10 Apr 2015 06:29:31 -0700 (PDT) In-Reply-To: <54AF967B.3060503@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: xen-devel@lists.xen.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org Cc: "White, Michael L" , "Dong, Eddie" , "Li, Susie" , "Cowperthwaite, David J" , "Zhou, Chao" , "Haron, Sandra" , "Zhu, Libo" , "Wang, Hongbo" List-Id: intel-gfx@lists.freedesktop.org SGkgYWxsLAoKV2UncmUgcGxlYXNlZCB0byBhbm5vdW5jZSBhIHB1YmxpYyB1cGRhdGUgdG8gSW50 ZWwgR3JhcGhpY3MgVmlydHVhbGl6YXRpb24gVGVjaG5vbG9neSAoSW50ZWwgR1ZULWcsIGZvcm1l cmx5IGtub3duIGFzIFhlbkdUKS4gSW50ZWwgR1ZULWcgaXMgYSBjb21wbGV0ZSB2R1BVIHNvbHV0 aW9uIHdpdGggbWVkaWF0ZWQgcGFzcy10aHJvdWdoLCBzdXBwb3J0ZWQgdG9kYXkgb24gNHRoIGdl bmVyYXRpb24gSW50ZWwgQ29yZShUTSkgcHJvY2Vzc29ycyB3aXRoIEludGVsIEdyYXBoaWNzIHBy b2Nlc3NvcnMuIEEgdmlydHVhbCBHUFUgaW5zdGFuY2UgaXMgbWFpbnRhaW5lZCBmb3IgZWFjaCBW TSwgd2l0aCBwYXJ0IG9mIHBlcmZvcm1hbmNlIGNyaXRpY2FsIHJlc291cmNlcyBkaXJlY3RseSBh c3NpZ25lZC4gVGhlIGNhcGFiaWxpdHkgb2YgcnVubmluZyBuYXRpdmUgZ3JhcGhpY3MgZHJpdmVy IGluc2lkZSBhIFZNLCB3aXRob3V0IGh5cGVydmlzb3IgaW50ZXJ2ZW50aW9uIGluIHBlcmZvcm1h bmNlIGNyaXRpY2FsIHBhdGhzLCBhY2hpZXZlcyBhIGdvb2QgYmFsYW5jZSBhbW9uZyBwZXJmb3Jt YW5jZSwgZmVhdHVyZSwgYW5kIHNoYXJpbmcgY2FwYWJpbGl0eS4gVGhvdWdoIHdlIG9ubHkgc3Vw cG9ydCBYZW4gb24gSW50ZWwgUHJvY2Vzc29yIEdyYXBoaWNzIHNvIGZhciwgdGhlIGNvcmUgbG9n aWMgY2FuIGJlIGVhc2lseSBwb3J0ZWQgdG8gb3RoZXIgaHlwZXJ2aXNvcnMuCgpUaXAgb2YgcmVw b3NpdG9yaWVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgICBLZXJuZWw6IGEw MTFjOWY5NTNlLCBCcmFuY2g6IG1hc3Rlci0yMDE1UTEtMy4xOC4wCiAgICAgICAgICBRZW11OiAy YTc1YmJmZjYyYzEsIEJyYW5jaDogbWFzdGVyCiAgICAgICAgICBYZW46IDM4YzM2ZjBmNTExYjEs IEJyYW5jaDogbWFzdGVyLTIwMTVRMS00LjUKClN1bW1hcnkgdGhpcyB1cGRhdGUKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQoJLSBQcmVsaW1pbmFyeSBCcm9hZHdlbGwgc3VwcG9ydC4KCS0ga2Vy bmVsIHVwZGF0ZSBmcm9tIGRybS1pbnRlbCAzLjE3LjAgdG8gZHJtLWludGVsIDMuMTguMCh0YWc6 IGRybS1pbnRlbC1uZXh0LWZpeGVzLTIwMTQtMTItMTcsIG5vdGljZSB0aGF0IGk5MTUgZHJpdmVy IGNvZGUgaXMgbXVjaCBuZXdlciB0aGFuIGtlcm5lbCBzdGFibGUgdmVyc2lvbikuCgktIE5leHQg dXBkYXRlIHdpbGwgYmUgYXJvdW5kIGVhcmx5IEp1bHksIDIwMTUuCgktIEtWTSBzdXBwb3J0IGlz IHN0aWxsIGluIGEgc2VwYXJhdGUgYnJhbmNoIGFzIHByb3RvdHlwZSB3b3JrLiBXZSBwbGFuIHRv IGludGVncmF0ZSBLVk0vWGVuIHN1cHBvcnQgdG9nZXRoZXIgaW4gZnV0dXJlIHJlbGVhc2VzLgoK VGhpcyB1cGRhdGUgY29uc2lzdHMgb2Y6CgktIGd2dC1nIGNvcmUgbG9naWMgY29kZSB3YXMgbW92 ZWQgaW50byBpOTE1IGRyaXZlciBkaXJlY3RvcnkuCgktIEhvc3QgbWVkaWF0aW9uIGlzIHVzZWQg Zm9yIGRvbTAgaTkxNSBkcml2ZXIgYWNjZXNzLCBpbnN0ZWFkIG9mIGRlLXByaXZpbGVnZWQgZG9t MC4KCS0gVGhlIFhlbi1zcGVjaWZpYyBjb2RlIHdhcyBzZXBhcmF0ZWQgZnJvbSB2Z3QgY29yZSBs b2dpYyBpbnRvIGEgbmV3IGZpbGUgImRyaXZlci94ZW4veGVuZ3QuYyIuCgktIEJyb2Fkd2VsbCBp cyBwcmVsaW1pbmFyaWx5IHN1cHBvcnRlZCBpbiB0aGlzIHJlbGVhc2UuIFVzZXJzIGNvdWxkIHN0 YXJ0IG11bHRpcGxlIGxpbnV4L3dpbmRvd3MgNjQtYml0IHZpcnR1YWwgbWFjaGluZXMgc2ltdWx0 YW5lb3VzbHksIGFuZCBwZXJmb3JtIGRpc3BsYXkgc3dpdGNoIGFtb25nIHRoZW0uCgpOb3RpY2Ug dGhhdCBpdCBpcyBzdGlsbCBwcmVsaW1pbmFyeSByZWxlYXNlIGZvciBCRFcsIHdoaWNoIGlzIG5v dCB5ZXQgaW4gdGhlIHNhbWUgbGV2ZWwgb2YgSFNXIHJlbGVhc2UuIERpZmZlcmVuY2VzIGluY2x1 ZGU6CiAgICAgICAgICAgICAgICAgKiBQb3dlci9wZXJmb3JtYW5jZSB0dW5pbmcgb24gQkRXIGlz IG5vdCB5ZXQgZG9uZS4KCSAqIFN0YWJpbGl0eSBuZWVkcyB0byBiZSBpbXByb3ZlZC4KICAgICAg ICAgICAgICAgICAqIE5vIDMyLWJpdCBndWVzdCBPUyBzdXBwb3J0LgogICAgICAgICAgICAgICAg ICogTXVsdGktbW9uaXRvciBzY2VuYXJpbyBpcyBub3QgZnVsbHkgdGVzdGVkLCB3aGlsZSBzaW5n bGUgbW9uaXRvciBvZiBWR0EvSERNSS9EUC9lRFAgc2hvdWxkIGp1c3Qgd29yay4KCgpXaGVyZSB0 byBnZXQ6Ci0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAga2VyZW5sOiBodHRwczov L2dpdGh1Yi5jb20vMDFvcmcvWGVuR1QtUHJldmlldy1rZXJuZWwuZ2l0CiAgICAgICAgICAgICAg ICAgWGVuOiBodHRwczovL2dpdGh1Yi5jb20vMDFvcmcvWGVuR1QtUHJldmlldy14ZW4uZ2l0CiAg ICAgICAgICAgICAgICAgUWVtdTogaHR0cHM6Ly9naXRodWIuY29tLzAxb3JnL1hlbkdULVByZXZp ZXctcWVtdS5naXQKClBsZWFzZSByZWZlciB0byB0aGUgbmV3IHNldHVwIGd1aWRlLCB3aGljaCBw cm92aWRlcyBzdGVwLXRvLXN0ZXAgZGV0YWlscyBhYm91dCBidWlsZGluZy9jb25maWd1cmluZy9y dW5uaW5nIEludGVsIEdWVC1nOgoJIGh0dHBzOi8vZ2l0aHViLmNvbS8wMW9yZy9YZW5HVC1QcmV2 aWV3LWtlcm5lbC9ibG9iL21hc3Rlci0yMDE1UTEtMy4xOC4wL1hlbkdUX1NldHVwX0d1aWRlXzIw MTVRMS5wZGYKCk1vcmUgaW5mb3JtYXRpb24gYWJvdXQgSW50ZWwgR1ZULWcgYmFja2dyb3VuZCwg YXJjaGl0ZWN0dXJlLCBldGMgY2FuIGJlIGZvdW5kIGF0OgogICAgICAgICAgICAgICAgIGh0dHBz Oi8vd3d3LnVzZW5peC5vcmcvY29uZmVyZW5jZS9hdGMxNC90ZWNobmljYWwtc2Vzc2lvbnMvcHJl c2VudGF0aW9uL3RpYW4KICAgICAgICAgICAgICAgICBodHRwOi8vZXZlbnRzLmxpbnV4Zm91bmRh dGlvbi5vcmcvc2l0ZXMvZXZlbnRzL2ZpbGVzL3NsaWRlcy9YZW5HVC1YZW4lMjBTdW1taXQtdjdf MC5wZGYKICAgICAgICAgICAgICAgICBodHRwczovLzAxLm9yZy94ZW4vYmxvZ3Mvc3JjbGFya3gv MjAxMy9ncmFwaGljcy12aXJ0dWFsaXphdGlvbi14ZW5ndAoKVGhlIHByZXZpb3VzIHVwZGF0ZSBj YW4gYmUgZm91bmQgaGVyZToKICAgICAgICAgICAgICAgIGh0dHA6Ly9saXN0cy54ZW4ub3JnL2Fy Y2hpdmVzL2h0bWwveGVuLWRldmVsLzIwMTQtMTIvbXNnMDA0NzQuaHRtbAoKCk5vdGUKLS0tLS0t LS0tLS0tLS0tCglUaGUgWGVuR1QgcHJvamVjdCBzaG91bGQgYmUgY29uc2lkZXJlZCBhIHdvcmsg aW4gcHJvZ3Jlc3MsIEFzIHN1Y2ggaXQgaXMgbm90IGEgY29tcGxldGUgcHJvZHVjdCBub3Igc2hv dWxkIGl0IGJlIGNvbnNpZGVyZWQgb25lLiwgRXh0cmEgY2FyZSBzaG91bGQgYmUgdGFrZW4gd2hl biB0ZXN0aW5nIGFuZCBjb25maWd1cmluZyBhIHN5c3RlbSB0byB1c2UgdGhlIFhlbkdUIHByb2pl Y3QuCgoKLS0KVGhhbmtzLApKaWtlCgpPbiAwMS8wOS8yMDE1IDA0OjUxIFBNLCBKaWtlIFNvbmcg d3JvdGU6Cj4gSGkgYWxsLAo+Cj4gICAgIFdlJ3JlIHBsZWFzZWQgdG8gYW5ub3VuY2UgYSBwdWJs aWMgdXBkYXRlIHRvIEludGVsIEdyYXBoaWNzIFZpcnR1YWxpemF0aW9uIFRlY2hub2xvZ3kgKElu dGVsIEdWVC1nLCBmb3JtZXJseSBrbm93biBhcyBYZW5HVCkuIEludGVsIEdWVC1nIGlzIGEgY29t cGxldGUgdkdQVSBzb2x1dGlvbiB3aXRoIG1lZGlhdGVkIHBhc3MtdGhyb3VnaCwgc3VwcG9ydGVk IHRvZGF5IG9uIDR0aCBnZW5lcmF0aW9uIEludGVsIENvcmUoVE0pIHByb2Nlc3NvcnMgd2l0aCBJ bnRlbCBHcmFwaGljcyBwcm9jZXNzb3JzLiBBIHZpcnR1YWwgR1BVIGluc3RhbmNlIGlzIG1haW50 YWluZWQgZm9yIGVhY2ggVk0sIHdpdGggcGFydCBvZiBwZXJmb3JtYW5jZSBjcml0aWNhbCByZXNv dXJjZXMgZGlyZWN0bHkgYXNzaWduZWQuIFRoZSBjYXBhYmlsaXR5IG9mIHJ1bm5pbmcgbmF0aXZl IGdyYXBoaWNzIGRyaXZlciBpbnNpZGUgYSBWTSwgd2l0aG91dCBoeXBlcnZpc29yIGludGVydmVu dGlvbiBpbiBwZXJmb3JtYW5jZSBjcml0aWNhbCBwYXRocywgYWNoaWV2ZXMgYSBnb29kIGJhbGFu Y2UgYW1vbmcgcGVyZm9ybWFuY2UsIGZlYXR1cmUsIGFuZCBzaGFyaW5nIGNhcGFiaWxpdHkuIFRo b3VnaCB3ZSBvbmx5IHN1cHBvcnQgWGVuIG9uIEludGVsIFByb2Nlc3NvciBHcmFwaGljcyBzbyBm YXIsIHRoZSBjb3JlIGxvZ2ljIGNhbiBiZSBlYXNpbHkgcG9ydGVkIHRvIG90aGVyIGh5cGVydmlz b3JzLiAgIFRoZSBYZW5HVCBwcm9qZWN0IHNob3VsZCBiZSBjb25zaWRlcmVkIGEgd29yayBpbiBw cm9ncmVzcywgQXMgc3VjaCBpdCBpcyBub3QgYSBjb21wbGV0ZSBwcm9kdWN0IG5vciBzaG91bGQg aXQgYmUgY29uc2lkZXJlZCBvbmUuLCBFeHRyYSBjYXJlIHNob3VsZCBiZSB0YWtlbiB3aGVuIHRl c3RpbmcgYW5kIGNvbmZpZ3VyaW5nIGEgc3lzdGVtIHRvIHVzZSB0aGUgWGVuR1QgcHJvamVjdC4K Pgo+IFRoZSBuZXdzIG9mIHRoaXMgdXBkYXRlOgo+Cj4gCS0ga2VybmVsIHVwZGF0ZSBmcm9tIDMu MTQuMSB0byBkcm0taW50ZWwgMy4xNy4wLgo+IAktIFdlIHBsYW4gdG8gaW50ZWdyYXRlIEludGVs IEdWVC1nIGFzIGEgZmVhdHVyZSBpbiBpOTE1IGRyaXZlci4gVGhhdCBlZmZvcnQgaXMgc3RpbGwg dW5kZXIgcmV2aWV3LCBub3QgaW5jbHVkZWQgaW4gdGhpcyB1cGRhdGUgeWV0Lgo+IAktIE5leHQg dXBkYXRlIHdpbGwgYmUgYXJvdW5kIGVhcmx5IEFwciwgMjAxNS4KPgo+IFRoaXMgdXBkYXRlIGNv bnNpc3RzIG9mOgo+Cj4gCS0gSW5jbHVkaW5nIHNvbWUgYnVnIGZpeGVzIGFuZCBzdGFiaWxpdHkg ZW5oYW5jZW1lbnQuCj4gCS0gTWFraW5nIFhlbkdUIGRldmljZSBtb2RlbCB0byBiZSBhd2FyZSBv ZiBCcm9hZHdlbGwuIEluIHRoaXMgdmVyc2lvbiBCRFcgaXMgbm90IHlldCBmdW5jdGlvbmluZy4K PiAJLSBBdmFpbGFibGUgRmVuY2UgcmVnaXN0ZXJzIG51bWJlciBpcyBjaGFuZ2VkIHRvIDMyIGZy b20gMTYgdG8gYWxpZ24gd2l0aCBIU1cgaGFyZHdhcmUuCj4gCS0gTmV3IGNhc2NhZGUgaW50ZXJy dXB0IGZyYW1ld29yayBmb3Igc3VwcG9ydGluZyBpbnRlcnJ1cHQgdmlydHVhbGl6YXRpb24gb24g Ym90aCBIYXN3ZWxsIGFuZCBCcm9hZHdlbGwuCj4gCS0gQWRkIGJhY2sgdGhlIGdlbV92Z3RidWZm ZXIuIFRoZSBwcmV2aW91cyByZWxlYXNlIGRpZCBub3QgYnVpbGQgdGhhdCBtb2R1bGUgZm9yIDMu MTQga2VybmVsLiBJbiB0aGlzIHJlbGVhc2UsIHRoZSBtb2R1bGUgaXMgYmFjayBhbmQgcmViYXNl ZCB0byAzLjE3Lgo+IAktIEVuYWJsZSB0aGUgaXJxIGJhc2VkIGNvbnRleHQgc3dpdGNoIGluIHZn dCBkcml2ZXIsIHdoaWNoIHdpbGwgaGVscCByZWR1Y2UgdGhlIGNwdSB1dGlsaXphdGlvbiB3aGls ZSBkb2luZyBjb250ZXh0IHN3aXRjaCwgaXQgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCBhbmQgY2Fu IGJlIHR1cm4gb2ZmIGJ5IGtlcm5lbCBmbGFnIGlycV9iYXNlZF9jdHhfc3dpdGNoLgo+Cj4KPiBQ bGVhc2UgcmVmZXIgdG8gdGhlIG5ldyBzZXR1cCBndWlkZSwgd2hpY2ggcHJvdmlkZXMgc3RlcC10 by1zdGVwIGRldGFpbHMgYWJvdXQgYnVpbGRpbmcvY29uZmlndXJpbmcvcnVubmluZyBJbnRlbCBH VlQtZzoKPgo+IAlodHRwczovL2dpdGh1Yi5jb20vMDFvcmcvWGVuR1QtUHJldmlldy1rZXJuZWwv YmxvYi9tYXN0ZXIvWGVuR1RfU2V0dXBfR3VpZGUucGRmCj4KPiBUaGUgbmV3IHNvdXJjZSBjb2Rl cyBhcmUgYXZhaWxhYmxlIGF0IHRoZSB1cGRhdGVkIGdpdGh1YiByZXBvczoKPgo+IAlMaW51eDog aHR0cHM6Ly9naXRodWIuY29tLzAxb3JnL1hlbkdULVByZXZpZXcta2VybmVsLmdpdAo+IAlYZW46 IGh0dHBzOi8vZ2l0aHViLmNvbS8wMW9yZy9YZW5HVC1QcmV2aWV3LXhlbi5naXQKPiAJUWVtdTog aHR0cHM6Ly9naXRodWIuY29tLzAxb3JnL1hlbkdULVByZXZpZXctcWVtdS5naXQKPgo+Cj4gTW9y ZSBpbmZvcm1hdGlvbiBhYm91dCBJbnRlbCBHVlQtZyBiYWNrZ3JvdW5kLCBhcmNoaXRlY3R1cmUs IGV0YyBjYW4gYmUgZm91bmQgYXQ6Cj4KPgo+IAlodHRwczovL3d3dy51c2VuaXgub3JnL2NvbmZl cmVuY2UvYXRjMTQvdGVjaG5pY2FsLXNlc3Npb25zL3ByZXNlbnRhdGlvbi90aWFuCj4gCWh0dHA6 Ly9ldmVudHMubGludXhmb3VuZGF0aW9uLm9yZy9zaXRlcy9ldmVudHMvZmlsZXMvc2xpZGVzL1hl bkdULVhlbiUyMFN1bW1pdC12N18wLnBkZgo+IAlodHRwczovLzAxLm9yZy94ZW4vYmxvZ3Mvc3Jj bGFya3gvMjAxMy9ncmFwaGljcy12aXJ0dWFsaXphdGlvbi14ZW5ndAo+Cj4KPgo+IFRoZSBwcmV2 aW91cyB1cGRhdGUgY2FuIGJlIGZvdW5kIGhlcmU6Cj4KPgo+IAlodHRwOi8vbGlzdHMueGVuLm9y Zy9hcmNoaXZlcy9odG1sL3hlbi1kZXZlbC8yMDE0LTEyL21zZzAwNDc0Lmh0bWwKPgo+Cj4KPiBB cHByZWNpYXRlIHlvdXIgY29tbWVudHMhCj4KPgo+Cj4gLS0KPiBUaGFua3MsCj4gSmlrZQo+Cj4K PiBPbiAxMi8wNC8yMDE0IDEwOjQ1IEFNLCBKaWtlIFNvbmcgd3JvdGU6Cj4+IEhpIGFsbCwKPj4K Pj4gV2UncmUgcGxlYXNlZCB0byBhbm5vdW5jZSBhIHB1YmxpYyByZWxlYXNlIHRvIEludGVsIEdy YXBoaWNzIFZpcnR1YWxpemF0aW9uIFRlY2hub2xvZ3kgKEludGVsIEdWVC1nLCBmb3JtZXJseSBr bm93biBhcyBYZW5HVCkuIEludGVsIEdWVC1nIGlzIGEgY29tcGxldGUgdkdQVSBzb2x1dGlvbiB3 aXRoIG1lZGlhdGVkIHBhc3MtdGhyb3VnaCwgc3VwcG9ydGVkIHRvZGF5IG9uIDR0aCBnZW5lcmF0 aW9uIEludGVsIENvcmUoVE0pIHByb2Nlc3NvcnMgd2l0aCBJbnRlbCBHcmFwaGljcyBwcm9jZXNz b3JzLiBBIHZpcnR1YWwgR1BVIGluc3RhbmNlIGlzIG1haW50YWluZWQgZm9yIGVhY2ggVk0sIHdp dGggcGFydCBvZiBwZXJmb3JtYW5jZSBjcml0aWNhbCByZXNvdXJjZXMgZGlyZWN0bHkgYXNzaWdu ZWQuIFRoZSBjYXBhYmlsaXR5IG9mIHJ1bm5pbmcgbmF0aXZlIGdyYXBoaWNzIGRyaXZlciBpbnNp ZGUgYSBWTSwgd2l0aG91dCBoeXBlcnZpc29yIGludGVydmVudGlvbiBpbiBwZXJmb3JtYW5jZSBj cml0aWNhbCBwYXRocywgYWNoaWV2ZXMgYSBnb29kIGJhbGFuY2UgYW1vbmcgcGVyZm9ybWFuY2Us IGZlYXR1cmUsIGFuZCBzaGFyaW5nIGNhcGFiaWxpdHkuIFRob3VnaCB3ZSBvbmx5IHN1cHBvcnQg WGVuIG9uIEludGVsIFByb2Nlc3NvciBHcmFwaGljcyBzbyBmYXIsIHRoZSBjb3JlIGxvZ2ljIGNh biBiZSBlYXNpbHkgcG9ydGVkIHRvIG90aGVyIGh5cGVydmlzb3JzLgo+Pgo+Pgo+PiBUaGUgbmV3 cyBvZiB0aGlzIHVwZGF0ZToKPj4KPj4KPj4gCS0ga2VybmVsIHVwZGF0ZSBmcm9tIDMuMTEuNiB0 byAzLjE0LjEKPj4KPj4gCS0gV2UgcGxhbiB0byBpbnRlZ3JhdGUgSW50ZWwgR1ZULWcgYXMgYSBm ZWF0dXJlIGluIGk5MTUgZHJpdmVyLiBUaGF0IGVmZm9ydCBpcyBzdGlsbCB1bmRlciByZXZpZXcs IG5vdCBpbmNsdWRlZCBpbiB0aGlzIHVwZGF0ZSB5ZXQKPj4KPj4gCS0gTmV4dCB1cGRhdGUgd2ls bCBiZSBhcm91bmQgZWFybHkgSmFuLCAyMDE1Cj4+Cj4+Cj4+IFRoaXMgdXBkYXRlIGNvbnNpc3Rz IG9mOgo+Pgo+PiAJLSBXaW5kb3dzIEhWTSBzdXBwb3J0IHdpdGggZHJpdmVyIHZlcnNpb24gMTUu MzMuMzkxMAo+Pgo+PiAJLSBTdGFiaWxpdHkgZml4ZXMsIGUuZy4gc3RhYmlsaXplIEdQVSwgdGhl IEdQVSBoYW5nIG9jY3VycmVuY2UgcmF0ZSBiZWNvbWVzIHJhcmUgbm93Cj4+Cj4+IAktIEhhcmR3 YXJlIE1lZGlhIEFjY2VsZXJhdGlvbiBmb3IgRGVjb2RpbmcvRW5jb2RpbmcvVHJhbnNjb2Rpbmcs IFZDMSwgSDI2NCBldGMuIGZvcm1hdCBzdXBwb3J0aW5nCj4+Cj4+IAktIERpc3BsYXkgZW5oYW5j ZW1lbnRzLCBlLmcuIERQIHR5cGUgaXMgc3VwcG9ydGVkIGZvciB2aXJ0dWFsIFBPUlQKPj4KPj4g CS0gRGlzcGxheSBwb3J0IGNhcGFiaWxpdHkgdmlydHVhbGl6YXRpb246IHdpdGggdGhpcyBmZWF0 dXJlLCBkb20wIG1hbmFnZXIgY291bGQgZnJlZWx5IGFzc2lnbiB2aXJ0dWFsIERESSBwb3J0cyB0 byBWTSwgbm90IG5lY2Vzc2FyeSB0byBjaGVjayB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIHBo eXNpY2FsIERESSBwb3J0cyBhcmUgYXZhaWxhYmxlCj4+Cj4+Cj4+Cj4+IFBsZWFzZSByZWZlciB0 byB0aGUgbmV3IHNldHVwIGd1aWRlLCB3aGljaCBwcm92aWRlcyBzdGVwLXRvLXN0ZXAgZGV0YWls cyBhYm91dCBidWlsZGluZy9jb25maWd1cmluZy9ydW5uaW5nIEludGVsIEdWVC1nOgo+Pgo+Pgo+ PiAJaHR0cHM6Ly9naXRodWIuY29tLzAxb3JnL1hlbkdULVByZXZpZXcta2VybmVsL2Jsb2IvbWFz dGVyL1hlbkdUX1NldHVwX0d1aWRlLnBkZgo+Pgo+Pgo+Pgo+PiBUaGUgbmV3IHNvdXJjZSBjb2Rl cyBhcmUgYXZhaWxhYmxlIGF0IHRoZSB1cGRhdGVkIGdpdGh1YiByZXBvczoKPj4KPj4KPj4gCUxp bnV4OiBodHRwczovL2dpdGh1Yi5jb20vMDFvcmcvWGVuR1QtUHJldmlldy1rZXJuZWwuZ2l0Cj4+ Cj4+IAlYZW46IGh0dHBzOi8vZ2l0aHViLmNvbS8wMW9yZy9YZW5HVC1QcmV2aWV3LXhlbi5naXQK Pj4KPj4gCVFlbXU6IGh0dHBzOi8vZ2l0aHViLmNvbS8wMW9yZy9YZW5HVC1QcmV2aWV3LXFlbXUu Z2l0Cj4+Cj4+Cj4+IE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgSW50ZWwgR1ZULWcgYmFja2dyb3Vu ZCwgYXJjaGl0ZWN0dXJlLCBldGMgY2FuIGJlIGZvdW5kIGF0Ogo+Pgo+Pgo+PiAJaHR0cHM6Ly93 d3cudXNlbml4Lm9yZy9jb25mZXJlbmNlL2F0YzE0L3RlY2huaWNhbC1zZXNzaW9ucy9wcmVzZW50 YXRpb24vdGlhbgo+Pgo+PiAJaHR0cDovL2V2ZW50cy5saW51eGZvdW5kYXRpb24ub3JnL3NpdGVz L2V2ZW50cy9maWxlcy9zbGlkZXMvWGVuR1QtWGVuJTIwU3VtbWl0LXY3XzAucGRmCj4+Cj4+IAlo dHRwczovLzAxLm9yZy94ZW4vYmxvZ3Mvc3JjbGFya3gvMjAxMy9ncmFwaGljcy12aXJ0dWFsaXph dGlvbi14ZW5ndAo+Pgo+Pgo+PiBUaGUgcHJldmlvdXMgdXBkYXRlIGNhbiBiZSBmb3VuZCBoZXJl Ogo+Pgo+Pgo+PiAJaHR0cDovL2xpc3RzLnhlbi5vcmcvYXJjaGl2ZXMvaHRtbC94ZW4tZGV2ZWwv MjAxNC0wNy9tc2cwMzI0OC5odG1sCj4+Cj4+Cj4+IEFwcHJlY2lhdGUgeW91ciBjb21tZW50cyEK Pj4KPj4KPj4gLS0KPj4gVGhhbmtzLAo+PiBKaWtlCj4+Cj4+IE9uIDA3LzI1LzIwMTQgMDQ6MzEg UE0sIEppa2UgU29uZyB3cm90ZToKPj4+IEhpIGFsbCwKPj4+Cj4+PiBXZSdyZSBwbGVhc2VkIHRv IGFubm91bmNlIGFuIHVwZGF0ZSB0byBJbnRlbCBHcmFwaGljcyBWaXJ0dWFsaXphdGlvbiBUZWNo bm9sb2d5IChJbnRlbCBHVlQtZywgZm9ybWVybHkga25vd24gYXMgWGVuR1QpLiBJbnRlbCBHVlQt ZyBpcyBhIGNvbXBsZXRlIHZHUFUgc29sdXRpb24gd2l0aCBtZWRpYXRlZCBwYXNzLXRocm91Z2gs IHN1cHBvcnRlZCB0b2RheSBvbiA0dGggZ2VuZXJhdGlvbiBJbnRlbCBDb3JlKFRNKSBwcm9jZXNz b3JzIHdpdGggSW50ZWwgR3JhcGhpY3MgcHJvY2Vzc29ycy4gQSB2aXJ0dWFsIEdQVSBpbnN0YW5j ZSBpcyBtYWludGFpbmVkIGZvciBlYWNoIFZNLCB3aXRoIHBhcnQgb2YgcGVyZm9ybWFuY2UgY3Jp dGljYWwgcmVzb3VyY2VzIGRpcmVjdGx5IGFzc2lnbmVkLiBUaGUgY2FwYWJpbGl0eSBvZiBydW5u aW5nIG5hdGl2ZSBncmFwaGljcyBkcml2ZXIgaW5zaWRlIGEgVk0sIHdpdGhvdXQgaHlwZXJ2aXNv ciBpbnRlcnZlbnRpb24gaW4gcGVyZm9ybWFuY2UgY3JpdGljYWwgcGF0aHMsIGFjaGlldmVzIGEg Z29vZCBiYWxhbmNlIGFtb25nIHBlcmZvcm1hbmNlLCBmZWF0dXJlLCBhbmQgc2hhcmluZyBjYXBh YmlsaXR5LiBUaG91Z2ggd2Ugb25seSBzdXBwb3J0IFhlbiBvbiBJbnRlbCBQcm9jZXNzb3IgR3Jh cGhpY3Mgc28gZmFyLCB0aGUgY29yZSBsb2dpYyBjYW4gYmUgZWFzaWx5IHBvcnRlZCB0byBvdGhl ciBoeXBlcnZpc29ycy4KPj4+Cj4+PiBUaGUgbmV3cyBvZiB0aGlzIHVwZGF0ZToKPj4+Cj4+PiAJ LSBQcm9qZWN0IGNvZGUgbmFtZSBpcyAiWGVuR1QiLCBub3cgb2ZmaWNpYWwgbmFtZSBpcyBJbnRl bCBHcmFwaGljcyBWaXJ0dWFsaXphdGlvbiBUZWNobm9sb2d5IChJbnRlbCBHVlQtZykKPj4+IAkt IEN1cnJlbnRseSBJbnRlbCBHVlQtZyBzdXBwb3J0cyBJbnRlbCBQcm9jZXNzb3IgR3JhcGhpY3Mg YnVpbHQgaW50byA0dGggZ2VuZXJhdGlvbiBJbnRlbCBDb3JlIHByb2Nlc3NvcnMgLSBIYXN3ZWxs IHBsYXRmb3JtCj4+PiAJLSBNb3ZpbmcgZm9yd2FyZCwgWGVuR1Qgd2lsbCBjaGFuZ2UgdG8gcXVh cnRlcmx5IHJlbGVhc2UgY2FkZW5jZS4gTmV4dCB1cGRhdGUgd2lsbCBiZSBhcm91bmQgZWFybHkg T2N0b2JlciwgMjAxNC4KPj4+Cj4+PiBUaGlzIHVwZGF0ZSBjb25zaXN0cyBvZjoKPj4+Cj4+PiAJ LSBTdGFiaWxpdHkgZml4ZXMsIGUuZy4gc3RhYmxlIERQIHN1cHBvcnQKPj4+IAktIERpc3BsYXkg ZW5oYW5jZW1lbnRzLCBlLmcuIHZpcnR1YWwgbW9uaXRvciBzdXBwb3J0LiBVc2VycyBjYW4gZGVm aW5lIGEgdmlydHVhbCBtb25pdG9yIHR5cGUgd2l0aCBjdXN0b21pemVkIEVESUQgZm9yIHZpcnR1 YWwgbWFjaGluZXMsIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyBwaHlzaWNhbCBtb25pdG9y cy4KPj4+IAktIEltcHJvdmVkIHN1cHBvcnQgZm9yIEdQVSByZWNvdmVyeQo+Pj4gCS0gRXhwZXJp bWVudGFsIFdpbmRvd3MgSFZNIHN1cHBvcnQuIFRvIGRvd25sb2FkIHRoZSBleHBlcmltZW50YWwg dmVyc2lvbiwgc2VlIHNldHVwIGd1aWRlIGZvciBkZXRhaWxzCj4+PiAJLSBFeHBlcmltZW50YWwg SGFyZHdhcmUgTWVkaWEgQWNjZWxlcmF0aW9uIGZvciBkZWNvZGluZy4KPj4+Cj4+Pgo+Pj4gUGxl YXNlIHJlZmVyIHRvIHRoZSBuZXcgc2V0dXAgZ3VpZGUsIHdoaWNoIHByb3ZpZGVzIHN0ZXAtdG8t c3RlcCBkZXRhaWxzIGFib3V0IGJ1aWxkaW5nL2NvbmZpZ3VyaW5nL3J1bm5pbmcgSW50ZWwgR1ZU LWc6Cj4+Pgo+Pj4gCWh0dHBzOi8vZ2l0aHViLmNvbS8wMW9yZy9YZW5HVC1QcmV2aWV3LWtlcm5l bC9ibG9iL21hc3Rlci9YZW5HVF9TZXR1cF9HdWlkZS5wZGYKPj4+Cj4+Pgo+Pj4gVGhlIG5ldyBz b3VyY2UgY29kZXMgYXJlIGF2YWlsYWJsZSBhdCB0aGUgdXBkYXRlZCBnaXRodWIgcmVwb3M6Cj4+ Pgo+Pj4gCUxpbnV4OiBodHRwczovL2dpdGh1Yi5jb20vMDFvcmcvWGVuR1QtUHJldmlldy1rZXJu ZWwuZ2l0Cj4+PiAJWGVuOiBodHRwczovL2dpdGh1Yi5jb20vMDFvcmcvWGVuR1QtUHJldmlldy14 ZW4uZ2l0Cj4+PiAJUWVtdTogaHR0cHM6Ly9naXRodWIuY29tLzAxb3JnL1hlbkdULVByZXZpZXct cWVtdS5naXQKPj4+Cj4+Pgo+Pj4gTW9yZSBpbmZvcm1hdGlvbiBhYm91dCBJbnRlbCBHVlQtZyBi YWNrZ3JvdW5kLCBhcmNoaXRlY3R1cmUsIGV0YyBjYW4gYmUgZm91bmQgYXQ6Cj4+Pgo+Pj4gCWh0 dHBzOi8vd3d3LnVzZW5peC5vcmcvY29uZmVyZW5jZS9hdGMxNC90ZWNobmljYWwtc2Vzc2lvbnMv cHJlc2VudGF0aW9uL3RpYW4KPj4+IAlodHRwOi8vZXZlbnRzLmxpbnV4Zm91bmRhdGlvbi5vcmcv c2l0ZXMvZXZlbnRzL2ZpbGVzL3NsaWRlcy9YZW5HVC1YZW4lMjBTdW1taXQtdjdfMC5wZGYKPj4+ IAlodHRwczovLzAxLm9yZy94ZW4vYmxvZ3Mvc3JjbGFya3gvMjAxMy9ncmFwaGljcy12aXJ0dWFs aXphdGlvbi14ZW5ndAo+Pj4KPj4+IFRoZSBwcmV2aW91cyB1cGRhdGUgY2FuIGJlIGZvdW5kIGhl cmU6Cj4+Pgo+Pj4gCWh0dHA6Ly9saXN0cy54ZW4ub3JnL2FyY2hpdmVzL2h0bWwveGVuLWRldmVs LzIwMTQtMDIvbXNnMDE4NDguaHRtbAo+Pj4KPj4+IEFwcHJlY2lhdGUgeW91ciBjb21tZW50cyEK Pj4+Cj4+Pgo+Pj4KPj4+Cj4+PiAtLQo+Pj4gVGhhbmtzLAo+Pj4gSmlrZQo+Pj4KX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcg bGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK