[pgAdmin][RM5000] Logout the inactive session

Aditya Toshniwal <[email protected]> Mon, 13 Jan 2020 19:03:42 +0530
Newsgroups gmane.comp.db.postgresql.pgadmin.devel
Message-ID <CAM9w-_k-FQitHhRmVTh2F0bB4+7LGV8qxR3=v=x6hrYyzs+rDg@mail.gmail.com>
--0000000000004781d8059c05881e
Content-Type: multipart/alternative; boundary="0000000000004781d7059c05881c"

--0000000000004781d7059c05881c
Content-Type: text/plain; charset="UTF-8"

Hi Hackers,

Attached is the patch for the feature where inactive session will be logged
out. Note that, here inactive session means no user activity of mouse move,
click or keypress.
I've introduced two config params:
1. USER_INACTIVITY_TIMEOUT - Interval in seconds for the timeout. Default
is 0-Zero which means disabled.
2. OVERRIDE_USER_INACTIVITY_TIMEOUT - If set to true, tools like query tool
or debugger will override USER_INACTIVITY_TIMEOUT and will not allow the
application to timeout if a query is running for a long time.

The patch also speeds up running jasmine test cases. With webpack 4, the
default mode is changed to production instead of development unlike
previous versions. Mode is set to development explicitly to improve the
speed.

-- 
Thanks and Regards,
Aditya Toshniwal
pgAdmin Hacker | Sr. Software Engineer | EnterpriseDB India | Pune
"Don't Complain about Heat, Plant a TREE"

--0000000000004781d7059c05881c
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div class=3D"gmail_default" style=3D"font-family:verdana,=
sans-serif">Hi Hackers,</div><div class=3D"gmail_default" style=3D"font-fam=
ily:verdana,sans-serif"><br></div><div class=3D"gmail_default" style=3D"fon=
t-family:verdana,sans-serif">Attached is the=C2=A0patch=C2=A0for the featur=
e where inactive session will be logged out. Note that, here inactive sessi=
on means no user activity of mouse move, click or keypress.</div><div class=
=3D"gmail_default" style=3D"font-family:verdana,sans-serif">I&#39;ve introd=
uced=C2=A0two config params:</div>1. USER_INACTIVITY_TIMEOUT<span class=3D"=
gmail_default" style=3D"font-family:verdana,sans-serif"> - Interval in seco=
nds for the timeout. Default is 0-Zero which means disabled.</span><br>2.<s=
pan class=3D"gmail_default" style=3D"font-family:verdana,sans-serif"> </spa=
n>OVERRIDE_USER_INACTIVITY_TIMEOUT<span class=3D"gmail_default" style=3D"fo=
nt-family:verdana,sans-serif"> - If set to true, tools like query tool or d=
ebugger will override USER_INACTIVITY_TIMEOUT and will not allow the applic=
ation to timeout if a query is running for a long time.</span><div><font fa=
ce=3D"verdana, sans-serif"><br></font></div><div><font face=3D"verdana, san=
s-serif"><span class=3D"gmail_default" style=3D"font-family:verdana,sans-se=
rif">The patch also speeds up running jasmine test cases. With webpack 4, t=
he default mode is changed to production instead of development unlike prev=
ious versions. Mode is set to development explicitly to improve the speed.<=
/span><br></font><div><br></div><div>-- <br><div dir=3D"ltr" class=3D"gmail=
_signature" data-smartmail=3D"gmail_signature"><div dir=3D"ltr"><div><div d=
ir=3D"ltr"><div><div dir=3D"ltr"><div><div dir=3D"ltr"><div><div dir=3D"ltr=
"><font size=3D"2" color=3D"#000000" face=3D"verdana, sans-serif">Thanks an=
d Regards,</font><div><span style=3D"background-color:rgb(255,255,255)"><fo=
nt size=3D"2" color=3D"#000000" face=3D"verdana, sans-serif">Aditya Toshniw=
al</font></span></div><div><font face=3D"verdana, sans-serif"><span style=
=3D"background-color:rgb(255,255,255)"><font size=3D"2" color=3D"#000000">p=
gAdmin Hacker | Sr. Software Engineer |=C2=A0EnterpriseDB India |=C2=A0</fo=
nt></span><span style=3D"color:rgb(0,0,0)">Pune</span></font></div><div><fo=
nt color=3D"#38761d" face=3D"verdana, sans-serif" size=3D"1">&quot;Don&#39;=
t Complain about Heat, Plant a TREE&quot;</font></div></div></div></div></d=
iv></div></div></div></div></div></div></div></div></div>

--0000000000004781d7059c05881c--
--0000000000004781d8059c05881e
Content-Type: application/octet-stream; name="RM5000.patch"
Content-Disposition: attachment; filename="RM5000.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_k5chm5ne0>
X-Attachment-Id: f_k5chm5ne0

