From wlbleaboy at 126.com Thu May 2 00:29:01 2013 Content-Type: multipart/mixed; boundary="===============5752050905184791126==" MIME-Version: 1.0 From: leaboy at 126 To: devel at ovirt.org Subject: [Engine-devel] about ovirt-engine-sdk Date: Thu, 02 May 2013 10:52:33 +0800 Message-ID: <000a01ce46e0$195dcf40$4c196dc0$@com> --===============5752050905184791126== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable =C3=95=C3=A2=C3=8A=C3=87=C3=92=C2=BB=C2=B7=C3=A2 MIME =C5=BE=C3=B1=C3=8A=C5= =93=C2=B5=C3=84=C2=B6=C3=A0=C2=B2=C2=BF=C2=B7=C3=96=C3=93=C3=8A=C5=92=C3=BE= =C2=A1=C2=A3 ------=3D_NextPart_000_000B_01CE4723.27810F40 Content-Type: text/plain; charset=3D"us-ascii" Content-Transfer-Encoding: 7bit Hi,all How can I use overt-engine-sdk in the python environment below python2.7, For example, when I use it in python 2.6.5 like thus: = percy(a)percy-desktop:~/thtf-client$ python --version Python 2.6.5 percy(a)percy-desktop:~/thtf-client$ python Python 2.6.5 (r265:79063, Oct 1 2012, 22:04:36) = [GCC 4.4.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> from ovirtsdk.api import API >>> from ovirtsdk.xml import params >>> api =3D API('http://192.168.1.181', 'admin(a)internal', '111111', None, None, '~/.spicec/ca.crt', None, None, True) Traceback (most recent call last): File "", line 1, in File "ovirtsdk/api.py", line 107, in __init__ url=3D'/api') File "ovirtsdk/infrastructure/proxy.py", line 129, in request last=3Dlast) File "ovirtsdk/infrastructure/proxy.py", line 171, in __doRequest return params.parseString(response_body) if response_body is not None and response_body is not '' \ File "ovirtsdk/xml/params.py", line 21229, in parseString rootObj.build(rootNode) File "ovirtsdk/xml/params.py", line 20304, in build self.buildAttributes(node, node.attrib, []) File "ovirtsdk/xml/params.py", line 20309, in buildAttributes super(API, self).buildAttributes(node, attrs, already_processed) File "ovirtsdk/xml/params.py", line 4160, in buildAttributes value =3D find_attr_value_('xsi:type', node) File "ovirtsdk/xml/params.py", line 316, in find_attr_value_ namespace =3D node.nsmap.get(prefix) AttributeError: nsmap >>> = = = But, when I use it in python 2.7.3, it's ok = leaboy(a)leaboy:~/workspace/thtf-client$ python --version Python 2.7.3 leaboy(a)leaboy:~/workspace/thtf-client$ python Python 2.7.3 (default, Aug 1 2012, 05:16:07) = [GCC 4.6.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> from ovirtsdk.api import API >>> from ovirtsdk.xml import params >>> api =3D API('http://192.168.1.181', 'admin(a)internal', '111111', None, None, '~/.spicec/ca.crt', None, True) >>> = ------=3D_NextPart_000_000B_01CE4723.27810F40 Content-Type: text/html; charset=3D"us-ascii" Content-Transfer-Encoding: quoted-printable

Hi,all

         How can I use overt-engine-sdk in the python environment below =3D python2.7,

For example, when I use it in = =3D python 2.6.5 like thus:

 

percy(a)percy-desktop:~/thtf-client$ python --version

Python =3D 2.6.5

percy(a)percy-desktop:~/thtf-client$ =3D python

Python 2.6.5 (r265:79063, =3D Oct  1 2012, 22:04:36)

[GCC 4.4.3] on =3D linux2

Type "help", "copyright", "credits" or "license" for =3D more information.

>>> from ovirtsdk.api = =3D import API

>>> from ovirtsdk.xml = =3D import params

>>> api =3D3D API('http://192.168.1.181', 'admin(a)internal', '111111', None, None, =3D '~/.spicec/ca.crt', None, None, True)

Traceback (most recent call = =3D last):

  File =3D "<stdin>", line 1, in <module>

  File =3D "ovirtsdk/api.py", line 107, in __init__

    =3D url=3D3D'/api')

  File "ovirtsdk/infrastructure/proxy.py", line 129, in =3D request

    =3D last=3D3Dlast)

  File "ovirtsdk/infrastructure/proxy.py", line 171, in =3D __doRequest

    return params.parseString(response_body) if response_body is not None and response_body is not '' \

  File "ovirtsdk/xml/params.py", line 21229, in =3D parseString

    rootObj.build(rootNode)

  File "ovirtsdk/xml/params.py", line 20304, in =3D build

    self.buildAttributes(node, node.attrib, [])

  File "ovirtsdk/xml/params.py", line 20309, in =3D buildAttributes

    super(API, self).buildAttributes(node, attrs, =3D already_processed)

  File "ovirtsdk/xml/params.py", line 4160, in =3D buildAttributes

    value =3D= 3D find_attr_value_('xsi:type', node)

  File =3D "ovirtsdk/xml/params.py", line 316, in find_attr_value_

    namespace= =3D =3D3D node.nsmap.get(prefix)

