From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50368) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1clBmT-0001np-1z for qemu-devel@nongnu.org; Tue, 07 Mar 2017 04:51:46 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1clBmP-0004WC-3H for qemu-devel@nongnu.org; Tue, 07 Mar 2017 04:51:45 -0500 Received: from smtp.eu.citrix.com ([185.25.65.24]:45945) by eggs.gnu.org with esmtps (TLS1.0:RSA_ARCFOUR_SHA1:16) (Exim 4.71) (envelope-from ) id 1clBmO-0004RB-Np for qemu-devel@nongnu.org; Tue, 07 Mar 2017 04:51:41 -0500 From: Paul Durrant Date: Tue, 7 Mar 2017 09:51:36 +0000 Message-ID: <34e649bb86964b40bd2f5ccf63773cc2@AMSPEX02CL03.citrite.net> References: <1488452986-24501-1-git-send-email-paul.durrant@citrix.com> <1488452986-24501-6-git-send-email-paul.durrant@citrix.com> <05365905529b4fd78ff67989743a8dfb@AMSPEX02CL03.citrite.net> <1636138fa3a948229a4630fe48d5a079@AMSPEX02CL03.citrite.net> <31427779196840b3b31171ec9deda91f@AMSPEX02CL03.citrite.net> In-Reply-To: Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH v2 5/5] xen: use libxendevicemodel when available List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: 'Stefano Stabellini' Cc: Anthony Perard , "xen-devel@lists.xenproject.org" , "qemu-devel@nongnu.org" > -----Original Message----- > From: Stefano Stabellini [mailto:sstabellini@kernel.org] > Sent: 06 March 2017 19:14 > To: Paul Durrant > Cc: 'Stefano Stabellini' ; Anthony Perard > ; xen-devel@lists.xenproject.org; qemu- > devel@nongnu.org > Subject: RE: [PATCH v2 5/5] xen: use libxendevicemodel when available >=20 > On Mon, 6 Mar 2017, Paul Durrant wrote: > > > -----Original Message----- > > > From: Qemu-devel [mailto:qemu-devel- > > > bounces+paul.durrant=3Dcitrix.com@nongnu.org] On Behalf Of Paul > Durrant > > > Sent: 06 March 2017 09:15 > > > To: 'Stefano Stabellini' > > > Cc: Anthony Perard ; xen- > > > devel@lists.xenproject.org; qemu-devel@nongnu.org > > > Subject: Re: [Qemu-devel] [PATCH v2 5/5] xen: use libxendevicemodel > when > > > available > > > > > > > -----Original Message----- > > > > From: Stefano Stabellini [mailto:sstabellini@kernel.org] > > > > Sent: 03 March 2017 20:43 > > > > To: Stefano Stabellini > > > > Cc: Paul Durrant ; xen- > > > devel@lists.xenproject.org; > > > > qemu-devel@nongnu.org; Anthony Perard > > > > > Subject: RE: [PATCH v2 5/5] xen: use libxendevicemodel when availab= le > > > > > > > > On Fri, 3 Mar 2017, Stefano Stabellini wrote: > > > > > On Fri, 3 Mar 2017, Paul Durrant wrote: > > > > > > > -----Original Message----- > > > > > > > From: Stefano Stabellini [mailto:sstabellini@kernel.org] > > > > > > > Sent: 02 March 2017 22:50 > > > > > > > To: Paul Durrant > > > > > > > Cc: xen-devel@lists.xenproject.org; qemu-devel@nongnu.org; > > > Stefano > > > > > > > Stabellini ; Anthony Perard > > > > > > > > > > > > > > Subject: Re: [PATCH v2 5/5] xen: use libxendevicemodel when > > > available > > > > > > > > > > > > > > On Thu, 2 Mar 2017, Paul Durrant wrote: > > > > > > > > This patch modifies the wrapper functions in xen_common.h t= o > use > > > > the > > > > > > > > new xendevicemodel interface if it is available along with > > > > compatibility > > > > > > > > code to use the old libxenctrl interface if it is not. > > > > > > > > > > > > > > > > Signed-off-by: Paul Durrant > > > > > > > > --- > > > > > > > > Cc: Stefano Stabellini > > > > > > > > Cc: Anthony Perard > > > > > > > > > > > > > > > > v2: > > > > > > > > - Add a compat define for xenforeignmemory_close() since th= is > is > > > > now > > > > > > > > used. > > > > > > > > --- > > > > > > > > include/hw/xen/xen_common.h | 115 > > > > > > > +++++++++++++++++++++++++++++++------------- > > > > > > > > xen-common.c | 8 +++ > > > > > > > > 2 files changed, 90 insertions(+), 33 deletions(-) > > > > > > > > > > > > > > > > diff --git a/include/hw/xen/xen_common.h > > > > > > > b/include/hw/xen/xen_common.h > > > > > > > > index 31cf25f..48444e5 100644 > > > > > > > > --- a/include/hw/xen/xen_common.h > > > > > > > > +++ b/include/hw/xen/xen_common.h > > > > > > > > @@ -9,6 +9,7 @@ > > > > > > > > #undef XC_WANT_COMPAT_EVTCHN_API > > > > > > > > #undef XC_WANT_COMPAT_GNTTAB_API > > > > > > > > #undef XC_WANT_COMPAT_MAP_FOREIGN_API > > > > > > > > +#undef XC_WANT_COMPAT_DEVICEMODEL_API > > > > > > > > > > > > > > > > #include > > > > > > > > #include > > > > > > > > @@ -26,48 +27,95 @@ extern xc_interface *xen_xc; > > > > > > > > * We don't support Xen prior to 4.2.0. > > > > > > > > */ > > > > > > > > > > > > > > > > +#if CONFIG_XEN_CTRL_INTERFACE_VERSION < 490 > > > > > > > > + > > > > > > > > +typedef xc_interface xendevicemodel_handle; > > > > > > > > + > > > > > > > > +#define xendevicemodel_open(l, f) xen_xc > > > > > > > > + > > > > > > > > +#define xendevicemodel_map_io_range_to_ioreq_server \ > > > > > > > > + xc_hvm_map_io_range_to_ioreq_server > > > > > > > > +#define > xendevicemodel_unmap_io_range_from_ioreq_server \ > > > > > > > > + xc_hvm_unmap_io_range_from_ioreq_server > > > > > > > > +#define xendevicemodel_map_pcidev_to_ioreq_server \ > > > > > > > > + xc_hvm_map_pcidev_to_ioreq_server > > > > > > > > +#define xendevicemodel_unmap_pcidev_from_ioreq_server > \ > > > > > > > > + xc_hvm_unmap_pcidev_from_ioreq_server > > > > > > > > +#define xendevicemodel_create_ioreq_server \ > > > > > > > > + xc_hvm_create_ioreq_server > > > > > > > > +#define xendevicemodel_destroy_ioreq_server \ > > > > > > > > + xc_hvm_destroy_ioreq_server > > > > > > > > +#define xendevicemodel_get_ioreq_server_info \ > > > > > > > > + xc_hvm_get_ioreq_server_info > > > > > > > > +#define xendevicemodel_set_ioreq_server_state \ > > > > > > > > + xc_hvm_set_ioreq_server_state > > > > > > > > +#define xendevicemodel_set_pci_intx_level \ > > > > > > > > + xc_hvm_set_pci_intx_level > > > > > > > > +#define xendevicemodel_set_pci_link_route \ > > > > > > > > + xc_hvm_set_pci_link_route > > > > > > > > +#define xendevicemodel_set_isa_irq_level \ > > > > > > > > + xc_hvm_set_isa_irq_level > > > > > > > > +#define xendevicemodel_inject_msi \ > > > > > > > > + xc_hvm_inject_msi > > > > > > > > +#define xendevicemodel_set_mem_type \ > > > > > > > > + xc_hvm_set_mem_type > > > > > > > > +#define xendevicemodel_track_dirty_vram \ > > > > > > > > + xc_hvm_track_dirty_vram > > > > > > > > +#define xendevicemodel_modified_memory \ > > > > > > > > + xc_hvm_modified_memory > > > > > > > > > > > > > > It does build correctly now for Xen < 4.9, however it breaks = against > > > > > > > xen-unstable: > > > > > > > > > > > > > > ERROR: configure test passed without -Werror but failed wit= h - > > > Werror. > > > > > > > This is probably a bug in the configure script. The = failing > command > > > > > > > will be at the bottom of config.log. > > > > > > > You can run configure with --disable-werror to bypas= s this > check. > > > > > > > > > > > > > > and config.log says: > > > > > > > > > > > > > > config-temp/qemu-conf.c: In function 'main': > > > > > > > config-temp/qemu-conf.c:32:3: error: implicit declaration o= f > function > > > > > > > 'xc_hvm_set_mem_type' [-Werror=3Dimplicit-function-declaratio= n] > > > > > > > config-temp/qemu-conf.c:32:3: error: nested extern declarat= ion > of > > > > > > > 'xc_hvm_set_mem_type' [-Werror=3Dnested-externs] > > > > > > > config-temp/qemu-conf.c:34:3: error: implicit declaration o= f > function > > > > > > > 'xc_hvm_inject_msi' [-Werror=3Dimplicit-function-declaration] > > > > > > > config-temp/qemu-conf.c:34:3: error: nested extern declarat= ion > of > > > > > > > 'xc_hvm_inject_msi' [-Werror=3Dnested-externs] > > > > > > > config-temp/qemu-conf.c:35:3: error: implicit declaration o= f > function > > > > > > > 'xc_hvm_create_ioreq_server' [-Werror=3Dimplicit-function- > > > declaration] > > > > > > > config-temp/qemu-conf.c:35:3: error: nested extern declarat= ion > of > > > > > > > 'xc_hvm_create_ioreq_server' [-Werror=3Dnested-externs] > > > > > > > > > > > > > > > > > > > > > With -DXC_WANT_COMPAT_DEVICEMODEL_API=3D1: > > > > > > > > > > > > > > In file included from /local/qemu- > > > > > > > upstream/include/hw/xen/xen_backend.h:4:0, > > > > > > > from hw/block/xen_disk.c:27: > > > > > > > /local/qemu-upstream/include/hw/xen/xen_common.h: In > function > > > > > > > 'xen_set_mem_type': > > > > > > > /local/qemu-upstream/include/hw/xen/xen_common.h:78:5: > error: > > > > implicit > > > > > > > declaration of function 'xc_hvm_set_mem_type' [- > Werror=3Dimplicit- > > > > function- > > > > > > > declaration] > > > > > > > > > > > > > > > > > > > Ah... Do you have Anthony's patch? > > > > > > > > > > > > > > > > > > > > http://xenbits.xen.org/gitweb/?p=3Dxen.git;a=3Dcommit;h=3D9970e98ace48574= 701 > > > > f7e2286fb67090481a3fec > > > > > > > > > > > > I suspect that may be the problem you're seeing above. > > > > > > > > > > Yes, I do have it. I am still having build troubles with v5 too. = I am > > > > > > > > I meant v3 > > > > > > > > > > > > > attaching my build test script: feel free to use it to test the b= uild of > > > > > a single QEMU branch against multiple Xen versions. It requires o= ne > Xen > > > > > repository checked out and built for each Xen version. I have jus= t > > > > > added the Xen 4.9 tests, so they might be wrong somehow, but the > > > others > > > > > are known to work. > > > > > > Your script is lacking Anthony's fix. You need to patch your 4.9 conf= igure > > > clause accordingly. I.e. you need - > > > I$(XEN_ROOT)/tools/libs/devicemodel/include and - > > > L$(XEN_ROOT)/tools/libs/devicemodel in the --extra-cflags. > > > > Sorry, I meant the latter in --extra-ldflags and I notice you do actual= ly have > that. It's just the -I that's missing. >=20 > Thank you, you are right, that fixes the build against 4.9, but there > are problems with all other versions: >=20 > [4.3, 4.4] >=20 > In file included from /local/qemu- > upstream/include/hw/xen/xen_backend.h:4:0, > from hw/block/xen_disk.c:27: > /local/qemu-upstream/include/hw/xen/xen_common.h:42:5: error: > unknown type name 'ioservid_t' > /local/qemu-upstream/include/hw/xen/xen_common.h:49:49: error: > unknown type name 'ioservid_t' > /local/qemu-upstream/include/hw/xen/xen_common.h:58:49: error: > unknown type name 'ioservid_t' > /local/qemu-upstream/include/hw/xen/xen_common.h:66:49: error: > unknown type name 'ioservid_t' > /local/qemu-upstream/include/hw/xen/xen_common.h:74:49: error: > unknown type name 'ioservid_t' > /local/qemu-upstream/include/hw/xen/xen_common.h:82:49: error: > unknown type name 'ioservid_t' > /local/qemu-upstream/include/hw/xen/xen_common.h:90:49: error: > unknown type name 'ioservid_t' > /local/qemu-upstream/include/hw/xen/xen_common.h:96:49: error: > unknown type name 'ioservid_t' > make: *** [hw/block/xen_disk.o] Error 1 >=20 That's one I'd not considered. I need to cater for an old enough xen where = even the old ioreq server API is not available. >=20 > [4.5, 4.6, 4.7, 4.8] >=20 > In file included from /local/qemu- > upstream/include/hw/xen/xen_backend.h:4:0, > from hw/block/xen_disk.c:27: > /local/qemu-upstream/include/hw/xen/xen_common.h: In function > 'xendevicemodel_destroy_ioreq_server': > /local/qemu-upstream/include/hw/xen/xen_common.h:92:5: error: implicit > declaration of function 'xc_hvm__destroy_ioreq_server' [-Werror=3Dimplici= t- > function-declaration] > /local/qemu-upstream/include/hw/xen/xen_common.h:92:5: error: nested > extern declaration of 'xc_hvm__destroy_ioreq_server' [-Werror=3Dnested- > externs] > cc1: all warnings being treated as errors That's a typo (double _) which I've now found. V4 coming up. Thanks, Paul From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Durrant Subject: Re: [PATCH v2 5/5] xen: use libxendevicemodel when available Date: Tue, 7 Mar 2017 09:51:36 +0000 Message-ID: <34e649bb86964b40bd2f5ccf63773cc2@AMSPEX02CL03.citrite.net> References: <1488452986-24501-1-git-send-email-paul.durrant@citrix.com> <1488452986-24501-6-git-send-email-paul.durrant@citrix.com> <05365905529b4fd78ff67989743a8dfb@AMSPEX02CL03.citrite.net> <1636138fa3a948229a4630fe48d5a079@AMSPEX02CL03.citrite.net> <31427779196840b3b31171ec9deda91f@AMSPEX02CL03.citrite.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1clBmN-0006nw-Gn for xen-devel@lists.xenproject.org; Tue, 07 Mar 2017 09:51:39 +0000 In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: 'Stefano Stabellini' Cc: Anthony Perard , "xen-devel@lists.xenproject.org" , "qemu-devel@nongnu.org" List-Id: xen-devel@lists.xenproject.org PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+IEZyb206IFN0ZWZhbm8gU3RhYmVsbGluaSBb bWFpbHRvOnNzdGFiZWxsaW5pQGtlcm5lbC5vcmddCj4gU2VudDogMDYgTWFyY2ggMjAxNyAxOTox NAo+IFRvOiBQYXVsIER1cnJhbnQgPFBhdWwuRHVycmFudEBjaXRyaXguY29tPgo+IENjOiAnU3Rl ZmFubyBTdGFiZWxsaW5pJyA8c3N0YWJlbGxpbmlAa2VybmVsLm9yZz47IEFudGhvbnkgUGVyYXJk Cj4gPGFudGhvbnkucGVyYXJkQGNpdHJpeC5jb20+OyB4ZW4tZGV2ZWxAbGlzdHMueGVucHJvamVj dC5vcmc7IHFlbXUtCj4gZGV2ZWxAbm9uZ251Lm9yZwo+IFN1YmplY3Q6IFJFOiBbUEFUQ0ggdjIg NS81XSB4ZW46IHVzZSBsaWJ4ZW5kZXZpY2Vtb2RlbCB3aGVuIGF2YWlsYWJsZQo+IAo+IE9uIE1v biwgNiBNYXIgMjAxNywgUGF1bCBEdXJyYW50IHdyb3RlOgo+ID4gPiAtLS0tLU9yaWdpbmFsIE1l c3NhZ2UtLS0tLQo+ID4gPiBGcm9tOiBRZW11LWRldmVsIFttYWlsdG86cWVtdS1kZXZlbC0KPiA+ ID4gYm91bmNlcytwYXVsLmR1cnJhbnQ9Y2l0cml4LmNvbUBub25nbnUub3JnXSBPbiBCZWhhbGYg T2YgUGF1bAo+IER1cnJhbnQKPiA+ID4gU2VudDogMDYgTWFyY2ggMjAxNyAwOToxNQo+ID4gPiBU bzogJ1N0ZWZhbm8gU3RhYmVsbGluaScgPHNzdGFiZWxsaW5pQGtlcm5lbC5vcmc+Cj4gPiA+IENj OiBBbnRob255IFBlcmFyZCA8YW50aG9ueS5wZXJhcmRAY2l0cml4LmNvbT47IHhlbi0KPiA+ID4g ZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmc7IHFlbXUtZGV2ZWxAbm9uZ251Lm9yZwo+ID4gPiBT dWJqZWN0OiBSZTogW1FlbXUtZGV2ZWxdIFtQQVRDSCB2MiA1LzVdIHhlbjogdXNlIGxpYnhlbmRl dmljZW1vZGVsCj4gd2hlbgo+ID4gPiBhdmFpbGFibGUKPiA+ID4KPiA+ID4gPiAtLS0tLU9yaWdp bmFsIE1lc3NhZ2UtLS0tLQo+ID4gPiA+IEZyb206IFN0ZWZhbm8gU3RhYmVsbGluaSBbbWFpbHRv OnNzdGFiZWxsaW5pQGtlcm5lbC5vcmddCj4gPiA+ID4gU2VudDogMDMgTWFyY2ggMjAxNyAyMDo0 Mwo+ID4gPiA+IFRvOiBTdGVmYW5vIFN0YWJlbGxpbmkgPHNzdGFiZWxsaW5pQGtlcm5lbC5vcmc+ Cj4gPiA+ID4gQ2M6IFBhdWwgRHVycmFudCA8UGF1bC5EdXJyYW50QGNpdHJpeC5jb20+OyB4ZW4t Cj4gPiA+IGRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnOwo+ID4gPiA+IHFlbXUtZGV2ZWxAbm9u Z251Lm9yZzsgQW50aG9ueSBQZXJhcmQKPiA8YW50aG9ueS5wZXJhcmRAY2l0cml4LmNvbT4KPiA+ ID4gPiBTdWJqZWN0OiBSRTogW1BBVENIIHYyIDUvNV0geGVuOiB1c2UgbGlieGVuZGV2aWNlbW9k ZWwgd2hlbiBhdmFpbGFibGUKPiA+ID4gPgo+ID4gPiA+IE9uIEZyaSwgMyBNYXIgMjAxNywgU3Rl ZmFubyBTdGFiZWxsaW5pIHdyb3RlOgo+ID4gPiA+ID4gT24gRnJpLCAzIE1hciAyMDE3LCBQYXVs IER1cnJhbnQgd3JvdGU6Cj4gPiA+ID4gPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0K PiA+ID4gPiA+ID4gPiBGcm9tOiBTdGVmYW5vIFN0YWJlbGxpbmkgW21haWx0bzpzc3RhYmVsbGlu aUBrZXJuZWwub3JnXQo+ID4gPiA+ID4gPiA+IFNlbnQ6IDAyIE1hcmNoIDIwMTcgMjI6NTAKPiA+ ID4gPiA+ID4gPiBUbzogUGF1bCBEdXJyYW50IDxQYXVsLkR1cnJhbnRAY2l0cml4LmNvbT4KPiA+ ID4gPiA+ID4gPiBDYzogeGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnOyBxZW11LWRldmVs QG5vbmdudS5vcmc7Cj4gPiA+IFN0ZWZhbm8KPiA+ID4gPiA+ID4gPiBTdGFiZWxsaW5pIDxzc3Rh YmVsbGluaUBrZXJuZWwub3JnPjsgQW50aG9ueSBQZXJhcmQKPiA+ID4gPiA+ID4gPiA8YW50aG9u eS5wZXJhcmRAY2l0cml4LmNvbT4KPiA+ID4gPiA+ID4gPiBTdWJqZWN0OiBSZTogW1BBVENIIHYy IDUvNV0geGVuOiB1c2UgbGlieGVuZGV2aWNlbW9kZWwgd2hlbgo+ID4gPiBhdmFpbGFibGUKPiA+ ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+IE9uIFRodSwgMiBNYXIgMjAxNywgUGF1bCBEdXJyYW50 IHdyb3RlOgo+ID4gPiA+ID4gPiA+ID4gVGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgd3JhcHBlciBm dW5jdGlvbnMgaW4geGVuX2NvbW1vbi5oIHRvCj4gdXNlCj4gPiA+ID4gdGhlCj4gPiA+ID4gPiA+ ID4gPiBuZXcgeGVuZGV2aWNlbW9kZWwgaW50ZXJmYWNlIGlmIGl0IGlzIGF2YWlsYWJsZSBhbG9u ZyB3aXRoCj4gPiA+ID4gY29tcGF0aWJpbGl0eQo+ID4gPiA+ID4gPiA+ID4gY29kZSB0byB1c2Ug dGhlIG9sZCBsaWJ4ZW5jdHJsIGludGVyZmFjZSBpZiBpdCBpcyBub3QuCj4gPiA+ID4gPiA+ID4g Pgo+ID4gPiA+ID4gPiA+ID4gU2lnbmVkLW9mZi1ieTogUGF1bCBEdXJyYW50IDxwYXVsLmR1cnJh bnRAY2l0cml4LmNvbT4KPiA+ID4gPiA+ID4gPiA+IC0tLQo+ID4gPiA+ID4gPiA+ID4gQ2M6IFN0 ZWZhbm8gU3RhYmVsbGluaSA8c3N0YWJlbGxpbmlAa2VybmVsLm9yZz4KPiA+ID4gPiA+ID4gPiA+ IENjOiBBbnRob255IFBlcmFyZCA8YW50aG9ueS5wZXJhcmRAY2l0cml4LmNvbT4KPiA+ID4gPiA+ ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiB2MjoKPiA+ID4gPiA+ID4gPiA+IC0gQWRkIGEgY29tcGF0 IGRlZmluZSBmb3IgeGVuZm9yZWlnbm1lbW9yeV9jbG9zZSgpIHNpbmNlIHRoaXMKPiBpcwo+ID4g PiA+IG5vdwo+ID4gPiA+ID4gPiA+ID4gICB1c2VkLgo+ID4gPiA+ID4gPiA+ID4gLS0tCj4gPiA+ ID4gPiA+ID4gPiAgaW5jbHVkZS9ody94ZW4veGVuX2NvbW1vbi5oIHwgMTE1Cj4gPiA+ID4gPiA+ ID4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0KPiA+ID4gPiA+ ID4gPiA+ICB4ZW4tY29tbW9uLmMgICAgICAgICAgICAgICAgfCAgIDggKysrCj4gPiA+ID4gPiA+ ID4gPiAgMiBmaWxlcyBjaGFuZ2VkLCA5MCBpbnNlcnRpb25zKCspLCAzMyBkZWxldGlvbnMoLSkK PiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ody94 ZW4veGVuX2NvbW1vbi5oCj4gPiA+ID4gPiA+ID4gYi9pbmNsdWRlL2h3L3hlbi94ZW5fY29tbW9u LmgKPiA+ID4gPiA+ID4gPiA+IGluZGV4IDMxY2YyNWYuLjQ4NDQ0ZTUgMTAwNjQ0Cj4gPiA+ID4g PiA+ID4gPiAtLS0gYS9pbmNsdWRlL2h3L3hlbi94ZW5fY29tbW9uLmgKPiA+ID4gPiA+ID4gPiA+ ICsrKyBiL2luY2x1ZGUvaHcveGVuL3hlbl9jb21tb24uaAo+ID4gPiA+ID4gPiA+ID4gQEAgLTks NiArOSw3IEBACj4gPiA+ID4gPiA+ID4gPiAgI3VuZGVmIFhDX1dBTlRfQ09NUEFUX0VWVENITl9B UEkKPiA+ID4gPiA+ID4gPiA+ICAjdW5kZWYgWENfV0FOVF9DT01QQVRfR05UVEFCX0FQSQo+ID4g PiA+ID4gPiA+ID4gICN1bmRlZiBYQ19XQU5UX0NPTVBBVF9NQVBfRk9SRUlHTl9BUEkKPiA+ID4g PiA+ID4gPiA+ICsjdW5kZWYgWENfV0FOVF9DT01QQVRfREVWSUNFTU9ERUxfQVBJCj4gPiA+ID4g PiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4gICNpbmNsdWRlIDx4ZW5jdHJsLmg+Cj4gPiA+ID4gPiA+ ID4gPiAgI2luY2x1ZGUgPHhlbnN0b3JlLmg+Cj4gPiA+ID4gPiA+ID4gPiBAQCAtMjYsNDggKzI3 LDk1IEBAIGV4dGVybiB4Y19pbnRlcmZhY2UgKnhlbl94YzsKPiA+ID4gPiA+ID4gPiA+ICAgKiBX ZSBkb24ndCBzdXBwb3J0IFhlbiBwcmlvciB0byA0LjIuMC4KPiA+ID4gPiA+ID4gPiA+ICAgKi8K PiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiArI2lmIENPTkZJR19YRU5fQ1RSTF9JTlRF UkZBQ0VfVkVSU0lPTiA8IDQ5MAo+ID4gPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiA+ID4gK3R5 cGVkZWYgeGNfaW50ZXJmYWNlIHhlbmRldmljZW1vZGVsX2hhbmRsZTsKPiA+ID4gPiA+ID4gPiA+ ICsKPiA+ID4gPiA+ID4gPiA+ICsjZGVmaW5lIHhlbmRldmljZW1vZGVsX29wZW4obCwgZikgeGVu X3hjCj4gPiA+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ID4gPiArI2RlZmluZSB4ZW5kZXZpY2Vt b2RlbF9tYXBfaW9fcmFuZ2VfdG9faW9yZXFfc2VydmVyIFwKPiA+ID4gPiA+ID4gPiA+ICsgICAg eGNfaHZtX21hcF9pb19yYW5nZV90b19pb3JlcV9zZXJ2ZXIKPiA+ID4gPiA+ID4gPiA+ICsjZGVm aW5lCj4geGVuZGV2aWNlbW9kZWxfdW5tYXBfaW9fcmFuZ2VfZnJvbV9pb3JlcV9zZXJ2ZXIgXAo+ ID4gPiA+ID4gPiA+ID4gKyAgICB4Y19odm1fdW5tYXBfaW9fcmFuZ2VfZnJvbV9pb3JlcV9zZXJ2 ZXIKPiA+ID4gPiA+ID4gPiA+ICsjZGVmaW5lIHhlbmRldmljZW1vZGVsX21hcF9wY2lkZXZfdG9f aW9yZXFfc2VydmVyIFwKPiA+ID4gPiA+ID4gPiA+ICsgICAgeGNfaHZtX21hcF9wY2lkZXZfdG9f aW9yZXFfc2VydmVyCj4gPiA+ID4gPiA+ID4gPiArI2RlZmluZSB4ZW5kZXZpY2Vtb2RlbF91bm1h cF9wY2lkZXZfZnJvbV9pb3JlcV9zZXJ2ZXIKPiBcCj4gPiA+ID4gPiA+ID4gPiArICAgIHhjX2h2 bV91bm1hcF9wY2lkZXZfZnJvbV9pb3JlcV9zZXJ2ZXIKPiA+ID4gPiA+ID4gPiA+ICsjZGVmaW5l IHhlbmRldmljZW1vZGVsX2NyZWF0ZV9pb3JlcV9zZXJ2ZXIgXAo+ID4gPiA+ID4gPiA+ID4gKyAg ICB4Y19odm1fY3JlYXRlX2lvcmVxX3NlcnZlcgo+ID4gPiA+ID4gPiA+ID4gKyNkZWZpbmUgeGVu ZGV2aWNlbW9kZWxfZGVzdHJveV9pb3JlcV9zZXJ2ZXIgXAo+ID4gPiA+ID4gPiA+ID4gKyAgICB4 Y19odm1fZGVzdHJveV9pb3JlcV9zZXJ2ZXIKPiA+ID4gPiA+ID4gPiA+ICsjZGVmaW5lIHhlbmRl dmljZW1vZGVsX2dldF9pb3JlcV9zZXJ2ZXJfaW5mbyBcCj4gPiA+ID4gPiA+ID4gPiArICAgIHhj X2h2bV9nZXRfaW9yZXFfc2VydmVyX2luZm8KPiA+ID4gPiA+ID4gPiA+ICsjZGVmaW5lIHhlbmRl dmljZW1vZGVsX3NldF9pb3JlcV9zZXJ2ZXJfc3RhdGUgXAo+ID4gPiA+ID4gPiA+ID4gKyAgICB4 Y19odm1fc2V0X2lvcmVxX3NlcnZlcl9zdGF0ZQo+ID4gPiA+ID4gPiA+ID4gKyNkZWZpbmUgeGVu ZGV2aWNlbW9kZWxfc2V0X3BjaV9pbnR4X2xldmVsIFwKPiA+ID4gPiA+ID4gPiA+ICsgICAgeGNf aHZtX3NldF9wY2lfaW50eF9sZXZlbAo+ID4gPiA+ID4gPiA+ID4gKyNkZWZpbmUgeGVuZGV2aWNl bW9kZWxfc2V0X3BjaV9saW5rX3JvdXRlIFwKPiA+ID4gPiA+ID4gPiA+ICsgICAgeGNfaHZtX3Nl dF9wY2lfbGlua19yb3V0ZQo+ID4gPiA+ID4gPiA+ID4gKyNkZWZpbmUgeGVuZGV2aWNlbW9kZWxf c2V0X2lzYV9pcnFfbGV2ZWwgXAo+ID4gPiA+ID4gPiA+ID4gKyAgICB4Y19odm1fc2V0X2lzYV9p cnFfbGV2ZWwKPiA+ID4gPiA+ID4gPiA+ICsjZGVmaW5lIHhlbmRldmljZW1vZGVsX2luamVjdF9t c2kgXAo+ID4gPiA+ID4gPiA+ID4gKyAgICB4Y19odm1faW5qZWN0X21zaQo+ID4gPiA+ID4gPiA+ ID4gKyNkZWZpbmUgeGVuZGV2aWNlbW9kZWxfc2V0X21lbV90eXBlIFwKPiA+ID4gPiA+ID4gPiA+ ICsgICAgeGNfaHZtX3NldF9tZW1fdHlwZQo+ID4gPiA+ID4gPiA+ID4gKyNkZWZpbmUgeGVuZGV2 aWNlbW9kZWxfdHJhY2tfZGlydHlfdnJhbSBcCj4gPiA+ID4gPiA+ID4gPiArICAgIHhjX2h2bV90 cmFja19kaXJ0eV92cmFtCj4gPiA+ID4gPiA+ID4gPiArI2RlZmluZSB4ZW5kZXZpY2Vtb2RlbF9t b2RpZmllZF9tZW1vcnkgXAo+ID4gPiA+ID4gPiA+ID4gKyAgICB4Y19odm1fbW9kaWZpZWRfbWVt b3J5Cj4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiBJdCBkb2VzIGJ1aWxkIGNvcnJlY3RseSBu b3cgZm9yIFhlbiA8IDQuOSwgaG93ZXZlciBpdCBicmVha3MgYWdhaW5zdAo+ID4gPiA+ID4gPiA+ IHhlbi11bnN0YWJsZToKPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ICAgRVJST1I6IGNvbmZp Z3VyZSB0ZXN0IHBhc3NlZCB3aXRob3V0IC1XZXJyb3IgYnV0IGZhaWxlZCB3aXRoIC0KPiA+ID4g V2Vycm9yLgo+ID4gPiA+ID4gPiA+ICAgICAgICAgIFRoaXMgaXMgcHJvYmFibHkgYSBidWcgaW4g dGhlIGNvbmZpZ3VyZSBzY3JpcHQuIFRoZSBmYWlsaW5nCj4gY29tbWFuZAo+ID4gPiA+ID4gPiA+ ICAgICAgICAgIHdpbGwgYmUgYXQgdGhlIGJvdHRvbSBvZiBjb25maWcubG9nLgo+ID4gPiA+ID4g PiA+ICAgICAgICAgIFlvdSBjYW4gcnVuIGNvbmZpZ3VyZSB3aXRoIC0tZGlzYWJsZS13ZXJyb3Ig dG8gYnlwYXNzIHRoaXMKPiBjaGVjay4KPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+IGFuZCBj b25maWcubG9nIHNheXM6Cj4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiAgIGNvbmZpZy10ZW1w L3FlbXUtY29uZi5jOiBJbiBmdW5jdGlvbiAnbWFpbic6Cj4gPiA+ID4gPiA+ID4gICBjb25maWct dGVtcC9xZW11LWNvbmYuYzozMjozOiBlcnJvcjogaW1wbGljaXQgZGVjbGFyYXRpb24gb2YKPiBm dW5jdGlvbgo+ID4gPiA+ID4gPiA+ICd4Y19odm1fc2V0X21lbV90eXBlJyBbLVdlcnJvcj1pbXBs aWNpdC1mdW5jdGlvbi1kZWNsYXJhdGlvbl0KPiA+ID4gPiA+ID4gPiAgIGNvbmZpZy10ZW1wL3Fl bXUtY29uZi5jOjMyOjM6IGVycm9yOiBuZXN0ZWQgZXh0ZXJuIGRlY2xhcmF0aW9uCj4gb2YKPiA+ ID4gPiA+ID4gPiAneGNfaHZtX3NldF9tZW1fdHlwZScgWy1XZXJyb3I9bmVzdGVkLWV4dGVybnNd Cj4gPiA+ID4gPiA+ID4gICBjb25maWctdGVtcC9xZW11LWNvbmYuYzozNDozOiBlcnJvcjogaW1w bGljaXQgZGVjbGFyYXRpb24gb2YKPiBmdW5jdGlvbgo+ID4gPiA+ID4gPiA+ICd4Y19odm1faW5q ZWN0X21zaScgWy1XZXJyb3I9aW1wbGljaXQtZnVuY3Rpb24tZGVjbGFyYXRpb25dCj4gPiA+ID4g PiA+ID4gICBjb25maWctdGVtcC9xZW11LWNvbmYuYzozNDozOiBlcnJvcjogbmVzdGVkIGV4dGVy biBkZWNsYXJhdGlvbgo+IG9mCj4gPiA+ID4gPiA+ID4gJ3hjX2h2bV9pbmplY3RfbXNpJyBbLVdl cnJvcj1uZXN0ZWQtZXh0ZXJuc10KPiA+ID4gPiA+ID4gPiAgIGNvbmZpZy10ZW1wL3FlbXUtY29u Zi5jOjM1OjM6IGVycm9yOiBpbXBsaWNpdCBkZWNsYXJhdGlvbiBvZgo+IGZ1bmN0aW9uCj4gPiA+ ID4gPiA+ID4gJ3hjX2h2bV9jcmVhdGVfaW9yZXFfc2VydmVyJyBbLVdlcnJvcj1pbXBsaWNpdC1m dW5jdGlvbi0KPiA+ID4gZGVjbGFyYXRpb25dCj4gPiA+ID4gPiA+ID4gICBjb25maWctdGVtcC9x ZW11LWNvbmYuYzozNTozOiBlcnJvcjogbmVzdGVkIGV4dGVybiBkZWNsYXJhdGlvbgo+IG9mCj4g PiA+ID4gPiA+ID4gJ3hjX2h2bV9jcmVhdGVfaW9yZXFfc2VydmVyJyBbLVdlcnJvcj1uZXN0ZWQt ZXh0ZXJuc10KPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gV2l0aCAt RFhDX1dBTlRfQ09NUEFUX0RFVklDRU1PREVMX0FQST0xOgo+ID4gPiA+ID4gPiA+Cj4gPiA+ID4g PiA+ID4gICBJbiBmaWxlIGluY2x1ZGVkIGZyb20gL2xvY2FsL3FlbXUtCj4gPiA+ID4gPiA+ID4g dXBzdHJlYW0vaW5jbHVkZS9ody94ZW4veGVuX2JhY2tlbmQuaDo0OjAsCj4gPiA+ID4gPiA+ID4g ICAgICAgICAgICAgICAgICAgIGZyb20gaHcvYmxvY2sveGVuX2Rpc2suYzoyNzoKPiA+ID4gPiA+ ID4gPiAgIC9sb2NhbC9xZW11LXVwc3RyZWFtL2luY2x1ZGUvaHcveGVuL3hlbl9jb21tb24uaDog SW4KPiBmdW5jdGlvbgo+ID4gPiA+ID4gPiA+ICd4ZW5fc2V0X21lbV90eXBlJzoKPiA+ID4gPiA+ ID4gPiAgIC9sb2NhbC9xZW11LXVwc3RyZWFtL2luY2x1ZGUvaHcveGVuL3hlbl9jb21tb24uaDo3 ODo1Ogo+IGVycm9yOgo+ID4gPiA+IGltcGxpY2l0Cj4gPiA+ID4gPiA+ID4gZGVjbGFyYXRpb24g b2YgZnVuY3Rpb24gJ3hjX2h2bV9zZXRfbWVtX3R5cGUnIFstCj4gV2Vycm9yPWltcGxpY2l0LQo+ ID4gPiA+IGZ1bmN0aW9uLQo+ID4gPiA+ID4gPiA+IGRlY2xhcmF0aW9uXQo+ID4gPiA+ID4gPiA+ Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IEFoLi4uIERvIHlvdSBoYXZlIEFudGhvbnkncyBwYXRj aD8KPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4KPiA+ID4gPgo+ID4gPgo+IGh0dHA6Ly94ZW5iaXRz Lnhlbi5vcmcvZ2l0d2ViLz9wPXhlbi5naXQ7YT1jb21taXQ7aD05OTcwZTk4YWNlNDg1NzQ3MDEK PiA+ID4gPiBmN2UyMjg2ZmI2NzA5MDQ4MWEzZmVjCj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IEkg c3VzcGVjdCB0aGF0IG1heSBiZSB0aGUgcHJvYmxlbSB5b3UncmUgc2VlaW5nIGFib3ZlLgo+ID4g PiA+ID4KPiA+ID4gPiA+IFllcywgSSBkbyBoYXZlIGl0LiBJIGFtIHN0aWxsIGhhdmluZyBidWls ZCB0cm91YmxlcyB3aXRoIHY1IHRvby4gSSBhbQo+ID4gPiA+Cj4gPiA+ID4gSSBtZWFudCB2Mwo+ ID4gPiA+Cj4gPiA+ID4KPiA+ID4gPiA+IGF0dGFjaGluZyBteSBidWlsZCB0ZXN0IHNjcmlwdDog ZmVlbCBmcmVlIHRvIHVzZSBpdCB0byB0ZXN0IHRoZSBidWlsZCBvZgo+ID4gPiA+ID4gYSBzaW5n bGUgUUVNVSBicmFuY2ggYWdhaW5zdCBtdWx0aXBsZSBYZW4gdmVyc2lvbnMuIEl0IHJlcXVpcmVz IG9uZQo+IFhlbgo+ID4gPiA+ID4gcmVwb3NpdG9yeSBjaGVja2VkIG91dCBhbmQgYnVpbHQgZm9y IGVhY2ggWGVuIHZlcnNpb24uIEkgaGF2ZSBqdXN0Cj4gPiA+ID4gPiBhZGRlZCB0aGUgWGVuIDQu OSB0ZXN0cywgc28gdGhleSBtaWdodCBiZSB3cm9uZyBzb21laG93LCBidXQgdGhlCj4gPiA+IG90 aGVycwo+ID4gPiA+ID4gYXJlIGtub3duIHRvIHdvcmsuCj4gPiA+Cj4gPiA+IFlvdXIgc2NyaXB0 IGlzIGxhY2tpbmcgQW50aG9ueSdzIGZpeC4gWW91IG5lZWQgdG8gcGF0Y2ggeW91ciA0LjkgY29u ZmlndXJlCj4gPiA+IGNsYXVzZSBhY2NvcmRpbmdseS4gSS5lLiB5b3UgbmVlZCAtCj4gPiA+IEkk KFhFTl9ST09UKS90b29scy9saWJzL2RldmljZW1vZGVsL2luY2x1ZGUgYW5kIC0KPiA+ID4gTCQo WEVOX1JPT1QpL3Rvb2xzL2xpYnMvZGV2aWNlbW9kZWwgaW4gdGhlIC0tZXh0cmEtY2ZsYWdzLgo+ ID4KPiA+IFNvcnJ5LCBJIG1lYW50IHRoZSBsYXR0ZXIgaW4gLS1leHRyYS1sZGZsYWdzIGFuZCBJ IG5vdGljZSB5b3UgZG8gYWN0dWFsbHkgaGF2ZQo+IHRoYXQuIEl0J3MganVzdCB0aGUgLUkgdGhh dCdzIG1pc3NpbmcuCj4gCj4gVGhhbmsgeW91LCB5b3UgYXJlIHJpZ2h0LCB0aGF0IGZpeGVzIHRo ZSBidWlsZCBhZ2FpbnN0IDQuOSwgYnV0IHRoZXJlCj4gYXJlIHByb2JsZW1zIHdpdGggYWxsIG90 aGVyIHZlcnNpb25zOgo+IAo+IFs0LjMsIDQuNF0KPiAKPiBJbiBmaWxlIGluY2x1ZGVkIGZyb20g L2xvY2FsL3FlbXUtCj4gdXBzdHJlYW0vaW5jbHVkZS9ody94ZW4veGVuX2JhY2tlbmQuaDo0OjAs Cj4gICAgICAgICAgICAgICAgICBmcm9tIGh3L2Jsb2NrL3hlbl9kaXNrLmM6Mjc6Cj4gL2xvY2Fs L3FlbXUtdXBzdHJlYW0vaW5jbHVkZS9ody94ZW4veGVuX2NvbW1vbi5oOjQyOjU6IGVycm9yOgo+ IHVua25vd24gdHlwZSBuYW1lICdpb3NlcnZpZF90Jwo+IC9sb2NhbC9xZW11LXVwc3RyZWFtL2lu Y2x1ZGUvaHcveGVuL3hlbl9jb21tb24uaDo0OTo0OTogZXJyb3I6Cj4gdW5rbm93biB0eXBlIG5h bWUgJ2lvc2VydmlkX3QnCj4gL2xvY2FsL3FlbXUtdXBzdHJlYW0vaW5jbHVkZS9ody94ZW4veGVu X2NvbW1vbi5oOjU4OjQ5OiBlcnJvcjoKPiB1bmtub3duIHR5cGUgbmFtZSAnaW9zZXJ2aWRfdCcK PiAvbG9jYWwvcWVtdS11cHN0cmVhbS9pbmNsdWRlL2h3L3hlbi94ZW5fY29tbW9uLmg6NjY6NDk6 IGVycm9yOgo+IHVua25vd24gdHlwZSBuYW1lICdpb3NlcnZpZF90Jwo+IC9sb2NhbC9xZW11LXVw c3RyZWFtL2luY2x1ZGUvaHcveGVuL3hlbl9jb21tb24uaDo3NDo0OTogZXJyb3I6Cj4gdW5rbm93 biB0eXBlIG5hbWUgJ2lvc2VydmlkX3QnCj4gL2xvY2FsL3FlbXUtdXBzdHJlYW0vaW5jbHVkZS9o dy94ZW4veGVuX2NvbW1vbi5oOjgyOjQ5OiBlcnJvcjoKPiB1bmtub3duIHR5cGUgbmFtZSAnaW9z ZXJ2aWRfdCcKPiAvbG9jYWwvcWVtdS11cHN0cmVhbS9pbmNsdWRlL2h3L3hlbi94ZW5fY29tbW9u Lmg6OTA6NDk6IGVycm9yOgo+IHVua25vd24gdHlwZSBuYW1lICdpb3NlcnZpZF90Jwo+IC9sb2Nh bC9xZW11LXVwc3RyZWFtL2luY2x1ZGUvaHcveGVuL3hlbl9jb21tb24uaDo5Njo0OTogZXJyb3I6 Cj4gdW5rbm93biB0eXBlIG5hbWUgJ2lvc2VydmlkX3QnCj4gbWFrZTogKioqIFtody9ibG9jay94 ZW5fZGlzay5vXSBFcnJvciAxCj4gCgpUaGF0J3Mgb25lIEknZCBub3QgY29uc2lkZXJlZC4gSSBu ZWVkIHRvIGNhdGVyIGZvciBhbiBvbGQgZW5vdWdoIHhlbiB3aGVyZSBldmVuIHRoZSBvbGQgaW9y ZXEgc2VydmVyIEFQSSBpcyBub3QgYXZhaWxhYmxlLgoKPiAKPiBbNC41LCA0LjYsIDQuNywgNC44 XQo+IAo+IEluIGZpbGUgaW5jbHVkZWQgZnJvbSAvbG9jYWwvcWVtdS0KPiB1cHN0cmVhbS9pbmNs dWRlL2h3L3hlbi94ZW5fYmFja2VuZC5oOjQ6MCwKPiAgICAgICAgICAgICAgICAgIGZyb20gaHcv YmxvY2sveGVuX2Rpc2suYzoyNzoKPiAvbG9jYWwvcWVtdS11cHN0cmVhbS9pbmNsdWRlL2h3L3hl bi94ZW5fY29tbW9uLmg6IEluIGZ1bmN0aW9uCj4gJ3hlbmRldmljZW1vZGVsX2Rlc3Ryb3lfaW9y ZXFfc2VydmVyJzoKPiAvbG9jYWwvcWVtdS11cHN0cmVhbS9pbmNsdWRlL2h3L3hlbi94ZW5fY29t bW9uLmg6OTI6NTogZXJyb3I6IGltcGxpY2l0Cj4gZGVjbGFyYXRpb24gb2YgZnVuY3Rpb24gJ3hj X2h2bV9fZGVzdHJveV9pb3JlcV9zZXJ2ZXInIFstV2Vycm9yPWltcGxpY2l0LQo+IGZ1bmN0aW9u LWRlY2xhcmF0aW9uXQo+IC9sb2NhbC9xZW11LXVwc3RyZWFtL2luY2x1ZGUvaHcveGVuL3hlbl9j b21tb24uaDo5Mjo1OiBlcnJvcjogbmVzdGVkCj4gZXh0ZXJuIGRlY2xhcmF0aW9uIG9mICd4Y19o dm1fX2Rlc3Ryb3lfaW9yZXFfc2VydmVyJyBbLVdlcnJvcj1uZXN0ZWQtCj4gZXh0ZXJuc10KPiBj YzE6IGFsbCB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycwoKVGhhdCdzIGEgdHlwbyAo ZG91YmxlIF8pIHdoaWNoIEkndmUgbm93IGZvdW5kLgoKVjQgY29taW5nIHVwLgoKVGhhbmtzLAoK ICBQYXVsCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K WGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xp c3RzLnhlbi5vcmcveGVuLWRldmVsCg==