From tadas at ring.lt Fri Jul 1 10:24:43 2016 Content-Type: multipart/mixed; boundary="===============6616124600410982753==" MIME-Version: 1.0 From: Tadas To: users at ovirt.org Subject: Re: [ovirt-users] Communicating with ovirt agent Date: Fri, 01 Jul 2016 17:24:39 +0300 Message-ID: <52675B8315A1475A98668728C0F72271@MOHCTP> In-Reply-To: 12474245-BCEC-4332-A427-491E51C110E6@redhat.com --===============6616124600410982753== 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. ------=3D_NextPart_000_000F_01D1D3BD.72956C90 Content-Type: text/plain; charset=3D"utf-8" Content-Transfer-Encoding: quoted-printable Thank you for reply! Im trying to send JSON-formated shutdown command to windows guest vm =3D now. Here=3DE2=3D80=3D99s small script I=3DE2=3D80=3D99ve written to test t= hat: http://pastebin.com/usAYc7Ww But still I get no reaction from ovirt agent. Surely I=3DE2=3D80=3D99m miss= ing =3D something. From: Vinzenz Feenstra=3D20 Sent: Friday, July 01, 2016 2:53 PM To: tadas(a)ring.lt=3D20 Cc: users(a)ovirt.org=3D20 Subject: Re: [ovirt-users] Communicating with ovirt agent On Jul 1, 2016, at 12:05 PM, Tadas =3D3Drote: is there any documentation o oVirt guest agent =3D3Dommands? To be more precise: i need to pass commands to =3D3DVirt guest agent =3D from hypervisor. Reading =3D3Dnfo works fine: socat =3D3Dvar/lib/libvirt/qemu/channel/target/domain-20- win7_32bit/com.redhat.serial.0 - {"applications": ["Python 2.7.12rc1", "SPICE Guest Tools", =3D3DTotal Commander (Remove or Repair)", "Python 2.7 =3D3Dywin32-216", "Microsoft .NET Framework 4.6.1", "Git =3D3Dersion 2.9.0", "WinRAR 5.40 beta 2 (32- bit)", =3D3DNotepad++"], "__name__": "applications"} {"__name__": =3D3Dhost-name", "name": "WIN7_32BIT"} {"__name__": =3D3Dos-version", "version": "Win 7=3DE2=3D80=3D9D} Every =3D3Dommand has to be send as a whole JSON object and sent as line = =3D =3D3Derminated by a \n character The =3D3Dommands available are currently not documented however. {=3DE2=3D80=3D9C__name__=3DE2=3D80=3D9D: =3DE2=3D80=3D9Cname=3DE2=3D80=3D9D= ,=3D3D=3DE2=3D80=3DA6 args} - name: =3D3Dhutdown parameters: - =3D3Dimeout: optional integer (seconds) =3D3D/span>- reboot: optional boolean - =3D3Dessage: string - =3D3Dame: refresh parameters: - =3D3DpiVersion: optiona integer=3D20 =3D3Dnbsp; this defines what information can be =3D3Dxchanged - =3D3Dame: hibernate: parameters: - state: =3D3Disk or mem (default is disk if not specified) if you need more you can look here: =3D https://github.com/oVirt/ovirt-guest-agent/blob/master/ovirt-gu=3D3Dst-agen= =3D t/OVirtAgentLogic.py#L306 at the parseCommand =3D3Dunction or just ask here :-) I'm unable to find how to send command (lets =3D3Day "shutdown") to =3D agent?. echo "shutdown" | socat =3D =3D3Dvar/lib/libvirt/qemu/channel/target/domain-20- win7_32bit/com.redhat.kvm-vdi.0 - Does=3D3Dnot seem to work Thank you for your help. _______________________________________________ Users mailing list Users(a)ovirt.org http://lists.ovirt.org/mailman/listinfo/users =3D3D ------=3D_NextPart_000_000F_01D1D3BD.72956C90 Content-Type: text/html; charset=3D"utf-8" Content-Transfer-Encoding: quoted-printable
Thank you for reply!
Im trying to send JSON-formated shutdown command to windows guest =3D vm now.=3D20 Here=3DE2=3D80=3D99s small script I=3DE2=3D80=3D99ve written to test that:<= /DIV>
http://pastebin.com/usAYc7Ww
 
