<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>112555</bug_id>
          
          <creation_ts>2013-03-18 04:07:42 -0700</creation_ts>
          <short_desc>Web Inspector: [CodeMirror] fix cursor movements</short_desc>
          <delta_ts>2013-03-19 01:06:04 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andrey Lushnikov">lushnikov</reporter>
          <assigned_to name="Andrey Lushnikov">lushnikov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>vsevik</cc>
    
    <cc>web-inspector-bugs</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>856972</commentid>
    <comment_count>0</comment_count>
    <who name="Andrey Lushnikov">lushnikov</who>
    <bug_when>2013-03-18 04:07:42 -0700</bug_when>
    <thetext>Fix cursor movements to jump correctly over words with Ctrl/Right, Ctrl/Left actions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>856975</commentid>
    <comment_count>1</comment_count>
      <attachid>193523</attachid>
    <who name="Andrey Lushnikov">lushnikov</who>
    <bug_when>2013-03-18 04:11:42 -0700</bug_when>
    <thetext>Created attachment 193523
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858020</commentid>
    <comment_count>2</comment_count>
      <attachid>193523</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-19 01:06:00 -0700</bug_when>
    <thetext>Comment on attachment 193523
Patch

Clearing flags on attachment: 193523

Committed r146186: &lt;http://trac.webkit.org/changeset/146186&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858021</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-19 01:06:04 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193523</attachid>
            <date>2013-03-18 04:11:42 -0700</date>
            <delta_ts>2013-03-19 01:06:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-112555-20130318150734.patch</filename>
            <type>text/plain</type>
            <size>47721</size>
            <attacher name="Andrey Lushnikov">lushnikov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ2MDQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWI5OGYwZGM4NzE5OWNm
