Re: Re: This routine cannot be called because another command structure has results pending

"SĂ©bastien SablĂ©" <[email protected]> Mon, 4 Dec 2006 12:22:47 +0100
Newsgroups gmane.comp.python.sybase
Message-ID <[email protected]>
------=_Part_21731_16256565.1165231367573
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

Hi Andrew,

2006/7/6, Andrew McNamara <[email protected]>:
> ...
> As to whether it make it into a future release, I can certainly apply
> it to the repository, but neither Dave nor I have a Sybase installation
> to test it against at the moment (and neither of us can really spare
> the time).
>
> That raises the question - should the project be moved to Sourceforge? I'=
m
> not convinced the move would solve anything: it would still require at
> least one developer with C skills and the time to review and test patches=
,
> cut releases, and reply to queries - is there anyone on the list willing
> to commit to that?

I would like to volunteer to do that. We are using python-sybase in a
few tools at the company where I work and so we would like to
contribute to this project and ensure it is properly tested.

Actually I have already done most of the work:
* I merged most of the patches provided on this list
* I added some corrections of my own
* I added a unit test suite based on the DB API 2.0 driver compliance
unit test suite + extra
* this unit test suite has been added to our automated testing
framework so that it runs frequently on the following platforms and
sybase clients:
   i686-pc-linux-gnu - Sybase ASE 12.5.1 and 15.0 (32bits)
   sparc-sun-solaris2.10 - Sybase ASE 12.5.1 and 15.0 (32bits and 64bits)
   sparc-sun-solaris2.8 - Sybase ASE 12.5.1 and 15.0 (32bits)
   powerpc-ibm-aix5.3.0.0 - Sybase ASE 12.5.1 and 15.0 (32bits)
   powerpc-ibm-aix5.2.0.0 - Sybase ASE 12.5.1 and 15.0 (32bits)
   alphaev68-dec-osf5.1 - Sybase ASE 12.5.1 and 15.0 (32bits)

I join a patch which includes the modifications and the unit test
suite. If that is OK with you and Dave, I would be happy to help you
"review and test patches, cut releases, and reply to queries" for
coming versions of python-sybase.

regards

--
S=E9bastien Sabl=E9
SunGard GP3 - Runtime

------=_Part_21731_16256565.1165231367573
Content-Type: text/x-patch; name=sybase-0.37ssa.diff; charset=ANSI_X3.4-1968
Content-Transfer-Encoding: base64
X-Attachment-Id: f_evasgx49
Content-Disposition: attachment; filename="sybase-0.37ssa.diff"