But still I get no reaction from ovirt agent. Surely I=3DE2=3D80=3D99m= =3D missing=3D20 something.
 
 
Sent: Friday, July 01, 2016 2:53 PM
Subject: Re: [ovirt-users] Communicating with ovirt=3D20 agent
 
 
On Jul 1, 2016, at 12:05 PM, Tadas <tadas(a)ring.lt> =3D3Drote= :
 

is there any documentation o oVirt guest agen= t =3D =3D3Dommands?
To be more precise: i need to pass commands to =3D3DVirt= =3D guest agent=3D20 from
hypervisor.
Reading =3D3Dnfo works fine:

socat=3D20 =3D3Dvar/lib/libvirt/qemu/channel/target/domain-20-win7_32bit/com.redhat.serial.0 -

{"applications":=3D20 ["Python 2.7.12rc1", "SPICE Guest Tools", =3D3DTotal
Commander =3D (Remove or=3D20 Repair)", "Python 2.7 =3D3Dywin32-216", "Microsoft
.NET Framework =3D 4.6.1", "Git=3D20 =3D3Dersion 2.9.0", "WinRAR 5.40 beta 2 (32-
bit)", =3D3DNotepad++"], = =3D "__name__":=3D20 "applications"}
{"__name__": =3D3Dhost-name", "name":=3D20 "WIN7_32BIT"}
{"__name__": =3D3Dos-version", "version": "Win =3D 7=3DE2=3D80=3D9D}
 
Every =3D3Dommand has to be send as a whole JSON object and sent as = =3D line=3D20 =3D3Derminated by a \n character
 
The =3D3Dommands available are currently not documented =3D however.
 
{=3DE2=3D80=3D9C__name__=3DE2=3D80=3D9D: =3DE2=3D80=3D9Cname=3DE2=3D80= =3D9D,=3D3D=3DE2=3D80=3DA6 =3D args}
 
- name: =3D3Dhutdown
  parameters:
- =3D3Dimeout:=3D20 optional integer (seconds)
=3D3D/span>- reboot:=3D20 optional boolean
- =3D3Dessage:=3D20 string
 
- =3D3Dame: refresh
  parameters:
-=3D20 =3D3DpiVersion: optiona integer
        =3D3Dnbsp;   =3D this defines=3D20 what information can be =3D3Dxchanged
 
- =3D3Dame: hibernate:
  parameters:
- state:=3D20 =3D3Disk or mem (default is disk if not specified)
 
if you need more you can look here:  https://github.com/oVirt/ovirt-gue= =3D st-agent/blob/master/ovirt-gu=3D3Dst-agent/OVirtAgentLogic.py#L306=3D20 at the parseCommand =3D3Dunction
or just ask here :-)



I'm unable to find how to send command = =3D (lets =3D3Day=3D20 "shutdown") to agent?.
echo "shutdown" | socat=3D20 =3D3Dvar/lib/libvirt/qemu/channel/target/domain-20-win7_32bit/com.redhat.kvm-vdi.0  -
Does=3D3Dno= t =3D seem to=3D20 work
Thank you for your help._______________________________________________
Users=3D20 mailing list
Users(a)ovirt.orghttp://lists.ovirt.org/mailman/listinfo/users

