<?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>83883</bug_id>
          
          <creation_ts>2012-04-13 05:36:33 -0700</creation_ts>
          <short_desc>Web Inspector: exception in heap profiler when expanding a class in summary view</short_desc>
          <delta_ts>2012-04-13 06:51: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>0</everconfirmed>
          <reporter name="Yury Semikhatsky">yurys</reporter>
          <assigned_to name="Yury Semikhatsky">yurys</assigned_to>
          <cc>alph</cc>
    
    <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>dglazkov</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>601990</commentid>
    <comment_count>0</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-04-13 05:36:33 -0700</bug_when>
    <thetext>at quickSortFirstK (chrome-devtools://devtools/PartialQuickSort.js:40:35)
    at Array.&lt;anonymous&gt; (chrome-devtools://devtools/PartialQuickSort.js:49:9)
    at Object.sort (chrome-devtools://devtools/HeapSnapshot.js:1837:30)
    at Object.serializeNextItems (chrome-devtools://devtools/HeapSnapshot.js:1665:18)
    at Object.dispatchMessage (chrome-devtools://devtools/HeapSnapshotWorkerDispatcher.js:82:63)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>601991</commentid>
    <comment_count>1</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-04-13 05:36:54 -0700</bug_when>
    <thetext>Looks like regression after http://trac.webkit.org/changeset/113994</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602013</commentid>
    <comment_count>2</comment_count>
      <attachid>137075</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-04-13 06:25:32 -0700</bug_when>
    <thetext>Created attachment 137075
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602017</commentid>
    <comment_count>3</comment_count>
      <attachid>137075</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-04-13 06:30:09 -0700</bug_when>
    <thetext>Comment on attachment 137075
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=137075&amp;action=review

&gt; Source/WebCore/inspector/front-end/DOMUtils.js:36
&gt; +Node.prototype.rangeOfWord = function(offset, stopCharacters, stayWithinNode, direction)

I would call this file DOMExtension.js and would move highlight-related methods into the WebInspector.UIUtils, into the WebInspector namespace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602026</commentid>
    <comment_count>4</comment_count>
      <attachid>137079</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-04-13 06:45:38 -0700</bug_when>
    <thetext>Created attachment 137079
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602029</commentid>
    <comment_count>5</comment_count>
      <attachid>137079</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-13 06:49:09 -0700</bug_when>
    <thetext>Comment on attachment 137079
Patch

Attachment 137079 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/12391950</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602030</commentid>
    <comment_count>6</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-04-13 06:51:04 -0700</bug_when>
    <thetext>Committed r114126: &lt;http://trac.webkit.org/changeset/114126&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137075</attachid>
            <date>2012-04-13 06:25:32 -0700</date>
            <delta_ts>2012-04-13 06:45:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-83883-20120413172529.patch</filename>
            <type>text/plain</type>
            <size>61022</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0MTE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmU5NDljYjBjODc2Zjhh
MWFhYzg3NDRhNmY3MTFmMGVjMzZjNzcxZC4uYzFlMGZiZmNkZjEwZDAyYWY5NzllY2FmZTBmZTIw
MjEyNTYxNmJhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDczIEBACisyMDEyLTA0LTEzICBZdXJ5
IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IGV4Y2VwdGlvbiBpbiBoZWFwIHByb2ZpbGVyIHdoZW4gZXhwYW5kaW5nIGEgY2xhc3MgaW4g
c3VtbWFyeSB2aWV3CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD04Mzg4MworCisgICAgICAgIE1vdmVkIGFsbCBET00tc3BlY2lmaWMgaW5zcGVjdG9yIHV0
aWxpdGllcyBpbnRvIERPTVV0aWxzLmpzCisKKyAgICAgICAgTWVyZ2VkIEJpbmFyeVNlYXJjaC5q
cyBhbmQgUGFydGlhbFF1aWNrU29ydC5qcyBpbnRvIHV0aWxpdGllcy5qcywgSGVhcFNuYXBzaG90
V29ya2VyLmpzIG5vdworICAgICAgICBpbXBvcnRzIHV0aWxpdGllcy5qcyB3aGljaCBjb250YWlu
cyBhbGwgcmVxdWlyZWQgcm91dGluZXMuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogaW5zcGVjdG9yL2NvbXBpbGUtZnJvbnQtZW5k
LnB5OgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQmluYXJ5U2VhcmNoLmpzOiBSZW1v
dmVkLgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRE9NVXRpbHMuanM6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzLgorICAg
ICAgICAoTm9kZS5wcm90b3R5cGUucmFuZ2VPZldvcmQpOgorICAgICAgICAoTm9kZS5wcm90b3R5
cGUudHJhdmVyc2VOZXh0VGV4dE5vZGUpOgorICAgICAgICAoTm9kZS5wcm90b3R5cGUucmFuZ2VC
b3VuZGFyeUZvck9mZnNldCk6CisgICAgICAgIChFbGVtZW50LnByb3RvdHlwZS5yZW1vdmVTdHls
ZUNsYXNzKToKKyAgICAgICAgKEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZU1hdGNoaW5nU3R5bGVD
bGFzc2VzKToKKyAgICAgICAgKEVsZW1lbnQucHJvdG90eXBlLmFkZFN0eWxlQ2xhc3MpOgorICAg
ICAgICAoRWxlbWVudC5wcm90b3R5cGUuaGFzU3R5bGVDbGFzcyk6CisgICAgICAgIChFbGVtZW50
LnByb3RvdHlwZS5wb3NpdGlvbkF0KToKKyAgICAgICAgKEVsZW1lbnQucHJvdG90eXBlLnBydW5l
RW1wdHlUZXh0Tm9kZXMpOgorICAgICAgICAoRWxlbWVudC5wcm90b3R5cGUuaXNTY3JvbGxlZFRv
Qm90dG9tKToKKyAgICAgICAgKE5vZGUucHJvdG90eXBlLmVuY2xvc2luZ05vZGVPclNlbGZXaXRo
Tm9kZU5hbWVJbkFycmF5KToKKyAgICAgICAgKE5vZGUucHJvdG90eXBlLmVuY2xvc2luZ05vZGVP
clNlbGZXaXRoTm9kZU5hbWUpOgorICAgICAgICAoTm9kZS5wcm90b3R5cGUuZW5jbG9zaW5nTm9k
ZU9yU2VsZldpdGhDbGFzcyk6CisgICAgICAgIChOb2RlLnByb3RvdHlwZS5lbmNsb3NpbmdOb2Rl
V2l0aENsYXNzKToKKyAgICAgICAgKEVsZW1lbnQucHJvdG90eXBlLnF1ZXJ5KToKKyAgICAgICAg
KEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZUNoaWxkcmVuKToKKyAgICAgICAgKEVsZW1lbnQucHJv
dG90eXBlLmlzSW5zZXJ0aW9uQ2FyZXRJbnNpZGUpOgorICAgICAgICAoRWxlbWVudC5wcm90b3R5
cGUuY3JlYXRlQ2hpbGQpOgorICAgICAgICAoRWxlbWVudC5wcm90b3R5cGUudG90YWxPZmZzZXRM
ZWZ0KToKKyAgICAgICAgKEVsZW1lbnQucHJvdG90eXBlLnRvdGFsT2Zmc2V0VG9wKToKKyAgICAg
ICAgKEVsZW1lbnQucHJvdG90eXBlLnRvdGFsT2Zmc2V0KToKKyAgICAgICAgKEVsZW1lbnQucHJv
dG90eXBlLnNjcm9sbE9mZnNldCk6CisgICAgICAgIChBbmNob3JCb3gpOgorICAgICAgICAoRWxl
bWVudC5wcm90b3R5cGUub2Zmc2V0UmVsYXRpdmVUb1dpbmRvdyk6CisgICAgICAgIChFbGVtZW50
LnByb3RvdHlwZS5ib3hJbldpbmRvdyk6CisgICAgICAgIChFbGVtZW50LnByb3RvdHlwZS5zZXRU
ZXh0QW5kVGl0bGUpOgorICAgICAgICAoRXZlbnQucHJvdG90eXBlLmNvbnN1bWUpOgorICAgICAg
ICAoVGV4dC5wcm90b3R5cGUuc2VsZWN0KToKKyAgICAgICAgKEVsZW1lbnQucHJvdG90eXBlLnNl
bGVjdGlvbkxlZnRPZmZzZXQpOgorICAgICAgICAoTm9kZS5wcm90b3R5cGUuaXNBbmNlc3Rvcik6
CisgICAgICAgIChOb2RlLnByb3RvdHlwZS5pc0Rlc2NlbmRhbnQpOgorICAgICAgICAoTm9kZS5w
cm90b3R5cGUuaXNTZWxmT3JBbmNlc3Rvcik6CisgICAgICAgIChOb2RlLnByb3RvdHlwZS5pc1Nl
bGZPckRlc2NlbmRhbnQpOgorICAgICAgICAoTm9kZS5wcm90b3R5cGUudHJhdmVyc2VOZXh0Tm9k
ZSk6CisgICAgICAgIChOb2RlLnByb3RvdHlwZS50cmF2ZXJzZVByZXZpb3VzTm9kZSk6CisgICAg
ICAgIChIVE1MVGV4dEFyZWFFbGVtZW50LnByb3RvdHlwZS5tb3ZlQ3Vyc29yVG9FbmQpOgorICAg
ICAgICAoaXNFbnRlcktleSk6CisgICAgICAgIChjb25zdW1lRXZlbnQpOgorICAgICAgICAoaGln
aGxpZ2h0U2VhcmNoUmVzdWx0KToKKyAgICAgICAgKGhpZ2hsaWdodFNlYXJjaFJlc3VsdHMpOgor
ICAgICAgICAoaGlnaGxpZ2h0UmFuZ2VzV2l0aFN0eWxlQ2xhc3MpOgorICAgICAgICAoYXBwbHlE
b21DaGFuZ2VzKToKKyAgICAgICAgKHJldmVydERvbUNoYW5nZXMpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90LmpzOiBGaXhlZCBhIGNvdXBsZSBvZiBqcyBjb21w
aWxlciB3YXJuaW5ncworICAgICAgICBieSBkZXNjcmliaW5nIHN0cnVjdHVyZSBvZiBoZWFwIHNu
YXBzaG90IGhlYWRlciBpbiB0aGUgcHJvdG9jb2wuCisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90TG9hZGVyLnByb3RvdHlwZS5wdXNoSlNPTkNodW5rKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFdvcmtlci5qczoKKyAgICAgICAgKiBpbnNwZWN0
b3IvZnJvbnQtZW5kL1BhcnRpYWxRdWlja1NvcnQuanM6IFJlbW92ZWQuCisgICAgICAgICogaW5z
cGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1l
bmQvaW5zcGVjdG9yLmh0bWw6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC91dGlsaXRp
ZXMuanM6CisgICAgICAgICguKToKKwogMjAxMi0wNC0xMyAgVGhpYWdvIE1hcmNvcyBQLiBTYW50
b3MgIDx0aGlhZ28uc2FudG9zQGludGVsLmNvbT4KIAogICAgICAgICBbRUZMXSBBZGQgQVBJIGZv
ciBjb2xvciBjaG9vc2VyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMmY1NDRmMzMzZGIyMGNiYzRiNWU2
MGJkMDVjOTBiYzMyYjAxYTIwMS4uM2FhNDU4ODNhMTVlYWQwZWUzYjljNTg5MTcyZDZkYzZlODRj
ZjdmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNjI3NCw3ICs2Mjc0LDYgQEAKICAgICAgICAgICAg
ICdpbnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0UmVzdWx0Vmlldy5qcycsCiAgICAgICAgICAgICAn
aW5zcGVjdG9yL2Zyb250LWVuZC9BdWRpdFJ1bGVzLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0
b3IvZnJvbnQtZW5kL0F1ZGl0c1BhbmVsLmpzJywKLSAgICAgICAgICAgICdpbnNwZWN0b3IvZnJv
bnQtZW5kL0JpbmFyeVNlYXJjaC5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVu
ZC9Cb3R0b21VcFByb2ZpbGVEYXRhR3JpZFRyZWUuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rv
ci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rv
ci9mcm9udC1lbmQvQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qcycsCkBAIC02Mjg2LDcgKzYyODUs
NiBAQAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZU1vZGVsLmpzJywK
ICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVQYW5lbC5qcycsCiAgICAg
ICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlVmlldy5qcycsCi0gICAgICAgICAg
ICAnaW5zcGVjdG9yL2Zyb250LWVuZC9KYXZhU2NyaXB0Q29udGV4dE1hbmFnZXIuanMnLAogICAg
ICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQ29udGVudFByb3ZpZGVycy5qcycsCiAgICAg
ICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9Db250ZXh0TWVudS5qcycsCiAgICAgICAgICAg
ICAnaW5zcGVjdG9yL2Zyb250LWVuZC9Db29raWVJdGVtc1ZpZXcuanMnLApAQCAtNjMxMSw2ICs2
MzA5LDcgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0RPTVN0b3JhZ2UuanMn
LAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvRE9NU3RvcmFnZUl0ZW1zVmlldy5q
cycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9ET01TeW50YXhIaWdobGlnaHRl
ci5qcycsCisgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9ET01VdGlscy5qcycsCiAg
ICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9EcmF3ZXIuanMnLAogICAgICAgICAgICAg
J2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5qcycsCiAgICAgICAgICAgICAnaW5z
cGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1RyZWVPdXRsaW5lLmpzJywKQEAgLTYzNDAsNiArNjMz
OSw3IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JWaWV3Lmpz
JywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkRmFrZVdvcmtlci5q
cycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMnLAorICAg
ICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvSmF2YVNjcmlwdENvbnRleHRNYW5hZ2VyLmpz
JywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0phdmFTY3JpcHRGb3JtYXR0ZXIu
anMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvSmF2YVNjcmlwdFNvdXJjZUZy
YW1lLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0tleWJvYXJkU2hvcnRj
dXQuanMnLApAQCAtNjM1NSw3ICs2MzU1LDYgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJv
bnQtZW5kL09iamVjdFByb3BlcnRpZXNTZWN0aW9uLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0
b3IvZnJvbnQtZW5kL1BhbmVsLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5k
L1BhbmVsRW5hYmxlclZpZXcuanMnLAotICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQv
UGFydGlhbFF1aWNrU29ydC5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9Q
bGFjYXJkLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL1BvcG92ZXIuanMn
LAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZURhdGFHcmlkVHJlZS5q
cycsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4
IGIwYWJlN2VlMDJkOGRmYjAxMzU0ZTNlYjM1NmVlYjNkNDE3ZWZlNGEuLjNhOTc0N2JkMDJkMDE4
ZjAwNDFjNWVmZjIyOTQxN2U1NmYzZDlkNDIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC03MzY0OSwxMCArNzM2NDksNiBAQAogCQkJCQk+CiAJ
CQkJPC9GaWxlPgogCQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZy
b250LWVuZFxCaW5hcnlTZWFyY2guanMiCi0JCQkJCT4KLQkJCQk8L0ZpbGU+Ci0JCQkJPEZpbGUK
IAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEJvdHRvbVVwUHJvZmls
ZURhdGFHcmlkVHJlZS5qcyIKIAkJCQkJPgogCQkJCTwvRmlsZT4KQEAgLTczODAxLDYgKzczNzk3
LDEwIEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXERPTVV0aWxzLmpzIgorCQkJCQk+CisJCQkJPC9GaWxl
PgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxE
cmF3ZXIuanMiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CkBAIC03NDAzMywxMCArNzQwMzMsNiBAQAog
CQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5z
cGVjdG9yXGZyb250LWVuZFxQYXJ0aWFsUXVpY2tTb3J0LmpzIgotCQkJCQk+Ci0JCQkJPC9GaWxl
PgotCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxQ
bGFjYXJkLmpzIgogCQkJCQk+CiAJCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2NvbXBpbGUtZnJvbnQtZW5kLnB5IGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2NvbXBpbGUtZnJvbnQtZW5kLnB5CmluZGV4IDU0OTM5YTY0NzBlMzVmZGI5NzE0ZDM1ODcy
ZDA0MGUyNWNkZTcyYmIuLmQ1ZjUwY2NiMWM3YjRiNjUyNmNkNWFiYTU5ZmJkZTZjZTFhN2Y2ODcg
MTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9jb21waWxlLWZyb250LWVuZC5w
eQorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvY29tcGlsZS1mcm9udC1lbmQucHkKQEAg
LTM3LDYgKzM3LDcgQEAgbW9kdWxlcyA9IFsKICAgICAgICAgInRhcmdldF9uYW1lIjogInV0aWwi
LAogICAgICAgICAiZGVwZW5kZW5jaWVzIjogW10sCiAgICAgICAgICJzb3VyY2VzIjogWworICAg
ICAgICAgICAgIkRPTVV0aWxzLmpzIiwKICAgICAgICAgICAgICJ1dGlsaXRpZXMuanMiLAogICAg
ICAgICAgICAgInRyZWVvdXRsaW5lLmpzIiwKICAgICAgICAgXQpAQCAtNDUsOSArNDYsNyBAQCBt
b2R1bGVzID0gWwogICAgICAgICAidGFyZ2V0X25hbWUiOiAiY29tbW9uIiwKICAgICAgICAgImRl
cGVuZGVuY2llcyI6IFsidXRpbCJdLAogICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAg
ICJCaW5hcnlTZWFyY2guanMiLAogICAgICAgICAgICAgIk9iamVjdC5qcyIsCi0gICAgICAgICAg
ICAiUGFydGlhbFF1aWNrU29ydC5qcyIsCiAgICAgICAgICAgICAiU2V0dGluZ3MuanMiLAogICAg
ICAgICAgICAgIlVzZXJNZXRyaWNzLmpzIiwKICAgICAgICAgICAgICJIYW5kbGVyUmVnaXN0cnku
anMiLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CaW5h
cnlTZWFyY2guanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JpbmFyeVNl
YXJjaC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQwM2NhNDkyOTM4ZDZlNTZl
MWZjMTZiNWNlMmE2NmUwZDhiNzg5NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JpbmFyeVNl
YXJjaC5qcworKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0gKiBAcGFyYW0geyp9IG9i
amVjdAotICogQHBhcmFtIHtBcnJheS48Kj59IGFycmF5Ci0gKiBAcGFyYW0ge2Z1bmN0aW9uKCos
ICopfSBjb21wYXJhdG9yCi0gKi8KLWZ1bmN0aW9uIGJpbmFyeVNlYXJjaChvYmplY3QsIGFycmF5
LCBjb21wYXJhdG9yKQotewotICAgIHZhciBmaXJzdCA9IDA7Ci0gICAgdmFyIGxhc3QgPSBhcnJh
eS5sZW5ndGggLSAxOwotCi0gICAgd2hpbGUgKGZpcnN0IDw9IGxhc3QpIHsKLSAgICAgICAgdmFy
IG1pZCA9IChmaXJzdCArIGxhc3QpID4+IDE7Ci0gICAgICAgIHZhciBjID0gY29tcGFyYXRvcihv
YmplY3QsIGFycmF5W21pZF0pOwotICAgICAgICBpZiAoYyA+IDApCi0gICAgICAgICAgICBmaXJz
dCA9IG1pZCArIDE7Ci0gICAgICAgIGVsc2UgaWYgKGMgPCAwKQotICAgICAgICAgICAgbGFzdCA9
IG1pZCAtIDE7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBtaWQ7Ci0gICAgfQot
Ci0gICAgLy8gUmV0dXJuIHRoZSBuZWFyZXN0IGxlc3NlciBpbmRleCwgIi0xIiBtZWFucyAiMCwg
Ii0yIiBtZWFucyAiMSIsIGV0Yy4KLSAgICByZXR1cm4gLShmaXJzdCArIDEpOwotfQotCi1PYmpl
Y3QuZGVmaW5lUHJvcGVydHkoQXJyYXkucHJvdG90eXBlLCAiYmluYXJ5SW5kZXhPZiIsCi17Ci0g
ICAgLyoqCi0gICAgICogQHRoaXMge0FycmF5LjwqPn0KLSAgICAgKi8KLSAgICB2YWx1ZTogZnVu
Y3Rpb24odmFsdWUsIGNvbXBhcmF0b3IpCi0gICAgewotICAgICAgICB2YXIgcmVzdWx0ID0gYmlu
YXJ5U2VhcmNoKHZhbHVlLCB0aGlzLCBjb21wYXJhdG9yKTsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dCA+PSAwID8gcmVzdWx0IDogLTE7Ci0gICAgfQotfSk7Ci0KLS8qKgotICogQHBhcmFtIHsqfSBh
bk9iamVjdAotICogQHBhcmFtIHtBcnJheS48Kj59IGFMaXN0Ci0gKiBAcGFyYW0ge2Z1bmN0aW9u
KCosICopfSBhRnVuY3Rpb24KLSAqLwotZnVuY3Rpb24gaW5zZXJ0aW9uSW5kZXhGb3JPYmplY3RJ
bkxpc3RTb3J0ZWRCeUZ1bmN0aW9uKGFuT2JqZWN0LCBhTGlzdCwgYUZ1bmN0aW9uKQotewotICAg
IHZhciBpbmRleCA9IGJpbmFyeVNlYXJjaChhbk9iamVjdCwgYUxpc3QsIGFGdW5jdGlvbik7Ci0g
ICAgaWYgKGluZGV4IDwgMCkKLSAgICAgICAgLy8gU2VlIGJpbmFyeVNlYXJjaCBpbXBsZW1lbnRh
dGlvbi4KLSAgICAgICAgcmV0dXJuIC1pbmRleCAtIDE7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8v
IFJldHVybiB0aGUgZmlyc3Qgb2NjdXJhbmNlIG9mIGFuIGl0ZW0gaW4gdGhlIGxpc3QuCi0gICAg
ICAgIHdoaWxlIChpbmRleCA+IDAgJiYgYUZ1bmN0aW9uKGFuT2JqZWN0LCBhTGlzdFtpbmRleCAt
IDFdKSA9PT0gMCkKLSAgICAgICAgICAgIGluZGV4LS07Ci0gICAgICAgIHJldHVybiBpbmRleDsK
LSAgICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0RPTVV0aWxzLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01VdGls
cy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi44MmNjNjhlN2QzODAyZDA3YTdiYWU1YTY5NDA1YmVhMzc5MWRlMTM1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9E
T01VdGlscy5qcwpAQCAtMCwwICsxLDY0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogQ29udGFpbnMgZGlmZiBtZXRob2QgYmFzZWQg
b24gSmF2YXNjcmlwdCBEaWZmIEFsZ29yaXRobSBCeSBKb2huIFJlc2lnCisgKiBodHRwOi8vZWpv
aG4ub3JnL2ZpbGVzL2pzZGlmZi5qcyAocmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlKS4K
KyAqLworCisvKioKKyAqIEBwYXJhbSB7c3RyaW5nPX0gZGlyZWN0aW9uCisgKi8KK05vZGUucHJv
dG90eXBlLnJhbmdlT2ZXb3JkID0gZnVuY3Rpb24ob2Zmc2V0LCBzdG9wQ2hhcmFjdGVycywgc3Rh
eVdpdGhpbk5vZGUsIGRpcmVjdGlvbikKK3sKKyAgICB2YXIgc3RhcnROb2RlOworICAgIHZhciBz
dGFydE9mZnNldCA9IDA7CisgICAgdmFyIGVuZE5vZGU7CisgICAgdmFyIGVuZE9mZnNldCA9IDA7
CisKKyAgICBpZiAoIXN0YXlXaXRoaW5Ob2RlKQorICAgICAgICBzdGF5V2l0aGluTm9kZSA9IHRo
aXM7CisKKyAgICBpZiAoIWRpcmVjdGlvbiB8fCBkaXJlY3Rpb24gPT09ICJiYWNrd2FyZCIgfHwg
ZGlyZWN0aW9uID09PSAiYm90aCIpIHsKKyAgICAgICAgdmFyIG5vZGUgPSB0aGlzOworICAgICAg
ICB3aGlsZSAobm9kZSkgeworICAgICAgICAgICAgaWYgKG5vZGUgPT09IHN0YXlXaXRoaW5Ob2Rl
KSB7CisgICAgICAgICAgICAgICAgaWYgKCFzdGFydE5vZGUpCisgICAgICAgICAgICAgICAgICAg
IHN0YXJ0Tm9kZSA9IHN0YXlXaXRoaW5Ob2RlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhU
X05PREUpIHsKKyAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSAobm9kZSA9PT0gdGhpcyA/IChv
ZmZzZXQgLSAxKSA6IChub2RlLm5vZGVWYWx1ZS5sZW5ndGggLSAxKSk7CisgICAgICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpID49IDA7IC0taSkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoc3RvcENoYXJhY3RlcnMuaW5kZXhPZihub2RlLm5vZGVWYWx1ZVtpXSkgIT09IC0xKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydE5vZGUgPSBub2RlOworICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSBpICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoc3RhcnROb2RlKQorICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICBub2RlID0gbm9kZS50cmF2ZXJzZVByZXZpb3VzTm9kZShzdGF5
V2l0aGluTm9kZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXN0YXJ0Tm9kZSkgeworICAg
ICAgICAgICAgc3RhcnROb2RlID0gc3RheVdpdGhpbk5vZGU7CisgICAgICAgICAgICBzdGFydE9m
ZnNldCA9IDA7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBzdGFydE5vZGUgPSB0
aGlzOworICAgICAgICBzdGFydE9mZnNldCA9IG9mZnNldDsKKyAgICB9CisKKyAgICBpZiAoIWRp
cmVjdGlvbiB8fCBkaXJlY3Rpb24gPT09ICJmb3J3YXJkIiB8fCBkaXJlY3Rpb24gPT09ICJib3Ro
IikgeworICAgICAgICBub2RlID0gdGhpczsKKyAgICAgICAgd2hpbGUgKG5vZGUpIHsKKyAgICAg
ICAgICAgIGlmIChub2RlID09PSBzdGF5V2l0aGluTm9kZSkgeworICAgICAgICAgICAgICAgIGlm
ICghZW5kTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgZW5kTm9kZSA9IHN0YXlXaXRoaW5Ob2Rl
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHsKKyAgICAgICAgICAgICAgICB2
YXIgc3RhcnQgPSAobm9kZSA9PT0gdGhpcyA/IG9mZnNldCA6IDApOworICAgICAgICAgICAgICAg
IGZvciAodmFyIGkgPSBzdGFydDsgaSA8IG5vZGUubm9kZVZhbHVlLmxlbmd0aDsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChzdG9wQ2hhcmFjdGVycy5pbmRleE9mKG5vZGUubm9kZVZh
bHVlW2ldKSAhPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZE5vZGUgPSBub2Rl
OworICAgICAgICAgICAgICAgICAgICAgICAgZW5kT2Zmc2V0ID0gaTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZW5kTm9kZSkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgICAgbm9kZSA9IG5vZGUudHJhdmVyc2VOZXh0Tm9kZShz
dGF5V2l0aGluTm9kZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWVuZE5vZGUpIHsKKyAg
ICAgICAgICAgIGVuZE5vZGUgPSBzdGF5V2l0aGluTm9kZTsKKyAgICAgICAgICAgIGVuZE9mZnNl
dCA9IHN0YXlXaXRoaW5Ob2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSA/IHN0YXlXaXRo
aW5Ob2RlLm5vZGVWYWx1ZS5sZW5ndGggOiBzdGF5V2l0aGluTm9kZS5jaGlsZE5vZGVzLmxlbmd0
aDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVuZE5vZGUgPSB0aGlzOworICAg
ICAgICBlbmRPZmZzZXQgPSBvZmZzZXQ7CisgICAgfQorCisgICAgdmFyIHJlc3VsdCA9IHRoaXMu
b3duZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgpOworICAgIHJlc3VsdC5zZXRTdGFydChzdGFydE5v
ZGUsIHN0YXJ0T2Zmc2V0KTsKKyAgICByZXN1bHQuc2V0RW5kKGVuZE5vZGUsIGVuZE9mZnNldCk7
CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitOb2RlLnByb3RvdHlwZS50cmF2ZXJzZU5leHRU
ZXh0Tm9kZSA9IGZ1bmN0aW9uKHN0YXlXaXRoaW4pCit7CisgICAgdmFyIG5vZGUgPSB0aGlzLnRy
YXZlcnNlTmV4dE5vZGUoc3RheVdpdGhpbik7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1
cm47CisKKyAgICB3aGlsZSAobm9kZSAmJiBub2RlLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9E
RSkKKyAgICAgICAgbm9kZSA9IG5vZGUudHJhdmVyc2VOZXh0Tm9kZShzdGF5V2l0aGluKTsKKwor
ICAgIHJldHVybiBub2RlOworfQorCitOb2RlLnByb3RvdHlwZS5yYW5nZUJvdW5kYXJ5Rm9yT2Zm
c2V0ID0gZnVuY3Rpb24ob2Zmc2V0KQoreworICAgIHZhciBub2RlID0gdGhpcy50cmF2ZXJzZU5l
eHRUZXh0Tm9kZSh0aGlzKTsKKyAgICB3aGlsZSAobm9kZSAmJiBvZmZzZXQgPiBub2RlLm5vZGVW
YWx1ZS5sZW5ndGgpIHsKKyAgICAgICAgb2Zmc2V0IC09IG5vZGUubm9kZVZhbHVlLmxlbmd0aDsK
KyAgICAgICAgbm9kZSA9IG5vZGUudHJhdmVyc2VOZXh0VGV4dE5vZGUodGhpcyk7CisgICAgfQor
ICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIHsgY29udGFpbmVyOiB0aGlzLCBvZmZzZXQ6
IDAgfTsKKyAgICByZXR1cm4geyBjb250YWluZXI6IG5vZGUsIG9mZnNldDogb2Zmc2V0IH07Cit9
CisKK0VsZW1lbnQucHJvdG90eXBlLnJlbW92ZVN0eWxlQ2xhc3MgPSBmdW5jdGlvbihjbGFzc05h
bWUpCit7CisgICAgdGhpcy5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7Cit9CisKK0VsZW1l
bnQucHJvdG90eXBlLnJlbW92ZU1hdGNoaW5nU3R5bGVDbGFzc2VzID0gZnVuY3Rpb24oY2xhc3NO
YW1lUmVnZXgpCit7CisgICAgdmFyIHJlZ2V4ID0gbmV3IFJlZ0V4cCgiKF58XFxzKykiICsgY2xh
c3NOYW1lUmVnZXggKyAiKCR8XFxzKykiKTsKKyAgICBpZiAocmVnZXgudGVzdCh0aGlzLmNsYXNz
TmFtZSkpCisgICAgICAgIHRoaXMuY2xhc3NOYW1lID0gdGhpcy5jbGFzc05hbWUucmVwbGFjZShy
ZWdleCwgIiAiKTsKK30KKworRWxlbWVudC5wcm90b3R5cGUuYWRkU3R5bGVDbGFzcyA9IGZ1bmN0
aW9uKGNsYXNzTmFtZSkKK3sKKyAgICB0aGlzLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTsKK30K
KworRWxlbWVudC5wcm90b3R5cGUuaGFzU3R5bGVDbGFzcyA9IGZ1bmN0aW9uKGNsYXNzTmFtZSkK
K3sKKyAgICByZXR1cm4gdGhpcy5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTsKK30KKwor
RWxlbWVudC5wcm90b3R5cGUucG9zaXRpb25BdCA9IGZ1bmN0aW9uKHgsIHkpCit7CisgICAgdGhp
cy5zdHlsZS5sZWZ0ID0geCArICJweCI7CisgICAgdGhpcy5zdHlsZS50b3AgPSB5ICsgInB4IjsK
K30KKworRWxlbWVudC5wcm90b3R5cGUucHJ1bmVFbXB0eVRleHROb2RlcyA9IGZ1bmN0aW9uKCkK
K3sKKyAgICB2YXIgc2libGluZyA9IHRoaXMuZmlyc3RDaGlsZDsKKyAgICB3aGlsZSAoc2libGlu
ZykgeworICAgICAgICB2YXIgbmV4dFNpYmxpbmcgPSBzaWJsaW5nLm5leHRTaWJsaW5nOworICAg
ICAgICBpZiAoc2libGluZy5ub2RlVHlwZSA9PT0gdGhpcy5URVhUX05PREUgJiYgc2libGluZy5u
b2RlVmFsdWUgPT09ICIiKQorICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZChzaWJsaW5nKTsK
KyAgICAgICAgc2libGluZyA9IG5leHRTaWJsaW5nOworICAgIH0KK30KKworRWxlbWVudC5wcm90
b3R5cGUuaXNTY3JvbGxlZFRvQm90dG9tID0gZnVuY3Rpb24oKQoreworICAgIC8vIFRoaXMgY29k
ZSB3b3JrcyBvbmx5IGZvciAwLXdpZHRoIGJvcmRlcgorICAgIHJldHVybiB0aGlzLnNjcm9sbFRv
cCArIHRoaXMuY2xpZW50SGVpZ2h0ID09PSB0aGlzLnNjcm9sbEhlaWdodDsKK30KKworTm9kZS5w
cm90b3R5cGUuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhOb2RlTmFtZUluQXJyYXkgPSBmdW5jdGlv
bihuYW1lQXJyYXkpCit7CisgICAgZm9yICh2YXIgbm9kZSA9IHRoaXM7IG5vZGUgJiYgbm9kZSAh
PT0gdGhpcy5vd25lckRvY3VtZW50OyBub2RlID0gbm9kZS5wYXJlbnROb2RlKQorICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IG5hbWVBcnJheS5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGlm
IChub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWVBcnJheVtpXS50b0xvd2VyQ2Fz
ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBub2RlOworICAgIHJldHVybiBudWxsOworfQor
CitOb2RlLnByb3RvdHlwZS5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aE5vZGVOYW1lID0gZnVuY3Rp
b24obm9kZU5hbWUpCit7CisgICAgcmV0dXJuIHRoaXMuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhO
b2RlTmFtZUluQXJyYXkoW25vZGVOYW1lXSk7Cit9CisKK05vZGUucHJvdG90eXBlLmVuY2xvc2lu
Z05vZGVPclNlbGZXaXRoQ2xhc3MgPSBmdW5jdGlvbihjbGFzc05hbWUpCit7CisgICAgZm9yICh2
YXIgbm9kZSA9IHRoaXM7IG5vZGUgJiYgbm9kZSAhPT0gdGhpcy5vd25lckRvY3VtZW50OyBub2Rl
ID0gbm9kZS5wYXJlbnROb2RlKQorICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5F
TEVNRU5UX05PREUgJiYgbm9kZS5oYXNTdHlsZUNsYXNzKGNsYXNzTmFtZSkpCisgICAgICAgICAg
ICByZXR1cm4gbm9kZTsKKyAgICByZXR1cm4gbnVsbDsKK30KKworTm9kZS5wcm90b3R5cGUuZW5j
bG9zaW5nTm9kZVdpdGhDbGFzcyA9IGZ1bmN0aW9uKGNsYXNzTmFtZSkKK3sKKyAgICBpZiAoIXRo
aXMucGFyZW50Tm9kZSkKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgcmV0dXJuIHRoaXMucGFy
ZW50Tm9kZS5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKGNsYXNzTmFtZSk7Cit9CisKK0Vs
ZW1lbnQucHJvdG90eXBlLnF1ZXJ5ID0gZnVuY3Rpb24ocXVlcnkpCit7CisgICAgcmV0dXJuIHRo
aXMub3duZXJEb2N1bWVudC5ldmFsdWF0ZShxdWVyeSwgdGhpcywgbnVsbCwgWFBhdGhSZXN1bHQu
RklSU1RfT1JERVJFRF9OT0RFX1RZUEUsIG51bGwpLnNpbmdsZU5vZGVWYWx1ZTsKK30KKworRWxl
bWVudC5wcm90b3R5cGUucmVtb3ZlQ2hpbGRyZW4gPSBmdW5jdGlvbigpCit7CisgICAgaWYgKHRo
aXMuZmlyc3RDaGlsZCkKKyAgICAgICAgdGhpcy50ZXh0Q29udGVudCA9ICIiOworfQorCitFbGVt
ZW50LnByb3RvdHlwZS5pc0luc2VydGlvbkNhcmV0SW5zaWRlID0gZnVuY3Rpb24oKQoreworICAg
IHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CisgICAgaWYgKCFzZWxlY3Rp
b24ucmFuZ2VDb3VudCB8fCAhc2VsZWN0aW9uLmlzQ29sbGFwc2VkKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgdmFyIHNlbGVjdGlvblJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7
CisgICAgcmV0dXJuIHNlbGVjdGlvblJhbmdlLnN0YXJ0Q29udGFpbmVyLmlzU2VsZk9yRGVzY2Vu
ZGFudCh0aGlzKTsKK30KKworLyoqCisgKiBAcGFyYW0ge3N0cmluZz19IGNsYXNzTmFtZQorICov
CitFbGVtZW50LnByb3RvdHlwZS5jcmVhdGVDaGlsZCA9IGZ1bmN0aW9uKGVsZW1lbnROYW1lLCBj
bGFzc05hbWUpCit7CisgICAgdmFyIGVsZW1lbnQgPSB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRl
RWxlbWVudChlbGVtZW50TmFtZSk7CisgICAgaWYgKGNsYXNzTmFtZSkKKyAgICAgICAgZWxlbWVu
dC5jbGFzc05hbWUgPSBjbGFzc05hbWU7CisgICAgdGhpcy5hcHBlbmRDaGlsZChlbGVtZW50KTsK
KyAgICByZXR1cm4gZWxlbWVudDsKK30KKworRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUuY3Jl
YXRlQ2hpbGQgPSBFbGVtZW50LnByb3RvdHlwZS5jcmVhdGVDaGlsZDsKKworLyoqCisgKiBAcmV0
dXJuIHtudW1iZXJ9CisgKi8KK0VsZW1lbnQucHJvdG90eXBlLnRvdGFsT2Zmc2V0TGVmdCA9IGZ1
bmN0aW9uKCkKK3sKKyAgICByZXR1cm4gdGhpcy50b3RhbE9mZnNldCgpLmxlZnQ7Cit9CisKKy8q
KgorICogQHJldHVybiB7bnVtYmVyfQorICovCitFbGVtZW50LnByb3RvdHlwZS50b3RhbE9mZnNl
dFRvcCA9IGZ1bmN0aW9uKCkKK3sKKyAgICByZXR1cm4gdGhpcy50b3RhbE9mZnNldCgpLnRvcDsK
KworfQorCitFbGVtZW50LnByb3RvdHlwZS50b3RhbE9mZnNldCA9IGZ1bmN0aW9uKCkKK3sKKyAg
ICB2YXIgdG90YWxMZWZ0ID0gMDsKKyAgICB2YXIgdG90YWxUb3AgPSAwOworCisgICAgZm9yICh2
YXIgZWxlbWVudCA9IHRoaXM7IGVsZW1lbnQ7IGVsZW1lbnQgPSBlbGVtZW50Lm9mZnNldFBhcmVu
dCkgeworICAgICAgICB0b3RhbExlZnQgKz0gZWxlbWVudC5vZmZzZXRMZWZ0OworICAgICAgICB0
b3RhbFRvcCArPSBlbGVtZW50Lm9mZnNldFRvcDsKKyAgICAgICAgaWYgKHRoaXMgIT09IGVsZW1l
bnQpIHsKKyAgICAgICAgICAgIHRvdGFsTGVmdCArPSBlbGVtZW50LmNsaWVudExlZnQgLSBlbGVt
ZW50LnNjcm9sbExlZnQ7CisgICAgICAgICAgICB0b3RhbFRvcCArPSBlbGVtZW50LmNsaWVudFRv
cCAtIGVsZW1lbnQuc2Nyb2xsVG9wOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHsg
bGVmdDogdG90YWxMZWZ0LCB0b3A6IHRvdGFsVG9wIH07Cit9CisKK0VsZW1lbnQucHJvdG90eXBl
LnNjcm9sbE9mZnNldCA9IGZ1bmN0aW9uKCkKK3sKKyAgICB2YXIgY3VyTGVmdCA9IDA7CisgICAg
dmFyIGN1clRvcCA9IDA7CisgICAgZm9yICh2YXIgZWxlbWVudCA9IHRoaXM7IGVsZW1lbnQ7IGVs
ZW1lbnQgPSBlbGVtZW50LnNjcm9sbFBhcmVudCkgeworICAgICAgICBjdXJMZWZ0ICs9IGVsZW1l
bnQuc2Nyb2xsTGVmdDsKKyAgICAgICAgY3VyVG9wICs9IGVsZW1lbnQuc2Nyb2xsVG9wOworICAg
IH0KKyAgICByZXR1cm4geyBsZWZ0OiBjdXJMZWZ0LCB0b3A6IGN1clRvcCB9OworfQorCisvKioK
KyAqIEBjb25zdHJ1Y3RvcgorICogQHBhcmFtIHtudW1iZXI9fSB4CisgKiBAcGFyYW0ge251bWJl
cj19IHkKKyAqIEBwYXJhbSB7bnVtYmVyPX0gd2lkdGgKKyAqIEBwYXJhbSB7bnVtYmVyPX0gaGVp
Z2h0CisgKi8KK2Z1bmN0aW9uIEFuY2hvckJveCh4LCB5LCB3aWR0aCwgaGVpZ2h0KQoreworICAg
IHRoaXMueCA9IHggfHwgMDsKKyAgICB0aGlzLnkgPSB5IHx8IDA7CisgICAgdGhpcy53aWR0aCA9
IHdpZHRoIHx8IDA7CisgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDsKK30KKworLyoqCisg
KiBAcGFyYW0ge1dpbmRvd30gdGFyZ2V0V2luZG93CisgKiBAcmV0dXJuIHtBbmNob3JCb3h9Cisg
Ki8KK0VsZW1lbnQucHJvdG90eXBlLm9mZnNldFJlbGF0aXZlVG9XaW5kb3cgPSBmdW5jdGlvbih0
YXJnZXRXaW5kb3cpCit7CisgICAgdmFyIGVsZW1lbnRPZmZzZXQgPSBuZXcgQW5jaG9yQm94KCk7
CisgICAgdmFyIGN1ckVsZW1lbnQgPSB0aGlzOworICAgIHZhciBjdXJXaW5kb3cgPSB0aGlzLm93
bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7CisgICAgd2hpbGUgKGN1cldpbmRvdyAmJiBjdXJFbGVt
ZW50KSB7CisgICAgICAgIGVsZW1lbnRPZmZzZXQueCArPSBjdXJFbGVtZW50LnRvdGFsT2Zmc2V0
TGVmdCgpOworICAgICAgICBlbGVtZW50T2Zmc2V0LnkgKz0gY3VyRWxlbWVudC50b3RhbE9mZnNl
dFRvcCgpOworICAgICAgICBpZiAoY3VyV2luZG93ID09PSB0YXJnZXRXaW5kb3cpCisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjdXJFbGVtZW50ID0gY3VyV2luZG93LmZyYW1lRWxlbWVu
dDsKKyAgICAgICAgY3VyV2luZG93ID0gY3VyV2luZG93LnBhcmVudDsKKyAgICB9CisKKyAgICBy
ZXR1cm4gZWxlbWVudE9mZnNldDsKK30KKworLyoqCisgKiBAcGFyYW0ge1dpbmRvd30gdGFyZ2V0
V2luZG93CisgKiBAcmV0dXJuIHtBbmNob3JCb3h9CisgKi8KK0VsZW1lbnQucHJvdG90eXBlLmJv
eEluV2luZG93ID0gZnVuY3Rpb24odGFyZ2V0V2luZG93KQoreworICAgIHRhcmdldFdpbmRvdyA9
IHRhcmdldFdpbmRvdyB8fCB0aGlzLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7CisKKyAgICB2
YXIgYW5jaG9yQm94ID0gdGhpcy5vZmZzZXRSZWxhdGl2ZVRvV2luZG93KHdpbmRvdyk7CisgICAg
YW5jaG9yQm94LndpZHRoID0gTWF0aC5taW4odGhpcy5vZmZzZXRXaWR0aCwgd2luZG93LmlubmVy
V2lkdGggLSBhbmNob3JCb3gueCk7CisgICAgYW5jaG9yQm94LmhlaWdodCA9IE1hdGgubWluKHRo
aXMub2Zmc2V0SGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgLSBhbmNob3JCb3gueSk7CisKKyAg
ICByZXR1cm4gYW5jaG9yQm94OworfQorCisvKioKKyAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0Cisg
Ki8KK0VsZW1lbnQucHJvdG90eXBlLnNldFRleHRBbmRUaXRsZSA9IGZ1bmN0aW9uKHRleHQpCit7
CisgICAgdGhpcy50ZXh0Q29udGVudCA9IHRleHQ7CisgICAgdGhpcy50aXRsZSA9IHRleHQ7Cit9
CisKK0tleWJvYXJkRXZlbnQucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oImRhdGEiLCBmdW5j
dGlvbigpCit7CisgICAgLy8gRW11bGF0ZSAiZGF0YSIgYXR0cmlidXRlIGZyb20gRE9NIDMgVGV4
dElucHV0IGV2ZW50LgorICAgIC8vIFNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwt
My1FdmVudHMvI2V2ZW50cy1FdmVudHMtVGV4dEV2ZW50LWRhdGEKKyAgICBzd2l0Y2ggKHRoaXMu
dHlwZSkgeworICAgICAgICBjYXNlICJrZXlwcmVzcyI6CisgICAgICAgICAgICBpZiAoIXRoaXMu
Y3RybEtleSAmJiAhdGhpcy5tZXRhS2V5KQorICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcu
ZnJvbUNoYXJDb2RlKHRoaXMuY2hhckNvZGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHJldHVybiAiIjsKKyAgICAgICAgY2FzZSAia2V5ZG93biI6CisgICAgICAgIGNhc2Ug
ImtleXVwIjoKKyAgICAgICAgICAgIGlmICghdGhpcy5jdHJsS2V5ICYmICF0aGlzLm1ldGFLZXkg
JiYgIXRoaXMuYWx0S2V5KQorICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJD
b2RlKHRoaXMud2hpY2gpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVy
biAiIjsKKyAgICB9Cit9KTsKKworLyoqCisgKiBAcGFyYW0ge2Jvb2xlYW49fSBwcmV2ZW50RGVm
YXVsdAorICovCitFdmVudC5wcm90b3R5cGUuY29uc3VtZSA9IGZ1bmN0aW9uKHByZXZlbnREZWZh
dWx0KQoreworICAgIHRoaXMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7CisgICAgaWYgKHBy
ZXZlbnREZWZhdWx0KQorICAgICAgICB0aGlzLnByZXZlbnREZWZhdWx0KCk7CisgICAgdGhpcy5o
YW5kbGVkID0gdHJ1ZTsKK30KKworVGV4dC5wcm90b3R5cGUuc2VsZWN0ID0gZnVuY3Rpb24oc3Rh
cnQsIGVuZCkKK3sKKyAgICBzdGFydCA9IHN0YXJ0IHx8IDA7CisgICAgZW5kID0gZW5kIHx8IHRo
aXMudGV4dENvbnRlbnQubGVuZ3RoOworCisgICAgaWYgKHN0YXJ0IDwgMCkKKyAgICAgICAgc3Rh
cnQgPSBlbmQgKyBzdGFydDsKKworICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLm93bmVyRG9jdW1l
bnQuZGVmYXVsdFZpZXcuZ2V0U2VsZWN0aW9uKCk7CisgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJh
bmdlcygpOworICAgIHZhciByYW5nZSA9IHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgp
OworICAgIHJhbmdlLnNldFN0YXJ0KHRoaXMsIHN0YXJ0KTsKKyAgICByYW5nZS5zZXRFbmQodGhp
cywgZW5kKTsKKyAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpOworICAgIHJldHVybiB0aGlz
OworfQorCitFbGVtZW50LnByb3RvdHlwZS5zZWxlY3Rpb25MZWZ0T2Zmc2V0ID0gZnVuY3Rpb24o
KQoreworICAgIC8vIENhbGN1bGF0ZSBzZWxlY3Rpb24gb2Zmc2V0IHJlbGF0aXZlIHRvIHRoZSBj
dXJyZW50IGVsZW1lbnQuCisKKyAgICB2YXIgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlv
bigpOworICAgIGlmICghc2VsZWN0aW9uLmNvbnRhaW5zTm9kZSh0aGlzLCB0cnVlKSkKKyAgICAg
ICAgcmV0dXJuIG51bGw7CisKKyAgICB2YXIgbGVmdE9mZnNldCA9IHNlbGVjdGlvbi5hbmNob3JP
ZmZzZXQ7CisgICAgdmFyIG5vZGUgPSBzZWxlY3Rpb24uYW5jaG9yTm9kZTsKKworICAgIHdoaWxl
IChub2RlICE9PSB0aGlzKSB7CisgICAgICAgIHdoaWxlIChub2RlLnByZXZpb3VzU2libGluZykg
eworICAgICAgICAgICAgbm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nOworICAgICAgICAgICAg
bGVmdE9mZnNldCArPSBub2RlLnRleHRDb250ZW50Lmxlbmd0aDsKKyAgICAgICAgfQorICAgICAg
ICBub2RlID0gbm9kZS5wYXJlbnROb2RlOworICAgIH0KKworICAgIHJldHVybiBsZWZ0T2Zmc2V0
OworfQorCitOb2RlLnByb3RvdHlwZS5pc0FuY2VzdG9yID0gZnVuY3Rpb24obm9kZSkKK3sKKyAg
ICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHZhciBjdXJyZW50Tm9k
ZSA9IG5vZGUucGFyZW50Tm9kZTsKKyAgICB3aGlsZSAoY3VycmVudE5vZGUpIHsKKyAgICAgICAg
aWYgKHRoaXMgPT09IGN1cnJlbnROb2RlKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUucGFyZW50Tm9kZTsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitOb2RlLnByb3RvdHlwZS5pc0Rlc2NlbmRhbnQgPSBmdW5jdGlvbihk
ZXNjZW5kYW50KQoreworICAgIHJldHVybiAhIWRlc2NlbmRhbnQgJiYgZGVzY2VuZGFudC5pc0Fu
Y2VzdG9yKHRoaXMpOworfQorCitOb2RlLnByb3RvdHlwZS5pc1NlbGZPckFuY2VzdG9yID0gZnVu
Y3Rpb24obm9kZSkKK3sKKyAgICByZXR1cm4gISFub2RlICYmIChub2RlID09PSB0aGlzIHx8IHRo
aXMuaXNBbmNlc3Rvcihub2RlKSk7Cit9CisKK05vZGUucHJvdG90eXBlLmlzU2VsZk9yRGVzY2Vu
ZGFudCA9IGZ1bmN0aW9uKG5vZGUpCit7CisgICAgcmV0dXJuICEhbm9kZSAmJiAobm9kZSA9PT0g
dGhpcyB8fCB0aGlzLmlzRGVzY2VuZGFudChub2RlKSk7Cit9CisKK05vZGUucHJvdG90eXBlLnRy
YXZlcnNlTmV4dE5vZGUgPSBmdW5jdGlvbihzdGF5V2l0aGluKQoreworICAgIHZhciBub2RlID0g
dGhpcy5maXJzdENoaWxkOworICAgIGlmIChub2RlKQorICAgICAgICByZXR1cm4gbm9kZTsKKwor
ICAgIGlmIChzdGF5V2l0aGluICYmIHRoaXMgPT09IHN0YXlXaXRoaW4pCisgICAgICAgIHJldHVy
biBudWxsOworCisgICAgbm9kZSA9IHRoaXMubmV4dFNpYmxpbmc7CisgICAgaWYgKG5vZGUpCisg
ICAgICAgIHJldHVybiBub2RlOworCisgICAgbm9kZSA9IHRoaXM7CisgICAgd2hpbGUgKG5vZGUg
JiYgIW5vZGUubmV4dFNpYmxpbmcgJiYgKCFzdGF5V2l0aGluIHx8ICFub2RlLnBhcmVudE5vZGUg
fHwgbm9kZS5wYXJlbnROb2RlICE9PSBzdGF5V2l0aGluKSkKKyAgICAgICAgbm9kZSA9IG5vZGUu
cGFyZW50Tm9kZTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBudWxsOworCisgICAg
cmV0dXJuIG5vZGUubmV4dFNpYmxpbmc7Cit9CisKK05vZGUucHJvdG90eXBlLnRyYXZlcnNlUHJl
dmlvdXNOb2RlID0gZnVuY3Rpb24oc3RheVdpdGhpbikKK3sKKyAgICBpZiAoc3RheVdpdGhpbiAm
JiB0aGlzID09PSBzdGF5V2l0aGluKQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB2YXIgbm9k
ZSA9IHRoaXMucHJldmlvdXNTaWJsaW5nOworICAgIHdoaWxlIChub2RlICYmIG5vZGUubGFzdENo
aWxkKQorICAgICAgICBub2RlID0gbm9kZS5sYXN0Q2hpbGQ7CisgICAgaWYgKG5vZGUpCisgICAg
ICAgIHJldHVybiBub2RlOworICAgIHJldHVybiB0aGlzLnBhcmVudE5vZGU7Cit9CisKK0hUTUxU
ZXh0QXJlYUVsZW1lbnQucHJvdG90eXBlLm1vdmVDdXJzb3JUb0VuZCA9IGZ1bmN0aW9uKCkKK3sK
KyAgICB2YXIgbGVuZ3RoID0gdGhpcy52YWx1ZS5sZW5ndGg7CisgICAgdGhpcy5zZXRTZWxlY3Rp
b25SYW5nZShsZW5ndGgsIGxlbmd0aCk7Cit9CisKK2Z1bmN0aW9uIGlzRW50ZXJLZXkoZXZlbnQp
IHsKKyAgICAvLyBDaGVjayBpZiBpbiBJTUUuCisgICAgcmV0dXJuIGV2ZW50LmtleUNvZGUgIT09
IDIyOSAmJiBldmVudC5rZXlJZGVudGlmaWVyID09PSAiRW50ZXIiOworfQorCitmdW5jdGlvbiBj
b25zdW1lRXZlbnQoZSkKK3sKKyAgICBlLmNvbnN1bWUoKTsKK30KKworLyoqCisgKiBAcGFyYW0g
e0VsZW1lbnR9IGVsZW1lbnQKKyAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQKKyAqIEBwYXJhbSB7
bnVtYmVyfSBsZW5ndGgKKyAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD49fSBkb21DaGFuZ2VzCisg
Ki8KK2Z1bmN0aW9uIGhpZ2hsaWdodFNlYXJjaFJlc3VsdChlbGVtZW50LCBvZmZzZXQsIGxlbmd0
aCwgZG9tQ2hhbmdlcykKK3sKKyAgICB2YXIgcmVzdWx0ID0gaGlnaGxpZ2h0U2VhcmNoUmVzdWx0
cyhlbGVtZW50LCBbe29mZnNldDogb2Zmc2V0LCBsZW5ndGg6IGxlbmd0aCB9XSwgZG9tQ2hhbmdl
cyk7CisgICAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPyByZXN1bHRbMF0gOiBudWxsOworfQorCisv
KioKKyAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudAorICogQHBhcmFtIHtBcnJheS48T2JqZWN0
Pn0gcmVzdWx0UmFuZ2VzCisgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+PX0gY2hhbmdlcworICov
CitmdW5jdGlvbiBoaWdobGlnaHRTZWFyY2hSZXN1bHRzKGVsZW1lbnQsIHJlc3VsdFJhbmdlcywg
Y2hhbmdlcykKK3sKKyAgICByZXR1cm4gaGlnaGxpZ2h0UmFuZ2VzV2l0aFN0eWxlQ2xhc3MoZWxl
bWVudCwgcmVzdWx0UmFuZ2VzLCAid2Via2l0LXNlYXJjaC1yZXN1bHQiLCBjaGFuZ2VzKTsKK30K
KworLyoqCisgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQKKyAqIEBwYXJhbSB7QXJyYXkuPE9i
amVjdD59IHJlc3VsdFJhbmdlcworICogQHBhcmFtIHtzdHJpbmd9IHN0eWxlQ2xhc3MKKyAqIEBw
YXJhbSB7QXJyYXkuPE9iamVjdD49fSBjaGFuZ2VzCisgKi8KK2Z1bmN0aW9uIGhpZ2hsaWdodFJh
bmdlc1dpdGhTdHlsZUNsYXNzKGVsZW1lbnQsIHJlc3VsdFJhbmdlcywgc3R5bGVDbGFzcywgY2hh
bmdlcykKK3sKKyAgICBjaGFuZ2VzID0gY2hhbmdlcyB8fCBbXTsKKyAgICB2YXIgaGlnaGxpZ2h0
Tm9kZXMgPSBbXTsKKyAgICB2YXIgbGluZVRleHQgPSBlbGVtZW50LnRleHRDb250ZW50OworICAg
IHZhciBvd25lckRvY3VtZW50ID0gZWxlbWVudC5vd25lckRvY3VtZW50OworICAgIHZhciB0ZXh0
Tm9kZVNuYXBzaG90ID0gb3duZXJEb2N1bWVudC5ldmFsdWF0ZSgiLi8vdGV4dCgpIiwgZWxlbWVu
dCwgbnVsbCwgWFBhdGhSZXN1bHQuT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUsIG51bGwpOwor
CisgICAgdmFyIHNuYXBzaG90TGVuZ3RoID0gdGV4dE5vZGVTbmFwc2hvdC5zbmFwc2hvdExlbmd0
aDsKKyAgICBpZiAoc25hcHNob3RMZW5ndGggPT09IDApCisgICAgICAgIHJldHVybiBoaWdobGln
aHROb2RlczsKKworICAgIHZhciBub2RlUmFuZ2VzID0gW107CisgICAgdmFyIHJhbmdlRW5kT2Zm
c2V0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNuYXBzaG90TGVuZ3RoOyArK2kpIHsK
KyAgICAgICAgdmFyIHJhbmdlID0ge307CisgICAgICAgIHJhbmdlLm9mZnNldCA9IHJhbmdlRW5k
T2Zmc2V0OworICAgICAgICByYW5nZS5sZW5ndGggPSB0ZXh0Tm9kZVNuYXBzaG90LnNuYXBzaG90
SXRlbShpKS50ZXh0Q29udGVudC5sZW5ndGg7CisgICAgICAgIHJhbmdlRW5kT2Zmc2V0ID0gcmFu
Z2Uub2Zmc2V0ICsgcmFuZ2UubGVuZ3RoOworICAgICAgICBub2RlUmFuZ2VzLnB1c2gocmFuZ2Up
OworICAgIH0KKworICAgIHZhciBzdGFydEluZGV4ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHJlc3VsdFJhbmdlcy5sZW5ndGg7ICsraSkgeworICAgICAgICB2YXIgc3RhcnRPZmZzZXQg
PSByZXN1bHRSYW5nZXNbaV0ub2Zmc2V0OworICAgICAgICB2YXIgZW5kT2Zmc2V0ID0gc3RhcnRP
ZmZzZXQgKyByZXN1bHRSYW5nZXNbaV0ubGVuZ3RoOworCisgICAgICAgIHdoaWxlIChzdGFydElu
ZGV4IDwgc25hcHNob3RMZW5ndGggJiYgbm9kZVJhbmdlc1tzdGFydEluZGV4XS5vZmZzZXQgKyBu
b2RlUmFuZ2VzW3N0YXJ0SW5kZXhdLmxlbmd0aCA8PSBzdGFydE9mZnNldCkKKyAgICAgICAgICAg
IHN0YXJ0SW5kZXgrKzsKKyAgICAgICAgdmFyIGVuZEluZGV4ID0gc3RhcnRJbmRleDsKKyAgICAg
ICAgd2hpbGUgKGVuZEluZGV4IDwgc25hcHNob3RMZW5ndGggJiYgbm9kZVJhbmdlc1tlbmRJbmRl
eF0ub2Zmc2V0ICsgbm9kZVJhbmdlc1tlbmRJbmRleF0ubGVuZ3RoIDwgZW5kT2Zmc2V0KQorICAg
ICAgICAgICAgZW5kSW5kZXgrKzsKKyAgICAgICAgaWYgKGVuZEluZGV4ID09PSBzbmFwc2hvdExl
bmd0aCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHZhciBoaWdobGlnaHROb2RlID0g
b3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgICAgIGhpZ2hsaWdodE5v
ZGUuY2xhc3NOYW1lID0gc3R5bGVDbGFzczsKKyAgICAgICAgaGlnaGxpZ2h0Tm9kZS50ZXh0Q29u
dGVudCA9IGxpbmVUZXh0LnN1YnN0cmluZyhzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKworICAg
ICAgICB2YXIgbGFzdFRleHROb2RlID0gdGV4dE5vZGVTbmFwc2hvdC5zbmFwc2hvdEl0ZW0oZW5k
SW5kZXgpOworICAgICAgICB2YXIgbGFzdFRleHQgPSBsYXN0VGV4dE5vZGUudGV4dENvbnRlbnQ7
CisgICAgICAgIGxhc3RUZXh0Tm9kZS50ZXh0Q29udGVudCA9IGxhc3RUZXh0LnN1YnN0cmluZyhl
bmRPZmZzZXQgLSBub2RlUmFuZ2VzW2VuZEluZGV4XS5vZmZzZXQpOworICAgICAgICBjaGFuZ2Vz
LnB1c2goeyBub2RlOiBsYXN0VGV4dE5vZGUsIHR5cGU6ICJjaGFuZ2VkIiwgb2xkVGV4dDogbGFz
dFRleHQsIG5ld1RleHQ6IGxhc3RUZXh0Tm9kZS50ZXh0Q29udGVudCB9KTsKKworICAgICAgICBp
ZiAoc3RhcnRJbmRleCA9PT0gZW5kSW5kZXgpIHsKKyAgICAgICAgICAgIGxhc3RUZXh0Tm9kZS5w
YXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShoaWdobGlnaHROb2RlLCBsYXN0VGV4dE5vZGUpOwor
ICAgICAgICAgICAgY2hhbmdlcy5wdXNoKHsgbm9kZTogaGlnaGxpZ2h0Tm9kZSwgdHlwZTogImFk
ZGVkIiwgbmV4dFNpYmxpbmc6IGxhc3RUZXh0Tm9kZSwgcGFyZW50OiBsYXN0VGV4dE5vZGUucGFy
ZW50RWxlbWVudCB9KTsKKyAgICAgICAgICAgIGhpZ2hsaWdodE5vZGVzLnB1c2goaGlnaGxpZ2h0
Tm9kZSk7CisKKyAgICAgICAgICAgIHZhciBwcmVmaXhOb2RlID0gb3duZXJEb2N1bWVudC5jcmVh
dGVUZXh0Tm9kZShsYXN0VGV4dC5zdWJzdHJpbmcoMCwgc3RhcnRPZmZzZXQgLSBub2RlUmFuZ2Vz
W3N0YXJ0SW5kZXhdLm9mZnNldCkpOworICAgICAgICAgICAgbGFzdFRleHROb2RlLnBhcmVudEVs
ZW1lbnQuaW5zZXJ0QmVmb3JlKHByZWZpeE5vZGUsIGhpZ2hsaWdodE5vZGUpOworICAgICAgICAg
ICAgY2hhbmdlcy5wdXNoKHsgbm9kZTogcHJlZml4Tm9kZSwgdHlwZTogImFkZGVkIiwgbmV4dFNp
Ymxpbmc6IGhpZ2hsaWdodE5vZGUsIHBhcmVudDogbGFzdFRleHROb2RlLnBhcmVudEVsZW1lbnQg
fSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgZmlyc3RUZXh0Tm9kZSA9IHRl
eHROb2RlU25hcHNob3Quc25hcHNob3RJdGVtKHN0YXJ0SW5kZXgpOworICAgICAgICAgICAgdmFy
IGZpcnN0VGV4dCA9IGZpcnN0VGV4dE5vZGUudGV4dENvbnRlbnQ7CisgICAgICAgICAgICB2YXIg
YW5jaG9yRWxlbWVudCA9IGZpcnN0VGV4dE5vZGUubmV4dFNpYmxpbmc7CisKKyAgICAgICAgICAg
IGZpcnN0VGV4dE5vZGUucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUoaGlnaGxpZ2h0Tm9kZSwg
YW5jaG9yRWxlbWVudCk7CisgICAgICAgICAgICBjaGFuZ2VzLnB1c2goeyBub2RlOiBoaWdobGln
aHROb2RlLCB0eXBlOiAiYWRkZWQiLCBuZXh0U2libGluZzogYW5jaG9yRWxlbWVudCwgcGFyZW50
OiBmaXJzdFRleHROb2RlLnBhcmVudEVsZW1lbnQgfSk7CisgICAgICAgICAgICBoaWdobGlnaHRO
b2Rlcy5wdXNoKGhpZ2hsaWdodE5vZGUpOworCisgICAgICAgICAgICBmaXJzdFRleHROb2RlLnRl
eHRDb250ZW50ID0gZmlyc3RUZXh0LnN1YnN0cmluZygwLCBzdGFydE9mZnNldCAtIG5vZGVSYW5n
ZXNbc3RhcnRJbmRleF0ub2Zmc2V0KTsKKyAgICAgICAgICAgIGNoYW5nZXMucHVzaCh7IG5vZGU6
IGZpcnN0VGV4dE5vZGUsIHR5cGU6ICJjaGFuZ2VkIiwgb2xkVGV4dDogZmlyc3RUZXh0LCBuZXdU
ZXh0OiBmaXJzdFRleHROb2RlLnRleHRDb250ZW50IH0pOworCisgICAgICAgICAgICBmb3IgKHZh
ciBqID0gc3RhcnRJbmRleCArIDE7IGogPCBlbmRJbmRleDsgaisrKSB7CisgICAgICAgICAgICAg
ICAgdmFyIHRleHROb2RlID0gdGV4dE5vZGVTbmFwc2hvdC5zbmFwc2hvdEl0ZW0oaik7CisgICAg
ICAgICAgICAgICAgdmFyIHRleHQgPSB0ZXh0Tm9kZS50ZXh0Q29udGVudDsKKyAgICAgICAgICAg
ICAgICB0ZXh0Tm9kZS50ZXh0Q29udGVudCA9ICIiOworICAgICAgICAgICAgICAgIGNoYW5nZXMu
cHVzaCh7IG5vZGU6IHRleHROb2RlLCB0eXBlOiAiY2hhbmdlZCIsIG9sZFRleHQ6IHRleHQsIG5l
d1RleHQ6IHRleHROb2RlLnRleHRDb250ZW50IH0pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIHN0YXJ0SW5kZXggPSBlbmRJbmRleDsKKyAgICAgICAgbm9kZVJhbmdlc1tzdGFy
dEluZGV4XS5vZmZzZXQgPSBlbmRPZmZzZXQ7CisgICAgICAgIG5vZGVSYW5nZXNbc3RhcnRJbmRl
eF0ubGVuZ3RoID0gbGFzdFRleHROb2RlLnRleHRDb250ZW50Lmxlbmd0aDsKKworICAgIH0KKyAg
ICByZXR1cm4gaGlnaGxpZ2h0Tm9kZXM7Cit9CisKK2Z1bmN0aW9uIGFwcGx5RG9tQ2hhbmdlcyhk
b21DaGFuZ2VzKQoreworICAgIGZvciAodmFyIGkgPSAwLCBzaXplID0gZG9tQ2hhbmdlcy5sZW5n
dGg7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgdmFyIGVudHJ5ID0gZG9tQ2hhbmdlc1tpXTsK
KyAgICAgICAgc3dpdGNoIChlbnRyeS50eXBlKSB7CisgICAgICAgIGNhc2UgImFkZGVkIjoKKyAg
ICAgICAgICAgIGVudHJ5LnBhcmVudC5pbnNlcnRCZWZvcmUoZW50cnkubm9kZSwgZW50cnkubmV4
dFNpYmxpbmcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgImNoYW5nZWQiOgor
ICAgICAgICAgICAgZW50cnkubm9kZS50ZXh0Q29udGVudCA9IGVudHJ5Lm5ld1RleHQ7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworZnVuY3Rpb24gcmV2ZXJ0RG9t
Q2hhbmdlcyhkb21DaGFuZ2VzKQoreworICAgIGZvciAodmFyIGkgPSBkb21DaGFuZ2VzLmxlbmd0
aCAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIHZhciBlbnRyeSA9IGRvbUNoYW5nZXNbaV07
CisgICAgICAgIHN3aXRjaCAoZW50cnkudHlwZSkgeworICAgICAgICBjYXNlICJhZGRlZCI6Cisg
ICAgICAgICAgICBpZiAoZW50cnkubm9kZS5wYXJlbnRFbGVtZW50KQorICAgICAgICAgICAgICAg
IGVudHJ5Lm5vZGUucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChlbnRyeS5ub2RlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJjaGFuZ2VkIjoKKyAgICAgICAgICAgIGVudHJ5
Lm5vZGUudGV4dENvbnRlbnQgPSBlbnRyeS5vbGRUZXh0OworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0hlYXBTbmFwc2hvdC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvSGVhcFNuYXBzaG90LmpzCmluZGV4IDk0ZDhiZjU0NTA5ZTI1MmI3OTQ2ZjA0YzU1OTk0
ZWJiY2Y0Y2EyMDYuLjdkZDExZWE1OTk2ZDZmOWQ3YTBlNjRiYmVmMDY0OTQ1ZGExMGI1ODIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90
LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90
LmpzCkBAIC0xNjEsNyArMTYxLDcgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdExvYWRlci5w
cm90b3R5cGUgPSB7CiAgICAgICAgICAgICB2YXIgY2xvc2luZ0JyYWNrZXRJbmRleCA9IHRoaXMu
X2ZpbmRCYWxhbmNlZEN1cmx5QnJhY2tldHMoKTsKICAgICAgICAgICAgIGlmIChjbG9zaW5nQnJh
Y2tldEluZGV4ID09PSAtMSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB0
aGlzLl9zbmFwc2hvdC5zbmFwc2hvdCA9IEpTT04ucGFyc2UodGhpcy5fanNvbi5zbGljZSgwLCBj
bG9zaW5nQnJhY2tldEluZGV4KSk7CisgICAgICAgICAgICB0aGlzLl9zbmFwc2hvdC5zbmFwc2hv
dCA9IC8qKiBAdHlwZSB7SGVhcFNuYXBzaG90SGVhZGVyfSAqL0pTT04ucGFyc2UodGhpcy5fanNv
bi5zbGljZSgwLCBjbG9zaW5nQnJhY2tldEluZGV4KSk7CiAgICAgICAgICAgICB0aGlzLl9qc29u
ID0gdGhpcy5fanNvbi5zbGljZShjbG9zaW5nQnJhY2tldEluZGV4KTsKICAgICAgICAgICAgIHRo
aXMuX3N0YXRlID0gImZpbmQtbm9kZXMiOwogICAgICAgICAgICAgdGhpcy5wdXNoSlNPTkNodW5r
KCIiKTsKQEAgLTg1NCw2ICs4NTQsMTkgQEAgZnVuY3Rpb24gSGVhcFNuYXBzaG90TWV0YWluZm8o
KQogICAgIHRoaXMudHlwZXMgPSBbXTsKIH0KIAorLyoqCisgKiBAY29uc3RydWN0b3IKKyAqLwor
ZnVuY3Rpb24gSGVhcFNuYXBzaG90SGVhZGVyKCkKK3sKKyAgICAvLyBOZXcgZm9ybWF0LgorICAg
IHRoaXMudGl0bGUgPSAiIjsKKyAgICB0aGlzLnVpZCA9IDA7CisgICAgdGhpcy5tZXRhID0gbmV3
IEhlYXBTbmFwc2hvdE1ldGFpbmZvKCk7CisgICAgdGhpcy5ub2RlX2NvdW50ID0gMDsKKyAgICB0
aGlzLmVkZ2VfY291bnQgPSAwOworfQorCiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3Rv
dHlwZSA9IHsKICAgICBfaW5pdDogZnVuY3Rpb24oKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90V29ya2VyLmpzIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RXb3JrZXIuanMKaW5k
ZXggM2E5YTJjYTM5NTVjZjMyNGMxOTMzMGFmMDhjNzkwZmU2MzlkM2IxNS4uN2MwNWNiZDc2NTE3
MThkMTRmZmQyZjVlYTU0ZmJiNjlkMTQ4YjBjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RXb3JrZXIuanMKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RXb3JrZXIuanMKQEAgLTMxLDEw
ICszMSw5IEBACiBXZWJJbnNwZWN0b3IgPSB7fTsKIFdlYkluc3BlY3Rvci5VSVN0cmluZyA9IGZ1
bmN0aW9uKHMpIHsgcmV0dXJuIHM7IH07CiAKLWltcG9ydFNjcmlwdHMoIkJpbmFyeVNlYXJjaC5q
cyIpOwogaW1wb3J0U2NyaXB0cygiSGVhcFNuYXBzaG90LmpzIik7CiBpbXBvcnRTY3JpcHRzKCJI
ZWFwU25hcHNob3RXb3JrZXJEaXNwYXRjaGVyLmpzIik7Ci1pbXBvcnRTY3JpcHRzKCJQYXJ0aWFs
UXVpY2tTb3J0LmpzIik7CitpbXBvcnRTY3JpcHRzKCJ1dGlsaXRpZXMuanMiKTsKIAogZnVuY3Rp
b24gcG9zdE1lc3NhZ2VXcmFwcGVyKG1lc3NhZ2UpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1BhcnRpYWxRdWlja1NvcnQuanMgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1BhcnRpYWxRdWlja1NvcnQuanMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGY3MWE3MjFmM2MwNmYxODdiMTNmZGM5Mzc5M2EyZjcxYzYyZTE2
MmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9QYXJ0aWFsUXVpY2tTb3J0LmpzCisrKyAvZGV2
L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLU9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5
cGUsICJzb3J0UmFuZ2UiLCB7IHZhbHVlOiAKLS8qKiBAdGhpcyB7QXJyYXl9ICovCi1mdW5jdGlv
bihjb21wYXJhdG9yLCBsZWZ0Qm91bmQsIHJpZ2h0Qm91bmQsIGspCi17Ci0gICAgZnVuY3Rpb24g
cXVpY2tTb3J0Rmlyc3RLKGFycmF5LCBjb21wYXJhdG9yLCBsZWZ0LCByaWdodCwgaykKLSAgICB7
Ci0gICAgICAgIGlmIChyaWdodCA8PSBsZWZ0KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB2YXIgcGl2b3RJbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChyaWdodCAtIGxl
ZnQpKSArIGxlZnQ7Ci0gICAgICAgIHZhciBwaXZvdE5ld0luZGV4ID0gYXJyYXkucGFydGl0aW9u
KGNvbXBhcmF0b3IsIGxlZnQsIHJpZ2h0LCBwaXZvdEluZGV4KTsKLSAgICAgICAgcXVpY2tTb3J0
Rmlyc3RLKGFycmF5LCBjb21wYXJhdG9yLCBsZWZ0LCBwaXZvdE5ld0luZGV4IC0gMSwgayk7Ci0g
ICAgICAgIGlmIChwaXZvdE5ld0luZGV4IDwgbGVmdCArIGsgLSAxKQotICAgICAgICAgICAgcXVp
Y2tTb3J0Rmlyc3RLKGFycmF5LCBjb21wYXJhdG9yLCBwaXZvdE5ld0luZGV4ICsgMSwgcmlnaHQs
IGspOwotICAgIH0KLQotICAgIGlmIChsZWZ0Qm91bmQgPT09IDAgJiYgcmlnaHRCb3VuZCA9PT0g
KHRoaXMubGVuZ3RoIC0gMSkgJiYgayA9PT0gdGhpcy5sZW5ndGgpCi0gICAgICAgIHRoaXMuc29y
dChjb21wYXJhdG9yKTsKLSAgICBlbHNlCi0gICAgICAgIHF1aWNrU29ydEZpcnN0Syh0aGlzLCBj
b21wYXJhdG9yLCBsZWZ0Qm91bmQsIHJpZ2h0Qm91bmQsIGspOwotICAgIHJldHVybiB0aGlzOwot
fX0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJL
aXQucXJjIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCmlu
ZGV4IGU0YjUwZWQ1YTc4ZDM3YjQ5MTU4YjllNmYyNDBhMTFlNjU4OTRkMjQuLjNlZTQ3MzZkZGEx
YmY1YzU3MjdlMTRjZTQzYjRkNzFlZGU5ODdlNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKQEAgLTEwLDcgKzEwLDYgQEAKICAgICA8ZmlsZT5B
dWRpdFJlc3VsdFZpZXcuanM8L2ZpbGU+CiAgICAgPGZpbGU+QXVkaXRSdWxlcy5qczwvZmlsZT4K
ICAgICA8ZmlsZT5BdWRpdHNQYW5lbC5qczwvZmlsZT4KLSAgICA8ZmlsZT5CaW5hcnlTZWFyY2gu
anM8L2ZpbGU+CiAgICAgPGZpbGU+Qm90dG9tVXBQcm9maWxlRGF0YUdyaWRUcmVlLmpzPC9maWxl
PgogICAgIDxmaWxlPkJyZWFrcG9pbnRNYW5hZ2VyLmpzPC9maWxlPgogICAgIDxmaWxlPkJyZWFr
cG9pbnRzU2lkZWJhclBhbmUuanM8L2ZpbGU+CkBAIC00Niw2ICs0NSw3IEBACiAgICAgPGZpbGU+
RE9NU3RvcmFnZS5qczwvZmlsZT4KICAgICA8ZmlsZT5ET01TdG9yYWdlSXRlbXNWaWV3LmpzPC9m
aWxlPgogICAgIDxmaWxlPkRPTVN5bnRheEhpZ2hsaWdodGVyLmpzPC9maWxlPgorICAgIDxmaWxl
PkRPTVV0aWxzLmpzPC9maWxlPgogICAgIDxmaWxlPkRyYXdlci5qczwvZmlsZT4KICAgICA8Zmls
ZT5FbGVtZW50c1BhbmVsLmpzPC9maWxlPgogICAgIDxmaWxlPkVsZW1lbnRzVHJlZU91dGxpbmUu
anM8L2ZpbGU+CkBAIC05MSw3ICs5MSw2IEBACiAgICAgPGZpbGU+T2JqZWN0UHJvcGVydGllc1Nl
Y3Rpb24uanM8L2ZpbGU+CiAgICAgPGZpbGU+UGFuZWwuanM8L2ZpbGU+CiAgICAgPGZpbGU+UGFu
ZWxFbmFibGVyVmlldy5qczwvZmlsZT4KLSAgICA8ZmlsZT5QYXJ0aWFsUXVpY2tTb3J0LmpzPC9m
aWxlPgogICAgIDxmaWxlPlBsYWNhcmQuanM8L2ZpbGU+CiAgICAgPGZpbGU+UG9wb3Zlci5qczwv
ZmlsZT4KICAgICA8ZmlsZT5Qcm9maWxlRGF0YUdyaWRUcmVlLmpzPC9maWxlPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKaW5kZXggMDRj
NjQwNWEzZDQxZmJiY2Q0MGFkMDAyNzJiZTIzYjZhYWVhYzQzZi4uMmY0MjFmMmUyOTU0Mzc4YWY3
NjQ0N2MyYWM0OTk4OWIwODExNGU4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCkBAIC0zNiw3ICszNiw3IEBAIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAg
ICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iaGVscFNjcmVl
bi5jc3MiPgogICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9
InBvcG92ZXIuY3NzIj4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ1
dGlsaXRpZXMuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0
IiBzcmM9IkJpbmFyeVNlYXJjaC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0
L2phdmFzY3JpcHQiIHNyYz0iRE9NVXRpbHMuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlw
ZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InRyZWVvdXRsaW5lLmpzIj48L3NjcmlwdD4KICAgICA8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJpbnNwZWN0b3IuanMiPjwvc2NyaXB0
PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlVJVXRpbHMuanMiPjwv
c2NyaXB0PgpAQCAtMTY0LDcgKzE2NCw2IEBAIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgICAgPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiIHNyYz0iVG9wRG93blByb2ZpbGVEYXRhR3JpZFRyZWUuanMiPjwvc2Ny
aXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlByb2ZpbGVWaWV3
LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJD
U1NTZWxlY3RvclByb2ZpbGVWaWV3LmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCIgc3JjPSJQYXJ0aWFsUXVpY2tTb3J0LmpzIj48L3NjcmlwdD4KICAgICA8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJIZWFwU25hcHNob3QuanMiPjwvc2Ny
aXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkhlYXBTbmFwc2hv
dFByb3h5LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIg
c3JjPSJIZWFwU25hcHNob3RXb3JrZXJEaXNwYXRjaGVyLmpzIj48L3NjcmlwdD4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC91dGlsaXRpZXMuanMKaW5kZXggN2RlZTE2
MGIxNmYzNmFkNDhmMzc3OGE5NDdiNzliYzYzMDcwN2IxMS4uODUwMTY2ZDZlMmVmMmFmN2E5YjQy
OTY4OWQ3YzBmOTUyOGM2M2RmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC91dGlsaXRpZXMuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC91dGlsaXRpZXMuanMKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjksNDAzICszMCw2IEBACiAgKiBodHRwOi8vZWpvaG4ub3JnL2Zp
bGVzL2pzZGlmZi5qcyAocmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlKS4KICAqLwogCi0v
KioKLSAqIEBwYXJhbSB7c3RyaW5nPX0gZGlyZWN0aW9uCi0gKi8KLU5vZGUucHJvdG90eXBlLnJh
bmdlT2ZXb3JkID0gZnVuY3Rpb24ob2Zmc2V0LCBzdG9wQ2hhcmFjdGVycywgc3RheVdpdGhpbk5v
ZGUsIGRpcmVjdGlvbikKLXsKLSAgICB2YXIgc3RhcnROb2RlOwotICAgIHZhciBzdGFydE9mZnNl
dCA9IDA7Ci0gICAgdmFyIGVuZE5vZGU7Ci0gICAgdmFyIGVuZE9mZnNldCA9IDA7Ci0KLSAgICBp
ZiAoIXN0YXlXaXRoaW5Ob2RlKQotICAgICAgICBzdGF5V2l0aGluTm9kZSA9IHRoaXM7Ci0KLSAg
ICBpZiAoIWRpcmVjdGlvbiB8fCBkaXJlY3Rpb24gPT09ICJiYWNrd2FyZCIgfHwgZGlyZWN0aW9u
ID09PSAiYm90aCIpIHsKLSAgICAgICAgdmFyIG5vZGUgPSB0aGlzOwotICAgICAgICB3aGlsZSAo
bm9kZSkgewotICAgICAgICAgICAgaWYgKG5vZGUgPT09IHN0YXlXaXRoaW5Ob2RlKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFzdGFydE5vZGUpCi0gICAgICAgICAgICAgICAgICAgIHN0YXJ0Tm9k
ZSA9IHN0YXlXaXRoaW5Ob2RlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHsK
LSAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSAobm9kZSA9PT0gdGhpcyA/IChvZmZzZXQgLSAx
KSA6IChub2RlLm5vZGVWYWx1ZS5sZW5ndGggLSAxKSk7Ci0gICAgICAgICAgICAgICAgZm9yICh2
YXIgaSA9IHN0YXJ0OyBpID49IDA7IC0taSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoc3Rv
cENoYXJhY3RlcnMuaW5kZXhPZihub2RlLm5vZGVWYWx1ZVtpXSkgIT09IC0xKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBzdGFydE5vZGUgPSBub2RlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhcnRPZmZzZXQgPSBpICsgMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBpZiAoc3RhcnROb2RlKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgICAgICBub2RlID0gbm9kZS50cmF2ZXJzZVByZXZpb3VzTm9kZShzdGF5V2l0aGluTm9k
ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXN0YXJ0Tm9kZSkgewotICAgICAgICAgICAg
c3RhcnROb2RlID0gc3RheVdpdGhpbk5vZGU7Ci0gICAgICAgICAgICBzdGFydE9mZnNldCA9IDA7
Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBzdGFydE5vZGUgPSB0aGlzOwotICAg
ICAgICBzdGFydE9mZnNldCA9IG9mZnNldDsKLSAgICB9Ci0KLSAgICBpZiAoIWRpcmVjdGlvbiB8
fCBkaXJlY3Rpb24gPT09ICJmb3J3YXJkIiB8fCBkaXJlY3Rpb24gPT09ICJib3RoIikgewotICAg
ICAgICBub2RlID0gdGhpczsKLSAgICAgICAgd2hpbGUgKG5vZGUpIHsKLSAgICAgICAgICAgIGlm
IChub2RlID09PSBzdGF5V2l0aGluTm9kZSkgewotICAgICAgICAgICAgICAgIGlmICghZW5kTm9k
ZSkKLSAgICAgICAgICAgICAgICAgICAgZW5kTm9kZSA9IHN0YXlXaXRoaW5Ob2RlOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobm9kZS5u
b2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHsKLSAgICAgICAgICAgICAgICB2YXIgc3RhcnQg
PSAobm9kZSA9PT0gdGhpcyA/IG9mZnNldCA6IDApOwotICAgICAgICAgICAgICAgIGZvciAodmFy
IGkgPSBzdGFydDsgaSA8IG5vZGUubm9kZVZhbHVlLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChzdG9wQ2hhcmFjdGVycy5pbmRleE9mKG5vZGUubm9kZVZhbHVlW2ldKSAh
PT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuZE5vZGUgPSBub2RlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZW5kT2Zmc2V0ID0gaTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZW5kTm9kZSkKLSAgICAgICAgICAgICAgICBicmVh
azsKLQotICAgICAgICAgICAgbm9kZSA9IG5vZGUudHJhdmVyc2VOZXh0Tm9kZShzdGF5V2l0aGlu
Tm9kZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWVuZE5vZGUpIHsKLSAgICAgICAgICAg
IGVuZE5vZGUgPSBzdGF5V2l0aGluTm9kZTsKLSAgICAgICAgICAgIGVuZE9mZnNldCA9IHN0YXlX
aXRoaW5Ob2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSA/IHN0YXlXaXRoaW5Ob2RlLm5v
ZGVWYWx1ZS5sZW5ndGggOiBzdGF5V2l0aGluTm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsKLSAgICAg
ICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGVuZE5vZGUgPSB0aGlzOwotICAgICAgICBlbmRP
ZmZzZXQgPSBvZmZzZXQ7Ci0gICAgfQotCi0gICAgdmFyIHJlc3VsdCA9IHRoaXMub3duZXJEb2N1
bWVudC5jcmVhdGVSYW5nZSgpOwotICAgIHJlc3VsdC5zZXRTdGFydChzdGFydE5vZGUsIHN0YXJ0
T2Zmc2V0KTsKLSAgICByZXN1bHQuc2V0RW5kKGVuZE5vZGUsIGVuZE9mZnNldCk7Ci0KLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi1Ob2RlLnByb3RvdHlwZS50cmF2ZXJzZU5leHRUZXh0Tm9kZSA9
IGZ1bmN0aW9uKHN0YXlXaXRoaW4pCi17Ci0gICAgdmFyIG5vZGUgPSB0aGlzLnRyYXZlcnNlTmV4
dE5vZGUoc3RheVdpdGhpbik7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICB3aGlsZSAobm9kZSAmJiBub2RlLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkKLSAgICAg
ICAgbm9kZSA9IG5vZGUudHJhdmVyc2VOZXh0Tm9kZShzdGF5V2l0aGluKTsKLQotICAgIHJldHVy
biBub2RlOwotfQotCi1Ob2RlLnByb3RvdHlwZS5yYW5nZUJvdW5kYXJ5Rm9yT2Zmc2V0ID0gZnVu
Y3Rpb24ob2Zmc2V0KQotewotICAgIHZhciBub2RlID0gdGhpcy50cmF2ZXJzZU5leHRUZXh0Tm9k
ZSh0aGlzKTsKLSAgICB3aGlsZSAobm9kZSAmJiBvZmZzZXQgPiBub2RlLm5vZGVWYWx1ZS5sZW5n
dGgpIHsKLSAgICAgICAgb2Zmc2V0IC09IG5vZGUubm9kZVZhbHVlLmxlbmd0aDsKLSAgICAgICAg
bm9kZSA9IG5vZGUudHJhdmVyc2VOZXh0VGV4dE5vZGUodGhpcyk7Ci0gICAgfQotICAgIGlmICgh
bm9kZSkKLSAgICAgICAgcmV0dXJuIHsgY29udGFpbmVyOiB0aGlzLCBvZmZzZXQ6IDAgfTsKLSAg
ICByZXR1cm4geyBjb250YWluZXI6IG5vZGUsIG9mZnNldDogb2Zmc2V0IH07Ci19Ci0KLUVsZW1l
bnQucHJvdG90eXBlLnJlbW92ZVN0eWxlQ2xhc3MgPSBmdW5jdGlvbihjbGFzc05hbWUpCi17Ci0g
ICAgdGhpcy5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7Ci19Ci0KLUVsZW1lbnQucHJvdG90
eXBlLnJlbW92ZU1hdGNoaW5nU3R5bGVDbGFzc2VzID0gZnVuY3Rpb24oY2xhc3NOYW1lUmVnZXgp
Ci17Ci0gICAgdmFyIHJlZ2V4ID0gbmV3IFJlZ0V4cCgiKF58XFxzKykiICsgY2xhc3NOYW1lUmVn
ZXggKyAiKCR8XFxzKykiKTsKLSAgICBpZiAocmVnZXgudGVzdCh0aGlzLmNsYXNzTmFtZSkpCi0g
ICAgICAgIHRoaXMuY2xhc3NOYW1lID0gdGhpcy5jbGFzc05hbWUucmVwbGFjZShyZWdleCwgIiAi
KTsKLX0KLQotRWxlbWVudC5wcm90b3R5cGUuYWRkU3R5bGVDbGFzcyA9IGZ1bmN0aW9uKGNsYXNz
TmFtZSkKLXsKLSAgICB0aGlzLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTsKLX0KLQotRWxlbWVu
dC5wcm90b3R5cGUuaGFzU3R5bGVDbGFzcyA9IGZ1bmN0aW9uKGNsYXNzTmFtZSkKLXsKLSAgICBy
ZXR1cm4gdGhpcy5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTsKLX0KLQotRWxlbWVudC5w
cm90b3R5cGUucG9zaXRpb25BdCA9IGZ1bmN0aW9uKHgsIHkpCi17Ci0gICAgdGhpcy5zdHlsZS5s
ZWZ0ID0geCArICJweCI7Ci0gICAgdGhpcy5zdHlsZS50b3AgPSB5ICsgInB4IjsKLX0KLQotRWxl
bWVudC5wcm90b3R5cGUucHJ1bmVFbXB0eVRleHROb2RlcyA9IGZ1bmN0aW9uKCkKLXsKLSAgICB2
YXIgc2libGluZyA9IHRoaXMuZmlyc3RDaGlsZDsKLSAgICB3aGlsZSAoc2libGluZykgewotICAg
ICAgICB2YXIgbmV4dFNpYmxpbmcgPSBzaWJsaW5nLm5leHRTaWJsaW5nOwotICAgICAgICBpZiAo
c2libGluZy5ub2RlVHlwZSA9PT0gdGhpcy5URVhUX05PREUgJiYgc2libGluZy5ub2RlVmFsdWUg
PT09ICIiKQotICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZChzaWJsaW5nKTsKLSAgICAgICAg
c2libGluZyA9IG5leHRTaWJsaW5nOwotICAgIH0KLX0KLQotRWxlbWVudC5wcm90b3R5cGUuaXNT
Y3JvbGxlZFRvQm90dG9tID0gZnVuY3Rpb24oKQotewotICAgIC8vIFRoaXMgY29kZSB3b3JrcyBv
bmx5IGZvciAwLXdpZHRoIGJvcmRlcgotICAgIHJldHVybiB0aGlzLnNjcm9sbFRvcCArIHRoaXMu
Y2xpZW50SGVpZ2h0ID09PSB0aGlzLnNjcm9sbEhlaWdodDsKLX0KLQotTm9kZS5wcm90b3R5cGUu
ZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhOb2RlTmFtZUluQXJyYXkgPSBmdW5jdGlvbihuYW1lQXJy
YXkpCi17Ci0gICAgZm9yICh2YXIgbm9kZSA9IHRoaXM7IG5vZGUgJiYgbm9kZSAhPT0gdGhpcy5v
d25lckRvY3VtZW50OyBub2RlID0gbm9kZS5wYXJlbnROb2RlKQotICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IG5hbWVBcnJheS5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGlmIChub2RlLm5v
ZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWVBcnJheVtpXS50b0xvd2VyQ2FzZSgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgIHJldHVybiBudWxsOwotfQotCi1Ob2RlLnBy
b3RvdHlwZS5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aE5vZGVOYW1lID0gZnVuY3Rpb24obm9kZU5h
bWUpCi17Ci0gICAgcmV0dXJuIHRoaXMuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhOb2RlTmFtZUlu
QXJyYXkoW25vZGVOYW1lXSk7Ci19Ci0KLU5vZGUucHJvdG90eXBlLmVuY2xvc2luZ05vZGVPclNl
bGZXaXRoQ2xhc3MgPSBmdW5jdGlvbihjbGFzc05hbWUpCi17Ci0gICAgZm9yICh2YXIgbm9kZSA9
IHRoaXM7IG5vZGUgJiYgbm9kZSAhPT0gdGhpcy5vd25lckRvY3VtZW50OyBub2RlID0gbm9kZS5w
YXJlbnROb2RlKQotICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05P
REUgJiYgbm9kZS5oYXNTdHlsZUNsYXNzKGNsYXNzTmFtZSkpCi0gICAgICAgICAgICByZXR1cm4g
bm9kZTsKLSAgICByZXR1cm4gbnVsbDsKLX0KLQotTm9kZS5wcm90b3R5cGUuZW5jbG9zaW5nTm9k
ZVdpdGhDbGFzcyA9IGZ1bmN0aW9uKGNsYXNzTmFtZSkKLXsKLSAgICBpZiAoIXRoaXMucGFyZW50
Tm9kZSkKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgcmV0dXJuIHRoaXMucGFyZW50Tm9kZS5l
bmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKGNsYXNzTmFtZSk7Ci19Ci0KLUVsZW1lbnQucHJv
dG90eXBlLnF1ZXJ5ID0gZnVuY3Rpb24ocXVlcnkpCi17Ci0gICAgcmV0dXJuIHRoaXMub3duZXJE
b2N1bWVudC5ldmFsdWF0ZShxdWVyeSwgdGhpcywgbnVsbCwgWFBhdGhSZXN1bHQuRklSU1RfT1JE
RVJFRF9OT0RFX1RZUEUsIG51bGwpLnNpbmdsZU5vZGVWYWx1ZTsKLX0KLQotRWxlbWVudC5wcm90
b3R5cGUucmVtb3ZlQ2hpbGRyZW4gPSBmdW5jdGlvbigpCi17Ci0gICAgaWYgKHRoaXMuZmlyc3RD
aGlsZCkKLSAgICAgICAgdGhpcy50ZXh0Q29udGVudCA9ICIiOwotfQotCi1FbGVtZW50LnByb3Rv
dHlwZS5pc0luc2VydGlvbkNhcmV0SW5zaWRlID0gZnVuY3Rpb24oKQotewotICAgIHZhciBzZWxl
Y3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7Ci0gICAgaWYgKCFzZWxlY3Rpb24ucmFuZ2VD
b3VudCB8fCAhc2VsZWN0aW9uLmlzQ29sbGFwc2VkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgdmFyIHNlbGVjdGlvblJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7Ci0gICAgcmV0
dXJuIHNlbGVjdGlvblJhbmdlLnN0YXJ0Q29udGFpbmVyLmlzU2VsZk9yRGVzY2VuZGFudCh0aGlz
KTsKLX0KLQotLyoqCi0gKiBAcGFyYW0ge3N0cmluZz19IGNsYXNzTmFtZQotICovCi1FbGVtZW50
LnByb3RvdHlwZS5jcmVhdGVDaGlsZCA9IGZ1bmN0aW9uKGVsZW1lbnROYW1lLCBjbGFzc05hbWUp
Ci17Ci0gICAgdmFyIGVsZW1lbnQgPSB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChl
bGVtZW50TmFtZSk7Ci0gICAgaWYgKGNsYXNzTmFtZSkKLSAgICAgICAgZWxlbWVudC5jbGFzc05h
bWUgPSBjbGFzc05hbWU7Ci0gICAgdGhpcy5hcHBlbmRDaGlsZChlbGVtZW50KTsKLSAgICByZXR1
cm4gZWxlbWVudDsKLX0KLQotRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUuY3JlYXRlQ2hpbGQg
PSBFbGVtZW50LnByb3RvdHlwZS5jcmVhdGVDaGlsZDsKLQotLyoqCi0gKiBAcmV0dXJuIHtudW1i
ZXJ9Ci0gKi8KLUVsZW1lbnQucHJvdG90eXBlLnRvdGFsT2Zmc2V0TGVmdCA9IGZ1bmN0aW9uKCkK
LXsKLSAgICByZXR1cm4gdGhpcy50b3RhbE9mZnNldCgpLmxlZnQ7Ci19Ci0KLS8qKgotICogQHJl
dHVybiB7bnVtYmVyfQotICovCi1FbGVtZW50LnByb3RvdHlwZS50b3RhbE9mZnNldFRvcCA9IGZ1
bmN0aW9uKCkKLXsKLSAgICByZXR1cm4gdGhpcy50b3RhbE9mZnNldCgpLnRvcDsKLQotfQotCi1F
bGVtZW50LnByb3RvdHlwZS50b3RhbE9mZnNldCA9IGZ1bmN0aW9uKCkKLXsKLSAgICB2YXIgdG90
YWxMZWZ0ID0gMDsKLSAgICB2YXIgdG90YWxUb3AgPSAwOwotCi0gICAgZm9yICh2YXIgZWxlbWVu
dCA9IHRoaXM7IGVsZW1lbnQ7IGVsZW1lbnQgPSBlbGVtZW50Lm9mZnNldFBhcmVudCkgewotICAg
ICAgICB0b3RhbExlZnQgKz0gZWxlbWVudC5vZmZzZXRMZWZ0OwotICAgICAgICB0b3RhbFRvcCAr
PSBlbGVtZW50Lm9mZnNldFRvcDsKLSAgICAgICAgaWYgKHRoaXMgIT09IGVsZW1lbnQpIHsKLSAg
ICAgICAgICAgIHRvdGFsTGVmdCArPSBlbGVtZW50LmNsaWVudExlZnQgLSBlbGVtZW50LnNjcm9s
bExlZnQ7Ci0gICAgICAgICAgICB0b3RhbFRvcCArPSBlbGVtZW50LmNsaWVudFRvcCAtIGVsZW1l
bnQuc2Nyb2xsVG9wOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgbGVmdDogdG90
YWxMZWZ0LCB0b3A6IHRvdGFsVG9wIH07Ci19Ci0KLUVsZW1lbnQucHJvdG90eXBlLnNjcm9sbE9m
ZnNldCA9IGZ1bmN0aW9uKCkKLXsKLSAgICB2YXIgY3VyTGVmdCA9IDA7Ci0gICAgdmFyIGN1clRv
cCA9IDA7Ci0gICAgZm9yICh2YXIgZWxlbWVudCA9IHRoaXM7IGVsZW1lbnQ7IGVsZW1lbnQgPSBl
bGVtZW50LnNjcm9sbFBhcmVudCkgewotICAgICAgICBjdXJMZWZ0ICs9IGVsZW1lbnQuc2Nyb2xs
TGVmdDsKLSAgICAgICAgY3VyVG9wICs9IGVsZW1lbnQuc2Nyb2xsVG9wOwotICAgIH0KLSAgICBy
ZXR1cm4geyBsZWZ0OiBjdXJMZWZ0LCB0b3A6IGN1clRvcCB9OwotfQotCi0vKioKLSAqIEBjb25z
dHJ1Y3RvcgotICogQHBhcmFtIHtudW1iZXI9fSB4Ci0gKiBAcGFyYW0ge251bWJlcj19IHkKLSAq
IEBwYXJhbSB7bnVtYmVyPX0gd2lkdGgKLSAqIEBwYXJhbSB7bnVtYmVyPX0gaGVpZ2h0Ci0gKi8K
LWZ1bmN0aW9uIEFuY2hvckJveCh4LCB5LCB3aWR0aCwgaGVpZ2h0KQotewotICAgIHRoaXMueCA9
IHggfHwgMDsKLSAgICB0aGlzLnkgPSB5IHx8IDA7Ci0gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8
IDA7Ci0gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDsKLX0KLQotLyoqCi0gKiBAcGFyYW0g
e1dpbmRvd30gdGFyZ2V0V2luZG93Ci0gKiBAcmV0dXJuIHtBbmNob3JCb3h9Ci0gKi8KLUVsZW1l
bnQucHJvdG90eXBlLm9mZnNldFJlbGF0aXZlVG9XaW5kb3cgPSBmdW5jdGlvbih0YXJnZXRXaW5k
b3cpCi17Ci0gICAgdmFyIGVsZW1lbnRPZmZzZXQgPSBuZXcgQW5jaG9yQm94KCk7Ci0gICAgdmFy
IGN1ckVsZW1lbnQgPSB0aGlzOwotICAgIHZhciBjdXJXaW5kb3cgPSB0aGlzLm93bmVyRG9jdW1l
bnQuZGVmYXVsdFZpZXc7Ci0gICAgd2hpbGUgKGN1cldpbmRvdyAmJiBjdXJFbGVtZW50KSB7Ci0g
ICAgICAgIGVsZW1lbnRPZmZzZXQueCArPSBjdXJFbGVtZW50LnRvdGFsT2Zmc2V0TGVmdCgpOwot
ICAgICAgICBlbGVtZW50T2Zmc2V0LnkgKz0gY3VyRWxlbWVudC50b3RhbE9mZnNldFRvcCgpOwot
ICAgICAgICBpZiAoY3VyV2luZG93ID09PSB0YXJnZXRXaW5kb3cpCi0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICBjdXJFbGVtZW50ID0gY3VyV2luZG93LmZyYW1lRWxlbWVudDsKLSAgICAg
ICAgY3VyV2luZG93ID0gY3VyV2luZG93LnBhcmVudDsKLSAgICB9Ci0KLSAgICByZXR1cm4gZWxl
bWVudE9mZnNldDsKLX0KLQotLyoqCi0gKiBAcGFyYW0ge1dpbmRvd30gdGFyZ2V0V2luZG93Ci0g
KiBAcmV0dXJuIHtBbmNob3JCb3h9Ci0gKi8KLUVsZW1lbnQucHJvdG90eXBlLmJveEluV2luZG93
ID0gZnVuY3Rpb24odGFyZ2V0V2luZG93KQotewotICAgIHRhcmdldFdpbmRvdyA9IHRhcmdldFdp
bmRvdyB8fCB0aGlzLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7Ci0KLSAgICB2YXIgYW5jaG9y
Qm94ID0gdGhpcy5vZmZzZXRSZWxhdGl2ZVRvV2luZG93KHdpbmRvdyk7Ci0gICAgYW5jaG9yQm94
LndpZHRoID0gTWF0aC5taW4odGhpcy5vZmZzZXRXaWR0aCwgd2luZG93LmlubmVyV2lkdGggLSBh
bmNob3JCb3gueCk7Ci0gICAgYW5jaG9yQm94LmhlaWdodCA9IE1hdGgubWluKHRoaXMub2Zmc2V0
SGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgLSBhbmNob3JCb3gueSk7Ci0KLSAgICByZXR1cm4g
YW5jaG9yQm94OwotfQotCi0vKioKLSAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0Ci0gKi8KLUVsZW1l
bnQucHJvdG90eXBlLnNldFRleHRBbmRUaXRsZSA9IGZ1bmN0aW9uKHRleHQpCi17Ci0gICAgdGhp
cy50ZXh0Q29udGVudCA9IHRleHQ7Ci0gICAgdGhpcy50aXRsZSA9IHRleHQ7Ci19Ci0KLUtleWJv
YXJkRXZlbnQucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oImRhdGEiLCBmdW5jdGlvbigpCi17
Ci0gICAgLy8gRW11bGF0ZSAiZGF0YSIgYXR0cmlidXRlIGZyb20gRE9NIDMgVGV4dElucHV0IGV2
ZW50LgotICAgIC8vIFNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMv
I2V2ZW50cy1FdmVudHMtVGV4dEV2ZW50LWRhdGEKLSAgICBzd2l0Y2ggKHRoaXMudHlwZSkgewot
ICAgICAgICBjYXNlICJrZXlwcmVzcyI6Ci0gICAgICAgICAgICBpZiAoIXRoaXMuY3RybEtleSAm
JiAhdGhpcy5tZXRhS2V5KQotICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJD
b2RlKHRoaXMuY2hhckNvZGUpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJl
dHVybiAiIjsKLSAgICAgICAgY2FzZSAia2V5ZG93biI6Ci0gICAgICAgIGNhc2UgImtleXVwIjoK
LSAgICAgICAgICAgIGlmICghdGhpcy5jdHJsS2V5ICYmICF0aGlzLm1ldGFLZXkgJiYgIXRoaXMu
YWx0S2V5KQotICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMu
d2hpY2gpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJldHVybiAiIjsKLSAg
ICB9Ci19KTsKLQotLyoqCi0gKiBAcGFyYW0ge2Jvb2xlYW49fSBwcmV2ZW50RGVmYXVsdAotICov
Ci1FdmVudC5wcm90b3R5cGUuY29uc3VtZSA9IGZ1bmN0aW9uKHByZXZlbnREZWZhdWx0KQotewot
ICAgIHRoaXMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7Ci0gICAgaWYgKHByZXZlbnREZWZh
dWx0KQotICAgICAgICB0aGlzLnByZXZlbnREZWZhdWx0KCk7Ci0gICAgdGhpcy5oYW5kbGVkID0g
dHJ1ZTsKLX0KLQotVGV4dC5wcm90b3R5cGUuc2VsZWN0ID0gZnVuY3Rpb24oc3RhcnQsIGVuZCkK
LXsKLSAgICBzdGFydCA9IHN0YXJ0IHx8IDA7Ci0gICAgZW5kID0gZW5kIHx8IHRoaXMudGV4dENv
bnRlbnQubGVuZ3RoOwotCi0gICAgaWYgKHN0YXJ0IDwgMCkKLSAgICAgICAgc3RhcnQgPSBlbmQg
KyBzdGFydDsKLQotICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLm93bmVyRG9jdW1lbnQuZGVmYXVs
dFZpZXcuZ2V0U2VsZWN0aW9uKCk7Ci0gICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpOwot
ICAgIHZhciByYW5nZSA9IHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgpOwotICAgIHJh
bmdlLnNldFN0YXJ0KHRoaXMsIHN0YXJ0KTsKLSAgICByYW5nZS5zZXRFbmQodGhpcywgZW5kKTsK
LSAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpOwotICAgIHJldHVybiB0aGlzOwotfQotCi1F
bGVtZW50LnByb3RvdHlwZS5zZWxlY3Rpb25MZWZ0T2Zmc2V0ID0gZnVuY3Rpb24oKQotewotICAg
IC8vIENhbGN1bGF0ZSBzZWxlY3Rpb24gb2Zmc2V0IHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGVs
ZW1lbnQuCi0KLSAgICB2YXIgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwotICAg
IGlmICghc2VsZWN0aW9uLmNvbnRhaW5zTm9kZSh0aGlzLCB0cnVlKSkKLSAgICAgICAgcmV0dXJu
IG51bGw7Ci0KLSAgICB2YXIgbGVmdE9mZnNldCA9IHNlbGVjdGlvbi5hbmNob3JPZmZzZXQ7Ci0g
ICAgdmFyIG5vZGUgPSBzZWxlY3Rpb24uYW5jaG9yTm9kZTsKLQotICAgIHdoaWxlIChub2RlICE9
PSB0aGlzKSB7Ci0gICAgICAgIHdoaWxlIChub2RlLnByZXZpb3VzU2libGluZykgewotICAgICAg
ICAgICAgbm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nOwotICAgICAgICAgICAgbGVmdE9mZnNl
dCArPSBub2RlLnRleHRDb250ZW50Lmxlbmd0aDsKLSAgICAgICAgfQotICAgICAgICBub2RlID0g
bm9kZS5wYXJlbnROb2RlOwotICAgIH0KLQotICAgIHJldHVybiBsZWZ0T2Zmc2V0OwotfQotCiBT
dHJpbmcucHJvdG90eXBlLmhhc1N1YnN0cmluZyA9IGZ1bmN0aW9uKHN0cmluZywgY2FzZUluc2Vu
c2l0aXZlKQogewogICAgIGlmICghY2FzZUluc2Vuc2l0aXZlKQpAQCAtNTY2LDY5ICsxNzAsNiBA
QCBTdHJpbmcucHJvdG90eXBlLnJlbW92ZVVSTEZyYWdtZW50ID0gZnVuY3Rpb24oKQogICAgIHJl
dHVybiB0aGlzLnN1YnN0cmluZygwLCBmcmFnbWVudEluZGV4KTsKIH0KIAotTm9kZS5wcm90b3R5
cGUuaXNBbmNlc3RvciA9IGZ1bmN0aW9uKG5vZGUpCi17Ci0gICAgaWYgKCFub2RlKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICB2YXIgY3VycmVudE5vZGUgPSBub2RlLnBhcmVudE5vZGU7
Ci0gICAgd2hpbGUgKGN1cnJlbnROb2RlKSB7Ci0gICAgICAgIGlmICh0aGlzID09PSBjdXJyZW50
Tm9kZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBjdXJyZW50Tm9kZSA9IGN1
cnJlbnROb2RlLnBhcmVudE5vZGU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotTm9k
ZS5wcm90b3R5cGUuaXNEZXNjZW5kYW50ID0gZnVuY3Rpb24oZGVzY2VuZGFudCkKLXsKLSAgICBy
ZXR1cm4gISFkZXNjZW5kYW50ICYmIGRlc2NlbmRhbnQuaXNBbmNlc3Rvcih0aGlzKTsKLX0KLQot
Tm9kZS5wcm90b3R5cGUuaXNTZWxmT3JBbmNlc3RvciA9IGZ1bmN0aW9uKG5vZGUpCi17Ci0gICAg
cmV0dXJuICEhbm9kZSAmJiAobm9kZSA9PT0gdGhpcyB8fCB0aGlzLmlzQW5jZXN0b3Iobm9kZSkp
OwotfQotCi1Ob2RlLnByb3RvdHlwZS5pc1NlbGZPckRlc2NlbmRhbnQgPSBmdW5jdGlvbihub2Rl
KQotewotICAgIHJldHVybiAhIW5vZGUgJiYgKG5vZGUgPT09IHRoaXMgfHwgdGhpcy5pc0Rlc2Nl
bmRhbnQobm9kZSkpOwotfQotCi1Ob2RlLnByb3RvdHlwZS50cmF2ZXJzZU5leHROb2RlID0gZnVu
Y3Rpb24oc3RheVdpdGhpbikKLXsKLSAgICB2YXIgbm9kZSA9IHRoaXMuZmlyc3RDaGlsZDsKLSAg
ICBpZiAobm9kZSkKLSAgICAgICAgcmV0dXJuIG5vZGU7Ci0KLSAgICBpZiAoc3RheVdpdGhpbiAm
JiB0aGlzID09PSBzdGF5V2l0aGluKQotICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgIG5vZGUg
PSB0aGlzLm5leHRTaWJsaW5nOwotICAgIGlmIChub2RlKQotICAgICAgICByZXR1cm4gbm9kZTsK
LQotICAgIG5vZGUgPSB0aGlzOwotICAgIHdoaWxlIChub2RlICYmICFub2RlLm5leHRTaWJsaW5n
ICYmICghc3RheVdpdGhpbiB8fCAhbm9kZS5wYXJlbnROb2RlIHx8IG5vZGUucGFyZW50Tm9kZSAh
PT0gc3RheVdpdGhpbikpCi0gICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7Ci0gICAgaWYg
KCFub2RlKQotICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgIHJldHVybiBub2RlLm5leHRTaWJs
aW5nOwotfQotCi1Ob2RlLnByb3RvdHlwZS50cmF2ZXJzZVByZXZpb3VzTm9kZSA9IGZ1bmN0aW9u
KHN0YXlXaXRoaW4pCi17Ci0gICAgaWYgKHN0YXlXaXRoaW4gJiYgdGhpcyA9PT0gc3RheVdpdGhp
bikKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgdmFyIG5vZGUgPSB0aGlzLnByZXZpb3VzU2li
bGluZzsKLSAgICB3aGlsZSAobm9kZSAmJiBub2RlLmxhc3RDaGlsZCkKLSAgICAgICAgbm9kZSA9
IG5vZGUubGFzdENoaWxkOwotICAgIGlmIChub2RlKQotICAgICAgICByZXR1cm4gbm9kZTsKLSAg
ICByZXR1cm4gdGhpcy5wYXJlbnROb2RlOwotfQotCiBOdW1iZXIuY29uc3RyYWluID0gZnVuY3Rp
b24obnVtLCBtaW4sIG1heCkKIHsKICAgICBpZiAobnVtIDwgbWluKQpAQCAtNjUyLDEyICsxOTMs
NiBAQCBEYXRlLnByb3RvdHlwZS50b0lTTzg2MDFDb21wYWN0ID0gZnVuY3Rpb24oKQogICAgICAg
ICAgICBsZWFkWmVybyh0aGlzLmdldFNlY29uZHMoKSk7CiB9CiAKLUhUTUxUZXh0QXJlYUVsZW1l
bnQucHJvdG90eXBlLm1vdmVDdXJzb3JUb0VuZCA9IGZ1bmN0aW9uKCkKLXsKLSAgICB2YXIgbGVu
Z3RoID0gdGhpcy52YWx1ZS5sZW5ndGg7Ci0gICAgdGhpcy5zZXRTZWxlY3Rpb25SYW5nZShsZW5n
dGgsIGxlbmd0aCk7Ci19Ci0KIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUs
ICJyZW1vdmUiLAogewogICAgIC8qKgpAQCAtNzQ4LDYgKzI4MywzNiBAQCBPYmplY3QuZGVmaW5l
UHJvcGVydHkoQXJyYXkucHJvdG90eXBlLCAicGFydGl0aW9uIiwKICAgICB9CiB9KTsKIAorT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KEFycmF5LnByb3RvdHlwZSwgInNvcnRSYW5nZSIsCit7CisgICAg
LyoqCisgICAgICogQHRoaXMge0FycmF5LjxudW1iZXI+fQorICAgICAqIEBwYXJhbSB7ZnVuY3Rp
b24obnVtYmVyLG51bWJlcik6Ym9vbGVhbn0gY29tcGFyYXRvcgorICAgICAqIEBwYXJhbSB7bnVt
YmVyfSBsZWZ0Qm91bmQKKyAgICAgKiBAcGFyYW0ge251bWJlcn0gcmlnaHRCb3VuZAorICAgICAq
IEBwYXJhbSB7bnVtYmVyfSBrCisgICAgICovCisgICAgdmFsdWU6IGZ1bmN0aW9uKGNvbXBhcmF0
b3IsIGxlZnRCb3VuZCwgcmlnaHRCb3VuZCwgaykKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIHF1
aWNrU29ydEZpcnN0SyhhcnJheSwgY29tcGFyYXRvciwgbGVmdCwgcmlnaHQsIGspCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChyaWdodCA8PSBsZWZ0KQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIHZhciBwaXZvdEluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgp
ICogKHJpZ2h0IC0gbGVmdCkpICsgbGVmdDsKKyAgICAgICAgICAgIHZhciBwaXZvdE5ld0luZGV4
ID0gYXJyYXkucGFydGl0aW9uKGNvbXBhcmF0b3IsIGxlZnQsIHJpZ2h0LCBwaXZvdEluZGV4KTsK
KyAgICAgICAgICAgIHF1aWNrU29ydEZpcnN0SyhhcnJheSwgY29tcGFyYXRvciwgbGVmdCwgcGl2
b3ROZXdJbmRleCAtIDEsIGspOworICAgICAgICAgICAgaWYgKHBpdm90TmV3SW5kZXggPCBsZWZ0
ICsgayAtIDEpCisgICAgICAgICAgICAgICAgcXVpY2tTb3J0Rmlyc3RLKGFycmF5LCBjb21wYXJh
dG9yLCBwaXZvdE5ld0luZGV4ICsgMSwgcmlnaHQsIGspOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGxlZnRCb3VuZCA9PT0gMCAmJiByaWdodEJvdW5kID09PSAodGhpcy5sZW5ndGggLSAxKSAm
JiBrID09PSB0aGlzLmxlbmd0aCkKKyAgICAgICAgICAgIHRoaXMuc29ydChjb21wYXJhdG9yKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcXVpY2tTb3J0Rmlyc3RLKHRoaXMsIGNvbXBhcmF0
b3IsIGxlZnRCb3VuZCwgcmlnaHRCb3VuZCwgayk7CisgICAgICAgIHJldHVybiB0aGlzOworICAg
IH0KK30pOworCiBPYmplY3QuZGVmaW5lUHJvcGVydHkoQXJyYXkucHJvdG90eXBlLCAicXNlbGVj
dCIsCiB7CiAgICAgLyoqCkBAIC03NzYsNiArMzQxLDYzIEBAIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShBcnJheS5wcm90b3R5cGUsICJxc2VsZWN0IiwKICAgICB9CiB9KTsKIAorLyoqCisgKiBAcGFy
YW0geyp9IG9iamVjdAorICogQHBhcmFtIHtBcnJheS48Kj59IGFycmF5CisgKiBAcGFyYW0ge2Z1
bmN0aW9uKCosICopOm51bWJlcn0gY29tcGFyYXRvcgorICovCitmdW5jdGlvbiBiaW5hcnlTZWFy
Y2gob2JqZWN0LCBhcnJheSwgY29tcGFyYXRvcikKK3sKKyAgICB2YXIgZmlyc3QgPSAwOworICAg
IHZhciBsYXN0ID0gYXJyYXkubGVuZ3RoIC0gMTsKKworICAgIHdoaWxlIChmaXJzdCA8PSBsYXN0
KSB7CisgICAgICAgIHZhciBtaWQgPSAoZmlyc3QgKyBsYXN0KSA+PiAxOworICAgICAgICB2YXIg
YyA9IGNvbXBhcmF0b3Iob2JqZWN0LCBhcnJheVttaWRdKTsKKyAgICAgICAgaWYgKGMgPiAwKQor
ICAgICAgICAgICAgZmlyc3QgPSBtaWQgKyAxOworICAgICAgICBlbHNlIGlmIChjIDwgMCkKKyAg
ICAgICAgICAgIGxhc3QgPSBtaWQgLSAxOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1
cm4gbWlkOworICAgIH0KKworICAgIC8vIFJldHVybiB0aGUgbmVhcmVzdCBsZXNzZXIgaW5kZXgs
ICItMSIgbWVhbnMgIjAsICItMiIgbWVhbnMgIjEiLCBldGMuCisgICAgcmV0dXJuIC0oZmlyc3Qg
KyAxKTsKK30KKworT2JqZWN0LmRlZmluZVByb3BlcnR5KEFycmF5LnByb3RvdHlwZSwgImJpbmFy
eUluZGV4T2YiLAoreworICAgIC8qKgorICAgICAqIEB0aGlzIHtBcnJheS48Kj59CisgICAgICog
QHBhcmFtIHtmdW5jdGlvbigqLCAqKTpudW1iZXJ9IGNvbXBhcmF0b3IKKyAgICAgKi8KKyAgICB2
YWx1ZTogZnVuY3Rpb24odmFsdWUsIGNvbXBhcmF0b3IpCisgICAgeworICAgICAgICB2YXIgcmVz
dWx0ID0gYmluYXJ5U2VhcmNoKHZhbHVlLCB0aGlzLCBjb21wYXJhdG9yKTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdCA+PSAwID8gcmVzdWx0IDogLTE7CisgICAgfQorfSk7CisKKy8qKgorICogQHBh
cmFtIHsqfSBhbk9iamVjdAorICogQHBhcmFtIHtBcnJheS48Kj59IGFMaXN0CisgKiBAcGFyYW0g
e2Z1bmN0aW9uKCosICopfSBhRnVuY3Rpb24KKyAqLworZnVuY3Rpb24gaW5zZXJ0aW9uSW5kZXhG
b3JPYmplY3RJbkxpc3RTb3J0ZWRCeUZ1bmN0aW9uKGFuT2JqZWN0LCBhTGlzdCwgYUZ1bmN0aW9u
KQoreworICAgIHZhciBpbmRleCA9IGJpbmFyeVNlYXJjaChhbk9iamVjdCwgYUxpc3QsIGFGdW5j
dGlvbik7CisgICAgaWYgKGluZGV4IDwgMCkKKyAgICAgICAgLy8gU2VlIGJpbmFyeVNlYXJjaCBp
bXBsZW1lbnRhdGlvbi4KKyAgICAgICAgcmV0dXJuIC1pbmRleCAtIDE7CisgICAgZWxzZSB7Cisg
ICAgICAgIC8vIFJldHVybiB0aGUgZmlyc3Qgb2NjdXJhbmNlIG9mIGFuIGl0ZW0gaW4gdGhlIGxp
c3QuCisgICAgICAgIHdoaWxlIChpbmRleCA+IDAgJiYgYUZ1bmN0aW9uKGFuT2JqZWN0LCBhTGlz
dFtpbmRleCAtIDFdKSA9PT0gMCkKKyAgICAgICAgICAgIGluZGV4LS07CisgICAgICAgIHJldHVy
biBpbmRleDsKKyAgICB9Cit9CisKIEFycmF5LmRpZmYgPSBmdW5jdGlvbihsZWZ0LCByaWdodCkK
IHsKICAgICB2YXIgbyA9IGxlZnQ7CkBAIC05OTYsMTU1ICs2MTgsNiBAQCBTdHJpbmcuZm9ybWF0
ID0gZnVuY3Rpb24oZm9ybWF0LCBzdWJzdGl0dXRpb25zLCBmb3JtYXR0ZXJzLCBpbml0aWFsVmFs
dWUsIGFwcGVuZAogICAgIHJldHVybiB7IGZvcm1hdHRlZFJlc3VsdDogcmVzdWx0LCB1bnVzZWRT
dWJzdGl0dXRpb25zOiB1bnVzZWRTdWJzdGl0dXRpb25zIH07CiB9CiAKLWZ1bmN0aW9uIGlzRW50
ZXJLZXkoZXZlbnQpIHsKLSAgICAvLyBDaGVjayBpZiBpbiBJTUUuCi0gICAgcmV0dXJuIGV2ZW50
LmtleUNvZGUgIT09IDIyOSAmJiBldmVudC5rZXlJZGVudGlmaWVyID09PSAiRW50ZXIiOwotfQot
Ci1mdW5jdGlvbiBjb25zdW1lRXZlbnQoZSkKLXsKLSAgICBlLmNvbnN1bWUoKTsKLX0KLQotLyoq
Ci0gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQKLSAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQK
LSAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGgKLSAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD49fSBk
b21DaGFuZ2VzCi0gKi8KLWZ1bmN0aW9uIGhpZ2hsaWdodFNlYXJjaFJlc3VsdChlbGVtZW50LCBv
ZmZzZXQsIGxlbmd0aCwgZG9tQ2hhbmdlcykKLXsKLSAgICB2YXIgcmVzdWx0ID0gaGlnaGxpZ2h0
U2VhcmNoUmVzdWx0cyhlbGVtZW50LCBbe29mZnNldDogb2Zmc2V0LCBsZW5ndGg6IGxlbmd0aCB9
XSwgZG9tQ2hhbmdlcyk7Ci0gICAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPyByZXN1bHRbMF0gOiBu
dWxsOwotfQotCi0vKioKLSAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudAotICogQHBhcmFtIHtB
cnJheS48T2JqZWN0Pn0gcmVzdWx0UmFuZ2VzCi0gKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+PX0g
Y2hhbmdlcwotICovCi1mdW5jdGlvbiBoaWdobGlnaHRTZWFyY2hSZXN1bHRzKGVsZW1lbnQsIHJl
c3VsdFJhbmdlcywgY2hhbmdlcykKLXsKLSAgICByZXR1cm4gaGlnaGxpZ2h0UmFuZ2VzV2l0aFN0
eWxlQ2xhc3MoZWxlbWVudCwgcmVzdWx0UmFuZ2VzLCAid2Via2l0LXNlYXJjaC1yZXN1bHQiLCBj
aGFuZ2VzKTsKLSAgICAKLX0KLQotLyoqCi0gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQKLSAq
IEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IHJlc3VsdFJhbmdlcwotICogQHBhcmFtIHtzdHJpbmd9
IHN0eWxlQ2xhc3MKLSAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD49fSBjaGFuZ2VzCi0gKi8KLWZ1
bmN0aW9uIGhpZ2hsaWdodFJhbmdlc1dpdGhTdHlsZUNsYXNzKGVsZW1lbnQsIHJlc3VsdFJhbmdl
cywgc3R5bGVDbGFzcywgY2hhbmdlcykKLXsKLSAgICBjaGFuZ2VzID0gY2hhbmdlcyB8fCBbXTsK
LSAgICB2YXIgaGlnaGxpZ2h0Tm9kZXMgPSBbXTsKLSAgICB2YXIgbGluZVRleHQgPSBlbGVtZW50
LnRleHRDb250ZW50OwotICAgIHZhciBvd25lckRvY3VtZW50ID0gZWxlbWVudC5vd25lckRvY3Vt
ZW50OwotICAgIHZhciB0ZXh0Tm9kZVNuYXBzaG90ID0gb3duZXJEb2N1bWVudC5ldmFsdWF0ZSgi
Li8vdGV4dCgpIiwgZWxlbWVudCwgbnVsbCwgWFBhdGhSZXN1bHQuT1JERVJFRF9OT0RFX1NOQVBT
SE9UX1RZUEUsIG51bGwpOwotCi0gICAgdmFyIHNuYXBzaG90TGVuZ3RoID0gdGV4dE5vZGVTbmFw
c2hvdC5zbmFwc2hvdExlbmd0aDsKLSAgICBpZiAoc25hcHNob3RMZW5ndGggPT09IDApCi0gICAg
ICAgIHJldHVybiBoaWdobGlnaHROb2RlczsKLQotICAgIHZhciBub2RlUmFuZ2VzID0gW107Ci0g
ICAgdmFyIHJhbmdlRW5kT2Zmc2V0ID0gMDsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNuYXBz
aG90TGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdmFyIHJhbmdlID0ge307Ci0gICAgICAgIHJhbmdl
Lm9mZnNldCA9IHJhbmdlRW5kT2Zmc2V0OwotICAgICAgICByYW5nZS5sZW5ndGggPSB0ZXh0Tm9k
ZVNuYXBzaG90LnNuYXBzaG90SXRlbShpKS50ZXh0Q29udGVudC5sZW5ndGg7Ci0gICAgICAgIHJh
bmdlRW5kT2Zmc2V0ID0gcmFuZ2Uub2Zmc2V0ICsgcmFuZ2UubGVuZ3RoOwotICAgICAgICBub2Rl
UmFuZ2VzLnB1c2gocmFuZ2UpOwotICAgIH0KLQotICAgIHZhciBzdGFydEluZGV4ID0gMDsKLSAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdFJhbmdlcy5sZW5ndGg7ICsraSkgewotICAgICAg
ICB2YXIgc3RhcnRPZmZzZXQgPSByZXN1bHRSYW5nZXNbaV0ub2Zmc2V0OwotICAgICAgICB2YXIg
ZW5kT2Zmc2V0ID0gc3RhcnRPZmZzZXQgKyByZXN1bHRSYW5nZXNbaV0ubGVuZ3RoOwotCi0gICAg
ICAgIHdoaWxlIChzdGFydEluZGV4IDwgc25hcHNob3RMZW5ndGggJiYgbm9kZVJhbmdlc1tzdGFy
dEluZGV4XS5vZmZzZXQgKyBub2RlUmFuZ2VzW3N0YXJ0SW5kZXhdLmxlbmd0aCA8PSBzdGFydE9m
ZnNldCkKLSAgICAgICAgICAgIHN0YXJ0SW5kZXgrKzsKLSAgICAgICAgdmFyIGVuZEluZGV4ID0g
c3RhcnRJbmRleDsgCi0gICAgICAgIHdoaWxlIChlbmRJbmRleCA8IHNuYXBzaG90TGVuZ3RoICYm
IG5vZGVSYW5nZXNbZW5kSW5kZXhdLm9mZnNldCArIG5vZGVSYW5nZXNbZW5kSW5kZXhdLmxlbmd0
aCA8IGVuZE9mZnNldCkKLSAgICAgICAgICAgIGVuZEluZGV4Kys7Ci0gICAgICAgIGlmIChlbmRJ
bmRleCA9PT0gc25hcHNob3RMZW5ndGgpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgCi0g
ICAgICAgIHZhciBoaWdobGlnaHROb2RlID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJz
cGFuIik7Ci0gICAgICAgIGhpZ2hsaWdodE5vZGUuY2xhc3NOYW1lID0gc3R5bGVDbGFzczsKLSAg
ICAgICAgaGlnaGxpZ2h0Tm9kZS50ZXh0Q29udGVudCA9IGxpbmVUZXh0LnN1YnN0cmluZyhzdGFy
dE9mZnNldCwgZW5kT2Zmc2V0KTsKLQotICAgICAgICB2YXIgbGFzdFRleHROb2RlID0gdGV4dE5v
ZGVTbmFwc2hvdC5zbmFwc2hvdEl0ZW0oZW5kSW5kZXgpOwotICAgICAgICB2YXIgbGFzdFRleHQg
PSBsYXN0VGV4dE5vZGUudGV4dENvbnRlbnQ7Ci0gICAgICAgIGxhc3RUZXh0Tm9kZS50ZXh0Q29u
dGVudCA9IGxhc3RUZXh0LnN1YnN0cmluZyhlbmRPZmZzZXQgLSBub2RlUmFuZ2VzW2VuZEluZGV4
XS5vZmZzZXQpOwotICAgICAgICBjaGFuZ2VzLnB1c2goeyBub2RlOiBsYXN0VGV4dE5vZGUsIHR5
cGU6ICJjaGFuZ2VkIiwgb2xkVGV4dDogbGFzdFRleHQsIG5ld1RleHQ6IGxhc3RUZXh0Tm9kZS50
ZXh0Q29udGVudCB9KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChzdGFydEluZGV4ID09PSBlbmRJ
bmRleCkgewotICAgICAgICAgICAgbGFzdFRleHROb2RlLnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVm
b3JlKGhpZ2hsaWdodE5vZGUsIGxhc3RUZXh0Tm9kZSk7Ci0gICAgICAgICAgICBjaGFuZ2VzLnB1
c2goeyBub2RlOiBoaWdobGlnaHROb2RlLCB0eXBlOiAiYWRkZWQiLCBuZXh0U2libGluZzogbGFz
dFRleHROb2RlLCBwYXJlbnQ6IGxhc3RUZXh0Tm9kZS5wYXJlbnRFbGVtZW50IH0pOwotICAgICAg
ICAgICAgaGlnaGxpZ2h0Tm9kZXMucHVzaChoaWdobGlnaHROb2RlKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgdmFyIHByZWZpeE5vZGUgPSBvd25lckRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KGxhc3RUZXh0LnN1YnN0cmluZygwLCBzdGFydE9mZnNldCAtIG5vZGVSYW5nZXNbc3RhcnRJbmRl
eF0ub2Zmc2V0KSk7Ci0gICAgICAgICAgICBsYXN0VGV4dE5vZGUucGFyZW50RWxlbWVudC5pbnNl
cnRCZWZvcmUocHJlZml4Tm9kZSwgaGlnaGxpZ2h0Tm9kZSk7Ci0gICAgICAgICAgICBjaGFuZ2Vz
LnB1c2goeyBub2RlOiBwcmVmaXhOb2RlLCB0eXBlOiAiYWRkZWQiLCBuZXh0U2libGluZzogaGln
aGxpZ2h0Tm9kZSwgcGFyZW50OiBsYXN0VGV4dE5vZGUucGFyZW50RWxlbWVudCB9KTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHZhciBmaXJzdFRleHROb2RlID0gdGV4dE5vZGVTbmFw
c2hvdC5zbmFwc2hvdEl0ZW0oc3RhcnRJbmRleCk7Ci0gICAgICAgICAgICB2YXIgZmlyc3RUZXh0
ID0gZmlyc3RUZXh0Tm9kZS50ZXh0Q29udGVudDsKLSAgICAgICAgICAgIHZhciBhbmNob3JFbGVt
ZW50ID0gZmlyc3RUZXh0Tm9kZS5uZXh0U2libGluZzsKLQotICAgICAgICAgICAgZmlyc3RUZXh0
Tm9kZS5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShoaWdobGlnaHROb2RlLCBhbmNob3JFbGVt
ZW50KTsKLSAgICAgICAgICAgIGNoYW5nZXMucHVzaCh7IG5vZGU6IGhpZ2hsaWdodE5vZGUsIHR5
cGU6ICJhZGRlZCIsIG5leHRTaWJsaW5nOiBhbmNob3JFbGVtZW50LCBwYXJlbnQ6IGZpcnN0VGV4
dE5vZGUucGFyZW50RWxlbWVudCB9KTsKLSAgICAgICAgICAgIGhpZ2hsaWdodE5vZGVzLnB1c2go
aGlnaGxpZ2h0Tm9kZSk7Ci0KLSAgICAgICAgICAgIGZpcnN0VGV4dE5vZGUudGV4dENvbnRlbnQg
PSBmaXJzdFRleHQuc3Vic3RyaW5nKDAsIHN0YXJ0T2Zmc2V0IC0gbm9kZVJhbmdlc1tzdGFydElu
ZGV4XS5vZmZzZXQpOwotICAgICAgICAgICAgY2hhbmdlcy5wdXNoKHsgbm9kZTogZmlyc3RUZXh0
Tm9kZSwgdHlwZTogImNoYW5nZWQiLCBvbGRUZXh0OiBmaXJzdFRleHQsIG5ld1RleHQ6IGZpcnN0
VGV4dE5vZGUudGV4dENvbnRlbnQgfSk7Ci0KLSAgICAgICAgICAgIGZvciAodmFyIGogPSBzdGFy
dEluZGV4ICsgMTsgaiA8IGVuZEluZGV4OyBqKyspIHsKLSAgICAgICAgICAgICAgICB2YXIgdGV4
dE5vZGUgPSB0ZXh0Tm9kZVNuYXBzaG90LnNuYXBzaG90SXRlbShqKTsKLSAgICAgICAgICAgICAg
ICB2YXIgdGV4dCA9IHRleHROb2RlLnRleHRDb250ZW50OwotICAgICAgICAgICAgICAgIHRleHRO
b2RlLnRleHRDb250ZW50ID0gIiI7Ci0gICAgICAgICAgICAgICAgY2hhbmdlcy5wdXNoKHsgbm9k
ZTogdGV4dE5vZGUsIHR5cGU6ICJjaGFuZ2VkIiwgb2xkVGV4dDogdGV4dCwgbmV3VGV4dDogdGV4
dE5vZGUudGV4dENvbnRlbnQgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
c3RhcnRJbmRleCA9IGVuZEluZGV4OwotICAgICAgICBub2RlUmFuZ2VzW3N0YXJ0SW5kZXhdLm9m
ZnNldCA9IGVuZE9mZnNldDsKLSAgICAgICAgbm9kZVJhbmdlc1tzdGFydEluZGV4XS5sZW5ndGgg
PSBsYXN0VGV4dE5vZGUudGV4dENvbnRlbnQubGVuZ3RoOwotICAgICAgICAgICAgCi0gICAgfQot
ICAgIHJldHVybiBoaWdobGlnaHROb2RlczsKLX0KLQotZnVuY3Rpb24gYXBwbHlEb21DaGFuZ2Vz
KGRvbUNoYW5nZXMpCi17Ci0gICAgZm9yICh2YXIgaSA9IDAsIHNpemUgPSBkb21DaGFuZ2VzLmxl
bmd0aDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICB2YXIgZW50cnkgPSBkb21DaGFuZ2VzW2ld
OwotICAgICAgICBzd2l0Y2ggKGVudHJ5LnR5cGUpIHsKLSAgICAgICAgY2FzZSAiYWRkZWQiOgot
ICAgICAgICAgICAgZW50cnkucGFyZW50Lmluc2VydEJlZm9yZShlbnRyeS5ub2RlLCBlbnRyeS5u
ZXh0U2libGluZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAiY2hhbmdlZCI6
Ci0gICAgICAgICAgICBlbnRyeS5ub2RlLnRleHRDb250ZW50ID0gZW50cnkubmV3VGV4dDsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotfQotCi1mdW5jdGlvbiByZXZlcnRE
b21DaGFuZ2VzKGRvbUNoYW5nZXMpCi17Ci0gICAgZm9yICh2YXIgaSA9IGRvbUNoYW5nZXMubGVu
Z3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgdmFyIGVudHJ5ID0gZG9tQ2hhbmdlc1tp
XTsKLSAgICAgICAgc3dpdGNoIChlbnRyeS50eXBlKSB7Ci0gICAgICAgIGNhc2UgImFkZGVkIjoK
LSAgICAgICAgICAgIGlmIChlbnRyeS5ub2RlLnBhcmVudEVsZW1lbnQpCi0gICAgICAgICAgICAg
ICAgZW50cnkubm9kZS5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGVudHJ5Lm5vZGUpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgImNoYW5nZWQiOgotICAgICAgICAgICAgZW50
cnkubm9kZS50ZXh0Q29udGVudCA9IGVudHJ5Lm9sZFRleHQ7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgIH0KLX0KLQogLyoqCiAgKiBAcGFyYW0ge3N0cmluZ30gcXVlcnkKICAq
IEBwYXJhbSB7Ym9vbGVhbn0gY2FzZVNlbnNpdGl2ZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137079</attachid>
            <date>2012-04-13 06:45:38 -0700</date>
            <delta_ts>2012-04-13 06:49:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-83883-20120413174535.patch</filename>
            <type>text/plain</type>
            <size>70300</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0MTE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmU5NDljYjBjODc2Zjhh
MWFhYzg3NDRhNmY3MTFmMGVjMzZjNzcxZC4uYzU2YzJiZjNiYWYwNGY1MDU5MTcyODZmNWMwYTAx
ZDUxODA2NGVmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDczIEBACisyMDEyLTA0LTEzICBZdXJ5
IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IGV4Y2VwdGlvbiBpbiBoZWFwIHByb2ZpbGVyIHdoZW4gZXhwYW5kaW5nIGEgY2xhc3MgaW4g
c3VtbWFyeSB2aWV3CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD04Mzg4MworCisgICAgICAgIE1vdmVkIGFsbCBET00tc3BlY2lmaWMgaW5zcGVjdG9yIHV0
aWxpdGllcyBpbnRvIERPTUV4dGVuc2lvbi5qcworCisgICAgICAgIE1lcmdlZCBCaW5hcnlTZWFy
Y2guanMgYW5kIFBhcnRpYWxRdWlja1NvcnQuanMgaW50byB1dGlsaXRpZXMuanMsIEhlYXBTbmFw
c2hvdFdvcmtlci5qcyBub3cKKyAgICAgICAgaW1wb3J0cyB1dGlsaXRpZXMuanMgd2hpY2ggY29u
dGFpbnMgYWxsIHJlcXVpcmVkIHJvdXRpbmVzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIGluc3BlY3Rvci9jb21waWxlLWZyb250
LWVuZC5weToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0JpbmFyeVNlYXJjaC5qczog
UmVtb3ZlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUV4dGVuc2lvbi5qczog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC91dGlsaXRpZXMu
anMuCisgICAgICAgIChOb2RlLnByb3RvdHlwZS5yYW5nZU9mV29yZCk6CisgICAgICAgIChOb2Rl
LnByb3RvdHlwZS50cmF2ZXJzZU5leHRUZXh0Tm9kZSk6CisgICAgICAgIChOb2RlLnByb3RvdHlw
ZS5yYW5nZUJvdW5kYXJ5Rm9yT2Zmc2V0KToKKyAgICAgICAgKEVsZW1lbnQucHJvdG90eXBlLnJl
bW92ZVN0eWxlQ2xhc3MpOgorICAgICAgICAoRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlTWF0Y2hp
bmdTdHlsZUNsYXNzZXMpOgorICAgICAgICAoRWxlbWVudC5wcm90b3R5cGUuYWRkU3R5bGVDbGFz
cyk6CisgICAgICAgIChFbGVtZW50LnByb3RvdHlwZS5oYXNTdHlsZUNsYXNzKToKKyAgICAgICAg
KEVsZW1lbnQucHJvdG90eXBlLnBvc2l0aW9uQXQpOgorICAgICAgICAoRWxlbWVudC5wcm90b3R5
cGUucHJ1bmVFbXB0eVRleHROb2Rlcyk6CisgICAgICAgIChFbGVtZW50LnByb3RvdHlwZS5pc1Nj
cm9sbGVkVG9Cb3R0b20pOgorICAgICAgICAoTm9kZS5wcm90b3R5cGUuZW5jbG9zaW5nTm9kZU9y
U2VsZldpdGhOb2RlTmFtZUluQXJyYXkpOgorICAgICAgICAoTm9kZS5wcm90b3R5cGUuZW5jbG9z
aW5nTm9kZU9yU2VsZldpdGhOb2RlTmFtZSk6CisgICAgICAgIChOb2RlLnByb3RvdHlwZS5lbmNs
b3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKToKKyAgICAgICAgKE5vZGUucHJvdG90eXBlLmVuY2xv
c2luZ05vZGVXaXRoQ2xhc3MpOgorICAgICAgICAoRWxlbWVudC5wcm90b3R5cGUucXVlcnkpOgor
ICAgICAgICAoRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlQ2hpbGRyZW4pOgorICAgICAgICAoRWxl
bWVudC5wcm90b3R5cGUuaXNJbnNlcnRpb25DYXJldEluc2lkZSk6CisgICAgICAgIChFbGVtZW50
LnByb3RvdHlwZS5jcmVhdGVDaGlsZCk6CisgICAgICAgIChFbGVtZW50LnByb3RvdHlwZS50b3Rh
bE9mZnNldExlZnQpOgorICAgICAgICAoRWxlbWVudC5wcm90b3R5cGUudG90YWxPZmZzZXRUb3Ap
OgorICAgICAgICAoRWxlbWVudC5wcm90b3R5cGUudG90YWxPZmZzZXQpOgorICAgICAgICAoRWxl
bWVudC5wcm90b3R5cGUuc2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKEFuY2hvckJveCk6CisgICAg
ICAgIChFbGVtZW50LnByb3RvdHlwZS5vZmZzZXRSZWxhdGl2ZVRvV2luZG93KToKKyAgICAgICAg
KEVsZW1lbnQucHJvdG90eXBlLmJveEluV2luZG93KToKKyAgICAgICAgKEVsZW1lbnQucHJvdG90
eXBlLnNldFRleHRBbmRUaXRsZSk6CisgICAgICAgIChFdmVudC5wcm90b3R5cGUuY29uc3VtZSk6
CisgICAgICAgIChUZXh0LnByb3RvdHlwZS5zZWxlY3QpOgorICAgICAgICAoRWxlbWVudC5wcm90
b3R5cGUuc2VsZWN0aW9uTGVmdE9mZnNldCk6CisgICAgICAgIChOb2RlLnByb3RvdHlwZS5pc0Fu
Y2VzdG9yKToKKyAgICAgICAgKE5vZGUucHJvdG90eXBlLmlzRGVzY2VuZGFudCk6CisgICAgICAg
IChOb2RlLnByb3RvdHlwZS5pc1NlbGZPckFuY2VzdG9yKToKKyAgICAgICAgKE5vZGUucHJvdG90
eXBlLmlzU2VsZk9yRGVzY2VuZGFudCk6CisgICAgICAgIChOb2RlLnByb3RvdHlwZS50cmF2ZXJz
ZU5leHROb2RlKToKKyAgICAgICAgKE5vZGUucHJvdG90eXBlLnRyYXZlcnNlUHJldmlvdXNOb2Rl
KToKKyAgICAgICAgKEhUTUxUZXh0QXJlYUVsZW1lbnQucHJvdG90eXBlLm1vdmVDdXJzb3JUb0Vu
ZCk6CisgICAgICAgIChpc0VudGVyS2V5KToKKyAgICAgICAgKGNvbnN1bWVFdmVudCk6CisgICAg
ICAgIChoaWdobGlnaHRTZWFyY2hSZXN1bHQpOgorICAgICAgICAoaGlnaGxpZ2h0U2VhcmNoUmVz
dWx0cyk6CisgICAgICAgIChoaWdobGlnaHRSYW5nZXNXaXRoU3R5bGVDbGFzcyk6CisgICAgICAg
IChhcHBseURvbUNoYW5nZXMpOgorICAgICAgICAocmV2ZXJ0RG9tQ2hhbmdlcyk6CisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3QuanM6IEZpeGVkIGEgY291cGxlIG9m
IGpzIGNvbXBpbGVyIHdhcm5pbmdzCisgICAgICAgIGJ5IGRlc2NyaWJpbmcgc3RydWN0dXJlIG9m
IGhlYXAgc25hcHNob3QgaGVhZGVyIGluIHRoZSBwcm90b2NvbC4KKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RMb2FkZXIucHJvdG90eXBlLnB1c2hKU09OQ2h1bmspOgorICAgICAg
ICAqIGluc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90V29ya2VyLmpzOgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvUGFydGlhbFF1aWNrU29ydC5qczogUmVtb3ZlZC4KKyAgICAg
ICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmM6CisgICAgICAgICogaW5zcGVjdG9y
L2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L3V0aWxpdGllcy5qczoKKyAgICAgICAgKC4pOgorCiAyMDEyLTA0LTEzICBUaGlhZ28gTWFyY29z
IFAuIFNhbnRvcyAgPHRoaWFnby5zYW50b3NAaW50ZWwuY29tPgogCiAgICAgICAgIFtFRkxdIEFk
ZCBBUEkgZm9yIGNvbG9yIGNob29zZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAyZjU0NGYzMzNkYjIw
Y2JjNGI1ZTYwYmQwNWM5MGJjMzJiMDFhMjAxLi40NWEwZTYxYmQyNjY1MjU1NmM1YWYwYmQwZDY5
ZDZkM2UzYWQ5NDEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC02Mjc0LDcgKzYyNzQsNiBAQAogICAg
ICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQXVkaXRSZXN1bHRWaWV3LmpzJywKICAgICAg
ICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0UnVsZXMuanMnLAogICAgICAgICAgICAg
J2luc3BlY3Rvci9mcm9udC1lbmQvQXVkaXRzUGFuZWwuanMnLAotICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9mcm9udC1lbmQvQmluYXJ5U2VhcmNoLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3Iv
ZnJvbnQtZW5kL0JvdHRvbVVwUHJvZmlsZURhdGFHcmlkVHJlZS5qcycsCiAgICAgICAgICAgICAn
aW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcycsCiAgICAgICAgICAgICAn
aW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50c1NpZGViYXJQYW5lLmpzJywKQEAgLTYyODYs
NyArNjI4NSw2IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlTW9k
ZWwuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVBhbmVsLmpz
JywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3LmpzJywKLSAg
ICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0phdmFTY3JpcHRDb250ZXh0TWFuYWdlci5q
cycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9Db250ZW50UHJvdmlkZXJzLmpz
JywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnRleHRNZW51LmpzJywKICAg
ICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0Nvb2tpZUl0ZW1zVmlldy5qcycsCkBAIC02
MzA3LDYgKzYzMDUsNyBAQAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvRGlhbG9n
LmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzJywKICAg
ICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUJyZWFrcG9pbnRzU2lkZWJhclBhbmUu
anMnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvRE9NRXh0ZW5zaW9uLmpzJywK
ICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0RPTVByZXNlbnRhdGlvblV0aWxzLmpz
JywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0RPTVN0b3JhZ2UuanMnLAogICAg
ICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvRE9NU3RvcmFnZUl0ZW1zVmlldy5qcycsCkBA
IC02MzQwLDYgKzYzMzksNyBAQAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvSW5z
cGVjdG9yVmlldy5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3Rl
ZEZha2VXb3JrZXIuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVj
dG9yLmpzJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0phdmFTY3JpcHRDb250
ZXh0TWFuYWdlci5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9KYXZhU2Ny
aXB0Rm9ybWF0dGVyLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0phdmFT
Y3JpcHRTb3VyY2VGcmFtZS5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9L
ZXlib2FyZFNob3J0Y3V0LmpzJywKQEAgLTYzNTUsNyArNjM1NSw2IEBACiAgICAgICAgICAgICAn
aW5zcGVjdG9yL2Zyb250LWVuZC9PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5qcycsCiAgICAgICAg
ICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9QYW5lbC5qcycsCiAgICAgICAgICAgICAnaW5zcGVj
dG9yL2Zyb250LWVuZC9QYW5lbEVuYWJsZXJWaWV3LmpzJywKLSAgICAgICAgICAgICdpbnNwZWN0
b3IvZnJvbnQtZW5kL1BhcnRpYWxRdWlja1NvcnQuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rv
ci9mcm9udC1lbmQvUGxhY2FyZC5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVu
ZC9Qb3BvdmVyLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVE
YXRhR3JpZFRyZWUuanMnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagppbmRleCBiMGFiZTdlZTAyZDhkZmIwMTM1NGUzZWIzNTZlZWIzZDQxN2VmZTRhLi5k
OTkzMDMyZjZmYWY4ZGE2NWIzM2UyZmIwODBkYzVmOWIzZmVkOWFmIDEwMDc1NQotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNzM2NDksMTAgKzczNjQ5LDYg
QEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGluc3BlY3Rvclxmcm9udC1lbmRcQmluYXJ5U2VhcmNoLmpzIgotCQkJCQk+Ci0JCQkJPC9GaWxl
PgotCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxC
b3R0b21VcFByb2ZpbGVEYXRhR3JpZFRyZWUuanMiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CkBAIC03
Mzc4NSw2ICs3Mzc4MSwxMCBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCisJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxET01FeHRlbnNpb24uanMiCisJ
CQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNw
ZWN0b3JcZnJvbnQtZW5kXERPTVByZXNlbnRhdGlvblV0aWxzLmpzIgogCQkJCQk+CiAJCQkJPC9G
aWxlPgpAQCAtNzQwMzMsMTAgKzc0MDMzLDYgQEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8
RmlsZQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcUGFydGlhbFF1
aWNrU29ydC5qcyIKLQkJCQkJPgotCQkJCTwvRmlsZT4KLQkJCQk8RmlsZQogCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcUGxhY2FyZC5qcyIKIAkJCQkJPgogCQkJCTwv
RmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9jb21waWxlLWZyb250
LWVuZC5weSBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9jb21waWxlLWZyb250LWVuZC5weQpp
bmRleCA1NDkzOWE2NDcwZTM1ZmRiOTcxNGQzNTg3MmQwNDBlMjVjZGU3MmJiLi41Y2UyMWU5MWE0
NmQyMGEzMzYyYmRjMTE0MGI5NzA3ODdjOWJkYWYwIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvY29tcGlsZS1mcm9udC1lbmQucHkKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2NvbXBpbGUtZnJvbnQtZW5kLnB5CkBAIC0zNyw2ICszNyw3IEBAIG1vZHVsZXMgPSBb
CiAgICAgICAgICJ0YXJnZXRfbmFtZSI6ICJ1dGlsIiwKICAgICAgICAgImRlcGVuZGVuY2llcyI6
IFtdLAogICAgICAgICAic291cmNlcyI6IFsKKyAgICAgICAgICAgICJET01FeHRlbnNpb24uanMi
LAogICAgICAgICAgICAgInV0aWxpdGllcy5qcyIsCiAgICAgICAgICAgICAidHJlZW91dGxpbmUu
anMiLAogICAgICAgICBdCkBAIC00NSw5ICs0Niw3IEBAIG1vZHVsZXMgPSBbCiAgICAgICAgICJ0
YXJnZXRfbmFtZSI6ICJjb21tb24iLAogICAgICAgICAiZGVwZW5kZW5jaWVzIjogWyJ1dGlsIl0s
CiAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgIkJpbmFyeVNlYXJjaC5qcyIsCiAg
ICAgICAgICAgICAiT2JqZWN0LmpzIiwKLSAgICAgICAgICAgICJQYXJ0aWFsUXVpY2tTb3J0Lmpz
IiwKICAgICAgICAgICAgICJTZXR0aW5ncy5qcyIsCiAgICAgICAgICAgICAiVXNlck1ldHJpY3Mu
anMiLAogICAgICAgICAgICAgIkhhbmRsZXJSZWdpc3RyeS5qcyIsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0FkdmFuY2VkU2VhcmNoQ29udHJvbGxlci5q
cyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQWR2YW5jZWRTZWFyY2hDb250
cm9sbGVyLmpzCmluZGV4IDlhOGFiNTk2MmIwMjZjMTgxMzljZjQ2YmQwY2RlNDc2ZjA2ODhkZTcu
LmQ4NDY0MTNjZTkzNjM1MGFkODgwNzU0ZmU4ZGFkMWM1MGVlN2MxOGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQWR2YW5jZWRTZWFyY2hDb250cm9sbGVy
LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQWR2YW5jZWRTZWFy
Y2hDb250cm9sbGVyLmpzCkBAIC02ODEsNyArNjgxLDcgQEAgV2ViSW5zcGVjdG9yLkZpbGVCYXNl
ZFNlYXJjaFJlc3VsdHNQYW5lLnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFyIGNvbnRlbnRTcGFu
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgICAgICBjb250ZW50U3Bhbi5j
bGFzc05hbWUgPSAic2VhcmNoLW1hdGNoLWNvbnRlbnQiOwogICAgICAgICBjb250ZW50U3Bhbi50
ZXh0Q29udGVudCA9IGxpbmVDb250ZW50OwotICAgICAgICBoaWdobGlnaHRSYW5nZXNXaXRoU3R5
bGVDbGFzcyhjb250ZW50U3BhbiwgbWF0Y2hSYW5nZXMsICJoaWdobGlnaHRlZC1tYXRjaCIpOwor
ICAgICAgICBXZWJJbnNwZWN0b3IuaGlnaGxpZ2h0UmFuZ2VzV2l0aFN0eWxlQ2xhc3MoY29udGVu
dFNwYW4sIG1hdGNoUmFuZ2VzLCAiaGlnaGxpZ2h0ZWQtbWF0Y2giKTsKICAgICAgICAgcmV0dXJu
IGNvbnRlbnRTcGFuOwogICAgIH0KIH0KQEAgLTcwMSw0ICs3MDEsNCBAQCBXZWJJbnNwZWN0b3Iu
RmlsZUJhc2VkU2VhcmNoUmVzdWx0c1BhbmUuU2VhcmNoUmVzdWx0ID0gZnVuY3Rpb24oZmlsZSwg
c2VhcmNoTWF0YwogLyoqCiAgKiBAdHlwZSB7V2ViSW5zcGVjdG9yLkFkdmFuY2VkU2VhcmNoQ29u
dHJvbGxlcn0KICAqLwotV2ViSW5zcGVjdG9yLmFkdmFuY2VkU2VhcmNoQ29udHJvbGxlciA9IG51
bGw7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorV2ViSW5zcGVjdG9yLmFkdmFuY2VkU2Vh
cmNoQ29udHJvbGxlciA9IG51bGw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0JpbmFyeVNlYXJjaC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvQmluYXJ5U2VhcmNoLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4
ZDAzY2E0OTI5MzhkNmU1NmUxZmMxNmI1Y2UyYTY2ZTBkOGI3ODk1Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvQmluYXJ5U2VhcmNoLmpzCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICog
ZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioK
LSAqIEBwYXJhbSB7Kn0gb2JqZWN0Ci0gKiBAcGFyYW0ge0FycmF5LjwqPn0gYXJyYXkKLSAqIEBw
YXJhbSB7ZnVuY3Rpb24oKiwgKil9IGNvbXBhcmF0b3IKLSAqLwotZnVuY3Rpb24gYmluYXJ5U2Vh
cmNoKG9iamVjdCwgYXJyYXksIGNvbXBhcmF0b3IpCi17Ci0gICAgdmFyIGZpcnN0ID0gMDsKLSAg
ICB2YXIgbGFzdCA9IGFycmF5Lmxlbmd0aCAtIDE7Ci0KLSAgICB3aGlsZSAoZmlyc3QgPD0gbGFz
dCkgewotICAgICAgICB2YXIgbWlkID0gKGZpcnN0ICsgbGFzdCkgPj4gMTsKLSAgICAgICAgdmFy
IGMgPSBjb21wYXJhdG9yKG9iamVjdCwgYXJyYXlbbWlkXSk7Ci0gICAgICAgIGlmIChjID4gMCkK
LSAgICAgICAgICAgIGZpcnN0ID0gbWlkICsgMTsKLSAgICAgICAgZWxzZSBpZiAoYyA8IDApCi0g
ICAgICAgICAgICBsYXN0ID0gbWlkIC0gMTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0
dXJuIG1pZDsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gdGhlIG5lYXJlc3QgbGVzc2VyIGluZGV4
LCAiLTEiIG1lYW5zICIwLCAiLTIiIG1lYW5zICIxIiwgZXRjLgotICAgIHJldHVybiAtKGZpcnN0
ICsgMSk7Ci19Ci0KLU9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsICJiaW5h
cnlJbmRleE9mIiwKLXsKLSAgICAvKioKLSAgICAgKiBAdGhpcyB7QXJyYXkuPCo+fQotICAgICAq
LwotICAgIHZhbHVlOiBmdW5jdGlvbih2YWx1ZSwgY29tcGFyYXRvcikKLSAgICB7Ci0gICAgICAg
IHZhciByZXN1bHQgPSBiaW5hcnlTZWFyY2godmFsdWUsIHRoaXMsIGNvbXBhcmF0b3IpOwotICAg
ICAgICByZXR1cm4gcmVzdWx0ID49IDAgPyByZXN1bHQgOiAtMTsKLSAgICB9Ci19KTsKLQotLyoq
Ci0gKiBAcGFyYW0geyp9IGFuT2JqZWN0Ci0gKiBAcGFyYW0ge0FycmF5LjwqPn0gYUxpc3QKLSAq
IEBwYXJhbSB7ZnVuY3Rpb24oKiwgKil9IGFGdW5jdGlvbgotICovCi1mdW5jdGlvbiBpbnNlcnRp
b25JbmRleEZvck9iamVjdEluTGlzdFNvcnRlZEJ5RnVuY3Rpb24oYW5PYmplY3QsIGFMaXN0LCBh
RnVuY3Rpb24pCi17Ci0gICAgdmFyIGluZGV4ID0gYmluYXJ5U2VhcmNoKGFuT2JqZWN0LCBhTGlz
dCwgYUZ1bmN0aW9uKTsKLSAgICBpZiAoaW5kZXggPCAwKQotICAgICAgICAvLyBTZWUgYmluYXJ5
U2VhcmNoIGltcGxlbWVudGF0aW9uLgotICAgICAgICByZXR1cm4gLWluZGV4IC0gMTsKLSAgICBl
bHNlIHsKLSAgICAgICAgLy8gUmV0dXJuIHRoZSBmaXJzdCBvY2N1cmFuY2Ugb2YgYW4gaXRlbSBp
biB0aGUgbGlzdC4KLSAgICAgICAgd2hpbGUgKGluZGV4ID4gMCAmJiBhRnVuY3Rpb24oYW5PYmpl
Y3QsIGFMaXN0W2luZGV4IC0gMV0pID09PSAwKQotICAgICAgICAgICAgaW5kZXgtLTsKLSAgICAg
ICAgcmV0dXJuIGluZGV4OwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZU1lc3NhZ2UuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVNZXNzYWdlLmpzCmluZGV4IGRiYmU0MDY5Yzg1OTJkMTky
ZjhhYWJmNzYzMmE1ZmU4Y2YzMzliNWUuLmMxNWVjMTI3Yzg4MWVhZDAyNjFmMWQ3ZTdlNjY3ZWI0
NTExNzJiZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
Q29uc29sZU1lc3NhZ2UuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9Db25zb2xlTWVzc2FnZS5qcwpAQCAtNDM2LDcgKzQzNiw3IEBAIFdlYkluc3BlY3Rvci5Db25z
b2xlTWVzc2FnZUltcGwucHJvdG90eXBlID0gewogICAgICAgICAgICAgbWF0Y2hSYW5nZXMucHVz
aCh7IG9mZnNldDogbWF0Y2guaW5kZXgsIGxlbmd0aDogbWF0Y2hbMF0ubGVuZ3RoIH0pOwogICAg
ICAgICAgICAgbWF0Y2ggPSByZWdleE9iamVjdC5leGVjKHRleHQpOwogICAgICAgICB9Ci0gICAg
ICAgIGhpZ2hsaWdodFNlYXJjaFJlc3VsdHMoZWxlbWVudCwgbWF0Y2hSYW5nZXMpOworICAgICAg
ICBXZWJJbnNwZWN0b3IuaGlnaGxpZ2h0U2VhcmNoUmVzdWx0cyhlbGVtZW50LCBtYXRjaFJhbmdl
cyk7CiAgICAgfSwKIAogICAgIG1hdGNoZXNSZWdleDogZnVuY3Rpb24ocmVnZXhPYmplY3QpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3
LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlVmlldy5qcwpp
bmRleCBjNGM2ZmMwY2NjY2U4ODMyYTM1NDZmNzBlMjBhZjA3ODNlMzkyZjA5Li43NjI2YzNlMjlh
MGE0N2U0MTJlYmMzZjE4NzMzZTQxMmI3ZDEwOGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3LmpzCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVZpZXcuanMKQEAgLTc0Myw3ICs3NDMsNyBAQCBX
ZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmQucHJvdG90eXBlID0gewogICAgICAgICAgICAgbWF0
Y2hSYW5nZXMucHVzaCh7IG9mZnNldDogbWF0Y2guaW5kZXgsIGxlbmd0aDogbWF0Y2hbMF0ubGVu
Z3RoIH0pOwogICAgICAgICAgICAgbWF0Y2ggPSByZWdleE9iamVjdC5leGVjKHRleHQpOwogICAg
ICAgICB9Ci0gICAgICAgIGhpZ2hsaWdodFNlYXJjaFJlc3VsdHModGhpcy5fZm9ybWF0dGVkQ29t
bWFuZCwgbWF0Y2hSYW5nZXMpOworICAgICAgICBXZWJJbnNwZWN0b3IuaGlnaGxpZ2h0U2VhcmNo
UmVzdWx0cyh0aGlzLl9mb3JtYXR0ZWRDb21tYW5kLCBtYXRjaFJhbmdlcyk7CiAgICAgICAgIHRo
aXMuX2VsZW1lbnQuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCgpOwogICAgIH0sCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NRXh0ZW5zaW9uLmpzIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01FeHRlbnNpb24uanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYmVjMTQ3MGQ4YjAyZmU5YmQxNjkzYWFjNjRjMTYzOGVjYWEzNzNlNAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NRXh0ZW5zaW9u
LmpzCkBAIC0wLDAgKzEsNTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqCisgKiBDb250YWlucyBkaWZmIG1ldGhvZCBiYXNlZCBvbiBKYXZh
c2NyaXB0IERpZmYgQWxnb3JpdGhtIEJ5IEpvaG4gUmVzaWcKKyAqIGh0dHA6Ly9lam9obi5vcmcv
ZmlsZXMvanNkaWZmLmpzIChyZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UpLgorICovCisK
Ky8qKgorICogQHBhcmFtIHtzdHJpbmc9fSBkaXJlY3Rpb24KKyAqLworTm9kZS5wcm90b3R5cGUu
cmFuZ2VPZldvcmQgPSBmdW5jdGlvbihvZmZzZXQsIHN0b3BDaGFyYWN0ZXJzLCBzdGF5V2l0aGlu
Tm9kZSwgZGlyZWN0aW9uKQoreworICAgIHZhciBzdGFydE5vZGU7CisgICAgdmFyIHN0YXJ0T2Zm
c2V0ID0gMDsKKyAgICB2YXIgZW5kTm9kZTsKKyAgICB2YXIgZW5kT2Zmc2V0ID0gMDsKKworICAg
IGlmICghc3RheVdpdGhpbk5vZGUpCisgICAgICAgIHN0YXlXaXRoaW5Ob2RlID0gdGhpczsKKwor
ICAgIGlmICghZGlyZWN0aW9uIHx8IGRpcmVjdGlvbiA9PT0gImJhY2t3YXJkIiB8fCBkaXJlY3Rp
b24gPT09ICJib3RoIikgeworICAgICAgICB2YXIgbm9kZSA9IHRoaXM7CisgICAgICAgIHdoaWxl
IChub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZSA9PT0gc3RheVdpdGhpbk5vZGUpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIXN0YXJ0Tm9kZSkKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRO
b2RlID0gc3RheVdpdGhpbk5vZGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkg
eworICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IChub2RlID09PSB0aGlzID8gKG9mZnNldCAt
IDEpIDogKG5vZGUubm9kZVZhbHVlLmxlbmd0aCAtIDEpKTsKKyAgICAgICAgICAgICAgICBmb3Ig
KHZhciBpID0gc3RhcnQ7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChz
dG9wQ2hhcmFjdGVycy5pbmRleE9mKG5vZGUubm9kZVZhbHVlW2ldKSAhPT0gLTEpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXJ0Tm9kZSA9IG5vZGU7CisgICAgICAgICAgICAgICAgICAg
ICAgICBzdGFydE9mZnNldCA9IGkgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChzdGFydE5vZGUpCisgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgIG5vZGUgPSBub2RlLnRyYXZlcnNlUHJldmlvdXNOb2RlKHN0YXlXaXRoaW5O
b2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghc3RhcnROb2RlKSB7CisgICAgICAgICAg
ICBzdGFydE5vZGUgPSBzdGF5V2l0aGluTm9kZTsKKyAgICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0g
MDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXJ0Tm9kZSA9IHRoaXM7Cisg
ICAgICAgIHN0YXJ0T2Zmc2V0ID0gb2Zmc2V0OworICAgIH0KKworICAgIGlmICghZGlyZWN0aW9u
IHx8IGRpcmVjdGlvbiA9PT0gImZvcndhcmQiIHx8IGRpcmVjdGlvbiA9PT0gImJvdGgiKSB7Cisg
ICAgICAgIG5vZGUgPSB0aGlzOworICAgICAgICB3aGlsZSAobm9kZSkgeworICAgICAgICAgICAg
aWYgKG5vZGUgPT09IHN0YXlXaXRoaW5Ob2RlKSB7CisgICAgICAgICAgICAgICAgaWYgKCFlbmRO
b2RlKQorICAgICAgICAgICAgICAgICAgICBlbmROb2RlID0gc3RheVdpdGhpbk5vZGU7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChub2Rl
Lm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkgeworICAgICAgICAgICAgICAgIHZhciBzdGFy
dCA9IChub2RlID09PSB0aGlzID8gb2Zmc2V0IDogMCk7CisgICAgICAgICAgICAgICAgZm9yICh2
YXIgaSA9IHN0YXJ0OyBpIDwgbm9kZS5ub2RlVmFsdWUubGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHN0b3BDaGFyYWN0ZXJzLmluZGV4T2Yobm9kZS5ub2RlVmFsdWVbaV0p
ICE9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZW5kTm9kZSA9IG5vZGU7CisgICAg
ICAgICAgICAgICAgICAgICAgICBlbmRPZmZzZXQgPSBpOworICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChlbmROb2RlKQorICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICBub2RlID0gbm9kZS50cmF2ZXJzZU5leHROb2RlKHN0YXlXaXRo
aW5Ob2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghZW5kTm9kZSkgeworICAgICAgICAg
ICAgZW5kTm9kZSA9IHN0YXlXaXRoaW5Ob2RlOworICAgICAgICAgICAgZW5kT2Zmc2V0ID0gc3Rh
eVdpdGhpbk5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFID8gc3RheVdpdGhpbk5vZGUu
bm9kZVZhbHVlLmxlbmd0aCA6IHN0YXlXaXRoaW5Ob2RlLmNoaWxkTm9kZXMubGVuZ3RoOworICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW5kTm9kZSA9IHRoaXM7CisgICAgICAgIGVu
ZE9mZnNldCA9IG9mZnNldDsKKyAgICB9CisKKyAgICB2YXIgcmVzdWx0ID0gdGhpcy5vd25lckRv
Y3VtZW50LmNyZWF0ZVJhbmdlKCk7CisgICAgcmVzdWx0LnNldFN0YXJ0KHN0YXJ0Tm9kZSwgc3Rh
cnRPZmZzZXQpOworICAgIHJlc3VsdC5zZXRFbmQoZW5kTm9kZSwgZW5kT2Zmc2V0KTsKKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK05vZGUucHJvdG90eXBlLnRyYXZlcnNlTmV4dFRleHROb2Rl
ID0gZnVuY3Rpb24oc3RheVdpdGhpbikKK3sKKyAgICB2YXIgbm9kZSA9IHRoaXMudHJhdmVyc2VO
ZXh0Tm9kZShzdGF5V2l0aGluKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHdoaWxlIChub2RlICYmIG5vZGUubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKQorICAg
ICAgICBub2RlID0gbm9kZS50cmF2ZXJzZU5leHROb2RlKHN0YXlXaXRoaW4pOworCisgICAgcmV0
dXJuIG5vZGU7Cit9CisKK05vZGUucHJvdG90eXBlLnJhbmdlQm91bmRhcnlGb3JPZmZzZXQgPSBm
dW5jdGlvbihvZmZzZXQpCit7CisgICAgdmFyIG5vZGUgPSB0aGlzLnRyYXZlcnNlTmV4dFRleHRO
b2RlKHRoaXMpOworICAgIHdoaWxlIChub2RlICYmIG9mZnNldCA+IG5vZGUubm9kZVZhbHVlLmxl
bmd0aCkgeworICAgICAgICBvZmZzZXQgLT0gbm9kZS5ub2RlVmFsdWUubGVuZ3RoOworICAgICAg
ICBub2RlID0gbm9kZS50cmF2ZXJzZU5leHRUZXh0Tm9kZSh0aGlzKTsKKyAgICB9CisgICAgaWYg
KCFub2RlKQorICAgICAgICByZXR1cm4geyBjb250YWluZXI6IHRoaXMsIG9mZnNldDogMCB9Owor
ICAgIHJldHVybiB7IGNvbnRhaW5lcjogbm9kZSwgb2Zmc2V0OiBvZmZzZXQgfTsKK30KKworRWxl
bWVudC5wcm90b3R5cGUucmVtb3ZlU3R5bGVDbGFzcyA9IGZ1bmN0aW9uKGNsYXNzTmFtZSkKK3sK
KyAgICB0aGlzLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKTsKK30KKworRWxlbWVudC5wcm90
b3R5cGUucmVtb3ZlTWF0Y2hpbmdTdHlsZUNsYXNzZXMgPSBmdW5jdGlvbihjbGFzc05hbWVSZWdl
eCkKK3sKKyAgICB2YXIgcmVnZXggPSBuZXcgUmVnRXhwKCIoXnxcXHMrKSIgKyBjbGFzc05hbWVS
ZWdleCArICIoJHxcXHMrKSIpOworICAgIGlmIChyZWdleC50ZXN0KHRoaXMuY2xhc3NOYW1lKSkK
KyAgICAgICAgdGhpcy5jbGFzc05hbWUgPSB0aGlzLmNsYXNzTmFtZS5yZXBsYWNlKHJlZ2V4LCAi
ICIpOworfQorCitFbGVtZW50LnByb3RvdHlwZS5hZGRTdHlsZUNsYXNzID0gZnVuY3Rpb24oY2xh
c3NOYW1lKQoreworICAgIHRoaXMuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpOworfQorCitFbGVt
ZW50LnByb3RvdHlwZS5oYXNTdHlsZUNsYXNzID0gZnVuY3Rpb24oY2xhc3NOYW1lKQoreworICAg
IHJldHVybiB0aGlzLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpOworfQorCitFbGVtZW50
LnByb3RvdHlwZS5wb3NpdGlvbkF0ID0gZnVuY3Rpb24oeCwgeSkKK3sKKyAgICB0aGlzLnN0eWxl
LmxlZnQgPSB4ICsgInB4IjsKKyAgICB0aGlzLnN0eWxlLnRvcCA9IHkgKyAicHgiOworfQorCitF
bGVtZW50LnByb3RvdHlwZS5wcnVuZUVtcHR5VGV4dE5vZGVzID0gZnVuY3Rpb24oKQoreworICAg
IHZhciBzaWJsaW5nID0gdGhpcy5maXJzdENoaWxkOworICAgIHdoaWxlIChzaWJsaW5nKSB7Cisg
ICAgICAgIHZhciBuZXh0U2libGluZyA9IHNpYmxpbmcubmV4dFNpYmxpbmc7CisgICAgICAgIGlm
IChzaWJsaW5nLm5vZGVUeXBlID09PSB0aGlzLlRFWFRfTk9ERSAmJiBzaWJsaW5nLm5vZGVWYWx1
ZSA9PT0gIiIpCisgICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKHNpYmxpbmcpOworICAgICAg
ICBzaWJsaW5nID0gbmV4dFNpYmxpbmc7CisgICAgfQorfQorCitFbGVtZW50LnByb3RvdHlwZS5p
c1Njcm9sbGVkVG9Cb3R0b20gPSBmdW5jdGlvbigpCit7CisgICAgLy8gVGhpcyBjb2RlIHdvcmtz
IG9ubHkgZm9yIDAtd2lkdGggYm9yZGVyCisgICAgcmV0dXJuIHRoaXMuc2Nyb2xsVG9wICsgdGhp
cy5jbGllbnRIZWlnaHQgPT09IHRoaXMuc2Nyb2xsSGVpZ2h0OworfQorCitOb2RlLnByb3RvdHlw
ZS5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aE5vZGVOYW1lSW5BcnJheSA9IGZ1bmN0aW9uKG5hbWVB
cnJheSkKK3sKKyAgICBmb3IgKHZhciBub2RlID0gdGhpczsgbm9kZSAmJiBub2RlICE9PSB0aGlz
Lm93bmVyRG9jdW1lbnQ7IG5vZGUgPSBub2RlLnBhcmVudE5vZGUpCisgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbmFtZUFycmF5Lmxlbmd0aDsgKytpKQorICAgICAgICAgICAgaWYgKG5vZGUu
bm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZUFycmF5W2ldLnRvTG93ZXJDYXNlKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgcmV0dXJuIG51bGw7Cit9CisKK05vZGUu
cHJvdG90eXBlLmVuY2xvc2luZ05vZGVPclNlbGZXaXRoTm9kZU5hbWUgPSBmdW5jdGlvbihub2Rl
TmFtZSkKK3sKKyAgICByZXR1cm4gdGhpcy5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aE5vZGVOYW1l
SW5BcnJheShbbm9kZU5hbWVdKTsKK30KKworTm9kZS5wcm90b3R5cGUuZW5jbG9zaW5nTm9kZU9y
U2VsZldpdGhDbGFzcyA9IGZ1bmN0aW9uKGNsYXNzTmFtZSkKK3sKKyAgICBmb3IgKHZhciBub2Rl
ID0gdGhpczsgbm9kZSAmJiBub2RlICE9PSB0aGlzLm93bmVyRG9jdW1lbnQ7IG5vZGUgPSBub2Rl
LnBhcmVudE5vZGUpCisgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRf
Tk9ERSAmJiBub2RlLmhhc1N0eWxlQ2xhc3MoY2xhc3NOYW1lKSkKKyAgICAgICAgICAgIHJldHVy
biBub2RlOworICAgIHJldHVybiBudWxsOworfQorCitOb2RlLnByb3RvdHlwZS5lbmNsb3NpbmdO
b2RlV2l0aENsYXNzID0gZnVuY3Rpb24oY2xhc3NOYW1lKQoreworICAgIGlmICghdGhpcy5wYXJl
bnROb2RlKQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICByZXR1cm4gdGhpcy5wYXJlbnROb2Rl
LmVuY2xvc2luZ05vZGVPclNlbGZXaXRoQ2xhc3MoY2xhc3NOYW1lKTsKK30KKworRWxlbWVudC5w
cm90b3R5cGUucXVlcnkgPSBmdW5jdGlvbihxdWVyeSkKK3sKKyAgICByZXR1cm4gdGhpcy5vd25l
ckRvY3VtZW50LmV2YWx1YXRlKHF1ZXJ5LCB0aGlzLCBudWxsLCBYUGF0aFJlc3VsdC5GSVJTVF9P
UkRFUkVEX05PREVfVFlQRSwgbnVsbCkuc2luZ2xlTm9kZVZhbHVlOworfQorCitFbGVtZW50LnBy
b3RvdHlwZS5yZW1vdmVDaGlsZHJlbiA9IGZ1bmN0aW9uKCkKK3sKKyAgICBpZiAodGhpcy5maXJz
dENoaWxkKQorICAgICAgICB0aGlzLnRleHRDb250ZW50ID0gIiI7Cit9CisKK0VsZW1lbnQucHJv
dG90eXBlLmlzSW5zZXJ0aW9uQ2FyZXRJbnNpZGUgPSBmdW5jdGlvbigpCit7CisgICAgdmFyIHNl
bGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKKyAgICBpZiAoIXNlbGVjdGlvbi5yYW5n
ZUNvdW50IHx8ICFzZWxlY3Rpb24uaXNDb2xsYXBzZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB2YXIgc2VsZWN0aW9uUmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKKyAgICBy
ZXR1cm4gc2VsZWN0aW9uUmFuZ2Uuc3RhcnRDb250YWluZXIuaXNTZWxmT3JEZXNjZW5kYW50KHRo
aXMpOworfQorCisvKioKKyAqIEBwYXJhbSB7c3RyaW5nPX0gY2xhc3NOYW1lCisgKi8KK0VsZW1l
bnQucHJvdG90eXBlLmNyZWF0ZUNoaWxkID0gZnVuY3Rpb24oZWxlbWVudE5hbWUsIGNsYXNzTmFt
ZSkKK3sKKyAgICB2YXIgZWxlbWVudCA9IHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50
KGVsZW1lbnROYW1lKTsKKyAgICBpZiAoY2xhc3NOYW1lKQorICAgICAgICBlbGVtZW50LmNsYXNz
TmFtZSA9IGNsYXNzTmFtZTsKKyAgICB0aGlzLmFwcGVuZENoaWxkKGVsZW1lbnQpOworICAgIHJl
dHVybiBlbGVtZW50OworfQorCitEb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZS5jcmVhdGVDaGls
ZCA9IEVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZUNoaWxkOworCisvKioKKyAqIEByZXR1cm4ge251
bWJlcn0KKyAqLworRWxlbWVudC5wcm90b3R5cGUudG90YWxPZmZzZXRMZWZ0ID0gZnVuY3Rpb24o
KQoreworICAgIHJldHVybiB0aGlzLnRvdGFsT2Zmc2V0KCkubGVmdDsKK30KKworLyoqCisgKiBA
cmV0dXJuIHtudW1iZXJ9CisgKi8KK0VsZW1lbnQucHJvdG90eXBlLnRvdGFsT2Zmc2V0VG9wID0g
ZnVuY3Rpb24oKQoreworICAgIHJldHVybiB0aGlzLnRvdGFsT2Zmc2V0KCkudG9wOworCit9CisK
K0VsZW1lbnQucHJvdG90eXBlLnRvdGFsT2Zmc2V0ID0gZnVuY3Rpb24oKQoreworICAgIHZhciB0
b3RhbExlZnQgPSAwOworICAgIHZhciB0b3RhbFRvcCA9IDA7CisKKyAgICBmb3IgKHZhciBlbGVt
ZW50ID0gdGhpczsgZWxlbWVudDsgZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50KSB7Cisg
ICAgICAgIHRvdGFsTGVmdCArPSBlbGVtZW50Lm9mZnNldExlZnQ7CisgICAgICAgIHRvdGFsVG9w
ICs9IGVsZW1lbnQub2Zmc2V0VG9wOworICAgICAgICBpZiAodGhpcyAhPT0gZWxlbWVudCkgewor
ICAgICAgICAgICAgdG90YWxMZWZ0ICs9IGVsZW1lbnQuY2xpZW50TGVmdCAtIGVsZW1lbnQuc2Ny
b2xsTGVmdDsKKyAgICAgICAgICAgIHRvdGFsVG9wICs9IGVsZW1lbnQuY2xpZW50VG9wIC0gZWxl
bWVudC5zY3JvbGxUb3A7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4geyBsZWZ0OiB0
b3RhbExlZnQsIHRvcDogdG90YWxUb3AgfTsKK30KKworRWxlbWVudC5wcm90b3R5cGUuc2Nyb2xs
T2Zmc2V0ID0gZnVuY3Rpb24oKQoreworICAgIHZhciBjdXJMZWZ0ID0gMDsKKyAgICB2YXIgY3Vy
VG9wID0gMDsKKyAgICBmb3IgKHZhciBlbGVtZW50ID0gdGhpczsgZWxlbWVudDsgZWxlbWVudCA9
IGVsZW1lbnQuc2Nyb2xsUGFyZW50KSB7CisgICAgICAgIGN1ckxlZnQgKz0gZWxlbWVudC5zY3Jv
bGxMZWZ0OworICAgICAgICBjdXJUb3AgKz0gZWxlbWVudC5zY3JvbGxUb3A7CisgICAgfQorICAg
IHJldHVybiB7IGxlZnQ6IGN1ckxlZnQsIHRvcDogY3VyVG9wIH07Cit9CisKKy8qKgorICogQGNv
bnN0cnVjdG9yCisgKiBAcGFyYW0ge251bWJlcj19IHgKKyAqIEBwYXJhbSB7bnVtYmVyPX0geQor
ICogQHBhcmFtIHtudW1iZXI9fSB3aWR0aAorICogQHBhcmFtIHtudW1iZXI9fSBoZWlnaHQKKyAq
LworZnVuY3Rpb24gQW5jaG9yQm94KHgsIHksIHdpZHRoLCBoZWlnaHQpCit7CisgICAgdGhpcy54
ID0geCB8fCAwOworICAgIHRoaXMueSA9IHkgfHwgMDsKKyAgICB0aGlzLndpZHRoID0gd2lkdGgg
fHwgMDsKKyAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwOworfQorCisvKioKKyAqIEBwYXJh
bSB7V2luZG93fSB0YXJnZXRXaW5kb3cKKyAqIEByZXR1cm4ge0FuY2hvckJveH0KKyAqLworRWxl
bWVudC5wcm90b3R5cGUub2Zmc2V0UmVsYXRpdmVUb1dpbmRvdyA9IGZ1bmN0aW9uKHRhcmdldFdp
bmRvdykKK3sKKyAgICB2YXIgZWxlbWVudE9mZnNldCA9IG5ldyBBbmNob3JCb3goKTsKKyAgICB2
YXIgY3VyRWxlbWVudCA9IHRoaXM7CisgICAgdmFyIGN1cldpbmRvdyA9IHRoaXMub3duZXJEb2N1
bWVudC5kZWZhdWx0VmlldzsKKyAgICB3aGlsZSAoY3VyV2luZG93ICYmIGN1ckVsZW1lbnQpIHsK
KyAgICAgICAgZWxlbWVudE9mZnNldC54ICs9IGN1ckVsZW1lbnQudG90YWxPZmZzZXRMZWZ0KCk7
CisgICAgICAgIGVsZW1lbnRPZmZzZXQueSArPSBjdXJFbGVtZW50LnRvdGFsT2Zmc2V0VG9wKCk7
CisgICAgICAgIGlmIChjdXJXaW5kb3cgPT09IHRhcmdldFdpbmRvdykKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGN1ckVsZW1lbnQgPSBjdXJXaW5kb3cuZnJhbWVFbGVtZW50OworICAg
ICAgICBjdXJXaW5kb3cgPSBjdXJXaW5kb3cucGFyZW50OworICAgIH0KKworICAgIHJldHVybiBl
bGVtZW50T2Zmc2V0OworfQorCisvKioKKyAqIEBwYXJhbSB7V2luZG93fSB0YXJnZXRXaW5kb3cK
KyAqIEByZXR1cm4ge0FuY2hvckJveH0KKyAqLworRWxlbWVudC5wcm90b3R5cGUuYm94SW5XaW5k
b3cgPSBmdW5jdGlvbih0YXJnZXRXaW5kb3cpCit7CisgICAgdGFyZ2V0V2luZG93ID0gdGFyZ2V0
V2luZG93IHx8IHRoaXMub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldzsKKworICAgIHZhciBhbmNo
b3JCb3ggPSB0aGlzLm9mZnNldFJlbGF0aXZlVG9XaW5kb3cod2luZG93KTsKKyAgICBhbmNob3JC
b3gud2lkdGggPSBNYXRoLm1pbih0aGlzLm9mZnNldFdpZHRoLCB3aW5kb3cuaW5uZXJXaWR0aCAt
IGFuY2hvckJveC54KTsKKyAgICBhbmNob3JCb3guaGVpZ2h0ID0gTWF0aC5taW4odGhpcy5vZmZz
ZXRIZWlnaHQsIHdpbmRvdy5pbm5lckhlaWdodCAtIGFuY2hvckJveC55KTsKKworICAgIHJldHVy
biBhbmNob3JCb3g7Cit9CisKKy8qKgorICogQHBhcmFtIHtzdHJpbmd9IHRleHQKKyAqLworRWxl
bWVudC5wcm90b3R5cGUuc2V0VGV4dEFuZFRpdGxlID0gZnVuY3Rpb24odGV4dCkKK3sKKyAgICB0
aGlzLnRleHRDb250ZW50ID0gdGV4dDsKKyAgICB0aGlzLnRpdGxlID0gdGV4dDsKK30KKworS2V5
Ym9hcmRFdmVudC5wcm90b3R5cGUuX19kZWZpbmVHZXR0ZXJfXygiZGF0YSIsIGZ1bmN0aW9uKCkK
K3sKKyAgICAvLyBFbXVsYXRlICJkYXRhIiBhdHRyaWJ1dGUgZnJvbSBET00gMyBUZXh0SW5wdXQg
ZXZlbnQuCisgICAgLy8gU2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50
cy8jZXZlbnRzLUV2ZW50cy1UZXh0RXZlbnQtZGF0YQorICAgIHN3aXRjaCAodGhpcy50eXBlKSB7
CisgICAgICAgIGNhc2UgImtleXByZXNzIjoKKyAgICAgICAgICAgIGlmICghdGhpcy5jdHJsS2V5
ICYmICF0aGlzLm1ldGFLZXkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hh
ckNvZGUodGhpcy5jaGFyQ29kZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
cmV0dXJuICIiOworICAgICAgICBjYXNlICJrZXlkb3duIjoKKyAgICAgICAgY2FzZSAia2V5dXAi
OgorICAgICAgICAgICAgaWYgKCF0aGlzLmN0cmxLZXkgJiYgIXRoaXMubWV0YUtleSAmJiAhdGhp
cy5hbHRLZXkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodGhp
cy53aGljaCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuICIiOwor
ICAgIH0KK30pOworCisvKioKKyAqIEBwYXJhbSB7Ym9vbGVhbj19IHByZXZlbnREZWZhdWx0Cisg
Ki8KK0V2ZW50LnByb3RvdHlwZS5jb25zdW1lID0gZnVuY3Rpb24ocHJldmVudERlZmF1bHQpCit7
CisgICAgdGhpcy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTsKKyAgICBpZiAocHJldmVudERl
ZmF1bHQpCisgICAgICAgIHRoaXMucHJldmVudERlZmF1bHQoKTsKKyAgICB0aGlzLmhhbmRsZWQg
PSB0cnVlOworfQorCitUZXh0LnByb3RvdHlwZS5zZWxlY3QgPSBmdW5jdGlvbihzdGFydCwgZW5k
KQoreworICAgIHN0YXJ0ID0gc3RhcnQgfHwgMDsKKyAgICBlbmQgPSBlbmQgfHwgdGhpcy50ZXh0
Q29udGVudC5sZW5ndGg7CisKKyAgICBpZiAoc3RhcnQgPCAwKQorICAgICAgICBzdGFydCA9IGVu
ZCArIHN0YXJ0OworCisgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMub3duZXJEb2N1bWVudC5kZWZh
dWx0Vmlldy5nZXRTZWxlY3Rpb24oKTsKKyAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7
CisgICAgdmFyIHJhbmdlID0gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CisgICAg
cmFuZ2Uuc2V0U3RhcnQodGhpcywgc3RhcnQpOworICAgIHJhbmdlLnNldEVuZCh0aGlzLCBlbmQp
OworICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7CisgICAgcmV0dXJuIHRoaXM7Cit9CisK
K0VsZW1lbnQucHJvdG90eXBlLnNlbGVjdGlvbkxlZnRPZmZzZXQgPSBmdW5jdGlvbigpCit7Cisg
ICAgLy8gQ2FsY3VsYXRlIHNlbGVjdGlvbiBvZmZzZXQgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQg
ZWxlbWVudC4KKworICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7Cisg
ICAgaWYgKCFzZWxlY3Rpb24uY29udGFpbnNOb2RlKHRoaXMsIHRydWUpKQorICAgICAgICByZXR1
cm4gbnVsbDsKKworICAgIHZhciBsZWZ0T2Zmc2V0ID0gc2VsZWN0aW9uLmFuY2hvck9mZnNldDsK
KyAgICB2YXIgbm9kZSA9IHNlbGVjdGlvbi5hbmNob3JOb2RlOworCisgICAgd2hpbGUgKG5vZGUg
IT09IHRoaXMpIHsKKyAgICAgICAgd2hpbGUgKG5vZGUucHJldmlvdXNTaWJsaW5nKSB7CisgICAg
ICAgICAgICBub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7CisgICAgICAgICAgICBsZWZ0T2Zm
c2V0ICs9IG5vZGUudGV4dENvbnRlbnQubGVuZ3RoOworICAgICAgICB9CisgICAgICAgIG5vZGUg
PSBub2RlLnBhcmVudE5vZGU7CisgICAgfQorCisgICAgcmV0dXJuIGxlZnRPZmZzZXQ7Cit9CisK
K05vZGUucHJvdG90eXBlLmlzQW5jZXN0b3IgPSBmdW5jdGlvbihub2RlKQoreworICAgIGlmICgh
bm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdmFyIGN1cnJlbnROb2RlID0gbm9k
ZS5wYXJlbnROb2RlOworICAgIHdoaWxlIChjdXJyZW50Tm9kZSkgeworICAgICAgICBpZiAodGhp
cyA9PT0gY3VycmVudE5vZGUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY3Vy
cmVudE5vZGUgPSBjdXJyZW50Tm9kZS5wYXJlbnROb2RlOworICAgIH0KKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK05vZGUucHJvdG90eXBlLmlzRGVzY2VuZGFudCA9IGZ1bmN0aW9uKGRlc2NlbmRh
bnQpCit7CisgICAgcmV0dXJuICEhZGVzY2VuZGFudCAmJiBkZXNjZW5kYW50LmlzQW5jZXN0b3Io
dGhpcyk7Cit9CisKK05vZGUucHJvdG90eXBlLmlzU2VsZk9yQW5jZXN0b3IgPSBmdW5jdGlvbihu
b2RlKQoreworICAgIHJldHVybiAhIW5vZGUgJiYgKG5vZGUgPT09IHRoaXMgfHwgdGhpcy5pc0Fu
Y2VzdG9yKG5vZGUpKTsKK30KKworTm9kZS5wcm90b3R5cGUuaXNTZWxmT3JEZXNjZW5kYW50ID0g
ZnVuY3Rpb24obm9kZSkKK3sKKyAgICByZXR1cm4gISFub2RlICYmIChub2RlID09PSB0aGlzIHx8
IHRoaXMuaXNEZXNjZW5kYW50KG5vZGUpKTsKK30KKworTm9kZS5wcm90b3R5cGUudHJhdmVyc2VO
ZXh0Tm9kZSA9IGZ1bmN0aW9uKHN0YXlXaXRoaW4pCit7CisgICAgdmFyIG5vZGUgPSB0aGlzLmZp
cnN0Q2hpbGQ7CisgICAgaWYgKG5vZGUpCisgICAgICAgIHJldHVybiBub2RlOworCisgICAgaWYg
KHN0YXlXaXRoaW4gJiYgdGhpcyA9PT0gc3RheVdpdGhpbikKKyAgICAgICAgcmV0dXJuIG51bGw7
CisKKyAgICBub2RlID0gdGhpcy5uZXh0U2libGluZzsKKyAgICBpZiAobm9kZSkKKyAgICAgICAg
cmV0dXJuIG5vZGU7CisKKyAgICBub2RlID0gdGhpczsKKyAgICB3aGlsZSAobm9kZSAmJiAhbm9k
ZS5uZXh0U2libGluZyAmJiAoIXN0YXlXaXRoaW4gfHwgIW5vZGUucGFyZW50Tm9kZSB8fCBub2Rl
LnBhcmVudE5vZGUgIT09IHN0YXlXaXRoaW4pKQorICAgICAgICBub2RlID0gbm9kZS5wYXJlbnRO
b2RlOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICByZXR1cm4g
bm9kZS5uZXh0U2libGluZzsKK30KKworTm9kZS5wcm90b3R5cGUudHJhdmVyc2VQcmV2aW91c05v
ZGUgPSBmdW5jdGlvbihzdGF5V2l0aGluKQoreworICAgIGlmIChzdGF5V2l0aGluICYmIHRoaXMg
PT09IHN0YXlXaXRoaW4pCisgICAgICAgIHJldHVybiBudWxsOworICAgIHZhciBub2RlID0gdGhp
cy5wcmV2aW91c1NpYmxpbmc7CisgICAgd2hpbGUgKG5vZGUgJiYgbm9kZS5sYXN0Q2hpbGQpCisg
ICAgICAgIG5vZGUgPSBub2RlLmxhc3RDaGlsZDsKKyAgICBpZiAobm9kZSkKKyAgICAgICAgcmV0
dXJuIG5vZGU7CisgICAgcmV0dXJuIHRoaXMucGFyZW50Tm9kZTsKK30KKworSFRNTFRleHRBcmVh
RWxlbWVudC5wcm90b3R5cGUubW92ZUN1cnNvclRvRW5kID0gZnVuY3Rpb24oKQoreworICAgIHZh
ciBsZW5ndGggPSB0aGlzLnZhbHVlLmxlbmd0aDsKKyAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdl
KGxlbmd0aCwgbGVuZ3RoKTsKK30KKworZnVuY3Rpb24gaXNFbnRlcktleShldmVudCkgeworICAg
IC8vIENoZWNrIGlmIGluIElNRS4KKyAgICByZXR1cm4gZXZlbnQua2V5Q29kZSAhPT0gMjI5ICYm
IGV2ZW50LmtleUlkZW50aWZpZXIgPT09ICJFbnRlciI7Cit9CisKK2Z1bmN0aW9uIGNvbnN1bWVF
dmVudChlKQoreworICAgIGUuY29uc3VtZSgpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1RyZWVPdXRsaW5lLmpzIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1RyZWVPdXRsaW5lLmpzCmluZGV4IGM2
NjEyNjk2ZmEyNzBhMzMxY2NjYTZjZDExODQxM2U4YWMyYzYyZjIuLjIwZDk3OGI5N2E3MWEyZWZj
ZThhNGQyN2EzYTc0ODBjYjhhMmQwNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvRWxlbWVudHNUcmVlT3V0bGluZS5qcworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzVHJlZU91dGxpbmUuanMKQEAgLTE3NTcsNyAr
MTc1Nyw3IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsK
ICAgICAgICAgICAgIG1hdGNoUmFuZ2VzLnB1c2goeyBvZmZzZXQ6IDAsIGxlbmd0aDogdGV4dC5s
ZW5ndGggfSk7CiAKICAgICAgICAgdGhpcy5faGlnaGxpZ2h0UmVzdWx0ID0gW107Ci0gICAgICAg
IGhpZ2hsaWdodFNlYXJjaFJlc3VsdHModGhpcy5saXN0SXRlbUVsZW1lbnQsIG1hdGNoUmFuZ2Vz
LCB0aGlzLl9oaWdobGlnaHRSZXN1bHQpOworICAgICAgICBXZWJJbnNwZWN0b3IuaGlnaGxpZ2h0
U2VhcmNoUmVzdWx0cyh0aGlzLmxpc3RJdGVtRWxlbWVudCwgbWF0Y2hSYW5nZXMsIHRoaXMuX2hp
Z2hsaWdodFJlc3VsdCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0ZpbHRlcmVkSXRlbVNlbGVjdGlvbkRpYWxvZy5qcyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRmlsdGVyZWRJdGVtU2VsZWN0aW9uRGlhbG9n
LmpzCmluZGV4IDAwMDZjNDYxNzAyMjVjOTljZTJkOTMyNjRiNTg5M2VkOGJhMTczMjAuLjFiNDE0
NjhmMDVhN2UxNDE4ZGI4NTVkZTBmMGNiNWM3OTk1ZTY2N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRmlsdGVyZWRJdGVtU2VsZWN0aW9uRGlhbG9nLmpz
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRmlsdGVyZWRJdGVtU2Vs
ZWN0aW9uRGlhbG9nLmpzCkBAIC0zNzksNyArMzc5LDcgQEAgV2ViSW5zcGVjdG9yLkZpbHRlcmVk
SXRlbVNlbGVjdGlvbkRpYWxvZy5wcm90b3R5cGUgPSB7CiAgICAgewogICAgICAgICB2YXIgY2hh
bmdlcyA9IHRoaXMuX2VsZW1lbnRIaWdobGlnaHRDaGFuZ2VzLmdldChpdGVtRWxlbWVudCkKICAg
ICAgICAgaWYgKGNoYW5nZXMpIHsKLSAgICAgICAgICAgIHJldmVydERvbUNoYW5nZXMoY2hhbmdl
cyk7CisgICAgICAgICAgICBXZWJJbnNwZWN0b3IucmV2ZXJ0RG9tQ2hhbmdlcyhjaGFuZ2VzKTsK
ICAgICAgICAgICAgIHRoaXMuX2VsZW1lbnRIaWdobGlnaHRDaGFuZ2VzLnJlbW92ZShpdGVtRWxl
bWVudCk7CiAgICAgICAgIH0KICAgICB9LApAQCAtNDAxLDcgKzQwMSw3IEBAIFdlYkluc3BlY3Rv
ci5GaWx0ZXJlZEl0ZW1TZWxlY3Rpb25EaWFsb2cucHJvdG90eXBlID0gewogICAgICAgICB9CiAK
ICAgICAgICAgdmFyIGNoYW5nZXMgPSBbXTsKLSAgICAgICAgaGlnaGxpZ2h0UmFuZ2VzV2l0aFN0
eWxlQ2xhc3MoaXRlbUVsZW1lbnQsIHJhbmdlcywgImhpZ2hsaWdodCIsIGNoYW5nZXMpOworICAg
ICAgICBXZWJJbnNwZWN0b3IuaGlnaGxpZ2h0UmFuZ2VzV2l0aFN0eWxlQ2xhc3MoaXRlbUVsZW1l
bnQsIHJhbmdlcywgImhpZ2hsaWdodCIsIGNoYW5nZXMpOwogCiAgICAgICAgIGlmIChjaGFuZ2Vz
Lmxlbmd0aCkKICAgICAgICAgICAgIHRoaXMuX2VsZW1lbnRIaWdobGlnaHRDaGFuZ2VzLnB1dChp
dGVtRWxlbWVudCwgY2hhbmdlcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvSGVhcFNuYXBzaG90LmpzCmluZGV4IDk0ZDhiZjU0NTA5ZTI1MmI3OTQ2ZjA0YzU1
OTk0ZWJiY2Y0Y2EyMDYuLjdkZDExZWE1OTk2ZDZmOWQ3YTBlNjRiYmVmMDY0OTQ1ZGExMGI1ODIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBz
aG90LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBz
aG90LmpzCkBAIC0xNjEsNyArMTYxLDcgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdExvYWRl
ci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB2YXIgY2xvc2luZ0JyYWNrZXRJbmRleCA9IHRo
aXMuX2ZpbmRCYWxhbmNlZEN1cmx5QnJhY2tldHMoKTsKICAgICAgICAgICAgIGlmIChjbG9zaW5n
QnJhY2tldEluZGV4ID09PSAtMSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICB0aGlzLl9zbmFwc2hvdC5zbmFwc2hvdCA9IEpTT04ucGFyc2UodGhpcy5fanNvbi5zbGljZSgw
LCBjbG9zaW5nQnJhY2tldEluZGV4KSk7CisgICAgICAgICAgICB0aGlzLl9zbmFwc2hvdC5zbmFw
c2hvdCA9IC8qKiBAdHlwZSB7SGVhcFNuYXBzaG90SGVhZGVyfSAqL0pTT04ucGFyc2UodGhpcy5f
anNvbi5zbGljZSgwLCBjbG9zaW5nQnJhY2tldEluZGV4KSk7CiAgICAgICAgICAgICB0aGlzLl9q
c29uID0gdGhpcy5fanNvbi5zbGljZShjbG9zaW5nQnJhY2tldEluZGV4KTsKICAgICAgICAgICAg
IHRoaXMuX3N0YXRlID0gImZpbmQtbm9kZXMiOwogICAgICAgICAgICAgdGhpcy5wdXNoSlNPTkNo
dW5rKCIiKTsKQEAgLTg1NCw2ICs4NTQsMTkgQEAgZnVuY3Rpb24gSGVhcFNuYXBzaG90TWV0YWlu
Zm8oKQogICAgIHRoaXMudHlwZXMgPSBbXTsKIH0KIAorLyoqCisgKiBAY29uc3RydWN0b3IKKyAq
LworZnVuY3Rpb24gSGVhcFNuYXBzaG90SGVhZGVyKCkKK3sKKyAgICAvLyBOZXcgZm9ybWF0Lgor
ICAgIHRoaXMudGl0bGUgPSAiIjsKKyAgICB0aGlzLnVpZCA9IDA7CisgICAgdGhpcy5tZXRhID0g
bmV3IEhlYXBTbmFwc2hvdE1ldGFpbmZvKCk7CisgICAgdGhpcy5ub2RlX2NvdW50ID0gMDsKKyAg
ICB0aGlzLmVkZ2VfY291bnQgPSAwOworfQorCiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnBy
b3RvdHlwZSA9IHsKICAgICBfaW5pdDogZnVuY3Rpb24oKQogICAgIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90V29ya2VyLmpzIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RXb3JrZXIuanMK
aW5kZXggM2E5YTJjYTM5NTVjZjMyNGMxOTMzMGFmMDhjNzkwZmU2MzlkM2IxNS4uN2MwNWNiZDc2
NTE3MThkMTRmZmQyZjVlYTU0ZmJiNjlkMTQ4YjBjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RXb3JrZXIuanMKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RXb3JrZXIuanMKQEAgLTMx
LDEwICszMSw5IEBACiBXZWJJbnNwZWN0b3IgPSB7fTsKIFdlYkluc3BlY3Rvci5VSVN0cmluZyA9
IGZ1bmN0aW9uKHMpIHsgcmV0dXJuIHM7IH07CiAKLWltcG9ydFNjcmlwdHMoIkJpbmFyeVNlYXJj
aC5qcyIpOwogaW1wb3J0U2NyaXB0cygiSGVhcFNuYXBzaG90LmpzIik7CiBpbXBvcnRTY3JpcHRz
KCJIZWFwU25hcHNob3RXb3JrZXJEaXNwYXRjaGVyLmpzIik7Ci1pbXBvcnRTY3JpcHRzKCJQYXJ0
aWFsUXVpY2tTb3J0LmpzIik7CitpbXBvcnRTY3JpcHRzKCJ1dGlsaXRpZXMuanMiKTsKIAogZnVu
Y3Rpb24gcG9zdE1lc3NhZ2VXcmFwcGVyKG1lc3NhZ2UpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0phdmFTY3JpcHRTb3VyY2VGcmFtZS5qcyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSmF2YVNjcmlwdFNvdXJjZUZyYW1lLmpz
CmluZGV4IGJkNmY3NjdjMTJlMmEyNDc5NGNkMTc1MjU1OWRlZTY2YjEwOWZjMWMuLmI3NWI3NWM0
OGExYTk4ODk2YWRkMTA1ZjgxYjhjNjRlMTNjMDJhYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSmF2YVNjcmlwdFNvdXJjZUZyYW1lLmpzCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSmF2YVNjcmlwdFNvdXJjZUZyYW1lLmpz
CkBAIC0yMzksNyArMjM5LDcgQEAgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZS5w
cm90b3R5cGUgPSB7CiAKICAgICAgICAgLy8gMi4gJ2hpZ2hsaWdodCcgdGhlbSB3aXRoIGFydGlm
aWNpYWwgc3R5bGUgdG8gZGV0ZWN0IHdvcmQgYm91bmRhcmllcwogICAgICAgICB2YXIgY2hhbmdl
cyA9IFtdOwotICAgICAgICBoaWdobGlnaHRSYW5nZXNXaXRoU3R5bGVDbGFzcyhsaW5lRWxlbWVu
dCwgcmFuZ2VzLCAic291cmNlLWZyYW1lLXRva2VuIiwgY2hhbmdlcyk7CisgICAgICAgIFdlYklu
c3BlY3Rvci5oaWdobGlnaHRSYW5nZXNXaXRoU3R5bGVDbGFzcyhsaW5lRWxlbWVudCwgcmFuZ2Vz
LCAic291cmNlLWZyYW1lLXRva2VuIiwgY2hhbmdlcyk7CiAgICAgICAgIHZhciBsaW5lT2Zmc2V0
TGVmdCA9IGxpbmVFbGVtZW50LnRvdGFsT2Zmc2V0TGVmdCgpOwogICAgICAgICBmb3IgKHZhciBj
aGlsZCA9IGxpbmVFbGVtZW50LmZpcnN0Q2hpbGQ7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLm5leHRT
aWJsaW5nKSB7CiAgICAgICAgICAgICBpZiAoY2hpbGQubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVO
VF9OT0RFIHx8ICFjaGlsZC5oYXNTdHlsZUNsYXNzKCJzb3VyY2UtZnJhbWUtdG9rZW4iKSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTmV0d29ya1BhbmVs
LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9OZXR3b3JrUGFuZWwuanMK
aW5kZXggM2NiYTFkYWRjYzZhZTMwZjVkMjE1NTQ2NzBkYWJkZWYwYTRlNmU2Mi4uMTM5YjE4N2Vj
ZmIyNTYxYzA5ZTEyNjNhZDg5Y2NiN2NiZDM3YmVhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9OZXR3b3JrUGFuZWwuanMKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9OZXR3b3JrUGFuZWwuanMKQEAgLTExMTIsNyArMTExMiw3
IEBAIFdlYkluc3BlY3Rvci5OZXR3b3JrTG9nVmlldy5wcm90b3R5cGUgPSB7CiAgICAgX2hpZ2hs
aWdodE50aE1hdGNoZWRSZXF1ZXN0OiBmdW5jdGlvbihtYXRjaGVkUmVxdWVzdEluZGV4LCByZXZl
YWwpCiAgICAgewogICAgICAgICBpZiAodGhpcy5faGlnaGxpZ2h0ZWRTdWJzdHJpbmdDaGFuZ2Vz
KSB7Ci0gICAgICAgICAgICByZXZlcnREb21DaGFuZ2VzKHRoaXMuX2hpZ2hsaWdodGVkU3Vic3Ry
aW5nQ2hhbmdlcyk7CisgICAgICAgICAgICBXZWJJbnNwZWN0b3IucmV2ZXJ0RG9tQ2hhbmdlcyh0
aGlzLl9oaWdobGlnaHRlZFN1YnN0cmluZ0NoYW5nZXMpOwogICAgICAgICAgICAgdGhpcy5faGln
aGxpZ2h0ZWRTdWJzdHJpbmdDaGFuZ2VzID0gbnVsbDsKICAgICAgICAgfQogCkBAIC0xNzMzLDcg
KzE3MzMsNyBAQCBXZWJJbnNwZWN0b3IuTmV0d29ya0RhdGFHcmlkTm9kZS5wcm90b3R5cGUgPSB7
CiAgICAgewogICAgICAgICB2YXIgZG9tQ2hhbmdlcyA9IFtdOwogICAgICAgICB2YXIgbWF0Y2hJ
bmZvID0gdGhpcy5fbmFtZUNlbGwudGV4dENvbnRlbnQubWF0Y2gocmVnZXhwKTsKLSAgICAgICAg
aGlnaGxpZ2h0U2VhcmNoUmVzdWx0KHRoaXMuX25hbWVDZWxsLCBtYXRjaEluZm8uaW5kZXgsIG1h
dGNoSW5mb1swXS5sZW5ndGgsIGRvbUNoYW5nZXMpOworICAgICAgICBXZWJJbnNwZWN0b3IuaGln
aGxpZ2h0U2VhcmNoUmVzdWx0KHRoaXMuX25hbWVDZWxsLCBtYXRjaEluZm8uaW5kZXgsIG1hdGNo
SW5mb1swXS5sZW5ndGgsIGRvbUNoYW5nZXMpOwogICAgICAgICByZXR1cm4gZG9tQ2hhbmdlczsK
ICAgICB9LAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1BhcnRpYWxRdWlja1NvcnQuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1BhcnRpYWxRdWlja1NvcnQuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MWE3
MjFmM2MwNmYxODdiMTNmZGM5Mzc5M2EyZjcxYzYyZTE2MmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9QYXJ0aWFsUXVpY2tTb3J0LmpzCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0g
KiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLU9i
amVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsICJzb3J0UmFuZ2UiLCB7IHZhbHVl
OiAKLS8qKiBAdGhpcyB7QXJyYXl9ICovCi1mdW5jdGlvbihjb21wYXJhdG9yLCBsZWZ0Qm91bmQs
IHJpZ2h0Qm91bmQsIGspCi17Ci0gICAgZnVuY3Rpb24gcXVpY2tTb3J0Rmlyc3RLKGFycmF5LCBj
b21wYXJhdG9yLCBsZWZ0LCByaWdodCwgaykKLSAgICB7Ci0gICAgICAgIGlmIChyaWdodCA8PSBs
ZWZ0KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2YXIgcGl2b3RJbmRleCA9IE1hdGgu
Zmxvb3IoTWF0aC5yYW5kb20oKSAqIChyaWdodCAtIGxlZnQpKSArIGxlZnQ7Ci0gICAgICAgIHZh
ciBwaXZvdE5ld0luZGV4ID0gYXJyYXkucGFydGl0aW9uKGNvbXBhcmF0b3IsIGxlZnQsIHJpZ2h0
LCBwaXZvdEluZGV4KTsKLSAgICAgICAgcXVpY2tTb3J0Rmlyc3RLKGFycmF5LCBjb21wYXJhdG9y
LCBsZWZ0LCBwaXZvdE5ld0luZGV4IC0gMSwgayk7Ci0gICAgICAgIGlmIChwaXZvdE5ld0luZGV4
IDwgbGVmdCArIGsgLSAxKQotICAgICAgICAgICAgcXVpY2tTb3J0Rmlyc3RLKGFycmF5LCBjb21w
YXJhdG9yLCBwaXZvdE5ld0luZGV4ICsgMSwgcmlnaHQsIGspOwotICAgIH0KLQotICAgIGlmIChs
ZWZ0Qm91bmQgPT09IDAgJiYgcmlnaHRCb3VuZCA9PT0gKHRoaXMubGVuZ3RoIC0gMSkgJiYgayA9
PT0gdGhpcy5sZW5ndGgpCi0gICAgICAgIHRoaXMuc29ydChjb21wYXJhdG9yKTsKLSAgICBlbHNl
Ci0gICAgICAgIHF1aWNrU29ydEZpcnN0Syh0aGlzLCBjb21wYXJhdG9yLCBsZWZ0Qm91bmQsIHJp
Z2h0Qm91bmQsIGspOwotICAgIHJldHVybiB0aGlzOwotfX0pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0Vmlld2VyLmpzIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0Vmlld2VyLmpzCmluZGV4IDBmNDA0ZTFiMDk2M2Jm
ZGNhNTgzMzVlZTJjZjc1ZTI2MGE1MmJjMzcuLjBlNmM1MDQyNWEyNzNhNjlmNWRiNGE2NjliODg2
MDQ0ZjAxMzAzMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvVGV4dFZpZXdlci5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1RleHRWaWV3ZXIuanMKQEAgLTE1MTIsNyArMTUxMiw3IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRp
dG9yTWFpblBhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICBsaW5lUm93LmFwcGVu
ZENoaWxkKGxpbmVSb3cuZGVjb3JhdGlvbnNFbGVtZW50KTsKICAgICAgICAgfSBmaW5hbGx5IHsK
ICAgICAgICAgICAgIGlmICh0aGlzLl9yYW5nZVRvTWFyayAmJiB0aGlzLl9yYW5nZVRvTWFyay5z
dGFydExpbmUgPT09IGxpbmVOdW1iZXIpCi0gICAgICAgICAgICAgICAgdGhpcy5fbWFya2VkUmFu
Z2VFbGVtZW50ID0gaGlnaGxpZ2h0U2VhcmNoUmVzdWx0KGxpbmVSb3csIHRoaXMuX3JhbmdlVG9N
YXJrLnN0YXJ0Q29sdW1uLCB0aGlzLl9yYW5nZVRvTWFyay5lbmRDb2x1bW4gLSB0aGlzLl9yYW5n
ZVRvTWFyay5zdGFydENvbHVtbik7CisgICAgICAgICAgICAgICAgdGhpcy5fbWFya2VkUmFuZ2VF
bGVtZW50ID0gV2ViSW5zcGVjdG9yLmhpZ2hsaWdodFNlYXJjaFJlc3VsdChsaW5lUm93LCB0aGlz
Ll9yYW5nZVRvTWFyay5zdGFydENvbHVtbiwgdGhpcy5fcmFuZ2VUb01hcmsuZW5kQ29sdW1uIC0g
dGhpcy5fcmFuZ2VUb01hcmsuc3RhcnRDb2x1bW4pOwogICAgICAgICAgICAgdGhpcy5lbmREb21V
cGRhdGVzKCk7CiAgICAgICAgIH0KICAgICB9LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9VSVV0aWxzLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9VSVV0aWxzLmpzCmluZGV4IDQ5ZDU3NjdiNmI3NjhiZWZhMmU5ZmQ1MGFjOTlh
OTgxNjUzOWRmZDMuLjNiOTIyMWZlZGIwMGUzYzY0NTgwYTMzOGE3MTU1NWVmMzFjYjViY2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVUlVdGlscy5qcwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1VJVXRpbHMuanMKQEAgLTY3
MSw2ICs2NzEsMTQ0IEBAIFdlYkluc3BlY3Rvci5yZXNldFRvb2xiYXJDb2xvcnMgPSBmdW5jdGlv
bigpCiB9CiAKIC8qKgorICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50CisgKiBAcGFyYW0ge251
bWJlcn0gb2Zmc2V0CisgKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoCisgKiBAcGFyYW0ge0FycmF5
LjxPYmplY3Q+PX0gZG9tQ2hhbmdlcworICovCitXZWJJbnNwZWN0b3IuaGlnaGxpZ2h0U2VhcmNo
UmVzdWx0ID0gZnVuY3Rpb24oZWxlbWVudCwgb2Zmc2V0LCBsZW5ndGgsIGRvbUNoYW5nZXMpCit7
CisgICAgdmFyIHJlc3VsdCA9IFdlYkluc3BlY3Rvci5oaWdobGlnaHRTZWFyY2hSZXN1bHRzKGVs
ZW1lbnQsIFt7b2Zmc2V0OiBvZmZzZXQsIGxlbmd0aDogbGVuZ3RoIH1dLCBkb21DaGFuZ2VzKTsK
KyAgICByZXR1cm4gcmVzdWx0Lmxlbmd0aCA/IHJlc3VsdFswXSA6IG51bGw7Cit9CisKKy8qKgor
ICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50CisgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBy
ZXN1bHRSYW5nZXMKKyAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD49fSBjaGFuZ2VzCisgKi8KK1dl
Ykluc3BlY3Rvci5oaWdobGlnaHRTZWFyY2hSZXN1bHRzID0gZnVuY3Rpb24oZWxlbWVudCwgcmVz
dWx0UmFuZ2VzLCBjaGFuZ2VzKQoreworICAgIHJldHVybiBXZWJJbnNwZWN0b3IuaGlnaGxpZ2h0
UmFuZ2VzV2l0aFN0eWxlQ2xhc3MoZWxlbWVudCwgcmVzdWx0UmFuZ2VzLCAid2Via2l0LXNlYXJj
aC1yZXN1bHQiLCBjaGFuZ2VzKTsKK30KKworLyoqCisgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1l
bnQKKyAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IHJlc3VsdFJhbmdlcworICogQHBhcmFtIHtz
dHJpbmd9IHN0eWxlQ2xhc3MKKyAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD49fSBjaGFuZ2VzCisg
Ki8KK1dlYkluc3BlY3Rvci5oaWdobGlnaHRSYW5nZXNXaXRoU3R5bGVDbGFzcyA9IGZ1bmN0aW9u
KGVsZW1lbnQsIHJlc3VsdFJhbmdlcywgc3R5bGVDbGFzcywgY2hhbmdlcykKK3sKKyAgICBjaGFu
Z2VzID0gY2hhbmdlcyB8fCBbXTsKKyAgICB2YXIgaGlnaGxpZ2h0Tm9kZXMgPSBbXTsKKyAgICB2
YXIgbGluZVRleHQgPSBlbGVtZW50LnRleHRDb250ZW50OworICAgIHZhciBvd25lckRvY3VtZW50
ID0gZWxlbWVudC5vd25lckRvY3VtZW50OworICAgIHZhciB0ZXh0Tm9kZVNuYXBzaG90ID0gb3du
ZXJEb2N1bWVudC5ldmFsdWF0ZSgiLi8vdGV4dCgpIiwgZWxlbWVudCwgbnVsbCwgWFBhdGhSZXN1
bHQuT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUsIG51bGwpOworCisgICAgdmFyIHNuYXBzaG90
TGVuZ3RoID0gdGV4dE5vZGVTbmFwc2hvdC5zbmFwc2hvdExlbmd0aDsKKyAgICBpZiAoc25hcHNo
b3RMZW5ndGggPT09IDApCisgICAgICAgIHJldHVybiBoaWdobGlnaHROb2RlczsKKworICAgIHZh
ciBub2RlUmFuZ2VzID0gW107CisgICAgdmFyIHJhbmdlRW5kT2Zmc2V0ID0gMDsKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHNuYXBzaG90TGVuZ3RoOyArK2kpIHsKKyAgICAgICAgdmFyIHJhbmdl
ID0ge307CisgICAgICAgIHJhbmdlLm9mZnNldCA9IHJhbmdlRW5kT2Zmc2V0OworICAgICAgICBy
YW5nZS5sZW5ndGggPSB0ZXh0Tm9kZVNuYXBzaG90LnNuYXBzaG90SXRlbShpKS50ZXh0Q29udGVu
dC5sZW5ndGg7CisgICAgICAgIHJhbmdlRW5kT2Zmc2V0ID0gcmFuZ2Uub2Zmc2V0ICsgcmFuZ2Uu
bGVuZ3RoOworICAgICAgICBub2RlUmFuZ2VzLnB1c2gocmFuZ2UpOworICAgIH0KKworICAgIHZh
ciBzdGFydEluZGV4ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdFJhbmdlcy5s
ZW5ndGg7ICsraSkgeworICAgICAgICB2YXIgc3RhcnRPZmZzZXQgPSByZXN1bHRSYW5nZXNbaV0u
b2Zmc2V0OworICAgICAgICB2YXIgZW5kT2Zmc2V0ID0gc3RhcnRPZmZzZXQgKyByZXN1bHRSYW5n
ZXNbaV0ubGVuZ3RoOworCisgICAgICAgIHdoaWxlIChzdGFydEluZGV4IDwgc25hcHNob3RMZW5n
dGggJiYgbm9kZVJhbmdlc1tzdGFydEluZGV4XS5vZmZzZXQgKyBub2RlUmFuZ2VzW3N0YXJ0SW5k
ZXhdLmxlbmd0aCA8PSBzdGFydE9mZnNldCkKKyAgICAgICAgICAgIHN0YXJ0SW5kZXgrKzsKKyAg
ICAgICAgdmFyIGVuZEluZGV4ID0gc3RhcnRJbmRleDsKKyAgICAgICAgd2hpbGUgKGVuZEluZGV4
IDwgc25hcHNob3RMZW5ndGggJiYgbm9kZVJhbmdlc1tlbmRJbmRleF0ub2Zmc2V0ICsgbm9kZVJh
bmdlc1tlbmRJbmRleF0ubGVuZ3RoIDwgZW5kT2Zmc2V0KQorICAgICAgICAgICAgZW5kSW5kZXgr
KzsKKyAgICAgICAgaWYgKGVuZEluZGV4ID09PSBzbmFwc2hvdExlbmd0aCkKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIHZhciBoaWdobGlnaHROb2RlID0gb3duZXJEb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJzcGFuIik7CisgICAgICAgIGhpZ2hsaWdodE5vZGUuY2xhc3NOYW1lID0gc3R5
bGVDbGFzczsKKyAgICAgICAgaGlnaGxpZ2h0Tm9kZS50ZXh0Q29udGVudCA9IGxpbmVUZXh0LnN1
YnN0cmluZyhzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKworICAgICAgICB2YXIgbGFzdFRleHRO
b2RlID0gdGV4dE5vZGVTbmFwc2hvdC5zbmFwc2hvdEl0ZW0oZW5kSW5kZXgpOworICAgICAgICB2
YXIgbGFzdFRleHQgPSBsYXN0VGV4dE5vZGUudGV4dENvbnRlbnQ7CisgICAgICAgIGxhc3RUZXh0
Tm9kZS50ZXh0Q29udGVudCA9IGxhc3RUZXh0LnN1YnN0cmluZyhlbmRPZmZzZXQgLSBub2RlUmFu
Z2VzW2VuZEluZGV4XS5vZmZzZXQpOworICAgICAgICBjaGFuZ2VzLnB1c2goeyBub2RlOiBsYXN0
VGV4dE5vZGUsIHR5cGU6ICJjaGFuZ2VkIiwgb2xkVGV4dDogbGFzdFRleHQsIG5ld1RleHQ6IGxh
c3RUZXh0Tm9kZS50ZXh0Q29udGVudCB9KTsKKworICAgICAgICBpZiAoc3RhcnRJbmRleCA9PT0g
ZW5kSW5kZXgpIHsKKyAgICAgICAgICAgIGxhc3RUZXh0Tm9kZS5wYXJlbnRFbGVtZW50Lmluc2Vy
dEJlZm9yZShoaWdobGlnaHROb2RlLCBsYXN0VGV4dE5vZGUpOworICAgICAgICAgICAgY2hhbmdl
cy5wdXNoKHsgbm9kZTogaGlnaGxpZ2h0Tm9kZSwgdHlwZTogImFkZGVkIiwgbmV4dFNpYmxpbmc6
IGxhc3RUZXh0Tm9kZSwgcGFyZW50OiBsYXN0VGV4dE5vZGUucGFyZW50RWxlbWVudCB9KTsKKyAg
ICAgICAgICAgIGhpZ2hsaWdodE5vZGVzLnB1c2goaGlnaGxpZ2h0Tm9kZSk7CisKKyAgICAgICAg
ICAgIHZhciBwcmVmaXhOb2RlID0gb3duZXJEb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShsYXN0VGV4
dC5zdWJzdHJpbmcoMCwgc3RhcnRPZmZzZXQgLSBub2RlUmFuZ2VzW3N0YXJ0SW5kZXhdLm9mZnNl
dCkpOworICAgICAgICAgICAgbGFzdFRleHROb2RlLnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3Jl
KHByZWZpeE5vZGUsIGhpZ2hsaWdodE5vZGUpOworICAgICAgICAgICAgY2hhbmdlcy5wdXNoKHsg
bm9kZTogcHJlZml4Tm9kZSwgdHlwZTogImFkZGVkIiwgbmV4dFNpYmxpbmc6IGhpZ2hsaWdodE5v
ZGUsIHBhcmVudDogbGFzdFRleHROb2RlLnBhcmVudEVsZW1lbnQgfSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICB2YXIgZmlyc3RUZXh0Tm9kZSA9IHRleHROb2RlU25hcHNob3Quc25h
cHNob3RJdGVtKHN0YXJ0SW5kZXgpOworICAgICAgICAgICAgdmFyIGZpcnN0VGV4dCA9IGZpcnN0
VGV4dE5vZGUudGV4dENvbnRlbnQ7CisgICAgICAgICAgICB2YXIgYW5jaG9yRWxlbWVudCA9IGZp
cnN0VGV4dE5vZGUubmV4dFNpYmxpbmc7CisKKyAgICAgICAgICAgIGZpcnN0VGV4dE5vZGUucGFy
ZW50RWxlbWVudC5pbnNlcnRCZWZvcmUoaGlnaGxpZ2h0Tm9kZSwgYW5jaG9yRWxlbWVudCk7Cisg
ICAgICAgICAgICBjaGFuZ2VzLnB1c2goeyBub2RlOiBoaWdobGlnaHROb2RlLCB0eXBlOiAiYWRk
ZWQiLCBuZXh0U2libGluZzogYW5jaG9yRWxlbWVudCwgcGFyZW50OiBmaXJzdFRleHROb2RlLnBh
cmVudEVsZW1lbnQgfSk7CisgICAgICAgICAgICBoaWdobGlnaHROb2Rlcy5wdXNoKGhpZ2hsaWdo
dE5vZGUpOworCisgICAgICAgICAgICBmaXJzdFRleHROb2RlLnRleHRDb250ZW50ID0gZmlyc3RU
ZXh0LnN1YnN0cmluZygwLCBzdGFydE9mZnNldCAtIG5vZGVSYW5nZXNbc3RhcnRJbmRleF0ub2Zm
c2V0KTsKKyAgICAgICAgICAgIGNoYW5nZXMucHVzaCh7IG5vZGU6IGZpcnN0VGV4dE5vZGUsIHR5
cGU6ICJjaGFuZ2VkIiwgb2xkVGV4dDogZmlyc3RUZXh0LCBuZXdUZXh0OiBmaXJzdFRleHROb2Rl
LnRleHRDb250ZW50IH0pOworCisgICAgICAgICAgICBmb3IgKHZhciBqID0gc3RhcnRJbmRleCAr
IDE7IGogPCBlbmRJbmRleDsgaisrKSB7CisgICAgICAgICAgICAgICAgdmFyIHRleHROb2RlID0g
dGV4dE5vZGVTbmFwc2hvdC5zbmFwc2hvdEl0ZW0oaik7CisgICAgICAgICAgICAgICAgdmFyIHRl
eHQgPSB0ZXh0Tm9kZS50ZXh0Q29udGVudDsKKyAgICAgICAgICAgICAgICB0ZXh0Tm9kZS50ZXh0
Q29udGVudCA9ICIiOworICAgICAgICAgICAgICAgIGNoYW5nZXMucHVzaCh7IG5vZGU6IHRleHRO
b2RlLCB0eXBlOiAiY2hhbmdlZCIsIG9sZFRleHQ6IHRleHQsIG5ld1RleHQ6IHRleHROb2RlLnRl
eHRDb250ZW50IH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHN0YXJ0SW5k
ZXggPSBlbmRJbmRleDsKKyAgICAgICAgbm9kZVJhbmdlc1tzdGFydEluZGV4XS5vZmZzZXQgPSBl
bmRPZmZzZXQ7CisgICAgICAgIG5vZGVSYW5nZXNbc3RhcnRJbmRleF0ubGVuZ3RoID0gbGFzdFRl
eHROb2RlLnRleHRDb250ZW50Lmxlbmd0aDsKKworICAgIH0KKyAgICByZXR1cm4gaGlnaGxpZ2h0
Tm9kZXM7Cit9CisKK1dlYkluc3BlY3Rvci5hcHBseURvbUNoYW5nZXMgPSBmdW5jdGlvbihkb21D
aGFuZ2VzKQoreworICAgIGZvciAodmFyIGkgPSAwLCBzaXplID0gZG9tQ2hhbmdlcy5sZW5ndGg7
IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgdmFyIGVudHJ5ID0gZG9tQ2hhbmdlc1tpXTsKKyAg
ICAgICAgc3dpdGNoIChlbnRyeS50eXBlKSB7CisgICAgICAgIGNhc2UgImFkZGVkIjoKKyAgICAg
ICAgICAgIGVudHJ5LnBhcmVudC5pbnNlcnRCZWZvcmUoZW50cnkubm9kZSwgZW50cnkubmV4dFNp
YmxpbmcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgImNoYW5nZWQiOgorICAg
ICAgICAgICAgZW50cnkubm9kZS50ZXh0Q29udGVudCA9IGVudHJ5Lm5ld1RleHQ7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworV2ViSW5zcGVjdG9yLnJldmVydERv
bUNoYW5nZXMgPSBmdW5jdGlvbihkb21DaGFuZ2VzKQoreworICAgIGZvciAodmFyIGkgPSBkb21D
aGFuZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIHZhciBlbnRyeSA9IGRv
bUNoYW5nZXNbaV07CisgICAgICAgIHN3aXRjaCAoZW50cnkudHlwZSkgeworICAgICAgICBjYXNl
ICJhZGRlZCI6CisgICAgICAgICAgICBpZiAoZW50cnkubm9kZS5wYXJlbnRFbGVtZW50KQorICAg
ICAgICAgICAgICAgIGVudHJ5Lm5vZGUucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChlbnRyeS5u
b2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJjaGFuZ2VkIjoKKyAgICAg
ICAgICAgIGVudHJ5Lm5vZGUudGV4dENvbnRlbnQgPSBlbnRyeS5vbGRUZXh0OworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qKgogICogQHBhcmFtIHtXZWJJbnNw
ZWN0b3IuQ29udGV4dE1lbnV9IGNvbnRleHRNZW51CiAgKiBAcGFyYW0ge05vZGV9IGNvbnRleHRO
b2RlCiAgKiBAcGFyYW0ge0V2ZW50fSBldmVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9XZWJLaXQucXJjCmluZGV4IGU0YjUwZWQ1YTc4ZDM3YjQ5MTU4YjllNmYyNDBh
MTFlNjU4OTRkMjQuLmE2MWVjYjg5Nzk5YTM4NjI2OTZmOGY3YzIyOTdlZmRhMzVmZTU0MGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKQEAgLTEw
LDcgKzEwLDYgQEAKICAgICA8ZmlsZT5BdWRpdFJlc3VsdFZpZXcuanM8L2ZpbGU+CiAgICAgPGZp
bGU+QXVkaXRSdWxlcy5qczwvZmlsZT4KICAgICA8ZmlsZT5BdWRpdHNQYW5lbC5qczwvZmlsZT4K
LSAgICA8ZmlsZT5CaW5hcnlTZWFyY2guanM8L2ZpbGU+CiAgICAgPGZpbGU+Qm90dG9tVXBQcm9m
aWxlRGF0YUdyaWRUcmVlLmpzPC9maWxlPgogICAgIDxmaWxlPkJyZWFrcG9pbnRNYW5hZ2VyLmpz
PC9maWxlPgogICAgIDxmaWxlPkJyZWFrcG9pbnRzU2lkZWJhclBhbmUuanM8L2ZpbGU+CkBAIC00
Miw2ICs0MSw3IEBACiAgICAgPGZpbGU+RGlhbG9nLmpzPC9maWxlPgogICAgIDxmaWxlPkRPTUFn
ZW50LmpzPC9maWxlPgogICAgIDxmaWxlPkRPTUJyZWFrcG9pbnRzU2lkZWJhclBhbmUuanM8L2Zp
bGU+CisgICAgPGZpbGU+RE9NRXh0ZW5zaW9uLmpzPC9maWxlPgogICAgIDxmaWxlPkRPTVByZXNl
bnRhdGlvblV0aWxzLmpzPC9maWxlPgogICAgIDxmaWxlPkRPTVN0b3JhZ2UuanM8L2ZpbGU+CiAg
ICAgPGZpbGU+RE9NU3RvcmFnZUl0ZW1zVmlldy5qczwvZmlsZT4KQEAgLTkxLDcgKzkxLDYgQEAK
ICAgICA8ZmlsZT5PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5qczwvZmlsZT4KICAgICA8ZmlsZT5Q
YW5lbC5qczwvZmlsZT4KICAgICA8ZmlsZT5QYW5lbEVuYWJsZXJWaWV3LmpzPC9maWxlPgotICAg
IDxmaWxlPlBhcnRpYWxRdWlja1NvcnQuanM8L2ZpbGU+CiAgICAgPGZpbGU+UGxhY2FyZC5qczwv
ZmlsZT4KICAgICA8ZmlsZT5Qb3BvdmVyLmpzPC9maWxlPgogICAgIDxmaWxlPlByb2ZpbGVEYXRh
R3JpZFRyZWUuanM8L2ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9pbnNwZWN0b3IuaHRtbAppbmRleCAwNGM2NDA1YTNkNDFmYmJjZDQwYWQwMDI3MmJlMjNi
NmFhZWFjNDNmLi4zMmUyODU2N2Y2MDNmMmQxMmIzYjk2YzVlZGFkNzFhYWYwZmM5MzliIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1s
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwK
QEAgLTM2LDcgKzM2LDcgQEAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5
cGU9InRleHQvY3NzIiBocmVmPSJoZWxwU2NyZWVuLmNzcyI+CiAgICAgPGxpbmsgcmVsPSJzdHls
ZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0icG9wb3Zlci5jc3MiPgogICAgIDxzY3JpcHQg
dHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InV0aWxpdGllcy5qcyI+PC9zY3JpcHQ+Ci0gICAg
PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iQmluYXJ5U2VhcmNoLmpzIj48L3Nj
cmlwdD4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJET01FeHRlbnNp
b24uanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9
InRyZWVvdXRsaW5lLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj
cmlwdCIgc3JjPSJpbnNwZWN0b3IuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4
dC9qYXZhc2NyaXB0IiBzcmM9IlVJVXRpbHMuanMiPjwvc2NyaXB0PgpAQCAtMTY0LDcgKzE2NCw2
IEBAIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iVG9w
RG93blByb2ZpbGVEYXRhR3JpZFRyZWUuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0IiBzcmM9IlByb2ZpbGVWaWV3LmpzIj48L3NjcmlwdD4KICAgICA8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJDU1NTZWxlY3RvclByb2ZpbGVWaWV3Lmpz
Ij48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJQYXJ0
aWFsUXVpY2tTb3J0LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj
cmlwdCIgc3JjPSJIZWFwU25hcHNob3QuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0IiBzcmM9IkhlYXBTbmFwc2hvdFByb3h5LmpzIj48L3NjcmlwdD4KICAg
ICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJIZWFwU25hcHNob3RXb3JrZXJE
aXNwYXRjaGVyLmpzIj48L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC91dGlsaXRpZXMuanMKaW5kZXggN2RlZTE2MGIxNmYzNmFkNDhmMzc3OGE5NDdiNzli
YzYzMDcwN2IxMS4uODUwMTY2ZDZlMmVmMmFmN2E5YjQyOTY4OWQ3YzBmOTUyOGM2M2RmZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC91dGlsaXRpZXMuanMK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC91dGlsaXRpZXMuanMKQEAg
LTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNDAz
ICszMCw2IEBACiAgKiBodHRwOi8vZWpvaG4ub3JnL2ZpbGVzL2pzZGlmZi5qcyAocmVsZWFzZWQg
dW5kZXIgdGhlIE1JVCBsaWNlbnNlKS4KICAqLwogCi0vKioKLSAqIEBwYXJhbSB7c3RyaW5nPX0g
ZGlyZWN0aW9uCi0gKi8KLU5vZGUucHJvdG90eXBlLnJhbmdlT2ZXb3JkID0gZnVuY3Rpb24ob2Zm
c2V0LCBzdG9wQ2hhcmFjdGVycywgc3RheVdpdGhpbk5vZGUsIGRpcmVjdGlvbikKLXsKLSAgICB2
YXIgc3RhcnROb2RlOwotICAgIHZhciBzdGFydE9mZnNldCA9IDA7Ci0gICAgdmFyIGVuZE5vZGU7
Ci0gICAgdmFyIGVuZE9mZnNldCA9IDA7Ci0KLSAgICBpZiAoIXN0YXlXaXRoaW5Ob2RlKQotICAg
ICAgICBzdGF5V2l0aGluTm9kZSA9IHRoaXM7Ci0KLSAgICBpZiAoIWRpcmVjdGlvbiB8fCBkaXJl
Y3Rpb24gPT09ICJiYWNrd2FyZCIgfHwgZGlyZWN0aW9uID09PSAiYm90aCIpIHsKLSAgICAgICAg
dmFyIG5vZGUgPSB0aGlzOwotICAgICAgICB3aGlsZSAobm9kZSkgewotICAgICAgICAgICAgaWYg
KG5vZGUgPT09IHN0YXlXaXRoaW5Ob2RlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFzdGFydE5v
ZGUpCi0gICAgICAgICAgICAgICAgICAgIHN0YXJ0Tm9kZSA9IHN0YXlXaXRoaW5Ob2RlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobm9k
ZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHsKLSAgICAgICAgICAgICAgICB2YXIgc3Rh
cnQgPSAobm9kZSA9PT0gdGhpcyA/IChvZmZzZXQgLSAxKSA6IChub2RlLm5vZGVWYWx1ZS5sZW5n
dGggLSAxKSk7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpID49IDA7IC0t
aSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoc3RvcENoYXJhY3RlcnMuaW5kZXhPZihub2Rl
Lm5vZGVWYWx1ZVtpXSkgIT09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGFydE5v
ZGUgPSBub2RlOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSBpICsgMTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoc3RhcnRO
b2RlKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBub2RlID0gbm9kZS50
cmF2ZXJzZVByZXZpb3VzTm9kZShzdGF5V2l0aGluTm9kZSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoIXN0YXJ0Tm9kZSkgewotICAgICAgICAgICAgc3RhcnROb2RlID0gc3RheVdpdGhpbk5v
ZGU7Ci0gICAgICAgICAgICBzdGFydE9mZnNldCA9IDA7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug
ewotICAgICAgICBzdGFydE5vZGUgPSB0aGlzOwotICAgICAgICBzdGFydE9mZnNldCA9IG9mZnNl
dDsKLSAgICB9Ci0KLSAgICBpZiAoIWRpcmVjdGlvbiB8fCBkaXJlY3Rpb24gPT09ICJmb3J3YXJk
IiB8fCBkaXJlY3Rpb24gPT09ICJib3RoIikgewotICAgICAgICBub2RlID0gdGhpczsKLSAgICAg
ICAgd2hpbGUgKG5vZGUpIHsKLSAgICAgICAgICAgIGlmIChub2RlID09PSBzdGF5V2l0aGluTm9k
ZSkgewotICAgICAgICAgICAgICAgIGlmICghZW5kTm9kZSkKLSAgICAgICAgICAgICAgICAgICAg
ZW5kTm9kZSA9IHN0YXlXaXRoaW5Ob2RlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05P
REUpIHsKLSAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSAobm9kZSA9PT0gdGhpcyA/IG9mZnNl
dCA6IDApOwotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IG5vZGUubm9k
ZVZhbHVlLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdG9wQ2hhcmFj
dGVycy5pbmRleE9mKG5vZGUubm9kZVZhbHVlW2ldKSAhPT0gLTEpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGVuZE5vZGUgPSBub2RlOwotICAgICAgICAgICAgICAgICAgICAgICAgZW5kT2Zm
c2V0ID0gaTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAoZW5kTm9kZSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgbm9kZSA9
IG5vZGUudHJhdmVyc2VOZXh0Tm9kZShzdGF5V2l0aGluTm9kZSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoIWVuZE5vZGUpIHsKLSAgICAgICAgICAgIGVuZE5vZGUgPSBzdGF5V2l0aGluTm9k
ZTsKLSAgICAgICAgICAgIGVuZE9mZnNldCA9IHN0YXlXaXRoaW5Ob2RlLm5vZGVUeXBlID09PSBO
b2RlLlRFWFRfTk9ERSA/IHN0YXlXaXRoaW5Ob2RlLm5vZGVWYWx1ZS5sZW5ndGggOiBzdGF5V2l0
aGluTm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGVuZE5vZGUgPSB0aGlzOwotICAgICAgICBlbmRPZmZzZXQgPSBvZmZzZXQ7Ci0gICAgfQot
Ci0gICAgdmFyIHJlc3VsdCA9IHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgpOwotICAg
IHJlc3VsdC5zZXRTdGFydChzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KTsKLSAgICByZXN1bHQuc2V0
RW5kKGVuZE5vZGUsIGVuZE9mZnNldCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1Ob2Rl
LnByb3RvdHlwZS50cmF2ZXJzZU5leHRUZXh0Tm9kZSA9IGZ1bmN0aW9uKHN0YXlXaXRoaW4pCi17
Ci0gICAgdmFyIG5vZGUgPSB0aGlzLnRyYXZlcnNlTmV4dE5vZGUoc3RheVdpdGhpbik7Ci0gICAg
aWYgKCFub2RlKQotICAgICAgICByZXR1cm47Ci0KLSAgICB3aGlsZSAobm9kZSAmJiBub2RlLm5v
ZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkKLSAgICAgICAgbm9kZSA9IG5vZGUudHJhdmVyc2VO
ZXh0Tm9kZShzdGF5V2l0aGluKTsKLQotICAgIHJldHVybiBub2RlOwotfQotCi1Ob2RlLnByb3Rv
dHlwZS5yYW5nZUJvdW5kYXJ5Rm9yT2Zmc2V0ID0gZnVuY3Rpb24ob2Zmc2V0KQotewotICAgIHZh
ciBub2RlID0gdGhpcy50cmF2ZXJzZU5leHRUZXh0Tm9kZSh0aGlzKTsKLSAgICB3aGlsZSAobm9k
ZSAmJiBvZmZzZXQgPiBub2RlLm5vZGVWYWx1ZS5sZW5ndGgpIHsKLSAgICAgICAgb2Zmc2V0IC09
IG5vZGUubm9kZVZhbHVlLmxlbmd0aDsKLSAgICAgICAgbm9kZSA9IG5vZGUudHJhdmVyc2VOZXh0
VGV4dE5vZGUodGhpcyk7Ci0gICAgfQotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIHsg
Y29udGFpbmVyOiB0aGlzLCBvZmZzZXQ6IDAgfTsKLSAgICByZXR1cm4geyBjb250YWluZXI6IG5v
ZGUsIG9mZnNldDogb2Zmc2V0IH07Ci19Ci0KLUVsZW1lbnQucHJvdG90eXBlLnJlbW92ZVN0eWxl
Q2xhc3MgPSBmdW5jdGlvbihjbGFzc05hbWUpCi17Ci0gICAgdGhpcy5jbGFzc0xpc3QucmVtb3Zl
KGNsYXNzTmFtZSk7Ci19Ci0KLUVsZW1lbnQucHJvdG90eXBlLnJlbW92ZU1hdGNoaW5nU3R5bGVD
bGFzc2VzID0gZnVuY3Rpb24oY2xhc3NOYW1lUmVnZXgpCi17Ci0gICAgdmFyIHJlZ2V4ID0gbmV3
IFJlZ0V4cCgiKF58XFxzKykiICsgY2xhc3NOYW1lUmVnZXggKyAiKCR8XFxzKykiKTsKLSAgICBp
ZiAocmVnZXgudGVzdCh0aGlzLmNsYXNzTmFtZSkpCi0gICAgICAgIHRoaXMuY2xhc3NOYW1lID0g
dGhpcy5jbGFzc05hbWUucmVwbGFjZShyZWdleCwgIiAiKTsKLX0KLQotRWxlbWVudC5wcm90b3R5
cGUuYWRkU3R5bGVDbGFzcyA9IGZ1bmN0aW9uKGNsYXNzTmFtZSkKLXsKLSAgICB0aGlzLmNsYXNz
TGlzdC5hZGQoY2xhc3NOYW1lKTsKLX0KLQotRWxlbWVudC5wcm90b3R5cGUuaGFzU3R5bGVDbGFz
cyA9IGZ1bmN0aW9uKGNsYXNzTmFtZSkKLXsKLSAgICByZXR1cm4gdGhpcy5jbGFzc0xpc3QuY29u
dGFpbnMoY2xhc3NOYW1lKTsKLX0KLQotRWxlbWVudC5wcm90b3R5cGUucG9zaXRpb25BdCA9IGZ1
bmN0aW9uKHgsIHkpCi17Ci0gICAgdGhpcy5zdHlsZS5sZWZ0ID0geCArICJweCI7Ci0gICAgdGhp
cy5zdHlsZS50b3AgPSB5ICsgInB4IjsKLX0KLQotRWxlbWVudC5wcm90b3R5cGUucHJ1bmVFbXB0
eVRleHROb2RlcyA9IGZ1bmN0aW9uKCkKLXsKLSAgICB2YXIgc2libGluZyA9IHRoaXMuZmlyc3RD
aGlsZDsKLSAgICB3aGlsZSAoc2libGluZykgewotICAgICAgICB2YXIgbmV4dFNpYmxpbmcgPSBz
aWJsaW5nLm5leHRTaWJsaW5nOwotICAgICAgICBpZiAoc2libGluZy5ub2RlVHlwZSA9PT0gdGhp
cy5URVhUX05PREUgJiYgc2libGluZy5ub2RlVmFsdWUgPT09ICIiKQotICAgICAgICAgICAgdGhp
cy5yZW1vdmVDaGlsZChzaWJsaW5nKTsKLSAgICAgICAgc2libGluZyA9IG5leHRTaWJsaW5nOwot
ICAgIH0KLX0KLQotRWxlbWVudC5wcm90b3R5cGUuaXNTY3JvbGxlZFRvQm90dG9tID0gZnVuY3Rp
b24oKQotewotICAgIC8vIFRoaXMgY29kZSB3b3JrcyBvbmx5IGZvciAwLXdpZHRoIGJvcmRlcgot
ICAgIHJldHVybiB0aGlzLnNjcm9sbFRvcCArIHRoaXMuY2xpZW50SGVpZ2h0ID09PSB0aGlzLnNj
cm9sbEhlaWdodDsKLX0KLQotTm9kZS5wcm90b3R5cGUuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhO
b2RlTmFtZUluQXJyYXkgPSBmdW5jdGlvbihuYW1lQXJyYXkpCi17Ci0gICAgZm9yICh2YXIgbm9k
ZSA9IHRoaXM7IG5vZGUgJiYgbm9kZSAhPT0gdGhpcy5vd25lckRvY3VtZW50OyBub2RlID0gbm9k
ZS5wYXJlbnROb2RlKQotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVBcnJheS5sZW5n
dGg7ICsraSkKLSAgICAgICAgICAgIGlmIChub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09
IG5hbWVBcnJheVtpXS50b0xvd2VyQ2FzZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBub2Rl
OwotICAgIHJldHVybiBudWxsOwotfQotCi1Ob2RlLnByb3RvdHlwZS5lbmNsb3NpbmdOb2RlT3JT
ZWxmV2l0aE5vZGVOYW1lID0gZnVuY3Rpb24obm9kZU5hbWUpCi17Ci0gICAgcmV0dXJuIHRoaXMu
ZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhOb2RlTmFtZUluQXJyYXkoW25vZGVOYW1lXSk7Ci19Ci0K
LU5vZGUucHJvdG90eXBlLmVuY2xvc2luZ05vZGVPclNlbGZXaXRoQ2xhc3MgPSBmdW5jdGlvbihj
bGFzc05hbWUpCi17Ci0gICAgZm9yICh2YXIgbm9kZSA9IHRoaXM7IG5vZGUgJiYgbm9kZSAhPT0g
dGhpcy5vd25lckRvY3VtZW50OyBub2RlID0gbm9kZS5wYXJlbnROb2RlKQotICAgICAgICBpZiAo
bm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgbm9kZS5oYXNTdHlsZUNsYXNz
KGNsYXNzTmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICByZXR1cm4gbnVsbDsK
LX0KLQotTm9kZS5wcm90b3R5cGUuZW5jbG9zaW5nTm9kZVdpdGhDbGFzcyA9IGZ1bmN0aW9uKGNs
YXNzTmFtZSkKLXsKLSAgICBpZiAoIXRoaXMucGFyZW50Tm9kZSkKLSAgICAgICAgcmV0dXJuIG51
bGw7Ci0gICAgcmV0dXJuIHRoaXMucGFyZW50Tm9kZS5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENs
YXNzKGNsYXNzTmFtZSk7Ci19Ci0KLUVsZW1lbnQucHJvdG90eXBlLnF1ZXJ5ID0gZnVuY3Rpb24o
cXVlcnkpCi17Ci0gICAgcmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5ldmFsdWF0ZShxdWVyeSwg
dGhpcywgbnVsbCwgWFBhdGhSZXN1bHQuRklSU1RfT1JERVJFRF9OT0RFX1RZUEUsIG51bGwpLnNp
bmdsZU5vZGVWYWx1ZTsKLX0KLQotRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlQ2hpbGRyZW4gPSBm
dW5jdGlvbigpCi17Ci0gICAgaWYgKHRoaXMuZmlyc3RDaGlsZCkKLSAgICAgICAgdGhpcy50ZXh0
Q29udGVudCA9ICIiOwotfQotCi1FbGVtZW50LnByb3RvdHlwZS5pc0luc2VydGlvbkNhcmV0SW5z
aWRlID0gZnVuY3Rpb24oKQotewotICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0
aW9uKCk7Ci0gICAgaWYgKCFzZWxlY3Rpb24ucmFuZ2VDb3VudCB8fCAhc2VsZWN0aW9uLmlzQ29s
bGFwc2VkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdmFyIHNlbGVjdGlvblJhbmdlID0g
c2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7Ci0gICAgcmV0dXJuIHNlbGVjdGlvblJhbmdlLnN0YXJ0
Q29udGFpbmVyLmlzU2VsZk9yRGVzY2VuZGFudCh0aGlzKTsKLX0KLQotLyoqCi0gKiBAcGFyYW0g
e3N0cmluZz19IGNsYXNzTmFtZQotICovCi1FbGVtZW50LnByb3RvdHlwZS5jcmVhdGVDaGlsZCA9
IGZ1bmN0aW9uKGVsZW1lbnROYW1lLCBjbGFzc05hbWUpCi17Ci0gICAgdmFyIGVsZW1lbnQgPSB0
aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChlbGVtZW50TmFtZSk7Ci0gICAgaWYgKGNs
YXNzTmFtZSkKLSAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSBjbGFzc05hbWU7Ci0gICAgdGhp
cy5hcHBlbmRDaGlsZChlbGVtZW50KTsKLSAgICByZXR1cm4gZWxlbWVudDsKLX0KLQotRG9jdW1l
bnRGcmFnbWVudC5wcm90b3R5cGUuY3JlYXRlQ2hpbGQgPSBFbGVtZW50LnByb3RvdHlwZS5jcmVh
dGVDaGlsZDsKLQotLyoqCi0gKiBAcmV0dXJuIHtudW1iZXJ9Ci0gKi8KLUVsZW1lbnQucHJvdG90
eXBlLnRvdGFsT2Zmc2V0TGVmdCA9IGZ1bmN0aW9uKCkKLXsKLSAgICByZXR1cm4gdGhpcy50b3Rh
bE9mZnNldCgpLmxlZnQ7Ci19Ci0KLS8qKgotICogQHJldHVybiB7bnVtYmVyfQotICovCi1FbGVt
ZW50LnByb3RvdHlwZS50b3RhbE9mZnNldFRvcCA9IGZ1bmN0aW9uKCkKLXsKLSAgICByZXR1cm4g
dGhpcy50b3RhbE9mZnNldCgpLnRvcDsKLQotfQotCi1FbGVtZW50LnByb3RvdHlwZS50b3RhbE9m
ZnNldCA9IGZ1bmN0aW9uKCkKLXsKLSAgICB2YXIgdG90YWxMZWZ0ID0gMDsKLSAgICB2YXIgdG90
YWxUb3AgPSAwOwotCi0gICAgZm9yICh2YXIgZWxlbWVudCA9IHRoaXM7IGVsZW1lbnQ7IGVsZW1l
bnQgPSBlbGVtZW50Lm9mZnNldFBhcmVudCkgewotICAgICAgICB0b3RhbExlZnQgKz0gZWxlbWVu
dC5vZmZzZXRMZWZ0OwotICAgICAgICB0b3RhbFRvcCArPSBlbGVtZW50Lm9mZnNldFRvcDsKLSAg
ICAgICAgaWYgKHRoaXMgIT09IGVsZW1lbnQpIHsKLSAgICAgICAgICAgIHRvdGFsTGVmdCArPSBl
bGVtZW50LmNsaWVudExlZnQgLSBlbGVtZW50LnNjcm9sbExlZnQ7Ci0gICAgICAgICAgICB0b3Rh
bFRvcCArPSBlbGVtZW50LmNsaWVudFRvcCAtIGVsZW1lbnQuc2Nyb2xsVG9wOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgbGVmdDogdG90YWxMZWZ0LCB0b3A6IHRvdGFsVG9wIH07
Ci19Ci0KLUVsZW1lbnQucHJvdG90eXBlLnNjcm9sbE9mZnNldCA9IGZ1bmN0aW9uKCkKLXsKLSAg
ICB2YXIgY3VyTGVmdCA9IDA7Ci0gICAgdmFyIGN1clRvcCA9IDA7Ci0gICAgZm9yICh2YXIgZWxl
bWVudCA9IHRoaXM7IGVsZW1lbnQ7IGVsZW1lbnQgPSBlbGVtZW50LnNjcm9sbFBhcmVudCkgewot
ICAgICAgICBjdXJMZWZ0ICs9IGVsZW1lbnQuc2Nyb2xsTGVmdDsKLSAgICAgICAgY3VyVG9wICs9
IGVsZW1lbnQuc2Nyb2xsVG9wOwotICAgIH0KLSAgICByZXR1cm4geyBsZWZ0OiBjdXJMZWZ0LCB0
b3A6IGN1clRvcCB9OwotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQHBhcmFtIHtudW1i
ZXI9fSB4Ci0gKiBAcGFyYW0ge251bWJlcj19IHkKLSAqIEBwYXJhbSB7bnVtYmVyPX0gd2lkdGgK
LSAqIEBwYXJhbSB7bnVtYmVyPX0gaGVpZ2h0Ci0gKi8KLWZ1bmN0aW9uIEFuY2hvckJveCh4LCB5
LCB3aWR0aCwgaGVpZ2h0KQotewotICAgIHRoaXMueCA9IHggfHwgMDsKLSAgICB0aGlzLnkgPSB5
IHx8IDA7Ci0gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7Ci0gICAgdGhpcy5oZWlnaHQgPSBo
ZWlnaHQgfHwgMDsKLX0KLQotLyoqCi0gKiBAcGFyYW0ge1dpbmRvd30gdGFyZ2V0V2luZG93Ci0g
KiBAcmV0dXJuIHtBbmNob3JCb3h9Ci0gKi8KLUVsZW1lbnQucHJvdG90eXBlLm9mZnNldFJlbGF0
aXZlVG9XaW5kb3cgPSBmdW5jdGlvbih0YXJnZXRXaW5kb3cpCi17Ci0gICAgdmFyIGVsZW1lbnRP
ZmZzZXQgPSBuZXcgQW5jaG9yQm94KCk7Ci0gICAgdmFyIGN1ckVsZW1lbnQgPSB0aGlzOwotICAg
IHZhciBjdXJXaW5kb3cgPSB0aGlzLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7Ci0gICAgd2hp
bGUgKGN1cldpbmRvdyAmJiBjdXJFbGVtZW50KSB7Ci0gICAgICAgIGVsZW1lbnRPZmZzZXQueCAr
PSBjdXJFbGVtZW50LnRvdGFsT2Zmc2V0TGVmdCgpOwotICAgICAgICBlbGVtZW50T2Zmc2V0Lnkg
Kz0gY3VyRWxlbWVudC50b3RhbE9mZnNldFRvcCgpOwotICAgICAgICBpZiAoY3VyV2luZG93ID09
PSB0YXJnZXRXaW5kb3cpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjdXJFbGVtZW50
ID0gY3VyV2luZG93LmZyYW1lRWxlbWVudDsKLSAgICAgICAgY3VyV2luZG93ID0gY3VyV2luZG93
LnBhcmVudDsKLSAgICB9Ci0KLSAgICByZXR1cm4gZWxlbWVudE9mZnNldDsKLX0KLQotLyoqCi0g
KiBAcGFyYW0ge1dpbmRvd30gdGFyZ2V0V2luZG93Ci0gKiBAcmV0dXJuIHtBbmNob3JCb3h9Ci0g
Ki8KLUVsZW1lbnQucHJvdG90eXBlLmJveEluV2luZG93ID0gZnVuY3Rpb24odGFyZ2V0V2luZG93
KQotewotICAgIHRhcmdldFdpbmRvdyA9IHRhcmdldFdpbmRvdyB8fCB0aGlzLm93bmVyRG9jdW1l
bnQuZGVmYXVsdFZpZXc7Ci0KLSAgICB2YXIgYW5jaG9yQm94ID0gdGhpcy5vZmZzZXRSZWxhdGl2
ZVRvV2luZG93KHdpbmRvdyk7Ci0gICAgYW5jaG9yQm94LndpZHRoID0gTWF0aC5taW4odGhpcy5v
ZmZzZXRXaWR0aCwgd2luZG93LmlubmVyV2lkdGggLSBhbmNob3JCb3gueCk7Ci0gICAgYW5jaG9y
Qm94LmhlaWdodCA9IE1hdGgubWluKHRoaXMub2Zmc2V0SGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWln
aHQgLSBhbmNob3JCb3gueSk7Ci0KLSAgICByZXR1cm4gYW5jaG9yQm94OwotfQotCi0vKioKLSAq
IEBwYXJhbSB7c3RyaW5nfSB0ZXh0Ci0gKi8KLUVsZW1lbnQucHJvdG90eXBlLnNldFRleHRBbmRU
aXRsZSA9IGZ1bmN0aW9uKHRleHQpCi17Ci0gICAgdGhpcy50ZXh0Q29udGVudCA9IHRleHQ7Ci0g
ICAgdGhpcy50aXRsZSA9IHRleHQ7Ci19Ci0KLUtleWJvYXJkRXZlbnQucHJvdG90eXBlLl9fZGVm
aW5lR2V0dGVyX18oImRhdGEiLCBmdW5jdGlvbigpCi17Ci0gICAgLy8gRW11bGF0ZSAiZGF0YSIg
YXR0cmlidXRlIGZyb20gRE9NIDMgVGV4dElucHV0IGV2ZW50LgotICAgIC8vIFNlZSBodHRwOi8v
d3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50cy1FdmVudHMtVGV4dEV2ZW50
LWRhdGEKLSAgICBzd2l0Y2ggKHRoaXMudHlwZSkgewotICAgICAgICBjYXNlICJrZXlwcmVzcyI6
Ci0gICAgICAgICAgICBpZiAoIXRoaXMuY3RybEtleSAmJiAhdGhpcy5tZXRhS2V5KQotICAgICAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuY2hhckNvZGUpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJldHVybiAiIjsKLSAgICAgICAgY2FzZSAi
a2V5ZG93biI6Ci0gICAgICAgIGNhc2UgImtleXVwIjoKLSAgICAgICAgICAgIGlmICghdGhpcy5j
dHJsS2V5ICYmICF0aGlzLm1ldGFLZXkgJiYgIXRoaXMuYWx0S2V5KQotICAgICAgICAgICAgICAg
IHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMud2hpY2gpOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIHJldHVybiAiIjsKLSAgICB9Ci19KTsKLQotLyoqCi0gKiBAcGFy
YW0ge2Jvb2xlYW49fSBwcmV2ZW50RGVmYXVsdAotICovCi1FdmVudC5wcm90b3R5cGUuY29uc3Vt
ZSA9IGZ1bmN0aW9uKHByZXZlbnREZWZhdWx0KQotewotICAgIHRoaXMuc3RvcEltbWVkaWF0ZVBy
b3BhZ2F0aW9uKCk7Ci0gICAgaWYgKHByZXZlbnREZWZhdWx0KQotICAgICAgICB0aGlzLnByZXZl
bnREZWZhdWx0KCk7Ci0gICAgdGhpcy5oYW5kbGVkID0gdHJ1ZTsKLX0KLQotVGV4dC5wcm90b3R5
cGUuc2VsZWN0ID0gZnVuY3Rpb24oc3RhcnQsIGVuZCkKLXsKLSAgICBzdGFydCA9IHN0YXJ0IHx8
IDA7Ci0gICAgZW5kID0gZW5kIHx8IHRoaXMudGV4dENvbnRlbnQubGVuZ3RoOwotCi0gICAgaWYg
KHN0YXJ0IDwgMCkKLSAgICAgICAgc3RhcnQgPSBlbmQgKyBzdGFydDsKLQotICAgIHZhciBzZWxl
Y3Rpb24gPSB0aGlzLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0U2VsZWN0aW9uKCk7Ci0g
ICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpOwotICAgIHZhciByYW5nZSA9IHRoaXMub3du
ZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgpOwotICAgIHJhbmdlLnNldFN0YXJ0KHRoaXMsIHN0YXJ0
KTsKLSAgICByYW5nZS5zZXRFbmQodGhpcywgZW5kKTsKLSAgICBzZWxlY3Rpb24uYWRkUmFuZ2Uo
cmFuZ2UpOwotICAgIHJldHVybiB0aGlzOwotfQotCi1FbGVtZW50LnByb3RvdHlwZS5zZWxlY3Rp
b25MZWZ0T2Zmc2V0ID0gZnVuY3Rpb24oKQotewotICAgIC8vIENhbGN1bGF0ZSBzZWxlY3Rpb24g
b2Zmc2V0IHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGVsZW1lbnQuCi0KLSAgICB2YXIgc2VsZWN0
aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwotICAgIGlmICghc2VsZWN0aW9uLmNvbnRhaW5z
Tm9kZSh0aGlzLCB0cnVlKSkKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICB2YXIgbGVmdE9m
ZnNldCA9IHNlbGVjdGlvbi5hbmNob3JPZmZzZXQ7Ci0gICAgdmFyIG5vZGUgPSBzZWxlY3Rpb24u
YW5jaG9yTm9kZTsKLQotICAgIHdoaWxlIChub2RlICE9PSB0aGlzKSB7Ci0gICAgICAgIHdoaWxl
IChub2RlLnByZXZpb3VzU2libGluZykgewotICAgICAgICAgICAgbm9kZSA9IG5vZGUucHJldmlv
dXNTaWJsaW5nOwotICAgICAgICAgICAgbGVmdE9mZnNldCArPSBub2RlLnRleHRDb250ZW50Lmxl
bmd0aDsKLSAgICAgICAgfQotICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlOwotICAgIH0K
LQotICAgIHJldHVybiBsZWZ0T2Zmc2V0OwotfQotCiBTdHJpbmcucHJvdG90eXBlLmhhc1N1YnN0
cmluZyA9IGZ1bmN0aW9uKHN0cmluZywgY2FzZUluc2Vuc2l0aXZlKQogewogICAgIGlmICghY2Fz
ZUluc2Vuc2l0aXZlKQpAQCAtNTY2LDY5ICsxNzAsNiBAQCBTdHJpbmcucHJvdG90eXBlLnJlbW92
ZVVSTEZyYWdtZW50ID0gZnVuY3Rpb24oKQogICAgIHJldHVybiB0aGlzLnN1YnN0cmluZygwLCBm
cmFnbWVudEluZGV4KTsKIH0KIAotTm9kZS5wcm90b3R5cGUuaXNBbmNlc3RvciA9IGZ1bmN0aW9u
KG5vZGUpCi17Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB2
YXIgY3VycmVudE5vZGUgPSBub2RlLnBhcmVudE5vZGU7Ci0gICAgd2hpbGUgKGN1cnJlbnROb2Rl
KSB7Ci0gICAgICAgIGlmICh0aGlzID09PSBjdXJyZW50Tm9kZSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7Ci0g
ICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotTm9kZS5wcm90b3R5cGUuaXNEZXNjZW5kYW50
ID0gZnVuY3Rpb24oZGVzY2VuZGFudCkKLXsKLSAgICByZXR1cm4gISFkZXNjZW5kYW50ICYmIGRl
c2NlbmRhbnQuaXNBbmNlc3Rvcih0aGlzKTsKLX0KLQotTm9kZS5wcm90b3R5cGUuaXNTZWxmT3JB
bmNlc3RvciA9IGZ1bmN0aW9uKG5vZGUpCi17Ci0gICAgcmV0dXJuICEhbm9kZSAmJiAobm9kZSA9
PT0gdGhpcyB8fCB0aGlzLmlzQW5jZXN0b3Iobm9kZSkpOwotfQotCi1Ob2RlLnByb3RvdHlwZS5p
c1NlbGZPckRlc2NlbmRhbnQgPSBmdW5jdGlvbihub2RlKQotewotICAgIHJldHVybiAhIW5vZGUg
JiYgKG5vZGUgPT09IHRoaXMgfHwgdGhpcy5pc0Rlc2NlbmRhbnQobm9kZSkpOwotfQotCi1Ob2Rl
LnByb3RvdHlwZS50cmF2ZXJzZU5leHROb2RlID0gZnVuY3Rpb24oc3RheVdpdGhpbikKLXsKLSAg
ICB2YXIgbm9kZSA9IHRoaXMuZmlyc3RDaGlsZDsKLSAgICBpZiAobm9kZSkKLSAgICAgICAgcmV0
dXJuIG5vZGU7Ci0KLSAgICBpZiAoc3RheVdpdGhpbiAmJiB0aGlzID09PSBzdGF5V2l0aGluKQot
ICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgIG5vZGUgPSB0aGlzLm5leHRTaWJsaW5nOwotICAg
IGlmIChub2RlKQotICAgICAgICByZXR1cm4gbm9kZTsKLQotICAgIG5vZGUgPSB0aGlzOwotICAg
IHdoaWxlIChub2RlICYmICFub2RlLm5leHRTaWJsaW5nICYmICghc3RheVdpdGhpbiB8fCAhbm9k
ZS5wYXJlbnROb2RlIHx8IG5vZGUucGFyZW50Tm9kZSAhPT0gc3RheVdpdGhpbikpCi0gICAgICAg
IG5vZGUgPSBub2RlLnBhcmVudE5vZGU7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4g
bnVsbDsKLQotICAgIHJldHVybiBub2RlLm5leHRTaWJsaW5nOwotfQotCi1Ob2RlLnByb3RvdHlw
ZS50cmF2ZXJzZVByZXZpb3VzTm9kZSA9IGZ1bmN0aW9uKHN0YXlXaXRoaW4pCi17Ci0gICAgaWYg
KHN0YXlXaXRoaW4gJiYgdGhpcyA9PT0gc3RheVdpdGhpbikKLSAgICAgICAgcmV0dXJuIG51bGw7
Ci0gICAgdmFyIG5vZGUgPSB0aGlzLnByZXZpb3VzU2libGluZzsKLSAgICB3aGlsZSAobm9kZSAm
JiBub2RlLmxhc3RDaGlsZCkKLSAgICAgICAgbm9kZSA9IG5vZGUubGFzdENoaWxkOwotICAgIGlm
IChub2RlKQotICAgICAgICByZXR1cm4gbm9kZTsKLSAgICByZXR1cm4gdGhpcy5wYXJlbnROb2Rl
OwotfQotCiBOdW1iZXIuY29uc3RyYWluID0gZnVuY3Rpb24obnVtLCBtaW4sIG1heCkKIHsKICAg
ICBpZiAobnVtIDwgbWluKQpAQCAtNjUyLDEyICsxOTMsNiBAQCBEYXRlLnByb3RvdHlwZS50b0lT
Tzg2MDFDb21wYWN0ID0gZnVuY3Rpb24oKQogICAgICAgICAgICBsZWFkWmVybyh0aGlzLmdldFNl
Y29uZHMoKSk7CiB9CiAKLUhUTUxUZXh0QXJlYUVsZW1lbnQucHJvdG90eXBlLm1vdmVDdXJzb3JU
b0VuZCA9IGZ1bmN0aW9uKCkKLXsKLSAgICB2YXIgbGVuZ3RoID0gdGhpcy52YWx1ZS5sZW5ndGg7
Ci0gICAgdGhpcy5zZXRTZWxlY3Rpb25SYW5nZShsZW5ndGgsIGxlbmd0aCk7Ci19Ci0KIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsICJyZW1vdmUiLAogewogICAgIC8qKgpA
QCAtNzQ4LDYgKzI4MywzNiBAQCBPYmplY3QuZGVmaW5lUHJvcGVydHkoQXJyYXkucHJvdG90eXBl
LCAicGFydGl0aW9uIiwKICAgICB9CiB9KTsKIAorT2JqZWN0LmRlZmluZVByb3BlcnR5KEFycmF5
LnByb3RvdHlwZSwgInNvcnRSYW5nZSIsCit7CisgICAgLyoqCisgICAgICogQHRoaXMge0FycmF5
LjxudW1iZXI+fQorICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24obnVtYmVyLG51bWJlcik6Ym9vbGVh
bn0gY29tcGFyYXRvcgorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsZWZ0Qm91bmQKKyAgICAgKiBA
cGFyYW0ge251bWJlcn0gcmlnaHRCb3VuZAorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrCisgICAg
ICovCisgICAgdmFsdWU6IGZ1bmN0aW9uKGNvbXBhcmF0b3IsIGxlZnRCb3VuZCwgcmlnaHRCb3Vu
ZCwgaykKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIHF1aWNrU29ydEZpcnN0SyhhcnJheSwgY29t
cGFyYXRvciwgbGVmdCwgcmlnaHQsIGspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChyaWdo
dCA8PSBsZWZ0KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHZhciBwaXZv
dEluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKHJpZ2h0IC0gbGVmdCkpICsgbGVm
dDsKKyAgICAgICAgICAgIHZhciBwaXZvdE5ld0luZGV4ID0gYXJyYXkucGFydGl0aW9uKGNvbXBh
cmF0b3IsIGxlZnQsIHJpZ2h0LCBwaXZvdEluZGV4KTsKKyAgICAgICAgICAgIHF1aWNrU29ydEZp
cnN0SyhhcnJheSwgY29tcGFyYXRvciwgbGVmdCwgcGl2b3ROZXdJbmRleCAtIDEsIGspOworICAg
ICAgICAgICAgaWYgKHBpdm90TmV3SW5kZXggPCBsZWZ0ICsgayAtIDEpCisgICAgICAgICAgICAg
ICAgcXVpY2tTb3J0Rmlyc3RLKGFycmF5LCBjb21wYXJhdG9yLCBwaXZvdE5ld0luZGV4ICsgMSwg
cmlnaHQsIGspOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxlZnRCb3VuZCA9PT0gMCAmJiBy
aWdodEJvdW5kID09PSAodGhpcy5sZW5ndGggLSAxKSAmJiBrID09PSB0aGlzLmxlbmd0aCkKKyAg
ICAgICAgICAgIHRoaXMuc29ydChjb21wYXJhdG9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgcXVpY2tTb3J0Rmlyc3RLKHRoaXMsIGNvbXBhcmF0b3IsIGxlZnRCb3VuZCwgcmlnaHRCb3Vu
ZCwgayk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KK30pOworCiBPYmplY3QuZGVmaW5l
UHJvcGVydHkoQXJyYXkucHJvdG90eXBlLCAicXNlbGVjdCIsCiB7CiAgICAgLyoqCkBAIC03NzYs
NiArMzQxLDYzIEBAIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsICJxc2Vs
ZWN0IiwKICAgICB9CiB9KTsKIAorLyoqCisgKiBAcGFyYW0geyp9IG9iamVjdAorICogQHBhcmFt
IHtBcnJheS48Kj59IGFycmF5CisgKiBAcGFyYW0ge2Z1bmN0aW9uKCosICopOm51bWJlcn0gY29t
cGFyYXRvcgorICovCitmdW5jdGlvbiBiaW5hcnlTZWFyY2gob2JqZWN0LCBhcnJheSwgY29tcGFy
YXRvcikKK3sKKyAgICB2YXIgZmlyc3QgPSAwOworICAgIHZhciBsYXN0ID0gYXJyYXkubGVuZ3Ro
IC0gMTsKKworICAgIHdoaWxlIChmaXJzdCA8PSBsYXN0KSB7CisgICAgICAgIHZhciBtaWQgPSAo
Zmlyc3QgKyBsYXN0KSA+PiAxOworICAgICAgICB2YXIgYyA9IGNvbXBhcmF0b3Iob2JqZWN0LCBh
cnJheVttaWRdKTsKKyAgICAgICAgaWYgKGMgPiAwKQorICAgICAgICAgICAgZmlyc3QgPSBtaWQg
KyAxOworICAgICAgICBlbHNlIGlmIChjIDwgMCkKKyAgICAgICAgICAgIGxhc3QgPSBtaWQgLSAx
OworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gbWlkOworICAgIH0KKworICAgIC8v
IFJldHVybiB0aGUgbmVhcmVzdCBsZXNzZXIgaW5kZXgsICItMSIgbWVhbnMgIjAsICItMiIgbWVh
bnMgIjEiLCBldGMuCisgICAgcmV0dXJuIC0oZmlyc3QgKyAxKTsKK30KKworT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KEFycmF5LnByb3RvdHlwZSwgImJpbmFyeUluZGV4T2YiLAoreworICAgIC8qKgor
ICAgICAqIEB0aGlzIHtBcnJheS48Kj59CisgICAgICogQHBhcmFtIHtmdW5jdGlvbigqLCAqKTpu
dW1iZXJ9IGNvbXBhcmF0b3IKKyAgICAgKi8KKyAgICB2YWx1ZTogZnVuY3Rpb24odmFsdWUsIGNv
bXBhcmF0b3IpCisgICAgeworICAgICAgICB2YXIgcmVzdWx0ID0gYmluYXJ5U2VhcmNoKHZhbHVl
LCB0aGlzLCBjb21wYXJhdG9yKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCA+PSAwID8gcmVzdWx0
IDogLTE7CisgICAgfQorfSk7CisKKy8qKgorICogQHBhcmFtIHsqfSBhbk9iamVjdAorICogQHBh
cmFtIHtBcnJheS48Kj59IGFMaXN0CisgKiBAcGFyYW0ge2Z1bmN0aW9uKCosICopfSBhRnVuY3Rp
b24KKyAqLworZnVuY3Rpb24gaW5zZXJ0aW9uSW5kZXhGb3JPYmplY3RJbkxpc3RTb3J0ZWRCeUZ1
bmN0aW9uKGFuT2JqZWN0LCBhTGlzdCwgYUZ1bmN0aW9uKQoreworICAgIHZhciBpbmRleCA9IGJp
bmFyeVNlYXJjaChhbk9iamVjdCwgYUxpc3QsIGFGdW5jdGlvbik7CisgICAgaWYgKGluZGV4IDwg
MCkKKyAgICAgICAgLy8gU2VlIGJpbmFyeVNlYXJjaCBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAg
cmV0dXJuIC1pbmRleCAtIDE7CisgICAgZWxzZSB7CisgICAgICAgIC8vIFJldHVybiB0aGUgZmly
c3Qgb2NjdXJhbmNlIG9mIGFuIGl0ZW0gaW4gdGhlIGxpc3QuCisgICAgICAgIHdoaWxlIChpbmRl
eCA+IDAgJiYgYUZ1bmN0aW9uKGFuT2JqZWN0LCBhTGlzdFtpbmRleCAtIDFdKSA9PT0gMCkKKyAg
ICAgICAgICAgIGluZGV4LS07CisgICAgICAgIHJldHVybiBpbmRleDsKKyAgICB9Cit9CisKIEFy
cmF5LmRpZmYgPSBmdW5jdGlvbihsZWZ0LCByaWdodCkKIHsKICAgICB2YXIgbyA9IGxlZnQ7CkBA
IC05OTYsMTU1ICs2MTgsNiBAQCBTdHJpbmcuZm9ybWF0ID0gZnVuY3Rpb24oZm9ybWF0LCBzdWJz
dGl0dXRpb25zLCBmb3JtYXR0ZXJzLCBpbml0aWFsVmFsdWUsIGFwcGVuZAogICAgIHJldHVybiB7
IGZvcm1hdHRlZFJlc3VsdDogcmVzdWx0LCB1bnVzZWRTdWJzdGl0dXRpb25zOiB1bnVzZWRTdWJz
dGl0dXRpb25zIH07CiB9CiAKLWZ1bmN0aW9uIGlzRW50ZXJLZXkoZXZlbnQpIHsKLSAgICAvLyBD
aGVjayBpZiBpbiBJTUUuCi0gICAgcmV0dXJuIGV2ZW50LmtleUNvZGUgIT09IDIyOSAmJiBldmVu
dC5rZXlJZGVudGlmaWVyID09PSAiRW50ZXIiOwotfQotCi1mdW5jdGlvbiBjb25zdW1lRXZlbnQo
ZSkKLXsKLSAgICBlLmNvbnN1bWUoKTsKLX0KLQotLyoqCi0gKiBAcGFyYW0ge0VsZW1lbnR9IGVs
ZW1lbnQKLSAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQKLSAqIEBwYXJhbSB7bnVtYmVyfSBsZW5n
dGgKLSAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD49fSBkb21DaGFuZ2VzCi0gKi8KLWZ1bmN0aW9u
IGhpZ2hsaWdodFNlYXJjaFJlc3VsdChlbGVtZW50LCBvZmZzZXQsIGxlbmd0aCwgZG9tQ2hhbmdl
cykKLXsKLSAgICB2YXIgcmVzdWx0ID0gaGlnaGxpZ2h0U2VhcmNoUmVzdWx0cyhlbGVtZW50LCBb
e29mZnNldDogb2Zmc2V0LCBsZW5ndGg6IGxlbmd0aCB9XSwgZG9tQ2hhbmdlcyk7Ci0gICAgcmV0
dXJuIHJlc3VsdC5sZW5ndGggPyByZXN1bHRbMF0gOiBudWxsOwotfQotCi0vKioKLSAqIEBwYXJh
bSB7RWxlbWVudH0gZWxlbWVudAotICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gcmVzdWx0UmFu
Z2VzCi0gKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+PX0gY2hhbmdlcwotICovCi1mdW5jdGlvbiBo
aWdobGlnaHRTZWFyY2hSZXN1bHRzKGVsZW1lbnQsIHJlc3VsdFJhbmdlcywgY2hhbmdlcykKLXsK
LSAgICByZXR1cm4gaGlnaGxpZ2h0UmFuZ2VzV2l0aFN0eWxlQ2xhc3MoZWxlbWVudCwgcmVzdWx0
UmFuZ2VzLCAid2Via2l0LXNlYXJjaC1yZXN1bHQiLCBjaGFuZ2VzKTsKLSAgICAKLX0KLQotLyoq
Ci0gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQKLSAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59
IHJlc3VsdFJhbmdlcwotICogQHBhcmFtIHtzdHJpbmd9IHN0eWxlQ2xhc3MKLSAqIEBwYXJhbSB7
QXJyYXkuPE9iamVjdD49fSBjaGFuZ2VzCi0gKi8KLWZ1bmN0aW9uIGhpZ2hsaWdodFJhbmdlc1dp
dGhTdHlsZUNsYXNzKGVsZW1lbnQsIHJlc3VsdFJhbmdlcywgc3R5bGVDbGFzcywgY2hhbmdlcykK
LXsKLSAgICBjaGFuZ2VzID0gY2hhbmdlcyB8fCBbXTsKLSAgICB2YXIgaGlnaGxpZ2h0Tm9kZXMg
PSBbXTsKLSAgICB2YXIgbGluZVRleHQgPSBlbGVtZW50LnRleHRDb250ZW50OwotICAgIHZhciBv
d25lckRvY3VtZW50ID0gZWxlbWVudC5vd25lckRvY3VtZW50OwotICAgIHZhciB0ZXh0Tm9kZVNu
YXBzaG90ID0gb3duZXJEb2N1bWVudC5ldmFsdWF0ZSgiLi8vdGV4dCgpIiwgZWxlbWVudCwgbnVs
bCwgWFBhdGhSZXN1bHQuT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUsIG51bGwpOwotCi0gICAg
dmFyIHNuYXBzaG90TGVuZ3RoID0gdGV4dE5vZGVTbmFwc2hvdC5zbmFwc2hvdExlbmd0aDsKLSAg
ICBpZiAoc25hcHNob3RMZW5ndGggPT09IDApCi0gICAgICAgIHJldHVybiBoaWdobGlnaHROb2Rl
czsKLQotICAgIHZhciBub2RlUmFuZ2VzID0gW107Ci0gICAgdmFyIHJhbmdlRW5kT2Zmc2V0ID0g
MDsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNuYXBzaG90TGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgdmFyIHJhbmdlID0ge307Ci0gICAgICAgIHJhbmdlLm9mZnNldCA9IHJhbmdlRW5kT2Zmc2V0
OwotICAgICAgICByYW5nZS5sZW5ndGggPSB0ZXh0Tm9kZVNuYXBzaG90LnNuYXBzaG90SXRlbShp
KS50ZXh0Q29udGVudC5sZW5ndGg7Ci0gICAgICAgIHJhbmdlRW5kT2Zmc2V0ID0gcmFuZ2Uub2Zm
c2V0ICsgcmFuZ2UubGVuZ3RoOwotICAgICAgICBub2RlUmFuZ2VzLnB1c2gocmFuZ2UpOwotICAg
IH0KLQotICAgIHZhciBzdGFydEluZGV4ID0gMDsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJl
c3VsdFJhbmdlcy5sZW5ndGg7ICsraSkgewotICAgICAgICB2YXIgc3RhcnRPZmZzZXQgPSByZXN1
bHRSYW5nZXNbaV0ub2Zmc2V0OwotICAgICAgICB2YXIgZW5kT2Zmc2V0ID0gc3RhcnRPZmZzZXQg
KyByZXN1bHRSYW5nZXNbaV0ubGVuZ3RoOwotCi0gICAgICAgIHdoaWxlIChzdGFydEluZGV4IDwg
c25hcHNob3RMZW5ndGggJiYgbm9kZVJhbmdlc1tzdGFydEluZGV4XS5vZmZzZXQgKyBub2RlUmFu
Z2VzW3N0YXJ0SW5kZXhdLmxlbmd0aCA8PSBzdGFydE9mZnNldCkKLSAgICAgICAgICAgIHN0YXJ0
SW5kZXgrKzsKLSAgICAgICAgdmFyIGVuZEluZGV4ID0gc3RhcnRJbmRleDsgCi0gICAgICAgIHdo
aWxlIChlbmRJbmRleCA8IHNuYXBzaG90TGVuZ3RoICYmIG5vZGVSYW5nZXNbZW5kSW5kZXhdLm9m
ZnNldCArIG5vZGVSYW5nZXNbZW5kSW5kZXhdLmxlbmd0aCA8IGVuZE9mZnNldCkKLSAgICAgICAg
ICAgIGVuZEluZGV4Kys7Ci0gICAgICAgIGlmIChlbmRJbmRleCA9PT0gc25hcHNob3RMZW5ndGgp
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgICAgIHZhciBoaWdobGlnaHROb2Rl
ID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAgIGhpZ2hsaWdo
dE5vZGUuY2xhc3NOYW1lID0gc3R5bGVDbGFzczsKLSAgICAgICAgaGlnaGxpZ2h0Tm9kZS50ZXh0
Q29udGVudCA9IGxpbmVUZXh0LnN1YnN0cmluZyhzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKLQot
ICAgICAgICB2YXIgbGFzdFRleHROb2RlID0gdGV4dE5vZGVTbmFwc2hvdC5zbmFwc2hvdEl0ZW0o
ZW5kSW5kZXgpOwotICAgICAgICB2YXIgbGFzdFRleHQgPSBsYXN0VGV4dE5vZGUudGV4dENvbnRl
bnQ7Ci0gICAgICAgIGxhc3RUZXh0Tm9kZS50ZXh0Q29udGVudCA9IGxhc3RUZXh0LnN1YnN0cmlu
ZyhlbmRPZmZzZXQgLSBub2RlUmFuZ2VzW2VuZEluZGV4XS5vZmZzZXQpOwotICAgICAgICBjaGFu
Z2VzLnB1c2goeyBub2RlOiBsYXN0VGV4dE5vZGUsIHR5cGU6ICJjaGFuZ2VkIiwgb2xkVGV4dDog
bGFzdFRleHQsIG5ld1RleHQ6IGxhc3RUZXh0Tm9kZS50ZXh0Q29udGVudCB9KTsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChzdGFydEluZGV4ID09PSBlbmRJbmRleCkgewotICAgICAgICAgICAgbGFz
dFRleHROb2RlLnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKGhpZ2hsaWdodE5vZGUsIGxhc3RU
ZXh0Tm9kZSk7Ci0gICAgICAgICAgICBjaGFuZ2VzLnB1c2goeyBub2RlOiBoaWdobGlnaHROb2Rl
LCB0eXBlOiAiYWRkZWQiLCBuZXh0U2libGluZzogbGFzdFRleHROb2RlLCBwYXJlbnQ6IGxhc3RU
ZXh0Tm9kZS5wYXJlbnRFbGVtZW50IH0pOwotICAgICAgICAgICAgaGlnaGxpZ2h0Tm9kZXMucHVz
aChoaWdobGlnaHROb2RlKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgdmFyIHByZWZpeE5v
ZGUgPSBvd25lckRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGxhc3RUZXh0LnN1YnN0cmluZygwLCBz
dGFydE9mZnNldCAtIG5vZGVSYW5nZXNbc3RhcnRJbmRleF0ub2Zmc2V0KSk7Ci0gICAgICAgICAg
ICBsYXN0VGV4dE5vZGUucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUocHJlZml4Tm9kZSwgaGln
aGxpZ2h0Tm9kZSk7Ci0gICAgICAgICAgICBjaGFuZ2VzLnB1c2goeyBub2RlOiBwcmVmaXhOb2Rl
LCB0eXBlOiAiYWRkZWQiLCBuZXh0U2libGluZzogaGlnaGxpZ2h0Tm9kZSwgcGFyZW50OiBsYXN0
VGV4dE5vZGUucGFyZW50RWxlbWVudCB9KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IHZhciBmaXJzdFRleHROb2RlID0gdGV4dE5vZGVTbmFwc2hvdC5zbmFwc2hvdEl0ZW0oc3RhcnRJ
bmRleCk7Ci0gICAgICAgICAgICB2YXIgZmlyc3RUZXh0ID0gZmlyc3RUZXh0Tm9kZS50ZXh0Q29u
dGVudDsKLSAgICAgICAgICAgIHZhciBhbmNob3JFbGVtZW50ID0gZmlyc3RUZXh0Tm9kZS5uZXh0
U2libGluZzsKLQotICAgICAgICAgICAgZmlyc3RUZXh0Tm9kZS5wYXJlbnRFbGVtZW50Lmluc2Vy
dEJlZm9yZShoaWdobGlnaHROb2RlLCBhbmNob3JFbGVtZW50KTsKLSAgICAgICAgICAgIGNoYW5n
ZXMucHVzaCh7IG5vZGU6IGhpZ2hsaWdodE5vZGUsIHR5cGU6ICJhZGRlZCIsIG5leHRTaWJsaW5n
OiBhbmNob3JFbGVtZW50LCBwYXJlbnQ6IGZpcnN0VGV4dE5vZGUucGFyZW50RWxlbWVudCB9KTsK
LSAgICAgICAgICAgIGhpZ2hsaWdodE5vZGVzLnB1c2goaGlnaGxpZ2h0Tm9kZSk7Ci0KLSAgICAg
ICAgICAgIGZpcnN0VGV4dE5vZGUudGV4dENvbnRlbnQgPSBmaXJzdFRleHQuc3Vic3RyaW5nKDAs
IHN0YXJ0T2Zmc2V0IC0gbm9kZVJhbmdlc1tzdGFydEluZGV4XS5vZmZzZXQpOwotICAgICAgICAg
ICAgY2hhbmdlcy5wdXNoKHsgbm9kZTogZmlyc3RUZXh0Tm9kZSwgdHlwZTogImNoYW5nZWQiLCBv
bGRUZXh0OiBmaXJzdFRleHQsIG5ld1RleHQ6IGZpcnN0VGV4dE5vZGUudGV4dENvbnRlbnQgfSk7
Ci0KLSAgICAgICAgICAgIGZvciAodmFyIGogPSBzdGFydEluZGV4ICsgMTsgaiA8IGVuZEluZGV4
OyBqKyspIHsKLSAgICAgICAgICAgICAgICB2YXIgdGV4dE5vZGUgPSB0ZXh0Tm9kZVNuYXBzaG90
LnNuYXBzaG90SXRlbShqKTsKLSAgICAgICAgICAgICAgICB2YXIgdGV4dCA9IHRleHROb2RlLnRl
eHRDb250ZW50OwotICAgICAgICAgICAgICAgIHRleHROb2RlLnRleHRDb250ZW50ID0gIiI7Ci0g
ICAgICAgICAgICAgICAgY2hhbmdlcy5wdXNoKHsgbm9kZTogdGV4dE5vZGUsIHR5cGU6ICJjaGFu
Z2VkIiwgb2xkVGV4dDogdGV4dCwgbmV3VGV4dDogdGV4dE5vZGUudGV4dENvbnRlbnQgfSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgc3RhcnRJbmRleCA9IGVuZEluZGV4Owot
ICAgICAgICBub2RlUmFuZ2VzW3N0YXJ0SW5kZXhdLm9mZnNldCA9IGVuZE9mZnNldDsKLSAgICAg
ICAgbm9kZVJhbmdlc1tzdGFydEluZGV4XS5sZW5ndGggPSBsYXN0VGV4dE5vZGUudGV4dENvbnRl
bnQubGVuZ3RoOwotICAgICAgICAgICAgCi0gICAgfQotICAgIHJldHVybiBoaWdobGlnaHROb2Rl
czsKLX0KLQotZnVuY3Rpb24gYXBwbHlEb21DaGFuZ2VzKGRvbUNoYW5nZXMpCi17Ci0gICAgZm9y
ICh2YXIgaSA9IDAsIHNpemUgPSBkb21DaGFuZ2VzLmxlbmd0aDsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICB2YXIgZW50cnkgPSBkb21DaGFuZ2VzW2ldOwotICAgICAgICBzd2l0Y2ggKGVudHJ5
LnR5cGUpIHsKLSAgICAgICAgY2FzZSAiYWRkZWQiOgotICAgICAgICAgICAgZW50cnkucGFyZW50
Lmluc2VydEJlZm9yZShlbnRyeS5ub2RlLCBlbnRyeS5uZXh0U2libGluZyk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSAiY2hhbmdlZCI6Ci0gICAgICAgICAgICBlbnRyeS5ub2Rl
LnRleHRDb250ZW50ID0gZW50cnkubmV3VGV4dDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfQotfQotCi1mdW5jdGlvbiByZXZlcnREb21DaGFuZ2VzKGRvbUNoYW5nZXMpCi17
Ci0gICAgZm9yICh2YXIgaSA9IGRvbUNoYW5nZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsK
LSAgICAgICAgdmFyIGVudHJ5ID0gZG9tQ2hhbmdlc1tpXTsKLSAgICAgICAgc3dpdGNoIChlbnRy
eS50eXBlKSB7Ci0gICAgICAgIGNhc2UgImFkZGVkIjoKLSAgICAgICAgICAgIGlmIChlbnRyeS5u
b2RlLnBhcmVudEVsZW1lbnQpCi0gICAgICAgICAgICAgICAgZW50cnkubm9kZS5wYXJlbnRFbGVt
ZW50LnJlbW92ZUNoaWxkKGVudHJ5Lm5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgImNoYW5nZWQiOgotICAgICAgICAgICAgZW50cnkubm9kZS50ZXh0Q29udGVudCA9IGVu
dHJ5Lm9sZFRleHQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLX0KLQog
LyoqCiAgKiBAcGFyYW0ge3N0cmluZ30gcXVlcnkKICAqIEBwYXJhbSB7Ym9vbGVhbn0gY2FzZVNl
bnNpdGl2ZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3V0aWxpdGllcy1oaWdo
bGlnaHQtcmVzdWx0cy5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3V0aWxpdGllcy1oaWdo
bGlnaHQtcmVzdWx0cy5odG1sCmluZGV4IDIxYjIzNTMwOGEyM2Q3NjBmNDMyZTRkMDRiZjI0NWNh
NzI0MDRlMWEuLmMzNTM5YTFjNjNlNTExZDk3MmQxNWI2NTM4MWQ2ZTU0Y2JhODNiODAgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci91dGlsaXRpZXMtaGlnaGxpZ2h0LXJlc3VsdHMu
aHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvdXRpbGl0aWVzLWhpZ2hsaWdodC1yZXN1
bHRzLmh0bWwKQEAgLTQwLDExICs0MCwxMSBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICB7CiAgICAg
ICAgIHZhciBjaGFuZ2VzID0gW107CiAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCIt
LS0tLS0tLS0gUnVubmluZyB0ZXN0OiAtLS0tLS0tLS0tIik7Ci0gICAgICAgIGhpZ2hsaWdodFJh
bmdlc1dpdGhTdHlsZUNsYXNzKGVsZW1lbnQsIHJhbmdlcywgImhpZ2hsaWdodGVkIiwgY2hhbmdl
cyk7CisgICAgICAgIFdlYkluc3BlY3Rvci5oaWdobGlnaHRSYW5nZXNXaXRoU3R5bGVDbGFzcyhl
bGVtZW50LCByYW5nZXMsICJoaWdobGlnaHRlZCIsIGNoYW5nZXMpOwogICAgICAgICBJbnNwZWN0
b3JUZXN0LmFkZFJlc3VsdCgiQWZ0ZXIgaGlnaGxpZ2h0OiAiICsgZHVtcFRleHROb2Rlc0FzU3Ry
aW5nKGVsZW1lbnQpKTsKLSAgICAgICAgcmV2ZXJ0RG9tQ2hhbmdlcyhjaGFuZ2VzKTsKKyAgICAg
ICAgV2ViSW5zcGVjdG9yLnJldmVydERvbUNoYW5nZXMoY2hhbmdlcyk7CiAgICAgICAgIEluc3Bl
Y3RvclRlc3QuYWRkUmVzdWx0KCJBZnRlciByZXZlcnQ6ICIgKyBkdW1wVGV4dE5vZGVzQXNTdHJp
bmcoZWxlbWVudCkpOwotICAgICAgICBhcHBseURvbUNoYW5nZXMoY2hhbmdlcyk7CisgICAgICAg
IFdlYkluc3BlY3Rvci5hcHBseURvbUNoYW5nZXMoY2hhbmdlcyk7CiAgICAgICAgIEluc3BlY3Rv
clRlc3QuYWRkUmVzdWx0KCJBZnRlciBhcHBseTogIiArIGR1bXBUZXh0Tm9kZXNBc1N0cmluZyhl
bGVtZW50KSk7CiAgICAgfQogCg==
</data>
<flag name="review"
          id="142059"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
    <flag name="commit-queue"
          id="142060"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>