ZGlmZiAtLWdpdCBhL3dlYi9jb25maWcucHkgYi93ZWIvY29uZmlnLnB5CmluZGV4IGYyNDM3M2U0
YS4uMzdhZGZiMWU4IDEwMDY0NAotLS0gYS93ZWIvY29uZmlnLnB5CisrKyBiL3dlYi9jb25maWcu
cHkKQEAgLTQ0Nyw2ICs0NDcsMTggQEAgU0VTU0lPTl9FWFBJUkFUSU9OX1RJTUUgPSAxCiAjIHRo
ZSBzZXNzaW9uIGZpbGVzIGZvciBjbGVhbnVwIGFmdGVyIHNwZWNpZmllZCBudW1iZXIgb2YgKmhv
dXJzKi4KIENIRUNLX1NFU1NJT05fRklMRVNfSU5URVJWQUwgPSAyNAogCisjIFVTRVJfSU5BQ1RJ
VklUWV9USU1FT1VUIGlzIGludGVydmFsIGluIFNlY29uZHMuIElmIHRoZSBwZ0FkbWluIHNjcmVl
biBpcyBsZWZ0CisjIHVuYXR0ZW5kZWQgZm9yIDxVU0VSX0lOQUNUSVZJVFlfVElNRU9VVD4gc2Vj
b25kcyB0aGVuIHRoZSB1c2VyIHdpbGwKKyMgYmUgbG9nZ2VkIG91dC4gV2hlbiBzZXQgdG8gMCwg
dGhlIHRpbWVvdXQgd2lsbCBiZSBkaXNhYmxlZC4KK1VTRVJfSU5BQ1RJVklUWV9USU1FT1VUID0g
MAorCisjIE9WRVJSSURFX1VTRVJfSU5BQ1RJVklUWV9USU1FT1VUIHdoZW4gc2V0IHRvIFRydWUs
IGl0IHdpbGwgb3ZlcnJpZGUKKyMgVVNFUl9JTkFDVElWSVRZX1RJTUVPVVQgdG8gcHJldmVudCBw
Z0FkbWluIGZyb20gdGltaW5nIG91dCBpcnJlc3BlY3RpdmUgb2YKKyMgdXNlciBhY3Rpdml0eS4K
KyMgQ3VycmVudGx5LCBpdCBpcyB1c2VkIGJ5IHF1ZXJ5IHRvb2wgdG8gcHJldmVudCB0aW1lb3V0
IG9mIGxvbmcgcnVubmluZworIyBxdWVyaWVzLgorT1ZFUlJJREVfVVNFUl9JTkFDVElWSVRZX1RJ
TUVPVVQgPSBUcnVlCisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIFNTSCBUdW5uZWxpbmcgc3VwcG9y
dHMgb25seSBmb3IgUHl0aG9uIDIuNyBhbmQgMy40KwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAt
LWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvX19pbml0X18ucHkgYi93ZWIvcGdhZG1pbi9icm93
c2VyL19faW5pdF9fLnB5CmluZGV4IDVhZWUzNDFmZC4uM2E1NGFhZmU0IDEwMDY0NAotLS0gYS93
ZWIvcGdhZG1pbi9icm93c2VyL19faW5pdF9fLnB5CisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIv
X19pbml0X18ucHkKQEAgLTUyMCw2ICs1MjAsMTEgQEAgY2xhc3MgQnJvd3NlclBsdWdpbk1vZHVs
ZShQZ0FkbWluTW9kdWxlKToKICAgICAgICAgKQogCiAKK2RlZiBfZ2V0X2xvZ291dF91cmwoKToK
KyAgICByZXR1cm4gJ3swfT9uZXh0PXsxfScuZm9ybWF0KAorICAgICAgICB1cmxfZm9yKCdzZWN1
cml0eS5sb2dvdXQnKSwgdXJsX2ZvcignYnJvd3Nlci5pbmRleCcpKQorCisKIEBibHVlcHJpbnQu
cm91dGUoIi8iKQogQHBnQ1NSRlByb3RlY3QuZXhlbXB0CiBAbG9naW5fcmVxdWlyZWQKQEAgLTU3
OSw2ICs1ODQsNyBAQCBkZWYgaW5kZXgoKToKICAgICAgICAgTU9EVUxFX05BTUUgKyAiL2luZGV4
Lmh0bWwiLAogICAgICAgICB1c2VybmFtZT1jdXJyZW50X3VzZXIuZW1haWwsCiAgICAgICAgIGlz
X2FkbWluPWN1cnJlbnRfdXNlci5oYXNfcm9sZSgiQWRtaW5pc3RyYXRvciIpLAorICAgICAgICBs
b2dvdXRfdXJsPV9nZXRfbG9nb3V0X3VybCgpLAogICAgICAgICBfPWdldHRleHQKICAgICApKQog
CkBAIC02NjYsNyArNjcyLDggQEAgZGVmIHV0aWxzKCk6CiAgICAgICAgICAgICBlZGl0b3JfaW5k
ZW50X3dpdGhfdGFicz1lZGl0b3JfaW5kZW50X3dpdGhfdGFicywKICAgICAgICAgICAgIGFwcF9u
YW1lPWNvbmZpZy5BUFBfTkFNRSwKICAgICAgICAgICAgIHBnX2xpYnBxX3ZlcnNpb249cGdfbGli
cHFfdmVyc2lvbiwKLSAgICAgICAgICAgIHN1cHBvcnRfc3NoX3R1bm5lbD1jb25maWcuU1VQUE9S
VF9TU0hfVFVOTkVMCisgICAgICAgICAgICBzdXBwb3J0X3NzaF90dW5uZWw9Y29uZmlnLlNVUFBP
UlRfU1NIX1RVTk5FTCwKKyAgICAgICAgICAgIGxvZ291dF91cmw9X2dldF9sb2dvdXRfdXJsKCkK
ICAgICAgICAgKSwKICAgICAgICAgMjAwLCB7J0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9q
YXZhc2NyaXB0J30pCiAKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc3RhdGljL2pz
L2FjdGl2aXR5LmpzIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zdGF0aWMvanMvYWN0aXZpdHkuanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi5mMmZjZGJiOTUKLS0tIC9kZXYv
bnVsbAorKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3N0YXRpYy9qcy9hY3Rpdml0eS5qcwpAQCAt
MCwwICsxLDExNCBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIHBnQWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMK
Ky8vCisvLyBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDIwLCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVu
dCBUZWFtCisvLyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FM
IExpY2VuY2UKKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLworCitpbXBvcnQgJCBmcm9tICdqcXVlcnknOworaW1wb3J0IF8g
ZnJvbSAndW5kZXJzY29yZSc7CisKK2ltcG9ydCBwZ0FkbWluIGZyb20gJ3NvdXJjZXMvcGdhZG1p
bic7CitpbXBvcnQgcGdXaW5kb3cgZnJvbSAnc291cmNlcy93aW5kb3cnOworaW1wb3J0IHtnZXRF
cG9jaH0gZnJvbSAnc291cmNlcy91dGlscyc7CisKK2NvbnN0IHBnQnJvd3NlciA9IHBnQWRtaW4u
QnJvd3NlciA9IHBnQWRtaW4uQnJvd3NlciB8fCB7fTsKK2NvbnN0IE1JTl9BQ1RJVklUWV9USU1F
X1VOSVQgPSAxMDAwOyAvKiBpbiBzZWNvbmRzICovCisvKgorICogVXNlciBVSSBhY3Rpdml0eSBy
ZWxhdGVkIGZ1bmN0aW9ucy4KKyAqLworXy5leHRlbmQocGdCcm93c2VyLCB7CisgIGluYWN0aXZp
dHlfdGltZW91dF9hdDogbnVsbCwKKyAgbG9nZ2luZ19hY3Rpdml0eTogZmFsc2UsCisgIGluYWN0
aXZpdHlfdGltZW91dF9kYWVtb25fcnVubmluZzogZmFsc2UsCisKKyAgaXNfcGdhZG1pbl90aW1l
ZG91dDogZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuICFwZ1dpbmRvdy5wZ0FkbWluOworICB9LAor
CisgIGlzX2luYWN0aXZpdHlfdGltZW91dDogZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHBnV2lu
ZG93LnBnQWRtaW4uQnJvd3Nlci5pbmFjdGl2aXR5X3RpbWVvdXRfYXQgPCB0aGlzLmdldF9lcG9j
aF9ub3coKTsKKyAgfSwKKworICBnZXRfZXBvY2hfbm93OiBmdW5jdGlvbigpeworICAgIHJldHVy
biBnZXRFcG9jaCgpOworICB9LAorCisgIGxvZ19hY3Rpdml0eTogZnVuY3Rpb24oKSB7CisgICAg
aWYoIXRoaXMubG9nZ2luZ19hY3Rpdml0eSkgeworICAgICAgdGhpcy5sb2dnaW5nX2FjdGl2aXR5
ID0gdHJ1ZTsKKyAgICAgIHRoaXMuaW5hY3Rpdml0eV90aW1lb3V0X2F0ID0gdGhpcy5nZXRfZXBv
Y2hfbm93KCkgKyBwZ0FkbWluLnVzZXJfaW5hY3Rpdml0eV90aW1lb3V0OworCisgICAgICAvKiBO
byBuZWVkIHRvIGxvZyBldmVudHMgdGlsbCBuZXh0IE1JTl9BQ1RJVklUWV9USU1FX1VOSVQgc2Vj
b25kIGFzIHRoZQorICAgICAgICogdmFsdWUgb2YgaW5hY3Rpdml0eV90aW1lb3V0X2F0IHdvbid0
IGNoYW5nZQorICAgICAgICovCisgICAgICBzZXRUaW1lb3V0KCgpPT57CisgICAgICAgIHRoaXMu
bG9nZ2luZ19hY3Rpdml0eSA9IGZhbHNlOworICAgICAgfSwgTUlOX0FDVElWSVRZX1RJTUVfVU5J
VCk7CisgICAgfQorICB9LAorCisgIC8qIENhbGwgdGhpcyB0byByZWdpc3RlciBlbGVtZW50IGZv
ciBhY2l0aXZpdHkgbW9uaXRvcmluZworICAgKiBHZW5lcmFsbHksIGRvY3VtZW50IGlzIHBhc3Nl
ZCB0byBjb3ZlciBhbGwuCisgICAqLworICByZWdpc3Rlcl90b19hY3Rpdml0eV9saXN0ZW5lcjog
ZnVuY3Rpb24odGFyZ2V0LCB0aW1lb3V0X2NhbGxiYWNrKSB7CisgICAgbGV0IGluYWN0aXZpdHlf
ZXZlbnRzID0gWydtb3VzZW1vdmUnLCAnbW91c2Vkb3duJywgJ2tleWRvd24nXTsKKyAgICBsZXQg
c2VsZiA9IHRoaXM7CisgICAgaW5hY3Rpdml0eV9ldmVudHMuZm9yRWFjaCgoZXZlbnQpPT57Cisg
ICAgICAvKiBCaW5kIGV2ZW50cyBpbiB0aGUgZXZlbnQgY2FwdHVyZSBwaGFzZSwgdGhlIGJ1YmJs
ZSBwaGFzZSBtaWdodCBzdG9wIHByb3BhZ2F0aW9uICovCisgICAgICBsZXQgZXZlbnRIYW5kbGVy
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmKHNlbGYuaXNfcGdhZG1pbl90aW1lZG91dCgpKSB7
CisgICAgICAgICAgLyogSWYgdGhlIG1haW4gcGFnZSBoYXMgbG9nZ2VkIG91dCB0aGVuIHJlbW92
ZSB0aGUgbGlzdGVuZXIgYW5kIGNhbGwgdGhlIHRpbWVvdXQgY2FsbGJhY2sgKi8KKyAgICAgICAg
ICBpbmFjdGl2aXR5X2V2ZW50cy5mb3JFYWNoKChldmVudCk9PnsKKyAgICAgICAgICAgIHRhcmdl
dC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBldmVudEhhbmRsZXIsIHRydWUpOworICAgICAg
ICAgIH0pOworICAgICAgICAgIHRpbWVvdXRfY2FsbGJhY2soKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICBwZ1dpbmRvdy5wZ0FkbWluLkJyb3dzZXIubG9nX2FjdGl2aXR5KCk7CisgICAg
ICAgIH0KKyAgICAgIH07CisKKyAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBl
dmVudEhhbmRsZXIsIHRydWUpOworICAgIH0pOworICB9LAorCisgIC8qCisgICAqIFRoaXMgZnVu
Y3Rpb24gY2FuIGJlIHVzZWQgYnkgdG9vbHMgbGlrZSBzcWxlZGl0b3Igd2hlcmUKKyAgICogcG9s
bCBjYWxsIGlzIGFzIGdvb2QgYXMgdXNlciBhY3Rpdml0eS4gRGVjb3JhdGUgc3VjaCBmdW5jdGlv
bnMKKyAgICogd2l0aCB0aGlzIHRvIGNvbnNpZGVyIHRoZW0gYXMgZXZlbnRzLiBOb3RlIHRoYXQs
IHRoaXMgaXMgY29udHJvbGxlZAorICAgKiBieSBvdmVycmlkZV91c2VyX2luYWN0aXZpdHlfdGlt
ZW91dC4KKyAgICovCisgIG92ZXJyaWRlX2FjdGl2aXR5X2V2ZW50X2RlY29yYXRvcjogZnVuY3Rp
b24oaW5wdXRfZnVuYykgeworICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgIC8qIExvZyBv
bmx5IGlmIG92ZXJyaWRlX3VzZXJfaW5hY3Rpdml0eV90aW1lb3V0IHRydWUgKi8KKyAgICAgIGlm
KHBnQWRtaW4ub3ZlcnJpZGVfdXNlcl9pbmFjdGl2aXR5X3RpbWVvdXQpIHsKKyAgICAgICAgcGdX
aW5kb3cucGdBZG1pbi5Ccm93c2VyLmxvZ19hY3Rpdml0eSgpOworICAgICAgfQorICAgICAgcmV0
dXJuIGlucHV0X2Z1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICB9OworICB9LAorCisg
IGxvZ291dF9pbmFjdGl2aXR5X3VzZXI6IGZ1bmN0aW9uKCkgeworICAgIHdpbmRvdy5sb2NhdGlv
bi5ocmVmID0gcGdCcm93c2VyLnV0aWxzLmxvZ291dF91cmw7CisgIH0sCisKKyAgLyogVGhlIGRh
ZW1vbiB3aWxsIHRyYWNrIGFuZCBsb2dvdXQgd2hlbiB0aW1lb3V0IG9jY3VycyAqLworICBzdGFy
dF9pbmFjdGl2aXR5X3RpbWVvdXRfZGFlbW9uOiBmdW5jdGlvbigpIHsKKyAgICBsZXQgc2VsZiA9
IHRoaXM7CisgICAgaWYocGdBZG1pbi51c2VyX2luYWN0aXZpdHlfdGltZW91dCA+IDAgJiYgIXNl
bGYuaW5hY3Rpdml0eV90aW1lb3V0X2RhZW1vbl9ydW5uaW5nKSB7CisgICAgICBsZXQgdGltZW91
dF9kYWVtb25faWQgPSBzZXRJbnRlcnZhbCgoKT0+eworICAgICAgICBzZWxmLmluYWN0aXZpdHlf
dGltZW91dF9kYWVtb25fcnVubmluZyA9IHRydWU7CisgICAgICAgIGlmKHNlbGYuaXNfaW5hY3Rp
dml0eV90aW1lb3V0KCkpIHsKKyAgICAgICAgICBjbGVhckludGVydmFsKHRpbWVvdXRfZGFlbW9u
X2lkKTsKKyAgICAgICAgICBzZWxmLmluYWN0aXZpdHlfdGltZW91dF9kYWVtb25fcnVubmluZyA9
IGZhbHNlOworICAgICAgICAgICQod2luZG93KS5vZmYoJ2JlZm9yZXVubG9hZCcpOworICAgICAg
ICAgIHNlbGYubG9nb3V0X2luYWN0aXZpdHlfdXNlcigpOworICAgICAgICB9CisgICAgICB9LCBN
SU5fQUNUSVZJVFlfVElNRV9VTklUKTsKKyAgICB9CisgIH0sCit9KTsKKworZXhwb3J0IHtwZ0Jy
b3dzZXJ9OwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zdGF0aWMvanMvYnJvd3Nl
ci5qcyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc3RhdGljL2pzL2Jyb3dzZXIuanMKaW5kZXggMmVm
ODgxYjlhLi4xOTQxZWY5YTQgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc3RhdGlj
L2pzL2Jyb3dzZXIuanMKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zdGF0aWMvanMvYnJvd3Nl
ci5qcwpAQCAtMTcsNyArMTcsNyBAQCBkZWZpbmUoJ3BnYWRtaW4uYnJvd3NlcicsIFsKICAgJ3Bn
YWRtaW4uYnJvd3Nlci5wcmVmZXJlbmNlcycsICdwZ2FkbWluLmJyb3dzZXIubWVzc2FnZXMnLAog
ICAncGdhZG1pbi5icm93c2VyLm1lbnUnLCAncGdhZG1pbi5icm93c2VyLnBhbmVsJywgJ3BnYWRt
aW4uYnJvd3Nlci5sYXlvdXQnLAogICAncGdhZG1pbi5icm93c2VyLmVycm9yJywgJ3BnYWRtaW4u
YnJvd3Nlci5mcmFtZScsCi0gICdwZ2FkbWluLmJyb3dzZXIubm9kZScsICdwZ2FkbWluLmJyb3dz
ZXIuY29sbGVjdGlvbicsCisgICdwZ2FkbWluLmJyb3dzZXIubm9kZScsICdwZ2FkbWluLmJyb3dz
ZXIuY29sbGVjdGlvbicsICdwZ2FkbWluLmJyb3dzZXIuYWN0aXZpdHknLAogICAnc291cmNlcy9j
b2RlbWlycm9yL2FkZG9uL2ZvbGQvcGdhZG1pbi1zcWxmb2xkY29kZScsCiAgICdwZ2FkbWluLmJy
b3dzZXIua2V5Ym9hcmQnLCAnc291cmNlcy90cmVlL3BnYWRtaW5fdHJlZV9zYXZlX3N0YXRlJywK
IF0sIGZ1bmN0aW9uKApAQCAtNTQ3LDYgKzU0NywxMSBAQCBkZWZpbmUoJ3BnYWRtaW4uYnJvd3Nl
cicsIFsKICAgICAgIG9iai5FdmVudHMub24oJ3BnYWRtaW4tYnJvd3Nlcjp0cmVlOmxvYWRmYWls
Jywgb2JqLm9uTG9hZEZhaWxOb2RlLCBvYmopOwogCiAgICAgICBvYmouYmluZF9iZWZvcmV1bmxv
YWQoKTsKKworICAgICAgLyogVXNlciBVSSBhY3Rpdml0eSAqLworICAgICAgb2JqLmxvZ19hY3Rp
dml0eSgpOyAvKiBUaGUgc3RhcnRpbmcgcG9pbnQgKi8KKyAgICAgIG9iai5yZWdpc3Rlcl90b19h
Y3Rpdml0eV9saXN0ZW5lcihkb2N1bWVudCk7CisgICAgICBvYmouc3RhcnRfaW5hY3Rpdml0eV90
aW1lb3V0X2RhZW1vbigpOwogICAgIH0sCiAKICAgICBpbml0X21hc3Rlcl9wYXNzd29yZDogZnVu
Y3Rpb24oKSB7CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3RlbXBsYXRlcy9icm93
c2VyL2luZGV4Lmh0bWwgYi93ZWIvcGdhZG1pbi9icm93c2VyL3RlbXBsYXRlcy9icm93c2VyL2lu
ZGV4Lmh0bWwKaW5kZXggYjJlMGE4MTUxLi42ODJjMjNkNjUgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2Fk
bWluL2Jyb3dzZXIvdGVtcGxhdGVzL2Jyb3dzZXIvaW5kZXguaHRtbAorKysgYi93ZWIvcGdhZG1p
bi9icm93c2VyL3RlbXBsYXRlcy9icm93c2VyL2luZGV4Lmh0bWwKQEAgLTE1NCw3ICsxNTQsNyBA
QCB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oZSl7CiAgICAgICAgICAgICAgICAgICAgIDxsaT48
YSBjbGFzcz0iZHJvcGRvd24taXRlbSIgaHJlZj0iIyIgb25jbGljaz0icGdBZG1pbi5Ccm93c2Vy
LlVzZXJNYW5hZ2VtZW50LnNob3dfdXNlcnMoKSI+e3sgXygnVXNlcnMnKSB9fTwvYT48L2xpPgog
ICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duLWRpdmlkZXIiPjwvbGk+CiAg
ICAgICAgICAgICAgICAgICAgIHslIGVuZGlmICV9Ci0gICAgICAgICAgICAgICAgICAgIDxsaT48
YSBjbGFzcz0iZHJvcGRvd24taXRlbSIgaHJlZj0ie3sgdXJsX2Zvcignc2VjdXJpdHkubG9nb3V0
JykgfX0/bmV4dD17e3VybF9mb3IoJ2Jyb3dzZXIuaW5kZXgnKX19Ij57eyBfKCdMb2dvdXQnKSB9
fTwvYT48L2xpPgorICAgICAgICAgICAgICAgICAgICA8bGk+PGEgY2xhc3M9ImRyb3Bkb3duLWl0
ZW0iIGhyZWY9Int7IGxvZ291dF91cmwgfX0iPnt7IF8oJ0xvZ291dCcpIH19PC9hPjwvbGk+CiAg
ICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgIDwvdWw+CmRp
ZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3RlbXBsYXRlcy9icm93c2VyL2pzL3V0aWxz
LmpzIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci90ZW1wbGF0ZXMvYnJvd3Nlci9qcy91dGlscy5qcwpp
bmRleCA3OWU4MTIwMzMuLjMzZGQ2ODA5ZSAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vYnJvd3Nl
ci90ZW1wbGF0ZXMvYnJvd3Nlci9qcy91dGlscy5qcworKysgYi93ZWIvcGdhZG1pbi9icm93c2Vy
L3RlbXBsYXRlcy9icm93c2VyL2pzL3V0aWxzLmpzCkBAIC00NSw2ICs0NSwxMCBAQCBkZWZpbmUo
J3BnYWRtaW4uYnJvd3Nlci51dGlscycsCiAgIHBnQWRtaW5bJ2NzcmZfdG9rZW5faGVhZGVyJ10g
PSAne3sgY3VycmVudF9hcHAuY29uZmlnLmdldCgnV1RGX0NTUkZfSEVBREVSUycpWzBdIH19JzsK
ICAgcGdBZG1pblsnY3NyZl90b2tlbiddID0gJ3t7IGNzcmZfdG9rZW4oKSB9fSc7CiAKKyAgLyog
R2V0IHRoZSBpbmFjdGl2aXR5IHJlbGF0ZWQgY29uZmlnICovCisgIHBnQWRtaW5bJ3VzZXJfaW5h
Y3Rpdml0eV90aW1lb3V0J10gPSB7eyBjdXJyZW50X2FwcC5jb25maWcuZ2V0KCdVU0VSX0lOQUNU
SVZJVFlfVElNRU9VVCcpIH19OworICBwZ0FkbWluWydvdmVycmlkZV91c2VyX2luYWN0aXZpdHlf
dGltZW91dCddID0gJ3t7IGN1cnJlbnRfYXBwLmNvbmZpZy5nZXQoJ09WRVJSSURFX1VTRVJfSU5B
Q1RJVklUWV9USU1FT1VUJykgfX0nID09ICdUcnVlJzsKKwogICAvLyBEZWZpbmUgbGlzdCBvZiBu
b2RlcyBvbiB3aGljaCBRdWVyeSB0b29sIG9wdGlvbiBkb2Vzbid0IGFwcGVhcnMKICAgdmFyIHVu
c3VwcG9ydGVkX25vZGVzID0gcGdBZG1pbi51bnN1cHBvcnRlZF9ub2RlcyA9IFsKICAgICAgJ3Nl
cnZlcl9ncm91cCcsICdzZXJ2ZXInLCAnY29sbC10YWJsZXNwYWNlJywgJ3RhYmxlc3BhY2UnLApA
QCAtNjUsNiArNjksNyBAQCBkZWZpbmUoJ3BnYWRtaW4uYnJvd3Nlci51dGlscycsCiAgICAgYXBw
X25hbWU6ICd7eyBhcHBfbmFtZSB9fScsCiAgICAgcGdfbGlicHFfdmVyc2lvbjoge3twZ19saWJw
cV92ZXJzaW9ufGV9fSwKICAgICBzdXBwb3J0X3NzaF90dW5uZWw6ICd7eyBzdXBwb3J0X3NzaF90
dW5uZWwgfX0nID09ICdUcnVlJywKKyAgICBsb2dvdXRfdXJsOiAne3tsb2dvdXRfdXJsfX0nLAog
CiAgICAgY291bnRlcjoge3RvdGFsOiAwLCBsb2FkZWQ6IDB9LAogICAgIHJlZ2lzdGVyU2NyaXB0
czogZnVuY3Rpb24gKGN0eCkgewpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdn
ZXIvc3RhdGljL2pzL2RpcmVjdC5qcyBiL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3N0YXRp
Yy9qcy9kaXJlY3QuanMKaW5kZXggOGUwMDA5MWE1Li45ZjE2OTM1MDEgMTAwNjQ0Ci0tLSBhL3dl
Yi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3N0YXRpYy9qcy9kaXJlY3QuanMKKysrIGIvd2ViL3Bn
YWRtaW4vdG9vbHMvZGVidWdnZXIvc3RhdGljL2pzL2RpcmVjdC5qcwpAQCAtMTg5MSw2ICsxODkx
LDE0IEBAIGRlZmluZShbCiAgICAgICBwZ1dpbmRvdy5kZWZhdWx0LnBnQWRtaW4uQnJvd3Nlci5v
blByZWZlcmVuY2VzQ2hhbmdlKCdkZWJ1Z2dlcicsIGZ1bmN0aW9uKCkgewogICAgICAgICBzZWxm
LnJlZmxlY3RQcmVmZXJlbmNlcygpOwogICAgICAgfSk7CisKKyAgICAgIC8qIFJlZ2lzdGVyIHRv
IGxvZyB0aGUgYWN0aXZpdHkgKi8KKyAgICAgIHBnQnJvd3Nlci5yZWdpc3Rlcl90b19hY3Rpdml0
eV9saXN0ZW5lcihkb2N1bWVudCwgKCk9PnsKKyAgICAgICAgQWxlcnRpZnkuYWxlcnQoZ2V0dGV4
dCgnVGltZW91dCcpLCBnZXR0ZXh0KCdZb3VyIHNlc3Npb24gaGFzIHRpbWVkb3V0IGR1ZSB0byBp
bmFjdGl2aXR5ICEhJykpOworICAgICAgfSk7CisKKyAgICAgIGNvbnRyb2xsZXIucG9sbF9yZXN1
bHQgPSBwZ0Jyb3dzZXIub3ZlcnJpZGVfYWN0aXZpdHlfZXZlbnRfZGVjb3JhdG9yKGNvbnRyb2xs
ZXIucG9sbF9yZXN1bHQpLmJpbmQoY29udHJvbGxlcik7CisgICAgICBjb250cm9sbGVyLnBvbGxf
ZW5kX2V4ZWN1dGlvbl9yZXN1bHQgPSBwZ0Jyb3dzZXIub3ZlcnJpZGVfYWN0aXZpdHlfZXZlbnRf
ZGVjb3JhdG9yKGNvbnRyb2xsZXIucG9sbF9lbmRfZXhlY3V0aW9uX3Jlc3VsdCkuYmluZChjb250
cm9sbGVyKTsKICAgICB9LAogICAgIHJlZmxlY3RQcmVmZXJlbmNlczogZnVuY3Rpb24oKSB7CiAg
ICAgICBsZXQgc2VsZiA9IHRoaXMsCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9zcWxl
ZGl0b3Ivc3RhdGljL2pzL3NxbGVkaXRvci5qcyBiL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRv
ci9zdGF0aWMvanMvc3FsZWRpdG9yLmpzCmluZGV4IDQ4OGY2MjgyYi4uNDU4NTMzY2RmIDEwMDY0
NAotLS0gYS93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3Ivc3RhdGljL2pzL3NxbGVkaXRvci5q
cworKysgYi93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3Ivc3RhdGljL2pzL3NxbGVkaXRvci5q
cwpAQCAtNjU5LDYgKzY1OSwxMSBAQCBkZWZpbmUoJ3Rvb2xzLnF1ZXJ5dG9vbCcsIFsKICAgICAg
ICAgICB9CiAgICAgICAgIH0sIDEwMDApOwogICAgICAgfQorCisgICAgICAvKiBSZWdpc3RlciB0
byBsb2cgdGhlIGFjdGl2aXR5ICovCisgICAgICBwZ0Jyb3dzZXIucmVnaXN0ZXJfdG9fYWN0aXZp
dHlfbGlzdGVuZXIoZG9jdW1lbnQsICgpPT57CisgICAgICAgIGFsZXJ0aWZ5LmFsZXJ0KGdldHRl
eHQoJ1RpbWVvdXQnKSwgZ2V0dGV4dCgnWW91ciBzZXNzaW9uIGhhcyB0aW1lZG91dCBkdWUgdG8g
aW5hY3Rpdml0eSAhIScpKTsKKyAgICAgIH0pOwogICAgIH0sCiAKICAgICAvKiBSZWdhcmRpbmcg
U2xpY2tHcmlkIHVzYWdlIGluIHJlbmRlcl9ncmlkIGZ1bmN0aW9uLgpAQCAtMjUwOCw2ICsyNTEz
LDcgQEAgZGVmaW5lKCd0b29scy5xdWVyeXRvb2wnLCBbCiAgICAgICAgIH0KIAogICAgICAgICBj
b25zdCBleGVjdXRlUXVlcnkgPSBuZXcgRXhlY3V0ZVF1ZXJ5LkV4ZWN1dGVRdWVyeSh0aGlzLCBw
Z0FkbWluLkJyb3dzZXIuVXNlck1hbmFnZW1lbnQpOworICAgICAgICBleGVjdXRlUXVlcnkucG9s
bCA9IHBnQnJvd3Nlci5vdmVycmlkZV9hY3Rpdml0eV9ldmVudF9kZWNvcmF0b3IoZXhlY3V0ZVF1
ZXJ5LnBvbGwpLmJpbmQoZXhlY3V0ZVF1ZXJ5KTsKICAgICAgICAgZXhlY3V0ZVF1ZXJ5LmV4ZWN1
dGUoc3FsLCBleHBsYWluX3ByZWZpeCwgc2hvdWxkUmVjb25uZWN0KTsKICAgICAgIH0sCiAKZGlm
ZiAtLWdpdCBhL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvYnJvd3Nlci9hY3Rpdml0eV9zcGVj
LmpzIGIvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9icm93c2VyL2FjdGl2aXR5X3NwZWMuanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi5mOTcxODk5YjMKLS0tIC9kZXYv
bnVsbAorKysgYi93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L2Jyb3dzZXIvYWN0aXZpdHlfc3Bl
Yy5qcwpAQCAtMCwwICsxLDE3NCBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIHBnQWRtaW4gNCAtIFBvc3RncmVT
UUwgVG9vbHMKKy8vCisvLyBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDIwLCBUaGUgcGdBZG1pbiBE
ZXZlbG9wbWVudCBUZWFtCisvLyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQ
b3N0Z3JlU1FMIExpY2VuY2UKKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitpbXBvcnQge3BnQnJvd3Nlcn0gZnJvbSAn
cGdhZG1pbi5icm93c2VyLmFjdGl2aXR5JzsKK2ltcG9ydCB7IGdldEVwb2NoIH0gZnJvbSAnc291
cmNlcy91dGlscyc7CitpbXBvcnQgcGdBZG1pbiBmcm9tICdzb3VyY2VzL3BnYWRtaW4nOworCitk
ZXNjcmliZSgnRm9yIEFjdGl2aXR5JywgZnVuY3Rpb24oKXsKKyAgYmVmb3JlRWFjaChmdW5jdGlv
bigpeworICAgIHBnQWRtaW4udXNlcl9pbmFjdGl2aXR5X3RpbWVvdXQgPSA2MDsKKyAgICBwZ0Fk
bWluLm92ZXJyaWRlX3VzZXJfaW5hY3Rpdml0eV90aW1lb3V0ID0gdHJ1ZTsKKworICAgIC8qIHBn
QnJvd3NlciBoZXJlIGlzIHNhbWUgYXMgbWFpbiB3aW5kb3cgQnJvd3NlciAqLworICAgIHdpbmRv
dy5wZ0FkbWluID0geworICAgICAgQnJvd3NlcjogcGdCcm93c2VyLAorICAgIH07CisgIH0pOwor
CisgIGRlc2NyaWJlKCdpc19wZ2FkbWluX3RpbWVkb3V0JywgZnVuY3Rpb24oKXsKKyAgICBpdCgn
d2hlbiBub3QgdGltZWRvdXQnLCBmdW5jdGlvbigpeworICAgICAgZXhwZWN0KHBnQnJvd3Nlci5p
c19wZ2FkbWluX3RpbWVkb3V0KCkpLnRvRXF1YWwoZmFsc2UpOworICAgIH0pOworCisgICAgaXQo
J3doZW4gdGltZWRvdXQnLCBmdW5jdGlvbigpeworICAgICAgd2luZG93LnBnQWRtaW4gPSB1bmRl
ZmluZWQ7CisgICAgICBleHBlY3QocGdCcm93c2VyLmlzX3BnYWRtaW5fdGltZWRvdXQoKSkudG9F
cXVhbCh0cnVlKTsKKyAgICB9KTsKKyAgfSk7CisKKyAgZGVzY3JpYmUoJ2lzX2luYWN0aXZpdHlf
dGltZW91dCcsIGZ1bmN0aW9uKCl7CisgICAgaXQoJ3doZW4gdGhlcmUgaXMgYWN0aXZpdHknLCBm
dW5jdGlvbigpeworICAgICAgd2luZG93LnBnQWRtaW4uQnJvd3Nlci5pbmFjdGl2aXR5X3RpbWVv
dXRfYXQgPSBnZXRFcG9jaCgpICsgMzA7CisgICAgICBleHBlY3QocGdCcm93c2VyLmlzX2luYWN0
aXZpdHlfdGltZW91dCgpKS50b0VxdWFsKGZhbHNlKTsKKyAgICB9KTsKKworICAgIGl0KCd3aGVu
IHRoZXJlIGlzIG5vIGFjdGl2aXR5JywgZnVuY3Rpb24oKXsKKyAgICAgIHdpbmRvdy5wZ0FkbWlu
LkJyb3dzZXIuaW5hY3Rpdml0eV90aW1lb3V0X2F0ID0gZ2V0RXBvY2goKSAtIDMwOworICAgICAg
ZXhwZWN0KHBnQnJvd3Nlci5pc19pbmFjdGl2aXR5X3RpbWVvdXQoKSkudG9FcXVhbCh0cnVlKTsK
KyAgICB9KTsKKyAgfSk7CisKKyAgZGVzY3JpYmUoJ2xvZ19hY3Rpdml0eScsIGZ1bmN0aW9uKCl7
CisgICAgYmVmb3JlRWFjaChmdW5jdGlvbigpeworICAgICAgc3B5T24ocGdCcm93c2VyLCAnZ2V0
X2Vwb2NoX25vdycpLmFuZC5jYWxsVGhyb3VnaCgpOworICAgICAgc3B5T24ocGdCcm93c2VyLCAn
bG9nX2FjdGl2aXR5JykuYW5kLmNhbGxUaHJvdWdoKCk7CisgICAgICBwZ0Jyb3dzZXIubG9nZ2lu
Z19hY3Rpdml0eSA9IGZhbHNlOworICAgIH0pOworCisgICAgaXQoJ2luaXRpYWwgbG9nIGFjdGl2
aXR5JywgZnVuY3Rpb24oKXsKKyAgICAgIHBnQnJvd3Nlci5sb2dfYWN0aXZpdHkoKTsKKyAgICAg
IGV4cGVjdCh3aW5kb3cucGdBZG1pbi5Ccm93c2VyLmluYWN0aXZpdHlfdGltZW91dF9hdCkubm90
LnRvQmUobnVsbCk7CisgICAgICBleHBlY3QocGdCcm93c2VyLmdldF9lcG9jaF9ub3cpLnRvSGF2
ZUJlZW5DYWxsZWQoKTsKKyAgICB9KTsKKworICAgIGl0KCdtdWx0aXBsZSBsb2cgYWN0aXZpdHkg
d2l0aGluIGEgc2Vjb25kJywgZnVuY3Rpb24oKXsKKyAgICAgIC8qIEZpcnN0IGNhbGwgKi8KKyAg
ICAgIHBnQnJvd3Nlci5sb2dfYWN0aXZpdHkoKTsKKyAgICAgIGV4cGVjdChwZ0Jyb3dzZXIuZ2V0
X2Vwb2NoX25vdykudG9IYXZlQmVlbkNhbGxlZCgpOworICAgICAgZXhwZWN0KHBnQnJvd3Nlci5s
b2dnaW5nX2FjdGl2aXR5KS50b0VxdWFsKHRydWUpOworCisgICAgICAvKiBTZWNvbmQgY2FsbCAq
LworICAgICAgcGdCcm93c2VyLmdldF9lcG9jaF9ub3cuY2FsbHMucmVzZXQoKTsKKyAgICAgIHBn
QnJvd3Nlci5sb2dfYWN0aXZpdHkoKTsKKyAgICAgIGV4cGVjdChwZ0Jyb3dzZXIuZ2V0X2Vwb2No
X25vdykubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTsKKyAgICB9KTsKKworICAgIGl0KCdzZXQgbG9n
Z2luIHRvIGZhbHNlIGFmdGVyIHRpbWVvdXQnLCBmdW5jdGlvbihkb25lKXsKKyAgICAgIHBnQnJv
d3Nlci5sb2dfYWN0aXZpdHkoKTsKKyAgICAgIGV4cGVjdChwZ0Jyb3dzZXIubG9nZ2luZ19hY3Rp
dml0eSkudG9FcXVhbCh0cnVlKTsKKyAgICAgIHNldFRpbWVvdXQoKCk9PnsKKyAgICAgICAgZXhw
ZWN0KHBnQnJvd3Nlci5sb2dnaW5nX2FjdGl2aXR5KS50b0VxdWFsKGZhbHNlKTsKKyAgICAgICAg
ZG9uZSgpOworICAgICAgfSwgMTAwMSk7ICAgICAgCisgICAgfSk7CisgIH0pOworCisgIGRlc2Ny
aWJlKCdyZWdpc3Rlcl90b19hY3Rpdml0eV9saXN0ZW5lcicsIGZ1bmN0aW9uKCl7CisgICAgbGV0
IHRhcmdldCA9IGRvY3VtZW50OworICAgIGxldCB0aW1lb3V0X2NhbGxiYWNrID0gamFzbWluZS5j
cmVhdGVTcHkoKTsKKyAgICBsZXQgZXZlbnQgPSBuZXcgTW91c2VFdmVudCgnbW91c2Vkb3duJywg
eworICAgICAgYnViYmxlczogdHJ1ZSwKKyAgICAgIGNhbmNlbGFibGU6IHRydWUsCisgICAgICB2
aWV3OiB3aW5kb3csCisgICAgfSk7CisgICAgCisgICAgYmVmb3JlRWFjaChmdW5jdGlvbigpewor
ICAgICAgc3B5T24ocGdCcm93c2VyLCAnbG9nX2FjdGl2aXR5Jyk7CisgICAgICBzcHlPbih0YXJn
ZXQsICdhZGRFdmVudExpc3RlbmVyJykuYW5kLmNhbGxUaHJvdWdoKCk7CisgICAgICBzcHlPbih0
YXJnZXQsICdyZW1vdmVFdmVudExpc3RlbmVyJykuYW5kLmNhbGxUaHJvdWdoKCk7CisgICAgICBw
Z0Jyb3dzZXIucmVnaXN0ZXJfdG9fYWN0aXZpdHlfbGlzdGVuZXIodGFyZ2V0LCB0aW1lb3V0X2Nh
bGxiYWNrKTsKKyAgICB9KTsKKworICAgIGl0KCdmdW5jdGlvbiBjYWxsZWQnLCBmdW5jdGlvbigp
eworICAgICAgZXhwZWN0KHRhcmdldC5hZGRFdmVudExpc3RlbmVyKS50b0hhdmVCZWVuQ2FsbGVk
KCk7CisgICAgfSk7CisKKyAgICBpdCgnZXZlbnQgdHJpZ2dlcmVkJywgZnVuY3Rpb24oZG9uZSl7
CisgICAgICB0YXJnZXQuZGlzcGF0Y2hFdmVudChldmVudCk7CisKKyAgICAgIHNldFRpbWVvdXQo
KCk9PnsKKyAgICAgICAgZXhwZWN0KHBnQnJvd3Nlci5sb2dfYWN0aXZpdHkpLnRvSGF2ZUJlZW5D
YWxsZWQoKTsKKyAgICAgICAgZG9uZSgpOworICAgICAgfSwgMjUwKTsKKyAgICB9KTsKKworICAg
IGl0KCdpcyB0aW1lZCBvdXQnLCBmdW5jdGlvbihkb25lKXsKKyAgICAgIHNweU9uKHBnQnJvd3Nl
ciwgJ2lzX3BnYWRtaW5fdGltZWRvdXQnKS5hbmQucmV0dXJuVmFsdWUodHJ1ZSk7CisgICAgICB0
YXJnZXQuZGlzcGF0Y2hFdmVudChldmVudCk7CisKKyAgICAgIHNldFRpbWVvdXQoKCk9PnsKKyAg
ICAgICAgZXhwZWN0KHRpbWVvdXRfY2FsbGJhY2spLnRvSGF2ZUJlZW5DYWxsZWQoKTsKKyAgICAg
ICAgZXhwZWN0KHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKS50b0hhdmVCZWVuQ2FsbGVkKCk7
CisgICAgICAgIGRvbmUoKTsKKyAgICAgIH0sIDI1MCk7CisgICAgfSk7CisgIH0pOworCisgIGRl
c2NyaWJlKCdvdmVycmlkZV9hY3Rpdml0eV9ldmVudF9kZWNvcmF0b3InLCBmdW5jdGlvbigpewor
ICAgIGxldCBpbnB1dF9mdW5jID0gamFzbWluZS5jcmVhdGVTcHkoJ2lucHV0X2Z1bmMnKTsKKyAg
ICBsZXQgZGVjb3JhdGVfZnVuYyA9IHBnQnJvd3Nlci5vdmVycmlkZV9hY3Rpdml0eV9ldmVudF9k
ZWNvcmF0b3IoaW5wdXRfZnVuYyk7CisgICAgYmVmb3JlRWFjaChmdW5jdGlvbigpeworICAgICAg
c3B5T24ocGdCcm93c2VyLCAnbG9nX2FjdGl2aXR5JykuYW5kLmNhbGxUaHJvdWdoKCk7CisgICAg
fSk7CisKKyAgICBpdCgnY2FsbCB0aGUgaW5wdXRfZnVuYycsIGZ1bmN0aW9uKCl7CisgICAgICBk
ZWNvcmF0ZV9mdW5jKCk7CisgICAgICBleHBlY3QoaW5wdXRfZnVuYykudG9IYXZlQmVlbkNhbGxl
ZCgpOworICAgIH0pOworCisgICAgaXQoJ2xvZyBhY3Rpdml0eSB3aGVuIG92ZXJyaWRlX3VzZXJf
aW5hY3Rpdml0eV90aW1lb3V0IHRydWUnLCBmdW5jdGlvbigpeworICAgICAgZGVjb3JhdGVfZnVu
YygpOworICAgICAgZXhwZWN0KHBnQnJvd3Nlci5sb2dfYWN0aXZpdHkpLnRvSGF2ZUJlZW5DYWxs
ZWQoKTsKKyAgICB9KTsKKworICAgIGl0KCdkbyBub3QgbG9nIGFjdGl2aXR5IHdoZW4gb3ZlcnJp
ZGVfdXNlcl9pbmFjdGl2aXR5X3RpbWVvdXQgdHJ1ZScsIGZ1bmN0aW9uKCl7CisgICAgICBwZ0Fk
bWluLm92ZXJyaWRlX3VzZXJfaW5hY3Rpdml0eV90aW1lb3V0ID0gZmFsc2U7CisgICAgICBkZWNv
cmF0ZV9mdW5jKCk7CisgICAgICBleHBlY3QocGdCcm93c2VyLmxvZ19hY3Rpdml0eSkubm90LnRv
SGF2ZUJlZW5DYWxsZWQoKTsKKyAgICB9KTsKKyAgfSk7CisKKyAgZGVzY3JpYmUoJ3N0YXJ0X2lu
YWN0aXZpdHlfdGltZW91dF9kYWVtb24nLCBmdW5jdGlvbigpeworICAgIGJlZm9yZUVhY2goZnVu
Y3Rpb24oKXsKKyAgICAgIHNweU9uKHBnQnJvd3NlciwgJ2xvZ291dF9pbmFjdGl2aXR5X3VzZXIn
KTsKKyAgICB9KTsKKworICAgIGl0KCdzdGFydCB0aGUgZGFlbW9uJywgZnVuY3Rpb24oZG9uZSl7
CisgICAgICBzcHlPbihwZ0Jyb3dzZXIsICdpc19pbmFjdGl2aXR5X3RpbWVvdXQnKS5hbmQucmV0
dXJuVmFsdWUoZmFsc2UpOworICAgICAgcGdCcm93c2VyLmluYWN0aXZpdHlfdGltZW91dF9kYWVt
b25fcnVubmluZyA9IGZhbHNlOworICAgICAgcGdCcm93c2VyLnN0YXJ0X2luYWN0aXZpdHlfdGlt
ZW91dF9kYWVtb24oKTsKKyAgICAgIHNldFRpbWVvdXQoKCk9PnsKKyAgICAgICAgZXhwZWN0KHBn
QnJvd3Nlci5pbmFjdGl2aXR5X3RpbWVvdXRfZGFlbW9uX3J1bm5pbmcpLnRvRXF1YWwodHJ1ZSk7
CisgICAgICAgIGRvbmUoKTsKKyAgICAgIH0sIDEwMDEpOworICAgIH0pOworCisgICAgaXQoJ3N0
b3AgdGhlIGRhZW1vbicsIGZ1bmN0aW9uKGRvbmUpeworICAgICAgc3B5T24ocGdCcm93c2VyLCAn
aXNfaW5hY3Rpdml0eV90aW1lb3V0JykuYW5kLnJldHVyblZhbHVlKHRydWUpOworICAgICAgcGdC
cm93c2VyLmluYWN0aXZpdHlfdGltZW91dF9kYWVtb25fcnVubmluZyA9IGZhbHNlOworICAgICAg
cGdCcm93c2VyLnN0YXJ0X2luYWN0aXZpdHlfdGltZW91dF9kYWVtb24oKTsKKyAgICAgIHNldFRp
bWVvdXQoKCk9PnsKKyAgICAgICAgZXhwZWN0KHBnQnJvd3Nlci5pbmFjdGl2aXR5X3RpbWVvdXRf
ZGFlbW9uX3J1bm5pbmcpLnRvRXF1YWwoZmFsc2UpOworICAgICAgICBleHBlY3QocGdCcm93c2Vy
LmxvZ291dF9pbmFjdGl2aXR5X3VzZXIpLnRvSGF2ZUJlZW5DYWxsZWQoKTsKKyAgICAgICAgZG9u
ZSgpOworICAgICAgfSwgMTAwMSk7CisgICAgfSk7CisgIH0pOworfSk7ClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd2ViL3dlYnBhY2suc2hpbS5qcyBiL3dlYi93ZWJw
YWNrLnNoaW0uanMKaW5kZXggNzdlODZhZmRmLi5jZjQ1N2ZmNjAgMTAwNjQ0Ci0tLSBhL3dlYi93
ZWJwYWNrLnNoaW0uanMKKysrIGIvd2ViL3dlYnBhY2suc2hpbS5qcwpAQCAtMTg5LDYgKzE4OSw3
IEBAIHZhciB3ZWJwYWNrU2hpbUNvbmZpZyA9IHsKICAgICAncGdhZG1pbi5icm93c2VyLmxheW91
dCc6IHBhdGguam9pbihfX2Rpcm5hbWUsICcuL3BnYWRtaW4vYnJvd3Nlci9zdGF0aWMvanMvbGF5
b3V0JyksCiAgICAgJ3BnYWRtaW4uYnJvd3Nlci5wcmVmZXJlbmNlcyc6IHBhdGguam9pbihfX2Rp
cm5hbWUsICcuL3BnYWRtaW4vYnJvd3Nlci9zdGF0aWMvanMvcHJlZmVyZW5jZXMnKSwKICAgICAn
cGdhZG1pbi5icm93c2VyLm1lbnUnOiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi9wZ2FkbWluL2Jy
b3dzZXIvc3RhdGljL2pzL21lbnUnKSwKKyAgICAncGdhZG1pbi5icm93c2VyLmFjdGl2aXR5Jzog
cGF0aC5qb2luKF9fZGlybmFtZSwgJy4vcGdhZG1pbi9icm93c2VyL3N0YXRpYy9qcy9hY3Rpdml0
eScpLAogICAgICdwZ2FkbWluLmJyb3dzZXIubWVzc2FnZXMnOiAnL2Jyb3dzZXIvanMvbWVzc2Fn
ZXMnLAogICAgICdwZ2FkbWluLmJyb3dzZXIubm9kZSc6IHBhdGguam9pbihfX2Rpcm5hbWUsICcu
L3BnYWRtaW4vYnJvd3Nlci9zdGF0aWMvanMvbm9kZScpLAogICAgICdwZ2FkbWluLmJyb3dzZXIu
bm9kZS51aSc6IHBhdGguam9pbihfX2Rpcm5hbWUsICcuL3BnYWRtaW4vYnJvd3Nlci9zdGF0aWMv
anMvbm9kZS51aScpLApkaWZmIC0tZ2l0IGEvd2ViL3dlYnBhY2sudGVzdC5jb25maWcuanMgYi93
ZWIvd2VicGFjay50ZXN0LmNvbmZpZy5qcwppbmRleCBjOGE1ZGMzMTEuLjcwZGIyOTEyNSAxMDA2
NDQKLS0tIGEvd2ViL3dlYnBhY2sudGVzdC5jb25maWcuanMKKysrIGIvd2ViL3dlYnBhY2sudGVz
dC5jb25maWcuanMKQEAgLTE2LDYgKzE2LDcgQEAgY29uc3Qgbm9kZU1vZHVsZXNEaXIgPSBwYXRo
LnJlc29sdmUoX19kaXJuYW1lLCAnbm9kZV9tb2R1bGVzJyk7CiBjb25zdCByZWdyZXNzaW9uRGly
ID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJ3JlZ3Jlc3Npb24nKTsKIAogbW9kdWxlLmV4cG9y
dHMgPSB7CisgIG1vZGU6ICdkZXZlbG9wbWVudCcsCiAgIGRldnRvb2w6ICdpbmxpbmUtc291cmNl
LW1hcCcsCiAgIHBsdWdpbnM6IFsKICAgICBuZXcgd2VicGFjay5Qcm92aWRlUGx1Z2luKHsKQEAg
LTEwMiw2ICsxMDMsNyBAQCBtb2R1bGUuZXhwb3J0cyA9IHsKICAgICAgICdwZ2FkbWluLnNjaGVt
YS5kaXInOiBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAncGdhZG1pbi9icm93c2VyL3NlcnZlcl9n
cm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy9zdGF0aWMvanMnKSwKICAgICAgICdwZ2Fk
bWluLmJyb3dzZXIubGF5b3V0JzogcGF0aC5qb2luKF9fZGlybmFtZSwgJy4vcGdhZG1pbi9icm93
c2VyL3N0YXRpYy9qcy9sYXlvdXQnKSwKICAgICAgICdwZ2FkbWluLmJyb3dzZXIucHJlZmVyZW5j
ZXMnOiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi9wZ2FkbWluL2Jyb3dzZXIvc3RhdGljL2pzL3By
ZWZlcmVuY2VzJyksCisgICAgICAncGdhZG1pbi5icm93c2VyLmFjdGl2aXR5JzogcGF0aC5qb2lu
KF9fZGlybmFtZSwgJy4vcGdhZG1pbi9icm93c2VyL3N0YXRpYy9qcy9hY3Rpdml0eScpLAogICAg
ICAgJ2J1bmRsZWRfY29kZW1pcnJvcic6IHBhdGguam9pbihfX2Rpcm5hbWUsICcuL3BnYWRtaW4v
c3RhdGljL2J1bmRsZS9jb2RlbWlycm9yJyksCiAgICAgfSwKICAgfSwK
--0000000000004781d8059c05881e--