AttributeError: =3D nsmap

>>> 

 

 

But, when I use it in python = =3D 2.7.3, it’s ok

 

leaboy(a)leaboy:~/workspace/thtf-client$ python --version

Python =3D 2.7.3

leaboy(a)leaboy:~/workspace/thtf-client$ python

Python 2.7.3 (default, Aug = ; =3D 1 2012, 05:16:07)

[GCC 4.6.3] on =3D linux2

Type "help", "copyright", "credits" or "license" for =3D more information.

>>> from ovirtsdk.api = =3D import API

>>> from ovirtsdk.xml = =3D import params

>>> api =3D3D API('http://192.168.1.181', 'admin(a)internal', '111111', None, None, '~/.spicec/ca.crt', None, True)

>>> 

------=3D_NextPart_000_000B_01CE4723.27810F40-- --===============5752050905184791126== Content-Type: multipart/alternative MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.bin" 1eLKx9K7t+IgTUlNRSC48cq9tcS24LK/t9bTyrz+oaMKCi0tLS0tLT1fTmV4dFBhcnRfMDAwXzAw MEJfMDFDRTQ3MjMuMjc4MTBGNDAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOwoJY2hhcnNldD0i dXMtYXNjaWkiCkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKCkhpLGFsbAoKICAgICAg ICAgSG93IGNhbiBJIHVzZSBvdmVydC1lbmdpbmUtc2RrIGluIHRoZSBweXRob24gZW52aXJvbm1l bnQgYmVsb3cKcHl0aG9uMi43LAoKRm9yIGV4YW1wbGUsIHdoZW4gSSB1c2UgaXQgaW4gcHl0aG9u IDIuNi41IGxpa2UgdGh1czoKCiAKCnBlcmN5QHBlcmN5LWRlc2t0b3A6fi90aHRmLWNsaWVudCQg cHl0aG9uIC0tdmVyc2lvbgoKUHl0aG9uIDIuNi41CgpwZXJjeUBwZXJjeS1kZXNrdG9wOn4vdGh0 Zi1jbGllbnQkIHB5dGhvbgoKUHl0aG9uIDIuNi41IChyMjY1Ojc5MDYzLCBPY3QgIDEgMjAxMiwg MjI6MDQ6MzYpIAoKW0dDQyA0LjQuM10gb24gbGludXgyCgpUeXBlICJoZWxwIiwgImNvcHlyaWdo dCIsICJjcmVkaXRzIiBvciAibGljZW5zZSIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCgo+Pj4gZnJv bSBvdmlydHNkay5hcGkgaW1wb3J0IEFQSQoKPj4+IGZyb20gb3ZpcnRzZGsueG1sIGltcG9ydCBw YXJhbXMKCj4+PiBhcGkgPSBBUEkoJ2h0dHA6Ly8xOTIuMTY4LjEuMTgxJywgJ2FkbWluQGludGVy bmFsJywgJzExMTExMScsIE5vbmUsCk5vbmUsICd+Ly5zcGljZWMvY2EuY3J0JywgTm9uZSwgTm9u ZSwgVHJ1ZSkKClRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKCiAgRmlsZSAiPHN0 ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT4KCiAgRmlsZSAib3ZpcnRzZGsvYXBpLnB5IiwgbGlu ZSAxMDcsIGluIF9faW5pdF9fCgogICAgdXJsPScvYXBpJykKCiAgRmlsZSAib3ZpcnRzZGsvaW5m cmFzdHJ1Y3R1cmUvcHJveHkucHkiLCBsaW5lIDEyOSwgaW4gcmVxdWVzdAoKICAgIGxhc3Q9bGFz dCkKCiAgRmlsZSAib3ZpcnRzZGsvaW5mcmFzdHJ1Y3R1cmUvcHJveHkucHkiLCBsaW5lIDE3MSwg aW4gX19kb1JlcXVlc3QKCiAgICByZXR1cm4gcGFyYW1zLnBhcnNlU3RyaW5nKHJlc3BvbnNlX2Jv ZHkpIGlmIHJlc3BvbnNlX2JvZHkgaXMgbm90IE5vbmUKYW5kIHJlc3BvbnNlX2JvZHkgaXMgbm90 ICcnIFwKCiAgRmlsZSAib3ZpcnRzZGsveG1sL3BhcmFtcy5weSIsIGxpbmUgMjEyMjksIGluIHBh cnNlU3RyaW5nCgogICAgcm9vdE9iai5idWlsZChyb290Tm9kZSkKCiAgRmlsZSAib3ZpcnRzZGsv eG1sL3BhcmFtcy5weSIsIGxpbmUgMjAzMDQsIGluIGJ1aWxkCgogICAgc2VsZi5idWlsZEF0dHJp YnV0ZXMobm9kZSwgbm9kZS5hdHRyaWIsIFtdKQoKICBGaWxlICJvdmlydHNkay94bWwvcGFyYW1z LnB5IiwgbGluZSAyMDMwOSwgaW4gYnVpbGRBdHRyaWJ1dGVzCgogICAgc3VwZXIoQVBJLCBzZWxm KS5idWlsZEF0dHJpYnV0ZXMobm9kZSwgYXR0cnMsIGFscmVhZHlfcHJvY2Vzc2VkKQoKICBGaWxl ICJvdmlydHNkay94bWwvcGFyYW1zLnB5IiwgbGluZSA0MTYwLCBpbiBidWlsZEF0dHJpYnV0ZXMK CiAgICB2YWx1ZSA9IGZpbmRfYXR0cl92YWx1ZV8oJ3hzaTp0eXBlJywgbm9kZSkKCiAgRmlsZSAi b3ZpcnRzZGsveG1sL3BhcmFtcy5weSIsIGxpbmUgMzE2LCBpbiBmaW5kX2F0dHJfdmFsdWVfCgog ICAgbmFtZXNwYWNlID0gbm9kZS5uc21hcC5nZXQocHJlZml4KQoKQXR0cmlidXRlRXJyb3I6IG5z bWFwCgo+Pj4gCgogCgogCgpCdXQsIHdoZW4gSSB1c2UgaXQgaW4gcHl0aG9uIDIuNy4zLCBpdCdz IG9rCgogCgpsZWFib3lAbGVhYm95On4vd29ya3NwYWNlL3RodGYtY2xpZW50JCBweXRob24gLS12 ZXJzaW9uCgpQeXRob24gMi43LjMKCmxlYWJveUBsZWFib3k6fi93b3Jrc3BhY2UvdGh0Zi1jbGll bnQkIHB5dGhvbgoKUHl0aG9uIDIuNy4zIChkZWZhdWx0LCBBdWcgIDEgMjAxMiwgMDU6MTY6MDcp IAoKW0dDQyA0LjYuM10gb24gbGludXgyCgpUeXBlICJoZWxwIiwgImNvcHlyaWdodCIsICJjcmVk aXRzIiBvciAibGljZW5zZSIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCgo+Pj4gZnJvbSBvdmlydHNk ay5hcGkgaW1wb3J0IEFQSQoKPj4+IGZyb20gb3ZpcnRzZGsueG1sIGltcG9ydCBwYXJhbXMKCj4+ PiBhcGkgPSBBUEkoJ2h0dHA6Ly8xOTIuMTY4LjEuMTgxJywgJ2FkbWluQGludGVybmFsJywgJzEx MTExMScsIE5vbmUsCk5vbmUsICd+Ly5zcGljZWMvY2EuY3J0JywgTm9uZSwgVHJ1ZSkKCj4+PiAK CgotLS0tLS09X05leHRQYXJ0XzAwMF8wMDBCXzAxQ0U0NzIzLjI3ODEwRjQwCkNvbnRlbnQtVHlw ZTogdGV4dC9odG1sOwoJY2hhcnNldD0idXMtYXNjaWkiCkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rp bmc6IHF1b3RlZC1wcmludGFibGUKCjxodG1sIHhtbG5zOnY9M0QidXJuOnNjaGVtYXMtbWljcm9z b2Z0LWNvbTp2bWwiID0KeG1sbnM6bz0zRCJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmlj ZTpvZmZpY2UiID0KeG1sbnM6dz0zRCJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3 b3JkIiA9CnhtbG5zOm09M0QiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAw NC8xMi9vbW1sIiA9CnhtbG5zPTNEImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgoK PGhlYWQ+CjxtZXRhIGh0dHAtZXF1aXY9M0RDb250ZW50LVR5cGUgY29udGVudD0zRCJ0ZXh0L2h0 bWw7ID0KY2hhcnNldD0zRHVzLWFzY2lpIj4KPG1ldGEgbmFtZT0zREdlbmVyYXRvciBjb250ZW50 PTNEIk1pY3Jvc29mdCBXb3JkIDEyIChmaWx0ZXJlZCBtZWRpdW0pIj4KPHN0eWxlPgo8IS0tCiAv KiBGb250IERlZmluaXRpb25zICovCiBAZm9udC1mYWNlCgl7Zm9udC1mYW1pbHk6U2ltU3VuOwoJ cGFub3NlLTE6MiAxIDYgMCAzIDEgMSAxIDEgMTt9CkBmb250LWZhY2UKCXtmb250LWZhbWlseToi Q2FtYnJpYSBNYXRoIjsKCXBhbm9zZS0xOjIgNCA1IDMgNSA0IDYgMyAyIDQ7fQpAZm9udC1mYWNl Cgl7Zm9udC1mYW1pbHk6Q2FsaWJyaTsKCXBhbm9zZS0xOjIgMTUgNSAyIDIgMiA0IDMgMiA0O30K QGZvbnQtZmFjZQoJe2ZvbnQtZmFtaWx5OlNpbVN1bjsKCXBhbm9zZS0xOjIgMSA2IDAgMyAxIDEg MSAxIDE7fQogLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KIHAuTXNvTm9ybWFsLCBsaS5Nc29Ob3Jt YWwsIGRpdi5Nc29Ob3JtYWwKCXttYXJnaW46MGNtOwoJbWFyZ2luLWJvdHRvbTouMDAwMXB0OwoJ dGV4dC1hbGlnbjpqdXN0aWZ5OwoJdGV4dC1qdXN0aWZ5OmludGVyLWlkZW9ncmFwaDsKCWZvbnQt c2l6ZToxMC41cHQ7Cglmb250LWZhbWlseToiQ2FsaWJyaSIsInNhbnMtc2VyaWYiO30KYTpsaW5r LCBzcGFuLk1zb0h5cGVybGluawoJe21zby1zdHlsZS1wcmlvcml0eTo5OTsKCWNvbG9yOmJsdWU7 Cgl0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30KYTp2aXNpdGVkLCBzcGFuLk1zb0h5cGVybGlu a0ZvbGxvd2VkCgl7bXNvLXN0eWxlLXByaW9yaXR5Ojk5OwoJY29sb3I6cHVycGxlOwoJdGV4dC1k ZWNvcmF0aW9uOnVuZGVybGluZTt9CnAuTXNvQWNldGF0ZSwgbGkuTXNvQWNldGF0ZSwgZGl2Lk1z b0FjZXRhdGUKCXttc28tc3R5bGUtcHJpb3JpdHk6OTk7Cgltc28tc3R5bGUtbGluazoiXDYyNzlc NkNFOFw2ODQ2XDY1ODdcNjcyQyBDaGFyIjsKCW1hcmdpbjowY207CgltYXJnaW4tYm90dG9tOi4w MDAxcHQ7Cgl0ZXh0LWFsaWduOmp1c3RpZnk7Cgl0ZXh0LWp1c3RpZnk6aW50ZXItaWRlb2dyYXBo OwoJZm9udC1zaXplOjkuMHB0OwoJZm9udC1mYW1pbHk6IkNhbGlicmkiLCJzYW5zLXNlcmlmIjt9 CnNwYW4uRW1haWxTdHlsZTE3Cgl7bXNvLXN0eWxlLXR5cGU6cGVyc29uYWwtY29tcG9zZTsKCWZv bnQtZmFtaWx5OiJDYWxpYnJpIiwic2Fucy1zZXJpZiI7Cgljb2xvcjp3aW5kb3d0ZXh0O30Kc3Bh bi5DaGFyCgl7bXNvLXN0eWxlLW5hbWU6Ilw2Mjc5XDZDRThcNjg0Nlw2NTg3XDY3MkMgQ2hhciI7 Cgltc28tc3R5bGUtcHJpb3JpdHk6OTk7Cgltc28tc3R5bGUtbGluazpcNjI3OVw2Q0U4XDY4NDZc NjU4N1w2NzJDO30KLk1zb0NocERlZmF1bHQKCXttc28tc3R5bGUtdHlwZTpleHBvcnQtb25seTt9 CiAvKiBQYWdlIERlZmluaXRpb25zICovCiBAcGFnZSBTZWN0aW9uMQoJe3NpemU6NjEyLjBwdCA3 OTIuMHB0OwoJbWFyZ2luOjcyLjBwdCA5MC4wcHQgNzIuMHB0IDkwLjBwdDt9CmRpdi5TZWN0aW9u MQoJe3BhZ2U6U2VjdGlvbjE7fQotLT4KPC9zdHlsZT4KPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+ CiA8bzpzaGFwZWRlZmF1bHRzIHY6ZXh0PTNEImVkaXQiIHNwaWRtYXg9M0QiMTAyNiIgLz4KPC94 bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CiA8bzpzaGFwZWxheW91dCB2 OmV4dD0zRCJlZGl0Ij4KICA8bzppZG1hcCB2OmV4dD0zRCJlZGl0IiBkYXRhPTNEIjEiIC8+CiA8 L286c2hhcGVsYXlvdXQ+PC94bWw+PCFbZW5kaWZdLS0+CjwvaGVhZD4KCjxib2R5IGxhbmc9M0Ra SC1DTiBsaW5rPTNEYmx1ZSB2bGluaz0zRHB1cnBsZSA9CnN0eWxlPTNEJ3RleHQtanVzdGlmeS10 cmltOnB1bmN0dWF0aW9uJz4KCjxkaXYgY2xhc3M9M0RTZWN0aW9uMT4KCjxwIGNsYXNzPTNETXNv Tm9ybWFsPjxzcGFuIGxhbmc9M0RFTi1VUz5IaSxhbGw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+Cgo8 cCBjbGFzcz0zRE1zb05vcm1hbD48c3BhbiA9Cmxhbmc9M0RFTi1VUz4mbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgSG93CmNhbiBJIHVzZSBvdmVydC1lbmdp bmUtc2RrIGluIHRoZSBweXRob24gZW52aXJvbm1lbnQgYmVsb3cgPQpweXRob24yLjcsPG86cD48 L286cD48L3NwYW4+PC9wPgoKPHAgY2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4gbGFuZz0zREVOLVVT PkZvciBleGFtcGxlLCB3aGVuIEkgdXNlIGl0IGluID0KcHl0aG9uIDIuNi41Cmxpa2UgdGh1czo8 bzpwPjwvbzpwPjwvc3Bhbj48L3A+Cgo8cCBjbGFzcz0zRE1zb05vcm1hbD48c3BhbiBsYW5nPTNE RU4tVVM+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPgoKPHAgY2xhc3M9M0RNc29Ob3JtYWw+ PHNwYW4gPQpsYW5nPTNERU4tVVM+cGVyY3lAcGVyY3ktZGVza3RvcDp+L3RodGYtY2xpZW50JCBw eXRob24KLS12ZXJzaW9uPG86cD48L286cD48L3NwYW4+PC9wPgoKPHAgY2xhc3M9M0RNc29Ob3Jt YWw+PHNwYW4gbGFuZz0zREVOLVVTPlB5dGhvbiA9CjIuNi41PG86cD48L286cD48L3NwYW4+PC9w PgoKPHAgY2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4gPQpsYW5nPTNERU4tVVM+cGVyY3lAcGVyY3kt ZGVza3RvcDp+L3RodGYtY2xpZW50JCA9CnB5dGhvbjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4KCjxw IGNsYXNzPTNETXNvTm9ybWFsPjxzcGFuIGxhbmc9M0RFTi1VUz5QeXRob24gMi42LjUgKHIyNjU6 NzkwNjMsID0KT2N0Jm5ic3A7IDEgMjAxMiwKMjI6MDQ6MzYpIDxvOnA+PC9vOnA+PC9zcGFuPjwv cD4KCjxwIGNsYXNzPTNETXNvTm9ybWFsPjxzcGFuIGxhbmc9M0RFTi1VUz5bR0NDIDQuNC4zXSBv biA9CmxpbnV4MjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4KCjxwIGNsYXNzPTNETXNvTm9ybWFsPjxz cGFuIGxhbmc9M0RFTi1VUz5UeXBlICZxdW90O2hlbHAmcXVvdDssCiZxdW90O2NvcHlyaWdodCZx dW90OywgJnF1b3Q7Y3JlZGl0cyZxdW90OyBvciAmcXVvdDtsaWNlbnNlJnF1b3Q7IGZvciA9Cm1v cmUKaW5mb3JtYXRpb24uPG86cD48L286cD48L3NwYW4+PC9wPgoKPHAgY2xhc3M9M0RNc29Ob3Jt YWw+PHNwYW4gbGFuZz0zREVOLVVTPiZndDsmZ3Q7Jmd0OyBmcm9tIG92aXJ0c2RrLmFwaSA9Cmlt cG9ydCBBUEk8bzpwPjwvbzpwPjwvc3Bhbj48L3A+Cgo8cCBjbGFzcz0zRE1zb05vcm1hbD48c3Bh biBsYW5nPTNERU4tVVM+Jmd0OyZndDsmZ3Q7IGZyb20gb3ZpcnRzZGsueG1sID0KaW1wb3J0CnBh cmFtczxvOnA+PC9vOnA+PC9zcGFuPjwvcD4KCjxwIGNsYXNzPTNETXNvTm9ybWFsPjxzcGFuIGxh bmc9M0RFTi1VUz4mZ3Q7Jmd0OyZndDsgYXBpID0zRApBUEkoJ2h0dHA6Ly8xOTIuMTY4LjEuMTgx JywgJ2FkbWluQGludGVybmFsJywgJzExMTExMScsIE5vbmUsIE5vbmUsID0KJ34vLnNwaWNlYy9j YS5jcnQnLApOb25lLCBOb25lLCBUcnVlKTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4KCjxwIGNsYXNz PTNETXNvTm9ybWFsPjxiPjxzcGFuIGxhbmc9M0RFTi1VUz5UcmFjZWJhY2sgKG1vc3QgcmVjZW50 IGNhbGwgPQpsYXN0KTo8bzpwPjwvbzpwPjwvc3Bhbj48L2I+PC9wPgoKPHAgY2xhc3M9M0RNc29O b3JtYWw+PGI+PHNwYW4gbGFuZz0zREVOLVVTPiZuYnNwOyBGaWxlID0KJnF1b3Q7Jmx0O3N0ZGlu Jmd0OyZxdW90OywKbGluZSAxLCBpbiAmbHQ7bW9kdWxlJmd0OzxvOnA+PC9vOnA+PC9zcGFuPjwv Yj48L3A+Cgo8cCBjbGFzcz0zRE1zb05vcm1hbD48Yj48c3BhbiBsYW5nPTNERU4tVVM+Jm5ic3A7 IEZpbGUgPQomcXVvdDtvdmlydHNkay9hcGkucHkmcXVvdDssCmxpbmUgMTA3LCBpbiBfX2luaXRf XzxvOnA+PC9vOnA+PC9zcGFuPjwvYj48L3A+Cgo8cCBjbGFzcz0zRE1zb05vcm1hbD48Yj48c3Bh biBsYW5nPTNERU4tVVM+Jm5ic3A7Jm5ic3A7Jm5ic3A7ID0KdXJsPTNEJy9hcGknKTxvOnA+PC9v OnA+PC9zcGFuPjwvYj48L3A+Cgo8cCBjbGFzcz0zRE1zb05vcm1hbD48Yj48c3BhbiBsYW5nPTNE RU4tVVM+Jm5ic3A7IEZpbGUKJnF1b3Q7b3ZpcnRzZGsvaW5mcmFzdHJ1Y3R1cmUvcHJveHkucHkm cXVvdDssIGxpbmUgMTI5LCBpbiA9CnJlcXVlc3Q8bzpwPjwvbzpwPjwvc3Bhbj48L2I+PC9wPgoK PHAgY2xhc3M9M0RNc29Ob3JtYWw+PGI+PHNwYW4gbGFuZz0zREVOLVVTPiZuYnNwOyZuYnNwOyZu YnNwOyA9Cmxhc3Q9M0RsYXN0KTxvOnA+PC9vOnA+PC9zcGFuPjwvYj48L3A+Cgo8cCBjbGFzcz0z RE1zb05vcm1hbD48Yj48c3BhbiBsYW5nPTNERU4tVVM+Jm5ic3A7IEZpbGUKJnF1b3Q7b3ZpcnRz ZGsvaW5mcmFzdHJ1Y3R1cmUvcHJveHkucHkmcXVvdDssIGxpbmUgMTcxLCBpbiA9Cl9fZG9SZXF1 ZXN0PG86cD48L286cD48L3NwYW4+PC9iPjwvcD4KCjxwIGNsYXNzPTNETXNvTm9ybWFsPjxiPjxz cGFuIGxhbmc9M0RFTi1VUz4mbmJzcDsmbmJzcDsmbmJzcDsgcmV0dXJuCnBhcmFtcy5wYXJzZVN0 cmluZyhyZXNwb25zZV9ib2R5KSBpZiByZXNwb25zZV9ib2R5IGlzIG5vdCBOb25lIGFuZApyZXNw b25zZV9ib2R5IGlzIG5vdCAnJyBcPG86cD48L286cD48L3NwYW4+PC9iPjwvcD4KCjxwIGNsYXNz PTNETXNvTm9ybWFsPjxiPjxzcGFuIGxhbmc9M0RFTi1VUz4mbmJzcDsgRmlsZQomcXVvdDtvdmly dHNkay94bWwvcGFyYW1zLnB5JnF1b3Q7LCBsaW5lIDIxMjI5LCBpbiA9CnBhcnNlU3RyaW5nPG86 cD48L286cD48L3NwYW4+PC9iPjwvcD4KCjxwIGNsYXNzPTNETXNvTm9ybWFsPjxiPjxzcGFuIGxh bmc9M0RFTi1VUz4mbmJzcDsmbmJzcDsmbmJzcDsKcm9vdE9iai5idWlsZChyb290Tm9kZSk8bzpw PjwvbzpwPjwvc3Bhbj48L2I+PC9wPgoKPHAgY2xhc3M9M0RNc29Ob3JtYWw+PGI+PHNwYW4gbGFu Zz0zREVOLVVTPiZuYnNwOyBGaWxlCiZxdW90O292aXJ0c2RrL3htbC9wYXJhbXMucHkmcXVvdDss IGxpbmUgMjAzMDQsIGluID0KYnVpbGQ8bzpwPjwvbzpwPjwvc3Bhbj48L2I+PC9wPgoKPHAgY2xh c3M9M0RNc29Ob3JtYWw+PGI+PHNwYW4gbGFuZz0zREVOLVVTPiZuYnNwOyZuYnNwOyZuYnNwOwpz ZWxmLmJ1aWxkQXR0cmlidXRlcyhub2RlLCBub2RlLmF0dHJpYiwgW10pPG86cD48L286cD48L3Nw YW4+PC9iPjwvcD4KCjxwIGNsYXNzPTNETXNvTm9ybWFsPjxiPjxzcGFuIGxhbmc9M0RFTi1VUz4m bmJzcDsgRmlsZQomcXVvdDtvdmlydHNkay94bWwvcGFyYW1zLnB5JnF1b3Q7LCBsaW5lIDIwMzA5 LCBpbiA9CmJ1aWxkQXR0cmlidXRlczxvOnA+PC9vOnA+PC9zcGFuPjwvYj48L3A+Cgo8cCBjbGFz cz0zRE1zb05vcm1hbD48Yj48c3BhbiBsYW5nPTNERU4tVVM+Jm5ic3A7Jm5ic3A7Jm5ic3A7IHN1 cGVyKEFQSSwKc2VsZikuYnVpbGRBdHRyaWJ1dGVzKG5vZGUsIGF0dHJzLCA9CmFscmVhZHlfcHJv Y2Vzc2VkKTxvOnA+PC9vOnA+PC9zcGFuPjwvYj48L3A+Cgo8cCBjbGFzcz0zRE1zb05vcm1hbD48 Yj48c3BhbiBsYW5nPTNERU4tVVM+Jm5ic3A7IEZpbGUKJnF1b3Q7b3ZpcnRzZGsveG1sL3BhcmFt cy5weSZxdW90OywgbGluZSA0MTYwLCBpbiA9CmJ1aWxkQXR0cmlidXRlczxvOnA+PC9vOnA+PC9z cGFuPjwvYj48L3A+Cgo8cCBjbGFzcz0zRE1zb05vcm1hbD48Yj48c3BhbiBsYW5nPTNERU4tVVM+ Jm5ic3A7Jm5ic3A7Jm5ic3A7IHZhbHVlID0zRApmaW5kX2F0dHJfdmFsdWVfKCd4c2k6dHlwZScs IG5vZGUpPG86cD48L286cD48L3NwYW4+PC9iPjwvcD4KCjxwIGNsYXNzPTNETXNvTm9ybWFsPjxi PjxzcGFuIGxhbmc9M0RFTi1VUz4mbmJzcDsgRmlsZSA9CiZxdW90O292aXJ0c2RrL3htbC9wYXJh bXMucHkmcXVvdDssCmxpbmUgMzE2LCBpbiBmaW5kX2F0dHJfdmFsdWVfPG86cD48L286cD48L3Nw YW4+PC9iPjwvcD4KCjxwIGNsYXNzPTNETXNvTm9ybWFsPjxiPjxzcGFuIGxhbmc9M0RFTi1VUz4m bmJzcDsmbmJzcDsmbmJzcDsgbmFtZXNwYWNlID0KPTNECm5vZGUubnNtYXAuZ2V0KHByZWZpeCk8 bzpwPjwvbzpwPjwvc3Bhbj48L2I+PC9wPgoKPHAgY2xhc3M9M0RNc29Ob3JtYWw+PGI+PHNwYW4g bGFuZz0zREVOLVVTPkF0dHJpYnV0ZUVycm9yOiA9Cm5zbWFwPC9zcGFuPjwvYj48c3BhbgpsYW5n PTNERU4tVVM+PG86cD48L286cD48L3NwYW4+PC9wPgoKPHAgY2xhc3M9M0RNc29Ob3JtYWw+PHNw YW4gPQpsYW5nPTNERU4tVVM+Jmd0OyZndDsmZ3Q7PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9w PgoKPHAgY2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4gbGFuZz0zREVOLVVTPjxvOnA+Jm5ic3A7PC9v OnA+PC9zcGFuPjwvcD4KCjxwIGNsYXNzPTNETXNvTm9ybWFsPjxzcGFuIGxhbmc9M0RFTi1VUz48 bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+Cgo8cCBjbGFzcz0zRE1zb05vcm1hbD48c3BhbiBs YW5nPTNERU4tVVM+QnV0LCB3aGVuIEkgdXNlIGl0IGluIHB5dGhvbiA9CjIuNy4zLCBpdCYjODIx NztzCm9rPG86cD48L286cD48L3NwYW4+PC9wPgoKPHAgY2xhc3M9M0RNc29Ob3JtYWw+PHNwYW4g bGFuZz0zREVOLVVTPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4KCjxwIGNsYXNzPTNETXNv Tm9ybWFsPjxzcGFuID0KbGFuZz0zREVOLVVTPmxlYWJveUBsZWFib3k6fi93b3Jrc3BhY2UvdGh0 Zi1jbGllbnQkCnB5dGhvbiAtLXZlcnNpb248bzpwPjwvbzpwPjwvc3Bhbj48L3A+Cgo8cCBjbGFz cz0zRE1zb05vcm1hbD48c3BhbiBsYW5nPTNERU4tVVM+UHl0aG9uID0KMi43LjM8bzpwPjwvbzpw Pjwvc3Bhbj48L3A+Cgo8cCBjbGFzcz0zRE1zb05vcm1hbD48c3BhbiA9Cmxhbmc9M0RFTi1VUz5s ZWFib3lAbGVhYm95On4vd29ya3NwYWNlL3RodGYtY2xpZW50JApweXRob248bzpwPjwvbzpwPjwv c3Bhbj48L3A+Cgo8cCBjbGFzcz0zRE1zb05vcm1hbD48c3BhbiBsYW5nPTNERU4tVVM+UHl0aG9u IDIuNy4zIChkZWZhdWx0LCBBdWcmbmJzcDsgPQoxIDIwMTIsCjA1OjE2OjA3KSA8bzpwPjwvbzpw Pjwvc3Bhbj48L3A+Cgo8cCBjbGFzcz0zRE1zb05vcm1hbD48c3BhbiBsYW5nPTNERU4tVVM+W0dD QyA0LjYuM10gb24gPQpsaW51eDI8bzpwPjwvbzpwPjwvc3Bhbj48L3A+Cgo8cCBjbGFzcz0zRE1z b05vcm1hbD48c3BhbiBsYW5nPTNERU4tVVM+VHlwZSAmcXVvdDtoZWxwJnF1b3Q7LAomcXVvdDtj b3B5cmlnaHQmcXVvdDssICZxdW90O2NyZWRpdHMmcXVvdDsgb3IgJnF1b3Q7bGljZW5zZSZxdW90 OyBmb3IgPQptb3JlCmluZm9ybWF0aW9uLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4KCjxwIGNsYXNz PTNETXNvTm9ybWFsPjxzcGFuIGxhbmc9M0RFTi1VUz4mZ3Q7Jmd0OyZndDsgZnJvbSBvdmlydHNk ay5hcGkgPQppbXBvcnQgQVBJPG86cD48L286cD48L3NwYW4+PC9wPgoKPHAgY2xhc3M9M0RNc29O b3JtYWw+PHNwYW4gbGFuZz0zREVOLVVTPiZndDsmZ3Q7Jmd0OyBmcm9tIG92aXJ0c2RrLnhtbCA9 CmltcG9ydApwYXJhbXM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+Cgo8cCBjbGFzcz0zRE1zb05vcm1h bD48c3BhbiBsYW5nPTNERU4tVVM+Jmd0OyZndDsmZ3Q7IGFwaSA9M0QKQVBJKCdodHRwOi8vMTky LjE2OC4xLjE4MScsICdhZG1pbkBpbnRlcm5hbCcsICcxMTExMTEnLCBOb25lLCBOb25lLAonfi8u c3BpY2VjL2NhLmNydCcsIE5vbmUsIFRydWUpPG86cD48L286cD48L3NwYW4+PC9wPgoKPHAgY2xh c3M9M0RNc29Ob3JtYWw+PHNwYW4gPQpsYW5nPTNERU4tVVM+Jmd0OyZndDsmZ3Q7PG86cD4mbmJz cDs8L286cD48L3NwYW4+PC9wPgoKPC9kaXY+Cgo8L2JvZHk+Cgo8L2h0bWw+CgotLS0tLS09X05l eHRQYXJ0XzAwMF8wMDBCXzAxQ0U0NzIzLjI3ODEwRjQwLS0KCgo= --===============5752050905184791126==--