=3D3D
<=3D /DIV> ------=3D_NextPart_000_000F_01D1D3BD.72956C90-- --===============6616124600410982753== Content-Type: multipart/alternative MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.bin" VGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KCi0tLS0tLT1fTmV4 dFBhcnRfMDAwXzAwMEZfMDFEMUQzQkQuNzI5NTZDOTAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWlu OwoJY2hhcnNldD0idXRmLTgiCkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmlu dGFibGUKClRoYW5rIHlvdSBmb3IgcmVwbHkhCkltIHRyeWluZyB0byBzZW5kIEpTT04tZm9ybWF0 ZWQgc2h1dGRvd24gY29tbWFuZCB0byB3aW5kb3dzIGd1ZXN0IHZtID0Kbm93LiBIZXJlPUUyPTgw PTk5cyBzbWFsbCBzY3JpcHQgST1FMj04MD05OXZlIHdyaXR0ZW4gdG8gdGVzdCB0aGF0OgpodHRw Oi8vcGFzdGViaW4uY29tL3VzQVljN1d3CgpCdXQgc3RpbGwgSSBnZXQgbm8gcmVhY3Rpb24gZnJv bSBvdmlydCBhZ2VudC4gU3VyZWx5IEk9RTI9ODA9OTltIG1pc3NpbmcgPQpzb21ldGhpbmcuCgoK RnJvbTogVmluemVueiBGZWVuc3RyYT0yMApTZW50OiBGcmlkYXksIEp1bHkgMDEsIDIwMTYgMjo1 MyBQTQpUbzogdGFkYXNAcmluZy5sdD0yMApDYzogdXNlcnNAb3ZpcnQub3JnPTIwClN1YmplY3Q6 IFJlOiBbb3ZpcnQtdXNlcnNdIENvbW11bmljYXRpbmcgd2l0aCBvdmlydCBhZ2VudAoKCiAgT24g SnVsIDEsIDIwMTYsIGF0IDEyOjA1IFBNLCBUYWRhcyA8dGFkYXNAcmluZy5sdD4gPTNEcm90ZToK CgogIGlzIHRoZXJlIGFueSBkb2N1bWVudGF0aW9uIG8gb1ZpcnQgZ3Vlc3QgYWdlbnQgPTNEb21t YW5kcz8KICBUbyBiZSBtb3JlIHByZWNpc2U6IGkgbmVlZCB0byBwYXNzIGNvbW1hbmRzIHRvID0z RFZpcnQgZ3Vlc3QgYWdlbnQgPQpmcm9tCiAgaHlwZXJ2aXNvci4KICBSZWFkaW5nID0zRG5mbyB3 b3JrcyBmaW5lOgoKICBzb2NhdCA9M0R2YXIvbGliL2xpYnZpcnQvcWVtdS9jaGFubmVsL3Rhcmdl dC9kb21haW4tMjAtCiAgd2luN18zMmJpdC9jb20ucmVkaGF0LnNlcmlhbC4wIC0KCiAgeyJhcHBs aWNhdGlvbnMiOiBbIlB5dGhvbiAyLjcuMTJyYzEiLCAiU1BJQ0UgR3Vlc3QgVG9vbHMiLCA9M0RU b3RhbAogIENvbW1hbmRlciAoUmVtb3ZlIG9yIFJlcGFpcikiLCAiUHl0aG9uIDIuNyA9M0R5d2lu MzItMjE2IiwgIk1pY3Jvc29mdAogIC5ORVQgRnJhbWV3b3JrIDQuNi4xIiwgIkdpdCA9M0RlcnNp b24gMi45LjAiLCAiV2luUkFSIDUuNDAgYmV0YSAyICgzMi0KICBiaXQpIiwgPTNETm90ZXBhZCsr Il0sICJfX25hbWVfXyI6ICJhcHBsaWNhdGlvbnMifQogIHsiX19uYW1lX18iOiA9M0Rob3N0LW5h bWUiLCAibmFtZSI6ICJXSU43XzMyQklUIn0KICB7Il9fbmFtZV9fIjogPTNEb3MtdmVyc2lvbiIs ICJ2ZXJzaW9uIjogIldpbiA3PUUyPTgwPTlEfQoKCkV2ZXJ5ID0zRG9tbWFuZCBoYXMgdG8gYmUg c2VuZCBhcyBhIHdob2xlIEpTT04gb2JqZWN0IGFuZCBzZW50IGFzIGxpbmUgPQo9M0Rlcm1pbmF0 ZWQgYnkgYSBcbiBjaGFyYWN0ZXIKClRoZSA9M0RvbW1hbmRzIGF2YWlsYWJsZSBhcmUgY3VycmVu dGx5IG5vdCBkb2N1bWVudGVkIGhvd2V2ZXIuCgp7PUUyPTgwPTlDX19uYW1lX189RTI9ODA9OUQ6 ID1FMj04MD05Q25hbWU9RTI9ODA9OUQsPTNEPUUyPTgwPUE2IGFyZ3N9CgotIG5hbWU6ID0zRGh1 dGRvd24KICBwYXJhbWV0ZXJzOgotID0zRGltZW91dDogb3B0aW9uYWwgaW50ZWdlciAoc2Vjb25k cykKPTNEL3NwYW4+LSByZWJvb3Q6IG9wdGlvbmFsIGJvb2xlYW4KLSA9M0Rlc3NhZ2U6IHN0cmlu ZwoKLSA9M0RhbWU6IHJlZnJlc2gKICBwYXJhbWV0ZXJzOgotID0zRHBpVmVyc2lvbjogb3B0aW9u YSBpbnRlZ2VyPTIwCiAgICAgICAgPTNEbmJzcDsgICB0aGlzIGRlZmluZXMgd2hhdCBpbmZvcm1h dGlvbiBjYW4gYmUgPTNEeGNoYW5nZWQKCi0gPTNEYW1lOiBoaWJlcm5hdGU6CiAgcGFyYW1ldGVy czoKLSBzdGF0ZTogPTNEaXNrIG9yIG1lbSAoZGVmYXVsdCBpcyBkaXNrIGlmIG5vdCBzcGVjaWZp ZWQpCgppZiB5b3UgbmVlZCBtb3JlIHlvdSBjYW4gbG9vayBoZXJlOiAgPQpodHRwczovL2dpdGh1 Yi5jb20vb1ZpcnQvb3ZpcnQtZ3Vlc3QtYWdlbnQvYmxvYi9tYXN0ZXIvb3ZpcnQtZ3U9M0RzdC1h Z2VuPQp0L09WaXJ0QWdlbnRMb2dpYy5weSNMMzA2IGF0IHRoZSBwYXJzZUNvbW1hbmQgPTNEdW5j dGlvbgpvciBqdXN0IGFzayBoZXJlIDotKQoKCgoKICBJJ20gdW5hYmxlIHRvIGZpbmQgaG93IHRv IHNlbmQgY29tbWFuZCAobGV0cyA9M0RheSAic2h1dGRvd24iKSB0byA9CmFnZW50Py4KICBlY2hv ICJzaHV0ZG93biIgfCBzb2NhdCA9Cj0zRHZhci9saWIvbGlidmlydC9xZW11L2NoYW5uZWwvdGFy Z2V0L2RvbWFpbi0yMC0KICB3aW43XzMyYml0L2NvbS5yZWRoYXQua3ZtLXZkaS4wICAtCiAgRG9l cz0zRG5vdCBzZWVtIHRvIHdvcmsKICBUaGFuayB5b3UgZm9yIHlvdXIgaGVscC4KICBfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwogIFVzZXJzIG1haWxpbmcg bGlzdAogIFVzZXJzQG92aXJ0Lm9yZwogIGh0dHA6Ly9saXN0cy5vdmlydC5vcmcvbWFpbG1hbi9s aXN0aW5mby91c2VycwoKCj0zRAotLS0tLS09X05leHRQYXJ0XzAwMF8wMDBGXzAxRDFEM0JELjcy OTU2QzkwCkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOwoJY2hhcnNldD0idXRmLTgiCkNvbnRlbnQt VHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUKCjxIVE1MPjxIRUFEPgo8TUVUQSBj b250ZW50PTNEInRleHQvaHRtbCA9M0RoYXJzZXQ9M0R1dGYtOCIgPQpodHRwLWVxdWl2PTNEQ29u dGVudC1UeXBlPjwvSEVBRD4KPEJPRFk9MjAKc3R5bGU9M0QiV09SRC1XUkFQOiBicmVhay13b3Jk OyB3ZWJraXQtbmJzcC1tb2RlOiBzcGFjZTsgPQotd2Via2l0LWxpbmUtYnJlYWs6IGFmdGVyLXdo aXRlLXNwYWNlIj0yMApkaXI9M0RsdHIgPTNEJ2xhc3M9M0QiIic+CjxESVYgZGlyPTNEbHRyPgo8 RElWIHN0eWxlPTNEIkZPTlQtU0laRTogMTJwdDsgRk9OVC1GQU1JTFk6ICdDYWxpYnJpJzsgQ09M T1I6ICMwMDAwMDAiPgo8RElWPlRoYW5rIHlvdSBmb3IgcmVwbHkhPC9ESVY+CjxESVY+SW0gdHJ5 aW5nIHRvIHNlbmQgSlNPTi1mb3JtYXRlZCBzaHV0ZG93biBjb21tYW5kIHRvIHdpbmRvd3MgZ3Vl c3QgPQp2bSBub3cuPTIwCkhlcmU9RTI9ODA9OTlzIHNtYWxsIHNjcmlwdCBJPUUyPTgwPTk5dmUg d3JpdHRlbiB0byB0ZXN0IHRoYXQ6PC9ESVY+CjxESVY+PEEgdGl0bGU9M0RodHRwOi8vcGFzdGVi aW4uY29tL3VzQVljN1d3PTIwCmhyZWY9M0QiaHR0cDovL3Bhc3RlYmluLmNvbS91c0FZYzdXdyI+ aHR0cDovL3Bhc3RlYmluLmNvbS91c0FZYzdXdzwvQT48L0Q9CklWPgo8RElWPiZuYnNwOzwvRElW Pgo8RElWPkJ1dCBzdGlsbCBJIGdldCBubyByZWFjdGlvbiBmcm9tIG92aXJ0IGFnZW50LiBTdXJl bHkgST1FMj04MD05OW0gPQptaXNzaW5nPTIwCnNvbWV0aGluZy48L0RJVj4KPERJVj4mbmJzcDs8 L0RJVj4KPERJVj0yMApzdHlsZT0zRCdGT05ULVNJWkU6IHNtYWxsOyBURVhULURFQ09SQVRJT046 IG5vbmU7IEZPTlQtRkFNSUxZOiA9CiJDYWxpYnJpIjsgRk9OVC1XRUlHSFQ6IG5vcm1hbDsgQ09M T1I6ICMwMDAwMDA7IEZPTlQtU1RZTEU6IG5vcm1hbDsgPQpESVNQTEFZOiBpbmxpbmUnPgo8RElW IHN0eWxlPTNEIkZPTlQ6IDEwcHQgdGFob21hIj4KPERJVj4mbmJzcDs8L0RJVj4KPERJViBzdHls ZT0zRCJCQUNLR1JPVU5EOiAjZjVmNWY1Ij4KPERJViBzdHlsZT0zRCJmb250LWNvbG9yOiBibGFj ayI+PEI+RnJvbTo8L0I+IDxBID0KdGl0bGU9M0R2ZmVlbnN0ckByZWRoYXQuY29tPTIwCmhyZWY9 M0QibWFpbHRvOnZmZWVuc3RyQHJlZGhhdC5jb20iPlZpbnplbnogRmVlbnN0cmE8L0E+IDwvRElW Pgo8RElWPjxCPlNlbnQ6PC9CPiBGcmlkYXksIEp1bHkgMDEsIDIwMTYgMjo1MyBQTTwvRElWPgo8 RElWPjxCPlRvOjwvQj4gPEEgdGl0bGU9M0R0YWRhc0ByaW5nLmx0PTIwCmhyZWY9M0QibWFpbHRv OnRhZGFzQHJpbmcubHQiPnRhZGFzQHJpbmcubHQ8L0E+IDwvRElWPgo8RElWPjxCPkNjOjwvQj4g PEEgdGl0bGU9M0R1c2Vyc0BvdmlydC5vcmc9MjAKaHJlZj0zRCJtYWlsdG86dXNlcnNAb3ZpcnQu b3JnIj51c2Vyc0BvdmlydC5vcmc8L0E+IDwvRElWPgo8RElWPjxCPlN1YmplY3Q6PC9CPiBSZTog W292aXJ0LXVzZXJzXSBDb21tdW5pY2F0aW5nIHdpdGggb3ZpcnQ9MjAKYWdlbnQ8L0RJVj48L0RJ Vj48L0RJVj4KPERJVj4mbmJzcDs8L0RJVj48L0RJVj4KPERJVj0yMApzdHlsZT0zRCdGT05ULVNJ WkU6IHNtYWxsOyBURVhULURFQ09SQVRJT046IG5vbmU7IEZPTlQtRkFNSUxZOiA9CiJDYWxpYnJp IjsgRk9OVC1XRUlHSFQ6IG5vcm1hbDsgQ09MT1I6ICMwMDAwMDA7IEZPTlQtU1RZTEU6IG5vcm1h bDsgPQpESVNQTEFZOiBpbmxpbmUnPgo8RElWPiZuYnNwOzwvRElWPgo8RElWPgo8QkxPQ0tRVU9U RSB0eXBlPTNEImNpdGUiPgogIDxESVYgPTNEJ2xhc3M9M0QiIic+T24gSnVsIDEsIDIwMTYsIGF0 IDEyOjA1IFBNLCBUYWRhcyAmbHQ7PEE9MjAKICA9M0QncmVmPTNEIm1haWx0bzp0YWRhc0ByaW5n Lmx0Iic+dGFkYXNAcmluZy5sdDwvQT4mZ3Q7ID0zRHJvdGU6PC9ESVY+CiAgPERJVj4mbmJzcDs8 L0RJVj4KICA8RElWPgogIDxESVYgPTNEJ2xhc3M9M0QiIic+PEJSPmlzIHRoZXJlIGFueSBkb2N1 bWVudGF0aW9uIG8gb1ZpcnQgZ3Vlc3QgYWdlbnQgPQoKICA9M0RvbW1hbmRzPzxCUj5UbyBiZSBt b3JlIHByZWNpc2U6IGkgbmVlZCB0byBwYXNzIGNvbW1hbmRzIHRvID0zRFZpcnQgPQpndWVzdCBh Z2VudD0yMAogIGZyb208QlI+aHlwZXJ2aXNvci48QlI+UmVhZGluZyA9M0RuZm8gd29ya3MgZmlu ZTo8QlI+PEJSPnNvY2F0PTIwCiAgPTNEdmFyL2xpYi9saWJ2aXJ0L3FlbXUvY2hhbm5lbC90YXJn ZXQvZG9tYWluLTIwLTxCUj0yMAogID0zRCdsYXNzPTNEIiInPndpbjdfMzJiaXQvY29tLnJlZGhh dC5zZXJpYWwuMCAtPEJSPjxCUiA9Cj0zRCdsYXNzPTNEIiInPnsiYXBwbGljYXRpb25zIjo9MjAK ICBbIlB5dGhvbiAyLjcuMTJyYzEiLCAiU1BJQ0UgR3Vlc3QgVG9vbHMiLCA9M0RUb3RhbDxCUj5D b21tYW5kZXIgPQooUmVtb3ZlIG9yPTIwCiAgUmVwYWlyKSIsICJQeXRob24gMi43ID0zRHl3aW4z Mi0yMTYiLCAiTWljcm9zb2Z0PEJSPi5ORVQgRnJhbWV3b3JrID0KNC42LjEiLCAiR2l0PTIwCiAg PTNEZXJzaW9uIDIuOS4wIiwgIldpblJBUiA1LjQwIGJldGEgMiAoMzItPEJSPmJpdCkiLCA9M0RO b3RlcGFkKysiXSwgPQoiX19uYW1lX18iOj0yMAogICJhcHBsaWNhdGlvbnMifTxCUj57Il9fbmFt ZV9fIjogPTNEaG9zdC1uYW1lIiwgIm5hbWUiOj0yMAogICJXSU43XzMyQklUIn08QlI+eyJfX25h bWVfXyI6ID0zRG9zLXZlcnNpb24iLCAidmVyc2lvbiI6ICJXaW4gPQo3PUUyPTgwPTlEfTxCUj0y MAogID0zRCdsYXNzPTNEIiInPjwvRElWPjwvRElWPjwvQkxPQ0tRVU9URT4KPERJVj4mbmJzcDs8 L0RJVj4KPERJVj5FdmVyeSA9M0RvbW1hbmQgaGFzIHRvIGJlIHNlbmQgYXMgYSB3aG9sZSBKU09O IG9iamVjdCBhbmQgc2VudCBhcyA9CmxpbmU9MjAKPTNEZXJtaW5hdGVkIGJ5IGEgXG4gY2hhcmFj dGVyPC9ESVY+CjxESVY+Jm5ic3A7PC9ESVY+CjxESVY+VGhlID0zRG9tbWFuZHMgYXZhaWxhYmxl IGFyZSBjdXJyZW50bHkgbm90IGRvY3VtZW50ZWQgPQpob3dldmVyLjwvRElWPgo8RElWPiZuYnNw OzwvRElWPgo8RElWPns9RTI9ODA9OUNfX25hbWVfXz1FMj04MD05RDogPUUyPTgwPTlDbmFtZT1F Mj04MD05RCw9M0Q9RTI9ODA9QTYgPQphcmdzfTwvRElWPgo8RElWPiZuYnNwOzwvRElWPgo8RElW Pi0gbmFtZTogPTNEaHV0ZG93bjwvRElWPgo8RElWPiZuYnNwOyBwYXJhbWV0ZXJzOjwvRElWPgo8 RElWPjxTUEFOIHN0eWxlPTNEIldISVRFLVNQQUNFOiBwcmUiID0KPTNEJ2xhc3M9M0QiQXBwbGUt dGFiLXNwYW4iJz48L1NQQU4+LSA9M0RpbWVvdXQ6PTIwCm9wdGlvbmFsIGludGVnZXIgKHNlY29u ZHMpPC9ESVY+CjxESVY+PFNQQU4gc3R5bGU9M0QiV0hJVEUtU1BBQ0U6IHByZSIgPQo9M0QnbGFz cz0zRCJBcHBsZS10YWItc3BhbiInPj0zRC9zcGFuJmd0Oy0gcmVib290Oj0yMApvcHRpb25hbCBi b29sZWFuPC9ESVY+CjxESVY+PFNQQU4gc3R5bGU9M0QiV0hJVEUtU1BBQ0U6IHByZSIgPQo9M0Qn bGFzcz0zRCJBcHBsZS10YWItc3BhbiInPjwvU1BBTj4tID0zRGVzc2FnZTo9MjAKc3RyaW5nPC9E SVY+CjxESVY+Jm5ic3A7PC9ESVY+CjxESVY+LSA9M0RhbWU6IHJlZnJlc2g8L0RJVj4KPERJVj4m bmJzcDsgcGFyYW1ldGVyczo8L0RJVj4KPERJVj48U1BBTiBzdHlsZT0zRCJXSElURS1TUEFDRTog cHJlIiA9Cj0zRCdsYXNzPTNEIkFwcGxlLXRhYi1zcGFuIic+PC9TUEFOPi09MjAKPTNEcGlWZXJz aW9uOiBvcHRpb25hIGludGVnZXIgPC9ESVY+CjxESVY+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7ID0zRG5ic3A7Jm5ic3A7Jm5ic3A7ID0KdGhpcyBkZWZpbmVzPTIw CndoYXQgaW5mb3JtYXRpb24gY2FuIGJlID0zRHhjaGFuZ2VkPC9ESVY+CjxESVY+Jm5ic3A7PC9E SVY+CjxESVY+LSA9M0RhbWU6IGhpYmVybmF0ZTo8L0RJVj4KPERJVj4mbmJzcDsgcGFyYW1ldGVy czo8L0RJVj4KPERJVj48U1BBTiBzdHlsZT0zRCJXSElURS1TUEFDRTogcHJlIiA9Cj0zRCdsYXNz PTNEIkFwcGxlLXRhYi1zcGFuIic+PC9TUEFOPi0gc3RhdGU6PTIwCj0zRGlzayBvciBtZW0gKGRl ZmF1bHQgaXMgZGlzayBpZiBub3Qgc3BlY2lmaWVkKTwvRElWPgo8RElWPiZuYnNwOzwvRElWPgo8 RElWPmlmIHlvdSBuZWVkIG1vcmUgeW91IGNhbiBsb29rIGhlcmU6Jm5ic3A7IDxBPTIwCj0zRCdy ZWY9M0QiaHR0cHM6Ly9naXRodWIuY29tL29WaXJ0L292aXJ0LWd1ZXN0LWFnZW50L2Jsb2IvbWFz dGVyL292aXJ0LWc9CnVlc3Q9M0RhZ2VudC9PVmlydEFnZW50TG9naWMucHkjTDMwNiInPmh0dHBz Oi8vZ2l0aHViLmNvbS9vVmlydC9vdmlydC1ndWU9CnN0LWFnZW50L2Jsb2IvbWFzdGVyL292aXJ0 LWd1PTNEc3QtYWdlbnQvT1ZpcnRBZ2VudExvZ2ljLnB5I0wzMDY8L0E+PTIwCmF0IHRoZSBwYXJz ZUNvbW1hbmQgPTNEdW5jdGlvbjwvRElWPgo8RElWPm9yIGp1c3QgYXNrIGhlcmUgOi0pPC9ESVY+ PEJSPgo8QkxPQ0tRVU9URSA9M0QneXBlPTNEImNpdGUiJz4KICA8RElWPgogIDxESVY+PEJSID0z RCdsYXNzPTNEIiInPjxCUj5JJ20gdW5hYmxlIHRvIGZpbmQgaG93IHRvIHNlbmQgY29tbWFuZCA9 CihsZXRzID0zRGF5PTIwCiAgInNodXRkb3duIikgdG8gYWdlbnQ/LjxCUj5lY2hvICJzaHV0ZG93 biIgfCBzb2NhdD0yMAogID0zRHZhci9saWIvbGlidmlydC9xZW11L2NoYW5uZWwvdGFyZ2V0L2Rv bWFpbi0yMC08QlI9MjAKICA9M0QnbGFzcz0zRCIiJz53aW43XzMyYml0L2NvbS5yZWRoYXQua3Zt LXZkaS4wJm5ic3A7IC08QlI+RG9lcz0zRG5vdCA9CnNlZW0gdG89MjAKICB3b3JrPEJSPlRoYW5r IHlvdSBmb3IgeW91ciBoZWxwLjxCUj0yMAogID0zRCdsYXNzPTNEIiInPl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fPEJSID0KPTNEJ2xhc3M9M0QiIic+VXNl cnM9MjAKICBtYWlsaW5nIGxpc3Q8QlI+PEEgPQo9M0QncmVmPTNEIm1haWx0bzpVc2Vyc0Bvdmly dC5vcmciJz5Vc2Vyc0BvdmlydC5vcmc8L0E+PEJSPTIwCiAgPTNEJ2xhc3M9M0QiIic+aHR0cDov L2xpc3RzLm92aXJ0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3VzZXJzPEJSPTIwCiAgPQo9M0QnbGFz cz0zRCIiJz48L0RJVj48L0RJVj48L0JMT0NLUVVPVEU+PC9ESVY+PEJSPj0zRDwvU1BBTj48L0RJ Vj48L0RJVj48PQovRElWPjwvQk9EWT48L0hUTUw+CgotLS0tLS09X05leHRQYXJ0XzAwMF8wMDBG XzAxRDFEM0JELjcyOTU2QzkwLS0KCg== --===============6616124600410982753==--