From blanchet at abes.fr Wed May 10 08:13:43 2017 Content-Type: multipart/mixed; boundary="===============6333106411674770809==" MIME-Version: 1.0 From: =?utf-8?q?Nathana=C3=ABl_Blanchet_=3Cblanchet_at_abes=2Efr=3E?= To: users at ovirt.org Subject: Re: [ovirt-users] ansible and list of vms Date: Wed, 10 May 2017 10:13:38 +0200 Message-ID: In-Reply-To: CAJCqMsVGdN9wBmB7DJ=tSd4EiM9a=mkm_0s_MG34ygSOdqoyQg@mail.gmail.com --===============6333106411674770809== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable This is a multi-part message in MIME format. --------------41E2A2E7BDDDE004731E6DAE Content-Type: text/plain; charset=3Dutf-8; format=3Dflowed Content-Transfer-Encoding: quoted-printable Thanks, I knew this python script, but I believed it was possible to do=3D20 the same with an ansible module. That's mean we need several tools to do different tasks, it is not a=3D20 very convergent way to proceed... but it is feasable. Le 10/05/2017 =3DC3=3DA0 07:56, Ondra Machacek a =3DC3=3DA9crit : > > > On Tue, May 9, 2017 at 6:52 PM, Nathana=3DC3=3DABl Blanchet > wrote: > > Hello, > > I didn't find anyway to easy list all my vms thanks to the ansible > modules... > I tried the ovirt4.py script which is able to list the whole > facts, so vms list, when the number of them is small in a test > datacenter, but in a production datacenter, I get an issue: > > File "./ovirt4.py", line 262, in > main() > File "./ovirt4.py", line 254, in main > vm_name=3D3Dargs.host, > File "./ovirt4.py", line 213, in get_data > vms[name] =3D3D get_dict_of_struct(connection, vm) > File "./ovirt4.py", line 185, in get_dict_of_struct > (device.name , [ip.address for ip in > device.ips]) for device in devices > File "./ovirt4.py", line 185, in > (device.name , [ip.address for ip in > device.ips]) for device in devices > TypeError: 'NoneType' object is not iterable > > > This error was fixed already, try to download latest ovirt4.py file. > > The other way is to use fatcs[1] module. > > [1] http://docs.ansible.com/ansible/ovirt_vms_facts_module.html > > > > What is the simpliest way to get this basic information with > sdk4??? (with sdk3 : ovirt-shell -E "list vms") > > > Please take a look at the following example: > > https://github.com/oVirt/ovirt-engine-sdk/blob/master/sdk/examples/list= =3D _vms.py > > > > > --=3D20 > Nathana=3DC3=3DABl Blanchet > > Supervision r=3DC3=3DA9seau > P=3DC3=3DB4le Infrastrutures Informatiques > 227 avenue Professeur-Jean-Louis-Viala > 34193 MONTPELLIER CEDEX 5 > T=3DC3=3DA9l. 33 (0)4 67 54 84 55 > Fax 33 (0)4 67 54 84 14 > blanchet(a)abes.fr > > _______________________________________________ > Users mailing list > Users(a)ovirt.org > http://lists.ovirt.org/mailman/listinfo/users > > > --=3D20 Nathana=3DC3=3DABl Blanchet Supervision r=3DC3=3DA9seau P=3DC3=3DB4le Infrastrutures Informatiques 227 avenue Professeur-Jean-Louis-Viala 34193 MONTPELLIER CEDEX 5 =3D09 T=3DC3=3DA9l. 33 (0)4 67 54 84 55 Fax 33 (0)4 67 54 84 14 blanchet(a)abes.fr --------------41E2A2E7BDDDE004731E6DAE Content-Type: text/html; charset=3Dutf-8 Content-Transfer-Encoding: quoted-printable

Thanks, I knew this python script, but I believed it was possible to do the same with an ansible module.

That's mean we need several tools to do different tasks, it is not a very convergent way to proceed... but it is feasable.


Le 10/05/2017 =3DC3=3DA0 07:56, Ondra = Mach=3D acek a =3DC3=3DA9crit=3DC2=3DA0:


On Tue, May 9, 2017 at 6:52 PM, Nathana=3DC3=3DABl Blanchet <blanchet(a)abes.fr> wrote= :<=3D br>
Hello,

I didn't find anyway to easy list all my vms thanks to the ansible modules...
I tried the ovirt4.py script which is able to list the whole facts, so vms list, when the number of them is small in a test datacenter, but in a production datacenter, I get an issue:

=3DC2=3DA0 File "./ovirt4.py", line 262, in <module>
=3DC2=3DA0 =3DC2=3DA0 main()
=3DC2=3DA0 File "./ovirt4.py", line 254, in main
=3DC2=3DA0 =3DC2=3DA0 vm_name=3D3Dargs.host,
=3DC2=3DA0 File "./ovirt4.py", line 213, in get_data
=3DC2=3DA0 =3DC2=3DA0 vms[name] =3D3D get_dict_of_struct(conn= ection, =3D vm)
=3DC2=3DA0 File "./ovirt4.py", line 185, in get_dict_of_struc= t<=3D br> =3DC2=3DA0 =3DC2=3DA0 (device.name, [ip.address for ip in device.ips]) for device in devices =3DC2=3DA0 File "./ovirt4.py", line 185, in <genexpr> =3DC2=3DA0 =3DC2=3DA0 (device.name, [ip.address for ip in device.ips]) for device in devices TypeError: 'NoneType' object is not iterable

This error was fixed already, try to download latest ovirt4.py file.

The other way is to use fatcs[1] module.

[1] http://docs.ansible.com/ansible/ovirt_vms_facts_module.html
=3DC2=3DA0


What is the simpliest way to get this basic information with sdk4??? (with sdk3 : ovirt-shell -E "list vms")

=3DC2=3DA0



--
Nathana=3DC3=3DABl Blanchet

Supervision r=3DC3=3DA9seau
P=3DC3=3DB4le Infrastrutures Informatiques
227 avenue Professeur-Jean-Louis-Viala
34193 MONTPELLIER CEDEX 5=3DC2=3DA0 =3DC2=3DA0 =3DC2=3DA0 =3D= C2=3DA0
T=3DC3=3DA9l. 33 (0)4 67 54 84 55
Fax=3DC2=3DA0 33 (0)4 67 54 84 14
blanchet(a)abes.fr

_______________________________________________
Users mailing list
Users(a)ovirt.org
http://lists.ovirt= .o=3D rg/mailman/listinfo/users


--=3D20
Nathana=3DC3=3DABl Blanchet