NjJlMjljNmIzZjRkZmFjNDRkZGU1OTgxZi4uZGNkNjAyYWEzZDUyNjNiMDBlMzFkMDRjOTRhNDhl
NzJmOTA0YzkwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEzLTAzLTE4ICBBbmRy
ZXkgTHVzaG5pa292ICA8bHVzaG5pa292QGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiBbQ29kZU1pcnJvcl0gZml4IGN1cnNvciBtb3ZlbWVudHMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjU1NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAg
ICAtIFVwZGF0ZSBDb2RlTWlycm9yIHRvIFRvVCB0byBpbmNsdWRlIGl0cyBpbXByb3ZlZCBjdXJz
b3IgbW92ZW1lbnQKKyAgICAgICAgLSBBZGQgYSBzbWFsbCBrZXltYXAgdG8gZm9yY2UgY3Vyc29y
IHN0b3Agb24gYm90aCBsaW5lIGVuZGluZ3MgYW5kIGxpbmUKKyAgICAgICAgc3RhcnRzLgorCisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Db2RlTWlycm9yVGV4dEVkaXRvci5qczoKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVGV4dEVkaXRvcik6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuQ29kZU1pcnJvclRleHRFZGl0b3IuRml4V29yZE1vdmVtZW50KToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVGV4dEVkaXRvci5GaXhXb3JkTW92ZW1lbnQubW92ZVJp
Z2h0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2NtL2NvZGVtaXJyb3IuY3NzOgor
ICAgICAgICAoLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yKToKKyAgICAgICAgKC5D
b2RlTWlycm9yLmNtLWtleW1hcC1mYXQtY3Vyc29yIGRpdi5Db2RlTWlycm9yLWN1cnNvcik6Cisg
ICAgICAgICguQ29kZU1pcnJvcik6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9jbS9j
b2RlbWlycm9yLmpzOgorICAgICAgICAod2luZG93LkNvZGVNaXJyb3IpOgorICAgICAgICAod2lu
ZG93LkNvZGVNaXJyb3IuKToKKwogMjAxMy0wMy0xOCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2
aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE0
NjAzNS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29k
ZU1pcnJvclRleHRFZGl0b3IuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0NvZGVNaXJyb3JUZXh0RWRpdG9yLmpzCmluZGV4IGFlNGM4ZjMyNzI5YWFmYmI2NTQzZmU4ZGNk
Y2Q0OWExY2U5MjJhZjQuLjJmYmM5ZmYyNDQyMmJkYTlkYzBiMThiZGRkNzljYTk1YzRiMDEwODgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29kZU1pcnJv
clRleHRFZGl0b3IuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9D
b2RlTWlycm9yVGV4dEVkaXRvci5qcwpAQCAtNjgsNiArNjgsNyBAQCBXZWJJbnNwZWN0b3IuQ29k
ZU1pcnJvclRleHRFZGl0b3IgPSBmdW5jdGlvbih1cmwsIGRlbGVnYXRlKQogCiAgICAgdGhpcy5f
dG9rZW5IaWdobGlnaHRlciA9IG5ldyBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRleHRFZGl0b3Iu
VG9rZW5IaWdobGlnaHRlcih0aGlzLl9jb2RlTWlycm9yKTsKICAgICB0aGlzLl9ibG9ja0luZGVu
dENvbnRyb2xsZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUZXh0RWRpdG9yLkJsb2Nr
SW5kZW50Q29udHJvbGxlcih0aGlzLl9jb2RlTWlycm9yKTsKKyAgICB0aGlzLl9maXhXb3JkTW92
ZW1lbnQgPSBuZXcgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUZXh0RWRpdG9yLkZpeFdvcmRNb3Zl
bWVudCh0aGlzLl9jb2RlTWlycm9yKTsKIAogICAgIHRoaXMuX2NvZGVNaXJyb3Iub24oImNoYW5n
ZSIsIHRoaXMuX2NoYW5nZS5iaW5kKHRoaXMpKTsKICAgICB0aGlzLl9jb2RlTWlycm9yLm9uKCJn
dXR0ZXJDbGljayIsIHRoaXMuX2d1dHRlckNsaWNrLmJpbmQodGhpcykpOwpAQCAtNTE3LDQgKzUx
OCwzOSBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRleHRFZGl0b3IuQmxvY2tJbmRlbnRDb250
cm9sbGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXR1cm4g
Q29kZU1pcnJvci5QYXNzOwogICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9
CisKK1dlYkluc3BlY3Rvci5Db2RlTWlycm9yVGV4dEVkaXRvci5GaXhXb3JkTW92ZW1lbnQgPSBm
dW5jdGlvbihjb2RlTWlycm9yKQoreworICAgIGZ1bmN0aW9uIG1vdmVMZWZ0KHNoaWZ0LCBjb2Rl
TWlycm9yKQorICAgIHsKKyAgICAgICAgdmFyIGN1cnNvciA9IGNvZGVNaXJyb3IuZ2V0Q3Vyc29y
KCJoZWFkIik7CisgICAgICAgIGlmIChjdXJzb3IuY2ggIT09IDAgfHwgY3Vyc29yLmxpbmUgPT09
IDApCisgICAgICAgICAgICByZXR1cm4gQ29kZU1pcnJvci5QYXNzOworICAgICAgICBjb2RlTWly
cm9yLnNldEV4dGVuZGluZyhzaGlmdCk7CisgICAgICAgIGNvZGVNaXJyb3IuZXhlY0NvbW1hbmQo
ImdvTGluZVVwIik7CisgICAgICAgIGNvZGVNaXJyb3IuZXhlY0NvbW1hbmQoImdvTGluZUVuZCIp
CisgICAgICAgIGNvZGVNaXJyb3Iuc2V0RXh0ZW5kaW5nKGZhbHNlKTsKKyAgICB9CisgICAgZnVu
Y3Rpb24gbW92ZVJpZ2h0KHNoaWZ0LCBjb2RlTWlycm9yKQorICAgIHsKKyAgICAgICAgdmFyIGN1
cnNvciA9IGNvZGVNaXJyb3IuZ2V0Q3Vyc29yKCJoZWFkIik7CisgICAgICAgIHZhciBsaW5lID0g
Y29kZU1pcnJvci5nZXRMaW5lKGN1cnNvci5saW5lKTsKKyAgICAgICAgaWYgKGN1cnNvci5jaCAh
PT0gbGluZS5sZW5ndGggfHwgY3Vyc29yLmxpbmUgKyAxID09PSBjb2RlTWlycm9yLmxpbmVDb3Vu
dCgpKQorICAgICAgICAgICAgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsKKyAgICAgICAgY29kZU1p
cnJvci5zZXRFeHRlbmRpbmcoc2hpZnQpOworICAgICAgICBjb2RlTWlycm9yLmV4ZWNDb21tYW5k
KCJnb0xpbmVEb3duIik7CisgICAgICAgIGNvZGVNaXJyb3IuZXhlY0NvbW1hbmQoImdvTGluZVN0
YXJ0Iik7CisgICAgICAgIGNvZGVNaXJyb3Iuc2V0RXh0ZW5kaW5nKGZhbHNlKTsKKyAgICB9CisK
KyAgICB2YXIgbW9kaWZpZXJLZXkgPSBXZWJJbnNwZWN0b3IuaXNNYWMoKSA/ICJBbHQiIDogIkN0
cmwiOworICAgIHZhciBsZWZ0S2V5ID0gbW9kaWZpZXJLZXkgKyAiLUxlZnQiOworICAgIHZhciBy
aWdodEtleSA9IG1vZGlmaWVyS2V5ICsgIi1SaWdodCI7CisgICAgdmFyIGtleU1hcCA9IHt9Owor
ICAgIGtleU1hcFtsZWZ0S2V5XSA9IG1vdmVMZWZ0LmJpbmQodGhpcywgZmFsc2UpOworICAgIGtl
eU1hcFtyaWdodEtleV0gPSBtb3ZlUmlnaHQuYmluZCh0aGlzLCBmYWxzZSk7CisgICAga2V5TWFw
WyJTaGlmdC0iICsgbGVmdEtleV0gPSBtb3ZlTGVmdC5iaW5kKHRoaXMsIHRydWUpOworICAgIGtl
eU1hcFsiU2hpZnQtIiArIHJpZ2h0S2V5XSA9IG1vdmVSaWdodC5iaW5kKHRoaXMsIHRydWUpOwor
ICAgIGNvZGVNaXJyb3IuYWRkS2V5TWFwKGtleU1hcCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2NtL2NvZGVtaXJyb3IuY3NzIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9jbS9jb2RlbWlycm9yLmNzcwppbmRleCA4ZGUwYjE5
MDhlODk3NWViZTYwOWQwZDQ5NGFiMWJiNGVhNGIxMzZhLi45MTNhMWE5YzNkOWRkYjJhNzk5MWYz
MjZiNWMzODkyNGZkN2NiYWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL2NtL2NvZGVtaXJyb3IuY3NzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvY20vY29kZW1pcnJvci5jc3MKQEAgLTQxLDYgKzQxLDcgQEAKIAogLkNvZGVN
aXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBi
bGFjazsKKyAgei1pbmRleDogMzsKIH0KIC8qIFNob3duIHdoZW4gbW92aW5nIGluIGJpLWRpcmVj
dGlvbmFsIHRleHQgKi8KIC5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLXNlY29uZGFyeWN1cnNv
ciB7CkBAIC00OSwxMyArNTAsOCBAQAogLkNvZGVNaXJyb3IuY20ta2V5bWFwLWZhdC1jdXJzb3Ig
ZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgd2lkdGg6IGF1dG87CiAgIGJvcmRlcjogMDsKLSAg
YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Ci0gIGJhY2tncm91bmQ6IHJnYmEoMCwgMjAwLCAwLCAu
NCk7Ci0gIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50
KHN0YXJ0Q29sb3JzdHI9IzY2MDBjODAwLCBlbmRDb2xvcnN0cj0jNGMwMGM4MDApOwotfQotLyog
S2x1ZGdlIHRvIHR1cm4gb2ZmIGZpbHRlciBpbiBpZTkrLCB3aGljaCBhbHNvIGFjY2VwdHMgcmdi
YSAqLwotLkNvZGVNaXJyb3IuY20ta2V5bWFwLWZhdC1jdXJzb3IgZGl2LkNvZGVNaXJyb3ItY3Vy
c29yOm5vdCgjbm9uc2Vuc2VfaWQpIHsKLSAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9y
bS5NaWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZD1mYWxzZSk7CisgIGJhY2tncm91bmQ6ICM3ZTc7
CisgIHotaW5kZXg6IDE7CiB9CiAvKiBDYW4gc3R5bGUgY3Vyc29yIGRpZmZlcmVudCBpbiBvdmVy
d3JpdGUgKG5vbi1pbnNlcnQpIG1vZGUgKi8KIC5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLWN1
cnNvci5Db2RlTWlycm9yLW92ZXJ3cml0ZSB7fQpAQCAtOTAsNyArODYsNiBAQAogLmNtLXBvc2l0
aXZlIHtjb2xvcjogIzI5Mjt9CiAuY20taGVhZGVyLCAuY20tc3Ryb25nIHtmb250LXdlaWdodDog
Ym9sZDt9CiAuY20tZW0ge2ZvbnQtc3R5bGU6IGl0YWxpYzt9Ci0uY20tZW1zdHJvbmcge2ZvbnQt
c3R5bGU6IGl0YWxpYzsgZm9udC13ZWlnaHQ6IGJvbGQ7fQogLmNtLWxpbmsge3RleHQtZGVjb3Jh
dGlvbjogdW5kZXJsaW5lO30KIAogLmNtLWludmFsaWRjaGFyIHtjb2xvcjogI2YwMDt9CkBAIC0x
MDcsNiArMTAyLDggQEAgZGl2LkNvZGVNaXJyb3Igc3Bhbi5Db2RlTWlycm9yLW5vbm1hdGNoaW5n
YnJhY2tldCB7Y29sb3I6ICNmMjI7fQogICBsaW5lLWhlaWdodDogMTsKICAgcG9zaXRpb246IHJl
bGF0aXZlOwogICBvdmVyZmxvdzogaGlkZGVuOworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKKyAgY29s
b3I6IGJsYWNrOwogfQogCiAuQ29kZU1pcnJvci1zY3JvbGwgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9jbS9jb2RlbWlycm9yLmpzIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9jbS9jb2RlbWlycm9yLmpzCmluZGV4IDg3MzM5ZDA1
ZjNjZDI2ZmI2YmVlMDIzMzA0Nzk1M2U4ZGFkZmY4YTcuLjNhNDBjMDZmZmU4NzA4OTYwNWJkOWM4
Mzk4MjA2ZjY3ODY4ODA3NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvY20vY29kZW1pcnJvci5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL2NtL2NvZGVtaXJyb3IuanMKQEAgLTEsNSArMSwzIEBACi0vLyBDb2RlTWlycm9y
IHZlcnNpb24gMy4xCi0vLwogLy8gQ29kZU1pcnJvciBpcyB0aGUgb25seSBnbG9iYWwgdmFyIHdl
IGNsYWltCiB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgInVzZSBzdHJpY3Qi
OwpAQCAtNDEsNyArMzksNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAog
ICBmdW5jdGlvbiBDb2RlTWlycm9yKHBsYWNlLCBvcHRpb25zKSB7CiAgICAgaWYgKCEodGhpcyBp
bnN0YW5jZW9mIENvZGVNaXJyb3IpKSByZXR1cm4gbmV3IENvZGVNaXJyb3IocGxhY2UsIG9wdGlv
bnMpOwotICAgIAorCiAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyA9IG9wdGlvbnMgfHwge307
CiAgICAgLy8gRGV0ZXJtaW5lIGVmZmVjdGl2ZSBvcHRpb25zIGJhc2VkIG9uIGdpdmVuIHZhbHVl
cyBhbmQgZGVmYXVsdHMuCiAgICAgZm9yICh2YXIgb3B0IGluIGRlZmF1bHRzKSBpZiAoIW9wdGlv
bnMuaGFzT3duUHJvcGVydHkob3B0KSAmJiBkZWZhdWx0cy5oYXNPd25Qcm9wZXJ0eShvcHQpKQpA
QCAtOTMsMTAgKzkxLDE0IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogCiAg
IGZ1bmN0aW9uIG1ha2VEaXNwbGF5KHBsYWNlLCBkb2NTdGFydCkgewogICAgIHZhciBkID0ge307
CisKICAgICB2YXIgaW5wdXQgPSBkLmlucHV0ID0gZWx0KCJ0ZXh0YXJlYSIsIG51bGwsIG51bGws
ICJwb3NpdGlvbjogYWJzb2x1dGU7IHBhZGRpbmc6IDA7IHdpZHRoOiAxcHg7IGhlaWdodDogMWVt
OyBvdXRsaW5lOiBub25lOyIpOwogICAgIGlmICh3ZWJraXQpIGlucHV0LnN0eWxlLndpZHRoID0g
IjEwMDBweCI7CiAgICAgZWxzZSBpbnB1dC5zZXRBdHRyaWJ1dGUoIndyYXAiLCAib2ZmIik7Cisg
ICAgLy8gaWYgYm9yZGVyOiAwOyAtLSBpT1MgZmFpbHMgdG8gb3BlbiBrZXlib2FyZCAoaXNzdWUg
IzEyODcpCisgICAgaWYgKGlvcykgaW5wdXQuc3R5bGUuYm9yZGVyID0gIjFweCBzb2xpZCBibGFj
ayI7CiAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJhdXRvY29ycmVjdCIsICJvZmYiKTsgaW5wdXQu
c2V0QXR0cmlidXRlKCJhdXRvY2FwaXRhbGl6ZSIsICJvZmYiKTsKKwogICAgIC8vIFdyYXBzIGFu
ZCBoaWRlcyBpbnB1dCB0ZXh0YXJlYQogICAgIGQuaW5wdXREaXYgPSBlbHQoImRpdiIsIFtpbnB1
dF0sIG51bGwsICJvdmVyZmxvdzogaGlkZGVuOyBwb3NpdGlvbjogcmVsYXRpdmU7IHdpZHRoOiAz
cHg7IGhlaWdodDogMHB4OyIpOwogICAgIC8vIFRoZSBhY3R1YWwgZmFrZSBzY3JvbGxiYXJzLgpA
QCAtMTIwLDcgKzEyMiw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAg
IC8vIFNldCB0byB0aGUgaGVpZ2h0IG9mIHRoZSB0ZXh0LCBjYXVzZXMgc2Nyb2xsaW5nCiAgICAg
ZC5zaXplciA9IGVsdCgiZGl2IiwgW2QubW92ZXJdLCAiQ29kZU1pcnJvci1zaXplciIpOwogICAg
IC8vIEQgaXMgbmVlZGVkIGJlY2F1c2UgYmVoYXZpb3Igb2YgZWx0cyB3aXRoIG92ZXJmbG93OiBh
dXRvIGFuZCBwYWRkaW5nIGlzIGluY29uc2lzdGVudCBhY3Jvc3MgYnJvd3NlcnMKLSAgICBkLmhl
aWdodEZvcmNlciA9IGVsdCgiZGl2IiwgIlx1MDBhMCIsIG51bGwsICJwb3NpdGlvbjogYWJzb2x1
dGU7IGhlaWdodDogIiArIHNjcm9sbGVyQ3V0T2ZmICsgInB4Iik7CisgICAgZC5oZWlnaHRGb3Jj
ZXIgPSBlbHQoImRpdiIsIG51bGwsIG51bGwsICJwb3NpdGlvbjogYWJzb2x1dGU7IGhlaWdodDog
IiArIHNjcm9sbGVyQ3V0T2ZmICsgInB4OyB3aWR0aDogMXB4OyIpOwogICAgIC8vIFdpbGwgY29u
dGFpbiB0aGUgZ3V0dGVycywgaWYgYW55CiAgICAgZC5ndXR0ZXJzID0gZWx0KCJkaXYiLCBudWxs
LCAiQ29kZU1pcnJvci1ndXR0ZXJzIik7CiAgICAgZC5saW5lR3V0dGVyID0gbnVsbDsKQEAgLTE4
MSw3ICsxODMsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAogICAgIC8v
IFVzZWQgZm9yIG1lYXN1cmluZyB3aGVlbCBzY3JvbGxpbmcgZ3JhbnVsYXJpdHkKICAgICBkLndo
ZWVsRFggPSBkLndoZWVsRFkgPSBkLndoZWVsU3RhcnRYID0gZC53aGVlbFN0YXJ0WSA9IG51bGw7
Ci0gICAgCisKICAgICByZXR1cm4gZDsKICAgfQogCkBAIC0zMTgsNyArMzIwLDcgQEAgd2luZG93
LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIC8vIFJlLXN5bmNocm9uaXplIHRoZSBmYWtl
IHNjcm9sbGJhcnMgd2l0aCB0aGUgYWN0dWFsIHNpemUgb2YgdGhlCiAgIC8vIGNvbnRlbnQuIE9w
dGlvbmFsbHkgZm9yY2UgYSBzY3JvbGxUb3AuCiAgIGZ1bmN0aW9uIHVwZGF0ZVNjcm9sbGJhcnMo
ZCAvKiBkaXNwbGF5ICovLCBkb2NIZWlnaHQpIHsKLSAgICB2YXIgdG90YWxIZWlnaHQgPSBkb2NI
ZWlnaHQgKyAyICogcGFkZGluZ1RvcChkKTsKKyAgICB2YXIgdG90YWxIZWlnaHQgPSBkb2NIZWln
aHQgKyBwYWRkaW5nVmVydChkKTsKICAgICBkLnNpemVyLnN0eWxlLm1pbkhlaWdodCA9IGQuaGVp
Z2h0Rm9yY2VyLnN0eWxlLnRvcCA9IHRvdGFsSGVpZ2h0ICsgInB4IjsKICAgICB2YXIgc2Nyb2xs
SGVpZ2h0ID0gTWF0aC5tYXgodG90YWxIZWlnaHQsIGQuc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0KTsK
ICAgICB2YXIgbmVlZHNIID0gZC5zY3JvbGxlci5zY3JvbGxXaWR0aCA+IGQuc2Nyb2xsZXIuY2xp
ZW50V2lkdGg7CkBAIC0zMjYsNyArMzI4LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rp
b24oKSB7CiAgICAgaWYgKG5lZWRzVikgewogICAgICAgZC5zY3JvbGxiYXJWLnN0eWxlLmRpc3Bs
YXkgPSAiYmxvY2siOwogICAgICAgZC5zY3JvbGxiYXJWLnN0eWxlLmJvdHRvbSA9IG5lZWRzSCA/
IHNjcm9sbGJhcldpZHRoKGQubWVhc3VyZSkgKyAicHgiIDogIjAiOwotICAgICAgZC5zY3JvbGxi
YXJWLmZpcnN0Q2hpbGQuc3R5bGUuaGVpZ2h0ID0gCisgICAgICBkLnNjcm9sbGJhclYuZmlyc3RD
aGlsZC5zdHlsZS5oZWlnaHQgPQogICAgICAgICAoc2Nyb2xsSGVpZ2h0IC0gZC5zY3JvbGxlci5j
bGllbnRIZWlnaHQgKyBkLnNjcm9sbGJhclYuY2xpZW50SGVpZ2h0KSArICJweCI7CiAgICAgfSBl
bHNlIGQuc2Nyb2xsYmFyVi5zdHlsZS5kaXNwbGF5ID0gIiI7CiAgICAgaWYgKG5lZWRzSCkgewpA
QCAtNjM2LDcgKzYzOCw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAg
IC8vIExpbmVzIHdpdGggZ3V0dGVyIGVsZW1lbnRzLCB3aWRnZXRzIG9yIGEgYmFja2dyb3VuZCBj
bGFzcyBuZWVkCiAgICAgLy8gdG8gYmUgd3JhcHBlZCBhZ2FpbiwgYW5kIGhhdmUgdGhlIGV4dHJh
IGVsZW1lbnRzIGFkZGVkIHRvIHRoZQogICAgIC8vIHdyYXBwZXIgZGl2Ci0gICAgCisKICAgICBp
ZiAocmV1c2UpIHsKICAgICAgIHJldXNlLmFsaWduYWJsZSA9IG51bGw7CiAgICAgICB2YXIgaXNP
ayA9IHRydWUsIHdpZGdldHNTZWVuID0gMDsKQEAgLTY2OSw3ICs2NzEsNyBAQCB3aW5kb3cuQ29k
ZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB9CiAgICAgLy8gS2x1ZGdlIHRvIG1ha2Ugc3Vy
ZSB0aGUgc3R5bGVkIGVsZW1lbnQgbGllcyBiZWhpbmQgdGhlIHNlbGVjdGlvbiAoYnkgei1pbmRl
eCkKICAgICBpZiAobGluZS5iZ0NsYXNzKQotICAgICAgd3JhcC5pbnNlcnRCZWZvcmUoZWx0KCJk
aXYiLCAiXHUwMGEwIiwgbGluZS5iZ0NsYXNzICsgIiBDb2RlTWlycm9yLWxpbmViYWNrZ3JvdW5k
IiksIHdyYXAuZmlyc3RDaGlsZCk7CisgICAgICB3cmFwLmluc2VydEJlZm9yZShlbHQoImRpdiIs
IG51bGwsIGxpbmUuYmdDbGFzcyArICIgQ29kZU1pcnJvci1saW5lYmFja2dyb3VuZCIpLCB3cmFw
LmZpcnN0Q2hpbGQpOwogICAgIGlmIChjbS5vcHRpb25zLmxpbmVOdW1iZXJzIHx8IG1hcmtlcnMp
IHsKICAgICAgIHZhciBndXR0ZXJXcmFwID0gd3JhcC5pbnNlcnRCZWZvcmUoZWx0KCJkaXYiLCBu
dWxsLCBudWxsLCAicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAiICsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbS5vcHRpb25zLmZpeGVkR3V0dGVyID8g
ZGltcy5maXhlZFBvcyA6IC1kaW1zLmd1dHRlclRvdGFsV2lkdGgpICsgInB4IiksCkBAIC05Mjks
OCArOTMxLDkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIH0KIAogICAv
LyBQT1NJVElPTiBNRUFTVVJFTUVOVAotICAKKwogICBmdW5jdGlvbiBwYWRkaW5nVG9wKGRpc3Bs
YXkpIHtyZXR1cm4gZGlzcGxheS5saW5lU3BhY2Uub2Zmc2V0VG9wO30KKyAgZnVuY3Rpb24gcGFk
ZGluZ1ZlcnQoZGlzcGxheSkge3JldHVybiBkaXNwbGF5Lm1vdmVyLm9mZnNldEhlaWdodCAtIGRp
c3BsYXkubGluZVNwYWNlLm9mZnNldEhlaWdodDt9CiAgIGZ1bmN0aW9uIHBhZGRpbmdMZWZ0KGRp
c3BsYXkpIHsKICAgICB2YXIgZSA9IHJlbW92ZUNoaWxkcmVuQW5kQWRkKGRpc3BsYXkubWVhc3Vy
ZSwgZWx0KCJwcmUiLCBudWxsLCBudWxsLCAidGV4dC1hbGlnbjogbGVmdCIpKS5hcHBlbmRDaGls
ZChlbHQoInNwYW4iLCAieCIpKTsKICAgICByZXR1cm4gZS5vZmZzZXRMZWZ0OwpAQCAtOTM5LDcg
Kzk0Miw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICBmdW5jdGlvbiBt
ZWFzdXJlQ2hhcihjbSwgbGluZSwgY2gsIGRhdGEpIHsKICAgICB2YXIgZGlyID0gLTE7CiAgICAg
ZGF0YSA9IGRhdGEgfHwgbWVhc3VyZUxpbmUoY20sIGxpbmUpOwotICAgIAorCiAgICAgZm9yICh2
YXIgcG9zID0gY2g7OyBwb3MgKz0gZGlyKSB7CiAgICAgICB2YXIgciA9IGRhdGFbcG9zXTsKICAg
ICAgIGlmIChyKSBicmVhazsKQEAgLTk1MCwyNCArOTUzLDMwIEBAIHdpbmRvdy5Db2RlTWlycm9y
ID0gKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgdG9wOiByLnRvcCwgYm90dG9tOiByLmJvdHRv
bX07CiAgIH0KIAotICBmdW5jdGlvbiBtZWFzdXJlTGluZShjbSwgbGluZSkgewotICAgIC8vIEZp
cnN0IGxvb2sgaW4gdGhlIGNhY2hlCi0gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBjYWNo
ZSA9IGNtLmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZTsKKyAgZnVuY3Rpb24gZmluZENhY2hlZE1l
YXN1cmVtZW50KGNtLCBsaW5lKSB7CisgICAgdmFyIGNhY2hlID0gY20uZGlzcGxheS5tZWFzdXJl
TGluZUNhY2hlOwogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2FjaGUubGVuZ3RoOyArK2kpIHsK
ICAgICAgIHZhciBtZW1vID0gY2FjaGVbaV07CiAgICAgICBpZiAobWVtby50ZXh0ID09IGxpbmUu
dGV4dCAmJiBtZW1vLm1hcmtlZFNwYW5zID09IGxpbmUubWFya2VkU3BhbnMgJiYKLSAgICAgICAg
ICBkaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoID09IG1lbW8ud2lkdGggJiYKKyAgICAgICAg
ICBjbS5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoID09IG1lbW8ud2lkdGggJiYKICAgICAg
ICAgICBtZW1vLmNsYXNzZXMgPT0gbGluZS50ZXh0Q2xhc3MgKyAifCIgKyBsaW5lLmJnQ2xhc3Mg
KyAifCIgKyBsaW5lLndyYXBDbGFzcykKICAgICAgICAgcmV0dXJuIG1lbW8ubWVhc3VyZTsKICAg
ICB9Ci0gICAgCi0gICAgdmFyIG1lYXN1cmUgPSBtZWFzdXJlTGluZUlubmVyKGNtLCBsaW5lKTsK
LSAgICAvLyBTdG9yZSByZXN1bHQgaW4gdGhlIGNhY2hlCi0gICAgdmFyIG1lbW8gPSB7dGV4dDog
bGluZS50ZXh0LCB3aWR0aDogZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCwKLSAgICAgICAg
ICAgICAgICBtYXJrZWRTcGFuczogbGluZS5tYXJrZWRTcGFucywgbWVhc3VyZTogbWVhc3VyZSwK
LSAgICAgICAgICAgICAgICBjbGFzc2VzOiBsaW5lLnRleHRDbGFzcyArICJ8IiArIGxpbmUuYmdD
bGFzcyArICJ8IiArIGxpbmUud3JhcENsYXNzfTsKLSAgICBpZiAoY2FjaGUubGVuZ3RoID09IDE2
KSBjYWNoZVsrK2Rpc3BsYXkubWVhc3VyZUxpbmVDYWNoZVBvcyAlIDE2XSA9IG1lbW87Ci0gICAg
ZWxzZSBjYWNoZS5wdXNoKG1lbW8pOworICB9CisKKyAgZnVuY3Rpb24gbWVhc3VyZUxpbmUoY20s
IGxpbmUpIHsKKyAgICAvLyBGaXJzdCBsb29rIGluIHRoZSBjYWNoZQorICAgIHZhciBtZWFzdXJl
ID0gZmluZENhY2hlZE1lYXN1cmVtZW50KGNtLCBsaW5lKTsKKyAgICBpZiAoIW1lYXN1cmUpIHsK
KyAgICAgIC8vIEZhaWxpbmcgdGhhdCwgcmVjb21wdXRlIGFuZCBzdG9yZSByZXN1bHQgaW4gY2Fj
aGUKKyAgICAgIG1lYXN1cmUgPSBtZWFzdXJlTGluZUlubmVyKGNtLCBsaW5lKTsKKyAgICAgIHZh
ciBjYWNoZSA9IGNtLmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZTsKKyAgICAgIHZhciBtZW1vID0g
e3RleHQ6IGxpbmUudGV4dCwgd2lkdGg6IGNtLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGgs
CisgICAgICAgICAgICAgICAgICBtYXJrZWRTcGFuczogbGluZS5tYXJrZWRTcGFucywgbWVhc3Vy
ZTogbWVhc3VyZSwKKyAgICAgICAgICAgICAgICAgIGNsYXNzZXM6IGxpbmUudGV4dENsYXNzICsg
InwiICsgbGluZS5iZ0NsYXNzICsgInwiICsgbGluZS53cmFwQ2xhc3N9OworICAgICAgaWYgKGNh
Y2hlLmxlbmd0aCA9PSAxNikgY2FjaGVbKytjbS5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGVQb3Mg
JSAxNl0gPSBtZW1vOworICAgICAgZWxzZSBjYWNoZS5wdXNoKG1lbW8pOworICAgIH0KICAgICBy
ZXR1cm4gbWVhc3VyZTsKICAgfQogCkBAIC0xMDMyLDE1ICsxMDQxLDI1IEBAIHdpbmRvdy5Db2Rl
TWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgdmFyIHZyID0gY3VyLnRvcDsKICAgICAgIGN1
ci50b3AgPSB2cmFuZ2VzW3ZyXTsgY3VyLmJvdHRvbSA9IHZyYW5nZXNbdnIrMV07CiAgICAgfQot
ICAgIGlmICghY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIHsKLSAgICAgIHZhciBsYXN0ID0gcHJl
Lmxhc3RDaGlsZDsKLSAgICAgIGlmIChsYXN0Lm5vZGVUeXBlID09IDMpIGxhc3QgPSBwcmUuYXBw
ZW5kQ2hpbGQoZWx0KCJzcGFuIiwgIlx1MjAwYiIpKTsKLSAgICAgIGRhdGEud2lkdGggPSBnZXRS
ZWN0KGxhc3QpLnJpZ2h0IC0gb3V0ZXIubGVmdDsKLSAgICB9CiAKICAgICByZXR1cm4gZGF0YTsK
ICAgfQogCisgIGZ1bmN0aW9uIG1lYXN1cmVMaW5lV2lkdGgoY20sIGxpbmUpIHsKKyAgICB2YXIg
aGFzQmFkU3BhbiA9IGZhbHNlOworICAgIGlmIChsaW5lLm1hcmtlZFNwYW5zKSBmb3IgKHZhciBp
ID0gMDsgaSA8IGxpbmUubWFya2VkU3BhbnM7ICsraSkgeworICAgICAgdmFyIHNwID0gbGluZS5t
YXJrZWRTcGFuc1tpXTsKKyAgICAgIGlmIChzcC5jb2xsYXBzZWQgJiYgKHNwLnRvID09IG51bGwg
fHwgc3AudG8gPT0gbGluZS50ZXh0Lmxlbmd0aCkpIGhhc0JhZFNwYW4gPSB0cnVlOworICAgIH0K
KyAgICB2YXIgY2FjaGVkID0gIWhhc0JhZFNwYW4gJiYgZmluZENhY2hlZE1lYXN1cmVtZW50KGNt
LCBsaW5lKTsKKyAgICBpZiAoY2FjaGVkKSByZXR1cm4gbWVhc3VyZUNoYXIoY20sIGxpbmUsIGxp
bmUudGV4dC5sZW5ndGgsIGNhY2hlZCkucmlnaHQ7CisKKyAgICB2YXIgcHJlID0gbGluZUNvbnRl
bnQoY20sIGxpbmUpOworICAgIHZhciBlbmQgPSBwcmUuYXBwZW5kQ2hpbGQoemVyb1dpZHRoRWxl
bWVudChjbS5kaXNwbGF5Lm1lYXN1cmUpKTsKKyAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChjbS5k
aXNwbGF5Lm1lYXN1cmUsIHByZSk7CisgICAgcmV0dXJuIGdldFJlY3QoZW5kKS5yaWdodCAtIGdl
dFJlY3QoY20uZGlzcGxheS5saW5lRGl2KS5sZWZ0OworICB9CisKICAgZnVuY3Rpb24gY2xlYXJD
YWNoZXMoY20pIHsKICAgICBjbS5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGUubGVuZ3RoID0gY20u
ZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlUG9zID0gMDsKICAgICBjbS5kaXNwbGF5LmNhY2hlZENo
YXJXaWR0aCA9IGNtLmRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodCA9IG51bGw7CkBAIC0xMDY4LDYg
KzEwODcsMjYgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgcmV0dXJu
IHJlY3Q7CiAgIH0KIAorICAvLyBDb250ZXh0IG1heSBiZSAid2luZG93IiwgInBhZ2UiLCAiZGl2
Iiwgb3IgImxvY2FsIi9udWxsCisgIC8vIFJlc3VsdCBpcyBpbiBsb2NhbCBjb29yZHMKKyAgZnVu
Y3Rpb24gZnJvbUNvb3JkU3lzdGVtKGNtLCBjb29yZHMsIGNvbnRleHQpIHsKKyAgICBpZiAoY29u
dGV4dCA9PSAiZGl2IikgcmV0dXJuIGNvb3JkczsKKyAgICB2YXIgbGVmdCA9IGNvb3Jkcy5sZWZ0
LCB0b3AgPSBjb29yZHMudG9wOworICAgIGlmIChjb250ZXh0ID09ICJwYWdlIikgeworICAgICAg
bGVmdCAtPSB3aW5kb3cucGFnZVhPZmZzZXQgfHwgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8
fCBkb2N1bWVudC5ib2R5KS5zY3JvbGxMZWZ0OworICAgICAgdG9wIC09IHdpbmRvdy5wYWdlWU9m
ZnNldCB8fCAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IGRvY3VtZW50LmJvZHkpLnNjcm9s
bFRvcDsKKyAgICB9CisgICAgdmFyIGxpbmVTcGFjZUJveCA9IGdldFJlY3QoY20uZGlzcGxheS5s
aW5lU3BhY2UpOworICAgIGxlZnQgLT0gbGluZVNwYWNlQm94LmxlZnQ7CisgICAgdG9wIC09IGxp
bmVTcGFjZUJveC50b3A7CisgICAgaWYgKGNvbnRleHQgPT0gImxvY2FsIiB8fCAhY29udGV4dCkg
eworICAgICAgdmFyIGVkaXRvckJveCA9IGdldFJlY3QoY20uZGlzcGxheS53cmFwcGVyKTsKKyAg
ICAgIGxlZnQgLT0gZWRpdG9yQm94LmxlZnQ7CisgICAgICB0b3AgLT0gZWRpdG9yQm94LnRvcDsK
KyAgICB9CisgICAgcmV0dXJuIHtsZWZ0OiBsZWZ0LCB0b3A6IHRvcH07CisgIH0KKwogICBmdW5j
dGlvbiBjaGFyQ29vcmRzKGNtLCBwb3MsIGNvbnRleHQsIGxpbmVPYmopIHsKICAgICBpZiAoIWxp
bmVPYmopIGxpbmVPYmogPSBnZXRMaW5lKGNtLmRvYywgcG9zLmxpbmUpOwogICAgIHJldHVybiBp
bnRvQ29vcmRTeXN0ZW0oY20sIGxpbmVPYmosIG1lYXN1cmVDaGFyKGNtLCBsaW5lT2JqLCBwb3Mu
Y2gpLCBjb250ZXh0KTsKQEAgLTExMzksMTUgKzExNzgsMTUgQEAgd2luZG93LkNvZGVNaXJyb3Ig
PSAoZnVuY3Rpb24oKSB7CiAKICAgZnVuY3Rpb24gY29vcmRzQ2hhcklubmVyKGNtLCBsaW5lT2Jq
LCBsaW5lTm8sIHgsIHkpIHsKICAgICB2YXIgaW5uZXJPZmYgPSB5IC0gaGVpZ2h0QXRMaW5lKGNt
LCBsaW5lT2JqKTsKLSAgICB2YXIgd3JvbmdMaW5lID0gZmFsc2UsIGNXaWR0aCA9IGNtLmRpc3Bs
YXkud3JhcHBlci5jbGllbnRXaWR0aDsKKyAgICB2YXIgd3JvbmdMaW5lID0gZmFsc2UsIGFkanVz
dCA9IDIgKiBjbS5kaXNwbGF5LndyYXBwZXIuY2xpZW50V2lkdGg7CiAgICAgdmFyIG1lYXN1cmVt
ZW50ID0gbWVhc3VyZUxpbmUoY20sIGxpbmVPYmopOwogCiAgICAgZnVuY3Rpb24gZ2V0WChjaCkg
ewogICAgICAgdmFyIHNwID0gY3Vyc29yQ29vcmRzKGNtLCBQb3MobGluZU5vLCBjaCksICJsaW5l
IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lT2JqLCBtZWFzdXJlbWVudCk7CiAg
ICAgICB3cm9uZ0xpbmUgPSB0cnVlOwotICAgICAgaWYgKGlubmVyT2ZmID4gc3AuYm90dG9tKSBy
ZXR1cm4gTWF0aC5tYXgoMCwgc3AubGVmdCAtIGNXaWR0aCk7Ci0gICAgICBlbHNlIGlmIChpbm5l
ck9mZiA8IHNwLnRvcCkgcmV0dXJuIHNwLmxlZnQgKyBjV2lkdGg7CisgICAgICBpZiAoaW5uZXJP
ZmYgPiBzcC5ib3R0b20pIHJldHVybiBzcC5sZWZ0IC0gYWRqdXN0OworICAgICAgZWxzZSBpZiAo
aW5uZXJPZmYgPCBzcC50b3ApIHJldHVybiBzcC5sZWZ0ICsgYWRqdXN0OwogICAgICAgZWxzZSB3
cm9uZ0xpbmUgPSBmYWxzZTsKICAgICAgIHJldHVybiBzcC5sZWZ0OwogICAgIH0KQEAgLTEyMzcs
NyArMTI3Niw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogCiAgICAgaWYg
KG9wLnVwZGF0ZU1heExpbmUpIGNvbXB1dGVNYXhMZW5ndGgoY20pOwogICAgIGlmIChkaXNwbGF5
Lm1heExpbmVDaGFuZ2VkICYmICFjbS5vcHRpb25zLmxpbmVXcmFwcGluZykgewotICAgICAgdmFy
IHdpZHRoID0gbWVhc3VyZUxpbmUoY20sIGRpc3BsYXkubWF4TGluZSkud2lkdGg7CisgICAgICB2
YXIgd2lkdGggPSBtZWFzdXJlTGluZVdpZHRoKGNtLCBkaXNwbGF5Lm1heExpbmUpOwogICAgICAg
ZGlzcGxheS5zaXplci5zdHlsZS5taW5XaWR0aCA9IE1hdGgubWF4KDAsIHdpZHRoICsgMyArIHNj
cm9sbGVyQ3V0T2ZmKSArICJweCI7CiAgICAgICBkaXNwbGF5Lm1heExpbmVDaGFuZ2VkID0gZmFs
c2U7CiAgICAgICB2YXIgbWF4U2Nyb2xsTGVmdCA9IE1hdGgubWF4KDAsIGRpc3BsYXkuc2l6ZXIu
b2Zmc2V0TGVmdCArIGRpc3BsYXkuc2l6ZXIub2Zmc2V0V2lkdGggLSBkaXNwbGF5LnNjcm9sbGVy
LmNsaWVudFdpZHRoKTsKQEAgLTEyNTEsOCArMTI5MCwxMCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9
IChmdW5jdGlvbigpIHsKICAgICAgIHZhciBjb29yZHMgPSBjdXJzb3JDb29yZHMoY20sIGRvYy5z
ZWwuaGVhZCk7CiAgICAgICBuZXdTY3JvbGxQb3MgPSBjYWxjdWxhdGVTY3JvbGxQb3MoY20sIGNv
b3Jkcy5sZWZ0LCBjb29yZHMudG9wLCBjb29yZHMubGVmdCwgY29vcmRzLmJvdHRvbSk7CiAgICAg
fQotICAgIGlmIChvcC5jaGFuZ2VzLmxlbmd0aCB8fCBuZXdTY3JvbGxQb3MgJiYgbmV3U2Nyb2xs
UG9zLnNjcm9sbFRvcCAhPSBudWxsKQorICAgIGlmIChvcC5jaGFuZ2VzLmxlbmd0aCB8fCBuZXdT
Y3JvbGxQb3MgJiYgbmV3U2Nyb2xsUG9zLnNjcm9sbFRvcCAhPSBudWxsKSB7CiAgICAgICB1cGRh
dGVkID0gdXBkYXRlRGlzcGxheShjbSwgb3AuY2hhbmdlcywgbmV3U2Nyb2xsUG9zICYmIG5ld1Nj
cm9sbFBvcy5zY3JvbGxUb3ApOworICAgICAgaWYgKGNtLmRpc3BsYXkuc2Nyb2xsZXIub2Zmc2V0
SGVpZ2h0KSBjbS5kb2Muc2Nyb2xsVG9wID0gY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3A7
CisgICAgfQogICAgIGlmICghdXBkYXRlZCAmJiBvcC5zZWxlY3Rpb25DaGFuZ2VkKSB1cGRhdGVT
ZWxlY3Rpb24oY20pOwogICAgIGlmIChvcC51cGRhdGVTY3JvbGxQb3MpIHsKICAgICAgIGRpc3Bs
YXkuc2Nyb2xsZXIuc2Nyb2xsVG9wID0gZGlzcGxheS5zY3JvbGxiYXJWLnNjcm9sbFRvcCA9IGRv
Yy5zY3JvbGxUb3AgPSBuZXdTY3JvbGxQb3Muc2Nyb2xsVG9wOwpAQCAtMTM2Nyw3ICsxNDA4LDcg
QEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgdmFyIHVwZGF0ZUlucHV0
ID0gY20uY3VyT3AudXBkYXRlSW5wdXQ7CiAgICAgbWFrZUNoYW5nZShjbS5kb2MsIHtmcm9tOiBm
cm9tLCB0bzogdG8sIHRleHQ6IHNwbGl0TGluZXModGV4dC5zbGljZShzYW1lKSksCiAgICAgICAg
ICAgICAgICAgICAgICAgICBvcmlnaW46IGNtLnN0YXRlLnBhc3RlSW5jb21pbmcgPyAicGFzdGUi
IDogIitpbnB1dCJ9LCAiZW5kIik7Ci0gICAgICAgICAgICAgICAKKwogICAgIGNtLmN1ck9wLnVw
ZGF0ZUlucHV0ID0gdXBkYXRlSW5wdXQ7CiAgICAgaWYgKHRleHQubGVuZ3RoID4gMTAwMCkgaW5w
dXQudmFsdWUgPSBjbS5kaXNwbGF5LnByZXZJbnB1dCA9ICIiOwogICAgIGVsc2UgY20uZGlzcGxh
eS5wcmV2SW5wdXQgPSB0ZXh0OwpAQCAtMTQxMywxNSArMTQ1NCwxNyBAQCB3aW5kb3cuQ29kZU1p
cnJvciA9IChmdW5jdGlvbigpIHsKICAgICBpZiAoIWNhcHR1cmVNaWRkbGVDbGljaykgb24oZC5z
Y3JvbGxlciwgImNvbnRleHRtZW51IiwgZnVuY3Rpb24oZSkge29uQ29udGV4dE1lbnUoY20sIGUp
O30pOwogCiAgICAgb24oZC5zY3JvbGxlciwgInNjcm9sbCIsIGZ1bmN0aW9uKCkgewotICAgICAg
c2V0U2Nyb2xsVG9wKGNtLCBkLnNjcm9sbGVyLnNjcm9sbFRvcCk7Ci0gICAgICBzZXRTY3JvbGxM
ZWZ0KGNtLCBkLnNjcm9sbGVyLnNjcm9sbExlZnQsIHRydWUpOwotICAgICAgc2lnbmFsKGNtLCAi
c2Nyb2xsIiwgY20pOworICAgICAgaWYgKGQuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0KSB7CisgICAg
ICAgIHNldFNjcm9sbFRvcChjbSwgZC5zY3JvbGxlci5zY3JvbGxUb3ApOworICAgICAgICBzZXRT
Y3JvbGxMZWZ0KGNtLCBkLnNjcm9sbGVyLnNjcm9sbExlZnQsIHRydWUpOworICAgICAgICBzaWdu
YWwoY20sICJzY3JvbGwiLCBjbSk7CisgICAgICB9CiAgICAgfSk7CiAgICAgb24oZC5zY3JvbGxi
YXJWLCAic2Nyb2xsIiwgZnVuY3Rpb24oKSB7Ci0gICAgICBzZXRTY3JvbGxUb3AoY20sIGQuc2Ny
b2xsYmFyVi5zY3JvbGxUb3ApOworICAgICAgaWYgKGQuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0KSBz
ZXRTY3JvbGxUb3AoY20sIGQuc2Nyb2xsYmFyVi5zY3JvbGxUb3ApOwogICAgIH0pOwogICAgIG9u
KGQuc2Nyb2xsYmFySCwgInNjcm9sbCIsIGZ1bmN0aW9uKCkgewotICAgICAgc2V0U2Nyb2xsTGVm
dChjbSwgZC5zY3JvbGxiYXJILnNjcm9sbExlZnQpOworICAgICAgaWYgKGQuc2Nyb2xsZXIuY2xp
ZW50SGVpZ2h0KSBzZXRTY3JvbGxMZWZ0KGNtLCBkLnNjcm9sbGJhckguc2Nyb2xsTGVmdCk7CiAg
ICAgfSk7CiAKICAgICBvbihkLnNjcm9sbGVyLCAibW91c2V3aGVlbCIsIGZ1bmN0aW9uKGUpe29u
U2Nyb2xsV2hlZWwoY20sIGUpO30pOwpAQCAtMTQ0Nyw3ICsxNDkwLDcgQEAgd2luZG93LkNvZGVN
aXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBmb3IgKHZhciBwID0gZC53cmFwcGVyLnBhcmVu
dE5vZGU7IHAgJiYgcCAhPSBkb2N1bWVudC5ib2R5OyBwID0gcC5wYXJlbnROb2RlKSB7fQogICAg
ICAgaWYgKHApIHNldFRpbWVvdXQodW5yZWdpc3RlciwgNTAwMCk7CiAgICAgICBlbHNlIG9mZih3
aW5kb3csICJyZXNpemUiLCBvblJlc2l6ZSk7Ci0gICAgfSAgICAKKyAgICB9CiAgICAgc2V0VGlt
ZW91dCh1bnJlZ2lzdGVyLCA1MDAwKTsKIAogICAgIG9uKGQuaW5wdXQsICJrZXl1cCIsIG9wZXJh
dGlvbihjbSwgZnVuY3Rpb24oZSkgewpAQCAtMTQ3Miw3ICsxNTE1LDcgQEAgd2luZG93LkNvZGVN
aXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfQogICAgIG9uKGQuc2Nyb2xsZXIsICJwYXN0ZSIs
IGZ1bmN0aW9uKGUpewogICAgICAgaWYgKGV2ZW50SW5XaWRnZXQoZCwgZSkpIHJldHVybjsKLSAg
ICAgIGZvY3VzSW5wdXQoY20pOyAKKyAgICAgIGZvY3VzSW5wdXQoY20pOwogICAgICAgZmFzdFBv
bGwoY20pOwogICAgIH0pOwogICAgIG9uKGQuaW5wdXQsICJwYXN0ZSIsIGZ1bmN0aW9uKCkgewpA
QCAtMTY3NCw3ICsxNzE3LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAg
ICAgICAgICAgdGV4dFtpXSA9IHJlYWRlci5yZXN1bHQ7CiAgICAgICAgICAgaWYgKCsrcmVhZCA9
PSBuKSB7CiAgICAgICAgICAgICBwb3MgPSBjbGlwUG9zKGNtLmRvYywgcG9zKTsKLSAgICAgICAg
ICAgIHJlcGxhY2VSYW5nZShjbS5kb2MsIHRleHQuam9pbigiIiksIHBvcywgImFyb3VuZCIsICJw
YXN0ZSIpOworICAgICAgICAgICAgbWFrZUNoYW5nZShjbS5kb2MsIHtmcm9tOiBwb3MsIHRvOiBw
b3MsIHRleHQ6IHNwbGl0TGluZXModGV4dC5qb2luKCJcbiIpKSwgb3JpZ2luOiAicGFzdGUifSwg
ImFyb3VuZCIpOwogICAgICAgICAgIH0KICAgICAgICAgfTsKICAgICAgICAgcmVhZGVyLnJlYWRB
c1RleHQoZmlsZSk7CkBAIC0xNzMwLDEzICsxNzczLDEzIEBAIHdpbmRvdy5Db2RlTWlycm9yID0g
KGZ1bmN0aW9uKCkgewogCiAgIGZ1bmN0aW9uIG9uRHJhZ1N0YXJ0KGNtLCBlKSB7CiAgICAgaWYg
KGV2ZW50SW5XaWRnZXQoY20uZGlzcGxheSwgZSkpIHJldHVybjsKLSAgICAKKwogICAgIHZhciB0
eHQgPSBjbS5nZXRTZWxlY3Rpb24oKTsKICAgICBlLmRhdGFUcmFuc2Zlci5zZXREYXRhKCJUZXh0
IiwgdHh0KTsKIAogICAgIC8vIFVzZSBkdW1teSBpbWFnZSBpbnN0ZWFkIG9mIGRlZmF1bHQgYnJv
d3NlcnMgaW1hZ2UuCiAgICAgLy8gUmVjZW50IFNhZmFyaSAofjYuMC4yKSBoYXZlIGEgdGVuZGVu
Y3kgdG8gc2VnZmF1bHQgd2hlbiB0aGlzIGhhcHBlbnMsIHNvIHdlIGRvbid0IGRvIGl0IHRoZXJl
LgotICAgIGlmIChlLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UgJiYgIXNhZmFyaSkgeworICAg
IGlmIChlLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UpIHsKICAgICAgIHZhciBpbWcgPSBlbHQo
ImltZyIsIG51bGwsIG51bGwsICJwb3NpdGlvbjogZml4ZWQ7IGxlZnQ6IDA7IHRvcDogMDsiKTsK
ICAgICAgIGlmIChvcGVyYSkgewogICAgICAgICBpbWcud2lkdGggPSBpbWcuaGVpZ2h0ID0gMTsK
QEAgLTE3NDQsNiArMTc4NywxNSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsK
ICAgICAgICAgLy8gRm9yY2UgYSByZWxheW91dCwgb3IgT3BlcmEgd29uJ3QgdXNlIG91ciBpbWFn
ZSBmb3Igc29tZSBvYnNjdXJlIHJlYXNvbgogICAgICAgICBpbWcuX3RvcCA9IGltZy5vZmZzZXRU
b3A7CiAgICAgICB9CisgICAgICBpZiAoc2FmYXJpKSB7CisgICAgICAgIGlmIChjbS5kaXNwbGF5
LmRyYWdJbWcpIHsKKyAgICAgICAgICBpbWcgPSBjbS5kaXNwbGF5LmRyYWdJbWc7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgY20uZGlzcGxheS5kcmFnSW1nID0gaW1nOworICAgICAgICAg
IGltZy5zcmMgPSAiZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFBQUFBQ0g1QkFF
S0FBRUFMQUFBQUFBQkFBRUFBQUlDVEFFQU93PT0iOworICAgICAgICAgIGNtLmRpc3BsYXkud3Jh
cHBlci5hcHBlbmRDaGlsZChpbWcpOworICAgICAgICB9CisgICAgICB9CiAgICAgICBlLmRhdGFU
cmFuc2Zlci5zZXREcmFnSW1hZ2UoaW1nLCAwLCAwKTsKICAgICAgIGlmIChvcGVyYSkgaW1nLnBh
cmVudE5vZGUucmVtb3ZlQ2hpbGQoaW1nKTsKICAgICB9CkBAIC0yMDA1LDcgKzIwNTcsNyBAQCB3
aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIGlmIChpZV9sdDkpIGRpc3Bs
YXkuc2Nyb2xsYmFyVi5zY3JvbGxUb3AgPSBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCA9IHNj
cm9sbFBvczsKICAgICAgIHNsb3dQb2xsKGNtKTsKIAotICAgICAgLy8gVHJ5IHRvIGRldGVjdCB0
aGUgdXNlciBjaG9vc2luZyBzZWxlY3QtYWxsIAorICAgICAgLy8gVHJ5IHRvIGRldGVjdCB0aGUg
dXNlciBjaG9vc2luZyBzZWxlY3QtYWxsCiAgICAgICBpZiAoZGlzcGxheS5pbnB1dC5zZWxlY3Rp
b25TdGFydCAhPSBudWxsICYmICghaWUgfHwgaWVfbHQ5KSkgewogICAgICAgICBjbGVhclRpbWVv
dXQoZGV0ZWN0aW5nU2VsZWN0QWxsKTsKICAgICAgICAgdmFyIGV4dHZhbCA9IGRpc3BsYXkuaW5w
dXQudmFsdWUgPSAiICIgKyAocG9zRXEoc2VsLmZyb20sIHNlbC50bykgPyAiIiA6IGRpc3BsYXku
aW5wdXQudmFsdWUpLCBpID0gMDsKQEAgLTIwNjMsNyArMjExNSw3IEBAIHdpbmRvdy5Db2RlTWly
cm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICBoZWFkOiBjbGlwUG9zdENoYW5nZShk
b2MsIGNoYW5nZSwgaGludC5oZWFkKX07CiAKICAgICBpZiAoaGludCA9PSAic3RhcnQiKSByZXR1
cm4ge2FuY2hvcjogY2hhbmdlLmZyb20sIGhlYWQ6IGNoYW5nZS5mcm9tfTsKLSAgICAKKwogICAg
IHZhciBlbmQgPSBjaGFuZ2VFbmQoY2hhbmdlKTsKICAgICBpZiAoaGludCA9PSAiYXJvdW5kIikg
cmV0dXJuIHthbmNob3I6IGNoYW5nZS5mcm9tLCBoZWFkOiBlbmR9OwogICAgIGlmIChoaW50ID09
ICJlbmQiKSByZXR1cm4ge2FuY2hvcjogZW5kLCBoZWFkOiBlbmR9OwpAQCAtMjIwNSw2ICsyMjU3
LDggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAg
dGV4dDogW2NoYW5nZS50ZXh0WzBdXSwgb3JpZ2luOiBjaGFuZ2Uub3JpZ2lufTsKICAgICB9CiAK
KyAgICBjaGFuZ2UucmVtb3ZlZCA9IGdldEJldHdlZW4oZG9jLCBjaGFuZ2UuZnJvbSwgY2hhbmdl
LnRvKTsKKwogICAgIGlmICghc2VsQWZ0ZXIpIHNlbEFmdGVyID0gY29tcHV0ZVNlbEFmdGVyQ2hh
bmdlKGRvYywgY2hhbmdlLCBudWxsKTsKICAgICBpZiAoZG9jLmNtKSBtYWtlQ2hhbmdlU2luZ2xl
RG9jSW5FZGl0b3IoZG9jLmNtLCBjaGFuZ2UsIHNwYW5zLCBzZWxBZnRlcik7CiAgICAgZWxzZSB1
cGRhdGVEb2MoZG9jLCBjaGFuZ2UsIHNwYW5zLCBzZWxBZnRlcik7CkBAIC0yMjQ2LDggKzIzMDAs
MTIgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgdmFyIGxlbmRpZmYg
PSBjaGFuZ2UudGV4dC5sZW5ndGggLSAodG8ubGluZSAtIGZyb20ubGluZSkgLSAxOwogICAgIC8v
IFJlbWVtYmVyIHRoYXQgdGhlc2UgbGluZXMgY2hhbmdlZCwgZm9yIHVwZGF0aW5nIHRoZSBkaXNw
bGF5CiAgICAgcmVnQ2hhbmdlKGNtLCBmcm9tLmxpbmUsIHRvLmxpbmUgKyAxLCBsZW5kaWZmKTsK
KwogICAgIGlmIChoYXNIYW5kbGVyKGNtLCAiY2hhbmdlIikpIHsKLSAgICAgIHZhciBjaGFuZ2VP
YmogPSB7ZnJvbTogZnJvbSwgdG86IHRvLCB0ZXh0OiBjaGFuZ2UudGV4dCwgb3JpZ2luOiBjaGFu
Z2Uub3JpZ2lufTsKKyAgICAgIHZhciBjaGFuZ2VPYmogPSB7ZnJvbTogZnJvbSwgdG86IHRvLAor
ICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBjaGFuZ2UudGV4dCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgcmVtb3ZlZDogY2hhbmdlLnJlbW92ZWQsCisgICAgICAgICAgICAgICAgICAgICAg
IG9yaWdpbjogY2hhbmdlLm9yaWdpbn07CiAgICAgICBpZiAoY20uY3VyT3AudGV4dENoYW5nZWQp
IHsKICAgICAgICAgZm9yICh2YXIgY3VyID0gY20uY3VyT3AudGV4dENoYW5nZWQ7IGN1ci5uZXh0
OyBjdXIgPSBjdXIubmV4dCkge30KICAgICAgICAgY3VyLm5leHQgPSBjaGFuZ2VPYmo7CkBAIC0y
NDA3LDkgKzI0NjUsOSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgZnVu
Y3Rpb24gc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoY20pIHsKICAgICB2YXIgY29vcmRzID0gc2Nyb2xs
UG9zSW50b1ZpZXcoY20sIGNtLmRvYy5zZWwuaGVhZCk7CiAgICAgaWYgKCFjbS5zdGF0ZS5mb2N1
c2VkKSByZXR1cm47Ci0gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBib3ggPSBnZXRSZWN0
KGRpc3BsYXkuc2l6ZXIpLCBkb1Njcm9sbCA9IG51bGw7Ci0gICAgaWYgKGNvb3Jkcy50b3AgKyBi
b3gudG9wIDwgMCkgZG9TY3JvbGwgPSB0cnVlOwotICAgIGVsc2UgaWYgKGNvb3Jkcy5ib3R0b20g
KyBib3gudG9wID4gKHdpbmRvdy5pbm5lckhlaWdodCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1l
bnQuY2xpZW50SGVpZ2h0KSkgZG9TY3JvbGwgPSBmYWxzZTsKKyAgICB2YXIgZGlzcGxheSA9IGNt
LmRpc3BsYXksIGJveCA9IGdldFJlY3QoZGlzcGxheS5zaXplciksIGRvU2Nyb2xsID0gbnVsbCwg
cFRvcCA9IHBhZGRpbmdUb3AoY20uZGlzcGxheSk7CisgICAgaWYgKGNvb3Jkcy50b3AgKyBwVG9w
ICsgYm94LnRvcCA8IDApIGRvU2Nyb2xsID0gdHJ1ZTsKKyAgICBlbHNlIGlmIChjb29yZHMuYm90
dG9tICsgcFRvcCArIGJveC50b3AgPiAod2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRv
Y3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpKSBkb1Njcm9sbCA9IGZhbHNlOwogICAgIGlmIChk
b1Njcm9sbCAhPSBudWxsICYmICFwaGFudG9tKSB7CiAgICAgICB2YXIgaGlkZGVuID0gZGlzcGxh
eS5jdXJzb3Iuc3R5bGUuZGlzcGxheSA9PSAibm9uZSI7CiAgICAgICBpZiAoaGlkZGVuKSB7CkBA
IC0yNDIyLDEwICsyNDgwLDExIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewog
ICAgIH0KICAgfQogCi0gIGZ1bmN0aW9uIHNjcm9sbFBvc0ludG9WaWV3KGNtLCBwb3MpIHsKKyAg
ZnVuY3Rpb24gc2Nyb2xsUG9zSW50b1ZpZXcoY20sIHBvcywgbWFyZ2luKSB7CisgICAgaWYgKG1h
cmdpbiA9PSBudWxsKSBtYXJnaW4gPSAwOwogICAgIGZvciAoOzspIHsKICAgICAgIHZhciBjaGFu
Z2VkID0gZmFsc2UsIGNvb3JkcyA9IGN1cnNvckNvb3JkcyhjbSwgcG9zKTsKLSAgICAgIHZhciBz
Y3JvbGxQb3MgPSBjYWxjdWxhdGVTY3JvbGxQb3MoY20sIGNvb3Jkcy5sZWZ0LCBjb29yZHMudG9w
LCBjb29yZHMubGVmdCwgY29vcmRzLmJvdHRvbSk7CisgICAgICB2YXIgc2Nyb2xsUG9zID0gY2Fs
Y3VsYXRlU2Nyb2xsUG9zKGNtLCBjb29yZHMubGVmdCwgY29vcmRzLnRvcCAtIG1hcmdpbiwgY29v
cmRzLmxlZnQsIGNvb3Jkcy5ib3R0b20gKyBtYXJnaW4pOwogICAgICAgdmFyIHN0YXJ0VG9wID0g
Y20uZG9jLnNjcm9sbFRvcCwgc3RhcnRMZWZ0ID0gY20uZG9jLnNjcm9sbExlZnQ7CiAgICAgICBp
ZiAoc2Nyb2xsUG9zLnNjcm9sbFRvcCAhPSBudWxsKSB7CiAgICAgICAgIHNldFNjcm9sbFRvcChj
bSwgc2Nyb2xsUG9zLnNjcm9sbFRvcCk7CkBAIC0yNDQ5LDcgKzI1MDgsNyBAQCB3aW5kb3cuQ29k
ZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIHB0
ID0gcGFkZGluZ1RvcChkaXNwbGF5KTsKICAgICB5MSArPSBwdDsgeTIgKz0gcHQ7CiAgICAgdmFy
IHNjcmVlbiA9IGRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0IC0gc2Nyb2xsZXJDdXRPZmYs
IHNjcmVlbnRvcCA9IGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wLCByZXN1bHQgPSB7fTsKLSAg
ICB2YXIgZG9jQm90dG9tID0gY20uZG9jLmhlaWdodCArIDIgKiBwdDsKKyAgICB2YXIgZG9jQm90
dG9tID0gY20uZG9jLmhlaWdodCArIHBhZGRpbmdWZXJ0KGRpc3BsYXkpOwogICAgIHZhciBhdFRv
cCA9IHkxIDwgcHQgKyAxMCwgYXRCb3R0b20gPSB5MiArIHB0ID4gZG9jQm90dG9tIC0gMTA7CiAg
ICAgaWYgKHkxIDwgc2NyZWVudG9wKSByZXN1bHQuc2Nyb2xsVG9wID0gYXRUb3AgPyAwIDogTWF0
aC5tYXgoMCwgeTEpOwogICAgIGVsc2UgaWYgKHkyID4gc2NyZWVudG9wICsgc2NyZWVuKSByZXN1
bHQuc2Nyb2xsVG9wID0gKGF0Qm90dG9tID8gZG9jQm90dG9tIDogeTIpIC0gc2NyZWVuOwpAQCAt
MjQ2Nyw2ICsyNTI2LDE3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAg
IHJldHVybiByZXN1bHQ7CiAgIH0KIAorICBmdW5jdGlvbiB1cGRhdGVTY3JvbGxQb3MoY20sIGxl
ZnQsIHRvcCkgeworICAgIGNtLmN1ck9wLnVwZGF0ZVNjcm9sbFBvcyA9IHtzY3JvbGxMZWZ0OiBs
ZWZ0LCBzY3JvbGxUb3A6IHRvcH07CisgIH0KKworICBmdW5jdGlvbiBhZGRUb1Njcm9sbFBvcyhj
bSwgbGVmdCwgdG9wKSB7CisgICAgdmFyIHBvcyA9IGNtLmN1ck9wLnVwZGF0ZVNjcm9sbFBvcyB8
fCAoY20uY3VyT3AudXBkYXRlU2Nyb2xsUG9zID0ge3Njcm9sbExlZnQ6IGNtLmRvYy5zY3JvbGxM
ZWZ0LCBzY3JvbGxUb3A6IGNtLmRvYy5zY3JvbGxUb3B9KTsKKyAgICB2YXIgc2Nyb2xsID0gY20u
ZGlzcGxheS5zY3JvbGxlcjsKKyAgICBwb3Muc2Nyb2xsVG9wID0gTWF0aC5tYXgoMCwgTWF0aC5t
aW4oc2Nyb2xsLnNjcm9sbEhlaWdodCAtIHNjcm9sbC5jbGllbnRIZWlnaHQsIHBvcy5zY3JvbGxU
b3AgKyB0b3ApKTsKKyAgICBwb3Muc2Nyb2xsTGVmdCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHNj
cm9sbC5zY3JvbGxXaWR0aCAtIHNjcm9sbC5jbGllbnRXaWR0aCwgcG9zLnNjcm9sbExlZnQgKyBs
ZWZ0KSk7CisgIH0KKwogICAvLyBBUEkgVVRJTElUSUVTCiAKICAgZnVuY3Rpb24gaW5kZW50TGlu
ZShjbSwgbiwgaG93LCBhZ2dyZXNzaXZlKSB7CkBAIC0yNTQwLDEzICsyNjEwLDIxIEBAIHdpbmRv
dy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogCiAgICAgaWYgKHVuaXQgPT0gImNoYXIiKSBt
b3ZlT25jZSgpOwogICAgIGVsc2UgaWYgKHVuaXQgPT0gImNvbHVtbiIpIG1vdmVPbmNlKHRydWUp
OwotICAgIGVsc2UgaWYgKHVuaXQgPT0gIndvcmQiKSB7Ci0gICAgICB2YXIgc2F3V29yZCA9IGZh
bHNlOwotICAgICAgZm9yICg7OykgewotICAgICAgICBpZiAoZGlyIDwgMCkgaWYgKCFtb3ZlT25j
ZSgpKSBicmVhazsKLSAgICAgICAgaWYgKGlzV29yZENoYXIobGluZU9iai50ZXh0LmNoYXJBdChj
aCkpKSBzYXdXb3JkID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAoc2F3V29yZCkge2lmIChkaXIg
PCAwKSB7ZGlyID0gMTsgbW92ZU9uY2UoKTt9IGJyZWFrO30KLSAgICAgICAgaWYgKGRpciA+IDAp
IGlmICghbW92ZU9uY2UoKSkgYnJlYWs7CisgICAgZWxzZSBpZiAodW5pdCA9PSAid29yZCIgfHwg
dW5pdCA9PSAiZ3JvdXAiKSB7CisgICAgICB2YXIgc2F3VHlwZSA9IG51bGwsIGdyb3VwID0gdW5p
dCA9PSAiZ3JvdXAiOworICAgICAgZm9yICh2YXIgZmlyc3QgPSB0cnVlOzsgZmlyc3QgPSBmYWxz
ZSkgeworICAgICAgICBpZiAoZGlyIDwgMCAmJiAhbW92ZU9uY2UoIWZpcnN0KSkgYnJlYWs7Cisg
ICAgICAgIHZhciBjdXIgPSBsaW5lT2JqLnRleHQuY2hhckF0KGNoKSB8fCAiXG4iOworICAgICAg
ICB2YXIgdHlwZSA9IGlzV29yZENoYXIoY3VyKSA/ICJ3IgorICAgICAgICAgIDogIWdyb3VwID8g
bnVsbAorICAgICAgICAgIDogL1xzLy50ZXN0KGN1cikgPyBudWxsCisgICAgICAgICAgOiAicCI7
CisgICAgICAgIGlmIChzYXdUeXBlICYmIHNhd1R5cGUgIT0gdHlwZSkgeworICAgICAgICAgIGlm
IChkaXIgPCAwKSB7ZGlyID0gMTsgbW92ZU9uY2UoKTt9CisgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHR5cGUpIHNhd1R5cGUgPSB0eXBlOworICAgICAgICBpZiAoZGly
ID4gMCAmJiAhbW92ZU9uY2UoIWZpcnN0KSkgYnJlYWs7CiAgICAgICB9CiAgICAgfQogICAgIHZh
ciByZXN1bHQgPSBza2lwQXRvbWljKGRvYywgUG9zKGxpbmUsIGNoKSwgZGlyLCB0cnVlKTsKQEAg
LTI1NTgsNyArMjYzNiw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAg
IHZhciBkb2MgPSBjbS5kb2MsIHggPSBwb3MubGVmdCwgeTsKICAgICBpZiAodW5pdCA9PSAicGFn
ZSIpIHsKICAgICAgIHZhciBwYWdlU2l6ZSA9IE1hdGgubWluKGNtLmRpc3BsYXkud3JhcHBlci5j
bGllbnRIZWlnaHQsIHdpbmRvdy5pbm5lckhlaWdodCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1l
bnQuY2xpZW50SGVpZ2h0KTsKLSAgICAgIHkgPSBwb3MudG9wICsgZGlyICogcGFnZVNpemU7Cisg
ICAgICB5ID0gcG9zLnRvcCArIGRpciAqIChwYWdlU2l6ZSAtIChkaXIgPCAwID8gMS41IDogLjUp
ICogdGV4dEhlaWdodChjbS5kaXNwbGF5KSk7CiAgICAgfSBlbHNlIGlmICh1bml0ID09ICJsaW5l
IikgewogICAgICAgeSA9IGRpciA+IDAgPyBwb3MuYm90dG9tICsgMyA6IHBvcy50b3AgLSAzOwog
ICAgIH0KQEAgLTI1NzYsOSArMjY1NCw5IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewogICAgIGlmIChsaW5lKSB7CiAgICAgICBpZiAocG9zLmFmdGVyID09PSBmYWxzZSB8fCBl
bmQgPT0gbGluZS5sZW5ndGgpIC0tc3RhcnQ7IGVsc2UgKytlbmQ7CiAgICAgICB2YXIgc3RhcnRD
aGFyID0gbGluZS5jaGFyQXQoc3RhcnQpOwotICAgICAgdmFyIGNoZWNrID0gaXNXb3JkQ2hhcihz
dGFydENoYXIpID8gaXNXb3JkQ2hhciA6Ci0gICAgICAgIC9ccy8udGVzdChzdGFydENoYXIpID8g
ZnVuY3Rpb24oY2gpIHtyZXR1cm4gL1xzLy50ZXN0KGNoKTt9IDoKLSAgICAgIGZ1bmN0aW9uKGNo
KSB7cmV0dXJuICEvXHMvLnRlc3QoY2gpICYmICFpc1dvcmRDaGFyKGNoKTt9OworICAgICAgdmFy
IGNoZWNrID0gaXNXb3JkQ2hhcihzdGFydENoYXIpID8gaXNXb3JkQ2hhcgorICAgICAgICA6IC9c
cy8udGVzdChzdGFydENoYXIpID8gZnVuY3Rpb24oY2gpIHtyZXR1cm4gL1xzLy50ZXN0KGNoKTt9
CisgICAgICAgIDogZnVuY3Rpb24oY2gpIHtyZXR1cm4gIS9ccy8udGVzdChjaCkgJiYgIWlzV29y
ZENoYXIoY2gpO307CiAgICAgICB3aGlsZSAoc3RhcnQgPiAwICYmIGNoZWNrKGxpbmUuY2hhckF0
KHN0YXJ0IC0gMSkpKSAtLXN0YXJ0OwogICAgICAgd2hpbGUgKGVuZCA8IGxpbmUubGVuZ3RoICYm
IGNoZWNrKGxpbmUuY2hhckF0KGVuZCkpKSArK2VuZDsKICAgICB9CkBAIC0yNjkxLDE0ICsyNzY5
LDEzIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgcmV0dXJuIGNo
YXJDb29yZHModGhpcywgY2xpcFBvcyh0aGlzLmRvYywgcG9zKSwgbW9kZSB8fCAicGFnZSIpOwog
ICAgIH0sCiAKLSAgICBjb29yZHNDaGFyOiBmdW5jdGlvbihjb29yZHMpIHsKLSAgICAgIHZhciBv
ZmYgPSBnZXRSZWN0KHRoaXMuZGlzcGxheS5saW5lU3BhY2UpOwotICAgICAgdmFyIHNjcm9sbFkg
PSB3aW5kb3cucGFnZVlPZmZzZXQgfHwgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCBkb2N1
bWVudC5ib2R5KS5zY3JvbGxUb3A7Ci0gICAgICB2YXIgc2Nyb2xsWCA9IHdpbmRvdy5wYWdlWE9m
ZnNldCB8fCAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IGRvY3VtZW50LmJvZHkpLnNjcm9s
bExlZnQ7Ci0gICAgICByZXR1cm4gY29vcmRzQ2hhcih0aGlzLCBjb29yZHMubGVmdCAtIG9mZi5s
ZWZ0IC0gc2Nyb2xsWCwgY29vcmRzLnRvcCAtIG9mZi50b3AgLSBzY3JvbGxZKTsKKyAgICBjb29y
ZHNDaGFyOiBmdW5jdGlvbihjb29yZHMsIG1vZGUpIHsKKyAgICAgIGNvb3JkcyA9IGZyb21Db29y
ZFN5c3RlbSh0aGlzLCBjb29yZHMsIG1vZGUgfHwgInBhZ2UiKTsKKyAgICAgIHJldHVybiBjb29y
ZHNDaGFyKHRoaXMsIGNvb3Jkcy5sZWZ0LCBjb29yZHMudG9wKTsKICAgICB9LAogCiAgICAgZGVm
YXVsdFRleHRIZWlnaHQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGV4dEhlaWdodCh0aGlzLmRpc3Bs
YXkpOyB9LAorICAgIGRlZmF1bHRDaGFyV2lkdGg6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY2hhcldp
ZHRoKHRoaXMuZGlzcGxheSk7IH0sCiAKICAgICBzZXRHdXR0ZXJNYXJrZXI6IG9wZXJhdGlvbihu
dWxsLCBmdW5jdGlvbihsaW5lLCBndXR0ZXJJRCwgdmFsdWUpIHsKICAgICAgIHJldHVybiBjaGFu
Z2VMaW5lKHRoaXMsIGxpbmUsIGZ1bmN0aW9uKGxpbmUpIHsKQEAgLTI4NTEsOCArMjkyOCw3IEBA
IHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgaWYgKHNlbC5nb2FsQ29s
dW1uICE9IG51bGwpIHBvcy5sZWZ0ID0gc2VsLmdvYWxDb2x1bW47CiAgICAgICB2YXIgdGFyZ2V0
ID0gZmluZFBvc1YodGhpcywgcG9zLCBkaXIsIHVuaXQpOwogCi0gICAgICBpZiAodW5pdCA9PSAi
cGFnZSIpCi0gICAgICAgIHRoaXMuZGlzcGxheS5zY3JvbGxiYXJWLnNjcm9sbFRvcCArPSBjaGFy
Q29vcmRzKHRoaXMsIHRhcmdldCwgImRpdiIpLnRvcCAtIHBvcy50b3A7CisgICAgICBpZiAodW5p
dCA9PSAicGFnZSIpIGFkZFRvU2Nyb2xsUG9zKHRoaXMsIDAsIGNoYXJDb29yZHModGhpcywgdGFy
Z2V0LCAiZGl2IikudG9wIC0gcG9zLnRvcCk7CiAgICAgICBleHRlbmRTZWxlY3Rpb24odGhpcy5k
b2MsIHRhcmdldCwgdGFyZ2V0LCBkaXIpOwogICAgICAgc2VsLmdvYWxDb2x1bW4gPSBwb3MubGVm
dDsKICAgICB9KSwKQEAgLTI4NjMsOSArMjkzOSwxMCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChm
dW5jdGlvbigpIHsKICAgICAgIGVsc2UKICAgICAgICAgdGhpcy5kaXNwbGF5LmN1cnNvci5jbGFz
c05hbWUgPSB0aGlzLmRpc3BsYXkuY3Vyc29yLmNsYXNzTmFtZS5yZXBsYWNlKCIgQ29kZU1pcnJv
ci1vdmVyd3JpdGUiLCAiIik7CiAgICAgfSwKKyAgICBoYXNGb2N1czogZnVuY3Rpb24oKSB7IHJl
dHVybiB0aGlzLnN0YXRlLmZvY3VzZWQ7IH0sCiAKICAgICBzY3JvbGxUbzogb3BlcmF0aW9uKG51
bGwsIGZ1bmN0aW9uKHgsIHkpIHsKLSAgICAgIHRoaXMuY3VyT3AudXBkYXRlU2Nyb2xsUG9zID0g
e3Njcm9sbExlZnQ6IHgsIHNjcm9sbFRvcDogeX07CisgICAgICB1cGRhdGVTY3JvbGxQb3ModGhp
cywgeCwgeSk7CiAgICAgfSksCiAgICAgZ2V0U2Nyb2xsSW5mbzogZnVuY3Rpb24oKSB7CiAgICAg
ICB2YXIgc2Nyb2xsZXIgPSB0aGlzLmRpc3BsYXkuc2Nyb2xsZXIsIGNvID0gc2Nyb2xsZXJDdXRP
ZmY7CkBAIC0yODc0LDEzICsyOTUxLDEzIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewogICAgICAgICAgICAgICBjbGllbnRIZWlnaHQ6IHNjcm9sbGVyLmNsaWVudEhlaWdodCAt
IGNvLCBjbGllbnRXaWR0aDogc2Nyb2xsZXIuY2xpZW50V2lkdGggLSBjb307CiAgICAgfSwKIAot
ICAgIHNjcm9sbEludG9WaWV3OiBmdW5jdGlvbihwb3MpIHsKKyAgICBzY3JvbGxJbnRvVmlldzog
ZnVuY3Rpb24ocG9zLCBtYXJnaW4pIHsKICAgICAgIGlmICh0eXBlb2YgcG9zID09ICJudW1iZXIi
KSBwb3MgPSBQb3MocG9zLCAwKTsKICAgICAgIGlmICghcG9zIHx8IHBvcy5saW5lICE9IG51bGwp
IHsKICAgICAgICAgcG9zID0gcG9zID8gY2xpcFBvcyh0aGlzLmRvYywgcG9zKSA6IHRoaXMuZG9j
LnNlbC5oZWFkOwotICAgICAgICBzY3JvbGxQb3NJbnRvVmlldyh0aGlzLCBwb3MpOworICAgICAg
ICBzY3JvbGxQb3NJbnRvVmlldyh0aGlzLCBwb3MsIG1hcmdpbik7CiAgICAgICB9IGVsc2Ugewot
ICAgICAgICBzY3JvbGxJbnRvVmlldyh0aGlzLCBwb3MubGVmdCwgcG9zLnRvcCwgcG9zLnJpZ2h0
LCBwb3MuYm90dG9tKTsKKyAgICAgICAgc2Nyb2xsSW50b1ZpZXcodGhpcywgcG9zLmxlZnQsIHBv
cy50b3AgLSBtYXJnaW4sIHBvcy5yaWdodCwgcG9zLmJvdHRvbSArIG1hcmdpbik7CiAgICAgICB9
CiAgICAgfSwKIApAQCAtMjkwMCw3ICsyOTc3LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVu
Y3Rpb24oKSB7CiAKICAgICByZWZyZXNoOiBvcGVyYXRpb24obnVsbCwgZnVuY3Rpb24oKSB7CiAg
ICAgICBjbGVhckNhY2hlcyh0aGlzKTsKLSAgICAgIHRoaXMuY3VyT3AudXBkYXRlU2Nyb2xsUG9z
ID0ge3Njcm9sbFRvcDogdGhpcy5kb2Muc2Nyb2xsVG9wLCBzY3JvbGxMZWZ0OiB0aGlzLmRvYy5z
Y3JvbGxMZWZ0fTsKKyAgICAgIHVwZGF0ZVNjcm9sbFBvcyh0aGlzLCB0aGlzLmRvYy5zY3JvbGxM
ZWZ0LCB0aGlzLmRvYy5zY3JvbGxUb3ApOwogICAgICAgcmVnQ2hhbmdlKHRoaXMpOwogICAgIH0p
LAogCkBAIC0yOTA5LDcgKzI5ODYsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigp
IHsKICAgICAgIG9sZC5jbSA9IG51bGw7CiAgICAgICBhdHRhY2hEb2ModGhpcywgZG9jKTsKICAg
ICAgIGNsZWFyQ2FjaGVzKHRoaXMpOwotICAgICAgdGhpcy5jdXJPcC51cGRhdGVTY3JvbGxQb3Mg
PSB7c2Nyb2xsVG9wOiBkb2Muc2Nyb2xsVG9wLCBzY3JvbGxMZWZ0OiBkb2Muc2Nyb2xsTGVmdH07
CisgICAgICB1cGRhdGVTY3JvbGxQb3ModGhpcywgZG9jLnNjcm9sbExlZnQsIGRvYy5zY3JvbGxU
b3ApOwogICAgICAgcmV0dXJuIG9sZDsKICAgICB9KSwKIApAQCAtMjk4MSw3ICszMDU4LDcgQEAg
d2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIG9wdGlvbigiZmlyc3RMaW5lTnVt
YmVyIiwgMSwgZ3V0dGVyc0NoYW5nZWQsIHRydWUpOwogICBvcHRpb24oImxpbmVOdW1iZXJGb3Jt
YXR0ZXIiLCBmdW5jdGlvbihpbnRlZ2VyKSB7cmV0dXJuIGludGVnZXI7fSwgZ3V0dGVyc0NoYW5n
ZWQsIHRydWUpOwogICBvcHRpb24oInNob3dDdXJzb3JXaGVuU2VsZWN0aW5nIiwgZmFsc2UsIHVw
ZGF0ZVNlbGVjdGlvbiwgdHJ1ZSk7Ci0gIAorCiAgIG9wdGlvbigicmVhZE9ubHkiLCBmYWxzZSwg
ZnVuY3Rpb24oY20sIHZhbCkgewogICAgIGlmICh2YWwgPT0gIm5vY3Vyc29yIikge29uQmx1cihj
bSk7IGNtLmRpc3BsYXkuaW5wdXQuYmx1cigpO30KICAgICBlbHNlIGlmICghdmFsKSByZXNldElu
cHV0KGNtLCB0cnVlKTsKQEAgLTMxMzMsNiArMzIxMCwxNCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9
IChmdW5jdGlvbigpIHsKICAgICBnb0xpbmVFbmQ6IGZ1bmN0aW9uKGNtKSB7CiAgICAgICBjbS5l
eHRlbmRTZWxlY3Rpb24obGluZUVuZChjbSwgY20uZ2V0Q3Vyc29yKCkubGluZSkpOwogICAgIH0s
CisgICAgZ29MaW5lUmlnaHQ6IGZ1bmN0aW9uKGNtKSB7CisgICAgICB2YXIgdG9wID0gY20uY2hh
ckNvb3JkcyhjbS5nZXRDdXJzb3IoKSwgImRpdiIpLnRvcCArIDU7CisgICAgICBjbS5leHRlbmRT
ZWxlY3Rpb24oY20uY29vcmRzQ2hhcih7bGVmdDogY20uZGlzcGxheS5saW5lRGl2Lm9mZnNldFdp
ZHRoICsgMTAwLCB0b3A6IHRvcH0sICJkaXYiKSk7CisgICAgfSwKKyAgICBnb0xpbmVMZWZ0OiBm
dW5jdGlvbihjbSkgeworICAgICAgdmFyIHRvcCA9IGNtLmNoYXJDb29yZHMoY20uZ2V0Q3Vyc29y
KCksICJkaXYiKS50b3AgKyA1OworICAgICAgY20uZXh0ZW5kU2VsZWN0aW9uKGNtLmNvb3Jkc0No
YXIoe2xlZnQ6IDAsIHRvcDogdG9wfSwgImRpdiIpKTsKKyAgICB9LAogICAgIGdvTGluZVVwOiBm
dW5jdGlvbihjbSkge2NtLm1vdmVWKC0xLCAibGluZSIpO30sCiAgICAgZ29MaW5lRG93bjogZnVu
Y3Rpb24oY20pIHtjbS5tb3ZlVigxLCAibGluZSIpO30sCiAgICAgZ29QYWdlVXA6IGZ1bmN0aW9u
KGNtKSB7Y20ubW92ZVYoLTEsICJwYWdlIik7fSwKQEAgLTMxNDIsMTEgKzMyMjcsMTUgQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgZ29Db2x1bW5MZWZ0OiBmdW5jdGlv
bihjbSkge2NtLm1vdmVIKC0xLCAiY29sdW1uIik7fSwKICAgICBnb0NvbHVtblJpZ2h0OiBmdW5j
dGlvbihjbSkge2NtLm1vdmVIKDEsICJjb2x1bW4iKTt9LAogICAgIGdvV29yZExlZnQ6IGZ1bmN0
aW9uKGNtKSB7Y20ubW92ZUgoLTEsICJ3b3JkIik7fSwKKyAgICBnb0dyb3VwUmlnaHQ6IGZ1bmN0
aW9uKGNtKSB7Y20ubW92ZUgoMSwgImdyb3VwIik7fSwKKyAgICBnb0dyb3VwTGVmdDogZnVuY3Rp
b24oY20pIHtjbS5tb3ZlSCgtMSwgImdyb3VwIik7fSwKICAgICBnb1dvcmRSaWdodDogZnVuY3Rp
b24oY20pIHtjbS5tb3ZlSCgxLCAid29yZCIpO30sCiAgICAgZGVsQ2hhckJlZm9yZTogZnVuY3Rp
b24oY20pIHtjbS5kZWxldGVIKC0xLCAiY2hhciIpO30sCiAgICAgZGVsQ2hhckFmdGVyOiBmdW5j
dGlvbihjbSkge2NtLmRlbGV0ZUgoMSwgImNoYXIiKTt9LAogICAgIGRlbFdvcmRCZWZvcmU6IGZ1
bmN0aW9uKGNtKSB7Y20uZGVsZXRlSCgtMSwgIndvcmQiKTt9LAogICAgIGRlbFdvcmRBZnRlcjog
ZnVuY3Rpb24oY20pIHtjbS5kZWxldGVIKDEsICJ3b3JkIik7fSwKKyAgICBkZWxHcm91cEJlZm9y
ZTogZnVuY3Rpb24oY20pIHtjbS5kZWxldGVIKC0xLCAiZ3JvdXAiKTt9LAorICAgIGRlbEdyb3Vw
QWZ0ZXI6IGZ1bmN0aW9uKGNtKSB7Y20uZGVsZXRlSCgxLCAiZ3JvdXAiKTt9LAogICAgIGluZGVu
dEF1dG86IGZ1bmN0aW9uKGNtKSB7Y20uaW5kZW50U2VsZWN0aW9uKCJzbWFydCIpO30sCiAgICAg
aW5kZW50TW9yZTogZnVuY3Rpb24oY20pIHtjbS5pbmRlbnRTZWxlY3Rpb24oImFkZCIpO30sCiAg
ICAgaW5kZW50TGVzczogZnVuY3Rpb24oY20pIHtjbS5pbmRlbnRTZWxlY3Rpb24oInN1YnRyYWN0
Iik7fSwKQEAgLTMxODQsMTcgKzMyNzMsMTcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rp
b24oKSB7CiAgIGtleU1hcC5wY0RlZmF1bHQgPSB7CiAgICAgIkN0cmwtQSI6ICJzZWxlY3RBbGwi
LCAiQ3RybC1EIjogImRlbGV0ZUxpbmUiLCAiQ3RybC1aIjogInVuZG8iLCAiU2hpZnQtQ3RybC1a
IjogInJlZG8iLCAiQ3RybC1ZIjogInJlZG8iLAogICAgICJDdHJsLUhvbWUiOiAiZ29Eb2NTdGFy
dCIsICJBbHQtVXAiOiAiZ29Eb2NTdGFydCIsICJDdHJsLUVuZCI6ICJnb0RvY0VuZCIsICJDdHJs
LURvd24iOiAiZ29Eb2NFbmQiLAotICAgICJDdHJsLUxlZnQiOiAiZ29Xb3JkTGVmdCIsICJDdHJs
LVJpZ2h0IjogImdvV29yZFJpZ2h0IiwgIkFsdC1MZWZ0IjogImdvTGluZVN0YXJ0IiwgIkFsdC1S
aWdodCI6ICJnb0xpbmVFbmQiLAotICAgICJDdHJsLUJhY2tzcGFjZSI6ICJkZWxXb3JkQmVmb3Jl
IiwgIkN0cmwtRGVsZXRlIjogImRlbFdvcmRBZnRlciIsICJDdHJsLVMiOiAic2F2ZSIsICJDdHJs
LUYiOiAiZmluZCIsCisgICAgIkN0cmwtTGVmdCI6ICJnb0dyb3VwTGVmdCIsICJDdHJsLVJpZ2h0
IjogImdvR3JvdXBSaWdodCIsICJBbHQtTGVmdCI6ICJnb0xpbmVTdGFydCIsICJBbHQtUmlnaHQi
OiAiZ29MaW5lRW5kIiwKKyAgICAiQ3RybC1CYWNrc3BhY2UiOiAiZGVsR3JvdXBCZWZvcmUiLCAi
Q3RybC1EZWxldGUiOiAiZGVsR3JvdXBBZnRlciIsICJDdHJsLVMiOiAic2F2ZSIsICJDdHJsLUYi
OiAiZmluZCIsCiAgICAgIkN0cmwtRyI6ICJmaW5kTmV4dCIsICJTaGlmdC1DdHJsLUciOiAiZmlu
ZFByZXYiLCAiU2hpZnQtQ3RybC1GIjogInJlcGxhY2UiLCAiU2hpZnQtQ3RybC1SIjogInJlcGxh
Y2VBbGwiLAogICAgICJDdHJsLVsiOiAiaW5kZW50TGVzcyIsICJDdHJsLV0iOiAiaW5kZW50TW9y
ZSIsCiAgICAgZmFsbHRocm91Z2g6ICJiYXNpYyIKICAgfTsKICAga2V5TWFwLm1hY0RlZmF1bHQg
PSB7CiAgICAgIkNtZC1BIjogInNlbGVjdEFsbCIsICJDbWQtRCI6ICJkZWxldGVMaW5lIiwgIkNt
ZC1aIjogInVuZG8iLCAiU2hpZnQtQ21kLVoiOiAicmVkbyIsICJDbWQtWSI6ICJyZWRvIiwKLSAg
ICAiQ21kLVVwIjogImdvRG9jU3RhcnQiLCAiQ21kLUVuZCI6ICJnb0RvY0VuZCIsICJDbWQtRG93
biI6ICJnb0RvY0VuZCIsICJBbHQtTGVmdCI6ICJnb1dvcmRMZWZ0IiwKLSAgICAiQWx0LVJpZ2h0
IjogImdvV29yZFJpZ2h0IiwgIkNtZC1MZWZ0IjogImdvTGluZVN0YXJ0IiwgIkNtZC1SaWdodCI6
ICJnb0xpbmVFbmQiLCAiQWx0LUJhY2tzcGFjZSI6ICJkZWxXb3JkQmVmb3JlIiwKLSAgICAiQ3Ry
bC1BbHQtQmFja3NwYWNlIjogImRlbFdvcmRBZnRlciIsICJBbHQtRGVsZXRlIjogImRlbFdvcmRB
ZnRlciIsICJDbWQtUyI6ICJzYXZlIiwgIkNtZC1GIjogImZpbmQiLAorICAgICJDbWQtVXAiOiAi
Z29Eb2NTdGFydCIsICJDbWQtRW5kIjogImdvRG9jRW5kIiwgIkNtZC1Eb3duIjogImdvRG9jRW5k
IiwgIkFsdC1MZWZ0IjogImdvR3JvdXBMZWZ0IiwKKyAgICAiQWx0LVJpZ2h0IjogImdvR3JvdXBS
aWdodCIsICJDbWQtTGVmdCI6ICJnb0xpbmVTdGFydCIsICJDbWQtUmlnaHQiOiAiZ29MaW5lRW5k
IiwgIkFsdC1CYWNrc3BhY2UiOiAiZGVsR3JvdXBCZWZvcmUiLAorICAgICJDdHJsLUFsdC1CYWNr
c3BhY2UiOiAiZGVsR3JvdXBBZnRlciIsICJBbHQtRGVsZXRlIjogImRlbEdyb3VwQWZ0ZXIiLCAi
Q21kLVMiOiAic2F2ZSIsICJDbWQtRiI6ICJmaW5kIiwKICAgICAiQ21kLUciOiAiZmluZE5leHQi
LCAiU2hpZnQtQ21kLUciOiAiZmluZFByZXYiLCAiQ21kLUFsdC1GIjogInJlcGxhY2UiLCAiU2hp
ZnQtQ21kLUFsdC1GIjogInJlcGxhY2VBbGwiLAogICAgICJDbWQtWyI6ICJpbmRlbnRMZXNzIiwg
IkNtZC1dIjogImluZGVudE1vcmUiLAogICAgIGZhbGx0aHJvdWdoOiBbImJhc2ljIiwgImVtYWNz
eSJdCkBAIC0zMjYyLDYgKzMzNTEsOCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigp
IHsKICAgICBvcHRpb25zLnZhbHVlID0gdGV4dGFyZWEudmFsdWU7CiAgICAgaWYgKCFvcHRpb25z
LnRhYmluZGV4ICYmIHRleHRhcmVhLnRhYmluZGV4KQogICAgICAgb3B0aW9ucy50YWJpbmRleCA9
IHRleHRhcmVhLnRhYmluZGV4OworICAgIGlmICghb3B0aW9ucy5wbGFjZWhvbGRlciAmJiB0ZXh0
YXJlYS5wbGFjZWhvbGRlcikKKyAgICAgIG9wdGlvbnMucGxhY2Vob2xkZXIgPSB0ZXh0YXJlYS5w
bGFjZWhvbGRlcjsKICAgICAvLyBTZXQgYXV0b2ZvY3VzIHRvIHRydWUgaWYgdGhpcyB0ZXh0YXJl
YSBpcyBmb2N1c2VkLCBvciBpZiBpdCBoYXMKICAgICAvLyBhdXRvZm9jdXMgYW5kIG5vIG90aGVy
IGVsZW1lbnQgaXMgZm9jdXNlZC4KICAgICBpZiAob3B0aW9ucy5hdXRvZm9jdXMgPT0gbnVsbCkg
ewpAQCAtMzI3NCwxNyArMzM2NSwxOSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigp
IHsKIAogICAgIGZ1bmN0aW9uIHNhdmUoKSB7dGV4dGFyZWEudmFsdWUgPSBjbS5nZXRWYWx1ZSgp
O30KICAgICBpZiAodGV4dGFyZWEuZm9ybSkgewotICAgICAgLy8gRGVwbG9yYWJsZSBoYWNrIHRv
IG1ha2UgdGhlIHN1Ym1pdCBtZXRob2QgZG8gdGhlIHJpZ2h0IHRoaW5nLgogICAgICAgb24odGV4
dGFyZWEuZm9ybSwgInN1Ym1pdCIsIHNhdmUpOwotICAgICAgdmFyIGZvcm0gPSB0ZXh0YXJlYS5m
b3JtLCByZWFsU3VibWl0ID0gZm9ybS5zdWJtaXQ7Ci0gICAgICB0cnkgewotICAgICAgICB2YXIg
d3JhcHBlZFN1Ym1pdCA9IGZvcm0uc3VibWl0ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgc2F2
ZSgpOwotICAgICAgICAgIGZvcm0uc3VibWl0ID0gcmVhbFN1Ym1pdDsKLSAgICAgICAgICBmb3Jt
LnN1Ym1pdCgpOwotICAgICAgICAgIGZvcm0uc3VibWl0ID0gd3JhcHBlZFN1Ym1pdDsKLSAgICAg
ICAgfTsKLSAgICAgIH0gY2F0Y2goZSkge30KKyAgICAgIC8vIERlcGxvcmFibGUgaGFjayB0byBt
YWtlIHRoZSBzdWJtaXQgbWV0aG9kIGRvIHRoZSByaWdodCB0aGluZy4KKyAgICAgIGlmICghb3B0
aW9ucy5sZWF2ZVN1Ym1pdE1ldGhvZEFsb25lKSB7CisgICAgICAgIHZhciBmb3JtID0gdGV4dGFy
ZWEuZm9ybSwgcmVhbFN1Ym1pdCA9IGZvcm0uc3VibWl0OworICAgICAgICB0cnkgeworICAgICAg
ICAgIHZhciB3cmFwcGVkU3VibWl0ID0gZm9ybS5zdWJtaXQgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgIHNhdmUoKTsKKyAgICAgICAgICAgIGZvcm0uc3VibWl0ID0gcmVhbFN1Ym1pdDsKKyAg
ICAgICAgICAgIGZvcm0uc3VibWl0KCk7CisgICAgICAgICAgICBmb3JtLnN1Ym1pdCA9IHdyYXBw
ZWRTdWJtaXQ7CisgICAgICAgICAgfTsKKyAgICAgICAgfSBjYXRjaChlKSB7fQorICAgICAgfQog
ICAgIH0KIAogICAgIHRleHRhcmVhLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CkBAIC0zMzE2LDYg
KzM0MDksNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB0aGlzLnBv
cyA9IHRoaXMuc3RhcnQgPSAwOwogICAgIHRoaXMuc3RyaW5nID0gc3RyaW5nOwogICAgIHRoaXMu
dGFiU2l6ZSA9IHRhYlNpemUgfHwgODsKKyAgICB0aGlzLmxhc3RDb2x1bW5Qb3MgPSB0aGlzLmxh
c3RDb2x1bW5WYWx1ZSA9IDA7CiAgIH0KIAogICBTdHJpbmdTdHJlYW0ucHJvdG90eXBlID0gewpA
QCAtMzM0OCwxMiArMzQ0MiwxOSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsK
ICAgICAgIGlmIChmb3VuZCA+IC0xKSB7dGhpcy5wb3MgPSBmb3VuZDsgcmV0dXJuIHRydWU7fQog
ICAgIH0sCiAgICAgYmFja1VwOiBmdW5jdGlvbihuKSB7dGhpcy5wb3MgLT0gbjt9LAotICAgIGNv
bHVtbjogZnVuY3Rpb24oKSB7cmV0dXJuIGNvdW50Q29sdW1uKHRoaXMuc3RyaW5nLCB0aGlzLnN0
YXJ0LCB0aGlzLnRhYlNpemUpO30sCisgICAgY29sdW1uOiBmdW5jdGlvbigpIHsKKyAgICAgIGlm
ICh0aGlzLmxhc3RDb2x1bW5Qb3MgPCB0aGlzLnN0YXJ0KSB7CisgICAgICAgIHRoaXMubGFzdENv
bHVtblZhbHVlID0gY291bnRDb2x1bW4odGhpcy5zdHJpbmcsIHRoaXMuc3RhcnQsIHRoaXMudGFi
U2l6ZSwgdGhpcy5sYXN0Q29sdW1uUG9zLCB0aGlzLmxhc3RDb2x1bW5WYWx1ZSk7CisgICAgICAg
IHRoaXMubGFzdENvbHVtblBvcyA9IHRoaXMuc3RhcnQ7CisgICAgICB9CisgICAgICByZXR1cm4g
dGhpcy5sYXN0Q29sdW1uVmFsdWU7CisgICAgfSwKICAgICBpbmRlbnRhdGlvbjogZnVuY3Rpb24o
KSB7cmV0dXJuIGNvdW50Q29sdW1uKHRoaXMuc3RyaW5nLCBudWxsLCB0aGlzLnRhYlNpemUpO30s
CiAgICAgbWF0Y2g6IGZ1bmN0aW9uKHBhdHRlcm4sIGNvbnN1bWUsIGNhc2VJbnNlbnNpdGl2ZSkg
ewogICAgICAgaWYgKHR5cGVvZiBwYXR0ZXJuID09ICJzdHJpbmciKSB7CiAgICAgICAgIHZhciBj
YXNlZCA9IGZ1bmN0aW9uKHN0cikge3JldHVybiBjYXNlSW5zZW5zaXRpdmUgPyBzdHIudG9Mb3dl
ckNhc2UoKSA6IHN0cjt9OwotICAgICAgICBpZiAoY2FzZWQodGhpcy5zdHJpbmcpLmluZGV4T2Yo
Y2FzZWQocGF0dGVybiksIHRoaXMucG9zKSA9PSB0aGlzLnBvcykgeworICAgICAgICB2YXIgc3Vi
c3RyID0gdGhpcy5zdHJpbmcuc3Vic3RyKHRoaXMucG9zLCBwYXR0ZXJuLmxlbmd0aCk7CisgICAg
ICAgIGlmIChjYXNlZChzdWJzdHIpID09IGNhc2VkKHBhdHRlcm4pKSB7CiAgICAgICAgICAgaWYg
KGNvbnN1bWUgIT09IGZhbHNlKSB0aGlzLnBvcyArPSBwYXR0ZXJuLmxlbmd0aDsKICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMzU0MCw3ICszNjQxLDkgQEAgd2luZG93LkNv
ZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgb3B0aW9ucyA9IGNvcHlPYmoob3B0aW9ucyk7
CiAgICAgb3B0aW9ucy5zaGFyZWQgPSBmYWxzZTsKICAgICB2YXIgbWFya2VycyA9IFttYXJrVGV4
dChkb2MsIGZyb20sIHRvLCBvcHRpb25zLCB0eXBlKV0sIHByaW1hcnkgPSBtYXJrZXJzWzBdOwor
ICAgIHZhciB3aWRnZXQgPSBvcHRpb25zLnJlcGxhY2VkV2l0aDsKICAgICBsaW5rZWREb2NzKGRv
YywgZnVuY3Rpb24oZG9jKSB7CisgICAgICBpZiAod2lkZ2V0KSBvcHRpb25zLnJlcGxhY2VkV2l0
aCA9IHdpZGdldC5jbG9uZU5vZGUodHJ1ZSk7CiAgICAgICBtYXJrZXJzLnB1c2gobWFya1RleHQo
ZG9jLCBjbGlwUG9zKGRvYywgZnJvbSksIGNsaXBQb3MoZG9jLCB0byksIG9wdGlvbnMsIHR5cGUp
KTsKICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jLmxpbmtlZC5sZW5ndGg7ICsraSkKICAg
ICAgICAgaWYgKGRvYy5saW5rZWRbaV0uaXNQYXJlbnQpIHJldHVybjsKQEAgLTM4MTQsOSArMzkx
Nyw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgaWYgKCFsaW5l
SXNIaWRkZW4oY20uZG9jLCBsaW5lKSB8fCB3aWRnZXQuc2hvd0lmSGlkZGVuKSB7CiAgICAgICAg
IHZhciBhYm92ZVZpc2libGUgPSBoZWlnaHRBdExpbmUoY20sIGxpbmUpIDwgY20uZGlzcGxheS5z
Y3JvbGxlci5zY3JvbGxUb3A7CiAgICAgICAgIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgbGluZS5o
ZWlnaHQgKyB3aWRnZXRIZWlnaHQod2lkZ2V0KSk7Ci0gICAgICAgIGlmIChhYm92ZVZpc2libGUp
Ci0gICAgICAgICAgY20uY3VyT3AudXBkYXRlU2Nyb2xsUG9zID0ge3Njcm9sbFRvcDogY20uZG9j
LnNjcm9sbFRvcCArIHdpZGdldC5oZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNjcm9sbExlZnQ6IGNtLmRvYy5zY3JvbGxMZWZ0fTsKKyAgICAgICAgaWYgKGFi
b3ZlVmlzaWJsZSkgYWRkVG9TY3JvbGxQb3MoY20sIDAsIHdpZGdldC5oZWlnaHQpOwogICAgICAg
fQogICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSk7CkBAIC0zODQzLDcgKzM5NDQsNiBAQCB3aW5k
b3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBhdHRhY2hNYXJrZWRTcGFucyhsaW5l
LCBtYXJrZWRTcGFucyk7CiAgICAgdmFyIGVzdEhlaWdodCA9IGVzdGltYXRlSGVpZ2h0ID8gZXN0
aW1hdGVIZWlnaHQobGluZSkgOiAxOwogICAgIGlmIChlc3RIZWlnaHQgIT0gbGluZS5oZWlnaHQp
IHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgZXN0SGVpZ2h0KTsKLSAgICBzaWduYWxMYXRlcihsaW5l
LCAiY2hhbmdlIik7CiAgIH0KIAogICBmdW5jdGlvbiBjbGVhblVwTGluZShsaW5lKSB7CkBAIC0z
ODU1LDcgKzM5NTUsOCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgLy8g
YXJyYXksIHdoaWNoIGNvbnRhaW5zIGFsdGVybmF0aW5nIGZyYWdtZW50cyBvZiB0ZXh0IGFuZCBD
U1MKICAgLy8gY2xhc3Nlcy4KICAgZnVuY3Rpb24gcnVuTW9kZShjbSwgdGV4dCwgbW9kZSwgc3Rh
dGUsIGYpIHsKLSAgICB2YXIgZmxhdHRlblNwYW5zID0gY20ub3B0aW9ucy5mbGF0dGVuU3BhbnM7
CisgICAgdmFyIGZsYXR0ZW5TcGFucyA9IG1vZGUuZmxhdHRlblNwYW5zOworICAgIGlmIChmbGF0
dGVuU3BhbnMgPT0gbnVsbCkgZmxhdHRlblNwYW5zID0gY20ub3B0aW9ucy5mbGF0dGVuU3BhbnM7
CiAgICAgdmFyIGN1clRleHQgPSAiIiwgY3VyU3R5bGUgPSBudWxsOwogICAgIHZhciBzdHJlYW0g
PSBuZXcgU3RyaW5nU3RyZWFtKHRleHQsIGNtLm9wdGlvbnMudGFiU2l6ZSk7CiAgICAgaWYgKHRl
eHQgPT0gIiIgJiYgbW9kZS5ibGFua0xpbmUpIG1vZGUuYmxhbmtMaW5lKHN0YXRlKTsKQEAgLTM5
NTcsNiArNDA1OCw4IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAg
YnVpbGRlci5tZWFzdXJlID0gbGluZSA9PSByZWFsTGluZSAmJiBtZWFzdXJlOwogICAgICAgYnVp
bGRlci5wb3MgPSAwOwogICAgICAgYnVpbGRlci5hZGRUb2tlbiA9IGJ1aWxkZXIubWVhc3VyZSA/
IGJ1aWxkVG9rZW5NZWFzdXJlIDogYnVpbGRUb2tlbjsKKyAgICAgIGlmICgoaWUgfHwgd2Via2l0
KSAmJiBjbS5nZXRPcHRpb24oImxpbmVXcmFwcGluZyIpKQorICAgICAgICBidWlsZGVyLmFkZFRv
a2VuID0gYnVpbGRUb2tlblNwbGl0U3BhY2VzKGJ1aWxkZXIuYWRkVG9rZW4pOwogICAgICAgaWYg
KG1lYXN1cmUgJiYgc2F3QmVmb3JlICYmIGxpbmUgIT0gcmVhbExpbmUgJiYgIWJ1aWxkZXIuYWRk
ZWRPbmUpIHsKICAgICAgICAgbWVhc3VyZVswXSA9IGJ1aWxkZXIucHJlLmFwcGVuZENoaWxkKHpl
cm9XaWR0aEVsZW1lbnQoY20uZGlzcGxheS5tZWFzdXJlKSk7CiAgICAgICAgIGJ1aWxkZXIuYWRk
ZWRPbmUgPSB0cnVlOwpAQCAtMzk4OSwxMCArNDA5MiwxMSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9
IChmdW5jdGlvbigpIHsKICAgICAgIH0KICAgICB9CiAKKyAgICBzaWduYWwoY20sICJyZW5kZXJM
aW5lIiwgY20sIHJlYWxMaW5lLCBidWlsZGVyLnByZSk7CiAgICAgcmV0dXJuIGJ1aWxkZXIucHJl
OwogICB9CiAKLSAgdmFyIHRva2VuU3BlY2lhbENoYXJzID0gL1tcdFx1MDAwMC1cdTAwMTlcdTIw
MGJcdTIwMjhcdTIwMjlcdUZFRkZdL2c7CisgIHZhciB0b2tlblNwZWNpYWxDaGFycyA9IC9bXHRc
dTAwMDAtXHUwMDE5XHUwMGFkXHUyMDBiXHUyMDI4XHUyMDI5XHVGRUZGXS9nOwogICBmdW5jdGlv
biBidWlsZFRva2VuKGJ1aWxkZXIsIHRleHQsIHN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHlsZSkg
ewogICAgIGlmICghdGV4dCkgcmV0dXJuOwogICAgIGlmICghdG9rZW5TcGVjaWFsQ2hhcnMudGVz
dCh0ZXh0KSkgewpAQCAtNDAzMiwyMyArNDEzNiw0MiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChm
dW5jdGlvbigpIHsKICAgfQogCiAgIGZ1bmN0aW9uIGJ1aWxkVG9rZW5NZWFzdXJlKGJ1aWxkZXIs
IHRleHQsIHN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHlsZSkgeworICAgIHZhciB3cmFwcGluZyA9
IGJ1aWxkZXIuY20ub3B0aW9ucy5saW5lV3JhcHBpbmc7CiAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCB0ZXh0Lmxlbmd0aDsgKytpKSB7CiAgICAgICB2YXIgY2ggPSB0ZXh0LmNoYXJBdChpKSwgc3Rh
cnQgPSBpID09IDA7CiAgICAgICBpZiAoY2ggPj0gIlx1ZDgwMCIgJiYgY2ggPCAiXHVkYmZmIiAm
JiBpIDwgdGV4dC5sZW5ndGggLSAxKSB7CiAgICAgICAgIGNoID0gdGV4dC5zbGljZShpLCBpICsg
Mik7CiAgICAgICAgICsraTsKLSAgICAgIH0gZWxzZSBpZiAoaSAmJiBidWlsZGVyLmNtLm9wdGlv
bnMubGluZVdyYXBwaW5nICYmCisgICAgICB9IGVsc2UgaWYgKGkgJiYgd3JhcHBpbmcgJiYKICAg
ICAgICAgICAgICAgICAgc3BhbkFmZmVjdHNXcmFwcGluZy50ZXN0KHRleHQuc2xpY2UoaSAtIDEs
IGkgKyAxKSkpIHsKICAgICAgICAgYnVpbGRlci5wcmUuYXBwZW5kQ2hpbGQoZWx0KCJ3YnIiKSk7
CiAgICAgICB9Ci0gICAgICBidWlsZGVyLm1lYXN1cmVbYnVpbGRlci5wb3NdID0KKyAgICAgIHZh
ciBzcGFuID0gYnVpbGRlci5tZWFzdXJlW2J1aWxkZXIucG9zXSA9CiAgICAgICAgIGJ1aWxkVG9r
ZW4oYnVpbGRlciwgY2gsIHN0eWxlLAogICAgICAgICAgICAgICAgICAgIHN0YXJ0ICYmIHN0YXJ0
U3R5bGUsIGkgPT0gdGV4dC5sZW5ndGggLSAxICYmIGVuZFN0eWxlKTsKKyAgICAgIC8vIEluIElF
IHNpbmdsZS1zcGFjZSBub2RlcyB3cmFwIGRpZmZlcmVudGx5IHRoYW4gc3BhY2VzCisgICAgICAv
LyBlbWJlZGRlZCBpbiBsYXJnZXIgdGV4dCBub2RlcywgZXhjZXB0IHdoZW4gc2V0IHRvCisgICAg
ICAvLyB3aGl0ZS1zcGFjZTogbm9ybWFsIChpc3N1ZSAjMTI2OCkuCisgICAgICBpZiAoaWUgJiYg
d3JhcHBpbmcgJiYgY2ggPT0gIiAiICYmIGkgJiYgIS9ccy8udGVzdCh0ZXh0LmNoYXJBdChpIC0g
MSkpICYmCisgICAgICAgICAgaSA8IHRleHQubGVuZ3RoIC0gMSAmJiAhL1xzLy50ZXN0KHRleHQu
Y2hhckF0KGkgKyAxKSkpCisgICAgICAgIHNwYW4uc3R5bGUud2hpdGVTcGFjZSA9ICJub3JtYWwi
OwogICAgICAgYnVpbGRlci5wb3MgKz0gY2gubGVuZ3RoOwogICAgIH0KICAgICBpZiAodGV4dC5s
ZW5ndGgpIGJ1aWxkZXIuYWRkZWRPbmUgPSB0cnVlOwogICB9CiAKKyAgZnVuY3Rpb24gYnVpbGRU
b2tlblNwbGl0U3BhY2VzKGlubmVyKSB7CisgICAgZnVuY3Rpb24gc3BsaXQob2xkKSB7CisgICAg
ICB2YXIgb3V0ID0gIiAiOworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvbGQubGVuZ3RoIC0g
MjsgKytpKSBvdXQgKz0gaSAlIDIgPyAiICIgOiAiXHUwMGEwIjsKKyAgICAgIG91dCArPSAiICI7
CisgICAgICByZXR1cm4gb3V0OworICAgIH0KKyAgICByZXR1cm4gZnVuY3Rpb24oYnVpbGRlciwg
dGV4dCwgc3R5bGUsIHN0YXJ0U3R5bGUsIGVuZFN0eWxlKSB7CisgICAgICByZXR1cm4gaW5uZXIo
YnVpbGRlciwgdGV4dC5yZXBsYWNlKC8gezMsfS8sIHNwbGl0KSwgc3R5bGUsIHN0YXJ0U3R5bGUs
IGVuZFN0eWxlKTsKKyAgICB9OworICB9CisKICAgZnVuY3Rpb24gYnVpbGRDb2xsYXBzZWRTcGFu
KGJ1aWxkZXIsIHNpemUsIHdpZGdldCkgewogICAgIGlmICh3aWRnZXQpIHsKICAgICAgIGlmICgh
YnVpbGRlci5kaXNwbGF5KSB3aWRnZXQgPSB3aWRnZXQuY2xvbmVOb2RlKHRydWUpOwpAQCAtNDEy
NSw2ICs0MjQ4LDEwIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogCiAgIGZ1
bmN0aW9uIHVwZGF0ZURvYyhkb2MsIGNoYW5nZSwgbWFya2VkU3BhbnMsIHNlbEFmdGVyLCBlc3Rp
bWF0ZUhlaWdodCkgewogICAgIGZ1bmN0aW9uIHNwYW5zRm9yKG4pIHtyZXR1cm4gbWFya2VkU3Bh
bnMgPyBtYXJrZWRTcGFuc1tuXSA6IG51bGw7fQorICAgIGZ1bmN0aW9uIHVwZGF0ZShsaW5lLCB0
ZXh0LCBzcGFucykgeworICAgICAgdXBkYXRlTGluZShsaW5lLCB0ZXh0LCBzcGFucywgZXN0aW1h
dGVIZWlnaHQpOworICAgICAgc2lnbmFsTGF0ZXIobGluZSwgImNoYW5nZSIsIGxpbmUsIGNoYW5n
ZSk7CisgICAgfQogCiAgICAgdmFyIGZyb20gPSBjaGFuZ2UuZnJvbSwgdG8gPSBjaGFuZ2UudG8s
IHRleHQgPSBjaGFuZ2UudGV4dDsKICAgICB2YXIgZmlyc3RMaW5lID0gZ2V0TGluZShkb2MsIGZy
b20ubGluZSksIGxhc3RMaW5lID0gZ2V0TGluZShkb2MsIHRvLmxpbmUpOwpAQCAtNDEzNiwyNyAr
NDI2MywyNSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIC8vIHN1
cmUgbGluZSBvYmplY3RzIG1vdmUgdGhlIHdheSB0aGV5IGFyZSBzdXBwb3NlZCB0by4KICAgICAg
IGZvciAodmFyIGkgPSAwLCBlID0gdGV4dC5sZW5ndGggLSAxLCBhZGRlZCA9IFtdOyBpIDwgZTsg
KytpKQogICAgICAgICBhZGRlZC5wdXNoKG1ha2VMaW5lKHRleHRbaV0sIHNwYW5zRm9yKGkpLCBl
c3RpbWF0ZUhlaWdodCkpOwotICAgICAgdXBkYXRlTGluZShsYXN0TGluZSwgbGFzdExpbmUudGV4
dCwgbGFzdFNwYW5zLCBlc3RpbWF0ZUhlaWdodCk7CisgICAgICB1cGRhdGUobGFzdExpbmUsIGxh
c3RMaW5lLnRleHQsIGxhc3RTcGFucyk7CiAgICAgICBpZiAobmxpbmVzKSBkb2MucmVtb3ZlKGZy
b20ubGluZSwgbmxpbmVzKTsKICAgICAgIGlmIChhZGRlZC5sZW5ndGgpIGRvYy5pbnNlcnQoZnJv
bS5saW5lLCBhZGRlZCk7CiAgICAgfSBlbHNlIGlmIChmaXJzdExpbmUgPT0gbGFzdExpbmUpIHsK
ICAgICAgIGlmICh0ZXh0Lmxlbmd0aCA9PSAxKSB7Ci0gICAgICAgIHVwZGF0ZUxpbmUoZmlyc3RM
aW5lLCBmaXJzdExpbmUudGV4dC5zbGljZSgwLCBmcm9tLmNoKSArIGxhc3RUZXh0ICsgZmlyc3RM
aW5lLnRleHQuc2xpY2UodG8uY2gpLAotICAgICAgICAgICAgICAgICAgIGxhc3RTcGFucywgZXN0
aW1hdGVIZWlnaHQpOworICAgICAgICB1cGRhdGUoZmlyc3RMaW5lLCBmaXJzdExpbmUudGV4dC5z
bGljZSgwLCBmcm9tLmNoKSArIGxhc3RUZXh0ICsgZmlyc3RMaW5lLnRleHQuc2xpY2UodG8uY2gp
LCBsYXN0U3BhbnMpOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yICh2YXIgYWRkZWQgPSBb
XSwgaSA9IDEsIGUgPSB0ZXh0Lmxlbmd0aCAtIDE7IGkgPCBlOyArK2kpCiAgICAgICAgICAgYWRk
ZWQucHVzaChtYWtlTGluZSh0ZXh0W2ldLCBzcGFuc0ZvcihpKSwgZXN0aW1hdGVIZWlnaHQpKTsK
ICAgICAgICAgYWRkZWQucHVzaChtYWtlTGluZShsYXN0VGV4dCArIGZpcnN0TGluZS50ZXh0LnNs
aWNlKHRvLmNoKSwgbGFzdFNwYW5zLCBlc3RpbWF0ZUhlaWdodCkpOwotICAgICAgICB1cGRhdGVM
aW5lKGZpcnN0TGluZSwgZmlyc3RMaW5lLnRleHQuc2xpY2UoMCwgZnJvbS5jaCkgKyB0ZXh0WzBd
LCBzcGFuc0ZvcigwKSwgZXN0aW1hdGVIZWlnaHQpOworICAgICAgICB1cGRhdGUoZmlyc3RMaW5l
LCBmaXJzdExpbmUudGV4dC5zbGljZSgwLCBmcm9tLmNoKSArIHRleHRbMF0sIHNwYW5zRm9yKDAp
KTsKICAgICAgICAgZG9jLmluc2VydChmcm9tLmxpbmUgKyAxLCBhZGRlZCk7CiAgICAgICB9CiAg
ICAgfSBlbHNlIGlmICh0ZXh0Lmxlbmd0aCA9PSAxKSB7Ci0gICAgICB1cGRhdGVMaW5lKGZpcnN0
TGluZSwgZmlyc3RMaW5lLnRleHQuc2xpY2UoMCwgZnJvbS5jaCkgKyB0ZXh0WzBdICsgbGFzdExp
bmUudGV4dC5zbGljZSh0by5jaCksCi0gICAgICAgICAgICAgICAgIHNwYW5zRm9yKDApLCBlc3Rp
bWF0ZUhlaWdodCk7CisgICAgICB1cGRhdGUoZmlyc3RMaW5lLCBmaXJzdExpbmUudGV4dC5zbGlj
ZSgwLCBmcm9tLmNoKSArIHRleHRbMF0gKyBsYXN0TGluZS50ZXh0LnNsaWNlKHRvLmNoKSwgc3Bh
bnNGb3IoMCkpOwogICAgICAgZG9jLnJlbW92ZShmcm9tLmxpbmUgKyAxLCBubGluZXMpOwogICAg
IH0gZWxzZSB7Ci0gICAgICB1cGRhdGVMaW5lKGZpcnN0TGluZSwgZmlyc3RMaW5lLnRleHQuc2xp
Y2UoMCwgZnJvbS5jaCkgKyB0ZXh0WzBdLCBzcGFuc0ZvcigwKSwgZXN0aW1hdGVIZWlnaHQpOwot
ICAgICAgdXBkYXRlTGluZShsYXN0TGluZSwgbGFzdFRleHQgKyBsYXN0TGluZS50ZXh0LnNsaWNl
KHRvLmNoKSwgbGFzdFNwYW5zLCBlc3RpbWF0ZUhlaWdodCk7CisgICAgICB1cGRhdGUoZmlyc3RM
aW5lLCBmaXJzdExpbmUudGV4dC5zbGljZSgwLCBmcm9tLmNoKSArIHRleHRbMF0sIHNwYW5zRm9y
KDApKTsKKyAgICAgIHVwZGF0ZShsYXN0TGluZSwgbGFzdFRleHQgKyBsYXN0TGluZS50ZXh0LnNs
aWNlKHRvLmNoKSwgbGFzdFNwYW5zKTsKICAgICAgIGZvciAodmFyIGkgPSAxLCBlID0gdGV4dC5s
ZW5ndGggLSAxLCBhZGRlZCA9IFtdOyBpIDwgZTsgKytpKQogICAgICAgICBhZGRlZC5wdXNoKG1h
a2VMaW5lKHRleHRbaV0sIHNwYW5zRm9yKGkpLCBlc3RpbWF0ZUhlaWdodCkpOwogICAgICAgaWYg
KG5saW5lcyA+IDEpIGRvYy5yZW1vdmUoZnJvbS5saW5lICsgMSwgbmxpbmVzIC0gMSk7CkBAIC00
MzAwLDcgKzQ0MjUsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgdmFy
IERvYyA9IENvZGVNaXJyb3IuRG9jID0gZnVuY3Rpb24odGV4dCwgbW9kZSwgZmlyc3RMaW5lKSB7
CiAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIERvYykpIHJldHVybiBuZXcgRG9jKHRleHQsIG1v
ZGUsIGZpcnN0TGluZSk7CiAgICAgaWYgKGZpcnN0TGluZSA9PSBudWxsKSBmaXJzdExpbmUgPSAw
OwotICAgIAorCiAgICAgQnJhbmNoQ2h1bmsuY2FsbCh0aGlzLCBbbmV3IExlYWZDaHVuayhbbWFr
ZUxpbmUoIiIsIG51bGwpXSldKTsKICAgICB0aGlzLmZpcnN0ID0gZmlyc3RMaW5lOwogICAgIHRo
aXMuc2Nyb2xsVG9wID0gdGhpcy5zY3JvbGxMZWZ0ID0gMDsKQEAgLTQ0MTIsNyArNDUzNyw3IEBA
IHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgdGhpcy5oaXN0b3J5Lmxh
c3RPcCA9IHRoaXMuaGlzdG9yeS5sYXN0T3JpZ2luID0gbnVsbDsKICAgICB9LAogICAgIGlzQ2xl
YW46IGZ1bmN0aW9uICgpIHtyZXR1cm4gdGhpcy5oaXN0b3J5LmRpcnR5Q291bnRlciA9PSAwO30s
Ci0gICAgICAKKwogICAgIGdldEhpc3Rvcnk6IGZ1bmN0aW9uKCkgewogICAgICAgcmV0dXJuIHtk
b25lOiBjb3B5SGlzdG9yeUFycmF5KHRoaXMuaGlzdG9yeS5kb25lKSwKICAgICAgICAgICAgICAg
dW5kb25lOiBjb3B5SGlzdG9yeUFycmF5KHRoaXMuaGlzdG9yeS51bmRvbmUpfTsKQEAgLTQ3MDcs
NyArNDgzMiw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgd2hp
bGUgKGhpc3QuZG9uZS5sZW5ndGggPiBoaXN0LnVuZG9EZXB0aCkKICAgICAgICAgaGlzdC5kb25l
LnNoaWZ0KCk7CiAgICAgICBpZiAoaGlzdC5kaXJ0eUNvdW50ZXIgPCAwKQotICAgICAgICAvLyBU
aGUgdXNlciBoYXMgbWFkZSBhIGNoYW5nZSBhZnRlciB1bmRvaW5nIHBhc3QgdGhlIGxhc3QgY2xl
YW4gc3RhdGUuIAorICAgICAgICAvLyBUaGUgdXNlciBoYXMgbWFkZSBhIGNoYW5nZSBhZnRlciB1
bmRvaW5nIHBhc3QgdGhlIGxhc3QgY2xlYW4gc3RhdGUuCiAgICAgICAgIC8vIFdlIGNhbiBuZXZl
ciBnZXQgYmFjayB0byBhIGNsZWFuIHN0YXRlIG5vdyB1bnRpbCBtYXJrQ2xlYW4oKSBpcyBjYWxs
ZWQuCiAgICAgICAgIGhpc3QuZGlydHlDb3VudGVyID0gTmFOOwogICAgICAgZWxzZQpAQCAtNDky
MCwxMiArNTA0NSwxMiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAogICAv
LyBDb3VudHMgdGhlIGNvbHVtbiBvZmZzZXQgaW4gYSBzdHJpbmcsIHRha2luZyB0YWJzIGludG8g
YWNjb3VudC4KICAgLy8gVXNlZCBtb3N0bHkgdG8gZmluZCBpbmRlbnRhdGlvbi4KLSAgZnVuY3Rp
b24gY291bnRDb2x1bW4oc3RyaW5nLCBlbmQsIHRhYlNpemUpIHsKKyAgZnVuY3Rpb24gY291bnRD
b2x1bW4oc3RyaW5nLCBlbmQsIHRhYlNpemUsIHN0YXJ0SW5kZXgsIHN0YXJ0VmFsdWUpIHsKICAg
ICBpZiAoZW5kID09IG51bGwpIHsKICAgICAgIGVuZCA9IHN0cmluZy5zZWFyY2goL1teXHNcdTAw
YTBdLyk7CiAgICAgICBpZiAoZW5kID09IC0xKSBlbmQgPSBzdHJpbmcubGVuZ3RoOwogICAgIH0K
LSAgICBmb3IgKHZhciBpID0gMCwgbiA9IDA7IGkgPCBlbmQ7ICsraSkgeworICAgIGZvciAodmFy
IGkgPSBzdGFydEluZGV4IHx8IDAsIG4gPSBzdGFydFZhbHVlIHx8IDA7IGkgPCBlbmQ7ICsraSkg
ewogICAgICAgaWYgKHN0cmluZy5jaGFyQXQoaSkgPT0gIlx0IikgbiArPSB0YWJTaXplIC0gKG4g
JSB0YWJTaXplKTsKICAgICAgIGVsc2UgKytuOwogICAgIH0KQEAgLTUwNDcsOCArNTE3Miw4IEBA
IHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAvLyB2YXJpb3VzIGJyb3dzZXJz
LgogICB2YXIgc3BhbkFmZmVjdHNXcmFwcGluZyA9IC9eJC87IC8vIFdvbid0IG1hdGNoIGFueSB0
d28tY2hhcmFjdGVyIHN0cmluZwogICBpZiAoZ2Vja28pIHNwYW5BZmZlY3RzV3JhcHBpbmcgPSAv
JCcvOwotICBlbHNlIGlmIChzYWZhcmkpIHNwYW5BZmZlY3RzV3JhcHBpbmcgPSAvXC1bXiBcLT9d
fFw/W14gISdcIlwpLC5cLVwvOjtcP1xdXH1dLzsKLSAgZWxzZSBpZiAoY2hyb21lKSBzcGFuQWZm
ZWN0c1dyYXBwaW5nID0gL1wtW14gXC1cLj9dfFw/W14gXC1cLj9cXVx9OjshJ1wiXCksXC9dfFtc
LiFcIiMmJVwpKissOjs9PlxdfFx9fl1bXChce1xbPF18XCQnLzsKKyAgZWxzZSBpZiAoc2FmYXJp
ICYmICEvVmVyc2lvblwvKFs2LTldfFxkXGQpXGIvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkp
IHNwYW5BZmZlY3RzV3JhcHBpbmcgPSAvXC1bXiBcLT9dfFw/W14gISdcIlwpLC5cLVwvOjtcP1xd
XH1dLzsKKyAgZWxzZSBpZiAod2Via2l0KSBzcGFuQWZmZWN0c1dyYXBwaW5nID0gL1t+ISMlJiop
PSt9XF18XCJcLj4sOjtdWyh7WzxdfC1bXlwtP1wuXXxcP1tcd35gQCMkJVxeJiooXz0re1t8Pjxd
LzsKIAogICB2YXIga25vd25TY3JvbGxiYXJXaWR0aDsKICAgZnVuY3Rpb24gc2Nyb2xsYmFyV2lk
dGgobWVhc3VyZSkgewpAQCAtNTM3OCw3ICs1NTAzLDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAo
ZnVuY3Rpb24oKSB7CiAKICAgLy8gVEhFIEVORAogCi0gIENvZGVNaXJyb3IudmVyc2lvbiA9ICIz
LjEiOworICBDb2RlTWlycm9yLnZlcnNpb24gPSAiMy4xICsiOwogCiAgIHJldHVybiBDb2RlTWly
cm9yOwogfSkoKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>