SW5kZXg6IHRlc3RzL2RiYXBpMjAucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdGVzdHMvZGJhcGkyMC5weQko
Li4uL2JyYW5jaGVzLzIuNi9zeWJhc2UpCShyw6l2aXNpb24gMCkKKysrIHRlc3RzL2RiYXBpMjAu
cHkJKC4uLi90cnVuay9zeWJhc2UpCShyw6l2aXNpb24gMjc2KQpAQCAtMCwwICsxLDg1OSBAQAor
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisnJycgUHl0aG9uIERCIEFQSSAyLjAgZHJpdmVyIGNvbXBs
aWFuY2UgdW5pdCB0ZXN0IHN1aXRlLiAKKyAgICAKKyAgICBUaGlzIHNvZnR3YXJlIGlzIFB1Ymxp
YyBEb21haW4gYW5kIG1heSBiZSB1c2VkIHdpdGhvdXQgcmVzdHJpY3Rpb25zLgorCisgIk5vdyB3
ZSBoYXZlIGJvb3plIGFuZCBiYXJmbGllcyBlbnRlcmluZyB0aGUgZGlzY3Vzc2lvbiwgcGx1cyBy
dW1vdXJzIG9mCisgIERCQXMgb24gZHJ1Z3MuLi4gYW5kIEkgd29uJ3QgdGVsbCB5b3Ugd2hhdCBm
bGFzaGVzIHRocm91Z2ggbXkgbWluZCBlYWNoCisgIHRpbWUgSSByZWFkIHRoZSBzdWJqZWN0IGxp
bmUgd2l0aCAnQW5hbCBDb21wbGlhbmNlJyBpbiBpdC4gIEFsbCBhcm91bmQKKyAgdGhpcyBpcyB0
dXJuaW5nIG91dCB0byBiZSBhIHRob3JvdWdobHkgdW53aG9sZXNvbWUgdW5pdCB0ZXN0LiIKKwor
ICAgIC0tIElhbiBCaWNraW5nCisKKyAgaHR0cDovL3N0dWFydGJpc2hvcC5uZXQvU29mdHdhcmUv
REJBUEkyMFRlc3RTdWl0ZS8KKycnJworCitfX3Jjc19pZF9fICA9ICckSWQ6IGRiYXBpMjAucHks
diAxLjEwIDIwMDMvMTAvMDkgMDM6MTQ6MTQgemVuemVuIEV4cCAkJworX192ZXJzaW9uX18gPSAn
JFJldmlzaW9uOiAxLjEwICQnWzExOi0yXQorX19hdXRob3JfXyA9ICdTdHVhcnQgQmlzaG9wIDx6
ZW5Ac2hhbmdyaS1sYS5kcm9wYmVhci5pZC5hdT4nCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0
IHRpbWUKKworIyAkTG9nOiBkYmFwaTIwLnB5LHYgJAorIyBSZXZpc2lvbiAxLjEwICAyMDAzLzEw
LzA5IDAzOjE0OjE0ICB6ZW56ZW4KKyMgQWRkIHRlc3QgZm9yIERCIEFQSSAyLjAgb3B0aW9uYWwg
ZXh0ZW5zaW9uLCB3aGVyZSBkYXRhYmFzZSBleGNlcHRpb25zCisjIGFyZSBleHBvc2VkIGFzIGF0
dHJpYnV0ZXMgb24gdGhlIENvbm5lY3Rpb24gb2JqZWN0LgorIworIyBSZXZpc2lvbiAxLjkgIDIw
MDMvMDgvMTMgMDE6MTY6MzYgIHplbnplbgorIyBNaW5vciB0d2VhayBmcm9tIFN0ZWZhbiBGbGVp
dGVyCisjCisjIFJldmlzaW9uIDEuOCAgMjAwMy8wNC8xMCAwMDoxMzoyNSAgemVuemVuCisjIENo
YW5nZXMsIGFzIHBlciBzdWdnZXN0aW9ucyBieSBNLi1BLiBMZW1idXJnCisjIC0gQWRkIGEgdGFi
bGUgcHJlZml4LCB0byBlbnN1cmUgbmFtZXNwYWNlIGNvbGxpc2lvbnMgY2FuIGFsd2F5cyBiZSBh
dm9pZGVkCisjCisjIFJldmlzaW9uIDEuNyAgMjAwMy8wMi8yNiAyMzozMzozNyAgemVuemVuCisj
IEJyZWFrIG91dCBEREwgaW50byBoZWxwZXIgZnVuY3Rpb25zLCBhcyBwZXIgcmVxdWVzdCBieSBE
YXZpZCBSdXNoYnkKKyMKKyMgUmV2aXNpb24gMS42ICAyMDAzLzAyLzIxIDAzOjA0OjMzICB6ZW56
ZW4KKyMgU3R1ZmYgZnJvbSBIZW5yaWsgRWtlbHVuZDoKKyMgICAgIGFkZGVkIHRlc3RfTm9uZQor
IyAgICAgYWRkZWQgdGVzdF9uZXh0c2V0ICYgaG9va3MKKyMKKyMgUmV2aXNpb24gMS41ICAyMDAz
LzAyLzE3IDIyOjA4OjQzICB6ZW56ZW4KKyMgSW1wbGVtZW50IHN1Z2dlc3Rpb25zIGFuZCBjb2Rl
IGZyb20gSGVucmlrIEVrbHVuZCAtIHRlc3QgdGhhdCBjdXJzb3IuYXJyYXlzaXplCisjIGRlZmF1
bHRzIHRvIDEgJiBnZW5lcmljIGN1cnNvci5jYWxscHJvYyB0ZXN0IGFkZGVkCisjCisjIFJldmlz
aW9uIDEuNCAgMjAwMy8wMi8xNSAwMDoxNjozMyAgemVuemVuCisjIENoYW5nZXMsIGFzIHBlciBz
dWdnZXN0aW9ucyBhbmQgYnVnIHJlcG9ydHMgYnkgTS4tQS4gTGVtYnVyZywKKyMgTWF0dGhldyBU
LiBLcm9tZXIsIEZlZGVyaWNvIERpIEdyZWdvcmlvIGFuZCBEYW5pZWwgRGl0dG1hcgorIyAtIENs
YXNzIHJlbmFtZWQKKyMgLSBOb3cgYSBzdWJjbGFzcyBvZiBUZXN0Q2FzZSwgdG8gYXZvaWQgcmVx
dWlyaW5nIHRoZSBkcml2ZXIgc3R1YgorIyAgIHRvIHVzZSBtdWx0aXBsZSBpbmhlcml0YW5jZQor
IyAtIFJldmVyc2VkIHRoZSBwb2xhcml0eSBvZiBidWdneSB0ZXN0IGluIHRlc3RfZGVzY3JpcHRp
b24KKyMgLSBUZXN0IGV4Y2VwdGlvbiBoZWlyYXJjaHkgY29ycmVjdGx5CisjIC0gc2VsZi5wb3B1
bGF0ZSBpcyBub3cgc2VsZi5fcG9wdWxhdGUoKSwgc28gaWYgYSBkcml2ZXIgc3R1YgorIyAgIG92
ZXJyaWRlcyBzZWxmLmRkbDEgdGhpcyBjaGFuZ2UgcHJvcG9nYXRlcworIyAtIFZBUkNIQVIgY29s
dW1ucyBub3cgaGF2ZSBhIHdpZHRoLCB3aGljaCB3aWxsIGhvcGVmdWxseSBtYWtlIHRoZQorIyAg
IERETCBldmVuIG1vcmUgcG9ydGlibGUgKHRoaXMgd2lsbCBiZSByZXZlcnNlZCBpZiBpdCBjYXVz
ZXMgbW9yZSBwcm9ibGVtcykKKyMgLSBjdXJzb3Iucm93Y291bnQgYmVpbmcgY2hlY2tlZCBhZnRl
ciB2YXJpb3VzIGV4ZWN1dGUgYW5kIGZldGNoWFhYIG1ldGhvZHMKKyMgLSBDaGVjayBmb3IgZmV0
Y2hhbGwgYW5kIGZldGNobWFueSByZXR1cm5pbmcgZW1wdHkgbGlzdHMgYWZ0ZXIgcmVzdWx0cwor
IyAgIGFyZSBleGhhdXN0ZWQgKGFscmVhZHkgY2hlY2tpbmcgZm9yIGVtcHR5IGxpc3RzIGlmIHNl
bGVjdCByZXRyaWV2ZWQKKyMgICBub3RoaW5nCisjIC0gRml4IGJ1Z3MgaW4gdGVzdF9zZXRvdXRw
dXRzaXplX2Jhc2ljIGFuZCB0ZXN0X3NldGlucHV0c2l6ZXMKKyMKKworY2xhc3MgRGF0YWJhc2VB
UEkyMFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICcnJyBUZXN0IGEgZGF0YWJhc2Ugc2Vs
Zi5kcml2ZXIgZm9yIERCIEFQSSAyLjAgY29tcGF0aWJpbGl0eS4KKyAgICAgICAgVGhpcyBpbXBs
ZW1lbnRhdGlvbiB0ZXN0cyBHYWRmbHksIGJ1dCB0aGUgVGVzdENhc2UKKyAgICAgICAgaXMgc3Ry
dWN0dXJlZCBzbyB0aGF0IG90aGVyIHNlbGYuZHJpdmVycyBjYW4gc3ViY2xhc3MgdGhpcyAKKyAg
ICAgICAgdGVzdCBjYXNlIHRvIGVuc3VyZSBjb21waWxpYW5jZSB3aXRoIHRoZSBEQi1BUEkuIEl0
IGlzIAorICAgICAgICBleHBlY3RlZCB0aGF0IHRoaXMgVGVzdENhc2UgbWF5IGJlIGV4cGFuZGVk
IGluIHRoZSBmdXR1cmUKKyAgICAgICAgaWYgYW1iaWd1aXRpZXMgb3IgZWRnZSBjb25kaXRpb25z
IGFyZSBkaXNjb3ZlcmVkLgorCisgICAgICAgIFRoZSAnT3B0aW9uYWwgRXh0ZW5zaW9ucycgYXJl
IG5vdCB5ZXQgYmVpbmcgdGVzdGVkLgorCisgICAgICAgIHNlbGYuZHJpdmVycyBzaG91bGQgc3Vi
Y2xhc3MgdGhpcyB0ZXN0LCBvdmVycmlkaW5nIHNldFVwLCB0ZWFyRG93biwKKyAgICAgICAgc2Vs
Zi5kcml2ZXIsIGNvbm5lY3RfYXJncyBhbmQgY29ubmVjdF9rd19hcmdzLiBDbGFzcyBzcGVjaWZp
Y2F0aW9uCisgICAgICAgIHNob3VsZCBiZSBhcyBmb2xsb3dzOgorCisgICAgICAgIGltcG9ydCBk
YmFwaTIwIAorICAgICAgICBjbGFzcyBteXRlc3QoZGJhcGkyMC5EYXRhYmFzZUFQSTIwVGVzdCk6
CisgICAgICAgICAgIFsuLi5dIAorCisgICAgICAgIERvbid0ICdpbXBvcnQgRGF0YWJhc2VBUEky
MFRlc3QgZnJvbSBkYmFwaTIwJywgb3IgeW91IHdpbGwKKyAgICAgICAgY29uZnVzZSB0aGUgdW5p
dCB0ZXN0ZXIgLSBqdXN0ICdpbXBvcnQgZGJhcGkyMCcuCisgICAgJycnCisKKyAgICAjIFRoZSBz
ZWxmLmRyaXZlciBtb2R1bGUuIFRoaXMgc2hvdWxkIGJlIHRoZSBtb2R1bGUgd2hlcmUgdGhlICdj
b25uZWN0JworICAgICMgbWV0aG9kIGlzIHRvIGJlIGZvdW5kCisgICAgZHJpdmVyID0gTm9uZQor
ICAgIGNvbm5lY3RfYXJncyA9ICgpICMgTGlzdCBvZiBhcmd1bWVudHMgdG8gcGFzcyB0byBjb25u
ZWN0CisgICAgY29ubmVjdF9rd19hcmdzID0ge30gIyBLZXl3b3JkIGFyZ3VtZW50cyBmb3IgY29u
bmVjdAorICAgIHRhYmxlX3ByZWZpeCA9ICdkYmFwaTIwdGVzdF8nICMgSWYgeW91IG5lZWQgdG8g
c3BlY2lmeSBhIHByZWZpeCBmb3IgdGFibGVzCisKKyAgICBkZGwxID0gJ2NyZWF0ZSB0YWJsZSAl
c2Jvb3plIChuYW1lIHZhcmNoYXIoMjApKScgJSB0YWJsZV9wcmVmaXgKKyAgICBkZGwyID0gJ2Ny
ZWF0ZSB0YWJsZSAlc2JhcmZseXMgKG5hbWUgdmFyY2hhcigyMCkpJyAlIHRhYmxlX3ByZWZpeAor
ICAgIHhkZGwxID0gJ2Ryb3AgdGFibGUgJXNib296ZScgJSB0YWJsZV9wcmVmaXgKKyAgICB4ZGRs
MiA9ICdkcm9wIHRhYmxlICVzYmFyZmx5cycgJSB0YWJsZV9wcmVmaXgKKworICAgIGxvd2VyZnVu
YyA9ICdsb3dlcicgIyBOYW1lIG9mIHN0b3JlZCBwcm9jZWR1cmUgdG8gY29udmVydCBzdHJpbmct
Pmxvd2VyY2FzZQorICAgICAgICAKKyAgICAjIFNvbWUgZHJpdmVycyBtYXkgbmVlZCB0byBvdmVy
cmlkZSB0aGVzZSBoZWxwZXJzLCBmb3IgZXhhbXBsZSBhZGRpbmcKKyAgICAjIGEgJ2NvbW1pdCcg
YWZ0ZXIgdGhlIGV4ZWN1dGUuCisgICAgZGVmIGV4ZWN1dGVEREwxKHNlbGYsY29uLGN1cnNvcik6
CisgICAgICAgIGN1cnNvci5leGVjdXRlKHNlbGYuZGRsMSkKKworICAgIGRlZiBleGVjdXRlRERM
MihzZWxmLGNvbixjdXJzb3IpOgorICAgICAgICBjdXJzb3IuZXhlY3V0ZShzZWxmLmRkbDIpCisK
KyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICcnJyBzZWxmLmRyaXZlcnMgc2hvdWxkIG92
ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIHBlcmZvcm0gcmVxdWlyZWQgc2V0dXAKKyAgICAgICAgICAg
IGlmIGFueSBpcyBuZWNlc3NhcnksIHN1Y2ggYXMgY3JlYXRpbmcgdGhlIGRhdGFiYXNlLgorICAg
ICAgICAnJycKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAg
ICAnJycgc2VsZi5kcml2ZXJzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byBwZXJmb3Jt
IHJlcXVpcmVkIGNsZWFudXAKKyAgICAgICAgICAgIGlmIGFueSBpcyBuZWNlc3NhcnksIHN1Y2gg
YXMgZGVsZXRpbmcgdGhlIHRlc3QgZGF0YWJhc2UuCisgICAgICAgICAgICBUaGUgZGVmYXVsdCBk
cm9wcyB0aGUgdGFibGVzIHRoYXQgbWF5IGJlIGNyZWF0ZWQuCisgICAgICAgICcnJworICAgICAg
ICBjb24gPSBzZWxmLl9jb25uZWN0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY3VyID0g
Y29uLmN1cnNvcigpCisgICAgICAgICAgICBmb3IgZGRsIGluIChzZWxmLnhkZGwxLHNlbGYueGRk
bDIpOgorICAgICAgICAgICAgICAgIHRyeTogCisgICAgICAgICAgICAgICAgICAgIGN1ci5leGVj
dXRlKGRkbCkKKyAgICAgICAgICAgICAgICAgICAgY29uLmNvbW1pdCgpCisgICAgICAgICAgICAg
ICAgZXhjZXB0IHNlbGYuZHJpdmVyLkVycm9yOiAKKyAgICAgICAgICAgICAgICAgICAgIyBBc3N1
bWUgdGFibGUgZGlkbid0IGV4aXN0LiBPdGhlciB0ZXN0cyB3aWxsIGNoZWNrIGlmCisgICAgICAg
ICAgICAgICAgICAgICMgZXhlY3V0ZSBpcyBidXN0ZWQuCisgICAgICAgICAgICAgICAgICAgIHBh
c3MKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpCisKKyAgICBkZWYg
X2Nvbm5lY3Qoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmRy
aXZlci5jb25uZWN0KAorICAgICAgICAgICAgICAgICpzZWxmLmNvbm5lY3RfYXJncywqKnNlbGYu
Y29ubmVjdF9rd19hcmdzCisgICAgICAgICAgICAgICAgKQorICAgICAgICBleGNlcHQgQXR0cmli
dXRlRXJyb3I6CisgICAgICAgICAgICBzZWxmLmZhaWwoIk5vIGNvbm5lY3QgbWV0aG9kIGZvdW5k
IGluIHNlbGYuZHJpdmVyIG1vZHVsZSIpCisKKyAgICBkZWYgY29tbWl0KHNlbGYsIGNvbik6Cisg
ICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2Nvbm5lY3Qoc2VsZik6CisgICAgICAgIGNvbiA9
IHNlbGYuX2Nvbm5lY3QoKQorICAgICAgICBjb24uY2xvc2UoKQorCisgICAgZGVmIHRlc3RfYXBp
bGV2ZWwoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgTXVzdCBleGlzdAorICAg
ICAgICAgICAgYXBpbGV2ZWwgPSBzZWxmLmRyaXZlci5hcGlsZXZlbAorICAgICAgICAgICAgIyBN
dXN0IGVxdWFsIDIuMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcGlsZXZlbCwnMi4w
JykKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgc2VsZi5mYWls
KCJEcml2ZXIgZG9lc24ndCBkZWZpbmUgYXBpbGV2ZWwiKQorCisgICAgZGVmIHRlc3RfdGhyZWFk
c2FmZXR5KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIE11c3QgZXhpc3QKKyAg
ICAgICAgICAgIHRocmVhZHNhZmV0eSA9IHNlbGYuZHJpdmVyLnRocmVhZHNhZmV0eQorICAgICAg
ICAgICAgIyBNdXN0IGJlIGEgdmFsaWQgdmFsdWUKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVz
cyh0aHJlYWRzYWZldHkgaW4gKDAsMSwyLDMpKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJy
b3I6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkRyaXZlciBkb2Vzbid0IGRlZmluZSB0aHJlYWRz
YWZldHkiKQorCisgICAgZGVmIHRlc3RfcGFyYW1zdHlsZShzZWxmKToKKyAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgIyBNdXN0IGV4aXN0CisgICAgICAgICAgICBwYXJhbXN0eWxlID0gc2VsZi5k
cml2ZXIucGFyYW1zdHlsZQorICAgICAgICAgICAgIyBNdXN0IGJlIGEgdmFsaWQgdmFsdWUKKyAg
ICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhwYXJhbXN0eWxlIGluICgKKyAgICAgICAgICAgICAg
ICAncW1hcmsnLCdudW1lcmljJywnbmFtZWQnLCdmb3JtYXQnLCdweWZvcm1hdCcKKyAgICAgICAg
ICAgICAgICApKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBz
ZWxmLmZhaWwoIkRyaXZlciBkb2Vzbid0IGRlZmluZSBwYXJhbXN0eWxlIikKKworICAgIGRlZiB0
ZXN0X0V4Y2VwdGlvbnMoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIHJlcXVpcmVkIGV4Y2Vw
dGlvbnMgZXhpc3QsIGFuZCBhcmUgaW4gdGhlCisgICAgICAgICMgZGVmaW5lZCBoZWlyYXJjaHku
CisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKHNlbGYuZHJpdmVyLldhcm5pbmcs
U3RhbmRhcmRFcnJvcikpCisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKHNlbGYu
ZHJpdmVyLkVycm9yLFN0YW5kYXJkRXJyb3IpKQorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoCisg
ICAgICAgICAgICBpc3N1YmNsYXNzKHNlbGYuZHJpdmVyLkludGVyZmFjZUVycm9yLHNlbGYuZHJp
dmVyLkVycm9yKQorICAgICAgICAgICAgKQorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoCisgICAg
ICAgICAgICBpc3N1YmNsYXNzKHNlbGYuZHJpdmVyLkRhdGFiYXNlRXJyb3Isc2VsZi5kcml2ZXIu
RXJyb3IpCisgICAgICAgICAgICApCisgICAgICAgIHNlbGYuZmFpbFVubGVzcygKKyAgICAgICAg
ICAgIGlzc3ViY2xhc3Moc2VsZi5kcml2ZXIuT3BlcmF0aW9uYWxFcnJvcixzZWxmLmRyaXZlci5F
cnJvcikKKyAgICAgICAgICAgICkKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKAorICAgICAgICAg
ICAgaXNzdWJjbGFzcyhzZWxmLmRyaXZlci5JbnRlZ3JpdHlFcnJvcixzZWxmLmRyaXZlci5FcnJv
cikKKyAgICAgICAgICAgICkKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKAorICAgICAgICAgICAg
aXNzdWJjbGFzcyhzZWxmLmRyaXZlci5JbnRlcm5hbEVycm9yLHNlbGYuZHJpdmVyLkVycm9yKQor
ICAgICAgICAgICAgKQorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoCisgICAgICAgICAgICBpc3N1
YmNsYXNzKHNlbGYuZHJpdmVyLlByb2dyYW1taW5nRXJyb3Isc2VsZi5kcml2ZXIuRXJyb3IpCisg
ICAgICAgICAgICApCisgICAgICAgIHNlbGYuZmFpbFVubGVzcygKKyAgICAgICAgICAgIGlzc3Vi
Y2xhc3Moc2VsZi5kcml2ZXIuTm90U3VwcG9ydGVkRXJyb3Isc2VsZi5kcml2ZXIuRXJyb3IpCisg
ICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9FeGNlcHRpb25zQXNDb25uZWN0aW9uQXR0cmli
dXRlcyhzZWxmKToKKyAgICAgICAgIyBPUFRJT05BTCBFWFRFTlNJT04KKyAgICAgICAgIyBUZXN0
IGZvciB0aGUgb3B0aW9uYWwgREIgQVBJIDIuMCBleHRlbnNpb24sIHdoZXJlIHRoZSBleGNlcHRp
b25zCisgICAgICAgICMgYXJlIGV4cG9zZWQgYXMgYXR0cmlidXRlcyBvbiB0aGUgQ29ubmVjdGlv
biBvYmplY3QKKyAgICAgICAgIyBJIGZpZ3VyZSB0aGlzIG9wdGlvbmFsIGV4dGVuc2lvbiB3aWxs
IGJlIGltcGxlbWVudGVkIGJ5IGFueQorICAgICAgICAjIGRyaXZlciBhdXRob3Igd2hvIGlzIHVz
aW5nIHRoaXMgdGVzdCBzdWl0ZSwgc28gaXQgaXMgZW5hYmxlZAorICAgICAgICAjIGJ5IGRlZmF1
bHQuCisgICAgICAgIGNvbiA9IHNlbGYuX2Nvbm5lY3QoKQorICAgICAgICBkcnYgPSBzZWxmLmRy
aXZlcgorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY29uLldhcm5pbmcgaXMgZHJ2Lldhcm5pbmcp
CisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhjb24uRXJyb3IgaXMgZHJ2LkVycm9yKQorICAgICAg
ICBzZWxmLmZhaWxVbmxlc3MoY29uLkludGVyZmFjZUVycm9yIGlzIGRydi5JbnRlcmZhY2VFcnJv
cikKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNvbi5EYXRhYmFzZUVycm9yIGlzIGRydi5EYXRh
YmFzZUVycm9yKQorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY29uLk9wZXJhdGlvbmFsRXJyb3Ig
aXMgZHJ2Lk9wZXJhdGlvbmFsRXJyb3IpCisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhjb24uSW50
ZWdyaXR5RXJyb3IgaXMgZHJ2LkludGVncml0eUVycm9yKQorICAgICAgICBzZWxmLmZhaWxVbmxl
c3MoY29uLkludGVybmFsRXJyb3IgaXMgZHJ2LkludGVybmFsRXJyb3IpCisgICAgICAgIHNlbGYu
ZmFpbFVubGVzcyhjb24uUHJvZ3JhbW1pbmdFcnJvciBpcyBkcnYuUHJvZ3JhbW1pbmdFcnJvcikK
KyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNvbi5Ob3RTdXBwb3J0ZWRFcnJvciBpcyBkcnYuTm90
U3VwcG9ydGVkRXJyb3IpCisKKworICAgIGRlZiB0ZXN0X2NvbW1pdChzZWxmKToKKyAgICAgICAg
Y29uID0gc2VsZi5fY29ubmVjdCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgQ29tbWl0
IG11c3Qgd29yaywgZXZlbiBpZiBpdCBkb2Vzbid0IGRvIGFueXRoaW5nCisgICAgICAgICAgICBj
b24uY29tbWl0KCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpCisK
KyAgICBkZWYgdGVzdF9yb2xsYmFjayhzZWxmKToKKyAgICAgICAgY29uID0gc2VsZi5fY29ubmVj
dCgpCisgICAgICAgICMgSWYgcm9sbGJhY2sgaXMgZGVmaW5lZCwgaXQgc2hvdWxkIGVpdGhlciB3
b3JrIG9yIHRocm93CisgICAgICAgICMgdGhlIGRvY3VtZW50ZWQgZXhjZXB0aW9uCisgICAgICAg
IGlmIGhhc2F0dHIoY29uLCdyb2xsYmFjaycpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgICAgIGNvbi5yb2xsYmFjaygpCisgICAgICAgICAgICBleGNlcHQgc2VsZi5kcml2ZXIuTm90
U3VwcG9ydGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgIAorICAgIGRlZiB0ZXN0
X2N1cnNvcihzZWxmKToKKyAgICAgICAgY29uID0gc2VsZi5fY29ubmVjdCgpCisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIGN1ciA9IGNvbi5jdXJzb3IoKQorICAgICAgICBmaW5hbGx5OgorICAg
ICAgICAgICAgY29uLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2N1cnNvcl9pc29sYXRpb24oc2Vs
Zik6CisgICAgICAgIGNvbiA9IHNlbGYuX2Nvbm5lY3QoKQorICAgICAgICB0cnk6CisgICAgICAg
ICAgICAjIE1ha2Ugc3VyZSBjdXJzb3JzIGNyZWF0ZWQgZnJvbSB0aGUgc2FtZSBjb25uZWN0aW9u
IGhhdmUKKyAgICAgICAgICAgICMgdGhlIGRvY3VtZW50ZWQgdHJhbnNhY3Rpb24gaXNvbGF0aW9u
IGxldmVsCisgICAgICAgICAgICBjdXIxID0gY29uLmN1cnNvcigpCisgICAgICAgICAgICBjdXIy
ID0gY29uLmN1cnNvcigpCisgICAgICAgICAgICBzZWxmLmV4ZWN1dGVEREwxKGNvbixjdXIxKQor
ICAgICAgICAgICAgY3VyMS5leGVjdXRlKCJpbnNlcnQgaW50byAlc2Jvb3plIHZhbHVlcyAoJ1Zp
Y3RvcmlhIEJpdHRlcicpIiAlICgKKyAgICAgICAgICAgICAgICBzZWxmLnRhYmxlX3ByZWZpeAor
ICAgICAgICAgICAgICAgICkpCisgICAgICAgICAgICBjdXIyLmV4ZWN1dGUoInNlbGVjdCBuYW1l
IGZyb20gJXNib296ZSIgJSBzZWxmLnRhYmxlX3ByZWZpeCkKKyAgICAgICAgICAgIGJvb3plID0g
Y3VyMi5mZXRjaGFsbCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihib296ZSks
MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGJvb3plWzBdKSwxKQorICAgICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChib296ZVswXVswXSwnVmljdG9yaWEgQml0dGVyJykKKyAg
ICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9k
ZXNjcmlwdGlvbihzZWxmKToKKyAgICAgICAgY29uID0gc2VsZi5fY29ubmVjdCgpCisgICAgICAg
IHRyeToKKyAgICAgICAgICAgIGN1ciA9IGNvbi5jdXJzb3IoKQorICAgICAgICAgICAgc2VsZi5l
eGVjdXRlRERMMShjb24sY3VyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdXIuZGVz
Y3JpcHRpb24sTm9uZSwKKyAgICAgICAgICAgICAgICAnY3Vyc29yLmRlc2NyaXB0aW9uIHNob3Vs
ZCBiZSBub25lIGFmdGVyIGV4ZWN1dGluZyBhICcKKyAgICAgICAgICAgICAgICAnc3RhdGVtZW50
IHRoYXQgY2FuIHJldHVybiBubyByb3dzIChzdWNoIGFzIERETCknCisgICAgICAgICAgICAgICAg
KQorICAgICAgICAgICAgY3VyLmV4ZWN1dGUoJ3NlbGVjdCBuYW1lIGZyb20gJXNib296ZScgJSBz
ZWxmLnRhYmxlX3ByZWZpeCkKKyAgICAgICAgICAgIHNlbGYuY29tbWl0KGNvbikKKyAgICAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGN1ci5kZXNjcmlwdGlvbiksMSwKKyAgICAgICAgICAg
ICAgICAnY3Vyc29yLmRlc2NyaXB0aW9uIGRlc2NyaWJlcyB0b28gbWFueSBjb2x1bW5zJworICAg
ICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGN1ci5kZXNj
cmlwdGlvblswXSksNywKKyAgICAgICAgICAgICAgICAnY3Vyc29yLmRlc2NyaXB0aW9uW3hdIHR1
cGxlcyBtdXN0IGhhdmUgNyBlbGVtZW50cycKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGN1ci5kZXNjcmlwdGlvblswXVswXS5sb3dlcigpLCduYW1lJywK
KyAgICAgICAgICAgICAgICAnY3Vyc29yLmRlc2NyaXB0aW9uW3hdWzBdIG11c3QgcmV0dXJuIGNv
bHVtbiBuYW1lJworICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoY3VyLmRlc2NyaXB0aW9uWzBdWzFdLHNlbGYuZHJpdmVyLlNUUklORywKKyAgICAgICAgICAg
ICAgICAnY3Vyc29yLmRlc2NyaXB0aW9uW3hdWzFdIG11c3QgcmV0dXJuIGNvbHVtbiB0eXBlLiBH
b3QgJXInCisgICAgICAgICAgICAgICAgICAgICUgY3VyLmRlc2NyaXB0aW9uWzBdWzFdCisgICAg
ICAgICAgICAgICAgKQorCisgICAgICAgICAgICAjIE1ha2Ugc3VyZSBzZWxmLmRlc2NyaXB0aW9u
IGdldHMgcmVzZXQKKyAgICAgICAgICAgIHNlbGYuZXhlY3V0ZURETDIoY29uLGN1cikKKyAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3VyLmRlc2NyaXB0aW9uLE5vbmUsCisgICAgICAgICAg
ICAgICAgJ2N1cnNvci5kZXNjcmlwdGlvbiBub3QgYmVpbmcgc2V0IHRvIE5vbmUgd2hlbiBleGVj
dXRpbmcgJworICAgICAgICAgICAgICAgICduby1yZXN1bHQgc3RhdGVtZW50cyAoZWcuIERETCkn
CisgICAgICAgICAgICAgICAgKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgY29uLmNs
b3NlKCkKKworICAgIGRlZiB0ZXN0X3Jvd2NvdW50KHNlbGYpOgorICAgICAgICBjb24gPSBzZWxm
Ll9jb25uZWN0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY3VyID0gY29uLmN1cnNvcigp
CisgICAgICAgICAgICBzZWxmLmV4ZWN1dGVEREwxKGNvbixjdXIpCisgICAgICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGN1ci5yb3djb3VudCwtMSwKKyAgICAgICAgICAgICAgICAnY3Vyc29yLnJv
d2NvdW50IHNob3VsZCBiZSAtMSBhZnRlciBleGVjdXRpbmcgbm8tcmVzdWx0ICcKKyAgICAgICAg
ICAgICAgICAnc3RhdGVtZW50cycKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBjdXIu
ZXhlY3V0ZSgiaW5zZXJ0IGludG8gJXNib296ZSB2YWx1ZXMgKCdWaWN0b3JpYSBCaXR0ZXInKSIg
JSAoCisgICAgICAgICAgICAgICAgc2VsZi50YWJsZV9wcmVmaXgKKyAgICAgICAgICAgICAgICAp
KQorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGN1ci5yb3djb3VudCBpbiAoLTEsMSksCisg
ICAgICAgICAgICAgICAgJ2N1cnNvci5yb3djb3VudCBzaG91bGQgPT0gbnVtYmVyIG9yIHJvd3Mg
aW5zZXJ0ZWQsIG9yICcKKyAgICAgICAgICAgICAgICAnc2V0IHRvIC0xIGFmdGVyIGV4ZWN1dGlu
ZyBhbiBpbnNlcnQgc3RhdGVtZW50JworICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIGN1
ci5leGVjdXRlKCJzZWxlY3QgbmFtZSBmcm9tICVzYm9vemUiICUgc2VsZi50YWJsZV9wcmVmaXgp
CisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY3VyLnJvd2NvdW50IGluICgtMSwxKSwKKyAg
ICAgICAgICAgICAgICAnY3Vyc29yLnJvd2NvdW50IHNob3VsZCA9PSBudW1iZXIgb2Ygcm93cyBy
ZXR1cm5lZCwgb3IgJworICAgICAgICAgICAgICAgICdzZXQgdG8gLTEgYWZ0ZXIgZXhlY3V0aW5n
IGEgc2VsZWN0IHN0YXRlbWVudCcKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBzZWxm
LmNvbW1pdChjb24pCisgICAgICAgICAgICBzZWxmLmV4ZWN1dGVEREwyKGNvbixjdXIpCisgICAg
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN1ci5yb3djb3VudCwtMSwKKyAgICAgICAgICAgICAg
ICAnY3Vyc29yLnJvd2NvdW50IG5vdCBiZWluZyByZXNldCB0byAtMSBhZnRlciBleGVjdXRpbmcg
JworICAgICAgICAgICAgICAgICduby1yZXN1bHQgc3RhdGVtZW50cycKKyAgICAgICAgICAgICAg
ICApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBjb24uY2xvc2UoKQorCisgICAgbG93
ZXJfZnVuYyA9ICdsb3dlcicKKyAgICBkZWYgdGVzdF9jYWxscHJvYyhzZWxmKToKKyAgICAgICAg
Y29uID0gc2VsZi5fY29ubmVjdCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGN1ciA9IGNv
bi5jdXJzb3IoKQorICAgICAgICAgICAgaWYgc2VsZi5sb3dlcl9mdW5jIGFuZCBoYXNhdHRyKGN1
ciwnY2FsbHByb2MnKToKKyAgICAgICAgICAgICAgICByID0gY3VyLmNhbGxwcm9jKHNlbGYubG93
ZXJfZnVuYywoJ0ZPTycsKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihy
KSwxKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoclswXSwnRk9PJykKKyAgICAg
ICAgICAgICAgICByID0gY3VyLmZldGNoYWxsKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGxlbihyKSwxLCdjYWxscHJvYyBwcm9kdWNlZCBubyByZXN1bHQgc2V0JykKKyAgICAg
ICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyWzBdKSwxLAorICAgICAgICAgICAgICAg
ICAgICAnY2FsbHByb2MgcHJvZHVjZWQgaW52YWxpZCByZXN1bHQgc2V0JworICAgICAgICAgICAg
ICAgICAgICApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyWzBdWzBdLCdmb28n
LAorICAgICAgICAgICAgICAgICAgICAnY2FsbHByb2MgcHJvZHVjZWQgaW52YWxpZCByZXN1bHRz
JworICAgICAgICAgICAgICAgICAgICApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBj
b24uY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIGNvbiA9IHNl
bGYuX2Nvbm5lY3QoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjdXIgPSBjb24uY3Vyc29y
KCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpCisKKyAgICAgICAg
IyBjdXJzb3IuZXhlY3V0ZSBzaG91bGQgcmFpc2UgYW4gRXJyb3IgaWYgY2FsbGVkIGFmdGVyIGNv
bm5lY3Rpb24KKyAgICAgICAgIyBjbG9zZWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2Vs
Zi5kcml2ZXIuRXJyb3Isc2VsZi5leGVjdXRlRERMMSxjb24sY3VyKQorCisgICAgICAgICMgY29u
bmVjdGlvbi5jb21taXQgc2hvdWxkIHJhaXNlIGFuIEVycm9yIGlmIGNhbGxlZCBhZnRlciBjb25u
ZWN0aW9uJworICAgICAgICAjIGNsb3NlZC4nCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNl
bGYuZHJpdmVyLkVycm9yLGNvbi5jb21taXQpCisKKyAgICAgICAgIyBjb25uZWN0aW9uLmNsb3Nl
IHNob3VsZCByYWlzZSBhbiBFcnJvciBpZiBjYWxsZWQgbW9yZSB0aGFuIG9uY2UKKyAgICAgICAg
c2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5kcml2ZXIuRXJyb3IsY29uLmNsb3NlKQorCisgICAgZGVm
IHRlc3RfZXhlY3V0ZShzZWxmKToKKyAgICAgICAgY29uID0gc2VsZi5fY29ubmVjdCgpCisgICAg
ICAgIHRyeToKKyAgICAgICAgICAgIGN1ciA9IGNvbi5jdXJzb3IoKQorICAgICAgICAgICAgc2Vs
Zi5fcGFyYW1pbnNlcnQoY29uLGN1cikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGNv
bi5jbG9zZSgpCisKKyAgICBkZWYgX3BhcmFtaW5zZXJ0KHNlbGYsY29uLGN1cik6CisgICAgICAg
IHNlbGYuZXhlY3V0ZURETDEoY29uLGN1cikKKyAgICAgICAgY3VyLmV4ZWN1dGUoImluc2VydCBp
bnRvICVzYm9vemUgdmFsdWVzICgnVmljdG9yaWEgQml0dGVyJykiICUgKAorICAgICAgICAgICAg
c2VsZi50YWJsZV9wcmVmaXgKKyAgICAgICAgICAgICkpCisgICAgICAgIHNlbGYuZmFpbFVubGVz
cyhjdXIucm93Y291bnQgaW4gKC0xLDEpKQorCisgICAgICAgIGlmIHNlbGYuZHJpdmVyLnBhcmFt
c3R5bGUgPT0gJ3FtYXJrJzoKKyAgICAgICAgICAgIGN1ci5leGVjdXRlKAorICAgICAgICAgICAg
ICAgICdpbnNlcnQgaW50byAlc2Jvb3plIHZhbHVlcyAoPyknICUgc2VsZi50YWJsZV9wcmVmaXgs
CisgICAgICAgICAgICAgICAgKCJDb29wZXIncyIsKQorICAgICAgICAgICAgICAgICkKKyAgICAg
ICAgZWxpZiBzZWxmLmRyaXZlci5wYXJhbXN0eWxlID09ICdudW1lcmljJzoKKyAgICAgICAgICAg
IGN1ci5leGVjdXRlKAorICAgICAgICAgICAgICAgICdpbnNlcnQgaW50byAlc2Jvb3plIHZhbHVl
cyAoOjEpJyAlIHNlbGYudGFibGVfcHJlZml4LAorICAgICAgICAgICAgICAgICgiQ29vcGVyJ3Mi
LCkKKyAgICAgICAgICAgICAgICApCisgICAgICAgIGVsaWYgc2VsZi5kcml2ZXIucGFyYW1zdHls
ZSA9PSAnbmFtZWQnOgorICAgICAgICAgICAgY3VyLmV4ZWN1dGUoCisgICAgICAgICAgICAgICAg
J2luc2VydCBpbnRvICVzYm9vemUgdmFsdWVzICg6YmVlciknICUgc2VsZi50YWJsZV9wcmVmaXgs
IAorICAgICAgICAgICAgICAgIHsnYmVlcic6IkNvb3BlcidzIn0KKyAgICAgICAgICAgICAgICAp
CisgICAgICAgIGVsaWYgc2VsZi5kcml2ZXIucGFyYW1zdHlsZSA9PSAnZm9ybWF0JzoKKyAgICAg
ICAgICAgIGN1ci5leGVjdXRlKAorICAgICAgICAgICAgICAgICdpbnNlcnQgaW50byAlc2Jvb3pl
IHZhbHVlcyAoJSVzKScgJSBzZWxmLnRhYmxlX3ByZWZpeCwKKyAgICAgICAgICAgICAgICAoIkNv
b3BlcidzIiwpCisgICAgICAgICAgICAgICAgKQorICAgICAgICBlbGlmIHNlbGYuZHJpdmVyLnBh
cmFtc3R5bGUgPT0gJ3B5Zm9ybWF0JzoKKyAgICAgICAgICAgIGN1ci5leGVjdXRlKAorICAgICAg
ICAgICAgICAgICdpbnNlcnQgaW50byAlc2Jvb3plIHZhbHVlcyAoJSUoYmVlcilzKScgJSBzZWxm
LnRhYmxlX3ByZWZpeCwKKyAgICAgICAgICAgICAgICB7J2JlZXInOiJDb29wZXIncyJ9CisgICAg
ICAgICAgICAgICAgKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdJbnZh
bGlkIHBhcmFtc3R5bGUnKQorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY3VyLnJvd2NvdW50IGlu
ICgtMSwxKSkKKworICAgICAgICBjdXIuZXhlY3V0ZSgnc2VsZWN0IG5hbWUgZnJvbSAlc2Jvb3pl
JyAlIHNlbGYudGFibGVfcHJlZml4KQorICAgICAgICByZXMgPSBjdXIuZmV0Y2hhbGwoKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXMpLDIsJ2N1cnNvci5mZXRjaGFsbCByZXR1cm5l
ZCB0b28gZmV3IHJvd3MnKQorICAgICAgICBiZWVycyA9IFtyZXNbMF1bMF0scmVzWzFdWzBdXQor
ICAgICAgICBiZWVycy5zb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiZWVyc1swXSwi
Q29vcGVyJ3MiLAorICAgICAgICAgICAgJ2N1cnNvci5mZXRjaGFsbCByZXRyaWV2ZWQgaW5jb3Jy
ZWN0IGRhdGEsIG9yIGRhdGEgaW5zZXJ0ZWQgJworICAgICAgICAgICAgJ2luY29ycmVjdGx5Jwor
ICAgICAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJlZXJzWzFdLCJWaWN0b3Jp
YSBCaXR0ZXIiLAorICAgICAgICAgICAgJ2N1cnNvci5mZXRjaGFsbCByZXRyaWV2ZWQgaW5jb3Jy
ZWN0IGRhdGEsIG9yIGRhdGEgaW5zZXJ0ZWQgJworICAgICAgICAgICAgJ2luY29ycmVjdGx5Jwor
ICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3RfZXhlY3V0ZW1hbnkoc2VsZik6CisgICAgICAg
IGNvbiA9IHNlbGYuX2Nvbm5lY3QoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjdXIgPSBj
b24uY3Vyc29yKCkKKyAgICAgICAgICAgIHNlbGYuZXhlY3V0ZURETDEoY29uLGN1cikKKyAgICAg
ICAgICAgIGxhcmdzID0gWyAoIkNvb3BlcidzIiwpICwgKCJCb2FnJ3MiLCkgXQorICAgICAgICAg
ICAgbWFyZ3MgPSBbIHsnYmVlcic6ICJDb29wZXIncyJ9LCB7J2JlZXInOiAiQm9hZydzIn0gXQor
ICAgICAgICAgICAgaWYgc2VsZi5kcml2ZXIucGFyYW1zdHlsZSA9PSAncW1hcmsnOgorICAgICAg
ICAgICAgICAgIGN1ci5leGVjdXRlbWFueSgKKyAgICAgICAgICAgICAgICAgICAgJ2luc2VydCBp
bnRvICVzYm9vemUgdmFsdWVzICg/KScgJSBzZWxmLnRhYmxlX3ByZWZpeCwKKyAgICAgICAgICAg
ICAgICAgICAgbGFyZ3MKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgZWxpZiBz
ZWxmLmRyaXZlci5wYXJhbXN0eWxlID09ICdudW1lcmljJzoKKyAgICAgICAgICAgICAgICBjdXIu
ZXhlY3V0ZW1hbnkoCisgICAgICAgICAgICAgICAgICAgICdpbnNlcnQgaW50byAlc2Jvb3plIHZh
bHVlcyAoOjEpJyAlIHNlbGYudGFibGVfcHJlZml4LAorICAgICAgICAgICAgICAgICAgICBsYXJn
cworICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBlbGlmIHNlbGYuZHJpdmVyLnBh
cmFtc3R5bGUgPT0gJ25hbWVkJzoKKyAgICAgICAgICAgICAgICBjdXIuZXhlY3V0ZW1hbnkoCisg
ICAgICAgICAgICAgICAgICAgICdpbnNlcnQgaW50byAlc2Jvb3plIHZhbHVlcyAoOmJlZXIpJyAl
IHNlbGYudGFibGVfcHJlZml4LAorICAgICAgICAgICAgICAgICAgICBtYXJncworICAgICAgICAg
ICAgICAgICAgICApCisgICAgICAgICAgICBlbGlmIHNlbGYuZHJpdmVyLnBhcmFtc3R5bGUgPT0g
J2Zvcm1hdCc6CisgICAgICAgICAgICAgICAgY3VyLmV4ZWN1dGVtYW55KAorICAgICAgICAgICAg
ICAgICAgICAnaW5zZXJ0IGludG8gJXNib296ZSB2YWx1ZXMgKCUlcyknICUgc2VsZi50YWJsZV9w
cmVmaXgsCisgICAgICAgICAgICAgICAgICAgIGxhcmdzCisgICAgICAgICAgICAgICAgICAgICkK
KyAgICAgICAgICAgIGVsaWYgc2VsZi5kcml2ZXIucGFyYW1zdHlsZSA9PSAncHlmb3JtYXQnOgor
ICAgICAgICAgICAgICAgIGN1ci5leGVjdXRlbWFueSgKKyAgICAgICAgICAgICAgICAgICAgJ2lu
c2VydCBpbnRvICVzYm9vemUgdmFsdWVzICglJShiZWVyKXMpJyAlICgKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYudGFibGVfcHJlZml4CisgICAgICAgICAgICAgICAgICAgICAgICApLAor
ICAgICAgICAgICAgICAgICAgICBtYXJncworICAgICAgICAgICAgICAgICAgICApCisgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnVW5rbm93biBwYXJhbXN0eWxl
JykKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhjdXIucm93Y291bnQgaW4gKC0xLDIpLAor
ICAgICAgICAgICAgICAgICdpbnNlcnQgdXNpbmcgY3Vyc29yLmV4ZWN1dGVtYW55IHNldCBjdXJz
b3Iucm93Y291bnQgdG8gJworICAgICAgICAgICAgICAgICdpbmNvcnJlY3QgdmFsdWUgJXInICUg
Y3VyLnJvd2NvdW50CisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgY3VyLmV4ZWN1dGUo
J3NlbGVjdCBuYW1lIGZyb20gJXNib296ZScgJSBzZWxmLnRhYmxlX3ByZWZpeCkKKyAgICAgICAg
ICAgIHJlcyA9IGN1ci5mZXRjaGFsbCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxl
bihyZXMpLDIsCisgICAgICAgICAgICAgICAgJ2N1cnNvci5mZXRjaGFsbCByZXRyaWV2ZWQgaW5j
b3JyZWN0IG51bWJlciBvZiByb3dzJworICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIGJl
ZXJzID0gW3Jlc1swXVswXSxyZXNbMV1bMF1dCisgICAgICAgICAgICBiZWVycy5zb3J0KCkKKyAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmVlcnNbMF0sIkJvYWcncyIsJ2luY29ycmVjdCBk
YXRhIHJldHJpZXZlZCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJlZXJzWzFdLCJD
b29wZXIncyIsJ2luY29ycmVjdCBkYXRhIHJldHJpZXZlZCcpCisgICAgICAgIGZpbmFsbHk6Cisg
ICAgICAgICAgICBjb24uY2xvc2UoKQorCisgICAgZGVmIHRlc3RfZmV0Y2hvbmUoc2VsZik6Cisg
ICAgICAgIGNvbiA9IHNlbGYuX2Nvbm5lY3QoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBj
dXIgPSBjb24uY3Vyc29yKCkKKworICAgICAgICAgICAgIyBjdXJzb3IuZmV0Y2hvbmUgc2hvdWxk
IHJhaXNlIGFuIEVycm9yIGlmIGNhbGxlZCBiZWZvcmUKKyAgICAgICAgICAgICMgZXhlY3V0aW5n
IGEgc2VsZWN0LXR5cGUgcXVlcnkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYu
ZHJpdmVyLkVycm9yLGN1ci5mZXRjaG9uZSkKKworICAgICAgICAgICAgIyBjdXJzb3IuZmV0Y2hv
bmUgc2hvdWxkIHJhaXNlIGFuIEVycm9yIGlmIGNhbGxlZCBhZnRlcgorICAgICAgICAgICAgIyBl
eGVjdXRpbmcgYSBxdWVyeSB0aGF0IGNhbm5ub3QgcmV0dXJuIHJvd3MKKyAgICAgICAgICAgIHNl
bGYuZXhlY3V0ZURETDEoY29uLGN1cikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNl
bGYuZHJpdmVyLkVycm9yLGN1ci5mZXRjaG9uZSkKKworICAgICAgICAgICAgY3VyLmV4ZWN1dGUo
J3NlbGVjdCBuYW1lIGZyb20gJXNib296ZScgJSBzZWxmLnRhYmxlX3ByZWZpeCkKKyAgICAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3VyLmZldGNob25lKCksTm9uZSwKKyAgICAgICAgICAgICAg
ICAnY3Vyc29yLmZldGNob25lIHNob3VsZCByZXR1cm4gTm9uZSBpZiBhIHF1ZXJ5IHJldHJpZXZl
cyAnCisgICAgICAgICAgICAgICAgJ25vIHJvd3MnCisgICAgICAgICAgICAgICAgKQorICAgICAg
ICAgICAgc2VsZi5mYWlsVW5sZXNzKGN1ci5yb3djb3VudCBpbiAoLTEsMCkpCisKKyAgICAgICAg
ICAgICMgY3Vyc29yLmZldGNob25lIHNob3VsZCByYWlzZSBhbiBFcnJvciBpZiBjYWxsZWQgYWZ0
ZXIKKyAgICAgICAgICAgICMgZXhlY3V0aW5nIGEgcXVlcnkgdGhhdCBjYW5ubm90IHJldHVybiBy
b3dzCisgICAgICAgICAgICBjdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gJXNib296ZSB2YWx1ZXMg
KCdWaWN0b3JpYSBCaXR0ZXInKSIgJSAoCisgICAgICAgICAgICAgICAgc2VsZi50YWJsZV9wcmVm
aXgKKyAgICAgICAgICAgICAgICApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2Vs
Zi5kcml2ZXIuRXJyb3IsY3VyLmZldGNob25lKQorCisgICAgICAgICAgICBjdXIuZXhlY3V0ZSgn
c2VsZWN0IG5hbWUgZnJvbSAlc2Jvb3plJyAlIHNlbGYudGFibGVfcHJlZml4KQorICAgICAgICAg
ICAgciA9IGN1ci5mZXRjaG9uZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihy
KSwxLAorICAgICAgICAgICAgICAgICdjdXJzb3IuZmV0Y2hvbmUgc2hvdWxkIGhhdmUgcmV0cmll
dmVkIGEgc2luZ2xlIHJvdycKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHJbMF0sJ1ZpY3RvcmlhIEJpdHRlcicsCisgICAgICAgICAgICAgICAgJ2N1cnNv
ci5mZXRjaG9uZSByZXRyaWV2ZWQgaW5jb3JyZWN0IGRhdGEnCisgICAgICAgICAgICAgICAgKQor
ICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdXIuZmV0Y2hvbmUoKSxOb25lLAorICAgICAg
ICAgICAgICAgICdjdXJzb3IuZmV0Y2hvbmUgc2hvdWxkIHJldHVybiBOb25lIGlmIG5vIG1vcmUg
cm93cyBhdmFpbGFibGUnCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgc2VsZi5mYWls
VW5sZXNzKGN1ci5yb3djb3VudCBpbiAoLTEsMSkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAg
ICAgICBjb24uY2xvc2UoKQorCisgICAgc2FtcGxlcyA9IFsKKyAgICAgICAgJ0Nhcmx0b24gQ29s
ZCcsCisgICAgICAgICdDYXJsdG9uIERyYWZ0JywKKyAgICAgICAgJ01vdW50YWluIEdvYXQnLAor
ICAgICAgICAnUmVkYmFjaycsCisgICAgICAgICdWaWN0b3JpYSBCaXR0ZXInLAorICAgICAgICAn
WFhYWCcKKyAgICAgICAgXQorCisgICAgZGVmIF9wb3B1bGF0ZShzZWxmKToKKyAgICAgICAgJycn
IFJldHVybiBhIGxpc3Qgb2Ygc3FsIGNvbW1hbmRzIHRvIHNldHVwIHRoZSBEQiBmb3IgdGhlIGZl
dGNoCisgICAgICAgICAgICB0ZXN0cy4KKyAgICAgICAgJycnCisgICAgICAgIHBvcHVsYXRlID0g
WworICAgICAgICAgICAgImluc2VydCBpbnRvICVzYm9vemUgdmFsdWVzICgnJXMnKSIgJSAoc2Vs
Zi50YWJsZV9wcmVmaXgscykgCisgICAgICAgICAgICAgICAgZm9yIHMgaW4gc2VsZi5zYW1wbGVz
CisgICAgICAgICAgICBdCisgICAgICAgIHJldHVybiBwb3B1bGF0ZQorCisgICAgZGVmIHRlc3Rf
ZmV0Y2htYW55KHNlbGYpOgorICAgICAgICBjb24gPSBzZWxmLl9jb25uZWN0KCkKKyAgICAgICAg
dHJ5OgorICAgICAgICAgICAgY3VyID0gY29uLmN1cnNvcigpCisKKyAgICAgICAgICAgICMgY3Vy
c29yLmZldGNobWFueSBzaG91bGQgcmFpc2UgYW4gRXJyb3IgaWYgY2FsbGVkIHdpdGhvdXQKKyAg
ICAgICAgICAgICNpc3N1aW5nIGEgcXVlcnkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2Vz
KHNlbGYuZHJpdmVyLkVycm9yLGN1ci5mZXRjaG1hbnksNCkKKworICAgICAgICAgICAgc2VsZi5l
eGVjdXRlRERMMShjb24sY3VyKQorICAgICAgICAgICAgZm9yIHNxbCBpbiBzZWxmLl9wb3B1bGF0
ZSgpOgorICAgICAgICAgICAgICAgIGN1ci5leGVjdXRlKHNxbCkKKworICAgICAgICAgICAgY3Vy
LmV4ZWN1dGUoJ3NlbGVjdCBuYW1lIGZyb20gJXNib296ZScgJSBzZWxmLnRhYmxlX3ByZWZpeCkK
KyAgICAgICAgICAgIHIgPSBjdXIuZmV0Y2htYW55KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwobGVuKHIpLDEsCisgICAgICAgICAgICAgICAgJ2N1cnNvci5mZXRjaG1hbnkgcmV0cmll
dmVkIGluY29ycmVjdCBudW1iZXIgb2Ygcm93cywgJworICAgICAgICAgICAgICAgICdkZWZhdWx0
IG9mIGFycmF5c2l6ZSBpcyBvbmUuJworICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIGN1
ci5hcnJheXNpemU9MTAKKyAgICAgICAgICAgIHIgPSBjdXIuZmV0Y2htYW55KDMpICMgU2hvdWxk
IGdldCAzIHJvd3MKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHIpLDMsCisgICAg
ICAgICAgICAgICAgJ2N1cnNvci5mZXRjaG1hbnkgcmV0cmlldmVkIGluY29ycmVjdCBudW1iZXIg
b2Ygcm93cycKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICByID0gY3VyLmZldGNobWFu
eSg0KSAjIFNob3VsZCBnZXQgMiBtb3JlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxl
bihyKSwyLAorICAgICAgICAgICAgICAgICdjdXJzb3IuZmV0Y2htYW55IHJldHJpZXZlZCBpbmNv
cnJlY3QgbnVtYmVyIG9mIHJvd3MnCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgciA9
IGN1ci5mZXRjaG1hbnkoNCkgIyBTaG91bGQgYmUgYW4gZW1wdHkgc2VxdWVuY2UKKyAgICAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHIpLDAsCisgICAgICAgICAgICAgICAgJ2N1cnNvci5m
ZXRjaG1hbnkgc2hvdWxkIHJldHVybiBhbiBlbXB0eSBzZXF1ZW5jZSBhZnRlciAnCisgICAgICAg
ICAgICAgICAgJ3Jlc3VsdHMgYXJlIGV4aGF1c3RlZCcKKyAgICAgICAgICAgICkKKyAgICAgICAg
ICAgIHNlbGYuZmFpbFVubGVzcyhjdXIucm93Y291bnQgaW4gKC0xLDYpKQorCisgICAgICAgICAg
ICAjIFNhbWUgYXMgYWJvdmUsIHVzaW5nIGN1cnNvci5hcnJheXNpemUKKyAgICAgICAgICAgIGN1
ci5hcnJheXNpemU9NAorICAgICAgICAgICAgY3VyLmV4ZWN1dGUoJ3NlbGVjdCBuYW1lIGZyb20g
JXNib296ZScgJSBzZWxmLnRhYmxlX3ByZWZpeCkKKyAgICAgICAgICAgIHIgPSBjdXIuZmV0Y2ht
YW55KCkgIyBTaG91bGQgZ2V0IDQgcm93cworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChs
ZW4ociksNCwKKyAgICAgICAgICAgICAgICAnY3Vyc29yLmFycmF5c2l6ZSBub3QgYmVpbmcgaG9u
b3VyZWQgYnkgZmV0Y2htYW55JworICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHIgPSBj
dXIuZmV0Y2htYW55KCkgIyBTaG91bGQgZ2V0IDIgbW9yZQorICAgICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChsZW4ociksMikKKyAgICAgICAgICAgIHIgPSBjdXIuZmV0Y2htYW55KCkgIyBTaG91
bGQgYmUgYW4gZW1wdHkgc2VxdWVuY2UKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVu
KHIpLDApCisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY3VyLnJvd2NvdW50IGluICgtMSw2
KSkKKworICAgICAgICAgICAgY3VyLmFycmF5c2l6ZT02CisgICAgICAgICAgICBjdXIuZXhlY3V0
ZSgnc2VsZWN0IG5hbWUgZnJvbSAlc2Jvb3plJyAlIHNlbGYudGFibGVfcHJlZml4KQorICAgICAg
ICAgICAgcm93cyA9IGN1ci5mZXRjaG1hbnkoKSAjIFNob3VsZCBnZXQgYWxsIHJvd3MKKyAgICAg
ICAgICAgIHNlbGYuZmFpbFVubGVzcyhjdXIucm93Y291bnQgaW4gKC0xLDYpKQorICAgICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocm93cyksNikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwobGVuKHJvd3MpLDYpCisgICAgICAgICAgICByb3dzID0gW3JbMF0gZm9yIHIgaW4gcm93
c10KKyAgICAgICAgICAgIHJvd3Muc29ydCgpCisgICAgICAgICAgCisgICAgICAgICAgICAjIE1h
a2Ugc3VyZSB3ZSBnZXQgdGhlIHJpZ2h0IGRhdGEgYmFjayBvdXQKKyAgICAgICAgICAgIGZvciBp
IGluIHJhbmdlKDAsNik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3dzW2ld
LHNlbGYuc2FtcGxlc1tpXSwKKyAgICAgICAgICAgICAgICAgICAgJ2luY29ycmVjdCBkYXRhIHJl
dHJpZXZlZCBieSBjdXJzb3IuZmV0Y2htYW55JworICAgICAgICAgICAgICAgICAgICApCisKKyAg
ICAgICAgICAgIHJvd3MgPSBjdXIuZmV0Y2htYW55KCkgIyBTaG91bGQgcmV0dXJuIGFuIGVtcHR5
IGxpc3QKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJvd3MpLDAsCisgICAgICAg
ICAgICAgICAgJ2N1cnNvci5mZXRjaG1hbnkgc2hvdWxkIHJldHVybiBhbiBlbXB0eSBzZXF1ZW5j
ZSBpZiAnCisgICAgICAgICAgICAgICAgJ2NhbGxlZCBhZnRlciB0aGUgd2hvbGUgcmVzdWx0IHNl
dCBoYXMgYmVlbiBmZXRjaGVkJworICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHNlbGYu
ZmFpbFVubGVzcyhjdXIucm93Y291bnQgaW4gKC0xLDYpKQorICAgICAgICAgICAgc2VsZi5jb21t
aXQoY29uKQorCisgICAgICAgICAgICBzZWxmLmV4ZWN1dGVEREwyKGNvbixjdXIpCisgICAgICAg
ICAgICBjdXIuZXhlY3V0ZSgnc2VsZWN0IG5hbWUgZnJvbSAlc2JhcmZseXMnICUgc2VsZi50YWJs
ZV9wcmVmaXgpCisgICAgICAgICAgICByID0gY3VyLmZldGNobWFueSgpICMgU2hvdWxkIGdldCBl
bXB0eSBzZXF1ZW5jZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ociksMCwKKyAg
ICAgICAgICAgICAgICAnY3Vyc29yLmZldGNobWFueSBzaG91bGQgcmV0dXJuIGFuIGVtcHR5IHNl
cXVlbmNlIGlmICcKKyAgICAgICAgICAgICAgICAncXVlcnkgcmV0cmlldmVkIG5vIHJvd3MnCisg
ICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGN1ci5yb3djb3Vu
dCBpbiAoLTEsMCkpCisKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGNvbi5jbG9zZSgp
CisKKyAgICBkZWYgdGVzdF9mZXRjaGFsbChzZWxmKToKKyAgICAgICAgY29uID0gc2VsZi5fY29u
bmVjdCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGN1ciA9IGNvbi5jdXJzb3IoKQorICAg
ICAgICAgICAgIyBjdXJzb3IuZmV0Y2hhbGwgc2hvdWxkIHJhaXNlIGFuIEVycm9yIGlmIGNhbGxl
ZAorICAgICAgICAgICAgIyB3aXRob3V0IGV4ZWN1dGluZyBhIHF1ZXJ5IHRoYXQgbWF5IHJldHVy
biByb3dzIChzdWNoCisgICAgICAgICAgICAjIGFzIGEgc2VsZWN0KQorICAgICAgICAgICAgc2Vs
Zi5hc3NlcnRSYWlzZXMoc2VsZi5kcml2ZXIuRXJyb3IsIGN1ci5mZXRjaGFsbCkKKworICAgICAg
ICAgICAgc2VsZi5leGVjdXRlRERMMShjb24sY3VyKQorICAgICAgICAgICAgZm9yIHNxbCBpbiBz
ZWxmLl9wb3B1bGF0ZSgpOgorICAgICAgICAgICAgICAgIGN1ci5leGVjdXRlKHNxbCkKKworICAg
ICAgICAgICAgIyBjdXJzb3IuZmV0Y2hhbGwgc2hvdWxkIHJhaXNlIGFuIEVycm9yIGlmIGNhbGxl
ZAorICAgICAgICAgICAgIyBhZnRlciBleGVjdXRpbmcgYSBhIHN0YXRlbWVudCB0aGF0IGNhbm5v
dCByZXR1cm4gcm93cworICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5kcml2ZXIu
RXJyb3IsY3VyLmZldGNoYWxsKQorCisgICAgICAgICAgICBjdXIuZXhlY3V0ZSgnc2VsZWN0IG5h
bWUgZnJvbSAlc2Jvb3plJyAlIHNlbGYudGFibGVfcHJlZml4KQorICAgICAgICAgICAgcm93cyA9
IGN1ci5mZXRjaGFsbCgpCisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY3VyLnJvd2NvdW50
IGluICgtMSxsZW4oc2VsZi5zYW1wbGVzKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KGxlbihyb3dzKSxsZW4oc2VsZi5zYW1wbGVzKSwKKyAgICAgICAgICAgICAgICAnY3Vyc29yLmZl
dGNoYWxsIGRpZCBub3QgcmV0cmlldmUgYWxsIHJvd3MnCisgICAgICAgICAgICAgICAgKQorICAg
ICAgICAgICAgcm93cyA9IFtyWzBdIGZvciByIGluIHJvd3NdCisgICAgICAgICAgICByb3dzLnNv
cnQoKQorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCxsZW4oc2VsZi5zYW1wbGVzKSk6Cisg
ICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3dzW2ldLHNlbGYuc2FtcGxlc1tpXSwK
KyAgICAgICAgICAgICAgICAnY3Vyc29yLmZldGNoYWxsIHJldHJpZXZlZCBpbmNvcnJlY3Qgcm93
cycKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICByb3dzID0gY3VyLmZldGNoYWxsKCkK
KyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgbGVuKHJvd3Mp
LDAsCisgICAgICAgICAgICAgICAgJ2N1cnNvci5mZXRjaGFsbCBzaG91bGQgcmV0dXJuIGFuIGVt
cHR5IGxpc3QgaWYgY2FsbGVkICcKKyAgICAgICAgICAgICAgICAnYWZ0ZXIgdGhlIHdob2xlIHJl
c3VsdCBzZXQgaGFzIGJlZW4gZmV0Y2hlZCcKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAg
ICBzZWxmLmZhaWxVbmxlc3MoY3VyLnJvd2NvdW50IGluICgtMSxsZW4oc2VsZi5zYW1wbGVzKSkp
CisgICAgICAgICAgICBzZWxmLmNvbW1pdChjb24pCisKKyAgICAgICAgICAgIHNlbGYuZXhlY3V0
ZURETDIoY29uLGN1cikKKyAgICAgICAgICAgIGN1ci5leGVjdXRlKCdzZWxlY3QgbmFtZSBmcm9t
ICVzYmFyZmx5cycgJSBzZWxmLnRhYmxlX3ByZWZpeCkKKyAgICAgICAgICAgIHJvd3MgPSBjdXIu
ZmV0Y2hhbGwoKQorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGN1ci5yb3djb3VudCBpbiAo
LTEsMCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyb3dzKSwwLAorICAgICAg
ICAgICAgICAgICdjdXJzb3IuZmV0Y2hhbGwgc2hvdWxkIHJldHVybiBhbiBlbXB0eSBsaXN0IGlm
ICcKKyAgICAgICAgICAgICAgICAnYSBzZWxlY3QgcXVlcnkgcmV0dXJucyBubyByb3dzJworICAg
ICAgICAgICAgICAgICkKKyAgICAgICAgICAgIAorICAgICAgICBmaW5hbGx5OgorICAgICAgICAg
ICAgY29uLmNsb3NlKCkKKyAgICAKKyAgICBkZWYgdGVzdF9taXhlZGZldGNoKHNlbGYpOgorICAg
ICAgICBjb24gPSBzZWxmLl9jb25uZWN0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY3Vy
ID0gY29uLmN1cnNvcigpCisgICAgICAgICAgICBzZWxmLmV4ZWN1dGVEREwxKGNvbixjdXIpCisg
ICAgICAgICAgICBmb3Igc3FsIGluIHNlbGYuX3BvcHVsYXRlKCk6CisgICAgICAgICAgICAgICAg
Y3VyLmV4ZWN1dGUoc3FsKQorCisgICAgICAgICAgICBjdXIuZXhlY3V0ZSgnc2VsZWN0IG5hbWUg
ZnJvbSAlc2Jvb3plJyAlIHNlbGYudGFibGVfcHJlZml4KQorICAgICAgICAgICAgcm93czEgID0g
Y3VyLmZldGNob25lKCkKKyAgICAgICAgICAgIHJvd3MyMyA9IGN1ci5mZXRjaG1hbnkoMikKKyAg
ICAgICAgICAgIHJvd3M0ICA9IGN1ci5mZXRjaG9uZSgpCisgICAgICAgICAgICByb3dzNTYgPSBj
dXIuZmV0Y2hhbGwoKQorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGN1ci5yb3djb3VudCBp
biAoLTEsNikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyb3dzMjMpLDIsCisg
ICAgICAgICAgICAgICAgJ2ZldGNobWFueSByZXR1cm5lZCBpbmNvcnJlY3QgbnVtYmVyIG9mIHJv
d3MnCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4o
cm93czU2KSwyLAorICAgICAgICAgICAgICAgICdmZXRjaGFsbCByZXR1cm5lZCBpbmNvcnJlY3Qg
bnVtYmVyIG9mIHJvd3MnCisgICAgICAgICAgICAgICAgKQorCisgICAgICAgICAgICByb3dzID0g
W3Jvd3MxWzBdXQorICAgICAgICAgICAgcm93cy5leHRlbmQoW3Jvd3MyM1swXVswXSxyb3dzMjNb
MV1bMF1dKQorICAgICAgICAgICAgcm93cy5hcHBlbmQocm93czRbMF0pCisgICAgICAgICAgICBy
b3dzLmV4dGVuZChbcm93czU2WzBdWzBdLHJvd3M1NlsxXVswXV0pCisgICAgICAgICAgICByb3dz
LnNvcnQoKQorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCxsZW4oc2VsZi5zYW1wbGVzKSk6
CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3dzW2ldLHNlbGYuc2FtcGxlc1tp
XSwKKyAgICAgICAgICAgICAgICAgICAgJ2luY29ycmVjdCBkYXRhIHJldHJpZXZlZCBvciBpbnNl
cnRlZCcKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAg
ICAgY29uLmNsb3NlKCkKKworICAgIGRlZiBoZWxwX25leHRzZXRfc2V0VXAoc2VsZixjdXIpOgor
ICAgICAgICAnJycgU2hvdWxkIGNyZWF0ZSBhIHByb2NlZHVyZSBjYWxsZWQgZGVsZXRlbWUKKyAg
ICAgICAgICAgIHRoYXQgcmV0dXJucyB0d28gcmVzdWx0IHNldHMsIGZpcnN0IHRoZSAKKwkgICAg
bnVtYmVyIG9mIHJvd3MgaW4gYm9vemUgdGhlbiAibmFtZSBmcm9tIGJvb3plIgorICAgICAgICAn
JycKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvciwnSGVscGVyIG5vdCBpbXBsZW1l
bnRlZCcKKyAgICAgICAgI3NxbD0iIiIKKyAgICAgICAgIyAgICBjcmVhdGUgcHJvY2VkdXJlIGRl
bGV0ZW1lIGFzCisgICAgICAgICMgICAgYmVnaW4KKyAgICAgICAgIyAgICAgICAgc2VsZWN0IGNv
dW50KCopIGZyb20gYm9vemUKKyAgICAgICAgIyAgICAgICAgc2VsZWN0IG5hbWUgZnJvbSBib296
ZQorICAgICAgICAjICAgIGVuZAorICAgICAgICAjIiIiCisgICAgICAgICNjdXIuZXhlY3V0ZShz
cWwpCisKKyAgICBkZWYgaGVscF9uZXh0c2V0X3RlYXJEb3duKHNlbGYsY3VyKToKKyAgICAgICAg
J0lmIGNsZWFuaW5nIHVwIGlzIG5lZWRlZCBhZnRlciBuZXh0U2V0VGVzdCcKKyAgICAgICAgcmFp
c2UgTm90SW1wbGVtZW50ZWRFcnJvciwnSGVscGVyIG5vdCBpbXBsZW1lbnRlZCcKKyAgICAgICAg
I2N1ci5leGVjdXRlKCJkcm9wIHByb2NlZHVyZSBkZWxldGVtZSIpCisKKyAgICBkZWYgdGVzdF9u
ZXh0c2V0KHNlbGYpOgorICAgICAgICBjb24gPSBzZWxmLl9jb25uZWN0KCkKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgY3VyID0gY29uLmN1cnNvcigpCisgICAgICAgICAgICBpZiBub3QgaGFz
YXR0cihjdXIsJ25leHRzZXQnKToKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuZXhlY3V0ZURETDEoY29uLGN1cikKKyAgICAg
ICAgICAgICAgICBzcWw9c2VsZi5fcG9wdWxhdGUoKQorICAgICAgICAgICAgICAgIGZvciBzcWwg
aW4gc2VsZi5fcG9wdWxhdGUoKToKKyAgICAgICAgICAgICAgICAgICAgY3VyLmV4ZWN1dGUoc3Fs
KQorCisgICAgICAgICAgICAgICAgc2VsZi5oZWxwX25leHRzZXRfc2V0VXAoY3VyKQorCisgICAg
ICAgICAgICAgICAgY3VyLmNhbGxwcm9jKCdkZWxldGVtZScpCisgICAgICAgICAgICAgICAgbnVt
YmVyb2Zyb3dzPWN1ci5mZXRjaG9uZSgpCisgICAgICAgICAgICAgICAgYXNzZXJ0IG51bWJlcm9m
cm93c1swXT09IGxlbihzZWxmLnNhbXBsZXMpCisgICAgICAgICAgICAgICAgYXNzZXJ0IGN1ci5u
ZXh0c2V0KCkKKyAgICAgICAgICAgICAgICBuYW1lcz1jdXIuZmV0Y2hhbGwoKQorICAgICAgICAg
ICAgICAgIGFzc2VydCBsZW4obmFtZXMpID09IGxlbihzZWxmLnNhbXBsZXMpCisgICAgICAgICAg
ICAgICAgcz1jdXIubmV4dHNldCgpCisgICAgICAgICAgICAgICAgYXNzZXJ0IHMgPT0gTm9uZSwn
Tm8gbW9yZSByZXR1cm4gc2V0cywgc2hvdWxkIHJldHVybiBOb25lJworICAgICAgICAgICAgZmlu
YWxseToKKyAgICAgICAgICAgICAgICBzZWxmLmhlbHBfbmV4dHNldF90ZWFyRG93bihjdXIpCisK
KyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpCisKKyAgICBkZWYgdGVz
dF9uZXh0c2V0KHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yLCdEcml2
ZXJzIG5lZWQgdG8gb3ZlcnJpZGUgdGhpcyB0ZXN0JworCisgICAgZGVmIHRlc3RfYXJyYXlzaXpl
KHNlbGYpOgorICAgICAgICAjIE5vdCBtdWNoIGhlcmUgLSByZXN0IG9mIHRoZSB0ZXN0cyBmb3Ig
dGhpcyBhcmUgaW4gdGVzdF9mZXRjaG1hbnkKKyAgICAgICAgY29uID0gc2VsZi5fY29ubmVjdCgp
CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGN1ciA9IGNvbi5jdXJzb3IoKQorICAgICAgICAg
ICAgc2VsZi5mYWlsVW5sZXNzKGhhc2F0dHIoY3VyLCdhcnJheXNpemUnKSwKKyAgICAgICAgICAg
ICAgICAnY3Vyc29yLmFycmF5c2l6ZSBtdXN0IGJlIGRlZmluZWQnCisgICAgICAgICAgICAgICAg
KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgY29uLmNsb3NlKCkKKworICAgIGRlZiB0
ZXN0X3NldGlucHV0c2l6ZXMoc2VsZik6CisgICAgICAgIGNvbiA9IHNlbGYuX2Nvbm5lY3QoKQor
ICAgICAgICB0cnk6CisgICAgICAgICAgICBjdXIgPSBjb24uY3Vyc29yKCkKKyAgICAgICAgICAg
IGN1ci5zZXRpbnB1dHNpemVzKCAoMjUsKSApCisgICAgICAgICAgICBzZWxmLl9wYXJhbWluc2Vy
dChjb24sY3VyKSAjIE1ha2Ugc3VyZSBjdXJzb3Igc3RpbGwgd29ya3MKKyAgICAgICAgZmluYWxs
eToKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9zZXRvdXRwdXRzaXpl
X2Jhc2ljKHNlbGYpOgorICAgICAgICAjIEJhc2ljIHRlc3QgaXMgdG8gbWFrZSBzdXJlIHNldG91
dHB1dHNpemUgZG9lc24ndCBibG93IHVwCisgICAgICAgIGNvbiA9IHNlbGYuX2Nvbm5lY3QoKQor
ICAgICAgICB0cnk6CisgICAgICAgICAgICBjdXIgPSBjb24uY3Vyc29yKCkKKyAgICAgICAgICAg
IGN1ci5zZXRvdXRwdXRzaXplKDEwMDApCisgICAgICAgICAgICBjdXIuc2V0b3V0cHV0c2l6ZSgy
MDAwLDApCisgICAgICAgICAgICBzZWxmLl9wYXJhbWluc2VydChjb24sY3VyKSAjIE1ha2Ugc3Vy
ZSB0aGUgY3Vyc29yIHN0aWxsIHdvcmtzCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBj
b24uY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfc2V0b3V0cHV0c2l6ZShzZWxmKToKKyAgICAgICAg
IyBSZWFsIHRlc3QgZm9yIHNldG91dHB1dHNpemUgaXMgZHJpdmVyIGRlcGVuZGFudAorICAgICAg
ICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yLCdEcml2ZXIgbmVlZCB0byBvdmVycmlkZSB0aGlz
IHRlc3QnCisKKyAgICBkZWYgdGVzdF9Ob25lKHNlbGYpOgorICAgICAgICBjb24gPSBzZWxmLl9j
b25uZWN0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY3VyID0gY29uLmN1cnNvcigpCisg
ICAgICAgICAgICBzZWxmLmV4ZWN1dGVEREwxKGNvbixjdXIpCisgICAgICAgICAgICBjdXIuZXhl
Y3V0ZSgnaW5zZXJ0IGludG8gJXNib296ZSB2YWx1ZXMgKE5VTEwpJyAlIHNlbGYudGFibGVfcHJl
Zml4KQorICAgICAgICAgICAgY3VyLmV4ZWN1dGUoJ3NlbGVjdCBuYW1lIGZyb20gJXNib296ZScg
JSBzZWxmLnRhYmxlX3ByZWZpeCkKKyAgICAgICAgICAgIHIgPSBjdXIuZmV0Y2hhbGwoKQorICAg
ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ociksMSkKKyAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwobGVuKHJbMF0pLDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJbMF1b
MF0sTm9uZSwnTlVMTCB2YWx1ZSBub3QgcmV0dXJuZWQgYXMgTm9uZScpCisgICAgICAgIGZpbmFs
bHk6CisgICAgICAgICAgICBjb24uY2xvc2UoKQorCisgICAgZGVmIHRlc3RfRGF0ZShzZWxmKToK
KyAgICAgICAgZDEgPSBzZWxmLmRyaXZlci5EYXRlKDIwMDIsMTIsMjUpCisgICAgICAgIGQyID0g
c2VsZi5kcml2ZXIuRGF0ZUZyb21UaWNrcyh0aW1lLm1rdGltZSgoMjAwMiwxMiwyNSwwLDAsMCww
LDAsMCkpKQorICAgICAgICAjIENhbiB3ZSBhc3N1bWUgdGhpcz8gQVBJIGRvZXNuJ3Qgc3BlY2lm
eSwgYnV0IGl0IHNlZW1zIGltcGxpZWQKKyAgICAgICAgIyBzZWxmLmFzc2VydEVxdWFsKHN0cihk
MSksc3RyKGQyKSkKKworICAgIGRlZiB0ZXN0X1RpbWUoc2VsZik6CisgICAgICAgIHQxID0gc2Vs
Zi5kcml2ZXIuVGltZSgxMyw0NSwzMCkKKyAgICAgICAgdDIgPSBzZWxmLmRyaXZlci5UaW1lRnJv
bVRpY2tzKHRpbWUubWt0aW1lKCgyMDAxLDEsMSwxMyw0NSwzMCwwLDAsMCkpKQorICAgICAgICAj
IENhbiB3ZSBhc3N1bWUgdGhpcz8gQVBJIGRvZXNuJ3Qgc3BlY2lmeSwgYnV0IGl0IHNlZW1zIGlt
cGxpZWQKKyAgICAgICAgIyBzZWxmLmFzc2VydEVxdWFsKHN0cih0MSksc3RyKHQyKSkKKworICAg
IGRlZiB0ZXN0X1RpbWVzdGFtcChzZWxmKToKKyAgICAgICAgdDEgPSBzZWxmLmRyaXZlci5UaW1l
c3RhbXAoMjAwMiwxMiwyNSwxMyw0NSwzMCkKKyAgICAgICAgdDIgPSBzZWxmLmRyaXZlci5UaW1l
c3RhbXBGcm9tVGlja3MoCisgICAgICAgICAgICB0aW1lLm1rdGltZSgoMjAwMiwxMiwyNSwxMyw0
NSwzMCwwLDAsMCkpCisgICAgICAgICAgICApCisgICAgICAgICMgQ2FuIHdlIGFzc3VtZSB0aGlz
PyBBUEkgZG9lc24ndCBzcGVjaWZ5LCBidXQgaXQgc2VlbXMgaW1wbGllZAorICAgICAgICAjIHNl
bGYuYXNzZXJ0RXF1YWwoc3RyKHQxKSxzdHIodDIpKQorCisgICAgZGVmIHRlc3RfQmluYXJ5KHNl
bGYpOgorICAgICAgICBiID0gc2VsZi5kcml2ZXIuQmluYXJ5KCdTb21ldGhpbmcnKQorICAgICAg
ICBiID0gc2VsZi5kcml2ZXIuQmluYXJ5KCcnKQorCisgICAgZGVmIHRlc3RfU1RSSU5HKHNlbGYp
OgorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaGFzYXR0cihzZWxmLmRyaXZlciwnU1RSSU5HJyks
CisgICAgICAgICAgICAnbW9kdWxlLlNUUklORyBtdXN0IGJlIGRlZmluZWQnCisgICAgICAgICAg
ICApCisKKyAgICBkZWYgdGVzdF9CSU5BUlkoc2VsZik6CisgICAgICAgIHNlbGYuZmFpbFVubGVz
cyhoYXNhdHRyKHNlbGYuZHJpdmVyLCdCSU5BUlknKSwKKyAgICAgICAgICAgICdtb2R1bGUuQklO
QVJZIG11c3QgYmUgZGVmaW5lZC4nCisgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9OVU1C
RVIoc2VsZik6CisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhoYXNhdHRyKHNlbGYuZHJpdmVyLCdO
VU1CRVInKSwKKyAgICAgICAgICAgICdtb2R1bGUuTlVNQkVSIG11c3QgYmUgZGVmaW5lZC4nCisg
ICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9EQVRFVElNRShzZWxmKToKKyAgICAgICAgc2Vs
Zi5mYWlsVW5sZXNzKGhhc2F0dHIoc2VsZi5kcml2ZXIsJ0RBVEVUSU1FJyksCisgICAgICAgICAg
ICAnbW9kdWxlLkRBVEVUSU1FIG11c3QgYmUgZGVmaW5lZC4nCisgICAgICAgICAgICApCisKKyAg
ICBkZWYgdGVzdF9ST1dJRChzZWxmKToKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGhhc2F0dHIo
c2VsZi5kcml2ZXIsJ1JPV0lEJyksCisgICAgICAgICAgICAnbW9kdWxlLlJPV0lEIG11c3QgYmUg
ZGVmaW5lZC4nCisgICAgICAgICAgICApCisKSW5kZXg6IHRlc3RzL3Rlc3Rfc3liYXNlX2RiYXBp
MjAucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gdGVzdHMvdGVzdF9zeWJhc2VfZGJhcGkyMC5weQkoLi4uL2Jy
YW5jaGVzLzIuNi9zeWJhc2UpCShyw6l2aXNpb24gMCkKKysrIHRlc3RzL3Rlc3Rfc3liYXNlX2Ri
YXBpMjAucHkJKC4uLi90cnVuay9zeWJhc2UpCShyw6l2aXNpb24gMjc2KQpAQCAtMCwwICsxLDUz
IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworaW1wb3J0IG9zLCBzeXMKK2ltcG9ydCB1bml0
dGVzdAorZnJvbSBDb25maWdQYXJzZXIgaW1wb3J0IFNhZmVDb25maWdQYXJzZXIKKworIiIiIFRo
aXMgdGVzdCBtb2R1bGUgcmVxdWlyZXMgYSBjb25maWd1cmF0aW9uIGZpbGUgaW4gfi8uc3liYXNl
X2RiYXBpMjAuY29uZgord2l0aCB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKworW0Jhc2UgMV0KKwor
c2VydmVyPW15c2VydmVyCitkYXRhYmFzZT1teWRhdGFiYXNlCit1c2VyPW15dXNlcgorcGFzc3dv
cmQ9bXlwYXNzd29yZGQKKworW0Jhc2UgMl0KKy4uLgorIiIiCisKK2lmIG9zLmVudmlyb24uZ2V0
KCJTWUJBU0UiLCBOb25lKSBpcyBub3QgTm9uZToKKyAgICBpbXBvcnQgc3liYXNlX2RiYXBpMjAK
KworICAgIGNvbmZpZyA9IFNhZmVDb25maWdQYXJzZXIoKQorICAgIHRyeToKKyAgICAgICAgY29u
ZmlnLnJlYWQob3MucGF0aC5leHBhbmR1c2VyKG9zLnBhdGguam9pbigifiIsICIuc3liYXNlX2Ri
YXBpMjAuY29uZiIpKSkKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgcGFzcworICAgIGVs
c2U6CisgICAgICAgIGN1cm5iID0gMAorICAgICAgICBmb3Igc2VjdGlvbiBpbiBjb25maWcuc2Vj
dGlvbnMoKToKKyAgICAgICAgICAgIHNlcnZlciA9IGNvbmZpZy5nZXQoc2VjdGlvbiwgInNlcnZl
ciIpCisgICAgICAgICAgICB1c2VyID0gY29uZmlnLmdldChzZWN0aW9uLCAidXNlciIpCisgICAg
ICAgICAgICBwYXNzd2QgPSBjb25maWcuZ2V0KHNlY3Rpb24sICJwYXNzd29yZCIpCisgICAgICAg
ICAgICBkYXRhYmFzZSA9IGNvbmZpZy5nZXQoc2VjdGlvbiwgImRhdGFiYXNlIikKKyAgICAgICAg
CisgICAgICAgICAgICBleGVjKCIiImNsYXNzIFRlc3RTeWJhc2UlcyhzeWJhc2VfZGJhcGkyMC5U
ZXN0U3liYXNlKToKKyAgICAgICAgICAgIGNvbm5lY3RfYXJncyA9IChzZXJ2ZXIsIHVzZXIsIHBh
c3N3ZCwgZGF0YWJhc2UpCisgICAgICAgICAgICBjb25uZWN0X2t3X2FyZ3MgPSB7J2F1dG9fY29t
bWl0JzogMH0iIiIgJSBzZXJ2ZXIpCisgICAgICAgIAorICAgICAgICAgICAgZXhlYygiIiJjbGFz
cyBUZXN0U3liYXNlJXNBdXRvQ29tbWl0KHN5YmFzZV9kYmFwaTIwLlRlc3RTeWJhc2UpOgorICAg
ICAgICAgICAgY29ubmVjdF9hcmdzID0gKHNlcnZlciwgdXNlciwgcGFzc3dkLCBkYXRhYmFzZSkK
KyAgICAgICAgICAgIGNvbm5lY3Rfa3dfYXJncyA9IHsnYXV0b19jb21taXQnOiAxfSIiIiAlIHNl
cnZlcikKKworICAgICAgICAgICAgZXhlYygiIiJjbGFzcyBUZXN0U3liYXNlJXNBdXRvQ29tbWl0
Rm9yY2Uoc3liYXNlX2RiYXBpMjAuVGVzdFN5YmFzZSk6CisgICAgICAgICAgICBjb25uZWN0X2Fy
Z3MgPSAoc2VydmVyLCB1c2VyLCBwYXNzd2QsIGRhdGFiYXNlKQorICAgICAgICAgICAgY29ubmVj
dF9rd19hcmdzID0geydhdXRvX2NvbW1pdCc6IDF9CisgICAgICAgICAgICBmb3JjZV9jb21taXQg
PSAxIiIiICUgc2VydmVyKQorCisgICAgICAgICAgICBjdXJuYiArPSAxCisKK2lmIF9fbmFtZV9f
ID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCkluZGV4OiB0ZXN0cy9zeWJhc2Vf
ZGJhcGkyMC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0ZXN0cy9zeWJhc2VfZGJhcGkyMC5weQkoLi4uL2Jy
YW5jaGVzLzIuNi9zeWJhc2UpCShyw6l2aXNpb24gMCkKKysrIHRlc3RzL3N5YmFzZV9kYmFwaTIw
LnB5CSguLi4vdHJ1bmsvc3liYXNlKQkocsOpdmlzaW9uIDI3NikKQEAgLTAsMCArMSwyNjAgQEAK
KyMhL3Vzci9iaW4vZW52IHB5dGhvbgoraW1wb3J0IGRiYXBpMjAKK2ltcG9ydCBTeWJhc2UKK2lt
cG9ydCBwb3BlbjIKKworCitjbGFzcyBUZXN0U3liYXNlKGRiYXBpMjAuRGF0YWJhc2VBUEkyMFRl
c3QpOgorCisgICAgZHJpdmVyID0gU3liYXNlICAgIAorICAgIGRyaXZlci5fY3R4LmRlYnVnID0g
MQorICAgIGRyaXZlci5zZXRfZGVidWcob3Blbignc3liYXNlX2RlYnVnLmxvZycsICd3JykpCisK
KyAgICBjb25uZWN0X2FyZ3MgPSAoKQorICAgIGxvd2VyX2Z1bmMgPSAnbG93ZXInICMgRm9yIHN0
b3JlZCBwcm9jZWR1cmUgdGVzdAorCisgICAgZm9yY2VfY29tbWl0ID0gMAorCisgICAgZGVmIGNv
bW1pdChzZWxmLGNvbik6CisgICAgICAgIGlmIG5vdCBzZWxmLmNvbm5lY3Rfa3dfYXJncy5nZXQo
ImF1dG9fY29tbWl0IiwgMCkgb3Igc2VsZi5mb3JjZV9jb21taXQ6CisgICAgICAgICAgICBjb24u
Y29tbWl0KCkgICAgICAgIAorCisgICAgZGVmIGV4ZWN1dGVEREwxKHNlbGYsY29uLGN1cnNvcik6
CisgICAgICAgICMgU3liYXNlIG5lZWRzIE5VTEwgdG8gYmUgc3BlY2lmaWVkIGluIG9yZGVyIHRv
IGFsbG93IE5VTEwgdmFsdWVzCisKKyAgICAgICAgc2VsZi5kZGwxID0gJ2NyZWF0ZSB0YWJsZSAl
c2Jvb3plIChuYW1lIHZhcmNoYXIoMjApIE5VTEwpJyAlIHNlbGYudGFibGVfcHJlZml4CisgICAg
ICAgIGN1cnNvci5leGVjdXRlKHNlbGYuZGRsMSkKKyAgICAgICAgc2VsZi5jb21taXQoY29uKQor
CisgICAgZGVmIGV4ZWN1dGVEREwyKHNlbGYsY29uLGN1cnNvcik6CisgICAgICAgIGN1cnNvci5l
eGVjdXRlKHNlbGYuZGRsMikKKyAgICAgICAgc2VsZi5jb21taXQoY29uKQorCisgICAgZGVmIHNl
dFVwKHNlbGYpOgorICAgICAgICAjIENhbGwgc3VwZXJjbGFzcyBzZXRVcCBJbiBjYXNlIHRoaXMg
ZG9lcyBzb21ldGhpbmcgaW4gdGhlCisgICAgICAgICMgZnV0dXJlCisgICAgICAgIGRiYXBpMjAu
RGF0YWJhc2VBUEkyMFRlc3Quc2V0VXAoc2VsZikgCisKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgY29uID0gc2VsZi5fY29ubmVjdCgpCisgICAgICAgICAgICBjb24uY2xvc2UoKQorICAgICAg
ICBleGNlcHQ6CisgICAgICAgICAgICAjIGNtZCA9ICJwc3FsIC1jICdjcmVhdGUgZGF0YWJhc2Ug
ZGJhcGkyMF90ZXN0JyIKKyAgICAgICAgICAgICMgY291dCxjaW4gPSBwb3BlbjIucG9wZW4yKGNt
ZCkKKyAgICAgICAgICAgICMgY2luLmNsb3NlKCkKKyAgICAgICAgICAgICMgY291dC5yZWFkKCkK
KyAgICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGRi
YXBpMjAuRGF0YWJhc2VBUEkyMFRlc3QudGVhckRvd24oc2VsZikKKworICAgIGRlZiBfcGFyYW1p
bnNlcnQoc2VsZixjb24sY3VyKToKKyAgICAgICAgIyBPdmVycmlkZGVuOiBTeWJhc2UgZG9lcyBu
b3QgaGFuZGxlZCBuYW1lZCBwYXJhbWV0ZXJzIGxpa2UKKyAgICAgICAgIyBkYmFwaTIwIGV4cGVj
dHMKKworICAgICAgICAjIGRiYXBpMjA6ICBjLmV4ZWN1dGUoImluc2VydCBpbnRvIGZvbyB2YWx1
ZXMgKDpiZWVyKSIsIHsiYmVlciI6ICJ3aGF0ZXZlciJ9KQorICAgICAgICAjIFN5YmFzZTogICBj
LmV4ZWN1dGUoImluc2VydCBpbnRvIGZvbyB2YWx1ZXMgKEBiZWVyKSIsIHsiQGJlZXIiOiAid2hh
dGV2ZXIifSkKKworICAgICAgICBzZWxmLmV4ZWN1dGVEREwxKGNvbixjdXIpCisgICAgICAgIGN1
ci5leGVjdXRlKCJpbnNlcnQgaW50byAlc2Jvb3plIHZhbHVlcyAoJ1ZpY3RvcmlhIEJpdHRlcicp
IiAlICgKKyAgICAgICAgICAgIHNlbGYudGFibGVfcHJlZml4CisgICAgICAgICAgICApKQorICAg
ICAgICBzZWxmLmZhaWxVbmxlc3MoY3VyLnJvd2NvdW50IGluICgtMSwxKSkKKworICAgICAgICBj
dXIuZXhlY3V0ZSgKKyAgICAgICAgICAgICdpbnNlcnQgaW50byAlc2Jvb3plIHZhbHVlcyAoQGJl
ZXIpJyAlIHNlbGYudGFibGVfcHJlZml4LCAKKyAgICAgICAgICAgIHsnQGJlZXInOiJDb29wZXIn
cyJ9CisgICAgICAgICAgICApCisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhjdXIucm93Y291bnQg
aW4gKC0xLDEpKQorCisgICAgICAgIGN1ci5leGVjdXRlKCdzZWxlY3QgbmFtZSBmcm9tICVzYm9v
emUnICUgc2VsZi50YWJsZV9wcmVmaXgpCisgICAgICAgIHJlcyA9IGN1ci5mZXRjaGFsbCgpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlcyksMiwnY3Vyc29yLmZldGNoYWxsIHJldHVy
bmVkIHRvbyBmZXcgcm93cycpCisgICAgICAgIGJlZXJzID0gW3Jlc1swXVswXSxyZXNbMV1bMF1d
CisgICAgICAgIGJlZXJzLnNvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJlZXJzWzBd
LCJDb29wZXIncyIsCisgICAgICAgICAgICAnY3Vyc29yLmZldGNoYWxsIHJldHJpZXZlZCBpbmNv
cnJlY3QgZGF0YSwgb3IgZGF0YSBpbnNlcnRlZCAnCisgICAgICAgICAgICAnaW5jb3JyZWN0bHkn
CisgICAgICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmVlcnNbMV0sIlZpY3Rv
cmlhIEJpdHRlciIsCisgICAgICAgICAgICAnY3Vyc29yLmZldGNoYWxsIHJldHJpZXZlZCBpbmNv
cnJlY3QgZGF0YSwgb3IgZGF0YSBpbnNlcnRlZCAnCisgICAgICAgICAgICAnaW5jb3JyZWN0bHkn
CisgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9leGVjdXRlbWFueShzZWxmKToKKyAgICAg
ICAgIyBPdmVycmlkZGVuOiBzYW1lIHJlYXNvbiBhcyBfcGFyYW1pbnNlcnQKKworICAgICAgICBj
b24gPSBzZWxmLl9jb25uZWN0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY3VyID0gY29u
LmN1cnNvcigpCisgICAgICAgICAgICBzZWxmLmV4ZWN1dGVEREwxKGNvbixjdXIpCisgICAgICAg
ICAgICBsYXJncyA9IFsgKCJDb29wZXIncyIsKSAsICgiQm9hZydzIiwpIF0KKyAgICAgICAgICAg
IG1hcmdzID0gWyB7J0BiZWVyJzogIkNvb3BlcidzIn0sIHsnQGJlZXInOiAiQm9hZydzIn0gXQor
ICAgICAgICAgICAgY3VyLmV4ZWN1dGVtYW55KAorICAgICAgICAgICAgICAgICdpbnNlcnQgaW50
byAlc2Jvb3plIHZhbHVlcyAoQGJlZXIpJyAlIHNlbGYudGFibGVfcHJlZml4LAorICAgICAgICAg
ICAgICAgIG1hcmdzCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgc2VsZi5mYWlsVW5s
ZXNzKGN1ci5yb3djb3VudCBpbiAoLTEsMiksCisgICAgICAgICAgICAgICAgJ2luc2VydCB1c2lu
ZyBjdXJzb3IuZXhlY3V0ZW1hbnkgc2V0IGN1cnNvci5yb3djb3VudCB0byAnCisgICAgICAgICAg
ICAgICAgJ2luY29ycmVjdCB2YWx1ZSAlcicgJSBjdXIucm93Y291bnQKKyAgICAgICAgICAgICAg
ICApCisgICAgICAgICAgICBjdXIuZXhlY3V0ZSgnc2VsZWN0IG5hbWUgZnJvbSAlc2Jvb3plJyAl
IHNlbGYudGFibGVfcHJlZml4KQorICAgICAgICAgICAgcmVzID0gY3VyLmZldGNoYWxsKCkKKyAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlcyksMiwKKyAgICAgICAgICAgICAgICAn
Y3Vyc29yLmZldGNoYWxsIHJldHJpZXZlZCBpbmNvcnJlY3QgbnVtYmVyIG9mIHJvd3MnCisgICAg
ICAgICAgICAgICAgKQorICAgICAgICAgICAgYmVlcnMgPSBbcmVzWzBdWzBdLHJlc1sxXVswXV0K
KyAgICAgICAgICAgIGJlZXJzLnNvcnQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChi
ZWVyc1swXSwiQm9hZydzIiwnaW5jb3JyZWN0IGRhdGEgcmV0cmlldmVkJykKKyAgICAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoYmVlcnNbMV0sIkNvb3BlcidzIiwnaW5jb3JyZWN0IGRhdGEgcmV0
cmlldmVkJykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpCisKKyAg
ICBkZWYgdGVzdF9kcm9wX25vbl9leGlzdGluZyhzZWxmKToKKyAgICAgICAgY29uID0gc2VsZi5f
Y29ubmVjdCgpCisgICAgICAgIGN1ciA9IGNvbi5jdXJzb3IoKQorICAgICAgICB0cnk6CisgICAg
ICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmRyaXZlci5EYXRhYmFzZUVycm9yLCBjdXIu
ZXhlY3V0ZSwgJ2Ryb3AgdGFibGUgJXNkdW1teScgJSBzZWxmLnRhYmxlX3ByZWZpeCkKKyAgICAg
ICAgZmluYWxseToKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9zZWxl
Y3Rfbm9uX2V4aXN0aW5nKHNlbGYpOgorICAgICAgICBjb24gPSBzZWxmLl9jb25uZWN0KCkKKyAg
ICAgICAgY3VyID0gY29uLmN1cnNvcigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYu
YXNzZXJ0UmFpc2VzKHNlbGYuZHJpdmVyLkRhdGFiYXNlRXJyb3IsIGN1ci5leGVjdXRlLCAnc2Vs
ZWN0ICogZnJvbSAlc2R1bW15JyAlIHNlbGYudGFibGVfcHJlZml4KQorICAgICAgICBmaW5hbGx5
OgorICAgICAgICAgICAgY29uLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2J1Z19yZXN1bHRfcGVu
ZGluZyhzZWxmKToKKyAgICAgICAgIyB1bml0YXJ5IHRlc3QgZm9yIGEgYnVnIHJlcG9ydGVkIGJ5
IFJhbHBoIEhlaW5rZWwKKyAgICAgICAgIyBodHRwOi8vd3d3Lm9iamVjdC1jcmFmdC5jb20uYXUv
cGlwZXJtYWlsL3B5dGhvbi1zeWJhc2UvMjAwMi1NYXkvMDAwMDM0Lmh0bWwKKworICAgICAgICBj
b24gPSBzZWxmLl9jb25uZWN0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY3VyID0gY29u
LmN1cnNvcigpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY3VyLmV4ZWN1dGUo
J3NlbGVjdCAqIGZyb20gJXNkdW1teScgJSBzZWxmLnRhYmxlX3ByZWZpeCkKKyAgICAgICAgICAg
IGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBjdXIuZXhlY3V0ZSgn
Y3JlYXRlIHRhYmxlICVzYm9vemUgKG5hbWUgdmFyY2hhcigyMCkpJyAlIHNlbGYudGFibGVfcHJl
Zml4KQorICAgICAgICAgICAgY29uLmNvbW1pdCgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAg
ICAgICBjb24uY2xvc2UoKQorCisKKyAgICBkZWYgdGVzdF9idWdfcmVzdWx0X3BlbmRpbmcyKHNl
bGYpOgorICAgICAgICBjb24gPSBzZWxmLl9jb25uZWN0KCkKKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgY3VyID0gY29uLmN1cnNvcigpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAg
ICAgY3VyLmV4ZWN1dGUoJ2Ryb3AgdGFibGUgJXNkdW1teScgJSBzZWxmLnRhYmxlX3ByZWZpeCkK
KyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBj
dXIuZXhlY3V0ZSgnY3JlYXRlIHRhYmxlICVzYm9vemUgKG5hbWUgdmFyY2hhcigyMCkpJyAlIHNl
bGYudGFibGVfcHJlZml4KQorICAgICAgICAgICAgY29uLmNvbW1pdCgpCisgICAgICAgIGZpbmFs
bHk6CisgICAgICAgICAgICBjb24uY2xvc2UoKQorCisgICAgZGVmIHRlc3RfYnVnX3Jlc3VsdF9w
ZW5kaW5nM19mZXRjaGFsbChzZWxmKToKKyAgICAgICAgIyBXaGVuIG5vdCBpbiBhdXRvX2NvbW1p
dCBtb2RlLCBpdCB3YXMgbm90IHBvc3NpYmxlIHRvIGNvbW1pdCBhZnRlciBhIGZldGNoYWxsIGJl
Y2F1c2Ugb2YgcmVzdWx0cyBwZW5kaW5nCisgICAgICAgIGNvbiA9IHNlbGYuX2Nvbm5lY3QoKQor
ICAgICAgICB0cnk6CisgICAgICAgICAgICBjdXIgPSBjb24uY3Vyc29yKCkKKyAgICAgICAgICAg
IGN1ci5leGVjdXRlKCdjcmVhdGUgdGFibGUgJXNib296ZSAobmFtZSB2YXJjaGFyKDIwKSknICUg
c2VsZi50YWJsZV9wcmVmaXgpCisgICAgICAgICAgICBjb24uY29tbWl0KCkKKyAgICAgICAgICAg
IGN1ci5leGVjdXRlKCdzZWxlY3QgbmFtZSBmcm9tICVzYm9vemUnICUgc2VsZi50YWJsZV9wcmVm
aXgpCisgICAgICAgICAgICBjdXIuZmV0Y2hhbGwoKQorICAgICAgICAgICAgc2VsZi5jb21taXQo
Y29uKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgY29uLmNsb3NlKCkKKworICAgIGRl
ZiB0ZXN0X2R1cGxpY2F0ZV9lcnJvcihzZWxmKToKKyAgICAgICAgY29uID0gc2VsZi5fY29ubmVj
dCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGN1ciA9IGNvbi5jdXJzb3IoKQorICAgICAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGN1ci5leGVjdXRlKCdkcm9wIHRhYmxlICVzYm9v
emUnICUgc2VsZi50YWJsZV9wcmVmaXgpCisgICAgICAgICAgICBleGNlcHQgc2VsZi5kcml2ZXIu
RGF0YWJhc2VFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBjdXIuZXhl
Y3V0ZSgnY3JlYXRlIHRhYmxlICVzYm9vemUgKG5hbWUgdmFyY2hhcigyMCkgUFJJTUFSWSBLRVkp
JyAlIHNlbGYudGFibGVfcHJlZml4KQorICAgICAgICAgICAgY3VyLmV4ZWN1dGUoImluc2VydCBp
bnRvICVzYm9vemUgdmFsdWVzICgnVmljdG9yaWEgQml0dGVyJykiICUgc2VsZi50YWJsZV9wcmVm
aXgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmRyaXZlci5JbnRlZ3JpdHlF
cnJvciwgY3VyLmV4ZWN1dGUsICJpbnNlcnQgaW50byAlc2Jvb3plIHZhbHVlcyAoJ1ZpY3Rvcmlh
IEJpdHRlcicpIiAlIHNlbGYudGFibGVfcHJlZml4KQorICAgICAgICBmaW5hbGx5OgorICAgICAg
ICAgICAgY29uLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2NhbGxwcm9jKHNlbGYpOgorICAgICAg
ICBjb24gPSBzZWxmLl9jb25uZWN0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBjcmVh
dGUgcHJvY2VkdXJlIGxvd2VyCisgICAgICAgICAgICBjdXIgPSBjb24uY3Vyc29yKCkKKyAgICAg
ICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjdXIuZXhlY3V0ZSgiZHJvcCBwcm9jZWR1cmUg
bG93ZXIiKQorICAgICAgICAgICAgICAgIHNlbGYuY29tbWl0KGNvbikKKyAgICAgICAgICAgIGV4
Y2VwdCBjb24uRGF0YWJhc2VFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAg
ICBjdXIuZXhlY3V0ZSgiY3JlYXRlIHByb2NlZHVyZSBsb3dlcihAbmFtZSB2YXJjaGFyKDI1Nikp
IGFzIHNlbGVjdCBsb3dlcihAbmFtZSkgY29tbWl0IHRyYW5zYWN0aW9uIikKKyAgICAgICAgICAg
IHNlbGYuY29tbWl0KGNvbikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGNvbi5jbG9z
ZSgpCisgICAgICAgIGRiYXBpMjAuRGF0YWJhc2VBUEkyMFRlc3QudGVzdF9jYWxscHJvYyhzZWxm
KQorCisgICAgZGVmIHRlc3Rfbm9uX2V4aXN0aW5nX3Byb2Moc2VsZik6CisgICAgICAgIGNvbiA9
IHNlbGYuX2Nvbm5lY3QoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIGNyZWF0ZSBwcm9j
ZWR1cmUgbG93ZXIKKyAgICAgICAgICAgIGN1ciA9IGNvbi5jdXJzb3IoKQorICAgICAgICAgICAg
dHJ5OgorICAgICAgICAgICAgICAgIGN1ci5leGVjdXRlKCJkcm9wIHByb2NlZHVyZSBsb3dlciIp
CisgICAgICAgICAgICAgICAgc2VsZi5jb21taXQoY29uKQorICAgICAgICAgICAgZXhjZXB0IGNv
bi5EYXRhYmFzZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHNlbGYu
YXNzZXJ0UmFpc2VzKHNlbGYuZHJpdmVyLlN0b3JlZFByb2NlZHVyZUVycm9yLGN1ci5jYWxscHJv
YyxzZWxmLmxvd2VyX2Z1bmMsKCdGT08nLCkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAg
ICBjb24uY2xvc2UoKQorCisgICAgZGVmIHRlc3RfbmF0aXZlX2RhdGV0aW1lKHNlbGYpOgorICAg
ICAgICBjb24gPSBzZWxmLl9jb25uZWN0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY3Vy
ID0gY29uLmN1cnNvcigpCisgICAgICAgICAgICBjdXIuZXhlY3V0ZSgnY3JlYXRlIHRhYmxlICVz
Ym9vemUgKGRheSBkYXRlKScgJSBzZWxmLnRhYmxlX3ByZWZpeCkKKyAgICAgICAgICAgIHNlbGYu
Y29tbWl0KGNvbikKKyAgICAgICAgICAgIGN1ci5leGVjdXRlKCJpbnNlcnQgaW50byAlc2Jvb3pl
IHZhbHVlcyAoJzIwMDYxMTI0JykiICUgc2VsZi50YWJsZV9wcmVmaXgpCisgICAgICAgICAgICBz
ZWxmLmNvbW1pdChjb24pCisgICAgICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0ICogZnJvbSAl
c2Jvb3plIiAlIHNlbGYudGFibGVfcHJlZml4KQorICAgICAgICAgICAgcmVzID0gY3VyLmZldGNo
YWxsKCkKKyAgICAgICAgICAgIGRhdGUgPSByZXNbMF1bMF0KKyAgICAgICAgICAgIGlmIHNlbGYu
ZHJpdmVyLnVzZV9weV9kYXRldGltZToKKyAgICAgICAgICAgICAgICBpbXBvcnQgZGF0ZXRpbWUK
KyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShkYXRlLCBkYXRldGltZS5k
YXRldGltZSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGF0ZS55ZWFyLCAy
MDA2KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRhdGUubW9udGgsIDExKQor
ICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRhdGUuZGF5LCAyNCkKKyAgICAgICAg
ICAgIGVsaWYgc2VsZi5kcml2ZXIudXNlX2RhdGV0aW1lOgorICAgICAgICAgICAgICAgIHByaW50
ICJXQVJOSU5HOiB1c2luZyBteC5EYXRlVGltZSBkYXRldGltZSBmb3JtYXQiCisgICAgICAgICAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmcm9tIERhdGVUaW1lIGltcG9ydCBEYXRl
VGltZVR5cGUKKyAgICAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAg
ICAgICAgICAgIGZyb20gbXguRGF0ZVRpbWUgaW1wb3J0IERhdGVUaW1lVHlwZQorICAgICAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKGRhdGUsIERhdGVUaW1lVHlwZSkpCisgICAg
ICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGF0ZS55ZWFyLCAyMDA2KQorICAgICAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRhdGUubW9udGgsIDExKQorICAgICAgICAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKGRhdGUuZGF5LCAyNCkKKyAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAgICAgcHJpbnQgIldBUk5JTkc6IHVzaW5nIFN5YmFzZSBuYXRpdmUgZGF0ZXRpbWUg
Zm9ybWF0IgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKGRhdGUsIHNl
bGYuZHJpdmVyLkRhdGVUaW1lVHlwZSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMoZGF0ZS55ZWFyLCAyMDA2KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRh
dGUubW9udGgsIDEwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRhdGUuZGF5
LCAyNCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpCisKKworIyBU
T0RPOiB0aGUgZm9sbG93aW5nIHRlc3RzIG11c3QgYmUgb3ZlcnJpZGRlbgorCisgICAgZGVmIHRl
c3RfbmV4dHNldChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3Rfc2V0b3V0cHV0
c2l6ZShzZWxmKToKKyAgICAgICAgcGFzcworCkluZGV4OiBjdHguYwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBj
dHguYwkoLi4uL2JyYW5jaGVzLzIuNi9zeWJhc2UpCShyw6l2aXNpb24gNzgpCisrKyBjdHguYwko
Li4uL3RydW5rL3N5YmFzZSkJKGNvcGllIGRlIHRyYXZhaWwpCkBAIC0xNDgxLDcgKzE0ODEsNyBA
QAogICAgIFB5X1hERUNSRUYoc2VsZi0+Y2xpZW50bXNnX2NiKTsKICAgICBjdHhfZGVsX29iamVj
dChzZWxmKTsKIAotICAgIFB5TWVtX0RFTChzZWxmKTsKKyAgICBQeU9iamVjdF9ERUwoc2VsZik7
CiB9CiAKICNkZWZpbmUgT0ZGKHgpIG9mZnNldG9mKENTX0NPTlRFWFRPYmosIHgpCkluZGV4OiBs
b2NhbGUuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBsb2NhbGUuYwkoLi4uL2JyYW5jaGVzLzIuNi9zeWJhc2Up
CShyw6l2aXNpb24gNzgpCisrKyBsb2NhbGUuYwkoLi4uL3RydW5rL3N5YmFzZSkJKGNvcGllIGRl
IHRyYXZhaWwpCkBAIC03Myw3ICs3Myw3IEBACiAJCSAgICAgIHZhbHVlX3N0cihWQUxfU1RBVFVT
LCBzdGF0dXMpKTsKICAgICB9CiAgICAgUHlfWERFQ1JFRihzZWxmLT5jdHgpOwotICAgIFB5TWVt
X0RFTChzZWxmKTsKKyAgICBQeU9iamVjdF9ERUwoc2VsZik7CiB9CiAKIHN0YXRpYyBpbnQgY3Nk
YXRlX3R5cGUoaW50IHR5cGUpCkluZGV4OiBudW1lcmljLmMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbnVtZXJp
Yy5jCSguLi4vYnJhbmNoZXMvMi42L3N5YmFzZSkJKHLDqXZpc2lvbiA3OCkKKysrIG51bWVyaWMu
YwkoLi4uL3RydW5rL3N5YmFzZSkJKGNvcGllIGRlIHRyYXZhaWwpCkBAIC0yOTksNyArMjk5LDcg
QEAKIHN0YXRpYyB2b2lkIE51bWVyaWNfZGVhbGxvYyhOdW1lcmljT2JqICpzZWxmKQogewogICAg
IFNZX0xFQUtfVU5SRUcoc2VsZik7Ci0gICAgUHlNZW1fREVMKHNlbGYpOworICAgIFB5T2JqZWN0
X0RFTChzZWxmKTsKIH0KIAogI2lmZGVmIEhBVkVfQ1NfQ01QCkluZGV4OiBjbWQuYwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBjbWQuYwkoLi4uL2JyYW5jaGVzLzIuNi9zeWJhc2UpCShyw6l2aXNpb24gNzgpCisr
KyBjbWQuYwkoLi4uL3RydW5rL3N5YmFzZSkJKGNvcGllIGRlIHRyYXZhaWwpCkBAIC03ODgsNyAr
Nzg4LDcgQEAKIAlTWV9DT05OX0VORF9USFJFQURTKHNlbGYtPmNvbm4pOwogCiAJaWYgKHNlbGYt
PmRlYnVnKSB7Ci0JICAgIGRlYnVnX21zZygiY3RfcGFyYW0oY21kJXMsICZmbXQ9Iiwgc2VsZi0+
c2VyaWFsKTsKKwkgICAgZGVidWdfbXNnKCJjdF9wYXJhbShjbWQlZCwgJmZtdD0iLCBzZWxmLT5z
ZXJpYWwpOwogCSAgICBkYXRhZm10X2RlYnVnKCZkYXRhZm10LT5mbXQpOwogCSAgICBkZWJ1Z19t
c2coIiwgTlVMTCwgQ1NfVU5VU0VELCBDU19VTlVTRUQpIC0+ICVzXG4iLAogCQkgICAgICB2YWx1
ZV9zdHIoVkFMX1NUQVRVUywgc3RhdHVzKSk7CkBAIC0xMjY2LDcgKzEyNjYsNyBAQAogCQkgICAg
ICBzZWxmLT5zZXJpYWwsIHZhbHVlX3N0cihWQUxfU1RBVFVTLCBzdGF0dXMpKTsKICAgICB9CiAg
ICAgUHlfWERFQ1JFRihzZWxmLT5jb25uKTsKLSAgICBQeU1lbV9ERUwoc2VsZik7CisgICAgUHlP
YmplY3RfREVMKHNlbGYpOwogfQogCiAjZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihDU19DT01N
QU5ET2JqLCB4KQpJbmRleDogZGF0YWJ1Zi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRhdGFidWYuYwkoLi4u
L2JyYW5jaGVzLzIuNi9zeWJhc2UpCShyw6l2aXNpb24gNzgpCisrKyBkYXRhYnVmLmMJKC4uLi90
cnVuay9zeWJhc2UpCShjb3BpZSBkZSB0cmF2YWlsKQpAQCAtMTEyLDcgKzExMiw3IEBACiAgICAg
aWYgKHNlbGYtPmluZGljYXRvciAhPSBOVUxMKQogCWZyZWUoc2VsZi0+aW5kaWNhdG9yKTsKIAot
ICAgIFB5TWVtX0RFTChzZWxmKTsKKyAgICBQeU9iamVjdF9ERUwoc2VsZik7CiB9CiAKIC8qIENv
ZGUgdG8gaGFuZGxlIGFjY2Vzc2luZyBEYXRhQnVmIG9iamVjdHMgYXMgc2VxdWVuY2Ugb2JqZWN0
cyAqLwpJbmRleDogaW9kZXNjLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaW9kZXNjLmMJKC4uLi9icmFuY2hl
cy8yLjYvc3liYXNlKQkocsOpdmlzaW9uIDc4KQorKysgaW9kZXNjLmMJKC4uLi90cnVuay9zeWJh
c2UpCShjb3BpZSBkZSB0cmF2YWlsKQpAQCAtNTUsNyArNTUsNyBAQAogc3RhdGljIHZvaWQgQ1Nf
SU9ERVNDX2RlYWxsb2MoQ1NfSU9ERVNDT2JqICpzZWxmKQogewogICAgIFNZX0xFQUtfVU5SRUco
c2VsZik7Ci0gICAgUHlNZW1fREVMKHNlbGYpOworICAgIFB5T2JqZWN0X0RFTChzZWxmKTsKIH0K
IAogLyogQ29kZSB0byBhY2Nlc3Mgc3RydWN0dXJlIG1lbWJlcnMgYnkgYWNjZXNzaW5nIGF0dHJp
YnV0ZXMgKi8KSW5kZXg6IHNldHVwLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNldHVwLnB5CSguLi4vYnJh
bmNoZXMvMi42L3N5YmFzZSkJKHLDqXZpc2lvbiA3OCkKKysrIHNldHVwLnB5CSguLi4vdHJ1bmsv
c3liYXNlKQkoY29waWUgZGUgdHJhdmFpbCkKQEAgLTMxLDYgKzMxLDEwIEBACiAgICAgICAgIG9j
cyA9IG9zLmVudmlyb25bJ1NZQkFTRV9PQ1MnXQogICAgICAgICBzeWJhc2UgPSBvcy5wYXRoLmpv
aW4oc3liYXNlLCBvY3MpCiAKK2hhdmU2NGJpdCA9IEZhbHNlICAgICAgICAKK2lmIHN5cy5tYXhp
bnQgPiAyMTQ3NDgzNjQ3OgorICAgIGhhdmU2NGJpdCA9IFRydWUKKwogaWYgb3MubmFtZSA9PSAn
cG9zaXgnOiAgICAgICAgICAgICAgICAgICMgdW5peAogICAgICMgTW9zdCBwZW9wbGUgd2lsbCBk
ZWZpbmUgdGhlIGxvY2F0aW9uIG9mIHRoZWlyIFN5YmFzZQogICAgICMgaW5zdGFsbGF0aW9uIGlu
IHRoZWlyIGVudmlyb25tZW50LgpAQCAtNTAsNyArNTQsMTEgQEAKICAgICAgICAgbGliX25hbWVz
ID0gWydibGsnLCAnY3QnLCAnY3MnLCAnY29tbicsICd0Y2wnLCAnaW50bCcsICdpbnNjayddCiAg
ICAgZWxzZToKICAgICAgICAgbGliX25hbWVzID0gWydibGsnLCAnY3QnLCAnY3MnLCAndGNsJywg
J2NvbW4nLCAnaW50bCddCisgICAgIyBmb3IgU3liYXNlIDE1LjAKKyAgICBsaWJfbmFtZXMgKz0g
WydzeWJibGsnLCAnc3liY3QnLCAnc3liY3MnLCAnc3lidGNsJywgJ3N5Ymluc2NrJywgJ3N5YmNv
bW4nLCAnc3liaW50bCcsICdzeWJ1bmljJ10KICAgICBmb3IgbmFtZSBpbiBsaWJfbmFtZXM6Cisg
ICAgICAgIGlmIGhhdmU2NGJpdDoKKyAgICAgICAgICAgIG5hbWUgKz0gJ19yNjQnCiAgICAgICAg
IGxpYl9uYW1lID0gb3MucGF0aC5qb2luKHN5YmFzZSwgJ2xpYicsICdsaWIlcy5hJyAlIG5hbWUp
CiAgICAgICAgIGlmIG9zLmFjY2VzcyhsaWJfbmFtZSwgb3MuUl9PSyk6CiAgICAgICAgICAgICBz
eWJfbGlicy5hcHBlbmQobmFtZSkKQEAgLTg3LDcgKzk1LDEwIEBACiBydW50aW1lX2xpYnJhcnlf
ZGlycyA9IE5vbmUKIHRyeToKICAgICBpZiBvcy51bmFtZSgpWzBdID09ICdTdW5PUyc6Ci0gICAg
ICAgIHN5Yl9saWJzLmFwcGVuZCgnc3liZGInKQorICAgICAgICBpZiBoYXZlNjRiaXQ6CisgICAg
ICAgICAgICBzeWJfbGlicy5hcHBlbmQoJ3N5YmRiNjQnKQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgc3liX2xpYnMuYXBwZW5kKCdzeWJkYicpCiAgICAgICAgIHN5Yl9saWJzLnJlbW92ZSgn
Y29tbicpCiAgICAgICAgIGV4dHJhX29iamVjdHMgPSBbb3MucGF0aC5qb2luKHN5Yl9saWJkaXIs
ICdsaWJjb21uLmEnKV0KICAgICAgICAgcnVudGltZV9saWJyYXJ5X2RpcnMgPSBbc3liX2xpYmRp
cl0KQEAgLTk2LDYgKzEwNyw5IEBACiAKIHN5Yl9tYWNyb3MgPSBbKCdXQU5UX0JVTEtDT1BZJywg
Tm9uZSldCiAKK2lmIGhhdmU2NGJpdDoKKyAgICBzeWJfbWFjcm9zLmFwcGVuZCgoJ1NZQl9MUDY0
JywgTm9uZSkpCisKICMgZGlzdHV0aWxzIGRvZXMgbm90IGFsbG93IC1EIEhBVkVfRlJFRVREUz02
MCBzbyBJIGhhdmUgdG8gZmluZCB0aGlzCiAjIGFyZ3VtZW50IG15c2VsZiBhbmQgcmVtb3ZlIGl0
IGZyb20gc3lzLmFyZ3YgYW5kIHNldCB0aGUgbWFjcm8gdmlhCiAjIHRoZSBkZWZpbmVfbWFjcm9z
IGFyZ3VtZW50IHRvIHRoZSBleHRlbnNpb24gbW9kdWxlLgpAQCAtMTc5LDcgKzE5Myw3IEBACiAg
ICAgICAgIHNkaXN0LnJ1bihzZWxmKQogCiBzZXR1cChuYW1lPSJzeWJhc2UiLAotICAgICAgdmVy
c2lvbj0iMC4zNyIsCisgICAgICB2ZXJzaW9uPSIwLjM3c3NhIiwKICAgICAgIG1haW50YWluZXI9
IkRhdmUgQ29sZSIsCiAgICAgICBtYWludGFpbmVyX2VtYWlsPSJkamNAb2JqZWN0LWNyYWZ0LmNv
bS5hdSIsCiAgICAgICBkZXNjcmlwdGlvbj0iU3liYXNlIEV4dGVuc2lvbiB0byBQeXRob24iLApA
QCAtMjAwLDUgKzIxNCw2IEBACiAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICBdLAog
ICAgICAgY21kY2xhc3M9eydzZGlzdCc6IG15X3NkaXN0fSwKKyAgICAgICMgdGVzdF9zdWl0ZSA9
ICdub3NlLmNvbGxlY3RvcicgIyBlYXN5X3NldHVwIG9ubHkKICAgICAgICkKIApJbmRleDogYmxr
LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gYmxrLmMJKC4uLi9icmFuY2hlcy8yLjYvc3liYXNlKQkocsOpdmlz
aW9uIDc4KQorKysgYmxrLmMJKC4uLi90cnVuay9zeWJhc2UpCShjb3BpZSBkZSB0cmF2YWlsKQpA
QCAtNjc4LDcgKzY3OCw3IEBACiAgICAgfQogI2VuZGlmCiAgICAgUHlfWERFQ1JFRihzZWxmLT5j
b25uKTsKLSAgICBQeU1lbV9ERUwoc2VsZik7CisgICAgUHlPYmplY3RfREVMKHNlbGYpOwogfQog
CiAjZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihDU19CTEtERVNDT2JqLCB4KQpJbmRleDogbXNn
cy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIG1zZ3MuYwkoLi4uL2JyYW5jaGVzLzIuNi9zeWJhc2UpCShyw6l2
aXNpb24gNzgpCisrKyBtc2dzLmMJKC4uLi90cnVuay9zeWJhc2UpCShjb3BpZSBkZSB0cmF2YWls
KQpAQCAtMjgsNyArMjgsNyBAQAogc3RhdGljIHZvaWQgQ1NfQ0xJRU5UTVNHX2RlYWxsb2MoQ1Nf
Q0xJRU5UTVNHT2JqICpzZWxmKQogewogICAgIFNZX0xFQUtfVU5SRUcoc2VsZik7Ci0gICAgUHlN
ZW1fREVMKHNlbGYpOworICAgIFB5T2JqZWN0X0RFTChzZWxmKTsKIH0KIAogI2RlZmluZSBDTElF
TlRfT0ZGKHgpIG9mZnNldG9mKENTX0NMSUVOVE1TRywgeCkKQEAgLTEyNiw3ICsxMjYsNyBAQAog
c3RhdGljIHZvaWQgQ1NfU0VSVkVSTVNHX2RlYWxsb2MoQ1NfU0VSVkVSTVNHT2JqICpzZWxmKQog
ewogICAgIFNZX0xFQUtfVU5SRUcoc2VsZik7Ci0gICAgUHlNZW1fREVMKHNlbGYpOworICAgIFB5
T2JqZWN0X0RFTChzZWxmKTsKIH0KIAogI2RlZmluZSBTRVJWX09GRih4KSBvZmZzZXRvZihDU19T
RVJWRVJNU0csIHgpCkluZGV4OiBkYXRhZm10LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGF0YWZtdC5jCSgu
Li4vYnJhbmNoZXMvMi42L3N5YmFzZSkJKHLDqXZpc2lvbiA3OCkKKysrIGRhdGFmbXQuYwkoLi4u
L3RydW5rL3N5YmFzZSkJKGNvcGllIGRlIHRyYXZhaWwpCkBAIC0xMzEsNyArMTMxLDcgQEAKIHN0
YXRpYyB2b2lkIENTX0RBVEFGTVRfZGVhbGxvYyhDU19EQVRBRk1UT2JqICpzZWxmKQogewogICAg
IFNZX0xFQUtfVU5SRUcoc2VsZik7Ci0gICAgUHlNZW1fREVMKHNlbGYpOworICAgIFB5T2JqZWN0
X0RFTChzZWxmKTsKIH0KIAogdm9pZCBkYXRhZm10X2RlYnVnKENTX0RBVEFGTVQgKmZtdCkKSW5k
ZXg6IFRPRE8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVE9ETwkoLi4uL2JyYW5jaGVzLzIuNi9zeWJhc2UpCShy
w6l2aXNpb24gNzgpCisrKyBUT0RPCSguLi4vdHJ1bmsvc3liYXNlKQkoY29waWUgZGUgdHJhdmFp
bCkKQEAgLTYsOCArNiw2IEBACiAKIC0gQkxPQiBjb2x1bW5zICh0ZXh0L2ltYWdlKQogCi0tIFB5
VW5pdAotCiAtIEJ1bGtjb3B5IGNvcHkgb3V0CiAKIC0gRGF0YUJ1ZltuXSA9IHZhbCBzaG91bGQg
ZG8gbW9yZSBjb252ZXJzaW9ucwpJbmRleDogbW9uZXkuYwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBtb25leS5j
CSguLi4vYnJhbmNoZXMvMi42L3N5YmFzZSkJKHLDqXZpc2lvbiA3OCkKKysrIG1vbmV5LmMJKC4u
Li90cnVuay9zeWJhc2UpCShjb3BpZSBkZSB0cmF2YWlsKQpAQCAtMjYyLDcgKzI2Miw3IEBACiBz
dGF0aWMgdm9pZCBNb25leV9kZWFsbG9jKE1vbmV5T2JqICpzZWxmKQogewogICAgIFNZX0xFQUtf
VU5SRUcoc2VsZik7Ci0gICAgUHlNZW1fREVMKHNlbGYpOworICAgIFB5T2JqZWN0X0RFTChzZWxm
KTsKIH0KIAogI2lmZGVmIEhBVkVfQ1NfQ01QCkluZGV4OiBkYXRldGltZS5jCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGRhdGV0aW1lLmMJKC4uLi9icmFuY2hlcy8yLjYvc3liYXNlKQkocsOpdmlzaW9uIDc4KQor
KysgZGF0ZXRpbWUuYwkoLi4uL3RydW5rL3N5YmFzZSkJKGNvcGllIGRlIHRyYXZhaWwpCkBAIC0x
NTQsNyArMTU0LDcgQEAKIHsKICAgICBTWV9MRUFLX1VOUkVHKHNlbGYpOwogCi0gICAgUHlNZW1f
REVMKHNlbGYpOworICAgIFB5T2JqZWN0X0RFTChzZWxmKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0
ICpEYXRlVGltZV9yZXByKERhdGVUaW1lT2JqICpzZWxmKQpJbmRleDogU3liYXNlLnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFN5YmFzZS5weQkoLi4uL2JyYW5jaGVzLzIuNi9zeWJhc2UpCShyw6l2aXNpb24g
NzgpCisrKyBTeWJhc2UucHkJKC4uLi90cnVuay9zeWJhc2UpCShjb3BpZSBkZSB0cmF2YWlsKQpA
QCAtMywxNiArMywyMyBAQAogIwogIyBMSUNFTkNFIC0gc2VlIExJQ0VOQ0UgZmlsZSBkaXN0cmli
dXRlZCB3aXRoIHRoaXMgc29mdHdhcmUgZm9yIGRldGFpbHMuCiAjCisKIHRyeToKLSAgICBpbXBv
cnQgRGF0ZVRpbWUKKyAgICBmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZSBhcyBweV9kYXRl
dGltZQogICAgIHVzZV9kYXRldGltZSA9IDEKKyAgICB1c2VfcHlfZGF0ZXRpbWUgPSAxCiBleGNl
cHQgSW1wb3J0RXJyb3I6CisgICAgdXNlX3B5X2RhdGV0aW1lID0gMAogICAgIHRyeToKLSAgICAg
ICAgaW1wb3J0IG14LkRhdGVUaW1lCi0gICAgICAgIERhdGVUaW1lID0gbXguRGF0ZVRpbWUKKyAg
ICAgICAgZnJvbSBEYXRlVGltZSBpbXBvcnQgRGF0ZVRpbWUKICAgICAgICAgdXNlX2RhdGV0aW1l
ID0gMQogICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgdXNlX2RhdGV0aW1lID0gMAor
ICAgICAgICB0cnk6CisgICAgICAgICAgICBmcm9tIG14LkRhdGVUaW1lIGltcG9ydCBEYXRlVGlt
ZQorICAgICAgICAgICAgdXNlX2RhdGV0aW1lID0gMQorICAgICAgICBleGNlcHQgSW1wb3J0RXJy
b3I6CisgICAgICAgICAgICB1c2VfZGF0ZXRpbWUgPSAwCisKIGltcG9ydCBzeXMKIGltcG9ydCB0
aW1lCiBpbXBvcnQgc3RyaW5nCkBAIC0yMiw3ICsyOSw3IEBACiAKIHNldF9kZWJ1ZyhzeXMuc3Rk
ZXJyKQogCi1fX3ZlcnNpb25fXyA9ICcwLjM3JworX192ZXJzaW9uX18gPSAnMC4zN3NzYScKIAog
IyBEQi1BUEkgdmFsdWVzCiBhcGlsZXZlbCA9ICcyLjAnICAgICAgICAgICAgICAgICAgICAgICAg
IyBEQiBBUEkgbGV2ZWwgc3VwcG9ydGVkCkBAIC04NSw2ICs5MiwxMCBAQAogICAgIHBhc3MKIAog
CitjbGFzcyBTdG9yZWRQcm9jZWR1cmVFcnJvcihQcm9ncmFtbWluZ0Vycm9yKToKKyAgICBwYXNz
CisKKwogY2xhc3MgTm90U3VwcG9ydGVkRXJyb3IoRGF0YWJhc2VFcnJvcik6CiAgICAgcGFzcwog
CkBAIC0xODYsNyArMTk3LDExIEBACiAKIGRlZiBfc2VydmVybXNnX2NiKGN0eCwgY29ubiwgbXNn
KToKICAgICBtbiA9IG1zZy5tc2dudW1iZXIKLSAgICBpZiBtbiBpbiAoMCwgNTcwMSwgNTcwMywg
NTcwNCkgb3IgKChtbiA+PSA2MjAwKSBhbmQgKG1uIDwgNjMwMCkpOgorICAgIGlmIG1uID09IDI2
MDE6ICMjIEF0dGVtcHQgdG8gaW5zZXJ0IGR1cGxpY2F0ZSBrZXkgcm93IGluIG9iamVjdCB3aXRo
IHVuaXF1ZSBpbmRleAorICAgICAgICByYWlzZSBJbnRlZ3JpdHlFcnJvcihfZm10X3NlcnZlciht
c2cpKQorICAgIGVsaWYgbW4gPT0gMjgxMjogIyMgUHJvY2VkdXJlIG5vdCBmb3VuZAorICAgICAg
ICByYWlzZSBTdG9yZWRQcm9jZWR1cmVFcnJvcigncHJvY2VkdXJlIG5vdCBmb3VuZCAlcycsIF9m
bXRfc2VydmVyKG1zZykpCisgICAgZWxpZiBtbiBpbiAoMCwgNTcwMSwgNTcwMywgNTcwNCkgb3Ig
KChtbiA+PSA2MjAwKSBhbmQgKG1uIDwgNjMwMCkpOgogICAgICAgICAjIE5vbi1lcnJvcnM6CiAg
ICAgICAgICMgICAgMCAgICAgIFBSSU5UCiAgICAgICAgICMgNTcwMSAgICAgIENoYW5nZWQgZGIg
Y29udGV4dApAQCAtMjI0LDEwICsyMzksMTQgQEAKIAogCiBkZWYgX2NvbHVtbl92YWx1ZSh2YWwp
OgotICAgIGlmIHVzZV9kYXRldGltZSBhbmQgdHlwZSh2YWwpIGlzIERhdGVUaW1lVHlwZToKLSAg
ICAgICAgcmV0dXJuIERhdGVUaW1lLkRhdGVUaW1lKHZhbC55ZWFyLCB2YWwubW9udGggKyAxLCB2
YWwuZGF5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsLmhvdXIsIHZhbC5t
aW51dGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwuc2Vjb25kICsgdmFs
Lm1zZWNvbmQgLyAxMDAwLjApCisgICAgaWYgdXNlX3B5X2RhdGV0aW1lIGFuZCB0eXBlKHZhbCkg
aXMgRGF0ZVRpbWVUeXBlOgorICAgICAgICByZXR1cm4gcHlfZGF0ZXRpbWUodmFsLnllYXIsIHZh
bC5tb250aCArIDEsIHZhbC5kYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwuaG91
ciwgdmFsLm1pbnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbC5zZWNvbmQsIHZh
bC5tc2Vjb25kKjEwMDApCisgICAgZWxpZiB1c2VfZGF0ZXRpbWUgYW5kIHR5cGUodmFsKSBpcyBE
YXRlVGltZVR5cGU6CisgICAgICAgIHJldHVybiBEYXRlVGltZSh2YWwueWVhciwgdmFsLm1vbnRo
ICsgMSwgdmFsLmRheSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbC5ob3VyLCB2YWwubWlu
dXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgdmFsLnNlY29uZCArIHZhbC5tc2Vjb25kIC8g
MTAwMC4wKQogICAgIGVsc2U6CiAgICAgICAgIHJldHVybiB2YWwKIApAQCAtNDk2LDYgKzUxNSwx
MyBAQAogICAgICAgICAgICAgd2hpbGUgc2VsZi5fbG9ja19jb3VudDoKICAgICAgICAgICAgICAg
ICBzZWxmLl91bmxvY2soKQogCisgICAgZGVmIF9yYWlzZV9leGNlcHRpb24oc2VsZiwgZXhjKToK
KyAgICAgICAgaWYgc2VsZi5fc3RhdGUgbm90IGluIChfTEFaWV9JRExFLCBfTEFaWV9DTE9TRUQp
OgorICAgICAgICAgICAgaWYgc2VsZi5fb3duZXIuX2Nvbm4uY3RfY2FuY2VsKENTX0NBTkNFTF9B
TEwpID09IENTX1NVQ0NFRUQ6CisgICAgICAgICAgICAgICAgc2VsZi5fc2V0X3N0YXRlKF9MQVpZ
X0lETEUpCisgICAgICAgICAgICAgICAgc2VsZi5fdW5sb2NrKCkKKyAgICAgICAgcmFpc2UgZXhj
CisKICAgICBkZWYgX3JhaXNlX2Vycm9yKHNlbGYsIGV4YywgdGV4dCk6CiAgICAgICAgIGlmIHNl
bGYuX3N0YXRlIG5vdCBpbiAoX0xBWllfSURMRSwgX0xBWllfQ0xPU0VEKToKICAgICAgICAgICAg
IGlmIHNlbGYuX293bmVyLl9jb25uLmN0X2NhbmNlbChDU19DQU5DRUxfQUxMKSA9PSBDU19TVUND
RUVEOgpAQCAtNjE2LDcgKzY0MiwxMCBAQAogICAgICAgICBzZWxmLl9hcnJheSA9IFtdCiAgICAg
ICAgIHNlbGYuX2FycmF5X3BvcyA9IDAKICAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIHN0
YXR1cywgcmVzdWx0ID0gc2VsZi5fY21kLmN0X3Jlc3VsdHMoKQorICAgICAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgICAgIHN0YXR1cywgcmVzdWx0ID0gc2VsZi5fY21kLmN0X3Jlc3VsdHMoKQor
ICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgICAgICBzZWxmLl9y
YWlzZV9leGNlcHRpb24oZSkKICAgICAgICAgICAgIGlmIHN0YXR1cyA9PSBDU19FTkRfUkVTVUxU
UzoKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9zdGF0ZSAhPSBfTEFaWV9FTkRfUkVTVUxUOgog
ICAgICAgICAgICAgICAgICAgICBzZWxmLl91bmxvY2soKQpAQCAtNjYwLDcgKzY4OSw2IEBACiAg
ICAgICAgICAgICAgICAgc3RhdHVzLCBzZWxmLnJvd2NvdW50ID0gc2VsZi5fY21kLmN0X3Jlc19p
bmZvKENTX1JPV19DT1VOVCkKICAgICAgICAgICAgICAgICBpZiBzdGF0dXMgIT0gQ1NfU1VDQ0VF
RDoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmFpc2VfZXJyb3IoRXJyb3IsICdjdF9yZXNf
aW5mbycpCi0gICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICBlbHNlOgogICAgICAg
ICAgICAgICAgIHNlbGYuX3JhaXNlX2Vycm9yKEVycm9yLCAnY3RfcmVzdWx0cycpCiAKQEAgLTY4
Myw2ICs3MTEsMTIgQEAKICAgICBkZWYgX3VubG9jayhzZWxmKToKICAgICAgICAgc2VsZi5fb3du
ZXIuX3VubG9jaygpCiAKKyAgICBkZWYgX2NoZWNrcmVhZHkoc2VsZik6CisgICAgICAgIGlmIHNl
bGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHJhaXNlIFByb2dyYW1taW5nRXJyb3IoJ2N1cnNvciBp
cyBjbG9zZWQnKQorICAgICAgICBpZiBub3Qgc2VsZi5fZmV0Y2hlcjoKKyAgICAgICAgICAgIHJh
aXNlIFByb2dyYW1taW5nRXJyb3IoJ3F1ZXJ5IGhhcyBub3QgYmVlbiBleGVjdXRlZCcpCisKICAg
ICBkZWYgY2FsbHByb2Moc2VsZiwgbmFtZSwgcGFyYW1zID0gKCkpOgogICAgICAgICAnJydEQi1B
UEkgQ3Vyc29yLmNhbGxwcm9jKCkKICAgICAgICAgJycnCkBAIC03ODMsMTkgKzgxNywxMyBAQAog
ICAgIGRlZiBmZXRjaG9uZShzZWxmKToKICAgICAgICAgJycnREItQVBJIEN1cnNvci5mZXRjaG9u
ZSgpCiAgICAgICAgICcnJwotICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6Ci0gICAgICAgICAgICBy
YWlzZSBQcm9ncmFtbWluZ0Vycm9yKCdjdXJzb3IgaXMgY2xvc2VkJykKLSAgICAgICAgaWYgbm90
IHNlbGYuX2ZldGNoZXI6Ci0gICAgICAgICAgICByYWlzZSBQcm9ncmFtbWluZ0Vycm9yKCdxdWVy
eSBoYXMgbm90IGJlZW4gZXhlY3V0ZWQnKQorICAgICAgICBzZWxmLl9jaGVja3JlYWR5KCkKICAg
ICAgICAgcmV0dXJuIHNlbGYuX2ZldGNoZXIuZmV0Y2hvbmUoKQogCiAgICAgZGVmIGZldGNobWFu
eShzZWxmLCBudW0gPSAtMSk6CiAgICAgICAgICcnJ0RCLUFQSSBDdXJzb3IuZmV0Y2htYW55KCkK
ICAgICAgICAgJycnCi0gICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKLSAgICAgICAgICAgIHJhaXNl
IFByb2dyYW1taW5nRXJyb3IoJ2N1cnNvciBpcyBjbG9zZWQnKQotICAgICAgICBpZiBub3Qgc2Vs
Zi5fZmV0Y2hlcjoKLSAgICAgICAgICAgIHJhaXNlIFByb2dyYW1taW5nRXJyb3IoJ3F1ZXJ5IGhh
cyBub3QgYmVlbiBleGVjdXRlZCcpCisgICAgICAgIHNlbGYuX2NoZWNrcmVhZHkoKQogICAgICAg
ICBpZiBudW0gPCAwOgogICAgICAgICAgICAgbnVtID0gc2VsZi5hcnJheXNpemUKICAgICAgICAg
cmV0dXJuIHNlbGYuX2ZldGNoZXIuZmV0Y2htYW55KG51bSkKQEAgLTgwMywxOSArODMxLDEzIEBA
CiAgICAgZGVmIGZldGNoYWxsKHNlbGYpOgogICAgICAgICAnJydEQi1BUEkgQ3Vyc29yLmZldGNo
YWxsKCkKICAgICAgICAgJycnCi0gICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKLSAgICAgICAgICAg
IHJhaXNlIFByb2dyYW1taW5nRXJyb3IoJ2N1cnNvciBpcyBjbG9zZWQnKQotICAgICAgICBpZiBu
b3Qgc2VsZi5fZmV0Y2hlcjoKLSAgICAgICAgICAgIHJhaXNlIFByb2dyYW1taW5nRXJyb3IoJ3F1
ZXJ5IGhhcyBub3QgYmVlbiBleGVjdXRlZCcpCisgICAgICAgIHNlbGYuX2NoZWNrcmVhZHkoKQog
ICAgICAgICByZXR1cm4gc2VsZi5fZmV0Y2hlci5mZXRjaGFsbCgpCiAKICAgICBkZWYgbmV4dHNl
dChzZWxmKToKICAgICAgICAgJycnREItQVBJIEN1cnNvci5uZXh0c2V0KCkKICAgICAgICAgJycn
Ci0gICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKLSAgICAgICAgICAgIHJhaXNlIFByb2dyYW1taW5n
RXJyb3IoJ2N1cnNvciBpcyBjbG9zZWQnKQotICAgICAgICBpZiBub3Qgc2VsZi5fZmV0Y2hlcjoK
LSAgICAgICAgICAgIHJhaXNlIFByb2dyYW1taW5nRXJyb3IoJ3F1ZXJ5IGhhcyBub3QgYmVlbiBl
eGVjdXRlZCcpCisgICAgICAgIHNlbGYuX2NoZWNrcmVhZHkoKQogICAgICAgICBkZXNjID0gc2Vs
Zi5fZmV0Y2hlci5uZXh0c2V0KCkKICAgICAgICAgaWYgZGVzYzoKICAgICAgICAgICAgIHNlbGYu
ZGVzY3JpcHRpb24gPSBkZXNjCkBAIC04NjYsNiArODg4LDI4IEBACiAgICAgICAgIGlmIG5vdCBk
ZWxheV9jb25uZWN0OgogICAgICAgICAgICAgc2VsZi5jb25uZWN0KCkKIAorICAgIGRlZiBfX2dl
dGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgIyBFeHBvc2UgZXhjZXB0aW9uIGNsYXNzZXMg
dmlhIHRoZSBDb25uZWN0aW9uIG9iamVjdCBzbworICAgICAgICAjIHByb2dyYW1tZXJzIGRvbid0
IGhhdmUgdG8gdGllIHRoZWlyIGNvZGUgdG8gdGhpcyBtb2R1bGUgd2l0aAorICAgICAgICAjICJm
cm9tIFN5YmFzZSBpbXBvcnQgRGF0YWJhc2VFcnJvciIgYWxsIG92ZXIgdGhlIHBsYWNlLiAgU2Vl
CisgICAgICAgICMgUEVQIDI0OSwgIk9wdGlvbmFsIERCIEFQSSBFeHRlbnNpb25zIi4KKyAgICAg
ICAgbmFtZXMgPSAoJ1dhcm5pbmcnLAorICAgICAgICAgICAgICAgICAnRXJyb3InLAorICAgICAg
ICAgICAgICAgICAnSW50ZXJmYWNlRXJyb3InLAorICAgICAgICAgICAgICAgICAnRGF0YWJhc2VF
cnJvcicsCisgICAgICAgICAgICAgICAgICdEYXRhRXJyb3InLAorICAgICAgICAgICAgICAgICAn
T3BlcmF0aW9uYWxFcnJvcicsCisgICAgICAgICAgICAgICAgICdJbnRlZ3JpdHlFcnJvcicsCisg
ICAgICAgICAgICAgICAgICdJbnRlcm5hbEVycm9yJywKKyAgICAgICAgICAgICAgICAgJ1Byb2dy
YW1taW5nRXJyb3InLAorICAgICAgICAgICAgICAgICAnU3RvcmVkUHJvY2VkdXJlRXJyb3InLAor
ICAgICAgICAgICAgICAgICAnTm90U3VwcG9ydGVkRXJyb3InLAorICAgICAgICAgICAgICAgICkK
KyAgICAgICAgaWYgbmFtZSBpbiBuYW1lczoKKyAgICAgICAgICAgIHJldHVybiBnZXRhdHRyKHN5
cy5tb2R1bGVzW3NlbGYuX19tb2R1bGVfX10sIG5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcihuYW1lKQorCiAgICAgZGVmIF9sb2NrKHNlbGYpOgog
ICAgICAgICBpZiBzZWxmLl9kb19sb2NraW5nOgogICAgICAgICAgICAgc2VsZi5fY29ubmxvY2su
YWNxdWlyZSgpCkBAIC05NjUsNiArMTAwOSwxNCBAQAogICAgIGRlZiBjb21taXQoc2VsZiwgbmFt
ZSA9IE5vbmUpOgogICAgICAgICAnJydEQi1BUEkgQ29ubmVjdGlvbi5jb21taXQoKQogICAgICAg
ICAnJycKKyAgICAgICAgIyBXZSBuZWVkIHRvIGNhbmNlbCBhbGwgcmVzdWx0IHNldHMgYmVmb3Jl
IGNvbW1pdGluZywKKyAgICAgICAgIyBvdGhlcndpc2Ugd2UgZ2V0IGEgcGVuZGluZyByZXN1bHRz
IGVycm9yCisgICAgICAgIGlmIHNlbGYuX2lzX2Nvbm5lY3RlZDoKKyAgICAgICAgICAgIHNlbGYu
X2xvY2soKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX2Nvbm4uY3Rf
Y2FuY2VsKENTX0NBTkNFTF9BTEwpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAg
ICAgIHNlbGYuX3VubG9jaygpCiAgICAgICAgIGlmIG5hbWU6CiAgICAgICAgICAgICBzZWxmLmV4
ZWN1dGUoJ2NvbW1pdCB0cmFuc2FjdGlvbiAlcycgJSBuYW1lKQogICAgICAgICBlbHNlOgpJbmRl
eDogY29ubi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvbm4uYwkoLi4uL2JyYW5jaGVzLzIuNi9zeWJhc2Up
CShyw6l2aXNpb24gNzgpCisrKyBjb25uLmMJKC4uLi90cnVuay9zeWJhc2UpCShjb3BpZSBkZSB0
cmF2YWlsKQpAQCAtMTI2OSw3ICsxMjY5LDcgQEAKICAgICBTWV9MT0NLX0ZSRUUoc2VsZik7CiAg
ICAgUHlfWERFQ1JFRihzZWxmLT5jdHgpOwogICAgIGNvbm5fZGVsX29iamVjdChzZWxmKTsKLSAg
ICBQeU1lbV9ERUwoc2VsZik7CisgICAgUHlPYmplY3RfREVMKHNlbGYpOwogfQogCiAjZGVmaW5l
IE9GRih4KSBvZmZzZXRvZihDU19DT05ORUNUSU9OT2JqLCB4KQo=
------=_Part_21731_16256565.1165231367573
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
Python-sybase mailing list
[email protected]
https://www.object-craft.com.au/cgi-bin/mailman/listinfo/python-sybase

------=_Part_21731_16256565.1165231367573--