Supervision r=3DC3=3DA9seau
P=3DC3=3DB4le Infrastrutures Informatiques
227 avenue Professeur-Jean-Louis-Viala
34193 MONTPELLIER CEDEX 5 =3D09
T=3DC3=3DA9l. 33 (0)4 67 54 84 55
Fax  33 (0)4 67 54 84 14
bl=3D
anchet(a)abes.fr 
--------------41E2A2E7BDDDE004731E6DAE-- --===============6333106411674770809== Content-Type: multipart/alternative MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.bin" VGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KLS0tLS0tLS0tLS0t LS00MUUyQTJFN0JERERFMDA0NzMxRTZEQUUKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFy c2V0PXV0Zi04OyBmb3JtYXQ9Zmxvd2VkCkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3Rl ZC1wcmludGFibGUKClRoYW5rcywgSSBrbmV3IHRoaXMgcHl0aG9uIHNjcmlwdCwgYnV0IEkgYmVs aWV2ZWQgaXQgd2FzIHBvc3NpYmxlIHRvIGRvPTIwCnRoZSBzYW1lIHdpdGggYW4gYW5zaWJsZSBt b2R1bGUuCgpUaGF0J3MgbWVhbiB3ZSBuZWVkIHNldmVyYWwgdG9vbHMgdG8gZG8gZGlmZmVyZW50 IHRhc2tzLCBpdCBpcyBub3QgYT0yMAp2ZXJ5IGNvbnZlcmdlbnQgd2F5IHRvIHByb2NlZWQuLi4g YnV0IGl0IGlzIGZlYXNhYmxlLgoKCkxlIDEwLzA1LzIwMTcgPUMzPUEwIDA3OjU2LCBPbmRyYSBN YWNoYWNlayBhID1DMz1BOWNyaXQgOgo+Cj4KPiBPbiBUdWUsIE1heSA5LCAyMDE3IGF0IDY6NTIg UE0sIE5hdGhhbmE9QzM9QUJsIEJsYW5jaGV0IDxibGFuY2hldEBhYmVzLj0KZnI9MjAKPiA8bWFp bHRvOmJsYW5jaGV0QGFiZXMuZnI+PiB3cm90ZToKPgo+ICAgICBIZWxsbywKPgo+ICAgICBJIGRp ZG4ndCBmaW5kIGFueXdheSB0byBlYXN5IGxpc3QgYWxsIG15IHZtcyB0aGFua3MgdG8gdGhlIGFu c2libGUKPiAgICAgbW9kdWxlcy4uLgo+ICAgICBJIHRyaWVkIHRoZSBvdmlydDQucHkgc2NyaXB0 IHdoaWNoIGlzIGFibGUgdG8gbGlzdCB0aGUgd2hvbGUKPiAgICAgZmFjdHMsIHNvIHZtcyBsaXN0 LCB3aGVuIHRoZSBudW1iZXIgb2YgdGhlbSBpcyBzbWFsbCBpbiBhIHRlc3QKPiAgICAgZGF0YWNl bnRlciwgYnV0IGluIGEgcHJvZHVjdGlvbiBkYXRhY2VudGVyLCBJIGdldCBhbiBpc3N1ZToKPgo+ ICAgICAgIEZpbGUgIi4vb3ZpcnQ0LnB5IiwgbGluZSAyNjIsIGluIDxtb2R1bGU+Cj4gICAgICAg ICBtYWluKCkKPiAgICAgICBGaWxlICIuL292aXJ0NC5weSIsIGxpbmUgMjU0LCBpbiBtYWluCj4g ICAgICAgICB2bV9uYW1lPTNEYXJncy5ob3N0LAo+ICAgICAgIEZpbGUgIi4vb3ZpcnQ0LnB5Iiwg bGluZSAyMTMsIGluIGdldF9kYXRhCj4gICAgICAgICB2bXNbbmFtZV0gPTNEIGdldF9kaWN0X29m X3N0cnVjdChjb25uZWN0aW9uLCB2bSkKPiAgICAgICBGaWxlICIuL292aXJ0NC5weSIsIGxpbmUg MTg1LCBpbiBnZXRfZGljdF9vZl9zdHJ1Y3QKPiAgICAgICAgIChkZXZpY2UubmFtZSA8aHR0cDov L2RldmljZS5uYW1lPiwgW2lwLmFkZHJlc3MgZm9yIGlwIGluCj4gICAgIGRldmljZS5pcHNdKSBm b3IgZGV2aWNlIGluIGRldmljZXMKPiAgICAgICBGaWxlICIuL292aXJ0NC5weSIsIGxpbmUgMTg1 LCBpbiA8Z2VuZXhwcj4KPiAgICAgICAgIChkZXZpY2UubmFtZSA8aHR0cDovL2RldmljZS5uYW1l PiwgW2lwLmFkZHJlc3MgZm9yIGlwIGluCj4gICAgIGRldmljZS5pcHNdKSBmb3IgZGV2aWNlIGlu IGRldmljZXMKPiAgICAgVHlwZUVycm9yOiAnTm9uZVR5cGUnIG9iamVjdCBpcyBub3QgaXRlcmFi bGUKPgo+Cj4gVGhpcyBlcnJvciB3YXMgZml4ZWQgYWxyZWFkeSwgdHJ5IHRvIGRvd25sb2FkIGxh dGVzdCBvdmlydDQucHkgZmlsZS4KPgo+IFRoZSBvdGhlciB3YXkgaXMgdG8gdXNlIGZhdGNzWzFd IG1vZHVsZS4KPgo+IFsxXSBodHRwOi8vZG9jcy5hbnNpYmxlLmNvbS9hbnNpYmxlL292aXJ0X3Zt c19mYWN0c19tb2R1bGUuaHRtbAo+Cj4KPgo+ICAgICBXaGF0IGlzIHRoZSBzaW1wbGllc3Qgd2F5 IHRvIGdldCB0aGlzIGJhc2ljIGluZm9ybWF0aW9uIHdpdGgKPiAgICAgc2RrND8/PyAod2l0aCBz ZGszIDogb3ZpcnQtc2hlbGwgLUUgImxpc3Qgdm1zIikKPgo+Cj4gUGxlYXNlIHRha2UgYSBsb29r IGF0IHRoZSBmb2xsb3dpbmcgZXhhbXBsZToKPgo+IGh0dHBzOi8vZ2l0aHViLmNvbS9vVmlydC9v dmlydC1lbmdpbmUtc2RrL2Jsb2IvbWFzdGVyL3Nkay9leGFtcGxlcy9saXN0PQpfdm1zLnB5Cj4K Pgo+Cj4KPiAgICAgLS09MjAKPiAgICAgTmF0aGFuYT1DMz1BQmwgQmxhbmNoZXQKPgo+ICAgICBT dXBlcnZpc2lvbiByPUMzPUE5c2VhdQo+ICAgICBQPUMzPUI0bGUgSW5mcmFzdHJ1dHVyZXMgSW5m b3JtYXRpcXVlcwo+ICAgICAyMjcgYXZlbnVlIFByb2Zlc3NldXItSmVhbi1Mb3Vpcy1WaWFsYQo+ ICAgICAzNDE5MyBNT05UUEVMTElFUiBDRURFWCA1Cj4gICAgIFQ9QzM9QTlsLiAzMyAoMCk0IDY3 IDU0IDg0IDU1Cj4gICAgIEZheCAgMzMgKDApNCA2NyA1NCA4NCAxNAo+ICAgICBibGFuY2hldEBh YmVzLmZyIDxtYWlsdG86YmxhbmNoZXRAYWJlcy5mcj4KPgo+ICAgICBfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+ICAgICBVc2VycyBtYWlsaW5nIGxpc3QK PiAgICAgVXNlcnNAb3ZpcnQub3JnIDxtYWlsdG86VXNlcnNAb3ZpcnQub3JnPgo+ICAgICBodHRw Oi8vbGlzdHMub3ZpcnQub3JnL21haWxtYW4vbGlzdGluZm8vdXNlcnMKPiAgICAgPGh0dHA6Ly9s aXN0cy5vdmlydC5vcmcvbWFpbG1hbi9saXN0aW5mby91c2Vycz4KPgo+CgotLT0yMApOYXRoYW5h PUMzPUFCbCBCbGFuY2hldAoKU3VwZXJ2aXNpb24gcj1DMz1BOXNlYXUKUD1DMz1CNGxlIEluZnJh c3RydXR1cmVzIEluZm9ybWF0aXF1ZXMKMjI3IGF2ZW51ZSBQcm9mZXNzZXVyLUplYW4tTG91aXMt VmlhbGEKMzQxOTMgTU9OVFBFTExJRVIgQ0VERVggNSA9MDkKVD1DMz1BOWwuIDMzICgwKTQgNjcg NTQgODQgNTUKRmF4ICAzMyAoMCk0IDY3IDU0IDg0IDE0CmJsYW5jaGV0QGFiZXMuZnIKCgotLS0t LS0tLS0tLS0tLTQxRTJBMkU3QkREREUwMDQ3MzFFNkRBRQpDb250ZW50LVR5cGU6IHRleHQvaHRt bDsgY2hhcnNldD11dGYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBxdW90ZWQtcHJpbnRh YmxlCgo8aHRtbD4KICA8aGVhZD4KICAgIDxtZXRhIGNvbnRlbnQ9M0QidGV4dC9odG1sOyBjaGFy c2V0PTNEdXRmLTgiIGh0dHAtZXF1aXY9M0QiQ29udGVudC1UeT0KcGUiPgogIDwvaGVhZD4KICA8 Ym9keSBiZ2NvbG9yPTNEIiNGRkZGRkYiIHRleHQ9M0QiIzAwMDAwMCI+CiAgICA8cD5UaGFua3Ms IEkga25ldyB0aGlzIHB5dGhvbiBzY3JpcHQsIGJ1dCBJIGJlbGlldmVkIGl0IHdhcyBwb3NzaWJs ZQogICAgICB0byBkbyB0aGUgc2FtZSB3aXRoIGFuIGFuc2libGUgbW9kdWxlLjwvcD4KICAgIDxw PlRoYXQncyBtZWFuIHdlIG5lZWQgc2V2ZXJhbCB0b29scyB0byBkbyBkaWZmZXJlbnQgdGFza3Ms IGl0IGlzCiAgICAgIG5vdCBhIHZlcnkgY29udmVyZ2VudCB3YXkgdG8gcHJvY2VlZC4uLiBidXQg aXQgaXMgZmVhc2FibGUuPGJyPgogICAgPC9wPgogICAgPGJyPgogICAgPGRpdiBjbGFzcz0zRCJt b3otY2l0ZS1wcmVmaXgiPkxlIDEwLzA1LzIwMTcgPUMzPUEwIDA3OjU2LCBPbmRyYSBNYWNoPQph Y2VrIGEKICAgICAgPUMzPUE5Y3JpdD1DMj1BMDo8YnI+CiAgICA8L2Rpdj4KICAgIDxibG9ja3F1 b3RlCmNpdGU9M0QibWlkOkNBSkNxTXNWR2ROOXdCbUI3REo9M0R0U2Q0RWlNOWE9M0Rta21fMHNf TUczNHlnU09kcW95UWdAbWFpbC49CmdtYWlsLmNvbSIKICAgICAgdHlwZT0zRCJjaXRlIj4KICAg ICAgPGRpdiBkaXI9M0QibHRyIj48YnI+CiAgICAgICAgPGRpdiBjbGFzcz0zRCJnbWFpbF9leHRy YSI+PGJyPgogICAgICAgICAgPGRpdiBjbGFzcz0zRCJnbWFpbF9xdW90ZSI+T24gVHVlLCBNYXkg OSwgMjAxNyBhdCA2OjUyIFBNLAogICAgICAgICAgICBOYXRoYW5hPUMzPUFCbCBCbGFuY2hldCA8 c3BhbiBkaXI9M0QibHRyIj4mbHQ7PGEKICAgICAgICAgICAgICAgIG1vei1kby1ub3Qtc2VuZD0z RCJ0cnVlIiBocmVmPTNEIm1haWx0bzpibGFuY2hldEBhYmVzLmZyIgogICAgICAgICAgICAgICAg dGFyZ2V0PTNEIl9ibGFuayI+YmxhbmNoZXRAYWJlcy5mcjwvYT4mZ3Q7PC9zcGFuPiB3cm90ZTo8 PQpicj4KICAgICAgICAgICAgPGJsb2NrcXVvdGUgY2xhc3M9M0QiZ21haWxfcXVvdGUiIHN0eWxl PTNEIm1hcmdpbjowcHggMHB4IDBweAogICAgICAgICAgICAgIDAuOGV4O2JvcmRlci1sZWZ0OjFw eCBzb2xpZAogICAgICAgICAgICAgIHJnYigyMDQsMjA0LDIwNCk7cGFkZGluZy1sZWZ0OjFleCI+ SGVsbG8sPGJyPgogICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICBJIGRpZG4ndCBmaW5k IGFueXdheSB0byBlYXN5IGxpc3QgYWxsIG15IHZtcyB0aGFua3MgdG8gdGhlCiAgICAgICAgICAg ICAgYW5zaWJsZSBtb2R1bGVzLi4uPGJyPgogICAgICAgICAgICAgIEkgdHJpZWQgdGhlIG92aXJ0 NC5weSBzY3JpcHQgd2hpY2ggaXMgYWJsZSB0byBsaXN0IHRoZQogICAgICAgICAgICAgIHdob2xl IGZhY3RzLCBzbyB2bXMgbGlzdCwgd2hlbiB0aGUgbnVtYmVyIG9mIHRoZW0gaXMgc21hbGwKICAg ICAgICAgICAgICBpbiBhIHRlc3QgZGF0YWNlbnRlciwgYnV0IGluIGEgcHJvZHVjdGlvbiBkYXRh Y2VudGVyLCBJCiAgICAgICAgICAgICAgZ2V0IGFuIGlzc3VlOjxicj4KICAgICAgICAgICAgICA8 YnI+CiAgICAgICAgICAgICAgPUMyPUEwIEZpbGUgIi4vb3ZpcnQ0LnB5IiwgbGluZSAyNjIsIGlu ICZsdDttb2R1bGUmZ3Q7PGJyPgogICAgICAgICAgICAgID1DMj1BMCA9QzI9QTAgbWFpbigpPGJy PgogICAgICAgICAgICAgID1DMj1BMCBGaWxlICIuL292aXJ0NC5weSIsIGxpbmUgMjU0LCBpbiBt YWluPGJyPgogICAgICAgICAgICAgID1DMj1BMCA9QzI9QTAgdm1fbmFtZT0zRGFyZ3MuaG9zdCw8 YnI+CiAgICAgICAgICAgICAgPUMyPUEwIEZpbGUgIi4vb3ZpcnQ0LnB5IiwgbGluZSAyMTMsIGlu IGdldF9kYXRhPGJyPgogICAgICAgICAgICAgID1DMj1BMCA9QzI9QTAgdm1zW25hbWVdID0zRCBn ZXRfZGljdF9vZl9zdHJ1Y3QoY29ubmVjdGlvbiwgPQp2bSk8YnI+CiAgICAgICAgICAgICAgPUMy PUEwIEZpbGUgIi4vb3ZpcnQ0LnB5IiwgbGluZSAxODUsIGluIGdldF9kaWN0X29mX3N0cnVjdDw9 CmJyPgogICAgICAgICAgICAgID1DMj1BMCA9QzI9QTAgKDxhIG1vei1kby1ub3Qtc2VuZD0zRCJ0 cnVlIiBocmVmPTNEImh0dHA6Ly9kPQpldmljZS5uYW1lIgogICAgICAgICAgICAgICAgcmVsPTNE Im5vcmVmZXJyZXIiIHRhcmdldD0zRCJfYmxhbmsiPmRldmljZS5uYW1lPC9hPiwKICAgICAgICAg ICAgICBbaXAuYWRkcmVzcyBmb3IgaXAgaW4gZGV2aWNlLmlwc10pIGZvciBkZXZpY2UgaW4gZGV2 aWNlczxicj0KPgogICAgICAgICAgICAgID1DMj1BMCBGaWxlICIuL292aXJ0NC5weSIsIGxpbmUg MTg1LCBpbiAmbHQ7Z2VuZXhwciZndDs8YnI+CiAgICAgICAgICAgICAgPUMyPUEwID1DMj1BMCAo PGEgbW96LWRvLW5vdC1zZW5kPTNEInRydWUiIGhyZWY9M0QiaHR0cDovL2Q9CmV2aWNlLm5hbWUi CiAgICAgICAgICAgICAgICByZWw9M0Qibm9yZWZlcnJlciIgdGFyZ2V0PTNEIl9ibGFuayI+ZGV2 aWNlLm5hbWU8L2E+LAogICAgICAgICAgICAgIFtpcC5hZGRyZXNzIGZvciBpcCBpbiBkZXZpY2Uu aXBzXSkgZm9yIGRldmljZSBpbiBkZXZpY2VzPGJyPQo+CiAgICAgICAgICAgICAgVHlwZUVycm9y OiAnTm9uZVR5cGUnIG9iamVjdCBpcyBub3QgaXRlcmFibGU8YnI+CiAgICAgICAgICAgIDwvYmxv Y2txdW90ZT4KICAgICAgICAgICAgPGRpdj48YnI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAg ICAgICA8ZGl2PlRoaXMgZXJyb3Igd2FzIGZpeGVkIGFscmVhZHksIHRyeSB0byBkb3dubG9hZCBs YXRlc3QKICAgICAgICAgICAgICBvdmlydDQucHkgZmlsZS48YnI+CiAgICAgICAgICAgICAgPGJy PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdj5UaGUgb3RoZXIgd2F5IGlzIHRv IHVzZSBmYXRjc1sxXSBtb2R1bGUuPGJyPgogICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAg ICBbMV0gPGEgbW96LWRvLW5vdC1zZW5kPTNEInRydWUiCiAgICAgICAgICAgICAgICBocmVmPTNE Imh0dHA6Ly9kb2NzLmFuc2libGUuY29tL2Fuc2libGUvb3ZpcnRfdm1zX2ZhY3RzX209Cm9kdWxl Lmh0bWwiPmh0dHA6Ly9kb2NzLmFuc2libGUuY29tL2Fuc2libGUvb3ZpcnRfdm1zX2ZhY3RzX21v ZHVsZS5odG1sPC89CmE+PGJyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdj49 QzI9QTA8L2Rpdj4KICAgICAgICAgICAgPGJsb2NrcXVvdGUgY2xhc3M9M0QiZ21haWxfcXVvdGUi IHN0eWxlPTNEIm1hcmdpbjowcHggMHB4IDBweAogICAgICAgICAgICAgIDAuOGV4O2JvcmRlci1s ZWZ0OjFweCBzb2xpZAogICAgICAgICAgICAgIHJnYigyMDQsMjA0LDIwNCk7cGFkZGluZy1sZWZ0 OjFleCI+CiAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAg ICBXaGF0IGlzIHRoZSBzaW1wbGllc3Qgd2F5IHRvIGdldCB0aGlzIGJhc2ljIGluZm9ybWF0aW9u CiAgICAgICAgICAgICAgd2l0aCBzZGs0Pz8/ICh3aXRoIHNkazMgOiBvdmlydC1zaGVsbCAtRSAi bGlzdCB2bXMiKTxicj4KICAgICAgICAgICAgPC9ibG9ja3F1b3RlPgogICAgICAgICAgICA8ZGl2 Pjxicj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXY+UGxlYXNlIHRha2UgYSBs b29rIGF0IHRoZSBmb2xsb3dpbmcgZXhhbXBsZTo8YnI+CiAgICAgICAgICAgICAgPGJyPgogICAg ICAgICAgICAgID1DMj1BMDxhIG1vei1kby1ub3Qtc2VuZD0zRCJ0cnVlIgpocmVmPTNEImh0dHBz Oi8vZ2l0aHViLmNvbS9vVmlydC9vdmlydC1lbmdpbmUtc2RrL2Jsb2IvbWFzdGVyL3Nkay9leGFt cGxlPQpzL2xpc3Rfdm1zLnB5Ij5odHRwczovL2dpdGh1Yi5jb20vb1ZpcnQvb3ZpcnQtZW5naW5l LXNkay9ibG9iL21hc3Rlci9zZGsvPQpleGFtcGxlcy9saXN0X3Ztcy5weTwvYT48YnI+CiAgICAg ICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2Pj1DMj1BMDwvZGl2PgogICAgICAgICAgICA8 YmxvY2txdW90ZSBjbGFzcz0zRCJnbWFpbF9xdW90ZSIgc3R5bGU9M0QibWFyZ2luOjBweCAwcHgg MHB4CiAgICAgICAgICAgICAgMC44ZXg7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkCiAgICAgICAgICAg ICAgcmdiKDIwNCwyMDQsMjA0KTtwYWRkaW5nLWxlZnQ6MWV4Ij4KICAgICAgICAgICAgICA8YnI+ CiAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAtLSA8 YnI+CiAgICAgICAgICAgICAgTmF0aGFuYT1DMz1BQmwgQmxhbmNoZXQ8YnI+CiAgICAgICAgICAg ICAgPGJyPgogICAgICAgICAgICAgIFN1cGVydmlzaW9uIHI9QzM9QTlzZWF1PGJyPgogICAgICAg ICAgICAgIFA9QzM9QjRsZSBJbmZyYXN0cnV0dXJlcyBJbmZvcm1hdGlxdWVzPGJyPgogICAgICAg ICAgICAgIDIyNyBhdmVudWUgUHJvZmVzc2V1ci1KZWFuLUxvdWlzLVZpYWxhPGJyPgogICAgICAg ICAgICAgIDM0MTkzIE1PTlRQRUxMSUVSIENFREVYIDU9QzI9QTAgPUMyPUEwID1DMj1BMCA9QzI9 QTA8YnI+CiAgICAgICAgICAgICAgVD1DMz1BOWwuIDMzICgwKTQgNjcgNTQgODQgNTU8YnI+CiAg ICAgICAgICAgICAgRmF4PUMyPUEwIDMzICgwKTQgNjcgNTQgODQgMTQ8YnI+CiAgICAgICAgICAg ICAgPGEgbW96LWRvLW5vdC1zZW5kPTNEInRydWUiIGhyZWY9M0QibWFpbHRvOmJsYW5jaGV0QGFi ZXMuZnI9CiIKICAgICAgICAgICAgICAgIHRhcmdldD0zRCJfYmxhbmsiPmJsYW5jaGV0QGFiZXMu ZnI8L2E+PGJyPgogICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICBfX19fX19fX19fX19f X19fX19fX19fX19fX19fX188d2JyPl9fX19fX19fX19fX19fX19fPGJyPgogICAgICAgICAgICAg IFVzZXJzIG1haWxpbmcgbGlzdDxicj4KICAgICAgICAgICAgICA8YSBtb3otZG8tbm90LXNlbmQ9 M0QidHJ1ZSIgaHJlZj0zRCJtYWlsdG86VXNlcnNAb3ZpcnQub3JnIgogICAgICAgICAgICAgICAg dGFyZ2V0PTNEIl9ibGFuayI+VXNlcnNAb3ZpcnQub3JnPC9hPjxicj4KICAgICAgICAgICAgICA8 YSBtb3otZG8tbm90LXNlbmQ9M0QidHJ1ZSIKICAgICAgICAgICAgICAgIGhyZWY9M0QiaHR0cDov L2xpc3RzLm92aXJ0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3VzZXJzIgogICAgICAgICAgICAgICAg cmVsPTNEIm5vcmVmZXJyZXIiIHRhcmdldD0zRCJfYmxhbmsiPmh0dHA6Ly9saXN0cy5vdmlydC5v PQpyZy9tYWlsbWFuPHdicj4vbGlzdGluZm8vdXNlcnM8L2E+PGJyPgogICAgICAgICAgICA8L2Js b2NrcXVvdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxicj4KICAgICAgICA8L2Rpdj4K ICAgICAgPC9kaXY+CiAgICA8L2Jsb2NrcXVvdGU+CiAgICA8YnI+CiAgICA8cHJlIGNsYXNzPTNE Im1vei1zaWduYXR1cmUiIGNvbHM9M0QiNzIiPi0tPTIwCk5hdGhhbmE9QzM9QUJsIEJsYW5jaGV0 CgpTdXBlcnZpc2lvbiByPUMzPUE5c2VhdQpQPUMzPUI0bGUgSW5mcmFzdHJ1dHVyZXMgSW5mb3Jt YXRpcXVlcwoyMjcgYXZlbnVlIFByb2Zlc3NldXItSmVhbi1Mb3Vpcy1WaWFsYQozNDE5MyBNT05U UEVMTElFUiBDRURFWCA1ID0wOQpUPUMzPUE5bC4gMzMgKDApNCA2NyA1NCA4NCA1NQpGYXggIDMz ICgwKTQgNjcgNTQgODQgMTQKPGEgY2xhc3M9M0QibW96LXR4dC1saW5rLWFiYnJldmlhdGVkIiBo cmVmPTNEIm1haWx0bzpibGFuY2hldEBhYmVzLmZyIj5ibD0KYW5jaGV0QGFiZXMuZnI8L2E+IDwv cHJlPgogIDwvYm9keT4KPC9odG1sPgoKLS0tLS0tLS0tLS0tLS00MUUyQTJFN0JERERFMDA0NzMx RTZEQUUtLQo= --===============6333106411674770809==--